about summary refs log tree commit diff
path: root/nixpkgs/pkgs/tools
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/tools')
-rw-r--r--nixpkgs/pkgs/tools/X11/alttab/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/X11/arandr/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/X11/autocutsel/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/bevelbar/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/X11/bgs/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/X11/bumblebee/default.nix146
-rw-r--r--nixpkgs/pkgs/tools/X11/bumblebee/nixos.patch80
-rw-r--r--nixpkgs/pkgs/tools/X11/caffeine-ng/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/X11/caffeine-ng/fix-build.patch24
-rw-r--r--nixpkgs/pkgs/tools/X11/ckbcomp/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/X11/devour/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/X11/dex/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/X11/dispad/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/X11/ffcast/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/X11/find-cursor/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/X11/focus/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/X11/go-sct/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/X11/gobble/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/X11/grobi/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/hsetroot/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/X11/icon-slicer/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/X11/imwheel/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/X11/inputplug/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/X11/jumpapp/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/kdocker/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/X11/keynav/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/X11/ksuperkey/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/X11/libstrangle/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/X11/libstrangle/nixos.patch43
-rw-r--r--nixpkgs/pkgs/tools/X11/mmutils/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/X11/ncview/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/X11/nitrogen/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/X11/numlockx/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/X11/nx-libs/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/X11/obconf/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/X11/opentabletdriver/default.nix127
-rw-r--r--nixpkgs/pkgs/tools/X11/opentabletdriver/deps.nix229
-rw-r--r--nixpkgs/pkgs/tools/X11/opentabletdriver/remove-git-from-generate-rules.patch22
-rwxr-xr-xnixpkgs/pkgs/tools/X11/opentabletdriver/update.sh24
-rw-r--r--nixpkgs/pkgs/tools/X11/paperview/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/X11/pmenu/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/X11/primus/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/X11/primus/lib.nix60
-rw-r--r--nixpkgs/pkgs/tools/X11/ratmen/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/X11/run-scaled/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/runningx/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/X11/sbs/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/X11/screen-message/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/X11/sct/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/X11/setroot/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/X11/skippy-xd/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/X11/smart-wallpaper/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/X11/srandrd/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/X11/sselp/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/X11/vdpauinfo/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/X11/virtualgl/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/virtualgl/lib.nix48
-rw-r--r--nixpkgs/pkgs/tools/X11/wayv/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/X11/wmctrl/64-bit-data.patch32
-rw-r--r--nixpkgs/pkgs/tools/X11/wmctrl/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/X11/wmutils-core/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/X11/wmutils-libwm/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/wmutils-opt/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/wpgtk/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/X11/x11spice/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/X11/x11vnc/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/X11/x2vnc/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/x2x/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/X11/xannotate/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/X11/xautomation/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/X11/xbanish/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/X11/xbindkeys-config/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config-patch1.patch108
-rw-r--r--nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config.121
-rw-r--r--nixpkgs/pkgs/tools/X11/xbindkeys/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/X11/xborders/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/X11/xborders/setup.py12
-rw-r--r--nixpkgs/pkgs/tools/X11/xbrightness/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/X11/xcalib/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/X11/xcape/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/X11/xchainkeys/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/X11/xcwd/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/X11/xdg-user-dirs/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/X11/xdg-utils/allow-forcing-portal-use.patch29
-rw-r--r--nixpkgs/pkgs/tools/X11/xdg-utils/default.nix268
-rw-r--r--nixpkgs/pkgs/tools/X11/xdotool/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/xdragon/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/X11/xgeometry-select/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/X11/xidlehook/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/X11/xinput_calibrator/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/X11/xkb-switch-i3/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/X11/xkb-switch/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/xkbset/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/X11/xkbvalidate/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/X11/xkbvalidate/xkbvalidate.c150
-rw-r--r--nixpkgs/pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py53
-rw-r--r--nixpkgs/pkgs/tools/X11/xkeysnail/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/X11/xlayoutdisplay/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/X11/xloadimage/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/X11/xlogo/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/X11/xmacro/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/X11/xmagnify/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/X11/xmcp/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/X11/xmousepasteblock/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/X11/xnee/default.nix100
-rw-r--r--nixpkgs/pkgs/tools/X11/xnotify/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/X11/xob/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/X11/xplugd/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/xpointerbarrier/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/0002-Constant-DPI.patch96
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/0003-fix-pointer-limits.patch39
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/default.nix219
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/fix-122159.patch16
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/fix-41106.patch15
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/fix-paths.patch37
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/libfakeXinerama.nix33
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/nvenc.pc11
-rwxr-xr-xnixpkgs/pkgs/tools/X11/xpra/update.sh5
-rw-r--r--nixpkgs/pkgs/tools/X11/xprintidle-ng/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/X11/xprintidle-ng/fix-config_h-includes-should-be-first.patch62
-rw-r--r--nixpkgs/pkgs/tools/X11/xprintidle/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/X11/xprompt/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/X11/xrectsel/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/xrestop/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/X11/xsecurelock/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/X11/xsettingsd/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/xssstate/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/X11/xtrace/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/xtruss/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/X11/xvkbd/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/X11/xwallpaper/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/X11/xwinmosaic/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/X11/xwinwrap/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/X11/xzoom/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/admin/acme-sh/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/admin/afterburn/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/admin/aliyun-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/amazon-ec2-utils/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/admin/analog/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/admin/ansible/doctor.nix67
-rw-r--r--nixpkgs/pkgs/tools/admin/ansible/later.nix87
-rw-r--r--nixpkgs/pkgs/tools/admin/ansible/lint.nix96
-rw-r--r--nixpkgs/pkgs/tools/admin/auth0-cli/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-assume-role/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-encryption-sdk-cli/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-env/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-env/deps.nix12
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-google-auth/default.nix83
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-mfa/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-nuke/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-rotate-key/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-sso-cli/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-sso-creds/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-vault/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/admin/awscli/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/admin/awscli2/default.nix152
-rw-r--r--nixpkgs/pkgs/tools/admin/awslimitchecker/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/admin/awslimitchecker/version.patch35
-rw-r--r--nixpkgs/pkgs/tools/admin/awslogs/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/admin/awsls/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/admin/awsrm/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/admin/awsume/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/admin/awsweeper/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/admin/azure-cli/default.nix290
-rw-r--r--nixpkgs/pkgs/tools/admin/azure-cli/python-packages.nix235
-rw-r--r--nixpkgs/pkgs/tools/admin/balena-cli/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/admin/bash-my-aws/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/admin/berglas/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/admin/bluemix-cli/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/admin/bom/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/admin/boulder/default.nix101
-rw-r--r--nixpkgs/pkgs/tools/admin/boulder/no-build-id-test.patch15
-rw-r--r--nixpkgs/pkgs/tools/admin/bubblewrap/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/admin/cdist/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/admin/certigo/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/admin/cf-vault/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/admin/chamber/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/admin/chkcrontab/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/admin/cjdns-tools/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/admin/cjdns-tools/wrapper.sh29
-rw-r--r--nixpkgs/pkgs/tools/admin/clair/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/admin/cli53/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/coldsnap/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/colmena/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/admin/copilot-cli/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/admin/credhub-cli/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/admin/cw/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/admin/daemontools/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/admin/daemontools/fix-nix-usernamespace-build.patch10
-rw-r--r--nixpkgs/pkgs/tools/admin/damon/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/admin/dehydrated/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/admin/docker-credential-gcr/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/admin/docker-credential-helpers/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/admin/drawterm/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/admin/ejson2env/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/admin/elasticsearch-curator/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/admin/exoscale-cli/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/admin/fastlane/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/admin/fastlane/Gemfile.lock214
-rw-r--r--nixpkgs/pkgs/tools/admin/fastlane/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/admin/fastlane/gemset.nix893
-rw-r--r--nixpkgs/pkgs/tools/admin/fbvnc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/admin/fioctl/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/admin/fits-cloudctl/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/admin/gam/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/admin/gam/signal_files_as_env_vars.patch38
-rw-r--r--nixpkgs/pkgs/tools/admin/gimme-aws-creds/default.nix101
-rw-r--r--nixpkgs/pkgs/tools/admin/gixy/default.nix62
-rwxr-xr-xnixpkgs/pkgs/tools/admin/google-cloud-sdk/alpha__init__.py23
-rwxr-xr-xnixpkgs/pkgs/tools/admin/google-cloud-sdk/beta__init__.py23
-rw-r--r--nixpkgs/pkgs/tools/admin/google-cloud-sdk/components.json7171
-rw-r--r--nixpkgs/pkgs/tools/admin/google-cloud-sdk/components.nix181
-rw-r--r--nixpkgs/pkgs/tools/admin/google-cloud-sdk/data.nix32
-rw-r--r--nixpkgs/pkgs/tools/admin/google-cloud-sdk/default.nix133
-rw-r--r--nixpkgs/pkgs/tools/admin/google-cloud-sdk/gcloud-path.patch44
-rw-r--r--nixpkgs/pkgs/tools/admin/google-cloud-sdk/gsutil-disable-updates.patch47
-rwxr-xr-xnixpkgs/pkgs/tools/admin/google-cloud-sdk/update.sh50
-rw-r--r--nixpkgs/pkgs/tools/admin/google-cloud-sdk/withExtraComponents.nix62
-rw-r--r--nixpkgs/pkgs/tools/admin/granted/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/admin/gtk-vnc/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/admin/hedgedoc-cli/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/admin/hop-cli/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/admin/iamy/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/admin/ibmcloud-cli/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/admin/infra/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/admin/iredis/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/admin/itamae/Gemfile9
-rw-r--r--nixpkgs/pkgs/tools/admin/itamae/Gemfile.lock42
-rw-r--r--nixpkgs/pkgs/tools/admin/itamae/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/admin/itamae/gemset.nix156
-rw-r--r--nixpkgs/pkgs/tools/admin/kics/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/admin/lego/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/lxd/default.nix94
-rw-r--r--nixpkgs/pkgs/tools/admin/lxd/ui.nix70
-rw-r--r--nixpkgs/pkgs/tools/admin/lxd/wrapper.nix133
-rw-r--r--nixpkgs/pkgs/tools/admin/manta/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/admin/meraki-cli/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/admin/meshcentral/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/admin/meshcentral/fix-js-include-paths.patch31
-rw-r--r--nixpkgs/pkgs/tools/admin/meshcentral/package.json143
-rwxr-xr-xnixpkgs/pkgs/tools/admin/meshcentral/update.sh54
-rw-r--r--nixpkgs/pkgs/tools/admin/meshcentral/yarn.lock11042
-rw-r--r--nixpkgs/pkgs/tools/admin/mycli/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/admin/netbox2netshot/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/admin/netplan/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/admin/nomachine-client/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/admin/oci-cli/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/admin/okta-aws-cli/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/admin/ossutil/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/admin/oxidized/Gemfile11
-rw-r--r--nixpkgs/pkgs/tools/admin/oxidized/Gemfile.lock90
-rw-r--r--nixpkgs/pkgs/tools/admin/oxidized/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/admin/oxidized/gemset.nix326
-rw-r--r--nixpkgs/pkgs/tools/admin/pbm/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/admin/pebble/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/pgadmin/check-system-config-dir.patch15
-rw-r--r--nixpkgs/pkgs/tools/admin/pgadmin/default.nix248
-rw-r--r--nixpkgs/pkgs/tools/admin/pgadmin/expose-setup.py.patch40
-rwxr-xr-xnixpkgs/pkgs/tools/admin/pgadmin/update.sh110
-rw-r--r--nixpkgs/pkgs/tools/admin/pgadmin/yarn.lock12723
-rw-r--r--nixpkgs/pkgs/tools/admin/procs/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/admin/proxmove/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/admin/pulsarctl/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-bin/data.nix639
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-bin/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-bin/update-pulumi-shell.nix7
-rwxr-xr-xnixpkgs/pkgs/tools/admin/pulumi-bin/update.sh159
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-packages/base.nix135
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-packages/default.nix14
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-aws-native.nix34
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-azure-native.nix39
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-command.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-go.nix27
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-nodejs.nix30
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-python.nix35
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-random.nix23
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi/default.nix141
-rw-r--r--nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/Gemfile.lock202
-rw-r--r--nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/gemset.nix842
-rw-r--r--nixpkgs/pkgs/tools/admin/qovery-cli/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/darwin.nix28
-rw-r--r--nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/linux.nix46
-rw-r--r--nixpkgs/pkgs/tools/admin/rhoas/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/admin/rset/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/admin/rset/paths.patch131
-rw-r--r--nixpkgs/pkgs/tools/admin/s3bro/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/admin/salt/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/admin/salt/fix-libcrypto-loading.patch13
-rw-r--r--nixpkgs/pkgs/tools/admin/scaleway-cli/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/admin/scalr-cli/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/admin/sec/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/sewer/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/admin/simp_le/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/admin/simplotask/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/admin/ssh-import-id/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/admin/ssl-cert-check/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/admin/ssmsh/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/stripe-cli/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/admin/swapspace/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/admin/syft/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/admin/synapse-admin/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/admin/synapse-admin/package.json67
-rw-r--r--nixpkgs/pkgs/tools/admin/synapse-admin/yarn.lock11253
-rw-r--r--nixpkgs/pkgs/tools/admin/tigervnc/default.nix161
-rw-r--r--nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15678.patch18
-rw-r--r--nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15679.patch19
-rw-r--r--nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15680.patch16
-rw-r--r--nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-8287.patch14
-rw-r--r--nixpkgs/pkgs/tools/admin/tightvnc/default.nix116
-rw-r--r--nixpkgs/pkgs/tools/admin/tlsclient/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/admin/trinsic-cli/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/admin/triton/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/admin/trivy/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/admin/try/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/admin/turbovnc/default.nix144
-rw-r--r--nixpkgs/pkgs/tools/admin/uacme/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/admin/virtscreen/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/admin/wander/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/admin/winbox/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/admin/zbctl/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/archivers/7zz/default.nix137
-rw-r--r--nixpkgs/pkgs/tools/archivers/7zz/fix-cross-mingw-build.patch154
-rw-r--r--nixpkgs/pkgs/tools/archivers/7zz/fix-empty-expr-stmt.patch184
-rwxr-xr-xnixpkgs/pkgs/tools/archivers/7zz/update.sh51
-rw-r--r--nixpkgs/pkgs/tools/archivers/afio/0001-makefile-fix-installation.patch45
-rw-r--r--nixpkgs/pkgs/tools/archivers/afio/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/archivers/arc_unpacker/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/archivers/arj/default.nix155
-rw-r--r--nixpkgs/pkgs/tools/archivers/atool/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/archivers/bomutils/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/archivers/cabextract/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/archivers/cpio/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/archivers/cromfs/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/archivers/ctrtool/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/archivers/dumpnar/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/archivers/fsarchiver/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/archivers/gbl/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/archivers/gnutar/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/archivers/innoextract/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/archivers/lha/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/archivers/maxcso/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/archivers/ndstool/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/archivers/p7zip/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/archivers/p7zip/setup-hook.sh5
-rwxr-xr-xnixpkgs/pkgs/tools/archivers/p7zip/update.sh47
-rw-r--r--nixpkgs/pkgs/tools/archivers/pax/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/archivers/payload-dumper-go/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/archivers/payload_dumper/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/archivers/peazip/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/archivers/pxattr/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/archivers/quickbms/0002-disable-openssl.patch10
-rw-r--r--nixpkgs/pkgs/tools/archivers/quickbms/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/archivers/rar/default.nix75
-rwxr-xr-xnixpkgs/pkgs/tools/archivers/rar/update.sh78
-rw-r--r--nixpkgs/pkgs/tools/archivers/rpm2targz/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/archivers/rpmextract/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/archivers/rpmextract/rpmextract.sh10
-rw-r--r--nixpkgs/pkgs/tools/archivers/runzip/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/archivers/s-tar/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/archivers/sharutils/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/archivers/snzip/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/archivers/torrent7z/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/archivers/unar/default.nix100
-rw-r--r--nixpkgs/pkgs/tools/archivers/undmg/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/archivers/undmg/setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/tools/archivers/unp/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/archivers/unrar-wrapper/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/archivers/unrar-wrapper/setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/tools/archivers/unrar/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/archivers/unrar/setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/tools/archivers/unshield/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8139.diff47
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8140.diff26
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8141.diff136
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9636.diff42
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9913.patch29
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7696.diff66
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7697.diff36
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2016-9844.patch28
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2018-18384.patch35
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/default.nix107
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/dont-hardcode-cc.patch14
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/implicit-declarations-fix.patch21
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/setup-hook.sh11
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzoo/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/archivers/wimlib/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/archivers/xarchive/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/archivers/xarchiver/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/archivers/zarchive/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/archivers/zip/buffer-overflow-on-utf8-rh-bug-2165653.patch12
-rw-r--r--nixpkgs/pkgs/tools/archivers/zip/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/archivers/zip/fix-implicit-declarations.patch21
-rw-r--r--nixpkgs/pkgs/tools/archivers/zip/fix-memset-detection.patch15
-rw-r--r--nixpkgs/pkgs/tools/archivers/zip/natspec-gentoo.patch.bz2bin0 -> 1914 bytes
-rw-r--r--nixpkgs/pkgs/tools/archivers/zpaq/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.nix40
-rw-r--r--nixpkgs/pkgs/tools/audio/abcm2ps/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/audio/abcmidi/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/audio/accuraterip-checksum/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/audio/acousticbrainz-client/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/audio/alsaequal/caps_9.x.patch21
-rw-r--r--nixpkgs/pkgs/tools/audio/alsaequal/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/audio/alsaequal/false_error.patch13
-rw-r--r--nixpkgs/pkgs/tools/audio/alsaequal/makefile.patch13
-rw-r--r--nixpkgs/pkgs/tools/audio/asap/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/audio/audiowaveform/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/audio/bark/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/builtin-plugins.nix139
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/common.nix170
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/patches/bash-completion-always-print.patch44
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/patches/fix-embedart-imagick-7.1.1-12.patch13
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/patches/fix-pillow10-compat.patch13
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/patches/unstable-bash-completion-always-print.patch45
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/plugins/alternatives.nix32
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/plugins/copyartifacts.nix34
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/plugins/extrafiles.nix37
-rw-r--r--nixpkgs/pkgs/tools/audio/botamusique/catch-invalid-versions.patch24
-rw-r--r--nixpkgs/pkgs/tools/audio/botamusique/default.nix157
-rw-r--r--nixpkgs/pkgs/tools/audio/botamusique/no-runtime-update.patch12
-rw-r--r--nixpkgs/pkgs/tools/audio/botamusique/src.json13
-rw-r--r--nixpkgs/pkgs/tools/audio/botamusique/unconditional-relative-state-paths.patch22
-rw-r--r--nixpkgs/pkgs/tools/audio/bpm-tools/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/audio/catnip-gtk4/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/audio/catnip/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/audio/darkice/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/audio/darkice/fix-undeclared-memmove.patch13
-rw-r--r--nixpkgs/pkgs/tools/audio/dl-librescore/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/audio/dsp/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/audio/essentia-extractor/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/audio/ezstream/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/audio/glyr/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/audio/goxlr-utility/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/audio/gvolicon/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/audio/headset-charge-indicator/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/audio/headsetcontrol/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/audio/isrcsubmit/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/audio/kaldi/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/audio/linuxwave/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/audio/liquidsoap/full.nix140
-rw-r--r--nixpkgs/pkgs/tools/audio/loudgain/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/audio/mictray/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/audio/midicsv/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/audio/midimonster/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/audio/mp3cat/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/audio/mpd-discord-rpc/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/audio/mpd-mpris/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/audio/mpd-notification/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/audio/mpd-sima/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdas/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdcron/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdcron/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdcron/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdcron/fix-canonicalize-conflict-with-glibc.patch22
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdcron/gemset.nix36
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdris2/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/audio/mpris-scrobbler/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/audio/nanotts/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/audio/openai-whisper-cpp/default.nix127
-rw-r--r--nixpkgs/pkgs/tools/audio/openai-whisper-cpp/download-models.patch51
-rw-r--r--nixpkgs/pkgs/tools/audio/opl3bankeditor/0001-opl3bankeditor-Look-for-system-installed-Rt-libs.patch200
-rw-r--r--nixpkgs/pkgs/tools/audio/opl3bankeditor/0001-opn2bankeditor-Look-for-system-installed-Rt-libs.patch200
-rw-r--r--nixpkgs/pkgs/tools/audio/opl3bankeditor/common.nix68
-rw-r--r--nixpkgs/pkgs/tools/audio/opl3bankeditor/default.nix9
-rw-r--r--nixpkgs/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix9
-rw-r--r--nixpkgs/pkgs/tools/audio/pa-applet/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/audio/pasystray/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/audio/patray/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/audio/picotts/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/audio/piper/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/audio/piper/train.nix54
-rw-r--r--nixpkgs/pkgs/tools/audio/playerctl/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/audio/pnmixer/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/audio/pulsemixer/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/audio/pw-volume/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/audio/qastools/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/audio/shaq/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/audio/spotdl/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/audio/stt/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/audio/tidal-dl/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/audio/trx/add_bctoolbox_ldlib.patch15
-rw-r--r--nixpkgs/pkgs/tools/audio/trx/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/audio/tts/default.nix200
-rw-r--r--nixpkgs/pkgs/tools/audio/unflac/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/audio/vgmtools/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/audio/video2midi/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/audio/volctl/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/audio/volumeicon/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/audio/whisper-ctranslate2/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/audio/wyoming/faster-whisper.nix50
-rw-r--r--nixpkgs/pkgs/tools/audio/wyoming/openwakeword.nix44
-rw-r--r--nixpkgs/pkgs/tools/audio/wyoming/piper.nix45
-rw-r--r--nixpkgs/pkgs/tools/audio/yabridge/default.nix167
-rw-r--r--nixpkgs/pkgs/tools/audio/yabridge/hardcode-dependencies.patch26
-rw-r--r--nixpkgs/pkgs/tools/audio/yabridge/libyabridge-from-nix-profiles.patch71
-rw-r--r--nixpkgs/pkgs/tools/audio/yabridgectl/Cargo.lock936
-rw-r--r--nixpkgs/pkgs/tools/audio/yabridgectl/chainloader-from-nix-profiles.patch72
-rw-r--r--nixpkgs/pkgs/tools/audio/yabridgectl/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/audio/yabridgectl/remove-dependency-verification.patch19
-rw-r--r--nixpkgs/pkgs/tools/backup/android-backup-extractor/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/backup/automysqlbackup/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/backup/autorestic/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/backup/awsbck/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/backup/bacula/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/backup/bakelite/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/backup/bdsync/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/backup/borgbackup/default.nix141
-rw-r--r--nixpkgs/pkgs/tools/backup/borgmatic/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/backup/btar/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/backup/btrbk/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/backup/bup/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/backup/bupstash/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/backup/burp/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/backup/chunksync/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/backup/conserve/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/backup/dar/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/backup/dedup/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/backup/dirvish/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/backup/discordchatexporter-cli/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/backup/discordchatexporter-cli/deps.nix23
-rwxr-xr-xnixpkgs/pkgs/tools/backup/discordchatexporter-cli/updater.sh15
-rw-r--r--nixpkgs/pkgs/tools/backup/diskrsync/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/backup/dump/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicacy/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicati/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicity/default.nix130
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicity/gnutar-in-test.patch20
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch16
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch63
-rw-r--r--nixpkgs/pkgs/tools/backup/duply/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/backup/easysnap/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/backup/fabs/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/backup/flockit/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/backup/gamerbackup/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/backup/gh2md/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/backup/gphotos-sync/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/backup/gphotos-sync/skip-network-tests.patch21
-rw-r--r--nixpkgs/pkgs/tools/backup/gyb/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/backup/hpe-ltfs/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/backup/hpe-ltfs/remove-sysctl.patch14
-rw-r--r--nixpkgs/pkgs/tools/backup/httrack/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/backup/httrack/qt.nix39
-rw-r--r--nixpkgs/pkgs/tools/backup/iceshelf/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/backup/kopia/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/backup/luckybackup/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/backup/lvmsync/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/backup/lvmsync/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/backup/lvmsync/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/backup/lvmsync/gemset.nix36
-rw-r--r--nixpkgs/pkgs/tools/backup/mastodon-archive/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/backup/monolith/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/backup/mt-st/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/backup/mtx/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/backup/mydumper/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/backup/mylvmbackup/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/backup/partclone/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/backup/partimage/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/backup/partimage/gentoos-zlib.patch33
-rw-r--r--nixpkgs/pkgs/tools/backup/percona-xtrabackup/8_0.nix17
-rw-r--r--nixpkgs/pkgs/tools/backup/percona-xtrabackup/abi-check.patch18
-rw-r--r--nixpkgs/pkgs/tools/backup/percona-xtrabackup/generic.nix57
-rw-r--r--nixpkgs/pkgs/tools/backup/pgbackrest/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/backup/pyznap/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/backup/rdedup/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/backup/rdiff-backup/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/backup/rdup/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/backup/restic/0001-Skip-testing-restore-with-permission-failure.patch25
-rw-r--r--nixpkgs/pkgs/tools/backup/restic/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/backup/restic/rest-server.nix23
-rw-r--r--nixpkgs/pkgs/tools/backup/rotate-backups/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/backup/rsbep/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/backup/rsnapshot/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/backup/rustic-rs/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/backup/s3ql/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/backup/sanoid/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/backup/sigtop/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/backup/stenc/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/backup/store-backup/default.nix110
-rw-r--r--nixpkgs/pkgs/tools/backup/tarsnap/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/backup/tarsnapper/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/backup/tsm-client/default.nix208
-rw-r--r--nixpkgs/pkgs/tools/backup/tsm-client/test-cli.nix58
-rw-r--r--nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/eggs.nix431
-rw-r--r--nixpkgs/pkgs/tools/backup/ugarit/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/backup/ugarit/eggs.nix486
-rw-r--r--nixpkgs/pkgs/tools/backup/wal-e/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/backup/wal-g/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/backup/zbackup/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/backup/zbackup/protobuf-api-change.patch11
-rw-r--r--nixpkgs/pkgs/tools/backup/zfs-autobackup/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/backup/zfs-prune-snapshots/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/backup/zfs-replicate/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/backup/zfsbackup/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/backup/zfsnap/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/backup/znapzend/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/backup/zrepl/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/blueberry/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/blueman/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/bluewalker/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/obex-data-server/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch56
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/obexd/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/obexfs/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/obexftp/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/openobex/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/bootloaders/refind/0001-toolchain.patch27
-rw-r--r--nixpkgs/pkgs/tools/bootloaders/refind/default.nix137
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/bchunk/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/bootiso/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/brasero/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/brasero/remove-symlink-check.patch29
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/brasero/wrapper.nix18
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/ccd2iso/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdi2iso/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdimgtools/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdimgtools/nrgtool_fix_my.patch12
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdimgtools/removed_dvdcss_interface_2.patch53
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrdao/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.11-fno-common.patch11
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.9-efi-boot.patch204
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrkit/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrkit/include-path.patch9
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrtools/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cue2pops/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cuetools/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/darwin.patch17
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvd-vr/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvdisaster/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvdisaster/dvdrom.patch19
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvdisaster/encryption.patch19
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/iat/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/isolyzer/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/isomd5sum/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/lsdvd/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/mdf2iso/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/mkcue/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/nrg2iso/c-compiler.patch11
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/nrg2iso/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/sacd/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/fix-validation.patch13
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/simplify-macOS-builds.patch31
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/uif2iso/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/unetbootin/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/vobcopy/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/vobsub2srt/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/compression/advancecomp/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/compression/asar/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/compression/asar/package.json62
-rw-r--r--nixpkgs/pkgs/tools/compression/brotli/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/compression/bsc/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/compression/bsdiff/CVE-2020-14315.patch384
-rw-r--r--nixpkgs/pkgs/tools/compression/bsdiff/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/compression/bsdiff/include-systypes.patch12
-rw-r--r--nixpkgs/pkgs/tools/compression/bzip2/1_1.nix47
-rw-r--r--nixpkgs/pkgs/tools/compression/bzip2/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/compression/bzip3/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/compression/crabz/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/compression/dejsonlz4/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/compression/dtrx/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/compression/efficient-compression-tool/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/compression/efficient-compression-tool/use-nixpkgs-libpng.patch108
-rw-r--r--nixpkgs/pkgs/tools/compression/flips/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/compression/flips/use-system-libdivsufsort.patch15
-rw-r--r--nixpkgs/pkgs/tools/compression/gzip/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/compression/gzrt/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/compression/hacpack/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/compression/hactool/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/compression/hactool/musl-compat.patch13
-rw-r--r--nixpkgs/pkgs/tools/compression/heatshrink/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/compression/imagelol/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/compression/keka/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/compression/kzipmix/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/compression/lbzip2/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/compression/lhasa/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/compression/lrzip/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/compression/lz4/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/compression/lzbench/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/compression/lzfse/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/compression/lzham/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/compression/lzip/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/compression/lzip/lzip-setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/tools/compression/lzip/mingw-install-exe-file.patch13
-rw-r--r--nixpkgs/pkgs/tools/compression/lziprecover/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/compression/lzop/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/compression/mozlz4a/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/compression/ncompress/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/compression/nx2elf/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/compression/offzip/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/compression/orz/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/compression/ouch/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/compression/pbzip2/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/compression/pbzx/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/compression/pigz/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/compression/pixz/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/compression/pxz/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/compression/pxz/flush-stdout-help-version.patch32
-rw-r--r--nixpkgs/pkgs/tools/compression/rzip/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/compression/unzrip/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/compression/upx/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/compression/xar/0001-Add-useless-descriptions-to-AC_DEFINE.patch95
-rw-r--r--nixpkgs/pkgs/tools/compression/xar/0002-Use-pkg-config-for-libxml2.patch89
-rw-r--r--nixpkgs/pkgs/tools/compression/xar/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/compression/xdelta/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/compression/xdelta/unstable.nix66
-rw-r--r--nixpkgs/pkgs/tools/compression/xz/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/compression/zdelta/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/compression/zfp/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/compression/zopfli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/compression/zstd/default.nix129
-rw-r--r--nixpkgs/pkgs/tools/compression/zstd/playtests-darwin.patch40
-rw-r--r--nixpkgs/pkgs/tools/compression/zsync/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/dotool/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/dotool/fix-paths.patch33
-rw-r--r--nixpkgs/pkgs/tools/filesystems/9pfs/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/aefs/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/filesystems/afpfs-ng/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/afsctool/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/filesystems/android-file-transfer/darwin-dont-vendor-dependencies.patch21
-rw-r--r--nixpkgs/pkgs/tools/filesystems/android-file-transfer/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/filesystems/apfs-fuse/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/filesystems/archivemount/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/filesystems/avfs/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bashmount/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch52
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch22
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bcachefs-tools/Cargo.lock871
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bcachefs-tools/default.nix123
-rwxr-xr-xnixpkgs/pkgs/tools/filesystems/bees/bees-service-wrapper227
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bees/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bindfs/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/filesystems/blobfuse/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bonnie/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/filesystems/boxfs/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/filesystems/boxfs/work-around-API-borkage.patch15
-rw-r--r--nixpkgs/pkgs/tools/filesystems/btrfs-heatmap/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/filesystems/btrfs-progs/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/filesystems/btrfs-snap/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/catcli/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ceph-csi/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ceph/default.nix462
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ceph/python-cryptography-Cherry-pick-fix-for-CVE-2023-49083-on-cryptography-40.patch44
-rw-r--r--nixpkgs/pkgs/tools/filesystems/chunkfs/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ciopfs/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/filesystems/cpcfs/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/filesystems/cryfs/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/filesystems/curlftpfs/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/filesystems/curlftpfs/fix-rpl_malloc.patch13
-rw-r--r--nixpkgs/pkgs/tools/filesystems/curlftpfs/suse-bug-580609.patch10
-rw-r--r--nixpkgs/pkgs/tools/filesystems/curlftpfs/suse-bug-955687.patch11
-rw-r--r--nixpkgs/pkgs/tools/filesystems/darling-dmg/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/davfs2/0001-umount_davfs-substitute-ps-command.patch25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/davfs2/0002-Make-sure-that-the-setuid-wrapped-umount-is-invoked.patch26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/davfs2/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/filesystems/davfs2/disable-suid.patch9
-rw-r--r--nixpkgs/pkgs/tools/filesystems/davfs2/fix-sysconfdir.patch30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/dduper/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/filesystems/disk-inventory-x/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/filesystems/dislocker/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/filesystems/disorderfs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/djmount/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/filesystems/dosfstools/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/filesystems/duff/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/filesystems/dupe-krill/Cargo.lock339
-rw-r--r--nixpkgs/pkgs/tools/filesystems/dupe-krill/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/duperemove/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/filesystems/dwarfs/default.nix101
-rw-r--r--nixpkgs/pkgs/tools/filesystems/dwarfs/version_info.patch58
-rw-r--r--nixpkgs/pkgs/tools/filesystems/dysk/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/filesystems/e2fsprogs/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/filesystems/e2tools/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/eiciel/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/filesystems/encfs/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/filesystems/envfs/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/filesystems/erofs-utils/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/filesystems/exfat/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/exfatprogs/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ext4magic/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ext4magic/glibc-fix.patch12
-rw-r--r--nixpkgs/pkgs/tools/filesystems/extundelete/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/f2fs-tools/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/f2fs-tools/f2fs-tools-cross-fix.patch29
-rw-r--r--nixpkgs/pkgs/tools/filesystems/f3/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fatresize/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fatsort/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/filesystems/file-rename/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/no-pthread.patch11
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/zero-init-fuse-operations.patch13
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuse-archive/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuse-ext2/darwin-no-installer.patch31
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuse-ext2/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuse-ext2/remove-impure-paths.patch35
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuse-overlayfs/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuseiso/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fwanalyzer/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/filesystems/garage/default.nix110
-rw-r--r--nixpkgs/pkgs/tools/filesystems/gcsfuse/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/filesystems/genext2fs/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/filesystems/genimage/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/genromfs/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/gfs2-utils/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/gitfs/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/filesystems/glusterfs/default.nix207
-rw-r--r--nixpkgs/pkgs/tools/filesystems/glusterfs/ssl_cert_path.patch23
-rw-r--r--nixpkgs/pkgs/tools/filesystems/go-mtpfs/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/filesystems/gocryptfs/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/filesystems/goofys/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/filesystems/gpart/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/filesystems/grive2/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/filesystems/hfsprogs/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/filesystems/httm/Cargo.lock1332
-rw-r--r--nixpkgs/pkgs/tools/filesystems/httm/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/filesystems/httpdirfs/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/filesystems/httpfs/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/filesystems/hubicfuse/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ifuse/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ioztat/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/filesystems/irods/common.nix57
-rw-r--r--nixpkgs/pkgs/tools/filesystems/irods/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jefferson/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jfsutils/ar-fix.patch10
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jfsutils/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jfsutils/hardening-format.patch37
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jfsutils/types.patch12
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jmtpfs/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/filesystems/juicefs/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/filesystems/kdiskmark/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/filesystems/kio-fuse/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/filesystems/lizardfs/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mergerfs/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mergerfs/tools.nix36
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mhddfs/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mhddfs/fix-format-security-error.patch12
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mkspiffs/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mkspiffs/presets.nix20
-rw-r--r--nixpkgs/pkgs/tools/filesystems/moosefs/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mount-zip/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mountain-duck/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mp3fs/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mtdutils/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mtools/UNUSED-darwin.patch11
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mtools/default.nix31
-rwxr-xr-xnixpkgs/pkgs/tools/filesystems/mtools/update.sh6
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mtpfs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/netatalk/000-no-suid.patch11
-rw-r--r--nixpkgs/pkgs/tools/filesystems/netatalk/001-omit-localstatedir-creation.patch19
-rw-r--r--nixpkgs/pkgs/tools/filesystems/netatalk/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nilfs-utils/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ntfs-3g/autoconf-sbin-helpers.patch98
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ntfs-3g/consistent-sbindir-usage.patch48
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ntfs-3g/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/filesystems/orangefs/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/filesystems/rar2fs/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/filesystems/rdfind/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/filesystems/reiser4progs/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/filesystems/reiserfsprogs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/rmfuse/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/filesystems/rmount/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/filesystems/rnm/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/filesystems/romdirfs/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/s3backer/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/filesystems/s3backer/fix-darwin-builds.patch25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/s3fs/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/filesystems/sandboxfs/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/filesystems/sasquatch/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/filesystems/sdat2img/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/filesystems/securefs/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/filesystems/sftpman/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/simg2img/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/simple-mtpfs/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/smbnetfs/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/filesystems/snapraid/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/squashfs/4k-align.patch100
-rw-r--r--nixpkgs/pkgs/tools/filesystems/squashfs/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/filesystems/squashfuse/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ssdfs-utils/default.nix47
-rwxr-xr-xnixpkgs/pkgs/tools/filesystems/ssdfs-utils/update.sh14
-rw-r--r--nixpkgs/pkgs/tools/filesystems/sshfs-fuse/common.nix62
-rw-r--r--nixpkgs/pkgs/tools/filesystems/sshfs-fuse/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/filesystems/sshfs-fuse/fix-fuse-darwin-h.patch14
-rw-r--r--nixpkgs/pkgs/tools/filesystems/stratis-cli/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/filesystems/stratisd/default.nix122
-rw-r--r--nixpkgs/pkgs/tools/filesystems/stuffbin/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/supertag/cargo-lock-update-lexical-core.patch27
-rw-r--r--nixpkgs/pkgs/tools/filesystems/supertag/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/filesystems/svnfs/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/filesystems/tar2ext4/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/filesystems/tmsu/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/filesystems/tmsu/deps.nix39
-rw-r--r--nixpkgs/pkgs/tools/filesystems/u3-tool/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ubi_reader/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ubidump/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/filesystems/udftools/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/filesystems/unionfs-fuse/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/filesystems/unionfs-fuse/prevent-kill-on-shutdown.patch14
-rw-r--r--nixpkgs/pkgs/tools/filesystems/upspin/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/vmfs-tools/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/filesystems/wdfs/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/filesystems/wiimms-iso-tools/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/filesystems/wiimms-iso-tools/fix-paths.diff12
-rw-r--r--nixpkgs/pkgs/tools/filesystems/wipefreespace/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/filesystems/xfsdump/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/filesystems/xfsprogs/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/filesystems/xtreemfs/default.nix113
-rw-r--r--nixpkgs/pkgs/tools/filesystems/yandex-disk/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/filesystems/zerofree/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/filesystems/zfstools/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/filesystems/zkfuse/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/filesystems/zpool-auto-expand-partitions/Cargo.lock753
-rw-r--r--nixpkgs/pkgs/tools/filesystems/zpool-auto-expand-partitions/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/filesystems/zpool-iostat-viz/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/games/ajour/Cargo.lock4781
-rw-r--r--nixpkgs/pkgs/tools/games/ajour/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/games/alice-tools/default.nix100
-rw-r--r--nixpkgs/pkgs/tools/games/dualsensectl/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/games/er-patcher/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/games/gamemode/default.nix104
-rw-r--r--nixpkgs/pkgs/tools/games/gamemode/preload-nix-workaround.patch12
-rw-r--r--nixpkgs/pkgs/tools/games/joystickwake/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/games/jpsxdec/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/games/minecraft/amidst/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/games/minecraft/fabric-installer/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/games/minecraft/mcaselector/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/games/minecraft/minecraft-server-hibernation/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/games/minecraft/optifine/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/games/minecraft/optifine/generic.nix50
-rwxr-xr-xnixpkgs/pkgs/tools/games/minecraft/optifine/update.py60
-rw-r--r--nixpkgs/pkgs/tools/games/minecraft/optifine/versions.json154
-rw-r--r--nixpkgs/pkgs/tools/games/minecraft/packwiz/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/games/mymcplus/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/games/opentracker/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/games/opentracker/deps.nix215
-rw-r--r--nixpkgs/pkgs/tools/games/opentracker/remove-project.patch14
-rw-r--r--nixpkgs/pkgs/tools/games/pokefinder/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/games/pokefinder/set-desktop-file-name.patch12
-rw-r--r--nixpkgs/pkgs/tools/games/ps3-disc-dumper/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/games/ps3-disc-dumper/deps.nix244
-rw-r--r--nixpkgs/pkgs/tools/games/ps3iso-utils/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/games/scarab/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/games/scarab/deps.nix269
-rwxr-xr-xnixpkgs/pkgs/tools/games/scarab/update.sh16
-rw-r--r--nixpkgs/pkgs/tools/games/slipstream/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/games/steam-acf/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/games/steam-rom-manager/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/games/steamback/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/games/steamtinkerlaunch/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/games/ukmm/Cargo.lock5793
-rw-r--r--nixpkgs/pkgs/tools/games/ukmm/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/games/weidu/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/graphics/aaphoto/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/graphics/adriconf/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/graphics/agi/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/graphics/amber/default.nix101
-rw-r--r--nixpkgs/pkgs/tools/graphics/argyllcms/default.nix154
-rw-r--r--nixpkgs/pkgs/tools/graphics/argyllcms/jam-cross.patch22
-rw-r--r--nixpkgs/pkgs/tools/graphics/astc-encoder/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/graphics/asymptote/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/graphics/barcode/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/graphics/blockhash/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/graphics/blur-effect/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/briss/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/graphics/cfdg/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/graphics/cfdg/src-info-for-default.nix6
-rw-r--r--nixpkgs/pkgs/tools/graphics/cgif/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/graphics/convchain/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/graphics/csv2svg/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/cuneiform/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/graphics/dcraw/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/graphics/deqp-runner/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/diagrams-builder/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/graphics/dippi/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/graphics/directx-shader-compiler/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/graphics/ditaa/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/graphics/dmtx-utils/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/graphics/dnglab/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/graphics/dpic/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/dynamic-wallpaper/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/graphics/editres/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/enblend-enfuse/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/graphics/eplot/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/graphics/epstool/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/graphics/escrotum/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/graphics/esshader/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/graphics/exif/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/graphics/exifprobe/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/graphics/exiftags/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/graphics/facedetect/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/graphics/fbv/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/graphics/feedgnuplot/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/graphics/fgallery/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/graphics/fim/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/graphics/flam3/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/graphics/gfxreconstruct/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/graphics/ggobi/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/graphics/gifsicle/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/gifski/Cargo.lock820
-rw-r--r--nixpkgs/pkgs/tools/graphics/gifski/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/graphics/glee/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/glmark2/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/graphics/glxinfo/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/graphics/gmic-qt/default.nix143
-rw-r--r--nixpkgs/pkgs/tools/graphics/gnuplot/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/graphics/gnuplot/set-gdfontpath-from-fontconfig.sh4
-rw-r--r--nixpkgs/pkgs/tools/graphics/goverlay/default.nix118
-rw-r--r--nixpkgs/pkgs/tools/graphics/goverlay/find-xdg-data-files.patch40
-rw-r--r--nixpkgs/pkgs/tools/graphics/graph-cli/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/graphics/graph-easy/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/graphics/graphviz/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/graphics/grim/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/graphics/gromit-mpx/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/graphics/guff/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/hobbits/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/graphics/ibniz/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/graphics/icoutils/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/graphics/ifm/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/graphics/imageworsener/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/graphics/imgur-screenshot/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/graphics/imgurbash2/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/graphics/jhead/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/graphics/jpegexiforient/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/graphics/leela/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/graphics/lepton/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/libyafaray/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/graphics/logstalgia/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/graphics/lsix/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/graphics/maim/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/graphics/mangohud/default.nix259
-rw-r--r--nixpkgs/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch47
-rw-r--r--nixpkgs/pkgs/tools/graphics/mangohud/preload-nix-workaround.patch39
-rw-r--r--nixpkgs/pkgs/tools/graphics/maskromtool/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/graphics/mesa-demos/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/graphics/metapixel/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/mscgen/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/graphics/netpbm/default.nix130
-rwxr-xr-xnixpkgs/pkgs/tools/graphics/netpbm/update.sh40
-rw-r--r--nixpkgs/pkgs/tools/graphics/nifskope/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/graphics/nifskope/external-lib-paths.patch33
-rw-r--r--nixpkgs/pkgs/tools/graphics/nifskope/no-sse-on-arm.patch19
-rw-r--r--nixpkgs/pkgs/tools/graphics/nifskope/qttools-bins.patch22
-rw-r--r--nixpkgs/pkgs/tools/graphics/nip2/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/graphics/optar/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/graphics/optipng/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/graphics/oxipng/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/graphics/pdf2svg/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/pdftag/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/pdftoipe/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/graphics/perceptualdiff/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/pfstools/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/graphics/pfstools/glut.patch12
-rw-r--r--nixpkgs/pkgs/tools/graphics/pfstools/pfsalign.patch12
-rw-r--r--nixpkgs/pkgs/tools/graphics/pfstools/pfstools.patch21
-rw-r--r--nixpkgs/pkgs/tools/graphics/pfstools/threads.patch20
-rw-r--r--nixpkgs/pkgs/tools/graphics/pgf/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/graphics/piglit/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/graphics/pikchr/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/graphics/pixel2svg/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/graphics/ploticus/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/graphics/ploticus/ploticus-install.patch12
-rw-r--r--nixpkgs/pkgs/tools/graphics/ploticus/set-prefabs-dir.patch11
-rw-r--r--nixpkgs/pkgs/tools/graphics/ploticus/use-gd-package.patch34
-rw-r--r--nixpkgs/pkgs/tools/graphics/plotutils/c++17-register-usage-fix.patch44
-rw-r--r--nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.nix42
-rw-r--r--nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.txt10
-rw-r--r--nixpkgs/pkgs/tools/graphics/plotutils/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngcheck/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngcrush/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngloss/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngnq/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngoptimizer/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngout/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngquant/add-Cargo.lock.patch428
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngquant/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngtoico/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngtools/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/graphics/povray/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/graphics/pstoedit/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/graphics/pstoedit/pstoedit-gs-9.22-compat.patch13
-rw-r--r--nixpkgs/pkgs/tools/graphics/puppeteer-cli/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/graphics/qrcode/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/graphics/quirc/0001-dont-build-demos.patch29
-rw-r--r--nixpkgs/pkgs/tools/graphics/quirc/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/cmakelists.patch13
-rw-r--r--nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/models_path.patch22
-rw-r--r--nixpkgs/pkgs/tools/graphics/resvg/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/rocket/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/graphics/s2png/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/sanjuuni/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/graphics/scanbd/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/graphics/scrot/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/graphics/shot-scraper/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/graphics/shotgun/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/sic-image-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/graphics/smartcrop/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/graphics/snapdragon-profiler/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/graphics/sng/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/spirv-cross/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/graphics/steghide/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/graphics/stegsolve/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/graphics/svg2pdf/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/graphics/svgbob/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/graphics/svgcleaner/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/graphics/syntex/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/termimage/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/graphics/textplots/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/graphics/texture-synthesis/Cargo.lock1194
-rw-r--r--nixpkgs/pkgs/tools/graphics/texture-synthesis/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/graphics/timg/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/graphics/twilight/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/graphics/ueberzugpp/default.nix92
-rw-r--r--nixpkgs/pkgs/tools/graphics/unpaper/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/graphics/vips/default.nix139
-rw-r--r--nixpkgs/pkgs/tools/graphics/viu/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/vkbasalt-cli/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/graphics/vkbasalt/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/graphics/vkdisplayinfo/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/graphics/vkmark/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/graphics/vulkan-caps-viewer/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/graphics/vulkan-cts/default.nix123
-rw-r--r--nixpkgs/pkgs/tools/graphics/vulkan-cts/sources.nix73
-rwxr-xr-xnixpkgs/pkgs/tools/graphics/vulkan-cts/update.sh21
-rwxr-xr-xnixpkgs/pkgs/tools/graphics/vulkan-cts/vk-cts-sources.py93
-rw-r--r--nixpkgs/pkgs/tools/graphics/vulkan-extension-layer/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/graphics/vulkan-helper/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/graphics/vulkan-tools-lunarg/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/graphics/vulkan-tools/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/waifu2x_darwin_build.diff15
-rw-r--r--nixpkgs/pkgs/tools/graphics/wallutils/000-add-nixos-dirs-to-default-wallpapers.patch26
-rw-r--r--nixpkgs/pkgs/tools/graphics/wallutils/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/graphics/wavefunctioncollapse/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/wdisplays/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/welkin/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/graphics/wgpu-utils/Cargo.lock3588
-rw-r--r--nixpkgs/pkgs/tools/graphics/wgpu-utils/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/graphics/wkhtmltopdf-bin/default.nix104
-rw-r--r--nixpkgs/pkgs/tools/graphics/wkhtmltopdf/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/graphics/xcftools/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/graphics/xcolor/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/graphics/xcur2png/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/yaxg/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/graphics/zbar/default.nix151
-rw-r--r--nixpkgs/pkgs/tools/graphics/zxing/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/zxing/java-zxing.sh3
-rw-r--r--nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-encoder.sh3
-rw-r--r--nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-runner.sh3
-rw-r--r--nixpkgs/pkgs/tools/graphics/zxing/zxing.sh18
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/anthy/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/droidmote/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/emote/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/evdevremapkeys/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/evscript/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/evsieve/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/default.nix110
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-anthy.nix22
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-bamboo.nix47
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-chewing.nix40
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix72
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-configtool.nix67
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-gtk.nix78
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-hangul.nix45
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-lua.nix36
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-m17n.nix51
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-mozc.nix129
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-qt.nix60
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix56
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-skk.nix55
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-table-extra.nix38
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-table-other.nix38
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-unikey.nix34
-rwxr-xr-xnixpkgs/pkgs/tools/inputmethods/fcitx5/update.py43
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx5/with-addons.nix47
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile19
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile.lock32
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fusuma/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fusuma/gemset.nix87
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/gebaar-libinput/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/hime/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-bamboo/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-cangjie/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/fix-paths.patch13
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libthai/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix26
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/allow-wrapping.patch13
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus/build-without-dbus-launch.patch21
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus/default.nix196
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus/fix-paths.patch51
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus/wrapper.nix115
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/input-remapper/default.nix157
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/interception-tools/caps2esc.nix24
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/interception-tools/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/interception-tools/dual-function-keys.nix35
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/keyd/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/keyfuzz/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/keymapper/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/kime/default.nix114
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0001-hardcode-name.patch13
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0002-paths.patch34
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/libinput-gestures/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/libkkc/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/lisgd/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/m17n-db/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/m17n-lib/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/m17n-lib/otf.nix52
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/nabi/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/netevent/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/remote-touchpad/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/skk/skk-dicts/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/skk/skktools/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/touchegg/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/triggerhappy/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/uim/data-hook.patch38
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/uim/default.nix148
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/unnaturalscrollwheels/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/xlibinput_calibrator/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/zinnia/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/llm/gorilla-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/llm/heygpt/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/llm/shell_gpt/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/0x/Cargo.lock232
-rw-r--r--nixpkgs/pkgs/tools/misc/0x/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock27
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/gemset.nix86
-rw-r--r--nixpkgs/pkgs/tools/misc/3mux/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/SP800-90B_EntropyAssessment/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/aaa/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/abduco/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/addic7ed-cli/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/addlicense/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/adrgen/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/aescrypt/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/afetch/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/agedu/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/aichat/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/misc/altserver-linux/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/android-tools/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/antimicrox/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile37
-rw-r--r--nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile.lock99
-rw-r--r--nixpkgs/pkgs/tools/misc/anystyle-cli/anystyle.gemspec52
-rw-r--r--nixpkgs/pkgs/tools/misc/anystyle-cli/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/anystyle-cli/gemset.nix1570
-rw-r--r--nixpkgs/pkgs/tools/misc/aoc-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/apkeep/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/apparix/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/aptly/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/aquosctl/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/arch-install-scripts/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/misc/archi/default.nix85
-rwxr-xr-xnixpkgs/pkgs/tools/misc/archi/update.sh25
-rw-r--r--nixpkgs/pkgs/tools/misc/arp-scan/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/arp-scan/remove-install-exec-hook.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/as-tree/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/asciinema-agg/Cargo.lock2062
-rw-r--r--nixpkgs/pkgs/tools/misc/asciinema-agg/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/asciinema-scenario/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/asciinema/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/asdf-vm/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/misc/askalono/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/aspcud/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/astronomer/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/audible-cli/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/autojump/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/automirror/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/autorandr/0001-don-t-use-sys.executable.patch33
-rw-r--r--nixpkgs/pkgs/tools/misc/autorandr/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/misc/autorevision/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/backdown/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/balanceofsatoshis/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/bandwidth/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/barman/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/barman/unwrap-subprocess.patch30
-rw-r--r--nixpkgs/pkgs/tools/misc/bartib/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/basez/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/bash_unit/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/bashcards/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/bashplotlib/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/bat-extras/default.nix155
-rw-r--r--nixpkgs/pkgs/tools/misc/bbe/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/bc/cross-bc.patch169
-rw-r--r--nixpkgs/pkgs/tools/misc/bc/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/bcunit/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/bdf2psf/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/bdf2sfd/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/bdfresize/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/bdfresize/remove-malloc-declaration.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/beats/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/bepasty/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/betterdiscord-installer/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/betterdiscordctl/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/bfetch/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/bfr/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/bfscripts/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/bibtex2html/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/bibtool/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/bibutils/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/birdfont/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/bitwise/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/bkt/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/bkyml/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/blacken-docs/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/blahaj/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/blflash/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/blink1-tool/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/bmap-tools/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/bmon/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/bogofilter/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/boltbrowser/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/bonk/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/bootspec/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/bottom-rs/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/boxxy/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/brltty/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/broot/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/misc/brotab/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/bsp-layout/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/btc-rpc-explorer/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/btdu/default.nix93
-rwxr-xr-xnixpkgs/pkgs/tools/misc/btdu/update.py82
-rw-r--r--nixpkgs/pkgs/tools/misc/btrfs-assistant/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/misc/buildtorrent/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/bunnyfetch/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/byobu/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/misc/caffeine/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares-nixos-extensions/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/nixos-extensions-paths.patch46
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/nonroot.patch105
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/partitions.patch28
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/supportedlocale.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/uimod.patch85
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/unfreeq.patch109
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/userjob.patch31
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/waylandkbd.patch25
-rw-r--r--nixpkgs/pkgs/tools/misc/capture/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/castty/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/catimg/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/cc2538-bsl/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/ccal/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/ccze/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/cf-terraforming/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/cfonts/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/chafa/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch23
-rw-r--r--nixpkgs/pkgs/tools/misc/changelogger/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/charasay/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/chatgpt-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/checkpwn/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/chef-cli/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/chef-cli/Gemfile.lock303
-rw-r--r--nixpkgs/pkgs/tools/misc/chef-cli/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/chef-cli/gemset.nix1130
-rw-r--r--nixpkgs/pkgs/tools/misc/chelf/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/chezmoi/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/chrome-export/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/cht.sh/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/cicero-tui/Cargo.lock958
-rw-r--r--nixpkgs/pkgs/tools/misc/cicero-tui/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/citron/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/ckb-next/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/clac/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/claws/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/clematis/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/clickclack/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/clini/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/clipboard-jh/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/clipbuzz/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/clipnotify/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/clipster/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/cloc/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/clolcat/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/cloud-utils/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff72
-rw-r--r--nixpkgs/pkgs/tools/misc/clpeak/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/clubhouse-cli/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/cmdpack/default.nix136
-rw-r--r--nixpkgs/pkgs/tools/misc/cod/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/code-minimap/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/codebraid/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/codemov/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/codevis/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/coinlive/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/colord-gtk/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/misc/colord/default.nix121
-rw-r--r--nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch72
-rw-r--r--nixpkgs/pkgs/tools/misc/colorless/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/colorpanes/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/colorpicker/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/colorz/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/compdb/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/complete-alias/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/completely/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/completely/Gemfile.lock20
-rw-r--r--nixpkgs/pkgs/tools/misc/completely/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/completely/gemset.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/conserver/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/contacts/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/convbin/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/convfont/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/convimg/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/convmv/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/cope/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/copier/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/coreboot-configurator/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix131
-rw-r--r--nixpkgs/pkgs/tools/misc/coreutils/default.nix176
-rw-r--r--nixpkgs/pkgs/tools/misc/cowsay/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/cp210x-program/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/cp437/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/cpufetch/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/cpulimit/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/cpulimit/get-missing-basename.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/cpulimit/remove-sys-sysctl.h.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/cpuminer/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/crex/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/crudini/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/misc/crypto-tracker/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/csv2latex/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/csv2parquet/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/csvs-to-sqlite/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/cunit/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/cutecom/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/cyberchef/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/cyclonedx-python/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/dabet/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/daktilo/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/dashing/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/dasht/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/datamash/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/datefmt/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/dateutils/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/dbacl/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/dbus-map/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/ddate/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ddccontrol/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/misc/ddcutil/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/misc/debootstrap/default.nix102
-rw-r--r--nixpkgs/pkgs/tools/misc/depotdownloader/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/depotdownloader/deps.nix15
-rwxr-xr-xnixpkgs/pkgs/tools/misc/depotdownloader/update.sh16
-rw-r--r--nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh6
-rw-r--r--nixpkgs/pkgs/tools/misc/detox/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/dgoss/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/dialogbox/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/didu/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/didyoumean/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/diffoci/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/diffoscope/default.nix308
-rw-r--r--nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch20
-rwxr-xr-xnixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh23
-rw-r--r--nixpkgs/pkgs/tools/misc/digitemp/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/dijo/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/ding-libs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/direnv/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/discocss/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/disfetch/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/diskonaut/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/diskscan/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/diskus/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/djenrandom/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/dmg2img/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-ls/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock29
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix76
-rw-r--r--nixpkgs/pkgs/tools/misc/docui/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/doitlive/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/domine/default.nix15
-rw-r--r--nixpkgs/pkgs/tools/misc/domine/pubspec.lock.json197
-rw-r--r--nixpkgs/pkgs/tools/misc/dooit/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/dotacat/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/dotter/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/dsq/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/dtach/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/dtool/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/dua/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/duc/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/duf/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/dumptorrent/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/dupd/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/dutree/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/dvtm/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/dvtm/unstable.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/dwarf2json/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/dwt1-shell-color-scripts/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/ea/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/easeprobe/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/edid-decode/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/edid-generator/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/edir/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/edk2-uefi-shell/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/eget/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/ego/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/elfcat/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/eludris/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/empty/0.6-Makefile.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/empty/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/emv/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/encpipe/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/enjarify/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/ent/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/entr/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/enumer/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/envchain/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/envsubst/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/eot-utilities/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/esphome/dashboard.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/esphome/default.nix138
-rw-r--r--nixpkgs/pkgs/tools/misc/esphome/update.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/esptool-ck/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/esptool/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/misc/etcher/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/misc/ethtool/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/ets/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/eva/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/evhz/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/expect/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/expect/fix-cross-compilation.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/expect/fix-darwin-clang16.patch31
-rw-r--r--nixpkgs/pkgs/tools/misc/f2/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/faketty/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/fasd/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/fastfetch/default.nix163
-rw-r--r--nixpkgs/pkgs/tools/misc/fbcat/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/fbmark/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/fclones/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/fclones/gui.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/fcp/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/fd/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/fdtools/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/misc/fdtools/new-skalibs.patch223
-rw-r--r--nixpkgs/pkgs/tools/misc/fdupes/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/fedifetcher/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/fend/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/misc/fet-sh/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/fetch-scm/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/fetchutils/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/fffuu/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/ffsend/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/misc/fiano/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/figlet/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/file/32-bit-time_t.patch38
-rw-r--r--nixpkgs/pkgs/tools/misc/file/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/filebench/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/fileschanged/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch48
-rw-r--r--nixpkgs/pkgs/tools/misc/findup/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/findutils/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/flameshot/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/flashrom-stable/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/flashrom/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/flexoptix-app/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/flitter/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/flitter/flitter.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/flowgger/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/fltrdr/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/fluent-bit/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/Gemfile13
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock169
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/gemset.nix686
-rw-r--r--nixpkgs/pkgs/tools/misc/fntsample/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/misc/foma/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/fondu/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/font-config-info/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/fontfor/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/fontforge/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix1
-rw-r--r--nixpkgs/pkgs/tools/misc/fortune/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/fpart/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/fpp/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/fre/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/frei/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/freshfetch/Cargo.lock587
-rw-r--r--nixpkgs/pkgs/tools/misc/freshfetch/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/fsearch/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/fselect/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/fsmark/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/fsmon/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/fsql/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/fsrx/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/fuc/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/fw/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/fwup/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/misc/fx-cast-bridge/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch18
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch28
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/fzf/default.nix109
-rw-r--r--nixpkgs/pkgs/tools/misc/fzy/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/g203-led/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/g933-utils/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/gams/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/gaphor/default.nix84
-rw-r--r--nixpkgs/pkgs/tools/misc/gavin-bc/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/gay/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/gazelle-origin/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch15
-rw-r--r--nixpkgs/pkgs/tools/misc/gbdfed/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/geekbench/4.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/geekbench/5.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/geekbench/6.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/geteltorito/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/getopt/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/getoptions/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-actions-cache/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-cal/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-dash/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-eco/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-markdown-preview/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-ost/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/ghostie/Cargo.lock2665
-rw-r--r--nixpkgs/pkgs/tools/misc/ghostie/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/gibo/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/gigalixir/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/github-backup/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/github-copilot-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/github-copilot-cli/package-lock.json3329
-rw-r--r--nixpkgs/pkgs/tools/misc/gitrs/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/glasgow/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/misc/go-ios/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/go.rice/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/goaccess/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/godu/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/gomi/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/google-cloud-bigtable-tool/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/google-cloud-sql-proxy/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/goose/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/goreleaser/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/goss/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/misc/gosu/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/gotify-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/gotify-desktop/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/gparted/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/gparted/polkit.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/gpick/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/gpick/dot-version.patch10
-rw-r--r--nixpkgs/pkgs/tools/misc/gradescope-submit/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/grafterm/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/grass-sass/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/graylog/5.1.nix9
-rw-r--r--nixpkgs/pkgs/tools/misc/graylog/5.2.nix9
-rw-r--r--nixpkgs/pkgs/tools/misc/graylog/graylog.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/graylog/plugins.nix299
-rw-r--r--nixpkgs/pkgs/tools/misc/grc/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/grex/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/grit/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/grizzly/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/add-hidden-menu-entries.patch204
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/default.nix214
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg1
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg10
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/grub4dos/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch33
-rw-r--r--nixpkgs/pkgs/tools/misc/gti/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/gtkterm/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/gummy/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/gwe/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/misc/h/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/h5utils/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/hackertyper/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/hacksaw/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/hakuneko/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/misc/halp/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/misc/halp/fix-target-dir.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/handlr/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/hashit/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/hashpump/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/haste-client/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/haste-client/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/misc/haste-client/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/haste-client/gemset.nix491
-rw-r--r--nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch28
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch20
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf4/darwin-aarch64.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf4/default.nix148
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf5/1.10.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf5/default.nix113
-rw-r--r--nixpkgs/pkgs/tools/misc/hdfview/0001-Hardcode-isUbuntu-false-to-avoid-hostname-dependency.patch38
-rw-r--r--nixpkgs/pkgs/tools/misc/hdfview/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/misc/hdfview/disable-mac-signing.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/hdl-dump/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/heatseeker/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/hebcal/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/heimdall/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/hex/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/hexd/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/hexdiff/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/hexyl/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/hhpc/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/hid-listen/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/hid-tools/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/hidrd/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/hiksink/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/hoard/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/gemset.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/hostmux/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/hostsblock/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/hpcg/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/hpl/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/hsd/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock60
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix250
-rw-r--r--nixpkgs/pkgs/tools/misc/hueadm/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/hunt/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/hwatch/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/hyfetch/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/hyperfine/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/hyperpotamus/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/i3minator/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/i3nator/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/iam-policy-json-to-terraform/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/iay/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/ibus-theme-tools/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/ical2orgpy/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/ictree/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/idevicerestore/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/idutils/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/ikill/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ili2c/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/ili2c/dont-use-build-timestamp.patch29
-rw-r--r--nixpkgs/pkgs/tools/misc/immich-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/inav-blackbox-tools/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/infracost/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/ink/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/inklingreader/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/inspec/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/inspec/Gemfile.lock643
-rw-r--r--nixpkgs/pkgs/tools/misc/inspec/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/inspec/gemset.nix2230
-rw-r--r--nixpkgs/pkgs/tools/misc/instaloader/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/interactsh/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/intermodal/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/invoice/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/iotools/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/ipad_charge/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/ipbt/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/ipxe/default.nix112
-rw-r--r--nixpkgs/pkgs/tools/misc/ised/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/isoimagewriter/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/ix/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/jdiskreport/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/jdupes/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/jfrog-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/journaldriver/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/jsonwatch/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/jstest-gtk/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/jugglinglab/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/jugglinglab/fix-default-maven-plugin-versions.patch70
-rw-r--r--nixpkgs/pkgs/tools/misc/kak-lsp/0001-Use-full-Perl-path.patch37
-rw-r--r--nixpkgs/pkgs/tools/misc/kak-lsp/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/kakoune-cr/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/kakoune-cr/shard.lock10
-rw-r--r--nixpkgs/pkgs/tools/misc/kakoune-cr/shards.nix14
-rw-r--r--nixpkgs/pkgs/tools/misc/kalker/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/kargo/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/kb/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/kcollectd/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/kepubify/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/kermit/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/keychain/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/keymapviz/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/kicli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/killport/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/kisslicer/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/kitty-img/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/kodi-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/krapslog/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/kronometer/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/krunner-translator/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/ksnip/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/misc/kt/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/latex2html/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/lavat/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/lazycli/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/lazydocker/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/lbdb/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/lcdf-typetools/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ldapvi/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/ldmtool/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/leanify/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/ledit/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/lektor/default.nix105
-rw-r--r--nixpkgs/pkgs/tools/misc/lemmeknow/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/lemmy-help/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/lerpn/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/lesspipe/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/libgen-cli/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/libpff/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/librespeed-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/lice/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/license-cli/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/license-generator/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/licensor/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/lifecycled/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/lighthouse-steamvr/Cargo.lock1212
-rw-r--r--nixpkgs/pkgs/tools/misc/lighthouse-steamvr/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/lilo/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/limitcpu/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/lineselect/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/linux-logo/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/linuxquota/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/lipl/Cargo.lock308
-rw-r--r--nixpkgs/pkgs/tools/misc/lipl/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/livedl/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/lnav/0001-Forcefully-disable-docs-build.patch38
-rw-r--r--nixpkgs/pkgs/tools/misc/lnav/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/misc/lnch/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/loadlibrary/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/locate-dominating-file/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/logstash/7.x.nix88
-rw-r--r--nixpkgs/pkgs/tools/misc/logstash/contrib.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/logtop/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/lokalise2-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/gemset.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/loop/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/lorri/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template37
-rw-r--r--nixpkgs/pkgs/tools/misc/lorri/runtime.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/lottieconverter/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/lrzsz/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/lsd/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/ltunify/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/lwc/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/macchina/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/mailman-rss/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/makebootfat/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/maker-panel/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/man-db/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch39
-rw-r--r--nixpkgs/pkgs/tools/misc/mandoc/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/misc/mandown/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/manga-cli/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/map/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/mapcidr/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/markdown-anki-decks/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/marlin-calc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/massren/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/mastotool/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/mathpix-snipping-tool/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/mbuffer/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/mcfly/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/format-string_CVE-2012-4426.patch31
-rwxr-xr-xnixpkgs/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/overflow_CVE-2012-4409.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/segv.patch39
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/sprintf_CVE-2012-4527.patch108
-rw-r--r--nixpkgs/pkgs/tools/misc/mdbtools/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/mdr/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/mdslides/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/me_cleaner/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/megacli/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/melody/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/memtest86+/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/misc/mermaid-filter/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/microplane/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/mimeo/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/minicom/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch79
-rw-r--r--nixpkgs/pkgs/tools/misc/minipro/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/miniserve/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/misc/ministat/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/mise/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/mktorrent/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/mloader/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/mlocate/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/mlxbf-bootctl/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/mmake/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/mmctl/0001-module-replace-public.patch8
-rw-r--r--nixpkgs/pkgs/tools/misc/mmctl/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/mmv-go/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/mmv/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/mnc/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/moar/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/mods/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix139
-rw-r--r--nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/mons/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/misc/moon-phases/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/moreutils/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/moserial/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/most/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/mpdscribble/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/mpremote/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/mprime/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/mprocs/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/mpy-utils/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/mrtg/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/ms-sys/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/mslink/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/mstflint/default.nix128
-rw-r--r--nixpkgs/pkgs/tools/misc/mtm/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/multitail/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/multitime/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/mutagen-compose/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/mutagen/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/mutt-wizard/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/mvebu64boot/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/mynewt-newtmgr/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/mysqltuner/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/nagstamon/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/nanoemoji/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/misc/nanoemoji/fix-test.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/nanoemoji/test-pythonpath.patch14
-rw-r--r--nixpkgs/pkgs/tools/misc/natls/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/hardcode-gsettings.patch31
-rw-r--r--nixpkgs/pkgs/tools/misc/nb/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/nbench/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/nbqa/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/misc/ncdu/1.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/ncdu/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/near-cli/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/near-cli/package.json83
-rw-r--r--nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/neofetch/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/netbootxyz-efi/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/nms/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/node-glob/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/nomino/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/noteshrink/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/noti/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/notify-desktop/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/notify/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/ntfy-sh/default.nix69
-rwxr-xr-xnixpkgs/pkgs/tools/misc/ntfy-sh/update.sh22
-rw-r--r--nixpkgs/pkgs/tools/misc/ntfy/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/misc/ntfy/webpush.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/nurl/Cargo.lock1559
-rw-r--r--nixpkgs/pkgs/tools/misc/nurl/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/nux/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/nvfancontrol/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/nvimpager/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/nyancat/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/ocs-url/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/octofetch/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/octosql/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/odyssey/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/oggvideotools/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/ollama/cmake-include.patch7
-rw-r--r--nixpkgs/pkgs/tools/misc/ollama/default.nix182
-rw-r--r--nixpkgs/pkgs/tools/misc/ollama/remove-git.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/ollama/replace-gcc.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/ondir/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/onefetch/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/onefetch/zstd-pkg-config.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/online-judge-template-generator/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/open-pdf-sign/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/opencbm/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/opencorsairlink/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/opentelemetry-collector/contrib.nix72
-rw-r--r--nixpkgs/pkgs/tools/misc/opentelemetry-collector/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/opentsdb/default.nix352
-rw-r--r--nixpkgs/pkgs/tools/misc/oppai-ng/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/org-stats/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/org-stats/version.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/os-prober/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/oscclip/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/misc/osm2pgsql/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree-rs-ext/Cargo.lock2303
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree-rs-ext/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree/01-Drop-ostree-trivial-httpd-CLI-move-to-tests-director.patch268
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree/default.nix156
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree/fix-1592.patch149
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree/fix-test-paths.patch55
-rw-r--r--nixpkgs/pkgs/tools/misc/otel-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/otfcc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/otfcc/fix-aarch64.patch22
-rw-r--r--nixpkgs/pkgs/tools/misc/otfcc/move-makefiles.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/outils/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/ovh-ttyrec/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/owofetch/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/page/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/pal/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-acro/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-drawio-filter/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-eqnos/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-fignos/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-include/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-katex/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-lua-filters/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-plantuml-filter/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-secnos/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-secnos/patch/fix-manifest.patch39
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-tablenos/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/panicparse/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/panoply/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/paperlike-go/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/paps/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/parallel/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/parallel/wrapper.nix10
-rw-r--r--nixpkgs/pkgs/tools/misc/parcellite/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/parquet-tools/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/misc/parted/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/misc/past-time/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/pastebinit/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/pastebinit/use-drv-etc.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/pazi/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/pb/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/pb_cli/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/pc/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/pcb2gcode/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/pcp/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/pdd/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/pdf-parser/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/peep/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/perccli/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/peruse/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/pferd/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/pfetch-rs/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/pfetch/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/pfsshell/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/pg_flame/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/pg_top/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/pgbadger/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/pgcenter/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/pgmetrics/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/phoronix-test-suite/tests.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/phrase-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/pick/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/picocom/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/pinsel/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/pipe-rename/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pipectl/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/pipelight/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch122
-rw-r--r--nixpkgs/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch42
-rw-r--r--nixpkgs/pkgs/tools/misc/pipelight/wine-7.10-ControlMask.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/pipreqs/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/pistol/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/piston-cli/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/pixd/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/pk2cmd/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/pkgdiff/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pkgtop/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/plantuml-server/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/plantuml/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/plantuml/plantuml-c4.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/plfit/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/plocate/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/plotinus/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/plowshare/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/pmbootstrap/default.nix104
-rw-r--r--nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/pokeget-rs/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/pokemonsay/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/misc/polar/Gemfile7
-rw-r--r--nixpkgs/pkgs/tools/misc/polar/Gemfile.lock27
-rw-r--r--nixpkgs/pkgs/tools/misc/polar/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/polar/gemset.nix75
-rw-r--r--nixpkgs/pkgs/tools/misc/ponysay/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/poop/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/popsicle/Cargo.lock2782
-rw-r--r--nixpkgs/pkgs/tools/misc/popsicle/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/portal/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/pouf/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/poweralertd/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/powerline-go/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/powerline-rs/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pre-commit-hook-ensure-sops/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/pre-commit/default.nix191
-rw-r--r--nixpkgs/pkgs/tools/misc/pre-commit/hook-tmpl.patch17
-rw-r--r--nixpkgs/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/pre-commit/pygrep-pythonpath.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/precice-config-visualizer/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/present-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pricehist/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/pridecat/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/pridecat/fix_install.patch20
-rw-r--r--nixpkgs/pkgs/tools/misc/pridefetch/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/procyon/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/profetch/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/progress/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/promql-cli/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/proximity-sort/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/pspg/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/psql2csv/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/psrecord/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/psw/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/pubs/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/misc/pv/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/gemset.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/qdl/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/qflipper/default.nix105
-rw-r--r--nixpkgs/pkgs/tools/misc/qjoypad/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/qmake2cmake/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/qmake2cmake/fix-locations.patch22
-rw-r--r--nixpkgs/pkgs/tools/misc/qmk/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/misc/qmk_hid/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/qrscan/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/qt5ct/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/qt6ct/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/qt6gtk2/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/quich/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/r3ctl/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/radeon-profile/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/ramfetch/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/rargs/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/rates/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/rauc/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/rcm/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch48
-rw-r--r--nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/recutils/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/remind/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/remote-exec/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/misc/rename/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/renameutils/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/reredirect/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/rfc/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock25
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix74
-rw-r--r--nixpkgs/pkgs/tools/misc/rig/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff39
-rw-r--r--nixpkgs/pkgs/tools/misc/ripdrag/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/ristate/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/rkflashtool/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/rkvm/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/rlwrap/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/rmate-sh/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/rmlint/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/misc/rmlint/scons-nix-env.patch19
-rw-r--r--nixpkgs/pkgs/tools/misc/rmtrash/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/rmw/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/rot8/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/roundup/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/routino/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/rpcsvc-proto/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/rpi-imager/default.nix84
-rw-r--r--nixpkgs/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch16
-rw-r--r--nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix125
-rw-r--r--nixpkgs/pkgs/tools/misc/rrdtool/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/rshim-user-space/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/rtz/Cargo.lock3490
-rw-r--r--nixpkgs/pkgs/tools/misc/rtz/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/rust-motd/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/rustypaste-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/rw/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/sacad/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/sagoin/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/sam-ba/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/sanctity/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/savepagenow/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/scanmem/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/scdl/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/scfbuild/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/screen/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/misc/screenfetch/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/script-directory/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/scrub/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/sd-mux-ctrl/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/sdate/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/seaborn-data/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/see/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/semiphemeral/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/sensible-utils/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/serverspec/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/serverspec/Gemfile.lock45
-rw-r--r--nixpkgs/pkgs/tools/misc/serverspec/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/serverspec/gemset.nix150
-rw-r--r--nixpkgs/pkgs/tools/misc/setconf/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/sfeed/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/sfz/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/shadowenv/Cargo.lock.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/shadowenv/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/shallot/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/sharedown/default.nix127
-rwxr-xr-xnixpkgs/pkgs/tools/misc/sharedown/update.sh26
-rw-r--r--nixpkgs/pkgs/tools/misc/sharedown/yarn.lock2914
-rw-r--r--nixpkgs/pkgs/tools/misc/sheldon/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/misc/shell-hist/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/shelldap/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/shellspec/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/shim/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/shunit2/default.nix91
-rw-r--r--nixpkgs/pkgs/tools/misc/sixpair/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch19
-rw-r--r--nixpkgs/pkgs/tools/misc/skim/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/sl/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/slingshot/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/slop/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/sloth/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/slsnif/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/smc/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/smenu/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/smug/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/snapper/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/snore/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/somafm-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/sonota/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch20
-rw-r--r--nixpkgs/pkgs/tools/misc/spacer/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/sqlite3-to-mysql/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/srisum/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/sshx/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/sta/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/star-history/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/starfetch/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/starry/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/starship/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/staruml/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/misc/statserial/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/stderred/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/steampipe/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/storcli/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/stow/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/subberthehut/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/sutils/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/svu/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/swaglyrics/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/misc/synth/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/system-config-printer/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch17
-rw-r--r--nixpkgs/pkgs/tools/misc/systrayhelper/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/sysz/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/szyszka/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/t/Gemfile6
-rw-r--r--nixpkgs/pkgs/tools/misc/t/Gemfile.lock65
-rw-r--r--nixpkgs/pkgs/tools/misc/t/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/t/gemset.nix262
-rw-r--r--nixpkgs/pkgs/tools/misc/t1utils/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/tab-rs/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/tagref/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/tailer/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/tailspin/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/taoup/cachefile.patch35
-rw-r--r--nixpkgs/pkgs/tools/misc/taoup/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/taoup/help.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/taoup/tput.patch17
-rw-r--r--nixpkgs/pkgs/tools/misc/tbls/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/tcat/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/td/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/td/Gemfile.lock40
-rw-r--r--nixpkgs/pkgs/tools/misc/td/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/td/gemset.nix103
-rw-r--r--nixpkgs/pkgs/tools/misc/tdfgo/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/tea/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/tealdeer/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/gemset.nix10
-rw-r--r--nixpkgs/pkgs/tools/misc/tensorman/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/tere/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/termplay/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/termtosvg/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/tewisay/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/tfk8s/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/default.nix11
-rw-r--r--nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml7
-rw-r--r--nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/output.tf12
-rw-r--r--nixpkgs/pkgs/tools/misc/tgpt/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/thefuck/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/theme-sh/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/thinkpad-scripts/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/thumbs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/thumbs/fix.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/time-decode/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/time/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/timelimit/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/timer/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/timetagger_cli/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/timidity/configure-compat.patch33
-rw-r--r--nixpkgs/pkgs/tools/misc/timidity/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/misc/timidity/timidity-iA-Oj.patch14
-rw-r--r--nixpkgs/pkgs/tools/misc/timidity/timidity.cfg368
-rw-r--r--nixpkgs/pkgs/tools/misc/tio/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/tkman/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/misc/tldr/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/tlp/default.nix135
-rw-r--r--nixpkgs/pkgs/tools/misc/tlp/patches/0001-makefile-correctly-sed-paths.patch58
-rw-r--r--nixpkgs/pkgs/tools/misc/tlp/patches/0002-reintroduce-tlp-sleep-service.patch85
-rw-r--r--nixpkgs/pkgs/tools/misc/tmate/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/misc/tmpwatch/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux-mem-cpu-load/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux-sessionizer/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux/default.nix106
-rw-r--r--nixpkgs/pkgs/tools/misc/tmuxinator/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/tmuxp/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/toastify/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/todo/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/toilet/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/topgrade/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/topicctl/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/torrenttools/default.nix100
-rw-r--r--nixpkgs/pkgs/tools/misc/toybox/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/trackma/default.nix82
-rwxr-xr-xnixpkgs/pkgs/tools/misc/trackma/update.sh8
-rw-r--r--nixpkgs/pkgs/tools/misc/traefik-certs-dumper/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/trash-cli/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/misc/trashy/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/trdl-client/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/misc/tremor-rs/Cargo.lock6529
-rw-r--r--nixpkgs/pkgs/tools/misc/tremor-rs/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/misc/tremor-rs/ls.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/triehash/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/trillian/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/ttchat/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch98
-rw-r--r--nixpkgs/pkgs/tools/misc/ttfautohint/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch78
-rw-r--r--nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/ttwatch/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/tty-clock/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/ttygif/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/ttylog/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/ttyplot/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/turbo/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/tvnamer/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/twitch-dl/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/twm/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/twspace-crawler/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/twspace-dl/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/twurl/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/twurl/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/misc/twurl/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/twurl/gemset.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/txt2man/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/txtw/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/tydra/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/tz/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/uair/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/ugs/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/ugtrain/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/uhubctl/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/ulid/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix122
-rw-r--r--nixpkgs/pkgs/tools/misc/umlet/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/unclutter/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/undocker/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/unicode/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/units/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/unparam/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/up/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/upower-notify/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/upower-notify/deps.nix11
-rw-r--r--nixpkgs/pkgs/tools/misc/upterm/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/urjtag/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/url-parser/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/urlencode/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/urn-timer/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/usbimager/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/usbmuxd/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/usbmuxd2/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/misc/usbview/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/uucp/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/uudeview/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/uudeview/matherr.patch19
-rw-r--r--nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/uwufetch/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/uwuify/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/valeronoi/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/vcs_query/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/vector/Cargo.lock11095
-rw-r--r--nixpkgs/pkgs/tools/misc/vector/default.nix131
-rw-r--r--nixpkgs/pkgs/tools/misc/veikk-linux-driver-gui/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/via/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/vial/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/viddy/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/vimer/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/vimpager/build.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/vimpager/default.nix6
-rw-r--r--nixpkgs/pkgs/tools/misc/vimpager/latest.nix10
-rw-r--r--nixpkgs/pkgs/tools/misc/vimv-rs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/vimv/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/vivid/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/vix/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/vmtouch/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/void/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/vorbisgain/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/vrc-get/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/vsc-leetcode-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/vsh/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/vtm/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/vttest/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/wacomtablet/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/wagyu/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/wakapi/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/wakatime/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/wasm-tools/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/watchexec/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/watchlog/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/wayback-machine-archiver/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/wayback/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/waylevel/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/wayshot/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/webcat/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/websocat/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/wemux/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/whatsapp-chat-exporter/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/wimboot/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/wit-bindgen/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/wlc/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/woeusb-ng/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/woeusb/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/woof/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/wootility/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/writedisk/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/wsl-open/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/wv/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/wv2/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/wv2/fix-include.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/wwcd/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/wyrd/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/x11idle/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/xburst-tools/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/xcd/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/xclip/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/xcp/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/xdaliclock/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/xdg-ninja/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/xdiskusage/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/xdo/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/xdummy/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/xflux/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/xflux/gui.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/xfstests/default.nix111
-rw-r--r--nixpkgs/pkgs/tools/misc/xiccd/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/xjobs/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/xmlbeans/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/xmonad-log/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix12
-rw-r--r--nixpkgs/pkgs/tools/misc/xprite-editor/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/xq/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/xsel/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/xstow/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/xtitle/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/xvfb-run/default.nix65
-rwxr-xr-xnixpkgs/pkgs/tools/misc/xvfb-run/update.sh21
-rw-r--r--nixpkgs/pkgs/tools/misc/xxv/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/yad/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/yafetch/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/yai/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/yajsv/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/yank/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/yle-dl/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/you-get/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/you-get/ffmpeg-path.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/youtube-dl/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/misc/yt-dlp/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/misc/ytarchive/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/ytcast/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ytfzf/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/ytmdl/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/yutto/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/z-lua/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/zabbixctl/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/zalgo/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/zellij/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/zf/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/zf/deps.nix13
-rw-r--r--nixpkgs/pkgs/tools/misc/zitadel-tools/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/zotero-translation-server/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/zoxide/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/zsh-history-to-fish/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/zthrottle/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/6tunnel/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/aardvark-dns/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/acme-client/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/ahcpd/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/ain/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/aircrack-ng/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/airgeddon/default.nix167
-rw-r--r--nixpkgs/pkgs/tools/networking/ali/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/altermime/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/amass/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/networking/anevicon/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/apc-temp-fetch/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/argus-clients/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/argus/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/aria2/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/arping/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/arpoison/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/asleap/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/assh/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/atftp/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/atinout/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/autossh/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/axel/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/babeld/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/bacnet-stack/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/badvpn/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/bandwhich/Cargo.lock2438
-rw-r--r--nixpkgs/pkgs/tools/networking/bandwhich/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/networking/bgpdump/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/bgpq3/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/bgpq4/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/biosdevname/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/biosdevname/makefile.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/bitmask-vpn/default.nix175
-rw-r--r--nixpkgs/pkgs/tools/networking/bombardier/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/bore-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/bore/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/boringtun/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/boundary/default.nix71
-rwxr-xr-xnixpkgs/pkgs/tools/networking/boundary/update.sh41
-rw-r--r--nixpkgs/pkgs/tools/networking/brook/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/bsd-finger/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch261
-rw-r--r--nixpkgs/pkgs/tools/networking/bukubrow/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/bully/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/burpsuite/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/networking/bwm-ng/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/networking/cadaver/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/calendar-cli/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/cantoolz/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/networking/carddav-util/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/cassowary/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/castnow/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/cbftp/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/cdpr/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/cfspeedtest/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/changetower/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/chaos/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/checkip/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/chisel/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/chrony/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/networking/chrony/makefile.patch23
-rw-r--r--nixpkgs/pkgs/tools/networking/cjdns/Cargo.lock714
-rw-r--r--nixpkgs/pkgs/tools/networking/cjdns/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/networking/cjdns/system-libsodium.patch28
-rw-r--r--nixpkgs/pkgs/tools/networking/cksfv/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/clash-meta/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/networking/cloud-custodian/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/cloudflare-warp/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/networking/cmst/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/cnping/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/cntlm/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/cocom/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/configurable-http-proxy/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/connect/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/containerlab/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/corerad/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/corkscrew/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/crackle/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/croc/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/croc/test-local-relay.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/curl-impersonate/curl-impersonate-0.5.2-fix-shebangs.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/curl-impersonate/default.nix186
-rw-r--r--nixpkgs/pkgs/tools/networking/curl-impersonate/deps.nix29
-rwxr-xr-xnixpkgs/pkgs/tools/networking/curl-impersonate/update.sh91
-rw-r--r--nixpkgs/pkgs/tools/networking/curl/default.nix217
-rw-r--r--nixpkgs/pkgs/tools/networking/curlie/bump-golang-x-sys.patch37
-rw-r--r--nixpkgs/pkgs/tools/networking/curlie/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/dae/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/networking/darkstat/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/davix/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/networking/dcap/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent.nix125
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent.nix11
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/integrations-core.nix116
-rw-r--r--nixpkgs/pkgs/tools/networking/ddclient/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/networking/ddns-go/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/dhcpcd/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/networking/dhcpdump/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/dhcping/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/dibbler/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/dirb/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/discord-sh/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/djbdns/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/networking/djbdns/fix-nix-usernamespace-build.patch10
-rw-r--r--nixpkgs/pkgs/tools/networking/djbdns/hier.patch15
-rw-r--r--nixpkgs/pkgs/tools/networking/djbdns/softlimit.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/dnschef/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/dnscrypt-proxy/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/dnscrypt-wrapper/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/dnsmasq/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/networking/dnsmon-go/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/dnsmonster/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/dnsperf/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/dnsproxy/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/dnstake/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/dnstop/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/dnstracer/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/dnstwist/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/networking/dnsviz/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/dnsviz/fix-path.patch18
-rw-r--r--nixpkgs/pkgs/tools/networking/dogdns/Cargo.lock1103
-rw-r--r--nixpkgs/pkgs/tools/networking/dogdns/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/networking/dogdns/remove-date-info.patch11
-rw-r--r--nixpkgs/pkgs/tools/networking/dq/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/driftnet/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/drill/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/dropbear/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/networking/dropbear/pass-path.patch39
-rw-r--r--nixpkgs/pkgs/tools/networking/dsniff/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/networking/easyrsa/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/ebpf-verifier/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/networking/ebpf-verifier/remove-fetchcontent-usage.patch14
-rw-r--r--nixpkgs/pkgs/tools/networking/edgedb/0001-dynamically-patchelf-binaries.patch34
-rw-r--r--nixpkgs/pkgs/tools/networking/edgedb/Cargo.lock4276
-rw-r--r--nixpkgs/pkgs/tools/networking/edgedb/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/networking/eggdrop/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/email/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/networking/eternal-terminal/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/evillimiter/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/networking/fakeroute/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/fast-ssh/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/fastd/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/networking/fdm/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/ferm/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/filegive/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/findomain/Cargo.lock3259
-rw-r--r--nixpkgs/pkgs/tools/networking/findomain/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/networking/flannel/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/flannel/plugin.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/flvstreamer/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/fping/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/networking/freebind/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/frp/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/gandi-cli/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/gemget/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/gen6dns/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/getmail6/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/ghostunnel/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/ghz/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/girsh/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/globalping-cli/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/globalprotect-openconnect/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/gmrender-resurrect/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/gnirehtet/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/networking/go-shadowsocks2/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/gobgp/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/godns/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/godspeed/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/gof5/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/goflow/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/goflow2/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/goimapnotify/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/goodhosts/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/goreplay/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/gost/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/networking/gp-saml-gui/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/gping/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/graphqurl/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/grpc_cli/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/grpcui/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/grpcurl/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/gsocket/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/guardian-agent/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/guardian-agent/deps.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/gupnp-tools/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/networking/gvpe/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/gvproxy/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/haguichi/default.nix56
-rwxr-xr-xnixpkgs/pkgs/tools/networking/haguichi/update.sh13
-rw-r--r--nixpkgs/pkgs/tools/networking/hans/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/haproxy/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/networking/hblock/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/hey/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/horst/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/hostapd-mana/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/networking/hostname-debian/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/hp2p/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/hping/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/hss/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/htpdate/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/http-prompt/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/http2tcp/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/httperf/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/httping/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/networking/httplab/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/httplz/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/networking/httprobe/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/httpstat/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/httptunnel/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/hue-cli/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/networking/hue-cli/Gemfile.lock18
-rw-r--r--nixpkgs/pkgs/tools/networking/hue-cli/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/networking/hue-cli/gemset.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/hurl/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/networking/hyenae/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/hysteria/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/i2p/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/networking/i2p/i2p.patch43
-rw-r--r--nixpkgs/pkgs/tools/networking/i2pd/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/ifstat-legacy/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/iftop/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/ifwifi/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/igmpproxy/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/imapsync/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/networking/inadyn/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/inetutils/default.nix102
-rw-r--r--nixpkgs/pkgs/tools/networking/inetutils/inetutils-1_9-PATH_PROCNET_DEV.patch26
-rw-r--r--nixpkgs/pkgs/tools/networking/innernet/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/iodine/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/ip2location/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/ip2unix/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/ipcalc/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/networking/ipcalc/sandbox_tests.patch59
-rw-r--r--nixpkgs/pkgs/tools/networking/iperf/2.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/iperf/3.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/iperf3d/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/ipfetch/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/ipgrep/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/ipinfo/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/ipv6calc/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/networking/isync/0001-Increase-imap_vprintf-buffer-size.patch34
-rw-r--r--nixpkgs/pkgs/tools/networking/isync/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/isync/work-around-unexpected-EOF-error-messages-at-end-of-SSL-connections.patch76
-rw-r--r--nixpkgs/pkgs/tools/networking/ivpn/default.nix92
-rw-r--r--nixpkgs/pkgs/tools/networking/ivpn/permissions.patch27
-rw-r--r--nixpkgs/pkgs/tools/networking/iwgtk/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/iwgtk/systemd-service.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/jnettop/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/jnettop/no-dns-resolution.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/juicity/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/junkie/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/jwhois/connect.patch60
-rw-r--r--nixpkgs/pkgs/tools/networking/jwhois/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/jwhois/service-name.patch17
-rw-r--r--nixpkgs/pkgs/tools/networking/kail/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/kapp/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/kea/default.nix110
-rw-r--r--nixpkgs/pkgs/tools/networking/kea/dont-create-var.patch28
-rw-r--r--nixpkgs/pkgs/tools/networking/keama/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/keepalived/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/networking/labctl/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/lftp/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/libnids/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/libreswan/default.nix162
-rw-r--r--nixpkgs/pkgs/tools/networking/ligolo-ng/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/linkchecker/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/networking/linux-router/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/networking/lldpd/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/logmein-hamachi/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/lsh/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/lsh/lshd-no-root-login.patch16
-rw-r--r--nixpkgs/pkgs/tools/networking/lsh/pam-service-name.patch14
-rw-r--r--nixpkgs/pkgs/tools/networking/lxi-tools/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/networking/lychee/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/networking/magic-wormhole-rs/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/mailctl/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/networking/maildrop/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/mailsend/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/mailutils/default.nix154
-rw-r--r--nixpkgs/pkgs/tools/networking/mailutils/don-t-use-descrypt-password-in-the-test-suite.patch59
-rw-r--r--nixpkgs/pkgs/tools/networking/mailutils/fix-build-mb-len-max.patch14
-rw-r--r--nixpkgs/pkgs/tools/networking/mailutils/path-to-cat.patch52
-rw-r--r--nixpkgs/pkgs/tools/networking/maphosts/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/networking/maphosts/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/networking/maphosts/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/maphosts/gemset.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/maubot/default.nix140
-rw-r--r--nixpkgs/pkgs/tools/networking/maubot/plugins/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/networking/maubot/plugins/generated.json2225
-rw-r--r--nixpkgs/pkgs/tools/networking/maubot/plugins/generated.nix74
-rwxr-xr-xnixpkgs/pkgs/tools/networking/maubot/plugins/update.py200
-rw-r--r--nixpkgs/pkgs/tools/networking/maubot/wrapper.nix70
-rw-r--r--nixpkgs/pkgs/tools/networking/mbidled/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/mcrcon/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/mdk4/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/meek/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/megatools/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/memtier-benchmark/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/minidlna/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/minio-client/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/minissdpd/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/minissdpd/makefile-install-dir.patch15
-rw-r--r--nixpkgs/pkgs/tools/networking/miniupnpc/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/miniupnpd/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/networking/miredo/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/mmsd-tng/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/networking/mmsd/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/mockoon/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/modemmanager/default.nix103
-rw-r--r--nixpkgs/pkgs/tools/networking/modemmanager/no-dummy-dirs-in-sysconfdir.patch20
-rw-r--r--nixpkgs/pkgs/tools/networking/mole/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/moodle-dl/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/mosh/bash_completion_datadir.patch19
-rw-r--r--nixpkgs/pkgs/tools/networking/mosh/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/networking/mosh/mosh-client_path.patch22
-rw-r--r--nixpkgs/pkgs/tools/networking/mosh/ssh_path.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/motrix/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/mozillavpn/default.nix155
-rw-r--r--nixpkgs/pkgs/tools/networking/mozwire/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/mpack/build-fix.patch29
-rw-r--r--nixpkgs/pkgs/tools/networking/mpack/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/mpack/sendmail-via-execvp.diff12
-rw-r--r--nixpkgs/pkgs/tools/networking/mqtt-benchmark/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/mqttmultimeter/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/networking/mqttmultimeter/deps.nix145
-rw-r--r--nixpkgs/pkgs/tools/networking/mqttui/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/mtr-exporter/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/mtr/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/mu/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/networking/mubeng/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/muffet/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/mutt-ics/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/networking/n2n/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/narrowlink/Cargo.lock.patch170
-rw-r--r--nixpkgs/pkgs/tools/networking/narrowlink/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/nat-traverse/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/nbd/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/networking/ncftp/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/ndisc6/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/ndjbdns/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/ndn-tools/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/nebula/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/netassert/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/netavark/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/netbird/default.nix116
-rw-r--r--nixpkgs/pkgs/tools/networking/netboot/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/netcat-openbsd/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/netcat/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/networking/netdiscover/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/nethogs/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/nethoscope/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/networking/netifd/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/networking/netkit/tftp/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/netmask/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/netrw/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/netselect/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/netsniff-ng/default.nix94
-rw-r--r--nixpkgs/pkgs/tools/networking/nettee/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/networking/networkd-dispatcher/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/networking/networkd-dispatcher/support_nix_store_path.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/networkd-notify/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/applet/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/default.nix216
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/dmenu/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/fix-install-paths.patch16
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/fix-paths.patch143
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/fix-paths.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/support-ppp-2.5.0.patch340
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/iodine/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/iodine/fix-paths.patch11
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/l2tp/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/l2tp/fix-paths.patch22
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/libnma/default.nix114
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/libnma/hardcode-gsettings.patch24
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/openconnect/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/openconnect/fix-paths.patch20
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/openvpn/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/openvpn/fix-paths.patch34
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/sstp/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/strongswan/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/tray.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/vpnc/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/networking/networkmanager/vpnc/fix-paths.patch31
-rw-r--r--nixpkgs/pkgs/tools/networking/nexttrace/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/nfdump/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/networking/nfstrace/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/ngrep/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/ngrok/default.nix47
-rwxr-xr-xnixpkgs/pkgs/tools/networking/ngrok/update.sh34
-rw-r--r--nixpkgs/pkgs/tools/networking/ngrok/versions.json38
-rw-r--r--nixpkgs/pkgs/tools/networking/nikto/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/networking/nikto/nix-wrapper-fix.patch26
-rw-r--r--nixpkgs/pkgs/tools/networking/nmh/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/networking/noip/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/norouter/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/notemap/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/nqptp/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/nqptp/remove-setcap.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/nss-mdns/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/nss-pam-ldapd/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/ntopng/default.nix94
-rw-r--r--nixpkgs/pkgs/tools/networking/ntp/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/ntpd-rs/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/nttcp/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/nttcp/format-security.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/ntttcp/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/nuttcp/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/nxdomain/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/nylon/configure-use-solib.patch33
-rw-r--r--nixpkgs/pkgs/tools/networking/nylon/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/nyx/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/nzbget/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/oapi-codegen/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/obfs4/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/ockam/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/networking/ocproxy/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/ocserv/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/octodns/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/networking/octodns/providers/bind/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/octodns/providers/gandi/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/octodns/providers/hetzner/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/octodns/providers/powerdns/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/offlineimap/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/networking/ofono/0001-Search-connectors-in-OFONO_PLUGIN_PATH.patch120
-rw-r--r--nixpkgs/pkgs/tools/networking/ofono/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/networking/oha/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/olsrd/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/oneshot/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/onetun/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/ookla-speedtest/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/oonf-olsrd2/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/ooniprobe-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/openapi-generator-cli/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/networking/openapi-generator-cli/example.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/openconnect/common.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/openconnect/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/networking/opendrop/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/networking/openfortivpn/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/networking/openntpd/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/openresolv/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/opensm/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/openssh/common.nix182
-rw-r--r--nixpkgs/pkgs/tools/networking/openssh/copyid.nix11
-rw-r--r--nixpkgs/pkgs/tools/networking/openssh/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/networking/openssh/dont_create_privsep_path.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/openssh/locale_archive.patch15
-rw-r--r--nixpkgs/pkgs/tools/networking/openssh/ssh-keysign-8.5.patch24
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/auth-ldap-fix-conftest.patch36
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix65
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/update-resolv-conf.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.patch26
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn3/default.nix123
-rw-r--r--nixpkgs/pkgs/tools/networking/oui/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/owl/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/amule/default.nix103
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/gtk-gnutella/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/tahoe-lafs/default.nix103
-rw-r--r--nixpkgs/pkgs/tools/networking/packetdrill/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/pacparser/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/par2cmdline/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/passh/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/pathvector/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/pcapc/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/pcapfix/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/pdnsd/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/pdsh/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/networking/persepolis/0001-Allow-building-on-darwin.patch45
-rw-r--r--nixpkgs/pkgs/tools/networking/persepolis/0002-Fix-startup-crash-on-darwin.patch41
-rw-r--r--nixpkgs/pkgs/tools/networking/persepolis/0003-Search-PATH-for-aria2c-on-darwin.patch29
-rw-r--r--nixpkgs/pkgs/tools/networking/persepolis/0004-Search-PATH-for-ffmpeg-on-darwin.patch34
-rw-r--r--nixpkgs/pkgs/tools/networking/persepolis/default.nix91
-rw-r--r--nixpkgs/pkgs/tools/networking/pgrok/build-deps/package.json38
-rw-r--r--nixpkgs/pkgs/tools/networking/pgrok/default.nix56
-rwxr-xr-xnixpkgs/pkgs/tools/networking/pgrok/update.sh40
-rw-r--r--nixpkgs/pkgs/tools/networking/pgrok/web.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/phantomsocks/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/phodav/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/networking/photon/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/picosnitch/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/piknik/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/pingtcp/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/pingu/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/pirate-get/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/pixiecore/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/pixiewps/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/pmacct/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/networking/polygon-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/polygraph/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/networking/popura/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/ppp/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/networking/pptp/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/pptpd/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/pptpd/ppp-2.5.0-compat.patch59
-rw-r--r--nixpkgs/pkgs/tools/networking/prettyping/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/pritunl-client/default.nix143
-rw-r--r--nixpkgs/pkgs/tools/networking/pritunl-ssh/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/privoxy/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/proxify/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/proxychains-ng/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/proxychains-ng/swap-priority-4-and-5-in-get_config_path.patch25
-rw-r--r--nixpkgs/pkgs/tools/networking/proxychains/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/proxychains/swap-priority-4-and-5-in-get_config_path.patch25
-rw-r--r--nixpkgs/pkgs/tools/networking/pssh/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/pwnat/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/pykms/default.nix92
-rw-r--r--nixpkgs/pkgs/tools/networking/q/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/qcal/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/qcard/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/qodem/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/qrcp/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/quickserve/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/quicktun/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/quicktun/tar-1.30.diff19
-rw-r--r--nixpkgs/pkgs/tools/networking/rabtap/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/radsecproxy/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/radvd/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/rathole/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/networking/ratman/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/networking/ratools/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/rcon/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/rconc/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/rdap/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/rdrview/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/reaver-wps-t6x/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/reaver-wps/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/reaver-wps/parallel-build.patch11
-rw-r--r--nixpkgs/pkgs/tools/networking/redfang/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/redir/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/redli/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/redsocks/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/requestly/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/restish/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/rewrk/Cargo.lock988
-rw-r--r--nixpkgs/pkgs/tools/networking/rewrk/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/ripe-atlas-tools/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/networking/ripmime/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/rosenpass/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/networking/rosenpass/tools.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/routedns/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/rp-pppoe/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/rshijack/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/rtptools/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/networking/rustcat/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/s3cmd/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/s3rs/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/s4cmd/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/s5cmd/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/saldl/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/samplicator/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/servefile/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/shadowfox/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/shadowsocks-libev/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/networking/shadowsocks-rust/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/shadowsocks-v2ray-plugin/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/shncpd/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/shorewall/default.nix123
-rw-r--r--nixpkgs/pkgs/tools/networking/siege/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/simple-dlna-browser/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/networking/simpleproxy/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/sing-box/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/networking/sipcalc/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/sipexer/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/sipsak/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/sish/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/sitespeed-io/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/networking/slack-cli/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/sleep-on-lan/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/slirp4netns/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/slowlorust/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/smartdns/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/smokeping/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/snabb/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/snet/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/snmpcheck/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/snowflake/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/socat/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/sockdump/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/sockperf/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/softnet/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/speedtest-go/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/speedtest-rs/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/spiped/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/spoof-mac/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/spoofer/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/srelay/arm.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/srelay/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/ssh-agents/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/ssh-ident/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/ssh-key-confirmer/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/sshed/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/sshoogr/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/sshpass/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/sshping/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/ssl-proxy/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/ssldump/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/networking/sslsplit/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/sstp/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/stevenblack-blocklist/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/strongswan/default.nix111
-rw-r--r--nixpkgs/pkgs/tools/networking/strongswan/ext_auth-path.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/strongswan/firewall_defaults.patch32
-rw-r--r--nixpkgs/pkgs/tools/networking/strongswan/updown-path.patch26
-rw-r--r--nixpkgs/pkgs/tools/networking/stun/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/stunnel/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/networking/stuntman/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/networking/subfinder/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/subnetcalc/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/suckit/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/surfraw/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/swagger-cli/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/swagger-codegen/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/swagger-codegen3/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/swaks/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/tayga/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/tcp-cutter/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/tcpdump/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/tcpflow/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/tcpreplay/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/tcptraceroute/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/tdns-cli/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/teavpn2/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/teavpn2/nix.patch14
-rw-r--r--nixpkgs/pkgs/tools/networking/telepresence/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/telepresence2/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/networking/tendermint/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/termscp/Cargo.lock.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/termscp/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/networking/termshark/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/tftp-hpa/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/tgt/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/networking/tinc/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/tinc/pre.nix45
-rw-r--r--nixpkgs/pkgs/tools/networking/tinyfecvpn/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/tinyproxy/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/tinyssh/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/tinystatus/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/tnat64/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/toss/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/tox-node/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/toxvpn/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/tracebox/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/traceroute/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/tran/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/transmission-rss/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/transmission-rss/update-cargo-lock-version.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/trickle/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/trippy/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/trurl/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/tuic/Cargo.lock1052
-rw-r--r--nixpkgs/pkgs/tools/networking/tuic/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/tun2socks/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/tunnelto/Cargo.lock2985
-rw-r--r--nixpkgs/pkgs/tools/networking/tunnelto/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/tuntox/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/networking/tunwg/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/twa/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/networking/ua/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/ubridge/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/ucspi-tcp/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/networking/ucspi-tcp/remove-setuid.patch15
-rw-r--r--nixpkgs/pkgs/tools/networking/udp2raw/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/networking/udpreplay/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/udptunnel/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/uget-integrator/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/uget/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/unbound/default.nix171
-rw-r--r--nixpkgs/pkgs/tools/networking/unbound/python.nix71
-rw-r--r--nixpkgs/pkgs/tools/networking/updog/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/uqmi/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/urlwatch/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/userhosts/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/uwimap/clang-fix.patch306
-rw-r--r--nixpkgs/pkgs/tools/networking/uwimap/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/networking/v2ray/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/networking/v2raya/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/networking/v2raya/package.json57
-rw-r--r--nixpkgs/pkgs/tools/networking/vde2/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/vegeta/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/veilid/Cargo.lock6425
-rw-r--r--nixpkgs/pkgs/tools/networking/veilid/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/vlan/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/voms/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/networking/vopono/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/vpn-slice/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/vpnc-scripts/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/vpnc/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/waitron/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/waitron/staticfiles-directory.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/wakelan/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/wakeonlan/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/wavemon/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/wbox/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/webalizer/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/webwormhole/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/wg-friendly-peer-names/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/wg-netmanager/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/wgautomesh/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/wget/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/networking/wget/remove-runtime-dep-on-openssl-headers.patch17
-rw-r--r--nixpkgs/pkgs/tools/networking/wget2/default.nix107
-rw-r--r--nixpkgs/pkgs/tools/networking/whatip/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/networking/whois/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/wifish/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/wireguard-go/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/wireguard-tools/default.nix78
-rwxr-xr-xnixpkgs/pkgs/tools/networking/wireguard-tools/update.sh7
-rw-r--r--nixpkgs/pkgs/tools/networking/wireguard-vanity-address/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/wireproxy/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/wol/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/wolfebin/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/wormhole-william/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/wrk/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/wrk2/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/networking/wsl-vpnkit/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/networking/wuzz/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/x11-ssh-askpass/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/xdp-tools/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/networking/xh/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/networking/xl2tpd/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/xnbd/0001-Fix-build-for-glibc-2.28.patch25
-rw-r--r--nixpkgs/pkgs/tools/networking/xnbd/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/xray/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/networking/xrootd/default.nix152
-rw-r--r--nixpkgs/pkgs/tools/networking/xrootd/fetchxrd.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/xrootd/test-runner.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/xxh/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/yrd/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/ytcc/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/zap/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/zerotierone/Cargo.lock1699
-rw-r--r--nixpkgs/pkgs/tools/networking/zerotierone/default.nix98
-rwxr-xr-xnixpkgs/pkgs/tools/networking/zerotierone/update.sh7
-rw-r--r--nixpkgs/pkgs/tools/networking/zrok/default.nix56
-rwxr-xr-xnixpkgs/pkgs/tools/networking/zrok/update.sh38
-rw-r--r--nixpkgs/pkgs/tools/networking/zs-apc-spdu-ctl/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/zs-wait4host/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/zssh/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/nix/alejandra/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/nix/cached-nix-shell/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/nix/dnadd/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/nix/fh/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/nix/gridlock/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/nix/info/default.nix47
-rwxr-xr-xnixpkgs/pkgs/tools/nix/info/info.sh174
-rw-r--r--nixpkgs/pkgs/tools/nix/info/multiuser.nix12
-rw-r--r--nixpkgs/pkgs/tools/nix/info/relaxedsandbox.nix12
-rw-r--r--nixpkgs/pkgs/tools/nix/info/sandbox.nix10
-rw-r--r--nixpkgs/pkgs/tools/nix/nar-serve/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-init/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-init/get_nix_license.nix75
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-melt/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-output-monitor/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-output-monitor/generated-package.nix44
-rwxr-xr-xnixpkgs/pkgs/tools/nix/nix-output-monitor/update.sh30
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-query-tree-viewer/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-script/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/nix/nixci/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/nix/nixdoc/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/nix/nixel/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-generators/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-install-tools/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-option/CMakeLists.txt11
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-option/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-option/libnix-copy-paste.cc80
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-option/libnix-copy-paste.hh9
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-option/nixos-option.889
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-option/nixos-option.cc652
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py55
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/asciidoc.py216
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/commonmark.py190
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/docbook.py247
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/html.py353
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manpage.py287
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual.py789
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py203
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/md.py615
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py681
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/parallel.py58
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/types.py14
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/utils.py21
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/pyproject.toml15
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/sample_md.py62
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_asciidoc.py145
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_auto_id_prefix.py92
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_commonmark.py99
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_headings.py104
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_html.py264
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_lists.py188
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_manpage.py169
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_options.py14
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_plugins.py528
-rw-r--r--nixpkgs/pkgs/tools/nix/nixpkgs-fmt/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/nix/nixpkgs-hammering/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/nix/nixpkgs-lint/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/nix/npins/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/nix/npins/source.nix57
-rw-r--r--nixpkgs/pkgs/tools/nix/npins/sources.json19
-rw-r--r--nixpkgs/pkgs/tools/nix/rnix-hashes/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/nix/statix/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/nix/web-devmode.nix117
-rw-r--r--nixpkgs/pkgs/tools/nix/zon2nix/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/package-management/akku/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/package-management/akku/hardcode-libcurl.patch18
-rw-r--r--nixpkgs/pkgs/tools/package-management/apk-tools/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/package-management/apkg/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/package-management/appimage-run/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/package-management/appimage-run/test.nix37
-rw-r--r--nixpkgs/pkgs/tools/package-management/appimagekit/default.nix131
-rw-r--r--nixpkgs/pkgs/tools/package-management/appimagekit/nix.patch82
-rw-r--r--nixpkgs/pkgs/tools/package-management/apt-dater/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/package-management/apx/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/package-management/cde/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/empty-dirs.patch49
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/etc-dirs.patch25
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/glibc-check.patch71
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/missing-functions.patch162
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/readlink-types.patch19
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/scandir.patch75
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/set-buildroot.patch15
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/use-old-memcpy.patch12
-rw-r--r--nixpkgs/pkgs/tools/package-management/ciel/Cargo.lock2342
-rw-r--r--nixpkgs/pkgs/tools/package-management/ciel/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/package-management/clib/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/package-management/comma/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/package-management/conda/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/package-management/createrepo_c/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch11
-rw-r--r--nixpkgs/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch11
-rw-r--r--nixpkgs/pkgs/tools/package-management/deploy-rs/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/package-management/disnix/DisnixWebService/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/package-management/disnix/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/package-management/disnix/disnixos/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/package-management/disnix/dydisnix/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/package-management/disnix/dysnomia/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/package-management/dnf5/default.nix121
-rw-r--r--nixpkgs/pkgs/tools/package-management/dpkg/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/package-management/dpkg/setup-hook.sh12
-rw-r--r--nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile.lock39
-rw-r--r--nixpkgs/pkgs/tools/package-management/elm-github-install/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/package-management/elm-github-install/gemset.nix114
-rw-r--r--nixpkgs/pkgs/tools/package-management/emplace/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/package-management/fortran-fpm/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/package-management/fpm/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/package-management/fpm/Gemfile.lock43
-rw-r--r--nixpkgs/pkgs/tools/package-management/fpm/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/package-management/fpm/gemset.nix146
-rw-r--r--nixpkgs/pkgs/tools/package-management/fusesoc/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/package-management/gx/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/package-management/gx/go/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/package-management/harmonia/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/package-management/holo-build/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/package-management/home-manager/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/package-management/libcomps/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/package-management/libcomps/fix-python-install-dir.patch13
-rw-r--r--nixpkgs/pkgs/tools/package-management/libdnf/default.nix104
-rw-r--r--nixpkgs/pkgs/tools/package-management/libdnf/fix-python-install-dir.patch12
-rw-r--r--nixpkgs/pkgs/tools/package-management/librepo/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/package-management/licensee/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/package-management/licensee/Gemfile.lock44
-rw-r--r--nixpkgs/pkgs/tools/package-management/licensee/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/package-management/licensee/gemset.nix169
-rw-r--r--nixpkgs/pkgs/tools/package-management/microdnf/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/package-management/micromamba/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/package-management/morph/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/package-management/mynewt-newt/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/package-management/nfpm/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/package-management/niff/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-bundle/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-doc/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-du/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-eval-jobs/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-index/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-index/wrapper.nix14
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-pin/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-prefetch-scripts/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-prefetch/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-serve/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-simple-deploy/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-template/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-top/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-universal-prefetch/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-update-source/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-update/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix/common.nix260
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix/default.nix277
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix/nix-perl.nix43
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix/patches/aws-sdk-cpp-TransferManager-ContentEncoding.patch127
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch45
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix/patches/flaky-tests.patch12
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixpkgs-review/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/package-management/nox/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/package-management/nox/nox-review-wip.patch11
-rw-r--r--nixpkgs/pkgs/tools/package-management/npm-check-updates/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/package-management/nvd/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/package-management/opkg-utils/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/package-management/opkg/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/package-management/packagekit/default.nix117
-rw-r--r--nixpkgs/pkgs/tools/package-management/packagekit/qt.nix28
-rw-r--r--nixpkgs/pkgs/tools/package-management/pacman/default.nix137
-rw-r--r--nixpkgs/pkgs/tools/package-management/pacman/dont-create-empty-dirs.patch20
-rw-r--r--nixpkgs/pkgs/tools/package-management/pacup/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/package-management/pdm/default.nix117
-rw-r--r--nixpkgs/pkgs/tools/package-management/pkg/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/package-management/poetry/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-audit-plugin.nix54
-rw-r--r--nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-plugin-export.nix38
-rw-r--r--nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix43
-rw-r--r--nixpkgs/pkgs/tools/package-management/poetry/unwrapped.nix176
-rw-r--r--nixpkgs/pkgs/tools/package-management/poetry2conda/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/package-management/protontricks/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/package-management/protontricks/steam-run.patch65
-rw-r--r--nixpkgs/pkgs/tools/package-management/repro-get/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/package-management/rpm/default.nix100
-rw-r--r--nixpkgs/pkgs/tools/package-management/smlpkg/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/package-management/wapm/cli/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/package-management/xbps/cert-paths.patch25
-rw-r--r--nixpkgs/pkgs/tools/package-management/xbps/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/package-management/yarn-lock-converter/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/package-management/yarn-lock-converter/package-lock.json592
-rw-r--r--nixpkgs/pkgs/tools/package-management/yarn-lock-converter/source.json6
-rwxr-xr-xnixpkgs/pkgs/tools/package-management/yarn-lock-converter/update.sh25
-rw-r--r--nixpkgs/pkgs/tools/security/2fa/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/acltoolkit/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/acsccid/default.nix84
-rw-r--r--nixpkgs/pkgs/tools/security/adenum/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/adreaper/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/aesfix/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/aeskeyfind/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/aespipe/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/afl/README.md19
-rw-r--r--nixpkgs/pkgs/tools/security/afl/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/security/afl/libdislocator.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/afl/qemu-patches/no-etc-install.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/afl/qemu-patches/syscall-glibc2_30.diff51
-rw-r--r--nixpkgs/pkgs/tools/security/afl/qemu.nix77
-rw-r--r--nixpkgs/pkgs/tools/security/aflplusplus/default.nix173
-rw-r--r--nixpkgs/pkgs/tools/security/aflplusplus/libdislocator.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/aflplusplus/libtokencap.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/aflplusplus/qemu.nix144
-rw-r--r--nixpkgs/pkgs/tools/security/age-plugin-ledger/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/age-plugin-tpm/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/age-plugin-yubikey/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/age/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/security/agebox/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/aide/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/aiodnsbrute/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/alterx/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/amber/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/amoco/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/security/apachetomcatscanner/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/apg/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/security/apkleaks/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/ares-rs/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/argocd-vault-plugin/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/arsenal/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/arti/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/arubaotp-seed-extractor/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/asnmap/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/atomic-operator/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/security/authoscope/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/security/authz0/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/aws-iam-authenticator/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/b2sum/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/b3sum/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/baboossh/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/badchars/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/badrobot/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/bao/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/bash-supergenpass/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/security/bettercap/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/beyond-identity/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/security/binbloom/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/biscuit-cli/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/bitwarden-directory-connector/default.nix103
-rw-r--r--nixpkgs/pkgs/tools/security/bitwarden/cli.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/bitwarden/default.nix191
-rw-r--r--nixpkgs/pkgs/tools/security/bitwarden/electron-27.patch69
-rw-r--r--nixpkgs/pkgs/tools/security/bkcrack/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/bmrsa/11.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/boofuzz/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/security/bpb/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/browserpass/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/security/bruteforce-luks/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/brutespray/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/security/bundler-audit/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/security/bundler-audit/Gemfile.lock16
-rw-r--r--nixpkgs/pkgs/tools/security/bundler-audit/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/bundler-audit/gemset.nix23
-rw-r--r--nixpkgs/pkgs/tools/security/buttercup-desktop/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/bws/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/cameradar/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/cariddi/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/ccid/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/security/ccrypt/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/security/cdk-go/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/cdxgen/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/certdump/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/certdump/deps.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/certgraph/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/certinfo/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/certstrap/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/certsync/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/cewl/Gemfile8
-rw-r--r--nixpkgs/pkgs/tools/security/cewl/Gemfile.lock31
-rw-r--r--nixpkgs/pkgs/tools/security/cewl/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/cewl/gemset.nix104
-rw-r--r--nixpkgs/pkgs/tools/security/cfripper/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/security/cfssl/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/chain-bench/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/security/chainsaw/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/cherrybomb/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/chipsec/compile-ko.diff13
-rw-r--r--nixpkgs/pkgs/tools/security/chipsec/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/security/chipsec/ko-path.diff13
-rw-r--r--nixpkgs/pkgs/tools/security/chkrootkit/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/chntpw/00-chntpw-build-arch-autodetect.patch28
-rw-r--r--nixpkgs/pkgs/tools/security/chntpw/01-chntpw-install-target.patch20
-rw-r--r--nixpkgs/pkgs/tools/security/chntpw/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/security/chopchop/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/chrome-token-signing/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/cie-middleware-linux/default.nix189
-rw-r--r--nixpkgs/pkgs/tools/security/cirrusgo/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/clairvoyance/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/clamav/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/clamav/remove-freshclam-test.patch20
-rw-r--r--nixpkgs/pkgs/tools/security/clamav/sample-cofiguration-file-install-location.patch29
-rw-r--r--nixpkgs/pkgs/tools/security/clevis/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/security/clevis/tang-timeout.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/cliam/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/cloudbrute/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/cloudfox/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/cloudhunter/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/cloudlist/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/cmospwd/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/cnquery/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/cnspec/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/coercer/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/commix/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/cosign/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/security/cowpatty/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/security/coze/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/crackmapexec/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/security/crackql/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/crackxls/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/credential-detector/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/creds/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/credslayer/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/security/crlfsuite/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/crlfuzz/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/crowbar/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/crowdsec/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/security/crunch/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/cryptomator/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/security/ctmg/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/security/cve-bin-tool/default.nix145
-rw-r--r--nixpkgs/pkgs/tools/security/cve-bin-tool/no-gsutil-python-dependency.patch12
-rw-r--r--nixpkgs/pkgs/tools/security/cyclonedx-gomod/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/dalfox/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/das/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/davtest/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/dbmonster/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/security/decoder/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/security/deepsea/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/deepsecrets/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/security/der-ascii/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/dieharder/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/dieharder/stdint.patch10
-rw-r--r--nixpkgs/pkgs/tools/security/dirstalk/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/dismap/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/dismember/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/dnsenum/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/dnspeep/Cargo.lock669
-rw-r--r--nixpkgs/pkgs/tools/security/dnspeep/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/dnsrecon/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/security/dnsx/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/doas-sudo-shim/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/doas/0001-add-NixOS-specific-dirs-to-safe-PATH.patch24
-rw-r--r--nixpkgs/pkgs/tools/security/doas/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/security/donkey/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/dontgo403/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/doona/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/doppler/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/dorkscout/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/dumpasn1/configpath.patch28
-rw-r--r--nixpkgs/pkgs/tools/security/dumpasn1/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/duo-unix/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/earlybird/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/ec2stepshell/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/ecdsatool/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/ecdsautils/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/echidna/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/ecryptfs/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/security/ecryptfs/helper.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/efitools/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/eid-mw/default.nix104
-rw-r--r--nixpkgs/pkgs/tools/security/eid-mw/eid-nssdb.in83
-rw-r--r--nixpkgs/pkgs/tools/security/enc/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/enchive/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/enpass/data.json12
-rw-r--r--nixpkgs/pkgs/tools/security/enpass/default.nix105
-rwxr-xr-xnixpkgs/pkgs/tools/security/enpass/update_script.py74
-rw-r--r--nixpkgs/pkgs/tools/security/enum4linux-ng/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/enum4linux/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/security/enumerepo/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/erosmb/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/security/eschalot/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/evil-winrm/Gemfile7
-rw-r--r--nixpkgs/pkgs/tools/security/evil-winrm/Gemfile.lock51
-rw-r--r--nixpkgs/pkgs/tools/security/evil-winrm/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/evil-winrm/gemset.nix187
-rw-r--r--nixpkgs/pkgs/tools/security/evtx/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/expliot/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/security/exploitdb/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/extrude/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/fail2ban/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/security/faraday-agent-dispatcher/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/security/faraday-cli/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/fcrackzip/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/fcrackzip/fcrackzip_forkexec.patch105
-rw-r--r--nixpkgs/pkgs/tools/security/feroxbuster/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/ffuf/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/fido2luks/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/fierce/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/fingerprintx/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/firefox_decrypt/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/flare-floss/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/security/fpm2/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/security/fprintd/default.nix115
-rw-r--r--nixpkgs/pkgs/tools/security/fprintd/tod.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/freeze/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/frida-tools/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/fscan/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/security/fulcio/default.nix83
-rw-r--r--nixpkgs/pkgs/tools/security/fwbuilder/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/fwknop/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/security/galer/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/gallia/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/security/gau/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/gen-oath-safe/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/gencfsm/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/security/gencfsm/makefile-mkdir.patch14
-rw-r--r--nixpkgs/pkgs/tools/security/genpass/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/gfshare/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/ggshield/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/security/ghauri/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/ghdorker/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/ghidra/0001-Use-protobuf-gradle-plugin.patch193
-rw-r--r--nixpkgs/pkgs/tools/security/ghidra/build.nix173
-rw-r--r--nixpkgs/pkgs/tools/security/ghidra/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/security/ghost/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/gitjacker/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/gitleaks/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/security/gnome-keysign/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/security/gnu-pw-mgr/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg-pkcs11-scd/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/1.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/1compat.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/22-allow-import-of-previously-known-keys-even-without-UI.patch107
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/22.nix106
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/24-allow-import-of-previously-known-keys-even-without-UI.patch107
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/24-revert-rfc4880bis-defaults.patch200
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/24.nix106
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/accept-subkeys-with-a-good-revocation-but-no-self-sig.patch32
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/clang.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/fix-libusb-include-path.patch12
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/tests-add-test-cases-for-import-without-uid.patch201
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/v3-0001-Disallow-compressed-signatures-and-certificates.patch216
-rw-r--r--nixpkgs/pkgs/tools/security/go-cve-search/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/go-dork/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/go-exploitdb/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/go365/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/goblob/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/gobuster/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/gomapenum/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/gopass/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/security/gopass/git-credential.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/gopass/hibp.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/gopass/jsonapi.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/gopass/summon.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/gorilla-bin/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/gosh/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/gospider/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/gotestwaf/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/gotrue/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/gotrue/supabase.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/goverview/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/govulncheck/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/security/govulncheck/version.patch15
-rw-r--r--nixpkgs/pkgs/tools/security/gowitness/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/gpg-tui/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/security/grap/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/graphinder/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/security/graphqlmap/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/graphw00f/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/grype/default.nix119
-rw-r--r--nixpkgs/pkgs/tools/security/haka/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/hakrawler/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/hash-identifier/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/hash-slinger/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/security/hash_extender/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/hashcash/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/hashcat-utils/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/hashcat/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/security/hashdeep/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/hashrat/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/haveged/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/hcxdumptool/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/hcxtools/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/hfinger/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/himitsu-firefox/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/himitsu/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/holehe/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/hologram/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/honeytrap/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/honggfuzz/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/security/hstsparser/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/httpdump/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/httpx/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/iaito/default.nix100
-rw-r--r--nixpkgs/pkgs/tools/security/ibm-sw-tpm2/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/security/ic-keysmith/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/security/ifdnfc/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/ike-scan/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/imdshift/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/inql/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/ioc-scan/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/ioccheck/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/security/ipscan/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/isolate/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/security/jadx/default.nix161
-rw-r--r--nixpkgs/pkgs/tools/security/jaeles/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/jd-cli/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/jd-gui/default.nix134
-rw-r--r--nixpkgs/pkgs/tools/security/john/default.nix91
-rw-r--r--nixpkgs/pkgs/tools/security/joincap/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/joomscan/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/jsluice/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/jsubfinder/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/jwt-cli/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/jwt-hack/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/jwx/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/katana/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/kbs2/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/kdigger/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/security/keepwn/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/kepler/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/kerbrute/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/kestrel/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/keybase/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/keybase/fix-paths-keybase.patch16
-rw-r--r--nixpkgs/pkgs/tools/security/keybase/gui.nix117
-rw-r--r--nixpkgs/pkgs/tools/security/keybase/kbfs.nix20
-rw-r--r--nixpkgs/pkgs/tools/security/keycard-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/keyscope/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/security/kiterunner/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/knockpy/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/knowsmore/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/kpcli/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/krunner-pass/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/security/krunner-pass/pass-path.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/kstart/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/security/kube-bench/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/security/kube-hunter/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/security/kubeaudit/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/kubeclarity/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/kubernetes-polaris/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/security/kubescape/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/security/kubesec/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/kubestroyer/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/kwalletcli/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/lastpass-cli/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/security/ldapmonitor/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/ldapnomnom/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/ldeep/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/lesspass-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/lethe/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/libacr38u/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/libmodsecurity/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/security/libtpms/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/lil-pwny/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/linux-exploit-suggester/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/lmp/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/log4j-detect/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/log4j-scan/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/log4j-sniffer/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/log4j-vuln-scanner/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/log4jcheck/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/log4shell-detector/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/logkeys/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/logmap/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/lynis/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/maigret/default.nix112
-rw-r--r--nixpkgs/pkgs/tools/security/mantra/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/masscan/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/security/medusa/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/melt/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/metabigor/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/metasploit/Gemfile4
-rw-r--r--nixpkgs/pkgs/tools/security/metasploit/Gemfile.lock467
-rw-r--r--nixpkgs/pkgs/tools/security/metasploit/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/security/metasploit/gemset.nix1675
-rw-r--r--nixpkgs/pkgs/tools/security/metasploit/shell.nix17
-rwxr-xr-xnixpkgs/pkgs/tools/security/metasploit/update.sh20
-rw-r--r--nixpkgs/pkgs/tools/security/mfcuk/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/security/mfoc/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/minica/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/minio-certgen/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/security/minisign/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/minizign/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/mitm6/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/mitmproxy2swagger/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/mkp224o/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/mkpasswd/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/mkrand/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/mktemp/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/modsecurity-crs/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/modsecurity/Makefile.am.patch17
-rw-r--r--nixpkgs/pkgs/tools/security/modsecurity/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/security/mokutil/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/mongoaudit/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/monkeysphere/default.nix103
-rw-r--r--nixpkgs/pkgs/tools/security/monkeysphere/monkeysphere.patch23
-rw-r--r--nixpkgs/pkgs/tools/security/monkeysphere/openssh-nixos-sandbox.patch17
-rw-r--r--nixpkgs/pkgs/tools/security/monsoon/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/mpw/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/security/msfpc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/msldapdump/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/munge/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/mx-takeover/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/naabu/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/nasty/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/nbtscanner/Cargo.lock.patch176
-rw-r--r--nixpkgs/pkgs/tools/security/nbtscanner/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/nbutools/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/ncrack/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/netexec/default.nix106
-rw-r--r--nixpkgs/pkgs/tools/security/networkminer/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/security/networkminer/deps.nix8
-rw-r--r--nixpkgs/pkgs/tools/security/networkminer/xdg-dirs.patch174
-rw-r--r--nixpkgs/pkgs/tools/security/nitrokey-app/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/security/nitrokey-app2/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/security/nmap-formatter/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/nmap/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/nmap/qt.nix60
-rw-r--r--nixpkgs/pkgs/tools/security/noseyparker/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/security/nosqli/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/notary/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/security/notary/no-git-usage.patch15
-rw-r--r--nixpkgs/pkgs/tools/security/notation/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/nsjail/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/ntlmrecon/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/nuclei/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/nwipe/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/oath-toolkit/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/oauth2c/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/octosuite/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/offensive-azure/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/onesixtyone/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/onioncircuits/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/security/onlykey-agent/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/security/onlykey-cli/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/onlykey/default.nix74
-rwxr-xr-xnixpkgs/pkgs/tools/security/onlykey/generate.sh5
-rw-r--r--nixpkgs/pkgs/tools/security/onlykey/node-packages.nix6710
-rw-r--r--nixpkgs/pkgs/tools/security/onlykey/onlykey.nix17
-rw-r--r--nixpkgs/pkgs/tools/security/onlykey/package.json3
-rw-r--r--nixpkgs/pkgs/tools/security/open-ecard/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/security/opencryptoki/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/security/openpgp-card-tools/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/openrisk/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/opensc/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/security/orjail/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/ospd-openvas/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/ossec/agent.nix69
-rw-r--r--nixpkgs/pkgs/tools/security/ossec/no-root.patch297
-rw-r--r--nixpkgs/pkgs/tools/security/ossec/server.nix70
-rw-r--r--nixpkgs/pkgs/tools/security/osv-detector/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/security/osv-scanner/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/otpauth/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/ots/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/p0f/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/padbuster/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/pamtester/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/paperkey/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/parsero/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/pass/default.nix165
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extension-dir.patch32
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/audit/0001-Set-base-to-an-empty-value.patch43
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/audit/0002-Fix-audit.bash-setup.patch28
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/audit/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/checkup.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/file.nix23
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/genphrase.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/import.nix69
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/otp.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/tomb.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/update.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/pass/no-darwin-getopt.patch11
-rw-r--r--nixpkgs/pkgs/tools/security/pass/rofi-pass.nix92
-rw-r--r--nixpkgs/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch50
-rw-r--r--nixpkgs/pkgs/tools/security/pass/wofi-pass.nix65
-rw-r--r--nixpkgs/pkgs/tools/security/pass2csv/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/passage/darwin-getopt-path.patch12
-rw-r--r--nixpkgs/pkgs/tools/security/passage/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/security/passff-host/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/passphrase2pgp/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/pcsc-cyberjack/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/pcsc-safenet/default.nix103
-rw-r--r--nixpkgs/pkgs/tools/security/pcsc-scm-scl011/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/security/pcsc-scm-scl011/eid.patch28
-rw-r--r--nixpkgs/pkgs/tools/security/pcsc-tools/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/security/pcsclite/default.nix94
-rw-r--r--nixpkgs/pkgs/tools/security/pdfcrack/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/pentestgpt/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/security/pgpdump/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/phrasendrescher/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry-bemenu/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry-rofi/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry/autoconf-ar.patch35
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry/default.nix100
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry/mac.nix90
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry/mac/Main.nib/keyedobjects-101300.nibbin0 -> 974 bytes
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry/mac/Main.nib/keyedobjects.nibbin0 -> 1354 bytes
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry/mac/Pinentry.nib/keyedobjects-101300.nibbin0 -> 30301 bytes
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry/mac/Pinentry.nib/keyedobjects.nibbin0 -> 40124 bytes
-rw-r--r--nixpkgs/pkgs/tools/security/pius/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/plasma-pass/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/please/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/please/nixos-specific.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/plecost/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/polkit-gnome/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/polkit-gnome/polkit-gnome-authentication-agent-1.desktop88
-rw-r--r--nixpkgs/pkgs/tools/security/pomerium-cli/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/security/posteid-seed-extractor/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/pretender/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/proxmark3/darwin-always-gui.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/proxmark3/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/security/prs/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/security/psudohash/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/pwdsafety/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/pwgen-secure/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/pwgen/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/pwncat/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/security/qdigidoc/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/security/quark-engine/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/security/quill-qr/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/quill/Cargo.lock3661
-rw-r--r--nixpkgs/pkgs/tools/security/quill/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/radamsa/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/rarcrack/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/rblake2sum/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/rblake3sum/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/rbw/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/security/redwax-tool/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/regexploit/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/regpg/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/security/rekor/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/security/responder/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/rhash/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/ripasso/Cargo.lock3989
-rw-r--r--nixpkgs/pkgs/tools/security/ripasso/cursive.nix81
-rw-r--r--nixpkgs/pkgs/tools/security/ripasso/fix-build.patch40
-rw-r--r--nixpkgs/pkgs/tools/security/ripasso/fix-tests.patch12
-rw-r--r--nixpkgs/pkgs/tools/security/rng-tools/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/security/rnp/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/security/rnp/sexp_sexpp_rename.patch50
-rw-r--r--nixpkgs/pkgs/tools/security/rnp/unbundle-sexpp.patch38
-rw-r--r--nixpkgs/pkgs/tools/security/ronin/Gemfile9
-rw-r--r--nixpkgs/pkgs/tools/security/ronin/Gemfile.lock245
-rw-r--r--nixpkgs/pkgs/tools/security/ronin/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/ronin/gemset.nix964
-rw-r--r--nixpkgs/pkgs/tools/security/routersploit/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/security/rsign2/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/security/rucredstash/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/ruler/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/rustscan/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/s5/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/safe/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/saml2aws/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/sammler/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/sbctl/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/sbomnix/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/sbsigntool/autoconf.patch31
-rw-r--r--nixpkgs/pkgs/tools/security/sbsigntool/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/schleuder/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/security/schleuder/Gemfile.lock86
-rw-r--r--nixpkgs/pkgs/tools/security/schleuder/cli/Gemfile4
-rw-r--r--nixpkgs/pkgs/tools/security/schleuder/cli/Gemfile.lock22
-rw-r--r--nixpkgs/pkgs/tools/security/schleuder/cli/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/schleuder/cli/gemset.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/schleuder/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/schleuder/gemset.nix316
-rw-r--r--nixpkgs/pkgs/tools/security/scilla/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/scorecard/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/security/scrypt/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/sdlookup/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/seccure/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/secp256k1/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/secrets-extractor/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/secretscanner/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/security/sedutil/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/semgrep/common.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/semgrep/default.nix155
-rw-r--r--nixpkgs/pkgs/tools/security/semgrep/semgrep-core.nix52
-rwxr-xr-xnixpkgs/pkgs/tools/security/semgrep/update.sh146
-rw-r--r--nixpkgs/pkgs/tools/security/sequoia-chameleon-gnupg/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/sequoia-sq/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/security/sequoia-sqop/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/security/sequoia-sqv/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/security/sha1collisiondetection/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/shc/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/sheesy-cli/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/shellclear/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/shellnoob/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/shellz/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/sherlock/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/security/shisho/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/security/sigma-cli/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/security/signify/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/signing-party/default.nix226
-rw-r--r--nixpkgs/pkgs/tools/security/signing-party/gpgwrap_makefile.patch16
-rw-r--r--nixpkgs/pkgs/tools/security/silenthound/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/simple-tpm-pk11/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/sipvicious/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/sirikali/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/security/slowhttptest/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/slsa-verifier/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/smbmap/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/smbscan/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/sn0int/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/security/snallygaster/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/snow/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/snowcat/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/snowcrash/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/social-engineer-toolkit/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/security/softhsm/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/solo2-cli/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/sonar-scanner-cli/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/sops/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/spectre-cli/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/security/spectre-meltdown-checker/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/spire/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/spyre/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/srm/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/srm/fix-output-in-verbose-mode.patch57
-rw-r--r--nixpkgs/pkgs/tools/security/ssdeep/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/ssh-audit/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/ssh-mitm/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/security/ssh-to-age/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/ssh-to-pgp/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/sshchecker/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/sshguard/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/sshocker/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/sshuttle/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/security/sshuttle/sudo.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/sslscan/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/sss-cli/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/sss-cli/fix-cargo-lock.patch21
-rw-r--r--nixpkgs/pkgs/tools/security/ssss/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/stacs/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/stegseek/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/step-ca/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/security/step-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/step-kms-plugin/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/stoken/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/stricat/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/su-exec/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/subjs/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/sudo-rs/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/security/sudo/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/security/swaggerhole/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/swtpm/default.nix105
-rw-r--r--nixpkgs/pkgs/tools/security/sx-go/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/tboot/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/tcb/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/tcb/fix-makefiles.patch52
-rw-r--r--nixpkgs/pkgs/tools/security/tcpcrypt/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/teler/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/tell-me-your-secrets/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/security/terrascan/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/tessen/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/thc-hydra/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/thc-ipv6/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/theharvester/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/security/threatest/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/tlsx/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/tor/default.nix127
-rw-r--r--nixpkgs/pkgs/tools/security/tor/disable-monotonic-timer-tests.patch48
-rw-r--r--nixpkgs/pkgs/tools/security/tor/torsocks-gethostbyaddr-darwin.patch33
-rw-r--r--nixpkgs/pkgs/tools/security/tor/torsocks.nix61
-rw-r--r--nixpkgs/pkgs/tools/security/tor/update.nix70
-rw-r--r--nixpkgs/pkgs/tools/security/tpm-luks/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/tpm-luks/openssl-1.1.patch63
-rw-r--r--nixpkgs/pkgs/tools/security/tpm-luks/signed-ptr.patch15
-rw-r--r--nixpkgs/pkgs/tools/security/tpm-quote-tools/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/tpm-tools/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/tpm2-abrmd/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/security/tpm2-tools/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/tracee/default.nix113
-rw-r--r--nixpkgs/pkgs/tools/security/tracee/use-our-libbpf.patch48
-rw-r--r--nixpkgs/pkgs/tools/security/traitor/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch19
-rw-r--r--nixpkgs/pkgs/tools/security/trousers/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/truecrack/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/security/trueseeing/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/trufflehog/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/trustymail/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/uddup/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/udpx/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/uncover/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/urlhunter/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/usbrip/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/vals/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/vault-medusa/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/security/vault-ssh-plus/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/vault/default.nix53
-rwxr-xr-xnixpkgs/pkgs/tools/security/vault/update-bin.sh43
-rw-r--r--nixpkgs/pkgs/tools/security/vault/vault-bin.nix63
-rw-r--r--nixpkgs/pkgs/tools/security/vaultwarden/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/vaultwarden/update.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/vaultwarden/webvault.nix74
-rw-r--r--nixpkgs/pkgs/tools/security/verifpal/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/vexctl/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/security/volatility3/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/security/vt-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/vulnix/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/security/wad/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/waf-tester/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/wafw00f/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/wapiti/default.nix160
-rw-r--r--nixpkgs/pkgs/tools/security/web-eid-app/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/webanalyze/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/weggli/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/whatweb/Gemfile6
-rw-r--r--nixpkgs/pkgs/tools/security/whatweb/Gemfile.lock25
-rw-r--r--nixpkgs/pkgs/tools/security/whatweb/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/security/whatweb/gemset.nix74
-rw-r--r--nixpkgs/pkgs/tools/security/wipe/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/wipe/fix-install.patch18
-rw-r--r--nixpkgs/pkgs/tools/security/witness/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/security/wprecon/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/wpscan/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/security/wpscan/Gemfile.lock63
-rw-r--r--nixpkgs/pkgs/tools/security/wpscan/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/wpscan/gemset.nix245
-rwxr-xr-xnixpkgs/pkgs/tools/security/wpscan/update.sh16
-rw-r--r--nixpkgs/pkgs/tools/security/xcat/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/security/xcrawl3r/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/xorex/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/xortool/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/xsser/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/security/xsubfind3r/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/yarGen/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/security/yara/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/security/yaralyzer/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/yatas/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/yersinia/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/yubihsm-connector/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/yubihsm-shell/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/security/yubikey-agent/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/yubikey-touch-detector/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/zdns/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/zeekscript/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/zgrab2/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/zgrab2/fix-go-version-error.patch46
-rw-r--r--nixpkgs/pkgs/tools/security/zkar/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/zlint/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/zmap/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/zsteg/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/security/zsteg/Gemfile.lock25
-rw-r--r--nixpkgs/pkgs/tools/security/zsteg/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/security/zsteg/gemset.nix75
-rw-r--r--nixpkgs/pkgs/tools/security/zzuf/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/acct/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/system/acpica-tools/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/system/actkbd/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/system/amdgpu_top/Cargo.lock3614
-rw-r--r--nixpkgs/pkgs/tools/system/amdgpu_top/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/system/amtterm/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/at/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/system/augeas/bootstrap.diff15
-rw-r--r--nixpkgs/pkgs/tools/system/augeas/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/system/auto-cpufreq/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/system/auto-cpufreq/fix-version-output.patch33
-rw-r--r--nixpkgs/pkgs/tools/system/auto-cpufreq/prevent-install-and-copy.patch163
-rw-r--r--nixpkgs/pkgs/tools/system/auto-cpufreq/prevent-update.patch60
-rw-r--r--nixpkgs/pkgs/tools/system/automatic-timezoned/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/system/awstats/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/system/bar/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/system/bfs/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/system/bottom/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/system/btop/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/system/chase/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/system/clinfo/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/system/cm-rgb/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/system/collectd/data.nix14
-rw-r--r--nixpkgs/pkgs/tools/system/collectd/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/system/collectd/plugins.nix141
-rw-r--r--nixpkgs/pkgs/tools/system/colorls/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/system/colorls/Gemfile.lock27
-rw-r--r--nixpkgs/pkgs/tools/system/colorls/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/system/colorls/gemset.nix84
-rw-r--r--nixpkgs/pkgs/tools/system/confd/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/system/consul-template/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/system/cron/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/system/ctop/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/system/daemon/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/system/daemonize/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/system/das_watchdog/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/system/datefudge/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/system/dcfldd/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/system/dd_rescue/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/system/ddh/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/ddrescue/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/system/ddrescueview/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/system/ddrutility/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/dell-command-configure/default.nix108
-rwxr-xr-xnixpkgs/pkgs/tools/system/dell-command-configure/wrapper-lib.c23
-rw-r--r--nixpkgs/pkgs/tools/system/dfc/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/system/dfrs/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/di/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/system/dog/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/system/dool/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/system/efibootmgr/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/system/efivar/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/system/envconsul/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/system/epilys-bb/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/erdtree/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/evemu/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/facter/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/fakechroot/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/system/fakeroot/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/system/fakeroot/einval.patch47
-rw-r--r--nixpkgs/pkgs/tools/system/fancy-motd/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/system/fcron/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/system/fcron/relative-fcronsighup.patch16
-rw-r--r--nixpkgs/pkgs/tools/system/fdisk/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/system/fio/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/system/foreman/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/system/foreman/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/tools/system/foreman/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/system/foreman/gemset.nix12
-rw-r--r--nixpkgs/pkgs/tools/system/foremost/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/system/foremost/makefile.patch32
-rw-r--r--nixpkgs/pkgs/tools/system/freeipmi/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/system/gdmap/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/system/gdmap/get_sensitive.patch34
-rw-r--r--nixpkgs/pkgs/tools/system/gdmap/set_flags.patch25
-rw-r--r--nixpkgs/pkgs/tools/system/gdu/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/system/gkraken/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/system/go-audit/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/gohai/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/system/gopsuinfo/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/system/gopsuinfo/no_bin_install.patch12
-rw-r--r--nixpkgs/pkgs/tools/system/goreman/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/system/gotop/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/system/gptfdisk/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/system/gptfdisk/popt-1-19.patch84
-rw-r--r--nixpkgs/pkgs/tools/system/gptfdisk/uuid.patch11
-rw-r--r--nixpkgs/pkgs/tools/system/gptman/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/system/gt5/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/system/gtop/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/system/hardinfo/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/system/hddfancontrol/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/tools/system/hiera-eyaml/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/system/hiera-eyaml/gemset.nix31
-rw-r--r--nixpkgs/pkgs/tools/system/honcho/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/hostctl/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/system/htop/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/system/htop/htop-vim.nix21
-rw-r--r--nixpkgs/pkgs/tools/system/hw-probe/default.nix141
-rw-r--r--nixpkgs/pkgs/tools/system/hwinfo/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/system/idle3tools/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/illum/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/system/incron/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/system/incron/default_path.patch36
-rw-r--r--nixpkgs/pkgs/tools/system/inxi/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/system/ioping/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/system/ior/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/system/ipmitool/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/system/ipmiutil/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/java-service-wrapper/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/system/jobber/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/system/journalwatch/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/jsvc/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/system/jump/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/system/kanata/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/system/kmon/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/system/krakenx/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/lact/default.nix83
-rw-r--r--nixpkgs/pkgs/tools/system/ledmon/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/system/loadwatch/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/localtime/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/system/logcheck/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/system/logrotate/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/system/lr/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/mac-fdisk/default.nix112
-rw-r--r--nixpkgs/pkgs/tools/system/mcron/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/system/mediawriter/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/system/memtester/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/minijail/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/system/minijail/tools.nix40
-rw-r--r--nixpkgs/pkgs/tools/system/mlc/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/system/monit/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/system/mq-cli/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/nats-top/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/system/natscli/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/netdata/default.nix155
-rw-r--r--nixpkgs/pkgs/tools/system/netdata/go.d.plugin.nix34
-rw-r--r--nixpkgs/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch128
-rw-r--r--nixpkgs/pkgs/tools/system/netdata/skip-CONFIGURE_COMMAND.patch16
-rw-r--r--nixpkgs/pkgs/tools/system/nkeys/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/nq/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/system/nsc/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/system/nvidia-system-monitor-qt/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/system/nvitop/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/system/nvtop/default.nix83
-rw-r--r--nixpkgs/pkgs/tools/system/opencl-info/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/system/opencl-info/opencl-info-clhpp2.diff22
-rw-r--r--nixpkgs/pkgs/tools/system/openipmi/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/openseachest/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/system/osquery/Remove-circular-definition-of-AUDIT_FILTER_EXCLUDE.patch25
-rw-r--r--nixpkgs/pkgs/tools/system/osquery/Remove-git-reset.patch37
-rw-r--r--nixpkgs/pkgs/tools/system/osquery/Remove-system-controls-table.patch157
-rw-r--r--nixpkgs/pkgs/tools/system/osquery/Use-locale.h-instead-of-removed-xlocale.h-header.patch32
-rw-r--r--nixpkgs/pkgs/tools/system/osquery/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/system/pciutils/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/system/pcstat/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/pdisk/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/system/plan9port/default.nix122
-rw-r--r--nixpkgs/pkgs/tools/system/procodile/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/system/procodile/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/system/procodile/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/system/procodile/gemset.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/proot/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/system/ps_mem/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/system/psensor/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/system/psstop/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/system/r10k/Gemfile5
-rw-r--r--nixpkgs/pkgs/tools/system/r10k/Gemfile.lock48
-rw-r--r--nixpkgs/pkgs/tools/system/r10k/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/r10k/gemset.nix168
-rw-r--r--nixpkgs/pkgs/tools/system/retry/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/system/rex/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/system/rofi-systemd/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/system/rowhammer-test/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/rsyslog/default.nix193
-rw-r--r--nixpkgs/pkgs/tools/system/runit/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/system/runit/fix-ar-ranlib.patch18
-rw-r--r--nixpkgs/pkgs/tools/system/runitor/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/system/rwc/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/s-tui/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/system/s0ix-selftest-tool/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/system/safe-rm/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/system/safecopy/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/system/setserial/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/system/sg3_utils/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/system/skeema/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/system/sleuthkit/default.nix120
-rw-r--r--nixpkgs/pkgs/tools/system/smartmontools/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/system/smartmontools/smartmontools.patch26
-rw-r--r--nixpkgs/pkgs/tools/system/snooze/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/system/socklog/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/system/stacer/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/system/stress-ng/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/system/stress/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/system/stressapptest/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/system/suid-chroot/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/system/supercronic/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/supervise/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/system/symlinks/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/systemd-journal2gelf/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/systeroid/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/system/taskspooler/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/system/testdisk/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/system/thermald/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/system/thinkfan/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/system/throttled/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/system/tm/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/system/tp-auto-kbbl/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/system/tre-command/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/system/tree/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/system/ts/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/system/tuptime/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/system/uefitool/common.nix41
-rw-r--r--nixpkgs/pkgs/tools/system/uefitool/variants.nix15
-rw-r--r--nixpkgs/pkgs/tools/system/ufiformat/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/undaemonize/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/system/uptimed/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/system/uptimed/no-var-spool-install.patch15
-rw-r--r--nixpkgs/pkgs/tools/system/uroboros/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/system/vbetool/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/system/vboot_reference/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/system/which/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/system/wslu/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/wslu/fallback-conf-nix-store.diff22
-rw-r--r--nixpkgs/pkgs/tools/system/wsmancli/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/system/wsysmon/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/system/wsysmon/dependencies.patch14
-rw-r--r--nixpkgs/pkgs/tools/system/wsysmon/install.patch14
-rw-r--r--nixpkgs/pkgs/tools/system/xe/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/yeshup/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/system/zenith/Cargo.lock1989
-rw-r--r--nixpkgs/pkgs/tools/system/zenith/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/system/zfxtop/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/system/zps/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/system/zram-generator/Cargo.lock394
-rw-r--r--nixpkgs/pkgs/tools/system/zram-generator/default.nix73
-rwxr-xr-xnixpkgs/pkgs/tools/system/zram-generator/update.sh15
-rw-r--r--nixpkgs/pkgs/tools/system/zx/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/a2ps/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/text/abbreviate/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/text/agrep/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/aha/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/align/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/amber/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/anew/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/anewer/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/angle-grinder/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/ansifilter/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/text/ascii/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/asciigraph/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/autocorrect/Cargo.lock2520
-rw-r--r--nixpkgs/pkgs/tools/text/autocorrect/default.nix36
-rwxr-xr-xnixpkgs/pkgs/tools/text/autocorrect/update.sh15
-rw-r--r--nixpkgs/pkgs/tools/text/base16384/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/bashblog/0001-Setting-markdown_bin.patch25
-rw-r--r--nixpkgs/pkgs/tools/text/bashblog/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/text/book-summary/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/boxes/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/text/catdoc/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/catdocx/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/cconv/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/chars/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/choose/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/chroma/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/chroma/src.json11
-rw-r--r--nixpkgs/pkgs/tools/text/cidrgrep/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/clima/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/cmigemo/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/cmigemo/no-http-tool-check.patch23
-rw-r--r--nixpkgs/pkgs/tools/text/codesearch/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/colordiff/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/text/coloursum/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/comrak/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/convertlit/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/text/copyright-update/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/cringify/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/text/crowdin-cli/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/text/csvdiff/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/csview/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/csvquote/csvquote-path.patch14
-rw-r--r--nixpkgs/pkgs/tools/text/csvquote/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/text/d2/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/text/dadadodo/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/dcs/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/text/dfmt/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/diction/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/diffr/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/diffsitter/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/text/diffstat/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/difftastic/Cargo.lock1296
-rw-r--r--nixpkgs/pkgs/tools/text/difftastic/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/text/diffutils/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/text/dirdiff/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/text/dirdiff/dirdiff-2.1-vars.patch32
-rw-r--r--nixpkgs/pkgs/tools/text/discount/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/text/discount/fix-configure-path.patch12
-rw-r--r--nixpkgs/pkgs/tools/text/djot-js/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/text/dos2unix/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/dt/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/text/each/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/ebook-tools/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/enca/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/enscript/0001-use-system-getopt.patch68
-rw-r--r--nixpkgs/pkgs/tools/text/enscript/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/text/epub2txt2/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/epubcheck/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/text/esh/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/text/fanficfare/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/fastmod/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/frangipanni/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/frawk/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/text/frogmouth/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/text/fst/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/gawk/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/text/gawk/fix-typos-corrected-in-libharu-2.4.4.patch62
-rw-r--r--nixpkgs/pkgs/tools/text/gawk/gawk-with-extensions.nix13
-rw-r--r--nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix156
-rw-r--r--nixpkgs/pkgs/tools/text/gawk/setup-hook.sh6
-rw-r--r--nixpkgs/pkgs/tools/text/gist/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/text/gjo/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/glogg/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/text/gnugrep/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/Allow_input_files_to_be_missing_for_ed-style_patches.patch33
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-1000156.patch211
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6951.patch28
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6952.patch28
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13636.patch108
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13638-and-CVE-2018-20969.patch38
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/text/gnused/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/text/goawk/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/text/gpt2tc/0001-add-python-shebang.patch10
-rw-r--r--nixpkgs/pkgs/tools/text/gpt2tc/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/text/grin/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/text/grip-search/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/text/groff/default.nix136
-rw-r--r--nixpkgs/pkgs/tools/text/groff/site.tmac26
-rw-r--r--nixpkgs/pkgs/tools/text/gtranslator/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/text/gtree/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/text/gucci/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/hck/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/hcledit/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/highlight/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/text/html-tidy/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/text/html2text/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/text/huniq/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/text/hyx/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/icdiff/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/text/igrep/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/text/invoice2data/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/jbofihe/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/jen/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/jotdown/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/jsawk/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/jumanpp/0001-Exclude-all-tests-from-the-build.patch177
-rw-r--r--nixpkgs/pkgs/tools/text/jumanpp/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/text/justify/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/text/kakasi/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/text/kdiff3/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/text/kytea/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/kytea/gcc-O3.patch13
-rw-r--r--nixpkgs/pkgs/tools/text/l2md/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/languagetool-rust/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/text/languagetool/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/ledger2beancount/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/text/link-grammar/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/text/ltex-ls/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/text/lv/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/mairix/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/mairix/mmap.patch161
-rw-r--r--nixpkgs/pkgs/tools/text/mark/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/markdownlint-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/markdownlint-cli2/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/markscribe/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/math-review/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/mawk/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/mb2md/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-admonish/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-cmdrun/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-d2/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-emojicodes/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-epub/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-footnote/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-graphviz/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-i18n-helpers/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-katex/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-linkcheck/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-man/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-mermaid/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-open-on-gh/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-pagetoc/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-pdf/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-plantuml/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-toc/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/text/mdcat/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/text/mdhtml/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/mecab/base.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/mecab/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/mecab/ipadic.nix19
-rw-r--r--nixpkgs/pkgs/tools/text/mecab/nodic.nix8
-rw-r--r--nixpkgs/pkgs/tools/text/miller/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/mir-qualia/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/mmdoc/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/text/morsel/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/mpage/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/mrkd/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/data/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/libbtree/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/libfacet/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/libmtquery/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/libmtsupport/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/text/mw/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/text/namazu/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/text/nerdfix/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/nkf/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/nltk_data/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/text/num-utils/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/numdiff/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/odt2txt/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/opencc/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/ov/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/text/papeer/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/paperoni/Cargo.lock3014
-rw-r--r--nixpkgs/pkgs/tools/text/paperoni/default.nix51
-rwxr-xr-xnixpkgs/pkgs/tools/text/papertrail/Gemfile4
-rw-r--r--nixpkgs/pkgs/tools/text/papertrail/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/tools/text/papertrail/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/papertrail/gemset.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/par/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/patchutils/0.3.3.nix7
-rw-r--r--nixpkgs/pkgs/tools/text/patchutils/0.4.2.nix8
-rw-r--r--nixpkgs/pkgs/tools/text/patchutils/default.nix6
-rw-r--r--nixpkgs/pkgs/tools/text/patchutils/drop-comments.patch84
-rw-r--r--nixpkgs/pkgs/tools/text/patchutils/generic.nix45
-rw-r--r--nixpkgs/pkgs/tools/text/pbgopy/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/peco/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/percollate/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/text/pinyin-tool/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/platinum-searcher/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/pn/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/podiff/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/poedit/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/text/pomsky/Cargo.lock1236
-rw-r--r--nixpkgs/pkgs/tools/text/pomsky/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/text/popfile/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/text/proselint/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/qprint/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/rare-regex/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/text/readability-cli/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/text/reckon/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/text/reckon/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/tools/text/reckon/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/reckon/gemset.nix53
-rw-r--r--nixpkgs/pkgs/tools/text/recode/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/text/repgrep/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/text/replace/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/text/replace/malloc.patch13
-rw-r--r--nixpkgs/pkgs/tools/text/reveal-md/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/rgxg/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/text/riffdiff/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/ripgrep-all/Cargo.lock2207
-rw-r--r--nixpkgs/pkgs/tools/text/ripgrep-all/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/text/ripgrep/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/text/rnr/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/rosie/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/text/rpl/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/rpl/remove-argparse-manpage.diff27
-rw-r--r--nixpkgs/pkgs/tools/text/rsbkb/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile.lock24
-rw-r--r--nixpkgs/pkgs/tools/text/ruby-zoom/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/text/ruby-zoom/gemset.nix64
-rw-r--r--nixpkgs/pkgs/tools/text/runiq/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/ruplacer/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/rust-petname/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/sad/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/text/schema2ldif/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/text/scraper/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/sd/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/text/seehecht/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/jade/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/linuxdoc-tools/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/openjade/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/openjade/msggen.patch34
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/opensp/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/opensp/fix-register-storage-class.patch11
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/opensp/setup-hook.sh22
-rw-r--r--nixpkgs/pkgs/tools/text/sgrep/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/text/shab/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/text/shfmt/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/shocco/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/sift/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/silver-searcher/bash-completion.patch5
-rw-r--r--nixpkgs/pkgs/tools/text/silver-searcher/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/text/smu/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/snippetpixie/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/text/sorted-grep/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/text/source-highlight/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/text/subedit/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/tab/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/teip/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/text/termbook/Cargo.lock2900
-rw-r--r--nixpkgs/pkgs/tools/text/termbook/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/text/tesh/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/textpieces/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/text/tidy-viewer/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/tml/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/to-html/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/topfew-rs/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/topfew/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/text/tuc/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/tv/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/txt2tags/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/text/u2ps/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/ugrep/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/text/unfurl/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/uni2ascii/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/uniscribe/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/text/uniscribe/Gemfile.lock37
-rw-r--r--nixpkgs/pkgs/tools/text/uniscribe/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/uniscribe/gemset.nix1766
-rw-r--r--nixpkgs/pkgs/tools/text/unoconv/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/unrtf/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/untex/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/uwc/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/vale/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/text/validator-nu/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/text/vgrep/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/wdiff/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/wgetpaste/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/wrap/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/write-good/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/xidel/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/text/xml/basex/basex.svg81
-rw-r--r--nixpkgs/pkgs/tools/text/xml/basex/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/text/xml/html-xml-utils/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/text/xml/jing-trang/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/text/xml/jing-trang/no-git-during-build.patch47
-rw-r--r--nixpkgs/pkgs/tools/text/xml/rnv/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/text/xml/rxp/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xml2/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xmlstarlet/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xq/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/xpaste/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/xsv/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/xurls/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/yaml-merge/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/yx/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/text/zet/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/zim-tools/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/zoekt/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/text/zstxtns-utils/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoc/default.nix295
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/Gemfile14
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/Gemfile.lock139
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/gemset.nix571
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile7
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile.lock69
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor/gemset.nix272
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctorj/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/typesetting/bibclean/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/typesetting/biber-ms/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/typesetting/biber/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/typesetting/biblatex-check/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/typesetting/bibtex-tidy/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/typesetting/bibtex-tidy/remove-google-font-loader.patch52
-rw-r--r--nixpkgs/pkgs/tools/typesetting/carbon-now-cli/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/typesetting/coq2html/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/typesetting/djvu2pdf/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/typesetting/docbook2odf/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/typesetting/docbook2x/db2x_texixml-to-stdout.patch15
-rw-r--r--nixpkgs/pkgs/tools/typesetting/docbook2x/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/typesetting/fop/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/typesetting/git-latexdiff/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/typesetting/git-latexdiff/version-test.patch17
-rw-r--r--nixpkgs/pkgs/tools/typesetting/halibut/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/typesetting/hayagriva/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/typesetting/hevea/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/typesetting/htmldoc/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/gemset.nix23
-rw-r--r--nixpkgs/pkgs/tools/typesetting/lout/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/typesetting/lowdown/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/typesetting/marp/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/typesetting/mmark/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/typesetting/multimarkdown/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdf2djvu/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdfchain/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdfgrep/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdfsandwich/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdftk/default.nix100
-rw-r--r--nixpkgs/pkgs/tools/typesetting/ps2eps/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/typesetting/ps2eps/hardcode-deps.patch26
-rw-r--r--nixpkgs/pkgs/tools/typesetting/psutils/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pulldown-cmark/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/typesetting/rfc-bibtex/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/typesetting/rubber/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/typesetting/satysfi/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/typesetting/sile/default.nix142
-rw-r--r--nixpkgs/pkgs/tools/typesetting/skribilo/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/typesetting/soupault/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/typesetting/sshlatex/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tectonic/biber.nix54
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tectonic/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tectonic/tests.nix93
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tectonic/wrapper.nix57
-rw-r--r--nixpkgs/pkgs/tools/typesetting/ted/default.nix84
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/advi/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/auctex/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/blahtexml/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/catdvi/default.nix91
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/dblatex/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/gladtex/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/latexrun/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/lkproof/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/mftrace/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/animatedot.sh9
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl43
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/default.nix250
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/dot2pdf.sh20
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/dot2ps.sh19
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/find-includes.pl69
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/find-lhs2tex-includes.sh3
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/lhs2tex.sh19
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/run-latex.sh164
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-1.x.nix37
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-2.x.nix37
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-3.x.nix37
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-pie.nix33
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-umlcd.nix33
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-umlsd.nix33
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgfplots.nix33
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pplatex/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/clang.patch13
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/environment.patch35
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/extramembot.patch12
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/getline.patch96
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/setup-hook.sh7
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tex-match/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/UPGRADING.md138
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/bin.nix528
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/build-tex-env.nix453
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/build-texlive-package.nix203
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/combine-wrapper.nix42
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/default.nix235
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/fixed-hashes.nix4363
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/generate-fixed-hashes.nix41
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/make-bin-containers.sh60
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/patch-scripts.sed57
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/texlinks.diff9
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/tl2nix.sed181
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/tlpdb-overrides.nix425
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/tlpdb.nix48001
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tikzit/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/typesetting/typst-live/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/typesetting/typstfmt/Cargo.lock787
-rw-r--r--nixpkgs/pkgs/tools/typesetting/typstfmt/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/typesetting/xmlroff/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/typesetting/xmlto/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/video/atomicparsley/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/video/bento4/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/video/bento4/libap4.patch5
-rw-r--r--nixpkgs/pkgs/tools/video/blackmagic-desktop-video/default.nix106
-rw-r--r--nixpkgs/pkgs/tools/video/dvgrab/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/video/go2rtc/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/video/gopro/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/video/harvid/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/video/lux/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/video/mjpegtools/c++-17-fixes.patch44
-rw-r--r--nixpkgs/pkgs/tools/video/mjpegtools/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/video/play-with-mpv/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/video/rav1e/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/video/recyclarr/default.nix89
-rwxr-xr-xnixpkgs/pkgs/tools/video/recyclarr/update.sh46
-rw-r--r--nixpkgs/pkgs/tools/video/replay-sorcery/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/video/replay-sorcery/fix-global-config.patch13
-rw-r--r--nixpkgs/pkgs/tools/video/replay-sorcery/hardcode-libnotify.patch25
-rw-r--r--nixpkgs/pkgs/tools/video/rtmpdump/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/video/rwedid/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/video/svt-av1/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/video/swfmill/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/video/swftools/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/video/swftools/swftools.patch17
-rw-r--r--nixpkgs/pkgs/tools/video/tsduck/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/video/untrunc-anthwlock/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/video/vcsi/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/video/vncrec/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/video/vrrtest/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/video/wtwitch/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/video/xjadeo/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/video/yamdi/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/video/yaydl/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/virtualization/alpine-make-vm-image/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/virtualization/amazon-ecs-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/virtualization/awsebcli/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/virtualization/cloud-init/0001-add-nixos-support.patch127
-rw-r--r--nixpkgs/pkgs/tools/virtualization/cloud-init/default.nix139
-rw-r--r--nixpkgs/pkgs/tools/virtualization/cloudmonkey/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/virtualization/cri-tools/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/virtualization/distrobuilder/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/virtualization/distrobuilder/generator.nix19
-rw-r--r--nixpkgs/pkgs/tools/virtualization/distrobuilder/nixos-generator.patch113
-rw-r--r--nixpkgs/pkgs/tools/virtualization/dockstarter/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/writable.patch23
-rw-r--r--nixpkgs/pkgs/tools/virtualization/ec2-api-tools/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/virtualization/extra-container/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/virtualization/google-compute-engine/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/virtualization/google-guest-agent/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/virtualization/google-guest-agent/disable-etc-mutation.patch54
-rw-r--r--nixpkgs/pkgs/tools/virtualization/google-guest-agent/fix-paths.patch43
-rw-r--r--nixpkgs/pkgs/tools/virtualization/google-guest-configs/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/virtualization/google-guest-configs/fix-paths.patch61
-rw-r--r--nixpkgs/pkgs/tools/virtualization/google-guest-oslogin/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/virtualization/govc/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/virtualization/guestfs-tools/default.nix117
-rw-r--r--nixpkgs/pkgs/tools/virtualization/jumppad/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/virtualization/kubevirt/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/virtualization/linode-cli/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/virtualization/linode-cli/remove-update-check.patch13
-rwxr-xr-xnixpkgs/pkgs/tools/virtualization/linode-cli/update.sh30
-rw-r--r--nixpkgs/pkgs/tools/virtualization/lxd-image-server/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/virtualization/lxd-image-server/run.patch25
-rw-r--r--nixpkgs/pkgs/tools/virtualization/lxd-image-server/state.patch49
-rw-r--r--nixpkgs/pkgs/tools/virtualization/marathonctl/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/virtualization/mininet/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/virtualization/mkosi/default.nix134
-rw-r--r--nixpkgs/pkgs/tools/virtualization/multipass/cmake_no_fetch.patch32
-rw-r--r--nixpkgs/pkgs/tools/virtualization/multipass/cmake_warning.patch14
-rw-r--r--nixpkgs/pkgs/tools/virtualization/multipass/default.nix143
-rw-r--r--nixpkgs/pkgs/tools/virtualization/multipass/lxd_socket_path.patch13
-rw-r--r--nixpkgs/pkgs/tools/virtualization/nixos-container/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container-completion.sh33
-rwxr-xr-xnixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container.pl491
-rw-r--r--nixpkgs/pkgs/tools/virtualization/nixos-shell/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/virtualization/onmetal-image/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/virtualization/ovftool/default.nix150
-rw-r--r--nixpkgs/pkgs/tools/virtualization/ovftool/installCheckPhase.ovabin0 -> 75264 bytes
-rw-r--r--nixpkgs/pkgs/tools/virtualization/reg/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/virtualization/rootlesskit/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/virtualization/supermin/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/virtualization/udocker/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/virtualization/uefi-run/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/virtualization/vpsfree-client/Gemfile5
-rw-r--r--nixpkgs/pkgs/tools/virtualization/vpsfree-client/Gemfile.lock58
-rw-r--r--nixpkgs/pkgs/tools/virtualization/vpsfree-client/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/virtualization/vpsfree-client/gemset.nix233
-rw-r--r--nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/virtualization/xen-guest-agent/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/virtualization/xva-img/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/wayland/aw-watcher-window-wayland/Cargo.lock1689
-rw-r--r--nixpkgs/pkgs/tools/wayland/aw-watcher-window-wayland/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/wayland/chayang/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/wayland/clapboard/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/wayland/cliphist/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/wayland/clipman/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/wayland/gnome-randr/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/wayland/gtklock/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/wayland/gtklock/playerctl-module.nix34
-rw-r--r--nixpkgs/pkgs/tools/wayland/gtklock/powerbar-module.nix32
-rw-r--r--nixpkgs/pkgs/tools/wayland/gtklock/userinfo-module.nix34
-rw-r--r--nixpkgs/pkgs/tools/wayland/hyprland-per-window-layout/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/wayland/kanshi/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/wayland/mpvpaper/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/wayland/oguri/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/wayland/proycon-wayout/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/wayland/shikane/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/wayland/shotman/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/wayland/sirula/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/wayland/slurp/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/wayland/stacktile/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/wayland/swaykbdd/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/wayland/swayr/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/wayland/swayr/icon-paths.patch17
-rw-r--r--nixpkgs/pkgs/tools/wayland/swayrbar/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/wayland/swaysome/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/wayland/swaytools/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/wayland/swww/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/wayland/way-displays/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/wayland/wayland-proxy-virtwl/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/wayland/wayland-utils/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/wayland/waylogout/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/wayland/waynergy/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/wayland/wayout/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/wayland/wdomirror/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/wayland/wev/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/wayland/wl-clip-persist/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/wayland/wl-clipboard-x11/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/wayland/wl-clipboard/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/wayland/wl-color-picker/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/wayland/wl-gammactl/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/wayland/wl-gammactl/dont-need-wlroots.diff20
-rw-r--r--nixpkgs/pkgs/tools/wayland/wl-mirror/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/wayland/wl-screenrec/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/wayland/wlay/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/wayland/wleave/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/wayland/wlogout/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/wayland/wlopm/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/wayland/wlprop/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/wayland/wlr-randr/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/wayland/wlr-which-key/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/wayland/wlrctl/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/wayland/wlsunset/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/wayland/wluma/Cargo.lock1499
-rw-r--r--nixpkgs/pkgs/tools/wayland/wluma/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/wayland/wob/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/wayland/wpaperd/Cargo.lock2041
-rw-r--r--nixpkgs/pkgs/tools/wayland/wpaperd/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/wayland/wshowkeys/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/wayland/wtype/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/wayland/xwaylandvideobridge/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/wayland/ydotool/default.nix31
5074 files changed, 480075 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/X11/alttab/default.nix b/nixpkgs/pkgs/tools/X11/alttab/default.nix
new file mode 100644
index 000000000000..99619bd88d2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/alttab/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, coreutils, fetchFromGitHub, autoconf, automake, pkg-config, procps, ronn,
+libpng, uthash , which, xnee, xorg, python3Packages }:
+
+stdenv.mkDerivation rec {
+  version = "1.7.1";
+
+  pname = "alttab";
+
+  src = fetchFromGitHub {
+    owner = "sagb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-1+hk0OeSriXPyefv3wOgeiW781PL4VP5Luvt+RS5jmg=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    pkg-config
+    ronn
+  ];
+
+  preConfigure = "./bootstrap.sh";
+
+  buildInputs = [
+    libpng
+    uthash
+    xorg.libX11
+    xorg.libXft
+    xorg.libXmu
+    xorg.libXpm
+    xorg.libXrandr
+    xorg.libXrender
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  nativeCheckInputs = [
+    coreutils
+    procps
+    python3Packages.xvfbwrapper
+    which
+    xnee
+    xorg.xeyes
+    xorg.xprop
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/sagb/alttab";
+    description = "X11 window switcher designed for minimalistic window managers or standalone X11 session";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ ];
+    mainProgram = "alttab";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/arandr/default.nix b/nixpkgs/pkgs/tools/X11/arandr/default.nix
new file mode 100644
index 000000000000..1421b2a028da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/arandr/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchurl
+, python3Packages
+, gobject-introspection
+, gsettings-desktop-schemas
+, gtk3
+, wrapGAppsHook
+, xrandr
+}:
+
+let
+  inherit (python3Packages) buildPythonApplication docutils pygobject3;
+in
+buildPythonApplication rec {
+  pname = "arandr";
+  version = "0.1.11";
+
+  src = fetchurl {
+    url = "https://christian.amsuess.com/tools/arandr/files/${pname}-${version}.tar.gz";
+    hash = "sha256-5Mu+Npi7gSs5V3CHAXS+AJS7rrOREFqBH5X0LrGCrgI=";
+  };
+
+  preBuild = ''
+    rm -rf data/po/*
+  '';
+
+  # no tests
+  doCheck = false;
+
+  buildInputs = [ docutils gsettings-desktop-schemas gtk3 ];
+  nativeBuildInputs = [ gobject-introspection wrapGAppsHook ];
+  propagatedBuildInputs = [ xrandr pygobject3 ];
+
+  meta = with lib; {
+    homepage = "https://christian.amsuess.com/tools/arandr/";
+    description = "A simple visual front end for XRandR";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ gepbird ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/autocutsel/default.nix b/nixpkgs/pkgs/tools/X11/autocutsel/default.nix
new file mode 100644
index 000000000000..e1b9a3c1c73a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/autocutsel/default.nix
@@ -0,0 +1,25 @@
+{lib, stdenv, fetchurl, libX11, libXaw}:
+
+stdenv.mkDerivation rec {
+  version = "0.10.1";
+  pname = "autocutsel";
+
+  src = fetchurl {
+    url = "https://github.com/sigmike/autocutsel/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-8X4G1C90lENtSyb0vgtrDaOUgcBADJZ3jkuQW2NB6xc=";
+  };
+
+  buildInputs = [ libX11 libXaw ];
+  installPhase = ''
+    mkdir -p $out/bin
+    cp autocutsel $out/bin/
+  '';
+
+  meta = {
+    homepage = "https://www.nongnu.org/autocutsel/";
+    description = "Tracks changes in the server's cutbuffer and CLIPBOARD selection";
+    license = lib.licenses.gpl2Plus;
+    platforms = with lib.platforms; all;
+    mainProgram = "autocutsel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/bevelbar/default.nix b/nixpkgs/pkgs/tools/X11/bevelbar/default.nix
new file mode 100644
index 000000000000..7eab7a65e80a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/bevelbar/default.nix
@@ -0,0 +1,38 @@
+{ lib,
+  stdenv,
+  fetchurl,
+  pkg-config,
+  libX11,
+  libXft,
+  libXrandr,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "bevelbar";
+  version = "22.06";
+
+  src = fetchurl {
+    url = "https://www.uninformativ.de/git/bevelbar/archives/bevelbar-v${finalAttrs.version}.tar.gz";
+    hash = "sha256-8ceFwQFHhJ1qEXJtzoDXU0XRgudaAfsoWq7LYgGEqsM=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libX11
+    libXft
+    libXrandr
+  ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://www.uninformativ.de/git/bevelbar/file/README.html";
+    description = "X11 status bar with beveled borders";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres neeasade ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/X11/bgs/default.nix b/nixpkgs/pkgs/tools/X11/bgs/default.nix
new file mode 100644
index 000000000000..b50f15a1929c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/bgs/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, libX11, libXinerama, imlib2 }:
+
+stdenv.mkDerivation rec {
+
+  pname = "bgs";
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    owner = "Gottox";
+    repo = "bgs";
+    rev = "v${version}";
+    sha256 = "V8GP+xLSiCvaYZt8Bi3/3KlTBaGnMYQUeNCHwH6Ejzo=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libX11 libXinerama imlib2 ];
+
+  preConfigure = ''sed -i "s@PREFIX = /usr/local@PREFIX = $out@g" config.mk'';
+
+  meta = with lib; {
+    description = "Extremely fast and small background setter for X";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "bgs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/bumblebee/default.nix b/nixpkgs/pkgs/tools/X11/bumblebee/default.nix
new file mode 100644
index 000000000000..0415489bd765
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/bumblebee/default.nix
@@ -0,0 +1,146 @@
+# The bumblebee package allows a program to be rendered on an
+# dedicated video card by spawning an additional X11 server and
+# streaming the results via VirtualGL or primus to the primary server.
+
+# The package is rather chaotic; it's also quite recent.
+# As it may change a lot, some of the hacks in this nix expression
+# will hopefully not be needed in the future anymore.
+
+# To test:
+# 1. make sure that the 'bbswitch' kernel module is installed,
+# 2. then run 'bumblebeed' as root
+# 3. Then either 'optirun glxinfo' or 'primusrun glxinfo' as user.
+#
+# The glxinfo output should indicate the NVidia driver is being used
+# and all expected extensions are supported.
+#
+# To use at startup, see hardware.bumblebee options.
+
+{ stdenv, lib, fetchurl, fetchpatch, pkg-config, help2man, makeWrapper
+, glib, libbsd
+, libX11, xorgserver, kmod, xf86videonouveau
+, nvidia_x11, virtualgl, libglvnd
+, automake111x, autoconf
+# The below should only be non-null in a x86_64 system. On a i686
+# system the above nvidia_x11 and virtualgl will be the i686 packages.
+# TODO: Confusing. Perhaps use "SubArch" instead of i686?
+, nvidia_x11_i686 ? null
+, libglvnd_i686 ? null
+, useDisplayDevice ? false
+, extraNvidiaDeviceOptions ? ""
+, extraNouveauDeviceOptions ? ""
+, useNvidia ? true
+}:
+
+let
+  nvidia_x11s = [ nvidia_x11 ]
+                ++ lib.optional nvidia_x11.useGLVND libglvnd
+                ++ lib.optionals (nvidia_x11_i686 != null)
+                   ([ nvidia_x11_i686 ] ++ lib.optional nvidia_x11_i686.useGLVND libglvnd_i686);
+
+  nvidiaLibs = lib.makeLibraryPath nvidia_x11s;
+
+  bbdPath = lib.makeBinPath [ kmod xorgserver ];
+
+  xmodules = lib.concatStringsSep "," (map (x: "${x.out or x}/lib/xorg/modules") ([ xorgserver ] ++ lib.optional (!useNvidia) xf86videonouveau));
+
+  modprobePatch = fetchpatch {
+    url = "https://github.com/Bumblebee-Project/Bumblebee/commit/1ada79fe5916961fc4e4917f8c63bb184908d986.patch";
+    sha256 = "02vq3vba6nx7gglpjdfchws9vjhs1x02a543yvqrxqpvvdfim2x2";
+  };
+  libkmodPatch = fetchpatch {
+    url = "https://github.com/Bumblebee-Project/Bumblebee/commit/deceb14cdf2c90ff64ebd1010a674305464587da.patch";
+    sha256 = "00c05i5lxz7vdbv445ncxac490vbl5g9w3vy3gd71qw1f0si8vwh";
+  };
+  gcc10Patch = fetchpatch {
+    url = "https://github.com/Bumblebee-Project/Bumblebee/commit/f94a118a88cd76e2dbea33d735bd53cf54b486a1.patch";
+    hash = "sha256-3b5tLoMrGYSdg9Hz5bh0c44VIrbSZrY56JpWEyU/Pik=";
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "bumblebee";
+  version = "3.2.1";
+
+  src = fetchurl {
+    url = "https://www.bumblebee-project.org/${pname}-${version}.tar.gz";
+    sha256 = "03p3gvx99lwlavznrpg9l7jnl1yfg2adcj8jcjj0gxp20wxp060h";
+  };
+
+  patches = [
+    ./nixos.patch
+
+    modprobePatch
+    libkmodPatch
+    gcc10Patch
+  ];
+
+  # By default we don't want to use a display device
+  nvidiaDeviceOptions = lib.optionalString (!useDisplayDevice) ''
+    # Disable display device
+    Option "UseEDID" "false"
+    Option "UseDisplayDevice" "none"
+  '' + extraNvidiaDeviceOptions;
+
+  nouveauDeviceOptions = extraNouveauDeviceOptions;
+
+  # the have() function is deprecated and not available to bash completions the
+  # way they are currently loaded in NixOS, so use _have. See #10936
+  postPatch = ''
+    substituteInPlace scripts/bash_completion/bumblebee \
+      --replace "have optirun" "_have optirun"
+  '';
+
+  preConfigure = ''
+    # Don't use a special group, just reuse wheel.
+    substituteInPlace configure \
+      --replace 'CONF_GID="bumblebee"' 'CONF_GID="wheel"'
+
+    # Apply configuration options
+    substituteInPlace conf/xorg.conf.nvidia \
+      --subst-var nvidiaDeviceOptions
+
+    substituteInPlace conf/xorg.conf.nouveau \
+      --subst-var nouveauDeviceOptions
+  '';
+
+  # Build-time dependencies of bumblebeed and optirun.
+  # Note that it has several runtime dependencies.
+  buildInputs = [ libX11 glib libbsd kmod ];
+  nativeBuildInputs = [ makeWrapper pkg-config help2man automake111x autoconf ];
+
+  # The order of LDPATH is very specific: First X11 then the host
+  # environment then the optional sub architecture paths.
+  #
+  # The order for MODPATH is the opposite: First the environment that
+  # includes the acceleration driver. As this is used for the X11
+  # server, which runs under the host architecture, this does not
+  # include the sub architecture components.
+  configureFlags = [
+    "--with-udev-rules=$out/lib/udev/rules.d"
+    # see #10282
+    #"CONF_PRIMUS_LD_PATH=${primusLibs}"
+  ] ++ lib.optionals useNvidia [
+    "CONF_LDPATH_NVIDIA=${nvidiaLibs}"
+    "CONF_MODPATH_NVIDIA=${nvidia_x11.bin}/lib/xorg/modules"
+  ];
+
+  CFLAGS = [
+    "-DX_MODULE_APPENDS=\\\"${xmodules}\\\""
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/sbin/bumblebeed" \
+      --prefix PATH : "${bbdPath}"
+
+    wrapProgram "$out/bin/optirun" \
+      --prefix PATH : "${virtualgl}/bin"
+  '';
+
+  meta = with lib; {
+    description = "Daemon for managing Optimus videocards (power-on/off, spawns xservers)";
+    homepage = "https://github.com/Bumblebee-Project/Bumblebee";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/bumblebee/nixos.patch b/nixpkgs/pkgs/tools/X11/bumblebee/nixos.patch
new file mode 100644
index 000000000000..cf6ee5add98f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/bumblebee/nixos.patch
@@ -0,0 +1,80 @@
+diff --git a/conf/xorg.conf.nouveau b/conf/xorg.conf.nouveau
+index 87e48cb..60d6eaf 100644
+--- a/conf/xorg.conf.nouveau
++++ b/conf/xorg.conf.nouveau
+@@ -15,4 +15,5 @@ Section "Device"
+ #   This Setting is needed on Ubuntu 13.04.
+ #   BusID "PCI:01:00:0"
+ 
++@nouveauDeviceOptions@
+ EndSection
+diff --git a/conf/xorg.conf.nvidia b/conf/xorg.conf.nvidia
+index c3107f9..17072f4 100644
+--- a/conf/xorg.conf.nvidia
++++ b/conf/xorg.conf.nvidia
+@@ -29,6 +29,6 @@ Section "Device"
+     Option "ProbeAllGpus" "false"
+ 
+     Option "NoLogo" "true"
+-    Option "UseEDID" "false"
+-    Option "UseDisplayDevice" "none"
++
++@nvidiaDeviceOptions@
+ EndSection
+diff --git a/src/bbsecondary.c b/src/bbsecondary.c
+index 71a6b73..a682d8a 100644
+--- a/src/bbsecondary.c
++++ b/src/bbsecondary.c
+@@ -145,6 +145,23 @@ bool start_secondary(bool need_secondary) {
+     }
+ 
+     bb_log(LOG_INFO, "Starting X server on display %s.\n", bb_config.x_display);
++    const char mod_appends[] = X_MODULE_APPENDS;
++
++    char *mod_path;
++    int pathlen = strlen(bb_config.mod_path);
++    if (pathlen == 0) {
++      mod_path = mod_appends;
++    } else {
++      mod_path = malloc(pathlen + 1 + sizeof(mod_appends));
++      if (!mod_path) {
++        set_bb_error("Could not allocate memory for modules path\n");
++        return false;
++      }
++      strcpy(mod_path, bb_config.mod_path);
++      mod_path[pathlen] = ',';
++      strcpy(mod_path + pathlen + 1, mod_appends);
++    }
++
+     char *x_argv[] = {
+       XORG_BINARY,
+       bb_config.x_display,
+@@ -153,24 +170,24 @@ bool start_secondary(bool need_secondary) {
+       "-sharevts",
+       "-nolisten", "tcp",
+       "-noreset",
++      "-logfile", "/var/log/X.bumblebee.log",
+       "-verbose", "3",
+       "-isolateDevice", pci_id,
+-      "-modulepath", bb_config.mod_path, // keep last
++      "-modulepath", mod_path,
+       NULL
+     };
+     enum {n_x_args = sizeof(x_argv) / sizeof(x_argv[0])};
+-    if (!*bb_config.mod_path) {
+-      x_argv[n_x_args - 3] = 0; //remove -modulepath if not set
+-    }
+     //close any previous pipe, if it (still) exists
+     if (bb_status.x_pipe[0] != -1){close(bb_status.x_pipe[0]); bb_status.x_pipe[0] = -1;}
+     if (bb_status.x_pipe[1] != -1){close(bb_status.x_pipe[1]); bb_status.x_pipe[1] = -1;}
+     //create a new pipe
+     if (pipe2(bb_status.x_pipe, O_NONBLOCK | O_CLOEXEC)){
+       set_bb_error("Could not create output pipe for X");
++      if (pathlen > 0) free(mod_path);
+       return false;
+     }
+     bb_status.x_pid = bb_run_fork_ld_redirect(x_argv, bb_config.ld_path, bb_status.x_pipe[1]);
++    if (pathlen > 0) free(mod_path);
+     //close the end of the pipe that is not ours
+     if (bb_status.x_pipe[1] != -1){close(bb_status.x_pipe[1]); bb_status.x_pipe[1] = -1;}
+   }
diff --git a/nixpkgs/pkgs/tools/X11/caffeine-ng/default.nix b/nixpkgs/pkgs/tools/X11/caffeine-ng/default.nix
new file mode 100644
index 000000000000..90292e8beda9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/caffeine-ng/default.nix
@@ -0,0 +1,79 @@
+{ fetchFromGitea
+, meson
+, ninja
+, pkg-config
+, scdoc
+, gobject-introspection
+, lib
+, libayatana-appindicator
+, libnotify
+, python3Packages
+, procps
+, xset
+, xautolock
+, xscreensaver
+, xfce
+, wrapGAppsHook
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "caffeine-ng";
+  version = "4.2.0";
+  format = "other";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "WhyNotHugo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-uYzLRZ+6ZgIwhSuJWRBpLYHgonX7sFXgUZid0V26V0Q=";
+  };
+
+  nativeBuildInputs = [ gobject-introspection meson ninja pkg-config wrapGAppsHook ];
+
+  buildInputs = [
+    libayatana-appindicator
+    libnotify
+  ];
+
+  pythonPath = with python3Packages; [
+    click
+    dbus-python
+    ewmh
+    pulsectl
+    pygobject3
+    scdoc
+    setproctitle
+  ];
+
+  dontWrapGApps = true;
+
+  patches = [
+    ./fix-build.patch
+  ];
+
+  postPatch = ''
+    echo "${version}" > version
+  '';
+
+  postInstall = ''
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : ${lib.makeBinPath [ procps xautolock xscreensaver xfce.xfconf xset ]}
+    )
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    mainProgram = "caffeine";
+    maintainers = with maintainers; [ marzipankaiser ];
+    description = "Status bar application to temporarily inhibit screensaver and sleep mode";
+    homepage = "https://codeberg.org/WhyNotHugo/caffeine-ng";
+    changelog = "https://codeberg.org/WhyNotHugo/caffeine-ng/src/tag/v${version}/CHANGELOG.rst";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/caffeine-ng/fix-build.patch b/nixpkgs/pkgs/tools/X11/caffeine-ng/fix-build.patch
new file mode 100644
index 000000000000..cf075451138f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/caffeine-ng/fix-build.patch
@@ -0,0 +1,24 @@
+diff --git a/meson.build b/meson.build
+index 3e4f9ea..5b82861 100644
+--- a/meson.build
++++ b/meson.build
+@@ -2,10 +2,6 @@ project(
+     'caffeine-ng',
+     version: run_command('./scripts/read_version.sh', check: true).stdout().strip(),
+     meson_version: '>=0.63.0',
+-    default_options: [
+-      # The default can yield broken results.
+-      'python.install_env=auto'
+-    ]
+ )
+ 
+ dependency('pygobject-3.0')
+@@ -82,7 +78,7 @@ configure_file(
+ 
+ install_data(
+   'share/applications/caffeine.desktop',
+-  install_dir: '/etc/xdg/autostart',
++  install_dir: join_paths(get_option('sysconfdir'), 'xdg/autostart'),
+ )
+ 
+ install_data(
diff --git a/nixpkgs/pkgs/tools/X11/ckbcomp/default.nix b/nixpkgs/pkgs/tools/X11/ckbcomp/default.nix
new file mode 100644
index 000000000000..89bc5939299b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/ckbcomp/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitLab, perl, xkeyboard_config }:
+
+stdenv.mkDerivation rec {
+  pname = "ckbcomp";
+  version = "1.224";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "installer-team";
+    repo = "console-setup";
+    rev = version;
+    sha256 = "sha256-oqpETbMc0J8AKqt251kmxYyA2wgXxI1V2t6oJC14MfM=";
+  };
+
+  buildInputs = [ perl ];
+
+  patchPhase = ''
+    substituteInPlace Keyboard/ckbcomp --replace "/usr/share/X11/xkb" "${xkeyboard_config}/share/X11/xkb"
+    substituteInPlace Keyboard/ckbcomp --replace "rules = 'xorg'" "rules = 'base'"
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm0555 -t $out/bin Keyboard/ckbcomp
+    install -Dm0444 -t $out/share/man/man1 man/ckbcomp.1
+  '';
+
+  meta = with lib; {
+    description = "Compiles a XKB keyboard description to a keymap suitable for loadkeys";
+    homepage = "https://salsa.debian.org/installer-team/console-setup";
+    license = licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ dezgeg ];
+    platforms = platforms.unix;
+    mainProgram = "ckbcomp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/devour/default.nix b/nixpkgs/pkgs/tools/X11/devour/default.nix
new file mode 100644
index 000000000000..861eaf905f9d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/devour/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "devour";
+  version = "12";
+
+  src = fetchFromGitHub {
+    owner = "salman-abedin";
+    repo = "devour";
+    rev = version;
+    sha256 = "1qq5l6d0fn8azg7sj7a4m2jsmhlpswl5793clcxs1p34vy4wb2lp";
+  };
+
+  installPhase = ''
+    install -Dm555 -t $out/bin devour
+  '';
+
+  buildInputs = [ libX11 ];
+
+  meta = with lib; {
+    description = "Devour hides your current window when launching an external program";
+    longDescription = "Devour hides your current window before launching an external program and unhides it after quitting";
+    homepage = "https://github.com/salman-abedin/devour";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ mazurel ];
+    platforms = platforms.unix;
+    mainProgram = "devour";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/dex/default.nix b/nixpkgs/pkgs/tools/X11/dex/default.nix
new file mode 100644
index 000000000000..c194e1543f29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/dex/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+, sphinx
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dex";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "jceb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "03aapcywnz4kl548cygpi25m8adwbmqlmwgxa66v4156ax9dqs86";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ sphinx ];
+  buildInputs = [ python3 ];
+  makeFlags = [ "PREFIX=$(out)" "VERSION=$(version)" ];
+
+  meta = with lib; {
+    description = "A program to generate and execute DesktopEntry files of the Application type";
+    homepage = "https://github.com/jceb/dex";
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "dex";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/dispad/default.nix b/nixpkgs/pkgs/tools/X11/dispad/default.nix
new file mode 100644
index 000000000000..11d46bf24cb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/dispad/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, libX11, libXi, libconfuse }:
+
+stdenv.mkDerivation rec {
+  pname = "dispad";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "BlueDragonX";
+    repo = "dispad";
+    rev = "v${version}";
+    sha256 = "0y0n9mf1hs3s706gkpmg1lh74m6vvkqc9rdbzgc6s2k7vdl2zp1y";
+  };
+
+  buildInputs = [ libX11 libXi libconfuse ];
+
+  meta = with lib; {
+    description = "A small daemon for disabling trackpads while typing";
+    homepage = "https://github.com/BlueDragonX/dispad";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = platforms.linux;
+    mainProgram = "dispad";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/ffcast/default.nix b/nixpkgs/pkgs/tools/X11/ffcast/default.nix
new file mode 100644
index 000000000000..c70ef9da2e3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/ffcast/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, makeWrapper, perl
+, ffmpeg-full, imagemagick, xdpyinfo, xprop, xrectsel, xwininfo
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ffcast";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "ropery";
+    repo = "FFcast";
+    rev = version;
+    sha256 = "sha256-kxqwDGEguFTFHkQzXctXqxslt0+bYnfUdQ8C/8+eTXo=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper perl /*for pod2man*/ ];
+
+  configureFlags = [ "--disable-xrectsel" ];
+
+  postInstall = let
+    binPath = lib.makeBinPath [
+      ffmpeg-full
+      imagemagick
+      xdpyinfo
+      xprop
+      xrectsel
+      xwininfo
+    ];
+  in ''
+    wrapProgram $out/bin/ffcast --prefix PATH : ${binPath}
+  '';
+
+  meta = with lib; {
+    description = "Run commands on rectangular screen regions";
+    homepage = "https://github.com/ropery/FFcast";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.linux;
+    mainProgram = "ffcast";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/find-cursor/default.nix b/nixpkgs/pkgs/tools/X11/find-cursor/default.nix
new file mode 100644
index 000000000000..3b9862a47dea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/find-cursor/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, libX11, libXdamage, libXrender, libXcomposite, libXext, installShellFiles, git }:
+
+stdenv.mkDerivation rec {
+  pname = "find-cursor";
+  version = "1.8";
+
+  src = fetchFromGitHub {
+    owner = "arp242";
+    repo = "find-cursor";
+    rev = "v${version}";
+    sha256 = "sha256-/Dw4bOTCnpCbeI0YJ5DJ9Q2AGBognylUk7xYGn0KIA8=";
+  };
+
+  nativeBuildInputs = [ installShellFiles git ];
+  buildInputs = [ libX11 libXdamage libXrender libXcomposite libXext ];
+  preInstall = "mkdir -p $out/share/man/man1";
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Simple XLib program to highlight the cursor position";
+    homepage = "https://github.com/arp242/find-cursor";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.yanganto ];
+    mainProgram = "find-cursor";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/focus/default.nix b/nixpkgs/pkgs/tools/X11/focus/default.nix
new file mode 100644
index 000000000000..20c7e2e25d90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/focus/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libX11
+, libXinerama
+}:
+
+stdenv.mkDerivation rec {
+  pname = "focus";
+  version = "unstable-2021-02-23";
+
+  src = fetchFromGitHub {
+    owner = "phillbush";
+    repo = "focus";
+    rev = "fed2fdbd3f73b192882d97aeb5b1cea681bb7d85";
+    sha256 = "sha256-IDiUXindzv5Ng5oCTyUlj2il/2kLvXG4YhgiYp7ZebQ=";
+  };
+
+  buildInputs = [ libX11 libXinerama ];
+
+  makeFlags = [ "PREFIX=\${out}" ];
+
+  meta = with lib; {
+    description = "Focus window, workspace or monitor by direction or cycle through them";
+    longDescription = ''
+      A collection of utilities that change the focus of windows, workspaces or
+      monitors.
+    '';
+    homepage = "https://github.com/phillbush/focus";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/go-sct/default.nix b/nixpkgs/pkgs/tools/X11/go-sct/default.nix
new file mode 100644
index 000000000000..5e464d43f81c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/go-sct/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub, xorg, wayland }:
+
+buildGoModule rec {
+  pname = "go-sct";
+  version = "unstable-2022-01-32";
+
+  src = fetchFromGitHub {
+    owner = "d4l3k";
+    repo = "go-sct";
+    rev = "4ae88a6bf50e0b917541ddbcec1ff10ab77a0b15";
+    hash = "sha256-/0ilM1g3CNaseqV9i+cKWyzxvWnj+TFqazt+aYDtNVs=";
+  };
+
+  postPatch = ''
+    # Disable tests require network access
+    rm -f geoip/geoip_test.go
+  '';
+
+  vendorHash = "sha256-Rx5/oORink2QtRcD+JqbyFroWYhuYmuYDzZ391R4Jsw=";
+
+  buildInputs = [ xorg.libX11 xorg.libXrandr wayland.dev ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Color temperature setting library and CLI that operates in a similar way to f.lux and Redshift";
+    homepage = "https://github.com/d4l3k/go-sct";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    mainProgram = "sct";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/gobble/default.nix b/nixpkgs/pkgs/tools/X11/gobble/default.nix
new file mode 100644
index 000000000000..b61cf78f9921
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/gobble/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, xorg
+, installShellFiles
+, pandoc
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gobble";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "EmperorPenguin18";
+    repo = pname;
+    rev = version;
+    hash = "sha256-g4154Axvjp9jbE0lvMeNGM+v2UxkAsZqt9kPv5bhVK8=";
+  };
+
+  cargoHash = "sha256-5xsMLOYTKQc1bHHQsk9L4rHMVNBFOzIMxD+1qaMaNbQ=";
+
+  buildInputs = [ xorg.libxcb ];
+  nativeBuildInputs = [ pandoc installShellFiles ];
+
+  postInstall = ''
+    pandoc gobble.1.md -s -t man -o gobble.1
+    installManPage gobble.1
+  '';
+
+  meta = {
+    description = "gobbles your terminal";
+    homepage = "https://github.com/EmperorPenguin18/gobble";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ vuimuich ];
+    platforms = lib.platforms.linux;
+    mainProgram = "gobble";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/grobi/default.nix b/nixpkgs/pkgs/tools/X11/grobi/default.nix
new file mode 100644
index 000000000000..cea5fad51e55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/grobi/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, buildGoModule, fetchpatch }:
+
+buildGoModule rec {
+  version = "0.6.0";
+  pname = "grobi";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "fd0";
+    repo = "grobi";
+    hash = "sha256-evgDY+OjfQ0ngf4j/D4yOeITHQXmBmw8KiJhLKjdVAw=";
+  };
+
+  vendorHash = "sha256-cvP8M9pW58WwHvhXTMYqivNVGzHjDYlOd8/PvnLpfMU=";
+
+  patches = [
+    # fix failing test on go 1.15
+    (fetchpatch {
+      url = "https://github.com/fd0/grobi/commit/176988ab087ff92d1408fbc454c77263457f3d7e.patch";
+      hash = "sha256-YfjRV7kQxxGw3nQgB12tZOAJKBW21d9xx6BSou0bHkk=";
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/fd0/grobi";
+    description = "Automatically configure monitors/outputs for Xorg via RANDR";
+    license = with licenses; [ bsd2 ];
+    platforms   = platforms.linux;
+    mainProgram = "grobi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/hsetroot/default.nix b/nixpkgs/pkgs/tools/X11/hsetroot/default.nix
new file mode 100644
index 000000000000..a3ebc33f56ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/hsetroot/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, imlib2
+, libX11
+, libXinerama
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hsetroot";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "himdel";
+    repo = "hsetroot";
+    rev = version;
+    sha256 = "1jbk5hlxm48zmjzkaq5946s58rqwg1v1ds2sdyd2ba029hmvr722";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    imlib2
+    libX11
+    libXinerama
+  ];
+
+  postPatch = lib.optionalString (!stdenv.cc.isGNU) ''
+    sed -i -e '/--no-as-needed/d' Makefile
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  preInstall = ''
+    mkdir -p "$out/bin"
+  '';
+
+  meta = with lib; {
+    description = "Allows you to compose wallpapers ('root pixmaps') for X";
+    homepage = "https://github.com/himdel/hsetroot";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/icon-slicer/default.nix b/nixpkgs/pkgs/tools/X11/icon-slicer/default.nix
new file mode 100644
index 000000000000..514b39496ffa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/icon-slicer/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, pkg-config, gdk-pixbuf, popt }:
+stdenv.mkDerivation rec {
+  pname = "icon-slicer";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "https://freedesktop.org/software/icon-slicer/releases/icon-slicer-${version}.tar.gz";
+    sha256 = "0kdnc08k2rs8llfg7xgvnrsk60x59pv5fqz6kn2ifnn2s1nj3w05";
+  };
+
+  patches = [
+    # Fixes hotspot `y` coordinate. The `x` coordinate is used on the y-axis.
+    (fetchurl {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/hotspotfix.patch?h=icon-slicer";
+      sha256 = "1l1dc1x5p4hys02arkmq3x6b1xdi510969d25g928zr4gf4an03h";
+    })
+  ];
+
+  nativeBuildInputs = [ popt pkg-config ];
+  buildInputs = [ gdk-pixbuf ];
+
+  meta = with lib; {
+    description = "Utility for generating icon themes and libXcursor cursor themes";
+    homepage = "https://www.freedesktop.org/wiki/Software/icon-slicer/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zaninime ];
+    platforms = platforms.linux;
+    mainProgram = "icon-slicer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/imwheel/default.nix b/nixpkgs/pkgs/tools/X11/imwheel/default.nix
new file mode 100644
index 000000000000..bab363583a6c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/imwheel/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, libX11, libXext, libXi, libXmu, libXt, libXtst }:
+
+stdenv.mkDerivation rec {
+  pname = "imwheel";
+  version = "1.0.0pre12";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/imwheel/imwheel-${version}.tar.gz";
+    sha256 = "2320ed019c95ca4d922968e1e1cbf0c075a914e865e3965d2bd694ca3d57cfe3";
+  };
+
+  buildInputs = [ libX11 libXext libXi libXmu libXt libXtst ];
+
+  makeFlags = [
+    "sysconfdir=/etc"
+    "ETCDIR=/etc"
+  ];
+
+  installFlags = [
+    "sysconfdir=${placeholder "out"}/etc"
+    "ETCDIR=${placeholder "out"}/etc"
+  ];
+
+  meta = with lib; {
+    homepage = "https://imwheel.sourceforge.net/";
+    description = "Mouse wheel configuration tool for XFree86/Xorg";
+    maintainers = with maintainers; [ jhillyerd ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    mainProgram = "imwheel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/inputplug/default.nix b/nixpkgs/pkgs/tools/X11/inputplug/default.nix
new file mode 100644
index 000000000000..80d97190a0ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/inputplug/default.nix
@@ -0,0 +1,40 @@
+{ fetchCrate
+, installShellFiles
+, lib
+, libbsd
+, pkg-config
+, rustPlatform
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "inputplug";
+  version = "0.4.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "00gv2i2pxy56l6ysslbscxinr4r0mpk9p2ivkrnjnwhc8j3v8v7h";
+  };
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = [ libbsd ];
+
+  cargoSha256 = "161kz47d4psfvh0vm98k8qappg50lpsw1ybyy7s3g3bp6ivfz8jv";
+
+  postInstall = ''
+    installManPage inputplug.1
+  '';
+
+  meta = with lib; {
+    description = "Monitor XInput events and run arbitrary scripts on hierarchy change events";
+    homepage = "https://github.com/andrewshadura/inputplug";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    # `daemon(3)` is deprecated on macOS and `pidfile-rs` needs updating
+    broken = stdenv.isDarwin;
+    maintainers = with maintainers; [ jecaro ];
+    mainProgram = "inputplug";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/X11/jumpapp/default.nix b/nixpkgs/pkgs/tools/X11/jumpapp/default.nix
new file mode 100644
index 000000000000..cce6ced7573d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/jumpapp/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, perl, pandoc, fetchFromGitHub, xdotool, wmctrl, xprop, nettools }:
+
+stdenv.mkDerivation rec {
+  pname = "jumpapp";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "mkropat";
+    repo = "jumpapp";
+    rev = "v${version}";
+    sha256 = "sha256-9sh0+zpDxwqRGC1jUgGTDdSDRdAFsL12mQ/Opwh/UBc=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  nativeBuildInputs = [ pandoc perl ];
+  buildInputs = [ xdotool wmctrl xprop nettools perl ];
+  postFixup = let
+    runtimePath = lib.makeBinPath buildInputs;
+  in
+  ''
+    sed -i "2 i export PATH=${runtimePath}:\$PATH" $out/bin/jumpapp
+    sed -i "2 i export PATH=${perl}/bin:\$PATH" $out/bin/jumpappify-desktop-entry
+  '';
+
+  meta = {
+    homepage = "https://github.com/mkropat/jumpapp";
+    description = "A run-or-raise application switcher for any X11 desktop";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.matklad ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/kdocker/default.nix b/nixpkgs/pkgs/tools/X11/kdocker/default.nix
new file mode 100644
index 000000000000..e8c08e4c3832
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/kdocker/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, qmake
+, wrapQtAppsHook
+, libX11
+, libXmu
+, libXpm
+, qtbase
+, qtx11extras
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "kdocker";
+  version = "5.4";
+
+  src = fetchFromGitHub {
+    owner = "user-none";
+    repo = "KDocker";
+    rev = "${finalAttrs.version}";
+    hash = "sha256-CTz2M9nv5Rf1amnSpLiIUZLH9Q3te6ZyFNUzSGHdYJc=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    libX11
+    libXmu
+    libXpm
+    qtbase
+    qtx11extras
+  ];
+
+  prePatch = ''
+    for h in Xatom Xlib Xmu; do
+      sed -i "s|#include <$h|#include <X11/$h|" src/xlibutil.h src/{kdocker,scanner,trayitem,trayitemmanager}.cpp
+    done
+    for t in target icons desktop appdata; do
+      sed -i "s|$t.path = /usr|$t.path = $out|" kdocker.pro
+    done
+    sed -i "s|/etc/bash_completion.d|$out/share/bash-completion/completions|" kdocker.pro
+  '';
+
+  meta = with lib; {
+    description = "Dock any application into the system tray";
+    homepage = "https://github.com/user-none/KDocker";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ hexclover ];
+    platforms = platforms.linux;
+    mainProgram = "kdocker";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/X11/keynav/default.nix b/nixpkgs/pkgs/tools/X11/keynav/default.nix
new file mode 100644
index 000000000000..63732f478cba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/keynav/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, libX11
+, xorgproto
+, libXtst
+, libXi
+, libXext
+, libXinerama
+, libXrandr
+, glib
+, cairo
+, xdotool
+}:
+
+let release = "20220825"; in
+stdenv.mkDerivation {
+  pname = "keynav";
+  version = "0.${release}.0";
+
+  src = fetchFromGitHub {
+    owner = "jordansissel";
+    repo = "keynav";
+    rev = "28a1ba9a045c62a9d2bc5c3474a66d96c8bf5c32";
+    hash = "sha256-y4ONq6fDBFhVGASvz28zlJRXfkCE/j8GDcbq/j8xvUY=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    libX11
+    xorgproto
+    libXtst
+    libXi
+    libXext
+    libXinerama
+    libXrandr
+    glib
+    cairo
+    xdotool
+  ];
+
+  postPatch = ''
+    echo >>VERSION MAJOR=0
+    echo >>VERSION RELEASE=${release}
+    echo >>VERSION REVISION=0
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/keynav/doc
+    cp keynav $out/bin
+    cp keynavrc $out/share/keynav/doc
+  '';
+
+  meta = with lib; {
+    description = "Generate X11 mouse clicks from keyboard";
+    homepage = "https://www.semicomplete.com/projects/keynav/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+    mainProgram = "keynav";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/ksuperkey/default.nix b/nixpkgs/pkgs/tools/X11/ksuperkey/default.nix
new file mode 100644
index 000000000000..733022948dbd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/ksuperkey/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, libX11, libXtst, pkg-config, xorgproto, libXi }:
+
+stdenv.mkDerivation rec {
+  pname = "ksuperkey";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "hanschen";
+    repo = "ksuperkey";
+    rev = "v${version}";
+    sha256 = "1dvgf356fihfav8pjzww1q6vgd96c5h18dh8vpv022g9iipiwq8a";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libX11 libXtst xorgproto libXi ];
+
+  meta = with lib; {
+    description = "A tool to be able to bind the super key as a key rather than a modifier";
+    homepage = "https://github.com/hanschen/ksuperkey";
+    license = licenses.gpl3;
+    maintainers = [ ];
+    platforms = platforms.linux;
+    mainProgram = "ksuperkey";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/libstrangle/default.nix b/nixpkgs/pkgs/tools/X11/libstrangle/default.nix
new file mode 100644
index 000000000000..218f75f67cb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/libstrangle/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchFromGitLab, fetchpatch, libGL, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "libstrangle";
+  version = "unstable-202202022";
+
+  buildInputs = [ libGL libX11 ];
+
+  src = fetchFromGitLab {
+    owner = "torkel104";
+    repo = pname;
+    rev = "0273e318e3b0cc759155db8729ad74266b74cb9b";
+    sha256 = "sha256-h10QA7m7hIQHq1g/vCYuZsFR2NVbtWBB46V6OWP5wgM=";
+  };
+
+  makeFlags = [ "prefix=" "DESTDIR=$(out)" ];
+
+  patches = [
+    ./nixos.patch
+    # Pull the fix pending upstream inclusion for gcc-13:
+    #   https://gitlab.com/torkel104/libstrangle/-/merge_requests/29
+    (fetchpatch {
+      name = "gcc-13.patch";
+      url = "https://gitlab.com/torkel104/libstrangle/-/commit/4e17025071de1d99630febe7270b4f63056d0dfa.patch";
+      hash = "sha256-AKMHAZhCPcn62pi4fBGhw2r8SNSkCDMUCpR3IlmJ7wQ=";
+    })
+  ];
+
+  postPatch = ''
+    substituteAllInPlace src/strangle.sh
+    substituteAllInPlace src/stranglevk.sh
+  '';
+  postInstall = ''
+    substitute $out/share/vulkan/implicit_layer.d/libstrangle_vk.json $out/share/vulkan/implicit_layer.d/libstrangle_vk.x86.json \
+      --replace "libstrangle_vk.so" "$out/lib/libstrangle/lib32/libstrangle_vk.so"
+    substituteInPlace $out/share/vulkan/implicit_layer.d/libstrangle_vk.json \
+      --replace "libstrangle_vk.so" "$out/lib/libstrangle/lib64/libstrangle_vk.so"
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/torkel104/libstrangle";
+    description = "Frame rate limiter for Linux/OpenGL";
+    license = licenses.gpl3;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ aske ];
+    mainProgram = "strangle";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/libstrangle/nixos.patch b/nixpkgs/pkgs/tools/X11/libstrangle/nixos.patch
new file mode 100644
index 000000000000..c23a76f4e202
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/libstrangle/nixos.patch
@@ -0,0 +1,43 @@
+diff --git a/makefile b/makefile
+--- a/makefile
++++ b/makefile
+@@ -86,10 +86,6 @@ install-common:
+ 	install -m 0755 -D -T $(SOURCEDIR)/stranglevk.sh $(DESTDIR)$(bindir)/stranglevk
+ 	install -m 0644 -D -T $(SOURCEDIR)/vulkan/libstrangle_vk.json $(DESTDIR)$(datarootdir)/vulkan/implicit_layer.d/libstrangle_vk.json
+ 
+-install-ld: ld
+-	install -m 0644 -D -T $(BUILDDIR)/libstrangle.conf $(DESTDIR)/etc/ld.so.conf.d/libstrangle.conf
+-	if [ -z "$(DESTDIR)" ]; then ldconfig; fi
+-
+ install-32: 32-bit
+ 	install -m 0755 -D -T $(BUILDDIR)/libstrangle32.so $(DESTDIR)$(LIB32_PATH)/libstrangle.so
+ 	install -m 0755 -D -T $(BUILDDIR)/libstrangle32_nodlsym.so $(DESTDIR)$(LIB32_PATH)/libstrangle_nodlsym.so
+@@ -109,8 +105,7 @@ install: \
+ 	all \
+ 	install-common \
+ 	install-32 \
+-	install-64 \
+-	install-ld
++	install-64
+ 
+ clean:
+ 	rm -f $(BUILDDIR)/libstrangle64.so
+diff --git a/src/strangle.sh b/src/strangle.sh
+--- a/src/strangle.sh
++++ b/src/strangle.sh
+@@ -130,6 +130,5 @@ if [ "$STRANGLE_VKONLY" != "1" ]; then
+ 	fi
+ fi
+ 
+-# Execute the strangled program under a clean environment
+ # pass through the FPS and overriden LD_PRELOAD environment variables
+-exec env ENABLE_VK_LAYER_TORKEL104_libstrangle=1 LD_PRELOAD="${LD_PRELOAD}" "$@"
++ENABLE_VK_LAYER_TORKEL104_libstrangle=1 XDG_DATA_DIRS="${XDG_DATA_DIRS}${XDG_DATA_DIRS:+:}@out@/share" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}@out@/lib/libstrangle/lib64:@out@/lib/libstrangle/lib32" LD_PRELOAD="${LD_PRELOAD}" exec "$@"
+diff --git a/src/stranglevk.sh b/src/stranglevk.sh
+--- a/src/stranglevk.sh
++++ b/src/stranglevk.sh
+@@ -1,3 +1,3 @@
+ #!/bin/sh
+
+-ENABLE_VK_LAYER_TORKEL104_libstrangle=1 STRANGLE_VKONLY=1 strangle "$@"
++ENABLE_VK_LAYER_TORKEL104_libstrangle=1 STRANGLE_VKONLY=1 @out@/bin/strangle "$@"
diff --git a/nixpkgs/pkgs/tools/X11/mmutils/default.nix b/nixpkgs/pkgs/tools/X11/mmutils/default.nix
new file mode 100644
index 000000000000..580abbc77989
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/mmutils/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, libxcb }:
+
+stdenv.mkDerivation rec {
+  pname = "wmutils";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "pockata";
+    repo = "mmutils";
+    rev = "v${version}";
+    sha256 = "08wlb278m5lr218c87yqashk7farzny51ybl5h6j60i7pbpm01ml";
+  };
+
+  buildInputs = [ libxcb ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A set of utilities for querying xrandr monitor information";
+    homepage = "https://github.com/pockata/mmutils";
+    license = licenses.isc;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/ncview/default.nix b/nixpkgs/pkgs/tools/X11/ncview/default.nix
new file mode 100644
index 000000000000..fcfb6661f310
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/ncview/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchurl
+, expat
+, libpng
+, udunits
+, netcdf
+, xorg
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ncview";
+  version = "2.1.9";
+
+  src = fetchurl {
+    url = "https://cirrus.ucsd.edu/~pierce/ncview/ncview-${finalAttrs.version}.tar.gz";
+    hash = "sha256-4jF6wJSvYvCtz2hCHXBlgglDaq40RkCVnsiXWmRYka8=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    netcdf
+  ];
+
+  buildInputs = [
+    expat
+    libpng
+    netcdf
+    udunits
+    xorg.libICE
+    xorg.libSM
+    xorg.libX11
+    xorg.libXaw
+    xorg.libXt
+  ];
+
+  meta = with lib; {
+    description = "Visual browser for netCDF format files";
+    homepage = "http://meteora.ucsd.edu/~pierce/ncview_home_page.html";
+    license = licenses.gpl3Plus;
+    mainProgram = "ncview";
+    maintainers = with maintainers; [ jmettes ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/X11/nitrogen/default.nix b/nixpkgs/pkgs/tools/X11/nitrogen/default.nix
new file mode 100644
index 000000000000..6097948a7cd3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/nitrogen/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, gtkmm2 }:
+
+stdenv.mkDerivation rec {
+  pname = "nitrogen";
+  version = "1.6.1";
+
+  src = fetchurl {
+    url = "http://projects.l3ib.org/nitrogen/files/${pname}-${version}.tar.gz";
+    sha256 = "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ glib gtkmm2 ];
+
+  patchPhase = ''
+    patchShebangs data/icon-theme-installer
+  '';
+
+  meta = {
+    description = "A wallpaper browser and setter for X11";
+    longDescription = ''
+      nitrogen is a lightweight utility that can set the root background on X11.
+      It operates independently of any desktop environment, and supports
+      multi-head with Xinerama. Wallpapers are browsable with a convenient GUI,
+      and settings are stored in a human-readable config file.
+    '';
+    homepage = "https://github.com/l3ib/nitrogen";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.auntie ];
+    mainProgram = "nitrogen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/numlockx/default.nix b/nixpkgs/pkgs/tools/X11/numlockx/default.nix
new file mode 100644
index 000000000000..32eb652d8b72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/numlockx/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, libX11, libXext }:
+
+stdenv.mkDerivation {
+  version = "1.2";
+  pname = "numlockx";
+
+  src = fetchFromGitHub {
+    owner = "rg3";
+    repo = "numlockx";
+    rev = "9159fd3c5717c595dadfcb33b380a85c88406185";
+    hash = "sha256-wrHBelxEADUKugmtR8loWaJ/6s5U4PBBz8V+Dr1yifA=";
+  };
+
+  buildInputs = [ libX11 libXext autoconf ];
+
+  meta = {
+    description = "Allows to start X with NumLock turned on";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+    mainProgram = "numlockx";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/nx-libs/default.nix b/nixpkgs/pkgs/tools/X11/nx-libs/default.nix
new file mode 100644
index 000000000000..c62cba2e2364
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/nx-libs/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, autoconf, automake, fetchFromGitHub, fetchpatch
+, libjpeg_turbo
+, libpng, libtool, libxml2, pkg-config, which, xorg
+, libtirpc
+}:
+stdenv.mkDerivation rec {
+  pname = "nx-libs";
+  version = "3.5.99.26";
+  src = fetchFromGitHub {
+    owner = "ArcticaProject";
+    repo = "nx-libs";
+    rev = version;
+    sha256 = "sha256-qVOdD85sBMxKYx1cSLAGKeODsKKAm9UPBmYzPBbBOzQ=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "binutils-2.36.patch";
+      url = "https://github.com/ArcticaProject/nx-libs/commit/605a266911b50ababbb3f8a8b224efb42743379c.patch";
+      sha256 = "sha256-kk5ms3i0PrHL74I4OlsqDrdDcCJ0us03cQcBy4zjAoQ=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoconf automake libtool pkg-config which
+    xorg.gccmakedep xorg.imake ];
+  buildInputs = [ libjpeg_turbo libpng libxml2 xorg.fontutil
+    xorg.libXcomposite xorg.libXdamage xorg.libXdmcp xorg.libXext xorg.libXfont2
+    xorg.libXinerama xorg.libXpm xorg.libXrandr xorg.libXtst xorg.pixman
+    xorg.xkbcomp xorg.xkeyboardconfig libtirpc
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${libtirpc.dev}/include/tirpc" ];
+  NIX_LDFLAGS = [ "-ltirpc" ];
+
+  postPatch = ''
+    patchShebangs .
+    find . -type f -name Makefile -exec sed -i 's|^\(SHELL:=\)/bin/bash$|\1${stdenv.shell}|g' {} \;
+    ln -s libNX_X11.so.6.3.0
+  '';
+
+  preConfigure = ''
+    # binutils 2.37 fix
+    # https://github.com/ArcticaProject/nx-libs/issues/1003
+    substituteInPlace nx-X11/config/cf/Imake.tmpl --replace "clq" "cq"
+  '';
+
+  PREFIX=""; # Don't install to $out/usr/local
+  installPhase = ''
+    make DESTDIR="$out" install
+    # See:
+    # - https://salsa.debian.org/debian-remote-team/nx-libs/blob/bcc152100617dc59156015a36603a15db530a64f/debian/rules#L66-72
+    # - https://github.com/ArcticaProject/nx-libs/issues/652
+    patchelf --remove-needed "libX11.so.6" $out/bin/nxagent
+  '';
+
+  meta = {
+    description = "NX X server based on Xnest";
+    homepage = "https://github.com/ArcticaProject/nx-libs";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/obconf/default.nix b/nixpkgs/pkgs/tools/X11/obconf/default.nix
new file mode 100644
index 000000000000..f4f9fd433fde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/obconf/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchgit
+, autoreconfHook
+, pkg-config
+, wrapGAppsHook
+, gtk3
+, imlib2
+, libSM
+, libstartup_notification
+, libxml2
+, openbox
+}:
+
+stdenv.mkDerivation rec {
+  pname = "obconf";
+  version = "unstable-2015-02-13";
+
+  src = fetchgit {
+    url = "git://git.openbox.org/dana/obconf";
+    rev = "63ec47c5e295ad4f09d1df6d92afb7e10c3fec39";
+    sha256 = "sha256-qwm66VA/ueRMFtSUcrmuObNkz+KYgWRnmR7TnQwpxiE=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    imlib2
+    libSM
+    libstartup_notification
+    libxml2
+    openbox
+  ];
+
+  postPatch = ''
+    substituteInPlace configure.ac --replace 2.0.4 ${version}
+  '';
+
+  meta = {
+    description = "GUI configuration tool for openbox";
+    homepage = "http://openbox.org/wiki/ObConf";
+    changelog = "http://openbox.org/wiki/ObConf:Changelog";
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.sfrijters ];
+    platforms = lib.platforms.linux;
+    mainProgram = "obconf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/opentabletdriver/default.nix b/nixpkgs/pkgs/tools/X11/opentabletdriver/default.nix
new file mode 100644
index 000000000000..9f39fb7fb5c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/opentabletdriver/default.nix
@@ -0,0 +1,127 @@
+{ lib
+, buildDotnetModule
+, fetchFromGitHub
+, gtk3
+, libX11
+, libXrandr
+, libappindicator
+, libevdev
+, libnotify
+, udev
+, copyDesktopItems
+, makeDesktopItem
+, nixosTests
+, wrapGAppsHook
+, jq
+, coreutils
+}:
+
+buildDotnetModule rec {
+  pname = "OpenTabletDriver";
+  version = "0.6.4.0";
+
+  src = fetchFromGitHub {
+    owner = "OpenTabletDriver";
+    repo = "OpenTabletDriver";
+    rev = "v${version}";
+    hash = "sha256-zK+feU96JOXjmkTndM9VyUid3z+MZFxJGH+MXaB6kzk=";
+  };
+
+  patches = [
+    ./remove-git-from-generate-rules.patch
+  ];
+
+  dotnetInstallFlags = [ "--framework=net6.0" ];
+
+  projectFile = [ "OpenTabletDriver.Console" "OpenTabletDriver.Daemon" "OpenTabletDriver.UX.Gtk" ];
+  nugetDeps = ./deps.nix;
+
+  executables = [ "OpenTabletDriver.Console" "OpenTabletDriver.Daemon" "OpenTabletDriver.UX.Gtk" ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    wrapGAppsHook
+    # Dependency of generate-rules.sh
+    jq
+  ];
+
+  runtimeDeps = [
+    gtk3
+    libX11
+    libXrandr
+    libappindicator
+    libevdev
+    libnotify
+    udev
+  ];
+
+  buildInputs = runtimeDeps;
+
+  doCheck = true;
+  testProjectFile = "OpenTabletDriver.Tests/OpenTabletDriver.Tests.csproj";
+
+  disabledTests = [
+    # Require networking
+    "OpenTabletDriver.Tests.PluginRepositoryTest.ExpandRepositoryTarballFork"
+    "OpenTabletDriver.Tests.PluginRepositoryTest.ExpandRepositoryTarball"
+    # Require networking & unused in Linux build
+    "OpenTabletDriver.Tests.UpdaterTests.UpdaterBase_ProperlyChecks_Version_Async"
+    "OpenTabletDriver.Tests.UpdaterTests.Updater_PreventsUpdate_WhenAlreadyUpToDate_Async"
+    "OpenTabletDriver.Tests.UpdaterTests.Updater_AllowsReupdate_WhenInstallFailed_Async"
+    "OpenTabletDriver.Tests.UpdaterTests.Updater_HasUpdateReturnsFalse_During_UpdateInstall_Async"
+    "OpenTabletDriver.Tests.UpdaterTests.Updater_HasUpdateReturnsFalse_After_UpdateInstall_Async"
+    "OpenTabletDriver.Tests.UpdaterTests.Updater_Prevents_ConcurrentAndConsecutive_Updates_Async"
+    "OpenTabletDriver.Tests.UpdaterTests.Updater_ProperlyBackups_BinAndAppDataDirectory_Async"
+    # Intended only to be run in continuous integration, unnecessary for functionality
+    "OpenTabletDriver.Tests.ConfigurationTest.Configurations_DeviceIdentifier_IsNotConflicting"
+    # Depends on processor load
+    "OpenTabletDriver.Tests.TimerTests.TimerAccuracy"
+    # Can't find Configurations directory
+    "OpenTabletDriver.Tests.ConfigurationTest.Configurations_Verify_Configs_With_Schema"
+  ];
+
+  preBuild = ''
+    patchShebangs generate-rules.sh
+  '';
+
+  postFixup = ''
+    # Give a more "*nix" name to the binaries
+    mv $out/bin/OpenTabletDriver.Console $out/bin/otd
+    mv $out/bin/OpenTabletDriver.Daemon $out/bin/otd-daemon
+    mv $out/bin/OpenTabletDriver.UX.Gtk $out/bin/otd-gui
+
+    install -Dm644 $src/OpenTabletDriver.UX/Assets/otd.png -t $out/share/pixmaps
+
+    mkdir -p $out/lib/udev/rules.d
+    ./generate-rules.sh \
+      | sed 's@/usr/bin/env rm@${lib.getExe' coreutils "rm"}@' \
+      > $out/lib/udev/rules.d/70-opentabletdriver.rules
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      desktopName = "OpenTabletDriver";
+      name = "OpenTabletDriver";
+      exec = "otd-gui";
+      icon = "otd";
+      comment = meta.description;
+      categories = [ "Utility" ];
+    })
+  ];
+
+  passthru = {
+    updateScript = ./update.sh;
+    tests = {
+      otd-runs = nixosTests.opentabletdriver;
+    };
+  };
+
+  meta = with lib; {
+    description = "Open source, cross-platform, user-mode tablet driver";
+    homepage = "https://github.com/OpenTabletDriver/OpenTabletDriver";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ gepbird thiagokokada ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    mainProgram = "otd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/opentabletdriver/deps.nix b/nixpkgs/pkgs/tools/X11/opentabletdriver/deps.nix
new file mode 100644
index 000000000000..76674680d09c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/opentabletdriver/deps.nix
@@ -0,0 +1,229 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "AtkSharp"; version = "3.24.24.34"; sha256 = "1jn1vgi9xm0jp7769k6sbdi8d273kigjrsh93i6s4c03hqxv7cqs"; })
+  (fetchNuGet { pname = "CairoSharp"; version = "3.24.24.34"; sha256 = "0pydn1k0cam1gclg9sc1sbnmbyzh28qlc5qanyxcylwghink3kgz"; })
+  (fetchNuGet { pname = "Castle.Core"; version = "4.4.0"; sha256 = "0rpcbmyhckvlvp6vbzpj03c1gqz56ixc6f15vgmxmyf1g40c24pf"; })
+  (fetchNuGet { pname = "coverlet.collector"; version = "3.0.2"; sha256 = "1xf6z6izmsl4g8w3z1wbp4pa8f8qsf6sil4mf1c9fb22hq8c5hkg"; })
+  (fetchNuGet { pname = "Eto.Forms"; version = "2.5.10"; sha256 = "1d71wglk4ixfqfbm6sxmj753x5iwbar8i9zzjy3bh64fy1dn8lz7"; })
+  (fetchNuGet { pname = "Eto.Forms"; version = "2.5.11"; sha256 = "0h86jc19wy3ssj7pb34w1h02v92mg29gdipszwjs3y15piy66z3s"; })
+  (fetchNuGet { pname = "Eto.Platform.Gtk"; version = "2.5.11"; sha256 = "1s9njz7l9zghrbzli7lbiav5ss3glqf17npj07f3jldd933nb95j"; })
+  (fetchNuGet { pname = "GdkSharp"; version = "3.24.24.34"; sha256 = "0r0x0yib7chwsyrbpvicrfwldwqx5lyqq4p86zaxpmzd6zdaj0x5"; })
+  (fetchNuGet { pname = "GioSharp"; version = "3.24.24.34"; sha256 = "02hxvgjd4w9jpzbkk7qf9q9bkvyp5hfzwxfqp10vg5lpl9yl3xpx"; })
+  (fetchNuGet { pname = "GLibSharp"; version = "3.24.24.34"; sha256 = "0kvp033fgdwc8p2abfp5z9pzq66cvwbnjfvr4v4bkpy5s5h181kq"; })
+  (fetchNuGet { pname = "GtkSharp"; version = "3.24.24.34"; sha256 = "0028hzmmqyfx87qqmaf9cgb5psn7gkbmqvixcid67x1d6mzxjicb"; })
+  (fetchNuGet { pname = "HidSharpCore"; version = "1.2.1.1"; sha256 = "1zkndglmz0s8rblfhnqcvv90rkq2i7lf4bc380g7z8h1avf2ikll"; })
+  (fetchNuGet { pname = "MessagePack"; version = "2.1.194"; sha256 = "1v2gyd9sd6hppfhlzngmzzhnpr39b95rwrqq0r9zzp480b6vzaj0"; })
+  (fetchNuGet { pname = "MessagePack.Annotations"; version = "2.1.194"; sha256 = "1jkhq3hiy4brvzsywl4p4jb9jrnzs3vmgr3s8fxpb1dzafadw8b0"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "1.1.1"; sha256 = "0a1ahssqds2ympr7s4xcxv5y8jgxs7ahd6ah6fbgglj4rki1f1vw"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "16.9.4"; sha256 = "11wiyy3ykgk1sa9amy3lgcsg2v7d1sz59ggw647vx8ibpjxijjpp"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "6.0.0-rc.1.21451.13"; sha256 = "0r6945jq7c2f1wjifq514zvngicndjqfnsjya6hqw0yzah0jr56c"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "6.0.0-rc.1.21451.13"; sha256 = "11dg16x6g0gssb143qpghxz1s41himvhr7yhjwxs9hacx4ij2dm1"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "16.9.4"; sha256 = "1jdx05zmrqj1s7xfgn3wgy10qb5cl1n1jcj5kz43zvkw1amc7ra4"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.1"; sha256 = "164wycgng4mi9zqi2pnsf1pq6gccbqvw6ib916mqizgjmd8f44pj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "3.0.0"; sha256 = "1bk8r4r3ihmi6322jmcag14jmw11mjqys202azqjzglcx59pxh51"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "16.9.4"; sha256 = "1jizkbrnm4pv60zch29ki7gj8m7j5whk141x9cwx4kwsd6cfzwi6"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "16.9.4"; sha256 = "14110qzmypr72ywvx3npq7mf4n0gvdr4536v91z1xbapms65am6x"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Threading"; version = "16.7.56"; sha256 = "13x0xrsjxd86clf9cjjwmpzlyp8pkrf13riya7igs8zy93zw2qap"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Threading.Analyzers"; version = "16.7.56"; sha256 = "04v9df0k7bsc0rzgkw4mnvi43pdrh42vk6xdcwn9m6im33m0nnz2"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Validation"; version = "15.5.31"; sha256 = "1ah99rn922qa0sd2k3h64m324f2r32pw8cn4cfihgvwx4qdrpmgw"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.6.0"; sha256 = "0i4y782yrqqyx85pg597m20gm0v126w0j9ddk5z7xb3crx4z9f2s"; })
+  (fetchNuGet { pname = "Moq"; version = "4.16.1"; sha256 = "1m2gwbx0gsy84rl9c3hgdaw9gz8d08ffg19nwg0idsdqmmiq887l"; })
+  (fetchNuGet { pname = "Nerdbank.Streams"; version = "2.6.77"; sha256 = "13dnfwxa8syx7vfjmd5pcrqz31k0q8y3mmh6yz6bmljhjri65q5c"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "12.0.2"; sha256 = "0w2fbji1smd2y7x25qqibf1qrznmv4s6s0jvrbvr6alb7mfyqvh5"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.3"; sha256 = "0xrwysmrn4midrjal8g2hr1bbg38iyisl0svamb11arqws4w2bw7"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
+  (fetchNuGet { pname = "Newtonsoft.Json.Schema"; version = "3.0.15"; sha256 = "1nmc9zxpcyyf3f2ypxw6vnjwlw5sxjv13r65p2dy8xrx8jkgaslp"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.0.0"; sha256 = "18ijvmj13cwjdrrm52c8fpq021531zaz4mj4b4zapxaqzzxf2qjr"; })
+  (fetchNuGet { pname = "Octokit"; version = "0.50.0"; sha256 = "1ignj5i6a1c19qqrw00wlr9fdjmwrxkxz7gdxj0x653w84gbv7qq"; })
+  (fetchNuGet { pname = "PangoSharp"; version = "3.24.24.34"; sha256 = "1r0h14cklglfpv1lhv93cxmzi2w7d5s03gzpq3j5dmrz43flg9zw"; })
+  (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.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0rwpqngkqiapqc5c2cpkj7idhngrgss5qpnqg0yh40mbyflcxf8i"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1n06gxwlinhs0w7s8a94r1q3lwqzvynxwd3mp10ws9bg6gck8n4r"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0404wqrc7f2yc0wxv71y3nnybvqx8v4j9d47hlscxy759a525mc3"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (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.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0zy5r25jppz48i2bkg8b9lfig24xixg6nm3xyr1379zdnqnpm8f6"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "096ch4n4s8k82xga80lfmpimpzahd2ip1mgwdqgar0ywbbl6x438"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1dm8fifl7rf1gy7lnwln78ch4rw54g0pl5g1c189vawavll7p6rj"; })
+  (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.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1m9z1k9kzva9n9kwinqxl97x2vgl79qhqjlv17k9s2ymcyv2bwr6"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1cpx56mcfxz7cpn57wvj18sjisvzq8b5vd9rw16ihd2i6mcp3wa1"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "15gsm1a8jdmgmf8j5v1slfz8ks124nfdhk2vxs2rw3asrxalg8hi"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0q0n5q1r1wnqmr5i5idsrd9ywl33k0js4pngkwq9p368mbxp8x1w"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1x0g58pbpjrmj2x2qw17rdwwnrcl0wvim2hdwz48lixvwvp22n9c"; })
+  (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 = "SharpZipLib"; version = "1.3.3"; sha256 = "1gij11wfj1mqm10631cjpnhzw882bnzx699jzwhdqakxm1610q8x"; })
+  (fetchNuGet { pname = "StreamJsonRpc"; version = "2.6.121"; sha256 = "0xzvpk17w2skndzdg47j7gkrrvw6521db4mv8lc3v8hm97vs9m76"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (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.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.7.1"; sha256 = "1nh4nlxfc7lbnbl86wwk1a3jwl6myz5j6hvgh5sp4krim9901hsq"; })
+  (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.CommandLine"; version = "2.0.0-beta4.22272.1"; sha256 = "1iy5hwwgvx911g3yq65p4zsgpy08w4qz9j3h0igcf7yci44vw8yd"; })
+  (fetchNuGet { pname = "System.ComponentModel"; version = "4.3.0"; sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.7.0"; sha256 = "06x1m46ddxj0ng28d7gry9gjkqdg2kp89jyf480g5gznyybbs49z"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; })
+  (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.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (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.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; })
+  (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.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (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.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (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.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.Pipelines"; version = "4.7.2"; sha256 = "16v4qaypm72cfsfqr8z3k6yrpzn0m3apgkh6aljfwpycdk150sf9"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (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.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; })
+  (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.Net.WebSockets"; version = "4.3.0"; sha256 = "1gfj800078kggcgl0xyl00a6y5k4wwh2k2qm69rjy22wbmq7fy4p"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (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.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"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; })
+  (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.Emit.Lightweight"; version = "4.6.0"; sha256 = "0hry2k6b7kicg4zxnq0hhn0ys52711pxy7l9v5sp7gvp9cicwpgp"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
+  (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.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (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.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0-rc.1.21451.13"; sha256 = "0v5bc80p35jj5b5xdgsn5r1v4w68gqz0sahi214rprrrlr3sl206"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (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.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (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.Security.AccessControl"; version = "4.6.0"; sha256 = "1wl1dyghi0qhpap1vgfhg2ybdyyhy9vc2a7dpm1xb30vfgmlkjmf"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (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.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (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.6.0"; sha256 = "1jmfzfz1n8hp63s5lja5xxpzkinbp6g59l3km9h8avjiisdrg5wm"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (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.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "4.11.1"; sha256 = "09fbfsiay1xcbpvnq2j38b6mb2scvf0s8mpn78bcqsldidg7k2vw"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (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.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
+  (fetchNuGet { pname = "WaylandNET"; version = "0.2.0"; sha256 = "1qjpvra08vdqdw4j1gamz6451x5sd5r1j86lsvrl8akq4nymfr8k"; })
+  (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.3"; sha256 = "0j1d0rbcm7pp6dypi61sjxp8l22sv261252z55b243l39jgv2rp3"; })
+]
diff --git a/nixpkgs/pkgs/tools/X11/opentabletdriver/remove-git-from-generate-rules.patch b/nixpkgs/pkgs/tools/X11/opentabletdriver/remove-git-from-generate-rules.patch
new file mode 100644
index 000000000000..6881cc777370
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/opentabletdriver/remove-git-from-generate-rules.patch
@@ -0,0 +1,22 @@
+diff --git a/generate-rules.sh b/generate-rules.sh
+index ce6c3f3d..a0266612 100755
+--- a/generate-rules.sh
++++ b/generate-rules.sh
+@@ -8,7 +8,7 @@ print_help() {
+   echo "  -h, --help                              Print this help message"
+ }
+ 
+-for c in git jq tr awk sed; do
++for c in jq tr awk sed; do
+   command -v $c > /dev/null
+   if [[ $? > 0 ]]; then
+     echo "Error: Command $c not found in \$PATH." >&2
+@@ -23,7 +23,7 @@ tohex() {
+ shopt -s globstar
+ set -eu
+ 
+-OTD_CONFIGURATIONS="${OTD_CONFIGURATIONS:="$(git rev-parse --show-toplevel)/OpenTabletDriver.Configurations/Configurations"}"
++OTD_CONFIGURATIONS="${OTD_CONFIGURATIONS:="$src/OpenTabletDriver.Configurations/Configurations"}"
+ 
+ while [ $# -gt 0 ]; do
+   case "$1" in
diff --git a/nixpkgs/pkgs/tools/X11/opentabletdriver/update.sh b/nixpkgs/pkgs/tools/X11/opentabletdriver/update.sh
new file mode 100755
index 000000000000..665f5ac526aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/opentabletdriver/update.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=./. -i bash -p curl gnused jq common-updater-scripts
+set -eo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+new_version="$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s "https://api.github.com/repos/OpenTabletDriver/OpenTabletDriver/releases" | jq -r  'map(select(.prerelease == false)) | .[0].tag_name' | cut -c2-)"
+old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+
+if [[ "$new_version" == "$old_version" ]]; then
+  echo "Already up to date!"
+  [[ "${1}" != "--force" ]] && exit 0
+fi
+
+# Updating the hash of deb package manually since there seems to be no way to do it automatically
+oldDebPkgUrl="https://github.com/OpenTabletDriver/OpenTabletDriver/releases/download/v${old_version}/OpenTabletDriver.deb";
+newDebPkgUrl="https://github.com/OpenTabletDriver/OpenTabletDriver/releases/download/v${new_version}/OpenTabletDriver.deb";
+oldDebSha256=$(nix-prefetch-url "$oldDebPkgUrl")
+newDebSha256=$(nix-prefetch-url "$newDebPkgUrl")
+echo "oldDebSha256: $oldDebSha256 newDebSha256: $newDebSha256"
+sed -i ./default.nix -re "s|\"$oldDebSha256\"|\"$newDebSha256\"|"
+
+pushd ../../../..
+update-source-version opentabletdriver "$new_version"
+$(nix-build -A opentabletdriver.fetch-deps --no-out-link)
diff --git a/nixpkgs/pkgs/tools/X11/paperview/default.nix b/nixpkgs/pkgs/tools/X11/paperview/default.nix
new file mode 100644
index 000000000000..30f04702708a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/paperview/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libX11
+, SDL2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "paperview";
+  version = "unstable-2020-09-22";
+
+  src = fetchFromGitHub {
+    owner = "glouw";
+    repo = "paperview";
+    rev = "40162fb76566fec8163c338c169c2fcd9df6ef42";
+    hash = "sha256-rvf89vMIT274+Hva+N4KFu1iT2XE6fq5Bi4kOQg2M0g=";
+  };
+
+  buildInputs = [
+    SDL2
+    libX11
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "A high performance X11 animated wallpaper setter";
+    homepage = "https://github.com/glouw/paperview";
+    platforms = platforms.linux;
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ _3JlOy-PYCCKUi ];
+    mainProgram = "paperview";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/pmenu/default.nix b/nixpkgs/pkgs/tools/X11/pmenu/default.nix
new file mode 100644
index 000000000000..278a181f5c92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/pmenu/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, writeText
+, fontconfig
+, imlib2
+, libX11
+, libXext
+, libXft
+, libXinerama
+, libXrender
+, conf ? null
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pmenu";
+  version = "3.1.1";
+
+  src = fetchFromGitHub {
+    owner = "phillbush";
+    repo = "pmenu";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-7NI5az3LxOYEnsts8Qqi3gvO3dXpNjPDOTW2c5Y25Lc=";
+  };
+
+  buildInputs = [
+    fontconfig
+    imlib2
+    libX11
+    libXext
+    libXft
+    libXinerama
+    libXrender
+  ];
+
+  postPatch = let
+      configFile =
+        if lib.isDerivation conf || builtins.isPath conf
+        then conf else writeText "config.h" conf;
+    in
+    lib.optionalString (conf != null) "mv ${configFile} config.h";
+
+  makeFlags = [
+    "INSTALL=install"
+    "PREFIX=\${out}"
+  ];
+
+  meta = {
+    description = "A pie-menu tool";
+    homepage = "https://github.com/phillbush/pmenu";
+    license = lib.licenses.mit;
+    longDescription = ''
+      πmenu is a pie menu utility for X. πmenu receives a menu specification in
+      stdin, shows a menu for the user to select one of the options, and outputs
+      the option selected to stdout.
+    '';
+    maintainers = [ lib.maintainers.azahi ];
+    platforms = lib.platforms.unix;
+    mainProgram = "pmenu";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/X11/primus/default.nix b/nixpkgs/pkgs/tools/X11/primus/default.nix
new file mode 100644
index 000000000000..eb8aa042e7b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/primus/default.nix
@@ -0,0 +1,34 @@
+# For a 64bit + 32bit system the LD_LIBRARY_PATH must contain both the 32bit and 64bit primus
+# libraries. Providing a different primusrun for each architecture will not work as expected. EG:
+# Using steam under wine can involve both 32bit and 64bit process. All of which inherit the
+# same LD_LIBRARY_PATH.
+# Other distributions do the same.
+{ stdenv
+, stdenv_i686
+, lib
+, primusLib
+, writeScriptBin
+, runtimeShell
+, primusLib_i686 ? null
+, useNvidia ? true
+}:
+
+let
+  # We override stdenv in case we need different ABI for libGL
+  primusLib_ = primusLib.override { inherit stdenv; };
+  primusLib_i686_ = primusLib_i686.override { stdenv = stdenv_i686; };
+
+  primus = if useNvidia then primusLib_ else primusLib_.override { nvidia_x11 = null; };
+  primus_i686 = if useNvidia then primusLib_i686_ else primusLib_i686_.override { nvidia_x11 = null; };
+  ldPath = lib.makeLibraryPath (lib.filter (x: x != null) (
+    [ primus primus.glvnd ]
+    ++ lib.optionals (primusLib_i686 != null) [ primus_i686 primus_i686.glvnd ]
+  ));
+
+in writeScriptBin "primusrun" ''
+  #!${runtimeShell}
+  export LD_LIBRARY_PATH=${ldPath}''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH
+  # https://bugs.launchpad.net/ubuntu/+source/bumblebee/+bug/1758243
+  export __GLVND_DISALLOW_PATCHING=1
+  exec "$@"
+''
diff --git a/nixpkgs/pkgs/tools/X11/primus/lib.nix b/nixpkgs/pkgs/tools/X11/primus/lib.nix
new file mode 100644
index 000000000000..43e0a8233fd0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/primus/lib.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, libX11
+, libGL
+, mesa
+, nvidia_x11 ? null
+, libglvnd
+}:
+
+let
+  aPackage =
+    if nvidia_x11 == null then libGL
+    else if nvidia_x11.useGLVND then libglvnd
+    else nvidia_x11;
+
+in
+stdenv.mkDerivation {
+  pname = "primus-lib";
+  version = "unstable-2015-04-28";
+
+  src = fetchFromGitHub {
+    owner = "amonakov";
+    repo = "primus";
+    rev = "d1afbf6fce2778c0751eddf19db9882e04f18bfd";
+    sha256 = "118jm57ccawskb8vjq3a9dpa2gh72nxzvx2zk7zknpy0arrdznj1";
+  };
+
+  patches = [
+    # Bump buffer size for long library paths.
+    (fetchpatch {
+      url = "https://github.com/abbradar/primus/commit/2f429e232581c556df4f4bf210aee8a0c99c60b7.patch";
+      sha256 = "1da6ynz7r7x98495i329sf821308j1rpy8prcdraqahz7p4c89nc";
+    })
+  ];
+
+  buildInputs = [ libX11 libGL ];
+
+  makeFlags = [
+    "LIBDIR=$(out)/lib"
+    "PRIMUS_libGLa=${aPackage}/lib/libGL.so"
+    "PRIMUS_libGLd=${libGL}/lib/libGL.so"
+    "PRIMUS_LOAD_GLOBAL=${mesa}/lib/libglapi.so"
+  ];
+
+  installPhase = ''
+    ln -s $out/lib/libGL.so.1 $out/lib/libGL.so
+  '';
+
+  passthru.glvnd = if nvidia_x11 != null && nvidia_x11.useGLVND then nvidia_x11 else null;
+
+  meta = with lib; {
+    description = "Low-overhead client-side GPU offloading";
+    homepage = "https://github.com/amonakov/primus";
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/ratmen/default.nix b/nixpkgs/pkgs/tools/X11/ratmen/default.nix
new file mode 100644
index 000000000000..0fe85a9ae452
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/ratmen/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, perl, xorgproto, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "ratmen";
+  version = "2.2.3";
+  src = fetchurl {
+    url = "http://www.update.uu.se/~zrajm/programs/ratmen/ratmen-${version}.tar.gz";
+    sha256 = "0gnfqhnch9x8jhr87gvdjcp1wsqhchfjilpnqcwx5j0nlqyz6wi6";
+  };
+  buildInputs = [
+    perl
+    xorgproto
+    libX11
+  ];
+  makeFlags = [
+    "PREFIX=$(out)"
+  ];
+  meta = with lib; {
+    description = "A minimalistic X11 menu creator";
+    license = licenses.free; # 9menu derivative with 9menu license
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    homepage = "http://www.update.uu.se/~zrajm/programs/";
+    downloadPage = "http://www.update.uu.se/~zrajm/programs/ratmen/";
+    mainProgram = "ratmen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/run-scaled/default.nix b/nixpkgs/pkgs/tools/X11/run-scaled/default.nix
new file mode 100644
index 000000000000..b9cdc20f78aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/run-scaled/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, bc, xorgserver, xpra, xrandr }:
+
+stdenv.mkDerivation {
+  version = "unstable-2018-06-03";
+  pname = "run-scaled";
+
+  src = fetchFromGitHub {
+    owner = "kaueraal";
+    repo = "run_scaled";
+    rev = "fa71b3c17e627a96ff707ad69f1def5361f2245c";
+    sha256 = "1ma4ax7ydq4xvyzrc4zapihmf7v3d9zl9mbi8bgpps7nlgz544ys";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp run_scaled $out/bin
+    wrapProgram $out/bin/run_scaled --prefix PATH ":" \
+      ${lib.makeBinPath [ bc xorgserver xpra xrandr ]}
+  '';
+
+  meta = with lib; {
+    description = "Run an X application scaled via xpra";
+    homepage = "https://github.com/kaueraal/run_scaled";
+    maintainers = [ maintainers.snaar ];
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    mainProgram = "run_scaled";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/runningx/default.nix b/nixpkgs/pkgs/tools/X11/runningx/default.nix
new file mode 100644
index 000000000000..bc7e6f395703
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/runningx/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, pkg-config, libX11 }:
+
+stdenv.mkDerivation {
+  pname = "runningx";
+  version = "1.0";
+
+  src = fetchurl {
+    url = "http://www.fiction.net/blong/programs/mutt/autoview/RunningX.c";
+    sha256 = "1mikkhrx6jsx716041qdy3nwjac08pxxvxyq2yablm8zg9hrip0d";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libX11 ];
+
+  dontUnpack = true;
+
+  buildPhase = ''
+    cc -O2 -o RunningX $(pkg-config --cflags --libs x11) $src
+  '';
+
+  installPhase = ''
+    mkdir -p "$out"/bin
+    cp -vai RunningX "$out/bin"
+  '';
+
+  meta = {
+    homepage = "http://www.fiction.net/blong/programs/mutt/";
+    description = "A program for testing if X is running";
+    license = lib.licenses.free;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.romildo ];
+    mainProgram = "RunningX";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/sbs/default.nix b/nixpkgs/pkgs/tools/X11/sbs/default.nix
new file mode 100644
index 000000000000..8f16729cd256
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/sbs/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, libX11, imlib2, libXinerama, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "sbs";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "onur-ozkan";
+    repo = "${pname}";
+    rev = "v${version}";
+    sha256 = "sha256-Zgu9W/3LwHF/fyaPlxmV/2LdxilO1tU0JY/esLnJVGY=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ imlib2 libX11 libXinerama ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Simple background setter with 200 lines of code";
+    homepage = "https://github.com/onur-ozkan/sbs";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ onur-ozkan ];
+    mainProgram = "sbs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/screen-message/default.nix b/nixpkgs/pkgs/tools/X11/screen-message/default.nix
new file mode 100644
index 000000000000..c049c3841ea6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/screen-message/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "screen-message";
+  version = "0.28";
+
+  src = fetchFromGitHub {
+    owner = "nomeata";
+    repo = "screen-message";
+    rev = version;
+    hash = "sha256-KHJL1N72Hc1B1m0olxoZxBHIpq/d/T3m2VdS5XC9+tk=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ gtk3 ];
+
+  # screen-message installs its binary in $(prefix)/games per default
+  makeFlags = [ "execgamesdir=$(out)/bin" ];
+
+  meta = {
+    homepage = "https://www.joachim-breitner.de/en/projects#screen-message";
+    description = "Displays a short text fullscreen in an X11 window";
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.fpletz ];
+    mainProgram = "sm";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/sct/default.nix b/nixpkgs/pkgs/tools/X11/sct/default.nix
new file mode 100644
index 000000000000..821a1c6070ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/sct/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchzip, libX11, libXrandr, xorgproto }:
+
+stdenv.mkDerivation rec {
+  pname = "sct";
+  version = "0.5";
+
+  src = fetchzip {
+    url = "https://www.umaxx.net/dl/sct-0.5.tar.gz";
+    sha256 = "sha256-nyYcdnCq8KcSUpc0HPCGzJI6NNrrTJLAHqPawfwPR/Q=";
+  };
+
+  buildInputs = [ libX11 libXrandr xorgproto ];
+
+  preInstall = ''
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://www.umaxx.net/";
+    description = "A minimal utility to set display colour temperature";
+    maintainers = with maintainers; [ raskin somasis ];
+    license = licenses.publicDomain;
+    platforms = with platforms; linux ++ freebsd ++ openbsd;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/setroot/default.nix b/nixpkgs/pkgs/tools/X11/setroot/default.nix
new file mode 100644
index 000000000000..2c7729eab3ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/setroot/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, libX11, imlib2, pkg-config, fetchpatch
+, enableXinerama ? true, libXinerama
+}:
+
+stdenv.mkDerivation rec {
+  version = "2.0.2";
+  pname = "setroot";
+
+  src = fetchFromGitHub {
+    owner = "ttzhou";
+    repo = "setroot";
+    rev = "v${version}";
+    sha256 = "0w95828v0splk7bj5kfacp4pq6wxpyamvyjmahyvn5hc3ycq21mq";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/ttzhou/setroot/commit/d8ff8edd7d7594d276d741186bf9ccf0bce30277.patch";
+      sha256 = "sha256-e0iMSpiOmTOpQnp599fjH2UCPU4Oq1VKXcVypVoR9hw=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libX11 imlib2 ]
+    ++ lib.optionals enableXinerama [ libXinerama ];
+
+  buildFlags = [ (if enableXinerama then "xinerama=1" else "xinerama=0") ] ;
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Simple X background setter inspired by imlibsetroot and feh";
+    homepage = "https://github.com/ttzhou/setroot";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.vyp ];
+    platforms = platforms.unix;
+    mainProgram = "setroot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/skippy-xd/default.nix b/nixpkgs/pkgs/tools/X11/skippy-xd/default.nix
new file mode 100644
index 000000000000..4df15acf76e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/skippy-xd/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, xorgproto
+, libX11
+, libXft
+, libXcomposite
+, libXdamage
+, libXext
+, libXinerama
+, libjpeg
+, giflib
+, pkg-config
+}:
+stdenv.mkDerivation rec {
+  pname = "skippy-xd";
+  version = "0.6.0";
+  src = fetchFromGitHub {
+    owner = "dreamcat4";
+    repo = "skippy-xd";
+    rev = "d0557c3144fc67568a49d7207efef89c1d5777a0";
+    sha256 = "sha256-dnoPUPCvuR/HhqIz1WAsmWL/CkfTf11YEkbrkVWM4dc=";
+  };
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    xorgproto
+    libX11
+    libXft
+    libXcomposite
+    libXdamage
+    libXext
+    libXinerama
+    libjpeg
+    giflib
+  ];
+  makeFlags = [ "PREFIX=$(out)" ];
+  preInstall = ''
+    sed -e "s@/etc/xdg@$out&@" -i Makefile
+  '';
+  meta = with lib; {
+    description = "Expose-style compositing-based standalone window switcher";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/smart-wallpaper/default.nix b/nixpkgs/pkgs/tools/X11/smart-wallpaper/default.nix
new file mode 100644
index 000000000000..8f41bb7a78af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/smart-wallpaper/default.nix
@@ -0,0 +1,39 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+, makeWrapper
+, xdpyinfo
+, killall
+, xwinwrap
+, swaybg
+, redshift
+}:
+
+stdenvNoCC.mkDerivation {
+  pname = "smart-wallpaper";
+  version = "unstable-2022-09-15";
+
+  src = fetchFromGitHub {
+    owner = "Baitinq";
+    repo = "smart-wallpaper";
+    rev = "a23e6ed658342a405544ebe055ec1ac2fd464484";
+    sha256 = "sha256-IymFjyfqNycTLalZBiqmjJP5U6AFefe9BSWn3Mpoz4c=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 -t $out/bin smart-wallpaper
+    wrapProgram $out/bin/smart-wallpaper \
+      --prefix PATH : ${lib.makeBinPath [ xdpyinfo killall xwinwrap swaybg redshift ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Baitinq/smart-wallpaper";
+    description = "A simple bash script that automatically changes your wallpaper depending on if its daytime or nighttime";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ baitinq ];
+    platforms = platforms.linux;
+    mainProgram = "smart-wallpaper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/srandrd/default.nix b/nixpkgs/pkgs/tools/X11/srandrd/default.nix
new file mode 100644
index 000000000000..0d51bf4785ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/srandrd/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv
+, fetchFromGitHub
+, libX11
+, libXrandr
+, libXinerama
+}:
+
+stdenv.mkDerivation rec {
+  pname = "srandrd";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "jceb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Wf+tVqDaNAiH6UHN8fFv2wM+LEch6wKlZOkqWEqLLkw=";
+  };
+
+  buildInputs = [ libX11 libXrandr libXinerama ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jceb/srandrd";
+    description = "Simple randr daemon";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.utdemir ];
+    mainProgram = "srandrd";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/X11/sselp/default.nix b/nixpkgs/pkgs/tools/X11/sselp/default.nix
new file mode 100644
index 000000000000..de083a32028d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/sselp/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, libX11 }:
+
+stdenv.mkDerivation rec {
+  version = "0.2";
+  pname = "sselp";
+
+  src = fetchurl {
+    url = "https://dl.suckless.org/tools/${pname}-${version}.tar.gz";
+    sha256 = "08mqp00lrh1chdrbs18qr0xv63h866lkmfj87kfscwdm1vn9a3yd";
+  };
+
+  buildInputs = [ libX11 ];
+
+  patchPhase = ''
+    sed -i "s@/usr/local@$out@g" config.mk
+    sed -i "s@/usr/X11R6/include@${libX11}/include@g" config.mk
+    sed -i "s@/usr/X11R6/lib@${libX11}/lib@g" config.mk
+  '';
+
+  meta = {
+    homepage = "https://tools.suckless.org/sselp";
+    description = "Prints the X selection to stdout, useful in scripts";
+    license = lib.licenses.mit;
+    maintainers = [lib.maintainers.magnetophon ];
+    platforms = lib.platforms.linux;
+    mainProgram = "sselp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/vdpauinfo/default.nix b/nixpkgs/pkgs/tools/X11/vdpauinfo/default.nix
new file mode 100644
index 000000000000..0ca3354433dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/vdpauinfo/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, libvdpau }:
+
+stdenv.mkDerivation rec {
+  pname = "vdpauinfo";
+  version = "1.5";
+
+  src = fetchurl {
+    url = "https://gitlab.freedesktop.org/vdpau/vdpauinfo/-/archive/${version}/${pname}-${version}.tar.bz2";
+    hash = "sha256-uOs/r8Ow7KvSpY1NhD2A+D4Qs6iWJe4fZGfVj6nIiCw=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ libvdpau ];
+
+  meta = with lib; {
+    homepage = "https://people.freedesktop.org/~aplattner/vdpau/";
+    description = "Tool to query the Video Decode and Presentation API for Unix (VDPAU) abilities of the system";
+    license = licenses.mit; # expat version
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ vcunat ];
+    mainProgram = "vdpauinfo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/virtualgl/default.nix b/nixpkgs/pkgs/tools/X11/virtualgl/default.nix
new file mode 100644
index 000000000000..05c0f1c69b40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/virtualgl/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib
+, virtualglLib
+, virtualglLib_i686 ? null
+}:
+
+stdenv.mkDerivation {
+  pname = "virtualgl";
+  version = lib.getVersion virtualglLib;
+
+  paths = [ virtualglLib ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+    for i in ${virtualglLib}/bin/* ${virtualglLib}/bin/.vglrun*; do
+      ln -s "$i" $out/bin
+    done
+  '' + lib.optionalString (virtualglLib_i686 != null) ''
+    ln -sf ${virtualglLib_i686}/bin/.vglrun.vars32 $out/bin
+  '';
+
+  meta = {
+    platforms = lib.platforms.linux;
+    inherit (virtualglLib.meta) license;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/virtualgl/lib.nix b/nixpkgs/pkgs/tools/X11/virtualgl/lib.nix
new file mode 100644
index 000000000000..a0f2741edd78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/virtualgl/lib.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, cmake
+, libGL, libGLU, libXv, libXtst, libXi, libjpeg_turbo, fltk
+, xorg
+, opencl-headers, opencl-clhpp, ocl-icd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "virtualgl-lib";
+  version = "3.0.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/virtualgl/VirtualGL-${version}.tar.gz";
+    sha256 = "sha256-OIEbwAQ71yOuHIzM+iaK7QkUJrKg6sXpGuFQOUPjM2w=";
+  };
+
+  postPatch = ''
+    # the unit tests take significant hacks to build and can't run anyway due to the lack
+    # of a 3D X server in the build sandbox. so we just chop out their build instructions.
+    head -n $(grep -n 'UNIT TESTS' server/CMakeLists.txt | cut -d : -f 1) server/CMakeLists.txt > server/CMakeLists2.txt
+    mv server/CMakeLists2.txt server/CMakeLists.txt
+  '';
+
+  cmakeFlags = [ "-DVGL_SYSTEMFLTK=1" "-DTJPEG_LIBRARY=${libjpeg_turbo.out}/lib/libturbojpeg.so" ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ libjpeg_turbo libGL libGLU fltk
+    libXv libXtst libXi xorg.xcbutilkeysyms
+    opencl-headers opencl-clhpp ocl-icd
+  ];
+
+  fixupPhase = ''
+    substituteInPlace $out/bin/vglrun \
+      --replace "LD_PRELOAD=libvglfaker" "LD_PRELOAD=$out/lib/libvglfaker" \
+      --replace "LD_PRELOAD=libdlfaker" "LD_PRELOAD=$out/lib/libdlfaker" \
+      --replace "LD_PRELOAD=libgefaker" "LD_PRELOAD=$out/lib/libgefaker"
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.virtualgl.org/";
+    description = "X11 GL rendering in a remote computer with full 3D hw acceleration";
+    license = licenses.wxWindows;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/wayv/default.nix b/nixpkgs/pkgs/tools/X11/wayv/default.nix
new file mode 100644
index 000000000000..eae930de1dd9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wayv/default.nix
@@ -0,0 +1,42 @@
+{lib, stdenv, fetchFromGitHub, fetchpatch, libX11}:
+stdenv.mkDerivation rec {
+  pname = "wayv";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "mikemb";
+    repo = pname;
+    rev = "b716877603250f690f08b593bf30fd5e8a93a872";
+    sha256 = "046dvaq6na1fyxz5nrjg13aaz6ific9wbygck0dknqqfmmjrsv3b";
+  };
+
+  patches = [
+    # Pull patch pending upstream inclusion for -fno-common toolchain support:
+    #   https://github.com/mikemb/wayV/pull/1
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/mikemb/wayV/commit/b927793e2a2c92ff1f97b9df9e58c26e73e72012.patch";
+      sha256 = "19i10966b0n710dic64p5ajsllkjnz16bp0crxfy9vv08hj1xygi";
+    })
+  ];
+
+  buildInputs = [ libX11 ];
+
+  postInstall = ''
+    make -C doc install
+    mkdir -p "$out"/share/doc/wayv
+    cp [A-Z][A-Z]* "$out"/share/doc/wayv
+    cp doc/[A-Z][A-Z]* "$out"/share/doc/wayv
+    cp doc/*.txt "$out"/share/doc/wayv
+    cp doc/*.jpg "$out"/share/doc/wayv
+  '';
+
+  meta = {
+    description = "A gesture control for X11";
+    license = lib.licenses.gpl2Plus ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+    homepage = "https://github.com/mikemb/wayV";
+    mainProgram = "wayv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/wmctrl/64-bit-data.patch b/nixpkgs/pkgs/tools/X11/wmctrl/64-bit-data.patch
new file mode 100644
index 000000000000..3ec1c913ffea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wmctrl/64-bit-data.patch
@@ -0,0 +1,32 @@
+Description: Correct 64 Architecture implementation of 32 bit data
+Author: Chris Donoghue <cdonoghu@gmail.com>
+Bug-Debian: http://bugs.debian.org/362068
+
+--- wmctrl-1.07.orig/main.c
++++ wmctrl-1.07/main.c
+@@ -1425,6 +1425,16 @@ static gchar *get_property (Display *dis
+      *
+      * long_length = Specifies the length in 32-bit multiples of the
+      *               data to be retrieved.
++     *
++     * NOTE:  see 
++     * http://mail.gnome.org/archives/wm-spec-list/2003-March/msg00067.html
++     * In particular:
++     *
++     * 	When the X window system was ported to 64-bit architectures, a
++     * rather peculiar design decision was made. 32-bit quantities such
++     * as Window IDs, atoms, etc, were kept as longs in the client side
++     * APIs, even when long was changed to 64 bits.
++     *
+      */
+     if (XGetWindowProperty(disp, win, xa_prop_name, 0, MAX_PROPERTY_VALUE_LEN / 4, False,
+             xa_prop_type, &xa_ret_type, &ret_format,     
+@@ -1441,6 +1451,8 @@ static gchar *get_property (Display *dis
+ 
+     /* null terminate the result to make string handling easier */
+     tmp_size = (ret_format / 8) * ret_nitems;
++    /* Correct 64 Architecture implementation of 32 bit data */
++    if(ret_format==32) tmp_size *= sizeof(long)/4;
+     ret = g_malloc(tmp_size + 1);
+     memcpy(ret, ret_prop, tmp_size);
+     ret[tmp_size] = '\0';
diff --git a/nixpkgs/pkgs/tools/X11/wmctrl/default.nix b/nixpkgs/pkgs/tools/X11/wmctrl/default.nix
new file mode 100644
index 000000000000..08a3e9c365f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wmctrl/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv
+, fetchurl
+, libX11
+, glib
+, pkg-config
+, libXmu
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "wmctrl";
+  version = "1.07";
+
+  src = fetchurl {
+    # NOTE: 2019-04-11: There is also a semi-official mirror: http://tripie.sweb.cz/utils/wmctrl/
+    url = "https://sites.google.com/site/tstyblo/wmctrl/${pname}-${version}.tar.gz";
+    sha256 = "1afclc57b9017a73mfs9w7lbdvdipmf9q0xdk116f61gnvyix2np";
+  };
+
+  strictDeps = true;
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ glib.dev ];
+  buildInputs = [ libX11 libXmu glib ];
+
+  patches = [ ./64-bit-data.patch ];
+
+  meta = {
+    homepage = "https://sites.google.com/site/tstyblo/wmctrl";
+    description = "CLI tool to interact with EWMH/NetWM compatible X Window Managers";
+    license = lib.licenses.gpl2;
+    platforms = with lib.platforms; all;
+    maintainers = [ lib.maintainers.Anton-Latukha ];
+    mainProgram = "wmctrl";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/X11/wmutils-core/default.nix b/nixpkgs/pkgs/tools/X11/wmutils-core/default.nix
new file mode 100644
index 000000000000..5620dcb8420f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wmutils-core/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, libxcb, xcbutil, xcb-util-cursor }:
+
+stdenv.mkDerivation rec {
+  pname = "wmutils-core";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "wmutils";
+    repo = "core";
+    rev = "v${version}";
+    sha256 = "sha256-OKAvJovGu9rMxEe5g4kdL7Foj41kl3zUYIJa04jf0dI=";
+  };
+
+  buildInputs = [ libxcb xcbutil xcb-util-cursor ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Set of window manipulation tools";
+    homepage = "https://github.com/wmutils/core";
+    license = licenses.isc;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/wmutils-libwm/default.nix b/nixpkgs/pkgs/tools/X11/wmutils-libwm/default.nix
new file mode 100644
index 000000000000..6d2787a96cd3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wmutils-libwm/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, libxcb }:
+
+stdenv.mkDerivation rec {
+  pname = "wmutils-libwm";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "wmutils";
+    repo = "libwm";
+    rev = "v${version}";
+    sha256 = "1lpbqrilhffpzc0b7vnp08jr1wr96lndwc7y0ck8hlbzlvm662l0";
+  };
+
+  buildInputs = [ libxcb ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A small library for X window manipulation";
+    homepage = "https://github.com/wmutils/libwm";
+    license = licenses.isc;
+    maintainers = with maintainers; [ bhougland ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/wmutils-opt/default.nix b/nixpkgs/pkgs/tools/X11/wmutils-opt/default.nix
new file mode 100644
index 000000000000..0d847262ea58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wmutils-opt/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, libxcb }:
+
+stdenv.mkDerivation rec {
+  pname = "wmutils-opt";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "wmutils";
+    repo = "opt";
+    rev = "v${version}";
+    sha256 = "0gd05qsir1lnzfrbnfh08qwsryz7arwj20f886nqh41m87yqaljz";
+  };
+
+  buildInputs = [ libxcb ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Optional addons to wmutils";
+    homepage = "https://github.com/wmutils/opt";
+    license = licenses.isc;
+    maintainers = with maintainers; [ vifino ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/wpgtk/default.nix b/nixpkgs/pkgs/tools/X11/wpgtk/default.nix
new file mode 100644
index 000000000000..371642cbfa7e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wpgtk/default.nix
@@ -0,0 +1,55 @@
+{ lib, python3Packages, fetchFromGitHub, libxslt,
+  gobject-introspection, gtk3, wrapGAppsHook, gnome }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "wpgtk";
+  version = "6.5.9";
+
+  src = fetchFromGitHub {
+    owner = "deviantfero";
+    repo = "wpgtk";
+    rev = version;
+    sha256 = "sha256-NlJG9d078TW1jcnVrpBORIIwDUGIAGWZoDbXp9/qRr4=";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    wrapGAppsHook
+    gtk3
+    gnome.adwaita-icon-theme
+    libxslt
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+    pillow
+    pywal
+  ];
+
+  # The $HOME variable must be set to build the package. A "permission denied" error will occur otherwise
+  preBuild = ''
+      export HOME=$(pwd)
+  '';
+
+  # No test exist
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Template based wallpaper/colorscheme generator and manager";
+    longDescription = ''
+     In short, wpgtk is a colorscheme/wallpaper manager with a template system attached which lets you create templates from any textfile and will replace keywords on it on the fly, allowing for great styling and theming possibilities.
+
+     wpgtk uses pywal as its colorscheme generator, but builds upon it with a UI and other features, such as the abilty to mix and edit the colorschemes generated and save them with their respective wallpapers, having light and dark themes, hackable and fast GTK theme made specifically for wpgtk and custom keywords and values to replace in templates.
+
+     INFO: To work properly, this tool needs "programs.dconf.enable = true" on nixos or dconf installed. A reboot may be required after installing dconf.
+     '';
+    homepage = "https://github.com/deviantfero/wpgtk";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ melkor333 cafkafk ];
+    mainProgram = "wpg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/x11spice/default.nix b/nixpkgs/pkgs/tools/X11/x11spice/default.nix
new file mode 100644
index 000000000000..4facc365c1ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/x11spice/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitLab, autoreconfHook, pkg-config
+, xorg, gtk2, spice, spice-protocol
+}:
+
+stdenv.mkDerivation rec {
+  pname = "x11spice";
+  version = "2019-08-20";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "spice";
+    repo = "x11spice";
+    rev = "51d2a8ba3813469264959bb3ba2fc6fe08097be6";
+    sha256 = "0va5ix14vnqch59gq8wvrhw6q0w0n27sy70xx5kvfj2cl0h1xpg8";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [
+    xorg.libxcb xorg.xcbutil xorg.utilmacros
+    gtk2 spice spice-protocol
+  ];
+
+  NIX_LDFLAGS = "-lpthread";
+
+  meta = with lib; {
+    description = "Enable a running X11 desktop to be available via a Spice server";
+    homepage = "https://gitlab.freedesktop.org/spice/x11spice";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/x11vnc/default.nix b/nixpkgs/pkgs/tools/X11/x11vnc/default.nix
new file mode 100644
index 000000000000..8c48951b2d42
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/x11vnc/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch,
+  openssl, zlib, libjpeg, xorg, coreutils, libvncserver,
+  autoreconfHook, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "x11vnc";
+  version = "0.9.16";
+
+  src = fetchFromGitHub {
+    owner = "LibVNC";
+    repo = "x11vnc";
+    rev = version;
+    sha256 = "1g652mmi79pfq4p5p7spaswa164rpzjhc5rn2phy5pm71lm0vib1";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2020-29074.patch";
+      url = "https://github.com/LibVNC/x11vnc/commit/69eeb9f7baa14ca03b16c9de821f9876def7a36a.patch";
+      sha256 = "0hdhp32g2i5m0ihmaxkxhsn3d5f2qasadvwpgxify4xnzabmyb2d";
+    })
+
+    # Pull upstream fix for -fno-common toolchains:
+    #   https://github.com/LibVNC/x11vnc/pull/121
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/LibVNC/x11vnc/commit/a48b0b1cd887d7f3ae67f525d7d334bd2feffe60.patch";
+      sha256 = "046gjsmg0vm0m4y9ny17y2jayc4ba7vib2whw71l5x1hjp6pksjs";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs =
+    [ xorg.libXfixes xorg.xorgproto openssl xorg.libXdamage
+      zlib xorg.libX11 libjpeg
+      xorg.libXtst xorg.libXinerama xorg.libXrandr
+      xorg.libXext
+      xorg.libXi xorg.libXrender
+      libvncserver
+    ];
+
+  postPatch = ''
+    substituteInPlace src/unixpw.c \
+        --replace '"/bin/su"' '"/run/wrappers/bin/su"' \
+        --replace '"/bin/true"' '"${coreutils}/bin/true"'
+
+    sed -i -e '/#!\/bin\/sh/a"PATH=${xorg.xdpyinfo}\/bin:${xorg.xauth}\/bin:$PATH\\n"' -e 's|/bin/su|/run/wrappers/bin/su|g' src/ssltools.h
+
+    # Xdummy script is currently broken, so we avoid building it. This removes everything Xdummy-related from the affected Makefile
+    sed -i -e '/^\tXdummy.c\ \\$/,$d' -e 's/\tx11vnc_loop\ \\/\tx11vnc_loop/' misc/Makefile.am
+  '';
+
+  meta = with lib; {
+    description = "A VNC server connected to a real X11 screen";
+    homepage = "https://github.com/LibVNC/x11vnc/";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ OPNA2608 ];
+    mainProgram = "x11vnc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/x2vnc/default.nix b/nixpkgs/pkgs/tools/X11/x2vnc/default.nix
new file mode 100644
index 000000000000..8c9648e71d37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/x2vnc/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "x2vnc";
+  version = "1.7.2";
+
+  src = fetchurl {
+    url = "https://fredrik.hubbe.net/x2vnc/x2vnc-${version}.tar.gz";
+    sha256 = "00bh9j3m6snyd2fgnzhj5vlkj9ibh69gfny9bfzlxbnivb06s1yw";
+  };
+
+  buildInputs = with xorg; [
+      libX11 xorgproto libXext libXrandr
+    ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "http://fredrik.hubbe.net/x2vnc.html";
+    description = "A program to control a remote VNC server";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+    mainProgram = "x2vnc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/x2x/default.nix b/nixpkgs/pkgs/tools/X11/x2x/default.nix
new file mode 100644
index 000000000000..061f1d190318
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/x2x/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, libX11, libXtst, libXext, fetchFromGitHub, autoreconfHook, pkg-config, libXi }:
+
+stdenv.mkDerivation rec {
+  pname = "x2x";
+  version = "unstable-2023-04-30";
+
+  src = fetchFromGitHub {
+    owner = "dottedmag";
+    repo = pname;
+    rev = "53692798fa0e991e0dd67cdf8e8126158d543d08";
+    hash = "sha256-FUl2z/Yz9uZlUu79LHdsXZ6hAwSlqwFV35N+GYDNvlQ=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libX11 libXtst libXext libXi ];
+
+  meta = with lib; {
+    description = "Allows the keyboard, mouse on one X display to be used to control another X display";
+    homepage = "https://github.com/dottedmag/x2x";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    mainProgram = "x2x";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xannotate/default.nix b/nixpkgs/pkgs/tools/X11/xannotate/default.nix
new file mode 100644
index 000000000000..148bbcfe7af4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xannotate/default.nix
@@ -0,0 +1,33 @@
+{lib, stdenv, fetchFromBitbucket, fetchpatch, libX11}:
+stdenv.mkDerivation rec {
+  pname = "xannotate";
+  version = "20150301";
+
+  src = fetchFromBitbucket {
+    owner = "blais";
+    repo = pname;
+    rev = "e5591c2ec67ca39988f1fb2966e94f0f623f9aa7";
+    sha256 = "02jy19if0rnbxvs6b0l5mi9ifvdj2qmv0pv278v9kfs0kvir68ik";
+  };
+
+  patches = [
+    # Pull patch pending upstream inclusion for -gno-common tollchains:
+    #   https://github.com/blais/xannotate/pull/1
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/blais/xannotate/commit/ee637e2dee103d0e654865c2202ea1b3af2a20d6.patch";
+      sha256 = "1lw22d5qs1bwp53l332yl3yypfvwrbi750wp7yv90nfn3ia0xhni";
+    })
+  ];
+
+  buildInputs = [ libX11 ];
+
+  meta = {
+    description = "A tool to scribble over X windows";
+    license = lib.licenses.gpl2Plus ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+    homepage = "https://github.com/blais/xannotate";
+    mainProgram = "xannotate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xautomation/default.nix b/nixpkgs/pkgs/tools/X11/xautomation/default.nix
new file mode 100644
index 000000000000..a1fb88176325
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xautomation/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pkg-config, libpng, libX11, libXext, libXi, libXtst }:
+
+stdenv.mkDerivation rec {
+  pname = "xautomation";
+  version = "1.09";
+  src = fetchurl {
+    url = "https://www.hoopajoo.net/static/projects/xautomation-${version}.tar.gz";
+    sha256 = "03azv5wpg65h40ip2kk1kdh58vix4vy1r9bihgsq59jx2rhjr3zf";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libpng libX11 libXext libXi libXtst ];
+
+  meta = {
+    homepage = "https://www.hoopajoo.net/projects/xautomation.html";
+    description = "Control X from the command line for scripts, and do \"visual scraping\" to find things on the screen";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ vaibhavsagar ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xbanish/default.nix b/nixpkgs/pkgs/tools/X11/xbanish/default.nix
new file mode 100644
index 000000000000..9a8780324b84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbanish/default.nix
@@ -0,0 +1,43 @@
+{lib, stdenv, fetchFromGitHub, libX11, libXi, libXt, libXfixes, libXext}:
+
+stdenv.mkDerivation rec {
+  version = "1.8";
+  pname = "xbanish";
+
+  buildInputs = [
+    libX11 libXi libXt libXfixes libXext
+  ];
+
+  src = fetchFromGitHub {
+    owner = "jcs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jwCoJ2shFGuJHhmXmlw/paFpMl5ARD6e5zDnDZHlsoo=";
+  };
+
+  makeFlags=[ "PREFIX=$(out)" ];
+
+  preInstall = ''
+    mkdir -p $out/bin $out/man/man1
+  '';
+
+  meta = {
+    description = "Hides mouse pointer while not in use";
+    longDescription = ''
+      xbanish hides the mouse cursor when you start typing, and shows it again when
+      the mouse cursor moves or a mouse button is pressed.  This is similar to
+      xterm's pointerMode setting, but xbanish works globally in the X11 session.
+
+      unclutter's -keystroke mode is supposed to do this, but it's broken[0].  I
+      looked into fixing it, but the unclutter source code is terrible, so I wrote
+      xbanish.
+
+      The name comes from ratpoison's "banish" command that sends the cursor to the
+      corner of the screen.
+    '';
+    license = lib.licenses.bsd3;
+    maintainers = [lib.maintainers.choochootrain];
+    platforms = lib.platforms.linux;
+    mainProgram = "xbanish";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xbindkeys-config/default.nix b/nixpkgs/pkgs/tools/X11/xbindkeys-config/default.nix
new file mode 100644
index 000000000000..8a5c07ef96ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbindkeys-config/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, gtk, pkg-config, procps, makeWrapper, ... }:
+
+stdenv.mkDerivation rec {
+  pname = "xbindkeys-config";
+  version = "0.1.3";
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10.
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ gtk ];
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/x/xbindkeys-config/xbindkeys-config_${version}.orig.tar.gz";
+    sha256 = "1rs3li2hyig6cdzvgqlbz0vw6x7rmgr59qd6m0cvrai8xhqqykda";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = "https://packages.debian.org/source/xbindkeys-config";
+    description = "Graphical interface for configuring xbindkeys";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [benley];
+    platforms = with lib.platforms; linux;
+    mainProgram = "xbindkeys-config";
+  };
+
+  patches = [ ./xbindkeys-config-patch1.patch ];
+
+  # killall is dangerous on non-gnu platforms. Use pkill instead.
+  postPatch = ''
+    substituteInPlace middle.c --replace "killall" "pkill -x"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    gzip -c ${./xbindkeys-config.1} > $out/share/man/man1/xbindkeys-config.1.gz
+    cp xbindkeys_config $out/bin/xbindkeys-config
+    wrapProgram $out/bin/xbindkeys-config --prefix PATH ":" "${procps}/bin"
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config-patch1.patch b/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config-patch1.patch
new file mode 100644
index 000000000000..d4620b5d9071
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config-patch1.patch
@@ -0,0 +1,108 @@
+---
+ Makefile           |  6 +++---
+ menu.c             | 11 ++++++++---
+ middle.c           |  9 +++++++--
+ xbindkeys_config.c |  3 ++-
+ 4 files changed, 20 insertions(+), 9 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 602875c..28e46cd 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,9 +1,9 @@
+ # makefile crée par Laurent VUIBERT
+ 
+-CC=	gcc -O3 -Wall
++CC=	gcc $(CFLAGS)
+ STD=	_GNU_SOURCE
+-GTK=	`gtk-config  --cflags --libs`
+-GTK2=	`gtk-config  --cflags`
++GTK=	`pkg-config  --cflags --libs gtk+-2.0`
++GTK2=	`pkg-config  --cflags gtk+-2.0`
+ OBJS=	xbindkeys_config.o menu.o middle.o speedc.o
+ NOM=    xbindkeys_config
+ 
+diff --git a/menu.c b/menu.c
+index ed3e7ec..f11526d 100644
+--- a/menu.c
++++ b/menu.c
+@@ -283,6 +283,8 @@ void menu_manual (GtkMenuItem *menuitem, gpointer user_data)
+   GtkWidget *window;
+   GtkWidget *text;
+   GtkWidget *vbox;
++  GtkTextBuffer *textbuffer;
++  GtkTextIter iter;
+   
+   window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
+   gtk_window_set_title(GTK_WINDOW(window),
+@@ -293,10 +295,13 @@ void menu_manual (GtkMenuItem *menuitem, gpointer user_data)
+   text = gtk_label_new("\nManual\n");
+   gtk_box_pack_start(GTK_BOX(vbox), text, FALSE, FALSE, 0);
+   
+-  text = gtk_text_new(NULL,NULL);
++/* BDD - FIXME */
++/*  text = gtk_text_new(NULL,NULL); */
++  text = gtk_text_view_new();
++  textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
++  gtk_text_buffer_get_iter_at_offset (textbuffer, &iter, 0);
+   
+-  
+-  gtk_text_insert (GTK_TEXT(text), NULL, NULL, NULL,
++  gtk_text_buffer_insert (textbuffer, &iter, 
+ 		   MANUAL_TEXT, sizeof(MANUAL_TEXT)-1);
+   gtk_box_pack_start(GTK_BOX(vbox), text, TRUE, TRUE, 0);
+   gtk_widget_set_usize(text,300,250);
+diff --git a/middle.c b/middle.c
+index daa61aa..605ab10 100644
+--- a/middle.c
++++ b/middle.c
+@@ -551,6 +551,8 @@ void view_generated_file()
+   GtkWidget *window;
+   GtkWidget *text;
+   GtkWidget *src;
++  GtkTextBuffer *textbuffer;
++  GtkTextIter iter;
+   char line  [1024];
+ 
+   unlink(TEMP_FILE); 
+@@ -561,11 +563,13 @@ void view_generated_file()
+     gtk_window_set_title(GTK_WINDOW(window), "Generated File");
+     src = gtk_scrolled_window_new ( NULL, NULL );
+     gtk_widget_set_usize(src,500,400);
+-    text = gtk_text_new (NULL, NULL);
++    text = gtk_text_view_new ();
++    textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
++    gtk_text_buffer_get_iter_at_offset (textbuffer, &iter, 0);
+     gtk_container_add (GTK_CONTAINER(src),  text);
+ 
+     while (fgets (line, sizeof(line), f))
+-      gtk_text_insert (GTK_TEXT(text), NULL, NULL, NULL,
++      gtk_text_buffer_insert (textbuffer, &iter,
+ 		       line, strlen(line));
+ 
+     gtk_container_add(GTK_CONTAINER(window),src);
+@@ -610,6 +614,7 @@ void  save_file(char file_out[])
+   fprintf(f, "# m:xxx + c:xxx \n");
+   fprintf(f, "# Shift+... \n\n\n\n\n");
+ 
++
+   if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Flag_NumLock)))
+     fprintf(f,"keystate_numlock = enable\n");
+   else 
+diff --git a/xbindkeys_config.c b/xbindkeys_config.c
+index 75bad30..3c02a2b 100644
+--- a/xbindkeys_config.c
++++ b/xbindkeys_config.c
+@@ -95,7 +95,8 @@ int main (int argc, char *argv[])
+      accel_group = gtk_accel_group_new();
+      menu=xbindkeys_config_menu(accel_group);
+      gtk_box_pack_start(GTK_BOX(vbox),menu,FALSE,FALSE,0);
+-     gtk_accel_group_attach(accel_group, GTK_OBJECT(window));
++/* BDD - FIXME - Don't need this? */
++/*     gtk_accel_group_attach(accel_group, GTK_OBJECT(window)); */
+      
+      middle= xbindkeys_config_middle();
+      gtk_box_pack_start(GTK_BOX(vbox),middle,TRUE,TRUE,0);
+-- 
+2.1.3
+
diff --git a/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config.1 b/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config.1
new file mode 100644
index 000000000000..e3f8de1a8046
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config.1
@@ -0,0 +1,21 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.27.
+.TH XBINDKEYS_CONFIG "1" "April 2002" "xbindkeys-config" "User Commands"
+.SH NAME
+xbindkeys-config \- GTK+ configuration tool for xbindkeys
+.SH "SYNOPSIS"
+xbindkeys-config 
+[\-\-file|\-f file]
+[\-\-help|\-h]
+[\-\-show|\-s]
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+This Help
+.TP
+\fB\-f\fR, \fB\-\-file\fR
+Use an alternative rc file
+.TP
+\fB\-s\fR, \fB\-\-show\fR
+show only the rc file
+.SH AUTHOR
+This manual page was written by Joerg Jaspert <joerg@debian.org>,
+for the Debian GNU/Linux system (but may be used by others).
diff --git a/nixpkgs/pkgs/tools/X11/xbindkeys/default.nix b/nixpkgs/pkgs/tools/X11/xbindkeys/default.nix
new file mode 100644
index 000000000000..5b2f5c8a1968
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbindkeys/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, libX11, guile }:
+
+stdenv.mkDerivation rec {
+  pname = "xbindkeys";
+  version = "1.8.7";
+  src = fetchurl {
+    url = "https://www.nongnu.org/xbindkeys/xbindkeys-${version}.tar.gz";
+    sha256 = "1wl2vc5alisiwyk8m07y1ryq8w3ll9ym83j27g4apm4ixjl8d6x2";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libX11 guile ];
+
+  meta = {
+    homepage = "https://www.nongnu.org/xbindkeys/xbindkeys.html";
+    description = "Launch shell commands with your keyboard or your mouse under X Window";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ viric ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xborders/default.nix b/nixpkgs/pkgs/tools/X11/xborders/default.nix
new file mode 100644
index 000000000000..379f976acf45
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xborders/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, libwnck
+, gtk3
+, libnotify
+, wrapGAppsHook
+, gobject-introspection
+, substituteAll
+}:
+
+python3Packages.buildPythonPackage rec {
+  pname = "xborders";
+  version = "3.4"; # in version.txt
+
+  src = fetchFromGitHub {
+    owner = "deter0";
+    repo = "xborder";
+    rev = "e74ae532b9555c59d195537934fa355b3fea73c5";
+    hash = "sha256-UKsseNkXest6npPqJKvKL0iBWeK+S7zynrDlyXIOmF4=";
+  };
+
+  buildInputs = [
+    libwnck
+    gtk3
+    libnotify
+  ];
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pycairo
+    requests
+    pygobject3
+  ];
+
+  postPatch = let
+    setup = substituteAll {
+      src = ./setup.py;
+      desc = meta.description; # "description" is reserved
+      inherit pname version;
+    };
+  in ''
+    ln -s ${setup} setup.py
+  '';
+
+  meta = with lib; {
+    description = "Active window border replacement for window managers";
+    homepage = "https://github.com/deter0/xborder";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ elnudev ];
+    platforms = platforms.linux;
+    mainProgram = "xborders";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xborders/setup.py b/nixpkgs/pkgs/tools/X11/xborders/setup.py
new file mode 100644
index 000000000000..a002625fa064
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xborders/setup.py
@@ -0,0 +1,12 @@
+from setuptools import setup
+
+setup(
+    name='@pname@',
+    version='@version@',
+    author='deter0',
+    description='@desc@',
+    install_requires=['pycairo', 'requests', 'PyGObject'],
+    scripts=[
+        'xborders',
+    ],
+)
diff --git a/nixpkgs/pkgs/tools/X11/xbrightness/default.nix b/nixpkgs/pkgs/tools/X11/xbrightness/default.nix
new file mode 100644
index 000000000000..c022371c01d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbrightness/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, imake, gccmakedep
+, libX11, libXaw, libXext, libXmu, libXpm, libXxf86vm  }:
+
+stdenv.mkDerivation rec {
+  pname = "xbrightness";
+  version = "0.3-mika-akk";
+
+  src = fetchurl {
+    url = "https://shallowsky.com/software/xbrightness/xbrightness-${version}.tar.gz";
+    sha256 = "2564dbd393544657cdabe4cbf535d9cfb9abe8edddb1b8cdb1ed4d12f358626e";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ libX11 libXaw libXext libXmu libXpm libXxf86vm ];
+
+  makeFlags = [ "BINDIR=$(out)/bin" "MANPATH=$(out)/share/man" ];
+  installTargets = [ "install" "install.man" ];
+
+  meta = {
+    description = "X11 brigthness and gamma software control";
+    homepage = "http://shallowsky.com/software";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
+    mainProgram = "xbrightness";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xcalib/default.nix b/nixpkgs/pkgs/tools/X11/xcalib/default.nix
new file mode 100644
index 000000000000..4960aff0f7b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xcalib/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, libX11, libXxf86vm, libXext, libXrandr }:
+
+stdenv.mkDerivation rec {
+  pname = "xcalib";
+  version = "0.10";
+
+  src = fetchFromGitHub {
+    owner = "OpenICC";
+    repo = "xcalib";
+    rev = version;
+    sha256 = "05fzdjmhiafgi2jf0k41i3nm0837a78sb6yv59cwc23nla8g0bhr";
+  };
+
+  buildInputs = [ libX11 libXxf86vm libXext libXrandr ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp xcalib $out/bin/
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "A tiny monitor calibration loader for X and MS-Windows";
+    license = licenses.gpl2;
+    maintainers = [];
+    platforms = platforms.linux;
+    mainProgram = "xcalib";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xcape/default.nix b/nixpkgs/pkgs/tools/X11/xcape/default.nix
new file mode 100644
index 000000000000..c62e29cedc15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xcape/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, libX11, libXtst, xorgproto,
+libXi }:
+
+stdenv.mkDerivation rec {
+  pname = "xcape";
+  version = "unstable-2018-03-01";
+
+  src = fetchFromGitHub {
+    owner = "alols";
+    repo = pname;
+    rev = "a34d6bae27bbd55506852f5ed3c27045a3c0bd9e";
+    sha256 = "04grs4w9kpfzz25mqw82zdiy51g0w355gpn5b170p7ha5972ykc8";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libX11 libXtst xorgproto libXi ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "MANDIR=/share/man/man1"
+  ];
+
+  postInstall = "install -Dm444 --target-directory $out/share/doc README.md";
+
+  meta = with lib; {
+    description = "Utility to configure modifier keys to act as other keys";
+    longDescription = ''
+      xcape allows you to use a modifier key as another key when
+      pressed and released on its own.  Note that it is slightly
+      slower than pressing the original key, because the pressed event
+      does not occur until the key is released.  The default behaviour
+      is to generate the Escape key when Left Control is pressed and
+      released on its own.
+    '';
+    homepage = "https://github.com/alols/xcape";
+    license = licenses.gpl3 ;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    mainProgram = "xcape";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xchainkeys/default.nix b/nixpkgs/pkgs/tools/X11/xchainkeys/default.nix
new file mode 100644
index 000000000000..7a251b30a47b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xchainkeys/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xchainkeys";
+  version = "0.11";
+
+  src = fetchurl {
+    url = "http://henning-bekel.de/download/xchainkeys/xchainkeys-${version}.tar.gz";
+    sha256 = "1rpqs7h5krral08vqxwb0imy33z17v5llvrg5hy8hkl2ap7ya0mn";
+  };
+
+  buildInputs = [ libX11 ];
+
+  meta = {
+    homepage = "http://henning-bekel.de/xchainkeys/";
+    description = "A standalone X11 program to create chained key bindings";
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
+    mainProgram = "xchainkeys";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xcwd/default.nix b/nixpkgs/pkgs/tools/X11/xcwd/default.nix
new file mode 100644
index 000000000000..897c4af95edc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xcwd/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, libX11 }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xcwd";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner   = "schischi";
+    repo    = "xcwd";
+    rev     = "v${finalAttrs.version}";
+    hash    = "sha256-M6/1H6hI50Cvx40RTKzZXoUui0FGZfwe1IwdaxMJIQo=";
+  };
+
+  buildInputs = [ libX11 ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = {
+    description = ''
+      A simple tool which prints the current working directory of the currently focused window
+    '';
+    homepage = "https://github.com/schischi/xcwd";
+    license = lib.licenses.bsd3;
+    mainProgram = "xcwd";
+    maintainers = [ lib.maintainers.grburst ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/X11/xdg-user-dirs/default.nix b/nixpkgs/pkgs/tools/X11/xdg-user-dirs/default.nix
new file mode 100644
index 000000000000..f988f3cfe975
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xdg-user-dirs/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, libxslt, docbook_xsl, gettext, libiconv, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "xdg-user-dirs";
+  version = "0.18";
+
+  src = fetchurl {
+    url = "https://user-dirs.freedesktop.org/releases/xdg-user-dirs-${version}.tar.gz";
+    sha256 = "sha256-7G8G10lc26N6cyA5+bXhV4vLKWV2/eDaQO2y9SIg3zw=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  nativeBuildInputs = [ makeWrapper libxslt docbook_xsl ] ++ lib.optionals stdenv.isDarwin [ gettext ];
+
+  preFixup = ''
+    # fallback values need to be last
+    wrapProgram "$out/bin/xdg-user-dirs-update" \
+      --suffix XDG_CONFIG_DIRS : "$out/etc/xdg"
+  '';
+
+  meta = with lib; {
+    homepage = "http://freedesktop.org/wiki/Software/xdg-user-dirs";
+    description = "A tool to help manage well known user directories like the desktop folder and the music folder";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xdg-utils/allow-forcing-portal-use.patch b/nixpkgs/pkgs/tools/X11/xdg-utils/allow-forcing-portal-use.patch
new file mode 100644
index 000000000000..0a011c05dee9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xdg-utils/allow-forcing-portal-use.patch
@@ -0,0 +1,29 @@
+From 835eed6a2b975fba40c3ac18b4cf5429ba9d2836 Mon Sep 17 00:00:00 2001
+From: Luna Nova <git@lunnova.dev>
+Date: Wed, 7 Sep 2022 08:45:56 -0700
+Subject: [PATCH] xdg-open: add $XDG_OPEN_USE_PORTAL env var
+
+When set, the same mechanism that is used in a flatpak is used,
+a dbus call to the portal. This is useful for distros with non-flatpak
+wrapper or sandboxing features which require the same treatment, eg NixOS.
+
+See https://github.com/NixOS/nixpkgs/issues/160923
+---
+ scripts/xdg-open.in | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/scripts/xdg-open.in b/scripts/xdg-open.in
+index 8de839a..80d8fb3 100644
+--- a/scripts/xdg-open.in
++++ b/scripts/xdg-open.in
+@@ -508,6 +508,10 @@ if [ x"$DE" = x"" ]; then
+     DE=generic
+ fi
+ 
++if [ -n "$NIXOS_XDG_OPEN_USE_PORTAL"  ]; then
++    DE=flatpak
++fi
++
+ DEBUG 2 "Selected DE $DE"
+ 
+ # sanitize BROWSER (avoid calling ourselves in particular)
diff --git a/nixpkgs/pkgs/tools/X11/xdg-utils/default.nix b/nixpkgs/pkgs/tools/X11/xdg-utils/default.nix
new file mode 100644
index 000000000000..3db16f067148
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xdg-utils/default.nix
@@ -0,0 +1,268 @@
+{ lib, stdenv, fetchFromGitLab, fetchFromGitHub, fetchpatch, writeText
+# docs deps
+, libxslt, docbook_xml_dtd_412, docbook_xml_dtd_43, docbook_xsl, xmlto
+# runtime deps
+, resholve, bash, coreutils, dbus, file, gawk, glib, gnugrep, gnused, jq, lockfileProgs, nettools, procmail, procps, xdg-user-dirs
+, perl, perlPackages
+, mimiSupport ? false
+, withXdgOpenUsePortalPatch ? true }:
+
+let
+  # A much better xdg-open
+  mimisrc = fetchFromGitHub {
+    owner = "march-linux";
+    repo = "mimi";
+    rev = "8e0070f17bcd3612ee83cb84e663e7c7fabcca3d";
+    sha256 = "15gw2nyrqmdsdin8gzxihpn77grhk9l97jp7s7pr7sl4n9ya2rpj";
+  };
+
+  # Required by the common desktop detection code
+  commonDeps = [ dbus coreutils gnugrep gnused ];
+  # These are all faked because the current desktop is detected
+  # based on their presence, so we want them to be missing by default.
+  commonFakes = [
+    "explorer.exe"
+    "gnome-default-applications-properties"
+    "kde-config"
+    "xprop"
+  ];
+
+  # This is still required to work around the eval trickery some scripts do
+  commonPrologue = "${writeText "xdg-utils-prologue" ''
+    export PATH=$PATH:${coreutils}/bin
+  ''}";
+
+  solutions = [
+    {
+      scripts = [ "bin/xdg-desktop-icon" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = commonDeps ++ [ xdg-user-dirs ];
+      execer = [
+        "cannot:${xdg-user-dirs}/bin/xdg-user-dir"
+      ];
+      # These are desktop-specific, so we don't want xdg-utils to be able to
+      # call them when in a different setup.
+      fake.external = commonFakes ++ [
+        "gconftool-2"   # GNOME2
+      ];
+      keep."$KDE_SESSION_VERSION" = true;
+      prologue = commonPrologue;
+    }
+
+    {
+      scripts = [ "bin/xdg-desktop-menu" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = commonDeps ++ [ gawk ];
+      fake.external = commonFakes;
+      keep."$KDE_SESSION_VERSION" = true;
+      prologue = commonPrologue;
+    }
+
+    {
+      scripts = [ "bin/xdg-email" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = commonDeps ++ [ gawk glib.bin "${placeholder "out"}/bin" ];
+      execer = [
+        "cannot:${placeholder "out"}/bin/xdg-mime"
+        "cannot:${placeholder "out"}/bin/xdg-open"
+      ];
+      # These are desktop-specific, so we don't want xdg-utils to be able to
+      # call them when in a different setup.
+      fake.external = commonFakes ++ [
+        "exo-open"           # XFCE
+        "gconftool-2"        # GNOME
+        "gio"                # GNOME (new)
+        "gnome-open"         # GNOME (very old)
+        "gvfs-open"          # GNOME (old)
+        "qtxdg-mat"          # LXQT
+        "xdg-email-hook.sh"  # user-defined hook that may be available ambiently
+      ];
+      fix."/bin/echo" = true;
+      keep = {
+        "$command" = true;
+        "$kreadconfig" = true;
+        "$THUNDERBIRD" = true;
+        "$utf8" = true;
+      };
+    }
+
+    {
+      scripts = [ "bin/xdg-icon-resource" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = commonDeps;
+      fake.external = commonFakes;
+      keep."$KDE_SESSION_VERSION" = true;
+      prologue = commonPrologue;
+    }
+
+    {
+      scripts = [ "bin/xdg-mime" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = commonDeps ++ [ file gawk ];
+      # These are desktop-specific, so we don't want xdg-utils to be able to
+      # call them when in a different setup.
+      fake.external = commonFakes ++ [
+        "gio"                # GNOME (new)
+        "gnomevfs-info"      # GNOME (very old)
+        "gvfs-info"          # GNOME (old)
+        "kde4-config"        # Plasma 4
+        "kfile"              # KDE 3
+        "kmimetypefinder"    # Plasma (generic)
+        "kmimetypefinder5"   # Plasma 5
+        "ktraderclient"      # KDE 3
+        "ktradertest"        # KDE 3
+        "mimetype"           # alternative tool for file, pulls in perl, avoid
+        "qtpaths"            # Plasma
+        "qtxdg-mat"          # LXQT
+      ];
+      fix."/usr/bin/file" = true;
+      keep = {
+        "$KDE_SESSION_VERSION" = true;
+        "$KTRADER" = true;
+      };
+      prologue = commonPrologue;
+    }
+
+    {
+      scripts = [ "bin/xdg-open" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = commonDeps ++ [ nettools glib.bin "${placeholder "out"}/bin" ];
+      execer = [
+        "cannot:${placeholder "out"}/bin/xdg-mime"
+      ];
+      # These are desktop-specific, so we don't want xdg-utils to be able to
+      # call them when in a different setup.
+      fake.external = commonFakes ++ [
+        "cygstart"            # Cygwin
+        "dde-open"            # Deepin
+        "enlightenment_open"  # Enlightenment
+        "exo-open"            # XFCE
+        "gio"                 # GNOME (new)
+        "gnome-open"          # GNOME (very old)
+        "gvfs-open"           # GNOME (old)
+        "kde-open"            # Plasma
+        "kfmclient"           # KDE3
+        "mate-open"           # MATE
+        "mimeopen"            # alternative tool for file, pulls in perl, avoid
+        "open"                # macOS
+        "pcmanfm"             # LXDE
+        "qtxdg-mat"           # LXQT
+        "run-mailcap"         # generic
+        "rundll32.exe"        # WSL
+        "wslpath"             # WSL
+      ];
+      fix."$printf" = [ "printf" ];
+      keep = {
+        "env:$command" = true;
+        "$browser" = true;
+        "$KDE_SESSION_VERSION" = true;
+      };
+    }
+
+    {
+      scripts = [ "bin/xdg-screensaver" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = commonDeps ++ [ lockfileProgs nettools perl procmail procps ];
+      # These are desktop-specific, so we don't want xdg-utils to be able to
+      # call them when in a different setup.
+      fake.external = commonFakes ++ [
+        "dcop"                      # KDE3
+        "mate-screensaver-command"  # MATE
+        "xautolock"                 # Xautolock
+        "xscreensaver-command"      # Xscreensaver
+        "xset"                      # generic-ish X
+      ];
+      fix."$lockfile_command" = [ "lockfile" ];
+      keep = {
+        "$MV" = true;
+        "$XPROP" = true;
+      };
+      prologue = "${writeText "xdg-screensaver-prologue" ''
+        export PERL5LIB=${with perlPackages; makePerlPath [ NetDBus XMLTwig XMLParser X11Protocol ]}
+        export PATH=$PATH:${coreutils}/bin
+      ''}";
+    }
+
+    {
+      scripts = [ "bin/xdg-settings" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = commonDeps ++ [ jq "${placeholder "out"}/bin" ];
+      execer = [
+        "cannot:${placeholder "out"}/bin/xdg-mime"
+      ];
+      # These are desktop-specific, so we don't want xdg-utils to be able to
+      # call them when in a different setup.
+      fake.external = commonFakes ++ [
+        "gconftool-2"    # GNOME
+        "kreadconfig"    # Plasma (generic)
+        "kreadconfig5"   # Plasma 5
+        "kreadconfig6"   # Plasma 6
+        "ktradertest"    # KDE3
+        "kwriteconfig"   # Plasma (generic)
+        "kwriteconfig5"  # Plasma 5
+        "kwriteconfig6"  # Plasma 6
+        "qtxdg-mat"      # LXQT
+      ];
+      keep = {
+        "$KDE_SESSION_VERSION" = true;
+        # get_browser_$handler
+        "$handler" = true;
+      };
+    }
+  ];
+in
+
+stdenv.mkDerivation rec {
+  pname = "xdg-utils";
+  version = "1.2.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "xdg";
+    repo = "xdg-utils";
+    rev = "v${version}";
+    hash = "sha256-rjNIO4B9jHsBmPaugWTMqTGNpjiw0MTEmf9/ds2Mud4=";
+  };
+
+  patches = [
+    # Backport typo fix
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/xdg/xdg-utils/-/commit/af2fe0d1dcbcd982d84ddf2bbd174afe90976ed9.patch";
+      hash = "sha256-HhQk06wWkyWjSxjXet+sADKf1irswKxDA8WuOknZKRs=";
+    })
+    # Backport docs rendering fixes
+    # See: https://gitlab.freedesktop.org/xdg/xdg-utils/-/merge_requests/106
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/xdg/xdg-utils/-/commit/403a720ad18920030418a7c3d1f2caba9ce3892d.patch";
+      hash = "sha256-XxFUeyXENHCy+wplIJ5OzoU5oyA4v1bz/9qMXp1ZwsE=";
+    })
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/xdg/xdg-utils/-/commit/a137f2ba87620402aca21b14fb1d79517782dd29.patch";
+      hash = "sha256-XFUAWn4uOyzgLdvupBxsO7wm6VDSzYj1SGZEM+9ouec=";
+    })
+  ] ++ lib.optionals withXdgOpenUsePortalPatch [
+    # Allow forcing the use of XDG portals using NIXOS_XDG_OPEN_USE_PORTAL environment variable.
+    # Upstream PR: https://github.com/freedesktop/xdg-utils/pull/12
+    ./allow-forcing-portal-use.patch
+  ];
+
+  # just needed when built from git
+  nativeBuildInputs = [ libxslt docbook_xml_dtd_412 docbook_xml_dtd_43 docbook_xsl xmlto ];
+
+  # explicitly provide a runtime shell so patchShebangs is consistent across build platforms
+  buildInputs = [ bash ];
+
+  postInstall = lib.optionalString mimiSupport ''
+    cp ${mimisrc}/xdg-open $out/bin/xdg-open
+  '';
+
+  preFixup = lib.concatStringsSep "\n" (map (resholve.phraseSolution "xdg-utils-resholved") solutions);
+
+  meta = with lib; {
+    homepage = "https://www.freedesktop.org/wiki/Software/xdg-utils/";
+    description = "A set of command line tools that assist applications with a variety of desktop integration tasks";
+    license = if mimiSupport then licenses.gpl2 else licenses.mit;
+    maintainers = [ maintainers.eelco ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xdotool/default.nix b/nixpkgs/pkgs/tools/X11/xdotool/default.nix
new file mode 100644
index 000000000000..bcb48ac44fac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xdotool/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, libX11, perl, libXtst, xorgproto, libXi, libXinerama, libxkbcommon, libXext }:
+
+stdenv.mkDerivation rec {
+  pname = "xdotool";
+  version = "3.20211022.1";
+
+  src = fetchFromGitHub {
+    owner = "jordansissel";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XFiaiHHtUSNFw+xhUR29+2RUHOa+Eyj1HHfjCUjwd9k=";
+  };
+
+  nativeBuildInputs = [ pkg-config perl ];
+  buildInputs = [ libX11 libXtst xorgproto libXi libXinerama libxkbcommon libXext ];
+
+  preBuild = ''
+    mkdir -p $out/lib
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    homepage = "https://www.semicomplete.com/projects/xdotool/";
+    description = "Fake keyboard/mouse input, window management, and more";
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+    mainProgram = "xdotool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xdragon/default.nix b/nixpkgs/pkgs/tools/X11/xdragon/default.nix
new file mode 100644
index 000000000000..7061a8f0a1cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xdragon/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "xdragon";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "mwh";
+    repo = "dragon";
+    rev = "v${version}";
+    sha256 = "sha256-wqG6idlVvdN+sPwYgWu3UL0la5ssvymZibiak3KeV7M=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk3 ];
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+  postInstall = ''
+    ln -s $out/bin/dragon $out/bin/xdragon
+  '';
+
+  meta = with lib; {
+    description = "Simple drag-and-drop source/sink for X (called dragon in upstream)";
+    homepage = "https://github.com/mwh/dragon";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xgeometry-select/default.nix b/nixpkgs/pkgs/tools/X11/xgeometry-select/default.nix
new file mode 100644
index 000000000000..005bf302cc34
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xgeometry-select/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xgeometry-select";
+  version  = "0.1";
+
+  src = fetchurl {
+    url    = "https://gist.githubusercontent.com/obadz/7e008b1f803c4cdcfaf7321c78bcbe92/raw/7e7361e71ff0f74655ee92bd6d2c042f8586f2ae/xgeometry-select.c";
+    sha256 = "0s7kirgh5iz91m3qy8xiq0j4gljy8zrcnylf4szl5h0lrsaqj7ya";
+  };
+
+  dontUnpack = true;
+
+  buildInputs = [ libX11 ];
+
+  buildPhase = ''
+    gcc -Wall -lX11 ${src} -o xgeometry-select
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv -v xgeometry-select $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Select a region with mouse and prints geometry information (x/y/w/h)";
+    homepage    = "https://bbs.archlinux.org/viewtopic.php?pid=660837";
+    maintainers = with maintainers; [ obadz ];
+    platforms   = platforms.linux;
+    mainProgram = "xgeometry-select";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xidlehook/default.nix b/nixpkgs/pkgs/tools/X11/xidlehook/default.nix
new file mode 100644
index 000000000000..c23acbedafdf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xidlehook/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitLab
+, python3
+, xorg
+, libpulseaudio
+, pkg-config
+, patchelf
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xidlehook";
+  version = "0.10.0";
+
+  doCheck = false;
+
+  src = fetchFromGitLab {
+    owner = "jD91mZM2";
+    repo = "xidlehook";
+    rev = version;
+
+    sha256 = "1pl7f8fhxfcy0c6c08vkagp0x1ak96vc5wgamigrk1nkd6l371lb";
+  };
+
+  cargoSha256 = "1y7m61j07gvqfqz97mda39nc602sv7a826c06m8l22i7z380xfms";
+
+  buildInputs = [ xorg.libX11 xorg.libXScrnSaver libpulseaudio ] ++ lib.optional stdenv.isDarwin Security;
+  nativeBuildInputs = [ pkg-config patchelf python3 ];
+
+  buildNoDefaultFeatures = !stdenv.isLinux;
+  buildFeatures = lib.optional (!stdenv.isLinux) "pulse";
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    RPATH="$(patchelf --print-rpath $out/bin/xidlehook)"
+    patchelf --set-rpath "$RPATH:${libpulseaudio}/lib" $out/bin/xidlehook
+  '';
+
+  meta = with lib; {
+    description = "xautolock rewrite in Rust, with a few extra features";
+    homepage = "https://github.com/jD91mZM2/xidlehook";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    badPlatforms = platforms.darwin;
+    mainProgram = "xidlehook";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xinput_calibrator/default.nix b/nixpkgs/pkgs/tools/X11/xinput_calibrator/default.nix
new file mode 100644
index 000000000000..d8afb3e4a896
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xinput_calibrator/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, libXi, xorgproto, autoconf, automake, libtool, m4, pkg-config, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "xinput_calibrator";
+  version = "0.7.5";
+
+  src = fetchFromGitHub {
+    owner = "tias";
+    repo = "xinput_calibrator";
+    rev = "v${version}";
+    sha256 = "5ZkNw+CKNUcPt1PY5PLzB/OT2wcf5n3UcaQlmMcwRVE=";
+  };
+
+  preConfigure = "./autogen.sh --with-gui=X11";
+
+  nativeBuildInputs = [ pkg-config autoconf automake ];
+  buildInputs = [ xorgproto libXi libtool m4 xorg.libX11 xorg.libXext ];
+
+  meta = {
+    homepage = "https://github.com/tias/xinput_calibrator";
+    description = "A generic touchscreen calibration program for X.Org";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.flosse ];
+    platforms = lib.platforms.linux;
+    mainProgram = "xinput_calibrator";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xkb-switch-i3/default.nix b/nixpkgs/pkgs/tools/X11/xkb-switch-i3/default.nix
new file mode 100644
index 000000000000..975eeb986614
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkb-switch-i3/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, cmake
+, fetchFromGitHub
+, i3
+, jsoncpp
+, libsigcxx
+, libX11
+, libxkbfile
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xkb-switch-i3";
+  version = "1.8.5";
+
+  src = fetchFromGitHub {
+    owner = "Zebradil";
+    repo = "xkb-switch-i3";
+    rev = version;
+    sha256 = "sha256-oW1oXxYqaLTnVQMBEOFPdzS8EnpoPc68kbGxGXaWUB8=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ i3 jsoncpp libsigcxx libX11 libxkbfile ];
+
+  meta = with lib; {
+    description = "Switch your X keyboard layouts from the command line(i3 edition)";
+    homepage = "https://github.com/Zebradil/xkb-switch-i3";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ewok ];
+    platforms = platforms.linux;
+    mainProgram = "xkb-switch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xkb-switch/default.nix b/nixpkgs/pkgs/tools/X11/xkb-switch/default.nix
new file mode 100644
index 000000000000..7db592532234
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkb-switch/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libX11, libxkbfile }:
+
+stdenv.mkDerivation rec {
+  pname = "xkb-switch";
+  version = "1.8.5";
+
+  src = fetchFromGitHub {
+    owner = "ierton";
+    repo = "xkb-switch";
+    rev = version;
+    sha256 = "sha256-DZAIL6+D+Hgs+fkJwRaQb9BHrEjAkxiqhOZyrR+Mpuk=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libX11 libxkbfile ];
+
+  meta = with lib; {
+    description = "Switch your X keyboard layouts from the command line";
+    homepage = "https://github.com/ierton/xkb-switch";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ smironov ];
+    platforms = platforms.linux;
+    mainProgram = "xkb-switch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xkbset/default.nix b/nixpkgs/pkgs/tools/X11/xkbset/default.nix
new file mode 100644
index 000000000000..9c4bc81744fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkbset/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, perl, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xkbset";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "http://faculty.missouri.edu/~stephen/software/xkbset/xkbset-${version}.tar.gz";
+    sha256 = "sha256-rAMv7EnExPDyMY0/RhiXDFFBkbFC4GxRpmH+I0KlNaU=";
+  };
+
+  buildInputs = [ perl libX11 ];
+
+  postPatch = ''
+    sed "s:^X11PREFIX=.*:X11PREFIX=$out:" -i Makefile
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/man/man1
+  '';
+
+  postInstall = ''
+    rm -f $out/bin/xkbset-gui
+  '';
+
+  meta = with lib; {
+    homepage = "http://faculty.missouri.edu/~stephen/software/#xkbset";
+    description = "Program to help manage many of XKB features of X window";
+    maintainers = with maintainers; [ drets ];
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+    mainProgram = "xkbset";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xkbvalidate/default.nix b/nixpkgs/pkgs/tools/X11/xkbvalidate/default.nix
new file mode 100644
index 000000000000..b39e697f7741
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkbvalidate/default.nix
@@ -0,0 +1,16 @@
+{ lib, runCommandCC, libxkbcommon }:
+
+runCommandCC "xkbvalidate" {
+  buildInputs = [ libxkbcommon ];
+  meta = {
+    description = "NixOS tool to validate X keyboard configuration";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.aszlig ];
+    mainProgram = "xkbvalidate";
+  };
+} ''
+  mkdir -p "$out/bin"
+  $CC -std=c11 -Wall -pedantic -lxkbcommon ${./xkbvalidate.c} \
+    -o "$out/bin/xkbvalidate"
+''
diff --git a/nixpkgs/pkgs/tools/X11/xkbvalidate/xkbvalidate.c b/nixpkgs/pkgs/tools/X11/xkbvalidate/xkbvalidate.c
new file mode 100644
index 000000000000..d485ff604ca0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkbvalidate/xkbvalidate.c
@@ -0,0 +1,150 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <xkbcommon/xkbcommon.h>
+
+static char **log_buffer = NULL;
+static int log_buffer_size = 0;
+static bool log_alloc_success = true;
+
+static void add_log(struct xkb_context *ctx, enum xkb_log_level level,
+                    const char *fmt, va_list args)
+{
+    size_t buflen;
+    va_list tmpargs;
+
+    log_buffer_size++;
+
+    if (log_buffer == NULL)
+        log_buffer = malloc(sizeof(char *));
+    else
+        log_buffer = realloc(log_buffer, sizeof(char *) * log_buffer_size);
+
+    if (log_buffer == NULL) {
+        perror("buffer alloc");
+        log_alloc_success = false;
+        log_buffer_size--;
+        return;
+    }
+
+    /* Unfortunately, vasprintf() is a GNU extension and thus not very
+     * portable, so let's first get the required buffer size using a dummy
+     * vsnprintf and afterwards allocate the returned amount of bytes.
+     *
+     * We also need to make a copy of the args, because the value of the args
+     * will be indeterminate after the return.
+     */
+    va_copy(tmpargs, args);
+    buflen = vsnprintf(NULL, 0, fmt, tmpargs);
+    va_end(tmpargs);
+
+    log_buffer[log_buffer_size - 1] = malloc(++buflen);
+
+    if (vsnprintf(log_buffer[log_buffer_size - 1], buflen, fmt, args) == -1) {
+        perror("log line alloc");
+        log_alloc_success = false;
+    }
+    va_end(args);
+}
+
+static void print_logs(void)
+{
+    for (int i = 0; i < log_buffer_size; ++i)
+        fprintf(stderr, "    %s", log_buffer[i]);
+}
+
+static void free_logs(void)
+{
+    if (log_buffer == NULL)
+        return;
+    for (int i = 0; i < log_buffer_size; ++i)
+        free(log_buffer[i]);
+    free(log_buffer);
+    log_buffer = NULL;
+    log_buffer_size = 0;
+}
+
+static bool try_keymap(struct xkb_context *ctx, struct xkb_rule_names *rdef)
+{
+    struct xkb_keymap *keymap;
+    bool result = true;
+
+    if ((keymap = xkb_keymap_new_from_names(ctx, rdef, 0)) == NULL)
+        result = false;
+    else
+        xkb_keymap_unref(keymap);
+
+    return result;
+}
+
+static void print_error(const char *name, const char *value,
+                        const char *nixos_option)
+{
+    fprintf(stderr, "\nThe value `%s' for keyboard %s is invalid.\n\n"
+                    "Please check the definition in `services.xserver.%s'.\n",
+            value, name, nixos_option);
+    fputs("\nDetailed XKB compiler errors:\n\n", stderr);
+    print_logs();
+    putc('\n', stderr);
+}
+
+#define TRY_KEYMAP(name, value, nixos_option) \
+    *rdef = (struct xkb_rule_names) {0}; \
+    free_logs(); \
+    rdef->name = value; \
+    result = try_keymap(ctx, rdef); \
+    if (!log_alloc_success) \
+        goto out; \
+    if (!result) { \
+        print_error(#name, value, nixos_option); \
+        exit_code = EXIT_FAILURE; \
+        goto out; \
+    }
+
+int main(int argc, char **argv)
+{
+    int exit_code = EXIT_SUCCESS;
+    bool result;
+    struct xkb_context *ctx;
+    struct xkb_rule_names *rdef;
+
+    if (argc != 5) {
+        fprintf(stderr, "Usage: %s model layout variant options\n", argv[0]);
+        return EXIT_FAILURE;
+    }
+
+    ctx = xkb_context_new(XKB_CONTEXT_NO_ENVIRONMENT_NAMES);
+    xkb_context_set_log_fn(ctx, add_log);
+
+    rdef = malloc(sizeof(struct xkb_rule_names));
+
+    TRY_KEYMAP(model,   argv[1], "xkb.model");
+    TRY_KEYMAP(layout,  argv[2], "xkb.layout");
+    TRY_KEYMAP(variant, argv[3], "xkb.variant");
+    TRY_KEYMAP(options, argv[4], "xkb.options");
+
+    free_logs();
+    rdef->model = argv[1];
+    rdef->layout = argv[2];
+    rdef->variant = argv[3];
+    rdef->options = argv[4];
+
+    result = try_keymap(ctx, rdef);
+    if (!log_alloc_success)
+        goto out;
+
+    if (!result) {
+        fputs("The XKB keyboard definition failed to compile:\n", stderr);
+        print_logs();
+        exit_code = EXIT_FAILURE;
+    }
+
+out:
+    free_logs();
+    free(rdef);
+    xkb_context_unref(ctx);
+    return exit_code;
+}
diff --git a/nixpkgs/pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py b/nixpkgs/pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py
new file mode 100644
index 000000000000..347ac17d33fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+import re
+from xkeysnail.transform import *
+
+aa = False
+def aa_setvar(v):
+    def _aa_setvar():
+        transform._mark_set = False
+        global aa; aa = v
+    return _aa_setvar
+def aa_ifvar():
+    def _aa_ifvar():
+        transform._mark_set = False
+        global aa
+        if aa: aa = False; return K("esc")
+        return K("enter")
+    return _aa_ifvar
+def aa_flipmark():
+    def _aa_flipmark():
+        transform._mark_set = not transform._mark_set;
+    return _aa_flipmark
+
+define_keymap(re.compile("Google-chrome|Chromium-browser|firefox"), {
+    K("C-b"): with_mark(K("left")),
+    K("C-f"): with_mark(K("right")),
+    K("C-p"): with_mark(K("up")),
+    K("C-n"): with_mark(K("down")),
+    K("M-b"): with_mark(K("C-left")),
+    K("M-f"): with_mark(K("C-right")),
+    K("C-a"): with_mark(K("home")),
+    K("C-e"): with_mark(K("end")),
+
+    K("C-w"): [K("C-x"), set_mark(False)],
+    K("M-w"): [K("C-c"), K("right"), set_mark(False)],
+    K("C-y"): [K("C-v"), set_mark(False)],
+    K("C-k"): [K("Shift-end"), K("C-x"), set_mark(False)],
+    K("C-d"): [K("delete"), set_mark(False)],
+    K("M-d"): [K("C-delete"), set_mark(False)],
+    K("M-backspace"): [K("C-backspace"), set_mark(False)],
+
+    K("C-slash"): [K("C-z"), set_mark(False)],
+    K("C-space"): aa_flipmark(),
+    K("C-M-space"): with_or_set_mark(K("C-right")),
+
+    # K("C-s"): K("F3"),
+    # K("C-r"): K("Shift-F3"),
+    # K("C-g"): [K("esc"), set_mark(False)]
+
+    K("C-s"): [K("F3"), aa_setvar(True)],
+    K("C-r"): [K("Shift-F3"), aa_setvar(True)],
+    K("C-g"): [K("esc"), aa_setvar(False)],
+    K("enter"): aa_ifvar()
+})
diff --git a/nixpkgs/pkgs/tools/X11/xkeysnail/default.nix b/nixpkgs/pkgs/tools/X11/xkeysnail/default.nix
new file mode 100644
index 000000000000..2d66405904f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkeysnail/default.nix
@@ -0,0 +1,42 @@
+{ lib, fetchFromGitHub, makeWrapper, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "xkeysnail";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mooz";
+    repo = pname;
+    rev = "bf3c93b4fe6efd42893db4e6588e5ef1c4909cfb";
+    sha256 = "0plcpb4ndzfsd5hj32m0g32swnhyph9sd759cdhhzmjvlq3j8q6p";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  propagatedBuildInputs = with python3Packages; [
+    evdev
+    xlib
+    inotify-simple
+    appdirs
+  ];
+
+  doCheck = false;
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp ./example/config.py $out/share/example.py
+    cp ${./browser-emacs-bindings.py} $out/share/browser.py
+
+    makeWrapper $out/bin/xkeysnail $out/bin/xkeysnail-example \
+      --add-flags "-q" --add-flags "$out/share/example.py"
+    makeWrapper $out/bin/xkeysnail $out/bin/xkeysnail-browser \
+      --add-flags "-q" --add-flags "$out/share/browser.py"
+  '';
+
+  meta = with lib; {
+    description = "Yet another keyboard remapping tool for X environment";
+    homepage = "https://github.com/mooz/xkeysnail";
+    platforms = platforms.linux;
+    license = licenses.gpl1Only;
+    maintainers = with maintainers; [ bb2020 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xlayoutdisplay/default.nix b/nixpkgs/pkgs/tools/X11/xlayoutdisplay/default.nix
new file mode 100644
index 000000000000..5ab9ca0b86ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xlayoutdisplay/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, xorg, boost, gtest }:
+
+stdenv.mkDerivation rec {
+  pname = "xlayoutdisplay";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "alex-courtis";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-A37jFhVTW/3QNEf776Oi3ViRK+ebOPRTsEQqdmNhA7E=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = with xorg; [ libX11 libXrandr libXcursor boost ];
+  nativeCheckInputs = [ gtest ];
+
+  doCheck = true;
+  checkTarget = "gtest";
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Detects and arranges linux display outputs, using XRandR for detection and xrandr for arrangement";
+    homepage = "https://github.com/alex-courtis/xlayoutdisplay";
+    maintainers = with maintainers; [ dtzWill ];
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    mainProgram = "xlayoutdisplay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xloadimage/default.nix b/nixpkgs/pkgs/tools/X11/xloadimage/default.nix
new file mode 100644
index 000000000000..e228c8223f4f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xloadimage/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv
+, fetchurl
+, libX11
+, libXt
+
+, libjpeg ? null
+, libpng ? null
+, libtiff ? null
+
+, withJpegSupport ? true
+, withPngSupport ? true
+, withTiffSupport ? true
+}:
+
+assert withJpegSupport -> libjpeg != null;
+assert withPngSupport -> libpng != null;
+assert withTiffSupport -> libtiff != null;
+
+let
+  deb_patch = "25";
+in
+stdenv.mkDerivation rec {
+  version = "4.1";
+  pname = "xloadimage";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/x/xloadimage/xloadimage_${version}.orig.tar.gz";
+    sha256 = "1i7miyvk5ydhi6yi8593vapavhwxcwciir8wg9d2dcyg9pccf2s0";
+  };
+
+  patches = fetchurl {
+    url = "mirror://debian/pool/main/x/xloadimage/xloadimage_${version}-${deb_patch}.debian.tar.xz";
+    sha256 = "17k518vrdrya5c9dqhpmm4g0h2vlkq1iy87sg2ngzygypbli1xvn";
+  };
+
+  buildInputs = [
+    libX11 libXt
+  ] ++ lib.optionals withJpegSupport [
+    libjpeg
+  ] ++ lib.optionals withPngSupport [
+    libpng
+  ] ++ lib.optionals withTiffSupport [
+    libtiff
+  ];
+
+  # NOTE: we patch the build-info script so that it never detects the utilities
+  # it's trying to find; one of the Debian patches adds support for
+  # $SOURCE_DATE_EPOCH, but we want to make sure we don't even call these.
+  preConfigure = ''
+    substituteInPlace build-info \
+      --replace '[ -x /bin/date ]' 'false' \
+      --replace '[ -x /bin/id ]' 'false' \
+      --replace '[ -x /bin/uname ]' 'false' \
+      --replace '[ -x /usr/bin/id ]' 'false'
+
+    chmod +x build-info configure
+  '';
+
+  enableParallelBuilding = true;
+
+  # NOTE: we're not installing the `uufilter` binary; if needed, the standard
+  # `uudecode` tool should work just fine.
+  installPhase = ''
+    install -Dm755 xloadimage $out/bin/xloadimage
+    ln -sv $out/bin/{xloadimage,xsetbg}
+
+    install -D -m644 xloadimagerc $out/etc/xloadimagerc.example
+    install -D -m644 xloadimage.man $out/share/man/man1/xloadimage.1x
+    ln -sv $out/share/man/man1/{xloadimage,xsetbg}.1x
+  '';
+
+  meta = {
+    description = "Graphics file viewer under X11";
+
+    longDescription = ''
+      Can view png, jpeg, gif, tiff, niff, sunraster, fbm, cmuraster, pbm,
+      faces, rle, xwd, vff, mcidas, vicar, pcx, gem, macpaint, xpm and xbm
+      files. Can view images, put them on the root window, or dump them. Does a
+      variety of processing, including: clipping, dithering, depth reduction,
+      zoom, brightening/darkening and merging.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+
+    maintainers = with lib.maintainers; [ andrew-d ];
+    platforms = lib.platforms.linux;  # arbitrary choice
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xlogo/default.nix b/nixpkgs/pkgs/tools/X11/xlogo/default.nix
new file mode 100644
index 000000000000..7b8e9bf52212
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xlogo/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, xorg
+, autoreconfHook
+, pkg-config
+, xorg-autoconf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xlogo";
+  version = "1.0.6";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    group = "xorg";
+    owner = "app";
+    repo = "xlogo";
+    rev = "refs/tags/xlogo-${version}";
+    hash = "sha256-S7Z2nGQt07YBHlbA1u/+rvDwtzT381e90jieoiun+E8=";
+  };
+
+  nativeBuildInputs = [ xorg-autoconf autoreconfHook pkg-config ];
+
+  configureFlags = [ "--with-appdefaultdir=$out/share/X11/app-defaults" ];
+
+  buildInputs = [ xorg.libX11 xorg.libXext xorg.libSM xorg.libXmu xorg.libXaw xorg.libXt ];
+
+  meta = with lib; {
+    description = "X Window System logo display demo";
+    homepage = "https://gitlab.freedesktop.org/xorg/app/xlogo";
+    maintainers = with maintainers; [ raboof ];
+    platforms = platforms.unix;
+    license = licenses.mit;
+    mainProgram = "xlogo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xmacro/default.nix b/nixpkgs/pkgs/tools/X11/xmacro/default.nix
new file mode 100644
index 000000000000..cf0ef6d8bf8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xmacro/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl, libX11, libXtst, xorgproto, libXi }:
+
+stdenv.mkDerivation rec {
+  pname = "xmacro";
+  version = "0.4.6";
+
+  src = fetchurl {
+    url = "http://download.sarine.nl/xmacro/${pname}-${version}.tar.gz";
+    sha256 = "1p9jljxyn4j6piljiyi2xv6f8jhjbzhabprp8p0qmqxaxgdipi61";
+  };
+
+  preInstall = "echo -e 'install:\n	mkdir \${out}/bin;\n	cp xmacrorec2 xmacroplay \${out}/bin;' >>Makefile; ";
+
+  buildInputs = [ libX11 libXtst xorgproto libXi ];
+
+  meta = {
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xmagnify/default.nix b/nixpkgs/pkgs/tools/X11/xmagnify/default.nix
new file mode 100644
index 000000000000..38450c745ee2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xmagnify/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitLab, libX11, xorgproto }:
+
+stdenv.mkDerivation rec {
+  pname = "xmagnify";
+  version = "0.1.0";
+
+  src = fetchFromGitLab {
+    owner = "amiloradovsky";
+    repo = "magnify";
+    rev = version;
+    sha256 = "1ngnp5f5zl3v35vhbdyjpymy6mwrs0476fm5nd7dzkba7n841jdh";
+  };
+
+  prePatch = "substituteInPlace ./Makefile --replace /usr $out";
+
+  buildInputs = [ libX11 xorgproto ];
+
+  meta = with lib; {
+    description = "Tiny screen magnifier for X11";
+    homepage = "https://gitlab.com/amiloradovsky/magnify";
+    license = licenses.mit;  # or GPL2+, optionally
+    maintainers = with maintainers; [ amiloradovsky ];
+    mainProgram = "magnify";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xmcp/default.nix b/nixpkgs/pkgs/tools/X11/xmcp/default.nix
new file mode 100644
index 000000000000..228d502c4b7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xmcp/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libX11
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xmcp";
+  version = "unstable-2020-10-10";
+
+  src = fetchFromGitHub {
+    owner = "blblapco";
+    repo = "xmcp";
+    rev = "ee56225f1665f9edc04fe5c165809f2fe160a420";
+    sha256 = "sha256-B3YkYrVEg6UJ2ApaVook4N2XvrCboxDMUG5CN9I79Sg=";
+  };
+
+  buildInputs = [ libX11 ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm0755 xmcp $out/bin/xmcp
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tiny color picker for X11";
+    homepage = "https://github.com/blblapco/xmcp";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.linux;
+    mainProgram = "xmcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xmousepasteblock/default.nix b/nixpkgs/pkgs/tools/X11/xmousepasteblock/default.nix
new file mode 100644
index 000000000000..47140093be25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xmousepasteblock/default.nix
@@ -0,0 +1,22 @@
+{ xorg, lib, stdenv, libev, fetchFromGitHub, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "xmousepasteblock";
+  version = "1.4";
+  src = fetchFromGitHub {
+    owner = "milaq";
+    repo = "XMousePasteBlock";
+    hash = "sha256-uHlHGVnIro6X4kRp79ibtqMmiv2XQT+zgbQagUxdB0c=";
+    rev = version;
+  };
+  makeFlags = [ "PREFIX=$(out)" "CC=${stdenv.cc.targetPrefix}cc" ];
+  buildInputs = with xorg; [ libX11 libXext libXi libev ];
+  nativeBuildInputs = [ pkg-config ];
+  meta = with lib; {
+    description = "Middle mouse button primary X selection/clipboard paste disabler";
+    homepage = "https://github.com/milaq/XMousePasteBlock";
+    license = lib.licenses.gpl2;
+    maintainers = [ maintainers.petercommand ];
+    mainProgram = "xmousepasteblock";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xnee/default.nix b/nixpkgs/pkgs/tools/X11/xnee/default.nix
new file mode 100644
index 000000000000..b6fe79c7b9cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xnee/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, autoreconfHook
+, pkg-config
+, gtk2
+, libX11
+, libXext
+, libXi
+, libXtst
+, texinfo
+, xorgproto
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  version = "3.19";
+  pname = "xnee";
+
+  src = fetchurl {
+    url = "mirror://gnu/xnee/xnee-${finalAttrs.version}.tar.gz";
+    hash = "sha256-UqQeXPYvgbej5bWBJOs1ZeHhICir2mP1R/u+DZiiwhI=";
+  };
+
+  patches = [
+    # Pull fix pending upstream inclusion for -fno-common
+    # toolchain support: https://savannah.gnu.org/bugs/?58810
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://savannah.gnu.org/bugs/download.php?file_id=49534";
+      hash = "sha256-Ar5SyVIEp8/knDHm+4f0KWAH+A5gGhXGezEqL7xkQhI=";
+    })
+  ];
+
+  postPatch = ''
+    for i in `find cnee/test -name \*.sh`; do
+      sed -i "$i" -e's|/bin/bash|${stdenv.shell}|g ; s|/usr/bin/env bash|${stdenv.shell}|g'
+    done
+  ''
+  # Fix for glibc-2.34. For some reason, `LIBSEMA="CCC"` is added
+  # if `sem_init` is part of libc which causes errors like
+  # `gcc: error: CCC: No such file or directory` during the build.
+  + ''
+    substituteInPlace configure* \
+      --replace 'LIBSEMA="CCC"' 'LIBSEMA=""'
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    gtk2
+    libX11
+    libXext
+    libXi
+    libXtst
+    texinfo
+    xorgproto
+  ];
+
+  configureFlags = [
+    "--disable-gnome-applet"
+    # Do a static build because `libxnee' doesn't get installed anyway.
+    "--enable-static"
+  ];
+
+  makeFlags = [
+    # `cnee' is linked without `-lXi' and as a consequence has a RUNPATH that
+    # lacks libXi.
+    "LDFLAGS=-lXi"
+  ];
+
+  # error: call to undeclared function 'xnee_check_key';
+  # ISO C99 and later do not support implicit function declarations
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_CFLAGS_COMPILE = "-Wno-error=implicit-function-declaration";
+  };
+
+  # XXX: Actually tests require an X server.
+  doCheck = true;
+
+  meta = {
+    description = "X11 event recording and replay tool";
+    longDescription = ''
+      Xnee is a suite of programs that can record, replay and distribute
+      user actions under the X11 environment.  Think of it as a robot that
+      can imitate the job you just did.  Xnee can be used to automate
+      tests, demonstrate programs, distribute actions, record & replay
+      "macros", retype a file.
+    '';
+    homepage = "https://www.gnu.org/software/xnee/";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ wegank ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/X11/xnotify/default.nix b/nixpkgs/pkgs/tools/X11/xnotify/default.nix
new file mode 100644
index 000000000000..cdd7d54b5294
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xnotify/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, writeText
+, fontconfig
+, imlib2
+, libX11
+, libXft
+, libXinerama
+, conf ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xnotify";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "phillbush";
+    repo = "xnotify";
+    rev = "v${version}";
+    hash = "sha256-RfnmiAEFTPqQZursyVPDIZ6J3KBouvaaxyhTc1liqBc=";
+  };
+
+  buildInputs = [
+    fontconfig
+    imlib2
+    libX11
+    libXft
+    libXinerama
+  ];
+
+  postPatch = with lib;
+    let
+      configFile =
+        if isDerivation conf || builtins.isPath conf
+        then conf else writeText "config.h" conf;
+    in
+    optionalString (conf != null) "cp ${configFile} config.h";
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A tool to read notifications from stdin and pop them up on the screen";
+    longDescription = ''
+      XNotify displays a notification on the screen. XNotify receives a
+      notification specification in stdin and shows a notification for the user
+      on the screen.
+    '';
+    homepage = "https://github.com/phillbush/xnotify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.unix;
+    mainProgram = "xnotify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xob/default.nix b/nixpkgs/pkgs/tools/X11/xob/default.nix
new file mode 100644
index 000000000000..e6e2fc273020
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xob/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, xorg, libconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "xob";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "florentc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1x4aafiyd9k4y8cmvn7rgfif3g5s5hhlbj5nz71qsyqg21nn7hrw";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ xorg.libX11 xorg.libXrender libconfig ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "A lightweight overlay bar for the X Window System";
+    longDescription = ''
+      A lightweight configurable overlay volume/backlight/progress/anything bar
+      for the X Window System (and Wayland compositors with XWayland). Each
+      time a new value is read on the standard input, it is displayed as a
+      tv-like bar over other windows. It then vanishes after a configurable
+      amount of time. A value followed by a bang '!' is displayed using an
+      alternate color to account for special states (e.g. muted audio). There
+      is also support for overflows (when the value exceeds the maximum).
+    '';
+    inherit (src.meta) homepage;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ florentc ];
+    mainProgram = "xob";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xplugd/default.nix b/nixpkgs/pkgs/tools/X11/xplugd/default.nix
new file mode 100644
index 000000000000..f5b81571ef2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xplugd/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, xorg
+, pkg-config
+, fetchFromGitHub
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xplugd";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "troglobit";
+    repo = "xplugd";
+    rev = "v${version}";
+    sha256 = "11vjr69prrs4ir9c267zwq4g9liipzrqi0kmw1zg95dbn7r7zmql";
+  };
+
+  buildInputs = with xorg; [ libX11 libXi libXrandr libXext ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+
+  meta = with lib; {
+    homepage = "https://github.com/troglobit/xplugd";
+    description = "A UNIX daemon that executes a script on X input and RandR changes";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ akho ];
+    mainProgram = "xplugd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xpointerbarrier/default.nix b/nixpkgs/pkgs/tools/X11/xpointerbarrier/default.nix
new file mode 100644
index 000000000000..8621e7644365
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpointerbarrier/default.nix
@@ -0,0 +1,39 @@
+{ lib,
+  stdenv,
+  fetchurl,
+  pkg-config,
+  libX11,
+  libXfixes,
+  libXrandr,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xpointerbarrier";
+  version = "20.07";
+
+  src = fetchurl {
+    url = "https://www.uninformativ.de/git/xpointerbarrier/archives/xpointerbarrier-v${finalAttrs.version}.tar.gz";
+    hash = "sha256-V1sNAQjsPVSjJ2nhCSdZqZQA78pjUE0z3IU4+I85CpI=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libX11
+    libXfixes
+    libXrandr
+  ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://www.uninformativ.de/git/xpointerbarrier/file/README.html";
+    description = "Create X11 pointer barriers around your working area";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres xzfc ];
+    platforms = platforms.linux;
+    mainProgram = "xpointerbarrier";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/X11/xpra/0002-Constant-DPI.patch b/nixpkgs/pkgs/tools/X11/xpra/0002-Constant-DPI.patch
new file mode 100644
index 000000000000..f91e53d1e493
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/0002-Constant-DPI.patch
@@ -0,0 +1,96 @@
+--- a/src/dummy.h	2016-12-17 23:02:53.396287041 +0100
++++ b/src/dummy.h	2016-12-17 23:03:30.319616550 +0100
+@@ -51,6 +51,7 @@
+     /* options */
+     OptionInfoPtr Options;
+     Bool swCursor;
++    Bool constantDPI;
+     /* proc pointer */
+     CloseScreenProcPtr CloseScreen;
+     xf86CursorInfoPtr CursorInfo;
+--- a/src/dummy_driver.c	2016-12-14 21:54:20.000000000 +0100
++++ b/src/dummy_driver.c	2016-12-17 23:04:59.916416126 +0100
+@@ -17,6 +17,12 @@
+ /* All drivers using the mi colormap manipulation need this */
+ #include "micmap.h"
+ 
++#ifdef RANDR
++#include "randrstr.h"
++#endif
++
++#include "windowstr.h"
++
+ /* identifying atom needed by magnifiers */
+ #include <X11/Xatom.h>
+ #include "property.h"
+@@ -115,11 +121,15 @@
+ };
+ 
+ typedef enum {
+-    OPTION_SW_CURSOR
++    OPTION_SW_CURSOR,
++    OPTION_CONSTANT_DPI
+ } DUMMYOpts;
+ 
+ static const OptionInfoRec DUMMYOptions[] = {
+     { OPTION_SW_CURSOR,	"SWcursor",	OPTV_BOOLEAN,	{0}, FALSE },
++#ifdef RANDR
++    { OPTION_CONSTANT_DPI,	"ConstantDPI",	OPTV_BOOLEAN,	{0}, FALSE },
++#endif
+     { -1,                  NULL,           OPTV_NONE,	{0}, FALSE }
+ };
+ 
+@@ -359,6 +369,7 @@
+     xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, dPtr->Options);
+ 
+     xf86GetOptValBool(dPtr->Options, OPTION_SW_CURSOR,&dPtr->swCursor);
++    xf86GetOptValBool(dPtr->Options, OPTION_CONSTANT_DPI, &dPtr->constantDPI);
+ 
+     if (device->videoRam != 0) {
+ 	pScrn->videoRam = device->videoRam;
+@@ -639,10 +650,45 @@
+     return TRUE;
+ }
+ 
++const char *XDPY_PROPERTY = "dummy-constant-xdpi";
++const char *YDPY_PROPERTY = "dummy-constant-ydpi";
++static int get_dpi_value(WindowPtr root, const char *property_name, int default_dpi)
++{
++    PropertyPtr prop;
++    Atom type_atom = MakeAtom("CARDINAL", 8, TRUE);
++    Atom prop_atom = MakeAtom(property_name, strlen(property_name), FALSE);
++
++    for (prop = wUserProps(root); prop; prop = prop->next) {
++       if (prop->propertyName == prop_atom && prop->type == type_atom && prop->data) {
++           int v = (int) (*((CARD32 *) prop->data));
++           if ((v>0) && (v<4096)) {
++               xf86DrvMsg(0, X_INFO, "get_constant_dpi_value() found property \"%s\" with value=%i\n", property_name, (int) v);
++               return (int) v;
++           }
++           break;
++       }
++    }
++    return default_dpi;
++}
++
+ /* Mandatory */
+ Bool
+ DUMMYSwitchMode(SWITCH_MODE_ARGS_DECL)
+ {
++    SCRN_INFO_PTR(arg);
++#ifdef RANDR
++    DUMMYPtr dPtr = DUMMYPTR(pScrn);
++    if (dPtr->constantDPI) {
++        int xDpi = get_dpi_value(pScrn->pScreen->root, XDPY_PROPERTY, pScrn->xDpi);
++        int yDpi = get_dpi_value(pScrn->pScreen->root, YDPY_PROPERTY, pScrn->yDpi);
++        //25.4 mm per inch: (254/10)
++        pScrn->pScreen->mmWidth = mode->HDisplay * 254 / xDpi / 10;
++        pScrn->pScreen->mmHeight = mode->VDisplay * 254 / yDpi / 10;
++        xf86DrvMsg(pScrn->scrnIndex, X_INFO, "mm(dpi %ix%i)=%ix%i\n", xDpi, yDpi, pScrn->pScreen->mmWidth, pScrn->pScreen->mmHeight);
++        RRScreenSizeNotify(pScrn->pScreen);
++        RRTellChanged(pScrn->pScreen);
++    }
++#endif
+     return TRUE;
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/X11/xpra/0003-fix-pointer-limits.patch b/nixpkgs/pkgs/tools/X11/xpra/0003-fix-pointer-limits.patch
new file mode 100644
index 000000000000..3dbb6fd179ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/0003-fix-pointer-limits.patch
@@ -0,0 +1,39 @@
+--- xf86-video-dummy-0.3.6/src/dummy_driver.c	2014-11-05 19:24:02.668656601 +0700
++++ xf86-video-dummy-0.3.6.new/src/dummy_driver.c	2014-11-05 19:37:53.076061853 +0700
+@@ -55,6 +55,9 @@
+ #include <X11/extensions/xf86dgaproto.h>
+ #endif
+ 
++/* Needed for fixing pointer limits on resize */
++#include "inputstr.h"
++
+ /* Mandatory functions */
+ static const OptionInfoRec *	DUMMYAvailableOptions(int chipid, int busid);
+ static void     DUMMYIdentify(int flags);
+@@ -713,6 +716,26 @@
+         RRTellChanged(pScrn->pScreen);
+     }
+ #endif
++    //ensure the screen dimensions are also updated:
++    pScrn->pScreen->width = mode->HDisplay;
++    pScrn->pScreen->height = mode->VDisplay;
++    pScrn->virtualX = mode->HDisplay;
++    pScrn->virtualY = mode->VDisplay;
++    pScrn->frameX1 = mode->HDisplay;
++    pScrn->frameY1 = mode->VDisplay;
++
++    //ensure the pointer uses the new limits too:
++    DeviceIntPtr pDev;
++    SpritePtr pSprite;
++    for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
++        if (pDev->spriteInfo!=NULL && pDev->spriteInfo->sprite!=NULL) {
++            pSprite = pDev->spriteInfo->sprite;
++            pSprite->hotLimits.x2 = mode->HDisplay;
++            pSprite->hotLimits.y2 = mode->VDisplay;
++            pSprite->physLimits.x2 = mode->HDisplay;
++            pSprite->physLimits.y2 = mode->VDisplay;
++        }
++    }
+     return TRUE;
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/X11/xpra/default.nix b/nixpkgs/pkgs/tools/X11/xpra/default.nix
new file mode 100644
index 000000000000..e77273c6084c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/default.nix
@@ -0,0 +1,219 @@
+{ lib
+, fetchurl
+, substituteAll
+, pkg-config
+, runCommand
+, writeText
+, wrapGAppsHook
+, withNvenc ? false
+, atk
+, cairo
+, cudatoolkit
+, ffmpeg
+, gdk-pixbuf
+, getopt
+, glib
+, gobject-introspection
+, gst_all_1
+, gtk3
+, libappindicator
+, libfakeXinerama
+, librsvg
+, libvpx
+, libwebp
+, lz4
+, nv-codec-headers-10
+, nvidia_x11 ? null
+, pam
+, pandoc
+, pango
+, pulseaudio
+, python3
+, util-linux
+, which
+, x264
+, x265
+, xauth
+, xorg
+, xorgserver
+}:
+
+let
+  inherit (python3.pkgs) cython buildPythonApplication;
+
+  xf86videodummy = xorg.xf86videodummy.overrideDerivation (p: {
+    patches = [
+      # patch provided by Xpra upstream
+      ./0002-Constant-DPI.patch
+      # https://github.com/Xpra-org/xpra/issues/349
+      ./0003-fix-pointer-limits.patch
+    ];
+  });
+
+  xorgModulePaths = writeText "module-paths" ''
+    Section "Files"
+      ModulePath "${xorgserver}/lib/xorg/modules"
+      ModulePath "${xorgserver}/lib/xorg/modules/extensions"
+      ModulePath "${xorgserver}/lib/xorg/modules/drivers"
+      ModulePath "${xf86videodummy}/lib/xorg/modules/drivers"
+    EndSection
+  '';
+
+  nvencHeaders = runCommand "nvenc-headers" {
+    inherit nvidia_x11;
+  } ''
+    mkdir -p $out/include $out/lib/pkgconfig
+    cp ${nv-codec-headers-10}/include/ffnvcodec/nvEncodeAPI.h $out/include
+    substituteAll ${./nvenc.pc} $out/lib/pkgconfig/nvenc.pc
+  '';
+in buildPythonApplication rec {
+  pname = "xpra";
+  version = "4.4.6";
+
+  src = fetchurl {
+    url = "https://xpra.org/src/${pname}-${version}.tar.xz";
+    hash = "sha256-BWf3nypfSrYCzpJ0OfBkecoHGbG1lEgu5jLZhfkIejQ=";
+  };
+
+  patches = [
+    (substituteAll {  # correct hardcoded paths
+      src = ./fix-paths.patch;
+      inherit libfakeXinerama;
+    })
+    ./fix-41106.patch  # https://github.com/NixOS/nixpkgs/issues/41106
+    ./fix-122159.patch # https://github.com/NixOS/nixpkgs/issues/122159
+  ];
+
+  INCLUDE_DIRS = "${pam}/include";
+
+  nativeBuildInputs = [
+    gobject-introspection
+    pkg-config
+    wrapGAppsHook
+    pandoc
+  ] ++ lib.optional withNvenc cudatoolkit;
+
+  buildInputs = with xorg; [
+    libX11
+    libXcomposite
+    libXdamage
+    libXfixes
+    libXi
+    libxkbfile
+    libXrandr
+    libXrender
+    libXres
+    libXtst
+    xorgproto
+  ] ++ (with gst_all_1; [
+    gst-libav
+    gst-plugins-bad
+    gst-plugins-base
+    gst-plugins-good
+    gstreamer
+  ]) ++ [
+    atk.out
+    cairo
+    cython
+    ffmpeg
+    gdk-pixbuf
+    glib
+    gtk3
+    libappindicator
+    librsvg
+    libvpx
+    libwebp
+    lz4
+    pam
+    pango
+    x264
+    x265
+  ] ++ lib.optional withNvenc nvencHeaders;
+
+  propagatedBuildInputs = with python3.pkgs; ([
+    cryptography
+    dbus-python
+    gst-python
+    idna
+    lz4
+    netifaces
+    numpy
+    opencv4
+    pam
+    paramiko
+    pillow
+    pycairo
+    pycrypto
+    pycups
+    pygobject3
+    pyinotify
+    pyopengl
+    python-uinput
+    pyxdg
+    rencode
+    invoke
+  ] ++ lib.optionals withNvenc [
+    pycuda
+    pynvml
+  ]);
+
+  # error: 'import_cairo' defined but not used
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=unused-function";
+
+  setupPyBuildFlags = [
+    "--with-Xdummy"
+    "--without-Xdummy_wrapper"
+    "--without-strict"
+    "--with-gtk3"
+    # Override these, setup.py checks for headers in /usr/* paths
+    "--with-pam"
+    "--with-vsock"
+  ] ++ lib.optional withNvenc "--with-nvenc";
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}"
+      --set XPRA_INSTALL_PREFIX "$out"
+      --set XPRA_COMMAND "$out/bin/xpra"
+      --set XPRA_XKB_CONFIG_ROOT "${xorg.xkeyboardconfig}/share/X11/xkb"
+      --set XORG_CONFIG_PREFIX ""
+      --prefix LD_LIBRARY_PATH : ${libfakeXinerama}/lib
+      --prefix PATH : ${lib.makeBinPath [ getopt xorgserver xauth which util-linux pulseaudio ]}
+  '' + lib.optionalString withNvenc ''
+      --prefix LD_LIBRARY_PATH : ${nvidia_x11}/lib
+  '' + ''
+    )
+  '';
+
+  postInstall = ''
+    # append module paths to xorg.conf
+    cat ${xorgModulePaths} >> $out/etc/xpra/xorg.conf
+    cat ${xorgModulePaths} >> $out/etc/xpra/xorg-uinput.conf
+
+    # make application icon visible to desktop environemnts
+    icon_dir="$out/share/icons/hicolor/64x64/apps"
+    mkdir -p "$icon_dir"
+    ln -sr "$out/share/icons/xpra.png" "$icon_dir"
+  '';
+
+  doCheck = false;
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    inherit xf86videodummy;
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    homepage = "https://xpra.org/";
+    downloadPage = "https://xpra.org/src/";
+    description = "Persistent remote applications for X";
+    changelog = "https://github.com/Xpra-org/xpra/releases/tag/v${version}";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ offline numinit mvnetbiz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xpra/fix-122159.patch b/nixpkgs/pkgs/tools/X11/xpra/fix-122159.patch
new file mode 100644
index 000000000000..510b40422a2a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/fix-122159.patch
@@ -0,0 +1,16 @@
+diff --git a/xpra/scripts/main.py b/xpra/scripts/main.py
+index 031a41f9e..6232ba830 100755
+--- a/xpra/scripts/main.py
++++ b/xpra/scripts/main.py
+@@ -377,11 +377,7 @@ def run_mode(script_file, cmdline, error_cb, options, args, mode, defaults):
+         "seamless", "desktop", "shadow", "expand",
+         "upgrade", "upgrade-seamless", "upgrade-desktop",
+         ) and not display_is_remote and use_systemd_run(options.systemd_run):
+-        #make sure we run via the same interpreter,
+-        #inject it into the command line if we have to:
+         argv = list(cmdline)
+-        if argv[0].find("python")<0:
+-            argv.insert(0, "python%i.%i" % (sys.version_info.major, sys.version_info.minor))
+         return systemd_run_wrap(mode, argv, options.systemd_run_args)
+     configure_env(options.env)
+     configure_logging(options, mode)
diff --git a/nixpkgs/pkgs/tools/X11/xpra/fix-41106.patch b/nixpkgs/pkgs/tools/X11/xpra/fix-41106.patch
new file mode 100644
index 000000000000..81870fc1a2a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/fix-41106.patch
@@ -0,0 +1,15 @@
+diff --git a/xpra/server/server_util.py b/xpra/server/server_util.py
+index f46998ee9f..60068f21b6 100644
+--- a/xpra/server/server_util.py
++++ b/xpra/server/server_util.py
+@@ -157,6 +157,10 @@ def xpra_env_shell_script(socket_dir, env):
+     return b"\n".join(script)
+ 
+ def xpra_runner_shell_script(xpra_file, starting_dir):
++    # Nixpkgs contortion:
++    # xpra_file points to a shell wrapper, not to the python script.
++    dirname, basename = os.path.split(xpra_file)
++    xpra_file = os.path.join(dirname, "."+basename+"-wrapped")
+     script = []
+     # We ignore failures in cd'ing, b/c it's entirely possible that we were
+     # started from some temporary directory and all paths are absolute.
diff --git a/nixpkgs/pkgs/tools/X11/xpra/fix-paths.patch b/nixpkgs/pkgs/tools/X11/xpra/fix-paths.patch
new file mode 100644
index 000000000000..9df7d835d031
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/fix-paths.patch
@@ -0,0 +1,37 @@
+diff --git a/xpra/x11/fakeXinerama.py b/xpra/x11/fakeXinerama.py
+index d5c1c8bb10..88c77e8142 100755
+--- a/xpra/x11/fakeXinerama.py
++++ b/xpra/x11/fakeXinerama.py
+@@ -22,31 +22,7 @@ fakeXinerama_config_files = [
+            ]
+ 
+ def find_libfakeXinerama():
+-    libname = "fakeXinerama"
+-    try:
+-        from ctypes.util import find_library
+-        flibname = find_library("fakeXinerama")
+-        if flibname:
+-            libname = flibname
+-    except Exception:
+-        pass
+-    if POSIX:
+-        for lib_dir in os.environ.get("LD_LIBRARY_PATH", "/usr/lib").split(os.pathsep):
+-            lib_path = os.path.join(lib_dir, libname)
+-            if not os.path.exists(lib_dir):
+-                continue
+-            if os.path.exists(lib_path) and os.path.isfile(lib_path):
+-                return lib_path
+-    if LINUX:
+-        try:
+-            libpath = find_lib_ldconfig("fakeXinerama")
+-            if libpath:
+-                return libpath
+-        except Exception as e:
+-            log("find_libfakeXinerama()", exc_info=True)
+-            log.error("Error: cannot launch ldconfig -p to locate libfakeXinerama:")
+-            log.error(" %s", e)
+-    return find_lib("libfakeXinerama.so.1")
++    return "@libfakeXinerama@/lib/libfakeXinerama.so.1.0"
+ 
+ current_xinerama_config = None
+ 
diff --git a/nixpkgs/pkgs/tools/X11/xpra/libfakeXinerama.nix b/nixpkgs/pkgs/tools/X11/xpra/libfakeXinerama.nix
new file mode 100644
index 000000000000..414a7c877bfb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/libfakeXinerama.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, libX11, libXinerama }:
+
+stdenv.mkDerivation  rec {
+  pname = "libfakeXinerama";
+  version = "0.1.0";
+
+  src = fetchurl {
+    url = "https://www.xpra.org/src/${pname}-${version}.tar.bz2";
+    sha256 = "0gxb8jska2anbb3c1m8asbglgnwylgdr44x9lr8yh91hjxsqadkx";
+  };
+
+  buildInputs = [ libX11 libXinerama ];
+
+  buildPhase = ''
+    gcc -O2 -Wall fakeXinerama.c -fPIC -o libfakeXinerama.so.1.0 -shared
+  '';
+
+  installPhase = ''
+    mkdir -p $out/lib
+    cp libfakeXinerama.so.1.0 $out/lib
+    ln -s libfakeXinerama.so.1.0 $out/lib/libXinerama.so.1.0
+    ln -s libXinerama.so.1.0 $out/lib/libXinerama.so.1
+    ln -s libXinerama.so.1 $out/lib/libXinerama.so
+  '';
+
+  meta = with lib; {
+    homepage = "http://xpra.org/";
+    description = "fakeXinerama for Xpra";
+    platforms = platforms.linux;
+    maintainers = [ ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xpra/nvenc.pc b/nixpkgs/pkgs/tools/X11/xpra/nvenc.pc
new file mode 100644
index 000000000000..6d8d916a0251
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/nvenc.pc
@@ -0,0 +1,11 @@
+prefix=@out@
+includedir=${prefix}/include
+libdir=@nvidia_x11@/lib
+
+Name: nvenc
+Description: NVENC
+Version: 10
+Requires:
+Conflicts:
+Libs: -L${libdir} -lnvidia-encode
+Cflags: -I${includedir}
diff --git a/nixpkgs/pkgs/tools/X11/xpra/update.sh b/nixpkgs/pkgs/tools/X11/xpra/update.sh
new file mode 100755
index 000000000000..c1b408a0beef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/update.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl perl common-updater-scripts
+
+version=$(curl https://xpra.org/src/ | perl -ne 'print "$1\n" if /xpra-([[:digit:].]+)\./' | sort -V | tail -n1)
+update-source-version xpra "$version"
diff --git a/nixpkgs/pkgs/tools/X11/xprintidle-ng/default.nix b/nixpkgs/pkgs/tools/X11/xprintidle-ng/default.nix
new file mode 100644
index 000000000000..ebe3d2a61992
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xprintidle-ng/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libX11
+, libXScrnSaver
+, libXext
+, gnulib
+, autoconf
+, automake
+, libtool
+, gettext
+, pkg-config
+, git
+, perl
+, texinfo
+, help2man
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xprintidle-ng";
+  version = "unstable-2015-09-01";
+
+  src = fetchFromGitHub {
+    owner = "taktoa";
+    repo = pname;
+    rev = "9083ba284d9222541ce7da8dc87d5a27ef5cc592";
+    sha256 = "0a5024vimpfrpj6w60j1ad8qvjkrmxiy8w1yijxfwk917ag9rkpq";
+  };
+
+  patches = [
+    ./fix-config_h-includes-should-be-first.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace "AC_PREREQ([2.62])" "AC_PREREQ([2.64])"
+  '';
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    gettext
+    git
+    gnulib
+    help2man
+    libtool
+    perl
+    pkg-config
+    texinfo
+  ];
+
+  configurePhase = ''
+    ./bootstrap --gnulib-srcdir=${gnulib}
+    ./configure --prefix="$out"
+  '';
+
+  buildInputs = [
+    libX11
+    libXScrnSaver
+    libXext
+  ];
+
+  meta = {
+    inherit version;
+    description = "A command-line tool to print idle time from libXss";
+    homepage = "https://github.com/taktoa/xprintidle-ng";
+    license = lib.licenses.gpl2Only;
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.linux;
+    mainProgram = "xprintidle-ng";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xprintidle-ng/fix-config_h-includes-should-be-first.patch b/nixpkgs/pkgs/tools/X11/xprintidle-ng/fix-config_h-includes-should-be-first.patch
new file mode 100644
index 000000000000..01b4b5d63bdd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xprintidle-ng/fix-config_h-includes-should-be-first.patch
@@ -0,0 +1,62 @@
+Fixes the config.h include error during build:
+
+```console
+In file included from src/xprintidle-ng.c:36:
+lib/time.h:28:3: error: #error "Please include config.h first."
+    28 |  #error "Please include config.h first."
+      |   ^~~~~
+```
+
+Introduced since gnulib upgrade:
+* https://github.com/coreutils/gnulib/commit/8ad7bc6
+* https://lists.gnu.org/archive/html/bug-gnulib/2023-04/msg00088.html
+* https://www.gnu.org/software/gnulib/manual/html_node/Source-changes.html
+
+The last version of gnulib now checks that config.h is the first include
+in every compilation unit.
+
+This is not the case with the xprintidle-ng source code, so this patch
+moves these `config.h` inclusions to be first.
+
+---
+ src/time-format.c   | 2 +-
+ src/xprintidle-ng.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/time-format.c b/src/time-format.c
+index 3a46749..4c0a4d2 100644
+--- a/src/time-format.c
++++ b/src/time-format.c
+@@ -18,10 +18,10 @@
+ //     51 Franklin Street, Fifth Floor
+ //     Boston, MA 02110-1301, USA.
+
++#include <config.h>
+ #include <stdbool.h>
+ #include <signal.h>
+ #include <time.h>
+-#include <config.h>
+ #include "system.h"
+ #include "xalloc.h"
+
+diff --git a/src/xprintidle-ng.c b/src/xprintidle-ng.c
+index 5156adf..ca69b2d 100644
+--- a/src/xprintidle-ng.c
++++ b/src/xprintidle-ng.c
+@@ -28,13 +28,13 @@
+ // Eivind Magnus Hvidevold <hvidevold@gmail.com>.
+ // kpowersave is licensed under the GNU GPL, version 2 _only_.
+
++#include <config.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>
+ #include <X11/extensions/scrnsaver.h>
+ #include <stdbool.h>
+ #include <signal.h>
+ #include <time.h>
+-#include <config.h>
+ #include "system.h"
+ #include "errno.h"
+ #include "error.h"
+--
+2.42.0
diff --git a/nixpkgs/pkgs/tools/X11/xprintidle/default.nix b/nixpkgs/pkgs/tools/X11/xprintidle/default.nix
new file mode 100644
index 000000000000..4a0d371a7fd6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xprintidle/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xprintidle";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "g0hl1n";
+    repo = "xprintidle";
+    rev = version;
+    sha256 = "sha256-bafDUZoSFsJ3g6mtLCRechGizfrWg2qW2vnlfIzj7mQ=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    xorg.libXScrnSaver
+    xorg.libX11
+    xorg.libXext
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/g0hl1n/xprintidle";
+    description = "A utility that queries the X server for the user's idle time and prints it to stdout";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.linux;
+    mainProgram = "xprintidle";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xprompt/default.nix b/nixpkgs/pkgs/tools/X11/xprompt/default.nix
new file mode 100644
index 000000000000..15f7b337c879
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xprompt/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, writeText
+, fontconfig
+, libX11
+, libXft
+, libXinerama
+, conf ? null
+, nix-update-script
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xprompt";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "phillbush";
+    repo = "xprompt";
+    rev = "v${version}";
+    sha256 = "sha256-pOayKngUlrMY3bFsP4Fi+VsOLKCUQU3tdkZ+0OY1SCo=";
+  };
+
+  buildInputs = [
+    fontconfig
+    libX11
+    libXft
+    libXinerama
+  ];
+
+  postPatch = with lib;
+    let
+      configFile =
+        if isDerivation conf || builtins.isPath conf
+        then conf else writeText "config.h" conf;
+    in
+    optionalString (conf != null) "cp ${configFile} config.h";
+
+  makeFlags = [ "CC:=$(CC)" "PREFIX=$(out)" ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A dmenu rip-off with contextual completion";
+    longDescription = ''
+      XPrompt is a prompt for X. XPrompt features a text input field where the
+      user can type in a text subject to tab-completion.
+    '';
+    homepage = "https://github.com/phillbush/xprompt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.unix;
+    mainProgram = "xprompt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xrectsel/default.nix b/nixpkgs/pkgs/tools/X11/xrectsel/default.nix
new file mode 100644
index 000000000000..7eef352aea53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xrectsel/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xrectsel";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "ropery";
+    repo = "xrectsel";
+    rev = version;
+    sha256 = "0prl4ky3xzch6xcb673mcixk998d40ngim5dqc5374b1ls2r6n7l";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libX11 ];
+
+  meta = with lib; {
+    description = "Print the geometry of a rectangular screen region";
+    homepage = "https://github.com/ropery/xrectsel";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.linux;
+    mainProgram = "xrectsel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xrestop/default.nix b/nixpkgs/pkgs/tools/X11/xrestop/default.nix
new file mode 100644
index 000000000000..b6d04c790843
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xrestop/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, xorg, pkg-config, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "xrestop";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://xorg.freedesktop.org/archive/individual/app/xrestop-${version}.tar.xz";
+    hash = "sha256-Li7BEcSyeYtdwtwrPsevT2smGUbpA7jhTbBGgx0gOyk=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ xorg.libX11 xorg.libXres xorg.libXext ncurses ];
+
+  meta = with lib; {
+    description = "A 'top' like tool for monitoring X Client server resource usage";
+    homepage = "https://gitlab.freedesktop.org/xorg/app/xrestop";
+    maintainers = with maintainers; [ qyliss ];
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+    mainProgram = "xrestop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xsecurelock/default.nix b/nixpkgs/pkgs/tools/X11/xsecurelock/default.nix
new file mode 100644
index 000000000000..c011aa8aa499
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xsecurelock/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, libX11, libXcomposite, libXft, libXmu, libXrandr, libXext, libXScrnSaver
+, pam, apacheHttpd, pamtester, xscreensaver, coreutils, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "xsecurelock";
+  version = "1.9.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "xsecurelock";
+    rev = "v${version}";
+    sha256 = "sha256-OPasi5zmvmcWnVCj/dU2KprzNmar51zDElD23750yk4=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook pkg-config makeWrapper
+  ];
+
+  buildInputs = [
+    libX11 libXcomposite libXft libXmu libXrandr libXext libXScrnSaver
+    pam apacheHttpd pamtester
+  ];
+
+  configureFlags = [
+    "--with-pam-service-name=login"
+    "--with-xscreensaver=${xscreensaver}/libexec/xscreensaver"
+  ];
+
+  preConfigure = ''
+    cat > version.c <<'EOF'
+      const char *const git_version = "${version}";
+    EOF
+  '';
+
+  postInstall = ''
+    wrapProgram $out/libexec/xsecurelock/saver_blank --prefix PATH : ${coreutils}/bin
+  '';
+
+  meta = with lib; {
+    description = "X11 screen lock utility with security in mind";
+    homepage = "https://github.com/google/xsecurelock";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.unix;
+    mainProgram = "xsecurelock";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xsettingsd/default.nix b/nixpkgs/pkgs/tools/X11/xsettingsd/default.nix
new file mode 100644
index 000000000000..0fe260e3db1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xsettingsd/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xsettingsd";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "derat";
+    repo = "xsettingsd";
+    rev = "v${version}";
+    sha256 = "sha256-CIYshZqJICuL8adKHIN4R6nudaqWOCK2UPrGhsKf9pE=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ libX11 ];
+
+  # we end up with symlinked unit files if we don't move them around ourselves
+  postFixup = ''
+    rm -r $out/lib/systemd
+    mv $out/share/systemd $out/lib
+  '';
+
+  meta = with lib; {
+    description = "Provides settings to X11 applications via the XSETTINGS specification";
+    homepage = "https://github.com/derat/xsettingsd";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ romildo ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xssstate/default.nix b/nixpkgs/pkgs/tools/X11/xssstate/default.nix
new file mode 100644
index 000000000000..53fd1138c29d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xssstate/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchgit
+, libX11
+, libXScrnSaver
+}:
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xssstate";
+  version = "1.1-unstable-2022-09-24";
+
+  src = fetchgit {
+    url = "https://git.suckless.org/xssstate/";
+    rev = "5d8e9b49ce2970f786f1e5aa12bbaae83900453f";
+    hash = "sha256-Aor12tU1I/qNZCdBhZcvNK1FWFh0HYK8CEI29X5yoeA=";
+  };
+
+  buildInputs = [
+    libX11
+    libXScrnSaver
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "VERSION=${finalAttrs.version}"
+  ];
+
+  meta = with lib; {
+    description = "A simple tool to retrieve the X screensaver state";
+    license = licenses.mit;
+    maintainers = with maintainers; [ onemoresuza ];
+    platforms = platforms.linux;
+    mainProgram = "xssstate";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/X11/xtrace/default.nix b/nixpkgs/pkgs/tools/X11/xtrace/default.nix
new file mode 100644
index 000000000000..de1ea88266e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xtrace/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, autoreconfHook, fetchFromGitLab, libX11, xauth, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "xtrace";
+  version = "1.4.0";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "debian";
+    repo = pname;
+    rev = "xtrace-${version}";
+    sha256 = "1yff6x847nksciail9jly41mv70sl8sadh0m5d847ypbjmxcwjpq";
+  };
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper ];
+  buildInputs = [ libX11 ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/xtrace" \
+        --prefix PATH ':' "${xauth}/bin"
+  '';
+
+  meta = with lib; {
+    homepage = "https://salsa.debian.org/debian/xtrace";
+    description = "Tool to trace X11 protocol connections";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ viric ];
+    platforms = with platforms; linux;
+    mainProgram = "xtrace";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xtruss/default.nix b/nixpkgs/pkgs/tools/X11/xtruss/default.nix
new file mode 100644
index 000000000000..790312335ab2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xtruss/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, cmake, halibut }:
+
+stdenv.mkDerivation rec {
+  pname = "xtruss";
+  version = "20211025.c25bf48";
+
+  src = fetchurl {
+    url = "https://www.chiark.greenend.org.uk/~sgtatham/xtruss/${pname}-${version}.tar.gz";
+    sha256 = "sha256-ikuKHtXEn2UVLE62l7qD9qc9ZUk6jiAqj5ru36vgdHk=";
+  };
+
+  nativeBuildInputs = [ cmake halibut ];
+
+  meta = with lib; {
+    description = "easy-to-use X protocol tracing program";
+    homepage = "https://www.chiark.greenend.org.uk/~sgtatham/xtruss";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "xtruss";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xvkbd/default.nix b/nixpkgs/pkgs/tools/X11/xvkbd/default.nix
new file mode 100644
index 000000000000..7ed6b355a799
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xvkbd/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, libXt, libXaw, libXtst
+, libXi, libXpm, pkg-config, xorgproto, Xaw3d }:
+
+stdenv.mkDerivation rec {
+  pname = "xvkbd";
+  version = "4.1";
+  src = fetchurl {
+    url = "http://t-sato.in.coocan.jp/xvkbd/xvkbd-${version}.tar.gz";
+    sha256 = "1x5yldv9y99cw5hzzs73ygdn1z80zns9hz0baa355r711zghfbcm";
+  };
+
+  nativeBuildInputs = [ pkg-config ] ;
+  buildInputs = [ libXt libXaw libXtst xorgproto libXi Xaw3d libXpm ];
+
+  makeFlags = [
+    # avoid default libXt location
+    "appdefaultdir=${placeholder "out"}/share/X11/app-defaults"
+    "datarootdir=${placeholder "out"}/share"
+  ];
+
+  preInstall = ''
+    # workaround absence of libXt in $DESTDIR location.
+    mkdir -p $out/share/X11
+  '';
+
+  meta = with lib; {
+    description = "Virtual keyboard for X window system";
+    longDescription = ''
+      xvkbd is a virtual (graphical) keyboard program for X Window System which provides
+      facility to enter characters onto other clients (softwares) by clicking on a
+      keyboard displayed on the screen.
+    '';
+    homepage = "http://t-sato.in.coocan.jp/xvkbd";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.bennofs ];
+    platforms = platforms.linux;
+    mainProgram = "xvkbd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xwallpaper/default.nix b/nixpkgs/pkgs/tools/X11/xwallpaper/default.nix
new file mode 100644
index 000000000000..df93e10fe194
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xwallpaper/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, autoreconfHook
+, installShellFiles
+, pixman
+, xcbutil
+, xcbutilimage
+, libseccomp
+, libjpeg
+, libpng
+, libXpm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xwallpaper";
+  version = "0.7.4";
+
+  src = fetchFromGitHub {
+    owner = "stoeckmann";
+    repo = "xwallpaper";
+    rev = "v${version}";
+    sha256 = "sha256-onxneLmXs1rYwpTzcnn+rbDboWVoEQgtGMHx/bMPRa8=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook installShellFiles ];
+  buildInputs = [ pixman xcbutilimage xcbutil libseccomp libjpeg libpng libXpm ];
+
+  postInstall = ''
+    installShellCompletion --zsh _xwallpaper
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/stoeckmann/xwallpaper";
+    description = "Utility for setting wallpapers in X";
+    license = licenses.isc;
+    maintainers = with maintainers; [ ivar ];
+    platforms = platforms.linux;
+    mainProgram = "xwallpaper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xwinmosaic/default.nix b/nixpkgs/pkgs/tools/X11/xwinmosaic/default.nix
new file mode 100644
index 000000000000..1189fd8f86aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xwinmosaic/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, gtk2, cmake, pkg-config, libXdamage }:
+
+stdenv.mkDerivation rec {
+  version = "0.4.2";
+  pname = "xwinmosaic";
+
+  src = fetchFromGitHub {
+    owner = "soulthreads";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "16qhrpgn84fz0q3nfvaz5sisc82zk6y7c0sbvbr69zfx5fwbs1rr";
+  };
+
+  patches = [
+    # Pull upstream fix for -fno-common toolchains like upstream gcc-10:
+    #  https://github.com/soulthreads/xwinmosaic/pull/33
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/soulthreads/xwinmosaic/commit/a193a3f30850327066e5a93b29316cba2735e10d.patch";
+      sha256 = "0qpk802j5x6bsfvj6jqw1nz482jynwyk7yrrh4bsziwc53khm95q";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config cmake ];
+  buildInputs = [ gtk2 libXdamage ];
+
+  meta = {
+    description = "X window switcher drawing a colourful grid";
+    license = lib.licenses.bsd2 ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+    mainProgram = "xwinmosaic";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xwinwrap/default.nix b/nixpkgs/pkgs/tools/X11/xwinwrap/default.nix
new file mode 100644
index 000000000000..d36d2c51de5e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xwinwrap/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchbzr, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "xwinwrap";
+  version = "4";
+
+  src = fetchbzr {
+    url = "https://code.launchpad.net/~shantanu-goel/xwinwrap/devel";
+    rev = version;
+    sha256 = "1annhqc71jcgx5zvcy31c1c488ygx4q1ygrwyy2y0ww743smbchw";
+  };
+
+  buildInputs = [
+    xorg.libX11
+    xorg.libXext
+    xorg.libXrender
+  ];
+
+  buildPhase = if stdenv.hostPlatform.system == "x86_64-linux" then ''
+    make all64
+  '' else if stdenv.hostPlatform.system == "i686-linux" then ''
+    make all32
+  '' else throw "xwinwrap is not supported on ${stdenv.hostPlatform.system}";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv */xwinwrap $out/bin
+  '';
+
+  meta = with lib; {
+    description = "A utility that allows you to use an animated X window as the wallpaper";
+    longDescription = ''
+      XWinWrap is a small utility written a loooong time ago that allowed you to
+      stick most of the apps to your desktop background. What this meant was you
+      could use an animated screensaver (like glmatrix, electric sheep, etc) or
+      even a movie, and use it as your wallpaper. But only one version of this
+      app was ever released, and it had a few problems, like:
+
+      - Well, sticking didn’t work. So if you did a “minimize all†or “go to
+      desktop†kind of thing, your “wallpaper†got minimized as well.
+
+      - The geometry option didn’t work, so you could not create, e.g., a small
+      matrix window surrounded by your original wallpaper.
+
+      Seeing no-one picking it up, I decided to give it a bit of polish last
+      weekend by fixing the above problems and also add a few features. And here
+      it is, in its new avatar “Shantz XWinWrapâ€.
+    '';
+    license = licenses.hpnd;
+    homepage = "https://shantanugoel.com/2008/09/03/shantz-xwinwrap/";
+    maintainers = with maintainers; [ infinisil ];
+    platforms = platforms.linux;
+    mainProgram = "xwinwrap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xzoom/default.nix b/nixpkgs/pkgs/tools/X11/xzoom/default.nix
new file mode 100644
index 000000000000..0e368651000d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xzoom/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, libX11, libXext, libXt, imake, gccmakedep}:
+
+stdenv.mkDerivation rec {
+  pname = "xzoom";
+  version = "0.3";
+  patch = "24";
+
+  # or fetchFromGitHub(owner,repo,rev) or fetchgit(rev)
+  src = fetchurl {
+    url = "http://www.ibiblio.org/pub/linux/libs/X/${pname}-${version}.tgz";
+    sha256 = "0jzl5py4ny4n4i58lxx2hdwq9zphqf7h3m14spl3079y5mlzssxj";
+  };
+  patches = [
+    (fetchurl {
+       url = "http://http.debian.net/debian/pool/main/x/xzoom/xzoom_${version}-${patch}.diff.gz";
+       sha256 = "0zhc06whbvaz987bzzzi2bz6h9jp6rv812qs7b71drivvd820qbh";
+    })
+  ];
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ libX11 libXext libXt ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "BINDIR=$(out)/bin"
+    "MANPATH=$(out)/share/man"
+  ];
+  installTargets = [ "install" "install.man" ];
+
+  meta = {
+    description = "An X11 screen zoom tool";
+    license = lib.licenses.free ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+    mainProgram = "xzoom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/acme-sh/default.nix b/nixpkgs/pkgs/tools/admin/acme-sh/default.nix
new file mode 100644
index 000000000000..6f82567ab02d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/acme-sh/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, coreutils
+, curl
+, dnsutils
+, gnugrep
+, gnused
+, iproute2
+, makeWrapper
+, openssl
+, socat
+, unixtools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "acme.sh";
+  version = "3.0.7";
+
+  src = fetchFromGitHub {
+    owner = "acmesh-official";
+    repo = "acme.sh";
+    rev = "refs/tags/${version}";
+    hash = "sha256-ymj97aWWOLen7YEfG72N2nyxlwuB/Su4+pgpWUuckgc=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  installPhase = let
+    binPath = lib.makeBinPath [
+      coreutils
+      curl
+      dnsutils
+      gnugrep
+      gnused
+      openssl
+      socat
+      (if stdenv.isLinux then iproute2 else unixtools.netstat)
+    ];
+  in
+    ''
+    runHook preInstall
+
+    mkdir -p $out $out/bin $out/libexec
+    cp -R $src/* $_
+    makeWrapper $out/libexec/acme.sh $out/bin/acme.sh \
+      --prefix PATH : "${binPath}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://acme.sh/";
+    changelog = "https://github.com/acmesh-official/acme.sh/releases/tag/${version}";
+    description = "A pure Unix shell script implementing ACME client protocol";
+    longDescription = ''
+      An ACME Shell script: acme.sh
+
+      - An ACME protocol client written purely in Shell (Unix shell) language.
+      - Full ACME protocol implementation.
+      - Support ECDSA certs
+      - Support SAN and wildcard certs
+      - Simple, powerful and very easy to use. You only need 3 minutes to learn it.
+      - Bash, dash and sh compatible.
+      - Purely written in Shell with no dependencies on python.
+      - Just one script to issue, renew and install your certificates automatically.
+      - DOES NOT require root/sudoer access.
+      - Docker ready
+      - IPv6 ready
+      - Cron job notifications for renewal or error etc.
+    '';
+    license = licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ mkaito ] ++ teams.serokell.members;
+    inherit (coreutils.meta) platforms;
+    mainProgram = "acme.sh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/afterburn/default.nix b/nixpkgs/pkgs/tools/admin/afterburn/default.nix
new file mode 100644
index 000000000000..bd104a2687d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/afterburn/default.nix
@@ -0,0 +1,38 @@
+{ lib, openssl, pkg-config, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "afterburn";
+  version = "5.5.1";
+
+  src = fetchFromGitHub {
+    owner = "coreos";
+    repo = "afterburn";
+    rev = "v${version}";
+    sha256 = "sha256-3+FlW/y8EScJKaFvxa/hOlDF18kEtz2XyMdrDZgcMXs=";
+  };
+
+  cargoHash = "sha256-DTFvaXPr21qvx1FA1phueRxTgcrfhGgb9Vktah372Uo=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ];
+
+  postPatch = ''
+    substituteInPlace ./systemd/afterburn-checkin.service --replace /usr/bin $out/bin
+    substituteInPlace ./systemd/afterburn-firstboot-checkin.service --replace /usr/bin $out/bin
+    substituteInPlace ./systemd/afterburn-sshkeys@.service.in --replace /usr/bin $out/bin
+    substituteInPlace ./systemd/afterburn.service --replace /usr/bin $out/bin
+  '';
+
+  postInstall = ''
+    DEFAULT_INSTANCE=root PREFIX= DESTDIR=$out make install-units
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/coreos/ignition";
+    description = "A one-shot cloud provider agent";
+    license = licenses.asl20;
+    maintainers = [ maintainers.arianvp ];
+    platforms = platforms.linux;
+    mainProgram = "afterburn";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aliyun-cli/default.nix b/nixpkgs/pkgs/tools/admin/aliyun-cli/default.nix
new file mode 100644
index 000000000000..e45faef00cbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aliyun-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "aliyun-cli";
+  version = "3.0.198";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "aliyun";
+    repo = pname;
+    fetchSubmodules = true;
+    sha256 = "sha256-kIFB1wFVZTFr4tqSiBvgwqGLVq2UmG58vAqhug8giE0=";
+  };
+
+  vendorHash = "sha256-NoismcBQtVv7QOIGOqRsmau9zY+MkCAl46ll2y0hbW4=";
+
+  subPackages = [ "main" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/aliyun/aliyun-cli/cli.Version=${version}" ];
+
+  postInstall = ''
+    mv $out/bin/main $out/bin/aliyun
+  '';
+
+  meta = with lib; {
+    description = "Tool to manage and use Alibaba Cloud resources through a command line interface";
+    homepage = "https://github.com/aliyun/aliyun-cli";
+    changelog = "https://github.com/aliyun/aliyun-cli/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ornxka ];
+    mainProgram = "aliyun";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/amazon-ec2-utils/default.nix b/nixpkgs/pkgs/tools/admin/amazon-ec2-utils/default.nix
new file mode 100644
index 000000000000..ed472b2a930e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/amazon-ec2-utils/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, bash
+, python3
+, installShellFiles
+, gawk
+, curl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "amazon-ec2-utils";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "amazonlinux";
+    repo = "amazon-ec2-utils";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Yr6pVwyvyVGV4xrjL7VFSkRH8d1w8VLPMTVjXfneJUM=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  strictDeps = true;
+
+  buildInputs = [
+    bash
+    python3
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  installPhase = ''
+    install -Dm755 -t $out/bin/ ebsnvme-id
+    install -Dm755 -t $out/bin/ ec2-metadata
+    install -Dm755 -t $out/bin/ ec2nvme-nsid
+    install -Dm755 -t $out/bin/ ec2udev-vbd
+
+    install -Dm644 -t $out/lib/udev/rules.d/ 51-ec2-hvm-devices.rules
+    install -Dm644 -t $out/lib/udev/rules.d/ 51-ec2-xen-vbd-devices.rules
+    install -Dm644 -t $out/lib/udev/rules.d/ 53-ec2-read-ahead-kb.rules
+    install -Dm644 -t $out/lib/udev/rules.d/ 70-ec2-nvme-devices.rules
+    install -Dm644 -t $out/lib/udev/rules.d/ 60-cdrom_id.rules
+
+    installManPage doc/*.8
+  '';
+
+  postFixup = ''
+    for i in $out/etc/udev/rules.d/*.rules $out/lib/udev/rules.d/*.rules ; do
+      substituteInPlace "$i" \
+        --replace '/usr/sbin' "$out/bin" \
+        --replace '/bin/awk' '${gawk}/bin/awk'
+    done
+
+    substituteInPlace "$out/bin/ec2-metadata" \
+      --replace 'curl' '${curl}/bin/curl'
+  '';
+
+  doInstallCheck = true;
+
+  # We cannot run
+  #     ec2-metadata --help
+  # because it actually checks EC2 metadata even if --help is given
+  # so it won't work in the test sandbox.
+  installCheckPhase = ''
+    $out/bin/ebsnvme-id --help
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/amazonlinux/amazon-ec2-utils/releases/tag/v${version}";
+    description = "Contains a set of utilities and settings for Linux deployments in EC2";
+    homepage = "https://github.com/amazonlinux/amazon-ec2-utils";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ketzacoatl thefloweringash anthonyroussel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix b/nixpkgs/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix
new file mode 100644
index 000000000000..e541d75c3739
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, amazon-ecr-credential-helper }:
+
+buildGoModule rec {
+  pname = "amazon-ecr-credential-helper";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "awslabs";
+    repo = "amazon-ecr-credential-helper";
+    rev = "v${version}";
+    sha256 = "sha256-Q+YAfCsq4/PoSzYMFhLDAsAfxlU7XR/vouHo42/D2eM=";
+  };
+
+  vendorHash = null;
+
+  modRoot = "./ecr-login";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/awslabs/amazon-ecr-credential-helper/ecr-login/version.Version=${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = amazon-ecr-credential-helper;
+    command = "docker-credential-ecr-login -v";
+  };
+
+  meta = with lib; {
+    description = "The Amazon ECR Docker Credential Helper is a credential helper for the Docker daemon that makes it easier to use Amazon Elastic Container Registry";
+    homepage = "https://github.com/awslabs/amazon-ecr-credential-helper";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+    mainProgram = "docker-credential-ecr-login";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/analog/default.nix b/nixpkgs/pkgs/tools/admin/analog/default.nix
new file mode 100644
index 000000000000..187dc6234cc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/analog/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "analog";
+  version = "6.0.17";
+
+  src = fetchFromGitHub {
+    owner = "c-amie";
+    repo = "analog-ce";
+    rev = version;
+    sha256 = "sha256-89nNkIUKzlcKKy0TfthA9T27A446Fqv9hYllGjYkDP4=";
+  };
+
+  postPatch = ''
+    sed -i src/anlghead.h \
+      -e "s|#define DEFAULTCONFIGFILE .*|#define DEFAULTCONFIGFILE \"$out/etc/analog.cfg\"|g" \
+      -e "s|#define LANGDIR .*|#define LANGDIR \"$out/share/${pname}/lang/\"|g"
+    substituteInPlace src/Makefile --replace "gcc" "${stdenv.cc.targetPrefix}cc"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/etc $out/share/doc/$pname $out/share/man/man1 $out/share/$pname
+    mv analog $out/bin/
+    cp examples/big.cfg $out/etc/analog.cfg
+    mv analog.man $out/share/man/man1/analog.1
+    mv docs $out/share/doc/$pname/manual
+    mv how-to $out/share/doc/$pname/
+    mv lang images examples $out/share/$pname/
+  '';
+
+  meta = {
+    homepage = "https://www.c-amie.co.uk/software/analog/";
+    license = lib.licenses.gpl2;
+    description = "Powerful tool to generate web server statistics";
+    platforms = lib.platforms.all;
+    mainProgram = "analog";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/admin/ansible/doctor.nix b/nixpkgs/pkgs/tools/admin/ansible/doctor.nix
new file mode 100644
index 000000000000..ef7ef6aabb85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ansible/doctor.nix
@@ -0,0 +1,67 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ansible-doctor";
+  version = "2.0.4";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "thegeeklab";
+    repo = "ansible-doctor";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-nZv1PdR0kGrke2AjcDWjDWBdsw64UpHYFNDFAe/UoJo=";
+  };
+
+  patches = [
+    # https://github.com/thegeeklab/ansible-doctor/pull/541
+    (fetchpatch {
+      name = "poetry-dynamic-versioning-pep517.patch";
+      url = "https://github.com/thegeeklab/ansible-doctor/commit/b77ba9dccaef4b386bd54b128136c948665eb61a.patch";
+      hash = "sha256-XfdTkRk9B857V5DQnxlbwxTb098YwHzKGzNQBTQzWCM=";
+    })
+  ];
+
+  pythonRelaxDeps = true;
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    poetry-dynamic-versioning
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    anyconfig
+    appdirs
+    colorama
+    environs
+    jinja2
+    jsonschema
+    nested-lookup
+    pathspec
+    python-json-logger
+    ruamel-yaml
+  ];
+
+  postInstall = ''
+    rm $out/lib/python*/site-packages/LICENSE
+  '';
+
+  # Module has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "ansibledoctor"
+  ];
+
+  meta = with lib; {
+    description = "Annotation based documentation for your Ansible roles";
+    homepage = "https://github.com/thegeeklab/ansible-doctor";
+    changelog = "https://github.com/thegeeklab/ansible-doctor/releases/tag/v${version}";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ tboerger ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/ansible/later.nix b/nixpkgs/pkgs/tools/admin/ansible/later.nix
new file mode 100644
index 000000000000..733981ecd928
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ansible/later.nix
@@ -0,0 +1,87 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ansible-later";
+  version = "3.3.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "thegeeklab";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-7k81eEcM+BXNrln6+Lu0+1LjsZdYkUidrRQCdlBbQB8=";
+  };
+
+  patches = [
+    # https://github.com/thegeeklab/ansible-later/pull/658
+    (fetchpatch {
+      name = "poetry-dynamic-versioning-pep517.patch";
+      url = "https://github.com/thegeeklab/ansible-later/commit/a2c278fb45769648df1439df5bb25883dddfc58a.patch";
+      hash = "sha256-++CiwwHZoaPC8XHaYbNQeU3zqEi2a4eIYbuSQkO0jTI=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace " --cov=ansiblelater --cov-report=xml:coverage.xml --cov-report=term --no-cov-on-fail" ""
+  '';
+
+  pythonRelaxDeps = [
+    "flake8"
+    "jsonschema"
+    "pathspec"
+    "python-json-logger"
+    "PyYAML"
+    "toolz"
+    "unidiff"
+    "yamllint"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    poetry-dynamic-versioning
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    ansible
+    ansible-core
+    anyconfig
+    appdirs
+    colorama
+    flake8
+    jsonschema
+    nested-lookup
+    pathspec
+    python-json-logger
+    pyyaml
+    toolz
+    unidiff
+    yamllint
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  postInstall = ''
+    rm $out/lib/python*/site-packages/LICENSE
+  '';
+
+  pythonImportsCheck = [
+    "ansiblelater"
+  ];
+
+  meta = with lib; {
+    description = "Best practice scanner for Ansible roles and playbooks";
+    homepage = "https://github.com/thegeeklab/ansible-later";
+    changelog = "https://github.com/thegeeklab/ansible-later/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tboerger ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/ansible/lint.nix b/nixpkgs/pkgs/tools/admin/ansible/lint.nix
new file mode 100644
index 000000000000..9e99a11777dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ansible/lint.nix
@@ -0,0 +1,96 @@
+{ lib
+, python3
+, fetchPypi
+, ansible
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ansible-lint";
+  version = "24.2.0";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-a8XWJz8zcR7G03Df5f2+l6ZLTDbCp6GaJJQBMm6wNhY=";
+  };
+
+  postPatch = ''
+    # it is fine if lint tools are missing
+    substituteInPlace conftest.py \
+      --replace "sys.exit(1)" ""
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    setuptools-scm
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "ruamel.yaml"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    # https://github.com/ansible/ansible-lint/blob/master/.config/requirements.in
+    ansible-core
+    ansible-compat
+    black
+    filelock
+    jsonschema
+    packaging
+    pyyaml
+    rich
+    ruamel-yaml
+    subprocess-tee
+    wcmatch
+    yamllint
+  ];
+
+  # tests can't be easily run without installing things from ansible-galaxy
+  doCheck = false;
+
+  nativeCheckInputs = with python3.pkgs; [
+    flaky
+    pytest-xdist
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    # ansible wants to write to $HOME and crashes if it can't
+    export HOME=$(mktemp -d)
+    export PATH=$PATH:${lib.makeBinPath [ ansible ]}
+
+    # create a working ansible-lint executable
+    export PATH=$PATH:$PWD/src/ansiblelint
+    ln -rs src/ansiblelint/__main__.py src/ansiblelint/ansible-lint
+    patchShebangs src/ansiblelint/__main__.py
+
+    # create symlink like in the git repo so test_included_tasks does not fail
+    ln -s ../roles examples/playbooks/roles
+  '';
+
+  disabledTests = [
+    # requires network
+    "test_cli_auto_detect"
+    "test_install_collection"
+    "test_prerun_reqs_v1"
+    "test_prerun_reqs_v2"
+    "test_require_collection_wrong_version"
+    # re-execs ansible-lint which does not works correct
+    "test_custom_kinds"
+    "test_run_inside_role_dir"
+    "test_run_multiple_role_path_no_trailing_slash"
+    "test_runner_exclude_globs"
+    "test_discover_lintables_umlaut"
+  ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ ansible ]}" ];
+
+  meta = with lib; {
+    description = "Best practices checker for Ansible";
+    homepage = "https://github.com/ansible/ansible-lint";
+    changelog = "https://github.com/ansible/ansible-lint/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sengaya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/auth0-cli/default.nix b/nixpkgs/pkgs/tools/admin/auth0-cli/default.nix
new file mode 100644
index 000000000000..44de0a5058b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/auth0-cli/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "auth0-cli";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "auth0";
+    repo = "auth0-cli";
+    rev = "v${version}";
+    hash = "sha256-EJH+Vn7wvrQ2umjmSXHjbgf2uf/kRbDoo0usTMqDFo4=";
+  };
+
+  vendorHash = "sha256-T8y7MPFebDU6skfz4Rqo0ElRRaldtfexOl99D7h+orU=";
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/auth0/auth0-cli/internal/buildinfo.Version=v${version}"
+    "-X github.com/auth0/auth0-cli/internal/buildinfo.Revision=0000000"
+  ];
+
+  preCheck = ''
+    # Feed in all tests for testing
+    # This is because subPackages above limits what is built to just what we
+    # want but also limits the tests
+    unset subPackages
+  '';
+
+  subPackages = [ "cmd/auth0" ];
+
+  meta = with lib; {
+    description = "Supercharge your developer workflow";
+    homepage = "https://auth0.github.io/auth0-cli";
+    changelog = "https://github.com/auth0/auth0-cli/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthewcroughan ];
+    mainProgram = "auth0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-assume-role/default.nix b/nixpkgs/pkgs/tools/admin/aws-assume-role/default.nix
new file mode 100644
index 000000000000..29dcac28c1e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-assume-role/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchFromGitHub
+, buildGoPackage
+}:
+
+buildGoPackage rec {
+  pname = "aws-assume-role";
+  version = "0.3.2";
+
+  outputs = [ "out" "doc" ];
+
+  goPackagePath = "github.com/remind101/assume-role";
+
+  src = fetchFromGitHub {
+    owner = "remind101";
+    repo = "assume-role";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-7+9qi9lYzv1YCFhUyla+5Gqs5nBUiiazhFwiqHzMFd4=";
+  };
+
+  postInstall = ''
+    install -Dm444 -t $out/share/doc/$name ./go/src/${goPackagePath}/README.md
+  '';
+
+  meta = with lib; {
+    description = "Easily assume AWS roles in your terminal";
+    homepage = "https://github.com/remind101/assume-role";
+    license = licenses.bsd2;
+    mainProgram = "assume-role";
+    maintainers = with lib.maintainers; [ williamvds ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-encryption-sdk-cli/default.nix b/nixpkgs/pkgs/tools/admin/aws-encryption-sdk-cli/default.nix
new file mode 100644
index 000000000000..2bc331cc1874
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-encryption-sdk-cli/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, python3
+, fetchPypi
+, nix-update-script
+, testers
+, aws-encryption-sdk-cli
+}:
+
+let
+  localPython = python3.override {
+    self = localPython;
+    packageOverrides = final: prev: {
+      urllib3 = prev.urllib3.overridePythonAttrs (prev: rec {
+        pyproject = true;
+        version = "1.26.18";
+        nativeBuildInputs = with final; [ setuptools ];
+        src = prev.src.override {
+          inherit version;
+          hash = "sha256-+OzBu6VmdBNFfFKauVW/jGe0XbeZ0VkGYmFxnjKFgKA=";
+        };
+      });
+    };
+  };
+in
+
+localPython.pkgs.buildPythonApplication rec {
+  pname = "aws-encryption-sdk-cli";
+  version = "4.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-OCbt0OkDVfpzUIogbsKzaPAle2L6l6N3cmZoS2hEaSM=";
+  };
+
+  propagatedBuildInputs = with localPython.pkgs; [
+    attrs
+    aws-encryption-sdk
+    base64io
+    urllib3
+  ];
+
+  doCheck = true;
+
+  nativeCheckInputs = with localPython.pkgs; [
+    mock
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # requires networking
+    "test/integration"
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = aws-encryption-sdk-cli;
+      command = "aws-encryption-cli --version";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://aws-encryption-sdk-cli.readthedocs.io/";
+    changelog = "https://github.com/aws/aws-encryption-sdk-cli/blob/v${version}/CHANGELOG.rst";
+    description = "CLI wrapper around aws-encryption-sdk-python";
+    license = licenses.asl20;
+    mainProgram = "aws-encryption-cli";
+    maintainers = with maintainers; [ anthonyroussel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-env/default.nix b/nixpkgs/pkgs/tools/admin/aws-env/default.nix
new file mode 100644
index 000000000000..c16d8374c9b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-env/default.nix
@@ -0,0 +1,26 @@
+{ buildGoPackage, fetchFromGitHub, lib }:
+
+buildGoPackage rec {
+  pname = "aws-env";
+  version = "0.5";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/Droplr/aws-env";
+
+  src = fetchFromGitHub {
+    owner = "Droplr";
+    repo = pname;
+    inherit rev;
+    sha256 = "sha256-dzXgQW5noWT7u276tlwhvgvu2J8VYrOdW9vidZ3W3t0=";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Secure way to handle environment variables in Docker and envfile with AWS Parameter Store";
+    homepage = "https://github.com/Droplr/aws-env";
+    license = licenses.mit;
+    maintainers = with maintainers; [ srhb ];
+    mainProgram = "aws-env";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-env/deps.nix b/nixpkgs/pkgs/tools/admin/aws-env/deps.nix
new file mode 100644
index 000000000000..891a6ecb5962
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-env/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev = "5f03c87445c9dcd6aa831a76a77170919265aa97";
+      sha256 = "146rwinw2x4r0f2pixv62b7mmhvnnfvvjmfaj6dqjxrhp0imcxdi";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/admin/aws-google-auth/default.nix b/nixpkgs/pkgs/tools/admin/aws-google-auth/default.nix
new file mode 100644
index 000000000000..545e22f6b58a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-google-auth/default.nix
@@ -0,0 +1,83 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, beautifulsoup4
+, boto3
+, configparser
+, filelock
+, keyring
+, keyrings-alt
+, lxml
+, pillow
+, requests
+, six
+, tabulate
+, tzlocal
+, nose
+, mock
+, setuptools
+, aws-google-auth
+, testers
+, withU2F ? false, python-u2flib-host
+}:
+
+buildPythonApplication rec {
+  pname = "aws-google-auth";
+  version = "0.0.38";
+
+  pyproject = true;
+
+  # Pypi doesn't ship the tests, so we fetch directly from GitHub
+  # https://github.com/cevoaustralia/aws-google-auth/issues/120
+  src = fetchFromGitHub {
+    owner = "cevoaustralia";
+    repo = "aws-google-auth";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-/Xe4RDA9sBEsBBV1VP91VX0VfO8alK8L70m9WrB7qu4=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    beautifulsoup4
+    boto3
+    configparser
+    filelock
+    keyring
+    keyrings-alt
+    lxml
+    pillow
+    requests
+    six
+    tabulate
+    tzlocal
+  ] ++ lib.optional withU2F python-u2flib-host;
+
+  nativeCheckInputs = [
+    mock
+    nose
+  ];
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  # with pyproject the tests aren't attempted
+  # without pyproject the tests try to access internet
+  doCheck = false;
+
+  pythonImportsCheck = [ "aws_google_auth" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = aws-google-auth;
+  };
+
+  meta = with lib; {
+    description = "Acquire AWS STS (temporary) credentials via Google Apps SAML Single Sign On";
+    homepage = "https://github.com/cevoaustralia/aws-google-auth";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix b/nixpkgs/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix
new file mode 100644
index 000000000000..01d5b9479aa7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "aws-lambda-runtime-interface-emulator";
+  version = "1.15";
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = "aws-lambda-runtime-interface-emulator";
+    rev = "v${version}";
+    sha256 = "sha256-ogsWAAm/rEol+UFBqgMSowb78BbQKeGyeJ7UVp/p4js=";
+  };
+
+  vendorHash = "sha256-8HRYGpMNZuPBzhp73lGvbJgA5WivMNrBa2wUw/+LX5M=";
+
+  # disabled because I lack the skill
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Locally test Lambda functions packaged as container images";
+    homepage = "https://github.com/aws/aws-lambda-runtime-interface-emulator";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ teto ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-mfa/default.nix b/nixpkgs/pkgs/tools/admin/aws-mfa/default.nix
new file mode 100644
index 000000000000..53b3a8d4a474
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-mfa/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, fetchpatch
+, boto3
+}:
+
+buildPythonApplication rec {
+  pname = "aws-mfa";
+  version = "0.0.12";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "broamski";
+    repo = "aws-mfa";
+    rev = version;
+    hash = "sha256-XhnDri7QV8esKtx0SttWAvevE3SH2Yj2YMq/P4K6jK4=";
+  };
+
+  patches = [
+    # https://github.com/broamski/aws-mfa/pull/87
+    (fetchpatch {
+      name = "remove-duplicate-script.patch";
+      url = "https://github.com/broamski/aws-mfa/commit/0d1624022c71cb92bb4436964b87f0b2ffd677ec.patch";
+      hash = "sha256-Bv8ffPbDysz87wLg2Xip+0yxaBfbEmu+x6fSXI8BVjA=";
+    })
+  ];
+
+  propagatedBuildInputs = [
+    boto3
+  ];
+
+  # package has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "awsmfa"
+  ];
+
+  meta = with lib; {
+    description = "Manage AWS MFA Security Credentials";
+    homepage = "https://github.com/broamski/aws-mfa";
+    license = licenses.mit;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-nuke/default.nix b/nixpkgs/pkgs/tools/admin/aws-nuke/default.nix
new file mode 100644
index 000000000000..af8acd946fb1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-nuke/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "aws-nuke";
+  version = "2.25.0";
+
+  src = fetchFromGitHub {
+    owner = "rebuy-de";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Yc9GXdcSKPvwddh+QU2/pBC0XIqA53wpd0VNKOqppbU=";
+  };
+
+  vendorHash = "sha256-FZ92JoyPYysYhl7iQZ8X32BDyNKL1UbOgq7EhHyqb5A=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  overrideModAttrs = _: {
+    preBuild = ''
+      go generate ./...
+    '';
+  };
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installShellCompletion --cmd aws-nuke \
+      --bash <($out/bin/aws-nuke completion bash) \
+      --fish <($out/bin/aws-nuke completion fish) \
+      --zsh <($out/bin/aws-nuke completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Nuke a whole AWS account and delete all its resources";
+    homepage = "https://github.com/rebuy-de/aws-nuke";
+    changelog = "https://github.com/rebuy-de/aws-nuke/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ grahamc ];
+    mainProgram = "aws-nuke";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-rotate-key/default.nix b/nixpkgs/pkgs/tools/admin/aws-rotate-key/default.nix
new file mode 100644
index 000000000000..298584ce8d24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-rotate-key/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, aws-rotate-key }:
+
+buildGoModule rec {
+  pname = "aws-rotate-key";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "Fullscreen";
+    repo = "aws-rotate-key";
+    rev = "v${version}";
+    sha256 = "sha256-PZ7+GC4P4bkT+DWOhW70KkhUCUjn4gIG+OKoOBSc/8c=";
+  };
+
+  vendorHash = "sha256-Asfbv7avT+L8/WNQ6NS7gFcjA9MiTCu5PzsuA/PT6/k=";
+
+  ldflags = [ "-s" "-w" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = aws-rotate-key;
+  };
+
+  meta = with lib; {
+    description = "Easily rotate your AWS key";
+    homepage = "https://github.com/Fullscreen/aws-rotate-key";
+    license = licenses.mit;
+    maintainers = [ maintainers.mbode ];
+    mainProgram = "aws-rotate-key";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-sso-cli/default.nix b/nixpkgs/pkgs/tools/admin/aws-sso-cli/default.nix
new file mode 100644
index 000000000000..998da596c068
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-sso-cli/default.nix
@@ -0,0 +1,43 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, makeWrapper
+, xdg-utils
+}:
+buildGoModule rec {
+  pname = "aws-sso-cli";
+  version = "1.14.3";
+
+  src = fetchFromGitHub {
+    owner = "synfinatic";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-6UP+5niKAdO4DgdEnTdpbUnr2BLKwAgHcEZqkgzCcqs=";
+  };
+  vendorHash = "sha256-TU5kJ0LIqHcfEQEkk69xWJZk30VD9XwlJ5b83w1mHKk=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  ldflags = [
+    "-X main.Version=${version}"
+    "-X main.Tag=nixpkgs"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/aws-sso \
+      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
+  '';
+
+  checkFlags = [
+    # requires network access
+    "-skip=TestAWSConsoleUrl|TestAWSFederatedUrl"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/synfinatic/aws-sso-cli";
+    description = "AWS SSO CLI is a secure replacement for using the aws configure sso wizard";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ devusb ];
+    mainProgram = "aws-sso";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-sso-creds/default.nix b/nixpkgs/pkgs/tools/admin/aws-sso-creds/default.nix
new file mode 100644
index 000000000000..caa1b05c1b1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-sso-creds/default.nix
@@ -0,0 +1,33 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, makeWrapper
+, xdg-utils
+}:
+buildGoModule rec {
+  pname = "aws-sso-creds";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "jaxxstorm";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/zvXVDVlnDcgYpnumN7owN2fHexvQu5D4LvNmuQNS+w=";
+  };
+  vendorHash = "sha256-mJj5ilH4crlL5jesvg0y3RZaMgqlrenWgJApxUw6jEk=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/aws-sso-creds \
+      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jaxxstorm/aws-sso-creds";
+    description = "Get AWS SSO temporary creds from an SSO profile";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lafrenierejm ];
+    mainProgram = "aws-sso-creds";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-vault/default.nix b/nixpkgs/pkgs/tools/admin/aws-vault/default.nix
new file mode 100644
index 000000000000..99255f568fa9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-vault/default.nix
@@ -0,0 +1,57 @@
+{ buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, lib
+, makeWrapper
+, stdenv
+, xdg-utils
+}:
+buildGoModule rec {
+  pname = "aws-vault";
+  version = "7.2.0";
+
+  src = fetchFromGitHub {
+    owner = "99designs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Qs4vxFgehWQYYECBGBSU8YI/BHLwOQUO5wBlNEUzD7c=";
+  };
+
+  vendorHash = "sha256-4bJKDEZlO0DzEzTQ7m+SQuzhe+wKmL6wLueqgSz/46s=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  postInstall = ''
+    # make xdg-open overrideable at runtime
+    # aws-vault uses https://github.com/skratchdot/open-golang/blob/master/open/open.go to open links
+    ${lib.optionalString (!stdenv.isDarwin) "wrapProgram $out/bin/aws-vault --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}"}
+    installShellCompletion --cmd aws-vault \
+      --bash $src/contrib/completions/bash/aws-vault.bash \
+      --fish $src/contrib/completions/fish/aws-vault.fish \
+      --zsh $src/contrib/completions/zsh/aws-vault.zsh
+  '';
+
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  # set the version. see: aws-vault's Makefile
+  ldflags = [
+    "-X main.Version=v${version}"
+  ];
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/aws-vault --version 2>&1 | grep ${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    description =
+      "A vault for securely storing and accessing AWS credentials in development environments";
+    homepage = "https://github.com/99designs/aws-vault";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awscli/default.nix b/nixpkgs/pkgs/tools/admin/awscli/default.nix
new file mode 100644
index 000000000000..73c86278df70
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awscli/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, python3
+, fetchPypi
+, groff
+, less
+, nix-update-script
+, testers
+, awscli
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "awscli";
+  version = "1.31.6"; # N.B: if you change this, change botocore and boto3 to a matching version too
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-PINiNkP2vopPgc9bH0x7mifeUt7gdXi3/i2Ye96RANg=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    botocore
+    bcdoc
+    s3transfer
+    colorama
+    docutils
+    rsa
+    pyyaml
+    groff
+    less
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/bash-completion/completions
+    echo "complete -C $out/bin/aws_completer aws" > $out/share/bash-completion/completions/awscli
+
+    mkdir -p $out/share/zsh/site-functions
+    mv $out/bin/aws_zsh_completer.sh $out/share/zsh/site-functions
+
+    rm $out/bin/aws.cmd
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/aws --version | grep "${python3.pkgs.botocore.version}"
+    $out/bin/aws --version | grep "${version}"
+
+    runHook postInstallCheck
+  '';
+
+  passthru = {
+    python = python3; # for aws_shell
+    updateScript = nix-update-script {
+      # Excludes 1.x versions from the Github tags list
+      extraArgs = [ "--version-regex" "^(1\.(.*))" ];
+    };
+    tests.version = testers.testVersion {
+      package = awscli;
+      command = "aws --version";
+      inherit version;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://aws.amazon.com/cli/";
+    changelog = "https://github.com/aws/aws-cli/blob/${version}/CHANGELOG.rst";
+    description = "Unified tool to manage your AWS services";
+    license = licenses.asl20;
+    mainProgram = "aws";
+    maintainers = with maintainers; [ anthonyroussel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awscli2/default.nix b/nixpkgs/pkgs/tools/admin/awscli2/default.nix
new file mode 100644
index 000000000000..8c9ec21b1bff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awscli2/default.nix
@@ -0,0 +1,152 @@
+{ lib
+, stdenv
+, python3
+, groff
+, less
+, fetchFromGitHub
+, installShellFiles
+, nix-update-script
+, testers
+, awscli2
+}:
+
+let
+  py = python3 // {
+    pkgs = python3.pkgs.overrideScope (final: prev: {
+      sphinx = prev.sphinx.overridePythonAttrs (prev: {
+        disabledTests = prev.disabledTests ++ [
+          "test_check_link_response_only" # fails on hydra https://hydra.nixos.org/build/242624087/nixlog/1
+        ];
+      });
+      ruamel-yaml = prev.ruamel-yaml.overridePythonAttrs (prev: {
+        src = prev.src.override {
+          version = "0.17.21";
+          hash = "sha256-i3zml6LyEnUqNcGsQURx3BbEJMlXO+SSa1b/P10jt68=";
+        };
+      });
+      urllib3 = prev.urllib3.overridePythonAttrs (prev: rec {
+        pyproject = true;
+        version = "1.26.18";
+        nativeBuildInputs = with final; [
+          setuptools
+        ];
+        src = prev.src.override {
+          inherit version;
+          hash = "sha256-+OzBu6VmdBNFfFKauVW/jGe0XbeZ0VkGYmFxnjKFgKA=";
+        };
+      });
+    });
+  };
+
+in
+with py.pkgs; buildPythonApplication rec {
+  pname = "awscli2";
+  version = "2.15.15"; # N.B: if you change this, check if overrides are still up-to-date
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = "aws-cli";
+    rev = "refs/tags/${version}";
+    hash = "sha256-hJuJkCiKgSxfPVgS5II7BwpyQhjaRE2Ct3ZJQq6xWgg=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'cryptography>=3.3.2,<40.0.2' 'cryptography>=3.3.2' \
+      --replace 'flit_core>=3.7.1,<3.8.1' 'flit_core>=3.7.1' \
+      --replace 'awscrt>=0.19.18,<=0.19.19' 'awscrt>=0.19.18' \
+      --replace 'docutils>=0.10,<0.20' 'docutils>=0.10' \
+      --replace 'prompt-toolkit>=3.0.24,<3.0.39' 'prompt-toolkit>=3.0.24'
+
+    substituteInPlace requirements-base.txt \
+      --replace "wheel==0.38.4" "wheel>=0.38.4" \
+      --replace "flit_core==3.8.0" "flit_core>=3.8.0"
+
+    # Upstream needs pip to build and install dependencies and validates this
+    # with a configure script, but we don't as we provide all of the packages
+    # through PYTHONPATH
+    sed -i '/pip>=/d' requirements/bootstrap.txt
+  '';
+
+  nativeBuildInputs = [
+    installShellFiles
+    flit-core
+  ];
+
+  propagatedBuildInputs = [
+    awscrt
+    bcdoc
+    botocore
+    colorama
+    cryptography
+    distro
+    docutils
+    groff
+    jmespath
+    less
+    prompt-toolkit
+    python-dateutil
+    pyyaml
+    ruamel-yaml
+    urllib3
+  ];
+
+  nativeCheckInputs = [
+    jsonschema
+    mock
+    pytestCheckHook
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd aws \
+      --bash <(echo "complete -C $out/bin/aws_completer aws") \
+      --zsh $out/bin/aws_zsh_completer.sh
+  '' + lib.optionalString (!stdenv.hostPlatform.isWindows) ''
+    rm $out/bin/aws.cmd
+  '';
+
+  preCheck = ''
+    export PATH=$PATH:$out/bin
+    export HOME=$(mktemp -d)
+  '';
+
+  pytestFlagsArray = [
+    "-Wignore::DeprecationWarning"
+  ];
+
+  disabledTestPaths = [
+    # Integration tests require networking
+    "tests/integration"
+
+    # Disable slow tests (only run unit tests)
+    "tests/backends"
+    "tests/functional"
+  ];
+
+  pythonImportsCheck = [
+    "awscli"
+  ];
+
+  passthru = {
+    python = py; # for aws_shell
+    updateScript = nix-update-script {
+      # Excludes 1.x versions from the Github tags list
+      extraArgs = [ "--version-regex" "^(2\.(.*))" ];
+    };
+    tests.version = testers.testVersion {
+      package = awscli2;
+      command = "aws --version";
+      inherit version;
+    };
+  };
+
+  meta = with lib; {
+    description = "Unified tool to manage your AWS services";
+    homepage = "https://aws.amazon.com/cli/";
+    changelog = "https://github.com/aws/aws-cli/blob/${version}/CHANGELOG.rst";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bhipple davegallant bryanasdev000 devusb anthonyroussel ];
+    mainProgram = "aws";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awslimitchecker/default.nix b/nixpkgs/pkgs/tools/admin/awslimitchecker/default.nix
new file mode 100644
index 000000000000..0a67e5a4e4e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awslimitchecker/default.nix
@@ -0,0 +1,58 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "awslimitchecker";
+  version = "12.0.0";
+
+  src = fetchFromGitHub {
+    owner = "jantman";
+    repo = "awslimitchecker";
+    rev = version;
+    sha256 = "1p6n4kziyl6sfq7vgga9v88ddwh3sgnfb1m1cx6q25n0wyl7phgv";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    boto3
+    botocore
+    pytz
+    termcolor
+    versionfinder
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    freezegun
+    onetimepass
+    pytestCheckHook
+    pyotp
+    testfixtures
+  ];
+
+  patches = [
+    # Fix the version lookup to use only the hardcoded version in the source package
+    ./version.patch
+  ];
+
+  pytestFlagsArray = [
+    "awslimitchecker/tests"
+  ];
+
+  disabledTestPaths = [
+    # AWS tests that use the network
+    "awslimitchecker/tests/services"
+    "awslimitchecker/tests/test_checker.py"
+    "awslimitchecker/tests/test_runner.py"
+
+    # the version lookup tests as patched above
+    "awslimitchecker/tests/test_version.py"
+  ];
+
+  pythonImportsCheck = [ "awslimitchecker.checker" ];
+
+  meta = with lib; {
+    homepage = "http://awslimitchecker.readthedocs.org";
+    changelog = "https://github.com/jantman/awslimitchecker/blob/${version}/CHANGES.rst";
+    description = "A script and python package to check your AWS service limits and usage via boto3";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ zakame ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awslimitchecker/version.patch b/nixpkgs/pkgs/tools/admin/awslimitchecker/version.patch
new file mode 100644
index 000000000000..6556fb39a5f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awslimitchecker/version.patch
@@ -0,0 +1,35 @@
+--- a/awslimitchecker/version.py
++++ b/awslimitchecker/version.py
+@@ -111,32 +106,5 @@ def _get_version_info():
+     :returns: awslimitchecker version
+     :rtype: str
+     """
+-    if os.environ.get('VERSIONCHECK_DEBUG', '') != 'true':
+-        for lname in ['versionfinder', 'pip', 'git']:
+-            l = logging.getLogger(lname)
+-            l.setLevel(logging.CRITICAL)
+-            l.propagate = True
+-    try:
+-        vinfo = find_version('awslimitchecker')
+-        dirty = ''
+-        if vinfo.git_is_dirty:
+-            dirty = '*'
+-        tag = vinfo.git_tag
+-        if tag is not None:
+-            tag += dirty
+-        commit = vinfo.git_commit
+-        if commit is not None:
+-            if len(commit) > 7:
+-                commit = commit[:8]
+-            commit += dirty
+-        return AWSLimitCheckerVersion(
+-            vinfo.version,
+-            vinfo.url,
+-            tag=tag,
+-            commit=commit
+-        )
+-    except Exception:
+-        logger.exception("Error checking installed version; this installation "
+-                         "may not be in compliance with the AGPLv3 license:")
+     # fall back to returning just the hard-coded release information
+     return AWSLimitCheckerVersion(_VERSION, _PROJECT_URL)
diff --git a/nixpkgs/pkgs/tools/admin/awslogs/default.nix b/nixpkgs/pkgs/tools/admin/awslogs/default.nix
new file mode 100644
index 000000000000..ff4924c1cce5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awslogs/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "awslogs";
+  version = "0.14.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "jorgebastida";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-DrW8s0omQqLp1gaoR6k/YR11afRjUbGYrFtfYhby2b8=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    boto3
+    termcolor
+    python-dateutil
+    docutils
+    setuptools
+    jmespath
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "jmespath>=0.7.1,<1.0.0" "jmespath>=0.7.1" \
+      --replace '>=3.5.*' '>=3.5'
+  '';
+
+  disabledTests = [
+    "test_main_get_query"
+    "test_main_get_with_color"
+  ];
+
+  pythonImportsCheck = [
+    "awslogs"
+  ];
+
+  meta = with lib; {
+    description = "AWS CloudWatch logs for Humans";
+    homepage = "https://github.com/jorgebastida/awslogs";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dbrock ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awsls/default.nix b/nixpkgs/pkgs/tools/admin/awsls/default.nix
new file mode 100644
index 000000000000..f65f603e80da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awsls/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "awsls";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "jckuester";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-iy9tohmVUtNXYVfe6pZ+pbbLlcK6Fu1GgzTWMD+3xP0=";
+  };
+
+  vendorHash = "sha256-ZyMO+KCqoePF6MqHFt8X4tZR4nBhuSPgJDrX+emM6jc=";
+
+  ldflags =
+    let t = "github.com/jckuester/awsls/internal";
+    in [ "-s" "-w" "-X ${t}.version=${version}" "-X ${t}.commit=${src.rev}" "-X ${t}.date=unknown" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A list command for AWS resources";
+    homepage = "https://github.com/jckuester/awsls";
+    license = licenses.mit;
+    maintainers = [ maintainers.markus1189 ];
+    mainProgram = "awsls";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awsrm/default.nix b/nixpkgs/pkgs/tools/admin/awsrm/default.nix
new file mode 100644
index 000000000000..72fb4454870c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awsrm/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "awsrm";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "jckuester";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-KAujqYDtZbCBRO5WK9b9mxqe84ZllbBoO2tLnDH/bdo=";
+  };
+
+  vendorHash = "sha256-CldEAeiFH7gdFNLbIe/oTzs8Pdnde7EqLr7vP7SMDGU=";
+
+  ldflags =
+    let t = "github.com/jckuester/awsrm/internal";
+    in [ "-s" "-w" "-X ${t}.version=${version}" "-X ${t}.commit=${src.rev}" "-X ${t}.date=unknown" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A remove command for AWS resources";
+    homepage = "https://github.com/jckuester/awsrm";
+    license = licenses.mit;
+    maintainers = [ maintainers.markus1189 ];
+    mainProgram = "awsrm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awsume/default.nix b/nixpkgs/pkgs/tools/admin/awsume/default.nix
new file mode 100644
index 000000000000..b0d817445b3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awsume/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, python3
+, installShellFiles
+, buildPythonApplication
+, fetchFromGitHub
+, boto3
+, colorama
+, psutil
+, pluggy
+, pyyaml
+}:
+
+buildPythonApplication rec {
+  pname = "awsume";
+  version = "4.5.3";
+
+  src = fetchFromGitHub {
+    owner = "trek10inc";
+    repo = "awsume";
+    rev = version;
+    sha256 = "sha256-An7omHk2Yxjc6db6Y8QSrtgUvSF5rlVhgxMTpNOePHo=";
+  };
+
+  AWSUME_SKIP_ALIAS_SETUP = 1;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  propagatedBuildInputs = [
+    colorama
+    boto3
+    psutil
+    pluggy
+    pyyaml
+  ];
+
+  postPatch = ''
+    patchShebangs shell_scripts
+    substituteInPlace shell_scripts/{awsume,awsume.fish} --replace "awsumepy" "$out/bin/awsumepy"
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd awsume \
+      --bash <(PYTHONPATH=./awsume/configure ${python3}/bin/python3 -c"import autocomplete; print(autocomplete.SCRIPTS['bash'])") \
+      --zsh <(PYTHONPATH=./awsume/configure ${python3}/bin/python3 -c"import autocomplete; print(autocomplete.SCRIPTS['zsh'])") \
+      --fish <(PYTHONPATH=./awsume/configure ${python3}/bin/python3 -c"import autocomplete; print(autocomplete.SCRIPTS['fish'])") \
+
+    rm -f $out/bin/awsume.bat
+  '';
+
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A utility for easily assuming AWS IAM roles from the command line";
+    homepage = "https://github.com/trek10inc/awsume";
+    license = [ licenses.mit ];
+    maintainers = [ maintainers.nilp0inter ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awsweeper/default.nix b/nixpkgs/pkgs/tools/admin/awsweeper/default.nix
new file mode 100644
index 000000000000..9f0489c4dbb1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awsweeper/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "awsweeper";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "jckuester";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-5D/4Z8ADlA+4+2EINmP5OfX5exzhfbq2TydPRlJDA6Y=";
+  };
+
+  vendorHash = "sha256-jzK56x5mzQkD3tSs6X0Z2Zn1OLXFHgWHz0YLZ3m3NS4=";
+
+  ldflags = [ "-s" "-w" "-X github.com/jckuester/awsweeper/internal.version=${version}" "-X github.com/jckuester/awsweeper/internal.commit=${src.rev}" "-X github.com/jckuester/awsweeper/internal.date=unknown" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool to clean out your AWS account";
+    homepage = "https://github.com/jckuester/awsweeper";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "awsweeper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/azure-cli/default.nix b/nixpkgs/pkgs/tools/admin/azure-cli/default.nix
new file mode 100644
index 000000000000..71c478d61216
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/azure-cli/default.nix
@@ -0,0 +1,290 @@
+{ lib
+, callPackage
+, fetchFromGitHub
+, installShellFiles
+}:
+
+let
+  version = "2.56.0";
+
+  src = fetchFromGitHub {
+    name = "azure-cli-${version}-src";
+    owner = "Azure";
+    repo = "azure-cli";
+    rev = "azure-cli-${version}";
+    hash = "sha256-rlyBp0aVjmOCIb000PdvU7nJlC9vvk+nVmIEtMTKEG8=";
+  };
+
+  # put packages that needs to be overridden in the py package scope
+  py = callPackage ./python-packages.nix { inherit src version; };
+in
+
+py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
+  pname = "azure-cli";
+  inherit version src;
+
+  sourceRoot = "${src.name}/src/azure-cli";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  propagatedBuildInputs = with py.pkgs; [
+    antlr4-python3-runtime
+    applicationinsights
+    argcomplete
+    asn1crypto
+    azure-appconfiguration
+    azure-batch
+    azure-cli-core
+    azure-cli-telemetry
+    azure-common
+    azure-core
+    azure-cosmos
+    azure-data-tables
+    azure-datalake-store
+    azure-graphrbac
+    azure-keyvault-administration
+    azure-keyvault-certificates
+    azure-keyvault-keys
+    azure-keyvault-secrets
+    azure-loganalytics
+    azure-mgmt-advisor
+    azure-mgmt-apimanagement
+    azure-mgmt-appconfiguration
+    azure-mgmt-appcontainers
+    azure-mgmt-applicationinsights
+    azure-mgmt-authorization
+    azure-mgmt-batch
+    azure-mgmt-batchai
+    azure-mgmt-billing
+    azure-mgmt-botservice
+    azure-mgmt-cdn
+    azure-mgmt-cognitiveservices
+    azure-mgmt-compute
+    azure-mgmt-consumption
+    azure-mgmt-containerinstance
+    azure-mgmt-containerregistry
+    azure-mgmt-containerservice
+    azure-mgmt-core
+    azure-mgmt-cosmosdb
+    azure-mgmt-databoxedge
+    azure-mgmt-datalake-nspkg
+    azure-mgmt-datalake-store
+    azure-mgmt-datamigration
+    azure-mgmt-devtestlabs
+    azure-mgmt-dns
+    azure-mgmt-eventgrid
+    azure-mgmt-eventhub
+    azure-mgmt-extendedlocation
+    azure-mgmt-hdinsight
+    azure-mgmt-imagebuilder
+    azure-mgmt-iotcentral
+    azure-mgmt-iothub
+    azure-mgmt-iothubprovisioningservices
+    azure-mgmt-keyvault
+    azure-mgmt-kusto
+    azure-mgmt-loganalytics
+    azure-mgmt-managementgroups
+    azure-mgmt-managedservices
+    azure-mgmt-maps
+    azure-mgmt-marketplaceordering
+    azure-mgmt-media
+    azure-mgmt-monitor
+    azure-mgmt-msi
+    azure-mgmt-netapp
+    azure-mgmt-policyinsights
+    azure-mgmt-privatedns
+    azure-mgmt-rdbms
+    azure-mgmt-recoveryservices
+    azure-mgmt-recoveryservicesbackup
+    azure-mgmt-redhatopenshift
+    azure-mgmt-redis
+    azure-mgmt-relay
+    azure-mgmt-resource
+    azure-mgmt-search
+    azure-mgmt-security
+    azure-mgmt-servicebus
+    azure-mgmt-servicefabric
+    azure-mgmt-servicefabricmanagedclusters
+    azure-mgmt-servicelinker
+    azure-mgmt-sql
+    azure-mgmt-signalr
+    azure-mgmt-sqlvirtualmachine
+    azure-mgmt-storage
+    azure-mgmt-synapse
+    azure-mgmt-trafficmanager
+    azure-mgmt-web
+    azure-multiapi-storage
+    azure-nspkg
+    azure-storage-common
+    azure-storage-blob
+    azure-synapse-accesscontrol
+    azure-synapse-artifacts
+    azure-synapse-managedprivateendpoints
+    azure-synapse-spark
+    bcrypt
+    certifi
+    cffi
+    chardet
+    colorama
+    cryptography
+    distro
+    fabric
+    humanfriendly
+    idna
+    invoke
+    isodate
+    javaproperties
+    jinja2
+    jmespath
+    jsondiff
+    knack
+    markupsafe
+    msal-extensions
+    msal
+    msrest
+    msrestazure
+    oauthlib
+    packaging
+    paramiko
+    pbr
+    pkginfo
+    portalocker
+    psutil
+    pycomposefile
+    pycparser
+    pygithub
+    pyjwt
+    pynacl
+    pyopenssl
+    python-dateutil
+    requests-oauthlib
+    requests
+    scp
+    semver
+    six
+    sshtunnel
+    tabulate
+    urllib3
+    wcwidth
+    websocket-client
+    xmltodict
+  ];
+
+  postInstall = ''
+    substituteInPlace az.completion.sh \
+      --replace register-python-argcomplete ${py.pkgs.argcomplete}/bin/register-python-argcomplete
+    installShellCompletion --bash --name az.bash az.completion.sh
+    installShellCompletion --zsh --name _az az.completion.sh
+
+    # remove garbage
+    rm $out/bin/az.bat
+    rm $out/bin/az.completion.sh
+  '';
+
+  # wrap the executable so that the python packages are available
+  # it's just a shebang script which calls `python -m azure.cli "$@"`
+  postFixup = ''
+    wrapProgram $out/bin/az \
+      --set PYTHONPATH $PYTHONPATH
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    export HOME=$TMPDIR
+
+    $out/bin/az --version
+    $out/bin/az self-test
+  '';
+
+  # ensure these namespaces are able to be accessed
+  pythonImportsCheck = [
+    "azure.batch"
+    "azure.cli.core"
+    "azure.cli.telemetry"
+    "azure.cosmos"
+    "azure.datalake.store"
+    "azure.graphrbac"
+    "azure.keyvault"
+    "azure.loganalytics"
+    "azure.mgmt.advisor"
+    "azure.mgmt.apimanagement"
+    "azure.mgmt.applicationinsights"
+    "azure.mgmt.appconfiguration"
+    "azure.mgmt.appcontainers"
+    "azure.mgmt.authorization"
+    "azure.mgmt.batch"
+    "azure.mgmt.batchai"
+    "azure.mgmt.billing"
+    "azure.mgmt.botservice"
+    "azure.mgmt.cdn"
+    "azure.mgmt.cognitiveservices"
+    "azure.mgmt.compute"
+    "azure.mgmt.consumption"
+    "azure.mgmt.containerinstance"
+    "azure.mgmt.containerregistry"
+    "azure.mgmt.containerservice"
+    "azure.mgmt.cosmosdb"
+    "azure.mgmt.datalake.store"
+    "azure.mgmt.datamigration"
+    "azure.mgmt.devtestlabs"
+    "azure.mgmt.dns"
+    "azure.mgmt.eventgrid"
+    "azure.mgmt.eventhub"
+    "azure.mgmt.hdinsight"
+    "azure.mgmt.imagebuilder"
+    "azure.mgmt.iotcentral"
+    "azure.mgmt.iothub"
+    "azure.mgmt.iothubprovisioningservices"
+    "azure.mgmt.keyvault"
+    "azure.mgmt.kusto"
+    "azure.mgmt.loganalytics"
+    "azure.mgmt.managedservices"
+    "azure.mgmt.managementgroups"
+    "azure.mgmt.maps"
+    "azure.mgmt.marketplaceordering"
+    "azure.mgmt.media"
+    "azure.mgmt.monitor"
+    "azure.mgmt.msi"
+    "azure.mgmt.netapp"
+    "azure.mgmt.policyinsights"
+    "azure.mgmt.privatedns"
+    "azure.mgmt.rdbms"
+    "azure.mgmt.recoveryservices"
+    "azure.mgmt.recoveryservicesbackup"
+    "azure.mgmt.redis"
+    "azure.mgmt.relay"
+    "azure.mgmt.resource"
+    "azure.mgmt.search"
+    "azure.mgmt.security"
+    "azure.mgmt.servicebus"
+    "azure.mgmt.servicefabric"
+    "azure.mgmt.signalr"
+    "azure.mgmt.sql"
+    "azure.mgmt.sqlvirtualmachine"
+    "azure.mgmt.storage"
+    "azure.mgmt.trafficmanager"
+    "azure.mgmt.web"
+    "azure.storage.blob"
+    "azure.storage.common"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Azure/azure-cli";
+    description = "Next generation multi-platform command line experience for Azure";
+    downloadPage = "https://github.com/Azure/azure-cli/releases/tag/azure-cli-${version}";
+    longDescription = ''
+      The Azure Command-Line Interface (CLI) is a cross-platform
+      command-line tool to connect to Azure and execute administrative
+      commands on Azure resources. It allows the execution of commands
+      through a terminal using interactive command-line prompts or a script.
+    '';
+    changelog = "https://github.com/MicrosoftDocs/azure-docs-cli/blob/main/docs-ref-conceptual/release-notes-azure-cli.md";
+    sourceProvenance = [ sourceTypes.fromSource ];
+    license = licenses.mit;
+    mainProgram = "az";
+    maintainers = with maintainers; [ jonringer ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/admin/azure-cli/python-packages.nix b/nixpkgs/pkgs/tools/admin/azure-cli/python-packages.nix
new file mode 100644
index 000000000000..3714c5bec020
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/azure-cli/python-packages.nix
@@ -0,0 +1,235 @@
+{ stdenv
+, python3
+, fetchPypi
+, fetchpatch
+, src
+, version
+}:
+
+let
+  buildAzureCliPackage = with py.pkgs; buildPythonPackage;
+
+  overrideAzureMgmtPackage = package: version: extension: hash:
+    package.overridePythonAttrs (oldAttrs: {
+      inherit version;
+
+      src = fetchPypi {
+        inherit (oldAttrs) pname;
+        inherit version hash extension;
+      };
+    });
+
+  py = python3.override {
+    packageOverrides = self: super: {
+      inherit buildAzureCliPackage;
+
+      # core and the actual application are highly coupled
+      azure-cli-core = buildAzureCliPackage {
+        pname = "azure-cli-core";
+        inherit version src;
+
+        sourceRoot = "${src.name}/src/azure-cli-core";
+
+        propagatedBuildInputs = with self; [
+          argcomplete
+          azure-cli-telemetry
+          azure-common
+          azure-mgmt-core
+          cryptography
+          distro
+          humanfriendly
+          jmespath
+          knack
+          msal-extensions
+          msal
+          msrestazure
+          packaging
+          paramiko
+          pkginfo
+          psutil
+          pyjwt
+          pyopenssl
+          requests
+        ];
+
+        nativeCheckInputs = with self; [ pytest ];
+
+        doCheck = stdenv.isLinux;
+
+        # ignore tests that does network call, or assume powershell
+        checkPhase = ''
+          python -c 'import azure.common; print(azure.common)'
+
+          PYTHONPATH=$PWD:${src}/src/azure-cli-testsdk:$PYTHONPATH HOME=$TMPDIR pytest \
+            azure/cli/core/tests \
+            --ignore=azure/cli/core/tests/test_profile.py \
+            --ignore=azure/cli/core/tests/test_generic_update.py \
+            --ignore=azure/cli/core/tests/test_cloud.py \
+            --ignore=azure/cli/core/tests/test_extension.py \
+            -k 'not metadata_url and not test_send_raw_requests and not test_format_styled_text_legacy_powershell'
+        '';
+
+        pythonImportsCheck = [
+          "azure.cli.telemetry"
+          "azure.cli.core"
+        ];
+      };
+
+      azure-cli-telemetry = buildAzureCliPackage {
+        pname = "azure-cli-telemetry";
+        version = "1.1.0";
+        inherit src;
+
+        sourceRoot = "${src.name}/src/azure-cli-telemetry";
+
+        propagatedBuildInputs = with self; [
+          applicationinsights
+          portalocker
+        ];
+
+        nativeCheckInputs = with self; [ pytest ];
+        # ignore flaky test
+        checkPhase = ''
+          cd azure
+          HOME=$TMPDIR pytest -k 'not test_create_telemetry_note_file_from_scratch'
+        '';
+      };
+
+      antlr4-python3-runtime = super.antlr4-python3-runtime.override (_: {
+        antlr4 = super.pkgs.antlr4_12;
+      });
+      azure-mgmt-advisor = overrideAzureMgmtPackage super.azure-mgmt-advisor "9.0.0" "zip" "sha256-/ECLNzFf6EeBtRkST4yxuKwQsvQkHkOdDT4l/WyhjXs=";
+      azure-mgmt-apimanagement = overrideAzureMgmtPackage super.azure-mgmt-apimanagement "4.0.0" "zip" "sha256-AiTjLJ28g80xnrRFLfPUevJgeaxLpuGmvkd3+FskNiw=";
+      azure-mgmt-authorization = overrideAzureMgmtPackage super.azure-mgmt-authorization "4.0.0" "zip" "sha256-abhavAmuZPxyl1vUNDEXDYx+tdFmdUuYqsXzhF3lfcQ=";
+      azure-mgmt-billing = overrideAzureMgmtPackage super.azure-mgmt-billing "6.0.0" "zip" "sha256-1PXFpBiKRW/h6zK2xF9VyiBpx0vkHrdpIYQLOfL1wH8=";
+      azure-mgmt-botservice = overrideAzureMgmtPackage super.azure-mgmt-botservice "2.0.0b3" "zip" "sha256-XZGQOeMw8usyQ1tl8j57fZ3uqLshomHY9jO/rbpQOvM=";
+      azure-mgmt-cognitiveservices = overrideAzureMgmtPackage super.azure-mgmt-cognitiveservices "13.5.0" "zip" "sha256-RK8LGbH4J+nN6gnGBUweZgkqUcMrwe9aVtvZtAvFeBU=";
+      azure-mgmt-compute = overrideAzureMgmtPackage super.azure-mgmt-compute "30.4.0" "tar.gz" "sha256-C3Qo/YvRXHy9fGa5uwEOClyzeoBs7x9JSNkHGRV2kzQ=";
+      azure-mgmt-containerinstance = overrideAzureMgmtPackage super.azure-mgmt-containerinstance "10.1.0" "zip" "sha256-eNQ3rbKFdPRIyDjtXwH5ztN4GWCYBh3rWdn3AxcEwX4=";
+      azure-mgmt-containerregistry = overrideAzureMgmtPackage super.azure-mgmt-containerregistry "10.1.0" "zip" "sha256-VrX9YfYNvlA8+eNqHCp35BAeQZzQKakZs7ZZKwT8oYc=";
+      azure-mgmt-core = overrideAzureMgmtPackage super.azure-mgmt-core "1.3.2" "zip" "sha256-B/Sv6COlXXBLBI1h7f3BMYwFHtWfJEAyEmNQvpXp1QE=";
+      azure-mgmt-cosmosdb = overrideAzureMgmtPackage super.azure-mgmt-cosmosdb "9.3.0" "tar.gz" "sha256-02DisUN2/auBDhPgE9aUvEvYwoQUQC4NYGD/PQZOl/Y=";
+      azure-mgmt-databoxedge = overrideAzureMgmtPackage super.azure-mgmt-databoxedge "1.0.0" "zip" "sha256-BAkAYrwejwDC9FMVo7zrD7OzR57BR01xuINC4TSZsIc=";
+      azure-mgmt-datalake-nspkg = overrideAzureMgmtPackage super.azure-mgmt-datalake-nspkg "3.0.1" "zip" "sha256-3rGSukIviz7Ccs5OiHNnlvIW8o6lsD8oMx14S3o/SIA=";
+      azure-mgmt-datamigration = overrideAzureMgmtPackage super.azure-mgmt-datamigration "10.0.0" "zip" "sha256-XO5w+X/joJPDy3DCoZDC35Nrdy6UoJ73496x7Rd8nzI=";
+      azure-mgmt-dns = overrideAzureMgmtPackage super.azure-mgmt-dns "8.0.0" "zip" "sha256-QHwtrLM1E/++nKS+Wt216dS64Mt++mE8P31THve/jeg=";
+      azure-mgmt-extendedlocation = overrideAzureMgmtPackage super.azure-mgmt-extendedlocation "1.0.0b2" "zip" "sha256-mjfH35T81JQ97jVgElWmZ8P5MwXVxZQv/QJKNLS3T8A=";
+      azure-mgmt-hdinsight = overrideAzureMgmtPackage super.azure-mgmt-hdinsight "9.0.0" "zip" "sha256-QevcacDR+B0l3TBDjBT/9DMfZmOfVYBbkYuWSer/54o=";
+      azure-mgmt-imagebuilder = overrideAzureMgmtPackage super.azure-mgmt-imagebuilder "1.2.0" "zip" "sha256-XmGIzw+yGYgdaNGZJClFRl531BGsQUH+HESUXGVK6TI=";
+      azure-mgmt-iothubprovisioningservices = overrideAzureMgmtPackage super.azure-mgmt-iothubprovisioningservices "1.1.0" "zip" "sha256-04OoJuff93L62G6IozpmHpEaUbHHHD6nKlkMHVoJvJ4=";
+      azure-mgmt-managementgroups = overrideAzureMgmtPackage super.azure-mgmt-managementgroups "1.0.0" "zip" "sha256-urm9UyocNFV/Wwq5lQ5DHj8Au5boo85m3w9s4q4ZzXM=";
+      azure-mgmt-maps = overrideAzureMgmtPackage super.azure-mgmt-maps "2.0.0" "zip" "sha256-OE4X92potwCk+YhHiUXDqXIXEcBAByWv38tjz4ToXw4=";
+      azure-mgmt-marketplaceordering = overrideAzureMgmtPackage super.azure-mgmt-marketplaceordering "1.1.0" "zip" "sha256-aLOB9SpN9ENdrK1al+HFmsTJgfZn3MqPnQRFNBfWCtg=";
+      azure-mgmt-monitor = overrideAzureMgmtPackage super.azure-mgmt-monitor "5.0.0" "zip" "sha256-eL9KJowxTF7hZJQQQCNJZ7l+rKPFM8wP5vEigt3ZFGE=";
+      azure-mgmt-msi = overrideAzureMgmtPackage super.azure-mgmt-msi "7.0.0" "zip" "sha256-ctRsmmJ4PsTqthm+nRt4/+u9qhZNQG/TA/FjA/NyVrI=";
+      azure-mgmt-privatedns = overrideAzureMgmtPackage super.azure-mgmt-privatedns "1.0.0" "zip" "sha256-tg8W5D97KRWCxfV7rhsIMJbYMD6dmVjiwpInpVzCfEU=";
+      azure-mgmt-recoveryservices = overrideAzureMgmtPackage super.azure-mgmt-recoveryservices "2.5.0" "tar.gz" "sha256-XxowjEhYx5uD/4vY5hGSCSvcarmdbdc5Y2GLHciEurU=";
+      azure-mgmt-recoveryservicesbackup = overrideAzureMgmtPackage super.azure-mgmt-recoveryservicesbackup "7.0.0" "tar.gz" "sha256-GuW6x8JGdBedywum4fDAQ8rwbVU9UgQWgHrFqJ6Uz9A=";
+      azure-mgmt-redhatopenshift = overrideAzureMgmtPackage super.azure-mgmt-redhatopenshift "1.4.0" "tar.gz" "sha256-BL2a2L2AwJWvs0V+VpSGaS8//AWMy5m6rdAPDJPbrEo=";
+      azure-mgmt-redis = overrideAzureMgmtPackage super.azure-mgmt-redis "14.1.0" "zip" "sha256-LO92Wc2+VvsEKiOjVSHXw2o3D69NQlL58m+YqWl6+ig=";
+      azure-mgmt-search = overrideAzureMgmtPackage super.azure-mgmt-search "9.0.0" "zip" "sha256-Gc+qoTa1EE4/YmJvUSqVG+zZ50wfohvWOe/fLJ/vgb0=";
+      azure-mgmt-security = overrideAzureMgmtPackage super.azure-mgmt-security "5.0.0" "zip" "sha256-OLA+/oLCNEzqID/alebQC3rCJ4L6HAtYXNDqLI/z5wI=";
+      azure-mgmt-servicebus = overrideAzureMgmtPackage super.azure-mgmt-servicebus "8.2.0" "zip" "sha256-i+kgjxQdmnifaNuNIZdU/3gGn9j5OQ6fdkS7laO+nsI=";
+      azure-mgmt-servicefabricmanagedclusters = overrideAzureMgmtPackage super.azure-mgmt-servicefabricmanagedclusters "1.0.0" "zip" "sha256-EJyjolHrt92zWg+IKWFKTapwZaFrwTtSyEIu5/mZXOg=";
+      azure-mgmt-storage = overrideAzureMgmtPackage super.azure-mgmt-storage "21.1.0" "tar.gz" "sha256-1tPA6RfJiLye0Eckd9PvP5CIYAnrHZenEZRPg3VjAWI=";
+      azure-mgmt-trafficmanager = overrideAzureMgmtPackage super.azure-mgmt-trafficmanager "1.0.0" "zip" "sha256-R0F2HoA0bE7dTLPycTaOqYBj+ATQFeJFwv4EjtK1lqg=";
+      azure-synapse-managedprivateendpoints = overrideAzureMgmtPackage super.azure-synapse-managedprivateendpoints "0.4.0" "zip" "sha256-kA6urM/9zQEBKySKfQSQCMkoB7dJ7dHJB0ypJIVUwX4=";
+
+      azure-synapse-spark = overrideAzureMgmtPackage super.azure-synapse-spark "0.2.0" "zip" "sha256-OQ5brhweEIrtN2iP4I5NacdC9t3YUiGIVhhqSs3FMuI=";
+
+      azure-mgmt-appcontainers = overrideAzureMgmtPackage super.azure-mgmt-appcontainers "2.0.0" "zip"
+        "sha256-ccdIdvdgTYPWEZCWqkLc8lEuMuAEERvl5B1huJyBkvU=";
+
+      azure-mgmt-batch = (overrideAzureMgmtPackage super.azure-mgmt-batch "17.0.0" "zip"
+        "sha256-hkM4WVLuwxj4qgXsY8Ya7zu7/v37gKdP0Xbf2EqrsWo=").overridePythonAttrs (attrs: {
+        propagatedBuildInputs = attrs.propagatedBuildInputs or [ ] ++ [ self.msrest ];
+      });
+
+      azure-mgmt-batchai = overrideAzureMgmtPackage super.azure-mgmt-batchai "7.0.0b1" "zip"
+        "sha256-mT6vvjWbq0RWQidugR229E8JeVEiobPD3XA/nDM3I6Y=";
+
+      azure-mgmt-policyinsights = overrideAzureMgmtPackage super.azure-mgmt-policyinsights "1.1.0b4" "zip"
+        "sha512-NW2BNj45lKzBmPXWMuBnVEDG2C6xzo9J/QjcC5fczvyhKBIkhugJVOWdPUsSzyGeQYKdqpRWPOl0yBG/eblHQA==";
+
+      azure-mgmt-cdn = overrideAzureMgmtPackage super.azure-mgmt-cdn "12.0.0" "zip"
+        "sha256-t8PuIYkjS0r1Gs4pJJJ8X9cz8950imQtbVBABnyMnd0=";
+
+      azure-mgmt-rdbms = overrideAzureMgmtPackage super.azure-mgmt-rdbms "10.2.0b11" "tar.gz"
+        "sha256-A7SwklqAhz4Ey9ar1YWythtVZyQ2Y2RUsa27iMc2mxU=";
+
+      azure-mgmt-appconfiguration = overrideAzureMgmtPackage super.azure-mgmt-appconfiguration "3.0.0" "zip"
+        "sha256-FJhuVgqNjdRIegP4vUISrAtHvvVle5VQFVITPm4HLEw=";
+
+      azure-mgmt-eventgrid = overrideAzureMgmtPackage super.azure-mgmt-eventgrid "10.2.0b2" "zip"
+        "sha256-QcHY1wCwQyVOEdUi06/wEa4dqJH5Ccd33gJ1Sju0qZA=";
+
+      azure-mgmt-iothub = overrideAzureMgmtPackage super.azure-mgmt-iothub "3.0.0" "tar.gz"
+        "sha256-2vIfyYxoo1PsYWMYwOYr4EyNaJmWC+jCy/mRZzrItyI=";
+
+      azure-mgmt-iotcentral = overrideAzureMgmtPackage super.azure-mgmt-iotcentral "10.0.0b1" "zip"
+        "sha256-1CiZuTXYhIb74eGQZUJHHzovYNnnVd3Ydu1UCy2Bu00=";
+
+      azure-mgmt-kusto = (overrideAzureMgmtPackage super.azure-mgmt-kusto "0.3.0" "zip"
+        "sha256-nri3eB/UQQ7p4gfNDDmDuvnlhBS1tKGISdCYVuNrrN4=").overridePythonAttrs (attrs: {
+        propagatedBuildInputs = attrs.propagatedBuildInputs or [ ] ++ [ self.msrest self.msrestazure ];
+      });
+
+      azure-mgmt-devtestlabs = overrideAzureMgmtPackage super.azure-mgmt-devtestlabs "4.0.0" "zip"
+        "sha256-WVScTEBo8mRmsQl7V0qOUJn7LNbIvgoAOVsG07KeJ40=";
+
+      azure-mgmt-loganalytics = overrideAzureMgmtPackage super.azure-mgmt-loganalytics "13.0.0b4" "zip"
+        "sha256-Jm1t7v5vyFjNNM/evVaEI9sXJKNwJk6XAXuJSRSnKHk=";
+
+      azure-mgmt-media = overrideAzureMgmtPackage super.azure-mgmt-media "9.0.0" "zip"
+        "sha256-TI7l8sSQ2QUgPqiE3Cu/F67Wna+KHbQS3fuIjOb95ZM=";
+
+      azure-mgmt-web = overrideAzureMgmtPackage super.azure-mgmt-web "7.2.0" "tar.gz"
+        "sha256-78/m9/Ug7Qq8/oZRfhyM8CpxL3N6PbDbfLRsbWR5ge0=";
+
+      azure-mgmt-netapp = overrideAzureMgmtPackage super.azure-mgmt-netapp "10.1.0" "zip"
+        "sha256-eJiWTOCk2C79Jotku9bKlu3vU6H8004hWrX+h76MjQM=";
+
+      azure-mgmt-signalr = overrideAzureMgmtPackage super.azure-mgmt-signalr "2.0.0b2" "tar.gz"
+        "sha256-05PUV8ouAKq/xhGxVEWIzDop0a7WDTV5mGVSC4sv9P4=";
+
+      azure-mgmt-sql = overrideAzureMgmtPackage super.azure-mgmt-sql "4.0.0b12" "tar.gz"
+        "sha256-LJx9cdtqpoHl1pPGYodoA50y8NP4ftbXhY7zohsCPH8=";
+
+      azure-mgmt-sqlvirtualmachine = overrideAzureMgmtPackage super.azure-mgmt-sqlvirtualmachine "1.0.0b5" "zip"
+        "sha256-ZFgJflgynRSxo+B+Vso4eX1JheWlDQjfJ9QmupXypMc=";
+
+      azure-mgmt-synapse = overrideAzureMgmtPackage super.azure-mgmt-synapse "2.1.0b5" "zip"
+        "sha256-5E6Yf1GgNyNVjd+SeFDbhDxnOA6fOAG6oojxtCP4m+k=";
+
+      azure-mgmt-eventhub = overrideAzureMgmtPackage super.azure-mgmt-eventhub "10.1.0" "zip"
+        "sha256-MZqhSBkwypvEefhoEWEPsBUFidWYD7qAX6edcBDDSSA=";
+
+      azure-mgmt-keyvault = overrideAzureMgmtPackage super.azure-mgmt-keyvault "10.3.0" "tar.gz"
+        "sha256-GDtBZM8YaLjqfv6qmO2tfSpOFKm9l3woGLErdRUM0qI=";
+
+      azure-mgmt-applicationinsights = overrideAzureMgmtPackage super.azure-mgmt-applicationinsights "1.0.0" "zip"
+        "sha256-woeix9703hn5LAwxugKGf6xvW433G129qxkoi7RV/Fs=";
+
+      azure-mgmt-servicefabric = (overrideAzureMgmtPackage super.azure-mgmt-servicefabric "1.0.0" "zip"
+        "sha256-3jXhF5EoMsGp6TEJqNJMq5T1VwOpCHsuscWwZVs7GRM=").overridePythonAttrs (attrs: {
+        propagatedBuildInputs = attrs.propagatedBuildInputs or [ ] ++ [ self.msrest ];
+      });
+
+      azure-mgmt-servicelinker = overrideAzureMgmtPackage super.azure-mgmt-servicelinker "1.2.0b1" "zip"
+        "sha256-RK1Q51Q0wAG55oKrFmv65/2AUKl+gRdp27t/EcuMONk=";
+
+      azure-storage-common = overrideAzureMgmtPackage super.azure-storage-common "1.4.2" "tar.gz"
+        "sha256-Tsh8dTfUV+yVJS4ORkd+LBzPM3dP/v0F2FRGgssK5AE=";
+
+      azure-keyvault-keys = overrideAzureMgmtPackage super.azure-keyvault-keys "4.9.0b3" "tar.gz"
+        "sha256-qoseyf6WqBEG8vPc1hF17K46AWk8Ba8V9KRed4lOlGo=";
+
+      azure-mgmt-datalake-store = overrideAzureMgmtPackage super.azure-mgmt-datalake-store "0.5.0" "zip"
+        "sha256-k3bTVJVmHRn4rMVgT2ewvFlJOxg1u8SA+aGVL5ABekw=";
+
+      azure-mgmt-resource = overrideAzureMgmtPackage super.azure-mgmt-resource "23.1.0b2" "zip"
+        "sha256-kMmiKVwjPgmsTIxxxDRNXE41jSTJkemnKhO+P/OcPZI=";
+    };
+  };
+in
+py
diff --git a/nixpkgs/pkgs/tools/admin/balena-cli/default.nix b/nixpkgs/pkgs/tools/admin/balena-cli/default.nix
new file mode 100644
index 000000000000..be18c1b15ec1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/balena-cli/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, buildNpmPackage
+, overrideSDK
+, fetchFromGitHub
+, testers
+, balena-cli
+, nodePackages
+, python3
+, udev
+, darwin
+}:
+
+let
+  # Fix for: https://github.com/NixOS/nixpkgs/issues/272156
+  buildNpmPackage' = buildNpmPackage.override {
+    stdenv = if stdenv.isDarwin then overrideSDK stdenv "11.0" else stdenv;
+  };
+in buildNpmPackage' rec {
+  pname = "balena-cli";
+  version = "18.0.0";
+
+  src = fetchFromGitHub {
+    owner = "balena-io";
+    repo = "balena-cli";
+    rev = "v${version}";
+    hash = "sha256-qXOjuVIBjKvsTp9tHxlvYM2oKHLvfGToBE0tAS/F+Ug=";
+  };
+
+  npmDepsHash = "sha256-VmhyfhyV6mrF3pM5xQGcPowIaAzXJprOmmf4uSTetOA=";
+
+  postPatch = ''
+    ln -s npm-shrinkwrap.json package-lock.json
+  '';
+  makeCacheWritable = true;
+
+  nativeBuildInputs = [
+    nodePackages.node-gyp
+    python3
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.cctools
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    udev
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Foundation
+    darwin.apple_sdk.frameworks.Cocoa
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = balena-cli;
+    command = ''
+      # Override default cache directory so Balena CLI's unavoidable update check does not fail due to write permissions
+      BALENARC_DATA_DIRECTORY=./ balena --version
+    '';
+    inherit version;
+  };
+
+  meta = with lib; {
+    description = "A command line interface for balenaCloud or openBalena";
+    longDescription = ''
+      The balena CLI is a Command Line Interface for balenaCloud or openBalena. It is a software
+      tool available for Windows, macOS and Linux, used through a command prompt / terminal window.
+      It can be used interactively or invoked in scripts. The balena CLI builds on the balena API
+      and the balena SDK, and can also be directly imported in Node.js applications.
+    '';
+    homepage = "https://github.com/balena-io/balena-cli";
+    changelog = "https://github.com/balena-io/balena-cli/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = [ maintainers.kalebpace maintainers.doronbehar ];
+    mainProgram = "balena";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/bash-my-aws/default.nix b/nixpkgs/pkgs/tools/admin/bash-my-aws/default.nix
new file mode 100644
index 000000000000..9ca14bbe3376
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/bash-my-aws/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv
+, makeWrapper
+, awscli
+, jq
+, unixtools
+, fetchFromGitHub
+, installShellFiles
+, bashInteractive
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bash-my-aws";
+  version = "unstable-2020-01-11";
+
+  src = fetchFromGitHub {
+    owner = "bash-my-aws";
+    repo = "bash-my-aws";
+    rev = "5a97ce2c22affca1299022a5afa109d7b62242ba";
+    sha256 = "sha256-RZvaiyRK8FnZbHyLkWz5VrAcsnMtHCiIo64GpNZgvqY=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  propagatedBuildInputs = [
+    awscli
+    jq
+    unixtools.column
+    bashInteractive
+  ];
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  checkPhase = ''
+    pushd test
+    ./shared-spec.sh
+    ./stack-spec.sh
+    popd
+  '';
+  installPhase=''
+    mkdir -p $out
+    cp -r . $out
+  '';
+  postFixup = ''
+    pushd $out
+    substituteInPlace scripts/build \
+        --replace '~/.bash-my-aws' $out
+    substituteInPlace scripts/build-completions \
+        --replace "{HOME}" $out \
+        --replace '~/.bash-my-aws' $out
+    ./scripts/build
+    ./scripts/build-completions
+    substituteInPlace bash_completion.sh \
+        --replace "{HOME}" $out \
+        --replace .bash-my-aws ""
+    substituteInPlace bin/bma \
+        --replace '~/.bash-my-aws' $out
+    wrapProgram $out/bin/bma --prefix PATH : ${lib.makeBinPath [awscli jq unixtools.column bashInteractive ]}
+    installShellCompletion --bash --name bash-my-aws.bash bash_completion.sh
+    chmod +x $out/lib/*
+    patchShebangs --host $out/lib
+    installShellCompletion --bash --name bash-my-aws.bash bash_completion.sh
+    cat > $out/bin/bma-init <<EOF
+    echo source $out/aliases
+    echo source $out/bash_completion.sh
+    EOF
+    chmod +x $out/bin/bma-init
+    popd
+  '';
+
+  meta = with lib; {
+    homepage = "https://bash-my-aws.org";
+    description = "CLI commands for AWS";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tomberek ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/berglas/default.nix b/nixpkgs/pkgs/tools/admin/berglas/default.nix
new file mode 100644
index 000000000000..e35fd2bfe0e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/berglas/default.nix
@@ -0,0 +1,61 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, berglas }:
+
+let
+  skipTests = {
+    access = "Access";
+    create = "Create";
+    delete = "Delete";
+    list = "List";
+    read = "Read";
+    replace = "Replace";
+    resolver = "Resolve";
+    revoke = "Revoke";
+    update = "Update";
+  };
+
+  skipTestsCommand =
+    builtins.foldl' (acc: goFileName:
+      let testName = builtins.getAttr goFileName skipTests; in
+      ''
+        ${acc}
+        substituteInPlace pkg/berglas/${goFileName}_test.go \
+          --replace "TestClient_${testName}_storage" "SkipClient_${testName}_storage" \
+          --replace "TestClient_${testName}_secretManager" "SkipClient_${testName}_secretManager"
+      ''
+    ) "" (builtins.attrNames skipTests);
+in
+
+buildGoModule rec {
+  pname = "berglas";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Jf6yPVydM7UnG1yiLEFe+7FMkWANIQebZ3QAwg6/OQs=";
+  };
+
+  vendorHash = "sha256-3WDBl/GqCgRFMmh6TQvtHhACCRzf9sdIO8fel8CAMP0=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/GoogleCloudPlatform/berglas/internal/version.Version=${version}"
+  ];
+
+  postPatch = skipTestsCommand;
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = berglas;
+    };
+  };
+
+  meta = with lib; {
+    description = "A tool for managing secrets on Google Cloud";
+    homepage = "https://github.com/GoogleCloudPlatform/berglas";
+    license = licenses.asl20;
+    mainProgram = "berglas";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/bluemix-cli/default.nix b/nixpkgs/pkgs/tools/admin/bluemix-cli/default.nix
new file mode 100644
index 000000000000..ebfcd17064ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/bluemix-cli/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "bluemix-cli";
+  version = "0.8.0";
+
+  src =
+    if stdenv.hostPlatform.system == "i686-linux" then
+      fetchurl {
+        name = "linux32-${version}.tar.gz";
+        url = "https://clis.ng.bluemix.net/download/bluemix-cli/${version}/linux32";
+        sha256 = "1ryngbjlw59x33rfd32bcz49r93a1q1g92jh7xmi9vydgqnzsifh";
+      }
+    else
+      fetchurl {
+        name = "linux64-${version}.tar.gz";
+        url = "https://clis.ng.bluemix.net/download/bluemix-cli/${version}/linux64";
+        sha256 = "056zbaca430ldcn0s86vy40m5abvwpfrmvqybbr6fjwfv9zngywx";
+      }
+    ;
+
+  installPhase = ''
+    install -m755 -D -t $out/bin bin/ibmcloud bin/ibmcloud-analytics
+    install -m755 -D -t $out/bin/cfcli bin/cfcli/cf
+    ln -sv $out/bin/ibmcloud $out/bin/bx
+    ln -sv $out/bin/ibmcloud $out/bin/bluemix
+    install -D -t "$out/share/bash-completion/completions" bx/bash_autocomplete
+    install -D -t "$out/share/zsh/site-functions" bx/zsh_autocomplete
+  '';
+
+  meta = with lib; {
+    description  = "Administration CLI for IBM BlueMix";
+    homepage     = "https://console.bluemix.net/docs/cli/index.html";
+    downloadPage = "https://console.bluemix.net/docs/cli/reference/bluemix_cli/download_cli.html#download_install";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license      = licenses.unfree;
+    maintainers  = [ maintainers.tazjin maintainers.jensbin ];
+    platforms    = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/bom/default.nix b/nixpkgs/pkgs/tools/admin/bom/default.nix
new file mode 100644
index 000000000000..0ff37c5d2e00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/bom/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "bom";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-nYzBaFtOJhqO0O6MJsxTw/mxsIOa+cnU27nOFRe2/uI=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse HEAD > $out/COMMIT
+      # '0000-00-00T00:00:00Z'
+      date -u -d "@$(git log -1 --pretty=%ct)" "+'%Y-%m-%dT%H:%M:%SZ'" > $out/SOURCE_DATE_EPOCH
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+
+  vendorHash = "sha256-q2dK1hO3ruvts4BtQ1VGgTH3qNMzmS22CUuA52t5OvE=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X sigs.k8s.io/release-utils/version.gitVersion=v${version}"
+    "-X sigs.k8s.io/release-utils/version.gitTreeState=clean"
+  ];
+
+  # ldflags based on metadata from git and source
+  preBuild = ''
+    ldflags+=" -X sigs.k8s.io/release-utils/version.gitCommit=$(cat COMMIT)"
+    ldflags+=" -X sigs.k8s.io/release-utils/version.buildDate=$(cat SOURCE_DATE_EPOCH)"
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd bom \
+      --bash <($out/bin/bom completion bash) \
+      --fish <($out/bin/bom completion fish) \
+      --zsh <($out/bin/bom completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/bom --help
+    $out/bin/bom version 2>&1 | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/kubernetes-sigs/bom";
+    changelog = "https://github.com/kubernetes-sigs/bom/releases/tag/v${version}";
+    description = "A utility to generate SPDX-compliant Bill of Materials manifests";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ developer-guy ];
+    mainProgram = "bom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/boulder/default.nix b/nixpkgs/pkgs/tools/admin/boulder/default.nix
new file mode 100644
index 000000000000..c1acd8e1bf05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/boulder/default.nix
@@ -0,0 +1,101 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, testers
+, boulder
+}:
+
+buildGoModule rec {
+  pname = "boulder";
+  version = "2022-09-29";
+
+  src = fetchFromGitHub {
+    owner = "letsencrypt";
+    repo = "boulder";
+    rev = "release-${version}";
+    leaveDotGit = true;
+    postFetch = ''
+      cd $out
+      git rev-parse --short=8 HEAD 2>/dev/null >$out/COMMIT
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+    hash = "sha256-MyJHTkt4qEHwD1UOkOfDNhNddcyFHPJvDzoT7kJ2qi4=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/boulder" ];
+
+  patches = [ ./no-build-id-test.patch ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/letsencrypt/boulder/core.BuildHost=nixbld@localhost"
+  ];
+
+  preBuild = ''
+    ldflags+=" -X \"github.com/letsencrypt/boulder/core.BuildID=${src.rev} +$(cat COMMIT)\""
+    ldflags+=" -X \"github.com/letsencrypt/boulder/core.BuildTime=$(date -u -d @0)\""
+  '';
+
+  preCheck = ''
+    # Test all targets.
+    unset subPackages
+
+    # Disable tests that require additional services.
+    rm -rf \
+      cmd/admin-revoker/main_test.go \
+      cmd/bad-key-revoker/main_test.go \
+      cmd/cert-checker/main_test.go \
+      cmd/contact-auditor/main_test.go \
+      cmd/expiration-mailer/main_test.go \
+      cmd/expiration-mailer/send_test.go \
+      cmd/id-exporter/main_test.go \
+      cmd/rocsp-tool/client_test.go \
+      db/map_test.go \
+      db/multi_test.go \
+      db/rollback_test.go \
+      log/log_test.go \
+      ocsp/updater/updater_test.go \
+      ra/ra_test.go \
+      rocsp/rocsp_test.go \
+      sa/database_test.go \
+      sa/model_test.go \
+      sa/precertificates_test.go \
+      sa/rate_limits_test.go \
+      sa/sa_test.go \
+      test/load-generator/acme/directory_test.go \
+      va/caa_test.go \
+      va/dns_test.go \
+      va/http_test.go \
+      va/tlsalpn_test.go \
+      va/va_test.go
+  '';
+
+  postInstall = ''
+    for i in $($out/bin/boulder --list); do
+      ln -s $out/bin/boulder $out/bin/$i
+    done
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = boulder;
+    command = "boulder --version";
+    inherit version;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/letsencrypt/boulder";
+    description = "An ACME-based certificate authority, written in Go";
+    longDescription = ''
+      This is an implementation of an ACME-based CA. The ACME protocol allows
+      the CA to automatically verify that an applicant for a certificate
+      actually controls an identifier, and allows domain holders to issue and
+      revoke certificates for their domains. Boulder is the software that runs
+      Let's Encrypt.
+    '';
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ azahi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/boulder/no-build-id-test.patch b/nixpkgs/pkgs/tools/admin/boulder/no-build-id-test.patch
new file mode 100644
index 000000000000..661ed2b4a5f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/boulder/no-build-id-test.patch
@@ -0,0 +1,15 @@
+diff --git i/core/util_test.go w/core/util_test.go
+index 8979edff..cfae13a4 100644
+--- i/core/util_test.go
++++ w/core/util_test.go
+@@ -56,10 +56,6 @@ func TestSerialUtils(t *testing.T) {
+ 	fmt.Println(badSerial)
+ }
+ 
+-func TestBuildID(t *testing.T) {
+-	test.AssertEquals(t, "Unspecified", GetBuildID())
+-}
+-
+ const JWK1JSON = `{
+   "kty": "RSA",
+   "n": "vuc785P8lBj3fUxyZchF_uZw6WtbxcorqgTyq-qapF5lrO1U82Tp93rpXlmctj6fyFHBVVB5aXnUHJ7LZeVPod7Wnfl8p5OyhlHQHC8BnzdzCqCMKmWZNX5DtETDId0qzU7dPzh0LP0idt5buU7L9QNaabChw3nnaL47iu_1Di5Wp264p2TwACeedv2hfRDjDlJmaQXuS8Rtv9GnRWyC9JBu7XmGvGDziumnJH7Hyzh3VNu-kSPQD3vuAFgMZS6uUzOztCkT0fpOalZI6hqxtWLvXUMj-crXrn-Maavz8qRhpAyp5kcYk3jiHGgQIi7QSK2JIdRJ8APyX9HlmTN5AQ",
diff --git a/nixpkgs/pkgs/tools/admin/bubblewrap/default.nix b/nixpkgs/pkgs/tools/admin/bubblewrap/default.nix
new file mode 100644
index 000000000000..0e890270a52b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/bubblewrap/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, docbook_xsl
+, libxslt
+, meson
+, ninja
+, pkg-config
+, bash-completion
+, libcap
+, libselinux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bubblewrap";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "containers";
+    repo = "bubblewrap";
+    rev = "v${version}";
+    hash = "sha256-UiZfp1bX/Eul5x31oBln5P9KMT2oFwawQqDs9udZUxY=";
+  };
+
+  postPatch = ''
+    substituteInPlace tests/libtest.sh \
+      --replace "/var/tmp" "$TMPDIR"
+  '';
+
+  nativeBuildInputs = [
+    docbook_xsl
+    libxslt
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    bash-completion
+    libcap
+    libselinux
+  ];
+
+  # incompatible with Nix sandbox
+  doCheck = false;
+
+  meta = with lib; {
+    changelog = "https://github.com/containers/bubblewrap/releases/tag/${src.rev}";
+    description = "Unprivileged sandboxing tool";
+    homepage = "https://github.com/containers/bubblewrap";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = platforms.linux;
+    mainProgram = "bwrap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/cdist/default.nix b/nixpkgs/pkgs/tools/admin/cdist/default.nix
new file mode 100644
index 000000000000..8467605727c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/cdist/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitea
+, pythonImportsCheckHook
+, six
+, sphinxHook
+, sphinx-rtd-theme
+}:
+
+buildPythonApplication rec {
+  pname = "cdist";
+  version = "7.0.0";
+  outputs = [ "out" "man" "doc" ];
+
+  src = fetchFromGitea {
+    domain = "code.ungleich.ch";
+    owner = "ungleich-public";
+    repo = "cdist";
+    rev = version;
+    hash = "sha256-lIx0RtGQJdY2e00azI9yS6TV+5pCegpKOOD0dQmgMqA=";
+  };
+
+  nativeBuildInputs = [
+    pythonImportsCheckHook
+    six
+    sphinxHook
+    sphinx-rtd-theme
+  ];
+
+  sphinxRoot = "docs/src";
+
+  # "make man" creates symlinks in docs/src needed by sphinxHook.
+  postPatch = ''
+    echo "VERSION = '$version'" > cdist/version.py
+
+    make man
+  '';
+
+  preConfigure = ''
+    export HOME=/tmp
+  '';
+
+  # Test suite requires either non-chrooted environment or root.
+  #
+  # When "machine_type" explorer figures out that it is running inside
+  # chroot, it assumes that it has enough privileges to escape it.
+  doCheck = false;
+
+  pythonImportsCheck = [ "cdist" ];
+
+  postInstall = ''
+    mkdir -p $out/share
+    mv docs/dist/man $out/share
+  '';
+
+  meta = with lib; {
+    description = "Minimalistic configuration management system";
+    homepage = "https://www.sdi.st";
+    changelog = "https://code.ungleich.ch/ungleich-public/cdist/src/tag/${version}/docs/changelog";
+
+    # Mostly. There are still couple types that are gpl3-only.
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kaction ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/certigo/default.nix b/nixpkgs/pkgs/tools/admin/certigo/default.nix
new file mode 100644
index 000000000000..6274833b26d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/certigo/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "certigo";
+  version = "1.16.0";
+
+  src = fetchFromGitHub {
+    owner = "square";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+j1NeQJPDwQxXVYnHNmL49Li2IMH+9ehS0HSM3kqyxU=";
+  };
+
+  vendorHash = "sha256-G9YpMF4qyL8eJPnai81ihVTDK9E4meKxdpk+rjISnIM=";
+
+  meta = with lib; {
+    description = "A utility to examine and validate certificates in a variety of formats";
+    homepage = "https://github.com/square/certigo";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "certigo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/cf-vault/default.nix b/nixpkgs/pkgs/tools/admin/cf-vault/default.nix
new file mode 100644
index 000000000000..877e4d56d09c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/cf-vault/default.nix
@@ -0,0 +1,24 @@
+{buildGoModule, fetchFromGitHub, lib}:
+buildGoModule rec {
+  pname = "cf-vault";
+  version = "0.0.18";
+
+  src = fetchFromGitHub {
+    owner = "jacobbednarz";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-vp9ufjNZabY/ck2lIT+QpD6IgaVj1BkBRTjPxkb6IjQ=";
+  };
+
+  vendorHash = "sha256-7qFB1Y1AnqMgdu186tAXCdoYOhCMz8pIh6sY02LbIgs=";
+
+  meta = with lib; {
+    description = ''
+      A tool for managing your Cloudflare credentials, securely..
+    '';
+    homepage = "https://github.com/jacobbednarz/cf-vault/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ viraptor ];
+    mainProgram = "cf-vault";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/chamber/default.nix b/nixpkgs/pkgs/tools/admin/chamber/default.nix
new file mode 100644
index 000000000000..2b3975002a16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/chamber/default.nix
@@ -0,0 +1,28 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "chamber";
+  version = "2.14.0";
+
+  src = fetchFromGitHub {
+    owner = "segmentio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vyVdEMs+vtZkN0UuXGmCPNB4hsfjiiG6LeWYFW3gLiw=";
+  };
+
+  CGO_ENABLED = 0;
+
+  vendorHash = "sha256-pxWsx/DURVOXGC2izKS91BhbHc220+/6t15eT4Jl128=";
+
+  ldflags = [ "-s" "-w" "-X main.Version=v${version}" ];
+
+  meta = with lib; {
+    description =
+      "A tool for managing secrets by storing them in AWS SSM Parameter Store";
+    homepage = "https://github.com/segmentio/chamber";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalekseev ];
+    mainProgram = "chamber";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/chkcrontab/default.nix b/nixpkgs/pkgs/tools/admin/chkcrontab/default.nix
new file mode 100644
index 000000000000..7d24270f8d53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/chkcrontab/default.nix
@@ -0,0 +1,20 @@
+{ lib, python3, fetchPypi }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "chkcrontab";
+  version = "1.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0gmxavjkjkvjysgf9cf5fcpk589gb75n1mn20iki82wifi1pk1jn";
+  };
+
+  meta = with lib; {
+    description = "A tool to detect crontab errors";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    homepage = "https://github.com/lyda/chkcrontab";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/cjdns-tools/default.nix b/nixpkgs/pkgs/tools/admin/cjdns-tools/default.nix
new file mode 100644
index 000000000000..0d2140940017
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/cjdns-tools/default.nix
@@ -0,0 +1,47 @@
+{ stdenv
+, cjdns
+, nodejs
+, makeWrapper
+, lib
+}:
+
+stdenv.mkDerivation {
+  pname = "cjdns-tools";
+  version = cjdns.version;
+
+  src = cjdns.src;
+
+  buildInputs = [
+    nodejs
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildPhase = ''
+    patchShebangs tools
+
+    sed -e "s|'password': 'NONE'|'password': Fs.readFileSync('/etc/cjdns.keys').toString().split('\\\\n').map(v => v.split('=')).filter(v => v[0] === 'CJDNS_ADMIN_PASSWORD').map(v => v[1])[0]|g" \
+      -i tools/lib/cjdnsadmin/cjdnsadmin.js
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cat ${./wrapper.sh} | sed "s|@@out@@|$out|g" > $out/bin/cjdns-tools
+    chmod +x $out/bin/cjdns-tools
+
+    cp -r tools $out/tools
+    find $out/tools -maxdepth 1 -type f -exec chmod -v a+x {} \;
+    cp -r node_modules $out/node_modules
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/cjdelisle/cjdns";
+    description = "Tools for cjdns managment";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    mainProgram = "cjdns-tools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/cjdns-tools/wrapper.sh b/nixpkgs/pkgs/tools/admin/cjdns-tools/wrapper.sh
new file mode 100644
index 000000000000..2e8d85b1dd91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/cjdns-tools/wrapper.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+
+export PATH="@@out@@/tools:$PATH"
+
+set -eo pipefail
+
+if ! cat /etc/cjdns.keys >/dev/null 2>&1; then
+  echo "ERROR: No permission to read /etc/cjdns.keys (use sudo)" >&2
+  exit 1
+fi
+
+if [[ -z $1 ]]; then
+  echo "Cjdns admin"
+
+  echo "Usage: $0 <command> <args..>"
+
+  echo
+  echo "Commands:" $(find @@out@@/tools -maxdepth 1 -type f | sed -r "s|.+/||g")
+
+  _sh=$(which sh)
+  PATH="@@out@@/tools" PS1="cjdns\$ " "$_sh"
+else
+  if [[ ! -e @@out@@/tools/$1 ]]; then
+    echo "ERROR: '$1' is not a valid tool" >&2
+    exit 2
+  else
+    "$@"
+  fi
+fi
diff --git a/nixpkgs/pkgs/tools/admin/clair/default.nix b/nixpkgs/pkgs/tools/admin/clair/default.nix
new file mode 100644
index 000000000000..24e9640bc9ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/clair/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, rpm
+, xz
+}:
+
+buildGoModule rec {
+  pname = "clair";
+  version = "4.7.2";
+
+  src = fetchFromGitHub {
+    owner = "quay";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-qnZLVt9pIrfZSCK0blNp5JHbaC4A8m6YicvL4hs2554=";
+  };
+
+  vendorHash = "sha256-mzrMiycW+kWtooCMWGLOHXPYJQ+y3wLMB2V+f4u4wtY=";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  subPackages = [
+    "cmd/clair"
+    "cmd/clairctl"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/clair \
+      --prefix PATH : "${lib.makeBinPath [ rpm xz ]}"
+  '';
+
+  meta = with lib; {
+    description = "Vulnerability Static Analysis for Containers";
+    homepage = "https://github.com/quay/clair";
+    changelog = "https://github.com/quay/clair/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/cli53/default.nix b/nixpkgs/pkgs/tools/admin/cli53/default.nix
new file mode 100644
index 000000000000..a6f677b287cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/cli53/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, cli53 }:
+
+buildGoModule rec {
+  pname = "cli53";
+  version = "0.8.22";
+
+  src = fetchFromGitHub {
+    owner = "barnybug";
+    repo = "cli53";
+    rev = version;
+    sha256 = "sha256-wfb3lK/WB/B8gd4BOqh+Ol10cNZdsoCoQ+hM33+goM8=";
+  };
+
+  vendorHash = "sha256-LKJXoXZS866UfJ+Edwf6AkAZmTV2Q1OI1mZfbsxHb3s=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/barnybug/cli53.version=${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = cli53;
+  };
+
+  meta = with lib; {
+    description = "CLI tool for the Amazon Route 53 DNS service";
+    homepage = "https://github.com/barnybug/cli53";
+    license = licenses.mit;
+    maintainers = with maintainers; [ benley ];
+    mainProgram = "cli53";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/coldsnap/default.nix b/nixpkgs/pkgs/tools/admin/coldsnap/default.nix
new file mode 100644
index 000000000000..1178b6a7b81e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/coldsnap/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, openssl
+, stdenv
+, Security
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "coldsnap";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "awslabs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zXLt16ffqbExU23uRI7U99nUwpSKTIf039dDq+k2KAA=";
+  };
+  cargoHash = "sha256-RRyAzD9eiscZ9kB5tFh5vUnGk6XYYKy0/TAjcaygmG4=";
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    homepage = "https://github.com/awslabs/coldsnap";
+    description = "A command line interface for Amazon EBS snapshots";
+    changelog = "https://github.com/awslabs/coldsnap/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = teams.determinatesystems.members;
+    mainProgram = "coldsnap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/colmena/default.nix b/nixpkgs/pkgs/tools/admin/colmena/default.nix
new file mode 100644
index 000000000000..b41b8a1457c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/colmena/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, installShellFiles, nix-eval-jobs
+, colmena, testers }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "colmena";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "zhaofengli";
+    repo = "colmena";
+    rev = "v${version}";
+    sha256 = "sha256-01bfuSY4gnshhtqA1EJCw2CMsKkAx+dHS+sEpQ2+EAQ=";
+  };
+
+  cargoSha256 = "sha256-rk2atWWJIR95duUXxAiARegjeCyfAsqTDwEr5P0eIr8=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ nix-eval-jobs ];
+
+  NIX_EVAL_JOBS = "${nix-eval-jobs}/bin/nix-eval-jobs";
+
+  postInstall = lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
+    installShellCompletion --cmd colmena \
+      --bash <($out/bin/colmena gen-completions bash) \
+      --zsh <($out/bin/colmena gen-completions zsh) \
+      --fish <($out/bin/colmena gen-completions fish)
+  '';
+
+  # Recursive Nix is not stable yet
+  doCheck = false;
+
+  passthru = {
+    # We guarantee CLI and Nix API stability for the same minor version
+    apiVersion = builtins.concatStringsSep "." (lib.take 2 (lib.splitVersion version));
+
+    tests.version = testers.testVersion { package = colmena; };
+  };
+
+  meta = with lib; {
+    description = "A simple, stateless NixOS deployment tool";
+    homepage = "https://colmena.cli.rs/${passthru.apiVersion}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zhaofengli ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "colmena";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/copilot-cli/default.nix b/nixpkgs/pkgs/tools/admin/copilot-cli/default.nix
new file mode 100644
index 000000000000..64fc1b20920b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/copilot-cli/default.nix
@@ -0,0 +1,49 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, copilot-cli }:
+
+buildGoModule rec {
+  pname = "copilot-cli";
+  version = "1.33.1";
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-/xuS5tJBV67gXGHQ93FpMXMLXnhAgnicQnKx/pnwyAM=";
+  };
+
+  vendorHash = "sha256-ekAuvvLxk9cwIuElosc6QbsW7+3f/mO8vsA74DA82D0=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # follow LINKER_FLAGS in Makefile
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/aws/copilot-cli/internal/pkg/version.Version=v${version}"
+    "-X github.com/aws/copilot-cli/internal/pkg/cli.binaryS3BucketPath=https://ecs-cli-v2-release.s3.amazonaws.com"
+  ];
+
+  subPackages = [ "./cmd/copilot" ];
+
+  postInstall = ''
+    installShellCompletion --cmd copilot \
+      --bash <($out/bin/copilot completion bash) \
+      --fish <($out/bin/copilot completion fish) \
+      --zsh <($out/bin/copilot completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = copilot-cli;
+    command = "copilot version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "Build, Release and Operate Containerized Applications on AWS";
+    homepage = "https://github.com/aws/copilot-cli";
+    changelog = "https://github.com/aws/copilot-cli/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jiegec ];
+    mainProgram = "copilot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/credhub-cli/default.nix b/nixpkgs/pkgs/tools/admin/credhub-cli/default.nix
new file mode 100644
index 000000000000..d9d630e243bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/credhub-cli/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "credhub-cli";
+  version = "2.9.26";
+
+  src = fetchFromGitHub {
+    owner = "cloudfoundry-incubator";
+    repo = "credhub-cli";
+    rev = version;
+    sha256 = "sha256-dohi1nlQniZnF3IL9lO2H6bkq4SaXoEnIat0KYR0lxg=";
+  };
+
+  # these tests require network access that we're not going to give them
+  postPatch = ''
+    rm commands/api_test.go
+    rm commands/socks5_test.go
+  '';
+  __darwinAllowLocalNetworking = true;
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X code.cloudfoundry.org/credhub-cli/version.Version=${version}"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/credhub-cli $out/bin/credhub
+  '';
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  meta = with lib; {
+    description = "Provides a command line interface to interact with CredHub servers";
+    homepage = "https://github.com/cloudfoundry-incubator/credhub-cli";
+    maintainers = with maintainers; [ ris ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/cw/default.nix b/nixpkgs/pkgs/tools/admin/cw/default.nix
new file mode 100644
index 000000000000..aa1d58e5156b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/cw/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "cw";
+  version = "4.1.1";
+
+  src = fetchFromGitHub {
+    owner = "lucagrulla";
+    repo = "cw";
+    rev = "v${version}";
+    sha256 = "sha256-JsWwvVEr7kSjUy0S6wVcn24Xyo4OHr5/uqmnjw6v+RI=";
+  };
+
+  vendorHash = "sha256-8L4q0IAvmNk5GCAC5agNfWFtokIkddO1Dec4m6/sWfg=";
+
+  meta = with lib; {
+    description = "The best way to tail AWS CloudWatch Logs from your terminal";
+    homepage = "https://github.com/lucagrulla/cw";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ onthestairs ];
+    mainProgram = "cw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/daemontools/default.nix b/nixpkgs/pkgs/tools/admin/daemontools/default.nix
new file mode 100644
index 000000000000..07830d6fe687
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/daemontools/default.nix
@@ -0,0 +1,66 @@
+{ fetchurl, bash, glibc, lib, stdenv, installShellFiles }:
+
+let
+  man-pages = fetchurl {
+    url = "https://salsa.debian.org/debian/daemontools/-/archive/debian/1%250.76-8/daemontools-debian-1%250.76-8.tar.gz?path=debian/daemontools-man";
+    sha256 = "sha256-om5r1ddUx1uObp9LR+SwCLLtm+rRuLoq28OLbhWhdzU=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "daemontools";
+  version = "0.76";
+
+  src = fetchurl {
+    url = "https://cr.yp.to/daemontools/daemontools-${version}.tar.gz";
+    sha256 = "07scvw88faxkscxi91031pjkpccql6wspk4yrlnsbrrb5c0kamd5";
+  };
+
+  patches = [ ./fix-nix-usernamespace-build.patch ];
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  configurePhase = ''
+    cd daemontools-${version}
+
+    sed -ie '1 s_$_ -include ${glibc.dev}/include/errno.h_' src/conf-cc
+
+    substituteInPlace src/Makefile \
+      --replace '/bin/sh' '${bash}/bin/bash -oxtrace'
+
+    sed -ie "s_^PATH=.*_PATH=$src/daemontools-${version}/compile:''${PATH}_" src/rts.tests
+
+    cat ${glibc.dev}/include/errno.h
+  '';
+
+  buildPhase = ''
+    package/compile
+  '';
+
+  installPhase = ''
+    for cmd in $(cat package/commands); do
+      install -Dm755 "command/$cmd" "$out/bin/$cmd"
+    done
+
+    tar -xz --strip-components=2 -f ${man-pages}
+    installManPage daemontools-man/*.8
+    install -v -Dm644 daemontools-man/README $man/share/doc/daemontools/README.man
+    # fix svscanboot
+    sed -i "s_/command/__"                    "$out/bin/svscanboot"
+    sed -i "s_/service_/var/service_g"        "$out/bin/svscanboot"
+    sed -i "s_^PATH=.*_PATH=$out/bin:\$PATH_" "$out/bin/svscanboot"
+  '';
+
+  # Keep README.man in the man output (see _multioutDocs())
+  outputDoc = "man";
+
+  meta = {
+    license = lib.licenses.publicDomain;
+    homepage = "https://cr.yp.to/daemontools.html";
+    description = "A collection of tools for managing UNIX services";
+
+    maintainers = with lib.maintainers; [ kevincox ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/daemontools/fix-nix-usernamespace-build.patch b/nixpkgs/pkgs/tools/admin/daemontools/fix-nix-usernamespace-build.patch
new file mode 100644
index 000000000000..9b784e7ca112
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/daemontools/fix-nix-usernamespace-build.patch
@@ -0,0 +1,10 @@
+--- admin.org/daemontools-0.76/src/chkshsgr.c	2001-07-12 17:49:49.000000000 +0100
++++ admin/daemontools-0.76/src/chkshsgr.c	2017-05-31 23:54:56.662174028 +0100
+@@ -4,6 +4,7 @@
+ 
+ int main()
+ {
++  return 0;
+   short x[4];
+ 
+   x[0] = x[1] = 0;
diff --git a/nixpkgs/pkgs/tools/admin/damon/default.nix b/nixpkgs/pkgs/tools/admin/damon/default.nix
new file mode 100644
index 000000000000..861b86985e04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/damon/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "damon";
+  version = "unstable-2021-10-06";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "damon";
+    rev = "542c79aecc44b1d0500f9cb9b2e13f07db1e2f35";
+    sha256 = "sha256-vg5PISNqk8N2nn7eABm+/7qzePDbKPkvovdZk2sZYsg=";
+  };
+
+  vendorHash = "sha256-/ZZxw6qEUJQUz3J0TxUYJECCcX276r74g0N2tV77+8I=";
+
+  meta = with lib; {
+    homepage = "https://github.com/hashicorp/damon";
+    license = licenses.mpl20;
+    description = "A terminal UI (TUI) for HashiCorp Nomad";
+    maintainers = teams.iog.members;
+    mainProgram = "damon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/dehydrated/default.nix b/nixpkgs/pkgs/tools/admin/dehydrated/default.nix
new file mode 100644
index 000000000000..d36028e3b227
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/dehydrated/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, coreutils, curl, diffutils, gawk, gnugrep, gnused, hexdump, openssl, makeWrapper, fetchFromGitHub, installShellFiles }:
+stdenv.mkDerivation rec {
+  pname = "dehydrated";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "lukas2511";
+    repo = "dehydrated";
+    rev = "v${version}";
+    sha256 = "sha256-K08eeruyT5vKzK3PzfCkubZiHbf9Yq7wzD1z69MeDtY=";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  installPhase = ''
+    installManPage docs/man/dehydrated.1
+
+    mkdir -p "$out/share/docs/dehydrated"
+    cp docs/*.md "$out/share/docs/dehydrated"
+    cp -r docs/examples "$out/share/docs/dehydrated"
+    cp {CHANGELOG,LICENSE,README.md} "$out/share/docs/dehydrated"
+
+    mkdir -p $out/bin
+    cp -a dehydrated $out/bin
+    wrapProgram "$out/bin/dehydrated" --prefix PATH : "${lib.makeBinPath [ openssl coreutils gnused gnugrep diffutils curl gawk hexdump ]}"
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Letsencrypt/acme client implemented as a shell-script";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.pstn ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/docker-credential-gcr/default.nix b/nixpkgs/pkgs/tools/admin/docker-credential-gcr/default.nix
new file mode 100644
index 000000000000..3899b2f6dc92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/docker-credential-gcr/default.nix
@@ -0,0 +1,53 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, testers, docker-credential-gcr }:
+
+buildGoModule rec {
+  pname = "docker-credential-gcr";
+  version = "2.1.8";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = "docker-credential-gcr";
+    rev = "v${version}";
+    sha256 = "sha256-6f84NRqMx0NX+3g+pCYgRYkGK4DaQmUEau3oMswUmSE=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-TestGet_GCRCredentials.patch";
+      url = "https://github.com/GoogleCloudPlatform/docker-credential-gcr/commit/a0c080e58bbfdeb0aa24e66551c4e8b0359bf178.patch";
+      sha256 = "sha256-aXp/1kNaxqQDPszC7pO+qP7ZBWHjpVljUHiKFnnDWuM=";
+    })
+  ];
+
+  postPatch = ''
+    rm -rf ./test
+  '';
+
+  vendorHash = "sha256-e7XNTizZYp/tS7KRvB9KxY3Yurphnm6Ehz4dHZNReK8=";
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/GoogleCloudPlatform/docker-credential-gcr/config.Version=${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = docker-credential-gcr;
+    command = "docker-credential-gcr version";
+  };
+
+  meta = with lib; {
+    description = "A Docker credential helper for GCR (https://gcr.io) users";
+    longDescription = ''
+      docker-credential-gcr is Google Container Registry's Docker credential
+      helper. It allows for Docker clients v1.11+ to easily make
+      authenticated requests to GCR's repositories (gcr.io, eu.gcr.io, etc.).
+    '';
+    homepage = "https://github.com/GoogleCloudPlatform/docker-credential-gcr";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ suvash ];
+    mainProgram = "docker-credential-gcr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/docker-credential-helpers/default.nix b/nixpkgs/pkgs/tools/admin/docker-credential-helpers/default.nix
new file mode 100644
index 000000000000..ba5aa38860ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/docker-credential-helpers/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, pkg-config, libsecret, testers, docker-credential-helpers }:
+
+buildGoModule rec {
+  pname = "docker-credential-helpers";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "docker";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Q1SdDfTT0W+eG/F5HX+pk4B06IG5ZoeZxe36l71gMc8=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ libsecret ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/docker/docker-credential-helpers/credentials.Version=${version}"
+  ];
+
+  buildPhase =
+    let
+      cmds = if stdenv.isDarwin then [ "osxkeychain" "pass" ] else [ "secretservice" "pass" ];
+    in
+    ''
+      for cmd in ${builtins.toString cmds}; do
+        go build -ldflags "${builtins.toString ldflags}" -trimpath -o bin/docker-credential-$cmd ./$cmd/cmd
+      done
+    '';
+
+  installPhase = ''
+    install -Dm755 -t $out/bin bin/docker-credential-*
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = docker-credential-helpers;
+    command = "docker-credential-pass version";
+  };
+
+  meta = with lib; {
+    description = "Suite of programs to use native stores to keep Docker credentials safe";
+    homepage = "https://github.com/docker/docker-credential-helpers";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam ];
+  } // lib.optionalAttrs stdenv.isDarwin {
+    mainProgram = "docker-credential-osxkeychain";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/drawterm/default.nix b/nixpkgs/pkgs/tools/admin/drawterm/default.nix
new file mode 100644
index 000000000000..e0c33457e168
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/drawterm/default.nix
@@ -0,0 +1,73 @@
+{ stdenv
+, lib
+, fetchFrom9Front
+, unstableGitUpdater
+, installShellFiles
+, makeWrapper
+, xorg
+, pkg-config
+, wayland-scanner
+, pipewire
+, wayland
+, wayland-protocols
+, libxkbcommon
+, wlr-protocols
+, pulseaudio
+, config
+, nixosTests
+}:
+
+stdenv.mkDerivation {
+  pname = "drawterm";
+  version = "unstable-2023-12-23";
+
+  src = fetchFrom9Front {
+    owner = "plan9front";
+    repo = "drawterm";
+    rev = "f9ae0c837bf8351037689f1985c1a52c1570ba30";
+    hash = "sha256-wJWMdD9OmGybIwgBNJ8LxxV21L4SaV22OxAILsDWG3U=";
+  };
+
+  enableParallelBuilding = true;
+  strictDeps = true;
+  nativeBuildInputs = [ installShellFiles ] ++ {
+    linux = [ pkg-config wayland-scanner ];
+    unix = [ makeWrapper ];
+  }."${config}" or (throw "unsupported CONF");
+
+  buildInputs = {
+    linux = [ pipewire wayland wayland-protocols libxkbcommon wlr-protocols ];
+    unix = [ xorg.libX11 xorg.libXt ];
+  }."${config}" or (throw "unsupported CONF");
+
+  # TODO: macos
+  makeFlags = [ "CONF=${config}" ];
+
+  installPhase = {
+    linux = ''
+      install -Dm755 -t $out/bin/ drawterm
+    '';
+    unix = ''
+      # wrapping the oss output with pulse seems to be the easiest
+      mv drawterm drawterm.bin
+      install -Dm755 -t $out/bin/ drawterm.bin
+      makeWrapper ${pulseaudio}/bin/padsp $out/bin/drawterm --add-flags $out/bin/drawterm.bin
+    '';
+  }."${config}" or (throw "unsupported CONF") + ''
+    installManPage drawterm.1
+  '';
+
+  passthru = {
+    updateScript = unstableGitUpdater { shallowClone = false; };
+    tests = nixosTests.drawterm;
+  };
+
+  meta = with lib; {
+    description = "Connect to Plan 9 CPU servers from other operating systems";
+    homepage = "https://drawterm.9front.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ luc65r moody ];
+    platforms = platforms.linux;
+    mainProgram = "drawterm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/ejson2env/default.nix b/nixpkgs/pkgs/tools/admin/ejson2env/default.nix
new file mode 100644
index 000000000000..9675d3775681
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ejson2env/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub, nix-update-script }:
+
+buildGoModule rec {
+  pname = "ejson2env";
+  version = "2.0.5";
+
+  src = fetchFromGitHub {
+    owner = "Shopify";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-HcUmFajbOUZ0T5Th6OA9WBtfTz646qLbXx8NVeJsVng=";
+  };
+
+  vendorHash = "sha256-agWcD8vFNde1SCdkRovMNPf+1KODxV8wW1mXvE0w/CI=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Decrypt EJSON secrets and export them as environment variables";
+    homepage = "https://github.com/Shopify/ejson2env";
+    maintainers = with maintainers; [ viraptor ];
+    license = licenses.mit;
+    mainProgram = "ejson2env";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/elasticsearch-curator/default.nix b/nixpkgs/pkgs/tools/admin/elasticsearch-curator/default.nix
new file mode 100644
index 000000000000..f09aad4a93e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/elasticsearch-curator/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "elasticsearch-curator";
+  version = "8.0.8";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "elastic";
+    repo = "curator";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-G8wKeEr7TuUWlqz9hJmnJW7yxn+4WPoStVC0AX5jdHI=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace "elasticsearch8==" "elasticsearch8>=" \
+      --replace "es_client==" "es_client>=" \
+      --replace "ecs-logging==" "ecs-logging>=" \
+      --replace "click==" "click>="\
+      --replace "pyyaml==" "pyyaml>="
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    hatchling
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    certifi
+    click
+    ecs-logging
+    elasticsearch8
+    es-client
+    pyyaml
+    six
+    voluptuous
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    mock
+    requests
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # Test requires running elasticsearch
+    "tests/integration/test_alias.py"
+    "tests/integration/test_allocation.py"
+    "tests/integration/test_cli.py"
+    "tests/integration/test_close.py"
+    "tests/integration/test_clusterrouting.py"
+    "tests/integration/test_count_pattern.py"
+    "tests/integration/test_create_index.py"
+    "tests/integration/test_datemath.py"
+    "tests/integration/test_delete_indices.py"
+    "tests/integration/test_delete_snapshots.py"
+    "tests/integration/test_delete_snapshots.py"
+    "tests/integration/test_es_repo_mgr.py"
+    "tests/integration/test_forcemerge.py"
+    "tests/integration/test_integrations.py"
+    "tests/integration/test_open.py"
+    "tests/integration/test_reindex.py"
+    "tests/integration/test_replicas.py"
+    "tests/integration/test_restore.py"
+    "tests/integration/test_rollover.py"
+    "tests/integration/test_shrink.py"
+    "tests/integration/test_snapshot.py"
+  ];
+
+  disabledTests = [
+    # Test require access network
+    "test_api_key_not_set"
+    "test_api_key_set"
+  ];
+
+  meta = with lib; {
+    description = "Curate, or manage, your Elasticsearch indices and snapshots";
+    homepage = "https://github.com/elastic/curator";
+    changelog = "https://github.com/elastic/curator/releases/tag/v${version}";
+    license = licenses.asl20;
+    longDescription = ''
+      Elasticsearch Curator helps you curate, or manage, your Elasticsearch
+      indices and snapshots by:
+
+      * Obtaining the full list of indices (or snapshots) from the cluster, as the
+        actionable list
+
+      * Iterate through a list of user-defined filters to progressively remove
+        indices (or snapshots) from this actionable list as needed.
+
+      * Perform various actions on the items which remain in the actionable list.
+    '';
+    maintainers = with maintainers; [ basvandijk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/exoscale-cli/default.nix b/nixpkgs/pkgs/tools/admin/exoscale-cli/default.nix
new file mode 100644
index 000000000000..4dedd6799ea7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/exoscale-cli/default.nix
@@ -0,0 +1,46 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "exoscale-cli";
+  version = "1.76.0";
+
+  src = fetchFromGitHub {
+    owner = "exoscale";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-mE1ELXMTQc5JU3d6JLuH4rm1+gfSQH4V29yJ9IkYOXU=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" "-X main.commit=${src.rev}" ];
+
+  # we need to rename the resulting binary but can't use buildFlags with -o here
+  # because these are passed to "go install" which does not recognize -o
+  postBuild = ''
+    mv $GOPATH/bin/cli $GOPATH/bin/exo
+
+    mkdir -p manpage
+    $GOPATH/bin/docs --man-page
+    rm $GOPATH/bin/docs
+
+    $GOPATH/bin/completion bash
+    $GOPATH/bin/completion zsh
+    rm $GOPATH/bin/completion
+  '';
+
+  postInstall = ''
+    installManPage manpage/*
+    installShellCompletion --cmd exo --bash bash_completion --zsh zsh_completion
+  '';
+
+  meta = {
+    description = "Command-line tool for everything at Exoscale: compute, storage, dns";
+    homepage = "https://github.com/exoscale/cli";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ viraptor ];
+    mainProgram = "exo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/fastlane/Gemfile b/nixpkgs/pkgs/tools/admin/fastlane/Gemfile
new file mode 100644
index 000000000000..1fa8dbca63b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fastlane/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'fastlane'
diff --git a/nixpkgs/pkgs/tools/admin/fastlane/Gemfile.lock b/nixpkgs/pkgs/tools/admin/fastlane/Gemfile.lock
new file mode 100644
index 000000000000..9f2cbafb8949
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fastlane/Gemfile.lock
@@ -0,0 +1,214 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (3.0.6)
+      rexml
+    addressable (2.8.6)
+      public_suffix (>= 2.0.2, < 6.0)
+    artifactory (3.0.15)
+    atomos (0.1.3)
+    aws-eventstream (1.3.0)
+    aws-partitions (1.877.0)
+    aws-sdk-core (3.190.1)
+      aws-eventstream (~> 1, >= 1.3.0)
+      aws-partitions (~> 1, >= 1.651.0)
+      aws-sigv4 (~> 1.8)
+      jmespath (~> 1, >= 1.6.1)
+    aws-sdk-kms (1.76.0)
+      aws-sdk-core (~> 3, >= 3.188.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.142.0)
+      aws-sdk-core (~> 3, >= 3.189.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.8)
+    aws-sigv4 (1.8.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+    babosa (1.0.4)
+    claide (1.1.0)
+    colored (1.2)
+    colored2 (3.1.2)
+    commander (4.6.0)
+      highline (~> 2.0.0)
+    declarative (0.0.20)
+    digest-crc (0.6.5)
+      rake (>= 12.0.0, < 14.0.0)
+    domain_name (0.6.20231109)
+    dotenv (2.8.1)
+    emoji_regex (3.2.3)
+    excon (0.109.0)
+    faraday (1.10.3)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-httpclient (~> 1.0)
+      faraday-multipart (~> 1.0)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.0)
+      faraday-patron (~> 1.0)
+      faraday-rack (~> 1.0)
+      faraday-retry (~> 1.0)
+      ruby2_keywords (>= 0.0.4)
+    faraday-cookie_jar (0.0.7)
+      faraday (>= 0.8.0)
+      http-cookie (~> 1.0.0)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-httpclient (1.0.1)
+    faraday-multipart (1.0.4)
+      multipart-post (~> 2)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday-patron (1.0.0)
+    faraday-rack (1.0.0)
+    faraday-retry (1.0.3)
+    faraday_middleware (1.2.0)
+      faraday (~> 1.0)
+    fastimage (2.3.0)
+    fastlane (2.219.0)
+      CFPropertyList (>= 2.3, < 4.0.0)
+      addressable (>= 2.8, < 3.0.0)
+      artifactory (~> 3.0)
+      aws-sdk-s3 (~> 1.0)
+      babosa (>= 1.0.3, < 2.0.0)
+      bundler (>= 1.12.0, < 3.0.0)
+      colored
+      commander (~> 4.6)
+      dotenv (>= 2.1.1, < 3.0.0)
+      emoji_regex (>= 0.1, < 4.0)
+      excon (>= 0.71.0, < 1.0.0)
+      faraday (~> 1.0)
+      faraday-cookie_jar (~> 0.0.6)
+      faraday_middleware (~> 1.0)
+      fastimage (>= 2.1.0, < 3.0.0)
+      gh_inspector (>= 1.1.2, < 2.0.0)
+      google-apis-androidpublisher_v3 (~> 0.3)
+      google-apis-playcustomapp_v1 (~> 0.1)
+      google-cloud-env (>= 1.6.0, < 2.0.0)
+      google-cloud-storage (~> 1.31)
+      highline (~> 2.0)
+      http-cookie (~> 1.0.5)
+      json (< 3.0.0)
+      jwt (>= 2.1.0, < 3)
+      mini_magick (>= 4.9.4, < 5.0.0)
+      multipart-post (>= 2.0.0, < 3.0.0)
+      naturally (~> 2.2)
+      optparse (>= 0.1.1)
+      plist (>= 3.1.0, < 4.0.0)
+      rubyzip (>= 2.0.0, < 3.0.0)
+      security (= 0.1.3)
+      simctl (~> 1.6.3)
+      terminal-notifier (>= 2.0.0, < 3.0.0)
+      terminal-table (~> 3)
+      tty-screen (>= 0.6.3, < 1.0.0)
+      tty-spinner (>= 0.8.0, < 1.0.0)
+      word_wrap (~> 1.0.0)
+      xcodeproj (>= 1.13.0, < 2.0.0)
+      xcpretty (~> 0.3.0)
+      xcpretty-travis-formatter (>= 0.0.3)
+    gh_inspector (1.1.3)
+    google-apis-androidpublisher_v3 (0.54.0)
+      google-apis-core (>= 0.11.0, < 2.a)
+    google-apis-core (0.11.2)
+      addressable (~> 2.5, >= 2.5.1)
+      googleauth (>= 0.16.2, < 2.a)
+      httpclient (>= 2.8.1, < 3.a)
+      mini_mime (~> 1.0)
+      representable (~> 3.0)
+      retriable (>= 2.0, < 4.a)
+      rexml
+      webrick
+    google-apis-iamcredentials_v1 (0.17.0)
+      google-apis-core (>= 0.11.0, < 2.a)
+    google-apis-playcustomapp_v1 (0.13.0)
+      google-apis-core (>= 0.11.0, < 2.a)
+    google-apis-storage_v1 (0.29.0)
+      google-apis-core (>= 0.11.0, < 2.a)
+    google-cloud-core (1.6.1)
+      google-cloud-env (>= 1.0, < 3.a)
+      google-cloud-errors (~> 1.0)
+    google-cloud-env (1.6.0)
+      faraday (>= 0.17.3, < 3.0)
+    google-cloud-errors (1.3.1)
+    google-cloud-storage (1.45.0)
+      addressable (~> 2.8)
+      digest-crc (~> 0.4)
+      google-apis-iamcredentials_v1 (~> 0.1)
+      google-apis-storage_v1 (~> 0.29.0)
+      google-cloud-core (~> 1.6)
+      googleauth (>= 0.16.2, < 2.a)
+      mini_mime (~> 1.0)
+    googleauth (1.8.1)
+      faraday (>= 0.17.3, < 3.a)
+      jwt (>= 1.4, < 3.0)
+      multi_json (~> 1.11)
+      os (>= 0.9, < 2.0)
+      signet (>= 0.16, < 2.a)
+    highline (2.0.3)
+    http-cookie (1.0.5)
+      domain_name (~> 0.5)
+    httpclient (2.8.3)
+    jmespath (1.6.2)
+    json (2.7.1)
+    jwt (2.7.1)
+    mini_magick (4.12.0)
+    mini_mime (1.1.5)
+    multi_json (1.15.0)
+    multipart-post (2.3.0)
+    nanaimo (0.3.0)
+    naturally (2.2.1)
+    optparse (0.4.0)
+    os (1.1.4)
+    plist (3.7.1)
+    public_suffix (5.0.4)
+    rake (13.1.0)
+    representable (3.2.0)
+      declarative (< 0.1.0)
+      trailblazer-option (>= 0.1.1, < 0.2.0)
+      uber (< 0.2.0)
+    retriable (3.1.2)
+    rexml (3.2.6)
+    rouge (2.0.7)
+    ruby2_keywords (0.0.5)
+    rubyzip (2.3.2)
+    security (0.1.3)
+    signet (0.18.0)
+      addressable (~> 2.8)
+      faraday (>= 0.17.5, < 3.a)
+      jwt (>= 1.5, < 3.0)
+      multi_json (~> 1.10)
+    simctl (1.6.10)
+      CFPropertyList
+      naturally
+    terminal-notifier (2.0.0)
+    terminal-table (3.0.2)
+      unicode-display_width (>= 1.1.1, < 3)
+    trailblazer-option (0.1.2)
+    tty-cursor (0.7.1)
+    tty-screen (0.8.2)
+    tty-spinner (0.9.3)
+      tty-cursor (~> 0.7)
+    uber (0.1.0)
+    unicode-display_width (2.5.0)
+    webrick (1.8.1)
+    word_wrap (1.0.0)
+    xcodeproj (1.23.0)
+      CFPropertyList (>= 2.3.3, < 4.0)
+      atomos (~> 0.1.3)
+      claide (>= 1.0.2, < 2.0)
+      colored2 (~> 3.1)
+      nanaimo (~> 0.3.0)
+      rexml (~> 3.2.4)
+    xcpretty (0.3.0)
+      rouge (~> 2.0.7)
+    xcpretty-travis-formatter (1.0.1)
+      xcpretty (~> 0.2, >= 0.0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fastlane
+
+BUNDLED WITH
+   2.4.22
diff --git a/nixpkgs/pkgs/tools/admin/fastlane/default.nix b/nixpkgs/pkgs/tools/admin/fastlane/default.nix
new file mode 100644
index 000000000000..b1ad9fa401c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fastlane/default.nix
@@ -0,0 +1,29 @@
+{ lib, bundlerApp, bundlerUpdateScript, makeBinaryWrapper }:
+
+bundlerApp {
+  pname = "fastlane";
+  gemdir = ./.;
+  exes = [ "fastlane" ];
+
+  buildInputs = [ makeBinaryWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/fastlane --set FASTLANE_SKIP_UPDATE_CHECK 1
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "fastlane";
+
+  meta = with lib; {
+    description = "A tool to automate building and releasing iOS and Android apps";
+    longDescription = "fastlane is a tool for iOS and Android developers to automate tedious tasks like generating screenshots, dealing with provisioning profiles, and releasing your application.";
+    homepage = "https://fastlane.tools/";
+    license = licenses.mit;
+    maintainers = with maintainers; [
+      peterromfeldhk
+      nicknovitski
+      shahrukh330
+      marsam
+    ];
+    mainProgram = "fastlane";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/fastlane/gemset.nix b/nixpkgs/pkgs/tools/admin/fastlane/gemset.nix
new file mode 100644
index 000000000000..1afc21c27a16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fastlane/gemset.nix
@@ -0,0 +1,893 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0irbdwkkjwzajq1ip6ba46q49sxnrl2cw7ddkdhsfhb6aprnm3vr";
+      type = "gem";
+    };
+    version = "2.8.6";
+  };
+  artifactory = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wify8rhjwr5bw5y6ary61vba290vk766cxw9a9mg05yswmaisls";
+      type = "gem";
+    };
+    version = "3.0.15";
+  };
+  atomos = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vq6sjyswr5jfzwdccw748kgph6bdw30bakwnn6p8sl4hpv4hvx";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gvdg4yx4p9av2glmp7vsxhs0n8fj1ga9kq2xdb8f95j7b04qhzi";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zcwrlg4in3gzvsiynpzp9fzlr5grrhc2881xcgfs01ppmxysllm";
+      type = "gem";
+    };
+    version = "1.877.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ansagfl5irx1y6b9xf4xpi9j6q6k5pbd2aw80hn0p4m3ycafamh";
+      type = "gem";
+    };
+    version = "3.190.1";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jfgw9a9c8xyjhkmgpd9rpi95h9i0rhbqszn8iqkbfm9rc9m1xz7";
+      type = "gem";
+    };
+    version = "1.76.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sfpipfdmixpc0madfx1yvpwpv52fdhxfx4bmvrjxzb6ra78ikbr";
+      type = "gem";
+    };
+    version = "1.142.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g3w27wzjy4si6kp49w10as6ml6g6zl3xrfqs5ikpfciidv9kpc4";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  babosa = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16dwqn33kmxkqkv51cwiikdkbrdjfsymlnc0rgbjwilmym8a9phq";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  CFPropertyList = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a36zn77yyibqsfpka0i8vgf3yv98ic2b9wwlbc29566y8wpa2bq";
+      type = "gem";
+    };
+    version = "3.0.6";
+  };
+  claide = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bpqhc0kqjp1bh9b7ffc395l9gfls0337rrhmab4v46ykl45qg3d";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  colored = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0x5jmsyi0z69bm6sij1k89z7h0laag3cb4mdn7zkl9qmxb90lx";
+      type = "gem";
+    };
+    version = "1.2";
+  };
+  colored2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  commander = {
+    dependencies = ["highline"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n8k547hqq9hvbyqbx2qi08g0bky20bbjca1df8cqq5frhzxq7bx";
+      type = "gem";
+    };
+    version = "4.6.0";
+  };
+  declarative = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yczgnqrbls7shrg63y88g7wand2yp9h6sf56c9bdcksn5nds8c0";
+      type = "gem";
+    };
+    version = "0.0.20";
+  };
+  digest-crc = {
+    dependencies = ["rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09114ndpnnyamc2q07bmpzw7kp3rbbfv7plmxcbzzi9d6prmd92w";
+      type = "gem";
+    };
+    version = "0.6.5";
+  };
+  domain_name = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gpciaifmxql8h01ci12qq08dnqrdlzkkz6fmia9v9yc3r9a29si";
+      type = "gem";
+    };
+    version = "0.6.20231109";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n0pi8x8ql5h1mijvm8lgn6bhq4xjb5a500p5r1krq4s6j9lg565";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  emoji_regex = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jsnrkfy345v66jlm2xrz8znivfnamg3mfzkddn414bndf2vxn7c";
+      type = "gem";
+    };
+    version = "3.2.3";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kmmwgjzlrnc3nnrdnw1z67c95nbw0hv54a73yj8jw6pcvl9585x";
+      type = "gem";
+    };
+    version = "0.109.0";
+  };
+  faraday = {
+    dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-httpclient" "faraday-multipart" "faraday-net_http" "faraday-net_http_persistent" "faraday-patron" "faraday-rack" "faraday-retry" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c760q0ks4vj4wmaa7nh1dgvgqiwaw0mjr7v8cymy7i3ffgjxx90";
+      type = "gem";
+    };
+    version = "1.10.3";
+  };
+  faraday-cookie_jar = {
+    dependencies = ["faraday" "http-cookie"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00hligx26w9wdnpgsrf0qdnqld4rdccy8ym6027h5m735mpvxjzk";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+  faraday-em_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-em_synchrony = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  faraday-httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-multipart = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09871c4hd7s5ws1wl4gs7js1k2wlby6v947m2bbzg43pnld044lh";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-net_http_persistent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  faraday-patron = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h184g4vqql5jv9s9im6igy00jp6mrah2h14py6mpf9bkabfqq7g";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-retry = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153i967yrwnswqgvnnajgwp981k9p50ys1h80yz3q94rygs59ldd";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bw8mfh4yin2xk7138rg3fhb2p5g2dlmdma88k82psah9mbmvlfy";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  fastimage = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "104kn1lj55hifcpiw1x7x9slskvqmfanylcz3nj8acjgmri0av72";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  fastlane = {
+    dependencies = ["CFPropertyList" "addressable" "artifactory" "aws-sdk-s3" "babosa" "colored" "commander" "dotenv" "emoji_regex" "excon" "faraday" "faraday-cookie_jar" "faraday_middleware" "fastimage" "gh_inspector" "google-apis-androidpublisher_v3" "google-apis-playcustomapp_v1" "google-cloud-env" "google-cloud-storage" "highline" "http-cookie" "json" "jwt" "mini_magick" "multipart-post" "naturally" "optparse" "plist" "rubyzip" "security" "simctl" "terminal-notifier" "terminal-table" "tty-screen" "tty-spinner" "word_wrap" "xcodeproj" "xcpretty" "xcpretty-travis-formatter"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g3rg730nf7fr4pjy7fpw19iwxng871mb1d85639fn1bmhma6j7v";
+      type = "gem";
+    };
+    version = "2.219.0";
+  };
+  gh_inspector = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f8r9byajj3bi2c7c5sqrc7m0zrv3nblfcd4782lw5l73cbsgk04";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  google-apis-androidpublisher_v3 = {
+    dependencies = ["google-apis-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "046j100lrh5dhb8p3gr38fyqrw8vcif97pqb55ysipy874lafw49";
+      type = "gem";
+    };
+    version = "0.54.0";
+  };
+  google-apis-core = {
+    dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "rexml" "webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cly6ycryjhk15d60v3nqvhqpjk9f0nznnslbdnin90f5r54sbpd";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  google-apis-iamcredentials_v1 = {
+    dependencies = ["google-apis-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ysil0bkh755kmf9xvw5szhk1yyh3gqzwfsrbwsrl77gsv7jarcs";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+  google-apis-playcustomapp_v1 = {
+    dependencies = ["google-apis-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mlgwiid5lgg41y7qk8ca9lzhwx5njs25hz5fbf1mdal0kwm37lm";
+      type = "gem";
+    };
+    version = "0.13.0";
+  };
+  google-apis-storage_v1 = {
+    dependencies = ["google-apis-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k432qgxf41c4m6d68rascm0gyj18r7ypmrnyzmxh7k7nh543awx";
+      type = "gem";
+    };
+    version = "0.29.0";
+  };
+  google-cloud-core = {
+    dependencies = ["google-cloud-env" "google-cloud-errors"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00wfvdvdv9m4l5ydn6xp65n68mgmpqr3n09hzvxs7gp8fly3j17v";
+      type = "gem";
+    };
+    version = "1.6.1";
+  };
+  google-cloud-env = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05gshdqscg4kil6ppfzmikyavsx449bxyj47j33r4n4p8swsqyb1";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  google-cloud-errors = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0flpj7v196c3xsqx4yjb7rjcj8p0by4rhj6qf5zanw4p1i41ssf0";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  google-cloud-storage = {
+    dependencies = ["addressable" "digest-crc" "google-apis-iamcredentials_v1" "google-apis-storage_v1" "google-cloud-core" "googleauth" "mini_mime"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0033bi8qwm0ksxsv5zhz4nzwsiaapq3xk79z8f8rx3v09vdap07j";
+      type = "gem";
+    };
+    version = "1.45.0";
+  };
+  googleauth = {
+    dependencies = ["faraday" "jwt" "multi_json" "os" "signet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ry9v23kndgx2pxq9v31l68k9lnnrcz1w4v75bkxq88jmbddljl1";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r9jmjhg2ly3l736flk7r2al47b5c8cayh0gqkq0yhjqzc9a6zhq";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  jwt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16z11alz13vfc4zs5l3fk6n51n2jw9lskvc4h4prnww0y797qd87";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  mini_magick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0slh78f9z6n0l1i2km7m48yz7l4fjrk88sj1f4mh1wb39sl2yc37";
+      type = "gem";
+    };
+    version = "4.12.0";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vycif7pjzkr29mfk4dlqv3disc5dn0va04lkwajlpr1wkibg0c6";
+      type = "gem";
+    };
+    version = "1.1.5";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lgyysrpl50wgcb9ahg29i4p01z0irb3p9lirygma0kkfr5dgk9x";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  nanaimo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xi36h3f7nm8bc2k0b6svpda1lyank2gf872lxjbhw3h95hdrbma";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  naturally = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04x1nkx6gkqzlc4phdvq05v3vjds6mgqhjqzqpcs6vdh5xyqrf59";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  optparse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pmsn1g1q5fpkjrc4h1wlw6lxlqp165sdcd951xyl47n6k0az17m";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  os = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gwd20smyhxbm687vdikfh1gpi96h8qb1x28s2pdcysf6dm6v0ap";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  plist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b643i5b7b7galvlb2fc414ifmb78b5lsq47gnvhzl8m27dl559z";
+      type = "gem";
+    };
+    version = "3.7.1";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bni4qjrsh2q49pnmmd6if4iv3ak36bd2cckrs6npl111n769k9m";
+      type = "gem";
+    };
+    version = "5.0.4";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ilr853hawi09626axx0mps4rkkmxcs54mapz9jnqvpnlwd3wsmy";
+      type = "gem";
+    };
+    version = "13.1.0";
+  };
+  representable = {
+    dependencies = ["declarative" "trailblazer-option" "uber"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kms3r6w6pnryysnaqqa9fsn0v73zx1ilds9d1c565n3xdzbyafc";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  retriable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q48hqws2dy1vws9schc0kmina40gy7sn5qsndpsfqdslh65snha";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sfikq1q8xyqqx690iiz7ybhzx87am4w50w8f2nq36l3asw4x89d";
+      type = "gem";
+    };
+    version = "2.0.7";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  security = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ryjxs0j66wrbky2c08yf0mllwalvpg12rpxzbdx2rdhj3cbrlxa";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  signet = {
+    dependencies = ["addressable" "faraday" "jwt" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fzakk5y7zzii76zlkynpp1c764mzkkfg4mpj18f5pf2xp1aikb6";
+      type = "gem";
+    };
+    version = "0.18.0";
+  };
+  simctl = {
+    dependencies = ["CFPropertyList" "naturally"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sr3z4kmp6ym7synicyilj9vic7i9nxgaszqx6n1xn1ss7s7g45r";
+      type = "gem";
+    };
+    version = "1.6.10";
+  };
+  terminal-notifier = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1slc0y8pjpw30hy21v8ypafi8r7z9jlj4bjbgz03b65b28i2n3bs";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14dfmfjppmng5hwj7c5ka6qdapawm3h6k9lhn8zj001ybypvclgr";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  trailblazer-option = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18s48fndi2kfvrfzmq6rxvjfwad347548yby0341ixz1lhpg3r10";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  tty-screen = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l4vh6g333jxm9lakilkva2gn17j6gb052626r1pdbmy2lhnb460";
+      type = "gem";
+    };
+    version = "0.8.2";
+  };
+  tty-spinner = {
+    dependencies = ["tty-cursor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hh5awmijnzw9flmh5ak610x1d00xiqagxa5mbr63ysggc26y0qf";
+      type = "gem";
+    };
+    version = "0.9.3";
+  };
+  uber = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p1mm7mngg40x05z52md3mbamkng0zpajbzqjjwmsyw0zw3v9vjv";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d0azx233nags5jx3fqyr23qa2rhgzbhv8pxp46dgbg1mpf82xky";
+      type = "gem";
+    };
+    version = "2.5.0";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qm7s0gr2pmfcl7dxrmq38asaza4w0i2n9my4yzs499j731wh8r";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  word_wrap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iyc5bc7dbgsd8j3yk1i99ral39f23l6wapi0083fbl19hid8mpm";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  xcodeproj = {
+    dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "176ndahc5fssyx04q176vy6wngs1av4vrsdrkdpjij700hqll8hn";
+      type = "gem";
+    };
+    version = "1.23.0";
+  };
+  xcpretty = {
+    dependencies = ["rouge"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xq47q2h5llj7b54rws4796904vnnjz7qqnacdv7wlp3gdbwrivm";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  xcpretty-travis-formatter = {
+    dependencies = ["xcpretty"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14rg4f70klrs910n7rsgfa4dn8s2qyny55194ax2qyyb2wpk7k5a";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/fbvnc/default.nix b/nixpkgs/pkgs/tools/admin/fbvnc/default.nix
new file mode 100644
index 000000000000..0157f391d66b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fbvnc/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fbvnc";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "zohead";
+    repo = pname;
+    rev = "783204ff6c92afec33d6d36f7e74f1fcf2b1b601";
+    hash = "sha256-oT7+6kIeFDgU6GbcHYQ6k0jCU84p8fTEVgUozYMkeVI=";
+  };
+
+  makeFlags = [
+    "CC:=$(CC)"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 fbvnc     -t "$out/bin"
+    install -Dm444 README.md -t "$out/share/doc/fbvnc"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Framebuffer VNC client";
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.linux;
+    homepage = "https://github.com/zohead/fbvnc/";
+    mainProgram = "fbvnc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/fioctl/default.nix b/nixpkgs/pkgs/tools/admin/fioctl/default.nix
new file mode 100644
index 000000000000..06c30bda2be0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fioctl/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, fioctl }:
+
+buildGoModule rec {
+  pname = "fioctl";
+  version = "0.40";
+
+  src = fetchFromGitHub {
+    owner = "foundriesio";
+    repo = "fioctl";
+    rev = "v${version}";
+    sha256 = "sha256-G1CHm5z2D7l3NDmUMhubJsrXYUHb6FJ70EsYQShhsDE=";
+  };
+
+  vendorHash = "sha256-j0tdFvOEp9VGx8OCfUruCzwVSB8thcenpvVNn7Rf0dA=";
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/foundriesio/fioctl/subcommands/version.Commit=${src.rev}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd fioctl \
+      --bash <($out/bin/fioctl completion bash) \
+      --fish <($out/bin/fioctl completion fish) \
+      --zsh <($out/bin/fioctl completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = fioctl;
+    command = "HOME=$(mktemp -d) fioctl version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "A simple CLI to manage your Foundries Factory";
+    homepage = "https://github.com/foundriesio/fioctl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nixinator matthewcroughan ];
+    mainProgram = "fioctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/fits-cloudctl/default.nix b/nixpkgs/pkgs/tools/admin/fits-cloudctl/default.nix
new file mode 100644
index 000000000000..c6aa0a2a7080
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fits-cloudctl/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "fits-cloudctl";
+  version = "0.12.13";
+
+  src = fetchFromGitHub {
+    owner = "fi-ts";
+    repo = "cloudctl";
+    rev = "v${version}";
+    sha256 = "sha256-Vb7jBgk052WBnlUgS5lVooi/bY49rRqCWbOO4cPkPx4=";
+  };
+
+  vendorHash = "sha256-NR5Jw4zCYRg6xc9priCVNH+9wOVWx3bmstc3nkQDmv8=";
+
+  meta = with lib; {
+    description = "Command-line client for FI-TS Finance Cloud Native services";
+    homepage = "https://github.com/fi-ts/cloudctl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ j0xaf ];
+    mainProgram = "cloudctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/gam/default.nix b/nixpkgs/pkgs/tools/admin/gam/default.nix
new file mode 100644
index 000000000000..6cf340150ffb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/gam/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gam";
+  version = "6.25";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "GAM-team";
+    repo = "gam";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-/VmBFMjCkd1xhudlcjYGGv+6tgEsyY/xqQoGdupJvOg=";
+  };
+
+  sourceRoot = "${src.name}/src";
+
+  patches = [
+    # Also disables update check
+    ./signal_files_as_env_vars.patch
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    distro
+    filelock
+    google-api-python-client
+    google-auth
+    google-auth-oauthlib
+    passlib
+    pathvalidate
+    python-dateutil
+    setuptools
+  ];
+
+  # Use XDG-ish dirs for configuration. These would otherwise be in the gam
+  # package.
+  #
+  # Using --run as `makeWapper` evaluates variables for --set and --set-default
+  # at build time and then single quotes the vars in the wrapper, thus they
+  # wouldn't get expanded. But using --run allows setting default vars that are
+  # evaluated on run and not during build time.
+   makeWrapperArgs = [
+    ''--run 'export GAMUSERCONFIGDIR="''${XDG_CONFIG_HOME:-$HOME/.config}/gam"' ''
+    ''--run 'export GAMSITECONFIGDIR="''${XDG_CONFIG_HOME:-$HOME/.config}/gam"' ''
+    ''--run 'export GAMCACHEDIR="''${XDG_CACHE_HOME:-$HOME/.cache}/gam"' ''
+    ''--run 'export GAMDRIVEDIR="$PWD"' ''
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp gam.py $out/bin/gam
+    mkdir -p $out/${python3.sitePackages}
+    cp -r gam $out/${python3.sitePackages}
+    runHook postInstall
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+    ${python3.interpreter} -m unittest discover --pattern "*_test.py" --buffer
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Command line management for Google Workspace";
+    homepage = "https://github.com/GAM-team/GAM/wiki";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ thanegill ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/admin/gam/signal_files_as_env_vars.patch b/nixpkgs/pkgs/tools/admin/gam/signal_files_as_env_vars.patch
new file mode 100644
index 000000000000..640a416d8a3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/gam/signal_files_as_env_vars.patch
@@ -0,0 +1,38 @@
+diff --git a/gam/__init__.py b/gam/__init__.py
+index 1c187ce..b2de793 100755
+--- a/gam/__init__.py
++++ b/gam/__init__.py
+@@ -549,22 +549,16 @@ def SetGlobalVariables():
+     _getOldEnvVar(GC_TLS_MIN_VERSION, 'GAM_TLS_MIN_VERSION')
+     _getOldEnvVar(GC_TLS_MAX_VERSION, 'GAM_TLS_MAX_VERSION')
+     _getOldEnvVar(GC_CA_FILE, 'GAM_CA_FILE')
+-    _getOldSignalFile(GC_DEBUG_LEVEL,
+-                      'debug.gam',
+-                      filePresentValue=4,
+-                      fileAbsentValue=0)
+-    _getOldSignalFile(GC_NO_BROWSER, 'nobrowser.txt')
+-    _getOldSignalFile(GC_NO_TDEMAIL, 'notdemail.txt')
+-    _getOldSignalFile(GC_OAUTH_BROWSER, 'oauthbrowser.txt')
++    _getOldEnvVar(GC_DEBUG_LEVEL, 'GAM_DEBUG')
++    _getOldEnvVar(GC_NO_BROWSER, 'GAM_NO_BROWSER')
++    _getOldEnvVar(GC_NO_TDEMAIL, 'GAM_NO_TDEMAIL')
++    _getOldEnvVar(GC_OAUTH_BROWSER, 'GAM_OAUTH_BROWSER')
+     #  _getOldSignalFile(GC_NO_CACHE, u'nocache.txt')
+     #  _getOldSignalFile(GC_CACHE_DISCOVERY_ONLY, u'allcache.txt', filePresentValue=False, fileAbsentValue=True)
+-    _getOldSignalFile(GC_NO_CACHE,
+-                      'allcache.txt',
+-                      filePresentValue=False,
+-                      fileAbsentValue=True)
+-    _getOldSignalFile(GC_NO_SHORT_URLS, 'noshorturls.txt')
+-    _getOldSignalFile(GC_NO_UPDATE_CHECK, 'noupdatecheck.txt')
+-    _getOldSignalFile(GC_ENABLE_DASA, FN_ENABLEDASA_TXT)
++    _getOldEnvVar(GC_NO_CACHE, 'GAM_NO_CACHE')
++    _getOldEnvVar(GC_NO_SHORT_URLS, 'GAM_NO_SHORT_URLS')
++    GC_Defaults[GC_NO_UPDATE_CHECK] = True
++    _getOldEnvVar(GC_ENABLE_DASA, FN_ENABLEDASA_TXT)
+     # Assign directories first
+     for itemName in GC_VAR_INFO:
+         if GC_VAR_INFO[itemName][GC_VAR_TYPE] == GC_TYPE_DIRECTORY:
+--
+2.36.0
+
diff --git a/nixpkgs/pkgs/tools/admin/gimme-aws-creds/default.nix b/nixpkgs/pkgs/tools/admin/gimme-aws-creds/default.nix
new file mode 100644
index 000000000000..82081a68af43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/gimme-aws-creds/default.nix
@@ -0,0 +1,101 @@
+{ lib
+, installShellFiles
+, python3
+, fetchPypi
+, fetchFromGitHub
+, nix-update-script
+, testers
+, gimme-aws-creds
+}:
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      fido2 = super.fido2.overridePythonAttrs (oldAttrs: rec {
+        version = "0.9.3";
+        format = "setuptools";
+        src = fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          hash = "sha256-tF6JphCc/Lfxu1E3dqotZAjpXEgi+DolORi5RAg0Zuw=";
+        };
+      });
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "gimme-aws-creds";
+  version = "2.8.0"; # N.B: if you change this, check if overrides are still up-to-date
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "Nike-Inc";
+    repo = "gimme-aws-creds";
+    rev = "v${version}";
+    hash = "sha256-RcqvI+jR7TiNAzq8F6VGVhyj6MxnmsjQKh0CiZvLY9Q=";
+  };
+
+  nativeBuildInputs = with python.pkgs; [
+    installShellFiles
+    pythonRelaxDepsHook
+  ];
+
+  pythonRemoveDeps = [
+    "configparser"
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    boto3
+    fido2
+    beautifulsoup4
+    ctap-keyring-device
+    requests
+    okta
+    pyjwt
+    html5lib
+    furl
+  ];
+
+  preCheck = ''
+    # Disable using platform's keyring unavailable in sandbox
+    export PYTHON_KEYRING_BACKEND="keyring.backends.fail.Keyring"
+  '';
+
+  checkInputs = with python.pkgs; [
+    pytestCheckHook
+    responses
+  ];
+
+  disabledTests = [
+    "test_build_factor_name_webauthn_registered"
+  ];
+
+  pythonImportsCheck = [
+    "gimme_aws_creds"
+  ];
+
+  postInstall = ''
+    rm $out/bin/gimme-aws-creds.cmd
+    chmod +x $out/bin/gimme-aws-creds
+    installShellCompletion --bash --name gimme-aws-creds $out/bin/gimme-aws-creds-autocomplete.sh
+    rm $out/bin/gimme-aws-creds-autocomplete.sh
+  '';
+
+  passthru = {
+    inherit python;
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = gimme-aws-creds;
+      command = ''touch tmp.conf && OKTA_CONFIG="tmp.conf" gimme-aws-creds --version'';
+      version = "gimme-aws-creds ${version}";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/Nike-Inc/gimme-aws-creds";
+    changelog = "https://github.com/Nike-Inc/gimme-aws-creds/releases";
+    description = "A CLI that utilizes Okta IdP via SAML to acquire temporary AWS credentials";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jbgosselin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/gixy/default.nix b/nixpkgs/pkgs/tools/admin/gixy/default.nix
new file mode 100644
index 000000000000..31c2e88dd825
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/gixy/default.nix
@@ -0,0 +1,62 @@
+{ lib, fetchFromGitHub, python3 }:
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      pyparsing = super.pyparsing.overridePythonAttrs rec {
+        version = "2.4.7";
+        src = fetchFromGitHub {
+          owner = "pyparsing";
+          repo = "pyparsing";
+          rev = "pyparsing_${version}";
+          sha256 = "14pfy80q2flgzjcx8jkracvnxxnr59kjzp3kdm5nh232gk1v6g6h";
+        };
+        nativeBuildInputs = [
+          super.setuptools
+        ];
+      };
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "gixy";
+  version = "0.1.20";
+  format = "setuptools";
+
+  # package is only compatible with python 2.7 and 3.5+
+  disabled = with python.pkgs; !(pythonAtLeast "3.5" || isPy27);
+
+  # fetching from GitHub because the PyPi source is missing the tests
+  src = fetchFromGitHub {
+    owner = "yandex";
+    repo = "gixy";
+    rev = "v${version}";
+    sha256 = "14arz3fjidb8z37m08xcpih1391varj8s0v3gri79z3qb4zq5k6b";
+  };
+
+  postPatch = ''
+    sed -ie '/argparse/d' setup.py
+  '';
+
+  propagatedBuildInputs = with python.pkgs; [
+    cached-property
+    configargparse
+    pyparsing
+    jinja2
+    nose3
+    setuptools
+    six
+  ];
+
+  meta = with lib; {
+    description = "Nginx configuration static analyzer";
+    longDescription = ''
+      Gixy is a tool to analyze Nginx configuration.
+      The main goal of Gixy is to prevent security misconfiguration and automate flaw detection.
+    '';
+    homepage = "https://github.com/yandex/gixy";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.willibutz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/alpha__init__.py b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/alpha__init__.py
new file mode 100755
index 000000000000..d120969d8fb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/alpha__init__.py
@@ -0,0 +1,23 @@
+# Copyright 2013 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Auth for the Google Cloud SDK.
+"""
+
+from googlecloudsdk.calliope import base
+
+
+@base.ReleaseTracks(base.ReleaseTrack.ALPHA)
+class Alpha(base.Group):
+  """Alpha versions of gcloud commands."""
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/beta__init__.py b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/beta__init__.py
new file mode 100755
index 000000000000..bb52c5a0bc4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/beta__init__.py
@@ -0,0 +1,23 @@
+# Copyright 2013 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Auth for the Google Cloud SDK.
+"""
+
+from googlecloudsdk.calliope import base
+
+
+@base.ReleaseTracks(base.ReleaseTrack.BETA)
+class Beta(base.Group):
+  """Beta versions of gcloud commands."""
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/components.json b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/components.json
new file mode 100644
index 000000000000..eba193fd516e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/components.json
@@ -0,0 +1,7171 @@
+{
+  "components": [
+    {
+      "data": {
+        "checksum": "5a65179c291bc480696ca323d2f8c4874985458303eff8f233e16cdca4e88e6f",
+        "contents_checksum": "038c999c7a7d70d5133eab7dc5868c4c3d0358431dad250f9833306af63016c8",
+        "size": 800,
+        "source": "components/google-cloud-sdk-alpha-20231025210228.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core"
+      ],
+      "details": {
+        "description": "Alpha version of gcloud commands.",
+        "display_name": "gcloud Alpha Commands"
+      },
+      "id": "alpha",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20231025210228,
+        "version_string": "2023.10.25"
+      }
+    },
+    {
+      "dependencies": [
+        "anthos-auth-darwin-arm",
+        "anthos-auth-darwin-x86_64",
+        "anthos-auth-linux-arm",
+        "anthos-auth-linux-x86_64",
+        "anthos-auth-windows-x86_64"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for Anthos clusters.",
+        "display_name": "anthos-auth"
+      },
+      "id": "anthos-auth",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "f197d04a40be89731ecd7a653f83900dcc4dcd84e54e0833c529f9f8dfa4395c",
+        "contents_checksum": "fa1d4910c1ce188c5c450d655c5d15e59a146364ec46e3fda0791db76c2edd17",
+        "size": 20108065,
+        "source": "components/google-cloud-sdk-anthos-auth-darwin-arm-20220923141408.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthos-auth"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for Anthos clusters.",
+        "display_name": "anthos-auth"
+      },
+      "id": "anthos-auth-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220923141408,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "5417a11523868f36d6b7c3199e3029cf9f43c8cb99c57dba016942db4141c939",
+        "contents_checksum": "06a661642cbd20bcb9965c7a4b505d4d72944c48c30b8ada71db7e53c898d505",
+        "size": 21183974,
+        "source": "components/google-cloud-sdk-anthos-auth-darwin-x86_64-20220923141408.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthos-auth"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for Anthos clusters.",
+        "display_name": "anthos-auth"
+      },
+      "id": "anthos-auth-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220923141408,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "c9dee264071d169de081880019f2f6fdb14edc22cbd20c19de76bb7cfa196eae",
+        "contents_checksum": "80ae98f1bfd1bd5cce9cddd642a1505d5401908d8890a22afa723490132b4342",
+        "size": 19755666,
+        "source": "components/google-cloud-sdk-anthos-auth-linux-arm-20220923141408.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthos-auth"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for Anthos clusters.",
+        "display_name": "anthos-auth"
+      },
+      "id": "anthos-auth-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220923141408,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "b5efe7e9cd17f44905186242e663b97734183e14c66daed35553bc59bbf07a3a",
+        "contents_checksum": "57b753ecbde456973bed97af69aa7d1696694c1d30e9756d57658f79689fd925",
+        "size": 21362894,
+        "source": "components/google-cloud-sdk-anthos-auth-linux-x86_64-20220923141408.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthos-auth"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for Anthos clusters.",
+        "display_name": "anthos-auth"
+      },
+      "id": "anthos-auth-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220923141408,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "ab73e4c82e95a7b707f2298906a7a5fb9a2c1fe741c4584ab16e507bcf7b6d5b",
+        "contents_checksum": "38d10a97aa0e5fbf2c927acda1c853c25a2b729615bebd2ac8fce4eb77c2466a",
+        "size": 21470866,
+        "source": "components/google-cloud-sdk-anthos-auth-windows-x86_64-20220923141408.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthos-auth"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for Anthos clusters.",
+        "display_name": "anthos-auth"
+      },
+      "id": "anthos-auth-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220923141408,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "dependencies": [
+        "anthoscli-darwin-arm",
+        "anthoscli-darwin-x86",
+        "anthoscli-darwin-x86_64",
+        "anthoscli-linux-arm",
+        "anthoscli-linux-x86",
+        "anthoscli-linux-x86_64",
+        "anthoscli-windows-x86",
+        "anthoscli-windows-x86_64"
+      ],
+      "details": {
+        "description": "The cli for Anthos infrastructure.",
+        "display_name": "anthoscli"
+      },
+      "id": "anthoscli",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "0.2.42"
+      }
+    },
+    {
+      "data": {
+        "checksum": "47cc151c673943cbfee58321453f85b32d673b3e453724fff31374a8605992b6",
+        "contents_checksum": "3ff8b9ef0510722872095c6d027b78f45dce430eadf07fc219b7f435c503dcf1",
+        "size": 70015524,
+        "source": "components/google-cloud-sdk-anthoscli-darwin-arm-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthoscli"
+      ],
+      "details": {
+        "description": "The cli for Anthos infrastructure.",
+        "display_name": "anthoscli"
+      },
+      "id": "anthoscli-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "0.2.42"
+      }
+    },
+    {
+      "data": {
+        "checksum": "e99a7d19c60cbab6f5ce8578133e1c30c545e89b6f768b457abd2d84722f9c4d",
+        "contents_checksum": "348b94e8d769713049f005663b17056668dc4e3429e682a6956dd7f624fccbbf",
+        "size": 72896092,
+        "source": "components/google-cloud-sdk-anthoscli-darwin-x86-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthoscli"
+      ],
+      "details": {
+        "description": "The cli for Anthos infrastructure.",
+        "display_name": "anthoscli"
+      },
+      "id": "anthoscli-darwin-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "0.2.42"
+      }
+    },
+    {
+      "data": {
+        "checksum": "f9e5e6e59e910787542ed59cd7a31f27774e7795989457689bb974238ea58312",
+        "contents_checksum": "348b94e8d769713049f005663b17056668dc4e3429e682a6956dd7f624fccbbf",
+        "size": 72896095,
+        "source": "components/google-cloud-sdk-anthoscli-darwin-x86_64-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthoscli"
+      ],
+      "details": {
+        "description": "The cli for Anthos infrastructure.",
+        "display_name": "anthoscli"
+      },
+      "id": "anthoscli-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "0.2.42"
+      }
+    },
+    {
+      "data": {
+        "checksum": "768b260e7477339405cd191e43b5bcdc96150af0f309b58c24e48827237542be",
+        "contents_checksum": "d3d2363c63df31848603536b8af09769ce6bb8a0fefbeaefd0336b2362d0ef31",
+        "size": 67245549,
+        "source": "components/google-cloud-sdk-anthoscli-linux-arm-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthoscli"
+      ],
+      "details": {
+        "description": "The cli for Anthos infrastructure.",
+        "display_name": "anthoscli"
+      },
+      "id": "anthoscli-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "0.2.42"
+      }
+    },
+    {
+      "data": {
+        "checksum": "390124c5fec46fb6800ca03dd9caf7f75259a6bc28d5841dcc972900cec9a9ba",
+        "contents_checksum": "bf1c54e0b66c498b1d086940dee6ddd11aaa7ed745c65d03cd98f10ef1c49e83",
+        "size": 65298977,
+        "source": "components/google-cloud-sdk-anthoscli-linux-x86-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthoscli"
+      ],
+      "details": {
+        "description": "The cli for Anthos infrastructure.",
+        "display_name": "anthoscli"
+      },
+      "id": "anthoscli-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "0.2.42"
+      }
+    },
+    {
+      "data": {
+        "checksum": "091730628a45921ef9f34db8b9fbc9568007b0a2a771c60ca786fbc45728b884",
+        "contents_checksum": "b30074343ee0a19121bf1163fccf5223b9e6125e744c00eef5c20977bcd3320a",
+        "size": 71982294,
+        "source": "components/google-cloud-sdk-anthoscli-linux-x86_64-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthoscli"
+      ],
+      "details": {
+        "description": "The cli for Anthos infrastructure.",
+        "display_name": "anthoscli"
+      },
+      "id": "anthoscli-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "0.2.42"
+      }
+    },
+    {
+      "data": {
+        "checksum": "d6f16a6a028d3247de10be2cd63d523b954c4f76347d6a5c88a301c4cd35ddcb",
+        "contents_checksum": "2ad1786533a5cee19cddf36074f51726748422801d4417cb3793baff40ca9b0d",
+        "size": 67251009,
+        "source": "components/google-cloud-sdk-anthoscli-windows-x86-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthoscli"
+      ],
+      "details": {
+        "description": "The cli for Anthos infrastructure.",
+        "display_name": "anthoscli"
+      },
+      "id": "anthoscli-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "0.2.42"
+      }
+    },
+    {
+      "data": {
+        "checksum": "de36bc756712c520d88572641ccd4810acb6d9342b055291a517e32eda2d9e25",
+        "contents_checksum": "686ac57e568ce4ae5b4ad352c3cc32643762e48d8c6009dae47eebb0fff7ae0d",
+        "size": 72608049,
+        "source": "components/google-cloud-sdk-anthoscli-windows-x86_64-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "anthoscli"
+      ],
+      "details": {
+        "description": "The cli for Anthos infrastructure.",
+        "display_name": "anthoscli"
+      },
+      "id": "anthoscli-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "0.2.42"
+      }
+    },
+    {
+      "dependencies": [
+        "app-engine-go-darwin-arm",
+        "app-engine-go-darwin-x86_64",
+        "app-engine-go-linux-arm",
+        "app-engine-go-linux-x86",
+        "app-engine-go-linux-x86_64",
+        "app-engine-go-windows-x86",
+        "app-engine-go-windows-x86_64",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the tools to develop Go applications on App Engine.",
+        "display_name": "App Engine Go Extensions"
+      },
+      "id": "app-engine-go",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.9.75"
+      }
+    },
+    {
+      "data": {
+        "checksum": "88f025a6822f74ffa4c34d23b656158f6191891abf9fbe244a4664077a45f57c",
+        "contents_checksum": "7a27fc4862491e5690c8158b915dd6c2c27c4fd1668f273057e059af4977a6e8",
+        "size": 4469651,
+        "source": "components/google-cloud-sdk-app-engine-go-darwin-arm-20230417163046.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-go",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the tools to develop Go applications on App Engine.",
+        "display_name": "App Engine Go Extensions"
+      },
+      "id": "app-engine-go-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230417163046,
+        "version_string": "1.9.75"
+      }
+    },
+    {
+      "data": {
+        "checksum": "4a093245d248d58197ea5ec35a65b4b329fc7aed383df80dd9a9206700ca830e",
+        "contents_checksum": "f17f61e98b4f3221eae38212f727d736326ac5c803526067d2c0da965ade6000",
+        "size": 4658659,
+        "source": "components/google-cloud-sdk-app-engine-go-darwin-x86_64-20230417163046.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-go",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the tools to develop Go applications on App Engine.",
+        "display_name": "App Engine Go Extensions"
+      },
+      "id": "app-engine-go-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230417163046,
+        "version_string": "1.9.75"
+      }
+    },
+    {
+      "data": {
+        "checksum": "18e5f83a7ae30202e2794d5a46641319dba24d01ac43d1e427b906109ce9069a",
+        "contents_checksum": "22b5e43c2665f646b3b4c043ea8ce5d657576ba54392ffab81c64776ccb0e10e",
+        "size": 4426107,
+        "source": "components/google-cloud-sdk-app-engine-go-linux-arm-20230417163046.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-go",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the tools to develop Go applications on App Engine.",
+        "display_name": "App Engine Go Extensions"
+      },
+      "id": "app-engine-go-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230417163046,
+        "version_string": "1.9.75"
+      }
+    },
+    {
+      "data": {
+        "checksum": "e6271bd8ecf5309c573cae3cf2386a51099517dbe8ec3a8563e96586d6b5beb2",
+        "contents_checksum": "dab30a813f4c0da5028b46ca3ca4675b708358cb4d983b1bc52e03d385f49cfb",
+        "size": 4798186,
+        "source": "components/google-cloud-sdk-app-engine-go-linux-x86-20230417163046.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-go",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the tools to develop Go applications on App Engine.",
+        "display_name": "App Engine Go Extensions"
+      },
+      "id": "app-engine-go-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230417163046,
+        "version_string": "1.9.75"
+      }
+    },
+    {
+      "data": {
+        "checksum": "1d5396984ff515be84c3bb526a802cfa9da49e677b46a23d192e09b063cad7d9",
+        "contents_checksum": "d4dce85cce2a173cdfac1e039f409c364b3db99624010cc0c38bcfbc96996cc3",
+        "size": 4731246,
+        "source": "components/google-cloud-sdk-app-engine-go-linux-x86_64-20230417163046.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-go",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the tools to develop Go applications on App Engine.",
+        "display_name": "App Engine Go Extensions"
+      },
+      "id": "app-engine-go-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230417163046,
+        "version_string": "1.9.75"
+      }
+    },
+    {
+      "data": {
+        "checksum": "d1bbf796ff06580baeccc60c792c348cb1e466a3e6cc587ef6972ad0f67cd522",
+        "contents_checksum": "847ee7c88906720d640fbdb926b61105fd95e93d816fa5d1a83f1acf04ef8d74",
+        "size": 4900275,
+        "source": "components/google-cloud-sdk-app-engine-go-windows-x86-20230417163046.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-go",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the tools to develop Go applications on App Engine.",
+        "display_name": "App Engine Go Extensions"
+      },
+      "id": "app-engine-go-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230417163046,
+        "version_string": "1.9.75"
+      }
+    },
+    {
+      "data": {
+        "checksum": "4f2b7379f39b50a092cf158174b5966f9e14f7cd3ca1ac5732f1164ae60ba94e",
+        "contents_checksum": "9bd2d84c68d600bb3da84855996341596df3b8716d732fc9b7502db972dc5da3",
+        "size": 4784860,
+        "source": "components/google-cloud-sdk-app-engine-go-windows-x86_64-20230417163046.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-go",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the tools to develop Go applications on App Engine.",
+        "display_name": "App Engine Go Extensions"
+      },
+      "id": "app-engine-go-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230417163046,
+        "version_string": "1.9.75"
+      }
+    },
+    {
+      "dependencies": [
+        "app-engine-grpc-darwin-x86_64",
+        "app-engine-grpc-linux-x86",
+        "app-engine-grpc-linux-x86_64",
+        "app-engine-grpc-windows-x86",
+        "app-engine-grpc-windows-x86_64",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the gRPC Python library for App Engine.",
+        "display_name": "gRPC Python library"
+      },
+      "id": "app-engine-grpc",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.20.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "ab866ccff1a9da0ea3a8e71c432c2f3c768827971192de9466938bb9e80a632e",
+        "contents_checksum": "e2eb0eec683ba513ac95ffa535cebccff326998033155cfb187eb2677f216e0c",
+        "size": 1957787,
+        "source": "components/google-cloud-sdk-app-engine-grpc-darwin-x86_64-20190426144518.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-grpc",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the gRPC Python library for App Engine.",
+        "display_name": "gRPC Python library"
+      },
+      "id": "app-engine-grpc-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20190426144518,
+        "version_string": "1.20.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "7da7ca03d04b770d96efbbf55a7b0e992328e947215d00ca702aaed8f5a27161",
+        "contents_checksum": "9f1bf2b01845ba427f5c833e3995c8919b98719a89c841269f15c55482012567",
+        "size": 2104919,
+        "source": "components/google-cloud-sdk-app-engine-grpc-linux-x86-20190426144518.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-grpc",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the gRPC Python library for App Engine.",
+        "display_name": "gRPC Python library"
+      },
+      "id": "app-engine-grpc-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20190426144518,
+        "version_string": "1.20.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "e6f65a8ec8192f024e59a093279b2be53d36d77862d63a9173a637a4533ad3bb",
+        "contents_checksum": "1b1cfad1979caf370bd308a725e30623f6f65fea5370481b39fe9e3ebe23f6a2",
+        "size": 2153684,
+        "source": "components/google-cloud-sdk-app-engine-grpc-linux-x86_64-20190426144518.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-grpc",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the gRPC Python library for App Engine.",
+        "display_name": "gRPC Python library"
+      },
+      "id": "app-engine-grpc-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20190426144518,
+        "version_string": "1.20.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "c0c878b429d2ca9ee5196bb348576547062da65b144aac4bbd8cd4c5a1dde1d6",
+        "contents_checksum": "a3edadedc0287b30caaf1db8c27f85e5c9311de3b555a0dfb7c276b3348ab132",
+        "size": 1615365,
+        "source": "components/google-cloud-sdk-app-engine-grpc-windows-x86-20190426144518.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-grpc",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the gRPC Python library for App Engine.",
+        "display_name": "gRPC Python library"
+      },
+      "id": "app-engine-grpc-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20190426144518,
+        "version_string": "1.20.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "ff3c75c9b459610c33c2dcc4060598bd5edec06ed01d916ded1e429e8defed5d",
+        "contents_checksum": "f6f05b6c3d087ff4e98c1cf9d841319adc30255e08dfff3fa85992238cb0f6a6",
+        "size": 1616022,
+        "source": "components/google-cloud-sdk-app-engine-grpc-windows-x86_64-20190426144518.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-grpc",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the gRPC Python library for App Engine.",
+        "display_name": "gRPC Python library"
+      },
+      "id": "app-engine-grpc-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20190426144518,
+        "version_string": "1.20.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "38175db1182e07654ddef6ff8794d3ddf0d830c180920392342ea4ceff027a58",
+        "contents_checksum": "2fb9f245011b3b51c4173522e015f899dd2d6a4bc54ea12bff941c9265aba2e5",
+        "size": 129915384,
+        "source": "components/google-cloud-sdk-app-engine-java-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the tools required to develop Java applications using gcloud.",
+        "display_name": "gcloud app Java Extensions"
+      },
+      "id": "app-engine-java",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "2.0.21"
+      }
+    },
+    {
+      "dependencies": [
+        "app-engine-php-darwin",
+        "app-engine-php-windows",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the PHP runtimes for the dev_appserver.",
+        "display_name": "gcloud app PHP Extensions"
+      },
+      "id": "app-engine-php",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "CYGWIN",
+          "MACOSX",
+          "MSYS",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "9d6d9d232739c8de9dcd7b35b7f8021136138e7892697229d3c04cb4a7aab494",
+        "contents_checksum": "5682195caf966a52c95bb865a3c2b607237ed97c36952b479ef358370401aaeb",
+        "size": 22985548,
+        "source": "components/google-cloud-sdk-app-engine-php-darwin-20170915105257.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-php",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the PHP runtimes for the dev_appserver.",
+        "display_name": "gcloud app PHP Extensions"
+      },
+      "id": "app-engine-php-darwin",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20170915105257,
+        "version_string": "2017.09.15"
+      }
+    },
+    {
+      "data": {
+        "checksum": "c1f560a660d36d2bca873c01ca37a0790888713b2e056dfeeff3ea03f037235c",
+        "contents_checksum": "d11e66fd28ac784e4ef57b315bf626f01974db5cdbbc5e69f8e2689d4dc4de55",
+        "size": 20074666,
+        "source": "components/google-cloud-sdk-app-engine-php-windows-20170915105257.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-php",
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the PHP runtimes for the dev_appserver.",
+        "display_name": "gcloud app PHP Extensions"
+      },
+      "id": "app-engine-php-windows",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "CYGWIN",
+          "MSYS",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20170915105257,
+        "version_string": "2017.09.15"
+      }
+    },
+    {
+      "data": {
+        "checksum": "07c19454806ac60603f18bc9e7eeb56ae6eba1477e25a91fd95682c4011c6207",
+        "contents_checksum": "71ff9043af9fa982b8dbbc1f8f122d9f981cb5fe168356f4a7f13bf58ae23e25",
+        "size": 8748068,
+        "source": "components/google-cloud-sdk-app-engine-python-20231016163610.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-grpc",
+        "cloud-datastore-emulator",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the tools required to develop Python and PHP applications using gcloud.",
+        "display_name": "gcloud app Python Extensions"
+      },
+      "id": "app-engine-python",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20231016163610,
+        "version_string": "1.9.107"
+      }
+    },
+    {
+      "data": {
+        "checksum": "44a183b079e30fc932dbd7ca5b497baa6fa7d080ad78c500da99de6ef9e1a132",
+        "contents_checksum": "49a80207105a59c3948dd43fda0e28a6f9621265df127c7a3aa9707862ab7bfe",
+        "size": 33004574,
+        "source": "components/google-cloud-sdk-app-engine-python-extras-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "app-engine-python",
+        "core"
+      ],
+      "details": {
+        "description": "Extra libraries for the App Engine Python Extensions.",
+        "display_name": "gcloud app Python Extensions (Extra Libraries)"
+      },
+      "id": "app-engine-python-extras",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "1.9.102"
+      }
+    },
+    {
+      "dependencies": [
+        "appctl-darwin-x86",
+        "appctl-darwin-x86_64",
+        "appctl-linux-x86",
+        "appctl-linux-x86_64",
+        "appctl-windows-x86",
+        "appctl-windows-x86_64"
+      ],
+      "details": {
+        "description": "Provides appctl executable.",
+        "display_name": "Appctl"
+      },
+      "id": "appctl",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "0.1.12"
+      }
+    },
+    {
+      "data": {
+        "checksum": "dc1346aa497ab9856a61d4baadb999d46a025616b0fb941499930e8cd2bb08ef",
+        "contents_checksum": "dc9f7c06e11b6368358bc374d1a281896df26bc2b5d8403e27645452d551db54",
+        "size": 19669923,
+        "source": "components/google-cloud-sdk-appctl-darwin-x86-20200626165905.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "appctl"
+      ],
+      "details": {
+        "description": "Provides appctl executable.",
+        "display_name": "Appctl"
+      },
+      "id": "appctl-darwin-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20200626165905,
+        "version_string": "0.1.12"
+      }
+    },
+    {
+      "data": {
+        "checksum": "73702c9e36f3fa25d3cba2f5b747ccaf40d4439a4beca2187c775cf0b87b5ba0",
+        "contents_checksum": "8f6243a30cde23bea18034fe4b1dcd8373a2e410d92fc784d5708ffb817bb418",
+        "size": 19381598,
+        "source": "components/google-cloud-sdk-appctl-darwin-x86_64-20200626165905.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "appctl"
+      ],
+      "details": {
+        "description": "Provides appctl executable.",
+        "display_name": "Appctl"
+      },
+      "id": "appctl-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20200626165905,
+        "version_string": "0.1.12"
+      }
+    },
+    {
+      "data": {
+        "checksum": "f9e00574acdc98da65aa7167a11bb1d349e8811f4aabc7a9cad231959a578017",
+        "contents_checksum": "bec7f3d72271d31f4be1516919207d8ab9a5364546339aa6361d47a06e764d44",
+        "size": 20215575,
+        "source": "components/google-cloud-sdk-appctl-linux-x86-20200626165905.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "appctl"
+      ],
+      "details": {
+        "description": "Provides appctl executable.",
+        "display_name": "Appctl"
+      },
+      "id": "appctl-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20200626165905,
+        "version_string": "0.1.12"
+      }
+    },
+    {
+      "data": {
+        "checksum": "1017488e55a6316d6fb51ebfa8306cc58b2f6f24186686f6258c46b2b39d6781",
+        "contents_checksum": "9db848fc1e8721f80b5937dea801d18912d22aeed5682671e77f6d29959be483",
+        "size": 22041660,
+        "source": "components/google-cloud-sdk-appctl-linux-x86_64-20200626165905.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "appctl"
+      ],
+      "details": {
+        "description": "Provides appctl executable.",
+        "display_name": "Appctl"
+      },
+      "id": "appctl-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20200626165905,
+        "version_string": "0.1.12"
+      }
+    },
+    {
+      "data": {
+        "checksum": "1d4bffafcbc0f1a378048123fd838cfaebab55c73c286e7b5128328750268262",
+        "contents_checksum": "908ec0c86e7f779641888f42b7f3b39f98fb91de8c68f4a24d360b1d3050d646",
+        "size": 19638844,
+        "source": "components/google-cloud-sdk-appctl-windows-x86-20200626165905.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "appctl"
+      ],
+      "details": {
+        "description": "Provides appctl executable.",
+        "display_name": "Appctl"
+      },
+      "id": "appctl-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20200626165905,
+        "version_string": "0.1.12"
+      }
+    },
+    {
+      "data": {
+        "checksum": "3ecd725f24eef4715946387442e06af0f9ced436f37d1c9428480fdaa2df034b",
+        "contents_checksum": "0cfec25922905ba72982b630f026045233a0f567220262b3b0aec169559b0732",
+        "size": 19657321,
+        "source": "components/google-cloud-sdk-appctl-windows-x86_64-20200626165905.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "appctl"
+      ],
+      "details": {
+        "description": "Provides appctl executable.",
+        "display_name": "Appctl"
+      },
+      "id": "appctl-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20200626165905,
+        "version_string": "0.1.12"
+      }
+    },
+    {
+      "data": {
+        "checksum": "707d412854a14450b4fddee199d258e75946fe51b44eb2980c8cd7e274c15760",
+        "contents_checksum": "0b4e9d8e6394dc841aece07ca4da91920a460cbd7ec22495be4a2b4f46635b4d",
+        "size": 797,
+        "source": "components/google-cloud-sdk-beta-20231025210228.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core"
+      ],
+      "details": {
+        "description": "Beta version of gcloud commands.",
+        "display_name": "gcloud Beta Commands"
+      },
+      "id": "beta",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20231025210228,
+        "version_string": "2023.10.25"
+      }
+    },
+    {
+      "dependencies": [
+        "bigtable-darwin-arm",
+        "bigtable-darwin-x86",
+        "bigtable-darwin-x86_64",
+        "bigtable-linux-arm",
+        "bigtable-linux-x86",
+        "bigtable-linux-x86_64",
+        "bigtable-windows-x86",
+        "bigtable-windows-x86_64",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a tool for local Cloud Bigtable emulation.",
+        "display_name": "Cloud Bigtable Emulator"
+      },
+      "id": "bigtable",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "5af8d24eb8da1c8229c414e9950bcdc453a9e316742541eefe830afaca8a158e",
+        "contents_checksum": "e08ae70a70d4da56bae3d13b09b898b865557461f01e7690fd25f82b91890910",
+        "size": 7097728,
+        "source": "components/google-cloud-sdk-bigtable-darwin-arm-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bigtable",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a tool for local Cloud Bigtable emulation.",
+        "display_name": "Cloud Bigtable Emulator"
+      },
+      "id": "bigtable-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "be895d4ef5e80c918c49aabb257226192fccaf54933de967725a7a5ad31ec849",
+        "contents_checksum": "d3291c80aa740ddf5ab17943262c2af6eff226508aa0d48b1a5b5c5cbd913962",
+        "size": 6730815,
+        "source": "components/google-cloud-sdk-bigtable-darwin-x86-20190830142709.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bigtable",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a tool for local Cloud Bigtable emulation.",
+        "display_name": "Cloud Bigtable Emulator"
+      },
+      "id": "bigtable-darwin-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20190830142709,
+        "version_string": "2019.08.30"
+      }
+    },
+    {
+      "data": {
+        "checksum": "aa2d0f3e322a7912fac2b012fc1c368eaa129905372b82560488ec9b803494d5",
+        "contents_checksum": "7c84152ea5f2da5f06f9b55b035534d9bd2270c9959ae162c3cb5f8d392d6801",
+        "size": 7333846,
+        "source": "components/google-cloud-sdk-bigtable-darwin-x86_64-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bigtable",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a tool for local Cloud Bigtable emulation.",
+        "display_name": "Cloud Bigtable Emulator"
+      },
+      "id": "bigtable-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "52ea181edb2b8b69fa3ebea25467238facc828dc79d1b22c2aafb79385e0f4e6",
+        "contents_checksum": "0dc475dc09c285508b6ba21ab40ebabf9151a9e5ecaf05a3754b3283a00df42a",
+        "size": 7011804,
+        "source": "components/google-cloud-sdk-bigtable-linux-arm-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bigtable",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a tool for local Cloud Bigtable emulation.",
+        "display_name": "Cloud Bigtable Emulator"
+      },
+      "id": "bigtable-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "972efb72c12e9fb15777d2f0b0ee49d34793bd088147eda1599826b261c54f8d",
+        "contents_checksum": "ea6f11df05804197e9a0f3ad1d52db162b23769aab97b2913248dc42044e2803",
+        "size": 7255397,
+        "source": "components/google-cloud-sdk-bigtable-linux-x86-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bigtable",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a tool for local Cloud Bigtable emulation.",
+        "display_name": "Cloud Bigtable Emulator"
+      },
+      "id": "bigtable-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "e62748c75c268a9648b26920838b281e50511b7f430dff0eca124f3f5763699e",
+        "contents_checksum": "19b5048d20242fc730b4544fe0b5ac800c30b02059efb4b26588eb31d1fc482a",
+        "size": 7454541,
+        "source": "components/google-cloud-sdk-bigtable-linux-x86_64-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bigtable",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a tool for local Cloud Bigtable emulation.",
+        "display_name": "Cloud Bigtable Emulator"
+      },
+      "id": "bigtable-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "e031eb7a2735c0bd2db4d82d8da081a264cbaddc58ed9b84e2b1564994e54643",
+        "contents_checksum": "7751a9071bb5830f7f3f9dc9a229a268405a1ba76d5bdd19483a8c66089c72eb",
+        "size": 7288454,
+        "source": "components/google-cloud-sdk-bigtable-windows-x86-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bigtable",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a tool for local Cloud Bigtable emulation.",
+        "display_name": "Cloud Bigtable Emulator"
+      },
+      "id": "bigtable-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "1f24acd6a6c63ed1c283e7b7bfbda31bc08a86b1241e5ad4f08858df7678d669",
+        "contents_checksum": "f640127893c4339c4f04791834143af3fe3931ac91877dd73dcb4ee3cecf6d01",
+        "size": 7451653,
+        "source": "components/google-cloud-sdk-bigtable-windows-x86_64-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bigtable",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a tool for local Cloud Bigtable emulation.",
+        "display_name": "Cloud Bigtable Emulator"
+      },
+      "id": "bigtable-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "5044841dc30f739de0c5f1a846580baf714a36b09070c00574360e906789d373",
+        "contents_checksum": "b1570cc1a0eb04a5856453cb234021a676ff276c0f779a248ddf589f5ed5724d",
+        "size": 1659622,
+        "source": "components/google-cloud-sdk-bq-20230913232318.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bq-nix",
+        "bq-win",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the bq tool for interacting with the BigQuery service.",
+        "display_name": "BigQuery Command Line Tool"
+      },
+      "id": "bq",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20230913232318,
+        "version_string": "2.0.98"
+      }
+    },
+    {
+      "data": {
+        "checksum": "b6a10d752554fb9cf518d697999f49806d1009455c78cc3c6fc67f6d97edf1b9",
+        "contents_checksum": "da65662d83df53b15ff35bdedace8671669280b875620876181ac0e9665cbc04",
+        "size": 2019,
+        "source": "components/google-cloud-sdk-bq-nix-20231025210228.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bq",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the bq tool for interacting with the BigQuery service.",
+        "display_name": "BigQuery Command Line Tool (Platform Specific)"
+      },
+      "id": "bq-nix",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "CYGWIN",
+          "LINUX",
+          "MACOSX",
+          "MSYS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231025210228,
+        "version_string": "2.0.98"
+      }
+    },
+    {
+      "data": {
+        "checksum": "d4d4e87deaf12a2c8eefe6ae5d75d9fe160149488077579dc41d6010988ad432",
+        "contents_checksum": "515edb1628a75d42d3b465d7e8c8ad5d298538e75f78d00a0cda738ac9fcce5e",
+        "size": 2660,
+        "source": "components/google-cloud-sdk-bq-win-20230106151201.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bq",
+        "core"
+      ],
+      "details": {
+        "description": "Provides the bq tool for interacting with the BigQuery service.",
+        "display_name": "BigQuery Command Line Tool (Platform Specific)"
+      },
+      "id": "bq-win",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230106151201,
+        "version_string": "2.0.84"
+      }
+    },
+    {
+      "dependencies": [
+        "bundled-python-windows-x86",
+        "bundled-python-windows-x86_64",
+        "bundled-python3",
+        "core"
+      ],
+      "details": {
+        "description": "Provides stand-alone Python 2.7 install.",
+        "display_name": "Bundled Python 2.7"
+      },
+      "id": "bundled-python",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "2.7.13"
+      }
+    },
+    {
+      "data": {
+        "checksum": "8b179d2ffd01bd29d3252feb638de41662ad853f4a109143c45cfbeb221d466b",
+        "contents_checksum": "649ff2cbb21688bb04ccf2c6366bff8008975f7b94848fcfd0e2200dfaca442e",
+        "size": 12763722,
+        "source": "components/google-cloud-sdk-bundled-python-windows-x86-20200605144945.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bundled-python",
+        "bundled-python3",
+        "core"
+      ],
+      "details": {
+        "description": "Provides stand-alone Python 2.7 install.",
+        "display_name": "Bundled Python 2.7"
+      },
+      "id": "bundled-python-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20200605144945,
+        "version_string": "2.7.13"
+      }
+    },
+    {
+      "data": {
+        "checksum": "6345eae40bebdbbce12f0ccf75161a32c040cd017d43aa697a1cf38a237a3a6f",
+        "contents_checksum": "29e7c3624d567ef8f63fad1f6863391b6e0577dc7f9034433ece3fc6949363bc",
+        "size": 13965732,
+        "source": "components/google-cloud-sdk-bundled-python-windows-x86_64-20200605144945.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bundled-python",
+        "bundled-python3",
+        "core"
+      ],
+      "details": {
+        "description": "Provides stand-alone Python 2.7 install.",
+        "display_name": "Bundled Python 2.7"
+      },
+      "id": "bundled-python-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20200605144945,
+        "version_string": "2.7.13"
+      }
+    },
+    {
+      "dependencies": [
+        "bundled-python3-windows-x86",
+        "bundled-python3-windows-x86_64",
+        "core"
+      ],
+      "details": {
+        "description": "Provides stand-alone Python 3.9.12 install.",
+        "display_name": "Bundled Python 3.9"
+      },
+      "id": "bundled-python3",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "3.9.12"
+      }
+    },
+    {
+      "dependencies": [
+        "bundled-python3-unix-linux-x86_64",
+        "core"
+      ],
+      "details": {
+        "description": "Provides stand-alone Python 3.9.17 installation for UNIX.",
+        "display_name": "Bundled Python 3.9"
+      },
+      "id": "bundled-python3-unix",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "3.9.17"
+      }
+    },
+    {
+      "data": {
+        "checksum": "ad591cffcb3cb00ea73e1e8fa13d76d4ebeded14bb7d4d54f4dbd90cff79911c",
+        "contents_checksum": "d2c4025b7acd5008a935cbd1a71c399d28cb5723065576b1b31f917f10bb0479",
+        "size": 65481810,
+        "source": "components/google-cloud-sdk-bundled-python3-unix-linux-x86_64-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bundled-python3-unix",
+        "core"
+      ],
+      "details": {
+        "description": "Provides stand-alone Python 3.9.17 installation for UNIX.",
+        "display_name": "Bundled Python 3.9"
+      },
+      "id": "bundled-python3-unix-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "3.9.17"
+      }
+    },
+    {
+      "data": {
+        "checksum": "f893470fa6f4cabc0bbbd73275b563b9c97682fd199514440c9027b6c5b94b54",
+        "contents_checksum": "c486cae0284bb1138814cf54bb930441fd39d9ff791366a564d27d6bfac7a789",
+        "size": 20778243,
+        "source": "components/google-cloud-sdk-bundled-python3-windows-x86-20231016163610.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bundled-python3",
+        "core"
+      ],
+      "details": {
+        "description": "Provides stand-alone Python 3.9.12 install.",
+        "display_name": "Bundled Python 3.9"
+      },
+      "id": "bundled-python3-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231016163610,
+        "version_string": "3.9.12"
+      }
+    },
+    {
+      "data": {
+        "checksum": "cabdb1da4996629632a90399276a75058e46be4a6b92019960c4bdb62efcc4ea",
+        "contents_checksum": "3bb2ec678153e5bd214be0439970173d86729baaa33f06176bd2ec8435d4304d",
+        "size": 22193214,
+        "source": "components/google-cloud-sdk-bundled-python3-windows-x86_64-20231016163610.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bundled-python3",
+        "core"
+      ],
+      "details": {
+        "description": "Provides stand-alone Python 3.9.12 install.",
+        "display_name": "Bundled Python 3.9"
+      },
+      "id": "bundled-python3-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231016163610,
+        "version_string": "3.9.12"
+      }
+    },
+    {
+      "dependencies": [
+        "cbt-darwin-arm",
+        "cbt-darwin-x86",
+        "cbt-darwin-x86_64",
+        "cbt-linux-arm",
+        "cbt-linux-x86",
+        "cbt-linux-x86_64",
+        "cbt-windows-x86",
+        "cbt-windows-x86_64"
+      ],
+      "details": {
+        "description": "Provides the cbt tool for interacting with the Cloud Bigtable service.",
+        "display_name": "Cloud Bigtable Command Line Tool"
+      },
+      "id": "cbt",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "0.16.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "4cec674242be0d7a3de6d830325ef93d0b554eeab10431eaf0706199434d937c",
+        "contents_checksum": "c08a0d1bafbfc51f2aac4555268f1e1dba13f8222454ee8315a7855a114c7216",
+        "size": 16254518,
+        "source": "components/google-cloud-sdk-cbt-darwin-arm-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cbt"
+      ],
+      "details": {
+        "description": "Provides the cbt tool for interacting with the Cloud Bigtable service.",
+        "display_name": "Cloud Bigtable Command Line Tool"
+      },
+      "id": "cbt-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "0.16.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "730929dfb7fb308bea5206037004409db36c098ee60e25e5a3792fdbb062899f",
+        "contents_checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+        "size": 94,
+        "source": "components/google-cloud-sdk-cbt-darwin-x86-20220527165258.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cbt"
+      ],
+      "details": {
+        "description": "Provides the cbt tool for interacting with the Cloud Bigtable service.",
+        "display_name": "Cloud Bigtable Command Line Tool"
+      },
+      "id": "cbt-darwin-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220527165258,
+        "version_string": "0.12.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "cab9647842e2c6702f739bcf7f4a390098a245f58798035914d47b2e023f5003",
+        "contents_checksum": "5437ed3b7499b97a8dc71d81f1446b429ca635676fdaada94e5089d181f851f1",
+        "size": 16717237,
+        "source": "components/google-cloud-sdk-cbt-darwin-x86_64-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cbt"
+      ],
+      "details": {
+        "description": "Provides the cbt tool for interacting with the Cloud Bigtable service.",
+        "display_name": "Cloud Bigtable Command Line Tool"
+      },
+      "id": "cbt-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "0.16.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "50481ebc4a0a82e068b9d11e8af938c81dceae23f39a5d7eff888c5d9d29d379",
+        "contents_checksum": "f1a58b3ed33e5728def81f61e7e28b46239f0a2a0201fc9685d808d11df38f3b",
+        "size": 15863768,
+        "source": "components/google-cloud-sdk-cbt-linux-arm-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cbt"
+      ],
+      "details": {
+        "description": "Provides the cbt tool for interacting with the Cloud Bigtable service.",
+        "display_name": "Cloud Bigtable Command Line Tool"
+      },
+      "id": "cbt-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "0.16.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "5a5539eab4133fade3206d5f7b546e8d51a5af18c0ac3f0b6ada98249847fa1e",
+        "contents_checksum": "961c6d25d74bae5b5c00b4e0d48393702c529ac0b1de2b85056f07d63933eb8d",
+        "size": 16051931,
+        "source": "components/google-cloud-sdk-cbt-linux-x86-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cbt"
+      ],
+      "details": {
+        "description": "Provides the cbt tool for interacting with the Cloud Bigtable service.",
+        "display_name": "Cloud Bigtable Command Line Tool"
+      },
+      "id": "cbt-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "0.16.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "74d5a97a01d246acda0897004a5ece95f9c9ced8aa3c89f0e8cf742edd4284b3",
+        "contents_checksum": "5fdf279f55e77702b62280f58d19f5eb0adcd5d81e20f76cc7759de07a224ca3",
+        "size": 16868331,
+        "source": "components/google-cloud-sdk-cbt-linux-x86_64-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cbt"
+      ],
+      "details": {
+        "description": "Provides the cbt tool for interacting with the Cloud Bigtable service.",
+        "display_name": "Cloud Bigtable Command Line Tool"
+      },
+      "id": "cbt-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "0.16.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "97b355f30dd40324f7724eb8a1e269d857316796a6d42fdcf3805fce9cefa402",
+        "contents_checksum": "e824180249e02e5d9c8805faa2cbbc1a237bac7fe53925d6290943234e42cf8c",
+        "size": 16305542,
+        "source": "components/google-cloud-sdk-cbt-windows-x86-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cbt"
+      ],
+      "details": {
+        "description": "Provides the cbt tool for interacting with the Cloud Bigtable service.",
+        "display_name": "Cloud Bigtable Command Line Tool"
+      },
+      "id": "cbt-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "0.16.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "fc7d710003577bf740e4d8dd5f6ad3929620a7f088c1de321a41ff229acb6084",
+        "contents_checksum": "038673c9ff153e08f9e4cb6af1c7963483796d3f6654e746cb5bf414ff4a63ee",
+        "size": 16944208,
+        "source": "components/google-cloud-sdk-cbt-windows-x86_64-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cbt"
+      ],
+      "details": {
+        "description": "Provides the cbt tool for interacting with the Cloud Bigtable service.",
+        "display_name": "Cloud Bigtable Command Line Tool"
+      },
+      "id": "cbt-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "0.16.2"
+      }
+    },
+    {
+      "dependencies": [
+        "cloud-build-local-darwin-x86_64",
+        "cloud-build-local-linux-x86",
+        "cloud-build-local-linux-x86_64"
+      ],
+      "details": {
+        "description": "Provides cloud-build-local executable.  See https://github.com/GoogleCloudPlatform/cloud-build-local",
+        "display_name": "Google Cloud Build Local Builder"
+      },
+      "id": "cloud-build-local",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "0.5.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "d96d493deac9ee5e6153072a3e8cc89e752be3b00aa3d23deded8656b0a46298",
+        "contents_checksum": "1f75c89816240cd2be9a6be6485f339e855c414aa329d9c263a10eb252371718",
+        "size": 6461890,
+        "source": "components/google-cloud-sdk-cloud-build-local-darwin-x86_64-20201023143012.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud-build-local"
+      ],
+      "details": {
+        "description": "Provides cloud-build-local executable.  See https://github.com/GoogleCloudPlatform/cloud-build-local",
+        "display_name": "Google Cloud Build Local Builder"
+      },
+      "id": "cloud-build-local-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20201023143012,
+        "version_string": "0.5.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "c61eb8ad5125db4f22c8eab4b76b92432e872842ca0df19ef7f38174cc964c14",
+        "contents_checksum": "e2a36220cdfb3043d711657e22228d597f8f937e7da0ab56cce168676ba9fa8f",
+        "size": 6346956,
+        "source": "components/google-cloud-sdk-cloud-build-local-linux-x86-20201023143012.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud-build-local"
+      ],
+      "details": {
+        "description": "Provides cloud-build-local executable.  See https://github.com/GoogleCloudPlatform/cloud-build-local",
+        "display_name": "Google Cloud Build Local Builder"
+      },
+      "id": "cloud-build-local-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20201023143012,
+        "version_string": "0.5.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "3916fed470f06ee12e123781f1e11979d35e363556e64ec601a013f0973683e1",
+        "contents_checksum": "c6a30f889ddb1c00a78a68127b9c9b9d5196f345b5558389da1ab85f019e2503",
+        "size": 6591757,
+        "source": "components/google-cloud-sdk-cloud-build-local-linux-x86_64-20201023143012.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud-build-local"
+      ],
+      "details": {
+        "description": "Provides cloud-build-local executable.  See https://github.com/GoogleCloudPlatform/cloud-build-local",
+        "display_name": "Google Cloud Build Local Builder"
+      },
+      "id": "cloud-build-local-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20201023143012,
+        "version_string": "0.5.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "8a04a91169264f831ef8ab01507b505579f9216c223d16f33429c39be5a16ce2",
+        "contents_checksum": "81f9bd9d6d2794a75ae60c33b0d74788608f9335d61c47caa5d4688cedadc9fa",
+        "size": 37925014,
+        "source": "components/google-cloud-sdk-cloud-datastore-emulator-20230707144938.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core"
+      ],
+      "details": {
+        "description": "Provides a local emulator of Cloud Datastore.",
+        "display_name": "Cloud Datastore Emulator"
+      },
+      "id": "cloud-datastore-emulator",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20230707144938,
+        "version_string": "2.3.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "1822e13b021d42edf1ee3d648b00be30960a57d3c74de708a14dd9758bb8f466",
+        "contents_checksum": "16cc1f413795a2197704184256179a5c65eb11b66d8af59f209bfbda798df11b",
+        "size": 44883913,
+        "source": "components/google-cloud-sdk-cloud-firestore-emulator-20230915145114.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core"
+      ],
+      "details": {
+        "description": "Provides a local emulator of Cloud Firestore.",
+        "display_name": "Cloud Firestore Emulator"
+      },
+      "id": "cloud-firestore-emulator",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20230915145114,
+        "version_string": "1.18.2"
+      }
+    },
+    {
+      "dependencies": [
+        "cloud-run-proxy-darwin-arm",
+        "cloud-run-proxy-darwin-x86_64",
+        "cloud-run-proxy-linux-arm",
+        "cloud-run-proxy-linux-x86_64",
+        "cloud-run-proxy-windows-x86_64"
+      ],
+      "details": {
+        "description": "Provides cloud-run-proxy executable. See https://github.com/GoogleCloudPlatform/cloud-run-proxy",
+        "display_name": "Cloud Run Proxy"
+      },
+      "id": "cloud-run-proxy",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "0.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "3902d4e218ff13cc8d598d58df4cb6bd3492a94d25f6e9a4b982f41f029b0bbc",
+        "contents_checksum": "adc46a36ff0d63f4211d4640e4b25ef1685ed100b12a2780ea4e8ce88441a4a2",
+        "size": 11892176,
+        "source": "components/google-cloud-sdk-cloud-run-proxy-darwin-arm-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud-run-proxy"
+      ],
+      "details": {
+        "description": "Provides cloud-run-proxy executable. See https://github.com/GoogleCloudPlatform/cloud-run-proxy",
+        "display_name": "Cloud Run Proxy"
+      },
+      "id": "cloud-run-proxy-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "0.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "ffe39e2e14e5e02607af5d2dc4522f49db3ee93bc37d237aac26621f3ce81080",
+        "contents_checksum": "2f749a0c99c92b3941dc02d2dfde512c49e0d7c219fdc43d1942332266abad36",
+        "size": 12269065,
+        "source": "components/google-cloud-sdk-cloud-run-proxy-darwin-x86_64-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud-run-proxy"
+      ],
+      "details": {
+        "description": "Provides cloud-run-proxy executable. See https://github.com/GoogleCloudPlatform/cloud-run-proxy",
+        "display_name": "Cloud Run Proxy"
+      },
+      "id": "cloud-run-proxy-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "0.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "1eb797baa16aa3b984f671e1e806aae3379aaf58ac12aeb2f6e9567164525c83",
+        "contents_checksum": "0a691b80220517b2e5a4ae4501dcff1bebcdedb5903d18ca593774b72c5ed928",
+        "size": 11807002,
+        "source": "components/google-cloud-sdk-cloud-run-proxy-linux-arm-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud-run-proxy"
+      ],
+      "details": {
+        "description": "Provides cloud-run-proxy executable. See https://github.com/GoogleCloudPlatform/cloud-run-proxy",
+        "display_name": "Cloud Run Proxy"
+      },
+      "id": "cloud-run-proxy-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "0.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "771d5923d4f99d6c4534b59b7981b0fad1cbeb1d6d1d86d0fcf4903f2fd6ef1f",
+        "contents_checksum": "7dcff6a313740b3148e3b1c7940f913ed6037d03ec8e7b595f184b92e87a8840",
+        "size": 13963201,
+        "source": "components/google-cloud-sdk-cloud-run-proxy-linux-x86_64-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud-run-proxy"
+      ],
+      "details": {
+        "description": "Provides cloud-run-proxy executable. See https://github.com/GoogleCloudPlatform/cloud-run-proxy",
+        "display_name": "Cloud Run Proxy"
+      },
+      "id": "cloud-run-proxy-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "0.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "26af0634948d3d45dec133ce4fe28182e7598253488f09f147cf6429b0b3080d",
+        "contents_checksum": "46561d11fbfa6ee88fd2ffdca1823c77ab526c47e94661f35da48f0abc4bb372",
+        "size": 12475234,
+        "source": "components/google-cloud-sdk-cloud-run-proxy-windows-x86_64-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud-run-proxy"
+      ],
+      "details": {
+        "description": "Provides cloud-run-proxy executable. See https://github.com/GoogleCloudPlatform/cloud-run-proxy",
+        "display_name": "Cloud Run Proxy"
+      },
+      "id": "cloud-run-proxy-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "0.5.0"
+      }
+    },
+    {
+      "dependencies": [
+        "cloud-spanner-emulator-linux-x86_64",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a local emulator of Cloud Spanner.",
+        "display_name": "Cloud Spanner Emulator"
+      },
+      "id": "cloud-spanner-emulator",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.5.10"
+      }
+    },
+    {
+      "data": {
+        "checksum": "7460e9a21137063a8f9f8143f6da86d39d3fde425a956240b695924d45bf3e2f",
+        "contents_checksum": "3617a6b7497fc5cc13cb5764e374816940474072d2db432342c1bf0f6844f1c5",
+        "size": 36939704,
+        "source": "components/google-cloud-sdk-cloud-spanner-emulator-linux-x86_64-20230922151743.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud-spanner-emulator",
+        "core"
+      ],
+      "details": {
+        "description": "Provides a local emulator of Cloud Spanner.",
+        "display_name": "Cloud Spanner Emulator"
+      },
+      "id": "cloud-spanner-emulator-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230922151743,
+        "version_string": "1.5.10"
+      }
+    },
+    {
+      "dependencies": [
+        "cloud_sql_proxy-darwin-arm",
+        "cloud_sql_proxy-darwin-x86_64",
+        "cloud_sql_proxy-linux-arm",
+        "cloud_sql_proxy-linux-x86",
+        "cloud_sql_proxy-linux-x86_64",
+        "cloud_sql_proxy-windows-x86",
+        "cloud_sql_proxy-windows-x86_64"
+      ],
+      "details": {
+        "description": "Provides cloud_sql_proxy executable. See https://github.com/GoogleCloudPlatform/cloudsql-proxy",
+        "display_name": "Cloud SQL Proxy"
+      },
+      "id": "cloud_sql_proxy",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.27.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "53f6eba831fdd16a75b290315be4753e826f6b3b2abb8458c95e5af85470279d",
+        "contents_checksum": "2be63d10873f39e791dfae2507a6010de222a142df63354e46ad03370260a040",
+        "size": 7700917,
+        "source": "components/google-cloud-sdk-cloud_sql_proxy-darwin-arm-20211210155428.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud_sql_proxy"
+      ],
+      "details": {
+        "description": "Provides cloud_sql_proxy executable. See https://github.com/GoogleCloudPlatform/cloudsql-proxy",
+        "display_name": "Cloud SQL Proxy"
+      },
+      "id": "cloud_sql_proxy-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211210155428,
+        "version_string": "1.27.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "36c550fc7cd33f22688e5859a3e4c93e7aaf503c5171b0b37f90d155baca4174",
+        "contents_checksum": "e1f2fabffeb3a93961c32a19fbe728599f9ef5f602bc9302dddf3491dbfc9f67",
+        "size": 7986647,
+        "source": "components/google-cloud-sdk-cloud_sql_proxy-darwin-x86_64-20211210155428.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud_sql_proxy"
+      ],
+      "details": {
+        "description": "Provides cloud_sql_proxy executable. See https://github.com/GoogleCloudPlatform/cloudsql-proxy",
+        "display_name": "Cloud SQL Proxy"
+      },
+      "id": "cloud_sql_proxy-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211210155428,
+        "version_string": "1.27.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "36daf7fcd3097dd871c4d7cae925a6f4dee94b9bf342ce6bc5fdc28bc39308e3",
+        "contents_checksum": "c50c0af3d040a47218548822bac4e2f8ddbfb734037ea5769614d2953d6ca232",
+        "size": 7503669,
+        "source": "components/google-cloud-sdk-cloud_sql_proxy-linux-arm-20211210155428.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud_sql_proxy"
+      ],
+      "details": {
+        "description": "Provides cloud_sql_proxy executable. See https://github.com/GoogleCloudPlatform/cloudsql-proxy",
+        "display_name": "Cloud SQL Proxy"
+      },
+      "id": "cloud_sql_proxy-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211210155428,
+        "version_string": "1.27.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "0dee101a9fa6edcc449a85e7ea19ba3047f3c16c5108321df5ab7c47eb97b575",
+        "contents_checksum": "caed77ba8b8c3a2f999ef9e68dce4cf85e793460013f0e32857f3950b4b066b9",
+        "size": 7691309,
+        "source": "components/google-cloud-sdk-cloud_sql_proxy-linux-x86-20211210155428.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud_sql_proxy"
+      ],
+      "details": {
+        "description": "Provides cloud_sql_proxy executable. See https://github.com/GoogleCloudPlatform/cloudsql-proxy",
+        "display_name": "Cloud SQL Proxy"
+      },
+      "id": "cloud_sql_proxy-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211210155428,
+        "version_string": "1.27.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "a43e22a2b8494ceb3b637b1abde7c3a6192eaaa602ea4b577aa129a0b36e7a2e",
+        "contents_checksum": "ed70eb92475f99513c52a40a5137c30fccf0e96e254905d1af4ff8b9ff919aa0",
+        "size": 8154678,
+        "source": "components/google-cloud-sdk-cloud_sql_proxy-linux-x86_64-20211210155428.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud_sql_proxy"
+      ],
+      "details": {
+        "description": "Provides cloud_sql_proxy executable. See https://github.com/GoogleCloudPlatform/cloudsql-proxy",
+        "display_name": "Cloud SQL Proxy"
+      },
+      "id": "cloud_sql_proxy-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211210155428,
+        "version_string": "1.27.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "22746a14a7687df9a4f681c2b8df1215e89446bb16dcd390c0cb6c30a2698ae4",
+        "contents_checksum": "83569a21f534b605f9dc3a41a07a230ea3b161ff8aec1beee91a528a9235e292",
+        "size": 7381389,
+        "source": "components/google-cloud-sdk-cloud_sql_proxy-windows-x86-20211210155428.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud_sql_proxy"
+      ],
+      "details": {
+        "description": "Provides cloud_sql_proxy executable. See https://github.com/GoogleCloudPlatform/cloudsql-proxy",
+        "display_name": "Cloud SQL Proxy"
+      },
+      "id": "cloud_sql_proxy-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211210155428,
+        "version_string": "1.27.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "cb47a4c839401c2755e16ee09986ae4c6bdff71e1dd8162fd70f181b7c1e3e82",
+        "contents_checksum": "1e2a0a4304009f4c066956e3fae8065ee0d3eaf5aabb7fac19726f9b8c6bf6ac",
+        "size": 7718129,
+        "source": "components/google-cloud-sdk-cloud_sql_proxy-windows-x86_64-20211210155428.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "cloud_sql_proxy"
+      ],
+      "details": {
+        "description": "Provides cloud_sql_proxy executable. See https://github.com/GoogleCloudPlatform/cloudsql-proxy",
+        "display_name": "Cloud SQL Proxy"
+      },
+      "id": "cloud_sql_proxy-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211210155428,
+        "version_string": "1.27.0"
+      }
+    },
+    {
+      "dependencies": [
+        "config-connector-darwin-arm",
+        "config-connector-darwin-x86_64",
+        "config-connector-linux-arm",
+        "config-connector-linux-x86_64",
+        "config-connector-windows-x86_64"
+      ],
+      "details": {
+        "description": "Google Cloud Config Connector. See https://cloud.google.com/config-connector/docs/overview",
+        "display_name": "config-connector"
+      },
+      "id": "config-connector",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.93.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "dd20420980225726c0bb881fdcfb935bf8d25aad84f0bb315e4d5b0ce51cf0fa",
+        "contents_checksum": "8dc4d4419a866c0aaa33fd0d4e0fde885aa926dcf9b8025a580e060b916ca599",
+        "size": 58308273,
+        "source": "components/google-cloud-sdk-config-connector-darwin-arm-20220912133630.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "config-connector"
+      ],
+      "details": {
+        "description": "Google Cloud Config Connector. See https://cloud.google.com/config-connector/docs/overview",
+        "display_name": "config-connector"
+      },
+      "id": "config-connector-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220912133630,
+        "version_string": "1.93.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "541307135cc5c06430cf1368a5a6f9dfe050031aedf1b7e7497362505f81074b",
+        "contents_checksum": "d234dc236ff1c4d88fb4caebd61955df9d3ee5b3db094472dce64f031d646e97",
+        "size": 59915703,
+        "source": "components/google-cloud-sdk-config-connector-darwin-x86_64-20220912133630.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "config-connector"
+      ],
+      "details": {
+        "description": "Google Cloud Config Connector. See https://cloud.google.com/config-connector/docs/overview",
+        "display_name": "config-connector"
+      },
+      "id": "config-connector-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220912133630,
+        "version_string": "1.93.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "693e9b1fdb2b8958388dca7abc405891d481c5973a5a622da8fa54920114af2c",
+        "contents_checksum": "b29263faa92ec2b3a2780f837c14d991c570914d7a9df10940325fab9e6cbe4d",
+        "size": 54695578,
+        "source": "components/google-cloud-sdk-config-connector-linux-arm-20220912133630.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "config-connector"
+      ],
+      "details": {
+        "description": "Google Cloud Config Connector. See https://cloud.google.com/config-connector/docs/overview",
+        "display_name": "config-connector"
+      },
+      "id": "config-connector-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220912133630,
+        "version_string": "1.93.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "62babd72829ff1e9c0ee92ee5fcf0052b19780ff028014871ab73d34aeff4021",
+        "contents_checksum": "29127a962616825f78276a0143a3b75239c66d7df4f582aee85b3801e9590a8d",
+        "size": 59462846,
+        "source": "components/google-cloud-sdk-config-connector-linux-x86_64-20220912133630.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "config-connector"
+      ],
+      "details": {
+        "description": "Google Cloud Config Connector. See https://cloud.google.com/config-connector/docs/overview",
+        "display_name": "config-connector"
+      },
+      "id": "config-connector-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220912133630,
+        "version_string": "1.93.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "e2b541bcbbfcdcd359bc828c7d51538cda3ef0fc4f90ad7ca274792b643bd74f",
+        "contents_checksum": "5221ebb5c2a0cc2c8752806c680382f21366c87cda41f5aa0e009da0d73e9bce",
+        "size": 59649780,
+        "source": "components/google-cloud-sdk-config-connector-windows-x86_64-20220912133630.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "config-connector"
+      ],
+      "details": {
+        "description": "Google Cloud Config Connector. See https://cloud.google.com/config-connector/docs/overview",
+        "display_name": "config-connector"
+      },
+      "id": "config-connector-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220912133630,
+        "version_string": "1.93.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "8197db59e523d340b2da73594807ac5a2c0a09d2899fa5adb71cc6dbdb64c63e",
+        "contents_checksum": "a788f4961a718e4bc4717a5149874353b83ba4ad01f6587725d48bc2e689a07d",
+        "size": 23032301,
+        "source": "components/google-cloud-sdk-core-20231025210228.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bundled-python3-unix",
+        "core-nix",
+        "core-win",
+        "gcloud-deps",
+        "ssh-tools"
+      ],
+      "details": {
+        "description": "Handles all core functionality for the Google Cloud CLI.",
+        "display_name": "Google Cloud CLI Core Libraries"
+      },
+      "id": "core",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": true,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20231025210228,
+        "version_string": "2023.10.25"
+      }
+    },
+    {
+      "data": {
+        "checksum": "0d68f826ada61d2ab98721bbab6c94132a1c210080fdd85c750073e009ae6d39",
+        "contents_checksum": "3e23fcf9fd07d22bf46bca03f951e715a328cb8420e09f34ce2e7f5ef401b982",
+        "size": 2402,
+        "source": "components/google-cloud-sdk-core-nix-20231025210228.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bundled-python3-unix",
+        "core",
+        "gcloud-deps",
+        "ssh-tools"
+      ],
+      "details": {
+        "description": "Handles all core functionality for the Google Cloud CLI.",
+        "display_name": "Google Cloud CLI Core Libraries (Platform Specific)"
+      },
+      "id": "core-nix",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": true,
+      "platform": {
+        "operating_systems": [
+          "CYGWIN",
+          "LINUX",
+          "MACOSX",
+          "MSYS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231025210228,
+        "version_string": "2023.10.25"
+      }
+    },
+    {
+      "data": {
+        "checksum": "0af3f8e9ba07b24f3821758107b18d273edf7fa7703ff4d659b9732e84a73a37",
+        "contents_checksum": "2ac264344fcf75702a4770bfcba3e6f47573351303cbba558bcde7f8c32cc731",
+        "size": 3200,
+        "source": "components/google-cloud-sdk-core-win-20230915145114.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "bundled-python3-unix",
+        "core",
+        "gcloud-deps",
+        "ssh-tools"
+      ],
+      "details": {
+        "description": "Handles all core functionality for the Google Cloud CLI.",
+        "display_name": "Google Cloud CLI Core Libraries (Platform Specific)"
+      },
+      "id": "core-win",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": true,
+      "platform": {
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230915145114,
+        "version_string": "2023.09.15"
+      }
+    },
+    {
+      "dependencies": [
+        "docker-credential-gcr-darwin-x86",
+        "docker-credential-gcr-darwin-x86_64",
+        "docker-credential-gcr-linux-arm",
+        "docker-credential-gcr-linux-x86",
+        "docker-credential-gcr-linux-x86_64",
+        "docker-credential-gcr-windows-x86",
+        "docker-credential-gcr-windows-x86_64"
+      ],
+      "details": {
+        "description": "Provides docker-credential-gcr executable. See https://github.com/GoogleCloudPlatform/docker-credential-gcr",
+        "display_name": "Google Container Registry's Docker credential helper"
+      },
+      "id": "docker-credential-gcr",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "42563a3d7d05e960b1fe05708b7923e01cc99ec2f9577041a4290e213c2c6c4c",
+        "contents_checksum": "19ab65926272397722708696135651d1f8f0b384d5f1f921b5936c8ab06da764",
+        "size": 1790467,
+        "source": "components/google-cloud-sdk-docker-credential-gcr-darwin-x86-20180618122334.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "docker-credential-gcr"
+      ],
+      "details": {
+        "description": "Provides docker-credential-gcr executable. See https://github.com/GoogleCloudPlatform/docker-credential-gcr",
+        "display_name": "Google Container Registry's Docker credential helper"
+      },
+      "id": "docker-credential-gcr-darwin-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20180618122334,
+        "version_string": "1.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "ac6df1b36972a1160d93c493978e7ad3e061722300808ec10104d703a2dbf66f",
+        "contents_checksum": "13f423113bb0ef0b356aa23b4b01327ec23667a710e98bc88430e2dcd2f5a7bb",
+        "size": 2266831,
+        "source": "components/google-cloud-sdk-docker-credential-gcr-darwin-x86_64-20210205155736.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "docker-credential-gcr"
+      ],
+      "details": {
+        "description": "Provides docker-credential-gcr executable. See https://github.com/GoogleCloudPlatform/docker-credential-gcr",
+        "display_name": "Google Container Registry's Docker credential helper"
+      },
+      "id": "docker-credential-gcr-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20210205155736,
+        "version_string": "1.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "e8218f7e508d944f8654e8c9a547f4be81ce6fa128e15bd27703e51e4ebcfe86",
+        "contents_checksum": "2ff30360e7aaf1219a493b3743979af5cdb8dadb0a2b2a4883d8835cbfaafd85",
+        "size": 2079984,
+        "source": "components/google-cloud-sdk-docker-credential-gcr-linux-arm-20210212155704.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "docker-credential-gcr"
+      ],
+      "details": {
+        "description": "Provides docker-credential-gcr executable. See https://github.com/GoogleCloudPlatform/docker-credential-gcr",
+        "display_name": "Google Container Registry's Docker credential helper"
+      },
+      "id": "docker-credential-gcr-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20210212155704,
+        "version_string": "1.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "9fc85ad26ca64564b41cacacb0d5a5fe46d4cc6e2ef07cd6d57633a461247365",
+        "contents_checksum": "5cbd9d9e990c575e1c96ce02a5ac01e0a04d32644bb86ff50203d572103c42ad",
+        "size": 1800324,
+        "source": "components/google-cloud-sdk-docker-credential-gcr-linux-x86-20180618122334.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "docker-credential-gcr"
+      ],
+      "details": {
+        "description": "Provides docker-credential-gcr executable. See https://github.com/GoogleCloudPlatform/docker-credential-gcr",
+        "display_name": "Google Container Registry's Docker credential helper"
+      },
+      "id": "docker-credential-gcr-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20180618122334,
+        "version_string": "1.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "f7548568d4c898128e1a76a96d0fb1081d1d762db4e489fcb93e7d6f220981fc",
+        "contents_checksum": "cae6e3cb5a89bfc5e034cf46db18212cec86db1139c9b29b150fa3317c6bd80a",
+        "size": 1900431,
+        "source": "components/google-cloud-sdk-docker-credential-gcr-linux-x86_64-20180618122334.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "docker-credential-gcr"
+      ],
+      "details": {
+        "description": "Provides docker-credential-gcr executable. See https://github.com/GoogleCloudPlatform/docker-credential-gcr",
+        "display_name": "Google Container Registry's Docker credential helper"
+      },
+      "id": "docker-credential-gcr-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20180618122334,
+        "version_string": "1.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "234f4b1028ce46c205b6794f33542d51501645628959aef8739020ba63de913d",
+        "contents_checksum": "72c0ccc5ecd3191f0117633d15f9de18363a597d4f618d6feb1420356efeb3b0",
+        "size": 1748011,
+        "source": "components/google-cloud-sdk-docker-credential-gcr-windows-x86-20180618122334.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "docker-credential-gcr"
+      ],
+      "details": {
+        "description": "Provides docker-credential-gcr executable. See https://github.com/GoogleCloudPlatform/docker-credential-gcr",
+        "display_name": "Google Container Registry's Docker credential helper"
+      },
+      "id": "docker-credential-gcr-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20180618122334,
+        "version_string": "1.5.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "ee6e6b15ff38dd6b32bb55ea7d014715bb361ea3eba4efcaa0fb9db52d6d851b",
+        "contents_checksum": "dfb8381b7d79460caa07f1cf27e1511bb56b7e04dfdabac8f6e8d76b1dc715ac",
+        "size": 1849342,
+        "source": "components/google-cloud-sdk-docker-credential-gcr-windows-x86_64-20180618122334.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "docker-credential-gcr"
+      ],
+      "details": {
+        "description": "Provides docker-credential-gcr executable. See https://github.com/GoogleCloudPlatform/docker-credential-gcr",
+        "display_name": "Google Container Registry's Docker credential helper"
+      },
+      "id": "docker-credential-gcr-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20180618122334,
+        "version_string": "1.5.0"
+      }
+    },
+    {
+      "dependencies": [
+        "enterprise-certificate-proxy-darwin-arm",
+        "enterprise-certificate-proxy-darwin-x86_64",
+        "enterprise-certificate-proxy-linux-x86_64",
+        "enterprise-certificate-proxy-windows-x86_64"
+      ],
+      "details": {
+        "description": "The enterprise-certificate-proxy component is used for certificate based access to Google Cloud resources. See https://github.com/googleapis/enterprise-certificate-proxy for more information.",
+        "display_name": "enterprise-certificate-proxy"
+      },
+      "id": "enterprise-certificate-proxy",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "0.2.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "01c037710f20fe53e05715439a5de469469f10ee3953076c61387de8afc38d1d",
+        "contents_checksum": "367a10efe8b2bb1ca828cc4e91472f81dcbe3e51d98b16843ebe29e250201fab",
+        "size": 6390940,
+        "source": "components/google-cloud-sdk-enterprise-certificate-proxy-darwin-arm-20230224152814.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "enterprise-certificate-proxy"
+      ],
+      "details": {
+        "description": "The enterprise-certificate-proxy component is used for certificate based access to Google Cloud resources. See https://github.com/googleapis/enterprise-certificate-proxy for more information.",
+        "display_name": "enterprise-certificate-proxy"
+      },
+      "id": "enterprise-certificate-proxy-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230224152814,
+        "version_string": "0.2.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "d0c4da5a4668b94ad0609f414beb05fad1e6ca153b28baa846155b9d6e353a64",
+        "contents_checksum": "9f784ec794093b9aa6867dd9895ca93f7b01eef4bc5a1893303e39e2d2141a31",
+        "size": 7001595,
+        "source": "components/google-cloud-sdk-enterprise-certificate-proxy-darwin-x86_64-20230224152814.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "enterprise-certificate-proxy"
+      ],
+      "details": {
+        "description": "The enterprise-certificate-proxy component is used for certificate based access to Google Cloud resources. See https://github.com/googleapis/enterprise-certificate-proxy for more information.",
+        "display_name": "enterprise-certificate-proxy"
+      },
+      "id": "enterprise-certificate-proxy-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230224152814,
+        "version_string": "0.2.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "01ac1d6276ab45779d87f28970906b050aa1d91d113a76ba1c62a40895519e8a",
+        "contents_checksum": "5dd83c5800e0c515bfc776f8e92e2c8e5c70d84089ccdba9eeb81cc3cd579adb",
+        "size": 8611365,
+        "source": "components/google-cloud-sdk-enterprise-certificate-proxy-linux-x86_64-20230714124024.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "enterprise-certificate-proxy"
+      ],
+      "details": {
+        "description": "The enterprise-certificate-proxy component is used for certificate based access to Google Cloud resources. See https://github.com/googleapis/enterprise-certificate-proxy for more information.",
+        "display_name": "enterprise-certificate-proxy"
+      },
+      "id": "enterprise-certificate-proxy-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230714124024,
+        "version_string": "0.2.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "211f5ac63a9397b6f7ac95d22fd34e18c98b348acfdb2cbf3bcd1384ee1deeb0",
+        "contents_checksum": "16743f19efef5cd51b3f1038e27a60ef68f626317a700acd6a25e2f72e381992",
+        "size": 6778179,
+        "source": "components/google-cloud-sdk-enterprise-certificate-proxy-windows-x86_64-20230519173220.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "enterprise-certificate-proxy"
+      ],
+      "details": {
+        "description": "The enterprise-certificate-proxy component is used for certificate based access to Google Cloud resources. See https://github.com/googleapis/enterprise-certificate-proxy for more information.",
+        "display_name": "enterprise-certificate-proxy"
+      },
+      "id": "enterprise-certificate-proxy-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230519173220,
+        "version_string": "0.2.1"
+      }
+    },
+    {
+      "dependencies": [
+        "core"
+      ],
+      "details": {
+        "description": "Default set of gcloud commands.",
+        "display_name": "Default set of gcloud commands"
+      },
+      "id": "gcloud",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": ""
+      }
+    },
+    {
+      "dependencies": [
+        "gcloud-crc32c-darwin-arm",
+        "gcloud-crc32c-darwin-x86_64",
+        "gcloud-crc32c-linux-arm",
+        "gcloud-crc32c-linux-x86",
+        "gcloud-crc32c-linux-x86_64",
+        "gcloud-crc32c-windows-x86",
+        "gcloud-crc32c-windows-x86_64"
+      ],
+      "details": {
+        "description": "Command line tool that calculates CRC32C hashes on local files.",
+        "display_name": "Google Cloud CRC32C Hash Tool"
+      },
+      "id": "gcloud-crc32c",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.0.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "535ce4686c07b3bac76f7b107828d4059bf598c92aefac1ebb55d911d90cbc4c",
+        "contents_checksum": "e3b7aacbdc4d8a5adbf88bee4ac738d9e51755b994a700135dbfd8a758a054c2",
+        "size": 1243996,
+        "source": "components/google-cloud-sdk-gcloud-crc32c-darwin-arm-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gcloud-crc32c"
+      ],
+      "details": {
+        "description": "Command line tool that calculates CRC32C hashes on local files.",
+        "display_name": "Google Cloud CRC32C Hash Tool"
+      },
+      "id": "gcloud-crc32c-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "1.0.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "00972aba9c56aa0bc4916798ab672cc1e6806e76b00783e15b5c5bbc4e804900",
+        "contents_checksum": "2db99100afdae388afbf96ba0440977d1ab0e9b1fdaa997fac07c5d2c9d6040e",
+        "size": 1284906,
+        "source": "components/google-cloud-sdk-gcloud-crc32c-darwin-x86_64-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gcloud-crc32c"
+      ],
+      "details": {
+        "description": "Command line tool that calculates CRC32C hashes on local files.",
+        "display_name": "Google Cloud CRC32C Hash Tool"
+      },
+      "id": "gcloud-crc32c-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "1.0.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "d978d88831992d75a8d1c506c661e3caa702b65acb13bb881f7d2847360836ab",
+        "contents_checksum": "bc5cd52ce1950d6ac8b24d8f8a00c4bbf7f6af82a908fbe2be630b75ecfc35da",
+        "size": 1217581,
+        "source": "components/google-cloud-sdk-gcloud-crc32c-linux-arm-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gcloud-crc32c"
+      ],
+      "details": {
+        "description": "Command line tool that calculates CRC32C hashes on local files.",
+        "display_name": "Google Cloud CRC32C Hash Tool"
+      },
+      "id": "gcloud-crc32c-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "1.0.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "5abf460069b1f95004805a1f3469061dc340dda0a44fe89fa969e9693cfdd1c1",
+        "contents_checksum": "6a50901818b7cd1a27b2229b350f1869edea9c6aa3bf62a526679b81e967e5f0",
+        "size": 1236281,
+        "source": "components/google-cloud-sdk-gcloud-crc32c-linux-x86-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gcloud-crc32c"
+      ],
+      "details": {
+        "description": "Command line tool that calculates CRC32C hashes on local files.",
+        "display_name": "Google Cloud CRC32C Hash Tool"
+      },
+      "id": "gcloud-crc32c-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "1.0.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "ec15e4bb7d1a361ae7d931c79626b7a27ded310f118208b5b80e6d54b4f7c793",
+        "contents_checksum": "3d6e552b35cbf9a7cb8e34026d14de0422241344032487ff418514503c133ad4",
+        "size": 1289207,
+        "source": "components/google-cloud-sdk-gcloud-crc32c-linux-x86_64-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gcloud-crc32c"
+      ],
+      "details": {
+        "description": "Command line tool that calculates CRC32C hashes on local files.",
+        "display_name": "Google Cloud CRC32C Hash Tool"
+      },
+      "id": "gcloud-crc32c-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "1.0.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "98febf85b26c1a33eb215b2af9f3c8bee847ee71c84be463b26b6d0a763f6400",
+        "contents_checksum": "2e7b929903bc28273be12f0c28dbd68c51315a66600c9751e749ff448d89696f",
+        "size": 1268435,
+        "source": "components/google-cloud-sdk-gcloud-crc32c-windows-x86-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gcloud-crc32c"
+      ],
+      "details": {
+        "description": "Command line tool that calculates CRC32C hashes on local files.",
+        "display_name": "Google Cloud CRC32C Hash Tool"
+      },
+      "id": "gcloud-crc32c-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "1.0.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "a5ed8bb33c67304f57f1ab4c1922f0396565e868dd938b49ce9434a87992a5b8",
+        "contents_checksum": "0c794abb07a045e2c0110bbda9e4033410bb8b7a3d9ddcd329777626ab36d2b3",
+        "size": 1322057,
+        "source": "components/google-cloud-sdk-gcloud-crc32c-windows-x86_64-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gcloud-crc32c"
+      ],
+      "details": {
+        "description": "Command line tool that calculates CRC32C hashes on local files.",
+        "display_name": "Google Cloud CRC32C Hash Tool"
+      },
+      "id": "gcloud-crc32c-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "1.0.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "e6ff194b0ebb57cfca1c65a600e852bd5760a7257afb6240a0ed470ff0965fe0",
+        "contents_checksum": "25b6e403e06e65b9205d1258a1b9e09e5e84efb20007e5f940b90af41e3e7873",
+        "size": 12282466,
+        "source": "components/google-cloud-sdk-gcloud-deps-20231025210228.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gcloud-deps-darwin-x86",
+        "gcloud-deps-darwin-x86_64",
+        "gcloud-deps-linux-x86",
+        "gcloud-deps-linux-x86_64",
+        "gcloud-deps-windows-x86",
+        "gcloud-deps-windows-x86_64"
+      ],
+      "details": {
+        "description": "Set of third_party gcloud cli dependencies.",
+        "display_name": "gcloud cli dependencies"
+      },
+      "id": "gcloud-deps",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20231025210228,
+        "version_string": "2023.10.25"
+      }
+    },
+    {
+      "data": {
+        "checksum": "b575e593cbd8489f6ecbf055288040242113895b166c0d08a19153ecdc216b69",
+        "contents_checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+        "size": 102,
+        "source": "components/google-cloud-sdk-gcloud-deps-darwin-x86-20210416153011.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gcloud-deps"
+      ],
+      "details": {
+        "description": "Set of third_party gcloud cli dependencies.",
+        "display_name": "gcloud cli dependencies"
+      },
+      "id": "gcloud-deps-darwin-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20210416153011,
+        "version_string": "2021.04.16"
+      }
+    },
+    {
+      "data": {
+        "checksum": "6935f9a74112a8e4b1479d5d0016e4ab311324d3143fc03c9c5309595b22792f",
+        "contents_checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+        "size": 105,
+        "source": "components/google-cloud-sdk-gcloud-deps-darwin-x86_64-20210416153011.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gcloud-deps"
+      ],
+      "details": {
+        "description": "Set of third_party gcloud cli dependencies.",
+        "display_name": "gcloud cli dependencies"
+      },
+      "id": "gcloud-deps-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20210416153011,
+        "version_string": "2021.04.16"
+      }
+    },
+    {
+      "data": {
+        "checksum": "b4f579ee674cc273abb8043ada9579976b4bc46cbbe44633d91355331f5a058c",
+        "contents_checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+        "size": 101,
+        "source": "components/google-cloud-sdk-gcloud-deps-linux-x86-20210416153011.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gcloud-deps"
+      ],
+      "details": {
+        "description": "Set of third_party gcloud cli dependencies.",
+        "display_name": "gcloud cli dependencies"
+      },
+      "id": "gcloud-deps-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20210416153011,
+        "version_string": "2021.04.16"
+      }
+    },
+    {
+      "data": {
+        "checksum": "685b7bb8f41d7958efc2ed4d0b7f73056150b2e201663520804a4828e2b18213",
+        "contents_checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+        "size": 104,
+        "source": "components/google-cloud-sdk-gcloud-deps-linux-x86_64-20210416153011.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gcloud-deps"
+      ],
+      "details": {
+        "description": "Set of third_party gcloud cli dependencies.",
+        "display_name": "gcloud cli dependencies"
+      },
+      "id": "gcloud-deps-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20210416153011,
+        "version_string": "2021.04.16"
+      }
+    },
+    {
+      "data": {
+        "checksum": "3b1bff61b17e0d3dcde7520d9fc1cf9252d21d1c67ce44f843a0cbb5c5a30439",
+        "contents_checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+        "size": 103,
+        "source": "components/google-cloud-sdk-gcloud-deps-windows-x86-20210416153011.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gcloud-deps"
+      ],
+      "details": {
+        "description": "Set of third_party gcloud cli dependencies.",
+        "display_name": "gcloud cli dependencies"
+      },
+      "id": "gcloud-deps-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20210416153011,
+        "version_string": "2021.04.16"
+      }
+    },
+    {
+      "data": {
+        "checksum": "b3198f563ee7e6af472b1d934db648c94e805ab7561c80ca0ac569b2a65b7cba",
+        "contents_checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+        "size": 106,
+        "source": "components/google-cloud-sdk-gcloud-deps-windows-x86_64-20210416153011.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gcloud-deps"
+      ],
+      "details": {
+        "description": "Set of third_party gcloud cli dependencies.",
+        "display_name": "gcloud cli dependencies"
+      },
+      "id": "gcloud-deps-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20210416153011,
+        "version_string": "2021.04.16"
+      }
+    },
+    {
+      "dependencies": [
+        "core",
+        "gcloud-man-pages-nix"
+      ],
+      "details": {
+        "description": "Man pages for gcloud commands.",
+        "display_name": "Man pages"
+      },
+      "id": "gcloud-man-pages",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "CYGWIN",
+          "LINUX",
+          "MACOSX",
+          "MSYS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "a437611fe8ca14e5fbeada917374b7cd2f7d56ad2212e51b80fcb9e7b036a21a",
+        "contents_checksum": "4272d2b5be6e3778aaddfdd6a9d555b6dcf31d27428ed7d4aea76e68dfe5f839",
+        "size": 6464999,
+        "source": "components/google-cloud-sdk-gcloud-man-pages-nix-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gcloud-man-pages"
+      ],
+      "details": {
+        "description": "Man pages for gcloud commands.",
+        "display_name": "Man pages (Platform Specific)"
+      },
+      "id": "gcloud-man-pages-nix",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "CYGWIN",
+          "LINUX",
+          "MACOSX",
+          "MSYS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": ""
+      }
+    },
+    {
+      "dependencies": [
+        "gke-gcloud-auth-plugin-darwin-arm",
+        "gke-gcloud-auth-plugin-darwin-x86_64",
+        "gke-gcloud-auth-plugin-linux-arm",
+        "gke-gcloud-auth-plugin-linux-x86",
+        "gke-gcloud-auth-plugin-linux-x86_64",
+        "gke-gcloud-auth-plugin-windows-x86",
+        "gke-gcloud-auth-plugin-windows-x86_64"
+      ],
+      "details": {
+        "description": "The auth plugin for Kubectl on GKE.",
+        "display_name": "gke-gcloud-auth-plugin"
+      },
+      "id": "gke-gcloud-auth-plugin",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "0.5.6"
+      }
+    },
+    {
+      "data": {
+        "checksum": "748941d0f1088368cddbff04350c1156eb6c0b941fb4a8281f90e715de91600c",
+        "contents_checksum": "2e92b76de260589610789902d43950f9c23035d9492e9acde1ab81c2ce1b6f86",
+        "size": 7760852,
+        "source": "components/google-cloud-sdk-gke-gcloud-auth-plugin-darwin-arm-20230915145114.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin"
+      ],
+      "details": {
+        "description": "The auth plugin for Kubectl on GKE.",
+        "display_name": "gke-gcloud-auth-plugin"
+      },
+      "id": "gke-gcloud-auth-plugin-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230915145114,
+        "version_string": "0.5.6"
+      }
+    },
+    {
+      "data": {
+        "checksum": "87e8b9fa1ab657e6f9059b3e73987cdbcafcd0a54a7c0695933a1a630e8c40b6",
+        "contents_checksum": "e93346a6bed20405a41737b6894e5555fe6e65ff84e0c4dfef1c1ca8fbc8759a",
+        "size": 8135789,
+        "source": "components/google-cloud-sdk-gke-gcloud-auth-plugin-darwin-x86_64-20230915145114.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin"
+      ],
+      "details": {
+        "description": "The auth plugin for Kubectl on GKE.",
+        "display_name": "gke-gcloud-auth-plugin"
+      },
+      "id": "gke-gcloud-auth-plugin-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230915145114,
+        "version_string": "0.5.6"
+      }
+    },
+    {
+      "data": {
+        "checksum": "ba39fbdeae5f44a54a83a730d8df93a0b9ce7e18369dabe6f87b023b06b27632",
+        "contents_checksum": "4fe1de8207994103e77bad7d93ebcc9bffde9cb4fa03fd6d658f009454863ba6",
+        "size": 7669387,
+        "source": "components/google-cloud-sdk-gke-gcloud-auth-plugin-linux-arm-20230915145114.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin"
+      ],
+      "details": {
+        "description": "The auth plugin for Kubectl on GKE.",
+        "display_name": "gke-gcloud-auth-plugin"
+      },
+      "id": "gke-gcloud-auth-plugin-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230915145114,
+        "version_string": "0.5.6"
+      }
+    },
+    {
+      "data": {
+        "checksum": "dde5954dc3e5aeb70dd031d1f9dc06ca91fbfef353786dc7aeaf08fe47b8349e",
+        "contents_checksum": "23d71fc214901822027f64f6096b3a6559d963432c189b3bacc7ecf5bf36aef6",
+        "size": 8185793,
+        "source": "components/google-cloud-sdk-gke-gcloud-auth-plugin-linux-x86-20230915145114.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin"
+      ],
+      "details": {
+        "description": "The auth plugin for Kubectl on GKE.",
+        "display_name": "gke-gcloud-auth-plugin"
+      },
+      "id": "gke-gcloud-auth-plugin-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230915145114,
+        "version_string": "0.5.6"
+      }
+    },
+    {
+      "data": {
+        "checksum": "d8d9359bbbb0b8e2761bda8a315a50ad1580450d32e4b31d43da1805c408ec9a",
+        "contents_checksum": "08767b975276ca0651442a13bb7319c3c065dca875cf416a27251cf2093d576a",
+        "size": 8298454,
+        "source": "components/google-cloud-sdk-gke-gcloud-auth-plugin-linux-x86_64-20230915145114.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin"
+      ],
+      "details": {
+        "description": "The auth plugin for Kubectl on GKE.",
+        "display_name": "gke-gcloud-auth-plugin"
+      },
+      "id": "gke-gcloud-auth-plugin-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230915145114,
+        "version_string": "0.5.6"
+      }
+    },
+    {
+      "data": {
+        "checksum": "4e53ce9e76364f936a3730aa26d8396fc905443093bfcba5107e50d999767a28",
+        "contents_checksum": "e13da874c2f1330b78675428fbf7aead7c0f4a4bb8152c911906659d1e7923bb",
+        "size": 8294371,
+        "source": "components/google-cloud-sdk-gke-gcloud-auth-plugin-windows-x86-20230915145114.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin"
+      ],
+      "details": {
+        "description": "The auth plugin for Kubectl on GKE.",
+        "display_name": "gke-gcloud-auth-plugin"
+      },
+      "id": "gke-gcloud-auth-plugin-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230915145114,
+        "version_string": "0.5.6"
+      }
+    },
+    {
+      "data": {
+        "checksum": "72c35b4ec450e1e30e301e681c322bb2ddd8c9158b60f6d7a6c86f5d1d082396",
+        "contents_checksum": "1a1de077982ffdcb3762e47dea8d515cfe301ec2fab336aa2d3f968a142cff56",
+        "size": 8448839,
+        "source": "components/google-cloud-sdk-gke-gcloud-auth-plugin-windows-x86_64-20230915145114.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin"
+      ],
+      "details": {
+        "description": "The auth plugin for Kubectl on GKE.",
+        "display_name": "gke-gcloud-auth-plugin"
+      },
+      "id": "gke-gcloud-auth-plugin-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230915145114,
+        "version_string": "0.5.6"
+      }
+    },
+    {
+      "data": {
+        "checksum": "b4fc023adfe1710bf0ed63ee39aacbaddf090f97deb9435a6e9a955b72904985",
+        "contents_checksum": "c995625b17def8c1cdabb251bbd61259dc4b3aabc2d15f0dde5259726581dbe7",
+        "size": 11833901,
+        "source": "components/google-cloud-sdk-gsutil-20231025210228.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gsutil-nix",
+        "gsutil-win"
+      ],
+      "details": {
+        "description": "Provides the gsutil tool for interacting with Google Cloud Storage.",
+        "display_name": "Cloud Storage Command Line Tool"
+      },
+      "id": "gsutil",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20231025210228,
+        "version_string": "5.27"
+      }
+    },
+    {
+      "data": {
+        "checksum": "140a65cc728b7d7f0e0018c85f30ea6e7a0cae5e59af15fa51a6f1156f598ec8",
+        "contents_checksum": "865d885b3c86680b0f5581236d54916c71c2672b13e32c2c5b1d213429291bdf",
+        "size": 2035,
+        "source": "components/google-cloud-sdk-gsutil-nix-20231025210228.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gsutil"
+      ],
+      "details": {
+        "description": "Provides the gsutil tool for interacting with Google Cloud Storage.",
+        "display_name": "Cloud Storage Command Line Tool (Platform Specific)"
+      },
+      "id": "gsutil-nix",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "CYGWIN",
+          "LINUX",
+          "MACOSX",
+          "MSYS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231025210228,
+        "version_string": "5.27"
+      }
+    },
+    {
+      "data": {
+        "checksum": "f44dc54214254bc4c977ac3635113b9299fc7077e2ff2ba649718b0b2b9754ee",
+        "contents_checksum": "d7ff72a9837188a8f602ba4833ea0f38bb0a55ac160121c59dba0b72fae4064e",
+        "size": 4125,
+        "source": "components/google-cloud-sdk-gsutil-win-20231025210228.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "gsutil"
+      ],
+      "details": {
+        "description": "Provides the gsutil tool for interacting with Google Cloud Storage.",
+        "display_name": "Cloud Storage Command Line Tool (Platform Specific)"
+      },
+      "id": "gsutil-win",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231025210228,
+        "version_string": "5.27"
+      }
+    },
+    {
+      "dependencies": [
+        "harbourbridge-linux-x86_64"
+      ],
+      "details": {
+        "description": "Performs database migrations to Cloud Spanner databases.",
+        "display_name": "Cloud Spanner Migration Tool"
+      },
+      "id": "harbourbridge",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "3.0.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "6414713fd8daac3f253b66ce7573687c82f7f76e71abb28591eb1d2e7d721c69",
+        "contents_checksum": "1e0a9d03071f7fb6937aaef71c7d7f4c02ac3426b3c941d3d7e2393ca66e4583",
+        "size": 21897037,
+        "source": "components/google-cloud-sdk-harbourbridge-linux-x86_64-20230714124024.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "harbourbridge"
+      ],
+      "details": {
+        "description": "Performs database migrations to Cloud Spanner databases.",
+        "display_name": "Cloud Spanner Migration Tool"
+      },
+      "id": "harbourbridge-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230714124024,
+        "version_string": "3.0.0"
+      }
+    },
+    {
+      "dependencies": [
+        "kpt-darwin-arm",
+        "kpt-darwin-x86_64",
+        "kpt-linux-arm",
+        "kpt-linux-x86_64"
+      ],
+      "details": {
+        "description": "Kubernetes Platform Toolkit for packaging, customizing and applying Resource configuration.",
+        "display_name": "kpt"
+      },
+      "id": "kpt",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.0.0-beta.45"
+      }
+    },
+    {
+      "data": {
+        "checksum": "165e0d01221c66f8a02ca770a613af9e10ca84c301908cee016c4b9f62228c90",
+        "contents_checksum": "d69220663dd3189ef2d75698793f173994662ab4a1331f832cce561122dd3347",
+        "size": 15098362,
+        "source": "components/google-cloud-sdk-kpt-darwin-arm-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kpt"
+      ],
+      "details": {
+        "description": "Kubernetes Platform Toolkit for packaging, customizing and applying Resource configuration.",
+        "display_name": "kpt"
+      },
+      "id": "kpt-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "1.0.0-beta.45"
+      }
+    },
+    {
+      "data": {
+        "checksum": "8a507cc40d952611f0d3d7ef881cd2564be93a09d91a01c8d9af13a8477eebe8",
+        "contents_checksum": "bba9c09fe778ebccbeb4c2d77f7fa1a008fc134eebc024d3cfa74ad8737de55d",
+        "size": 15865808,
+        "source": "components/google-cloud-sdk-kpt-darwin-x86_64-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kpt"
+      ],
+      "details": {
+        "description": "Kubernetes Platform Toolkit for packaging, customizing and applying Resource configuration.",
+        "display_name": "kpt"
+      },
+      "id": "kpt-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "1.0.0-beta.45"
+      }
+    },
+    {
+      "data": {
+        "checksum": "00242648b8722bdecbbc422dfe5e947a711d14aeb9adb575cb664e07b61a16c0",
+        "contents_checksum": "b7acebf0b9a28366a0a7ee8f283bb01baa7ba9ab0c85a31d994604c9ee62e587",
+        "size": 13639470,
+        "source": "components/google-cloud-sdk-kpt-linux-arm-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kpt"
+      ],
+      "details": {
+        "description": "Kubernetes Platform Toolkit for packaging, customizing and applying Resource configuration.",
+        "display_name": "kpt"
+      },
+      "id": "kpt-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "1.0.0-beta.45"
+      }
+    },
+    {
+      "data": {
+        "checksum": "d429dbc12345c454e5494e3312bdff83d39ad5793a05423c4ae5fc07a8128aba",
+        "contents_checksum": "2d9bc0d3ace7952ca0e3e37df2545c0d30734162edd151f7759a75a186134604",
+        "size": 15103896,
+        "source": "components/google-cloud-sdk-kpt-linux-x86_64-20231006153333.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kpt"
+      ],
+      "details": {
+        "description": "Kubernetes Platform Toolkit for packaging, customizing and applying Resource configuration.",
+        "display_name": "kpt"
+      },
+      "id": "kpt-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231006153333,
+        "version_string": "1.0.0-beta.45"
+      }
+    },
+    {
+      "data": {
+        "checksum": "1856710bc0df7be64bab8bf90cb5efb07dc3ea87affbd82d5fb95b1a87a0fd38",
+        "contents_checksum": "40d66e6d7f3852fcf4d60000bb89743f36516642a9fb5e4b4ac72d5db2b7d00f",
+        "size": 35802,
+        "source": "components/google-cloud-sdk-kubectl-20230901141909.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin",
+        "kubectl-darwin-arm",
+        "kubectl-darwin-x86_64",
+        "kubectl-linux-arm",
+        "kubectl-linux-x86",
+        "kubectl-linux-x86_64",
+        "kubectl-windows-x86",
+        "kubectl-windows-x86_64"
+      ],
+      "details": {
+        "description": "Provides kubectl executables.",
+        "display_name": "kubectl"
+      },
+      "id": "kubectl",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": true,
+      "version": {
+        "build_number": 20230901141909,
+        "version_string": "1.27.5"
+      }
+    },
+    {
+      "data": {
+        "checksum": "98705f1c24b4deb4c4705890b9d96cf7304b8df3f9fa21d16d971b1e8d577c85",
+        "contents_checksum": "713724b4e531400e61289f6649a0ebc2a390c23c17f9b13cf36ddf713e8c6fff",
+        "size": 103078284,
+        "source": "components/google-cloud-sdk-kubectl-darwin-arm-20230901141909.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin",
+        "kubectl"
+      ],
+      "details": {
+        "description": "Provides kubectl executables.",
+        "display_name": "kubectl"
+      },
+      "id": "kubectl-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": true,
+      "version": {
+        "build_number": 20230901141909,
+        "version_string": "1.27.5"
+      }
+    },
+    {
+      "data": {
+        "checksum": "89fd68aa32498f5fa73e569cc6897c6ef2d12c822870703ce2cc004711260ca6",
+        "contents_checksum": "76c149262b6b45f75eec6d812f6c800924ddc42627bdfa757fbe8ba57c87c856",
+        "size": 108009509,
+        "source": "components/google-cloud-sdk-kubectl-darwin-x86_64-20230901141909.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin",
+        "kubectl"
+      ],
+      "details": {
+        "description": "Provides kubectl executables.",
+        "display_name": "kubectl"
+      },
+      "id": "kubectl-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": true,
+      "version": {
+        "build_number": 20230901141909,
+        "version_string": "1.27.5"
+      }
+    },
+    {
+      "data": {
+        "checksum": "277ce37c99d1da67302f0b96be2f81712c7655b8bd6e8a681e5ec42c7e839f3d",
+        "contents_checksum": "603f81934af743bec8493385ef0742e396547ab8d4730f1b25243ce6f9d6583c",
+        "size": 96034568,
+        "source": "components/google-cloud-sdk-kubectl-linux-arm-20230901141909.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin",
+        "kubectl"
+      ],
+      "details": {
+        "description": "Provides kubectl executables.",
+        "display_name": "kubectl"
+      },
+      "id": "kubectl-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": true,
+      "version": {
+        "build_number": 20230901141909,
+        "version_string": "1.27.5"
+      }
+    },
+    {
+      "data": {
+        "checksum": "d0aa47c656c3f62b046fcdebe292fdd4277423d27ae82e076b33b7ca9c39eefb",
+        "contents_checksum": "da0be2ec150a1178b21e571fc31f3a0c1bc97aec8808add47123f958c8c3f622",
+        "size": 96964577,
+        "source": "components/google-cloud-sdk-kubectl-linux-x86-20230901141909.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin",
+        "kubectl"
+      ],
+      "details": {
+        "description": "Provides kubectl executables.",
+        "display_name": "kubectl"
+      },
+      "id": "kubectl-linux-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": true,
+      "version": {
+        "build_number": 20230901141909,
+        "version_string": "1.27.5"
+      }
+    },
+    {
+      "data": {
+        "checksum": "7ea12e2911cf031f4f1642d9be5a0336c9142d84b3e9511c2405ab742cddab5b",
+        "contents_checksum": "651b0f1e393ec6903229f7c170d1d54a41066fe5cfd6dd233c5a24e7ce08fb4d",
+        "size": 102779659,
+        "source": "components/google-cloud-sdk-kubectl-linux-x86_64-20230901141909.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin",
+        "kubectl"
+      ],
+      "details": {
+        "description": "Provides kubectl executables.",
+        "display_name": "kubectl"
+      },
+      "id": "kubectl-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": true,
+      "version": {
+        "build_number": 20230901141909,
+        "version_string": "1.27.5"
+      }
+    },
+    {
+      "dependencies": [
+        "kubectl-oidc-darwin-arm",
+        "kubectl-oidc-darwin-x86_64",
+        "kubectl-oidc-linux-arm",
+        "kubectl-oidc-linux-x86_64",
+        "kubectl-oidc-windows-x86_64"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for GKE clusters.",
+        "display_name": "kubectl-oidc"
+      },
+      "id": "kubectl-oidc",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "a7d9d1a977856dc342b82936bedfda0032e27ec4657fd380048cd7dc5de05039",
+        "contents_checksum": "2d656b34043e23ff6a98a7fb432efa86d251eb0b14c4452d17c537dc02e04eaf",
+        "size": 20108100,
+        "source": "components/google-cloud-sdk-kubectl-oidc-darwin-arm-20220923141408.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kubectl-oidc"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for GKE clusters.",
+        "display_name": "kubectl-oidc"
+      },
+      "id": "kubectl-oidc-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220923141408,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "1d6d08431d911928ef8500d1979720278f8116e86ae52afc32ce0b76ec4a5fb0",
+        "contents_checksum": "497465b1a0c3a6781d2bb0b68a951af0a4d2230ae67caa84288d38b853800a53",
+        "size": 21183987,
+        "source": "components/google-cloud-sdk-kubectl-oidc-darwin-x86_64-20220923141408.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kubectl-oidc"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for GKE clusters.",
+        "display_name": "kubectl-oidc"
+      },
+      "id": "kubectl-oidc-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220923141408,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "87550a6e878b3091c8da5df8380c65f9e2579f012b7cbddc3e64fb637906fc38",
+        "contents_checksum": "2c33c85c5826938f014a33c21d28289676cccc09d7ffb87368fd94faf43b6cc1",
+        "size": 19755678,
+        "source": "components/google-cloud-sdk-kubectl-oidc-linux-arm-20220923141408.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kubectl-oidc"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for GKE clusters.",
+        "display_name": "kubectl-oidc"
+      },
+      "id": "kubectl-oidc-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220923141408,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "cd6945af71ecfdf94c693ee22b7629ad62dc650cf0c19d58761fe260f792e36f",
+        "contents_checksum": "c2092312910a7e7e86adcd8d72c9e97d7d9757d6dce2f3e24124d9bcadd0d9eb",
+        "size": 21362894,
+        "source": "components/google-cloud-sdk-kubectl-oidc-linux-x86_64-20220923141408.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kubectl-oidc"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for GKE clusters.",
+        "display_name": "kubectl-oidc"
+      },
+      "id": "kubectl-oidc-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220923141408,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "2cf3f2460446692a81c888ec16ac7cbd838fd83acdec46e99bd9225ed49a5d67",
+        "contents_checksum": "6477f1e7ad0e16d891b1b47c201c2bf0e4409789893be60e1697593c58f74025",
+        "size": 21470876,
+        "source": "components/google-cloud-sdk-kubectl-oidc-windows-x86_64-20220923141408.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kubectl-oidc"
+      ],
+      "details": {
+        "description": "Configure kubectl with OIDC credentials for GKE clusters.",
+        "display_name": "kubectl-oidc"
+      },
+      "id": "kubectl-oidc-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220923141408,
+        "version_string": "1.4.4"
+      }
+    },
+    {
+      "data": {
+        "checksum": "f0f671d703d9f167ad6bd3eaa6160a1f3612f55cb4224a7f5d6e32fe24aad4bf",
+        "contents_checksum": "97933ed5d6afd63a6d24200980cadc6ebcfe962827cb1cc5fff294f425b02225",
+        "size": 101631898,
+        "source": "components/google-cloud-sdk-kubectl-windows-x86-20230901141909.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin",
+        "kubectl"
+      ],
+      "details": {
+        "description": "Provides kubectl executables.",
+        "display_name": "kubectl"
+      },
+      "id": "kubectl-windows-x86",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86"
+        ],
+        "operating_systems": [
+          "CYGWIN",
+          "MSYS",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": true,
+      "version": {
+        "build_number": 20230901141909,
+        "version_string": "1.27.5"
+      }
+    },
+    {
+      "data": {
+        "checksum": "be9dfaab70e30013b181ca6b01db0cbe33a9998c8b42b294cb6ae42586c08dcb",
+        "contents_checksum": "8646408cad8f64abcbf575a5b9606d304d3f0a1c914b5c7ba4148d4024c22b34",
+        "size": 103973366,
+        "source": "components/google-cloud-sdk-kubectl-windows-x86_64-20230901141909.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "gke-gcloud-auth-plugin",
+        "kubectl"
+      ],
+      "details": {
+        "description": "Provides kubectl executables.",
+        "display_name": "kubectl"
+      },
+      "id": "kubectl-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "CYGWIN",
+          "MSYS",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": true,
+      "version": {
+        "build_number": 20230901141909,
+        "version_string": "1.27.5"
+      }
+    },
+    {
+      "dependencies": [
+        "kustomize-darwin-arm",
+        "kustomize-darwin-x86_64",
+        "kustomize-linux-arm",
+        "kustomize-linux-x86_64"
+      ],
+      "details": {
+        "description": "Provides kustomize executable.",
+        "display_name": "Kustomize"
+      },
+      "id": "kustomize",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "4.4.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "b95afa06b03f17e547147d8cdbb580d2f2aed61bcaeca54ea36c36831fe650d3",
+        "contents_checksum": "b43056bfa3c4617bda2639f6cd8ab0158d426e2e2f7efcfece1c603b525dc644",
+        "size": 7742264,
+        "source": "components/google-cloud-sdk-kustomize-darwin-arm-20211105152221.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kustomize"
+      ],
+      "details": {
+        "description": "Provides kustomize executable.",
+        "display_name": "Kustomize"
+      },
+      "id": "kustomize-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211105152221,
+        "version_string": "4.4.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "3249a57333c76820058bbce9e5c1092cc236d9dd92eec06c7bd96ae5daa2ffce",
+        "contents_checksum": "2240a0c0c35f660fbf17fd02f75a042fa8476898b757b6be09e6fca83ecd744b",
+        "size": 7961940,
+        "source": "components/google-cloud-sdk-kustomize-darwin-x86_64-20211105152221.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kustomize"
+      ],
+      "details": {
+        "description": "Provides kustomize executable.",
+        "display_name": "Kustomize"
+      },
+      "id": "kustomize-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211105152221,
+        "version_string": "4.4.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "bc7d4df4872108f616b8aa3fc73542c0659dc6497c02f47c08c89a1020d033a1",
+        "contents_checksum": "64a057772ce8a7e0ced2c8aa25137e00a4bceaf8734502ddb7933f3c9c7daf23",
+        "size": 4099867,
+        "source": "components/google-cloud-sdk-kustomize-linux-arm-20211105152221.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kustomize"
+      ],
+      "details": {
+        "description": "Provides kustomize executable.",
+        "display_name": "Kustomize"
+      },
+      "id": "kustomize-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211105152221,
+        "version_string": "4.4.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "baa11714bcd75fef7bdf156e36b3f6fd52efef4f849bb0fd490d5287c85b3524",
+        "contents_checksum": "565e74944c349441370287bed68e8972531ba4e29f9c91aecd19ee53840a4c71",
+        "size": 4534871,
+        "source": "components/google-cloud-sdk-kustomize-linux-x86_64-20211105152221.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kustomize"
+      ],
+      "details": {
+        "description": "Provides kustomize executable.",
+        "display_name": "Kustomize"
+      },
+      "id": "kustomize-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211105152221,
+        "version_string": "4.4.0"
+      }
+    },
+    {
+      "dependencies": [
+        "local-extract-darwin-arm",
+        "local-extract-darwin-x86_64",
+        "local-extract-linux-arm",
+        "local-extract-linux-x86_64"
+      ],
+      "details": {
+        "description": "Locally extract packages/versions from a container image.",
+        "display_name": "On-Demand Scanning API extraction helper"
+      },
+      "id": "local-extract",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.5.9"
+      }
+    },
+    {
+      "data": {
+        "checksum": "da75d4bc8029de5f57c456d46850b526fb40c6b5ce5c39a5f6838a62a5d62b6d",
+        "contents_checksum": "244bace62dc969078d250aa556781b4a001ab9c2c07e2059b5cb9b89b6335355",
+        "size": 14360355,
+        "source": "components/google-cloud-sdk-local-extract-darwin-arm-20230811080439.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "local-extract"
+      ],
+      "details": {
+        "description": "Locally extract packages/versions from a container image.",
+        "display_name": "On-Demand Scanning API extraction helper"
+      },
+      "id": "local-extract-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230811080439,
+        "version_string": "1.5.9"
+      }
+    },
+    {
+      "data": {
+        "checksum": "9ca57a302a039eb4eed4154d51750d2377bf1632540e098bc8c961668f671c51",
+        "contents_checksum": "67b9d72612c32ef0e106f4195e2b0f9b176c8d27ba3f70f5cbad8bdb3699742b",
+        "size": 14810125,
+        "source": "components/google-cloud-sdk-local-extract-darwin-x86_64-20230811080439.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "local-extract"
+      ],
+      "details": {
+        "description": "Locally extract packages/versions from a container image.",
+        "display_name": "On-Demand Scanning API extraction helper"
+      },
+      "id": "local-extract-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230811080439,
+        "version_string": "1.5.9"
+      }
+    },
+    {
+      "data": {
+        "checksum": "e56993257f15b873e140f378521b91d502b81da666cbe19e3c7462db6c890341",
+        "contents_checksum": "7e86ea8bb9426bf5387982bfaa08889171b2ed43eafa4784031c254d665fd6b5",
+        "size": 14144939,
+        "source": "components/google-cloud-sdk-local-extract-linux-arm-20230811080439.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "local-extract"
+      ],
+      "details": {
+        "description": "Locally extract packages/versions from a container image.",
+        "display_name": "On-Demand Scanning API extraction helper"
+      },
+      "id": "local-extract-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230811080439,
+        "version_string": "1.5.9"
+      }
+    },
+    {
+      "data": {
+        "checksum": "5306d5786c058f82802cd764703b5a4b017da3fab1576dcde2ba9431fe7fbdd7",
+        "contents_checksum": "2d0fdc7c90af3a3e2a94685041a74e5c99f0c9010954f8ea18522d868e47a0cf",
+        "size": 15052723,
+        "source": "components/google-cloud-sdk-local-extract-linux-x86_64-20230811080439.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "local-extract"
+      ],
+      "details": {
+        "description": "Locally extract packages/versions from a container image.",
+        "display_name": "On-Demand Scanning API extraction helper"
+      },
+      "id": "local-extract-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230811080439,
+        "version_string": "1.5.9"
+      }
+    },
+    {
+      "dependencies": [
+        "log-streaming-darwin-arm",
+        "log-streaming-darwin-x86_64",
+        "log-streaming-linux-arm",
+        "log-streaming-linux-x86_64",
+        "log-streaming-windows-x86_64"
+      ],
+      "details": {
+        "description": "Provides log streaming services.",
+        "display_name": "Log Streaming"
+      },
+      "id": "log-streaming",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "0.3.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "83886c4dac6f005ad60cfb8a75a5be968bf83b1727fcc739d0e93849124237c9",
+        "contents_checksum": "26a0f478b1466cdc82d4a1fb1ba5586abedecccd5a0c3a01ca1dccb653730c74",
+        "size": 12455711,
+        "source": "components/google-cloud-sdk-log-streaming-darwin-arm-20221028134157.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "log-streaming"
+      ],
+      "details": {
+        "description": "Provides log streaming services.",
+        "display_name": "Log Streaming"
+      },
+      "id": "log-streaming-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20221028134157,
+        "version_string": "0.3.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "c3a19b67efb37245b734fb99a025695d04f64b77db49afbc9f4283620f8569a9",
+        "contents_checksum": "f15e6035ddaa8d1369cacd4bc7e3d6f8d2b5174946e8805b6d9212c902480d2b",
+        "size": 12864820,
+        "source": "components/google-cloud-sdk-log-streaming-darwin-x86_64-20221028134157.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "log-streaming"
+      ],
+      "details": {
+        "description": "Provides log streaming services.",
+        "display_name": "Log Streaming"
+      },
+      "id": "log-streaming-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20221028134157,
+        "version_string": "0.3.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "1abdcfc2213ac9a6231eb3e4336276e2a3579b3d2f7a8ac9e8824ef8b9ea0a34",
+        "contents_checksum": "a0e4553891f3c08c4d8f738586e3baf35102f16e8741d5a2e82431a784776d0f",
+        "size": 12319093,
+        "source": "components/google-cloud-sdk-log-streaming-linux-arm-20221028134157.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "log-streaming"
+      ],
+      "details": {
+        "description": "Provides log streaming services.",
+        "display_name": "Log Streaming"
+      },
+      "id": "log-streaming-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20221028134157,
+        "version_string": "0.3.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "0ed5c65b0d61fd020d1bd19b4d58cb8480aa39f4633ad8762c2549ebe626c714",
+        "contents_checksum": "38e07df3c7b452ab6174bd674eee5cd7292605de4e52e74bad3de1a220e6c530",
+        "size": 14569514,
+        "source": "components/google-cloud-sdk-log-streaming-linux-x86_64-20221028134157.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "log-streaming"
+      ],
+      "details": {
+        "description": "Provides log streaming services.",
+        "display_name": "Log Streaming"
+      },
+      "id": "log-streaming-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20221028134157,
+        "version_string": "0.3.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "28c6614fd674d742cffcee855b2d1d9a214815cbdd3c548d56cb9f3d9e9f618f",
+        "contents_checksum": "a5d0f6e633a5812b3e845877b69d5733d036c14307d74f411e39694e8d2751df",
+        "size": 13016782,
+        "source": "components/google-cloud-sdk-log-streaming-windows-x86_64-20221028134157.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "log-streaming"
+      ],
+      "details": {
+        "description": "Provides log streaming services.",
+        "display_name": "Log Streaming"
+      },
+      "id": "log-streaming-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20221028134157,
+        "version_string": "0.3.0"
+      }
+    },
+    {
+      "dependencies": [
+        "minikube-darwin-arm",
+        "minikube-darwin-x86_64",
+        "minikube-linux-arm",
+        "minikube-linux-x86_64",
+        "minikube-windows-x86_64"
+      ],
+      "details": {
+        "description": "Provides minikube executable. See https://kubernetes.io/docs/tasks/tools/install-minikube/",
+        "display_name": "Minikube"
+      },
+      "id": "minikube",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.31.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "78205e250353829eef8e4226427043612a26df3751750bdfeb4ce5096534477b",
+        "contents_checksum": "989ca8305dc5b0ac3ea012bde522d707e7893ec7b5601476015be170587c2484",
+        "size": 34507436,
+        "source": "components/google-cloud-sdk-minikube-darwin-arm-20230822145232.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "minikube"
+      ],
+      "details": {
+        "description": "Provides minikube executable. See https://kubernetes.io/docs/tasks/tools/install-minikube/",
+        "display_name": "Minikube"
+      },
+      "id": "minikube-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230822145232,
+        "version_string": "1.31.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "09de85445c6b3df96b513fa5ef0893e141f2dd276d6ebe2a5c14805e02966386",
+        "contents_checksum": "6599c91419fd71db290d9df3d12a37cb335d9e30c206533767bcbccfb8415894",
+        "size": 35694869,
+        "source": "components/google-cloud-sdk-minikube-darwin-x86_64-20230822145232.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "minikube"
+      ],
+      "details": {
+        "description": "Provides minikube executable. See https://kubernetes.io/docs/tasks/tools/install-minikube/",
+        "display_name": "Minikube"
+      },
+      "id": "minikube-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230822145232,
+        "version_string": "1.31.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "01f5ee655a8877b9d55912694d634151f411f84f59489c8f61129e60eec1dfbb",
+        "contents_checksum": "bdd299c7575c1365a3ebb3ece947b735a51234851358d24c53997228351232c9",
+        "size": 33636964,
+        "source": "components/google-cloud-sdk-minikube-linux-arm-20230822145232.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "minikube"
+      ],
+      "details": {
+        "description": "Provides minikube executable. See https://kubernetes.io/docs/tasks/tools/install-minikube/",
+        "display_name": "Minikube"
+      },
+      "id": "minikube-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230822145232,
+        "version_string": "1.31.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "567adccb2ee4f3112208def4dda54ec4ec96815a95499444efde14b240175fde",
+        "contents_checksum": "8a3e8c01ca983d10eda486ffcae60cf59d6a1e7fa09e2e4424e5ee56be742d07",
+        "size": 36252687,
+        "source": "components/google-cloud-sdk-minikube-linux-x86_64-20230822145232.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "minikube"
+      ],
+      "details": {
+        "description": "Provides minikube executable. See https://kubernetes.io/docs/tasks/tools/install-minikube/",
+        "display_name": "Minikube"
+      },
+      "id": "minikube-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230822145232,
+        "version_string": "1.31.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "2fc9ea9e26e672d5369e63e4084520b7e252f9c9eabf9e63edc30f362b79c751",
+        "contents_checksum": "f31c9d1fd17b363be49476ea676866474dabd71904101bc9cb748c1c8d50efa1",
+        "size": 36153509,
+        "source": "components/google-cloud-sdk-minikube-windows-x86_64-20230822145232.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "minikube"
+      ],
+      "details": {
+        "description": "Provides minikube executable. See https://kubernetes.io/docs/tasks/tools/install-minikube/",
+        "display_name": "Minikube"
+      },
+      "id": "minikube-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230822145232,
+        "version_string": "1.31.2"
+      }
+    },
+    {
+      "dependencies": [
+        "nomos-darwin-x86_64",
+        "nomos-linux-x86_64"
+      ],
+      "details": {
+        "description": "Provides nomos executable.",
+        "display_name": "Nomos CLI"
+      },
+      "id": "nomos",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.16.2-rc.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "e985978e6f21b67b026ac23882b40fde32fce195c3618c845dce6e05e145359f",
+        "contents_checksum": "21fb7c2de16364b3e011aa4364c7b724cd7aacdfa21610ad891c1b8c3a388e02",
+        "size": 29892791,
+        "source": "components/google-cloud-sdk-nomos-darwin-x86_64-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "nomos"
+      ],
+      "details": {
+        "description": "Provides nomos executable.",
+        "display_name": "Nomos CLI"
+      },
+      "id": "nomos-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "1.16.2-rc.2"
+      }
+    },
+    {
+      "data": {
+        "checksum": "413f599d671855ce7bd0002a35b0f6793041282463342206246e42c01fd9c9b8",
+        "contents_checksum": "ef98a3d5add19c22799e9fe9031487e542f779b31fa604db671775dcd592b739",
+        "size": 30473701,
+        "source": "components/google-cloud-sdk-nomos-linux-x86_64-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "nomos"
+      ],
+      "details": {
+        "description": "Provides nomos executable.",
+        "display_name": "Nomos CLI"
+      },
+      "id": "nomos-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "1.16.2-rc.2"
+      }
+    },
+    {
+      "dependencies": [
+        "package-go-module-darwin-arm",
+        "package-go-module-darwin-x86_64",
+        "package-go-module-linux-arm",
+        "package-go-module-linux-x86_64",
+        "package-go-module-windows-x86_64"
+      ],
+      "details": {
+        "description": "Package a Go module zip file from Go source code.",
+        "display_name": "Artifact Registry Go Module Package Helper"
+      },
+      "id": "package-go-module",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "0.4.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "73de0a6693fe577701f15fc44d7de35bef56271f72db6a5bafa905b858ae9058",
+        "contents_checksum": "b2fb220df30a3581aab41f696dff575d458b39f9a615e713e140fdbba829b952",
+        "size": 855211,
+        "source": "components/google-cloud-sdk-package-go-module-darwin-arm-20230609142206.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "package-go-module"
+      ],
+      "details": {
+        "description": "Package a Go module zip file from Go source code.",
+        "display_name": "Artifact Registry Go Module Package Helper"
+      },
+      "id": "package-go-module-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230609142206,
+        "version_string": "0.4.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "1241fd815ec77a808e4e4ccd8c557af0ae8b6ffb49507b28e019e7c2f1a6c559",
+        "contents_checksum": "bf677ba3b82c4b49b1a62a208da3414358a56819f79c77cc67285db7f6611363",
+        "size": 879065,
+        "source": "components/google-cloud-sdk-package-go-module-darwin-x86_64-20230609142206.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "package-go-module"
+      ],
+      "details": {
+        "description": "Package a Go module zip file from Go source code.",
+        "display_name": "Artifact Registry Go Module Package Helper"
+      },
+      "id": "package-go-module-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230609142206,
+        "version_string": "0.4.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "5ee8bbd46c15febe2733cf8410fa8e192ad5d090c09301bff90d2b8b613227ce",
+        "contents_checksum": "8ae696596679350c64ae6641cad2e84000aa871335bb2f30080174e4010599d2",
+        "size": 830484,
+        "source": "components/google-cloud-sdk-package-go-module-linux-arm-20230609142206.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "package-go-module"
+      ],
+      "details": {
+        "description": "Package a Go module zip file from Go source code.",
+        "display_name": "Artifact Registry Go Module Package Helper"
+      },
+      "id": "package-go-module-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230609142206,
+        "version_string": "0.4.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "90b55785adc7ed9f88e5432ac9033ffc63df5b4369b5c4f81bebdf0ec2847dd1",
+        "contents_checksum": "aea3b1178d27e85125dc5f2a044e441cd4cc704e760059b03b60459d05ca2c1f",
+        "size": 885860,
+        "source": "components/google-cloud-sdk-package-go-module-linux-x86_64-20230609142206.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "package-go-module"
+      ],
+      "details": {
+        "description": "Package a Go module zip file from Go source code.",
+        "display_name": "Artifact Registry Go Module Package Helper"
+      },
+      "id": "package-go-module-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230609142206,
+        "version_string": "0.4.0"
+      }
+    },
+    {
+      "data": {
+        "checksum": "f7a1f1737b12476d554325ef455f72a6e5cdfd9a4297492eeff13a4c480740e8",
+        "contents_checksum": "d90c27eedbee8820aca8e68d3b48e89f7d788e11dd7a1a9a5bd6052bec57d1d1",
+        "size": 885847,
+        "source": "components/google-cloud-sdk-package-go-module-windows-x86_64-20230609142206.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "package-go-module"
+      ],
+      "details": {
+        "description": "Package a Go module zip file from Go source code.",
+        "display_name": "Artifact Registry Go Module Package Helper"
+      },
+      "id": "package-go-module-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230609142206,
+        "version_string": "0.4.0"
+      }
+    },
+    {
+      "dependencies": [
+        "appctl",
+        "kpt",
+        "kustomize",
+        "nomos"
+      ],
+      "details": {
+        "description": "Kubernetes Resource Model (KRM) package management tools utilites & commands.",
+        "display_name": "pkg"
+      },
+      "id": "pkg",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": ""
+      }
+    },
+    {
+      "dependencies": [
+        "core",
+        "powershell-windows"
+      ],
+      "details": {
+        "description": "PowerShell cmdlets for the Google Cloud Platform.",
+        "display_name": "Cloud Tools for PowerShell"
+      },
+      "id": "powershell",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "1.0.1.10"
+      }
+    },
+    {
+      "data": {
+        "checksum": "b002c3d9da22c0060a14f2957b27bd72c062d1e2e63dfa0077242a7a5e152c07",
+        "contents_checksum": "287fc9400eae35d186cd1d39a74b7f8d088f12da7f40b0a041f41b9275b8aff9",
+        "size": 18745914,
+        "source": "components/google-cloud-sdk-powershell-windows-20180924183125.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core",
+        "powershell"
+      ],
+      "details": {
+        "description": "PowerShell cmdlets for the Google Cloud Platform.",
+        "display_name": "Cloud Tools for PowerShell"
+      },
+      "id": "powershell-windows",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20180924183125,
+        "version_string": "1.0.1.10"
+      }
+    },
+    {
+      "data": {
+        "checksum": "28574de6bc04f41d2ffc96e94fb00243ae6ec5e6c19524de7c833afd082a0a20",
+        "contents_checksum": "ec18cbdb02d4f8c9f3abe177bd0f9255eedc1e1d7739121a4ed7a29ce9ff36f4",
+        "size": 65097027,
+        "source": "components/google-cloud-sdk-pubsub-emulator-20231016163610.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core"
+      ],
+      "details": {
+        "description": "Provides the Pub/Sub emulator.",
+        "display_name": "Cloud Pub/Sub Emulator"
+      },
+      "id": "pubsub-emulator",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20231016163610,
+        "version_string": "0.8.10"
+      }
+    },
+    {
+      "dependencies": [
+        "kubectl",
+        "skaffold-darwin-arm",
+        "skaffold-darwin-x86_64",
+        "skaffold-linux-arm",
+        "skaffold-linux-x86_64",
+        "skaffold-windows-x86_64"
+      ],
+      "details": {
+        "description": "Provides skaffold executable.  See https://skaffold.dev/",
+        "display_name": "Skaffold"
+      },
+      "id": "skaffold",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "2.7.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "d82de49ad5de08e99bd6e77ec3dca58b7a48b6d440fffd24a136bc01d3f15c63",
+        "contents_checksum": "f919555748e2d8c1af435e9a62af9633d5146a251e152d0f077d6f3a5a90d5c5",
+        "size": 24334283,
+        "source": "components/google-cloud-sdk-skaffold-darwin-arm-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kubectl",
+        "skaffold"
+      ],
+      "details": {
+        "description": "Provides skaffold executable.  See https://skaffold.dev/",
+        "display_name": "Skaffold"
+      },
+      "id": "skaffold-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "2.7.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "80f62a636612be395d304441b70cb94eb2137a21c5f27363a746fd70f3670565",
+        "contents_checksum": "e446714207056f4c0a70739472eca48de9a4063c6260a1609c55291a0756f75a",
+        "size": 26431910,
+        "source": "components/google-cloud-sdk-skaffold-darwin-x86_64-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kubectl",
+        "skaffold"
+      ],
+      "details": {
+        "description": "Provides skaffold executable.  See https://skaffold.dev/",
+        "display_name": "Skaffold"
+      },
+      "id": "skaffold-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "2.7.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "6fd3ecbea23c64ccb1a7a43ba949df0108d5dcb279b8cd1d55a35f54b53bb674",
+        "contents_checksum": "d38419a04db49b0f30f761ae709c9fa902552871d0aa5522d1777643cc963579",
+        "size": 22351847,
+        "source": "components/google-cloud-sdk-skaffold-linux-arm-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kubectl",
+        "skaffold"
+      ],
+      "details": {
+        "description": "Provides skaffold executable.  See https://skaffold.dev/",
+        "display_name": "Skaffold"
+      },
+      "id": "skaffold-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "2.7.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "6ed058de92dfa76751028437b05c76ce17030fc19d4ff7fde5f0d5c915b94110",
+        "contents_checksum": "c86e65478b18bc05b803e0d4d2c4cf5387b05bd99def05b7017dd74fd478bebc",
+        "size": 24456326,
+        "source": "components/google-cloud-sdk-skaffold-linux-x86_64-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kubectl",
+        "skaffold"
+      ],
+      "details": {
+        "description": "Provides skaffold executable.  See https://skaffold.dev/",
+        "display_name": "Skaffold"
+      },
+      "id": "skaffold-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "2.7.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "c81abe9107f9b03476de18df93b7272bfe4942629e5202eea60611b0294f5883",
+        "contents_checksum": "027478d2605b71896dfffeb11c85da30e6fa3e6164b55701c5186137047e2771",
+        "size": 24939189,
+        "source": "components/google-cloud-sdk-skaffold-windows-x86_64-20231002150006.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "kubectl",
+        "skaffold"
+      ],
+      "details": {
+        "description": "Provides skaffold executable.  See https://skaffold.dev/",
+        "display_name": "Skaffold"
+      },
+      "id": "skaffold-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231002150006,
+        "version_string": "2.7.1"
+      }
+    },
+    {
+      "dependencies": [
+        "spanner-migration-tool-linux-x86_64"
+      ],
+      "details": {
+        "description": "Performs database migrations to Cloud Spanner databases.",
+        "display_name": "Spanner migration tool"
+      },
+      "id": "spanner-migration-tool",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "3.1.3"
+      }
+    },
+    {
+      "data": {
+        "checksum": "f329d03249adcbd72707b0c723b3229bc3957bc2865ae0c2c13a90339ffed4f0",
+        "contents_checksum": "280d4a1fac4f797c9ca31c3a60ac377f32633678e92c45cb3d9c52d9ed697b52",
+        "size": 23033348,
+        "source": "components/google-cloud-sdk-spanner-migration-tool-linux-x86_64-20231023224440.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "spanner-migration-tool"
+      ],
+      "details": {
+        "description": "Performs database migrations to Cloud Spanner databases.",
+        "display_name": "Spanner migration tool"
+      },
+      "id": "spanner-migration-tool-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20231023224440,
+        "version_string": "3.1.3"
+      }
+    },
+    {
+      "dependencies": [
+        "ssh-tools-windows"
+      ],
+      "details": {
+        "description": "Provides Windows command line ssh tools.",
+        "display_name": "Windows command line ssh tools"
+      },
+      "id": "ssh-tools",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": ""
+      }
+    },
+    {
+      "data": {
+        "checksum": "d1e1fda36ce35e058bf23f8cf114acd776c2891227f23cf3b9d78fb35f89b523",
+        "contents_checksum": "8a106316d2efe6baaa483a8677c9f0f807b43189ad3cbe1cefa8055e7500a318",
+        "size": 3485676,
+        "source": "components/google-cloud-sdk-ssh-tools-windows-20211112160846.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "ssh-tools"
+      ],
+      "details": {
+        "description": "Provides Windows command line ssh tools.",
+        "display_name": "Windows command line ssh tools"
+      },
+      "id": "ssh-tools-windows",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20211112160846,
+        "version_string": ""
+      }
+    },
+    {
+      "dependencies": [
+        "terraform-tools-darwin-arm",
+        "terraform-tools-darwin-x86_64",
+        "terraform-tools-linux-arm",
+        "terraform-tools-linux-x86_64",
+        "terraform-tools-windows-x86_64"
+      ],
+      "details": {
+        "description": "Tools for working with Terraform data",
+        "display_name": "Terraform Tools"
+      },
+      "id": "terraform-tools",
+      "is_configuration": false,
+      "is_hidden": false,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm",
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX",
+          "MACOSX",
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 0,
+        "version_string": "0.11.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "60db5513b776dcf617b90149d4db21f64428ead3ac646aac098cbc2989747337",
+        "contents_checksum": "271ea534e65dae8cf88d14f90c35daf18f4ce094c4647d21e7a7584c989201f7",
+        "size": 66685257,
+        "source": "components/google-cloud-sdk-terraform-tools-darwin-arm-20230721154337.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "terraform-tools"
+      ],
+      "details": {
+        "description": "Tools for working with Terraform data",
+        "display_name": "Terraform Tools"
+      },
+      "id": "terraform-tools-darwin-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230721154337,
+        "version_string": "0.11.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "fb3589a142598f1a36541fe799769b849280e9e20a12b9938d4c39589c6872cb",
+        "contents_checksum": "c8cab19c95eabb6f7ec7912b0f3ca57c7d1c5306745359ae49400a3ffb000479",
+        "size": 69665153,
+        "source": "components/google-cloud-sdk-terraform-tools-darwin-x86_64-20230721154337.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "terraform-tools"
+      ],
+      "details": {
+        "description": "Tools for working with Terraform data",
+        "display_name": "Terraform Tools"
+      },
+      "id": "terraform-tools-darwin-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "MACOSX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230721154337,
+        "version_string": "0.11.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "be800db8eba62f286ff49c2ad59c399a6375429bcab4d06285a0f6851b10ee01",
+        "contents_checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+        "size": 105,
+        "source": "components/google-cloud-sdk-terraform-tools-linux-arm-20220325151342.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "terraform-tools"
+      ],
+      "details": {
+        "description": "Tools for working with Terraform data",
+        "display_name": "Terraform Tools"
+      },
+      "id": "terraform-tools-linux-arm",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "arm"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20220325151342,
+        "version_string": "0.2.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "887c390cadafd0241c1475b39f7ddc60a59a71a669d6faa5ec8c4fea5a82a7cc",
+        "contents_checksum": "0af08dc9afbe622ca65f4eafbbe342c88e103e0e2cf6bacf5e553da5436b16ab",
+        "size": 69360426,
+        "source": "components/google-cloud-sdk-terraform-tools-linux-x86_64-20230721154337.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "terraform-tools"
+      ],
+      "details": {
+        "description": "Tools for working with Terraform data",
+        "display_name": "Terraform Tools"
+      },
+      "id": "terraform-tools-linux-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "LINUX"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230721154337,
+        "version_string": "0.11.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "b286cfe232e3ee56c479d6ddfc6e6d13cf3f1b36267bf62168d02f931cbb5b64",
+        "contents_checksum": "08339495134abe71ec8afcd2d7bd7671da1235e7eb0698ce011e60818147f85f",
+        "size": 69440727,
+        "source": "components/google-cloud-sdk-terraform-tools-windows-x86_64-20230721154337.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "terraform-tools"
+      ],
+      "details": {
+        "description": "Tools for working with Terraform data",
+        "display_name": "Terraform Tools"
+      },
+      "id": "terraform-tools-windows-x86_64",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {
+        "architectures": [
+          "x86_64"
+        ],
+        "operating_systems": [
+          "WINDOWS"
+        ]
+      },
+      "platform_required": false,
+      "version": {
+        "build_number": 20230721154337,
+        "version_string": "0.11.1"
+      }
+    },
+    {
+      "data": {
+        "checksum": "5f1b1acfd653d1c7906dca110f939cf3e3389778ae0d4328c722348e69c3ba58",
+        "contents_checksum": "7fa3155ffbfc1c7b90d78a1eabb7e722f274149645f0e3979a5493aad1fd9df1",
+        "size": 50896581,
+        "source": "components/google-cloud-sdk-tests-20231025210228.tar.gz",
+        "type": "tar"
+      },
+      "dependencies": [
+        "core"
+      ],
+      "details": {
+        "description": "Collection of tests used to verity Google Cloud CLI",
+        "display_name": "Google Cloud CLI tests"
+      },
+      "id": "tests",
+      "is_configuration": false,
+      "is_hidden": true,
+      "is_required": false,
+      "platform": {},
+      "platform_required": false,
+      "version": {
+        "build_number": 20231025210228,
+        "version_string": "2023.10.25"
+      }
+    }
+  ],
+  "gcloud_rel_path": "lib/gcloud.py",
+  "notifications": [
+    {
+      "condition": {
+        "check_components": true
+      },
+      "id": "default",
+      "notification": {},
+      "trigger": {
+        "frequency": 86400
+      }
+    }
+  ],
+  "post_processing_command": "components post-process",
+  "release_notes_url": "RELEASE_NOTES",
+  "revision": 20231025210228,
+  "schema_version": {
+    "no_update": false,
+    "url": "https://dl.google.com/dl/cloudsdk/channels/rapid/google-cloud-sdk.tar.gz",
+    "version": 3
+  },
+  "version": "452.0.1"
+}
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/components.nix b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/components.nix
new file mode 100644
index 000000000000..2b25d65a7f27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/components.nix
@@ -0,0 +1,181 @@
+{ lib
+, stdenv
+, system
+, snapshotPath
+, autoPatchelfHook
+, python3
+, libxcrypt-legacy
+}:
+
+let
+  # Mapping from GCS component architecture names to Nix archictecture names
+  arches = {
+    x86 = "i686";
+    x86_64 = "x86_64";
+    arm = "aarch64";
+  };
+
+  # Mapping from GCS component operating systems to Nix operating systems
+  oses = {
+    LINUX = "linux";
+    MACOSX = "darwin";
+    WINDOWS = "windows";
+    CYGWIN = "cygwin";
+  };
+
+  # Convert an archicecture + OS to a Nix platform
+  toNixPlatform = arch: os:
+    let
+      arch' = arches.${arch} or (throw "unsupported architecture '${arch}'");
+      os' = oses.${os} or (throw "unsupported OS '${os}'");
+    in
+    "${arch'}-${os'}";
+
+  # All architectures that are supported by GCS
+  allArches = builtins.attrNames arches;
+
+  # A description of all available google-cloud-sdk components.
+  # It's a JSON file with a list of components, along with some metadata
+  snapshot = lib.importJSON snapshotPath;
+
+  # Generate a snapshot file for a single component.  It has the same format as
+  # `snapshot`, but only contains a single component.  These files are
+  # installed with google-cloud-sdk to let it know which components are
+  # available.
+  snapshotFromComponent =
+    { component
+    , revision
+    , schema_version
+    , version
+    }:
+    builtins.toJSON {
+      components = [ component ];
+      inherit revision schema_version version;
+    };
+
+  # Generate a set of components from a JSON file describing these components
+  componentsFromSnapshot =
+    { components
+    , revision
+    , schema_version
+    , version
+    , ...
+    }:
+    lib.fix (
+      self:
+      builtins.listToAttrs (
+        builtins.map
+          (component: {
+            name = component.id;
+            value = componentFromSnapshot self { inherit component revision schema_version version; };
+          })
+          components
+      )
+    );
+
+  # Generate a single component from its snapshot, along with a set of
+  # available dependencies to choose from.
+  componentFromSnapshot =
+    # Component derivations that can be used as dependencies
+    components:
+    # This component's snapshot
+    { component
+    , revision
+    , schema_version
+    , version
+    } @ attrs:
+    let
+      baseUrl = builtins.dirOf schema_version.url;
+      # Architectures supported by this component.  Defaults to all available
+      # architectures.
+      architectures = builtins.filter
+        (arch: builtins.elem arch (builtins.attrNames arches))
+        (lib.attrByPath [ "platform" "architectures" ] allArches component);
+      # Operating systems supported by this component
+      operating_systems = builtins.filter
+        (os: builtins.elem os (builtins.attrNames oses))
+        component.platform.operating_systems;
+    in
+    mkComponent
+      {
+        pname = component.id;
+        version = component.version.version_string;
+        src =
+          lib.optionalString (lib.hasAttrByPath [ "data" "source" ] component) "${baseUrl}/${component.data.source}";
+        sha256 = lib.attrByPath [ "data" "checksum" ] "" component;
+        dependencies = builtins.map (dep: builtins.getAttr dep components) component.dependencies;
+        platforms =
+          if component.platform == { }
+          then lib.platforms.all
+          else
+            builtins.concatMap
+              (arch: builtins.map (os: toNixPlatform arch os) operating_systems)
+              architectures;
+        snapshot = snapshotFromComponent attrs;
+      };
+
+  # Filter out dependencies not supported by current system
+  filterForSystem = builtins.filter (drv: builtins.elem system drv.meta.platforms);
+
+  # Make a google-cloud-sdk component
+  mkComponent =
+    { pname
+    , version
+      # Source tarball, if any
+    , src ? ""
+      # Checksum for the source tarball, if there is a source
+    , sha256 ? ""
+      # Other components this one depends on
+    , dependencies ? [ ]
+      # Short text describing the component
+    , description ? ""
+      # Platforms supported
+    , platforms ? lib.platforms.all
+      # The snapshot corresponding to this component
+    , snapshot
+    }: stdenv.mkDerivation {
+      inherit pname version snapshot;
+      src =
+        lib.optionalString (src != "")
+          (builtins.fetchurl
+            {
+              url = src;
+              inherit sha256;
+            });
+      dontUnpack = true;
+      installPhase = ''
+        mkdir -p $out/google-cloud-sdk/.install
+
+        # If there is a source, unpack it
+        if [ ! -z "$src" ]; then
+          tar -xf $src -C $out/google-cloud-sdk/
+
+          # If the source has binaries, link them to `$out/bin`
+          if [ -d "$out/google-cloud-sdk/bin" ]; then
+            mkdir $out/bin
+            find $out/google-cloud-sdk/bin/ -type f -exec ln -s {} $out/bin/ \;
+          fi
+        fi
+
+        # Write the snapshot file to the `.install` folder
+        cp $snapshotPath $out/google-cloud-sdk/.install/${pname}.snapshot.json
+      '';
+      nativeBuildInputs = [
+        python3
+        stdenv.cc.cc
+      ] ++ lib.optionals stdenv.isLinux [
+        autoPatchelfHook
+      ];
+      buildInputs = [
+        libxcrypt-legacy
+      ];
+      passthru = {
+        dependencies = filterForSystem dependencies;
+      };
+      passAsFile = [ "snapshot" ];
+      meta = {
+        inherit description platforms;
+      };
+    };
+in
+componentsFromSnapshot snapshot
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/data.nix b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/data.nix
new file mode 100644
index 000000000000..13ba8b8dd6f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/data.nix
@@ -0,0 +1,32 @@
+# DO NOT EDIT! This file is generated automatically by update.sh
+{ }:
+{
+  version = "452.0.1";
+  googleCloudSdkPkgs = {
+    x86_64-linux =
+      {
+        url = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-452.0.1-linux-x86_64.tar.gz";
+        sha256 = "0dj0hzhfvw1p74ja079jmhrhzrbsivgfm0509rxf9xvh1a0kb8zx";
+      };
+    x86_64-darwin =
+      {
+        url = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-452.0.1-darwin-x86_64.tar.gz";
+        sha256 = "0gxz12sblc3slw9rhy0i7x8k61sakr0gwipx75h3cghf72hsx0cn";
+      };
+    aarch64-linux =
+      {
+        url = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-452.0.1-linux-arm.tar.gz";
+        sha256 = "1jcacwqxa5ylffpfp5mr509imay24ddsv43l04fygzahv2sv8a2d";
+      };
+    aarch64-darwin =
+      {
+        url = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-452.0.1-darwin-arm.tar.gz";
+        sha256 = "1mpydxqkmfrnqiifgplvc5ghn6rs4981p4pw5zgxip7khw64dfap";
+      };
+    i686-linux =
+      {
+        url = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-452.0.1-linux-x86.tar.gz";
+        sha256 = "1whijjp2bn24j78rlfpp01y832fnlgj557v6fim9l78zcavgnahz";
+      };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/default.nix b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/default.nix
new file mode 100644
index 000000000000..f354dde039c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/default.nix
@@ -0,0 +1,133 @@
+# Make sure that the "with-gce" flag is set when building `google-cloud-sdk`
+# for GCE hosts. This flag prevents "google-compute-engine" from being a
+# default dependency which is undesirable because this package is
+#
+#   1) available only on GNU/Linux (requires `systemd` in particular)
+#   2) intended only for GCE guests (and is useless elsewhere)
+#   3) used by `google-cloud-sdk` only on GCE guests
+#
+
+{ stdenv, lib, fetchurl, makeWrapper, python, openssl, jq, callPackage, with-gce ? false }:
+
+let
+  pythonEnv = python.withPackages (p: with p; [
+    cffi
+    cryptography
+    openssl
+    crcmod
+    numpy
+  ] ++ lib.optional (with-gce) google-compute-engine);
+
+  data = import ./data.nix { };
+  sources = system:
+    data.googleCloudSdkPkgs.${system} or (throw "Unsupported system: ${system}");
+
+  components = callPackage ./components.nix {
+    snapshotPath = ./components.json;
+  };
+
+  withExtraComponents = callPackage ./withExtraComponents.nix { inherit components; };
+
+in stdenv.mkDerivation rec {
+  pname = "google-cloud-sdk";
+  inherit (data) version;
+
+  src = fetchurl (sources stdenv.hostPlatform.system);
+
+  buildInputs = [ python ];
+
+  nativeBuildInputs = [ jq makeWrapper ];
+
+  patches = [
+    # For kubectl configs, don't store the absolute path of the `gcloud` binary as it can be garbage-collected
+    ./gcloud-path.patch
+    # Disable checking for updates for the package
+    ./gsutil-disable-updates.patch
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/google-cloud-sdk
+    cp -R * .install $out/google-cloud-sdk/
+
+    mkdir -p $out/google-cloud-sdk/lib/surface/{alpha,beta}
+    cp ${./alpha__init__.py} $out/google-cloud-sdk/lib/surface/alpha/__init__.py
+    cp ${./beta__init__.py} $out/google-cloud-sdk/lib/surface/beta/__init__.py
+
+    # create wrappers with correct env
+    for program in gcloud bq gsutil git-credential-gcloud.sh docker-credential-gcloud; do
+        programPath="$out/google-cloud-sdk/bin/$program"
+        binaryPath="$out/bin/$program"
+        wrapProgram "$programPath" \
+            --set CLOUDSDK_PYTHON "${pythonEnv}/bin/python" \
+            --prefix PYTHONPATH : "${pythonEnv}/${python.sitePackages}" \
+            --prefix PATH : "${openssl.bin}/bin"
+
+        mkdir -p $out/bin
+        ln -s $programPath $binaryPath
+    done
+
+    # disable component updater and update check
+    substituteInPlace $out/google-cloud-sdk/lib/googlecloudsdk/core/config.json \
+      --replace "\"disable_updater\": false" "\"disable_updater\": true"
+    echo "
+    [component_manager]
+    disable_update_check = true" >> $out/google-cloud-sdk/properties
+
+    # setup bash completion
+    mkdir -p $out/share/bash-completion/completions
+    mv $out/google-cloud-sdk/completion.bash.inc $out/share/bash-completion/completions/gcloud
+    ln -s $out/share/bash-completion/completions/gcloud $out/share/bash-completion/completions/gsutil
+
+    # setup zsh completion
+    mkdir -p $out/share/zsh/site-functions
+    mv $out/google-cloud-sdk/completion.zsh.inc $out/share/zsh/site-functions/_gcloud
+    ln -s $out/share/zsh/site-functions/_gcloud $out/share/zsh/site-functions/_gsutil
+    # zsh doesn't load completions from $FPATH without #compdef as the first line
+    sed -i '1 i #compdef gcloud' $out/share/zsh/site-functions/_gcloud
+
+    # This directory contains compiled mac binaries. We used crcmod from
+    # nixpkgs instead.
+    rm -r $out/google-cloud-sdk/platform/gsutil/third_party/crcmod \
+          $out/google-cloud-sdk/platform/gsutil/third_party/crcmod_osx
+
+    # remove tests and test data
+    find $out -name tests -type d -exec rm -rf '{}' +
+    rm $out/google-cloud-sdk/platform/gsutil/gslib/commands/test.py
+
+    # compact all the JSON
+    find $out -name \*.json | while read path; do
+      jq -c . $path > $path.min
+      mv $path.min $path
+    done
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/gcloud version --format json | jq '."Google Cloud SDK"' | grep "${version}"
+  '';
+
+  passthru = {
+    inherit components withExtraComponents;
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    description = "Tools for the google cloud platform";
+    longDescription = "The Google Cloud SDK. This package has the programs: gcloud, gsutil, and bq";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryNativeCode  # anthoscli and possibly more
+    ];
+    # This package contains vendored dependencies. All have free licenses.
+    license = licenses.free;
+    homepage = "https://cloud.google.com/sdk/";
+    changelog = "https://cloud.google.com/sdk/docs/release-notes";
+    maintainers = with maintainers; [ iammrinal0 pradyuman stephenmw zimbatm ];
+    platforms = builtins.attrNames data.googleCloudSdkPkgs;
+    mainProgram = "gcloud";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/gcloud-path.patch b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/gcloud-path.patch
new file mode 100644
index 000000000000..05b3ea3a8d16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/gcloud-path.patch
@@ -0,0 +1,44 @@
+From b69fee70154a861637c82e98e18be01bbb96423b Mon Sep 17 00:00:00 2001
+From: Florian Klink <flokli@flokli.de>
+Date: Wed, 12 Jun 2019 17:03:09 +0200
+Subject: [PATCH] kubeconfig: don't store absolute path to gcloud binary
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The `gcloud beta container clusters get-credentials $cluster \
+--region $region --project $project`
+command can be used to write kubectl config files.
+
+In that file, normally the absolute path to the `gcloud` binary is
+stored.
+
+This is a bad idea in NixOS. We might eventually garbage-collect that
+specific gcloud binary - and in general, would expect a nix-shell
+provided gcloud to be used.
+
+In its current state, token renewal would just start to break with the
+following error message:
+
+Unable to connect to the server: error executing access token command "/nix/store/…/gcloud config config-helper --format=json": err=fork/exec /nix/store/…/gcloud: no such file or directory output= stderr=
+
+Avoid this by storing just `gcloud` inside `cmd-path`, which causes
+kubectl to lookup the gcloud command from $PATH, which is more likely to
+keep working.
+---
+ lib/googlecloudsdk/api_lib/container/kubeconfig.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/googlecloudsdk/api_lib/container/kubeconfig.py b/lib/googlecloudsdk/api_lib/container/kubeconfig.py
+index 5975cb8f..b98e6721 100644
+--- a/lib/googlecloudsdk/api_lib/container/kubeconfig.py
++++ b/lib/googlecloudsdk/api_lib/container/kubeconfig.py
+@@ -396,7 +396,7 @@ def _AuthProvider(name='gcp',
+       if sdk_bin_path is None:
+         log.error(SDK_BIN_PATH_NOT_FOUND)
+         raise Error(SDK_BIN_PATH_NOT_FOUND)
+-      cmd_path = os.path.join(sdk_bin_path, bin_name)
++      cmd_path = bin_name
+       try:
+         # Print warning if gke-gcloud-auth-plugin is not present or executable
+         _GetGkeGcloudPluginCommandAndPrintWarning()
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/gsutil-disable-updates.patch b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/gsutil-disable-updates.patch
new file mode 100644
index 000000000000..a262dcabf74e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/gsutil-disable-updates.patch
@@ -0,0 +1,47 @@
+diff --git a/platform/gsutil/gslib/command_runner.py b/platform/gsutil/gslib/command_runner.py
+index f490bb3..dc6bbcc 100644
+--- a/platform/gsutil/gslib/command_runner.py
++++ b/platform/gsutil/gslib/command_runner.py
+@@ -330,18 +330,6 @@ class CommandRunner(object):
+     Returns:
+       Return value(s) from Command that was run.
+     """
+-    command_changed_to_update = False
+-    if (not skip_update_check and
+-        self.MaybeCheckForAndOfferSoftwareUpdate(command_name, debug)):
+-      command_name = 'update'
+-      command_changed_to_update = True
+-      args = [_StringToSysArgType('-n')]
+-
+-      # Check for opt-in analytics.
+-      if system_util.IsRunningInteractively() and collect_analytics:
+-        metrics.CheckAndMaybePromptForAnalyticsEnabling()
+-
+-    self.MaybePromptForPythonUpdate(command_name)
+ 
+     if not args:
+       args = []
+@@ -415,15 +403,6 @@ class CommandRunner(object):
+       ShutDownGsutil()
+     if GetFailureCount() > 0:
+       return_code = 1
+-    if command_changed_to_update:
+-      # If the command changed to update, the user's original command was
+-      # not executed.
+-      return_code = 1
+-      print('\n'.join(
+-          textwrap.wrap(
+-              'Update was successful. Exiting with code 1 as the original command '
+-              'issued prior to the update was not executed and should be re-run.'
+-          )))
+     return return_code
+ 
+   def SkipUpdateCheck(self):
+@@ -467,6 +446,7 @@ class CommandRunner(object):
+     return True
+ 
+   def MaybeCheckForAndOfferSoftwareUpdate(self, command_name, debug):
++    return False
+     """Checks the last time we checked for an update and offers one if needed.
+ 
+     Offer is made if the time since the last update check is longer
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/update.sh b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/update.sh
new file mode 100755
index 000000000000..5b400dba3348
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/update.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p nix jq curl
+
+CHANNEL_URL="https://dl.google.com/dl/cloudsdk/channels/rapid"
+BASE_URL="$CHANNEL_URL/downloads/google-cloud-sdk"
+
+PACKAGE_DIR=$(dirname -- "$0")
+
+VERSION=$(curl "https://storage.googleapis.com/storage/v1/b/cloud-sdk-release/o?delimiter=/&startOffset=google-cloud-sdk-${UPDATE_NIX_OLD_VERSION}&endOffset=google-cloud-sdk-9" | jq --raw-output '.items[-1].name | scan("\\d+\\.\\d+\\.\\d+")')
+
+function genMainSrc() {
+    local url="${BASE_URL}-${VERSION}-${1}-${2}.tar.gz"
+    local sha256
+    sha256=$(nix-prefetch-url "$url")
+    echo "      {"
+    echo "        url = \"${url}\";"
+    echo "        sha256 = \"${sha256}\";"
+    echo "      };"
+}
+
+{
+    cat <<EOF
+# DO NOT EDIT! This file is generated automatically by update.sh
+{ }:
+{
+  version = "${VERSION}";
+  googleCloudSdkPkgs = {
+EOF
+
+    echo "    x86_64-linux ="
+    genMainSrc "linux" "x86_64"
+
+    echo "    x86_64-darwin ="
+    genMainSrc "darwin" "x86_64"
+
+    echo "    aarch64-linux ="
+    genMainSrc "linux" "arm"
+
+    echo "    aarch64-darwin ="
+    genMainSrc "darwin" "arm"
+
+    echo "    i686-linux ="
+    genMainSrc "linux" "x86"
+
+    echo "  };"
+    echo "}"
+
+} > "${PACKAGE_DIR}/data.nix"
+
+curl "${CHANNEL_URL}/components-v${VERSION}.json" -w "\n" > "${PACKAGE_DIR}/components.json"
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/withExtraComponents.nix b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/withExtraComponents.nix
new file mode 100644
index 000000000000..b65b5700c607
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/withExtraComponents.nix
@@ -0,0 +1,62 @@
+{ lib, google-cloud-sdk, runCommand, components }:
+
+comps_:
+
+let
+  # Remove components which are already installed by default
+  filterPreInstalled =
+    let
+      preInstalledComponents = with components; [ bq bq-nix core core-nix gcloud-deps gcloud gsutil gsutil-nix ];
+    in
+    builtins.filter (drv: !(builtins.elem drv preInstalledComponents));
+
+  # Recursively build a list of components with their dependencies
+  # TODO this could be made faster, it checks the dependencies too many times
+  findDepsRecursive = lib.converge
+    (drvs: lib.unique (drvs ++ (builtins.concatMap (drv: drv.dependencies) drvs)));
+
+  # Components to install by default
+  defaultComponents = with components; [ alpha beta ];
+
+  comps = [ google-cloud-sdk ] ++ filterPreInstalled (findDepsRecursive (defaultComponents ++ comps_));
+in
+# Components are installed by copying the `google-cloud-sdk` package, along
+# with each component, over to a new location, and then patching that location
+# with `sed` to ensure the proper paths are used.
+# For some reason, this does not work properly with a `symlinkJoin`: the
+# `gcloud` binary doesn't seem able to find the installed components.
+runCommand "google-cloud-sdk-${google-cloud-sdk.version}"
+{
+  inherit (google-cloud-sdk) meta;
+  inherit comps;
+  passAsFile = [ "comps" ];
+
+  doInstallCheck = true;
+  disallowedRequisites = [ google-cloud-sdk ];
+  installCheckPhase =
+    let
+      compNames = builtins.map (drv: drv.name) comps_;
+    in
+    ''
+      $out/bin/gcloud components list > component_list.txt
+      for comp in ${builtins.toString compNames}; do
+        if [ ! grep ... component_list.txt | grep "Not Installed" ]; then
+          echo "Failed to install component '$comp'"
+          exit 1
+        fi
+      done
+    '';
+}
+  ''
+    mkdir -p $out
+
+    # Install each component
+    for comp in $(cat $compsPath); do
+      echo "installing component $comp"
+      cp -dRf $comp/. $out
+      find $out -type d -exec chmod 744 {} +
+    done
+
+    # Replace references to the original google-cloud-sdk with this one
+    find $out/google-cloud-sdk -type f -exec sed -i -e "s#${google-cloud-sdk}#$out#" {} \;
+  ''
diff --git a/nixpkgs/pkgs/tools/admin/granted/default.nix b/nixpkgs/pkgs/tools/admin/granted/default.nix
new file mode 100644
index 000000000000..79fc6358ed29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/granted/default.nix
@@ -0,0 +1,66 @@
+{ bash
+, buildGoModule
+, fetchFromGitHub
+
+, withFish ? false
+, fish
+
+, lib
+, makeWrapper
+, xdg-utils
+}:
+
+buildGoModule rec {
+  pname = "granted";
+  version = "0.20.7";
+
+  src = fetchFromGitHub {
+    owner = "common-fate";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-AGpR587vz1t5z/J09n4/XvFPgbwb66wRTfSVOTCWeSU=";
+  };
+
+  vendorHash = "sha256-yw/hl82RQPjZB0SsVr4OPDUsFH2TY6i4RpVE7wd4fwk=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/common-fate/granted/internal/build.Version=v${version}"
+    "-X github.com/common-fate/granted/internal/build.Commit=${src.rev}"
+    "-X github.com/common-fate/granted/internal/build.Date=1970-01-01-00:00:01"
+    "-X github.com/common-fate/granted/internal/build.BuiltBy=Nix"
+  ];
+
+  subPackages = [
+    "cmd/granted"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/granted $out/bin/assumego
+
+    # Install shell script
+    install -Dm755 $src/scripts/assume $out/bin/assume
+    substituteInPlace $out/bin/assume \
+      --replace /bin/bash ${bash}/bin/bash
+
+    wrapProgram $out/bin/assume \
+      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
+
+  '' + lib.optionalString withFish ''
+    # Install fish script
+    install -Dm755 $src/scripts/assume.fish $out/share/assume.fish
+    substituteInPlace $out/share/assume.fish \
+      --replace /bin/fish ${fish}/bin/fish
+  '';
+
+  meta = with lib; {
+    description = "The easiest way to access your cloud";
+    homepage = "https://github.com/common-fate/granted";
+    changelog = "https://github.com/common-fate/granted/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivankovnatsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/gtk-vnc/default.nix b/nixpkgs/pkgs/tools/admin/gtk-vnc/default.nix
new file mode 100644
index 000000000000..2dfbccc08c50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/gtk-vnc/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, gobject-introspection
+, gnutls
+, cairo
+, glib
+, pkg-config
+, cyrus_sasl
+, pulseaudioSupport ? stdenv.isLinux
+, libpulseaudio
+, libgcrypt
+, gtk3
+, vala
+, gettext
+, perl
+, python3
+, gnome
+, gdk-pixbuf
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtk-vnc";
+  version = "1.3.1";
+
+  outputs = [ "out" "bin" "man" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "USdjrE4FWdAVi2aCyl3Ro71jPwgvXkNJ1xWOa1+A8c4=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gobject-introspection
+    vala
+    gettext
+    perl # for pod2man
+    python3
+  ];
+
+  buildInputs = [
+    gnutls
+    cairo
+    gdk-pixbuf
+    zlib
+    glib
+    libgcrypt
+    cyrus_sasl
+    gtk3
+  ] ++ lib.optionals pulseaudioSupport [
+    libpulseaudio
+  ];
+
+  mesonFlags = lib.optionals (!pulseaudioSupport) [
+    "-Dpulseaudio=disabled"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with lib; {
+    description = "GTK VNC widget";
+    homepage = "https://wiki.gnome.org/Projects/gtk-vnc";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ raskin offline ];
+    platforms = platforms.unix;
+    mainProgram = "gvnccapture";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/hedgedoc-cli/default.nix b/nixpkgs/pkgs/tools/admin/hedgedoc-cli/default.nix
new file mode 100644
index 000000000000..0af64919e746
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/hedgedoc-cli/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, wget, jq, curl }:
+
+let
+  version = "1.0";
+in
+stdenv.mkDerivation {
+  pname = "hedgedoc-cli";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "hedgedoc";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "uz+lkRRUTRr8WR295esNEbgjlZ/Em7mBk6Nx0BWLfg4=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp $src/bin/codimd $out/bin
+    wrapProgram $out/bin/codimd \
+      --prefix PATH : ${lib.makeBinPath [ jq wget curl ]}
+    ln -s $out/bin/codimd $out/bin/hedgedoc-cli
+    runHook postInstall
+  '';
+
+  checkPhase = ''
+    hedgedoc-cli help
+  '';
+
+  meta = with lib; {
+    description = "Hedgedoc CLI";
+    homepage = "https://github.com/hedgedoc/cli";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ drupol ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/hop-cli/default.nix b/nixpkgs/pkgs/tools/admin/hop-cli/default.nix
new file mode 100644
index 000000000000..35afd0546fe1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/hop-cli/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, CoreServices
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hop-cli";
+  version = "0.2.61";
+
+  src = fetchFromGitHub {
+    owner = "hopinc";
+    repo = "cli";
+    rev = "v${version}";
+    hash = "sha256-omKLUe4JxF3SN4FHbO6YpIRt97f8wWY3oy7VHfvONRc=";
+  };
+
+  cargoHash = "sha256-yZKTVF810v27CnjwocEE2KYtrXggdEFPbKH5/4MMMhQ=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreServices Security SystemConfiguration
+  ];
+
+  OPENSSL_NO_VENDOR = 1;
+
+  checkFlags = [
+    # This test fails on read-only filesystems
+    "--skip=commands::volumes::utils::test::test_parse_target_from_path_like"
+  ];
+
+  meta = with lib; {
+    mainProgram = "hop";
+    description = "Interact with Hop in your terminal";
+    homepage = "https://github.com/hopinc/cli";
+    changelog = "https://github.com/hopinc/cli/releases/tag/v${version}";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ techknowlogick ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/iamy/default.nix b/nixpkgs/pkgs/tools/admin/iamy/default.nix
new file mode 100644
index 000000000000..63dc5fe371b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/iamy/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "iamy";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "99designs";
+    repo = "iamy";
+    rev = "v${version}";
+    sha256 = "sha256-oH3ijZaWXI0TdVQN9gzp5ypWzY7OqSxDh7VBoZo42Cs=";
+  };
+
+  vendorHash = "sha256-/IUYM3pTvcHXw8t5MW6JUEWdxegFuQC8zkiySp8VEgE=";
+
+  ldflags = [
+    "-X main.Version=v${version}" "-s" "-w"
+  ];
+
+  meta = with lib; {
+    description = "A cli tool for importing and exporting AWS IAM configuration to YAML files";
+    homepage = "https://github.com/99designs/iamy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ suvash ];
+    mainProgram = "iamy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/ibmcloud-cli/default.nix b/nixpkgs/pkgs/tools/admin/ibmcloud-cli/default.nix
new file mode 100644
index 000000000000..9df1c4da54c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ibmcloud-cli/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchurl
+, installShellFiles
+}:
+let
+  arch = with stdenv.hostPlatform; if isx86_64 then "amd64"
+         else if isAarch64 then "arm64"
+         else if isi686 then "386"
+         else if isPower64 && isLittleEndian then "ppc64le"
+         else if isS390x then "s390x"
+         else throw "Unsupported arch: ${stdenv.hostPlatform.system}";
+  platform = if stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64 then "macos_arm64"
+             else if stdenv.hostPlatform.isDarwin then "macos"
+             else "linux_${arch}";
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ibmcloud-cli";
+  version = "2.17.0";
+
+  src = fetchurl {
+    url = "https://download.clis.cloud.ibm.com/ibm-cloud-cli/${finalAttrs.version}/binaries/IBM_Cloud_CLI_${finalAttrs.version}_${platform}.tgz";
+    sha256 = {
+      "x86_64-darwin"     = "18f0dylgwwn9p1jmchqhq061s435n85qr2872i532whbrziwwjf3";
+      "aarch64-darwin"    = "1rid6rv601z4ayd3yi5srqbfn5bspypxarikvm563ygxawh1bxyi";
+      "x86_64-linux"      = "0ry8ix5id2zk04w9d9581g127f9jpj7bwg3x0pk3n9yfwn61g96d";
+      "aarch64-linux"     = "0s5jaqhyl234670q1mg89in2g5b9w3gzvnzl8qmlmgqkaxvzxj94";
+      "i686-linux"        = "0iw8y7iy9yx7y8v8b2wfl24f2rv9r20yj7l4sislxspfyvqv54p2";
+      "powerpc64le-linux" = "19ac0na163l9h7ygbf3jwwv7zf0wagqvn6kcdh871c690i86wg9z";
+      "s390x-linux"       = "1zvy28jpxijzgdbr9q4rfyx6mk295mqp4nk8z299nm9ryk4q81lv";
+    }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D ibmcloud $out/bin/ibmcloud
+    mkdir -p $out/share/ibmcloud
+    cp CF_CLI_Notices.txt CF_CLI_SLC_Notices.txt LICENSE NOTICE $out/share/ibmcloud
+    export HOME=$(mktemp -d)
+    installShellCompletion --cmd ibmcloud --bash <($out/bin/ibmcloud --generate-bash-completion)
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Command line client for IBM Cloud";
+    homepage = "https://cloud.ibm.com/docs/cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "i686-linux" "powerpc64le-linux" "s390x-linux" ] ++ platforms.darwin;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    mainProgram = "ibmcloud";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/admin/infra/default.nix b/nixpkgs/pkgs/tools/admin/infra/default.nix
new file mode 100644
index 000000000000..996bb80d98c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/infra/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "infra";
+  version = "0.21.0";
+
+  src = fetchFromGitHub {
+    owner = "infrahq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-uz4wimhOfeHSL949m+biIhjfDwwEGnTiJWaz/r3Rsko=";
+  };
+
+  vendorHash = "sha256-qbmaebQcD3cN+tbmzzJbry0AXz2LZFMoqbcBwGGrRo4=";
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Infra manages access to infrastructure such as Kubernetes";
+    homepage = "https://github.com/infrahq/infra";
+    changelog = "https://github.com/infrahq/infra/raw/v${version}/CHANGELOG.md";
+    license = licenses.elastic20;
+    maintainers = with maintainers; [ peterromfeldhk ];
+    mainProgram = "infra";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/iredis/default.nix b/nixpkgs/pkgs/tools/admin/iredis/default.nix
new file mode 100644
index 000000000000..2c57aa166978
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/iredis/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "iredis";
+  version = "1.14.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "laixintao";
+    repo = "iredis";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ojS2wtxggZPp73n9SjPRAzBlnF1ScK/pNVGvAYKmQ5Y=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace-fail 'wcwidth = "0.1.9"' 'wcwidth = "*"'
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pygments
+    click
+    configobj
+    mistune
+    packaging
+    pendulum
+    prompt-toolkit
+    redis
+    wcwidth
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+    pexpect
+  ];
+
+  pytestFlagsArray = [
+    # Fails on sandbox
+    "--ignore=tests/unittests/test_client.py"
+    "--deselect=tests/unittests/test_render_functions.py::test_render_unixtime_config_raw"
+    "--deselect=tests/unittests/test_render_functions.py::test_render_time"
+    # Only execute unittests, because cli tests require a running Redis
+    "tests/unittests/"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # Flaky test
+    "--deselect=tests/unittests/test_utils.py::test_timer"
+  ];
+
+  pythonImportsCheck = [ "iredis" ];
+
+  meta = with lib; {
+    description = "A Terminal Client for Redis with AutoCompletion and Syntax Highlighting";
+    changelog = "https://github.com/laixintao/iredis/raw/${src.rev}/CHANGELOG.md";
+    homepage = "https://iredis.io/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ marsam ];
+    mainProgram = "iredis";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/itamae/Gemfile b/nixpkgs/pkgs/tools/admin/itamae/Gemfile
new file mode 100644
index 000000000000..dad916112194
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/itamae/Gemfile
@@ -0,0 +1,9 @@
+source 'https://rubygems.org'
+gem 'itamae'
+
+# docker backend:
+gem 'docker-api'
+
+# ed25519 ssh key support:
+gem 'bcrypt_pbkdf'
+gem 'ed25519'
diff --git a/nixpkgs/pkgs/tools/admin/itamae/Gemfile.lock b/nixpkgs/pkgs/tools/admin/itamae/Gemfile.lock
new file mode 100644
index 000000000000..0d5e3792a658
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/itamae/Gemfile.lock
@@ -0,0 +1,42 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ansi (1.5.0)
+    bcrypt_pbkdf (1.1.0)
+    docker-api (2.2.0)
+      excon (>= 0.47.0)
+      multi_json
+    ed25519 (1.3.0)
+    excon (0.99.0)
+    hashie (5.0.0)
+    itamae (1.14.1)
+      ansi
+      hashie
+      schash (~> 0.1.0)
+      specinfra (>= 2.64.0, < 3.0.0)
+      thor (>= 1.0.0)
+    multi_json (1.15.0)
+    net-scp (4.0.0)
+      net-ssh (>= 2.6.5, < 8.0.0)
+    net-ssh (7.0.1)
+    net-telnet (0.1.1)
+    schash (0.1.2)
+    sfl (2.3)
+    specinfra (2.84.1)
+      net-scp
+      net-ssh (>= 2.7)
+      net-telnet (= 0.1.1)
+      sfl
+    thor (1.2.1)
+
+PLATFORMS
+  aarch64-linux
+
+DEPENDENCIES
+  bcrypt_pbkdf
+  docker-api
+  ed25519
+  itamae
+
+BUNDLED WITH
+   2.3.26
diff --git a/nixpkgs/pkgs/tools/admin/itamae/default.nix b/nixpkgs/pkgs/tools/admin/itamae/default.nix
new file mode 100644
index 000000000000..d84da4fd9741
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/itamae/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "itamae";
+  gemdir = ./.;
+  exes = [ "itamae" ];
+
+  passthru.updateScript = bundlerUpdateScript "itamae";
+
+  meta = with lib; {
+    description = "Simple and lightweight configuration management tool inspired by Chef";
+    homepage = "https://itamae.kitchen/";
+    license = with licenses; mit;
+    maintainers = with maintainers; [ refi64 ];
+    platforms = platforms.unix;
+    mainProgram = "itamae";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/itamae/gemset.nix b/nixpkgs/pkgs/tools/admin/itamae/gemset.nix
new file mode 100644
index 000000000000..207a2aed7ab0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/itamae/gemset.nix
@@ -0,0 +1,156 @@
+{
+  ansi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14ims9zfal4gs2wpx2m5rd8zsrl2k794d359shkrsgg3fhr2a22l";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  bcrypt_pbkdf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ndamfaivnkhc6hy0yqyk2gkwr6f3bz6216lh74hsiiyk3axz445";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  docker-api = {
+    dependencies = ["excon" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g7dbniz15b3l2sy6xh0j0998dr5jypf3xg3bsygp0108vv7waxy";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  ed25519 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zb2dr2ihb1qiknn5iaj1ha1w9p7lj9yq5waasndlfadz225ajji";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j826kfvzn7nc5pv950n270r0sx1702k988ad11cdlav3dcxxw09";
+      type = "gem";
+    };
+    version = "0.99.0";
+  };
+  hashie = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nh3arcrbz1rc1cr59qm53sdhqm137b258y8rcb4cvd3y98lwv4x";
+      type = "gem";
+    };
+    version = "5.0.0";
+  };
+  itamae = {
+    dependencies = ["ansi" "hashie" "schash" "specinfra" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zhx0cknipkjqp33qdxjlv7lcybgmh1jv9npp55vxaazd8cyfylx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1si2nq9l6jy5n2zw1q59a5gaji7v9vhy8qx08h4fg368906ysbdk";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qp3i8bi7ji1np0530bp2p9zrrn6galvmbsivxwpkjdpjdyn19sr";
+      type = "gem";
+    };
+    version = "7.0.1";
+  };
+  net-telnet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qxznpwmc3hs51b76wqx2w29r158gzzh8719kv2gpi56844c8fx";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  schash = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ia62xi56pkxy4y6wg3v5kwabjncyh3g78nqll4fs34zhdf7v8ad";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  sfl = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qm4hvhq9pszi9zs1cl9qgwx1n4wxq0af0hq9sbf6qihqd8rwwwr";
+      type = "gem";
+    };
+    version = "2.3";
+  };
+  specinfra = {
+    dependencies = ["net-scp" "net-ssh" "net-telnet" "sfl"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qzhb7k66gi375ymnkwiy4alr7jw2c9ih7hv1lv5j5nda10hfb1p";
+      type = "gem";
+    };
+    version = "2.84.1";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/kics/default.nix b/nixpkgs/pkgs/tools/admin/kics/default.nix
new file mode 100644
index 000000000000..3b4a8b6859d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/kics/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, kics
+}:
+
+buildGoModule rec {
+  pname = "kics";
+  version = "1.7.12";
+
+  src = fetchFromGitHub {
+    owner = "Checkmarx";
+    repo = "kics";
+    rev = "v${version}";
+    hash = "sha256-Yf4IvhXwhLD+Cae9bp6iCzlmnw9XQ7G2yOLqRTcK7ac=";
+  };
+
+  vendorHash = "sha256-psyFivwS9d6+7S+1T7vonhofxHc0y2btXgc5HSu94Dg=";
+
+  subPackages = [ "cmd/console" ];
+
+  postInstall = ''
+    mv $out/bin/console $out/bin/kics
+  '';
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/Checkmarx/kics/internal/constant.SCMCommits=${version}"
+    "-X github.com/Checkmarx/kics/internal/constants.Version=${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = kics;
+    command = "kics version";
+  };
+
+  meta = with lib; {
+    description = ''
+      Find security vulnerabilities, compliance issues, and infrastructure misconfigurations early in the development
+      cycle of your infrastructure-as-code with KICS by Checkmarx.
+    '';
+    homepage = "https://github.com/Checkmarx/kics";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ patryk4815 ];
+    mainProgram = "kics";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/lego/default.nix b/nixpkgs/pkgs/tools/admin/lego/default.nix
new file mode 100644
index 000000000000..c79b0e0d243a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/lego/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, buildGoModule, nixosTests }:
+
+buildGoModule rec {
+  pname = "lego";
+  version = "4.14.2";
+
+  src = fetchFromGitHub {
+    owner = "go-acme";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-o0opYPJk8QURDSPuxEoITyhu3PNvuvcT9ZsnWPJmoAY=";
+  };
+
+  vendorHash = "sha256-RW2ybMX55bds3uo90dGzBJPsmv9iIqllt5Ap2WF8PnQ=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/lego" ];
+
+  ldflags = [
+    "-X main.version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Let's Encrypt client and ACME library written in Go";
+    license = licenses.mit;
+    homepage = "https://go-acme.github.io/lego/";
+    maintainers = teams.acme.members;
+    mainProgram = "lego";
+  };
+
+  passthru.tests.lego = nixosTests.acme;
+}
diff --git a/nixpkgs/pkgs/tools/admin/lxd/default.nix b/nixpkgs/pkgs/tools/admin/lxd/default.nix
new file mode 100644
index 000000000000..65dd2c70daa2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/lxd/default.nix
@@ -0,0 +1,94 @@
+{ lib
+, hwdata
+, pkg-config
+, lxc
+, buildGoModule
+, fetchurl
+, acl
+, libcap
+, dqlite
+, raft-canonical
+, sqlite
+, udev
+, installShellFiles
+, nixosTests
+, gitUpdater
+, callPackage
+}:
+
+buildGoModule rec {
+  pname = "lxd-unwrapped";
+  version = "5.20";
+
+  src = fetchurl {
+    url = "https://github.com/canonical/lxd/releases/download/lxd-${version}/lxd-${version}.tar.gz";
+    hash = "sha256-L5WLdX9M3mTQ81eNoL2p7lllo6cOwJVu3fgofRKQFn8=";
+  };
+
+  vendorHash = null;
+
+  postPatch = ''
+    substituteInPlace shared/usbid/load.go \
+      --replace "/usr/share/misc/usb.ids" "${hwdata}/share/hwdata/usb.ids"
+  '';
+
+  excludedPackages = [ "test" "lxd/db/generate" "lxd-agent" "lxd-migrate" ];
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+  buildInputs = [
+    lxc
+    acl
+    libcap
+    dqlite.dev
+    raft-canonical.dev
+    sqlite
+    udev.dev
+  ];
+
+  ldflags = [ "-s" "-w" ];
+  tags = [ "libsqlite3" ];
+
+  preBuild = ''
+    # required for go-dqlite. See: https://github.com/canonical/lxd/pull/8939
+    export CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"
+  '';
+
+  # build static binaries: https://github.com/canonical/lxd/blob/6fd175c45e65cd475d198db69d6528e489733e19/Makefile#L43-L51
+  postBuild = ''
+    make lxd-agent lxd-migrate
+  '';
+
+  preCheck =
+    let skippedTests = [
+      "TestValidateConfig"
+      "TestConvertNetworkConfig"
+      "TestConvertStorageConfig"
+      "TestSnapshotCommon"
+      "TestContainerTestSuite"
+    ]; in
+    ''
+      # Disable tests requiring local operations
+      buildFlagsArray+=("-run" "[^(${builtins.concatStringsSep "|" skippedTests})]")
+    '';
+
+  postInstall = ''
+    installShellCompletion --bash --name lxd ./scripts/bash/lxd-client
+  '';
+
+  passthru.tests.lxd = nixosTests.lxd;
+  passthru.tests.lxd-to-incus = nixosTests.incus.lxd-to-incus;
+  passthru.ui = callPackage ./ui.nix { };
+  passthru.updateScript = gitUpdater {
+    url = "https://github.com/canonical/lxd.git";
+    rev-prefix = "lxd-";
+  };
+
+  meta = with lib; {
+    description = "Daemon based on liblxc offering a REST API to manage containers";
+    homepage = "https://ubuntu.com/lxd";
+    changelog = "https://github.com/canonical/lxd/releases/tag/lxd-${version}";
+    license = with licenses; [ asl20 agpl3 ];
+    maintainers = teams.lxc.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/lxd/ui.nix b/nixpkgs/pkgs/tools/admin/lxd/ui.nix
new file mode 100644
index 000000000000..afcb062630a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/lxd/ui.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchYarnDeps
+, nodejs
+, prefetch-yarn-deps
+, yarn
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lxd-ui";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "canonical";
+    repo = "lxd-ui";
+    rev = "refs/tags/${version}";
+    hash = "sha256-3Ts6lKyzpMDVATCKD1fFIGTskWzWpQUT9S8cPFnlEOs=";
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-0pyxwMGGqogEe1w3sail8NUDHtxLQZU9Wg8E6rQNy4o=";
+  };
+
+  nativeBuildInputs = [
+    nodejs
+    prefetch-yarn-deps
+    yarn
+  ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror "$offlineCache"
+    fixup-yarn-lock yarn.lock
+    yarn --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive install
+    patchShebangs node_modules
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn --offline build
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    cp -r build/ui/ $out
+
+    runHook postInstall
+  '';
+
+  passthru.tests.default = nixosTests.lxd.ui;
+
+  meta = {
+    description = "Web user interface for LXD";
+    homepage = "https://github.com/canonical/lxd-ui";
+    license = lib.licenses.gpl3;
+    maintainers = lib.teams.lxc.members;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/lxd/wrapper.nix b/nixpkgs/pkgs/tools/admin/lxd/wrapper.nix
new file mode 100644
index 000000000000..b197cd496b1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/lxd/wrapper.nix
@@ -0,0 +1,133 @@
+{ lib
+, lxd-unwrapped
+, linkFarm
+, makeWrapper
+, stdenv
+, symlinkJoin
+, writeShellScriptBin
+, acl
+, apparmor-parser
+, apparmor-profiles
+, attr
+, bash
+, btrfs-progs
+, cdrkit
+, criu
+, dnsmasq
+, e2fsprogs
+, getent
+, gnutar
+, gptfdisk
+, gzip
+, iproute2
+, iptables
+, kmod
+, lvm2
+, minio
+, nftables
+, OVMF
+, qemu_kvm
+, qemu-utils
+, rsync
+, spice-gtk
+, squashfsTools
+, thin-provisioning-tools
+, util-linux
+, virtiofsd
+, xz
+}:
+let
+  binPath = lib.makeBinPath [
+    acl
+    attr
+    bash
+    btrfs-progs
+    cdrkit
+    criu
+    dnsmasq
+    e2fsprogs
+    getent
+    gnutar
+    gptfdisk
+    gzip
+    iproute2
+    iptables
+    kmod
+    lvm2
+    minio
+    nftables
+    qemu_kvm
+    qemu-utils
+    rsync
+    squashfsTools
+    thin-provisioning-tools
+    util-linux
+    virtiofsd
+    xz
+
+    (writeShellScriptBin "apparmor_parser" ''
+      exec '${apparmor-parser}/bin/apparmor_parser' -I '${apparmor-profiles}/etc/apparmor.d' "$@"
+    '')
+  ];
+
+  clientBinPath = [
+    spice-gtk
+  ];
+
+  ovmf-2mb = OVMF.override {
+    secureBoot = true;
+    csmSupport = false;
+    fdSize2MB = true;
+  };
+
+  ovmf-4mb = OVMF.override {
+    secureBoot = true;
+    csmSupport = false;
+    fdSize4MB = true;
+  };
+
+  ovmf-4mb-csm = OVMF.override {
+    secureBoot = true;
+    csmSupport = false;
+    fdSize2MB = false;
+    fdSize4MB = true;
+  };
+
+  ovmf-prefix = if stdenv.hostPlatform.isAarch64 then "AAVMF" else "OVMF";
+
+  # mimic ovmf from https://github.com/canonical/lxd-pkg-snap/blob/3abebe1dfeb20f9b7729556960c7e9fe6ad5e17c/snapcraft.yaml#L378
+  # also found in /snap/lxd/current/share/qemu/ on a snap install
+  ovmf = linkFarm "lxd-ovmf" [
+    { name = "OVMF_CODE.2MB.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_CODE.fd"; }
+    { name = "OVMF_CODE.4MB.CSM.fd"; path = "${ovmf-4mb-csm.fd}/FV/${ovmf-prefix}_CODE.fd"; }
+    { name = "OVMF_CODE.4MB.fd"; path = "${ovmf-4mb.fd}/FV/${ovmf-prefix}_CODE.fd"; }
+    { name = "OVMF_CODE.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_CODE.fd"; }
+
+    { name = "OVMF_VARS.2MB.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
+    { name = "OVMF_VARS.2MB.ms.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
+    { name = "OVMF_VARS.4MB.CSM.fd"; path = "${ovmf-4mb-csm.fd}/FV/${ovmf-prefix}_VARS.fd"; }
+    { name = "OVMF_VARS.4MB.fd"; path = "${ovmf-4mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
+    { name = "OVMF_VARS.4MB.ms.fd"; path = "${ovmf-4mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
+    { name = "OVMF_VARS.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
+    { name = "OVMF_VARS.ms.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
+  ];
+in
+symlinkJoin {
+  name = "lxd-${lxd-unwrapped.version}";
+
+  paths = [ lxd-unwrapped ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/lxd --prefix PATH : ${lib.escapeShellArg binPath}:${qemu_kvm}/libexec:$out/bin --set LXD_OVMF_PATH ${ovmf}
+
+    wrapProgram $out/bin/lxc --prefix PATH : ${lib.makeBinPath clientBinPath}
+  '';
+
+  passthru = {
+    inherit (lxd-unwrapped) tests ui;
+  };
+
+  inherit (lxd-unwrapped) meta pname version;
+}
diff --git a/nixpkgs/pkgs/tools/admin/manta/default.nix b/nixpkgs/pkgs/tools/admin/manta/default.nix
new file mode 100644
index 000000000000..ef0d92150360
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/manta/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, installShellFiles
+, testers
+, node-manta
+}:
+
+buildNpmPackage rec {
+  pname = "manta";
+  version = "5.4.2";
+
+  src = fetchFromGitHub {
+    owner = "TritonDataCenter";
+    repo = "node-manta";
+    rev = "v${version}";
+    hash = "sha256-Uj3fNzeERiO++sW2uyAbtfN/1Ed6uRVBBvCecncq/QY=";
+  };
+
+  npmDepsHash = "sha256-Xk/K90K+X73ZTV6u2GJij8815GdBn6igXmpWLaCfKF4=";
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    ln -s ./lib/node_modules/manta/bin $out/bin
+  '';
+
+  postFixup = ''
+    # create completions, following upstream procedure https://github.com/joyent/node-manta/blob/v5.4.1/Makefile#L85-L91
+    cmds=$(find ./bin/ -type f -printf "%f\n")
+
+    node $out/lib/node_modules/manta/lib/create_client.js
+
+    for cmd in $cmds; do
+      installShellCompletion --cmd $cmd --bash <($out/bin/$cmd --completion)
+
+      # Strip timestamp from generated bash completion
+      sed -i '/Bash completion generated.*/d' $out/share/bash-completion/completions/$cmd.bash
+    done
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = node-manta;
+    };
+  };
+
+  meta = with lib; {
+    description = "Manta Object-Storage Client CLIs and Node.js SDK";
+    homepage = "https://github.com/TritonDataCenter/node-manta";
+    changelog = "https://github.com/TritonDataCenter/node-manta/blob/v${version}/CHANGES.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ teutat3s ];
+    mainProgram = "mls";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/meraki-cli/default.nix b/nixpkgs/pkgs/tools/admin/meraki-cli/default.nix
new file mode 100644
index 000000000000..c446023770bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/meraki-cli/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, argcomplete
+, jinja2
+, meraki
+, rich
+, fetchPypi
+, buildPythonApplication
+, pytestCheckHook
+, requests-mock
+}:
+
+buildPythonApplication rec {
+  pname = "meraki-cli";
+  version = "1.5.0";
+  format = "setuptools";
+
+  src = fetchPypi {
+    pname = "meraki_cli";
+    inherit version;
+    hash = "sha256-YOyeovqRqt6ZMXgLnIxRvPkcW259K8NIBGdb3PwjkMg=";
+  };
+
+  disabledTests = [
+    # requires files not in PyPI tarball
+    "TestDocVersions"
+    "TestHelps"
+    # requires running "pip install"
+    "TestUpgrade"
+  ];
+
+  propagatedBuildInputs = [
+    argcomplete
+    jinja2
+    meraki
+    rich
+  ];
+
+  nativeBuildInputs = [
+    pytestCheckHook
+  ];
+
+  nativeCheckInputs = [
+    requests-mock
+  ];
+
+  pythonImportsCheck = [
+    "meraki_cli"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/PackeTsar/meraki-cli";
+    description = "A simple CLI tool to automate and control your Cisco Meraki Dashboard";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dylanmtaylor ];
+    platforms = platforms.unix;
+    mainProgram = "meraki";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/meshcentral/default.nix b/nixpkgs/pkgs/tools/admin/meshcentral/default.nix
new file mode 100644
index 000000000000..98993d7e6b77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/meshcentral/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, fetchzip
+, fetchYarnDeps
+, yarn2nix-moretea
+, nodejs_18
+, dos2unix
+}:
+
+yarn2nix-moretea.mkYarnPackage {
+  version = "1.1.20";
+
+  src = fetchzip {
+    url = "https://registry.npmjs.org/meshcentral/-/meshcentral-1.1.20.tgz";
+    sha256 = "1iykx1lrsd09z3jbykspjgibsbpcgrw5b60dmpzcc1i4fr0zpnz9";
+  };
+
+  patches = [ ./fix-js-include-paths.patch ];
+
+  packageJSON = ./package.json;
+  yarnLock = ./yarn.lock;
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = ./yarn.lock;
+    hash = "sha256-zLbD0UhCRQNTka1WUjDuZLseS1PMURQSPFEa0SvwS7E=";
+  };
+
+  # Tarball has CRLF line endings. This makes patching difficult, so let's convert them.
+  nativeBuildInputs = [ dos2unix ];
+  prePatch = ''
+    find . -name '*.js' -exec dos2unix {} +
+    ln -snf meshcentral.js bin/meshcentral
+  '';
+
+  preFixup = ''
+    mkdir -p $out/bin
+    chmod a+x $out/libexec/meshcentral/deps/meshcentral/meshcentral.js
+    sed -i '1i#!${nodejs_18}/bin/node' $out/libexec/meshcentral/deps/meshcentral/meshcentral.js
+    ln -s $out/libexec/meshcentral/deps/meshcentral/meshcentral.js $out/bin/meshcentral
+  '';
+
+  publishBinsFor = [ ];
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Computer management web app";
+    homepage = "https://meshcentral.com/";
+    maintainers = with maintainers; [ ma27 ];
+    license = licenses.asl20;
+    mainProgram = "meshcentral";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/meshcentral/fix-js-include-paths.patch b/nixpkgs/pkgs/tools/admin/meshcentral/fix-js-include-paths.patch
new file mode 100644
index 000000000000..3fdbc033c9da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/meshcentral/fix-js-include-paths.patch
@@ -0,0 +1,31 @@
+diff --git a/pkcs7-modified.js b/pkcs7-modified.js
+index 661904a6..932a41ad 100644
+--- a/pkcs7-modified.js
++++ b/pkcs7-modified.js
+@@ -31,16 +31,16 @@ try {
+ } catch (ex) { }
+ 
+ if (forge == null) {
+-    forge = require('./node_modules/node-forge/lib/forge');
+-    require('./node_modules/node-forge/lib/aes');
+-    require('./node_modules/node-forge/lib/asn1');
+-    require('./node_modules/node-forge/lib/des');
+-    require('./node_modules/node-forge/lib/oids');
+-    require('./node_modules/node-forge/lib/pem');
+-    require('./node_modules/node-forge/lib/pkcs7asn1');
+-    require('./node_modules/node-forge/lib/random');
+-    require('./node_modules/node-forge/lib/util');
+-    require('./node_modules/node-forge/lib/x509');
++    forge = require('node-forge/lib/forge');
++    require('node-forge/lib/aes');
++    require('node-forge/lib/asn1');
++    require('node-forge/lib/des');
++    require('node-forge/lib/oids');
++    require('node-forge/lib/pem');
++    require('node-forge/lib/pkcs7asn1');
++    require('node-forge/lib/random');
++    require('node-forge/lib/util');
++    require('node-forge/lib/x509');
+ }
+ 
+ // shortcut for ASN.1 API
diff --git a/nixpkgs/pkgs/tools/admin/meshcentral/package.json b/nixpkgs/pkgs/tools/admin/meshcentral/package.json
new file mode 100644
index 000000000000..c7e328c6289c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/meshcentral/package.json
@@ -0,0 +1,143 @@
+{
+  "name": "meshcentral",
+  "version": "1.1.20",
+  "keywords": [
+    "Remote Device Management",
+    "Remote Device Monitoring",
+    "Remote Desktop",
+    "Remote Terminal",
+    "Remote File Access",
+    "KVM",
+    "2FA",
+    "Two-Factor Authentication",
+    "Intel Active Management Technology",
+    "Intel AMT"
+  ],
+  "homepage": "https://meshcentral.com",
+  "description": "Web based remote computer management server",
+  "author": "Ylian Saint-Hilaire <ylianst@gmail.com>",
+  "main": "meshcentral.js",
+  "bin": {
+    "meshcentral": "bin/meshcentral"
+  },
+  "license": "Apache-2.0",
+  "files": [
+    "*.js",
+    "amt",
+    "bin",
+    "rdp",
+    "views",
+    "emails",
+    "agents",
+    "public",
+    "translate",
+    "readme.txt",
+    "license.txt",
+    "sample-config.json",
+    "sample-config-advanced.json"
+  ],
+  "dependencies": {
+    "archiver": "5.3.2",
+    "body-parser": "1.20.2",
+    "cbor": "5.2.0",
+    "compression": "1.7.4",
+    "cookie-session": "2.0.0",
+    "express": "4.18.2",
+    "express-handlebars": "5.3.5",
+    "express-ws": "4.0.0",
+    "ipcheck": "0.1.0",
+    "minimist": "1.2.8",
+    "multiparty": "4.2.3",
+    "@yetzt/nedb": "1.8.0",
+    "node-forge": "1.3.1",
+    "ua-parser-js": "1.0.37",
+    "ws": "8.14.2",
+    "yauzl": "2.10.0"
+  },
+  "engines": {
+    "node": ">=11.0.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/Ylianst/MeshCentral.git"
+  },
+  "readme": "readme.md",
+  "optionalDependencies": {
+    "passport": "*",
+    "passport-twitter": "*",
+    "passport-google-oauth20": "*",
+    "passport-github2": "*",
+    "passport-reddit": "*",
+    "passport-azure-oauth2": "*",
+    "jwt-simple": "*",
+    "@mstrhakr/passport-openidconnect": "*",
+    "openid-client": "*",
+    "connect-flash": "*",
+    "passport-saml": "*",
+    "archiver": "5.3.2",
+    "body-parser": "1.20.2",
+    "cbor": "5.2.0",
+    "compression": "1.7.4",
+    "cookie-session": "2.0.0",
+    "express": "4.18.2",
+    "express-handlebars": "5.3.5",
+    "express-ws": "4.0.0",
+    "ipcheck": "0.1.0",
+    "minimist": "1.2.8",
+    "multiparty": "4.2.3",
+    "@yetzt/nedb": "*",
+    "node-forge": "1.3.1",
+    "ua-parser-js": "1.0.37",
+    "ws": "8.14.2",
+    "yauzl": "2.10.0",
+    "node-windows": "0.1.14",
+    "loadavg-windows": "1.1.1",
+    "node-sspi": "0.2.10",
+    "ldapauth-fork": "5.0.5",
+    "ssh2": "1.15.0",
+    "svg-captcha": "1.4.0",
+    "image-size": "1.0.2",
+    "acme-client": "4.2.5",
+    "aedes": "0.39.0",
+    "mysql2": "3.6.2",
+    "@mysql/xdevapi": "8.0.33",
+    "mongodb": "4.13.0",
+    "saslprep": "1.0.3",
+    "pg": "8.7.1",
+    "pgtools": "0.3.2",
+    "mariadb": "3.2.2",
+    "acebase": "1.29.5",
+    "sqlite3": "5.1.6",
+    "node-vault": "0.10.2",
+    "semver": "7.5.4",
+    "https-proxy-agent": "7.0.2",
+    "mongojs": "3.1.0",
+    "nodemailer": "6.9.8",
+    "@sendgrid/mail": "*",
+    "jsdom": "22.1.0",
+    "esprima": "4.0.1",
+    "minify-js": "0.0.4",
+    "html-minifier": "4.0.0",
+    "@crowdsec/express-bouncer": "0.1.0",
+    "archiver-zip-encrypted": "1.0.11",
+    "googleapis": "128.0.0",
+    "webdav": "4.11.3",
+    "wildleek": "2.0.0",
+    "yubikeyotp": "0.2.0",
+    "otplib": "10.2.3",
+    "twilio": "4.19.0",
+    "plivo": "4.58.0",
+    "telnyx": "1.25.5",
+    "telegram": "2.19.8",
+    "input": "1.0.1",
+    "discord.js": "14.6.0",
+    "@xmpp/client": "0.13.1",
+    "node-pushover": "1.0.0",
+    "zulip": "0.1.0",
+    "web-push": "3.6.6",
+    "node-xcs": "0.1.7",
+    "modern-syslog": "1.2.0",
+    "syslog": "0.1.1-1",
+    "heapdump": "0.3.15"
+  }
+}
diff --git a/nixpkgs/pkgs/tools/admin/meshcentral/update.sh b/nixpkgs/pkgs/tools/admin/meshcentral/update.sh
new file mode 100755
index 000000000000..950fa617ce81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/meshcentral/update.sh
@@ -0,0 +1,54 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p nodejs yarn prefetch-yarn-deps jq rsync common-updater-scripts moreutils
+
+set -exuo pipefail
+
+expr_dir=$(cd "$(dirname "$0")"; pwd)
+tmp=$(mktemp -dt update-meshcentral.XXXXXX)
+
+npm show --json meshcentral > "$tmp/npm.json"
+version=$(<"$tmp/npm.json" jq -r .version)
+tarball=$(<"$tmp/npm.json" jq -r .dist.tarball)
+
+prefetch=$(nix-prefetch-url --unpack --print-path "$tarball" | tr '\n' ' ')
+read -r hash storePath <<<"$prefetch"
+cd "$tmp"
+rsync -r --chmod=u=rwX "$storePath/" package/
+cd package
+
+# Very crude way of discovering optional dependencies. These are
+# fetched at runtime by stock upstream, but we don't allow that kind
+# of thing in nix :)
+awk <meshcentral.js "
+  BEGIN { RS=\"[\n;]\" }
+  match(\$0, /(modules|passport) = (\[.*\])$/, a) { print a[2] }
+  match(\$0, /(modules|passport).push\(('[^']+')\)/, a) { print a[2] }
+" |
+    tr \' \" |
+    jq --slurp '[if type == "array" then .[] else . end] | flatten' |
+    # And an equally crude way of adding them to package.json. We
+    # can't use yarn add here, because that will blow up on
+    # dependencies which don't support the current platform. Even with
+    # --optional.
+    jq --slurpfile package package.json \
+       '(. | map(. | capture("(?<name>@?[^@]+)(@(?<version>.+))?") | { key: .name, value: (.version // "*")}) | from_entries) as $optionalDependencies | $package | .[] | .optionalDependencies |= . + $optionalDependencies' |
+    sponge package.json
+
+# Fetch all the optional dependencies, so we have them available in
+# yarn.lock/yarn.nix
+yarn install --ignore-scripts
+
+cp package.json "$expr_dir"
+cp yarn.lock "$expr_dir/yarn.lock"
+
+cd "$expr_dir/../../../.."
+update-source-version meshcentral "$version" "$hash" "$tarball"
+
+new_yarn_hash=$(prefetch-yarn-deps "$expr_dir/yarn.lock")
+new_yarn_hash=$(nix-hash --type sha256 --to-sri "$new_yarn_hash")
+old_yarn_hash=$(nix-instantiate --eval -A meshcentral.offlineCache.outputHash | tr -d '"')
+sed -i "$expr_dir/default.nix" -e "s|\"$old_yarn_hash\"|\"$new_yarn_hash\"|"
+
+# Only clean up if everything worked
+cd /
+rm -rf "$tmp"
diff --git a/nixpkgs/pkgs/tools/admin/meshcentral/yarn.lock b/nixpkgs/pkgs/tools/admin/meshcentral/yarn.lock
new file mode 100644
index 000000000000..b64e2e5b20f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/meshcentral/yarn.lock
@@ -0,0 +1,11042 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@ampproject/remapping@^2.2.0":
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
+  integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@aws-crypto/crc32@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa"
+  integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==
+  dependencies:
+    "@aws-crypto/util" "^3.0.0"
+    "@aws-sdk/types" "^3.222.0"
+    tslib "^1.11.1"
+
+"@aws-crypto/ie11-detection@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688"
+  integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==
+  dependencies:
+    tslib "^1.11.1"
+
+"@aws-crypto/sha256-browser@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766"
+  integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==
+  dependencies:
+    "@aws-crypto/ie11-detection" "^3.0.0"
+    "@aws-crypto/sha256-js" "^3.0.0"
+    "@aws-crypto/supports-web-crypto" "^3.0.0"
+    "@aws-crypto/util" "^3.0.0"
+    "@aws-sdk/types" "^3.222.0"
+    "@aws-sdk/util-locate-window" "^3.0.0"
+    "@aws-sdk/util-utf8-browser" "^3.0.0"
+    tslib "^1.11.1"
+
+"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2"
+  integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==
+  dependencies:
+    "@aws-crypto/util" "^3.0.0"
+    "@aws-sdk/types" "^3.222.0"
+    tslib "^1.11.1"
+
+"@aws-crypto/supports-web-crypto@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2"
+  integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==
+  dependencies:
+    tslib "^1.11.1"
+
+"@aws-crypto/util@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0"
+  integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==
+  dependencies:
+    "@aws-sdk/types" "^3.222.0"
+    "@aws-sdk/util-utf8-browser" "^3.0.0"
+    tslib "^1.11.1"
+
+"@aws-sdk/client-cognito-identity@3.501.0":
+  version "3.501.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.501.0.tgz#232543d91b1d236cfeac7c0168c56eddff1aafd3"
+  integrity sha512-ynWW9VVT7CTMQBh8l7WFt2SNekg3667gwjQmeGN8+DDMDqt2Z+L52717S0AN1pQDUMbh/DuKKPk+Sr30HBK3vA==
+  dependencies:
+    "@aws-crypto/sha256-browser" "3.0.0"
+    "@aws-crypto/sha256-js" "3.0.0"
+    "@aws-sdk/client-sts" "3.501.0"
+    "@aws-sdk/core" "3.496.0"
+    "@aws-sdk/credential-provider-node" "3.501.0"
+    "@aws-sdk/middleware-host-header" "3.496.0"
+    "@aws-sdk/middleware-logger" "3.496.0"
+    "@aws-sdk/middleware-recursion-detection" "3.496.0"
+    "@aws-sdk/middleware-signing" "3.496.0"
+    "@aws-sdk/middleware-user-agent" "3.496.0"
+    "@aws-sdk/region-config-resolver" "3.496.0"
+    "@aws-sdk/types" "3.496.0"
+    "@aws-sdk/util-endpoints" "3.496.0"
+    "@aws-sdk/util-user-agent-browser" "3.496.0"
+    "@aws-sdk/util-user-agent-node" "3.496.0"
+    "@smithy/config-resolver" "^2.1.1"
+    "@smithy/core" "^1.3.1"
+    "@smithy/fetch-http-handler" "^2.4.1"
+    "@smithy/hash-node" "^2.1.1"
+    "@smithy/invalid-dependency" "^2.1.1"
+    "@smithy/middleware-content-length" "^2.1.1"
+    "@smithy/middleware-endpoint" "^2.4.1"
+    "@smithy/middleware-retry" "^2.1.1"
+    "@smithy/middleware-serde" "^2.1.1"
+    "@smithy/middleware-stack" "^2.1.1"
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/node-http-handler" "^2.3.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/smithy-client" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/url-parser" "^2.1.1"
+    "@smithy/util-base64" "^2.1.1"
+    "@smithy/util-body-length-browser" "^2.1.1"
+    "@smithy/util-body-length-node" "^2.2.1"
+    "@smithy/util-defaults-mode-browser" "^2.1.1"
+    "@smithy/util-defaults-mode-node" "^2.1.1"
+    "@smithy/util-endpoints" "^1.1.1"
+    "@smithy/util-retry" "^2.1.1"
+    "@smithy/util-utf8" "^2.1.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/client-sso@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.496.0.tgz#765cbfb3afcbe7bc8f2430e40afd4d542a0d58fb"
+  integrity sha512-fuaMuxKg7CMUsP9l3kxYWCOxFsBjdA0xj5nlikaDm1661/gB4KkAiGqRY8LsQkpNXvXU8Nj+f7oCFADFyGYzyw==
+  dependencies:
+    "@aws-crypto/sha256-browser" "3.0.0"
+    "@aws-crypto/sha256-js" "3.0.0"
+    "@aws-sdk/core" "3.496.0"
+    "@aws-sdk/middleware-host-header" "3.496.0"
+    "@aws-sdk/middleware-logger" "3.496.0"
+    "@aws-sdk/middleware-recursion-detection" "3.496.0"
+    "@aws-sdk/middleware-user-agent" "3.496.0"
+    "@aws-sdk/region-config-resolver" "3.496.0"
+    "@aws-sdk/types" "3.496.0"
+    "@aws-sdk/util-endpoints" "3.496.0"
+    "@aws-sdk/util-user-agent-browser" "3.496.0"
+    "@aws-sdk/util-user-agent-node" "3.496.0"
+    "@smithy/config-resolver" "^2.1.1"
+    "@smithy/core" "^1.3.1"
+    "@smithy/fetch-http-handler" "^2.4.1"
+    "@smithy/hash-node" "^2.1.1"
+    "@smithy/invalid-dependency" "^2.1.1"
+    "@smithy/middleware-content-length" "^2.1.1"
+    "@smithy/middleware-endpoint" "^2.4.1"
+    "@smithy/middleware-retry" "^2.1.1"
+    "@smithy/middleware-serde" "^2.1.1"
+    "@smithy/middleware-stack" "^2.1.1"
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/node-http-handler" "^2.3.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/smithy-client" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/url-parser" "^2.1.1"
+    "@smithy/util-base64" "^2.1.1"
+    "@smithy/util-body-length-browser" "^2.1.1"
+    "@smithy/util-body-length-node" "^2.2.1"
+    "@smithy/util-defaults-mode-browser" "^2.1.1"
+    "@smithy/util-defaults-mode-node" "^2.1.1"
+    "@smithy/util-endpoints" "^1.1.1"
+    "@smithy/util-retry" "^2.1.1"
+    "@smithy/util-utf8" "^2.1.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/client-sts@3.501.0":
+  version "3.501.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.501.0.tgz#f3ab15d11517f28f1fdd3bd2b0c4dcf15a88b5aa"
+  integrity sha512-Uwc/xuxsA46dZS5s+4U703LBNDrGpWF7RB4XYEEMD21BLfGuqntxLLQux8xxKt3Pcur0CsXNja5jXt3uLnE5MA==
+  dependencies:
+    "@aws-crypto/sha256-browser" "3.0.0"
+    "@aws-crypto/sha256-js" "3.0.0"
+    "@aws-sdk/core" "3.496.0"
+    "@aws-sdk/credential-provider-node" "3.501.0"
+    "@aws-sdk/middleware-host-header" "3.496.0"
+    "@aws-sdk/middleware-logger" "3.496.0"
+    "@aws-sdk/middleware-recursion-detection" "3.496.0"
+    "@aws-sdk/middleware-user-agent" "3.496.0"
+    "@aws-sdk/region-config-resolver" "3.496.0"
+    "@aws-sdk/types" "3.496.0"
+    "@aws-sdk/util-endpoints" "3.496.0"
+    "@aws-sdk/util-user-agent-browser" "3.496.0"
+    "@aws-sdk/util-user-agent-node" "3.496.0"
+    "@smithy/config-resolver" "^2.1.1"
+    "@smithy/core" "^1.3.1"
+    "@smithy/fetch-http-handler" "^2.4.1"
+    "@smithy/hash-node" "^2.1.1"
+    "@smithy/invalid-dependency" "^2.1.1"
+    "@smithy/middleware-content-length" "^2.1.1"
+    "@smithy/middleware-endpoint" "^2.4.1"
+    "@smithy/middleware-retry" "^2.1.1"
+    "@smithy/middleware-serde" "^2.1.1"
+    "@smithy/middleware-stack" "^2.1.1"
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/node-http-handler" "^2.3.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/smithy-client" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/url-parser" "^2.1.1"
+    "@smithy/util-base64" "^2.1.1"
+    "@smithy/util-body-length-browser" "^2.1.1"
+    "@smithy/util-body-length-node" "^2.2.1"
+    "@smithy/util-defaults-mode-browser" "^2.1.1"
+    "@smithy/util-defaults-mode-node" "^2.1.1"
+    "@smithy/util-endpoints" "^1.1.1"
+    "@smithy/util-middleware" "^2.1.1"
+    "@smithy/util-retry" "^2.1.1"
+    "@smithy/util-utf8" "^2.1.1"
+    fast-xml-parser "4.2.5"
+    tslib "^2.5.0"
+
+"@aws-sdk/core@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.496.0.tgz#ec1394753b6b2f6e38aea593e30b2db5c7390969"
+  integrity sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A==
+  dependencies:
+    "@smithy/core" "^1.3.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/signature-v4" "^2.1.1"
+    "@smithy/smithy-client" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-cognito-identity@3.501.0":
+  version "3.501.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.501.0.tgz#9df440eea01125130226fdd1619f5b728f4db9c0"
+  integrity sha512-U9fjzliKzMiPx/EWLNLCEoF5wWhVtlluTEc4/WhNtSryV2PyihqIAK8nK4+MFaXB4xOrlRnpYMd7oqm03wMGyw==
+  dependencies:
+    "@aws-sdk/client-cognito-identity" "3.501.0"
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-env@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.496.0.tgz#5055bd2e3a169e5c10b37c40e0f356046947e707"
+  integrity sha512-lukQMJ8SWWP5RqkRNOHi/H+WMhRvSWa3Fc5Jf/VP6xHiPLfF1XafcvthtV91e0VwPCiseI+HqChrcGq8pvnxHw==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-http@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.496.0.tgz#7ff281bc0c80a041c69f0062e82b6def2e2a7de5"
+  integrity sha512-iphFlFX0qDFsE24XmFlcKmsR4uyNaqQrK+Y18mwSZMs1yWtL4Sck0rcTXU/cU2W3/xisjh7xFXK5L5aowjMZOg==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/fetch-http-handler" "^2.4.1"
+    "@smithy/node-http-handler" "^2.3.1"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/smithy-client" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-stream" "^2.1.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-ini@3.501.0":
+  version "3.501.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.501.0.tgz#66f56d56858267460614260b6bfd70cd18ba868b"
+  integrity sha512-6UXnwLtYIr298ljveumCVXsH+x7csGscK5ylY+veRFy514NqyloRdJt8JY26hhh5SF9MYnkW+JyWSJ2Ls3tOjQ==
+  dependencies:
+    "@aws-sdk/credential-provider-env" "3.496.0"
+    "@aws-sdk/credential-provider-process" "3.496.0"
+    "@aws-sdk/credential-provider-sso" "3.501.0"
+    "@aws-sdk/credential-provider-web-identity" "3.496.0"
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/credential-provider-imds" "^2.2.1"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/shared-ini-file-loader" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-node@3.501.0":
+  version "3.501.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.501.0.tgz#6cb96dc5c1bfaf8dcb580063beeed9ef9db33961"
+  integrity sha512-NM62D8gYrQ1nyLYwW4k48B2/lMHDzHDcQccS1wJakr6bg5sdtG06CumwlVcY+LAa0o1xRnhHmh/yiwj/nN4avw==
+  dependencies:
+    "@aws-sdk/credential-provider-env" "3.496.0"
+    "@aws-sdk/credential-provider-ini" "3.501.0"
+    "@aws-sdk/credential-provider-process" "3.496.0"
+    "@aws-sdk/credential-provider-sso" "3.501.0"
+    "@aws-sdk/credential-provider-web-identity" "3.496.0"
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/credential-provider-imds" "^2.2.1"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/shared-ini-file-loader" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-process@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.496.0.tgz#1d623bed61229767f389feab560e3a3117bf2d26"
+  integrity sha512-/YZscCTGOKVmGr916Th4XF8Sz6JDtZ/n2loHG9exok9iy/qIbACsTRNLP9zexPxhPoue/oZqecY5xbVljfY34A==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/shared-ini-file-loader" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-sso@3.501.0":
+  version "3.501.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.501.0.tgz#a96b859b59d3825f54158de8c692d69bd6edf5e6"
+  integrity sha512-y90dlvvZ55PwecODFdMx0NiNlJJfm7X6S61PKdLNCMRcu1YK+eWn0CmPHGHobBUQ4SEYhnFLcHSsf+VMim6BtQ==
+  dependencies:
+    "@aws-sdk/client-sso" "3.496.0"
+    "@aws-sdk/token-providers" "3.501.0"
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/shared-ini-file-loader" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-web-identity@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.496.0.tgz#7ad6d755445d1616a80dfa286a78c84dc1c3f14b"
+  integrity sha512-IbP+qLlvJSpNPj+zW6TtFuLRTK5Tf0hW+2pom4vFyi5YSH4pn8UOC136UdewX8vhXGS9BJQ5zBDMasIyl5VeGQ==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-providers@^3.186.0":
+  version "3.501.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.501.0.tgz#15321a2028e9ee36d5333da222386abb81e24553"
+  integrity sha512-nyfGzzYKcAny2kUyQjVDhSzfFTwkfZjGyJZ79WaLkNcCsVSsHBbptPRmRV2b4N0EoHTCfGqkbB02as4av/OQrw==
+  dependencies:
+    "@aws-sdk/client-cognito-identity" "3.501.0"
+    "@aws-sdk/client-sso" "3.496.0"
+    "@aws-sdk/client-sts" "3.501.0"
+    "@aws-sdk/credential-provider-cognito-identity" "3.501.0"
+    "@aws-sdk/credential-provider-env" "3.496.0"
+    "@aws-sdk/credential-provider-http" "3.496.0"
+    "@aws-sdk/credential-provider-ini" "3.501.0"
+    "@aws-sdk/credential-provider-node" "3.501.0"
+    "@aws-sdk/credential-provider-process" "3.496.0"
+    "@aws-sdk/credential-provider-sso" "3.501.0"
+    "@aws-sdk/credential-provider-web-identity" "3.496.0"
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/credential-provider-imds" "^2.2.1"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-host-header@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.496.0.tgz#e17de11d553548872566c72669c5ea2e7164722b"
+  integrity sha512-jUdPpSJeqCYXf6hSjfwsfHway7peIV8Vz51w/BN91bF4vB/bYwAC5o9/iJiK/EoByp5asxA8fg9wFOyGjzdbLg==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-logger@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.496.0.tgz#96f867ae50144eb6bae91a427e315a0f0eb783b0"
+  integrity sha512-EwMVSY6iBMeGbVnvwdaFl/ClMS/YWtxCAo+bcEtgk8ltRuo7qgbJem8Km/fvWC1vdWvIbe4ArdJ8iGzq62ffAw==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-recursion-detection@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.496.0.tgz#c14e1bbe609e4af3ec9037c2379e2b64d660e4dd"
+  integrity sha512-+IuOcFsfqg2WAnaEzH6KhVbicqCxtOq9w3DH2jwTpddRlCx2Kqf6wCzg8luhHRGyjBZdsbIS+OXwyMevoppawA==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-signing@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.496.0.tgz#265cb5a9d7825c111c53bb555e5cb2619f804dd1"
+  integrity sha512-Oq73Brs4IConvWnRlh8jM1V7LHoTw9SVQklu/QW2FPlNrB3B8fuTdWHHYIWv7ybw1bykXoCY99v865Mmq/Or/g==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/signature-v4" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-middleware" "^2.1.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-user-agent@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.496.0.tgz#82b49fd8613ae5a9ceafc9117c34271615d0f002"
+  integrity sha512-+iMtRxFk0GmFWNUF4ilxylOQd9PZdR4ZC9jkcPIh1PZlvKtpCyFywKlk5RRZKklSoJ/CttcqwhMvOXTNbWm/0w==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@aws-sdk/util-endpoints" "3.496.0"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/region-config-resolver@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.496.0.tgz#133c8a4a6d5e7672077ba124751f40b2d6efc3ed"
+  integrity sha512-URrNVOPHPgEDm6QFu6lDC2cUFs+Jx23mA3jEwCvoKlXiEY/ZoWjH8wlX3OMUlLrF1qoUTuD03jjrJzF6zoCgug==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-config-provider" "^2.2.1"
+    "@smithy/util-middleware" "^2.1.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/token-providers@3.501.0":
+  version "3.501.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.501.0.tgz#33fc8130ffecfa99b88a54ebaa74ff3225f79875"
+  integrity sha512-MvLPhNxlStmQqVm2crGLUqYWvK/AbMmI9j4FbEfJ15oG/I+730zjSJQEy2MvdiqbJRDPZ/tRCL89bUedOrmi0g==
+  dependencies:
+    "@aws-crypto/sha256-browser" "3.0.0"
+    "@aws-crypto/sha256-js" "3.0.0"
+    "@aws-sdk/middleware-host-header" "3.496.0"
+    "@aws-sdk/middleware-logger" "3.496.0"
+    "@aws-sdk/middleware-recursion-detection" "3.496.0"
+    "@aws-sdk/middleware-user-agent" "3.496.0"
+    "@aws-sdk/region-config-resolver" "3.496.0"
+    "@aws-sdk/types" "3.496.0"
+    "@aws-sdk/util-endpoints" "3.496.0"
+    "@aws-sdk/util-user-agent-browser" "3.496.0"
+    "@aws-sdk/util-user-agent-node" "3.496.0"
+    "@smithy/config-resolver" "^2.1.1"
+    "@smithy/fetch-http-handler" "^2.4.1"
+    "@smithy/hash-node" "^2.1.1"
+    "@smithy/invalid-dependency" "^2.1.1"
+    "@smithy/middleware-content-length" "^2.1.1"
+    "@smithy/middleware-endpoint" "^2.4.1"
+    "@smithy/middleware-retry" "^2.1.1"
+    "@smithy/middleware-serde" "^2.1.1"
+    "@smithy/middleware-stack" "^2.1.1"
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/node-http-handler" "^2.3.1"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/shared-ini-file-loader" "^2.3.1"
+    "@smithy/smithy-client" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/url-parser" "^2.1.1"
+    "@smithy/util-base64" "^2.1.1"
+    "@smithy/util-body-length-browser" "^2.1.1"
+    "@smithy/util-body-length-node" "^2.2.1"
+    "@smithy/util-defaults-mode-browser" "^2.1.1"
+    "@smithy/util-defaults-mode-node" "^2.1.1"
+    "@smithy/util-endpoints" "^1.1.1"
+    "@smithy/util-retry" "^2.1.1"
+    "@smithy/util-utf8" "^2.1.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/types@3.496.0", "@aws-sdk/types@^3.222.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.496.0.tgz#cdde44a94a57cf8f97cf05e4d0bdce2f56ce4eeb"
+  integrity sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/util-endpoints@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.496.0.tgz#5ce7d3efd7ab67db556e2c199e73826c44d22ecd"
+  integrity sha512-1QzOiWHi383ZwqSi/R2KgKCd7M+6DxkxI5acqLPm8mvDRDP2jRjrnVaC0g9/tlttWousGEemDUWStwrD2mVYSw==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-endpoints" "^1.1.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/util-locate-window@^3.0.0":
+  version "3.495.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz#9034fd8db77991b28ed20e067acdd53e8b8f824b"
+  integrity sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==
+  dependencies:
+    tslib "^2.5.0"
+
+"@aws-sdk/util-user-agent-browser@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.496.0.tgz#494b086dd8b07acdd6be65034c51545e5bcee37b"
+  integrity sha512-4j2spN+h0I0qfSMsGvJXTfQBu1e18rPdekKvzsGJxhaAE1tNgUfUT4nbvc5uVn0sNjZmirskmJ3kfbzVOrqIFg==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/types" "^2.9.1"
+    bowser "^2.11.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/util-user-agent-node@3.496.0":
+  version "3.496.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.496.0.tgz#db14e02cf82af556c826570efc7db1e57de3262d"
+  integrity sha512-h0Ax0jlDc7UIo3KoSI4C4tVLBFoiAdx3+DhTVfgLS7x93d41dMlziPoBX2RgdcFn37qnzw6AQKTVTMwDbRCGpg==
+  dependencies:
+    "@aws-sdk/types" "3.496.0"
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@aws-sdk/util-utf8-browser@^3.0.0":
+  version "3.259.0"
+  resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff"
+  integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==
+  dependencies:
+    tslib "^2.3.1"
+
+"@babel/cli@^7.16.0":
+  version "7.23.9"
+  resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.23.9.tgz#06b3e76376ee53f14ac8ac422c884950c69e1b9e"
+  integrity sha512-vB1UXmGDNEhcf1jNAHKT9IlYk1R+hehVTLFlCLHBi8gfuHQGP6uRjgXVYU0EVlI/qwAWpstqkBdf2aez3/z/5Q==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.17"
+    commander "^4.0.1"
+    convert-source-map "^2.0.0"
+    fs-readdir-recursive "^1.1.0"
+    glob "^7.2.0"
+    make-dir "^2.1.0"
+    slash "^2.0.0"
+  optionalDependencies:
+    "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3"
+    chokidar "^3.4.0"
+
+"@babel/code-frame@^7.23.5":
+  version "7.23.5"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
+  integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
+  dependencies:
+    "@babel/highlight" "^7.23.4"
+    chalk "^2.4.2"
+
+"@babel/compat-data@^7.23.5":
+  version "7.23.5"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
+  integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
+
+"@babel/core@^7.16.5":
+  version "7.23.9"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1"
+  integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==
+  dependencies:
+    "@ampproject/remapping" "^2.2.0"
+    "@babel/code-frame" "^7.23.5"
+    "@babel/generator" "^7.23.6"
+    "@babel/helper-compilation-targets" "^7.23.6"
+    "@babel/helper-module-transforms" "^7.23.3"
+    "@babel/helpers" "^7.23.9"
+    "@babel/parser" "^7.23.9"
+    "@babel/template" "^7.23.9"
+    "@babel/traverse" "^7.23.9"
+    "@babel/types" "^7.23.9"
+    convert-source-map "^2.0.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.2.3"
+    semver "^6.3.1"
+
+"@babel/generator@^7.23.6", "@babel/generator@^7.4.0":
+  version "7.23.6"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e"
+  integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==
+  dependencies:
+    "@babel/types" "^7.23.6"
+    "@jridgewell/gen-mapping" "^0.3.2"
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jsesc "^2.5.1"
+
+"@babel/helper-annotate-as-pure@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882"
+  integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-compilation-targets@^7.23.6":
+  version "7.23.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
+  integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
+  dependencies:
+    "@babel/compat-data" "^7.23.5"
+    "@babel/helper-validator-option" "^7.23.5"
+    browserslist "^4.22.2"
+    lru-cache "^5.1.1"
+    semver "^6.3.1"
+
+"@babel/helper-environment-visitor@^7.22.20":
+  version "7.22.20"
+  resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
+  integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
+
+"@babel/helper-function-name@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
+  integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
+  dependencies:
+    "@babel/template" "^7.22.15"
+    "@babel/types" "^7.23.0"
+
+"@babel/helper-hoist-variables@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
+  integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-module-imports@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
+  integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
+  dependencies:
+    "@babel/types" "^7.22.15"
+
+"@babel/helper-module-transforms@^7.23.3":
+  version "7.23.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
+  integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.22.20"
+    "@babel/helper-module-imports" "^7.22.15"
+    "@babel/helper-simple-access" "^7.22.5"
+    "@babel/helper-split-export-declaration" "^7.22.6"
+    "@babel/helper-validator-identifier" "^7.22.20"
+
+"@babel/helper-plugin-utils@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
+  integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
+
+"@babel/helper-simple-access@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
+  integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-split-export-declaration@^7.22.6":
+  version "7.22.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
+  integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-string-parser@^7.23.4":
+  version "7.23.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83"
+  integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==
+
+"@babel/helper-validator-identifier@^7.22.20":
+  version "7.22.20"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+  integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
+"@babel/helper-validator-option@^7.23.5":
+  version "7.23.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
+  integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
+
+"@babel/helpers@^7.23.9":
+  version "7.23.9"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d"
+  integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==
+  dependencies:
+    "@babel/template" "^7.23.9"
+    "@babel/traverse" "^7.23.9"
+    "@babel/types" "^7.23.9"
+
+"@babel/highlight@^7.23.4":
+  version "7.23.4"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b"
+  integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.22.20"
+    chalk "^2.4.2"
+    js-tokens "^4.0.0"
+
+"@babel/node@^7.16.5":
+  version "7.23.9"
+  resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.23.9.tgz#fc40dc371439f1a45535ebf515232f4f046ef7a9"
+  integrity sha512-/d4ju/POwlGIJlZ+NqWH1qu61wt6ZlTZZZutrK2MOSdaH1JCh726nLw/GSvAjG+LTY6CO9SsB8uWcttnFKm6yg==
+  dependencies:
+    "@babel/register" "^7.23.7"
+    commander "^4.0.1"
+    core-js "^3.30.2"
+    node-environment-flags "^1.0.5"
+    regenerator-runtime "^0.14.0"
+    v8flags "^3.1.1"
+
+"@babel/parser@^7.23.9", "@babel/parser@^7.4.3":
+  version "7.23.9"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b"
+  integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==
+
+"@babel/plugin-syntax-jsx@^7.23.3":
+  version "7.23.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473"
+  integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-react-jsx@^7.16.5":
+  version "7.23.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312"
+  integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-module-imports" "^7.22.15"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-jsx" "^7.23.3"
+    "@babel/types" "^7.23.4"
+
+"@babel/register@^7.23.7":
+  version "7.23.7"
+  resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038"
+  integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==
+  dependencies:
+    clone-deep "^4.0.1"
+    find-cache-dir "^2.0.0"
+    make-dir "^2.1.0"
+    pirates "^4.0.6"
+    source-map-support "^0.5.16"
+
+"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.4.0":
+  version "7.23.9"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a"
+  integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==
+  dependencies:
+    "@babel/code-frame" "^7.23.5"
+    "@babel/parser" "^7.23.9"
+    "@babel/types" "^7.23.9"
+
+"@babel/traverse@^7.23.9", "@babel/traverse@^7.4.3":
+  version "7.23.9"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950"
+  integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==
+  dependencies:
+    "@babel/code-frame" "^7.23.5"
+    "@babel/generator" "^7.23.6"
+    "@babel/helper-environment-visitor" "^7.22.20"
+    "@babel/helper-function-name" "^7.23.0"
+    "@babel/helper-hoist-variables" "^7.22.5"
+    "@babel/helper-split-export-declaration" "^7.22.6"
+    "@babel/parser" "^7.23.9"
+    "@babel/types" "^7.23.9"
+    debug "^4.3.1"
+    globals "^11.1.0"
+
+"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.4.0":
+  version "7.23.9"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002"
+  integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==
+  dependencies:
+    "@babel/helper-string-parser" "^7.23.4"
+    "@babel/helper-validator-identifier" "^7.22.20"
+    to-fast-properties "^2.0.0"
+
+"@colors/colors@1.6.0", "@colors/colors@^1.6.0":
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0"
+  integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==
+
+"@crowdsec/express-bouncer@0.1.0":
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/@crowdsec/express-bouncer/-/express-bouncer-0.1.0.tgz#458a604d7fad3ce2acf382bcb17e344fb74e9932"
+  integrity sha512-cS5ATNInb914yOubWznMB02lheDLImtIZ8A7n99sn7q2YI+P3Zt6G/Mttp+d1NL1PDUkFBMFlBreOslkcWwLFQ==
+  dependencies:
+    ip-address "^7.1.0"
+    isomorphic-fetch "^3.0.0"
+    lodash "^4.17.21"
+    svg-captcha "^1.4.0"
+    winston "^3.3.3"
+
+"@cryptography/aes@^0.1.1":
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/@cryptography/aes/-/aes-0.1.1.tgz#0096726a6a2a2cfc2e8bddf3997e98e49f1a224d"
+  integrity sha512-PcYz4FDGblO6tM2kSC+VzhhK62vml6k6/YAkiWtyPvrgJVfnDRoHGDtKn5UiaRRUrvUTTocBpvc2rRgTCqxjsg==
+
+"@dabh/diagnostics@^2.0.2":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a"
+  integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==
+  dependencies:
+    colorspace "1.1.x"
+    enabled "2.0.x"
+    kuler "^2.0.0"
+
+"@discordjs/builders@^1.3.0":
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.7.0.tgz#e2478c7e55b0f4c40837edb8f102bce977323a37"
+  integrity sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw==
+  dependencies:
+    "@discordjs/formatters" "^0.3.3"
+    "@discordjs/util" "^1.0.2"
+    "@sapphire/shapeshift" "^3.9.3"
+    discord-api-types "0.37.61"
+    fast-deep-equal "^3.1.3"
+    ts-mixer "^6.0.3"
+    tslib "^2.6.2"
+
+"@discordjs/collection@^1.2.0", "@discordjs/collection@^1.5.1":
+  version "1.5.3"
+  resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.5.3.tgz#5a1250159ebfff9efa4f963cfa7e97f1b291be18"
+  integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==
+
+"@discordjs/formatters@^0.3.3":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.3.3.tgz#b16fdd79bb819680ab7e519193004e9dc124a749"
+  integrity sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==
+  dependencies:
+    discord-api-types "0.37.61"
+
+"@discordjs/rest@^1.3.0":
+  version "1.7.1"
+  resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-1.7.1.tgz#eeef0e71a37c95fa27962129729b2aa9de8e3752"
+  integrity sha512-Ofa9UqT0U45G/eX86cURQnX7gzOJLG2oC28VhIk/G6IliYgQF7jFByBJEykPSHE4MxPhqCleYvmsrtfKh1nYmQ==
+  dependencies:
+    "@discordjs/collection" "^1.5.1"
+    "@discordjs/util" "^0.3.0"
+    "@sapphire/async-queue" "^1.5.0"
+    "@sapphire/snowflake" "^3.4.2"
+    discord-api-types "^0.37.41"
+    file-type "^18.3.0"
+    tslib "^2.5.0"
+    undici "^5.22.0"
+
+"@discordjs/util@^0.1.0":
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-0.1.0.tgz#e42ca1bf407bc6d9adf252877d1b206e32ba369a"
+  integrity sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==
+
+"@discordjs/util@^0.3.0":
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-0.3.1.tgz#4e8737e1dcff7e9f5eccc3116fb44755b65b1e97"
+  integrity sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA==
+
+"@discordjs/util@^1.0.2":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-1.0.2.tgz#dc1896d764452b1bd9707eb9aa99ccfbb30bd1c0"
+  integrity sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==
+
+"@fastify/busboy@^2.0.0":
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff"
+  integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==
+
+"@gar/promisify@^1.0.1":
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
+  integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
+
+"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0":
+  version "9.3.0"
+  resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
+  integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==
+
+"@hapi/topo@^5.1.0":
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012"
+  integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==
+  dependencies:
+    "@hapi/hoek" "^9.0.0"
+
+"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+  integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.1"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@^3.1.0":
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
+  integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
+
+"@jridgewell/set-array@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+  version "1.4.15"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.22"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c"
+  integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.1.0"
+    "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@mapbox/node-pre-gyp@^1.0.0":
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa"
+  integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==
+  dependencies:
+    detect-libc "^2.0.0"
+    https-proxy-agent "^5.0.0"
+    make-dir "^3.1.0"
+    node-fetch "^2.6.7"
+    nopt "^5.0.0"
+    npmlog "^5.0.1"
+    rimraf "^3.0.2"
+    semver "^7.3.5"
+    tar "^6.1.11"
+
+"@mstrhakr/passport-openidconnect@*":
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/@mstrhakr/passport-openidconnect/-/passport-openidconnect-0.1.2.tgz#3f2ac1184f8ae44718220d4e84ab4ce9c634bf98"
+  integrity sha512-Q+TJD/50yuDJknHThr+tyQSZYOS26256wLcxyJglwps/o1hyAkOy6Wq/Ca+nFlVyvaYThxap1q0K77iGaMsNgA==
+  dependencies:
+    oauth "0.9.x"
+    passport-strategy "1.x.x"
+
+"@mysql/xdevapi@8.0.33":
+  version "8.0.33"
+  resolved "https://registry.yarnpkg.com/@mysql/xdevapi/-/xdevapi-8.0.33.tgz#966f71563a2e2a27cb5279fdf72fa9ee41538ec2"
+  integrity sha512-SXy+1CMtTb6qyKo/vzj/krWU4Ui6PnEtkkUjwdLpVdxkt0noZdDMmoGUxtMsm+Y2l15tme1MVuYvxMK7RJVfEA==
+  dependencies:
+    google-protobuf "3.19.4"
+    lossless-json "2.0.1"
+    parsimmon "1.18.1"
+
+"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3":
+  version "2.1.8-no-fsevents.3"
+  resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b"
+  integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==
+
+"@npmcli/fs@^1.0.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257"
+  integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==
+  dependencies:
+    "@gar/promisify" "^1.0.1"
+    semver "^7.3.5"
+
+"@npmcli/move-file@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674"
+  integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==
+  dependencies:
+    mkdirp "^1.0.4"
+    rimraf "^3.0.2"
+
+"@postman/form-data@~3.1.1":
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/@postman/form-data/-/form-data-3.1.1.tgz#d0446d0d3639a291f5e800e89fa1d0d3723f9414"
+  integrity sha512-vjh8Q2a8S6UCm/KKs31XFJqEEgmbjBmpPNVV2eVav6905wyFAwaUOBGA1NPBI4ERH9MMZc6w0umFgM6WbEPMdg==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
+
+"@postman/tough-cookie@~4.1.3-postman.1":
+  version "4.1.3-postman.1"
+  resolved "https://registry.yarnpkg.com/@postman/tough-cookie/-/tough-cookie-4.1.3-postman.1.tgz#9b2aa98f0b42f7e8381ee7e66277cd0253a91f11"
+  integrity sha512-txpgUqZOnWYnUHZpHjkfb0IwVH4qJmyq77pPnJLlfhMtdCLMFTEeQHlzQiK906aaNCe4NEB5fGJHo9uzGbFMeA==
+  dependencies:
+    psl "^1.1.33"
+    punycode "^2.1.1"
+    universalify "^0.2.0"
+    url-parse "^1.5.3"
+
+"@postman/tunnel-agent@^0.6.3":
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/@postman/tunnel-agent/-/tunnel-agent-0.6.3.tgz#23048d8d8618d453c571f03189e944afdc2292b7"
+  integrity sha512-k57fzmAZ2PJGxfOA4SGR05ejorHbVAa/84Hxh/2nAztjNXc4ZjOm9NUIk6/Z6LCrBvJZqjRZbN8e/nROVUPVdg==
+  dependencies:
+    safe-buffer "^5.0.1"
+
+"@sapphire/async-queue@^1.5.0":
+  version "1.5.2"
+  resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.2.tgz#2982dce16e5b8b1ea792604d20c23c0585877b97"
+  integrity sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg==
+
+"@sapphire/shapeshift@^3.9.3":
+  version "3.9.6"
+  resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.9.6.tgz#bd9629c08641f5b94ae094e23f092187a3ed9a7d"
+  integrity sha512-4+Na/fxu2SEepZRb9z0dbsVh59QtwPuBg/UVaDib3av7ZY14b14+z09z6QVn0P6Dv6eOU2NDTsjIi0mbtgP56g==
+  dependencies:
+    fast-deep-equal "^3.1.3"
+    lodash "^4.17.21"
+
+"@sapphire/snowflake@^3.2.2", "@sapphire/snowflake@^3.4.2":
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.3.tgz#0c102aa2ec5b34f806e9bc8625fc6a5e1d0a0c6a"
+  integrity sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==
+
+"@sendgrid/client@^8.1.0":
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/@sendgrid/client/-/client-8.1.0.tgz#502865bbffe9442f778a14af1995892f5d4adf14"
+  integrity sha512-Kp2kKLr307v/HnR3uGuySt0AbCkeG7naDVOzfPOtWvKHVZIEHmKidQjJjzytVZNYWtoRdYgNfBw6GyUznGqa6w==
+  dependencies:
+    "@sendgrid/helpers" "^8.0.0"
+    axios "^1.6.0"
+
+"@sendgrid/helpers@^8.0.0":
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/@sendgrid/helpers/-/helpers-8.0.0.tgz#f74bf9743bacafe4c8573be46166130c604c0fc1"
+  integrity sha512-Ze7WuW2Xzy5GT5WRx+yEv89fsg/pgy3T1E3FS0QEx0/VvRmigMZ5qyVGhJz4SxomegDkzXv/i0aFPpHKN8qdAA==
+  dependencies:
+    deepmerge "^4.2.2"
+
+"@sendgrid/mail@*":
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/@sendgrid/mail/-/mail-8.1.0.tgz#873486233c511f41d98f69290f9664c1d14e205e"
+  integrity sha512-WkE0qwOrJMX9oQ+Xvtl3CdmucD6/iKw6go0VPoPieVlfXc43rbIf91wvtO6m7sKPnzxw3G+8rekBgXibmP4S8Q==
+  dependencies:
+    "@sendgrid/client" "^8.1.0"
+    "@sendgrid/helpers" "^8.0.0"
+
+"@sideway/address@^4.1.4":
+  version "4.1.4"
+  resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0"
+  integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==
+  dependencies:
+    "@hapi/hoek" "^9.0.0"
+
+"@sideway/formula@^3.0.1":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f"
+  integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==
+
+"@sideway/pinpoint@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
+  integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
+
+"@smithy/abort-controller@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.1.1.tgz#bb68596a7c8213c2ef259bc7fb0f0c118c67ea9d"
+  integrity sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/config-resolver@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.1.1.tgz#fc6b036084b98fd26a8ff01a5d7eb676e41749c7"
+  integrity sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==
+  dependencies:
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-config-provider" "^2.2.1"
+    "@smithy/util-middleware" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/core@^1.3.1":
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.3.1.tgz#ecedc564e68453b02c20db9e8435d59005c066d8"
+  integrity sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==
+  dependencies:
+    "@smithy/middleware-endpoint" "^2.4.1"
+    "@smithy/middleware-retry" "^2.1.1"
+    "@smithy/middleware-serde" "^2.1.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/smithy-client" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-middleware" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/credential-provider-imds@^2.2.1":
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz#4805bf5e104718b959cf8699113fa9de6ddeeafa"
+  integrity sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==
+  dependencies:
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/url-parser" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/eventstream-codec@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz#4405ab0f9c77d439c575560c4886e59ee17d6d38"
+  integrity sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==
+  dependencies:
+    "@aws-crypto/crc32" "3.0.0"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-hex-encoding" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/fetch-http-handler@^2.4.1":
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz#b4d73bbc1449f61234077d58c705b843a8587bf0"
+  integrity sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==
+  dependencies:
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/querystring-builder" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-base64" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/hash-node@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.1.1.tgz#0f8a22d97565ca948724f72267e4d3a2f33740a8"
+  integrity sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-buffer-from" "^2.1.1"
+    "@smithy/util-utf8" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/invalid-dependency@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz#bd69fa24dd35e9bc65a160bd86becdf1399e4463"
+  integrity sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/is-array-buffer@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz#07b4c77ae67ed58a84400c76edd482271f9f957b"
+  integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/middleware-content-length@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz#df767de12d594bc5622009fb0fc8343522697d8c"
+  integrity sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==
+  dependencies:
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/middleware-endpoint@^2.4.1":
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz#9e500df4d944741808e92018ccd2e948b598a49f"
+  integrity sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==
+  dependencies:
+    "@smithy/middleware-serde" "^2.1.1"
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/shared-ini-file-loader" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/url-parser" "^2.1.1"
+    "@smithy/util-middleware" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/middleware-retry@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz#ddc749dd927f136714f76ca5a52dcfb0993ee162"
+  integrity sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==
+  dependencies:
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/service-error-classification" "^2.1.1"
+    "@smithy/smithy-client" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-middleware" "^2.1.1"
+    "@smithy/util-retry" "^2.1.1"
+    tslib "^2.5.0"
+    uuid "^8.3.2"
+
+"@smithy/middleware-serde@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz#2c5750f76e276a5249720f6c3c24fac29abbee16"
+  integrity sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/middleware-stack@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz#67f992dc36e8a6861f881f80a81c1c30956a0396"
+  integrity sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/node-config-provider@^2.2.1":
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz#c440c7948d58d72f0e212aa1967aa12f0729defd"
+  integrity sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==
+  dependencies:
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/shared-ini-file-loader" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/node-http-handler@^2.3.1":
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz#77d23279ff0a12cbe7cde93c5e7c0e86ad56dd20"
+  integrity sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==
+  dependencies:
+    "@smithy/abort-controller" "^2.1.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/querystring-builder" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/property-provider@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.1.1.tgz#0f7ffc5e43829eaca5b2b5aae8554807a52b30f3"
+  integrity sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/protocol-http@^3.1.1":
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.1.1.tgz#eee522d0ed964a72b735d64925e07bcfb7a7806f"
+  integrity sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/querystring-builder@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz#b9693448ad3f8e0767d84cf5cae29f35514591fb"
+  integrity sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-uri-escape" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/querystring-parser@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz#a4282a66cc56844317dbff824e573f469bbfc032"
+  integrity sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/service-error-classification@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz#dd24e1ec529ae9ec8e87d8b15f0fc8f7e17f3d02"
+  integrity sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+
+"@smithy/shared-ini-file-loader@^2.3.1":
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz#a2e28b4d85f8a8262a84403fa2b74a086b3a7703"
+  integrity sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/signature-v4@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.1.1.tgz#6080171e3d694f40d3f553bbc236c5c433efd4d2"
+  integrity sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==
+  dependencies:
+    "@smithy/eventstream-codec" "^2.1.1"
+    "@smithy/is-array-buffer" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-hex-encoding" "^2.1.1"
+    "@smithy/util-middleware" "^2.1.1"
+    "@smithy/util-uri-escape" "^2.1.1"
+    "@smithy/util-utf8" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/smithy-client@^2.3.1":
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.3.1.tgz#0c3a4a0d3935c7ad2240cc23181f276705212b1f"
+  integrity sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==
+  dependencies:
+    "@smithy/middleware-endpoint" "^2.4.1"
+    "@smithy/middleware-stack" "^2.1.1"
+    "@smithy/protocol-http" "^3.1.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-stream" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/types@^2.9.1":
+  version "2.9.1"
+  resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.9.1.tgz#ed04d4144eed3b8bd26d20fc85aae8d6e357ebb9"
+  integrity sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/url-parser@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.1.1.tgz#a30de227b6734650d740b6dff74d488b874e85e3"
+  integrity sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==
+  dependencies:
+    "@smithy/querystring-parser" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/util-base64@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.1.1.tgz#af729085cc9d92ebd54a5d2c5d0aa5a0c31f83bf"
+  integrity sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==
+  dependencies:
+    "@smithy/util-buffer-from" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/util-body-length-browser@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz#1fc77072768013ae646415eedb9833cd252d055d"
+  integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/util-body-length-node@^2.2.1":
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz#a6f5c9911f1c3e23efb340d5ce7a590b62f2056e"
+  integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/util-buffer-from@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz#f9346bf8b23c5ba6f6bdb61dd9db779441ba8d08"
+  integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==
+  dependencies:
+    "@smithy/is-array-buffer" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/util-config-provider@^2.2.1":
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz#aea0a80236d6cedaee60473802899cff4a8cc0ba"
+  integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/util-defaults-mode-browser@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz#be9ac82acee6ec4821b610e7187b0e147f0ba8ff"
+  integrity sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==
+  dependencies:
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/smithy-client" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    bowser "^2.11.0"
+    tslib "^2.5.0"
+
+"@smithy/util-defaults-mode-node@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz#0910ee00aac3e8a08aac3e6ae8794e52f3efef02"
+  integrity sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==
+  dependencies:
+    "@smithy/config-resolver" "^2.1.1"
+    "@smithy/credential-provider-imds" "^2.2.1"
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/property-provider" "^2.1.1"
+    "@smithy/smithy-client" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/util-endpoints@^1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz#45426dba6fb42282a0ad955600b2b3ba050d118f"
+  integrity sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==
+  dependencies:
+    "@smithy/node-config-provider" "^2.2.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/util-hex-encoding@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz#978252b9fb242e0a59bae4ead491210688e0d15f"
+  integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/util-middleware@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.1.1.tgz#903ba19bb17704f4b476fb9ade9bf9eb0174bc3d"
+  integrity sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==
+  dependencies:
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/util-retry@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.1.1.tgz#f2d3566b6e5b841028c7240c852007d4037e49b2"
+  integrity sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==
+  dependencies:
+    "@smithy/service-error-classification" "^2.1.1"
+    "@smithy/types" "^2.9.1"
+    tslib "^2.5.0"
+
+"@smithy/util-stream@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.1.1.tgz#3ae0e88c3a1a45899e29c1655d2e5a3865b6c0a6"
+  integrity sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==
+  dependencies:
+    "@smithy/fetch-http-handler" "^2.4.1"
+    "@smithy/node-http-handler" "^2.3.1"
+    "@smithy/types" "^2.9.1"
+    "@smithy/util-base64" "^2.1.1"
+    "@smithy/util-buffer-from" "^2.1.1"
+    "@smithy/util-hex-encoding" "^2.1.1"
+    "@smithy/util-utf8" "^2.1.1"
+    tslib "^2.5.0"
+
+"@smithy/util-uri-escape@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz#7eedc93b73ecda68f12fb9cf92e9fa0fbbed4d83"
+  integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/util-utf8@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.1.1.tgz#690018dd28f47f014114497735e51417ea5900a6"
+  integrity sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==
+  dependencies:
+    "@smithy/util-buffer-from" "^2.1.1"
+    tslib "^2.5.0"
+
+"@tokenizer/token@^0.3.0":
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276"
+  integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==
+
+"@tootallnate/once@1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+  integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
+
+"@tootallnate/once@2":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+  integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
+"@types/geojson@^7946.0.10":
+  version "7946.0.13"
+  resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.13.tgz#e6e77ea9ecf36564980a861e24e62a095988775e"
+  integrity sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==
+
+"@types/ldapjs@^2.2.2":
+  version "2.2.5"
+  resolved "https://registry.yarnpkg.com/@types/ldapjs/-/ldapjs-2.2.5.tgz#b6623bc5ad4fab85ef3cfa586db691d016a3598c"
+  integrity sha512-Lv/nD6QDCmcT+V1vaTRnEKE8UgOilVv5pHcQuzkU1LcRe4mbHHuUo/KHi0LKrpdHhQY8FJzryF38fcVdeUIrzg==
+  dependencies:
+    "@types/node" "*"
+
+"@types/node@*":
+  version "20.11.9"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.9.tgz#959d436f20ce2ee3df897c3eaa0617c98fa70efb"
+  integrity sha512-CQXNuMoS/VcoAMISe5pm4JnEd1Br5jildbQEToEMQvutmv+EaQr90ry9raiudgpyDuqFiV9e4rnjSfLNq12M5w==
+  dependencies:
+    undici-types "~5.26.4"
+
+"@types/node@^14.14.14":
+  version "14.18.63"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b"
+  integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==
+
+"@types/node@^17.0.45":
+  version "17.0.45"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
+  integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
+
+"@types/triple-beam@^1.3.2":
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c"
+  integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==
+
+"@types/webidl-conversions@*":
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz#1306dbfa53768bcbcfc95a1c8cde367975581859"
+  integrity sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==
+
+"@types/whatwg-url@^8.2.1":
+  version "8.2.2"
+  resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63"
+  integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==
+  dependencies:
+    "@types/node" "*"
+    "@types/webidl-conversions" "*"
+
+"@types/ws@^8.5.3":
+  version "8.5.10"
+  resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787"
+  integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==
+  dependencies:
+    "@types/node" "*"
+
+"@xmldom/xmldom@^0.7.0", "@xmldom/xmldom@^0.7.6", "@xmldom/xmldom@^0.7.9":
+  version "0.7.13"
+  resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.13.tgz#ff34942667a4e19a9f4a0996a76814daac364cf3"
+  integrity sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==
+
+"@xmpp/base64@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/base64/-/base64-0.13.1.tgz#92cb55554cea301e5e157d0f4e957d3c3d6e9c3e"
+  integrity sha512-ifzj81zZc8uhL9Nl8us2NUDfLt3qsbHr8lwdKmrDMk/9unY8aIGjzHdNBJoFFyJe8GSo1NFq3mS7X+X0TwkQYw==
+  dependencies:
+    base-64 "^1.0.0"
+
+"@xmpp/base64@^0.9.0":
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/@xmpp/base64/-/base64-0.9.0.tgz#f5914c2b7228d833020af991a2a207267fc8fcf4"
+  integrity sha512-/Naw/zQB3YryuQvSS3T3TwBV+z29Ox7RxfAs31foRcGblxw9Vkh4arTqwYpd49BLGbUzw+PBhpCgyJ4IrHPeFA==
+  dependencies:
+    base-64 "^0.1.0"
+
+"@xmpp/client-core@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/client-core/-/client-core-0.13.1.tgz#508986bf87560a5f34940977fc6e832c8f420667"
+  integrity sha512-ANVcqzgDCmmUj/R9pf5rJGH41mL16Bo+DRJ+2trKoRHe9p5s0p6IssjhJtTOSVx6oh2ilPXMB8qoMPjTGzY6cw==
+  dependencies:
+    "@xmpp/connection" "^0.13.1"
+    "@xmpp/jid" "^0.13.1"
+    "@xmpp/xml" "^0.13.1"
+
+"@xmpp/client-core@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/client-core/-/client-core-0.9.2.tgz#0176ad686358e903afefbf92d4c0f11676a90572"
+  integrity sha512-mNwg3FwB2OSFxjNY445SSL9OsrKefVGtQP1o3AuL26TjioGE+C8brijBvH+g4CM84G3/FF6aDOhvetp4fJJZcQ==
+  dependencies:
+    "@xmpp/connection" "^0.9.2"
+    "@xmpp/jid" "^0.9.2"
+    "@xmpp/xml" "^0.9.2"
+
+"@xmpp/client@0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/client/-/client-0.13.1.tgz#6c8db3cd308479ef17b8f78e2eda9a68b4ebd2d6"
+  integrity sha512-DA+pOkWliTKN5C0Bod4rqlZ4hj/CiqQDHRhQgpx7Y/69qsUwK8M/9C02qylpyZSL2TFGzOM6ZMhr/jlMCsL9jQ==
+  dependencies:
+    "@babel/cli" "^7.16.0"
+    "@babel/core" "^7.16.5"
+    "@babel/node" "^7.16.5"
+    "@babel/plugin-transform-react-jsx" "^7.16.5"
+    "@xmpp/client-core" "^0.13.1"
+    "@xmpp/iq" "^0.13.1"
+    "@xmpp/middleware" "^0.13.1"
+    "@xmpp/reconnect" "^0.13.1"
+    "@xmpp/resolve" "^0.13.1"
+    "@xmpp/resource-binding" "^0.13.1"
+    "@xmpp/sasl" "^0.13.1"
+    "@xmpp/sasl-anonymous" "^0.13.1"
+    "@xmpp/sasl-plain" "^0.13.1"
+    "@xmpp/sasl-scram-sha-1" "^0.13.1"
+    "@xmpp/session-establishment" "^0.13.1"
+    "@xmpp/starttls" "^0.13.1"
+    "@xmpp/stream-features" "^0.13.1"
+    "@xmpp/stream-management" "^0.13.1"
+    "@xmpp/tcp" "^0.13.1"
+    "@xmpp/tls" "^0.13.1"
+    "@xmpp/websocket" "^0.13.1"
+    babel-plugin-jsx-pragmatic "^1.0.2"
+
+"@xmpp/client@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/client/-/client-0.9.2.tgz#6a0c7e1d9a8f7ea670981bd66fba5e41067960f7"
+  integrity sha512-b/p+1RLiPhp3mngjkaKYyLcj0B6zwvQcV6K+JysJLz8kwevspIomlEO8dwHq3k2k3vX+Be6JPfREaTp+BjABtg==
+  dependencies:
+    "@xmpp/client-core" "^0.9.2"
+    "@xmpp/iq" "^0.9.2"
+    "@xmpp/middleware" "^0.9.2"
+    "@xmpp/reconnect" "^0.9.0"
+    "@xmpp/resolve" "^0.9.2"
+    "@xmpp/resource-binding" "^0.9.2"
+    "@xmpp/sasl" "^0.9.2"
+    "@xmpp/sasl-anonymous" "^0.9.0"
+    "@xmpp/sasl-plain" "^0.9.0"
+    "@xmpp/sasl-scram-sha-1" "^0.9.0"
+    "@xmpp/session-establishment" "^0.9.2"
+    "@xmpp/starttls" "^0.9.2"
+    "@xmpp/stream-features" "^0.9.0"
+    "@xmpp/tcp" "^0.9.2"
+    "@xmpp/tls" "^0.9.2"
+    "@xmpp/websocket" "^0.9.2"
+
+"@xmpp/connection-tcp@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/connection-tcp/-/connection-tcp-0.13.1.tgz#07a48223ac0dc2cc97fa8adf85d98a73418568f9"
+  integrity sha512-yTVrj5o5rPVbZT5ql5ljzzIZHnLkCuyTNEQpiU9IYvfjWjy4+E2DreUnpRf3IAbpARkMoPq5uQJchH0RE3WBjg==
+  dependencies:
+    "@xmpp/connection" "^0.13.1"
+    "@xmpp/xml" "^0.13.1"
+
+"@xmpp/connection-tcp@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/connection-tcp/-/connection-tcp-0.9.2.tgz#57f1165ef729e339237522a5206b8f9439f9edbf"
+  integrity sha512-qdKp9vKprcaDcs/wdGPUc4GavaRNkoIH6q3PduMpIpF2CC8faQQTGO554i0k2VITxN4AyBIBIzPL5Iht/FEUSw==
+  dependencies:
+    "@xmpp/connection" "^0.9.2"
+    "@xmpp/xml" "^0.9.2"
+
+"@xmpp/connection@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/connection/-/connection-0.13.1.tgz#1c71e2dcfa8a2e72dda4dbf73fe0b520f8971851"
+  integrity sha512-A8ojaVRrvGtvRTXcWiOJMnBPAytLFvsz18g/jO9PbnhzuqqeJ6LxmCtyaKqchMdX0lhuZpo0JUgCSPnZ68tXrQ==
+  dependencies:
+    "@xmpp/error" "^0.13.1"
+    "@xmpp/events" "^0.13.1"
+    "@xmpp/jid" "^0.13.1"
+    "@xmpp/xml" "^0.13.1"
+
+"@xmpp/connection@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/connection/-/connection-0.9.2.tgz#bfa354d4c99e16032d50a95a5638e6f58897f31f"
+  integrity sha512-Jlc39RhIYLqLLInV8pmUnNClaJgjh+ZZfwGrRvYTw9v0Pic7dOeE+cyT7ONZPjmfue4Jhqo8bRbKSrF7ezQbEA==
+  dependencies:
+    "@xmpp/error" "^0.9.0"
+    "@xmpp/events" "^0.9.0"
+    "@xmpp/jid" "^0.9.2"
+    "@xmpp/xml" "^0.9.2"
+
+"@xmpp/debug@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/debug/-/debug-0.9.2.tgz#51702dfe5d14bae327c3468ea2967cf015800840"
+  integrity sha512-Fr0QPUZV/Kk3OnpSbIOOrSkDe0I4tVVE6670doKLdau6cRMP5Cx/bwkh565eSezcp9L0c9ws7gffqVnVDN7MkQ==
+  dependencies:
+    "@xmpp/xml" "^0.9.2"
+
+"@xmpp/error@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/error/-/error-0.13.1.tgz#fba9ddd33e34f77616635b87b67e974637b23995"
+  integrity sha512-tKecj36xIGLhLctdYhUOxWs+ZdiJpl0Tfp/GhfrUCKLHj/wq14d62SP9kxa0sDNKOY1uqRq2N9gWZBQHuP+r2Q==
+
+"@xmpp/error@^0.9.0":
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/@xmpp/error/-/error-0.9.0.tgz#3232fab6fdb7a25fe67d3e0e1962ae8742b2f2da"
+  integrity sha512-W8gqCwii+SmI8h1fx0HCFgfYMtrO0hjR2DeLHchn89F1x6o2fGisllLQ38vfCZWIqy3wXfLPuf5q6WM6nHe8gQ==
+
+"@xmpp/events@^0.13.0", "@xmpp/events@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/events/-/events-0.13.1.tgz#8bfa57117bb8c21da87e62a1985d65b7b1c342c2"
+  integrity sha512-c538zWUoD7KfMzMWGHyJkXvRYE5exzVjK6NAsMtfNtbVqw9SXJJaGLvDvYSXOQmKQaZz5guUuIUGiHJbr7yjsA==
+  dependencies:
+    events "^3.3.0"
+
+"@xmpp/events@^0.9.0":
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/@xmpp/events/-/events-0.9.0.tgz#60d181390fc6b080f5487c6877c3a8fa25276d1a"
+  integrity sha512-ckOtr2u4NfsJxq7cl/6aZbQh3aXkrZHXOmm4Q+hdbUECZxpE1AxRu0QuxVS8yqmx+eVjGzOX98My4c0Dbe6CfQ==
+  dependencies:
+    events "^3.0.0"
+
+"@xmpp/id@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/id/-/id-0.13.1.tgz#771f5cc64e402cab0994e6e4e05bfc635a300948"
+  integrity sha512-ivc7kxfk5sU6PspdQvglsibcWRCr40nbaPEvGYbXO8ymFN6qps91DPlEt0Cc0XJExq7PXo0Yt7DACfe8f7K03g==
+
+"@xmpp/id@^0.9.0":
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/@xmpp/id/-/id-0.9.0.tgz#baee9afad8ab7c5a3f3b000b2f98c02ddef67674"
+  integrity sha512-h7ycA0kDYM8fTObqtys92L3JTECnv6TUoUKP7Canq9xQP1k3K//ZMnMMFXc8NlU3Jl2U7V1Ny9zJlYM9gYv25w==
+
+"@xmpp/iq@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/iq/-/iq-0.13.1.tgz#29e5e62f6bad7cd73020948dc682c3bb2dd6e2ec"
+  integrity sha512-YyJj6up2aFTobTUmjdX86vs0+/WIB8i88QQjDDlzSKdMDDXgrB8B8JAMlEBfAsruAv/ZIwUnE4/yqCeMAehTuA==
+  dependencies:
+    "@xmpp/events" "^0.13.1"
+    "@xmpp/id" "^0.13.1"
+    "@xmpp/middleware" "^0.13.1"
+    "@xmpp/xml" "^0.13.1"
+
+"@xmpp/iq@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/iq/-/iq-0.9.2.tgz#0a16cf672eb03a7b7358d74835f00cca3aca7113"
+  integrity sha512-XCEuMj0JH41F7VgvKpF95lG4giXb/lyV0FbDmms3owCfWCEdaCxVJ8PzNZLq2rcUNCg/L1fvA+tUgZGqWMjnNw==
+  dependencies:
+    "@xmpp/events" "^0.9.0"
+    "@xmpp/id" "^0.9.0"
+    "@xmpp/middleware" "^0.9.2"
+    "@xmpp/xml" "^0.9.2"
+
+"@xmpp/jid@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/jid/-/jid-0.13.1.tgz#043cd7c491feeb6a7c9f7b1b3581f94939670717"
+  integrity sha512-E5ulk4gfPQwPY71TWXapiWzoxxAJz3LP0bDIUXIfgvlf1/2QKP3EcYQ7o+qmI0cLEZwWmwluRGouylqhyuwcAw==
+
+"@xmpp/jid@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/jid/-/jid-0.9.2.tgz#2b87c466834e0618e226be4119b1d54fd828c7da"
+  integrity sha512-mCWUhs/2C2/qB75m4x4VEEDMvs7ymcqZFjnrtgA3/i005+NLBHeZzzHiEo0n+VWVuyEE/6wrOmI/U2LkCGkEMA==
+
+"@xmpp/middleware@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/middleware/-/middleware-0.13.1.tgz#fe64e7f5d12fb74254684d96e17777fb4e7a44ed"
+  integrity sha512-t7kws9KMgaQURCDMcPjJOm/sEcC2Gs2YtpE35NaTR87NSwr8yZ37ZJL5Kki3Z4qhL6nhMXJPAprc6uqBn5q3Og==
+  dependencies:
+    "@xmpp/error" "^0.13.1"
+    "@xmpp/jid" "^0.13.1"
+    "@xmpp/xml" "^0.13.1"
+    koa-compose "^4.1.0"
+
+"@xmpp/middleware@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/middleware/-/middleware-0.9.2.tgz#40b0a6b9ce5473524f46c0841eed30fcb7ca956e"
+  integrity sha512-ayvUm8+5gWQzq9iIh8YtzDENJAaZvIOSrmZtDfExKCewZlPSyqlMcMM96JqImyiIzXCj45q7qfaFmekZoYWt6g==
+  dependencies:
+    "@xmpp/error" "^0.9.0"
+    "@xmpp/jid" "^0.9.2"
+    "@xmpp/xml" "^0.9.2"
+    koa-compose "^4.1.0"
+
+"@xmpp/reconnect@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/reconnect/-/reconnect-0.13.1.tgz#c815ec749a5c142fb9255af951d64e1dbadc419b"
+  integrity sha512-m/j/mTU7b3cOXP78uGzBbihmJMuXCYcTcwsTHlexj6tj6CE/vpuLNgxvf6pPkO7B9lH0HfezqU7ExHpS+4Nfaw==
+  dependencies:
+    "@xmpp/events" "^0.13.1"
+
+"@xmpp/reconnect@^0.9.0":
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/@xmpp/reconnect/-/reconnect-0.9.0.tgz#50f5d8e791021f0d19b34a13cb9ea495eae8a6be"
+  integrity sha512-c7SicqcosnXpJ+s4jjGof94FzHEChKiInTf4Colh7WkVWwXtsGrRU1PMYIbX3P/58t5EqgZvfCYQrGjsWSB0kg==
+  dependencies:
+    "@xmpp/events" "^0.9.0"
+
+"@xmpp/resolve@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/resolve/-/resolve-0.13.1.tgz#19f7a23983b78b72af5ce6606382428c4e7e7421"
+  integrity sha512-Lgsl6C/uJCxmYr0jWWOCJMqYvKi5WzN6loZwP7f6ov2nLMOMEZ7TSb66z393/7Pd0hy6DqZeggESMAFOkQH+vw==
+  dependencies:
+    "@xmpp/events" "^0.13.0"
+    "@xmpp/xml" "^0.13.0"
+    node-fetch "^2.6.6"
+
+"@xmpp/resolve@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/resolve/-/resolve-0.9.2.tgz#530d8df631d3cb920abc5cc84b470966c71ce9a4"
+  integrity sha512-c0Ff0PSecGNnE2yOkDMd6IXJA9EFlKJWB2qfbfT+i24NObXjFsBeUnEdxlI0F4eFkAyxQYNvn8qPRX4bfPJlCw==
+  dependencies:
+    "@xmpp/events" "^0.9.0"
+    "@xmpp/xml" "^0.9.2"
+    node-fetch "^2.3.0"
+
+"@xmpp/resource-binding@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/resource-binding/-/resource-binding-0.13.1.tgz#76a8248ced24bc24cd4dff0a031ed376eafeb54b"
+  integrity sha512-S6PGlfufDTTDlh21ynyJrGR0sMeEYIRq+BKUl4QhsR19BvP0RUW0t8Ypx1QwDY3++ihqRjvCllCmtmFMY1iJsQ==
+  dependencies:
+    "@xmpp/xml" "^0.13.1"
+
+"@xmpp/resource-binding@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/resource-binding/-/resource-binding-0.9.2.tgz#49d440ab47e886bbbee5f27966e28a4619eb60bb"
+  integrity sha512-fwDY35KF6MmMSv+VJS+P5KlFd1tz5QCS/5KMo78egmlv6IiBNJILOsV36t7vnPFBj9yHNomv/lJAsNt/ApkkfQ==
+  dependencies:
+    "@xmpp/xml" "^0.9.2"
+
+"@xmpp/sasl-anonymous@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/sasl-anonymous/-/sasl-anonymous-0.13.1.tgz#21139dafe4dbc8fb626e974daf64af9c46e469c5"
+  integrity sha512-l0Bqmva7xw10p8MelD2bHO10LwCPz6CEd/t5xO+Kw98hjI9lX6k5cxW7frvdnxRwPxJbGTciTQKHokYWR4luaA==
+  dependencies:
+    sasl-anonymous "^0.1.0"
+
+"@xmpp/sasl-anonymous@^0.9.0":
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/@xmpp/sasl-anonymous/-/sasl-anonymous-0.9.0.tgz#dbd38751c17c41fd5aef91c1384ce3ade8099f33"
+  integrity sha512-F7t5LnSfmvybLBUsEOFkhvEJgY+CKdO09r5lmup5SvtYPIXMjLOb26qS+hn68woz2s1sk+tj5VUzEm/NbmfgAQ==
+  dependencies:
+    sasl-anonymous "^0.1.0"
+
+"@xmpp/sasl-plain@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/sasl-plain/-/sasl-plain-0.13.1.tgz#ccdf9c73f61fb203ec7822ae55e2c707d3aed305"
+  integrity sha512-Xx4ay67Mg6aQFeelTZuY5QatP3cCJsArAuD0AozHKzjUWzyLqqydsDS+yFN23pxkOZPGgyYVebc4gKti4jZ+GA==
+  dependencies:
+    sasl-plain "^0.1.0"
+
+"@xmpp/sasl-plain@^0.9.0":
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/@xmpp/sasl-plain/-/sasl-plain-0.9.0.tgz#6b8d4a2e882685e460cdfb2181d00ac00904f606"
+  integrity sha512-7Jn34z88cy1khFYYFCnRQw0K10O+XxDKK13ImuOOS+tag+7ulvd2wT1cWJFcRIBsDvZJSqqROBfqXwHgd4PrYg==
+  dependencies:
+    sasl-plain "^0.1.0"
+
+"@xmpp/sasl-scram-sha-1@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/sasl-scram-sha-1/-/sasl-scram-sha-1-0.13.1.tgz#139a74f176301513da987ddc3eb98f1e58c8d9ad"
+  integrity sha512-qWyR5+v10pykTxQnKfNVUnCnZisA/UmC4Po5EQSgA5dNRuzraqwk/bH5PVi9+M0OcbtdNs9wCO2Hv06YA9AjwA==
+  dependencies:
+    sasl-scram-sha-1 "^1.2.1"
+
+"@xmpp/sasl-scram-sha-1@^0.9.0":
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/@xmpp/sasl-scram-sha-1/-/sasl-scram-sha-1-0.9.0.tgz#ee7acbba4393262db6a864630868948de031a4e4"
+  integrity sha512-AXV+Z5nwKKfkqg/XKsVi/fpJrJvhwUdZHxz84+cSskmfmD47cZw07eWkbFubs551qlAKeM/viSRE0WEaZqe4mA==
+  dependencies:
+    sasl-scram-sha-1 "^1.2.0"
+
+"@xmpp/sasl@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/sasl/-/sasl-0.13.1.tgz#ee8484dda611ccff9b39243109b78c47abd01584"
+  integrity sha512-ynhKsL43EtezqJ9s476leHzliMudCAFS4xNG5x4ZFHoc7Iz5J6p6jFI89LGgnk9DeIdk9A/CFrPWTdyjhvyiTQ==
+  dependencies:
+    "@xmpp/base64" "^0.13.1"
+    "@xmpp/error" "^0.13.1"
+    "@xmpp/xml" "^0.13.1"
+    saslmechanisms "^0.1.1"
+
+"@xmpp/sasl@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/sasl/-/sasl-0.9.2.tgz#69b7995520c6330f4e5a8b67127ac942c94163ee"
+  integrity sha512-58Fi0jkGB5o9JnRhF9SIJ3c6YdZsrxIAGMA2qksvTJfKdytx0OqmhoFU4mTxfV4fckvTOboEvYZlDSqQ26XPqQ==
+  dependencies:
+    "@xmpp/base64" "^0.9.0"
+    "@xmpp/error" "^0.9.0"
+    "@xmpp/xml" "^0.9.2"
+    saslmechanisms "^0.1.1"
+
+"@xmpp/session-establishment@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/session-establishment/-/session-establishment-0.13.1.tgz#5fc6e6e2d96d78c4646c227620cdab69046c42ae"
+  integrity sha512-uba6BZeeSJtbHtU+pCumSiX/zuc9hUdN5dVRNjvRjr/ZcXLMuC5MroRyrld+fm/rQYQLJjF4BcIaxvysXTCAGA==
+  dependencies:
+    "@xmpp/xml" "^0.13.1"
+
+"@xmpp/session-establishment@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/session-establishment/-/session-establishment-0.9.2.tgz#f648879236df9c95a48bb08e4eb71b3c7be21ab9"
+  integrity sha512-p0WGTNxHusUOaNj72uVejAO94w8AvEwTMDfbtqHqMmotW4Lyw9xPgHgD7GFrCmU8S3OSWfyu36niXSgkrGJ2hg==
+  dependencies:
+    "@xmpp/xml" "^0.9.2"
+
+"@xmpp/starttls@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/starttls/-/starttls-0.13.1.tgz#20d9c399ea822985e5f9ba5636a9fa1cc0600cb9"
+  integrity sha512-rQumwpbD5+yclcXgPNDF7Jg1mzDFejHKZehD6JRti+Emsxayst/qFDq3uMO3x6P+nKexL4mMoKUtWHlJM7BUGw==
+  dependencies:
+    "@xmpp/events" "^0.13.1"
+    "@xmpp/tls" "^0.13.1"
+    "@xmpp/xml" "^0.13.1"
+
+"@xmpp/starttls@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/starttls/-/starttls-0.9.2.tgz#656ec7c80928863a37e026fdd5b4f6966f3c15fc"
+  integrity sha512-/rjpHb8RAN+LXug7aiMeDc8or/kBsy1Y8Cx/jVKN3aRTR6S35J/s+o9EB8apkZAPjNVO3pqcM3rh+K2wnA+f4w==
+  dependencies:
+    "@xmpp/events" "^0.9.0"
+    "@xmpp/xml" "^0.9.2"
+
+"@xmpp/stream-features@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/stream-features/-/stream-features-0.13.1.tgz#1a91aadaf027bfb1e4b5073bb0130ebad7f0e091"
+  integrity sha512-yZg+CXBRVXsIQzu4SI5UYlDZHmg3wY6YXy4MbeLiI4O8OQ/oCz6OHJlHKUnFl+cGmjDXvhN4Ga6pRhbEIIqM/g==
+
+"@xmpp/stream-features@^0.9.0":
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/@xmpp/stream-features/-/stream-features-0.9.0.tgz#5202943ccb9ad99c2750a705e40d80c24b2e5b7c"
+  integrity sha512-kO3sUE9+E1/0SoVe5KVbA/jrMIUp8vkk7kcEIzv3TBLQLlA0nnrbaTh3Wf1fvuOtJ8L2Tj1J06haLORY6h6rHQ==
+
+"@xmpp/stream-management@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/stream-management/-/stream-management-0.13.1.tgz#643b94ed243b81f8a6f74937a6906a21dd8ce889"
+  integrity sha512-06dhJAlGn+MU5ESrvIUg5xOS7azVE0swq86cx4SCv7t5dWL1WBj4xg2qigLn1hMnFkDw0bO/SOikXTxqGii/hA==
+  dependencies:
+    "@xmpp/xml" "^0.13.1"
+
+"@xmpp/tcp@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/tcp/-/tcp-0.13.1.tgz#7a7a08791282a9c8a319cc9f6feee1b94c1bdde6"
+  integrity sha512-N/AQBT+6Updb/E8A1SYdMbIJGaRFG8+7+bkm9MLw44UsihA6Yg0fmvC02O+BjNg3tXGkcMYLhu/8NYpjK4NlQg==
+  dependencies:
+    "@xmpp/connection-tcp" "^0.13.1"
+
+"@xmpp/tcp@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/tcp/-/tcp-0.9.2.tgz#d7810e68cca65078500f3d23ac4e8901474aae24"
+  integrity sha512-5sQPK6XDrEBxGGNTbyDlowBFIz04wSgnfmgw1jtz13v6fSK6ADypSX4sHNxBwhBa9RQ5kc/xEPWUU/p47AxCPQ==
+  dependencies:
+    "@xmpp/connection-tcp" "^0.9.2"
+
+"@xmpp/tls@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/tls/-/tls-0.13.1.tgz#bf3891a0fd381478cc90f88358b7e8b706209bd4"
+  integrity sha512-ecOmnrZmRbMMPDdvDNirw7sYQHt//YV7UJgfS4c9M+R5ljP2eUJiAiotEEykjKJ6CJPMMxdTnrLLP3ullsgfog==
+  dependencies:
+    "@xmpp/connection" "^0.13.1"
+    "@xmpp/connection-tcp" "^0.13.1"
+
+"@xmpp/tls@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/tls/-/tls-0.9.2.tgz#bc826e36bd65dc3b2516e4a563dc53ac8307746c"
+  integrity sha512-Iqp8xKFwV7pLYS0Bl5GAC0UtHYhGw9TZfKb4Nc4FDewkL74WdFsIcXqZuGo0Ry4xnJ8TBSkWi2oEE1hYGUytAw==
+  dependencies:
+    "@xmpp/connection" "^0.9.2"
+    "@xmpp/connection-tcp" "^0.9.2"
+
+"@xmpp/websocket@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/websocket/-/websocket-0.13.1.tgz#a94196555244a0490fa58046cce4322f84fbf58e"
+  integrity sha512-UyMYyy/0Cm2UtVoAlhfV31u6LzGrBUU0h7I0qGCq1yYPQpscehNl8lXE4vmB8OfpeDvSZmvGk2vJAvGxzunoDQ==
+  dependencies:
+    "@xmpp/connection" "^0.13.1"
+    "@xmpp/xml" "^0.13.1"
+    ws "^8.4.0"
+
+"@xmpp/websocket@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/websocket/-/websocket-0.9.2.tgz#f8f4aabaaa0ce429f573a7cc2c0534ea16b38dde"
+  integrity sha512-6Bhv16psT4qZBhmhhd8T6wwCXGBhOkXCQCH2954gHqbMTKsZL3xkL6WM9O2doiHO1ffvLERy/ofOoPSLfOLPzA==
+  dependencies:
+    "@xmpp/connection" "^0.9.2"
+    "@xmpp/xml" "^0.9.2"
+    ws "^7.0.0"
+
+"@xmpp/xml@^0.13.0", "@xmpp/xml@^0.13.1":
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/@xmpp/xml/-/xml-0.13.1.tgz#856b992dec1978fba89e06bd4718d91a31188916"
+  integrity sha512-GMfYB3PKY9QzsMnl3dPohgPBGd1JQTBanKOaZexJCSYJN2cdYLU2HGhjMtDlGSno6h9U+t0oO7r0igsJwyigwg==
+  dependencies:
+    ltx "^3.0.0"
+
+"@xmpp/xml@^0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@xmpp/xml/-/xml-0.9.2.tgz#7d02ba15820b81853833a86531abe3e0d1f9abd5"
+  integrity sha512-xhPT3/EtTK0gsOLYyYmvoQncof1EQnE8P2eVBtUy/3Mt5FKhZI+gNsTkn+ORYjgkyHWfupIa9pN0/m7A89TCdA==
+  dependencies:
+    ltx "^2.8.1"
+
+"@yetzt/binary-search-tree@^0.2.6":
+  version "0.2.6"
+  resolved "https://registry.yarnpkg.com/@yetzt/binary-search-tree/-/binary-search-tree-0.2.6.tgz#91b2d861c089da0bfbeceb5deeca57b81c4210ec"
+  integrity sha512-e/8wt8AAumI8VK5sv09b3IgWuRoblXJ5z0SQYfrL2nap89oKihvVaP1zy3FzD5NaeRi1X0gdXZA9lB3QAZILBg==
+
+"@yetzt/nedb@1.8.0":
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/@yetzt/nedb/-/nedb-1.8.0.tgz#c0e03bfd5f9e76045d4e4baacbebd271cb221258"
+  integrity sha512-1hUV/eIPSCRb4Vs9dgLekBCCawWNtf29immIF9kvzxnnnEoWgyFSDZgFvlFCiQ3Bzo8ifXn92HDS3l9fNvmtzA==
+  dependencies:
+    "@yetzt/binary-search-tree" "^0.2.6"
+    async "^3.2.0"
+    localforage "^1.9.0"
+    mkdirp "^1.0.4"
+    underscore "^1.13.1"
+
+abab@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
+  integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
+
+abbrev@1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+abstract-logging@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839"
+  integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==
+
+accepts@~1.3.5, accepts@~1.3.8:
+  version "1.3.8"
+  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
+  integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
+  dependencies:
+    mime-types "~2.1.34"
+    negotiator "0.6.3"
+
+acebase-core@^1.27.5:
+  version "1.27.5"
+  resolved "https://registry.yarnpkg.com/acebase-core/-/acebase-core-1.27.5.tgz#58697bdeae60250d009619b07fb60fe8a8123d0e"
+  integrity sha512-mogTRyHg+5/TYp6puXcdhTUmupPLGyWSBpzf/1gXANEk/QffaPvEFGzolJ5fTIVFl3UhVoYcUj2jEDbQHmGGMQ==
+  optionalDependencies:
+    rxjs ">= 5.x <= 7.x"
+
+acebase@1.29.5:
+  version "1.29.5"
+  resolved "https://registry.yarnpkg.com/acebase/-/acebase-1.29.5.tgz#0b1303931528e11fe9274f9ef348c71f11fcb439"
+  integrity sha512-NLA+0nLm2+Rg10M4IKfCpIYQN1Fp3bb8meil+8ttDOUqydvr2OnmpxA5F9COzb3R+OH652IKEelUBTDQlsoAnw==
+  dependencies:
+    acebase-core "^1.27.5"
+    unidecode "^0.1.8"
+
+acme-client@4.2.5:
+  version "4.2.5"
+  resolved "https://registry.yarnpkg.com/acme-client/-/acme-client-4.2.5.tgz#d18e29aadb38fbc8c6d4ce289f26392b51b5a698"
+  integrity sha512-dtnck4sdZ2owFLTC73Ewjx0kmvsRjTRgaOc8UztCNODT+lr1DXj0tiuUXjeY4LAzZryXCtCib/E+KD8NYeP1aw==
+  dependencies:
+    axios "0.26.1"
+    backo2 "^1.0.0"
+    bluebird "^3.5.0"
+    debug "^4.1.1"
+    node-forge "^1.3.0"
+
+acorn-jsx@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+  integrity sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==
+  dependencies:
+    acorn "^3.0.4"
+
+acorn@^3.0.4, acorn@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+  integrity sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==
+
+aedes-packet@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/aedes-packet/-/aedes-packet-1.0.0.tgz#2eea46f97c925b0a1f4d03f4f1fe5ef887b100f1"
+  integrity sha512-zGcB+O60jjgSo5dGZd9wnSfQWi0oqBFQDe9Br0vqWaSVtkOc0zkLg0xRKSppbly56J6q9EHSteHdrHjW90+h4A==
+
+aedes-persistence@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/aedes-persistence/-/aedes-persistence-6.0.0.tgz#e9eb15288a3be1a8e9fc7f231df2237ca0978eb1"
+  integrity sha512-LVk80Mg6bCfQgbcyo16ipuFo5KdORVxtzFAMmaisE3Hkydwt5H9I02gmF5IPADF5zPk0RfYxumQ4IIV1+jEp7Q==
+  dependencies:
+    aedes-packet "^1.0.0"
+    from2 "^2.1.0"
+    qlobber "^3.0.2"
+
+aedes@0.39.0:
+  version "0.39.0"
+  resolved "https://registry.yarnpkg.com/aedes/-/aedes-0.39.0.tgz#125e2f1e53a600f3a0bfde26431997deed27f117"
+  integrity sha512-AV7pN4Ogt4tNNgNNabKjsC7Cw7bMMNjQH1hua4zQV0TFf/QEBPVu1YDZMH3Lrrt2XziydQzmBrBc5aAQvAq5FQ==
+  dependencies:
+    aedes-packet "^1.0.0"
+    aedes-persistence "^6.0.0"
+    bulk-write-stream "^2.0.0"
+    end-of-stream "^1.4.1"
+    fastfall "^1.5.1"
+    fastparallel "^2.3.0"
+    fastseries "^1.7.2"
+    from2 "^2.3.0"
+    mqemitter "^3.0.0"
+    mqtt-packet "^6.1.2"
+    pump "^3.0.0"
+    retimer "^2.0.0"
+    reusify "^1.0.4"
+    shortid "^2.2.14"
+    through2 "^3.0.1"
+    uuid "^3.3.2"
+
+aes-js@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a"
+  integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==
+
+agent-base@6, agent-base@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug "4"
+
+agent-base@^7.0.2:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434"
+  integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==
+  dependencies:
+    debug "^4.3.4"
+
+agentkeepalive@^4.1.3:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923"
+  integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==
+  dependencies:
+    humanize-ms "^1.2.1"
+
+aggregate-error@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+  dependencies:
+    clean-stack "^2.0.0"
+    indent-string "^4.0.0"
+
+ajv@^6.12.3:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+align-text@^0.1.1, align-text@^0.1.3:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+  integrity sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==
+  dependencies:
+    kind-of "^3.0.2"
+    longest "^1.0.1"
+    repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+  integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==
+
+ansi-escape-sequences@^2.2.1, ansi-escape-sequences@^2.2.2:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/ansi-escape-sequences/-/ansi-escape-sequences-2.2.2.tgz#174c78d6f8b7de75f8957ae81c7f72210c701635"
+  integrity sha512-8UeLcAdY7X4ZUBiuWoxqHfPGIUwJ5Vz7ujKdMUWbR0DwiBziHJbEMYzTvt7OQNtFb2NHxSxa3COicuPNgvE0XQ==
+  dependencies:
+    array-back "^1.0.2"
+    collect-all "~0.2.1"
+
+ansi-escape-sequences@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz#1c18394b6af9b76ff9a63509fa497669fd2ce53e"
+  integrity sha512-nOj2mwGB2lJzx9YDqaiI77vYh4SWcOCTday6kdtx6ojUk1s1HqSiK604UIq8jlBVC0UBsX7Bph3SfOf9QsJerA==
+  dependencies:
+    array-back "^1.0.3"
+
+ansi-escapes@^1.1.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+  integrity sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==
+
+ansi-regex@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+  integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==
+
+ansi-regex@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
+  integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
+
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+  integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+ansi-styles@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+anymatch@^1.3.0:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
+  integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==
+  dependencies:
+    micromatch "^2.1.5"
+    normalize-path "^2.0.0"
+
+anymatch@~3.1.2:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+app-usage-stats@^0.4.0:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/app-usage-stats/-/app-usage-stats-0.4.1.tgz#97eb9b89b5678fa2ddc9793b1298628cc218429f"
+  integrity sha512-elJOSZaWLWycmmQ5R6QvbKe0s3drumsU8JOJNvE4e/Pvjg52g65AAlKsCr65Kd1hAfr0I2E+AWgPlJQ/LZCDEw==
+  dependencies:
+    array-back "^1.0.4"
+    core-js "^2.4.1"
+    feature-detect-es6 "^1.3.1"
+    home-path "^1.0.3"
+    test-value "^2.1.0"
+    usage-stats "^0.8.2"
+
+append-transform@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab"
+  integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==
+  dependencies:
+    default-require-extensions "^2.0.0"
+
+"aproba@^1.0.3 || ^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
+  integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
+
+archiver-utils@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2"
+  integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==
+  dependencies:
+    glob "^7.1.4"
+    graceful-fs "^4.2.0"
+    lazystream "^1.0.0"
+    lodash.defaults "^4.2.0"
+    lodash.difference "^4.5.0"
+    lodash.flatten "^4.4.0"
+    lodash.isplainobject "^4.0.6"
+    lodash.union "^4.6.0"
+    normalize-path "^3.0.0"
+    readable-stream "^2.0.0"
+
+archiver-utils@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-3.0.4.tgz#a0d201f1cf8fce7af3b5a05aea0a337329e96ec7"
+  integrity sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==
+  dependencies:
+    glob "^7.2.3"
+    graceful-fs "^4.2.0"
+    lazystream "^1.0.0"
+    lodash.defaults "^4.2.0"
+    lodash.difference "^4.5.0"
+    lodash.flatten "^4.4.0"
+    lodash.isplainobject "^4.0.6"
+    lodash.union "^4.6.0"
+    normalize-path "^3.0.0"
+    readable-stream "^3.6.0"
+
+archiver-zip-encrypted@1.0.11:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/archiver-zip-encrypted/-/archiver-zip-encrypted-1.0.11.tgz#43a7b9ebba56c6689132b58e556df13e6ddd5878"
+  integrity sha512-uXQzXSrZKW7TZ1g4BhfJFt1KjlKqY4SnCgDS6QhQKJoAriPXPKqhFQbvaIirWcR0pi5h3UF5Ktau7FVnS3AsGw==
+  dependencies:
+    aes-js "^3.1.2"
+    archiver "^5.3.0"
+    archiver-utils "^2.1.0"
+    buffer-crc32 "^0.2.13"
+    compress-commons "^4.1.1"
+    crc32-stream "^4.0.2"
+    zip-stream "^4.1.0"
+
+archiver@5.3.2, archiver@^5.3.0:
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0"
+  integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==
+  dependencies:
+    archiver-utils "^2.1.0"
+    async "^3.2.4"
+    buffer-crc32 "^0.2.1"
+    readable-stream "^3.6.0"
+    readdir-glob "^1.1.2"
+    tar-stream "^2.2.0"
+    zip-stream "^4.1.0"
+
+archy@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
+  integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==
+
+are-we-there-yet@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c"
+  integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==
+  dependencies:
+    delegates "^1.0.0"
+    readable-stream "^3.6.0"
+
+are-we-there-yet@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
+  integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
+  dependencies:
+    delegates "^1.0.0"
+    readable-stream "^3.6.0"
+
+argparse@^1.0.7:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  dependencies:
+    sprintf-js "~1.0.2"
+
+arr-diff@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+  integrity sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==
+  dependencies:
+    arr-flatten "^1.0.1"
+
+arr-diff@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+  integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+  integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
+
+array-back@^1.0.2, array-back@^1.0.3, array-back@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b"
+  integrity sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==
+  dependencies:
+    typical "^2.6.0"
+
+array-buffer-byte-length@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
+  integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
+  dependencies:
+    call-bind "^1.0.2"
+    is-array-buffer "^3.0.1"
+
+array-each@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
+  integrity sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==
+
+array-flatten@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+  integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
+
+array-slice@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4"
+  integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==
+
+array-tools@^1.0.6, array-tools@^1.1.0, array-tools@^1.1.4, array-tools@^1.8.4:
+  version "1.8.6"
+  resolved "https://registry.yarnpkg.com/array-tools/-/array-tools-1.8.6.tgz#145771f7f9c94e98cc5ea4196a99b8323aee18ae"
+  integrity sha512-x7nT/yV2Mv6whp1BQw2BL2+8bRCu1Wb8sB+F0uNa/ZiP4WjpA6i9JKGtlDlWj2ggo49bPQMM/Du/wMururI/Bg==
+  dependencies:
+    object-tools "^1.6.1"
+    typical "^2.1"
+
+array-tools@^2:
+  version "2.0.9"
+  resolved "https://registry.yarnpkg.com/array-tools/-/array-tools-2.0.9.tgz#5a511de7a41be0eec9ffdcd4912d0af9f0caca35"
+  integrity sha512-R2neDbbXhrU0EaXIDG48RNS9fqdjMkaqZK37d37LaCvxZ4JaQ6ELNbxlQB2FVdQcj7ZlZCi97iZtz0UET6xPrA==
+  dependencies:
+    ansi-escape-sequences "^2.2.2"
+    array-back "^1.0.2"
+    collect-json "^1.0.7"
+    filter-where "^1.0.1"
+    object-get "^2.0.0"
+    reduce-extract "^1.0.0"
+    reduce-flatten "^1.0.0"
+    reduce-unique "^1.0.0"
+    reduce-without "^1.0.0"
+    sort-array "^1.0.0"
+    test-value "^1.0.1"
+
+array-unique@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+  integrity sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==
+
+array-unique@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+  integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==
+
+array.prototype.reduce@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5"
+  integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.2.0"
+    es-abstract "^1.22.1"
+    es-array-method-boxes-properly "^1.0.0"
+    is-string "^1.0.7"
+
+arraybuffer.prototype.slice@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12"
+  integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==
+  dependencies:
+    array-buffer-byte-length "^1.0.0"
+    call-bind "^1.0.2"
+    define-properties "^1.2.0"
+    es-abstract "^1.22.1"
+    get-intrinsic "^1.2.1"
+    is-array-buffer "^3.0.2"
+    is-shared-array-buffer "^1.0.2"
+
+asap@~2.0.3:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+  integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
+
+asn1.js@^5.3.0:
+  version "5.4.1"
+  resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
+  integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
+  dependencies:
+    bn.js "^4.0.0"
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+    safer-buffer "^2.1.0"
+
+asn1@0.1.11:
+  version "0.1.11"
+  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7"
+  integrity sha512-Fh9zh3G2mZ8qM/kwsiKwL2U2FmXxVsboP4x1mXjnhKHv3SmzaBZoYvxEQJz/YS2gnCgd8xlAVWcZnQyC9qZBsA==
+
+asn1@^0.2.4, asn1@^0.2.6, asn1@~0.2.3:
+  version "0.2.6"
+  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
+  integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
+  dependencies:
+    safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+  integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
+
+assert-plus@^0.1.5:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160"
+  integrity sha512-brU24g7ryhRwGCI2y+1dGQmQXiZF7TtIj583S96y0jjdajIe6wn8BuXyELYhvD22dtIxDQVFk04YTJwwdwOYJw==
+
+assign-symbols@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+  integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==
+
+async-each@^1.0.0:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77"
+  integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==
+
+async-limiter@~1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+  integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async-mutex@^0.3.0:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.3.2.tgz#1485eda5bda1b0ec7c8df1ac2e815757ad1831df"
+  integrity sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==
+  dependencies:
+    tslib "^2.3.1"
+
+async@^2.0.1:
+  version "2.6.4"
+  resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
+  integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
+  dependencies:
+    lodash "^4.17.14"
+
+async@^3.2.0, async@^3.2.3, async@^3.2.4, async@~3.2.0:
+  version "3.2.5"
+  resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66"
+  integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==
+
+async@~0.9.0:
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+  integrity sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+atob@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+available-typed-arrays@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
+  integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+
+aws-sign2@~0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+  integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==
+
+aws-sign@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/aws-sign/-/aws-sign-0.3.0.tgz#3d81ca69b474b1e16518728b51c24ff0bbedc6e9"
+  integrity sha512-pEMJAknifcXqXqYVXzGPIu8mJvxtJxIdpVpAs8HNS+paT+9srRUDMQn+3hULS7WbLmttcmvgMvnDcFujqXJyPw==
+
+aws4@^1.12.0, aws4@^1.8.0:
+  version "1.12.0"
+  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3"
+  integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==
+
+axios@0.26.1, axios@^0.26.1:
+  version "0.26.1"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9"
+  integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==
+  dependencies:
+    follow-redirects "^1.14.8"
+
+axios@^0.21.1:
+  version "0.21.4"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
+  integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
+  dependencies:
+    follow-redirects "^1.14.0"
+
+axios@^0.27.2:
+  version "0.27.2"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
+  integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
+  dependencies:
+    follow-redirects "^1.14.9"
+    form-data "^4.0.0"
+
+axios@^1.6.0:
+  version "1.6.7"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7"
+  integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==
+  dependencies:
+    follow-redirects "^1.15.4"
+    form-data "^4.0.0"
+    proxy-from-env "^1.1.0"
+
+babel-cli@^6.16.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1"
+  integrity sha512-wau+BDtQfuSBGQ9PzzFL3REvR9Sxnd4LKwtcHAiPjhugA7K/80vpHXafj+O5bAqJOuSefjOx5ZJnNSR2J1Qw6Q==
+  dependencies:
+    babel-core "^6.26.0"
+    babel-polyfill "^6.26.0"
+    babel-register "^6.26.0"
+    babel-runtime "^6.26.0"
+    commander "^2.11.0"
+    convert-source-map "^1.5.0"
+    fs-readdir-recursive "^1.0.0"
+    glob "^7.1.2"
+    lodash "^4.17.4"
+    output-file-sync "^1.1.2"
+    path-is-absolute "^1.0.1"
+    slash "^1.0.0"
+    source-map "^0.5.6"
+    v8flags "^2.1.1"
+  optionalDependencies:
+    chokidar "^1.6.1"
+
+babel-code-frame@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+  integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==
+  dependencies:
+    chalk "^1.1.3"
+    esutils "^2.0.2"
+    js-tokens "^3.0.2"
+
+babel-core@^6.26.0:
+  version "6.26.3"
+  resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
+  integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
+  dependencies:
+    babel-code-frame "^6.26.0"
+    babel-generator "^6.26.0"
+    babel-helpers "^6.24.1"
+    babel-messages "^6.23.0"
+    babel-register "^6.26.0"
+    babel-runtime "^6.26.0"
+    babel-template "^6.26.0"
+    babel-traverse "^6.26.0"
+    babel-types "^6.26.0"
+    babylon "^6.18.0"
+    convert-source-map "^1.5.1"
+    debug "^2.6.9"
+    json5 "^0.5.1"
+    lodash "^4.17.4"
+    minimatch "^3.0.4"
+    path-is-absolute "^1.0.1"
+    private "^0.1.8"
+    slash "^1.0.0"
+    source-map "^0.5.7"
+
+babel-generator@^6.26.0:
+  version "6.26.1"
+  resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
+  integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
+  dependencies:
+    babel-messages "^6.23.0"
+    babel-runtime "^6.26.0"
+    babel-types "^6.26.0"
+    detect-indent "^4.0.0"
+    jsesc "^1.3.0"
+    lodash "^4.17.4"
+    source-map "^0.5.7"
+    trim-right "^1.0.1"
+
+babel-helper-call-delegate@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
+  integrity sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==
+  dependencies:
+    babel-helper-hoist-variables "^6.24.1"
+    babel-runtime "^6.22.0"
+    babel-traverse "^6.24.1"
+    babel-types "^6.24.1"
+
+babel-helper-define-map@^6.24.1:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
+  integrity sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA==
+  dependencies:
+    babel-helper-function-name "^6.24.1"
+    babel-runtime "^6.26.0"
+    babel-types "^6.26.0"
+    lodash "^4.17.4"
+
+babel-helper-function-name@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
+  integrity sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==
+  dependencies:
+    babel-helper-get-function-arity "^6.24.1"
+    babel-runtime "^6.22.0"
+    babel-template "^6.24.1"
+    babel-traverse "^6.24.1"
+    babel-types "^6.24.1"
+
+babel-helper-get-function-arity@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
+  integrity sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==
+  dependencies:
+    babel-runtime "^6.22.0"
+    babel-types "^6.24.1"
+
+babel-helper-hoist-variables@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
+  integrity sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==
+  dependencies:
+    babel-runtime "^6.22.0"
+    babel-types "^6.24.1"
+
+babel-helper-optimise-call-expression@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
+  integrity sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA==
+  dependencies:
+    babel-runtime "^6.22.0"
+    babel-types "^6.24.1"
+
+babel-helper-regex@^6.24.1:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
+  integrity sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==
+  dependencies:
+    babel-runtime "^6.26.0"
+    babel-types "^6.26.0"
+    lodash "^4.17.4"
+
+babel-helper-replace-supers@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
+  integrity sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw==
+  dependencies:
+    babel-helper-optimise-call-expression "^6.24.1"
+    babel-messages "^6.23.0"
+    babel-runtime "^6.22.0"
+    babel-template "^6.24.1"
+    babel-traverse "^6.24.1"
+    babel-types "^6.24.1"
+
+babel-helpers@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+  integrity sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ==
+  dependencies:
+    babel-runtime "^6.22.0"
+    babel-template "^6.24.1"
+
+babel-messages@^6.23.0:
+  version "6.23.0"
+  resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+  integrity sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-check-es2015-constants@^6.22.0:
+  version "6.22.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
+  integrity sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-jsx-pragmatic@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-jsx-pragmatic/-/babel-plugin-jsx-pragmatic-1.0.2.tgz#41e2beb8642235f34b2a7ab12ca39e07201b8e59"
+  integrity sha512-+qeGXSbHZwinZzO6R3wP+6XDKup83Pgg2B3TQt2zwfDdgC7NqT9Kd3ws7iqk53zAO/8iOIRU6VUyUzt2LDE3Eg==
+  dependencies:
+    babel-plugin-syntax-jsx "^6.0.0"
+
+babel-plugin-syntax-jsx@^6.0.0:
+  version "6.18.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+  integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==
+
+babel-plugin-transform-es2015-arrow-functions@^6.22.0:
+  version "6.22.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
+  integrity sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg==
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
+  version "6.22.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
+  integrity sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A==
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-block-scoping@^6.24.1:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
+  integrity sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw==
+  dependencies:
+    babel-runtime "^6.26.0"
+    babel-template "^6.26.0"
+    babel-traverse "^6.26.0"
+    babel-types "^6.26.0"
+    lodash "^4.17.4"
+
+babel-plugin-transform-es2015-classes@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
+  integrity sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag==
+  dependencies:
+    babel-helper-define-map "^6.24.1"
+    babel-helper-function-name "^6.24.1"
+    babel-helper-optimise-call-expression "^6.24.1"
+    babel-helper-replace-supers "^6.24.1"
+    babel-messages "^6.23.0"
+    babel-runtime "^6.22.0"
+    babel-template "^6.24.1"
+    babel-traverse "^6.24.1"
+    babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-computed-properties@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
+  integrity sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw==
+  dependencies:
+    babel-runtime "^6.22.0"
+    babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-destructuring@^6.22.0:
+  version "6.23.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
+  integrity sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-duplicate-keys@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
+  integrity sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug==
+  dependencies:
+    babel-runtime "^6.22.0"
+    babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-for-of@^6.22.0:
+  version "6.23.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
+  integrity sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw==
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-function-name@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
+  integrity sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==
+  dependencies:
+    babel-helper-function-name "^6.24.1"
+    babel-runtime "^6.22.0"
+    babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-literals@^6.22.0:
+  version "6.22.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
+  integrity sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ==
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-modules-amd@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
+  integrity sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA==
+  dependencies:
+    babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
+    babel-runtime "^6.22.0"
+    babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
+  version "6.26.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
+  integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==
+  dependencies:
+    babel-plugin-transform-strict-mode "^6.24.1"
+    babel-runtime "^6.26.0"
+    babel-template "^6.26.0"
+    babel-types "^6.26.0"
+
+babel-plugin-transform-es2015-modules-systemjs@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
+  integrity sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg==
+  dependencies:
+    babel-helper-hoist-variables "^6.24.1"
+    babel-runtime "^6.22.0"
+    babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-modules-umd@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
+  integrity sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw==
+  dependencies:
+    babel-plugin-transform-es2015-modules-amd "^6.24.1"
+    babel-runtime "^6.22.0"
+    babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-object-super@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
+  integrity sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA==
+  dependencies:
+    babel-helper-replace-supers "^6.24.1"
+    babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-parameters@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
+  integrity sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==
+  dependencies:
+    babel-helper-call-delegate "^6.24.1"
+    babel-helper-get-function-arity "^6.24.1"
+    babel-runtime "^6.22.0"
+    babel-template "^6.24.1"
+    babel-traverse "^6.24.1"
+    babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-shorthand-properties@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
+  integrity sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw==
+  dependencies:
+    babel-runtime "^6.22.0"
+    babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-spread@^6.22.0:
+  version "6.22.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
+  integrity sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-sticky-regex@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
+  integrity sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==
+  dependencies:
+    babel-helper-regex "^6.24.1"
+    babel-runtime "^6.22.0"
+    babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-template-literals@^6.22.0:
+  version "6.22.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
+  integrity sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg==
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-typeof-symbol@^6.22.0:
+  version "6.23.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
+  integrity sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw==
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-unicode-regex@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
+  integrity sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==
+  dependencies:
+    babel-helper-regex "^6.24.1"
+    babel-runtime "^6.22.0"
+    regexpu-core "^2.0.0"
+
+babel-plugin-transform-regenerator@^6.24.1:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
+  integrity sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg==
+  dependencies:
+    regenerator-transform "^0.10.0"
+
+babel-plugin-transform-strict-mode@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
+  integrity sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==
+  dependencies:
+    babel-runtime "^6.22.0"
+    babel-types "^6.24.1"
+
+babel-polyfill@^6.13.0, babel-polyfill@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
+  integrity sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==
+  dependencies:
+    babel-runtime "^6.26.0"
+    core-js "^2.5.0"
+    regenerator-runtime "^0.10.5"
+
+babel-preset-es2015@^6.16.0:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939"
+  integrity sha512-XfwUqG1Ry6R43m4Wfob+vHbIVBIqTg/TJY4Snku1iIzeH7mUnwHA8Vagmv+ZQbPwhS8HgsdQvy28Py3k5zpoFQ==
+  dependencies:
+    babel-plugin-check-es2015-constants "^6.22.0"
+    babel-plugin-transform-es2015-arrow-functions "^6.22.0"
+    babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
+    babel-plugin-transform-es2015-block-scoping "^6.24.1"
+    babel-plugin-transform-es2015-classes "^6.24.1"
+    babel-plugin-transform-es2015-computed-properties "^6.24.1"
+    babel-plugin-transform-es2015-destructuring "^6.22.0"
+    babel-plugin-transform-es2015-duplicate-keys "^6.24.1"
+    babel-plugin-transform-es2015-for-of "^6.22.0"
+    babel-plugin-transform-es2015-function-name "^6.24.1"
+    babel-plugin-transform-es2015-literals "^6.22.0"
+    babel-plugin-transform-es2015-modules-amd "^6.24.1"
+    babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
+    babel-plugin-transform-es2015-modules-systemjs "^6.24.1"
+    babel-plugin-transform-es2015-modules-umd "^6.24.1"
+    babel-plugin-transform-es2015-object-super "^6.24.1"
+    babel-plugin-transform-es2015-parameters "^6.24.1"
+    babel-plugin-transform-es2015-shorthand-properties "^6.24.1"
+    babel-plugin-transform-es2015-spread "^6.22.0"
+    babel-plugin-transform-es2015-sticky-regex "^6.24.1"
+    babel-plugin-transform-es2015-template-literals "^6.22.0"
+    babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
+    babel-plugin-transform-es2015-unicode-regex "^6.24.1"
+    babel-plugin-transform-regenerator "^6.24.1"
+
+babel-register@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+  integrity sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A==
+  dependencies:
+    babel-core "^6.26.0"
+    babel-runtime "^6.26.0"
+    core-js "^2.5.0"
+    home-or-tmp "^2.0.0"
+    lodash "^4.17.4"
+    mkdirp "^0.5.1"
+    source-map-support "^0.4.15"
+
+babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+  integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==
+  dependencies:
+    core-js "^2.4.0"
+    regenerator-runtime "^0.11.0"
+
+babel-template@^6.24.1, babel-template@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+  integrity sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==
+  dependencies:
+    babel-runtime "^6.26.0"
+    babel-traverse "^6.26.0"
+    babel-types "^6.26.0"
+    babylon "^6.18.0"
+    lodash "^4.17.4"
+
+babel-traverse@^6.24.1, babel-traverse@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+  integrity sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==
+  dependencies:
+    babel-code-frame "^6.26.0"
+    babel-messages "^6.23.0"
+    babel-runtime "^6.26.0"
+    babel-types "^6.26.0"
+    babylon "^6.18.0"
+    debug "^2.6.8"
+    globals "^9.18.0"
+    invariant "^2.2.2"
+    lodash "^4.17.4"
+
+babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+  integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==
+  dependencies:
+    babel-runtime "^6.26.0"
+    esutils "^2.0.2"
+    lodash "^4.17.4"
+    to-fast-properties "^1.0.3"
+
+babylon@^6.18.0:
+  version "6.18.0"
+  resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+  integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+backo2@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+  integrity sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==
+
+backoff@^2.5.0:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f"
+  integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==
+  dependencies:
+    precond "0.2"
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base-64@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb"
+  integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==
+
+base-64@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/base-64/-/base-64-1.0.0.tgz#09d0f2084e32a3fd08c2475b973788eee6ae8f4a"
+  integrity sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==
+
+base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.3.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+base64url@3.x.x:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d"
+  integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==
+
+base@^0.11.1:
+  version "0.11.2"
+  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+  dependencies:
+    cache-base "^1.0.1"
+    class-utils "^0.3.5"
+    component-emitter "^1.2.1"
+    define-property "^1.0.0"
+    isobject "^3.0.1"
+    mixin-deep "^1.2.0"
+    pascalcase "^0.1.1"
+
+bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+  integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==
+  dependencies:
+    tweetnacl "^0.14.3"
+
+bcryptjs@^2.4.0:
+  version "2.4.3"
+  resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb"
+  integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==
+
+big-integer@^1.6.48:
+  version "1.6.52"
+  resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
+  integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
+
+bignumber.js@^9.0.0, bignumber.js@^9.0.1:
+  version "9.1.2"
+  resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c"
+  integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==
+
+binary-extensions@^1.0.0:
+  version "1.13.1"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+  integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+binary-search@1.3.6:
+  version "1.3.6"
+  resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.6.tgz#e32426016a0c5092f0f3598836a1c7da3560565c"
+  integrity sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==
+
+bindings@^1.1.1, bindings@^1.5.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+  integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+  dependencies:
+    file-uri-to-path "1.0.0"
+
+bitwise-xor@0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/bitwise-xor/-/bitwise-xor-0.0.0.tgz#040a8172b5bb8cc562b0b7119f230b2a1a780e3d"
+  integrity sha512-3eOkZMBO04dRBn7551o6+IX9Ua7V+B/IubS7sffoa/VC3jdBM4YbuD+LjUNFojY7H+gptMUdTaQgHWTce4L3kw==
+
+bl@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5"
+  integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==
+  dependencies:
+    readable-stream "^2.3.5"
+    safe-buffer "^5.1.1"
+
+bl@^4.0.2, bl@^4.0.3:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+  integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+  dependencies:
+    buffer "^5.5.0"
+    inherits "^2.0.4"
+    readable-stream "^3.4.0"
+
+bluebird@^2.6.2:
+  version "2.11.0"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
+  integrity sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==
+
+bluebird@^3.3.5, bluebird@^3.5.0:
+  version "3.7.2"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bluebird@~3.4.6:
+  version "3.4.7"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
+  integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==
+
+bn.js@^4.0.0:
+  version "4.12.0"
+  resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+  integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+
+body-parser@1.20.1:
+  version "1.20.1"
+  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
+  integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==
+  dependencies:
+    bytes "3.1.2"
+    content-type "~1.0.4"
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    on-finished "2.4.1"
+    qs "6.11.0"
+    raw-body "2.5.1"
+    type-is "~1.6.18"
+    unpipe "1.0.0"
+
+body-parser@1.20.2:
+  version "1.20.2"
+  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
+  integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
+  dependencies:
+    bytes "3.1.2"
+    content-type "~1.0.5"
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    on-finished "2.4.1"
+    qs "6.11.0"
+    raw-body "2.5.2"
+    type-is "~1.6.18"
+    unpipe "1.0.0"
+
+boom@0.4.x:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b"
+  integrity sha512-OvfN8y1oAxxphzkl2SnCS+ztV/uVKTATtgLjWYg/7KwcNyf3rzpHxNQJZCKtsZd4+MteKczhWbSjtEX4bGgU9g==
+  dependencies:
+    hoek "0.9.x"
+
+bowser@^2.11.0:
+  version "2.11.0"
+  resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f"
+  integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==
+
+brace-expansion@^1.0.0, brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+braces@^1.8.2:
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+  integrity sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==
+  dependencies:
+    expand-range "^1.8.1"
+    preserve "^0.2.0"
+    repeat-element "^1.1.2"
+
+braces@^2.3.1:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+  dependencies:
+    arr-flatten "^1.1.0"
+    array-unique "^0.3.2"
+    extend-shallow "^2.0.1"
+    fill-range "^4.0.0"
+    isobject "^3.0.1"
+    repeat-element "^1.1.2"
+    snapdragon "^0.8.1"
+    snapdragon-node "^2.0.1"
+    split-string "^3.0.2"
+    to-regex "^3.0.1"
+
+braces@^3.0.2, braces@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+brotli@^1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48"
+  integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==
+  dependencies:
+    base64-js "^1.1.2"
+
+browserslist@^4.22.2:
+  version "4.22.3"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6"
+  integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==
+  dependencies:
+    caniuse-lite "^1.0.30001580"
+    electron-to-chromium "^1.4.648"
+    node-releases "^2.0.14"
+    update-browserslist-db "^1.0.13"
+
+bson@^1.1.4:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.6.tgz#fb819be9a60cd677e0853aee4ca712a785d6618a"
+  integrity sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==
+
+bson@^4.7.0:
+  version "4.7.2"
+  resolved "https://registry.yarnpkg.com/bson/-/bson-4.7.2.tgz#320f4ad0eaf5312dd9b45dc369cc48945e2a5f2e"
+  integrity sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==
+  dependencies:
+    buffer "^5.6.0"
+
+buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3:
+  version "0.2.13"
+  resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+  integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+
+buffer-equal-constant-time@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+  integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer-writer@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04"
+  integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
+
+buffer@^5.5.0, buffer@^5.6.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+  integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+  dependencies:
+    base64-js "^1.3.1"
+    ieee754 "^1.1.13"
+
+buffer@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+  integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+  dependencies:
+    base64-js "^1.3.1"
+    ieee754 "^1.2.1"
+
+bufferutil@^4.0.1, bufferutil@^4.0.3:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea"
+  integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==
+  dependencies:
+    node-gyp-build "^4.3.0"
+
+build-url@^1.0.10:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/build-url/-/build-url-1.3.3.tgz#fad1ef30d8861931f85bc1f41fca0a537be31e5f"
+  integrity sha512-uSC8d+d4SlbXTu/9nBhwEKi33CE0KQgCvfy8QwyrrO5vCuXr9hN021ZBh8ip5vxPbMOrZiPwgqcupuhezxiP3g==
+
+buildcheck@~0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238"
+  integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==
+
+bulk-write-stream@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/bulk-write-stream/-/bulk-write-stream-2.0.1.tgz#085bdc65caf19ceece4ff365fdb951ef0c6e3db8"
+  integrity sha512-XWOLjgHtpDasHfwM8oO4df1JoZwa7/OwTsXDzh4rUTo+9CowzeOFBZz43w+H14h1fyq+xl28tVIBrdjcjj4Gug==
+  dependencies:
+    inherits "^2.0.3"
+    readable-stream "^3.1.1"
+
+byte-length@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/byte-length/-/byte-length-1.0.2.tgz#ba5a5909240b0121c079b7f7b15248d6f08223cc"
+  integrity sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q==
+
+bytes@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+  integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
+
+bytes@3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+  integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
+cacache@^15.2.0:
+  version "15.3.0"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb"
+  integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
+  dependencies:
+    "@npmcli/fs" "^1.0.0"
+    "@npmcli/move-file" "^1.0.1"
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    glob "^7.1.4"
+    infer-owner "^1.0.4"
+    lru-cache "^6.0.0"
+    minipass "^3.1.1"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.2"
+    mkdirp "^1.0.3"
+    p-map "^4.0.0"
+    promise-inflight "^1.0.1"
+    rimraf "^3.0.2"
+    ssri "^8.0.1"
+    tar "^6.0.2"
+    unique-filename "^1.1.1"
+
+cache-base@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+  dependencies:
+    collection-visit "^1.0.0"
+    component-emitter "^1.2.1"
+    get-value "^2.0.6"
+    has-value "^1.0.0"
+    isobject "^3.0.1"
+    set-value "^2.0.0"
+    to-object-path "^0.3.0"
+    union-value "^1.0.0"
+    unset-value "^1.0.0"
+
+cache-point@~0.3.3:
+  version "0.3.4"
+  resolved "https://registry.yarnpkg.com/cache-point/-/cache-point-0.3.4.tgz#152db502c6bb23b5aa3f663e230d5de8ec4e4f3f"
+  integrity sha512-xY7ZTpb6twvkNvsz9ucBaySYmA/NG+lw7qWagtdphqczVqesDzrjaqpEEWEjmMtdtt3f5g4odW9m69Bro8BV4A==
+  dependencies:
+    array-back "^1.0.3"
+    core-js "^2.4.1"
+    feature-detect-es6 "^1.3.1"
+    fs-then-native "^1.0.2"
+    mkdirp "~0.5.1"
+
+caching-transform@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-3.0.2.tgz#601d46b91eca87687a281e71cef99791b0efca70"
+  integrity sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==
+  dependencies:
+    hasha "^3.0.0"
+    make-dir "^2.0.0"
+    package-hash "^3.0.0"
+    write-file-atomic "^2.4.2"
+
+call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513"
+  integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==
+  dependencies:
+    function-bind "^1.1.2"
+    get-intrinsic "^1.2.1"
+    set-function-length "^1.1.1"
+
+camel-case@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+  integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==
+  dependencies:
+    no-case "^2.2.0"
+    upper-case "^1.1.1"
+
+camelcase@^1.0.2:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+  integrity sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==
+
+camelcase@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+  integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==
+
+camelcase@^5.0.0:
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-lite@^1.0.30001580:
+  version "1.0.30001581"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz#0dfd4db9e94edbdca67d57348ebc070dece279f4"
+  integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==
+
+caseless@~0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+  integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
+
+catharsis@~0.8.8:
+  version "0.8.11"
+  resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.11.tgz#d0eb3d2b82b7da7a3ce2efb1a7b00becc6643468"
+  integrity sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==
+  dependencies:
+    lodash "^4.17.14"
+
+cbor@5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c"
+  integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==
+  dependencies:
+    bignumber.js "^9.0.1"
+    nofilter "^1.0.4"
+
+center-align@^0.1.1:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+  integrity sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==
+  dependencies:
+    align-text "^0.1.3"
+    lazy-cache "^1.0.3"
+
+chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+  integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==
+  dependencies:
+    ansi-styles "^2.2.1"
+    escape-string-regexp "^1.0.2"
+    has-ansi "^2.0.0"
+    strip-ansi "^3.0.0"
+    supports-color "^2.0.0"
+
+chalk@^2.4.2:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  dependencies:
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
+
+chalk@~4.1.0:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+charenc@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+  integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
+
+chokidar@^1.6.1:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
+  integrity sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==
+  dependencies:
+    anymatch "^1.3.0"
+    async-each "^1.0.0"
+    glob-parent "^2.0.0"
+    inherits "^2.0.1"
+    is-binary-path "^1.0.0"
+    is-glob "^2.0.0"
+    path-is-absolute "^1.0.0"
+    readdirp "^2.0.0"
+  optionalDependencies:
+    fsevents "^1.0.0"
+
+chokidar@^3.4.0:
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+chownr@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+  integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+cipher-base@^1.0.1, cipher-base@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+  integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+  dependencies:
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+class-utils@^0.3.5:
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+  dependencies:
+    arr-union "^3.1.0"
+    define-property "^0.2.5"
+    isobject "^3.0.0"
+    static-extend "^0.1.1"
+
+clean-css@^4.2.1:
+  version "4.2.4"
+  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178"
+  integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==
+  dependencies:
+    source-map "~0.6.0"
+
+clean-stack@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-commands@0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/cli-commands/-/cli-commands-0.1.0.tgz#c57cacc406bbcf9ee21646607161ed432ef5a05a"
+  integrity sha512-q7sQb4fp+8T7OLlHf0iJoCUFqvgURR/QEj0WmFZVqJZsfEo4jJ0ozSNuCHTDn5Z92WnjCfQlsi2jBjbOMkkNjA==
+  dependencies:
+    ansi-escape-sequences "^3.0.0"
+    command-line-args "^3.0.1"
+    command-line-commands "^1.0.4"
+    command-line-usage "^3.0.5"
+
+cli-cursor@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+  integrity sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==
+  dependencies:
+    restore-cursor "^1.0.1"
+
+cli-width@^2.0.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+  integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
+
+cliui@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+  integrity sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==
+  dependencies:
+    center-align "^0.1.1"
+    right-align "^0.1.1"
+    wordwrap "0.0.2"
+
+cliui@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+  integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==
+  dependencies:
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+    wrap-ansi "^2.0.0"
+
+cliui@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+  integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+  dependencies:
+    string-width "^3.1.0"
+    strip-ansi "^5.2.0"
+    wrap-ansi "^5.1.0"
+
+clone-deep@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+  integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+  dependencies:
+    is-plain-object "^2.0.4"
+    kind-of "^6.0.2"
+    shallow-clone "^3.0.0"
+
+code-point-at@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+  integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==
+
+collect-all@^1.0.2, collect-all@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/collect-all/-/collect-all-1.0.4.tgz#50cd7119ac24b8e12a661f0f8c3aa0ea7222ddfc"
+  integrity sha512-RKZhRwJtJEP5FWul+gkSMEnaK6H3AGPTTWOiRimCcs+rc/OmQE3Yhy1Q7A7KsdkG3ZXVdZq68Y6ONSdvkeEcKA==
+  dependencies:
+    stream-connect "^1.0.2"
+    stream-via "^1.0.4"
+
+collect-all@~0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/collect-all/-/collect-all-0.2.1.tgz#7225fb4585c22d4ffac886f0abaf5abc563a1a6a"
+  integrity sha512-DJM6+T8WAUEDVPxvbousmxRvtGW5+Q7JazRYmELEzn+BLGlRrqQ1ENKIpfiUjveCupWgUQd4iTvrMfDo0HiVKw==
+  dependencies:
+    stream-connect "^1.0.1"
+    stream-via "~0.1.0"
+    typical "^2.3.0"
+
+collect-json@^1.0.1, collect-json@^1.0.7, collect-json@^1.0.8:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/collect-json/-/collect-json-1.0.9.tgz#eb9906ef3160899e46e8482fac13a5e591dae9ae"
+  integrity sha512-5sGzu8rjhY4uzm4FJOVsNtcAhNiyEsZ70Lz3xv+7mXuLfU41QikE0es3nn2N0knqEKg+r4K7TMFHFmR8OFGpFA==
+  dependencies:
+    collect-all "^1.0.4"
+    stream-connect "^1.0.2"
+    stream-via "^1.0.4"
+
+collection-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+  integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==
+  dependencies:
+    map-visit "^1.0.0"
+    object-visit "^1.0.0"
+
+color-convert@^1.9.0, color-convert@^1.9.3:
+  version "1.9.3"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  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.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  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.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@^1.0.0, color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-string@^1.6.0:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
+  integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
+  dependencies:
+    color-name "^1.0.0"
+    simple-swizzle "^0.2.2"
+
+color-support@^1.1.2, color-support@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
+  integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
+
+color@^3.1.3:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164"
+  integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==
+  dependencies:
+    color-convert "^1.9.3"
+    color-string "^1.6.0"
+
+colors@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+  integrity sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==
+
+colorspace@1.1.x:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243"
+  integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==
+  dependencies:
+    color "^3.1.3"
+    text-hex "1.0.x"
+
+column-layout@^2.1.1:
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/column-layout/-/column-layout-2.1.4.tgz#ed2857092ccf8338026fe538379d9672d70b3641"
+  integrity sha512-u0d19HeRqHrs8nK+dBK5yzJ1fcMKXZmhXeKOVZfjbU2PJDMavQn256E262Z1qOD5Esg32dq17cM2pYUnO1WVTw==
+  dependencies:
+    ansi-escape-sequences "^2.2.2"
+    array-back "^1.0.3"
+    collect-json "^1.0.8"
+    command-line-args "^2.1.6"
+    core-js "^2.4.0"
+    deep-extend "~0.4.1"
+    feature-detect-es6 "^1.2.0"
+    object-tools "^2.0.6"
+    typical "^2.4.2"
+    wordwrapjs "^1.2.0"
+
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+combined-stream@~0.0.4:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f"
+  integrity sha512-qfexlmLp9MyrkajQVyjEDb0Vj+KhRgR/rxLiVhaihlT+ZkX0lReqtH6Ack40CvMDERR4b5eFp3CreskpBs1Pig==
+  dependencies:
+    delayed-stream "0.0.5"
+
+command-line-args@^2.1.4, command-line-args@^2.1.6:
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-2.1.6.tgz#f197d6eaff34c9085577484b2864375b294f5697"
+  integrity sha512-qo+q+AcV8vRQCVDCoh3gNbUiVI86ywoKkIUJeNCNZBCw1qv111Dp0F3nZ2PR/92HrGsgsABuAAi7Fe/z/cj8YQ==
+  dependencies:
+    array-back "^1.0.2"
+    command-line-usage "^2"
+    core-js "^2.0.1"
+    feature-detect-es6 "^1.2.0"
+    find-replace "^1"
+    typical "^2.3.0"
+
+command-line-args@^3.0.0, command-line-args@^3.0.1:
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-3.0.5.tgz#5bd4ad45e7983e5c1344918e40280ee2693c5ac0"
+  integrity sha512-M29kjOI24VF4HqatnqVyDqyeq3SYYZbq6LWv/AdVZ5LvrcqVNSN2XeYPrBxcO19T8YkGmyCqTUqYR07DFjVhyg==
+  dependencies:
+    array-back "^1.0.4"
+    feature-detect-es6 "^1.3.1"
+    find-replace "^1.0.2"
+    typical "^2.6.0"
+
+command-line-commands@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/command-line-commands/-/command-line-commands-1.0.4.tgz#034f9b167b5188afbdcf6b2efbb150fc8442c32b"
+  integrity sha512-l/z6Avh5umBu6grouQAQbvPU87NH4ud1WBMV+P4n+LRQj2MiCfaVXLCo8Klcd9xwOgungPbnpNVuZ6+AX9W+0g==
+  dependencies:
+    array-back "^1.0.3"
+    feature-detect-es6 "^1.3.1"
+
+command-line-tool@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/command-line-tool/-/command-line-tool-0.1.0.tgz#91a11ba48ac63a4a687554367980f7c6423c149d"
+  integrity sha512-iYnWHIP8pJ4+b5Zv4SWTt+YQeMndbFBA0sj3bH24bbahCrXpZnVFVP5CvcClyYqIPF6RVaDoeqAWdX0GhWG3ZQ==
+  dependencies:
+    ansi-escape-sequences "^2.2.1"
+    array-back "^1.0.2"
+
+command-line-tool@~0.5.0:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/command-line-tool/-/command-line-tool-0.5.2.tgz#f87d6977f56bbdd2d5dfcf946345dd2cd9c6a53a"
+  integrity sha512-TiZWqiRiyG4M6ZwbxKiCnBMDrD+rMNLeV2rf3rjmRH6O1yKvVmRpXlVxprABqks0nI/NU5F5JOCC14XQBFddlw==
+  dependencies:
+    ansi-escape-sequences "^2.2.2"
+    array-back "^1.0.3"
+    command-line-args "^3.0.0"
+    command-line-usage "^3.0.3"
+    feature-detect-es6 "^1.3.0"
+    typical "^2.4.2"
+
+command-line-usage@^2:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-2.0.5.tgz#f80c35ca5e8624841923ea3be3b9bfbf4f7be27b"
+  integrity sha512-xxUZrDySMWQknZRlCKXbuSCR8PUQXLbypmXPv8a1ZaxIGE5SSynjXNZzig8VTcTcXuvIVf9y563nucsRAYnCKA==
+  dependencies:
+    ansi-escape-sequences "^2.2.2"
+    array-back "^1.0.3"
+    column-layout "^2.1.1"
+    feature-detect-es6 "^1.2.0"
+    typical "^2.4.2"
+    wordwrapjs "^1.2.0"
+
+command-line-usage@^3.0.3, command-line-usage@^3.0.5:
+  version "3.0.8"
+  resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-3.0.8.tgz#b6a20978c1b383477f5c11a529428b880bfe0f4d"
+  integrity sha512-KMWPF8wNWa+wzffE9247hlDB1c9DMMxhwIFzwRn7oNv5CU7auuJ3zKWv756F/9qqlEucC5jI8/3S8qdGKdVelw==
+  dependencies:
+    ansi-escape-sequences "^3.0.0"
+    array-back "^1.0.3"
+    feature-detect-es6 "^1.3.1"
+    table-layout "^0.3.0"
+    typical "^2.6.0"
+
+commander@^2.11.0, commander@^2.19.0:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^4.0.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+  integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+common-sequence@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/common-sequence/-/common-sequence-1.0.2.tgz#30e07f3f8f6f7f9b3dee854f20b2d39eee086de8"
+  integrity sha512-z3ln8PqfoBRwY1X0B1W0NEvfuo3+lZdvVjYaxusK84FPGkBy+ZqfbMhgdGOLr1v1dv13z5KYOtbL/yupL4I8Yw==
+
+commondir@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+  integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
+
+component-emitter@^1.2.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17"
+  integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==
+
+compress-commons@^4.1.1, compress-commons@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.2.tgz#6542e59cb63e1f46a8b21b0e06f9a32e4c8b06df"
+  integrity sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==
+  dependencies:
+    buffer-crc32 "^0.2.13"
+    crc32-stream "^4.0.2"
+    normalize-path "^3.0.0"
+    readable-stream "^3.6.0"
+
+compressible@~2.0.16:
+  version "2.0.18"
+  resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+  integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+  dependencies:
+    mime-db ">= 1.43.0 < 2"
+
+compression@1.7.4:
+  version "1.7.4"
+  resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+  integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+  dependencies:
+    accepts "~1.3.5"
+    bytes "3.0.0"
+    compressible "~2.0.16"
+    debug "2.6.9"
+    on-headers "~1.0.2"
+    safe-buffer "5.1.2"
+    vary "~1.1.2"
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+config-master@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/config-master/-/config-master-2.0.4.tgz#e749505c5d3f946f2fad3c76dfe71fca689751dc"
+  integrity sha512-PfeMGMq4TTliwwGkf41u4Dhvk6I5ZzaxdTGYm9NbVqTZcHr20d8VydihyHcCpE/9ZTcN6FdT9vo0FW5rKZZOLw==
+  dependencies:
+    babel-polyfill "^6.13.0"
+    feature-detect-es6 "^1.3.1"
+    walk-back "^2.0.1"
+
+connect-flash@*:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/connect-flash/-/connect-flash-0.1.1.tgz#d8630f26d95a7f851f9956b1e8cc6732f3b6aa30"
+  integrity sha512-2rcfELQt/ZMP+SM/pG8PyhJRaLKp+6Hk2IUBNkEit09X+vwn3QsAL3ZbYtxUn7NVPzbMTSLRDhqe0B/eh30RYA==
+
+console-control-strings@^1.0.0, console-control-strings@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+  integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
+
+content-disposition@0.5.4:
+  version "0.5.4"
+  resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
+  integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
+  dependencies:
+    safe-buffer "5.2.1"
+
+content-type@~1.0.4, content-type@~1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
+  integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
+
+convert-source-map@^1.5.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
+  integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
+
+convert-source-map@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
+  integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+cookie-jar@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/cookie-jar/-/cookie-jar-0.3.0.tgz#bc9a27d4e2b97e186cd57c9e2063cb99fa68cccc"
+  integrity sha512-dX1400pzPULr+ZovkIsDEqe7XH8xCAYGT5Dege4Eot44Qs2mS2iJmnh45TxTO5MIsCfrV/JGZVloLhm46AHxNw==
+
+cookie-session@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/cookie-session/-/cookie-session-2.0.0.tgz#d07aa27822f43619e4342df1342268c849833089"
+  integrity sha512-hKvgoThbw00zQOleSlUr2qpvuNweoqBtxrmx0UFosx6AGi9lYtLoA+RbsvknrEX8Pr6MDbdWAb2j6SnMn+lPsg==
+  dependencies:
+    cookies "0.8.0"
+    debug "3.2.7"
+    on-headers "~1.0.2"
+    safe-buffer "5.2.1"
+
+cookie-signature@1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+  integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
+
+cookie@0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+  integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+
+cookies@0.8.0:
+  version "0.8.0"
+  resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90"
+  integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==
+  dependencies:
+    depd "~2.0.0"
+    keygrip "~1.1.0"
+
+copy-descriptor@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+  integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
+
+core-js@^2.0.1, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0:
+  version "2.6.12"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
+  integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
+
+core-js@^3.30.2:
+  version "3.35.1"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.35.1.tgz#9c28f8b7ccee482796f8590cc8d15739eaaf980c"
+  integrity sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==
+
+core-util-is@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
+
+core-util-is@~1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+  integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+cp-file@^6.2.0:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.2.0.tgz#40d5ea4a1def2a9acdd07ba5c0b0246ef73dc10d"
+  integrity sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==
+  dependencies:
+    graceful-fs "^4.1.2"
+    make-dir "^2.0.0"
+    nested-error-stacks "^2.0.0"
+    pify "^4.0.1"
+    safe-buffer "^5.0.1"
+
+cpu-features@~0.0.9:
+  version "0.0.9"
+  resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.9.tgz#5226b92f0f1c63122b0a3eb84cb8335a4de499fc"
+  integrity sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==
+  dependencies:
+    buildcheck "~0.0.6"
+    nan "^2.17.0"
+
+crc-32@^1.2.0:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff"
+  integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==
+
+crc32-stream@^4.0.2:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.3.tgz#85dd677eb78fa7cad1ba17cc506a597d41fc6f33"
+  integrity sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==
+  dependencies:
+    crc-32 "^1.2.0"
+    readable-stream "^3.4.0"
+
+create-hash@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+  integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+  dependencies:
+    cipher-base "^1.0.1"
+    inherits "^2.0.1"
+    md5.js "^1.3.4"
+    ripemd160 "^2.0.1"
+    sha.js "^2.4.0"
+
+create-hmac@^1.1.3:
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+  integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+  dependencies:
+    cipher-base "^1.0.3"
+    create-hash "^1.1.0"
+    inherits "^2.0.1"
+    ripemd160 "^2.0.0"
+    safe-buffer "^5.0.1"
+    sha.js "^2.4.8"
+
+cross-spawn@^4:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
+  integrity sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==
+  dependencies:
+    lru-cache "^4.0.1"
+    which "^1.2.9"
+
+crypt@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+  integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
+
+cryptiles@0.2.x:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c"
+  integrity sha512-gvWSbgqP+569DdslUiCelxIv3IYK5Lgmq1UrRnk+s1WxQOQ16j3GPDcjdtgL5Au65DU/xQi6q3xPtf5Kta+3IQ==
+  dependencies:
+    boom "0.4.x"
+
+cssstyle@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a"
+  integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==
+  dependencies:
+    rrweb-cssom "^0.6.0"
+
+ctype@0.5.3:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f"
+  integrity sha512-T6CEkoSV4q50zW3TlTHMbzy1E5+zlnNcY+yb7tWVYlTwPhx9LpnfAkd4wecpWknDyptp4k97LUZeInlf6jdzBg==
+
+d@1, d@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+  integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+  dependencies:
+    es5-ext "^0.10.50"
+    type "^1.0.1"
+
+dashdash@^1.12.0:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+  integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==
+  dependencies:
+    assert-plus "^1.0.0"
+
+data-urls@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4"
+  integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==
+  dependencies:
+    abab "^2.0.6"
+    whatwg-mimetype "^3.0.0"
+    whatwg-url "^12.0.0"
+
+dateformat@~4.6.2:
+  version "4.6.3"
+  resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5"
+  integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==
+
+dayjs@^1.11.9:
+  version "1.11.10"
+  resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
+  integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
+
+ddata@~0.1.25:
+  version "0.1.28"
+  resolved "https://registry.yarnpkg.com/ddata/-/ddata-0.1.28.tgz#53138fafa3f01749ea2451d12b6b6dd9df1d5b1f"
+  integrity sha512-iHuP9mQjLqQZDSUOqmT/omWBWohJfmBnQj+RzGxHDJlzOIA6HhSjMZFAnIsQ3s+Qx5CzYA3Vq7rAQzDSMCq8Dw==
+  dependencies:
+    array-back "^1.0.3"
+    core-js "^2.4.1"
+    handlebars "^3.0.3"
+    marked "~0.3.6"
+    object-get "^2.1.0"
+    reduce-flatten "^1.0.1"
+    string-tools "^1.0.0"
+    test-value "^2.0.0"
+
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+debug@3.2.7:
+  version "3.2.7"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+  integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+  dependencies:
+    ms "^2.1.1"
+
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+
+decimal.js@^10.4.3:
+  version "10.4.3"
+  resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
+  integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
+
+decode-uri-component@^0.2.0:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
+  integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
+
+deep-extend@~0.4.1:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+  integrity sha512-cQ0iXSEKi3JRNhjUsLWvQ+MVPxLVqpwCd0cFsWbJxlCim2TlCo1JvN5WaPdPvSpUdEnkJ/X+mPGcq5RJ68EK8g==
+
+deepmerge@^4.2.2:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+default-require-extensions@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7"
+  integrity sha512-B0n2zDIXpzLzKeoEozorDSa1cHc1t0NjmxP0zuAxbizNU2MBqYJJKYXrrFdKuQliojXynrxgd7l4ahfg/+aA5g==
+  dependencies:
+    strip-bom "^3.0.0"
+
+defer-promise@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/defer-promise/-/defer-promise-1.0.2.tgz#b79521c59cadadaed2d305385d30f8b05cbf9196"
+  integrity sha512-5a0iWJvnon50nLLqHPW83pX45BLb4MmlSa1sIg05NBhZoK5EZGz1s8qoZ3888dVGGOT0Ni01NdETuAgdJUZknA==
+
+define-data-property@^1.0.1, define-data-property@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3"
+  integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==
+  dependencies:
+    get-intrinsic "^1.2.1"
+    gopd "^1.0.1"
+    has-property-descriptors "^1.0.0"
+
+define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
+  integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
+  dependencies:
+    define-data-property "^1.0.1"
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
+define-property@^0.2.5:
+  version "0.2.5"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+  integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==
+  dependencies:
+    is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+  integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==
+  dependencies:
+    is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+  dependencies:
+    is-descriptor "^1.0.2"
+    isobject "^3.0.1"
+
+delayed-stream@0.0.5:
+  version "0.0.5"
+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f"
+  integrity sha512-v+7uBd1pqe5YtgPacIIbZ8HuHeLFVNe4mUEyFDXL6KiqzEykjbw+5mXZXpGFgNVasdL4jWKgaKIXrEHiynN1LA==
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+delegates@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+  integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
+
+denque@^1.4.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf"
+  integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==
+
+denque@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
+  integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
+
+depd@2.0.0, depd@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+depd@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+  integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+
+destroy@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
+  integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+
+detect-file@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+  integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==
+
+detect-indent@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+  integrity sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==
+  dependencies:
+    repeating "^2.0.0"
+
+detect-libc@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d"
+  integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==
+
+dir_cache@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/dir_cache/-/dir_cache-1.0.3.tgz#89b8ca92efdcdf552ef2e14d24c38114f9df554b"
+  integrity sha512-puPfw1d42uwG8tCbdTD+qklZtA2RWet5cIIkrCQJjUoCwqPw/ZkPuq2e7Fr928zM2tLosijYhDjbzyhL2pVMMA==
+  dependencies:
+    async "^2.0.1"
+    minify-js "0.0.2"
+    utils-igor "^1.0.4"
+
+discord-api-types@0.37.61:
+  version "0.37.61"
+  resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.61.tgz#9dd8e58c624237e6f1b23be2d29579af268b8c5b"
+  integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==
+
+discord-api-types@^0.37.12, discord-api-types@^0.37.41:
+  version "0.37.67"
+  resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.67.tgz#c4280aa122104ea74e103884ba27e8218210bef8"
+  integrity sha512-4HEzUEmwGPXWJdVhGZ/K+9eWs8kurdn5r/I8qD3/0hb14I0MZvx8K/JOyLhKLgcR4/8/jcr6Xej820BNgNXN7A==
+
+discord.js@14.6.0:
+  version "14.6.0"
+  resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.6.0.tgz#896f7540d4c6f190dffe91d2f3e9a9f7cbc8bd26"
+  integrity sha512-On1K7xpJZRe0KsziIaDih2ksYPhgxym/ZqV45i1f3yig4vUotikqs7qp5oXiTzQ/UTiNRCixUWFTh7vA1YBCqw==
+  dependencies:
+    "@discordjs/builders" "^1.3.0"
+    "@discordjs/collection" "^1.2.0"
+    "@discordjs/rest" "^1.3.0"
+    "@discordjs/util" "^0.1.0"
+    "@sapphire/snowflake" "^3.2.2"
+    "@types/ws" "^8.5.3"
+    discord-api-types "^0.37.12"
+    fast-deep-equal "^3.1.3"
+    lodash.snakecase "^4.1.1"
+    tslib "^2.4.0"
+    undici "^5.11.0"
+    ws "^8.9.0"
+
+dmd@^1.4.1:
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/dmd/-/dmd-1.4.2.tgz#b1304b98a5700a6bfe5dcf91be657c981700a4bc"
+  integrity sha512-rOPXEDiT6+dqVvDX6RX1rO4F6nU9a7HHdpXB1qIDL3tKEX52LwWNhGmIUJ8d2V1pX/5bIaFDaJunQt/m/zc0ig==
+  dependencies:
+    array-back "^1.0.3"
+    command-line-tool "~0.5.0"
+    common-sequence "^1.0.2"
+    ddata "~0.1.25"
+    file-set "^1.0.0"
+    handlebars-array "^0.2.0"
+    handlebars-comparison "^2.0.0"
+    handlebars-json "^1.0.0"
+    handlebars-regexp "^1.0.0"
+    handlebars-string "^2.0.1"
+    object-tools "^2.0.6"
+    reduce-unique "^1.0.0"
+    reduce-without "^1.0.1"
+    stream-handlebars "~0.1.6"
+    string-tools "^1.0.0"
+    walk-back "^2.0.1"
+
+dom-serializer@^1.0.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+  integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.2.0"
+    entities "^2.0.0"
+
+domelementtype@^2.0.1, domelementtype@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domexception@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673"
+  integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==
+  dependencies:
+    webidl-conversions "^7.0.0"
+
+domhandler@^4.0.0, domhandler@^4.2.0:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+  integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+  dependencies:
+    domelementtype "^2.2.0"
+
+domutils@^2.5.2:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+  dependencies:
+    dom-serializer "^1.0.1"
+    domelementtype "^2.2.0"
+    domhandler "^4.2.0"
+
+each-series@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/each-series/-/each-series-1.0.0.tgz#f886e6c66dfdb25ef1fe73564146ee5cb478afcb"
+  integrity sha512-4MQloCGGCmT5GJZK5ibgJSvTK1c1QSrNlDvLk6fEyRxjZnXjl+NNFfzhfXpmnWh33Owc9D9klrdzCUi7yc9r4Q==
+
+ecc-jsbn@~0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+  integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==
+  dependencies:
+    jsbn "~0.1.0"
+    safer-buffer "^2.1.0"
+
+ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
+  integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
+  dependencies:
+    safe-buffer "^5.0.1"
+
+ee-first@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+  integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
+
+electron-to-chromium@^1.4.648:
+  version "1.4.648"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz#c7b46c9010752c37bb4322739d6d2dd82354fbe4"
+  integrity sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==
+
+emoji-regex@^7.0.1:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+enabled@2.0.x:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2"
+  integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==
+
+encodeurl@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+  integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
+
+encoding@^0.1.12:
+  version "0.1.13"
+  resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
+  dependencies:
+    iconv-lite "^0.6.2"
+
+end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+  dependencies:
+    once "^1.4.0"
+
+entities@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+entities@^4.4.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+env-paths@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+  integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+err-code@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+  integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  dependencies:
+    is-arrayish "^0.2.1"
+
+es-abstract@^1.22.1:
+  version "1.22.3"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32"
+  integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==
+  dependencies:
+    array-buffer-byte-length "^1.0.0"
+    arraybuffer.prototype.slice "^1.0.2"
+    available-typed-arrays "^1.0.5"
+    call-bind "^1.0.5"
+    es-set-tostringtag "^2.0.1"
+    es-to-primitive "^1.2.1"
+    function.prototype.name "^1.1.6"
+    get-intrinsic "^1.2.2"
+    get-symbol-description "^1.0.0"
+    globalthis "^1.0.3"
+    gopd "^1.0.1"
+    has-property-descriptors "^1.0.0"
+    has-proto "^1.0.1"
+    has-symbols "^1.0.3"
+    hasown "^2.0.0"
+    internal-slot "^1.0.5"
+    is-array-buffer "^3.0.2"
+    is-callable "^1.2.7"
+    is-negative-zero "^2.0.2"
+    is-regex "^1.1.4"
+    is-shared-array-buffer "^1.0.2"
+    is-string "^1.0.7"
+    is-typed-array "^1.1.12"
+    is-weakref "^1.0.2"
+    object-inspect "^1.13.1"
+    object-keys "^1.1.1"
+    object.assign "^4.1.4"
+    regexp.prototype.flags "^1.5.1"
+    safe-array-concat "^1.0.1"
+    safe-regex-test "^1.0.0"
+    string.prototype.trim "^1.2.8"
+    string.prototype.trimend "^1.0.7"
+    string.prototype.trimstart "^1.0.7"
+    typed-array-buffer "^1.0.0"
+    typed-array-byte-length "^1.0.0"
+    typed-array-byte-offset "^1.0.0"
+    typed-array-length "^1.0.4"
+    unbox-primitive "^1.0.2"
+    which-typed-array "^1.1.13"
+
+es-array-method-boxes-properly@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
+  integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
+
+es-set-tostringtag@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9"
+  integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==
+  dependencies:
+    get-intrinsic "^1.2.2"
+    has-tostringtag "^1.0.0"
+    hasown "^2.0.0"
+
+es-to-primitive@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+  integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+  dependencies:
+    is-callable "^1.1.4"
+    is-date-object "^1.0.1"
+    is-symbol "^1.0.2"
+
+es5-ext@^0.10.35, es5-ext@^0.10.50:
+  version "0.10.62"
+  resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5"
+  integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==
+  dependencies:
+    es6-iterator "^2.0.3"
+    es6-symbol "^3.1.3"
+    next-tick "^1.1.0"
+
+es6-error@^4.0.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
+  integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
+
+es6-iterator@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+  integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
+  dependencies:
+    d "1"
+    es5-ext "^0.10.35"
+    es6-symbol "^3.1.1"
+
+es6-symbol@^3.1.1, es6-symbol@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
+  integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
+  dependencies:
+    d "^1.0.1"
+    ext "^1.1.2"
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-html@^1.0.3, escape-html@~1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+  integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+espree@~3.1.7:
+  version "3.1.7"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-3.1.7.tgz#fd5deec76a97a5120a9cd3a7cb1177a0923b11d2"
+  integrity sha512-VF3ZpqctFaefWt4R+7jMidx4BUMbd9rxaUoM1gumrgDWcKByFT2YSV73vT6rvdCNw4ZoOAR2z7bamCg4VN9m0A==
+  dependencies:
+    acorn "^3.3.0"
+    acorn-jsx "^3.0.0"
+
+esprima@4.0.1, esprima@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esutils@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+  version "1.8.1"
+  resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+  integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
+
+eventemitter2@~0.4.13:
+  version "0.4.14"
+  resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab"
+  integrity sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==
+
+events@^3.0.0, events@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+exit-hook@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+  integrity sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==
+
+exit@~0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+  integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
+
+expand-brackets@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+  integrity sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==
+  dependencies:
+    is-posix-bracket "^0.1.0"
+
+expand-brackets@^2.1.4:
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+  integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==
+  dependencies:
+    debug "^2.3.3"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    posix-character-classes "^0.1.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+expand-range@^1.8.1:
+  version "1.8.2"
+  resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+  integrity sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==
+  dependencies:
+    fill-range "^2.1.0"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+  integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==
+  dependencies:
+    homedir-polyfill "^1.0.1"
+
+express-handlebars@5.3.5:
+  version "5.3.5"
+  resolved "https://registry.yarnpkg.com/express-handlebars/-/express-handlebars-5.3.5.tgz#a04a1e670aa97d5b3a8080de8336f79228593540"
+  integrity sha512-r9pzDc94ZNJ7FVvtsxLfPybmN0eFAUnR61oimNPRpD0D7nkLcezrkpZzoXS5TI75wYHRbflPLTU39B62pwB4DA==
+  dependencies:
+    glob "^7.2.0"
+    graceful-fs "^4.2.8"
+    handlebars "^4.7.7"
+
+express-ws@4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/express-ws/-/express-ws-4.0.0.tgz#dabd8dc974516418902a41fe6e30ed949b4d36c4"
+  integrity sha512-KEyUw8AwRET2iFjFsI1EJQrJ/fHeGiJtgpYgEWG3yDv4l/To/m3a2GaYfeGyB3lsWdvbesjF5XCMx+SVBgAAYw==
+  dependencies:
+    ws "^5.2.0"
+
+express@4.18.2:
+  version "4.18.2"
+  resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
+  integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==
+  dependencies:
+    accepts "~1.3.8"
+    array-flatten "1.1.1"
+    body-parser "1.20.1"
+    content-disposition "0.5.4"
+    content-type "~1.0.4"
+    cookie "0.5.0"
+    cookie-signature "1.0.6"
+    debug "2.6.9"
+    depd "2.0.0"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    finalhandler "1.2.0"
+    fresh "0.5.2"
+    http-errors "2.0.0"
+    merge-descriptors "1.0.1"
+    methods "~1.1.2"
+    on-finished "2.4.1"
+    parseurl "~1.3.3"
+    path-to-regexp "0.1.7"
+    proxy-addr "~2.0.7"
+    qs "6.11.0"
+    range-parser "~1.2.1"
+    safe-buffer "5.2.1"
+    send "0.18.0"
+    serve-static "1.15.0"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    type-is "~1.6.18"
+    utils-merge "1.0.1"
+    vary "~1.1.2"
+
+ext@^1.1.2:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f"
+  integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==
+  dependencies:
+    type "^2.7.2"
+
+extend-shallow@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+  integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+  dependencies:
+    is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+  integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==
+  dependencies:
+    assign-symbols "^1.0.0"
+    is-extendable "^1.0.1"
+
+extend@^3.0.2, extend@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extglob@^0.3.1:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+  integrity sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==
+  dependencies:
+    is-extglob "^1.0.0"
+
+extglob@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+  dependencies:
+    array-unique "^0.3.2"
+    define-property "^1.0.0"
+    expand-brackets "^2.1.4"
+    extend-shallow "^2.0.1"
+    fragment-cache "^0.2.1"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+  integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
+
+extsprintf@^1.2.0:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+  integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-xml-parser@4.2.5:
+  version "4.2.5"
+  resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f"
+  integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==
+  dependencies:
+    strnum "^1.0.5"
+
+fast-xml-parser@^4.2.4:
+  version "4.3.3"
+  resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.3.tgz#aeaf5778392329f17168c40c51bcbfec8ff965be"
+  integrity sha512-coV/D1MhrShMvU6D0I+VAK3umz6hUaxxhL0yp/9RjfiYUfAv14rDhGQL+PLForhMdr0wq3PiV07WtkkNjJjNHg==
+  dependencies:
+    strnum "^1.0.5"
+
+fastfall@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/fastfall/-/fastfall-1.5.1.tgz#3fee03331a49d1d39b3cdf7a5e9cd66f475e7b94"
+  integrity sha512-KH6p+Z8AKPXnmA7+Iz2Lh8ARCMr+8WNPVludm1LGkZoD2MjY6LVnRMtTKhkdzI+jr0RzQWXKzKyBJm1zoHEL4Q==
+  dependencies:
+    reusify "^1.0.0"
+
+fastparallel@^2.3.0:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/fastparallel/-/fastparallel-2.4.1.tgz#0d984a5813ffa67f30b4a5cb4cb8cbe61c7ee5a5"
+  integrity sha512-qUmhxPgNHmvRjZKBFUNI0oZuuH9OlSIOXmJ98lhKPxMZZ7zS/Fi0wRHOihDSz0R1YiIOjxzOY4bq65YTcdBi2Q==
+  dependencies:
+    reusify "^1.0.4"
+    xtend "^4.0.2"
+
+fastseries@^1.7.2:
+  version "1.7.2"
+  resolved "https://registry.yarnpkg.com/fastseries/-/fastseries-1.7.2.tgz#d22ce13b9433dff3388d91dbd6b8bda9b21a0f4b"
+  integrity sha512-dTPFrPGS8SNSzAt7u/CbMKCJ3s01N04s4JFbORHcmyvVfVKmbhMD1VtRbh5enGHxkaQDqWyLefiKOGGmohGDDQ==
+  dependencies:
+    reusify "^1.0.0"
+    xtend "^4.0.0"
+
+fd-slicer@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+  integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
+  dependencies:
+    pend "~1.2.0"
+
+feature-detect-es6@^1.2.0, feature-detect-es6@^1.3.0, feature-detect-es6@^1.3.1:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/feature-detect-es6/-/feature-detect-es6-1.5.0.tgz#a69bb7662c65f64f89f07eac5a461b649a1e0a00"
+  integrity sha512-DzWPIGzTnfp3/KK1d/YPfmgLqeDju9F2DQYBL35VusgSApcA7XGqVtXfR4ETOOFEzdFJ3J7zh0Gkk011TiA4uQ==
+  dependencies:
+    array-back "^1.0.4"
+
+fecha@^4.2.0:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd"
+  integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==
+
+figures@^1.3.5:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+  integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==
+  dependencies:
+    escape-string-regexp "^1.0.5"
+    object-assign "^4.1.0"
+
+file-set@^1.0.0, file-set@^1.0.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/file-set/-/file-set-1.1.2.tgz#08f700bb2c129d0e6bff90157b6556ce7c01e4f9"
+  integrity sha512-xDXI09w+l+mXxWDym7dQXy3PLdo7DygHlAtRnQ6XIMa0iY/qX6+1J75jjwCArCd48yCiMx2+fRn50BTFd45+jQ==
+  dependencies:
+    array-back "^1.0.3"
+    glob "^7.1.0"
+
+file-set@~0.2.1:
+  version "0.2.8"
+  resolved "https://registry.yarnpkg.com/file-set/-/file-set-0.2.8.tgz#73a6571e9cbe51ac5926c88bd567d111f836f178"
+  integrity sha512-t9NO6FHYX8459WTtKzEuGGP/c6BqmeSdtCUhzoBw64Ctq/2x22e9wPjKJDPpGiQt6vRWpu6Mgs+ZneAI1vqg8Q==
+  dependencies:
+    array-tools "^2"
+    glob "^4"
+
+file-type@^18.3.0:
+  version "18.7.0"
+  resolved "https://registry.yarnpkg.com/file-type/-/file-type-18.7.0.tgz#cddb16f184d6b94106cfc4bb56978726b25cb2a2"
+  integrity sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==
+  dependencies:
+    readable-web-to-node-stream "^3.0.2"
+    strtok3 "^7.0.0"
+    token-types "^5.0.1"
+
+file-uri-to-path@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+  integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+filename-regex@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+  integrity sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==
+
+fill-range@^2.1.0:
+  version "2.2.4"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
+  integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
+  dependencies:
+    is-number "^2.1.0"
+    isobject "^2.0.0"
+    randomatic "^3.0.0"
+    repeat-element "^1.1.2"
+    repeat-string "^1.5.2"
+
+fill-range@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+  integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+    to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+filter-where@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/filter-where/-/filter-where-1.0.1.tgz#1b042569edce36bc1c4e9f73740d2c4e2feef77d"
+  integrity sha512-WR5ZwPkYow93louUCfSeTmn8Q7M/X9uMY6LUqTBr1DgohVd7cYZ+B9MHTsQJ9FHKpvkz32LBppTNXPC/Z/pRHA==
+  dependencies:
+    test-value "^1.0.1"
+
+finalhandler@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
+  integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
+  dependencies:
+    debug "2.6.9"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    on-finished "2.4.1"
+    parseurl "~1.3.3"
+    statuses "2.0.1"
+    unpipe "~1.0.0"
+
+find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+  integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+  dependencies:
+    commondir "^1.0.1"
+    make-dir "^2.0.0"
+    pkg-dir "^3.0.0"
+
+find-replace@^1, find-replace@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0"
+  integrity sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==
+  dependencies:
+    array-back "^1.0.4"
+    test-value "^2.1.0"
+
+find-up@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+  integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==
+  dependencies:
+    path-exists "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+find-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+  dependencies:
+    locate-path "^3.0.0"
+
+findup-sync@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0"
+  integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==
+  dependencies:
+    detect-file "^1.0.0"
+    is-glob "^4.0.0"
+    micromatch "^4.0.2"
+    resolve-dir "^1.0.1"
+
+findup-sync@~5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-5.0.0.tgz#54380ad965a7edca00cc8f63113559aadc541bd2"
+  integrity sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==
+  dependencies:
+    detect-file "^1.0.0"
+    is-glob "^4.0.3"
+    micromatch "^4.0.4"
+    resolve-dir "^1.0.1"
+
+fined@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b"
+  integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==
+  dependencies:
+    expand-tilde "^2.0.2"
+    is-plain-object "^2.0.3"
+    object.defaults "^1.1.0"
+    object.pick "^1.2.0"
+    parse-filepath "^1.0.1"
+
+flagged-respawn@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41"
+  integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==
+
+fn.name@1.x.x:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc"
+  integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==
+
+follow-redirects@^1.14.0, follow-redirects@^1.14.8, follow-redirects@^1.14.9, follow-redirects@^1.15.4:
+  version "1.15.5"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020"
+  integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==
+
+for-each@^0.3.3:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+  integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+  dependencies:
+    is-callable "^1.1.3"
+
+for-in@^1.0.1, for-in@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+  integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
+
+for-own@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+  integrity sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==
+  dependencies:
+    for-in "^1.0.1"
+
+for-own@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
+  integrity sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==
+  dependencies:
+    for-in "^1.0.1"
+
+foreground-child@^1.5.6:
+  version "1.5.6"
+  resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9"
+  integrity sha512-3TOY+4TKV0Ml83PXJQY+JFQaHNV38lzQDIzzXYg1kWdBLenGgoZhAs0CKgzI31vi2pWEpQMq/Yi4bpKwCPkw7g==
+  dependencies:
+    cross-spawn "^4"
+    signal-exit "^3.0.0"
+
+forever-agent@~0.5.0:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130"
+  integrity sha512-PDG5Ef0Dob/JsZUxUltJOhm/Y9mlteAE+46y3M9RBz/Rd3QVENJ75aGRhN56yekTUboaBIkd8KVWX2NjF6+91A==
+
+forever-agent@~0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+  integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
+
+form-data@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+  integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
+
+form-data@~0.1.0:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12"
+  integrity sha512-x8eE+nzFtAMA0YYlSxf/Qhq6vP1f8wSoZ7Aw1GuctBcmudCNuTUmmx45TfEplyb6cjsZO/jvh6+1VpZn24ez+w==
+  dependencies:
+    async "~0.9.0"
+    combined-stream "~0.0.4"
+    mime "~1.2.11"
+
+form-data@~2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+  integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.6"
+    mime-types "^2.1.12"
+
+forwarded@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
+  integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+
+fragment-cache@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+  integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==
+  dependencies:
+    map-cache "^0.2.2"
+
+fresh@0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+  integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+
+from2@^2.1.0, from2@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+  integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==
+  dependencies:
+    inherits "^2.0.1"
+    readable-stream "^2.0.0"
+
+fs-constants@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+  integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-minipass@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+  integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+  dependencies:
+    minipass "^3.0.0"
+
+fs-readdir-recursive@^1.0.0, fs-readdir-recursive@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
+  integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==
+
+fs-then-native@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/fs-then-native/-/fs-then-native-1.0.2.tgz#ac8d3807c9f1bbd1279607fb228e0ab649bb41fe"
+  integrity sha512-Rbz2Jggj4AHs56esXBzCAmDTthzCisuKOTFulwwu2jztQh07q86FhIwHytQCK6HfkKES2+u1YZU1fyCajPuWKg==
+  dependencies:
+    feature-detect-es6 "^1.3.1"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@^1.0.0:
+  version "1.2.13"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+  integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
+  dependencies:
+    bindings "^1.5.0"
+    nan "^2.12.1"
+
+fsevents@~2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+  integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+function-bind@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+  integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+function.prototype.name@^1.1.6:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd"
+  integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.2.0"
+    es-abstract "^1.22.1"
+    functions-have-names "^1.2.3"
+
+functions-have-names@^1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+  integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+gauge@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395"
+  integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==
+  dependencies:
+    aproba "^1.0.3 || ^2.0.0"
+    color-support "^1.1.2"
+    console-control-strings "^1.0.0"
+    has-unicode "^2.0.1"
+    object-assign "^4.1.1"
+    signal-exit "^3.0.0"
+    string-width "^4.2.3"
+    strip-ansi "^6.0.1"
+    wide-align "^1.1.2"
+
+gauge@^4.0.3:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
+  integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
+  dependencies:
+    aproba "^1.0.3 || ^2.0.0"
+    color-support "^1.1.3"
+    console-control-strings "^1.1.0"
+    has-unicode "^2.0.1"
+    signal-exit "^3.0.7"
+    string-width "^4.2.3"
+    strip-ansi "^6.0.1"
+    wide-align "^1.1.5"
+
+gaxios@^6.0.0, gaxios@^6.0.3, gaxios@^6.1.1:
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-6.1.1.tgz#549629f86a13e756b900f9ff7c94624670102938"
+  integrity sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==
+  dependencies:
+    extend "^3.0.2"
+    https-proxy-agent "^7.0.1"
+    is-stream "^2.0.0"
+    node-fetch "^2.6.9"
+
+gcp-metadata@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-6.1.0.tgz#9b0dd2b2445258e7597f2024332d20611cbd6b8c"
+  integrity sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==
+  dependencies:
+    gaxios "^6.0.0"
+    json-bigint "^1.0.0"
+
+generate-function@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
+  integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
+  dependencies:
+    is-property "^1.0.2"
+
+gensync@^1.0.0-beta.2:
+  version "1.0.0-beta.2"
+  resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+  integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-caller-file@^2.0.1:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b"
+  integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==
+  dependencies:
+    function-bind "^1.1.2"
+    has-proto "^1.0.1"
+    has-symbols "^1.0.3"
+    hasown "^2.0.0"
+
+get-symbol-description@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+  integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.1.1"
+
+get-value@^2.0.3, get-value@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+  integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==
+
+getobject@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/getobject/-/getobject-1.0.2.tgz#25ec87a50370f6dcc3c6ba7ef43c4c16215c4c89"
+  integrity sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==
+
+getpass@^0.1.1:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+  integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==
+  dependencies:
+    assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+  integrity sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==
+  dependencies:
+    glob-parent "^2.0.0"
+    is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+  integrity sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==
+  dependencies:
+    is-glob "^2.0.0"
+
+glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+glob@^4:
+  version "4.5.3"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
+  integrity sha512-I0rTWUKSZKxPSIAIaqhSXTM/DiII6wame+rEC3cFA5Lqmr9YmdL7z6Hj9+bdWtTvoY1Su4/OiMLmb37Y7JzvJQ==
+  dependencies:
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^2.0.1"
+    once "^1.3.0"
+
+glob@^7.1.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0, glob@^7.2.3:
+  version "7.2.3"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.1.1"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+glob@~7.1.6:
+  version "7.1.7"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
+  integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+global-modules@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+  integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+  dependencies:
+    global-prefix "^1.0.1"
+    is-windows "^1.0.1"
+    resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+  integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==
+  dependencies:
+    expand-tilde "^2.0.2"
+    homedir-polyfill "^1.0.1"
+    ini "^1.3.4"
+    is-windows "^1.0.1"
+    which "^1.2.14"
+
+globals@^11.1.0:
+  version "11.12.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^9.18.0:
+  version "9.18.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+  integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
+
+globalthis@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+  integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+  dependencies:
+    define-properties "^1.1.3"
+
+google-auth-library@^9.0.0:
+  version "9.5.0"
+  resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.5.0.tgz#fd97b78bc1512025b9c9ad3998c60e2d75b6137e"
+  integrity sha512-OUbP509lWVlZxuMY+Cgomw49VzZFP9myIcVeYEpeBlbXJbPC4R+K4BmO9hd3ciYM5QIwm5W1PODcKjqxtkye9Q==
+  dependencies:
+    base64-js "^1.3.0"
+    ecdsa-sig-formatter "^1.0.11"
+    gaxios "^6.1.1"
+    gcp-metadata "^6.1.0"
+    gtoken "^7.0.0"
+    jws "^4.0.0"
+
+google-protobuf@3.19.4:
+  version "3.19.4"
+  resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.19.4.tgz#8d32c3e34be9250956f28c0fb90955d13f311888"
+  integrity sha512-OIPNCxsG2lkIvf+P5FNfJ/Km95CsXOBecS9ZcAU6m2Rq3svc0Apl9nB3GMDNKfQ9asNv4KjyAqGwPQFrVle3Yg==
+
+googleapis-common@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/googleapis-common/-/googleapis-common-7.0.1.tgz#c85d0ee605ff0be9f604b963c69dfd27e46f6dec"
+  integrity sha512-mgt5zsd7zj5t5QXvDanjWguMdHAcJmmDrF9RkInCecNsyV7S7YtGqm5v2IWONNID88osb7zmx5FtrAP12JfD0w==
+  dependencies:
+    extend "^3.0.2"
+    gaxios "^6.0.3"
+    google-auth-library "^9.0.0"
+    qs "^6.7.0"
+    url-template "^2.0.8"
+    uuid "^9.0.0"
+
+googleapis@128.0.0:
+  version "128.0.0"
+  resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-128.0.0.tgz#0005272f7f8730435d60ae0698d98910e16d0937"
+  integrity sha512-+sLtVYNazcxaSD84N6rihVX4QiGoqRdnlz2SwmQQkadF31XonDfy4ufk3maMg27+FiySrH0rd7V8p+YJG6cknA==
+  dependencies:
+    google-auth-library "^9.0.0"
+    googleapis-common "^7.0.0"
+
+gopd@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+  integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+  dependencies:
+    get-intrinsic "^1.1.3"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.8:
+  version "4.2.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+grunt-cli@~1.4.3:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.4.3.tgz#22c9f1a3d2780bf9b0d206e832e40f8f499175ff"
+  integrity sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==
+  dependencies:
+    grunt-known-options "~2.0.0"
+    interpret "~1.1.0"
+    liftup "~3.0.1"
+    nopt "~4.0.1"
+    v8flags "~3.2.0"
+
+grunt-jsdoc-to-markdown@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/grunt-jsdoc-to-markdown/-/grunt-jsdoc-to-markdown-1.2.1.tgz#d253ac69b61c9575364a44d7db0513ab52f8dac9"
+  integrity sha512-0tNzrfUpAY4ipU+TzNAys3TdV8hWbt7wai29myOl58Voy1NTWTa63BAUIxfVhbhrZZGYEtHLyqIUJEKIXeCgvA==
+  dependencies:
+    jsdoc-to-markdown "^1.3.3"
+
+grunt-known-options@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-2.0.0.tgz#cac641e897f9a0a680b8c9839803d35f3325103c"
+  integrity sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==
+
+grunt-legacy-log-utils@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz#49a8c7dc74051476dcc116c32faf9db8646856ef"
+  integrity sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==
+  dependencies:
+    chalk "~4.1.0"
+    lodash "~4.17.19"
+
+grunt-legacy-log@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz#1c6eaf92371ea415af31ea84ce50d434ef6d39c4"
+  integrity sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==
+  dependencies:
+    colors "~1.1.2"
+    grunt-legacy-log-utils "~2.1.0"
+    hooker "~0.2.3"
+    lodash "~4.17.19"
+
+grunt-legacy-util@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz#0f929d13a2faf9988c9917c82bff609e2d9ba255"
+  integrity sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==
+  dependencies:
+    async "~3.2.0"
+    exit "~0.1.2"
+    getobject "~1.0.0"
+    hooker "~0.2.3"
+    lodash "~4.17.21"
+    underscore.string "~3.3.5"
+    which "~2.0.2"
+
+grunt@^1.0.1:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.6.1.tgz#0b4dd1524f26676dcf45d8f636b8d9061a8ede16"
+  integrity sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==
+  dependencies:
+    dateformat "~4.6.2"
+    eventemitter2 "~0.4.13"
+    exit "~0.1.2"
+    findup-sync "~5.0.0"
+    glob "~7.1.6"
+    grunt-cli "~1.4.3"
+    grunt-known-options "~2.0.0"
+    grunt-legacy-log "~3.0.0"
+    grunt-legacy-util "~2.0.1"
+    iconv-lite "~0.6.3"
+    js-yaml "~3.14.0"
+    minimatch "~3.0.4"
+    nopt "~3.0.6"
+
+gtoken@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-7.0.1.tgz#b64bd01d88268ea3a3572c9076a85d1c48f1a455"
+  integrity sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==
+  dependencies:
+    gaxios "^6.0.0"
+    jws "^4.0.0"
+
+handlebars-array@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/handlebars-array/-/handlebars-array-0.2.1.tgz#dd58395a5261d661988e8d77520ebbfaadc6bd24"
+  integrity sha512-qQnsau0d45rzRn5Mm76/JepLDrJkKeJUAn4gf45WIQFl+9+oqA/XtCOHmc705SffS7gYMeGX3gDz/NulL56ptA==
+  dependencies:
+    array-tools "^1.1.4"
+
+handlebars-comparison@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/handlebars-comparison/-/handlebars-comparison-2.0.1.tgz#b17b95d2c298578e4aead38f5fac46e8f6005855"
+  integrity sha512-fDBg5FVtj//20jGubGMIJDn68S4cVMl/ZrbZadpG2l8K9T/ITXWdLvidabLkOs2ePhcufuE5zKhf0saUKEExQQ==
+  dependencies:
+    array-tools "^1.1.0"
+
+handlebars-json@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/handlebars-json/-/handlebars-json-1.0.1.tgz#2ef87bb782551cd645bb4691b824e9653ec02504"
+  integrity sha512-zkqeRv2x0Lc5+pADCB98edilRPjtkz6cYM/ogUK6ZaVbZUbkDhGcXE20gXVW5N7g3m5r5R4nHig9VHcDIIQORQ==
+
+handlebars-regexp@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/handlebars-regexp/-/handlebars-regexp-1.0.1.tgz#5f47f067260e9ba8e52f1a280917f70de39f11e4"
+  integrity sha512-htocyMnBYuJZFr6FYMSnwvbkwQWmJO35MT2AQlJEdEP2u5WH2H7rnauNczRcVG4i8YSVhxKxojMUs5X3h3hFIg==
+
+handlebars-string@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/handlebars-string/-/handlebars-string-2.0.2.tgz#b9f92208a979cfcf51ff4a90defa183dc62942ca"
+  integrity sha512-Ug7VPR7UbBty+SDCWgaPw2l+ipE39uYpSzdFLz/XdZUQMzOXsSe76xQgKYhm9Rb/bLw24454kFZo+rQEhG0QIw==
+  dependencies:
+    array-tools "^1.0.6"
+    string-tools "^0.1.4"
+
+handlebars@^3.0.0, handlebars@^3.0.3:
+  version "3.0.8"
+  resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-3.0.8.tgz#4e6ce3650fe6c53c151d106dcff1c5a7ca79e164"
+  integrity sha512-frzSzoxbJZSB719r+lM3UFKrnHIY6VPY/j47+GNOHVnBHxO+r+Y/iDjozAbj1SztmmMpr2CcZY6rLeN5mqX8zA==
+  dependencies:
+    optimist "^0.6.1"
+    source-map "^0.1.40"
+  optionalDependencies:
+    uglify-js "^2.6"
+
+handlebars@^4.7.7:
+  version "4.7.8"
+  resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9"
+  integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==
+  dependencies:
+    minimist "^1.2.5"
+    neo-async "^2.6.2"
+    source-map "^0.6.1"
+    wordwrap "^1.0.0"
+  optionalDependencies:
+    uglify-js "^3.1.4"
+
+har-schema@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+  integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==
+
+har-validator@~5.1.3:
+  version "5.1.5"
+  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+  integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
+  dependencies:
+    ajv "^6.12.3"
+    har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+  integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==
+  dependencies:
+    ansi-regex "^2.0.0"
+
+has-bigints@^1.0.1, has-bigints@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+  integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340"
+  integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==
+  dependencies:
+    get-intrinsic "^1.2.2"
+
+has-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+  integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
+has-symbols@^1.0.2, has-symbols@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-tostringtag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+  integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+  dependencies:
+    has-symbols "^1.0.2"
+
+has-unicode@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+  integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
+
+has-value@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+  integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==
+  dependencies:
+    get-value "^2.0.3"
+    has-values "^0.1.4"
+    isobject "^2.0.0"
+
+has-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+  integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==
+  dependencies:
+    get-value "^2.0.6"
+    has-values "^1.0.0"
+    isobject "^3.0.0"
+
+has-values@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+  integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==
+
+has-values@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+  integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==
+  dependencies:
+    is-number "^3.0.0"
+    kind-of "^4.0.0"
+
+hash-base@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+  integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+  dependencies:
+    inherits "^2.0.4"
+    readable-stream "^3.6.0"
+    safe-buffer "^5.2.0"
+
+hasha@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/hasha/-/hasha-3.0.0.tgz#52a32fab8569d41ca69a61ff1a214f8eb7c8bd39"
+  integrity sha512-w0Kz8lJFBoyaurBiNrIvxPqr/gJ6fOfSkpAPOepN3oECqGJag37xPbOv57izi/KP8auHgNYxn5fXtAb+1LsJ6w==
+  dependencies:
+    is-stream "^1.0.1"
+
+hasown@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c"
+  integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==
+  dependencies:
+    function-bind "^1.1.2"
+
+hawk@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.0.0.tgz#b90bb169807285411da7ffcb8dd2598502d3b52d"
+  integrity sha512-Sg+VzrI7TjUomO0rjD6UXawsj50ykn5sB/xKNW/IenxzRVyw/wt9A2FLzYpGL/r0QG5hyXY8nLx/2m8UutoDcg==
+  dependencies:
+    boom "0.4.x"
+    cryptiles "0.2.x"
+    hoek "0.9.x"
+    sntp "0.2.x"
+
+he@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+heapdump@0.3.15:
+  version "0.3.15"
+  resolved "https://registry.yarnpkg.com/heapdump/-/heapdump-0.3.15.tgz#631a8a2585588ea64778d8ec80a64c6c025f6a08"
+  integrity sha512-n8aSFscI9r3gfhOcAECAtXFaQ1uy4QSke6bnaL+iymYZ/dWs9cqDqHM+rALfsHUwukUbxsdlECZ0pKmJdQ/4OA==
+  dependencies:
+    nan "^2.13.2"
+
+hoek@0.9.x:
+  version "0.9.1"
+  resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505"
+  integrity sha512-ZZ6eGyzGjyMTmpSPYVECXy9uNfqBR7x5CavhUaLOeD6W0vWK1mp/b7O3f86XE0Mtfo9rZ6Bh3fnuw9Xr8MF9zA==
+
+home-or-tmp@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+  integrity sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg==
+  dependencies:
+    os-homedir "^1.0.0"
+    os-tmpdir "^1.0.1"
+
+home-path@^1.0.3, home-path@^1.0.5:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.7.tgz#cf77d7339ff3ddc3347a23c52612b1f5e7e56313"
+  integrity sha512-tM1pVa+u3ZqQwIkXcWfhUlY3HWS3TsnKsfi2OHHvnhkX52s9etyktPyy1rQotkr0euWimChDq+QkQuDe8ngUlQ==
+
+homedir-polyfill@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+  integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+  dependencies:
+    parse-passwd "^1.0.0"
+
+hooker@~0.2.3:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959"
+  integrity sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==
+
+hosted-git-info@^2.1.4:
+  version "2.8.9"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+  integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+
+hot-patcher@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/hot-patcher/-/hot-patcher-1.0.0.tgz#7124d2dc4ca71bcb58b1551603cd13e4fc3fcecd"
+  integrity sha512-3H8VH0PreeNsKMZw16nTHbUp4YoHCnPlawpsPXGJUR4qENDynl79b6Xk9CIFvLcH1qungBsCuzKcWyzoPPalTw==
+
+html-encoding-sniffer@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
+  integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
+  dependencies:
+    whatwg-encoding "^2.0.0"
+
+html-escaper@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+  integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+html-minifier@4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-4.0.0.tgz#cca9aad8bce1175e02e17a8c33e46d8988889f56"
+  integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==
+  dependencies:
+    camel-case "^3.0.0"
+    clean-css "^4.2.1"
+    commander "^2.19.0"
+    he "^1.2.0"
+    param-case "^2.1.1"
+    relateurl "^0.2.7"
+    uglify-js "^3.5.1"
+
+htmlparser2@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
+  integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.0.0"
+    domutils "^2.5.2"
+    entities "^2.0.0"
+
+http-cache-semantics@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+  integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
+http-errors@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+  integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+  dependencies:
+    depd "2.0.0"
+    inherits "2.0.4"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    toidentifier "1.0.1"
+
+http-errors@~1.8.1:
+  version "1.8.1"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
+  integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==
+  dependencies:
+    depd "~1.1.2"
+    inherits "2.0.4"
+    setprototypeof "1.2.0"
+    statuses ">= 1.5.0 < 2"
+    toidentifier "1.0.1"
+
+http-proxy-agent@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+  integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
+  dependencies:
+    "@tootallnate/once" "1"
+    agent-base "6"
+    debug "4"
+
+http-proxy-agent@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+  integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+  dependencies:
+    "@tootallnate/once" "2"
+    agent-base "6"
+    debug "4"
+
+http-signature@~0.10.0:
+  version "0.10.1"
+  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66"
+  integrity sha512-coK8uR5rq2IMj+Hen+sKPA5ldgbCc1/spPdKCL1Fw6h+D0s/2LzMcRK0Cqufs1h0ryx/niwBHGFu8HC3hwU+lA==
+  dependencies:
+    asn1 "0.1.11"
+    assert-plus "^0.1.5"
+    ctype "0.5.3"
+
+http-signature@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+  integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==
+  dependencies:
+    assert-plus "^1.0.0"
+    jsprim "^1.2.2"
+    sshpk "^1.7.0"
+
+http-signature@~1.3.1:
+  version "1.3.6"
+  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9"
+  integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==
+  dependencies:
+    assert-plus "^1.0.0"
+    jsprim "^2.0.2"
+    sshpk "^1.14.1"
+
+http_ece@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/http_ece/-/http_ece-1.1.0.tgz#74780c6eb32d8ddfe9e36a83abcd81fe0cd4fb75"
+  integrity sha512-bptAfCDdPJxOs5zYSe7Y3lpr772s1G346R4Td5LgRUeCwIGpCGDUTJxRrhTNcAXbx37spge0kWEIH7QAYWNTlA==
+  dependencies:
+    urlsafe-base64 "~1.0.0"
+
+httpreq@*:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-1.1.1.tgz#b8818316cdfd6b1bfb0f68b822fa1306cd24be68"
+  integrity sha512-uhSZLPPD2VXXOSN8Cni3kIsoFHaU2pT/nySEU/fHr/ePbqHYr0jeiQRmUKLEirC09SFPsdMoA7LU7UXMd/w0Kw==
+
+https-proxy-agent@7.0.2, https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b"
+  integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==
+  dependencies:
+    agent-base "^7.0.2"
+    debug "4"
+
+https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+  dependencies:
+    agent-base "6"
+    debug "4"
+
+humanize-ms@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+  integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+  dependencies:
+    ms "^2.0.0"
+
+iconv-lite@0.4.24:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3"
+
+iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3, iconv-lite@~0.6.3:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
+ieee754@^1.1.13, ieee754@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+image-size@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486"
+  integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==
+  dependencies:
+    queue "6.0.2"
+
+immediate@~3.0.5:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
+  integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+indent-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+infer-owner@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+  integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@^1.3.4:
+  version "1.3.8"
+  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+input@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/input/-/input-1.0.1.tgz#26bfb5315959c403e9317175cf8f9894e97e5742"
+  integrity sha512-5DKQKQ7Nm/CaPGYKF74uUvk5ftC3S04fLYWcDrNG2rOVhhRgB4E2J8JNb7AAh+RlQ/954ukas4bEbrRQ3/kPGA==
+  dependencies:
+    babel-runtime "^6.6.1"
+    chalk "^1.1.1"
+    inquirer "^0.12.0"
+    lodash "^4.6.1"
+
+inquirer@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
+  integrity sha512-bOetEz5+/WpgaW4D1NYOk1aD+JCqRjqu/FwRFgnIfiP7FC/zinsrfyO1vlS3nyH/R7S0IH3BIHBu4DBIDSqiGQ==
+  dependencies:
+    ansi-escapes "^1.1.0"
+    ansi-regex "^2.0.0"
+    chalk "^1.0.0"
+    cli-cursor "^1.0.1"
+    cli-width "^2.0.0"
+    figures "^1.3.5"
+    lodash "^4.3.0"
+    readline2 "^1.0.1"
+    run-async "^0.1.0"
+    rx-lite "^3.1.2"
+    string-width "^1.0.1"
+    strip-ansi "^3.0.0"
+    through "^2.3.6"
+
+internal-slot@^1.0.5:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930"
+  integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==
+  dependencies:
+    get-intrinsic "^1.2.2"
+    hasown "^2.0.0"
+    side-channel "^1.0.4"
+
+interpret@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
+  integrity sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==
+
+invariant@^2.2.2:
+  version "2.2.4"
+  resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+  integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+  dependencies:
+    loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+  integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==
+
+ip-address@^7.1.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-7.1.0.tgz#4a9c699e75b51cbeb18b38de8ed216efa1a490c5"
+  integrity sha512-V9pWC/VJf2lsXqP7IWJ+pe3P1/HCYGBMZrrnT62niLGjAfCbeiwXMUxaeHvnVlz19O27pvXP4azs+Pj/A0x+SQ==
+  dependencies:
+    jsbn "1.1.0"
+    sprintf-js "1.1.2"
+
+ip@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
+  integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
+
+ipaddr.js@1.9.1:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+  integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+ipcheck@0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/ipcheck/-/ipcheck-0.1.0.tgz#a6f942228910010f1688117b7a774b39c5222f81"
+  integrity sha512-NwhrmROU0iXKa+U1quGuQ+ag+K/1Bb5V/yh5Q4SylSu/LGymPZcWB7p4u7JgJH0qOR6cTLDO5VZlRbhoeekNzQ==
+
+is-absolute@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
+  integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==
+  dependencies:
+    is-relative "^1.0.0"
+    is-windows "^1.0.1"
+
+is-accessor-descriptor@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4"
+  integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==
+  dependencies:
+    hasown "^2.0.0"
+
+is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
+  integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.2.0"
+    is-typed-array "^1.1.10"
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-arrayish@^0.3.1:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+  integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
+is-bigint@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+  integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+  dependencies:
+    has-bigints "^1.0.1"
+
+is-binary-path@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+  integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==
+  dependencies:
+    binary-extensions "^1.0.0"
+
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-boolean-object@^1.1.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+  integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-buffer@^1.1.5, is-buffer@~1.1.6:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+  integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
+is-core-module@^2.13.0:
+  version "2.13.1"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+  integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
+  dependencies:
+    hasown "^2.0.0"
+
+is-data-descriptor@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb"
+  integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==
+  dependencies:
+    hasown "^2.0.0"
+
+is-date-object@^1.0.1:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+  integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-descriptor@^0.1.0:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33"
+  integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==
+  dependencies:
+    is-accessor-descriptor "^1.0.1"
+    is-data-descriptor "^1.0.1"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306"
+  integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==
+  dependencies:
+    is-accessor-descriptor "^1.0.1"
+    is-data-descriptor "^1.0.1"
+
+is-dotfile@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+  integrity sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==
+
+is-equal-shallow@^0.1.3:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+  integrity sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==
+  dependencies:
+    is-primitive "^2.0.0"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+  integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
+
+is-extendable@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+  dependencies:
+    is-plain-object "^2.0.4"
+
+is-extglob@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+  integrity sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-finite@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
+  integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
+
+is-fullwidth-code-point@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+  integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==
+  dependencies:
+    number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+  integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==
+
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+  integrity sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==
+  dependencies:
+    is-extglob "^1.0.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-lambda@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
+  integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
+
+is-negative-zero@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+  integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
+is-number-object@^1.0.4:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+  integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-number@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+  integrity sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==
+  dependencies:
+    kind-of "^3.0.2"
+
+is-number@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+  integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==
+  dependencies:
+    kind-of "^3.0.2"
+
+is-number@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+  integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+is-posix-bracket@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+  integrity sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==
+
+is-potential-custom-element-name@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
+  integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
+
+is-primitive@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+  integrity sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==
+
+is-property@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+  integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==
+
+is-regex@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+  integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-relative@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
+  integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
+  dependencies:
+    is-unc-path "^1.0.0"
+
+is-shared-array-buffer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+  integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+  dependencies:
+    call-bind "^1.0.2"
+
+is-stream@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
+
+is-stream@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+  integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-string@^1.0.5, is-string@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+  integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+  integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+  dependencies:
+    has-symbols "^1.0.2"
+
+is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9:
+  version "1.1.12"
+  resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a"
+  integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==
+  dependencies:
+    which-typed-array "^1.1.11"
+
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+  integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+
+is-unc-path@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
+  integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
+  dependencies:
+    unc-path-regex "^0.1.2"
+
+is-utf8@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+  integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==
+
+is-weakref@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+  integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+  dependencies:
+    call-bind "^1.0.2"
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+isarray@1.0.0, isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isarray@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+  integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+isobject@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+  integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==
+  dependencies:
+    isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+isomorphic-fetch@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4"
+  integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==
+  dependencies:
+    node-fetch "^2.6.1"
+    whatwg-fetch "^3.4.1"
+
+isstream@~0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+  integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==
+
+istanbul-lib-coverage@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49"
+  integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==
+
+istanbul-lib-hook@^2.0.7:
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133"
+  integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==
+  dependencies:
+    append-transform "^1.0.0"
+
+istanbul-lib-instrument@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630"
+  integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==
+  dependencies:
+    "@babel/generator" "^7.4.0"
+    "@babel/parser" "^7.4.3"
+    "@babel/template" "^7.4.0"
+    "@babel/traverse" "^7.4.3"
+    "@babel/types" "^7.4.0"
+    istanbul-lib-coverage "^2.0.5"
+    semver "^6.0.0"
+
+istanbul-lib-report@^2.0.8:
+  version "2.0.8"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33"
+  integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==
+  dependencies:
+    istanbul-lib-coverage "^2.0.5"
+    make-dir "^2.1.0"
+    supports-color "^6.1.0"
+
+istanbul-lib-source-maps@^3.0.6:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8"
+  integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==
+  dependencies:
+    debug "^4.1.1"
+    istanbul-lib-coverage "^2.0.5"
+    make-dir "^2.1.0"
+    rimraf "^2.6.3"
+    source-map "^0.6.1"
+
+istanbul-reports@^2.2.4:
+  version "2.2.7"
+  resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931"
+  integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==
+  dependencies:
+    html-escaper "^2.0.0"
+
+joi@^17.9.2:
+  version "17.12.0"
+  resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.0.tgz#a3fb5715f198beb0471cd551dd26792089c308d5"
+  integrity sha512-HSLsmSmXz+PV9PYoi3p7cgIbj06WnEBNT28n+bbBNcPZXZFqCzzvGqpTBPujx/Z0nh1+KNQPDrNgdmQ8dq0qYw==
+  dependencies:
+    "@hapi/hoek" "^9.3.0"
+    "@hapi/topo" "^5.1.0"
+    "@sideway/address" "^4.1.4"
+    "@sideway/formula" "^3.0.1"
+    "@sideway/pinpoint" "^2.0.0"
+
+jose@^4.15.4:
+  version "4.15.4"
+  resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.4.tgz#02a9a763803e3872cf55f29ecef0dfdcc218cc03"
+  integrity sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+  integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==
+
+js-yaml@^3.13.1, js-yaml@~3.14.0:
+  version "3.14.1"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+  integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^4.0.0"
+
+js2xmlparser@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-1.0.0.tgz#5a170f2e8d6476ce45405e04823242513782fe30"
+  integrity sha512-k5U3WB58ZbkCqSyrBrNmGtNU87YudbNGTyJNFlVenzzoaKeRXEpQ3E5pYOIidRgQCzxvWIJQK56W7eYkCQqYQA==
+
+jsbn@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
+  integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
+
+jsbn@~0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+  integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
+
+jsdoc-75lb@^3.5.6:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/jsdoc-75lb/-/jsdoc-75lb-3.6.0.tgz#a807119528b4009ccbcab49b7522f63fec6cd0bd"
+  integrity sha512-m/2YaKZdw2LA0FiC36TJnVtKNGNrPIA1emLLSNwzz8ng5KpgZVV1aPnl/TnqkiVgY0xjREK25IYM9MNGPaBcnA==
+  dependencies:
+    bluebird "~3.4.6"
+    catharsis "~0.8.8"
+    escape-string-regexp "~1.0.5"
+    espree "~3.1.7"
+    js2xmlparser "~1.0.0"
+    klaw "~1.3.0"
+    marked "~0.3.6"
+    mkdirp "~0.5.1"
+    requizzle "~0.2.1"
+    strip-json-comments "~2.0.1"
+    taffydb "2.6.2"
+    underscore "~1.8.3"
+
+jsdoc-api@^1.0.0:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/jsdoc-api/-/jsdoc-api-1.2.4.tgz#5012235927bfad1e27bc88d07b0ddddb2d3a8a59"
+  integrity sha512-cJ8NKrSgAeon6bTY4caWvzBGyAD7UXui4DfbLqrp3YB8hoQXspr5ObZ2sIKA4vexSIhBu4t5X21FQ3fDPHT8uA==
+  dependencies:
+    array-back "^1.0.3"
+    cache-point "~0.3.3"
+    collect-all "^1.0.2"
+    core-js "^2.4.1"
+    feature-detect-es6 "^1.3.1"
+    file-set "^1.0.1"
+    jsdoc-75lb "^3.5.6"
+    object-to-spawn-args "^1.1.0"
+    promise.prototype.finally "^1.0.1"
+    temp-path "^1.0.0"
+    then-fs "^2.0.0"
+    walk-back "^2.0.1"
+
+jsdoc-parse@^1.2.7:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/jsdoc-parse/-/jsdoc-parse-1.2.7.tgz#54b7481b3cd6bcb7c173dc4fa69ee92735ea2525"
+  integrity sha512-DZyc2k7ooiKrhD8JO+aC4Kif7oPaff7/zeOcysQ/OzpvFdkmM98xIcS3brjDmUXXk7iqXm1Zxfo0VTr1dB05oA==
+  dependencies:
+    ansi-escape-sequences "^2.2.1"
+    array-tools "^2"
+    collect-json "^1.0.1"
+    command-line-args "^2.1.4"
+    command-line-tool "^0.1.0"
+    core-js "^2.0.1"
+    feature-detect-es6 "^1.2.0"
+    file-set "~0.2.1"
+    jsdoc-api "^1.0.0"
+    object-tools "^2"
+    stream-connect "^1.0.1"
+    test-value "^1.0.1"
+
+jsdoc-to-markdown@^1.3.3:
+  version "1.3.9"
+  resolved "https://registry.yarnpkg.com/jsdoc-to-markdown/-/jsdoc-to-markdown-1.3.9.tgz#774c0ece0ebd0bcc3261b2c9a2aa8d1399a61472"
+  integrity sha512-cZLtIzmhdkuNi/9Gz8RGQF4eHwS5YHqAopt720Zk18oWI+JXPqhpuXk74KhrzptTq7KI/OyS0zY+L31W4aTHWA==
+  dependencies:
+    ansi-escape-sequences "^3.0.0"
+    command-line-args "^3.0.1"
+    command-line-usage "^3.0.5"
+    config-master "^2.0.4"
+    dmd "^1.4.1"
+    jsdoc-parse "^1.2.7"
+    jsdoc2md-stats "^1.0.3"
+    object-tools "^2.0.6"
+    stream-connect "^1.0.2"
+
+jsdoc2md-stats@^1.0.3:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/jsdoc2md-stats/-/jsdoc2md-stats-1.0.6.tgz#dc0e002aebbd0fbae5123534f92732afbc651fbf"
+  integrity sha512-FOGWtVa/VwyNQ1C8t2T3YdFXhd0BZte0jsKk8a282XtOSK6Hyb6zIwlVOG3FLWkMia8l9Vg608hJyK0gD6F1/g==
+  dependencies:
+    app-usage-stats "^0.4.0"
+    feature-detect-es6 "^1.3.1"
+
+jsdom@22.1.0:
+  version "22.1.0"
+  resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-22.1.0.tgz#0fca6d1a37fbeb7f4aac93d1090d782c56b611c8"
+  integrity sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==
+  dependencies:
+    abab "^2.0.6"
+    cssstyle "^3.0.0"
+    data-urls "^4.0.0"
+    decimal.js "^10.4.3"
+    domexception "^4.0.0"
+    form-data "^4.0.0"
+    html-encoding-sniffer "^3.0.0"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.1"
+    is-potential-custom-element-name "^1.0.1"
+    nwsapi "^2.2.4"
+    parse5 "^7.1.2"
+    rrweb-cssom "^0.6.0"
+    saxes "^6.0.0"
+    symbol-tree "^3.2.4"
+    tough-cookie "^4.1.2"
+    w3c-xmlserializer "^4.0.0"
+    webidl-conversions "^7.0.0"
+    whatwg-encoding "^2.0.0"
+    whatwg-mimetype "^3.0.0"
+    whatwg-url "^12.0.1"
+    ws "^8.13.0"
+    xml-name-validator "^4.0.0"
+
+jsesc@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+  integrity sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==
+
+jsesc@^2.5.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+  integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
+
+json-bigint@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1"
+  integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==
+  dependencies:
+    bignumber.js "^9.0.0"
+
+json-parse-better-errors@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
+  integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
+
+json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+  integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
+json5@^0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+  integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==
+
+json5@^2.2.3:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+  integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsonwebtoken@^9.0.0:
+  version "9.0.2"
+  resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3"
+  integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==
+  dependencies:
+    jws "^3.2.2"
+    lodash.includes "^4.3.0"
+    lodash.isboolean "^3.0.3"
+    lodash.isinteger "^4.0.4"
+    lodash.isnumber "^3.0.3"
+    lodash.isplainobject "^4.0.6"
+    lodash.isstring "^4.0.1"
+    lodash.once "^4.0.0"
+    ms "^2.1.1"
+    semver "^7.5.4"
+
+jsprim@^1.2.2:
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
+  integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==
+  dependencies:
+    assert-plus "1.0.0"
+    extsprintf "1.3.0"
+    json-schema "0.4.0"
+    verror "1.10.0"
+
+jsprim@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d"
+  integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==
+  dependencies:
+    assert-plus "1.0.0"
+    extsprintf "1.3.0"
+    json-schema "0.4.0"
+    verror "1.10.0"
+
+jwa@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
+  integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
+  dependencies:
+    buffer-equal-constant-time "1.0.1"
+    ecdsa-sig-formatter "1.0.11"
+    safe-buffer "^5.0.1"
+
+jwa@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc"
+  integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==
+  dependencies:
+    buffer-equal-constant-time "1.0.1"
+    ecdsa-sig-formatter "1.0.11"
+    safe-buffer "^5.0.1"
+
+jws@^3.2.2:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
+  integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
+  dependencies:
+    jwa "^1.4.1"
+    safe-buffer "^5.0.1"
+
+jws@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4"
+  integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==
+  dependencies:
+    jwa "^2.0.0"
+    safe-buffer "^5.0.1"
+
+jwt-simple@*:
+  version "0.5.6"
+  resolved "https://registry.yarnpkg.com/jwt-simple/-/jwt-simple-0.5.6.tgz#3357adec55b26547114157be66748995b75b333a"
+  integrity sha512-40aUybvhH9t2h71ncA1/1SbtTNCVZHgsTsTgqPUxGWDmUDrXyDf2wMNQKEbdBjbf4AI+fQhbECNTV6lWxQKUzg==
+
+keygrip@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226"
+  integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==
+  dependencies:
+    tsscmp "1.0.6"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+  integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+  integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+klaw@~1.3.0:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+  integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==
+  optionalDependencies:
+    graceful-fs "^4.1.9"
+
+koa-compose@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877"
+  integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==
+
+kuler@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
+  integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
+
+layerr@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/layerr/-/layerr-0.1.2.tgz#16c8e7fb042d3595ab15492bdad088f31d7afd15"
+  integrity sha512-ob5kTd9H3S4GOG2nVXyQhOu9O8nBgP555XxWPkJI0tR0JeRilfyTp8WtPdIJHLXBmHMSdEq5+KMxiYABeScsIQ==
+
+lazy-cache@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+  integrity sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==
+
+lazystream@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638"
+  integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==
+  dependencies:
+    readable-stream "^2.0.5"
+
+lcid@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+  integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==
+  dependencies:
+    invert-kv "^1.0.0"
+
+ldap-filter@^0.3.3:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/ldap-filter/-/ldap-filter-0.3.3.tgz#2b14c68a2a9d4104dbdbc910a1ca85fd189e9797"
+  integrity sha512-/tFkx5WIn4HuO+6w9lsfxq4FN3O+fDZeO9Mek8dCD8rTUpqzRa766BOBO7BcGkn3X86m5+cBm1/2S/Shzz7gMg==
+  dependencies:
+    assert-plus "^1.0.0"
+
+ldapauth-fork@5.0.5:
+  version "5.0.5"
+  resolved "https://registry.yarnpkg.com/ldapauth-fork/-/ldapauth-fork-5.0.5.tgz#984f98ffda8622a4dcf150533e2d3282372c2cb1"
+  integrity sha512-LWUk76+V4AOZbny/3HIPQtGPWZyA3SW2tRhsWIBi9imP22WJktKLHV1ofd8Jo/wY7Ve6vAT7FCI5mEn3blZTjw==
+  dependencies:
+    "@types/ldapjs" "^2.2.2"
+    bcryptjs "^2.4.0"
+    ldapjs "^2.2.1"
+    lru-cache "^7.10.1"
+
+ldapjs@^2.2.1:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/ldapjs/-/ldapjs-2.3.3.tgz#06c317d3cbb5ac42fbba741e1a8b130ffcf997ab"
+  integrity sha512-75QiiLJV/PQqtpH+HGls44dXweviFwQ6SiIK27EqzKQ5jU/7UFrl2E5nLdQ3IYRBzJ/AVFJI66u0MZ0uofKYwg==
+  dependencies:
+    abstract-logging "^2.0.0"
+    asn1 "^0.2.4"
+    assert-plus "^1.0.0"
+    backoff "^2.5.0"
+    ldap-filter "^0.3.3"
+    once "^1.4.0"
+    vasync "^2.2.0"
+    verror "^1.8.1"
+
+lie@3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
+  integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==
+  dependencies:
+    immediate "~3.0.5"
+
+liftup@~3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/liftup/-/liftup-3.0.1.tgz#1cb81aff0f368464ed3a5f1a7286372d6b1a60ce"
+  integrity sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==
+  dependencies:
+    extend "^3.0.2"
+    findup-sync "^4.0.0"
+    fined "^1.2.0"
+    flagged-respawn "^1.0.1"
+    is-plain-object "^2.0.4"
+    object.map "^1.0.1"
+    rechoir "^0.7.0"
+    resolve "^1.19.0"
+
+load-json-file@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+  integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==
+  dependencies:
+    graceful-fs "^4.1.2"
+    parse-json "^2.2.0"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+    strip-bom "^2.0.0"
+
+load-json-file@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+  integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==
+  dependencies:
+    graceful-fs "^4.1.2"
+    parse-json "^4.0.0"
+    pify "^3.0.0"
+    strip-bom "^3.0.0"
+
+loadavg-windows@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/loadavg-windows/-/loadavg-windows-1.1.1.tgz#e384aa8107b4ebf851bec267dd4a0789c4c54bc4"
+  integrity sha512-ncSyH121LuN6OENPSohTAS2W85J3NYVIfjsVcK4spViQbHlQUXhGKd8VYhrqWyjtwwSTw4g3rrDraNoSJWRLgw==
+  dependencies:
+    weak-daemon "1.0.3"
+
+localforage@^1.9.0:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4"
+  integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==
+  dependencies:
+    lie "3.1.1"
+
+locate-path@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+  dependencies:
+    p-locate "^3.0.0"
+    path-exists "^3.0.0"
+
+lodash.assign@^4.1.0, lodash.assign@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
+  integrity sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==
+
+lodash.defaults@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
+  integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==
+
+lodash.difference@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
+  integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==
+
+lodash.flatten@^4.4.0:
+  version "4.4.0"
+  resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+  integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==
+
+lodash.flattendeep@^4.4.0:
+  version "4.4.0"
+  resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
+  integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==
+
+lodash.includes@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
+  integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==
+
+lodash.isboolean@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
+  integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==
+
+lodash.isinteger@^4.0.4:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
+  integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==
+
+lodash.isnumber@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
+  integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==
+
+lodash.isplainobject@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+  integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
+
+lodash.isstring@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
+  integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==
+
+lodash.once@^4.0.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+  integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==
+
+lodash.pick@^4.4.0:
+  version "4.4.0"
+  resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
+  integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==
+
+lodash.snakecase@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d"
+  integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==
+
+lodash.union@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
+  integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==
+
+lodash@^4.17.14, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.6.1, lodash@~4.17.19, lodash@~4.17.21:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+logform@^2.3.2, logform@^2.4.0:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5"
+  integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==
+  dependencies:
+    "@colors/colors" "1.6.0"
+    "@types/triple-beam" "^1.3.2"
+    fecha "^4.2.0"
+    ms "^2.1.1"
+    safe-stable-stringify "^2.3.1"
+    triple-beam "^1.3.0"
+
+long@^5.2.1:
+  version "5.2.3"
+  resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1"
+  integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==
+
+longest@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+  integrity sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==
+
+loose-envify@^1.0.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+  dependencies:
+    js-tokens "^3.0.0 || ^4.0.0"
+
+lossless-json@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/lossless-json/-/lossless-json-2.0.1.tgz#03f2deb5c1a828feac19d88c16e93d6388971d52"
+  integrity sha512-KW/FSL426qblKVvf4ImeMVGr0Je6J9aXvAMUOIU8AzelDj06q47mn6QJ+56lBBd+A8kjrncrxdKQs6ZssAXTmw==
+
+lower-case@^1.1.1:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+  integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==
+
+lru-cache@^10.0.1:
+  version "10.2.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3"
+  integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==
+
+lru-cache@^4.0.1:
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+  dependencies:
+    pseudomap "^1.0.2"
+    yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+  dependencies:
+    yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+  dependencies:
+    yallist "^4.0.0"
+
+lru-cache@^7.10.1, lru-cache@^7.14.1:
+  version "7.18.3"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+  integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+
+lru-cache@^8.0.0:
+  version "8.0.5"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e"
+  integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==
+
+ltx@^2.8.1:
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/ltx/-/ltx-2.10.0.tgz#0b794b898e01d9dcc61b54b160e78869003bbb20"
+  integrity sha512-RB4zR6Mrp/0wTNS9WxMvpgfht/7u/8QAC9DpPD19opL/4OASPa28uoliFqeDkLUU8pQ4aeAfATBZmz1aSAHkMw==
+  dependencies:
+    inherits "^2.0.4"
+
+ltx@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/ltx/-/ltx-3.0.0.tgz#f2a2260814165c5e28d455f9f7db2178ed295187"
+  integrity sha512-bu3/4/ApUmMqVNuIkHaRhqVtEi6didYcBDIF56xhPRCzVpdztCipZ62CUuaxMlMBUzaVL93+4LZRqe02fuAG6A==
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+  integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+  dependencies:
+    pify "^4.0.1"
+    semver "^5.6.0"
+
+make-dir@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+  dependencies:
+    semver "^6.0.0"
+
+make-fetch-happen@^9.1.0:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968"
+  integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==
+  dependencies:
+    agentkeepalive "^4.1.3"
+    cacache "^15.2.0"
+    http-cache-semantics "^4.1.0"
+    http-proxy-agent "^4.0.1"
+    https-proxy-agent "^5.0.0"
+    is-lambda "^1.0.1"
+    lru-cache "^6.0.0"
+    minipass "^3.1.3"
+    minipass-collect "^1.0.2"
+    minipass-fetch "^1.3.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    negotiator "^0.6.2"
+    promise-retry "^2.0.1"
+    socks-proxy-agent "^6.0.0"
+    ssri "^8.0.0"
+
+make-iterator@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6"
+  integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==
+  dependencies:
+    kind-of "^6.0.2"
+
+map-cache@^0.2.0, map-cache@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+  integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==
+
+map-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+  integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==
+  dependencies:
+    object-visit "^1.0.0"
+
+mariadb@3.2.2:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/mariadb/-/mariadb-3.2.2.tgz#320a991c708c737e5ddeefa1852ddf925f2dcd8c"
+  integrity sha512-9ClJCFsLcK7WnPXVxuKGd7p0CBvNch3i5nwAf1HEqERj7RV60DG/0dJu4DfO33gpYQd9Cr4jq17O76/2VjSbkg==
+  dependencies:
+    "@types/geojson" "^7946.0.10"
+    "@types/node" "^17.0.45"
+    denque "^2.1.0"
+    iconv-lite "^0.6.3"
+    lru-cache "^10.0.1"
+
+marked@~0.3.6:
+  version "0.3.19"
+  resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790"
+  integrity sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==
+
+math-random@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
+  integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
+
+md5.js@^1.3.4:
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+  integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+  dependencies:
+    hash-base "^3.0.0"
+    inherits "^2.0.1"
+    safe-buffer "^5.1.2"
+
+md5@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
+  integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==
+  dependencies:
+    charenc "0.0.2"
+    crypt "0.0.2"
+    is-buffer "~1.1.6"
+
+media-typer@0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+  integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
+
+memory-pager@^1.0.2:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
+  integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==
+
+merge-descriptors@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+  integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
+
+merge-source-map@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
+  integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
+  dependencies:
+    source-map "^0.6.1"
+
+methods@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+  integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
+
+micromatch@^2.1.5:
+  version "2.3.11"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+  integrity sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==
+  dependencies:
+    arr-diff "^2.0.0"
+    array-unique "^0.2.1"
+    braces "^1.8.2"
+    expand-brackets "^0.1.4"
+    extglob "^0.3.1"
+    filename-regex "^2.0.0"
+    is-extglob "^1.0.0"
+    is-glob "^2.0.1"
+    kind-of "^3.0.2"
+    normalize-path "^2.0.1"
+    object.omit "^2.0.0"
+    parse-glob "^3.0.4"
+    regex-cache "^0.4.2"
+
+micromatch@^3.1.10:
+  version "3.1.10"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    braces "^2.3.1"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    extglob "^2.0.4"
+    fragment-cache "^0.2.1"
+    kind-of "^6.0.2"
+    nanomatch "^1.2.9"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.2"
+
+micromatch@^4.0.2, micromatch@^4.0.4:
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+  dependencies:
+    braces "^3.0.2"
+    picomatch "^2.3.1"
+
+mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+mime@1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mime@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7"
+  integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==
+
+mime@~1.2.11, mime@~1.2.9:
+  version "1.2.11"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10"
+  integrity sha512-Ysa2F/nqTNGHhhm9MV8ure4+Hc+Y8AWiqUdHxsO7xu8zc92ND9f3kpALHjaP026Ft17UfxrMt95c50PLUeynBw==
+
+minify-js@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/minify-js/-/minify-js-0.0.2.tgz#833ba28645a1cfa942536bc6de4f0294d482f639"
+  integrity sha512-3FZu98ARQYJ4S+7Qj+hMfznf98hSVSa5YMJRYhJ5UtqF1dh+oZwQE50a63hdIstyyEdx+33V4OWrgZOynHvsEw==
+  dependencies:
+    async "^2.0.1"
+    babel-cli "^6.16.0"
+    babel-preset-es2015 "^6.16.0"
+    dir_cache "^1.0.1"
+    grunt "^1.0.1"
+    grunt-jsdoc-to-markdown "^1.2.1"
+    utils-igor "^2.0.0"
+
+minify-js@0.0.4:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/minify-js/-/minify-js-0.0.4.tgz#e960cb61083f37af856944c512d0fca546d28dda"
+  integrity sha512-K7siyCl7QDUJhpyKWOCJmNQcghoPnk7BSbusljtOD9LwgqeQ/zVYe8qHKsYEBcyD44IdnhrgGkBiNRzsdh80/w==
+  dependencies:
+    async "^2.0.1"
+    dir_cache "^1.0.1"
+    utils-igor "^2.0.0"
+
+minimalistic-assert@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+  integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimatch@^2.0.1:
+  version "2.0.10"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
+  integrity sha512-jQo6o1qSVLEWaw3l+bwYA2X0uLuK2KjNh2wjgO7Q/9UJnXr1Q3yQKR8BI0/Bt/rPg75e6SMW4hW/6cBHVTZUjA==
+  dependencies:
+    brace-expansion "^1.0.0"
+
+minimatch@^3.0.4, minimatch@^3.1.1:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimatch@^5.1.0:
+  version "5.1.6"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
+  integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimatch@~3.0.4:
+  version "3.0.8"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1"
+  integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimist@1.2.8, minimist@^1.2.5, minimist@^1.2.6:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+minimist@~0.0.1:
+  version "0.0.10"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+  integrity sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==
+
+minipass-collect@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+  integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-fetch@^1.3.2:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6"
+  integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==
+  dependencies:
+    minipass "^3.1.0"
+    minipass-sized "^1.0.3"
+    minizlib "^2.0.0"
+  optionalDependencies:
+    encoding "^0.1.12"
+
+minipass-flush@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+  integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+  integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-sized@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
+  integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3:
+  version "3.3.6"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
+  integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
+  dependencies:
+    yallist "^4.0.0"
+
+minipass@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
+  integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
+
+minizlib@^2.0.0, minizlib@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+  integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+  dependencies:
+    minipass "^3.0.0"
+    yallist "^4.0.0"
+
+mixin-deep@^1.2.0:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+  dependencies:
+    for-in "^1.0.2"
+    is-extendable "^1.0.1"
+
+mkdirp2@^1.0.3:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/mkdirp2/-/mkdirp2-1.0.5.tgz#68bbe61defefafce4b48948608ec0bac942512c2"
+  integrity sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==
+
+mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
+  version "0.5.6"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
+  integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
+  dependencies:
+    minimist "^1.2.6"
+
+mkdirp@^1.0.3, mkdirp@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+  integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+modern-syslog@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/modern-syslog/-/modern-syslog-1.2.0.tgz#6e419f640efe877f73ffea1c3e987132a69cd2a2"
+  integrity sha512-dmFE23qpyZJf8MOdzuNKliW4j1PCqxaRtSzyNnv6QDUWjf1z8T4ZoQ7Qf0t6It2ewNv9/XJZSJoUgwpq3D0X7A==
+  dependencies:
+    nan "^2.13.2"
+
+mongodb-connection-string-url@^2.5.4:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf"
+  integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==
+  dependencies:
+    "@types/whatwg-url" "^8.2.1"
+    whatwg-url "^11.0.0"
+
+mongodb@4.13.0:
+  version "4.13.0"
+  resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-4.13.0.tgz#2aa832b827e2891eb2e52e8235c201cbb4701ed2"
+  integrity sha512-+taZ/bV8d1pYuHL4U+gSwkhmDrwkWbH1l4aah4YpmpscMwgFBkufIKxgP/G7m87/NUuQzc2Z75ZTI7ZOyqZLbw==
+  dependencies:
+    bson "^4.7.0"
+    mongodb-connection-string-url "^2.5.4"
+    socks "^2.7.1"
+  optionalDependencies:
+    "@aws-sdk/credential-providers" "^3.186.0"
+    saslprep "^1.0.3"
+
+mongodb@^3.3.2:
+  version "3.7.4"
+  resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.7.4.tgz#119530d826361c3e12ac409b769796d6977037a4"
+  integrity sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==
+  dependencies:
+    bl "^2.2.1"
+    bson "^1.1.4"
+    denque "^1.4.1"
+    optional-require "^1.1.8"
+    safe-buffer "^5.1.2"
+  optionalDependencies:
+    saslprep "^1.0.0"
+
+mongojs@3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/mongojs/-/mongojs-3.1.0.tgz#4242e6f5218a7301c35393b64ba9130d1d9488ef"
+  integrity sha512-aXJ4xfXwx9s1cqtKTZ24PypXiWhIgvgENObQzCGbV4QBxEVedy3yuErhx6znk959cF2dOzL2ClgXJvIhfgkpIQ==
+  dependencies:
+    each-series "^1.0.0"
+    mongodb "^3.3.2"
+    nyc "^14.1.1"
+    once "^1.4.0"
+    parse-mongo-url "^1.1.1"
+    readable-stream "^3.4.0"
+    thunky "^1.1.0"
+    to-mongodb-core "^2.0.0"
+
+mqemitter@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/mqemitter/-/mqemitter-3.0.0.tgz#427733ce397be39304c2279bd84358d5525cf577"
+  integrity sha512-1HduoiTFngBGFEKCGvfCpGfPM/3g58xtDW9fmuHpbnRieC01uAi3yJE/F1YsUrzH8p441l10kosYzi3HhJYnrQ==
+  dependencies:
+    fastparallel "^2.3.0"
+    qlobber "^3.1.0"
+
+mqtt-packet@^6.1.2:
+  version "6.10.0"
+  resolved "https://registry.yarnpkg.com/mqtt-packet/-/mqtt-packet-6.10.0.tgz#c8b507832c4152e3e511c0efa104ae4a64cd418f"
+  integrity sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==
+  dependencies:
+    bl "^4.0.2"
+    debug "^4.1.1"
+    process-nextick-args "^2.0.1"
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@2.1.3, ms@^2.0.0, ms@^2.1.1:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+multiparty@4.2.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-4.2.3.tgz#6b14981badb5ad3f0929622868751810368d4633"
+  integrity sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==
+  dependencies:
+    http-errors "~1.8.1"
+    safe-buffer "5.2.1"
+    uid-safe "2.1.5"
+
+mustache@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64"
+  integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
+
+mute-stream@0.0.5:
+  version "0.0.5"
+  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+  integrity sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==
+
+mysql2@3.6.2:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.2.tgz#be2eeba80c5167ffb856c48d61be5ac0e5ef6c09"
+  integrity sha512-m5erE6bMoWfPXW1D5UrVwlT8PowAoSX69KcZzPuARQ3wY1RJ52NW9PdvdPo076XiSIkQ5IBTis7hxdlrQTlyug==
+  dependencies:
+    denque "^2.1.0"
+    generate-function "^2.3.1"
+    iconv-lite "^0.6.3"
+    long "^5.2.1"
+    lru-cache "^8.0.0"
+    named-placeholders "^1.1.3"
+    seq-queue "^0.0.5"
+    sqlstring "^2.3.2"
+
+named-placeholders@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351"
+  integrity sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==
+  dependencies:
+    lru-cache "^7.14.1"
+
+nan@^2.12.1, nan@^2.13.2, nan@^2.17.0, nan@^2.18.0:
+  version "2.18.0"
+  resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554"
+  integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==
+
+nanoid@^2.1.0:
+  version "2.1.11"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280"
+  integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==
+
+nanomatch@^1.2.9:
+  version "1.2.13"
+  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    fragment-cache "^0.2.1"
+    is-windows "^1.0.2"
+    kind-of "^6.0.2"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+negotiator@0.6.3, negotiator@^0.6.2:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+  integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
+neo-async@^2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+nested-error-stacks@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5"
+  integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==
+
+nested-property@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/nested-property/-/nested-property-4.0.0.tgz#a67b5a31991e701e03cdbaa6453bc5b1011bb88d"
+  integrity sha512-yFehXNWRs4cM0+dz7QxCd06hTbWbSkV0ISsqBfkntU6TOY4Qm3Q88fRRLOddkGh2Qq6dZvnKVAahfhjcUvLnyA==
+
+next-tick@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
+  integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
+
+no-case@^2.2.0:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+  integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
+  dependencies:
+    lower-case "^1.1.1"
+
+node-addon-api@^1.7.1:
+  version "1.7.2"
+  resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d"
+  integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==
+
+node-addon-api@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
+  integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
+
+node-environment-flags@^1.0.5:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088"
+  integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==
+  dependencies:
+    object.getownpropertydescriptors "^2.0.3"
+    semver "^5.7.0"
+
+node-fetch@^2.3.0, node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7, node-fetch@^2.6.9:
+  version "2.7.0"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
+  integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+node-forge@1.3.1, node-forge@^1.3.0:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
+  integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
+
+node-gyp-build@^4.3.0:
+  version "4.8.0"
+  resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd"
+  integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==
+
+node-gyp@8.x:
+  version "8.4.1"
+  resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937"
+  integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==
+  dependencies:
+    env-paths "^2.2.0"
+    glob "^7.1.4"
+    graceful-fs "^4.2.6"
+    make-fetch-happen "^9.1.0"
+    nopt "^5.0.0"
+    npmlog "^6.0.0"
+    rimraf "^3.0.2"
+    semver "^7.3.5"
+    tar "^6.1.2"
+    which "^2.0.2"
+
+node-localstorage@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/node-localstorage/-/node-localstorage-2.2.1.tgz#869723550a4883e426cb391d2df0b563a51c7c1c"
+  integrity sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==
+  dependencies:
+    write-file-atomic "^1.1.4"
+
+node-pushover@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/node-pushover/-/node-pushover-1.0.0.tgz#d723fda9d9396f9714b30dcc380ac6bc44c64e96"
+  integrity sha512-yIIt6a60obTco2/Yr0/9iR4+4sDbDzlM3qpaJ99xnAwFlDeg29V5ur19D2L+S9i5LaBao5yAQKAdpvQ+7kVIng==
+  dependencies:
+    httpreq "*"
+
+node-releases@^2.0.14:
+  version "2.0.14"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+  integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
+
+node-sspi@0.2.10:
+  version "0.2.10"
+  resolved "https://registry.yarnpkg.com/node-sspi/-/node-sspi-0.2.10.tgz#9e1f5ff2f0af24324023cef8471c06fcb24a5591"
+  integrity sha512-IEm0OaTklsCCO9rzxvchkJvuU85yA7ouD723uRr3IabTXv/aOIZRwA3CVrZxU+sZ7/kOttIyrOsi7HqeHTH8eg==
+  dependencies:
+    bindings "^1.1.1"
+    node-addon-api "^1.7.1"
+
+node-uuid@~1.4.0:
+  version "1.4.8"
+  resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907"
+  integrity sha512-TkCET/3rr9mUuRp+CpO7qfgT++aAxfDRaalQhwPFzI9BY/2rCDn6OfpZOVggi1AXfTPpfkTrg5f5WQx5G1uLxA==
+
+node-vault@0.10.2:
+  version "0.10.2"
+  resolved "https://registry.yarnpkg.com/node-vault/-/node-vault-0.10.2.tgz#d5629c2e88744183474bba2ce54e1e08c4d15e8e"
+  integrity sha512-//uc9/YImE7Dx0QHdwMiAzLaOumiKUnOUP8DymgtkZ8nsq6/V2LKvEu6kw91Lcruw8lWUfj4DO7CIXNPRWBuuA==
+  dependencies:
+    debug "^4.3.4"
+    mustache "^4.2.0"
+    postman-request "^2.88.1-postman.33"
+    tv4 "^1.3.0"
+
+node-windows@0.1.14:
+  version "0.1.14"
+  resolved "https://registry.yarnpkg.com/node-windows/-/node-windows-0.1.14.tgz#31bb0503da3bc637f2bfaa8b266640a2e92d891f"
+  integrity sha512-2sz0i+ckeX/+22Z4KcDVis1ukyGOYZWx2WG9nQYauUwzIxEye5QcMrExkH7OaRSHkwM5bN/jesxsiQqkUb1O/w==
+  dependencies:
+    optimist "~0.6.0"
+    xml "0.0.12"
+
+node-xcs@0.1.7:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/node-xcs/-/node-xcs-0.1.7.tgz#831d4956d6d6b958a1bc266b70760eafaa733206"
+  integrity sha512-YrZOhvyrk6LKYcGFq+sSNvfLalhEBmdc8E105J3hHpn+lVUD5dRJGGf0RpsismNMgp8Mv+Vvft6tofq0mj6Ofw==
+  dependencies:
+    "@xmpp/client" "^0.9.2"
+    "@xmpp/debug" "^0.9.2"
+
+nodemailer@6.9.8:
+  version "6.9.8"
+  resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.8.tgz#29601e80440f2af7aa62b32758fdac7c6b784143"
+  integrity sha512-cfrYUk16e67Ks051i4CntM9kshRYei1/o/Gi8K1d+R34OIs21xdFnW7Pt7EucmVKA0LKtqUGNcjMZ7ehjl49mQ==
+
+nofilter@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e"
+  integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==
+
+nopt@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
+  integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==
+  dependencies:
+    abbrev "1"
+
+nopt@~3.0.6:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+  integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==
+  dependencies:
+    abbrev "1"
+
+nopt@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
+  integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
+  dependencies:
+    abbrev "1"
+    osenv "^0.1.4"
+
+normalize-package-data@^2.3.2:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+  dependencies:
+    hosted-git-info "^2.1.4"
+    resolve "^1.10.0"
+    semver "2 || 3 || 4 || 5"
+    validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.0, normalize-path@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+  integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==
+  dependencies:
+    remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+npmlog@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0"
+  integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==
+  dependencies:
+    are-we-there-yet "^2.0.0"
+    console-control-strings "^1.1.0"
+    gauge "^3.0.0"
+    set-blocking "^2.0.0"
+
+npmlog@^6.0.0:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
+  integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
+  dependencies:
+    are-we-there-yet "^3.0.0"
+    console-control-strings "^1.1.0"
+    gauge "^4.0.3"
+    set-blocking "^2.0.0"
+
+number-is-nan@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+  integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==
+
+nwsapi@^2.2.4:
+  version "2.2.7"
+  resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
+  integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
+
+nyc@^14.1.1:
+  version "14.1.1"
+  resolved "https://registry.yarnpkg.com/nyc/-/nyc-14.1.1.tgz#151d64a6a9f9f5908a1b73233931e4a0a3075eeb"
+  integrity sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==
+  dependencies:
+    archy "^1.0.0"
+    caching-transform "^3.0.2"
+    convert-source-map "^1.6.0"
+    cp-file "^6.2.0"
+    find-cache-dir "^2.1.0"
+    find-up "^3.0.0"
+    foreground-child "^1.5.6"
+    glob "^7.1.3"
+    istanbul-lib-coverage "^2.0.5"
+    istanbul-lib-hook "^2.0.7"
+    istanbul-lib-instrument "^3.3.0"
+    istanbul-lib-report "^2.0.8"
+    istanbul-lib-source-maps "^3.0.6"
+    istanbul-reports "^2.2.4"
+    js-yaml "^3.13.1"
+    make-dir "^2.1.0"
+    merge-source-map "^1.1.0"
+    resolve-from "^4.0.0"
+    rimraf "^2.6.3"
+    signal-exit "^3.0.2"
+    spawn-wrap "^1.4.2"
+    test-exclude "^5.2.3"
+    uuid "^3.3.2"
+    yargs "^13.2.2"
+    yargs-parser "^13.0.0"
+
+oauth-sign@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e"
+  integrity sha512-Tr31Sh5FnK9YKm7xTUPyDMsNOvMqkVDND0zvK/Wgj7/H9q8mpye0qG2nVzrnsvLhcsX5DtqXD0la0ks6rkPCGQ==
+
+oauth-sign@~0.9.0:
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+  integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+oauth@0.9.x:
+  version "0.9.15"
+  resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1"
+  integrity sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==
+
+object-assign@^4.1.0, object-assign@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-copy@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+  integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==
+  dependencies:
+    copy-descriptor "^0.1.0"
+    define-property "^0.2.5"
+    kind-of "^3.0.3"
+
+object-get@^2.0.0, object-get@^2.0.2, object-get@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/object-get/-/object-get-2.1.1.tgz#1dad63baf6d94df184d1c58756cc9be55b174dac"
+  integrity sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg==
+
+object-hash@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5"
+  integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
+
+object-inspect@^1.13.1, object-inspect@^1.9.0:
+  version "1.13.1"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
+  integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
+
+object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-to-spawn-args@^1.1.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-to-spawn-args/-/object-to-spawn-args-1.1.1.tgz#77da8827f073d011c9e1b173f895781470246785"
+  integrity sha512-d6xH8b+QdNj+cdndsL3rVCzwW9PqSSXQBDVj0d8fyaCqMimUEz+sW+Jtxp77bxaSs7C5w7XOH844FG7p2A0cFw==
+
+object-tools@^1.2.1, object-tools@^1.6.1:
+  version "1.6.7"
+  resolved "https://registry.yarnpkg.com/object-tools/-/object-tools-1.6.7.tgz#52d400fc875250993dbbb3ba298d7c79bb0698d0"
+  integrity sha512-At5Cw0arQlH/+bXCONl2GXDHuPrWgKsR55aWXjvTM+5gyeHOTYJhMc9q5Vex5uFOpgnA6sG0QSZzsQsSXyCL1Q==
+  dependencies:
+    array-tools "^1.8.4"
+    typical "^2.2"
+
+object-tools@^2, object-tools@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/object-tools/-/object-tools-2.0.6.tgz#f3fe1c350cda4a6f5d99d9646dc4892a02476ddd"
+  integrity sha512-Su3j153hgK9Dgd07FTi6y6DJmJtyWxyuoWvl5VZLI6HVL9VQ81ShfT9c2l/eNIZY85axAi0t1AqFjCAATGab0g==
+  dependencies:
+    array-back "^1.0.2"
+    collect-json "^1.0.7"
+    object-get "^2.0.2"
+    test-value "^1.1.0"
+    typical "^2.4.2"
+
+object-visit@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+  integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==
+  dependencies:
+    isobject "^3.0.0"
+
+object.assign@^4.1.4:
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
+  integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
+  dependencies:
+    call-bind "^1.0.5"
+    define-properties "^1.2.1"
+    has-symbols "^1.0.3"
+    object-keys "^1.1.1"
+
+object.defaults@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
+  integrity sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==
+  dependencies:
+    array-each "^1.0.1"
+    array-slice "^1.0.0"
+    for-own "^1.0.0"
+    isobject "^3.0.0"
+
+object.getownpropertydescriptors@^2.0.3:
+  version "2.1.7"
+  resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a"
+  integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==
+  dependencies:
+    array.prototype.reduce "^1.0.6"
+    call-bind "^1.0.2"
+    define-properties "^1.2.0"
+    es-abstract "^1.22.1"
+    safe-array-concat "^1.0.0"
+
+object.map@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37"
+  integrity sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==
+  dependencies:
+    for-own "^1.0.0"
+    make-iterator "^1.0.0"
+
+object.omit@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+  integrity sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==
+  dependencies:
+    for-own "^0.1.4"
+    is-extendable "^0.1.1"
+
+object.pick@^1.2.0, object.pick@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+  integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==
+  dependencies:
+    isobject "^3.0.1"
+
+oidc-token-hash@^5.0.3:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz#9a229f0a1ce9d4fc89bcaee5478c97a889e7b7b6"
+  integrity sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==
+
+on-finished@2.4.1:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
+  integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
+  dependencies:
+    ee-first "1.1.1"
+
+on-headers@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+  integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+  dependencies:
+    wrappy "1"
+
+one-time@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45"
+  integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==
+  dependencies:
+    fn.name "1.x.x"
+
+onetime@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+  integrity sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==
+
+openid-client@*:
+  version "5.6.4"
+  resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.6.4.tgz#b2c25e6d5338ba3ce00e04341bb286798a196177"
+  integrity sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA==
+  dependencies:
+    jose "^4.15.4"
+    lru-cache "^6.0.0"
+    object-hash "^2.2.0"
+    oidc-token-hash "^5.0.3"
+
+opentype.js@^0.7.3:
+  version "0.7.3"
+  resolved "https://registry.yarnpkg.com/opentype.js/-/opentype.js-0.7.3.tgz#40fb8ce18bfd60e74448efdfe442834098397aab"
+  integrity sha512-Veui5vl2bLonFJ/SjX/WRWJT3SncgiZNnKUyahmXCc2sa1xXW15u3R/3TN5+JFiP7RsjK5ER4HA5eWaEmV9deA==
+  dependencies:
+    tiny-inflate "^1.0.2"
+
+optimist@^0.6.1, optimist@~0.6.0:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+  integrity sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==
+  dependencies:
+    minimist "~0.0.1"
+    wordwrap "~0.0.2"
+
+optional-require@^1.1.8:
+  version "1.1.8"
+  resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.1.8.tgz#16364d76261b75d964c482b2406cb824d8ec44b7"
+  integrity sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==
+  dependencies:
+    require-at "^1.0.6"
+
+os-homedir@^1.0.0, os-homedir@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+  integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==
+
+os-locale@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+  integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==
+  dependencies:
+    lcid "^1.0.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+  integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
+
+osenv@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+  integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+  dependencies:
+    os-homedir "^1.0.0"
+    os-tmpdir "^1.0.0"
+
+otplib@10.2.3:
+  version "10.2.3"
+  resolved "https://registry.yarnpkg.com/otplib/-/otplib-10.2.3.tgz#5a371da0c2b36a4a92d2bdac7bf4446dd7ccafc8"
+  integrity sha512-dwQTF4SkLFVZyV85JFrzCh+zSSlWHyKQtjbHrDmldxqBo6BMZ8uMfQ+kcVTf/VCkbUx1KARvn9cR/inYM2nHTw==
+  dependencies:
+    thirty-two "1.0.2"
+
+output-file-sync@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
+  integrity sha512-uQLlclru4xpCi+tfs80l3QF24KL81X57ELNMy7W/dox+JTtxUf1bLyQ8968fFCmSqqbokjW0kn+WBIlO+rSkNg==
+  dependencies:
+    graceful-fs "^4.1.4"
+    mkdirp "^0.5.1"
+    object-assign "^4.1.0"
+
+p-limit@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+p-locate@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+  dependencies:
+    p-limit "^2.0.0"
+
+p-map@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+  dependencies:
+    aggregate-error "^3.0.0"
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+package-hash@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-3.0.0.tgz#50183f2d36c9e3e528ea0a8605dff57ce976f88e"
+  integrity sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==
+  dependencies:
+    graceful-fs "^4.1.15"
+    hasha "^3.0.0"
+    lodash.flattendeep "^4.4.0"
+    release-zalgo "^1.0.0"
+
+packet-reader@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74"
+  integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==
+
+pako@^2.0.3:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86"
+  integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==
+
+param-case@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+  integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==
+  dependencies:
+    no-case "^2.2.0"
+
+parse-filepath@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891"
+  integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==
+  dependencies:
+    is-absolute "^1.0.0"
+    map-cache "^0.2.0"
+    path-root "^0.1.1"
+
+parse-glob@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+  integrity sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==
+  dependencies:
+    glob-base "^0.3.0"
+    is-dotfile "^1.0.0"
+    is-extglob "^1.0.0"
+    is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+  integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==
+  dependencies:
+    error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+  integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
+  dependencies:
+    error-ex "^1.3.1"
+    json-parse-better-errors "^1.0.1"
+
+parse-mongo-url@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/parse-mongo-url/-/parse-mongo-url-1.1.1.tgz#66238df5f8e7c0c8ca4cd970d4ab6a1373eb75b5"
+  integrity sha512-7bZUusQIrFLwvsLHBnCz2WKYQ5LKO/LwKPnvQxbMIh9gDx8H5ZsknRmLjZdn6GVdrgVOwqDrZKsY0qDLNmRgcw==
+
+parse-passwd@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+  integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==
+
+parse5@^7.1.2:
+  version "7.1.2"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
+  integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+  dependencies:
+    entities "^4.4.0"
+
+parseurl@~1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+  integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+parsimmon@1.18.1:
+  version "1.18.1"
+  resolved "https://registry.yarnpkg.com/parsimmon/-/parsimmon-1.18.1.tgz#d8dd9c28745647d02fc6566f217690897eed7709"
+  integrity sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw==
+
+pascalcase@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+  integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==
+
+passport-azure-oauth2@*:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/passport-azure-oauth2/-/passport-azure-oauth2-0.1.0.tgz#b391ebdf3aabb9529aa2b6c461d5a1677dd4c362"
+  integrity sha512-AoDCiGv3EDXRTArN9ZpnG+ZGnwx6shO8lU1S9x8YVQtZ3OLlbrmSWQTPOutb/Mm+MNNX6SSYKctXTX7U4nRW4g==
+  dependencies:
+    passport-oauth "^1.0.0"
+
+passport-github2@*:
+  version "0.1.12"
+  resolved "https://registry.yarnpkg.com/passport-github2/-/passport-github2-0.1.12.tgz#a72ebff4fa52a35bc2c71122dcf470d1116f772c"
+  integrity sha512-3nPUCc7ttF/3HSP/k9sAXjz3SkGv5Nki84I05kSQPo01Jqq1NzJACgMblCK0fGcv9pKCG/KXU3AJRDGLqHLoIw==
+  dependencies:
+    passport-oauth2 "1.x.x"
+
+passport-google-oauth20@*:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz#0d241b2d21ebd3dc7f2b60669ec4d587e3a674ef"
+  integrity sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==
+  dependencies:
+    passport-oauth2 "1.x.x"
+
+passport-oauth1@1.x.x:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/passport-oauth1/-/passport-oauth1-1.3.0.tgz#5d57f1415c8e28e46b461a12ec1b492934f7c354"
+  integrity sha512-8T/nX4gwKTw0PjxP1xfD0QhrydQNakzeOpZ6M5Uqdgz9/a/Ag62RmJxnZQ4LkbdXGrRehQHIAHNAu11rCP46Sw==
+  dependencies:
+    oauth "0.9.x"
+    passport-strategy "1.x.x"
+    utils-merge "1.x.x"
+
+passport-oauth2@1.x.x, passport-oauth2@^1.6:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/passport-oauth2/-/passport-oauth2-1.7.0.tgz#5c4766c8531ac45ffe9ec2c09de9809e2c841fc4"
+  integrity sha512-j2gf34szdTF2Onw3+76alNnaAExlUmHvkc7cL+cmaS5NzHzDP/BvFHJruueQ9XAeNOdpI+CH+PWid8RA7KCwAQ==
+  dependencies:
+    base64url "3.x.x"
+    oauth "0.9.x"
+    passport-strategy "1.x.x"
+    uid2 "0.0.x"
+    utils-merge "1.x.x"
+
+passport-oauth@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/passport-oauth/-/passport-oauth-1.0.0.tgz#90aff63387540f02089af28cdad39ea7f80d77df"
+  integrity sha512-4IZNVsZbN1dkBzmEbBqUxDG8oFOIK81jqdksE3HEb/vI3ib3FMjbiZZ6MTtooyYZzmKu0BfovjvT1pdGgIq+4Q==
+  dependencies:
+    passport-oauth1 "1.x.x"
+    passport-oauth2 "1.x.x"
+
+passport-reddit@*:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/passport-reddit/-/passport-reddit-1.1.0.tgz#efac026a6d55c9ce4e8dbc189b94b248ea64e6bf"
+  integrity sha512-dLOg41JEyUIuHKF3L/RojrAWG8F/VbywkRzKxIMXUSo0+/ea4NZzlkywP/wsTGDH3z9/uMYVu5rKb52rwZl3iQ==
+  dependencies:
+    passport-oauth2 "^1.6"
+
+passport-saml@*:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/passport-saml/-/passport-saml-3.2.4.tgz#e8e9523f954988a3a47d12e425d7fa0f20a74dc9"
+  integrity sha512-JSgkFXeaexLNQh1RrOvJAgjLnZzH/S3HbX/mWAk+i7aulnjqUe7WKnPl1NPnJWqP7Dqsv0I2Xm6KIFHkftk0HA==
+  dependencies:
+    "@xmldom/xmldom" "^0.7.6"
+    debug "^4.3.2"
+    passport-strategy "^1.0.0"
+    xml-crypto "^2.1.3"
+    xml-encryption "^2.0.0"
+    xml2js "^0.4.23"
+    xmlbuilder "^15.1.1"
+
+passport-strategy@1.x.x, passport-strategy@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4"
+  integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==
+
+passport-twitter@*:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/passport-twitter/-/passport-twitter-1.0.4.tgz#01a799e1f760bf2de49f2ba5fba32282f18932d7"
+  integrity sha512-qvdauqCqCJJci82mJ9hZZQ6nAv7aSHV31svL8+9H7mRlDdXCdfU6AARQrmmJu3DRmv9fvIebM7zzxR7mVufN3A==
+  dependencies:
+    passport-oauth1 "1.x.x"
+    xtraverse "0.1.x"
+
+passport@*:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/passport/-/passport-0.7.0.tgz#3688415a59a48cf8068417a8a8092d4492ca3a05"
+  integrity sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==
+  dependencies:
+    passport-strategy "1.x.x"
+    pause "0.0.1"
+    utils-merge "^1.0.1"
+
+path-browserify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
+  integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
+
+path-exists@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+  integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==
+  dependencies:
+    pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+  integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
+
+path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-posix@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f"
+  integrity sha512-1gJ0WpNIiYcQydgg3Ed8KzvIqTsDpNwq+cjBCssvBtuTWjEqY1AW+i+OepiEMqDCzyro9B2sLAe4RBPajMYFiA==
+
+path-root-regex@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
+  integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==
+
+path-root@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
+  integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==
+  dependencies:
+    path-root-regex "^0.1.0"
+
+path-to-regexp@0.1.7:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+  integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
+
+path-type@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+  integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==
+  dependencies:
+    graceful-fs "^4.1.2"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+path-type@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+  integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+  dependencies:
+    pify "^3.0.0"
+
+pause@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d"
+  integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==
+
+peek-readable@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.0.0.tgz#7ead2aff25dc40458c60347ea76cfdfd63efdfec"
+  integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==
+
+pend@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
+
+performance-now@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+  integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
+
+pg-cloudflare@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98"
+  integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==
+
+pg-connection-string@^2.4.0, pg-connection-string@^2.5.0, pg-connection-string@^2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475"
+  integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==
+
+pg-int8@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
+  integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
+
+pg-pool@^3.4.1, pg-pool@^3.6.1:
+  version "3.6.1"
+  resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7"
+  integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==
+
+pg-protocol@^1.5.0, pg-protocol@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833"
+  integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==
+
+pg-types@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3"
+  integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
+  dependencies:
+    pg-int8 "1.0.1"
+    postgres-array "~2.0.0"
+    postgres-bytea "~1.0.0"
+    postgres-date "~1.0.4"
+    postgres-interval "^1.1.0"
+
+pg@8.7.1:
+  version "8.7.1"
+  resolved "https://registry.yarnpkg.com/pg/-/pg-8.7.1.tgz#9ea9d1ec225980c36f94e181d009ab9f4ce4c471"
+  integrity sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA==
+  dependencies:
+    buffer-writer "2.0.0"
+    packet-reader "1.0.0"
+    pg-connection-string "^2.5.0"
+    pg-pool "^3.4.1"
+    pg-protocol "^1.5.0"
+    pg-types "^2.1.0"
+    pgpass "1.x"
+
+pg@^8.4.0:
+  version "8.11.3"
+  resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb"
+  integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==
+  dependencies:
+    buffer-writer "2.0.0"
+    packet-reader "1.0.0"
+    pg-connection-string "^2.6.2"
+    pg-pool "^3.6.1"
+    pg-protocol "^1.6.0"
+    pg-types "^2.1.0"
+    pgpass "1.x"
+  optionalDependencies:
+    pg-cloudflare "^1.1.1"
+
+pgpass@1.x:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d"
+  integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==
+  dependencies:
+    split2 "^4.1.0"
+
+pgtools@0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/pgtools/-/pgtools-0.3.2.tgz#df11d54057c889e27ba891664efda69de1b7a0fe"
+  integrity sha512-o9iI8CrJohpjt3hgoJuEC18oYrt/iLsc3BYtW6kP/0T7EyQ9T/WlnuzyKcC2GtfutREfXCmwaUcbqPrLw8sjng==
+  dependencies:
+    bluebird "^3.3.5"
+    pg "^8.4.0"
+    pg-connection-string "^2.4.0"
+    yargs "^5.0.0"
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+  integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
+
+pify@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+  integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==
+  dependencies:
+    pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+  integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==
+
+pirates@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
+  integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
+
+pkg-dir@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+  integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+  dependencies:
+    find-up "^3.0.0"
+
+plivo@4.58.0:
+  version "4.58.0"
+  resolved "https://registry.yarnpkg.com/plivo/-/plivo-4.58.0.tgz#bd6b2ded17319049f6a1d2dde7985b2ff7ae93db"
+  integrity sha512-AFxxxYgVaqx+09aDZoLeg5Tv7xPI7CBU/f3DOtvOVbFnqZZZByPTkuGzUZ3oeit7+yTklzQt4o5DfpNDB9LgNA==
+  dependencies:
+    "@types/node" "^14.14.14"
+    axios "^0.21.1"
+    base-64 "^0.1.0"
+    build-url "^1.0.10"
+    form-data "^4.0.0"
+    https-proxy-agent "^5.0.0"
+    joi "^17.9.2"
+    jsonwebtoken "^9.0.0"
+    lodash "^4.17.4"
+    querystring "^0.2.0"
+    uri-parser "^1.0.0"
+    utf8 "^2.1.2"
+    xml2js "^0.5.0"
+    xmlbuilder "^9.0.1"
+
+posix-character-classes@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+  integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==
+
+postgres-array@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
+  integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
+
+postgres-bytea@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35"
+  integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==
+
+postgres-date@~1.0.4:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8"
+  integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
+
+postgres-interval@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
+  integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==
+  dependencies:
+    xtend "^4.0.0"
+
+postman-request@^2.88.1-postman.33:
+  version "2.88.1-postman.33"
+  resolved "https://registry.yarnpkg.com/postman-request/-/postman-request-2.88.1-postman.33.tgz#684147d61c9a263a28f148d3207b1593e0f01ec5"
+  integrity sha512-uL9sCML4gPH6Z4hreDWbeinKU0p0Ke261nU7OvII95NU22HN6Dk7T/SaVPaj6T4TsQqGKIFw6/woLZnH7ugFNA==
+  dependencies:
+    "@postman/form-data" "~3.1.1"
+    "@postman/tough-cookie" "~4.1.3-postman.1"
+    "@postman/tunnel-agent" "^0.6.3"
+    aws-sign2 "~0.7.0"
+    aws4 "^1.12.0"
+    brotli "^1.3.3"
+    caseless "~0.12.0"
+    combined-stream "~1.0.6"
+    extend "~3.0.2"
+    forever-agent "~0.6.1"
+    har-validator "~5.1.3"
+    http-signature "~1.3.1"
+    is-typedarray "~1.0.0"
+    isstream "~0.1.2"
+    json-stringify-safe "~5.0.1"
+    mime-types "^2.1.35"
+    oauth-sign "~0.9.0"
+    performance-now "^2.1.0"
+    qs "~6.5.3"
+    safe-buffer "^5.1.2"
+    stream-length "^1.0.2"
+    uuid "^8.3.2"
+
+precond@0.2:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac"
+  integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==
+
+preserve@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+  integrity sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==
+
+private@^0.1.6, private@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+  integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+
+process-nextick-args@^2.0.1, process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+promise-inflight@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+  integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==
+
+promise-retry@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+  integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+  dependencies:
+    err-code "^2.0.2"
+    retry "^0.12.0"
+
+promise.prototype.finally@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-1.0.1.tgz#91182f91c92486995740fa05e0da942ac986befa"
+  integrity sha512-8/BYzHIaMau3J4PfcBIC1YKh3emPEO+/7e1qY5SD5mtmSFGKnoM3Ow4wVlf1ffKveCcaXwp6KcXhsKzWt6mN4w==
+
+"promise@>=3.2 <8":
+  version "7.3.1"
+  resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+  integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
+  dependencies:
+    asap "~2.0.3"
+
+proxy-addr@~2.0.7:
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+  integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+  dependencies:
+    forwarded "0.2.0"
+    ipaddr.js "1.9.1"
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+pseudomap@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+  integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
+
+psl@^1.1.28, psl@^1.1.33:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+  integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+
+pump@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+  integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+qlobber@^3.0.2, qlobber@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/qlobber/-/qlobber-3.1.0.tgz#b8c8e067496de17bdbf3cd843cf53ece09c8d211"
+  integrity sha512-B7EU6Hv9g4BeJiB7qtOjn9wwgqVpcWE5c4/86O0Yoj7fmAvgwXrdG1E+QF13S/+TX5XGUl7toizP0gzXR2Saug==
+
+qs@6.11.0:
+  version "6.11.0"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
+  integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
+  dependencies:
+    side-channel "^1.0.4"
+
+qs@^6.6.0, qs@^6.7.0, qs@^6.9.4:
+  version "6.11.2"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9"
+  integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==
+  dependencies:
+    side-channel "^1.0.4"
+
+qs@~0.6.0:
+  version "0.6.6"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz#6e015098ff51968b8a3c819001d5f2c89bc4b107"
+  integrity sha512-kN+yNdAf29Jgp+AYHUmC7X4QdJPR8czuMWLNLc0aRxkQ7tB3vJQEONKKT9ou/rW7EbqVec11srC9q9BiVbcnHA==
+
+qs@~6.5.2, qs@~6.5.3:
+  version "6.5.3"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
+  integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
+
+querystring@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd"
+  integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==
+
+querystringify@^2.1.1:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
+  integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
+
+queue@6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
+  integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==
+  dependencies:
+    inherits "~2.0.3"
+
+random-bytes@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b"
+  integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==
+
+randomatic@^3.0.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
+  integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
+  dependencies:
+    is-number "^4.0.0"
+    kind-of "^6.0.0"
+    math-random "^1.0.1"
+
+randombytes@^2.0.1:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
+range-parser@~1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+  integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.5.1:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
+  integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
+  dependencies:
+    bytes "3.1.2"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    unpipe "1.0.0"
+
+raw-body@2.5.2:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
+  integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
+  dependencies:
+    bytes "3.1.2"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    unpipe "1.0.0"
+
+read-pkg-up@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+  integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==
+  dependencies:
+    find-up "^1.0.0"
+    read-pkg "^1.0.0"
+
+read-pkg-up@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
+  integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==
+  dependencies:
+    find-up "^3.0.0"
+    read-pkg "^3.0.0"
+
+read-pkg@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+  integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==
+  dependencies:
+    load-json-file "^1.0.0"
+    normalize-package-data "^2.3.2"
+    path-type "^1.0.0"
+
+read-pkg@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+  integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==
+  dependencies:
+    load-json-file "^4.0.0"
+    normalize-package-data "^2.3.2"
+    path-type "^3.0.0"
+
+"readable-stream@2 || 3", readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.3.5:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
+  integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
+readable-web-to-node-stream@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb"
+  integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==
+  dependencies:
+    readable-stream "^3.6.0"
+
+readdir-glob@^1.1.2:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584"
+  integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==
+  dependencies:
+    minimatch "^5.1.0"
+
+readdirp@^2.0.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+  integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+  dependencies:
+    graceful-fs "^4.1.11"
+    micromatch "^3.1.10"
+    readable-stream "^2.0.2"
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+readline2@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
+  integrity sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==
+  dependencies:
+    code-point-at "^1.0.0"
+    is-fullwidth-code-point "^1.0.0"
+    mute-stream "0.0.5"
+
+real-cancellable-promise@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/real-cancellable-promise/-/real-cancellable-promise-1.2.0.tgz#f365e78b29c6a2303584f2c308959b415401056a"
+  integrity sha512-FYhmx1FVSgoPRjneoTjh+EKZcNb8ijl/dyatTzase5eujYhVrLNDOiIY6AgQq7GU1kOoLgEd9jLVbhFg8k8dOQ==
+
+rechoir@^0.7.0:
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
+  integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==
+  dependencies:
+    resolve "^1.9.0"
+
+reduce-extract@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/reduce-extract/-/reduce-extract-1.0.0.tgz#67f2385beda65061b5f5f4312662e8b080ca1525"
+  integrity sha512-QF8vjWx3wnRSL5uFMyCjDeDc5EBMiryoT9tz94VvgjKfzecHAVnqmXAwQDcr7X4JmLc2cjkjFGCVzhMqDjgR9g==
+  dependencies:
+    test-value "^1.0.1"
+
+reduce-flatten@^1.0.0, reduce-flatten@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-1.0.1.tgz#258c78efd153ddf93cb561237f61184f3696e327"
+  integrity sha512-j5WfFJfc9CoXv/WbwVLHq74i/hdTUpy+iNC534LxczMRP67vJeK3V9JOdnL0N1cIRbn9mYhE2yVjvvKXDxvNXQ==
+
+reduce-unique@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/reduce-unique/-/reduce-unique-1.0.0.tgz#7e586bcf87a4e32b6d7abd8277fad6cdec9f4803"
+  integrity sha512-WQ6qRDbx7NL4CdW6AFjnyX9i0k6FxGiUaGJ5xAEZ8ZLjwisxi3wcKWYzKmULj8s1N8G1KYcREyg0P4PVo2rI/A==
+
+reduce-without@^1.0.0, reduce-without@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/reduce-without/-/reduce-without-1.0.1.tgz#68ad0ead11855c9a37d4e8256c15bbf87972fc8c"
+  integrity sha512-zQv5y/cf85sxvdrKPlfcRzlDn/OqKFThNimYmsS3flmkioKvkUGn2Qg9cJVoQiEvdxFGLE0MQER/9fZ9sUqdxg==
+  dependencies:
+    test-value "^2.0.0"
+
+regenerate@^1.2.1:
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+  integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regenerator-runtime@^0.10.5:
+  version "0.10.5"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
+  integrity sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==
+
+regenerator-runtime@^0.11.0:
+  version "0.11.1"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+  integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.14.0:
+  version "0.14.1"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
+  integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
+
+regenerator-transform@^0.10.0:
+  version "0.10.1"
+  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
+  integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==
+  dependencies:
+    babel-runtime "^6.18.0"
+    babel-types "^6.19.0"
+    private "^0.1.6"
+
+regex-cache@^0.4.2:
+  version "0.4.4"
+  resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+  integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
+  dependencies:
+    is-equal-shallow "^0.1.3"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+  dependencies:
+    extend-shallow "^3.0.2"
+    safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e"
+  integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.2.0"
+    set-function-name "^2.0.0"
+
+regexpu-core@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
+  integrity sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==
+  dependencies:
+    regenerate "^1.2.1"
+    regjsgen "^0.2.0"
+    regjsparser "^0.1.4"
+
+regjsgen@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+  integrity sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==
+
+regjsparser@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+  integrity sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==
+  dependencies:
+    jsesc "~0.5.0"
+
+relateurl@^0.2.7:
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
+
+release-zalgo@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730"
+  integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==
+  dependencies:
+    es6-error "^4.0.1"
+
+remove-trailing-separator@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+  integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==
+
+repeat-element@^1.1.2:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
+  integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
+
+repeat-string@^1.5.2, repeat-string@^1.6.1:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+  integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
+
+repeating@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+  integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==
+  dependencies:
+    is-finite "^1.0.0"
+
+req-then@0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/req-then/-/req-then-0.5.1.tgz#31c6e0b56f4ddd2acd6de0ba1bcea77b6079dfdf"
+  integrity sha512-ald8dmP4zgF87wWs1n+/TppCd9LB6zZfAWSqF/RFCQ/ImDoH6ro77vmfOLhwkgH2uB8mcn4fNbwL9DEbpKCwJA==
+  dependencies:
+    array-back "^1.0.3"
+    defer-promise "^1.0.0"
+    feature-detect-es6 "^1.3.1"
+    lodash.pick "^4.4.0"
+    typical "^2.6.0"
+
+request@*:
+  version "2.88.2"
+  resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+  integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+  dependencies:
+    aws-sign2 "~0.7.0"
+    aws4 "^1.8.0"
+    caseless "~0.12.0"
+    combined-stream "~1.0.6"
+    extend "~3.0.2"
+    forever-agent "~0.6.1"
+    form-data "~2.3.2"
+    har-validator "~5.1.3"
+    http-signature "~1.2.0"
+    is-typedarray "~1.0.0"
+    isstream "~0.1.2"
+    json-stringify-safe "~5.0.1"
+    mime-types "~2.1.19"
+    oauth-sign "~0.9.0"
+    performance-now "^2.1.0"
+    qs "~6.5.2"
+    safe-buffer "^5.1.2"
+    tough-cookie "~2.5.0"
+    tunnel-agent "^0.6.0"
+    uuid "^3.3.2"
+
+request@~2.27.0:
+  version "2.27.0"
+  resolved "https://registry.yarnpkg.com/request/-/request-2.27.0.tgz#dfb1a224dd3a5a9bade4337012503d710e538668"
+  integrity sha512-V4AYOEmdUrf0X+CVF2hndyMzIeQ8G7LB45HER/rXZYEwNVI3QFGgLPLafQLHjqtG/ggzHEMb66Ng5IemksixsQ==
+  dependencies:
+    aws-sign "~0.3.0"
+    cookie-jar "~0.3.0"
+    forever-agent "~0.5.0"
+    form-data "~0.1.0"
+    hawk "~1.0.0"
+    http-signature "~0.10.0"
+    json-stringify-safe "~5.0.0"
+    mime "~1.2.9"
+    node-uuid "~1.4.0"
+    oauth-sign "~0.3.0"
+    qs "~0.6.0"
+    tunnel-agent "~0.3.0"
+
+require-at@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/require-at/-/require-at-1.0.6.tgz#9eb7e3c5e00727f5a4744070a7f560d4de4f6e6a"
+  integrity sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+require-main-filename@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+  integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==
+
+require-main-filename@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requires-port@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+  integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
+requizzle@~0.2.1:
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.4.tgz#319eb658b28c370f0c20f968fa8ceab98c13d27c"
+  integrity sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==
+  dependencies:
+    lodash "^4.17.21"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+  integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==
+  dependencies:
+    expand-tilde "^2.0.0"
+    global-modules "^1.0.0"
+
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+  integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
+
+resolve@^1.10.0, resolve@^1.19.0, resolve@^1.9.0:
+  version "1.22.8"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+  integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+  dependencies:
+    is-core-module "^2.13.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+restore-cursor@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+  integrity sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==
+  dependencies:
+    exit-hook "^1.0.0"
+    onetime "^1.0.0"
+
+ret@~0.1.10:
+  version "0.1.15"
+  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retimer@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/retimer/-/retimer-2.0.0.tgz#e8bd68c5e5a8ec2f49ccb5c636db84c04063bbca"
+  integrity sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==
+
+retry@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+  integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
+reusify@^1.0.0, reusify@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+right-align@^0.1.1:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+  integrity sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==
+  dependencies:
+    align-text "^0.1.1"
+
+rimraf@^2.6.2, rimraf@^2.6.3:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
+rimraf@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+  dependencies:
+    glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+  integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+  dependencies:
+    hash-base "^3.0.0"
+    inherits "^2.0.1"
+
+rrweb-cssom@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1"
+  integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==
+
+run-async@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+  integrity sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==
+  dependencies:
+    once "^1.3.0"
+
+rx-lite@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+  integrity sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ==
+
+"rxjs@>= 5.x <= 7.x":
+  version "7.8.1"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
+  integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
+  dependencies:
+    tslib "^2.1.0"
+
+safe-array-concat@^1.0.0, safe-array-concat@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692"
+  integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==
+  dependencies:
+    call-bind "^1.0.5"
+    get-intrinsic "^1.2.2"
+    has-symbols "^1.0.3"
+    isarray "^2.0.5"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-regex-test@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5"
+  integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==
+  dependencies:
+    call-bind "^1.0.5"
+    get-intrinsic "^1.2.2"
+    is-regex "^1.1.4"
+
+safe-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+  integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==
+  dependencies:
+    ret "~0.1.10"
+
+safe-stable-stringify@^2.3.1:
+  version "2.4.3"
+  resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886"
+  integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==
+
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sasl-anonymous@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/sasl-anonymous/-/sasl-anonymous-0.1.0.tgz#f544c7e824df2a40d9ad4733829572cc8d9ed5a5"
+  integrity sha512-x+0sdsV0Gie2EexxAUsx6ZoB+X6OCthlNBvAQncQxreEWQJByAPntj0EAgTlJc2kZicoc+yFzeR6cl8VfsQGfA==
+
+sasl-plain@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/sasl-plain/-/sasl-plain-0.1.0.tgz#cf145e7c02222b64d60c0806d9cd2ae5380426cc"
+  integrity sha512-X8mCSfR8y0NryTu0tuVyr4IS2jBunBgyG+3a0gEEkd0nlHGiyqJhlc4EIkzmSwaa7F8S4yo+LS6Cu5qxRkJrmg==
+
+sasl-scram-sha-1@^1.2.0, sasl-scram-sha-1@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/sasl-scram-sha-1/-/sasl-scram-sha-1-1.2.1.tgz#d88d51feaa0ff320d8eb1d6fc75657653f9dcd4b"
+  integrity sha512-o63gNo+EGsk1ML0bNeUAjRomIIcG7VaUyA+ffhd9MME5BjqVEpp42YkmBBZqzz1KmJG3YqpRLE4PfUe7FjexaA==
+  dependencies:
+    bitwise-xor "0.0.0"
+    create-hash "^1.1.0"
+    create-hmac "^1.1.3"
+    randombytes "^2.0.1"
+
+saslmechanisms@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/saslmechanisms/-/saslmechanisms-0.1.1.tgz#478be1429500fcfaa780be88b3343ced7d2a9182"
+  integrity sha512-pVlvK5ysevz8MzybRnDIa2YMxn0OJ7b9lDiWhMoaKPoJ7YkAg/7YtNjUgaYzElkwHxsw8dBMhaEn7UP6zxEwPg==
+
+saslprep@1.0.3, saslprep@^1.0.0, saslprep@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226"
+  integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==
+  dependencies:
+    sparse-bitfield "^3.0.3"
+
+sax@>=0.6.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0"
+  integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==
+
+saxes@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5"
+  integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==
+  dependencies:
+    xmlchars "^2.2.0"
+
+scmp@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/scmp/-/scmp-2.1.0.tgz#37b8e197c425bdeb570ab91cc356b311a11f9c9a"
+  integrity sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==
+
+"semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^5.7.0:
+  version "5.7.2"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+  integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
+
+semver@7.5.4, semver@^7.3.5, semver@^7.5.4:
+  version "7.5.4"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+  integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
+  dependencies:
+    lru-cache "^6.0.0"
+
+semver@^6.0.0, semver@^6.3.1:
+  version "6.3.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+send@0.18.0:
+  version "0.18.0"
+  resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
+  integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
+  dependencies:
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    fresh "0.5.2"
+    http-errors "2.0.0"
+    mime "1.6.0"
+    ms "2.1.3"
+    on-finished "2.4.1"
+    range-parser "~1.2.1"
+    statuses "2.0.1"
+
+seq-queue@^0.0.5:
+  version "0.0.5"
+  resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e"
+  integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==
+
+serve-static@1.15.0:
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
+  integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
+  dependencies:
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    parseurl "~1.3.3"
+    send "0.18.0"
+
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+
+set-function-length@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1"
+  integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==
+  dependencies:
+    define-data-property "^1.1.1"
+    function-bind "^1.1.2"
+    get-intrinsic "^1.2.2"
+    gopd "^1.0.1"
+    has-property-descriptors "^1.0.1"
+
+set-function-name@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a"
+  integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==
+  dependencies:
+    define-data-property "^1.0.1"
+    functions-have-names "^1.2.3"
+    has-property-descriptors "^1.0.0"
+
+set-value@^2.0.0, set-value@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-extendable "^0.1.1"
+    is-plain-object "^2.0.3"
+    split-string "^3.0.1"
+
+setprototypeof@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+  integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+  version "2.4.11"
+  resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+  integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+  dependencies:
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+shallow-clone@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+  integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+  dependencies:
+    kind-of "^6.0.2"
+
+shortid@^2.2.14:
+  version "2.2.16"
+  resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.16.tgz#b742b8f0cb96406fd391c76bfc18a67a57fe5608"
+  integrity sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==
+  dependencies:
+    nanoid "^2.1.0"
+
+side-channel@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+  dependencies:
+    call-bind "^1.0.0"
+    get-intrinsic "^1.0.2"
+    object-inspect "^1.9.0"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7:
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+simple-swizzle@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+  integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
+  dependencies:
+    is-arrayish "^0.3.1"
+
+slash@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+  integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==
+
+slash@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+  integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slide@^1.1.5:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+  integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==
+
+smart-buffer@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+  integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
+snapdragon-node@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+  dependencies:
+    define-property "^1.0.0"
+    isobject "^3.0.0"
+    snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+  dependencies:
+    kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+  dependencies:
+    base "^0.11.1"
+    debug "^2.2.0"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    map-cache "^0.2.2"
+    source-map "^0.5.6"
+    source-map-resolve "^0.5.0"
+    use "^3.1.0"
+
+sntp@0.2.x:
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900"
+  integrity sha512-bDLrKa/ywz65gCl+LmOiIhteP1bhEsAAzhfMedPoiHP3dyYnAevlaJshdqb9Yu0sRifyP/fRqSt8t+5qGIWlGQ==
+  dependencies:
+    hoek "0.9.x"
+
+socks-proxy-agent@^6.0.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce"
+  integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==
+  dependencies:
+    agent-base "^6.0.2"
+    debug "^4.3.3"
+    socks "^2.6.2"
+
+socks@^2.6.2, socks@^2.7.1:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55"
+  integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==
+  dependencies:
+    ip "^2.0.0"
+    smart-buffer "^4.2.0"
+
+sort-array@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/sort-array/-/sort-array-1.1.2.tgz#b88986053c0170a7f9de63f18a49ec79c24c3e64"
+  integrity sha512-5eLpySAUYxyidyJM6CW/+QP8ymqFr0ZDrO4TmCwxpqPmQRZFMqfZq6L/O7c9jdtjDNJZlKwSR4vzR4sVggjRKw==
+  dependencies:
+    array-back "^1.0.4"
+    object-get "^2.1.0"
+    typical "^2.6.0"
+
+source-map-resolve@^0.5.0:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+  integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+  dependencies:
+    atob "^2.1.2"
+    decode-uri-component "^0.2.0"
+    resolve-url "^0.2.1"
+    source-map-url "^0.4.0"
+    urix "^0.1.0"
+
+source-map-support@^0.4.15:
+  version "0.4.18"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+  integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
+  dependencies:
+    source-map "^0.5.6"
+
+source-map-support@^0.5.16:
+  version "0.5.21"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+  integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+
+source-map@^0.1.40:
+  version "0.1.43"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
+  integrity sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==
+  dependencies:
+    amdefine ">=0.0.4"
+
+source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sparse-bitfield@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11"
+  integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==
+  dependencies:
+    memory-pager "^1.0.2"
+
+spawn-wrap@^1.4.2:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.3.tgz#81b7670e170cca247d80bf5faf0cfb713bdcf848"
+  integrity sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==
+  dependencies:
+    foreground-child "^1.5.6"
+    mkdirp "^0.5.0"
+    os-homedir "^1.0.1"
+    rimraf "^2.6.2"
+    signal-exit "^3.0.2"
+    which "^1.3.0"
+
+spdx-correct@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
+  integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
+  dependencies:
+    spdx-expression-parse "^3.0.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b"
+  integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==
+
+spdx-expression-parse@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+  integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+  dependencies:
+    spdx-exceptions "^2.1.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+  version "3.0.16"
+  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f"
+  integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==
+
+split-string@^3.0.1, split-string@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+  dependencies:
+    extend-shallow "^3.0.0"
+
+split2@^4.1.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
+  integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
+
+sprintf-js@1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
+  integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
+
+sprintf-js@^1.1.1:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
+  integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
+
+sprintf-js@~1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+sqlite3@5.1.6:
+  version "5.1.6"
+  resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.6.tgz#1d4fbc90fe4fbd51e952e0a90fd8f6c2b9098e97"
+  integrity sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==
+  dependencies:
+    "@mapbox/node-pre-gyp" "^1.0.0"
+    node-addon-api "^4.2.0"
+    tar "^6.1.11"
+  optionalDependencies:
+    node-gyp "8.x"
+
+sqlstring@^2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c"
+  integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==
+
+ssh2@1.15.0:
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.15.0.tgz#2f998455036a7f89e0df5847efb5421748d9871b"
+  integrity sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==
+  dependencies:
+    asn1 "^0.2.6"
+    bcrypt-pbkdf "^1.0.2"
+  optionalDependencies:
+    cpu-features "~0.0.9"
+    nan "^2.18.0"
+
+sshpk@^1.14.1, sshpk@^1.7.0:
+  version "1.18.0"
+  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028"
+  integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==
+  dependencies:
+    asn1 "~0.2.3"
+    assert-plus "^1.0.0"
+    bcrypt-pbkdf "^1.0.0"
+    dashdash "^1.12.0"
+    ecc-jsbn "~0.1.1"
+    getpass "^0.1.1"
+    jsbn "~0.1.0"
+    safer-buffer "^2.0.2"
+    tweetnacl "~0.14.0"
+
+ssri@^8.0.0, ssri@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af"
+  integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==
+  dependencies:
+    minipass "^3.1.1"
+
+stack-trace@0.0.x:
+  version "0.0.10"
+  resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
+  integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==
+
+static-extend@^0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+  integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==
+  dependencies:
+    define-property "^0.2.5"
+    object-copy "^0.1.0"
+
+statuses@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+  integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
+"statuses@>= 1.5.0 < 2":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+  integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+
+store2@^2.13.0:
+  version "2.14.2"
+  resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.2.tgz#56138d200f9fe5f582ad63bc2704dbc0e4a45068"
+  integrity sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==
+
+stream-connect@^1.0.1, stream-connect@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/stream-connect/-/stream-connect-1.0.2.tgz#18bc81f2edb35b8b5d9a8009200a985314428a97"
+  integrity sha512-68Kl+79cE0RGKemKkhxTSg8+6AGrqBt+cbZAXevg2iJ6Y3zX4JhA/sZeGzLpxW9cXhmqAcE7KnJCisUmIUfnFQ==
+  dependencies:
+    array-back "^1.0.2"
+
+stream-handlebars@~0.1.6:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/stream-handlebars/-/stream-handlebars-0.1.6.tgz#7305b5064203da171608c478acf642a149892a2f"
+  integrity sha512-i3N3nKsOHucX9NOcj/1pK3Oh+O6uG/9MOCajfVdTlx7l+XuUbl1Zk8KGK4pDBlWswlUGkLAK79QhBQzsXKA6MA==
+  dependencies:
+    handlebars "^3.0.0"
+    object-tools "^1.2.1"
+
+stream-length@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/stream-length/-/stream-length-1.0.2.tgz#8277f3cbee49a4daabcfdb4e2f4a9b5e9f2c9f00"
+  integrity sha512-aI+qKFiwoDV4rsXiS7WRoCt+v2RX1nUj17+KJC5r2gfh5xoSJIfP6Y3Do/HtvesFcTSWthIuJ3l1cvKQY/+nZg==
+  dependencies:
+    bluebird "^2.6.2"
+
+stream-via@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/stream-via/-/stream-via-1.0.4.tgz#8dccbb0ac909328eb8bc8e2a4bd3934afdaf606c"
+  integrity sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==
+
+stream-via@~0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/stream-via/-/stream-via-0.1.1.tgz#0cee5df9c959fb1d3f4eda4819f289d5f9205afc"
+  integrity sha512-1U7icavM/2dRDSevxnJRZfKBWrnhmtdCh0zQTThwYchL2YWjbwZb2PEngEj9HKjgyJ2oDipz6TLud/AU6BAIzQ==
+
+string-tools@^0.1.4:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/string-tools/-/string-tools-0.1.8.tgz#70884e86a26ee5103a078bef67033d558d36e337"
+  integrity sha512-OHaYAjvTq1WPOF4+mAYZy03UpCzhQ5h/fZ/mO+HHJDXMa5jNBB696NBQJ5EX6NQMiX5E971RN8JPZJ1qFxyrQQ==
+
+string-tools@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/string-tools/-/string-tools-1.0.0.tgz#c69a9d5788858997da66f1d923ba7113ea466b5a"
+  integrity sha512-wN3ILcVQFIf7skV2S9/6tSgK+11RAGDVt8luHaEN/RGOOHQAyBblnfEIVS1qeF+91LlTkp1lqMoglibfWnkIkg==
+
+string-width@^1.0.1, string-width@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+  integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==
+  dependencies:
+    code-point-at "^1.0.0"
+    is-fullwidth-code-point "^1.0.0"
+    strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+string-width@^3.0.0, string-width@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+  dependencies:
+    emoji-regex "^7.0.1"
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^5.1.0"
+
+string.prototype.trim@^1.2.8:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd"
+  integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.2.0"
+    es-abstract "^1.22.1"
+
+string.prototype.trimend@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e"
+  integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.2.0"
+    es-abstract "^1.22.1"
+
+string.prototype.trimstart@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298"
+  integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.2.0"
+    es-abstract "^1.22.1"
+
+string_decoder@^1.1.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+  integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==
+  dependencies:
+    ansi-regex "^2.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+  dependencies:
+    ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+strip-bom@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+  integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==
+  dependencies:
+    is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+  integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+
+strip-json-comments@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+  integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+
+strnum@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db"
+  integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==
+
+strtok3@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-7.0.0.tgz#868c428b4ade64a8fd8fee7364256001c1a4cbe5"
+  integrity sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==
+  dependencies:
+    "@tokenizer/token" "^0.3.0"
+    peek-readable "^5.0.0"
+
+supports-color@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+  integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==
+
+supports-color@^5.3.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  dependencies:
+    has-flag "^3.0.0"
+
+supports-color@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+  integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+  dependencies:
+    has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+  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.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+svg-captcha@1.4.0, svg-captcha@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/svg-captcha/-/svg-captcha-1.4.0.tgz#32ead3c6463936c218bb3bc9ed04fea4eeffe492"
+  integrity sha512-/fkkhavXPE57zRRCjNqAP3txRCSncpMx3NnNZL7iEoyAtYwUjPhJxW6FQTQPG5UPEmCrbFoXS10C3YdJlW7PDg==
+  dependencies:
+    opentype.js "^0.7.3"
+
+symbol-tree@^3.2.4:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+  integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+syslog@0.1.1-1:
+  version "0.1.1-1"
+  resolved "https://registry.yarnpkg.com/syslog/-/syslog-0.1.1-1.tgz#f69f74b0baf8a25c725af97977a18eb11927a5e1"
+  integrity sha512-7fn4sikkTRrc4kZk/i/ItCktnPD2qG+nKmgTVcuLr2VrY2V9adNhw9fN02HL6rTthwu2Og9Icr1GxZlaLp39Lg==
+
+table-layout@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-0.3.0.tgz#6ee20dc483db371b3e5c87f704ed2f7c799d2c9a"
+  integrity sha512-9ktef9AEZwAjG7f58oKbe2fEbJzEgRaEbfr8Vci/CitCDszCLKZutLcGFswuwcH6X7mpC11x9W8UW7FyJ/uRbA==
+  dependencies:
+    array-back "^1.0.3"
+    core-js "^2.4.1"
+    deep-extend "~0.4.1"
+    feature-detect-es6 "^1.3.1"
+    typical "^2.6.0"
+    wordwrapjs "^2.0.0-0"
+
+taffydb@2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268"
+  integrity sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==
+
+tar-stream@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
+  integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
+  dependencies:
+    bl "^4.0.3"
+    end-of-stream "^1.4.1"
+    fs-constants "^1.0.0"
+    inherits "^2.0.3"
+    readable-stream "^3.1.1"
+
+tar@^6.0.2, tar@^6.1.11, tar@^6.1.2:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73"
+  integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==
+  dependencies:
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    minipass "^5.0.0"
+    minizlib "^2.1.1"
+    mkdirp "^1.0.3"
+    yallist "^4.0.0"
+
+telegram@2.19.8:
+  version "2.19.8"
+  resolved "https://registry.yarnpkg.com/telegram/-/telegram-2.19.8.tgz#d6c0217e67e2cc9513e4904c033ecd4b296293f7"
+  integrity sha512-yaBRPILM0FSEbKKcnMR4Q463DpasAGOvUEcGrlW7xmYMAEntxIdoFLXrZnpNDaubncx6lc1M9cecMvlTkg6taQ==
+  dependencies:
+    "@cryptography/aes" "^0.1.1"
+    async-mutex "^0.3.0"
+    big-integer "^1.6.48"
+    buffer "^6.0.3"
+    htmlparser2 "^6.1.0"
+    mime "^3.0.0"
+    node-localstorage "^2.2.1"
+    pako "^2.0.3"
+    path-browserify "^1.0.1"
+    real-cancellable-promise "^1.1.1"
+    socks "^2.6.2"
+    store2 "^2.13.0"
+    ts-custom-error "^3.2.0"
+    websocket "^1.0.34"
+  optionalDependencies:
+    bufferutil "^4.0.3"
+    utf-8-validate "^5.0.5"
+
+telnyx@1.25.5:
+  version "1.25.5"
+  resolved "https://registry.yarnpkg.com/telnyx/-/telnyx-1.25.5.tgz#f4140459fa296c32dfa1847b0c0e70c5e02ff3c3"
+  integrity sha512-Kcb1eq/Fm9T45j1JMdcoQP1GgJqVKbQldv0C26DhCrZX5e3+17OXyQbmgtSI6EYFQ4I3HSbCfXudwDRpGDOC7Q==
+  dependencies:
+    lodash.isplainobject "^4.0.6"
+    qs "^6.6.0"
+    safe-buffer "^5.1.1"
+    tweetnacl "^1.0.1"
+    uuid "^3.3.2"
+
+temp-path@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/temp-path/-/temp-path-1.0.0.tgz#24b1543973ab442896d9ad367dd9cbdbfafe918b"
+  integrity sha512-TvmyH7kC6ZVTYkqCODjJIbgvu0FKiwQpZ4D1aknE7xpcDf/qEOB8KZEK5ef2pfbVoiBhNWs3yx4y+ESMtNYmlg==
+
+test-exclude@^5.2.3:
+  version "5.2.3"
+  resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0"
+  integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==
+  dependencies:
+    glob "^7.1.3"
+    minimatch "^3.0.4"
+    read-pkg-up "^4.0.0"
+    require-main-filename "^2.0.0"
+
+test-value@^1.0.1, test-value@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/test-value/-/test-value-1.1.0.tgz#a09136f72ec043d27c893707c2b159bfad7de93f"
+  integrity sha512-wrsbRo7qP+2Je8x8DsK8ovCGyxe3sYfQwOraIY/09A2gFXU9DYKiTF14W4ki/01AEh56kMzAmlj9CaHGDDUBJA==
+  dependencies:
+    array-back "^1.0.2"
+    typical "^2.4.2"
+
+test-value@^2.0.0, test-value@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291"
+  integrity sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==
+  dependencies:
+    array-back "^1.0.3"
+    typical "^2.6.0"
+
+text-hex@1.0.x:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5"
+  integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==
+
+then-fs@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/then-fs/-/then-fs-2.0.0.tgz#72f792dd9d31705a91ae19ebfcf8b3f968c81da2"
+  integrity sha512-5ffcBcU+vFUCYDNi/o507IqjqrTkuGsLVZ1Fp50hwgZRY7ufVFa9jFfTy5uZ2QnSKacKigWKeaXkOqLa4DsjLw==
+  dependencies:
+    promise ">=3.2 <8"
+
+thirty-two@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/thirty-two/-/thirty-two-1.0.2.tgz#4ca2fffc02a51290d2744b9e3f557693ca6b627a"
+  integrity sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==
+
+through2@^3.0.1:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4"
+  integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==
+  dependencies:
+    inherits "^2.0.4"
+    readable-stream "2 || 3"
+
+through@^2.3.6:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
+thunky@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+  integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+tiny-inflate@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"
+  integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==
+
+to-fast-properties@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+  integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==
+
+to-fast-properties@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+  integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-mongodb-core@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/to-mongodb-core/-/to-mongodb-core-2.0.0.tgz#3596ec7613ac9ad3b98a89dcb9aefba569cd27eb"
+  integrity sha512-vfXXcGYFP8+0L5IPOtUzzVIvPE/G3GN0TKa/PRBlzPqYyhm+UxhPmvv634EQgO4Ot8dHbBFihOslMJQclY8Z9A==
+
+to-object-path@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+  integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==
+  dependencies:
+    kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+  integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==
+  dependencies:
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+  dependencies:
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    regex-not "^1.0.2"
+    safe-regex "^1.1.0"
+
+toidentifier@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+  integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
+token-types@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/token-types/-/token-types-5.0.1.tgz#aa9d9e6b23c420a675e55413b180635b86a093b4"
+  integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==
+  dependencies:
+    "@tokenizer/token" "^0.3.0"
+    ieee754 "^1.2.1"
+
+tough-cookie@^4.1.2:
+  version "4.1.3"
+  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
+  integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==
+  dependencies:
+    psl "^1.1.33"
+    punycode "^2.1.1"
+    universalify "^0.2.0"
+    url-parse "^1.5.3"
+
+tough-cookie@~2.5.0:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+  integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+  dependencies:
+    psl "^1.1.28"
+    punycode "^2.1.1"
+
+tr46@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
+  integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==
+  dependencies:
+    punycode "^2.1.1"
+
+tr46@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469"
+  integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==
+  dependencies:
+    punycode "^2.3.0"
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+trim-right@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+  integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==
+
+triple-beam@^1.3.0:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984"
+  integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==
+
+ts-custom-error@^3.2.0:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/ts-custom-error/-/ts-custom-error-3.3.1.tgz#8bd3c8fc6b8dc8e1cb329267c45200f1e17a65d1"
+  integrity sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==
+
+ts-mixer@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6"
+  integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==
+
+tslib@^1.11.1:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+  integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+
+tsscmp@1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
+  integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
+
+tunnel-agent@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+  integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+  dependencies:
+    safe-buffer "^5.0.1"
+
+tunnel-agent@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.3.0.tgz#ad681b68f5321ad2827c4cfb1b7d5df2cfe942ee"
+  integrity sha512-jlGqHGoKzyyjhwv/c9omAgohntThMcGtw8RV/RDLlkbbc08kni/akVxO62N8HaXMVbVsK1NCnpSK3N2xCt22ww==
+
+tv4@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963"
+  integrity sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+  version "0.14.5"
+  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+  integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
+
+tweetnacl@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
+  integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
+
+twilio@4.19.0:
+  version "4.19.0"
+  resolved "https://registry.yarnpkg.com/twilio/-/twilio-4.19.0.tgz#b0cc25eb397490ed3e41f031ab5c79697a9065ee"
+  integrity sha512-4tM1LNM5LeUvnko4kIqIreY6vmjIo5Ag5jMEhjTDPj+GES82MnkfSkJv8N1k5/ZmeSvIdk5hjI87GB/DpDDePQ==
+  dependencies:
+    axios "^0.26.1"
+    dayjs "^1.11.9"
+    https-proxy-agent "^5.0.0"
+    jsonwebtoken "^9.0.0"
+    qs "^6.9.4"
+    scmp "^2.1.0"
+    url-parse "^1.5.9"
+    xmlbuilder "^13.0.2"
+
+type-is@~1.6.18:
+  version "1.6.18"
+  resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+  integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+  dependencies:
+    media-typer "0.3.0"
+    mime-types "~2.1.24"
+
+type@^1.0.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
+  integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+
+type@^2.7.2:
+  version "2.7.2"
+  resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0"
+  integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==
+
+typed-array-buffer@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60"
+  integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.2.1"
+    is-typed-array "^1.1.10"
+
+typed-array-byte-length@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0"
+  integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==
+  dependencies:
+    call-bind "^1.0.2"
+    for-each "^0.3.3"
+    has-proto "^1.0.1"
+    is-typed-array "^1.1.10"
+
+typed-array-byte-offset@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b"
+  integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==
+  dependencies:
+    available-typed-arrays "^1.0.5"
+    call-bind "^1.0.2"
+    for-each "^0.3.3"
+    has-proto "^1.0.1"
+    is-typed-array "^1.1.10"
+
+typed-array-length@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
+  integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
+  dependencies:
+    call-bind "^1.0.2"
+    for-each "^0.3.3"
+    is-typed-array "^1.1.9"
+
+typedarray-to-buffer@^3.1.5:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+  integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+  dependencies:
+    is-typedarray "^1.0.0"
+
+typical@^2.1, typical@^2.2, typical@^2.3.0, typical@^2.4.2, typical@^2.5.0, typical@^2.6.0, typical@^2.6.1:
+  version "2.6.1"
+  resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d"
+  integrity sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==
+
+ua-parser-js@1.0.37:
+  version "1.0.37"
+  resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f"
+  integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==
+
+uglify-js@^2.6:
+  version "2.8.29"
+  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+  integrity sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==
+  dependencies:
+    source-map "~0.5.1"
+    yargs "~3.10.0"
+  optionalDependencies:
+    uglify-to-browserify "~1.0.0"
+
+uglify-js@^3.1.4, uglify-js@^3.5.1:
+  version "3.17.4"
+  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c"
+  integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==
+
+uglify-to-browserify@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+  integrity sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==
+
+uid-safe@2.1.5:
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a"
+  integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==
+  dependencies:
+    random-bytes "~1.0.0"
+
+uid2@0.0.x:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.4.tgz#033f3b1d5d32505f5ce5f888b9f3b667123c0a44"
+  integrity sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==
+
+unbox-primitive@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+  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"
+
+unc-path-regex@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
+  integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==
+
+underscore.string@~3.3.5:
+  version "3.3.6"
+  resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159"
+  integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==
+  dependencies:
+    sprintf-js "^1.1.1"
+    util-deprecate "^1.0.2"
+
+underscore@^1.13.1:
+  version "1.13.6"
+  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441"
+  integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==
+
+underscore@~1.8.3:
+  version "1.8.3"
+  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
+  integrity sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==
+
+undici-types@~5.26.4:
+  version "5.26.5"
+  resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+  integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+undici@^5.11.0, undici@^5.22.0:
+  version "5.28.2"
+  resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.2.tgz#fea200eac65fc7ecaff80a023d1a0543423b4c91"
+  integrity sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==
+  dependencies:
+    "@fastify/busboy" "^2.0.0"
+
+unidecode@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/unidecode/-/unidecode-0.1.8.tgz#efbb301538bc45246a9ac8c559d72f015305053e"
+  integrity sha512-SdoZNxCWpN2tXTCrGkPF/0rL2HEq+i2gwRG1ReBvx8/0yTzC3enHfugOf8A9JBShVwwrRIkLX0YcDUGbzjbVCA==
+
+union-value@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+  dependencies:
+    arr-union "^3.1.0"
+    get-value "^2.0.6"
+    is-extendable "^0.1.1"
+    set-value "^2.0.1"
+
+unique-filename@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+  integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+  dependencies:
+    unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+  integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+  dependencies:
+    imurmurhash "^0.1.4"
+
+universalify@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
+  integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+  integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
+
+unset-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+  integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==
+  dependencies:
+    has-value "^0.3.1"
+    isobject "^3.0.0"
+
+update-browserslist-db@^1.0.13:
+  version "1.0.13"
+  resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
+  integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
+  dependencies:
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
+
+upper-case@^1.1.1:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+  integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+uri-parser@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/uri-parser/-/uri-parser-1.0.1.tgz#3307ebb50f279c11198ad09214bdaf24e29735b2"
+  integrity sha512-TRjjM2M83RD9jIIYttNj7ghUQTKSov+WXZbQIMM8DxY1R1QdJEGWNKKMYCxyeOw1p9re2nQ85usM6dPTVtox1g==
+
+urix@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+  integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==
+
+url-join@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
+  integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
+
+url-parse@^1.5.10, url-parse@^1.5.3, url-parse@^1.5.9:
+  version "1.5.10"
+  resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
+  integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
+  dependencies:
+    querystringify "^2.1.1"
+    requires-port "^1.0.0"
+
+url-template@^2.0.8:
+  version "2.0.8"
+  resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21"
+  integrity sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==
+
+urlsafe-base64@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz#23f89069a6c62f46cf3a1d3b00169cefb90be0c6"
+  integrity sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==
+
+usage-stats@^0.8.2:
+  version "0.8.6"
+  resolved "https://registry.yarnpkg.com/usage-stats/-/usage-stats-0.8.6.tgz#ec92559f648845c2021cbf5b4adea17af7513830"
+  integrity sha512-QS1r7a1h5g1jo6KulvVGV+eQM+Jfj87AjJBfr1iaIJYz+N7+Qh7ezaVFCulwBGd8T1EidRiSYphG17gra2y0kg==
+  dependencies:
+    array-back "^1.0.4"
+    cli-commands "0.1.0"
+    core-js "^2.4.1"
+    feature-detect-es6 "^1.3.1"
+    home-path "^1.0.5"
+    mkdirp2 "^1.0.3"
+    req-then "0.5.1"
+    typical "^2.6.1"
+    uuid "^3.0.1"
+
+use@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+user-home@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+  integrity sha512-aggiKfEEubv3UwRNqTzLInZpAOmKzwdHqEBmW/hBA/mt99eg+b4VrX6i+IRLxU8+WJYfa33rGwRseg4eElUgsQ==
+
+utf-8-validate@^5.0.2, utf-8-validate@^5.0.5:
+  version "5.0.10"
+  resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2"
+  integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==
+  dependencies:
+    node-gyp-build "^4.3.0"
+
+utf8@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96"
+  integrity sha512-QXo+O/QkLP/x1nyi54uQiG0XrODxdysuQvE5dtVqv7F5K2Qb6FsN+qbr6KhF5wQ20tfcV3VQp0/2x1e1MRSPWg==
+
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+utils-igor@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/utils-igor/-/utils-igor-1.0.4.tgz#59197669fd1e51a05ddbd3febb4789498cc42f03"
+  integrity sha512-qaUVjldlTA3BxqFy2kjm+BORr9Syc63EgDBCQKIpiLZapg76eBOoXme16MRdmaspmVxvoN4lmI/VXw7j+NaTzg==
+
+utils-igor@^2.0.0:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/utils-igor/-/utils-igor-2.0.5.tgz#51fae3fd0a754be33f7f4a05a6a4905f229e3d80"
+  integrity sha512-1Nqhu0MFGAYb3KbpDPb4TrNKFlUR8nE5gRM5o/Dj5WlokuhKPQIcVxCKHBs+usUNf/IhPguIe7ChIN1vEG+45A==
+  dependencies:
+    minify-js "0.0.2"
+
+utils-merge@1.0.1, utils-merge@1.x.x, utils-merge@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+  integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
+
+uuid@^3.0.1, uuid@^3.3.2:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+  integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+uuid@^8.3.2:
+  version "8.3.2"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+  integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+uuid@^9.0.0:
+  version "9.0.1"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
+  integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
+
+v8flags@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
+  integrity sha512-SKfhk/LlaXzvtowJabLZwD4K6SGRYeoxA7KJeISlUMAB/NT4CBkZjMq3WceX2Ckm4llwqYVo8TICgsDYCBU2tA==
+  dependencies:
+    user-home "^1.1.1"
+
+v8flags@^3.1.1, v8flags@~3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656"
+  integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==
+  dependencies:
+    homedir-polyfill "^1.0.1"
+
+validate-npm-package-license@^3.0.1:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+  dependencies:
+    spdx-correct "^3.0.0"
+    spdx-expression-parse "^3.0.0"
+
+vary@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+  integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
+
+vasync@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/vasync/-/vasync-2.2.1.tgz#d881379ff3685e4affa8e775cf0fd369262a201b"
+  integrity sha512-Hq72JaTpcTFdWiNA4Y22Amej2GH3BFmBaKPPlDZ4/oC8HNn2ISHLkFrJU4Ds8R3jcUi7oo5Y9jcMHKjES+N9wQ==
+  dependencies:
+    verror "1.10.0"
+
+verror@1.10.0:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+  integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==
+  dependencies:
+    assert-plus "^1.0.0"
+    core-util-is "1.0.2"
+    extsprintf "^1.2.0"
+
+verror@^1.8.1:
+  version "1.10.1"
+  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb"
+  integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==
+  dependencies:
+    assert-plus "^1.0.0"
+    core-util-is "1.0.2"
+    extsprintf "^1.2.0"
+
+w3c-xmlserializer@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073"
+  integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==
+  dependencies:
+    xml-name-validator "^4.0.0"
+
+walk-back@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-2.0.1.tgz#554e2a9d874fac47a8cb006bf44c2f0c4998a0a4"
+  integrity sha512-Nb6GvBR8UWX1D+Le+xUq0+Q1kFmRBIWVrfLnQAOmcpEzA9oAxwJ9gIr36t9TWYfzvWRvuMtjHiVsJYEkXWaTAQ==
+
+weak-daemon@1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/weak-daemon/-/weak-daemon-1.0.3.tgz#d922b7c0dfb8f6bf027c463ea875584d2b085f19"
+  integrity sha512-9OLYp5qQSxpnTIyuA1zJ7at3DV2DSBcbdXduC/3QFPeYjF30Lh1nfBrG+VLf4QUvZPz2lXFPu08oIRzWQfucVQ==
+
+web-push@3.6.6:
+  version "3.6.6"
+  resolved "https://registry.yarnpkg.com/web-push/-/web-push-3.6.6.tgz#592facb26116187136b0d543768ef85675791ac8"
+  integrity sha512-SyteEck9fiCskNmPxs/GFhJsZrIyLfRvjWNmcUwULLJyCU0f1oxo2sWTokXA1mDAq9vxk4e4gVcb/8agq73NkQ==
+  dependencies:
+    asn1.js "^5.3.0"
+    http_ece "1.1.0"
+    https-proxy-agent "^7.0.0"
+    jws "^4.0.0"
+    minimist "^1.2.5"
+
+webdav@4.11.3:
+  version "4.11.3"
+  resolved "https://registry.yarnpkg.com/webdav/-/webdav-4.11.3.tgz#c8bf9b5ed1799d432d58958433925b0fa91db08e"
+  integrity sha512-NIuREBXYo5xb+zB4zy502snynbhugWjepg5Oke0ByEb7J/Ofmbk+JgFYM+sZdnKG3+XQ87rictDIF+SHUJkwlg==
+  dependencies:
+    axios "^0.27.2"
+    base-64 "^1.0.0"
+    byte-length "^1.0.2"
+    fast-xml-parser "^4.2.4"
+    he "^1.2.0"
+    hot-patcher "^1.0.0"
+    layerr "^0.1.2"
+    md5 "^2.3.0"
+    minimatch "^5.1.0"
+    nested-property "^4.0.0"
+    path-posix "^1.0.0"
+    url-join "^4.0.1"
+    url-parse "^1.5.10"
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+webidl-conversions@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
+  integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
+
+websocket@^1.0.34:
+  version "1.0.34"
+  resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111"
+  integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==
+  dependencies:
+    bufferutil "^4.0.1"
+    debug "^2.2.0"
+    es5-ext "^0.10.50"
+    typedarray-to-buffer "^3.1.5"
+    utf-8-validate "^5.0.2"
+    yaeti "^0.0.6"
+
+whatwg-encoding@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
+  integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
+  dependencies:
+    iconv-lite "0.6.3"
+
+whatwg-fetch@^3.4.1:
+  version "3.6.20"
+  resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70"
+  integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==
+
+whatwg-mimetype@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
+  integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==
+
+whatwg-url@^11.0.0:
+  version "11.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018"
+  integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==
+  dependencies:
+    tr46 "^3.0.0"
+    webidl-conversions "^7.0.0"
+
+whatwg-url@^12.0.0, whatwg-url@^12.0.1:
+  version "12.0.1"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c"
+  integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==
+  dependencies:
+    tr46 "^4.1.1"
+    webidl-conversions "^7.0.0"
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+which-boxed-primitive@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+  integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+  dependencies:
+    is-bigint "^1.0.1"
+    is-boolean-object "^1.1.0"
+    is-number-object "^1.0.4"
+    is-string "^1.0.5"
+    is-symbol "^1.0.3"
+
+which-module@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+  integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==
+
+which-module@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409"
+  integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
+
+which-typed-array@^1.1.11, which-typed-array@^1.1.13:
+  version "1.1.13"
+  resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36"
+  integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==
+  dependencies:
+    available-typed-arrays "^1.0.5"
+    call-bind "^1.0.4"
+    for-each "^0.3.3"
+    gopd "^1.0.1"
+    has-tostringtag "^1.0.0"
+
+which@^1.2.14, which@^1.2.9, which@^1.3.0:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+  dependencies:
+    isexe "^2.0.0"
+
+which@^2.0.2, which@~2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+wide-align@^1.1.2, wide-align@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
+  integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
+  dependencies:
+    string-width "^1.0.2 || 2 || 3 || 4"
+
+wildleek@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/wildleek/-/wildleek-2.0.0.tgz#85eb93c9c1822da963bc3c3c8d09ae9d12b48a47"
+  integrity sha512-wtHhfuGeWH9diQsQoprX5tr2+y5lyqyzMpiTFu4gJVQIK+L4jE8Phmr50sFmk7ewhZzbbQj2pCwbUcceq+IEIg==
+  dependencies:
+    binary-search "1.3.6"
+
+window-size@0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+  integrity sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==
+
+window-size@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
+  integrity sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==
+
+winston-transport@^4.5.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.6.0.tgz#f1c1a665ad1b366df72199e27892721832a19e1b"
+  integrity sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==
+  dependencies:
+    logform "^2.3.2"
+    readable-stream "^3.6.0"
+    triple-beam "^1.3.0"
+
+winston@^3.3.3:
+  version "3.11.0"
+  resolved "https://registry.yarnpkg.com/winston/-/winston-3.11.0.tgz#2d50b0a695a2758bb1c95279f0a88e858163ed91"
+  integrity sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==
+  dependencies:
+    "@colors/colors" "^1.6.0"
+    "@dabh/diagnostics" "^2.0.2"
+    async "^3.2.3"
+    is-stream "^2.0.0"
+    logform "^2.4.0"
+    one-time "^1.0.0"
+    readable-stream "^3.4.0"
+    safe-stable-stringify "^2.3.1"
+    stack-trace "0.0.x"
+    triple-beam "^1.3.0"
+    winston-transport "^4.5.0"
+
+wordwrap@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+  integrity sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==
+
+wordwrap@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+  integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
+
+wordwrap@~0.0.2:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+  integrity sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==
+
+wordwrapjs@^1.2.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-1.2.1.tgz#754a5ea0664cfbff50540dc32d67bda3289fc34b"
+  integrity sha512-oHt3LHdyJ2xke7aFYuXXB4QBvfORPZAfwdOW5bKQhCNj2Fa+I/WBz81yle19Cs7gZvaBxoYKOuPW/mFe4X09lg==
+  dependencies:
+    array-back "^1.0.3"
+    typical "^2.5.0"
+
+wordwrapjs@^2.0.0-0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-2.0.0.tgz#ab55f695e6118da93858fdd70c053d1c5e01ac20"
+  integrity sha512-XNzRwovxCFgLxqmumTWdVAIjtvMKAfjzdB/uWgILQiOPwIFNTq9xk5ZKPvcaVX9MCZueoSV2aGtSbM3irVap3w==
+  dependencies:
+    array-back "^1.0.3"
+    feature-detect-es6 "^1.3.1"
+    reduce-flatten "^1.0.1"
+    typical "^2.6.0"
+
+wrap-ansi@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+  integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==
+  dependencies:
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+
+wrap-ansi@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+  integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+  dependencies:
+    ansi-styles "^3.2.0"
+    string-width "^3.0.0"
+    strip-ansi "^5.0.0"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+write-file-atomic@^1.1.4:
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f"
+  integrity sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==
+  dependencies:
+    graceful-fs "^4.1.11"
+    imurmurhash "^0.1.4"
+    slide "^1.1.5"
+
+write-file-atomic@^2.4.2:
+  version "2.4.3"
+  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
+  integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
+  dependencies:
+    graceful-fs "^4.1.11"
+    imurmurhash "^0.1.4"
+    signal-exit "^3.0.2"
+
+ws@8.14.2:
+  version "8.14.2"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f"
+  integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==
+
+ws@^5.2.0:
+  version "5.2.3"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d"
+  integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==
+  dependencies:
+    async-limiter "~1.0.0"
+
+ws@^7.0.0:
+  version "7.5.9"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
+  integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+
+ws@^8.13.0, ws@^8.4.0, ws@^8.9.0:
+  version "8.16.0"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4"
+  integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==
+
+xml-crypto@^2.1.3:
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/xml-crypto/-/xml-crypto-2.1.5.tgz#e201ee51dca18dd9ae158ac101b6e995c983dca8"
+  integrity sha512-xOSJmGFm+BTXmaPYk8pPV3duKo6hJuZ5niN4uMzoNcTlwYs0jAu/N3qY+ud9MhE4N7eMRuC1ayC7Yhmb7MmAWg==
+  dependencies:
+    "@xmldom/xmldom" "^0.7.9"
+    xpath "0.0.32"
+
+xml-encryption@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/xml-encryption/-/xml-encryption-2.0.0.tgz#d4e1eb3ec1f2c5d2a2a0a6e23d199237e8b4bf83"
+  integrity sha512-4Av83DdvAgUQQMfi/w8G01aJshbEZP9ewjmZMpS9t3H+OCZBDvyK4GJPnHGfWiXlArnPbYvR58JB9qF2x9Ds+Q==
+  dependencies:
+    "@xmldom/xmldom" "^0.7.0"
+    escape-html "^1.0.3"
+    xpath "0.0.32"
+
+xml-name-validator@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
+  integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
+
+xml2js@^0.4.23:
+  version "0.4.23"
+  resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
+  integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
+  dependencies:
+    sax ">=0.6.0"
+    xmlbuilder "~11.0.0"
+
+xml2js@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7"
+  integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==
+  dependencies:
+    sax ">=0.6.0"
+    xmlbuilder "~11.0.0"
+
+xml@0.0.12:
+  version "0.0.12"
+  resolved "https://registry.yarnpkg.com/xml/-/xml-0.0.12.tgz#f08b347109912be00285785f46f15ad8e50a5f67"
+  integrity sha512-vXz2nTtS+bQYemYFzbTxjlmdMOmIhmP+frdnJi3M2Ul/ezrwcW9IYwiwqvecY3PtHNXGKBDrA+DNAEky0zY7Xg==
+
+xmlbuilder@^13.0.2:
+  version "13.0.2"
+  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-13.0.2.tgz#02ae33614b6a047d1c32b5389c1fdacb2bce47a7"
+  integrity sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==
+
+xmlbuilder@^15.1.1:
+  version "15.1.1"
+  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
+  integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
+
+xmlbuilder@^9.0.1:
+  version "9.0.7"
+  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
+  integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==
+
+xmlbuilder@~11.0.0:
+  version "11.0.1"
+  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
+  integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
+
+xmlchars@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+  integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
+xmldom@0.1.x:
+  version "0.1.31"
+  resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff"
+  integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==
+
+xpath@0.0.32:
+  version "0.0.32"
+  resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.32.tgz#1b73d3351af736e17ec078d6da4b8175405c48af"
+  integrity sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==
+
+xtend@^4.0.0, xtend@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+xtraverse@0.1.x:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/xtraverse/-/xtraverse-0.1.0.tgz#b741bad018ef78d8a9d2e83ade007b3f7959c732"
+  integrity sha512-MANQdlG2hl1nQobxz1Rv8hsS1RuBS0C1N6qTOupv+9vmfrReePdxhmB2ecYjvsp4stJ80HD7erjkoF1Hd/FK9A==
+  dependencies:
+    xmldom "0.1.x"
+
+y18n@^3.2.1:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696"
+  integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==
+
+y18n@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
+  integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
+
+yaeti@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"
+  integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==
+
+yallist@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+  integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==
+
+yallist@^3.0.2:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@^13.0.0, yargs-parser@^13.1.2:
+  version "13.1.2"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+  integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+  dependencies:
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
+
+yargs-parser@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-3.2.0.tgz#5081355d19d9d0c8c5d81ada908cb4e6d186664f"
+  integrity sha512-eANlJIqYwhwS/asi4ybKxkeJYUIjNMZXL36C/KICV5jyudUZWp+/lEfBHM0PuJcQjBfs00HwqePEQjtLJd+Kyw==
+  dependencies:
+    camelcase "^3.0.0"
+    lodash.assign "^4.1.0"
+
+yargs@^13.2.2:
+  version "13.3.2"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+  integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+  dependencies:
+    cliui "^5.0.0"
+    find-up "^3.0.0"
+    get-caller-file "^2.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^2.0.0"
+    set-blocking "^2.0.0"
+    string-width "^3.0.0"
+    which-module "^2.0.0"
+    y18n "^4.0.0"
+    yargs-parser "^13.1.2"
+
+yargs@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-5.0.0.tgz#3355144977d05757dbb86d6e38ec056123b3a66e"
+  integrity sha512-krgVLGNhMWUVY1EJkM/bgbvn3yCIRrsZp6KaeX8hx8ztT+jBtX7/flTQcSHe5089xIDQRUsEr2mzlZVNe/7P5w==
+  dependencies:
+    cliui "^3.2.0"
+    decamelize "^1.1.1"
+    get-caller-file "^1.0.1"
+    lodash.assign "^4.2.0"
+    os-locale "^1.4.0"
+    read-pkg-up "^1.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^1.0.1"
+    set-blocking "^2.0.0"
+    string-width "^1.0.2"
+    which-module "^1.0.0"
+    window-size "^0.2.0"
+    y18n "^3.2.1"
+    yargs-parser "^3.2.0"
+
+yargs@~3.10.0:
+  version "3.10.0"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+  integrity sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==
+  dependencies:
+    camelcase "^1.0.2"
+    cliui "^2.1.0"
+    decamelize "^1.0.0"
+    window-size "0.1.0"
+
+yauzl@2.10.0:
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+  integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
+  dependencies:
+    buffer-crc32 "~0.2.3"
+    fd-slicer "~1.1.0"
+
+yubikeyotp@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/yubikeyotp/-/yubikeyotp-0.2.0.tgz#8bdc51122cd00ed8c919b9c9caeba851b272aa7d"
+  integrity sha512-sWfjjYm95OVmKVGAZgGcIpY8D8f0s/dOQW/keE509ppfUizKpMZc8lL5ny/ywe5yihRu3/ZeYLcD7V3CQi2n4Q==
+  dependencies:
+    request "*"
+
+zip-stream@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.1.tgz#1337fe974dbaffd2fa9a1ba09662a66932bd7135"
+  integrity sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==
+  dependencies:
+    archiver-utils "^3.0.4"
+    compress-commons "^4.1.2"
+    readable-stream "^3.6.0"
+
+zulip@0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/zulip/-/zulip-0.1.0.tgz#62f52b245f4749bac59258592db4bae978b44720"
+  integrity sha512-zsnsxRN0tcR3Qc6GEPg3t2ZrCoLtERE5VqdjHWxTH7Uq+A2hPSfxWEPKbsntpXHgsmywfDMo+P+IdeOcVdX6HA==
+  dependencies:
+    request "~2.27.0"
diff --git a/nixpkgs/pkgs/tools/admin/mycli/default.nix b/nixpkgs/pkgs/tools/admin/mycli/default.nix
new file mode 100644
index 000000000000..8a67139bb576
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/mycli/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, python3
+, fetchPypi
+, glibcLocales
+}:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "mycli";
+  version = "1.27.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-px21vZwafQAG9PL/AVSM51Y30/UMo6fne5ULW0av980=";
+  };
+
+  propagatedBuildInputs = [
+    cli-helpers
+    click
+    configobj
+    importlib-resources
+    paramiko
+    prompt-toolkit
+    pyaes
+    pycrypto
+    pygments
+    pymysql
+    pyperclip
+    sqlglot
+    sqlparse
+  ];
+
+  nativeCheckInputs = [ pytestCheckHook glibcLocales ];
+
+  preCheck = ''
+    export HOME=.
+    export LC_ALL="en_US.UTF-8"
+  '';
+
+  disabledTestPaths = [
+    "mycli/packages/paramiko_stub/__init__.py"
+  ];
+
+  disabledTests = [
+    # Note: test_auto_escaped_col_names is currently failing due to a bug upstream.
+    # TODO: re-enable this test once there is a fix upstream. See
+    # https://github.com/dbcli/mycli/issues/1103 for details.
+    "test_auto_escaped_col_names"
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "cryptography == 36.0.2" "cryptography"
+  '';
+
+  meta = with lib; {
+    inherit version;
+    description = "Command-line interface for MySQL";
+    longDescription = ''
+      Rich command-line interface for MySQL with auto-completion and
+      syntax highlighting.
+    '';
+    homepage = "http://mycli.net";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/netbox2netshot/default.nix b/nixpkgs/pkgs/tools/admin/netbox2netshot/default.nix
new file mode 100644
index 000000000000..47b6dc2e293d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/netbox2netshot/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "netbox2netshot";
+  version = "0.1.12";
+
+  src = fetchFromGitHub {
+    owner = "scaleway";
+    repo = "netbox2netshot";
+    rev = version;
+    hash = "sha256-PT/eQBe0CX1l6tcC5QBiXKGWgIQ8s4h6IApeWyb8ysc=";
+  };
+
+  cargoHash = "sha256-/T+6cjWG8u/Mr8gtBOXbEEZOO0pDykEpNIVTgooAmuw=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Inventory synchronization tool between Netbox and Netshot";
+    homepage = "https://github.com/scaleway/netbox2netshot";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ janik ];
+    mainProgram = "netbox2netshot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/netplan/default.nix b/nixpkgs/pkgs/tools/admin/netplan/default.nix
new file mode 100644
index 000000000000..8b6443bfd137
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/netplan/default.nix
@@ -0,0 +1,74 @@
+{ stdenv
+, fetchFromGitHub
+, pkg-config
+, glib
+, pandoc
+, systemd
+, libyaml
+, python3
+, libuuid
+, bash-completion
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "netplan";
+  version = "0.106.1";
+
+  src = fetchFromGitHub {
+    owner = "canonical";
+    repo = "netplan";
+    rev = version;
+    hash = "sha256-wQ4gd9+9YU92WGRMjSiF/zLCGxhaSl8s22pH1jr+Mm0=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    glib
+    pandoc
+  ];
+
+  buildInputs = [
+    systemd
+    glib
+    libyaml
+    (python3.withPackages (p: with p; [ pyyaml netifaces dbus-python rich ]))
+    libuuid
+    bash-completion
+  ];
+
+  postPatch = ''
+    substituteInPlace netplan/libnetplan.py \
+      --replace "/lib/netplan/generate" "$out/lib/netplan/generate" \
+      --replace "ctypes.util.find_library('netplan')" "\"$out/lib/libnetplan.so\""
+
+    substituteInPlace Makefile \
+      --replace 'SYSTEMD_GENERATOR_DIR=' 'SYSTEMD_GENERATOR_DIR ?= ' \
+      --replace 'SYSTEMD_UNIT_DIR=' 'SYSTEMD_UNIT_DIR ?= ' \
+      --replace 'BASH_COMPLETIONS_DIR=' 'BASH_COMPLETIONS_DIR ?= ' \
+      --replace 'pkg-config' '$(PKG_CONFIG)'
+
+    # from upstream https://github.com/canonical/netplan/blob/ee0d5df7b1dfbc3197865f02c724204b955e0e58/rpm/netplan.spec#L81
+    sed -e "s/-Werror//g" -i Makefile
+
+    substituteInPlace netplan/cli/utils.py \
+      --replace-fail "/usr/libexec/netplan/generate" "${placeholder "out"}/lib/netplan/generate"
+  '';
+
+  makeFlags = [
+    "PREFIX="
+    "DESTDIR=$(out)"
+    "SYSTEMD_GENERATOR_DIR=lib/systemd/system-generators/"
+    "SYSTEMD_UNIT_DIR=lib/systemd/units/"
+    "BASH_COMPLETIONS_DIR=share/bash-completion/completions"
+  ];
+
+  meta = with lib; {
+    description = "Backend-agnostic network configuration in YAML";
+    homepage = "https://netplan.io";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ mkg20001 ];
+    platforms = platforms.linux;
+    mainProgram = "netplan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/nomachine-client/default.nix b/nixpkgs/pkgs/tools/admin/nomachine-client/default.nix
new file mode 100644
index 000000000000..754c8c506f66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/nomachine-client/default.nix
@@ -0,0 +1,93 @@
+{ lib, stdenv, file, fetchurl, makeWrapper,
+  autoPatchelfHook, jsoncpp, libpulseaudio }:
+let
+  versionMajor = "8.4";
+  versionMinor = "2";
+  versionBuild_x86_64 = "1";
+  versionBuild_i686 = "1";
+in
+  stdenv.mkDerivation rec {
+    pname = "nomachine-client";
+    version = "${versionMajor}.${versionMinor}";
+
+    src =
+      if stdenv.hostPlatform.system == "x86_64-linux" then
+        fetchurl {
+          url = "https://download.nomachine.com/download/${versionMajor}/Linux/nomachine_${version}_${versionBuild_x86_64}_x86_64.tar.gz";
+          sha256 = "sha256-r4yRmnMd6uNay7CqmyqYj9F6huoqD8eBby+oDNk1T34=";
+        }
+      else if stdenv.hostPlatform.system == "i686-linux" then
+        fetchurl {
+          url = "https://download.nomachine.com/download/${versionMajor}/Linux/nomachine_${version}_${versionBuild_i686}_i686.tar.gz";
+          sha256 = "sha256-TvEU1hDvPXQbF7fMI89I2bhap1Y0oetUoFl3yR5eTGg=";
+        }
+      else
+        throw "NoMachine client is not supported on ${stdenv.hostPlatform.system}";
+
+    # nxusb-legacy is only needed for kernel versions < 3
+    postUnpack = ''
+      mv $(find . -type f -name nxrunner.tar.gz) .
+      mv $(find . -type f -name nxplayer.tar.gz) .
+      rm -r NX/
+      tar xf nxrunner.tar.gz
+      tar xf nxplayer.tar.gz
+      rm $(find . -maxdepth 1 -type f)
+      rm -r NX/share/src/nxusb-legacy
+      rm NX/bin/nxusbd-legacy NX/lib/libnxusb-legacy.so
+    '';
+
+    nativeBuildInputs = [ file makeWrapper autoPatchelfHook ];
+    buildInputs = [ jsoncpp libpulseaudio ];
+
+    installPhase = ''
+      rm bin/nxplayer bin/nxrunner
+
+      mkdir -p $out/NX
+      cp -r bin lib share $out/NX/
+
+      ln -s $out/NX/bin $out/bin
+
+      for i in share/icons/*; do
+        if [[ -d "$i" ]]; then
+          mkdir -p "$out/share/icons/hicolor/$(basename $i)/apps"
+          cp "$i"/* "$out/share/icons/hicolor/$(basename $i)/apps/"
+        fi
+      done
+
+      mkdir $out/share/applications
+      cp share/applnk/player/xdg/*.desktop $out/share/applications/
+      cp share/applnk/client/xdg-mime/*.desktop $out/share/applications/
+
+      mkdir -p $out/share/mime/packages
+      cp share/applnk/client/xdg-mime/*.xml $out/share/mime/packages/
+
+      for i in $out/share/applications/*.desktop; do
+        substituteInPlace "$i" --replace /usr/NX/bin $out/bin
+      done
+    '';
+
+    postFixup = ''
+      makeWrapper $out/bin/nxplayer.bin $out/bin/nxplayer --set NX_SYSTEM $out/NX
+      makeWrapper $out/bin/nxrunner.bin $out/bin/nxrunner --set NX_SYSTEM $out/NX
+
+      # libnxcau.so needs libpulse.so.0 for audio to work, but doesn't
+      # have a DT_NEEDED entry for it.
+      patchelf --add-needed libpulse.so.0 $out/NX/lib/libnxcau.so
+    '';
+
+    dontBuild = true;
+    dontStrip = true;
+
+    meta = with lib; {
+      description = "NoMachine remote desktop client (nxplayer)";
+      homepage = "https://www.nomachine.com/";
+      sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+      license = {
+        fullName = "NoMachine 7 End-User License Agreement";
+        url = "https://www.nomachine.com/licensing-7";
+        free = false;
+      };
+      maintainers = with maintainers; [ talyz ];
+      platforms = [ "x86_64-linux" "i686-linux" ];
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/admin/oci-cli/default.nix b/nixpkgs/pkgs/tools/admin/oci-cli/default.nix
new file mode 100644
index 000000000000..1d09e02b6ba6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/oci-cli/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, fetchFromGitHub
+, fetchPypi
+, python3
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+
+      click = super.click.overridePythonAttrs (oldAttrs: rec {
+        version = "7.1.2";
+
+        src = fetchPypi {
+          pname = "click";
+          inherit version;
+          hash = "sha256-0rUlXHxjSbwb0eWeCM0SrLvWPOZJ8liHVXg6qU37axo=";
+        };
+        disabledTests = [ "test_bytes_args" ]; # https://github.com/pallets/click/commit/6e05e1fa1c2804
+      });
+
+      jmespath = super.jmespath.overridePythonAttrs (oldAttrs: rec {
+        version = "0.10.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9";
+          hash = "";
+        };
+        doCheck = false;
+      });
+
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "oci-cli";
+  version = "3.14.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "oracle";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-yooEZuSIw2EMJVyT/Z/x4hJi8a1F674CtsMMGkMAYLg=";
+  };
+
+  propagatedBuildInputs = [
+    arrow
+    certifi
+    click
+    cryptography
+    jmespath
+    oci
+    prompt-toolkit
+    pyopenssl
+    python-dateutil
+    pytz
+    pyyaml
+    retrying
+    six
+    terminaltables
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "cryptography>=3.2.1,<=37.0.2" "cryptography" \
+      --replace "pyOpenSSL>=17.5.0,<=22.0.0" "pyOpenSSL" \
+      --replace "PyYAML>=5.4,<6" "PyYAML" \
+      --replace "prompt-toolkit==3.0.29" "prompt-toolkit" \
+      --replace "terminaltables==3.1.0" "terminaltables" \
+      --replace "oci==2.78.0" "oci"
+  '';
+
+  # https://github.com/oracle/oci-cli/issues/187
+  doCheck = false;
+
+  pythonImportsCheck = [
+    " oci_cli "
+  ];
+
+  meta = with lib; {
+    description = "Command Line Interface for Oracle Cloud Infrastructure";
+    homepage = "https://docs.cloud.oracle.com/iaas/Content/API/Concepts/cliconcepts.htm";
+    license = with licenses; [ asl20 /* or */ upl ];
+    maintainers = with maintainers; [ ilian ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/okta-aws-cli/default.nix b/nixpkgs/pkgs/tools/admin/okta-aws-cli/default.nix
new file mode 100644
index 000000000000..f9a4fad19554
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/okta-aws-cli/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "okta-aws-cli";
+  version = "2.1.0";
+
+  subPackages = [ "cmd/okta-aws-cli" ];
+
+  src = fetchFromGitHub {
+    owner  = "okta";
+    repo   = "okta-aws-cli";
+    rev    = "v${version}";
+    sha256 = "sha256-ovmN/BYQInbfvMaSl7WNXC7dBkLMyZdZstc164yj5Qo=";
+  };
+
+  vendorHash = "sha256-SjABVO6tHYRc/1pYjOqfZP+NfnK1/WnAcY5NQ4hMssE=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A CLI for having Okta as the IdP for AWS CLI operations";
+    homepage = "https://github.com/okta/okta-aws-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ daniyalsuri6 ];
+    mainProgram = "okta-aws-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/ossutil/default.nix b/nixpkgs/pkgs/tools/admin/ossutil/default.nix
new file mode 100644
index 000000000000..c858b9706b16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ossutil/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  version = "1.7.18";
+  pname = "ossutil";
+
+  src = fetchFromGitHub {
+    owner = "aliyun";
+    repo = "ossutil";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-M7Jh3rmWdUlsvj+P0UKazjQoe0zLDro882f/l8wFZGQ=";
+  };
+
+  vendorHash = "sha256-4a/bNH47sxxwgYYQhHTqyXddJit3VbeM49/4IEfjWsY=";
+
+  # don't run tests as they require secret access keys that only travis has
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A user friendly command line tool to access Alibaba Cloud OSS";
+    homepage = "https://github.com/aliyun/ossutil";
+    changelog = "https://github.com/aliyun/ossutil/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jpetrucciani ];
+    mainProgram = "ossutil";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/oxidized/Gemfile b/nixpkgs/pkgs/tools/admin/oxidized/Gemfile
new file mode 100644
index 000000000000..6987f5d3da29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/oxidized/Gemfile
@@ -0,0 +1,11 @@
+source 'https://rubygems.org'
+
+gem 'oxidized', '0.29.1'
+gem 'oxidized-web', '0.13.1'
+
+# The version on rubygems is not up2date
+gem 'oxidized-script', git: 'https://github.com/ytti/oxidized-script.git', ref: '988cded5d89f52e274afb545bd3e011e19d5d22d'
+
+# Fix for https://github.com/ytti/oxidized/issues/2769
+gem 'psych', '~> 3.3.2'
+
diff --git a/nixpkgs/pkgs/tools/admin/oxidized/Gemfile.lock b/nixpkgs/pkgs/tools/admin/oxidized/Gemfile.lock
new file mode 100644
index 000000000000..062fecd2ad20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/oxidized/Gemfile.lock
@@ -0,0 +1,90 @@
+GIT
+  remote: https://github.com/ytti/oxidized-script.git
+  revision: 988cded5d89f52e274afb545bd3e011e19d5d22d
+  ref: 988cded5d89f52e274afb545bd3e011e19d5d22d
+  specs:
+    oxidized-script (0.6.0)
+      oxidized (~> 0.28)
+      slop (~> 4.6)
+
+GEM
+  remote: https://rubygems.org/
+  specs:
+    asetus (0.4.0)
+    backports (3.24.1)
+    bcrypt_pbkdf (1.1.0)
+    charlock_holmes (0.7.7)
+    ed25519 (1.3.0)
+    emk-sinatra-url-for (0.2.1)
+      sinatra (>= 0.9.1.1)
+    ffi (1.15.5)
+    haml (5.2.2)
+      temple (>= 0.8.0)
+      tilt
+    htmlentities (4.3.4)
+    json (2.6.3)
+    multi_json (1.15.0)
+    net-ssh (7.1.0)
+    net-telnet (0.2.0)
+    oxidized (0.29.1)
+      asetus (~> 0.1)
+      bcrypt_pbkdf (~> 1.0)
+      ed25519 (~> 1.2)
+      net-ssh (~> 7.1)
+      net-telnet (~> 0.2)
+      rugged (~> 1.6)
+      slop (~> 4.6)
+    oxidized-web (0.13.1)
+      charlock_holmes (~> 0.7.5)
+      emk-sinatra-url-for (~> 0.2)
+      haml (~> 5.0)
+      htmlentities (~> 4.3)
+      json (>= 1.7.0)
+      oxidized (~> 0.26)
+      puma (~> 3.11.4)
+      rack-test (~> 0.7.0)
+      sass (~> 3.3)
+      sinatra (~> 1.4, >= 1.4.6)
+      sinatra-contrib (~> 1.4, >= 1.4.6)
+    psych (3.3.4)
+    puma (3.11.4)
+    rack (1.6.13)
+    rack-protection (1.5.5)
+      rack
+    rack-test (0.7.0)
+      rack (>= 1.0, < 3)
+    rb-fsevent (0.11.2)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    rugged (1.6.3)
+    sass (3.7.4)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    sinatra (1.4.8)
+      rack (~> 1.5)
+      rack-protection (~> 1.4)
+      tilt (>= 1.3, < 3)
+    sinatra-contrib (1.4.7)
+      backports (>= 2.0)
+      multi_json
+      rack-protection
+      rack-test
+      sinatra (~> 1.4.0)
+      tilt (>= 1.3, < 3)
+    slop (4.10.1)
+    temple (0.10.1)
+    tilt (2.1.0)
+
+PLATFORMS
+  x86_64-linux
+
+DEPENDENCIES
+  oxidized (= 0.29.1)
+  oxidized-script!
+  oxidized-web (= 0.13.1)
+  psych (~> 3.3.2)
+
+BUNDLED WITH
+   2.3.26
diff --git a/nixpkgs/pkgs/tools/admin/oxidized/default.nix b/nixpkgs/pkgs/tools/admin/oxidized/default.nix
new file mode 100644
index 000000000000..0436038a98b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/oxidized/default.nix
@@ -0,0 +1,20 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "oxidized";
+  gemdir = ./.;
+
+  inherit ruby;
+
+  exes = [ "oxidized" "oxs" ];
+
+  passthru.updateScript = bundlerUpdateScript "oxidized";
+
+  meta = with lib; {
+    description = "A network device configuration backup tool. It's a RANCID replacement";
+    homepage    = "https://github.com/ytti/oxidized";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ nicknovitski ] ++ teams.wdz.members;
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/oxidized/gemset.nix b/nixpkgs/pkgs/tools/admin/oxidized/gemset.nix
new file mode 100644
index 000000000000..0f3072352885
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/oxidized/gemset.nix
@@ -0,0 +1,326 @@
+{
+  asetus = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0li09rcpgc21ymfayvhnjwvfl10s75g8aj52973gk0gvygscrhah";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  backports = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f3zcy0q88rw3clk0r7bai7sp4r253lndf0qmdgczq1ykbm219w3";
+      type = "gem";
+    };
+    version = "3.24.1";
+  };
+  bcrypt_pbkdf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ndamfaivnkhc6hy0yqyk2gkwr6f3bz6216lh74hsiiyk3axz445";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  charlock_holmes = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hybw8jw9ryvz5zrki3gc9r88jqy373m6v46ynxsdzv1ysiyr40p";
+      type = "gem";
+    };
+    version = "0.7.7";
+  };
+  ed25519 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zb2dr2ihb1qiknn5iaj1ha1w9p7lj9yq5waasndlfadz225ajji";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  emk-sinatra-url-for = {
+    dependencies = ["sinatra"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rd5b1lraklv0hblzdnmw2z3dragfg0qqk7wxbpn58f8y7jxzjgj";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  haml = {
+    dependencies = ["temple" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "035fgbfr20m08w4603ls2lwqbggr0vy71mijz0p68ib1am394xbf";
+      type = "gem";
+    };
+    version = "5.2.2";
+  };
+  htmlentities = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj";
+      type = "gem";
+    };
+    version = "4.3.4";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yx0pb5fmziz92bw8qzbh8vf20lr56nd3s6q8h0gsgr307lki687";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  net-telnet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16nkxc79nqm7fd6w1fba4kb98vpgwnyfnlwxarpdcgywz300fc15";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  oxidized = {
+    dependencies = ["asetus" "bcrypt_pbkdf" "ed25519" "net-ssh" "net-telnet" "rugged" "slop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ww8iv89zvklnvq9cv2lb6wyb5y73hinzm6xgd21za4204aanlps";
+      type = "gem";
+    };
+    version = "0.29.1";
+  };
+  oxidized-script = {
+    dependencies = ["oxidized" "slop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      fetchSubmodules = false;
+      rev = "988cded5d89f52e274afb545bd3e011e19d5d22d";
+      sha256 = "13vglj6w37xd6dqfn98xdan3kqbs460akj1rdr4bm7lsrpa281gf";
+      type = "git";
+      url = "https://github.com/ytti/oxidized-script.git";
+    };
+    version = "0.6.0";
+  };
+  oxidized-web = {
+    dependencies = ["charlock_holmes" "emk-sinatra-url-for" "haml" "htmlentities" "json" "oxidized" "puma" "rack-test" "sass" "sinatra" "sinatra-contrib"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07qmal83h1h5dqapgirq5yrnclbm3xhcjqkj80lla3dq18jmjhqs";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+  psych = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "186i2hc6sfvg4skhqf82kxaf4mb60g65fsif8w8vg1hc9mbyiaph";
+      type = "gem";
+    };
+    version = "3.3.4";
+  };
+  puma = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06qiqx1pcfwq4gi9pdrrq8r6hgh3rwl7nl51r67zpm5xmqlp0g10";
+      type = "gem";
+    };
+    version = "3.11.4";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wr1f3g9rc9i8svfxa9cijajl1661d817s56b2w7rd572zwn0zi0";
+      type = "gem";
+    };
+    version = "1.6.13";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0my0wlw4a5l3hs79jkx2xzv7djhajgf8d28k8ai1ddlnxxb0v7ss";
+      type = "gem";
+    };
+    version = "1.5.5";
+  };
+  rack-test = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f50ljlbg38g21q242him0n12r0fz7r3rs9n6p8ppahzh7k22x11";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rugged = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "016bawsahkhxx7p8azxirpl7y2y7i8a027pj8910gwf6ipg329in";
+      type = "gem";
+    };
+    version = "1.6.3";
+  };
+  sass = {
+    dependencies = ["sass-listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p95lhs0jza5l7hqci1isflxakz83xkj97lkvxl919is0lwhv2w0";
+      type = "gem";
+    };
+    version = "3.7.4";
+  };
+  sass-listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  sinatra = {
+    dependencies = ["rack" "rack-protection" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0byxzl7rx3ki0xd7aiv1x8mbah7hzd8f81l65nq8857kmgzj1jqq";
+      type = "gem";
+    };
+    version = "1.4.8";
+  };
+  sinatra-contrib = {
+    dependencies = ["backports" "multi_json" "rack-protection" "rack-test" "sinatra" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vi3i0icbi2figiayxpvxbqpbn1syma7w4p4zw5mav1ln4c7jnfr";
+      type = "gem";
+    };
+    version = "1.4.7";
+  };
+  slop = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iyrjskgxyn8i1679qwkzns85p909aq77cgx2m4fs5ygzysj4hw4";
+      type = "gem";
+    };
+    version = "4.10.1";
+  };
+  temple = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jj8lny5hp8gm920k73r6xpb40j5mpiw1dcr8g5id4hxjggkw8by";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qmhi6d9przjzhsyk9g5pq2j75c656msh6xzprqd2mxgphf23jxs";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pbm/default.nix b/nixpkgs/pkgs/tools/admin/pbm/default.nix
new file mode 100644
index 000000000000..e681d6f286db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pbm/default.nix
@@ -0,0 +1,18 @@
+{ buildDotnetGlobalTool, lib }:
+
+buildDotnetGlobalTool {
+  pname = "pbm";
+  version = "1.3.2";
+
+  nugetSha256 = "sha256-xu3g8NFLZYnHzBuoIhIiAzaPJqY0xhLWLYi+ORRADH8=";
+
+  meta = with lib; {
+    description = "CLI for managing Akka.NET applications and Akka.NET Clusters";
+    homepage = "https://cmd.petabridge.com/index.html";
+    changelog = "https://cmd.petabridge.com/articles/RELEASE_NOTES.html";
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ anpin mdarocha ];
+    mainProgram = "pbm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pebble/default.nix b/nixpkgs/pkgs/tools/admin/pebble/default.nix
new file mode 100644
index 000000000000..76e2e281f68e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pebble/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "pebble";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "letsencrypt";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0sh67bzq3hlagk73w2kp45viq15g2rcxm760jk9fqshamq784m6m";
+  };
+
+  vendorHash = null;
+
+  passthru.tests = {
+    smoke-test = nixosTests.acme;
+  };
+
+  meta = {
+    # ca/ca.go:374:67: 9223372038 (untyped int constant) overflows uint
+    broken = stdenv.hostPlatform.is32bit;
+    homepage = "https://github.com/letsencrypt/pebble";
+    description = "A miniature version of Boulder, Pebble is a small RFC 8555 ACME test server not suited for a production CA";
+    license = [ lib.licenses.mpl20 ];
+    maintainers = lib.teams.acme.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pgadmin/check-system-config-dir.patch b/nixpkgs/pkgs/tools/admin/pgadmin/check-system-config-dir.patch
new file mode 100644
index 000000000000..ce1778f32599
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pgadmin/check-system-config-dir.patch
@@ -0,0 +1,15 @@
+--- a/web/pgadmin/evaluate_config.py      2023-04-11 17:36:46.000000000 +0200
++++ b/web/pgadmin/evaluate_config.py    2023-04-14 09:54:33.496434314 +0200
+@@ -76,6 +76,12 @@
+         custom_config_settings.update(config_system_settings)
+     except ImportError:
+         pass
++    except PermissionError:
++        print(f"Permission denied to open {str(system_config_dir + '/config_system.py')}. \n \
++              If you are running pgadmin4-desktopmode please make sure you disable  \n \
++              the pgadmin NixOS module first. If you rely on settings in \n \
++              {str(system_config_dir + '/config_system.py')}, please check the correct permissions.")
++        pass
+
+
+ def evaluate_and_patch_config(config: dict) -> dict:
diff --git a/nixpkgs/pkgs/tools/admin/pgadmin/default.nix b/nixpkgs/pkgs/tools/admin/pgadmin/default.nix
new file mode 100644
index 000000000000..586d553f4109
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pgadmin/default.nix
@@ -0,0 +1,248 @@
+{ lib
+, python3
+, fetchFromGitHub
+, fetchYarnDeps
+, zlib
+, nixosTests
+, postgresqlTestHook
+, postgresql
+, yarn
+, prefetch-yarn-deps
+, nodejs
+, server-mode ? true
+}:
+
+let
+  pname = "pgadmin";
+  version = "8.2";
+  yarnHash = "sha256-uMSgpkYoLD32VYDAkjywC9bZjm7UKA0hhwVNc/toEbA=";
+
+  src = fetchFromGitHub {
+    owner = "pgadmin-org";
+    repo = "pgadmin4";
+    rev = "REL-${lib.versions.major version}_${lib.versions.minor version}";
+    hash = "sha256-RfpZXy265kwpMsWUBDVfbL/0eX0By79I4VNkG8zwVOs=";
+  };
+
+  # keep the scope, as it is used throughout the derivation and tests
+  # this also makes potential future overrides easier
+  pythonPackages = python3.pkgs.overrideScope (final: prev: rec { });
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = ./yarn.lock;
+    hash = yarnHash;
+  };
+
+in
+
+pythonPackages.buildPythonApplication rec {
+  inherit pname version src;
+
+  # from Dockerfile
+  CPPFLAGS = "-DPNG_ARM_NEON_OPT=0";
+
+  format = "setuptools";
+
+  patches = [
+    # Expose setup.py for later use
+    ./expose-setup.py.patch
+    # check for permission of /etc/pgadmin/config_system and don't fail
+    ./check-system-config-dir.patch
+  ];
+
+  postPatch = ''
+    # patching Makefile, so it doesn't try to build sphinx documentation here
+    # (will do so later)
+    substituteInPlace Makefile \
+      --replace 'LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 $(MAKE) -C docs/en_US -f Makefile.sphinx html' "true"
+
+    # fix document which refers a non-existing document and fails
+    substituteInPlace docs/en_US/contributions.rst \
+      --replace "code_snippets" ""
+    # relax dependencies
+    sed 's|==|>=|g' -i requirements.txt
+    # fix extra_require error with "*" in match
+    sed 's|*|0|g' -i requirements.txt
+    substituteInPlace pkg/pip/setup_pip.py \
+      --replace "req = req.replace('psycopg[c]', 'psycopg[binary]')" "req = req"
+    ${lib.optionalString (!server-mode) ''
+    substituteInPlace web/config.py \
+      --replace "SERVER_MODE = True" "SERVER_MODE = False"
+    ''}
+  '';
+
+  preBuild = ''
+    # Adapted from pkg/pip/build.sh
+    echo Creating required directories...
+    mkdir -p pip-build/pgadmin4/docs
+
+    echo Building the documentation
+    cd docs/en_US
+    sphinx-build -W -b html -d _build/doctrees . _build/html
+
+    # Build the clean tree
+    cd ..
+    cp -r * ../pip-build/pgadmin4/docs
+    for DIR in `ls -d ??_??/`
+    do
+      if [ -d ''${DIR}_build/html ]; then
+          mkdir -p ../pip-build/pgadmin4/docs/''${DIR}_build
+          cp -R ''${DIR}_build/html ../pip-build/pgadmin4/docs/''${DIR}_build
+      fi
+    done
+    cd ../
+
+    # mkYarnModules and mkYarnPackage have problems running the webpacker
+    echo Building the web frontend...
+    cd web
+    export HOME="$TMPDIR"
+    yarn config --offline set yarn-offline-mirror "${offlineCache}"
+    # replace with converted yarn.lock file
+    rm yarn.lock
+    cp ${./yarn.lock} yarn.lock
+    chmod +w yarn.lock
+    fixup-yarn-lock yarn.lock
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules/
+    yarn webpacker
+    cp -r * ../pip-build/pgadmin4
+    # save some disk space
+    rm -rf ../pip-build/pgadmin4/node_modules
+
+    cd ..
+
+    echo Creating distro config...
+    echo HELP_PATH = \'../../docs/en_US/_build/html/\' > pip-build/pgadmin4/config_distro.py
+    echo MINIFY_HTML = False >> pip-build/pgadmin4/config_distro.py
+
+    echo Creating manifest...
+    echo recursive-include pgadmin4 \* > pip-build/MANIFEST.in
+
+    echo Building wheel...
+    cd pip-build
+    # copy non-standard setup.py to local directory
+    # so setuptools-build-hook can call it
+    cp -v ../pkg/pip/setup_pip.py setup.py
+  '';
+
+  nativeBuildInputs = with pythonPackages; [ cython pip sphinx yarn prefetch-yarn-deps nodejs ];
+  buildInputs = [
+    zlib
+    pythonPackages.wheel
+  ];
+
+  propagatedBuildInputs = with pythonPackages; [
+    flask
+    flask-gravatar
+    flask-login
+    flask-mail
+    flask-migrate
+    flask-sqlalchemy
+    flask-wtf
+    flask-compress
+    passlib
+    pytz
+    simplejson
+    sqlparse
+    wtforms
+    flask-paranoid
+    psutil
+    psycopg
+    python-dateutil
+    sqlalchemy
+    itsdangerous
+    flask-security-too
+    bcrypt
+    cryptography
+    sshtunnel
+    ldap3
+    flask-babel
+    gssapi
+    flask-socketio
+    eventlet
+    httpagentparser
+    user-agents
+    wheel
+    authlib
+    qrcode
+    pillow
+    pyotp
+    botocore
+    boto3
+    azure-mgmt-subscription
+    azure-mgmt-rdbms
+    azure-mgmt-resource
+    azure-identity
+    sphinxcontrib-youtube
+    dnspython
+    greenlet
+    speaklater3
+    google-auth-oauthlib
+    google-api-python-client
+    keyring
+    typer
+    rich
+  ];
+
+  passthru.tests = {
+    inherit (nixosTests) pgadmin4;
+  };
+
+  nativeCheckInputs = [
+    postgresqlTestHook
+    postgresql
+    pythonPackages.testscenarios
+    pythonPackages.selenium
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    ## Setup ##
+
+    # pgadmin needs a home directory to save the configuration
+    export HOME=$TMPDIR
+    cd pgadmin4
+
+    # set configuration for postgresql test
+    # also ensure Server Mode is set to false. If not, the tests will fail, since pgadmin expects read/write permissions
+    # in /var/lib/pgadmin and /var/log/pgadmin
+    # see https://github.com/pgadmin-org/pgadmin4/blob/fd1c26408bbf154fa455a49ee5c12895933833a3/web/regression/runtests.py#L217-L226
+    cp -v regression/test_config.json.in regression/test_config.json
+    substituteInPlace regression/test_config.json --replace "localhost" "$PGHOST"
+    substituteInPlace regression/runtests.py --replace "builtins.SERVER_MODE = None" "builtins.SERVER_MODE = False"
+
+    ## Browser test ##
+
+    # don't bother to test kerberos authentication
+    python regression/runtests.py --pkg browser --exclude browser.tests.test_kerberos_with_mocking
+
+    ## Reverse engineered SQL test ##
+
+    python regression/runtests.py --pkg resql
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Administration and development platform for PostgreSQL${optionalString (!server-mode) ". Desktop Mode"}";
+    longDescription = ''
+      pgAdmin 4 is designed to meet the needs of both novice and experienced Postgres users alike,
+      providing a powerful graphical interface that simplifies the creation, maintenance and use of database objects.
+      ${if server-mode then ''
+      This version is build with SERVER_MODE set to True (the default). It will require access to `/var/lib/pgadmin`
+      and `/var/log/pgadmin`. This is the default version for the NixOS module `services.pgadmin`.
+      This should NOT be used in combination with the `pgadmin4-desktopmode` package as they will interfere.
+      '' else ''
+      This version is build with SERVER_MODE set to False. It will require access to `~/.pgadmin/`. This version is suitable
+      for single-user deployment or where access to `/var/lib/pgadmin` cannot be granted or the NixOS module cannot be used.
+      This should NOT be used in combination with the NixOS module `pgadmin` as they will interfere.
+      ''}
+    '';
+    homepage = "https://www.pgadmin.org/";
+    license = licenses.mit;
+    changelog = "https://www.pgadmin.org/docs/pgadmin4/latest/release_notes_${lib.versions.major version}_${lib.versions.minor version}.html";
+    maintainers = with maintainers; [ gador ];
+    mainProgram = "pgadmin4";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pgadmin/expose-setup.py.patch b/nixpkgs/pkgs/tools/admin/pgadmin/expose-setup.py.patch
new file mode 100644
index 000000000000..67e588c5be83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pgadmin/expose-setup.py.patch
@@ -0,0 +1,40 @@
+diff --git a/pkg/pip/setup_pip.py b/pkg/pip/setup_pip.py
+index c65795b10..e56b6a6f3 100644
+--- a/pkg/pip/setup_pip.py
++++ b/pkg/pip/setup_pip.py
+@@ -101,7 +101,7 @@ setup(
+
+     entry_points={
+         'console_scripts': ['pgadmin4=pgadmin4.pgAdmin4:main',
+-                            'pgadmin4-cli=pgadmin4.setup:main'],
++                            'pgadmin4-cli=pgadmin4.setup:app'],
+     },
+
+ )
+diff --git a/web/pgadmin/model/__init__.py b/web/pgadmin/model/__init__.py
+index 4c36dd1..a492365 100644
+--- a/web/pgadmin/model/__init__.py
++++ b/web/pgadmin/model/__init__.py
+@@ -23,7 +23,6 @@ from flask_sqlalchemy import SQLAlchemy
+ from sqlalchemy.ext.mutable import MutableDict
+ import sqlalchemy.types as types
+ import uuid
+-import config
+
+ ##########################################################################
+ #
+@@ -41,10 +40,12 @@ SCHEMA_VERSION = 35
+ #
+ ##########################################################################
+
++# hardcode poolsize and max_overflow due to a circular import (config imports model,
++# model now tries to import config)
+ db = SQLAlchemy(
+     engine_options={
+-        'pool_size': config.CONFIG_DATABASE_CONNECTION_POOL_SIZE,
+-        'max_overflow': config.CONFIG_DATABASE_CONNECTION_MAX_OVERFLOW})
++        'pool_size': 5,
++        'max_overflow': 100})
+
+
+ USER_ID = 'user.id'
diff --git a/nixpkgs/pkgs/tools/admin/pgadmin/update.sh b/nixpkgs/pkgs/tools/admin/pgadmin/update.sh
new file mode 100755
index 000000000000..90b52f18ad51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pgadmin/update.sh
@@ -0,0 +1,110 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl wget jq yq common-updater-scripts prefetch-yarn-deps yarn-lock-converter
+
+set -eu -o pipefail
+
+TMPDIR=/tmp/pgadmin-update-script
+
+################################################################
+#         This script will update pgadmin4 in nixpkgs          #
+# Due to recent changes upstream, we will need to convert the  #
+#             `yarn.lock` file back to version 1.              #
+#   This isn't trivially done and relies on 3rd party tools    #
+#       and a hand-written converter (in this script).         #
+# Also, the converter cannot check for `github` repos in the   #
+#   `yarn.lock` file, which this script will add automatically #
+################################################################
+
+cleanup() {
+  if [ -e $TMPDIR/.done ]
+  then
+    rm -rf "$TMPDIR"
+  else
+    echo
+    read -p "Script exited prematurely. Do you want to delete the temporary directory $TMPDIR ? " -n 1 -r
+    echo
+    if [[ $REPLY =~ ^[Yy]$ ]]
+    then
+      rm -rf "$TMPDIR"
+    fi
+  fi
+}
+
+trap cleanup EXIT
+
+scriptDir=$(cd "${BASH_SOURCE[0]%/*}" && pwd)
+nixpkgs=$(realpath "$scriptDir"/../../../..)
+
+newest_version="$(curl -s https://www.pgadmin.org/versions.json | jq -r .pgadmin4.version)"
+old_version=$(nix-instantiate --eval -E "(import \"$nixpkgs\" { config = {}; overlays = []; }).pgadmin4.version" | tr -d '"')
+url="https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v${newest_version}/source/pgadmin4-${newest_version}.tar.gz"
+
+if [[ $newest_version == $old_version ]]; then
+  printf "Already at latest version $newest_version\n"
+  exit 0
+fi
+printf "New version: $newest_version \n"
+
+# don't use mktemp, so if a network error happens, we can resume from there
+mkdir -p $TMPDIR
+pushd $TMPDIR
+wget -c $url
+tar -xzf "pgadmin4-$newest_version.tar.gz"
+cd "pgadmin4-$newest_version/web"
+
+printf "Will now convert the v2 lockfile. This will download the npm packages to get the metadata.\n"
+printf "Please note: This will take some time! For details, see the logfile ${TMPDIR}/update.log\n"
+yarn-lock-converter -i yarn.lock -o yarn_v1.lock --cache .cache > $TMPDIR/update.log
+printf "Conversion done\n"
+
+printf "Will now do some regex substitution post-processing\n"
+sed -i -E "s|(.), |\1\", \"|g" yarn_v1.lock
+sed -i -E "s|npm:||g" yarn_v1.lock
+printf "Substituion done\n"
+
+printf "Will now add missing github packages back to the v1 yarn.lock file\n"
+# remove header
+tail +8 yarn.lock > yarn_mod.lock
+LENGTH=$(yq '. | with_entries(select(.value.resolution | contains("github"))) | keys | length' yarn_mod.lock)
+for i in $(seq 0 $(($LENGTH-1)));
+do
+  ENTRY=$(yq ". | with_entries(select(.value.resolution | contains(\"github\"))) | keys | .[$i]" yarn_mod.lock)
+  URL=$(echo $ENTRY | cut -d "@" -f 2)
+  VERSION=$(yq ".$ENTRY.version" yarn_mod.lock)
+  LENGTH_DEP=$(yq ".$ENTRY.dependencies | keys | length" yarn_mod.lock)
+  echo "$ENTRY:" >> adendum.lock
+  echo "  version $VERSION" >> adendum.lock
+  echo "  resolved \"$URL" >> adendum.lock
+  echo "  dependencies:" >> adendum.lock
+
+  for j in $(seq 0 $(($LENGTH_DEP-1)));
+  do
+    DEPENDENCY_KEY=$(yq ".$ENTRY.dependencies | keys | .[$j]" yarn_mod.lock)
+    DEPENDENCY_VALUE=$(yq ".$ENTRY.dependencies.$DEPENDENCY_KEY" yarn_mod.lock)
+    # remove '"'
+    DEPENDENCY_KEY=${DEPENDENCY_KEY//\"}
+    echo "    \"$DEPENDENCY_KEY\" $DEPENDENCY_VALUE" >> adendum.lock
+  done
+done
+
+echo "" >> yarn_v1.lock
+cat adendum.lock >> yarn_v1.lock
+printf "Done\n"
+
+rm yarn.lock
+mv yarn_v1.lock yarn.lock
+
+printf "Will now generate the hash. This will download the packages to the nix store and also take some time\n"
+YARN_HASH=$(prefetch-yarn-deps yarn.lock)
+YARN_HASH=$(nix hash to-sri --type sha256 "$YARN_HASH")
+printf "Done\n"
+
+printf "Copy files to nixpkgs\n"
+cp yarn.lock "$nixpkgs/pkgs/tools/admin/pgadmin/"
+printf "Done\n"
+popd
+
+sed -i -E -e "s#yarnHash = \".*\"#yarnHash = \"$YARN_HASH\"#" ${scriptDir}/default.nix
+
+update-source-version pgadmin4 "$newest_version" --print-changes
+touch $TMPDIR/.done
diff --git a/nixpkgs/pkgs/tools/admin/pgadmin/yarn.lock b/nixpkgs/pkgs/tools/admin/pgadmin/yarn.lock
new file mode 100644
index 000000000000..cf3e188e8674
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pgadmin/yarn.lock
@@ -0,0 +1,12723 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@adobe/css-tools@^4.3.0":
+  version "4.3.1"
+  resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz#abfccb8ca78075a2b6187345c26243c1a0842f28"
+  integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==
+
+"@ampproject/remapping@^2.2.0":
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
+  integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
+  integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==
+  dependencies:
+    "@babel/highlight" "^7.22.5"
+
+"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13":
+  version "7.22.13"
+  resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
+  integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
+  dependencies:
+    "@babel/highlight" "^7.22.13"
+    chalk "^2.4.2"
+
+"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.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#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255"
+  integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==
+
+"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9":
+  version "7.22.9"
+  resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730"
+  integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==
+
+"@babel/compat-data@^7.23.2":
+  version "7.23.2"
+  resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc"
+  integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==
+
+"@babel/core@^7.10.2", "@babel/core@^7.12.3":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89"
+  integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==
+  dependencies:
+    "@ampproject/remapping" "^2.2.0"
+    "@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.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.2.2"
+    semver "^6.3.0"
+
+"@babel/core@^7.11.6":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.15.tgz#15d4fd03f478a459015a4b94cfbb3bd42c48d2f4"
+  integrity sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA==
+  dependencies:
+    "@ampproject/remapping" "^2.2.0"
+    "@babel/code-frame" "^7.22.13"
+    "@babel/generator" "^7.22.15"
+    "@babel/helper-compilation-targets" "^7.22.15"
+    "@babel/helper-module-transforms" "^7.22.15"
+    "@babel/helpers" "^7.22.15"
+    "@babel/parser" "^7.22.15"
+    "@babel/template" "^7.22.15"
+    "@babel/traverse" "^7.22.15"
+    "@babel/types" "^7.22.15"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.2.3"
+    semver "^6.3.1"
+
+"@babel/core@^7.21.3":
+  version "7.23.2"
+  resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94"
+  integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==
+  dependencies:
+    "@ampproject/remapping" "^2.2.0"
+    "@babel/code-frame" "^7.22.13"
+    "@babel/generator" "^7.23.0"
+    "@babel/helper-compilation-targets" "^7.22.15"
+    "@babel/helper-module-transforms" "^7.23.0"
+    "@babel/helpers" "^7.23.2"
+    "@babel/parser" "^7.23.0"
+    "@babel/template" "^7.22.15"
+    "@babel/traverse" "^7.23.2"
+    "@babel/types" "^7.23.0"
+    convert-source-map "^2.0.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.2.3"
+    semver "^6.3.1"
+
+"@babel/eslint-parser@^7.21.3":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.5.tgz#fa032503b9e2d188e25b1b95d29e8b8431042d78"
+  integrity sha512-C69RWYNYtrgIRE5CmTd77ZiLDXqgBipahJc/jHP3sLcAGj6AJzxNIuKNpVnICqbyK7X3pFUfEvL++rvtbQpZkQ==
+  dependencies:
+    "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1"
+    eslint-visitor-keys "^2.1.0"
+    semver "^6.3.0"
+
+"@babel/eslint-plugin@^7.17.7":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.22.5.tgz#47407d8c9e527b62ff75ee11e4baa6de3da7cf0e"
+  integrity sha512-lDXW06rf1sXywWWw+UdS/iYxRjrqhH4AXdPeKE4+fEgEoGBXcdIDQ+uCJOUcvCb0jCTvfwHOSXkwnfd24EAkLQ==
+  dependencies:
+    eslint-rule-composer "^0.3.0"
+
+"@babel/generator@^7.22.15", "@babel/generator@^7.7.2":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339"
+  integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==
+  dependencies:
+    "@babel/types" "^7.22.15"
+    "@jridgewell/gen-mapping" "^0.3.2"
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jsesc "^2.5.1"
+
+"@babel/generator@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7"
+  integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==
+  dependencies:
+    "@babel/types" "^7.22.5"
+    "@jridgewell/gen-mapping" "^0.3.2"
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jsesc "^2.5.1"
+
+"@babel/generator@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
+  integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
+  dependencies:
+    "@babel/types" "^7.23.0"
+    "@jridgewell/gen-mapping" "^0.3.2"
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jsesc "^2.5.1"
+
+"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882"
+  integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878"
+  integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.7", "@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#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02"
+  integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==
+  dependencies:
+    "@babel/compat-data" "^7.22.5"
+    "@babel/helper-validator-option" "^7.22.5"
+    browserslist "^4.21.3"
+    lru-cache "^5.1.1"
+    semver "^6.3.0"
+
+"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52"
+  integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==
+  dependencies:
+    "@babel/compat-data" "^7.22.9"
+    "@babel/helper-validator-option" "^7.22.15"
+    browserslist "^4.21.9"
+    lru-cache "^5.1.1"
+    semver "^6.3.1"
+
+"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c"
+  integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-environment-visitor" "^7.22.5"
+    "@babel/helper-function-name" "^7.22.5"
+    "@babel/helper-member-expression-to-functions" "^7.22.5"
+    "@babel/helper-optimise-call-expression" "^7.22.5"
+    "@babel/helper-replace-supers" "^7.22.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+    "@babel/helper-split-export-declaration" "^7.22.5"
+    semver "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4"
+  integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-environment-visitor" "^7.22.5"
+    "@babel/helper-function-name" "^7.22.5"
+    "@babel/helper-member-expression-to-functions" "^7.22.15"
+    "@babel/helper-optimise-call-expression" "^7.22.5"
+    "@babel/helper-replace-supers" "^7.22.9"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+    "@babel/helper-split-export-declaration" "^7.22.6"
+    semver "^6.3.1"
+
+"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4"
+  integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    regexpu-core "^5.3.1"
+    semver "^6.3.0"
+
+"@babel/helper-define-polyfill-provider@^0.4.0":
+  version "0.4.0"
+  resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8"
+  integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.17.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+    debug "^4.1.1"
+    lodash.debounce "^4.0.8"
+    resolve "^1.14.2"
+    semver "^6.1.2"
+
+"@babel/helper-define-polyfill-provider@^0.4.2":
+  version "0.4.2"
+  resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7"
+  integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.22.6"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    debug "^4.1.1"
+    lodash.debounce "^4.0.8"
+    resolve "^1.14.2"
+
+"@babel/helper-define-polyfill-provider@^0.4.3":
+  version "0.4.3"
+  resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba"
+  integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.22.6"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    debug "^4.1.1"
+    lodash.debounce "^4.0.8"
+    resolve "^1.14.2"
+
+"@babel/helper-environment-visitor@^7.22.20":
+  version "7.22.20"
+  resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
+  integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
+
+"@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#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98"
+  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#ede300828905bb15e582c037162f99d5183af1be"
+  integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==
+  dependencies:
+    "@babel/template" "^7.22.5"
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-function-name@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
+  integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
+  dependencies:
+    "@babel/template" "^7.22.15"
+    "@babel/types" "^7.23.0"
+
+"@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#c01a007dac05c085914e8fb652b339db50d823bb"
+  integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-member-expression-to-functions@^7.22.15":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366"
+  integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==
+  dependencies:
+    "@babel/types" "^7.23.0"
+
+"@babel/helper-member-expression-to-functions@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2"
+  integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.21.4", "@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#1a8f4c9f4027d23f520bd76b364d44434a72660c"
+  integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-module-imports@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
+  integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
+  dependencies:
+    "@babel/types" "^7.22.15"
+
+"@babel/helper-module-transforms@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.15.tgz#40ad2f6950f143900e9c1c72363c0b431a606082"
+  integrity sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.22.5"
+    "@babel/helper-module-imports" "^7.22.15"
+    "@babel/helper-simple-access" "^7.22.5"
+    "@babel/helper-split-export-declaration" "^7.22.6"
+    "@babel/helper-validator-identifier" "^7.22.15"
+
+"@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#0f65daa0716961b6e96b164034e737f60a80d2ef"
+  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-module-transforms@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e"
+  integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.22.20"
+    "@babel/helper-module-imports" "^7.22.15"
+    "@babel/helper-simple-access" "^7.22.5"
+    "@babel/helper-split-export-declaration" "^7.22.6"
+    "@babel/helper-validator-identifier" "^7.22.20"
+
+"@babel/helper-optimise-call-expression@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e"
+  integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
+  integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
+
+"@babel/helper-remap-async-to-generator@^7.22.20":
+  version "7.22.20"
+  resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0"
+  integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-environment-visitor" "^7.22.20"
+    "@babel/helper-wrap-function" "^7.22.20"
+
+"@babel/helper-remap-async-to-generator@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2"
+  integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-environment-visitor" "^7.22.5"
+    "@babel/helper-wrap-function" "^7.22.5"
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-replace-supers@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc"
+  integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.22.5"
+    "@babel/helper-member-expression-to-functions" "^7.22.5"
+    "@babel/helper-optimise-call-expression" "^7.22.5"
+    "@babel/template" "^7.22.5"
+    "@babel/traverse" "^7.22.5"
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-replace-supers@^7.22.9":
+  version "7.22.20"
+  resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793"
+  integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.22.20"
+    "@babel/helper-member-expression-to-functions" "^7.22.15"
+    "@babel/helper-optimise-call-expression" "^7.22.5"
+
+"@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#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
+  integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847"
+  integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==
+  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#88cf11050edb95ed08d596f7a044462189127a08"
+  integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-split-export-declaration@^7.22.6":
+  version "7.22.6"
+  resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
+  integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+  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#533f36457a25814cf1df6488523ad547d784a99f"
+  integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+
+"@babel/helper-validator-identifier@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044"
+  integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==
+
+"@babel/helper-validator-identifier@^7.22.20":
+  version "7.22.20"
+  resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+  integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
+"@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#9544ef6a33999343c8740fa51350f30eeaaaf193"
+  integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
+
+"@babel/helper-validator-option@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040"
+  integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==
+
+"@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#de52000a15a177413c8234fa3a8af4ee8102d0ac"
+  integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==
+
+"@babel/helper-wrap-function@^7.22.20":
+  version "7.22.20"
+  resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569"
+  integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==
+  dependencies:
+    "@babel/helper-function-name" "^7.22.5"
+    "@babel/template" "^7.22.15"
+    "@babel/types" "^7.22.19"
+
+"@babel/helper-wrap-function@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06"
+  integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==
+  dependencies:
+    "@babel/helper-function-name" "^7.22.5"
+    "@babel/template" "^7.22.5"
+    "@babel/traverse" "^7.22.5"
+    "@babel/types" "^7.22.5"
+
+"@babel/helpers@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1"
+  integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==
+  dependencies:
+    "@babel/template" "^7.22.15"
+    "@babel/traverse" "^7.22.15"
+    "@babel/types" "^7.22.15"
+
+"@babel/helpers@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820"
+  integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==
+  dependencies:
+    "@babel/template" "^7.22.5"
+    "@babel/traverse" "^7.22.5"
+    "@babel/types" "^7.22.5"
+
+"@babel/helpers@^7.23.2":
+  version "7.23.2"
+  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767"
+  integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==
+  dependencies:
+    "@babel/template" "^7.22.15"
+    "@babel/traverse" "^7.23.2"
+    "@babel/types" "^7.23.0"
+
+"@babel/highlight@^7.22.13":
+  version "7.22.13"
+  resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16"
+  integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.22.5"
+    chalk "^2.4.2"
+    js-tokens "^4.0.0"
+
+"@babel/highlight@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
+  integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.22.5"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.15.tgz#d34592bfe288a32e741aa0663dbc4829fcd55160"
+  integrity sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA==
+
+"@babel/parser@^7.14.7", "@babel/parser@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea"
+  integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==
+
+"@babel/parser@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
+  integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962"
+  integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e"
+  integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f"
+  integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+    "@babel/plugin-transform-optional-chaining" "^7.22.15"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca"
+  integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+    "@babel/plugin-transform-optional-chaining" "^7.22.5"
+
+"@babel/plugin-proposal-class-properties@^7.10.4":
+  version "7.18.6"
+  resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3"
+  integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-proposal-object-rest-spread@^7.10.1":
+  version "7.20.7"
+  resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a"
+  integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==
+  dependencies:
+    "@babel/compat-data" "^7.20.5"
+    "@babel/helper-compilation-targets" "^7.20.7"
+    "@babel/helper-plugin-utils" "^7.20.2"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-transform-parameters" "^7.20.7"
+
+"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2":
+  version "7.21.0-placeholder-for-preset-env.2"
+  resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703"
+  integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==
+
+"@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+  version "7.18.6"
+  resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e"
+  integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+  version "7.8.4"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+  integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+  integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
+  version "7.12.13"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+  integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+  integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+  integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+  integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-import-assertions@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98"
+  integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-import-attributes@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb"
+  integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3":
+  version "7.10.4"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+  integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+  integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.16.0", "@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.7.2":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918"
+  integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+  version "7.10.4"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+  integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+  integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
+  version "7.10.4"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+  integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+  integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+  integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+  integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+  integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
+  version "7.14.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+  integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272"
+  integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-unicode-sets-regex@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357"
+  integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-arrow-functions@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958"
+  integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-async-generator-functions@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3"
+  integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-remap-async-to-generator" "^7.22.5"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-transform-async-generator-functions@^7.23.2":
+  version "7.23.2"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz#054afe290d64c6f576f371ccc321772c8ea87ebb"
+  integrity sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.22.20"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-remap-async-to-generator" "^7.22.20"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-transform-async-to-generator@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775"
+  integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==
+  dependencies:
+    "@babel/helper-module-imports" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-remap-async-to-generator" "^7.22.5"
+
+"@babel/plugin-transform-block-scoped-functions@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024"
+  integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-block-scoping@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b"
+  integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-block-scoping@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022"
+  integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-class-properties@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77"
+  integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-class-static-block@^7.22.11":
+  version "7.22.11"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974"
+  integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.22.11"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-transform-class-static-block@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba"
+  integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-transform-classes@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b"
+  integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-compilation-targets" "^7.22.15"
+    "@babel/helper-environment-visitor" "^7.22.5"
+    "@babel/helper-function-name" "^7.22.5"
+    "@babel/helper-optimise-call-expression" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-replace-supers" "^7.22.9"
+    "@babel/helper-split-export-declaration" "^7.22.6"
+    globals "^11.1.0"
+
+"@babel/plugin-transform-classes@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1"
+  integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-compilation-targets" "^7.22.5"
+    "@babel/helper-environment-visitor" "^7.22.5"
+    "@babel/helper-function-name" "^7.22.5"
+    "@babel/helper-optimise-call-expression" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-replace-supers" "^7.22.5"
+    "@babel/helper-split-export-declaration" "^7.22.5"
+    globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869"
+  integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/template" "^7.22.5"
+
+"@babel/plugin-transform-destructuring@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc"
+  integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-destructuring@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c"
+  integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165"
+  integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-duplicate-keys@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285"
+  integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-dynamic-import@^7.22.11":
+  version "7.22.11"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa"
+  integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-transform-dynamic-import@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e"
+  integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-transform-exponentiation-operator@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a"
+  integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==
+  dependencies:
+    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-export-namespace-from@^7.22.11":
+  version "7.22.11"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c"
+  integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-transform-export-namespace-from@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b"
+  integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-transform-for-of@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29"
+  integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-for-of@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f"
+  integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-function-name@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143"
+  integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.22.5"
+    "@babel/helper-function-name" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-json-strings@^7.22.11":
+  version "7.22.11"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835"
+  integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-transform-json-strings@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0"
+  integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-transform-literals@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920"
+  integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-logical-assignment-operators@^7.22.11":
+  version "7.22.11"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c"
+  integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-transform-logical-assignment-operators@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c"
+  integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-transform-member-expression-literals@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def"
+  integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-modules-amd@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526"
+  integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-modules-amd@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88"
+  integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.23.0"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-modules-commonjs@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa"
+  integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-simple-access" "^7.22.5"
+
+"@babel/plugin-transform-modules-commonjs@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481"
+  integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.23.0"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-simple-access" "^7.22.5"
+
+"@babel/plugin-transform-modules-systemjs@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496"
+  integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==
+  dependencies:
+    "@babel/helper-hoist-variables" "^7.22.5"
+    "@babel/helper-module-transforms" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-validator-identifier" "^7.22.5"
+
+"@babel/plugin-transform-modules-systemjs@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160"
+  integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==
+  dependencies:
+    "@babel/helper-hoist-variables" "^7.22.5"
+    "@babel/helper-module-transforms" "^7.23.0"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-validator-identifier" "^7.22.20"
+
+"@babel/plugin-transform-modules-umd@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98"
+  integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f"
+  integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-new-target@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d"
+  integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11":
+  version "7.22.11"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc"
+  integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381"
+  integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-transform-numeric-separator@^7.22.11":
+  version "7.22.11"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd"
+  integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-transform-numeric-separator@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58"
+  integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-transform-object-rest-spread@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f"
+  integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==
+  dependencies:
+    "@babel/compat-data" "^7.22.9"
+    "@babel/helper-compilation-targets" "^7.22.15"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-transform-parameters" "^7.22.15"
+
+"@babel/plugin-transform-object-rest-spread@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1"
+  integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==
+  dependencies:
+    "@babel/compat-data" "^7.22.5"
+    "@babel/helper-compilation-targets" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-transform-parameters" "^7.22.5"
+
+"@babel/plugin-transform-object-super@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c"
+  integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-replace-supers" "^7.22.5"
+
+"@babel/plugin-transform-optional-catch-binding@^7.22.11":
+  version "7.22.11"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0"
+  integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-transform-optional-catch-binding@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333"
+  integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-transform-optional-chaining@^7.22.15", "@babel/plugin-transform-optional-chaining@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158"
+  integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-transform-optional-chaining@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0"
+  integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18"
+  integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-parameters@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114"
+  integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-private-methods@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722"
+  integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-private-property-in-object@^7.22.11":
+  version "7.22.11"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1"
+  integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-create-class-features-plugin" "^7.22.11"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-transform-private-property-in-object@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32"
+  integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-create-class-features-plugin" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-transform-property-literals@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766"
+  integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-react-constant-elements@^7.21.3":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz#6dfa7c1c37f7d7279e417ceddf5a04abb8bb9c29"
+  integrity sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-react-display-name@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b"
+  integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-react-jsx-development@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87"
+  integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==
+  dependencies:
+    "@babel/plugin-transform-react-jsx" "^7.22.5"
+
+"@babel/plugin-transform-react-jsx@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416"
+  integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-module-imports" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-jsx" "^7.22.5"
+    "@babel/types" "^7.22.5"
+
+"@babel/plugin-transform-react-pure-annotations@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0"
+  integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-regenerator@^7.22.10":
+  version "7.22.10"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca"
+  integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    regenerator-transform "^0.15.2"
+
+"@babel/plugin-transform-regenerator@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa"
+  integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    regenerator-transform "^0.15.1"
+
+"@babel/plugin-transform-reserved-words@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb"
+  integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-runtime@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz#3a625c4c05a39e932d7d34f5d4895cdd0172fdc9"
+  integrity sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g==
+  dependencies:
+    "@babel/helper-module-imports" "^7.22.15"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    babel-plugin-polyfill-corejs2 "^0.4.5"
+    babel-plugin-polyfill-corejs3 "^0.8.3"
+    babel-plugin-polyfill-regenerator "^0.5.2"
+    semver "^6.3.1"
+
+"@babel/plugin-transform-shorthand-properties@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624"
+  integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-spread@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b"
+  integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+
+"@babel/plugin-transform-sticky-regex@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa"
+  integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-template-literals@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff"
+  integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-typeof-symbol@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34"
+  integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-typescript@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz#15adef906451d86349eb4b8764865c960eb54127"
+  integrity sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-create-class-features-plugin" "^7.22.15"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-typescript" "^7.22.5"
+
+"@babel/plugin-transform-typescript@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz#5c0f7adfc1b5f38c4dbc8f79b1f0f8074134bd7d"
+  integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.22.5"
+    "@babel/helper-create-class-features-plugin" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/plugin-syntax-typescript" "^7.22.5"
+
+"@babel/plugin-transform-unicode-escapes@^7.22.10":
+  version "7.22.10"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9"
+  integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-unicode-escapes@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c"
+  integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-unicode-property-regex@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81"
+  integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-unicode-regex@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183"
+  integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-unicode-sets-regex@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91"
+  integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/preset-env@^7.10.2":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e"
+  integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==
+  dependencies:
+    "@babel/compat-data" "^7.22.5"
+    "@babel/helper-compilation-targets" "^7.22.5"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-validator-option" "^7.22.5"
+    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5"
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5"
+    "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-class-properties" "^7.12.13"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+    "@babel/plugin-syntax-import-assertions" "^7.22.5"
+    "@babel/plugin-syntax-import-attributes" "^7.22.5"
+    "@babel/plugin-syntax-import-meta" "^7.10.4"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+    "@babel/plugin-syntax-top-level-await" "^7.14.5"
+    "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
+    "@babel/plugin-transform-arrow-functions" "^7.22.5"
+    "@babel/plugin-transform-async-generator-functions" "^7.22.5"
+    "@babel/plugin-transform-async-to-generator" "^7.22.5"
+    "@babel/plugin-transform-block-scoped-functions" "^7.22.5"
+    "@babel/plugin-transform-block-scoping" "^7.22.5"
+    "@babel/plugin-transform-class-properties" "^7.22.5"
+    "@babel/plugin-transform-class-static-block" "^7.22.5"
+    "@babel/plugin-transform-classes" "^7.22.5"
+    "@babel/plugin-transform-computed-properties" "^7.22.5"
+    "@babel/plugin-transform-destructuring" "^7.22.5"
+    "@babel/plugin-transform-dotall-regex" "^7.22.5"
+    "@babel/plugin-transform-duplicate-keys" "^7.22.5"
+    "@babel/plugin-transform-dynamic-import" "^7.22.5"
+    "@babel/plugin-transform-exponentiation-operator" "^7.22.5"
+    "@babel/plugin-transform-export-namespace-from" "^7.22.5"
+    "@babel/plugin-transform-for-of" "^7.22.5"
+    "@babel/plugin-transform-function-name" "^7.22.5"
+    "@babel/plugin-transform-json-strings" "^7.22.5"
+    "@babel/plugin-transform-literals" "^7.22.5"
+    "@babel/plugin-transform-logical-assignment-operators" "^7.22.5"
+    "@babel/plugin-transform-member-expression-literals" "^7.22.5"
+    "@babel/plugin-transform-modules-amd" "^7.22.5"
+    "@babel/plugin-transform-modules-commonjs" "^7.22.5"
+    "@babel/plugin-transform-modules-systemjs" "^7.22.5"
+    "@babel/plugin-transform-modules-umd" "^7.22.5"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
+    "@babel/plugin-transform-new-target" "^7.22.5"
+    "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5"
+    "@babel/plugin-transform-numeric-separator" "^7.22.5"
+    "@babel/plugin-transform-object-rest-spread" "^7.22.5"
+    "@babel/plugin-transform-object-super" "^7.22.5"
+    "@babel/plugin-transform-optional-catch-binding" "^7.22.5"
+    "@babel/plugin-transform-optional-chaining" "^7.22.5"
+    "@babel/plugin-transform-parameters" "^7.22.5"
+    "@babel/plugin-transform-private-methods" "^7.22.5"
+    "@babel/plugin-transform-private-property-in-object" "^7.22.5"
+    "@babel/plugin-transform-property-literals" "^7.22.5"
+    "@babel/plugin-transform-regenerator" "^7.22.5"
+    "@babel/plugin-transform-reserved-words" "^7.22.5"
+    "@babel/plugin-transform-shorthand-properties" "^7.22.5"
+    "@babel/plugin-transform-spread" "^7.22.5"
+    "@babel/plugin-transform-sticky-regex" "^7.22.5"
+    "@babel/plugin-transform-template-literals" "^7.22.5"
+    "@babel/plugin-transform-typeof-symbol" "^7.22.5"
+    "@babel/plugin-transform-unicode-escapes" "^7.22.5"
+    "@babel/plugin-transform-unicode-property-regex" "^7.22.5"
+    "@babel/plugin-transform-unicode-regex" "^7.22.5"
+    "@babel/plugin-transform-unicode-sets-regex" "^7.22.5"
+    "@babel/preset-modules" "^0.1.5"
+    "@babel/types" "^7.22.5"
+    babel-plugin-polyfill-corejs2 "^0.4.3"
+    babel-plugin-polyfill-corejs3 "^0.8.1"
+    babel-plugin-polyfill-regenerator "^0.5.0"
+    core-js-compat "^3.30.2"
+    semver "^6.3.0"
+
+"@babel/preset-env@^7.20.2":
+  version "7.23.2"
+  resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz#1f22be0ff0e121113260337dbc3e58fafce8d059"
+  integrity sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==
+  dependencies:
+    "@babel/compat-data" "^7.23.2"
+    "@babel/helper-compilation-targets" "^7.22.15"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-validator-option" "^7.22.15"
+    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15"
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15"
+    "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-class-properties" "^7.12.13"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+    "@babel/plugin-syntax-import-assertions" "^7.22.5"
+    "@babel/plugin-syntax-import-attributes" "^7.22.5"
+    "@babel/plugin-syntax-import-meta" "^7.10.4"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+    "@babel/plugin-syntax-top-level-await" "^7.14.5"
+    "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
+    "@babel/plugin-transform-arrow-functions" "^7.22.5"
+    "@babel/plugin-transform-async-generator-functions" "^7.23.2"
+    "@babel/plugin-transform-async-to-generator" "^7.22.5"
+    "@babel/plugin-transform-block-scoped-functions" "^7.22.5"
+    "@babel/plugin-transform-block-scoping" "^7.23.0"
+    "@babel/plugin-transform-class-properties" "^7.22.5"
+    "@babel/plugin-transform-class-static-block" "^7.22.11"
+    "@babel/plugin-transform-classes" "^7.22.15"
+    "@babel/plugin-transform-computed-properties" "^7.22.5"
+    "@babel/plugin-transform-destructuring" "^7.23.0"
+    "@babel/plugin-transform-dotall-regex" "^7.22.5"
+    "@babel/plugin-transform-duplicate-keys" "^7.22.5"
+    "@babel/plugin-transform-dynamic-import" "^7.22.11"
+    "@babel/plugin-transform-exponentiation-operator" "^7.22.5"
+    "@babel/plugin-transform-export-namespace-from" "^7.22.11"
+    "@babel/plugin-transform-for-of" "^7.22.15"
+    "@babel/plugin-transform-function-name" "^7.22.5"
+    "@babel/plugin-transform-json-strings" "^7.22.11"
+    "@babel/plugin-transform-literals" "^7.22.5"
+    "@babel/plugin-transform-logical-assignment-operators" "^7.22.11"
+    "@babel/plugin-transform-member-expression-literals" "^7.22.5"
+    "@babel/plugin-transform-modules-amd" "^7.23.0"
+    "@babel/plugin-transform-modules-commonjs" "^7.23.0"
+    "@babel/plugin-transform-modules-systemjs" "^7.23.0"
+    "@babel/plugin-transform-modules-umd" "^7.22.5"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
+    "@babel/plugin-transform-new-target" "^7.22.5"
+    "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11"
+    "@babel/plugin-transform-numeric-separator" "^7.22.11"
+    "@babel/plugin-transform-object-rest-spread" "^7.22.15"
+    "@babel/plugin-transform-object-super" "^7.22.5"
+    "@babel/plugin-transform-optional-catch-binding" "^7.22.11"
+    "@babel/plugin-transform-optional-chaining" "^7.23.0"
+    "@babel/plugin-transform-parameters" "^7.22.15"
+    "@babel/plugin-transform-private-methods" "^7.22.5"
+    "@babel/plugin-transform-private-property-in-object" "^7.22.11"
+    "@babel/plugin-transform-property-literals" "^7.22.5"
+    "@babel/plugin-transform-regenerator" "^7.22.10"
+    "@babel/plugin-transform-reserved-words" "^7.22.5"
+    "@babel/plugin-transform-shorthand-properties" "^7.22.5"
+    "@babel/plugin-transform-spread" "^7.22.5"
+    "@babel/plugin-transform-sticky-regex" "^7.22.5"
+    "@babel/plugin-transform-template-literals" "^7.22.5"
+    "@babel/plugin-transform-typeof-symbol" "^7.22.5"
+    "@babel/plugin-transform-unicode-escapes" "^7.22.10"
+    "@babel/plugin-transform-unicode-property-regex" "^7.22.5"
+    "@babel/plugin-transform-unicode-regex" "^7.22.5"
+    "@babel/plugin-transform-unicode-sets-regex" "^7.22.5"
+    "@babel/preset-modules" "0.1.6-no-external-plugins"
+    "@babel/types" "^7.23.0"
+    babel-plugin-polyfill-corejs2 "^0.4.6"
+    babel-plugin-polyfill-corejs3 "^0.8.5"
+    babel-plugin-polyfill-regenerator "^0.5.3"
+    core-js-compat "^3.31.0"
+    semver "^6.3.1"
+
+"@babel/preset-modules@0.1.6-no-external-plugins":
+  version "0.1.6-no-external-plugins"
+  resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a"
+  integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/types" "^7.4.4"
+    esutils "^2.0.2"
+
+"@babel/preset-modules@^0.1.5":
+  version "0.1.5"
+  resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
+  integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+    "@babel/plugin-transform-dotall-regex" "^7.4.4"
+    "@babel/types" "^7.4.4"
+    esutils "^2.0.2"
+
+"@babel/preset-react@^7.12.13", "@babel/preset-react@^7.18.6":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6"
+  integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-validator-option" "^7.22.5"
+    "@babel/plugin-transform-react-display-name" "^7.22.5"
+    "@babel/plugin-transform-react-jsx" "^7.22.5"
+    "@babel/plugin-transform-react-jsx-development" "^7.22.5"
+    "@babel/plugin-transform-react-pure-annotations" "^7.22.5"
+
+"@babel/preset-typescript@^7.21.0":
+  version "7.23.2"
+  resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.2.tgz#c8de488130b7081f7e1482936ad3de5b018beef4"
+  integrity sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-validator-option" "^7.22.15"
+    "@babel/plugin-syntax-jsx" "^7.22.5"
+    "@babel/plugin-transform-modules-commonjs" "^7.23.0"
+    "@babel/plugin-transform-typescript" "^7.22.15"
+
+"@babel/preset-typescript@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8"
+  integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.22.5"
+    "@babel/helper-validator-option" "^7.22.5"
+    "@babel/plugin-syntax-jsx" "^7.22.5"
+    "@babel/plugin-transform-modules-commonjs" "^7.22.5"
+    "@babel/plugin-transform-typescript" "^7.22.5"
+
+"@babel/regjsgen@^0.8.0":
+  version "0.8.0"
+  resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
+  integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
+
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.1", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec"
+  integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==
+  dependencies:
+    regenerator-runtime "^0.13.11"
+
+"@babel/template@^7.22.15", "@babel/template@^7.3.3":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
+  integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
+  dependencies:
+    "@babel/code-frame" "^7.22.13"
+    "@babel/parser" "^7.22.15"
+    "@babel/types" "^7.22.15"
+
+"@babel/template@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
+  integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==
+  dependencies:
+    "@babel/code-frame" "^7.22.5"
+    "@babel/parser" "^7.22.5"
+    "@babel/types" "^7.22.5"
+
+"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.5", "@babel/traverse@^7.23.2", "@babel/traverse@^7.4.5":
+  version "7.23.2"
+  resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8"
+  integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==
+  dependencies:
+    "@babel/code-frame" "^7.22.13"
+    "@babel/generator" "^7.23.0"
+    "@babel/helper-environment-visitor" "^7.22.20"
+    "@babel/helper-function-name" "^7.23.0"
+    "@babel/helper-hoist-variables" "^7.22.5"
+    "@babel/helper-split-export-declaration" "^7.22.6"
+    "@babel/parser" "^7.23.0"
+    "@babel/types" "^7.23.0"
+    debug "^4.1.0"
+    globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.3.3":
+  version "7.22.15"
+  resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.15.tgz#266cb21d2c5fd0b3931e7a91b6dd72d2f617d282"
+  integrity sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==
+  dependencies:
+    "@babel/helper-string-parser" "^7.22.5"
+    "@babel/helper-validator-identifier" "^7.22.15"
+    to-fast-properties "^2.0.0"
+
+"@babel/types@^7.21.3", "@babel/types@^7.22.19", "@babel/types@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
+  integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
+  dependencies:
+    "@babel/helper-string-parser" "^7.22.5"
+    "@babel/helper-validator-identifier" "^7.22.20"
+    to-fast-properties "^2.0.0"
+
+"@babel/types@^7.22.5", "@babel/types@^7.4.4", "@babel/types@^7.8.3":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe"
+  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"
+
+"@bcoe/v8-coverage@^0.2.3":
+  version "0.2.3"
+  resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+  integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
+"@date-io/core@1.x", "@date-io/core@^1.3.13", "@date-io/core@^1.3.6":
+  version "1.3.13"
+  resolved "https://registry.npmjs.org/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa"
+  integrity sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA==
+
+"@date-io/date-fns@1.x":
+  version "1.3.13"
+  resolved "https://registry.npmjs.org/@date-io/date-fns/-/date-fns-1.3.13.tgz#7798844041640ab393f7e21a7769a65d672f4735"
+  integrity sha512-yXxGzcRUPcogiMj58wVgFjc9qUYrCnnU9eLcyNbsQCmae4jPuZCDoIBR21j8ZURsM7GRtU62VOw5yNd4dDHunA==
+  dependencies:
+    "@date-io/core" "^1.3.13"
+
+"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0":
+  version "0.5.7"
+  resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
+  integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
+
+"@emotion/babel-plugin@^11.11.0":
+  version "11.11.0"
+  resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c"
+  integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==
+  dependencies:
+    "@babel/helper-module-imports" "^7.16.7"
+    "@babel/runtime" "^7.18.3"
+    "@emotion/hash" "^0.9.1"
+    "@emotion/memoize" "^0.8.1"
+    "@emotion/serialize" "^1.1.2"
+    babel-plugin-macros "^3.1.0"
+    convert-source-map "^1.5.0"
+    escape-string-regexp "^4.0.0"
+    find-root "^1.1.0"
+    source-map "^0.5.7"
+    stylis "4.2.0"
+
+"@emotion/cache@^10.0.27":
+  version "10.0.29"
+  resolved "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0"
+  integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==
+  dependencies:
+    "@emotion/sheet" "0.9.4"
+    "@emotion/stylis" "0.8.5"
+    "@emotion/utils" "0.11.3"
+    "@emotion/weak-memoize" "0.2.5"
+
+"@emotion/cache@^11.11.0", "@emotion/cache@^11.4.0":
+  version "11.11.0"
+  resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff"
+  integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==
+  dependencies:
+    "@emotion/memoize" "^0.8.1"
+    "@emotion/sheet" "^1.2.2"
+    "@emotion/utils" "^1.2.1"
+    "@emotion/weak-memoize" "^0.3.1"
+    stylis "4.2.0"
+
+"@emotion/core@^10.0.14":
+  version "10.3.1"
+  resolved "https://registry.npmjs.org/@emotion/core/-/core-10.3.1.tgz#4021b6d8b33b3304d48b0bb478485e7d7421c69d"
+  integrity sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==
+  dependencies:
+    "@babel/runtime" "^7.5.5"
+    "@emotion/cache" "^10.0.27"
+    "@emotion/css" "^10.0.27"
+    "@emotion/serialize" "^0.11.15"
+    "@emotion/sheet" "0.9.4"
+    "@emotion/utils" "0.11.3"
+
+"@emotion/css@^10.0.27":
+  version "10.0.27"
+  resolved "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c"
+  integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==
+  dependencies:
+    "@emotion/serialize" "^0.11.15"
+    "@emotion/utils" "0.11.3"
+    babel-plugin-emotion "^10.0.27"
+
+"@emotion/hash@0.8.0", "@emotion/hash@^0.8.0":
+  version "0.8.0"
+  resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
+  integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+
+"@emotion/hash@^0.9.1":
+  version "0.9.1"
+  resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43"
+  integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==
+
+"@emotion/is-prop-valid@^1.1.0", "@emotion/is-prop-valid@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc"
+  integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==
+  dependencies:
+    "@emotion/memoize" "^0.8.1"
+
+"@emotion/memoize@0.7.4":
+  version "0.7.4"
+  resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
+  integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
+
+"@emotion/memoize@^0.7.5":
+  version "0.7.5"
+  resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
+  integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==
+
+"@emotion/memoize@^0.8.1":
+  version "0.8.1"
+  resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17"
+  integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==
+
+"@emotion/react@^11.1.5", "@emotion/react@^11.8.1":
+  version "11.11.1"
+  resolved "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157"
+  integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==
+  dependencies:
+    "@babel/runtime" "^7.18.3"
+    "@emotion/babel-plugin" "^11.11.0"
+    "@emotion/cache" "^11.11.0"
+    "@emotion/serialize" "^1.1.2"
+    "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1"
+    "@emotion/utils" "^1.2.1"
+    "@emotion/weak-memoize" "^0.3.1"
+    hoist-non-react-statics "^3.3.1"
+
+"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16":
+  version "0.11.16"
+  resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad"
+  integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==
+  dependencies:
+    "@emotion/hash" "0.8.0"
+    "@emotion/memoize" "0.7.4"
+    "@emotion/unitless" "0.7.5"
+    "@emotion/utils" "0.11.3"
+    csstype "^2.5.7"
+
+"@emotion/serialize@^1.1.2":
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51"
+  integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==
+  dependencies:
+    "@emotion/hash" "^0.9.1"
+    "@emotion/memoize" "^0.8.1"
+    "@emotion/unitless" "^0.8.1"
+    "@emotion/utils" "^1.2.1"
+    csstype "^3.0.2"
+
+"@emotion/sheet@0.9.4":
+  version "0.9.4"
+  resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5"
+  integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==
+
+"@emotion/sheet@^1.0.1", "@emotion/sheet@^1.2.2":
+  version "1.2.2"
+  resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec"
+  integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==
+
+"@emotion/styled@^11.11.0":
+  version "11.11.0"
+  resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz#26b75e1b5a1b7a629d7c0a8b708fbf5a9cdce346"
+  integrity sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==
+  dependencies:
+    "@babel/runtime" "^7.18.3"
+    "@emotion/babel-plugin" "^11.11.0"
+    "@emotion/is-prop-valid" "^1.2.1"
+    "@emotion/serialize" "^1.1.2"
+    "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1"
+    "@emotion/utils" "^1.2.1"
+
+"@emotion/stylis@0.8.5", "@emotion/stylis@^0.8.4":
+  version "0.8.5"
+  resolved "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
+  integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
+
+"@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.4":
+  version "0.7.5"
+  resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+  integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
+"@emotion/unitless@^0.8.1":
+  version "0.8.1"
+  resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3"
+  integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==
+
+"@emotion/use-insertion-effect-with-fallbacks@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963"
+  integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==
+
+"@emotion/utils@0.11.3":
+  version "0.11.3"
+  resolved "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924"
+  integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==
+
+"@emotion/utils@^1.0.0", "@emotion/utils@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4"
+  integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==
+
+"@emotion/weak-memoize@0.2.5":
+  version "0.2.5"
+  resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
+  integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
+
+"@emotion/weak-memoize@^0.3.1":
+  version "0.3.1"
+  resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6"
+  integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==
+
+"@eslint-community/eslint-utils@^4.2.0":
+  version "4.4.0"
+  resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+  integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+  dependencies:
+    eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/regexpp@^4.4.0":
+  version "4.5.1"
+  resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884"
+  integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==
+
+"@eslint/eslintrc@^2.0.3":
+  version "2.0.3"
+  resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331"
+  integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==
+  dependencies:
+    ajv "^6.12.4"
+    debug "^4.3.2"
+    espree "^9.5.2"
+    globals "^13.19.0"
+    ignore "^5.2.0"
+    import-fresh "^3.2.1"
+    js-yaml "^4.1.0"
+    minimatch "^3.1.2"
+    strip-json-comments "^3.1.1"
+
+"@eslint/js@8.43.0":
+  version "8.43.0"
+  resolved "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz#559ca3d9ddbd6bf907ad524320a0d14b85586af0"
+  integrity sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==
+
+"@floating-ui/core@^1.3.1":
+  version "1.3.1"
+  resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.1.tgz#4d795b649cc3b1cbb760d191c80dcb4353c9a366"
+  integrity sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==
+
+"@floating-ui/dom@^1.0.1":
+  version "1.4.2"
+  resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.2.tgz#eb3a37f7506c4f95ef735967dc3496b5012e11cb"
+  integrity sha512-VKmvHVatWnewmGGy+7Mdy4cTJX71Pli6v/Wjb5RQBuq5wjUYx+Ef+kRThi8qggZqDgD8CogCpqhRoVp3+yQk+g==
+  dependencies:
+    "@floating-ui/core" "^1.3.1"
+
+"@fortawesome/fontawesome-free@latest":
+  version "6.4.2"
+  resolved "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz#36b6a9cb5ffbecdf89815c94d0c0ffa489ac5ecb"
+  integrity sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==
+
+"@humanwhocodes/config-array@^0.11.10":
+  version "0.11.10"
+  resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2"
+  integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==
+  dependencies:
+    "@humanwhocodes/object-schema" "^1.2.1"
+    debug "^4.1.1"
+    minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+  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#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
+  integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+
+"@isaacs/cliui@^8.0.2":
+  version "8.0.2"
+  resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+  integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+  dependencies:
+    string-width "^5.1.2"
+    string-width-cjs "string-width@^4.2.0"
+    strip-ansi "^7.0.1"
+    strip-ansi-cjs "strip-ansi@^6.0.1"
+    wrap-ansi "^8.1.0"
+    wrap-ansi-cjs "wrap-ansi@^7.0.0"
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+  integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+  dependencies:
+    camelcase "^5.3.1"
+    find-up "^4.1.0"
+    get-package-type "^0.1.0"
+    js-yaml "^3.13.1"
+    resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+  version "0.1.3"
+  resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+  integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz#a7e2d84516301f986bba0dd55af9d5fe37f46527"
+  integrity sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==
+  dependencies:
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    jest-message-util "^29.6.3"
+    jest-util "^29.6.3"
+    slash "^3.0.0"
+
+"@jest/core@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz#265ebee05ec1ff3567757e7a327155c8d6bdb126"
+  integrity sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==
+  dependencies:
+    "@jest/console" "^29.6.4"
+    "@jest/reporters" "^29.6.4"
+    "@jest/test-result" "^29.6.4"
+    "@jest/transform" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    ansi-escapes "^4.2.1"
+    chalk "^4.0.0"
+    ci-info "^3.2.0"
+    exit "^0.1.2"
+    graceful-fs "^4.2.9"
+    jest-changed-files "^29.6.3"
+    jest-config "^29.6.4"
+    jest-haste-map "^29.6.4"
+    jest-message-util "^29.6.3"
+    jest-regex-util "^29.6.3"
+    jest-resolve "^29.6.4"
+    jest-resolve-dependencies "^29.6.4"
+    jest-runner "^29.6.4"
+    jest-runtime "^29.6.4"
+    jest-snapshot "^29.6.4"
+    jest-util "^29.6.3"
+    jest-validate "^29.6.3"
+    jest-watcher "^29.6.4"
+    micromatch "^4.0.4"
+    pretty-format "^29.6.3"
+    slash "^3.0.0"
+    strip-ansi "^6.0.0"
+
+"@jest/environment@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz#78ec2c9f8c8829a37616934ff4fea0c028c79f4f"
+  integrity sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==
+  dependencies:
+    "@jest/fake-timers" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    jest-mock "^29.6.3"
+
+"@jest/expect-utils@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz#17c7dfe6cec106441f218b0aff4b295f98346679"
+  integrity sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==
+  dependencies:
+    jest-get-type "^29.6.3"
+
+"@jest/expect@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz#1d6ae17dc68d906776198389427ab7ce6179dba6"
+  integrity sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==
+  dependencies:
+    expect "^29.6.4"
+    jest-snapshot "^29.6.4"
+
+"@jest/fake-timers@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz#45a27f093c43d5d989362a3e7a8c70c83188b4f6"
+  integrity sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==
+  dependencies:
+    "@jest/types" "^29.6.3"
+    "@sinonjs/fake-timers" "^10.0.2"
+    "@types/node" "*"
+    jest-message-util "^29.6.3"
+    jest-mock "^29.6.3"
+    jest-util "^29.6.3"
+
+"@jest/globals@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz#4f04f58731b062b44ef23036b79bdb31f40c7f63"
+  integrity sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==
+  dependencies:
+    "@jest/environment" "^29.6.4"
+    "@jest/expect" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    jest-mock "^29.6.3"
+
+"@jest/reporters@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz#9d6350c8a2761ece91f7946e97ab0dabc06deab7"
+  integrity sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==
+  dependencies:
+    "@bcoe/v8-coverage" "^0.2.3"
+    "@jest/console" "^29.6.4"
+    "@jest/test-result" "^29.6.4"
+    "@jest/transform" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    "@jridgewell/trace-mapping" "^0.3.18"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    collect-v8-coverage "^1.0.0"
+    exit "^0.1.2"
+    glob "^7.1.3"
+    graceful-fs "^4.2.9"
+    istanbul-lib-coverage "^3.0.0"
+    istanbul-lib-instrument "^6.0.0"
+    istanbul-lib-report "^3.0.0"
+    istanbul-lib-source-maps "^4.0.0"
+    istanbul-reports "^3.1.3"
+    jest-message-util "^29.6.3"
+    jest-util "^29.6.3"
+    jest-worker "^29.6.4"
+    slash "^3.0.0"
+    string-length "^4.0.1"
+    strip-ansi "^6.0.0"
+    v8-to-istanbul "^9.0.1"
+
+"@jest/schemas@^29.4.3":
+  version "29.4.3"
+  resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788"
+  integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==
+  dependencies:
+    "@sinclair/typebox" "^0.25.16"
+
+"@jest/schemas@^29.6.3":
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
+  integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
+  dependencies:
+    "@sinclair/typebox" "^0.27.8"
+
+"@jest/source-map@^29.6.3":
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4"
+  integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.18"
+    callsites "^3.0.0"
+    graceful-fs "^4.2.9"
+
+"@jest/test-result@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz#adf5c79f6e1fb7405ad13d67d9e2b6ff54b54c6b"
+  integrity sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==
+  dependencies:
+    "@jest/console" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    collect-v8-coverage "^1.0.0"
+
+"@jest/test-sequencer@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz#86aef66aaa22b181307ed06c26c82802fb836d7b"
+  integrity sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==
+  dependencies:
+    "@jest/test-result" "^29.6.4"
+    graceful-fs "^4.2.9"
+    jest-haste-map "^29.6.4"
+    slash "^3.0.0"
+
+"@jest/transform@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz#a6bc799ef597c5d85b2e65a11fd96b6b239bab5a"
+  integrity sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==
+  dependencies:
+    "@babel/core" "^7.11.6"
+    "@jest/types" "^29.6.3"
+    "@jridgewell/trace-mapping" "^0.3.18"
+    babel-plugin-istanbul "^6.1.1"
+    chalk "^4.0.0"
+    convert-source-map "^2.0.0"
+    fast-json-stable-stringify "^2.1.0"
+    graceful-fs "^4.2.9"
+    jest-haste-map "^29.6.4"
+    jest-regex-util "^29.6.3"
+    jest-util "^29.6.3"
+    micromatch "^4.0.4"
+    pirates "^4.0.4"
+    slash "^3.0.0"
+    write-file-atomic "^4.0.2"
+
+"@jest/types@^29.5.0":
+  version "29.5.0"
+  resolved "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593"
+  integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==
+  dependencies:
+    "@jest/schemas" "^29.4.3"
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    "@types/istanbul-reports" "^3.0.0"
+    "@types/node" "*"
+    "@types/yargs" "^17.0.8"
+    chalk "^4.0.0"
+
+"@jest/types@^29.6.3":
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59"
+  integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==
+  dependencies:
+    "@jest/schemas" "^29.6.3"
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    "@types/istanbul-reports" "^3.0.0"
+    "@types/node" "*"
+    "@types/yargs" "^17.0.8"
+    chalk "^4.0.0"
+
+"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
+  version "0.3.3"
+  resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+  integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.1"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@3.1.0":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
+  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+
+"@jridgewell/resolve-uri@^3.1.0":
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
+  integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
+
+"@jridgewell/set-array@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/source-map@^0.3.3":
+  version "0.3.3"
+  resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda"
+  integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/sourcemap-codec@1.4.14":
+  version "1.4.14"
+  resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
+  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+  version "1.4.15"
+  resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.12":
+  version "0.3.19"
+  resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811"
+  integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.1.0"
+    "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.18"
+  resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
+  integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
+  dependencies:
+    "@jridgewell/resolve-uri" "3.1.0"
+    "@jridgewell/sourcemap-codec" "1.4.14"
+
+"@material-ui/core@4.12.4":
+  version "4.12.4"
+  resolved "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73"
+  integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    "@material-ui/styles" "^4.11.5"
+    "@material-ui/system" "^4.12.2"
+    "@material-ui/types" "5.1.0"
+    "@material-ui/utils" "^4.11.3"
+    "@types/react-transition-group" "^4.2.0"
+    clsx "^1.0.4"
+    hoist-non-react-statics "^3.3.2"
+    popper.js "1.16.1-lts"
+    prop-types "^15.7.2"
+    react-is "^16.8.0 || ^17.0.0"
+    react-transition-group "^4.4.0"
+
+"@material-ui/icons@^4.11.2":
+  version "4.11.3"
+  resolved "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz#b0693709f9b161ce9ccde276a770d968484ecff1"
+  integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+
+"@material-ui/lab@4.0.0-alpha.61":
+  version "4.0.0-alpha.61"
+  resolved "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz#9bf8eb389c0c26c15e40933cc114d4ad85e3d978"
+  integrity sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    "@material-ui/utils" "^4.11.3"
+    clsx "^1.0.4"
+    prop-types "^15.7.2"
+    react-is "^16.8.0 || ^17.0.0"
+
+"@material-ui/pickers@3.3.10":
+  version "3.3.10"
+  resolved "https://registry.npmjs.org/@material-ui/pickers/-/pickers-3.3.10.tgz#f1b0f963348cc191645ef0bdeff7a67c6aa25485"
+  integrity sha512-hS4pxwn1ZGXVkmgD4tpFpaumUaAg2ZzbTrxltfC5yPw4BJV+mGkfnQOB4VpWEYZw2jv65Z0wLwDE/piQiPPZ3w==
+  dependencies:
+    "@babel/runtime" "^7.6.0"
+    "@date-io/core" "1.x"
+    "@types/styled-jsx" "^2.2.8"
+    clsx "^1.0.2"
+    react-transition-group "^4.0.0"
+    rifm "^0.7.0"
+
+"@material-ui/styles@^4.11.5":
+  version "4.11.5"
+  resolved "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.5.tgz#19f84457df3aafd956ac863dbe156b1d88e2bbfb"
+  integrity sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    "@emotion/hash" "^0.8.0"
+    "@material-ui/types" "5.1.0"
+    "@material-ui/utils" "^4.11.3"
+    clsx "^1.0.4"
+    csstype "^2.5.2"
+    hoist-non-react-statics "^3.3.2"
+    jss "^10.5.1"
+    jss-plugin-camel-case "^10.5.1"
+    jss-plugin-default-unit "^10.5.1"
+    jss-plugin-global "^10.5.1"
+    jss-plugin-nested "^10.5.1"
+    jss-plugin-props-sort "^10.5.1"
+    jss-plugin-rule-value-function "^10.5.1"
+    jss-plugin-vendor-prefixer "^10.5.1"
+    prop-types "^15.7.2"
+
+"@material-ui/system@^4.12.2":
+  version "4.12.2"
+  resolved "https://registry.npmjs.org/@material-ui/system/-/system-4.12.2.tgz#f5c389adf3fce4146edd489bf4082d461d86aa8b"
+  integrity sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    "@material-ui/utils" "^4.11.3"
+    csstype "^2.5.2"
+    prop-types "^15.7.2"
+
+"@material-ui/types@5.1.0":
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2"
+  integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==
+
+"@material-ui/utils@^4.11.3":
+  version "4.11.3"
+  resolved "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz#232bd86c4ea81dab714f21edad70b7fdf0253942"
+  integrity sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    prop-types "^15.7.2"
+    react-is "^16.8.0 || ^17.0.0"
+
+"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1":
+  version "5.1.1-v1"
+  resolved "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129"
+  integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==
+  dependencies:
+    eslint-scope "5.1.1"
+
+"@nodelib/fs.scandir@2.1.5":
+  version "2.1.5"
+  resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+  integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+  dependencies:
+    "@nodelib/fs.stat" "2.0.5"
+    run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+  version "2.0.5"
+  resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+  version "1.2.8"
+  resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+  integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+  dependencies:
+    "@nodelib/fs.scandir" "2.1.5"
+    fastq "^1.6.0"
+
+"@npmcli/fs@^3.1.0":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e"
+  integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==
+  dependencies:
+    semver "^7.3.5"
+
+"@pkgjs/parseargs@^0.11.0":
+  version "0.11.0"
+  resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+  integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+"@polka/url@^1.0.0-next.20":
+  version "1.0.0-next.21"
+  resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
+  integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
+
+"@projectstorm/geometry@^6.7.4":
+  version "6.7.4"
+  resolved "https://registry.npmjs.org/@projectstorm/geometry/-/geometry-6.7.4.tgz#972d9c65845fc83f48ead4b11a28b809d3d9c03d"
+  integrity sha512-9jTcQPzg+qT9OUMCUGmpkyk0ChHMobFL5d542dY5sb54bki35cawvQj2gMsIdNJ4WGxnuM+DKSSzm4JX35lGtw==
+
+"@projectstorm/react-canvas-core@^6.7.4":
+  version "6.7.4"
+  resolved "https://registry.npmjs.org/@projectstorm/react-canvas-core/-/react-canvas-core-6.7.4.tgz#0bb33a47d99aa2f520e2fd6d5164643c0ed937bb"
+  integrity sha512-sY32kT//gQe5aw6RHkmKrbzBq9iWyfwyvvfRTplGPE1ll3zOBVCjbf3tdfw6vATCden+WR0TmirtBo2j3exiBg==
+  dependencies:
+    "@projectstorm/geometry" "^6.7.4"
+
+"@projectstorm/react-diagrams-core@^6.7.4":
+  version "6.7.4"
+  resolved "https://registry.npmjs.org/@projectstorm/react-diagrams-core/-/react-diagrams-core-6.7.4.tgz#14a5b12f97c91349a70f0b6c8efe42ec14d80111"
+  integrity sha512-AeqH1u58Ugk8mif/GgLEUeOMmTPaWDpl1isA1OJHCPGMbvAytRfv5mrGMvG2E+pYDB29BQ4Yo2z9/TbAy6/nvA==
+  dependencies:
+    "@projectstorm/geometry" "^6.7.4"
+    "@projectstorm/react-canvas-core" "^6.7.4"
+
+"@projectstorm/react-diagrams-defaults@^6.7.4":
+  version "6.7.4"
+  resolved "https://registry.npmjs.org/@projectstorm/react-diagrams-defaults/-/react-diagrams-defaults-6.7.4.tgz#d303f1099c051e3470e3e4b9439e84d52f29d488"
+  integrity sha512-j3pRlZq1Z5yIGKpI7VtVkvNK/kXKB2abNMVXTSLUECA4iRubPKDn08w6q4jg1nBZXLGidrHsrELqW+53G9VvLA==
+  dependencies:
+    "@projectstorm/react-diagrams-core" "^6.7.4"
+
+"@projectstorm/react-diagrams-routing@^6.7.4":
+  version "6.7.4"
+  resolved "https://registry.npmjs.org/@projectstorm/react-diagrams-routing/-/react-diagrams-routing-6.7.4.tgz#954609769335bd43f5817e1fb9edd1e52fccab21"
+  integrity sha512-mB8YaRkNF6gdTlYvL0Cxc6m6XLwh7wvmjIsiEO6kW3j1uSvH7R7Gbl/iDYOdc0zUMqH9+pD+M064tWC4oAXa9A==
+  dependencies:
+    "@projectstorm/geometry" "^6.7.4"
+    "@projectstorm/react-diagrams-core" "^6.7.4"
+    "@projectstorm/react-diagrams-defaults" "^6.7.4"
+
+"@projectstorm/react-diagrams@^6.6.1":
+  version "6.7.4"
+  resolved "https://registry.npmjs.org/@projectstorm/react-diagrams/-/react-diagrams-6.7.4.tgz#9bf4f1953de610e533253e49049d1126f932bce9"
+  integrity sha512-xK/bi7DqHKv15XZRESeSpvSmAVArJIXkV6E1mybSc/24toGmoE2imcS+puxG6wGS56NhR0gIrUiT5UYwBvyD5A==
+  dependencies:
+    "@projectstorm/react-diagrams-core" "^6.7.4"
+    "@projectstorm/react-diagrams-defaults" "^6.7.4"
+    "@projectstorm/react-diagrams-routing" "^6.7.4"
+
+"@rc-component/portal@^1.1.0":
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.1.tgz#1a30ffe51c240b54360cba8e8bfc5d1f559325c4"
+  integrity sha512-m8w3dFXX0H6UkJ4wtfrSwhe2/6M08uz24HHrF8pWfAXPwA9hwCuTE5per/C86KwNLouRpwFGcr7LfpHaa1F38g==
+  dependencies:
+    "@babel/runtime" "^7.18.0"
+    classnames "^2.3.2"
+    rc-util "^5.24.4"
+
+"@rc-component/trigger@^1.6.2":
+  version "1.13.6"
+  resolved "https://registry.npmjs.org/@rc-component/trigger/-/trigger-1.13.6.tgz#1375303018d16ccdf88e31c6bcd131421e1fa3e7"
+  integrity sha512-13aF9SrR5XAd+tyV/zja0A2pbrA/zdTCXRBNIsoLp8OmhVOnqiwjP7XZYPulLsH0ioEfvtXR1yI0anJD0/J7PQ==
+  dependencies:
+    "@babel/runtime" "^7.18.3"
+    "@rc-component/portal" "^1.1.0"
+    classnames "^2.3.2"
+    rc-align "^4.0.0"
+    rc-motion "^2.0.0"
+    rc-resize-observer "^1.3.1"
+    rc-util "^5.33.0"
+
+"@react-dnd/asap@^4.0.0":
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.1.tgz#5291850a6b58ce6f2da25352a64f1b0674871aab"
+  integrity sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg==
+
+"@react-dnd/asap@^5.0.1":
+  version "5.0.2"
+  resolved "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz#1f81f124c1cd6f39511c11a881cfb0f715343488"
+  integrity sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==
+
+"@react-dnd/invariant@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-2.0.0.tgz#09d2e81cd39e0e767d7da62df9325860f24e517e"
+  integrity sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw==
+
+"@react-dnd/invariant@^4.0.1":
+  version "4.0.2"
+  resolved "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-4.0.2.tgz#b92edffca10a26466643349fac7cdfb8799769df"
+  integrity sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==
+
+"@react-dnd/shallowequal@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz#a3031eb54129f2c66b2753f8404266ec7bf67f0a"
+  integrity sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==
+
+"@react-dnd/shallowequal@^4.0.1":
+  version "4.0.2"
+  resolved "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz#d1b4befa423f692fa4abf1c79209702e7d8ae4b4"
+  integrity sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==
+
+"@react-leaflet/core@^1.1.1":
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/@react-leaflet/core/-/core-1.1.1.tgz#827fd05bb542cf874116176d8ef48d5b12163f81"
+  integrity sha512-7PGLWa9MZ5x/cWy8EH2VzI4T8q5WpuHbixzCDXqixP/WyqwIrg5NDUPgYuFnB4IEIZF+6nA265mYzswFo/h1Pw==
+
+"@simonwep/pickr@^1.5.1":
+  version "1.8.2"
+  resolved "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.8.2.tgz#96dc86675940d7cad63d69c22083dd1cbb9797cb"
+  integrity sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==
+  dependencies:
+    core-js "^3.15.1"
+    nanopop "^2.1.0"
+
+"@sinclair/typebox@^0.25.16":
+  version "0.25.24"
+  resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718"
+  integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==
+
+"@sinclair/typebox@^0.27.8":
+  version "0.27.8"
+  resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
+  integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
+
+"@sindresorhus/is@^0.7.0":
+  version "0.7.0"
+  resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
+  integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==
+
+"@sinonjs/commons@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72"
+  integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==
+  dependencies:
+    type-detect "4.0.8"
+
+"@sinonjs/fake-timers@^10.0.2":
+  version "10.3.0"
+  resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66"
+  integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==
+  dependencies:
+    "@sinonjs/commons" "^3.0.0"
+
+"@socket.io/component-emitter@~3.1.0":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553"
+  integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==
+
+"@sphinxxxx/color-conversion@^2.2.2":
+  version "2.2.2"
+  resolved "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz#03ecc29279e3c0c832f6185a5bfa3497858ac8ca"
+  integrity sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==
+
+"@svgr/babel-plugin-add-jsx-attribute@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22"
+  integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==
+
+"@svgr/babel-plugin-remove-jsx-attribute@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186"
+  integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==
+
+"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44"
+  integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==
+
+"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27"
+  integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==
+
+"@svgr/babel-plugin-svg-dynamic-title@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0"
+  integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==
+
+"@svgr/babel-plugin-svg-em-dimensions@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501"
+  integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==
+
+"@svgr/babel-plugin-transform-react-native-svg@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754"
+  integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==
+
+"@svgr/babel-plugin-transform-svg-component@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e"
+  integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==
+
+"@svgr/babel-preset@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece"
+  integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==
+  dependencies:
+    "@svgr/babel-plugin-add-jsx-attribute" "8.0.0"
+    "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0"
+    "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0"
+    "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0"
+    "@svgr/babel-plugin-svg-dynamic-title" "8.0.0"
+    "@svgr/babel-plugin-svg-em-dimensions" "8.0.0"
+    "@svgr/babel-plugin-transform-react-native-svg" "8.1.0"
+    "@svgr/babel-plugin-transform-svg-component" "8.0.0"
+
+"@svgr/core@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88"
+  integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==
+  dependencies:
+    "@babel/core" "^7.21.3"
+    "@svgr/babel-preset" "8.1.0"
+    camelcase "^6.2.0"
+    cosmiconfig "^8.1.3"
+    snake-case "^3.0.4"
+
+"@svgr/hast-util-to-babel-ast@8.0.0":
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4"
+  integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==
+  dependencies:
+    "@babel/types" "^7.21.3"
+    entities "^4.4.0"
+
+"@svgr/plugin-jsx@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928"
+  integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==
+  dependencies:
+    "@babel/core" "^7.21.3"
+    "@svgr/babel-preset" "8.1.0"
+    "@svgr/hast-util-to-babel-ast" "8.0.0"
+    svg-parser "^2.0.4"
+
+"@svgr/plugin-svgo@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00"
+  integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==
+  dependencies:
+    cosmiconfig "^8.1.3"
+    deepmerge "^4.3.1"
+    svgo "^3.0.2"
+
+"@svgr/webpack@^8.1.0":
+  version "8.1.0"
+  resolved "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2"
+  integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==
+  dependencies:
+    "@babel/core" "^7.21.3"
+    "@babel/plugin-transform-react-constant-elements" "^7.21.3"
+    "@babel/preset-env" "^7.20.2"
+    "@babel/preset-react" "^7.18.6"
+    "@babel/preset-typescript" "^7.21.0"
+    "@svgr/core" "8.1.0"
+    "@svgr/plugin-jsx" "8.1.0"
+    "@svgr/plugin-svgo" "8.1.0"
+
+"@szhsin/react-menu@^2.2.0":
+  version "2.3.4"
+  resolved "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-2.3.4.tgz#304b9bb1692a2a487d7738b608a7cdfd82ef18ec"
+  integrity sha512-RYgrAxAeEjqE62G2r3LFO89uWulJcTZReo5DtUnSkBbGx1aXrl8I7v1p/YUdJSYbimEsRB0qMHiQpQGQmOwDKw==
+  dependencies:
+    prop-types "^15.7.2"
+    react-transition-state "^1.1.3"
+
+"@testing-library/dom@^8.0.0":
+  version "8.20.1"
+  resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f"
+  integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==
+  dependencies:
+    "@babel/code-frame" "^7.10.4"
+    "@babel/runtime" "^7.12.5"
+    "@types/aria-query" "^5.0.1"
+    aria-query "5.1.3"
+    chalk "^4.1.0"
+    dom-accessibility-api "^0.5.9"
+    lz-string "^1.5.0"
+    pretty-format "^27.0.2"
+
+"@testing-library/jest-dom@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.2.tgz#3e7422904349223cb1e04968adada63f65f40d5b"
+  integrity sha512-NP9jl1Q2qDDtx+cqogowtQtmgD2OVs37iMSIsTv5eN5ETRkf26Kj6ugVwA93/gZzzFWQAsgkKkcftDe91BJCkQ==
+  dependencies:
+    "@adobe/css-tools" "^4.3.0"
+    "@babel/runtime" "^7.9.2"
+    aria-query "^5.0.0"
+    chalk "^3.0.0"
+    css.escape "^1.5.1"
+    dom-accessibility-api "^0.5.6"
+    lodash "^4.17.15"
+    redent "^3.0.0"
+
+"@testing-library/react@12":
+  version "12.1.5"
+  resolved "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b"
+  integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    "@testing-library/dom" "^8.0.0"
+    "@types/react-dom" "<18.0.0"
+
+"@testing-library/user-event@^14.4.3":
+  version "14.4.3"
+  resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591"
+  integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==
+
+"@tokenizer/token@^0.3.0":
+  version "0.3.0"
+  resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276"
+  integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==
+
+"@tootallnate/once@2":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+  integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
+"@trysound/sax@0.2.0":
+  version "0.2.0"
+  resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
+  integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
+
+"@types/aria-query@^5.0.1":
+  version "5.0.1"
+  resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc"
+  integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==
+
+"@types/babel__core@^7.1.14":
+  version "7.20.1"
+  resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b"
+  integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==
+  dependencies:
+    "@babel/parser" "^7.20.7"
+    "@babel/types" "^7.20.7"
+    "@types/babel__generator" "*"
+    "@types/babel__template" "*"
+    "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+  version "7.6.4"
+  resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7"
+  integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==
+  dependencies:
+    "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+  version "7.4.1"
+  resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969"
+  integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==
+  dependencies:
+    "@babel/parser" "^7.1.0"
+    "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
+  version "7.20.1"
+  resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf"
+  integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==
+  dependencies:
+    "@babel/types" "^7.20.7"
+
+"@types/classnames@^2.2.6":
+  version "2.3.1"
+  resolved "https://registry.npmjs.org/@types/classnames/-/classnames-2.3.1.tgz#3c2467aa0f1a93f1f021e3b9bcf938bd5dfdc0dd"
+  integrity sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==
+  dependencies:
+    classnames "*"
+
+"@types/eslint-scope@^3.7.3":
+  version "3.7.4"
+  resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
+  integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==
+  dependencies:
+    "@types/eslint" "*"
+    "@types/estree" "*"
+
+"@types/eslint@*":
+  version "8.40.2"
+  resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz#2833bc112d809677864a4b0e7d1de4f04d7dac2d"
+  integrity sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==
+  dependencies:
+    "@types/estree" "*"
+    "@types/json-schema" "*"
+
+"@types/estree@*", "@types/estree@^1.0.0":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
+  integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
+
+"@types/graceful-fs@^4.1.3":
+  version "4.1.6"
+  resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae"
+  integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==
+  dependencies:
+    "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
+  version "2.0.4"
+  resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
+  integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
+
+"@types/istanbul-lib-report@*":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+  integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+  dependencies:
+    "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.0":
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
+  integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
+  dependencies:
+    "@types/istanbul-lib-report" "*"
+
+"@types/jest@^29.5.4":
+  version "29.5.4"
+  resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz#9d0a16edaa009a71e6a71a999acd582514dab566"
+  integrity sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==
+  dependencies:
+    expect "^29.0.0"
+    pretty-format "^29.0.0"
+
+"@types/jsdom@^20.0.0":
+  version "20.0.1"
+  resolved "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808"
+  integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==
+  dependencies:
+    "@types/node" "*"
+    "@types/tough-cookie" "*"
+    parse5 "^7.0.0"
+
+"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
+  version "7.0.12"
+  resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb"
+  integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==
+
+"@types/keyv@^3.1.1":
+  version "3.1.4"
+  resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
+  integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
+  dependencies:
+    "@types/node" "*"
+
+"@types/minimist@^1.2.2":
+  version "1.2.2"
+  resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
+  integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
+
+"@types/node@*":
+  version "20.3.1"
+  resolved "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe"
+  integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==
+
+"@types/normalize-package-data@^2.4.0":
+  version "2.4.1"
+  resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
+  integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
+
+"@types/parse-json@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+  integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@types/prop-types@*":
+  version "15.7.5"
+  resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
+  integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
+
+"@types/react-dom@<18.0.0", "@types/react-dom@^17.0.11":
+  version "17.0.20"
+  resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.20.tgz#e0c8901469d732b36d8473b40b679ad899da1b53"
+  integrity sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==
+  dependencies:
+    "@types/react" "^17"
+
+"@types/react-transition-group@^4.2.0", "@types/react-transition-group@^4.4.0":
+  version "4.4.6"
+  resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e"
+  integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==
+  dependencies:
+    "@types/react" "*"
+
+"@types/react@*":
+  version "18.2.13"
+  resolved "https://registry.npmjs.org/@types/react/-/react-18.2.13.tgz#a98c09bde8b18f80021935b11d2d29ef5f4dcb2f"
+  integrity sha512-vJ+zElvi/Zn9cVXB5slX2xL8PZodPCwPRDpittQdw43JR2AJ5k3vKdgJJyneV/cYgIbLQUwXa9JVDvUZXGba+Q==
+  dependencies:
+    "@types/prop-types" "*"
+    "@types/scheduler" "*"
+    csstype "^3.0.2"
+
+"@types/react@^16.7.18":
+  version "16.14.43"
+  resolved "https://registry.npmjs.org/@types/react/-/react-16.14.43.tgz#bc6e7a0e99826809591d38ddf1193955de32c446"
+  integrity sha512-7zdjv7jvoLLQg1tTvpQsm+hyNUMT2mPlNV1+d0I8fbGhkJl82spopMyBlu4wb1dviZAxpGdk5eHu/muacknnfw==
+  dependencies:
+    "@types/prop-types" "*"
+    "@types/scheduler" "*"
+    csstype "^3.0.2"
+
+"@types/react@^17":
+  version "17.0.62"
+  resolved "https://registry.npmjs.org/@types/react/-/react-17.0.62.tgz#2efe8ddf8533500ec44b1334dd1a97caa2f860e3"
+  integrity sha512-eANCyz9DG8p/Vdhr0ZKST8JV12PhH2ACCDYlFw6DIO+D+ca+uP4jtEDEpVqXZrh/uZdXQGwk7whJa3ah5DtyLw==
+  dependencies:
+    "@types/prop-types" "*"
+    "@types/scheduler" "*"
+    csstype "^3.0.2"
+
+"@types/responselike@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
+  integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
+  dependencies:
+    "@types/node" "*"
+
+"@types/scheduler@*":
+  version "0.16.3"
+  resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5"
+  integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==
+
+"@types/semver@^7.3.12":
+  version "7.5.0"
+  resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a"
+  integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==
+
+"@types/stack-utils@^2.0.0":
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
+  integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
+
+"@types/styled-jsx@^2.2.8":
+  version "2.2.9"
+  resolved "https://registry.npmjs.org/@types/styled-jsx/-/styled-jsx-2.2.9.tgz#e50b3f868c055bcbf9bc353eca6c10fdad32a53f"
+  integrity sha512-W/iTlIkGEyTBGTEvZCey8EgQlQ5l0DwMqi3iOXlLs2kyBwYTXHKEiU6IZ5EwoRwngL8/dGYuzezSup89ttVHLw==
+  dependencies:
+    "@types/react" "*"
+
+"@types/tough-cookie@*":
+  version "4.0.2"
+  resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397"
+  integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==
+
+"@types/yargs-parser@*":
+  version "21.0.0"
+  resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
+  integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==
+
+"@types/yargs@^17.0.8":
+  version "17.0.24"
+  resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902"
+  integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==
+  dependencies:
+    "@types/yargs-parser" "*"
+
+"@typescript-eslint/eslint-plugin@^5.59.9":
+  version "5.60.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz#2f4bea6a3718bed2ba52905358d0f45cd3620d31"
+  integrity sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==
+  dependencies:
+    "@eslint-community/regexpp" "^4.4.0"
+    "@typescript-eslint/scope-manager" "5.60.0"
+    "@typescript-eslint/type-utils" "5.60.0"
+    "@typescript-eslint/utils" "5.60.0"
+    debug "^4.3.4"
+    grapheme-splitter "^1.0.4"
+    ignore "^5.2.0"
+    natural-compare-lite "^1.4.0"
+    semver "^7.3.7"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/parser@^5.57.0":
+  version "5.60.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz#08f4daf5fc6548784513524f4f2f359cebb4068a"
+  integrity sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==
+  dependencies:
+    "@typescript-eslint/scope-manager" "5.60.0"
+    "@typescript-eslint/types" "5.60.0"
+    "@typescript-eslint/typescript-estree" "5.60.0"
+    debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@5.60.0":
+  version "5.60.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz#ae511967b4bd84f1d5e179bb2c82857334941c1c"
+  integrity sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==
+  dependencies:
+    "@typescript-eslint/types" "5.60.0"
+    "@typescript-eslint/visitor-keys" "5.60.0"
+
+"@typescript-eslint/scope-manager@5.62.0":
+  version "5.62.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
+  integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==
+  dependencies:
+    "@typescript-eslint/types" "5.62.0"
+    "@typescript-eslint/visitor-keys" "5.62.0"
+
+"@typescript-eslint/type-utils@5.60.0":
+  version "5.60.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz#69b09087eb12d7513d5b07747e7d47f5533aa228"
+  integrity sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==
+  dependencies:
+    "@typescript-eslint/typescript-estree" "5.60.0"
+    "@typescript-eslint/utils" "5.60.0"
+    debug "^4.3.4"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/types@5.60.0":
+  version "5.60.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz#3179962b28b4790de70e2344465ec97582ce2558"
+  integrity sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==
+
+"@typescript-eslint/types@5.62.0":
+  version "5.62.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
+  integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
+
+"@typescript-eslint/typescript-estree@5.60.0":
+  version "5.60.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz#4ddf1a81d32a850de66642d9b3ad1e3254fb1600"
+  integrity sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==
+  dependencies:
+    "@typescript-eslint/types" "5.60.0"
+    "@typescript-eslint/visitor-keys" "5.60.0"
+    debug "^4.3.4"
+    globby "^11.1.0"
+    is-glob "^4.0.3"
+    semver "^7.3.7"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/typescript-estree@5.62.0":
+  version "5.62.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
+  integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==
+  dependencies:
+    "@typescript-eslint/types" "5.62.0"
+    "@typescript-eslint/visitor-keys" "5.62.0"
+    debug "^4.3.4"
+    globby "^11.1.0"
+    is-glob "^4.0.3"
+    semver "^7.3.7"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/utils@5.60.0":
+  version "5.60.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz#4667c5aece82f9d4f24a667602f0f300864b554c"
+  integrity sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==
+  dependencies:
+    "@eslint-community/eslint-utils" "^4.2.0"
+    "@types/json-schema" "^7.0.9"
+    "@types/semver" "^7.3.12"
+    "@typescript-eslint/scope-manager" "5.60.0"
+    "@typescript-eslint/types" "5.60.0"
+    "@typescript-eslint/typescript-estree" "5.60.0"
+    eslint-scope "^5.1.1"
+    semver "^7.3.7"
+
+"@typescript-eslint/utils@^5.10.0":
+  version "5.62.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86"
+  integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==
+  dependencies:
+    "@eslint-community/eslint-utils" "^4.2.0"
+    "@types/json-schema" "^7.0.9"
+    "@types/semver" "^7.3.12"
+    "@typescript-eslint/scope-manager" "5.62.0"
+    "@typescript-eslint/types" "5.62.0"
+    "@typescript-eslint/typescript-estree" "5.62.0"
+    eslint-scope "^5.1.1"
+    semver "^7.3.7"
+
+"@typescript-eslint/visitor-keys@5.60.0":
+  version "5.60.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz#b48b29da3f5f31dd1656281727004589d2722a66"
+  integrity sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==
+  dependencies:
+    "@typescript-eslint/types" "5.60.0"
+    eslint-visitor-keys "^3.3.0"
+
+"@typescript-eslint/visitor-keys@5.62.0":
+  version "5.62.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e"
+  integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==
+  dependencies:
+    "@typescript-eslint/types" "5.62.0"
+    eslint-visitor-keys "^3.3.0"
+
+"@vusion/webfonts-generator@^0.8.0":
+  version "0.8.0"
+  resolved "https://registry.npmjs.org/@vusion/webfonts-generator/-/webfonts-generator-0.8.0.tgz#3ff41b9ec4b83decd87650637ee050741741e794"
+  integrity sha512-1q17CF6umBEjlAtO37TzRw3aOCCAyFX+T4HPG70BmM6qx8s6H4/LQOa8eHFZq/oiMuMyd0FehKgUt/pqYlIMWA==
+  dependencies:
+    handlebars "^4.0.11"
+    mkdirp "^1.0.4"
+    q "^1.1.2"
+    svg2ttf "^6.0.3"
+    svgicons2svgfont "^10.0.4"
+    ttf2eot "^3.0.0"
+    ttf2woff "^3.0.0"
+    ttf2woff2 "^4.0.4"
+    underscore "^1.9.1"
+    url-join "^4.0.0"
+
+"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24"
+  integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==
+  dependencies:
+    "@webassemblyjs/helper-numbers" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+
+"@webassemblyjs/floating-point-hex-parser@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
+  integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
+
+"@webassemblyjs/helper-api-error@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
+  integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
+
+"@webassemblyjs/helper-buffer@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093"
+  integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==
+
+"@webassemblyjs/helper-numbers@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
+  integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
+  dependencies:
+    "@webassemblyjs/floating-point-hex-parser" "1.11.6"
+    "@webassemblyjs/helper-api-error" "1.11.6"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
+  integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
+
+"@webassemblyjs/helper-wasm-section@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577"
+  integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+
+"@webassemblyjs/ieee754@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
+  integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
+  integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
+  integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
+
+"@webassemblyjs/wasm-edit@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab"
+  integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/helper-wasm-section" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+    "@webassemblyjs/wasm-opt" "1.11.6"
+    "@webassemblyjs/wasm-parser" "1.11.6"
+    "@webassemblyjs/wast-printer" "1.11.6"
+
+"@webassemblyjs/wasm-gen@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268"
+  integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/ieee754" "1.11.6"
+    "@webassemblyjs/leb128" "1.11.6"
+    "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wasm-opt@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2"
+  integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-buffer" "1.11.6"
+    "@webassemblyjs/wasm-gen" "1.11.6"
+    "@webassemblyjs/wasm-parser" "1.11.6"
+
+"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1"
+  integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@webassemblyjs/helper-api-error" "1.11.6"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+    "@webassemblyjs/ieee754" "1.11.6"
+    "@webassemblyjs/leb128" "1.11.6"
+    "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wast-printer@1.11.6":
+  version "1.11.6"
+  resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20"
+  integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.6"
+    "@xtuc/long" "4.2.2"
+
+"@webpack-cli/configtest@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5"
+  integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==
+
+"@webpack-cli/info@^1.5.0":
+  version "1.5.0"
+  resolved "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1"
+  integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==
+  dependencies:
+    envinfo "^7.7.3"
+
+"@webpack-cli/serve@^1.7.0":
+  version "1.7.0"
+  resolved "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1"
+  integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==
+
+"@xmldom/xmldom@^0.7.2":
+  version "0.7.11"
+  resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.11.tgz#adecc134521274711d071d5b0200907cc83b38ee"
+  integrity sha512-UDi3g6Jss/W5FnSzO9jCtQwEpfymt0M+sPPlmLhDH6h2TJ8j4ESE/LpmNPBij15J5NKkk4/cg/qoVMdWI3vnlQ==
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+JSONStream@^1.0.3:
+  version "1.3.5"
+  resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
+  integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
+  dependencies:
+    jsonparse "^1.2.0"
+    through ">=2.2.7 <3"
+
+abab@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
+  integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
+
+abbrev@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+ace-builds@^1.20.0:
+  version "1.23.0"
+  resolved "https://registry.npmjs.org/ace-builds/-/ace-builds-1.23.0.tgz#971bba11ba99cefaa38cf9443d7e9a68ddb3a400"
+  integrity sha512-PKRuQaQkjIhg1zeqJPW1QFtJO2fx13Nlv7N/VLhQS/kIQ/2aGAgWvYVcE9X64gbSiLzPdY3jcxv5wJJpLj1gLw==
+
+acorn-globals@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3"
+  integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==
+  dependencies:
+    acorn "^8.1.0"
+    acorn-walk "^8.0.2"
+
+acorn-import-assertions@^1.9.0:
+  version "1.9.0"
+  resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
+  integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
+
+acorn-jsx@^5.3.2:
+  version "5.3.2"
+  resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+  integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+"acorn-node@^1.2.0", "acorn-node@^1.3.0", "acorn-node@^1.5.2", "acorn-node@^1.8.2":
+  version "1.8.2"
+  resolved "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8"
+  integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==
+  dependencies:
+    acorn "^7.0.0"
+    acorn-walk "^7.0.0"
+    xtend "^4.0.2"
+
+acorn-walk@^7.0.0:
+  version "7.2.0"
+  resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+  integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
+"acorn-walk@^8.0.0", "acorn-walk@^8.0.2":
+  version "8.2.0"
+  resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
+  integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
+
+acorn@^7.0.0:
+  version "7.4.1"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+"acorn@^8.0.4", "acorn@^8.7.1", "acorn@^8.8.0", "acorn@^8.8.2":
+  version "8.9.0"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59"
+  integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
+
+"acorn@^8.1.0", "acorn@^8.8.1":
+  version "8.10.0"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
+  integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
+
+"agent-base@6", "agent-base@^6.0.2":
+  version "6.0.2"
+  resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug 4
+
+agentkeepalive@^4.2.1:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255"
+  integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==
+  dependencies:
+    debug "^4.1.0"
+    depd "^2.0.0"
+    humanize-ms "^1.2.1"
+
+aggregate-error@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+  dependencies:
+    clean-stack "^2.0.0"
+    indent-string "^4.0.0"
+
+ajv-formats@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
+  integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
+  dependencies:
+    ajv "^8.0.0"
+
+ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv-keywords@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
+  integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
+  dependencies:
+    fast-deep-equal "^3.1.3"
+
+"ajv@^6.10.0", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.12.6":
+  version "6.12.6"
+  resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+"ajv@^8.0.0", "ajv@^8.8.2", "ajv@^8.9.0":
+  version "8.12.0"
+  resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
+  integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    json-schema-traverse "^1.0.0"
+    require-from-string "^2.0.2"
+    uri-js "^4.2.2"
+
+ansi-escapes@^4.2.1:
+  version "4.3.2"
+  resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+  integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+  dependencies:
+    type-fest "^0.21.3"
+
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+  integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+ansi-styles@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+"ansi-styles@^4.0.0", "ansi-styles@^4.1.0":
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+ansi-styles@^5.0.0:
+  version "5.2.0"
+  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
+  integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
+ansi-styles@^6.1.0:
+  version "6.2.1"
+  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+  integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+anti-trojan-source@^1.4.0:
+  version "1.4.1"
+  resolved "https://registry.npmjs.org/anti-trojan-source/-/anti-trojan-source-1.4.1.tgz#54ce3b726cbf5240e10c6decf236cc624efd3b33"
+  integrity sha512-DruSp30RgiEW36/n5+e2RtJf2W57jBS01YHvH8SL1vSFIpIeArfreTCxelHPMEhGLpk/BZUeA3uWt5AeTCHq9g==
+  dependencies:
+    globby "^12.0.2"
+    meow "^10.1.1"
+
+"anymatch@^3.0.3", "anymatch@~3.1.2":
+  version "3.1.3"
+  resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+"aproba@^1.0.3 || ^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
+  integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
+
+arch@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
+  integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
+
+archive-type@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70"
+  integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==
+  dependencies:
+    file-type "^4.2.0"
+
+are-we-there-yet@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
+  integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
+  dependencies:
+    delegates "^1.0.0"
+    readable-stream "^3.6.0"
+
+argparse@^1.0.7:
+  version "1.0.10"
+  resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  dependencies:
+    sprintf-js "~1.0.2"
+
+argparse@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+aria-query@5.1.3:
+  version "5.1.3"
+  resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e"
+  integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==
+  dependencies:
+    deep-equal "^2.0.5"
+
+aria-query@^5.0.0:
+  version "5.3.0"
+  resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
+  integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
+  dependencies:
+    dequal "^2.0.3"
+
+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#fabe8bc193fea865f317fe7807085ee0dee5aead"
+  integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
+  dependencies:
+    call-bind "^1.0.2"
+    is-array-buffer "^3.0.1"
+
+"array-includes@^3.1.5", "array-includes@^3.1.6":
+  version "3.1.6"
+  resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
+  integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+    get-intrinsic "^1.1.3"
+    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#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-union@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975"
+  integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==
+
+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#1aae7903c2100433cb8261cd4ed310aab5c4a183"
+  integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+    es-shim-unscopables "^1.0.0"
+
+array.prototype.tosorted@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532"
+  integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+    es-shim-unscopables "^1.0.0"
+    get-intrinsic "^1.1.3"
+
+arraybuffer.prototype.slice@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb"
+  integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==
+  dependencies:
+    array-buffer-byte-length "^1.0.0"
+    call-bind "^1.0.2"
+    define-properties "^1.2.0"
+    get-intrinsic "^1.2.1"
+    is-array-buffer "^3.0.2"
+    is-shared-array-buffer "^1.0.2"
+
+arrify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+  integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==
+
+asn1.js@^5.2.0:
+  version "5.4.1"
+  resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
+  integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
+  dependencies:
+    bn.js "^4.0.0"
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+    safer-buffer "^2.1.0"
+
+aspen-core@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/aspen-core/-/aspen-core-1.0.5.tgz#7745def811f761bca49d475d9addc8a5dbb1c71c"
+  integrity sha512-iqWORNQeQTn6XHStl1uCQ4t1yMPMw/nSWygfXVAEflf8vAWs4vR2M2TqDEZGvyoTkrxIPONv+wyQQFDnN5QCkg==
+  dependencies:
+    notificar "^1.0.1"
+    p-series "^1.1.0"
+    path-fx "^2.1.1"
+
+aspen-decorations@^1.0.2:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/aspen-decorations/-/aspen-decorations-1.1.1.tgz#7d0ca740efab1aa4fd91a1f3db81ac29186607a3"
+  integrity sha512-Ej2tv0Gz3bnhkNCyzzjDeG2V5vd49T30ca0SKywHuLA5RKrZ1NutEyZnUYku4WmUV1/TdpHRiSJ759nbZK4xtQ==
+  dependencies:
+    notificar "^1.0.1"
+
+aspen-tree-model@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/aspen-tree-model/-/aspen-tree-model-1.0.5.tgz#23d5ce7a8fb7ab905d37b17b930cc6f92e4d366e"
+  integrity sha512-kcdL22iAT1sp1HTQ3wJnQqSeA2ANSQiOZJ86RMk9tKBZjb5EFSs2khEFQ6iYE7bvHcWTarGzD7X8XKfxe/zxXg==
+  dependencies:
+    aspen-core "^1.0.4"
+    notificar "^1.0.1"
+
+assert@^1.4.0:
+  version "1.5.0"
+  resolved "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+  integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+  dependencies:
+    object-assign "^4.1.1"
+    util "0.10.3"
+
+async@^2.1.4:
+  version "2.6.4"
+  resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
+  integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
+  dependencies:
+    lodash "^4.17.14"
+
+async@^3.2.3:
+  version "3.2.4"
+  resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
+  integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+
+asynciterator.prototype@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62"
+  integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==
+  dependencies:
+    has-symbols "^1.0.3"
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+attr-accept@^2.2.2:
+  version "2.2.2"
+  resolved "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b"
+  integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==
+
+autoprefixer@^10.2.4:
+  version "10.4.14"
+  resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d"
+  integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==
+  dependencies:
+    browserslist "^4.21.5"
+    caniuse-lite "^1.0.30001464"
+    fraction.js "^4.2.0"
+    normalize-range "^0.1.2"
+    picocolors "^1.0.0"
+    postcss-value-parser "^4.2.0"
+
+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#92f95616501069d07d10edb2fc37d3e1c65123b7"
+  integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+
+axios-mock-adapter@^1.17.0:
+  version "1.22.0"
+  resolved "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.22.0.tgz#0f3e6be0fc9b55baab06f2d49c0b71157e7c053d"
+  integrity sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw==
+  dependencies:
+    fast-deep-equal "^3.1.3"
+    is-buffer "^2.0.5"
+
+axios@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f"
+  integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==
+  dependencies:
+    follow-redirects "^1.15.0"
+    form-data "^4.0.0"
+    proxy-from-env "^1.1.0"
+
+babel-jest@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz#98dbc45d1c93319c82a8ab4a478b670655dd2585"
+  integrity sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==
+  dependencies:
+    "@jest/transform" "^29.6.4"
+    "@types/babel__core" "^7.1.14"
+    babel-plugin-istanbul "^6.1.1"
+    babel-preset-jest "^29.6.3"
+    chalk "^4.0.0"
+    graceful-fs "^4.2.9"
+    slash "^3.0.0"
+
+babel-loader@^8.1.0:
+  version "8.3.0"
+  resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8"
+  integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==
+  dependencies:
+    find-cache-dir "^3.3.1"
+    loader-utils "^2.0.0"
+    make-dir "^3.1.0"
+    schema-utils "^2.6.5"
+
+babel-plugin-emotion@^10.0.27:
+  version "10.2.2"
+  resolved "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz#a1fe3503cff80abfd0bdda14abd2e8e57a79d17d"
+  integrity sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@emotion/hash" "0.8.0"
+    "@emotion/memoize" "0.7.4"
+    "@emotion/serialize" "^0.11.16"
+    babel-plugin-macros "^2.0.0"
+    babel-plugin-syntax-jsx "^6.18.0"
+    convert-source-map "^1.5.0"
+    escape-string-regexp "^1.0.5"
+    find-root "^1.1.0"
+    source-map "^0.5.7"
+
+babel-plugin-istanbul@^6.1.1:
+  version "6.1.1"
+  resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
+  integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@istanbuljs/load-nyc-config" "^1.0.0"
+    "@istanbuljs/schema" "^0.1.2"
+    istanbul-lib-instrument "^5.0.4"
+    test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626"
+  integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==
+  dependencies:
+    "@babel/template" "^7.3.3"
+    "@babel/types" "^7.3.3"
+    "@types/babel__core" "^7.1.14"
+    "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-macros@^2.0.0:
+  version "2.8.0"
+  resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
+  integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
+  dependencies:
+    "@babel/runtime" "^7.7.2"
+    cosmiconfig "^6.0.0"
+    resolve "^1.12.0"
+
+babel-plugin-macros@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
+  integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    cosmiconfig "^7.0.0"
+    resolve "^1.19.0"
+
+babel-plugin-polyfill-corejs2@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd"
+  integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==
+  dependencies:
+    "@babel/compat-data" "^7.17.7"
+    "@babel/helper-define-polyfill-provider" "^0.4.0"
+    semver "^6.1.1"
+
+babel-plugin-polyfill-corejs2@^0.4.5:
+  version "0.4.5"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c"
+  integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==
+  dependencies:
+    "@babel/compat-data" "^7.22.6"
+    "@babel/helper-define-polyfill-provider" "^0.4.2"
+    semver "^6.3.1"
+
+babel-plugin-polyfill-corejs2@^0.4.6:
+  version "0.4.6"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313"
+  integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==
+  dependencies:
+    "@babel/compat-data" "^7.22.6"
+    "@babel/helper-define-polyfill-provider" "^0.4.3"
+    semver "^6.3.1"
+
+babel-plugin-polyfill-corejs3@^0.8.1:
+  version "0.8.1"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a"
+  integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.4.0"
+    core-js-compat "^3.30.1"
+
+babel-plugin-polyfill-corejs3@^0.8.3:
+  version "0.8.3"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52"
+  integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.4.2"
+    core-js-compat "^3.31.0"
+
+babel-plugin-polyfill-corejs3@^0.8.5:
+  version "0.8.6"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf"
+  integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.4.3"
+    core-js-compat "^3.33.1"
+
+babel-plugin-polyfill-regenerator@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380"
+  integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.4.0"
+
+babel-plugin-polyfill-regenerator@^0.5.2:
+  version "0.5.2"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326"
+  integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.4.2"
+
+babel-plugin-polyfill-regenerator@^0.5.3:
+  version "0.5.3"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5"
+  integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.4.3"
+
+"babel-plugin-styled-components@>= 1.12.0":
+  version "2.1.3"
+  resolved "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.3.tgz#f5616bee99efca6685e500fe45db87f26cb42ba7"
+  integrity sha512-jBioLwBVHpOMU4NsueH/ADcHrjS0Y/WTpt2eGVmmuSFNEv2DF3XhcMncuZlbbjxQ4vzxg+yEr6E6TNjrIQbsJQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.18.6"
+    "@babel/helper-module-imports" "^7.21.4"
+    babel-plugin-syntax-jsx "^6.18.0"
+    lodash "^4.17.21"
+    picomatch "^2.3.1"
+
+babel-plugin-syntax-jsx@^6.18.0:
+  version "6.18.0"
+  resolved "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+  integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==
+
+babel-preset-current-node-syntax@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
+  integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
+  dependencies:
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-bigint" "^7.8.3"
+    "@babel/plugin-syntax-class-properties" "^7.8.3"
+    "@babel/plugin-syntax-import-meta" "^7.8.3"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-top-level-await" "^7.8.3"
+
+babel-preset-jest@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c"
+  integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==
+  dependencies:
+    babel-plugin-jest-hoist "^29.6.3"
+    babel-preset-current-node-syntax "^1.0.0"
+
+babelify@~10.0.0:
+  version "10.0.0"
+  resolved "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz#fe73b1a22583f06680d8d072e25a1e0d1d1d7fb5"
+  integrity sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+"base64-js@^1.0.2", "base64-js@^1.3.1":
+  version "1.5.1"
+  resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+big.js@^5.2.2:
+  version "5.2.2"
+  resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+"bignumber.js@^9.0.0", "bignumber.js@^9.0.1":
+  version "9.1.1"
+  resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6"
+  integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==
+
+bin-build@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz#c5780a25a8a9f966d8244217e6c1f5082a143861"
+  integrity sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==
+  dependencies:
+    decompress "^4.0.0"
+    download "^6.2.2"
+    execa "^0.7.0"
+    p-map-series "^1.0.0"
+    tempfile "^2.0.0"
+
+bin-check@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz#fc495970bdc88bb1d5a35fc17e65c4a149fc4a49"
+  integrity sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==
+  dependencies:
+    execa "^0.7.0"
+    executable "^4.1.0"
+
+bin-version-check@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz#7d819c62496991f80d893e6e02a3032361608f71"
+  integrity sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==
+  dependencies:
+    bin-version "^3.0.0"
+    semver "^5.6.0"
+    semver-truncate "^1.1.2"
+
+bin-version@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz#5b09eb280752b1bd28f0c9db3f96f2f43b6c0839"
+  integrity sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==
+  dependencies:
+    execa "^1.0.0"
+    find-versions "^3.0.0"
+
+bin-wrapper@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz#99348f2cf85031e3ef7efce7e5300aeaae960605"
+  integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==
+  dependencies:
+    bin-check "^4.1.0"
+    bin-version-check "^4.0.0"
+    download "^7.1.0"
+    import-lazy "^3.1.0"
+    os-filter-obj "^2.0.0"
+    pify "^4.0.1"
+
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bindings@^1.5.0:
+  version "1.5.0"
+  resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+  integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+  dependencies:
+    file-uri-to-path "1.0.0"
+
+bl@^1.0.0:
+  version "1.2.3"
+  resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7"
+  integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==
+  dependencies:
+    readable-stream "^2.3.5"
+    safe-buffer "^5.1.1"
+
+"bn.js@^4.0.0", "bn.js@^4.1.0", "bn.js@^4.11.9":
+  version "4.12.0"
+  resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+  integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+
+"bn.js@^5.0.0", "bn.js@^5.2.1":
+  version "5.2.1"
+  resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
+  integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
+
+boolbase@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+bowser@^2.11.0:
+  version "2.11.0"
+  resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f"
+  integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    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#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+brace@^0.11.1:
+  version "0.11.1"
+  resolved "https://registry.npmjs.org/brace/-/brace-0.11.1.tgz#4896fcc9d544eef45f4bb7660db320d3b379fe58"
+  integrity sha512-Fc8Ne62jJlKHiG/ajlonC4Sd66Pq68fFwK4ihJGNZpGqboc324SQk+lRvMzpPRuJOmfrJefdG8/7JdWX4bzJ2Q==
+
+"braces@^3.0.2", "braces@~3.0.2":
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+"brorand@^1.0.1", "brorand@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+  integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
+
+browser-pack@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774"
+  integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==
+  dependencies:
+    JSONStream "^1.0.3"
+    combine-source-map "~0.8.0"
+    defined "^1.0.0"
+    safe-buffer "^5.1.1"
+    through2 "^2.0.0"
+    umd "^3.0.0"
+
+browser-resolve@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b"
+  integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==
+  dependencies:
+    resolve "^1.17.0"
+
+browserfs@^1.4.3:
+  version "1.4.3"
+  resolved "https://registry.npmjs.org/browserfs/-/browserfs-1.4.3.tgz#92ffc6063967612daccdb8566d3fc03f521205fb"
+  integrity sha512-tz8HClVrzTJshcyIu8frE15cjqjcBIu15Bezxsvl/i+6f59iNCN3kznlWjz0FEb3DlnDx3gW5szxeT6D1x0s0w==
+  dependencies:
+    async "^2.1.4"
+    pako "^1.0.4"
+
+"browserify-aes@^1.0.0", "browserify-aes@^1.0.4":
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+  integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+  dependencies:
+    buffer-xor "^1.0.3"
+    cipher-base "^1.0.0"
+    create-hash "^1.1.0"
+    evp_bytestokey "^1.0.3"
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+  integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+  dependencies:
+    browserify-aes "^1.0.4"
+    browserify-des "^1.0.0"
+    evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+  integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+  dependencies:
+    cipher-base "^1.0.1"
+    des.js "^1.0.0"
+    inherits "^2.0.1"
+    safe-buffer "^5.1.2"
+
+"browserify-rsa@^4.0.0", "browserify-rsa@^4.1.0":
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
+  integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
+  dependencies:
+    bn.js "^5.0.0"
+    randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+  version "4.2.2"
+  resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e"
+  integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==
+  dependencies:
+    bn.js "^5.2.1"
+    browserify-rsa "^4.1.0"
+    create-hash "^1.2.0"
+    create-hmac "^1.1.7"
+    elliptic "^6.5.4"
+    inherits "^2.0.4"
+    parse-asn1 "^5.1.6"
+    readable-stream "^3.6.2"
+    safe-buffer "^5.2.1"
+
+browserify-zlib@~0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+  integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+  dependencies:
+    pako "~1.0.5"
+
+browserify@^17.0.0:
+  version "17.0.0"
+  resolved "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz#4c48fed6c02bfa2b51fd3b670fddb805723cdc22"
+  integrity sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==
+  dependencies:
+    JSONStream "^1.0.3"
+    assert "^1.4.0"
+    browser-pack "^6.0.1"
+    browser-resolve "^2.0.0"
+    browserify-zlib "~0.2.0"
+    buffer "~5.2.1"
+    cached-path-relative "^1.0.0"
+    concat-stream "^1.6.0"
+    console-browserify "^1.1.0"
+    constants-browserify "~1.0.0"
+    crypto-browserify "^3.0.0"
+    defined "^1.0.0"
+    deps-sort "^2.0.1"
+    domain-browser "^1.2.0"
+    duplexer2 "~0.1.2"
+    events "^3.0.0"
+    glob "^7.1.0"
+    has "^1.0.0"
+    htmlescape "^1.1.0"
+    https-browserify "^1.0.0"
+    inherits "~2.0.1"
+    insert-module-globals "^7.2.1"
+    labeled-stream-splicer "^2.0.0"
+    mkdirp-classic "^0.5.2"
+    module-deps "^6.2.3"
+    os-browserify "~0.3.0"
+    parents "^1.0.1"
+    path-browserify "^1.0.0"
+    process "~0.11.0"
+    punycode "^1.3.2"
+    querystring-es3 "~0.2.0"
+    read-only-stream "^2.0.0"
+    readable-stream "^2.0.2"
+    resolve "^1.1.4"
+    shasum-object "^1.0.0"
+    shell-quote "^1.6.1"
+    stream-browserify "^3.0.0"
+    stream-http "^3.0.0"
+    string_decoder "^1.1.1"
+    subarg "^1.0.0"
+    syntax-error "^1.1.1"
+    through2 "^2.0.0"
+    timers-browserify "^1.0.1"
+    tty-browserify "0.0.1"
+    url "~0.11.0"
+    util "~0.12.0"
+    vm-browserify "^1.0.0"
+    xtend "^4.0.0"
+
+"browserslist@^4.0.0", "browserslist@^4.14.5", "browserslist@^4.21.3", "browserslist@^4.21.4", "browserslist@^4.21.5":
+  version "4.21.9"
+  resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635"
+  integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
+  dependencies:
+    caniuse-lite "^1.0.30001503"
+    electron-to-chromium "^1.4.431"
+    node-releases "^2.0.12"
+    update-browserslist-db "^1.0.11"
+
+"browserslist@^4.21.10", "browserslist@^4.21.9":
+  version "4.21.10"
+  resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0"
+  integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==
+  dependencies:
+    caniuse-lite "^1.0.30001517"
+    electron-to-chromium "^1.4.477"
+    node-releases "^2.0.13"
+    update-browserslist-db "^1.0.11"
+
+browserslist@^4.22.1:
+  version "4.22.1"
+  resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619"
+  integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
+  dependencies:
+    caniuse-lite "^1.0.30001541"
+    electron-to-chromium "^1.4.535"
+    node-releases "^2.0.13"
+    update-browserslist-db "^1.0.13"
+
+bser@2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+  integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+  dependencies:
+    node-int64 "^0.4.0"
+
+buffer-alloc-unsafe@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
+  integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+
+buffer-alloc@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
+  integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+  dependencies:
+    buffer-alloc-unsafe "^1.1.0"
+    buffer-fill "^1.0.0"
+
+buffer-crc32@~0.2.3:
+  version "0.2.13"
+  resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+  integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+
+buffer-fill@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
+  integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer-xor@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+  integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==
+
+buffer@^5.2.1:
+  version "5.7.1"
+  resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+  integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+  dependencies:
+    base64-js "^1.3.1"
+    ieee754 "^1.1.13"
+
+buffer@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+  integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+  dependencies:
+    base64-js "^1.3.1"
+    ieee754 "^1.2.1"
+
+buffer@~5.2.1:
+  version "5.2.1"
+  resolved "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
+  integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==
+  dependencies:
+    base64-js "^1.0.2"
+    ieee754 "^1.1.4"
+
+bufferstreams@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/bufferstreams/-/bufferstreams-3.0.0.tgz#d2cb186cffeb527668341891e523c19539bc4a14"
+  integrity sha512-Qg0ggJUWJq90vtg4lDsGN9CDWvzBMQxhiEkSOD/sJfYt6BLect3eV1/S6K7SCSKJ34n60rf6U5eUPmQENVE4UA==
+  dependencies:
+    readable-stream "^3.4.0"
+
+builtin-status-codes@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+  integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==
+
+cacache@^17.0.0:
+  version "17.1.3"
+  resolved "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044"
+  integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==
+  dependencies:
+    "@npmcli/fs" "^3.1.0"
+    fs-minipass "^3.0.0"
+    glob "^10.2.2"
+    lru-cache "^7.7.1"
+    minipass "^5.0.0"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    p-map "^4.0.0"
+    ssri "^10.0.0"
+    tar "^6.1.11"
+    unique-filename "^3.0.0"
+
+cacheable-request@^2.1.1:
+  version "2.1.4"
+  resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d"
+  integrity sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==
+  dependencies:
+    clone-response "1.0.2"
+    get-stream "3.0.0"
+    http-cache-semantics "3.8.1"
+    keyv "3.0.0"
+    lowercase-keys "1.0.0"
+    normalize-url "2.0.1"
+    responselike "1.0.2"
+
+"cached-path-relative@^1.0.0", "cached-path-relative@^1.0.2":
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz#865576dfef39c0d6a7defde794d078f5308e3ef3"
+  integrity sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==
+
+"call-bind@^1.0.0", "call-bind@^1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+  dependencies:
+    function-bind "^1.1.1"
+    get-intrinsic "^1.0.2"
+
+callsites@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-keys@^7.0.0:
+  version "7.0.2"
+  resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz#d048d8c69448745bb0de6fc4c1c52a30dfbe7252"
+  integrity sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==
+  dependencies:
+    camelcase "^6.3.0"
+    map-obj "^4.1.0"
+    quick-lru "^5.1.1"
+    type-fest "^1.2.1"
+
+camelcase@^5.3.1:
+  version "5.3.1"
+  resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+"camelcase@^6.2.0", "camelcase@^6.3.0":
+  version "6.3.0"
+  resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+  integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+camelize@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3"
+  integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==
+
+caniuse-api@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+  integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-lite "^1.0.0"
+    lodash.memoize "^4.1.2"
+    lodash.uniq "^4.5.0"
+
+"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30001464", "caniuse-lite@^1.0.30001503":
+  version "1.0.30001506"
+  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001506.tgz#35bd814b310a487970c585430e9e80ee23faf14b"
+  integrity sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw==
+
+caniuse-lite@^1.0.30001517:
+  version "1.0.30001527"
+  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001527.tgz#813826554828245ccee776c850566dce12bdeaba"
+  integrity sha512-YkJi7RwPgWtXVSgK4lG9AHH57nSzvvOp9MesgXmw4Q7n0C3H04L0foHqfxcmSAm5AcWb8dW9AYj2tR7/5GnddQ==
+
+caniuse-lite@^1.0.30001541:
+  version "1.0.30001554"
+  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz#ba80d88dff9acbc0cd4b7535fc30e0191c5e2e2a"
+  integrity sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==
+
+"caw@^2.0.0", "caw@^2.0.1":
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95"
+  integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==
+  dependencies:
+    get-proxy "^2.0.0"
+    isurl "^1.0.0-alpha5"
+    tunnel-agent "^0.6.0"
+    url-to-options "^1.0.1"
+
+"chalk@^2.0.0", "chalk@^2.4.2":
+  version "2.4.2"
+  resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  dependencies:
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
+
+chalk@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+  integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+"chalk@^4.0.0", "chalk@^4.0.2", "chalk@^4.1.0":
+  version "4.1.2"
+  resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+char-regex@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+  integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+chart.js@^3.0.0:
+  version "3.9.1"
+  resolved "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz#3abf2c775169c4c71217a107163ac708515924b8"
+  integrity sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==
+
+chartjs-plugin-zoom@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.0.1.tgz#3db76f92a4741e46cb148cb966181c1b1a974abc"
+  integrity sha512-ogOmLu6e+Q7E1XWOCOz9YwybMslz9qNfGV2a+qjfmqJYpsw5ZMoRHZBUyW+NGhkpQ5PwwPA/+rikHpBZb7PZuA==
+  dependencies:
+    hammerjs "^2.0.8"
+
+"chokidar@>=3.0.0 <4.0.0":
+  version "3.5.3"
+  resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    fsevents "~2.3.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+
+chownr@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+  integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+chrome-trace-event@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+  integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
+ci-info@^3.2.0:
+  version "3.8.0"
+  resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91"
+  integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
+
+"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3":
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+  integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+  dependencies:
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+cjs-module-lexer@^1.0.0:
+  version "1.2.3"
+  resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107"
+  integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
+
+"classnames@*", "classnames@2.x", "classnames@^2.2.1", "classnames@^2.2.5", "classnames@^2.2.6", "classnames@^2.3.1", "classnames@^2.3.2":
+  version "2.3.2"
+  resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924"
+  integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
+
+clean-stack@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cliui@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
+  integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+  dependencies:
+    string-width "^4.2.0"
+    strip-ansi "^6.0.1"
+    wrap-ansi "^7.0.0"
+
+clone-deep@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+  integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+  dependencies:
+    is-plain-object "^2.0.4"
+    kind-of "^6.0.2"
+    shallow-clone "^3.0.0"
+
+clone-response@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
+  integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==
+  dependencies:
+    mimic-response "^1.0.0"
+
+closest@^0.0.1:
+  version "0.0.1"
+  resolved "https://registry.npmjs.org/closest/-/closest-0.0.1.tgz#26da6f80b3e0e17e71f80f12782819e9f653495c"
+  integrity sha512-HafRXTAiWp5nf6kxOy2EoIGSsJMn0zew9E5zp3Dy/8CXdp8GvVjZn1TSMEVdDxSP/acXZcWJWiIgF83Di7M1Ew==
+  dependencies:
+    matches-selector "0.0.1"
+
+"clsx@^1.0.2", "clsx@^1.0.4", "clsx@^1.1.0", "clsx@^1.1.1":
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
+  integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
+
+co@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+  integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
+
+codemirror@^5.59.2:
+  version "5.65.13"
+  resolved "https://registry.npmjs.org/codemirror/-/codemirror-5.65.13.tgz#c098a6f409db8b5a7c5722788bd9fa3bb2367f2e"
+  integrity sha512-SVWEzKXmbHmTQQWaz03Shrh4nybG0wXx2MEu3FO4ezbPW8IbnZEd5iGHGEffSUaitKYa3i+pHpBsSvw8sPHtzg==
+
+collect-v8-coverage@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9"
+  integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==
+
+color-convert@^1.9.0:
+  version "1.9.3"
+  resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  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#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  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#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  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#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-support@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
+  integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
+
+colord@^2.9.1:
+  version "2.9.3"
+  resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
+  integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==
+
+colorette@^2.0.14:
+  version "2.0.20"
+  resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
+  integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+
+"combine-source-map@^0.8.0", "combine-source-map@~0.8.0":
+  version "0.8.0"
+  resolved "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b"
+  integrity sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==
+  dependencies:
+    convert-source-map "~1.1.0"
+    inline-source-map "~0.6.0"
+    lodash.memoize "~3.0.3"
+    source-map "~0.5.3"
+
+combined-stream@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+"commander@^2.20.0", "commander@^2.8.1":
+  version "2.20.3"
+  resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+"commander@^7.0.0", "commander@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
+commander@^9.3.0:
+  version "9.5.0"
+  resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
+  integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
+
+commondir@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+  integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+"concat-stream@^1.6.0", "concat-stream@^1.6.1", "concat-stream@~1.6.0":
+  version "1.6.2"
+  resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+  dependencies:
+    buffer-from "^1.0.0"
+    inherits "^2.0.3"
+    readable-stream "^2.2.2"
+    typedarray "^0.0.6"
+
+config-chain@^1.1.11:
+  version "1.1.13"
+  resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
+  integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
+  dependencies:
+    ini "^1.3.4"
+    proto-list "~1.2.1"
+
+console-browserify@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+  integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+console-control-strings@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+  integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
+
+constants-browserify@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+  integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==
+
+content-disposition@^0.5.2:
+  version "0.5.4"
+  resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
+  integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
+  dependencies:
+    safe-buffer "5.2.1"
+
+"convert-source-map@^1.5.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0":
+  version "1.9.0"
+  resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
+  integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
+
+convert-source-map@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
+  integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+convert-source-map@~1.1.0:
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860"
+  integrity sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==
+
+convert-units@^2.3.4:
+  version "2.3.4"
+  resolved "https://registry.npmjs.org/convert-units/-/convert-units-2.3.4.tgz#a279f4b3cb9b5d5094beba61abc742dcb46a180d"
+  integrity sha512-ERHfdA0UhHJp1IpwE6PnFJx8LqG7B1ZjJ20UvVCmopEnVCfER68Tbe3kvN63dLbYXDA2xFWRE6zd4Wsf0w7POg==
+  dependencies:
+    lodash.foreach "2.3.x"
+    lodash.keys "2.3.x"
+
+copy-webpack-plugin@^11.0.0:
+  version "11.0.0"
+  resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a"
+  integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==
+  dependencies:
+    fast-glob "^3.2.11"
+    glob-parent "^6.0.1"
+    globby "^13.1.1"
+    normalize-path "^3.0.0"
+    schema-utils "^4.0.0"
+    serialize-javascript "^6.0.0"
+
+"core-js-compat@^3.30.1", "core-js-compat@^3.30.2":
+  version "3.31.0"
+  resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1"
+  integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==
+  dependencies:
+    browserslist "^4.21.5"
+
+core-js-compat@^3.31.0:
+  version "3.32.1"
+  resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964"
+  integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==
+  dependencies:
+    browserslist "^4.21.10"
+
+core-js-compat@^3.33.1:
+  version "3.33.1"
+  resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.1.tgz#debe80464107d75419e00c2ee29f35982118ff84"
+  integrity sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==
+  dependencies:
+    browserslist "^4.22.1"
+
+core-js@^3.15.1:
+  version "3.31.0"
+  resolved "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344"
+  integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==
+
+core-util-is@~1.0.0:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+  integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+cosmiconfig@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+  integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
+  dependencies:
+    "@types/parse-json" "^4.0.0"
+    import-fresh "^3.1.0"
+    parse-json "^5.0.0"
+    path-type "^4.0.0"
+    yaml "^1.7.2"
+
+cosmiconfig@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
+  integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
+  dependencies:
+    "@types/parse-json" "^4.0.0"
+    import-fresh "^3.2.1"
+    parse-json "^5.0.0"
+    path-type "^4.0.0"
+    yaml "^1.10.0"
+
+cosmiconfig@^8.1.3:
+  version "8.3.6"
+  resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3"
+  integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==
+  dependencies:
+    import-fresh "^3.3.0"
+    js-yaml "^4.1.0"
+    parse-json "^5.2.0"
+    path-type "^4.0.0"
+
+cosmiconfig@^8.2.0:
+  version "8.2.0"
+  resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd"
+  integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==
+  dependencies:
+    import-fresh "^3.2.1"
+    js-yaml "^4.1.0"
+    parse-json "^5.0.0"
+    path-type "^4.0.0"
+
+create-ecdh@^4.0.0:
+  version "4.0.4"
+  resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
+  integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
+  dependencies:
+    bn.js "^4.1.0"
+    elliptic "^6.5.3"
+
+"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+  integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+  dependencies:
+    cipher-base "^1.0.1"
+    inherits "^2.0.1"
+    md5.js "^1.3.4"
+    ripemd160 "^2.0.1"
+    sha.js "^2.4.0"
+
+"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7":
+  version "1.1.7"
+  resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+  integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+  dependencies:
+    cipher-base "^1.0.3"
+    create-hash "^1.1.0"
+    inherits "^2.0.1"
+    ripemd160 "^2.0.0"
+    safe-buffer "^5.0.1"
+    sha.js "^2.4.8"
+
+cross-env@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
+  integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
+  dependencies:
+    cross-spawn "^7.0.1"
+
+cross-spawn@^5.0.1:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+  integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==
+  dependencies:
+    lru-cache "^4.0.1"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+cross-spawn@^6.0.0:
+  version "6.0.5"
+  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+  dependencies:
+    nice-try "^1.0.4"
+    path-key "^2.0.1"
+    semver "^5.5.0"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+"cross-spawn@^7.0.0", "cross-spawn@^7.0.1", "cross-spawn@^7.0.2", "cross-spawn@^7.0.3":
+  version "7.0.3"
+  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+crypto-browserify@^3.0.0:
+  version "3.12.0"
+  resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+  integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+  dependencies:
+    browserify-cipher "^1.0.0"
+    browserify-sign "^4.0.0"
+    create-ecdh "^4.0.0"
+    create-hash "^1.1.0"
+    create-hmac "^1.1.0"
+    diffie-hellman "^5.0.0"
+    inherits "^2.0.1"
+    pbkdf2 "^3.0.3"
+    public-encrypt "^4.0.0"
+    randombytes "^2.0.0"
+    randomfill "^1.0.3"
+
+css-color-keywords@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
+  integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
+
+css-declaration-sorter@^6.3.1:
+  version "6.4.0"
+  resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad"
+  integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==
+
+css-loader@^6.7.2:
+  version "6.8.1"
+  resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88"
+  integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==
+  dependencies:
+    icss-utils "^5.1.0"
+    postcss "^8.4.21"
+    postcss-modules-extract-imports "^3.0.0"
+    postcss-modules-local-by-default "^4.0.3"
+    postcss-modules-scope "^3.0.0"
+    postcss-modules-values "^4.0.0"
+    postcss-value-parser "^4.2.0"
+    semver "^7.3.8"
+
+css-minimizer-webpack-plugin@^5.0.0:
+  version "5.0.1"
+  resolved "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565"
+  integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.18"
+    cssnano "^6.0.1"
+    jest-worker "^29.4.3"
+    postcss "^8.4.24"
+    schema-utils "^4.0.1"
+    serialize-javascript "^6.0.1"
+
+css-select@^4.1.3:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
+  integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.0.1"
+    domhandler "^4.3.1"
+    domutils "^2.8.0"
+    nth-check "^2.0.1"
+
+css-select@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
+  integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.1.0"
+    domhandler "^5.0.2"
+    domutils "^3.0.1"
+    nth-check "^2.0.1"
+
+css-to-react-native@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32"
+  integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==
+  dependencies:
+    camelize "^1.0.0"
+    css-color-keywords "^1.0.0"
+    postcss-value-parser "^4.0.2"
+
+"css-tree@^1.1.2", "css-tree@^1.1.3":
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
+  integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
+  dependencies:
+    mdn-data "2.0.14"
+    source-map "^0.6.1"
+
+css-tree@^2.2.1:
+  version "2.3.1"
+  resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20"
+  integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==
+  dependencies:
+    mdn-data "2.0.30"
+    source-map-js "^1.0.1"
+
+css-tree@~2.2.0:
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032"
+  integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==
+  dependencies:
+    mdn-data "2.0.28"
+    source-map-js "^1.0.1"
+
+css-vendor@^2.0.8:
+  version "2.0.8"
+  resolved "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d"
+  integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==
+  dependencies:
+    "@babel/runtime" "^7.8.3"
+    is-in-browser "^1.0.2"
+
+"css-what@^6.0.1", "css-what@^6.1.0":
+  version "6.1.0"
+  resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+  integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+css.escape@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
+  integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==
+
+cssesc@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssnano-preset-default@^5.2.14:
+  version "5.2.14"
+  resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8"
+  integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==
+  dependencies:
+    css-declaration-sorter "^6.3.1"
+    cssnano-utils "^3.1.0"
+    postcss-calc "^8.2.3"
+    postcss-colormin "^5.3.1"
+    postcss-convert-values "^5.1.3"
+    postcss-discard-comments "^5.1.2"
+    postcss-discard-duplicates "^5.1.0"
+    postcss-discard-empty "^5.1.1"
+    postcss-discard-overridden "^5.1.0"
+    postcss-merge-longhand "^5.1.7"
+    postcss-merge-rules "^5.1.4"
+    postcss-minify-font-values "^5.1.0"
+    postcss-minify-gradients "^5.1.1"
+    postcss-minify-params "^5.1.4"
+    postcss-minify-selectors "^5.2.1"
+    postcss-normalize-charset "^5.1.0"
+    postcss-normalize-display-values "^5.1.0"
+    postcss-normalize-positions "^5.1.1"
+    postcss-normalize-repeat-style "^5.1.1"
+    postcss-normalize-string "^5.1.0"
+    postcss-normalize-timing-functions "^5.1.0"
+    postcss-normalize-unicode "^5.1.1"
+    postcss-normalize-url "^5.1.0"
+    postcss-normalize-whitespace "^5.1.1"
+    postcss-ordered-values "^5.1.3"
+    postcss-reduce-initial "^5.1.2"
+    postcss-reduce-transforms "^5.1.0"
+    postcss-svgo "^5.1.0"
+    postcss-unique-selectors "^5.1.1"
+
+cssnano-preset-default@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz#2a93247140d214ddb9f46bc6a3562fa9177fe301"
+  integrity sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==
+  dependencies:
+    css-declaration-sorter "^6.3.1"
+    cssnano-utils "^4.0.0"
+    postcss-calc "^9.0.0"
+    postcss-colormin "^6.0.0"
+    postcss-convert-values "^6.0.0"
+    postcss-discard-comments "^6.0.0"
+    postcss-discard-duplicates "^6.0.0"
+    postcss-discard-empty "^6.0.0"
+    postcss-discard-overridden "^6.0.0"
+    postcss-merge-longhand "^6.0.0"
+    postcss-merge-rules "^6.0.1"
+    postcss-minify-font-values "^6.0.0"
+    postcss-minify-gradients "^6.0.0"
+    postcss-minify-params "^6.0.0"
+    postcss-minify-selectors "^6.0.0"
+    postcss-normalize-charset "^6.0.0"
+    postcss-normalize-display-values "^6.0.0"
+    postcss-normalize-positions "^6.0.0"
+    postcss-normalize-repeat-style "^6.0.0"
+    postcss-normalize-string "^6.0.0"
+    postcss-normalize-timing-functions "^6.0.0"
+    postcss-normalize-unicode "^6.0.0"
+    postcss-normalize-url "^6.0.0"
+    postcss-normalize-whitespace "^6.0.0"
+    postcss-ordered-values "^6.0.0"
+    postcss-reduce-initial "^6.0.0"
+    postcss-reduce-transforms "^6.0.0"
+    postcss-svgo "^6.0.0"
+    postcss-unique-selectors "^6.0.0"
+
+cssnano-utils@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861"
+  integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==
+
+cssnano-utils@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz#d1da885ec04003ab19505ff0e62e029708d36b08"
+  integrity sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==
+
+cssnano@^5.0.2:
+  version "5.1.15"
+  resolved "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf"
+  integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==
+  dependencies:
+    cssnano-preset-default "^5.2.14"
+    lilconfig "^2.0.3"
+    yaml "^1.10.2"
+
+cssnano@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz#87c38c4cd47049c735ab756d7e77ac3ca855c008"
+  integrity sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==
+  dependencies:
+    cssnano-preset-default "^6.0.1"
+    lilconfig "^2.1.0"
+
+csso@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529"
+  integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==
+  dependencies:
+    css-tree "^1.1.2"
+
+csso@^5.0.5:
+  version "5.0.5"
+  resolved "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6"
+  integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==
+  dependencies:
+    css-tree "~2.2.0"
+
+cssom@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36"
+  integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==
+
+cssom@~0.3.6:
+  version "0.3.8"
+  resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+  integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+  integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+  dependencies:
+    cssom "~0.3.6"
+
+"csstype@^2.5.2", "csstype@^2.5.7":
+  version "2.6.21"
+  resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e"
+  integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==
+
+csstype@^3.0.2:
+  version "3.1.2"
+  resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
+  integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+
+cubic2quad@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/cubic2quad/-/cubic2quad-1.2.1.tgz#2442260b72c02ee4b6a2fe998fcc1c4073622286"
+  integrity sha512-wT5Y7mO8abrV16gnssKdmIhIbA9wSkeMzhh27jAguKrV82i24wER0vL5TGhUJ9dbJNDcigoRZ0IAHFEEEI4THQ==
+
+dagre@^0.8.4:
+  version "0.8.5"
+  resolved "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz#ba30b0055dac12b6c1fcc247817442777d06afee"
+  integrity sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==
+  dependencies:
+    graphlib "^2.1.8"
+    lodash "^4.17.15"
+
+dash-ast@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37"
+  integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==
+
+data-urls@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143"
+  integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==
+  dependencies:
+    abab "^2.0.6"
+    whatwg-mimetype "^3.0.0"
+    whatwg-url "^11.0.0"
+
+date-fns@^2.24.0:
+  version "2.30.0"
+  resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0"
+  integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==
+  dependencies:
+    "@babel/runtime" "^7.21.0"
+
+"debug@4", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@~4.3.1", "debug@~4.3.2":
+  version "4.3.4"
+  resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+decamelize-keys@^1.1.0:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8"
+  integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==
+  dependencies:
+    decamelize "^1.1.0"
+    map-obj "^1.0.0"
+
+decamelize@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+
+decamelize@^5.0.0:
+  version "5.0.1"
+  resolved "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9"
+  integrity sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==
+
+decimal.js@^10.4.2:
+  version "10.4.3"
+  resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
+  integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
+
+decode-uri-component@^0.2.0:
+  version "0.2.2"
+  resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
+  integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
+
+"decompress-response@^3.2.0", "decompress-response@^3.3.0":
+  version "3.3.0"
+  resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
+  integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==
+  dependencies:
+    mimic-response "^1.0.0"
+
+"decompress-tar@^4.0.0", "decompress-tar@^4.1.0", "decompress-tar@^4.1.1":
+  version "4.1.1"
+  resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
+  integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==
+  dependencies:
+    file-type "^5.2.0"
+    is-stream "^1.1.0"
+    tar-stream "^1.5.2"
+
+decompress-tarbz2@^4.0.0:
+  version "4.1.1"
+  resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b"
+  integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==
+  dependencies:
+    decompress-tar "^4.1.0"
+    file-type "^6.1.0"
+    is-stream "^1.1.0"
+    seek-bzip "^1.0.5"
+    unbzip2-stream "^1.0.9"
+
+decompress-targz@^4.0.0:
+  version "4.1.1"
+  resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee"
+  integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==
+  dependencies:
+    decompress-tar "^4.1.1"
+    file-type "^5.2.0"
+    is-stream "^1.1.0"
+
+decompress-unzip@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69"
+  integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==
+  dependencies:
+    file-type "^3.8.0"
+    get-stream "^2.2.0"
+    pify "^2.3.0"
+    yauzl "^2.4.2"
+
+"decompress@^4.0.0", "decompress@^4.2.0":
+  version "4.2.1"
+  resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118"
+  integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==
+  dependencies:
+    decompress-tar "^4.0.0"
+    decompress-tarbz2 "^4.0.0"
+    decompress-targz "^4.0.0"
+    decompress-unzip "^4.0.1"
+    graceful-fs "^4.1.10"
+    make-dir "^1.0.0"
+    pify "^2.3.0"
+    strip-dirs "^2.0.0"
+
+dedent@^1.0.0:
+  version "1.5.1"
+  resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff"
+  integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==
+
+deep-diff@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/deep-diff/-/deep-diff-1.0.2.tgz#afd3d1f749115be965e89c63edc7abb1506b9c26"
+  integrity sha512-aWS3UIVH+NPGCD1kki+DCU9Dua032iSsO43LqQpcs4R3+dVv7tX0qBGjiVHJHjplsoUM2XRO/KB92glqc68awg==
+
+deep-equal@^2.0.5:
+  version "2.2.2"
+  resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa"
+  integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==
+  dependencies:
+    array-buffer-byte-length "^1.0.0"
+    call-bind "^1.0.2"
+    es-get-iterator "^1.1.3"
+    get-intrinsic "^1.2.1"
+    is-arguments "^1.1.1"
+    is-array-buffer "^3.0.2"
+    is-date-object "^1.0.5"
+    is-regex "^1.1.4"
+    is-shared-array-buffer "^1.0.2"
+    isarray "^2.0.5"
+    object-is "^1.1.5"
+    object-keys "^1.1.1"
+    object.assign "^4.1.4"
+    regexp.prototype.flags "^1.5.0"
+    side-channel "^1.0.4"
+    which-boxed-primitive "^1.0.2"
+    which-collection "^1.0.1"
+    which-typed-array "^1.1.9"
+
+deep-is@^0.1.3:
+  version "0.1.4"
+  resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+"deepmerge@^4.2.2", "deepmerge@^4.3.1":
+  version "4.3.1"
+  resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+"define-properties@^1.1.3", "define-properties@^1.1.4", "define-properties@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
+  integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
+  dependencies:
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
+defined@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf"
+  integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+delegates@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+  integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
+
+depd@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+deps-sort@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d"
+  integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==
+  dependencies:
+    JSONStream "^1.0.3"
+    shasum-object "^1.0.0"
+    subarg "^1.0.0"
+    through2 "^2.0.0"
+
+dequal@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
+  integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+
+des.js@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da"
+  integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==
+  dependencies:
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+
+detect-newline@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+  integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+
+detective@^5.2.0:
+  version "5.2.1"
+  resolved "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034"
+  integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==
+  dependencies:
+    acorn-node "^1.8.2"
+    defined "^1.0.0"
+    minimist "^1.2.6"
+
+diff-arrays-of-objects@^1.1.8:
+  version "1.1.9"
+  resolved "https://registry.npmjs.org/diff-arrays-of-objects/-/diff-arrays-of-objects-1.1.9.tgz#b1f00485684c1bb2ac6610d2f604b51f9679064d"
+  integrity sha512-V3Uk0sm71RjLsEvH9NZcgz6+C8Fu2eBRLwlrFlwXDEj6dfHX5El6mlRUS1hTSEm6eNvLmE4ewJ+iQbXCqGvVgQ==
+  dependencies:
+    deep-diff "^1.0.2"
+    lodash 4
+
+diff-sequences@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
+  integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
+
+diffie-hellman@^5.0.0:
+  version "5.0.3"
+  resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+  integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+  dependencies:
+    bn.js "^4.1.0"
+    miller-rabin "^4.0.0"
+    randombytes "^2.0.0"
+
+dir-glob@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+  dependencies:
+    path-type "^4.0.0"
+
+dnd-core@14.0.1:
+  version "14.0.1"
+  resolved "https://registry.npmjs.org/dnd-core/-/dnd-core-14.0.1.tgz#76d000e41c494983210fb20a48b835f81a203c2e"
+  integrity sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==
+  dependencies:
+    "@react-dnd/asap" "^4.0.0"
+    "@react-dnd/invariant" "^2.0.0"
+    redux "^4.1.1"
+
+dnd-core@^16.0.1:
+  version "16.0.1"
+  resolved "https://registry.npmjs.org/dnd-core/-/dnd-core-16.0.1.tgz#a1c213ed08961f6bd1959a28bb76f1a868360d19"
+  integrity sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==
+  dependencies:
+    "@react-dnd/asap" "^5.0.1"
+    "@react-dnd/invariant" "^4.0.1"
+    redux "^4.2.0"
+
+doctrine@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+  dependencies:
+    esutils "^2.0.2"
+
+doctrine@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+  dependencies:
+    esutils "^2.0.2"
+
+"dom-accessibility-api@^0.5.6", "dom-accessibility-api@^0.5.9":
+  version "0.5.16"
+  resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453"
+  integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==
+
+dom-align@^1.7.0:
+  version "1.12.4"
+  resolved "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz#3503992eb2a7cfcb2ed3b2a6d21e0b9c00d54511"
+  integrity sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==
+
+dom-helpers@^5.0.1:
+  version "5.2.1"
+  resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
+  integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
+  dependencies:
+    "@babel/runtime" "^7.8.7"
+    csstype "^3.0.2"
+
+dom-serializer@^1.0.1:
+  version "1.4.1"
+  resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+  integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.2.0"
+    entities "^2.0.0"
+
+dom-serializer@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+  integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.2"
+    entities "^4.2.0"
+
+domain-browser@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+  integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+"domelementtype@^2.0.1", "domelementtype@^2.2.0", "domelementtype@^2.3.0":
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domexception@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673"
+  integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==
+  dependencies:
+    webidl-conversions "^7.0.0"
+
+"domhandler@5.0.3", "domhandler@^5.0.2", "domhandler@^5.0.3":
+  version "5.0.3"
+  resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+  integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+  dependencies:
+    domelementtype "^2.3.0"
+
+"domhandler@^4.2.0", "domhandler@^4.3.1":
+  version "4.3.1"
+  resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+  integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+  dependencies:
+    domelementtype "^2.2.0"
+
+domutils@^2.8.0:
+  version "2.8.0"
+  resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+  dependencies:
+    dom-serializer "^1.0.1"
+    domelementtype "^2.2.0"
+    domhandler "^4.2.0"
+
+"domutils@^3.0.1", "domutils@^3.1.0":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
+  integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
+  dependencies:
+    dom-serializer "^2.0.0"
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+
+dot-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+  integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+download@^6.2.2:
+  version "6.2.5"
+  resolved "https://registry.npmjs.org/download/-/download-6.2.5.tgz#acd6a542e4cd0bb42ca70cfc98c9e43b07039714"
+  integrity sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==
+  dependencies:
+    caw "^2.0.0"
+    content-disposition "^0.5.2"
+    decompress "^4.0.0"
+    ext-name "^5.0.0"
+    file-type "5.2.0"
+    filenamify "^2.0.0"
+    get-stream "^3.0.0"
+    got "^7.0.0"
+    make-dir "^1.0.0"
+    p-event "^1.0.0"
+    pify "^3.0.0"
+
+download@^7.1.0:
+  version "7.1.0"
+  resolved "https://registry.npmjs.org/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233"
+  integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==
+  dependencies:
+    archive-type "^4.0.0"
+    caw "^2.0.1"
+    content-disposition "^0.5.2"
+    decompress "^4.2.0"
+    ext-name "^5.0.0"
+    file-type "^8.1.0"
+    filenamify "^2.0.0"
+    get-stream "^3.0.0"
+    got "^8.3.1"
+    make-dir "^1.2.0"
+    p-event "^2.1.0"
+    pify "^3.0.0"
+
+"duplexer2@^0.1.2", "duplexer2@~0.1.0", "duplexer2@~0.1.2":
+  version "0.1.4"
+  resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+  integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==
+  dependencies:
+    readable-stream "^2.0.2"
+
+duplexer3@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e"
+  integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==
+
+duplexer@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+  integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
+eastasianwidth@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+  integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+ejs@~3.1.8:
+  version "3.1.9"
+  resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361"
+  integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==
+  dependencies:
+    jake "^10.8.5"
+
+electron-to-chromium@^1.4.431:
+  version "1.4.437"
+  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.437.tgz#d0e73a431a9ade4467f73d48a59d752d91909316"
+  integrity sha512-ZFekRuBOHUXp21wrR5lshT6pZa/KmjkhKBAtmZz4NN5sCWlHOk3kdhiwFINrDBsRLX6FjyBAb1TRN+KBeNlyzQ==
+
+electron-to-chromium@^1.4.477:
+  version "1.4.508"
+  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.508.tgz#5641ff2f5ba11df4bd960fe6a2f9f70aa8b9af96"
+  integrity sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==
+
+electron-to-chromium@^1.4.535:
+  version "1.4.567"
+  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.567.tgz#c92e8fbc2bd15df3068d92571733a218a5413add"
+  integrity sha512-8KR114CAYQ4/r5EIEsOmOMqQ9j0MRbJZR3aXD/KFA8RuKzyoUB4XrUCg+l8RUGqTVQgKNIgTpjaG8YHRPAbX2w==
+
+"elliptic@^6.5.3", "elliptic@^6.5.4":
+  version "6.5.4"
+  resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
+  integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
+  dependencies:
+    bn.js "^4.11.9"
+    brorand "^1.1.0"
+    hash.js "^1.0.0"
+    hmac-drbg "^1.0.1"
+    inherits "^2.0.4"
+    minimalistic-assert "^1.0.1"
+    minimalistic-crypto-utils "^1.0.1"
+
+emittery@^0.13.1:
+  version "0.13.1"
+  resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad"
+  integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==
+
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+  integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+emojis-list@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+  integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+encoding@^0.1.13:
+  version "0.1.13"
+  resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
+  dependencies:
+    iconv-lite "^0.6.2"
+
+"end-of-stream@^1.0.0", "end-of-stream@^1.1.0":
+  version "1.4.4"
+  resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+  dependencies:
+    once "^1.4.0"
+
+engine.io-client@~6.5.0:
+  version "6.5.0"
+  resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.0.tgz#c77f14c0e996d3746a1fa681b3b093003dc1743d"
+  integrity sha512-C7eN3OKggSfd5g8IDgUA9guC8TNS6CEganKT7dL6Fp3q+FobcQ/WBn2Qq2XTL1vNTiFZfDzXohvqLuR9dWejdg==
+  dependencies:
+    "@socket.io/component-emitter" "~3.1.0"
+    debug "~4.3.1"
+    engine.io-parser "~5.1.0"
+    ws "~8.11.0"
+    xmlhttprequest-ssl "~2.0.0"
+
+engine.io-parser@~5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.1.0.tgz#d593d6372d7f79212df48f807b8cace1ea1cb1b8"
+  integrity sha512-enySgNiK5tyZFynt3z7iqBR+Bto9EVVVvDFuTT0ioHCGbzirZVGDGiQjZzEp8hWl6hd5FSVytJGuScX1C1C35w==
+
+enhanced-resolve@^5.15.0:
+  version "5.15.0"
+  resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35"
+  integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==
+  dependencies:
+    graceful-fs "^4.2.4"
+    tapable "^2.2.0"
+
+entities@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+"entities@^4.2.0", "entities@^4.4.0", "entities@^4.5.0":
+  version "4.5.0"
+  resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+env-paths@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+  integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+envinfo@^7.7.3:
+  version "7.9.0"
+  resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.9.0.tgz#47594a13081be0d9be6e513534e8c58dbb26c7a1"
+  integrity sha512-RODB4txU+xImYDemN5DqaKC0CHk05XSVkOX4pq0hK26Qx+1LChkuOyUDlGEjYb3ACr0n9qBhFjg37hQuJvpkRQ==
+
+err-code@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+  integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
+error-ex@^1.3.1:
+  version "1.3.2"
+  resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  dependencies:
+    is-arrayish "^0.2.1"
+
+"es-abstract@^1.19.0", "es-abstract@^1.20.4":
+  version "1.21.2"
+  resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff"
+  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.0"
+    get-symbol-description "^1.0.0"
+    globalthis "^1.0.3"
+    gopd "^1.0.1"
+    has "^1.0.3"
+    has-property-descriptors "^1.0.0"
+    has-proto "^1.0.1"
+    has-symbols "^1.0.3"
+    internal-slot "^1.0.5"
+    is-array-buffer "^3.0.2"
+    is-callable "^1.2.7"
+    is-negative-zero "^2.0.2"
+    is-regex "^1.1.4"
+    is-shared-array-buffer "^1.0.2"
+    is-string "^1.0.7"
+    is-typed-array "^1.1.10"
+    is-weakref "^1.0.2"
+    object-inspect "^1.12.3"
+    object-keys "^1.1.1"
+    object.assign "^4.1.4"
+    regexp.prototype.flags "^1.4.3"
+    safe-regex-test "^1.0.0"
+    string.prototype.trim "^1.2.7"
+    string.prototype.trimend "^1.0.6"
+    string.prototype.trimstart "^1.0.6"
+    typed-array-length "^1.0.4"
+    unbox-primitive "^1.0.2"
+    which-typed-array "^1.1.9"
+
+es-abstract@^1.21.3:
+  version "1.22.1"
+  resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc"
+  integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==
+  dependencies:
+    array-buffer-byte-length "^1.0.0"
+    arraybuffer.prototype.slice "^1.0.1"
+    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-array-concat "^1.0.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-buffer "^1.0.0"
+    typed-array-byte-length "^1.0.0"
+    typed-array-byte-offset "^1.0.0"
+    typed-array-length "^1.0.4"
+    unbox-primitive "^1.0.2"
+    which-typed-array "^1.1.10"
+
+es-get-iterator@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6"
+  integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.1.3"
+    has-symbols "^1.0.3"
+    is-arguments "^1.1.1"
+    is-map "^2.0.2"
+    is-set "^2.0.2"
+    is-string "^1.0.7"
+    isarray "^2.0.5"
+    stop-iteration-iterator "^1.0.0"
+
+es-iterator-helpers@^1.0.12:
+  version "1.0.12"
+  resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.12.tgz#272f7270f270f4d63dd8aa718228ffa901fd086e"
+  integrity sha512-T6Ldv67RYULYtZ1k1omngDTVQSTVNX/ZSjDiwlw0PMokhy8kq2LFElleaEjpvlSaXh9ugJ4zrBgbQ7L+Bjdm3Q==
+  dependencies:
+    asynciterator.prototype "^1.0.0"
+    es-abstract "^1.21.3"
+    es-set-tostringtag "^2.0.1"
+    function-bind "^1.1.1"
+    globalthis "^1.0.3"
+    has-proto "^1.0.1"
+    has-symbols "^1.0.3"
+    internal-slot "^1.0.5"
+    iterator.prototype "^1.1.0"
+    safe-array-concat "^1.0.0"
+
+es-module-lexer@^1.2.1:
+  version "1.3.0"
+  resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f"
+  integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==
+
+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#338d502f6f674301d710b80c8592de8a15f09cd8"
+  integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==
+  dependencies:
+    get-intrinsic "^1.1.3"
+    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#702e632193201e3edf8713635d083d378e510241"
+  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#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+  integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+  dependencies:
+    is-callable "^1.1.4"
+    is-date-object "^1.0.1"
+    is-symbol "^1.0.2"
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+"escape-string-regexp@^1.0.2", "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#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+  integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+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#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escodegen@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
+  integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
+  dependencies:
+    esprima "^4.0.1"
+    estraverse "^5.2.0"
+    esutils "^2.0.2"
+    source-map "~0.6.1"
+
+eslint-plugin-jest@^27.4.0:
+  version "27.4.0"
+  resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.4.0.tgz#3926cca723c40c3d7a3fe0e1fd911eff5e681f50"
+  integrity sha512-ukVeKmMPAUA5SWjHenvyyXnirKfHKMdOsTZdn5tZx5EW05HGVQwBohigjFZGGj3zuv1cV6hc82FvWv6LdIbkgg==
+  dependencies:
+    "@typescript-eslint/utils" "^5.10.0"
+
+eslint-plugin-react-hooks@^4.3.0:
+  version "4.6.0"
+  resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
+  integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
+
+eslint-plugin-react@^7.33.2:
+  version "7.33.2"
+  resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608"
+  integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==
+  dependencies:
+    array-includes "^3.1.6"
+    array.prototype.flatmap "^1.3.1"
+    array.prototype.tosorted "^1.1.1"
+    doctrine "^2.1.0"
+    es-iterator-helpers "^1.0.12"
+    estraverse "^5.3.0"
+    jsx-ast-utils "^2.4.1 || ^3.0.0"
+    minimatch "^3.1.2"
+    object.entries "^1.1.6"
+    object.fromentries "^2.0.6"
+    object.hasown "^1.1.2"
+    object.values "^1.1.6"
+    prop-types "^15.8.1"
+    resolve "^2.0.0-next.4"
+    semver "^6.3.1"
+    string.prototype.matchall "^4.0.8"
+
+eslint-rule-composer@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9"
+  integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==
+
+"eslint-scope@5.1.1", "eslint-scope@^5.1.1":
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^4.1.1"
+
+eslint-scope@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b"
+  integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^5.2.0"
+
+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#f65328259305927392c938ed44eb0a5c9b2bd303"
+  integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+"eslint-visitor-keys@^3.3.0", "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#c22c48f48942d08ca824cc526211ae400478a994"
+  integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
+
+eslint@^8.37.0:
+  version "8.43.0"
+  resolved "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz#3e8c6066a57097adfd9d390b8fc93075f257a094"
+  integrity sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==
+  dependencies:
+    "@eslint-community/eslint-utils" "^4.2.0"
+    "@eslint-community/regexpp" "^4.4.0"
+    "@eslint/eslintrc" "^2.0.3"
+    "@eslint/js" "8.43.0"
+    "@humanwhocodes/config-array" "^0.11.10"
+    "@humanwhocodes/module-importer" "^1.0.1"
+    "@nodelib/fs.walk" "^1.2.8"
+    ajv "^6.10.0"
+    chalk "^4.0.0"
+    cross-spawn "^7.0.2"
+    debug "^4.3.2"
+    doctrine "^3.0.0"
+    escape-string-regexp "^4.0.0"
+    eslint-scope "^7.2.0"
+    eslint-visitor-keys "^3.4.1"
+    espree "^9.5.2"
+    esquery "^1.4.2"
+    esutils "^2.0.2"
+    fast-deep-equal "^3.1.3"
+    file-entry-cache "^6.0.1"
+    find-up "^5.0.0"
+    glob-parent "^6.0.2"
+    globals "^13.19.0"
+    graphemer "^1.4.0"
+    ignore "^5.2.0"
+    import-fresh "^3.0.0"
+    imurmurhash "^0.1.4"
+    is-glob "^4.0.0"
+    is-path-inside "^3.0.3"
+    js-yaml "^4.1.0"
+    json-stable-stringify-without-jsonify "^1.0.1"
+    levn "^0.4.1"
+    lodash.merge "^4.6.2"
+    minimatch "^3.1.2"
+    natural-compare "^1.4.0"
+    optionator "^0.9.1"
+    strip-ansi "^6.0.1"
+    strip-json-comments "^3.1.0"
+    text-table "^0.2.0"
+
+espree@^9.5.2:
+  version "9.5.2"
+  resolved "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b"
+  integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==
+  dependencies:
+    acorn "^8.8.0"
+    acorn-jsx "^5.3.2"
+    eslint-visitor-keys "^3.4.1"
+
+"esprima@^4.0.0", "esprima@^4.0.1":
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.4.2:
+  version "1.5.0"
+  resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
+  integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
+  dependencies:
+    estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+  dependencies:
+    estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+"estraverse@^5.1.0", "estraverse@^5.2.0", "estraverse@^5.3.0":
+  version "5.3.0"
+  resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+eve@~0.5.1:
+  version "0.5.4"
+  resolved "https://registry.npmjs.org/eve/-/eve-0.5.4.tgz#67d080b9725291d7e389e34c26860dd97f1debaa"
+  integrity sha512-aqprQ9MAOh1t66PrHxDFmMXPlgNO6Uv1uqvxmwjprQV50jaQ2RqO7O1neY4PJwC+hMnkyMDphu2AQPOPZdjQog==
+
+"events@^3.0.0", "events@^3.2.0":
+  version "3.3.0"
+  resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3":
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+  integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+  dependencies:
+    md5.js "^1.3.4"
+    node-gyp latest
+    safe-buffer "^5.1.1"
+
+exec-buffer@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b"
+  integrity sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==
+  dependencies:
+    execa "^0.7.0"
+    p-finally "^1.0.0"
+    pify "^3.0.0"
+    rimraf "^2.5.4"
+    tempfile "^2.0.0"
+
+execa@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+  integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==
+  dependencies:
+    cross-spawn "^5.0.1"
+    get-stream "^3.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+execa@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+  dependencies:
+    cross-spawn "^6.0.0"
+    get-stream "^4.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+execa@^5.0.0:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+  integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+  dependencies:
+    cross-spawn "^7.0.3"
+    get-stream "^6.0.0"
+    human-signals "^2.1.0"
+    is-stream "^2.0.0"
+    merge-stream "^2.0.0"
+    npm-run-path "^4.0.1"
+    onetime "^5.1.2"
+    signal-exit "^3.0.3"
+    strip-final-newline "^2.0.0"
+
+execa@^6.0.0:
+  version "6.1.0"
+  resolved "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20"
+  integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==
+  dependencies:
+    cross-spawn "^7.0.3"
+    get-stream "^6.0.1"
+    human-signals "^3.0.1"
+    is-stream "^3.0.0"
+    merge-stream "^2.0.0"
+    npm-run-path "^5.1.0"
+    onetime "^6.0.0"
+    signal-exit "^3.0.7"
+    strip-final-newline "^3.0.0"
+
+executable@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c"
+  integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==
+  dependencies:
+    pify "^2.2.0"
+
+exit@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+  integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
+
+"expect@^29.0.0", "expect@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz#a6e6f66d4613717859b2fe3da98a739437b6f4b8"
+  integrity sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==
+  dependencies:
+    "@jest/expect-utils" "^29.6.4"
+    jest-get-type "^29.6.3"
+    jest-matcher-utils "^29.6.4"
+    jest-message-util "^29.6.3"
+    jest-util "^29.6.3"
+
+exponential-backoff@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
+  integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
+
+exports-loader@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/exports-loader/-/exports-loader-4.0.0.tgz#af34fe80a18f12fb0f42f435edd7df0fe9db49bb"
+  integrity sha512-4iqFFIAnlVAbkAUMHhWceyxK6N6dMDWpQFbSHLmiayGEPMXl2bgWD4D11GYi1VNuEQwJaHGdATcPYTnXpwzSmw==
+  dependencies:
+    source-map "^0.6.1"
+
+ext-list@^2.0.0:
+  version "2.2.2"
+  resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37"
+  integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==
+  dependencies:
+    mime-db "^1.28.0"
+
+ext-name@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6"
+  integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==
+  dependencies:
+    ext-list "^2.0.0"
+    sort-keys-length "^1.0.0"
+
+"fast-deep-equal@^3.1.1", "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#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+"fast-glob@^3.2.11", "fast-glob@^3.2.7", "fast-glob@^3.2.9":
+  version "3.2.12"
+  resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
+  integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
+  dependencies:
+    "@nodelib/fs.stat" "^2.0.2"
+    "@nodelib/fs.walk" "^1.2.3"
+    glob-parent "^5.1.2"
+    merge2 "^1.3.0"
+    micromatch "^4.0.4"
+
+"fast-json-stable-stringify@^2.0.0", "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#874bf69c6f404c2b5d99c481341399fd55892633"
+  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#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fast-memoize@^2.5.1:
+  version "2.5.2"
+  resolved "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e"
+  integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==
+
+fast-safe-stringify@^2.0.7:
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
+  integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==
+
+fastest-levenshtein@^1.0.12:
+  version "1.0.16"
+  resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
+  integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
+
+fastq@^1.6.0:
+  version "1.15.0"
+  resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
+  integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
+  dependencies:
+    reusify "^1.0.4"
+
+fb-watchman@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
+  integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==
+  dependencies:
+    bser "2.1.1"
+
+fd-slicer@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+  integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
+  dependencies:
+    pend "~1.2.0"
+
+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#211b2dd9659cb0394b073e7323ac3c933d522027"
+  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+  dependencies:
+    flat-cache "^3.0.4"
+
+file-selector@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz#fa0a8d9007b829504db4d07dd4de0310b65287dc"
+  integrity sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==
+  dependencies:
+    tslib "^2.4.0"
+
+"file-type@5.2.0", "file-type@^5.2.0":
+  version "5.2.0"
+  resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
+  integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==
+
+file-type@^16.5.3:
+  version "16.5.4"
+  resolved "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd"
+  integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==
+  dependencies:
+    readable-web-to-node-stream "^3.0.0"
+    strtok3 "^6.2.4"
+    token-types "^4.1.1"
+
+file-type@^3.8.0:
+  version "3.9.0"
+  resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
+  integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==
+
+file-type@^4.2.0:
+  version "4.4.0"
+  resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5"
+  integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==
+
+file-type@^6.1.0:
+  version "6.2.0"
+  resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919"
+  integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==
+
+file-type@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c"
+  integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==
+
+file-uri-to-path@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+  integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+filelist@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
+  integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
+  dependencies:
+    minimatch "^5.0.1"
+
+filename-reserved-regex@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"
+  integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==
+
+filenamify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9"
+  integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==
+  dependencies:
+    filename-reserved-regex "^2.0.0"
+    strip-outer "^1.0.0"
+    trim-repeated "^1.0.0"
+
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+find-cache-dir@^3.3.1:
+  version "3.3.2"
+  resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b"
+  integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==
+  dependencies:
+    commondir "^1.0.1"
+    make-dir "^3.0.2"
+    pkg-dir "^4.1.0"
+
+find-root@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+  integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+"find-up@^4.0.0", "find-up@^4.1.0":
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+  dependencies:
+    locate-path "^5.0.0"
+    path-exists "^4.0.0"
+
+find-up@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+  dependencies:
+    locate-path "^6.0.0"
+    path-exists "^4.0.0"
+
+find-versions@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e"
+  integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==
+  dependencies:
+    semver-regex "^2.0.0"
+
+flat-cache@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+  integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+  dependencies:
+    flatted "^3.1.0"
+    rimraf "^3.0.2"
+
+flatted@^3.1.0:
+  version "3.2.7"
+  resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
+  integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+
+follow-redirects@^1.15.0:
+  version "1.15.2"
+  resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
+  integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+
+for-each@^0.3.3:
+  version "0.3.3"
+  resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+  integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+  dependencies:
+    is-callable "^1.1.3"
+
+foreground-child@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+  integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+  dependencies:
+    cross-spawn "^7.0.0"
+    signal-exit "^4.0.1"
+
+form-data@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+  integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
+
+fraction.js@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
+  integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
+
+from2@^2.1.1:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+  integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==
+  dependencies:
+    inherits "^2.0.1"
+    readable-stream "^2.0.0"
+
+fs-constants@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+  integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-minipass@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+  integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+  dependencies:
+    minipass "^3.0.0"
+
+fs-minipass@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3"
+  integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==
+  dependencies:
+    minipass "^5.0.0"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@^2.3.2:
+  version "2.3.3"
+  resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+  integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+  dependencies:
+    node-gyp latest
+
+fsevents@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+  dependencies:
+    node-gyp latest
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  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#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
+  integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.0"
+    functions-have-names "^1.2.2"
+
+"functions-have-names@^1.2.2", "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#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+  integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+gauge@^4.0.3:
+  version "4.0.4"
+  resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
+  integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
+  dependencies:
+    aproba "^1.0.3 || ^2.0.0"
+    color-support "^1.1.3"
+    console-control-strings "^1.1.0"
+    has-unicode "^2.0.1"
+    signal-exit "^3.0.7"
+    string-width "^4.2.3"
+    strip-ansi "^6.0.1"
+    wide-align "^1.1.5"
+
+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#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+geometry-interfaces@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.npmjs.org/geometry-interfaces/-/geometry-interfaces-1.1.4.tgz#9e82af6700ca639a675299f08e1f5fbc4a79d48d"
+  integrity sha512-qD6OdkT6NcES9l4Xx3auTpwraQruU7dARbQPVO71MKvkGYw5/z/oIiGymuFXrRaEQa5Y67EIojUpaLeGEa5hGA==
+
+get-assigned-identifiers@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1"
+  integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==
+
+get-caller-file@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.1", "get-intrinsic@^1.1.3", "get-intrinsic@^1.2.0", "get-intrinsic@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
+  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-package-type@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+  integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-proxy@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93"
+  integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==
+  dependencies:
+    npm-conf "^1.1.0"
+
+"get-stream@3.0.0", "get-stream@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+  integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==
+
+get-stream@^2.2.0:
+  version "2.3.1"
+  resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
+  integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==
+  dependencies:
+    object-assign "^4.0.1"
+    pinkie-promise "^2.0.0"
+
+get-stream@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+  dependencies:
+    pump "^3.0.0"
+
+"get-stream@^6.0.0", "get-stream@^6.0.1":
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+  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#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+  integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.1.1"
+
+"glob-parent@^5.1.2", "glob-parent@~5.1.2":
+  version "5.1.2"
+  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+"glob-parent@^6.0.1", "glob-parent@^6.0.2":
+  version "6.0.2"
+  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+  integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+  dependencies:
+    is-glob "^4.0.3"
+
+glob-to-regexp@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@^10.2.2:
+  version "10.3.0"
+  resolved "https://registry.npmjs.org/glob/-/glob-10.3.0.tgz#763d02a894f3cdfc521b10bbbbc8e0309e750cce"
+  integrity sha512-AQ1/SB9HH0yCx1jXAT4vmCbTOPe5RQ+kCurjbel5xSCGhebumUv+GJZfa1rEqor3XIViqwSEmlkZCQD43RWrBg==
+  dependencies:
+    foreground-child "^3.1.0"
+    jackspeak "^2.0.3"
+    minimatch "^9.0.1"
+    minipass "^5.0.0 || ^6.0.2"
+    path-scurry "^1.7.0"
+
+"glob@^7.1.0", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6":
+  version "7.2.3"
+  resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits 2
+    minimatch "^3.1.1"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+globals@^11.1.0:
+  version "11.12.0"
+  resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^13.19.0:
+  version "13.20.0"
+  resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82"
+  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#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+  integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+  dependencies:
+    define-properties "^1.1.3"
+
+globby@^11.1.0:
+  version "11.1.0"
+  resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+  integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+  dependencies:
+    array-union "^2.1.0"
+    dir-glob "^3.0.1"
+    fast-glob "^3.2.9"
+    ignore "^5.2.0"
+    merge2 "^1.4.1"
+    slash "^3.0.0"
+
+"globby@^12.0.0", "globby@^12.0.2":
+  version "12.2.0"
+  resolved "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz#2ab8046b4fba4ff6eede835b29f678f90e3d3c22"
+  integrity sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==
+  dependencies:
+    array-union "^3.0.1"
+    dir-glob "^3.0.1"
+    fast-glob "^3.2.7"
+    ignore "^5.1.9"
+    merge2 "^1.4.1"
+    slash "^4.0.0"
+
+globby@^13.1.1:
+  version "13.2.0"
+  resolved "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz#7dd5678d765c4680c2e6d106230d86cb727cb1af"
+  integrity sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==
+  dependencies:
+    dir-glob "^3.0.1"
+    fast-glob "^3.2.11"
+    ignore "^5.2.0"
+    merge2 "^1.4.1"
+    slash "^4.0.0"
+
+gopd@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+  integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+  dependencies:
+    get-intrinsic "^1.1.3"
+
+got@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.npmjs.org/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a"
+  integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==
+  dependencies:
+    decompress-response "^3.2.0"
+    duplexer3 "^0.1.4"
+    get-stream "^3.0.0"
+    is-plain-obj "^1.1.0"
+    is-retry-allowed "^1.0.0"
+    is-stream "^1.0.0"
+    isurl "^1.0.0-alpha5"
+    lowercase-keys "^1.0.0"
+    p-cancelable "^0.3.0"
+    p-timeout "^1.1.1"
+    safe-buffer "^5.0.1"
+    timed-out "^4.0.0"
+    url-parse-lax "^1.0.0"
+    url-to-options "^1.0.1"
+
+got@^8.3.1:
+  version "8.3.2"
+  resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937"
+  integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==
+  dependencies:
+    "@sindresorhus/is" "^0.7.0"
+    cacheable-request "^2.1.1"
+    decompress-response "^3.3.0"
+    duplexer3 "^0.1.4"
+    get-stream "^3.0.0"
+    into-stream "^3.1.0"
+    is-retry-allowed "^1.1.0"
+    isurl "^1.0.0-alpha5"
+    lowercase-keys "^1.0.0"
+    mimic-response "^1.0.0"
+    p-cancelable "^0.4.0"
+    p-timeout "^2.0.1"
+    pify "^3.0.0"
+    safe-buffer "^5.1.1"
+    timed-out "^4.0.1"
+    url-parse-lax "^3.0.0"
+    url-to-options "^1.0.1"
+
+"graceful-fs@^4.1.10", "graceful-fs@^4.1.2", "graceful-fs@^4.2.4", "graceful-fs@^4.2.6", "graceful-fs@^4.2.8", "graceful-fs@^4.2.9":
+  version "4.2.11"
+  resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+grapheme-splitter@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
+  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#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
+  integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
+graphlib@^2.1.8:
+  version "2.1.8"
+  resolved "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da"
+  integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==
+  dependencies:
+    lodash "^4.17.15"
+
+gzip-size@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
+  integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==
+  dependencies:
+    duplexer "^0.1.2"
+
+hammerjs@^2.0.8:
+  version "2.0.8"
+  resolved "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1"
+  integrity sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==
+
+handlebars@^4.0.11:
+  version "4.7.7"
+  resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"
+  integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==
+  dependencies:
+    minimist "^1.2.5"
+    neo-async "^2.6.0"
+    source-map "^0.6.1"
+    uglify-js "^3.1.4"
+    wordwrap "^1.0.0"
+
+hard-rejection@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
+  integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
+
+"has-bigints@^1.0.1", "has-bigints@^1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+  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#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  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#944771fd9c81c81265c4d6941860da06bb59479b"
+  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#610708600606d36961ed04c196193b6a607fa861"
+  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+  dependencies:
+    get-intrinsic "^1.1.1"
+
+has-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+  integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
+has-symbol-support-x@^1.4.1:
+  version "1.4.2"
+  resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
+  integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==
+
+"has-symbols@^1.0.2", "has-symbols@^1.0.3":
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-to-string-tag-x@^1.2.0:
+  version "1.4.1"
+  resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
+  integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==
+  dependencies:
+    has-symbol-support-x "^1.4.1"
+
+has-tostringtag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+  integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+  dependencies:
+    has-symbols "^1.0.2"
+
+has-unicode@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+  integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
+
+"has@^1.0.0", "has@^1.0.3":
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+  integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+  dependencies:
+    inherits "^2.0.4"
+    readable-stream "^3.6.0"
+    safe-buffer "^5.2.0"
+
+"hash.js@^1.0.0", "hash.js@^1.0.3":
+  version "1.1.7"
+  resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+  integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+  dependencies:
+    inherits "^2.0.3"
+    minimalistic-assert "^1.0.1"
+
+heap@0.2.5:
+  version "0.2.5"
+  resolved "https://registry.npmjs.org/heap/-/heap-0.2.5.tgz#713b65590ebcc40fcbeeaf55e851694092b39af1"
+  integrity sha512-G7HLD+WKcrOyJP5VQwYZNC3Z6FcQ7YYjEFiFoIj8PfEr73mu421o8B1N5DKUcc8K37EsJ2XXWA8DtrDz/2dReg==
+
+hmac-drbg@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+  integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==
+  dependencies:
+    hash.js "^1.0.3"
+    minimalistic-assert "^1.0.0"
+    minimalistic-crypto-utils "^1.0.1"
+
+"hoist-non-react-statics@^3.0.0", "hoist-non-react-statics@^3.3.0", "hoist-non-react-statics@^3.3.1", "hoist-non-react-statics@^3.3.2":
+  version "3.3.2"
+  resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+  integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+  dependencies:
+    react-is "^16.7.0"
+
+hosted-git-info@^4.0.1:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
+  integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
+  dependencies:
+    lru-cache "^6.0.0"
+
+html-dom-parser@5.0.4:
+  version "5.0.4"
+  resolved "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-5.0.4.tgz#2941a762317d088e747db31c8cf290987ec30a55"
+  integrity sha512-azy8THLKd4Ar0OVJpEgX+MSjYvKdNDWlGiRBIlovMqEQYMAnLLXBhhiSwjylDD3RDdcCYT8Utg6uoRDeLHUyHg==
+  dependencies:
+    domhandler "5.0.3"
+    htmlparser2 "9.0.0"
+
+html-encoding-sniffer@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
+  integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
+  dependencies:
+    whatwg-encoding "^2.0.0"
+
+html-escaper@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+  integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+html-react-parser@^5.0.6:
+  version "5.0.6"
+  resolved "https://registry.npmjs.org/html-react-parser/-/html-react-parser-5.0.6.tgz#ee9e8ae404aa38cfbaf3825cb26fabced46024a1"
+  integrity sha512-aPSzFhO2bK/L/mYQbMwFz+1QG8nhxozbwENt/52HTApasrBvDX87MFD5uSQIjq7Io0bnKzH4uh7PM42zZ4ag9A==
+  dependencies:
+    domhandler "5.0.3"
+    html-dom-parser "5.0.4"
+    react-property "2.0.2"
+    style-to-js "1.1.9"
+
+html-to-image@^1.11.11:
+  version "1.11.11"
+  resolved "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.11.tgz#c0f8a34dc9e4b97b93ff7ea286eb8562642ebbea"
+  integrity sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA==
+
+htmlescape@^1.1.0:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351"
+  integrity sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==
+
+htmlparser2@9.0.0:
+  version "9.0.0"
+  resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.0.0.tgz#e431142b7eeb1d91672742dea48af8ac7140cddb"
+  integrity sha512-uxbSI98wmFT/G4P2zXx4OVx04qWUmyFPrD2/CNepa2Zo3GPNaCaaxElDgwUrwYWkK1nr9fft0Ya8dws8coDLLQ==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+    domutils "^3.1.0"
+    entities "^4.5.0"
+
+http-cache-semantics@3.8.1:
+  version "3.8.1"
+  resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
+  integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
+
+http-cache-semantics@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+  integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
+http-proxy-agent@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+  integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+  dependencies:
+    "@tootallnate/once" 2
+    agent-base 6
+    debug 4
+
+https-browserify@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+  integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==
+
+"https-proxy-agent@^5.0.0", "https-proxy-agent@^5.0.1":
+  version "5.0.1"
+  resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+  dependencies:
+    agent-base 6
+    debug 4
+
+human-signals@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+human-signals@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5"
+  integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==
+
+humanize-ms@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+  integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+  dependencies:
+    ms "^2.0.0"
+
+hyphenate-style-name@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
+  integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
+
+"iconv-lite@0.6.3", "iconv-lite@^0.6.2":
+  version "0.6.3"
+  resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
+"icss-utils@^5.0.0", "icss-utils@^5.1.0":
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
+  integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
+
+"ieee754@^1.1.13", "ieee754@^1.1.4", "ieee754@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+"ignore@^5.1.9", "ignore@^5.2.0":
+  version "5.2.4"
+  resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
+  integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+
+image-minimizer-webpack-plugin@^3.8.2:
+  version "3.8.3"
+  resolved "https://registry.npmjs.org/image-minimizer-webpack-plugin/-/image-minimizer-webpack-plugin-3.8.3.tgz#41b2379f9d8adabf4e4db63c656543fee26dd4c2"
+  integrity sha512-Ex0cjNJc2FUSuwN7WHNyxkIZINP0M9lrN+uWJznMcsehiM5Z7ELwk+SEkSGEookK1GUd2wf+09jy1PEH5a5XmQ==
+  dependencies:
+    schema-utils "^4.2.0"
+    serialize-javascript "^6.0.1"
+
+imagemin-mozjpeg@^10.0.0:
+  version "10.0.0"
+  resolved "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-10.0.0.tgz#d6771d1ce05ee15e2f6f34a9878c7266abccd9ee"
+  integrity sha512-DK85QNOjS3/GzWYfNB3CACMZD10sIQgFDv1+WTOnZljgltQTEyATjdyUVyjKu5q4sCESQdwvwq7WEZzJ5fFjlg==
+  dependencies:
+    execa "^6.0.0"
+    is-jpg "^3.0.0"
+    mozjpeg "^8.0.0"
+
+imagemin-optipng@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz#b88e5cf6da25cc8479e07cdf38c3ae0479df7ef2"
+  integrity sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==
+  dependencies:
+    exec-buffer "^3.0.0"
+    is-png "^2.0.0"
+    optipng-bin "^7.0.0"
+
+imagemin@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.npmjs.org/imagemin/-/imagemin-8.0.1.tgz#8b29ecb78197d8f0eac6a782f2e6b38fb3780d9e"
+  integrity sha512-Q/QaPi+5HuwbZNtQRqUVk6hKacI6z9iWiCSQBisAv7uBynZwO7t1svkryKl7+iSQbkU/6t9DWnHz04cFs2WY7w==
+  dependencies:
+    file-type "^16.5.3"
+    globby "^12.0.0"
+    graceful-fs "^4.2.8"
+    junk "^3.1.0"
+    p-pipe "^4.0.0"
+    replace-ext "^2.0.0"
+    slash "^3.0.0"
+
+immutability-helper@^3.0.0:
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/immutability-helper/-/immutability-helper-3.1.1.tgz#2b86b2286ed3b1241c9e23b7b21e0444f52f77b7"
+  integrity sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ==
+
+immutable@^4.0.0:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be"
+  integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==
+
+"import-fresh@^3.0.0", "import-fresh@^3.1.0", "import-fresh@^3.2.1", "import-fresh@^3.3.0":
+  version "3.3.0"
+  resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+  integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+  dependencies:
+    parent-module "^1.0.0"
+    resolve-from "^4.0.0"
+
+import-lazy@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc"
+  integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==
+
+import-local@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+  integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
+  dependencies:
+    pkg-dir "^4.2.0"
+    resolve-cwd "^3.0.0"
+
+imports-loader@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/imports-loader/-/imports-loader-4.0.1.tgz#a3d3067d0c369cd621e2b322b6b6bb2593756be5"
+  integrity sha512-ZiY+1xH5fqAJ1Qu1CFv+zw54rvPCC92DdYRDe0IIUboOhbJPLfOPbF/paA2iipelvMwjQUKWydcFOJ7f1+ZFcA==
+  dependencies:
+    source-map "^0.6.1"
+    strip-comments "^2.0.1"
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+indent-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+indent-string@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5"
+  integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+  dependencies:
+    once "^1.3.0"
+    wrappy 1
+
+"inherits@2", "inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@~2.0.4":
+  version "2.0.4"
+  resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+  integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==
+
+ini@^1.3.4:
+  version "1.3.8"
+  resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+inline-source-map@~0.6.0:
+  version "0.6.2"
+  resolved "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5"
+  integrity sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==
+  dependencies:
+    source-map "~0.5.3"
+
+inline-style-parser@0.2.2:
+  version "0.2.2"
+  resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz#d498b4e6de0373458fc610ff793f6b14ebf45633"
+  integrity sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==
+
+insert-if@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/insert-if/-/insert-if-1.2.0.tgz#5b878ead294a727eb75598ef8cf9244f33e17157"
+  integrity sha512-UFXvgVVosbyfa7tsowU8nOLHp/fGe7oGi5vYMy9wEQio8olkf+P7sHssmYnUe991du5EDlD+n/5cW17WgM7Cog==
+
+insert-module-globals@^7.2.1:
+  version "7.2.1"
+  resolved "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz#d5e33185181a4e1f33b15f7bf100ee91890d5cb3"
+  integrity sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==
+  dependencies:
+    JSONStream "^1.0.3"
+    acorn-node "^1.5.2"
+    combine-source-map "^0.8.0"
+    concat-stream "^1.6.1"
+    is-buffer "^1.1.0"
+    path-is-absolute "^1.0.1"
+    process "~0.11.0"
+    through2 "^2.0.0"
+    undeclared-identifiers "^1.1.2"
+    xtend "^4.0.0"
+
+"internal-slot@^1.0.3", "internal-slot@^1.0.4", "internal-slot@^1.0.5":
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
+  integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
+  dependencies:
+    get-intrinsic "^1.2.0"
+    has "^1.0.3"
+    side-channel "^1.0.4"
+
+interpret@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
+  integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
+
+into-stream@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6"
+  integrity sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==
+  dependencies:
+    from2 "^2.1.1"
+    p-is-promise "^1.1.0"
+
+ip-address@^7.1.0:
+  version "7.1.0"
+  resolved "https://registry.npmjs.org/ip-address/-/ip-address-7.1.0.tgz#4a9c699e75b51cbeb18b38de8ed216efa1a490c5"
+  integrity sha512-V9pWC/VJf2lsXqP7IWJ+pe3P1/HCYGBMZrrnT62niLGjAfCbeiwXMUxaeHvnVlz19O27pvXP4azs+Pj/A0x+SQ==
+  dependencies:
+    jsbn "1.1.0"
+    sprintf-js "1.1.2"
+
+ip@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
+  integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
+
+is-any-array@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e"
+  integrity sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==
+
+"is-arguments@^1.0.4", "is-arguments@^1.1.1":
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
+  integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+"is-array-buffer@^3.0.1", "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#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
+  integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.2.0"
+    is-typed-array "^1.1.10"
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-async-function@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646"
+  integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-bigint@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+  integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+  dependencies:
+    has-bigints "^1.0.1"
+
+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#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-boolean-object@^1.1.0:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+  integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-buffer@^1.1.0:
+  version "1.1.6"
+  resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-buffer@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
+  integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
+
+"is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.7":
+  version "1.2.7"
+  resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+  integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
+"is-core-module@^2.11.0", "is-core-module@^2.5.0", "is-core-module@^2.9.0":
+  version "2.12.1"
+  resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
+  integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
+  dependencies:
+    has "^1.0.3"
+
+is-core-module@^2.13.0:
+  version "2.13.0"
+  resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db"
+  integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==
+  dependencies:
+    has "^1.0.3"
+
+"is-date-object@^1.0.1", "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#0841d5536e724c25597bf6ea62e1bd38298df31f"
+  integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-docker@^2.1.1:
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-finalizationregistry@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6"
+  integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==
+  dependencies:
+    call-bind "^1.0.2"
+
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+  integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+"is-generator-function@^1.0.10", "is-generator-function@^1.0.7":
+  version "1.0.10"
+  resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
+  integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1":
+  version "4.0.3"
+  resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+"is-in-browser@^1.0.2", "is-in-browser@^1.1.3":
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
+  integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==
+
+is-jpg@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/is-jpg/-/is-jpg-3.0.0.tgz#f97b4ab6de92401650cb4f54ec0a6ad79c51367f"
+  integrity sha512-Vcd67KWHZblEKEBrtP25qLZ8wN9ICoAhl1pKUqD7SM7hf2qtuRl7loDgP5Zigh2oN/+7uj+KVyC0eRJvgOEFeQ==
+
+is-lambda@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
+  integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
+
+"is-map@^2.0.1", "is-map@^2.0.2":
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
+  integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
+
+is-natural-number@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
+  integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==
+
+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#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+  integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
+is-number-object@^1.0.4:
+  version "1.0.7"
+  resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+  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#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-object@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf"
+  integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==
+
+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#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+  integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+"is-plain-obj@^1.0.0", "is-plain-obj@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+  integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
+
+is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+is-png@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz#ee8cbc9e9b050425cedeeb4a6fb74a649b0a4a8d"
+  integrity sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==
+
+is-potential-custom-element-name@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
+  integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
+
+is-regex@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+  integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-relative@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
+  integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
+  dependencies:
+    is-unc-path "^1.0.0"
+
+"is-retry-allowed@^1.0.0", "is-retry-allowed@^1.1.0":
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
+  integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
+
+"is-set@^2.0.1", "is-set@^2.0.2":
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
+  integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
+
+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#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+  integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+  dependencies:
+    call-bind "^1.0.2"
+
+"is-stream@^1.0.0", "is-stream@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
+
+is-stream@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+  integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-stream@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
+  integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
+
+"is-string@^1.0.5", "is-string@^1.0.7":
+  version "1.0.7"
+  resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+  integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+"is-symbol@^1.0.2", "is-symbol@^1.0.3":
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+  integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+  dependencies:
+    has-symbols "^1.0.2"
+
+"is-typed-array@^1.1.10", "is-typed-array@^1.1.3", "is-typed-array@^1.1.9":
+  version "1.1.10"
+  resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f"
+  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-unc-path@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
+  integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
+  dependencies:
+    unc-path-regex "^0.1.2"
+
+is-weakmap@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
+  integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
+
+is-weakref@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+  integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+  dependencies:
+    call-bind "^1.0.2"
+
+is-weakset@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d"
+  integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.1.1"
+
+isarray@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+  integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
+
+isarray@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+  integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
+isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+"istanbul-lib-coverage@^3.0.0", "istanbul-lib-coverage@^3.2.0":
+  version "3.2.0"
+  resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
+  integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
+
+istanbul-lib-instrument@^5.0.4:
+  version "5.2.1"
+  resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d"
+  integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==
+  dependencies:
+    "@babel/core" "^7.12.3"
+    "@babel/parser" "^7.14.7"
+    "@istanbuljs/schema" "^0.1.2"
+    istanbul-lib-coverage "^3.2.0"
+    semver "^6.3.0"
+
+istanbul-lib-instrument@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz#7a8af094cbfff1d5bb280f62ce043695ae8dd5b8"
+  integrity sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==
+  dependencies:
+    "@babel/core" "^7.12.3"
+    "@babel/parser" "^7.14.7"
+    "@istanbuljs/schema" "^0.1.2"
+    istanbul-lib-coverage "^3.2.0"
+    semver "^7.5.4"
+
+istanbul-lib-report@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
+  integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
+  dependencies:
+    istanbul-lib-coverage "^3.0.0"
+    make-dir "^3.0.0"
+    supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
+  integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
+  dependencies:
+    debug "^4.1.1"
+    istanbul-lib-coverage "^3.0.0"
+    source-map "^0.6.1"
+
+istanbul-reports@^3.1.3:
+  version "3.1.6"
+  resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a"
+  integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==
+  dependencies:
+    html-escaper "^2.0.0"
+    istanbul-lib-report "^3.0.0"
+
+isurl@^1.0.0-alpha5:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
+  integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==
+  dependencies:
+    has-to-string-tag-x "^1.2.0"
+    is-object "^1.0.1"
+
+iterator.prototype@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz#690c88b043d821f783843aaf725d7ac3b62e3b46"
+  integrity sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==
+  dependencies:
+    define-properties "^1.1.4"
+    get-intrinsic "^1.1.3"
+    has-symbols "^1.0.3"
+    has-tostringtag "^1.0.0"
+    reflect.getprototypeof "^1.0.3"
+
+jackspeak@^2.0.3:
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6"
+  integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==
+  dependencies:
+    "@isaacs/cliui" "^8.0.2"
+    "@pkgjs/parseargs" "^0.11.0"
+
+jake@^10.8.5:
+  version "10.8.7"
+  resolved "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f"
+  integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==
+  dependencies:
+    async "^3.2.3"
+    chalk "^4.0.2"
+    filelist "^1.0.4"
+    minimatch "^3.1.2"
+
+javascript-natural-sort@^0.7.1:
+  version "0.7.1"
+  resolved "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59"
+  integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==
+
+jest-changed-files@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz#97cfdc93f74fb8af2a1acb0b78f836f1fb40c449"
+  integrity sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==
+  dependencies:
+    execa "^5.0.0"
+    jest-util "^29.6.3"
+    p-limit "^3.1.0"
+
+jest-circus@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz#f074c8d795e0cc0f2ebf0705086b1be6a9a8722f"
+  integrity sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==
+  dependencies:
+    "@jest/environment" "^29.6.4"
+    "@jest/expect" "^29.6.4"
+    "@jest/test-result" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    co "^4.6.0"
+    dedent "^1.0.0"
+    is-generator-fn "^2.0.0"
+    jest-each "^29.6.3"
+    jest-matcher-utils "^29.6.4"
+    jest-message-util "^29.6.3"
+    jest-runtime "^29.6.4"
+    jest-snapshot "^29.6.4"
+    jest-util "^29.6.3"
+    p-limit "^3.1.0"
+    pretty-format "^29.6.3"
+    pure-rand "^6.0.0"
+    slash "^3.0.0"
+    stack-utils "^2.0.3"
+
+jest-cli@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz#ad52f2dfa1b0291de7ec7f8d7c81ac435521ede0"
+  integrity sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==
+  dependencies:
+    "@jest/core" "^29.6.4"
+    "@jest/test-result" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    chalk "^4.0.0"
+    exit "^0.1.2"
+    graceful-fs "^4.2.9"
+    import-local "^3.0.2"
+    jest-config "^29.6.4"
+    jest-util "^29.6.3"
+    jest-validate "^29.6.3"
+    prompts "^2.0.1"
+    yargs "^17.3.1"
+
+jest-config@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz#eff958ee41d4e1ee7a6106d02b74ad9fc427d79e"
+  integrity sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==
+  dependencies:
+    "@babel/core" "^7.11.6"
+    "@jest/test-sequencer" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    babel-jest "^29.6.4"
+    chalk "^4.0.0"
+    ci-info "^3.2.0"
+    deepmerge "^4.2.2"
+    glob "^7.1.3"
+    graceful-fs "^4.2.9"
+    jest-circus "^29.6.4"
+    jest-environment-node "^29.6.4"
+    jest-get-type "^29.6.3"
+    jest-regex-util "^29.6.3"
+    jest-resolve "^29.6.4"
+    jest-runner "^29.6.4"
+    jest-util "^29.6.3"
+    jest-validate "^29.6.3"
+    micromatch "^4.0.4"
+    parse-json "^5.2.0"
+    pretty-format "^29.6.3"
+    slash "^3.0.0"
+    strip-json-comments "^3.1.1"
+
+jest-diff@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz#85aaa6c92a79ae8cd9a54ebae8d5b6d9a513314a"
+  integrity sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==
+  dependencies:
+    chalk "^4.0.0"
+    diff-sequences "^29.6.3"
+    jest-get-type "^29.6.3"
+    pretty-format "^29.6.3"
+
+jest-docblock@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz#293dca5188846c9f7c0c2b1bb33e5b11f21645f2"
+  integrity sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==
+  dependencies:
+    detect-newline "^3.0.0"
+
+jest-each@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz#1956f14f5f0cb8ae0b2e7cabc10bb03ec817c142"
+  integrity sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==
+  dependencies:
+    "@jest/types" "^29.6.3"
+    chalk "^4.0.0"
+    jest-get-type "^29.6.3"
+    jest-util "^29.6.3"
+    pretty-format "^29.6.3"
+
+jest-environment-jsdom@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.4.tgz#0daf44454041f9e1ef7fa82eb1bd43426a82eb1c"
+  integrity sha512-K6wfgUJ16DoMs02JYFid9lOsqfpoVtyJxpRlnTxUHzvZWBnnh2VNGRB9EC1Cro96TQdq5TtSjb3qUjNaJP9IyA==
+  dependencies:
+    "@jest/environment" "^29.6.4"
+    "@jest/fake-timers" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    "@types/jsdom" "^20.0.0"
+    "@types/node" "*"
+    jest-mock "^29.6.3"
+    jest-util "^29.6.3"
+    jsdom "^20.0.0"
+
+jest-environment-node@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz#4ce311549afd815d3cafb49e60a1e4b25f06d29f"
+  integrity sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==
+  dependencies:
+    "@jest/environment" "^29.6.4"
+    "@jest/fake-timers" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    jest-mock "^29.6.3"
+    jest-util "^29.6.3"
+
+jest-get-type@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1"
+  integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==
+
+jest-haste-map@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz#97143ce833829157ea7025204b08f9ace609b96a"
+  integrity sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==
+  dependencies:
+    "@jest/types" "^29.6.3"
+    "@types/graceful-fs" "^4.1.3"
+    "@types/node" "*"
+    anymatch "^3.0.3"
+    fb-watchman "^2.0.0"
+    fsevents "^2.3.2"
+    graceful-fs "^4.2.9"
+    jest-regex-util "^29.6.3"
+    jest-util "^29.6.3"
+    jest-worker "^29.6.4"
+    micromatch "^4.0.4"
+    walker "^1.0.8"
+
+jest-leak-detector@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz#b9661bc3aec8874e59aff361fa0c6d7cd507ea01"
+  integrity sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==
+  dependencies:
+    jest-get-type "^29.6.3"
+    pretty-format "^29.6.3"
+
+jest-matcher-utils@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz#327db7ababea49455df3b23e5d6109fe0c709d24"
+  integrity sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==
+  dependencies:
+    chalk "^4.0.0"
+    jest-diff "^29.6.4"
+    jest-get-type "^29.6.3"
+    pretty-format "^29.6.3"
+
+jest-message-util@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz#bce16050d86801b165f20cfde34dc01d3cf85fbf"
+  integrity sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==
+  dependencies:
+    "@babel/code-frame" "^7.12.13"
+    "@jest/types" "^29.6.3"
+    "@types/stack-utils" "^2.0.0"
+    chalk "^4.0.0"
+    graceful-fs "^4.2.9"
+    micromatch "^4.0.4"
+    pretty-format "^29.6.3"
+    slash "^3.0.0"
+    stack-utils "^2.0.3"
+
+jest-mock@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz#433f3fd528c8ec5a76860177484940628bdf5e0a"
+  integrity sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==
+  dependencies:
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    jest-util "^29.6.3"
+
+jest-pnp-resolver@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e"
+  integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==
+
+jest-regex-util@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52"
+  integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==
+
+jest-resolve-dependencies@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz#20156b33c7eacbb6bb77aeba4bed0eab4a3f8734"
+  integrity sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==
+  dependencies:
+    jest-regex-util "^29.6.3"
+    jest-snapshot "^29.6.4"
+
+jest-resolve@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz#e34cb06f2178b429c38455d98d1a07572ac9faa3"
+  integrity sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==
+  dependencies:
+    chalk "^4.0.0"
+    graceful-fs "^4.2.9"
+    jest-haste-map "^29.6.4"
+    jest-pnp-resolver "^1.2.2"
+    jest-util "^29.6.3"
+    jest-validate "^29.6.3"
+    resolve "^1.20.0"
+    resolve.exports "^2.0.0"
+    slash "^3.0.0"
+
+jest-runner@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz#b3b8ccb85970fde0fae40c73ee11eb75adccfacf"
+  integrity sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==
+  dependencies:
+    "@jest/console" "^29.6.4"
+    "@jest/environment" "^29.6.4"
+    "@jest/test-result" "^29.6.4"
+    "@jest/transform" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    emittery "^0.13.1"
+    graceful-fs "^4.2.9"
+    jest-docblock "^29.6.3"
+    jest-environment-node "^29.6.4"
+    jest-haste-map "^29.6.4"
+    jest-leak-detector "^29.6.3"
+    jest-message-util "^29.6.3"
+    jest-resolve "^29.6.4"
+    jest-runtime "^29.6.4"
+    jest-util "^29.6.3"
+    jest-watcher "^29.6.4"
+    jest-worker "^29.6.4"
+    p-limit "^3.1.0"
+    source-map-support "0.5.13"
+
+jest-runtime@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz#b0bc495c9b6b12a0a7042ac34ca9bb85f8cd0ded"
+  integrity sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==
+  dependencies:
+    "@jest/environment" "^29.6.4"
+    "@jest/fake-timers" "^29.6.4"
+    "@jest/globals" "^29.6.4"
+    "@jest/source-map" "^29.6.3"
+    "@jest/test-result" "^29.6.4"
+    "@jest/transform" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    cjs-module-lexer "^1.0.0"
+    collect-v8-coverage "^1.0.0"
+    glob "^7.1.3"
+    graceful-fs "^4.2.9"
+    jest-haste-map "^29.6.4"
+    jest-message-util "^29.6.3"
+    jest-mock "^29.6.3"
+    jest-regex-util "^29.6.3"
+    jest-resolve "^29.6.4"
+    jest-snapshot "^29.6.4"
+    jest-util "^29.6.3"
+    slash "^3.0.0"
+    strip-bom "^4.0.0"
+
+jest-snapshot@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz#9833eb6b66ff1541c7fd8ceaa42d541f407b4876"
+  integrity sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==
+  dependencies:
+    "@babel/core" "^7.11.6"
+    "@babel/generator" "^7.7.2"
+    "@babel/plugin-syntax-jsx" "^7.7.2"
+    "@babel/plugin-syntax-typescript" "^7.7.2"
+    "@babel/types" "^7.3.3"
+    "@jest/expect-utils" "^29.6.4"
+    "@jest/transform" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    babel-preset-current-node-syntax "^1.0.0"
+    chalk "^4.0.0"
+    expect "^29.6.4"
+    graceful-fs "^4.2.9"
+    jest-diff "^29.6.4"
+    jest-get-type "^29.6.3"
+    jest-matcher-utils "^29.6.4"
+    jest-message-util "^29.6.3"
+    jest-util "^29.6.3"
+    natural-compare "^1.4.0"
+    pretty-format "^29.6.3"
+    semver "^7.5.3"
+
+jest-util@^29.5.0:
+  version "29.5.0"
+  resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f"
+  integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==
+  dependencies:
+    "@jest/types" "^29.5.0"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    ci-info "^3.2.0"
+    graceful-fs "^4.2.9"
+    picomatch "^2.2.3"
+
+jest-util@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz#e15c3eac8716440d1ed076f09bc63ace1aebca63"
+  integrity sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==
+  dependencies:
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    ci-info "^3.2.0"
+    graceful-fs "^4.2.9"
+    picomatch "^2.2.3"
+
+jest-validate@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz#a75fca774cfb1c5758c70d035d30a1f9c2784b4d"
+  integrity sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==
+  dependencies:
+    "@jest/types" "^29.6.3"
+    camelcase "^6.2.0"
+    chalk "^4.0.0"
+    jest-get-type "^29.6.3"
+    leven "^3.1.0"
+    pretty-format "^29.6.3"
+
+jest-watcher@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz#633eb515ae284aa67fd6831f1c9d1b534cf0e0ba"
+  integrity sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==
+  dependencies:
+    "@jest/test-result" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    "@types/node" "*"
+    ansi-escapes "^4.2.1"
+    chalk "^4.0.0"
+    emittery "^0.13.1"
+    jest-util "^29.6.3"
+    string-length "^4.0.1"
+
+jest-worker@^27.4.5:
+  version "27.5.1"
+  resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+  integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+jest-worker@^29.4.3:
+  version "29.5.0"
+  resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d"
+  integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==
+  dependencies:
+    "@types/node" "*"
+    jest-util "^29.5.0"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+jest-worker@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz#f34279f4afc33c872b470d4af21b281ac616abd3"
+  integrity sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==
+  dependencies:
+    "@types/node" "*"
+    jest-util "^29.6.3"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+jest@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz#7c48e67a445ba264b778253b5d78d4ebc9d0a622"
+  integrity sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==
+  dependencies:
+    "@jest/core" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    import-local "^3.0.2"
+    jest-cli "^29.6.4"
+
+jiti@^1.18.2:
+  version "1.18.2"
+  resolved "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd"
+  integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==
+
+jmespath@^0.16.0:
+  version "0.16.0"
+  resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076"
+  integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==
+
+"js-tokens@^3.0.0 || ^4.0.0", "js-tokens@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+  version "3.14.1"
+  resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+  integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^4.0.0"
+
+js-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+  dependencies:
+    argparse "^2.0.1"
+
+jsbn@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
+  integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
+
+jsdom@^20.0.0:
+  version "20.0.3"
+  resolved "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db"
+  integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==
+  dependencies:
+    abab "^2.0.6"
+    acorn "^8.8.1"
+    acorn-globals "^7.0.0"
+    cssom "^0.5.0"
+    cssstyle "^2.3.0"
+    data-urls "^3.0.2"
+    decimal.js "^10.4.2"
+    domexception "^4.0.0"
+    escodegen "^2.0.0"
+    form-data "^4.0.0"
+    html-encoding-sniffer "^3.0.0"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.1"
+    is-potential-custom-element-name "^1.0.1"
+    nwsapi "^2.2.2"
+    parse5 "^7.1.1"
+    saxes "^6.0.0"
+    symbol-tree "^3.2.4"
+    tough-cookie "^4.1.2"
+    w3c-xmlserializer "^4.0.0"
+    webidl-conversions "^7.0.0"
+    whatwg-encoding "^2.0.0"
+    whatwg-mimetype "^3.0.0"
+    whatwg-url "^11.0.0"
+    ws "^8.11.0"
+    xml-name-validator "^4.0.0"
+
+jsesc@^2.5.1:
+  version "2.5.2"
+  resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+  version "0.5.0"
+  resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+  integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
+
+json-bignumber@^1.0.1:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/json-bignumber/-/json-bignumber-1.1.1.tgz#5f52f6e2d1026dddfc8bf0eae2aac364cc92eff2"
+  integrity sha512-RWC/dAB/vOVosewwvPIfWgI/061fXZ0PbZxXr8GJvw8sDr8OzDm8vt7CZUdelg3QtKRdH4TUjnb++CXlRFRnPg==
+  dependencies:
+    bignumber.js "^9.0.0"
+
+json-buffer@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
+  integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==
+
+"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1":
+  version "2.3.1"
+  resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+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#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-source-map@^0.6.1:
+  version "0.6.1"
+  resolved "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz#e0b1f6f4ce13a9ad57e2ae165a24d06e62c79a0f"
+  integrity sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==
+
+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#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+  integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json5@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+  integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
+  dependencies:
+    minimist "^1.2.0"
+
+"json5@^2.1.2", "json5@^2.2.2", "json5@^2.2.3":
+  version "2.2.3"
+  resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+  integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsoneditor@^9.5.4:
+  version "9.10.2"
+  resolved "https://registry.npmjs.org/jsoneditor/-/jsoneditor-9.10.2.tgz#c8c3acb59d674931971f059f7c7015c52e5e7460"
+  integrity sha512-sT9U8T9MB7We5uyCnofugqYPJtQ5rPJngFlvpdtyFTFKFjOMnlWE1jVhFwjTXwGBoFeiLS+S6rVuhIhJ35Jutw==
+  dependencies:
+    ace-builds "^1.20.0"
+    ajv "^6.12.6"
+    javascript-natural-sort "^0.7.1"
+    jmespath "^0.16.0"
+    json-source-map "^0.6.1"
+    jsonrepair "^3.1.0"
+    mobius1-selectr "^2.4.13"
+    picomodal "^3.0.0"
+    vanilla-picker "^2.12.1"
+
+jsonparse@^1.2.0:
+  version "1.3.1"
+  resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+  integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
+
+jsonrepair@^3.1.0:
+  version "3.2.0"
+  resolved "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.2.0.tgz#ca1b6fdd23ae76bb8c82742f7a5773a7cef3d651"
+  integrity sha512-6eHBc2z5vipym4S8rzTcCXQBLWpkSzi9bk7I3xTdUxRzXyYvfjoVZzJ97N4C/9vcKI9NgNp3slPwHufDr0rFYw==
+
+jss-plugin-camel-case@^10.5.1:
+  version "10.10.0"
+  resolved "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz#27ea159bab67eb4837fa0260204eb7925d4daa1c"
+  integrity sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    hyphenate-style-name "^1.0.3"
+    jss "10.10.0"
+
+jss-plugin-default-unit@^10.5.1:
+  version "10.10.0"
+  resolved "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz#db3925cf6a07f8e1dd459549d9c8aadff9804293"
+  integrity sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    jss "10.10.0"
+
+jss-plugin-global@^10.5.1:
+  version "10.10.0"
+  resolved "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz#1c55d3c35821fab67a538a38918292fc9c567efd"
+  integrity sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    jss "10.10.0"
+
+jss-plugin-nested@^10.5.1:
+  version "10.10.0"
+  resolved "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz#db872ed8925688806e77f1fc87f6e62264513219"
+  integrity sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    jss "10.10.0"
+    tiny-warning "^1.0.2"
+
+jss-plugin-props-sort@^10.5.1:
+  version "10.10.0"
+  resolved "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz#67f4dd4c70830c126f4ec49b4b37ccddb680a5d7"
+  integrity sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    jss "10.10.0"
+
+jss-plugin-rule-value-function@^10.5.1:
+  version "10.10.0"
+  resolved "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz#7d99e3229e78a3712f78ba50ab342e881d26a24b"
+  integrity sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    jss "10.10.0"
+    tiny-warning "^1.0.2"
+
+jss-plugin-vendor-prefixer@^10.5.1:
+  version "10.10.0"
+  resolved "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz#c01428ef5a89f2b128ec0af87a314d0c767931c7"
+  integrity sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    css-vendor "^2.0.8"
+    jss "10.10.0"
+
+"jss@10.10.0", "jss@^10.5.1":
+  version "10.10.0"
+  resolved "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz#a75cc85b0108c7ac8c7b7d296c520a3e4fbc6ccc"
+  integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    csstype "^3.0.2"
+    is-in-browser "^1.1.3"
+    tiny-warning "^1.0.2"
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0":
+  version "3.3.3"
+  resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
+  integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==
+  dependencies:
+    array-includes "^3.1.5"
+    object.assign "^4.1.3"
+
+junk@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1"
+  integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==
+
+keyv@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373"
+  integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==
+  dependencies:
+    json-buffer "3.0.0"
+
+"kind-of@^6.0.2", "kind-of@^6.0.3":
+  version "6.0.3"
+  resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+  integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+klona@^2.0.4:
+  version "2.0.6"
+  resolved "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22"
+  integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==
+
+labeled-stream-splicer@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21"
+  integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==
+  dependencies:
+    inherits "^2.0.1"
+    stream-splicer "^2.0.0"
+
+leaflet@^1.5.1:
+  version "1.9.4"
+  resolved "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz#23fae724e282fa25745aff82ca4d394748db7d8d"
+  integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==
+
+leven@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+  integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levn@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+  integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+  dependencies:
+    prelude-ls "^1.2.1"
+    type-check "~0.4.0"
+
+"lilconfig@^2.0.3", "lilconfig@^2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
+  integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+
+lines-and-columns@^1.1.6:
+  version "1.2.4"
+  resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+  integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+loader-runner@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+  integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+
+"loader-utils@^1.0.3", "loader-utils@^1.1.0":
+  version "1.4.2"
+  resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3"
+  integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^1.0.1"
+
+loader-utils@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
+  integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^2.1.2"
+
+loader-utils@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576"
+  integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==
+
+locate-path@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+  dependencies:
+    p-locate "^4.1.0"
+
+locate-path@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+  dependencies:
+    p-locate "^5.0.0"
+
+lodash._basebind@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.3.0.tgz#2b5bc452a0e106143b21869f233bdb587417d248"
+  integrity sha512-SHqM7YCuJ+BeGTs7lqpWnmdHEeF4MWxS3dksJctHFNxR81FXPOzA4bS5Vs5CpcGTkBpM8FCl+YEbQEblRw8ABg==
+  dependencies:
+    lodash._basecreate "~2.3.0"
+    lodash._setbinddata "~2.3.0"
+    lodash.isobject "~2.3.0"
+
+lodash._basecreate@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.3.0.tgz#9b88a86a4dcff7b7f3c61d83a2fcfc0671ec9de0"
+  integrity sha512-vwZaWldZwS2y9b99D8i9+WtgiZXbHKsBsMrpxJEqTsNW20NhJo5W8PBQkeQO9CmxuqEYn8UkMnfEM2MMT4cVrw==
+  dependencies:
+    lodash._renative "~2.3.0"
+    lodash.isobject "~2.3.0"
+    lodash.noop "~2.3.0"
+
+lodash._basecreatecallback@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.3.0.tgz#37b2ab17591a339e988db3259fcd46019d7ac362"
+  integrity sha512-Ev+pDzzfVfgbiucpXijconLGRBar7/+KNCf05kSnk4CmdDVhAy1RdbU9efCJ/o9GXI08JdUGwZ+5QJ3QX3kj0g==
+  dependencies:
+    lodash._setbinddata "~2.3.0"
+    lodash.bind "~2.3.0"
+    lodash.identity "~2.3.0"
+    lodash.support "~2.3.0"
+
+lodash._basecreatewrapper@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.3.0.tgz#aa0c61ad96044c3933376131483a9759c3651247"
+  integrity sha512-YLycQ7k8AB9Wc1EOvLNxuRWcqipDkMXq2GCgnLWQR6qtgTb3gY3LELzEpnFshrEO4LOLs+R2EpcY+uCOZaLQ8Q==
+  dependencies:
+    lodash._basecreate "~2.3.0"
+    lodash._setbinddata "~2.3.0"
+    lodash._slice "~2.3.0"
+    lodash.isobject "~2.3.0"
+
+lodash._createwrapper@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.3.0.tgz#d1aae1102dadf440e8e06fc133a6edd7fe146075"
+  integrity sha512-XjaI/rzg9W+WO4WJDQ+PRlHD5sAMJ1RhJLuT65cBxLCb1kIYs4U20jqvTDGAWyVT3c34GYiLd9AreHYuB/8yJA==
+  dependencies:
+    lodash._basebind "~2.3.0"
+    lodash._basecreatewrapper "~2.3.0"
+    lodash.isfunction "~2.3.0"
+
+lodash._objecttypes@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.3.0.tgz#6a3ea3987dd6eeb8021b2d5c9c303549cc2bae1e"
+  integrity sha512-jbA6QyHt9cw3BzvbWzIcnU3Z12jSneT6xBgz3Y782CJsN1tV5aTBKrFo2B4AkeHBNaxSrbPYZZpi1Lwj3xjdtg==
+
+lodash._renative@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash._renative/-/lodash._renative-2.3.0.tgz#77d8edd4ced26dd5971f9e15a5f772e4e317fbd3"
+  integrity sha512-v44MRirqYqZGK/h5UKoVqXWF2L+LUiLTU+Ogu5rHRVWJUA1uWIlHaMpG8f/OA8j++BzPMQij9+erXHtgFcbuwg==
+
+lodash._setbinddata@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.3.0.tgz#e5610490acd13277d59858d95b5f2727f1508f04"
+  integrity sha512-xMFfbF7dL+sFtrdE49uHFmfpBAEwlFtfgMp86nQRlAF6aizYL+3MTbnYMKJSkP1W501PhsgiBED5kBbZd8kR2g==
+  dependencies:
+    lodash._renative "~2.3.0"
+    lodash.noop "~2.3.0"
+
+lodash._shimkeys@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.3.0.tgz#611f93149e3e6c721096b48769ef29537ada8ba9"
+  integrity sha512-9Iuyi7TiWMGa/9+2rqEE+Zwye4b/U2w7Saw6UX1h6Xs88mEER+uz9FZcEBPKMVKsad9Pw5GNAcIBRnW2jNpneQ==
+  dependencies:
+    lodash._objecttypes "~2.3.0"
+
+lodash._slice@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.3.0.tgz#147198132859972e4680ca29a5992c855669aa5c"
+  integrity sha512-7C61GhzRUv36gTafr+RIb+AomCAYsSATEoK4OP0VkNBcwvsM022Z22AVgqjjzikeNO1U29LzsJZDvLbiNPUYvA==
+
+lodash.bind@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.3.0.tgz#c2a8e18b68e5ecc152e2b168266116fea5b016cc"
+  integrity sha512-goakyOo+FMN8lttMPnZ0UNlr5RlzX4IrUXyTJPT2A0tGCMXySupond9wzvDqTvVmYTcQjIKGrj8naJDS2xWAlQ==
+  dependencies:
+    lodash._createwrapper "~2.3.0"
+    lodash._renative "~2.3.0"
+    lodash._slice "~2.3.0"
+
+lodash.debounce@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+  integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+
+lodash.foreach@2.3.x:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-2.3.0.tgz#083404c91e846ee77245fdf9d76519c68b2af168"
+  integrity sha512-yLnyptVRJd0//AbGp480grgQG9iaDIV5uOgSbpurRy1dYybPbjNTLQ3FyLEQ84buVLPG7jyaiyvpzgfOutRB3Q==
+  dependencies:
+    lodash._basecreatecallback "~2.3.0"
+    lodash.forown "~2.3.0"
+
+lodash.forown@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash.forown/-/lodash.forown-2.3.0.tgz#24fb4aaf800d45fc2dc60bfec3ce04c836a3ad7f"
+  integrity sha512-dUnCsuQTtq3Y7bxPNoEEqjJjPL2ftLtcz2PTeRKvhbpdM514AvnqCjewHGsm/W+dwspIwa14KoWEZeizJ7smxA==
+  dependencies:
+    lodash._basecreatecallback "~2.3.0"
+    lodash._objecttypes "~2.3.0"
+    lodash.keys "~2.3.0"
+
+lodash.identity@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.3.0.tgz#6b01a210c9485355c2a913b48b6711219a173ded"
+  integrity sha512-NYJ2r2cwy3tkx/saqbIZEX6oQUzjWTnGRu7d/zmBjMCZos3eHBxCpbvWFWSetv8jFVrptsp6EbWjzNgBKhUoOA==
+
+lodash.isfunction@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.3.0.tgz#6b2973e47a647cf12e70d676aea13643706e5267"
+  integrity sha512-X5lteBYlCrVO7Qc00fxP8W90fzRp6Ax9XcHANmU3OsZHdSyIVZ9ZlX5QTTpRq8aGY+9I5Rmd0UTzTIIyWPugEQ==
+
+lodash.isobject@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.3.0.tgz#2e16d3fc583da9831968953f2d8e6d73434f6799"
+  integrity sha512-jo1pfV61C4TE8BfEzqaHj6EIKiSkFANJrB6yscwuCJMSRw5tbqjk4Gv7nJzk4Z6nFKobZjGZ8Qd41vmnwgeQqQ==
+  dependencies:
+    lodash._objecttypes "~2.3.0"
+
+"lodash.keys@2.3.x", "lodash.keys@~2.3.0":
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.3.0.tgz#b350f4f92caa9f45a4a2ecf018454cf2f28ae253"
+  integrity sha512-c0UW0ffqMxSCtoVbmVt2lERJLkEqgoOn2ejPsWXzr0ZrqRbl3uruGgwHzhtqXxi6K/ei3Ey7zimOqSwXgzazPg==
+  dependencies:
+    lodash._renative "~2.3.0"
+    lodash._shimkeys "~2.3.0"
+    lodash.isobject "~2.3.0"
+
+lodash.memoize@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+  integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
+
+lodash.memoize@~3.0.3:
+  version "3.0.4"
+  resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"
+  integrity sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==
+
+lodash.merge@^4.6.2:
+  version "4.6.2"
+  resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash.noop@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.3.0.tgz#3059d628d51bbf937cd2a0b6fc3a7f212a669c2c"
+  integrity sha512-NpSm8HRm1WkBBWHUveDukLF4Kfb5P5E3fjHc9Qre9A11nNubozLWD2wH3UBTZbu+KSuX8aSUvy9b+PUyEceJ8g==
+
+lodash.support@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/lodash.support/-/lodash.support-2.3.0.tgz#7eaf038af4f0d6aab776b44aa6dcfc80334c9bfd"
+  integrity sha512-etc7VWbB0U3Iya8ixj2xy4sDBN3jvPX7ODi8iXtn4KkkjNpdngrdc7Vlt5jub/Vgqx6/dWtp7Ml9awhCQPYKGQ==
+  dependencies:
+    lodash._renative "~2.3.0"
+
+lodash.uniq@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+  integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
+
+"lodash@4", "lodash@4.*", "lodash@^4.14.1", "lodash@^4.17.10", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.20", "lodash@^4.17.21":
+  version "4.17.21"
+  resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+"loose-envify@^1.1.0", "loose-envify@^1.4.0":
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+  dependencies:
+    js-tokens "^3.0.0 || ^4.0.0"
+
+lower-case@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+  integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+  dependencies:
+    tslib "^2.0.3"
+
+lowercase-keys@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
+  integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==
+
+lowercase-keys@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+  integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lru-cache@^4.0.1:
+  version "4.1.5"
+  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+  dependencies:
+    pseudomap "^1.0.2"
+    yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+  dependencies:
+    yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+  dependencies:
+    yallist "^4.0.0"
+
+lru-cache@^7.7.1:
+  version "7.18.3"
+  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+  integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+
+lru-cache@^9.1.1:
+  version "9.1.2"
+  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz#255fdbc14b75589d6d0e73644ca167a8db506835"
+  integrity sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==
+
+lz-string@^1.5.0:
+  version "1.5.0"
+  resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
+  integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
+
+"make-dir@^1.0.0", "make-dir@^1.2.0":
+  version "1.3.0"
+  resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+  integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
+  dependencies:
+    pify "^3.0.0"
+
+"make-dir@^3.0.0", "make-dir@^3.0.2", "make-dir@^3.1.0":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+  dependencies:
+    semver "^6.0.0"
+
+make-fetch-happen@^11.0.3:
+  version "11.1.1"
+  resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f"
+  integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==
+  dependencies:
+    agentkeepalive "^4.2.1"
+    cacache "^17.0.0"
+    http-cache-semantics "^4.1.1"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.0"
+    is-lambda "^1.0.1"
+    lru-cache "^7.7.1"
+    minipass "^5.0.0"
+    minipass-fetch "^3.0.0"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    negotiator "^0.6.3"
+    promise-retry "^2.0.1"
+    socks-proxy-agent "^7.0.0"
+    ssri "^10.0.0"
+
+makeerror@1.0.12:
+  version "1.0.12"
+  resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
+  integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
+  dependencies:
+    tmpl "1.0.5"
+
+map-obj@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+  integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==
+
+map-obj@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
+  integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
+
+marked@^4.0.17:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3"
+  integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==
+
+matches-selector@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.npmjs.org/matches-selector/-/matches-selector-0.0.1.tgz#1df5262243ae341c1a0804dd302048267ac713bb"
+  integrity sha512-Bm8wuvuNGPY3j1Mo23PxieRQAmQQe2qVcqgmpHOp1BEBNgb4dqzn2Dcgu5bYltMosjGi6LD7GPW72zboSdyJQg==
+
+md5.js@^1.3.4:
+  version "1.3.5"
+  resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+  integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+  dependencies:
+    hash-base "^3.0.0"
+    inherits "^2.0.1"
+    safe-buffer "^5.1.2"
+
+mdn-data@2.0.14:
+  version "2.0.14"
+  resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
+  integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
+
+mdn-data@2.0.28:
+  version "2.0.28"
+  resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba"
+  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#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc"
+  integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==
+
+"memoize-one@>=3.1.1 <6":
+  version "5.2.1"
+  resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
+  integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
+
+memoize-one@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
+  integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
+
+meow@^10.1.1:
+  version "10.1.5"
+  resolved "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz#be52a1d87b5f5698602b0f32875ee5940904aa7f"
+  integrity sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==
+  dependencies:
+    "@types/minimist" "^1.2.2"
+    camelcase-keys "^7.0.0"
+    decamelize "^5.0.0"
+    decamelize-keys "^1.1.0"
+    hard-rejection "^2.1.0"
+    minimist-options "4.1.0"
+    normalize-package-data "^3.0.2"
+    read-pkg-up "^8.0.0"
+    redent "^4.0.0"
+    trim-newlines "^4.0.2"
+    type-fest "^1.2.2"
+    yargs-parser "^20.2.9"
+
+merge-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+"merge2@^1.3.0", "merge2@^1.4.1":
+  version "1.4.1"
+  resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+microbuffer@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/microbuffer/-/microbuffer-1.0.0.tgz#8b3832ed40c87d51f47bb234913a698a756d19d2"
+  integrity sha512-O/SUXauVN4x6RaEJFqSPcXNtLFL+QzJHKZlyDVYFwcDDRVca3Fa/37QXXC+4zAGGa4YhHrHxKXuuHvLDIQECtA==
+
+micromatch@^4.0.4:
+  version "4.0.5"
+  resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+  dependencies:
+    braces "^3.0.2"
+    picomatch "^2.3.1"
+
+miller-rabin@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+  integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+  dependencies:
+    bn.js "^4.0.0"
+    brorand "^1.0.1"
+
+"mime-db@1.52.0", "mime-db@^1.28.0":
+  version "1.52.0"
+  resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+"mime-types@^2.1.12", "mime-types@^2.1.27":
+  version "2.1.35"
+  resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+mimic-fn@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-fn@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
+  integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
+
+mimic-response@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+  integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+"min-indent@^1.0.0", "min-indent@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
+  integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+
+mini-css-extract-plugin@^2.7.6:
+  version "2.7.6"
+  resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d"
+  integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==
+  dependencies:
+    schema-utils "^4.0.0"
+
+"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+  integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+  integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
+
+"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2":
+  version "3.1.2"
+  resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimatch@^5.0.1:
+  version "5.1.6"
+  resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
+  integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimatch@^9.0.1:
+  version "9.0.1"
+  resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253"
+  integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimist-options@4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
+  integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
+  dependencies:
+    arrify "^1.0.1"
+    is-plain-obj "^1.1.0"
+    kind-of "^6.0.3"
+
+"minimist@^1.1.0", "minimist@^1.2.0", "minimist@^1.2.5", "minimist@^1.2.6":
+  version "1.2.8"
+  resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+minipass-collect@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+  integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-fetch@^3.0.0:
+  version "3.0.3"
+  resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce"
+  integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==
+  dependencies:
+    encoding "^0.1.13"
+    minipass "^5.0.0"
+    minipass-sized "^1.0.3"
+    minizlib "^2.1.2"
+
+minipass-flush@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+  integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-pipeline@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+  integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-sized@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
+  integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass@^3.0.0:
+  version "3.3.6"
+  resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
+  integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
+  dependencies:
+    yallist "^4.0.0"
+
+minipass@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
+  integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
+
+"minipass@^5.0.0 || ^6.0.2":
+  version "6.0.2"
+  resolved "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81"
+  integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==
+
+"minizlib@^2.1.1", "minizlib@^2.1.2":
+  version "2.1.2"
+  resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+  integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+  dependencies:
+    minipass "^3.0.0"
+    yallist "^4.0.0"
+
+mkdirp-classic@^0.5.2:
+  version "0.5.3"
+  resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+  integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
+"mkdirp@^1.0.3", "mkdirp@^1.0.4":
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+  integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+ml-array-max@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.npmjs.org/ml-array-max/-/ml-array-max-1.2.4.tgz#2373e2b7e51c8807e456cc0ef364c5863713623b"
+  integrity sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==
+  dependencies:
+    is-any-array "^2.0.0"
+
+ml-array-min@^1.2.3:
+  version "1.2.3"
+  resolved "https://registry.npmjs.org/ml-array-min/-/ml-array-min-1.2.3.tgz#662f027c400105816b849cc3cd786915d0801495"
+  integrity sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==
+  dependencies:
+    is-any-array "^2.0.0"
+
+ml-array-rescale@^1.3.7:
+  version "1.3.7"
+  resolved "https://registry.npmjs.org/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz#c4d129320d113a732e62dd963dc1695bba9a5340"
+  integrity sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==
+  dependencies:
+    is-any-array "^2.0.0"
+    ml-array-max "^1.2.4"
+    ml-array-min "^1.2.3"
+
+ml-matrix@^6.5.0:
+  version "6.10.4"
+  resolved "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.10.4.tgz#babee344b20062d9c123aa801c2e5d0d0c7477f6"
+  integrity sha512-rUyEhfNPzqFsltYwvjNeYQXlYEaVea3KgzcJKJteQUj2WVAGFx9fLNRjtMR9mg2B6bd5buxlmkZmxM4hmO+SKg==
+  dependencies:
+    is-any-array "^2.0.0"
+    ml-array-rescale "^1.3.7"
+
+mobius1-selectr@^2.4.13:
+  version "2.4.13"
+  resolved "https://registry.npmjs.org/mobius1-selectr/-/mobius1-selectr-2.4.13.tgz#0019dfd9f984840d6e40f70683ab3ec78ce3b5df"
+  integrity sha512-Mk9qDrvU44UUL0EBhbAA1phfQZ7aMZPjwtL7wkpiBzGh8dETGqfsh50mWoX9EkjDlkONlErWXArHCKfoxVg0Bw==
+
+module-deps@^6.2.3:
+  version "6.2.3"
+  resolved "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz#15490bc02af4b56cf62299c7c17cba32d71a96ee"
+  integrity sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==
+  dependencies:
+    JSONStream "^1.0.3"
+    browser-resolve "^2.0.0"
+    cached-path-relative "^1.0.2"
+    concat-stream "~1.6.0"
+    defined "^1.0.0"
+    detective "^5.2.0"
+    duplexer2 "^0.1.2"
+    inherits "^2.0.1"
+    parents "^1.0.0"
+    readable-stream "^2.0.2"
+    resolve "^1.4.0"
+    stream-combiner2 "^1.1.1"
+    subarg "^1.0.0"
+    through2 "^2.0.0"
+    xtend "^4.0.0"
+
+moment-timezone@^0.5.34:
+  version "0.5.43"
+  resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz#3dd7f3d0c67f78c23cd1906b9b2137a09b3c4790"
+  integrity sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==
+  dependencies:
+    moment "^2.29.4"
+
+moment@^2.29.4:
+  version "2.29.4"
+  resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
+  integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
+
+mousetrap@^1.6.3:
+  version "1.6.5"
+  resolved "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9"
+  integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==
+
+mozjpeg@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/mozjpeg/-/mozjpeg-8.0.0.tgz#cd990d96581626ca64b877146ce22ba00b3b308c"
+  integrity sha512-Ca2Yhah9hG0Iutgsn8MOrAl37P9ThnKsJatjXoWdUO+8X8GeG/6ahvHZrTyqvbs6leMww1SauWUCao/L9qBuFQ==
+  dependencies:
+    bin-build "^3.0.0"
+    bin-wrapper "^4.0.0"
+
+mrmime@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27"
+  integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.0.0:
+  version "2.1.3"
+  resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+nan@^2.14.2:
+  version "2.17.0"
+  resolved "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
+  integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
+  dependencies:
+    node-gyp latest
+
+"nanoid@^3.0.0", "nanoid@^3.3.6":
+  version "3.3.6"
+  resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
+  integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+
+nanopop@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/nanopop/-/nanopop-2.3.0.tgz#a5f672fba27d45d6ecbd0b59789c040072915123"
+  integrity sha512-fzN+T2K7/Ah25XU02MJkPZ5q4Tj5FpjmIYq4rvoHX4yb16HzFdCO6JxFFn5Y/oBhQ8no8fUZavnyIv9/+xkBBw==
+
+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#17b09581988979fddafe0201e931ba933c96cbb4"
+  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#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+  integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+neatequal@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/neatequal/-/neatequal-1.0.0.tgz#2ee1211bc9fa6e4c55715fd210bb05602eb1ae3b"
+  integrity sha512-sVt5awO4a4w24QmAthdrCPiVRW3naB8FGLdyadin01BH+6BzNPEBwGrpwCczQvPlULS6uXTItTe1PJ5P0kYm7A==
+  dependencies:
+    varstream "^0.3.2"
+
+negotiator@^0.6.3:
+  version "0.6.3"
+  resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+  integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
+"neo-async@^2.6.0", "neo-async@^2.6.2":
+  version "2.6.2"
+  resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+nice-try@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+no-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+  integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+  dependencies:
+    lower-case "^2.0.2"
+    tslib "^2.0.3"
+
+"node-gyp@^9.0.0", "node-gyp@latest":
+  version "9.4.0"
+  resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369"
+  integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==
+  dependencies:
+    env-paths "^2.2.0"
+    exponential-backoff "^3.1.1"
+    glob "^7.1.4"
+    graceful-fs "^4.2.6"
+    make-fetch-happen "^11.0.3"
+    nopt "^6.0.0"
+    npmlog "^6.0.0"
+    rimraf "^3.0.2"
+    semver "^7.3.5"
+    tar "^6.1.2"
+    which "^2.0.2"
+
+node-int64@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+  integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
+
+node-releases@^2.0.12:
+  version "2.0.12"
+  resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
+  integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
+
+node-releases@^2.0.13:
+  version "2.0.13"
+  resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
+  integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==
+
+nopt@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
+  integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
+  dependencies:
+    abbrev "^1.0.0"
+
+normalize-package-data@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e"
+  integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==
+  dependencies:
+    hosted-git-info "^4.0.1"
+    is-core-module "^2.5.0"
+    semver "^7.3.4"
+    validate-npm-package-license "^3.0.1"
+
+"normalize-path@^3.0.0", "normalize-path@~3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+  integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+normalize-url@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6"
+  integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==
+  dependencies:
+    prepend-http "^2.0.0"
+    query-string "^5.0.1"
+    sort-keys "^2.0.0"
+
+normalize-url@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
+  integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
+
+notificar@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/notificar/-/notificar-1.0.1.tgz#11ba233c261eee02f5d688ee300ece5f72522887"
+  integrity sha512-jiCay0IY0N+gloyDks+v4WV+OKU4lIXUhQgxw4Iu9bXpw80cNXTezVv46OCK5+E8G8fkt1Bj76DNepULqlQS3Q==
+
+notistack@^1.0.10:
+  version "1.0.10"
+  resolved "https://registry.npmjs.org/notistack/-/notistack-1.0.10.tgz#8db90830034383467a04184f1fa8ff77f4fc58a5"
+  integrity sha512-z0y4jJaVtOoH3kc3GtNUlhNTY+5LE04QDeLVujX3VPhhzg67zw055mZjrBF+nzpv3V9aiPNph1EgRU4+t8kQTQ==
+  dependencies:
+    clsx "^1.1.0"
+    hoist-non-react-statics "^3.3.0"
+
+npm-conf@^1.1.0:
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
+  integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==
+  dependencies:
+    config-chain "^1.1.11"
+    pify "^3.0.0"
+
+npm-run-path@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+  integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
+  dependencies:
+    path-key "^2.0.0"
+
+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#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+  dependencies:
+    path-key "^3.0.0"
+
+npm-run-path@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
+  integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
+  dependencies:
+    path-key "^4.0.0"
+
+npmlog@^6.0.0:
+  version "6.0.2"
+  resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
+  integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
+  dependencies:
+    are-we-there-yet "^3.0.0"
+    console-control-strings "^1.1.0"
+    gauge "^4.0.3"
+    set-blocking "^2.0.0"
+
+nth-check@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+  dependencies:
+    boolbase "^1.0.0"
+
+nwsapi@^2.2.2:
+  version "2.2.7"
+  resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
+  integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
+
+"object-assign@^4.0.1", "object-assign@^4.1.0", "object-assign@^4.1.1":
+  version "4.1.1"
+  resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+"object-inspect@^1.12.3", "object-inspect@^1.9.0":
+  version "1.12.3"
+  resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
+  integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
+
+object-is@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
+  integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+
+object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+"object.assign@^4.1.3", "object.assign@^4.1.4":
+  version "4.1.4"
+  resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
+  integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    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#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23"
+  integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+
+object.fromentries@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73"
+  integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+
+object.hasown@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92"
+  integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==
+  dependencies:
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+
+object.values@^1.1.6:
+  version "1.1.6"
+  resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d"
+  integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+
+"once@^1.3.0", "once@^1.3.1", "once@^1.4.0":
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+  dependencies:
+    wrappy 1
+
+onetime@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+  dependencies:
+    mimic-fn "^2.1.0"
+
+onetime@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
+  integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
+  dependencies:
+    mimic-fn "^4.0.0"
+
+opener@^1.5.2:
+  version "1.5.2"
+  resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
+  integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
+
+optionator@^0.9.1:
+  version "0.9.1"
+  resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+  dependencies:
+    deep-is "^0.1.3"
+    fast-levenshtein "^2.0.6"
+    levn "^0.4.1"
+    prelude-ls "^1.2.1"
+    type-check "^0.4.0"
+    word-wrap "^1.2.3"
+
+optipng-bin@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.1.tgz#beb8e55a52f8a26f885ee57ab44fcf62397d6972"
+  integrity sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==
+  dependencies:
+    bin-build "^3.0.0"
+    bin-wrapper "^4.0.0"
+
+os-browserify@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+  integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==
+
+os-filter-obj@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz#1c0b62d5f3a2442749a2d139e6dddee6e81d8d16"
+  integrity sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==
+  dependencies:
+    arch "^2.1.0"
+
+p-cancelable@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
+  integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==
+
+p-cancelable@^0.4.0:
+  version "0.4.1"
+  resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0"
+  integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==
+
+p-event@^1.0.0:
+  version "1.3.0"
+  resolved "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz#8e6b4f4f65c72bc5b6fe28b75eda874f96a4a085"
+  integrity sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==
+  dependencies:
+    p-timeout "^1.1.1"
+
+p-event@^2.1.0:
+  version "2.3.1"
+  resolved "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6"
+  integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==
+  dependencies:
+    p-timeout "^2.0.1"
+
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
+
+p-is-promise@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
+  integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==
+
+p-limit@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+"p-limit@^3.0.2", "p-limit@^3.1.0":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+  dependencies:
+    yocto-queue "^0.1.0"
+
+p-locate@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+  dependencies:
+    p-limit "^2.2.0"
+
+p-locate@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+  dependencies:
+    p-limit "^3.0.2"
+
+p-map-series@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca"
+  integrity sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==
+  dependencies:
+    p-reduce "^1.0.0"
+
+p-map@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+  dependencies:
+    aggregate-error "^3.0.0"
+
+p-pipe@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-4.0.0.tgz#7e5424569351b2ab452a47826acb93ce09ad6a2c"
+  integrity sha512-HkPfFklpZQPUKBFXzKFB6ihLriIHxnmuQdK9WmLDwe4hf2PdhhfWT/FJa+pc3bA1ywvKXtedxIRmd4Y7BTXE4w==
+
+p-reduce@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+  integrity sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==
+
+"p-series@^1.0.0", "p-series@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/p-series/-/p-series-1.1.0.tgz#f2d8522cdfd58b464eb9685651d465037ee3c957"
+  integrity sha512-356covArc9UCfj2twY/sxCJKGMzzO+pJJtucizsPC6aS1xKSTBc9PQrQhvFR3+7F+fa2KBKdJjdIcv6NEWDcIQ==
+  dependencies:
+    "@sindresorhus/is" "^0.7.0"
+    p-reduce "^1.0.0"
+
+p-timeout@^1.1.1:
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
+  integrity sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==
+  dependencies:
+    p-finally "^1.0.0"
+
+p-timeout@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038"
+  integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==
+  dependencies:
+    p-finally "^1.0.0"
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+"pako@^1.0.0", "pako@^1.0.4", "pako@~1.0.5":
+  version "1.0.11"
+  resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+  integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parent-module@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+  dependencies:
+    callsites "^3.0.0"
+
+"parents@^1.0.0", "parents@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751"
+  integrity sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==
+  dependencies:
+    path-platform "~0.11.15"
+
+"parse-asn1@^5.0.0", "parse-asn1@^5.1.6":
+  version "5.1.6"
+  resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
+  integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
+  dependencies:
+    asn1.js "^5.2.0"
+    browserify-aes "^1.0.0"
+    evp_bytestokey "^1.0.0"
+    pbkdf2 "^3.0.3"
+    safe-buffer "^5.1.1"
+
+"parse-json@^5.0.0", "parse-json@^5.2.0":
+  version "5.2.0"
+  resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+  integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    error-ex "^1.3.1"
+    json-parse-even-better-errors "^2.3.0"
+    lines-and-columns "^1.1.6"
+
+"parse5@^7.0.0", "parse5@^7.1.1":
+  version "7.1.2"
+  resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
+  integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+  dependencies:
+    entities "^4.4.0"
+
+path-browserify@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
+  integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
+
+path-exists@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+"path-fx@^2.0.0", "path-fx@^2.1.1":
+  version "2.1.2"
+  resolved "https://registry.npmjs.org/path-fx/-/path-fx-2.1.2.tgz#10683d3e7c4f0aa4fa974fb6e5f1302c181eee00"
+  integrity sha512-RthVN6/ERkpfnW/PD9cDD6yZwdkJnUJJGznQ/oL+ssViEXZj5LozxZBVwyn0zE3DOvAZElUuF2vU98uiB0YTuQ==
+  dependencies:
+    is-relative "^1.0.0"
+
+"path-is-absolute@^1.0.0", "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#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+"path-key@^2.0.0", "path-key@^2.0.1":
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+  integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
+
+"path-key@^3.0.0", "path-key@^3.1.0":
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-key@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
+  integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
+
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-platform@~0.11.15:
+  version "0.11.15"
+  resolved "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2"
+  integrity sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==
+
+path-scurry@^1.7.0:
+  version "1.9.2"
+  resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63"
+  integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==
+  dependencies:
+    lru-cache "^9.1.1"
+    minipass "^5.0.0 || ^6.0.2"
+
+path-type@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pathfinding@^0.4.18:
+  version "0.4.18"
+  resolved "https://registry.npmjs.org/pathfinding/-/pathfinding-0.4.18.tgz#a9990f6fa22b7ef196e5651b049165403a045fe8"
+  integrity sha512-R0TGEQ9GRcFCDvAWlJAWC+KGJ9SLbW4c0nuZRcioVlXVTlw+F5RvXQ8SQgSqI9KXWC1ew95vgmIiyaWTlCe9Ag==
+  dependencies:
+    heap "0.2.5"
+
+paths-js@^0.4.9:
+  version "0.4.11"
+  resolved "https://registry.npmjs.org/paths-js/-/paths-js-0.4.11.tgz#b2a9d5f94ee9949aa8fee945f78a12abff44599e"
+  integrity sha512-3mqcLomDBXOo7Fo+UlaenG6f71bk1ZezPQy2JCmYHy2W2k5VKpP+Jbin9H0bjXynelTbglCqdFhSEkeIkKTYUA==
+
+pbkdf2@^3.0.3:
+  version "3.1.2"
+  resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
+  integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
+  dependencies:
+    create-hash "^1.1.2"
+    create-hmac "^1.1.4"
+    ripemd160 "^2.0.1"
+    safe-buffer "^5.0.1"
+    sha.js "^2.4.8"
+
+peek-readable@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72"
+  integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==
+
+pend@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
+
+performance-now@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+  integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3", "picomatch@^2.3.1":
+  version "2.3.1"
+  resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+picomodal@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/picomodal/-/picomodal-3.0.0.tgz#facd30f4fbf34a809c1e04ea525f004f399c0b82"
+  integrity sha512-FoR3TDfuLlqUvcEeK5ifpKSVVns6B4BQvc8SDF6THVMuadya6LLtji0QgUDSStw0ZR2J7I6UGi5V2V23rnPWTw==
+
+"pify@^2.2.0", "pify@^2.3.0":
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+  integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
+
+pify@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+  integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==
+  dependencies:
+    pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+  integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==
+
+pirates@^4.0.4:
+  version "4.0.6"
+  resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
+  integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
+
+"pkg-dir@^4.1.0", "pkg-dir@^4.2.0":
+  version "4.2.0"
+  resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+  dependencies:
+    find-up "^4.0.0"
+
+popper.js@1.16.1-lts:
+  version "1.16.1-lts"
+  resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05"
+  integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==
+
+popper.js@^1.16.1:
+  version "1.16.1"
+  resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b"
+  integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
+
+postcss-calc@^8.2.3:
+  version "8.2.4"
+  resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5"
+  integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==
+  dependencies:
+    postcss-selector-parser "^6.0.9"
+    postcss-value-parser "^4.2.0"
+
+postcss-calc@^9.0.0:
+  version "9.0.1"
+  resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6"
+  integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==
+  dependencies:
+    postcss-selector-parser "^6.0.11"
+    postcss-value-parser "^4.2.0"
+
+postcss-colormin@^5.3.1:
+  version "5.3.1"
+  resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f"
+  integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==
+  dependencies:
+    browserslist "^4.21.4"
+    caniuse-api "^3.0.0"
+    colord "^2.9.1"
+    postcss-value-parser "^4.2.0"
+
+postcss-colormin@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz#d4250652e952e1c0aca70c66942da93d3cdeaafe"
+  integrity sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==
+  dependencies:
+    browserslist "^4.21.4"
+    caniuse-api "^3.0.0"
+    colord "^2.9.1"
+    postcss-value-parser "^4.2.0"
+
+postcss-convert-values@^5.1.3:
+  version "5.1.3"
+  resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393"
+  integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==
+  dependencies:
+    browserslist "^4.21.4"
+    postcss-value-parser "^4.2.0"
+
+postcss-convert-values@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz#ec94a954957e5c3f78f0e8f65dfcda95280b8996"
+  integrity sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==
+  dependencies:
+    browserslist "^4.21.4"
+    postcss-value-parser "^4.2.0"
+
+postcss-discard-comments@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696"
+  integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==
+
+postcss-discard-comments@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz#9ca335e8b68919f301b24ba47dde226a42e535fe"
+  integrity sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==
+
+postcss-discard-duplicates@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848"
+  integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==
+
+postcss-discard-duplicates@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz#c26177a6c33070922e67e9a92c0fd23d443d1355"
+  integrity sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==
+
+postcss-discard-empty@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c"
+  integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==
+
+postcss-discard-empty@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz#06c1c4fce09e22d2a99e667c8550eb8a3a1b9aee"
+  integrity sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==
+
+postcss-discard-overridden@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e"
+  integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==
+
+postcss-discard-overridden@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz#49c5262db14e975e349692d9024442de7cd8e234"
+  integrity sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==
+
+postcss-loader@^7.1.0:
+  version "7.3.3"
+  resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz#6da03e71a918ef49df1bb4be4c80401df8e249dd"
+  integrity sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==
+  dependencies:
+    cosmiconfig "^8.2.0"
+    jiti "^1.18.2"
+    semver "^7.3.8"
+
+postcss-merge-longhand@^5.1.7:
+  version "5.1.7"
+  resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16"
+  integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+    stylehacks "^5.1.1"
+
+postcss-merge-longhand@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz#6f627b27db939bce316eaa97e22400267e798d69"
+  integrity sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+    stylehacks "^6.0.0"
+
+postcss-merge-rules@^5.1.4:
+  version "5.1.4"
+  resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c"
+  integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==
+  dependencies:
+    browserslist "^4.21.4"
+    caniuse-api "^3.0.0"
+    cssnano-utils "^3.1.0"
+    postcss-selector-parser "^6.0.5"
+
+postcss-merge-rules@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz#39f165746404e646c0f5c510222ccde4824a86aa"
+  integrity sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==
+  dependencies:
+    browserslist "^4.21.4"
+    caniuse-api "^3.0.0"
+    cssnano-utils "^4.0.0"
+    postcss-selector-parser "^6.0.5"
+
+postcss-minify-font-values@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b"
+  integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-font-values@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz#68d4a028f9fa5f61701974724b2cc9445d8e6070"
+  integrity sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-gradients@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c"
+  integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==
+  dependencies:
+    colord "^2.9.1"
+    cssnano-utils "^3.1.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-gradients@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz#22b5c88cc63091dadbad34e31ff958404d51d679"
+  integrity sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==
+  dependencies:
+    colord "^2.9.1"
+    cssnano-utils "^4.0.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-params@^5.1.4:
+  version "5.1.4"
+  resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352"
+  integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==
+  dependencies:
+    browserslist "^4.21.4"
+    cssnano-utils "^3.1.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-params@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz#2b3a85a9e3b990d7a16866f430f5fd1d5961b539"
+  integrity sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==
+  dependencies:
+    browserslist "^4.21.4"
+    cssnano-utils "^4.0.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-selectors@^5.2.1:
+  version "5.2.1"
+  resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6"
+  integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==
+  dependencies:
+    postcss-selector-parser "^6.0.5"
+
+postcss-minify-selectors@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz#5046c5e8680a586e5a0cad52cc9aa36d6be5bda2"
+  integrity sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==
+  dependencies:
+    postcss-selector-parser "^6.0.5"
+
+postcss-modules-extract-imports@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
+  integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
+
+postcss-modules-local-by-default@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524"
+  integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==
+  dependencies:
+    icss-utils "^5.0.0"
+    postcss-selector-parser "^6.0.2"
+    postcss-value-parser "^4.1.0"
+
+postcss-modules-scope@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06"
+  integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==
+  dependencies:
+    postcss-selector-parser "^6.0.4"
+
+postcss-modules-values@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
+  integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
+  dependencies:
+    icss-utils "^5.0.0"
+
+postcss-normalize-charset@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed"
+  integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==
+
+postcss-normalize-charset@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz#36cc12457259064969fb96f84df491652a4b0975"
+  integrity sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==
+
+postcss-normalize-display-values@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8"
+  integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-display-values@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz#8d2961415078644d8c6bbbdaf9a2fdd60f546cd4"
+  integrity sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-positions@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92"
+  integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-positions@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz#25b96df99a69f8925f730eaee0be74416865e301"
+  integrity sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-repeat-style@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2"
+  integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-repeat-style@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz#ddf30ad8762feb5b1eb97f39f251acd7b8353299"
+  integrity sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-string@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228"
+  integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-string@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz#948282647a51e409d69dde7910f0ac2ff97cb5d8"
+  integrity sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-timing-functions@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb"
+  integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-timing-functions@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz#5f13e650b8c43351989fc5de694525cc2539841c"
+  integrity sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-unicode@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030"
+  integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==
+  dependencies:
+    browserslist "^4.21.4"
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-unicode@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz#741b3310f874616bdcf07764f5503695d3604730"
+  integrity sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==
+  dependencies:
+    browserslist "^4.21.4"
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-url@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc"
+  integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==
+  dependencies:
+    normalize-url "^6.0.1"
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-url@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz#d0a31e962a16401fb7deb7754b397a323fb650b4"
+  integrity sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-whitespace@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa"
+  integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-whitespace@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz#accb961caa42e25ca4179b60855b79b1f7129d4d"
+  integrity sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-ordered-values@^5.1.3:
+  version "5.1.3"
+  resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38"
+  integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==
+  dependencies:
+    cssnano-utils "^3.1.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-ordered-values@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz#374704cdff25560d44061d17ba3c6308837a3218"
+  integrity sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==
+  dependencies:
+    cssnano-utils "^4.0.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-reduce-initial@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6"
+  integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==
+  dependencies:
+    browserslist "^4.21.4"
+    caniuse-api "^3.0.0"
+
+postcss-reduce-initial@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz#7d16e83e60e27e2fa42f56ec0b426f1da332eca7"
+  integrity sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==
+  dependencies:
+    browserslist "^4.21.4"
+    caniuse-api "^3.0.0"
+
+postcss-reduce-transforms@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9"
+  integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-reduce-transforms@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz#28ff2601a6d9b96a2f039b3501526e1f4d584a46"
+  integrity sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+"postcss-selector-parser@^6.0.11", "postcss-selector-parser@^6.0.2", "postcss-selector-parser@^6.0.4", "postcss-selector-parser@^6.0.5", "postcss-selector-parser@^6.0.9":
+  version "6.0.13"
+  resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
+  integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
+  dependencies:
+    cssesc "^3.0.0"
+    util-deprecate "^1.0.2"
+
+postcss-svgo@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d"
+  integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+    svgo "^2.7.0"
+
+postcss-svgo@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz#7b18742d38d4505a0455bbe70d52b49f00eaf69d"
+  integrity sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+    svgo "^3.0.2"
+
+postcss-unique-selectors@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6"
+  integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==
+  dependencies:
+    postcss-selector-parser "^6.0.5"
+
+postcss-unique-selectors@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz#c94e9b0f7bffb1203894e42294b5a1b3fb34fbe1"
+  integrity sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==
+  dependencies:
+    postcss-selector-parser "^6.0.5"
+
+"postcss-value-parser@^4.0.2", "postcss-value-parser@^4.1.0", "postcss-value-parser@^4.2.0":
+  version "4.2.0"
+  resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+  integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+"postcss@^8.4.21", "postcss@^8.4.24":
+  version "8.4.24"
+  resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df"
+  integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==
+  dependencies:
+    nanoid "^3.3.6"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.2"
+
+postcss@^8.4.31:
+  version "8.4.31"
+  resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
+  integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
+  dependencies:
+    nanoid "^3.3.6"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.2"
+
+precond@^0.2.3:
+  version "0.2.3"
+  resolved "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac"
+  integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==
+
+prelude-ls@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prepend-http@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+  integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==
+
+prepend-http@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
+  integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==
+
+pretty-format@^27.0.2:
+  version "27.5.1"
+  resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
+  integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
+  dependencies:
+    ansi-regex "^5.0.1"
+    ansi-styles "^5.0.0"
+    react-is "^17.0.1"
+
+"pretty-format@^29.0.0", "pretty-format@^29.6.3":
+  version "29.6.3"
+  resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz#d432bb4f1ca6f9463410c3fb25a0ba88e594ace7"
+  integrity sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==
+  dependencies:
+    "@jest/schemas" "^29.6.3"
+    ansi-styles "^5.0.0"
+    react-is "^18.0.0"
+
+process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+"process@^0.11.10", "process@~0.11.0":
+  version "0.11.10"
+  resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+  integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
+
+promise-retry@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+  integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+  dependencies:
+    err-code "^2.0.2"
+    retry "^0.12.0"
+
+prompts@^2.0.1:
+  version "2.4.2"
+  resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
+  integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
+  dependencies:
+    kleur "^3.0.3"
+    sisteransi "^1.0.5"
+
+"prop-types@^15.5.8", "prop-types@^15.6.0", "prop-types@^15.6.2", "prop-types@^15.7.2", "prop-types@^15.8.1":
+  version "15.8.1"
+  resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+  integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+  dependencies:
+    loose-envify "^1.4.0"
+    object-assign "^4.1.1"
+    react-is "^16.13.1"
+
+proto-list@~1.2.1:
+  version "1.2.4"
+  resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+  integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+pseudomap@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+  integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
+
+psl@^1.1.33:
+  version "1.9.0"
+  resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+  integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+
+public-encrypt@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+  integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+  dependencies:
+    bn.js "^4.1.0"
+    browserify-rsa "^4.0.0"
+    create-hash "^1.1.0"
+    parse-asn1 "^5.0.0"
+    randombytes "^2.0.1"
+    safe-buffer "^5.1.2"
+
+pump@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+"punycode@^1.3.2", "punycode@^1.4.1":
+  version "1.4.1"
+  resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+  integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==
+
+"punycode@^2.1.0", "punycode@^2.1.1":
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
+  integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+
+pure-rand@^6.0.0:
+  version "6.0.3"
+  resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz#3c9e6b53c09e52ac3cedffc85ab7c1c7094b38cb"
+  integrity sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==
+
+q@^1.1.2:
+  version "1.5.1"
+  resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+  integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==
+
+qs@^6.11.0:
+  version "6.11.2"
+  resolved "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9"
+  integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==
+  dependencies:
+    side-channel "^1.0.4"
+
+query-string@^5.0.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
+  integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
+  dependencies:
+    decode-uri-component "^0.2.0"
+    object-assign "^4.1.0"
+    strict-uri-encode "^1.0.0"
+
+querystring-es3@~0.2.0:
+  version "0.2.1"
+  resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+  integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==
+
+querystringify@^2.1.1:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
+  integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
+
+queue-microtask@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+quick-lru@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+  integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+raf@^3.4.1:
+  version "3.4.1"
+  resolved "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
+  integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
+  dependencies:
+    performance-now "^2.1.0"
+
+"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5", "randombytes@^2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+  integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+  dependencies:
+    randombytes "^2.0.5"
+    safe-buffer "^5.1.0"
+
+rc-align@^4.0.0:
+  version "4.0.15"
+  resolved "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz#2bbd665cf85dfd0b0244c5a752b07565e9098577"
+  integrity sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==
+  dependencies:
+    "@babel/runtime" "^7.10.1"
+    classnames "2.x"
+    dom-align "^1.7.0"
+    rc-util "^5.26.0"
+    resize-observer-polyfill "^1.5.1"
+
+rc-dock@^3.2.9:
+  version "3.2.18"
+  resolved "https://registry.npmjs.org/rc-dock/-/rc-dock-3.2.18.tgz#4c0f3afb2f483581783bc3f941c8e0f9f40cc2b7"
+  integrity sha512-5I0CNgrv/3pctK9WkoEMFTwitJhXx2cMHVyygReDJI8qXw9dayE3xxJgnybbELGFeLkDfVhFSfKz6zSboAVbxw==
+  dependencies:
+    classnames "^2.3.1"
+    lodash "^4.17.21"
+    rc-dropdown "^3.2.2"
+    rc-menu "^9.3.0"
+    rc-new-window "^0.1.13"
+    rc-tabs "^11.10.5"
+
+rc-dropdown@^3.2.2:
+  version "3.6.2"
+  resolved "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.6.2.tgz#d23b8b2762941ac39e665673946f67ca9c39118f"
+  integrity sha512-Wsw7GkVbUXADEs8FPL0v8gd+3mWQiydPFXBlr2imMScQaf8hh79pG9KrBc1DwK+nqHmYOpQfK2gn6jG2AQw9Pw==
+  dependencies:
+    "@babel/runtime" "^7.10.1"
+    classnames "^2.2.6"
+    rc-trigger "^5.0.4"
+    rc-util "^5.17.0"
+
+rc-dropdown@~4.0.0:
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.0.1.tgz#f65d9d3d89750241057db59d5a75e43cd4576b68"
+  integrity sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==
+  dependencies:
+    "@babel/runtime" "^7.18.3"
+    classnames "^2.2.6"
+    rc-trigger "^5.3.1"
+    rc-util "^5.17.0"
+
+rc-menu@^9.3.0:
+  version "9.9.2"
+  resolved "https://registry.npmjs.org/rc-menu/-/rc-menu-9.9.2.tgz#733aa5b794bd801577726e448b6cfeda0436e1e5"
+  integrity sha512-kVJwaQn5VUu6DIddxd/jz3QupTPg0tNYq+mpFP8wYsRF5JgzPA9fPVw+CfwlTPwA1w7gzEY42S8pj6M3uev5CQ==
+  dependencies:
+    "@babel/runtime" "^7.10.1"
+    "@rc-component/trigger" "^1.6.2"
+    classnames "2.x"
+    rc-motion "^2.4.3"
+    rc-overflow "^1.2.8"
+    rc-util "^5.27.0"
+
+rc-menu@~9.6.0:
+  version "9.6.4"
+  resolved "https://registry.npmjs.org/rc-menu/-/rc-menu-9.6.4.tgz#033e7b8848c17a09a81b68b8d4c3fa457605f4f6"
+  integrity sha512-6DiNAjxjVIPLZXHffXxxcyE15d4isRL7iQ1ru4MqYDH2Cqc5bW96wZOdMydFtGLyDdnmEQ9jVvdCE9yliGvzkw==
+  dependencies:
+    "@babel/runtime" "^7.10.1"
+    classnames "2.x"
+    rc-motion "^2.4.3"
+    rc-overflow "^1.2.0"
+    rc-trigger "^5.1.2"
+    rc-util "^5.12.0"
+    shallowequal "^1.1.0"
+
+"rc-motion@^2.0.0", "rc-motion@^2.4.3":
+  version "2.7.3"
+  resolved "https://registry.npmjs.org/rc-motion/-/rc-motion-2.7.3.tgz#126155bb3e687174fb3b92fddade2835c963b04d"
+  integrity sha512-2xUvo8yGHdOHeQbdI8BtBsCIrWKchEmFEIskf0nmHtJsou+meLd/JE+vnvSX2JxcBrJtXY2LuBpxAOxrbY/wMQ==
+  dependencies:
+    "@babel/runtime" "^7.11.1"
+    classnames "^2.2.1"
+    rc-util "^5.21.0"
+
+rc-new-window@^0.1.13:
+  version "0.1.13"
+  resolved "https://registry.npmjs.org/rc-new-window/-/rc-new-window-0.1.13.tgz#f0354ce9d7355ab1c91b16b03d3768fae1a2278c"
+  integrity sha512-KqANLQVfgNcfs+R4ntpzV5ELyqXMlAUimdSfFHapk2VwsoZX3y+BK2RjFBFb7q865yqAshP87g0PbIPqblKVTg==
+  dependencies:
+    "@babel/runtime" "^7.10.1"
+    bowser "^2.11.0"
+    classnames "2.x"
+    lodash "^4.17.20"
+
+"rc-overflow@^1.2.0", "rc-overflow@^1.2.8":
+  version "1.3.1"
+  resolved "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.3.1.tgz#03224cf90c66aa570eb0deeb4eff6cc96401e979"
+  integrity sha512-RY0nVBlfP9CkxrpgaLlGzkSoh9JhjJLu6Icqs9E7CW6Ewh9s0peF9OHIex4OhfoPsR92LR0fN6BlCY9Z4VoUtA==
+  dependencies:
+    "@babel/runtime" "^7.11.1"
+    classnames "^2.2.1"
+    rc-resize-observer "^1.0.0"
+    rc-util "^5.19.2"
+
+"rc-resize-observer@^1.0.0", "rc-resize-observer@^1.3.1":
+  version "1.3.1"
+  resolved "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.3.1.tgz#b61b9f27048001243617b81f95e53d7d7d7a6a3d"
+  integrity sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg==
+  dependencies:
+    "@babel/runtime" "^7.20.7"
+    classnames "^2.2.1"
+    rc-util "^5.27.0"
+    resize-observer-polyfill "^1.5.1"
+
+rc-tabs@^11.10.5:
+  version "11.16.1"
+  resolved "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.16.1.tgz#7c57b6a092d9d0e2df54413b0319f195c27214a9"
+  integrity sha512-bR7Dap23YyfzZQwtKomhiFEFzZuE7WaKWo+ypNRSGB9PDKSc6tM12VP8LWYkvmmQHthgwP0WRN8nFbSJWuqLYw==
+  dependencies:
+    "@babel/runtime" "^7.11.2"
+    classnames "2.x"
+    rc-dropdown "~4.0.0"
+    rc-menu "~9.6.0"
+    rc-resize-observer "^1.0.0"
+    rc-util "^5.5.0"
+
+"rc-trigger@^5.0.4", "rc-trigger@^5.1.2", "rc-trigger@^5.3.1":
+  version "5.3.4"
+  resolved "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.3.4.tgz#6b4b26e32825677c837d1eb4d7085035eecf9a61"
+  integrity sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw==
+  dependencies:
+    "@babel/runtime" "^7.18.3"
+    classnames "^2.2.6"
+    rc-align "^4.0.0"
+    rc-motion "^2.0.0"
+    rc-util "^5.19.2"
+
+"rc-util@^5.12.0", "rc-util@^5.17.0", "rc-util@^5.19.2", "rc-util@^5.21.0", "rc-util@^5.24.4", "rc-util@^5.26.0", "rc-util@^5.27.0", "rc-util@^5.33.0", "rc-util@^5.5.0":
+  version "5.34.0"
+  resolved "https://registry.npmjs.org/rc-util/-/rc-util-5.34.0.tgz#3bec84f98c1dbf5305d89cda124aa8a0c9615f97"
+  integrity sha512-+zCDJ1gq+KwqbaZPAk7PGlNAssoTcnZSnTsr5KMYDBhzdPNFxyuglnewWMP5PyP/kAC6uW4r9Ejc08M+Lei04A==
+  dependencies:
+    "@babel/runtime" "^7.18.3"
+    react-is "^16.12.0"
+
+re-resizable@6.9.6:
+  version "6.9.6"
+  resolved "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.6.tgz#b95d37e3821481b56ddfb1e12862940a791e827d"
+  integrity sha512-0xYKS5+Z0zk+vICQlcZW+g54CcJTTmHluA7JUUgvERDxnKAnytylcyPsA+BSFi759s5hPlHmBRegFrwXs2FuBQ==
+  dependencies:
+    fast-memoize "^2.5.1"
+
+react-arborist@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.npmjs.org/react-arborist/-/react-arborist-3.2.0.tgz#f17d726e7d18fcb1494b83ffadfecc8c9bda5dff"
+  integrity sha512-sjGL1KIRogwkM5uVifpp01yrfTcIHsm62Kbs78kBbPuksrnJPZ13SAqAqZeXVuyvO0Tbd7odExF/KoHtXHIZaQ==
+  dependencies:
+    react-dnd "^14.0.3"
+    react-dnd-html5-backend "^14.0.1"
+    react-window "^1.8.6"
+    redux "^4.1.1"
+    use-sync-external-store "^1.2.0"
+
+react-aspen@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/react-aspen/-/react-aspen-1.2.0.tgz#375fa82a8db627542fc8b9e6e421baa49a65ab95"
+  integrity sha512-w+vUn4ScCzcxDB5xEsKIuIkUnySEQXlp/zqPFChWEpYG12mPO7h7z/LWuK2QXUoDbIP96Fcf1+UAI9I/cstPqg==
+  dependencies:
+    aspen-tree-model "^1.0.5"
+    notificar "^1.0.1"
+    p-series "^1.0.0"
+    path-fx "^2.1.1"
+    react-window "^1.3.1"
+
+react-checkbox-tree@^1.7.2:
+  version "1.8.0"
+  resolved "https://registry.npmjs.org/react-checkbox-tree/-/react-checkbox-tree-1.8.0.tgz#10dc3e86df25d92559ab6857c7ada4fe285abc03"
+  integrity sha512-ufC4aorihOvjLpvY1beab2hjVLGZbDTFRzw62foG0+th+KX7e/sdmWu/nD1ZS/U5Yr0rWGwedGH5GOtR0IkUXw==
+  dependencies:
+    classnames "^2.2.5"
+    lodash "^4.17.10"
+    nanoid "^3.0.0"
+    prop-types "^15.5.8"
+
+react-dnd-html5-backend@^14.0.1:
+  version "14.1.0"
+  resolved "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-14.1.0.tgz#b35a3a0c16dd3a2bfb5eb7ec62cf0c2cace8b62f"
+  integrity sha512-6ONeqEC3XKVf4eVmMTe0oPds+c5B9Foyj8p/ZKLb7kL2qh9COYxiBHv3szd6gztqi/efkmriywLUVlPotqoJyw==
+  dependencies:
+    dnd-core "14.0.1"
+
+react-dnd-html5-backend@^16.0.1:
+  version "16.0.1"
+  resolved "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-16.0.1.tgz#87faef15845d512a23b3c08d29ecfd34871688b6"
+  integrity sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==
+  dependencies:
+    dnd-core "^16.0.1"
+
+react-dnd@^14.0.3:
+  version "14.0.5"
+  resolved "https://registry.npmjs.org/react-dnd/-/react-dnd-14.0.5.tgz#ecf264e220ae62e35634d9b941502f3fca0185ed"
+  integrity sha512-9i1jSgbyVw0ELlEVt/NkCUkxy1hmhJOkePoCH713u75vzHGyXhPDm28oLfc2NMSBjZRM1Y+wRjHXJT3sPrTy+A==
+  dependencies:
+    "@react-dnd/invariant" "^2.0.0"
+    "@react-dnd/shallowequal" "^2.0.0"
+    dnd-core "14.0.1"
+    fast-deep-equal "^3.1.3"
+    hoist-non-react-statics "^3.3.2"
+
+react-dnd@^16.0.1:
+  version "16.0.1"
+  resolved "https://registry.npmjs.org/react-dnd/-/react-dnd-16.0.1.tgz#2442a3ec67892c60d40a1559eef45498ba26fa37"
+  integrity sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==
+  dependencies:
+    "@react-dnd/invariant" "^4.0.1"
+    "@react-dnd/shallowequal" "^4.0.1"
+    dnd-core "^16.0.1"
+    fast-deep-equal "^3.1.3"
+    hoist-non-react-statics "^3.3.2"
+
+react-dom@^17.0.1:
+  version "17.0.2"
+  resolved "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
+  integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+    scheduler "^0.20.2"
+
+react-draggable@4.4.5:
+  version "4.4.5"
+  resolved "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz#9e37fe7ce1a4cf843030f521a0a4cc41886d7e7c"
+  integrity sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==
+  dependencies:
+    clsx "^1.1.1"
+    prop-types "^15.8.1"
+
+react-draggable@^4.4.6:
+  version "4.4.6"
+  resolved "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.6.tgz#63343ee945770881ca1256a5b6fa5c9f5983fe1e"
+  integrity sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw==
+  dependencies:
+    clsx "^1.1.1"
+    prop-types "^15.8.1"
+
+react-dropzone@^14.2.1:
+  version "14.2.3"
+  resolved "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz#0acab68308fda2d54d1273a1e626264e13d4e84b"
+  integrity sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==
+  dependencies:
+    attr-accept "^2.2.2"
+    file-selector "^0.6.0"
+    prop-types "^15.8.1"
+
+react-frame-component@^5.2.6:
+  version "5.2.6"
+  resolved "https://registry.npmjs.org/react-frame-component/-/react-frame-component-5.2.6.tgz#0d9991d251ff1f7177479d8f370deea06b824b79"
+  integrity sha512-CwkEM5VSt6nFwZ1Op8hi3JB5rPseZlmnp5CGiismVTauE6S4Jsc4TNMlT0O7Cts4WgIC3ZBAQ2p1Mm9XgLbj+w==
+
+"react-is@^16.12.0", "react-is@^16.13.1", "react-is@^16.7.0":
+  version "16.13.1"
+  resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+  integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+"react-is@^16.8.0 || ^17.0.0", "react-is@^17.0.1":
+  version "17.0.2"
+  resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
+  integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
+
+react-is@^18.0.0:
+  version "18.2.0"
+  resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
+  integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+
+react-leaflet@^3.2.2:
+  version "3.2.5"
+  resolved "https://registry.npmjs.org/react-leaflet/-/react-leaflet-3.2.5.tgz#bec0bfab9dd8c2b030ea630f7a0687a60322ca7d"
+  integrity sha512-Z3KZ+4SijsRbbrt2I1a3ZDY6+V6Pm91eYTdxTN18G6IOkFRsJo1BuSPLFnyFrlF3WDjQFPEcTPkEgD1VEeAoBg==
+  dependencies:
+    "@react-leaflet/core" "^1.1.1"
+
+react-new-window@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/react-new-window/-/react-new-window-1.0.1.tgz#38f97ac5a38a14d2ac8263e2427fcbd5f84e1d64"
+  integrity sha512-pLQlq5NzMxNocXKPIwkXfAxSOZmbpWSbP8QrxCbunpHcx4k249YChkk7l/7P4jjwxq3dI/xwL3nVHLp6h5zM3w==
+  dependencies:
+    prop-types "^15.7.2"
+
+react-property@2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/react-property/-/react-property-2.0.2.tgz#d5ac9e244cef564880a610bc8d868bd6f60fdda6"
+  integrity sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==
+
+react-resize-detector@^9.1.0:
+  version "9.1.0"
+  resolved "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-9.1.0.tgz#45ea7176e57f1a568abd0e3eafcbfd3532fb284e"
+  integrity sha512-vGFbfkIZp4itJqR4yl+GhjrZHtdlQvou1r10ek0yZUMkizKbPdekKTpPb003IV3b8E5BJFThVG0oocjE3lNsug==
+  dependencies:
+    lodash "^4.17.21"
+
+react-rnd@^10.3.5:
+  version "10.4.1"
+  resolved "https://registry.npmjs.org/react-rnd/-/react-rnd-10.4.1.tgz#9e1c3f244895d7862ef03be98b2a620848c3fba1"
+  integrity sha512-0m887AjQZr6p2ADLNnipquqsDq4XJu/uqVqI3zuoGD19tRm6uB83HmZWydtkilNp5EWsOHbLGF4IjWMdd5du8Q==
+  dependencies:
+    re-resizable "6.9.6"
+    react-draggable "4.4.5"
+    tslib "2.3.1"
+
+react-select@^5.7.2:
+  version "5.7.3"
+  resolved "https://registry.npmjs.org/react-select/-/react-select-5.7.3.tgz#fa0dc9a23cad6ff3871ad3829f6083a4b54961a2"
+  integrity sha512-z8i3NCuFFWL3w27xq92rBkVI2onT0jzIIPe480HlBjXJ3b5o6Q+Clp4ydyeKrj9DZZ3lrjawwLC5NGl0FSvUDg==
+  dependencies:
+    "@babel/runtime" "^7.12.0"
+    "@emotion/cache" "^11.4.0"
+    "@emotion/react" "^11.8.1"
+    "@floating-ui/dom" "^1.0.1"
+    "@types/react-transition-group" "^4.4.0"
+    memoize-one "^6.0.0"
+    prop-types "^15.6.0"
+    react-transition-group "^4.3.0"
+    use-isomorphic-layout-effect "^1.1.2"
+
+react-table@^7.6.3:
+  version "7.8.0"
+  resolved "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz#07858c01c1718c09f7f1aed7034fcfd7bda907d2"
+  integrity sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==
+
+react-timer-hook@^3.0.5:
+  version "3.0.6"
+  resolved "https://registry.npmjs.org/react-timer-hook/-/react-timer-hook-3.0.6.tgz#61aca331378ad53058519c579de50c244e66972f"
+  integrity sha512-6O1gcBT7R5gm2W14mGAu35KfX0tdJ9s817UDJTL7/IQUXqK6wkYgZzy1mSLa6N+AQGEhgoVCtTsP7tIhBmSD6A==
+
+"react-transition-group@^4.0.0", "react-transition-group@^4.3.0", "react-transition-group@^4.4.0":
+  version "4.4.5"
+  resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1"
+  integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
+  dependencies:
+    "@babel/runtime" "^7.5.5"
+    dom-helpers "^5.0.1"
+    loose-envify "^1.4.0"
+    prop-types "^15.6.2"
+
+react-transition-state@^1.1.3:
+  version "1.1.5"
+  resolved "https://registry.npmjs.org/react-transition-state/-/react-transition-state-1.1.5.tgz#22accee21d0011b1d0245be24b6262ae67f494c3"
+  integrity sha512-ITY2mZqc2dWG2eitJkYNdcSFW8aKeOlkL2A/vowRrLL8GH3J6Re/SpD/BLvQzrVOTqjsP0b5S9N10vgNNzwMUQ==
+
+react-virtualized-auto-sizer@^1.0.6:
+  version "1.0.20"
+  resolved "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.20.tgz#d9a907253a7c221c52fa57dc775a6ef40c182645"
+  integrity sha512-OdIyHwj4S4wyhbKHOKM1wLSj/UDXm839Z3Cvfg2a9j+He6yDa6i5p0qQvEiCnyQlGO/HyfSnigQwuxvYalaAXA==
+
+"react-window@^1.3.1", "react-window@^1.8.5", "react-window@^1.8.6":
+  version "1.8.9"
+  resolved "https://registry.npmjs.org/react-window/-/react-window-1.8.9.tgz#24bc346be73d0468cdf91998aac94e32bc7fa6a8"
+  integrity sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q==
+  dependencies:
+    "@babel/runtime" "^7.0.0"
+    memoize-one ">=3.1.1 <6"
+
+react@^17.0.1:
+  version "17.0.2"
+  resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
+  integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+
+read-only-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0"
+  integrity sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==
+  dependencies:
+    readable-stream "^2.0.2"
+
+read-pkg-up@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz#72f595b65e66110f43b052dd9af4de6b10534670"
+  integrity sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==
+  dependencies:
+    find-up "^5.0.0"
+    read-pkg "^6.0.0"
+    type-fest "^1.0.1"
+
+read-pkg@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz#a67a7d6a1c2b0c3cd6aa2ea521f40c458a4a504c"
+  integrity sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==
+  dependencies:
+    "@types/normalize-package-data" "^2.4.0"
+    normalize-package-data "^3.0.2"
+    parse-json "^5.2.0"
+    type-fest "^1.0.1"
+
+readable-stream@^1.0.33:
+  version "1.1.14"
+  resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+  integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.1"
+    isarray "0.0.1"
+    string_decoder "~0.10.x"
+
+"readable-stream@^2.0.0", "readable-stream@^2.0.2", "readable-stream@^2.2.2", "readable-stream@^2.3.0", "readable-stream@^2.3.5", "readable-stream@~2.3.6":
+  version "2.3.8"
+  resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
+  integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
+"readable-stream@^3.4.0", "readable-stream@^3.5.0", "readable-stream@^3.6.0", "readable-stream@^3.6.2":
+  version "3.6.2"
+  resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+readable-web-to-node-stream@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb"
+  integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==
+  dependencies:
+    readable-stream "^3.6.0"
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+rechoir@^0.7.0:
+  version "0.7.1"
+  resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
+  integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==
+  dependencies:
+    resolve "^1.9.0"
+
+redent@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+  integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+  dependencies:
+    indent-string "^4.0.0"
+    strip-indent "^3.0.0"
+
+redent@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz#0c0ba7caabb24257ab3bb7a4fd95dd1d5c5681f9"
+  integrity sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==
+  dependencies:
+    indent-string "^5.0.0"
+    strip-indent "^4.0.0"
+
+"redux@^4.1.1", "redux@^4.2.0":
+  version "4.2.1"
+  resolved "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197"
+  integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==
+  dependencies:
+    "@babel/runtime" "^7.9.2"
+
+reflect.getprototypeof@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz#2738fd896fcc3477ffbd4190b40c2458026b6928"
+  integrity sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+    get-intrinsic "^1.1.1"
+    globalthis "^1.0.3"
+    which-builtin-type "^1.1.3"
+
+regenerate-unicode-properties@^10.1.0:
+  version "10.1.0"
+  resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c"
+  integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==
+  dependencies:
+    regenerate "^1.4.2"
+
+regenerate@^1.4.2:
+  version "1.4.2"
+  resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+  integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regenerator-runtime@^0.13.11:
+  version "0.13.11"
+  resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
+  integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
+
+regenerator-transform@^0.15.1:
+  version "0.15.1"
+  resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56"
+  integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==
+  dependencies:
+    "@babel/runtime" "^7.8.4"
+
+regenerator-transform@^0.15.2:
+  version "0.15.2"
+  resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4"
+  integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==
+  dependencies:
+    "@babel/runtime" "^7.8.4"
+
+"regexp.prototype.flags@^1.4.3", "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#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
+  integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.2.0"
+    functions-have-names "^1.2.3"
+
+regexpu-core@^5.3.1:
+  version "5.3.2"
+  resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b"
+  integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==
+  dependencies:
+    "@babel/regjsgen" "^0.8.0"
+    regenerate "^1.4.2"
+    regenerate-unicode-properties "^10.1.0"
+    regjsparser "^0.9.1"
+    unicode-match-property-ecmascript "^2.0.0"
+    unicode-match-property-value-ecmascript "^2.1.0"
+
+regjsparser@^0.9.1:
+  version "0.9.1"
+  resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709"
+  integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==
+  dependencies:
+    jsesc "~0.5.0"
+
+replace-ext@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz#9471c213d22e1bcc26717cd6e50881d88f812b06"
+  integrity sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+require-from-string@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+requires-port@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+  integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
+resize-observer-polyfill@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
+  integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+
+resolve-cwd@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+  integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+  dependencies:
+    resolve-from "^5.0.0"
+
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-from@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+  integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve.exports@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
+  integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
+
+"resolve@^1.1.4", "resolve@^1.12.0", "resolve@^1.14.2", "resolve@^1.17.0", "resolve@^1.19.0", "resolve@^1.4.0", "resolve@^1.9.0":
+  version "1.22.2"
+  resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
+  integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
+  dependencies:
+    is-core-module "^2.11.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^1.20.0:
+  version "1.22.4"
+  resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34"
+  integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==
+  dependencies:
+    is-core-module "^2.13.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^2.0.0-next.4:
+  version "2.0.0-next.4"
+  resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660"
+  integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==
+  dependencies:
+    is-core-module "^2.9.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+responselike@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
+  integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==
+  dependencies:
+    lowercase-keys "^1.0.0"
+
+retry@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+  integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
+reusify@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rifm@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.npmjs.org/rifm/-/rifm-0.7.0.tgz#debe951a9c83549ca6b33e5919f716044c2230be"
+  integrity sha512-DSOJTWHD67860I5ojetXdEQRIBvF6YcpNe53j0vn1vp9EUb9N80EiZTxgP+FkDKorWC8PZw052kTF4C1GOivCQ==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+
+rimraf@^2.5.4:
+  version "2.7.1"
+  resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
+rimraf@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+  dependencies:
+    glob "^7.1.3"
+
+"ripemd160@^2.0.0", "ripemd160@^2.0.1":
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+  integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+  dependencies:
+    hash-base "^3.0.0"
+    inherits "^2.0.1"
+
+run-parallel@^1.1.9:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+  integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+  dependencies:
+    queue-microtask "^1.2.2"
+
+safe-array-concat@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060"
+  integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.2.0"
+    has-symbols "^1.0.3"
+    isarray "^2.0.5"
+
+"safe-buffer@5.2.1", "safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@^5.2.0", "safe-buffer@^5.2.1", "safe-buffer@~5.2.0":
+  version "5.2.1"
+  resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+"safe-buffer@~5.1.0", "safe-buffer@~5.1.1":
+  version "5.1.2"
+  resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+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#793b874d524eb3640d1873aad03596db2d4f2295"
+  integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.1.3"
+    is-regex "^1.1.4"
+
+"safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@^2.1.0":
+  version "2.1.2"
+  resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sass-loader@^11.0.0:
+  version "11.1.1"
+  resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-11.1.1.tgz#0db441bbbe197b2af96125bebb7f4be6476b13a7"
+  integrity sha512-fOCp/zLmj1V1WHDZbUbPgrZhA7HKXHEqkslzB+05U5K9SbSbcmH91C7QLW31AsXikxUMaxXRhhcqWZAxUMLDyA==
+  dependencies:
+    klona "^2.0.4"
+    neo-async "^2.6.2"
+
+sass-resources-loader@^2.2.1:
+  version "2.2.5"
+  resolved "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz#75131cdb26bae51fcffc007d8155d57b5e825ca7"
+  integrity sha512-po8rfETH9cOQACWxubT/1CCu77KjxwRtCDm6QAXZH99aUHBydwSoxdIjC40SGp/dcS/FkSNJl0j1VEojGZqlvQ==
+  dependencies:
+    async "^3.2.3"
+    chalk "^4.1.0"
+    glob "^7.1.6"
+    loader-utils "^2.0.0"
+
+sass@^1.24.4:
+  version "1.63.6"
+  resolved "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz#481610e612902e0c31c46b46cf2dad66943283ea"
+  integrity sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==
+  dependencies:
+    chokidar ">=3.0.0 <4.0.0"
+    immutable "^4.0.0"
+    source-map-js ">=0.6.2 <2.0.0"
+
+sax@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+saxes@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5"
+  integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==
+  dependencies:
+    xmlchars "^2.2.0"
+
+scheduler@^0.20.2:
+  version "0.20.2"
+  resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
+  integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+
+schema-utils@^2.6.5:
+  version "2.7.1"
+  resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
+  integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
+  dependencies:
+    "@types/json-schema" "^7.0.5"
+    ajv "^6.12.4"
+    ajv-keywords "^3.5.2"
+
+"schema-utils@^3.0.0", "schema-utils@^3.1.1", "schema-utils@^3.2.0":
+  version "3.3.0"
+  resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
+  integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
+  dependencies:
+    "@types/json-schema" "^7.0.8"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
+"schema-utils@^4.0.0", "schema-utils@^4.0.1", "schema-utils@^4.2.0":
+  version "4.2.0"
+  resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b"
+  integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==
+  dependencies:
+    "@types/json-schema" "^7.0.9"
+    ajv "^8.9.0"
+    ajv-formats "^2.1.1"
+    ajv-keywords "^5.1.0"
+
+seek-bzip@^1.0.5:
+  version "1.0.6"
+  resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4"
+  integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==
+  dependencies:
+    commander "^2.8.1"
+
+semver-regex@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
+  integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
+
+semver-truncate@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8"
+  integrity sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==
+  dependencies:
+    semver "^5.3.0"
+
+"semver@^5.3.0", "semver@^5.5.0", "semver@^5.6.0":
+  version "5.7.1"
+  resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+"semver@^6.0.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.3.0":
+  version "6.3.0"
+  resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^6.3.1:
+  version "6.3.1"
+  resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+"semver@^7.3.4", "semver@^7.3.5", "semver@^7.3.7", "semver@^7.3.8":
+  version "7.5.2"
+  resolved "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb"
+  integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==
+  dependencies:
+    lru-cache "^6.0.0"
+
+"semver@^7.5.3", "semver@^7.5.4":
+  version "7.5.4"
+  resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+  integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
+  dependencies:
+    lru-cache "^6.0.0"
+
+"serialize-javascript@^6.0.0", "serialize-javascript@^6.0.1":
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c"
+  integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
+  dependencies:
+    randombytes "^2.1.0"
+
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+
+"sha.js@^2.4.0", "sha.js@^2.4.8":
+  version "2.4.11"
+  resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+  integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+  dependencies:
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+shallow-clone@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+  integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+  dependencies:
+    kind-of "^6.0.2"
+
+shallowequal@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+  integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
+shasum-object@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e"
+  integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==
+  dependencies:
+    fast-safe-stringify "^2.0.7"
+
+shebang-command@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+  integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
+  dependencies:
+    shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+  integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@^1.6.1:
+  version "1.8.1"
+  resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
+  integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
+
+shim-loader@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/shim-loader/-/shim-loader-1.0.1.tgz#2583a6d2aa938897c2a41658bcef73ec87d3aa5e"
+  integrity sha512-O7amY2FR6Mmu0LRair5uLc/NG/sHFw/ulOf9s4iJfW/4KBSQdyqz9iZmOf57QG7xbKISHHPttMsVZWqQ/0vxpw==
+  dependencies:
+    loader-utils "^1.1.0"
+    lodash "^4.14.1"
+    precond "^0.2.3"
+    webpack-sources "^0.2.3"
+
+side-channel@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+  dependencies:
+    call-bind "^1.0.0"
+    get-intrinsic "^1.0.2"
+    object-inspect "^1.9.0"
+
+"signal-exit@^3.0.0", "signal-exit@^3.0.3", "signal-exit@^3.0.7":
+  version "3.0.7"
+  resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+signal-exit@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967"
+  integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==
+
+simple-concat@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
+  integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
+
+sirv@^1.0.7:
+  version "1.0.19"
+  resolved "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49"
+  integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==
+  dependencies:
+    "@polka/url" "^1.0.0-next.20"
+    mrmime "^1.0.0"
+    totalist "^1.0.0"
+
+sisteransi@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+  integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slash@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+  integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+
+smart-buffer@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+  integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
+snake-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
+  integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
+  dependencies:
+    dot-case "^3.0.4"
+    tslib "^2.0.3"
+
+snapsvg-cjs@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.npmjs.org/snapsvg-cjs/-/snapsvg-cjs-0.0.6.tgz#3b2f56af2573d3d364c3ed5bf8885745f4d2dde1"
+  integrity sha512-7NNvoGrc3BQvWz5rWK1DsD5/Vni4STswz5B3JrBADboQWcN8OBVGjYVJFPT5JkUXb2iVnEflZANhufEpEcTHXw==
+  dependencies:
+    snapsvg "0.5.1"
+
+snapsvg@0.5.1:
+  version "0.5.1"
+  resolved "https://registry.npmjs.org/snapsvg/-/snapsvg-0.5.1.tgz#0caf52c79189a290746fc446cc5e863f6bdddfe3"
+  integrity sha512-CjwWYsL7+CCk1vCk9BBKGYS4WJVDfJAOMWU+Zhzf8wf6pAm/xT34wnpaMPAgcgCNkxuU6OkQPPd8wGuRCY9aNw==
+  dependencies:
+    eve "~0.5.1"
+
+socket.io-client@^4.5.0:
+  version "4.7.0"
+  resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.0.tgz#f869a41a2593bc36f058f3b46175024491d997b5"
+  integrity sha512-7Q8CeDrhuZzg4QLXl3tXlk5yb086oxYzehAVZRLiGCzCmtDneiHz1qHyyWcxhTgxXiokVpWQXoG/u60HoXSQew==
+  dependencies:
+    "@socket.io/component-emitter" "~3.1.0"
+    debug "~4.3.2"
+    engine.io-client "~6.5.0"
+    socket.io-parser "~4.2.4"
+
+socket.io-parser@~4.2.4:
+  version "4.2.4"
+  resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83"
+  integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==
+  dependencies:
+    "@socket.io/component-emitter" "~3.1.0"
+    debug "~4.3.1"
+
+socks-proxy-agent@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6"
+  integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==
+  dependencies:
+    agent-base "^6.0.2"
+    debug "^4.3.3"
+    socks "^2.6.2"
+
+socks@^2.6.2:
+  version "2.7.1"
+  resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55"
+  integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==
+  dependencies:
+    ip "^2.0.0"
+    smart-buffer "^4.2.0"
+
+sort-keys-length@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188"
+  integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==
+  dependencies:
+    sort-keys "^1.0.0"
+
+sort-keys@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+  integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==
+  dependencies:
+    is-plain-obj "^1.0.0"
+
+sort-keys@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
+  integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==
+  dependencies:
+    is-plain-obj "^1.0.0"
+
+source-list-map@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1"
+  integrity sha512-FqR2O+cX+toUD3ULVIgTtiqYIqPnA62ehJD47mf4LG1PZCB+xmIa3gcTEhegGbP22aRPh88dJSdgDIolrvSxBQ==
+
+"source-map-js@>=0.6.2 <2.0.0", "source-map-js@^1.0.1", "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#adbc361d9c62df380125e7f161f71c826f1e490c"
+  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+source-map-support@0.5.13:
+  version "0.5.13"
+  resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
+  integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map-support@~0.5.20:
+  version "0.5.21"
+  resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+"source-map@^0.5.7", "source-map@~0.5.3":
+  version "0.5.7"
+  resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
+
+"source-map@^0.6.0", "source-map@^0.6.1", "source-map@~0.6.1":
+  version "0.6.1"
+  resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+spdx-correct@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
+  integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
+  dependencies:
+    spdx-expression-parse "^3.0.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+  integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+  integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+  dependencies:
+    spdx-exceptions "^2.1.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+  version "3.0.13"
+  resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5"
+  integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==
+
+split.js@^1.5.10:
+  version "1.6.5"
+  resolved "https://registry.npmjs.org/split.js/-/split.js-1.6.5.tgz#f7f61da1044c9984cb42947df4de4fadb5a3f300"
+  integrity sha512-mPTnGCiS/RiuTNsVhCm9De9cCAUsrNFFviRbADdKiiV+Kk8HKp/0fWu7Kr8pi3/yBmsqLFHuXGT9UUZ+CNLwFw==
+
+sprintf-js@1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
+  integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
+
+sprintf-js@~1.0.2:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+ssri@^10.0.0:
+  version "10.0.4"
+  resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6"
+  integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==
+  dependencies:
+    minipass "^5.0.0"
+
+stable@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+  integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+stack-utils@^2.0.3:
+  version "2.0.6"
+  resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
+  integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==
+  dependencies:
+    escape-string-regexp "^2.0.0"
+
+stop-iteration-iterator@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4"
+  integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==
+  dependencies:
+    internal-slot "^1.0.4"
+
+stream-browserify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f"
+  integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==
+  dependencies:
+    inherits "~2.0.4"
+    readable-stream "^3.5.0"
+
+stream-combiner2@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
+  integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==
+  dependencies:
+    duplexer2 "~0.1.0"
+    readable-stream "^2.0.2"
+
+stream-http@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5"
+  integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==
+  dependencies:
+    builtin-status-codes "^3.0.0"
+    inherits "^2.0.4"
+    readable-stream "^3.6.0"
+    xtend "^4.0.2"
+
+stream-splicer@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd"
+  integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==
+  dependencies:
+    inherits "^2.0.1"
+    readable-stream "^2.0.2"
+
+strict-uri-encode@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+  integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==
+
+string-length@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
+  integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
+  dependencies:
+    char-regex "^1.0.2"
+    strip-ansi "^6.0.0"
+
+"string-width-cjs@string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3":
+  version "4.2.3"
+  resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+"string-width@^5.0.1", "string-width@^5.1.2":
+  version "5.1.2"
+  resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+  integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+  dependencies:
+    eastasianwidth "^0.2.0"
+    emoji-regex "^9.2.2"
+    strip-ansi "^7.0.1"
+
+string.prototype.matchall@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"
+  integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+    get-intrinsic "^1.1.3"
+    has-symbols "^1.0.3"
+    internal-slot "^1.0.3"
+    regexp.prototype.flags "^1.4.3"
+    side-channel "^1.0.4"
+
+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#a68352740859f6893f14ce3ef1bb3037f7a90533"
+  integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+
+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#c4a27fa026d979d79c04f17397f250a462944533"
+  integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+
+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#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
+  integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.4"
+
+string_decoder@^1.1.1:
+  version "1.3.0"
+  resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
+string_decoder@~0.10.x:
+  version "0.10.31"
+  resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+  integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+"strip-ansi-cjs@strip-ansi@^6.0.1", "strip-ansi@^6.0.0", "strip-ansi@^6.0.1":
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+  version "7.1.0"
+  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+  integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+  dependencies:
+    ansi-regex "^6.0.1"
+
+strip-bom@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+  integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+strip-comments@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b"
+  integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==
+
+strip-dirs@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5"
+  integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==
+  dependencies:
+    is-natural-number "^4.0.1"
+
+strip-eof@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+  integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
+
+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#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-final-newline@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
+  integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
+
+strip-indent@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+  integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+  dependencies:
+    min-indent "^1.0.0"
+
+strip-indent@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853"
+  integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==
+  dependencies:
+    min-indent "^1.0.1"
+
+"strip-json-comments@^3.1.0", "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#31f1281b3832630434831c310c01cccda8cbe006"
+  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+strip-outer@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
+  integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==
+  dependencies:
+    escape-string-regexp "^1.0.2"
+
+strtok3@^6.2.4:
+  version "6.3.0"
+  resolved "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0"
+  integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==
+  dependencies:
+    "@tokenizer/token" "^0.3.0"
+    peek-readable "^4.1.0"
+
+style-loader@^3.3.2:
+  version "3.3.3"
+  resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff"
+  integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==
+
+style-to-js@1.1.9:
+  version "1.1.9"
+  resolved "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.9.tgz#5bdc23ba7624016094a19d6ea90fa3f98bee34c4"
+  integrity sha512-6bkwhOlPOx+wKiHVlPTHjUqM4zDKv9pyccehB8zetZL0hhQ7MVp7UEWUsohjiMdxwhSsEdjMrEve+8qzUVmY4w==
+  dependencies:
+    style-to-object "1.0.4"
+
+style-to-object@1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.4.tgz#496fded508ce520eca13e738e8af33b8b5af98f2"
+  integrity sha512-KyNO6mfijxSnypdvEjeXlhvbGPSh0l1zBJp80n+ncBQvrEbSwBHwZCpo0xz6Q4AKSPfXowWwypCBAUAdfz3rFQ==
+  dependencies:
+    inline-style-parser "0.2.2"
+
+styled-components@^5.2.1:
+  version "5.3.11"
+  resolved "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz#9fda7bf1108e39bf3f3e612fcc18170dedcd57a8"
+  integrity sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/traverse" "^7.4.5"
+    "@emotion/is-prop-valid" "^1.1.0"
+    "@emotion/stylis" "^0.8.4"
+    "@emotion/unitless" "^0.7.4"
+    babel-plugin-styled-components ">= 1.12.0"
+    css-to-react-native "^3.0.0"
+    hoist-non-react-statics "^3.0.0"
+    shallowequal "^1.1.0"
+    supports-color "^5.5.0"
+
+stylehacks@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9"
+  integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==
+  dependencies:
+    browserslist "^4.21.4"
+    postcss-selector-parser "^6.0.4"
+
+stylehacks@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz#9fdd7c217660dae0f62e14d51c89f6c01b3cb738"
+  integrity sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==
+  dependencies:
+    browserslist "^4.21.4"
+    postcss-selector-parser "^6.0.4"
+
+"stylis@4.2.0", "stylis@^4.0.7":
+  version "4.2.0"
+  resolved "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51"
+  integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
+
+subarg@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
+  integrity sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==
+  dependencies:
+    minimist "^1.1.0"
+
+"supports-color@^5.3.0", "supports-color@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  dependencies:
+    has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+  version "7.2.0"
+  resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-color@^8.0.0:
+  version "8.1.1"
+  resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+  integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+  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#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+svg-parser@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5"
+  integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==
+
+svg-pathdata@^6.0.0:
+  version "6.0.3"
+  resolved "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz#80b0e0283b652ccbafb69ad4f8f73e8d3fbf2cac"
+  integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==
+
+svg2ttf@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.npmjs.org/svg2ttf/-/svg2ttf-6.0.3.tgz#7b92978ff124b2a583d21e1208b9675e245e56d1"
+  integrity sha512-CgqMyZrbOPpc+WqH7aga4JWkDPso23EgypLsbQ6gN3uoPWwwiLjXvzgrwGADBExvCRJrWFzAeK1bSoSpE7ixSQ==
+  dependencies:
+    "@xmldom/xmldom" "^0.7.2"
+    argparse "^2.0.1"
+    cubic2quad "^1.2.1"
+    lodash "^4.17.10"
+    microbuffer "^1.0.0"
+    svgpath "^2.1.5"
+
+svgicons2svgfont@^10.0.4:
+  version "10.0.6"
+  resolved "https://registry.npmjs.org/svgicons2svgfont/-/svgicons2svgfont-10.0.6.tgz#2901f9016244049674d3b3178c36471994a30c0a"
+  integrity sha512-fUgQEVg3XwTbOHvlXahHGqCet5Wvfo1bV4DCvbSRvjsOCPCRunYbG4dUJCPegps37BMph3eOrfoobhH5AWuC6A==
+  dependencies:
+    commander "^7.2.0"
+    geometry-interfaces "^1.1.4"
+    glob "^7.1.6"
+    neatequal "^1.0.0"
+    readable-stream "^3.4.0"
+    sax "^1.2.4"
+    svg-pathdata "^6.0.0"
+
+svgo-loader@^2.2.0:
+  version "2.2.2"
+  resolved "https://registry.npmjs.org/svgo-loader/-/svgo-loader-2.2.2.tgz#5f54e3e0d77c36a84c42bcb42e812c4db534bf96"
+  integrity sha512-UeE/4yZEK96LoYqvxwh8YqCOJCjXwRY9K6YT99vXE+nYhs/W8hAY2hNf5zg/lRsyKshJkR79V+4beV3cbGL40Q==
+  dependencies:
+    js-yaml "^3.13.1"
+    loader-utils "^1.0.3"
+
+svgo@^2.7.0:
+  version "2.8.0"
+  resolved "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24"
+  integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==
+  dependencies:
+    "@trysound/sax" "0.2.0"
+    commander "^7.2.0"
+    css-select "^4.1.3"
+    css-tree "^1.1.3"
+    csso "^4.2.0"
+    picocolors "^1.0.0"
+    stable "^0.1.8"
+
+svgo@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a"
+  integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==
+  dependencies:
+    "@trysound/sax" "0.2.0"
+    commander "^7.2.0"
+    css-select "^5.1.0"
+    css-tree "^2.2.1"
+    csso "^5.0.5"
+    picocolors "^1.0.0"
+
+svgpath@^2.1.5:
+  version "2.6.0"
+  resolved "https://registry.npmjs.org/svgpath/-/svgpath-2.6.0.tgz#5b160ef3d742b7dfd2d721bf90588d3450d7a90d"
+  integrity sha512-OIWR6bKzXvdXYyO4DK/UWa1VA1JeKq8E+0ug2DG98Y/vOmMpfZNj+TIG988HjfYSqtcy/hFOtZq/n/j5GSESNg==
+
+symbol-tree@^3.2.4:
+  version "3.2.4"
+  resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+  integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+syntax-error@^1.1.1:
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c"
+  integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==
+  dependencies:
+    acorn-node "^1.2.0"
+
+"tapable@^2.1.1", "tapable@^2.2.0":
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+  integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+tar-stream@^1.5.2:
+  version "1.6.2"
+  resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
+  integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
+  dependencies:
+    bl "^1.0.0"
+    buffer-alloc "^1.2.0"
+    end-of-stream "^1.0.0"
+    fs-constants "^1.0.0"
+    readable-stream "^2.3.0"
+    to-buffer "^1.1.1"
+    xtend "^4.0.0"
+
+"tar@^6.1.11", "tar@^6.1.2":
+  version "6.1.15"
+  resolved "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69"
+  integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==
+  dependencies:
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    minipass "^5.0.0"
+    minizlib "^2.1.1"
+    mkdirp "^1.0.3"
+    yallist "^4.0.0"
+
+temp-dir@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
+  integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==
+
+tempfile@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz#6b0446856a9b1114d1856ffcbe509cccb0977265"
+  integrity sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==
+  dependencies:
+    temp-dir "^1.0.0"
+    uuid "^3.0.1"
+
+"terser-webpack-plugin@^5.1.1", "terser-webpack-plugin@^5.3.7":
+  version "5.3.9"
+  resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1"
+  integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jest-worker "^27.4.5"
+    schema-utils "^3.1.1"
+    serialize-javascript "^6.0.1"
+    terser "^5.16.8"
+
+terser@^5.16.8:
+  version "5.18.1"
+  resolved "https://registry.npmjs.org/terser/-/terser-5.18.1.tgz#6d8642508ae9fb7b48768e48f16d675c89a78460"
+  integrity sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ==
+  dependencies:
+    "@jridgewell/source-map" "^0.3.3"
+    acorn "^8.8.2"
+    commander "^2.20.0"
+    source-map-support "~0.5.20"
+
+test-exclude@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+  integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+  dependencies:
+    "@istanbuljs/schema" "^0.1.2"
+    glob "^7.1.4"
+    minimatch "^3.0.4"
+
+text-table@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+  integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
+through2@^2.0.0:
+  version "2.0.5"
+  resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+  integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+  dependencies:
+    readable-stream "~2.3.6"
+    xtend "~4.0.1"
+
+"through@>=2.2.7 <3", "through@^2.3.8":
+  version "2.3.8"
+  resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
+"timed-out@^4.0.0", "timed-out@^4.0.1":
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+  integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==
+
+timers-browserify@^1.0.1:
+  version "1.4.2"
+  resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
+  integrity sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==
+  dependencies:
+    process "~0.11.0"
+
+tiny-warning@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+  integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+tmpl@1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
+  integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
+
+to-buffer@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
+  integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
+
+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#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+  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#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+token-types@^4.1.1:
+  version "4.2.1"
+  resolved "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753"
+  integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==
+  dependencies:
+    "@tokenizer/token" "^0.3.0"
+    ieee754 "^1.2.1"
+
+totalist@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df"
+  integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==
+
+tough-cookie@^4.1.2:
+  version "4.1.3"
+  resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
+  integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==
+  dependencies:
+    psl "^1.1.33"
+    punycode "^2.1.1"
+    universalify "^0.2.0"
+    url-parse "^1.5.3"
+
+tr46@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
+  integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==
+  dependencies:
+    punycode "^2.1.1"
+
+trim-newlines@^4.0.2:
+  version "4.1.1"
+  resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz#28c88deb50ed10c7ba6dc2474421904a00139125"
+  integrity sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==
+
+trim-repeated@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
+  integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==
+  dependencies:
+    escape-string-regexp "^1.0.2"
+
+tslib@2.3.1:
+  version "2.3.1"
+  resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
+  integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
+
+tslib@^1.8.1:
+  version "1.14.1"
+  resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.0.3:
+  version "2.6.2"
+  resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+  integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+
+tslib@^2.4.0:
+  version "2.5.3"
+  resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913"
+  integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==
+
+tsutils@^3.21.0:
+  version "3.21.0"
+  resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+  integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+  dependencies:
+    tslib "^1.8.1"
+
+ttf2eot@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/ttf2eot/-/ttf2eot-3.1.0.tgz#c8971af7c68c5b996d8cfdb8847cdadfbf195e05"
+  integrity sha512-aHTbcYosNHVqb2Qtt9Xfta77ae/5y0VfdwNLUS6sGBeGr22cX2JDMo/i5h3uuOf+FAD3akYOr17+fYd5NK8aXw==
+  dependencies:
+    argparse "^2.0.1"
+
+ttf2woff2@^4.0.4:
+  version "4.0.5"
+  resolved "https://registry.npmjs.org/ttf2woff2/-/ttf2woff2-4.0.5.tgz#c7c87242938e9e2ed37fe5f477dd21acdb88fbfd"
+  integrity sha512-zpoU0NopfjoyVqkFeQ722SyKk/n607mm5OHxuDS/wCCSy82B8H3hHXrezftA2KMbKqfJIjie2lsJHdvPnBGbsw==
+  dependencies:
+    bindings "^1.5.0"
+    bufferstreams "^3.0.0"
+    nan "^2.14.2"
+    node-gyp "^9.0.0"
+
+ttf2woff@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/ttf2woff/-/ttf2woff-3.0.0.tgz#bd0fc0157e428b7a9a30340f78adf72fb741962a"
+  integrity sha512-OvmFcj70PhmAsVQKfC15XoKH55cRWuaRzvr2fpTNhTNer6JBpG8n6vOhRrIgxMjcikyYt88xqYXMMVapJ4Rjvg==
+  dependencies:
+    argparse "^2.0.1"
+    pako "^1.0.0"
+
+tty-browserify@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811"
+  integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==
+
+tunnel-agent@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+  integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+  dependencies:
+    safe-buffer "^5.0.1"
+
+"type-check@^0.4.0", "type-check@~0.4.0":
+  version "0.4.0"
+  resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+  dependencies:
+    prelude-ls "^1.2.1"
+
+type-detect@4.0.8:
+  version "4.0.8"
+  resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+  integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.20.2:
+  version "0.20.2"
+  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+type-fest@^0.21.3:
+  version "0.21.3"
+  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+  integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+"type-fest@^1.0.1", "type-fest@^1.2.1", "type-fest@^1.2.2":
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
+  integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
+
+typed-array-buffer@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60"
+  integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.2.1"
+    is-typed-array "^1.1.10"
+
+typed-array-byte-length@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0"
+  integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==
+  dependencies:
+    call-bind "^1.0.2"
+    for-each "^0.3.3"
+    has-proto "^1.0.1"
+    is-typed-array "^1.1.10"
+
+typed-array-byte-offset@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b"
+  integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==
+  dependencies:
+    available-typed-arrays "^1.0.5"
+    call-bind "^1.0.2"
+    for-each "^0.3.3"
+    has-proto "^1.0.1"
+    is-typed-array "^1.1.10"
+
+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#89d83785e5c4098bec72e08b319651f0eac9c1bb"
+  integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
+  dependencies:
+    call-bind "^1.0.2"
+    for-each "^0.3.3"
+    is-typed-array "^1.1.9"
+
+typedarray@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+  integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
+
+typescript@^3.2.2:
+  version "3.9.10"
+  resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
+  integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
+
+uglify-js@^3.1.4:
+  version "3.17.4"
+  resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c"
+  integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==
+
+umd@^3.0.0:
+  version "3.0.3"
+  resolved "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf"
+  integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==
+
+unbox-primitive@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+  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"
+
+unbzip2-stream@^1.0.9:
+  version "1.4.3"
+  resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
+  integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
+  dependencies:
+    buffer "^5.2.1"
+    through "^2.3.8"
+
+unc-path-regex@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
+  integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==
+
+undeclared-identifiers@^1.1.2:
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f"
+  integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==
+  dependencies:
+    acorn-node "^1.3.0"
+    dash-ast "^1.0.0"
+    get-assigned-identifiers "^1.2.0"
+    simple-concat "^1.0.0"
+    xtend "^4.0.1"
+
+underscore@^1.9.1:
+  version "1.13.6"
+  resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441"
+  integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==
+
+unicode-canonical-property-names-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
+  integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==
+
+unicode-match-property-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
+  integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
+  dependencies:
+    unicode-canonical-property-names-ecmascript "^2.0.0"
+    unicode-property-aliases-ecmascript "^2.0.0"
+
+unicode-match-property-value-ecmascript@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0"
+  integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==
+
+unicode-property-aliases-ecmascript@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
+  integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
+
+unique-filename@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea"
+  integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==
+  dependencies:
+    unique-slug "^4.0.0"
+
+unique-slug@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3"
+  integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==
+  dependencies:
+    imurmurhash "^0.1.4"
+
+universalify@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
+  integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
+
+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#9a2a641ad2907ae7b3616506f4b977851db5b940"
+  integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
+  dependencies:
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
+
+update-browserslist-db@^1.0.13:
+  version "1.0.13"
+  resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
+  integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
+  dependencies:
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
+
+uplot-react@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.npmjs.org/uplot-react/-/uplot-react-1.1.4.tgz#02b9918a199da9983fc0d375fb44e443749e2ac0"
+  integrity sha512-qO1UkQwjVKdj5vTm3O3yldvu1T6hwY4++rH4KznLhjqpnLdncq1zsRxq/zQz/HUHPVD0j7WBcEISbNM61JsuAQ==
+
+uplot@^1.6.24:
+  version "1.6.24"
+  resolved "https://registry.npmjs.org/uplot/-/uplot-1.6.24.tgz#dfa213fa7da92763261920ea972ed1a5f9f6af12"
+  integrity sha512-WpH2BsrFrqxkMu+4XBvc0eCDsRBhzoq9crttYeSI0bfxpzR5YoSVzZXOKFVWcVC7sp/aDXrdDPbDZGCtck2PVg==
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+url-join@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
+  integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
+
+url-loader@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2"
+  integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==
+  dependencies:
+    loader-utils "^2.0.0"
+    mime-types "^2.1.27"
+    schema-utils "^3.0.0"
+
+url-parse-lax@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+  integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==
+  dependencies:
+    prepend-http "^1.0.1"
+
+url-parse-lax@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
+  integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==
+  dependencies:
+    prepend-http "^2.0.0"
+
+url-parse@^1.5.3:
+  version "1.5.10"
+  resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
+  integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
+  dependencies:
+    querystringify "^2.1.1"
+    requires-port "^1.0.0"
+
+url-to-options@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
+  integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==
+
+url@~0.11.0:
+  version "0.11.1"
+  resolved "https://registry.npmjs.org/url/-/url-0.11.1.tgz#26f90f615427eca1b9f4d6a28288c147e2302a32"
+  integrity sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==
+  dependencies:
+    punycode "^1.4.1"
+    qs "^6.11.0"
+
+use-isomorphic-layout-effect@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb"
+  integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==
+
+"use-sync-external-store@1.2.0", "use-sync-external-store@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
+  integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
+
+"util-deprecate@^1.0.1", "util-deprecate@^1.0.2", "util-deprecate@~1.0.1":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+util@0.10.3:
+  version "0.10.3"
+  resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+  integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==
+  dependencies:
+    inherits "2.0.1"
+
+util@~0.12.0:
+  version "0.12.5"
+  resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc"
+  integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==
+  dependencies:
+    inherits "^2.0.3"
+    is-arguments "^1.0.4"
+    is-generator-function "^1.0.7"
+    is-typed-array "^1.1.3"
+    which-typed-array "^1.1.2"
+
+uuid@^3.0.1:
+  version "3.4.0"
+  resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+  integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+v8-to-istanbul@^9.0.1:
+  version "9.1.0"
+  resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265"
+  integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.12"
+    "@types/istanbul-lib-coverage" "^2.0.1"
+    convert-source-map "^1.6.0"
+
+valid-filename@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/valid-filename/-/valid-filename-2.0.1.tgz#0768d6f364b1ed3bdf68f0d15abffb0d9d6cecaf"
+  integrity sha512-7eF/iUZ5SPd3FighoKgatSjXDJ25Vopo/6yvEKGyX4FIeZVHcLjHmyvbQ1WdFD9RQZ9PoBA7nrSxxAz/oC64SQ==
+  dependencies:
+    filename-reserved-regex "^2.0.0"
+
+validate-npm-package-license@^3.0.1:
+  version "3.0.4"
+  resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+  dependencies:
+    spdx-correct "^3.0.0"
+    spdx-expression-parse "^3.0.0"
+
+vanilla-picker@^2.12.1:
+  version "2.12.1"
+  resolved "https://registry.npmjs.org/vanilla-picker/-/vanilla-picker-2.12.1.tgz#6e619eecf553891b8d2d042b745a23c91f19f34c"
+  integrity sha512-2qrEP9VYylKXbyzXKsbu2dferBTvqnlsr29XjHwFE+/MEp0VNj6oEUESLDtKZ7DWzGdSv1x/+ujqFZF+KsO3cg==
+  dependencies:
+    "@sphinxxxx/color-conversion" "^2.2.2"
+
+varstream@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.npmjs.org/varstream/-/varstream-0.3.2.tgz#18ac6494765f3ff1a35ad9a4be053bec188a5de1"
+  integrity sha512-OpR3Usr9dGZZbDttlTxdviGdxiURI0prX68+DuaN/JfIDbK9ZOmREKM6PgmelsejMnhgjXmEEEgf+E4NbsSqMg==
+  dependencies:
+    readable-stream "^1.0.33"
+
+vm-browserify@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+  integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+w3c-xmlserializer@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073"
+  integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==
+  dependencies:
+    xml-name-validator "^4.0.0"
+
+walker@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
+  integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
+  dependencies:
+    makeerror "1.0.12"
+
+watchpack@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
+  integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
+  dependencies:
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.1.2"
+
+webfonts-loader@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.npmjs.org/webfonts-loader/-/webfonts-loader-8.0.1.tgz#1e8e21242ab3cf5be43686137c77cd9697ad3ce4"
+  integrity sha512-+ud7K1xpPM5P119R/QBXE8oHrZytngK7JHJroEJCscmnNEdN5NCyas5fZjQoxhHWiu4kBZh58IiQ4aNAg0GTow==
+  dependencies:
+    "@vusion/webfonts-generator" "^0.8.0"
+    glob "^7.1.6"
+    loader-utils "^2.0.0"
+
+webidl-conversions@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
+  integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
+
+webpack-bundle-analyzer@^4.8.0:
+  version "4.9.0"
+  resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz#fc093c4ab174fd3dcbd1c30b763f56d10141209d"
+  integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw==
+  dependencies:
+    "@discoveryjs/json-ext" "0.5.7"
+    acorn "^8.0.4"
+    acorn-walk "^8.0.0"
+    chalk "^4.1.0"
+    commander "^7.2.0"
+    gzip-size "^6.0.0"
+    lodash "^4.17.20"
+    opener "^1.5.2"
+    sirv "^1.0.7"
+    ws "^7.3.1"
+
+webpack-cli@^4.5.0:
+  version "4.10.0"
+  resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31"
+  integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==
+  dependencies:
+    "@discoveryjs/json-ext" "^0.5.0"
+    "@webpack-cli/configtest" "^1.2.0"
+    "@webpack-cli/info" "^1.5.0"
+    "@webpack-cli/serve" "^1.7.0"
+    colorette "^2.0.14"
+    commander "^7.0.0"
+    cross-spawn "^7.0.3"
+    fastest-levenshtein "^1.0.12"
+    import-local "^3.0.2"
+    interpret "^2.2.0"
+    rechoir "^0.7.0"
+    webpack-merge "^5.7.3"
+
+webpack-merge@^5.7.3:
+  version "5.9.0"
+  resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826"
+  integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==
+  dependencies:
+    clone-deep "^4.0.1"
+    wildcard "^2.0.0"
+
+webpack-sources@^0.2.3:
+  version "0.2.3"
+  resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb"
+  integrity sha512-iqanNZjOHLdPn/R0e/nKVn90dm4IsUMxKam0MZD1btWhFub/Cdo1nWdMio6yEqBc0F8mEieOjc+jfBSXwna94Q==
+  dependencies:
+    source-list-map "^1.1.1"
+    source-map "~0.5.3"
+
+webpack-sources@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+webpack@^5.88.2:
+  version "5.88.2"
+  resolved "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e"
+  integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==
+  dependencies:
+    "@types/eslint-scope" "^3.7.3"
+    "@types/estree" "^1.0.0"
+    "@webassemblyjs/ast" "^1.11.5"
+    "@webassemblyjs/wasm-edit" "^1.11.5"
+    "@webassemblyjs/wasm-parser" "^1.11.5"
+    acorn "^8.7.1"
+    acorn-import-assertions "^1.9.0"
+    browserslist "^4.14.5"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^5.15.0"
+    es-module-lexer "^1.2.1"
+    eslint-scope "5.1.1"
+    events "^3.2.0"
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.2.9"
+    json-parse-even-better-errors "^2.3.1"
+    loader-runner "^4.2.0"
+    mime-types "^2.1.27"
+    neo-async "^2.6.2"
+    schema-utils "^3.2.0"
+    tapable "^2.1.1"
+    terser-webpack-plugin "^5.3.7"
+    watchpack "^2.4.0"
+    webpack-sources "^3.2.3"
+
+whatwg-encoding@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
+  integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
+  dependencies:
+    iconv-lite "0.6.3"
+
+whatwg-mimetype@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
+  integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==
+
+whatwg-url@^11.0.0:
+  version "11.0.0"
+  resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018"
+  integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==
+  dependencies:
+    tr46 "^3.0.0"
+    webidl-conversions "^7.0.0"
+
+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#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+  integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+  dependencies:
+    is-bigint "^1.0.1"
+    is-boolean-object "^1.1.0"
+    is-number-object "^1.0.4"
+    is-string "^1.0.5"
+    is-symbol "^1.0.3"
+
+which-builtin-type@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b"
+  integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==
+  dependencies:
+    function.prototype.name "^1.1.5"
+    has-tostringtag "^1.0.0"
+    is-async-function "^2.0.0"
+    is-date-object "^1.0.5"
+    is-finalizationregistry "^1.0.2"
+    is-generator-function "^1.0.10"
+    is-regex "^1.1.4"
+    is-weakref "^1.0.2"
+    isarray "^2.0.5"
+    which-boxed-primitive "^1.0.2"
+    which-collection "^1.0.1"
+    which-typed-array "^1.1.9"
+
+which-collection@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
+  integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
+  dependencies:
+    is-map "^2.0.1"
+    is-set "^2.0.1"
+    is-weakmap "^2.0.1"
+    is-weakset "^2.0.1"
+
+which-typed-array@^1.1.10:
+  version "1.1.11"
+  resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a"
+  integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==
+  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"
+
+"which-typed-array@^1.1.2", "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#307cf898025848cf995e795e8423c7f337efbde6"
+  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@^1.2.9:
+  version "1.3.1"
+  resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+  dependencies:
+    isexe "^2.0.0"
+
+"which@^2.0.1", "which@^2.0.2":
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+wide-align@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
+  integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
+  dependencies:
+    string-width "^1.0.2 || 2 || 3 || 4"
+
+wildcard@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
+  integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
+
+wkx@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c"
+  integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==
+  dependencies:
+    "@types/node" "*"
+
+word-wrap@^1.2.3:
+  version "1.2.3"
+  resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wordwrap@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+  integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
+
+"wrap-ansi-cjs@wrap-ansi@^7.0.0", "wrap-ansi@^7.0.0":
+  version "7.0.0"
+  resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+  integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+  dependencies:
+    ansi-styles "^6.1.0"
+    string-width "^5.0.1"
+    strip-ansi "^7.0.1"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+write-file-atomic@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd"
+  integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==
+  dependencies:
+    imurmurhash "^0.1.4"
+    signal-exit "^3.0.7"
+
+ws@^7.3.1:
+  version "7.5.9"
+  resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
+  integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+
+ws@^8.11.0:
+  version "8.13.0"
+  resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
+  integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
+
+ws@~8.11.0:
+  version "8.11.0"
+  resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
+  integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
+
+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#79a006e2e63149a8600f15430f0a4725d1524835"
+  integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
+
+xmlchars@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+  integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
+xmlhttprequest-ssl@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67"
+  integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==
+
+"xtend@^4.0.0", "xtend@^4.0.1", "xtend@^4.0.2", "xtend@~4.0.1":
+  version "4.0.2"
+  resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+xterm-addon-fit@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz#2d51b983b786a97dcd6cde805e700c7f913bc596"
+  integrity sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==
+
+xterm-addon-search@^0.8.0:
+  version "0.8.2"
+  resolved "https://registry.npmjs.org/xterm-addon-search/-/xterm-addon-search-0.8.2.tgz#be7aa74d5ff12c901707c6ff674229f214318032"
+  integrity sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg==
+
+xterm-addon-web-links@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.npmjs.org/xterm-addon-web-links/-/xterm-addon-web-links-0.4.0.tgz#265cbf8221b9b315d0a748e1323bee331cd5da03"
+  integrity sha512-xv8GeiINmx0zENO9hf5k+5bnkaE8mRzF+OBAr9WeFq2eLaQSudioQSiT34M1ofKbzcdjSsKiZm19Rw3i4eXamg==
+
+xterm@^4.11.0:
+  version "4.19.0"
+  resolved "https://registry.npmjs.org/xterm/-/xterm-4.19.0.tgz#c0f9d09cd61de1d658f43ca75f992197add9ef6d"
+  integrity sha512-c3Cp4eOVsYY5Q839dR5IejghRPpxciGmLWWaP9g+ppfMeBChMeLa1DCA+pmX/jyDZ+zxFOmlJL/82qVdayVoGQ==
+
+y18n@^5.0.5:
+  version "5.0.8"
+  resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+  integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+  integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==
+
+yallist@^3.0.2:
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+"yaml@^1.10.0", "yaml@^1.10.2", "yaml@^1.7.2":
+  version "1.10.2"
+  resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+  integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yargs-parser@^20.2.9:
+  version "20.2.9"
+  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+  integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
+yargs-parser@^21.1.1:
+  version "21.1.1"
+  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
+  integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs@^17.3.1:
+  version "17.7.2"
+  resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
+  integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+  dependencies:
+    cliui "^8.0.1"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
+    require-directory "^2.1.1"
+    string-width "^4.2.3"
+    y18n "^5.0.5"
+    yargs-parser "^21.1.1"
+
+yarn-audit-html@4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/yarn-audit-html/-/yarn-audit-html-4.0.0.tgz#dc04c9cf83e758fd6d9efad8c96df1fc8c4bf30c"
+  integrity sha512-PZW+M6b6BW4hBU6AuUnxFSOVOq6Gnrh+krBdzcX3OjWNqiDh8ovhiB6pTYEeR13jL8J9VXk/1POn2XljicWZNA==
+  dependencies:
+    commander "^9.3.0"
+    ejs "~3.1.8"
+    marked "^4.0.17"
+
+yauzl@^2.4.2:
+  version "2.10.0"
+  resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+  integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
+  dependencies:
+    buffer-crc32 "~0.2.3"
+    fd-slicer "~1.1.0"
+
+yocto-queue@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+zustand@^4.4.1:
+  version "4.4.1"
+  resolved "https://registry.npmjs.org/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0"
+  integrity sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==
+  dependencies:
+    use-sync-external-store "1.2.0"
+
+"react-data-grid@https://github.com/pgadmin-org/react-data-grid.git#200d2f5e02de694e3e9ffbe177c279bc40240fb8":
+  version "7.0.0-beta.14"
+  resolved "https://github.com/pgadmin-org/react-data-grid.git#200d2f5e02de694e3e9ffbe177c279bc40240fb8"
+  dependencies:
+    "clsx" "^1.1.1"
+"react-data-grid@https://github.com/pgadmin-org/react-data-grid.git#200d2f5e02de694e3e9ffbe177c279bc40240fb8":
+  version "7.0.0-beta.14"
+  resolved "https://github.com/pgadmin-org/react-data-grid.git#200d2f5e02de694e3e9ffbe177c279bc40240fb8"
+  dependencies:
+    "clsx" "^1.1.1"
diff --git a/nixpkgs/pkgs/tools/admin/procs/default.nix b/nixpkgs/pkgs/tools/admin/procs/default.nix
new file mode 100644
index 000000000000..c72c498f7cb2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/procs/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, installShellFiles, Security, libiconv, Libsystem }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "procs";
+  version = "0.14.4";
+
+  src = fetchFromGitHub {
+    owner = "dalance";
+    repo = "procs";
+    rev = "v${version}";
+    hash = "sha256-Gx3HRGWi+t/wT1WrbuHXVyX+cP+JvZV8lBun1Qs8Xys=";
+  };
+
+  cargoHash = "sha256-0eLOAZnHbnvT8qgSfWO/RKXIdRr5wwfUQ9YQ77I6okQ=";
+
+  nativeBuildInputs = [ installShellFiles ]
+    ++ lib.optionals stdenv.isDarwin [ rustPlatform.bindgenHook ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/procs --gen-completion $shell
+    done
+    installShellCompletion procs.{bash,fish} --zsh _procs
+  '';
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security libiconv Libsystem ];
+
+  meta = with lib; {
+    description = "A modern replacement for ps written in Rust";
+    homepage = "https://github.com/dalance/procs";
+    changelog = "https://github.com/dalance/procs/raw/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne sciencentistguy ];
+    mainProgram = "procs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/proxmove/default.nix b/nixpkgs/pkgs/tools/admin/proxmove/default.nix
new file mode 100644
index 000000000000..6f20e5fe603f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/proxmove/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "proxmove";
+  version = "1.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ossobv";
+    repo = "proxmove";
+    rev = "v${version}";
+    hash = "sha256-8xzsmQsogoMrdpf8+mVZRWPGQt9BO0dBT0aKt7ygUe4=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    proxmoxer
+  ];
+
+  preBuild = ''
+    rm -R assets
+    rm -R artwork
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    $out/bin/${pname} --version
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "The Proxmox VM migrator: migrates VMs between different Proxmox VE clusters";
+    homepage = "https://github.com/ossobv/proxmove";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ AngryAnt ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulsarctl/default.nix b/nixpkgs/pkgs/tools/admin/pulsarctl/default.nix
new file mode 100644
index 000000000000..486cdeff021d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulsarctl/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, nix-update-script
+, testers
+, pulsarctl
+}:
+
+buildGoModule rec {
+  pname = "pulsarctl";
+  version = "2.11.1.3";
+
+  src = fetchFromGitHub {
+    owner = "streamnative";
+    repo = "pulsarctl";
+    rev = "v${version}";
+    hash = "sha256-sztjHw3su8KAV/zZcJqPWhjblINa8nYCN5Dzhn6X07w=";
+  };
+
+  vendorHash = "sha256-NQ8zvrW6lBF1js+WI2PPvXhv4YRS2IBT6S4vDoE1BFc=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preBuild = let
+    buildVars = {
+      ReleaseVersion = version;
+      BuildTS = "None";
+      GitHash = src.rev;
+      GitBranch = "None";
+      GoVersion = "$(go version | egrep -o 'go[0-9]+[.][^ ]*')";
+    };
+    buildVarsFlags = lib.concatStringsSep " " (lib.mapAttrsToList (k: v: "-X github.com/streamnative/pulsarctl/pkg/cmdutils.${k}=${v}") buildVars);
+  in
+  ''
+    buildFlagsArray+=("-ldflags=${buildVarsFlags}")
+  '';
+
+  excludedPackages = [
+    "./pkg/test"
+    "./pkg/test/bookkeeper"
+    "./pkg/test/bookkeeper/containers"
+    "./pkg/test/pulsar"
+    "./pkg/test/pulsar/containers"
+    "./site/gen-pulsarctldocs"
+    "./site/gen-pulsarctldocs/generators"
+  ];
+
+  doCheck = false;
+
+  postInstall = ''
+    installShellCompletion --cmd pulsarctl \
+      --bash <($out/bin/pulsarctl completion bash) \
+      --fish <($out/bin/pulsarctl completion fish) \
+      --zsh <($out/bin/pulsarctl completion zsh)
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = pulsarctl;
+      command = "pulsarctl --version";
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = " a CLI for Apache Pulsar written in Go";
+    homepage = "https://github.com/streamnative/pulsarctl";
+    license = with licenses; [ asl20 ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ gaelreyrol ];
+    mainProgram = "pulsarctl";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-bin/data.nix b/nixpkgs/pkgs/tools/admin/pulumi-bin/data.nix
new file mode 100644
index 000000000000..ce63140757ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-bin/data.nix
@@ -0,0 +1,639 @@
+# DO NOT EDIT! This file is generated automatically by update.sh
+{ }:
+{
+  version = "3.106.0";
+  pulumiPkgs = {
+    x86_64-linux = [
+      {
+        url = "https://get.pulumi.com/releases/sdk/pulumi-v3.106.0-linux-x64.tar.gz";
+        sha256 = "1rkbx76n15cn6hyglxzzm8msrd1yiqlp3xym7ngafx385926j3n9";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aiven-v6.11.3-linux-amd64.tar.gz";
+        sha256 = "1yarg14596lwl6mf7xwba4yp3lgcdkj9q5m5x3qibpwc7psjzndc";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-akamai-v6.3.2-linux-amd64.tar.gz";
+        sha256 = "0h1hh45rswp0s5xzf6hf2ncp645nnxqsslriaqyy4dqal3q6iisv";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-alicloud-v3.49.0-linux-amd64.tar.gz";
+        sha256 = "07wyxig26ss9a4jcdwwrpy615ii17gky9s0ncz1nlrwrgiazmah0";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-artifactory-v6.1.4-linux-amd64.tar.gz";
+        sha256 = "0ck22ygb0dhkhpp47fwy7zq30i0cnqs7c76lfmzxvlb7435h5j7r";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-auth0-v3.1.2-linux-amd64.tar.gz";
+        sha256 = "06gz2xqmwms01r4p59l9yvv3w3jvmlyaqr8y2z91hn0im4l8df2b";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aws-v6.22.2-linux-amd64.tar.gz";
+        sha256 = "1mc8xlmkb84v2zvghnllx7216cg9kg8k56abfv8adsi19ylfglgf";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azuread-v5.47.1-linux-amd64.tar.gz";
+        sha256 = "068hi7f8jyia6rsmlzyc2vc7qgyl7b7ll05kx5czjrq132mv56d6";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azuredevops-v2.15.0-linux-amd64.tar.gz";
+        sha256 = "0jaqkf7ibp0vxrvz6imaal9iyf60p6hhay7vmh62vmm0jgdv1ply";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azure-v5.66.1-linux-amd64.tar.gz";
+        sha256 = "043ma740h4036h6f57m49djw5nl7vrkwbk33hylv9v5grkmwb6b9";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-cloudflare-v5.20.0-linux-amd64.tar.gz";
+        sha256 = "0yf181l9nc7lzqkc0gyw7y5dr0lcz2sz8sv369chz4zm3dqaripk";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-consul-v3.11.1-linux-amd64.tar.gz";
+        sha256 = "1rjh73d5jq2p9ll6xann3mns4dsnb8jgnkndjxbgcpv45i0k1ih6";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-datadog-v4.25.1-linux-amd64.tar.gz";
+        sha256 = "0afs9wdp11sxps0hrwwan1h44cxa0z52yhh43rl6rg13chhqlhk8";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-digitalocean-v4.25.1-linux-amd64.tar.gz";
+        sha256 = "1v1sxmi5jhjxas7wa7j74lg0j109fdk8ydkzb4j5rybdmqalkqaj";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-docker-v4.5.1-linux-amd64.tar.gz";
+        sha256 = "15alxvj14xwbwrds9sc4pjycjrm4bivxjlby8ja34jqw0rzfafm0";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-equinix-metal-v3.2.1-linux-amd64.tar.gz";
+        sha256 = "0hnardid0kbzy65dmn7vz8ddy5hq78nf2871zz6srf2hfyiv7qa4";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-fastly-v8.4.2-linux-amd64.tar.gz";
+        sha256 = "0f4czs3hjibmwvswm2zgjq3nys2sp4lr7xy2rpm4k7msdcsxk5kb";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gcp-v7.9.0-linux-amd64.tar.gz";
+        sha256 = "1v9jcpp9rbrgzj0xklxfvr2f7jdxh5dfyc0aqvs45jzyhc6sdrxb";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-github-v5.26.0-linux-amd64.tar.gz";
+        sha256 = "12j5y60h76gyy0bn3phfmcw2aq6kkxi28qp53y7pryrby6yraffn";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gitlab-v6.8.1-linux-amd64.tar.gz";
+        sha256 = "0cw1dfdwax87nqpac55jn6r1hmy0z4rmxl5qp9i7znjwk132xbhh";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-google-native-v0.32.0-linux-amd64.tar.gz";
+        sha256 = "1zra1ck64gs4nwqf62ksfmpbx24lxw6vsgi47j4v8q051m89fgq3";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-hcloud-v1.17.0-linux-amd64.tar.gz";
+        sha256 = "0pz7jga19pwwx7ba5364b6sv1zsmxvnldakdh6641fqp9wl6smxp";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v4.7.1-linux-amd64.tar.gz";
+        sha256 = "11lvnkfsl9iqsazs84z2ipn9kmyv50xavzb4i1zhcn9i6ldl4wag";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-linode-v4.13.0-linux-amd64.tar.gz";
+        sha256 = "0xay37wbrs9l01j4w07ywymi1wn8sxnj5668s3p1yshi257n1nz3";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mailgun-v3.5.1-linux-amd64.tar.gz";
+        sha256 = "1k2pa1wbh49qkg99khdyzj1qfjld74ijzn4y94c27vjsm9wmn7ka";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mysql-v3.2.1-linux-amd64.tar.gz";
+        sha256 = "068zzad887pqsdyx93xdj5vnkr7pvsx7i4sqzm536g53k79xq54l";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-openstack-v3.15.1-linux-amd64.tar.gz";
+        sha256 = "135br9q8f1ic0xvrhx9yii5giq1h5qzlyb5kyvnyb3hwx49f1ik6";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-postgresql-v3.10.1-linux-amd64.tar.gz";
+        sha256 = "1vi1mhkrxrl5ajaa93vfziii12w0wwlrxd6hyvvxwfkkxn0n3ivm";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-random-v4.15.1-linux-amd64.tar.gz";
+        sha256 = "1za2d3cad1grcnkkqmyn9b7wlz9ayimsv17ygg638wh7v34w0yjq";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-snowflake-v0.48.0-linux-amd64.tar.gz";
+        sha256 = "0q7jbwj0di778b0zl01nphb3mzvdkyxkgn9q4kkvzz2rg36c20s0";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-spotinst-v3.67.2-linux-amd64.tar.gz";
+        sha256 = "1r8fd8363ikc9ffk7fwpjghrmvzjqvgv50945pkvsbpnxkx931ca";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-sumologic-v0.20.2-linux-amd64.tar.gz";
+        sha256 = "0jiny0s6hvzzcgv7zkdmc4d0rdcwpq49dz7fqsaz81maz7kck8a5";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-tailscale-v0.13.5-linux-amd64.tar.gz";
+        sha256 = "0b94z9pzrsdabcs9xkhk0fljqf2ml374nqpp3i1zxnrr0fkwbfvv";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-tls-v5.0.1-linux-amd64.tar.gz";
+        sha256 = "1d4qdrbqsn62116lg0j82andxdrcdrcambahxp3084b6icacx3l9";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vault-v5.19.0-linux-amd64.tar.gz";
+        sha256 = "00zwsabii05xj91sbi8gz2w9h3jrhw0ksv206mj122j5fns5qhm3";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-venafi-v1.6.3-linux-amd64.tar.gz";
+        sha256 = "0jfp8wqb6gkq7ndihi4bpcm2s0vz1xkc2m4i58hy80zfvdiq3ipz";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vsphere-v4.9.2-linux-amd64.tar.gz";
+        sha256 = "0jqbhqiws4v9ff5xakk5wnxghnnck4qaqvyxc2l246jsl9yy3z85";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-wavefront-v3.1.0-linux-amd64.tar.gz";
+        sha256 = "1qi63mpv6dhmld6a8siikgjyhvyjzl9bcrc55hb93wbk028lncnh";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-yandex-v0.13.0-linux-amd64.tar.gz";
+        sha256 = "14qsnjafhd8ppachxr7j9541p5rbf1cakqlr7mra86fli1r49z9p";
+      }
+    ];
+    x86_64-darwin = [
+      {
+        url = "https://get.pulumi.com/releases/sdk/pulumi-v3.106.0-darwin-x64.tar.gz";
+        sha256 = "1yav7d220vnadvxdhyfmwj7n0lm0xmr0a3aspi4240p493005ina";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aiven-v6.11.3-darwin-amd64.tar.gz";
+        sha256 = "1bqphs66wq771bq46a12177xpbjn19pbrwa9h43dmxnvh35g52rj";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-akamai-v6.3.2-darwin-amd64.tar.gz";
+        sha256 = "0pzmj4fgkdc8bxf1rl64bmz9x2g0i2ayarqw54h8462c3p6xl3ca";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-alicloud-v3.49.0-darwin-amd64.tar.gz";
+        sha256 = "1yd1s42lnjmz02i5kplxa0x6qk80m20f0x1dypxnbrjnghj05fcq";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-artifactory-v6.1.4-darwin-amd64.tar.gz";
+        sha256 = "0ir0pp8rc7mh5rwlcz6jn1s8icw7h09rlqmh0gpsg9blhsfqzdka";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-auth0-v3.1.2-darwin-amd64.tar.gz";
+        sha256 = "1wlw4lvdy63fw2vpv0cg3g5ffy1frr8dfbvnr1avashw1bvmh6yd";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aws-v6.22.2-darwin-amd64.tar.gz";
+        sha256 = "0c50afzbnaj2a5jg6750y7qv1hc48hsa229lkci4z20s0bgvbg7h";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azuread-v5.47.1-darwin-amd64.tar.gz";
+        sha256 = "1hkkjqm5b8mnzvgkjzz3zkq86wzbi89n1i19l9jy57pbr6mr2kkk";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azuredevops-v2.15.0-darwin-amd64.tar.gz";
+        sha256 = "11whky196lqgj8bgzxixd1m39jqw3fs9if8knmwcr7zmd3jyf80w";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azure-v5.66.1-darwin-amd64.tar.gz";
+        sha256 = "1g8rhfay9gcjhiv6dfhkgvxg1l26axgfrd29jaxsai6sanwcpxjl";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-cloudflare-v5.20.0-darwin-amd64.tar.gz";
+        sha256 = "149sfyxnb90v9y136rwf08z4k3kmq4ivmcpyjs8vj7wpz0xgjsk0";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-consul-v3.11.1-darwin-amd64.tar.gz";
+        sha256 = "1bvwgn823zwqs8wmzwsxc0zf0pdmk7ykh5qvnffwrixvhmdx68a0";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-datadog-v4.25.1-darwin-amd64.tar.gz";
+        sha256 = "11971fwsv0i6nmmxzg9m93l48xndi9x96zibjbjmwjxnr419s5rm";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-digitalocean-v4.25.1-darwin-amd64.tar.gz";
+        sha256 = "1yaphn5rgcwjiipdga49pyn8wbz8w2pghbjzmjcrxa5q7hy8a2z0";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-docker-v4.5.1-darwin-amd64.tar.gz";
+        sha256 = "11ljzm0alsrz0y9kihw0rd62hpi68ka0n6b8c52rg3sv672acnb7";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-equinix-metal-v3.2.1-darwin-amd64.tar.gz";
+        sha256 = "1m5lh59h7nck1flzxs9m4n0ag0klk3jmnpf7hc509vffxs89xnjq";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-fastly-v8.4.2-darwin-amd64.tar.gz";
+        sha256 = "03xk7hkcs0f8684ll7f7z7z14zwj66qnps0pcsd7r34s7qyhy33g";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gcp-v7.9.0-darwin-amd64.tar.gz";
+        sha256 = "12cggan39cdr8cdpzvqvhq5b0g7h5y7fzix159cv5sf3bdsms8g3";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-github-v5.26.0-darwin-amd64.tar.gz";
+        sha256 = "04dn6mw6gjrxzrywr04jls0ixgcjglb37jff7m8qayylmmr151vl";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gitlab-v6.8.1-darwin-amd64.tar.gz";
+        sha256 = "1lbgs04g945yqxjajv0ydqwnn1amb8gp2fbn5qj53jbw9yd6pz65";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-google-native-v0.32.0-darwin-amd64.tar.gz";
+        sha256 = "0ddd0pgpyywq291r9q8w6bn41r2px595017iihx4n2cnb1c4v6d5";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-hcloud-v1.17.0-darwin-amd64.tar.gz";
+        sha256 = "18w9x6ym08ljr71kl82qb017cxzfbpkhbvljb1ki8nrk32s7rljy";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v4.7.1-darwin-amd64.tar.gz";
+        sha256 = "035sf6i0rcv5sj154m0ciybssjifccr609f47w429vnzjr4pqd5z";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-linode-v4.13.0-darwin-amd64.tar.gz";
+        sha256 = "02gv7wzfzcswji20gyqgjd1ycrmk6nxsypgahyffnp5rvgfxbibh";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mailgun-v3.5.1-darwin-amd64.tar.gz";
+        sha256 = "063jm09bpshlc86svwacafjbc6iv09n81jx4hmcwwgcic6pwb1ic";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mysql-v3.2.1-darwin-amd64.tar.gz";
+        sha256 = "0457whyfc8vkq4jpd2z1sfwxsbdlbx6dzcr1kqf799xb1k049bwj";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-openstack-v3.15.1-darwin-amd64.tar.gz";
+        sha256 = "1wcripnsgxwlj7s6mv726kxrf689xlc7zxqmra5a1zdmfqskmq4k";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-postgresql-v3.10.1-darwin-amd64.tar.gz";
+        sha256 = "1ndpj3mpxbhpvj29x1a61jj2hqk6v9ysmrb87gd6a30rafs9r7fc";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-random-v4.15.1-darwin-amd64.tar.gz";
+        sha256 = "00m5f757fk01wkqf3ji4d0yjmk7i4b3sglgws3mgr5j1waswy4jw";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-snowflake-v0.48.0-darwin-amd64.tar.gz";
+        sha256 = "08ahy6agrdzz31pa4w9i317rska2lz794f9mwkbg11jyyxpxd4y0";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-spotinst-v3.67.2-darwin-amd64.tar.gz";
+        sha256 = "08n4zrqk1k4zy333mn8jxhi3420m2rrbrgy1x62xzkxcylb5dlnm";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-sumologic-v0.20.2-darwin-amd64.tar.gz";
+        sha256 = "01f6c3zgmlmips4b5ysdp2vyflykq9bi1r1pbmqh05b6j35r90km";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-tailscale-v0.13.5-darwin-amd64.tar.gz";
+        sha256 = "0wia72zawjrmi6jy7rw8fsy7h07d0nzmrds6kl6kvnx4w1ra98jn";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-tls-v5.0.1-darwin-amd64.tar.gz";
+        sha256 = "1lcpc72bwxgqkzy26j1pr6774x3kqsxpfcimls1m54wq8ranlii7";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vault-v5.19.0-darwin-amd64.tar.gz";
+        sha256 = "1n33r4knk36yvkbr6wa3xwv63an0sv5hdh7g7amln248yqdc7j3q";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-venafi-v1.6.3-darwin-amd64.tar.gz";
+        sha256 = "04w6xmnqivc34grfgh3hqi9zp7ibsrrc2v0v102zh0sxn7lbksc6";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vsphere-v4.9.2-darwin-amd64.tar.gz";
+        sha256 = "0ik8dmc9769dgpflvlzk51ibf8bmsn68dfzm4v6dz0bsaqnam6xd";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-wavefront-v3.1.0-darwin-amd64.tar.gz";
+        sha256 = "1x574bzzv5pp0va527k1554vah95038abm9y4d79wvzfyh9fgv65";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-yandex-v0.13.0-darwin-amd64.tar.gz";
+        sha256 = "11wm9c125154brisncm9cgb41nbjl9q9h4bq6z0ym8v681qq0fc4";
+      }
+    ];
+    aarch64-linux = [
+      {
+        url = "https://get.pulumi.com/releases/sdk/pulumi-v3.106.0-linux-arm64.tar.gz";
+        sha256 = "1vmci5hm5x3mcxfzagk6iwappy1cycl8kvfhclz632wp9z6a82zc";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aiven-v6.11.3-linux-arm64.tar.gz";
+        sha256 = "0x9jspr73fidzmk83ycnw3x43hpcilbgv3hxykps886ylnx3mdnk";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-akamai-v6.3.2-linux-arm64.tar.gz";
+        sha256 = "0i4zviv023pvahnrypqxm8960xmlpxhggyz4maghs72fp06mx01z";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-alicloud-v3.49.0-linux-arm64.tar.gz";
+        sha256 = "14x57ja726wb0kiwqdva6fk3jjd974apjqsq8i3nwkx6rrr91hvy";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-artifactory-v6.1.4-linux-arm64.tar.gz";
+        sha256 = "0s49id8kd357w7dh7a011l6ak5v8xd0b85p3jb48b8vaggfbs3p8";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-auth0-v3.1.2-linux-arm64.tar.gz";
+        sha256 = "14wplnr5axic2a9skx0y6rjq8si02qwpadpcl978vchll0f4g1pz";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aws-v6.22.2-linux-arm64.tar.gz";
+        sha256 = "05zhi6srqyiwpwgf37vy9qkxg1v74nhis065fbly0hisrrmrcgvj";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azuread-v5.47.1-linux-arm64.tar.gz";
+        sha256 = "1rn6w2740zjcazrxy8h5f2g7mz17wvmnbyld7qm3zadn6rx4dipr";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azuredevops-v2.15.0-linux-arm64.tar.gz";
+        sha256 = "1fcpf2x9dlxk2s06pgvqwsmjpwlv47q666xpj6cmx9cybmnhgjn4";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azure-v5.66.1-linux-arm64.tar.gz";
+        sha256 = "0hjj90bn5rkhcsg0r7jmwhsch23nc2kg59az1dxs02kc3kf5r8mg";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-cloudflare-v5.20.0-linux-arm64.tar.gz";
+        sha256 = "03155qkr473y2z6n5rhic78jad263ac3d0lr890sc5lzlqb0fci3";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-consul-v3.11.1-linux-arm64.tar.gz";
+        sha256 = "0jranh92131jny1s261flc19a30rgc0hf0xkz0k51cs713k3h6pn";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-datadog-v4.25.1-linux-arm64.tar.gz";
+        sha256 = "0hmda8dhak4d5kbw30acbdhn1nczjjwpn3m99rcjjrmnvfirpqdl";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-digitalocean-v4.25.1-linux-arm64.tar.gz";
+        sha256 = "0s652ngpqvzjb6lybf3lcjqv5mf4spyi27mhv6y4czs7p6za1kkm";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-docker-v4.5.1-linux-arm64.tar.gz";
+        sha256 = "11qk7sgwm2pn906nimj3zn0wlskvn5356zqfchrww9f9xxrnqg1k";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-equinix-metal-v3.2.1-linux-arm64.tar.gz";
+        sha256 = "111pia2f5xwkwaqs6p90ri29l5b3ivmahsa1bji4fwyyjyp22h4r";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-fastly-v8.4.2-linux-arm64.tar.gz";
+        sha256 = "1kf88g5jm3xr5b35is8h0rqxzy79az3s90givsnr7x6xmm6favqc";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gcp-v7.9.0-linux-arm64.tar.gz";
+        sha256 = "0nj3jyszkmfhamyl448iiyayai9zam68ci4g7y48hbhq1cnyxxr1";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-github-v5.26.0-linux-arm64.tar.gz";
+        sha256 = "0y3i5dy2vm6mlaqrw2af8cm47gfbwvk99wik6cmz8gdlackx3xxa";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gitlab-v6.8.1-linux-arm64.tar.gz";
+        sha256 = "1m1m3klswz85s0d4igpq55cnm7050kz8vrz428y4v40wxx51fgcq";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-google-native-v0.32.0-linux-arm64.tar.gz";
+        sha256 = "0d8m2krbzxjhfm82dgf8p4vm3kk9gk98l798q4ayjrddqqb4mxq4";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-hcloud-v1.17.0-linux-arm64.tar.gz";
+        sha256 = "1shra5wq8zx4l9b3sp6yklhi8hbd8r2ypay9nf4jgwnc6ppql102";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v4.7.1-linux-arm64.tar.gz";
+        sha256 = "0lalynk4vg7jj1z8vmnjzzrh07i9fww50dazbm2djszw8wwgxqzz";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-linode-v4.13.0-linux-arm64.tar.gz";
+        sha256 = "0mn1bln14hyri2yqnp09lafh7j8hc63fqycxfn3hwgbskr14fnpn";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mailgun-v3.5.1-linux-arm64.tar.gz";
+        sha256 = "1cz4xvvdj0kr63a2x21zbjm4viw92k2920ljnqsfv2wr2f03yk6s";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mysql-v3.2.1-linux-arm64.tar.gz";
+        sha256 = "12smmvbqcdbnqr7r4vx1w3k77hn8l0z7lvb5i1f34fnybq1k3b81";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-openstack-v3.15.1-linux-arm64.tar.gz";
+        sha256 = "17gbazfqs1f2m0h9awwqw14amxlxvl3zwhx3nbzh86my7gn3kjmv";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-postgresql-v3.10.1-linux-arm64.tar.gz";
+        sha256 = "0vkgdc0b76ngrd9vdsqx5rmlijxvdrkr1vkyisl81z73bgjyh9zp";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-random-v4.15.1-linux-arm64.tar.gz";
+        sha256 = "10k9v7v9krjsk095cmk84w875bllkbjl19syiqiq19am66k9n8jj";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-snowflake-v0.48.0-linux-arm64.tar.gz";
+        sha256 = "0bgpv6fkm65cgdficrvzgnp9dairlz795mhlmzy951qvxdlc1i0a";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-spotinst-v3.67.2-linux-arm64.tar.gz";
+        sha256 = "1ic807cbjz3wkyzz6mm7qpjb7dpi2xmchbdx5qdqiv8a9zv9rvck";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-sumologic-v0.20.2-linux-arm64.tar.gz";
+        sha256 = "0m07iydqlampsx2zdgliyqa5h1zwj42p865anak37i59j1cx7ash";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-tailscale-v0.13.5-linux-arm64.tar.gz";
+        sha256 = "03jxg597fsnjjbc519cbdpd2d2qqrw0zp75bfwkhzq28y65qyz5v";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-tls-v5.0.1-linux-arm64.tar.gz";
+        sha256 = "17aqa1hy8ca0kdc6kljb76zk6fhxbh57v2k4jshj3jcgv6p4b4dg";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vault-v5.19.0-linux-arm64.tar.gz";
+        sha256 = "0fllx3zksrxazvr6vbp8qcygbwd3d3w4hm6v0wnzq5vbnz0m693v";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-venafi-v1.6.3-linux-arm64.tar.gz";
+        sha256 = "19xsgfb302nx6mcq4pninq66i7926r0dl2qdcvmsj6qbm83bdih4";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vsphere-v4.9.2-linux-arm64.tar.gz";
+        sha256 = "0q958skqldk5gfd863vizpndls5w18k256v21a0i7hw6cg2ny0qj";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-wavefront-v3.1.0-linux-arm64.tar.gz";
+        sha256 = "07pjnqsrznxi8phm1i1bhkdsc1639q4kkbz9a5zzkgb0rs02jzzl";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-yandex-v0.13.0-linux-arm64.tar.gz";
+        sha256 = "0fd3hgvkr3ch2r5hpmi7h70w4hkbjdyc7z534h151pyc5ssxw8bd";
+      }
+    ];
+    aarch64-darwin = [
+      {
+        url = "https://get.pulumi.com/releases/sdk/pulumi-v3.106.0-darwin-arm64.tar.gz";
+        sha256 = "11hvb57iqdmz5aiy1l03j7pf7qams4mapjvca2nqrd1yzb16zbrd";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aiven-v6.11.3-darwin-arm64.tar.gz";
+        sha256 = "1973s6fk02nir6ls9by73c0xcss4as57jyv33la1gng6h1ljrgyr";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-akamai-v6.3.2-darwin-arm64.tar.gz";
+        sha256 = "1c7gpdwxr1ggxnvi64764kbl6dkg0y8jdlsnhlb29p85s13gzaxq";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-alicloud-v3.49.0-darwin-arm64.tar.gz";
+        sha256 = "0vl8a1vf0n2xjk7k39b0w4plj0lj3rxqys2wjycxvkkp6kxfb6s9";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-artifactory-v6.1.4-darwin-arm64.tar.gz";
+        sha256 = "09fshawmwiiphp6dfaa65g2lcixghb0xfh8pl1xjrdp2851268qr";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-auth0-v3.1.2-darwin-arm64.tar.gz";
+        sha256 = "17d3p29w4hd5lrpgmf9j17fwy4vx1cr84nlfci3rvfzzih1x62yl";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aws-v6.22.2-darwin-arm64.tar.gz";
+        sha256 = "1jfv701qhilirlfaqsaz72vzypsqbynw77rlpx7cy5c726gk3kh8";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azuread-v5.47.1-darwin-arm64.tar.gz";
+        sha256 = "1n2kvcd68hya0i8bkiciigrv621n9f0xc5y5wji09advh8cx8a4w";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azuredevops-v2.15.0-darwin-arm64.tar.gz";
+        sha256 = "1c7ycicwszn9fsaw81rn88kgm7b5i0hp9sxp92qxfn649x742c45";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-azure-v5.66.1-darwin-arm64.tar.gz";
+        sha256 = "1sf3klgnxs4baxaslryz05idnpipmdlr7l3mw3b4z0ffqxz3nspm";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-cloudflare-v5.20.0-darwin-arm64.tar.gz";
+        sha256 = "1aimbl8fiasvqlj6mvlfz6jfxi7s61dk17cnyl9dgxqhmdkbc5dk";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-consul-v3.11.1-darwin-arm64.tar.gz";
+        sha256 = "19wi1jq077da10c1z2z4rzw0x7rjdv77fk9djzk627w75bha1xac";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-datadog-v4.25.1-darwin-arm64.tar.gz";
+        sha256 = "1llxhfcx8b16bvynx6bb509r94iqyvkiz261939d6alx4g0sfvpr";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-digitalocean-v4.25.1-darwin-arm64.tar.gz";
+        sha256 = "0iv44fxyshznl7v6w08d2sqjp1divbmqwsjndfswxpqbp69i0i98";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-docker-v4.5.1-darwin-arm64.tar.gz";
+        sha256 = "17pdc068n81savb6ccmmjgbl1mla9asa59q2iz7clggxw6rsiv26";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-equinix-metal-v3.2.1-darwin-arm64.tar.gz";
+        sha256 = "12bzicm43l7yvh02v5fx3z8v46l9i7a9f677735xi5rjbmd2an4c";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-fastly-v8.4.2-darwin-arm64.tar.gz";
+        sha256 = "1pd2x157ljb8rgm1mawqvqb39n0101450syr43z1qjmhgws7gz74";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gcp-v7.9.0-darwin-arm64.tar.gz";
+        sha256 = "0xc0qlfggk42izrbcj5rvhid3a6jn6lf7yc4yrfqkrjxjwh9d9d2";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-github-v5.26.0-darwin-arm64.tar.gz";
+        sha256 = "12n324rwgmfb2m7jbmlaxj5w0q1vjb63md4vfp8zyf95v40qkcqv";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gitlab-v6.8.1-darwin-arm64.tar.gz";
+        sha256 = "03kkxl0jbqd6vn335ikkvwcmqpdrbxi8bnkm2q8jpli2k8isnxd7";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-google-native-v0.32.0-darwin-arm64.tar.gz";
+        sha256 = "0caz4kgnnrmdr7n571xc7yqscac9jnjwwpjzbnvx4ib6a91wvsdn";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-hcloud-v1.17.0-darwin-arm64.tar.gz";
+        sha256 = "19zhkq9lppjj41ddhbk2fi5xrmmbgyk38mlzvkqfly9lwgbc18v3";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v4.7.1-darwin-arm64.tar.gz";
+        sha256 = "0y7cpgp9z9p42dknai2l6r0hhmyjas03nd288fnd794qzkkwazyp";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-linode-v4.13.0-darwin-arm64.tar.gz";
+        sha256 = "1jb8zfacc86q6dn64c2mnpzc5jmznjsz4fvha1jy60pa0r9qhqj2";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mailgun-v3.5.1-darwin-arm64.tar.gz";
+        sha256 = "1d90jmcm98nlagaqlnjk8kz5dn35yp682rxkps5w0m2x2k48hqxm";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mysql-v3.2.1-darwin-arm64.tar.gz";
+        sha256 = "1li9qyzqknpjlj2z3pfghji47xvhsl268p48pl2i1g99d4qkpbsc";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-openstack-v3.15.1-darwin-arm64.tar.gz";
+        sha256 = "0dqvgmcpvv3h86licnmlswlj2dklj2sqr02wyc10srw8gddvysx5";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-postgresql-v3.10.1-darwin-arm64.tar.gz";
+        sha256 = "14dc917y4ddd35ib5d0c3swlm6vcsjs57g8zd5gx74vnfgvkbc3h";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-random-v4.15.1-darwin-arm64.tar.gz";
+        sha256 = "1gri8is4man0zgp3yg0dmfnk9fjhrg02zahlravscxpd4baycb6p";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-snowflake-v0.48.0-darwin-arm64.tar.gz";
+        sha256 = "1kpvc6221n282dmlbrpwsjmd7if340cjxzr84a8pwizzy1yyy70y";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-spotinst-v3.67.2-darwin-arm64.tar.gz";
+        sha256 = "173a714y5y8bka8pvr8kps0j6pamfx31dx1vdbp7fw2q7h8whlfv";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-sumologic-v0.20.2-darwin-arm64.tar.gz";
+        sha256 = "041zjnywmpxa302igaszj0hd6k4qb455i2c0452rlfh9kj7k2sa5";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-tailscale-v0.13.5-darwin-arm64.tar.gz";
+        sha256 = "0ch0p93rq0af0i87fdq445xxnxkjckc4n537ydgyb3wkdpm3q9kw";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-tls-v5.0.1-darwin-arm64.tar.gz";
+        sha256 = "0x01k5sjmy9365pwi6gqhvw5jr6ansg5zj0anl869dyaag4kgzks";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vault-v5.19.0-darwin-arm64.tar.gz";
+        sha256 = "1rpq1zn2vcpz9rf7lzy27006vmbq67alvicylmsz85v27156mfj1";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-venafi-v1.6.3-darwin-arm64.tar.gz";
+        sha256 = "16kaha5i49sr7m60c3ql9j0amp051z3yxrfpw18ksygshinii8cb";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vsphere-v4.9.2-darwin-arm64.tar.gz";
+        sha256 = "0ymxbs8ql90mnqd1yjd7yss6q7pr39i4l5znzai7sixdvcmk53l8";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-wavefront-v3.1.0-darwin-arm64.tar.gz";
+        sha256 = "0vxkhdf5wz7plq86qy27qwx73jp88ddl41m4iz0h64isrmdrz466";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-yandex-v0.13.0-darwin-arm64.tar.gz";
+        sha256 = "1qaccfqw24g862ij2p49m78hnymg0j2nghshszqrg45v0d0qnknm";
+      }
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-bin/default.nix b/nixpkgs/pkgs/tools/admin/pulumi-bin/default.nix
new file mode 100644
index 000000000000..7fde0591597e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-bin/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, autoPatchelfHook, makeWrapper, installShellFiles }:
+
+let
+  data = import ./data.nix {};
+in stdenv.mkDerivation {
+  pname = "pulumi";
+  version = data.version;
+
+  postUnpack = ''
+    mv pulumi-* pulumi
+  '';
+
+  srcs = map (x: fetchurl x) data.pulumiPkgs.${stdenv.hostPlatform.system};
+
+  installPhase = ''
+    install -D -t $out/bin/ *
+  '' + lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/bin/pulumi --set LD_LIBRARY_PATH "${stdenv.cc.cc.lib}/lib"
+  '' + ''
+    installShellCompletion --cmd pulumi \
+      --bash <($out/bin/pulumi completion bash) \
+      --fish <($out/bin/pulumi completion fish) \
+      --zsh  <($out/bin/pulumi completion zsh)
+  '';
+
+  nativeBuildInputs = [ installShellFiles ] ++ lib.optionals stdenv.isLinux [ autoPatchelfHook makeWrapper ];
+  buildInputs = [ stdenv.cc.cc.libgcc or null ];
+
+  meta = with lib; {
+    homepage = "https://pulumi.io/";
+    description = "Pulumi is a cloud development platform that makes creating cloud programs easy and productive";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = with licenses; [ asl20 ];
+    platforms = builtins.attrNames data.pulumiPkgs;
+    maintainers = with maintainers; [
+      ghuntley
+      peterromfeldhk
+      jlesquembre
+      cpcloud
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-bin/update-pulumi-shell.nix b/nixpkgs/pkgs/tools/admin/pulumi-bin/update-pulumi-shell.nix
new file mode 100644
index 000000000000..a972b633abb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-bin/update-pulumi-shell.nix
@@ -0,0 +1,7 @@
+{ nixpkgs ? import ../../../.. { } }:
+with nixpkgs;
+mkShell {
+  packages = [
+    pkgs.gh
+  ];
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-bin/update.sh b/nixpkgs/pkgs/tools/admin/pulumi-bin/update.sh
new file mode 100755
index 000000000000..fb583e5ad18e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-bin/update.sh
@@ -0,0 +1,159 @@
+#!/usr/bin/env nix-shell
+#!nix-shell update-pulumi-shell.nix -i bash
+# shellcheck shell=bash
+# Bash 3 compatible for Darwin
+
+if [ -z "${GITHUB_TOKEN}" ] || [ $# -ne 1 ]; then
+  echo >&2 "usage: GITHUB_TOKEN=… ./update.sh pulumi-version"
+  exit 1
+fi
+
+SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+
+# Version of Pulumi from
+# https://www.pulumi.com/docs/get-started/install/versions/
+VERSION=$1
+
+# An array of plugin names. The respective repository inside Pulumi's
+# Github organization is called pulumi-$name by convention.
+
+declare -a pulumi_repos
+pulumi_repos=(
+  "aiven"
+  "akamai"
+  "alicloud"
+  "artifactory"
+  "auth0"
+  "aws"
+  "azure"
+  "azuread"
+  "azuredevops"
+  "cloudflare"
+  "consul"
+  "datadog"
+  "digitalocean"
+  "docker"
+  "equinix-metal"
+  "fastly"
+  "gcp"
+  "github"
+  "gitlab"
+  "google-native"
+  "hcloud"
+  "kubernetes"
+  "linode"
+  "mailgun"
+  "mysql"
+  "openstack"
+  "postgresql"
+  "random"
+  "snowflake"
+  "spotinst"
+  "sumologic"
+  "tailscale"
+  "tls"
+  "vault"
+  "venafi"
+  "vsphere"
+  "wavefront"
+  "yandex"
+)
+
+# Contains latest release ${VERSION} from
+# https://github.com/pulumi/pulumi-${NAME}/releases
+
+# Dynamically builds the plugin array, using the GitHub API for getting the
+# latest version.
+plugin_num=1
+plugins=()
+for key in "${pulumi_repos[@]}"; do
+  plugin="${key}=$(gh api "repos/pulumi/pulumi-${key}/releases/latest" --jq '.tag_name | sub("^v"; "")')"
+  printf "%20s: %s of %s\r" "${plugin}" "${plugin_num}" "${#pulumi_repos[@]}"
+  plugins+=("${plugin}")
+  sleep 1
+  ((++plugin_num))
+done
+printf "\n"
+
+function genMainSrc() {
+  local url="https://get.pulumi.com/releases/sdk/pulumi-v${VERSION}-${1}-${2}.tar.gz"
+  local sha256
+  sha256=$(nix-prefetch-url "$url")
+  echo "      {"
+  echo "        url = \"${url}\";"
+  echo "        sha256 = \"$sha256\";"
+  echo "      }"
+}
+
+function genSrc() {
+  local url="${1}"
+  local plug="${2}"
+  local tmpdir="${3}"
+
+  local sha256
+  sha256=$(nix-prefetch-url "$url")
+
+  {
+    if [ -n "$sha256" ]; then # file exists
+      echo "      {"
+      echo "        url = \"${url}\";"
+      echo "        sha256 = \"$sha256\";"
+      echo "      }"
+    else
+      echo "      # pulumi-resource-${plug} skipped (does not exist on remote)"
+    fi
+  } > "${tmpdir}/${plug}.nix"
+}
+
+function genSrcs() {
+  local tmpdir
+  tmpdir="$(mktemp -d)"
+
+  for plugVers in "${plugins[@]}"; do
+    local plug=${plugVers%=*}
+    local version=${plugVers#*=}
+    # url as defined here
+    # https://github.com/pulumi/pulumi/blob/06d4dde8898b2a0de2c3c7ff8e45f97495b89d82/pkg/workspace/plugins.go#L197
+    local url="https://api.pulumi.com/releases/plugins/pulumi-resource-${plug}-v${version}-${1}-${2}.tar.gz"
+    genSrc "${url}" "${plug}" "${tmpdir}" &
+  done
+
+  wait
+
+  find "${tmpdir}" -name '*.nix' -print0 | sort -z | xargs -r0 cat
+  rm -r "${tmpdir}"
+}
+
+{
+  cat << EOF
+# DO NOT EDIT! This file is generated automatically by update.sh
+{ }:
+{
+  version = "${VERSION}";
+  pulumiPkgs = {
+EOF
+
+  echo "    x86_64-linux = ["
+  genMainSrc "linux" "x64"
+  genSrcs "linux" "amd64"
+  echo "    ];"
+
+  echo "    x86_64-darwin = ["
+  genMainSrc "darwin" "x64"
+  genSrcs "darwin" "amd64"
+  echo "    ];"
+
+  echo "    aarch64-linux = ["
+  genMainSrc "linux" "arm64"
+  genSrcs "linux" "arm64"
+  echo "    ];"
+
+  echo "    aarch64-darwin = ["
+  genMainSrc "darwin" "arm64"
+  genSrcs "darwin" "arm64"
+  echo "    ];"
+
+  echo "  };"
+  echo "}"
+
+} > "${SCRIPT_DIR}/data.nix"
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-packages/base.nix b/nixpkgs/pkgs/tools/admin/pulumi-packages/base.nix
new file mode 100644
index 000000000000..8327e41dcd5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-packages/base.nix
@@ -0,0 +1,135 @@
+{ buildGoModule
+, fetchFromGitHub
+, python3Packages
+}:
+let
+  mkBasePackage =
+    { pname
+    , src
+    , version
+    , vendorHash
+    , cmd
+    , extraLdflags
+    , ...
+    }@args: buildGoModule (rec {
+      inherit pname src vendorHash version;
+
+      sourceRoot = "${src.name}/provider";
+
+      subPackages = [ "cmd/${cmd}" ];
+
+      doCheck = false;
+
+      ldflags = [
+        "-s"
+        "-w"
+      ] ++ extraLdflags;
+    } // args);
+
+  mkPythonPackage =
+    { meta
+    , pname
+    , src
+    , version
+    , ...
+    }: python3Packages.callPackage
+      ({ buildPythonPackage, pythonOlder, parver, pip, pulumi, semver, setuptools }:
+      buildPythonPackage rec {
+        inherit pname meta src version;
+        format = "pyproject";
+
+        disabled = pythonOlder "3.7";
+
+        sourceRoot = "${src.name}/sdk/python";
+
+        propagatedBuildInputs = [
+          parver
+          pulumi
+          semver
+          setuptools
+        ];
+
+        postPatch = ''
+          if [[ -e "pyproject.toml" ]]; then
+            sed -i \
+              -e 's/^  version = .*/  version = "${version}"/g' \
+              pyproject.toml
+          else
+            sed -i \
+               -e 's/^VERSION = .*/VERSION = "${version}"/g' \
+               -e 's/^PLUGIN_VERSION = .*/PLUGIN_VERSION = "${version}"/g' \
+               setup.py
+          fi
+        '';
+
+        # Auto-generated; upstream does not have any tests.
+        # Verify that the version substitution works
+        checkPhase = ''
+          runHook preCheck
+
+          ${pip}/bin/pip show "${pname}" | grep "Version: ${version}" > /dev/null \
+            || (echo "ERROR: Version substitution seems to be broken"; exit 1)
+
+          runHook postCheck
+        '';
+
+        pythonImportsCheck = [
+          (builtins.replaceStrings [ "-" ] [ "_" ] pname)
+        ];
+      })
+      { };
+in
+{ owner
+, repo
+, rev
+, version
+, hash
+, vendorHash
+, cmdGen
+, cmdRes
+, extraLdflags
+, meta
+, fetchSubmodules ? false
+, ...
+}@args:
+let
+  src = fetchFromGitHub {
+    name = "source-${repo}-${rev}";
+    inherit owner repo rev hash fetchSubmodules;
+  };
+
+  pulumi-gen = mkBasePackage rec {
+    inherit src version vendorHash extraLdflags;
+
+    cmd = cmdGen;
+    pname = cmdGen;
+  };
+in
+mkBasePackage ({
+  inherit meta src version vendorHash extraLdflags;
+
+  pname = repo;
+
+  nativeBuildInputs = [
+    pulumi-gen
+  ];
+
+  cmd = cmdRes;
+
+  postConfigure = ''
+    pushd ..
+
+    chmod +w sdk/
+    ${cmdGen} schema
+
+    popd
+
+    VERSION=v${version} go generate cmd/${cmdRes}/main.go
+  '';
+
+  passthru.sdks.python = mkPythonPackage {
+    inherit meta src version;
+
+    pname = repo;
+  };
+} // args)
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-packages/default.nix b/nixpkgs/pkgs/tools/admin/pulumi-packages/default.nix
new file mode 100644
index 000000000000..5aed6b171783
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-packages/default.nix
@@ -0,0 +1,14 @@
+{ callPackage }:
+let
+  mkPulumiPackage = callPackage ./base.nix { };
+  callPackage' = p: args: callPackage p (args // { inherit mkPulumiPackage; });
+in
+{
+  pulumi-aws-native = callPackage' ./pulumi-aws-native.nix { };
+  pulumi-azure-native = callPackage' ./pulumi-azure-native.nix { };
+  pulumi-command = callPackage' ./pulumi-command.nix { };
+  pulumi-language-go = callPackage ./pulumi-language-go.nix { };
+  pulumi-language-nodejs = callPackage ./pulumi-language-nodejs.nix { };
+  pulumi-language-python = callPackage ./pulumi-language-python.nix { };
+  pulumi-random = callPackage' ./pulumi-random.nix { };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-aws-native.nix b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-aws-native.nix
new file mode 100644
index 000000000000..2a0582ecb805
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-aws-native.nix
@@ -0,0 +1,34 @@
+{ lib
+, mkPulumiPackage
+}:
+mkPulumiPackage rec {
+  owner = "pulumi";
+  repo = "pulumi-aws-native";
+  version = "0.38.0";
+  rev = "v${version}";
+  hash = "sha256-v7jNPCrjtfi9KYD4RhiphMIpV23g/CBV/sKPBkMulu0=";
+  vendorHash = "sha256-Yu9tNakwXWYdrjzI6/MFRzVBhJAEOjsmq9iBAQlR0AI=";
+  cmdGen = "pulumi-gen-aws-native";
+  cmdRes = "pulumi-resource-aws-native";
+  extraLdflags = [
+    "-X github.com/pulumi/${repo}/provider/pkg/version.Version=v${version}"
+  ];
+
+  fetchSubmodules = true;
+  postConfigure = ''
+    pushd ..
+
+    ${cmdGen} schema aws-cloudformation-schema ${version}
+
+    popd
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "Native AWS Pulumi Provider";
+    homepage = "https://github.com/pulumi/pulumi-aws-native";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ veehaitch trundle ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-azure-native.nix b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-azure-native.nix
new file mode 100644
index 000000000000..76a5eff2973e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-azure-native.nix
@@ -0,0 +1,39 @@
+{ lib
+, mkPulumiPackage
+}:
+mkPulumiPackage rec {
+  owner = "pulumi";
+  repo = "pulumi-azure-native";
+  version = "2.13.0";
+  rev = "v${version}";
+  hash = "sha256-YyJxACeXyY7hZkTbLXT/ASNWa1uv9h3cvPoItR183fU=";
+  vendorHash = "sha256-20wHbNE/fenxP9wgTSzAnx6b1UYlw4i1fi6SesTs0sc=";
+  cmdGen = "pulumi-gen-azure-native";
+  cmdRes = "pulumi-resource-azure-native";
+  extraLdflags = [
+    "-X github.com/pulumi/${repo}/v2/provider/pkg/version.Version=${version}"
+  ];
+  postConfigure = ''
+    pushd ..
+
+    chmod +w . provider/cmd/${cmdRes} sdk/
+    chmod -R +w reports/ versions/
+    mkdir bin
+    ${cmdGen} schema ${version}
+
+    cp bin/schema-full.json provider/cmd/${cmdRes}
+    cp bin/metadata-compact.json provider/cmd/${cmdRes}
+
+    popd
+
+    VERSION=v${version} go generate cmd/${cmdRes}/main.go
+  '';
+  fetchSubmodules = true;
+  __darwinAllowLocalNetworking = true;
+  meta = with lib; {
+    description = "Native Azure Pulumi Provider";
+    homepage = "https://github.com/pulumi/pulumi-azure-native";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ veehaitch trundle ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-command.nix b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-command.nix
new file mode 100644
index 000000000000..d53e9593feec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-command.nix
@@ -0,0 +1,33 @@
+{ lib
+, mkPulumiPackage
+}:
+mkPulumiPackage rec {
+  owner = "pulumi";
+  repo = "pulumi-command";
+  version = "0.9.0";
+  rev = "v${version}";
+  hash = "sha256-VnbtPhMyTZ4Oy+whOK6Itr2vqUagwZUODONL13fjMaU=";
+  vendorHash = "sha256-MBWDEVA29uzHD3B/iPe68ntGjMM1SCTDq/TL+NgMc6c=";
+  cmdGen = "pulumi-gen-command";
+  cmdRes = "pulumi-resource-command";
+  extraLdflags = [
+    "-X github.com/pulumi/${repo}/provider/pkg/version.Version=v${version}"
+  ];
+
+  postConfigure = ''
+    pushd ..
+
+    ${cmdGen} provider/cmd/pulumi-resource-command/schema.json --version ${version}
+
+    popd
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "A Pulumi provider to execute commands and scripts either locally or remotely as part of the Pulumi resource model";
+    homepage = "https://github.com/pulumi/pulumi-command";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ veehaitch trundle ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-go.nix b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-go.nix
new file mode 100644
index 000000000000..88da6f0d33f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-go.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, pulumi
+}:
+buildGoModule rec {
+  pname = "pulumi-language-go";
+  inherit (pulumi) version src;
+
+  sourceRoot = "${src.name}/sdk/go/pulumi-language-go";
+
+  vendorHash = "sha256-mBK9VEatuxeoZtXXOKdwj7wtZ/lo4Bi2h7N00zK6Hpw=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/pulumi/pulumi/sdk/v3/go/common/version.Version=${version}"
+  ];
+
+  # go: inconsistent vendoring in ...
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Golang language host plugin for Pulumi";
+    homepage = "https://github.com/pulumi/pulumi/tree/master/sdk/go";
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-nodejs.nix b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-nodejs.nix
new file mode 100644
index 000000000000..f6d3cbec0c23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-nodejs.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, pulumi
+, nodejs
+}:
+buildGoModule rec {
+  inherit (pulumi) version src sdkVendorHash;
+
+  pname = "pulumi-language-nodejs";
+
+  sourceRoot = "${src.name}/sdk/nodejs/cmd/pulumi-language-nodejs";
+
+  vendorHash = "sha256-gEOVtAyn7v8tsRU11NgrD3swMFFBxOTIjMWCqSSvHlI=";
+
+  postPatch = ''
+    # Gives github.com/pulumi/pulumi/pkg/v3: is replaced in go.mod, but not marked as replaced in vendor/modules.txt etc
+    substituteInPlace language_test.go \
+      --replace "TestLanguage" \
+                "SkipTestLanguage"
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/pulumi/pulumi/sdk/v3/go/common/version.Version=${version}"
+  ];
+
+  nativeCheckInputs = [
+    nodejs
+  ];
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-python.nix b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-python.nix
new file mode 100644
index 000000000000..6994f26b92c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-language-python.nix
@@ -0,0 +1,35 @@
+{ buildGoModule
+, pulumi
+, python3
+}:
+buildGoModule rec {
+  inherit (pulumi) version src;
+
+  pname = "pulumi-language-python";
+
+  sourceRoot = "${src.name}/sdk/python/cmd/pulumi-language-python";
+
+  vendorHash = "sha256-upRXs8Bo0dpnANNetfXqkatip9bA+Fqhg72Cd60ltz8=";
+
+  postPatch = ''
+    substituteInPlace main_test.go \
+      --replace "TestDeterminePulumiPackages" \
+                "SkipTestDeterminePulumiPackages"
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/pulumi/pulumi/sdk/v3/go/common/version.Version=${version}"
+  ];
+
+  nativeCheckInputs = [
+    python3
+  ];
+
+  postInstall = ''
+    cp ../pulumi-language-python-exec           $out/bin
+    cp ../../dist/pulumi-resource-pulumi-python $out/bin
+    cp ../../dist/pulumi-analyzer-policy-python $out/bin
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-random.nix b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-random.nix
new file mode 100644
index 000000000000..af704eac192d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi-packages/pulumi-random.nix
@@ -0,0 +1,23 @@
+{ lib
+, mkPulumiPackage
+}:
+mkPulumiPackage rec {
+  owner = "pulumi";
+  repo = "pulumi-random";
+  version = "4.14.0";
+  rev = "v${version}";
+  hash = "sha256-1MR7zWNBDbAUoRed7IU80PQxeH18x95MKJKejW5m2Rs=";
+  vendorHash = "sha256-YDuF89F9+pxVq4TNe5l3JlbcqpnJwSTPAP4TwWTriWA=";
+  cmdGen = "pulumi-tfgen-random";
+  cmdRes = "pulumi-resource-random";
+  extraLdflags = [
+    "-X github.com/pulumi/${repo}/provider/v4/pkg/version.Version=v${version}"
+  ];
+  __darwinAllowLocalNetworking = true;
+  meta = with lib; {
+    description = "A Pulumi provider that safely enables randomness for resources";
+    homepage = "https://github.com/pulumi/pulumi-random";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ veehaitch trundle ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi/default.nix b/nixpkgs/pkgs/tools/admin/pulumi/default.nix
new file mode 100644
index 000000000000..1998eec1bfcd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi/default.nix
@@ -0,0 +1,141 @@
+{ stdenv
+, lib
+, buildGoModule
+, coreutils
+, fetchFromGitHub
+, installShellFiles
+, git
+  # passthru
+, runCommand
+, makeWrapper
+, pulumi
+, pulumiPackages
+}:
+
+buildGoModule rec {
+  pname = "pulumi";
+  version = "3.93.0";
+
+  # Used in pulumi-language packages, which inherit this prop
+  sdkVendorHash = lib.fakeHash;
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-EaYYIbV7IItnmVfyEHtaAbAXvrZ8CXMjW+yNXOBIxg8=";
+    # Some tests rely on checkout directory name
+    name = "pulumi";
+  };
+
+  vendorHash = "sha256-G+LspC6b2TvboMU6rKB0qrhhMNaLPVt/nUYZzkiVr/Q=";
+
+  sourceRoot = "${src.name}/pkg";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # Bundle release metadata
+  ldflags = [
+    # Omit the symbol table and debug information.
+    "-s"
+    # Omit the DWARF symbol table.
+    "-w"
+  ] ++ importpathFlags;
+
+  importpathFlags = [
+    "-X github.com/pulumi/pulumi/pkg/v3/version.Version=v${version}"
+  ];
+
+  doCheck = true;
+
+  disabledTests = [
+    # Flaky test
+    "TestPendingDeleteOrder"
+    # Tries to clone repo: github.com/pulumi/templates.git
+    "TestGenerateOnlyProjectCheck"
+    # Following tests give this error, not quite sure why:
+    #     Error Trace:    /build/pulumi/pkg/engine/lifecycletest/update_plan_test.go:273
+    # Error:          Received unexpected error:
+    #                 Unexpected diag message: <{%reset%}>using pulumi-resource-pkgA from $PATH at /build/tmp.bS8caxmTx7/pulumi-resource-pkgA<{%reset%}>
+    # Test:           TestUnplannedDelete
+    "TestExpectedDelete"
+    "TestPlannedInputOutputDifferences"
+    "TestPlannedUpdateChangedStack"
+    "TestExpectedCreate"
+    "TestUnplannedDelete"
+    # Following test gives this  error, not sure why:
+    # --- Expected
+    # +++ Actual
+    # @@ -1 +1 @@
+    # -gcp
+    # +aws
+    "TestPluginMapper_MappedNamesDifferFromPulumiName"
+  ];
+
+  nativeCheckInputs = [
+    git
+  ];
+
+  preCheck = ''
+    # The tests require `version.Version` to be unset
+    ldflags=''${ldflags//"$importpathFlags"/}
+
+    # Create some placeholders for plugins used in tests. Otherwise, Pulumi
+    # tries to donwload them and fails, resulting in really long test runs
+    dummyPluginPath=$(mktemp -d)
+    for name in pulumi-{resource-pkg{A,B},-pkgB}; do
+      ln -s ${coreutils}/bin/true "$dummyPluginPath/$name"
+    done
+
+    export PATH=$dummyPluginPath''${PATH:+:}$PATH
+
+    # Code generation tests also download dependencies from network
+    rm codegen/{docs,dotnet,go,nodejs,python,schema}/*_test.go
+    rm -R codegen/{dotnet,go,nodejs,python}/gen_program_test
+
+    # Only run tests not marked as disabled
+    buildFlagsArray+=("-run" "[^(${lib.concatStringsSep "|" disabledTests})]")
+  '' + lib.optionalString stdenv.isDarwin ''
+    export PULUMI_HOME=$(mktemp -d)
+  '';
+
+  # Allow tests that bind or connect to localhost on macOS.
+  __darwinAllowLocalNetworking = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    PULUMI_SKIP_UPDATE_CHECK=1 $out/bin/pulumi version | grep v${version} > /dev/null
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd pulumi \
+      --bash <($out/bin/pulumi gen-completion bash) \
+      --fish <($out/bin/pulumi gen-completion fish) \
+      --zsh  <($out/bin/pulumi gen-completion zsh)
+  '';
+
+  passthru = {
+    pkgs = pulumiPackages;
+    withPackages = f: runCommand "${pulumi.name}-with-packages"
+      {
+        nativeBuildInputs = [ makeWrapper ];
+      }
+      ''
+        mkdir -p $out/bin
+        makeWrapper ${pulumi}/bin/pulumi $out/bin/pulumi \
+          --suffix PATH : ${lib.makeSearchPath "bin" (f pulumiPackages)}
+      '';
+  };
+
+  meta = with lib; {
+    homepage = "https://pulumi.io/";
+    description = "Pulumi is a cloud development platform that makes creating cloud programs easy and productive";
+    sourceProvenance = [ sourceTypes.fromSource ];
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [
+      trundle
+      veehaitch
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/Gemfile b/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/Gemfile
new file mode 100644
index 000000000000..cc5420979ff5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'bolt'
diff --git a/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/Gemfile.lock b/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/Gemfile.lock
new file mode 100644
index 000000000000..d5c402330b3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/Gemfile.lock
@@ -0,0 +1,202 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (2.3.6)
+    addressable (2.8.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    aws-eventstream (1.2.0)
+    aws-partitions (1.607.0)
+    aws-sdk-core (3.131.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.525.0)
+      aws-sigv4 (~> 1.1)
+      jmespath (~> 1, >= 1.6.1)
+    aws-sdk-ec2 (1.322.0)
+      aws-sdk-core (~> 3, >= 3.127.0)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.5.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+    bindata (2.4.10)
+    bolt (3.24.0)
+      CFPropertyList (~> 2.2)
+      addressable (~> 2.5)
+      aws-sdk-ec2 (~> 1)
+      concurrent-ruby (~> 1.0)
+      ffi (>= 1.9.25, < 2.0.0)
+      hiera-eyaml (~> 3)
+      jwt (~> 2.2)
+      logging (~> 2.2)
+      minitar (~> 0.6)
+      net-scp (~> 1.2)
+      net-ssh (>= 4.0, < 7.0)
+      net-ssh-krb (~> 0.5)
+      orchestrator_client (~> 0.5)
+      puppet (>= 6.18.0)
+      puppet-resource_api (>= 1.8.1)
+      puppet-strings (~> 2.3)
+      puppetfile-resolver (~> 0.5)
+      r10k (~> 3.10)
+      ruby_smb (~> 1.0)
+      terminal-table (~> 3.0)
+      winrm (~> 2.0)
+      winrm-fs (~> 1.3)
+    builder (3.2.4)
+    colored2 (3.1.2)
+    concurrent-ruby (1.1.10)
+    connection_pool (2.2.5)
+    cri (2.15.11)
+    deep_merge (1.2.2)
+    erubi (1.10.0)
+    facter (4.2.10)
+      hocon (~> 1.3)
+      thor (>= 1.0.1, < 2.0)
+    faraday (1.10.0)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-httpclient (~> 1.0)
+      faraday-multipart (~> 1.0)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.0)
+      faraday-patron (~> 1.0)
+      faraday-rack (~> 1.0)
+      faraday-retry (~> 1.0)
+      ruby2_keywords (>= 0.0.4)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-httpclient (1.0.1)
+    faraday-multipart (1.0.4)
+      multipart-post (~> 2)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday-patron (1.0.0)
+    faraday-rack (1.0.0)
+    faraday-retry (1.0.3)
+    faraday_middleware (1.2.0)
+      faraday (~> 1.0)
+    fast_gettext (1.1.2)
+    ffi (1.15.5)
+    gettext (3.2.9)
+      locale (>= 2.0.5)
+      text (>= 1.3.0)
+    gettext-setup (0.34)
+      fast_gettext (~> 1.1.0)
+      gettext (>= 3.0.2, < 3.3.0)
+      locale
+    gssapi (1.3.1)
+      ffi (>= 1.0.1)
+    gyoku (1.4.0)
+      builder (>= 2.1.2)
+      rexml (~> 3.0)
+    hiera (3.9.0)
+    hiera-eyaml (3.3.0)
+      highline
+      optimist
+    highline (2.0.3)
+    hocon (1.3.1)
+    httpclient (2.8.3)
+    jmespath (1.6.1)
+    jwt (2.2.3)
+    little-plugger (1.1.4)
+    locale (2.1.3)
+    log4r (1.1.10)
+    logging (2.3.1)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.14)
+    minitar (0.9)
+    molinillo (0.8.0)
+    multi_json (1.15.0)
+    multipart-post (2.2.3)
+    net-http-persistent (4.0.1)
+      connection_pool (~> 2.2)
+    net-scp (1.2.1)
+      net-ssh (>= 2.6.5)
+    net-ssh (6.1.0)
+    net-ssh-krb (0.5.1)
+      gssapi (~> 1.3.0)
+      net-ssh (>= 2.0)
+    nori (2.6.0)
+    optimist (3.0.1)
+    orchestrator_client (0.6.1)
+      faraday (~> 1.4)
+      net-http-persistent (~> 4.0)
+    public_suffix (4.0.7)
+    puppet (7.17.0)
+      concurrent-ruby (~> 1.0)
+      deep_merge (~> 1.0)
+      facter (> 2.0.1, < 5)
+      fast_gettext (>= 1.1, < 3)
+      hiera (>= 3.2.1, < 4)
+      locale (~> 2.1)
+      multi_json (~> 1.10)
+      puppet-resource_api (~> 1.5)
+      scanf (~> 1.0)
+      semantic_puppet (~> 1.0)
+    puppet-resource_api (1.8.14)
+      hocon (>= 1.0)
+    puppet-strings (2.9.0)
+      rgen
+      yard (~> 0.9.5)
+    puppet_forge (3.2.0)
+      faraday (~> 1.3)
+      faraday_middleware (~> 1.0)
+      minitar
+      semantic_puppet (~> 1.0)
+    puppetfile-resolver (0.6.1)
+      molinillo (~> 0.6)
+      semantic_puppet (~> 1.0)
+    r10k (3.15.0)
+      colored2 (= 3.1.2)
+      cri (>= 2.15.10)
+      fast_gettext (>= 1.1.0, < 3.0.0)
+      gettext (>= 3.0.2, < 4.0.0)
+      gettext-setup (~> 0.24)
+      jwt (~> 2.2.3)
+      log4r (= 1.1.10)
+      minitar (~> 0.9)
+      multi_json (~> 1.10)
+      puppet_forge (>= 2.3.0)
+    rexml (3.2.5)
+    rgen (0.9.0)
+    ruby2_keywords (0.0.5)
+    ruby_smb (1.1.0)
+      bindata
+      rubyntlm
+      windows_error
+    rubyntlm (0.6.3)
+    rubyzip (2.3.2)
+    scanf (1.0.0)
+    semantic_puppet (1.0.4)
+    terminal-table (3.0.2)
+      unicode-display_width (>= 1.1.1, < 3)
+    text (1.3.1)
+    thor (1.2.1)
+    unicode-display_width (2.2.0)
+    webrick (1.7.0)
+    windows_error (0.1.4)
+    winrm (2.3.6)
+      builder (>= 2.1.2)
+      erubi (~> 1.8)
+      gssapi (~> 1.2)
+      gyoku (~> 1.0)
+      httpclient (~> 2.2, >= 2.2.0.2)
+      logging (>= 1.6.1, < 3.0)
+      nori (~> 2.0)
+      rubyntlm (~> 0.6.0, >= 0.6.3)
+    winrm-fs (1.3.5)
+      erubi (~> 1.8)
+      logging (>= 1.6.1, < 3.0)
+      rubyzip (~> 2.0)
+      winrm (~> 2.0)
+    yard (0.9.28)
+      webrick (~> 1.7.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  bolt
+
+BUNDLED WITH
+   2.3.9
diff --git a/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/default.nix b/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/default.nix
new file mode 100644
index 000000000000..cf6ffb6fb893
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/default.nix
@@ -0,0 +1,36 @@
+{ lib, bundlerApp, makeWrapper, bundlerUpdateScript, puppet-bolt, testers }:
+
+bundlerApp {
+  pname = "bolt";
+
+  gemdir = ./.;
+  exes = [ "bolt" ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  gemConfig.bolt = attrs: {
+    # scripts in libexec will be executed by remote host,
+    # so shebangs should remain unchanged
+    dontPatchShebangs = true;
+  };
+
+  postBuild = ''
+    # Set BOLT_GEM=1 to remove warning
+    wrapProgram $out/bin/bolt --set BOLT_GEM 1
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = puppet-bolt;
+      version = (import ./gemset.nix).bolt.version;
+    };
+    updateScript = bundlerUpdateScript "puppet-bolt";
+  };
+
+  meta = with lib; {
+    description = "Execute commands remotely over SSH and WinRM";
+    homepage = "https://github.com/puppetlabs/bolt";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ uvnikita ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/gemset.nix b/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/gemset.nix
new file mode 100644
index 000000000000..fc02ba396183
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/puppet/puppet-bolt/gemset.nix
@@ -0,0 +1,842 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0af0fv57wgnzn4sjbhwd504dina62i60by3npl14ad4bc2aw7pnc";
+      type = "gem";
+    };
+    version = "1.607.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "164abp3cvmvfa2qsgzbxvkafbhwbgn3qwknp0amwmxw5nwvz8p3s";
+      type = "gem";
+    };
+    version = "3.131.2";
+  };
+  aws-sdk-ec2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c56an4cmvr1ync8pif588b4alvv8zfchna092xjbdzx4ip1yrfg";
+      type = "gem";
+    };
+    version = "1.322.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xp7diwq7nv4vvxrl9x3lis2l4x6bissrfzbfyy6rv5bmj5w109z";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  bindata = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06lqi4svq5qls9f7nnvd2zmjdqmi2sf82sq78ci5d78fq0z5x2vr";
+      type = "gem";
+    };
+    version = "2.4.10";
+  };
+  bolt = {
+    dependencies = ["CFPropertyList" "addressable" "aws-sdk-ec2" "concurrent-ruby" "ffi" "hiera-eyaml" "jwt" "logging" "minitar" "net-scp" "net-ssh" "net-ssh-krb" "orchestrator_client" "puppet" "puppet-resource_api" "puppet-strings" "puppetfile-resolver" "r10k" "ruby_smb" "terminal-table" "winrm" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jshg2b2j24zgkh2nldwjqxm43dz9val6scxsjvq5kg3bwkdrby8";
+      type = "gem";
+    };
+    version = "3.24.0";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  CFPropertyList = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hadm41xr1fq3qp74jd9l5q8l0j9083rgklgzsilllwaav7qrrid";
+      type = "gem";
+    };
+    version = "2.3.6";
+  };
+  colored2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s4fpn3mqiizpmpy2a24k4v365pv75y50292r8ajrv4i1p5b2k14";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  connection_pool = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ffdxhgirgc86qb42yvmfj6v1v0x4lvi0pxn9zhghkff44wzra0k";
+      type = "gem";
+    };
+    version = "2.2.5";
+  };
+  cri = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bhsgnjav94mz5vf3305gxz1g34gm9kxvnrn1dkz530r8bpj0hr5";
+      type = "gem";
+    };
+    version = "2.15.11";
+  };
+  deep_merge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fjn4civid68a3zxnbgyjj6krs3l30dy8b4djpg6fpzrsyix7kl3";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  erubi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09l8lz3j00m898li0yfsnb6ihc63rdvhw3k5xczna5zrjk104f2l";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  facter = {
+    dependencies = ["hocon" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16xwli99vqj5329wzmf0ifzikllrym46scm9xp28syfygsrz39j0";
+      type = "gem";
+    };
+    version = "4.2.10";
+  };
+  faraday = {
+    dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-httpclient" "faraday-multipart" "faraday-net_http" "faraday-net_http_persistent" "faraday-patron" "faraday-rack" "faraday-retry" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00palwawk897p5gypw5wjrh93d4p0xz2yl9w93yicb4kq7amh8d4";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  faraday-em_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-em_synchrony = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  faraday-httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-multipart = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09871c4hd7s5ws1wl4gs7js1k2wlby6v947m2bbzg43pnld044lh";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-net_http_persistent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  faraday-patron = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h184g4vqql5jv9s9im6igy00jp6mrah2h14py6mpf9bkabfqq7g";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-retry = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153i967yrwnswqgvnnajgwp981k9p50ys1h80yz3q94rygs59ldd";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bw8mfh4yin2xk7138rg3fhb2p5g2dlmdma88k82psah9mbmvlfy";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  fast_gettext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ci71w9jb979c379c7vzm88nc3k6lf68kbrsgw9nlx5g4hng0s78";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  gettext = {
+    dependencies = ["locale" "text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0764vj7gacn0aypm2bf6m46dzjzwzrjlmbyx6qwwwzbmi94r40wr";
+      type = "gem";
+    };
+    version = "3.2.9";
+  };
+  gettext-setup = {
+    dependencies = ["fast_gettext" "gettext" "locale"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vfnayz20xd8q0sz27816kvgia9z2dpj9fy7z15da239wmmnz7ga";
+      type = "gem";
+    };
+    version = "0.34";
+  };
+  gssapi = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qdfhj12aq8v0y961v4xv96a1y2z80h3xhvzrs9vsfgf884g6765";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  gyoku = {
+    dependencies = ["builder" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kd2q59xpm39hpvmmvyi6g3f1fr05xjbnxwkrdqz4xy7hirqi79q";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  hiera = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01kh882rp9xdy2cx2avax79ywpfxqhnwsn05cxwyiqrhfkk36p4x";
+      type = "gem";
+    };
+    version = "3.9.0";
+  };
+  hiera-eyaml = {
+    dependencies = ["highline" "optimist"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iydhxavcniprqly7ad8c2413jwvrdf7zjmzl3xxlnkmq9900zf9";
+      type = "gem";
+    };
+    version = "3.3.0";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  hocon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mifv4vfvppfdpkd0cwgy634sj0aplz6ys84sp8s11qrnm6vlnmn";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mnvb80cdg7fzdcs3xscv21p28w4igk5sj5m7m81xp8v2ks87jj0";
+      type = "gem";
+    };
+    version = "1.6.1";
+  };
+  jwt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "036i5fc09275ms49mw43mh4i9pwaap778ra2pmx06ipzyyjl6bfs";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  little-plugger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  locale = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0997465kxvpxm92fiwc2b16l49mngk7b68g5k35ify0m3q0yxpdn";
+      type = "gem";
+    };
+    version = "2.1.3";
+  };
+  log4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ri90q0frfmigkirqv5ihyrj59xm8pq5zcmf156cbdv4r4l2jicv";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zflchpx4g8c110gjdcs540bk5a336nq6nmx379rdg56xw0pjd02";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  minitar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "126mq86x67d1p63acrfka4zx0cx2r0vc93884jggxnrmmnzbxh13";
+      type = "gem";
+    };
+    version = "0.9";
+  };
+  molinillo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p846facmh1j5xmbrpgzadflspvk7bzs3sykrh5s7qi4cdqz5gzg";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n0kvnrcrjn31jb97kcx3wj1f5kkjza7yygfq8rxzf3i57g7jaa6";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  net-http-persistent = {
+    dependencies = ["connection_pool"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yfypmfg1maf20yfd22zzng8k955iylz7iip0mgc9lazw36g8li7";
+      type = "gem";
+    };
+    version = "4.0.1";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jp3jgcn8cij407xx9ldb5h9c6jv13jc4cf6kk2idclz43ww21c9";
+      type = "gem";
+    };
+    version = "6.1.0";
+  };
+  net-ssh-krb = {
+    dependencies = ["gssapi" "net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "120mns6drrapn8i63cbgxngjql4cyclv6asyrkgc87bv5prlh50c";
+      type = "gem";
+    };
+    version = "0.5.1";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  optimist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vg2chy1cfmdj6c1gryl8zvjhhmb3plwgyh1jfnpq4fnfqv7asrk";
+      type = "gem";
+    };
+    version = "3.0.1";
+  };
+  orchestrator_client = {
+    dependencies = ["faraday" "net-http-persistent"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lfispcl4sr1c7am22j55sj5xvsky422b3bh7645j3n12zqg7pp2";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f3knlwfwm05sfbaihrxm4g772b79032q14c16q4b38z8bi63qcb";
+      type = "gem";
+    };
+    version = "4.0.7";
+  };
+  puppet = {
+    dependencies = ["concurrent-ruby" "deep_merge" "facter" "fast_gettext" "hiera" "locale" "multi_json" "puppet-resource_api" "scanf" "semantic_puppet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lfpmfjc95a7s19h1q0hwjcm6gzgiaxklpayxy32p8c2hzwzjk00";
+      type = "gem";
+    };
+    version = "7.17.0";
+  };
+  puppet-resource_api = {
+    dependencies = ["hocon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dchnnrrx0wd0pcrry5aaqwnbbgvp81g6f3brqhgvkc397kly3lj";
+      type = "gem";
+    };
+    version = "1.8.14";
+  };
+  puppet-strings = {
+    dependencies = ["rgen" "yard"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w3rc5swdin44an1l5jgnljv46yflcd2d2zvakd54nvdh0r30ypx";
+      type = "gem";
+    };
+    version = "2.9.0";
+  };
+  puppet_forge = {
+    dependencies = ["faraday" "faraday_middleware" "minitar" "semantic_puppet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03aaznd1gyf3wpqg34y32zfj2yxf67r85m6zfz05pv9ijizrmdnj";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  puppetfile-resolver = {
+    dependencies = ["molinillo" "semantic_puppet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d36nzdlb7gvsikbvkm840qd5xglyph6ry395ynch6g75vlkr5xi";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  r10k = {
+    dependencies = ["colored2" "cri" "fast_gettext" "gettext" "gettext-setup" "jwt" "log4r" "minitar" "multi_json" "puppet_forge"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hdlq01186w9bx270iyyk10w6jccxc4f0dx7kxgg6lnl1rsnkd4i";
+      type = "gem";
+    };
+    version = "3.15.0";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rgen = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18ryflbkc2pvbb7jwl35pnyb1mlx9fby85dnqi7hsbz78mzsf87n";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  ruby_smb = {
+    dependencies = ["bindata" "rubyntlm" "windows_error"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "125pimmaskp13nkk5j138nfk1kd8n91sfdlx4dhj2j9zk342wsf4";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b8hczk8hysv53ncsqzx4q6kma5gy5lqc7s5yx8h64x3vdb18cjv";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  scanf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "000vxsci3zq8m1wl7mmppj7sarznrqlm6v2x2hdfmbxcwpvvfgak";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  semantic_puppet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gg1bizlgb8wswxwy3irgppqvd6mlr27qsp0fzpm459wffzq10sx";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14dfmfjppmng5hwj7c5ka6qdapawm3h6k9lhn8zj001ybypvclgr";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  text = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x6kkmsr49y3rnrin91rv8mpc3dhrf3ql08kbccw8yffq61brfrg";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nlfck6z986fngp0r74maswmyb1rcksc8xc3mfpw9cj23c3s8zwn";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  windows_error = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zmm2if81ia33hp18h8yrgnpgcdyrxziyf185r0zx8qy7n8mlchl";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  winrm = {
+    dependencies = ["builder" "erubi" "gssapi" "gyoku" "httpclient" "logging" "nori" "rubyntlm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nxf6a47d1xf1nvi7rbfbzjyyjhz0iakrnrsr2hj6y24a381sd8i";
+      type = "gem";
+    };
+    version = "2.3.6";
+  };
+  winrm-fs = {
+    dependencies = ["erubi" "logging" "rubyzip" "winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gb91k6s1yjqw387x4w1nkpnxblq3pjdqckayl0qvz5n3ygdsb0d";
+      type = "gem";
+    };
+    version = "1.3.5";
+  };
+  yard = {
+    dependencies = ["webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p1if8g9ww6hlpfkphqv3y1z0rbqnnrvb38c5qhnala0f8qpw6yk";
+      type = "gem";
+    };
+    version = "0.9.28";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/qovery-cli/default.nix b/nixpkgs/pkgs/tools/admin/qovery-cli/default.nix
new file mode 100644
index 000000000000..8db9f115c4d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/qovery-cli/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, qovery-cli
+, testers
+}:
+
+buildGoModule rec {
+  pname = "qovery-cli";
+  version = "0.84.1";
+
+  src = fetchFromGitHub {
+    owner = "Qovery";
+    repo = "qovery-cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Dq62LXa0hZrpfQ7WQuCelLxWS7Lhn6SH61cNTsYI/mw=";
+  };
+
+  vendorHash = "sha256-XG0dOEpu+NoQmklsukxev1gc2OsZc7fLEkv0AGwkh7o=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd ${pname} \
+      --bash <($out/bin/${pname} completion bash) \
+      --fish <($out/bin/${pname} completion fish) \
+      --zsh <($out/bin/${pname} completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = qovery-cli;
+    command = "HOME=$(mktemp -d); ${pname} version";
+  };
+
+  meta = with lib; {
+    description = "Qovery Command Line Interface";
+    homepage = "https://github.com/Qovery/qovery-cli";
+    changelog = "https://github.com/Qovery/qovery-cli/releases/tag/v${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "qovery-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/darwin.nix b/nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/darwin.nix
new file mode 100644
index 000000000000..0a27e2733b51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/darwin.nix
@@ -0,0 +1,28 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, undmg
+, pname
+, version
+, meta
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+  inherit pname version meta;
+
+  src = fetchurl {
+    url = "https://downloads.realvnc.com/download/file/viewer.files/VNC-Viewer-${finalAttrs.version}-MacOSX-universal.dmg";
+    sha256 = "0k72fdnx1zmyi9z5n3lazc7s70gcddxq0s73akp0al0y9hzq9prh";
+  };
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ undmg ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    cp -r *.app $out/Applications
+
+    runHook postInstall
+  '';
+})
diff --git a/nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/default.nix b/nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/default.nix
new file mode 100644
index 000000000000..9776ececcfd2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, stdenv
+, callPackage
+}:
+let
+  pname = "realvnc-vnc-viewer";
+  version = "7.5.1";
+
+  meta = with lib; {
+    description = "VNC remote desktop client software by RealVNC";
+    homepage = "https://www.realvnc.com/en/connect/download/viewer/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = {
+      fullName = "VNC Connect End User License Agreement";
+      url = "https://static.realvnc.com/media/documents/LICENSE-4.0a_en.pdf";
+      free = false;
+    };
+    maintainers = with maintainers; [ emilytrau onedragon ];
+    platforms = [ "x86_64-linux" ] ++ platforms.darwin;
+    mainProgram = "vncviewer";
+  };
+in
+if stdenv.isDarwin then callPackage ./darwin.nix { inherit pname version meta; }
+else callPackage ./linux.nix { inherit pname version meta; }
diff --git a/nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/linux.nix b/nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/linux.nix
new file mode 100644
index 000000000000..63060e48625c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/realvnc-vnc-viewer/linux.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, rpmextract
+, libX11
+, libXext
+, pname
+, version
+, meta
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  inherit pname version;
+
+  src = {
+    "x86_64-linux" = fetchurl {
+      url = "https://downloads.realvnc.com/download/file/viewer.files/VNC-Viewer-${finalAttrs.version}-Linux-x64.rpm";
+      sha256 = "sha256-Ull9iNi8NxB12YwEThWE0P9k1xOV2LZnebuRrVH/zwI=";
+    };
+  }.${stdenv.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  nativeBuildInputs = [ autoPatchelfHook rpmextract ];
+  buildInputs = [ libX11 libXext stdenv.cc.cc.libgcc or null ];
+
+  unpackPhase = ''
+    rpmextract $src
+  '';
+
+  postPatch = ''
+    substituteInPlace ./usr/share/applications/realvnc-vncviewer.desktop \
+      --replace /usr/share/icons/hicolor/48x48/apps/vncviewer48x48.png vncviewer48x48.png
+    substituteInPlace ./usr/share/mimelnk/application/realvnc-vncviewer-mime.desktop \
+      --replace /usr/share/icons/hicolor/48x48/apps/vncviewer48x48.png vncviewer48x48.png
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mv usr $out
+
+    runHook postInstall
+  '';
+
+  meta = meta // { mainProgram = "vncviewer"; };
+})
diff --git a/nixpkgs/pkgs/tools/admin/rhoas/default.nix b/nixpkgs/pkgs/tools/admin/rhoas/default.nix
new file mode 100644
index 000000000000..7400558a5887
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/rhoas/default.nix
@@ -0,0 +1,47 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, rhoas }:
+
+buildGoModule rec {
+  pname = "rhoas";
+  version = "0.53.0";
+
+  src = fetchFromGitHub {
+    owner = "redhat-developer";
+    repo = "app-services-cli";
+    rev = "v${version}";
+    sha256 = "sha256-9fydRgp2u1LWf0lEDMi1OxxFURd14oKCBDKACqrgWII=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/redhat-developer/app-services-cli/internal/build.Version=${version}"
+  ];
+
+  nativeBuildInputs = [installShellFiles];
+
+  # Networking tests fail.
+  doCheck = false;
+
+  postInstall = ''
+    installShellCompletion --cmd rhoas \
+      --bash <($out/bin/rhoas completion bash) \
+      --fish <($out/bin/rhoas completion fish) \
+      --zsh <($out/bin/rhoas completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = rhoas;
+    command = "HOME=$TMP rhoas version";
+  };
+
+  meta = with lib; {
+    description = "Command Line Interface for Red Hat OpenShift Application Services";
+    license = licenses.asl20;
+    homepage = "https://github.com/redhat-developer/app-services-cli";
+    changelog = "https://github.com/redhat-developer/app-services-cli/releases/v${version}";
+    maintainers = with maintainers; [stehessel];
+    mainProgram = "rhoas";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/rset/default.nix b/nixpkgs/pkgs/tools/admin/rset/default.nix
new file mode 100644
index 000000000000..32e401ecc40c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/rset/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, coreutils, openssh, gnutar }:
+
+stdenv.mkDerivation rec {
+  pname = "rset";
+  version = "2.1";
+
+  src = fetchurl {
+    url = "https://scriptedconfiguration.org/code/${pname}-${version}.tar.gz";
+    sha256 = "0916f96afl8kcn2hpj4qhg92g2j93ycp2sb94nsz3q44sqc6ddhb";
+  };
+
+  patches = [ ./paths.patch ];
+
+  postPatch = ''
+    substituteInPlace rset.c \
+      --replace @ssh@       ${openssh}/bin/ssh \
+      --replace @miniquark@ $out/bin/miniquark \
+      --replace @rinstall@  $out/bin/rinstall \
+      --replace @rsub@      $out/bin/rsub
+
+    substituteInPlace execute.c \
+      --replace @ssh@     ${openssh}/bin/ssh \
+      --replace @ssh-add@ ${openssh}/bin/ssh-add \
+      --replace @tar@     ${gnutar}/bin/tar
+
+    substituteInPlace rutils.c \
+      --replace @install@ ${coreutils}/bin/install
+  '';
+
+  # these are to be run on the remote host,
+  # so we want to preserve the original shebang.
+  postFixup = ''
+    sed -i "1s@.*@#!/bin/sh@" $out/bin/rinstall
+    sed -i "1s@.*@#!/bin/sh@" $out/bin/rsub
+  '';
+
+  dontAddPrefix = true;
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://scriptedconfiguration.org/";
+    description = "Configure systems using any scripting language";
+    changelog = "https://github.com/eradman/rset/raw/${version}/NEWS";
+    license = licenses.isc;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+    # 2023-08-19, fails to compile with glibc-2.38 because of strlcpy.
+    # At the time of writing, this was 4 minors behind already and
+    # the `paths.patch` didn't apply anymore, so this is now considered
+    # broken until somebody cares enough to fix and upgrade this.
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/rset/paths.patch b/nixpkgs/pkgs/tools/admin/rset/paths.patch
new file mode 100644
index 000000000000..af09b0902ed0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/rset/paths.patch
@@ -0,0 +1,131 @@
+diff --git a/execute.c b/execute.c
+index be06068..3468fa7 100644
+--- a/execute.c
++++ b/execute.c
+@@ -242,7 +242,7 @@ verify_ssh_agent() {
+ 	char *output;
+ 	char *argv[32];
+ 
+-	append(argv, 0, "ssh-add", "-l", NULL);
++	append(argv, 0, "@ssh-add@", "-l", NULL);
+ 	output = cmd_pipe_stdout(argv, &error_code, &output_size);
+ 	free(output);
+ 
+@@ -282,7 +282,7 @@ start_connection(char *socket_path, Label *route_label, int http_port, const cha
+ 	}
+ 
+ 	argc = 0;
+-	argc = append(argv, argc, "ssh", "-fN", "-R", port_forwarding, "-S",
++	argc = append(argv, argc, "@ssh@", "-fN", "-R", port_forwarding, "-S",
+ 		socket_path, "-M", NULL);
+ 	if (ssh_config)
+ 		(void) append(argv, argc, "-F", ssh_config, host_name, NULL);
+@@ -292,12 +292,12 @@ start_connection(char *socket_path, Label *route_label, int http_port, const cha
+ 		return -1;
+ 
+ 	snprintf(tmp_path, sizeof(tmp_path), "mkdir " REMOTE_TMP_PATH, http_port);
+-	append(argv, 0, "ssh", "-S", socket_path, host_name, tmp_path, NULL);
++	append(argv, 0, "@ssh@", "-S", socket_path, host_name, tmp_path, NULL);
+ 	if (run(argv) != 0)
+ 		return -1;
+ 
+-	snprintf(cmd, PATH_MAX, "tar -cf - %s -C " REPLICATED_DIRECTORY " ./ | "
+-	   "exec ssh -q -S %s %s tar -xf - -C " REMOTE_TMP_PATH,
++	snprintf(cmd, PATH_MAX, "@tar@ -cf - %s -C " REPLICATED_DIRECTORY " ./ | "
++	   "exec @ssh@ -q -S %s %s tar -xf - -C " REMOTE_TMP_PATH,
+ 	    array_to_str(route_label->export_paths), socket_path, host_name,
+ 	    http_port);
+ 	if (system(cmd) != 0) {
+@@ -326,7 +326,7 @@ ssh_command_pipe(char *host_name, char *socket_path, Label *host_label, int http
+ 
+ 	/* construct ssh command */
+ 	argc = 0;
+-	argc = append(argv, argc, "ssh", "-T", "-S", socket_path, NULL);
++	argc = append(argv, argc, "@ssh@", "-T", "-S", socket_path, NULL);
+ 
+ 	(void) append(argv, argc, host_name, cmd, NULL);
+ 	return cmd_pipe_stdin(argv, host_label->content, host_label->content_size);
+@@ -344,7 +344,7 @@ ssh_command_tty(char *host_name, char *socket_path, Label *host_label, int http_
+ 	    http_port);
+ 	/* construct ssh command */
+ 	argc = 0;
+-	argc = append(argv, argc, "ssh", "-T", "-S", socket_path, NULL);
++	argc = append(argv, argc, "@ssh@", "-T", "-S", socket_path, NULL);
+ 	(void) append(argv, argc, host_name, cmd, NULL);
+ 	cmd_pipe_stdin(argv, host_label->content, host_label->content_size);
+ 
+@@ -360,7 +360,7 @@ ssh_command_tty(char *host_name, char *socket_path, Label *host_label, int http_
+ 
+ 	/* construct ssh command */
+ 	argc = 0;
+-	argc = append(argv, argc, "ssh", "-t", "-S", socket_path, NULL);
++	argc = append(argv, argc, "@ssh@", "-t", "-S", socket_path, NULL);
+ 
+ 	(void) append(argv, argc, host_name, cmd, NULL);
+ 	return run(argv);
+@@ -375,11 +375,11 @@ end_connection(char *socket_path, char *host_name, int http_port) {
+ 		return;
+ 
+ 	snprintf(tmp_path, sizeof(tmp_path), REMOTE_TMP_PATH, http_port);
+-	append(argv, 0, "ssh", "-S", socket_path, host_name, "rm", "-rf", tmp_path , NULL);
++	append(argv, 0, "@ssh@", "-S", socket_path, host_name, "rm", "-rf", tmp_path , NULL);
+ 	if (run(argv) != 0)
+ 		warn("remote tmp dir");
+ 
+-	append(argv, 0, "ssh", "-q", "-S", socket_path, "-O", "exit", host_name, NULL);
++	append(argv, 0, "@ssh@", "-q", "-S", socket_path, "-O", "exit", host_name, NULL);
+ 	if (run(argv) != 0)
+ 		warn("exec ssh -O exit");
+ }
+diff --git a/rset.c b/rset.c
+index 383fc82..9c20f65 100644
+--- a/rset.c
++++ b/rset.c
+@@ -128,10 +128,8 @@ int main(int argc, char *argv[])
+ 		hostnames[i] = argv[optind+i];
+ 	hostnames[i] = NULL;
+ 
+-	if ((rinstall_bin = findprog("rinstall")) == 0)
+-		not_found("rinstall");
+-	if ((rsub_bin = findprog("rsub")) == 0)
+-		not_found("rsub");
++  rinstall_bin = "@rinstall@";
++  rsub_bin = "@rsub@";
+ 
+ 	/* all operations must be relative to the routes file */
+ 	if (realpath(xdirname(routes_file), routes_realpath) == NULL)
+@@ -159,10 +157,9 @@ int main(int argc, char *argv[])
+ 
+ 	/* Convert http server command line into a vector */
+ 	inputstring = malloc(PATH_MAX);
+-	snprintf(inputstring, PATH_MAX, "miniquark -p %d -d " PUBLIC_DIRECTORY, http_port);
++	snprintf(inputstring, PATH_MAX, "@miniquark@ -p %d -d " PUBLIC_DIRECTORY, http_port);
+ 	str_to_array(http_srv_argv, inputstring, sizeof(http_srv_argv));
+-	if ((httpd_bin = findprog(http_srv_argv[0])) == 0)
+-		not_found(http_srv_argv[0]);
++	httpd_bin = "@miniquark@";
+ 
+ 	/* start the web server */
+ 	pipe(stdout_pipe);
+@@ -397,7 +394,7 @@ handle_exit(int sig) {
+ 		printf("caught signal %d, terminating connection to '%s'\n", sig,
+ 			hostname);
+ 		/* clean up socket and SSH connection; leaving staging dir */
+-		execlp("ssh", "ssh", "-S", socket_path, "-O", "exit", hostname, NULL);
++		execlp("@ssh@", "@ssh@", "-S", socket_path, "-O", "exit", hostname, NULL);
+ 		err(1, "ssh -O exit");
+ 	}
+ }
+diff --git a/rutils.c b/rutils.c
+index 1e182d8..9aef76d 100644
+--- a/rutils.c
++++ b/rutils.c
+@@ -77,7 +77,7 @@ install_if_new(const char *src, const char *dst) {
+ 
+ 	pid = fork();
+ 	if (pid == 0) {
+-		if (execl("/usr/bin/install", "/usr/bin/install", src, dst, NULL) != -1)
++		if (execl("@install@", "@install@", src, dst, NULL) != -1)
+ 			err(1, "%s", dst);
+ 	}
+ 	waitpid(pid, &status, 0);
diff --git a/nixpkgs/pkgs/tools/admin/s3bro/default.nix b/nixpkgs/pkgs/tools/admin/s3bro/default.nix
new file mode 100644
index 000000000000..47b458e9cc02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/s3bro/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "s3bro";
+  version = "2.8";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-+OqcLbXilbY4h/zRAkvRd8taVIOPyiScOAcDyPZ4RUw=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    boto3
+    botocore
+    click
+    termcolor
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "use_2to3=True," ""
+  '';
+
+  # No tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "s3bro"
+  ];
+
+  meta = with lib; {
+    description = "s3 CLI tool";
+    homepage = "https://github.com/rsavordelli/s3bro";
+    license = licenses.mit;
+    maintainers = with maintainers; [ psyanticy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/salt/default.nix b/nixpkgs/pkgs/tools/admin/salt/default.nix
new file mode 100644
index 000000000000..a08e4c5a812a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/salt/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenv
+, python3
+, fetchpatch
+, fetchPypi
+, openssl
+  # Many Salt modules require various Python modules to be installed,
+  # passing them in this array enables Salt to find them.
+, extraInputs ? []
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "salt";
+  version = "3006.6";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-X6tojYa3Dh6ExRtMqlZfNnGVBQaBPDcp1EQIzC9a+8M=";
+  };
+
+  patches = [
+    # https://github.com/saltstack/salt/pull/63795
+    (fetchpatch {
+      name = "remove-duplicate-scripts.patch";
+      url = "https://github.com/saltstack/salt/commit/6b9463836e70e40409dbf653f01aa94ef869dfe7.patch";
+      hash = "sha256-VcVdKC8EH4qoWHtq6eEPl8OviR4eA2k/S2lWNQbubJw=";
+    })
+    ./fix-libcrypto-loading.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace "salt/utils/rsax931.py" \
+      --subst-var-by "libcrypto" "${lib.getLib openssl}/lib/libcrypto${stdenv.hostPlatform.extensions.sharedLibrary}"
+    substituteInPlace requirements/base.txt \
+      --replace contextvars ""
+
+    # Don't require optional dependencies on Darwin, let's use
+    # `extraInputs` like on any other platform
+    echo -n > "requirements/darwin.txt"
+
+    # Remove windows-only requirement
+    substituteInPlace "requirements/zeromq.txt" \
+      --replace 'pyzmq==25.0.2 ; sys_platform == "win32"' ""
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    distro
+    jinja2
+    jmespath
+    looseversion
+    markupsafe
+    msgpack
+    packaging
+    psutil
+    pycryptodomex
+    pyyaml
+    pyzmq
+    requests
+  ] ++ extraInputs;
+
+  # Don't use fixed dependencies on Darwin
+  USE_STATIC_REQUIREMENTS = "0";
+
+  # The tests fail due to socket path length limits at the very least;
+  # possibly there are more issues but I didn't leave the test suite running
+  # as is it rather long.
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://saltproject.io/";
+    changelog = "https://docs.saltproject.io/en/latest/topics/releases/${version}.html";
+    description = "Portable, distributed, remote execution and configuration management system";
+    maintainers = with maintainers; [ Flakebi ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/salt/fix-libcrypto-loading.patch b/nixpkgs/pkgs/tools/admin/salt/fix-libcrypto-loading.patch
new file mode 100644
index 000000000000..e2d22fed7e51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/salt/fix-libcrypto-loading.patch
@@ -0,0 +1,13 @@
+--- a/salt/utils/rsax931.py	2021-11-24 00:39:57.940790184 +0100
++++ b/salt/utils/rsax931.py	2021-11-24 00:38:35.436728341 +0100
+@@ -85,6 +85,10 @@
+     """
+     Attempt to load libcrypto.
+     """
++    try:
++        return cdll.LoadLibrary('@libcrypto@')
++    except OSError:
++        pass
+     return cdll.LoadLibrary(_find_libcrypto())
+ 
+ 
diff --git a/nixpkgs/pkgs/tools/admin/scaleway-cli/default.nix b/nixpkgs/pkgs/tools/admin/scaleway-cli/default.nix
new file mode 100644
index 000000000000..c33f720ebad0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/scaleway-cli/default.nix
@@ -0,0 +1,61 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "scaleway-cli";
+  version = "2.26.0";
+
+  src = fetchFromGitHub {
+    owner = "scaleway";
+    repo = "scaleway-cli";
+    rev = "v${version}";
+    sha256 = "sha256-RfXNwuynlELT7gVWjlhjaX5nKuBJM+v6eAD/JCuRyck=";
+  };
+
+  vendorHash = "sha256-hBfEQtuBkU2fKoCd78dpp+I19lTOycItqjlcA6KByLY=";
+
+  ldflags = [
+    "-w"
+    "-extldflags"
+    "-static"
+    "-X main.Version=${version}"
+    "-X main.GitCommit=ref/tags/${version}"
+    "-X main.GitBranch=HEAD"
+    "-X main.BuildDate=unknown"
+  ];
+
+  doCheck = true;
+
+  # Some tests require access to scaleway's API, failing when sandboxed
+  preCheck = ''
+    substituteInPlace internal/core/bootstrap_test.go \
+      --replace "TestInterruptError" "SkipInterruptError"
+    substituteInPlace internal/e2e/errors_test.go \
+      --replace "TestStandardErrors" "SkipStandardErrors"
+    substituteInPlace internal/e2e/human_test.go \
+      --replace "TestTestCommand" "SkipTestCommand" \
+      --replace "TestHumanCreate" "SkipHumanCreate" \
+      --replace "TestHumanList" "SkipHumanList" \
+      --replace "TestHumanUpdate" "SkipHumanUpdate" \
+      --replace "TestHumanGet" "SkipHumanGet" \
+      --replace "TestHumanDelete" "SkipHumanDelete"
+    substituteInPlace internal/e2e/sdk_errors_test.go \
+      --replace "TestSdkStandardErrors" "SkipSdkStandardErrors"
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/scw --help
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "Interact with Scaleway API from the command line";
+    homepage = "https://github.com/scaleway/scaleway-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nickhu techknowlogick kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/scalr-cli/default.nix b/nixpkgs/pkgs/tools/admin/scalr-cli/default.nix
new file mode 100644
index 000000000000..00065aa2e357
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/scalr-cli/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "scalr-cli";
+  version = "0.15.5";
+
+  src = fetchFromGitHub {
+    owner = "Scalr";
+    repo = "scalr-cli";
+    rev = "v${version}";
+    hash = "sha256-RXfUlpwlDNAZRJTbbE+n8mReVyrWxUsWkOGaaALz0Q4=";
+  };
+
+  vendorHash = "sha256-0p4f+KKD04IFAUQG8F3b+2sx9suYemt3wbgSNNOOIlk=";
+
+  ldflags = [
+    "-s" "-w"
+  ];
+
+  preConfigure = ''
+    # Set the version.
+    substituteInPlace main.go --replace '"0.0.0"' '"${version}"'
+  '';
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/scalr
+  '';
+
+  doCheck = false; # Skip tests as they require creating actual Scalr resources.
+
+  meta = with lib; {
+    description = "A command-line tool that communicates directly with the Scalr API";
+    homepage = "https://github.com/Scalr/scalr-cli";
+    changelog = "https://github.com/Scalr/scalr-cli/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dylanmtaylor ];
+    mainProgram = "scalr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/sec/default.nix b/nixpkgs/pkgs/tools/admin/sec/default.nix
new file mode 100644
index 000000000000..a37f8af5aff1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/sec/default.nix
@@ -0,0 +1,33 @@
+{ fetchFromGitHub, perl, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "sec";
+  version = "2.9.2";
+
+  src = fetchFromGitHub {
+    owner = "simple-evcorr";
+    repo = "sec";
+    rev = version;
+    sha256 = "sha256-s5xalQfZIrvj8EcLvN0swpYBgRhE1YUoPmQYVFB0lWA=";
+  };
+
+  buildInputs = [ perl ];
+
+  dontBuild = false;
+  doCheck = false;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp sec $out/bin
+    cp sec.man $out/share/man/man1/sec.1
+  '';
+
+  meta = {
+    homepage = "https://simple-evcorr.github.io";
+    license = lib.licenses.gpl2;
+    description = "Simple Event Correlator";
+    maintainers = [ lib.maintainers.tv ];
+    platforms = lib.platforms.all;
+    mainProgram = "sec";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/sewer/default.nix b/nixpkgs/pkgs/tools/admin/sewer/default.nix
new file mode 100644
index 000000000000..ad1bf81ed9ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/sewer/default.nix
@@ -0,0 +1,20 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sewer";
+  version = "0.8.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0s8f0w6nv8dcs5yw7rn49981b3c9mnnx4f6wzqw4zha0rpp60z22";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ pyopenssl requests tldextract ];
+
+  meta = with lib; {
+    homepage = "https://github.com/komuw/sewer";
+    description = "ACME client";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kevincox ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/simp_le/default.nix b/nixpkgs/pkgs/tools/admin/simp_le/default.nix
new file mode 100644
index 000000000000..cf908ba33550
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/simp_le/default.nix
@@ -0,0 +1,34 @@
+{ lib, python3Packages, fetchPypi, bash }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "simp_le-client";
+  version = "0.17.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0m1jynar4calaffp2zdxr5yy9vnhw2qf2hsfxwzfwf8fqb5h7bjb";
+  };
+
+  postPatch = ''
+    # drop upper bound of idna requirement
+    sed -ri "s/'(idna)<[^']+'/'\1'/" setup.py
+    substituteInPlace simp_le.py \
+      --replace "/bin/sh" "${bash}/bin/sh"
+  '';
+
+  checkPhase = ''
+    $out/bin/simp_le --test
+  '';
+
+  propagatedBuildInputs = with python3Packages; [ acme setuptools-scm josepy idna ];
+
+  nativeCheckInputs = with python3Packages; [ mock ];
+
+  meta = with lib; {
+    homepage = "https://github.com/zenhack/simp_le";
+    description = "Simple Let's Encrypt client";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ gebner makefu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/simplotask/default.nix b/nixpkgs/pkgs/tools/admin/simplotask/default.nix
new file mode 100644
index 000000000000..b2b15ebe982a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/simplotask/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "simplotask";
+  version = "1.13.1";
+
+  src = fetchFromGitHub {
+    owner = "umputun";
+    repo = "spot";
+    rev = "v${version}";
+    hash = "sha256-Sg84Q5I82W2fz/CHh9ov0QPCzAoyqkNrATWNFnMrnEw=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s -w"
+    "-X main.revision=v${version}"
+  ];
+
+  doCheck = false;
+
+  postInstall = ''
+    mv $out/bin/{secrets,spot-secrets}
+    installManPage *.1
+  '';
+
+  meta = with lib; {
+    description = "A tool for effortless deployment and configuration management";
+    homepage = "https://spot.umputun.dev/";
+    maintainers = with maintainers; [ sikmir ];
+    license = licenses.mit;
+    mainProgram = "spot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/ssh-import-id/default.nix b/nixpkgs/pkgs/tools/admin/ssh-import-id/default.nix
new file mode 100644
index 000000000000..e4202033b99c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ssh-import-id/default.nix
@@ -0,0 +1,44 @@
+{ buildPythonPackage
+, lib
+, fetchgit
+, requests
+, distro
+, makeWrapper
+, installShellFiles
+, extraHandlers ? []
+}:
+
+buildPythonPackage rec {
+  pname = "ssh-import-id";
+  version = "5.11";
+
+  src = fetchgit {
+    url = "https://git.launchpad.net/ssh-import-id";
+    rev = version;
+    sha256 = "sha256-tYbaJGH59qyvjp4kwo3ZFVs0EaE0Lsd2CQ6iraFkAdI=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    distro
+  ] ++ extraHandlers;
+
+  nativeBuildInputs = [
+    makeWrapper
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installManPage $src/usr/share/man/man1/ssh-import-id.1
+  '';
+
+  # handlers require main bin, main bin requires handlers
+  makeWrapperArgs = [ "--prefix" ":" "$out/bin" ];
+
+  meta = with lib; {
+    description = "Retrieves an SSH public key and installs it locally";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ mkg20001 viraptor ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/ssl-cert-check/default.nix b/nixpkgs/pkgs/tools/admin/ssl-cert-check/default.nix
new file mode 100644
index 000000000000..c314c304aec8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ssl-cert-check/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, coreutils
+, fetchFromGitHub
+, findutils
+, gawk
+, gnugrep
+, gnused
+, makeWrapper
+, mktemp
+, openssl
+, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ssl-cert-check";
+  version = "4.14";
+
+  src = fetchFromGitHub {
+    owner = "Matty9191";
+    repo = pname;
+    rev = "4056ceeab5abc0e39f4e0ea40cd54147253a3369";
+    sha256 = "07k2n4l68hykraxvy030djc208z8rqff3kc7wy4ib9g6qj7s4mif";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    coreutils
+    findutils
+    gawk
+    gnugrep
+    gnused
+    mktemp
+    openssl
+    which
+  ];
+
+  prePatch = ''
+    substituteInPlace $pname --replace PATH= NOT_PATH=
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $pname $out/bin/$pname
+    wrapProgram $out/bin/$pname \
+      --set PATH "${lib.makeBinPath buildInputs}"
+  '';
+
+  meta = with lib; {
+    description = "Bourne shell script that can be used to report on expiring SSL certificates";
+    homepage = "https://github.com/Matty9191/ssl-cert-check";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ryantm ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/ssmsh/default.nix b/nixpkgs/pkgs/tools/admin/ssmsh/default.nix
new file mode 100644
index 000000000000..abf69be5765f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ssmsh/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, ssmsh }:
+
+buildGoModule rec {
+  pname = "ssmsh";
+  version = "1.4.9";
+
+  src = fetchFromGitHub {
+    owner = "bwhaley";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UmfwDukRVyfX+DmUfRi+KepqFrPtDNImKd22/dI7ytk=";
+  };
+
+  vendorHash = "sha256-+7duWRe/haBOZbe18sr2qwg419ieEZwYDb0L3IPLA4A=";
+
+  doCheck = true;
+
+  ldflags = [ "-w" "-s" "-X main.Version=${version}" ];
+
+  passthru.tests = testers.testVersion {
+    package = ssmsh;
+    command = "ssmsh -version";
+    version = "Version ${version}";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/bwhaley/ssmsh";
+    description = "An interactive shell for AWS Parameter Store";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dbirks ];
+    mainProgram = "ssmsh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/stripe-cli/default.nix b/nixpkgs/pkgs/tools/admin/stripe-cli/default.nix
new file mode 100644
index 000000000000..9adb2d326e0b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/stripe-cli/default.nix
@@ -0,0 +1,78 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, stdenv }:
+
+buildGoModule rec {
+  pname = "stripe-cli";
+  version = "1.19.2";
+
+  src = fetchFromGitHub {
+    owner = "stripe";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ohxTEHm5qGFQ1mJNL/Fh5qNc/De1TUtsEcuOIaJvGLc=";
+  };
+  vendorHash = "sha256-DYA6cu2KzEBZ4wsT7wjcdY1endQQOZlj2aOwu6iGLew=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/stripe/stripe-cli/pkg/version.Version=${version}"
+  ];
+
+  preCheck = ''
+    # the tests expect the Version ldflag not to be set
+    unset ldflags
+
+    # requires internet access
+    rm pkg/cmd/plugin_cmds_test.go
+    rm pkg/cmd/resources_test.go
+    rm pkg/cmd/root_test.go
+
+    # TODO: no clue why it's broken (1.17.1), remove for now.
+    rm pkg/login/client_login_test.go
+    rm pkg/git/editor_test.go
+    rm pkg/rpcservice/sample_create_test.go
+  '' + lib.optionalString (
+      # delete plugin tests on all platforms but exact matches
+      # https://github.com/stripe/stripe-cli/issues/850
+      ! lib.lists.any
+        (platform: lib.meta.platformMatch stdenv.hostPlatform platform)
+        [ "x86_64-linux" "x86_64-darwin" ]
+  ) ''
+    rm pkg/plugins/plugin_test.go
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd stripe \
+      --bash <($out/bin/stripe completion --write-to-stdout --shell bash) \
+      --zsh <($out/bin/stripe completion --write-to-stdout --shell zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/stripe --help
+    $out/bin/stripe --version | grep "${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://stripe.com/docs/stripe-cli";
+    changelog = "https://github.com/stripe/stripe-cli/releases/tag/v${version}";
+    description = "A command-line tool for Stripe";
+    longDescription = ''
+      The Stripe CLI helps you build, test, and manage your Stripe integration
+      right from the terminal.
+
+      With the CLI, you can:
+      Securely test webhooks without relying on 3rd party software
+      Trigger webhook events or resend events for easy testing
+      Tail your API request logs in real-time
+      Create, retrieve, update, or delete API objects.
+    '';
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ RaghavSood jk kashw2 ];
+    mainProgram = "stripe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/swapspace/default.nix b/nixpkgs/pkgs/tools/admin/swapspace/default.nix
new file mode 100644
index 000000000000..27ec7f31f891
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/swapspace/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, installShellFiles, util-linux }:
+
+stdenv.mkDerivation rec {
+  pname = "swapspace";
+  version = "1.18";
+
+  src = fetchFromGitHub {
+    owner = "Tookmund";
+    repo = "Swapspace";
+    rev = "v${version}";
+    sha256 = "sha256-tzsw10cpu5hldkm0psWcFnWToWQejout/oGHJais6yw=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    installShellFiles
+  ];
+
+  postPatch = ''
+    substituteInPlace 'swapspace.service' \
+      --replace '/usr/local/sbin/' "$out/bin/"
+    substituteInPlace 'src/support.c' \
+      --replace '/sbin/swapon' '${lib.getBin util-linux}/bin/swapon' \
+      --replace '/sbin/swapoff' '${lib.getBin util-linux}/bin/swapoff'
+    substituteInPlace 'src/swaps.c' \
+      --replace 'mkswap' '${lib.getBin util-linux}/bin/mkswap'
+
+    # Don't create empty directory $out/var/lib/swapspace
+    substituteInPlace 'Makefile.am' \
+      --replace 'install-data-local:' 'do-not-execute:'
+  '';
+
+  postInstall = ''
+    installManPage doc/swapspace.8
+    install --mode=444 -D 'swapspace.service' "$out/etc/systemd/system/swapspace.service"
+  '';
+
+  meta = with lib; {
+    description = "Dynamic swap manager for Linux";
+    homepage = "https://github.com/Tookmund/Swapspace";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ misuzu Luflosi ];
+    mainProgram = "swapspace";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/syft/default.nix b/nixpkgs/pkgs/tools/admin/syft/default.nix
new file mode 100644
index 000000000000..b8642bcbb827
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/syft/default.nix
@@ -0,0 +1,81 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "syft";
+  version = "0.105.0";
+
+  src = fetchFromGitHub {
+    owner = "anchore";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-X05ELxhySlQ0POIg2Iop4NS7gYqZcuP46IC8CEuxtJg=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse HEAD > $out/COMMIT
+      # 0000-00-00T00:00:00Z
+      date -u -d "@$(git log -1 --pretty=%ct)" "+%Y-%m-%dT%H:%M:%SZ" > $out/SOURCE_DATE_EPOCH
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+  # hash mismatch with darwin
+  proxyVendor = true;
+  vendorHash = "sha256-1Iwqh9obVU+HA2l/Gy4SOHrgHtvoy8c4tbcuA1AFFQw=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "cmd/syft" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+    "-X main.gitDescription=v${version}"
+    "-X main.gitTreeState=clean"
+  ];
+
+  preBuild = ''
+    ldflags+=" -X main.gitCommit=$(cat COMMIT)"
+    ldflags+=" -X main.buildDate=$(cat SOURCE_DATE_EPOCH)"
+  '';
+
+  # tests require a running docker instance
+  doCheck = false;
+
+  postInstall = ''
+    # avoid update checks when generating completions
+    export SYFT_CHECK_FOR_APP_UPDATE=false
+
+    installShellCompletion --cmd syft \
+      --bash <($out/bin/syft completion bash) \
+      --fish <($out/bin/syft completion fish) \
+      --zsh <($out/bin/syft completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    export SYFT_CHECK_FOR_APP_UPDATE=false
+    $out/bin/syft --help
+    $out/bin/syft version | grep "${version}"
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/anchore/syft";
+    changelog = "https://github.com/anchore/syft/releases/tag/v${version}";
+    description = "CLI tool and library for generating a Software Bill of Materials from container images and filesystems";
+    longDescription = ''
+      A CLI tool and Go library for generating a Software Bill of Materials
+      (SBOM) from container images and filesystems. Exceptional for
+      vulnerability detection when used with a scanner tool like Grype.
+    '';
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ jk developer-guy kashw2 ];
+    mainProgram = "syft";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/synapse-admin/default.nix b/nixpkgs/pkgs/tools/admin/synapse-admin/default.nix
new file mode 100644
index 000000000000..55797f7c2e17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/synapse-admin/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, fetchFromGitHub
+, fetchYarnDeps
+, mkYarnPackage
+, baseUrl ? null
+}:
+
+mkYarnPackage rec {
+  pname = "synapse-admin";
+  version = "0.8.7";
+  src = fetchFromGitHub {
+    owner = "Awesome-Technologies";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-kvQBzrCu1sgDccKhr0i2DgDmO5z6u6s+vw5KymttoK4=";
+  };
+
+  yarnLock = ./yarn.lock;
+  packageJSON = ./package.json;
+
+  offlineCache = fetchYarnDeps {
+    inherit yarnLock;
+    hash = "sha256-f0ilsF3lA+134qUaX96mdntjpR4gRlmtRIh/xEFhtXQ=";
+  };
+
+  NODE_ENV = "production";
+  ${if baseUrl != null then "REACT_APP_SERVER" else null} = baseUrl;
+
+  # error:0308010C:digital envelope routines::unsupported
+  NODE_OPTIONS = "--openssl-legacy-provider";
+
+  buildPhase = ''
+    runHook preBuild
+
+    export HOME=$(mktemp -d)
+    pushd deps/synapse-admin
+    mv node_modules node_modules.bak
+    cp -r $(readlink -f node_modules.bak) node_modules
+    chmod +w node_modules
+    yarn --offline run build
+    popd
+
+    runHook postBuild
+  '';
+
+  distPhase = ''
+    runHook preDist
+
+    mkdir -p $out
+    cp -r deps/synapse-admin/build/* $out
+
+    runHook postDist
+  '';
+
+  dontFixup = true;
+  dontInstall = true;
+
+  meta = with lib; {
+    description = "Admin UI for Synapse Homeservers";
+    homepage = "https://github.com/Awesome-Technologies/synapse-admin";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ mkg20001 ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/synapse-admin/package.json b/nixpkgs/pkgs/tools/admin/synapse-admin/package.json
new file mode 100644
index 000000000000..abe7e4bb847f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/synapse-admin/package.json
@@ -0,0 +1,67 @@
+{
+  "name": "synapse-admin",
+  "version": "0.8.5",
+  "description": "Admin GUI for the Matrix.org server Synapse",
+  "author": "Awesome Technologies Innovationslabor GmbH",
+  "license": "Apache-2.0",
+  "homepage": ".",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/Awesome-Technologies/synapse-admin"
+  },
+  "devDependencies": {
+    "@testing-library/jest-dom": "^5.16.5",
+    "@testing-library/react": "^11.2.6",
+    "@testing-library/user-event": "^14.4.3",
+    "eslint": "^8.32.0",
+    "eslint-config-prettier": "^8.3.0",
+    "eslint-config-react-app": "^7.0.1",
+    "eslint-plugin-prettier": "^4.2.1",
+    "jest-fetch-mock": "^3.0.3",
+    "prettier": "^2.2.0",
+    "ra-test": "^3.15.0"
+  },
+  "dependencies": {
+    "@emotion/react": "^11.7.1",
+    "@emotion/styled": "^11.6.0",
+    "@mui/icons-material": "^5.3.1",
+    "@mui/material": "^5.4.0",
+    "papaparse": "^5.2.0",
+    "prop-types": "^15.7.2",
+    "ra-language-chinese": "^2.0.10",
+    "ra-language-french": "^4.2.0",
+    "ra-language-german": "^3.13.4",
+    "react": "^17.0.0",
+    "react-admin": "^3.19.7",
+    "react-dom": "^17.0.2",
+    "react-scripts": "^5.0.1"
+  },
+  "scripts": {
+    "start": "REACT_APP_VERSION=$(git describe --tags) react-scripts start",
+    "build": "REACT_APP_VERSION=$(git describe --tags) react-scripts build",
+    "fix:other": "yarn prettier --write",
+    "fix:code": "yarn test:lint --fix",
+    "fix": "yarn fix:code && yarn fix:other",
+    "prettier": "prettier --ignore-path .gitignore \"**/*.{js,jsx,json,md,scss,yaml,yml}\"",
+    "test:code": "react-scripts test",
+    "test:lint": "eslint --ignore-path .gitignore --ext .js,.jsx .",
+    "test:style": "yarn prettier --list-different",
+    "test": "yarn test:style && yarn test:lint && yarn test:code",
+    "eject": "react-scripts eject"
+  },
+  "eslintConfig": {
+    "extends": "react-app"
+  },
+  "browserslist": {
+    "production": [
+      ">0.2%",
+      "not dead",
+      "not op_mini all"
+    ],
+    "development": [
+      "last 1 chrome version",
+      "last 1 firefox version",
+      "last 1 safari version"
+    ]
+  }
+}
diff --git a/nixpkgs/pkgs/tools/admin/synapse-admin/yarn.lock b/nixpkgs/pkgs/tools/admin/synapse-admin/yarn.lock
new file mode 100644
index 000000000000..75c079da96ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/synapse-admin/yarn.lock
@@ -0,0 +1,11253 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@adobe/css-tools@^4.0.1":
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.2.tgz#bd7d13543a186c3ff3eabb44bec2b22e8fb18ee0"
+  integrity sha512-Fx6tYjk2wKUgLi8uMANZr8GNZx05u44ArIJldn9VxLvolzlJVgHbTUCbwhMd6bcYky178+WUSxPHO3DAtGLWpw==
+
+"@ampproject/remapping@^2.1.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
+  integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.1.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@apideck/better-ajv-errors@^0.3.1":
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097"
+  integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==
+  dependencies:
+    json-schema "^0.4.0"
+    jsonpointer "^5.0.0"
+    leven "^3.1.0"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431"
+  integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==
+  dependencies:
+    "@babel/highlight" "^7.16.0"
+
+"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
+  integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
+  dependencies:
+    "@babel/highlight" "^7.18.6"
+
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4":
+  version "7.16.4"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e"
+  integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==
+
+"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8":
+  version "7.18.8"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d"
+  integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==
+
+"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.16.0":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.5.tgz#924aa9e1ae56e1e55f7184c8bf073a50d8677f5c"
+  integrity sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ==
+  dependencies:
+    "@babel/code-frame" "^7.16.0"
+    "@babel/generator" "^7.16.5"
+    "@babel/helper-compilation-targets" "^7.16.3"
+    "@babel/helper-module-transforms" "^7.16.5"
+    "@babel/helpers" "^7.16.5"
+    "@babel/parser" "^7.16.5"
+    "@babel/template" "^7.16.0"
+    "@babel/traverse" "^7.16.5"
+    "@babel/types" "^7.16.0"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.1.2"
+    semver "^6.3.0"
+    source-map "^0.5.0"
+
+"@babel/core@^7.11.1", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8"
+  integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==
+  dependencies:
+    "@ampproject/remapping" "^2.1.0"
+    "@babel/code-frame" "^7.18.6"
+    "@babel/generator" "^7.18.10"
+    "@babel/helper-compilation-targets" "^7.18.9"
+    "@babel/helper-module-transforms" "^7.18.9"
+    "@babel/helpers" "^7.18.9"
+    "@babel/parser" "^7.18.10"
+    "@babel/template" "^7.18.10"
+    "@babel/traverse" "^7.18.10"
+    "@babel/types" "^7.18.10"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.2.1"
+    semver "^6.3.0"
+
+"@babel/eslint-parser@^7.16.3":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz#255a63796819a97b7578751bb08ab9f2a375a031"
+  integrity sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==
+  dependencies:
+    eslint-scope "^5.1.1"
+    eslint-visitor-keys "^2.1.0"
+    semver "^6.3.0"
+
+"@babel/generator@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.5.tgz#26e1192eb8f78e0a3acaf3eede3c6fc96d22bedf"
+  integrity sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==
+  dependencies:
+    "@babel/types" "^7.16.0"
+    jsesc "^2.5.1"
+    source-map "^0.5.0"
+
+"@babel/generator@^7.18.10", "@babel/generator@^7.7.2":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.10.tgz#794f328bfabdcbaf0ebf9bf91b5b57b61fa77a2a"
+  integrity sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==
+  dependencies:
+    "@babel/types" "^7.18.10"
+    "@jridgewell/gen-mapping" "^0.3.2"
+    jsesc "^2.5.1"
+
+"@babel/helper-annotate-as-pure@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d"
+  integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-annotate-as-pure@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
+  integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==
+  dependencies:
+    "@babel/types" "^7.18.6"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.5.tgz#a8429d064dce8207194b8bf05a70a9ea828746af"
+  integrity sha512-3JEA9G5dmmnIWdzaT9d0NmFRgYnWUThLsDaL7982H0XqqWr56lRrsmwheXFMjR+TMl7QMBb6mzy9kvgr1lRLUA==
+  dependencies:
+    "@babel/helper-explode-assignable-expression" "^7.16.0"
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb"
+  integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==
+  dependencies:
+    "@babel/helper-explode-assignable-expression" "^7.18.6"
+    "@babel/types" "^7.18.9"
+
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.3":
+  version "7.16.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0"
+  integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==
+  dependencies:
+    "@babel/compat-data" "^7.16.0"
+    "@babel/helper-validator-option" "^7.14.5"
+    browserslist "^4.17.5"
+    semver "^6.3.0"
+
+"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf"
+  integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==
+  dependencies:
+    "@babel/compat-data" "^7.18.8"
+    "@babel/helper-validator-option" "^7.18.6"
+    browserslist "^4.20.2"
+    semver "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.16.0", "@babel/helper-create-class-features-plugin@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.5.tgz#5d1bcd096792c1ebec6249eebc6358eec55d0cad"
+  integrity sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.0"
+    "@babel/helper-environment-visitor" "^7.16.5"
+    "@babel/helper-function-name" "^7.16.0"
+    "@babel/helper-member-expression-to-functions" "^7.16.5"
+    "@babel/helper-optimise-call-expression" "^7.16.0"
+    "@babel/helper-replace-supers" "^7.16.5"
+    "@babel/helper-split-export-declaration" "^7.16.0"
+
+"@babel/helper-create-class-features-plugin@^7.18.6":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce"
+  integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.18.6"
+    "@babel/helper-environment-visitor" "^7.18.9"
+    "@babel/helper-function-name" "^7.18.9"
+    "@babel/helper-member-expression-to-functions" "^7.18.9"
+    "@babel/helper-optimise-call-expression" "^7.18.6"
+    "@babel/helper-replace-supers" "^7.18.9"
+    "@babel/helper-split-export-declaration" "^7.18.6"
+
+"@babel/helper-create-regexp-features-plugin@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff"
+  integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.0"
+    regexpu-core "^4.7.1"
+
+"@babel/helper-create-regexp-features-plugin@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c"
+  integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.18.6"
+    regexpu-core "^5.1.0"
+
+"@babel/helper-define-polyfill-provider@^0.3.0":
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz#c5b10cf4b324ff840140bb07e05b8564af2ae971"
+  integrity sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.13.0"
+    "@babel/helper-module-imports" "^7.12.13"
+    "@babel/helper-plugin-utils" "^7.13.0"
+    "@babel/traverse" "^7.13.0"
+    debug "^4.1.1"
+    lodash.debounce "^4.0.8"
+    resolve "^1.14.2"
+    semver "^6.1.2"
+
+"@babel/helper-define-polyfill-provider@^0.3.2":
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073"
+  integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.17.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+    debug "^4.1.1"
+    lodash.debounce "^4.0.8"
+    resolve "^1.14.2"
+    semver "^6.1.2"
+
+"@babel/helper-environment-visitor@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz#f6a7f38b3c6d8b07c88faea083c46c09ef5451b8"
+  integrity sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-environment-visitor@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
+  integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
+
+"@babel/helper-explode-assignable-expression@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778"
+  integrity sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-explode-assignable-expression@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096"
+  integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==
+  dependencies:
+    "@babel/types" "^7.18.6"
+
+"@babel/helper-function-name@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481"
+  integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==
+  dependencies:
+    "@babel/helper-get-function-arity" "^7.16.0"
+    "@babel/template" "^7.16.0"
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-function-name@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0"
+  integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==
+  dependencies:
+    "@babel/template" "^7.18.6"
+    "@babel/types" "^7.18.9"
+
+"@babel/helper-get-function-arity@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa"
+  integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-hoist-variables@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a"
+  integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-hoist-variables@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
+  integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
+  dependencies:
+    "@babel/types" "^7.18.6"
+
+"@babel/helper-member-expression-to-functions@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.5.tgz#1bc9f7e87354e86f8879c67b316cb03d3dc2caab"
+  integrity sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-member-expression-to-functions@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815"
+  integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==
+  dependencies:
+    "@babel/types" "^7.18.9"
+
+"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
+  integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
+  dependencies:
+    "@babel/types" "^7.18.6"
+
+"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3"
+  integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-module-transforms@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.5.tgz#530ebf6ea87b500f60840578515adda2af470a29"
+  integrity sha512-CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.16.5"
+    "@babel/helper-module-imports" "^7.16.0"
+    "@babel/helper-simple-access" "^7.16.0"
+    "@babel/helper-split-export-declaration" "^7.16.0"
+    "@babel/helper-validator-identifier" "^7.15.7"
+    "@babel/template" "^7.16.0"
+    "@babel/traverse" "^7.16.5"
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712"
+  integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.18.9"
+    "@babel/helper-module-imports" "^7.18.6"
+    "@babel/helper-simple-access" "^7.18.6"
+    "@babel/helper-split-export-declaration" "^7.18.6"
+    "@babel/helper-validator-identifier" "^7.18.6"
+    "@babel/template" "^7.18.6"
+    "@babel/traverse" "^7.18.9"
+    "@babel/types" "^7.18.9"
+
+"@babel/helper-optimise-call-expression@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338"
+  integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-optimise-call-expression@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
+  integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==
+  dependencies:
+    "@babel/types" "^7.18.6"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz#afe37a45f39fce44a3d50a7958129ea5b1a5c074"
+  integrity sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==
+
+"@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f"
+  integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==
+
+"@babel/helper-remap-async-to-generator@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.5.tgz#e706646dc4018942acb4b29f7e185bc246d65ac3"
+  integrity sha512-X+aAJldyxrOmN9v3FKp+Hu1NO69VWgYgDGq6YDykwRPzxs5f2N+X988CBXS7EQahDU+Vpet5QYMqLk+nsp+Qxw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.0"
+    "@babel/helper-wrap-function" "^7.16.5"
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519"
+  integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.18.6"
+    "@babel/helper-environment-visitor" "^7.18.9"
+    "@babel/helper-wrap-function" "^7.18.9"
+    "@babel/types" "^7.18.9"
+
+"@babel/helper-replace-supers@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.5.tgz#96d3988bd0ab0a2d22c88c6198c3d3234ca25326"
+  integrity sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.16.5"
+    "@babel/helper-member-expression-to-functions" "^7.16.5"
+    "@babel/helper-optimise-call-expression" "^7.16.0"
+    "@babel/traverse" "^7.16.5"
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6"
+  integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.18.9"
+    "@babel/helper-member-expression-to-functions" "^7.18.9"
+    "@babel/helper-optimise-call-expression" "^7.18.6"
+    "@babel/traverse" "^7.18.9"
+    "@babel/types" "^7.18.9"
+
+"@babel/helper-simple-access@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517"
+  integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-simple-access@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea"
+  integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==
+  dependencies:
+    "@babel/types" "^7.18.6"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09"
+  integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818"
+  integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==
+  dependencies:
+    "@babel/types" "^7.18.9"
+
+"@babel/helper-split-export-declaration@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438"
+  integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-split-export-declaration@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
+  integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
+  dependencies:
+    "@babel/types" "^7.18.6"
+
+"@babel/helper-string-parser@^7.18.10":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56"
+  integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==
+
+"@babel/helper-validator-identifier@^7.15.7":
+  version "7.15.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"
+  integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
+
+"@babel/helper-validator-identifier@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076"
+  integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==
+
+"@babel/helper-validator-option@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
+  integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
+
+"@babel/helper-validator-option@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8"
+  integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==
+
+"@babel/helper-wrap-function@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.5.tgz#0158fca6f6d0889c3fee8a6ed6e5e07b9b54e41f"
+  integrity sha512-2J2pmLBqUqVdJw78U0KPNdeE2qeuIyKoG4mKV7wAq3mc4jJG282UgjZw4ZYDnqiWQuS3Y3IYdF/AQ6CpyBV3VA==
+  dependencies:
+    "@babel/helper-function-name" "^7.16.0"
+    "@babel/template" "^7.16.0"
+    "@babel/traverse" "^7.16.5"
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-wrap-function@^7.18.9":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.10.tgz#a7fcd3ab9b1be4c9b52cf7d7fdc1e88c2ce93396"
+  integrity sha512-95NLBP59VWdfK2lyLKe6eTMq9xg+yWKzxzxbJ1wcYNi1Auz200+83fMDADjRxBvc2QQor5zja2yTQzXGhk2GtQ==
+  dependencies:
+    "@babel/helper-function-name" "^7.18.9"
+    "@babel/template" "^7.18.10"
+    "@babel/traverse" "^7.18.10"
+    "@babel/types" "^7.18.10"
+
+"@babel/helpers@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.5.tgz#29a052d4b827846dd76ece16f565b9634c554ebd"
+  integrity sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==
+  dependencies:
+    "@babel/template" "^7.16.0"
+    "@babel/traverse" "^7.16.5"
+    "@babel/types" "^7.16.0"
+
+"@babel/helpers@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9"
+  integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==
+  dependencies:
+    "@babel/template" "^7.18.6"
+    "@babel/traverse" "^7.18.9"
+    "@babel/types" "^7.18.9"
+
+"@babel/highlight@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a"
+  integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.15.7"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
+
+"@babel/highlight@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
+  integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.18.6"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.5":
+  version "7.16.6"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314"
+  integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==
+
+"@babel/parser@^7.18.10":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.10.tgz#94b5f8522356e69e8277276adf67ed280c90ecc1"
+  integrity sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2":
+  version "7.16.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183"
+  integrity sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
+  integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2"
+  integrity sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+    "@babel/plugin-proposal-optional-chaining" "^7.16.0"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50"
+  integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9"
+    "@babel/plugin-proposal-optional-chaining" "^7.18.9"
+
+"@babel/plugin-proposal-async-generator-functions@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.5.tgz#fd3bd7e0d98404a3d4cbca15a72d533f8c9a2f67"
+  integrity sha512-C/FX+3HNLV6sz7AqbTQqEo1L9/kfrKjxcVtgyBCmvIgOjvuBVUWooDoi7trsLxOzCEo5FccjRvKHkfDsJFZlfA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-remap-async-to-generator" "^7.16.5"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-proposal-async-generator-functions@^7.18.10":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952"
+  integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.18.9"
+    "@babel/helper-plugin-utils" "^7.18.9"
+    "@babel/helper-remap-async-to-generator" "^7.18.9"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.5.tgz#3269f44b89122110f6339806e05d43d84106468a"
+  integrity sha512-pJD3HjgRv83s5dv1sTnDbZOaTjghKEz8KUn1Kbh2eAIRhGuyQ1XSeI4xVXU3UlIEVA3DAyIdxqT1eRn7Wcn55A==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.16.5"
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-proposal-class-properties@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3"
+  integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-proposal-class-static-block@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.5.tgz#df58ab015a7d3b0963aafc8f20792dcd834952a9"
+  integrity sha512-EEFzuLZcm/rNJ8Q5krK+FRKdVkd6FjfzT9tuSZql9sQn64K0hHA2KLJ0DqVot9/iV6+SsuadC5yI39zWnm+nmQ==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.16.5"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-proposal-class-static-block@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020"
+  integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-proposal-decorators@^7.16.4":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.5.tgz#4617420d3685078dfab8f68f859dca1448bbb3c7"
+  integrity sha512-XAiZll5oCdp2Dd2RbXA3LVPlFyIRhhcQy+G34p9ePpl6mjFkbqHAYHovyw2j5mqUrlBf0/+MtOIJ3JGYtz8qaw==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.16.5"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-decorators" "^7.16.5"
+
+"@babel/plugin-proposal-dynamic-import@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.5.tgz#2e0d19d5702db4dcb9bc846200ca02f2e9d60e9e"
+  integrity sha512-P05/SJZTTvHz79LNYTF8ff5xXge0kk5sIIWAypcWgX4BTRUgyHc8wRxJ/Hk+mU0KXldgOOslKaeqnhthcDJCJQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-proposal-dynamic-import@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94"
+  integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-proposal-export-namespace-from@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.5.tgz#3b4dd28378d1da2fea33e97b9f25d1c2f5bf1ac9"
+  integrity sha512-i+sltzEShH1vsVydvNaTRsgvq2vZsfyrd7K7vPLUU/KgS0D5yZMe6uipM0+izminnkKrEfdUnz7CxMRb6oHZWw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-export-namespace-from@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203"
+  integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.5.tgz#1e726930fca139caab6b084d232a9270d9d16f9c"
+  integrity sha512-QQJueTFa0y9E4qHANqIvMsuxM/qcLQmKttBACtPCQzGUEizsXDACGonlPiSwynHfOa3vNw0FPMVvQzbuXwh4SQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b"
+  integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-proposal-logical-assignment-operators@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.5.tgz#df1f2e4b5a0ec07abf061d2c18e53abc237d3ef5"
+  integrity sha512-xqibl7ISO2vjuQM+MzR3rkd0zfNWltk7n9QhaD8ghMmMceVguYrNDt7MikRyj4J4v3QehpnrU8RYLnC7z/gZLA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-logical-assignment-operators@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23"
+  integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.5.tgz#652555bfeeeee2d2104058c6225dc6f75e2d0f07"
+  integrity sha512-YwMsTp/oOviSBhrjwi0vzCUycseCYwoXnLiXIL3YNjHSMBHicGTz7GjVU/IGgz4DtOEXBdCNG72pvCX22ehfqg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1"
+  integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.5.tgz#edcb6379b6cf4570be64c45965d8da7a2debf039"
+  integrity sha512-DvB9l/TcsCRvsIV9v4jxR/jVP45cslTVC0PMVHvaJhhNuhn2Y1SOhCSFlPK777qLB5wb8rVDaNoqMTyOqtY5Iw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-numeric-separator@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75"
+  integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.5.tgz#f30f80dacf7bc1404bf67f99c8d9c01665e830ad"
+  integrity sha512-UEd6KpChoyPhCoE840KRHOlGhEZFutdPDMGj+0I56yuTTOaT51GzmnEl/0uT41fB/vD2nT+Pci2KjezyE3HmUw==
+  dependencies:
+    "@babel/compat-data" "^7.16.4"
+    "@babel/helper-compilation-targets" "^7.16.3"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-transform-parameters" "^7.16.5"
+
+"@babel/plugin-proposal-object-rest-spread@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7"
+  integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==
+  dependencies:
+    "@babel/compat-data" "^7.18.8"
+    "@babel/helper-compilation-targets" "^7.18.9"
+    "@babel/helper-plugin-utils" "^7.18.9"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-transform-parameters" "^7.18.8"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.5.tgz#1a5405765cf589a11a33a1fd75b2baef7d48b74e"
+  integrity sha512-ihCMxY1Iljmx4bWy/PIMJGXN4NS4oUj1MKynwO07kiKms23pNvIn1DMB92DNB2R0EA882sw0VXIelYGdtF7xEQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb"
+  integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.5.tgz#a5fa61056194d5059366c0009cb9a9e66ed75c1f"
+  integrity sha512-kzdHgnaXRonttiTfKYnSVafbWngPPr2qKw9BWYBESl91W54e+9R5pP70LtWxV56g0f05f/SQrwHYkfvbwcdQ/A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-proposal-optional-chaining@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993"
+  integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.5.tgz#2086f7d78c1b0c712d49b5c3fbc2d1ca21a7ee12"
+  integrity sha512-+yFMO4BGT3sgzXo+lrq7orX5mAZt57DwUK6seqII6AcJnJOIhBJ8pzKH47/ql/d426uQ7YhN8DpUFirQzqYSUA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.16.5"
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-proposal-private-methods@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea"
+  integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-proposal-private-property-in-object@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.5.tgz#a42d4b56005db3d405b12841309dbca647e7a21b"
+  integrity sha512-+YGh5Wbw0NH3y/E5YMu6ci5qTDmAEVNoZ3I54aB6nVEOZ5BQ7QJlwKq5pYVucQilMByGn/bvX0af+uNaPRCabA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.0"
+    "@babel/helper-create-class-features-plugin" "^7.16.5"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-proposal-private-property-in-object@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503"
+  integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.18.6"
+    "@babel/helper-create-class-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.16.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.5.tgz#35fe753afa7c572f322bd068ff3377bde0f37080"
+  integrity sha512-s5sKtlKQyFSatt781HQwv1hoM5BQ9qRH30r+dK56OLDsHmV74mzwJNX7R1yMuE7VZKG5O6q/gmOGSAO6ikTudg==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.16.0"
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e"
+  integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+  version "7.8.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+  integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+  integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
+  version "7.12.13"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+  integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+  integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-decorators@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.5.tgz#8d397dee482716a79f1a22314f0b4770a5b67427"
+  integrity sha512-3CbYTXfflvyy8O819uhZcZSMedZG4J8yS/NLTc/8T24M9ke1GssTGvg8VZu3Yn2LU5IyQSv1CmPq0a9JWHXJwg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+  integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+  integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-flow@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.5.tgz#ca0d85e12d71b825b4e9fd1f8d29b64acdf1b46e"
+  integrity sha512-Nrx+7EAJx1BieBQseZa2pavVH2Rp7hADK2xn7coYqVbWRu9C2OFizYcsKo6TrrqJkJl+qF/+Qqzrk/+XDu4GnA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-syntax-import-assertions@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4"
+  integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-syntax-import-meta@^7.8.3":
+  version "7.10.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+  integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+  integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.12.13":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665"
+  integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-syntax-jsx@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.5.tgz#bf255d252f78bc8b77a17cadc37d1aa5b8ed4394"
+  integrity sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+  version "7.10.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+  integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+  integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
+  version "7.10.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+  integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+  integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+  integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+  integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+  integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+  integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-typescript@^7.16.0":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.5.tgz#f47a33e4eee38554f00fb6b2f894fa1f5649b0b3"
+  integrity sha512-/d4//lZ1Vqb4mZ5xTep3dDK888j7BGM/iKqBmndBaoYAFPlPKrGU608VVBz5JeyAb6YQDjRu1UKqj86UhwWVgw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-syntax-typescript@^7.7.2":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285"
+  integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-arrow-functions@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.5.tgz#04c18944dd55397b521d9d7511e791acea7acf2d"
+  integrity sha512-8bTHiiZyMOyfZFULjsCnYOWG059FVMes0iljEHSfARhNgFfpsqE92OrCffv3veSw9rwMkYcFe9bj0ZoXU2IGtQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-arrow-functions@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe"
+  integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-async-to-generator@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.5.tgz#89c9b501e65bb14c4579a6ce9563f859de9b34e4"
+  integrity sha512-TMXgfioJnkXU+XRoj7P2ED7rUm5jbnDWwlCuFVTpQboMfbSya5WrmubNBAMlk7KXvywpo8rd8WuYZkis1o2H8w==
+  dependencies:
+    "@babel/helper-module-imports" "^7.16.0"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-remap-async-to-generator" "^7.16.5"
+
+"@babel/plugin-transform-async-to-generator@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615"
+  integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==
+  dependencies:
+    "@babel/helper-module-imports" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+    "@babel/helper-remap-async-to-generator" "^7.18.6"
+
+"@babel/plugin-transform-block-scoped-functions@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.5.tgz#af087494e1c387574260b7ee9b58cdb5a4e9b0b0"
+  integrity sha512-BxmIyKLjUGksJ99+hJyL/HIxLIGnLKtw772zYDER7UuycDZ+Xvzs98ZQw6NGgM2ss4/hlFAaGiZmMNKvValEjw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-block-scoped-functions@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8"
+  integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-block-scoping@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.5.tgz#b91f254fe53e210eabe4dd0c40f71c0ed253c5e7"
+  integrity sha512-JxjSPNZSiOtmxjX7PBRBeRJTUKTyJ607YUYeT0QJCNdsedOe+/rXITjP08eG8xUpsLfPirgzdCFN+h0w6RI+pQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-block-scoping@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d"
+  integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-classes@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.5.tgz#6acf2ec7adb50fb2f3194dcd2909dbd056dcf216"
+  integrity sha512-DzJ1vYf/7TaCYy57J3SJ9rV+JEuvmlnvvyvYKFbk5u46oQbBvuB9/0w+YsVsxkOv8zVWKpDmUoj4T5ILHoXevA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.0"
+    "@babel/helper-environment-visitor" "^7.16.5"
+    "@babel/helper-function-name" "^7.16.0"
+    "@babel/helper-optimise-call-expression" "^7.16.0"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-replace-supers" "^7.16.5"
+    "@babel/helper-split-export-declaration" "^7.16.0"
+    globals "^11.1.0"
+
+"@babel/plugin-transform-classes@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da"
+  integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.18.6"
+    "@babel/helper-environment-visitor" "^7.18.9"
+    "@babel/helper-function-name" "^7.18.9"
+    "@babel/helper-optimise-call-expression" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.9"
+    "@babel/helper-replace-supers" "^7.18.9"
+    "@babel/helper-split-export-declaration" "^7.18.6"
+    globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.5.tgz#2af91ebf0cceccfcc701281ada7cfba40a9b322a"
+  integrity sha512-n1+O7xtU5lSLraRzX88CNcpl7vtGdPakKzww74bVwpAIRgz9JVLJJpOLb0uYqcOaXVM0TL6X0RVeIJGD2CnCkg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-computed-properties@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e"
+  integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-destructuring@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.5.tgz#89ebc87499ac4a81b897af53bb5d3eed261bd568"
+  integrity sha512-GuRVAsjq+c9YPK6NeTkRLWyQskDC099XkBSVO+6QzbnOnH2d/4mBVXYStaPrZD3dFRfg00I6BFJ9Atsjfs8mlg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-destructuring@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292"
+  integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-dotall-regex@^7.16.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.5.tgz#b40739c00b6686820653536d6d143e311de67936"
+  integrity sha512-iQiEMt8Q4/5aRGHpGVK2Zc7a6mx7qEAO7qehgSug3SDImnuMzgmm/wtJALXaz25zUj1PmnNHtShjFgk4PDx4nw==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.16.0"
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-dotall-regex@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8"
+  integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-duplicate-keys@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.5.tgz#2450f2742325412b746d7d005227f5e8973b512a"
+  integrity sha512-81tijpDg2a6I1Yhj4aWY1l3O1J4Cg/Pd7LfvuaH2VVInAkXtzibz9+zSPdUM1WvuUi128ksstAP0hM5w48vQgg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-duplicate-keys@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e"
+  integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-exponentiation-operator@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.5.tgz#36e261fa1ab643cfaf30eeab38e00ed1a76081e2"
+  integrity sha512-12rba2HwemQPa7BLIKCzm1pT2/RuQHtSFHdNl41cFiC6oi4tcrp7gjB07pxQvFpcADojQywSjblQth6gJyE6CA==
+  dependencies:
+    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.5"
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-exponentiation-operator@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd"
+  integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==
+  dependencies:
+    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-flow-strip-types@^7.16.0":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.5.tgz#8ceb65ab6ca4a349e04d1887e2470a5bfe8f046f"
+  integrity sha512-skE02E/MptkZdBS4HwoRhjWXqeKQj0BWKEAPfPC+8R4/f6bjQqQ9Nftv/+HkxWwnVxh/E2NV9TNfzLN5H/oiBw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-flow" "^7.16.5"
+
+"@babel/plugin-transform-for-of@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.5.tgz#9b544059c6ca11d565457c0ff1f08e13ce225261"
+  integrity sha512-+DpCAJFPAvViR17PIMi9x2AE34dll5wNlXO43wagAX2YcRGgEVHCNFC4azG85b4YyyFarvkc/iD5NPrz4Oneqw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-for-of@^7.18.8":
+  version "7.18.8"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1"
+  integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-function-name@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.5.tgz#6896ebb6a5538a75d6a4086a277752f655a7bd15"
+  integrity sha512-Fuec/KPSpVLbGo6z1RPw4EE1X+z9gZk1uQmnYy7v4xr4TO9p41v1AoUuXEtyqAI7H+xNJYSICzRqZBhDEkd3kQ==
+  dependencies:
+    "@babel/helper-function-name" "^7.16.0"
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-function-name@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0"
+  integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.18.9"
+    "@babel/helper-function-name" "^7.18.9"
+    "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-literals@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.5.tgz#af392b90e3edb2bd6dc316844cbfd6b9e009d320"
+  integrity sha512-B1j9C/IfvshnPcklsc93AVLTrNVa69iSqztylZH6qnmiAsDDOmmjEYqOm3Ts2lGSgTSywnBNiqC949VdD0/gfw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-literals@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc"
+  integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-member-expression-literals@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.5.tgz#4bd6ecdc11932361631097b779ca5c7570146dd5"
+  integrity sha512-d57i3vPHWgIde/9Y8W/xSFUndhvhZN5Wu2TjRrN1MVz5KzdUihKnfDVlfP1U7mS5DNj/WHHhaE4/tTi4hIyHwQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-member-expression-literals@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e"
+  integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-modules-amd@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.5.tgz#92c0a3e83f642cb7e75fada9ab497c12c2616527"
+  integrity sha512-oHI15S/hdJuSCfnwIz+4lm6wu/wBn7oJ8+QrkzPPwSFGXk8kgdI/AIKcbR/XnD1nQVMg/i6eNaXpszbGuwYDRQ==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.16.5"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-amd@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21"
+  integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.5.tgz#4ee03b089536f076b2773196529d27c32b9d7bde"
+  integrity sha512-ABhUkxvoQyqhCWyb8xXtfwqNMJD7tx+irIRnUh6lmyFud7Jln1WzONXKlax1fg/ey178EXbs4bSGNd6PngO+SQ==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.16.5"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-simple-access" "^7.16.0"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883"
+  integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+    "@babel/helper-simple-access" "^7.18.6"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.5.tgz#07078ba2e3cc94fbdd06836e355c246e98ad006b"
+  integrity sha512-53gmLdScNN28XpjEVIm7LbWnD/b/TpbwKbLk6KV4KqC9WyU6rq1jnNmVG6UgAdQZVVGZVoik3DqHNxk4/EvrjA==
+  dependencies:
+    "@babel/helper-hoist-variables" "^7.16.0"
+    "@babel/helper-module-transforms" "^7.16.5"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-validator-identifier" "^7.15.7"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06"
+  integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==
+  dependencies:
+    "@babel/helper-hoist-variables" "^7.18.6"
+    "@babel/helper-module-transforms" "^7.18.9"
+    "@babel/helper-plugin-utils" "^7.18.9"
+    "@babel/helper-validator-identifier" "^7.18.6"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-umd@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.5.tgz#caa9c53d636fb4e3c99fd35a4c9ba5e5cd7e002e"
+  integrity sha512-qTFnpxHMoenNHkS3VoWRdwrcJ3FhX567GvDA3hRZKF0Dj8Fmg0UzySZp3AP2mShl/bzcywb/UWAMQIjA1bhXvw==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.16.5"
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-modules-umd@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9"
+  integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.5.tgz#4afd8cdee377ce3568f4e8a9ee67539b69886a3c"
+  integrity sha512-/wqGDgvFUeKELW6ex6QB7dLVRkd5ehjw34tpXu1nhKC0sFfmaLabIswnpf8JgDyV2NeDmZiwoOb0rAmxciNfjA==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.16.0"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d"
+  integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-new-target@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.5.tgz#759ea9d6fbbc20796056a5d89d13977626384416"
+  integrity sha512-ZaIrnXF08ZC8jnKR4/5g7YakGVL6go6V9ql6Jl3ecO8PQaQqFE74CuM384kezju7Z9nGCCA20BqZaR1tJ/WvHg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-new-target@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8"
+  integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-object-super@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.5.tgz#8ccd9a1bcd3e7732ff8aa1702d067d8cd70ce380"
+  integrity sha512-tded+yZEXuxt9Jdtkc1RraW1zMF/GalVxaVVxh41IYwirdRgyAxxxCKZ9XB7LxZqmsjfjALxupNE1MIz9KH+Zg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-replace-supers" "^7.16.5"
+
+"@babel/plugin-transform-object-super@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c"
+  integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+    "@babel/helper-replace-supers" "^7.18.6"
+
+"@babel/plugin-transform-parameters@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.5.tgz#4fc74b18a89638bd90aeec44a11793ecbe031dde"
+  integrity sha512-B3O6AL5oPop1jAVg8CV+haeUte9oFuY85zu0jwnRNZZi3tVAbJriu5tag/oaO2kGaQM/7q7aGPBlTI5/sr9enA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-parameters@^7.18.8":
+  version "7.18.8"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a"
+  integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-property-literals@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.5.tgz#58f1465a7202a2bb2e6b003905212dd7a79abe3f"
+  integrity sha512-+IRcVW71VdF9pEH/2R/Apab4a19LVvdVsr/gEeotH00vSDVlKD+XgfSIw+cgGWsjDB/ziqGv/pGoQZBIiQVXHg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-property-literals@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3"
+  integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-react-constant-elements@^7.12.1":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.5.tgz#4b01ea6b14bd4e55ca92bb2d6c28dd9957118924"
+  integrity sha512-fdc1s5npHMZ9A+w9bYbrZu4499WyYPVaTTsRO8bU0GJcMuK4ejIX4lyjnpvi+YGLK/EhFQxWszqylO0vaMciFw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.5.tgz#d5e910327d7931fb9f8f9b6c6999473ceae5a286"
+  integrity sha512-dHYCOnzSsXFz8UcdNQIHGvg94qPL/teF7CCiCEMRxmA1G2p5Mq4JnKVowCDxYfiQ9D7RstaAp9kwaSI+sXbnhw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-react-jsx-development@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.5.tgz#87da9204c275ffb57f45d192a1120cf104bc1e86"
+  integrity sha512-uQSLacMZSGLCxOw20dzo1dmLlKkd+DsayoV54q3MHXhbqgPzoiGerZQgNPl/Ro8/OcXV2ugfnkx+rxdS0sN5Uw==
+  dependencies:
+    "@babel/plugin-transform-react-jsx" "^7.16.5"
+
+"@babel/plugin-transform-react-jsx@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.5.tgz#5298aedc5f81e02b1cb702e597e8d6a346675765"
+  integrity sha512-+arLIz1d7kmwX0fKxTxbnoeG85ONSnLpvdODa4P3pc1sS7CV1hfmtYWufkW/oYsPnkDrEeQFxhUWcFnrXW7jQQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.0"
+    "@babel/helper-module-imports" "^7.16.0"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/plugin-syntax-jsx" "^7.16.5"
+    "@babel/types" "^7.16.0"
+
+"@babel/plugin-transform-react-pure-annotations@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.5.tgz#6535d0fe67c7a3a26c5105f92c8cbcbe844cd94b"
+  integrity sha512-0nYU30hCxnCVCbRjSy9ahlhWZ2Sn6khbY4FqR91W+2RbSqkWEbVu2gXh45EqNy4Bq7sRU+H4i0/6YKwOSzh16A==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.0"
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-regenerator@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.5.tgz#704cc6d8dd3dd4758267621ab7b36375238cef13"
+  integrity sha512-2z+it2eVWU8TtQQRauvGUqZwLy4+7rTfo6wO4npr+fvvN1SW30ZF3O/ZRCNmTuu4F5MIP8OJhXAhRV5QMJOuYg==
+  dependencies:
+    regenerator-transform "^0.14.2"
+
+"@babel/plugin-transform-regenerator@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73"
+  integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+    regenerator-transform "^0.15.0"
+
+"@babel/plugin-transform-reserved-words@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.5.tgz#db95e98799675e193dc2b47d3e72a7c0651d0c30"
+  integrity sha512-aIB16u8lNcf7drkhXJRoggOxSTUAuihTSTfAcpynowGJOZiGf+Yvi7RuTwFzVYSYPmWyARsPqUGoZWWWxLiknw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-reserved-words@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a"
+  integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-runtime@^7.16.4":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.5.tgz#0cc3f01d69f299d5a42cd9ec43b92ea7a777b8db"
+  integrity sha512-gxpfS8XQWDbQ8oP5NcmpXxtEgCJkbO+W9VhZlOhr0xPyVaRjAQPOv7ZDj9fg0d5s9+NiVvMCE6gbkEkcsxwGRw==
+  dependencies:
+    "@babel/helper-module-imports" "^7.16.0"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    babel-plugin-polyfill-corejs2 "^0.3.0"
+    babel-plugin-polyfill-corejs3 "^0.4.0"
+    babel-plugin-polyfill-regenerator "^0.3.0"
+    semver "^6.3.0"
+
+"@babel/plugin-transform-shorthand-properties@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.5.tgz#ccb60b1a23b799f5b9a14d97c5bc81025ffd96d7"
+  integrity sha512-ZbuWVcY+MAXJuuW7qDoCwoxDUNClfZxoo7/4swVbOW1s/qYLOMHlm9YRWMsxMFuLs44eXsv4op1vAaBaBaDMVg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-shorthand-properties@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9"
+  integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-spread@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.5.tgz#912b06cff482c233025d3e69cf56d3e8fa166c29"
+  integrity sha512-5d6l/cnG7Lw4tGHEoga4xSkYp1euP7LAtrah1h1PgJ3JY7yNsjybsxQAnVK4JbtReZ/8z6ASVmd3QhYYKLaKZw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+
+"@babel/plugin-transform-spread@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664"
+  integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9"
+
+"@babel/plugin-transform-sticky-regex@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.5.tgz#593579bb2b5a8adfbe02cb43823275d9098f75f9"
+  integrity sha512-usYsuO1ID2LXxzuUxifgWtJemP7wL2uZtyrTVM4PKqsmJycdS4U4mGovL5xXkfUheds10Dd2PjoQLXw6zCsCbg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-sticky-regex@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc"
+  integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-template-literals@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.5.tgz#343651385fd9923f5aa2275ca352c5d9183e1773"
+  integrity sha512-gnyKy9RyFhkovex4BjKWL3BVYzUDG6zC0gba7VMLbQoDuqMfJ1SDXs8k/XK41Mmt1Hyp4qNAvGFb9hKzdCqBRQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-template-literals@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e"
+  integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-typeof-symbol@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.5.tgz#a1d1bf2c71573fe30965d0e4cd6a3291202e20ed"
+  integrity sha512-ldxCkW180qbrvyCVDzAUZqB0TAeF8W/vGJoRcaf75awm6By+PxfJKvuqVAnq8N9wz5Xa6mSpM19OfVKKVmGHSQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-typeof-symbol@^7.18.9":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0"
+  integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-typescript@^7.16.1":
+  version "7.16.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz#cc0670b2822b0338355bc1b3d2246a42b8166409"
+  integrity sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.16.0"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-typescript" "^7.16.0"
+
+"@babel/plugin-transform-unicode-escapes@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.5.tgz#80507c225af49b4f4ee647e2a0ce53d2eeff9e85"
+  integrity sha512-shiCBHTIIChGLdyojsKQjoAyB8MBwat25lKM7MJjbe1hE0bgIppD+LX9afr41lLHOhqceqeWl4FkLp+Bgn9o1Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-unicode-escapes@^7.18.10":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246"
+  integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-unicode-regex@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.5.tgz#ac84d6a1def947d71ffb832426aa53b83d7ed49e"
+  integrity sha512-GTJ4IW012tiPEMMubd7sD07iU9O/LOo8Q/oU4xNhcaq0Xn8+6TcUQaHtC8YxySo1T+ErQ8RaWogIEeFhKGNPzw==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.16.0"
+    "@babel/helper-plugin-utils" "^7.16.5"
+
+"@babel/plugin-transform-unicode-regex@^7.18.6":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca"
+  integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+    "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/preset-env@^7.11.0":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4"
+  integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==
+  dependencies:
+    "@babel/compat-data" "^7.18.8"
+    "@babel/helper-compilation-targets" "^7.18.9"
+    "@babel/helper-plugin-utils" "^7.18.9"
+    "@babel/helper-validator-option" "^7.18.6"
+    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6"
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9"
+    "@babel/plugin-proposal-async-generator-functions" "^7.18.10"
+    "@babel/plugin-proposal-class-properties" "^7.18.6"
+    "@babel/plugin-proposal-class-static-block" "^7.18.6"
+    "@babel/plugin-proposal-dynamic-import" "^7.18.6"
+    "@babel/plugin-proposal-export-namespace-from" "^7.18.9"
+    "@babel/plugin-proposal-json-strings" "^7.18.6"
+    "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9"
+    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6"
+    "@babel/plugin-proposal-numeric-separator" "^7.18.6"
+    "@babel/plugin-proposal-object-rest-spread" "^7.18.9"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.18.6"
+    "@babel/plugin-proposal-optional-chaining" "^7.18.9"
+    "@babel/plugin-proposal-private-methods" "^7.18.6"
+    "@babel/plugin-proposal-private-property-in-object" "^7.18.6"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.18.6"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-class-properties" "^7.12.13"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+    "@babel/plugin-syntax-import-assertions" "^7.18.6"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+    "@babel/plugin-syntax-top-level-await" "^7.14.5"
+    "@babel/plugin-transform-arrow-functions" "^7.18.6"
+    "@babel/plugin-transform-async-to-generator" "^7.18.6"
+    "@babel/plugin-transform-block-scoped-functions" "^7.18.6"
+    "@babel/plugin-transform-block-scoping" "^7.18.9"
+    "@babel/plugin-transform-classes" "^7.18.9"
+    "@babel/plugin-transform-computed-properties" "^7.18.9"
+    "@babel/plugin-transform-destructuring" "^7.18.9"
+    "@babel/plugin-transform-dotall-regex" "^7.18.6"
+    "@babel/plugin-transform-duplicate-keys" "^7.18.9"
+    "@babel/plugin-transform-exponentiation-operator" "^7.18.6"
+    "@babel/plugin-transform-for-of" "^7.18.8"
+    "@babel/plugin-transform-function-name" "^7.18.9"
+    "@babel/plugin-transform-literals" "^7.18.9"
+    "@babel/plugin-transform-member-expression-literals" "^7.18.6"
+    "@babel/plugin-transform-modules-amd" "^7.18.6"
+    "@babel/plugin-transform-modules-commonjs" "^7.18.6"
+    "@babel/plugin-transform-modules-systemjs" "^7.18.9"
+    "@babel/plugin-transform-modules-umd" "^7.18.6"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6"
+    "@babel/plugin-transform-new-target" "^7.18.6"
+    "@babel/plugin-transform-object-super" "^7.18.6"
+    "@babel/plugin-transform-parameters" "^7.18.8"
+    "@babel/plugin-transform-property-literals" "^7.18.6"
+    "@babel/plugin-transform-regenerator" "^7.18.6"
+    "@babel/plugin-transform-reserved-words" "^7.18.6"
+    "@babel/plugin-transform-shorthand-properties" "^7.18.6"
+    "@babel/plugin-transform-spread" "^7.18.9"
+    "@babel/plugin-transform-sticky-regex" "^7.18.6"
+    "@babel/plugin-transform-template-literals" "^7.18.9"
+    "@babel/plugin-transform-typeof-symbol" "^7.18.9"
+    "@babel/plugin-transform-unicode-escapes" "^7.18.10"
+    "@babel/plugin-transform-unicode-regex" "^7.18.6"
+    "@babel/preset-modules" "^0.1.5"
+    "@babel/types" "^7.18.10"
+    babel-plugin-polyfill-corejs2 "^0.3.2"
+    babel-plugin-polyfill-corejs3 "^0.5.3"
+    babel-plugin-polyfill-regenerator "^0.4.0"
+    core-js-compat "^3.22.1"
+    semver "^6.3.0"
+
+"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.5.tgz#2e94d922f4a890979af04ffeb6a6b4e44ba90847"
+  integrity sha512-MiJJW5pwsktG61NDxpZ4oJ1CKxM1ncam9bzRtx9g40/WkLRkxFP6mhpkYV0/DxcciqoiHicx291+eUQrXb/SfQ==
+  dependencies:
+    "@babel/compat-data" "^7.16.4"
+    "@babel/helper-compilation-targets" "^7.16.3"
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-validator-option" "^7.14.5"
+    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.2"
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0"
+    "@babel/plugin-proposal-async-generator-functions" "^7.16.5"
+    "@babel/plugin-proposal-class-properties" "^7.16.5"
+    "@babel/plugin-proposal-class-static-block" "^7.16.5"
+    "@babel/plugin-proposal-dynamic-import" "^7.16.5"
+    "@babel/plugin-proposal-export-namespace-from" "^7.16.5"
+    "@babel/plugin-proposal-json-strings" "^7.16.5"
+    "@babel/plugin-proposal-logical-assignment-operators" "^7.16.5"
+    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.5"
+    "@babel/plugin-proposal-numeric-separator" "^7.16.5"
+    "@babel/plugin-proposal-object-rest-spread" "^7.16.5"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.16.5"
+    "@babel/plugin-proposal-optional-chaining" "^7.16.5"
+    "@babel/plugin-proposal-private-methods" "^7.16.5"
+    "@babel/plugin-proposal-private-property-in-object" "^7.16.5"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.16.5"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-class-properties" "^7.12.13"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+    "@babel/plugin-syntax-top-level-await" "^7.14.5"
+    "@babel/plugin-transform-arrow-functions" "^7.16.5"
+    "@babel/plugin-transform-async-to-generator" "^7.16.5"
+    "@babel/plugin-transform-block-scoped-functions" "^7.16.5"
+    "@babel/plugin-transform-block-scoping" "^7.16.5"
+    "@babel/plugin-transform-classes" "^7.16.5"
+    "@babel/plugin-transform-computed-properties" "^7.16.5"
+    "@babel/plugin-transform-destructuring" "^7.16.5"
+    "@babel/plugin-transform-dotall-regex" "^7.16.5"
+    "@babel/plugin-transform-duplicate-keys" "^7.16.5"
+    "@babel/plugin-transform-exponentiation-operator" "^7.16.5"
+    "@babel/plugin-transform-for-of" "^7.16.5"
+    "@babel/plugin-transform-function-name" "^7.16.5"
+    "@babel/plugin-transform-literals" "^7.16.5"
+    "@babel/plugin-transform-member-expression-literals" "^7.16.5"
+    "@babel/plugin-transform-modules-amd" "^7.16.5"
+    "@babel/plugin-transform-modules-commonjs" "^7.16.5"
+    "@babel/plugin-transform-modules-systemjs" "^7.16.5"
+    "@babel/plugin-transform-modules-umd" "^7.16.5"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.5"
+    "@babel/plugin-transform-new-target" "^7.16.5"
+    "@babel/plugin-transform-object-super" "^7.16.5"
+    "@babel/plugin-transform-parameters" "^7.16.5"
+    "@babel/plugin-transform-property-literals" "^7.16.5"
+    "@babel/plugin-transform-regenerator" "^7.16.5"
+    "@babel/plugin-transform-reserved-words" "^7.16.5"
+    "@babel/plugin-transform-shorthand-properties" "^7.16.5"
+    "@babel/plugin-transform-spread" "^7.16.5"
+    "@babel/plugin-transform-sticky-regex" "^7.16.5"
+    "@babel/plugin-transform-template-literals" "^7.16.5"
+    "@babel/plugin-transform-typeof-symbol" "^7.16.5"
+    "@babel/plugin-transform-unicode-escapes" "^7.16.5"
+    "@babel/plugin-transform-unicode-regex" "^7.16.5"
+    "@babel/preset-modules" "^0.1.5"
+    "@babel/types" "^7.16.0"
+    babel-plugin-polyfill-corejs2 "^0.3.0"
+    babel-plugin-polyfill-corejs3 "^0.4.0"
+    babel-plugin-polyfill-regenerator "^0.3.0"
+    core-js-compat "^3.19.1"
+    semver "^6.3.0"
+
+"@babel/preset-modules@^0.1.5":
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
+  integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+    "@babel/plugin-transform-dotall-regex" "^7.4.4"
+    "@babel/types" "^7.4.4"
+    esutils "^2.0.2"
+
+"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.5.tgz#09df3b7a6522cb3e6682dc89b4dfebb97d22031b"
+  integrity sha512-3kzUOQeaxY/2vhPDS7CX/KGEGu/1bOYGvdRDJ2U5yjEz5o5jmIeTPLoiQBPGjfhPascLuW5OlMiPzwOOuB6txg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-validator-option" "^7.14.5"
+    "@babel/plugin-transform-react-display-name" "^7.16.5"
+    "@babel/plugin-transform-react-jsx" "^7.16.5"
+    "@babel/plugin-transform-react-jsx-development" "^7.16.5"
+    "@babel/plugin-transform-react-pure-annotations" "^7.16.5"
+
+"@babel/preset-typescript@^7.16.0":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.5.tgz#b86a5b0ae739ba741347d2f58c52f52e63cf1ba1"
+  integrity sha512-lmAWRoJ9iOSvs3DqOndQpj8XqXkzaiQs50VG/zESiI9D3eoZhGriU675xNCr0UwvsuXrhMAGvyk1w+EVWF3u8Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.5"
+    "@babel/helper-validator-option" "^7.14.5"
+    "@babel/plugin-transform-typescript" "^7.16.1"
+
+"@babel/runtime-corejs3@^7.10.2":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.5.tgz#9057d879720c136193f0440bc400088212a74894"
+  integrity sha512-F1pMwvTiUNSAM8mc45kccMQxj31x3y3P+tA/X8hKNWp3/hUsxdGxZ3D3H8JIkxtfA8qGkaBTKvcmvStaYseAFw==
+  dependencies:
+    core-js-pure "^3.19.0"
+    regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
+  version "7.18.9"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a"
+  integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==
+  dependencies:
+    regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.13.10", "@babel/runtime@^7.16.7", "@babel/runtime@^7.7.2":
+  version "7.17.0"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.0.tgz#b8d142fc0f7664fb3d9b5833fd40dcbab89276c0"
+  integrity sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ==
+  dependencies:
+    regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.6.2":
+  version "7.21.0"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
+  integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==
+  dependencies:
+    regenerator-runtime "^0.13.11"
+
+"@babel/template@^7.16.0", "@babel/template@^7.3.3":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6"
+  integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==
+  dependencies:
+    "@babel/code-frame" "^7.16.0"
+    "@babel/parser" "^7.16.0"
+    "@babel/types" "^7.16.0"
+
+"@babel/template@^7.18.10", "@babel/template@^7.18.6":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71"
+  integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==
+  dependencies:
+    "@babel/code-frame" "^7.18.6"
+    "@babel/parser" "^7.18.10"
+    "@babel/types" "^7.18.10"
+
+"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.5":
+  version "7.16.5"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.5.tgz#d7d400a8229c714a59b87624fc67b0f1fbd4b2b3"
+  integrity sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==
+  dependencies:
+    "@babel/code-frame" "^7.16.0"
+    "@babel/generator" "^7.16.5"
+    "@babel/helper-environment-visitor" "^7.16.5"
+    "@babel/helper-function-name" "^7.16.0"
+    "@babel/helper-hoist-variables" "^7.16.0"
+    "@babel/helper-split-export-declaration" "^7.16.0"
+    "@babel/parser" "^7.16.5"
+    "@babel/types" "^7.16.0"
+    debug "^4.1.0"
+    globals "^11.1.0"
+
+"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.10.tgz#37ad97d1cb00efa869b91dd5d1950f8a6cf0cb08"
+  integrity sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==
+  dependencies:
+    "@babel/code-frame" "^7.18.6"
+    "@babel/generator" "^7.18.10"
+    "@babel/helper-environment-visitor" "^7.18.9"
+    "@babel/helper-function-name" "^7.18.9"
+    "@babel/helper-hoist-variables" "^7.18.6"
+    "@babel/helper-split-export-declaration" "^7.18.6"
+    "@babel/parser" "^7.18.10"
+    "@babel/types" "^7.18.10"
+    debug "^4.1.0"
+    globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba"
+  integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.15.7"
+    to-fast-properties "^2.0.0"
+
+"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9":
+  version "7.18.10"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6"
+  integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==
+  dependencies:
+    "@babel/helper-string-parser" "^7.18.10"
+    "@babel/helper-validator-identifier" "^7.18.6"
+    to-fast-properties "^2.0.0"
+
+"@bcoe/v8-coverage@^0.2.3":
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+  integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
+"@csstools/normalize.css@*":
+  version "12.0.0"
+  resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4"
+  integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==
+
+"@csstools/postcss-cascade-layers@^1.0.4":
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz#f16f2c4396ace855541e1aa693f5f27ec972e6ad"
+  integrity sha512-Id/9wBT7FkgFzdEpiEWrsVd4ltDxN0rI0QS0SChbeQiSuux3z21SJCRLu6h2cvCEUmaRi+VD0mHFj+GJD4GFnw==
+  dependencies:
+    "@csstools/selector-specificity" "^2.0.2"
+    postcss-selector-parser "^6.0.10"
+
+"@csstools/postcss-color-function@^1.1.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b"
+  integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==
+  dependencies:
+    "@csstools/postcss-progressive-custom-properties" "^1.1.0"
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-font-format-keywords@^1.0.0":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a"
+  integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-hwb-function@^1.0.1":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b"
+  integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-ic-unit@^1.0.0":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58"
+  integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==
+  dependencies:
+    "@csstools/postcss-progressive-custom-properties" "^1.1.0"
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-is-pseudo-class@^2.0.6":
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1"
+  integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==
+  dependencies:
+    "@csstools/selector-specificity" "^2.0.0"
+    postcss-selector-parser "^6.0.10"
+
+"@csstools/postcss-normalize-display-values@^1.0.0":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3"
+  integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-oklab-function@^1.1.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844"
+  integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==
+  dependencies:
+    "@csstools/postcss-progressive-custom-properties" "^1.1.0"
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0":
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa"
+  integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-stepped-value-functions@^1.0.0":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4"
+  integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-trigonometric-functions@^1.0.1":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756"
+  integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-unset-value@^1.0.1":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77"
+  integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==
+
+"@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2":
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36"
+  integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==
+
+"@emotion/babel-plugin@^11.3.0":
+  version "11.7.2"
+  resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.7.2.tgz#fec75f38a6ab5b304b0601c74e2a5e77c95e5fa0"
+  integrity sha512-6mGSCWi9UzXut/ZAN6lGFu33wGR3SJisNl3c0tvlmb8XChH1b2SUvxvnOh7hvLpqyRdHHU9AiazV3Cwbk5SXKQ==
+  dependencies:
+    "@babel/helper-module-imports" "^7.12.13"
+    "@babel/plugin-syntax-jsx" "^7.12.13"
+    "@babel/runtime" "^7.13.10"
+    "@emotion/hash" "^0.8.0"
+    "@emotion/memoize" "^0.7.5"
+    "@emotion/serialize" "^1.0.2"
+    babel-plugin-macros "^2.6.1"
+    convert-source-map "^1.5.0"
+    escape-string-regexp "^4.0.0"
+    find-root "^1.1.0"
+    source-map "^0.5.7"
+    stylis "4.0.13"
+
+"@emotion/cache@^11.7.1":
+  version "11.7.1"
+  resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539"
+  integrity sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==
+  dependencies:
+    "@emotion/memoize" "^0.7.4"
+    "@emotion/sheet" "^1.1.0"
+    "@emotion/utils" "^1.0.0"
+    "@emotion/weak-memoize" "^0.2.5"
+    stylis "4.0.13"
+
+"@emotion/hash@^0.8.0":
+  version "0.8.0"
+  resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
+  integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+
+"@emotion/is-prop-valid@^1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.1.tgz#cbd843d409dfaad90f9404e7c0404c55eae8c134"
+  integrity sha512-bW1Tos67CZkOURLc0OalnfxtSXQJMrAMV0jZTVGJUPSOd4qgjF3+tTD5CwJM13PHA8cltGW1WGbbvV9NpvUZPw==
+  dependencies:
+    "@emotion/memoize" "^0.7.4"
+
+"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5":
+  version "0.7.5"
+  resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
+  integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==
+
+"@emotion/react@^11.7.1":
+  version "11.7.1"
+  resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.7.1.tgz#3f800ce9b20317c13e77b8489ac4a0b922b2fe07"
+  integrity sha512-DV2Xe3yhkF1yT4uAUoJcYL1AmrnO5SVsdfvu+fBuS7IbByDeTVx9+wFmvx9Idzv7/78+9Mgx2Hcmr7Fex3tIyw==
+  dependencies:
+    "@babel/runtime" "^7.13.10"
+    "@emotion/cache" "^11.7.1"
+    "@emotion/serialize" "^1.0.2"
+    "@emotion/sheet" "^1.1.0"
+    "@emotion/utils" "^1.0.0"
+    "@emotion/weak-memoize" "^0.2.5"
+    hoist-non-react-statics "^3.3.1"
+
+"@emotion/serialize@^1.0.2":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.2.tgz#77cb21a0571c9f68eb66087754a65fa97bfcd965"
+  integrity sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==
+  dependencies:
+    "@emotion/hash" "^0.8.0"
+    "@emotion/memoize" "^0.7.4"
+    "@emotion/unitless" "^0.7.5"
+    "@emotion/utils" "^1.0.0"
+    csstype "^3.0.2"
+
+"@emotion/sheet@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2"
+  integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==
+
+"@emotion/styled@^11.6.0":
+  version "11.6.0"
+  resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.6.0.tgz#9230d1a7bcb2ebf83c6a579f4c80e0664132d81d"
+  integrity sha512-mxVtVyIOTmCAkFbwIp+nCjTXJNgcz4VWkOYQro87jE2QBTydnkiYusMrRGFtzuruiGK4dDaNORk4gH049iiQuw==
+  dependencies:
+    "@babel/runtime" "^7.13.10"
+    "@emotion/babel-plugin" "^11.3.0"
+    "@emotion/is-prop-valid" "^1.1.1"
+    "@emotion/serialize" "^1.0.2"
+    "@emotion/utils" "^1.0.0"
+
+"@emotion/unitless@^0.7.5":
+  version "0.7.5"
+  resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+  integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
+"@emotion/utils@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.0.0.tgz#abe06a83160b10570816c913990245813a2fd6af"
+  integrity sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==
+
+"@emotion/weak-memoize@^0.2.5":
+  version "0.2.5"
+  resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
+  integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
+
+"@eslint/eslintrc@^1.4.1":
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e"
+  integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==
+  dependencies:
+    ajv "^6.12.4"
+    debug "^4.3.2"
+    espree "^9.4.0"
+    globals "^13.19.0"
+    ignore "^5.2.0"
+    import-fresh "^3.2.1"
+    js-yaml "^4.1.0"
+    minimatch "^3.1.2"
+    strip-json-comments "^3.1.1"
+
+"@humanwhocodes/config-array@^0.11.8":
+  version "0.11.8"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9"
+  integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==
+  dependencies:
+    "@humanwhocodes/object-schema" "^1.2.1"
+    debug "^4.1.1"
+    minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+  integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
+  integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+  integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+  dependencies:
+    camelcase "^5.3.1"
+    find-up "^4.1.0"
+    get-package-type "^0.1.0"
+    js-yaml "^3.13.1"
+    resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+  integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba"
+  integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    jest-message-util "^27.5.1"
+    jest-util "^27.5.1"
+    slash "^3.0.0"
+
+"@jest/console@^28.1.3":
+  version "28.1.3"
+  resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df"
+  integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==
+  dependencies:
+    "@jest/types" "^28.1.3"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    jest-message-util "^28.1.3"
+    jest-util "^28.1.3"
+    slash "^3.0.0"
+
+"@jest/core@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626"
+  integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==
+  dependencies:
+    "@jest/console" "^27.5.1"
+    "@jest/reporters" "^27.5.1"
+    "@jest/test-result" "^27.5.1"
+    "@jest/transform" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    ansi-escapes "^4.2.1"
+    chalk "^4.0.0"
+    emittery "^0.8.1"
+    exit "^0.1.2"
+    graceful-fs "^4.2.9"
+    jest-changed-files "^27.5.1"
+    jest-config "^27.5.1"
+    jest-haste-map "^27.5.1"
+    jest-message-util "^27.5.1"
+    jest-regex-util "^27.5.1"
+    jest-resolve "^27.5.1"
+    jest-resolve-dependencies "^27.5.1"
+    jest-runner "^27.5.1"
+    jest-runtime "^27.5.1"
+    jest-snapshot "^27.5.1"
+    jest-util "^27.5.1"
+    jest-validate "^27.5.1"
+    jest-watcher "^27.5.1"
+    micromatch "^4.0.4"
+    rimraf "^3.0.0"
+    slash "^3.0.0"
+    strip-ansi "^6.0.0"
+
+"@jest/environment@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74"
+  integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==
+  dependencies:
+    "@jest/fake-timers" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    jest-mock "^27.5.1"
+
+"@jest/fake-timers@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74"
+  integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    "@sinonjs/fake-timers" "^8.0.1"
+    "@types/node" "*"
+    jest-message-util "^27.5.1"
+    jest-mock "^27.5.1"
+    jest-util "^27.5.1"
+
+"@jest/globals@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b"
+  integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==
+  dependencies:
+    "@jest/environment" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    expect "^27.5.1"
+
+"@jest/reporters@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04"
+  integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==
+  dependencies:
+    "@bcoe/v8-coverage" "^0.2.3"
+    "@jest/console" "^27.5.1"
+    "@jest/test-result" "^27.5.1"
+    "@jest/transform" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    collect-v8-coverage "^1.0.0"
+    exit "^0.1.2"
+    glob "^7.1.2"
+    graceful-fs "^4.2.9"
+    istanbul-lib-coverage "^3.0.0"
+    istanbul-lib-instrument "^5.1.0"
+    istanbul-lib-report "^3.0.0"
+    istanbul-lib-source-maps "^4.0.0"
+    istanbul-reports "^3.1.3"
+    jest-haste-map "^27.5.1"
+    jest-resolve "^27.5.1"
+    jest-util "^27.5.1"
+    jest-worker "^27.5.1"
+    slash "^3.0.0"
+    source-map "^0.6.0"
+    string-length "^4.0.1"
+    terminal-link "^2.0.0"
+    v8-to-istanbul "^8.1.0"
+
+"@jest/schemas@^28.1.3":
+  version "28.1.3"
+  resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905"
+  integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==
+  dependencies:
+    "@sinclair/typebox" "^0.24.1"
+
+"@jest/source-map@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf"
+  integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==
+  dependencies:
+    callsites "^3.0.0"
+    graceful-fs "^4.2.9"
+    source-map "^0.6.0"
+
+"@jest/test-result@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb"
+  integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==
+  dependencies:
+    "@jest/console" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    collect-v8-coverage "^1.0.0"
+
+"@jest/test-result@^28.1.3":
+  version "28.1.3"
+  resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5"
+  integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==
+  dependencies:
+    "@jest/console" "^28.1.3"
+    "@jest/types" "^28.1.3"
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    collect-v8-coverage "^1.0.0"
+
+"@jest/test-sequencer@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b"
+  integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==
+  dependencies:
+    "@jest/test-result" "^27.5.1"
+    graceful-fs "^4.2.9"
+    jest-haste-map "^27.5.1"
+    jest-runtime "^27.5.1"
+
+"@jest/transform@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409"
+  integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==
+  dependencies:
+    "@babel/core" "^7.1.0"
+    "@jest/types" "^27.5.1"
+    babel-plugin-istanbul "^6.1.1"
+    chalk "^4.0.0"
+    convert-source-map "^1.4.0"
+    fast-json-stable-stringify "^2.0.0"
+    graceful-fs "^4.2.9"
+    jest-haste-map "^27.5.1"
+    jest-regex-util "^27.5.1"
+    jest-util "^27.5.1"
+    micromatch "^4.0.4"
+    pirates "^4.0.4"
+    slash "^3.0.0"
+    source-map "^0.6.1"
+    write-file-atomic "^3.0.0"
+
+"@jest/types@^26.6.2":
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
+  integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
+  dependencies:
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    "@types/istanbul-reports" "^3.0.0"
+    "@types/node" "*"
+    "@types/yargs" "^15.0.0"
+    chalk "^4.0.0"
+
+"@jest/types@^27.4.2":
+  version "27.4.2"
+  resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5"
+  integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==
+  dependencies:
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    "@types/istanbul-reports" "^3.0.0"
+    "@types/node" "*"
+    "@types/yargs" "^16.0.0"
+    chalk "^4.0.0"
+
+"@jest/types@^27.5.1":
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80"
+  integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==
+  dependencies:
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    "@types/istanbul-reports" "^3.0.0"
+    "@types/node" "*"
+    "@types/yargs" "^16.0.0"
+    chalk "^4.0.0"
+
+"@jest/types@^28.1.3":
+  version "28.1.3"
+  resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b"
+  integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==
+  dependencies:
+    "@jest/schemas" "^28.1.3"
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    "@types/istanbul-reports" "^3.0.0"
+    "@types/node" "*"
+    "@types/yargs" "^17.0.8"
+    chalk "^4.0.0"
+
+"@jridgewell/gen-mapping@^0.1.0":
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
+  integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.0"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
+  integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.1"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@^3.0.3":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
+  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+
+"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/source-map@^0.3.2":
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb"
+  integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/sourcemap-codec@^1.4.10":
+  version "1.4.14"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
+  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+
+"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.14"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed"
+  integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.0.3"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@leichtgewicht/ip-codec@^2.0.1":
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
+  integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
+
+"@material-ui/core@^4.12.1":
+  version "4.12.3"
+  resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.3.tgz#80d665caf0f1f034e52355c5450c0e38b099d3ca"
+  integrity sha512-sdpgI/PL56QVsEJldwEe4FFaFTLUqN+rd7sSZiRCdx2E/C7z5yK0y/khAWVBH24tXwto7I1hCzNWfJGZIYJKnw==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    "@material-ui/styles" "^4.11.4"
+    "@material-ui/system" "^4.12.1"
+    "@material-ui/types" "5.1.0"
+    "@material-ui/utils" "^4.11.2"
+    "@types/react-transition-group" "^4.2.0"
+    clsx "^1.0.4"
+    hoist-non-react-statics "^3.3.2"
+    popper.js "1.16.1-lts"
+    prop-types "^15.7.2"
+    react-is "^16.8.0 || ^17.0.0"
+    react-transition-group "^4.4.0"
+
+"@material-ui/icons@^4.11.2":
+  version "4.11.2"
+  resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.2.tgz#b3a7353266519cd743b6461ae9fdfcb1b25eb4c5"
+  integrity sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+
+"@material-ui/styles@^4.11.2", "@material-ui/styles@^4.11.4":
+  version "4.11.4"
+  resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.4.tgz#eb9dfccfcc2d208243d986457dff025497afa00d"
+  integrity sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    "@emotion/hash" "^0.8.0"
+    "@material-ui/types" "5.1.0"
+    "@material-ui/utils" "^4.11.2"
+    clsx "^1.0.4"
+    csstype "^2.5.2"
+    hoist-non-react-statics "^3.3.2"
+    jss "^10.5.1"
+    jss-plugin-camel-case "^10.5.1"
+    jss-plugin-default-unit "^10.5.1"
+    jss-plugin-global "^10.5.1"
+    jss-plugin-nested "^10.5.1"
+    jss-plugin-props-sort "^10.5.1"
+    jss-plugin-rule-value-function "^10.5.1"
+    jss-plugin-vendor-prefixer "^10.5.1"
+    prop-types "^15.7.2"
+
+"@material-ui/system@^4.12.1":
+  version "4.12.1"
+  resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.1.tgz#2dd96c243f8c0a331b2bb6d46efd7771a399707c"
+  integrity sha512-lUdzs4q9kEXZGhbN7BptyiS1rLNHe6kG9o8Y307HCvF4sQxbCgpL2qi+gUk+yI8a2DNk48gISEQxoxpgph0xIw==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    "@material-ui/utils" "^4.11.2"
+    csstype "^2.5.2"
+    prop-types "^15.7.2"
+
+"@material-ui/types@5.1.0":
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2"
+  integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==
+
+"@material-ui/utils@^4.11.2":
+  version "4.11.2"
+  resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.2.tgz#f1aefa7e7dff2ebcb97d31de51aecab1bb57540a"
+  integrity sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    prop-types "^15.7.2"
+    react-is "^16.8.0 || ^17.0.0"
+
+"@mui/base@5.0.0-alpha.67":
+  version "5.0.0-alpha.67"
+  resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.67.tgz#da2423b96204f71cf37bcfcf3054667f38361eb8"
+  integrity sha512-yK2++NivZUitAVpheMc5QVuwrVCphrTw85L6qjKcvnSpB8wmVYne58CY2vzMCNEuHkuHG2jccq9/JlRZFGAanw==
+  dependencies:
+    "@babel/runtime" "^7.16.7"
+    "@emotion/is-prop-valid" "^1.1.1"
+    "@mui/utils" "^5.3.0"
+    "@popperjs/core" "^2.4.4"
+    clsx "^1.1.1"
+    prop-types "^15.7.2"
+    react-is "^17.0.2"
+
+"@mui/icons-material@^5.3.1":
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.3.1.tgz#e0e0aecce5a86971dbaa46441d931a9c749a1c53"
+  integrity sha512-8zBWCaE8DHjIGZhGgMod92p6Rm38EhXrS+cZtaV0+jOTMeWh7z+mvswXzb/rVKc0ZYqw6mQYBcn2uEs2yclI9w==
+  dependencies:
+    "@babel/runtime" "^7.16.7"
+
+"@mui/material@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.4.0.tgz#b54d9fbcad5c4036b95c53906f0fc9c16c980f6e"
+  integrity sha512-vfBIAMsRNWI/A4p/eP01MjqhSACwxRGYp/2Yi7WAU64PpI/TXR4b9SRl+XJMMJXVC7+abu4E3hTdF3oqwMCSYA==
+  dependencies:
+    "@babel/runtime" "^7.16.7"
+    "@mui/base" "5.0.0-alpha.67"
+    "@mui/system" "^5.4.0"
+    "@mui/types" "^7.1.0"
+    "@mui/utils" "^5.3.0"
+    "@types/react-transition-group" "^4.4.4"
+    clsx "^1.1.1"
+    csstype "^3.0.10"
+    hoist-non-react-statics "^3.3.2"
+    prop-types "^15.7.2"
+    react-is "^17.0.2"
+    react-transition-group "^4.4.2"
+
+"@mui/private-theming@^5.3.0":
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.3.0.tgz#1ec32766fc4467f221663a4945b6c972c7d2567b"
+  integrity sha512-EBobUEyM9fMnteKrVPp8pTMUh81xXakyfdpkoh7Y19q9JpD2eh7QGAQVJVj0JBFlcUJD60NIE4K8rdokrRmLwg==
+  dependencies:
+    "@babel/runtime" "^7.16.7"
+    "@mui/utils" "^5.3.0"
+    prop-types "^15.7.2"
+
+"@mui/styled-engine@^5.3.0":
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.3.0.tgz#b260a06398fc7335a62fd65ebbb9fc3c4071027b"
+  integrity sha512-I4YemFy9WnCLUdZ5T+6egpzc8e7Jq/uh9AJ3QInZHbyNu/9I2SWvNn7vHjWOT/D8Y8LMzIOhu5WwZbzjez7YRw==
+  dependencies:
+    "@babel/runtime" "^7.16.7"
+    "@emotion/cache" "^11.7.1"
+    prop-types "^15.7.2"
+
+"@mui/system@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.4.0.tgz#ff79c4922b8cea8c6e05946587fa9a3b938ab729"
+  integrity sha512-LX7g5gK5yCwiueSUVG73uVNc0yeHjsWUIFLrnPjP3m+J7O38RkPqyao5nZahhaSL1PGNbR9+zfkxljXthO9QqA==
+  dependencies:
+    "@babel/runtime" "^7.16.7"
+    "@mui/private-theming" "^5.3.0"
+    "@mui/styled-engine" "^5.3.0"
+    "@mui/types" "^7.1.0"
+    "@mui/utils" "^5.3.0"
+    clsx "^1.1.1"
+    csstype "^3.0.10"
+    prop-types "^15.7.2"
+
+"@mui/types@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.1.0.tgz#5ed928c5a41cfbf9a4be82ea3bbdc47bcc9610d5"
+  integrity sha512-Hh7ALdq/GjfIwLvqH3XftuY3bcKhupktTm+S6qRIDGOtPtRuq2L21VWzOK4p7kblirK0XgGVH5BLwa6u8z/6QQ==
+
+"@mui/utils@^5.3.0":
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.3.0.tgz#5f31915063d25c56f1d3ba9e289bf447472a868c"
+  integrity sha512-O/E9IQKPMg0OrN7+gkn7Ga5o5WA2iXQGdyqNBFPNrYzxOvwzsEtM5K7MtTCGGYKFe8mhTRM0ZOjh5OM0dglw+Q==
+  dependencies:
+    "@babel/runtime" "^7.16.7"
+    "@types/prop-types" "^15.7.4"
+    "@types/react-is" "^16.7.1 || ^17.0.0"
+    prop-types "^15.7.2"
+    react-is "^17.0.2"
+
+"@nodelib/fs.scandir@2.1.5":
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+  integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+  dependencies:
+    "@nodelib/fs.stat" "2.0.5"
+    run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+  integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+  dependencies:
+    "@nodelib/fs.scandir" "2.1.5"
+    fastq "^1.6.0"
+
+"@pmmmwh/react-refresh-webpack-plugin@^0.5.3":
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz#58f8217ba70069cc6a73f5d7e05e85b458c150e2"
+  integrity sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q==
+  dependencies:
+    ansi-html-community "^0.0.8"
+    common-path-prefix "^3.0.0"
+    core-js-pure "^3.8.1"
+    error-stack-parser "^2.0.6"
+    find-up "^5.0.0"
+    html-entities "^2.1.0"
+    loader-utils "^2.0.0"
+    schema-utils "^3.0.0"
+    source-map "^0.7.3"
+
+"@popperjs/core@^2.4.4":
+  version "2.11.2"
+  resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9"
+  integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==
+
+"@redux-saga/core@^1.1.3":
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4"
+  integrity sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg==
+  dependencies:
+    "@babel/runtime" "^7.6.3"
+    "@redux-saga/deferred" "^1.1.2"
+    "@redux-saga/delay-p" "^1.1.2"
+    "@redux-saga/is" "^1.1.2"
+    "@redux-saga/symbols" "^1.1.2"
+    "@redux-saga/types" "^1.1.0"
+    redux "^4.0.4"
+    typescript-tuple "^2.2.1"
+
+"@redux-saga/deferred@^1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.1.2.tgz#59937a0eba71fff289f1310233bc518117a71888"
+  integrity sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ==
+
+"@redux-saga/delay-p@^1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.1.2.tgz#8f515f4b009b05b02a37a7c3d0ca9ddc157bb355"
+  integrity sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g==
+  dependencies:
+    "@redux-saga/symbols" "^1.1.2"
+
+"@redux-saga/is@^1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.2.tgz#ae6c8421f58fcba80faf7cadb7d65b303b97e58e"
+  integrity sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w==
+  dependencies:
+    "@redux-saga/symbols" "^1.1.2"
+    "@redux-saga/types" "^1.1.0"
+
+"@redux-saga/symbols@^1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.2.tgz#216a672a487fc256872b8034835afc22a2d0595d"
+  integrity sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ==
+
+"@redux-saga/types@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204"
+  integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg==
+
+"@rollup/plugin-babel@^5.2.0":
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
+  integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==
+  dependencies:
+    "@babel/helper-module-imports" "^7.10.4"
+    "@rollup/pluginutils" "^3.1.0"
+
+"@rollup/plugin-node-resolve@^11.2.1":
+  version "11.2.1"
+  resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60"
+  integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==
+  dependencies:
+    "@rollup/pluginutils" "^3.1.0"
+    "@types/resolve" "1.17.1"
+    builtin-modules "^3.1.0"
+    deepmerge "^4.2.2"
+    is-module "^1.0.0"
+    resolve "^1.19.0"
+
+"@rollup/plugin-replace@^2.4.1":
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a"
+  integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==
+  dependencies:
+    "@rollup/pluginutils" "^3.1.0"
+    magic-string "^0.25.7"
+
+"@rollup/pluginutils@^3.1.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
+  integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
+  dependencies:
+    "@types/estree" "0.0.39"
+    estree-walker "^1.0.1"
+    picomatch "^2.2.2"
+
+"@rushstack/eslint-patch@^1.1.0":
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz#0c8b74c50f29ee44f423f7416829c0bf8bb5eb27"
+  integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==
+
+"@sinclair/typebox@^0.24.1":
+  version "0.24.26"
+  resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.26.tgz#84f9e8c1d93154e734a7947609a1dc7c7a81cc22"
+  integrity sha512-1ZVIyyS1NXDRVT8GjWD5jULjhDyM3IsIHef2VGUMdnWOlX2tkPjyEX/7K0TGSH2S8EaPhp1ylFdjSjUGQ+gecg==
+
+"@sinonjs/commons@^1.7.0":
+  version "1.8.3"
+  resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
+  integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==
+  dependencies:
+    type-detect "4.0.8"
+
+"@sinonjs/fake-timers@^8.0.1":
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7"
+  integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==
+  dependencies:
+    "@sinonjs/commons" "^1.7.0"
+
+"@surma/rollup-plugin-off-main-thread@^2.2.3":
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053"
+  integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==
+  dependencies:
+    ejs "^3.1.6"
+    json5 "^2.2.0"
+    magic-string "^0.25.0"
+    string.prototype.matchall "^4.0.6"
+
+"@svgr/babel-plugin-add-jsx-attribute@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906"
+  integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==
+
+"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef"
+  integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==
+
+"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1":
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd"
+  integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==
+
+"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1":
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897"
+  integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==
+
+"@svgr/babel-plugin-svg-dynamic-title@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7"
+  integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==
+
+"@svgr/babel-plugin-svg-em-dimensions@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0"
+  integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==
+
+"@svgr/babel-plugin-transform-react-native-svg@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80"
+  integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==
+
+"@svgr/babel-plugin-transform-svg-component@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a"
+  integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==
+
+"@svgr/babel-preset@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327"
+  integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==
+  dependencies:
+    "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0"
+    "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0"
+    "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1"
+    "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1"
+    "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0"
+    "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0"
+    "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0"
+    "@svgr/babel-plugin-transform-svg-component" "^5.5.0"
+
+"@svgr/core@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579"
+  integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==
+  dependencies:
+    "@svgr/plugin-jsx" "^5.5.0"
+    camelcase "^6.2.0"
+    cosmiconfig "^7.0.0"
+
+"@svgr/hast-util-to-babel-ast@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461"
+  integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==
+  dependencies:
+    "@babel/types" "^7.12.6"
+
+"@svgr/plugin-jsx@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000"
+  integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==
+  dependencies:
+    "@babel/core" "^7.12.3"
+    "@svgr/babel-preset" "^5.5.0"
+    "@svgr/hast-util-to-babel-ast" "^5.5.0"
+    svg-parser "^2.0.2"
+
+"@svgr/plugin-svgo@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246"
+  integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==
+  dependencies:
+    cosmiconfig "^7.0.0"
+    deepmerge "^4.2.2"
+    svgo "^1.2.2"
+
+"@svgr/webpack@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640"
+  integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==
+  dependencies:
+    "@babel/core" "^7.12.3"
+    "@babel/plugin-transform-react-constant-elements" "^7.12.1"
+    "@babel/preset-env" "^7.12.1"
+    "@babel/preset-react" "^7.12.5"
+    "@svgr/core" "^5.5.0"
+    "@svgr/plugin-jsx" "^5.5.0"
+    "@svgr/plugin-svgo" "^5.5.0"
+    loader-utils "^2.0.0"
+
+"@testing-library/dom@^7.28.1":
+  version "7.31.2"
+  resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a"
+  integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==
+  dependencies:
+    "@babel/code-frame" "^7.10.4"
+    "@babel/runtime" "^7.12.5"
+    "@types/aria-query" "^4.2.0"
+    aria-query "^4.2.2"
+    chalk "^4.1.0"
+    dom-accessibility-api "^0.5.6"
+    lz-string "^1.4.4"
+    pretty-format "^26.6.2"
+
+"@testing-library/jest-dom@^5.16.5":
+  version "5.16.5"
+  resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e"
+  integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==
+  dependencies:
+    "@adobe/css-tools" "^4.0.1"
+    "@babel/runtime" "^7.9.2"
+    "@types/testing-library__jest-dom" "^5.9.1"
+    aria-query "^5.0.0"
+    chalk "^3.0.0"
+    css.escape "^1.5.1"
+    dom-accessibility-api "^0.5.6"
+    lodash "^4.17.15"
+    redent "^3.0.0"
+
+"@testing-library/react@^11.2.3", "@testing-library/react@^11.2.6":
+  version "11.2.7"
+  resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.7.tgz#b29e2e95c6765c815786c0bc1d5aed9cb2bf7818"
+  integrity sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    "@testing-library/dom" "^7.28.1"
+
+"@testing-library/user-event@^14.4.3":
+  version "14.4.3"
+  resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591"
+  integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==
+
+"@tootallnate/once@1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+  integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
+
+"@trysound/sax@0.2.0":
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
+  integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
+
+"@types/aria-query@^4.2.0":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc"
+  integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==
+
+"@types/babel__core@^7.0.0":
+  version "7.1.17"
+  resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.17.tgz#f50ac9d20d64153b510578d84f9643f9a3afbe64"
+  integrity sha512-6zzkezS9QEIL8yCBvXWxPTJPNuMeECJVxSOhxNY/jfq9LxOTHivaYTqr37n9LknWWRTIkzqH2UilS5QFvfa90A==
+  dependencies:
+    "@babel/parser" "^7.1.0"
+    "@babel/types" "^7.0.0"
+    "@types/babel__generator" "*"
+    "@types/babel__template" "*"
+    "@types/babel__traverse" "*"
+
+"@types/babel__core@^7.1.14":
+  version "7.1.19"
+  resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460"
+  integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==
+  dependencies:
+    "@babel/parser" "^7.1.0"
+    "@babel/types" "^7.0.0"
+    "@types/babel__generator" "*"
+    "@types/babel__template" "*"
+    "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+  version "7.6.3"
+  resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5"
+  integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==
+  dependencies:
+    "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+  version "7.4.1"
+  resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969"
+  integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==
+  dependencies:
+    "@babel/parser" "^7.1.0"
+    "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
+  version "7.14.2"
+  resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43"
+  integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==
+  dependencies:
+    "@babel/types" "^7.3.0"
+
+"@types/body-parser@*":
+  version "1.19.2"
+  resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
+  integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
+  dependencies:
+    "@types/connect" "*"
+    "@types/node" "*"
+
+"@types/bonjour@^3.5.9":
+  version "3.5.10"
+  resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275"
+  integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==
+  dependencies:
+    "@types/node" "*"
+
+"@types/connect-history-api-fallback@^1.3.5":
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae"
+  integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==
+  dependencies:
+    "@types/express-serve-static-core" "*"
+    "@types/node" "*"
+
+"@types/connect@*":
+  version "3.4.35"
+  resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
+  integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
+  dependencies:
+    "@types/node" "*"
+
+"@types/eslint-scope@^3.7.3":
+  version "3.7.4"
+  resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
+  integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==
+  dependencies:
+    "@types/eslint" "*"
+    "@types/estree" "*"
+
+"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1":
+  version "8.4.5"
+  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.5.tgz#acdfb7dd36b91cc5d812d7c093811a8f3d9b31e4"
+  integrity sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==
+  dependencies:
+    "@types/estree" "*"
+    "@types/json-schema" "*"
+
+"@types/estree@*":
+  version "0.0.50"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83"
+  integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==
+
+"@types/estree@0.0.39":
+  version "0.0.39"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
+  integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+
+"@types/estree@^0.0.51":
+  version "0.0.51"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
+  integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==
+
+"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18":
+  version "4.17.30"
+  resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04"
+  integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==
+  dependencies:
+    "@types/node" "*"
+    "@types/qs" "*"
+    "@types/range-parser" "*"
+
+"@types/express@*", "@types/express@^4.17.13":
+  version "4.17.13"
+  resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034"
+  integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==
+  dependencies:
+    "@types/body-parser" "*"
+    "@types/express-serve-static-core" "^4.17.18"
+    "@types/qs" "*"
+    "@types/serve-static" "*"
+
+"@types/graceful-fs@^4.1.2":
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
+  integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
+  dependencies:
+    "@types/node" "*"
+
+"@types/hoist-non-react-statics@^3.3.0":
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
+  integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
+  dependencies:
+    "@types/react" "*"
+    hoist-non-react-statics "^3.3.0"
+
+"@types/html-minifier-terser@^6.0.0":
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
+  integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
+
+"@types/http-proxy@^1.17.8":
+  version "1.17.9"
+  resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a"
+  integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==
+  dependencies:
+    "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
+  integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==
+
+"@types/istanbul-lib-report@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+  integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+  dependencies:
+    "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.0":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
+  integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
+  dependencies:
+    "@types/istanbul-lib-report" "*"
+
+"@types/jest@*":
+  version "27.0.3"
+  resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.0.3.tgz#0cf9dfe9009e467f70a342f0f94ead19842a783a"
+  integrity sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==
+  dependencies:
+    jest-diff "^27.0.0"
+    pretty-format "^27.0.0"
+
+"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8":
+  version "7.0.9"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
+  integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
+
+"@types/json-schema@^7.0.4", "@types/json-schema@^7.0.9":
+  version "7.0.11"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
+  integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+
+"@types/json5@^0.0.29":
+  version "0.0.29"
+  resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+  integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+
+"@types/mime@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.0.tgz#e9a9903894405c6a6551f1774df4e64d9804d69c"
+  integrity sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w==
+
+"@types/node@*":
+  version "17.0.0"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.0.tgz#62797cee3b8b497f6547503b2312254d4fe3c2bb"
+  integrity sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==
+
+"@types/parse-json@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+  integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@types/prettier@^2.1.5":
+  version "2.6.4"
+  resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.4.tgz#ad899dad022bab6b5a9f0a0fe67c2f7a4a8950ed"
+  integrity sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==
+
+"@types/prop-types@*", "@types/prop-types@^15.7.4":
+  version "15.7.4"
+  resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"
+  integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==
+
+"@types/q@^1.5.1":
+  version "1.5.5"
+  resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df"
+  integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==
+
+"@types/qs@*":
+  version "6.9.7"
+  resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
+  integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
+
+"@types/range-parser@*":
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
+  integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
+
+"@types/react-is@^16.7.1 || ^17.0.0":
+  version "17.0.3"
+  resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a"
+  integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==
+  dependencies:
+    "@types/react" "*"
+
+"@types/react-redux@^7.1.20":
+  version "7.1.20"
+  resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.20.tgz#42f0e61ababb621e12c66c96dda94c58423bd7df"
+  integrity sha512-q42es4c8iIeTgcnB+yJgRTTzftv3eYYvCZOh1Ckn2eX/3o5TdsQYKUWpLoLuGlcY/p+VAhV9IOEZJcWk/vfkXw==
+  dependencies:
+    "@types/hoist-non-react-statics" "^3.3.0"
+    "@types/react" "*"
+    hoist-non-react-statics "^3.3.0"
+    redux "^4.0.0"
+
+"@types/react-transition-group@^4.2.0", "@types/react-transition-group@^4.4.4":
+  version "4.4.4"
+  resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e"
+  integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==
+  dependencies:
+    "@types/react" "*"
+
+"@types/react@*":
+  version "17.0.37"
+  resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959"
+  integrity sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==
+  dependencies:
+    "@types/prop-types" "*"
+    "@types/scheduler" "*"
+    csstype "^3.0.2"
+
+"@types/resolve@1.17.1":
+  version "1.17.1"
+  resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
+  integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==
+  dependencies:
+    "@types/node" "*"
+
+"@types/retry@0.12.0":
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
+  integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+
+"@types/scheduler@*":
+  version "0.16.2"
+  resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
+  integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
+
+"@types/serve-index@^1.9.1":
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278"
+  integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==
+  dependencies:
+    "@types/express" "*"
+
+"@types/serve-static@*", "@types/serve-static@^1.13.10":
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155"
+  integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==
+  dependencies:
+    "@types/mime" "*"
+    "@types/node" "*"
+
+"@types/sockjs@^0.3.33":
+  version "0.3.33"
+  resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f"
+  integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==
+  dependencies:
+    "@types/node" "*"
+
+"@types/stack-utils@^2.0.0":
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
+  integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
+
+"@types/testing-library__jest-dom@^5.9.1":
+  version "5.14.2"
+  resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz#564fb2b2dc827147e937a75b639a05d17ce18b44"
+  integrity sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg==
+  dependencies:
+    "@types/jest" "*"
+
+"@types/trusted-types@^2.0.2":
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756"
+  integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==
+
+"@types/ws@^8.5.1":
+  version "8.5.3"
+  resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d"
+  integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==
+  dependencies:
+    "@types/node" "*"
+
+"@types/yargs-parser@*":
+  version "20.2.1"
+  resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129"
+  integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==
+
+"@types/yargs@^15.0.0":
+  version "15.0.14"
+  resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06"
+  integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==
+  dependencies:
+    "@types/yargs-parser" "*"
+
+"@types/yargs@^16.0.0":
+  version "16.0.4"
+  resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977"
+  integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==
+  dependencies:
+    "@types/yargs-parser" "*"
+
+"@types/yargs@^17.0.8":
+  version "17.0.10"
+  resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a"
+  integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==
+  dependencies:
+    "@types/yargs-parser" "*"
+
+"@typescript-eslint/eslint-plugin@^5.5.0":
+  version "5.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz#e27e38cffa4a61226327c874a7be965e9a861624"
+  integrity sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew==
+  dependencies:
+    "@typescript-eslint/scope-manager" "5.32.0"
+    "@typescript-eslint/type-utils" "5.32.0"
+    "@typescript-eslint/utils" "5.32.0"
+    debug "^4.3.4"
+    functional-red-black-tree "^1.0.1"
+    ignore "^5.2.0"
+    regexpp "^3.2.0"
+    semver "^7.3.7"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/experimental-utils@^5.0.0":
+  version "5.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.32.0.tgz#e3e664e7e00be2a3fb1a53c49b51b66c20fdd906"
+  integrity sha512-/x72MkqLAoOQSOHFxdm17irJ1PNDWtdrMmfacaYniGT26nibak8vxEf9xmoVE+yTYL8N77I2icPtw89Yx6HvNg==
+  dependencies:
+    "@typescript-eslint/utils" "5.32.0"
+
+"@typescript-eslint/parser@^5.5.0":
+  version "5.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.32.0.tgz#1de243443bc6186fb153b9e395b842e46877ca5d"
+  integrity sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A==
+  dependencies:
+    "@typescript-eslint/scope-manager" "5.32.0"
+    "@typescript-eslint/types" "5.32.0"
+    "@typescript-eslint/typescript-estree" "5.32.0"
+    debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@5.32.0":
+  version "5.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz#763386e963a8def470580cc36cf9228864190b95"
+  integrity sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg==
+  dependencies:
+    "@typescript-eslint/types" "5.32.0"
+    "@typescript-eslint/visitor-keys" "5.32.0"
+
+"@typescript-eslint/type-utils@5.32.0":
+  version "5.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz#45a14506fe3fb908600b4cef2f70778f7b5cdc79"
+  integrity sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg==
+  dependencies:
+    "@typescript-eslint/utils" "5.32.0"
+    debug "^4.3.4"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/types@5.32.0":
+  version "5.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.32.0.tgz#484273021eeeae87ddb288f39586ef5efeb6dcd8"
+  integrity sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==
+
+"@typescript-eslint/typescript-estree@5.32.0":
+  version "5.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz#282943f34babf07a4afa7b0ff347a8e7b6030d12"
+  integrity sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==
+  dependencies:
+    "@typescript-eslint/types" "5.32.0"
+    "@typescript-eslint/visitor-keys" "5.32.0"
+    debug "^4.3.4"
+    globby "^11.1.0"
+    is-glob "^4.0.3"
+    semver "^7.3.7"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/utils@5.32.0", "@typescript-eslint/utils@^5.13.0":
+  version "5.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.32.0.tgz#eccb6b672b94516f1afc6508d05173c45924840c"
+  integrity sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ==
+  dependencies:
+    "@types/json-schema" "^7.0.9"
+    "@typescript-eslint/scope-manager" "5.32.0"
+    "@typescript-eslint/types" "5.32.0"
+    "@typescript-eslint/typescript-estree" "5.32.0"
+    eslint-scope "^5.1.1"
+    eslint-utils "^3.0.0"
+
+"@typescript-eslint/visitor-keys@5.32.0":
+  version "5.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz#b9715d0b11fdb5dd10fd0c42ff13987470525394"
+  integrity sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g==
+  dependencies:
+    "@typescript-eslint/types" "5.32.0"
+    eslint-visitor-keys "^3.3.0"
+
+"@webassemblyjs/ast@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
+  integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==
+  dependencies:
+    "@webassemblyjs/helper-numbers" "1.11.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+
+"@webassemblyjs/floating-point-hex-parser@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f"
+  integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==
+
+"@webassemblyjs/helper-api-error@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16"
+  integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==
+
+"@webassemblyjs/helper-buffer@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5"
+  integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==
+
+"@webassemblyjs/helper-numbers@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae"
+  integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==
+  dependencies:
+    "@webassemblyjs/floating-point-hex-parser" "1.11.1"
+    "@webassemblyjs/helper-api-error" "1.11.1"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1"
+  integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==
+
+"@webassemblyjs/helper-wasm-section@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a"
+  integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/helper-buffer" "1.11.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+    "@webassemblyjs/wasm-gen" "1.11.1"
+
+"@webassemblyjs/ieee754@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614"
+  integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5"
+  integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff"
+  integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==
+
+"@webassemblyjs/wasm-edit@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6"
+  integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/helper-buffer" "1.11.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+    "@webassemblyjs/helper-wasm-section" "1.11.1"
+    "@webassemblyjs/wasm-gen" "1.11.1"
+    "@webassemblyjs/wasm-opt" "1.11.1"
+    "@webassemblyjs/wasm-parser" "1.11.1"
+    "@webassemblyjs/wast-printer" "1.11.1"
+
+"@webassemblyjs/wasm-gen@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76"
+  integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+    "@webassemblyjs/ieee754" "1.11.1"
+    "@webassemblyjs/leb128" "1.11.1"
+    "@webassemblyjs/utf8" "1.11.1"
+
+"@webassemblyjs/wasm-opt@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2"
+  integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/helper-buffer" "1.11.1"
+    "@webassemblyjs/wasm-gen" "1.11.1"
+    "@webassemblyjs/wasm-parser" "1.11.1"
+
+"@webassemblyjs/wasm-parser@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199"
+  integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/helper-api-error" "1.11.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+    "@webassemblyjs/ieee754" "1.11.1"
+    "@webassemblyjs/leb128" "1.11.1"
+    "@webassemblyjs/utf8" "1.11.1"
+
+"@webassemblyjs/wast-printer@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0"
+  integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abab@^2.0.3, abab@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
+  integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
+
+accepts@~1.3.4, accepts@~1.3.5:
+  version "1.3.7"
+  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+  integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+  dependencies:
+    mime-types "~2.1.24"
+    negotiator "0.6.2"
+
+accepts@~1.3.8:
+  version "1.3.8"
+  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
+  integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
+  dependencies:
+    mime-types "~2.1.34"
+    negotiator "0.6.3"
+
+acorn-globals@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
+  integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
+  dependencies:
+    acorn "^7.1.1"
+    acorn-walk "^7.1.1"
+
+acorn-import-assertions@^1.7.6:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9"
+  integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==
+
+acorn-jsx@^5.3.2:
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+  integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn-node@^1.8.2:
+  version "1.8.2"
+  resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8"
+  integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==
+  dependencies:
+    acorn "^7.0.0"
+    acorn-walk "^7.0.0"
+    xtend "^4.0.2"
+
+acorn-walk@^7.0.0, acorn-walk@^7.1.1:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+  integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
+acorn@^7.0.0, acorn@^7.1.1:
+  version "7.4.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+acorn@^8.2.4:
+  version "8.6.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895"
+  integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==
+
+acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0:
+  version "8.8.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8"
+  integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==
+
+address@^1.0.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
+  integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
+
+address@^1.1.2:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9"
+  integrity sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==
+
+adjust-sourcemap-loader@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99"
+  integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==
+  dependencies:
+    loader-utils "^2.0.0"
+    regex-parser "^2.2.11"
+
+agent-base@6:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug "4"
+
+ajv-formats@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
+  integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
+  dependencies:
+    ajv "^8.0.0"
+
+ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv-keywords@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
+  integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
+  dependencies:
+    fast-deep-equal "^3.1.3"
+
+ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0:
+  version "8.11.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
+  integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    json-schema-traverse "^1.0.0"
+    require-from-string "^2.0.2"
+    uri-js "^4.2.2"
+
+ansi-escapes@^4.2.1, ansi-escapes@^4.3.1:
+  version "4.3.2"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+  integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+  dependencies:
+    type-fest "^0.21.3"
+
+ansi-html-community@^0.0.8:
+  version "0.0.8"
+  resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41"
+  integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==
+
+ansi-regex@^5.0.0, ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+  integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+ansi-styles@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+ansi-styles@^5.0.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
+  integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
+anymatch@^3.0.3, anymatch@~3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+  integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+arg@^5.0.2:
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
+  integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+
+argparse@^1.0.7:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  dependencies:
+    sprintf-js "~1.0.2"
+
+argparse@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+aria-query@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
+  integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==
+  dependencies:
+    "@babel/runtime" "^7.10.2"
+    "@babel/runtime-corejs3" "^7.10.2"
+
+aria-query@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c"
+  integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==
+
+array-flatten@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+  integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-flatten@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+  integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+
+array-includes@^3.1.3, array-includes@^3.1.4:
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
+  integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+    get-intrinsic "^1.1.1"
+    is-string "^1.0.7"
+
+array-includes@^3.1.5:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb"
+  integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+    get-intrinsic "^1.1.1"
+    is-string "^1.0.7"
+
+array-union@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array.prototype.flat@^1.2.5:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13"
+  integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.0"
+
+array.prototype.flatmap@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f"
+  integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.2"
+    es-shim-unscopables "^1.0.0"
+
+array.prototype.foreach@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/array.prototype.foreach/-/array.prototype.foreach-1.0.2.tgz#592b177c8d6abb84e14de1649eb6e7cc5eb9c9ae"
+  integrity sha512-gCOgyBKIaFL5hekfQLhsNmF0TY4Y5JdtOyFKtbSpL72oiCAZ9Zi7TFvcfSsM1LnBFMog1RYVJF0PHgtnY+U5nA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.0"
+    es-array-method-boxes-properly "^1.0.0"
+    get-intrinsic "^1.1.1"
+    is-string "^1.0.7"
+
+asap@~2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+  integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
+
+ast-types-flow@^0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+  integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
+async@^3.2.3:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
+  integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+at-least-node@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+  integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+attr-accept@^2.0.0:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b"
+  integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==
+
+autoprefixer@^10.4.7:
+  version "10.4.8"
+  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.8.tgz#92c7a0199e1cfb2ad5d9427bd585a3d75895b9e5"
+  integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==
+  dependencies:
+    browserslist "^4.21.3"
+    caniuse-lite "^1.0.30001373"
+    fraction.js "^4.2.0"
+    normalize-range "^0.1.2"
+    picocolors "^1.0.0"
+    postcss-value-parser "^4.2.0"
+
+autosuggest-highlight@^3.1.1:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/autosuggest-highlight/-/autosuggest-highlight-3.2.0.tgz#0ebe9aff321bcf0b716d6cee592f6f23e108cf0f"
+  integrity sha512-BI38Ju70l3XP7c/eZHOhEy1eUK0Bpweepcr+/ru1e0LOK2nWdEl8HysyNwibfNqcLFSNZ9t2Jcv3pjiSB+UG1Q==
+  dependencies:
+    diacritic "0.0.2"
+
+axe-core@^4.4.3:
+  version "4.4.3"
+  resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f"
+  integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==
+
+axobject-query@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
+  integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
+
+babel-jest@^27.4.2, babel-jest@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444"
+  integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==
+  dependencies:
+    "@jest/transform" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/babel__core" "^7.1.14"
+    babel-plugin-istanbul "^6.1.1"
+    babel-preset-jest "^27.5.1"
+    chalk "^4.0.0"
+    graceful-fs "^4.2.9"
+    slash "^3.0.0"
+
+babel-loader@^8.2.3:
+  version "8.2.5"
+  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e"
+  integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==
+  dependencies:
+    find-cache-dir "^3.3.1"
+    loader-utils "^2.0.0"
+    make-dir "^3.1.0"
+    schema-utils "^2.6.5"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+  integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+  dependencies:
+    object.assign "^4.1.0"
+
+babel-plugin-istanbul@^6.1.1:
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
+  integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@istanbuljs/load-nyc-config" "^1.0.0"
+    "@istanbuljs/schema" "^0.1.2"
+    istanbul-lib-instrument "^5.0.4"
+    test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e"
+  integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==
+  dependencies:
+    "@babel/template" "^7.3.3"
+    "@babel/types" "^7.3.3"
+    "@types/babel__core" "^7.0.0"
+    "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-macros@^2.6.1:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
+  integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
+  dependencies:
+    "@babel/runtime" "^7.7.2"
+    cosmiconfig "^6.0.0"
+    resolve "^1.12.0"
+
+babel-plugin-macros@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
+  integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    cosmiconfig "^7.0.0"
+    resolve "^1.19.0"
+
+babel-plugin-named-asset-import@^0.3.8:
+  version "0.3.8"
+  resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2"
+  integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==
+
+babel-plugin-polyfill-corejs2@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz#407082d0d355ba565af24126fb6cb8e9115251fd"
+  integrity sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==
+  dependencies:
+    "@babel/compat-data" "^7.13.11"
+    "@babel/helper-define-polyfill-provider" "^0.3.0"
+    semver "^6.1.1"
+
+babel-plugin-polyfill-corejs2@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d"
+  integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==
+  dependencies:
+    "@babel/compat-data" "^7.17.7"
+    "@babel/helper-define-polyfill-provider" "^0.3.2"
+    semver "^6.1.1"
+
+babel-plugin-polyfill-corejs3@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz#0b571f4cf3d67f911512f5c04842a7b8e8263087"
+  integrity sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.3.0"
+    core-js-compat "^3.18.0"
+
+babel-plugin-polyfill-corejs3@^0.5.3:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7"
+  integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.3.2"
+    core-js-compat "^3.21.0"
+
+babel-plugin-polyfill-regenerator@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz#9ebbcd7186e1a33e21c5e20cae4e7983949533be"
+  integrity sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.3.0"
+
+babel-plugin-polyfill-regenerator@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe"
+  integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.3.2"
+
+babel-plugin-transform-react-remove-prop-types@^0.4.24:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
+  integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
+
+babel-preset-current-node-syntax@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
+  integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
+  dependencies:
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-bigint" "^7.8.3"
+    "@babel/plugin-syntax-class-properties" "^7.8.3"
+    "@babel/plugin-syntax-import-meta" "^7.8.3"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-top-level-await" "^7.8.3"
+
+babel-preset-jest@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81"
+  integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==
+  dependencies:
+    babel-plugin-jest-hoist "^27.5.1"
+    babel-preset-current-node-syntax "^1.0.0"
+
+babel-preset-react-app@^10.0.1:
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz#ed6005a20a24f2c88521809fa9aea99903751584"
+  integrity sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==
+  dependencies:
+    "@babel/core" "^7.16.0"
+    "@babel/plugin-proposal-class-properties" "^7.16.0"
+    "@babel/plugin-proposal-decorators" "^7.16.4"
+    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0"
+    "@babel/plugin-proposal-numeric-separator" "^7.16.0"
+    "@babel/plugin-proposal-optional-chaining" "^7.16.0"
+    "@babel/plugin-proposal-private-methods" "^7.16.0"
+    "@babel/plugin-transform-flow-strip-types" "^7.16.0"
+    "@babel/plugin-transform-react-display-name" "^7.16.0"
+    "@babel/plugin-transform-runtime" "^7.16.4"
+    "@babel/preset-env" "^7.16.4"
+    "@babel/preset-react" "^7.16.0"
+    "@babel/preset-typescript" "^7.16.0"
+    "@babel/runtime" "^7.16.3"
+    babel-plugin-macros "^3.1.0"
+    babel-plugin-transform-react-remove-prop-types "^0.4.24"
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+batch@0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+  integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
+
+bfj@^7.0.2:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2"
+  integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==
+  dependencies:
+    bluebird "^3.5.5"
+    check-types "^11.1.1"
+    hoopy "^0.1.4"
+    tryer "^1.0.1"
+
+big-integer@^1.6.16:
+  version "1.6.51"
+  resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
+  integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
+
+big.js@^5.2.2:
+  version "5.2.2"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bluebird@^3.5.5:
+  version "3.7.2"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+body-parser@1.20.0:
+  version "1.20.0"
+  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5"
+  integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==
+  dependencies:
+    bytes "3.1.2"
+    content-type "~1.0.4"
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    on-finished "2.4.1"
+    qs "6.10.3"
+    raw-body "2.5.1"
+    type-is "~1.6.18"
+    unpipe "1.0.0"
+
+bonjour-service@^1.0.11:
+  version "1.0.13"
+  resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.13.tgz#4ac003dc1626023252d58adf2946f57e5da450c1"
+  integrity sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==
+  dependencies:
+    array-flatten "^2.1.2"
+    dns-equal "^1.0.0"
+    fast-deep-equal "^3.1.3"
+    multicast-dns "^7.2.5"
+
+boolbase@^1.0.0, boolbase@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+braces@^3.0.1, braces@^3.0.2, braces@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+broadcast-channel@^3.4.1:
+  version "3.7.0"
+  resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937"
+  integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==
+  dependencies:
+    "@babel/runtime" "^7.7.2"
+    detect-node "^2.1.0"
+    js-sha3 "0.8.0"
+    microseconds "0.2.0"
+    nano-time "1.0.0"
+    oblivious-set "1.0.0"
+    rimraf "3.0.2"
+    unload "2.2.0"
+
+browser-process-hrtime@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+  integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
+browserslist@^4.0.0, browserslist@^4.17.5, browserslist@^4.19.1:
+  version "4.19.1"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3"
+  integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==
+  dependencies:
+    caniuse-lite "^1.0.30001286"
+    electron-to-chromium "^1.4.17"
+    escalade "^3.1.1"
+    node-releases "^2.0.1"
+    picocolors "^1.0.0"
+
+browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.0, browserslist@^4.21.3:
+  version "4.21.3"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a"
+  integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==
+  dependencies:
+    caniuse-lite "^1.0.30001370"
+    electron-to-chromium "^1.4.202"
+    node-releases "^2.0.6"
+    update-browserslist-db "^1.0.5"
+
+bser@2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+  integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+  dependencies:
+    node-int64 "^0.4.0"
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+builtin-modules@^3.1.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887"
+  integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==
+
+bytes@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+  integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
+
+bytes@3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+  integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+  dependencies:
+    function-bind "^1.1.1"
+    get-intrinsic "^1.0.2"
+
+callsites@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+  integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+  dependencies:
+    pascal-case "^3.1.2"
+    tslib "^2.0.3"
+
+camelcase-css@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+  integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
+camelcase@^5.3.1:
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelcase@^6.2.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e"
+  integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==
+
+camelcase@^6.2.1:
+  version "6.3.0"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+  integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+caniuse-api@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+  integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-lite "^1.0.0"
+    lodash.memoize "^4.1.2"
+    lodash.uniq "^4.5.0"
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001286:
+  version "1.0.30001287"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001287.tgz#5fab6a46ab9e47146d5dd35abfe47beaf8073c71"
+  integrity sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==
+
+caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373:
+  version "1.0.30001373"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz#2dc3bc3bfcb5d5a929bec11300883040d7b4b4be"
+  integrity sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==
+
+case-sensitive-paths-webpack-plugin@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4"
+  integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==
+
+chalk@^2.0.0, chalk@^2.4.1:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  dependencies:
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
+
+chalk@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+  integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+char-regex@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+  integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+char-regex@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e"
+  integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==
+
+check-types@^11.1.1:
+  version "11.1.2"
+  resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f"
+  integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==
+
+chokidar@^3.4.2, chokidar@^3.5.3:
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+chrome-trace-event@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+  integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
+ci-info@^3.2.0:
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128"
+  integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==
+
+cjs-module-lexer@^1.0.0:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
+  integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
+
+classnames@~2.2.5:
+  version "2.2.6"
+  resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
+  integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
+
+classnames@~2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
+  integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
+
+clean-css@^5.2.2:
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.1.tgz#d0610b0b90d125196a2894d35366f734e5d7aa32"
+  integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==
+  dependencies:
+    source-map "~0.6.0"
+
+cliui@^7.0.2:
+  version "7.0.4"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+  integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+  dependencies:
+    string-width "^4.2.0"
+    strip-ansi "^6.0.0"
+    wrap-ansi "^7.0.0"
+
+clsx@^1.0.4, clsx@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
+  integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
+
+co@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+coa@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+  integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+  dependencies:
+    "@types/q" "^1.5.1"
+    chalk "^2.4.1"
+    q "^1.1.2"
+
+collect-v8-coverage@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
+  integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
+
+color-convert@^1.9.0:
+  version "1.9.3"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  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.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  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.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@^1.1.4, color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+colord@^2.9.1:
+  version "2.9.2"
+  resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1"
+  integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==
+
+colorette@^2.0.10:
+  version "2.0.19"
+  resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
+  integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
+
+combined-stream@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+commander@^2.20.0:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
+commander@^8.3.0:
+  version "8.3.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
+common-path-prefix@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0"
+  integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==
+
+common-tags@^1.8.0:
+  version "1.8.2"
+  resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
+  integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==
+
+commondir@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+  integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+compressible@~2.0.16:
+  version "2.0.18"
+  resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+  integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+  dependencies:
+    mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+  version "1.7.4"
+  resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+  integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+  dependencies:
+    accepts "~1.3.5"
+    bytes "3.0.0"
+    compressible "~2.0.16"
+    debug "2.6.9"
+    on-headers "~1.0.2"
+    safe-buffer "5.1.2"
+    vary "~1.1.2"
+
+compute-scroll-into-view@^1.0.9:
+  version "1.0.17"
+  resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab"
+  integrity sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+confusing-browser-globals@^1.0.11:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81"
+  integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==
+
+connect-history-api-fallback@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8"
+  integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==
+
+connected-react-router@^6.5.2:
+  version "6.9.2"
+  resolved "https://registry.yarnpkg.com/connected-react-router/-/connected-react-router-6.9.2.tgz#f89fa87f0e977fcabf17475fb4552e170cc7e48e"
+  integrity sha512-bE8kNBiZv9Mivp7pYn9JvLH5ItTjLl45kk1/Vha0rmAK9I/ETb5JPJrAm0h2KCG9qLfv7vqU3Jo4UUDo0oJnQg==
+  dependencies:
+    lodash.isequalwith "^4.4.0"
+    prop-types "^15.7.2"
+  optionalDependencies:
+    immutable "^3.8.1 || ^4.0.0"
+    seamless-immutable "^7.1.3"
+
+content-disposition@0.5.4:
+  version "0.5.4"
+  resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
+  integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
+  dependencies:
+    safe-buffer "5.2.1"
+
+content-type@~1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+  integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
+  integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
+  dependencies:
+    safe-buffer "~5.1.1"
+
+cookie-signature@1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+  integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+  integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+
+core-js-compat@^3.18.0, core-js-compat@^3.19.1:
+  version "3.20.0"
+  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.0.tgz#fd704640c5a213816b6d10ec0192756111e2c9d1"
+  integrity sha512-relrah5h+sslXssTTOkvqcC/6RURifB0W5yhYBdBkaPYa5/2KBMiog3XiD+s3TwEHWxInWVv4Jx2/Lw0vng+IQ==
+  dependencies:
+    browserslist "^4.19.1"
+    semver "7.0.0"
+
+core-js-compat@^3.21.0, core-js-compat@^3.22.1:
+  version "3.24.1"
+  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.24.1.tgz#d1af84a17e18dfdd401ee39da9996f9a7ba887de"
+  integrity sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==
+  dependencies:
+    browserslist "^4.21.3"
+    semver "7.0.0"
+
+core-js-pure@^3.19.0:
+  version "3.20.0"
+  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.20.0.tgz#7253feccf8bb05b72c153ddccdbe391ddbffbe03"
+  integrity sha512-qsrbIwWSEEYOM7z616jAVgwhuDDtPLwZSpUsU3vyUkHYqKTf/uwOJBZg2V7lMurYWkpVlaVOxBrfX0Q3ppvjfg==
+
+core-js-pure@^3.8.1:
+  version "3.24.1"
+  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3"
+  integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==
+
+core-js@^3.19.2:
+  version "3.24.1"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f"
+  integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg==
+
+core-util-is@~1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+  integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+cosmiconfig@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+  integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
+  dependencies:
+    "@types/parse-json" "^4.0.0"
+    import-fresh "^3.1.0"
+    parse-json "^5.0.0"
+    path-type "^4.0.0"
+    yaml "^1.7.2"
+
+cosmiconfig@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d"
+  integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==
+  dependencies:
+    "@types/parse-json" "^4.0.0"
+    import-fresh "^3.2.1"
+    parse-json "^5.0.0"
+    path-type "^4.0.0"
+    yaml "^1.10.0"
+
+cross-fetch@^3.0.4:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
+  integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
+  dependencies:
+    node-fetch "2.6.7"
+
+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+crypto-random-string@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+  integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+
+css-blank-pseudo@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561"
+  integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==
+  dependencies:
+    postcss-selector-parser "^6.0.9"
+
+css-declaration-sorter@^6.3.0:
+  version "6.3.0"
+  resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz#72ebd995c8f4532ff0036631f7365cce9759df14"
+  integrity sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==
+
+css-has-pseudo@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73"
+  integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==
+  dependencies:
+    postcss-selector-parser "^6.0.9"
+
+css-loader@^6.5.1:
+  version "6.7.1"
+  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e"
+  integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==
+  dependencies:
+    icss-utils "^5.1.0"
+    postcss "^8.4.7"
+    postcss-modules-extract-imports "^3.0.0"
+    postcss-modules-local-by-default "^4.0.0"
+    postcss-modules-scope "^3.0.0"
+    postcss-modules-values "^4.0.0"
+    postcss-value-parser "^4.2.0"
+    semver "^7.3.5"
+
+css-mediaquery@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0"
+  integrity sha1-aiw3NEkoYYYxxUvTPO3TAdoYvqA=
+
+css-minimizer-webpack-plugin@^3.2.0:
+  version "3.4.1"
+  resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f"
+  integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==
+  dependencies:
+    cssnano "^5.0.6"
+    jest-worker "^27.0.2"
+    postcss "^8.3.5"
+    schema-utils "^4.0.0"
+    serialize-javascript "^6.0.0"
+    source-map "^0.6.1"
+
+css-prefers-color-scheme@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349"
+  integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==
+
+css-select-base-adapter@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+  integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
+  integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^3.2.1"
+    domutils "^1.7.0"
+    nth-check "^1.0.2"
+
+css-select@^4.1.3:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.0.tgz#ab28276d3afb00cc05e818bd33eb030f14f57895"
+  integrity sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^5.1.0"
+    domhandler "^4.3.0"
+    domutils "^2.8.0"
+    nth-check "^2.0.1"
+
+css-tree@1.0.0-alpha.37:
+  version "1.0.0-alpha.37"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
+  integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
+  dependencies:
+    mdn-data "2.0.4"
+    source-map "^0.6.1"
+
+css-tree@^1.1.2, css-tree@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
+  integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
+  dependencies:
+    mdn-data "2.0.14"
+    source-map "^0.6.1"
+
+css-vendor@^2.0.8:
+  version "2.0.8"
+  resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d"
+  integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==
+  dependencies:
+    "@babel/runtime" "^7.8.3"
+    is-in-browser "^1.0.2"
+
+css-what@^3.2.1:
+  version "3.4.2"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4"
+  integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==
+
+css-what@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe"
+  integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==
+
+css.escape@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
+  integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=
+
+cssdb@^6.6.3:
+  version "6.6.3"
+  resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-6.6.3.tgz#1f331a2fab30c18d9f087301e6122a878bb1e505"
+  integrity sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==
+
+cssesc@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssnano-preset-default@^5.2.12:
+  version "5.2.12"
+  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz#ebe6596ec7030e62c3eb2b3c09f533c0644a9a97"
+  integrity sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==
+  dependencies:
+    css-declaration-sorter "^6.3.0"
+    cssnano-utils "^3.1.0"
+    postcss-calc "^8.2.3"
+    postcss-colormin "^5.3.0"
+    postcss-convert-values "^5.1.2"
+    postcss-discard-comments "^5.1.2"
+    postcss-discard-duplicates "^5.1.0"
+    postcss-discard-empty "^5.1.1"
+    postcss-discard-overridden "^5.1.0"
+    postcss-merge-longhand "^5.1.6"
+    postcss-merge-rules "^5.1.2"
+    postcss-minify-font-values "^5.1.0"
+    postcss-minify-gradients "^5.1.1"
+    postcss-minify-params "^5.1.3"
+    postcss-minify-selectors "^5.2.1"
+    postcss-normalize-charset "^5.1.0"
+    postcss-normalize-display-values "^5.1.0"
+    postcss-normalize-positions "^5.1.1"
+    postcss-normalize-repeat-style "^5.1.1"
+    postcss-normalize-string "^5.1.0"
+    postcss-normalize-timing-functions "^5.1.0"
+    postcss-normalize-unicode "^5.1.0"
+    postcss-normalize-url "^5.1.0"
+    postcss-normalize-whitespace "^5.1.1"
+    postcss-ordered-values "^5.1.3"
+    postcss-reduce-initial "^5.1.0"
+    postcss-reduce-transforms "^5.1.0"
+    postcss-svgo "^5.1.0"
+    postcss-unique-selectors "^5.1.1"
+
+cssnano-utils@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861"
+  integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==
+
+cssnano@^5.0.6:
+  version "5.1.12"
+  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.12.tgz#bcd0b64d6be8692de79332c501daa7ece969816c"
+  integrity sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ==
+  dependencies:
+    cssnano-preset-default "^5.2.12"
+    lilconfig "^2.0.3"
+    yaml "^1.10.2"
+
+csso@^4.0.2, csso@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529"
+  integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==
+  dependencies:
+    css-tree "^1.1.2"
+
+cssom@^0.4.4:
+  version "0.4.4"
+  resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
+  integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
+
+cssom@~0.3.6:
+  version "0.3.8"
+  resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+  integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+  integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+  dependencies:
+    cssom "~0.3.6"
+
+csstype@^2.5.2:
+  version "2.6.19"
+  resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa"
+  integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==
+
+csstype@^3.0.10, csstype@^3.0.2:
+  version "3.0.10"
+  resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5"
+  integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==
+
+damerau-levenshtein@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
+  integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+
+data-urls@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
+  integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
+  dependencies:
+    abab "^2.0.3"
+    whatwg-mimetype "^2.3.0"
+    whatwg-url "^8.0.0"
+
+date-fns@^1.29.0:
+  version "1.30.1"
+  resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
+  integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
+
+date-fns@^2.19.0:
+  version "2.28.0"
+  resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2"
+  integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==
+
+debug@2.6.9, debug@^2.6.0, debug@^2.6.9:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+debug@^3.2.7:
+  version "3.2.7"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+  integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+  dependencies:
+    ms "^2.1.1"
+
+decimal.js@^10.2.1:
+  version "10.3.1"
+  resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
+  integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
+
+decode-uri-component@^0.2.0:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
+  integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
+
+dedent@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+  integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-is@^0.1.3, deep-is@~0.1.3:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+deepmerge@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
+  integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+
+default-gateway@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71"
+  integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==
+  dependencies:
+    execa "^5.0.0"
+
+define-lazy-prop@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
+  integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
+
+define-properties@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+  integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+  dependencies:
+    object-keys "^1.0.12"
+
+define-properties@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
+  integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
+  dependencies:
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
+defined@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+  integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+depd@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+depd@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+  integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+destroy@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
+  integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+
+detect-newline@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+  integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+
+detect-node@^2.0.4, detect-node@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
+  integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+
+detect-port-alt@^1.1.6:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275"
+  integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==
+  dependencies:
+    address "^1.0.1"
+    debug "^2.6.0"
+
+detective@^5.2.1:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034"
+  integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==
+  dependencies:
+    acorn-node "^1.8.2"
+    defined "^1.0.0"
+    minimist "^1.2.6"
+
+diacritic@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/diacritic/-/diacritic-0.0.2.tgz#fc2a887b5a5bc0a0a854fb614c7c2f209061ee04"
+  integrity sha1-/CqIe1pbwKCoVPthTHwvIJBh7gQ=
+
+didyoumean@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
+  integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+
+diff-sequences@^27.4.0:
+  version "27.4.0"
+  resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5"
+  integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==
+
+diff-sequences@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
+  integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
+
+dir-glob@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+  dependencies:
+    path-type "^4.0.0"
+
+dlv@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+  integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
+dns-equal@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+  integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
+
+dns-packet@^5.2.2:
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b"
+  integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==
+  dependencies:
+    "@leichtgewicht/ip-codec" "^2.0.1"
+
+doctrine@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+  dependencies:
+    esutils "^2.0.2"
+
+doctrine@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+  dependencies:
+    esutils "^2.0.2"
+
+dom-accessibility-api@^0.5.6:
+  version "0.5.10"
+  resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.10.tgz#caa6d08f60388d0bb4539dd75fe458a9a1d0014c"
+  integrity sha512-Xu9mD0UjrJisTmv7lmVSDMagQcU9R5hwAbxsaAE/35XPnPLJobbuREfV/rraiSaEj/UOvgrzQs66zyTWTlyd+g==
+
+dom-converter@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+  integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+  dependencies:
+    utila "~0.4"
+
+dom-helpers@^5.0.1:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
+  integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
+  dependencies:
+    "@babel/runtime" "^7.8.7"
+    csstype "^3.0.2"
+
+dom-serializer@0:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+  integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+  dependencies:
+    domelementtype "^2.0.1"
+    entities "^2.0.0"
+
+dom-serializer@^1.0.1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91"
+  integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.2.0"
+    entities "^2.0.0"
+
+domelementtype@1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+  integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1, domelementtype@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
+  integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
+
+domexception@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
+  integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
+  dependencies:
+    webidl-conversions "^5.0.0"
+
+domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626"
+  integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==
+  dependencies:
+    domelementtype "^2.2.0"
+
+domutils@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+  integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+  dependencies:
+    dom-serializer "0"
+    domelementtype "1"
+
+domutils@^2.5.2, domutils@^2.8.0:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+  dependencies:
+    dom-serializer "^1.0.1"
+    domelementtype "^2.2.0"
+    domhandler "^4.2.0"
+
+dot-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+  integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+dotenv-expand@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
+  integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
+
+dotenv@^10.0.0:
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
+  integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
+
+downshift@3.2.7:
+  version "3.2.7"
+  resolved "https://registry.yarnpkg.com/downshift/-/downshift-3.2.7.tgz#0c40d78d1cbc24753c7a622cfc664df1c9480b4a"
+  integrity sha512-mbUO9ZFhMGtksIeVWRFFjNOPN237VsUqZSEYi0VS0Wj38XNLzpgOBTUcUjdjFeB8KVgmrcRa6GGFkTbACpG6FA==
+  dependencies:
+    "@babel/runtime" "^7.1.2"
+    compute-scroll-into-view "^1.0.9"
+    prop-types "^15.6.0"
+    react-is "^16.5.2"
+
+duplexer@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+  integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
+ee-first@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+  integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+ejs@^3.1.6:
+  version "3.1.8"
+  resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b"
+  integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==
+  dependencies:
+    jake "^10.8.5"
+
+electron-to-chromium@^1.4.17:
+  version "1.4.24"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.24.tgz#9cf8a92d5729c480ee47ff0aa5555f57467ae2fa"
+  integrity sha512-erwx5r69B/WFfFuF2jcNN0817BfDBdC4765kQ6WltOMuwsimlQo3JTEq0Cle+wpHralwdeX3OfAtw/mHxPK0Wg==
+
+electron-to-chromium@^1.4.202:
+  version "1.4.208"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.208.tgz#ecb5b47c8cc212a43172ffc5ce50178a638a5d74"
+  integrity sha512-diMr4t69FigAGUk2KovP0bygEtN/9AkqEVkzjEp0cu+zFFbZMVvwACpTTfuj1mAmFR5kNoSW8wGKDFWIvmThiQ==
+
+emittery@^0.10.2:
+  version "0.10.2"
+  resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933"
+  integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==
+
+emittery@^0.8.1:
+  version "0.8.1"
+  resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"
+  integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==
+
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+  version "9.2.2"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+  integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+emojis-list@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+  integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+encodeurl@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+  integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+enhanced-resolve@^5.10.0:
+  version "5.10.0"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6"
+  integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==
+  dependencies:
+    graceful-fs "^4.2.4"
+    tapable "^2.2.0"
+
+entities@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+error-ex@^1.3.1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  dependencies:
+    is-arrayish "^0.2.1"
+
+error-stack-parser@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8"
+  integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==
+  dependencies:
+    stackframe "^1.1.1"
+
+es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1:
+  version "1.19.1"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"
+  integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==
+  dependencies:
+    call-bind "^1.0.2"
+    es-to-primitive "^1.2.1"
+    function-bind "^1.1.1"
+    get-intrinsic "^1.1.1"
+    get-symbol-description "^1.0.0"
+    has "^1.0.3"
+    has-symbols "^1.0.2"
+    internal-slot "^1.0.3"
+    is-callable "^1.2.4"
+    is-negative-zero "^2.0.1"
+    is-regex "^1.1.4"
+    is-shared-array-buffer "^1.0.1"
+    is-string "^1.0.7"
+    is-weakref "^1.0.1"
+    object-inspect "^1.11.0"
+    object-keys "^1.1.1"
+    object.assign "^4.1.2"
+    string.prototype.trimend "^1.0.4"
+    string.prototype.trimstart "^1.0.4"
+    unbox-primitive "^1.0.1"
+
+es-abstract@^1.19.2, es-abstract@^1.19.5:
+  version "1.20.1"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814"
+  integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==
+  dependencies:
+    call-bind "^1.0.2"
+    es-to-primitive "^1.2.1"
+    function-bind "^1.1.1"
+    function.prototype.name "^1.1.5"
+    get-intrinsic "^1.1.1"
+    get-symbol-description "^1.0.0"
+    has "^1.0.3"
+    has-property-descriptors "^1.0.0"
+    has-symbols "^1.0.3"
+    internal-slot "^1.0.3"
+    is-callable "^1.2.4"
+    is-negative-zero "^2.0.2"
+    is-regex "^1.1.4"
+    is-shared-array-buffer "^1.0.2"
+    is-string "^1.0.7"
+    is-weakref "^1.0.2"
+    object-inspect "^1.12.0"
+    object-keys "^1.1.1"
+    object.assign "^4.1.2"
+    regexp.prototype.flags "^1.4.3"
+    string.prototype.trimend "^1.0.5"
+    string.prototype.trimstart "^1.0.5"
+    unbox-primitive "^1.0.2"
+
+es-array-method-boxes-properly@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
+  integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
+
+es-module-lexer@^0.9.0:
+  version "0.9.3"
+  resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19"
+  integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==
+
+es-shim-unscopables@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
+  integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
+  dependencies:
+    has "^1.0.3"
+
+es-to-primitive@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+  integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+  dependencies:
+    is-callable "^1.1.4"
+    is-date-object "^1.0.1"
+    is-symbol "^1.0.2"
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-html@~1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+  integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escape-string-regexp@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+  integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escape-string-regexp@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escodegen@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
+  integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
+  dependencies:
+    esprima "^4.0.1"
+    estraverse "^5.2.0"
+    esutils "^2.0.2"
+    optionator "^0.8.1"
+  optionalDependencies:
+    source-map "~0.6.1"
+
+eslint-config-prettier@^8.3.0:
+  version "8.3.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a"
+  integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==
+
+eslint-config-react-app@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4"
+  integrity sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==
+  dependencies:
+    "@babel/core" "^7.16.0"
+    "@babel/eslint-parser" "^7.16.3"
+    "@rushstack/eslint-patch" "^1.1.0"
+    "@typescript-eslint/eslint-plugin" "^5.5.0"
+    "@typescript-eslint/parser" "^5.5.0"
+    babel-preset-react-app "^10.0.1"
+    confusing-browser-globals "^1.0.11"
+    eslint-plugin-flowtype "^8.0.3"
+    eslint-plugin-import "^2.25.3"
+    eslint-plugin-jest "^25.3.0"
+    eslint-plugin-jsx-a11y "^6.5.1"
+    eslint-plugin-react "^7.27.1"
+    eslint-plugin-react-hooks "^4.3.0"
+    eslint-plugin-testing-library "^5.0.1"
+
+eslint-import-resolver-node@^0.3.6:
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
+  integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
+  dependencies:
+    debug "^3.2.7"
+    resolve "^1.20.0"
+
+eslint-module-utils@^2.7.3:
+  version "2.7.3"
+  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
+  integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
+  dependencies:
+    debug "^3.2.7"
+    find-up "^2.1.0"
+
+eslint-plugin-flowtype@^8.0.3:
+  version "8.0.3"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912"
+  integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==
+  dependencies:
+    lodash "^4.17.21"
+    string-natural-compare "^3.0.1"
+
+eslint-plugin-import@^2.25.3:
+  version "2.26.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b"
+  integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==
+  dependencies:
+    array-includes "^3.1.4"
+    array.prototype.flat "^1.2.5"
+    debug "^2.6.9"
+    doctrine "^2.1.0"
+    eslint-import-resolver-node "^0.3.6"
+    eslint-module-utils "^2.7.3"
+    has "^1.0.3"
+    is-core-module "^2.8.1"
+    is-glob "^4.0.3"
+    minimatch "^3.1.2"
+    object.values "^1.1.5"
+    resolve "^1.22.0"
+    tsconfig-paths "^3.14.1"
+
+eslint-plugin-jest@^25.3.0:
+  version "25.7.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a"
+  integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==
+  dependencies:
+    "@typescript-eslint/experimental-utils" "^5.0.0"
+
+eslint-plugin-jsx-a11y@^6.5.1:
+  version "6.6.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff"
+  integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==
+  dependencies:
+    "@babel/runtime" "^7.18.9"
+    aria-query "^4.2.2"
+    array-includes "^3.1.5"
+    ast-types-flow "^0.0.7"
+    axe-core "^4.4.3"
+    axobject-query "^2.2.0"
+    damerau-levenshtein "^1.0.8"
+    emoji-regex "^9.2.2"
+    has "^1.0.3"
+    jsx-ast-utils "^3.3.2"
+    language-tags "^1.0.5"
+    minimatch "^3.1.2"
+    semver "^6.3.0"
+
+eslint-plugin-prettier@^4.2.1:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b"
+  integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==
+  dependencies:
+    prettier-linter-helpers "^1.0.0"
+
+eslint-plugin-react-hooks@^4.3.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
+  integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
+
+eslint-plugin-react@^7.27.1:
+  version "7.30.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22"
+  integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==
+  dependencies:
+    array-includes "^3.1.5"
+    array.prototype.flatmap "^1.3.0"
+    doctrine "^2.1.0"
+    estraverse "^5.3.0"
+    jsx-ast-utils "^2.4.1 || ^3.0.0"
+    minimatch "^3.1.2"
+    object.entries "^1.1.5"
+    object.fromentries "^2.0.5"
+    object.hasown "^1.1.1"
+    object.values "^1.1.5"
+    prop-types "^15.8.1"
+    resolve "^2.0.0-next.3"
+    semver "^6.3.0"
+    string.prototype.matchall "^4.0.7"
+
+eslint-plugin-testing-library@^5.0.1:
+  version "5.6.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.6.0.tgz#91e810ecb838f86decc9b5202876c87e42d73ea7"
+  integrity sha512-y63TRzPhGCMNsnUwMGJU1MFWc/3GvYw+nzobp9QiyNTTKsgAt5RKAOT1I34+XqVBpX1lC8bScoOjCkP7iRv0Mw==
+  dependencies:
+    "@typescript-eslint/utils" "^5.13.0"
+
+eslint-scope@5.1.1, eslint-scope@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^4.1.1"
+
+eslint-scope@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
+  integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^5.2.0"
+
+eslint-utils@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+  integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+  dependencies:
+    eslint-visitor-keys "^2.0.0"
+
+eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+  integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint-visitor-keys@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
+  integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
+
+eslint-webpack-plugin@^3.1.1:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c"
+  integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==
+  dependencies:
+    "@types/eslint" "^7.29.0 || ^8.4.1"
+    jest-worker "^28.0.2"
+    micromatch "^4.0.5"
+    normalize-path "^3.0.0"
+    schema-utils "^4.0.0"
+
+eslint@^8.3.0, eslint@^8.32.0:
+  version "8.32.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861"
+  integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==
+  dependencies:
+    "@eslint/eslintrc" "^1.4.1"
+    "@humanwhocodes/config-array" "^0.11.8"
+    "@humanwhocodes/module-importer" "^1.0.1"
+    "@nodelib/fs.walk" "^1.2.8"
+    ajv "^6.10.0"
+    chalk "^4.0.0"
+    cross-spawn "^7.0.2"
+    debug "^4.3.2"
+    doctrine "^3.0.0"
+    escape-string-regexp "^4.0.0"
+    eslint-scope "^7.1.1"
+    eslint-utils "^3.0.0"
+    eslint-visitor-keys "^3.3.0"
+    espree "^9.4.0"
+    esquery "^1.4.0"
+    esutils "^2.0.2"
+    fast-deep-equal "^3.1.3"
+    file-entry-cache "^6.0.1"
+    find-up "^5.0.0"
+    glob-parent "^6.0.2"
+    globals "^13.19.0"
+    grapheme-splitter "^1.0.4"
+    ignore "^5.2.0"
+    import-fresh "^3.0.0"
+    imurmurhash "^0.1.4"
+    is-glob "^4.0.0"
+    is-path-inside "^3.0.3"
+    js-sdsl "^4.1.4"
+    js-yaml "^4.1.0"
+    json-stable-stringify-without-jsonify "^1.0.1"
+    levn "^0.4.1"
+    lodash.merge "^4.6.2"
+    minimatch "^3.1.2"
+    natural-compare "^1.4.0"
+    optionator "^0.9.1"
+    regexpp "^3.2.0"
+    strip-ansi "^6.0.1"
+    strip-json-comments "^3.1.0"
+    text-table "^0.2.0"
+
+espree@^9.4.0:
+  version "9.4.1"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd"
+  integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==
+  dependencies:
+    acorn "^8.8.0"
+    acorn-jsx "^5.3.2"
+    eslint-visitor-keys "^3.3.0"
+
+esprima@^4.0.0, esprima@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+  integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+  dependencies:
+    estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+  dependencies:
+    estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+estree-walker@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
+  integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
+
+esutils@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+  version "1.8.1"
+  resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+  integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+eventemitter3@^3.0.0:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
+  integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
+
+eventemitter3@^4.0.0, eventemitter3@^4.0.7:
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+  integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+events@^3.2.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+execa@^5.0.0:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+  integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+  dependencies:
+    cross-spawn "^7.0.3"
+    get-stream "^6.0.0"
+    human-signals "^2.1.0"
+    is-stream "^2.0.0"
+    merge-stream "^2.0.0"
+    npm-run-path "^4.0.1"
+    onetime "^5.1.2"
+    signal-exit "^3.0.3"
+    strip-final-newline "^2.0.0"
+
+exit@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+  integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
+expect@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74"
+  integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    jest-get-type "^27.5.1"
+    jest-matcher-utils "^27.5.1"
+    jest-message-util "^27.5.1"
+
+express@^4.17.3:
+  version "4.18.1"
+  resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf"
+  integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==
+  dependencies:
+    accepts "~1.3.8"
+    array-flatten "1.1.1"
+    body-parser "1.20.0"
+    content-disposition "0.5.4"
+    content-type "~1.0.4"
+    cookie "0.5.0"
+    cookie-signature "1.0.6"
+    debug "2.6.9"
+    depd "2.0.0"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    finalhandler "1.2.0"
+    fresh "0.5.2"
+    http-errors "2.0.0"
+    merge-descriptors "1.0.1"
+    methods "~1.1.2"
+    on-finished "2.4.1"
+    parseurl "~1.3.3"
+    path-to-regexp "0.1.7"
+    proxy-addr "~2.0.7"
+    qs "6.10.3"
+    range-parser "~1.2.1"
+    safe-buffer "5.2.1"
+    send "0.18.0"
+    serve-static "1.15.0"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    type-is "~1.6.18"
+    utils-merge "1.0.1"
+    vary "~1.1.2"
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-diff@^1.1.2:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
+  integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
+
+fast-glob@^3.2.11, fast-glob@^3.2.9:
+  version "3.2.11"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
+  integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
+  dependencies:
+    "@nodelib/fs.stat" "^2.0.2"
+    "@nodelib/fs.walk" "^1.2.3"
+    glob-parent "^5.1.2"
+    merge2 "^1.3.0"
+    micromatch "^4.0.4"
+
+fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fastq@^1.6.0:
+  version "1.13.0"
+  resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
+  integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
+  dependencies:
+    reusify "^1.0.4"
+
+faye-websocket@^0.11.3:
+  version "0.11.4"
+  resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
+  integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
+  dependencies:
+    websocket-driver ">=0.5.1"
+
+fb-watchman@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+  integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+  dependencies:
+    bser "2.1.1"
+
+file-entry-cache@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+  dependencies:
+    flat-cache "^3.0.4"
+
+file-loader@^6.2.0:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d"
+  integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==
+  dependencies:
+    loader-utils "^2.0.0"
+    schema-utils "^3.0.0"
+
+file-selector@^0.1.12:
+  version "0.1.19"
+  resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.1.19.tgz#8ecc9d069a6f544f2e4a096b64a8052e70ec8abf"
+  integrity sha512-kCWw3+Aai8Uox+5tHCNgMFaUdgidxvMnLWO6fM5sZ0hA2wlHP5/DHGF0ECe84BiB95qdJbKNEJhWKVDvMN+JDQ==
+  dependencies:
+    tslib "^2.0.1"
+
+filelist@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
+  integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
+  dependencies:
+    minimatch "^5.0.1"
+
+filesize@^8.0.6:
+  version "8.0.7"
+  resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8"
+  integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==
+
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+filter-obj@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b"
+  integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==
+
+final-form-arrays@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/final-form-arrays/-/final-form-arrays-3.0.2.tgz#9f3bef778dec61432357744eb6f3abef7e7f3847"
+  integrity sha512-TfO8aZNz3RrsZCDx8GHMQcyztDNpGxSSi9w4wpSNKlmv2PfFWVVM8P7Yj5tj4n0OWax+x5YwTLhT5BnqSlCi+w==
+
+final-form@^4.20.4:
+  version "4.20.6"
+  resolved "https://registry.yarnpkg.com/final-form/-/final-form-4.20.6.tgz#da42f3741db068c0c875e18950a2c4a9a148c63e"
+  integrity sha512-fCdwIj49KOaFfDRlXB57Eo+GghIMZQWrA9TakQI3C9uQxHwaFHXqZSNRlUdfnQmNNeySwGOaGPZCvjy58hyv4w==
+  dependencies:
+    "@babel/runtime" "^7.10.0"
+
+finalhandler@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
+  integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
+  dependencies:
+    debug "2.6.9"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    on-finished "2.4.1"
+    parseurl "~1.3.3"
+    statuses "2.0.1"
+    unpipe "~1.0.0"
+
+find-cache-dir@^3.3.1:
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b"
+  integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==
+  dependencies:
+    commondir "^1.0.1"
+    make-dir "^3.0.2"
+    pkg-dir "^4.1.0"
+
+find-root@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+  integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+find-up@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+  dependencies:
+    locate-path "^2.0.0"
+
+find-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+  dependencies:
+    locate-path "^3.0.0"
+
+find-up@^4.0.0, find-up@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+  dependencies:
+    locate-path "^5.0.0"
+    path-exists "^4.0.0"
+
+find-up@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+  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.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+  integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+  dependencies:
+    flatted "^3.1.0"
+    rimraf "^3.0.2"
+
+flatted@^3.1.0:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2"
+  integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==
+
+follow-redirects@^1.0.0:
+  version "1.14.8"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
+  integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
+
+fork-ts-checker-webpack-plugin@^6.5.0:
+  version "6.5.2"
+  resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340"
+  integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==
+  dependencies:
+    "@babel/code-frame" "^7.8.3"
+    "@types/json-schema" "^7.0.5"
+    chalk "^4.1.0"
+    chokidar "^3.4.2"
+    cosmiconfig "^6.0.0"
+    deepmerge "^4.2.2"
+    fs-extra "^9.0.0"
+    glob "^7.1.6"
+    memfs "^3.1.2"
+    minimatch "^3.0.4"
+    schema-utils "2.7.0"
+    semver "^7.3.2"
+    tapable "^1.0.0"
+
+form-data@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
+  integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
+
+forwarded@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
+  integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+
+fraction.js@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
+  integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
+
+fresh@0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+  integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+fs-extra@^10.0.0:
+  version "10.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+  integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
+
+fs-extra@^9.0.0, fs-extra@^9.0.1:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+  integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+  dependencies:
+    at-least-node "^1.0.0"
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
+
+fs-monkey@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
+  integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^2.3.2, fsevents@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+function.prototype.name@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
+  integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.0"
+    functions-have-names "^1.2.2"
+
+functional-red-black-tree@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+functions-have-names@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+  integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+gensync@^1.0.0-beta.2:
+  version "1.0.0-beta.2"
+  resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
+  integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
+  dependencies:
+    function-bind "^1.1.1"
+    has "^1.0.3"
+    has-symbols "^1.0.1"
+
+get-own-enumerable-property-symbols@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+  integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-package-type@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+  integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-stream@^6.0.0:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
+get-symbol-description@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+  integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.1.1"
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+  integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+  dependencies:
+    is-glob "^4.0.3"
+
+glob-to-regexp@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
+  integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+global-modules@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+  integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+  dependencies:
+    global-prefix "^3.0.0"
+
+global-prefix@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+  integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+  dependencies:
+    ini "^1.3.5"
+    kind-of "^6.0.2"
+    which "^1.3.1"
+
+globals@^11.1.0:
+  version "11.12.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^13.19.0:
+  version "13.19.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8"
+  integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==
+  dependencies:
+    type-fest "^0.20.2"
+
+globby@^11.0.4, globby@^11.1.0:
+  version "11.1.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+  integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+  dependencies:
+    array-union "^2.1.0"
+    dir-glob "^3.0.1"
+    fast-glob "^3.2.9"
+    ignore "^5.2.0"
+    merge2 "^1.4.1"
+    slash "^3.0.0"
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
+  version "4.2.8"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
+  integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
+
+graceful-fs@^4.2.6, graceful-fs@^4.2.9:
+  version "4.2.10"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
+  integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
+
+grapheme-splitter@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
+  integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
+
+gzip-size@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
+  integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==
+  dependencies:
+    duplexer "^0.1.2"
+
+handle-thing@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
+  integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
+
+harmony-reflect@^1.4.6:
+  version "1.6.2"
+  resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710"
+  integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==
+
+has-bigints@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
+  integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
+
+has-bigints@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+  integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+  dependencies:
+    get-intrinsic "^1.1.1"
+
+has-symbols@^1.0.1, has-symbols@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
+  integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
+
+has-symbols@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-tostringtag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+  integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+  dependencies:
+    has-symbols "^1.0.2"
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+he@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+history@^4.9.0:
+  version "4.10.1"
+  resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
+  integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==
+  dependencies:
+    "@babel/runtime" "^7.1.2"
+    loose-envify "^1.2.0"
+    resolve-pathname "^3.0.0"
+    tiny-invariant "^1.0.2"
+    tiny-warning "^1.0.0"
+    value-equal "^1.0.1"
+
+hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+  integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+  dependencies:
+    react-is "^16.7.0"
+
+hoopy@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
+  integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
+
+hpack.js@^2.1.6:
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+  integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
+  dependencies:
+    inherits "^2.0.1"
+    obuf "^1.0.0"
+    readable-stream "^2.0.1"
+    wbuf "^1.1.0"
+
+html-encoding-sniffer@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
+  integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
+  dependencies:
+    whatwg-encoding "^1.0.5"
+
+html-entities@^2.1.0, html-entities@^2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46"
+  integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==
+
+html-escaper@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+  integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+html-minifier-terser@^6.0.2:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
+  integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==
+  dependencies:
+    camel-case "^4.1.2"
+    clean-css "^5.2.2"
+    commander "^8.3.0"
+    he "^1.2.0"
+    param-case "^3.0.4"
+    relateurl "^0.2.7"
+    terser "^5.10.0"
+
+html-webpack-plugin@^5.5.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50"
+  integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==
+  dependencies:
+    "@types/html-minifier-terser" "^6.0.0"
+    html-minifier-terser "^6.0.2"
+    lodash "^4.17.21"
+    pretty-error "^4.0.0"
+    tapable "^2.0.0"
+
+htmlparser2@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
+  integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.0.0"
+    domutils "^2.5.2"
+    entities "^2.0.0"
+
+http-deceiver@^1.2.7:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+  integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
+
+http-errors@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+  integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+  dependencies:
+    depd "2.0.0"
+    inherits "2.0.4"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    toidentifier "1.0.1"
+
+http-errors@~1.6.2:
+  version "1.6.3"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+  integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+  dependencies:
+    depd "~1.1.2"
+    inherits "2.0.3"
+    setprototypeof "1.1.0"
+    statuses ">= 1.4.0 < 2"
+
+http-parser-js@>=0.5.1:
+  version "0.5.5"
+  resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.5.tgz#d7c30d5d3c90d865b4a2e870181f9d6f22ac7ac5"
+  integrity sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==
+
+http-proxy-agent@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+  integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
+  dependencies:
+    "@tootallnate/once" "1"
+    agent-base "6"
+    debug "4"
+
+http-proxy-middleware@^2.0.3:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f"
+  integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==
+  dependencies:
+    "@types/http-proxy" "^1.17.8"
+    http-proxy "^1.18.1"
+    is-glob "^4.0.1"
+    is-plain-obj "^3.0.0"
+    micromatch "^4.0.2"
+
+http-proxy@^1.18.1:
+  version "1.18.1"
+  resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+  integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
+  dependencies:
+    eventemitter3 "^4.0.0"
+    follow-redirects "^1.0.0"
+    requires-port "^1.0.0"
+
+https-proxy-agent@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
+  integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
+  dependencies:
+    agent-base "6"
+    debug "4"
+
+human-signals@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+hyphenate-style-name@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
+  integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
+
+iconv-lite@0.4.24:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3"
+
+iconv-lite@^0.6.3:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
+icss-utils@^5.0.0, icss-utils@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
+  integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
+
+idb@^7.0.1:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/idb/-/idb-7.0.2.tgz#7a067e20dd16539938e456814b7d714ba8db3892"
+  integrity sha512-jjKrT1EnyZewQ/gCBb/eyiYrhGzws2FeY92Yx8qT9S9GeQAmo4JFVIiWRIfKW/6Ob9A+UDAOW9j9jn58fy2HIg==
+
+identity-obj-proxy@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14"
+  integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==
+  dependencies:
+    harmony-reflect "^1.4.6"
+
+ignore@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
+  integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+
+immer@^9.0.7:
+  version "9.0.15"
+  resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc"
+  integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==
+
+"immutable@^3.8.1 || ^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23"
+  integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==
+
+import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+  integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+  dependencies:
+    parent-module "^1.0.0"
+    resolve-from "^4.0.0"
+
+import-local@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0"
+  integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==
+  dependencies:
+    pkg-dir "^4.2.0"
+    resolve-cwd "^3.0.0"
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+inflection@~1.12.0:
+  version "1.12.0"
+  resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416"
+  integrity sha512-lRy4DxuIFWXlJU7ed8UiTJOSTqStqYdEb4CEbtXfNbkdj3nH1L+reUWiE10VWcJS2yR7tge8Z74pJjtBjNwj0w==
+
+inflection@~1.13.1:
+  version "1.13.1"
+  resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.1.tgz#c5cadd80888a90cf84c2e96e340d7edc85d5f0cb"
+  integrity sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA==
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+  integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.5:
+  version "1.3.8"
+  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+internal-slot@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
+  integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
+  dependencies:
+    get-intrinsic "^1.1.0"
+    has "^1.0.3"
+    side-channel "^1.0.4"
+
+ipaddr.js@1.9.1:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+  integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+ipaddr.js@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0"
+  integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-bigint@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+  integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+  dependencies:
+    has-bigints "^1.0.1"
+
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-boolean-object@^1.1.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+  integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-callable@^1.1.4, is-callable@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
+  integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
+
+is-core-module@^2.2.0:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548"
+  integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==
+  dependencies:
+    has "^1.0.3"
+
+is-core-module@^2.8.1, is-core-module@^2.9.0:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
+  integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
+  dependencies:
+    has "^1.0.3"
+
+is-date-object@^1.0.1:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+  integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-docker@^2.0.0, is-docker@^2.1.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+  integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-in-browser@^1.0.2, is-in-browser@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
+  integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=
+
+is-module@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
+  integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
+
+is-negative-zero@^2.0.1, is-negative-zero@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+  integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
+is-number-object@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0"
+  integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+  integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-path-inside@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+  integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-plain-obj@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
+  integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
+
+is-potential-custom-element-name@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
+  integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
+
+is-regex@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+  integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-regexp@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+  integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-root@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c"
+  integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==
+
+is-shared-array-buffer@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
+  integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
+
+is-shared-array-buffer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+  integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+  dependencies:
+    call-bind "^1.0.2"
+
+is-stream@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+  integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-string@^1.0.5, is-string@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+  integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+  integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+  dependencies:
+    has-symbols "^1.0.2"
+
+is-typedarray@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-weakref@^1.0.1, is-weakref@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+  integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+  dependencies:
+    call-bind "^1.0.2"
+
+is-wsl@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+  integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+  dependencies:
+    is-docker "^2.0.0"
+
+isarray@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+  integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
+  integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
+
+istanbul-lib-instrument@^5.0.4:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a"
+  integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==
+  dependencies:
+    "@babel/core" "^7.12.3"
+    "@babel/parser" "^7.14.7"
+    "@istanbuljs/schema" "^0.1.2"
+    istanbul-lib-coverage "^3.2.0"
+    semver "^6.3.0"
+
+istanbul-lib-instrument@^5.1.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f"
+  integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==
+  dependencies:
+    "@babel/core" "^7.12.3"
+    "@babel/parser" "^7.14.7"
+    "@istanbuljs/schema" "^0.1.2"
+    istanbul-lib-coverage "^3.2.0"
+    semver "^6.3.0"
+
+istanbul-lib-report@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
+  integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
+  dependencies:
+    istanbul-lib-coverage "^3.0.0"
+    make-dir "^3.0.0"
+    supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
+  integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
+  dependencies:
+    debug "^4.1.1"
+    istanbul-lib-coverage "^3.0.0"
+    source-map "^0.6.1"
+
+istanbul-reports@^3.1.3:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae"
+  integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==
+  dependencies:
+    html-escaper "^2.0.0"
+    istanbul-lib-report "^3.0.0"
+
+jake@^10.8.5:
+  version "10.8.5"
+  resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46"
+  integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==
+  dependencies:
+    async "^3.2.3"
+    chalk "^4.0.2"
+    filelist "^1.0.1"
+    minimatch "^3.0.4"
+
+jest-changed-files@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5"
+  integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    execa "^5.0.0"
+    throat "^6.0.1"
+
+jest-circus@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc"
+  integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==
+  dependencies:
+    "@jest/environment" "^27.5.1"
+    "@jest/test-result" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    co "^4.6.0"
+    dedent "^0.7.0"
+    expect "^27.5.1"
+    is-generator-fn "^2.0.0"
+    jest-each "^27.5.1"
+    jest-matcher-utils "^27.5.1"
+    jest-message-util "^27.5.1"
+    jest-runtime "^27.5.1"
+    jest-snapshot "^27.5.1"
+    jest-util "^27.5.1"
+    pretty-format "^27.5.1"
+    slash "^3.0.0"
+    stack-utils "^2.0.3"
+    throat "^6.0.1"
+
+jest-cli@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145"
+  integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==
+  dependencies:
+    "@jest/core" "^27.5.1"
+    "@jest/test-result" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    chalk "^4.0.0"
+    exit "^0.1.2"
+    graceful-fs "^4.2.9"
+    import-local "^3.0.2"
+    jest-config "^27.5.1"
+    jest-util "^27.5.1"
+    jest-validate "^27.5.1"
+    prompts "^2.0.1"
+    yargs "^16.2.0"
+
+jest-config@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41"
+  integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==
+  dependencies:
+    "@babel/core" "^7.8.0"
+    "@jest/test-sequencer" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    babel-jest "^27.5.1"
+    chalk "^4.0.0"
+    ci-info "^3.2.0"
+    deepmerge "^4.2.2"
+    glob "^7.1.1"
+    graceful-fs "^4.2.9"
+    jest-circus "^27.5.1"
+    jest-environment-jsdom "^27.5.1"
+    jest-environment-node "^27.5.1"
+    jest-get-type "^27.5.1"
+    jest-jasmine2 "^27.5.1"
+    jest-regex-util "^27.5.1"
+    jest-resolve "^27.5.1"
+    jest-runner "^27.5.1"
+    jest-util "^27.5.1"
+    jest-validate "^27.5.1"
+    micromatch "^4.0.4"
+    parse-json "^5.2.0"
+    pretty-format "^27.5.1"
+    slash "^3.0.0"
+    strip-json-comments "^3.1.1"
+
+jest-diff@^27.0.0:
+  version "27.4.2"
+  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.4.2.tgz#786b2a5211d854f848e2dcc1e324448e9481f36f"
+  integrity sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==
+  dependencies:
+    chalk "^4.0.0"
+    diff-sequences "^27.4.0"
+    jest-get-type "^27.4.0"
+    pretty-format "^27.4.2"
+
+jest-diff@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def"
+  integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==
+  dependencies:
+    chalk "^4.0.0"
+    diff-sequences "^27.5.1"
+    jest-get-type "^27.5.1"
+    pretty-format "^27.5.1"
+
+jest-docblock@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0"
+  integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==
+  dependencies:
+    detect-newline "^3.0.0"
+
+jest-each@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e"
+  integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    chalk "^4.0.0"
+    jest-get-type "^27.5.1"
+    jest-util "^27.5.1"
+    pretty-format "^27.5.1"
+
+jest-environment-jsdom@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546"
+  integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==
+  dependencies:
+    "@jest/environment" "^27.5.1"
+    "@jest/fake-timers" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    jest-mock "^27.5.1"
+    jest-util "^27.5.1"
+    jsdom "^16.6.0"
+
+jest-environment-node@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e"
+  integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==
+  dependencies:
+    "@jest/environment" "^27.5.1"
+    "@jest/fake-timers" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    jest-mock "^27.5.1"
+    jest-util "^27.5.1"
+
+jest-fetch-mock@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz#31749c456ae27b8919d69824f1c2bd85fe0a1f3b"
+  integrity sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==
+  dependencies:
+    cross-fetch "^3.0.4"
+    promise-polyfill "^8.1.3"
+
+jest-get-type@^27.4.0:
+  version "27.4.0"
+  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5"
+  integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==
+
+jest-get-type@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
+  integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==
+
+jest-haste-map@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f"
+  integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    "@types/graceful-fs" "^4.1.2"
+    "@types/node" "*"
+    anymatch "^3.0.3"
+    fb-watchman "^2.0.0"
+    graceful-fs "^4.2.9"
+    jest-regex-util "^27.5.1"
+    jest-serializer "^27.5.1"
+    jest-util "^27.5.1"
+    jest-worker "^27.5.1"
+    micromatch "^4.0.4"
+    walker "^1.0.7"
+  optionalDependencies:
+    fsevents "^2.3.2"
+
+jest-jasmine2@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4"
+  integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==
+  dependencies:
+    "@jest/environment" "^27.5.1"
+    "@jest/source-map" "^27.5.1"
+    "@jest/test-result" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    co "^4.6.0"
+    expect "^27.5.1"
+    is-generator-fn "^2.0.0"
+    jest-each "^27.5.1"
+    jest-matcher-utils "^27.5.1"
+    jest-message-util "^27.5.1"
+    jest-runtime "^27.5.1"
+    jest-snapshot "^27.5.1"
+    jest-util "^27.5.1"
+    pretty-format "^27.5.1"
+    throat "^6.0.1"
+
+jest-leak-detector@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8"
+  integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==
+  dependencies:
+    jest-get-type "^27.5.1"
+    pretty-format "^27.5.1"
+
+jest-matcher-utils@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
+  integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==
+  dependencies:
+    chalk "^4.0.0"
+    jest-diff "^27.5.1"
+    jest-get-type "^27.5.1"
+    pretty-format "^27.5.1"
+
+jest-message-util@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf"
+  integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==
+  dependencies:
+    "@babel/code-frame" "^7.12.13"
+    "@jest/types" "^27.5.1"
+    "@types/stack-utils" "^2.0.0"
+    chalk "^4.0.0"
+    graceful-fs "^4.2.9"
+    micromatch "^4.0.4"
+    pretty-format "^27.5.1"
+    slash "^3.0.0"
+    stack-utils "^2.0.3"
+
+jest-message-util@^28.1.3:
+  version "28.1.3"
+  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d"
+  integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==
+  dependencies:
+    "@babel/code-frame" "^7.12.13"
+    "@jest/types" "^28.1.3"
+    "@types/stack-utils" "^2.0.0"
+    chalk "^4.0.0"
+    graceful-fs "^4.2.9"
+    micromatch "^4.0.4"
+    pretty-format "^28.1.3"
+    slash "^3.0.0"
+    stack-utils "^2.0.3"
+
+jest-mock@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6"
+  integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+
+jest-pnp-resolver@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
+  integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
+
+jest-regex-util@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95"
+  integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==
+
+jest-regex-util@^28.0.0:
+  version "28.0.2"
+  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead"
+  integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==
+
+jest-resolve-dependencies@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8"
+  integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    jest-regex-util "^27.5.1"
+    jest-snapshot "^27.5.1"
+
+jest-resolve@^27.4.2, jest-resolve@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384"
+  integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    chalk "^4.0.0"
+    graceful-fs "^4.2.9"
+    jest-haste-map "^27.5.1"
+    jest-pnp-resolver "^1.2.2"
+    jest-util "^27.5.1"
+    jest-validate "^27.5.1"
+    resolve "^1.20.0"
+    resolve.exports "^1.1.0"
+    slash "^3.0.0"
+
+jest-runner@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5"
+  integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==
+  dependencies:
+    "@jest/console" "^27.5.1"
+    "@jest/environment" "^27.5.1"
+    "@jest/test-result" "^27.5.1"
+    "@jest/transform" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    emittery "^0.8.1"
+    graceful-fs "^4.2.9"
+    jest-docblock "^27.5.1"
+    jest-environment-jsdom "^27.5.1"
+    jest-environment-node "^27.5.1"
+    jest-haste-map "^27.5.1"
+    jest-leak-detector "^27.5.1"
+    jest-message-util "^27.5.1"
+    jest-resolve "^27.5.1"
+    jest-runtime "^27.5.1"
+    jest-util "^27.5.1"
+    jest-worker "^27.5.1"
+    source-map-support "^0.5.6"
+    throat "^6.0.1"
+
+jest-runtime@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af"
+  integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==
+  dependencies:
+    "@jest/environment" "^27.5.1"
+    "@jest/fake-timers" "^27.5.1"
+    "@jest/globals" "^27.5.1"
+    "@jest/source-map" "^27.5.1"
+    "@jest/test-result" "^27.5.1"
+    "@jest/transform" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    chalk "^4.0.0"
+    cjs-module-lexer "^1.0.0"
+    collect-v8-coverage "^1.0.0"
+    execa "^5.0.0"
+    glob "^7.1.3"
+    graceful-fs "^4.2.9"
+    jest-haste-map "^27.5.1"
+    jest-message-util "^27.5.1"
+    jest-mock "^27.5.1"
+    jest-regex-util "^27.5.1"
+    jest-resolve "^27.5.1"
+    jest-snapshot "^27.5.1"
+    jest-util "^27.5.1"
+    slash "^3.0.0"
+    strip-bom "^4.0.0"
+
+jest-serializer@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64"
+  integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==
+  dependencies:
+    "@types/node" "*"
+    graceful-fs "^4.2.9"
+
+jest-snapshot@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1"
+  integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==
+  dependencies:
+    "@babel/core" "^7.7.2"
+    "@babel/generator" "^7.7.2"
+    "@babel/plugin-syntax-typescript" "^7.7.2"
+    "@babel/traverse" "^7.7.2"
+    "@babel/types" "^7.0.0"
+    "@jest/transform" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/babel__traverse" "^7.0.4"
+    "@types/prettier" "^2.1.5"
+    babel-preset-current-node-syntax "^1.0.0"
+    chalk "^4.0.0"
+    expect "^27.5.1"
+    graceful-fs "^4.2.9"
+    jest-diff "^27.5.1"
+    jest-get-type "^27.5.1"
+    jest-haste-map "^27.5.1"
+    jest-matcher-utils "^27.5.1"
+    jest-message-util "^27.5.1"
+    jest-util "^27.5.1"
+    natural-compare "^1.4.0"
+    pretty-format "^27.5.1"
+    semver "^7.3.2"
+
+jest-util@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9"
+  integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    ci-info "^3.2.0"
+    graceful-fs "^4.2.9"
+    picomatch "^2.2.3"
+
+jest-util@^28.1.3:
+  version "28.1.3"
+  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0"
+  integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==
+  dependencies:
+    "@jest/types" "^28.1.3"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    ci-info "^3.2.0"
+    graceful-fs "^4.2.9"
+    picomatch "^2.2.3"
+
+jest-validate@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067"
+  integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==
+  dependencies:
+    "@jest/types" "^27.5.1"
+    camelcase "^6.2.0"
+    chalk "^4.0.0"
+    jest-get-type "^27.5.1"
+    leven "^3.1.0"
+    pretty-format "^27.5.1"
+
+jest-watch-typeahead@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz#b4a6826dfb9c9420da2f7bc900de59dad11266a9"
+  integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==
+  dependencies:
+    ansi-escapes "^4.3.1"
+    chalk "^4.0.0"
+    jest-regex-util "^28.0.0"
+    jest-watcher "^28.0.0"
+    slash "^4.0.0"
+    string-length "^5.0.1"
+    strip-ansi "^7.0.1"
+
+jest-watcher@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2"
+  integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==
+  dependencies:
+    "@jest/test-result" "^27.5.1"
+    "@jest/types" "^27.5.1"
+    "@types/node" "*"
+    ansi-escapes "^4.2.1"
+    chalk "^4.0.0"
+    jest-util "^27.5.1"
+    string-length "^4.0.1"
+
+jest-watcher@^28.0.0:
+  version "28.1.3"
+  resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4"
+  integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==
+  dependencies:
+    "@jest/test-result" "^28.1.3"
+    "@jest/types" "^28.1.3"
+    "@types/node" "*"
+    ansi-escapes "^4.2.1"
+    chalk "^4.0.0"
+    emittery "^0.10.2"
+    jest-util "^28.1.3"
+    string-length "^4.0.1"
+
+jest-worker@^26.2.1:
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
+  integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^7.0.0"
+
+jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+  integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+jest-worker@^28.0.2:
+  version "28.1.3"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98"
+  integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
+jest@^27.4.3:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc"
+  integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==
+  dependencies:
+    "@jest/core" "^27.5.1"
+    import-local "^3.0.2"
+    jest-cli "^27.5.1"
+
+js-sdsl@^4.1.4:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0"
+  integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==
+
+js-sha3@0.8.0:
+  version "0.8.0"
+  resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
+  integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+  version "3.14.1"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+  integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^4.0.0"
+
+js-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+  dependencies:
+    argparse "^2.0.1"
+
+jsdom@^16.6.0:
+  version "16.7.0"
+  resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
+  integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==
+  dependencies:
+    abab "^2.0.5"
+    acorn "^8.2.4"
+    acorn-globals "^6.0.0"
+    cssom "^0.4.4"
+    cssstyle "^2.3.0"
+    data-urls "^2.0.0"
+    decimal.js "^10.2.1"
+    domexception "^2.0.1"
+    escodegen "^2.0.0"
+    form-data "^3.0.0"
+    html-encoding-sniffer "^2.0.1"
+    http-proxy-agent "^4.0.1"
+    https-proxy-agent "^5.0.0"
+    is-potential-custom-element-name "^1.0.1"
+    nwsapi "^2.2.0"
+    parse5 "6.0.1"
+    saxes "^5.0.1"
+    symbol-tree "^3.2.4"
+    tough-cookie "^4.0.0"
+    w3c-hr-time "^1.0.2"
+    w3c-xmlserializer "^2.0.0"
+    webidl-conversions "^6.1.0"
+    whatwg-encoding "^1.0.5"
+    whatwg-mimetype "^2.3.0"
+    whatwg-url "^8.5.0"
+    ws "^7.4.6"
+    xml-name-validator "^3.0.0"
+
+jsesc@^2.5.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+  integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-schema@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
+  integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json5@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+  integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
+  dependencies:
+    minimist "^1.2.0"
+
+json5@^2.1.2, json5@^2.2.0, json5@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
+  integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
+
+jsonexport@^2.4.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/jsonexport/-/jsonexport-2.5.2.tgz#fafbcdb2cb8e12d0a2a92cda6e0634c8d48005ac"
+  integrity sha512-4joNLCxxUAmS22GN3GA5os/MYFnq8oqXOKvoCymmcT0MPz/QPZ5eA+Fh5sIPxUji45RKq8DdQ1yoKq91p4E9VA==
+
+jsonexport@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/jsonexport/-/jsonexport-3.2.0.tgz#e5b4905ea1f6c8f8e0f62e4ceb26e4a31f1c93a8"
+  integrity sha512-GbO9ugb0YTZatPd/hqCGR0FSwbr82H6OzG04yzdrG7XOe4QZ0jhQ+kOsB29zqkzoYJLmLxbbrFiuwbQu891XnQ==
+
+jsonfile@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+  dependencies:
+    universalify "^2.0.0"
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+jsonpointer@^5.0.0:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
+  integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
+
+jss-plugin-camel-case@^10.5.1:
+  version "10.9.0"
+  resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz#4921b568b38d893f39736ee8c4c5f1c64670aaf7"
+  integrity sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    hyphenate-style-name "^1.0.3"
+    jss "10.9.0"
+
+jss-plugin-default-unit@^10.5.1:
+  version "10.9.0"
+  resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz#bb23a48f075bc0ce852b4b4d3f7582bc002df991"
+  integrity sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    jss "10.9.0"
+
+jss-plugin-global@^10.5.1:
+  version "10.9.0"
+  resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz#fc07a0086ac97aca174e37edb480b69277f3931f"
+  integrity sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    jss "10.9.0"
+
+jss-plugin-nested@^10.5.1:
+  version "10.9.0"
+  resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz#cc1c7d63ad542c3ccc6e2c66c8328c6b6b00f4b3"
+  integrity sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    jss "10.9.0"
+    tiny-warning "^1.0.2"
+
+jss-plugin-props-sort@^10.5.1:
+  version "10.9.0"
+  resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz#30e9567ef9479043feb6e5e59db09b4de687c47d"
+  integrity sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    jss "10.9.0"
+
+jss-plugin-rule-value-function@^10.5.1:
+  version "10.9.0"
+  resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz#379fd2732c0746fe45168011fe25544c1a295d67"
+  integrity sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    jss "10.9.0"
+    tiny-warning "^1.0.2"
+
+jss-plugin-vendor-prefixer@^10.5.1:
+  version "10.9.0"
+  resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz#aa9df98abfb3f75f7ed59a3ec50a5452461a206a"
+  integrity sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    css-vendor "^2.0.8"
+    jss "10.9.0"
+
+jss@10.9.0, jss@^10.5.1:
+  version "10.9.0"
+  resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.0.tgz#7583ee2cdc904a83c872ba695d1baab4b59c141b"
+  integrity sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    csstype "^3.0.2"
+    is-in-browser "^1.1.3"
+    tiny-warning "^1.0.2"
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0":
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b"
+  integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==
+  dependencies:
+    array-includes "^3.1.3"
+    object.assign "^4.1.2"
+
+jsx-ast-utils@^3.3.2:
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz#afe5efe4332cd3515c065072bd4d6b0aa22152bd"
+  integrity sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==
+  dependencies:
+    array-includes "^3.1.5"
+    object.assign "^4.1.2"
+
+kind-of@^6.0.2:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+  integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+klona@^2.0.4, klona@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc"
+  integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==
+
+language-subtag-registry@~0.3.2:
+  version "0.3.21"
+  resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a"
+  integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==
+
+language-tags@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
+  integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=
+  dependencies:
+    language-subtag-registry "~0.3.2"
+
+leven@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+  integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levn@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+  integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+  dependencies:
+    prelude-ls "^1.2.1"
+    type-check "~0.4.0"
+
+levn@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+  dependencies:
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+
+lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4"
+  integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==
+
+lines-and-columns@^1.1.6:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+  integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+loader-runner@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+  integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+
+loader-utils@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
+  integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^2.1.2"
+
+loader-utils@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.0.tgz#bcecc51a7898bee7473d4bc6b845b23af8304d4f"
+  integrity sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==
+
+locate-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+  dependencies:
+    p-locate "^2.0.0"
+    path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+  dependencies:
+    p-locate "^3.0.0"
+    path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+  dependencies:
+    p-locate "^4.1.0"
+
+locate-path@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+  dependencies:
+    p-locate "^5.0.0"
+
+lodash.debounce@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+  integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
+
+lodash.isequalwith@^4.4.0:
+  version "4.4.0"
+  resolved "https://registry.yarnpkg.com/lodash.isequalwith/-/lodash.isequalwith-4.4.0.tgz#266726ddd528f854f21f4ea98a065606e0fbc6b0"
+  integrity sha1-Jmcm3dUo+FTyH06pigZWBuD7xrA=
+
+lodash.memoize@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+  integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.merge@^4.6.2:
+  version "4.6.2"
+  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash.sortby@^4.7.0:
+  version "4.7.0"
+  resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+  integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==
+
+lodash.uniq@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+  integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0, lodash@~4.17.5:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+  dependencies:
+    js-tokens "^3.0.0 || ^4.0.0"
+
+lower-case@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+  integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+  dependencies:
+    tslib "^2.0.3"
+
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+  dependencies:
+    yallist "^4.0.0"
+
+lz-string@^1.4.4:
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
+  integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=
+
+magic-string@^0.25.0, magic-string@^0.25.7:
+  version "0.25.7"
+  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
+  integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
+  dependencies:
+    sourcemap-codec "^1.4.4"
+
+make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+  dependencies:
+    semver "^6.0.0"
+
+makeerror@1.0.12:
+  version "1.0.12"
+  resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
+  integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
+  dependencies:
+    tmpl "1.0.5"
+
+match-sorter@^6.0.2:
+  version "6.3.1"
+  resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda"
+  integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    remove-accents "0.4.2"
+
+mdn-data@2.0.14:
+  version "2.0.14"
+  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
+  integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
+
+mdn-data@2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+  integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
+media-typer@0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+  integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+memfs@^3.1.2, memfs@^3.4.3:
+  version "3.4.7"
+  resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a"
+  integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==
+  dependencies:
+    fs-monkey "^1.0.3"
+
+merge-descriptors@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+  integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+merge-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0, merge2@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+methods@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+  integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micromatch@^4.0.2, micromatch@^4.0.4:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
+  integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
+  dependencies:
+    braces "^3.0.1"
+    picomatch "^2.2.3"
+
+micromatch@^4.0.5:
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+  dependencies:
+    braces "^3.0.2"
+    picomatch "^2.3.1"
+
+microseconds@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39"
+  integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==
+
+mime-db@1.51.0, "mime-db@>= 1.43.0 < 2":
+  version "1.51.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
+  integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
+
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24:
+  version "2.1.34"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
+  integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==
+  dependencies:
+    mime-db "1.51.0"
+
+mime-types@^2.1.31, mime-types@~2.1.34:
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+mime@1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mimic-fn@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+min-indent@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
+  integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+
+mini-create-react-context@^0.4.0:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e"
+  integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==
+  dependencies:
+    "@babel/runtime" "^7.12.1"
+    tiny-warning "^1.0.3"
+
+mini-css-extract-plugin@^2.4.5:
+  version "2.6.1"
+  resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e"
+  integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==
+  dependencies:
+    schema-utils "^4.0.0"
+
+minimalistic-assert@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+  integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimatch@3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimatch@^5.0.1:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7"
+  integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
+  integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
+
+mkdirp@~0.5.1:
+  version "0.5.5"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+  integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+  dependencies:
+    minimist "^1.2.5"
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@2.1.3, ms@^2.1.1:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+multicast-dns@^7.2.5:
+  version "7.2.5"
+  resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced"
+  integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==
+  dependencies:
+    dns-packet "^5.2.2"
+    thunky "^1.0.2"
+
+nano-time@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef"
+  integrity sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==
+  dependencies:
+    big-integer "^1.6.16"
+
+nanoid@^3.3.4:
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
+  integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+
+natural-compare@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+negotiator@0.6.2:
+  version "0.6.2"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+  integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+negotiator@0.6.3:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+  integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
+neo-async@^2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+no-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+  integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+  dependencies:
+    lower-case "^2.0.2"
+    tslib "^2.0.3"
+
+node-fetch@2.6.7:
+  version "2.6.7"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
+  integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+node-forge@^1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
+  integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
+
+node-int64@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+  integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-polyglot@^2.2.2:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/node-polyglot/-/node-polyglot-2.4.2.tgz#e4876e6710b70dc00b1351a9a68de4af47a5d61d"
+  integrity sha512-AgTVpQ32BQ5XPI+tFHJ9bCYxWwSLvtmEodX8ooftFhEuyCgBG6ijWulIVb7pH3THigtgvc9uLiPn0IO51KHpkg==
+  dependencies:
+    array.prototype.foreach "^1.0.0"
+    has "^1.0.3"
+    object.entries "^1.1.4"
+    string.prototype.trim "^1.2.4"
+    warning "^4.0.3"
+
+node-releases@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
+  integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
+
+node-releases@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
+  integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+  integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+
+normalize-url@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
+  integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
+
+npm-run-path@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+  dependencies:
+    path-key "^3.0.0"
+
+nth-check@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+  integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+  dependencies:
+    boolbase "~1.0.0"
+
+nth-check@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2"
+  integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==
+  dependencies:
+    boolbase "^1.0.0"
+
+nwsapi@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+  integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
+
+object-assign@^4.1.0, object-assign@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-hash@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
+  integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
+
+object-inspect@^1.11.0, object-inspect@^1.9.0:
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b"
+  integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==
+
+object-inspect@^1.12.0:
+  version "1.12.2"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
+  integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
+
+object-keys@^1.0.12, object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.0, object.assign@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
+  integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
+  dependencies:
+    call-bind "^1.0.0"
+    define-properties "^1.1.3"
+    has-symbols "^1.0.1"
+    object-keys "^1.1.1"
+
+object.entries@^1.1.4, object.entries@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
+  integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+
+object.fromentries@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251"
+  integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+
+object.getownpropertydescriptors@^2.1.0:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e"
+  integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+
+object.hasown@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3"
+  integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==
+  dependencies:
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+
+object.values@^1.1.0, object.values@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
+  integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+
+oblivious-set@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566"
+  integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==
+
+obuf@^1.0.0, obuf@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+  integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+on-finished@2.4.1:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
+  integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
+  dependencies:
+    ee-first "1.1.1"
+
+on-headers@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+  integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+  dependencies:
+    wrappy "1"
+
+onetime@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+  dependencies:
+    mimic-fn "^2.1.0"
+
+open@^8.0.9, open@^8.4.0:
+  version "8.4.0"
+  resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8"
+  integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==
+  dependencies:
+    define-lazy-prop "^2.0.0"
+    is-docker "^2.1.1"
+    is-wsl "^2.2.0"
+
+optionator@^0.8.1:
+  version "0.8.3"
+  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+  dependencies:
+    deep-is "~0.1.3"
+    fast-levenshtein "~2.0.6"
+    levn "~0.3.0"
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+    word-wrap "~1.2.3"
+
+optionator@^0.9.1:
+  version "0.9.1"
+  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+  dependencies:
+    deep-is "^0.1.3"
+    fast-levenshtein "^2.0.6"
+    levn "^0.4.1"
+    prelude-ls "^1.2.1"
+    type-check "^0.4.0"
+    word-wrap "^1.2.3"
+
+p-limit@^1.1.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+  dependencies:
+    p-try "^1.0.0"
+
+p-limit@^2.0.0, p-limit@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+p-limit@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+  dependencies:
+    yocto-queue "^0.1.0"
+
+p-locate@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+  dependencies:
+    p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+  dependencies:
+    p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+  dependencies:
+    p-limit "^2.2.0"
+
+p-locate@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+  dependencies:
+    p-limit "^3.0.2"
+
+p-retry@^4.5.0:
+  version "4.6.2"
+  resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
+  integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==
+  dependencies:
+    "@types/retry" "0.12.0"
+    retry "^0.13.1"
+
+p-try@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+papaparse@^5.2.0:
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.3.1.tgz#770b7a9124d821d4b2132132b7bd7dce7194b5b1"
+  integrity sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA==
+
+param-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+  integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+  dependencies:
+    dot-case "^3.0.4"
+    tslib "^2.0.3"
+
+parent-module@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+  dependencies:
+    callsites "^3.0.0"
+
+parse-json@^5.0.0, parse-json@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+  integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    error-ex "^1.3.1"
+    json-parse-even-better-errors "^2.3.0"
+    lines-and-columns "^1.1.6"
+
+parse5@6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
+  integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
+parseurl@~1.3.2, parseurl@~1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+  integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascal-case@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+  integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+  dependencies:
+    no-case "^3.0.4"
+    tslib "^2.0.3"
+
+path-exists@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-key@^3.0.0, path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6, path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-to-regexp@0.1.7:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+  integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+path-to-regexp@^1.7.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
+  integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
+  dependencies:
+    isarray "0.0.1"
+
+path-type@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+performance-now@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+picocolors@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
+  integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
+  integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
+
+picomatch@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pirates@^4.0.4:
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
+  integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
+
+pkg-dir@^4.1.0, pkg-dir@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+  dependencies:
+    find-up "^4.0.0"
+
+pkg-up@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
+  integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
+  dependencies:
+    find-up "^3.0.0"
+
+popper.js@1.16.1-lts:
+  version "1.16.1-lts"
+  resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05"
+  integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==
+
+postcss-attribute-case-insensitive@^5.0.1:
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741"
+  integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==
+  dependencies:
+    postcss-selector-parser "^6.0.10"
+
+postcss-browser-comments@^4:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz#bcfc86134df5807f5d3c0eefa191d42136b5e72a"
+  integrity sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==
+
+postcss-calc@^8.2.3:
+  version "8.2.4"
+  resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5"
+  integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==
+  dependencies:
+    postcss-selector-parser "^6.0.9"
+    postcss-value-parser "^4.2.0"
+
+postcss-clamp@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363"
+  integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-color-functional-notation@^4.2.3:
+  version "4.2.4"
+  resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec"
+  integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-color-hex-alpha@^8.0.4:
+  version "8.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5"
+  integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-color-rebeccapurple@^7.1.0:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0"
+  integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-colormin@^5.3.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a"
+  integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==
+  dependencies:
+    browserslist "^4.16.6"
+    caniuse-api "^3.0.0"
+    colord "^2.9.1"
+    postcss-value-parser "^4.2.0"
+
+postcss-convert-values@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab"
+  integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==
+  dependencies:
+    browserslist "^4.20.3"
+    postcss-value-parser "^4.2.0"
+
+postcss-custom-media@^8.0.2:
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea"
+  integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-custom-properties@^12.1.8:
+  version "12.1.8"
+  resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz#aa003e1885c5bd28e2e32496cd597e389ca889e4"
+  integrity sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-custom-selectors@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9"
+  integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==
+  dependencies:
+    postcss-selector-parser "^6.0.4"
+
+postcss-dir-pseudo-class@^6.0.4:
+  version "6.0.5"
+  resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c"
+  integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==
+  dependencies:
+    postcss-selector-parser "^6.0.10"
+
+postcss-discard-comments@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696"
+  integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==
+
+postcss-discard-duplicates@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848"
+  integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==
+
+postcss-discard-empty@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c"
+  integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==
+
+postcss-discard-overridden@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e"
+  integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==
+
+postcss-double-position-gradients@^3.1.1:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91"
+  integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==
+  dependencies:
+    "@csstools/postcss-progressive-custom-properties" "^1.1.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-env-function@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a"
+  integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-flexbugs-fixes@^5.0.2:
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d"
+  integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==
+
+postcss-focus-visible@^6.0.4:
+  version "6.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e"
+  integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==
+  dependencies:
+    postcss-selector-parser "^6.0.9"
+
+postcss-focus-within@^5.0.4:
+  version "5.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20"
+  integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==
+  dependencies:
+    postcss-selector-parser "^6.0.9"
+
+postcss-font-variant@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66"
+  integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==
+
+postcss-gap-properties@^3.0.3:
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff"
+  integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==
+
+postcss-image-set-function@^4.0.6:
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f"
+  integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-import@^14.1.0:
+  version "14.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0"
+  integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==
+  dependencies:
+    postcss-value-parser "^4.0.0"
+    read-cache "^1.0.0"
+    resolve "^1.1.7"
+
+postcss-initial@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42"
+  integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==
+
+postcss-js@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00"
+  integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==
+  dependencies:
+    camelcase-css "^2.0.1"
+
+postcss-lab-function@^4.2.0:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98"
+  integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==
+  dependencies:
+    "@csstools/postcss-progressive-custom-properties" "^1.1.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-load-config@^3.1.4:
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855"
+  integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==
+  dependencies:
+    lilconfig "^2.0.5"
+    yaml "^1.10.2"
+
+postcss-loader@^6.2.1:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef"
+  integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==
+  dependencies:
+    cosmiconfig "^7.0.0"
+    klona "^2.0.5"
+    semver "^7.3.5"
+
+postcss-logical@^5.0.4:
+  version "5.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73"
+  integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==
+
+postcss-media-minmax@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5"
+  integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==
+
+postcss-merge-longhand@^5.1.6:
+  version "5.1.6"
+  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce"
+  integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+    stylehacks "^5.1.0"
+
+postcss-merge-rules@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5"
+  integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==
+  dependencies:
+    browserslist "^4.16.6"
+    caniuse-api "^3.0.0"
+    cssnano-utils "^3.1.0"
+    postcss-selector-parser "^6.0.5"
+
+postcss-minify-font-values@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b"
+  integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-gradients@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c"
+  integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==
+  dependencies:
+    colord "^2.9.1"
+    cssnano-utils "^3.1.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-params@^5.1.3:
+  version "5.1.3"
+  resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9"
+  integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==
+  dependencies:
+    browserslist "^4.16.6"
+    cssnano-utils "^3.1.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-minify-selectors@^5.2.1:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6"
+  integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==
+  dependencies:
+    postcss-selector-parser "^6.0.5"
+
+postcss-modules-extract-imports@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
+  integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
+
+postcss-modules-local-by-default@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
+  integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
+  dependencies:
+    icss-utils "^5.0.0"
+    postcss-selector-parser "^6.0.2"
+    postcss-value-parser "^4.1.0"
+
+postcss-modules-scope@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06"
+  integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==
+  dependencies:
+    postcss-selector-parser "^6.0.4"
+
+postcss-modules-values@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
+  integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
+  dependencies:
+    icss-utils "^5.0.0"
+
+postcss-nested@5.0.6:
+  version "5.0.6"
+  resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc"
+  integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==
+  dependencies:
+    postcss-selector-parser "^6.0.6"
+
+postcss-nesting@^10.1.9:
+  version "10.1.10"
+  resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.1.10.tgz#9c396df3d8232cbedfa95baaac6b765b8fd2a817"
+  integrity sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==
+  dependencies:
+    "@csstools/selector-specificity" "^2.0.0"
+    postcss-selector-parser "^6.0.10"
+
+postcss-normalize-charset@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed"
+  integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==
+
+postcss-normalize-display-values@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8"
+  integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-positions@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92"
+  integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-repeat-style@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2"
+  integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-string@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228"
+  integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-timing-functions@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb"
+  integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-unicode@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75"
+  integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==
+  dependencies:
+    browserslist "^4.16.6"
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-url@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc"
+  integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==
+  dependencies:
+    normalize-url "^6.0.1"
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize-whitespace@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa"
+  integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-normalize@^10.0.1:
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-10.0.1.tgz#464692676b52792a06b06880a176279216540dd7"
+  integrity sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==
+  dependencies:
+    "@csstools/normalize.css" "*"
+    postcss-browser-comments "^4"
+    sanitize.css "*"
+
+postcss-opacity-percentage@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz#bd698bb3670a0a27f6d657cc16744b3ebf3b1145"
+  integrity sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==
+
+postcss-ordered-values@^5.1.3:
+  version "5.1.3"
+  resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38"
+  integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==
+  dependencies:
+    cssnano-utils "^3.1.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-overflow-shorthand@^3.0.3:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e"
+  integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-page-break@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f"
+  integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==
+
+postcss-place@^7.0.4:
+  version "7.0.5"
+  resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4"
+  integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-preset-env@^7.0.1:
+  version "7.7.2"
+  resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.7.2.tgz#769f7f21779b4688c9a6082ae1572416cab415cf"
+  integrity sha512-1q0ih7EDsZmCb/FMDRvosna7Gsbdx8CvYO5hYT120hcp2ZAuOHpSzibujZ4JpIUcAC02PG6b+eftxqjTFh5BNA==
+  dependencies:
+    "@csstools/postcss-cascade-layers" "^1.0.4"
+    "@csstools/postcss-color-function" "^1.1.0"
+    "@csstools/postcss-font-format-keywords" "^1.0.0"
+    "@csstools/postcss-hwb-function" "^1.0.1"
+    "@csstools/postcss-ic-unit" "^1.0.0"
+    "@csstools/postcss-is-pseudo-class" "^2.0.6"
+    "@csstools/postcss-normalize-display-values" "^1.0.0"
+    "@csstools/postcss-oklab-function" "^1.1.0"
+    "@csstools/postcss-progressive-custom-properties" "^1.3.0"
+    "@csstools/postcss-stepped-value-functions" "^1.0.0"
+    "@csstools/postcss-trigonometric-functions" "^1.0.1"
+    "@csstools/postcss-unset-value" "^1.0.1"
+    autoprefixer "^10.4.7"
+    browserslist "^4.21.0"
+    css-blank-pseudo "^3.0.3"
+    css-has-pseudo "^3.0.4"
+    css-prefers-color-scheme "^6.0.3"
+    cssdb "^6.6.3"
+    postcss-attribute-case-insensitive "^5.0.1"
+    postcss-clamp "^4.1.0"
+    postcss-color-functional-notation "^4.2.3"
+    postcss-color-hex-alpha "^8.0.4"
+    postcss-color-rebeccapurple "^7.1.0"
+    postcss-custom-media "^8.0.2"
+    postcss-custom-properties "^12.1.8"
+    postcss-custom-selectors "^6.0.3"
+    postcss-dir-pseudo-class "^6.0.4"
+    postcss-double-position-gradients "^3.1.1"
+    postcss-env-function "^4.0.6"
+    postcss-focus-visible "^6.0.4"
+    postcss-focus-within "^5.0.4"
+    postcss-font-variant "^5.0.0"
+    postcss-gap-properties "^3.0.3"
+    postcss-image-set-function "^4.0.6"
+    postcss-initial "^4.0.1"
+    postcss-lab-function "^4.2.0"
+    postcss-logical "^5.0.4"
+    postcss-media-minmax "^5.0.0"
+    postcss-nesting "^10.1.9"
+    postcss-opacity-percentage "^1.1.2"
+    postcss-overflow-shorthand "^3.0.3"
+    postcss-page-break "^3.0.4"
+    postcss-place "^7.0.4"
+    postcss-pseudo-class-any-link "^7.1.5"
+    postcss-replace-overflow-wrap "^4.0.0"
+    postcss-selector-not "^6.0.0"
+    postcss-value-parser "^4.2.0"
+
+postcss-pseudo-class-any-link@^7.1.5:
+  version "7.1.6"
+  resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab"
+  integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==
+  dependencies:
+    postcss-selector-parser "^6.0.10"
+
+postcss-reduce-initial@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6"
+  integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==
+  dependencies:
+    browserslist "^4.16.6"
+    caniuse-api "^3.0.0"
+
+postcss-reduce-transforms@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9"
+  integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+
+postcss-replace-overflow-wrap@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319"
+  integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==
+
+postcss-selector-not@^6.0.0:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d"
+  integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==
+  dependencies:
+    postcss-selector-parser "^6.0.10"
+
+postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9:
+  version "6.0.10"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
+  integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
+  dependencies:
+    cssesc "^3.0.0"
+    util-deprecate "^1.0.2"
+
+postcss-selector-parser@^6.0.2:
+  version "6.0.7"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.7.tgz#48404830a635113a71fd79397de8209ed05a66fc"
+  integrity sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA==
+  dependencies:
+    cssesc "^3.0.0"
+    util-deprecate "^1.0.2"
+
+postcss-svgo@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d"
+  integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==
+  dependencies:
+    postcss-value-parser "^4.2.0"
+    svgo "^2.7.0"
+
+postcss-unique-selectors@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6"
+  integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==
+  dependencies:
+    postcss-selector-parser "^6.0.5"
+
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+  integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@^7.0.35:
+  version "7.0.39"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
+  integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
+  dependencies:
+    picocolors "^0.2.1"
+    source-map "^0.6.1"
+
+postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.4, postcss@^8.4.7:
+  version "8.4.14"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
+  integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
+  dependencies:
+    nanoid "^3.3.4"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.2"
+
+prelude-ls@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prelude-ls@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prettier-linter-helpers@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
+  integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+  dependencies:
+    fast-diff "^1.1.2"
+
+prettier@^2.2.0:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
+  integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
+
+pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
+  version "5.6.0"
+  resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
+  integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
+
+pretty-error@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
+  integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==
+  dependencies:
+    lodash "^4.17.20"
+    renderkid "^3.0.0"
+
+pretty-format@^26.6.2:
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93"
+  integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==
+  dependencies:
+    "@jest/types" "^26.6.2"
+    ansi-regex "^5.0.0"
+    ansi-styles "^4.0.0"
+    react-is "^17.0.1"
+
+pretty-format@^27.0.0, pretty-format@^27.4.2:
+  version "27.4.2"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.2.tgz#e4ce92ad66c3888423d332b40477c87d1dac1fb8"
+  integrity sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==
+  dependencies:
+    "@jest/types" "^27.4.2"
+    ansi-regex "^5.0.1"
+    ansi-styles "^5.0.0"
+    react-is "^17.0.1"
+
+pretty-format@^27.5.1:
+  version "27.5.1"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
+  integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
+  dependencies:
+    ansi-regex "^5.0.1"
+    ansi-styles "^5.0.0"
+    react-is "^17.0.1"
+
+pretty-format@^28.1.3:
+  version "28.1.3"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5"
+  integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==
+  dependencies:
+    "@jest/schemas" "^28.1.3"
+    ansi-regex "^5.0.1"
+    ansi-styles "^5.0.0"
+    react-is "^18.0.0"
+
+process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+promise-polyfill@^8.1.3:
+  version "8.2.1"
+  resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.2.1.tgz#1fa955b325bee4f6b8a4311e18148d4e5b46d254"
+  integrity sha512-3p9zj0cEHbp7NVUxEYUWjQlffXqnXaZIMPkAO7HhFh8u5636xLRDHOUo2vpWSK0T2mqm6fKLXYn1KP6PAZ2gKg==
+
+promise@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e"
+  integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==
+  dependencies:
+    asap "~2.0.6"
+
+prompts@^2.0.1, prompts@^2.4.2:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
+  integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
+  dependencies:
+    kleur "^3.0.3"
+    sisteransi "^1.0.5"
+
+prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.0, prop-types@^15.7.2:
+  version "15.7.2"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+  integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+  dependencies:
+    loose-envify "^1.4.0"
+    object-assign "^4.1.1"
+    react-is "^16.8.1"
+
+prop-types@^15.8.1:
+  version "15.8.1"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+  integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+  dependencies:
+    loose-envify "^1.4.0"
+    object-assign "^4.1.1"
+    react-is "^16.13.1"
+
+proxy-addr@~2.0.7:
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+  integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+  dependencies:
+    forwarded "0.2.0"
+    ipaddr.js "1.9.1"
+
+psl@^1.1.33:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+  integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+
+punycode@^2.1.0, punycode@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.1.2:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+  integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qs@6.10.3:
+  version "6.10.3"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e"
+  integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==
+  dependencies:
+    side-channel "^1.0.4"
+
+query-string@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
+  integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
+  dependencies:
+    decode-uri-component "^0.2.0"
+    object-assign "^4.1.0"
+    strict-uri-encode "^1.0.0"
+
+query-string@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.1.tgz#754620669db978625a90f635f12617c271a088e1"
+  integrity sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==
+  dependencies:
+    decode-uri-component "^0.2.0"
+    filter-obj "^1.1.0"
+    split-on-first "^1.0.0"
+    strict-uri-encode "^2.0.0"
+
+queue-microtask@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+quick-lru@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+  integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+ra-core@^3.19.7:
+  version "3.19.7"
+  resolved "https://registry.yarnpkg.com/ra-core/-/ra-core-3.19.7.tgz#c7e9313000434dd991d06846ef154b5dfed6a650"
+  integrity sha512-ar85cQ7vtIIrb6Ijj8Om+IkuB4i4uuoMcfvDgLxaNOEyImq+n3osVHi93FkZKpdZAHQ9qKnkN83SODhoRdaGfg==
+  dependencies:
+    classnames "~2.3.1"
+    date-fns "^1.29.0"
+    eventemitter3 "^3.0.0"
+    inflection "~1.13.1"
+    lodash "~4.17.5"
+    prop-types "^15.6.1"
+    query-string "^5.1.1"
+    reselect "~3.0.0"
+
+ra-core@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/ra-core/-/ra-core-4.2.0.tgz#46b9a07f8ff159f26d89557ea8ccb199d0a23e95"
+  integrity sha512-m6Ep7W84V/flIWpv/zPVfTqmvwduaxIO8zZlIUoXg1kPXRTSZH/EcO1A1zcvMM/HflWLoJ2LcZ4sE5fz3Je/1w==
+  dependencies:
+    clsx "^1.1.1"
+    date-fns "^2.19.0"
+    eventemitter3 "^4.0.7"
+    inflection "~1.12.0"
+    jsonexport "^3.2.0"
+    lodash "~4.17.5"
+    prop-types "^15.6.1"
+    query-string "^7.1.1"
+    react-is "^17.0.2"
+    react-query "^3.32.1"
+
+ra-i18n-polyglot@^3.19.7:
+  version "3.19.7"
+  resolved "https://registry.yarnpkg.com/ra-i18n-polyglot/-/ra-i18n-polyglot-3.19.7.tgz#948418e8db1b1b72918906e577dd5843ab0891ea"
+  integrity sha512-aexuR6laKN2VcgRfxikD3zKZ2zpH3nIY9dkt4oEdpRci15PmxO1feahmM2dzFrswlSjAOQ8J8qi3pa1m7V51xw==
+  dependencies:
+    node-polyglot "^2.2.2"
+    ra-core "^3.19.7"
+
+ra-language-chinese@^2.0.10:
+  version "2.0.10"
+  resolved "https://registry.yarnpkg.com/ra-language-chinese/-/ra-language-chinese-2.0.10.tgz#7c51b4d13cd6cf62cf8b4e945e489ac85bdc0e7f"
+  integrity sha512-k+X6XdkBEZnmpKIJZj9Lb77Lj8LCmterilJTj2ovp3i8/H/dLo9IujASfjFypjHnVUpN7Y63LT19kgPrS6+row==
+
+ra-language-english@^3.19.7:
+  version "3.19.7"
+  resolved "https://registry.yarnpkg.com/ra-language-english/-/ra-language-english-3.19.7.tgz#fe6fe553eb72e5a37e50e55b83e5d928508841ea"
+  integrity sha512-iqSWXaAOafzrh8uPlJG9Ey1fCCFFnGajynnHlZXh+E10pZ/ZDlIVZDpd7GAY1BxkKh5GPYRqNk+kDxCwXAG3fQ==
+  dependencies:
+    ra-core "^3.19.7"
+
+ra-language-french@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/ra-language-french/-/ra-language-french-4.2.0.tgz#d579be604b212877ae86482e19a623c4886a424c"
+  integrity sha512-kBDJgMTRet2pHNRZZ/7f+t70ZRXzDZwld6pGO0exP1V+5Grv45K3OWY/jolbmMJKAU34jMYUf/GIaw51Xub0Ag==
+  dependencies:
+    ra-core "^4.2.0"
+
+ra-language-german@^3.13.4:
+  version "3.13.5"
+  resolved "https://registry.yarnpkg.com/ra-language-german/-/ra-language-german-3.13.5.tgz#553385555907713a2ae08ba8f7aabd041b922936"
+  integrity sha512-dGWWJbIP5FUp0axoH+7sZj6011IgifEz55FLij3QSBI4ZusDdH/CL3l4oy+srUXFI+IzoXGGtQPJ7ax3p11cLQ==
+
+ra-test@^3.15.0:
+  version "3.19.4"
+  resolved "https://registry.yarnpkg.com/ra-test/-/ra-test-3.19.4.tgz#fa50fd8a7334ed8769da905bd26bdfac624cb9b8"
+  integrity sha512-a2lP6X2dgyVEZgCuk0uevoa26DvZRPPqwbba2ORJpQ9hllbgjHuz0XlhoNe+cHF4k8buB9O3SurHS2c+s3VL0A==
+  dependencies:
+    "@testing-library/react" "^11.2.3"
+    classnames "~2.3.1"
+    lodash "~4.17.5"
+
+ra-ui-materialui@^3.19.7:
+  version "3.19.7"
+  resolved "https://registry.yarnpkg.com/ra-ui-materialui/-/ra-ui-materialui-3.19.7.tgz#5bfc2f686d879b5ace87c551ee3fbe41619d55b9"
+  integrity sha512-Ojuh5hGpwFnKxZldUCc4uTN56QQtkWTU8bqKkp9Jx9bcFhcilBCv5knD+/ApfkrQan2bKTSwR2gS1F5LiC4hAg==
+  dependencies:
+    autosuggest-highlight "^3.1.1"
+    classnames "~2.2.5"
+    connected-react-router "^6.5.2"
+    css-mediaquery "^0.1.2"
+    downshift "3.2.7"
+    inflection "~1.13.1"
+    jsonexport "^2.4.1"
+    lodash "~4.17.5"
+    prop-types "^15.7.0"
+    query-string "^5.1.1"
+    react-dropzone "^10.1.7"
+    react-transition-group "^4.4.1"
+
+raf@^3.4.1:
+  version "3.4.1"
+  resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
+  integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
+  dependencies:
+    performance-now "^2.1.0"
+
+randombytes@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+  integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.5.1:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
+  integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
+  dependencies:
+    bytes "3.1.2"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    unpipe "1.0.0"
+
+react-admin@^3.19.7:
+  version "3.19.7"
+  resolved "https://registry.yarnpkg.com/react-admin/-/react-admin-3.19.7.tgz#8c679a7ee497a7441b8fc7e2e8149694755ff834"
+  integrity sha512-LDNVYlyjVgtYWf1DrfjI+4SLVUFRxZUKhm16zK4iynAmvFQBKpnjg9VnAlaoSb98I0b86GiE0f69f90egmZvNg==
+  dependencies:
+    "@material-ui/core" "^4.12.1"
+    "@material-ui/icons" "^4.11.2"
+    "@material-ui/styles" "^4.11.2"
+    connected-react-router "^6.5.2"
+    final-form "^4.20.4"
+    final-form-arrays "^3.0.2"
+    ra-core "^3.19.7"
+    ra-i18n-polyglot "^3.19.7"
+    ra-language-english "^3.19.7"
+    ra-ui-materialui "^3.19.7"
+    react-final-form "^6.5.7"
+    react-final-form-arrays "^3.1.3"
+    react-redux "^7.1.0"
+    react-router "^5.1.0"
+    react-router-dom "^5.1.0"
+    redux "^3.7.2 || ^4.0.3"
+    redux-saga "^1.0.0"
+
+react-app-polyfill@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7"
+  integrity sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==
+  dependencies:
+    core-js "^3.19.2"
+    object-assign "^4.1.1"
+    promise "^8.1.0"
+    raf "^3.4.1"
+    regenerator-runtime "^0.13.9"
+    whatwg-fetch "^3.6.2"
+
+react-dev-utils@^12.0.1:
+  version "12.0.1"
+  resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73"
+  integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==
+  dependencies:
+    "@babel/code-frame" "^7.16.0"
+    address "^1.1.2"
+    browserslist "^4.18.1"
+    chalk "^4.1.2"
+    cross-spawn "^7.0.3"
+    detect-port-alt "^1.1.6"
+    escape-string-regexp "^4.0.0"
+    filesize "^8.0.6"
+    find-up "^5.0.0"
+    fork-ts-checker-webpack-plugin "^6.5.0"
+    global-modules "^2.0.0"
+    globby "^11.0.4"
+    gzip-size "^6.0.0"
+    immer "^9.0.7"
+    is-root "^2.1.0"
+    loader-utils "^3.2.0"
+    open "^8.4.0"
+    pkg-up "^3.1.0"
+    prompts "^2.4.2"
+    react-error-overlay "^6.0.11"
+    recursive-readdir "^2.2.2"
+    shell-quote "^1.7.3"
+    strip-ansi "^6.0.1"
+    text-table "^0.2.0"
+
+react-dom@^17.0.2:
+  version "17.0.2"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
+  integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+    scheduler "^0.20.2"
+
+react-dropzone@^10.1.7:
+  version "10.2.2"
+  resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-10.2.2.tgz#67b4db7459589a42c3b891a82eaf9ade7650b815"
+  integrity sha512-U5EKckXVt6IrEyhMMsgmHQiWTGLudhajPPG77KFSvgsMqNEHSyGpqWvOMc5+DhEah/vH4E1n+J5weBNLd5VtyA==
+  dependencies:
+    attr-accept "^2.0.0"
+    file-selector "^0.1.12"
+    prop-types "^15.7.2"
+
+react-error-overlay@^6.0.11:
+  version "6.0.11"
+  resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
+  integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==
+
+react-final-form-arrays@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/react-final-form-arrays/-/react-final-form-arrays-3.1.3.tgz#d3594c500495a4cf5e437070ada989da9624bba2"
+  integrity sha512-dzBiLfbr9l1YRExARBpJ8uA/djBenCvFrbrsXjd362joDl3vT+WhmMKKr6HDQMJffjA8T4gZ3n5+G9M59yZfuQ==
+  dependencies:
+    "@babel/runtime" "^7.12.1"
+
+react-final-form@^6.5.7:
+  version "6.5.7"
+  resolved "https://registry.yarnpkg.com/react-final-form/-/react-final-form-6.5.7.tgz#0c1098accf0f0011adee5a46076ed1b99ed1b1ea"
+  integrity sha512-o7tvJXB+McGiXOILqIC8lnOcX4aLhIBiF/Xi9Qet35b7XOS8R7KL8HLRKTfnZWQJm6MCE15v1U0SFive0NcxyA==
+  dependencies:
+    "@babel/runtime" "^7.15.4"
+
+react-is@^16.13.1, react-is@^16.5.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
+  version "16.13.1"
+  resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+  integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1, react-is@^17.0.2:
+  version "17.0.2"
+  resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
+  integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
+
+react-is@^18.0.0:
+  version "18.2.0"
+  resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
+  integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+
+react-query@^3.32.1:
+  version "3.39.1"
+  resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.1.tgz#3876c0fdac7a3b5a84e195534e5fa8fbdd628847"
+  integrity sha512-qYKT1bavdDiQZbngWZyPotlBVzcBjDYEJg5RQLBa++5Ix5jjfbEYJmHSZRZD+USVHUSvl/ey9Hu+QfF1QAK80A==
+  dependencies:
+    "@babel/runtime" "^7.5.5"
+    broadcast-channel "^3.4.1"
+    match-sorter "^6.0.2"
+
+react-redux@^7.1.0:
+  version "7.2.6"
+  resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.6.tgz#49633a24fe552b5f9caf58feb8a138936ddfe9aa"
+  integrity sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==
+  dependencies:
+    "@babel/runtime" "^7.15.4"
+    "@types/react-redux" "^7.1.20"
+    hoist-non-react-statics "^3.3.2"
+    loose-envify "^1.4.0"
+    prop-types "^15.7.2"
+    react-is "^17.0.2"
+
+react-refresh@^0.11.0:
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046"
+  integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==
+
+react-router-dom@^5.1.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.0.tgz#da1bfb535a0e89a712a93b97dd76f47ad1f32363"
+  integrity sha512-ObVBLjUZsphUUMVycibxgMdh5jJ1e3o+KpAZBVeHcNQZ4W+uUGGWsokurzlF4YOldQYRQL4y6yFRWM4m3svmuQ==
+  dependencies:
+    "@babel/runtime" "^7.12.13"
+    history "^4.9.0"
+    loose-envify "^1.3.1"
+    prop-types "^15.6.2"
+    react-router "5.2.1"
+    tiny-invariant "^1.0.2"
+    tiny-warning "^1.0.0"
+
+react-router@5.2.1, react-router@^5.1.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.1.tgz#4d2e4e9d5ae9425091845b8dbc6d9d276239774d"
+  integrity sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ==
+  dependencies:
+    "@babel/runtime" "^7.12.13"
+    history "^4.9.0"
+    hoist-non-react-statics "^3.1.0"
+    loose-envify "^1.3.1"
+    mini-create-react-context "^0.4.0"
+    path-to-regexp "^1.7.0"
+    prop-types "^15.6.2"
+    react-is "^16.6.0"
+    tiny-invariant "^1.0.2"
+    tiny-warning "^1.0.0"
+
+react-scripts@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003"
+  integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==
+  dependencies:
+    "@babel/core" "^7.16.0"
+    "@pmmmwh/react-refresh-webpack-plugin" "^0.5.3"
+    "@svgr/webpack" "^5.5.0"
+    babel-jest "^27.4.2"
+    babel-loader "^8.2.3"
+    babel-plugin-named-asset-import "^0.3.8"
+    babel-preset-react-app "^10.0.1"
+    bfj "^7.0.2"
+    browserslist "^4.18.1"
+    camelcase "^6.2.1"
+    case-sensitive-paths-webpack-plugin "^2.4.0"
+    css-loader "^6.5.1"
+    css-minimizer-webpack-plugin "^3.2.0"
+    dotenv "^10.0.0"
+    dotenv-expand "^5.1.0"
+    eslint "^8.3.0"
+    eslint-config-react-app "^7.0.1"
+    eslint-webpack-plugin "^3.1.1"
+    file-loader "^6.2.0"
+    fs-extra "^10.0.0"
+    html-webpack-plugin "^5.5.0"
+    identity-obj-proxy "^3.0.0"
+    jest "^27.4.3"
+    jest-resolve "^27.4.2"
+    jest-watch-typeahead "^1.0.0"
+    mini-css-extract-plugin "^2.4.5"
+    postcss "^8.4.4"
+    postcss-flexbugs-fixes "^5.0.2"
+    postcss-loader "^6.2.1"
+    postcss-normalize "^10.0.1"
+    postcss-preset-env "^7.0.1"
+    prompts "^2.4.2"
+    react-app-polyfill "^3.0.0"
+    react-dev-utils "^12.0.1"
+    react-refresh "^0.11.0"
+    resolve "^1.20.0"
+    resolve-url-loader "^4.0.0"
+    sass-loader "^12.3.0"
+    semver "^7.3.5"
+    source-map-loader "^3.0.0"
+    style-loader "^3.3.1"
+    tailwindcss "^3.0.2"
+    terser-webpack-plugin "^5.2.5"
+    webpack "^5.64.4"
+    webpack-dev-server "^4.6.0"
+    webpack-manifest-plugin "^4.0.2"
+    workbox-webpack-plugin "^6.4.1"
+  optionalDependencies:
+    fsevents "^2.3.2"
+
+react-transition-group@^4.4.0, react-transition-group@^4.4.1, react-transition-group@^4.4.2:
+  version "4.4.2"
+  resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470"
+  integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==
+  dependencies:
+    "@babel/runtime" "^7.5.5"
+    dom-helpers "^5.0.1"
+    loose-envify "^1.4.0"
+    prop-types "^15.6.2"
+
+react@^17.0.0:
+  version "17.0.2"
+  resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
+  integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+
+read-cache@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
+  integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
+  dependencies:
+    pify "^2.3.0"
+
+readable-stream@^2.0.1:
+  version "2.3.7"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+  integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
+readable-stream@^3.0.6:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+  integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+recursive-readdir@^2.2.2:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f"
+  integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==
+  dependencies:
+    minimatch "3.0.4"
+
+redent@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+  integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+  dependencies:
+    indent-string "^4.0.0"
+    strip-indent "^3.0.0"
+
+redux-saga@^1.0.0:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.1.3.tgz#9f3e6aebd3c994bbc0f6901a625f9a42b51d1112"
+  integrity sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw==
+  dependencies:
+    "@redux-saga/core" "^1.1.3"
+
+"redux@^3.7.2 || ^4.0.3", redux@^4.0.0, redux@^4.0.4:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104"
+  integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==
+  dependencies:
+    "@babel/runtime" "^7.9.2"
+
+regenerate-unicode-properties@^10.0.1:
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56"
+  integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==
+  dependencies:
+    regenerate "^1.4.2"
+
+regenerate-unicode-properties@^9.0.0:
+  version "9.0.0"
+  resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326"
+  integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==
+  dependencies:
+    regenerate "^1.4.2"
+
+regenerate@^1.4.2:
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+  integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regenerator-runtime@^0.13.11:
+  version "0.13.11"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
+  integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
+
+regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9:
+  version "0.13.9"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
+  integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
+
+regenerator-transform@^0.14.2:
+  version "0.14.5"
+  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4"
+  integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==
+  dependencies:
+    "@babel/runtime" "^7.8.4"
+
+regenerator-transform@^0.15.0:
+  version "0.15.0"
+  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537"
+  integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==
+  dependencies:
+    "@babel/runtime" "^7.8.4"
+
+regex-parser@^2.2.11:
+  version "2.2.11"
+  resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58"
+  integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==
+
+regexp.prototype.flags@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
+  integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+
+regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
+  integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    functions-have-names "^1.2.2"
+
+regexpp@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
+  integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+
+regexpu-core@^4.7.1:
+  version "4.8.0"
+  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0"
+  integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==
+  dependencies:
+    regenerate "^1.4.2"
+    regenerate-unicode-properties "^9.0.0"
+    regjsgen "^0.5.2"
+    regjsparser "^0.7.0"
+    unicode-match-property-ecmascript "^2.0.0"
+    unicode-match-property-value-ecmascript "^2.0.0"
+
+regexpu-core@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d"
+  integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==
+  dependencies:
+    regenerate "^1.4.2"
+    regenerate-unicode-properties "^10.0.1"
+    regjsgen "^0.6.0"
+    regjsparser "^0.8.2"
+    unicode-match-property-ecmascript "^2.0.0"
+    unicode-match-property-value-ecmascript "^2.0.0"
+
+regjsgen@^0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
+  integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
+
+regjsgen@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d"
+  integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==
+
+regjsparser@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968"
+  integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==
+  dependencies:
+    jsesc "~0.5.0"
+
+regjsparser@^0.8.2:
+  version "0.8.4"
+  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f"
+  integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==
+  dependencies:
+    jsesc "~0.5.0"
+
+relateurl@^0.2.7:
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
+
+remove-accents@0.4.2:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5"
+  integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==
+
+renderkid@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a"
+  integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==
+  dependencies:
+    css-select "^4.1.3"
+    dom-converter "^0.2.0"
+    htmlparser2 "^6.1.0"
+    lodash "^4.17.21"
+    strip-ansi "^6.0.1"
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-from-string@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+requires-port@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+  integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+reselect@~3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
+  integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=
+
+resolve-cwd@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+  integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+  dependencies:
+    resolve-from "^5.0.0"
+
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-from@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+  integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-pathname@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
+  integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
+
+resolve-url-loader@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57"
+  integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==
+  dependencies:
+    adjust-sourcemap-loader "^4.0.0"
+    convert-source-map "^1.7.0"
+    loader-utils "^2.0.0"
+    postcss "^7.0.35"
+    source-map "0.6.1"
+
+resolve.exports@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9"
+  integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==
+
+resolve@^1.1.7, resolve@^1.12.0, resolve@^1.22.0, resolve@^1.22.1:
+  version "1.22.1"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
+  integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
+  dependencies:
+    is-core-module "^2.9.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0:
+  version "1.20.0"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
+  integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
+  dependencies:
+    is-core-module "^2.2.0"
+    path-parse "^1.0.6"
+
+resolve@^2.0.0-next.3:
+  version "2.0.0-next.3"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
+  integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==
+  dependencies:
+    is-core-module "^2.2.0"
+    path-parse "^1.0.6"
+
+retry@^0.13.1:
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
+  integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==
+
+reusify@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+  dependencies:
+    glob "^7.1.3"
+
+rollup-plugin-terser@^7.0.0:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
+  integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==
+  dependencies:
+    "@babel/code-frame" "^7.10.4"
+    jest-worker "^26.2.1"
+    serialize-javascript "^4.0.0"
+    terser "^5.0.0"
+
+rollup@^2.43.1:
+  version "2.77.2"
+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3"
+  integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+run-parallel@^1.1.9:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+  integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+  dependencies:
+    queue-microtask "^1.2.2"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sanitize.css@*:
+  version "13.0.0"
+  resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173"
+  integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==
+
+sass-loader@^12.3.0:
+  version "12.6.0"
+  resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb"
+  integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==
+  dependencies:
+    klona "^2.0.4"
+    neo-async "^2.6.2"
+
+sax@~1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+saxes@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
+  integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
+  dependencies:
+    xmlchars "^2.2.0"
+
+scheduler@^0.20.2:
+  version "0.20.2"
+  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
+  integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+
+schema-utils@2.7.0:
+  version "2.7.0"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7"
+  integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==
+  dependencies:
+    "@types/json-schema" "^7.0.4"
+    ajv "^6.12.2"
+    ajv-keywords "^3.4.1"
+
+schema-utils@^2.6.5:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
+  integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
+  dependencies:
+    "@types/json-schema" "^7.0.5"
+    ajv "^6.12.4"
+    ajv-keywords "^3.5.2"
+
+schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281"
+  integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==
+  dependencies:
+    "@types/json-schema" "^7.0.8"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
+schema-utils@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7"
+  integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==
+  dependencies:
+    "@types/json-schema" "^7.0.9"
+    ajv "^8.8.0"
+    ajv-formats "^2.1.1"
+    ajv-keywords "^5.0.0"
+
+seamless-immutable@^7.1.3:
+  version "7.1.4"
+  resolved "https://registry.yarnpkg.com/seamless-immutable/-/seamless-immutable-7.1.4.tgz#6e9536def083ddc4dea0207d722e0e80d0f372f8"
+  integrity sha512-XiUO1QP4ki4E2PHegiGAlu6r82o5A+6tRh7IkGGTVg/h+UoeX4nFBeCGPOhb4CYjvkqsfm/TUtvOMYC1xmV30A==
+
+select-hose@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+  integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
+
+selfsigned@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56"
+  integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==
+  dependencies:
+    node-forge "^1"
+
+semver@7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+  integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
+  version "6.3.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.2, semver@^7.3.5:
+  version "7.3.5"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+  integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
+  dependencies:
+    lru-cache "^6.0.0"
+
+semver@^7.3.7:
+  version "7.3.7"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
+  integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
+  dependencies:
+    lru-cache "^6.0.0"
+
+send@0.18.0:
+  version "0.18.0"
+  resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
+  integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
+  dependencies:
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    fresh "0.5.2"
+    http-errors "2.0.0"
+    mime "1.6.0"
+    ms "2.1.3"
+    on-finished "2.4.1"
+    range-parser "~1.2.1"
+    statuses "2.0.1"
+
+serialize-javascript@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+  integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+  dependencies:
+    randombytes "^2.1.0"
+
+serialize-javascript@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
+  integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
+  dependencies:
+    randombytes "^2.1.0"
+
+serve-index@^1.9.1:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+  integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
+  dependencies:
+    accepts "~1.3.4"
+    batch "0.6.1"
+    debug "2.6.9"
+    escape-html "~1.0.3"
+    http-errors "~1.6.2"
+    mime-types "~2.1.17"
+    parseurl "~1.3.2"
+
+serve-static@1.15.0:
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
+  integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
+  dependencies:
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    parseurl "~1.3.3"
+    send "0.18.0"
+
+setprototypeof@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+  integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+  integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@^1.7.3:
+  version "1.7.3"
+  resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
+  integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
+
+side-channel@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+  dependencies:
+    call-bind "^1.0.0"
+    get-intrinsic "^1.0.2"
+    object-inspect "^1.9.0"
+
+signal-exit@^3.0.2:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af"
+  integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==
+
+signal-exit@^3.0.3:
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+sisteransi@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+  integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slash@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+  integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+
+sockjs@^0.3.24:
+  version "0.3.24"
+  resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
+  integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==
+  dependencies:
+    faye-websocket "^0.11.3"
+    uuid "^8.3.2"
+    websocket-driver "^0.7.4"
+
+source-list-map@^2.0.0, source-list-map@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+  integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-js@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf"
+  integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==
+
+source-map-js@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+source-map-loader@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.1.tgz#9ae5edc7c2d42570934be4c95d1ccc6352eba52d"
+  integrity sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==
+  dependencies:
+    abab "^2.0.5"
+    iconv-lite "^0.6.3"
+    source-map-js "^1.0.1"
+
+source-map-support@^0.5.6, source-map-support@~0.5.20:
+  version "0.5.21"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.5.0, source-map@^0.5.7:
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.7.3:
+  version "0.7.3"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+  integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+source-map@^0.8.0-beta.0:
+  version "0.8.0-beta.0"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
+  integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==
+  dependencies:
+    whatwg-url "^7.0.0"
+
+sourcemap-codec@^1.4.4:
+  version "1.4.8"
+  resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+  integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+spdy-transport@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+  integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+  dependencies:
+    debug "^4.1.0"
+    detect-node "^2.0.4"
+    hpack.js "^2.1.6"
+    obuf "^1.1.2"
+    readable-stream "^3.0.6"
+    wbuf "^1.7.3"
+
+spdy@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
+  integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
+  dependencies:
+    debug "^4.1.0"
+    handle-thing "^2.0.0"
+    http-deceiver "^1.2.7"
+    select-hose "^2.0.0"
+    spdy-transport "^3.0.0"
+
+split-on-first@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
+  integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
+
+sprintf-js@~1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+stable@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+  integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+stack-utils@^2.0.3:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5"
+  integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==
+  dependencies:
+    escape-string-regexp "^2.0.0"
+
+stackframe@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303"
+  integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==
+
+statuses@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+  integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
+"statuses@>= 1.4.0 < 2":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+  integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+strict-uri-encode@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+  integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+
+strict-uri-encode@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
+  integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
+
+string-length@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
+  integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
+  dependencies:
+    char-regex "^1.0.2"
+    strip-ansi "^6.0.0"
+
+string-length@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e"
+  integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==
+  dependencies:
+    char-regex "^2.0.0"
+    strip-ansi "^7.0.1"
+
+string-natural-compare@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4"
+  integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==
+
+string-width@^4.1.0, string-width@^4.2.0:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+string.prototype.matchall@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa"
+  integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+    get-intrinsic "^1.1.1"
+    has-symbols "^1.0.2"
+    internal-slot "^1.0.3"
+    regexp.prototype.flags "^1.3.1"
+    side-channel "^1.0.4"
+
+string.prototype.matchall@^4.0.7:
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
+  integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+    get-intrinsic "^1.1.1"
+    has-symbols "^1.0.3"
+    internal-slot "^1.0.3"
+    regexp.prototype.flags "^1.4.1"
+    side-channel "^1.0.4"
+
+string.prototype.trim@^1.2.4:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz#a587bcc8bfad8cb9829a577f5de30dd170c1682c"
+  integrity sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+
+string.prototype.trimend@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
+  integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+
+string.prototype.trimend@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
+  integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+
+string.prototype.trimstart@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
+  integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+
+string.prototype.trimstart@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
+  integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+
+string_decoder@^1.1.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+stringify-object@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+  integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+  dependencies:
+    get-own-enumerable-property-symbols "^3.0.0"
+    is-obj "^1.0.1"
+    is-regexp "^1.0.0"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2"
+  integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==
+  dependencies:
+    ansi-regex "^6.0.1"
+
+strip-bom@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-bom@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+  integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+strip-comments@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b"
+  integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==
+
+strip-final-newline@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-indent@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+  integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+  dependencies:
+    min-indent "^1.0.0"
+
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+style-loader@^3.3.1:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575"
+  integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==
+
+stylehacks@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520"
+  integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==
+  dependencies:
+    browserslist "^4.16.6"
+    postcss-selector-parser "^6.0.4"
+
+stylis@4.0.13:
+  version "4.0.13"
+  resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91"
+  integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==
+
+supports-color@^5.3.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  dependencies:
+    has-flag "^3.0.0"
+
+supports-color@^7.0.0, supports-color@^7.1.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-color@^8.0.0:
+  version "8.1.1"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+  integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-hyperlinks@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb"
+  integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==
+  dependencies:
+    has-flag "^4.0.0"
+    supports-color "^7.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+svg-parser@^2.0.2:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5"
+  integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==
+
+svgo@^1.2.2:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
+  integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
+  dependencies:
+    chalk "^2.4.1"
+    coa "^2.0.2"
+    css-select "^2.0.0"
+    css-select-base-adapter "^0.1.1"
+    css-tree "1.0.0-alpha.37"
+    csso "^4.0.2"
+    js-yaml "^3.13.1"
+    mkdirp "~0.5.1"
+    object.values "^1.1.0"
+    sax "~1.2.4"
+    stable "^0.1.8"
+    unquote "~1.1.1"
+    util.promisify "~1.0.0"
+
+svgo@^2.7.0:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24"
+  integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==
+  dependencies:
+    "@trysound/sax" "0.2.0"
+    commander "^7.2.0"
+    css-select "^4.1.3"
+    css-tree "^1.1.3"
+    csso "^4.2.0"
+    picocolors "^1.0.0"
+    stable "^0.1.8"
+
+symbol-tree@^3.2.4:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+  integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+tailwindcss@^3.0.2:
+  version "3.1.7"
+  resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.7.tgz#ce99425f30a74e01457a2e6a724463b0df3159ac"
+  integrity sha512-r7mgumZ3k0InfVPpGWcX8X/Ut4xBfv+1O/+C73ar/m01LxGVzWvPxF/w6xIUPEztrCoz7axfx0SMdh8FH8ZvRQ==
+  dependencies:
+    arg "^5.0.2"
+    chokidar "^3.5.3"
+    color-name "^1.1.4"
+    detective "^5.2.1"
+    didyoumean "^1.2.2"
+    dlv "^1.1.3"
+    fast-glob "^3.2.11"
+    glob-parent "^6.0.2"
+    is-glob "^4.0.3"
+    lilconfig "^2.0.6"
+    normalize-path "^3.0.0"
+    object-hash "^3.0.0"
+    picocolors "^1.0.0"
+    postcss "^8.4.14"
+    postcss-import "^14.1.0"
+    postcss-js "^4.0.0"
+    postcss-load-config "^3.1.4"
+    postcss-nested "5.0.6"
+    postcss-selector-parser "^6.0.10"
+    postcss-value-parser "^4.2.0"
+    quick-lru "^5.1.1"
+    resolve "^1.22.1"
+
+tapable@^1.0.0:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+  integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+  integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+temp-dir@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e"
+  integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==
+
+tempy@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3"
+  integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==
+  dependencies:
+    is-stream "^2.0.0"
+    temp-dir "^2.0.0"
+    type-fest "^0.16.0"
+    unique-string "^2.0.0"
+
+terminal-link@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+  integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+  dependencies:
+    ansi-escapes "^4.2.1"
+    supports-hyperlinks "^2.0.0"
+
+terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5:
+  version "5.3.3"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90"
+  integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==
+  dependencies:
+    "@jridgewell/trace-mapping" "^0.3.7"
+    jest-worker "^27.4.5"
+    schema-utils "^3.1.1"
+    serialize-javascript "^6.0.0"
+    terser "^5.7.2"
+
+terser@^5.0.0, terser@^5.10.0, terser@^5.7.2:
+  version "5.14.2"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10"
+  integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==
+  dependencies:
+    "@jridgewell/source-map" "^0.3.2"
+    acorn "^8.5.0"
+    commander "^2.20.0"
+    source-map-support "~0.5.20"
+
+test-exclude@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+  integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+  dependencies:
+    "@istanbuljs/schema" "^0.1.2"
+    glob "^7.1.4"
+    minimatch "^3.0.4"
+
+text-table@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+throat@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"
+  integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==
+
+thunky@^1.0.2:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+  integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+tiny-invariant@^1.0.2:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9"
+  integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==
+
+tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+  integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+tmpl@1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
+  integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
+
+to-fast-properties@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+  integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+toidentifier@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+  integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
+tough-cookie@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
+  integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==
+  dependencies:
+    psl "^1.1.33"
+    punycode "^2.1.1"
+    universalify "^0.1.2"
+
+tr46@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+  integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==
+  dependencies:
+    punycode "^2.1.0"
+
+tr46@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
+  integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==
+  dependencies:
+    punycode "^2.1.1"
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
+
+tryer@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
+  integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
+
+tsconfig-paths@^3.14.1:
+  version "3.14.1"
+  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
+  integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
+  dependencies:
+    "@types/json5" "^0.0.29"
+    json5 "^1.0.1"
+    minimist "^1.2.6"
+    strip-bom "^3.0.0"
+
+tslib@^1.8.1:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.0.1, tslib@^2.0.3:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
+  integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
+
+tsutils@^3.21.0:
+  version "3.21.0"
+  resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+  integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+  dependencies:
+    tslib "^1.8.1"
+
+type-check@^0.4.0, type-check@~0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+  dependencies:
+    prelude-ls "^1.2.1"
+
+type-check@~0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+  dependencies:
+    prelude-ls "~1.1.2"
+
+type-detect@4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+  integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.16.0:
+  version "0.16.0"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"
+  integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==
+
+type-fest@^0.20.2:
+  version "0.20.2"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+type-fest@^0.21.3:
+  version "0.21.3"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+  integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+type-is@~1.6.18:
+  version "1.6.18"
+  resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+  integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+  dependencies:
+    media-typer "0.3.0"
+    mime-types "~2.1.24"
+
+typedarray-to-buffer@^3.1.5:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+  integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+  dependencies:
+    is-typedarray "^1.0.0"
+
+typescript-compare@^0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425"
+  integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==
+  dependencies:
+    typescript-logic "^0.0.0"
+
+typescript-logic@^0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196"
+  integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==
+
+typescript-tuple@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2"
+  integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==
+  dependencies:
+    typescript-compare "^0.0.2"
+
+unbox-primitive@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
+  integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
+  dependencies:
+    function-bind "^1.1.1"
+    has-bigints "^1.0.1"
+    has-symbols "^1.0.2"
+    which-boxed-primitive "^1.0.2"
+
+unbox-primitive@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+  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"
+
+unicode-canonical-property-names-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
+  integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==
+
+unicode-match-property-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
+  integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
+  dependencies:
+    unicode-canonical-property-names-ecmascript "^2.0.0"
+    unicode-property-aliases-ecmascript "^2.0.0"
+
+unicode-match-property-value-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714"
+  integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==
+
+unicode-property-aliases-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8"
+  integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==
+
+unique-string@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+  integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+  dependencies:
+    crypto-random-string "^2.0.0"
+
+universalify@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+  integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+unload@2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7"
+  integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==
+  dependencies:
+    "@babel/runtime" "^7.6.2"
+    detect-node "^2.0.4"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+  integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unquote@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+  integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
+upath@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+  integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+update-browserslist-db@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38"
+  integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==
+  dependencies:
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util.promisify@~1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
+  integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.2"
+    has-symbols "^1.0.1"
+    object.getownpropertydescriptors "^2.1.0"
+
+utila@~0.4:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
+
+utils-merge@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+  integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@^8.3.2:
+  version "8.3.2"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+  integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+v8-to-istanbul@^8.1.0:
+  version "8.1.1"
+  resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed"
+  integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==
+  dependencies:
+    "@types/istanbul-lib-coverage" "^2.0.1"
+    convert-source-map "^1.6.0"
+    source-map "^0.7.3"
+
+value-equal@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
+  integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
+
+vary@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+  integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+w3c-hr-time@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+  integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+  dependencies:
+    browser-process-hrtime "^1.0.0"
+
+w3c-xmlserializer@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
+  integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
+  dependencies:
+    xml-name-validator "^3.0.0"
+
+walker@^1.0.7:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
+  integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
+  dependencies:
+    makeerror "1.0.12"
+
+warning@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+  integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+  dependencies:
+    loose-envify "^1.0.0"
+
+watchpack@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
+  integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
+  dependencies:
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.1.2"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+  version "1.7.3"
+  resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+  integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+  dependencies:
+    minimalistic-assert "^1.0.0"
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
+
+webidl-conversions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+  integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+webidl-conversions@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
+  integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
+
+webidl-conversions@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
+  integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
+
+webpack-dev-middleware@^5.3.1:
+  version "5.3.3"
+  resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f"
+  integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==
+  dependencies:
+    colorette "^2.0.10"
+    memfs "^3.4.3"
+    mime-types "^2.1.31"
+    range-parser "^1.2.1"
+    schema-utils "^4.0.0"
+
+webpack-dev-server@^4.6.0:
+  version "4.9.3"
+  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9"
+  integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==
+  dependencies:
+    "@types/bonjour" "^3.5.9"
+    "@types/connect-history-api-fallback" "^1.3.5"
+    "@types/express" "^4.17.13"
+    "@types/serve-index" "^1.9.1"
+    "@types/serve-static" "^1.13.10"
+    "@types/sockjs" "^0.3.33"
+    "@types/ws" "^8.5.1"
+    ansi-html-community "^0.0.8"
+    bonjour-service "^1.0.11"
+    chokidar "^3.5.3"
+    colorette "^2.0.10"
+    compression "^1.7.4"
+    connect-history-api-fallback "^2.0.0"
+    default-gateway "^6.0.3"
+    express "^4.17.3"
+    graceful-fs "^4.2.6"
+    html-entities "^2.3.2"
+    http-proxy-middleware "^2.0.3"
+    ipaddr.js "^2.0.1"
+    open "^8.0.9"
+    p-retry "^4.5.0"
+    rimraf "^3.0.2"
+    schema-utils "^4.0.0"
+    selfsigned "^2.0.1"
+    serve-index "^1.9.1"
+    sockjs "^0.3.24"
+    spdy "^4.0.2"
+    webpack-dev-middleware "^5.3.1"
+    ws "^8.4.2"
+
+webpack-manifest-plugin@^4.0.2:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz#10f8dbf4714ff93a215d5a45bcc416d80506f94f"
+  integrity sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==
+  dependencies:
+    tapable "^2.0.0"
+    webpack-sources "^2.2.0"
+
+webpack-sources@^1.4.3:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+  integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+  dependencies:
+    source-list-map "^2.0.0"
+    source-map "~0.6.1"
+
+webpack-sources@^2.2.0:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd"
+  integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==
+  dependencies:
+    source-list-map "^2.0.1"
+    source-map "^0.6.1"
+
+webpack-sources@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+webpack@^5.64.4:
+  version "5.74.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980"
+  integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==
+  dependencies:
+    "@types/eslint-scope" "^3.7.3"
+    "@types/estree" "^0.0.51"
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/wasm-edit" "1.11.1"
+    "@webassemblyjs/wasm-parser" "1.11.1"
+    acorn "^8.7.1"
+    acorn-import-assertions "^1.7.6"
+    browserslist "^4.14.5"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^5.10.0"
+    es-module-lexer "^0.9.0"
+    eslint-scope "5.1.1"
+    events "^3.2.0"
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.2.9"
+    json-parse-even-better-errors "^2.3.1"
+    loader-runner "^4.2.0"
+    mime-types "^2.1.27"
+    neo-async "^2.6.2"
+    schema-utils "^3.1.0"
+    tapable "^2.1.1"
+    terser-webpack-plugin "^5.1.3"
+    watchpack "^2.4.0"
+    webpack-sources "^3.2.3"
+
+websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
+  version "0.7.4"
+  resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
+  integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
+  dependencies:
+    http-parser-js ">=0.5.1"
+    safe-buffer ">=5.1.0"
+    websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
+  integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
+
+whatwg-encoding@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+  integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+  dependencies:
+    iconv-lite "0.4.24"
+
+whatwg-fetch@^3.6.2:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
+  integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
+
+whatwg-mimetype@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+  integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+whatwg-url@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+  integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
+  dependencies:
+    lodash.sortby "^4.7.0"
+    tr46 "^1.0.1"
+    webidl-conversions "^4.0.2"
+
+whatwg-url@^8.0.0, whatwg-url@^8.5.0:
+  version "8.7.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
+  integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==
+  dependencies:
+    lodash "^4.7.0"
+    tr46 "^2.1.0"
+    webidl-conversions "^6.1.0"
+
+which-boxed-primitive@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+  integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+  dependencies:
+    is-bigint "^1.0.1"
+    is-boolean-object "^1.1.0"
+    is-number-object "^1.0.4"
+    is-string "^1.0.5"
+    is-symbol "^1.0.3"
+
+which@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+  dependencies:
+    isexe "^2.0.0"
+
+which@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+word-wrap@^1.2.3, word-wrap@~1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+workbox-background-sync@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9"
+  integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==
+  dependencies:
+    idb "^7.0.1"
+    workbox-core "6.5.4"
+
+workbox-broadcast-update@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66"
+  integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==
+  dependencies:
+    workbox-core "6.5.4"
+
+workbox-build@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389"
+  integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==
+  dependencies:
+    "@apideck/better-ajv-errors" "^0.3.1"
+    "@babel/core" "^7.11.1"
+    "@babel/preset-env" "^7.11.0"
+    "@babel/runtime" "^7.11.2"
+    "@rollup/plugin-babel" "^5.2.0"
+    "@rollup/plugin-node-resolve" "^11.2.1"
+    "@rollup/plugin-replace" "^2.4.1"
+    "@surma/rollup-plugin-off-main-thread" "^2.2.3"
+    ajv "^8.6.0"
+    common-tags "^1.8.0"
+    fast-json-stable-stringify "^2.1.0"
+    fs-extra "^9.0.1"
+    glob "^7.1.6"
+    lodash "^4.17.20"
+    pretty-bytes "^5.3.0"
+    rollup "^2.43.1"
+    rollup-plugin-terser "^7.0.0"
+    source-map "^0.8.0-beta.0"
+    stringify-object "^3.3.0"
+    strip-comments "^2.0.1"
+    tempy "^0.6.0"
+    upath "^1.2.0"
+    workbox-background-sync "6.5.4"
+    workbox-broadcast-update "6.5.4"
+    workbox-cacheable-response "6.5.4"
+    workbox-core "6.5.4"
+    workbox-expiration "6.5.4"
+    workbox-google-analytics "6.5.4"
+    workbox-navigation-preload "6.5.4"
+    workbox-precaching "6.5.4"
+    workbox-range-requests "6.5.4"
+    workbox-recipes "6.5.4"
+    workbox-routing "6.5.4"
+    workbox-strategies "6.5.4"
+    workbox-streams "6.5.4"
+    workbox-sw "6.5.4"
+    workbox-window "6.5.4"
+
+workbox-cacheable-response@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137"
+  integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==
+  dependencies:
+    workbox-core "6.5.4"
+
+workbox-core@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba"
+  integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==
+
+workbox-expiration@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539"
+  integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==
+  dependencies:
+    idb "^7.0.1"
+    workbox-core "6.5.4"
+
+workbox-google-analytics@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d"
+  integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==
+  dependencies:
+    workbox-background-sync "6.5.4"
+    workbox-core "6.5.4"
+    workbox-routing "6.5.4"
+    workbox-strategies "6.5.4"
+
+workbox-navigation-preload@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212"
+  integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==
+  dependencies:
+    workbox-core "6.5.4"
+
+workbox-precaching@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72"
+  integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==
+  dependencies:
+    workbox-core "6.5.4"
+    workbox-routing "6.5.4"
+    workbox-strategies "6.5.4"
+
+workbox-range-requests@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399"
+  integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==
+  dependencies:
+    workbox-core "6.5.4"
+
+workbox-recipes@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb"
+  integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==
+  dependencies:
+    workbox-cacheable-response "6.5.4"
+    workbox-core "6.5.4"
+    workbox-expiration "6.5.4"
+    workbox-precaching "6.5.4"
+    workbox-routing "6.5.4"
+    workbox-strategies "6.5.4"
+
+workbox-routing@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da"
+  integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==
+  dependencies:
+    workbox-core "6.5.4"
+
+workbox-strategies@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d"
+  integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==
+  dependencies:
+    workbox-core "6.5.4"
+
+workbox-streams@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69"
+  integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==
+  dependencies:
+    workbox-core "6.5.4"
+    workbox-routing "6.5.4"
+
+workbox-sw@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736"
+  integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==
+
+workbox-webpack-plugin@^6.4.1:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz#baf2d3f4b8f435f3469887cf4fba2b7fac3d0fd7"
+  integrity sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==
+  dependencies:
+    fast-json-stable-stringify "^2.1.0"
+    pretty-bytes "^5.4.1"
+    upath "^1.2.0"
+    webpack-sources "^1.4.3"
+    workbox-build "6.5.4"
+
+workbox-window@6.5.4:
+  version "6.5.4"
+  resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91"
+  integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==
+  dependencies:
+    "@types/trusted-types" "^2.0.2"
+    workbox-core "6.5.4"
+
+wrap-ansi@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@^3.0.0:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+  integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+  dependencies:
+    imurmurhash "^0.1.4"
+    is-typedarray "^1.0.0"
+    signal-exit "^3.0.2"
+    typedarray-to-buffer "^3.1.5"
+
+ws@^7.4.6:
+  version "7.5.6"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b"
+  integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==
+
+ws@^8.4.2:
+  version "8.8.1"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0"
+  integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==
+
+xml-name-validator@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+  integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xmlchars@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+  integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
+xtend@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^5.0.5:
+  version "5.0.8"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+  integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2:
+  version "1.10.2"
+  resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+  integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yargs-parser@^20.2.2:
+  version "20.2.9"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+  integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
+yargs@^16.2.0:
+  version "16.2.0"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+  integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+  dependencies:
+    cliui "^7.0.2"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
+    require-directory "^2.1.1"
+    string-width "^4.2.0"
+    y18n "^5.0.5"
+    yargs-parser "^20.2.2"
+
+yocto-queue@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/nixpkgs/pkgs/tools/admin/tigervnc/default.nix b/nixpkgs/pkgs/tools/admin/tigervnc/default.nix
new file mode 100644
index 000000000000..53d0fe662bfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tigervnc/default.nix
@@ -0,0 +1,161 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, xorg
+, xkeyboard_config
+, zlib
+, libjpeg_turbo
+, pixman
+, fltk
+, cmake
+, gettext
+, libtool
+, libGLU
+, gnutls
+, gawk
+, pam
+, nettle
+, xterm
+, openssh
+, perl
+, makeWrapper
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.13.1";
+  pname = "tigervnc";
+
+  src = fetchFromGitHub {
+    owner = "TigerVNC";
+    repo = "tigervnc";
+    rev = "v${version}";
+    sha256 = "sha256-YSkgkk87bbHg7lJGoPBs7bfjvd1hvUeOZulFHYpXvvo=";
+  };
+
+  postPatch = lib.optionalString stdenv.isLinux ''
+    sed -i -e '/^\$cmd \.= " -pn";/a$cmd .= " -xkbdir ${xkeyboard_config}/etc/X11/xkb";' unix/vncserver/vncserver.in
+    fontPath=
+    substituteInPlace vncviewer/vncviewer.cxx \
+       --replace '"/usr/bin/ssh' '"${openssh}/bin/ssh'
+
+    cp unix/xserver21.1.1.patch unix/xserver211.patch
+    source_top="$(pwd)"
+  '' + ''
+    # On Mac, do not build a .dmg, instead copy the .app to the source dir
+    gawk -i inplace 'BEGIN { del=0 } /hdiutil/ { del=2 } del<=0 { print } /$VERSION.dmg/ { del -= 1 }' release/makemacapp.in
+    echo "mv \"\$APPROOT\" \"\$SRCDIR/\"" >> release/makemacapp.in
+  '';
+
+  dontUseCmakeBuildDir = true;
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
+    "-DCMAKE_INSTALL_SBINDIR=${placeholder "out"}/bin"
+    "-DCMAKE_INSTALL_LIBEXECDIR=${placeholder "out"}/bin"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-Wno-error=array-bounds"
+  ];
+
+  postBuild = lib.optionalString stdenv.isLinux ''
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -Wno-error=int-to-pointer-cast -Wno-error=pointer-to-int-cast"
+    export CXXFLAGS="$CXXFLAGS -fpermissive"
+    # Build Xvnc
+    tar xf ${xorg.xorgserver.src}
+    cp -R xorg*/* unix/xserver
+    pushd unix/xserver
+    version=$(echo ${xorg.xorgserver.name} | sed 's/.*-\([0-9]\+\).\([0-9]\+\).*/\1\2/g')
+    patch -p1 < "$source_top/unix/xserver$version.patch"
+    autoreconf -vfi
+    ./configure $configureFlags  --disable-devel-docs --disable-docs \
+        --disable-xorg --disable-xnest --disable-xvfb --disable-dmx \
+        --disable-xwin --disable-xephyr --disable-kdrive --with-pic \
+        --disable-xorgcfg --disable-xprint --disable-static \
+        --enable-composite --disable-xtrap --enable-xcsecurity \
+        --disable-{a,c,m}fb \
+        --disable-xwayland \
+        --disable-config-dbus --disable-config-udev --disable-config-hal \
+        --disable-xevie \
+        --disable-dri --disable-dri2 --disable-dri3 --enable-glx \
+        --enable-install-libxf86config \
+        --prefix="$out" --disable-unit-tests \
+        --with-xkb-path=${xkeyboard_config}/share/X11/xkb \
+        --with-xkb-bin-directory=${xorg.xkbcomp}/bin \
+        --with-xkb-output=$out/share/X11/xkb/compiled
+    make TIGERVNC_SRC=$src TIGERVNC_BUILDDIR=`pwd`/../.. -j$NIX_BUILD_CORES
+    popd
+  '' + lib.optionalString stdenv.isDarwin ''
+    make dmg
+  '';
+
+  postInstall = lib.optionalString stdenv.isLinux ''
+    pushd unix/xserver/hw/vnc
+    make TIGERVNC_SRC=$src TIGERVNC_BUILDDIR=`pwd`/../../../.. install
+    popd
+    rm -f $out/lib/xorg/protocol.txt
+
+    wrapProgram $out/bin/vncserver \
+      --prefix PATH : ${lib.makeBinPath (with xorg; [ xterm twm xsetroot xauth ]) }
+  '' + lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    mv 'TigerVNC Viewer ${version}.app' $out/Applications/
+    rm $out/bin/vncviewer
+    echo "#!/usr/bin/env bash
+    open $out/Applications/TigerVNC\ Viewer\ ${version}.app --args \$@" >> $out/bin/vncviewer
+    chmod +x $out/bin/vncviewer
+  '';
+
+  buildInputs = [
+    fltk
+    gnutls
+    libjpeg_turbo
+    pixman
+    gawk
+  ] ++ lib.optionals stdenv.isLinux (with xorg; [
+    nettle
+    pam
+    perl
+    xorgproto
+    utilmacros
+    libXtst
+    libXext
+    libX11
+    libXext
+    libICE
+    libXi
+    libSM
+    libXft
+    libxkbfile
+    libXfont2
+    libpciaccess
+    libGLU
+  ] ++ xorg.xorgserver.buildInputs
+  );
+
+  nativeBuildInputs = [
+    cmake
+    gettext
+  ] ++ lib.optionals stdenv.isLinux (with xorg; [
+    fontutil
+    libtool
+    makeWrapper
+    utilmacros
+    zlib
+  ] ++ xorg.xorgserver.nativeBuildInputs);
+
+  propagatedBuildInputs = lib.optional stdenv.isLinux xorg.xorgserver.propagatedBuildInputs;
+
+  passthru.tests.tigervnc = nixosTests.tigervnc;
+
+  meta = {
+    homepage = "https://tigervnc.org/";
+    license = lib.licenses.gpl2Plus;
+    description = "Fork of tightVNC, made in cooperation with VirtualGL";
+    maintainers = with lib.maintainers; [viric];
+    platforms = lib.platforms.unix;
+    # Prevent a store collision.
+    priority = 4;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15678.patch b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15678.patch
new file mode 100644
index 000000000000..cd65d2fb5dd9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15678.patch
@@ -0,0 +1,18 @@
+Adapted from https://github.com/LibVNC/libvncserver/commit/c5ba3fee85a7ecbbca1df5ffd46d32b92757bc2a
+diff --git a/vncviewer/rfbproto.c b/vncviewer/rfbproto.c
+index 04b0230..47a6863 100644
+--- a/vncviewer/rfbproto.c
++++ b/vncviewer/rfbproto.c
+@@ -1217,6 +1217,12 @@ HandleRFBServerMessage()
+     if (serverCutText)
+       free(serverCutText);
+ 
++    if (msg.sct.length > 1<<20) {
++      fprintf(stderr,"Ignoring too big cut text length sent by server: %u B > 1 MB\n",
++              (unsigned int)msg.sct.length);
++      return False;
++    }
++
+     serverCutText = malloc(msg.sct.length+1);
+ 
+     if (!ReadFromRFBServer(serverCutText, msg.sct.length))
diff --git a/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15679.patch b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15679.patch
new file mode 100644
index 000000000000..6d7b3e89e0c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15679.patch
@@ -0,0 +1,19 @@
+Adapted from https://github.com/LibVNC/libvncserver/commit/c2c4b81e6cb3b485fb1ec7ba9e7defeb889f6ba7
+diff --git a/vncviewer/rfbproto.c b/vncviewer/rfbproto.c
+index 04b0230..bd11b54 100644
+--- a/vncviewer/rfbproto.c
++++ b/vncviewer/rfbproto.c
+@@ -303,7 +303,12 @@ InitialiseRFBConnection(void)
+   si.format.blueMax = Swap16IfLE(si.format.blueMax);
+   si.nameLength = Swap32IfLE(si.nameLength);
+ 
+-  /* FIXME: Check arguments to malloc() calls. */
++  if (si.nameLength > 1<<20) {
++    fprintf(stderr, "Too big desktop name length sent by server: %lu B > 1 MB\n",
++            (unsigned long)si.nameLength);
++    return False;
++  }
++
+   desktopName = malloc(si.nameLength + 1);
+   if (!desktopName) {
+     fprintf(stderr, "Error allocating memory for desktop name, %lu bytes\n",
diff --git a/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15680.patch b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15680.patch
new file mode 100644
index 000000000000..7426a2b58b10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15680.patch
@@ -0,0 +1,16 @@
+diff --git a/vncviewer/zlib.c b/vncviewer/zlib.c
+index 80c4eee..76998d8 100644
+--- a/vncviewer/zlib.c
++++ b/vncviewer/zlib.c
+@@ -55,6 +55,11 @@ HandleZlibBPP (int rx, int ry, int rw, int rh)
+     raw_buffer_size = (( rw * rh ) * ( BPP / 8 ));
+     raw_buffer = (char*) malloc( raw_buffer_size );
+ 
++    if ( raw_buffer == NULL ) {
++      fprintf(stderr,
++              "couldn't allocate raw_buffer in HandleZlibBPP");
++      return False;
++    }
+   }
+ 
+   if (!ReadFromRFBServer((char *)&hdr, sz_rfbZlibHeader))
diff --git a/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-8287.patch b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-8287.patch
new file mode 100644
index 000000000000..5bfd1b9ea87f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-8287.patch
@@ -0,0 +1,14 @@
+Adapted from https://github.com/LibVNC/libvncserver/commit/7b1ef0ffc4815cab9a96c7278394152bdc89dc4d
+diff --git a/vncviewer/corre.c b/vncviewer/corre.c
+index c846a10..a4c272d 100644
+--- a/vncviewer/corre.c
++++ b/vncviewer/corre.c
+@@ -56,7 +56,7 @@ HandleCoRREBPP (int rx, int ry, int rw, int rh)
+     XChangeGC(dpy, gc, GCForeground, &gcv);
+     XFillRectangle(dpy, desktopWin, gc, rx, ry, rw, rh);
+ 
+-    if (!ReadFromRFBServer(buffer, hdr.nSubrects * (4 + (BPP / 8))))
++    if (hdr.nSubrects > BUFFER_SIZE / (4 + (BPP / 8)) || !ReadFromRFBServer(buffer, hdr.nSubrects * (4 + (BPP / 8))))
+ 	return False;
+ 
+     ptr = (CARD8 *)buffer;
diff --git a/nixpkgs/pkgs/tools/admin/tightvnc/default.nix b/nixpkgs/pkgs/tools/admin/tightvnc/default.nix
new file mode 100644
index 000000000000..5bc86f94c2bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tightvnc/default.nix
@@ -0,0 +1,116 @@
+{ lib
+, stdenv
+, fetchurl
+, zlib
+, libjpeg
+, imake
+, gccmakedep
+, libXaw
+, libXext
+, libXmu
+, libXp
+, libXpm
+, perl
+, xauth
+, fontDirectories
+, openssh
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tightvnc";
+  version = "1.3.10";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/vnc-tight/tightvnc-${version}_unixsrc.tar.bz2";
+    sha256 = "f48c70fea08d03744ae18df6b1499976362f16934eda3275cead87baad585c0d";
+  };
+
+  patches = [
+    ./1.3.10-CVE-2019-15678.patch
+    ./1.3.10-CVE-2019-15679.patch
+    ./1.3.10-CVE-2019-15680.patch
+    ./1.3.10-CVE-2019-8287.patch
+  ];
+
+  # for the builder script
+  inherit fontDirectories;
+
+  hardeningDisable = [ "format" ];
+
+  buildInputs = [
+    zlib
+    libjpeg
+    imake
+    gccmakedep
+    libXaw
+    libXext
+    libXmu
+    libXp
+    libXpm
+    xauth
+    openssh
+  ];
+
+  postPatch = ''
+    fontPath=
+    for i in $fontDirectories; do
+      for j in $(find $i -name fonts.dir); do
+        addToSearchPathWithCustomDelimiter "," fontPath $(dirname $j)
+      done
+    done
+
+    sed -i "s@/usr/bin/ssh@${openssh}/bin/ssh@g" vncviewer/vncviewer.h
+
+    sed -e 's@/usr/bin/perl@${perl}/bin/perl@' \
+        -e 's@unix/:7100@'$fontPath'@' \
+        -i vncserver
+
+    sed -e 's@.* CppCmd .*@#define CppCmd		cpp@' -i Xvnc/config/cf/linux.cf
+    sed -e 's@.* CppCmd .*@#define CppCmd		cpp@' -i Xvnc/config/cf/Imake.tmpl
+    sed -i \
+        -e 's@"uname","xauth","Xvnc","vncpasswd"@"uname","Xvnc","vncpasswd"@g' \
+        -e "s@\<xauth\>@${xauth}/bin/xauth@g" \
+        vncserver
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    ./vncinstall $out/bin $out/share/man
+
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    # fix HTTP client:
+    mkdir -p $out/share/tightvnc
+    cp -r classes $out/share/tightvnc
+    substituteInPlace $out/bin/vncserver \
+      --replace /usr/local/vnc/classes $out/share/tightvnc/classes
+  '';
+
+  meta = {
+    license = lib.licenses.gpl2Plus;
+    homepage = "https://vnc-tight.sourceforge.net/";
+    description = "Improved version of VNC";
+
+    longDescription = ''
+      TightVNC is an improved version of VNC, the great free
+      remote-desktop tool. The improvements include bandwidth-friendly
+      "tight" encoding, file transfers in the Windows version, enhanced
+      GUI, many bugfixes, and more.
+    '';
+
+    maintainers = [];
+    platforms = lib.platforms.unix;
+
+    knownVulnerabilities = [ "CVE-2021-42785" ];
+    # Unfortunately, upstream doesn't maintain the 1.3 branch anymore, and the
+    # new 2.x branch is substantially different (requiring either Windows or Java)
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/tlsclient/default.nix b/nixpkgs/pkgs/tools/admin/tlsclient/default.nix
new file mode 100644
index 000000000000..5f3633a6c9c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tlsclient/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, pkg-config
+, openssl
+, gitUpdater
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "tlsclient";
+  version = "1.6.5";
+
+  src = fetchFromSourcehut {
+    owner = "~moody";
+    repo = "tlsclient";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-Ff41LZ5jbrqni2ptsUlI3L17SCHnGo4utg8etFubRNI=";
+  };
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ];
+
+  buildFlags = [ "tlsclient" ];
+  installFlags = [ "PREFIX=$(out)" ];
+  installTargets = "tlsclient.install";
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    description = "tlsclient command line utility";
+    longDescription = "unix port of 9front's tlsclient(1) and rcpu(1)";
+    homepage = "https://git.sr.ht/~moody/tlsclient";
+    license = licenses.mit;
+    maintainers = with maintainers; [ moody ];
+    mainProgram = "tlsclient";
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/admin/trinsic-cli/default.nix b/nixpkgs/pkgs/tools/admin/trinsic-cli/default.nix
new file mode 100644
index 000000000000..264e04c71c77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/trinsic-cli/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, rustPlatform, fetchurl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "trinsic-cli";
+  version = "1.13.0";
+
+  src = fetchurl {
+    url = "https://github.com/trinsic-id/sdk/releases/download/v${version}/trinsic-cli-vendor-${version}.tar.gz";
+    sha256 = "sha256-uW4PNlDfyxzec9PzfXr25gPrFZQGr8qm0jLMOeIazoE=";
+  };
+
+  cargoVendorDir = "vendor";
+  doCheck = false;
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "Trinsic CLI";
+    longDescription = ''
+      Command line interface for Trinsic Ecosystems
+    '';
+    homepage = "https://trinsic.id/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ tmarkovski ];
+    mainProgram = "trinsic";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/triton/default.nix b/nixpkgs/pkgs/tools/admin/triton/default.nix
new file mode 100644
index 000000000000..38309e94cdee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/triton/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, installShellFiles
+, testers
+, triton
+}:
+
+buildNpmPackage rec {
+  pname = "triton";
+  version = "7.17.0";
+
+  src = fetchFromGitHub {
+    owner = "TritonDataCenter";
+    repo = "node-triton";
+    rev = version;
+    hash = "sha256-udS5CnaaeaY+owOrbC3R2jrNBpuTBKOkHrIS2AlHWAE=";
+  };
+
+  npmDepsHash = "sha256-w33awTkj+YxBoPlmP0JBlZlrMmaWhMC03/5a+LB0RZ8=";
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd triton --bash <($out/bin/triton completion)
+    # Strip timestamp from generated bash completion
+    sed -i '/Bash completion generated.*/d' $out/share/bash-completion/completions/triton.bash
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = triton;
+    };
+  };
+
+  meta = with lib; {
+    description = "TritonDataCenter Client CLI and Node.js SDK";
+    homepage = "https://github.com/TritonDataCenter/node-triton";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ teutat3s ];
+    mainProgram = "triton";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/trivy/default.nix b/nixpkgs/pkgs/tools/admin/trivy/default.nix
new file mode 100644
index 000000000000..2992e233d74d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/trivy/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, buildPackages
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, trivy
+}:
+
+buildGoModule rec {
+  pname = "trivy";
+  version = "0.49.1";
+
+  src = fetchFromGitHub {
+    owner = "aquasecurity";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-+wgnj7mDIJ5UPGfD7vogdcbUeBdvTenL/a0Ew4CfuvE=";
+  };
+
+  # Hash mismatch on across Linux and Darwin
+  proxyVendor = true;
+
+  vendorHash = "sha256-IL3FHgOYQYJIqJKr2eEeM/NzO+SeYucGSNUUY62kHNA=";
+
+  subPackages = [ "cmd/trivy" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/aquasecurity/trivy/pkg/version.ver=v${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # Tests require network access
+  doCheck = false;
+
+  postInstall =
+    let
+      trivy = if stdenv.buildPlatform.canExecute stdenv.hostPlatform then placeholder "out" else buildPackages.trivy;
+    in
+    ''
+      installShellCompletion --cmd trivy \
+        --bash <(${trivy}/bin/trivy completion bash) \
+        --fish <(${trivy}/bin/trivy completion fish) \
+        --zsh <(${trivy}/bin/trivy completion zsh)
+    '';
+
+  doInstallCheck = true;
+
+  passthru.tests.version = testers.testVersion {
+    package = trivy;
+    command = "trivy --version";
+    version = "Version: v${version}";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/aquasecurity/trivy";
+    changelog = "https://github.com/aquasecurity/trivy/releases/tag/v${version}";
+    description = "A simple and comprehensive vulnerability scanner for containers, suitable for CI";
+    longDescription = ''
+      Trivy is a simple and comprehensive vulnerability scanner for containers
+      and other artifacts. A software vulnerability is a glitch, flaw, or
+      weakness present in the software or in an Operating System. Trivy detects
+      vulnerabilities of OS packages (Alpine, RHEL, CentOS, etc.) and
+      application dependencies (Bundler, Composer, npm, yarn, etc.).
+    '';
+    mainProgram = "trivy";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/try/default.nix b/nixpkgs/pkgs/tools/admin/try/default.nix
new file mode 100644
index 000000000000..697a192d156e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/try/default.nix
@@ -0,0 +1,25 @@
+{ stdenvNoCC, lib, fetchFromGitHub, fuse-overlayfs, util-linux, makeWrapper }:
+stdenvNoCC.mkDerivation rec {
+  pname = "try";
+  version = "0.2.0";
+  src = fetchFromGitHub {
+    owner = "binpash";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-2EDRVwW4XzQhd7rAM2rDuR94Fkaq4pH5RTooFEBBh5g=";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  installPhase = ''
+    runHook preInstall
+    install -Dt $out/bin try
+    wrapProgram $out/bin/try --prefix PATH : ${lib.makeBinPath [ fuse-overlayfs util-linux ]}
+    runHook postInstall
+  '';
+  meta = with lib;{
+    homepage = "https://github.com/binpash/try";
+    description = "Lets you run a command and inspect its effects before changing your live system";
+    maintainers = with maintainers; [ pasqui23 ];
+    license = with licenses; [ mit ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/turbovnc/default.nix b/nixpkgs/pkgs/tools/admin/turbovnc/default.nix
new file mode 100644
index 000000000000..aaba4768a924
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/turbovnc/default.nix
@@ -0,0 +1,144 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nixosTests
+
+# Dependencies
+, bzip2
+, cmake
+, freetype
+, libGL
+, libjpeg_turbo
+, makeWrapper
+, mesa # for built-in 3D software rendering using swrast
+, openjdk # for the client with Java GUI
+, openjdk_headless # for the server
+, openssh
+, openssl
+, pam
+, perl
+, pkg-config
+, python3
+, which
+, xkbcomp
+, xkeyboard_config
+, xorg
+, xterm
+, zlib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "turbovnc";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner = "TurboVNC";
+    repo = "turbovnc";
+    rev = finalAttrs.version;
+    hash = "sha256-nMqH/jhw4GhffGYR+WGcUnF6EOFSS6HDuSKvjoCtGkk=";
+  };
+
+  # TODO:
+  # * Build outputs that are unclear:
+  #   * `-- FONT_ENCODINGS_DIRECTORY = /var/empty/share/X11/fonts/encodings`
+  #     Maybe relevant what the tigervnc and tightvnc derivations
+  #     do with their `fontDirectories`?
+  #   * `XORG_REGISTRY_PATH = /var/empty/lib64/xorg`
+  #   * The thing about xorg `protocol.txt`
+  # * Does SSH support require `openssh` on PATH?
+  # * Add `enableClient ? true` flag that disables the client GUI
+  #   so that the server can be built without openjdk dependency.
+  # * Perhaps allow to build the client on non-Linux platforms.
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    openjdk_headless
+    pkg-config
+    python3
+  ];
+
+  buildInputs = [
+    bzip2
+    freetype
+    libGL # for -DTVNC_SYSTEMX11=1
+    libjpeg_turbo
+    openssl
+    pam
+    perl
+    zlib
+  ] ++ (with xorg; [
+    libfontenc # for -DTVNC_SYSTEMX11=1
+    libSM
+    libX11
+    libXdamage # for -DTVNC_SYSTEMX11=1
+    libXdmcp # for -DTVNC_SYSTEMX11=1
+    libXext
+    libXfont2 # for -DTVNC_SYSTEMX11=1
+    libxkbfile # for -DTVNC_SYSTEMX11=1
+    libXi
+    mesa # for -DTVNC_SYSTEMX11=1
+    pixman # for -DTVNC_SYSTEMX11=1
+    xorgproto
+    xtrans # for -DTVNC_SYSTEMX11=1
+  ]);
+
+  postPatch = ''
+    substituteInPlace unix/Xvnc/CMakeLists.txt --replace 'string(REGEX REPLACE "X11" "Xfont2" X11_Xfont2_LIB' 'set(X11_Xfont2_LIB ${xorg.libXfont2}/lib/libXfont2.so)  #'
+    substituteInPlace unix/Xvnc/CMakeLists.txt --replace 'string(REGEX REPLACE "X11" "fontenc" X11_Fontenc_LIB' 'set(X11_Fontenc_LIB ${xorg.libfontenc}/lib/libfontenc.so)  #'
+    substituteInPlace unix/Xvnc/CMakeLists.txt --replace 'string(REGEX REPLACE "X11" "pixman-1" X11_Pixman_LIB' 'set(X11_Pixman_LIB ${xorg.pixman}/lib/libpixman-1.so)  #'
+  '';
+
+  cmakeFlags = [
+    # For the 3D software rendering built into TurboVNC, pass the path
+    # to the swrast dri driver in Mesa.
+    # Can also be given at runtime to its `Xvnc` as:
+    #   -dridir /nix/store/...-mesa-20.1.10-drivers/lib/dri/
+    "-DXORG_DRI_DRIVER_PATH=${mesa.drivers}/lib/dri"
+    # The build system doesn't find these files automatically.
+    "-DTJPEG_JAR=${libjpeg_turbo.out}/share/java/turbojpeg.jar"
+    "-DTJPEG_JNILIBRARY=${libjpeg_turbo.out}/lib/libturbojpeg.so"
+    "-DXKB_BASE_DIRECTORY=${xkeyboard_config}/share/X11/xkb"
+    "-DXKB_BIN_DIRECTORY=${xkbcomp}/bin"
+    # use system libs
+    "-DTVNC_SYSTEMLIBS=1"
+    "-DTVNC_SYSTEMX11=1"
+    "-DTVNC_DLOPENSSL=0"
+  ];
+
+  postInstall = ''
+    # turbovnc dlopen()s libssl.so depending on the requested encryption.
+    wrapProgram $out/bin/Xvnc \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ openssl ]}
+
+    # `twm` is the default window manager that `vncserver` tries to start,
+    # and it has minimal dependencies (no non-Xorg).
+    # (This default is written by `vncserver` to `~/.vnc/xstartup.turbovnc`,
+    # see https://github.com/TurboVNC/turbovnc/blob/ffdb57d9/unix/vncserver.in#L201.)
+    # It checks for it using `which twm`.
+    # vncserver needs also needs `xauth` and we add in `xterm` for convenience
+    wrapProgram $out/bin/vncserver \
+      --prefix PATH : ${lib.makeBinPath [ which xorg.twm xorg.xauth xterm ]}
+
+    # Patch /usr/bin/perl
+    patchShebangs $out/bin/vncserver
+
+    # The viewer is in Java and requires `JAVA_HOME` (which is a single
+    # path, cannot be multiple separated paths).
+    # For SSH support, `ssh` is required on `PATH`.
+    wrapProgram $out/bin/vncviewer \
+      --set JAVA_HOME "${lib.makeLibraryPath [ openjdk ]}/openjdk" \
+      --prefix PATH : ${lib.makeBinPath [ openssh ]}
+  '';
+
+  passthru.tests.turbovnc-headless-server = nixosTests.turbovnc-headless-server;
+
+  meta = {
+    homepage = "https://turbovnc.org/";
+    license = lib.licenses.gpl2Plus;
+    description = "High-speed version of VNC derived from TightVNC";
+    maintainers = with lib.maintainers; [ nh2 ];
+    platforms = with lib.platforms; linux;
+    changelog = "https://github.com/TurboVNC/turbovnc/blob/${finalAttrs.version}/ChangeLog.md";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/admin/uacme/default.nix b/nixpkgs/pkgs/tools/admin/uacme/default.nix
new file mode 100644
index 000000000000..6bf1d55e4375
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/uacme/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, asciidoc
+, autoconf-archive
+, autoreconfHook
+, pkg-config
+, curl
+, openssl
+}:
+stdenv.mkDerivation rec {
+  pname = "uacme";
+  version = "1.7.5";
+
+  src = fetchFromGitHub {
+    owner = "ndilieto";
+    repo = "uacme";
+    rev = "v${version}";
+    hash = "sha256-MaPMNAUuQmJAbl7qBqNCkzW4k6nkibezEMRaCho5I68=";
+  };
+
+  configureFlags = [ "--with-openssl" ];
+
+  nativeBuildInputs = [
+    asciidoc
+    autoconf-archive
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    openssl
+  ];
+
+  meta = with lib; {
+    description = "ACMEv2 client written in plain C with minimal dependencies";
+    homepage = "https://github.com/ndilieto/uacme";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ malte-v ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/virtscreen/default.nix b/nixpkgs/pkgs/tools/admin/virtscreen/default.nix
new file mode 100644
index 000000000000..a1558248f802
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/virtscreen/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3Packages
+, x11vnc
+, xrandr
+, libGL
+, qt5
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "virtscreen";
+  version = "0.3.1";
+
+  disabled = python3Packages.pythonOlder "3.6";
+
+  # No tests
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    owner = "kbumsik";
+    repo = pname;
+    rev = version;
+    sha256 = "005qach6phz8w17k8kqmyd647c6jkfybczybxq0yxi5ik0s91a08";
+  };
+
+  nativeBuildInputs = [ qt5.wrapQtAppsHook ];
+
+  propagatedBuildInputs = with python3Packages; [
+    netifaces
+    pyqt5
+    quamash
+    x11vnc
+    xrandr
+  ];
+
+  dontWrapQtApps = true;
+
+  makeWrapperArgs = [
+    "\${qtWrapperArgs[@]}"
+    # import Qt.labs.platform failed without this
+    "--prefix QML2_IMPORT_PATH : ${qt5.qtquickcontrols2.bin}/${qt5.qtbase.qtQmlPrefix}"
+  ];
+
+  postPatch = ''
+    substituteInPlace virtscreen/__main__.py \
+      --replace "'GL'" "'${libGL}/lib/libGL${stdenv.hostPlatform.extensions.sharedLibrary}'" \
+  '';
+
+  meta = with lib; {
+    description = "Make your iPad/tablet/computer as a secondary monitor on Linux";
+    homepage = "https://github.com/kbumsik/VirtScreen";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ borisbabic ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/wander/default.nix b/nixpkgs/pkgs/tools/admin/wander/default.nix
new file mode 100644
index 000000000000..6ad6854fc232
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/wander/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "wander";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "robinovitch61";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-1+bKdIAWdg/+5FBDbtvjDV0xpZ5jot3y6F+KuLO9WVk=";
+  };
+
+  vendorHash = "sha256-0S8tzP5yNUrH6fp+v7nbUPTMWzYXyGw+ZNcXkSN+tWY=";
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd wander \
+      --fish <($out/bin/wander completion fish) \
+      --bash <($out/bin/wander completion bash) \
+      --zsh <($out/bin/wander completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Terminal app/TUI for HashiCorp Nomad";
+    license = licenses.mit;
+    homepage = "https://github.com/robinovitch61/wander";
+    maintainers = teams.c3d2.members;
+    mainProgram = "wander";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/winbox/default.nix b/nixpkgs/pkgs/tools/admin/winbox/default.nix
new file mode 100644
index 000000000000..f4a39b2cbbc5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/winbox/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, fetchurl
+, makeDesktopItem
+, symlinkJoin
+, writeShellScriptBin
+, wine
+}:
+
+let
+  inherit (lib) last splitString;
+
+  pname = "winbox";
+  version = "3.40";
+  name = "${pname}-${version}";
+
+  executable = fetchurl (if (wine.meta.mainProgram == "wine64") then {
+    url = "https://download.mikrotik.com/winbox/${version}/winbox64.exe";
+    sha256 = "1dxny1qmq4pmdn40j9zk461p3qwwjin5d18ajhczrnqrcr2v1xwi";
+  } else {
+    url = "https://download.mikrotik.com/winbox/${version}/winbox.exe";
+    sha256 = "11vmdkwi38y7wkdkgsqpfs4l2bdaj9yg6c8wlgfzp91227gjn5li";
+  });
+
+  # This is from the winbox AUR package:
+  # https://aur.archlinux.org/cgit/aur.git/tree/winbox64?h=winbox64&id=8edd93792af84e87592e8645ca09e9795931e60e
+  wrapper = writeShellScriptBin pname ''
+    export WINEPREFIX="''${WINBOX_HOME:-"''${XDG_DATA_HOME:-"''${HOME}/.local/share"}/winbox"}/wine"
+    export WINEDLLOVERRIDES="mscoree=" # disable mono
+    export WINEDEBUG=-all
+    if [ ! -d "$WINEPREFIX" ] ; then
+      mkdir -p "$WINEPREFIX"
+      ${wine}/bin/wineboot -u
+    fi
+
+    ${wine}/bin/${wine.meta.mainProgram} ${executable} "$@"
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    desktopName = "Winbox";
+    comment = "GUI administration for Mikrotik RouterOS";
+    exec = pname;
+    icon = pname;
+    categories = [ "Utility" ];
+    startupWMClass = last (splitString "/" executable);
+  };
+
+  # The icon is also from the winbox AUR package (see above).
+  icon = fetchurl {
+    name = "winbox.png";
+    url = "https://aur.archlinux.org/cgit/aur.git/plain/winbox.png?h=winbox";
+    sha256 = "sha256-YD6u2N+1thRnEsXO6AHm138fRda9XEtUX5+EGTg004A=";
+  };
+in
+symlinkJoin {
+  inherit name pname version;
+  paths = [ wrapper desktopItem ];
+
+  postBuild = ''
+    mkdir -p "$out/share/pixmaps"
+    ln -s "${icon}" "$out/share/pixmaps/${pname}.png"
+  '';
+
+  meta = with lib; {
+    description = "Graphical configuration utility for RouterOS-based devices";
+    homepage = "https://mikrotik.com";
+    downloadPage = "https://mikrotik.com/download";
+    changelog = "https://wiki.mikrotik.com/wiki/Winbox_changelog";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ yrd ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/zbctl/default.nix b/nixpkgs/pkgs/tools/admin/zbctl/default.nix
new file mode 100644
index 000000000000..5dfa08998637
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/zbctl/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "zbctl";
+  version = "8.2.11";
+
+  src = if stdenvNoCC.hostPlatform.system == "x86_64-darwin" then fetchurl {
+    url = "https://github.com/camunda/zeebe/releases/download/${version}/zbctl.darwin";
+    sha256 = "0390n6wmlmfwqf6fvw6wqg6hbrs7bm9x2cdaajlw87377lklypkf";
+  } else if stdenvNoCC.hostPlatform.system == "x86_64-linux" then fetchurl {
+    url = "https://github.com/camunda/zeebe/releases/download/${version}/zbctl";
+    sha256 = "081hc0nynwg014lhsxxyin4rc2i9z6wh8q9i98cjjd8kgr41h096";
+  } else throw "Unsupported platform ${stdenvNoCC.hostPlatform.system}";
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp $src $out/bin/zbctl
+    chmod +x $out/bin/zbctl
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "The command line interface to interact with Camunda 8 and Zeebe";
+    homepage = "https://docs.camunda.io/docs/apis-clients/cli-client/";
+    downloadPage = "https://github.com/camunda/zeebe/releases";
+    changelog = "https://github.com/camunda/zeebe/releases/tag/${version}";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.asl20;
+    platforms = [ "x86_64-darwin" "x86_64-linux" ];
+    maintainers = with maintainers; [ thetallestjj ];
+    longDescription = ''
+      A command line interface for Camunda Platform 8 designed to create and read resources inside a Zeebe broker.
+      It can be used for regular development and maintenance tasks such as:
+      * Deploying processes
+      * Creating process instances and job workers
+      * Activating, completing, or failing jobs
+      * Updating variables and retries
+      * Viewing cluster status
+    '';
+    mainProgram = "zbctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/7zz/default.nix b/nixpkgs/pkgs/tools/archivers/7zz/default.nix
new file mode 100644
index 000000000000..48b072b0cf4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/7zz/default.nix
@@ -0,0 +1,137 @@
+{ stdenv
+, lib
+, fetchurl
+
+  # Only used for Linux's x86/x86_64
+, uasm
+, useUasm ? (stdenv.isLinux && stdenv.hostPlatform.isx86)
+
+  # RAR code is under non-free unRAR license
+  # see the meta.license section below for more details
+, enableUnfree ? false
+
+  # For tests
+, _7zz
+, testers
+}:
+
+let
+  makefile = {
+    aarch64-darwin = "../../cmpl_mac_arm64.mak";
+    x86_64-darwin = "../../cmpl_mac_x64.mak";
+    aarch64-linux = "../../cmpl_gcc_arm64.mak";
+    i686-linux = "../../cmpl_gcc_x86.mak";
+    x86_64-linux = "../../cmpl_gcc_x64.mak";
+  }.${stdenv.hostPlatform.system} or "../../cmpl_gcc.mak"; # generic build
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "7zz";
+  version = "23.01";
+
+  src = fetchurl {
+    url = "https://7-zip.org/a/7z${lib.replaceStrings [ "." ] [ "" ] finalAttrs.version}-src.tar.xz";
+    hash = {
+      free = "sha256-F1ybQsyReF2NBR/3eMZySvxVEntpwq2VUlRCHp/5nZs=";
+      unfree = "sha256-NWBxAHNg5aGCTZkEmT6LJIC1G1cOjJ+vfA9Y6+S/n3Q=";
+    }.${if enableUnfree then "unfree" else "free"};
+    downloadToTemp = (!enableUnfree);
+    # remove the unRAR related code from the src drv
+    # > the license requires that you agree to these use restrictions,
+    # > or you must remove the software (source and binary) from your hard disks
+    # https://fedoraproject.org/wiki/Licensing:Unrar
+    postFetch = lib.optionalString (!enableUnfree) ''
+      mkdir tmp
+      tar xf $downloadedFile -C ./tmp
+      rm -r ./tmp/CPP/7zip/Compress/Rar*
+      tar cfJ $out -C ./tmp . \
+        --sort=name \
+        --mtime="@$SOURCE_DATE_EPOCH" \
+        --owner=0 --group=0 --numeric-owner \
+        --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime
+    '';
+  };
+
+  sourceRoot = ".";
+
+  patches = [
+    ./fix-cross-mingw-build.patch
+    # remove unneeded semicolons related to -Wextra-semi-stmt, caused by upstream
+    ./fix-empty-expr-stmt.patch
+  ];
+
+  postPatch = lib.optionalString stdenv.hostPlatform.isMinGW ''
+    substituteInPlace CPP/7zip/7zip_gcc.mak C/7zip_gcc_c.mak \
+      --replace windres.exe ${stdenv.cc.targetPrefix}windres
+  '';
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.isDarwin [
+    "-Wno-deprecated-copy-dtor"
+  ] ++ lib.optionals stdenv.hostPlatform.isMinGW [
+    "-Wno-conversion"
+    "-Wno-unused-macros"
+  ] ++ lib.optionals stdenv.cc.isClang [
+    "-Wno-declaration-after-statement"
+    (lib.optionals (lib.versionAtLeast (lib.getVersion stdenv.cc.cc) "13") [
+      "-Wno-reserved-identifier"
+      "-Wno-unused-but-set-variable"
+    ])
+    (lib.optionals (lib.versionAtLeast (lib.getVersion stdenv.cc.cc) "16") [
+      "-Wno-unsafe-buffer-usage"
+      "-Wno-cast-function-type-strict"
+    ])
+  ]);
+
+  inherit makefile;
+
+  makeFlags =
+    [
+      "CC=${stdenv.cc.targetPrefix}cc"
+      "CXX=${stdenv.cc.targetPrefix}c++"
+    ]
+    ++ lib.optionals useUasm [ "MY_ASM=uasm" ]
+    # We need at minimum 10.13 here because of utimensat, however since
+    # we need a bump anyway, let's set the same minimum version as the one in
+    # aarch64-darwin so we don't need additional changes for it
+    ++ lib.optionals stdenv.isDarwin [ "MACOSX_DEPLOYMENT_TARGET=10.16" ]
+    # it's the compression code with the restriction, see DOC/License.txt
+    ++ lib.optionals (!enableUnfree) [ "DISABLE_RAR_COMPRESS=true" ]
+    ++ lib.optionals (stdenv.hostPlatform.isMinGW) [ "IS_MINGW=1" "MSYSTEM=1" ];
+
+  nativeBuildInputs = lib.optionals useUasm [ uasm ];
+
+  enableParallelBuilding = true;
+
+  preBuild = "cd CPP/7zip/Bundles/Alone2";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin b/*/7zz${stdenv.hostPlatform.extensions.executable}
+    install -Dm444 -t $out/share/doc/${finalAttrs.pname} ../../../../DOC/*.txt
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = ./update.sh;
+    tests.version = testers.testVersion {
+      package = _7zz;
+      command = "7zz --help";
+    };
+  };
+
+  meta = with lib; {
+    description = "Command line archiver utility";
+    homepage = "https://7-zip.org";
+    license = with licenses;
+      # 7zip code is largely lgpl2Plus
+      # CPP/7zip/Compress/LzfseDecoder.cpp is bsd3
+      [ lgpl2Plus /* and */ bsd3 ] ++
+      # and CPP/7zip/Compress/Rar* are unfree with the unRAR license restriction
+      # the unRAR compression code is disabled by default
+      lib.optionals enableUnfree [ unfree ];
+    maintainers = with maintainers; [ anna328p eclairevoyant jk peterhoeg ];
+    platforms = platforms.unix ++ platforms.windows;
+    mainProgram = "7zz";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/archivers/7zz/fix-cross-mingw-build.patch b/nixpkgs/pkgs/tools/archivers/7zz/fix-cross-mingw-build.patch
new file mode 100644
index 000000000000..4b0ccb6f2b0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/7zz/fix-cross-mingw-build.patch
@@ -0,0 +1,154 @@
+--- a/C/7zVersion.rc
++++ b/C/7zVersion.rc
+@@ -5,7 +5,7 @@
+ #define MY_VFT_APP  0x00000001L

+ #define MY_VFT_DLL  0x00000002L

+ 

+-// #include <WinVer.h>

++// #include <winver.h>

+ 

+ #ifndef MY_VERSION

+ #include "7zVersion.h"

+--- a/C/7zip_gcc_c.mak
++++ b/C/7zip_gcc_c.mak
+@@ -106,7 +106,7 @@
+ endif

+ 

+ 

+-LIB2 = -lOle32 -loleaut32 -luuid -ladvapi32 -lUser32 -lShell32

++LIB2 = -lole32 -loleaut32 -luuid -ladvapi32 -luser32 -lshell32

+ 

+ CFLAGS_EXTRA = -DUNICODE -D_UNICODE

+ # -Wno-delete-non-virtual-dtor

+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -124,8 +124,8 @@
+ DEL_OBJ_EXE = -$(RM) $(O)\*.o $(O)\$(PROG).exe $(O)\$(PROG).dll

+ endif

+ 

+-LIB2_GUI = -lOle32 -lGdi32 -lComctl32 -lComdlg32 -lShell32 $(LIB_HTMLHELP)

+-LIB2 = -loleaut32 -luuid -ladvapi32 -lUser32 $(LIB2_GUI)

++LIB2_GUI = -lole32 -lgdi32 -lcomctl32 -lcomdlg32 -lshell32 $(LIB_HTMLHELP)

++LIB2 = -loleaut32 -luuid -ladvapi32 -luser32 $(LIB2_GUI)

+ 

+ CXXFLAGS_EXTRA = -DUNICODE -D_UNICODE

+ # -Wno-delete-non-virtual-dtor

+--- a/C/Util/7zipInstall/resource.rc
++++ b/C/Util/7zipInstall/resource.rc
+@@ -1,6 +1,6 @@
+ #include <winnt.h>

+ #include <WinUser.h>

+-#include <CommCtrl.h>

++#include <commctrl.h>

+ 

+ #define USE_COPYRIGHT_CR

+ #include "../../7zVersion.rc"

+--- a/C/Util/7zipUninstall/resource.rc
++++ b/C/Util/7zipUninstall/resource.rc
+@@ -1,6 +1,6 @@
+ #include <winnt.h>

+ #include <WinUser.h>

+-#include <CommCtrl.h>

++#include <commctrl.h>

+ 

+ #define USE_COPYRIGHT_CR

+ #include "../../7zVersion.rc"

+--- a/CPP/7zip/Crypto/RandGen.cpp
++++ b/CPP/7zip/Crypto/RandGen.cpp
+@@ -19,7 +19,7 @@
+ 

+ #ifdef USE_STATIC_RtlGenRandom

+ 

+-// #include <NTSecAPI.h>

++// #include <ntsecapi.h>

+ 

+ EXTERN_C_BEGIN

+ #ifndef RtlGenRandom

+--- a/CPP/7zip/GuiCommon.rc
++++ b/CPP/7zip/GuiCommon.rc
+@@ -4,7 +4,7 @@
+ // #include <WinUser.h>

+ 

+ // for Windows CE:

+-#include <CommCtrl.h>

++#include <commctrl.h>

+ 

+ 

+ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

+--- a/CPP/7zip/UI/FileManager/PanelItemOpen.cpp
++++ b/CPP/7zip/UI/FileManager/PanelItemOpen.cpp
+@@ -4,7 +4,7 @@
+ 

+ #include "../../../Common/MyWindows.h"

+ 

+-#include <TlHelp32.h>

++#include <tlhelp32.h>

+ 

+ #include "../../../Common/IntToString.h"

+ 

+--- a/CPP/7zip/UI/FileManager/SysIconUtils.h
++++ b/CPP/7zip/UI/FileManager/SysIconUtils.h
+@@ -5,7 +5,7 @@
+ 

+ #include "../../../Common/MyWindows.h"

+ 

+-#include <CommCtrl.h>

++#include <commctrl.h>

+ 

+ #include "../../../Common/MyString.h"

+ 

+--- a/CPP/Windows/Control/ComboBox.h
++++ b/CPP/Windows/Control/ComboBox.h
+@@ -5,7 +5,7 @@
+ 

+ #include "../../Common/MyWindows.h"

+ 

+-#include <CommCtrl.h>

++#include <commctrl.h>

+ 

+ #include "../Window.h"

+ 

+--- a/CPP/Windows/Control/ImageList.h
++++ b/CPP/Windows/Control/ImageList.h
+@@ -3,7 +3,7 @@
+ #ifndef __WINDOWS_CONTROL_IMAGE_LIST_H

+ #define __WINDOWS_CONTROL_IMAGE_LIST_H

+ 

+-#include <CommCtrl.h>

++#include <commctrl.h>

+ 

+ #include "../Defs.h"

+ 

+--- a/CPP/Windows/Control/ListView.h
++++ b/CPP/Windows/Control/ListView.h
+@@ -5,7 +5,7 @@
+ 

+ #include "../../Common/MyWindows.h"

+ 

+-#include <CommCtrl.h>

++#include <commctrl.h>

+ 

+ #include "../Window.h"

+ 

+--- a/CPP/Windows/Control/ProgressBar.h
++++ b/CPP/Windows/Control/ProgressBar.h
+@@ -5,7 +5,7 @@
+ 

+ #include "../../Common/MyWindows.h"

+ 

+-#include <CommCtrl.h>

++#include <commctrl.h>

+ 

+ #include "../Window.h"

+ 

+--- a/CPP/Windows/SecurityUtils.h
++++ b/CPP/Windows/SecurityUtils.h
+@@ -3,7 +3,7 @@
+ #ifndef __WINDOWS_SECURITY_UTILS_H

+ #define __WINDOWS_SECURITY_UTILS_H

+ 

+-#include <NTSecAPI.h>

++#include <ntsecapi.h>

+ 

+ #include "Defs.h"

+ 

diff --git a/nixpkgs/pkgs/tools/archivers/7zz/fix-empty-expr-stmt.patch b/nixpkgs/pkgs/tools/archivers/7zz/fix-empty-expr-stmt.patch
new file mode 100644
index 000000000000..7583482d5d38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/7zz/fix-empty-expr-stmt.patch
@@ -0,0 +1,184 @@
+diff -Naur a/C/7zCrc.c b/C/7zCrc.c
+--- a/C/7zCrc.c
++++ b/C/7zCrc.c
+@@ -174,7 +174,7 @@
+ UInt32 Z7_FASTCALL CrcUpdateT0_32(UInt32 v, const void *data, size_t size, const UInt32 *table)

+ {

+   const Byte *p = (const Byte *)data;

+-  UNUSED_VAR(table);

++  UNUSED_VAR(table)

+ 

+   for (; size != 0 && ((unsigned)(ptrdiff_t)p & (T0_32_UNROLL_BYTES - 1)) != 0; size--)

+     v = __crc32b(v, *p++);

+@@ -206,7 +206,7 @@
+ UInt32 Z7_FASTCALL CrcUpdateT0_64(UInt32 v, const void *data, size_t size, const UInt32 *table)

+ {

+   const Byte *p = (const Byte *)data;

+-  UNUSED_VAR(table);

++  UNUSED_VAR(table)

+ 

+   for (; size != 0 && ((unsigned)(ptrdiff_t)p & (T0_64_UNROLL_BYTES - 1)) != 0; size--)

+     v = __crc32b(v, *p++);

+diff -Naur a/C/AesOpt.c b/C/AesOpt.c
+--- a/C/AesOpt.c
++++ b/C/AesOpt.c
+@@ -639,7 +639,7 @@
+   const v128 k_z0 = w[2];

+   for (; numBlocks != 0; numBlocks--, data++)

+   {

+-    MM_XOR_m (*data);

++    MM_XOR_m (*data)

+     AES_E_MC_m (k0)

+     AES_E_MC_m (k1)

+     AES_E_MC_m (k2)

+@@ -660,7 +660,7 @@
+       }

+     }

+     AES_E_m  (k_z1)

+-    MM_XOR_m (k_z0);

++    MM_XOR_m (k_z0)

+     *data = m;

+   }

+   *p = m;

+@@ -745,7 +745,7 @@
+     while (w != p);

+     WOP_KEY (AES_D,   1)

+     WOP_KEY (AES_XOR, 0)

+-    MM_XOR (m0, iv);

++    MM_XOR (m0, iv)

+     WOP_M1 (XOR_data_M1)

+     iv = data[NUM_WAYS - 1];

+     WOP (STORE_data)

+@@ -759,14 +759,14 @@
+     AES_D_IMC_m (w[2])

+     do

+     {

+-      AES_D_IMC_m (w[1]);

+-      AES_D_IMC_m (w[0]);

++      AES_D_IMC_m (w[1])

++      AES_D_IMC_m (w[0])

+       w -= 2;

+     }

+     while (w != p);

+-    AES_D_m  (w[1]);

+-    MM_XOR_m (w[0]);

+-    MM_XOR_m (iv);

++    AES_D_m  (w[1])

++    MM_XOR_m (w[0])

++    MM_XOR_m (iv)

+     iv = *data;

+     *data = m;

+   }

+@@ -809,11 +809,11 @@
+   {

+     const v128 *w = p;

+     v128 m;

+-    CTR_START (m, 0);

++    CTR_START (m, 0)

+     do

+     {

+-      AES_E_MC_m (w[0]);

+-      AES_E_MC_m (w[1]);

++      AES_E_MC_m (w[0])

++      AES_E_MC_m (w[1])

+       w += 2;

+     }

+     while (w != wEnd);

+diff -Naur a/C/LzmaEnc.c b/C/LzmaEnc.c
+--- a/C/LzmaEnc.c
++++ b/C/LzmaEnc.c
+@@ -195,11 +195,11 @@
+ unsigned GetPosSlot1(UInt32 pos)

+ {

+   unsigned res;

+-  BSR2_RET(pos, res);

++  BSR2_RET(pos, res)

+   return res;

+ }

+-#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); }

+-#define GetPosSlot(pos, res) { if (pos < 2) res = pos; else BSR2_RET(pos, res); }

++#define GetPosSlot2(pos, res) { BSR2_RET(pos, res) }

++#define GetPosSlot(pos, res) { if (pos < 2) res = pos; else BSR2_RET(pos, res) }

+ 

+ 

+ #else // ! LZMA_LOG_BSR

+diff -Naur a/C/Sha1Opt.c b/C/Sha1Opt.c
+--- a/C/Sha1Opt.c
++++ b/C/Sha1Opt.c
+@@ -300,26 +300,26 @@
+     LOAD_SHUFFLE (m2, 2)

+     LOAD_SHUFFLE (m3, 3)

+                      

+-    T(m0, c0);                                  H(e1); C(e0);

+-    T(m1, c0);  SU0(m0, m1, m2);                H(e0); C(e1);

+-    T(m2, c0);  SU0(m1, m2, m3);  SU1(m0, m3);  H(e1); C(e0);

+-    T(m3, c0);  SU0(m2, m3, m0);  SU1(m1, m0);  H(e0); C(e1);

+-    T(m0, c0);  SU0(m3, m0, m1);  SU1(m2, m1);  H(e1); C(e0);

+-    T(m1, c1);  SU0(m0, m1, m2);  SU1(m3, m2);  H(e0); P(e1);

+-    T(m2, c1);  SU0(m1, m2, m3);  SU1(m0, m3);  H(e1); P(e0);

+-    T(m3, c1);  SU0(m2, m3, m0);  SU1(m1, m0);  H(e0); P(e1);

+-    T(m0, c1);  SU0(m3, m0, m1);  SU1(m2, m1);  H(e1); P(e0);

+-    T(m1, c1);  SU0(m0, m1, m2);  SU1(m3, m2);  H(e0); P(e1);

+-    T(m2, c2);  SU0(m1, m2, m3);  SU1(m0, m3);  H(e1); M(e0);

+-    T(m3, c2);  SU0(m2, m3, m0);  SU1(m1, m0);  H(e0); M(e1);

+-    T(m0, c2);  SU0(m3, m0, m1);  SU1(m2, m1);  H(e1); M(e0);

+-    T(m1, c2);  SU0(m0, m1, m2);  SU1(m3, m2);  H(e0); M(e1);

+-    T(m2, c2);  SU0(m1, m2, m3);  SU1(m0, m3);  H(e1); M(e0);

+-    T(m3, c3);  SU0(m2, m3, m0);  SU1(m1, m0);  H(e0); P(e1);

+-    T(m0, c3);  SU0(m3, m0, m1);  SU1(m2, m1);  H(e1); P(e0);

+-    T(m1, c3);                    SU1(m3, m2);  H(e0); P(e1);

+-    T(m2, c3);                                  H(e1); P(e0);

+-    T(m3, c3);                                  H(e0); P(e1);

++    T(m0, c0);                                H(e1); C(e0)

++    T(m1, c0);  SU0(m0, m1, m2)               H(e0); C(e1)

++    T(m2, c0);  SU0(m1, m2, m3)  SU1(m0, m3)  H(e1); C(e0)

++    T(m3, c0);  SU0(m2, m3, m0)  SU1(m1, m0)  H(e0); C(e1)

++    T(m0, c0);  SU0(m3, m0, m1)  SU1(m2, m1)  H(e1); C(e0)

++    T(m1, c1);  SU0(m0, m1, m2)  SU1(m3, m2)  H(e0); P(e1)

++    T(m2, c1);  SU0(m1, m2, m3)  SU1(m0, m3)  H(e1); P(e0)

++    T(m3, c1);  SU0(m2, m3, m0)  SU1(m1, m0)  H(e0); P(e1)

++    T(m0, c1);  SU0(m3, m0, m1)  SU1(m2, m1)  H(e1); P(e0)

++    T(m1, c1);  SU0(m0, m1, m2)  SU1(m3, m2)  H(e0); P(e1)

++    T(m2, c2);  SU0(m1, m2, m3)  SU1(m0, m3)  H(e1); M(e0)

++    T(m3, c2);  SU0(m2, m3, m0)  SU1(m1, m0)  H(e0); M(e1)

++    T(m0, c2);  SU0(m3, m0, m1)  SU1(m2, m1)  H(e1); M(e0)

++    T(m1, c2);  SU0(m0, m1, m2)  SU1(m3, m2)  H(e0); M(e1)

++    T(m2, c2);  SU0(m1, m2, m3)  SU1(m0, m3)  H(e1); M(e0)

++    T(m3, c3);  SU0(m2, m3, m0)  SU1(m1, m0)  H(e0); P(e1)

++    T(m0, c3);  SU0(m3, m0, m1)  SU1(m2, m1)  H(e1); P(e0)

++    T(m1, c3);                   SU1(m3, m2)  H(e0); P(e1)

++    T(m2, c3);                                H(e1); P(e0)

++    T(m3, c3);                                H(e0); P(e1)

+                                                                                                                      

+     abcd = vaddq_u32(abcd, abcd_save);

+     e0 += e0_save;

+diff -Naur a/C/Sha256Opt.c b/C/Sha256Opt.c
+--- a/C/Sha256Opt.c
++++ b/C/Sha256Opt.c
+@@ -316,10 +316,10 @@
+     LOAD_SHUFFLE (m2, 2)

+     LOAD_SHUFFLE (m3, 3)

+ 

+-    R16 ( 0, NNN, NNN, SM1, NNN, SM1, SM2, SM1, SM2 );

+-    R16 ( 1, SM1, SM2, SM1, SM2, SM1, SM2, SM1, SM2 );

+-    R16 ( 2, SM1, SM2, SM1, SM2, SM1, SM2, SM1, SM2 );

+-    R16 ( 3, SM1, SM2, NNN, SM2, NNN, NNN, NNN, NNN );

++    R16 ( 0, NNN, NNN, SM1, NNN, SM1, SM2, SM1, SM2 )

++    R16 ( 1, SM1, SM2, SM1, SM2, SM1, SM2, SM1, SM2 )

++    R16 ( 2, SM1, SM2, SM1, SM2, SM1, SM2, SM1, SM2 )

++    R16 ( 3, SM1, SM2, NNN, SM2, NNN, NNN, NNN, NNN )

+     

+     state0 = vaddq_u32(state0, state0_save);

+     state1 = vaddq_u32(state1, state1_save);

+diff -Naur a/CPP/Windows/System.h b/CPP/Windows/System.h
+--- a/CPP/Windows/System.h
++++ b/CPP/Windows/System.h
+@@ -105,7 +105,7 @@
+   }

+   

+   void CpuZero() { }

+-  void CpuSet(unsigned cpuIndex) { UNUSED_VAR(cpuIndex); }

++  void CpuSet(unsigned cpuIndex) { UNUSED_VAR(cpuIndex) }

+   int IsCpuSet(unsigned cpuIndex) const { return (cpuIndex < numSysThreads) ? 1 : 0; }

+ 

+   BOOL SetProcAffinity() const

diff --git a/nixpkgs/pkgs/tools/archivers/7zz/update.sh b/nixpkgs/pkgs/tools/archivers/7zz/update.sh
new file mode 100755
index 000000000000..f641cf9ad0c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/7zz/update.sh
@@ -0,0 +1,51 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p coreutils gnused curl jq nix-prefetch
+set -euo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+DRV_DIR="$PWD"
+
+OLD_VERSION="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+# The best_release.json is not always up-to-date
+# In those cases you can force the version by calling `./update.sh <newer_version>`
+NEW_VERSION="${1:-$(curl -H "Accept: application/json" 'https://sourceforge.net/projects/sevenzip/best_release.json' | jq '.platform_releases.linux.filename' -r | cut -d/ -f3)}"
+
+echo "comparing versions $OLD_VERSION => $NEW_VERSION"
+if [[ "$OLD_VERSION" == "$NEW_VERSION" ]]; then
+    echo "Already up to date! Doing nothing"
+    exit 0
+fi
+
+NIXPKGS_ROOT="$(realpath "$DRV_DIR/../../../..")"
+
+echo "getting free source hash"
+OLD_FREE_HASH="$(nix-instantiate --eval --strict -E "with import $NIXPKGS_ROOT {}; _7zz.src.drvAttrs.outputHash" | tr -d '"')"
+echo "getting unfree source hash"
+OLD_UNFREE_HASH="$(nix-instantiate --eval --strict -E "with import $NIXPKGS_ROOT {}; (_7zz.override { enableUnfree = true; }).src.drvAttrs.outputHash" | tr -d '"')"
+
+NEW_VERSION_FORMATTED="$(echo "$NEW_VERSION" | tr -d '.')"
+URL="https://7-zip.org/a/7z${NEW_VERSION_FORMATTED}-src.tar.xz"
+
+
+NEW_FREE_HASH=$(nix-prefetch -f "$NIXPKGS_ROOT" -E "_7zz.src" --url "$URL")
+
+NEW_UNFREE_OUT=$(nix-prefetch -f "$NIXPKGS_ROOT" -E "(_7zz.override { enableUnfree = true; }).src" --url "$URL" --output raw --print-path)
+# first line of raw output is the hash
+NEW_UNFREE_HASH="$(echo "$NEW_UNFREE_OUT" | sed -n 1p)"
+# second line of raw output is the src path
+NEW_UNFREE_SRC="$(echo "$NEW_UNFREE_OUT" | sed -n 2p)"
+# make sure to nuke the unfree src from the updater's machine
+# > the license requires that you agree to these use restrictions, or you must remove the software (source and binary) from your hard disks
+# https://fedoraproject.org/wiki/Licensing:Unrar
+nix-store --delete "$NEW_UNFREE_SRC"
+
+
+echo "updating version"
+sed -i "s/version = \"$OLD_VERSION\";/version = \"$NEW_VERSION\";/" "$DRV_DIR/default.nix"
+
+echo "updating free hash"
+sed -i "s@free = \"$OLD_FREE_HASH\";@free = \"$NEW_FREE_HASH\";@" "$DRV_DIR/default.nix"
+echo "updating unfree hash"
+sed -i "s@unfree = \"$OLD_UNFREE_HASH\";@unfree = \"$NEW_UNFREE_HASH\";@" "$DRV_DIR/default.nix"
+
+echo "done"
diff --git a/nixpkgs/pkgs/tools/archivers/afio/0001-makefile-fix-installation.patch b/nixpkgs/pkgs/tools/archivers/afio/0001-makefile-fix-installation.patch
new file mode 100644
index 000000000000..d52995281347
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/afio/0001-makefile-fix-installation.patch
@@ -0,0 +1,45 @@
+From 428c6e0eb604b63a67fda6af445c10c8ae3c1826 Mon Sep 17 00:00:00 2001
+From: Philipp Gesang <phg@phi-gamma.net>
+Date: Sun, 27 Jan 2019 21:37:13 +0100
+Subject: [PATCH] makefile: fix installation
+
+- comment hard-coded $(CC)
+- avoid full paths during install
+- set proper permissions
+---
+ Makefile | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 9268c6f..0797579 100644
+--- a/Makefile
++++ b/Makefile
+@@ -76,7 +76,7 @@ MW=-Wformat -Werror=format-security -Wall
+ 
+ CFLAGS1 = -Wall -Wstrict-prototypes -s -O2 -fomit-frame-pointer -Wno-unused-result $(LARGEFILEFLAGS) $(MW)
+ 
+-CC=gcc
++#CC=gcc
+ 
+ # also using contents of usin CPPFLAGS, CFLAGS, LDFLAGS out of environment
+ # variables, if they exist
+@@ -94,9 +94,14 @@ clean:
+ 	rm -f regtest/statsize regtest/statsize64
+ 	cd regtest; /bin/sh regtest.clean
+ 
++ifndef DESTDIR
++install:
++	$(error Please specify install prefix as $$DESTDIR)
++else
+ install: afio
+-	cp afio /usr/local/bin
+-	cp afio.1 /usr/share/man/man1
++	install -Dm755 afio $(DESTDIR)/bin/afio
++	install -Dm644 afio.1 $(DESTDIR)/share/man/man1/afio.1
++endif
+ 
+ # generate default list of -E extensions from manpage
+ # note: on sun, I had to change awk command below to nawk or gawk
+-- 
+2.18.1
+
diff --git a/nixpkgs/pkgs/tools/archivers/afio/default.nix b/nixpkgs/pkgs/tools/archivers/afio/default.nix
new file mode 100644
index 000000000000..d321bd44985d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/afio/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub } :
+
+stdenv.mkDerivation rec {
+  version = "2.5.2";
+  pname = "afio";
+
+  src = fetchFromGitHub {
+    owner = "kholtman";
+    repo = "afio";
+    rev = "v${version}";
+    sha256 = "1vbxl66r5rp5a1qssjrkfsjqjjgld1cq57c871gd0m4qiq9rmcfy";
+  };
+
+  /*
+   * A patch to simplify the installation and for removing the
+   * hard coded dependency on GCC.
+   */
+  patches = [ ./0001-makefile-fix-installation.patch ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = {
+    homepage = "https://github.com/kholtman/afio";
+    description = "Fault tolerant cpio archiver targeting backups";
+    platforms = lib.platforms.all;
+    /*
+     * Licensing is complicated due to the age of the code base, but
+     * generally free. See the file ``afio_license_issues_v5.txt`` for
+     * a comprehensive discussion.
+     */
+    license = lib.licenses.free;
+    mainProgram = "afio";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/arc_unpacker/default.nix b/nixpkgs/pkgs/tools/archivers/arc_unpacker/default.nix
new file mode 100644
index 000000000000..61bf3fa91e74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/arc_unpacker/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, makeWrapper
+, boost
+, libpng
+, libiconv
+, libjpeg
+, zlib
+, openssl
+, libwebp
+, catch2
+}:
+
+stdenv.mkDerivation {
+  pname = "arc_unpacker";
+  version = "unstable-2021-08-06";
+
+  src = fetchFromGitHub {
+    owner = "vn-tools";
+    repo = "arc_unpacker";
+    rev = "456834ecf2e5686813802c37efd829310485c57d";
+    hash = "sha256-STbdWH7Mr3gpOrZvujblYrIIKEWBHzy1/BaNuh4teI8=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "failing_tests.patch";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/failing_tests.patch?h=arc_unpacker-git&id=bda1ad9f69e6802e703b2e6913d71a36d76cfef9";
+      hash = "sha256-bClACsf/+SktyLAPtt7EcSqprkw8JVIi1ZLpcJcv9IE=";
+    })
+    (fetchpatch {
+      name = "include_cstdint.patch";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/include_cstdint.patch?h=arc_unpacker-git&id=8c5c5121b23813c7650db19cb617b409d8fdcc9f";
+      hash = "sha256-3BQ1v7s9enUK/js7Jqrqo2RdSRvGVd7hMcY4iL51SiE=";
+    })
+  ];
+
+  postPatch = ''
+    cp ${catch2}/include/catch2/catch.hpp tests/test_support/catch.h
+    sed '1i#include <limits>' -i src/dec/eagls/pak_archive_decoder.cc # gcc12
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    catch2
+  ];
+
+  buildInputs = [
+    boost
+    libiconv
+    libjpeg
+    libpng
+    libwebp
+    openssl
+    zlib
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    pushd ..
+    ./build/run_tests
+    popd
+
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/doc/arc_unpacker $out/libexec/arc_unpacker
+    cp arc_unpacker $out/libexec/arc_unpacker/arc_unpacker
+    cp ../GAMELIST.{htm,js} $out/share/doc/arc_unpacker
+    cp -r ../etc $out/libexec/arc_unpacker
+    makeWrapper $out/libexec/arc_unpacker/arc_unpacker $out/bin/arc_unpacker
+
+    runHook postInstall
+  '';
+
+  # A few tests fail on aarch64-linux
+  doCheck = !(stdenv.isLinux && stdenv.isAarch64);
+
+  meta = with lib; {
+    description = "A tool to extract files from visual novel archives";
+    homepage = "https://github.com/vn-tools/arc_unpacker";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ midchildan ];
+    platforms = platforms.all;
+    mainProgram = "arc_unpacker";
+
+    # unit test failures
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/arj/default.nix b/nixpkgs/pkgs/tools/archivers/arj/default.nix
new file mode 100644
index 000000000000..6f365e226e20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/arj/default.nix
@@ -0,0 +1,155 @@
+{stdenv, lib, fetchurl, fetchpatch, autoreconfHook}:
+
+stdenv.mkDerivation rec {
+  pname = "arj";
+  version = "3.10.22";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1nx7jqxwqkihhdmdbahhzqhjqshzw1jcsvwddmxrwrn8rjdlr7jq";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/001_arches_align.patch";
+      sha256 = "0i3qclm2mh98c04rqpx1r4qagd3wpxlkj7lvq0ddpkmr8bm0fh0m";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/002_no_remove_static_const.patch";
+      sha256 = "0zfjqmjsj0y1kfzxbp29v6nxq5qwgazhb9clqc544sm5zn0bdp8n";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/003_64_bit_clean.patch";
+      sha256 = "0mda9fkaqf2s1xl6vlbkbq20362h3is9dpml9kfmacpbifl4dx3n";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/004_parallel_build.patch";
+      sha256 = "0gam6k7jknzmbjlf1r6c9kjh5s5h76pd31v59cnaqiycwiy8z6q9";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/005_use_system_strnlen.patch";
+      sha256 = "0q0ypm8mdsxd0rl1k0id6fdx5m7mvqgwcla4r250cmc6zqzpib6d";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/006_use_safe_strcpy.patch";
+      sha256 = "1garad95s34cix3kd77lz37andrcnz19glzkfdnkjaq7ldvzwikc";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/hurd_no_fcntl_getlk.patch";
+      sha256 = "0b3hpn4qypimrw9ar2n4h24886sl6pmim4lb4ly1wqcq0f73arva";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/security_format.patch";
+      sha256 = "0q67cvln55p38bm0xwd2cgppqmkp2nfar2pg1zj78f7ncn35lbvf";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/doc_refer_robert_k_jung.patch";
+      sha256 = "1wxdx0m6a9vdvjlaycwsissn75l1ni7grg8n6qmkynz2vrcvgzb1";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_fix.patch";
+      sha256 = "19ycp1rak7l6ql28m50v95ls621w3sl8agw5r5va73svkgh8hc3g";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_flags.patch";
+      sha256 = "1jw1y9i9lw1idgi4l9cycwsql1hcz1m4f3k2iybwsgx0acaw695q";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_strip.patch";
+      sha256 = "1b18khj6cxnjyqk2ycygwqlcs20hrsbf4h6bckl99dxnpbq5blxi";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_pie.patch";
+      sha256 = "1jqswxgc1plipblf055n9175fbanfi6fb67lnzk8dcvxjn227fs3";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/self_integrity_64bit.patch";
+      sha256 = "0s5zdq81a0f83hdg9hy6lqn3xvckx9y9r20awczm9mbf11vi01cb";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/security-afl.patch";
+      sha256 = "0yajcwpghij8wg21a0kkp3f9x7anz5m121jx2vnkyn04bvi9541a";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/security-traversal-dir.patch";
+      sha256 = "10lv3867k0wm2s0cyf40hkxfqbjaxm4aph5ivk2q2rjkracrn2y4";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/security-traversal-symlink.patch";
+      sha256 = "095pdfskxwh0jnyy31dpz10s2ppv8n7lvvn4q722y3g71d0c79qq";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/out-of-bounds-read.patch";
+      sha256 = "0ps9lqkbqzlhzr2bnr47sir431z1nywr7nagkmk42iki4d96v0jq";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/remove_build_date.patch";
+      sha256 = "1vjlfq6firxpj068l9acyqs77mfydn1rwgr2jmxgsy9mq0fw1dsc";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/reproducible_help_archive.patch";
+      sha256 = "0l3qi9f140pwc6fk8qdbxx4g9d8zlf45asimmr8wfpbi4pf59n8i";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_cross.patch";
+      sha256 = "1vb0vbh3jbxj192q47vg3f41l343ghcz2ypbrrm2bkbpwm5cl8qr";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/fix-time_t-usage.patch";
+      sha256 = "012c6pnf5y4jwn715kxn3vjy088rm905959j6yh8bslyx84qaijv";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_fix_autoreconf.patch";
+      sha256 = "0yhxbdasnbqcg1nyx2379fpbr7fmdlv4n2nlxrv1z1vbc7rlvw9d";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace environ.c \
+        --replace "  #include <sys/statfs.h>" "  #include <sys/mount.h>"
+  '';
+
+  preAutoreconf = ''
+    cd gnu
+  '';
+
+  postConfigure = ''
+    cd ..
+  '';
+
+  meta = with lib; {
+    description = "Open-source implementation of the world-famous ARJ archiver";
+    longDescription = ''
+      This version of ARJ has been created with an intent to preserve maximum
+      compatibility and retain the feature set of the original ARJ archiver as
+      provided by ARJ Software, Inc.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.sander ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/atool/default.nix b/nixpkgs/pkgs/tools/archivers/atool/default.nix
new file mode 100644
index 000000000000..8303a1b4277b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/atool/default.nix
@@ -0,0 +1,21 @@
+{lib, stdenv, fetchurl, perl, bash}:
+
+stdenv.mkDerivation rec {
+  pname = "atool";
+  version = "0.39.0";
+
+  src = fetchurl {
+    url = "mirror://savannah/atool/atool-${version}.tar.gz";
+    sha256 = "aaf60095884abb872e25f8e919a8a63d0dabaeca46faeba87d12812d6efc703b";
+  };
+
+  buildInputs = [ perl ];
+  configureScript = "${bash}/bin/bash configure";
+
+  meta = {
+    homepage = "https://www.nongnu.org/atool";
+    description = "Archive command line helper";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/bomutils/default.nix b/nixpkgs/pkgs/tools/archivers/bomutils/default.nix
new file mode 100644
index 000000000000..1b147d10ec28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/bomutils/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bomutils";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "hogliux";
+    repo = pname;
+    rev = version;
+    sha256 = "1i7nhbq1fcbrjwfg64znz8p4l7662f7qz2l6xcvwd5z93dnmgmdr";
+  };
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "CXX=${stdenv.cc.targetPrefix}c++"
+  ];
+
+  # fix
+  # src/lsbom.cpp:70:10: error: reference to 'data' is ambiguous
+  # which refers to std::data from C++17
+  env.NIX_CFLAGS_COMPILE = toString [ "-std=c++14" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/hogliux/bomutils";
+    description = "Open source tools to create bill-of-materials files used in macOS installers";
+    platforms = platforms.all;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ prusnak ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/cabextract/default.nix b/nixpkgs/pkgs/tools/archivers/cabextract/default.nix
new file mode 100644
index 000000000000..6860b5226771
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/cabextract/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "cabextract";
+  version = "1.11";
+
+  src = fetchurl {
+    url = "https://www.cabextract.org.uk/cabextract-${version}.tar.gz";
+    sha256 = "sha256-tVRtsRVeTHGP89SyeFc2BPMN1kw8W/1GV80Im4I6OsY=";
+  };
+
+  # Let's assume that fnmatch works for cross-compilation, otherwise it gives an error:
+  # undefined reference to `rpl_fnmatch'.
+  configureFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+    "ac_cv_func_fnmatch_works=yes"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.cabextract.org.uk/";
+    description = "Free Software for extracting Microsoft cabinet files";
+    platforms = platforms.all;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "cabextract";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/cpio/default.nix b/nixpkgs/pkgs/tools/archivers/cpio/default.nix
new file mode 100644
index 000000000000..5b65a580fa67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/cpio/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchurl
+, autoreconfHook
+
+# for passthru.tests
+, git
+, libguestfs
+, nixosTests
+, rpm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cpio";
+  version = "2.15";
+
+  src = fetchurl {
+    url = "mirror://gnu/cpio/cpio-${version}.tar.bz2";
+    hash = "sha256-k3YQuXwymh7JJoVT+3gAN7z/8Nz/6XJevE/ZwaqQdds=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  separateDebugInfo = true;
+
+  preConfigure = lib.optionalString stdenv.isCygwin ''
+    sed -i gnu/fpending.h -e 's,include <stdio_ext.h>,,'
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = {
+    inherit libguestfs rpm;
+    git = git.tests.withInstallCheck;
+    initrd = nixosTests.systemd-initrd-simple;
+  };
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/cpio/";
+    description = "A program to create or extract from cpio archives";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    priority = 6; # resolves collision with gnutar's "libexec/rmt"
+    mainProgram = "cpio";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/cromfs/default.nix b/nixpkgs/pkgs/tools/archivers/cromfs/default.nix
new file mode 100644
index 000000000000..b775eb1561ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/cromfs/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, pkg-config, fuse, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "cromfs";
+  version = "1.5.10.2";
+
+  src = fetchurl {
+    url = "https://bisqwit.iki.fi/src/arch/cromfs-${version}.tar.bz2";
+    sha256 = "0xy2x1ws1qqfp7hfj6yzm80zhrxzmhn0w2yns77im1lmd2h18817";
+  };
+
+  postPatch = "patchShebangs configure";
+
+  installPhase = ''
+    install -d $out/bin
+    install cromfs-driver $out/bin
+    install util/cvcromfs $out/bin
+    install util/mkcromfs $out/bin
+    install util/unmkcromfs $out/bin
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ fuse perl ];
+
+  makeFlags = [ "CXXFLAGS=-std=c++03" ];
+
+  meta = with lib; {
+    description = "FUSE Compressed ROM filesystem with lzma";
+    homepage = "https://bisqwit.iki.fi/source/cromfs.html";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.viric ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/ctrtool/default.nix b/nixpkgs/pkgs/tools/archivers/ctrtool/default.nix
new file mode 100644
index 000000000000..74b95a116575
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/ctrtool/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ctrtool";
+  version = "0.7";
+
+  src = fetchFromGitHub {
+    owner  = "jakcron";
+    repo   = "Project_CTR";
+    rev    = "ctrtool-v${version}";
+    sha256 = "07aayck82w5xcp3si35d7ghybmrbqw91fqqvmbpjrjcixc6m42z7";
+  };
+
+  sourceRoot = "${src.name}/ctrtool";
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" "CXX=${stdenv.cc.targetPrefix}c++"];
+  enableParallelBuilding = true;
+
+  installPhase = "
+    mkdir $out/bin -p
+    cp ctrtool${stdenv.hostPlatform.extensions.executable} $out/bin/
+  ";
+
+  meta = with lib; {
+    license = licenses.mit;
+    description = "A tool to extract data from a 3ds rom";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.marius851000 ];
+    mainProgram = "ctrtool";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/archivers/dumpnar/default.nix b/nixpkgs/pkgs/tools/archivers/dumpnar/default.nix
new file mode 100644
index 000000000000..77ce4649b399
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/dumpnar/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "dumpnar";
+  version = "unstable-2023-01-01";
+
+  src = fetchFromGitHub {
+    owner = "stephank";
+    repo = "dumpnar";
+    rev = "7b05e204264183532e8592ad132f74ddf05bc428";
+    hash = "sha256-762vgCn2d6QoXRBjpe/SyHKgyQJAV0sEl1prcyf/ClE=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp dumpnar $out/bin/
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/stephank/dumpnar";
+    description = "Minimal tool to produce a Nix NAR archive";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.stephank ];
+    mainProgram = "dumpnar";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/fsarchiver/default.nix b/nixpkgs/pkgs/tools/archivers/fsarchiver/default.nix
new file mode 100644
index 000000000000..40a16f21ab59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/fsarchiver/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, zlib, bzip2, lzo, lz4, zstd, xz
+, libgcrypt, e2fsprogs, util-linux, libgpg-error }:
+
+let
+  version = "0.8.7";
+
+in stdenv.mkDerivation {
+  pname = "fsarchiver";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "fdupoux";
+    repo = "fsarchiver";
+    rev = version;
+    sha256 = "sha256-1ZIqFgB05gV1L7P/AIL4qfYT4cNMp75QElEM64BXyO8=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook pkg-config
+  ];
+
+  buildInputs = [
+    zlib bzip2 xz lzo lz4 zstd xz
+    libgcrypt e2fsprogs util-linux libgpg-error
+  ];
+
+  meta = with lib; {
+    description = "File system archiver for linux";
+    longDescription = ''
+      FSArchiver is a system tool that allows you to save the contents of a
+      file-system to a compressed archive file. The file-system can be restored
+      on a partition which has a different size and it can be restored on a
+      different file-system. Unlike tar/dar, FSArchiver also creates the
+      file-system when it extracts the data to partitions. Everything is
+      checksummed in the archive in order to protect the data. If the archive is
+      corrupt, you just loose the current file, not the whole archive.
+    '';
+    homepage = "https://www.fsarchiver.org/";
+    license = licenses.lgpl2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    mainProgram = "fsarchiver";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/gbl/default.nix b/nixpkgs/pkgs/tools/archivers/gbl/default.nix
new file mode 100644
index 000000000000..02dbfc683edb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/gbl/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, fetchpatch
+, pkg-config
+, openssl
+, testers
+, gbl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gbl";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "dac-gmbh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Xzx14fvYWTZYM9Pnowf1M3D0PTPRLwsXHUj/PJskRWw=";
+  };
+
+  cargoPatches = [
+    # update ring to fix building on Mac M1
+    # https://github.com/dac-gmbh/gbl/pull/64
+    (fetchpatch {
+      url = "https://github.com/raboof/gbl/commit/17e154d66932af59abe8677309792606b7f64c7d.patch";
+      sha256 = "sha256-5Itoi86Q+9FzSTtnggODKPwwYPp5BpIVgR2vYMLHBts=";
+    })
+    # Upstream does not include Cargo.lock, even though this is recommended for applications.
+    (fetchpatch {
+      url = "https://github.com/raboof/gbl/commit/9423d36ee3168bca8db7a7cb65611dc7ddc2daf0.patch";
+      sha256 = "sha256-zwHXgUVkAYiQs/AT/pINnZoECoXzh+9astWMYENGTL8=";
+    })
+  ];
+
+  cargoSha256 = "sha256-CeGLSseKUe2XudRqZm5Y7o7ZLDtDBg/MFunOGqxFZGM=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  passthru.tests.version =
+    testers.testVersion { package = gbl; };
+
+  meta = with lib; {
+    description = "GBL Firmware file manipulation";
+    longDescription = ''
+      Utility to read, create and manipulate `.gbl` firmware update
+      files targeting the Silicon Labs Gecko Bootloader.
+    '';
+    homepage = "https://github.com/jonas-schievink/gbl";
+    license = licenses.mit;
+    maintainers = [ maintainers.raboof ];
+    mainProgram = "gbl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/gnutar/default.nix b/nixpkgs/pkgs/tools/archivers/gnutar/default.nix
new file mode 100644
index 000000000000..331d977147b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/gnutar/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv, fetchurl, autoreconfHook, acl, libintl }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "gnutar";
+  version = "1.35";
+
+  src = fetchurl {
+    url = "mirror://gnu/tar/tar-${version}.tar.xz";
+    sha256 = "sha256-TWL/NzQux67XSFNTI5MMfPlKz3HDWRiCsmp+pQ8+3BY=";
+  };
+
+  # avoid retaining reference to CF during stdenv bootstrap
+  configureFlags = lib.optionals stdenv.isDarwin [
+    "gt_cv_func_CFPreferencesCopyAppValue=no"
+    "gt_cv_func_CFLocaleCopyCurrent=no"
+    "gt_cv_func_CFLocaleCopyPreferredLanguages=no"
+  ];
+
+  # gnutar tries to call into gettext between `fork` and `exec`,
+  # which is not safe on darwin.
+  # see http://article.gmane.org/gmane.os.macosx.fink.devel/21882
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace src/system.c --replace '_(' 'N_('
+  '';
+
+  outputs = [ "out" "info" ];
+
+  nativeBuildInputs = lib.optional stdenv.isDarwin autoreconfHook;
+  # Add libintl on Darwin specifically as it fails to link (or skip)
+  # NLS on it's own:
+  #  "_libintl_textdomain", referenced from:
+  #    _main in tar.o
+  #  ld: symbol(s) not found for architecture x86_64
+  buildInputs = lib.optional stdenv.isLinux acl ++ lib.optional stdenv.isDarwin libintl;
+
+  # May have some issues with root compilation because the bootstrap tool
+  # cannot be used as a login shell for now.
+  FORCE_UNSAFE_CONFIGURE = lib.optionalString (stdenv.hostPlatform.system == "armv7l-linux" || stdenv.isSunOS) "1";
+
+  preConfigure = if stdenv.isCygwin then ''
+    sed -i gnu/fpending.h -e 's,include <stdio_ext.h>,,'
+  '' else null;
+
+  doCheck = false; # fails
+  doInstallCheck = false; # fails
+
+  meta = {
+    description = "GNU implementation of the `tar' archiver";
+    longDescription = ''
+      The Tar program provides the ability to create tar archives, as
+      well as various other kinds of manipulation.  For example, you
+      can use Tar on previously created archives to extract files, to
+      store additional files, or to update or list files which were
+      already stored.
+
+      Initially, tar archives were used to store files conveniently on
+      magnetic tape.  The name "Tar" comes from this use; it stands
+      for tape archiver.  Despite the utility's name, Tar can direct
+      its output to available devices, files, or other programs (using
+      pipes), it can even access remote devices or files (as
+      archives).
+    '';
+    homepage = "https://www.gnu.org/software/tar/";
+
+    license = lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    mainProgram = "tar";
+    platforms = lib.platforms.all;
+
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/innoextract/default.nix b/nixpkgs/pkgs/tools/archivers/innoextract/default.nix
new file mode 100644
index 000000000000..7c66dcb84d00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/innoextract/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, cmake, makeWrapper
+, boost, xz
+, withGog ? false, unar ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "innoextract";
+  version = "1.9";
+
+  src = fetchurl {
+    url = "https://constexpr.org/innoextract/files/innoextract-${version}.tar.gz";
+    sha256 = "09l1z1nbl6ijqqwszdwch9mqr54qb7df0wp2sd77v17dq6gsci33";
+  };
+
+  buildInputs = [ xz boost ];
+
+  # Python is reported as missing during the build, however
+  # including Python does not change the output.
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+
+  strictDeps = true;
+
+  # we need unar to for multi-archive extraction
+  postFixup = lib.optionalString withGog ''
+    wrapProgram $out/bin/innoextract \
+      --prefix PATH : ${lib.makeBinPath [ unar ]}
+  '';
+
+  meta = with lib; {
+    description = "A tool to unpack installers created by Inno Setup";
+    homepage = "https://constexpr.org/innoextract/";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+    mainProgram = "innoextract";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/lha/default.nix b/nixpkgs/pkgs/tools/archivers/lha/default.nix
new file mode 100644
index 000000000000..b7d0ac930290
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/lha/default.nix
@@ -0,0 +1,28 @@
+{stdenv, lib, fetchFromGitHub, autoreconfHook}:
+
+stdenv.mkDerivation {
+  pname = "lha";
+  version = "unstable-2021-01-07";
+
+  src = fetchFromGitHub {
+    owner = "jca02266";
+    repo = "lha";
+    rev = "03475355bc6311f7f816ea9a88fb34a0029d975b";
+    sha256 = "18w2x0g5yq89yxkxh1fmb05lz4hw7a3b4jmkk95gvh11mwbbr5lm";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "LHa is an archiver and compressor using the LZSS and Huffman encoding compression algorithms";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.sander ];
+    # Some of the original LhA code has been rewritten and the current author
+    # considers adopting a "true" free and open source license for it.
+    # However, old code is still covered by the original LHa license, which is
+    # not a free software license (it has additional requirements on commercial
+    # use).
+    license = licenses.unfree;
+    mainProgram = "lha";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/maxcso/default.nix b/nixpkgs/pkgs/tools/archivers/maxcso/default.nix
new file mode 100644
index 000000000000..e16d557965dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/maxcso/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, libuv, lz4, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "maxcso";
+  version = "1.13.0";
+
+  src = fetchFromGitHub {
+    owner = "unknownbrackets";
+    repo = "maxcso";
+    rev = "v${version}";
+    sha256 = "sha256-6LjR1ZMZsi6toz9swPzNmSAlrUykwvVdYi1mR8Ctq5U=";
+  };
+
+  buildInputs = [ libuv lz4 zlib ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/unknownbrackets/maxcso";
+    description =
+      "A fast ISO to CSO compression program for use with PSP and PS2 emulators, which uses multiple algorithms for best compression ratio";
+    maintainers = with maintainers; [ david-sawatzke ];
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.isc;
+    mainProgram = "maxcso";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/ndstool/default.nix b/nixpkgs/pkgs/tools/archivers/ndstool/default.nix
new file mode 100644
index 000000000000..e612d83d066d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/ndstool/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake }:
+
+stdenv.mkDerivation rec {
+  pname = "ndstool";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "devkitPro";
+    repo = "ndstool";
+    rev = "v${version}";
+    sha256 = "0isnm0is5k6dgi2n2c3mysyr5hpwikp5g0s3ix7ms928z04l8ccm";
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+
+  preConfigure = "./autogen.sh";
+
+  meta = {
+    homepage = "https://github.com/devkitPro/ndstool";
+    description = "A tool to unpack and repack nds rom";
+    maintainers = [ lib.maintainers.marius851000 ];
+    license = lib.licenses.gpl3;
+    mainProgram = "ndstool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/p7zip/default.nix b/nixpkgs/pkgs/tools/archivers/p7zip/default.nix
new file mode 100644
index 000000000000..23ffdcc41a70
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/p7zip/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchFromGitHub, enableUnfree ? false }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "p7zip";
+  version = "17.05";
+
+  src = fetchFromGitHub {
+    owner = "p7zip-project";
+    repo = "p7zip";
+    rev = "v${finalAttrs.version}";
+    sha256 = {
+      free = "sha256-5r7M9BVcAryZNTkqJ/BfHnSSWov1PwoZhUnLBwEbJoA=";
+      unfree = "sha256-z3qXgv/TkNRbb85Ew1OcJNxoyssfzHShc0b0/4NZOb0=";
+    }.${if enableUnfree then "unfree" else "free"};
+    # remove the unRAR related code from the src drv
+    # > the license requires that you agree to these use restrictions,
+    # > or you must remove the software (source and binary) from your hard disks
+    # https://fedoraproject.org/wiki/Licensing:Unrar
+    postFetch = lib.optionalString (!enableUnfree) ''
+      rm -r $out/CPP/7zip/Compress/Rar*
+      find $out -name makefile'*' -exec sed -i '/Rar/d' {} +
+    '';
+  };
+
+  # Default makefile is full of impurities on Darwin. The patch doesn't hurt Linux so I'm leaving it unconditional
+  postPatch = ''
+    sed -i '/CC=\/usr/d' makefile.macosx_llvm_64bits
+    # Avoid writing timestamps into compressed manpages
+    # to maintain determinism.
+    substituteInPlace install.sh --replace 'gzip' 'gzip -n'
+    chmod +x install.sh
+
+    # I think this is a typo and should be CXX? Either way let's kill it
+    sed -i '/XX=\/usr/d' makefile.macosx_llvm_64bits
+  '' + lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    substituteInPlace makefile.machine \
+      --replace 'CC=gcc'  'CC=${stdenv.cc.targetPrefix}gcc' \
+      --replace 'CXX=g++' 'CXX=${stdenv.cc.targetPrefix}g++'
+  '';
+
+  preConfigure = ''
+    buildFlags=all3
+  '' + lib.optionalString stdenv.isDarwin ''
+    cp makefile.macosx_llvm_64bits makefile.machine
+  '';
+
+  enableParallelBuilding = true;
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=c++11-narrowing";
+
+  makeFlags = [
+    "DEST_BIN=${placeholder "out"}/bin"
+    "DEST_SHARE=${placeholder "lib"}/lib/p7zip"
+    "DEST_MAN=${placeholder "man"}/share/man"
+    "DEST_SHARE_DOC=${placeholder "doc"}/share/doc/p7zip"
+  ];
+
+  outputs = [ "out" "lib" "doc" "man" ];
+
+  setupHook = ./setup-hook.sh;
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    homepage = "https://github.com/p7zip-project/p7zip";
+    description = "A new p7zip fork with additional codecs and improvements (forked from https://sourceforge.net/projects/p7zip/)";
+    license = with licenses;
+      # p7zip code is largely lgpl2Plus
+      # CPP/7zip/Compress/LzfseDecoder.cpp is bsd3
+      [ lgpl2Plus /* and */ bsd3 ] ++
+      # and CPP/7zip/Compress/Rar* are unfree with the unRAR license restriction
+      # the unRAR compression code is disabled by default
+      lib.optionals enableUnfree [ unfree ];
+    maintainers = with maintainers; [ raskin jk ];
+    platforms = platforms.unix;
+    mainProgram = "7z";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/archivers/p7zip/setup-hook.sh b/nixpkgs/pkgs/tools/archivers/p7zip/setup-hook.sh
new file mode 100644
index 000000000000..4dc88f07c0bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/p7zip/setup-hook.sh
@@ -0,0 +1,5 @@
+unpackCmdHooks+=(_try7zip)
+_try7zip() {
+    if ! [[ "$curSrc" =~ \.7z$ ]]; then return 1; fi
+    7z x "$curSrc"
+}
diff --git a/nixpkgs/pkgs/tools/archivers/p7zip/update.sh b/nixpkgs/pkgs/tools/archivers/p7zip/update.sh
new file mode 100755
index 000000000000..9ba67894b806
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/p7zip/update.sh
@@ -0,0 +1,47 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p coreutils gnused curl jq
+set -euo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+DRV_DIR="$PWD"
+
+OLD_VERSION="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+
+NEW_VERSION="$(curl https://api.github.com/repos/p7zip-project/p7zip/releases/latest | jq .tag_name -r | tr -d 'v')"
+
+echo "comparing versions $OLD_VERSION => $NEW_VERSION"
+if [[ "$OLD_VERSION" == "$NEW_VERSION" ]]; then
+    echo "Already up to date! Doing nothing"
+    exit 0
+fi
+
+NIXPKGS_ROOT="$(realpath "$DRV_DIR/../../../..")"
+
+echo "getting free source hash"
+OLD_FREE_HASH="$(nix-instantiate --eval --strict -E "with import $NIXPKGS_ROOT {}; p7zip.src.drvAttrs.outputHash" | tr -d '"')"
+echo "getting unfree source hash"
+OLD_UNFREE_HASH="$(nix-instantiate --eval --strict -E "with import $NIXPKGS_ROOT {}; (p7zip.override { enableUnfree = true; }).src.drvAttrs.outputHash" | tr -d '"')"
+
+
+NEW_FREE_HASH=$(nix-prefetch -f "$NIXPKGS_ROOT" -E "p7zip.src" --rev "v$NEW_VERSION")
+
+NEW_UNFREE_OUT=$(nix-prefetch -f "$NIXPKGS_ROOT" -E "(p7zip.override { enableUnfree = true; }).src" --rev "v$NEW_VERSION" --output raw --print-path)
+# first line of raw output is the hash
+NEW_UNFREE_HASH="$(echo "$NEW_UNFREE_OUT" | sed -n 1p)"
+# second line of raw output is the src path
+NEW_UNFREE_SRC="$(echo "$NEW_UNFREE_OUT" | sed -n 2p)"
+# make sure to nuke the unfree src from the updater's machine
+# > the license requires that you agree to these use restrictions, or you must remove the software (source and binary) from your hard disks
+# https://fedoraproject.org/wiki/Licensing:Unrar
+nix-store --delete "$NEW_UNFREE_SRC"
+
+
+echo "updating version"
+sed -i "s/version = \"$OLD_VERSION\";/version = \"$NEW_VERSION\";/" "$DRV_DIR/default.nix"
+
+echo "updating free hash"
+sed -i "s@free = \"$OLD_FREE_HASH\";@free = \"$NEW_FREE_HASH\";@" "$DRV_DIR/default.nix"
+echo "updating unfree hash"
+sed -i "s@unfree = \"$OLD_UNFREE_HASH\";@unfree = \"$NEW_UNFREE_HASH\";@" "$DRV_DIR/default.nix"
+
+echo "done"
diff --git a/nixpkgs/pkgs/tools/archivers/pax/default.nix b/nixpkgs/pkgs/tools/archivers/pax/default.nix
new file mode 100644
index 000000000000..feacf73fe87b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/pax/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, utmp, musl-fts }:
+
+stdenv.mkDerivation rec {
+  pname = "pax";
+  version = "20201030";
+
+  src = fetchurl {
+    url = "http://www.mirbsd.org/MirOS/dist/mir/cpio/paxmirabilis-${version}.tgz";
+    sha256 = "1p18nxijh323f4i1s2pg7pcr0557xljl5avv8ll5s9nfr34r5j0w";
+  };
+
+  buildInputs = lib.optional stdenv.isDarwin utmp
+    ++ lib.optional stdenv.hostPlatform.isMusl musl-fts;
+
+  NIX_LDFLAGS = lib.optionalString stdenv.hostPlatform.isMusl "-lfts";
+
+  buildPhase = ''
+    sh Build.sh -r -tpax
+  '';
+
+  installPhase = ''
+    install -Dm555 pax $out/bin/pax
+    ln -s $out/bin/pax $out/bin/paxcpio
+    ln -s $out/bin/pax $out/bin/paxtar
+    install -Dm444 mans/pax{,cpio,tar}.1 -t $out/share/man/man1/
+  '';
+
+  meta = with lib; {
+    description = "POSIX standard archive tool from MirBSD";
+    homepage = "https://www.mirbsd.org/pax.htm";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/payload-dumper-go/default.nix b/nixpkgs/pkgs/tools/archivers/payload-dumper-go/default.nix
new file mode 100644
index 000000000000..bb1572e1ceb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/payload-dumper-go/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, xz
+}:
+
+buildGoModule rec {
+  pname = "payload-dumper-go";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "ssut";
+    repo = "payload-dumper-go";
+    rev = "refs/tags/${version}";
+    hash = "sha256-P20/Nd2YOW9A9/OkpavVRBAi/ueYp812zZvVLnwX67Y=";
+  };
+
+  vendorHash = "sha256-CqIZFMDN/kK9bT7b/32yQ9NJAQnkI8gZUMKa6MJCaec=";
+
+  buildInputs = [ xz ];
+
+  meta = with lib; {
+    description = "An android OTA payload dumper written in Go";
+    homepage = "https://github.com/ssut/payload-dumper-go";
+    changelog = "https://github.com/ssut/payload-dumper-go/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aleksana ];
+    mainProgram = "payload-dumper-go";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/payload_dumper/default.nix b/nixpkgs/pkgs/tools/archivers/payload_dumper/default.nix
new file mode 100644
index 000000000000..ebb717a9e4ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/payload_dumper/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, makeWrapper
+, python3
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "payload_dumper";
+  version = "unstable-2022-04-11";
+
+  src = fetchFromGitHub {
+    owner = "vm03";
+    repo = "payload_dumper";
+    rev = "c1eb5dbbc7bd88ac94635ae90ec22ccf92f89881";
+    sha256 = "1j1hbh5vqq33wq2b9gqvm1qs9nl0bmqklbnyyyhwkcha7zxn0aki";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = with python3.pkgs; [ bsdiff4 protobuf ];
+
+  installPhase = ''
+    runHook preInstall
+
+    sitePackages=$out/${python3.sitePackages}/${finalAttrs.pname}
+
+    install -D ./payload_dumper.py $out/bin/payload_dumper
+    install -D ./update_metadata_pb2.py $sitePackages/update_metadata_pb2.py
+
+    wrapProgram $out/bin/payload_dumper \
+        --set PYTHONPATH "$sitePackages:$PYTHONPATH"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = finalAttrs.src.meta.homepage;
+    description = "Android OTA payload dumper";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ DamienCassou ];
+    mainProgram = "payload_dumper";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/archivers/peazip/default.nix b/nixpkgs/pkgs/tools/archivers/peazip/default.nix
new file mode 100644
index 000000000000..4070c58d46c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/peazip/default.nix
@@ -0,0 +1,98 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, wrapQtAppsHook
+, fpc
+, lazarus
+, xorg
+, libqt5pas
+, _7zz
+, archiver
+, brotli
+, upx
+, zpaq
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "peazip";
+  version = "9.6.0";
+
+  src = fetchFromGitHub {
+    owner = "peazip";
+    repo = pname;
+    rev = version;
+    hash = "sha256-75EkVRx6bX1ZZzeNSR7IvKNjTA5NvzFzUJdORiAVHBo=";
+  };
+  sourceRoot = "${src.name}/peazip-sources";
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    lazarus
+    fpc
+  ];
+
+  buildInputs = [
+    xorg.libX11
+    libqt5pas
+  ];
+
+  NIX_LDFLAGS = "--as-needed -rpath ${lib.makeLibraryPath buildInputs}";
+
+  buildPhase = ''
+    export HOME=$(mktemp -d)
+    cd dev
+    lazbuild --lazarusdir=${lazarus}/share/lazarus --widgetset=qt5 --build-all project_pea.lpi && [ -f pea ]
+    lazbuild --lazarusdir=${lazarus}/share/lazarus --widgetset=qt5 --build-all project_peach.lpi && [ -f peazip ]
+    cd ..
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # Executables
+    ## Main programs
+    install -D dev/{pea,peazip} -t $out/lib/peazip
+    mkdir -p $out/bin
+    ln -s $out/lib/peazip/{pea,peazip} $out/bin/
+
+    ## Symlink the available compression algorithm programs.
+    mkdir -p $out/lib/peazip/res/bin/7z
+    ln -s ${_7zz}/bin/7zz $out/lib/peazip/res/bin/7z/7z
+    mkdir -p $out/lib/peazip/res/bin/arc
+    ln -s ${archiver}/bin/arc $out/lib/peazip/res/bin/arc/
+    mkdir -p $out/lib/peazip/res/bin/brotli
+    ln -s ${brotli}/bin/brotli $out/lib/peazip/res/bin/brotli/
+    mkdir -p $out/lib/peazip/res/bin/upx
+    ln -s ${upx}/bin/upx $out/lib/peazip/res/bin/upx/
+    mkdir -p $out/lib/peazip/res/bin/zpaq
+    ln -s ${zpaq}/bin/zpaq $out/lib/peazip/res/bin/zpaq/
+    mkdir -p $out/lib/peazip/res/bin/zstd
+    ln -s ${zstd}/bin/zstd $out/lib/peazip/res/bin/zstd/
+
+    mkdir -p $out/share/peazip
+    ln -s $out/share/peazip $out/lib/peazip/res/share
+    cp -r res/share/{icons,lang,themes,presets} $out/share/peazip/
+    install -D res/share/batch/freedesktop_integration/peazip.png -t "$out/share/icons/hicolor/256x256/apps"
+    install -D res/share/icons/peazip_{7z,rar,zip}.png -t "$out/share/icons/hicolor/256x256/mimetypes"
+    install -D res/share/batch/freedesktop_integration/peazip_{add,extract}.png -t "$out/share/icons/hicolor/256x256/actions"
+    install -D res/share/batch/freedesktop_integration/*.desktop -t "$out/share/applications"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform file and archive manager";
+    longDescription = ''
+      Free Zip / Unzip software and Rar file extractor. Cross-platform file and archive manager.
+
+      Features volume spanning, compression, authenticated encryption.
+
+      Supports 7Z, 7-Zip sfx, ACE, ARJ, Brotli, BZ2, CAB, CHM, CPIO, DEB, GZ, ISO, JAR, LHA/LZH, NSIS, OOo, PEA, RAR, RPM, split, TAR, Z, ZIP, ZIPX, Zstandard.
+    '';
+    license = licenses.gpl3Only;
+    homepage = "https://peazip.github.io";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ annaaurora ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/pxattr/default.nix b/nixpkgs/pkgs/tools/archivers/pxattr/default.nix
new file mode 100644
index 000000000000..de4fc45b2611
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/pxattr/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, gcc }:
+
+stdenv.mkDerivation rec {
+  pname = "pxattr";
+  version = "2.1.0";
+
+  src = fetchurl {
+    url = "https://www.lesbonscomptes.com/pxattr/pxattr-${version}.tar.gz";
+    sha256 = "1dwcqc5z7gzma1zhis2md49bj2nq7m6jimh4zlx9szw6svisz56z";
+  };
+
+  buildInputs = [ gcc ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp pxattr $out/bin
+  '';
+
+  meta = {
+    homepage = "https://www.lesbonscomptes.com/pxattr/index.html";
+    description = "Provides a single interface to extended file attributes";
+    maintainers = [ lib.maintainers.vrthra ];
+    license = [ lib.licenses.mit ];
+    platforms = lib.platforms.unix;
+    mainProgram = "pxattr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/quickbms/0002-disable-openssl.patch b/nixpkgs/pkgs/tools/archivers/quickbms/0002-disable-openssl.patch
new file mode 100644
index 000000000000..3d77f45e3f86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/quickbms/0002-disable-openssl.patch
@@ -0,0 +1,10 @@
+--- src/Makefile	2023-05-25 18:16:56.000296653 +0900
++++ src/Makefile	2023-05-25 18:17:00.772272861 +0900
+@@ -23,7 +23,6 @@
+ EXTRA_TARGETS  = libs/amiga/amiga.s libs/powzix/*.cpp
+ CFLAGS += -msse2
+ endif
+-USE_OPENSSL	= 1
+ endif
+ 
+ # -liconv and -fPIC are necessary on Android
diff --git a/nixpkgs/pkgs/tools/archivers/quickbms/default.nix b/nixpkgs/pkgs/tools/archivers/quickbms/default.nix
new file mode 100644
index 000000000000..8915dda1e27e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/quickbms/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, lib
+, fetchzip
+, fetchpatch
+, bzip2
+, lzo
+, openssl_1_1
+, opensslSupport ? false
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.11.0";
+  pname = "quickbms";
+
+  src = fetchzip {
+    url = "https://aluigi.altervista.org/papers/quickbms-src-${version}.zip";
+    hash = "sha256-uQKTE36pLO8uhrX794utqaDGUeyqRz6zLCQFA7DYkNc=";
+  };
+
+  patches = [
+    # Fix errors on x86_64 and _rotl definition
+    (fetchpatch {
+      name = "0001-fix-compile.patch";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/fix-compile.patch?h=quickbms&id=a2e3e4638295d7cfe39513bfef9447fb23154a6b";
+      hash = "sha256-49fT/L4BNzMYnq1SXhFMgSDLybLkz6KSbgKmUpZZu08=";
+      stripLen = 1;
+    })
+  ] ++ lib.optional (!opensslSupport) ./0002-disable-openssl.patch;
+
+  buildInputs = [ bzip2 lzo zlib ]
+    ++ lib.optional (opensslSupport) openssl_1_1;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Universal script based file extractor and reimporter";
+    homepage = "https://aluigi.altervista.org/quickbms.htm";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    mainProgram = "quickbms";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/rar/default.nix b/nixpkgs/pkgs/tools/archivers/rar/default.nix
new file mode 100644
index 000000000000..168316813f76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/rar/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, installShellFiles
+}:
+
+let
+  version = "6.24";
+  downloadVersion = lib.replaceStrings [ "." ] [ "" ] version;
+  # Use `./update.sh` to generate the entries below
+  srcs = {
+    i686-linux = {
+      url = "https://www.rarlab.com/rar/rarlinux-x32-${downloadVersion}.tar.gz";
+      hash = "sha256-aacgJH0iJLRNEaZuVyzl/FxZgSnW3dIZFUfaqt0l88M=";
+    };
+    x86_64-linux = {
+      url = "https://www.rarlab.com/rar/rarlinux-x64-${downloadVersion}.tar.gz";
+      hash = "sha256-iOIqjoQSXJR2N7vyjHRuM4oKYyedgPn51zc2A4ddses=";
+    };
+    aarch64-darwin = {
+      url = "https://www.rarlab.com/rar/rarmacos-arm-${downloadVersion}.tar.gz";
+      hash = "sha256-2r4zWDT7Xw/CNvA7oNEsGfrXJDzFa5gNthIB/5TYR5U=";
+    };
+    x86_64-darwin = {
+      url = "https://www.rarlab.com/rar/rarmacos-x64-${downloadVersion}.tar.gz";
+      hash = "sha256-4vENPNfMpQstsm9+8+glHPK9fAlDmnHWbCHW+HUwSX4=";
+    };
+  };
+  manSrc = fetchurl {
+    url = "https://aur.archlinux.org/cgit/aur.git/plain/rar.1?h=rar&id=8e39a12e88d8a3b168c496c44c18d443c876dd10";
+    name = "rar.1";
+    hash = "sha256-93cSr9oAsi+xHUtMsUvICyHJe66vAImS2tLie7nt8Uw=";
+  };
+in
+stdenv.mkDerivation {
+  pname = "rar";
+  inherit version;
+
+  src = fetchurl (srcs.${stdenv.hostPlatform.system});
+
+  dontBuild = true;
+
+  buildInputs = lib.optionals stdenv.isLinux [ stdenv.cc.cc.lib ];
+
+  nativeBuildInputs = [ installShellFiles ]
+    ++ lib.optionals stdenv.isLinux [ autoPatchelfHook ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 {rar,unrar} -t "$out/bin"
+    install -Dm755 default.sfx -t "$out/lib"
+    install -Dm644 {acknow.txt,license.txt} -t "$out/share/doc/rar"
+    install -Dm644 rarfiles.lst -t "$out/etc"
+
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    installManPage ${manSrc}
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Utility for RAR archives";
+    homepage = "https://www.rarlab.com/";
+    license = licenses.unfree;
+    mainProgram = "rar";
+    maintainers = with maintainers; [ thiagokokada ];
+    platforms = lib.attrNames srcs;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/rar/update.sh b/nixpkgs/pkgs/tools/archivers/rar/update.sh
new file mode 100755
index 000000000000..f81562727f29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/rar/update.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gawk gnused pup jq
+
+set -euo pipefail
+
+DIRNAME=$(dirname "$0")
+readonly DIRNAME
+readonly NIXPKGS_ROOT="../../../.."
+readonly NIX_FLAGS=(--extra-experimental-features 'nix-command flakes')
+
+# awk is used for parsing the RARLAB website to get the newest version
+readonly AWK_FIELD_SEPARATOR='[-.]'
+# shellcheck disable=SC2016
+readonly AWK_COMMAND='
+# We will get the following output from pup:
+# /rar/rarlinux-x64-700b3.tar.gz
+# /rar/rarmacos-x64-700b3.tar.gz
+# /rar/rarlinux-x64-624.tar.gz
+# /rar/rarbsd-x64-624.tar.gz
+# /rar/rarmacos-x64-624.tar.gz
+
+# Ignore anything that is flagged as beta (e.g.: `/rar/rarlinux-x64-700b3.tar.gz`)
+!/[0-9]+b[0-9]*.tar.gz$/ {
+    # /rar/rarlinux-x64-624.tar.gz -> 624
+    val = $3
+    # Only get the value if it is bigger than the current one
+    if (val > max) max = val
+}
+END {
+    # 624 -> 6.24
+    printf "%.2f\n", max/100
+}
+'
+
+updateHash() {
+    local -r version="${1//./}"
+    local -r arch="$2"
+    local -r os="$3"
+    local -r nix_arch="$4"
+
+    url="https://www.rarlab.com/rar/rar$os-$arch-$version.tar.gz"
+    hash=$(nix store prefetch-file --json "$url" | jq -r .hash)
+    currentHash=$(cd "$DIRNAME" && nix "${NIX_FLAGS[@]}" eval --raw "$NIXPKGS_ROOT#legacyPackages.$nix_arch.rar.src.outputHash")
+
+    sed -i "s|$currentHash|$hash|g" "$DIRNAME/default.nix"
+}
+
+updateVersion() {
+    local -r version="$1"
+    sed -i "s|version = \"[0-9.]*\";|version = \"$version\";|g" "$DIRNAME/default.nix"
+}
+
+latestVersion="${1:-}"
+if [[ -z "$latestVersion" ]]; then
+    latestVersion=$(
+        curl --silent --location --fail https://www.rarlab.com/download.htm | \
+            pup 'a[href*=".tar.gz"] attr{href}' | \
+            awk -F"$AWK_FIELD_SEPARATOR" "$AWK_COMMAND"
+    )
+fi
+readonly latestVersion
+echo "Latest version: $latestVersion"
+
+currentVersion=$(cd "$DIRNAME" && nix "${NIX_FLAGS[@]}" eval --raw "$NIXPKGS_ROOT#legacyPackages.x86_64-linux.rar.version")
+readonly currentVersion
+echo "Current version: $currentVersion"
+
+if [[ "$currentVersion" == "$latestVersion" ]]; then
+    echo "rar is up-to-date"
+    exit 0
+fi
+
+updateHash "$latestVersion" x32 linux i686-linux
+updateHash "$latestVersion" x64 linux x86_64-linux
+updateHash "$latestVersion" arm macos aarch64-darwin
+updateHash "$latestVersion" x64 macos x86_64-darwin
+
+updateVersion "$latestVersion"
diff --git a/nixpkgs/pkgs/tools/archivers/rpm2targz/default.nix b/nixpkgs/pkgs/tools/archivers/rpm2targz/default.nix
new file mode 100644
index 000000000000..da231bf4a742
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/rpm2targz/default.nix
@@ -0,0 +1,50 @@
+{ bzip2
+, coreutils
+, cpio
+, fetchurl
+, gnutar
+, gzip
+, lib
+, stdenv
+, xz
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rpm2targz";
+  version = "2021.03.16";
+
+  # git repo: https://gitweb.gentoo.org/proj/rpm2targz.git/
+  src = fetchurl {
+    url = "https://dev.gentoo.org/~vapier/dist/${pname}-${version}.tar.xz";
+    hash = "sha256-rcV+o9V2wWKznqSW2rA8xgnpQ02kpK4te6mYvLRC5vQ=";
+  };
+
+  postPatch = let
+    shdeps = [
+      bzip2
+      coreutils
+      cpio
+      gnutar
+      gzip
+      xz
+      zstd
+    ];
+  in ''
+    substituteInPlace rpm2targz --replace "=\"rpmoffset\"" "=\"$out/bin/rpmoffset\""
+    # rpm2targz relies on the executable name
+    # to guess what compressor it should use
+    # this is more reliable than wrapProgram
+    sed -i -e '2iexport PATH="${lib.makeBinPath shdeps}"' rpm2targz
+  '';
+
+  installFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "Convert a .rpm file to a .tar.gz archive";
+    homepage = "http://slackware.com/config/packages.php";
+    license = licenses.bsd1;
+    maintainers = [ maintainers.fogti ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/rpmextract/default.nix b/nixpkgs/pkgs/tools/archivers/rpmextract/default.nix
new file mode 100644
index 000000000000..ed81a23ba7e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/rpmextract/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, rpm, cpio, substituteAll }:
+
+stdenv.mkDerivation {
+  name = "rpmextract";
+
+  buildCommand = ''
+    install -Dm755 $script $out/bin/rpmextract
+  '';
+
+  script = substituteAll {
+    src = ./rpmextract.sh;
+    isExecutable = true;
+    inherit rpm cpio;
+    inherit (stdenv) shell;
+  };
+
+  meta = with lib; {
+    description = "Script to extract RPM archives";
+    platforms = platforms.all;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ abbradar ];
+    mainProgram = "rpmextract";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/rpmextract/rpmextract.sh b/nixpkgs/pkgs/tools/archivers/rpmextract/rpmextract.sh
new file mode 100644
index 000000000000..6ebfa251955d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/rpmextract/rpmextract.sh
@@ -0,0 +1,10 @@
+#!@shell@ -e
+
+if [ "$1" = "" ]; then
+  echo "usage: rpmextract package_name..." 1>&2
+  exit 1
+fi
+
+for i in "$@"; do
+  @rpm@/bin/rpm2cpio "$i" | @cpio@/bin/cpio -idv
+done
diff --git a/nixpkgs/pkgs/tools/archivers/runzip/default.nix b/nixpkgs/pkgs/tools/archivers/runzip/default.nix
new file mode 100644
index 000000000000..02b6bd45d8e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/runzip/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, libzip, libiconv, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version = "1.4";
+  pname = "runzip";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libiconv libzip ];
+
+  src = fetchFromGitHub {
+    owner = "vlm";
+    repo = "zip-fix-filename-encoding";
+    rev = "v${version}";
+    sha256 = "0l5zbb5hswxczigvyal877j0aiq3fc01j3gv88bvy7ikyvw3lc07";
+  };
+
+  meta = {
+    description = "A tool to convert filename encoding inside a ZIP archive";
+    license = lib.licenses.bsd2;
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.unix;
+    mainProgram = "runzip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/s-tar/default.nix b/nixpkgs/pkgs/tools/archivers/s-tar/default.nix
new file mode 100644
index 000000000000..89830322267c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/s-tar/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "s-tar";
+  version = "1.6";
+  src = fetchurl {
+    url = "mirror://sourceforge/s-tar/star-${version}.tar.bz2";
+    sha256 = "0xpp8gf0ghwdgncdwx17fpadxislwrj48gcm42851hz6p8p6c60v";
+  };
+
+  preConfigure = "rm configure";
+  preBuild = "sed 's_/bin/__g' -i RULES/*";
+  makeFlags = [ "GMAKE_NOWARN=true" ];
+  installFlags = [ "DESTDIR=$(out)" "INS_BASE=/" ];
+  postInstall = ''
+    find $out/bin -type l -delete
+    rm -r $out/etc $out/include $out/sbin
+  '';
+
+  meta = {
+    description = "A very fast tar like tape archiver with improved functionality";
+    longDescription = ''
+      Star archives and extracts multiple files to and from a single file called a tarfile.
+      A tarfile is usually a magnetic tape, but it can be any file.
+      In all cases, appearance of a directory name refers to the files and (recursively) sub-directories of that directory.
+      Star's actions are controlled by the mandatory command flags from the list below.
+      The way star acts may be modified by additional options.
+      Note that unpacking tar archives may be a security risk because star may overwrite existing files.
+    '';
+    homepage = "https://cdrtools.sourceforge.net/private/star.html";
+    license = lib.licenses.cddl;
+    maintainers = [ lib.maintainers.wucke13 ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/sharutils/default.nix b/nixpkgs/pkgs/tools/archivers/sharutils/default.nix
new file mode 100644
index 000000000000..5c84e596531c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/sharutils/default.nix
@@ -0,0 +1,89 @@
+{ lib, stdenv, fetchurl, fetchpatch, gettext, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "sharutils";
+  version = "4.15.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/sharutils/sharutils-${version}.tar.xz";
+    sha256 = "16isapn8f39lnffc3dp4dan05b7x6mnc76v6q5nn8ysxvvvwy19b";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  # GNU Gettext is needed on non-GNU platforms.
+  buildInputs = [ coreutils gettext ];
+
+  # These tests try to hit /etc/passwd to find out your username if pass in a submitter
+  # name on the command line. Since we block access to /etc/passwd on the Darwin sandbox
+  # that cause shar to just segfault. It isn't a problem on Linux because their sandbox
+  # remaps /etc/passwd to a trivial file, but we can't do that on Darwin so I do this
+  # instead. In this case, I pass in the very imaginative "submitter" as the submitter name
+
+  patches = [
+    # CVE-2018-1000097
+    (fetchurl {
+      url = "https://sources.debian.org/data/main/s/sharutils/1:4.15.2-2+deb9u1/debian/patches/01-fix-heap-buffer-overflow-cve-2018-1000097.patch";
+      sha256 = "19g0sxc8g79aj5gd5idz5409311253jf2q8wqkasf0handdvsbxx";
+    })
+    (fetchurl {
+      url = "https://sources.debian.org/data/main/s/sharutils/1:4.15.2-4/debian/patches/02-fix-ftbfs-with-glibc-2.28.patch";
+      sha256 = "15kpjqnfs98n6irmkh8pw7masr08xala7gx024agv7zv14722vkc";
+    })
+
+    # pending upstream build fix against -fno-common compilers like >=gcc-10
+    # Taken from https://lists.gnu.org/archive/html/bug-gnu-utils/2020-01/msg00002.html
+    (fetchpatch {
+      name = "sharutils-4.15.2-Fix-building-with-GCC-10.patch";
+      url = "https://lists.gnu.org/archive/html/bug-gnu-utils/2020-01/txtDL8i6V6mUU.txt";
+      sha256 = "0kfch1vm45lg237hr6fdv4b2lh5b1933k0fn8yj91gqm58svskvl";
+    })
+    (fetchpatch {
+      name = "sharutils-4.15.2-Do-not-include-lib-md5.c-into-src-shar.c.patch";
+      url = "https://lists.gnu.org/archive/html/bug-gnu-utils/2020-01/txt5Z_KZup0yN.txt";
+      sha256 = "0an8vfy3qj6sss9w0i4j8ilf7g5mbc7y13l644jy5bcm9przcjbd";
+    })
+  ];
+
+  postPatch = let
+      # This evaluates to a string containing:
+      #
+      #     substituteInPlace tests/shar-2 --replace '${SHAR}' '${SHAR} -s submitter'
+      #     substituteInPlace tests/shar-2 --replace '${SHAR}' '${SHAR} -s submitter'
+      shar_sub = "\${SHAR}";
+    in ''
+      substituteInPlace tests/shar-1 --replace '${shar_sub}' '${shar_sub} -s submitter'
+      substituteInPlace tests/shar-2 --replace '${shar_sub}' '${shar_sub} -s submitter'
+
+      substituteInPlace intl/Makefile.in --replace "AR = ar" ""
+    '';
+
+  # Workaround to fix the static build on macOS.
+  env.NIX_CFLAGS_COMPILE = "-Wno-implicit-function-declaration";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Tools for remote synchronization and `shell archives'";
+    longDescription =
+      '' GNU shar makes so-called shell archives out of many files, preparing
+         them for transmission by electronic mail services.  A shell archive
+         is a collection of files that can be unpacked by /bin/sh.  A wide
+         range of features provide extensive flexibility in manufacturing
+         shars and in specifying shar smartness.  For example, shar may
+         compress files, uuencode binary files, split long files and
+         construct multi-part mailings, ensure correct unsharing order, and
+         provide simplistic checksums.
+
+         GNU unshar scans a set of mail messages looking for the start of
+         shell archives.  It will automatically strip off the mail headers
+         and other introductory text.  The archive bodies are then unpacked
+         by a copy of the shell. unshar may also process files containing
+         concatenated shell archives.
+      '';
+    homepage = "https://www.gnu.org/software/sharutils/";
+    license = licenses.gpl3Plus;
+    maintainers = [];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/snzip/default.nix b/nixpkgs/pkgs/tools/archivers/snzip/default.nix
new file mode 100644
index 000000000000..6ae59143f3e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/snzip/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, snappy
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "snzip";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "kubo";
+    repo = "snzip";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-trxCGVNw2MugE7kmth62Qrp7JZcHeP1gdTZk32c3hFg=";
+  };
+
+  # We don't use a release tarball so we don't have a `./configure` script to
+  # run. That's why we generate it.
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    snappy
+  ];
+
+  meta = with lib; {
+    description = "A compression/decompression tool based on snappy";
+    homepage = "https://github.com/kubo/snzip";
+    maintainers = with maintainers; [ doronbehar ];
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+  };
+})
+
diff --git a/nixpkgs/pkgs/tools/archivers/torrent7z/default.nix b/nixpkgs/pkgs/tools/archivers/torrent7z/default.nix
new file mode 100644
index 000000000000..74eaa4409f75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/torrent7z/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "torrent7z";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "BubblesInTheTub";
+    repo = pname;
+    rev = version;
+    sha256 = "Y2tr0+z9uij4Ifi6FfWRN24BwcDXUZKVLkLtKUiVjU4=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-gcc10-compilation.patch"; # Fix compilation on GCC 10. This patch is included on the latest commit
+      url =
+        "https://github.com/paulyc/torrent7z/commit/5958f42a364c430b3ed4ac68911bbbea1f967fc4.patch";
+      sha256 = "vJOv1sG9XwTvvxQiWew0H5ALoUb9wIAouzTsTvKHuPI=";
+    })
+  ];
+
+  buildInputs = [ ncurses ];
+
+  hardeningDisable = [ "format" ];
+
+  postPatch = ''
+    # Remove non-free RAR source code
+    # (see DOC/License.txt, https://fedoraproject.org/wiki/Licensing:Unrar)
+    rm -r linux_src/p7zip_4.65/CPP/7zip/Compress/Rar*
+    find . -name makefile'*' -exec sed -i '/Rar/d' {} +
+  '';
+
+  preConfigure = ''
+    mkdir linux_src/p7zip_4.65/bin
+    cd linux_src/p7zip_4.65/CPP/7zip/Bundles/Alone
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ../../../../bin/t7z $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/BubblesInTheTub/torrent7z";
+    description = "A fork of torrent7z, viz a derivative of 7zip that produces invariant .7z archives for torrenting";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cirno-999 ];
+    mainProgram = "t7z";
+    # RAR code is under non-free UnRAR license, but we remove it
+    license = licenses.gpl3Only;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unar/default.nix b/nixpkgs/pkgs/tools/archivers/unar/default.nix
new file mode 100644
index 000000000000..4b2c66c0fc40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unar/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, gnustep
+, bzip2
+, zlib
+, icu
+, openssl
+, wavpack
+, xcbuildHook
+, Foundation
+, AppKit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "unar";
+  version = "1.10.7";
+
+  src = fetchFromGitHub {
+    owner = "MacPaw";
+    # the unar repo contains a shallow clone of both XADMaster and universal-detector
+    repo = "unar";
+    rev = "v${version}";
+    sha256 = "0p846q1l66k3rnd512sncp26zpv411b8ahi145sghfcsz9w8abc4";
+  };
+
+  postPatch =
+    if stdenv.isDarwin then ''
+      substituteInPlace "./XADMaster.xcodeproj/project.pbxproj" \
+        --replace "libstdc++.6.dylib" "libc++.1.dylib"
+    '' else ''
+      for f in Makefile.linux ../UniversalDetector/Makefile.linux ; do
+        substituteInPlace $f \
+          --replace "= gcc" "=${stdenv.cc.targetPrefix}cc" \
+          --replace "= g++" "=${stdenv.cc.targetPrefix}c++" \
+          --replace "-DGNU_RUNTIME=1" "" \
+          --replace "-fgnu-runtime" "-fobjc-runtime=gnustep-2.0"
+      done
+
+      # we need to build inside this directory as well, so we have to make it writeable
+      chmod +w ../UniversalDetector -R
+    '';
+
+  buildInputs = [ bzip2 icu openssl wavpack zlib ] ++
+    lib.optionals stdenv.isLinux [ gnustep.base ] ++
+    lib.optionals stdenv.isDarwin [ Foundation AppKit ];
+
+  nativeBuildInputs = [ installShellFiles ] ++
+    lib.optionals stdenv.isLinux [ gnustep.make ] ++
+    lib.optionals stdenv.isDarwin [ xcbuildHook ];
+
+  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+  # xcbuild links with clang instead of clang++.
+  env = lib.optionalAttrs stdenv.isDarwin {
+    LD_FLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  xcbuildFlags = lib.optionals stdenv.isDarwin [
+    "-target unar"
+    "-target lsar"
+    "-configuration Release"
+    "MACOSX_DEPLOYMENT_TARGET=${stdenv.hostPlatform.darwinMinVersion}"
+  ];
+
+  makefile = lib.optionalString (!stdenv.isDarwin) "Makefile.linux";
+
+  enableParallelBuilding = true;
+
+  dontConfigure = true;
+
+  sourceRoot = "${src.name}/XADMaster";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin ${lib.optionalString stdenv.isDarwin "Products/Release/"}{lsar,unar}
+    for f in lsar unar; do
+      installManPage ./Extra/$f.?
+      installShellCompletion --bash --name $f ./Extra/$f.bash_completion
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://theunarchiver.com";
+    description = "An archive unpacker program";
+    longDescription = ''
+      The Unarchiver is an archive unpacker program with support for the popular
+      zip, RAR, 7z, tar, gzip, bzip2, LZMA, XZ, CAB, MSI, NSIS, EXE, ISO, BIN,
+      and split file formats, as well as the old Stuffit, Stuffit X, DiskDouble,
+      Compact Pro, Packit, cpio, compress (.Z), ARJ, ARC, PAK, ACE, ZOO, LZH,
+      ADF, DMS, LZX, PowerPacker, LBR, Squeeze, Crunch, and other old formats.
+    '';
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/undmg/default.nix b/nixpkgs/pkgs/tools/archivers/undmg/default.nix
new file mode 100644
index 000000000000..9fe61d594416
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/undmg/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, zlib, bzip2, lzfse, pkg-config }:
+
+stdenv.mkDerivation rec {
+  version = "1.1.0";
+  pname = "undmg";
+
+  src = fetchFromGitHub {
+    owner = "matthewbauer";
+    repo = "undmg";
+    rev = "v${version}";
+    sha256 = "0rb4h89jrl04vwf6p679ipa4mp95hzmc1ca11wqbanv3xd1kcpxm";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ zlib bzip2 lzfse ];
+
+  setupHook = ./setup-hook.sh;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/matthewbauer/undmg";
+    description = "Extract a DMG file";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ matthewbauer lnl7 ];
+    mainProgram = "undmg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/undmg/setup-hook.sh b/nixpkgs/pkgs/tools/archivers/undmg/setup-hook.sh
new file mode 100644
index 000000000000..bc7ed76107ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/undmg/setup-hook.sh
@@ -0,0 +1,5 @@
+unpackCmdHooks+=(_tryUnpackDmg)
+_tryUnpackDmg() {
+    if ! [[ "$curSrc" =~ \.dmg$ ]]; then return 1; fi
+    undmg "$curSrc"
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unp/default.nix b/nixpkgs/pkgs/tools/archivers/unp/default.nix
new file mode 100644
index 000000000000..aeb0fb91c989
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unp/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, lib, fetchurl, makeWrapper, perl
+, unzip, gzip, file
+# extractors which are added to unp’s PATH
+, extraBackends ? []
+}:
+
+let
+  runtime_bins =  [ file unzip gzip ] ++ extraBackends;
+
+in stdenv.mkDerivation {
+  pname = "unp";
+  version = "2.0-pre9";
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/u/unp/unp_2.0~pre9.tar.xz";
+    sha256 = "1lp5vi9x1qi3b21nzv0yqqacj6p74qkl5zryzwq30rjkyvahjya1";
+    name = "unp_2.0_pre9.tar.xz";
+  };
+
+  dontConfigure = true;
+  buildPhase = "true";
+  installPhase = ''
+  mkdir -p $out/bin
+  mkdir -p $out/share/man/man1
+  install ./unp $out/bin/unp
+  install ./ucat $out/bin/ucat
+  cp debian/unp.1 $out/share/man/man1
+
+  wrapProgram $out/bin/unp \
+    --prefix PATH : ${lib.makeBinPath runtime_bins}
+  wrapProgram $out/bin/ucat \
+    --prefix PATH : ${lib.makeBinPath runtime_bins}
+  '';
+
+  meta = with lib; {
+    description = "Command line tool for unpacking archives easily";
+    homepage = "https://packages.qa.debian.org/u/unp.html";
+    license = with licenses; [ gpl2 ];
+    maintainers = [ maintainers.timor ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unrar-wrapper/default.nix b/nixpkgs/pkgs/tools/archivers/unrar-wrapper/default.nix
new file mode 100644
index 000000000000..7452969cbdb4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unrar-wrapper/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildPythonApplication, fetchFromGitHub, unar }:
+
+buildPythonApplication rec {
+  pname = "unrar-wrapper";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "openSUSE";
+    repo = "unrar_wrapper";
+    rev = "unrar_wrapper-${version}";
+    sha256 = "sha256-HjrUif8MrbtLjRQMAPZ/Y2o43rGSDj0HHY4fZQfKz5w=";
+  };
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" "${lib.makeBinPath [ unar ]}"
+  ];
+
+  postFixup = ''
+    ln -s $out/bin/unrar_wrapper $out/bin/unrar
+    rm -rf $out/nix-support/propagated-build-inputs
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    homepage = "https://github.com/openSUSE/unrar_wrapper";
+    description = "Backwards compatibility between unar and unrar";
+    longDescription = ''
+      unrar_wrapper is a wrapper python script that transforms the basic UnRAR commands
+      to unar and lsar calls in order to provide a backwards compatibility.
+    '';
+    license = licenses.gpl3Only;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ artturin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unrar-wrapper/setup-hook.sh b/nixpkgs/pkgs/tools/archivers/unrar-wrapper/setup-hook.sh
new file mode 100644
index 000000000000..41d6a5cd217b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unrar-wrapper/setup-hook.sh
@@ -0,0 +1,5 @@
+unpackCmdHooks+=(_tryUnrar)
+_tryUnrar() {
+    if ! [[ "$curSrc" =~ \.rar$ ]]; then return 1; fi
+    unrar x "$curSrc" >/dev/null
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unrar/default.nix b/nixpkgs/pkgs/tools/archivers/unrar/default.nix
new file mode 100644
index 000000000000..8b4f46088b2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unrar/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchzip
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "unrar";
+  version = "6.2.12";
+
+  src = fetchzip {
+    url = "https://www.rarlab.com/rar/unrarsrc-${finalAttrs.version}.tar.gz";
+    stripRoot = false;
+    hash = "sha256-VAL3o9JGmkAcEssa/P/SL9nyxnigb7dX9YZBHrG9f0A=";
+  };
+
+  sourceRoot = finalAttrs.src.name;
+
+  postPatch = ''
+    substituteInPlace unrar/makefile \
+      --replace "CXX=" "#CXX=" \
+      --replace "STRIP=" "#STRIP=" \
+      --replace "AR=" "#AR="
+  '';
+
+  outputs = [ "out" "dev" ];
+
+  # `make {unrar,lib}` call `make clean` implicitly
+  # separate build into different dirs to avoid deleting them
+  buildPhase = ''
+    runHook preBuild
+
+    cp -a unrar libunrar
+    make -C libunrar lib
+    make -C unrar -j1
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 unrar/unrar -t $out/bin/
+    install -Dm644 unrar/{acknow.txt,license.txt} -t $out/share/doc/unrar/
+
+    install -Dm755 libunrar/libunrar.so -t $out/lib/
+    install -Dm644 libunrar/dll.hpp -t $dev/include/unrar/
+
+    runHook postInstall
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    description = "Utility for RAR archives";
+    homepage = "https://www.rarlab.com/";
+    license = licenses.unfreeRedistributable;
+    mainProgram = "unrar";
+    maintainers = with maintainers; [ wegank ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/archivers/unrar/setup-hook.sh b/nixpkgs/pkgs/tools/archivers/unrar/setup-hook.sh
new file mode 100644
index 000000000000..41d6a5cd217b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unrar/setup-hook.sh
@@ -0,0 +1,5 @@
+unpackCmdHooks+=(_tryUnrar)
+_tryUnrar() {
+    if ! [[ "$curSrc" =~ \.rar$ ]]; then return 1; fi
+    unrar x "$curSrc" >/dev/null
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unshield/default.nix b/nixpkgs/pkgs/tools/archivers/unshield/default.nix
new file mode 100644
index 000000000000..50d93fea99ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unshield/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, zlib, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "unshield";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "twogood";
+    repo = "unshield";
+    rev = version;
+    sha256 = "1p2inn93svm83kr5p0j1al0rx47f1zykmagxsblgy04gi942iza3";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ zlib openssl ];
+
+  meta = with lib; {
+    description = "Tool and library to extract CAB files from InstallShield installers";
+    homepage = "https://github.com/twogood/unshield";
+    license = licenses.mit;
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "unshield";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8139.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8139.diff
new file mode 100644
index 000000000000..3bcc21c7c0d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8139.diff
@@ -0,0 +1,47 @@
+From RedHat: https://bugzilla.redhat.com/attachment.cgi?id=971984&action=diff&context=patch&collapsed=&headers=1&format=raw
+
+--- unzip60/extract.c	2010-04-03 14:41:55 -0500
++++ unzip60/extract.c	2014-12-03 15:33:35 -0600
+@@ -1,5 +1,5 @@ 
+ /*
+-  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
++  Copyright (c) 1990-2014 Info-ZIP.  All rights reserved.
+ 
+   See the accompanying file LICENSE, version 2009-Jan-02 or later
+   (the contents of which are also included in unzip.h) for terms of use.
+@@ -298,6 +298,8 @@ 
+ #ifndef SFX
+    static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \
+      EF block length (%u bytes) exceeds remaining EF data (%u bytes)\n";
++   static ZCONST char Far TooSmallEFlength[] = "bad extra-field entry:\n \
++     EF block length (%u bytes) invalid (< %d)\n";
+    static ZCONST char Far InvalidComprDataEAs[] =
+      " invalid compressed data for EAs\n";
+ #  if (defined(WIN32) && defined(NTSD_EAS))
+@@ -2023,7 +2025,8 @@ 
+         ebID = makeword(ef);
+         ebLen = (unsigned)makeword(ef+EB_LEN);
+ 
+-        if (ebLen > (ef_len - EB_HEADSIZE)) {
++        if (ebLen > (ef_len - EB_HEADSIZE))
++        {
+            /* Discovered some extra field inconsistency! */
+             if (uO.qflag)
+                 Info(slide, 1, ((char *)slide, "%-22s ",
+@@ -2032,6 +2035,16 @@ 
+               ebLen, (ef_len - EB_HEADSIZE)));
+             return PK_ERR;
+         }
++        else if (ebLen < EB_HEADSIZE)
++        {
++            /* Extra block length smaller than header length. */
++            if (uO.qflag)
++                Info(slide, 1, ((char *)slide, "%-22s ",
++                  FnFilter1(G.filename)));
++            Info(slide, 1, ((char *)slide, LoadFarString(TooSmallEFlength),
++              ebLen, EB_HEADSIZE));
++            return PK_ERR;
++        }
+ 
+         switch (ebID) {
+             case EF_OS2:
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8140.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8140.diff
new file mode 100644
index 000000000000..81b96b8df7db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8140.diff
@@ -0,0 +1,26 @@
+From RedHat: https://bugzilla.redhat.com/attachment.cgi?id=969621&action=diff
+(unzip60/ path prefix added)
+
+--- unzip60/extract.c	2009-03-14 02:32:52.000000000 +0100
++++ unzip60/extract.c	2014-12-05 22:43:13.000000000 +0100
+@@ -2221,10 +2234,17 @@ static int test_compr_eb(__G__ eb, eb_si
+     if (compr_offset < 4)                /* field is not compressed: */
+         return PK_OK;                    /* do nothing and signal OK */
+ 
++    /* Return no/bad-data error status if any problem is found:
++     *    1. eb_size is too small to hold the uncompressed size
++     *       (eb_ucsize).  (Else extract eb_ucsize.)
++     *    2. eb_ucsize is zero (invalid).  2014-12-04 SMS.
++     *    3. eb_ucsize is positive, but eb_size is too small to hold
++     *       the compressed data header.
++     */
+     if ((eb_size < (EB_UCSIZE_P + 4)) ||
+-        ((eb_ucsize = makelong(eb+(EB_HEADSIZE+EB_UCSIZE_P))) > 0L &&
+-         eb_size <= (compr_offset + EB_CMPRHEADLEN)))
+-        return IZ_EF_TRUNC;               /* no compressed data! */
++     ((eb_ucsize = makelong( eb+ (EB_HEADSIZE+ EB_UCSIZE_P))) == 0L) ||
++     ((eb_ucsize > 0L) && (eb_size <= (compr_offset + EB_CMPRHEADLEN))))
++        return IZ_EF_TRUNC;             /* no/bad compressed data! */
+ 
+     if (
+ #ifdef INT_16BIT
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8141.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8141.diff
new file mode 100644
index 000000000000..11007195b1ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8141.diff
@@ -0,0 +1,136 @@
+From RedHat: https://bugzilla.redhat.com/attachment.cgi?id=969625&action=diff
+(unzip60/ path prefix added)
+
+--- unzip60/process.c	2009-03-06 02:25:10.000000000 +0100
++++ unzip60/process.c	2014-12-05 22:42:39.000000000 +0100
+@@ -1,5 +1,5 @@ 
+ /*
+-  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
++  Copyright (c) 1990-2014 Info-ZIP.  All rights reserved.
+ 
+   See the accompanying file LICENSE, version 2009-Jan-02 or later
+   (the contents of which are also included in unzip.h) for terms of use.
+@@ -1888,48 +1888,82 @@ int getZip64Data(__G__ ef_buf, ef_len)
+     and a 4-byte version of disk start number.
+     Sets both local header and central header fields.  Not terribly clever,
+     but it means that this procedure is only called in one place.
++
++    2014-12-05 SMS.
++    Added checks to ensure that enough data are available before calling
++    makeint64() or makelong().  Replaced various sizeof() values with
++    simple ("4" or "8") constants.  (The Zip64 structures do not depend
++    on our variable sizes.)  Error handling is crude, but we should now
++    stay within the buffer.
+   ---------------------------------------------------------------------------*/
+ 
++#define Z64FLGS 0xffff
++#define Z64FLGL 0xffffffff
++
+     if (ef_len == 0 || ef_buf == NULL)
+         return PK_COOL;
+ 
+     Trace((stderr,"\ngetZip64Data: scanning extra field of length %u\n",
+       ef_len));
+ 
+-    while (ef_len >= EB_HEADSIZE) {
++    while (ef_len >= EB_HEADSIZE)
++    {
+         eb_id = makeword(EB_ID + ef_buf);
+         eb_len = makeword(EB_LEN + ef_buf);
+ 
+-        if (eb_len > (ef_len - EB_HEADSIZE)) {
+-            /* discovered some extra field inconsistency! */
++        if (eb_len > (ef_len - EB_HEADSIZE))
++        {
++            /* Extra block length exceeds remaining extra field length. */
+             Trace((stderr,
+               "getZip64Data: block length %u > rest ef_size %u\n", eb_len,
+               ef_len - EB_HEADSIZE));
+             break;
+         }
+-        if (eb_id == EF_PKSZ64) {
+-
++        if (eb_id == EF_PKSZ64)
++        {
+           int offset = EB_HEADSIZE;
+ 
+-          if (G.crec.ucsize == 0xffffffff || G.lrec.ucsize == 0xffffffff){
+-            G.lrec.ucsize = G.crec.ucsize = makeint64(offset + ef_buf);
+-            offset += sizeof(G.crec.ucsize);
++          if ((G.crec.ucsize == Z64FLGL) || (G.lrec.ucsize == Z64FLGL))
++          {
++            if (offset+ 8 > ef_len)
++              return PK_ERR;
++
++            G.crec.ucsize = G.lrec.ucsize = makeint64(offset + ef_buf);
++            offset += 8;
+           }
+-          if (G.crec.csize == 0xffffffff || G.lrec.csize == 0xffffffff){
+-            G.csize = G.lrec.csize = G.crec.csize = makeint64(offset + ef_buf);
+-            offset += sizeof(G.crec.csize);
++
++          if ((G.crec.csize == Z64FLGL) || (G.lrec.csize == Z64FLGL))
++          {
++            if (offset+ 8 > ef_len)
++              return PK_ERR;
++
++            G.csize = G.crec.csize = G.lrec.csize = makeint64(offset + ef_buf);
++            offset += 8;
+           }
+-          if (G.crec.relative_offset_local_header == 0xffffffff){
++
++          if (G.crec.relative_offset_local_header == Z64FLGL)
++          {
++            if (offset+ 8 > ef_len)
++              return PK_ERR;
++
+             G.crec.relative_offset_local_header = makeint64(offset + ef_buf);
+-            offset += sizeof(G.crec.relative_offset_local_header);
++            offset += 8;
+           }
+-          if (G.crec.disk_number_start == 0xffff){
++
++          if (G.crec.disk_number_start == Z64FLGS)
++          {
++            if (offset+ 4 > ef_len)
++              return PK_ERR;
++
+             G.crec.disk_number_start = (zuvl_t)makelong(offset + ef_buf);
+-            offset += sizeof(G.crec.disk_number_start);
++            offset += 4;
+           }
++#if 0
++          break;                /* Expect only one EF_PKSZ64 block. */
++#endif /* 0 */
+         }
+ 
+-        /* Skip this extra field block */
++        /* Skip this extra field block. */
+         ef_buf += (eb_len + EB_HEADSIZE);
+         ef_len -= (eb_len + EB_HEADSIZE);
+     }
+--- unzip60/fileio.c	2009-04-20 02:03:44.000000000 +0200
++++ unzip60/fileio.c	2014-12-05 22:44:16.000000000 +0100
+@@ -176,6 +176,8 @@ static ZCONST char Far FilenameTooLongTr
+ #endif
+ static ZCONST char Far ExtraFieldTooLong[] =
+   "warning:  extra field too long (%d).  Ignoring...\n";
++static ZCONST char Far ExtraFieldCorrupt[] =
++  "warning:  extra field (type: 0x%04x) corrupt.  Continuing...\n";
+ 
+ #ifdef WINDLL
+    static ZCONST char Far DiskFullQuery[] =
+@@ -2295,7 +2297,12 @@ int do_string(__G__ length, option)   /*
+             if (readbuf(__G__ (char *)G.extra_field, length) == 0)
+                 return PK_EOF;
+             /* Looks like here is where extra fields are read */
+-            getZip64Data(__G__ G.extra_field, length);
++            if (getZip64Data(__G__ G.extra_field, length) != PK_COOL)
++            {
++                Info(slide, 0x401, ((char *)slide,
++                 LoadFarString( ExtraFieldCorrupt), EF_PKSZ64));
++                error = PK_WARN;
++            }
+ #ifdef UNICODE_SUPPORT
+             G.unipath_filename = NULL;
+             if (G.UzO.U_flag < 2) {
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9636.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9636.diff
new file mode 100644
index 000000000000..d4c7f752975e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9636.diff
@@ -0,0 +1,42 @@
+From 190040ebfcf5395a6ccedede2cc9343d34f0a108 Mon Sep 17 00:00:00 2001
+From: mancha <mancha1 AT zoho DOT com>
+Date: Wed, 11 Feb 2015
+Subject: Info-ZIP UnZip buffer overflow
+
+By carefully crafting a corrupt ZIP archive with "extra fields" that
+purport to have compressed blocks larger than the corresponding
+uncompressed blocks in STORED no-compression mode, an attacker can
+trigger a heap overflow that can result in application crash or
+possibly have other unspecified impact.
+
+This patch ensures that when extra fields use STORED mode, the
+"compressed" and uncompressed block sizes match.
+
+---
+ extract.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/extract.c
++++ b/extract.c
+@@ -2217,6 +2217,7 @@ static int test_compr_eb(__G__ eb, eb_si
+     ulg eb_ucsize;
+     uch *eb_ucptr;
+     int r;
++    ush method;
+ 
+     if (compr_offset < 4)                /* field is not compressed: */
+         return PK_OK;                    /* do nothing and signal OK */
+@@ -2226,6 +2227,13 @@ static int test_compr_eb(__G__ eb, eb_si
+          eb_size <= (compr_offset + EB_CMPRHEADLEN)))
+         return IZ_EF_TRUNC;               /* no compressed data! */
+ 
++    method = makeword(eb + (EB_HEADSIZE + compr_offset));
++    if ((method == STORED) &&
++        (eb_size - compr_offset - EB_CMPRHEADLEN != eb_ucsize))
++	return PK_ERR;			  /* compressed & uncompressed
++					   * should match in STORED
++					   * method */
++
+     if (
+ #ifdef INT_16BIT
+         (((ulg)(extent)eb_ucsize) != eb_ucsize) ||
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9913.patch b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9913.patch
new file mode 100644
index 000000000000..a5675f4fb7c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9913.patch
@@ -0,0 +1,29 @@
+From: "Steven M. Schweda" <sms@antinode.info>
+Subject: Fix CVE-2014-9913, buffer overflow in unzip
+Bug: https://sourceforge.net/p/infozip/bugs/27/
+Bug-Debian: https://bugs.debian.org/847485
+Bug-Ubuntu: https://launchpad.net/bugs/387350
+X-Debian-version: 6.0-21
+
+--- a/list.c
++++ b/list.c
+@@ -339,7 +339,18 @@
+                 G.crec.compression_method == ENHDEFLATED) {
+                 methbuf[5] = dtype[(G.crec.general_purpose_bit_flag>>1) & 3];
+             } else if (methnum >= NUM_METHODS) {
+-                sprintf(&methbuf[4], "%03u", G.crec.compression_method);
++                /* 2013-02-26 SMS.
++                 * http://sourceforge.net/p/infozip/bugs/27/  CVE-2014-9913.
++                 * Unexpectedly large compression methods overflow
++                 * &methbuf[].  Use the old, three-digit decimal format
++                 * for values which fit.  Otherwise, sacrifice the
++                 * colon, and use four-digit hexadecimal.
++                 */
++                if (G.crec.compression_method <= 999) {
++                    sprintf( &methbuf[ 4], "%03u", G.crec.compression_method);
++                } else {
++                    sprintf( &methbuf[ 3], "%04X", G.crec.compression_method);
++                }
+             }
+ 
+ #if 0       /* GRR/Euro:  add this? */
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7696.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7696.diff
new file mode 100644
index 000000000000..3aad17bddd78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7696.diff
@@ -0,0 +1,66 @@
+From 68efed87fabddd450c08f3112f62a73f61d493c9 Mon Sep 17 00:00:00 2001
+From: Petr Stodulka <pstodulk@redhat.com>
+Date: Mon, 14 Sep 2015 18:23:17 +0200
+Subject: [PATCH 1/2] upstream fix for heap overflow
+
+https://bugzilla.redhat.com/attachment.cgi?id=1073002
+---
+ crypt.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/crypt.c b/crypt.c
+index 784e411..a8975f2 100644
+--- a/crypt.c
++++ b/crypt.c
+@@ -465,7 +465,17 @@ int decrypt(__G__ passwrd)
+     GLOBAL(pInfo->encrypted) = FALSE;
+     defer_leftover_input(__G);
+     for (n = 0; n < RAND_HEAD_LEN; n++) {
+-        b = NEXTBYTE;
++        /* 2012-11-23 SMS.  (OUSPG report.)
++         * Quit early if compressed size < HEAD_LEN.  The resulting
++         * error message ("unable to get password") could be improved,
++         * but it's better than trying to read nonexistent data, and
++         * then continuing with a negative G.csize.  (See
++         * fileio.c:readbyte()).
++         */
++        if ((b = NEXTBYTE) == (ush)EOF)
++        {
++            return PK_ERR;
++        }
+         h[n] = (uch)b;
+         Trace((stdout, " (%02x)", h[n]));
+     }
+-- 
+2.4.6
+
+
+From bd8a743ee0a77e65ad07ef4196c4cd366add3f26 Mon Sep 17 00:00:00 2001
+From: Kamil Dudka <kdudka@redhat.com>
+Date: Mon, 14 Sep 2015 18:24:56 +0200
+Subject: [PATCH 2/2] fix infinite loop when extracting empty bzip2 data
+
+---
+ extract.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/extract.c b/extract.c
+index 7134bfe..29db027 100644
+--- a/extract.c
++++ b/extract.c
+@@ -2733,6 +2733,12 @@ __GDEF
+     int repeated_buf_err;
+     bz_stream bstrm;
+ 
++    if (G.incnt <= 0 && G.csize <= 0L) {
++        /* avoid an infinite loop */
++        Trace((stderr, "UZbunzip2() got empty input\n"));
++        return 2;
++    }
++
+ #if (defined(DLL) && !defined(NO_SLIDE_REDIR))
+     if (G.redirect_slide)
+         wsize = G.redirect_size, redirSlide = G.redirect_buffer;
+-- 
+2.4.6
+
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7697.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7697.diff
new file mode 100644
index 000000000000..98ebf53c4782
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7697.diff
@@ -0,0 +1,36 @@
+From bd150334fb4084f5555a6be26b015a0671cb5b74 Mon Sep 17 00:00:00 2001
+From: Kamil Dudka <kdudka@redhat.com>
+Date: Tue, 22 Sep 2015 18:52:23 +0200
+Subject: [PATCH] extract: prevent unsigned overflow on invalid input
+
+Suggested-by: Stefan Cornelius
+---
+ extract.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/extract.c b/extract.c
+index 29db027..b9ae667 100644
+--- a/extract.c
++++ b/extract.c
+@@ -1257,8 +1257,17 @@ static int extract_or_test_entrylist(__G__ numchunk,
+         if (G.lrec.compression_method == STORED) {
+             zusz_t csiz_decrypted = G.lrec.csize;
+ 
+-            if (G.pInfo->encrypted)
++            if (G.pInfo->encrypted) {
++                if (csiz_decrypted <= 12) {
++                    /* handle the error now to prevent unsigned overflow */
++                    Info(slide, 0x401, ((char *)slide,
++                      LoadFarStringSmall(ErrUnzipNoFile),
++                      LoadFarString(InvalidComprData),
++                      LoadFarStringSmall2(Inflate)));
++                    return PK_ERR;
++                }
+                 csiz_decrypted -= 12;
++            }
+             if (G.lrec.ucsize != csiz_decrypted) {
+                 Info(slide, 0x401, ((char *)slide,
+                   LoadFarStringSmall2(WrnStorUCSizCSizDiff),
+-- 
+2.5.2
+
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2016-9844.patch b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2016-9844.patch
new file mode 100644
index 000000000000..52d07987b333
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2016-9844.patch
@@ -0,0 +1,28 @@
+From: "Steven M. Schweda" <sms@antinode.info>
+Subject: Fix CVE-2016-9844, buffer overflow in zipinfo
+Bug-Debian: https://bugs.debian.org/847486
+Bug-Ubuntu: https://launchpad.net/bugs/1643750
+X-Debian-version: 6.0-21
+
+--- a/zipinfo.c
++++ b/zipinfo.c
+@@ -1921,7 +1921,18 @@
+         ush  dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3);
+         methbuf[3] = dtype[dnum];
+     } else if (methnum >= NUM_METHODS) {   /* unknown */
+-        sprintf(&methbuf[1], "%03u", G.crec.compression_method);
++        /* 2016-12-05 SMS.
++         * https://launchpad.net/bugs/1643750
++         * Unexpectedly large compression methods overflow
++         * &methbuf[].  Use the old, three-digit decimal format
++         * for values which fit.  Otherwise, sacrifice the "u",
++         * and use four-digit hexadecimal.
++         */
++        if (G.crec.compression_method <= 999) {
++            sprintf( &methbuf[ 1], "%03u", G.crec.compression_method);
++        } else {
++            sprintf( &methbuf[ 0], "%04X", G.crec.compression_method);
++        }
+     }
+ 
+     for (k = 0;  k < 15;  ++k)
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2018-18384.patch b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2018-18384.patch
new file mode 100644
index 000000000000..e9320e125cf6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2018-18384.patch
@@ -0,0 +1,35 @@
+--- unzip60/list.c	
++++ unzip60/list.c	
+@@ -97,7 +97,7 @@ int list_files(__G)    /* return PK-type
+ {
+     int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL;
+ #ifndef WINDLL
+-    char sgn, cfactorstr[10];
++    char sgn, cfactorstr[1+10+1+1];	/* <sgn><int>%NUL */
+     int longhdr=(uO.vflag>1);
+ #endif
+     int date_format;
+@@ -389,9 +389,9 @@ int list_files(__G)    /* return PK-type
+             }
+ #else /* !WINDLL */
+             if (cfactor == 100)
+-                sprintf(cfactorstr, LoadFarString(CompFactor100));
++                snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactor100));
+             else
+-                sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor);
++                snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactorStr), sgn, cfactor);
+             if (longhdr)
+                 Info(slide, 0, ((char *)slide, LoadFarString(LongHdrStats),
+                   FmZofft(G.crec.ucsize, "8", "u"), methbuf,
+@@ -471,9 +471,9 @@ int list_files(__G)    /* return PK-type
+ 
+ #else /* !WINDLL */
+         if (cfactor == 100)
+-            sprintf(cfactorstr, LoadFarString(CompFactor100));
++            snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactor100));
+         else
+-            sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor);
++            snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactorStr), sgn, cfactor);
+         if (longhdr) {
+             Info(slide, 0, ((char *)slide, LoadFarString(LongFileTrailer),
+               FmZofft(tot_ucsize, "8", "u"), FmZofft(tot_csize, "8", "u"),
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/default.nix b/nixpkgs/pkgs/tools/archivers/unzip/default.nix
new file mode 100644
index 000000000000..9860817cf3e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/default.nix
@@ -0,0 +1,107 @@
+{ lib, stdenv, fetchurl
+, bzip2
+, enableNLS ? false, libnatspec
+}:
+
+stdenv.mkDerivation rec {
+  pname = "unzip";
+  version = "6.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/infozip/unzip${lib.replaceStrings ["."] [""] version}.tar.gz";
+    sha256 = "0dxx11knh3nk95p2gg2ak777dd11pr7jx5das2g49l262scrcv83";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  patchFlags = [ "-p1" "-F3" ];
+
+  patches = [
+    ./CVE-2014-8139.diff
+    ./CVE-2014-8140.diff
+    ./CVE-2014-8141.diff
+    ./CVE-2014-9636.diff
+    ./CVE-2015-7696.diff
+    ./CVE-2015-7697.diff
+    ./CVE-2014-9913.patch
+    ./CVE-2016-9844.patch
+    ./CVE-2018-18384.patch
+    ./dont-hardcode-cc.patch
+    (fetchurl {
+      url = "https://github.com/madler/unzip/commit/41beb477c5744bc396fa1162ee0c14218ec12213.patch";
+      name = "CVE-2019-13232-1.patch";
+      sha256 = "04jzd6chg9fw4l5zadkfsrfm5llrd7vhd1dgdjjd29nrvkrjyn14";
+    })
+    (fetchurl {
+      url = "https://github.com/madler/unzip/commit/47b3ceae397d21bf822bc2ac73052a4b1daf8e1c.patch";
+      name = "CVE-2019-13232-2.patch";
+      sha256 = "0iy2wcjyvzwrjk02iszwcpg85fkjxs1bvb9isvdiywszav4yjs32";
+    })
+    (fetchurl {
+      url = "https://github.com/madler/unzip/commit/6d351831be705cc26d897db44f878a978f4138fc.patch";
+      name = "CVE-2019-13232-3.patch";
+      sha256 = "1jvs7dkdqs97qnsqc6hk088alhv8j4c638k65dbib9chh40jd7pf";
+    })
+    (fetchurl {
+      urls = [
+        # original link (will be dead eventually):
+        "https://sources.debian.org/data/main/u/unzip/6.0-26%2Bdeb11u1/debian/patches/06-initialize-the-symlink-flag.patch"
+
+        "https://gist.github.com/veprbl/41261bb781571e2246ea42d3f37795f5/raw/d8533d8c6223150f76b0f31aec03e185fcde3579/06-initialize-the-symlink-flag.patch"
+      ];
+      sha256 = "1h00djdvgjhwfb60wl4qrxbyfsbbnn1qw6l2hkldnif4m8f8r1zj";
+    })
+    (fetchurl {
+      urls = [
+        # original link (will be dead eventually):
+        "https://sources.debian.org/data/main/u/unzip/6.0-27/debian/patches/28-cve-2022-0529-and-cve-2022-0530.patch"
+
+        "https://web.archive.org/web/20230106200319/https://sources.debian.org/data/main/u/unzip/6.0-27/debian/patches/28-cve-2022-0529-and-cve-2022-0530.patch"
+      ];
+      sha256 = "sha256-on79jElQ+z2ULWAq14RpluAqr9d6itHiZwDkKubBzTc=";
+    })
+    # Clang 16 makes implicit declarations an error by default for C99 and newer, causing the
+    # configure script to fail to detect errno and the directory libraries on Darwin.
+    ./implicit-declarations-fix.patch
+  ] ++ lib.optional enableNLS
+    (fetchurl {
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-arch/unzip/files/unzip-6.0-natspec.patch?id=56bd759df1d0c750a065b8c845e93d5dfa6b549d";
+      name = "unzip-6.0-natspec.patch";
+      sha256 = "67ab260ae6adf8e7c5eda2d1d7846929b43562943ec4aff629bd7018954058b1";
+    });
+
+
+  nativeBuildInputs = [ bzip2 ];
+  buildInputs = [ bzip2 ] ++ lib.optional enableNLS libnatspec;
+
+  makefile = "unix/Makefile";
+
+  NIX_LDFLAGS = "-lbz2" + lib.optionalString enableNLS " -lnatspec";
+
+  buildFlags = [
+    "generic"
+    "D_USE_BZ2=-DUSE_BZIP2"
+    "L_BZ2=-lbz2"
+  ]
+  # `lchmod` is not available on Linux, so we remove it to fix "not supported" errors (when the zip file contains symlinks).
+  # Alpine (musl) and Debian (glibc) also add this flag.
+  ++ lib.optionals stdenv.isLinux [ "LOCAL_UNZIP=-DNO_LCHMOD" ];
+
+  preConfigure = ''
+    sed -i -e 's@CF="-O3 -Wall -I. -DASM_CRC $(LOC)"@CF="-O3 -Wall -I. -DASM_CRC -DLARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(LOC)"@' unix/Makefile
+  '';
+
+  installFlags = [
+    "prefix=${placeholder "out"}"
+  ];
+
+  setupHook = ./setup-hook.sh;
+
+  meta = {
+    homepage = "http://www.info-zip.org";
+    description = "An extraction utility for archives compressed in .zip format";
+    license = lib.licenses.info-zip;
+    platforms = lib.platforms.all;
+    mainProgram = "unzip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/dont-hardcode-cc.patch b/nixpkgs/pkgs/tools/archivers/unzip/dont-hardcode-cc.patch
new file mode 100644
index 000000000000..15dbbfe4c533
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/dont-hardcode-cc.patch
@@ -0,0 +1,14 @@
+--- a/unix/Makefile
++++ b/unix/Makefile
+@@ -42,9 +42,9 @@
+ # such as -DDOSWILD).
+ 
+ # UnZip flags
+-CC = cc#	try using "gcc" target rather than changing this (CC and LD
++CC ?= cc#	try using "gcc" target rather than changing this (CC and LD
+ LD = $(CC)#	must match, else "unresolved symbol:  ___main" is possible)
+-AS = as
++AS ?= as
+ LOC = $(D_USE_BZ2) $(LOCAL_UNZIP)
+ AF = $(LOC)
+ CFLAGS = -O
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/implicit-declarations-fix.patch b/nixpkgs/pkgs/tools/archivers/unzip/implicit-declarations-fix.patch
new file mode 100644
index 000000000000..df19bf1722f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/implicit-declarations-fix.patch
@@ -0,0 +1,21 @@
+--- a/unix/configure	2009-04-16 15:25:12.000000000 -0400
++++ b/unix/configure	2023-05-30 15:18:33.670321348 -0400
+@@ -408,7 +408,7 @@
+ echo Check for errno declaration
+ cat > conftest.c << _EOF_
+ #include <errno.h>
+-main()
++int main()
+ {
+   errno = 0;
+   return 0;
+@@ -419,6 +419,8 @@
+ 
+ echo Check for directory libraries
+ cat > conftest.c << _EOF_
++#include <sys/types.h>
++#include <dirent.h>
+ int main() { return closedir(opendir(".")); }
+ _EOF_
+ 
+
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/setup-hook.sh b/nixpkgs/pkgs/tools/archivers/unzip/setup-hook.sh
new file mode 100644
index 000000000000..99c63f68e940
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/setup-hook.sh
@@ -0,0 +1,11 @@
+unpackCmdHooks+=(_tryUnzip)
+_tryUnzip() {
+    if ! [[ "$curSrc" =~ \.zip$ ]]; then return 1; fi
+
+    # UTF-8 locale is needed for unzip on glibc to handle UTF-8 symbols:
+    #   https://github.com/NixOS/nixpkgs/issues/176225#issuecomment-1146617263
+    # Otherwise unzip unpacks escaped file names as if '-U' options was in effect.
+    #
+    # Pick en_US.UTF-8 as most possible to be present on glibc, musl and darwin.
+    LANG=en_US.UTF-8 unzip -qq "$curSrc"
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unzoo/default.nix b/nixpkgs/pkgs/tools/archivers/unzoo/default.nix
new file mode 100644
index 000000000000..b02d010ac0c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzoo/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "unzoo";
+  version = "4.4";
+
+  src = fetchFromGitHub {
+    owner = "museoa";
+    repo = pname;
+    rev = version;
+    hash = "sha256-oPq1I7EsvHaJ7anHbm/KWrYrxJkM79rLhgRfSAdoLtk=";
+  };
+
+  outputs = [ "out" "doc" ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    ${stdenv.cc.targetPrefix}cc -o unzoo -DSYS_IS_UNIX src/unzoo.c
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $doc/share/doc/${pname}
+    cp unzoo $out/bin
+    cp README.TXT $doc/share/doc/${pname}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/museoa/unzoo/";
+    description = "Manipulate archives of files in Zoo compressed form";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.all;
+    mainProgram = "unzoo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/wimlib/default.nix b/nixpkgs/pkgs/tools/archivers/wimlib/default.nix
new file mode 100644
index 000000000000..ee239a5a255f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/wimlib/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, makeWrapper
+, pkg-config
+, cabextract ? null
+, cdrkit ? null
+, mtools ? null
+, fuse3 ? null
+, ntfs3g ? null
+, syslinux ? null
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.14.3";
+  pname = "wimlib";
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ ntfs3g ] ++ lib.optionals (!stdenv.isDarwin) [ fuse3 ];
+
+  src = fetchurl {
+    url = "https://wimlib.net/downloads/${pname}-${version}.tar.gz";
+    hash = "sha256-ESjGx5FtLyLagDQfhNh9d8Yg3mUA+7I6dB+nm9CM0e8=";
+  };
+
+  enableParallelBuilding = true;
+
+  preBuild = lib.optionalString (!stdenv.isDarwin) ''
+    substituteInPlace programs/mkwinpeimg.in \
+      --replace '/usr/lib/syslinux' "${syslinux}/share/syslinux"
+  '';
+
+  postInstall = let
+    path = lib.makeBinPath  ([ cabextract mtools ntfs3g ] ++ lib.optionals (!stdenv.isDarwin) [ cdrkit syslinux fuse3 ]);
+  in ''
+    for prog in $out/bin/*; do
+      wrapProgram $prog --prefix PATH : $out/bin:${path}
+    done
+  '';
+
+  doCheck = (!stdenv.isDarwin);
+
+  preCheck = ''
+    patchShebangs tests
+  '';
+
+  meta = with lib; {
+    homepage = "https://wimlib.net";
+    description = "A library and program to extract, create, and modify WIM files";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+    license = with licenses; [ gpl3 lgpl3 mit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/xarchive/default.nix b/nixpkgs/pkgs/tools/archivers/xarchive/default.nix
new file mode 100644
index 000000000000..d26fdabc1d5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/xarchive/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, gtk2, pkg-config }:
+
+stdenv.mkDerivation rec {
+  version = "0.2.8-6";
+  pname = "xarchive";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/xarchive/${pname}-${version}.tar.gz";
+    sha256 = "0chfim7z27s00naf43a61zsngwhvim14mg1p3csbv5i3f6m50xx4";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "A GTK front-end for command line archiving tools";
+    maintainers = [ lib.maintainers.domenkozar ];
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
+    mainProgram = "xarchive";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/xarchiver/default.nix b/nixpkgs/pkgs/tools/archivers/xarchiver/default.nix
new file mode 100644
index 000000000000..9c0f4685fa0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/xarchiver/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, gtk3, pkg-config, intltool, libxslt, makeWrapper,
+  coreutils, zip, unzip, p7zip, unar, gnutar, bzip2, gzip, lhasa, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  version = "0.5.4.22";
+  pname = "xarchiver";
+
+  src = fetchFromGitHub {
+    owner = "ib";
+    repo = "xarchiver";
+    rev = version;
+    sha256 = "sha256-wB1l1OcLK9rh6cpcDprXZBXLXRSwBFV9aueBI57kjJI=";
+  };
+
+  nativeBuildInputs = [ intltool pkg-config makeWrapper wrapGAppsHook ];
+  buildInputs = [ gtk3 libxslt ];
+
+  postFixup = ''
+    wrapProgram $out/bin/xarchiver \
+    --prefix PATH : ${lib.makeBinPath [ zip unzip p7zip unar gnutar bzip2 gzip lhasa coreutils ]}
+  '';
+
+  meta = {
+    broken = stdenv.isDarwin;
+    description = "GTK frontend to 7z,zip,rar,tar,bzip2, gzip,arj, lha, rpm and deb (open and extract only)";
+    homepage = "https://github.com/ib/xarchiver";
+    maintainers = [ lib.maintainers.domenkozar ];
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.all;
+    mainProgram = "xarchiver";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/zarchive/default.nix b/nixpkgs/pkgs/tools/archivers/zarchive/default.nix
new file mode 100644
index 000000000000..3ef68ae8b71e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zarchive/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, zstd }:
+
+stdenv.mkDerivation rec {
+  pname = "zarchive";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "Exzap";
+    repo = "ZArchive";
+    rev = "v${version}";
+    hash = "sha256-hX637O/mVLTzmG0a9swJu9w+3o26VHo+K/9RhMuf1lI=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ zstd ];
+
+  meta = with lib; {
+    description = "File archive format supporting random-access reads";
+    homepage = "https://github.com/Exzap/ZArchive";
+    license = licenses.mit0;
+    maintainers = with maintainers; [ zhaofengli ];
+    mainProgram = "zarchive";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/zip/buffer-overflow-on-utf8-rh-bug-2165653.patch b/nixpkgs/pkgs/tools/archivers/zip/buffer-overflow-on-utf8-rh-bug-2165653.patch
new file mode 100644
index 000000000000..2ee3fff0db54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zip/buffer-overflow-on-utf8-rh-bug-2165653.patch
@@ -0,0 +1,12 @@
+diff -urp zip30/fileio.c zip30/fileio.c
+--- zip30/fileio.c	2008-05-29 03:13:24.000000000 +0300
++++ zip30/fileio.c	2023-05-02 12:19:50.488314853 +0300
+@@ -3502,7 +3502,7 @@ zwchar *local_to_wide_string(local_strin
+   if ((wc_string = (wchar_t *)malloc((wsize + 1) * sizeof(wchar_t))) == NULL) {
+     ZIPERR(ZE_MEM, "local_to_wide_string");
+   }
+-  wsize = mbstowcs(wc_string, local_string, strlen(local_string) + 1);
++  wsize = mbstowcs(wc_string, local_string, wsize + 1);
+   wc_string[wsize] = (wchar_t) 0;
+ 
+   /* in case wchar_t is not zwchar */
diff --git a/nixpkgs/pkgs/tools/archivers/zip/default.nix b/nixpkgs/pkgs/tools/archivers/zip/default.nix
new file mode 100644
index 000000000000..1d75040c7784
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zip/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, enableNLS ? false, libnatspec ? null, libiconv }:
+
+assert enableNLS -> libnatspec != null;
+
+stdenv.mkDerivation rec {
+  pname = "zip";
+  version = "3.0";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.info-zip.org/pub/infozip/src/zip${lib.replaceStrings ["."] [""] version}.tgz"
+      "https://src.fedoraproject.org/repo/pkgs/zip/zip30.tar.gz/7b74551e63f8ee6aab6fbc86676c0d37/zip30.tar.gz"
+    ];
+    sha256 = "0sb3h3067pzf3a7mlxn1hikpcjrsvycjcnj9hl9b1c3ykcgvps7h";
+  };
+  prePatch = ''
+    substituteInPlace unix/Makefile --replace 'CC = cc' ""
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  makefile = "unix/Makefile";
+  buildFlags = if stdenv.isCygwin then [ "cygwin" ] else [ "generic" ];
+  installFlags = [
+    "prefix=${placeholder "out"}"
+    "INSTALL=cp"
+  ];
+
+  patches = [
+    # Trying to use `memset` without declaring it is flagged as an error with clang 16, causing
+    # the `configure` script to incorrectly define `ZMEM`. That causes the build to fail due to
+    # incompatible redeclarations of `memset`, `memcpy`, and `memcmp` in `zip.h`.
+    ./fix-memset-detection.patch
+    # Implicit declaration of `closedir` and `opendir` cause dirent detection to fail with clang 16.
+    ./fix-implicit-declarations.patch
+    # Buffer overflow on Unicode characters in path names
+    # https://bugzilla.redhat.com/show_bug.cgi?id=2165653
+    ./buffer-overflow-on-utf8-rh-bug-2165653.patch
+  ] ++ lib.optionals (enableNLS && !stdenv.isCygwin) [ ./natspec-gentoo.patch.bz2 ];
+
+  buildInputs = lib.optional enableNLS libnatspec
+    ++ lib.optional stdenv.isCygwin libiconv;
+
+  meta = with lib; {
+    description = "Compressor/archiver for creating and modifying zipfiles";
+    homepage = "http://www.info-zip.org";
+    license = licenses.bsdOriginal;
+    platforms = platforms.all;
+    maintainers = [ ];
+    mainProgram = "zip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/zip/fix-implicit-declarations.patch b/nixpkgs/pkgs/tools/archivers/zip/fix-implicit-declarations.patch
new file mode 100644
index 000000000000..df19bf1722f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zip/fix-implicit-declarations.patch
@@ -0,0 +1,21 @@
+--- a/unix/configure	2009-04-16 15:25:12.000000000 -0400
++++ b/unix/configure	2023-05-30 15:18:33.670321348 -0400
+@@ -408,7 +408,7 @@
+ echo Check for errno declaration
+ cat > conftest.c << _EOF_
+ #include <errno.h>
+-main()
++int main()
+ {
+   errno = 0;
+   return 0;
+@@ -419,6 +419,8 @@
+ 
+ echo Check for directory libraries
+ cat > conftest.c << _EOF_
++#include <sys/types.h>
++#include <dirent.h>
+ int main() { return closedir(opendir(".")); }
+ _EOF_
+ 
+
diff --git a/nixpkgs/pkgs/tools/archivers/zip/fix-memset-detection.patch b/nixpkgs/pkgs/tools/archivers/zip/fix-memset-detection.patch
new file mode 100644
index 000000000000..55bda33a2573
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zip/fix-memset-detection.patch
@@ -0,0 +1,15 @@
+diff -ur a/unix/configure b/unix/configure
+--- a/unix/configure	2008-06-19 21:32:20.000000000 -0600
++++ b/unix/configure	2023-07-11 10:02:57.809867694 -0600
+@@ -519,7 +519,10 @@
+ 
+ 
+ echo Check for memset
+-echo "int main(){ char k; memset(&k,0,0); return 0; }" > conftest.c
++cat > conftest.c << _EOF_
++#include <string.h>
++int main(){ char k; memset(&k,0,0); return 0; }
++_EOF_
+ $CC -o conftest conftest.c >/dev/null 2>/dev/null
+ [ $? -ne 0 ] && CFLAGS="${CFLAGS} -DZMEM"
+ 
diff --git a/nixpkgs/pkgs/tools/archivers/zip/natspec-gentoo.patch.bz2 b/nixpkgs/pkgs/tools/archivers/zip/natspec-gentoo.patch.bz2
new file mode 100644
index 000000000000..816f32aba3c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zip/natspec-gentoo.patch.bz2
Binary files differdiff --git a/nixpkgs/pkgs/tools/archivers/zpaq/default.nix b/nixpkgs/pkgs/tools/archivers/zpaq/default.nix
new file mode 100644
index 000000000000..6a03b825e902
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zpaq/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "zpaq";
+  version = "7.15";
+
+  src = fetchFromGitHub {
+    owner = "zpaq";
+    repo = "zpaq";
+    rev = version;
+    sha256 = "0v44rlg9gvwc4ggr2lhcqll8ppal3dk7zsg5bqwcc5lg3ynk2pz4";
+  };
+
+  nativeBuildInputs = [ perl /* for pod2man */ ];
+
+  CPPFLAGS = [ "-Dunix" ] ++
+    lib.optional (!stdenv.isi686 && !stdenv.isx86_64) "-DNOJIT";
+  CXXFLAGS = [ "-O3" "-DNDEBUG" ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [ "CXX=${stdenv.cc.targetPrefix}c++" ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Incremental journaling backup utility and archiver";
+    homepage = "http://mattmahoney.net/dc/zpaq.html";
+    license = licenses.gpl3Plus ;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+    mainProgram = "zpaq";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.nix b/nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.nix
new file mode 100644
index 000000000000..6896897be3b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+let
+  compileFlags = lib.concatStringsSep " " ([ "-O3" "-DNDEBUG" ]
+    ++ lib.optional (stdenv.hostPlatform.isUnix) "-Dunix -pthread"
+    ++ lib.optional (!stdenv.hostPlatform.isx86) "-DNOJIT");
+in
+stdenv.mkDerivation rec {
+  pname = "zpaqd";
+  version = "715";
+
+  src = fetchurl {
+    url = "http://mattmahoney.net/dc/zpaqd${version}.zip";
+    sha256 = "sha256-Mx87Zt0AASk0ZZCjyTzYbhlYJAXBlb59OpUWsqynyCA=";
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ unzip ];
+
+  buildPhase = ''
+    $CXX ${compileFlags} -fPIC --shared libzpaq.cpp -o libzpaq.so
+    $CXX ${compileFlags} -L. -L"$out/lib" -lzpaq zpaqd.cpp -o zpaqd
+  '';
+
+  installPhase = ''
+    mkdir -p "$out"/{bin,include,lib,share/doc/zpaq}
+    cp libzpaq.so "$out/lib"
+    cp zpaqd "$out/bin"
+    cp libzpaq.h "$out/include"
+    cp readme_zpaqd.txt "$out/share/doc/zpaq"
+  '';
+
+  meta = with lib; {
+    description = "ZPAQ archive (de)compressor and algorithm development tool";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/abcm2ps/default.nix b/nixpkgs/pkgs/tools/audio/abcm2ps/default.nix
new file mode 100644
index 000000000000..96893b8fe072
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/abcm2ps/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, docutils
+, pkg-config
+, freetype
+, pango
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "abcm2ps";
+  version = "8.14.15";
+
+  src = fetchFromGitHub {
+    owner = "leesavide";
+    repo = "abcm2ps";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-0ZSMKARX16/33sIWR8LOVOFblI/Q+iZgnfVq/xqRMnI=";
+  };
+
+  configureFlags = [
+    "--INSTALL=install"
+  ];
+
+  nativeBuildInputs = [ docutils pkg-config ];
+
+  buildInputs = [ freetype pango ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = "abcm2ps -V";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "http://moinejf.free.fr/";
+    license = licenses.lgpl3Plus;
+    description = "A command line program which converts ABC to music sheet in PostScript or SVG format";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.dotlambda ];
+    mainProgram = "abcm2ps";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/audio/abcmidi/default.nix b/nixpkgs/pkgs/tools/audio/abcmidi/default.nix
new file mode 100644
index 000000000000..b0b48ffc9683
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/abcmidi/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "abcMIDI";
+  version = "2024.02.11";
+
+  src = fetchzip {
+    url = "https://ifdo.ca/~seymour/runabc/${pname}-${version}.zip";
+    hash = "sha256-gFSwD/NUp/6cT53GKUQd+pthADOqNI0jT6yQo+/kgRY=";
+  };
+
+  meta = with lib; {
+    homepage = "https://abc.sourceforge.net/abcMIDI/";
+    downloadPage = "https://ifdo.ca/~seymour/runabc/top.html";
+    license = licenses.gpl2Plus;
+    description = "Utilities for converting between abc and MIDI";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/accuraterip-checksum/default.nix b/nixpkgs/pkgs/tools/audio/accuraterip-checksum/default.nix
new file mode 100644
index 000000000000..8658dfb5a7aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/accuraterip-checksum/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, libsndfile }:
+
+stdenv.mkDerivation rec {
+  pname = "accuraterip-checksum";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "leo-bogert";
+    repo = "accuraterip-checksum";
+    rev = "version${version}";
+    sha256 = "1a6biy78jb094rifazn4a2g1dlhryg5q8p8gwj0a60ipl0vfb9bj";
+  };
+
+  buildInputs = [ libsndfile ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -m755 accuraterip-checksum "$out/bin/accuraterip-checksum"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Program for computing the AccurateRip checksum of singletrack WAV files";
+    homepage = "https://github.com/leo-bogert/accuraterip-checksum";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    platforms = with platforms; linux;
+    mainProgram = "accuraterip-checksum";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/acousticbrainz-client/default.nix b/nixpkgs/pkgs/tools/audio/acousticbrainz-client/default.nix
new file mode 100644
index 000000000000..1d4b59ed2c92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/acousticbrainz-client/default.nix
@@ -0,0 +1,42 @@
+{ lib, fetchFromGitHub, python3Packages, essentia-extractor }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "acousticbrainz-client";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "MTG";
+    repo = "acousticbrainz-client";
+    rev = version;
+    sha256 = "1g1nxh58939vysfxplrgdz366dlqnic05pkzbqh75m79brg4yrv1";
+  };
+
+  propagatedBuildInputs = [ essentia-extractor python3Packages.requests ];
+
+  postPatch = ''
+    # The installer needs the streaming_extractor_music binary in the source directoy,
+    # so we provide a symlink to it.
+    ln -s ${essentia-extractor}/bin/streaming_extractor_music streaming_extractor_music
+  '';
+
+  postInstall = ''
+    # The installer includes a copy of the streaming_extractor_music binary (not a symlink),
+    # which we don't need, because the wrapper adds essentia-extractor/binary to PATH.
+    rm $out/bin/streaming_extractor_music
+  '';
+
+  # Tests seem to be broken, but the tool works
+  doCheck = false;
+
+  pythonImportsCheck = [ "abz" ];
+
+  meta = with lib; {
+    description = "A client to upload data to an AcousticBrainz server";
+    license = licenses.gpl3Plus;
+    homepage = "https://github.com/MTG/acousticbrainz-client";
+    # essentia-extractor is only available for those platforms
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = with maintainers; [ ];
+    mainProgram = "abzsubmit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/alsaequal/caps_9.x.patch b/nixpkgs/pkgs/tools/audio/alsaequal/caps_9.x.patch
new file mode 100644
index 000000000000..282e04049747
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/alsaequal/caps_9.x.patch
@@ -0,0 +1,21 @@
+--- ./ctl_equal.c
++++ ./ctl_equal.c
+@@ -167,7 +167,7 @@
+ 	snd_ctl_equal_t *equal;
+ 	const char *controls = ".alsaequal.bin";
+ 	const char *library = "/usr/lib/ladspa/caps.so";
+-	const char *module = "Eq";
++	const char *module = "Eq10";
+ 	long channels = 2;
+ 	const char *sufix = " Playback Volume";
+ 	int err, i, index;
+--- ./pcm_equal.c
++++ ./pcm_equal.c
+@@ -151,7 +151,7 @@
+ 	snd_config_t *sconf = NULL;
+ 	const char *controls = ".alsaequal.bin";
+ 	const char *library = "/usr/lib/ladspa/caps.so";
+-	const char *module = "Eq";
++	const char *module = "Eq10";
+ 	long channels = 2;
+ 	int err;
diff --git a/nixpkgs/pkgs/tools/audio/alsaequal/default.nix b/nixpkgs/pkgs/tools/audio/alsaequal/default.nix
new file mode 100644
index 000000000000..13e3e756b6ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/alsaequal/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl
+, alsa-lib, caps
+}:
+
+stdenv.mkDerivation rec {
+  pname = "alsaequal";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://thedigitalmachine.net/tools/alsaequal-${version}.tar.bz2";
+    sha256 = "1w3g9q5z3nrn3mwdhaq6zsg0jila8d102dgwgrhj9vfx58apsvli";
+  };
+
+  buildInputs = [ alsa-lib ];
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  # Borrowed from Arch Linux's AUR
+  patches = [
+    # Adds executable permissions to resulting libraries
+    # and changes their destination directory from "usr/lib/alsa-lib" to "lib/alsa-lib" to better align with nixpkgs filesystem hierarchy.
+    ./makefile.patch
+    # Fixes control port check, which resulted in false error.
+    ./false_error.patch
+    # Fixes name change of an "Eq" to "Eq10" method in version 9 of caps library.
+    ./caps_9.x.patch
+  ];
+
+  postPatch = ''
+    sed -i 's#/usr/lib/ladspa/caps\.so#${caps}/lib/ladspa/caps\.so#g' ctl_equal.c pcm_equal.c
+  '';
+
+  preInstall = ''
+    mkdir -p "$out/lib/alsa-lib"
+  '';
+
+  meta = with lib; {
+    description = "Real-time adjustable equalizer plugin for ALSA";
+    homepage = "https://thedigitalmachine.net/alsaequal.html";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ymeister ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/alsaequal/false_error.patch b/nixpkgs/pkgs/tools/audio/alsaequal/false_error.patch
new file mode 100644
index 000000000000..1a8413da2741
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/alsaequal/false_error.patch
@@ -0,0 +1,13 @@
+--- ./ctl_equal.c
++++ ./ctl_equal.c
+@@ -263,8 +263,8 @@
+ 	for(i = 0; i < equal->num_input_controls; i++) {
+ 		if(equal->control_data->control[i].type == LADSPA_CNTRL_INPUT) {
+ 			index = equal->control_data->control[i].index;
+-			if(equal->klass->PortDescriptors[index] !=
+-					(LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL)) {
++			if(equal->klass->PortDescriptors[index] &
++					(LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL) == 0) {
+ 				SNDERR("Problem with control file %s, %d.", controls, index);
+ 				return -1;
+ 			}
diff --git a/nixpkgs/pkgs/tools/audio/alsaequal/makefile.patch b/nixpkgs/pkgs/tools/audio/alsaequal/makefile.patch
new file mode 100644
index 000000000000..ee8aa170d60b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/alsaequal/makefile.patch
@@ -0,0 +1,13 @@
+--- ./Makefile
++++ ./Makefile
+@@ -45,8 +45,8 @@
+
+ install: all
+ 	@echo Installing...
+-	$(Q)install -m 644 $(SND_PCM_BIN) ${DESTDIR}/usr/lib/alsa-lib/
+-	$(Q)install -m 644 $(SND_CTL_BIN) ${DESTDIR}/usr/lib/alsa-lib/
++	$(Q)install -m 755 $(SND_PCM_BIN) ${DESTDIR}/lib/alsa-lib/
++	$(Q)install -m 755 $(SND_CTL_BIN) ${DESTDIR}/lib/alsa-lib/
+
+ uninstall:
+ 	@echo Un-installing...
diff --git a/nixpkgs/pkgs/tools/audio/asap/default.nix b/nixpkgs/pkgs/tools/audio/asap/default.nix
new file mode 100644
index 000000000000..3eb2e8ea7ca9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/asap/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, fetchzip
+, SDL
+}:
+
+stdenv.mkDerivation rec {
+  pname = "asap";
+  version = "6.0.2";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/project/asap/asap/${version}/asap-${version}.tar.gz";
+    sha256 = "sha256-hVZODnm2GxSUKglOyQ8uObeKkAKrupPTftEP0dck9a8=";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  buildInputs = [
+    SDL
+  ];
+
+  enableParallelBuilding = true;
+
+  buildFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    # Only targets that don't need cito transpiler
+    "asapconv"
+    "asap-sdl"
+    "lib"
+  ];
+
+  installFlags = [
+    "prefix=${placeholder "dev"}"
+    "bindir=${placeholder "out"}/bin"
+    "install-asapconv"
+    "install-sdl"
+    "install-lib"
+  ];
+
+  meta = with lib; {
+    homepage = "https://asap.sourceforge.net/";
+    mainProgram = "asap-sdl";
+    description = "Another Slight Atari Player";
+    longDescription = ''
+      ASAP (Another Slight Atari Player) plays and converts 8-bit Atari POKEY
+      music (*.sap, *.cmc, *.mpt, *.rmt, *.tmc, ...) on modern computers and
+      mobile devices.
+    '';
+    maintainers = with maintainers; [ OPNA2608 ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/audiowaveform/default.nix b/nixpkgs/pkgs/tools/audio/audiowaveform/default.nix
new file mode 100644
index 000000000000..8f194df4d936
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/audiowaveform/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, cmake, gtest, boost, gd, libsndfile, libmad, libid3tag }:
+
+stdenv.mkDerivation rec {
+  pname = "audiowaveform";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "bbc";
+    repo = "audiowaveform";
+    rev = version;
+    sha256 = "sha256-FcQq0xWs3jH2MfhFQ5r5Vaz8B3akBHBSg8Z/k9An/Wg=";
+  };
+
+  nativeBuildInputs = [ cmake gtest ];
+
+  buildInputs = [ boost gd libsndfile libmad libid3tag ];
+
+  preConfigure = ''
+    ln -s ${gtest.src} googletest
+  '';
+
+  # One test is failing, see PR #101947
+  doCheck = false;
+
+  meta = with lib; {
+    description = "C++ program to generate waveform data and render waveform images from audio files";
+    longDescription = ''
+      audiowaveform is a C++ command-line application that generates waveform data from either MP3, WAV, FLAC, or Ogg Vorbis format audio files.
+      Waveform data can be used to produce a visual rendering of the audio, similar in appearance to audio editing applications.
+    '';
+    homepage = "https://github.com/bbc/audiowaveform";
+    changelog = "https://github.com/bbc/audiowaveform/blob/${version}/ChangeLog";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ edbentley ];
+    mainProgram = "audiowaveform";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/bark/default.nix b/nixpkgs/pkgs/tools/audio/bark/default.nix
new file mode 100644
index 000000000000..e866b1a18a3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/bark/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, alsa-lib
+, speexdsp
+}:
+rustPlatform.buildRustPackage {
+  pname = "bark";
+  version = "unstable-2023-08-22";
+  src = fetchFromGitHub {
+    owner = "haileys";
+    repo = "bark";
+    rev = "2586b9fb58b496f8ef06f516c9cd3aace77521f7";
+    hash = "sha256-sGroae6uJhB9UIpFmvt520Zs9k0ir7H8pGkhKJmVWek=";
+  };
+  cargoHash = "sha256-OjlVn4fvKPm3UfqhKkv7cDuvK4mcLcQXPNPK+WScrMc=";
+  buildInputs = [ alsa-lib speexdsp ];
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = {
+    description = "Live sync audio streaming for local networks";
+    homepage = "https://github.com/haileys/bark";
+    license = lib.licenses.agpl3Only;
+    maintainers = with lib.maintainers; [ samw ];
+    platforms = lib.platforms.linux;
+    mainProgram = "bark";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/audio/beets/builtin-plugins.nix b/nixpkgs/pkgs/tools/audio/beets/builtin-plugins.nix
new file mode 100644
index 000000000000..c6ae24dc6906
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/builtin-plugins.nix
@@ -0,0 +1,139 @@
+{ stdenv
+, aacgain
+, essentia-extractor
+, ffmpeg
+, flac
+, imagemagick
+, keyfinder-cli
+, lib
+, mp3gain
+, mp3val
+, python3Packages
+, version
+, ...
+}: {
+  absubmit = {
+    enable = lib.elem stdenv.hostPlatform.system essentia-extractor.meta.platforms;
+    wrapperBins = [ essentia-extractor ];
+    testPaths = [ ];
+  };
+  acousticbrainz.propagatedBuildInputs = [ python3Packages.requests ];
+  albumtypes = { };
+  aura = {
+    propagatedBuildInputs = with python3Packages; [ flask pillow ];
+    testPaths = [ ];
+  };
+  badfiles = {
+    testPaths = [ ];
+    wrapperBins = [ mp3val flac ];
+  };
+  bareasc = { };
+  beatport.propagatedBuildInputs = [ python3Packages.requests-oauthlib ];
+  bench.testPaths = [ ];
+  bpd.testPaths = [ ];
+  bpm.testPaths = [ ];
+  bpsync.testPaths = [ ];
+  bucket = { };
+  chroma = {
+    propagatedBuildInputs = [ python3Packages.pyacoustid ];
+    testPaths = [ ];
+  };
+  convert.wrapperBins = [ ffmpeg ];
+  deezer = {
+    propagatedBuildInputs = [ python3Packages.requests ];
+    testPaths = [ ];
+  };
+  discogs.propagatedBuildInputs = with python3Packages; [ discogs-client requests ];
+  duplicates.testPaths = [ ];
+  edit = { };
+  embedart = {
+    propagatedBuildInputs = with python3Packages; [ pillow ];
+    wrapperBins = [ imagemagick ];
+  };
+  embyupdate.propagatedBuildInputs = [ python3Packages.requests ];
+  export = { };
+  fetchart = {
+    propagatedBuildInputs = with python3Packages; [ requests pillow ];
+    wrapperBins = [ imagemagick ];
+  };
+  filefilter = { };
+  fish.testPaths = [ ];
+  freedesktop.testPaths = [ ];
+  fromfilename.testPaths = [ ];
+  ftintitle = { };
+  fuzzy.testPaths = [ ];
+  gmusic.testPaths = [ ];
+  hook = { };
+  ihate = { };
+  importadded = { };
+  importfeeds = { };
+  info = { };
+  inline.testPaths = [ ];
+  ipfs = { };
+  keyfinder.wrapperBins = [ keyfinder-cli ];
+  kodiupdate = {
+    propagatedBuildInputs = [ python3Packages.requests ];
+    testPaths = [ ];
+  };
+  lastgenre.propagatedBuildInputs = [ python3Packages.pylast ];
+  lastimport = {
+    propagatedBuildInputs = [ python3Packages.pylast ];
+    testPaths = [ ];
+  };
+  loadext = {
+    propagatedBuildInputs = [ python3Packages.requests ];
+    testPaths = [ ];
+  };
+  lyrics.propagatedBuildInputs = [ python3Packages.beautifulsoup4 ];
+  mbcollection.testPaths = [ ];
+  mbsubmit = { };
+  mbsync = { };
+  metasync = { };
+  missing.testPaths = [ ];
+  mpdstats.propagatedBuildInputs = [ python3Packages.mpd2 ];
+  mpdupdate = {
+    propagatedBuildInputs = [ python3Packages.mpd2 ];
+    testPaths = [ ];
+  };
+  parentwork = { };
+  permissions = { };
+  play = { };
+  playlist.propagatedBuildInputs = [ python3Packages.requests ];
+  plexupdate = { };
+  random = { };
+  replaygain.wrapperBins = [ aacgain ffmpeg mp3gain ];
+  rewrite.testPaths= [ ];
+  scrub.testPaths = [ ];
+  smartplaylist = { };
+  sonosupdate = {
+    propagatedBuildInputs = [ python3Packages.soco ];
+    testPaths = [ ];
+  };
+  spotify = { };
+  subsonicplaylist = {
+    propagatedBuildInputs = [ python3Packages.requests ];
+    testPaths = [ ];
+  };
+  subsonicupdate.propagatedBuildInputs = [ python3Packages.requests ];
+  the = { };
+  thumbnails = {
+    propagatedBuildInputs = with python3Packages; [ pillow pyxdg ];
+    wrapperBins = [ imagemagick ];
+  };
+  types.testPaths = [ "test/test_types_plugin.py" ];
+  unimported.testPaths = [ ];
+  web.propagatedBuildInputs = [ python3Packages.flask ];
+  zero = { };
+  # NOTE: Condition can be removed once stable beets updates
+} // lib.optionalAttrs ((lib.versions.majorMinor version) != "1.6") {
+  limit = { };
+  substitute = {
+    testPaths = [ ];
+  };
+  advancedrewrite = {
+    testPaths = [ ];
+  };
+  autobpm = {
+    testPaths = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/beets/common.nix b/nixpkgs/pkgs/tools/audio/beets/common.nix
new file mode 100644
index 000000000000..fb8b6be0ed8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/common.nix
@@ -0,0 +1,170 @@
+{ stdenv
+, fetchpatch
+, bashInteractive
+, diffPlugins
+, glibcLocales
+, gobject-introspection
+, gst_all_1
+, lib
+, python3Packages
+, sphinxHook
+, runtimeShell
+, writeScript
+
+  # plugin deps
+, aacgain
+, essentia-extractor
+, ffmpeg
+, flac
+, imagemagick
+, keyfinder-cli
+, mp3gain
+, mp3val
+
+, src
+, version
+, extraPatches ? [ ]
+, pluginOverrides ? { }
+, disableAllPlugins ? false
+, disabledTests ? []
+, extraNativeBuildInputs ? []
+
+  # tests
+, runCommand
+, beets
+}@inputs:
+let
+  inherit (lib) attrNames attrValues concatMap;
+
+  mkPlugin = { name
+  , enable ? !disableAllPlugins
+  , builtin ? false
+  , propagatedBuildInputs ? [ ]
+  , testPaths ? [
+    # NOTE: This conditional can be removed when beets-stable is updated and
+    # the default plugins test path is changed
+    (if (lib.versions.majorMinor version) == "1.6" then
+      "test/test_${name}.py"
+    else
+      "test/plugins/test_${name}.py"
+    )
+  ]
+  , wrapperBins ? [ ]
+  }: {
+    inherit name enable builtin propagatedBuildInputs testPaths wrapperBins;
+  };
+
+  basePlugins = lib.mapAttrs (_: a: { builtin = true; } // a) (import ./builtin-plugins.nix inputs);
+  allPlugins = lib.mapAttrs (n: a: mkPlugin { name = n; } // a) (lib.recursiveUpdate basePlugins pluginOverrides);
+  builtinPlugins = lib.filterAttrs (_: p: p.builtin) allPlugins;
+  enabledPlugins = lib.filterAttrs (_: p: p.enable) allPlugins;
+  disabledPlugins = lib.filterAttrs (_: p: !p.enable) allPlugins;
+
+  pluginWrapperBins = concatMap (p: p.wrapperBins) (attrValues enabledPlugins);
+in
+python3Packages.buildPythonApplication {
+  pname = "beets";
+  inherit src version;
+
+  patches = extraPatches;
+
+  propagatedBuildInputs = with python3Packages; [
+    confuse
+    gst-python
+    jellyfish
+    mediafile
+    munkres
+    musicbrainzngs
+    mutagen
+    pygobject3
+    pyyaml
+    reflink
+    unidecode
+    typing-extensions
+  ] ++ (concatMap (p: p.propagatedBuildInputs) (attrValues enabledPlugins));
+
+  nativeBuildInputs = [
+    gobject-introspection
+    sphinxHook
+  ] ++ extraNativeBuildInputs;
+
+  buildInputs = [
+  ] ++ (with gst_all_1; [
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-ugly
+  ]);
+
+  outputs = [ "out" "doc" "man" ];
+  sphinxBuilders = [ "html" "man" ];
+
+  postInstall = ''
+    mkdir -p $out/share/zsh/site-functions
+    cp extra/_beet $out/share/zsh/site-functions/
+  '';
+
+  makeWrapperArgs = [
+    "--set GI_TYPELIB_PATH \"$GI_TYPELIB_PATH\""
+    "--set GST_PLUGIN_SYSTEM_PATH_1_0 \"$GST_PLUGIN_SYSTEM_PATH_1_0\""
+    "--prefix PATH : ${lib.makeBinPath pluginWrapperBins}"
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+    mock
+    rarfile
+    responses
+  ] ++ pluginWrapperBins;
+
+  disabledTestPaths = lib.flatten (attrValues (lib.mapAttrs (_: v: v.testPaths) disabledPlugins));
+  inherit disabledTests;
+
+  # Perform extra "sanity checks", before running pytest tests.
+  preCheck = ''
+    # Check for undefined plugins
+    find beetsplug -mindepth 1 \
+      \! -path 'beetsplug/__init__.py' -a \
+      \( -name '*.py' -o -path 'beetsplug/*/__init__.py' \) -print \
+      | sed -n -re 's|^beetsplug/([^/.]+).*|\1|p' \
+      | sort -u > plugins_available
+    ${diffPlugins (attrNames builtinPlugins) "plugins_available"}
+
+    export BEETS_TEST_SHELL="${bashInteractive}/bin/bash --norc"
+    export HOME="$(mktemp -d)"
+
+    env EDITOR="${writeScript "beetconfig.sh" ''
+      #!${runtimeShell}
+      cat > "$1" <<CFG
+      plugins: ${lib.concatStringsSep " " (attrNames enabledPlugins)}
+      CFG
+    ''}" "$out/bin/beet" config -e
+    env EDITOR=true "$out/bin/beet" config -e
+  '';
+
+
+  passthru.plugins = allPlugins;
+
+  passthru.tests.gstreamer = runCommand "beets-gstreamer-test" {
+    meta.timeout = 60;
+  } ''
+    set -euo pipefail
+    export HOME=$(mktemp -d)
+    mkdir $out
+
+    cat << EOF > $out/config.yaml
+replaygain:
+  backend: gstreamer
+EOF
+
+    ${beets}/bin/beet -c $out/config.yaml > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Music tagger and library organizer";
+    homepage = "https://beets.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aszlig doronbehar lovesegfault pjones ];
+    platforms = platforms.linux;
+    mainProgram = "beet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/beets/default.nix b/nixpkgs/pkgs/tools/audio/beets/default.nix
new file mode 100644
index 000000000000..391974c4a4fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/default.nix
@@ -0,0 +1,99 @@
+{ lib
+, callPackage
+, fetchFromGitHub
+, fetchpatch
+, python3Packages
+}:
+/*
+** To customize the enabled beets plugins, use the pluginOverrides input to the
+** derivation.
+** Examples:
+**
+** Disabling a builtin plugin:
+** beets.override { pluginOverrides = { beatport.enable = false; }; }
+**
+** Enabling an external plugin:
+** beets.override { pluginOverrides = {
+**   alternatives = { enable = true; propagatedBuildInputs = [ beetsPackages.alternatives ]; };
+** }; }
+*/
+lib.makeExtensible (self: {
+  beets = self.beets-stable;
+
+  beets-stable = callPackage ./common.nix rec {
+    inherit python3Packages;
+    # NOTE: ./builtin-plugins.nix and ./common.nix can have some conditionals
+    # be removed when stable version updates
+    version = "1.6.0";
+    src = fetchFromGitHub {
+      owner = "beetbox";
+      repo = "beets";
+      rev = "v${version}";
+      hash = "sha256-fT+rCJJQR7bdfAcmeFRaknmh4ZOP4RCx8MXpq7/D8tM=";
+    };
+    extraPatches = [
+      # Bash completion fix for Nix
+      ./patches/bash-completion-always-print.patch
+
+      # Fix unidecode>=1.3.5 compat
+      (fetchpatch {
+        url = "https://github.com/beetbox/beets/commit/5ae1e0f3c8d3a450cb39f7933aa49bb78c2bc0d9.patch";
+        hash = "sha256-gqkrE+U1j3tt1qPRJufTGS/GftaSw/gweXunO/mCVG8=";
+      })
+
+      # Fix embedart with ImageMagick 7.1.1-12
+      # https://github.com/beetbox/beets/pull/4839
+      # The upstream patch does not apply on 1.6.0, as the related code has been refactored since
+      ./patches/fix-embedart-imagick-7.1.1-12.patch
+      # Pillow 10 compatibility fix, a backport of
+      # https://github.com/beetbox/beets/pull/4868, which doesn't apply now
+      ./patches/fix-pillow10-compat.patch
+
+      # Sphinx 6 compatibility fix.
+      (fetchpatch {
+        url = "https://github.com/beetbox/beets/commit/2106f471affd1dab35b4b26187b9c74d034528c5.patch";
+        hash = "sha256-V/886dYJW/O55VqU8sd+x/URIFcKhP6j5sUhTGMoxL8=";
+      })
+    ];
+    disabledTests = [
+      # This issue is present on this version alone, and can be removed on the
+      # next stable version version bump. Since this is fixed in branch master,
+      # we don't have a bug ticket open for this. As of writing, it also seems
+      # hard to find a patch that can be backported to v1.6.0 that would fix
+      # the failure, as the master branch has gone through too many changes
+      # now.
+      "test_get_single_item_by_path"
+    ];
+  };
+
+  beets-minimal = self.beets.override { disableAllPlugins = true; };
+
+  beets-unstable = callPackage ./common.nix {
+    inherit python3Packages;
+    version = "unstable-2023-10-26";
+    src = fetchFromGitHub {
+      owner = "beetbox";
+      repo = "beets";
+      rev = "6655760732100f5387fad2d2890c015ee5039981";
+      hash = "sha256-Nz9BHtacYpJMLmB3f9WFg6GvMa+BuUhiNbJ9cyannek=";
+    };
+    extraPatches = [
+      # Bash completion fix for Nix
+      ./patches/unstable-bash-completion-always-print.patch
+    ];
+    pluginOverrides = {
+      # unstable has new plugins, so we register them here.
+      limit = { builtin = true; };
+      substitute = { builtin = true; };
+      advancedrewrite = { builtin = true; };
+      autobpm = { builtin = true; };
+    };
+    extraNativeBuildInputs = [
+      python3Packages.pydata-sphinx-theme
+    ];
+  };
+
+  alternatives = callPackage ./plugins/alternatives.nix { beets = self.beets-minimal; };
+  copyartifacts = callPackage ./plugins/copyartifacts.nix { beets = self.beets-minimal; };
+  extrafiles = callPackage ./plugins/extrafiles.nix { beets = self.beets-minimal; };
+})
diff --git a/nixpkgs/pkgs/tools/audio/beets/patches/bash-completion-always-print.patch b/nixpkgs/pkgs/tools/audio/beets/patches/bash-completion-always-print.patch
new file mode 100644
index 000000000000..8a31fe22f728
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/patches/bash-completion-always-print.patch
@@ -0,0 +1,44 @@
+diff --git i/beets/ui/commands.py w/beets/ui/commands.py
+index 3a337401..d08a6763 100755
+--- i/beets/ui/commands.py
++++ w/beets/ui/commands.py
+@@ -1759,21 +1759,6 @@ default_commands.append(config_cmd)
+ def print_completion(*args):
+     for line in completion_script(default_commands + plugins.commands()):
+         print_(line, end='')
+-    if not any(map(os.path.isfile, BASH_COMPLETION_PATHS)):
+-        log.warning('Warning: Unable to find the bash-completion package. '
+-                    'Command line completion might not work.')
+-
+-
+-BASH_COMPLETION_PATHS = map(syspath, [
+-    '/etc/bash_completion',
+-    '/usr/share/bash-completion/bash_completion',
+-    '/usr/local/share/bash-completion/bash_completion',
+-    # SmartOS
+-    '/opt/local/share/bash-completion/bash_completion',
+-    # Homebrew (before bash-completion2)
+-    '/usr/local/etc/bash_completion',
+-])
+-
+ 
+ def completion_script(commands):
+     """Yield the full completion shell script as strings.
+diff --git i/test/test_ui.py w/test/test_ui.py
+index 9804b0a1..c3b53243 100644
+--- i/test/test_ui.py
++++ w/test/test_ui.py
+@@ -1229,12 +1229,7 @@ class CompletionTest(_common.TestCase, TestHelper):
+                                   stdout=subprocess.PIPE, env=env)
+ 
+         # Load bash_completion library.
+-        for path in commands.BASH_COMPLETION_PATHS:
+-            if os.path.exists(util.syspath(path)):
+-                bash_completion = path
+-                break
+-        else:
+-            self.skipTest('bash-completion script not found')
++        self.skipTest('bash-completion script not found')
+         try:
+             with open(util.syspath(bash_completion), 'rb') as f:
+                 tester.stdin.writelines(f)
diff --git a/nixpkgs/pkgs/tools/audio/beets/patches/fix-embedart-imagick-7.1.1-12.patch b/nixpkgs/pkgs/tools/audio/beets/patches/fix-embedart-imagick-7.1.1-12.patch
new file mode 100644
index 000000000000..42ae3526e978
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/patches/fix-embedart-imagick-7.1.1-12.patch
@@ -0,0 +1,13 @@
+diff --git a/beets/art.py b/beets/art.py
+index 13d5dfbd..ac1d2fd8 100644
+--- a/beets/art.py
++++ b/beets/art.py
+@@ -132,7 +132,7 @@ def check_art_similarity(log, item, imagepath, compare_threshold):
+             convert_cmd = ['convert', syspath(imagepath, prefix=False),
+                            syspath(art, prefix=False),
+                            '-colorspace', 'gray', 'MIFF:-']
+-            compare_cmd = ['compare', '-metric', 'PHASH', '-', 'null:']
++            compare_cmd = ['compare', '-define', 'phash:colorspaces=sRGB,HCLp', '-metric', 'PHASH', '-', 'null:']
+             log.debug('comparing images with pipeline {} | {}',
+                       convert_cmd, compare_cmd)
+             convert_proc = subprocess.Popen(
diff --git a/nixpkgs/pkgs/tools/audio/beets/patches/fix-pillow10-compat.patch b/nixpkgs/pkgs/tools/audio/beets/patches/fix-pillow10-compat.patch
new file mode 100644
index 000000000000..f85eec20156c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/patches/fix-pillow10-compat.patch
@@ -0,0 +1,13 @@
+diff --git i/beets/util/artresizer.py w/beets/util/artresizer.py
+index 8683e228..6f99c79e 100644
+--- i/beets/util/artresizer.py
++++ w/beets/util/artresizer.py
+@@ -72,7 +72,7 @@ def pil_resize(maxwidth, path_in, path_out=None, quality=0, max_filesize=0):
+     try:
+         im = Image.open(util.syspath(path_in))
+         size = maxwidth, maxwidth
+-        im.thumbnail(size, Image.ANTIALIAS)
++        im.thumbnail(size, Image.Resampling.LANCZOS)
+ 
+         if quality == 0:
+             # Use PIL's default quality.
diff --git a/nixpkgs/pkgs/tools/audio/beets/patches/unstable-bash-completion-always-print.patch b/nixpkgs/pkgs/tools/audio/beets/patches/unstable-bash-completion-always-print.patch
new file mode 100644
index 000000000000..96b175117572
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/patches/unstable-bash-completion-always-print.patch
@@ -0,0 +1,45 @@
+diff --git i/beets/ui/commands.py w/beets/ui/commands.py
+index ad4f7821..5077191d 100755
+--- i/beets/ui/commands.py
++++ w/beets/ui/commands.py
+@@ -2381,22 +2381,6 @@ default_commands.append(config_cmd)
+ def print_completion(*args):
+     for line in completion_script(default_commands + plugins.commands()):
+         print_(line, end="")
+-    if not any(os.path.isfile(syspath(p)) for p in BASH_COMPLETION_PATHS):
+-        log.warning(
+-            "Warning: Unable to find the bash-completion package. "
+-            "Command line completion might not work."
+-        )
+-
+-
+-BASH_COMPLETION_PATHS = [
+-    b"/etc/bash_completion",
+-    b"/usr/share/bash-completion/bash_completion",
+-    b"/usr/local/share/bash-completion/bash_completion",
+-    # SmartOS
+-    b"/opt/local/share/bash-completion/bash_completion",
+-    # Homebrew (before bash-completion2)
+-    b"/usr/local/etc/bash_completion",
+-]
+ 
+ 
+ def completion_script(commands):
+diff --git i/test/test_ui.py w/test/test_ui.py
+index cae86148..faf266a8 100644
+--- i/test/test_ui.py
++++ w/test/test_ui.py
+@@ -1434,12 +1434,7 @@ class CompletionTest(_common.TestCase, TestHelper):
+         )
+ 
+         # Load bash_completion library.
+-        for path in commands.BASH_COMPLETION_PATHS:
+-            if os.path.exists(syspath(path)):
+-                bash_completion = path
+-                break
+-        else:
+-            self.skipTest("bash-completion script not found")
++        self.skipTest("bash-completion script not found")
+         try:
+             with open(util.syspath(bash_completion), "rb") as f:
+                 tester.stdin.writelines(f)
diff --git a/nixpkgs/pkgs/tools/audio/beets/plugins/alternatives.nix b/nixpkgs/pkgs/tools/audio/beets/plugins/alternatives.nix
new file mode 100644
index 000000000000..95740e2d4e42
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/plugins/alternatives.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, beets, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "beets-alternatives";
+  version = "unstable-2021-02-01";
+
+  src = fetchFromGitHub {
+    repo = "beets-alternatives";
+    owner = "geigerzaehler";
+    rev = "288299e3aa9a1602717b04c28696fce5ce4259bf";
+    sha256 = "sha256-Xl7AHr33hXQqQDuFbWuj8HrIugeipJFPmvNXpCkU/mI=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.cfg \
+      --replace "addopts = --cov --cov-report=term --cov-report=html" ""
+  '';
+
+  nativeBuildInputs = [ beets ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+    mock
+  ];
+
+  meta = with lib; {
+    description = "Beets plugin to manage external files";
+    homepage = "https://github.com/geigerzaehler/beets-alternatives";
+    maintainers = with maintainers; [ aszlig lovesegfault ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/beets/plugins/copyartifacts.nix b/nixpkgs/pkgs/tools/audio/beets/plugins/copyartifacts.nix
new file mode 100644
index 000000000000..132eda28ed30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/plugins/copyartifacts.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, beets, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "beets-copyartifacts";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    repo = "beets-copyartifacts";
+    owner = "adammillerio";
+    rev = "v${version}";
+    sha256 = "sha256-UTZh7T6Z288PjxFgyFxHnPt0xpAH3cnr8/jIrlJhtyU=";
+  };
+
+  postPatch = ''
+    sed -i -e '/install_requires/,/\]/{/beets/d}' setup.py
+    sed -i -e '/namespace_packages/d' setup.py
+    printf 'from pkgutil import extend_path\n__path__ = extend_path(__path__, __name__)\n' >beetsplug/__init__.py
+  '';
+
+  pytestFlagsArray = [ "-r fEs" ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+    beets
+    six
+  ];
+
+  meta = {
+    description = "Beets plugin to move non-music files during the import process";
+    homepage = "https://github.com/adammillerio/beets-copyartifacts";
+    license = lib.licenses.mit;
+    inherit (beets.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/beets/plugins/extrafiles.nix b/nixpkgs/pkgs/tools/audio/beets/plugins/extrafiles.nix
new file mode 100644
index 000000000000..80c51dcde522
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/plugins/extrafiles.nix
@@ -0,0 +1,37 @@
+{ lib, fetchFromGitHub, beets, python3Packages }:
+
+python3Packages.buildPythonApplication {
+  pname = "beets-extrafiles";
+  version = "unstable-2020-12-13";
+
+  src = fetchFromGitHub {
+    repo = "beets-extrafiles";
+    owner = "Holzhaus";
+    rev = "a1d6ef9a9682b6bf7af9483541e56a3ff12247b8";
+    sha256 = "sha256-ajuEbieWjTCNjdRZuGUwvStZwjx260jmY0m+ZqNd7ec=";
+  };
+
+  postPatch = ''
+    sed -i -e '/install_requires/,/\]/{/beets/d}' setup.py
+    sed -i -e '/namespace_packages/d' setup.py
+    sed -i -e 's/mediafile~=0.6.0/mediafile>=0.6.0/' setup.py
+  '';
+
+  propagatedBuildInputs = with python3Packages; [ mediafile ];
+
+  nativeCheckInputs = [
+    python3Packages.pytestCheckHook
+    beets
+  ];
+
+  preCheck = ''
+    HOME="$(mktemp -d)"
+  '';
+
+  meta = {
+    homepage = "https://github.com/Holzhaus/beets-extrafiles";
+    description = "A plugin for beets that copies additional files and directories during the import process";
+    license = lib.licenses.mit;
+    inherit (beets.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/botamusique/catch-invalid-versions.patch b/nixpkgs/pkgs/tools/audio/botamusique/catch-invalid-versions.patch
new file mode 100644
index 000000000000..39b9aae8514c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/botamusique/catch-invalid-versions.patch
@@ -0,0 +1,24 @@
+diff --git a/mumbleBot.py b/mumbleBot.py
+index 11bc480..7395f41 100644
+--- a/mumbleBot.py
++++ b/mumbleBot.py
+@@ -188,11 +188,14 @@ class MumbleBot:
+             th.start()
+ 
+         last_startup_version = var.db.get("bot", "version", fallback=None)
+-        if not last_startup_version or version.parse(last_startup_version) < version.parse(self.version):
+-            var.db.set("bot", "version", self.version)
+-            if var.config.getboolean("bot", "auto_check_update"):
+-                changelog = util.fetch_changelog()
+-                self.send_channel_msg(tr("update_successful", version=self.version, changelog=changelog))
++        try:
++            if not last_startup_version or version.parse(last_startup_version) < version.parse(self.version):
++                var.db.set("bot", "version", self.version)
++                if var.config.getboolean("bot", "auto_check_update"):
++                    changelog = util.fetch_changelog()
++                    self.send_channel_msg(tr("update_successful", version=self.version, changelog=changelog))
++        except version.InvalidVersion:
++            pass
+ 
+     # Set the CTRL+C shortcut
+     def ctrl_caught(self, signal, frame):
diff --git a/nixpkgs/pkgs/tools/audio/botamusique/default.nix b/nixpkgs/pkgs/tools/audio/botamusique/default.nix
new file mode 100644
index 000000000000..5ad13da03894
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/botamusique/default.nix
@@ -0,0 +1,157 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3Packages
+, ffmpeg-headless
+, makeWrapper
+, nixosTests
+, nodejs
+, npmHooks
+, fetchNpmDeps
+
+# For the update script
+, coreutils
+, curl
+, nix-prefetch-git
+, prefetch-npm-deps
+, jq
+, writeShellScript
+}:
+let
+  srcJson = lib.importJSON ./src.json;
+  src = fetchFromGitHub {
+    owner = "azlux";
+    repo = "botamusique";
+    inherit (srcJson) rev sha256;
+  };
+
+  # Python needed to instantiate the html templates
+  buildPython = python3Packages.python.withPackages (ps: [ ps.jinja2 ]);
+in
+
+stdenv.mkDerivation rec {
+  pname = "botamusique";
+  version = srcJson.version;
+
+  inherit src;
+
+  npmDeps = fetchNpmDeps {
+    src = "${src}/web";
+    hash = srcJson.npmDepsHash;
+  };
+
+  npmRoot = "web";
+
+  patches = [
+    # botamusique by default resolves relative state paths by first checking
+    # whether it exists in the working directory, then falls back to using the
+    # installation directory. With Nix however, the installation directory is
+    # not writable, so that won't work. So we change this so that it uses
+    # relative paths unconditionally, whether they exist or not.
+    ./unconditional-relative-state-paths.patch
+
+    # We can't update the package at runtime with NixOS, so this patch makes
+    # the !update command mention that
+    ./no-runtime-update.patch
+
+    # Fix passing of invalid "git" version into version.parse, which results
+    # in an InvalidVersion exception. The upstream fix is insufficient, so
+    # we carry the correct patch downstream for now.
+    ./catch-invalid-versions.patch
+  ];
+
+  postPatch = ''
+    # However, the function that's patched above is also used for
+    # configuration.default.ini, which is in the installation directory
+    # after all. So we need to counter-patch it here so it can find it absolutely
+    substituteInPlace mumbleBot.py \
+      --replace "configuration.default.ini" "$out/share/botamusique/configuration.default.ini" \
+      --replace "version = 'git'" "version = '${version}'"
+  '';
+
+  NODE_OPTIONS = "--openssl-legacy-provider";
+
+  nativeBuildInputs = [
+    makeWrapper
+    nodejs
+    npmHooks.npmConfigHook
+    python3Packages.wrapPython
+  ];
+
+  pythonPath = with python3Packages; [
+    flask
+    magic
+    mutagen
+    packaging
+    pillow
+    pymumble
+    pyradios
+    requests
+    yt-dlp
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    # Generates artifacts in ./static
+    (
+      cd web
+      npm run build
+    )
+
+    # Fills out http templates
+    ${buildPython}/bin/python scripts/translate_templates.py --lang-dir lang/ --template-dir templates/
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share $out/bin
+    cp -r . $out/share/botamusique
+    chmod +x $out/share/botamusique/mumbleBot.py
+    wrapPythonProgramsIn $out/share/botamusique "$out $pythonPath"
+
+    # Convenience binary and wrap with ffmpeg dependency
+    makeWrapper $out/share/botamusique/mumbleBot.py $out/bin/botamusique \
+      --prefix PATH : ${lib.makeBinPath [ ffmpeg-headless ]}
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = writeShellScript "botamusique-updater" ''
+    export PATH=${lib.makeBinPath [ coreutils curl nix-prefetch-git jq prefetch-npm-deps ]}
+    set -ex
+
+    OWNER=azlux
+    REPO=botamusique
+    VERSION="$(curl https://api.github.com/repos/$OWNER/$REPO/releases/latest | jq -r '.tag_name')"
+
+    nix-prefetch-git --rev "$VERSION" --url https://github.com/$OWNER/$REPO | \
+      jq > "${toString ./src.json}" \
+        --arg version "$VERSION" \
+        '.version |= $version'
+    path="$(jq '.path' -r < "${toString ./src.json}")"
+
+    tmp="$(mktemp -d)"
+    trap 'rm -rf "$tmp"' exit
+
+    npmHash="$(prefetch-npm-deps $path/web/package-lock.json)"
+    jq '. + { npmDepsHash: "'"$npmHash"'" }' < "${toString ./src.json}" > "$tmp/src.json"
+    mv "$tmp/src.json" "${toString ./src.json}"
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) botamusique;
+  };
+
+  meta = with lib; {
+    description = "Bot to play youtube / soundcloud / radio / local music on Mumble";
+    homepage = "https://github.com/azlux/botamusique";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ infinisil ];
+    mainProgram = "botamusique";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/botamusique/no-runtime-update.patch b/nixpkgs/pkgs/tools/audio/botamusique/no-runtime-update.patch
new file mode 100644
index 000000000000..8fc8580fce83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/botamusique/no-runtime-update.patch
@@ -0,0 +1,12 @@
+diff --git a/util.py b/util.py
+index bfec1ed..5147757 100644
+--- a/util.py
++++ b/util.py
+@@ -132,6 +132,7 @@ def check_update(current_version):
+ 
+ 
+ def update(current_version):
++    return "Can't update Nix installation at runtime"
+     global log
+ 
+     target = var.config.get('bot', 'target_version')
diff --git a/nixpkgs/pkgs/tools/audio/botamusique/src.json b/nixpkgs/pkgs/tools/audio/botamusique/src.json
new file mode 100644
index 000000000000..034129ab9956
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/botamusique/src.json
@@ -0,0 +1,13 @@
+{
+  "url": "https://github.com/azlux/botamusique",
+  "rev": "9b9b4e40ce7b077ebfa3b9be08d32025d1e43bc3",
+  "date": "2021-10-27T02:29:59+02:00",
+  "path": "/nix/store/9gxn2bw0757yrmx0xhhwq642lixyy88x-botamusique",
+  "sha256": "07n6nyi84ddqp2x8xrds7q83yfqapl5qhkcprzjsmvxhv4a3ar8q",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false,
+  "version": "7.2.2",
+  "npmDepsHash": "sha256-IzEO7TFqIZUkhNGf0pnHbK/WFexF27RPD9lkYvmFmDw="
+}
diff --git a/nixpkgs/pkgs/tools/audio/botamusique/unconditional-relative-state-paths.patch b/nixpkgs/pkgs/tools/audio/botamusique/unconditional-relative-state-paths.patch
new file mode 100644
index 000000000000..3642a034fc88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/botamusique/unconditional-relative-state-paths.patch
@@ -0,0 +1,22 @@
+diff --git a/util.py b/util.py
+index bfec1ed..0546772 100644
+--- a/util.py
++++ b/util.py
+@@ -22,16 +22,7 @@ log = logging.getLogger("bot")
+ 
+ 
+ def solve_filepath(path):
+-    if not path:
+-        return ''
+-
+-    if path[0] == '/':
+-        return path
+-    elif os.path.exists(path):
+-        return path
+-    else:
+-        mydir = os.path.dirname(os.path.realpath(__file__))
+-        return mydir + '/' + path
++    return path
+ 
+ 
+ def get_recursive_file_list_sorted(path):
diff --git a/nixpkgs/pkgs/tools/audio/bpm-tools/default.nix b/nixpkgs/pkgs/tools/audio/bpm-tools/default.nix
new file mode 100644
index 000000000000..e791c838422a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/bpm-tools/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, lib
+, fetchurl
+, gnuplot
+, sox
+, flac
+, id3v2
+, vorbis-tools
+, makeWrapper
+}:
+
+let
+  path = lib.makeBinPath [ gnuplot sox flac id3v2 vorbis-tools ];
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "bpm-tools";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "http://www.pogo.org.uk/~mark/bpm-tools/releases/bpm-tools-${finalAttrs.version}.tar.gz";
+    sha256 = "151vfbs8h3cibs7kbdps5pqrsxhpjv16y2iyfqbxzsclylgfivrp";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  installFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/bpm-tag --prefix PATH : "${path}"
+    wrapProgram $out/bin/bpm-graph --prefix PATH : "${path}"
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.pogo.org.uk/~mark/bpm-tools/";
+    description = "Automatically calculate BPM (tempo) of music files";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+})
+
diff --git a/nixpkgs/pkgs/tools/audio/catnip-gtk4/default.nix b/nixpkgs/pkgs/tools/audio/catnip-gtk4/default.nix
new file mode 100644
index 000000000000..da677d71bc03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/catnip-gtk4/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, wrapGAppsHook4
+, gobject-introspection
+, gtk4
+, libadwaita
+}:
+
+buildGoModule {
+  pname = "catnip-gtk4";
+  version = "unstable-2023-06-17";
+
+  src = fetchFromGitHub {
+    owner = "diamondburned";
+    repo = "catnip-gtk4";
+    rev = "e635904af952fcee7e9f4b1a3e45ce8519428d9f";
+    hash = "sha256-yJNw/pDgvIzcX4H6RoFJBiRwzWQXWF3obUPxYf4ALOY=";
+  };
+
+  vendorHash = "sha256-gcr3e5Fm2xCTOoTgl71Dv3rxI6gQbqRz0M1NO7fAZk0=";
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    gobject-introspection
+    gtk4
+    libadwaita
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "GTK4 frontend for catnip";
+    homepage = "https://github.com/diamondburned/catnip-gtk4";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "catnip-gtk4";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/catnip/default.nix b/nixpkgs/pkgs/tools/audio/catnip/default.nix
new file mode 100644
index 000000000000..de8a609dfd61
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/catnip/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, portaudio
+, testers
+, catnip
+}:
+
+buildGoModule rec {
+  pname = "catnip";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "noriah";
+    repo = "catnip";
+    rev = "v${version}";
+    hash = "sha256-eVEoQrI8NycEV/dPUNFqkzgjOYaGmH1+lLRRkOybXDU=";
+  };
+
+  vendorHash = "sha256-Hj453+5fhbUL6YMeupT5D6ydaEMe+ZQNgEYHtCUtTx4=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    portaudio
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = catnip;
+    };
+  };
+
+  meta = with lib; {
+    description = "Terminal audio visualizer for linux/unix/macOS/windows";
+    homepage = "https://github.com/noriah/catnip";
+    changelog = "https://github.com/noriah/catnip/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "catnip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/darkice/default.nix b/nixpkgs/pkgs/tools/audio/darkice/default.nix
new file mode 100644
index 000000000000..2c9143d51f89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/darkice/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, pkg-config
+, libjack2, alsa-lib, libpulseaudio
+, faac, lame, libogg, libopus, libvorbis, libsamplerate
+}:
+
+stdenv.mkDerivation rec {
+  pname = "darkice";
+  version = "1.4";
+
+  src = fetchurl {
+    url = "https://github.com/rafael2k/darkice/releases/download/v${version}/darkice-${version}.tar.gz";
+    sha256 = "05yq7lggxygrkd76yiqby3msrgdn082p0qlvmzzv9xbw8hmyra76";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    libopus libvorbis libogg libpulseaudio alsa-lib libsamplerate libjack2 lame
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-fpermissive";
+
+  configureFlags = [
+    "--with-faac-prefix=${faac}"
+    "--with-lame-prefix=${lame.lib}"
+  ];
+
+  patches = [ ./fix-undeclared-memmove.patch ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = "http://darkice.org/";
+    description = "Live audio streamer";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ ikervagyok ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/darkice/fix-undeclared-memmove.patch b/nixpkgs/pkgs/tools/audio/darkice/fix-undeclared-memmove.patch
new file mode 100644
index 000000000000..9b8baf9701d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/darkice/fix-undeclared-memmove.patch
@@ -0,0 +1,13 @@
+diff --git a/src/FaacEncoder.cpp b/src/FaacEncoder.cpp
+index 1100226..3ab1805 100644
+--- a/src/FaacEncoder.cpp
++++ b/src/FaacEncoder.cpp
+@@ -36,7 +36,7 @@
+ // compile the whole file only if faac support configured in
+ #ifdef HAVE_FAAC_LIB
+ 
+-
++#include <string.h>
+ 
+ #include "Exception.h"
+ #include "Util.h"
diff --git a/nixpkgs/pkgs/tools/audio/dl-librescore/default.nix b/nixpkgs/pkgs/tools/audio/dl-librescore/default.nix
new file mode 100644
index 000000000000..a84f12e8fa53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/dl-librescore/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, buildNpmPackage
+, fetchFromGitHub
+, python3
+, darwin
+}:
+
+buildNpmPackage rec {
+  pname = "dl-librescore";
+  version = "0.34.59";
+
+  src = fetchFromGitHub {
+    owner = "LibreScore";
+    repo = "dl-librescore";
+    rev = "v${version}";
+    hash = "sha256-ZpY+cWtNf/s4Aw42eDc9/0jXzVHugEmU91Qgu9p1f0w=";
+  };
+
+  npmDepsHash = "sha256-DX3to2SNYhNWIJqcz5Mberuk/HSpCO538CjsvvALgkI=";
+
+  # see https://github.com/LibreScore/dl-librescore/pull/32
+  # TODO can be removed with next update
+  postPatch = ''
+    substituteInPlace package-lock.json \
+      --replace 50c7a1508cd9358757c30794e14ba777e6faa8aa b4cb32eb1734a2f73ba2d92743647b1a91c0e2a8
+  '';
+
+  makeCacheWritable = true;
+
+  nativeBuildInputs = [
+    python3
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.cctools
+  ];
+
+  meta = {
+    description = "Download sheet music";
+    homepage = "https://github.com/LibreScore/dl-librescore";
+    license = lib.licenses.mit;
+    mainProgram = "dl-librescore";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/dsp/default.nix b/nixpkgs/pkgs/tools/audio/dsp/default.nix
new file mode 100644
index 000000000000..8c218ab70e8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/dsp/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, fftw
+, zita-convolver
+, fftwFloat
+, libsndfile
+, ffmpeg
+, alsa-lib
+, libao
+, libmad
+, ladspaH
+, libtool
+, libpulseaudio
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "dsp";
+  version = "1.9";
+
+  src = fetchFromGitHub {
+    owner = "bmc0";
+    repo = "dsp";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-S1pzVQ/ceNsx0vGmzdDWw2TjPVLiRgzR4edFblWsekY=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    fftw
+    zita-convolver
+    fftwFloat
+    libsndfile
+    ffmpeg
+    alsa-lib
+    libao
+    libmad
+    ladspaH
+    libtool
+    libpulseaudio
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bmc0/dsp";
+    description = "An audio processing program with an interactive mode";
+    license = licenses.isc;
+    maintainers = with maintainers; [ aaronjheng ];
+    platforms = platforms.linux;
+    mainProgram = "dsp";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/audio/essentia-extractor/default.nix b/nixpkgs/pkgs/tools/audio/essentia-extractor/default.nix
new file mode 100644
index 000000000000..de3bf45d10c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/essentia-extractor/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl }:
+let
+  arch_table = {
+    "x86_64-linux" = "linux-x86_64";
+    "i686-linux" = "linux-i686";
+  };
+
+  sha_table = {
+    "x86_64-linux" = "d9902aadac4f442992877945da2a6fe8d6ea6b0de314ca8ac0c28dc5f253f7d8";
+    "i686-linux" = "46deb0a053b4910c4e68737a7b6556ff5360260c8f86652f91a0130445f5c949";
+  };
+
+  throwSystem = throw "Unsupported system: ${stdenv.system}";
+  arch = arch_table.${stdenv.system} or throwSystem;
+in
+stdenv.mkDerivation rec {
+  pname = "essentia-extractor";
+  version = "2.1_beta2";
+
+  src = fetchurl {
+    url = "https://ftp.acousticbrainz.org/pub/acousticbrainz/essentia-extractor-v${version}-${arch}.tar.gz";
+    sha256 = sha_table.${stdenv.system} or throwSystem;
+  };
+
+  unpackPhase = "unpackFile $src ; export sourceRoot=.";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp streaming_extractor_music $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://acousticbrainz.org/download";
+    description = "AcousticBrainz audio feature extractor";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ lovesegfault ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    mainProgram = "streaming_extractor_music";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/ezstream/default.nix b/nixpkgs/pkgs/tools/audio/ezstream/default.nix
new file mode 100644
index 000000000000..ee85f1aabd33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/ezstream/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, libiconv, libshout, taglib, libxml2, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "ezstream";
+  version = "0.6.0";
+
+  src = fetchurl {
+    url = "https://ftp.osuosl.org/pub/xiph/releases/ezstream/${pname}-${version}.tar.gz";
+    sha256 = "f86eb8163b470c3acbc182b42406f08313f85187bd9017afb8b79b02f03635c9";
+  };
+
+  buildInputs = [ libiconv libshout taglib libxml2 ];
+  nativeBuildInputs = [ pkg-config ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A command line source client for Icecast media streaming servers";
+    longDescription = ''
+      Ezstream is a command line source client for Icecast media
+      streaming servers. It began as the successor of the old "shout"
+      utility, and has since gained a lot of useful features.
+
+      In its basic mode of operation, it streams media files or data
+      from standard input without reencoding and thus requires only
+      very little CPU resources.
+    '';
+    homepage = "https://icecast.org/ezstream/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.barrucadu ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/glyr/default.nix b/nixpkgs/pkgs/tools/audio/glyr/default.nix
new file mode 100644
index 000000000000..0f13addfcd92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/glyr/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, cmake
+, curl, glib, sqlite, pkg-config }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.10";
+  pname = "glyr";
+
+  src = fetchFromGitHub {
+    owner = "sahib";
+    repo = "glyr";
+    rev = version;
+    sha256 = "1miwbqzkhg0v3zysrwh60pj9sv6ci4lzq2vq2hhc6pc6hdyh8xyr";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ sqlite glib curl ];
+
+  meta = with lib; {
+    description = "A music related metadata searchengine";
+    homepage = "https://github.com/sahib/glyr";
+    license = licenses.lgpl3;
+    maintainers = [ maintainers.sternenseemann ];
+    mainProgram = "glyrc";
+    platforms = platforms.unix;
+  };
+}
+
+
diff --git a/nixpkgs/pkgs/tools/audio/goxlr-utility/default.nix b/nixpkgs/pkgs/tools/audio/goxlr-utility/default.nix
new file mode 100644
index 000000000000..6a2de8379e18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/goxlr-utility/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, pkg-config
+, libpulseaudio
+, dbus
+, speechd
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "goxlr-utility";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "GoXLR-on-Linux";
+    repo = "goxlr-utility";
+    rev = "v${version}";
+    hash = "sha256-QKL2iKfn05P20MwT+RAeVzUUyv6FWtxMWuBI+4MgXlQ=";
+  };
+
+  cargoHash = "sha256-LVObMspxhZkK81BjolTZZwoeMunzVwdEWWJAt/aOjZA=";
+
+  buildInputs = [
+    libpulseaudio
+    dbus
+    speechd
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    installShellFiles
+    rustPlatform.bindgenHook
+  ];
+
+  buildFeatures = [ "tts" ];
+
+  postInstall = ''
+    install -Dm644 "50-goxlr.rules" "$out/etc/udev/rules.d/50-goxlr.rules"
+
+    install -Dm644 "daemon/resources/goxlr-utility.png" "$out/share/icons/hicolor/48x48/apps/goxlr-utility.png"
+    install -Dm644 "daemon/resources/goxlr-utility.svg" "$out/share/icons/hicolor/scalable/apps/goxlr-utility.svg"
+    install -Dm644 "daemon/resources/goxlr-utility-large.png" "$out/share/pixmaps/goxlr-utility.png"
+    install -Dm644 "daemon/resources/goxlr-utility.desktop" "$out/share/applications/goxlr-utility.desktop"
+    substituteInPlace $out/share/applications/goxlr-utility.desktop \
+      --replace /usr/bin $out/bin \
+      --replace goxlr-launcher goxlr-daemon
+
+    completions_dir=$(dirname $(find target -name 'goxlr-client.bash' | head -n 1))
+    installShellCompletion --bash $completions_dir/goxlr-client.bash
+    installShellCompletion --fish $completions_dir/goxlr-client.fish
+    installShellCompletion --zsh  $completions_dir/_goxlr-client
+    completions_dir=$(dirname $(find target -name 'goxlr-daemon.bash' | head -n 1))
+    installShellCompletion --bash $completions_dir/goxlr-daemon.bash
+    installShellCompletion --fish $completions_dir/goxlr-daemon.fish
+    installShellCompletion --zsh  $completions_dir/_goxlr-daemon
+  '';
+
+  meta = with lib; {
+    description = "An unofficial GoXLR App replacement for Linux, Windows and MacOS";
+    homepage = "https://github.com/GoXLR-on-Linux/goxlr-utility";
+    license = licenses.mit;
+    maintainers = with maintainers; [ errnoh ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/gvolicon/default.nix b/nixpkgs/pkgs/tools/audio/gvolicon/default.nix
new file mode 100644
index 000000000000..1e552d64cfaa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/gvolicon/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, makeWrapper, alsa-lib, pkg-config, fetchFromGitHub, gtk3, gnome, gdk-pixbuf, librsvg, wrapGAppsHook }:
+
+stdenv.mkDerivation {
+  pname = "gvolicon";
+  version = "unstable-2014-04-28";
+
+  src = fetchFromGitHub {
+    owner = "Unia";
+    repo = "gvolicon";
+    rev = "0d65a396ba11f519d5785c37fec3e9a816217a07";
+    sha256 = "sha256-lm5OfryV1/1T1RgsVDdp0Jg5rh8AND8M3ighfrznKes=";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [
+    alsa-lib gtk3 gdk-pixbuf gnome.adwaita-icon-theme
+    librsvg wrapGAppsHook
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  env.NIX_CFLAGS_COMPILE = "-D_POSIX_C_SOURCE";
+
+  meta = {
+    description = "A simple and lightweight volume icon that sits in your system tray";
+    homepage = "https://github.com/Unia/gvolicon";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl3Plus;
+    maintainers = [ lib.maintainers.bennofs ];
+    mainProgram = "gvolicon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/headset-charge-indicator/default.nix b/nixpkgs/pkgs/tools/audio/headset-charge-indicator/default.nix
new file mode 100644
index 000000000000..40005ea9a6e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/headset-charge-indicator/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchFromGitHub, headsetcontrol, wrapGAppsHook, python3, gtk3
+, gobject-introspection, libayatana-appindicator }:
+
+stdenv.mkDerivation rec {
+  # The last versioned release is 1.0.0.0 from 2020, since then there were updates but no versioned release.
+  # This is not marked unstable because upstream encourages installation from source.
+  pname = "headset-charge-indicator";
+  version = "2021-08-15";
+
+  src = fetchFromGitHub {
+    owner = "centic9";
+    repo = "headset-charge-indicator";
+    rev = "6e20f81a4d6118c7385b831044c468af83103193";
+    sha256 = "sha256-eaAbqeFY+B3CcKJywC3vaRsWZNQENTbALc7L7uW0W6U=";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook gobject-introspection ];
+
+  buildInputs = [
+    (python3.withPackages (ps: with ps; [ pygobject3 ]))
+    headsetcontrol
+    gtk3
+    libayatana-appindicator
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src/headset-charge-indicator.py $out/bin/headset-charge-indicator.py
+    chmod +x $out/bin/headset-charge-indicator.py
+
+    substituteInPlace \
+      $out/bin/headset-charge-indicator.py \
+      --replace "default='headsetcontrol'" "default='${headsetcontrol}/bin/headsetcontrol'"
+
+    cat << EOF > ${pname}.desktop
+    [Desktop Entry]
+    Name=Wireless headset app-indicator
+    Categories=Application;System
+    Exec=$out/bin/headset-charge-indicator.py
+    Terminal=false
+    Type=Application
+    X-GNOME-AutoRestart=true
+    X-GNOME-Autostart-enabled=true
+    EOF
+
+    mkdir -p $out/share/applications
+    mkdir -p $out/etc/xdg/autostart
+    cp ${pname}.desktop $out/share/applications/${pname}.desktop
+    cp ${pname}.desktop $out/etc/xdg/autostart/${pname}.desktop
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/centic9/headset-charge-indicator";
+    description =
+      "A app-indicator for GNOME desktops for controlling some features of various wireless headsets";
+    longDescription =
+      "A simple app-indicator for GNOME desktops to display the battery charge of some wireless headsets which also allows to control some functions like LEDs, sidetone and others.";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ zebreus ];
+    license = licenses.bsd2;
+    mainProgram = "headset-charge-indicator.py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/headsetcontrol/default.nix b/nixpkgs/pkgs/tools/audio/headsetcontrol/default.nix
new file mode 100644
index 000000000000..68a799a55c76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/headsetcontrol/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, hidapi
+}:
+
+stdenv.mkDerivation rec {
+  pname = "headsetcontrol";
+  version = "2.7.0";
+
+  src = fetchFromGitHub {
+    owner = "Sapd";
+    repo = "HeadsetControl";
+    rev = version;
+    sha256 = "sha256-tAndkfLEgj81JWzXtDBNspRxzKAL6XaRw0aDI1XbC1E=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    hidapi
+  ];
+
+  /*
+  Tests depend on having the appropriate headsets connected.
+  */
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Sidetone and Battery status for Logitech G930, G533, G633, G933 SteelSeries Arctis 7/PRO 2019 and Corsair VOID (Pro)";
+    longDescription = ''
+      A tool to control certain aspects of USB-connected headsets on Linux. Currently,
+      support is provided for adjusting sidetone, getting battery state, controlling
+      LEDs, and setting the inactive time.
+    '';
+    homepage = "https://github.com/Sapd/HeadsetControl";
+    license = licenses.gpl3Plus;
+    mainProgram = "headsetcontrol";
+    maintainers = with maintainers; [ leixb ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/isrcsubmit/default.nix b/nixpkgs/pkgs/tools/audio/isrcsubmit/default.nix
new file mode 100644
index 000000000000..f135cccbc6cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/isrcsubmit/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "isrcsubmit";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "JonnyJD";
+    repo = "musicbrainz-isrcsubmit";
+    rev = "v${version}";
+    sha256 = "1lqs4jl2xv1zxmf0xsihk9rxzx2awq87g51vd7y3cq1vhj1icxqa";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ musicbrainzngs discid ];
+
+  meta = with lib; {
+    # drutil is required on Darwin, which does not seem to be available in nixpkgs
+    broken = true; # 2022-11-16
+    description = "Script to submit ISRCs from disc to MusicBrainz";
+    license = licenses.gpl3Plus;
+    homepage = "http://jonnyjd.github.io/musicbrainz-isrcsubmit/";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/kaldi/default.nix b/nixpkgs/pkgs/tools/audio/kaldi/default.nix
new file mode 100644
index 000000000000..e841b1291013
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/kaldi/default.nix
@@ -0,0 +1,99 @@
+{ lib
+, stdenv
+, openblas
+, blas
+, lapack
+, icu
+, cmake
+, pkg-config
+, fetchFromGitHub
+, python3
+, Accelerate
+, _experimental-update-script-combinators
+, common-updater-scripts
+, ripgrep
+, unstableGitUpdater
+, writeShellScript
+}:
+
+assert blas.implementation == "openblas" && lapack.implementation == "openblas";
+stdenv.mkDerivation (finalAttrs: {
+  pname = "kaldi";
+  version = "unstable-2024-01-31";
+
+  src = fetchFromGitHub {
+    owner = "kaldi-asr";
+    repo = "kaldi";
+    rev = "8c451e28582f5d91f84ea3d64bb76c794c3b1683";
+    sha256 = "sha256-iW/2gDZ/ib0M+bfWtZ9XuMWXMwTGoKCRLVl2lHLNh6c=";
+  };
+
+  cmakeFlags = [
+    "-DKALDI_BUILD_TEST=off"
+    "-DBUILD_SHARED_LIBS=on"
+    "-DBLAS_LIBRARIES=-lblas"
+    "-DLAPACK_LIBRARIES=-llapack"
+    "-DFETCHCONTENT_SOURCE_DIR_OPENFST:PATH=${finalAttrs.passthru.sources.openfst}"
+  ];
+
+  buildInputs = [
+    openblas
+    icu
+  ] ++ lib.optionals stdenv.isDarwin [
+    Accelerate
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    python3
+  ];
+
+  preConfigure = ''
+    cmakeFlagsArray+=(
+      # Extract version without the need for git.
+      # https://github.com/kaldi-asr/kaldi/blob/71f38e62cad01c3078555bfe78d0f3a527422d75/cmake/VersionHelper.cmake
+      # Patch number is not actually used by default so we can just ignore it.
+      # https://github.com/kaldi-asr/kaldi/blob/71f38e62cad01c3078555bfe78d0f3a527422d75/CMakeLists.txt#L214
+      "-DKALDI_VERSION=$(cat src/.version)"
+    )
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/kaldi
+    cp -r ../egs $out/share/kaldi
+  '';
+
+  passthru = {
+    sources = {
+      # rev from https://github.com/kaldi-asr/kaldi/blob/master/cmake/third_party/openfst.cmake
+      openfst = fetchFromGitHub {
+        owner = "kkm000";
+        repo = "openfst";
+        rev = "338225416178ac36b8002d70387f5556e44c8d05";
+        hash = "sha256-MGEUuw7ex+WcujVdxpO2Bf5sB6Z0edcAeLGqW/Lo1Hs=";
+      };
+    };
+
+    updateScript =
+      let
+        updateSource = unstableGitUpdater {};
+        updateOpenfst = writeShellScript "update-openfst" ''
+          hash=$(${ripgrep}/bin/rg --multiline --pcre2 --only-matching 'FetchContent_Declare\(\s*openfst[^)]*GIT_TAG\s*([0-9a-f]{40})' --replace '$1' "${finalAttrs.src}/cmake/third_party/openfst.cmake")
+          ${common-updater-scripts}/bin/update-source-version kaldi.sources.openfst "$hash" --source-key=out "--version-key=rev"
+        '';
+      in
+      _experimental-update-script-combinators.sequence [
+        updateSource
+        updateOpenfst
+      ];
+  };
+
+  meta = with lib; {
+    description = "Speech Recognition Toolkit";
+    homepage = "https://kaldi-asr.org";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mic92 ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/audio/linuxwave/default.nix b/nixpkgs/pkgs/tools/audio/linuxwave/default.nix
new file mode 100644
index 000000000000..4d86b31c854e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/linuxwave/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, zig_0_10
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "linuxwave";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "linuxwave";
+    rev = "v${finalAttrs.version}";
+    fetchSubmodules = true;
+    hash = "sha256-5c8h9bAe3Qv7PJ3PPcwMJYKPlWsmnqshe6vLIgtdDiQ=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    zig_0_10.hook
+  ];
+
+  postInstall = ''
+    installManPage man/linuxwave.1
+  '';
+
+  meta = {
+    homepage = "https://github.com/orhun/linuxwave";
+    description = "Generate music from the entropy of Linux";
+    changelog = "https://github.com/orhun/linuxwave/blob/${finalAttrs.src.rev}/CHANGELOG.md";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ figsoda ];
+    inherit (zig_0_10.meta) platforms;
+    mainProgram = "linuxwave";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/audio/liquidsoap/full.nix b/nixpkgs/pkgs/tools/audio/liquidsoap/full.nix
new file mode 100644
index 000000000000..87914436fd49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/liquidsoap/full.nix
@@ -0,0 +1,140 @@
+{ lib, stdenv, makeWrapper, fetchFromGitHub, which, pkg-config
+, libjpeg
+, ocamlPackages
+, awscli2, bubblewrap, curl, ffmpeg, yt-dlp
+, runtimePackages ? [ awscli2 bubblewrap curl ffmpeg yt-dlp ]
+}:
+
+let
+  pname = "liquidsoap";
+  version = "2.2.3";
+in
+stdenv.mkDerivation {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "savonet";
+    repo = "liquidsoap";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-oCMSdmdU3oHrq3QFEDQLdb3CLFYcWylxTqKWtGOoQW8=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/lang/dune \
+      --replace "(run git rev-parse --short HEAD)" "(run echo -n nixpkgs)"
+  '';
+
+  dontConfigure = true;
+
+  buildPhase = ''
+    runHook preBuild
+
+    dune build
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    dune install --prefix "$out"
+
+    runHook postInstall
+  '';
+
+  fixupPhase = ''
+    runHook preFixup
+
+    wrapProgram $out/bin/liquidsoap \
+      --set LIQ_LADSPA_PATH /run/current-system/sw/lib/ladspa \
+      --prefix PATH : ${lib.makeBinPath runtimePackages}
+
+    runHook postFixup
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+    which
+    ocamlPackages.ocaml
+    ocamlPackages.dune_3
+    ocamlPackages.findlib
+    ocamlPackages.menhir
+  ];
+
+  buildInputs = [
+    libjpeg
+
+    # Mandatory dependencies
+    ocamlPackages.dtools
+    ocamlPackages.duppy
+    ocamlPackages.mm
+    ocamlPackages.ocurl
+    ocamlPackages.cry
+    ocamlPackages.camomile
+    ocamlPackages.uri
+    ocamlPackages.fileutils
+    ocamlPackages.menhir # liquidsoap-lang
+    ocamlPackages.menhirLib
+    ocamlPackages.metadata
+    ocamlPackages.dune-build-info
+    ocamlPackages.re
+    ocamlPackages.sedlex # liquidsoap-lang
+    ocamlPackages.ppx_string
+
+    # Recommended dependencies
+    ocamlPackages.ffmpeg
+
+    # Optional dependencies
+    ocamlPackages.alsa
+    ocamlPackages.ao
+    ocamlPackages.bjack
+    ocamlPackages.camlimages
+    ocamlPackages.dssi
+    ocamlPackages.faad
+    ocamlPackages.fdkaac
+    ocamlPackages.flac
+    ocamlPackages.frei0r
+    ocamlPackages.gd4o
+    ocamlPackages.graphics
+    ocamlPackages.gstreamer
+    ocamlPackages.imagelib
+    ocamlPackages.inotify
+    ocamlPackages.ladspa
+    ocamlPackages.lame
+    ocamlPackages.lastfm
+    ocamlPackages.lilv
+    ocamlPackages.lo
+    ocamlPackages.mad
+    ocamlPackages.magic
+    ocamlPackages.ogg
+    ocamlPackages.opus
+    ocamlPackages.portaudio
+    ocamlPackages.posix-time2
+    ocamlPackages.pulseaudio
+    ocamlPackages.samplerate
+    ocamlPackages.shine
+    ocamlPackages.soundtouch
+    ocamlPackages.speex
+    ocamlPackages.srt
+    ocamlPackages.ssl
+    ocamlPackages.taglib
+    ocamlPackages.theora
+    ocamlPackages.tsdl
+    ocamlPackages.tsdl-image
+    ocamlPackages.tsdl-ttf
+    ocamlPackages.vorbis
+    ocamlPackages.xmlplaylist
+    ocamlPackages.yaml
+  ];
+
+  meta = with lib; {
+    description = "Swiss-army knife for multimedia streaming";
+    homepage = "https://www.liquidsoap.info/";
+    maintainers = with maintainers; [ dandellion ehmry ];
+    license = licenses.gpl2Plus;
+    platforms = ocamlPackages.ocaml.meta.platforms or [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/loudgain/default.nix b/nixpkgs/pkgs/tools/audio/loudgain/default.nix
new file mode 100644
index 000000000000..caf1294c751f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/loudgain/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, ffmpeg_4, libebur128
+, libresample, taglib, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "loudgain";
+  version = "0.6.8";
+
+  src = fetchFromGitHub {
+    owner = "Moonbase59";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-XLj+n0GlY/GAkJlW2JVMd0jxMzgdv/YeSTuF6QUIGwU=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ ffmpeg_4 libebur128 libresample taglib zlib ];
+
+  postInstall = ''
+    sed -e "1aPATH=$out/bin:\$PATH" -i "$out/bin/rgbpm"
+  '';
+
+  meta = src.meta // {
+    license = lib.licenses.free;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mictray/default.nix b/nixpkgs/pkgs/tools/audio/mictray/default.nix
new file mode 100644
index 000000000000..d93423e66b49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mictray/default.nix
@@ -0,0 +1,54 @@
+{ fetchFromGitHub
+, gtk3
+, lib
+, libgee
+, libnotify
+, meson
+, ninja
+, pkg-config
+, pulseaudio
+, stdenv
+, vala
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mictray";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "Junker";
+    repo = "mictray";
+    rev = "1f879aeda03fbe87ae5a761f46c042e09912e1c0";
+    sha256 = "0achj6r545c1sigls79c8qdzryz3sgldcyzd3pwak1ymim9i9c74";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    libgee
+    libnotify
+    pulseaudio
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/Junker/mictray";
+    description = "System tray application for microphone";
+    longDescription = ''
+      MicTray is a Lightweight system tray application which lets you control the microphone state and volume.
+    '';
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.anpryl ];
+    mainProgram = "mictray";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/midicsv/default.nix b/nixpkgs/pkgs/tools/audio/midicsv/default.nix
new file mode 100644
index 000000000000..673503d51d7b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/midicsv/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "midicsv";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://www.fourmilab.ch/webtools/midicsv/midicsv-${version}.tar.gz";
+    sha256 = "1vvhk2nf9ilfw0wchmxy8l13hbw9cnpz079nsx5srsy4nnd78nkw";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/local $out \
+      --replace gcc "${stdenv.cc.targetPrefix}cc"
+  '';
+
+  meta = with lib; {
+    description = "Losslessly translate MIDI to CSV and back";
+    homepage = "https://www.fourmilab.ch/webtools/midicsv/";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ orivej ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/midimonster/default.nix b/nixpkgs/pkgs/tools/audio/midimonster/default.nix
new file mode 100644
index 000000000000..8ff97968b000
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/midimonster/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gnumake
+, gcc
+, pkg-config
+, lua5_4
+, openssl
+, jack1
+, python3
+, alsa-lib
+, ncurses
+, libevdev
+}:
+
+stdenv.mkDerivation {
+  pname = "midimonster";
+  version = "0.6.0";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [gnumake gcc lua5_4 openssl jack1 python3 alsa-lib ncurses libevdev];
+
+  src = fetchFromGitHub {
+    repo = "midimonster";
+    owner = "cbdevnet";
+    rev = "f16f7db86662fcdbf45b6373257c90c824b0b4b0";
+    sha256 = "131zs4j9asq9xl72cbyi463xpkj064ca1s7i77q5jrwqysgy52sp";
+  };
+
+  doCheck = true;
+  enableParallelBuilding = true;
+
+  outputs = ["out" "man"];
+
+  buildPhase = ''
+    PLUGINS=$out/lib/midimonster make all
+  '';
+
+  installPhase = ''
+    PREFIX=$out make install
+
+    mkdir -p "$man/share/man/man1"
+    cp assets/midimonster.1 "$man/share/man/man1"
+
+    mkdir -p "$out/share/icons/hicolor/scalable/apps"
+    cp assets/MIDIMonster.svg "$out/share/icons/hicolor/scalable/apps/"
+  '';
+
+  meta = with lib; {
+    homepage = "https://midimonster.net";
+    description = "Multi-protocol translation tool";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [keldu];
+    mainProgram = "midimonster";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mp3cat/default.nix b/nixpkgs/pkgs/tools/audio/mp3cat/default.nix
new file mode 100644
index 000000000000..5819eb281b2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mp3cat/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "mp3cat";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "tomclegg";
+    repo = pname;
+    rev = version;
+    sha256 = "0n6hjg2wgd06m561zc3ib5w2m3pwpf74njv2b2w4sqqh5md2ymfr";
+  };
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  installTargets = [
+    "install_bin"
+  ];
+
+  meta = with lib; {
+    description = "A command line program which concatenates MP3 files";
+    longDescription = ''
+      A command line program which concatenates MP3 files, mp3cat
+      only outputs MP3 frames with valid headers, even if there is extra garbage
+      in its input stream
+    '';
+    homepage = "https://github.com/tomclegg/mp3cat";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.omnipotententity ];
+    platforms = platforms.all;
+    mainProgram = "mp3cat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpd-discord-rpc/default.nix b/nixpkgs/pkgs/tools/audio/mpd-discord-rpc/default.nix
new file mode 100644
index 000000000000..17bc6c6e419f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpd-discord-rpc/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mpd-discord-rpc";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "JakeStanger";
+    repo = "mpd-discord-rpc";
+    rev = "v${version}";
+    hash = "sha256-fJHBQGc0+HjEALWuAWSts1l6NMookkut3Cm4e541iGw=";
+  };
+
+  cargoHash = "sha256-v5JN0Nqp/fGjjJaKrMWt2HWzxAnA1URf0P2Xq9lHNVQ=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Rust application which displays your currently playing song / album / artist from MPD in Discord using Rich Presence";
+    homepage = "https://github.com/JakeStanger/mpd-discord-rpc/";
+    changelog = "https://github.com/JakeStanger/mpd-discord-rpc/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kranzes ];
+    mainProgram = "mpd-discord-rpc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpd-mpris/default.nix b/nixpkgs/pkgs/tools/audio/mpd-mpris/default.nix
new file mode 100644
index 000000000000..dcf1e467300e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpd-mpris/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+}:
+
+buildGoModule rec {
+  pname = "mpd-mpris";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "natsukagami";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QxPkGWpCWiyEbChH9SHeD+SiV8k0c/G7MG/azksP3xU=";
+  };
+
+  patches = [
+    # Makes Exec= path not absolute, see https://github.com/natsukagami/mpd-mpris/pull/42
+    (fetchpatch {
+      url = "https://github.com/natsukagami/mpd-mpris/commit/8a5b53b1aa3174c3ccb1db24fb4e39f90012b98f.patch";
+      hash = "sha256-LArPq+RRPJOs0je1olqg+pK7nvU7UIlrpGtHv2PhIY4=";
+    })
+  ];
+
+  vendorHash = "sha256-HCDJrp9WFB1z+FnYpOI5e/AojtdnpN2ZNtgGVaH/v/Q=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/${pname}" ];
+
+  postInstall = ''
+    install -Dm644 mpd-mpris.service $out/lib/systemd/user/mpd-mpris.service
+    install -Dm644 mpd-mpris.desktop $out/etc/xdg/autostart/mpd-mpris.desktop
+  '';
+
+  meta = with lib; {
+    description = "An implementation of the MPRIS protocol for MPD";
+    homepage = "https://github.com/natsukagami/mpd-mpris";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+    mainProgram = "mpd-mpris";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpd-notification/default.nix b/nixpkgs/pkgs/tools/audio/mpd-notification/default.nix
new file mode 100644
index 000000000000..845056c61414
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpd-notification/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, pkg-config
+, fetchFromGitHub
+, file
+, iniparser
+, ffmpeg
+, libnotify
+, libmpdclient
+, discount
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mpd-notification";
+  version = "0.8.7";
+
+  src = fetchFromGitHub {
+    owner = "eworm-de";
+    repo = "mpd-notification";
+    rev = version;
+    hash = "sha256-lBvx2eYxFJUAxR1LrjWHZUeAo+WnQKmPYJVAJTeXqHY=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    iniparser
+    libnotify
+    file
+    ffmpeg
+    libmpdclient
+    discount
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mv mpd-notification $out/bin
+
+    mkdir -p $out/lib/systemd/user
+    cp systemd/mpd-notification.service $out/lib/systemd/user
+
+    runHook postInstall
+  '';
+
+  postPatch = ''
+    substituteInPlace systemd/mpd-notification.service --replace /usr $out
+  '';
+
+  meta = with lib; {
+    description = "Notifications for mpd";
+    homepage = "https://github.com/eworm-de/mpd-notification";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ CaitlinDavitt ];
+    platforms = platforms.unix;
+    mainProgram = "mpd-notification";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpd-sima/default.nix b/nixpkgs/pkgs/tools/audio/mpd-sima/default.nix
new file mode 100644
index 000000000000..b123d2828c4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpd-sima/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitLab
+, python-musicpd
+, requests}:
+
+buildPythonApplication rec {
+  pname = "mpd-sima";
+  version = "0.18.2";
+
+  src = fetchFromGitLab {
+    owner = "kaliko";
+    repo = "sima";
+     rev = version;
+    sha256 = "sha256-lMvM1EqS1govhv4B2hJzIg5DFQYgEr4yJJtgOQxnVlY=";
+  };
+
+  format = "setuptools";
+
+  propagatedBuildInputs = [
+    requests
+    python-musicpd
+  ];
+
+  doCheck = true;
+
+  preCheck = ''
+    export HOME="$(mktemp -d)"
+  '';
+
+  meta = with lib; {
+    description = "An autoqueuing mpd client";
+    homepage = "https://kaliko.me/mpd-sima/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with lib.maintainers; [ apfelkuchen6 ];
+    mainProgram = "mpd-sima";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpdas/default.nix b/nixpkgs/pkgs/tools/audio/mpdas/default.nix
new file mode 100644
index 000000000000..04251854d48d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdas/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, libmpdclient
+, curl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mpdas";
+  version = "0.4.5";
+
+  src = fetchFromGitHub {
+    owner = "hrkfdn";
+    repo = "mpdas";
+    rev = version;
+    sha256 = "0fcqc4w6iwbi1n3cllcgj0k61zffhqkbr8668myxap21m35x8y1r";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libmpdclient curl ];
+
+  makeFlags = [ "CONFIG=/etc" "DESTDIR=" "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Music Player Daemon AudioScrobbler";
+    homepage = "https://50hz.ws/mpdas/";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.taketwo ];
+    platforms = platforms.all;
+    mainProgram = "mpdas";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile b/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile
new file mode 100644
index 000000000000..e0814bc4ddab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile
@@ -0,0 +1,2 @@
+source "https://rubygems.org"
+gem "nokogiri"
diff --git a/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile.lock b/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile.lock
new file mode 100644
index 000000000000..603a9cfdafb1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    mini_portile2 (2.4.0)
+    nokogiri (1.10.3)
+      mini_portile2 (~> 2.4.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  nokogiri
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/audio/mpdcron/default.nix b/nixpkgs/pkgs/tools/audio/mpdcron/default.nix
new file mode 100644
index 000000000000..924181608af4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdcron/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf
+, automake
+, libtool
+, pkg-config
+, glib
+, libdaemon
+, libmpdclient
+, curl
+, sqlite
+, bundlerEnv
+, libnotify
+, pandoc
+}:
+
+let
+  gemEnv = bundlerEnv {
+    name = "mpdcron-bundle";
+    gemdir = ./.;
+  };
+in stdenv.mkDerivation {
+  pname = "mpdcron";
+  version = "20161228";
+
+  src = fetchFromGitHub {
+    owner = "alip";
+    repo = "mpdcron";
+    rev = "e49e6049b8693d31887c538ddc7b19f5e8ca476b";
+    sha256 = "0vdksf6lcgmizqr5mqp0bbci259k0dj7gpmhx32md41jlmw5skaw";
+  };
+
+  nativeBuildInputs = [ autoconf automake pkg-config ];
+  buildInputs = [
+    libtool
+    glib
+    libdaemon
+    pandoc
+    libmpdclient
+    curl
+    sqlite
+    gemEnv.wrappedRuby
+    libnotify
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = [ "--enable-gmodule" "--with-standard-modules=all" ];
+
+  meta = with lib; {
+    description = "A cron like daemon for mpd";
+    homepage    = "http://alip.github.io/mpdcron/";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ lovek323 manveru ];
+  };
+}
+# TODO: autoreconfHook this
diff --git a/nixpkgs/pkgs/tools/audio/mpdcron/fix-canonicalize-conflict-with-glibc.patch b/nixpkgs/pkgs/tools/audio/mpdcron/fix-canonicalize-conflict-with-glibc.patch
new file mode 100644
index 000000000000..dd89f8998498
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdcron/fix-canonicalize-conflict-with-glibc.patch
@@ -0,0 +1,22 @@
+diff --git a/ext/nokogiri/xml_document.c b/ext/nokogiri/xml_document.c
+index 1d2119c8..c1c87713 100644
+--- a/ext/nokogiri/xml_document.c
++++ b/ext/nokogiri/xml_document.c
+@@ -492,7 +492,7 @@ static int block_caller(void * ctx, xmlNodePtr _node, xmlNodePtr _parent)
+  * The block must return a non-nil, non-false value if the +obj+ passed in
+  * should be included in the canonicalized document.
+  */
+-static VALUE canonicalize(int argc, VALUE* argv, VALUE self)
++static VALUE nokogiri_xml_document_canonicalize(int argc, VALUE* argv, VALUE self)
+ {
+   VALUE mode;
+   VALUE incl_ns;
+@@ -573,7 +573,7 @@ void init_xml_document()
+   rb_define_method(klass, "encoding", encoding, 0);
+   rb_define_method(klass, "encoding=", set_encoding, 1);
+   rb_define_method(klass, "version", version, 0);
+-  rb_define_method(klass, "canonicalize", canonicalize, -1);
++  rb_define_method(klass, "nokogiri_xml_document_canonicalize", canonicalize, -1);
+   rb_define_method(klass, "dup", duplicate_document, -1);
+   rb_define_method(klass, "url", url, 0);
+   rb_define_method(klass, "create_entity", create_entity, -1);
diff --git a/nixpkgs/pkgs/tools/audio/mpdcron/gemset.nix b/nixpkgs/pkgs/tools/audio/mpdcron/gemset.nix
new file mode 100644
index 000000000000..ee254bb6354b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdcron/gemset.nix
@@ -0,0 +1,36 @@
+{
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02bjydih0j515szfv9mls195cvpyidh6ixm7dwbl3s2sbaxxk5s4";
+      type = "gem";
+    };
+
+    dontBuild = false;
+    patches = [
+      # Fixes a naming conflict of nokogiri's `canonicalize` function
+      # with one defined in glibc. This has been fixed upstream in 2020
+      # in a much newer version (1.15.5), but through the divergence
+      # of the affected file, the commit isn't directly applicable to
+      # the one packaged here:
+      #
+      # https://github.com/sparklemotion/nokogiri/pull/2106/commits/7a74cdbe4538e964023e5a0fdca58d8af708b91e
+      # https://github.com/sparklemotion/nokogiri/issues/2105
+      ./fix-canonicalize-conflict-with-glibc.patch
+    ];
+    version = "1.10.3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpdris2/default.nix b/nixpkgs/pkgs/tools/audio/mpdris2/default.nix
new file mode 100644
index 000000000000..fd4b60f13e05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdris2/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, autoreconfHook
+, fetchFromGitHub
+, glib
+, gobject-introspection
+, intltool
+, libnotify
+, python3
+, wrapGAppsHook
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "mpDris2";
+  version = "0.9.1";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "eonpatapon";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-1Y6K3z8afUXeKhZzeiaEF3yqU0Ef7qdAj9vAkRlD2p8=";
+  };
+
+  preConfigure = ''
+    intltoolize -f
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gobject-introspection
+    intltool
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    libnotify
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dbus-python
+    mpd2
+    mutagen
+    pygobject3
+  ];
+
+  meta = with lib; {
+    description = "MPRIS 2 support for mpd";
+    homepage = "https://github.com/eonpatapon/mpDris2/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    mainProgram = "mpDris2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpris-scrobbler/default.nix b/nixpkgs/pkgs/tools/audio/mpris-scrobbler/default.nix
new file mode 100644
index 000000000000..a5e7b2483305
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpris-scrobbler/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nix-update-script
+, curl
+, dbus
+, libevent
+, m4
+, meson
+, ninja
+, pkg-config
+, scdoc
+, json_c
+, xdg-utils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mpris-scrobbler";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "mariusor";
+    repo = "mpris-scrobbler";
+    rev = "v${version}";
+    sha256 = "sha256-HUEUkVL5d6FD698k8iSCJMNeSo8vGJCsExJW/E0EWpQ=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/signon.c \
+      --replace "/usr/bin/xdg-open" "${xdg-utils}/bin/xdg-open"
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace meson.build \
+      --replace "-Werror=format-truncation=0" "" \
+      --replace "-Wno-stringop-overflow" ""
+  '';
+
+  nativeBuildInputs = [
+    m4
+    meson
+    ninja
+    pkg-config
+    scdoc
+  ];
+
+  buildInputs = [
+    curl
+    dbus
+    json_c
+    libevent
+  ];
+
+  mesonFlags = [
+    "-Dversion=${version}"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString ([
+    # Needed with GCC 12
+    "-Wno-error=address"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-Wno-sometimes-uninitialized"
+    "-Wno-tautological-pointer-compare"
+  ] ++ lib.optionals stdenv.isLinux [
+    "-Wno-array-bounds"
+    "-Wno-free-nonheap-object"
+    "-Wno-stringop-truncation"
+  ]);
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Minimalistic scrobbler for ListenBrainz, libre.fm, & last.fm";
+    homepage = "https://github.com/mariusor/mpris-scrobbler";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emantor ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/nanotts/default.nix b/nixpkgs/pkgs/tools/audio/nanotts/default.nix
new file mode 100644
index 000000000000..41214ffe9206
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/nanotts/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, popt, alsa-lib, alsa-plugins, makeWrapper }:
+
+stdenv.mkDerivation {
+  pname = "nano-tts";
+  version = "unstable-2021-02-22";
+
+  src = fetchFromGitHub {
+    repo = "nanotts";
+    owner = "gmn";
+    rev = "d8b91f3d9d524c30f6fe8098ea7a0a638c889cf9";
+    sha256 = "sha256-bFu3U50zc90iQeWkqOsCipkueJUZI3cW5342jjYSnGI=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ autoconf automake libtool makeWrapper ];
+  buildInputs = [ popt alsa-lib ];
+
+  patchPhase = ''
+    substituteInPlace "src/main.cpp" --replace "/usr/share/pico/lang" "$out/share/lang"
+    echo "" > update_build_version.sh
+  '';
+
+  installPhase = ''
+    install -Dm755 -t $out/bin nanotts
+    install -Dm644 -t $out/share/lang $src/lang/*
+    wrapProgram $out/bin/nanotts \
+      --set ALSA_PLUGIN_DIR ${alsa-plugins}/lib/alsa-lib
+  '';
+
+  meta = {
+    description = "Speech synthesizer commandline utility that improves pico2wave, included with SVOX PicoTTS";
+    homepage = "https://github.com/gmn/nanotts";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.strikerlulu ];
+    platforms = lib.platforms.linux;
+    mainProgram = "nanotts";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/openai-whisper-cpp/default.nix b/nixpkgs/pkgs/tools/audio/openai-whisper-cpp/default.nix
new file mode 100644
index 000000000000..191aae946e21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/openai-whisper-cpp/default.nix
@@ -0,0 +1,127 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+, makeWrapper
+, wget
+, which
+, Accelerate
+, CoreGraphics
+, CoreML
+, CoreVideo
+, MetalKit
+
+, config
+, cudaSupport ? config.cudaSupport
+, cudaPackages ? {}
+}:
+
+let
+  # It's necessary to consistently use backendStdenv when building with CUDA support,
+  # otherwise we get libstdc++ errors downstream.
+  # cuda imposes an upper bound on the gcc version, e.g. the latest gcc compatible with cudaPackages_11 is gcc11
+  effectiveStdenv = if cudaSupport then cudaPackages.backendStdenv else stdenv;
+in
+effectiveStdenv.mkDerivation (finalAttrs: {
+  pname = "whisper-cpp";
+  version = "1.5.4";
+
+  src = fetchFromGitHub {
+    owner = "ggerganov";
+    repo = "whisper.cpp";
+    rev = "refs/tags/v${finalAttrs.version}" ;
+    hash = "sha256-9H2Mlua5zx2WNXbz2C5foxIteuBgeCNALdq5bWyhQCk=";
+  };
+
+  # The upstream download script tries to download the models to the
+  # directory of the script, which is not writable due to being
+  # inside the nix store. This patch changes the script to download
+  # the models to the current directory of where it is being run from.
+  patches = [ ./download-models.patch ];
+
+  nativeBuildInputs = [
+      which
+      makeWrapper
+    ] ++ lib.optionals cudaSupport ( with cudaPackages ;[
+      cuda_nvcc
+
+      # TODO: Replace with autoAddDriverRunpath
+      # once https://github.com/NixOS/nixpkgs/pull/275241 has been merged
+      autoAddOpenGLRunpathHook
+    ]);
+
+  buildInputs = [
+      SDL2
+    ] ++ lib.optionals stdenv.isDarwin [
+      Accelerate
+      CoreGraphics
+      CoreML
+      CoreVideo
+      MetalKit
+    ] ++ lib.optionals cudaSupport ( with cudaPackages; [
+
+      # A temporary hack for reducing the closure size, remove once cudaPackages
+      # have stopped using lndir: https://github.com/NixOS/nixpkgs/issues/271792
+      cuda_cccl.dev # provides nv/target
+      cuda_cudart.dev
+      cuda_cudart.lib
+      cuda_cudart.static
+      libcublas.dev
+      libcublas.lib
+      libcublas.static
+    ]);
+
+  postPatch = let
+    cudaOldStr = "-lcuda ";
+    cudaNewStr = "-lcuda -L${cudaPackages.cuda_cudart.lib}/lib/stubs ";
+  in lib.optionalString cudaSupport ''
+    substituteInPlace Makefile \
+      --replace '${cudaOldStr}' '${cudaNewStr}'
+  '';
+
+  env = lib.optionalAttrs stdenv.isDarwin {
+    WHISPER_COREML = "1";
+    WHISPER_COREML_ALLOW_FALLBACK = "1";
+  } // lib.optionalAttrs cudaSupport {
+    WHISPER_CUBLAS = "1";
+  };
+
+  makeFlags = [ "main" "stream" "command" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp ./main $out/bin/whisper-cpp
+    cp ./stream $out/bin/whisper-cpp-stream
+    cp ./command $out/bin/whisper-cpp-command
+
+    cp models/download-ggml-model.sh $out/bin/whisper-cpp-download-ggml-model
+
+    wrapProgram $out/bin/whisper-cpp-download-ggml-model \
+      --prefix PATH : ${lib.makeBinPath [wget]}
+
+    ${lib.optionalString stdenv.isDarwin ''
+      install -Dt $out/share/whisper-cpp ggml-metal.metal
+
+      for bin in whisper-cpp whisper-cpp-stream whisper-cpp-command; do
+        wrapProgram $out/bin/$bin \
+          --set-default GGML_METAL_PATH_RESOURCES $out/share/whisper-cpp
+      done
+    ''}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Port of OpenAI's Whisper model in C/C++";
+    longDescription = ''
+      To download the models as described in the project's readme, you may
+      use the `whisper-cpp-download-ggml-model` binary from this package.
+    '';
+    homepage = "https://github.com/ggerganov/whisper.cpp";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dit7ya hughobrien ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/audio/openai-whisper-cpp/download-models.patch b/nixpkgs/pkgs/tools/audio/openai-whisper-cpp/download-models.patch
new file mode 100644
index 000000000000..7183c38b5166
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/openai-whisper-cpp/download-models.patch
@@ -0,0 +1,51 @@
+--- a/models/download-ggml-model.sh
++++ b/models/download-ggml-model.sh
+@@ -9,18 +9,6 @@
+ src="https://huggingface.co/ggerganov/whisper.cpp"
+ pfx="resolve/main/ggml"
+ 
+-# get the path of this script
+-function get_script_path() {
+-    if [ -x "$(command -v realpath)" ]; then
+-        echo "$(dirname "$(realpath "$0")")"
+-    else
+-        local ret="$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)"
+-        echo "$ret"
+-    fi
+-}
+-
+-models_path="${2:-$(get_script_path)}"
+-
+ # Whisper models
+ models=(
+     "tiny.en"
+@@ -56,8 +44,8 @@ function list_models {
+     printf "\n\n"
+ }
+ 
+-if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
+-    printf "Usage: $0 <model> [models_path]\n"
++if [ "$#" -ne 1 ]; then
++    printf "Usage: $0 <model>\n"
+     list_models
+ 
+     exit 1
+@@ -82,8 +70,6 @@ fi
+ 
+ printf "Downloading ggml model $model from '$src' ...\n"
+ 
+-cd "$models_path"
+-
+ if [ -f "ggml-$model.bin" ]; then
+     printf "Model $model already exists. Skipping download.\n"
+     exit 0
+@@ -105,7 +91,7 @@ if [ $? -ne 0 ]; then
+     exit 1
+ fi
+ 
+-printf "Done! Model '$model' saved in '$models_path/ggml-$model.bin'\n"
++printf "Done! Model '$model' saved in 'ggml-$model.bin'\n"
+ printf "You can now use it like this:\n\n"
+-printf "  $ ./main -m $models_path/ggml-$model.bin -f samples/jfk.wav\n"
++printf "  $ whisper-cpp -m ggml-$model.bin -f samples/jfk.wav\n"
+ printf "\n"
diff --git a/nixpkgs/pkgs/tools/audio/opl3bankeditor/0001-opl3bankeditor-Look-for-system-installed-Rt-libs.patch b/nixpkgs/pkgs/tools/audio/opl3bankeditor/0001-opl3bankeditor-Look-for-system-installed-Rt-libs.patch
new file mode 100644
index 000000000000..36adff53a011
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/opl3bankeditor/0001-opl3bankeditor-Look-for-system-installed-Rt-libs.patch
@@ -0,0 +1,200 @@
+From 11711398a1ec16f4eaeac8523b77165a560b69cc Mon Sep 17 00:00:00 2001
+From: OPNA2608 <christoph.neidahl@gmail.com>
+Date: Sun, 13 Jun 2021 13:55:53 +0200
+Subject: [PATCH] Look for system-installed Rt libs
+
+---
+ CMakeLists.txt | 159 +++++++++++++++++++++++++++++++------------------
+ 1 file changed, 102 insertions(+), 57 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f3e53c3..027c1b1 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -50,15 +50,6 @@ message("!! Optional feature summary:")
+ message("!!   RtMidi: ${USE_RTMIDI}")
+ message("!!   RtAudio: ${USE_RTAUDIO}")
+ 
+-if(USE_RTAUDIO)
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    pkg_check_modules(JACK "jack")
+-    message("!!   -- Jack driver: ${JACK_FOUND}")
+-    pkg_check_modules(PULSEAUDIO "libpulse-simple")
+-    message("!!   -- Pulseaudio driver: ${PULSEAUDIO_FOUND}")
+-  endif()
+-endif()
+-
+ if(ENABLE_PLOTS)
+   message("!!   Qwt: ${QWT_LIBRARY}")
+ endif()
+@@ -250,65 +241,119 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ endif()
+ 
+ if(USE_RTMIDI)
+-  add_library(RtMidi STATIC "src/midi/external/rtmidi/RtMidi.cpp")
+-  target_include_directories(RtMidi PUBLIC "src/midi/external/rtmidi")
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    target_compile_definitions(RtMidi PUBLIC "__LINUX_ALSA__")
+-    target_link_libraries(RtMidi PUBLIC "asound")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+-    target_compile_definitions(RtMidi PUBLIC "__WINDOWS_MM__")
+-    target_link_libraries(RtMidi PUBLIC "winmm")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+-    target_compile_definitions(RtMidi PUBLIC "__MACOSX_CORE__")
+-    find_library(COREMIDI_LIBRARY "CoreMIDI")
+-    target_link_libraries(RtMidi PUBLIC "${COREMIDI_LIBRARY}")
++  if(PKG_CONFIG_FOUND)
++    pkg_check_modules(RTMIDI rtmidi)
++    if(RTMIDI_FOUND)
++      message("Using system-installed RtMidi found by pkg-config.")
++      target_link_libraries(OPL3BankEditor PUBLIC ${RTMIDI_LDFLAGS})
++      target_include_directories(OPL3BankEditor PUBLIC ${RTMIDI_INCLUDE_DIRS})
++      target_compile_options(OPL3BankEditor PUBLIC ${RTMIDI_CFLAGS})
++    endif()
+   endif()
++
++  if(NOT RTMIDI_FOUND)
++    find_library(RTMIDI_LIBRARY "rtmidi")
++    find_path(RTMIDI_INCLUDE_DIRS "RtMidi.h")
++    message("RtMidi library: ${RTMIDI_LIBRARY}")
++    message("RtMidi header directory: ${RTMIDI_INCLUDE_DIRS}")
++    if(NOT RTMIDI_LIBRARY-NOTFOUND AND NOT RTMIDI_INCLUDE_DIRS STREQUAL RTMIDI_INCLUDE_DIRS-NOTFOUND)
++      message("Using system-installed RtMidi.")
++      set(RTMIDI_FOUND TRUE)
++      target_link_libraries(OPL3BankEditor PUBLIC ${RTMIDI_LIBRARY})
++      target_include_directories(OPL3BankEditor PUBLIC ${RTMIDI_INCLUDE_DIRS})
++    endif()
++  endif()
++
++  if(NOT RTMIDI_FOUND)
++    message("Using bundled RtMidi.")
++    add_library(RtMidi STATIC "src/midi/external/rtmidi/RtMidi.cpp")
++    target_include_directories(RtMidi PUBLIC "src/midi/external/rtmidi")
++    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
++      target_compile_definitions(RtMidi PUBLIC "__LINUX_ALSA__")
++      target_link_libraries(RtMidi PUBLIC "asound")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
++      target_compile_definitions(RtMidi PUBLIC "__WINDOWS_MM__")
++      target_link_libraries(RtMidi PUBLIC "winmm")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
++      target_compile_definitions(RtMidi PUBLIC "__MACOSX_CORE__")
++      find_library(COREMIDI_LIBRARY "CoreMIDI")
++      target_link_libraries(RtMidi PUBLIC "${COREMIDI_LIBRARY}")
++    endif()
++    target_link_libraries(OPL3BankEditor PRIVATE RtMidi)
++  endif()
++
+   target_sources(OPL3BankEditor PRIVATE "src/midi/midi_rtmidi.cpp")
+   target_compile_definitions(OPL3BankEditor PRIVATE "ENABLE_MIDI")
+-  target_link_libraries(OPL3BankEditor PRIVATE RtMidi)
+ endif()
+ 
+ if(USE_RTAUDIO)
+-  add_library(RtAudio STATIC "src/audio/external/rtaudio/RtAudio.cpp")
+-  target_include_directories(RtAudio PUBLIC "src/audio/external/rtaudio")
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    target_compile_definitions(RtAudio PUBLIC "__LINUX_ALSA__")
+-    target_link_libraries(RtAudio PUBLIC "asound")
+-    if(JACK_FOUND)
+-      target_compile_definitions(RtAudio PUBLIC "__UNIX_JACK__")
+-      target_include_directories(RtAudio PUBLIC ${JACK_INCLUDE_DIRS})
+-      link_directories(${JACK_LIBRARY_DIRS})
+-      target_link_libraries(RtAudio PUBLIC ${JACK_LIBRARIES})
++  if(PKG_CONFIG_FOUND)
++    pkg_check_modules(RTAUDIO rtaudio)
++    if(RTAUDIO_FOUND)
++      message("Using system-installed RtAudio found by pkg-config.")
++      target_link_libraries(OPL3BankEditor PUBLIC ${RTAUDIO_LDFLAGS})
++      target_include_directories(OPL3BankEditor PUBLIC ${RTAUDIO_INCLUDE_DIRS})
++      target_compile_options(OPL3BankEditor PUBLIC ${RTAUDIO_CFLAGS})
++    endif()
++  endif()
++
++  if(NOT RTAUDIO_FOUND)
++    find_library(RTAUDIO_LIBRARY "rtaudio")
++    find_path(RTAUDIO_INCLUDE_DIRS "RtAudio.h")
++    message("RtAudio library: ${RTAUDIO_LIBRARY}")
++    message("RtAudio header directory: ${RTAUDIO_INCLUDE_DIRS}")
++    if(NOT RTAUDIO_LIBRARY-NOTFOUND AND NOT RTAUDIO_INCLUDE_DIRS STREQUAL RTAUDIO_INCLUDE_DIRS-NOTFOUND)
++      message("Using system-installed RtAudio.")
++      set(RTAUDIO_FOUND TRUE)
++      target_link_libraries(OPL3BankEditor PUBLIC ${RTAUDIO_LIBRARY})
++      target_include_directories(OPL3BankEditor PUBLIC ${RTAUDIO_INCLUDE_DIRS})
+     endif()
+-    if(PULSEAUDIO_FOUND)
+-      target_compile_definitions(RtAudio PUBLIC "__LINUX_PULSE__")
+-      target_include_directories(RtAudio PUBLIC ${PULSEAUDIO_INCLUDE_DIRS})
+-      link_directories(${PULSEAUDIO_LIBRARY_DIRS})
+-      target_link_libraries(RtAudio PUBLIC ${PULSEAUDIO_LIBRARIES})
++  endif()
++
++  if(NOT RTAUDIO_FOUND)
++    message("Using bundled RtAudio.")
++    add_library(RtAudio STATIC "src/audio/external/rtaudio/RtAudio.cpp")
++    target_include_directories(RtAudio PUBLIC "src/audio/external/rtaudio")
++    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
++      target_compile_definitions(RtAudio PUBLIC "__LINUX_ALSA__")
++      target_link_libraries(RtAudio PUBLIC "asound")
++      if(JACK_FOUND)
++        target_compile_definitions(RtAudio PUBLIC "__UNIX_JACK__")
++        target_include_directories(RtAudio PUBLIC ${JACK_INCLUDE_DIRS})
++        link_directories(${JACK_LIBRARY_DIRS})
++        target_link_libraries(RtAudio PUBLIC ${JACK_LIBRARIES})
++      endif()
++      if(PULSEAUDIO_FOUND)
++        target_compile_definitions(RtAudio PUBLIC "__LINUX_PULSE__")
++        target_include_directories(RtAudio PUBLIC ${PULSEAUDIO_INCLUDE_DIRS})
++        link_directories(${PULSEAUDIO_LIBRARY_DIRS})
++        target_link_libraries(RtAudio PUBLIC ${PULSEAUDIO_LIBRARIES})
++      endif()
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_DS__")
++      target_link_libraries(RtAudio PUBLIC "dsound" "ole32")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_WASAPI__")
++      target_link_libraries(RtAudio PUBLIC "ksguid")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_ASIO__")
++      target_include_directories(RtAudio PRIVATE
++        "src/audio/external/rtaudio/include")
++      target_sources(RtAudio PRIVATE
++        "src/audio/external/rtaudio/include/asio.cpp"
++        "src/audio/external/rtaudio/include/asiodrivers.cpp"
++        "src/audio/external/rtaudio/include/asiolist.cpp"
++        "src/audio/external/rtaudio/include/iasiothiscallresolver.cpp")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
++      target_compile_definitions(RtAudio PUBLIC "__MACOSX_CORE__")
++      find_library(COREAUDIO_LIBRARY "CoreAudio")
++      target_link_libraries(RtAudio PUBLIC "${COREAUDIO_LIBRARY}")
++      find_library(COREFOUNDATION_LIBRARY "CoreFoundation")
++      target_link_libraries(RtAudio PUBLIC "${COREFOUNDATION_LIBRARY}")
+     endif()
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_DS__")
+-    target_link_libraries(RtAudio PUBLIC "dsound" "ole32")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_WASAPI__")
+-    target_link_libraries(RtAudio PUBLIC "ksguid")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_ASIO__")
+-    target_include_directories(RtAudio PRIVATE
+-      "src/audio/external/rtaudio/include")
+-    target_sources(RtAudio PRIVATE
+-      "src/audio/external/rtaudio/include/asio.cpp"
+-      "src/audio/external/rtaudio/include/asiodrivers.cpp"
+-      "src/audio/external/rtaudio/include/asiolist.cpp"
+-      "src/audio/external/rtaudio/include/iasiothiscallresolver.cpp")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+-    target_compile_definitions(RtAudio PUBLIC "__MACOSX_CORE__")
+-    find_library(COREAUDIO_LIBRARY "CoreAudio")
+-    target_link_libraries(RtAudio PUBLIC "${COREAUDIO_LIBRARY}")
+-    find_library(COREFOUNDATION_LIBRARY "CoreFoundation")
+-    target_link_libraries(RtAudio PUBLIC "${COREFOUNDATION_LIBRARY}")
++    target_link_libraries(OPL3BankEditor PRIVATE RtAudio)
+   endif()
++
+   target_sources(OPL3BankEditor PRIVATE "src/audio/ao_rtaudio.cpp")
+   target_compile_definitions(OPL3BankEditor PRIVATE "ENABLE_AUDIO_TESTING")
+-  target_link_libraries(OPL3BankEditor PRIVATE RtAudio)
+ endif()
+ 
+ add_executable(measurer_tool
+-- 
+2.29.3
+
diff --git a/nixpkgs/pkgs/tools/audio/opl3bankeditor/0001-opn2bankeditor-Look-for-system-installed-Rt-libs.patch b/nixpkgs/pkgs/tools/audio/opl3bankeditor/0001-opn2bankeditor-Look-for-system-installed-Rt-libs.patch
new file mode 100644
index 000000000000..f62c3236b33f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/opl3bankeditor/0001-opn2bankeditor-Look-for-system-installed-Rt-libs.patch
@@ -0,0 +1,200 @@
+From 69c993dacc7dc0cb9d105c3dfa764cd7be5c343e Mon Sep 17 00:00:00 2001
+From: OPNA2608 <christoph.neidahl@gmail.com>
+Date: Sun, 13 Jun 2021 14:21:17 +0200
+Subject: [PATCH] Look for system-installed Rt libs
+
+---
+ CMakeLists.txt | 159 +++++++++++++++++++++++++++++++------------------
+ 1 file changed, 102 insertions(+), 57 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f428dc4..18ba8c3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -41,15 +41,6 @@ message("!! Optional feature summary:")
+ message("!!   RtMidi: ${USE_RTMIDI}")
+ message("!!   RtAudio: ${USE_RTAUDIO}")
+ 
+-if(USE_RTAUDIO)
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    pkg_check_modules(JACK "jack")
+-    message("!!   -- Jack driver: ${JACK_FOUND}")
+-    pkg_check_modules(PULSEAUDIO "libpulse-simple")
+-    message("!!   -- Pulseaudio driver: ${PULSEAUDIO_FOUND}")
+-  endif()
+-endif()
+-
+ if(ENABLE_PLOTS)
+   message("!!   Qwt: ${QWT_LIBRARY}")
+ endif()
+@@ -198,65 +189,119 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ endif()
+ 
+ if(USE_RTMIDI)
+-  add_library(RtMidi STATIC "src/midi/external/rtmidi/RtMidi.cpp")
+-  target_include_directories(RtMidi PUBLIC "src/midi/external/rtmidi")
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    target_compile_definitions(RtMidi PUBLIC "__LINUX_ALSA__")
+-    target_link_libraries(RtMidi PUBLIC "asound")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+-    target_compile_definitions(RtMidi PUBLIC "__WINDOWS_MM__")
+-    target_link_libraries(RtMidi PUBLIC "winmm")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+-    target_compile_definitions(RtMidi PUBLIC "__MACOSX_CORE__")
+-    find_library(COREMIDI_LIBRARY "CoreMIDI")
+-    target_link_libraries(RtMidi PUBLIC "${COREMIDI_LIBRARY}")
++  if(PKG_CONFIG_FOUND)
++    pkg_check_modules(RTMIDI rtmidi)
++    if(RTMIDI_FOUND)
++      message("Using system-installed RtMidi found by pkg-config.")
++      target_link_libraries(OPN2BankEditor PUBLIC ${RTMIDI_LDFLAGS})
++      target_include_directories(OPN2BankEditor PUBLIC ${RTMIDI_INCLUDE_DIRS})
++      target_compile_options(OPN2BankEditor PUBLIC ${RTMIDI_CFLAGS})
++    endif()
++  endif()
++
++  if(NOT RTMIDI_FOUND)
++    find_library(RTMIDI_LIBRARY "rtmidi")
++    find_path(RTMIDI_INCLUDE_DIRS "RtMidi.h")
++    message("RtMidi library: ${RTMIDI_LIBRARY}")
++    message("RtMidi header directory: ${RTMIDI_INCLUDE_DIRS}")
++    if(NOT RTMIDI_LIBRARY-NOTFOUND AND NOT RTMIDI_INCLUDE_DIRS STREQUAL RTMIDI_INCLUDE_DIRS-NOTFOUND)
++      message("Using system-installed RtMidi.")
++      set(RTMIDI_FOUND TRUE)
++      target_link_libraries(OPN2BankEditor PUBLIC ${RTMIDI_LIBRARY})
++      target_include_directories(OPN2BankEditor PUBLIC ${RTMIDI_INCLUDE_DIRS})
++    endif()
++  endif()
++
++  if(NOT RTMIDI_FOUND)
++    message("Using bundled RtMidi.")
++    add_library(RtMidi STATIC "src/midi/external/rtmidi/RtMidi.cpp")
++    target_include_directories(RtMidi PUBLIC "src/midi/external/rtmidi")
++    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
++      target_compile_definitions(RtMidi PUBLIC "__LINUX_ALSA__")
++      target_link_libraries(RtMidi PUBLIC "asound")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
++      target_compile_definitions(RtMidi PUBLIC "__WINDOWS_MM__")
++      target_link_libraries(RtMidi PUBLIC "winmm")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
++      target_compile_definitions(RtMidi PUBLIC "__MACOSX_CORE__")
++      find_library(COREMIDI_LIBRARY "CoreMIDI")
++      target_link_libraries(RtMidi PUBLIC "${COREMIDI_LIBRARY}")
++    endif()
++    target_link_libraries(OPN2BankEditor PRIVATE RtMidi)
+   endif()
++
+   target_sources(OPN2BankEditor PRIVATE "src/midi/midi_rtmidi.cpp")
+   target_compile_definitions(OPN2BankEditor PRIVATE "ENABLE_MIDI")
+-  target_link_libraries(OPN2BankEditor PRIVATE RtMidi)
+ endif()
+ 
+ if(USE_RTAUDIO)
+-  add_library(RtAudio STATIC "src/audio/external/rtaudio/RtAudio.cpp")
+-  target_include_directories(RtAudio PUBLIC "src/audio/external/rtaudio")
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    target_compile_definitions(RtAudio PUBLIC "__LINUX_ALSA__")
+-    target_link_libraries(RtAudio PUBLIC "asound")
+-    if(JACK_FOUND)
+-      target_compile_definitions(RtAudio PUBLIC "__UNIX_JACK__")
+-      target_include_directories(RtAudio PUBLIC ${JACK_INCLUDE_DIRS})
+-      link_directories(${JACK_LIBRARY_DIRS})
+-      target_link_libraries(RtAudio PUBLIC ${JACK_LIBRARIES})
++  if(PKG_CONFIG_FOUND)
++    pkg_check_modules(RTAUDIO rtaudio)
++    if(RTAUDIO_FOUND)
++      message("Using system-installed RtAudio found by pkg-config.")
++      target_link_libraries(OPN2BankEditor PUBLIC ${RTAUDIO_LDFLAGS})
++      target_include_directories(OPN2BankEditor PUBLIC ${RTAUDIO_INCLUDE_DIRS})
++      target_compile_options(OPN2BankEditor PUBLIC ${RTAUDIO_CFLAGS})
+     endif()
+-    if(PULSEAUDIO_FOUND)
+-      target_compile_definitions(RtAudio PUBLIC "__LINUX_PULSE__")
+-      target_include_directories(RtAudio PUBLIC ${PULSEAUDIO_INCLUDE_DIRS})
+-      link_directories(${PULSEAUDIO_LIBRARY_DIRS})
+-      target_link_libraries(RtAudio PUBLIC ${PULSEAUDIO_LIBRARIES})
++  endif()
++
++  if(NOT RTAUDIO_FOUND)
++    find_library(RTAUDIO_LIBRARY "rtaudio")
++    find_path(RTAUDIO_INCLUDE_DIRS "RtAudio.h")
++    message("RtAudio library: ${RTAUDIO_LIBRARY}")
++    message("RtAudio header directory: ${RTAUDIO_INCLUDE_DIRS}")
++    if(NOT RTAUDIO_LIBRARY-NOTFOUND AND NOT RTAUDIO_INCLUDE_DIRS STREQUAL RTAUDIO_INCLUDE_DIRS-NOTFOUND)
++      message("Using system-installed RtAudio.")
++      set(RTAUDIO_FOUND TRUE)
++      target_link_libraries(OPN2BankEditor PUBLIC ${RTAUDIO_LIBRARY})
++      target_include_directories(OPN2BankEditor PUBLIC ${RTAUDIO_INCLUDE_DIRS})
+     endif()
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_DS__")
+-    target_link_libraries(RtAudio PUBLIC "dsound" "ole32")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_WASAPI__")
+-    target_link_libraries(RtAudio PUBLIC "ksguid")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_ASIO__")
+-    target_include_directories(RtAudio PRIVATE
+-      "src/audio/external/rtaudio/include")
+-    target_sources(RtAudio PRIVATE
+-      "src/audio/external/rtaudio/include/asio.cpp"
+-      "src/audio/external/rtaudio/include/asiodrivers.cpp"
+-      "src/audio/external/rtaudio/include/asiolist.cpp"
+-      "src/audio/external/rtaudio/include/iasiothiscallresolver.cpp")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+-    target_compile_definitions(RtAudio PUBLIC "__MACOSX_CORE__")
+-    find_library(COREAUDIO_LIBRARY "CoreAudio")
+-    target_link_libraries(RtAudio PUBLIC "${COREAUDIO_LIBRARY}")
+-    find_library(COREFOUNDATION_LIBRARY "CoreFoundation")
+-    target_link_libraries(RtAudio PUBLIC "${COREFOUNDATION_LIBRARY}")
+   endif()
++
++  if(NOT RTAUDIO_FOUND)
++    message("Using bundled RtAudio.")
++    add_library(RtAudio STATIC "src/audio/external/rtaudio/RtAudio.cpp")
++    target_include_directories(RtAudio PUBLIC "src/audio/external/rtaudio")
++    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
++      target_compile_definitions(RtAudio PUBLIC "__LINUX_ALSA__")
++      target_link_libraries(RtAudio PUBLIC "asound")
++      if(JACK_FOUND)
++        target_compile_definitions(RtAudio PUBLIC "__UNIX_JACK__")
++        target_include_directories(RtAudio PUBLIC ${JACK_INCLUDE_DIRS})
++        link_directories(${JACK_LIBRARY_DIRS})
++        target_link_libraries(RtAudio PUBLIC ${JACK_LIBRARIES})
++      endif()
++      if(PULSEAUDIO_FOUND)
++        target_compile_definitions(RtAudio PUBLIC "__LINUX_PULSE__")
++        target_include_directories(RtAudio PUBLIC ${PULSEAUDIO_INCLUDE_DIRS})
++        link_directories(${PULSEAUDIO_LIBRARY_DIRS})
++        target_link_libraries(RtAudio PUBLIC ${PULSEAUDIO_LIBRARIES})
++      endif()
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_DS__")
++      target_link_libraries(RtAudio PUBLIC "dsound" "ole32")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_WASAPI__")
++      target_link_libraries(RtAudio PUBLIC "ksguid")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_ASIO__")
++      target_include_directories(RtAudio PRIVATE
++        "src/audio/external/rtaudio/include")
++      target_sources(RtAudio PRIVATE
++        "src/audio/external/rtaudio/include/asio.cpp"
++        "src/audio/external/rtaudio/include/asiodrivers.cpp"
++        "src/audio/external/rtaudio/include/asiolist.cpp"
++        "src/audio/external/rtaudio/include/iasiothiscallresolver.cpp")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
++      target_compile_definitions(RtAudio PUBLIC "__MACOSX_CORE__")
++      find_library(COREAUDIO_LIBRARY "CoreAudio")
++      target_link_libraries(RtAudio PUBLIC "${COREAUDIO_LIBRARY}")
++      find_library(COREFOUNDATION_LIBRARY "CoreFoundation")
++      target_link_libraries(RtAudio PUBLIC "${COREFOUNDATION_LIBRARY}")
++    endif()
++    target_link_libraries(OPN2BankEditor PRIVATE RtAudio)
++  endif()
++
+   target_sources(OPN2BankEditor PRIVATE "src/audio/ao_rtaudio.cpp")
+   target_compile_definitions(OPN2BankEditor PRIVATE "ENABLE_AUDIO_TESTING")
+-  target_link_libraries(OPN2BankEditor PRIVATE RtAudio)
+ endif()
+ 
+ add_executable(measurer_tool
+-- 
+2.29.3
+
diff --git a/nixpkgs/pkgs/tools/audio/opl3bankeditor/common.nix b/nixpkgs/pkgs/tools/audio/opl3bankeditor/common.nix
new file mode 100644
index 000000000000..982b8f8349f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/opl3bankeditor/common.nix
@@ -0,0 +1,68 @@
+{ pname, chip, version, sha256, extraPatches ? [] }:
+
+{ mkDerivation
+, stdenv
+, lib
+, fetchFromGitHub
+, dos2unix
+, cmake
+, pkg-config
+, qttools
+, qtbase
+, qwt6_1
+, rtaudio
+, rtmidi
+}:
+
+let
+  binname = "${chip} Bank Editor";
+  mainProgram = "${lib.strings.toLower chip}_bank_editor";
+in
+mkDerivation rec {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "Wohlstand";
+    repo = pname;
+    rev = "v${version}";
+    inherit sha256;
+  };
+
+  prePatch = ''
+    dos2unix CMakeLists.txt
+  '';
+
+  patches = extraPatches;
+
+  nativeBuildInputs = [
+    dos2unix
+    cmake
+    pkg-config
+    qttools
+  ];
+
+  buildInputs = [
+    qtbase
+    qwt6_1
+    rtaudio
+    rtmidi
+  ];
+
+  postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
+    mkdir $out/{bin,Applications}
+    mv "${binname}.app" $out/Applications/
+
+    install_name_tool -change {,${qwt6_1}/lib/}libqwt.6.dylib "$out/Applications/${binname}.app/Contents/MacOS/${binname}"
+
+    ln -s "$out/Applications/${binname}.app/Contents/MacOS/${binname}" $out/bin/${mainProgram}
+  '';
+
+  meta = with lib; {
+    inherit mainProgram;
+    description = "A small cross-platform editor of the ${chip} FM banks of different formats";
+    homepage = src.meta.homepage;
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ OPNA2608 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/opl3bankeditor/default.nix b/nixpkgs/pkgs/tools/audio/opl3bankeditor/default.nix
new file mode 100644
index 000000000000..85762bb69b96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/opl3bankeditor/default.nix
@@ -0,0 +1,9 @@
+import ./common.nix rec {
+  pname = "opl3bankeditor";
+  chip = "OPL3";
+  version = "1.5.1";
+  sha256 = "08krbxlxgmc7i2r2k6d6wgi0m6k8hh3j60xf21kz4kp023w613sa";
+  extraPatches = [
+    ./0001-opl3bankeditor-Look-for-system-installed-Rt-libs.patch
+  ];
+}
diff --git a/nixpkgs/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix b/nixpkgs/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix
new file mode 100644
index 000000000000..d9c4bbe1511d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix
@@ -0,0 +1,9 @@
+import ./common.nix rec {
+  pname = "opn2bankeditor";
+  chip = "OPN2";
+  version = "1.3";
+  sha256 = "0niam6a6y57msbl0xj23g6l7gisv4a670q0k1zqfm34804532a32";
+  extraPatches = [
+    ./0001-opn2bankeditor-Look-for-system-installed-Rt-libs.patch
+  ];
+}
diff --git a/nixpkgs/pkgs/tools/audio/pa-applet/default.nix b/nixpkgs/pkgs/tools/audio/pa-applet/default.nix
new file mode 100644
index 000000000000..0a82f37e04d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/pa-applet/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, libpulseaudio, pkg-config, gtk3, glibc, autoconf, automake, libnotify, libX11, xf86inputevdev }:
+
+stdenv.mkDerivation {
+  pname = "pa-applet";
+  version = "unstable-2012-04-11";
+
+  src = fetchFromGitHub {
+    owner = "fernandotcl";
+    repo = "pa-applet";
+    rev = "005f192df9ba6d2e6491f9aac650be42906b135a";
+    sha256 = "sha256-ihvZFXHgr5YeqMKmVY/GB86segUkQ9BYqJYfE3PTgog=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoconf automake ];
+  buildInputs = [
+    gtk3 libpulseaudio glibc libnotify libX11 xf86inputevdev
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  # work around a problem related to gtk3 updates
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
+
+  postInstall = "";
+
+  meta = with lib; {
+    description = "";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/pasystray/default.nix b/nixpkgs/pkgs/tools/audio/pasystray/default.nix
new file mode 100644
index 000000000000..20708e82729d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/pasystray/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchpatch, fetchFromGitHub, pkg-config, autoreconfHook, wrapGAppsHook
+, gnome, avahi, gtk3, libayatana-appindicator, libnotify, libpulseaudio
+, gsettings-desktop-schemas
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pasystray";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "christophgysin";
+    repo = "pasystray";
+    rev = version;
+    sha256 = "sha256-QaTQ8yUviJaFEQaQm2vYAUngqHliKe8TDYqfWt1Nx/0=";
+  };
+
+  patches = [
+    # Use ayatana-appindicator instead of appindicator
+    # https://github.com/christophgysin/pasystray/issues/98
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/p/pasystray/0.8.1-1/debian/patches/0001-Build-against-ayatana-appindicator.patch";
+      sha256 = "sha256-/HKPqVARfHr/3Vyls6a1n8ejxqW9Ztu4+8KK4jK8MkI=";
+    })
+    # Require X11 backend
+    # https://github.com/christophgysin/pasystray/issues/90#issuecomment-361881076
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/p/pasystray/0.8.1-1/debian/patches/0002-Require-X11-backend.patch";
+      sha256 = "sha256-6njC3vqBPWFS1xAsa1katQ4C0KJdVkHAP1MCPiZ6ELM=";
+    })
+   ];
+
+  nativeBuildInputs = [ pkg-config autoreconfHook wrapGAppsHook ];
+  buildInputs = [
+    gnome.adwaita-icon-theme
+    avahi gtk3 libayatana-appindicator libnotify libpulseaudio
+    gsettings-desktop-schemas
+  ];
+
+  meta = with lib; {
+    description = "PulseAudio system tray";
+    homepage = "https://github.com/christophgysin/pasystray";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ exlevan kamilchm ];
+    platforms = platforms.linux;
+    mainProgram = "pasystray";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/patray/default.nix b/nixpkgs/pkgs/tools/audio/patray/default.nix
new file mode 100644
index 000000000000..90c8719b48b3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/patray/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, python3
+, fetchPypi
+, qt5
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "patray";
+  version = "0.1.2";
+
+  src = fetchPypi {
+    inherit version pname;
+    sha256 = "sha256-O8CBUexL2V1qI7bB/Lns3yjUvFOpC6spd/6asXa5+pw=";
+  };
+
+  patchPhase = ''
+    sed -i '30i entry_points = { "console_scripts": [ "patray = patray.__main__:main" ] },' setup.py
+    sed -i 's/production.txt/production.in/' setup.py
+    sed -i '/pyside2/d' requirements/production.in
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pulsectl
+    loguru
+    cock
+    pyside2
+  ];
+
+  doCheck = false;
+
+  nativeBuildInputs = [ qt5.wrapQtAppsHook ];
+  postFixup = ''
+    wrapQtApp $out/bin/patray --prefix QT_PLUGIN_PATH : ${qt5.qtbase}/${qt5.qtbase.qtPluginPrefix}
+  '';
+
+  meta = with lib; {
+    description = "Yet another tray pulseaudio frontend";
+    homepage = "https://github.com/pohmelie/patray";
+    license = licenses.mit;
+    maintainers = with maintainers; [ domenkozar ];
+    mainProgram = "patray";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/picotts/default.nix b/nixpkgs/pkgs/tools/audio/picotts/default.nix
new file mode 100644
index 000000000000..0b470aca5f94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/picotts/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, popt }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "picotts";
+  version = "unstable-2018-10-19";
+
+  src = fetchFromGitHub {
+    repo = "picotts";
+    owner = "naggety";
+    rev = "2f86050dc5da9ab68fc61510b594d8e6975c4d2d";
+    sha256 = "1k2mdv9llkh77jr4qr68yf0zgjqk87np35fgfmnc3rpdp538sccl";
+  };
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ libtool popt ];
+  sourceRoot = "${finalAttrs.src.name}/pico";
+  preConfigure = "./autogen.sh";
+  meta = {
+    description = "Text to speech voice sinthesizer from SVox";
+    homepage = "https://github.com/naggety/picotts";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.canndrew ];
+    platforms = lib.platforms.linux;
+    mainProgram = "pico2wave";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/audio/piper/default.nix b/nixpkgs/pkgs/tools/audio/piper/default.nix
new file mode 100644
index 000000000000..1f565b747529
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/piper/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+
+# build time
+, cmake
+, pkg-config
+
+# runtime
+, fmt
+, onnxruntime
+, pcaudiolib
+, piper-phonemize
+, spdlog
+
+# tests
+, piper-train
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "piper";
+  version = "2023.11.14-2";
+
+  src = fetchFromGitHub {
+    owner = "rhasspy";
+    repo = "piper";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-3ynWyNcdf1ffU3VoDqrEMrm5Jo5Zc5YJcVqwLreRCsI=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  cmakeFlags = [
+    "-DFMT_DIR=${fmt}"
+    "-DSPDLOG_DIR=${spdlog.src}"
+    "-DPIPER_PHONEMIZE_DIR=${piper-phonemize}"
+  ];
+
+  buildInputs = [
+    onnxruntime
+    pcaudiolib
+    piper-phonemize
+    piper-phonemize.espeak-ng
+    spdlog
+  ];
+
+  env.NIX_CFLAGS_COMPILE = builtins.toString [
+    "-isystem ${lib.getDev piper-phonemize}/include/piper-phonemize"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install -m 0755 piper $out/bin
+
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    inherit piper-train;
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/rhasspy/piper/releases/tag/v${finalAttrs.version}";
+    description = "A fast, local neural text to speech system";
+    homepage = "https://github.com/rhasspy/piper";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+    mainProgram = "piper";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/audio/piper/train.nix b/nixpkgs/pkgs/tools/audio/piper/train.nix
new file mode 100644
index 000000000000..2cab1ba4ba04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/piper/train.nix
@@ -0,0 +1,54 @@
+{ piper-tts
+, python3
+}:
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+    };
+  };
+in
+
+python.pkgs.buildPythonPackage {
+  inherit (piper-tts) version src;
+
+  pname = "piper-train";
+  format = "setuptools";
+
+  sourceRoot = "${piper-tts.src.name}/src/python";
+
+  nativeBuildInputs = with python.pkgs; [
+    cython
+  ];
+
+  postBuild = ''
+    make -C piper_train/vits/monotonic_align
+  '';
+
+  postInstall = ''
+    export MONOTONIC_ALIGN=$out/${python.sitePackages}/piper_train/vits/monotonic_align/monotonic_align
+    mkdir -p $MONOTONIC_ALIGN
+    cp -v ./piper_train/vits/monotonic_align/piper_train/vits/monotonic_align/core.*.so $MONOTONIC_ALIGN/
+  '';
+
+  propagatedBuildInputs = with python.pkgs; [
+    espeak-phonemizer
+    librosa
+    numpy
+    onnxruntime
+    piper-phonemize
+    pytorch-lightning
+    torch
+  ];
+
+  pythonImportsCheck = [
+    "piper_train"
+  ];
+
+  doCheck = false; # no tests
+
+  meta = piper-tts.meta // {
+    # requires torch<2, pytorch-lightning~=1.7
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/playerctl/default.nix b/nixpkgs/pkgs/tools/audio/playerctl/default.nix
new file mode 100644
index 000000000000..8740c273eef3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/playerctl/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, buildPackages
+, docbook_xsl
+, fetchFromGitHub
+, glib
+, gobject-introspection
+, gtk-doc
+, meson
+, mesonEmulatorHook
+, ninja
+, pkg-config
+, withDocs ? stdenv.hostPlatform.emulatorAvailable buildPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "playerctl";
+  version = "2.4.1";
+
+  src = fetchFromGitHub {
+    owner = "acrisci";
+    repo = "playerctl";
+    rev = "v${version}";
+    sha256 = "sha256-OiGKUnsKX0ihDRceZoNkcZcEAnz17h2j2QUOSVcxQEY=";
+  };
+
+  nativeBuildInputs = [
+    docbook_xsl
+    gobject-introspection
+    gtk-doc
+    meson
+    ninja
+    pkg-config
+  ] ++ lib.optionals (withDocs && !stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
+    mesonEmulatorHook
+  ];
+  buildInputs = [ glib ];
+
+  mesonFlags = [
+    "-Dbash-completions=true"
+    (lib.mesonBool "gtk-doc" withDocs)
+  ];
+
+  meta = with lib; {
+    description = "Command-line utility and library for controlling media players that implement MPRIS";
+    homepage = "https://github.com/acrisci/playerctl";
+    license = licenses.lgpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ puffnfresh ];
+    broken = stdenv.hostPlatform.isDarwin;
+    mainProgram = "playerctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/pnmixer/default.nix b/nixpkgs/pkgs/tools/audio/pnmixer/default.nix
new file mode 100644
index 000000000000..a65cad09b47d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/pnmixer/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, gettext, alsa-lib, gtk3, glib, libnotify, libX11, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "pnmixer";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "nicklan";
+    repo = "pnmixer";
+    rev = "v${version}";
+    sha256 = "0416pa933ddf4b7ph9zxhk5jppkk7ppcq1aqph6xsrfnka4yb148";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config gettext ];
+
+  buildInputs = [ alsa-lib gtk3 glib libnotify libX11 pcre ];
+
+  meta = with lib; {
+    homepage = "https://github.com/nicklan/pnmixer";
+    description = "ALSA volume mixer for the system tray";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ campadrenalin romildo ];
+    mainProgram = "pnmixer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/pulsemixer/default.nix b/nixpkgs/pkgs/tools/audio/pulsemixer/default.nix
new file mode 100644
index 000000000000..e4204321bc4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/pulsemixer/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, python3, libpulseaudio }:
+
+stdenv.mkDerivation rec {
+  pname = "pulsemixer";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "GeorgeFilipkin";
+    repo = pname;
+    rev = version;
+    sha256 = "1jagx9zmz5pfsld8y2rj2kqg6ww9f6vqiawfy3vhqc49x3xx92p4";
+  };
+
+  inherit libpulseaudio;
+
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install pulsemixer $out/bin/
+  '';
+
+  postFixup = ''
+    substituteInPlace "$out/bin/pulsemixer" \
+      --replace "libpulse.so.0" "$libpulseaudio/lib/libpulse.so.0"
+  '';
+
+  meta = with lib; {
+    description = "Cli and curses mixer for pulseaudio";
+    homepage = "https://github.com/GeorgeFilipkin/pulsemixer";
+    license = licenses.mit;
+    maintainers = [ maintainers.woffs ];
+    platforms = platforms.all;
+    mainProgram = "pulsemixer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/pw-volume/default.nix b/nixpkgs/pkgs/tools/audio/pw-volume/default.nix
new file mode 100644
index 000000000000..13e39484b577
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/pw-volume/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pw-volume";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "smasher164";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-r/6AAZKZgPYUGic/Dag7OT5RtH+RKgEkJVWxsO5VGZ0=";
+  };
+
+  cargoSha256 = "sha256-srwbrMBUJz/Xi+Hk2GY9oo4rcTfKl/r146YWSSx6dew=";
+
+  meta = with lib; {
+    description = "Basic interface to PipeWire volume controls";
+    homepage = "https://github.com/smasher164/pw-volume";
+    changelog = "https://github.com/smasher164/pw-volume/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ astro figsoda ];
+    platforms = platforms.linux;
+    mainProgram = "pw-volume";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/qastools/default.nix b/nixpkgs/pkgs/tools/audio/qastools/default.nix
new file mode 100644
index 000000000000..f8b705a8fa15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/qastools/default.nix
@@ -0,0 +1,24 @@
+{ mkDerivation, lib, fetchFromGitLab, cmake, alsa-lib, udev, qtbase, qtsvg, qttools }:
+
+mkDerivation rec {
+  pname = "qastools";
+  version = "0.23.0";
+
+  src = fetchFromGitLab {
+    owner = "sebholt";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "19hn64hnvryfmrkdg6rqyzahdbqf1s5y3dcca389jj6sdx93b3ip";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ alsa-lib udev qtbase qtsvg qttools ];
+
+  meta = with lib; {
+    description = "Collection of desktop applications for ALSA configuration";
+    homepage = "https://gitlab.com/sebholt/qastools";
+    license = licenses.mit;
+    maintainers = with maintainers; [ orivej ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/shaq/default.nix b/nixpkgs/pkgs/tools/audio/shaq/default.nix
new file mode 100644
index 000000000000..a7072ece0ff5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/shaq/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, python3
+, fetchFromGitHub
+, ffmpeg
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "shaq";
+  version = "0.0.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "woodruffw";
+    repo = "shaq";
+    rev = "v${version}";
+    hash = "sha256-RF606Aeskqbx94H5ivd+RJ+Hk0iYsds/PUY8TZqirs4=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.flit-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pyaudio
+    pydub
+    rich
+    shazamio
+  ];
+
+  passthru.optional-dependencies = with python3.pkgs; {
+    dev = [
+      build
+      shaq
+    ];
+    lint = [
+      black
+      mypy
+      ruff
+    ];
+    test = [
+      pretend
+      pytest
+      pytest-cov
+    ];
+  };
+
+  pythonImportsCheck = [ "shaq" ];
+
+  makeWrapperArgs = [
+    "--prefix"
+    "PATH"
+    ":"
+    (lib.makeBinPath [ ffmpeg ])
+  ];
+
+  meta = with lib; {
+    description = "A CLI client for Shazam";
+    homepage = "https://github.com/woodruffw/shaq";
+    changelog = "https://github.com/woodruffw/shaq/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda mig4ng ];
+    mainProgram = "shaq";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/spotdl/default.nix b/nixpkgs/pkgs/tools/audio/spotdl/default.nix
new file mode 100644
index 000000000000..a825fd2e1e39
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/spotdl/default.nix
@@ -0,0 +1,99 @@
+{ lib
+, python3
+, fetchPypi
+, fetchFromGitHub
+, ffmpeg
+}:
+
+let
+  python = python3;
+in python.pkgs.buildPythonApplication rec {
+  pname = "spotdl";
+  version = "4.2.4";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "spotDL";
+    repo = "spotify-downloader";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-U0UA94t7WdCeU9Y86rcnT8BzXVx8ryhD3MTJxmNBYcc=";
+  };
+
+  nativeBuildInputs = with python.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = true;
+
+  propagatedBuildInputs = with python.pkgs; [
+    spotipy
+    ytmusicapi
+    pytube
+    yt-dlp
+    mutagen
+    rich
+    beautifulsoup4
+    requests
+    rapidfuzz
+    python-slugify
+    uvicorn
+    pydantic
+    fastapi
+    platformdirs
+    pykakasi
+    syncedlyrics
+    typing-extensions
+    soundcloud-v2
+    bandcamp-api
+    setuptools # for pkg_resources
+  ] ++ python-slugify.optional-dependencies.unidecode;
+
+  nativeCheckInputs = with python.pkgs; [
+    pytestCheckHook
+    pytest-mock
+    pytest-vcr
+    pyfakefs
+    pytest-subprocess
+  ];
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  disabledTestPaths = [
+    # require networking
+    "tests/test_init.py"
+    "tests/test_matching.py"
+    "tests/providers/lyrics"
+    "tests/types"
+    "tests/utils/test_github.py"
+    "tests/utils/test_m3u.py"
+    "tests/utils/test_metadata.py"
+    "tests/utils/test_search.py"
+  ];
+
+  disabledTests = [
+    # require networking
+    "test_convert"
+    "test_download_ffmpeg"
+    "test_download_song"
+    "test_preload_song"
+    "test_yt_get_results"
+    "test_yt_search"
+    "test_ytm_search"
+    "test_ytm_get_results"
+  ];
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ ffmpeg ])
+  ];
+
+  meta = with lib; {
+    description = "Download your Spotify playlists and songs along with album art and metadata";
+    homepage = "https://github.com/spotDL/spotify-downloader";
+    changelog = "https://github.com/spotDL/spotify-downloader/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/stt/default.nix b/nixpkgs/pkgs/tools/audio/stt/default.nix
new file mode 100644
index 000000000000..89ed5f983973
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/stt/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchurl, autoPatchelfHook, bzip2, xz }:
+
+stdenv.mkDerivation rec {
+  pname = "stt";
+  version = "1.4.0";
+
+  src = fetchurl {
+    url = "https://github.com/coqui-ai/STT/releases/download/v${version}/native_client.tflite.Linux.tar.xz";
+    hash = "sha256-RVYc64pLYumQoVUEFZdxfUUaBMozaqgD0h/yiMaWN90=";
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    bzip2
+    xz
+    stdenv.cc.cc.lib
+  ];
+
+  installPhase = ''
+    install -D stt $out/bin/stt
+    install -D coqui-stt.h $out/include/coqui-stt.h
+    install -D libkenlm.so $out/lib/libkenlm.so
+    install -D libsox.so.3 $out/lib/libsox.so.3
+    install -D libstt.so $out/lib/libstt.so
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/coqui-ai/STT";
+    description = "Deep learning toolkit for Speech-to-Text, battle-tested in research and production";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mpl20;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ rvolosatovs ];
+    mainProgram = "stt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/tidal-dl/default.nix b/nixpkgs/pkgs/tools/audio/tidal-dl/default.nix
new file mode 100644
index 000000000000..eb23a4da3ccd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/tidal-dl/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, aigpy
+}:
+
+buildPythonApplication rec {
+  pname = "tidal-dl";
+  version = "2022.10.31.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-b2AAsiI3n2/v6HC37fMI/d8UcxZxsWM+fnWvdajHrOg=";
+  };
+
+  propagatedBuildInputs = [ aigpy ];
+
+  meta = {
+    homepage = "https://github.com/yaronzz/Tidal-Media-Downloader";
+    description = "An application that lets you download videos and tracks from Tidal";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.misterio77 ];
+    platforms = lib.platforms.all;
+    mainProgram = "tidal-dl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/trx/add_bctoolbox_ldlib.patch b/nixpkgs/pkgs/tools/audio/trx/add_bctoolbox_ldlib.patch
new file mode 100644
index 000000000000..1854a43a2493
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/trx/add_bctoolbox_ldlib.patch
@@ -0,0 +1,15 @@
+diff --git a/Makefile b/Makefile
+index ffcd883..c4b4ff7 100644
+--- a/Makefile
++++ b/Makefile
+@@ -12,8 +12,9 @@ CFLAGS += -MMD -Wall
+ LDLIBS_ASOUND ?= -lasound
+ LDLIBS_OPUS ?= -lopus
+ LDLIBS_ORTP ?= -lortp
++LDLIBS_BCTOOLBOX ?= -lbctoolbox
+ 
+-LDLIBS += $(LDLIBS_ASOUND) $(LDLIBS_OPUS) $(LDLIBS_ORTP)
++LDLIBS += $(LDLIBS_ASOUND) $(LDLIBS_OPUS) $(LDLIBS_ORTP) $(LDLIBS_BCTOOLBOX)
+ 
+ .PHONY:		all install dist clean
+ 
diff --git a/nixpkgs/pkgs/tools/audio/trx/default.nix b/nixpkgs/pkgs/tools/audio/trx/default.nix
new file mode 100644
index 000000000000..b3ffee6419bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/trx/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, alsa-lib, libopus, ortp, bctoolbox }:
+
+stdenv.mkDerivation rec {
+  pname = "trx";
+  version = "0.5";
+
+  src = fetchurl {
+    url = "https://www.pogo.org.uk/~mark/trx/releases/${pname}-${version}.tar.gz";
+    sha256 = "1jjgca92nifjhcr3n0fmpfr6f5gxlqyal2wmgdlgd7hx834r1if7";
+  };
+
+  # Makefile is currently missing -lbctoolbox so the build fails when linking
+  # the libraries. This patch adds that flag.
+  patches = [
+    ./add_bctoolbox_ldlib.patch
+  ];
+
+  buildInputs = [ alsa-lib libopus ortp bctoolbox ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A simple toolset for broadcasting live audio using RTP/UDP and Opus";
+    homepage = "http://www.pogo.org.uk/~mark/trx/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.hansjoergschurr ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/tts/default.nix b/nixpkgs/pkgs/tools/audio/tts/default.nix
new file mode 100644
index 000000000000..d761e4605190
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/tts/default.nix
@@ -0,0 +1,200 @@
+{ lib
+, python3
+, fetchFromGitHub
+, espeak-ng
+, tts
+}:
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      torch = super.torch-bin;
+      torchvision = super.torchvision-bin;
+      tensorflow = super.tensorflow-bin;
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "tts";
+  version = "0.20.2";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "coqui-ai";
+    repo = "TTS";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-1nlSf15IEX1qKfDtR6+jQqskjxIuzaIWatkj9Z1fh8Y=";
+  };
+
+  postPatch = let
+    relaxedConstraints = [
+      "bnunicodenormalizer"
+      "cython"
+      "gruut"
+      "inflect"
+      "librosa"
+      "mecab-python3"
+      "numba"
+      "numpy"
+      "unidic-lite"
+      "trainer"
+    ];
+  in ''
+    sed -r -i \
+      ${lib.concatStringsSep "\n" (map (package:
+        ''-e 's/${package}\s*[<>=]+.+/${package}/g' \''
+      ) relaxedConstraints)}
+    requirements.txt
+
+    sed -r -i \
+      ${lib.concatStringsSep "\n" (map (package:
+        ''-e 's/${package}\s*[<>=]+[^"]+/${package}/g' \''
+      ) relaxedConstraints)}
+    pyproject.toml
+    # only used for notebooks and visualization
+    sed -r -i -e '/umap-learn/d' requirements.txt
+  '';
+
+  nativeBuildInputs = with python.pkgs; [
+    cython
+    numpy
+    packaging
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    anyascii
+    bangla
+    bnnumerizer
+    bnunicodenormalizer
+    coqpit
+    einops
+    encodec
+    flask
+    fsspec
+    g2pkk
+    gdown
+    gruut
+    inflect
+    jamo
+    jieba
+    k-diffusion
+    librosa
+    matplotlib
+    mecab-python3
+    nltk
+    numba
+    packaging
+    pandas
+    pypinyin
+    pysbd
+    scipy
+    soundfile
+    tensorflow
+    torch-bin
+    torchaudio-bin
+    tqdm
+    trainer
+    transformers
+    unidic-lite
+    webrtcvad
+  ];
+
+  postInstall = ''
+    cp -r TTS/server/templates/ $out/${python.sitePackages}/TTS/server
+    # cython modules are not installed for some reasons
+    (
+      cd TTS/tts/utils/monotonic_align
+      ${python.pythonOnBuildForHost.interpreter} setup.py install --prefix=$out
+    )
+  '';
+
+  # tests get stuck when run in nixpkgs-review, tested in passthru
+  doCheck = false;
+  passthru.tests.pytest = tts.overridePythonAttrs (_: { doCheck = true; });
+
+  nativeCheckInputs = with python.pkgs; [
+    espeak-ng
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    # use the installed TTS in $PYTHONPATH instead of the one from source to also have cython modules.
+    mv TTS{,.old}
+    export PATH=$out/bin:$PATH
+
+    # numba tries to write to HOME directory
+    export HOME=$TMPDIR
+
+    for file in $(grep -rl 'python TTS/bin' tests); do
+      substituteInPlace "$file" \
+        --replace "python TTS/bin" "${python.interpreter} $out/${python.sitePackages}/TTS/bin"
+    done
+  '';
+
+  disabledTests = [
+    # Requires network acccess to download models
+    "test_korean_text_to_phonemes"
+    "test_models_offset_0_step_3"
+    "test_models_offset_1_step_3"
+    "test_models_offset_2_step_3"
+    "test_run_all_models"
+    "test_synthesize"
+    "test_voice_cloning"
+    "test_voice_conversion"
+    "test_multi_speaker_multi_lingual_model"
+    "test_single_speaker_model"
+    # Mismatch between phonemes
+    "test_text_to_ids_phonemes_with_eos_bos_and_blank"
+    # Takes too long
+    "test_parametrized_wavernn_dataset"
+  ];
+
+  disabledTestPaths = [
+    # phonemes mismatch between espeak-ng and gruuts phonemizer
+    "tests/text_tests/test_phonemizer.py"
+    # no training, it takes too long
+    "tests/aux_tests/test_speaker_encoder_train.py"
+    "tests/tts_tests/test_align_tts_train.py"
+    "tests/tts_tests/test_fast_pitch_speaker_emb_train.py"
+    "tests/tts_tests/test_fast_pitch_train.py"
+    "tests/tts_tests/test_fastspeech_2_speaker_emb_train.py"
+    "tests/tts_tests/test_fastspeech_2_train.py"
+    "tests/tts_tests/test_glow_tts_d-vectors_train.py"
+    "tests/tts_tests/test_glow_tts_speaker_emb_train.py"
+    "tests/tts_tests/test_glow_tts_train.py"
+    "tests/tts_tests/test_neuralhmm_tts_train.py"
+    "tests/tts_tests/test_overflow_train.py"
+    "tests/tts_tests/test_speedy_speech_train.py"
+    "tests/tts_tests/test_tacotron2_d-vectors_train.py"
+    "tests/tts_tests/test_tacotron2_speaker_emb_train.py"
+    "tests/tts_tests/test_tacotron2_train.py"
+    "tests/tts_tests/test_tacotron_train.py"
+    "tests/tts_tests/test_vits_d-vectors_train.py"
+    "tests/tts_tests/test_vits_multilingual_speaker_emb_train.py"
+    "tests/tts_tests/test_vits_multilingual_train-d_vectors.py"
+    "tests/tts_tests/test_vits_speaker_emb_train.py"
+    "tests/tts_tests/test_vits_train.py"
+    "tests/vocoder_tests/test_wavegrad_train.py"
+    "tests/vocoder_tests/test_parallel_wavegan_train.py"
+    "tests/vocoder_tests/test_fullband_melgan_train.py"
+    "tests/vocoder_tests/test_hifigan_train.py"
+    "tests/vocoder_tests/test_multiband_melgan_train.py"
+    "tests/vocoder_tests/test_melgan_train.py"
+    "tests/vocoder_tests/test_wavernn_train.py"
+    # only a feed forward test, but still takes too long
+    "tests/tts_tests/test_overflow.py"
+  ];
+
+  passthru = {
+    inherit python;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/coqui-ai/TTS";
+    changelog = "https://github.com/coqui-ai/TTS/releases/tag/v${version}";
+    description = "Deep learning toolkit for Text-to-Speech, battle-tested in research and production";
+    license = licenses.mpl20;
+    maintainers = teams.tts.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/unflac/default.nix b/nixpkgs/pkgs/tools/audio/unflac/default.nix
new file mode 100644
index 000000000000..b0d1d62c1807
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/unflac/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromSourcehut
+, ffmpeg
+, makeWrapper
+}:
+
+buildGoModule rec {
+  pname = "unflac";
+  version = "1.2";
+
+  src = fetchFromSourcehut {
+    owner = "~ft";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-BgXuPAXrw28axfTEh10Yh8dQc27M1/lSmCo2eAeNnjE=";
+  };
+
+  vendorHash = "sha256-IQHxEYv6l8ORoX+a3Szox9tS2fyBk0tpK+Q1AsWohX0=";
+
+  nativeBuildInputs = [ makeWrapper ];
+  postFixup = ''
+    wrapProgram $out/bin/unflac --prefix PATH : "${lib.makeBinPath [ffmpeg]}"
+  '';
+
+  meta = with lib; {
+    description =
+      "A command line tool for fast frame accurate audio image + cue sheet splitting";
+    homepage = "https://sr.ht/~ft/unflac/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ felipeqq2 ];
+    mainProgram = "unflac";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/vgmtools/default.nix b/nixpkgs/pkgs/tools/audio/vgmtools/default.nix
new file mode 100644
index 000000000000..ae6184a850f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/vgmtools/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, unstableGitUpdater
+, cmake
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vgmtools";
+  version = "unstable-2023-08-27";
+
+  src = fetchFromGitHub {
+    owner = "vgmrips";
+    repo = "vgmtools";
+    rev = "7b7f2041e346f0d4fff8c834a763edc4f4d88896";
+    hash = "sha256-L52h94uohLMnj29lZj+i9hM8n9hIYo20nRS8RCW8npY=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    zlib
+  ];
+
+  # Some targets are not enabled by default
+  makeFlags = [
+    "all" "optdac" "optvgm32"
+  ];
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/vgmrips/vgmtools.git";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/vgmrips/vgmtools";
+    description = "A collection of tools for the VGM file format";
+    license = licenses.gpl2; # Not clarified whether Only or Plus
+    maintainers = with maintainers; [ OPNA2608 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/video2midi/default.nix b/nixpkgs/pkgs/tools/audio/video2midi/default.nix
new file mode 100644
index 000000000000..ca7e2ec45abe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/video2midi/default.nix
@@ -0,0 +1,36 @@
+{ lib, fetchFromGitHub, pythonPackages, opencv4 }:
+
+let
+  opencv4_ = pythonPackages.toPythonModule (opencv4.override {
+    inherit pythonPackages;
+    enablePython = true;
+    enableFfmpeg = true;
+  });
+in pythonPackages.buildPythonApplication rec {
+  pname = "video2midi";
+  version = "0.4.7.2";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "svsdval";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-lM3SBgGUW5MTUtsywy57fBiHEg58a8Fcpqb+EcRaYQ4=";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [ opencv4_ midiutil pygame pyopengl ];
+
+  installPhase = ''
+    install -Dm755 v2m.py $out/bin/v2m.py
+  '';
+
+  meta = with lib; {
+    description = "Youtube synthesia video to midi conversion tool";
+    homepage = src.meta.homepage;
+    license = licenses.gpl3Only;
+    maintainers = [ ];
+    platforms = platforms.linux;
+    mainProgram = "v2m.py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/volctl/default.nix b/nixpkgs/pkgs/tools/audio/volctl/default.nix
new file mode 100644
index 000000000000..0d33c586ed37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/volctl/default.nix
@@ -0,0 +1,58 @@
+{ lib, python3Packages, fetchFromGitHub, wrapGAppsHook, gobject-introspection, libpulseaudio, glib, gtk3, pango, xorg }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "volctl";
+  version = "0.9.4";
+
+  src = fetchFromGitHub {
+    owner = "buzz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jzS97KV17wKeBI6deKE4rEj5lvqC38fq1JGundHn2So=";
+  };
+
+  postPatch = ''
+    substituteInPlace volctl/xwrappers.py \
+      --replace 'libXfixes.so' "${xorg.libXfixes}/lib/libXfixes.so" \
+      --replace 'libXfixes.so.3' "${xorg.libXfixes}/lib/libXfixes.so.3"
+  '';
+
+  preBuild = ''
+    export LD_LIBRARY_PATH=${libpulseaudio}/lib
+  '';
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = [ pango gtk3 ] ++ (with python3Packages; [
+    pulsectl
+    click
+    pycairo
+    pygobject3
+    pyyaml
+  ]);
+
+  # with strictDeps importing "gi.repository.Gtk" fails with "gi.RepositoryError: Typelib file for namespace 'Pango', version '1.0' not found"
+  strictDeps = false;
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "volctl" ];
+
+  preFixup = ''
+    glib-compile-schemas ${glib.makeSchemaPath "$out" "${pname}-${version}"}
+    gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${libpulseaudio}/lib")
+  '';
+
+  meta = with lib; {
+    description = "PulseAudio enabled volume control featuring per-app sliders";
+    homepage = "https://buzz.github.io/volctl/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+    mainProgram = "volctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/volumeicon/default.nix b/nixpkgs/pkgs/tools/audio/volumeicon/default.nix
new file mode 100644
index 000000000000..cabd145cc6e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/volumeicon/default.nix
@@ -0,0 +1,37 @@
+{ fetchFromGitHub, lib, stdenv
+, autoreconfHook, intltool, pkg-config
+, gtk3, alsa-lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "volumeicon";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "Maato";
+    repo = "volumeicon";
+    rev = version;
+    hash = "sha256-zYKC7rOoLf08rV4B43TrGNBcXfSBFxWZCe9bQD9JzaA";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    intltool
+    pkg-config
+  ];
+
+  buildInputs = [
+    gtk3
+    alsa-lib
+  ];
+
+  meta = with lib; {
+    description = "A lightweight volume control that sits in your systray";
+    homepage = "http://nullwise.com/volumeicon.html";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bobvanderlinden ];
+    license = licenses.gpl3;
+    mainProgram = "volumeicon";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/audio/whisper-ctranslate2/default.nix b/nixpkgs/pkgs/tools/audio/whisper-ctranslate2/default.nix
new file mode 100644
index 000000000000..a380eda1fe6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/whisper-ctranslate2/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, python3
+, fetchFromGitHub
+, nix-update-script
+}:
+let
+  pname = "whisper-ctranslate2";
+  version = "0.3.9";
+in
+python3.pkgs.buildPythonApplication {
+  inherit pname version;
+  format = "setuptools";
+
+  disabled = python3.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "Softcatala";
+    repo = "whisper-ctranslate2";
+    rev = version;
+    hash = "sha256-dm8LPcAVxEvhFDEkZcFXFZLfEZTtKzTqBqWKfXbXn5Q=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    numpy
+    faster-whisper
+    ctranslate2
+    tqdm
+    sounddevice
+  ];
+
+  passthru.updateScript = nix-update-script { };
+
+  nativeCheckInputs = with python3.pkgs; [
+    nose2
+  ];
+
+  checkPhase = ''
+    # Note: we are not running the `e2e-tests` because they require downloading models from the internet.
+    ${python3.interpreter} -m nose2 -s tests
+  '';
+
+  meta = with lib; {
+    description = "Whisper command line client compatible with original OpenAI client based on CTranslate2";
+    homepage = "https://github.com/Softcatala/whisper-ctranslate2";
+    changelog = "https://github.com/Softcatala/whisper-ctranslate2/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ happysalada ];
+    mainProgram = "whisper-ctranslate2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/wyoming/faster-whisper.nix b/nixpkgs/pkgs/tools/audio/wyoming/faster-whisper.nix
new file mode 100644
index 000000000000..cd1a9def0189
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/wyoming/faster-whisper.nix
@@ -0,0 +1,50 @@
+{ lib
+, python3
+, fetchFromGitHub
+, fetchpatch
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "wyoming-faster-whisper";
+  version = "1.1.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "rhasspy";
+    repo = "wyoming-faster-whisper";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-RD6J/Q7kvd+sgTpR6ERyV+D8gpm0fF38L3U/Jp7gOgk=";
+  };
+
+  patches = [
+    (fetchpatch {
+      # fix setup.py
+      url = "https://github.com/rhasspy/wyoming-faster-whisper/commit/cdd1536997a091dcf9054da9ff424a2603067755.patch";
+      hash = "sha256-LGYo21FhKGXcAN9DjXzwIRqkOzTz3suXiQdgGrJSDBw=";
+    })
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    ctranslate2
+    tokenizers
+    wyoming
+  ];
+
+  pythonImportsCheck = [
+    "wyoming_faster_whisper"
+  ];
+
+  # no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Wyoming Server for Faster Whisper";
+    homepage = "https://github.com/rhasspy/wyoming-faster-whisper";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/wyoming/openwakeword.nix b/nixpkgs/pkgs/tools/audio/wyoming/openwakeword.nix
new file mode 100644
index 000000000000..4c321a204b49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/wyoming/openwakeword.nix
@@ -0,0 +1,44 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "wyoming-openwakeword";
+  version = "1.9.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "rhasspy";
+    repo = "wyoming-openwakeword";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-NceUFsIKZO6DOXae3QJ7JJGc7QdDHkMh20eLvl12p4U=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools
+    pythonRelaxDepsHook
+  ];
+
+  pythonRemoveDeps = [
+    "tflite-runtime-nightly"
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    tensorflow
+    wyoming
+  ];
+
+  pythonImportsCheck = [
+    "wyoming_openwakeword"
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/rhasspy/wyoming-openwakeword/blob/v${version}/CHANGELOG.md";
+    description = "An open source voice assistant toolkit for many human languages";
+    homepage = "https://github.com/rhasspy/wyoming-openwakeword";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+    mainProgram = "wyoming-openwakeword";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/wyoming/piper.nix b/nixpkgs/pkgs/tools/audio/wyoming/piper.nix
new file mode 100644
index 000000000000..dc69c907ee2a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/wyoming/piper.nix
@@ -0,0 +1,45 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, fetchpatch
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "wyoming-piper";
+  version = "1.5.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "rhasspy";
+    repo = "wyoming-piper";
+    rev = "v${version}";
+    hash = "sha256-aI1CWtSpSPX1aK4UR/lsCQZQwNs7qOLKfatlSomJx1Q=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "wyoming"
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    wyoming
+  ];
+
+  pythonImportsCheck = [
+    "wyoming_piper"
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    changelog = "https://github.com/rhasspy/wyoming-openwakeword/v${version}/master/CHANGELOG.md";
+    description = "Wyoming Server for Piper";
+    homepage = "https://github.com/rhasspy/wyoming-openwakeword";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/yabridge/default.nix b/nixpkgs/pkgs/tools/audio/yabridge/default.nix
new file mode 100644
index 000000000000..57534b93a6ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/yabridge/default.nix
@@ -0,0 +1,167 @@
+{ lib
+, multiStdenv
+, fetchFromGitHub
+, substituteAll
+, pkgsi686Linux
+, dbus
+, meson
+, ninja
+, pkg-config
+, wine
+, libxcb
+, nix-update-script
+}:
+
+let
+  # Derived from subprojects/asio.wrap
+  asio = fetchFromGitHub {
+    owner = "chriskohlhoff";
+    repo = "asio";
+    rev = "refs/tags/asio-1-28-2";
+    hash = "sha256-8Sw0LuAqZFw+dxlsTstlwz5oaz3+ZnKBuvSdLW6/DKQ=";
+  };
+
+  # Derived from subprojects/bitsery.wrap
+  bitsery = fetchFromGitHub {
+    owner = "fraillt";
+    repo = "bitsery";
+    rev = "refs/tags/v5.2.3";
+    hash = "sha256-rmfcIYCrANycFuLtibQ5wOPwpMVhpTMpdGsUfpR3YsM=";
+  };
+
+  # Derived from subprojects/clap.wrap
+  clap = fetchFromGitHub {
+    owner = "free-audio";
+    repo = "clap";
+    rev = "refs/tags/1.1.9";
+    hash = "sha256-z2P0U2NkDK1/5oDV35jn/pTXCcspuM1y2RgZyYVVO3w=";
+  };
+
+  # Derived from subprojects/function2.wrap
+  function2 = fetchFromGitHub {
+    owner = "Naios";
+    repo = "function2";
+    rev = "refs/tags/4.2.3";
+    hash = "sha256-+fzntJn1fRifOgJhh5yiv+sWR9pyaeeEi2c1+lqX3X8=";
+  };
+
+  # Derived from subprojects/ghc_filesystem.wrap
+  ghc_filesystem = fetchFromGitHub {
+    owner = "gulrak";
+    repo = "filesystem";
+    rev = "refs/tags/v1.5.14";
+    hash = "sha256-XZ0IxyNIAs2tegktOGQevkLPbWHam/AOFT+M6wAWPFg=";
+  };
+
+  # Derived from subprojects/tomlplusplus.wrap
+  tomlplusplus = fetchFromGitHub {
+    owner = "marzer";
+    repo = "tomlplusplus";
+    rev = "refs/tags/v3.4.0";
+    hash = "sha256-h5tbO0Rv2tZezY58yUbyRVpsfRjY3i+5TPkkxr6La8M=";
+  };
+
+  # Derived from vst3.wrap
+  vst3 = fetchFromGitHub {
+    owner = "robbert-vdh";
+    repo = "vst3sdk";
+    rev = "refs/tags/v3.7.7_build_19-patched";
+    fetchSubmodules = true;
+    hash = "sha256-LsPHPoAL21XOKmF1Wl/tvLJGzjaCLjaDAcUtDvXdXSU=";
+  };
+in
+multiStdenv.mkDerivation (finalAttrs: {
+  pname = "yabridge";
+  version = "5.1.0";
+
+  # NOTE: Also update yabridgectl's cargoHash when this is updated
+  src = fetchFromGitHub {
+    owner = "robbert-vdh";
+    repo = "yabridge";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-vnSdGedpiit8nym26i1QFiNnATk0Bymm7e5Ha2H41/M=";
+  };
+
+  # Unpack subproject sources
+  postUnpack = ''(
+    cd "$sourceRoot/subprojects"
+    cp -R --no-preserve=mode,ownership ${asio} asio
+    cp -R --no-preserve=mode,ownership ${bitsery} bitsery
+    cp -R --no-preserve=mode,ownership ${clap} clap
+    cp -R --no-preserve=mode,ownership ${function2} function2
+    cp -R --no-preserve=mode,ownership ${ghc_filesystem} ghc_filesystem
+    cp -R --no-preserve=mode,ownership ${tomlplusplus} tomlplusplus
+    cp -R --no-preserve=mode,ownership ${vst3} vst3
+  )'';
+
+  patches = [
+    # Hard code bitbridge & runtime dependencies
+    (substituteAll {
+      src = ./hardcode-dependencies.patch;
+      libxcb32 = pkgsi686Linux.xorg.libxcb;
+      inherit wine;
+    })
+
+    # Patch the chainloader to search for libyabridge through NIX_PROFILES
+    ./libyabridge-from-nix-profiles.patch
+  ];
+
+  postPatch = ''
+    patchShebangs .
+    (
+      cd subprojects
+      cp packagefiles/asio/* asio
+      cp packagefiles/bitsery/* bitsery
+      cp packagefiles/clap/* clap
+      cp packagefiles/function2/* function2
+      cp packagefiles/ghc_filesystem/* ghc_filesystem
+    )
+  '';
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wine
+  ];
+
+  buildInputs = [
+    libxcb
+    dbus
+  ];
+
+  mesonFlags = [
+    "--cross-file" "cross-wine.conf"
+    "-Dbitbridge=true"
+
+    # Requires CMake and is unnecessary
+    "-Dtomlplusplus:generate_cmake_config=false"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p "$out/bin" "$out/lib"
+    cp yabridge-host{,-32}.exe{,.so} "$out/bin"
+    cp libyabridge{,-chainloader}-{vst2,vst3,clap}.so "$out/lib"
+    runHook postInstall
+  '';
+
+  # Hard code wine path in wrapper scripts generated by winegcc
+  postFixup = ''
+    for exe in "$out"/bin/*.exe; do
+      substituteInPlace "$exe" \
+        --replace 'WINELOADER="wine"' 'WINELOADER="${wine}/bin/wine"'
+    done
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A modern and transparent way to use Windows VST2 and VST3 plugins on Linux";
+    homepage = "https://github.com/robbert-vdh/yabridge";
+    changelog = "https://github.com/robbert-vdh/yabridge/blob/${finalAttrs.version}/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = [ "x86_64-linux" ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/audio/yabridge/hardcode-dependencies.patch b/nixpkgs/pkgs/tools/audio/yabridge/hardcode-dependencies.patch
new file mode 100644
index 000000000000..bd9e08bc6cf3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/yabridge/hardcode-dependencies.patch
@@ -0,0 +1,26 @@
+diff --git a/meson.build b/meson.build
+index c602c5ad..a52e20a1 100644
+--- a/meson.build
++++ b/meson.build
+@@ -226,7 +226,7 @@ if is_64bit_system
+   xcb_64bit_dep = dependency('xcb')
+ endif
+ if with_32bit_libraries or with_bitbridge
+-  xcb_32bit_dep = winegcc.find_library('xcb')
++  xcb_32bit_dep = winegcc.find_library('xcb', dirs: ['@libxcb32@/lib'])
+ endif
+ 
+ # These are all headers-only libraries, and thus won't require separate 32-bit
+diff --git a/src/plugin/utils.cpp b/src/plugin/utils.cpp
+index 82db99a5..491f005d 100644
+--- a/src/plugin/utils.cpp
++++ b/src/plugin/utils.cpp
+@@ -103,7 +103,7 @@ std::string PluginInfo::wine_version() const {
+     // The '*.exe' scripts generated by winegcc allow you to override the binary
+     // used to run Wine, so will will handle this in the same way for our Wine
+     // version detection. We'll be using `execvpe`
+-    std::string wine_path = "wine";
++    std::string wine_path = "@wine@/bin/wine";
+     // NOLINTNEXTLINE(concurrency-mt-unsafe)
+     if (const char* wineloader_path = getenv("WINELOADER");
+         wineloader_path && access(wineloader_path, X_OK) == 0) {
diff --git a/nixpkgs/pkgs/tools/audio/yabridge/libyabridge-from-nix-profiles.patch b/nixpkgs/pkgs/tools/audio/yabridge/libyabridge-from-nix-profiles.patch
new file mode 100644
index 000000000000..54125551e315
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/yabridge/libyabridge-from-nix-profiles.patch
@@ -0,0 +1,71 @@
+diff --git a/src/chainloader/utils.cpp b/src/chainloader/utils.cpp
+index c43e5693..b8352adf 100644
+--- a/src/chainloader/utils.cpp
++++ b/src/chainloader/utils.cpp
+@@ -29,8 +29,10 @@
+ namespace fs = ghc::filesystem;
+ 
+ void* find_plugin_library(const std::string& name) {
++    Logger logger = Logger::create_exception_logger();
++
+     // Just using a goto for this would probably be cleaner, but yeah...
+-    const auto impl = [&name]() -> void* {
++    const auto impl = [&name, &logger]() -> void* {
+         // If `name` exists right next to the Wine plugin host binary, then
+         // we'll try loading that. Otherwise we'll fall back to regular
+         // `dlopen()` for distro packaged versions of yabridge
+@@ -52,27 +54,28 @@ void* find_plugin_library(const std::string& name) {
+             }
+         }
+ 
+-        if (void* handle = dlopen(name.c_str(), RTLD_LAZY | RTLD_LOCAL)) {
+-            return handle;
++        auto nix_profiles = getenv("NIX_PROFILES");
++        if (!nix_profiles || nix_profiles[0] == '\0') {
++            logger.log("");
++            logger.log("ERROR: 'NIX_PROFILES' environment variable is not set");
++            logger.log("");
++            return nullptr;
+         }
+ 
+-        // One last Hail Mary, in case ldconfig was not set up correctly. This
+-        // might be relevant for some of the `/usr/local/*` locations (although
+-        // you really, really shouldn't install yabridge there, please, thank
+-        // you). Yabridgectl searches through these same directories.
+-        for (const auto& lib_dir : {
+-                 "/usr/lib",
+-                 "/usr/lib/x86_64-linux-gnu",
+-                 "/usr/lib64",
+-                 "/usr/local/lib",
+-                 "/usr/local/lib/x86_64-linux-gnu",
+-                 "/usr/local/lib64",
+-             }) {
+-            const fs::path candidate = fs::path(lib_dir) / name;
+-            if (void* handle =
+-                    dlopen(candidate.c_str(), RTLD_LAZY | RTLD_LOCAL)) {
++        // NIX_PROFILES is iterated in reverse from the most specific (the
++        // user profile) to the least specific (the system profile).
++        const std::string_view nix_profiles_view = nix_profiles;
++        auto segment_end = nix_profiles_view.size();
++        while (segment_end != std::string::npos) {
++            const auto next_segment_end = nix_profiles_view.rfind(' ', segment_end - 1);
++            const auto segment_begin = next_segment_end + 1;
++            const auto profile = nix_profiles_view.substr(segment_begin, segment_end - segment_begin);
++            const auto candidate = fs::path(profile) / "lib" / name;
++            if (auto handle = dlopen(candidate.c_str(), RTLD_LAZY | RTLD_LOCAL)) {
+                 return handle;
+             }
++
++            segment_end = next_segment_end;
+         }
+ 
+         return nullptr;
+@@ -82,8 +85,6 @@ void* find_plugin_library(const std::string& name) {
+     if (!handle) {
+         const fs::path this_plugin_path = get_this_file_location();
+ 
+-        Logger logger = Logger::create_exception_logger();
+-
+         logger.log("");
+         logger.log("Could not find '" + name + "'");
+         logger.log("");
diff --git a/nixpkgs/pkgs/tools/audio/yabridgectl/Cargo.lock b/nixpkgs/pkgs/tools/audio/yabridgectl/Cargo.lock
new file mode 100644
index 000000000000..451b0ae0141c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/yabridgectl/Cargo.lock
@@ -0,0 +1,936 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c677ab05e09154296dd37acecd46420c17b9713e8366facafa8fc0885167cf4c"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "cc"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c27cdf28c0f604ba3f512b0c9a409f8de8513e4816705deb0498b627e7c3a3fd"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08a9f1ab5e9f01a9b81f202e8562eb9a10de70abf9eaeac1be465c28b75aa4aa"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "once_cell",
+ "strsim",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colored"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6"
+dependencies = [
+ "is-terminal",
+ "lazy_static",
+ "windows-sys",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
+[[package]]
+name = "errno"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "fd-lock"
+version = "3.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5"
+dependencies = [
+ "cfg-if",
+ "rustix 0.38.8",
+ "windows-sys",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "goblin"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d6b4de4a8eb6c46a8c77e1d3be942cb9a8bf073c22374578e5ba4b08ed0ff68"
+dependencies = [
+ "log",
+ "plain",
+ "scroll",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix 0.38.8",
+ "windows-sys",
+]
+
+[[package]]
+name = "is_executable"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa9acdc6d67b75e626ad644734e8bc6df893d9cd2a834129065d3dd6158ea9c8"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
+dependencies = [
+ "bitflags 1.3.2",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "plain"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "promptly"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9acbc6c5a5b029fe58342f58445acb00ccfe24624e538894bc2f04ce112980ba"
+dependencies = [
+ "rustyline",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radix_trie"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
+dependencies = [
+ "endian-type",
+ "nibble_vec",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "reflink"
+version = "0.1.3"
+source = "git+https://github.com/nicokoch/reflink?rev=e8d93b465f5d9ad340cd052b64bbc77b8ee107e2#e8d93b465f5d9ad340cd052b64bbc77b8ee107e2"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.5",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustyline"
+version = "9.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db7826789c0e25614b03e5a54a0717a86f9ff6e6e5247f92b369472869320039"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "clipboard-win",
+ "dirs-next",
+ "fd-lock",
+ "libc",
+ "log",
+ "memchr",
+ "nix",
+ "radix_trie",
+ "scopeguard",
+ "smallvec",
+ "unicode-segmentation",
+ "unicode-width",
+ "utf8parse",
+ "winapi",
+]
+
+[[package]]
+name = "ryu"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "scroll"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da"
+dependencies = [
+ "scroll_derive",
+]
+
+[[package]]
+name = "scroll_derive"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.183"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c"
+
+[[package]]
+name = "serde_derive"
+version = "1.0.183"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_jsonrc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b591e90bcce7185aa4f8c775c504456586ae0f7df49a4087a1ee4179d402b8a8"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "smawk"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "2.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+dependencies = [
+ "rustix 0.37.23",
+ "windows-sys",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+dependencies = [
+ "smawk",
+ "terminal_size",
+ "unicode-linebreak",
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "xdg"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
+
+[[package]]
+name = "yabridgectl"
+version = "5.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "goblin",
+ "is_executable",
+ "libloading",
+ "promptly",
+ "rayon",
+ "reflink",
+ "serde",
+ "serde_derive",
+ "serde_jsonrc",
+ "textwrap",
+ "toml",
+ "walkdir",
+ "which",
+ "xdg",
+]
diff --git a/nixpkgs/pkgs/tools/audio/yabridgectl/chainloader-from-nix-profiles.patch b/nixpkgs/pkgs/tools/audio/yabridgectl/chainloader-from-nix-profiles.patch
new file mode 100644
index 000000000000..35193c919f63
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/yabridgectl/chainloader-from-nix-profiles.patch
@@ -0,0 +1,72 @@
+diff --git a/tools/yabridgectl/src/config.rs b/tools/yabridgectl/src/config.rs
+index da5f4ff5..c220d62d 100644
+--- a/tools/yabridgectl/src/config.rs
++++ b/tools/yabridgectl/src/config.rs
+@@ -22,6 +22,7 @@ use serde_derive::{Deserialize, Serialize};
+ use std::collections::{BTreeMap, BTreeSet, HashSet};
+ use std::env;
+ use std::fs;
++use std::iter;
+ use std::path::{Path, PathBuf};
+ use which::which;
+ use xdg::BaseDirectories;
+@@ -225,34 +226,27 @@ impl Config {
+                 }
+             }
+             None => {
+-                // Search in the system library locations and in `~/.local/share/yabridge` if no
+-                // path was set explicitely. We'll also search through `/usr/local/lib` just in case
+-                // but since we advocate against installing yabridge there we won't list this path
+-                // in the error message when `libyabridge-chainloader-vst2.so` can't be found.
+-                let system_path = Path::new("/usr/lib");
++                // Search through NIX_PROFILES & data home directory if no path was set explicitly.
++                // NIX_PROFILES is iterated in reverse from the most specific (the user profile) to
++                // the least specific (the system profile).
++                let nix_profiles = env::var("NIX_PROFILES");
+                 let user_path = xdg_dirs.get_data_home();
+-                let lib_directories = [
+-                    system_path,
+-                    // Used on Debian based distros
+-                    Path::new("/usr/lib/x86_64-linux-gnu"),
+-                    // Used on Fedora
+-                    Path::new("/usr/lib64"),
+-                    Path::new("/usr/local/lib"),
+-                    Path::new("/usr/local/lib/x86_64-linux-gnu"),
+-                    Path::new("/usr/local/lib64"),
+-                    &user_path,
+-                ];
++                let lib_directories = nix_profiles.iter()
++                    .flat_map(|profiles| profiles.split(' ')
++                              .rev()
++                              .map(|profile| Path::new(profile).join("lib")))
++                    .chain(iter::once(user_path.clone()));
++
+                 let mut candidates = lib_directories
+-                    .iter()
+                     .map(|directory| directory.join(VST2_CHAINLOADER_NAME));
++
+                 match candidates.find(|directory| directory.exists()) {
+                     Some(candidate) => candidate,
+                     _ => {
+                         return Err(anyhow!(
+-                            "Could not find '{}' in either '{}' or '{}'. You can override the \
++                            "Could not find '{}' through 'NIX_PROFILES' or '{}'. You can override the \
+                              default search path using 'yabridgectl set --path=<path>'.",
+                             VST2_CHAINLOADER_NAME,
+-                            system_path.display(),
+                             user_path.display()
+                         ));
+                     }
+diff --git a/tools/yabridgectl/src/main.rs b/tools/yabridgectl/src/main.rs
+index 0a29d431..479eaef0 100644
+--- a/tools/yabridgectl/src/main.rs
++++ b/tools/yabridgectl/src/main.rs
+@@ -134,7 +134,7 @@ fn main() -> Result<()> {
+                         .long_help(
+                             "Path to the directory containing \
+                              'libyabridge-chainloader-{clap,vst2,vst3}.so'. If this is not set, \
+-                             then yabridgectl will look in both '/usr/lib' and \
++                             then yabridgectl will look through 'NIX_PROFILES' and \
+                              '~/.local/share/yabridge' by default.",
+                         )
+                         .value_parser(parse_directory_path)
diff --git a/nixpkgs/pkgs/tools/audio/yabridgectl/default.nix b/nixpkgs/pkgs/tools/audio/yabridgectl/default.nix
new file mode 100644
index 000000000000..bc52e3d6c72f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/yabridgectl/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, rustPlatform
+, yabridge
+, makeWrapper
+, wine
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "yabridgectl";
+  version = yabridge.version;
+
+  src = yabridge.src;
+  sourceRoot = "${yabridge.src.name}/tools/yabridgectl";
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "reflink-0.1.3" = "sha256-1o5d/mepjbDLuoZ2/49Bi6sFgVX4WdCuhGJkk8ulhcI=";
+    };
+  };
+
+  patches = [
+    # Patch yabridgectl to search for the chainloader through NIX_PROFILES
+    ./chainloader-from-nix-profiles.patch
+
+    # Dependencies are hardcoded in yabridge, so the check is unnecessary and likely incorrect
+    ./remove-dependency-verification.patch
+  ];
+
+  patchFlags = [ "-p3" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postFixup = ''
+    wrapProgram "$out/bin/yabridgectl" \
+      --prefix PATH : ${lib.makeBinPath [
+        wine # winedump
+      ]}
+  '';
+
+  meta = with lib; {
+    description = "A small, optional utility to help set up and update yabridge for several directories at once";
+    homepage = "${yabridge.src.meta.homepage}/tree/${yabridge.version}/tools/yabridgectl";
+    changelog = yabridge.meta.changelog;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = yabridge.meta.platforms;
+    mainProgram = "yabridgectl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/yabridgectl/remove-dependency-verification.patch b/nixpkgs/pkgs/tools/audio/yabridgectl/remove-dependency-verification.patch
new file mode 100644
index 000000000000..a1494a490384
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/yabridgectl/remove-dependency-verification.patch
@@ -0,0 +1,19 @@
+diff --git a/tools/yabridgectl/src/actions.rs b/tools/yabridgectl/src/actions.rs
+index a0d9b98e..2819f017 100644
+--- a/tools/yabridgectl/src/actions.rs
++++ b/tools/yabridgectl/src/actions.rs
+@@ -847,14 +847,6 @@ pub fn do_sync(config: &mut Config, options: &SyncOptions) -> Result<()> {
+     // be the case if we get to this point though.
+     verify_path_setup()?;
+ 
+-    // This check is only performed once per combination of Wine and yabridge versions
+-    verify_wine_setup(config)?;
+-
+-    // Yabridge uses D-Bus notifications to relay important information when something's very wrong,
+-    // so we'll check whether `libdbus-1.so` is available (even though it would be very odd if it
+-    // isn't)
+-    verify_external_dependencies()?;
+-
+     Ok(())
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/backup/android-backup-extractor/default.nix b/nixpkgs/pkgs/tools/backup/android-backup-extractor/default.nix
new file mode 100644
index 000000000000..5411b70c77a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/android-backup-extractor/default.nix
@@ -0,0 +1,39 @@
+{ stdenv
+, lib
+, fetchurl
+, makeWrapper
+, jre
+}:
+
+stdenv.mkDerivation rec {
+  pname = "android-backup-extractor";
+  version = "20210909062443-4c55371";
+
+  src = fetchurl {
+    url = "https://github.com/nelenkov/android-backup-extractor/releases/download/${version}/abe.jar";
+    sha256 = "0ms241kb4h9y9apr637sb4kw5mml40c1ac0q4jcxhnwr3dr05w1q";
+  };
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ jre ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D $src $out/lib/android-backup-extractor/abe.jar
+    makeWrapper ${jre}/bin/java $out/bin/abe --add-flags "-cp $out/lib/android-backup-extractor/abe.jar org.nick.abe.Main"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Utility to extract and repack Android backups created with adb backup";
+    homepage = "https://github.com/nelenkov/android-backup-extractor";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ prusnak ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/automysqlbackup/default.nix b/nixpkgs/pkgs/tools/backup/automysqlbackup/default.nix
new file mode 100644
index 000000000000..f103149a83d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/automysqlbackup/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, mariadb, mailutils, pbzip2, pigz, bzip2, gzip }:
+
+stdenv.mkDerivation rec {
+  pname = "automysqlbackup";
+  version = "3.0.7";
+
+  src = fetchFromGitHub {
+    owner = "sixhop";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-C0p1AY4yIxybQ6a/HsE3ZTHumtvQw5kKM51Ap+Se0ZI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/etc
+
+    cp automysqlbackup $out/bin/
+    cp automysqlbackup.conf $out/etc/
+
+    wrapProgram $out/bin/automysqlbackup --prefix PATH : ${lib.makeBinPath [ mariadb mailutils pbzip2 pigz bzip2 gzip ]}
+  '';
+
+  meta = with lib; {
+    description = "A script to run daily, weekly and monthly backups for your MySQL database";
+    homepage = "https://github.com/sixhop/AutoMySQLBackup";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.aanderse ];
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/autorestic/default.nix b/nixpkgs/pkgs/tools/backup/autorestic/default.nix
new file mode 100644
index 000000000000..bf3d6d326073
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/autorestic/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, installShellFiles, buildGoModule }:
+
+buildGoModule rec {
+  pname = "autorestic";
+  version = "1.7.11";
+
+  src = fetchFromGitHub {
+    owner = "cupcakearmy";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Uewr9WP+HtVdWnH26+zoQjTuzE7TyNR9WlYvK2kRHaU=";
+  };
+
+  vendorHash = "sha256-K3+5DRXcx56sJ4XHikVtmoxmpJbBeAgPkN9KtHVgvYA=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd autorestic \
+         --bash <($out/bin/autorestic completion bash) \
+         --fish <($out/bin/autorestic completion fish) \
+         --zsh <($out/bin/autorestic completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "High level CLI utility for restic";
+    homepage = "https://github.com/cupcakearmy/autorestic";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ renesat ];
+    mainProgram = "autorestic";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/awsbck/default.nix b/nixpkgs/pkgs/tools/backup/awsbck/default.nix
new file mode 100644
index 000000000000..cb5b4f76549c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/awsbck/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "awsbck";
+  version = "0.3.7";
+
+  src = fetchFromGitHub {
+    owner = "beeb";
+    repo = "awsbck";
+    rev = "v${version}";
+    hash = "sha256-asYXmBPNsIac+c/UXSijol+DFI7qZVpg/SKxaadlBOI=";
+  };
+
+  cargoHash = "sha256-vFIBl/ZvSZn/9yLYMtzFvlPM+OYkZndkT6qPCIWVlOM=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  # tests run in CI on the source repo
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Backup a folder to AWS S3, once or periodically";
+    homepage = "https://github.com/beeb/awsbck";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ beeb ];
+    mainProgram = "awsbck";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/bacula/default.nix b/nixpkgs/pkgs/tools/backup/bacula/default.nix
new file mode 100644
index 000000000000..c75312606550
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/bacula/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, sqlite, postgresql, zlib, acl, ncurses, openssl, readline
+, CoreFoundation, IOKit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bacula";
+  version = "13.0.4";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/bacula/${pname}-${version}.tar.gz";
+    sha256 = "sha256-FOTGLTgaEAhCLj/RSq0ZsmFBA9iQeJJtczf4UOO0c9w=";
+  };
+
+  # libtool.m4 only matches macOS 10.*
+  postPatch = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    substituteInPlace configure \
+      --replace "10.*)" "*)"
+  '';
+
+  buildInputs = [ postgresql sqlite zlib ncurses openssl readline ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [
+      CoreFoundation
+      IOKit
+    ]
+    # acl relies on attr, which I can't get to build on darwin
+    ++ lib.optional (!stdenv.isDarwin) acl;
+
+  configureFlags = [
+    "--with-sqlite3=${sqlite.dev}"
+    "--with-postgresql=${postgresql}"
+    "--with-logdir=/var/log/bacula"
+    "--with-working-dir=/var/lib/bacula"
+    "--mandir=\${out}/share/man"
+  ] ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "ac_cv_func_setpgrp_void=yes";
+
+  installFlags = [
+    "logdir=\${out}/logdir"
+    "working_dir=\${out}/workdir"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -s $out/sbin/* $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Enterprise ready, Network Backup Tool";
+    homepage    = "http://bacula.org/";
+    license     = with licenses; [ agpl3Only bsd2 ];
+    maintainers = with maintainers; [ lovek323 eleanor ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/bakelite/default.nix b/nixpkgs/pkgs/tools/backup/bakelite/default.nix
new file mode 100644
index 000000000000..c67741b06869
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/bakelite/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "bakelite";
+  version = "unstable-2022-02-12";
+
+  src = fetchFromGitHub {
+    owner = "richfelker";
+    repo = pname;
+    rev = "373901734d114e42aa385e6a7843745674e4ca08";
+    hash = "sha256-HBnYlUyTkvPTbdsZD02yCq5C7yXOHYK4l4mDRUkcN5I=";
+  };
+
+  hardeningEnable = [ "pie" ];
+  preBuild = ''
+    # pipe2() is only exposed with _GNU_SOURCE
+    # Upstream makefile explicitly uses -O3 to improve SHA-3 performance
+    makeFlagsArray+=( CFLAGS="-D_GNU_SOURCE -g -O3" )
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bakelite $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/richfelker/bakelite";
+    description = "Incremental backup with strong cryptographic confidentality";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ mvs ];
+    # no support for Darwin (yet: https://github.com/richfelker/bakelite/pull/5)
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/bdsync/default.nix b/nixpkgs/pkgs/tools/backup/bdsync/default.nix
new file mode 100644
index 000000000000..8018a1b7cfdf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/bdsync/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub
+, openssl
+, pandoc
+, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bdsync";
+  version = "0.11.3";
+
+  src = fetchFromGitHub {
+    owner = "rolffokkens";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-58yoF6s0WjH+1mTY7X5OX53YgcnDmGxoCR8Kvl6lP+A=";
+  };
+
+  nativeBuildInputs = [ pandoc which ];
+  buildInputs = [ openssl ];
+
+  postPatch = ''
+    patchShebangs ./tests.sh
+    patchShebangs ./tests/
+  '';
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 bdsync -t $out/bin/
+    install -Dm644 bdsync.1 -t $out/share/man/man1/
+  '';
+
+  meta = with lib; {
+    description = "Fast block device synchronizing tool";
+    homepage = "https://github.com/rolffokkens/bdsync";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jluttine ];
+    mainProgram = "bdsync";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/borgbackup/default.nix b/nixpkgs/pkgs/tools/backup/borgbackup/default.nix
new file mode 100644
index 000000000000..d7853d0506f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/borgbackup/default.nix
@@ -0,0 +1,141 @@
+{ lib
+, stdenv
+, acl
+, e2fsprogs
+, libb2
+, lz4
+, openssh
+, openssl
+, python3Packages
+, xxHash
+, zstd
+, installShellFiles
+, nixosTests
+, fetchPypi
+}:
+
+let
+  python = python3Packages.python.override {
+    packageOverrides = self: super: {
+      msgpack = super.msgpack.overrideAttrs (oldAttrs: rec {
+        version ="1.0.4";
+
+        src = fetchPypi {
+          pname = "msgpack";
+          inherit version;
+          hash = "sha256-9dhpwY8DAgLrQS8Iso0q/upVPWYTruieIA16yn7wH18=";
+        };
+      });
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "borgbackup";
+  version = "1.2.7";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-9j8oozg8BBlxzsh7BhyjmoFbX9RF2ySqgXLKxBfZQRo=";
+  };
+
+  postPatch = ''
+    # sandbox does not support setuid/setgid/sticky bits
+    substituteInPlace src/borg/testsuite/archiver.py \
+      --replace "0o4755" "0o0755"
+  '';
+
+  nativeBuildInputs = with python.pkgs; [
+    cython
+    setuptools-scm
+    pkgconfig
+
+    # docs
+    sphinxHook
+    guzzle-sphinx-theme
+
+    # shell completions
+    installShellFiles
+  ];
+
+  sphinxBuilders = [ "singlehtml" "man" ];
+
+  buildInputs = [
+    libb2
+    lz4
+    xxHash
+    zstd
+    openssl
+  ] ++ lib.optionals stdenv.isLinux [
+    acl
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    msgpack
+    packaging
+    (if stdenv.isLinux then pyfuse3 else llfuse)
+  ];
+
+  makeWrapperArgs = [
+    ''--prefix PATH ':' "${openssh}/bin"''
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd borg \
+      --bash scripts/shell_completions/bash/borg \
+      --fish scripts/shell_completions/fish/borg.fish \
+      --zsh scripts/shell_completions/zsh/_borg
+  '';
+
+  nativeCheckInputs = with python.pkgs; [
+    e2fsprogs
+    py
+    python-dateutil
+    pytest-benchmark
+    pytest-xdist
+    pytestCheckHook
+  ];
+
+  pytestFlagsArray = [
+    "--benchmark-skip"
+    "--pyargs" "borg.testsuite"
+  ];
+
+  disabledTests = [
+    # fuse: device not found, try 'modprobe fuse' first
+    "test_fuse"
+    "test_fuse_allow_damaged_files"
+    "test_fuse_mount_hardlinks"
+    "test_fuse_mount_options"
+    "test_fuse_versions_view"
+    "test_migrate_lock_alive"
+    "test_readonly_mount"
+    # Error: Permission denied while trying to write to /var/{,tmp}
+    "test_get_cache_dir"
+    "test_get_keys_dir"
+    "test_get_security_dir"
+    "test_get_config_dir"
+    # https://github.com/borgbackup/borg/issues/6573
+    "test_basic_functionality"
+  ];
+
+  preCheck = ''
+    export HOME=$TEMP
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) borgbackup;
+  };
+
+  outputs = [ "out" "doc" "man" ];
+
+  meta = with lib; {
+    changelog = "https://github.com/borgbackup/borg/blob/${version}/docs/changes.rst";
+    description = "Deduplicating archiver with compression and encryption";
+    homepage = "https://www.borgbackup.org";
+    license = licenses.bsd3;
+    platforms = platforms.unix; # Darwin and FreeBSD mentioned on homepage
+    mainProgram = "borg";
+    maintainers = with maintainers; [ dotlambda globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/borgmatic/default.nix b/nixpkgs/pkgs/tools/backup/borgmatic/default.nix
new file mode 100644
index 000000000000..24d4e98ed1fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/borgmatic/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, borgbackup
+, coreutils
+, python3Packages
+, fetchPypi
+, systemd
+, enableSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, installShellFiles
+, borgmatic
+, testers
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "borgmatic";
+  version = "1.8.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-XbihTQJtoiRRfwjMCP+XEPmbt7//zFPx1fIWOvn92Nc=";
+  };
+
+  nativeCheckInputs = with python3Packages; [ flexmock pytestCheckHook pytest-cov ];
+
+  # - test_borgmatic_version_matches_news_version
+  # The file NEWS not available on the pypi source, and this test is useless
+  disabledTests = [
+    "test_borgmatic_version_matches_news_version"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  propagatedBuildInputs = with python3Packages; [
+    borgbackup
+    colorama
+    jsonschema
+    packaging
+    ruamel-yaml
+    requests
+    setuptools
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd borgmatic \
+      --bash <($out/bin/borgmatic --bash-completion)
+  '' + lib.optionalString enableSystemd ''
+    mkdir -p $out/lib/systemd/system
+    cp sample/systemd/borgmatic.timer $out/lib/systemd/system/
+    # there is another "sleep", so choose the one with the space after it
+    # due to https://github.com/borgmatic-collective/borgmatic/commit/2e9f70d49647d47fb4ca05f428c592b0e4319544
+    substitute sample/systemd/borgmatic.service \
+               $out/lib/systemd/system/borgmatic.service \
+               --replace /root/.local/bin/borgmatic $out/bin/borgmatic \
+               --replace systemd-inhibit ${systemd}/bin/systemd-inhibit \
+               --replace "sleep " "${coreutils}/bin/sleep "
+  '';
+
+  passthru.tests.version = testers.testVersion { package = borgmatic; };
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "Simple, configuration-driven backup software for servers and workstations";
+    homepage = "https://torsion.org/borgmatic/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ imlonghao ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/btar/default.nix b/nixpkgs/pkgs/tools/backup/btar/default.nix
new file mode 100644
index 000000000000..f1033d275aab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/btar/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, fetchpatch, librsync }:
+
+stdenv.mkDerivation rec {
+  pname = "btar";
+  version = "1.1.1";
+
+  src = fetchurl {
+    url = "https://vicerveza.homeunix.net/~viric/soft/btar/btar-${version}.tar.gz";
+    sha256 = "0miklk4bqblpyzh1bni4x6lqn88fa8fjn15x1k1n8bxkx60nlymd";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://build.opensuse.org/public/source/openSUSE:Factory/btar/btar-librsync.patch?rev=2";
+      sha256 = "1awqny9489vsfffav19s73xxg26m7zrhvsgf1wxb8c2izazwr785";
+    })
+  ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: listindex.o:/build/btar-1.1.1/loadindex.h:12: multiple definition of
+  #     `ptr'; main.o:/build/btar-1.1.1/loadindex.h:12: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  buildInputs = [ librsync ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Tar-compatible block-based archiver";
+    license = lib.licenses.gpl3Plus;
+    homepage = "https://viric.name/cgi-bin/btar";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ viric ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/btrbk/default.nix b/nixpkgs/pkgs/tools/backup/btrbk/default.nix
new file mode 100644
index 000000000000..36bd2065de7e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/btrbk/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchurl
+, bash
+, btrfs-progs
+, openssh
+, perl
+, perlPackages
+, util-linux
+, asciidoctor
+, mbuffer
+, makeWrapper
+, genericUpdater
+, curl
+, writeShellScript
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "btrbk";
+  version = "0.32.6";
+
+  src = fetchurl {
+    url = "https://digint.ch/download/btrbk/releases/${pname}-${version}.tar.xz";
+    sha256 = "AuKsZHyRhGMgLL5ge7lVV6T3/SNwaRJDM8VNpbK7t2s=";
+  };
+
+  nativeBuildInputs = [ asciidoctor makeWrapper ];
+
+  buildInputs = with perlPackages; [ perl DateCalc ];
+
+  preInstall = ''
+    for f in $(find . -name Makefile); do
+      substituteInPlace "$f" \
+        --replace "/usr" "$out" \
+        --replace "/etc" "$out/etc"
+    done
+
+    # Tainted Mode disables PERL5LIB
+    substituteInPlace btrbk \
+      --replace "perl -T" "perl" \
+      --replace "\$0" "\$ENV{'program_name'}"
+
+    # Fix SSH filter script
+    sed -i '/^export PATH/d' ssh_filter_btrbk.sh
+    substituteInPlace ssh_filter_btrbk.sh --replace logger ${util-linux}/bin/logger
+  '';
+
+  preFixup = ''
+    wrapProgram $out/bin/btrbk \
+      --set PERL5LIB $PERL5LIB \
+      --run 'export program_name=$0' \
+      --prefix PATH ':' "${lib.makeBinPath [ btrfs-progs bash mbuffer openssh ]}"
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) btrbk btrbk-no-timer btrbk-section-order btrbk-doas;
+  };
+
+  passthru.updateScript = genericUpdater {
+    versionLister = writeShellScript "btrbk-versionLister" ''
+      ${curl}/bin/curl -s https://digint.ch/download/btrbk/releases/ | ${perl}/bin/perl -lne 'print $1 if /btrbk-([0-9.]*)\.tar/'
+    '';
+  };
+
+  meta = with lib; {
+    description = "A backup tool for btrfs subvolumes";
+    homepage = "https://digint.ch/btrbk";
+    license = licenses.gpl3Only;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ asymmetric ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/bup/default.nix b/nixpkgs/pkgs/tools/backup/bup/default.nix
new file mode 100644
index 000000000000..c2b7b048bce2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/bup/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper
+, perl, pandoc, python3, git
+, par2cmdline ? null, par2Support ? true
+}:
+
+assert par2Support -> par2cmdline != null;
+
+let
+  version = "0.33.3";
+
+  pythonDeps = with python3.pkgs; [ setuptools tornado ]
+    ++ lib.optionals (!stdenv.isDarwin) [ pyxattr pylibacl fuse ];
+in
+
+stdenv.mkDerivation {
+  pname = "bup";
+  inherit version;
+
+  src = fetchFromGitHub {
+    repo = "bup";
+    owner = "bup";
+    rev = version;
+    hash = "sha256-w7yPs7hG4v0Kd9i2tYhWH7vW95MAMfI/8g61MB6bfps=";
+  };
+
+  buildInputs = [ git python3 ];
+  nativeBuildInputs = [ pandoc perl makeWrapper ];
+
+  postPatch = "patchShebangs .";
+
+  dontAddPrefix = true;
+
+  makeFlags = [
+    "MANDIR=$(out)/share/man"
+    "DOCDIR=$(out)/share/doc/bup"
+    "BINDIR=$(out)/bin"
+    "LIBDIR=$(out)/lib/bup"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=implicit-function-declaration -Wno-error=implicit-int";
+
+  postInstall = ''
+    wrapProgram $out/bin/bup \
+      --prefix PATH : ${lib.makeBinPath [ git par2cmdline ]} \
+      --prefix NIX_PYTHONPATH : ${lib.makeSearchPathOutput "lib" python3.sitePackages pythonDeps}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/bup/bup";
+    description = "Efficient file backup system based on the git packfile format";
+    license = licenses.gpl2Plus;
+
+    longDescription = ''
+      Highly efficient file backup system based on the git packfile format.
+      Capable of doing *fast* incremental backups of virtual machine images.
+    '';
+
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/bupstash/default.nix b/nixpkgs/pkgs/tools/backup/bupstash/default.nix
new file mode 100644
index 000000000000..d9b9bc8188b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/bupstash/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, installShellFiles, rustPlatform, ronn, pkg-config, libsodium }:
+rustPlatform.buildRustPackage rec {
+  pname = "bupstash";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "andrewchambers";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Ekjxna3u+71s1q7jjXp7PxYUQIfbp2E+jAqKGuszU6g=";
+  };
+
+  cargoSha256 = "sha256-hkGmE7WseEjMxmmPyR8C4osbdbpIt8qG9sfVGuC4d84=";
+
+  nativeBuildInputs = [ ronn pkg-config installShellFiles ];
+  buildInputs = [ libsodium ];
+
+  postBuild = ''
+    RUBYOPT="-KU -E utf-8:utf-8" ronn -r doc/man/*.md
+  '';
+
+  postInstall = ''
+    installManPage doc/man/*.[1-9]
+  '';
+
+  meta = with lib; {
+    description = "Easy and efficient encrypted backups";
+    homepage = "https://bupstash.io";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ andrewchambers ];
+    mainProgram = "bupstash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/burp/default.nix b/nixpkgs/pkgs/tools/backup/burp/default.nix
new file mode 100644
index 000000000000..d78e75685f05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/burp/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config
+, acl, librsync, ncurses, openssl_legacy, zlib, uthash }:
+
+stdenv.mkDerivation rec {
+  pname = "burp";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "grke";
+    repo = "burp";
+    rev = version;
+    sha256 = "sha256-y6kRd1jD6t+Q6d5t7W9MDuk+m2Iq1THQkP50PJwI7Nc=";
+  };
+
+  patches = [
+    # Pull upstream fix for ncurses-6.3 support
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/grke/burp/commit/1d6c931af7c11f164cf7ad3479781e8f03413496.patch";
+      sha256 = "14sfbfahlankz3xg6v10i8fnmpnmqpp73q9xm0l0hnjh25igv6bl";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  # use openssl_legacy due to burp-2.4.0 not supporting file encryption with openssl 3.0
+  # replace with 'openssl' once burp-3.x has been declared stable and this package upgraded
+  buildInputs = [ librsync ncurses openssl_legacy zlib uthash ]
+    ++ lib.optional (!stdenv.isDarwin) acl;
+
+  configureFlags = [ "--localstatedir=/var" ];
+
+  installFlags = [ "localstatedir=/tmp" ];
+
+  meta = with lib; {
+    description = "BURP - BackUp and Restore Program";
+    homepage    = "https://burp.grke.org";
+    license     = licenses.agpl3;
+    maintainers = with maintainers; [ arjan-s ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/chunksync/default.nix b/nixpkgs/pkgs/tools/backup/chunksync/default.nix
new file mode 100644
index 000000000000..2bab8d5ea22e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/chunksync/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, openssl, perl }:
+
+stdenv.mkDerivation rec {
+  version = "0.4";
+  pname = "chunksync";
+
+  src = fetchurl {
+    url = "https://chunksync.florz.de/chunksync_${version}.tar.gz";
+    sha256 = "1gwqp1kjwhcmwhynilakhzpzgc0c6kk8c9vkpi30gwwrwpz3cf00";
+  };
+
+  buildInputs = [openssl perl];
+
+  NIX_LDFLAGS = "-lgcc_s";
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = {
+    description = "Space-efficient incremental backups of large files or block devices";
+    homepage = "http://chunksync.florz.de/";
+    license = lib.licenses.gpl2;
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/conserve/default.nix b/nixpkgs/pkgs/tools/backup/conserve/default.nix
new file mode 100644
index 000000000000..a3f4dc3f734c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/conserve/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "conserve";
+  version = "23.11.0";
+
+  src = fetchFromGitHub {
+    owner = "sourcefrog";
+    repo = "conserve";
+    rev = "v${version}";
+    hash = "sha256-Ck2+3etwfZiDMZHzI2hIBuUKn7L0ZTGEe9yJjXjoRIM=";
+  };
+
+  cargoHash = "sha256-tMj1icGNTFpouts1TE6BIiABexV3vmOW9r5Y/7ynUMM=";
+
+  meta = with lib; {
+    description = "Robust portable backup tool in Rust";
+    homepage = "https://github.com/sourcefrog/conserve";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ happysalada ];
+    mainProgram = "conserve";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/dar/default.nix b/nixpkgs/pkgs/tools/backup/dar/default.nix
new file mode 100644
index 000000000000..96eeeb39a9cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/dar/default.nix
@@ -0,0 +1,82 @@
+{
+  lib,
+  stdenv,
+  fetchzip,
+  which,
+  attr,
+  e2fsprogs,
+  curl,
+  libargon2,
+  librsync,
+  libthreadar,
+  gpgme,
+  libgcrypt,
+  openssl,
+  bzip2,
+  lz4,
+  lzo,
+  xz,
+  zlib,
+  zstd,
+  CoreFoundation,
+}:
+
+stdenv.mkDerivation rec {
+  version = "2.7.13";
+  pname = "dar";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/dar/${pname}-${version}.tar.gz";
+    sha256 = "sha256-d88BwbovhbAn72y5pVd4No+hVydXbtZYHZpdtpo4RGY=";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [ which ];
+
+  buildInputs = [
+    curl
+    librsync
+    libthreadar
+    gpgme
+    libargon2
+    libgcrypt
+    openssl
+    bzip2
+    lz4
+    lzo
+    xz
+    zlib
+    zstd
+  ] ++ lib.optionals stdenv.isLinux [
+    attr
+    e2fsprogs
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreFoundation
+  ];
+
+  configureFlags = [
+    "--disable-birthtime"
+    "--disable-upx"
+    "--disable-dar-static"
+    "--disable-build-html"
+    "--enable-threadar"
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    # Disable html help
+    rm -r "$out"/share/dar
+  '';
+
+  meta = with lib; {
+    homepage = "http://dar.linux.free.fr";
+    description = "Disk ARchiver, allows backing up files into indexed archives";
+    maintainers = with maintainers; [ izorkin ];
+    license = licenses.gpl2Only;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/dedup/default.nix b/nixpkgs/pkgs/tools/backup/dedup/default.nix
new file mode 100644
index 000000000000..15daab4751e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/dedup/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, lz4, snappy, libsodium
+# For testing
+, coreutils, gawk
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dedup";
+  version = "2.0";
+
+  src = fetchurl {
+    url = "https://dl.2f30.org/releases/${pname}-${version}.tar.gz";
+    sha256 = "0n5kkni4d6blz3s94y0ddyhijb74lxv7msr2mvdmj8l19k0lrfh1";
+  };
+
+  makeFlags = [
+    "CC:=$(CC)"
+    "PREFIX=${placeholder "out"}"
+    "MANPREFIX=${placeholder "out"}/share/man"
+  ];
+
+  buildInputs = [ lz4 snappy libsodium ];
+
+  doCheck = true;
+
+  nativeCheckInputs = [ coreutils gawk ];
+  checkTarget = "test";
+
+  meta = with lib; {
+    description = "Data deduplication program";
+    homepage = "https://git.2f30.org/dedup/file/README.html";
+    license = with licenses; [ bsd0 isc ];
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/dirvish/default.nix b/nixpkgs/pkgs/tools/backup/dirvish/default.nix
new file mode 100644
index 000000000000..4f99e60f4dbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/dirvish/default.nix
@@ -0,0 +1,64 @@
+{ fetchurl, lib, stdenv, makeWrapper, perl, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "dirvish";
+  version = "1.2.1";
+
+  src = fetchurl {
+    url = "http://dirvish.org/dirvish${version}.tgz";
+    sha256 = "6b7f29c3541448db3d317607bda3eb9bac9fb3c51f970611ffe27e9d63507dcd";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ] ++ (with perlPackages; [ GetoptLong TimeParseDate TimePeriod ]);
+
+  executables = [ "dirvish" "dirvish-runall" "dirvish-expire" "dirvish-locate" ];
+  manpages = [ "dirvish.8" "dirvish-runall.8" "dirvish-expire.8" "dirvish-locate.8" "dirvish.conf.5" ];
+
+  buildPhase = ''
+    HEADER="#!${perl}/bin/perl
+
+    \$CONFDIR = \"/etc/dirvish\";
+
+    "
+
+    for executable in $executables; do
+      (
+        echo "$HEADER"
+        cat $executable.pl loadconfig.pl
+      ) > $executable
+      chmod +x $executable
+    done
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp --target-directory=$out/bin $executables
+
+    for manpage in $manpages; do
+      if [[ $manpage =~ \.([[:digit:]]+)$ ]]; then
+        section=''${BASH_REMATCH[1]}
+        mkdir -p $out/man/man$section
+        cp --target-directory=$out/man/man$section $manpage
+      else
+        echo "Couldn't determine man page section by filename"
+        exit 1
+      fi
+    done
+  '';
+
+  postFixup = ''
+    for executable in $executables; do
+      wrapProgram $out/bin/$executable \
+        --set PERL5LIB "$PERL5LIB"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Fast, disk based, rotating network backup system";
+    homepage = "http://dirvish.org/";
+    license = lib.licenses.osl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.winpat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/discordchatexporter-cli/default.nix b/nixpkgs/pkgs/tools/backup/discordchatexporter-cli/default.nix
new file mode 100644
index 000000000000..518113e0b217
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/discordchatexporter-cli/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildDotnetModule
+, dotnetCorePackages
+, fetchFromGitHub
+, testers
+, discordchatexporter-cli
+}:
+
+buildDotnetModule rec {
+  pname = "discordchatexporter-cli";
+  version = "2.41.2";
+
+  src = fetchFromGitHub {
+    owner = "tyrrrz";
+    repo = "discordchatexporter";
+    rev = version;
+    hash = "sha256-8ETEIZXIo7Tx6Vb9Id/E/8IklpcvO9OpcrYD+mHRX3o=";
+  };
+
+  projectFile = "DiscordChatExporter.Cli/DiscordChatExporter.Cli.csproj";
+  nugetDeps = ./deps.nix;
+  dotnet-sdk = dotnetCorePackages.sdk_7_0;
+  dotnet-runtime = dotnetCorePackages.runtime_7_0;
+
+  postFixup = ''
+    ln -s $out/bin/DiscordChatExporter.Cli $out/bin/discordchatexporter-cli
+  '';
+
+  passthru = {
+    updateScript = ./updater.sh;
+    tests.version = testers.testVersion {
+      package = discordchatexporter-cli;
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "A tool to export Discord chat logs to a file";
+    homepage = "https://github.com/Tyrrrz/DiscordChatExporter";
+    license = licenses.gpl3Plus;
+    changelog = "https://github.com/Tyrrrz/DiscordChatExporter/blob/${version}/Changelog.md";
+    maintainers = with maintainers; [ eclairevoyant ivar ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "discordchatexporter-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/discordchatexporter-cli/deps.nix b/nixpkgs/pkgs/tools/backup/discordchatexporter-cli/deps.nix
new file mode 100644
index 000000000000..36fe79638043
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/discordchatexporter-cli/deps.nix
@@ -0,0 +1,23 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "AdvancedStringBuilder"; version = "0.1.0"; sha256 = "1lpv5sggdxza0bmcqmzf5r4i340f0m7nr5073lac18naj5697q5g"; })
+  (fetchNuGet { pname = "AngleSharp"; version = "1.0.4"; sha256 = "1b4qd0z27fdkgy5l8fqcbpzwm29gmmjm2h0mqb9ac94rv6ynq510"; })
+  (fetchNuGet { pname = "AsyncKeyedLock"; version = "6.2.1"; sha256 = "0281mj9ppz6q454li6xyllb1hdfkl59bh3psbj4z6l9xjbhnjhz0"; })
+  (fetchNuGet { pname = "CliFx"; version = "2.3.4"; sha256 = "14nj8w3j0hbsr5cghj39jx2sh5cg3wsvl517dk8whva5kgy3q1mf"; })
+  (fetchNuGet { pname = "CSharpier.MsBuild"; version = "0.25.0"; sha256 = "0xpdb2mss9zhdpks9ajm2h611khhw69xjwxv1k6qf7qrbkb0rgr3"; })
+  (fetchNuGet { pname = "Deorcify"; version = "1.0.2"; sha256 = "0nwxyrl4rd5x621i2hs5fl3w7fxpm13lkdssxr9fd5042px2gqbm"; })
+  (fetchNuGet { pname = "DotnetRuntimeBootstrapper"; version = "2.5.1"; sha256 = "192795akjmdxvp8p52g256rg0nzriipfsr8j808h69j6himhp4d7"; })
+  (fetchNuGet { pname = "Gress"; version = "2.1.1"; sha256 = "1svz1flhyl26h3xjch0acjjinympgf6bhj5vpb188njfih3ip4ck"; })
+  (fetchNuGet { pname = "JsonExtensions"; version = "1.2.0"; sha256 = "0g54hibabbqqfhxjlnxwv1rxagpali5agvnpymp2w3dk8h6q66xy"; })
+  (fetchNuGet { pname = "Polly"; version = "8.0.0"; sha256 = "08wzmkz9qjz61sczmipm8m5j4bg8dg4mbjgspagx4hh28q8mvagn"; })
+  (fetchNuGet { pname = "Polly.Core"; version = "8.0.0"; sha256 = "10w6z81kidkdhbwkhyas9kc1zmvz0r3mzcsii01wpydw27v0rzxp"; })
+  (fetchNuGet { pname = "RazorBlade"; version = "0.4.4"; sha256 = "1dkyyn58gcrl1sh6mv3g7zqapqg8lb5nzn10aj3vh4l51wpl0l5r"; })
+  (fetchNuGet { pname = "Spectre.Console"; version = "0.47.0"; sha256 = "0gc9ana660an7d76w9qd8l62lv66dc69vr5lslr896b1313ywakp"; })
+  (fetchNuGet { pname = "Superpower"; version = "3.0.0"; sha256 = "0p6riay4732j1fahc081dzgs9q4z3n2fpxrin4zfpj6q2226dhz4"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "7.0.0"; sha256 = "0sn6hxdjm7bw3xgsmg041ccchsa4sp02aa27cislw3x61dbr68kq"; })
+  (fetchNuGet { pname = "WebMarkupMin.Core"; version = "2.14.0"; sha256 = "0c41zw1bwz6ybxagq5vr26cx7najd17rrdbqjpn8mabynq380ayr"; })
+  (fetchNuGet { pname = "YoutubeExplode"; version = "6.3.4"; sha256 = "0zlfga8aigxxqa96jmqsp95h5plvxxlgymsrbcl5z1ds9ga0ldkd"; })
+]
diff --git a/nixpkgs/pkgs/tools/backup/discordchatexporter-cli/updater.sh b/nixpkgs/pkgs/tools/backup/discordchatexporter-cli/updater.sh
new file mode 100755
index 000000000000..cc81761b93d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/discordchatexporter-cli/updater.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=./. -i bash -p curl jq common-updater-scripts
+set -eo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+new_version="$(curl -s "https://api.github.com/repos/tyrrrz/DiscordChatExporter/releases?per_page=1" | jq -r '.[0].name')"
+old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+if [[ "$new_version" == "$old_version" ]]; then
+  echo "Up to date"
+  exit 0
+fi
+
+cd ../../../..
+update-source-version discordchatexporter-cli "$new_version"
+$(nix-build -A discordchatexporter-cli.fetch-deps --no-out-link)
diff --git a/nixpkgs/pkgs/tools/backup/diskrsync/default.nix b/nixpkgs/pkgs/tools/backup/diskrsync/default.nix
new file mode 100644
index 000000000000..9154451a2441
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/diskrsync/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule, fetchFromGitHub, lib, openssh, makeWrapper }:
+
+buildGoModule rec {
+  pname = "diskrsync";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "dop251";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hM70WD+M3jwze0IG84WTFf1caOUk2s9DQ7pR+KNIt1M=";
+  };
+
+  vendorHash = "sha256-lJaM/sC5/qmmo7Zu7nGR6ZdXa1qw4SuVxawQ+d/m+Aw=";
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  preFixup = ''
+    wrapProgram "$out/bin/diskrsync" --argv0 diskrsync --prefix PATH : ${openssh}/bin
+  '';
+
+  meta = with lib; {
+    description = "Rsync for block devices and disk images";
+    homepage = "https://github.com/dop251/diskrsync";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jluttine ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/dump/default.nix b/nixpkgs/pkgs/tools/backup/dump/default.nix
new file mode 100644
index 000000000000..f9e1b68ac395
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/dump/default.nix
@@ -0,0 +1,25 @@
+# Tested with simple dump and restore -i, but complains that
+# /nix/store/.../etc/dumpdates doesn't exist.
+
+{ lib, stdenv, fetchurl, pkg-config,
+  e2fsprogs, ncurses, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "dump";
+  version = "0.4b47";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dump/dump-${version}.tar.gz";
+    sha256 = "sha256-0CGs3k+77T2T662YFCL2cfSNZrKeyI196DZC7Pv/T9A=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ e2fsprogs ncurses readline ];
+
+  meta = with lib; {
+    homepage = "https://dump.sourceforge.io/";
+    description = "Linux Ext2 filesystem dump/restore utilities";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ falsifian ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/duplicacy/default.nix b/nixpkgs/pkgs/tools/backup/duplicacy/default.nix
new file mode 100644
index 000000000000..55abb3462ee4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicacy/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "duplicacy";
+  version = "3.2.3";
+
+  src = fetchFromGitHub {
+    owner = "gilbertchen";
+    repo = "duplicacy";
+    rev = "v${version}";
+    hash = "sha256-7LflTRBB4JG84QM46wvSJrP4o3CHV4gnR24RJgDSlDg=";
+  };
+
+  vendorHash = "sha256-4M/V4vP9XwHBkZ6UwsAxZ81YAzP4inuNC5yI+5ygQsA=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://duplicacy.com";
+    description = "A new generation cloud backup tool";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = lib.licenses.unfree;
+    maintainers = with maintainers; [ ffinkdevs devusb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/duplicati/default.nix b/nixpkgs/pkgs/tools/backup/duplicati/default.nix
new file mode 100644
index 000000000000..3667b4afda47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicati/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchzip, mono, sqlite, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "duplicati";
+  version = "2.0.7.1";
+  channel = "beta";
+  build_date = "2023-05-25";
+
+  src = fetchzip {
+    url = "https://github.com/duplicati/duplicati/releases/download/v${version}-${version}_${channel}_${build_date}/duplicati-${version}_${channel}_${build_date}.zip";
+    hash = "sha256-isPmRC6N+gEZgvJ0bgeFf5kOQJsicZOsGnT+CAGgg+U=";
+    stripRoot = false;
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/${pname}-${version}}
+    cp -r * $out/share/${pname}-${version}
+    makeWrapper "${mono}/bin/mono" $out/bin/duplicati-cli \
+      --add-flags "$out/share/${pname}-${version}/Duplicati.CommandLine.exe" \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [
+          sqlite ]}
+    makeWrapper "${mono}/bin/mono" $out/bin/duplicati-server \
+      --add-flags "$out/share/${pname}-${version}/Duplicati.Server.exe" \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [
+          sqlite ]}
+  '';
+
+  meta = with lib; {
+    description = "A free backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers";
+    homepage = "https://www.duplicati.com/";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ nyanloutre ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/duplicity/default.nix b/nixpkgs/pkgs/tools/backup/duplicity/default.nix
new file mode 100644
index 000000000000..452fab128e14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicity/default.nix
@@ -0,0 +1,130 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, python3
+, librsync
+, ncftp
+, gnupg
+, gnutar
+, par2cmdline
+, util-linux
+, rsync
+, makeWrapper
+, gettext
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "duplicity";
+  version = "0.8.23";
+
+  src = fetchFromGitLab {
+    owner = "duplicity";
+    repo = "duplicity";
+    rev = "rel.${version}";
+    sha256 = "0my015zc8751smjgbsysmca7hvdm96cjw5zilqn3zq971nmmrksb";
+  };
+
+  patches = [
+    # We use the tar binary on all platforms.
+    ./gnutar-in-test.patch
+
+    # Our Python infrastructure runs test in installCheckPhase so we need
+    # to make the testing code stop assuming it is run from the source directory.
+    ./use-installed-scripts-in-test.patch
+  ] ++ lib.optionals stdenv.isLinux [
+    # Broken on Linux in Nix' build environment
+    ./linux-disable-timezone-test.patch
+  ];
+
+  preConfigure = ''
+    # fix version displayed by duplicity --version
+    # see SourceCopy in setup.py
+    ls
+    for i in bin/*.1 duplicity/__init__.py; do
+      substituteInPlace "$i" --replace '$version' "${version}"
+    done
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+    gettext
+    python3.pkgs.wrapPython
+    python3.pkgs.setuptools-scm
+  ];
+
+  buildInputs = [
+    librsync
+  ];
+
+  pythonPath = with python3.pkgs; [
+    b2sdk
+    boto3
+    cffi
+    cryptography
+    ecdsa
+    idna
+    pygobject3
+    fasteners
+    lockfile
+    paramiko
+    pyasn1
+    pycrypto
+    pydrive2
+    future
+  ];
+
+  nativeCheckInputs = [
+    gnupg # Add 'gpg' to PATH.
+    gnutar # Add 'tar' to PATH.
+    librsync # Add 'rdiff' to PATH.
+    par2cmdline # Add 'par2' to PATH.
+  ] ++ lib.optionals stdenv.isLinux [
+    util-linux # Add 'setsid' to PATH.
+  ] ++ (with python3.pkgs; [
+    lockfile
+    mock
+    pexpect
+    pytest
+    pytest-runner
+  ]);
+
+  postInstall = ''
+    wrapProgram $out/bin/duplicity \
+      --prefix PATH : "${lib.makeBinPath [ gnupg ncftp rsync ]}"
+  '';
+
+  preCheck = ''
+    wrapPythonProgramsIn "$PWD/testing/overrides/bin" "$pythonPath"
+
+    # Add 'duplicity' to PATH for tests.
+    # Normally, 'setup.py test' adds 'build/scripts-2.7/' to PATH before running
+    # tests. However, 'build/scripts-2.7/duplicity' is not wrapped, so its
+    # shebang is incorrect and it fails to run inside Nix' sandbox.
+    # In combination with use-installed-scripts-in-test.patch, make 'setup.py
+    # test' use the installed 'duplicity' instead.
+    PATH="$out/bin:$PATH"
+
+    # Don't run developer-only checks (pep8, etc.).
+    export RUN_CODE_TESTS=0
+
+    # check version string
+    duplicity --version | grep ${version}
+  '' + lib.optionalString stdenv.isDarwin ''
+    # Work around the following error when running tests:
+    # > Max open files of 256 is too low, should be >= 1024.
+    # > Use 'ulimit -n 1024' or higher to correct.
+    ulimit -n 1024
+  '';
+
+  # TODO: Fix test failures on macOS 10.13:
+  #
+  # > OSError: out of pty devices
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Encrypted bandwidth-efficient backup using the rsync algorithm";
+    homepage = "https://duplicity.gitlab.io/duplicity-web/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/duplicity/gnutar-in-test.patch b/nixpkgs/pkgs/tools/backup/duplicity/gnutar-in-test.patch
new file mode 100644
index 000000000000..ee95b68e2abb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicity/gnutar-in-test.patch
@@ -0,0 +1,20 @@
+diff --git a/testing/functional/test_restart.py b/testing/functional/test_restart.py
+index 6d972c82..e8435fd5 100644
+--- a/testing/functional/test_restart.py
++++ b/testing/functional/test_restart.py
+@@ -350,14 +350,7 @@ class RestartTestWithoutEncryption(RestartTest):
+         https://launchpad.net/bugs/929067
+         """
+ 
+-        if platform.system().startswith(u'Linux'):
+-            tarcmd = u"tar"
+-        elif platform.system().startswith(u'Darwin'):
+-            tarcmd = u"gtar"
+-        elif platform.system().endswith(u'BSD'):
+-            tarcmd = u"gtar"
+-        else:
+-            raise Exception(u"Platform %s not supported by tar/gtar." % platform.platform())
++        tarcmd = u"tar"
+ 
+         # Intial normal backup
+         self.backup(u"full", u"{0}/testfiles/blocktartest".format(_runtest_dir))
diff --git a/nixpkgs/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch b/nixpkgs/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch
new file mode 100644
index 000000000000..e322625cdbf4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch
@@ -0,0 +1,16 @@
+commit f0142706c377b7c133753db57b5c4c90baa2de30
+Author: Guillaume Girol <symphorien+git@xlumurb.eu>
+Date:   Sun Jul 11 17:48:15 2021 +0200
+
+diff --git a/testing/unit/test_statistics.py b/testing/unit/test_statistics.py
+index 4be5000c..80545853 100644
+--- a/testing/unit/test_statistics.py
++++ b/testing/unit/test_statistics.py
+@@ -63,6 +63,7 @@ class StatsObjTest(UnitTestCase):
+         s1 = StatsDeltaProcess()
+         assert s1.get_stat(u'SourceFiles') == 0
+ 
++    @unittest.skip("Broken on Linux in Nix' build environment")
+     def test_get_stats_string(self):
+         u"""Test conversion of stat object into string"""
+         s = StatsObj()
diff --git a/nixpkgs/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch b/nixpkgs/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch
new file mode 100644
index 000000000000..a5ddc4381bd8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch
@@ -0,0 +1,63 @@
+commit ccd4dd92cd37acce1da20966ad9e4e0c7bcf1709
+Author: Guillaume Girol <symphorien+git@xlumurb.eu>
+Date:   Sun Jul 11 12:00:00 2021 +0000
+
+    use installed duplicity when running tests
+
+diff --git a/setup.py b/setup.py
+index fa474f20..604a242a 100755
+--- a/setup.py
++++ b/setup.py
+@@ -205,10 +205,6 @@ class TestCommand(test):
+                 except Exception:
+                     pass
+ 
+-        os.environ[u'PATH'] = u"%s:%s" % (
+-            os.path.abspath(build_scripts_cmd.build_dir),
+-            os.environ.get(u'PATH'))
+-
+         test.run(self)
+ 
+ 
+diff --git a/testing/functional/__init__.py b/testing/functional/__init__.py
+index 4221576d..3cf44945 100644
+--- a/testing/functional/__init__.py
++++ b/testing/functional/__init__.py
+@@ -111,7 +111,7 @@ class FunctionalTestCase(DuplicityTestCase):
+         run_coverage = os.environ.get(u'RUN_COVERAGE', None)
+         if run_coverage is not None:
+             cmd_list.extend([u"-m", u"coverage", u"run", u"--source=duplicity", u"-p"])
+-        cmd_list.extend([u"{0}/bin/duplicity".format(_top_dir)])
++        cmd_list.extend([u"duplicity"])
+         cmd_list.extend(options)
+         cmd_list.extend([u"-v0"])
+         cmd_list.extend([u"--no-print-statistics"])
+diff --git a/testing/functional/test_log.py b/testing/functional/test_log.py
+index 9dfc86a6..b9cb55db 100644
+--- a/testing/functional/test_log.py
++++ b/testing/functional/test_log.py
+@@ -49,9 +49,9 @@ class LogTest(FunctionalTestCase):
+         # Run actual duplicity command (will fail, because no arguments passed)
+         basepython = os.environ.get(u'TOXPYTHON', None)
+         if basepython is not None:
+-            os.system(u"{0} {1}/bin/duplicity --log-file={2} >/dev/null 2>&1".format(basepython, _top_dir, self.logfile))
++            os.system(u"{0} duplicity --log-file={1} >/dev/null 2>&1".format(basepython, self.logfile))
+         else:
+-            os.system(u"{0}/bin/duplicity --log-file={1} >/dev/null 2>&1".format(_top_dir, self.logfile))
++            os.system(u"duplicity --log-file={0} >/dev/null 2>&1".format(self.logfile))
+ 
+         # The format of the file should be:
+         # """ERROR 2
+diff --git a/testing/functional/test_rdiffdir.py b/testing/functional/test_rdiffdir.py
+index 0cbfdb33..47acd029 100644
+--- a/testing/functional/test_rdiffdir.py
++++ b/testing/functional/test_rdiffdir.py
+@@ -44,7 +44,7 @@ class RdiffdirTest(FunctionalTestCase):
+         basepython = os.environ.get(u'TOXPYTHON', None)
+         if basepython is not None:
+             cmd_list.extend([basepython])
+-        cmd_list.extend([u"{0}/bin/rdiffdir".format(_top_dir)])
++        cmd_list.extend([u"rdiffdir"])
+         cmd_list.extend(argstring.split())
+         cmdline = u" ".join([u'"%s"' % x for x in cmd_list])
+         self.run_cmd(cmdline)
diff --git a/nixpkgs/pkgs/tools/backup/duply/default.nix b/nixpkgs/pkgs/tools/backup/duply/default.nix
new file mode 100644
index 000000000000..66c31ddd0e16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duply/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, coreutils, python3, duplicity, gawk, gnupg, bash
+, gnugrep, txt2man, makeWrapper, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "duply";
+  version = "2.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/ftplicity/duply%20%28simple%20duplicity%29/2.4.x/duply_${version}.tgz";
+    hash = "sha256-DCrp3o/ukzkfnVaLbIK84bmYnXvqKsvlkGn3GJY3iNg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ txt2man ];
+
+  postPatch = "patchShebangs .";
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/man/man1"
+    install -vD duply "$out/bin"
+    wrapProgram "$out/bin/duply" --prefix PATH : \
+        ${lib.makeBinPath [ coreutils python3 duplicity gawk gnupg bash gnugrep txt2man which ]}
+    "$out/bin/duply" txt2man > "$out/share/man/man1/duply.1"
+  '';
+
+  meta = with lib; {
+    description = "Shell front end for the duplicity backup tool";
+    longDescription = ''
+      Duply is a shell front end for the duplicity backup tool
+      https://www.nongnu.org/duplicity. It greatly simplifies its usage by
+      implementing backup job profiles, batch commands and more. Who says
+      secure backups on non-trusted spaces are no child's play?
+    '';
+    homepage = "https://duply.net/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.bjornfor ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/easysnap/default.nix b/nixpkgs/pkgs/tools/backup/easysnap/default.nix
new file mode 100644
index 000000000000..46952ce5327a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/easysnap/default.nix
@@ -0,0 +1,31 @@
+{lib, stdenv, fetchFromGitHub, zfs }:
+
+stdenv.mkDerivation {
+  pname = "easysnap";
+  version = "unstable-2022-06-03";
+
+  src = fetchFromGitHub {
+    owner = "sjau";
+    repo = "easysnap";
+    rev = "5f961442315a6f7eb8ca5b705bd52fe1e6d7dc42";
+    sha256 = "sha256-jiKdpwuw0Oil0sxUr/3KJ6Nbfxh8DvBei0yy0nRM+Vs=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp easysnap* $out/bin/
+
+    for i in $out/bin/*; do
+      substituteInPlace $i \
+        --replace zfs ${zfs}/bin/zfs
+    done
+  '';
+
+  meta = with lib; {
+    homepage    = "https://github.com/sjau/easysnap";
+    description = "Customizable ZFS Snapshotting tool with zfs send/recv pulling";
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ sjau ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/backup/fabs/default.nix b/nixpkgs/pkgs/tools/backup/fabs/default.nix
new file mode 100644
index 000000000000..f6e9ec291585
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/fabs/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, fetchFromGitHub
+, perl
+, python3
+, sqlite
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "fabs";
+  version = "1.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "openafs-contrib";
+    repo = "fabs";
+    rev = "v${version}";
+    hash = "sha256-ejAcCwrOWGX0zsMw224f9GTWlozNYC0gU6LdTk0XqH0=";
+  };
+
+  nativeBuildInputs = [
+    perl
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    alembic
+    python-dateutil
+    pyyaml
+    setuptools
+    sqlalchemy
+  ];
+
+  outputs = [ "out" "man" ];
+
+  preBuild = ''
+    export PREFIX=$out
+  '';
+
+  LOCALSTATEDIR = "/var";
+  LOCKDIR = "/run/lock/fabs";
+
+  preInstall = ''
+    mkdir -p "$out/etc"
+    cp -t "$out/etc" -r etc/fabs
+  '';
+
+  # remove once sqlalchemy backend no longer uses deprecated methods
+  SQLALCHEMY_SILENCE_UBER_WARNING = 1;
+
+  nativeCheckInputs = [
+    python3.pkgs.pytestCheckHook
+    sqlite
+  ];
+
+  meta = with lib; {
+    outputsToInstall = [ "out" "man" ];
+    mainProgram = "fabsys";
+    description = "Flexible AFS Backup System for the OpenAFS distributed file system";
+    homepage = "https://github.com/openafs-contrib/fabs";
+    license = with licenses; [ isc ];
+    maintainers = with maintainers; [ spacefrogg ];
+    broken = lib.versionAtLeast python3.pkgs.sqlalchemy.version "2.0";
+    badPlatforms = [
+      "x86_64-darwin"
+      "aarch64-darwin"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/flockit/default.nix b/nixpkgs/pkgs/tools/backup/flockit/default.nix
new file mode 100644
index 000000000000..cd17f8e2438c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/flockit/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "flockit";
+  version = "2012-08-11";
+
+  src = fetchFromGitHub {
+    owner  = "smerritt";
+    repo   = "flockit";
+    rev    = "5c2b2092f8edcc8e3e2eb6ef66c968675dbfa686";
+    sha256 = "0vajck9q2677gpn9a4flkyz7mw69ql1647cjwqh834nrcr2b5164";
+  };
+
+  installPhase = ''
+    mkdir -p $out/lib $out/bin
+    cp ./libflockit.so $out/lib
+
+    (cat <<EOI
+    #!${runtimeShell}
+    env LD_PRELOAD="$out/lib/libflockit.so" FLOCKIT_FILE_PREFIX=\$1 \''${@:2}
+    EOI
+    ) > $out/bin/flockit
+    chmod +x $out/bin/flockit
+  '';
+
+  meta = with lib; {
+    description = "LD_PRELOAD shim to add file locking to programs that don't do it (I'm looking at you, rsync!)";
+    longDescription = ''
+      This library and tool exists solely because rsync doesn't have file locking.
+
+      It's not used like a normal library; you don't link against it, and you
+      don't have to patch your source code to use it. It's inserted between your
+      program and its libraries by use of LD_PRELOAD.
+
+      For example:
+
+        $ env LD_PRELOAD=$(nix-build -A pkgs.flockit)/lib/libflockit.so FLOCKIT_FILE_PREFIX=test rsync SRC DEST
+
+      Besides the library a handy executable is provided which can simplify the above to:
+
+        $ $(nix-build -A pkgs.flockit)/bin/flockit test rsync SRC DEST
+
+      Also see the following blog post:
+      https://www.swiftstack.com/blog/2012/08/15/old-school-monkeypatching/
+    '';
+    homepage = "https://github.com/smerritt/flockit";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.basvandijk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/gamerbackup/default.nix b/nixpkgs/pkgs/tools/backup/gamerbackup/default.nix
new file mode 100644
index 000000000000..856da421c55b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/gamerbackup/default.nix
@@ -0,0 +1,30 @@
+{ lib, makeWrapper, buildGoModule, fetchFromGitHub, lepton }:
+
+buildGoModule {
+  pname = "gb-backup";
+  version = "unstable-2021-10-27";
+
+  src = fetchFromGitHub {
+    owner = "leijurv";
+    repo = "gb";
+    rev = "61383d445af7b035fb8e1df0cacc424340dd16df";
+    sha256 = "sha256-YRrD2gW+gzxD2JwadCbF/SBSsHeeGPsa8kKZHHAytVo=";
+  };
+
+  vendorHash = "sha256-H3Zf4VNJVX9C3GTeqU4YhNqCIQz1R55MfhrygDgJTxc=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  nativeCheckInputs = [ lepton ];
+
+  postFixup = ''
+    wrapProgram $out/bin/gb --prefix PATH : ${lib.makeBinPath [ lepton ]}
+  '';
+
+  meta = with lib; {
+    description = "Gamer Backup, a super opinionated cloud backup system";
+    homepage = "https://github.com/leijurv/gb";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ babbaj ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/gh2md/default.nix b/nixpkgs/pkgs/tools/backup/gh2md/default.nix
new file mode 100644
index 000000000000..047b838859a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/gh2md/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, python3Packages
+, fetchPypi
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gh2md";
+  version = "2.3.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-B7IB1TWfZ0StH2zo/tXfDAaPlgLvr4ciIv7B8EQyp8w=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ six requests python-dateutil ];
+
+  # uses network
+  doCheck = false;
+
+  pythonImportsCheck = [ "gh2md" ];
+
+  meta = with lib; {
+    description = "Export Github repository issues to markdown files";
+    homepage = "https://github.com/mattduck/gh2md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ artturin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/gphotos-sync/default.nix b/nixpkgs/pkgs/tools/backup/gphotos-sync/default.nix
new file mode 100644
index 000000000000..9fefd79c3c62
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/gphotos-sync/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, fetchFromGitHub
+, python3
+, ffmpeg
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "gphotos-sync";
+  version = "3.2.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "gilesknap";
+    repo = "gphotos-sync";
+    rev = version;
+    hash = "sha256-iTqD/oUQqC7Fju8SEPkSZX7FC9tE4eRCewiJR8STmEw=";
+  };
+
+  patches = [
+    ./skip-network-tests.patch
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    setuptools-scm
+    wheel
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    attrs
+    exif
+    google-auth-oauthlib
+    psutil
+    pyyaml
+    psutil
+    requests-oauthlib
+    types-pyyaml
+    types-requests
+  ];
+
+  buildInputs = [
+    ffmpeg
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    mock
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export PY_IGNORE_IMPORTMISMATCH=1
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "Google Photos and Albums backup with Google Photos Library API";
+    homepage = "https://github.com/gilesknap/gphotos-sync";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dnr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/gphotos-sync/skip-network-tests.patch b/nixpkgs/pkgs/tools/backup/gphotos-sync/skip-network-tests.patch
new file mode 100644
index 000000000000..6f78ed7db3f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/gphotos-sync/skip-network-tests.patch
@@ -0,0 +1,21 @@
+diff --git a/tests/test_setup.py b/tests/test_setup.py
+index 085b110..ea4a7d2 100644
+--- a/tests/test_setup.py
++++ b/tests/test_setup.py
+@@ -45,7 +45,8 @@ class SetupDbAndCredentials:
+         return self
+ 
+     def __exit__(self, exc_type=None, exc_value=None, traceback=None):
+-        self.gp.google_photos_down.close()
++        if hasattr(self.gp, 'google_photos_down'):
++            self.gp.google_photos_down.close()
+ 
+     def test_setup(self, test_name, args=None, trash_db=False, trash_files=False):
+         self.root = Path("/tmp/gpTests/{}".format(test_name))
+@@ -76,3 +77,6 @@ class SetupDbAndCredentials:
+ 
+     def test_done(self):
+         self.gp.data_store.store()
++
++import pytest, requests
++requests.Session.__init__ = lambda *args, **kwargs: pytest.skip("no network access")
diff --git a/nixpkgs/pkgs/tools/backup/gyb/default.nix b/nixpkgs/pkgs/tools/backup/gyb/default.nix
new file mode 100644
index 000000000000..fedf02a9b7e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/gyb/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, fetchFromGitHub
+, python3
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gyb";
+  version = "1.80";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "GAM-team";
+    repo = "got-your-back";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-4xElzhf9R6qnzr4oyZktQy/ym2vEjR9MrHnLYxBiAOg=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    google-api-python-client
+    google-auth
+    google-auth-oauthlib
+    google-auth-httplib2
+    httplib2
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,${python3.sitePackages}}
+    mv gyb.py "$out/bin/gyb"
+    mv *.py "$out/${python3.sitePackages}/"
+
+    runHook postInstall
+  '';
+
+  checkPhase = ''
+    $out/bin/gyb --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = ''
+      Got Your Back (GYB) is a command line tool for backing up your Gmail
+      messages to your computer using Gmail's API over HTTPS.
+    '';
+    homepage = "https://github.com/GAM-team/got-your-back";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ austinbutler ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/hpe-ltfs/default.nix b/nixpkgs/pkgs/tools/backup/hpe-ltfs/default.nix
new file mode 100644
index 000000000000..017df9a80073
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/hpe-ltfs/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, fuse, icu66, pkg-config, libxml2, libuuid }:
+
+stdenv.mkDerivation rec {
+  version = "3.4.2_Z7550-02501";
+  pname = "hpe-ltfs";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "nix-community";
+    repo = "hpe-ltfs";
+    sha256 = "193593hsc8nf5dn1fkxhzs1z4fpjh64hdkc8q6n9fgplrpxdlr4s";
+  };
+
+  sourceRoot = "${src.name}/ltfs";
+
+  # include sys/sysctl.h is deprecated in glibc. The sysctl calls are only used
+  # for Apple to determine the kernel version. Because this build only targets
+  # Linux is it safe to remove.
+  patches = [ ./remove-sysctl.patch ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    fuse icu66 libxml2 libuuid
+  ];
+
+  meta = with lib; {
+    description = "HPE's implementation of the open-source tape filesystem standard ltfs";
+    homepage = "https://support.hpe.com/hpesc/public/km/product/1009214665/Product";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.redvers ];
+    platforms = platforms.linux;
+    downloadPage = "https://github.com/nix-community/hpe-ltfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/hpe-ltfs/remove-sysctl.patch b/nixpkgs/pkgs/tools/backup/hpe-ltfs/remove-sysctl.patch
new file mode 100644
index 000000000000..35b56522a5bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/hpe-ltfs/remove-sysctl.patch
@@ -0,0 +1,14 @@
+diff --git a/src/libltfs/arch/arch_info.c b/src/libltfs/arch/arch_info.c
+index 179428f..114acf0 100644
+--- a/src/libltfs/arch/arch_info.c
++++ b/src/libltfs/arch/arch_info.c
+@@ -47,9 +47,6 @@
+ */
+ 
+ #include "libltfs/ltfs.h"
+-#ifndef mingw_PLATFORM
+-#include <sys/sysctl.h>
+-#endif
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
diff --git a/nixpkgs/pkgs/tools/backup/httrack/default.nix b/nixpkgs/pkgs/tools/backup/httrack/default.nix
new file mode 100644
index 000000000000..8ac3bf740412
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/httrack/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, zlib, openssl, libiconv }:
+
+stdenv.mkDerivation rec {
+  version = "3.49.2";
+  pname = "httrack";
+
+  src = fetchurl {
+    url = "https://mirror.httrack.com/httrack-${version}.tar.gz";
+    sha256 = "09a0gm67nml86qby1k1gh7rdxamnrnzwr6l9r5iiq94favjs0xrl";
+  };
+
+  buildInputs = [ libiconv openssl zlib ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Easy-to-use offline browser / website mirroring utility";
+    homepage    = "http://www.httrack.com";
+    license     = licenses.gpl3;
+    platforms   = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/httrack/qt.nix b/nixpkgs/pkgs/tools/backup/httrack/qt.nix
new file mode 100644
index 000000000000..ed1a75c974aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/httrack/qt.nix
@@ -0,0 +1,39 @@
+{ stdenv, mkDerivation, lib, fetchurl, cmake, pkg-config, makeWrapper
+, httrack, qtbase, qtmultimedia }:
+
+mkDerivation rec {
+  pname = "httraqt";
+  version = "1.4.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/httraqt/${pname}-${version}.tar.gz";
+    sha256 = "0pjxqnqchpbla4xiq4rklc06484n46cpahnjy03n9rghwwcad25b";
+  };
+
+  buildInputs = [ httrack qtbase qtmultimedia ];
+
+  nativeBuildInputs = [ cmake makeWrapper pkg-config ];
+
+  prePatch = ''
+    substituteInPlace cmake/HTTRAQTFindHttrack.cmake \
+      --replace /usr/include/httrack/ ${httrack}/include/httrack/
+
+    substituteInPlace distribution/posix/CMakeLists.txt \
+      --replace /usr/share $out/share
+
+    substituteInPlace desktop/httraqt.desktop \
+      --replace Exec=httraqt Exec=$out/bin/httraqt
+
+    substituteInPlace sources/main/httraqt.cpp \
+      --replace /usr/share/httraqt/ $out/share/httraqt
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Easy-to-use offline browser / website mirroring utility - QT frontend";
+    homepage    = "http://www.httrack.com";
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/iceshelf/default.nix b/nixpkgs/pkgs/tools/backup/iceshelf/default.nix
new file mode 100644
index 000000000000..c066cb766951
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/iceshelf/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, git, awscli, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "iceshelf";
+  version = "unstable-2019-07-03";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "mrworf";
+    repo = pname;
+    rev = "26768dde3fc54fa412e523eb8f8552e866b4853b";
+    sha256 = "08rcbd14vn7312rmk2hyvdzvhibri31c4r5lzdrwb1n1y9q761qm";
+  };
+
+  propagatedBuildInputs = [
+    git
+    awscli
+    python3.pkgs.python-gnupg
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/doc/${pname} $out/${python3.sitePackages}
+    cp -v iceshelf iceshelf-restore $out/bin
+    cp -v iceshelf.sample.conf $out/share/doc/${pname}/
+    cp -rv modules $out/${python3.sitePackages}
+  '';
+
+  meta = with lib; {
+    description = "A simple tool to allow storage of signed, encrypted, incremental backups using Amazon's Glacier storage";
+    license = licenses.lgpl2;
+    homepage = "https://github.com/mrworf/iceshelf";
+    maintainers = with maintainers; [ mmahut ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/kopia/default.nix b/nixpkgs/pkgs/tools/backup/kopia/default.nix
new file mode 100644
index 000000000000..3709040490b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/kopia/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kopia";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-N6mntK1cHkdnIZhU67DOvlwv8XXWx602oD/Pj+NJo9Y=";
+  };
+
+  vendorHash = "sha256-eP/T4UzXBLOuK/f3BTz7dGqsSj7r/uTKKQ4H4lCvPC8=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-X github.com/kopia/kopia/repo.BuildVersion=${version}"
+    "-X github.com/kopia/kopia/repo.BuildInfo=${src.rev}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://kopia.io";
+    description = "Cross-platform backup tool with fast, incremental backups, client-side end-to-end encryption, compression and data deduplication";
+    license = licenses.asl20;
+    maintainers = [ maintainers.bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/luckybackup/default.nix b/nixpkgs/pkgs/tools/backup/luckybackup/default.nix
new file mode 100644
index 000000000000..61c0c186fe27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/luckybackup/default.nix
@@ -0,0 +1,44 @@
+{ mkDerivation, lib, fetchurl
+, pkg-config, libtool, qmake
+, rsync, ssh
+}:
+
+mkDerivation rec {
+  pname = "luckybackup";
+  version = "0.5.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/luckybackup/${version}/source/${pname}-${version}.tar.gz";
+    sha256 = "0nwjsk1j33pm8882jbj8h6nxn6n5ab9dxqpqkay65pfbhcjay0g8";
+  };
+
+  buildInputs = [ rsync ssh ];
+
+  nativeBuildInputs = [ pkg-config libtool qmake ];
+
+  prePatch = ''
+    for File in luckybackup.pro menu/luckybackup-pkexec \
+        menu/luckybackup-su.desktop menu/luckybackup.desktop \
+        menu/net.luckybackup.su.policy src/functions.cpp \
+        src/global.cpp src/scheduleDialog.cpp; do
+      substituteInPlace $File --replace "/usr" "$out"
+    done
+  '';
+
+  meta = with lib; {
+    description = "A powerful, fast and reliable backup & sync tool";
+    longDescription = ''
+      luckyBackup is an application for data back-up and synchronization
+      powered by the rsync tool.
+
+      It is simple to use, fast (transfers over only changes made and not
+      all data), safe (keeps your data safe by checking all declared directories
+      before proceeding in any data manipulation), reliable and fully
+      customizable.
+    '';
+    homepage = "https://luckybackup.sourceforge.net/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile b/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile
new file mode 100644
index 000000000000..a87462e2b8a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org/'
+gem 'lvmsync'
diff --git a/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile.lock b/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile.lock
new file mode 100644
index 000000000000..5faac2356799
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    git-version-bump (0.15.1)
+    lvmsync (3.3.2)
+      git-version-bump (~> 0.10)
+      treetop
+    polyglot (0.3.5)
+    treetop (1.6.9)
+      polyglot (~> 0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  lvmsync
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/backup/lvmsync/default.nix b/nixpkgs/pkgs/tools/backup/lvmsync/default.nix
new file mode 100644
index 000000000000..00a03cda7149
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/lvmsync/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, bundlerEnv, ruby, bundlerUpdateScript, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "lvmsync";
+  version = (import ./gemset.nix).${pname}.version;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontUnpack = true;
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "${pname}-${version}-gems";
+      ruby = ruby;
+      gemfile  = ./Gemfile;
+      lockfile = ./Gemfile.lock;
+      gemset   = ./gemset.nix;
+    };
+  in ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/lvmsync $out/bin/lvmsync
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "lvmsync";
+
+  meta = with lib; {
+    description = "Optimised synchronisation of LVM snapshots over a network";
+    homepage = "https://theshed.hezmatt.org/lvmsync/";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ jluttine nicknovitski ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/backup/lvmsync/gemset.nix b/nixpkgs/pkgs/tools/backup/lvmsync/gemset.nix
new file mode 100644
index 000000000000..f17aa513a1f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/lvmsync/gemset.nix
@@ -0,0 +1,36 @@
+{
+  git-version-bump = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xcj20gmbpqn2gcpid4pxpnimfdg2ip9jnl1572naz0magcrwl2s";
+      type = "gem";
+    };
+    version = "0.15.1";
+  };
+  lvmsync = {
+    dependencies = ["git-version-bump" "treetop"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02mdrvfibvab4p4yrdzxvndhy8drss3ri7izybcwgpbyc7isk8mv";
+      type = "gem";
+    };
+    version = "3.3.2";
+  };
+  polyglot = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sdkd1v2h8dhj9ncsnpywmqv7w1mdwsyc5jwyxlxwriacv8qz8bd";
+      type = "gem";
+    };
+    version = "1.6.9";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/mastodon-archive/default.nix b/nixpkgs/pkgs/tools/backup/mastodon-archive/default.nix
new file mode 100644
index 000000000000..88d05022d437
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/mastodon-archive/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "mastodon-archive";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "kensanata";
+    repo = "mastodon-backup";
+    rev = "v${version}";
+    hash = "sha256-b4bYQshz7mwxEfpRYV7ze4C8hz58R9cVp58wHvGFb0A=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    html2text
+    mastodon-py
+    progress
+  ];
+
+  # There is no test
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Utility for backing up your Mastodon content";
+    homepage = "https://alexschroeder.ch/software/Mastodon_Archive";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ julm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/monolith/default.nix b/nixpkgs/pkgs/tools/backup/monolith/default.nix
new file mode 100644
index 000000000000..10859512ef80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/monolith/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, libiconv
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "monolith";
+  version = "2.8.1";
+
+  src = fetchFromGitHub {
+    owner = "Y2Z";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-qMB4Tok0tYAqj8r9LEkjhBV5ko+hwagFS7MsL8AYJnc=";
+  };
+
+  cargoHash = "sha256-FeD0+s79orFDUVsb205W0pdXgDI+p1UrH3GIfKwUqDQ=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv Security SystemConfiguration ];
+
+  checkFlagsArray = [ "--skip=tests::cli" ];
+
+  meta = with lib; {
+    description = "Bundle any web page into a single HTML file";
+    homepage = "https://github.com/Y2Z/monolith";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/mt-st/default.nix b/nixpkgs/pkgs/tools/backup/mt-st/default.nix
new file mode 100644
index 000000000000..8c62ad6512e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/mt-st/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mt-st";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "https://github.com/iustin/mt-st/releases/download/mt-st-${version}/mt-st-${version}.tar.gz";
+    sha256 = "b552775326a327cdcc076c431c5cbc4f4e235ac7c41aa931ad83f94cccb9f6de";
+  };
+
+  installFlags = [ "PREFIX=$(out)" "EXEC_PREFIX=$(out)" ];
+
+  meta = {
+    description = "Magnetic Tape control tools for Linux";
+    longDescription = ''
+      Fork of the standard "mt" tool with additional Linux-specific IOCTLs.
+    '';
+    homepage = "https://github.com/iustin/mt-st";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.redvers ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/mtx/default.nix b/nixpkgs/pkgs/tools/backup/mtx/default.nix
new file mode 100644
index 000000000000..683bee11067d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/mtx/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mtx";
+  version = "1.3.12";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-stable/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0261c5e90b98b6138cd23dadecbc7bc6e2830235145ed2740290e1f35672d843";
+  };
+
+  doCheck = false;
+
+  meta = {
+    description = "Media Changer Tools";
+    longDescription = ''
+      The mtx command controls single or multi-drive SCSI media changers such as
+      tape changers, autoloaders, tape libraries, or optical media jukeboxes. It
+      can also be used with media changers that use the 'ATTACHED' API, presuming
+      that they properly report the MChanger bit as required by the SCSI T-10 SMC
+      specification.
+    '';
+    homepage = "https://sourceforge.net/projects/mtx/";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.redvers ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/mydumper/default.nix b/nixpkgs/pkgs/tools/backup/mydumper/default.nix
new file mode 100644
index 000000000000..bde0306a6acb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/mydumper/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub
+, cmake, pkg-config, sphinx
+, glib , pcre
+, libmysqlclient, libressl
+, zlib, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mydumper";
+  version = "0.14.3-1";
+
+  src = fetchFromGitHub {
+    owner  = "mydumper";
+    repo = "mydumper";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-qyJGnrBOElQ3s2VoOWfW1luacd33haanmzKidMBgCpc=";
+  };
+
+  outputs = [ "out" "doc" "man" ];
+
+  nativeBuildInputs = [ cmake pkg-config sphinx ];
+
+  buildInputs = [
+    glib pcre
+    libmysqlclient libressl
+    zlib zstd
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+    "-DMYSQL_INCLUDE_DIR=${lib.getDev libmysqlclient}/include/mysql"
+    "-DWITH_ZSTD=ON"
+  ];
+
+  meta = with lib; {
+    description = "High-performance MySQL backup tool";
+    homepage = "https://github.com/maxbube/mydumper";
+    changelog = "https://github.com/mydumper/mydumper/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/mylvmbackup/default.nix b/nixpkgs/pkgs/tools/backup/mylvmbackup/default.nix
new file mode 100644
index 000000000000..6c87fca05672
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/mylvmbackup/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchurl
+, perlPackages
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mylvmbackup";
+  version = "0.16";
+
+  src = fetchurl {
+    url = "https://www.lenzg.net/mylvmbackup/${pname}-${version}.tar.gz";
+    sha256 = "sha256-vb7M3EPIrxIz6jUwm241fzaEz2czqdCObrFgSOSgJRU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ];
+
+  dontConfigure = true;
+
+  postPatch = ''
+    patchShebangs mylvmbackup
+    substituteInPlace Makefile \
+      --replace "prefix = /usr/local" "prefix = ${builtins.placeholder "out"}" \
+      --replace "sysconfdir = /etc" "sysconfdir = ${builtins.placeholder "out"}/etc" \
+      --replace "/usr/bin/install" "install"
+  '';
+
+  postInstall = ''
+    wrapProgram "$out/bin/mylvmbackup" \
+      --prefix PERL5LIB : "${perlPackages.makePerlPath (
+    with perlPackages; [
+      ConfigIniFiles
+      DBDmysql
+      DBI
+      TimeDate
+      FileCopyRecursive
+    ]
+  )}"
+  '';
+
+  meta = {
+    homepage = "https://www.lenzg.net/mylvmbackup/";
+    description = "a tool for quickly creating full physical backups of a MySQL server's data files";
+    license = lib.licenses.gpl2Only;
+    maintainers = with lib.maintainers; [ ryantm ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/partclone/default.nix b/nixpkgs/pkgs/tools/backup/partclone/default.nix
new file mode 100644
index 000000000000..a1f9365be809
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/partclone/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, pkg-config, libuuid, e2fsprogs, nilfs-utils, ntfs3g, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "partclone";
+  version = "0.3.27";
+
+  src = fetchFromGitHub {
+    owner = "Thomas-Tsai";
+    repo = "partclone";
+    rev = version;
+    sha256 = "sha256-atQ355w9BRUJKkvuyJupcNexVEnVcYsWRvnNmpBw8OA=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [
+    e2fsprogs libuuid stdenv.cc.libc nilfs-utils ntfs3g openssl
+    (lib.getOutput "static" stdenv.cc.libc)
+  ];
+
+  configureFlags = [
+    "--enable-xfs"
+    "--enable-extfs"
+    "--enable-hfsp"
+    "--enable-fat"
+    "--enable-exfat"
+    "--enable-ntfs"
+    "--enable-btrfs"
+    "--enable-minix"
+    "--enable-f2fs"
+    "--enable-nilfs2"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Utilities to save and restore used blocks on a partition";
+    longDescription = ''
+      Partclone provides utilities to save and restore used blocks on a
+      partition and is designed for higher compatibility of the file system by
+      using existing libraries, e.g. e2fslibs is used to read and write the
+      ext2 partition.
+    '';
+    homepage = "https://partclone.org";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ marcweber ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/partimage/default.nix b/nixpkgs/pkgs/tools/backup/partimage/default.nix
new file mode 100644
index 000000000000..7a8210566129
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/partimage/default.nix
@@ -0,0 +1,50 @@
+{lib, stdenv
+, fetchurl
+, fetchpatch
+, bzip2
+, zlib
+, newt
+, openssl
+, pkg-config
+, slang
+, libxcrypt
+, autoreconfHook
+}:
+stdenv.mkDerivation rec {
+  pname = "partimage";
+  version = "0.6.9";
+
+  enableParallelBuilding = true;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/partimage/partimage-${version}.tar.bz2";
+    sha256 = "0db6xiphk6xnlpbxraiy31c5xzj0ql6k4rfkmqzh665yyj0nqfkm";
+  };
+
+  configureFlags = [ "--with-ssl-headers=${openssl.dev}/include/openssl" ];
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ bzip2 zlib newt newt openssl slang libxcrypt ];
+
+  patches = [
+    ./gentoos-zlib.patch
+    (fetchpatch {
+      name = "openssl-1.1.patch";
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-block/partimage/files/"
+        + "partimage-0.6.9-openssl-1.1-compatibility.patch?id=3fe8e9910002b6523d995512a646b063565d0447";
+      sha256 = "1hs0krxrncxq1w36bhad02yk8yx71zcfs35cw87c82sl2sfwasjg";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/p/partimage/0.6.9-8/debian/patches/04-fix-FTBFS-glic-2.28.patch";
+      sha256 = "0xid5636g58sxbhxnjmfjdy7y8rf3c77zmmpfbbqv4lv9jd2gmxm";
+    })
+  ];
+
+  meta = {
+    description = "Opensource disk backup software";
+    homepage = "https://www.partimage.org";
+    license = lib.licenses.gpl2;
+    maintainers = [lib.maintainers.marcweber];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/partimage/gentoos-zlib.patch b/nixpkgs/pkgs/tools/backup/partimage/gentoos-zlib.patch
new file mode 100644
index 000000000000..05150e131e36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/partimage/gentoos-zlib.patch
@@ -0,0 +1,33 @@
+http://bugs.gentoo.org/405323
+
+--- a/src/client/imagefile.cpp
++++ b/src/client/imagefile.cpp
+@@ -783,7 +783,7 @@
+   else if (m_options.dwCompression == COMPRESS_GZIP) // Gzip compression
+     {
+       showDebug(1, "open gzip\n");
+-      m_gzImageFile = (gzFile *) gzdopen(m_nFdImage, "wb"); //"wb1h");
++      m_gzImageFile = gzdopen(m_nFdImage, "wb"); //"wb1h");
+       if (m_gzImageFile == NULL)
+ 	{
+ 	  showDebug(1, "error:%d %s\n", errno, strerror(errno));
+@@ -1098,7 +1098,7 @@
+     }
+   else if (m_options.dwCompression == COMPRESS_GZIP) // Gzip compression
+     {
+-      m_gzImageFile = (gzFile *) gzdopen(m_nFdImage, "rb");
++      m_gzImageFile = gzdopen(m_nFdImage, "rb");
+       if (m_gzImageFile == NULL)
+         THROW(ERR_ERRNO, errno);
+       else
+--- a/src/client/imagefile.h
++++ b/src/client/imagefile.h
+@@ -41,7 +41,7 @@
+   COptions m_options;
+ 
+   FILE *m_fImageFile;
+-  gzFile *m_gzImageFile;
++  gzFile m_gzImageFile;
+   BZFILE *m_bzImageFile;
+ 
+   int m_nFdImage;
diff --git a/nixpkgs/pkgs/tools/backup/percona-xtrabackup/8_0.nix b/nixpkgs/pkgs/tools/backup/percona-xtrabackup/8_0.nix
new file mode 100644
index 000000000000..5bdfd864daca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/percona-xtrabackup/8_0.nix
@@ -0,0 +1,17 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "8.0.34-29";
+  hash = "sha256-dO5ciIIAnKj2t+fYhrtnY7MvBThoA+SymBzN8H07giM=";
+
+  # includes https://github.com/Percona-Lab/libkmip.git
+  fetchSubmodules = true;
+
+  extraPatches = [
+    ./abi-check.patch
+  ];
+
+  extraPostInstall = ''
+    rm -r "$out"/docs
+  '';
+})
diff --git a/nixpkgs/pkgs/tools/backup/percona-xtrabackup/abi-check.patch b/nixpkgs/pkgs/tools/backup/percona-xtrabackup/abi-check.patch
new file mode 100644
index 000000000000..53442ef5bc00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/percona-xtrabackup/abi-check.patch
@@ -0,0 +1,18 @@
+MySQL ABI check assumes that with -nostdinc any standard #include terminates
+preprocessing, but we do not provide that:
+https://github.com/NixOS/nixpkgs/issues/44530
+
+"#error" does not terminate preprocessing, so we #include a non-existent file instead.
+
+--- a/cmake/do_abi_check.cmake
++++ b/cmake/do_abi_check.cmake
+@@ -68,1 +68,1 @@ FOREACH(file ${ABI_HEADERS})
+-      -E -nostdinc -dI -DMYSQL_ABI_CHECK -I${ABI_SOURCE_DIR}/include
++      -E -nostdinc -dI -DMYSQL_ABI_CHECK -I${ABI_SOURCE_DIR}/include/nostdinc -I${ABI_SOURCE_DIR}/include
+@@ -74,1 +74,1 @@ FOREACH(file ${ABI_HEADERS})
+-    COMMAND ${WSL_EXECUTABLE} sed -e "/^# /d"
++    COMMAND ${WSL_EXECUTABLE} sed -e "/^# /d" -e "/^#include <-nostdinc>$/d"
+--- /dev/null
++++ b/include/nostdinc/stdint.h
+@@ -0,0 +1,1 @@
++#include <-nostdinc>
diff --git a/nixpkgs/pkgs/tools/backup/percona-xtrabackup/generic.nix b/nixpkgs/pkgs/tools/backup/percona-xtrabackup/generic.nix
new file mode 100644
index 000000000000..112a3f556204
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/percona-xtrabackup/generic.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchFromGitHub, bison, boost, cmake, makeWrapper, pkg-config
+, curl, cyrus_sasl, libaio, libedit, libev, libevent, libgcrypt, libgpg-error, lz4
+, ncurses, numactl, openssl, procps, protobuf, valgrind, xxd, zlib
+, perlPackages
+, version, hash, fetchSubmodules ? false, extraPatches ? [], extraPostInstall ? "", ...
+}:
+
+stdenv.mkDerivation rec {
+  pname = "percona-xtrabackup";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "percona";
+    repo = "percona-xtrabackup";
+    rev = "${pname}-${version}";
+    inherit hash fetchSubmodules;
+  };
+
+  nativeBuildInputs = [ bison boost cmake makeWrapper pkg-config ];
+
+  buildInputs = [
+    (curl.override { inherit openssl; }) cyrus_sasl libaio libedit libevent libev libgcrypt libgpg-error lz4
+    ncurses numactl openssl procps protobuf valgrind xxd zlib
+  ] ++ (with perlPackages; [ perl DBI DBDmysql ]);
+
+  patches = extraPatches;
+
+  cmakeFlags = [
+    "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
+    "-DBUILD_CONFIG=xtrabackup_release"
+    "-DINSTALL_MYSQLTESTDIR=OFF"
+    "-DWITH_BOOST=system"
+    "-DWITH_CURL=system"
+    "-DWITH_EDITLINE=system"
+    "-DWITH_LIBEVENT=system"
+    "-DWITH_LZ4=system"
+    "-DWITH_PROTOBUF=system"
+    "-DWITH_SASL=system"
+    "-DWITH_SSL=system"
+    "-DWITH_ZLIB=system"
+    "-DWITH_VALGRIND=ON"
+    "-DWITH_MAN_PAGES=OFF"
+  ];
+
+  postInstall = ''
+    wrapProgram "$out"/bin/xtrabackup --prefix PERL5LIB : $PERL5LIB
+    rm -r "$out"/lib/plugin/debug
+  '' + extraPostInstall;
+
+  meta = with lib; {
+    description = "Non-blocking backup tool for MySQL";
+    homepage = "http://www.percona.com/software/percona-xtrabackup";
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+    maintainers = teams.flyingcircus.members ++ [ maintainers.izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/pgbackrest/default.nix b/nixpkgs/pkgs/tools/backup/pgbackrest/default.nix
new file mode 100644
index 000000000000..a2c727332554
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/pgbackrest/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, postgresql
+, openssl
+, lz4
+, bzip2
+, libxml2
+, zlib
+, zstd
+, libyaml
+}:
+stdenv.mkDerivation rec {
+  pname = "pgbackrest";
+  version = "2.50";
+
+  src = fetchFromGitHub {
+    owner = "pgbackrest";
+    repo = "pgbackrest";
+    rev = "release/${version}";
+    sha256 = "sha256-RjkTg80LAUndSVfTrol9hvgNOG6PMC+OkMVjdtjpdbI=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ postgresql openssl lz4 bzip2 libxml2 zlib zstd libyaml ];
+
+  postUnpack = ''
+    sourceRoot+=/src
+  '';
+
+  meta = with lib; {
+    description = "Reliable PostgreSQL backup & restore";
+    homepage = "https://pgbackrest.org/";
+    changelog = "https://github.com/pgbackrest/pgbackrest/releases";
+    license = licenses.mit;
+    mainProgram = "pgbackrest";
+    maintainers = with maintainers; [ zaninime ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/pyznap/default.nix b/nixpkgs/pkgs/tools/backup/pyznap/default.nix
new file mode 100644
index 000000000000..81f3a99ecd91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/pyznap/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pyznap";
+  version = "1.6.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "88bf1d6de2c11f14acbdfa01b61eb95c94f95d829ddebdaee3786b64ccb93ae3";
+  };
+
+  propagatedBuildInputs = [
+    setuptools
+  ];
+
+  # tests aren't included in the PyPI packages
+  doCheck = false;
+
+  meta = {
+    homepage = "https://github.com/yboetz/pyznap";
+    description = "ZFS snapshot tool written in python";
+    license = with lib.licenses; [ gpl3 ];
+    maintainers = with lib.maintainers; [ rbrewer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rdedup/default.nix b/nixpkgs/pkgs/tools/backup/rdedup/default.nix
new file mode 100644
index 000000000000..c9b59782a585
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rdedup/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, libsodium
+, xz
+, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rdedup";
+  version = "3.2.1";
+
+  src = fetchFromGitHub {
+    owner = "dpc";
+    repo = "rdedup";
+    rev = "v${version}";
+    sha256 = "sha256-GEYP18CaCQShvCg8T7YTvlybH1LNO34KBxgmsTv2Lzs=";
+  };
+
+  cargoSha256 = "sha256-I6d3IyPBcUsrvlzF7W0hFM4hcXi4wWro9bCeP4eArHI=";
+
+  nativeBuildInputs = [ pkg-config rustPlatform.bindgenHook ];
+  buildInputs = [ openssl libsodium xz ]
+    ++ (lib.optional stdenv.isDarwin Security);
+
+  meta = with lib; {
+    description = "Data deduplication with compression and public key encryption";
+    homepage = "https://github.com/dpc/rdedup";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ dywedir ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rdiff-backup/default.nix b/nixpkgs/pkgs/tools/backup/rdiff-backup/default.nix
new file mode 100644
index 000000000000..58605362f065
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rdiff-backup/default.nix
@@ -0,0 +1,32 @@
+{ lib, python3Packages, fetchPypi, librsync }:
+
+let
+  pypkgs = python3Packages;
+
+in
+pypkgs.buildPythonApplication rec {
+  pname = "rdiff-backup";
+  version = "2.2.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-0HeDVyZrxlE7t/daRXCymySydgNIu/YHur/DpvCUWM8";
+  };
+
+  nativeBuildInputs = with pypkgs; [ setuptools-scm ];
+
+  buildInputs = [ librsync ];
+
+  propagatedBuildInputs = with pypkgs; [ pyyaml ];
+
+  # no tests from pypi
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Backup system trying to combine best a mirror and an incremental backup system";
+    homepage = "https://rdiff-backup.net";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rdup/default.nix b/nixpkgs/pkgs/tools/backup/rdup/default.nix
new file mode 100644
index 000000000000..f75285e9ef97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rdup/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook, glib, pcre }:
+
+stdenv.mkDerivation {
+  pname = "rdup";
+  version = "1.1.15";
+
+  src = fetchFromGitHub {
+    owner = "miekg";
+    repo = "rdup";
+    rev = "d66e4320cd0bbcc83253baddafe87f9e0e83caa6";
+    sha256 = "0bzyv6qmnivxnv9nw7lnfn46k0m1dlxcjj53zcva6v8y8084l1iw";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ glib pcre ];
+
+  meta = {
+    description = "The only backup program that doesn't make backups";
+    homepage    = "https://github.com/miekg/rdup";
+    license    = lib.licenses.gpl3;
+    platforms   = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/restic/0001-Skip-testing-restore-with-permission-failure.patch b/nixpkgs/pkgs/tools/backup/restic/0001-Skip-testing-restore-with-permission-failure.patch
new file mode 100644
index 000000000000..10664b57254c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/restic/0001-Skip-testing-restore-with-permission-failure.patch
@@ -0,0 +1,25 @@
+From 72f7d8abee34107b815e49540f2fad7f1ab0b2cc Mon Sep 17 00:00:00 2001
+From: Simon Bruder <simon@sbruder.de>
+Date: Thu, 25 Feb 2021 09:20:51 +0100
+Subject: [PATCH] Skip testing restore with permission failure
+
+The test fails in sandboxed builds.
+---
+ cmd/restic/cmd_restore_integration_test.go | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/cmd/restic/cmd_restore_integration_test.go b/cmd/restic/cmd_restore_integration_test.go
+index 2c7cbe1fb..f25f13754 100644
+--- a/cmd/restic/cmd_restore_integration_test.go
++++ b/cmd/restic/cmd_restore_integration_test.go
+@@ -200,6 +200,7 @@ func TestRestoreLatest(t *testing.T) {
+ }
+ 
+ func TestRestoreWithPermissionFailure(t *testing.T) {
++	t.Skip("Skipping testing restore with permission failure")
+ 	env, cleanup := withTestEnvironment(t)
+ 	defer cleanup()
+ 
+-- 
+2.41.0
+
diff --git a/nixpkgs/pkgs/tools/backup/restic/default.nix b/nixpkgs/pkgs/tools/backup/restic/default.nix
new file mode 100644
index 000000000000..ad70b31a2a0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/restic/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub, installShellFiles, makeWrapper
+, nixosTests, rclone }:
+
+buildGoModule rec {
+  pname = "restic";
+  version = "0.16.4";
+
+  src = fetchFromGitHub {
+    owner = "restic";
+    repo = "restic";
+    rev = "v${version}";
+    hash = "sha256-TSUhrtSgGIPM/cUzA6WDtCpqCyjtnM5BZDhK6udR0Ek=";
+  };
+
+  patches = [
+    # The TestRestoreWithPermissionFailure test fails in Nix’s build sandbox
+    ./0001-Skip-testing-restore-with-permission-failure.patch
+  ];
+
+  vendorHash = "sha256-E+Erf8AdlMBdep1g2SpI8JKIdJuKqmyWEUmh8Rs5R/o=";
+
+  subPackages = [ "cmd/restic" ];
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  passthru.tests.restic = nixosTests.restic;
+
+  postPatch = ''
+    rm cmd/restic/cmd_mount_integration_test.go
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/restic --prefix PATH : '${rclone}/bin'
+  '' + lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
+    $out/bin/restic generate \
+      --bash-completion restic.bash \
+      --fish-completion restic.fish \
+      --zsh-completion restic.zsh \
+      --man .
+    installShellCompletion restic.{bash,fish,zsh}
+    installManPage *.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://restic.net";
+    changelog = "https://github.com/restic/restic/blob/${src.rev}/CHANGELOG.md";
+    description = "A backup program that is fast, efficient and secure";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.bsd2;
+    maintainers = [ maintainers.mbrgm maintainers.dotlambda ];
+    mainProgram = "restic";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/restic/rest-server.nix b/nixpkgs/pkgs/tools/backup/restic/rest-server.nix
new file mode 100644
index 000000000000..9af1151518b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/restic/rest-server.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "restic-rest-server";
+  version = "0.12.1";
+
+  src = fetchFromGitHub {
+    owner = "restic";
+    repo = "rest-server";
+    rev = "v${version}";
+    hash = "sha256-0zmUI7LUKVXUdPsNxY7RQxbsAraY0GrTMAS3kORIU6I=";
+  };
+
+  vendorHash = "sha256-tD5ffIYULMBqu99l1xCL0RnLB9zNpwNPs1qVFqezUc8=";
+
+  meta = with lib; {
+    changelog = "https://github.com/restic/rest-server/blob/${src.rev}/CHANGELOG.md";
+    description = "A high performance HTTP server that implements restic's REST backend API";
+    homepage = "https://github.com/restic/rest-server";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rotate-backups/default.nix b/nixpkgs/pkgs/tools/backup/rotate-backups/default.nix
new file mode 100644
index 000000000000..d64b0dee50a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rotate-backups/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "rotate-backups";
+  version = "8.1";
+
+  src = fetchFromGitHub {
+    owner = "xolox";
+    repo = "python-rotate-backups";
+    rev = version;
+    sha256 = "0r4dyd7hj403rksgp3vh1azp9n4af75r3wq3x39wxcqizpms3vkx";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    python-dateutil
+    simpleeval
+    update-dotdee
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # https://github.com/xolox/python-rotate-backups/issues/33
+    "test_removal_command"
+  ];
+
+  meta = with lib; {
+    description = "Simple command line interface for backup rotation";
+    homepage = "https://github.com/xolox/python-rotate-backups";
+    license = licenses.mit;
+    maintainers = with maintainers; [ eyjhb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rsbep/default.nix b/nixpkgs/pkgs/tools/backup/rsbep/default.nix
new file mode 100644
index 000000000000..b30ddddb2b07
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rsbep/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, coreutils, gawk, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "rsbep";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "ttsiodras";
+    repo = "rsbep-backup";
+    rev = "v${version}";
+    sha256 = "0is4jgil3wdqbvx9h66xcyzbqy84ndyydnnay2g9k81a4mcz4dns";
+  };
+
+  postFixup = ''
+    cd $out/bin
+
+    # Move internal tool 'rsbep_chopper' to libexec
+    libexecDir=$out/libexec/rsbep
+    mkdir -p $libexecDir
+    mv rsbep_chopper $libexecDir
+
+    # Fix store dependencies in scripts
+    path="export PATH=$out/bin:$libexecDir:${lib.makeBinPath [ coreutils gawk ]}"
+    sed -i "2i$path" freeze.sh
+    sed -i "2i$path" melt.sh
+
+    # Remove unneded binary
+    rm poorZFS.py
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    cd $TMP
+    echo hello > input
+    $out/bin/freeze.sh input > packed
+    $out/bin/melt.sh packed > output
+    diff -u input output
+  '';
+
+  meta = with lib; {
+    description = "Create resilient backups with Reed-Solomon error correction and byte-spreading";
+    homepage = "https://www.thanassis.space/rsbep.html";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.erikarvstedt ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rsnapshot/default.nix b/nixpkgs/pkgs/tools/backup/rsnapshot/default.nix
new file mode 100644
index 000000000000..57883c4f68e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rsnapshot/default.nix
@@ -0,0 +1,28 @@
+{ fetchurl, lib, stdenv, perl, openssh, rsync, logger }:
+
+stdenv.mkDerivation rec {
+  pname = "rsnapshot";
+  version = "1.4.5";
+
+  src = fetchurl {
+    url = "https://rsnapshot.org/downloads/rsnapshot-${version}.tar.gz";
+    sha256 = "sha256-ELdeAcolUR6CZqrNSVUxl1rRqK1VYha2pXx20CizgkI=";
+  };
+
+  propagatedBuildInputs = [perl openssh rsync logger];
+
+  configureFlags = [ "--sysconfdir=/etc --prefix=/" ];
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  patchPhase = ''
+    substituteInPlace "Makefile.in" --replace \
+      "/usr/bin/pod2man" "${perl}/bin/pod2man"
+  '';
+
+  meta = with lib; {
+    description = "A filesystem snapshot utility for making backups of local and remote systems";
+    homepage = "https://rsnapshot.org/";
+    license = lib.licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rustic-rs/default.nix b/nixpkgs/pkgs/tools/backup/rustic-rs/default.nix
new file mode 100644
index 000000000000..b5cae0b17c68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rustic-rs/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+, Security
+, SystemConfiguration
+, installShellFiles
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustic-rs";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "rustic-rs";
+    repo = "rustic";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-jUAmboJTzX4oJZy9rFiPRbm94bVpZGa0SaqotoCU/Ss=";
+  };
+
+  cargoHash = "sha256-iZuWlYDGGziwb49BfKdt9Ahs6oQ0Ij2iiT0tvL7ZIVk=";
+
+  # At the time of writing, upstream defaults to "self-update" and "webdav".
+  # "self-update" is a self-updater, which we don't want in nixpkgs.
+  buildNoDefaultFeatures = true;
+  buildFeatures = [
+    "webdav"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+
+  postInstall = ''
+    for shell in {ba,fi,z}sh; do
+      $out/bin/rustic completions $shell > rustic.$shell
+    done
+
+    installShellCompletion rustic.{ba,fi,z}sh
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = {
+    homepage = "https://github.com/rustic-rs/rustic";
+    changelog = "https://github.com/rustic-rs/rustic/blob/${src.rev}/CHANGELOG.md";
+    description = "fast, encrypted, deduplicated backups powered by pure Rust";
+    mainProgram = "rustic";
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+    license = [ lib.licenses.mit lib.licenses.asl20 ];
+    maintainers = [ lib.maintainers.nobbz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/s3ql/default.nix b/nixpkgs/pkgs/tools/backup/s3ql/default.nix
new file mode 100644
index 000000000000..e2e68109b801
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/s3ql/default.nix
@@ -0,0 +1,37 @@
+{ lib, fetchFromGitHub, python3Packages, sqlite, which }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "s3ql";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/release-${version}";
+    sha256 = "sha256-7N09b7JwMPliuyv2fEy1gQYaFCMSSvajOBPhNL3DQsg=";
+  };
+
+  nativeCheckInputs = [ which ] ++ (with python3Packages; [ cython pytest pytest-trio ]);
+  propagatedBuildInputs = with python3Packages; [
+    sqlite apsw pycrypto requests defusedxml dugong
+    google-auth google-auth-oauthlib trio pyfuse3
+  ];
+
+  preBuild = ''
+    ${python3Packages.python.pythonOnBuildForHost.interpreter} ./setup.py build_cython build_ext --inplace
+  '';
+
+  checkPhase = ''
+    # Removing integration tests
+    rm tests/t{4,5,6}_*
+    pytest tests
+  '';
+
+  meta = with lib; {
+    description = "A full-featured file system for online data storage";
+    homepage = "https://github.com/s3ql/s3ql/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ rushmorem ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/sanoid/default.nix b/nixpkgs/pkgs/tools/backup/sanoid/default.nix
new file mode 100644
index 000000000000..f37a47149067
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/sanoid/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchFromGitHub, nixosTests, makeWrapper, zfs
+, perlPackages, procps, which, openssh, mbuffer, pv, lzop, gzip, pigz }:
+
+stdenv.mkDerivation rec {
+  pname = "sanoid";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "jimsalterjrs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-qfRGZ10fhLL4tJL97VHrdOkO/4OVpa087AsL9t8LMmk=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = with perlPackages; [ perl ConfigIniFiles CaptureTiny ];
+
+  passthru.tests = nixosTests.sanoid;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    mkdir -p "$out/etc/sanoid"
+    cp sanoid.defaults.conf "$out/etc/sanoid/sanoid.defaults.conf"
+    # Hardcode path to default config
+    substitute sanoid "$out/bin/sanoid" \
+      --replace "\$args{'configdir'}/sanoid.defaults.conf" "$out/etc/sanoid/sanoid.defaults.conf"
+    chmod +x "$out/bin/sanoid"
+    # Prefer ZFS userspace tools from /run/booted-system/sw/bin to avoid
+    # incompatibilities with the ZFS kernel module.
+    wrapProgram "$out/bin/sanoid" \
+      --prefix PERL5LIB : "$PERL5LIB" \
+      --prefix PATH : "${lib.makeBinPath [ procps "/run/booted-system/sw" zfs ]}"
+
+    install -m755 syncoid "$out/bin/syncoid"
+    wrapProgram "$out/bin/syncoid" \
+      --prefix PERL5LIB : "$PERL5LIB" \
+      --prefix PATH : "${lib.makeBinPath [ openssh procps which pv mbuffer lzop gzip pigz "/run/booted-system/sw" zfs ]}"
+
+    install -m755 findoid "$out/bin/findoid"
+    wrapProgram "$out/bin/findoid" \
+      --prefix PERL5LIB : "$PERL5LIB" \
+      --prefix PATH : "${lib.makeBinPath [ "/run/booted-system/sw" zfs ]}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A policy-driven snapshot management tool for ZFS filesystems";
+    homepage = "https://github.com/jimsalterjrs/sanoid";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lopsided98 Frostman ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/sigtop/default.nix b/nixpkgs/pkgs/tools/backup/sigtop/default.nix
new file mode 100644
index 000000000000..b83dd061efe4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/sigtop/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  name = "sigtop";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "tbvdm";
+    repo = "sigtop";
+    rev = "v${version}";
+    sha256 = "sha256-I1gZpzs7GtoS+EQIHXTc9laHMO68uNnIm7eVja3b8BE=";
+  };
+
+  vendorHash = "sha256-9IhUGbcDeStFfQV+VEvPCwJUEvrsoiHdWxO0UHxQzqc=";
+
+  makeFlags = [
+    "PREFIX=\${out}"
+  ];
+
+  meta = with lib; {
+    description = "Utility to export messages, attachments and other data from Signal Desktop";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ fricklerhandwerk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/stenc/default.nix b/nixpkgs/pkgs/tools/backup/stenc/default.nix
new file mode 100644
index 000000000000..fb8d71c73119
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/stenc/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gitUpdater
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stenc";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "scsitape";
+    repo = "stenc";
+    rev = version;
+    sha256 = "GcCRVkv+1mREq3MhMRn5fICthwI4WRQJSP6InuzxP1Q=";
+  };
+
+  postPatch = ''
+    # Fix gcc-13 build by pulling missing header. UPstream also fixed it
+    # in next major version, but there are many other patch dependencies.
+    # TODO: remove on next major version update
+    sed -e '1i #include <cstdint>' -i src/scsiencrypt.h
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = {
+    description = "SCSI Tape Encryption Manager";
+    homepage = "https://github.com/scsitape/stenc";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ woffs ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/store-backup/default.nix b/nixpkgs/pkgs/tools/backup/store-backup/default.nix
new file mode 100644
index 000000000000..afa667ec0725
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/store-backup/default.nix
@@ -0,0 +1,110 @@
+{lib, stdenv, which, coreutils, perl, fetchurl, makeWrapper, diffutils , writeScriptBin, bzip2}:
+
+# quick usage:
+# storeBackup.pl --sourceDir /home/user --backupDir /tmp/my_backup_destination
+# Its slow the first time because it compresses all files bigger than 1k (default setting)
+# The backup tool is bookkeeping which files got compressed
+
+# btrfs warning: you may run out of hardlinks soon
+
+# known impurity: test cases seem to bu using /tmp/storeBackup.lock ..
+
+let dummyMount = writeScriptBin "mount" "#!${stdenv.shell}";
+in
+
+stdenv.mkDerivation rec {
+
+  version = "3.5";
+
+  pname = "store-backup";
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/storebackup/storeBackup-${version}.tar.bz2";
+    sha256 = "0y4gzssc93x6y93mjsxm5b5cdh68d7ffa43jf6np7s7c99xxxz78";
+  };
+
+  installPhase = ''
+    mkdir -p $out/scripts
+    mv * $out
+    mv $out/_ATTENTION_ $out/doc
+    mv $out/{correct.sh,cron-storebackup} $out/scripts
+
+    find $out -name "*.pl" | xargs sed -i \
+      -e 's@/bin/pwd@${coreutils}/bin/pwd@' \
+      -e 's@/bin/sync@${coreutils}/bin/sync@' \
+      -e '1 s@/usr/bin/env perl@${perl.withPackages (p: [ p.DBFile ])}/bin/perl@'
+
+    for p in $out/bin/*
+      do wrapProgram "$p" --prefix PATH ":" "${lib.makeBinPath [ which bzip2 ]}"
+    done
+
+    patchShebangs $out
+    # do a dummy test ensuring this works
+
+    PATH=$PATH:${dummyMount}/bin
+
+
+    { # simple sanity test, test backup/restore of simple store paths
+
+      mkdir backup
+
+      backupRestore(){
+        source="$2"
+        echo =========
+        echo RUNNING TEST "$1" source: "$source"
+        mkdir restored
+
+        $out/bin/storeBackup.pl --sourceDir "$source" --backupDir backup
+        latestBackup=backup/default/$(ls -1 backup/default | sort | tail -n 1)
+        $out/bin/storeBackupRecover.pl -b "$latestBackup" -t restored -r /
+        ${diffutils}/bin/diff -r "$source" restored
+
+        # storeBackupCheckSource should return 0
+        $out/bin/storeBackupCheckSource.pl -s "$source" -b "$latestBackup"
+        # storeBackupCheckSource should return not 0 when using different source
+        ! $out/bin/storeBackupCheckSource.pl -s $TMP -b "$latestBackup"
+
+        # storeBackupCheckBackup should return 0
+        $out/bin/storeBackupCheckBackup.pl -c "$latestBackup"
+
+        chmod -R +w restored
+        rm -fr restored
+      }
+
+      testDir=$TMP/testDir
+
+      mkdir $testDir
+      echo X > $testDir/X
+      ln -s ./X $testDir/Y
+
+      backupRestore 'test 1: backup, restore' $testDir
+
+      # test huge blocks, according to docs files bigger than 100MB get split
+      # into pieces
+      dd if=/dev/urandom bs=100M of=block-1 count=1
+      dd if=/dev/urandom bs=100M of=block-2 count=1
+      cat block-1 block-2 > $testDir/block
+      backupRestore 'test 1 with huge block' $testDir
+
+      cat block-2 block-1 > $testDir/block
+      backupRestore 'test 1 with huge block reversed' $testDir
+
+      backupRestore 'test 2: backup, restore' $out
+      backupRestore 'test 3: backup, restore' $out
+      backupRestore 'test 4: backup diffutils to same backup locations, restore' ${diffutils}
+    }
+  '';
+
+  meta = {
+    description = "A backup suite that stores files on other disks";
+    homepage = "https://savannah.nongnu.org/projects/storebackup";
+    license = lib.licenses.gpl3Plus;
+    maintainers = [lib.maintainers.marcweber];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/tarsnap/default.nix b/nixpkgs/pkgs/tools/backup/tarsnap/default.nix
new file mode 100644
index 000000000000..ad7fc761d843
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/tarsnap/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, openssl, zlib, e2fsprogs, bzip2 }:
+
+let
+  zshCompletion = fetchurl {
+    url = "https://gist.githubusercontent.com/thoughtpolice/daa9431044883d3896f6/raw/282360677007db9739e5bf229873d3b231eb303a/tarsnap.zsh";
+    sha256 = "0pawqwichzpz29rva7mh8lpx4zznnrh2rqyzzj6h7z98l0dxpair";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "tarsnap";
+  version = "1.0.40";
+
+  src = fetchurl {
+    url = "https://www.tarsnap.com/download/tarsnap-autoconf-${version}.tgz";
+    sha256 = "1mbzq81l4my5wdhyxyma04sblr43m8p7ryycbpi6n78w1hwfbjmw";
+  };
+
+  preConfigure = ''
+    configureFlags="--with-bash-completion-dir=$out/share/bash-completion/completions"
+  '';
+
+  patchPhase = ''
+    substituteInPlace Makefile.in \
+      --replace "command -p mv" "mv"
+    substituteInPlace configure \
+      --replace "command -p getconf PATH" "echo $PATH"
+  '';
+
+  postInstall = ''
+    # Install some handy-dandy shell completions
+    install -m 444 -D ${zshCompletion} $out/share/zsh/site-functions/_tarsnap
+  '';
+
+  buildInputs = [ openssl zlib ] ++ lib.optional stdenv.isLinux e2fsprogs
+                ++ lib.optional stdenv.isDarwin bzip2;
+
+  meta = {
+    description = "Online backups for the truly paranoid";
+    homepage    = "http://www.tarsnap.com/";
+    license     = lib.licenses.unfree;
+    platforms   = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ thoughtpolice roconnor ];
+    mainProgram = "tarsnap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/tarsnapper/default.nix b/nixpkgs/pkgs/tools/backup/tarsnapper/default.nix
new file mode 100644
index 000000000000..b4d731984f71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/tarsnapper/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, fetchpatch
+, tarsnap
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "tarsnapper";
+  version = "0.5";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "miracle2k";
+    repo = pname;
+    rev = version;
+    hash = "sha256-5i9eum9hbh6VFhvEIDq5Uapy6JtIbf9jZHhRYZVoC1w=";
+  };
+
+  patches = [
+    # Fix failing tests when default_deltas is None
+    (fetchpatch {
+      url = "https://github.com/miracle2k/tarsnapper/commit/2ee33ce748b9bb42d559cc2c0104115732cb4150.patch";
+      hash = "sha256-fEXGhzlfB+J5lw1pcsC5Ne7I8UMnDzwyyCx/zm15+fU=";
+    })
+  ];
+
+  nativeBuildInputs = with python3Packages; [
+    pythonRelaxDepsHook
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pyyaml
+    python-dateutil
+    pexpect
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+    nose
+  ];
+
+  # Remove standard module argparse from requirements
+  pythonRemoveDeps = [ "argparse" ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ tarsnap ]}" ];
+
+  pythonImportsCheck = [ "tarsnapper" ];
+
+  meta = with lib; {
+    description = "Wrapper which expires backups using a gfs-scheme";
+    homepage = "https://github.com/miracle2k/tarsnapper";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ gmacon ];
+    mainProgram = "tarsnapper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/tsm-client/default.nix b/nixpkgs/pkgs/tools/backup/tsm-client/default.nix
new file mode 100644
index 000000000000..dedc7fdcd8e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/tsm-client/default.nix
@@ -0,0 +1,208 @@
+{ lib
+, callPackage
+, nixosTests
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, rpmextract
+, libxcrypt-legacy
+, zlib
+, lvm2  # LVM image backup and restore functions (optional)
+, acl  # EXT2/EXT3/XFS ACL support (optional)
+, gnugrep
+, procps
+, jdk8  # Java GUI (needed for `enableGui`)
+, buildEnv
+, makeWrapper
+, enableGui ? false  # enables Java GUI `dsmj`
+# path to `dsm.sys` configuration files
+, dsmSysCli ? "/etc/tsm-client/cli.dsm.sys"
+, dsmSysApi ? "/etc/tsm-client/api.dsm.sys"
+}:
+
+
+# For an explanation of optional packages
+# (features provided by them, version limits), see
+# https://www.ibm.com/support/pages/node/660813#Version%208.1
+
+
+# IBM Tivoli Storage Manager Client uses a system-wide
+# client system-options file `dsm.sys` and expects it
+# to be located in a directory within the package.
+# Note that the command line client and the API use
+# different "dms.sys" files (located in different directories).
+# Since these files contain settings to be altered by the
+# admin user (e.g. TSM server name), we create symlinks
+# in place of the files that the client attempts to open.
+# Use the arguments `dsmSysCli` and `dsmSysApi` to
+# provide the location of the configuration files for
+# the command-line interface and the API, respectively.
+#
+# While the command-line interface contains wrappers
+# that help the executables find the configuration file,
+# packages that link against the API have to
+# set the environment variable `DSMI_DIR` to
+# point to this derivations `/dsmi_dir` directory symlink.
+# Other environment variables might be necessary,
+# depending on local configuration or usage; see:
+# https://www.ibm.com/docs/en/storage-protect/8.1.21?topic=solaris-set-api-environment-variables
+
+
+# The newest version of TSM client should be discoverable by
+# going to the `downloadPage` (see `meta` below).
+# Find the "Backup-archive client" table on that page.
+# Look for "Download Documents" of the latest release.
+# Follow the "Download Information" link.
+# Look for the "Linux x86_64 ..." rows in the table at
+# the bottom of the page and follow their "HTTPS" links (one
+# link per row -- each link might point to the latest release).
+# In the directory listings to show up,
+# check the big `.tar` file.
+#
+# (as of 2023-07-01)
+
+
+let
+
+  meta = {
+    homepage = "https://www.ibm.com/products/storage-protect";
+    downloadPage = "https://www.ibm.com/support/pages/ibm-storage-protect-downloads-latest-fix-packs-and-interim-fixes";
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "dsmc";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    maintainers = [ lib.maintainers.yarny ];
+    description = "IBM Storage Protect (Tivoli Storage Manager) CLI and API";
+    longDescription = ''
+      IBM Storage Protect (Tivoli Storage Manager) provides
+      a single point of control for backup and recovery.
+      This package contains the client software, that is,
+      a command line client and linkable libraries.
+
+      Note that the software requires a system-wide
+      client system-options file (commonly named "dsm.sys").
+      This package allows to use separate files for
+      the command-line interface and for the linkable API.
+      The location of those files can
+      be provided as build parameters.
+    '';
+  };
+
+  passthru.tests = {
+    test-cli = callPackage ./test-cli.nix {};
+    test-gui = nixosTests.tsm-client-gui;
+  };
+
+  mkSrcUrl = version:
+    let
+      major = lib.versions.major version;
+      minor = lib.versions.minor version;
+      patch = lib.versions.patch version;
+      fixup = lib.lists.elemAt (lib.versions.splitVersion version) 3;
+    in
+      "https://public.dhe.ibm.com/storage/tivoli-storage-management/${if fixup=="0" then "maintenance" else "patches"}/client/v${major}r${minor}/Linux/LinuxX86/BA/v${major}${minor}${patch}/${version}-TIV-TSMBAC-LinuxX86.tar";
+
+  unwrapped = stdenv.mkDerivation rec {
+    name = "tsm-client-${version}-unwrapped";
+    version = "8.1.21.0";
+    src = fetchurl {
+      url = mkSrcUrl version;
+      hash = "sha512-iXkVYQsqbNhQJmrYl5a5433iSl6kg6YzlTlgCzpFGslMn+3ynSmYn8Rtxwitp931SwmV4a53tGctSuisz8pOCg==";
+    };
+    inherit meta passthru;
+
+    nativeBuildInputs = [
+      autoPatchelfHook
+      rpmextract
+    ];
+    buildInputs = [
+      libxcrypt-legacy
+      stdenv.cc.cc
+      zlib
+    ];
+    runtimeDependencies = [
+      (lib.attrsets.getLib lvm2)
+    ];
+    sourceRoot = ".";
+
+    postUnpack = ''
+      rpmextract TIVsm-API64.x86_64.rpm
+      rpmextract TIVsm-APIcit.x86_64.rpm
+      rpmextract TIVsm-BA.x86_64.rpm
+      rpmextract TIVsm-BAcit.x86_64.rpm
+      rpmextract TIVsm-BAhdw.x86_64.rpm
+      rpmextract TIVsm-JBB.x86_64.rpm
+      # use globbing so that version updates don't break the build:
+      rpmextract gskcrypt64-*.linux.x86_64.rpm
+      rpmextract gskssl64-*.linux.x86_64.rpm
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      mkdir --parents $out
+      mv --target-directory=$out usr/* opt
+      runHook postInstall
+    '';
+
+    # fix relative symlinks after `/usr` was moved up one level,
+    # fix absolute symlinks pointing to `/opt`
+    preFixup = ''
+      for link in $out/lib{,64}/* $out/bin/*
+      do
+        target=$(readlink "$link")
+        if [ "$(cut -b -6 <<< "$target")" != "../../" ]
+        then
+          echo "cannot fix this symlink: $link -> $target"
+          exit 1
+        fi
+        ln --symbolic --force --no-target-directory "$out/$(cut -b 7- <<< "$target")" "$link"
+      done
+      for link in $(find $out -type l -lname '/opt/*')
+      do
+        ln --symbolic --force --no-target-directory "$out$(readlink "$link")" "$link"
+      done
+    '';
+  };
+
+  binPath = lib.makeBinPath ([ acl gnugrep procps ]
+    ++ lib.optional enableGui jdk8);
+
+in
+
+buildEnv {
+  name = "tsm-client-${unwrapped.version}";
+  meta = meta // lib.attrsets.optionalAttrs enableGui {
+    mainProgram = "dsmj";
+  };
+  passthru = passthru // { inherit unwrapped; };
+  paths = [ unwrapped ];
+  nativeBuildInputs = [ makeWrapper ];
+  pathsToLink = [
+    "/"
+    "/bin"
+    "/opt/tivoli/tsm/client/ba/bin"
+    "/opt/tivoli/tsm/client/api/bin64"
+  ];
+  # * Provide top-level symlinks `dsm_dir` and `dsmi_dir`
+  #   to the so-called "installation directories"
+  # * Add symlinks to the "installation directories"
+  #   that point to the `dsm.sys` configuration files
+  # * Drop the Java GUI executable unless `enableGui` is set
+  # * Create wrappers for the command-line interface to
+  #   prepare `PATH` and `DSM_DIR` environment variables
+  postBuild = ''
+    ln --symbolic --no-target-directory opt/tivoli/tsm/client/ba/bin $out/dsm_dir
+    ln --symbolic --no-target-directory opt/tivoli/tsm/client/api/bin64 $out/dsmi_dir
+    ln --symbolic --no-target-directory "${dsmSysCli}" $out/dsm_dir/dsm.sys
+    ln --symbolic --no-target-directory "${dsmSysApi}" $out/dsmi_dir/dsm.sys
+    ${lib.optionalString (!enableGui) "rm $out/bin/dsmj"}
+    for bin in $out/bin/*
+    do
+      target=$(readlink "$bin")
+      rm "$bin"
+      makeWrapper "$target" "$bin" \
+        --prefix PATH : "$out/dsm_dir:${binPath}" \
+        --set DSM_DIR $out/dsm_dir
+    done
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/backup/tsm-client/test-cli.nix b/nixpkgs/pkgs/tools/backup/tsm-client/test-cli.nix
new file mode 100644
index 000000000000..0858083c9f90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/tsm-client/test-cli.nix
@@ -0,0 +1,58 @@
+{ lib
+, writeText
+, runCommand
+, tsm-client
+}:
+
+# Let the client try to connect to a server.
+# We can't simulate a server, so there's no more to test.
+
+let
+
+  # 192.0.0.8 is a "dummy address" according to RFC 7600
+  dsmSysCli = writeText "cli.dsm.sys" ''
+    defaultserver  testserver
+    server  testserver
+      commmethod  v6tcpip
+      tcpserveraddress  192.0.0.8
+      nodename  ARBITRARYNODENAME
+  '';
+
+  tsm-client_ = tsm-client.override { inherit dsmSysCli; };
+
+  env.nativeBuildInputs = [ tsm-client_ ];
+
+  versionString =
+    let
+      inherit (tsm-client_.passthru.unwrapped) version;
+      major = lib.versions.major version;
+      minor = lib.versions.minor version;
+      patch = lib.versions.patch version;
+      fixup = lib.lists.elemAt (lib.versions.splitVersion version) 3;
+    in
+      "Client Version ${major}, Release ${minor}, Level ${patch}.${fixup}";
+
+in
+
+runCommand "${tsm-client.name}-test-cli" env ''
+  set -o nounset
+  set -o pipefail
+
+  export DSM_LOG=$(mktemp -d ./dsm_log.XXXXXXXXXXX)
+
+  { dsmc -optfile=/dev/null || true; } | tee dsmc-stdout
+
+  # does it report the correct version?
+  grep --fixed-strings '${versionString}' dsmc-stdout
+
+  # does it use the provided dsm.sys config file?
+  # if it does, it states the node's name
+  grep ARBITRARYNODENAME dsmc-stdout
+
+  # does it try (and fail) to connect to the server?
+  # if it does, it reports the "TCP/IP connection failure" error code
+  grep ANS1017E dsmc-stdout
+  grep ANS1017E $DSM_LOG/dsmerror.log
+
+  touch $out
+''
diff --git a/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/default.nix b/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/default.nix
new file mode 100644
index 000000000000..8c37a7b72ac7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/default.nix
@@ -0,0 +1,31 @@
+{ pkgs, lib, eggDerivation, fetchegg }:
+let
+  eggs = import ./eggs.nix { inherit eggDerivation fetchegg; };
+in with pkgs; eggDerivation rec {
+  pname = "ugarit-manifest-maker";
+  version = "0.1";
+  name = "${pname}-${version}";
+
+  src = fetchegg {
+    inherit version;
+    name = pname;
+    sha256 = "1jv8lhn4s5a3qphqd3zfwl1py0m5cmqj1h55ys0935m5f422547q";
+  };
+
+  buildInputs = with eggs; [
+    matchable
+    srfi-37
+    fnmatch
+    miscmacros
+    ugarit
+    numbers
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.kitten-technologies.co.uk/project/ugarit-manifest-maker/";
+    description = "A tool for generating import manifests for Ugarit";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/eggs.nix b/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/eggs.nix
new file mode 100644
index 000000000000..889d698188e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/eggs.nix
@@ -0,0 +1,431 @@
+{ eggDerivation, fetchegg }:
+rec {
+  blob-utils = eggDerivation {
+    name = "blob-utils-1.0.3";
+
+    src = fetchegg {
+      name = "blob-utils";
+      version = "1.0.3";
+      sha256 = "17vdn02fnxnjx5ixgqimln93lqvzyq4y9w02fw7xnbdcjzqm0xml";
+    };
+
+    buildInputs = [
+      setup-helper
+      string-utils
+    ];
+  };
+
+  check-errors = eggDerivation {
+    name = "check-errors-1.13.0";
+
+    src = fetchegg {
+      name = "check-errors";
+      version = "1.13.0";
+      sha256 = "12a0sn82n98jybh72zb39fdddmr5k4785xglxb16750fhy8rmjwi";
+    };
+
+    buildInputs = [
+      setup-helper
+    ];
+  };
+
+  crypto-tools = eggDerivation {
+    name = "crypto-tools-1.3";
+
+    src = fetchegg {
+      name = "crypto-tools";
+      version = "1.3";
+      sha256 = "0442wly63zis19vh8xc9nhxgp9sabaccxylpzmchd5f1d48iag65";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  fnmatch = eggDerivation {
+    name = "fnmatch-1.0.1";
+
+    src = fetchegg {
+      name = "fnmatch";
+      version = "1.0.1";
+      sha256 = "1m3jmyhkyqmjr7v628g6w5n3cqihcfnryrxn91k4597q7vjhikqr";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  foreigners = eggDerivation {
+    name = "foreigners-1.4.1";
+
+    src = fetchegg {
+      name = "foreigners";
+      version = "1.4.1";
+      sha256 = "07nvyadhkd52q0kkvch1a5d7ivpmrhmyg295s4mxb1nw4wz46gfz";
+    };
+
+    buildInputs = [
+      matchable
+    ];
+  };
+
+  lookup-table = eggDerivation {
+    name = "lookup-table-1.13.5";
+
+    src = fetchegg {
+      name = "lookup-table";
+      version = "1.13.5";
+      sha256 = "1nzly6rhynawlvzlyilk8z8cxz57cf9n5iv20glkhh28pz2izmrb";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+      miscmacros
+      record-variants
+      synch
+    ];
+  };
+
+  lru-cache = eggDerivation {
+    name = "lru-cache-0.5.3";
+
+    src = fetchegg {
+      name = "lru-cache";
+      version = "0.5.3";
+      sha256 = "0z6g3106c4j21v968hfzy9nnbfq2d83y0nyd20aifpq4g55c0d40";
+    };
+
+    buildInputs = [
+      record-variants
+    ];
+  };
+
+  matchable = eggDerivation {
+    name = "matchable-3.3";
+
+    src = fetchegg {
+      name = "matchable";
+      version = "3.3";
+      sha256 = "07y3lpzgm4djiwi9y2adc796f9kwkmdr28fkfkw65syahdax8990";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  message-digest = eggDerivation {
+    name = "message-digest-3.1.0";
+
+    src = fetchegg {
+      name = "message-digest";
+      version = "3.1.0";
+      sha256 = "1w6bax19dwgih78vcimiws0rja7qsd8hmbm6qqg2hf9cw3vab21s";
+    };
+
+    buildInputs = [
+      setup-helper
+      miscmacros
+      check-errors
+      variable-item
+      blob-utils
+      string-utils
+    ];
+  };
+
+  miscmacros = eggDerivation {
+    name = "miscmacros-2.96";
+
+    src = fetchegg {
+      name = "miscmacros";
+      version = "2.96";
+      sha256 = "1ajdgjrni10i2hmhcp4rawnxajjxry3kmq1krdmah4sf0kjrgajc";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  numbers = eggDerivation {
+    name = "numbers-4.4";
+
+    src = fetchegg {
+      name = "numbers";
+      version = "4.4";
+      sha256 = "0bg5zs6jcr9arj4a7r2xqxf2n17bx93640jaivgchbdj1gixranm";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  parley = eggDerivation {
+    name = "parley-0.9.2";
+
+    src = fetchegg {
+      name = "parley";
+      version = "0.9.2";
+      sha256 = "1vsbx4dk1240gzq02slzmavd1jrq04qj7ssnvg15h8xh81xwhbbz";
+    };
+
+    buildInputs = [
+      stty
+      srfi-71
+      miscmacros
+    ];
+  };
+
+  pathname-expand = eggDerivation {
+    name = "pathname-expand-0.1";
+
+    src = fetchegg {
+      name = "pathname-expand";
+      version = "0.1";
+      sha256 = "14llya7l04z49xpi3iylk8aglrw968vy304ymavhhqlyzmzwkx3g";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  posix-extras = eggDerivation {
+    name = "posix-extras-0.1.6";
+
+    src = fetchegg {
+      name = "posix-extras";
+      version = "0.1.6";
+      sha256 = "0gnmhn2l0161ham7f8i0lx1ay94ap8l8l7ga4nw9qs86lk024abi";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  record-variants = eggDerivation {
+    name = "record-variants-0.5.1";
+
+    src = fetchegg {
+      name = "record-variants";
+      version = "0.5.1";
+      sha256 = "15wgysxkm8m4hx9nhhw9akchzipdnqc7yj3qd3zn0z7sxg4sld1h";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  regex = eggDerivation {
+    name = "regex-1.0";
+
+    src = fetchegg {
+      name = "regex";
+      version = "1.0";
+      sha256 = "1z9bh7xvab6h5cdlsz8jk02pv5py1i6ryqarbcs3wdgkkjgmmkif";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  setup-helper = eggDerivation {
+    name = "setup-helper-1.5.5";
+
+    src = fetchegg {
+      name = "setup-helper";
+      version = "1.5.5";
+      sha256 = "1lpplp8f2wyc486dd98gs4wl1kkhh1cs6vdqkxrdk7f92ikmwbx3";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  sql-de-lite = eggDerivation {
+    name = "sql-de-lite-0.6.6";
+
+    src = fetchegg {
+      name = "sql-de-lite";
+      version = "0.6.6";
+      sha256 = "1mh3hpsibq2gxcpjaycqa4ckznj268xpfzsa6pn0i6iac6my3qra";
+    };
+
+    buildInputs = [
+      lru-cache
+      foreigners
+    ];
+  };
+
+  srfi-37 = eggDerivation {
+    name = "srfi-37-1.3.1";
+
+    src = fetchegg {
+      name = "srfi-37";
+      version = "1.3.1";
+      sha256 = "1a2zdkdzrv15fw9dfdy8067fsgh4kr8ppffm8mc3cmlczrrd58cb";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  srfi-71 = eggDerivation {
+    name = "srfi-71-1.1";
+
+    src = fetchegg {
+      name = "srfi-71";
+      version = "1.1";
+      sha256 = "01mlaxw2lfczykmx69xki2s0f4ywlg794rl4kz07plvzn0s3fbqq";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  ssql = eggDerivation {
+    name = "ssql-0.2.4";
+
+    src = fetchegg {
+      name = "ssql";
+      version = "0.2.4";
+      sha256 = "0qhnghhx1wrvav4s7l780mspwlh8s6kzq4bl0cslwp1km90fx9bk";
+    };
+
+    buildInputs = [
+      matchable
+    ];
+  };
+
+  string-utils = eggDerivation {
+    name = "string-utils-1.2.4";
+
+    src = fetchegg {
+      name = "string-utils";
+      version = "1.2.4";
+      sha256 = "07alvghg0dahilrm4jg44bndl0x69sv1zbna9l20cbdvi35i0jp1";
+    };
+
+    buildInputs = [
+      setup-helper
+      miscmacros
+      lookup-table
+      check-errors
+    ];
+  };
+
+  stty = eggDerivation {
+    name = "stty-0.2.6";
+
+    src = fetchegg {
+      name = "stty";
+      version = "0.2.6";
+      sha256 = "09jmjpdsd3yg6d0f0imcihmn49i28x09lgl60i2dllffs25k22s4";
+    };
+
+    buildInputs = [
+      setup-helper
+      foreigners
+    ];
+  };
+
+  synch = eggDerivation {
+    name = "synch-2.1.2";
+
+    src = fetchegg {
+      name = "synch";
+      version = "2.1.2";
+      sha256 = "1m9mnbq0m5jsxmd1a3rqpwpxj0l1b7vn1fknvxycc047pmlcyl00";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+    ];
+  };
+
+  tiger-hash = eggDerivation {
+    name = "tiger-hash-3.1.0";
+
+    src = fetchegg {
+      name = "tiger-hash";
+      version = "3.1.0";
+      sha256 = "0j9dsbjp9cw0y4w4srg0qwgh53jw2v3mx4y4h040ds0fkxlzzknx";
+    };
+
+    buildInputs = [
+      message-digest
+    ];
+  };
+
+  ugarit = eggDerivation {
+    name = "ugarit-2.0";
+
+    src = fetchegg {
+      name = "ugarit";
+      version = "2.0";
+      sha256 = "1l5zkr6b8l5dw9p5mimbva0ncqw1sbvp3d4cywm1hqx2m03a0f1n";
+    };
+
+    buildInputs = [
+      miscmacros
+      sql-de-lite
+      crypto-tools
+      srfi-37
+      stty
+      matchable
+      regex
+      tiger-hash
+      message-digest
+      posix-extras
+      parley
+      ssql
+      pathname-expand
+    ];
+  };
+
+  ugarit-manifest-maker = eggDerivation {
+    name = "ugarit-manifest-maker-0.1";
+
+    src = fetchegg {
+      name = "ugarit-manifest-maker";
+      version = "0.1";
+      sha256 = "1jv8lhn4s5a3qphqd3zfwl1py0m5cmqj1h55ys0935m5f422547q";
+    };
+
+    buildInputs = [
+      matchable
+      srfi-37
+      fnmatch
+      miscmacros
+      ugarit
+      numbers
+    ];
+  };
+
+  variable-item = eggDerivation {
+    name = "variable-item-1.3.1";
+
+    src = fetchegg {
+      name = "variable-item";
+      version = "1.3.1";
+      sha256 = "19b3mhb8kr892sz9yyzq79l0vv28dgilw9cf415kj6aq16yp4d5n";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+    ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/backup/ugarit/default.nix b/nixpkgs/pkgs/tools/backup/ugarit/default.nix
new file mode 100644
index 000000000000..39c11cc0c91a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/ugarit/default.nix
@@ -0,0 +1,41 @@
+{ pkgs, lib, eggDerivation, fetchegg }:
+let
+  eggs = import ./eggs.nix { inherit eggDerivation fetchegg; };
+in with pkgs; eggDerivation rec {
+  pname = "ugarit";
+  version = "2.0";
+  name = "${pname}-${version}";
+
+  src = fetchegg {
+    inherit version;
+    name = pname;
+    sha256 = "1l5zkr6b8l5dw9p5mimbva0ncqw1sbvp3d4cywm1hqx2m03a0f1n";
+  };
+
+  buildInputs = with eggs; [
+    aes
+    crypto-tools
+    matchable
+    message-digest
+    miscmacros
+    parley
+    pathname-expand
+    posix-extras
+    regex
+    sha2
+    sql-de-lite
+    srfi-37
+    ssql
+    stty
+    tiger-hash
+    z3
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.kitten-technologies.co.uk/project/ugarit/";
+    description = "A backup/archival system based around content-addressible storage";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/ugarit/eggs.nix b/nixpkgs/pkgs/tools/backup/ugarit/eggs.nix
new file mode 100644
index 000000000000..fe958cb55cc6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/ugarit/eggs.nix
@@ -0,0 +1,486 @@
+{ eggDerivation, fetchegg }:
+rec {
+  aes = eggDerivation {
+    name = "aes-1.5";
+
+    src = fetchegg {
+      name = "aes";
+      version = "1.5";
+      sha256 = "0gjlvz5nk0fnaclljpyfk21rkf0nidjj6wcv3jbnpmfafgjny5fi";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  blob-utils = eggDerivation {
+    name = "blob-utils-1.0.3";
+
+    src = fetchegg {
+      name = "blob-utils";
+      version = "1.0.3";
+      sha256 = "17vdn02fnxnjx5ixgqimln93lqvzyq4y9w02fw7xnbdcjzqm0xml";
+    };
+
+    buildInputs = [
+      setup-helper
+      string-utils
+    ];
+  };
+
+  check-errors = eggDerivation {
+    name = "check-errors-1.13.0";
+
+    src = fetchegg {
+      name = "check-errors";
+      version = "1.13.0";
+      sha256 = "12a0sn82n98jybh72zb39fdddmr5k4785xglxb16750fhy8rmjwi";
+    };
+
+    buildInputs = [
+      setup-helper
+    ];
+  };
+
+  crypto-tools = eggDerivation {
+    name = "crypto-tools-1.3";
+
+    src = fetchegg {
+      name = "crypto-tools";
+      version = "1.3";
+      sha256 = "0442wly63zis19vh8xc9nhxgp9sabaccxylpzmchd5f1d48iag65";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  foreigners = eggDerivation {
+    name = "foreigners-1.4.1";
+
+    src = fetchegg {
+      name = "foreigners";
+      version = "1.4.1";
+      sha256 = "07nvyadhkd52q0kkvch1a5d7ivpmrhmyg295s4mxb1nw4wz46gfz";
+    };
+
+    buildInputs = [
+      matchable
+    ];
+  };
+
+  lookup-table = eggDerivation {
+    name = "lookup-table-1.13.5";
+
+    src = fetchegg {
+      name = "lookup-table";
+      version = "1.13.5";
+      sha256 = "1nzly6rhynawlvzlyilk8z8cxz57cf9n5iv20glkhh28pz2izmrb";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+      miscmacros
+      record-variants
+      synch
+    ];
+  };
+
+  lru-cache = eggDerivation {
+    name = "lru-cache-0.5.3";
+
+    src = fetchegg {
+      name = "lru-cache";
+      version = "0.5.3";
+      sha256 = "0z6g3106c4j21v968hfzy9nnbfq2d83y0nyd20aifpq4g55c0d40";
+    };
+
+    buildInputs = [
+      record-variants
+    ];
+  };
+
+  matchable = eggDerivation {
+    name = "matchable-3.3";
+
+    src = fetchegg {
+      name = "matchable";
+      version = "3.3";
+      sha256 = "07y3lpzgm4djiwi9y2adc796f9kwkmdr28fkfkw65syahdax8990";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  message-digest = eggDerivation {
+    name = "message-digest-3.1.0";
+
+    src = fetchegg {
+      name = "message-digest";
+      version = "3.1.0";
+      sha256 = "1w6bax19dwgih78vcimiws0rja7qsd8hmbm6qqg2hf9cw3vab21s";
+    };
+
+    buildInputs = [
+      setup-helper
+      miscmacros
+      check-errors
+      variable-item
+      blob-utils
+      string-utils
+    ];
+  };
+
+  miscmacros = eggDerivation {
+    name = "miscmacros-2.96";
+
+    src = fetchegg {
+      name = "miscmacros";
+      version = "2.96";
+      sha256 = "1ajdgjrni10i2hmhcp4rawnxajjxry3kmq1krdmah4sf0kjrgajc";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  parley = eggDerivation {
+    name = "parley-0.9.2";
+
+    src = fetchegg {
+      name = "parley";
+      version = "0.9.2";
+      sha256 = "1vsbx4dk1240gzq02slzmavd1jrq04qj7ssnvg15h8xh81xwhbbz";
+    };
+
+    buildInputs = [
+      stty
+      srfi-71
+      miscmacros
+    ];
+  };
+
+  pathname-expand = eggDerivation {
+    name = "pathname-expand-0.1";
+
+    src = fetchegg {
+      name = "pathname-expand";
+      version = "0.1";
+      sha256 = "14llya7l04z49xpi3iylk8aglrw968vy304ymavhhqlyzmzwkx3g";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  posix-extras = eggDerivation {
+    name = "posix-extras-0.1.6";
+
+    src = fetchegg {
+      name = "posix-extras";
+      version = "0.1.6";
+      sha256 = "0gnmhn2l0161ham7f8i0lx1ay94ap8l8l7ga4nw9qs86lk024abi";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  record-variants = eggDerivation {
+    name = "record-variants-0.5.1";
+
+    src = fetchegg {
+      name = "record-variants";
+      version = "0.5.1";
+      sha256 = "15wgysxkm8m4hx9nhhw9akchzipdnqc7yj3qd3zn0z7sxg4sld1h";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  regex = eggDerivation {
+    name = "regex-1.0";
+
+    src = fetchegg {
+      name = "regex";
+      version = "1.0";
+      sha256 = "1z9bh7xvab6h5cdlsz8jk02pv5py1i6ryqarbcs3wdgkkjgmmkif";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  setup-helper = eggDerivation {
+    name = "setup-helper-1.5.5";
+
+    src = fetchegg {
+      name = "setup-helper";
+      version = "1.5.5";
+      sha256 = "1lpplp8f2wyc486dd98gs4wl1kkhh1cs6vdqkxrdk7f92ikmwbx3";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  sha2 = eggDerivation {
+    name = "sha2-3.1.0";
+
+    src = fetchegg {
+      name = "sha2";
+      version = "3.1.0";
+      sha256 = "01ch290f2kcv1yv8spjdaqwipl80vvgpqc4divsj3vxckvgkawq2";
+    };
+
+    buildInputs = [
+      message-digest
+    ];
+  };
+
+  sql-de-lite = eggDerivation {
+    name = "sql-de-lite-0.6.6";
+
+    src = fetchegg {
+      name = "sql-de-lite";
+      version = "0.6.6";
+      sha256 = "1mh3hpsibq2gxcpjaycqa4ckznj268xpfzsa6pn0i6iac6my3qra";
+    };
+
+    buildInputs = [
+      lru-cache
+      foreigners
+    ];
+  };
+
+  srfi-37 = eggDerivation {
+    name = "srfi-37-1.3.1";
+
+    src = fetchegg {
+      name = "srfi-37";
+      version = "1.3.1";
+      sha256 = "1a2zdkdzrv15fw9dfdy8067fsgh4kr8ppffm8mc3cmlczrrd58cb";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  srfi-71 = eggDerivation {
+    name = "srfi-71-1.1";
+
+    src = fetchegg {
+      name = "srfi-71";
+      version = "1.1";
+      sha256 = "01mlaxw2lfczykmx69xki2s0f4ywlg794rl4kz07plvzn0s3fbqq";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  ssql = eggDerivation {
+    name = "ssql-0.2.4";
+
+    src = fetchegg {
+      name = "ssql";
+      version = "0.2.4";
+      sha256 = "0qhnghhx1wrvav4s7l780mspwlh8s6kzq4bl0cslwp1km90fx9bk";
+    };
+
+    buildInputs = [
+      matchable
+    ];
+  };
+
+  string-utils = eggDerivation {
+    name = "string-utils-1.2.4";
+
+    src = fetchegg {
+      name = "string-utils";
+      version = "1.2.4";
+      sha256 = "07alvghg0dahilrm4jg44bndl0x69sv1zbna9l20cbdvi35i0jp1";
+    };
+
+    buildInputs = [
+      setup-helper
+      miscmacros
+      lookup-table
+      check-errors
+    ];
+  };
+
+  stty = eggDerivation {
+    name = "stty-0.2.6";
+
+    src = fetchegg {
+      name = "stty";
+      version = "0.2.6";
+      sha256 = "09jmjpdsd3yg6d0f0imcihmn49i28x09lgl60i2dllffs25k22s4";
+    };
+
+    buildInputs = [
+      setup-helper
+      foreigners
+    ];
+  };
+
+  synch = eggDerivation {
+    name = "synch-2.1.2";
+
+    src = fetchegg {
+      name = "synch";
+      version = "2.1.2";
+      sha256 = "1m9mnbq0m5jsxmd1a3rqpwpxj0l1b7vn1fknvxycc047pmlcyl00";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+    ];
+  };
+
+  tiger-hash = eggDerivation {
+    name = "tiger-hash-3.1.0";
+
+    src = fetchegg {
+      name = "tiger-hash";
+      version = "3.1.0";
+      sha256 = "0j9dsbjp9cw0y4w4srg0qwgh53jw2v3mx4y4h040ds0fkxlzzknx";
+    };
+
+    buildInputs = [
+      message-digest
+    ];
+  };
+
+  ugarit = eggDerivation {
+    name = "ugarit-2.0";
+
+    src = fetchegg {
+      name = "ugarit";
+      version = "2.0";
+      sha256 = "1l5zkr6b8l5dw9p5mimbva0ncqw1sbvp3d4cywm1hqx2m03a0f1n";
+    };
+
+    buildInputs = [
+      miscmacros
+      sql-de-lite
+      crypto-tools
+      srfi-37
+      stty
+      matchable
+      regex
+      tiger-hash
+      message-digest
+      posix-extras
+      parley
+      ssql
+      pathname-expand
+    ];
+  };
+
+  variable-item = eggDerivation {
+    name = "variable-item-1.3.1";
+
+    src = fetchegg {
+      name = "variable-item";
+      version = "1.3.1";
+      sha256 = "19b3mhb8kr892sz9yyzq79l0vv28dgilw9cf415kj6aq16yp4d5n";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+    ];
+  };
+
+  bind = eggDerivation {
+    name = "bind-1.5.2";
+
+    src = fetchegg {
+      name = "bind";
+      version = "1.5.2";
+      sha256 = "1x768k7dlfmkvgaf2idiaaqqgnqdnif5yb7ib6a6zndacbwz9jps";
+    };
+
+    buildInputs = [
+      silex
+      matchable
+      coops
+      regex
+      make
+    ];
+  };
+
+  coops = eggDerivation {
+    name = "coops-1.93";
+
+    src = fetchegg {
+      name = "coops";
+      version = "1.93";
+      sha256 = "0mrkk7pmn9r691svzm4113mn0xsk36zi3f15m86n29a6c7897php";
+    };
+
+    buildInputs = [
+      matchable
+      record-variants
+    ];
+  };
+
+  make = eggDerivation {
+    name = "make-1.8";
+
+    src = fetchegg {
+      name = "make";
+      version = "1.8";
+      sha256 = "1w6xsjyapi2x8dv21dpidkyw1kjfsbasddn554xx561pi3i0yv9h";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  silex = eggDerivation {
+    name = "silex-1.4";
+
+    src = fetchegg {
+      name = "silex";
+      version = "1.4";
+      sha256 = "17x7f07aa3qnay3bhjr7knjivhycs54j97jyv3gjs1h8qnp63g00";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  z3 = eggDerivation {
+    name = "z3-1.44";
+
+    src = fetchegg {
+      name = "z3";
+      version = "1.44";
+      sha256 = "16ayp4zkgm332q4bmjj22acqg197aqp6d8ifyyjj205iv6k0f3x4";
+    };
+
+    buildInputs = [
+      bind
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/wal-e/default.nix b/nixpkgs/pkgs/tools/backup/wal-e/default.nix
new file mode 100644
index 000000000000..544f61918de9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/wal-e/default.nix
@@ -0,0 +1,36 @@
+{ lib, fetchFromGitHub, python3Packages, lzop, postgresql, pv }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "wal-e";
+  version = "1.1.1";
+
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "wal-e";
+    repo = "wal-e";
+    rev = "v${version}";
+    hash = "sha256-I6suHkAYzDtlNFNPH4SziY93Ryp+NTHkCBuojDvv+U4=";
+  };
+
+  # needs tox
+  doCheck = false;
+
+  propagatedBuildInputs = (with python3Packages; [
+    boto
+    gevent
+    google-cloud-storage
+  ]) ++ [
+    postgresql
+    lzop
+    pv
+  ];
+
+  meta = {
+    description = "A Postgres WAL-shipping disaster recovery and replication toolkit";
+    homepage = "https://github.com/wal-e/wal-e";
+    maintainers = [ ];
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/wal-g/default.nix b/nixpkgs/pkgs/tools/backup/wal-g/default.nix
new file mode 100644
index 000000000000..6300dba6bff8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/wal-g/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildGoModule, fetchFromGitHub, brotli, libsodium, installShellFiles }:
+
+buildGoModule rec {
+  pname = "wal-g";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "wal-g";
+    repo = "wal-g";
+    rev = "v${version}";
+    sha256 = "sha256-5mwA55aAHwEFabGZ6c3pi8NLcYofvoe4bb/cFj7NWok=";
+  };
+
+  vendorHash = "sha256-BbQuY6r30AkxlCZjY8JizaOrqEBdv7rIQet9KQwYB/g=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ brotli libsodium ];
+
+  subPackages = [ "main/pg" ];
+
+  tags = [ "brotli" "libsodium" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/wal-g/wal-g/cmd/pg.WalgVersion=${version}" "-X github.com/wal-g/wal-g/cmd/pg.GitRevision=${src.rev}" ];
+
+  postInstall = ''
+    mv $out/bin/pg $out/bin/wal-g
+    installShellCompletion --cmd wal-g \
+      --bash <($out/bin/wal-g completion bash) \
+      --zsh <($out/bin/wal-g completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/wal-g/wal-g";
+    license = licenses.asl20;
+    description = "An archival restoration tool for PostgreSQL";
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zbackup/default.nix b/nixpkgs/pkgs/tools/backup/zbackup/default.nix
new file mode 100644
index 000000000000..021c85707a60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zbackup/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub
+, cmake, protobufc
+, libunwind, lzo, openssl, protobuf, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zbackup";
+  version = "1.4.4";
+
+  src = fetchFromGitHub {
+    owner = "zbackup";
+    repo = "zbackup";
+    rev = version;
+    hash = "sha256-9Fk4EhEeQ2J4Kirc7oad4CzmW70Mmza6uozd87qfgZI=";
+  };
+
+  patches = [
+    # compare with https://github.com/zbackup/zbackup/pull/158;
+    # but that doesn't apply cleanly to this version
+    ./protobuf-api-change.patch
+  ];
+
+  # zbackup uses dynamic exception specifications which are not
+  # allowed in C++17
+  env.NIX_CFLAGS_COMPILE = toString [ "--std=c++14" ];
+
+  buildInputs = [ zlib openssl protobuf lzo libunwind ];
+  nativeBuildInputs = [ cmake protobufc ];
+
+  meta = {
+    description = "A versatile deduplicating backup tool";
+    homepage = "http://zbackup.org/";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zbackup/protobuf-api-change.patch b/nixpkgs/pkgs/tools/backup/zbackup/protobuf-api-change.patch
new file mode 100644
index 000000000000..d071709878be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zbackup/protobuf-api-change.patch
@@ -0,0 +1,11 @@
+--- a/backup_restorer.cc
++++ b/backup_restorer.cc
+@@ -48,7 +48,7 @@
+   // TODO: this disables size checks for each separate message. Figure a better
+   // way to do this while keeping them enabled. It seems we need to create an
+   // instance of CodedInputStream for each message, but it might be expensive
+-  cis.SetTotalBytesLimit( backupData.size(), -1 );
++  cis.SetTotalBytesLimit( backupData.size() );
+ 
+   // Used when emitting chunks
+   string chunk;
diff --git a/nixpkgs/pkgs/tools/backup/zfs-autobackup/default.nix b/nixpkgs/pkgs/tools/backup/zfs-autobackup/default.nix
new file mode 100644
index 000000000000..5999508fabf2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zfs-autobackup/default.nix
@@ -0,0 +1,31 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "zfs-autobackup";
+  version = "3.2";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "zfs_autobackup";
+    sha256 = "sha256-rvtY7fsn2K2hueAsQkaPXcwxUAgE8j+GsQFF3eJKG2o=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ pythonRelaxDepsHook ];
+
+  propagatedBuildInputs = with python3Packages; [ colorama ];
+
+  pythonRemoveDeps = [ "argparse" ];
+
+  # tests need zfs filesystem
+  doCheck = false;
+
+  pythonImportsCheck = [ "zfs_autobackup" ];
+
+  meta = with lib; {
+    description = "ZFS backup, replicationand snapshot tool";
+    homepage = "https://github.com/psy0rz/zfs_autobackup";
+    changelog = "https://github.com/psy0rz/zfs_autobackup/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zfs-prune-snapshots/default.nix b/nixpkgs/pkgs/tools/backup/zfs-prune-snapshots/default.nix
new file mode 100644
index 000000000000..2c9e4a2fdf8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zfs-prune-snapshots/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, go-md2man }:
+
+stdenv.mkDerivation rec {
+  version = "1.5.0";
+  pname = "zfs-prune-snapshots";
+
+  src = fetchFromGitHub {
+    owner = "bahamas10";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-gCf/ZIeIh84WQNs5wZO1/l3zpnl2sNxsFO7cOa92JUM=";
+  };
+
+  nativeBuildInputs = [ go-md2man ];
+
+  makeTargets = [ "man" ];
+
+  installPhase = ''
+    install -m 755 -D zfs-prune-snapshots $out/bin/zfs-prune-snapshots
+    install -m 644 -D man/zfs-prune-snapshots.1 $out/share/man/man1/zfs-prune-snapshots.1
+  '';
+
+  meta = with lib; {
+    description = "Remove snapshots from one or more zpools that match given criteria";
+    homepage = "https://github.com/bahamas10/zfs-prune-snapshots";
+    license = licenses.mit;
+    maintainers = [ maintainers.ymarkus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zfs-replicate/default.nix b/nixpkgs/pkgs/tools/backup/zfs-replicate/default.nix
new file mode 100644
index 000000000000..df0ddfc7433b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zfs-replicate/default.nix
@@ -0,0 +1,49 @@
+{ buildPythonApplication
+, click
+, fetchPypi
+, hypothesis
+, lib
+, poetry-core
+, pytest
+, pytestCheckHook
+, stringcase
+}:
+
+buildPythonApplication rec {
+  pname = "zfs_replicate";
+  version = "3.2.8";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-q4m6/L7GZqCkvdKcWBGTfrbDC2UiFerluwNUOA+QCQU=";
+  };
+
+  postPatch = ''
+    sed -i pyproject.toml -e '/--cov[^"]*/d'
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    hypothesis
+    pytest
+  ];
+
+  propagatedBuildInputs = [
+    click
+    stringcase
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/alunduil/zfs-replicate";
+    description = "ZFS Snapshot Replication";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ alunduil ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zfsbackup/default.nix b/nixpkgs/pkgs/tools/backup/zfsbackup/default.nix
new file mode 100644
index 000000000000..d0f8972434a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zfsbackup/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "zfsbackup";
+  version = "unstable-2022-09-23";
+  rev = "a30f1a44bcae5f64cfb36a12926242a968a759c6";
+
+  src = fetchFromGitHub {
+    owner = "someone1";
+    repo = "zfsbackup-go";
+    inherit rev;
+    sha256 = "sha256-ZJ7gtT4AdMLEs2+hJa2Sia0hSoQd3CftdqRsH/oJxd8=";
+  };
+
+  vendorHash = "sha256-aYAficUFYYhZygfQZyczP49CeouAKKZJW8IFlkFh9lI=";
+
+  ldflags = [ "-w" "-s" ];
+
+  # Tests require loading the zfs kernel module.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Backup ZFS snapshots to cloud storage such as Google, Amazon, Azure, etc";
+    homepage = "https://github.com/someone1/zfsbackup-go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ xfix ];
+    platforms = platforms.linux;
+    mainProgram = "zfsbackup-go";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zfsnap/default.nix b/nixpkgs/pkgs/tools/backup/zfsnap/default.nix
new file mode 100644
index 000000000000..36e369b4f30a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zfsnap/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, coreutils, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  version = "2.0.0-beta3";
+  pname = "zfsnap";
+
+  src = fetchFromGitHub {
+    owner = "zfsnap";
+    repo = "zfsnap";
+    rev = "v${version}";
+    sha256 = "0670a5sghvqx32c9gfsird15mg9nqcvwxsrfcjrwc0sj7br9bd2g";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = ''
+    # Use zfs binaries from PATH, because often the zfs package from nixpkgs is
+    # not the one that should be used
+    substituteInPlace share/zfsnap/core.sh \
+      --replace "ZFS_CMD='/sbin/zfs'" "ZFS_CMD='zfs'" \
+      --replace "ZPOOL_CMD='/sbin/zpool'" "ZPOOL_CMD='zpool'"
+
+    substituteInPlace sbin/zfsnap.sh \
+      --replace "/bin/ls" "${coreutils}/bin/ls"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv sbin/zfsnap.sh $out/bin/zfsnap
+    mv share $out
+    installManPage man/*/*
+    installShellCompletion completion/*.{bash,zsh}
+  '';
+
+  meta = with lib; {
+    description = "A portable, performant script to make rolling ZFS snapshots easy";
+    homepage = "https://github.com/zfsnap/zfsnap";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ woffs ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/znapzend/default.nix b/nixpkgs/pkgs/tools/backup/znapzend/default.nix
new file mode 100644
index 000000000000..e4e7124477ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/znapzend/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, perl, perlPackages, wget, autoconf, automake, autoreconfHook }:
+
+let
+  # when upgrade znapzend, check versions of Perl libs here: https://github.com/oetiker/znapzend/blob/master/cpanfile
+  # pinned versions are listed at https://github.com/oetiker/znapzend/blob/master/thirdparty/cpanfile-5.30.snapshot
+  Mojolicious' = perlPackages.buildPerlPackage rec {
+    pname = "Mojolicious";
+    version = "8.73";
+    src = fetchurl {
+      url = "mirror://cpan/authors/id/S/SR/SRI/${pname}-${version}.tar.gz";
+      sha256 = "118y2264f89bbp5ly2dh36xjq25jk85s2ssxa3y4gsgsk6sjzzk1";
+    };
+  };
+  MojoIOLoopForkCall' = perlPackages.buildPerlModule rec {
+    pname = "Mojo-IOLoop-ForkCall";
+    version = "0.20";
+    src = fetchurl {
+      url = "mirror://cpan/authors/id/J/JB/JBERGER/${pname}-${version}.tar.gz";
+      sha256 = "19pih5x0ayxs2m8j29qwdpi6ky3w4ghv6vrmax3ix9r59hj6569b";
+    };
+    propagatedBuildInputs = [ perlPackages.IOPipely Mojolicious' ];
+  };
+
+  perl' = perl.withPackages (p:
+    [ MojoIOLoopForkCall'
+      p.TAPParserSourceHandlerpgTAP
+    ]);
+
+  version = "0.21.0";
+  sha256 = "1lg46rf2ahlclan29zx8ag5k4fjp28sc9l02z76f0pvdlj4qnihl";
+in
+stdenv.mkDerivation {
+  pname = "znapzend";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "oetiker";
+    repo = "znapzend";
+    rev = "v${version}";
+    inherit sha256;
+  };
+
+  buildInputs = [ wget perl' ];
+
+  nativeBuildInputs = [ autoconf automake autoreconfHook ];
+
+  preConfigure = ''
+    sed -i 's/^SUBDIRS =.*$/SUBDIRS = lib/' Makefile.am
+
+    grep -v thirdparty/Makefile configure.ac > configure.ac.tmp
+    mv configure.ac.tmp configure.ac
+
+    autoconf
+  '';
+
+  preBuild = ''
+    aclocal
+    automake
+  '';
+
+  meta = with lib; {
+    description = "High performance open source ZFS backup with mbuffer and ssh support";
+    homepage    = "https://www.znapzend.org";
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ otwieracz ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zrepl/default.nix b/nixpkgs/pkgs/tools/backup/zrepl/default.nix
new file mode 100644
index 000000000000..b0e0f75fe8c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zrepl/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, nixosTests
+, openssh
+}:
+buildGoModule rec {
+  pname = "zrepl";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "zrepl";
+    repo = "zrepl";
+    rev = "v${version}";
+    sha256 = "sha256-sFSWcJ0aBMay+ngUqnr0PKBMOfCcKHgBjff6KRpPZrg=";
+  };
+
+  vendorHash = "sha256-75fGejR7eiECsm1j3yIU1lAWaW9GrorrVnv8JEzkAtU=";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  ldflags = [ "-s" "-w" "-X github.com/zrepl/zrepl/version.zreplVersion=${version}" ];
+
+  postInstall = ''
+    mkdir -p $out/lib/systemd/system
+    substitute dist/systemd/zrepl.service $out/lib/systemd/system/zrepl.service \
+      --replace /usr/local/bin/zrepl $out/bin/zrepl
+
+    wrapProgram $out/bin/zrepl \
+      --prefix PATH : ${lib.makeBinPath [ openssh ]}
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) zrepl;
+  };
+
+  meta = with lib; {
+    homepage = "https://zrepl.github.io/";
+    description = "A one-stop, integrated solution for ZFS replication";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ cole-h danderson mdlayher ];
+    mainProgram = "zrepl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/blueberry/default.nix b/nixpkgs/pkgs/tools/bluetooth/blueberry/default.nix
new file mode 100644
index 000000000000..63845045c06b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/blueberry/default.nix
@@ -0,0 +1,97 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, bluez-tools
+, cinnamon
+, gnome
+, gobject-introspection
+, libnotify
+, pavucontrol
+, python3Packages
+, util-linux
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "blueberry";
+  version = "1.4.8";
+
+  src = fetchFromGitHub {
+    owner = "linuxmint";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-MyIjcTyKn1aC2th6fCOw4cIqrRKatk2s4QD5R9cm83A=";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    python3Packages.wrapPython
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    bluez-tools
+    cinnamon.xapp
+    gnome.gnome-bluetooth_1_0
+    libnotify
+    python3Packages.python
+    util-linux
+  ];
+
+  pythonPath = with python3Packages; [
+    dbus-python
+    pygobject3
+    setproctitle
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -a etc usr/* $out
+
+    # Fix paths
+    substituteInPlace $out/bin/blueberry \
+      --replace /usr/lib/blueberry $out/lib/blueberry
+    substituteInPlace $out/bin/blueberry-tray \
+      --replace /usr/lib/blueberry $out/lib/blueberry
+    substituteInPlace $out/etc/xdg/autostart/blueberry-obex-agent.desktop \
+      --replace /usr/lib/blueberry $out/lib/blueberry
+    substituteInPlace $out/etc/xdg/autostart/blueberry-tray.desktop \
+      --replace Exec=blueberry-tray Exec=$out/bin/blueberry-tray
+    substituteInPlace $out/lib/blueberry/blueberry-obex-agent.py \
+      --replace /usr/share $out/share
+    substituteInPlace $out/lib/blueberry/blueberry-tray.py \
+      --replace /usr/share $out/share
+    substituteInPlace $out/lib/blueberry/blueberry.py \
+      --replace '"bt-adapter"' '"${bluez-tools}/bin/bt-adapter"' \
+      --replace /usr/bin/pavucontrol ${pavucontrol}/bin/pavucontrol \
+      --replace /usr/lib/blueberry $out/lib/blueberry \
+      --replace /usr/share $out/share
+    substituteInPlace $out/lib/blueberry/rfkillMagic.py \
+      --replace /usr/bin/rfkill ${util-linux}/bin/rfkill \
+      --replace /usr/sbin/rfkill ${util-linux}/bin/rfkill \
+      --replace /usr/lib/blueberry $out/lib/blueberry
+    substituteInPlace $out/share/applications/blueberry.desktop \
+      --replace Exec=blueberry Exec=$out/bin/blueberry
+
+    glib-compile-schemas --strict $out/share/glib-2.0/schemas
+
+    runHook postInstall
+  '';
+
+  dontWrapGApps = true;
+
+  postFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+    wrapPythonProgramsIn $out/lib "$out $pythonPath"
+  '';
+
+  meta = with lib; {
+    description = "Bluetooth configuration tool";
+    homepage = "https://github.com/linuxmint/blueberry";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bobby285271 romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/blueman/default.nix b/nixpkgs/pkgs/tools/bluetooth/blueman/default.nix
new file mode 100644
index 000000000000..962ad4b2e0f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/blueman/default.nix
@@ -0,0 +1,63 @@
+{ config, stdenv, lib, fetchurl, intltool, pkg-config, python3Packages, bluez, gtk3
+, obex_data_server, xdg-utils, dnsmasq, dhcpcd, iproute2
+, gnome, librsvg, wrapGAppsHook, gobject-introspection
+, networkmanager, withPulseAudio ? config.pulseaudio or stdenv.isLinux, libpulseaudio }:
+
+let
+  pythonPackages = python3Packages;
+
+in stdenv.mkDerivation rec {
+  pname = "blueman";
+  version = "2.3.5";
+
+  src = fetchurl {
+    url = "https://github.com/blueman-project/blueman/releases/download/${version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-stIa/fd6Bs2G2vVAJAb30qU0WYF+KeC+vEkR1PDc/aE=";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection intltool pkg-config pythonPackages.cython
+    pythonPackages.wrapPython wrapGAppsHook
+  ];
+
+  buildInputs = [ bluez gtk3 pythonPackages.python librsvg
+                  gnome.adwaita-icon-theme networkmanager ]
+                ++ pythonPath
+                ++ lib.optional withPulseAudio libpulseaudio;
+
+  postPatch = lib.optionalString withPulseAudio ''
+    sed -i 's,CDLL(",CDLL("${libpulseaudio.out}/lib/,g' blueman/main/PulseAudioUtils.py
+  '';
+
+  pythonPath = with pythonPackages; [ pygobject3 pycairo ];
+
+  propagatedUserEnvPkgs = [ obex_data_server ];
+
+  configureFlags = [
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-systemduserunitdir=${placeholder "out"}/lib/systemd/user"
+    # Don't check for runtime dependency `ip` during the configure
+    "--disable-runtime-deps-check"
+    (lib.enableFeature withPulseAudio "pulseaudio")
+  ];
+
+  makeWrapperArgs = [
+    "--prefix PATH ':' ${lib.makeBinPath [ dnsmasq dhcpcd iproute2 ]}"
+    "--suffix PATH ':' ${lib.makeBinPath [ xdg-utils ]}"
+  ];
+
+  postFixup = ''
+    # This mimics ../../../development/interpreters/python/wrap.sh
+    wrapPythonProgramsIn "$out/bin" "$out $pythonPath"
+    wrapPythonProgramsIn "$out/libexec" "$out $pythonPath"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/blueman-project/blueman";
+    description = "GTK-based Bluetooth Manager";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    changelog = "https://github.com/blueman-project/blueman/releases/tag/${version}";
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/bluewalker/default.nix b/nixpkgs/pkgs/tools/bluetooth/bluewalker/default.nix
new file mode 100644
index 000000000000..6cc25523d74c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/bluewalker/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitLab }:
+
+buildGoModule rec {
+  pname = "bluewalker";
+  version = "0.3.1";
+
+  src = fetchFromGitLab {
+    owner = "jtaimisto";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-wAzBlCczsLfHboGYIsyN7dGwz52CMw+L3XQ0njfLVR0=";
+  };
+
+  vendorHash = "sha256-kHwj6FNWIonaHKy4QE0/UcuOfHAPE1al5nuYXrfROKE=";
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  meta = with lib; {
+    description = "Simple command line Bluetooth LE scanner";
+    homepage = "https://gitlab.com/jtaimisto/bluewalker";
+    changelog = "https://gitlab.com/jtaimisto/bluewalker/-/tags/v${version}";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ cimm ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/obex-data-server/default.nix b/nixpkgs/pkgs/tools/bluetooth/obex-data-server/default.nix
new file mode 100644
index 000000000000..646d85d7277d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/obex-data-server/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, pkg-config, libusb-compat-0_1, glib, dbus-glib, bluez, openobex, dbus }:
+
+stdenv.mkDerivation rec {
+  pname = "obex-data-server";
+  version = "0.4.6";
+
+  src = fetchurl {
+    url = "http://tadas.dailyda.com/software/obex-data-server-${version}.tar.gz";
+    sha256 = "0kq940wqs9j8qjnl58d6l3zhx0jaszci356xprx23l6nvdfld6dk";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    pkg-config
+    dbus-glib # required for dbus-binding-tool
+  ];
+  buildInputs = [ libusb-compat-0_1 glib dbus-glib bluez openobex dbus ];
+
+  patches = [ ./obex-data-server-0.4.6-build-fixes-1.patch ];
+
+  preConfigure = ''
+  addToSearchPath PKG_CONFIG_PATH ${openobex}/lib64/pkgconfig
+  export PKG_CONFIG_PATH="${dbus.dev}/lib/pkgconfig:$PKG_CONFIG_PATH"
+  '';
+
+  meta = with lib; {
+    homepage = "http://wiki.muiline.com/obex-data-server";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch b/nixpkgs/pkgs/tools/bluetooth/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch
new file mode 100644
index 000000000000..b5fde8db589c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch
@@ -0,0 +1,56 @@
+Submitted By:            Armin K. <krejzi at email dot com>
+Date:                    2012-07-06
+Initial Package Version: 0.4.6
+Upstream Status:         Unknown
+Origin:                  Self
+Description:             Some build fixes.
+
+--- obex-data-server.orig/src/ods-obex.c	2011-02-10 10:14:42.000000000 +0100
++++ obex-data-server/src/ods-obex.c	2012-07-06 20:10:09.208712553 +0200
+@@ -412,7 +412,7 @@
+ 		goto err;
+ 	}
+ 
+-	interfaces_num = OBEX_FindInterfaces(obex_context->obex_handle, &obex_intf);
++	interfaces_num = OBEX_EnumerateInterfaces(obex_context->obex_handle);
+ 	if (intf_num >= interfaces_num) {
+ 		g_set_error (error, ODS_ERROR, ODS_ERROR_FAILED, "Invalid interface number");
+ 		goto err;
+@@ -1928,7 +1928,7 @@
+ 	gchar	*uname;
+ 	gsize	uname_len;
+ 
+-	if (action != OBEX_ACTION_SETPERM)
++	if (action != 0x03)
+ 		g_assert (src && dst);
+ 
+ 	object = OBEX_ObjectNew (obex_context->obex_handle, OBEX_CMD_ACTION);
+@@ -1974,7 +1974,7 @@
+ 	                      OBEX_HDR_ACTION_ID, hv, 1, 0);
+ 
+ 	/* permissions header */
+-	if (action == OBEX_ACTION_SETPERM) {
++	if (action == 0x03) {
+ 		hv.bq4 = perms;
+ 		ret = OBEX_ObjectAddHeader (obex_context->obex_handle, object,
+ 		                            OBEX_HDR_PERMISSIONS, hv, 4, 0);
+--- obex-data-server.orig/src/ods-session.c	2011-02-10 09:57:31.000000000 +0100
++++ obex-data-server/src/ods-session.c	2012-07-06 20:10:09.208712553 +0200
+@@ -1761,7 +1761,7 @@
+                          DBusGMethodInvocation *context)
+ {
+ 	return ods_session_remote_action (session, remote_source,
+-	                                  remote_destination, OBEX_ACTION_COPY,
++	                                  remote_destination, 0x00,
+ 	                                  context);
+ }
+ 
+@@ -1772,7 +1772,7 @@
+                          DBusGMethodInvocation *context)
+ {
+ 	return ods_session_remote_action (session, remote_source,
+-	                                  remote_destination, OBEX_ACTION_MOVE,
++	                                  remote_destination, 0x01,
+ 	                                  context);
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/bluetooth/obexd/default.nix b/nixpkgs/pkgs/tools/bluetooth/obexd/default.nix
new file mode 100644
index 000000000000..c18aa3a1c263
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/obexd/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, dbus, openobex, bluez, libical }:
+
+stdenv.mkDerivation rec {
+  pname = "obexd";
+  version = "0.48";
+
+  src = fetchurl {
+    url = "mirror://kernel/linux/bluetooth/obexd-${version}.tar.bz2";
+    sha256 = "1i20dnibvnq9lnkkhajr5xx3kxlwf9q5c4jm19kyb0q1klzgzlb8";
+  };
+
+  buildInputs = [ glib dbus openobex bluez libical ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    homepage = "http://www.bluez.org/";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/obexfs/default.nix b/nixpkgs/pkgs/tools/bluetooth/obexfs/default.nix
new file mode 100644
index 000000000000..2783c63899df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/obexfs/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pkg-config, bluez, fuse, obexftp }:
+
+stdenv.mkDerivation rec {
+  pname = "obexfs";
+  version = "0.12";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openobex/obexfs-${version}.tar.gz";
+    sha256 = "1g3krpygk6swa47vbmp9j9s8ahqqcl9ra8r25ybgzv2d9pmjm9kj";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ fuse obexftp bluez ];
+
+  meta = with lib; {
+    homepage = "http://dev.zuckschwerdt.org/openobex/wiki/ObexFs";
+    description = "A tool to mount OBEX-based devices (such as Bluetooth phones)";
+    platforms = platforms.linux;
+    license = licenses.lgpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/obexftp/default.nix b/nixpkgs/pkgs/tools/bluetooth/obexftp/default.nix
new file mode 100644
index 000000000000..8fd031d331c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/obexftp/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, pkg-config, openobex, bluez, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "obexftp";
+  version = "0.24.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openobex/obexftp-${version}-Source.tar.gz";
+    sha256 = "18w9r78z78ri5qc8fjym4nk1jfbrkyr789sq7rxrkshf1a7b83yl";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake ];
+
+  buildInputs = [ bluez ];
+
+  propagatedBuildInputs = [ openobex ];
+
+  # https://sourceforge.net/p/openobex/bugs/66/
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace '\$'{prefix}/'$'{CMAKE_INSTALL_LIBDIR} '$'{CMAKE_INSTALL_FULL_LIBDIR} \
+      --replace '\$'{prefix}/'$'{CMAKE_INSTALL_INCLUDEDIR} '$'{CMAKE_INSTALL_FULL_INCLUDEDIR}
+  '';
+
+  # There's no such thing like "bluetooth" library; possibly they meant "bluez" but it links correctly without this.
+  postFixup = ''
+    sed -i 's,^Requires: bluetooth,Requires:,' $out/lib/pkgconfig/obexftp.pc
+  '';
+
+  meta = with lib; {
+    homepage = "http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp";
+    description = "A library and tool to access files on OBEX-based devices (such as Bluetooth phones)";
+    platforms = platforms.linux;
+    license = licenses.lgpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/openobex/default.nix b/nixpkgs/pkgs/tools/bluetooth/openobex/default.nix
new file mode 100644
index 000000000000..ae487fb075fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/openobex/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, pkg-config, bluez, libusb-compat-0_1, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "openobex";
+  version = "1.7.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openobex/openobex-${version}-Source.tar.gz";
+    sha256 = "1z6l7pbwgs5pjx3861cyd3r6vq5av984bdp4r3hgrw2jxam6120m";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake ];
+  buildInputs = [ bluez libusb-compat-0_1 ];
+
+  configureFlags = [ "--enable-apps" ];
+
+  patchPhase = ''
+    sed -i "s!/lib/udev!$out/lib/udev!" udev/CMakeLists.txt
+    sed -i "/if ( PKGCONFIG_UDEV_FOUND )/,/endif ( PKGCONFIG_UDEV_FOUND )/d" udev/CMakeLists.txt
+    # https://sourceforge.net/p/openobex/bugs/66/
+    substituteInPlace CMakeLists.txt \
+      --replace '\$'{prefix}/'$'{CMAKE_INSTALL_LIBDIR} '$'{CMAKE_INSTALL_FULL_LIBDIR} \
+      --replace '\$'{prefix}/'$'{CMAKE_INSTALL_INCLUDEDIR} '$'{CMAKE_INSTALL_FULL_INCLUDEDIR}
+    '';
+
+  meta = with lib; {
+    homepage = "http://dev.zuckschwerdt.org/openobex/";
+    description = "An open source implementation of the Object Exchange (OBEX) protocol";
+    platforms = platforms.linux;
+    license = licenses.lgpl2Plus;
+    mainProgram = "obex-check-device";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bootloaders/refind/0001-toolchain.patch b/nixpkgs/pkgs/tools/bootloaders/refind/0001-toolchain.patch
new file mode 100644
index 000000000000..13c4c88f95f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bootloaders/refind/0001-toolchain.patch
@@ -0,0 +1,27 @@
+diff --git a/Make.common b/Make.common
+index 3f0b919..ee365f5 100644
+--- a/Make.common
++++ b/Make.common
+@@ -33,22 +33,6 @@ ARCH            ?= $(HOSTARCH)
+ 
+ # Note: TIANOBASE is defined in master Makefile and exported
+ GENFW           = $(TIANOBASE)/BaseTools/Source/C/bin/GenFw
+-prefix          = /usr/bin/
+-ifeq ($(ARCH),aarch64)
+-  CC            = $(prefix)aarch64-linux-gnu-gcc
+-  AS            = $(prefix)aarch64-linux-gnu-as
+-  LD            = $(prefix)aarch64-linux-gnu-ld
+-  AR            = $(prefix)aarch64-linux-gnu-ar
+-  RANLIB        = $(prefix)aarch64-linux-gnu-ranlib
+-  OBJCOPY       = $(prefix)aarch64-linux-gnu-objcopy
+-else
+-  CC            = $(prefix)gcc
+-  AS            = $(prefix)as
+-  LD            = $(prefix)ld
+-  AR            = $(prefix)ar
+-  RANLIB        = $(prefix)ranlib
+-  OBJCOPY       = $(prefix)objcopy
+-endif
+ 
+ ifeq ($(MAKEWITH),TIANO)
+ # Below file defines TARGET (RELEASE or DEBUG) and TOOL_CHAIN_TAG (GCC44, GCC45, GCC46, or GCC47)
diff --git a/nixpkgs/pkgs/tools/bootloaders/refind/default.nix b/nixpkgs/pkgs/tools/bootloaders/refind/default.nix
new file mode 100644
index 000000000000..de2399adb520
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bootloaders/refind/default.nix
@@ -0,0 +1,137 @@
+{ lib, stdenv, fetchurl, fetchpatch, gnu-efi, nixosTests }:
+
+let
+  archids = {
+    x86_64-linux = { hostarch = "x86_64"; efiPlatform = "x64"; };
+    i686-linux = rec { hostarch = "ia32"; efiPlatform = hostarch; };
+    aarch64-linux = { hostarch = "aarch64"; efiPlatform = "aa64"; };
+  };
+
+  inherit
+    (archids.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}"))
+    hostarch efiPlatform;
+in
+
+stdenv.mkDerivation rec {
+  pname = "refind";
+  version = "0.14.0.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/refind/${version}/${pname}-src-${version}.tar.gz";
+    hash = "sha256-JqDFXf01ZUmeH4LY/ldGTb7xnKiGzm0BqBUii478iw8=";
+  };
+
+  patches = [
+    # Removes hardcoded toolchain for aarch64, allowing successful aarch64 builds.
+    ./0001-toolchain.patch
+  ];
+
+  buildInputs = [ gnu-efi ];
+
+  hardeningDisable = [ "stackprotector" ];
+
+  makeFlags =
+    [ "prefix="
+      "EFIINC=${gnu-efi}/include/efi"
+      "EFILIB=${gnu-efi}/lib"
+      "GNUEFILIB=${gnu-efi}/lib"
+      "EFICRT0=${gnu-efi}/lib"
+      "HOSTARCH=${hostarch}"
+      "ARCH=${hostarch}"
+    ];
+
+  buildFlags = [ "gnuefi" "fs_gnuefi" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -d $out/bin/
+    install -d $out/share/refind/drivers_${efiPlatform}/
+    install -d $out/share/refind/tools_${efiPlatform}/
+    install -d $out/share/refind/docs/html/
+    install -d $out/share/refind/docs/Styles/
+    install -d $out/share/refind/fonts/
+    install -d $out/share/refind/icons/
+    install -d $out/share/refind/images/
+    install -d $out/share/refind/keys/
+
+    # refind uefi app
+    install -D -m0644 refind/refind_${efiPlatform}.efi $out/share/refind/refind_${efiPlatform}.efi
+
+    # uefi drivers
+    install -D -m0644 drivers_${efiPlatform}/*.efi $out/share/refind/drivers_${efiPlatform}/
+
+    # uefi apps
+    install -D -m0644 gptsync/gptsync_${efiPlatform}.efi $out/share/refind/tools_${efiPlatform}/gptsync_${efiPlatform}.efi
+
+    # helper scripts
+    install -D -m0755 refind-install $out/bin/refind-install
+    install -D -m0755 mkrlconf $out/bin/refind-mkrlconf
+    install -D -m0755 mvrefind $out/bin/refind-mvrefind
+    install -D -m0755 fonts/mkfont.sh $out/bin/refind-mkfont
+
+    # sample config files
+    install -D -m0644 refind.conf-sample $out/share/refind/refind.conf-sample
+
+    # docs
+    install -D -m0644 docs/refind/* $out/share/refind/docs/html/
+    install -D -m0644 docs/Styles/* $out/share/refind/docs/Styles/
+    install -D -m0644 README.txt $out/share/refind/docs/README.txt
+    install -D -m0644 NEWS.txt $out/share/refind/docs/NEWS.txt
+    install -D -m0644 BUILDING.txt $out/share/refind/docs/BUILDING.txt
+    install -D -m0644 CREDITS.txt $out/share/refind/docs/CREDITS.txt
+
+    # fonts
+    install -D -m0644 fonts/* $out/share/refind/fonts/
+    rm -f $out/share/refind/fonts/mkfont.sh
+
+    # icons
+    install -D -m0644 icons/*.png $out/share/refind/icons/
+
+    # images
+    install -D -m0644 images/*.{png,bmp} $out/share/refind/images/
+
+    # keys
+    install -D -m0644 keys/* $out/share/refind/keys/
+
+    # Fix variable definition of 'RefindDir' which is used to locate ressource files.
+    sed -i "s,\bRefindDir=.*,RefindDir=$out/share/refind,g" $out/bin/refind-install
+
+    # Patch uses of `which`.  We could patch in calls to efibootmgr,
+    # openssl, convert, and openssl, but that would greatly enlarge
+    # refind's closure (from ca 28MB to over 400MB).
+    sed -i 's,`which \(.*\)`,`type -p \1`,g' $out/bin/refind-install
+    sed -i 's,`which \(.*\)`,`type -p \1`,g' $out/bin/refind-mvrefind
+    sed -i 's,`which \(.*\)`,`type -p \1`,g' $out/bin/refind-mkfont
+
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    uefiCdrom = nixosTests.boot.uefiCdrom;
+  };
+
+  meta = with lib; {
+    description = "A graphical {,U}EFI boot manager";
+    longDescription = ''
+      rEFInd is a graphical boot manager for EFI- and UEFI-based
+      computers, such as all Intel-based Macs and recent (most 2011
+      and later) PCs. rEFInd presents a boot menu showing all the EFI
+      boot loaders on the EFI-accessible partitions, and optionally
+      BIOS-bootable partitions on Macs. EFI-compatbile OSes, including
+      Linux, provide boot loaders that rEFInd can detect and
+      launch. rEFInd can launch Linux EFI boot loaders such as ELILO,
+      GRUB Legacy, GRUB 2, and 3.3.0 and later kernels with EFI stub
+      support. EFI filesystem drivers for ext2/3/4fs, ReiserFS, HFS+,
+      and ISO-9660 enable rEFInd to read boot loaders from these
+      filesystems, too. rEFInd's ability to detect boot loaders at
+      runtime makes it very easy to use, particularly when paired with
+      Linux kernels that provide EFI stub support.
+    '';
+    homepage = "http://refind.sourceforge.net/";
+    maintainers = with maintainers; [ AndersonTorres samueldr ];
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" ];
+    license = licenses.gpl3Plus;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/bchunk/default.nix b/nixpkgs/pkgs/tools/cd-dvd/bchunk/default.nix
new file mode 100644
index 000000000000..a3677b984818
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/bchunk/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "bchunk";
+  version = "1.2.2";
+
+  src = fetchurl {
+    url = "http://he.fi/bchunk/${pname}-${version}.tar.gz";
+    sha256 = "12dxx98kbpc5z4dgni25280088bhlsb677rp832r82zzc1drpng7";
+  };
+
+  makeFlags = lib.optionals stdenv.cc.isClang [ "CC=${stdenv.cc.targetPrefix}cc" "LD=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    install -Dt $out/bin bchunk
+    install -Dt $out/share/man/man1 bchunk.1
+  '';
+
+  meta = with lib; {
+    homepage = "http://he.fi/bchunk/";
+    description = "A program that converts CD images in BIN/CUE format into a set of ISO and CDR tracks";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+    mainProgram = "bchunk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/bootiso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/bootiso/default.nix
new file mode 100644
index 000000000000..243989d04948
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/bootiso/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, fetchpatch
+, bash
+, makeWrapper
+, bc
+, jq
+, coreutils
+, util-linux
+, wimlib
+, file
+, syslinux
+, busybox
+, gnugrep # We can't use busybox's 'grep' as it doesn't support perl '-P' expressions.
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "bootiso";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "jsamr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1l09d543b73r0wbpsj5m6kski8nq48lbraq1myxhidkgl3mm3d5i";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://code.opensuse.org/package/bootiso/raw/3799710e3da40c1b429ea1a2ce3896d18d08a5c5/f/syslinux-lib-root.patch";
+      sha256 = "sha256-x2EJppQsPPymSrjRwEy7mylW+2OKcGzKsKF3y7fzrB8=";
+    })
+  ];
+
+  strictDeps = true;
+  buildInputs = [ bash ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  postPatch = ''
+    substituteInPlace bootiso \
+      --replace "\$(basename \"\$0\")" "bootiso" \
+      --replace "/usr/share/syslinux" "${syslinux}/share/syslinux"
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/bootiso \
+      --prefix PATH : ${lib.makeBinPath [ bc jq coreutils util-linux wimlib file syslinux gnugrep busybox ]} \
+  '';
+
+  meta = with lib; {
+    description = "Script for securely creating a bootable USB device from one image file";
+    homepage = "https://github.com/jsamr/bootiso";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ muscaln ];
+    platforms = platforms.all;
+    mainProgram = "bootiso";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/brasero/default.nix b/nixpkgs/pkgs/tools/cd-dvd/brasero/default.nix
new file mode 100644
index 000000000000..fb57e2d7decb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/brasero/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, lib, fetchurl, pkg-config, gtk3, itstool, gst_all_1, libxml2, libnotify
+, libcanberra-gtk3, intltool, dvdauthor, libburn, libisofs
+, vcdimager, wrapGAppsHook, hicolor-icon-theme }:
+
+let
+  major = "3.12";
+  minor = "3";
+  binpath = lib.makeBinPath [ dvdauthor vcdimager ];
+
+in stdenv.mkDerivation rec {
+  version = "${major}.${minor}";
+  pname = "brasero";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/brasero/${major}/${pname}-${version}.tar.xz";
+    hash = "sha256-h3SerjOhQSB9GwC+IzttgEWYLtMkntS5ja4fOpdf6hU=";
+  };
+
+  nativeBuildInputs = [ pkg-config itstool intltool wrapGAppsHook ];
+
+  buildInputs = [ gtk3 libxml2 libnotify libcanberra-gtk3 libburn libisofs
+                  hicolor-icon-theme
+                  gst_all_1.gstreamer gst_all_1.gst-plugins-base
+                  gst_all_1.gst-plugins-good gst_all_1.gst-plugins-bad
+                  gst_all_1.gst-plugins-ugly gst_all_1.gst-libav ];
+
+  # brasero checks that the applications it uses aren't symlinks, but this
+  # will obviously not work on nix
+  patches = [ ./remove-symlink-check.patch ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-girdir=$out/share/gir-1.0"
+    "--with-typelibdir=$out/lib/girepository-1.0"
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix PATH : "${binpath}")
+  '';
+
+  meta = with lib; {
+    description = "A Gnome CD/DVD Burner";
+    homepage = "https://wiki.gnome.org/Apps/Brasero";
+    maintainers = [ maintainers.bdimcheff ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    mainProgram = "brasero";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/brasero/remove-symlink-check.patch b/nixpkgs/pkgs/tools/cd-dvd/brasero/remove-symlink-check.patch
new file mode 100644
index 000000000000..028ac12c4a03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/brasero/remove-symlink-check.patch
@@ -0,0 +1,29 @@
+diff --git a/libbrasero-burn/burn-plugin.c b/libbrasero-burn/burn-plugin.c
+index f97bc5f..88e9d35 100644
+--- a/libbrasero-burn/burn-plugin.c
++++ b/libbrasero-burn/burn-plugin.c
+@@ -221,21 +221,10 @@ brasero_plugin_test_app (BraseroPlugin *plugin,
+ 		return;
+ 	}
+ 
+-	/* make sure that's not a symlink pointing to something with another
+-	 * name like wodim.
+-	 * NOTE: we used to test the target and see if it had the same name as
+-	 * the symlink with GIO. The problem is, when the symlink pointed to
+-	 * another symlink, then GIO didn't follow that other symlink. And in
+-	 * the end it didn't work. So forbid all symlink. */
+-	if (g_file_test (prog_path, G_FILE_TEST_IS_SYMLINK)) {
+-		brasero_plugin_add_error (plugin,
+-		                          BRASERO_PLUGIN_ERROR_SYMBOLIC_LINK_APP,
+-		                          name);
+-		g_free (prog_path);
+-		return;
+-	}
++	/* disable symlink check on nixos */
++
+ 	/* Make sure it's a regular file */
+-	else if (!g_file_test (prog_path, G_FILE_TEST_IS_REGULAR)) {
++	if (!g_file_test (prog_path, G_FILE_TEST_IS_REGULAR)) {
+ 		brasero_plugin_add_error (plugin,
+ 		                          BRASERO_PLUGIN_ERROR_MISSING_APP,
+ 		                          name);
diff --git a/nixpkgs/pkgs/tools/cd-dvd/brasero/wrapper.nix b/nixpkgs/pkgs/tools/cd-dvd/brasero/wrapper.nix
new file mode 100644
index 000000000000..5371e8d526b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/brasero/wrapper.nix
@@ -0,0 +1,18 @@
+{ lib, symlinkJoin, brasero-original, cdrtools, libdvdcss, makeWrapper }:
+
+let
+  binPath = lib.makeBinPath [ cdrtools ];
+in symlinkJoin {
+  name = "brasero-${brasero-original.version}";
+
+  paths = [ brasero-original ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/brasero \
+      --prefix PATH ':' ${binPath} \
+      --prefix LD_PRELOAD : ${lib.makeLibraryPath [ libdvdcss ]}/libdvdcss.so
+  '';
+
+  inherit (brasero-original) meta;
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/ccd2iso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/ccd2iso/default.nix
new file mode 100644
index 000000000000..4885b16aa065
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/ccd2iso/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ccd2iso";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ccd2iso/ccd2iso-${version}.tar.gz";
+    sha256 = "1z000zi7hpr2h9cabj6hzf3n6a6gd6glmm8nn36v4b8i4vzbhx7q";
+  };
+
+  meta = with lib; {
+    description = "CloneCD to ISO converter";
+    homepage = "https://sourceforge.net/projects/ccd2iso/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ yana ];
+    platforms = platforms.unix;
+    mainProgram = "ccd2iso";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdi2iso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cdi2iso/default.nix
new file mode 100644
index 000000000000..f6d0b4e1175f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdi2iso/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "cdi2iso";
+  version = "0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cdi2iso.berlios/${pname}-${version}-src.tar.gz";
+    sha256 = "0fj2fxhpr26z649m0ph71378c41ljflpyk89g87x8r1mc4rbq3kh";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace "gcc" "${stdenv.cc.targetPrefix}cc"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp cdi2iso $out/bin
+  '';
+
+  meta = with lib; {
+    description = "A very simple utility for converting DiscJuggler images to the standard ISO-9660 format";
+    homepage = "https://sourceforge.net/projects/cdi2iso.berlios";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ hrdinka ];
+    platforms = platforms.all;
+    mainProgram = "cdi2iso";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/default.nix
new file mode 100644
index 000000000000..5f8d6016aa21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromRepoOrCz, autoreconfHook, makeWrapper, libdvdcss, libdvdread, perl, perlPackages, asciidoc, xmlto, sourceHighlight, docbook_xsl, docbook_xml_dtd_45 }:
+
+stdenv.mkDerivation {
+  pname = "cdimgtools";
+  version = "0.3";
+
+  src = fetchFromRepoOrCz {
+    repo = "cdimgtools";
+    rev = "version/0.3";
+    sha256 = "1hxg3glxj26fh9xnv184sfdc2wi4cnzvn7chz47wcqdsd0d5fn8w";
+  };
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper asciidoc perlPackages.PodPerldoc xmlto sourceHighlight docbook_xsl docbook_xml_dtd_45 ];
+
+  buildInputs = [ perl perlPackages.StringEscape perlPackages.DataHexdumper libdvdcss libdvdread ];
+
+  patches = [ ./nrgtool_fix_my.patch ./removed_dvdcss_interface_2.patch];
+
+  postFixup = ''
+    for cmd in raw96cdconv nrgtool; do
+      wrapProgram "$out/bin/$cmd" --prefix PERL5LIB : "$PERL5LIB"
+    done
+  '';
+
+  outputs = [ "out" "doc" ];
+
+  installTargets = [ "install" "install-doc" ];
+
+  meta = with lib; {
+    homepage = "https://repo.or.cz/cdimgtools.git/blob_plain/refs/heads/release:/README.html";
+    description = "Tools to inspect and manipulate CD/DVD optical disc images";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ hhm ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/nrgtool_fix_my.patch b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/nrgtool_fix_my.patch
new file mode 100644
index 000000000000..5ed389c46ca2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/nrgtool_fix_my.patch
@@ -0,0 +1,12 @@
+Fixes an error in nrgtool.
+--- a/nrgtool
++++ b/nrgtool
+@@ -162,7 +162,7 @@ sub process_file {
+ 	}
+ 	seek $nrg, 0, SEEK_SET if ($iff_only);
+ 	seek $nrg, $offset, SEEK_SET unless ($iff_only);
+-	while (my $_ = read_chunk($nrg, $iff)) {
++	while ($_ = read_chunk($nrg, $iff)) {
+ 		if ($_ < -1) {
+ 			warn  "ERROR while reading an IFF chunk; aborting\n";
+ 			return;
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/removed_dvdcss_interface_2.patch b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/removed_dvdcss_interface_2.patch
new file mode 100644
index 000000000000..cb265eae05bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/removed_dvdcss_interface_2.patch
@@ -0,0 +1,53 @@
+Removes the deprecated and removed `dvdcss_interface_2` libdvdcss function.
+
+This does not change any functionality; it only modifies the printing of software version information.
+--- a/cssdec.c
++++ b/cssdec.c
+@@ -102,8 +102,8 @@ int main( int argc, char *argv[] )
+ 			b_keyonly = 1;
+ 			break;
+ 		case 'V':
+-			printf( "%s version %s (libdvdcss version %s)\n",
+-			  progname, progversion, dvdcss_interface_2 );
++			printf( "%s version %s\n",
++			  progname, progversion );
+ 			exit( EX_SUCCESS );
+ 			break;
+ 		case '?':
+@@ -126,8 +126,8 @@ int main( int argc, char *argv[] )
+ 	if( argc >= 3 ) end = (int)strtol( argv[2], (char **)NULL, 0 );
+ 
+ 	/* Initialize libdvdcss */
+-	printe( 2, "%s version %s (libdvdcss version %s)",
+-	  progname, progversion, dvdcss_interface_2 );
++	printe( 2, "%s version %s",
++	  progname, progversion );
+ 	dvdcss = dvdcss_open( (char *)dvdfile );
+ 	if( dvdcss == NULL )
+ 	{
+diff --git a/dvdimgdecss.c b/dvdimgdecss.c
+index 0b7006d..b7d251a 100644
+--- a/dvdimgdecss.c
++++ b/dvdimgdecss.c
+@@ -157,8 +157,8 @@ int main( int argc, char *argv[] )
+ 			dvdread_decrypt = 1;
+ 			break;
+ 		case 'V':
+-			printf( "%s version %s (libdvdcss version %s)\n",
+-			  progname, progversion, dvdcss_interface_2 );
++			printf( "%s version %s\n",
++			  progname, progversion );
+ 			exit( EX_SUCCESS );
+ 			break;
+ 		case '?':
+@@ -180,8 +180,8 @@ int main( int argc, char *argv[] )
+ 	if( !imgfile ) verbosity++;
+ 
+ 	/* Open the DVD */
+-	printe( 2, "%s: version %s (libdvdcss version %s)\n",
+-	  progname, progversion, dvdcss_interface_2 );
++	printe( 2, "%s: version %s\n",
++	  progname, progversion );
+ 	dvdcss = dvdcss_open( dvdfile );
+ 	if( dvdcss == NULL ) {
+ 		printe( 1, "opening of the DVD (%s) with libdvdcss failed\n", dvdfile );
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrdao/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cdrdao/default.nix
new file mode 100644
index 000000000000..959899d3b3f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrdao/default.nix
@@ -0,0 +1,73 @@
+{
+  lib,
+  stdenv,
+  fetchurl,
+  fetchpatch,
+  pkg-config,
+  libiconv,
+  libvorbis,
+  libmad,
+  libao,
+  CoreServices,
+  IOKit,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "cdrdao";
+  version = "1.2.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cdrdao/cdrdao-${finalAttrs.version}.tar.bz2";
+    hash = "sha256-0ZtnyFPF26JAavqrbNeI53817r5jTKxGeVKEd8e+AbY=";
+  };
+
+  makeFlags = [ "RM=rm" "LN=ln" "MV=mv" ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libiconv
+    libvorbis
+    libmad
+    libao
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreServices
+    IOKit
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  patches = [
+    # Fix build on macOS SDK < 12
+    # https://github.com/cdrdao/cdrdao/pull/19
+    (fetchpatch {
+      url = "https://github.com/cdrdao/cdrdao/commit/105d72a61f510e3c47626476f9bbc9516f824ede.patch";
+      hash = "sha256-NVIw59CSrc/HcslhfbYQNK/qSmD4QbfuV8hWYhWelX4=";
+    })
+
+    # Fix undefined behaviour caused by uninitialized variable
+    # https://github.com/cdrdao/cdrdao/pull/21
+    (fetchpatch {
+      url = "https://github.com/cdrdao/cdrdao/commit/251a40ab42305c412674c7c2d391374d91e91c95.patch";
+      hash = "sha256-+nGlWw5rgc5Ns2l+6fQ4Hp2LbhO4R/I95h9WGIh/Ebw=";
+    })
+  ];
+
+  # we have glibc/include/linux as a symlink to the kernel headers,
+  # and the magic '..' points to kernelheaders, and not back to the glibc/include
+  postPatch = ''
+    sed -i 's,linux/../,,g' dao/sg_err.h
+  '';
+
+  # Needed on gcc >= 6.
+  env.NIX_CFLAGS_COMPILE = "-Wno-narrowing";
+
+  meta = {
+    description = "A tool for recording audio or data CD-Rs in disk-at-once (DAO) mode";
+    homepage = "https://cdrdao.sourceforge.net/";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.11-fno-common.patch b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.11-fno-common.patch
new file mode 100644
index 000000000000..c7db796cfcfc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.11-fno-common.patch
@@ -0,0 +1,11 @@
+--- a/genisoimage/genisoimage.h
++++ b/genisoimage/genisoimage.h
+@@ -377,7 +377,7 @@ extern int	use_fileversion;
+ extern int	split_SL_component;
+ extern int	split_SL_field;
+ extern char	*trans_tbl;
+-char		*outfile;
++extern char	*outfile;
+ 
+ #define	JMAX		64	/* maximum Joliet file name length (spec) */
+ #define	JLONGMAX	103	/* out of spec Joliet file name length */
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.9-efi-boot.patch b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.9-efi-boot.patch
new file mode 100644
index 000000000000..45f910b03e66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.9-efi-boot.patch
@@ -0,0 +1,204 @@
+diff --git a/doc/icedax/tracknames.pl b/doc/icedax/tracknames.pl
+old mode 100755
+new mode 100644
+index 09f0fcf..801b89e
+--- a/doc/icedax/tracknames.pl
++++ b/doc/icedax/tracknames.pl
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl 
++#!/usr/bin/perl 
+ # A quick perl hack to get rename files pulled in with icedax.
+ # by billo@billo.com
+ #
+diff --git a/genisoimage/eltorito.c b/genisoimage/eltorito.c
+index b97bdf1..5d7c2d1 100644
+--- a/genisoimage/eltorito.c
++++ b/genisoimage/eltorito.c
+@@ -59,7 +59,7 @@ static	void	get_torito_desc(struct eltorito_boot_descriptor *boot_desc);
+ static	void	fill_boot_desc(struct eltorito_defaultboot_entry *boot_desc_entry,
+ 										struct eltorito_boot_entry_info *boot_entry);
+ void	get_boot_entry(void);
+-void	new_boot_entry(void);
++void	new_boot_entry();
+ static	int	tvd_write(FILE *outfile);
+ 
+ 
+@@ -283,6 +283,7 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc)
+ 	int			i;
+ 	int			offset;
+ 	struct eltorito_defaultboot_entry boot_desc_record;
++	struct eltorito_sectionheader_entry section_header;
+ 
+ 	memset(boot_desc, 0, sizeof (*boot_desc));
+ 	boot_desc->type[0] = 0;
+@@ -317,7 +318,7 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc)
+ 	 */
+ 	memset(&valid_desc, 0, sizeof (valid_desc));
+ 	valid_desc.headerid[0] = 1;
+-	valid_desc.arch[0] = EL_TORITO_ARCH_x86;
++	valid_desc.arch[0] = first_boot_entry->arch;
+ 
+ 	/*
+ 	 * we'll shove start of publisher id into id field,
+@@ -347,10 +348,53 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc)
+ 	/* now write it to the virtual boot catalog */
+ 	memcpy(de2->table, &valid_desc, 32);
+ 
+-	for (current_boot_entry = first_boot_entry, offset = sizeof (valid_desc);
+-		current_boot_entry != NULL;
+-		current_boot_entry = current_boot_entry->next,
+-		offset += sizeof (boot_desc_record)) {
++	/* Fill the first entry, since it's special and already has the
++	 * matching header via the validation header... */
++	offset = sizeof (valid_desc);
++	current_boot_entry = first_boot_entry;
++
++	if (offset >= SECTOR_SIZE) {
++#ifdef	USE_LIBSCHILY
++		comerrno(EX_BAD, "Too many El Torito boot entries\n");
++#else
++		fprintf(stderr,	"Too many El Torito boot entries\n");
++		exit(1);
++#endif
++	}
++	fill_boot_desc(&boot_desc_record, current_boot_entry);
++	memcpy(de2->table + offset, &boot_desc_record,
++				sizeof (boot_desc_record));
++
++	offset += sizeof(boot_desc_record);
++
++	for (current_boot_entry = current_boot_entry->next;
++			current_boot_entry != NULL;
++			current_boot_entry = current_boot_entry->next) {
++		struct eltorito_sectionheader_entry section_header;
++
++		if (offset >= SECTOR_SIZE) {
++#ifdef	USE_LIBSCHILY
++			comerrno(EX_BAD,
++			"Too many El Torito boot entries\n");
++#else
++			fprintf(stderr,
++			"Too many El Torito boot entries\n");
++			exit(1);
++#endif
++		}
++
++		memset(&section_header, '\0', sizeof(section_header));
++		if (current_boot_entry->next)
++			section_header.headerid[0] = EL_TORITO_SECTION_HEADER;
++		else
++			section_header.headerid[0] = EL_TORITO_LAST_SECTION_HEADER;
++
++		section_header.arch[0] = current_boot_entry->arch;
++		set_721(section_header.num_entries, 1);
++
++		memcpy(de2->table + offset, &section_header,
++					sizeof(section_header));
++		offset += sizeof(section_header);
+ 
+ 		if (offset >= SECTOR_SIZE) {
+ #ifdef	USE_LIBSCHILY
+@@ -365,6 +409,8 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc)
+ 		fill_boot_desc(&boot_desc_record, current_boot_entry);
+ 		memcpy(de2->table + offset, &boot_desc_record,
+ 					sizeof (boot_desc_record));
++		offset += sizeof (boot_desc_record);
++
+ 	}
+ }/* get_torito_desc(... */
+ 
+diff --git a/genisoimage/genisoimage.c b/genisoimage/genisoimage.c
+index a5b0b46..8add1ac 100644
+--- a/genisoimage/genisoimage.c
++++ b/genisoimage/genisoimage.c
+@@ -47,6 +47,7 @@
+ 
+ #include <mconfig.h>
+ #include "genisoimage.h"
++#include "iso9660.h"
+ #include <errno.h>
+ #include <timedefs.h>
+ #include <fctldefs.h>
+@@ -523,6 +524,8 @@ static const struct ld_option ld_options[] =
+ 	'\0', NULL, "Set debug flag", ONE_DASH},
+ 	{{"eltorito-boot", required_argument, NULL, 'b'},
+ 	'b', "FILE", "Set El Torito boot image name", ONE_DASH},
++	{{"efi-boot", required_argument, NULL, 'e'},
++	'e', "FILE", "Set EFI boot image name", ONE_DASH},
+ 	{{"eltorito-alt-boot", no_argument, NULL, OPTION_ALT_BOOT},
+ 	'\0', NULL, "Start specifying alternative El Torito boot parameters", ONE_DASH},
+ 	{{"sparc-boot", required_argument, NULL, 'B'},
+@@ -1502,6 +1505,7 @@ int main(int argc, char *argv[])
+ 			all_files = 0;
+ 			break;
+ 		case 'b':
++		case 'e':
+ 			do_sort++;		/* We sort bootcat/botimage */
+ 			use_eltorito++;
+ 			boot_image = optarg;	/* pathname of the boot image */
+@@ -1517,6 +1521,10 @@ int main(int argc, char *argv[])
+ #endif
+ 			}
+ 			get_boot_entry();
++			if (c == 'e')
++				current_boot_entry->arch = EL_TORITO_ARCH_EFI;
++			else
++				current_boot_entry->arch = EL_TORITO_ARCH_x86;
+ 			current_boot_entry->boot_image = boot_image;
+ 			break;
+ 		case OPTION_ALT_BOOT:
+diff --git a/genisoimage/genisoimage.h b/genisoimage/genisoimage.h
+index bbedfb0..76e5e21 100644
+--- a/genisoimage/genisoimage.h
++++ b/genisoimage/genisoimage.h
+@@ -293,6 +293,7 @@ struct deferred_write {
+ struct eltorito_boot_entry_info {
+ 	struct eltorito_boot_entry_info *next;
+ 	char		*boot_image;
++	char		arch;
+ 	int		not_bootable;
+ 	int		no_emul_boot;
+ 	int		hard_disk_boot;
+diff --git a/genisoimage/iso9660.h b/genisoimage/iso9660.h
+index c74c2a9..c8b7a05 100644
+--- a/genisoimage/iso9660.h
++++ b/genisoimage/iso9660.h
+@@ -62,10 +62,14 @@ struct iso_volume_descriptor {
+ #define	EL_TORITO_ARCH_x86	0
+ #define	EL_TORITO_ARCH_PPC	1
+ #define	EL_TORITO_ARCH_MAC	2
++#define	EL_TORITO_ARCH_EFI	0xef
+ 
+ #define	EL_TORITO_BOOTABLE	0x88
+ #define	EL_TORITO_NOT_BOOTABLE	0
+ 
++#define	EL_TORITO_SECTION_HEADER	0x90
++#define	EL_TORITO_LAST_SECTION_HEADER	0x91
++
+ #define	EL_TORITO_MEDIA_NOEMUL	0
+ #define	EL_TORITO_MEDIA_12FLOP	1
+ #define	EL_TORITO_MEDIA_144FLOP	2
+@@ -173,7 +177,7 @@ struct eltorito_validation_entry {
+ struct eltorito_defaultboot_entry {
+ 	char boot_id			[ISODCL(1,    1)]; /* 711 */
+ 	char boot_media			[ISODCL(2,    2)];
+-	char loadseg			[ISODCL(3,    4)]; /* 711 */
++	char loadseg			[ISODCL(3,    4)]; /* 712 */
+ 	char sys_type			[ISODCL(5,    5)];
+ 	char pad1			[ISODCL(6,    6)];
+ 	char nsect			[ISODCL(7,    8)];
+@@ -181,6 +185,14 @@ struct eltorito_defaultboot_entry {
+ 	char pad2			[ISODCL(13,  32)];
+ };
+ 
++/* El Torito Section Header Entry in boot catalog */
++struct eltorito_sectionheader_entry {
++	char headerid			[ISODCL(1,    1)]; /* 711 */
++	char arch			[ISODCL(2,    2)];
++	char num_entries		[ISODCL(3,    4)]; /* 711 */
++	char id				[ISODCL(5,   32)];
++};
++
+ /*
+  * XXX JS: The next two structures have odd lengths!
+  * Some compilers (e.g. on Sun3/mc68020) padd the structures to even length.
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrkit/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/default.nix
new file mode 100644
index 000000000000..402e6f4dde37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/default.nix
@@ -0,0 +1,81 @@
+{lib, stdenv, fetchurl, cmake, libcap, zlib, bzip2, perl, iconv, darwin}:
+
+stdenv.mkDerivation rec {
+  pname = "cdrkit";
+  version = "1.1.11";
+
+  src = fetchurl {
+    url = "http://cdrkit.org/releases/cdrkit-${version}.tar.gz";
+    sha256 = "1nj7iv3xrq600i37na9a5idd718piiiqbs4zxvpjs66cdrsk1h6i";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ zlib bzip2 perl ] ++
+    lib.optionals stdenv.isLinux [ libcap ] ++
+    lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Carbon IOKit iconv ]);
+
+  hardeningDisable = [ "format" ];
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.hostPlatform.isMusl [
+    "-D__THROW="
+  ] ++ lib.optionals stdenv.cc.isClang [
+    "-Wno-error=int-conversion"
+    "-Wno-error=implicit-function-declaration"
+  ]);
+
+  # efi-boot-patch extracted from http://arm.koji.fedoraproject.org/koji/rpminfo?rpmID=174244
+  patches = [ ./include-path.patch ./cdrkit-1.1.9-efi-boot.patch ./cdrkit-1.1.11-fno-common.patch ];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace libusal/scsi-mac-iokit.c \
+      --replace "IOKit/scsi-commands/SCSITaskLib.h" "IOKit/scsi/SCSITaskLib.h"
+    substituteInPlace genisoimage/sha256.c \
+      --replace "<endian.h>" "<machine/endian.h>"
+    substituteInPlace genisoimage/sha512.c \
+      --replace "<endian.h>" "<machine/endian.h>"
+    substituteInPlace genisoimage/sha256.h \
+      --replace "__THROW" ""
+    substituteInPlace genisoimage/sha512.h \
+      --replace "__THROW" ""
+  '';
+
+  preConfigure = lib.optionalString stdenv.hostPlatform.isMusl ''
+    substituteInPlace include/xconfig.h.in \
+        --replace "#define HAVE_RCMD 1" "#undef HAVE_RCMD"
+  '';
+
+  postConfigure = lib.optionalString stdenv.isDarwin ''
+    for f in */CMakeFiles/*.dir/link.txt ; do
+      substituteInPlace "$f" \
+        --replace "-lrt" "-framework IOKit"
+    done
+  '';
+
+  postInstall = ''
+    # file name compatibility with the old cdrecord (growisofs wants this name)
+    ln -s $out/bin/genisoimage $out/bin/mkisofs
+    ln -s $out/bin/wodim $out/bin/cdrecord
+  '';
+
+  cmakeFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ "-DBITFIELDS_HTOL=0" ];
+
+  makeFlags = [ "PREFIX=\$(out)" ];
+
+  meta = {
+    description = "Portable command-line CD/DVD recorder software, mostly compatible with cdrtools";
+
+    longDescription = ''
+      Cdrkit is a suite of programs for recording CDs and DVDs,
+      blanking CD-RW media, creating ISO-9660 filesystem images,
+      extracting audio CD data, and more.  The programs included in
+      the cdrkit package were originally derived from several sources,
+      most notably mkisofs by Eric Youngdale and others, cdda2wav by
+      Heiko Eissfeldt, and cdrecord by Jörg Schilling.  However,
+      cdrkit is not affiliated with any of these authors; it is now an
+      independent project.
+    '';
+
+    homepage = "http://cdrkit.org/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrkit/include-path.patch b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/include-path.patch
new file mode 100644
index 000000000000..c071e182d7f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/include-path.patch
@@ -0,0 +1,9 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 57edba6..d06b6d9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,3 +1,4 @@
+ PROJECT (cdrkit C)
++INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/include)
+ SUBDIRS(include genisoimage wodim libedc libhfs_iso libparanoia icedax libusal librols libunls readom netscsid 3rd-party/dirsplit)
+ 
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrtools/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cdrtools/default.nix
new file mode 100644
index 000000000000..68358a0c333f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrtools/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, m4, acl, libcap, Carbon, IOKit }:
+
+stdenv.mkDerivation rec {
+  pname = "cdrtools";
+  version = "3.02a09";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cdrtools/${pname}-${version}.tar.bz2";
+    sha256 = "10ayj48jax2pvsv6j5gybwfsx7b74zdjj84znwag7wwf8n7l6a5a";
+  };
+
+  nativeBuildInputs = [ m4 ];
+  buildInputs = if stdenv.isDarwin then [ Carbon IOKit ] else [ acl libcap ];
+
+  postPatch = ''
+    sed "/\.mk3/d" -i libschily/Targets.man
+    substituteInPlace man/Makefile --replace "man4" ""
+    substituteInPlace RULES/rules.prg --replace "/bin/" ""
+  '' + lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    ln -sv i386-darwin-clang64.rul RULES/arm64-darwin-cc.rul
+    ln -sv i386-darwin-clang64.rul RULES/arm64-darwin-clang.rul
+    ln -sv i386-darwin-clang64.rul RULES/arm64-darwin-clang64.rul
+  '';
+
+  dontConfigure = true;
+
+  makeFlags = [ "GMAKE_NOWARN=true" "INS_BASE=/" "INS_RBASE=/" "DESTDIR=${placeholder "out"}" ];
+
+  enableParallelBuilding = false; # parallel building fails on some linux machines
+
+  hardeningDisable = lib.optional stdenv.hostPlatform.isMusl "fortify";
+
+  meta = with lib; {
+    homepage = "https://cdrtools.sourceforge.net/private/cdrecord.html";
+    description = "Highly portable CD/DVD/BluRay command line recording software";
+    license = with licenses; [ cddl gpl2 lgpl21 ];
+    platforms = with platforms; linux ++ darwin;
+    # Licensing issues: This package contains code licensed under CDDL, GPL2
+    # and LGPL2. There is a debate regarding the legality of distributing this
+    # package in binary form.
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cue2pops/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cue2pops/default.nix
new file mode 100644
index 000000000000..6cb93b3e04be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cue2pops/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation {
+  pname = "cue2pops";
+  version = "unstable-2018-01-04";
+
+  src = fetchFromGitHub {
+    owner = "makefu";
+    repo = "cue2pops-linux";
+    rev = "541863adf23fdecde92eba5899f8d58586ca4551";
+    sha256 = "05w84726g3k33rz0wwb9v77g7xh4cnhy9sxlpilf775nli9bynrk";
+  };
+
+  dontConfigure = true;
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    install --directory --mode=755 $out/bin
+    install --mode=755 cue2pops $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Convert CUE to ISO suitable to POPStarter";
+    homepage = "https://github.com/makefu/cue2pops-linux";
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.all;
+    mainProgram = "cue2pops";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cuetools/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cuetools/default.nix
new file mode 100644
index 000000000000..a6cf5506138b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cuetools/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, bison, flac, flex, id3v2, vorbis-tools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cuetools";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "svend";
+    repo = pname;
+    rev = version;
+    sha256 = "02ksv1ahf1v4cr2xbclsfv5x17m9ivzbssb5r8xjm97yh8a7spa3";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ bison flac flex id3v2 vorbis-tools ];
+
+  postInstall = ''
+    # add link for compatibility with Debian-based distros, which package `cuetag.sh` as `cuetag`
+    ln -s $out/bin/cuetag.sh $out/bin/cuetag
+  '';
+
+  meta = with lib; {
+    description = "A set of utilities for working with cue files and toc files";
+    homepage = "https://github.com/svend/cuetools";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ codyopel jcumming ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/darwin.patch b/nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/darwin.patch
new file mode 100644
index 000000000000..7a7490c52673
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/darwin.patch
@@ -0,0 +1,17 @@
+diff --git a/Makefile.m4 b/Makefile.m4
+index a6a100b..bf7c041 100644
+--- a/Makefile.m4
++++ b/Makefile.m4
+@@ -30,8 +32,10 @@ LINK.o	=$(LINK.cc)
+ # to install set-root-uid, `make BIN_MODE=04755 install'...
+ BIN_MODE?=0755
+ install:	dvd+rw-tools
+-	install -o root -m $(BIN_MODE) $(CHAIN) /usr/bin
+-	install -o root -m 0644 growisofs.1 /usr/share/man/man1
++	install -d $(prefix)/bin
++	install -d $(prefix)/share/man/man1
++	install -m $(BIN_MODE) $(CHAIN) $(prefix)/bin
++	install -m 0644 growisofs.1 $(prefix)/share/man/man1
+ ])
+ 
+ ifelse(OS,MINGW32,[
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix b/nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix
new file mode 100644
index 000000000000..a618d93214f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchurl, fetchpatch, cdrtools, m4, darwin }:
+
+let
+  inherit (darwin.apple_sdk.frameworks) IOKit;
+in
+stdenv.mkDerivation rec {
+  pname = "dvd+rw-tools";
+  version = "7.1";
+
+  src = fetchurl {
+    url = "http://fy.chalmers.se/~appro/linux/DVD+RW/tools/${pname}-${version}.tar.gz";
+    sha256 = "1jkjvvnjcyxpql97xjjx0kwvy70kxpiznr2zpjy2hhci5s10zmpq";
+  };
+
+  patches = [ ./darwin.patch ]
+  # Patches from Gentoo
+  ++ builtins.map ({pfile, sha256}: fetchpatch {
+       url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-cdr/dvd+rw-tools/files/${pfile}?id=b510df361241e8f16314b1f14642305f0111dac6";
+       inherit sha256;
+     })
+     [{ pfile = "dvd+rw-tools-7.0-dvddl-r1.patch"; sha256 = "12l33jq6405shfwdycrj52qmd07h5bsp1vjaddknfri456azjny5"; }
+      { pfile = "dvd+rw-tools-7.0-glibc2.6.90.patch"; sha256 = "1fb3gap2in782pa4164h1w0ha8ggsq3inissa1k0zn2p2r3rb5ln"; }
+      { pfile = "dvd+rw-tools-7.0-reload.patch"; sha256 = "12v2y2y6ci5hh6lbmsk97dzgznrm4bxwhc81mq684ix0qspb9mq4"; }
+      { pfile = "dvd+rw-tools-7.0-sysmacros.patch"; sha256 = "1rkb26cyhfxklkmna3l9b4797f6gzlxyqqin44jwnq3jmwfrs6v0"; }
+      { pfile = "dvd+rw-tools-7.0-wctomb-r1.patch"; sha256 = "1xg770l0b4bjn30y7nqg619v4m5ickcn2n8hv9k2an6r191daq58"; }
+      { pfile = "dvd+rw-tools-7.0-wexit.patch"; sha256 = "0sqzlkm19fmjx4lzxkxwn2ymrj9fq0zk0jkys3xm6xvd2ibb6kxl"; }
+      { pfile = "dvd+rw-tools-7.1-bluray_pow_freespace.patch"; sha256 = "0iscz8fs5002ymk6wl2fz4x06b7bdnc57rfz8kbv3216acqi5rv3"; }
+      { pfile = "dvd+rw-tools-7.1-bluray_srm+pow.patch"; sha256 = "0sy40m12w987i6g0cyxv8cfmab4vp7cd222lv05apknfi2y7smmw"; }
+      { pfile = "dvd+rw-tools-7.1-lastshort.patch"; sha256 = "01wspv70sil20khkg5kj086b1x8rrig4yhcq9s88bdjd42nv0vpx"; }
+      { pfile = "dvd+rw-tools-7.1-noevent.patch"; sha256 = "1kbmxpg15wci33f2h6pxxvf3qm0kpyzx9wj5a3l67sk34hvza3z6"; }
+     ];
+
+  nativeBuildInputs = [ m4 ];
+  buildInputs = [ cdrtools ]
+    ++ lib.optionals stdenv.isDarwin [ IOKit ];
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "CXX=${stdenv.cc.targetPrefix}c++"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.isDarwin [
+    # error: invalid suffix on literal; C++11 requires a space between literal and identifier
+    "-Wno-reserved-user-defined-literal"
+    # error: non-constant-expression cannot be narrowed from type 'size_t' (aka 'unsigned long') to 'IOByteCount' (aka 'unsigned int') in initializer list
+    "-Wno-c++11-narrowing"
+  ]);
+
+  meta = with lib; {
+    homepage = "http://fy.chalmers.se/~appro/linux/DVD+RW/tools";
+    description = "Tools for mastering Blu-ray and DVD+-RW/+-R media";
+    platforms = platforms.unix;
+    license = with licenses; [ gpl2 publicDomain ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvd-vr/default.nix b/nixpkgs/pkgs/tools/cd-dvd/dvd-vr/default.nix
new file mode 100644
index 000000000000..88703b28b582
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvd-vr/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dvd-vr";
+  version = "0.9.7";
+  src = fetchurl {
+    url = "https://www.pixelbeat.org/programs/dvd-vr/dvd-vr-${version}.tar.gz";
+    sha256 = "13wkdia3c0ryda40b2nzpb9vddimasgc4w95hvl0k555k9k8bl0r";
+  };
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://www.pixelbeat.org/programs/dvd-vr/";
+    downloadPage = "https://www.pixelbeat.org/programs/dvd-vr/";
+    description = "A utility to identify and optionally copy recordings from a DVD-VR format disc";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fgaz ];
+    mainProgram = "dvd-vr";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/default.nix b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/default.nix
new file mode 100644
index 000000000000..abbda3512e5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, stdenv
+, fetchurl
+, gettext
+, pkg-config
+, which
+, glib
+, gtk2
+, enableSoftening ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dvdisaster";
+  version = "0.79.10";
+
+  src = fetchurl {
+    url = "https://dvdisaster.jcea.es/downloads/${pname}-${version}.tar.bz2";
+    hash = "sha256-3Qqf9i8aSL9z2uJvm8P/QOPp83nODC3fyLL1iBIgf+g=";
+  };
+
+  nativeBuildInputs = [ gettext pkg-config which ];
+  buildInputs = [ glib gtk2 ];
+
+  patches = lib.optionals enableSoftening [
+    ./encryption.patch
+    ./dvdrom.patch
+  ];
+
+  postPatch = ''
+    patchShebangs ./
+    sed -i 's/dvdisaster48.png/dvdisaster/' contrib/dvdisaster.desktop
+    substituteInPlace scripts/bash-based-configure \
+      --replace 'if (make -v | grep "GNU Make") > /dev/null 2>&1 ;' \
+                'if make -v | grep "GNU Make" > /dev/null 2>&1 ;'
+  '';
+
+  configureFlags = [
+    # Explicit --docdir= is required for on-line help to work:
+    "--docdir=share/doc"
+    "--with-nls=yes"
+    "--with-embedded-src-path=no"
+  ] ++ lib.optional (stdenv.hostPlatform.isx86_64) "--with-sse2=yes";
+
+  # fatal error: inlined-icons.h: No such file or directory
+  enableParallelBuilding = false;
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    pushd regtest
+
+    mkdir -p "$TMP"/{log,regtest}
+    substituteInPlace common.bash \
+      --replace /dev/shm "$TMP/log" \
+      --replace /var/tmp "$TMP"
+
+    for test in *.bash; do
+      case "$test" in
+      common.bash)
+        echo "Skipping $test"
+        continue ;;
+      *)
+        echo "Running $test"
+        ./"$test"
+      esac
+    done
+
+    popd
+    runHook postCheck
+  '';
+
+  postInstall = ''
+    rm -f $out/bin/dvdisaster-uninstall.sh
+    mkdir -pv $out/share/applications
+    cp contrib/dvdisaster.desktop $out/share/applications/
+
+    for size in 16 24 32 48 64; do
+      mkdir -pv $out/share/icons/hicolor/"$size"x"$size"/apps/
+      cp contrib/dvdisaster"$size".png \
+        $out/share/icons/hicolor/"$size"x"$size"/apps/dvdisaster.png
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://dvdisaster.jcea.es/";
+    description = "Data loss/scratch/aging protection for CD/DVD media";
+    longDescription = ''
+      Dvdisaster provides a margin of safety against data loss on CD and
+      DVD media caused by scratches or aging media. It creates error correction
+      data which is used to recover unreadable sectors if the disc becomes
+      damaged at a later time.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    mainProgram = "dvdisaster";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/dvdrom.patch b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/dvdrom.patch
new file mode 100644
index 000000000000..ce3f3de2bc03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/dvdrom.patch
@@ -0,0 +1,19 @@
+Author: Corey Wright <undefined@pobox.com>
+Description: Adds support for DVD-ROM medium-type.
+
+Index: dvdisaster/scsi-layer.c
+===================================================================
+--- dvdisaster.orig/scsi-layer.c	2012-03-06 11:10:17.147044691 +0900
++++ dvdisaster/scsi-layer.c	2012-03-06 11:10:30.927044292 +0900
+@@ -913,6 +913,11 @@
+ 	    break;
+ 	 }
+ 
++	 if(layer_type & 0x01)
++	 {  dh->typeDescr = g_strdup("DVD-ROM");
++	    break;
++	 }
++
+ 	 if(layer_type & 0x06) /* strange thing: (re-)writeable but neither plus nor dash */ 
+ 	 {  dh->typeDescr = g_strdup("DVD-ROM (fake)");
+ 	    dh->subType = DVD;
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/encryption.patch b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/encryption.patch
new file mode 100644
index 000000000000..21e35889382d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/encryption.patch
@@ -0,0 +1,19 @@
+Author: n/a
+Description: Disables to skip on encrypted disks (e.g. DVD with CSS-Encryption).
+
+diff -Naur dvdisaster-0.79.5.orig/scsi-layer.c dvdisaster-0.79.5/scsi-layer.c
+--- dvdisaster-0.79.5.orig/scsi-layer.c	2015-10-28 21:56:57.000000000 +0100
++++ dvdisaster-0.79.5/scsi-layer.c	2015-12-27 06:19:32.012253661 +0100
+@@ -2712,12 +2712,6 @@
+       }
+    }
+ 
+-   if(dh->mainType == DVD && query_copyright(dh))
+-   {  CloseImage(image);
+-      Stop(_("This software does not support encrypted media.\n"));
+-      return NULL;
+-   }
+-
+    /* Create the bitmap of simulated defects */
+ 
+    if(Closure->simulateDefects)
diff --git a/nixpkgs/pkgs/tools/cd-dvd/iat/default.nix b/nixpkgs/pkgs/tools/cd-dvd/iat/default.nix
new file mode 100644
index 000000000000..3a727eaf74e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/iat/default.nix
@@ -0,0 +1,23 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation (finalAttr: {
+  pname = "iat";
+  version = "0.1.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/iat.berlios/iat-${finalAttr.version}.tar.gz";
+    hash = "sha256-sl1X/eKKArLYfNSf0UeLA5rb2DY1GHmmVP6hTCd2SyE=";
+  };
+
+  meta = with lib; {
+    description = "A tool for detecting the structure of many types of CD/DVD images";
+    homepage = "https://www.berlios.de/software/iso9660-analyzer-tool/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ hughobrien ];
+    platforms = platforms.linux;
+    mainProgram = "iat";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/cd-dvd/isolyzer/default.nix b/nixpkgs/pkgs/tools/cd-dvd/isolyzer/default.nix
new file mode 100644
index 000000000000..6f231430fa86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/isolyzer/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "isolyzer";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "KBNLresearch";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-NqkjnEwpaoyguG5GLscKS9UQGtF9N4jUL5JhrMtKCFE=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ setuptools six ];
+
+  meta = with lib; {
+    homepage = "https://github.com/KBNLresearch/isolyzer";
+    description = "Verify size of ISO 9660 image against Volume Descriptor fields";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mkg20001 ];
+    mainProgram = "isolyzer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/isomd5sum/default.nix b/nixpkgs/pkgs/tools/cd-dvd/isomd5sum/default.nix
new file mode 100644
index 000000000000..d13a3c5f0f13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/isomd5sum/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub
+, python3
+, popt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "isomd5sum";
+  version = "1.2.4";
+
+  src = fetchFromGitHub {
+    owner = "rhinstaller";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-tpDk7Wt2zV0vB2IILuIJyMMFBSiHKAVkSqsCwnWApJ0=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ python3 ];
+  buildInputs = [ popt ] ;
+
+  postPatch = ''
+    substituteInPlace Makefile --replace "#/usr/" "#"
+    substituteInPlace Makefile --replace "/usr/" "/"
+  '';
+
+  dontConfigure = true;
+
+  makeFlags = [ "DESTDIR=${placeholder "out"}" ];
+
+  # we don't install python stuff as it borks up directories
+  installTargets = [ "install-bin" "install-devel" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/rhinstaller/isomd5sum";
+    description = "Utilities for working with md5sum implanted in ISO images";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ knl ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/lsdvd/default.nix b/nixpkgs/pkgs/tools/cd-dvd/lsdvd/default.nix
new file mode 100644
index 000000000000..3fd116faea5b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/lsdvd/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, libdvdread, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "lsdvd";
+  version = "0.17";
+  src = fetchurl {
+    url = "mirror://sourceforge/lsdvd/lsdvd-${version}.tar.gz";
+    sha256 = "1274d54jgca1prx106iyir7200aflr70bnb1kawndlmcckcmnb3x";
+  };
+
+  buildInputs = [ libdvdread ];
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/lsdvd/";
+    description = "Display information about audio, video, and subtitle tracks on a DVD";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    mainProgram = "lsdvd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/mdf2iso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/mdf2iso/default.nix
new file mode 100644
index 000000000000..b5fcc557b4e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/mdf2iso/default.nix
@@ -0,0 +1,21 @@
+{lib, stdenv, fetchgit}:
+
+stdenv.mkDerivation rec {
+  pname = "mdf2iso";
+  version = "0.3.1";
+
+  src = fetchgit {
+    url    = "https://salsa.debian.org/debian/mdf2iso";
+    rev    = "c6a5b588318d43bc8af986bbe48d0a06e92f4280";
+    sha256 = "0xg43jlvrk8adfjgbjir15nxwcj0nhz4gxpqx7jdfvhg0kwliq0n";
+  };
+
+  meta = with lib; {
+    description = "Small utility that converts MDF images to ISO format";
+    homepage = src.url;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.oxij ];
+    mainProgram = "mdf2iso";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/mkcue/default.nix b/nixpkgs/pkgs/tools/cd-dvd/mkcue/default.nix
new file mode 100644
index 000000000000..34893b9f68a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/mkcue/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mkcue";
+  version = "1";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/m/mkcue/mkcue_${version}.orig.tar.gz";
+    sha256 = "0rs897wp08z4hd904bjb5sl4lb8qxj82x5ayklr28bhg9pd5gbra";
+  };
+
+  env.CXXFLAGS = "-std=c++98";
+
+  preInstall = "mkdir -pv $out/bin";
+  postInstall = "chmod -v +w $out/bin/mkcue";
+
+  meta = with lib; {
+    description = "Generates CUE sheets from a CD TOC";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "mkcue";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/nrg2iso/c-compiler.patch b/nixpkgs/pkgs/tools/cd-dvd/nrg2iso/c-compiler.patch
new file mode 100644
index 000000000000..72752723470c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/nrg2iso/c-compiler.patch
@@ -0,0 +1,11 @@
+Support building with compilers such as Clang.
+
+--- a/Makefile
++++ b/Makefile
+@@ -1,5 +1,5 @@
+ all: nrg2iso.c
+-	gcc nrg2iso.c -o nrg2iso
++	cc nrg2iso.c -o nrg2iso
+
+ clean:
+ 	rm -f nrg2iso
diff --git a/nixpkgs/pkgs/tools/cd-dvd/nrg2iso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/nrg2iso/default.nix
new file mode 100644
index 000000000000..8807466d05a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/nrg2iso/default.nix
@@ -0,0 +1,26 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "nrg2iso";
+  version = "0.4.1";
+
+  src = fetchurl {
+    url = "http://gregory.kokanosky.free.fr/v4/linux/${pname}-${version}.tar.gz";
+    sha256 = "sha256-O+NqQWdY/BkQRztJqNrfKiqj1R8ZdhlzNrwXS8HjBuU=";
+  };
+
+  patches = [ ./c-compiler.patch ];
+
+  installPhase = ''
+    mkdir -pv $out/bin/
+    cp -v nrg2iso $out/bin/nrg2iso
+  '';
+
+  meta = with lib; {
+    description = "A linux utils for converting CD (or DVD) image generated by Nero Burning Rom to ISO format";
+    homepage = "http://gregory.kokanosky.free.fr/v4/linux/nrg2iso.en.html";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    mainProgram = "nrg2iso";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/sacd/default.nix b/nixpkgs/pkgs/tools/cd-dvd/sacd/default.nix
new file mode 100644
index 000000000000..c24a5e7c15c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/sacd/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "sacd";
+  version = "19.7.16.37";
+
+  src = fetchFromGitHub {
+    owner = "Sound-Linux-More";
+    repo = "sacd";
+    rev = finalAttrs.version;
+    sha256 = "03s7jr75pzqj1xd41rkgbszlgf9zx6vzhd0nizc05wyf0fxq5xif";
+  };
+
+  patches = [
+    # Makefile prefix, otherwise `/usr` prefix is enforced
+    # https://github.com/Sound-Linux-More/sacd/pull/1
+    (fetchpatch {
+      url = "https://github.com/Sound-Linux-More/sacd/commit/a72def4fab234bcd68b444cf7447a8876b4e2ce8.patch";
+      name = "makefile-prefix.patch";
+      sha256 = "0a7r4x0yqpg6l4vr84dq4wbrypabqm4vvcjv91am068gqjiw6w64";
+    })
+  ];
+
+  makeFlagsArray = [
+    "PREFIX=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "Converts SACD image files, Philips DSDIFF and Sony DSF files to 24-bit high resolution wave files. Handles both DST and DSD streams. ";
+    longDescription = ''
+      Super Audio CD decoder. Converts SACD image files, Philips DSDIFF and Sony DSF files to 24-bit high resolution wave files.
+      Handles both DST and DSD streams.
+    '';
+    homepage = "https://github.com/Sound-Linux-More/sacd";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.doronbehar ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "sacd";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix b/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix
new file mode 100644
index 000000000000..b0868c885edd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "srt-to-vtt-cl";
+  version = "unstable-2019-01-03";
+
+  src = fetchFromGitHub {
+    owner = "nwoltman";
+    repo = pname;
+    rev = "ce3d0776906eb847c129d99a85077b5082f74724";
+    sha256 = "0qxysj08gjr6npyvg148llmwmjl2n9cyqjllfnf3gxb841dy370n";
+  };
+
+  patches = [
+    ./fix-validation.patch
+    ./simplify-macOS-builds.patch
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/srt-vtt $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Convert SRT files to VTT";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ericdallo ];
+    homepage = "https://github.com/nwoltman/srt-to-vtt-cl";
+    platforms = platforms.unix;
+    mainProgram = "srt-vtt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/fix-validation.patch b/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/fix-validation.patch
new file mode 100644
index 000000000000..abddae6d0719
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/fix-validation.patch
@@ -0,0 +1,13 @@
+--- a/Makefile
++++ b/Makefile
+@@ -1,9 +1,4 @@
+-ERR = $(shell which clang++ >/dev/null; echo $$?)
+-ifeq "$(ERR)" "0"
+-	CXX ?= clang++
+-else
+-	CXX ?= g++
+-endif
++CXX ?= g++
+ CXXFLAGS = -std=c++11 -O2 -MMD -I ./deps
+ OBJECTS := src/text_encoding_detect.o src/Utils.o src/Converter.o src/main.o
+ DEPENDS := $(OBJECTS:.o=.d)
diff --git a/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/simplify-macOS-builds.patch b/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/simplify-macOS-builds.patch
new file mode 100644
index 000000000000..71497f23beef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/simplify-macOS-builds.patch
@@ -0,0 +1,31 @@
+From be08356f421825d3d2dd7ab687f86d9981a31f9a Mon Sep 17 00:00:00 2001
+From: "Travis A. Everett" <travis.a.everett@gmail.com>
+Date: Thu, 3 Aug 2023 20:15:40 -0500
+Subject: [PATCH] simplify macOS builds
+
+---
+ Makefile | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 6dfd829..19c3ae3 100644
+--- a/Makefile
++++ b/Makefile
+@@ -8,13 +8,7 @@ CXXFLAGS = -std=c++11 -O2 -MMD -I ./deps
+ OBJECTS := src/text_encoding_detect.o src/Utils.o src/Converter.o src/main.o
+ DEPENDS := $(OBJECTS:.o=.d)
+ EXEC = srt-vtt
+-UNAME_S := $(shell uname -s)
+-ifeq ($(UNAME_S), Darwin)
+-	BIN_DIR = bin/Mac-OSX
+-else
+-	UNAME_M := $(shell uname -m)
+-	BIN_DIR = bin/$(UNAME_S)/$(UNAME_M)
+-endif
++BIN_DIR = bin
+ EXEC_PATH = $(BIN_DIR)/$(EXEC)
+ 
+ .PHONY: test
+-- 
+2.39.0
+
diff --git a/nixpkgs/pkgs/tools/cd-dvd/uif2iso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/uif2iso/default.nix
new file mode 100644
index 000000000000..ae1eff26568f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/uif2iso/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, unzip, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "uif2iso";
+  version = "0.1.7";
+
+  src = fetchurl {
+    url = "http://aluigi.altervista.org/mytoolz/uif2iso.zip";
+    sha256 = "1v18fmlzhkkhv8xdc9dyvl8vamwg3ka4dsrg7vvmk1f2iczdx3dp";
+  };
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [zlib];
+
+  installPhase = ''
+    make -C . prefix="$out" install;
+  '';
+
+  meta = {
+    description = "Tool for converting single/multi part UIF image files to ISO";
+    homepage = "http://aluigi.org/mytoolz.htm#uif2iso";
+    license = lib.licenses.gpl1Plus;
+    platforms = lib.platforms.linux;
+    mainProgram = "uif2iso";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/unetbootin/default.nix b/nixpkgs/pkgs/tools/cd-dvd/unetbootin/default.nix
new file mode 100644
index 000000000000..fb12968aa728
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/unetbootin/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, stdenv
+, coreutils
+, fetchFromGitHub
+, mtools
+, p7zip
+, wrapQtAppsHook
+, qtbase
+, qttools
+, qmake
+, syslinux
+, util-linux
+, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "unetbootin";
+  version = "702";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-psX15XicPXAsd36BhuvK0G3GQS8hV/hazzO0HByCqV4=";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */src/unetbootin)
+  '';
+
+  buildInputs = [
+    qtbase
+    qttools
+    qmake
+  ];
+
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  # Lots of nice hard-coded paths...
+  postPatch = ''
+    substituteInPlace unetbootin.cpp \
+      --replace /bin/df             ${coreutils}/bin/df \
+      --replace /sbin/blkid         ${util-linux}/sbin/blkid \
+      --replace /sbin/fdisk         ${util-linux}/sbin/fdisk \
+      --replace /sbin/sfdisk        ${util-linux}/sbin/sfdisk \
+      --replace /usr/bin/syslinux   ${syslinux}/bin/syslinux \
+      --replace /usr/bin/extlinux   ${syslinux}/sbin/extlinux \
+      --replace /usr/share/syslinux ${syslinux}/share/syslinux
+
+    substituteInPlace main.cpp \
+      --replace /usr/share/unetbootin $out/share/unetbootin
+
+    substituteInPlace unetbootin.desktop \
+      --replace /usr/bin $out/bin
+  '';
+
+  preConfigure = ''
+    lupdate unetbootin.pro
+    lrelease unetbootin.pro
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin                unetbootin
+    install -Dm644 -t $out/share/unetbootin   unetbootin_*.qm
+    install -Dm644 -t $out/share/applications unetbootin.desktop
+
+    runHook postInstall
+  '';
+
+  qtWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ mtools p7zip which ]}"
+    "--set QT_X11_NO_MITSHM 1"
+  ];
+
+  meta = with lib; {
+    description = "A tool to create bootable live USB drives from ISO images";
+    homepage = "https://unetbootin.github.io/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ebzzry ];
+    platforms = platforms.linux;
+    mainProgram = "unetbootin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/vobcopy/default.nix b/nixpkgs/pkgs/tools/cd-dvd/vobcopy/default.nix
new file mode 100644
index 000000000000..dbe192e039bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/vobcopy/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, libdvdread, libdvdcss }:
+
+stdenv.mkDerivation rec {
+  pname = "vobcopy";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "http://www.vobcopy.org/download/vobcopy-${version}.tar.bz2";
+    sha256 = "01l1yihbd73srzghzzx5dgfg3yfb5kml5dix52mq0snhjp8h89c9";
+  };
+
+  buildInputs = [libdvdread libdvdcss];
+  makeFlags   = [ "DESTDIR=$(out)" "PREFIX=/" ];
+
+  meta = {
+    description = "Copies DVD .vob files to harddisk, decrypting them on the way";
+    homepage = "http://vobcopy.org/projects/c/c.shtml";
+    license = lib.licenses.gpl2;
+
+    maintainers = [ lib.maintainers.bluescreen303 ];
+    platforms = lib.platforms.all;
+    mainProgram = "vobcopy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/vobsub2srt/default.nix b/nixpkgs/pkgs/tools/cd-dvd/vobsub2srt/default.nix
new file mode 100644
index 000000000000..2847c68899fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/vobsub2srt/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libtiff, pkg-config, tesseract3 }:
+
+stdenv.mkDerivation rec {
+  pname = "vobsub2srt";
+  version = "unstable-2014-08-17";
+
+  src = fetchFromGitHub {
+    owner = "ruediger";
+    repo = "VobSub2SRT";
+    rev = "a6abbd61127a6392d420bbbebdf7612608c943c2";
+    sha256 = "sha256-i6V2Owb8GcTcWowgb/BmdupOSFsYiCF2SbC9hXa26uY=";
+  };
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.cc.isGNU [ "-std=c++11" ]);
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libtiff ];
+  propagatedBuildInputs = [ tesseract3 ];
+
+  meta = {
+    homepage = "https://github.com/ruediger/VobSub2SRT";
+    description = "Converts VobSub subtitles into SRT subtitles";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.ttuegel ];
+    mainProgram = "vobsub2srt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/advancecomp/default.nix b/nixpkgs/pkgs/tools/compression/advancecomp/default.nix
new file mode 100644
index 000000000000..b57e3f6806f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/advancecomp/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "advancecomp";
+  version = "2.6";
+
+  src = fetchFromGitHub {
+    owner = "amadvance";
+    repo = "advancecomp";
+    rev = "v${version}";
+    hash = "sha256-MwXdXT/ZEvTcYV4DjhCUFflrPKBFu0fk5PmaWt4MMOU=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ zlib ];
+
+  # autover.sh relies on 'git describe', which obviously doesn't work as we're not cloning
+  # the full git repo. so we have to put the version number in `.version`, otherwise
+  # the binaries get built reporting "none" as their version number.
+  postPatch = ''
+    echo "${version}" >.version
+  '';
+
+  meta = with lib; {
+    description = "A set of tools to optimize deflate-compressed files";
+    license = licenses.gpl3 ;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux ++ platforms.darwin;
+    homepage = "https://github.com/amadvance/advancecomp";
+
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/asar/default.nix b/nixpkgs/pkgs/tools/compression/asar/default.nix
new file mode 100644
index 000000000000..3d6c017674a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/asar/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, mkYarnPackage
+, fetchFromGitHub
+, fetchYarnDeps
+}:
+
+mkYarnPackage rec {
+  pname = "asar";
+  version = "3.2.4";
+
+  src = fetchFromGitHub {
+    owner = "electron";
+    repo = "asar";
+    rev = "v${version}";
+    hash = "sha256-12FP8VRDo1PQ+tiN4zhzkcfAx9zFs/0MU03t/vFo074=";
+  };
+
+  packageJSON = ./package.json;
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-/fV3hd98pl46+fgmiMH9sDQrrZgdLY1oF9c3TaIxRSg=";
+  };
+
+  doDist = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/lib/node_modules"
+    mv deps/@electron "$out/lib/node_modules"
+    rm "$out/lib/node_modules/@electron/asar/node_modules"
+    mv node_modules "$out/lib/node_modules/@electron/asar"
+
+    mkdir "$out/bin"
+    ln -s "$out/lib/node_modules/@electron/asar/bin/asar.js" "$out/bin/asar"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Simple extensive tar-like archive format with indexing";
+    homepage = "https://github.com/electron/asar";
+    license = lib.licenses.mit;
+    mainProgram = "asar";
+    maintainers = with lib.maintainers; [ xvapx ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/asar/package.json b/nixpkgs/pkgs/tools/compression/asar/package.json
new file mode 100644
index 000000000000..51ed0e24ffeb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/asar/package.json
@@ -0,0 +1,62 @@
+{
+  "name": "@electron/asar",
+  "description": "Creating Electron app packages",
+  "version": "0.0.0-development",
+  "main": "./lib/asar.js",
+  "types": "./lib/index.d.ts",
+  "bin": {
+    "asar": "./bin/asar.js"
+  },
+  "files": [
+    "bin",
+    "lib",
+    "lib/index.d.ts"
+  ],
+  "engines": {
+    "node": ">=10.12.0"
+  },
+  "license": "MIT",
+  "homepage": "https://github.com/electron/asar",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/electron/asar.git"
+  },
+  "bugs": {
+    "url": "https://github.com/electron/asar/issues"
+  },
+  "scripts": {
+    "mocha": "xvfb-maybe electron-mocha --reporter spec && mocha --reporter spec",
+    "test": "npm run lint && npm run mocha",
+    "lint": "tsd && standard",
+    "standard": "standard",
+    "tsd": "tsd"
+  },
+  "standard": {
+    "env": {
+      "mocha": true
+    },
+    "globals": [
+      "BigInt"
+    ]
+  },
+  "tsd": {
+    "directory": "test"
+  },
+  "dependencies": {
+    "chromium-pickle-js": "^0.2.0",
+    "commander": "^5.0.0",
+    "glob": "^7.1.6",
+    "minimatch": "^3.0.4"
+  },
+  "devDependencies": {
+    "@continuous-auth/semantic-release-npm": "^3.0.0",
+    "electron": "^22.0.0",
+    "electron-mocha": "^11.0.2",
+    "lodash": "^4.17.15",
+    "mocha": "^10.1.0",
+    "rimraf": "^3.0.2",
+    "standard": "^14.3.3",
+    "tsd": "^0.25.0",
+    "xvfb-maybe": "^0.2.1"
+  }
+}
diff --git a/nixpkgs/pkgs/tools/compression/brotli/default.nix b/nixpkgs/pkgs/tools/compression/brotli/default.nix
new file mode 100644
index 000000000000..60429f435ec6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/brotli/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, staticOnly ? stdenv.hostPlatform.isStatic
+, testers
+}:
+
+# ?TODO: there's also python lib in there
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "brotli";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "brotli";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-MvceRcle2dSkkucC2PlsCizsIf8iv95d8Xjqew266wc=";
+  };
+
+  patches = [
+    # revert runpath change, breaks curl on darwin:
+    #   https://github.com/NixOS/nixpkgs/pull/254532#issuecomment-1722337476
+    (fetchpatch {
+      name = "revert-runpath.patch";
+      url = "https://github.com/google/brotli/commit/f842c1bcf9264431cd3b15429a72b7dafbe80509.patch";
+      hash = "sha256-W3LY3EjoHP74YsKOOcYQrzo+f0HbooOvEbnOibtN6TM=";
+      revert = true;
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = lib.optional staticOnly "-DBUILD_SHARED_LIBS=OFF";
+
+  outputs = [ "out" "dev" "lib" ];
+
+  doCheck = true;
+
+  checkTarget = "test";
+
+  # Don't bother with "man" output for now,
+  # it currently only makes the manpages hard to use.
+  postInstall = ''
+    mkdir -p $out/share/man/man{1,3}
+    cp ../docs/*.1 $out/share/man/man1/
+    cp ../docs/*.3 $out/share/man/man3/
+  '';
+
+  passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
+
+  meta = with lib; {
+    homepage = "https://github.com/google/brotli";
+    description = "A generic-purpose lossless compression algorithm and tool";
+    longDescription =
+      ''  Brotli is a generic-purpose lossless compression algorithm that
+          compresses data using a combination of a modern variant of the LZ77
+          algorithm, Huffman coding and 2nd order context modeling, with a
+          compression ratio comparable to the best currently available
+          general-purpose compression methods. It is similar in speed with
+          deflate but offers more dense compression.
+
+          The specification of the Brotli Compressed Data Format is defined
+          in the following internet draft:
+          http://www.ietf.org/id/draft-alakuijala-brotli
+      '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ freezeboy ];
+    pkgConfigModules = [
+      "libbrotlidec"
+      "libbrotlienc"
+    ];
+    platforms = platforms.all;
+    mainProgram = "brotli";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/compression/bsc/default.nix b/nixpkgs/pkgs/tools/compression/bsc/default.nix
new file mode 100644
index 000000000000..7d2af1c4898f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bsc/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, openmp }:
+
+stdenv.mkDerivation rec {
+  pname = "bsc";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    owner = "IlyaGrebnov";
+    repo = "libbsc";
+    rev = version;
+    sha256 = "0c0jmirh9y23kyi1jnrm13sa3xsjn54jazfr84ag45pai279fciz";
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = lib.optional stdenv.isDarwin openmp;
+
+  postPatch = ''
+    substituteInPlace makefile \
+        --replace 'g++' '$(CXX)'
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "High performance block-sorting data compression library";
+    homepage = "http://libbsc.com/";
+    maintainers = with maintainers; [ ];
+    # Later commits changed the licence to Apache2 (no release yet, though)
+    license = with licenses; [ lgpl3Plus ];
+    platforms = platforms.unix;
+    mainProgram = "bsc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/bsdiff/CVE-2020-14315.patch b/nixpkgs/pkgs/tools/compression/bsdiff/CVE-2020-14315.patch
new file mode 100644
index 000000000000..bb7ff41284eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bsdiff/CVE-2020-14315.patch
@@ -0,0 +1,384 @@
+Description: patch for CVE-2020-14315
+ A memory corruption vulnerability is present in bspatch as shipped in
+ Colin Percival’s bsdiff tools version 4.3. Insufficient checks when
+ handling external inputs allows an attacker to bypass the sanity checks
+ in place and write out of a dynamically allocated buffer boundaries.
+Source: https://svnweb.freebsd.org/base/head/usr.bin/bsdiff/bspatch/bspatch.c?revision=352742&view=co
+Author: tony mancill <tmancill@debian.org>
+Comment: The patch was created by comparing the Debian sources to the
+ "Confirmed Patched Version" [1] documented in the
+ X41 D-SEC GmbH Security Advisory: X41-2020-006 [2].
+ References to FreeBSD capsicum have been dropped.  Definitions for
+ TYPE_MINIMUM and TYPE_MAXIMUM have been borrowed from the Debian
+ coreutils package sources but originate in gnulib [3] and are used to
+ define OFF_MIN and OFF_MAX (limits of off_t). Whitespace changes from
+ the confirmed patched version are also included and keep the difference
+ between the Debian sources and the confirmed patched version minimal.
+ .
+ [1] https://svnweb.freebsd.org/base/head/usr.bin/bsdiff/bspatch/bspatch.c?revision=352742&view=co
+ [2] https://www.openwall.com/lists/oss-security/2020/07/09/2
+ [3] https://www.gnu.org/software/gnulib/
+Last-Update: 2021-04-03
+Forwarded: not-needed
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=964796
+
+--- a/bspatch.c
++++ b/bspatch.c
+@@ -1,4 +1,6 @@
+ /*-
++ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
++ *
+  * Copyright 2003-2005 Colin Percival
+  * All rights reserved
+  *
+@@ -24,56 +26,148 @@
+  * POSSIBILITY OF SUCH DAMAGE.
+  */
+ 
++#include <sys/cdefs.h>
+ #if 0
+-__FBSDID("$FreeBSD: src/usr.bin/bsdiff/bspatch/bspatch.c,v 1.1 2005/08/06 01:59:06 cperciva Exp $");
++__FBSDID("$FreeBSD$");
+ #endif
+ 
+ #include <bzlib.h>
+-#include <stdlib.h>
++#include <err.h>
++#include <fcntl.h>
++#include <libgen.h>
++#include <limits.h>
++#include <stdint.h>
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <string.h>
+-#include <err.h>
+ #include <unistd.h>
+-#include <fcntl.h>
++
++#ifndef O_BINARY
++#define O_BINARY 0
++#endif
++#define HEADER_SIZE 32
++
++/* TYPE_MINIMUM and TYPE_MAXIMUM taken from coreutils */
++#ifndef TYPE_MINIMUM
++#define TYPE_MINIMUM(t) \
++  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
++#endif
++#ifndef TYPE_MAXIMUM
++#define TYPE_MAXIMUM(t) \
++  ((t) ((t) 0 < (t) -1 \
++        ? (t) -1 \
++        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
++#endif
++
++#ifndef OFF_MAX
++#define OFF_MAX TYPE_MAXIMUM(off_t)
++#endif
++
++#ifndef OFF_MIN
++#define OFF_MIN TYPE_MINIMUM(off_t)
++#endif
++
++static char *newfile;
++static int dirfd = -1;
++
++static void
++exit_cleanup(void)
++{
++
++	if (dirfd != -1 && newfile != NULL)
++		if (unlinkat(dirfd, newfile, 0))
++			warn("unlinkat");
++}
++
++static inline off_t
++add_off_t(off_t a, off_t b)
++{
++	off_t result;
++
++#if __GNUC__ >= 5
++	if (__builtin_add_overflow(a, b, &result))
++		errx(1, "Corrupt patch");
++#else
++	if ((b > 0 && a > OFF_MAX - b) || (b < 0 && a < OFF_MIN - b))
++		errx(1, "Corrupt patch");
++	result = a + b;
++#endif
++	return result;
++}
+ 
+ static off_t offtin(u_char *buf)
+ {
+ 	off_t y;
+ 
+-	y=buf[7]&0x7F;
+-	y=y*256;y+=buf[6];
+-	y=y*256;y+=buf[5];
+-	y=y*256;y+=buf[4];
+-	y=y*256;y+=buf[3];
+-	y=y*256;y+=buf[2];
+-	y=y*256;y+=buf[1];
+-	y=y*256;y+=buf[0];
++	y = buf[7] & 0x7F;
++	y = y * 256; y += buf[6];
++	y = y * 256; y += buf[5];
++	y = y * 256; y += buf[4];
++	y = y * 256; y += buf[3];
++	y = y * 256; y += buf[2];
++	y = y * 256; y += buf[1];
++	y = y * 256; y += buf[0];
+ 
+-	if(buf[7]&0x80) y=-y;
++	if (buf[7] & 0x80)
++		y = -y;
+ 
+-	return y;
++	return (y);
+ }
+ 
+-int main(int argc,char * argv[])
++static void
++usage(void)
+ {
+-	FILE * f, * cpf, * dpf, * epf;
+-	BZFILE * cpfbz2, * dpfbz2, * epfbz2;
++
++	fprintf(stderr, "usage: bspatch oldfile newfile patchfile\n");
++	exit(1);
++}
++
++int main(int argc, char *argv[])
++{
++	FILE *f, *cpf, *dpf, *epf;
++	BZFILE *cpfbz2, *dpfbz2, *epfbz2;
++	char *directory, *namebuf;
+ 	int cbz2err, dbz2err, ebz2err;
+-	int fd;
+-	ssize_t oldsize,newsize;
+-	ssize_t bzctrllen,bzdatalen;
+-	u_char header[32],buf[8];
++	int newfd, oldfd;
++	off_t oldsize, newsize;
++	off_t bzctrllen, bzdatalen;
++	u_char header[HEADER_SIZE], buf[8];
+ 	u_char *old, *new;
+-	off_t oldpos,newpos;
++	off_t oldpos, newpos;
+ 	off_t ctrl[3];
+-	off_t lenread;
+-	off_t i;
++	off_t i, lenread, offset;
+ 
+-	if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]);
++	if (argc != 4)
++		usage();
+ 
+ 	/* Open patch file */
+-	if ((f = fopen(argv[3], "r")) == NULL)
++	if ((f = fopen(argv[3], "rb")) == NULL)
++		err(1, "fopen(%s)", argv[3]);
++	/* Open patch file for control block */
++	if ((cpf = fopen(argv[3], "rb")) == NULL)
++		err(1, "fopen(%s)", argv[3]);
++	/* open patch file for diff block */
++	if ((dpf = fopen(argv[3], "rb")) == NULL)
+ 		err(1, "fopen(%s)", argv[3]);
++	/* open patch file for extra block */
++	if ((epf = fopen(argv[3], "rb")) == NULL)
++		err(1, "fopen(%s)", argv[3]);
++	/* open oldfile */
++	if ((oldfd = open(argv[1], O_RDONLY | O_BINARY, 0)) < 0)
++		err(1, "open(%s)", argv[1]);
++	/* open directory where we'll write newfile */
++	if ((namebuf = strdup(argv[2])) == NULL ||
++	    (directory = dirname(namebuf)) == NULL ||
++	    (dirfd = open(directory, O_DIRECTORY)) < 0)
++		err(1, "open %s", argv[2]);
++	free(namebuf);
++	if ((newfile = basename(argv[2])) == NULL)
++		err(1, "basename");
++	/* open newfile */
++	if ((newfd = openat(dirfd, newfile,
++	    O_CREAT | O_TRUNC | O_WRONLY | O_BINARY, 0666)) < 0)
++		err(1, "open(%s)", argv[2]);
++	atexit(exit_cleanup);
+ 
+ 	/*
+ 	File format:
+@@ -90,104 +185,104 @@
+ 	*/
+ 
+ 	/* Read header */
+-	if (fread(header, 1, 32, f) < 32) {
++	if (fread(header, 1, HEADER_SIZE, f) < HEADER_SIZE) {
+ 		if (feof(f))
+-			errx(1, "Corrupt patch\n");
++			errx(1, "Corrupt patch");
+ 		err(1, "fread(%s)", argv[3]);
+ 	}
+ 
+ 	/* Check for appropriate magic */
+ 	if (memcmp(header, "BSDIFF40", 8) != 0)
+-		errx(1, "Corrupt patch\n");
++		errx(1, "Corrupt patch");
+ 
+ 	/* Read lengths from header */
+-	bzctrllen=offtin(header+8);
+-	bzdatalen=offtin(header+16);
+-	newsize=offtin(header+24);
+-	if((bzctrllen<0) || (bzdatalen<0) || (newsize<0))
+-		errx(1,"Corrupt patch\n");
++	bzctrllen = offtin(header + 8);
++	bzdatalen = offtin(header + 16);
++	newsize = offtin(header + 24);
++	if (bzctrllen < 0 || bzctrllen > OFF_MAX - HEADER_SIZE ||
++	    bzdatalen < 0 || bzctrllen + HEADER_SIZE > OFF_MAX - bzdatalen ||
++	    newsize < 0 || newsize > SSIZE_MAX)
++		errx(1, "Corrupt patch");
+ 
+ 	/* Close patch file and re-open it via libbzip2 at the right places */
+ 	if (fclose(f))
+ 		err(1, "fclose(%s)", argv[3]);
+-	if ((cpf = fopen(argv[3], "r")) == NULL)
+-		err(1, "fopen(%s)", argv[3]);
+-	if (fseeko(cpf, 32, SEEK_SET))
+-		err(1, "fseeko(%s, %lld)", argv[3],
+-		    (long long)32);
++	offset = HEADER_SIZE;
++	if (fseeko(cpf, offset, SEEK_SET))
++		err(1, "fseeko(%s, %jd)", argv[3], (intmax_t)offset);
+ 	if ((cpfbz2 = BZ2_bzReadOpen(&cbz2err, cpf, 0, 0, NULL, 0)) == NULL)
+ 		errx(1, "BZ2_bzReadOpen, bz2err = %d", cbz2err);
+-	if ((dpf = fopen(argv[3], "r")) == NULL)
+-		err(1, "fopen(%s)", argv[3]);
+-	if (fseeko(dpf, 32 + bzctrllen, SEEK_SET))
+-		err(1, "fseeko(%s, %lld)", argv[3],
+-		    (long long)(32 + bzctrllen));
++	offset = add_off_t(offset, bzctrllen);
++	if (fseeko(dpf, offset, SEEK_SET))
++		err(1, "fseeko(%s, %jd)", argv[3], (intmax_t)offset);
+ 	if ((dpfbz2 = BZ2_bzReadOpen(&dbz2err, dpf, 0, 0, NULL, 0)) == NULL)
+ 		errx(1, "BZ2_bzReadOpen, bz2err = %d", dbz2err);
+-	if ((epf = fopen(argv[3], "r")) == NULL)
+-		err(1, "fopen(%s)", argv[3]);
+-	if (fseeko(epf, 32 + bzctrllen + bzdatalen, SEEK_SET))
+-		err(1, "fseeko(%s, %lld)", argv[3],
+-		    (long long)(32 + bzctrllen + bzdatalen));
++	offset = add_off_t(offset, bzdatalen);
++	if (fseeko(epf, offset, SEEK_SET))
++		err(1, "fseeko(%s, %jd)", argv[3], (intmax_t)offset);
+ 	if ((epfbz2 = BZ2_bzReadOpen(&ebz2err, epf, 0, 0, NULL, 0)) == NULL)
+ 		errx(1, "BZ2_bzReadOpen, bz2err = %d", ebz2err);
+ 
+-	if(((fd=open(argv[1],O_RDONLY,0))<0) ||
+-		((oldsize=lseek(fd,0,SEEK_END))==-1) ||
+-		((old=malloc(oldsize+1))==NULL) ||
+-		(lseek(fd,0,SEEK_SET)!=0) ||
+-		(read(fd,old,oldsize)!=oldsize) ||
+-		(close(fd)==-1)) err(1,"%s",argv[1]);
+-	if((new=malloc(newsize+1))==NULL) err(1,NULL);
+-
+-	oldpos=0;newpos=0;
+-	while(newpos<newsize) {
++	if ((oldsize = lseek(oldfd, 0, SEEK_END)) == -1 ||
++	    oldsize > SSIZE_MAX ||
++	    (old = malloc(oldsize)) == NULL ||
++	    lseek(oldfd, 0, SEEK_SET) != 0 ||
++	    read(oldfd, old, oldsize) != oldsize ||
++	    close(oldfd) == -1)
++		err(1, "%s", argv[1]);
++	if ((new = malloc(newsize)) == NULL)
++		err(1, NULL);
++
++	oldpos = 0;
++	newpos = 0;
++	while (newpos < newsize) {
+ 		/* Read control data */
+-		for(i=0;i<=2;i++) {
++		for (i = 0; i <= 2; i++) {
+ 			lenread = BZ2_bzRead(&cbz2err, cpfbz2, buf, 8);
+ 			if ((lenread < 8) || ((cbz2err != BZ_OK) &&
+ 			    (cbz2err != BZ_STREAM_END)))
+-				errx(1, "Corrupt patch\n");
+-			ctrl[i]=offtin(buf);
+-		};
++				errx(1, "Corrupt patch");
++			ctrl[i] = offtin(buf);
++		}
+ 
+ 		/* Sanity-check */
+-		if ((ctrl[0] < 0) || (ctrl[1] < 0))
+-			errx(1,"Corrupt patch\n");
++		if (ctrl[0] < 0 || ctrl[0] > INT_MAX ||
++		    ctrl[1] < 0 || ctrl[1] > INT_MAX)
++			errx(1, "Corrupt patch");
+ 
+ 		/* Sanity-check */
+-		if(newpos+ctrl[0]>newsize)
+-			errx(1,"Corrupt patch\n");
++		if (add_off_t(newpos, ctrl[0]) > newsize)
++			errx(1, "Corrupt patch");
+ 
+ 		/* Read diff string */
+ 		lenread = BZ2_bzRead(&dbz2err, dpfbz2, new + newpos, ctrl[0]);
+ 		if ((lenread < ctrl[0]) ||
+ 		    ((dbz2err != BZ_OK) && (dbz2err != BZ_STREAM_END)))
+-			errx(1, "Corrupt patch\n");
++			errx(1, "Corrupt patch");
+ 
+ 		/* Add old data to diff string */
+-		for(i=0;i<ctrl[0];i++)
+-			if((oldpos+i>=0) && (oldpos+i<oldsize))
+-				new[newpos+i]+=old[oldpos+i];
++		for (i = 0; i < ctrl[0]; i++)
++			if (add_off_t(oldpos, i) < oldsize)
++				new[newpos + i] += old[oldpos + i];
+ 
+ 		/* Adjust pointers */
+-		newpos+=ctrl[0];
+-		oldpos+=ctrl[0];
++		newpos = add_off_t(newpos, ctrl[0]);
++		oldpos = add_off_t(oldpos, ctrl[0]);
+ 
+ 		/* Sanity-check */
+-		if(newpos+ctrl[1]>newsize)
+-			errx(1,"Corrupt patch\n");
++		if (add_off_t(newpos, ctrl[1]) > newsize)
++			errx(1, "Corrupt patch");
+ 
+ 		/* Read extra string */
+ 		lenread = BZ2_bzRead(&ebz2err, epfbz2, new + newpos, ctrl[1]);
+ 		if ((lenread < ctrl[1]) ||
+ 		    ((ebz2err != BZ_OK) && (ebz2err != BZ_STREAM_END)))
+-			errx(1, "Corrupt patch\n");
++			errx(1, "Corrupt patch");
+ 
+ 		/* Adjust pointers */
+-		newpos+=ctrl[1];
+-		oldpos+=ctrl[2];
+-	};
++		newpos = add_off_t(newpos, ctrl[1]);
++		oldpos = add_off_t(oldpos, ctrl[2]);
++	}
+ 
+ 	/* Clean up the bzip2 reads */
+ 	BZ2_bzReadClose(&cbz2err, cpfbz2);
+@@ -197,12 +292,13 @@
+ 		err(1, "fclose(%s)", argv[3]);
+ 
+ 	/* Write the new file */
+-	if(((fd=open(argv[2],O_CREAT|O_TRUNC|O_WRONLY,0666))<0) ||
+-		(write(fd,new,newsize)!=newsize) || (close(fd)==-1))
+-		err(1,"%s",argv[2]);
++	if (write(newfd, new, newsize) != newsize || close(newfd) == -1)
++		err(1, "%s", argv[2]);
++	/* Disable atexit cleanup */
++	newfile = NULL;
+ 
+ 	free(new);
+ 	free(old);
+ 
+-	return 0;
++	return (0);
+ }
diff --git a/nixpkgs/pkgs/tools/compression/bsdiff/default.nix b/nixpkgs/pkgs/tools/compression/bsdiff/default.nix
new file mode 100644
index 000000000000..6db5d9924677
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bsdiff/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchurl, fetchpatch, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "bsdiff";
+  version = "4.3";
+
+  src = fetchurl {
+    url = "https://www.daemonology.net/bsdiff/${pname}-${version}.tar.gz";
+    sha256 = "0j2zm3z271x5aw63mwhr3vymzn45p2vvrlrpm9cz2nywna41b0hq";
+  };
+
+  buildInputs = [ bzip2 ];
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/b/bsdiff/4.3-22/debian/patches/20-CVE-2014-9862.patch";
+      sha256 = "sha256-3UuUfNvShQ8fLqxCKUTb/n4BmjL4+Nl7aEqCxYrrERQ=";
+    })
+    ./CVE-2020-14315.patch
+    ./include-systypes.patch
+  ] ++ lib.optionals stdenv.hostPlatform.isLinux [
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/b/bsdiff/4.3-22/debian/patches/30-bug-632585-mmap-src-file-instead-of-malloc-read-it.patch";
+      sha256 = "sha256-esbhz2/efUiuQDuF7LGfSeEn3/f1WbqCxQpTs2A0ulI=";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/b/bsdiff/4.3-22/debian/patches/31-bug-632585-mmap-dst-file-instead-of-malloc-read-it.patch";
+      sha256 = "sha256-Of4aOcI0rsgdRzPqyw2VRn2p9wQuo3hdlgDTBdXGzoc=";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/b/bsdiff/4.3-22/debian/patches/32-bug-632585-use-int32_t-instead-off_t-for-file-size.patch";
+      sha256 = "sha256-SooFnFK4uKNXvXQb/LEcH8GocnRtkryExI4b3BZTsAY=";
+    })
+  ];
+
+  buildPhase = ''
+    $CC -O3 -lbz2 bspatch.c -o bspatch
+    $CC -O3 -lbz2 bsdiff.c  -o bsdiff
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+
+    cp bsdiff    $out/bin
+    cp bspatch   $out/bin
+    cp bsdiff.1  $out/share/man/man1
+    cp bspatch.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "An efficient binary diff/patch tool";
+    homepage = "https://www.daemonology.net/bsdiff/";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/bsdiff/include-systypes.patch b/nixpkgs/pkgs/tools/compression/bsdiff/include-systypes.patch
new file mode 100644
index 000000000000..d070a8bb0f85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bsdiff/include-systypes.patch
@@ -0,0 +1,12 @@
+diff --git a/bspatch.c b/bspatch.c
+index 643c60b..543379c 100644
+--- a/bspatch.c
++++ b/bspatch.c
+@@ -28,6 +28,7 @@
+ __FBSDID("$FreeBSD: src/usr.bin/bsdiff/bspatch/bspatch.c,v 1.1 2005/08/06 01:59:06 cperciva Exp $");
+ #endif
+ 
++#include <sys/types.h>
+ #include <bzlib.h>
+ #include <stdlib.h>
+ #include <stdio.h>
diff --git a/nixpkgs/pkgs/tools/compression/bzip2/1_1.nix b/nixpkgs/pkgs/tools/compression/bzip2/1_1.nix
new file mode 100644
index 000000000000..e9d6f7c44dab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bzip2/1_1.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv
+, fetchFromGitLab
+, meson
+, python3
+, ninja
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "bzip2-unstable";
+  version = "2020-08-11";
+
+  src = fetchFromGitLab {
+    owner = "federicomenaquintero";
+    repo = "bzip2";
+    rev = "15255b553e7c095fb7a26d4dc5819a11352ebba1";
+    sha256 = "sha256-BAyz35D62LWi47B/gNcCSKpdaECHBGSpt21vtnk3fKs=";
+  };
+
+  postPatch = ''
+    patchShebangs install_links.py
+  '';
+
+  nativeBuildInputs = [
+    meson
+    python3
+    ninja
+  ];
+
+  outputs = [ "bin" "dev" "out" "man" ];
+
+  mesonFlags = [
+    "-Ddocs=disabled"
+  ];
+
+  strictDeps = true;
+
+  passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
+
+  meta = with lib; {
+    description = "High-quality data compression program";
+    license = licenses.bsdOriginal;
+    pkgConfigModules = [ "bz2" ];
+    platforms = platforms.all;
+    maintainers = [];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/compression/bzip2/default.nix b/nixpkgs/pkgs/tools/compression/bzip2/default.nix
new file mode 100644
index 000000000000..bfab2dbb9467
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bzip2/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchurl
+, enableStatic ? with stdenv.hostPlatform; isStatic || isCygwin
+, enableShared ? true
+, autoreconfHook
+, testers
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation (finalAttrs: let
+  inherit (finalAttrs) version;
+in {
+  pname = "bzip2";
+  version = "1.0.8";
+
+  src = fetchurl {
+    url = "https://sourceware.org/pub/bzip2/bzip2-${version}.tar.gz";
+    sha256 = "sha256-q1oDF27hBtPw+pDjgdpHjdrkBZGBU8yiSOaCzQxKImk=";
+  };
+
+  patchFlags = ["-p0"];
+
+  patches = [
+    (fetchurl {
+      url = "https://ftp.suse.com/pub/people/sbrabec/bzip2/for_downstream/bzip2-1.0.6.2-autoconfiscated.patch";
+      sha256 = "sha256-QMufl6ffJVVVVZespvkCbFpB6++R1lnq1687jEsUjr0=";
+    })
+  ];
+  # Fix up hardcoded version from the above patch, e.g. seen in bzip2.pc or libbz2.so.1.0.N
+  postPatch = ''
+    patch <<-EOF
+      --- configure.ac
+      +++ configure.ac
+      @@ -3,3 +3,3 @@
+      -AC_INIT([bzip2], [1.0.6], [Julian Seward <jseward@bzip.org>])
+      +AC_INIT([bzip2], [${version}], [Julian Seward <jseward@bzip.org>])
+       BZIP2_LT_CURRENT=1
+      -BZIP2_LT_REVISION=6
+      +BZIP2_LT_REVISION=${lib.versions.patch version}
+    EOF
+  '';
+
+  strictDeps = true;
+  nativeBuildInputs = [ autoreconfHook ];
+
+  outputs = [ "bin" "dev" "out" "man" ];
+
+  configureFlags = lib.concatLists [
+    (lib.optional enableStatic "--enable-static")
+    (lib.optional (!enableShared) "--disable-shared")
+  ];
+
+  dontDisableStatic = enableStatic;
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    ln -s $out/lib/libbz2.so.1.0.* $out/lib/libbz2.so.1.0
+  '';
+
+  passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
+
+  meta = with lib; {
+    description = "High-quality data compression program";
+    homepage = "https://www.sourceware.org/bzip2";
+    changelog = "https://sourceware.org/git/?p=bzip2.git;a=blob;f=CHANGES;hb=HEAD";
+    license = licenses.bsdOriginal;
+    pkgConfigModules = [ "bzip2" ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ mic92 ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/compression/bzip3/default.nix b/nixpkgs/pkgs/tools/compression/bzip3/default.nix
new file mode 100644
index 000000000000..135b253229ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bzip3/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "bzip3";
+  version = "1.4.0";
+
+  outputs = [ "bin" "dev" "out" ];
+
+  src = fetchFromGitHub {
+    owner = "kspalaiologos";
+    repo = "bzip3";
+    rev = finalAttrs.version;
+    hash = "sha256-UVCZWcjlueKSGYqdm7oiJ5i7/irkWv7IOyeCWT2r4sk=";
+  };
+
+  postPatch = ''
+    echo -n "${finalAttrs.version}" > .tarball-version
+    patchShebangs build-aux
+
+    # build-aux/ax_subst_man_date.m4 calls git if the file exists
+    rm .gitignore
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  configureFlags = [
+    "--disable-arch-native"
+  ] ++ lib.optionals stdenv.isDarwin [ "--disable-link-time-optimization" ];
+
+  passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
+
+  meta = {
+    description = "A better and stronger spiritual successor to BZip2";
+    homepage = "https://github.com/kspalaiologos/bzip3";
+    changelog = "https://github.com/kspalaiologos/bzip3/blob/${finalAttrs.src.rev}/NEWS";
+    license = lib.licenses.lgpl3Plus;
+    maintainers = with lib.maintainers; [ dotlambda ];
+    pkgConfigModules = [ "bzip3" ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/compression/crabz/default.nix b/nixpkgs/pkgs/tools/compression/crabz/default.nix
new file mode 100644
index 000000000000..f8cb155f272e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/crabz/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "crabz";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "sstadick";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-w/e0NFmBsYNEECT+2zHEm/UUpp5LxPYr0BdKikT2o1M=";
+  };
+
+  cargoSha256 = "sha256-9VOJeRvyudZSCaUZ1J9gHMEoWXEnEhCZPxvfYGRKzj0=";
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "A cross platform, fast, compression and decompression tool";
+    homepage = "https://github.com/sstadick/crabz";
+    changelog = "https://github.com/sstadick/crabz/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ unlicense /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "crabz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/dejsonlz4/default.nix b/nixpkgs/pkgs/tools/compression/dejsonlz4/default.nix
new file mode 100644
index 000000000000..51c5d485cfa9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/dejsonlz4/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "dejsonlz4";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "avih";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ggs69qamaama5mid07mhp95m1x42wljdb953lrwfr7p8p6f8czh";
+  };
+
+  buildPhase = ''
+    ${stdenv.cc.targetPrefix}cc -o dejsonlz4 src/dejsonlz4.c src/lz4.c
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp dejsonlz4 $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Decompress Mozilla Firefox bookmarks backup files";
+    homepage = "https://github.com/avih/dejsonlz4";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ mt-caret ];
+    platforms = platforms.all;
+    mainProgram = "dejsonlz4";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/dtrx/default.nix b/nixpkgs/pkgs/tools/compression/dtrx/default.nix
new file mode 100644
index 000000000000..9890112171d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/dtrx/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromGitHub
+, gitUpdater
+, python3Packages
+, gnutar
+, unzip
+, lhasa
+, rpm
+, binutils
+, cpio
+, gzip
+, p7zip
+, cabextract
+, unrar
+, unshield
+, bzip2
+, xz
+, lzip
+, unzipSupport ? false
+, unrarSupport ? false
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "dtrx";
+  version = "8.5.3";
+
+  src = fetchFromGitHub {
+    owner = "dtrx-py";
+    repo = "dtrx";
+    rev = version;
+    sha256 = "sha256-LB3F6jcqQPRsjFO4L2fPAPnacDAdtcaadgGbwXA9LAw=";
+  };
+
+  makeWrapperArgs =
+    let
+      archivers = lib.makeBinPath (
+        [ gnutar lhasa rpm binutils cpio gzip p7zip cabextract unshield bzip2 xz lzip ]
+        ++ lib.optional (unzipSupport) unzip
+        ++ lib.optional (unrarSupport) unrar
+      );
+    in [
+      ''--prefix PATH : "${archivers}"''
+    ];
+
+  nativeBuildInputs = [ python3Packages.invoke ];
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = with lib; {
+    description = "Do The Right Extraction: A tool for taking the hassle out of extracting archives";
+    homepage = "https://github.com/dtrx-py/dtrx";
+    license = licenses.gpl3Plus;
+    maintainers = [ ];
+    mainProgram = "dtrx";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/efficient-compression-tool/default.nix b/nixpkgs/pkgs/tools/compression/efficient-compression-tool/default.nix
new file mode 100644
index 000000000000..a4f4b9fd40da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/efficient-compression-tool/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, boost
+, cmake
+, nasm
+, libpng
+}:
+
+stdenv.mkDerivation rec {
+  pname = "efficient-compression-tool";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "fhanau";
+    repo = "Efficient-Compression-Tool";
+    rev = "v${version}";
+    sha256 = "sha256-TSV5QXf6GuHAwQrde3Zo9MA1rtpAhtRg0UTzMkBnHB8=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake nasm ];
+
+  patches = [ ./use-nixpkgs-libpng.patch ];
+
+  buildInputs = [ boost libpng  ];
+
+  cmakeDir = "../src";
+
+  cmakeFlags = [ "-DECT_FOLDER_SUPPORT=ON" ];
+
+  CXXFLAGS = [
+    # GCC 13: error: 'uint32_t' does not name a type
+    "-include cstdint"
+  ];
+
+  meta = with lib; {
+    description = "Fast and effective C++ file optimizer";
+    homepage = "https://github.com/fhanau/Efficient-Compression-Tool";
+    license = licenses.asl20;
+    maintainers = [ maintainers.lunik1 ];
+    platforms = platforms.linux;
+    mainProgram = "ect";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/efficient-compression-tool/use-nixpkgs-libpng.patch b/nixpkgs/pkgs/tools/compression/efficient-compression-tool/use-nixpkgs-libpng.patch
new file mode 100644
index 000000000000..f165b2b95506
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/efficient-compression-tool/use-nixpkgs-libpng.patch
@@ -0,0 +1,108 @@
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index d18843c..a9df1fb 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -8,11 +8,6 @@ if(NOT CMAKE_BUILD_TYPE)
+ 	set(CMAKE_BUILD_TYPE Release)
+ endif()
+ 
+-# Check that submodules are present only if source was downloaded with git
+-if(EXISTS "${CMAKE_SOURCE_DIR}/../.git" AND NOT EXISTS "${CMAKE_SOURCE_DIR}/../src/libpng/README")
+-    message (FATAL_ERROR "Submodules are not initialized. Run \n\tgit submodule update --init --recursive\n within the repository")
+-endif()
+-
+ add_executable(ect
+ 	main.cpp
+ 	gztools.cpp
+@@ -56,7 +51,6 @@ add_subdirectory(lodepng EXCLUDE_FROM_ALL)
+ add_subdirectory(miniz EXCLUDE_FROM_ALL)
+ add_subdirectory(zlib EXCLUDE_FROM_ALL)
+ add_subdirectory(zopfli EXCLUDE_FROM_ALL)
+-file(COPY ${CMAKE_SOURCE_DIR}/pngusr.h DESTINATION ${CMAKE_SOURCE_DIR}/libpng/)
+ add_subdirectory(optipng EXCLUDE_FROM_ALL)
+ # Mozjpeg changes the install prefix if it thinks the current is defaulted
+ set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT FALSE)
+diff --git a/src/Makefile b/src/Makefile
+index cc24367..7aa9f0a 100755
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -18,7 +18,7 @@ CXXSRC = support.cpp zopflipng.cpp zopfli/deflate.cpp zopfli/zopfli_gzip.cpp zop
+ lodepng/lodepng.cpp lodepng/lodepng_util.cpp optipng/codec.cpp optipng/optipng.cpp jpegtran.cpp gztools.cpp \
+ leanify/zip.cpp leanify/leanify.cpp
+ 
+-.PHONY: libpng mozjpeg deps bin all install
++.PHONY: mozjpeg deps bin all install
+ all: deps bin
+ 
+ bin: deps
+@@ -33,9 +33,6 @@ libz.a:
+ 	cd zlib/; \
+ 	$(CC) $(UCFLAGS) -c adler32.c crc32.c deflate.c inffast.c inflate.c inftrees.c trees.c zutil.c gzlib.c gzread.c; \
+ 	ar rcs ../libz.a adler32.o crc32.o deflate.o inffast.o inflate.o inftrees.o trees.o zutil.o gzlib.o gzread.o
+-libpng:
+-	cp pngusr.h libpng/pngusr.h
+-	make -C libpng/ -f scripts/makefile.linux-opt CC="$(CC)" CFLAGS="$(UCFLAGS) -DPNG_USER_CONFIG -Wno-macro-redefined" libpng.a
+ mozjpeg:
+ 	cd mozjpeg/; \
+ 	export CC="$(CC)"; \
+diff --git a/src/optipng/CMakeLists.txt b/src/optipng/CMakeLists.txt
+index 1037a20..3c751e9 100644
+--- a/src/optipng/CMakeLists.txt
++++ b/src/optipng/CMakeLists.txt
+@@ -16,16 +16,14 @@ add_library(optipng
+ add_library(optipng::optipng ALIAS optipng)
+ 
+ #make sure that we are using custom zlib and custom libpng options
+-set(PNG_BUILD_ZLIB ON CACHE BOOL "use custom zlib within libpng" FORCE)
+ set(ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../zlib/ CACHE FILEPATH "custom zlib directory" FORCE)
+ if(NOT WIN32)
+ 	add_compile_options(-Wno-macro-redefined)
+ endif()
+ add_compile_definitions(PNG_USER_CONFIG)
+ 
+-add_subdirectory(../libpng libpng EXCLUDE_FROM_ALL)
+ target_link_libraries(optipng
+-	png_static)
++	png)
+ 
+ # libpng generates some header files that we need to be able to include
+ target_include_directories(optipng
+diff --git a/src/optipng/image.h b/src/optipng/image.h
+index c439f84..8255fa0 100755
+--- a/src/optipng/image.h
++++ b/src/optipng/image.h
+@@ -13,7 +13,7 @@
+ #ifndef OPNGCORE_IMAGE_H
+ #define OPNGCORE_IMAGE_H
+ 
+-#include "../libpng/png.h"
++#include <png.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+diff --git a/src/optipng/opngreduc/opngreduc.h b/src/optipng/opngreduc/opngreduc.h
+index a7e6553..06ef956 100755
+--- a/src/optipng/opngreduc/opngreduc.h
++++ b/src/optipng/opngreduc/opngreduc.h
+@@ -13,7 +13,7 @@
+ 
+ #include <stdbool.h>
+ 
+-#include "../../libpng/png.h"
++#include <png.h>
+ 
+ 
+ #ifdef __cplusplus
+diff --git a/src/optipng/trans.h b/src/optipng/trans.h
+index a2f7f3e..c0e8dc4 100755
+--- a/src/optipng/trans.h
++++ b/src/optipng/trans.h
+@@ -13,7 +13,7 @@
+ #ifndef OPNGTRANS_TRANS_H
+ #define OPNGTRANS_TRANS_H
+ 
+-#include "../libpng/png.h"
++#include <png.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
diff --git a/nixpkgs/pkgs/tools/compression/flips/default.nix b/nixpkgs/pkgs/tools/compression/flips/default.nix
new file mode 100644
index 000000000000..6ee1c03cabce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/flips/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, gtk3, libdivsufsort, pkg-config, wrapGAppsHook }:
+
+stdenv.mkDerivation {
+  pname = "flips";
+  version = "unstable-2023-03-15";
+
+  src = fetchFromGitHub {
+    owner = "Alcaro";
+    repo = "Flips";
+    rev = "fdd5c6e34285beef5b9be759c9b91390df486c66";
+    hash = "sha256-uuHgpt7aWqiMTUILm5tAEGGeZrls3g/DdylYQgsfpTw=";
+  };
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+  buildInputs = [ gtk3 libdivsufsort ];
+  patches = [ ./use-system-libdivsufsort.patch ];
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+  buildPhase = ''
+    runHook preBuild
+    ./make.sh
+    runHook postBuild
+  '';
+
+  meta = with lib; {
+    description = "A patcher for IPS and BPS files";
+    homepage = "https://github.com/Alcaro/Flips";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.xfix ];
+    platforms = platforms.linux;
+    mainProgram = "flips";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/flips/use-system-libdivsufsort.patch b/nixpkgs/pkgs/tools/compression/flips/use-system-libdivsufsort.patch
new file mode 100644
index 000000000000..d621fe3a9f40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/flips/use-system-libdivsufsort.patch
@@ -0,0 +1,15 @@
+diff --git a/Makefile b/Makefile
+index b3d5aeb..a5acc08 100644
+--- a/Makefile
++++ b/Makefile
+@@ -83,9 +83,7 @@ endif
+ 
+ MOREFLAGS := $(CFLAGS_$(TARGET))
+ 
+-DIVSUF := $(SRCDIR)/libdivsufsort-2.0.1
+-SOURCES += $(DIVSUF)/lib/divsufsort.c $(DIVSUF)/lib/sssort.c $(DIVSUF)/lib/trsort.c
+-MOREFLAGS += -I$(DIVSUF)/include -DHAVE_CONFIG_H -D__STDC_FORMAT_MACROS
++MOREFLAGS += -ldivsufsort
+ 
+ ifeq ($(TARGET),gtk)
+   CFLAGS_G += -fopenmp
diff --git a/nixpkgs/pkgs/tools/compression/gzip/default.nix b/nixpkgs/pkgs/tools/compression/gzip/default.nix
new file mode 100644
index 000000000000..b48e2696f09c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/gzip/default.nix
@@ -0,0 +1,72 @@
+{ lib, stdenv
+, fetchurl
+, makeWrapper
+, xz
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "gzip";
+  version = "1.13";
+
+  src = fetchurl {
+    url = "mirror://gnu/gzip/${pname}-${version}.tar.xz";
+    hash = "sha256-dFTraTXbF8ZlVXbC4bD6vv04tNCTbg+H9IzQYs6RoFc=";
+  };
+
+  outputs = [ "out" "man" "info" ];
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ xz.bin makeWrapper ];
+
+  makeFlags = [
+    "SHELL=/bin/sh"
+    "GREP=grep"
+    # gzip 1.12 doesn't build `zless` unless it can find `less`, but we
+    # can avoid having `less` as a build input if we just override these.
+    "ZLESS_MAN=zless.1"
+    "ZLESS_PROG=zless"
+  ];
+
+  # Many gzip executables are shell scripts that depend upon other gzip
+  # executables being in $PATH.  Rather than try to re-write all the
+  # internal cross-references, just add $out/bin to PATH at the top of
+  # all the executables that are shell scripts.
+  preFixup = ''
+    sed -i '1{;/#!\/bin\/sh/aPATH="'$out'/bin:$PATH"
+    }' $out/bin/*
+  ''
+  # run gzip with "-n" when $GZIP_NO_TIMESTAMPS (set by stdenv's setup.sh) is set to stop gzip from adding timestamps
+  # to archive headers: https://github.com/NixOS/nixpkgs/issues/86348
+  # if changing so that there's no longer a .gzip-wrapped then update copy in make-bootstrap-tools.nix
+  + ''
+    wrapProgram $out/bin/gzip \
+      --add-flags "\''${GZIP_NO_TIMESTAMPS:+-n}"
+  '';
+
+  meta = {
+    homepage = "https://www.gnu.org/software/gzip/";
+    description = "GNU zip compression program";
+
+    longDescription =
+      ''gzip (GNU zip) is a popular data compression program written by
+        Jean-loup Gailly for the GNU project.  Mark Adler wrote the
+        decompression part.
+
+        We developed this program as a replacement for compress because of
+        the Unisys and IBM patents covering the LZW algorithm used by
+        compress.  These patents made it impossible for us to use compress,
+        and we needed a replacement.  The superior compression ratio of gzip
+        is just a bonus.
+      '';
+
+    platforms = lib.platforms.all;
+
+    license = lib.licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/gzrt/default.nix b/nixpkgs/pkgs/tools/compression/gzrt/default.nix
new file mode 100644
index 000000000000..59d87cf4f341
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/gzrt/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "gzrt";
+  version = "0.8";
+
+  src = fetchurl {
+    url = "https://www.urbanophile.com/arenn/coding/gzrt/gzrt-${version}.tar.gz";
+    sha256 = "1vhzazj47xfpbfhzkwalz27cc0n5gazddmj3kynhk0yxv99xrdxh";
+  };
+
+  buildInputs = [ zlib ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp gzrecover $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.urbanophile.com/arenn/hacking/gzrt/";
+    description = "The gzip Recovery Toolkit";
+    maintainers = with maintainers; [ ];
+    mainProgram = "gzrecover";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/hacpack/default.nix b/nixpkgs/pkgs/tools/compression/hacpack/default.nix
new file mode 100644
index 000000000000..8d44660898cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/hacpack/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "hacpack";
+  version = "1.36";
+
+  src = fetchFromGitHub {
+    owner = "The-4n";
+    repo = "hacpack";
+    rev = "v${version}";
+    sha256 = "0d846l36w1n9rxv79fbyhl2zdbqhlgrvk21b9vzr9x77yki89ygs";
+  };
+
+  preConfigure = ''
+    mv config.mk.template config.mk
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./hacpack $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/The-4n/hacPack";
+    description = "Make and repack Nintendo Switch NCAs/NSPs";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.linux;
+    mainProgram = "hacpack";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/hactool/default.nix b/nixpkgs/pkgs/tools/compression/hactool/default.nix
new file mode 100644
index 000000000000..11adbe3ced1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/hactool/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "hactool";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "SciresM";
+    repo = "hactool";
+    rev = version;
+    sha256 = "0305ngsnwm8npzgyhyifasi4l802xnfz19r0kbzzniirmcn4082d";
+  };
+
+  patches = [ ./musl-compat.patch ];
+
+  preBuild = ''
+    mv config.mk.template config.mk
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    install -D hactool $out/bin/hactool
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/SciresM/hactool";
+    description = "A tool to manipulate common file formats for the Nintendo Switch";
+    longDescription = "A tool to view information about, decrypt, and extract common file formats for the Nintendo Switch, especially Nintendo Content Archives";
+    license = licenses.isc;
+    maintainers = with maintainers; [ ivar ];
+    platforms = platforms.unix;
+    mainProgram = "hactool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/hactool/musl-compat.patch b/nixpkgs/pkgs/tools/compression/hactool/musl-compat.patch
new file mode 100644
index 000000000000..37d596f183fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/hactool/musl-compat.patch
@@ -0,0 +1,13 @@
+diff --git a/main.c b/main.c
+index 07f53cb..f2265df 100644
+--- a/main.c
++++ b/main.c
+@@ -369,7 +369,7 @@ int main(int argc, char **argv) {
+                     return EXIT_FAILURE;
+                 }
+                 nca_ctx.tool_ctx->base_file_type = BASEFILE_FAKE;
+-                nca_ctx.tool_ctx->base_file++; /* Guarantees base_file != NULL. I'm so sorry. */
++                if (!nca_ctx.tool_ctx->base_file) nca_ctx.tool_ctx->base_file = (FILE*) 1;
+                 break;
+             case 32:
+                 tool_ctx.action |= ACTION_ONLYUPDATEDROMFS;
diff --git a/nixpkgs/pkgs/tools/compression/heatshrink/default.nix b/nixpkgs/pkgs/tools/compression/heatshrink/default.nix
new file mode 100644
index 000000000000..b5cfb92247af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/heatshrink/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "heatshrink";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "atomicobject";
+    repo = "heatshrink";
+    rev = "v${version}";
+    hash = "sha256-Nm9/+JFMDXY1N90hmNFGh755V2sXSRQ4VBN9f8TcsGk=";
+  };
+
+  patches = [
+    # Add CMake build script, wanted by prusa-slicer and libbgcode, which are the only users of this library.
+    (fetchpatch {
+      url = "https://github.com/atomicobject/heatshrink/commit/0886e9ca76552b8e325841e2b820b4563e5d5aba.patch";
+      hash = "sha256-13hy4+/RDaaKgQcdaSbACvMfElUIskvJ+owXqm40feY=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    echo "Hello world" | \
+      $out/bin/heatshrink -e - | \
+      $out/bin/heatshrink -d - | \
+      grep "Hello world"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "A data compression/decompression library for embedded/real-time systems";
+    homepage = "https://github.com/atomicobject/heatshrink";
+    license = licenses.isc;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+    mainProgram = "heatshrink";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/imagelol/default.nix b/nixpkgs/pkgs/tools/compression/imagelol/default.nix
new file mode 100644
index 000000000000..950b12826b33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/imagelol/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "imagelol";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "MCRedstoner2004";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0978zdrfj41jsqm78afyyd1l64iki9nwjvhd8ynii1b553nn4dmd";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # upstream gcc-12 compatibility fix
+    (fetchpatch {
+      name = "gcc-12.patch";
+      url = "https://github.com/MCredstoner2004/ImageLOL/commit/013fb1f901d88f5fd21a896bfab47c7fff0737d7.patch";
+      hash = "sha256-RVaG2xbUqE4CxqI2lhvug2qihT6A8vN+pIfK58CXLDw=";
+      includes = [ "imagelol/ImageLOL.inl" ];
+      # change lib/ for imagelol
+      stripLen = 2;
+      extraPrefix = "imagelol/";
+    })
+  ];
+
+
+  # fix for case-sensitive filesystems
+  # https://github.com/MCredstoner2004/ImageLOL/issues/1
+  postPatch = ''
+    mv imagelol src
+    substituteInPlace CMakeLists.txt \
+      --replace 'add_subdirectory("imagelol")' 'add_subdirectory("src")'
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./ImageLOL $out/bin
+  '';
+
+  cmakeFlags = lib.optional (stdenv.isDarwin && stdenv.isAarch64) "-DPNG_ARM_NEON=off";
+
+  meta = with lib; {
+    homepage = "https://github.com/MCredstoner2004/ImageLOL";
+    description = "Simple program to store a file into a PNG image";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.unix;
+    mainProgram = "ImageLOL";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/keka/default.nix b/nixpkgs/pkgs/tools/compression/keka/default.nix
new file mode 100644
index 000000000000..71e979fa0c20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/keka/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, unzip
+, makeWrapper
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "keka";
+  version = "1.3.2";
+
+  src = fetchurl {
+    url = "https://github.com/aonez/Keka/releases/download/v${finalAttrs.version}/Keka-${finalAttrs.version}.zip";
+    sha256 = "0id8j639kba5yc0z34lgvadzgv9z9s2573nn6dx9m6gd8qpnk2x7";
+  };
+  dontUnpack = true;
+
+  nativeBuildInputs = [ unzip makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications $out/bin
+    unzip -d $out/Applications $src
+    makeWrapper $out/Applications/Keka.app/Contents/MacOS/Keka $out/bin/keka \
+      --add-flags "--cli"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "macOS file archiver";
+    homepage = "https://www.keka.io";
+    license = licenses.unfree;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ emilytrau Enzime ];
+    platforms = platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/compression/kzipmix/default.nix b/nixpkgs/pkgs/tools/compression/kzipmix/default.nix
new file mode 100644
index 000000000000..bde65af03e90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/kzipmix/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "kzipmix";
+  version = "20200115";
+
+  src = fetchurl {
+    url = "http://static.jonof.id.au/dl/kenutils/kzipmix-${version}-linux.tar.gz";
+    sha256 = "sha256-ePgye0D6/ED53zx6xffLnYhkjed7SPU4BLOZQr9E3yA=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp amd64/{kzip,zipmix} $out/bin
+
+    patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux.so.2 $out/bin/kzip
+    patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux.so.2 $out/bin/zipmix
+  '';
+
+  meta = with lib; {
+    description = "A tool that aggressively optimizes the sizes of Zip archives";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    homepage = "http://advsys.net/ken/utils.htm";
+    maintainers = [ maintainers.sander ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lbzip2/default.nix b/nixpkgs/pkgs/tools/compression/lbzip2/default.nix
new file mode 100644
index 000000000000..2e7557a310e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lbzip2/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, gnulib, perl, autoconf, automake }:
+
+stdenv.mkDerivation rec {
+  pname = "lbzip2";
+  version = "2.5";
+
+  src = fetchFromGitHub {
+    owner = "kjn";
+    repo = "lbzip2";
+    rev = "v${version}";
+    sha256 = "1h321wva6fp6khz6x0i6rqb76xh327nw6v5jhgjpcckwdarj5jv8";
+  };
+
+  patches = [
+    # This avoids an implicit function declaration when building gnulib's
+    # xmalloc.c, addressing a build failure with future compiler version.
+    # https://github.com/kjn/lbzip2/pull/33
+    (fetchpatch {
+      name = "GNULIB_XALLOC_DIE.patch";
+      url = "https://github.com/kjn/lbzip2/commit/32b5167940ec817e454431956040734af405a9de.patch";
+      hash = "sha256-YNgmkh4bksIq5kBgZP+8o97aMm9CzFZldfUW6L5DGXk=";
+    })
+  ];
+
+  buildInputs = [ gnulib perl ];
+  nativeBuildInputs = [ autoconf automake ];
+
+  preConfigure = ''
+    substituteInPlace configure.ac --replace 'AC_PREREQ([2.63])' 'AC_PREREQ(2.64)'
+    ./build-aux/autogen.sh
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/kjn/lbzip2"; # Formerly http://lbzip2.org/
+    description = "Parallel bzip2 compression utility";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lhasa/default.nix b/nixpkgs/pkgs/tools/compression/lhasa/default.nix
new file mode 100644
index 000000000000..9ced4a9b7bfb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lhasa/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "lhasa";
+  version = "0.4.0";
+
+  src = fetchurl {
+    url = "https://soulsphere.org/projects/lhasa/lhasa-${version}.tar.gz";
+    sha256 = "sha256-p/yIPDBMUIVi+5P6MHpMNCsMiG/MJl8ouS3Aw5IgxbM=";
+  };
+
+  meta = with lib; {
+    description = "Free Software replacement for the Unix LHA tool";
+    longDescription = ''
+      Lhasa is a Free Software replacement for the Unix LHA tool, for
+      decompressing .lzh (LHA / LHarc) and .lzs (LArc) archives. The backend for
+      the tool is a library, so that it can be reused for other purposes.
+    '';
+    license = licenses.isc;
+    homepage = "http://fragglet.github.io/lhasa";
+    maintainers = [ maintainers.sander ];
+    mainProgram = "lha";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lrzip/default.nix b/nixpkgs/pkgs/tools/compression/lrzip/default.nix
new file mode 100644
index 000000000000..3bb1e29f0347
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lrzip/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, zlib, lzo, bzip2, lz4, nasm, perl }:
+
+let
+  inherit (stdenv.hostPlatform) isx86;
+in
+stdenv.mkDerivation rec {
+  pname = "lrzip";
+  version = "0.651";
+
+  src = fetchFromGitHub {
+    owner = "ckolivas";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Mb324ojtLV0S10KhL7Vjf3DhSOtCy1pFMTzvLkTnpXM=";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    # Building the ASM/x86 directory creates an empty archive,
+    # which fails on darwin, so remove it
+    # https://github.com/ckolivas/lrzip/issues/193
+    # https://github.com/Homebrew/homebrew-core/pull/85360
+    substituteInPlace lzma/Makefile.am --replace "SUBDIRS = C ASM/x86" "SUBDIRS = C"
+    substituteInPlace configure.ac --replace "-f elf64" "-f macho64"
+  '';
+
+  nativeBuildInputs = [ autoreconfHook perl ] ++ lib.optionals isx86 [ nasm ];
+
+  buildInputs = [ zlib lzo bzip2 lz4 ];
+
+  configureFlags = lib.optionals (!isx86) [
+    "--disable-asm"
+  ];
+
+  meta = with lib; {
+    homepage = "http://ck.kolivas.org/apps/lrzip/";
+    description = "The CK LRZIP compression program (LZMA + RZIP)";
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lz4/default.nix b/nixpkgs/pkgs/tools/compression/lz4/default.nix
new file mode 100644
index 000000000000..f745f4f091ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lz4/default.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, valgrind
+, enableStatic ? stdenv.hostPlatform.isStatic
+, enableShared ? !stdenv.hostPlatform.isStatic
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lz4";
+  version = "1.9.4";
+
+  src = fetchFromGitHub {
+    sha256 = "sha256-YiMCD3vvrG+oxBUghSrCmP2LAfAGZrEaKz0YoaQJhpI=";
+    rev = "v${version}";
+    repo = pname;
+    owner = pname;
+  };
+
+  patches = [
+    (fetchpatch { # https://github.com/lz4/lz4/pull/1162
+      name = "build-shared-no.patch";
+      url = "https://github.com/lz4/lz4/commit/851ef4b23c7cbf4ceb2ba1099666a8b5ec4fa195.patch";
+      sha256 = "sha256-P+/uz3m7EAmHgXF/1Vncc0uKKxNVq6HNIsElx0rGxpw=";
+    })
+  ];
+
+  # TODO(@Ericson2314): Separate binaries and libraries
+  outputs = [ "bin" "out" "dev" ];
+
+  buildInputs = lib.optional doCheck valgrind;
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "INCLUDEDIR=$(dev)/include"
+    "BUILD_STATIC=${if enableStatic then "yes" else "no"}"
+    "BUILD_SHARED=${if enableShared then "yes" else "no"}"
+    "WINDRES:=${stdenv.cc.bintools.targetPrefix}windres"
+  ]
+    # TODO make full dictionary
+    ++ lib.optional stdenv.hostPlatform.isMinGW "TARGET_OS=MINGW"
+    ++ lib.optional stdenv.hostPlatform.isLinux "TARGET_OS=Linux"
+    ;
+
+  doCheck = false; # tests take a very long time
+  checkTarget = "test";
+
+  # TODO(@Ericson2314): Make resusable setup hook for this issue on Windows.
+  postInstall =
+    lib.optionalString stdenv.hostPlatform.isWindows ''
+      mv $out/bin/*.dll $out/lib
+      ln -s $out/lib/*.dll
+    ''
+    + ''
+      moveToOutput bin "$bin"
+    '';
+
+  meta = with lib; {
+    description = "Extremely fast compression algorithm";
+    longDescription = ''
+      Very fast lossless compression algorithm, providing compression speed
+      at 400 MB/s per core, with near-linear scalability for multi-threaded
+      applications. It also features an extremely fast decoder, with speed in
+      multiple GB/s per core, typically reaching RAM speed limits on
+      multi-core systems.
+    '';
+    homepage = "https://lz4.github.io/lz4/";
+    license = with licenses; [ bsd2 gpl2Plus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzbench/default.nix b/nixpkgs/pkgs/tools/compression/lzbench/default.nix
new file mode 100644
index 000000000000..c35f738b2bde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzbench/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "lzbench";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "inikep";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "19zlvcjb1qg4fx30rrp6m650660y35736j8szvdxmqh9ipkisyia";
+  };
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp lzbench $out/bin
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "In-memory benchmark of open-source LZ77/LZSS/LZMA compressors";
+    license = licenses.free;
+    platforms = platforms.all;
+    mainProgram = "lzbench";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzfse/default.nix b/nixpkgs/pkgs/tools/compression/lzfse/default.nix
new file mode 100644
index 000000000000..e5f104a9aef2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzfse/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "lzfse";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "lzfse";
+    repo = "lzfse";
+    rev = "lzfse-${version}";
+    sha256 = "1mfh6y6vpvxsdwmqmfbkqkwvxc0pz2dqqc72c6fk9sbsrxxaghd5";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    homepage = "https://github.com/lzfse/lzfse";
+    description = "a reference C implementation of the LZFSE compressor";
+    longDescription = ''
+      This is a reference C implementation of the LZFSE compressor introduced in the Compression library with OS X 10.11 and iOS 9.
+      LZFSE is a Lempel-Ziv style data compression algorithm using Finite State Entropy coding.
+      It targets similar compression rates at higher compression and decompression speed compared to deflate using zlib.
+    '';
+    platforms = platforms.unix;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "lzfse";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzham/default.nix b/nixpkgs/pkgs/tools/compression/lzham/default.nix
new file mode 100644
index 000000000000..5915d1439dff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzham/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake } :
+
+stdenv.mkDerivation rec {
+  pname = "lzham";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "richgel999";
+    repo = "lzham_codec";
+    rev = "v${lib.replaceStrings ["."] ["_"] version}_release";
+    sha256 = "14c1zvzmp1ylp4pgayfdfk1kqjb23xj4f7ll1ra7b18wjxc9ja1v";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ../bin_linux/lzhamtest $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Lossless data compression codec with LZMA-like ratios but 1.5x-8x faster decompression speed";
+    homepage = "https://github.com/richgel999/lzham_codec";
+    license = with licenses; [ mit ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzip/default.nix b/nixpkgs/pkgs/tools/compression/lzip/default.nix
new file mode 100644
index 000000000000..4c2d678eefde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzip/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "lzip";
+  version = "1.23";
+  outputs = [ "out" "man" "info" ];
+
+  src = fetchurl {
+    url = "mirror://savannah/lzip/${pname}-${version}.tar.gz";
+    sha256 = "sha256-R5LAR93xXvKdVbqOaKGiHgy3aS2H7N9yBEGYZFgvKA0=";
+  };
+
+  patches = lib.optionals stdenv.hostPlatform.isMinGW [
+    ./mingw-install-exe-file.patch
+  ];
+
+  configureFlags = [
+    "CPPFLAGS=-DNDEBUG"
+    "CFLAGS=-O3"
+    "CXXFLAGS=-O3"
+    "CXX=${stdenv.cc.targetPrefix}c++"
+  ];
+
+  setupHook = ./lzip-setup-hook.sh;
+
+  doCheck = true;
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://www.nongnu.org/lzip/lzip.html";
+    description = "A lossless data compressor based on the LZMA algorithm";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with maintainers; [ vlaci ];
+    platforms = lib.platforms.all;
+    mainProgram = "lzip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzip/lzip-setup-hook.sh b/nixpkgs/pkgs/tools/compression/lzip/lzip-setup-hook.sh
new file mode 100644
index 000000000000..092ad7737dd1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzip/lzip-setup-hook.sh
@@ -0,0 +1,5 @@
+lzipUnpackCmdHook() {
+    [[ "$1" = *.tar.lz ]] && tar --lzip -xf "$1"
+}
+
+unpackCmdHooks+=(lzipUnpackCmdHook)
diff --git a/nixpkgs/pkgs/tools/compression/lzip/mingw-install-exe-file.patch b/nixpkgs/pkgs/tools/compression/lzip/mingw-install-exe-file.patch
new file mode 100644
index 000000000000..b2b4b2be067e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzip/mingw-install-exe-file.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.in b/Makefile.in
+index d07ad5a..1c15203 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -64,7 +64,7 @@ install-strip-compress : install-bin-strip install-info-compress install-man-com
+ 
+ install-bin : all
+ 	if [ ! -d "$(DESTDIR)$(bindir)" ] ; then $(INSTALL_DIR) "$(DESTDIR)$(bindir)" ; fi
+-	$(INSTALL_PROGRAM) ./$(progname) "$(DESTDIR)$(bindir)/$(progname)"
++	$(INSTALL_PROGRAM) ./$(progname).exe "$(DESTDIR)$(bindir)/$(progname).exe"
+ 
+ install-bin-strip : all
+ 	$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install-bin
diff --git a/nixpkgs/pkgs/tools/compression/lziprecover/default.nix b/nixpkgs/pkgs/tools/compression/lziprecover/default.nix
new file mode 100644
index 000000000000..c3f2ca738c7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lziprecover/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, lzip }:
+
+stdenv.mkDerivation rec {
+  pname = "lziprecover";
+  version = "1.24";
+
+  src = fetchurl {
+    url = "mirror://savannah/lzip/lziprecover/${pname}-${version}.tar.gz";
+    sha256 = "sha256-HWmc+u/pLrJiSjZSWAvK/gu7mP54GMJebegjvN0NRY8=";
+  };
+
+  configureFlags = [
+    "CPPFLAGS=-DNDEBUG"
+    "CFLAGS=-O3"
+    "CXXFLAGS=-O3"
+    "CXX=${stdenv.cc.targetPrefix}c++"
+  ];
+
+  doCheck = true;
+  nativeCheckInputs = [ lzip ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://www.nongnu.org/lzip/lziprecover.html";
+    description = "Data recovery tool for lzip compressed files";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with maintainers; [ vlaci ];
+    platforms = lib.platforms.all;
+    mainProgram = "lziprecover";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzop/default.nix b/nixpkgs/pkgs/tools/compression/lzop/default.nix
new file mode 100644
index 000000000000..64061647667a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzop/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, lzo }:
+
+stdenv.mkDerivation rec {
+  pname = "lzop";
+  version = "1.04";
+
+  src = fetchurl {
+    url = "https://www.lzop.org/download/lzop-${version}.tar.gz";
+    sha256 = "0h9gb8q7y54m9mvy3jvsmxf21yx8fc3ylzh418hgbbv0i8mbcwky";
+  };
+
+  buildInputs = [ lzo ];
+
+  meta = with lib; {
+    homepage = "http://www.lzop.org";
+    description = "Fast file compressor";
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    mainProgram = "lzop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/mozlz4a/default.nix b/nixpkgs/pkgs/tools/compression/mozlz4a/default.nix
new file mode 100644
index 000000000000..a9ab74bc7a59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/mozlz4a/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchurl
+, python3
+, runtimeShell
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mozlz4a";
+  version = "2022-03-19";
+
+  src = fetchurl {
+    url = "https://gist.githubusercontent.com/Tblue/62ff47bef7f894e92ed5/raw/c12fce199a97ecb214eb913cc5d762eac2e92c57/mozlz4a.py";
+    hash = "sha256-Igj9u6TmV+nIuSg8gI8zD4hTb/Iiog/3aB3DDk0Lqkg=";
+  };
+
+  dontUnpack = true;
+
+  buildInputs = [ python3 python3.pkgs.lz4 ];
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/${python3.sitePackages}/"
+    cp "${src}" "$out/${python3.sitePackages}/mozlz4a.py"
+
+    echo "#!${runtimeShell}" >> "$out/bin/mozlz4a"
+    echo "export PYTHONPATH='$PYTHONPATH'" >> "$out/bin/mozlz4a"
+    echo "'${python3}/bin/python' '$out/${python3.sitePackages}/mozlz4a.py' \"\$@\"" >> "$out/bin/mozlz4a"
+    chmod a+x "$out/bin/mozlz4a"
+  '';
+
+  meta = with lib; {
+    description = "MozLz4a compression/decompression utility";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ kira-bruneau pshirshov raskin ];
+    platforms = python3.meta.platforms;
+    homepage = "https://gist.github.com/Tblue/62ff47bef7f894e92ed5";
+    mainProgram = "mozlz4a";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/ncompress/default.nix b/nixpkgs/pkgs/tools/compression/ncompress/default.nix
new file mode 100644
index 000000000000..c4678cd96021
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/ncompress/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ncompress";
+  version = "5.0";
+
+  src = fetchFromGitHub {
+    owner = "vapier";
+    repo = "ncompress";
+    rev = "v${version}";
+    sha256 = "sha256-Yhs3C5/kR7Ve56E84usYJprxIMAIwXVahLi1N9TIfj0=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  installTargets = "install_core";
+
+  postInstall = ''
+    mv $out/bin/uncompress $out/bin/uncompress-ncompress
+  '';
+
+  meta = with lib; {
+    homepage = "http://ncompress.sourceforge.net/";
+    license = licenses.publicDomain;
+    description = "A fast, simple LZW file compressor";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/nx2elf/default.nix b/nixpkgs/pkgs/tools/compression/nx2elf/default.nix
new file mode 100644
index 000000000000..a068788dc1d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/nx2elf/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, lz4 }:
+
+stdenv.mkDerivation rec {
+  pname = "nx2elf";
+  version = "unstable-2021-11-21";
+
+  src = fetchFromGitHub {
+    owner = "shuffle2";
+    repo = "nx2elf";
+    rev = "735aaa0648a5a6c996b48add9465db86524999f6";
+    sha256 = "sha256-cS8FFIEgDWva0j9JXhS+s7Y4Oh+mNhFaKRI7BF2hqvs=";
+  };
+
+  buildInputs = [ lz4 ];
+
+  postPatch = ''
+    # pkg-config is not supported, so we'll manually devendor lz4
+    cp ${lz4.src}/lib/lz4.{h,c} .
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D nx2elf $out/bin/nx2elf
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/shuffle2/nx2elf";
+    description = "Convert Nintendo Switch executable files to ELFs";
+    license = licenses.unfree; # No license specified upstream
+    platforms = [ "x86_64-linux" ]; # Should work on Darwin as well, but this is untested. aarch64-linux fails.
+    maintainers = [ maintainers.ivar ];
+    mainProgram = "nx2elf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/offzip/default.nix b/nixpkgs/pkgs/tools/compression/offzip/default.nix
new file mode 100644
index 000000000000..e756d4257264
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/offzip/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchzip
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "offzip";
+  version = "0.4.1";
+
+  src = fetchzip {
+    url = "https://web.archive.org/web/20230419080810/https://aluigi.altervista.org/mytoolz/offzip.zip";
+    hash = "sha256-dmYeSdtNvx6FBuyCdiu+q1ExEfgN8fDO8coyJmFrjKY=";
+    stripRoot = false;
+  };
+
+  buildInputs = [
+    zlib
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "A tool to unpack the zip data contained in any type of file";
+    homepage = "https://aluigi.altervista.org/mytoolz.htm#offzip";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with maintainers; [ r-burns ];
+    platforms = platforms.unix;
+    mainProgram = "offzip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/orz/default.nix b/nixpkgs/pkgs/tools/compression/orz/default.nix
new file mode 100644
index 000000000000..b760b0132ef7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/orz/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, rust-cbindgen
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "orz";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "richox";
+    repo = "orz";
+    rev = "v${version}";
+    hash = "sha256-Yro+iXlg18Pj/AkU4IjvgA88xctK65yStfTilz+IRs0=";
+  };
+
+  cargoHash = "sha256-aUsRbIajBP6esjW7Wj7mqIkbYUCbZ2GgxjRXMPTnHYg=";
+
+  outputs = [ "out" "dev" "lib" ];
+
+  nativeBuildInputs = [
+    rust-cbindgen
+  ];
+
+  postInstall = ''
+    cbindgen -o $dev/include/orz.h
+
+    mkdir -p $lib
+    mv $out/lib "$lib"
+  '';
+
+  meta = with lib; {
+    description = "A high performance, general purpose data compressor written in rust";
+    homepage = "https://github.com/richox/orz";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "orz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/ouch/default.nix b/nixpkgs/pkgs/tools/compression/ouch/default.nix
new file mode 100644
index 000000000000..07a5302b5a17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/ouch/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, bzip2
+, xz
+, zlib
+, zstd
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ouch";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "ouch-org";
+    repo = "ouch";
+    rev = version;
+    hash = "sha256-WO1fetu39fcLGcrbzFh+toHpnyxWuDVHtmjuH203hzQ=";
+  };
+
+  cargoHash = "sha256-OdAu7fStTJCF1JGJG9TRE1Qosy6yjKsWq01MYpbXZcg=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = [ bzip2 xz zlib zstd ];
+
+  buildFeatures = [ "zstd/pkg-config" ];
+
+  preCheck = ''
+    substituteInPlace tests/ui.rs \
+      --replace 'format!(r"/private{path}")' 'path.to_string()'
+  '';
+
+  postInstall = ''
+    installManPage artifacts/*.1
+    installShellCompletion artifacts/ouch.{bash,fish} --zsh artifacts/_ouch
+  '';
+
+  env = { OUCH_ARTIFACTS_FOLDER = "artifacts"; } //
+    # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+    lib.optionalAttrs stdenv.cc.isClang { NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}"; };
+
+  meta = with lib; {
+    description = "A command-line utility for easily compressing and decompressing files and directories";
+    homepage = "https://github.com/ouch-org/ouch";
+    changelog = "https://github.com/ouch-org/ouch/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda psibi ];
+    mainProgram = "ouch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/pbzip2/default.nix b/nixpkgs/pkgs/tools/compression/pbzip2/default.nix
new file mode 100644
index 000000000000..81144fb14b19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pbzip2/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, bzip2 }:
+
+let major = "1.1";
+    version = "${major}.13";
+in
+stdenv.mkDerivation rec {
+  pname = "pbzip2";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://launchpad.net/pbzip2/${major}/${version}/+download/${pname}-${version}.tar.gz";
+    sha256 = "1rnvgcdixjzbrmcr1nv9b6ccrjfrhryaj7jwz28yxxv6lam3xlcg";
+  };
+
+  buildInputs = [ bzip2 ];
+
+  preBuild = "substituteInPlace Makefile --replace g++ c++";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=reserved-user-defined-literal";
+
+  meta = with lib; {
+    homepage = "http://compression.ca/pbzip2/";
+    description = "A parallel implementation of bzip2 for multi-core machines";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [viric];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/pbzx/default.nix b/nixpkgs/pkgs/tools/compression/pbzx/default.nix
new file mode 100644
index 000000000000..44555cd6ddbc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pbzx/default.nix
@@ -0,0 +1,27 @@
+{stdenv, lib, fetchFromGitHub, xz, xar}:
+
+stdenv.mkDerivation rec {
+  pname = "pbzx";
+  version = "1.0.2";
+  src = fetchFromGitHub {
+    owner = "NiklasRosenstein";
+    repo = "pbzx";
+    rev = "v${version}";
+    sha256 = "0bwd7wmnhpz1n5p39mh6asfyccj4cm06hwigslcwbb3pdwmvxc90";
+  };
+  buildInputs = [ xz xar ];
+  buildPhase = ''
+    ${stdenv.cc.targetPrefix}cc pbzx.c -llzma -lxar -o pbzx
+  '';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp pbzx $out/bin
+  '';
+  meta = with lib; {
+    description = "Stream parser of Apple's pbzx compression format";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.matthewbauer ];
+    mainProgram = "pbzx";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/pigz/default.nix b/nixpkgs/pkgs/tools/compression/pigz/default.nix
new file mode 100644
index 000000000000..79363eecade3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pigz/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, zlib, util-linux }:
+
+stdenv.mkDerivation rec {
+  pname = "pigz";
+  version = "2.8";
+
+  src = fetchFromGitHub {
+      owner = "madler";
+      repo = pname;
+      rev = "refs/tags/v${version}";
+      sha256 = "sha256-PzdxyO4mCg2jE/oBk1MH+NUdWM95wIIIbncBg71BkmQ=";
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ zlib ] ++ lib.optional stdenv.isLinux util-linux;
+
+  makeFlags = [ "CC=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc" ];
+
+  doCheck = stdenv.isLinux;
+  checkTarget = "tests";
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 pigz "$out/bin/pigz"
+    ln -s pigz "$out/bin/unpigz"
+    install -Dm755 pigz.1 "$out/share/man/man1/pigz.1"
+    ln -s pigz.1 "$out/share/man/man1/unpigz.1"
+    install -Dm755 pigz.pdf "$out/share/doc/pigz/pigz.pdf"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.zlib.net/pigz/";
+    description = "A parallel implementation of gzip for multi-core machines";
+    maintainers = with maintainers; [ ];
+    license = licenses.zlib;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/pixz/default.nix b/nixpkgs/pkgs/tools/compression/pixz/default.nix
new file mode 100644
index 000000000000..9eb1d6539cdf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pixz/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf
+, automake
+, libtool
+, pkg-config
+, asciidoc
+, libxslt
+, libxml2
+, docbook_xml_dtd_45
+, docbook_xsl
+, libarchive
+, xz
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pixz";
+  version = "1.0.7";
+
+  nativeBuildInputs = [ pkg-config autoconf automake ];
+  buildInputs = [
+    libtool
+    asciidoc
+    libxslt
+    libxml2
+    docbook_xml_dtd_45
+    docbook_xsl
+    libarchive
+    xz
+  ];
+  preBuild = ''
+    echo "XML_CATALOG_FILES='$XML_CATALOG_FILES'"
+  '';
+  src = fetchFromGitHub {
+    owner = "vasi";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "163axxs22w7pghr786hda22mnlpvmi50hzhfr9axwyyjl9n41qs2";
+  };
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "A parallel compressor/decompressor for xz format";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.unix;
+    mainProgram = "pixz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/pxz/default.nix b/nixpkgs/pkgs/tools/compression/pxz/default.nix
new file mode 100644
index 000000000000..f61e80cbc065
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pxz/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, testers
+, pxz
+, xz
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pxz";
+  version = "4.999.9beta";
+
+  src = fetchFromGitHub {
+    owner = "jnovy";
+    repo = "pxz";
+    rev = "124382a6d0832b13b7c091f72264f8f3f463070a";
+    hash = "sha256-NYhPujm5A0j810IKUZEHru/oLXCW7xZf5FjjKAbatZY=";
+  };
+
+  patches = [ ./flush-stdout-help-version.patch ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace '`date +%Y%m%d`' '19700101'
+
+    substituteInPlace pxz.c \
+      --replace 'XZ_BINARY "xz"' 'XZ_BINARY "${lib.getBin xz}/bin/xz"'
+  '';
+
+  buildInputs = [ xz ];
+
+  makeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "MANDIR=${placeholder "out"}/share/man"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = pxz;
+  };
+
+  meta = with lib; {
+    homepage = "https://jnovy.fedorapeople.org/pxz/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pashev ];
+    description = "compression utility that runs LZMA compression of different parts on multiple cores simultaneously";
+    longDescription = ''
+      Parallel XZ is a compression utility that takes advantage of
+      running LZMA compression of different parts of an input file on multiple
+      cores and processors simultaneously. Its primary goal is to utilize all
+      resources to speed up compression time with minimal possible influence
+      on compression ratio
+    '';
+    mainProgram = "pxz";
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/pxz/flush-stdout-help-version.patch b/nixpkgs/pkgs/tools/compression/pxz/flush-stdout-help-version.patch
new file mode 100644
index 000000000000..797cdbeb1f8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pxz/flush-stdout-help-version.patch
@@ -0,0 +1,32 @@
+From bba741ccd0f0a65cd9bfdd81504ebe5840fd37ad Mon Sep 17 00:00:00 2001
+From: Will Dietz <w@wdtz.org>
+Date: Tue, 22 Mar 2022 08:01:10 -0500
+Subject: [PATCH] pxz: flush stdout before exec'ing xz, ensure our messages are
+ printed
+
+Without this, they're presently dropped on my system when pxz
+is piped to something, as in `pxz --help|less` or `pxz --version|cat`.
+---
+ pxz.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/pxz.c b/pxz.c
+index 4240b6e..3b53cfa 100644
+--- a/pxz.c
++++ b/pxz.c
+@@ -184,10 +184,12 @@ void parse_args( int argc, char **argv, char **envp ) {
+ 					"  -D, --context-size  per-thread compression context size as a multiple\n"
+ 					"                      of dictionary size. Default is 3.\n\n"
+ 					"Usage and other options are same as in XZ:\n\n");
++				fflush(stdout);
+ 				run_xz(argv, envp);
+ 				break;
+ 			case 'V':
+ 				printf("Parallel PXZ "PXZ_VERSION" (build "PXZ_BUILD_DATE")\n");
++				fflush(stdout);
+ 				run_xz(argv, envp);
+ 				break;
+ 			case 'g':
+-- 
+2.35.1
+
diff --git a/nixpkgs/pkgs/tools/compression/rzip/default.nix b/nixpkgs/pkgs/tools/compression/rzip/default.nix
new file mode 100644
index 000000000000..3d744dfa35fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/rzip/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, fetchpatch, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "rzip";
+  version = "2.1";
+
+  src = fetchurl {
+    url = "mirror://samba/rzip/rzip-${version}.tar.gz";
+    sha256 = "4bb96f4d58ccf16749ed3f836957ce97dbcff3e3ee5fd50266229a48f89815b7";
+  };
+  buildInputs = [ bzip2 ];
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2017-8364-fill-buffer.patch";
+      url = "https://sources.debian.net/data/main/r/rzip/2.1-4.1/debian/patches/80-CVE-2017-8364-fill-buffer.patch";
+      sha256 = "0jcjlx9ksdvxvjyxmyzscx9ar9992iy5icw0sc3n0p09qi4d6x1r";
+    })
+  ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=implicit-int";
+
+  meta = with lib; {
+    homepage = "https://rzip.samba.org/";
+    description = "Compression program";
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    mainProgram = "rzip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/unzrip/default.nix b/nixpkgs/pkgs/tools/compression/unzrip/default.nix
new file mode 100644
index 000000000000..2e92fadd39a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/unzrip/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, zstd
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "unzrip";
+  version = "unstable-2023-04-16";
+
+  src = fetchFromGitHub {
+    owner = "quininer";
+    repo = "unzrip";
+    rev = "14ba4b4c9ff9c80444ecef762d665acaa5aecfce";
+    hash = "sha256-QYu4PXWQGagj7r8lLs0IngIXzt6B8uq2qonycaGDg6g=";
+  };
+
+  cargoHash = "sha256-9CjKSdd+E2frI8VvdOawYQ3u+KF22xw9kBpnAufRUG0=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    zstd
+  ];
+
+  meta = with lib; {
+    description = "Unzip implementation, support for parallel decompression, automatic detection encoding";
+    homepage = "https://github.com/quininer/unzrip";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "unzrip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/upx/default.nix b/nixpkgs/pkgs/tools/compression/upx/default.nix
new file mode 100644
index 000000000000..c9a516705b0e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/upx/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, nix-update-script
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "upx";
+  version = "4.2.2";
+  src = fetchFromGitHub {
+    owner = "upx";
+    repo = "upx";
+    rev = "v${finalAttrs.version}";
+    fetchSubmodules = true;
+    hash = "sha256-0x7SUW+rB5HNRoRkCQIwfOIMpu+kOifxA7Z3SUlY/ME=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion { package = finalAttrs.finalPackage; };
+  };
+
+  meta = with lib; {
+    homepage = "https://upx.github.io/";
+    description = "The Ultimate Packer for eXecutables";
+    changelog = "https://github.com/upx/upx/blob/${finalAttrs.src.rev}/NEWS";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    mainProgram = "upx";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/compression/xar/0001-Add-useless-descriptions-to-AC_DEFINE.patch b/nixpkgs/pkgs/tools/compression/xar/0001-Add-useless-descriptions-to-AC_DEFINE.patch
new file mode 100644
index 000000000000..a605d2db1708
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/xar/0001-Add-useless-descriptions-to-AC_DEFINE.patch
@@ -0,0 +1,95 @@
+From a14be07c0aae3bf6f732d1ca5f625ba375702121 Mon Sep 17 00:00:00 2001
+From: Andrew Childs <andrew.childs@bibo.com.ph>
+Date: Sun, 15 Nov 2020 19:12:33 +0900
+Subject: [PATCH 1/2] Add useless descriptions to AC_DEFINE
+
+Removes autoheader warnings.
+---
+ configure.ac | 42 +++++++++++++++++++++---------------------
+ 1 file changed, 21 insertions(+), 21 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 812b5ff..358ab89 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -210,48 +210,48 @@ AC_CHECK_MEMBERS([struct stat.st_flags])
+ 
+ AC_CHECK_SIZEOF(uid_t)
+ if test $ac_cv_sizeof_uid_t = "4"; then
+-AC_DEFINE(UID_STRING, RId32)
+-AC_DEFINE(UID_CAST, (uint32_t))
++AC_DEFINE([UID_STRING], RId32, [UID_STRING])
++AC_DEFINE([UID_CAST], (uint32_t), [UID_CAST])
+ elif test $ac_cv_sizeof_uid_t = "8"; then
+-AC_DEFINE(UID_STRING, PRId64)
+-AC_DEFINE(UID_CAST, (uint64_t))
++AC_DEFINE([UID_STRING], PRId64, [UID_STRING])
++AC_DEFINE([UID_CAST], (uint64_t), [UID_CAST])
+ else
+ AC_ERROR(can not detect the size of your system's uid_t type)
+ fi
+ 
+ AC_CHECK_SIZEOF(gid_t)
+ if test $ac_cv_sizeof_gid_t = "4"; then
+-AC_DEFINE(GID_STRING, PRId32)
+-AC_DEFINE(GID_CAST, (uint32_t))
++AC_DEFINE([GID_STRING], PRId32, [GID_STRING])
++AC_DEFINE([GID_CAST], (uint32_t), [GID_CAST])
+ elif test $ac_cv_sizeof_gid_t = "8"; then
+-AC_DEFINE(GID_STRING, PRId64)
+-AC_DEFINE(GID_CAST, (uint64_t))
++AC_DEFINE([GID_STRING], PRId64, [GID_STRING])
++AC_DEFINE([GID_CAST], (uint64_t), [GID_CAST])
+ else
+ AC_ERROR(can not detect the size of your system's gid_t type)
+ fi
+ 
+ AC_CHECK_SIZEOF(ino_t)
+ if test $ac_cv_sizeof_ino_t = "4"; then
+-AC_DEFINE(INO_STRING, PRId32)
+-AC_DEFINE(INO_HEXSTRING, PRIx32)
+-AC_DEFINE(INO_CAST, (uint32_t))
++AC_DEFINE([INO_STRING], PRId32, [INO_STRING])
++AC_DEFINE([INO_HEXSTRING], PRIx32, [INO_HEXSTRING])
++AC_DEFINE([INO_CAST], (uint32_t), [INO_CAST])
+ elif test $ac_cv_sizeof_ino_t = "8"; then
+-AC_DEFINE(INO_STRING, PRId64)
+-AC_DEFINE(INO_HEXSTRING, PRIx64)
+-AC_DEFINE(INO_CAST, (uint64_t))
++AC_DEFINE([INO_STRING], PRId64, [INO_STRING])
++AC_DEFINE([INO_HEXSTRING], PRIx64, [INO_HEXSTRING])
++AC_DEFINE([INO_CAST], (uint64_t), [INO_CAST])
+ else
+ AC_ERROR(can not detect the size of your system's ino_t type)
+ fi
+ 
+ AC_CHECK_SIZEOF(dev_t)
+ if test $ac_cv_sizeof_dev_t = "4"; then
+-AC_DEFINE(DEV_STRING, PRId32)
+-AC_DEFINE(DEV_HEXSTRING, PRIx32)
+-AC_DEFINE(DEV_CAST, (uint32_t))
++AC_DEFINE([DEV_STRING], PRId32, [DEV_STRING])
++AC_DEFINE([DEV_HEXSTRING], PRIx32, [DEV_HEXSTRING])
++AC_DEFINE([DEV_CAST], (uint32_t), [DEV_CAST])
+ elif test $ac_cv_sizeof_dev_t = "8"; then
+-AC_DEFINE(DEV_STRING, PRId64)
+-AC_DEFINE(DEV_HEXSTRING, PRIx64)
+-AC_DEFINE(DEV_CAST, (uint64_t))
++AC_DEFINE([DEV_STRING], PRId64, [DEV_STRING])
++AC_DEFINE([DEV_HEXSTRING], PRIx64, [DEV_HEXSTRING])
++AC_DEFINE([DEV_CAST], (uint64_t), [DEV_CAST])
+ else
+ AC_ERROR(can not detect the size of your system's dev_t type)
+ fi
+@@ -261,7 +261,7 @@ AC_CHECK_LIB(acl, acl_get_file)
+ dnl Check for paths
+ AC_PREFIX_DEFAULT(/usr/local)
+ 
+-AC_CHECK_FUNC([asprintf], AC_DEFINE([HAVE_ASPRINTF]))
++AC_CHECK_FUNC([asprintf], AC_DEFINE([HAVE_ASPRINTF], [], [HAVE_ASPRINTF]))
+ 
+ dnl 
+ dnl Configure libxml2.
+-- 
+2.28.0
+
diff --git a/nixpkgs/pkgs/tools/compression/xar/0002-Use-pkg-config-for-libxml2.patch b/nixpkgs/pkgs/tools/compression/xar/0002-Use-pkg-config-for-libxml2.patch
new file mode 100644
index 000000000000..d71ad4b753c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/xar/0002-Use-pkg-config-for-libxml2.patch
@@ -0,0 +1,89 @@
+From 276833851657c85651c053ee16b8e1a8dc768a50 Mon Sep 17 00:00:00 2001
+From: Andrew Childs <andrew.childs@bibo.com.ph>
+Date: Sun, 15 Nov 2020 19:12:56 +0900
+Subject: [PATCH 2/2] Use pkg-config for libxml2
+
+---
+ configure.ac | 66 +++++++++-------------------------------------------
+ 1 file changed, 11 insertions(+), 55 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 358ab89..984a694 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -268,61 +268,17 @@ dnl Configure libxml2.
+ dnl 
+ LIBXML2_VERSION_MIN=2.6.11
+ 
+-have_libxml2="1"
+-
+-AC_ARG_WITH([xml2-config], [  --with-xml2-config      libxml2 config program],
+-if test "x${with_xml2_config}" = "xno" ; then
+-  XML2_CONFIG=
+-else
+-  XML2_CONFIG="${with_xml2_config}"
+-fi
+-,
+-  XML2_CONFIG=
+-)
+-if test "x${XML2_CONFIG}" != "x" ; then
+-   if test ! -x "${XML2_CONFIG}" ; then
+-     AC_MSG_ERROR([Unusable or missing xml2-config: ${XML2_CONFIG}])
+-   fi
+-else
+-  AC_PATH_PROG([XML2_CONFIG], [xml2-config], , [${PATH}])
+-  if test "x${XML2_CONFIG}" = "x" ; then
+-    AC_MSG_ERROR([Cannot configure without xml2-config])
+-  fi
+-fi
+-
+-dnl Make sure the version of libxml2 found is sufficient.
+-AC_MSG_CHECKING([for libxml >= ${LIBXML2_VERSION_MIN}])
+-LIBXML2_FOUND=`2>&1 ${XML2_CONFIG} --version`
+-LIBXML2_MAJOR=`echo ${LIBXML2_FOUND} | tr . " " | awk '{print $1}'`
+-LIBXML2_MINOR=`echo ${LIBXML2_FOUND} | tr . " " | awk '{print $2}' | tr a-z " " |awk '{print $1}'`
+-LIBXML2_BRANCH=`echo ${LIBXML2_FOUND} | tr . " " | awk '{print $3}' | tr a-z " " |awk '{print $1}'`
+-if test "x${LIBXML2_BRANCH}" = "x" ; then
+-  LIBXML2_BRANCH=0
+-fi
+-LIBXML2_MAJOR_MIN=`echo ${LIBXML2_VERSION_MIN} | tr . " " | awk '{print $1}'`
+-LIBXML2_MINOR_MIN=`echo ${LIBXML2_VERSION_MIN} | tr . " " | awk '{print $2}'`
+-LIBXML2_BRANCH_MIN=`echo ${LIBXML2_VERSION_MIN} | tr . " " | awk '{print $3}'`
+-if test ${LIBXML2_MAJOR} -gt ${LIBXML2_MAJOR_MIN} \
+-     -o ${LIBXML2_MAJOR} -eq ${LIBXML2_MAJOR_MIN} \
+-     -a ${LIBXML2_MINOR} -gt ${LIBXML2_MINOR_MIN} \
+-     -o ${LIBXML2_MAJOR} -eq ${LIBXML2_MAJOR_MIN} \
+-     -a ${LIBXML2_MINOR} -eq ${LIBXML2_MINOR_MIN} \
+-     -a ${LIBXML2_BRANCH} -ge $LIBXML2_BRANCH_MIN ; then
+-  AC_MSG_RESULT([${LIBXML2_MAJOR}.${LIBXML2_MINOR}.${LIBXML2_BRANCH}])
+-  have_libxml2="1"
+-  CPPFLAGS="${CPPFLAGS} `${XML2_CONFIG} --cflags`"
+-  LIBS="${LIBS} `${XML2_CONFIG} --libs`"
+-else
+-  AC_MSG_RESULT([no])
+-  have_libxml2="0"
+-fi
+-if test "x${have_libxml2}" = "x1" ; then
+-  dnl Final sanity check, to make sure that xmlwriter is present.
+-  AC_CHECK_HEADER([libxml/xmlwriter.h], , [have_libxml2="0"])
+-fi
+-if test "x${have_libxml2}" = "x0" ; then
+-  AC_MSG_ERROR([Cannot build without libxml2])
+-fi
++PKG_PROG_PKG_CONFIG
++
++PKG_CHECK_MODULES(LIBXML2_PKGCONFIG, [libxml-2.0 >= ${LIBXML2_VERSION_MIN}],
++  [
++    have_libxml2=1
++    CPPFLAGS="${CPPFLAGS} ${LIBXML2_PKGCONFIG_CFLAGS}"
++    LIBS="${LIBS} ${LIBXML2_PKGCONFIG_LIBS}"
++  ],
++  [
++    have_libxml2=0
++  ])
+ 
+ dnl 
+ dnl Configure libcrypto (part of OpenSSL).
+-- 
+2.28.0
+
diff --git a/nixpkgs/pkgs/tools/compression/xar/default.nix b/nixpkgs/pkgs/tools/compression/xar/default.nix
new file mode 100644
index 000000000000..9c03c41054be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/xar/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, pkg-config, libxml2, xz, openssl, zlib, bzip2, fts, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version = "1.6.1";
+  pname = "xar";
+
+  src = fetchurl {
+    url    = "https://github.com/downloads/mackyle/xar/${pname}-${version}.tar.gz";
+    sha256 = "0ghmsbs6xwg1092v7pjcibmk5wkyifwxw6ygp08gfz25d2chhipf";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libxml2 xz openssl zlib bzip2 fts ];
+
+  patches = [
+    ./0001-Add-useless-descriptions-to-AC_DEFINE.patch
+    ./0002-Use-pkg-config-for-libxml2.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace 'OpenSSL_add_all_ciphers' 'OPENSSL_init_crypto' \
+      --replace 'openssl/evp.h' 'openssl/crypto.h'
+  '';
+
+  configureFlags = lib.optional (fts != null) "LDFLAGS=-lfts";
+
+  meta = {
+    homepage    = "https://mackyle.github.io/xar/";
+    description = "Extensible Archiver";
+
+    longDescription =
+      '' The XAR project aims to provide an easily extensible archive format.
+         Important design decisions include an easily extensible XML table of
+         contents for random access to archived files, storing the toc at the
+         beginning of the archive to allow for efficient handling of streamed
+         archives, the ability to handle files of arbitrarily large sizes, the
+         ability to choose independent encodings for individual files in the
+         archive, the ability to store checksums for individual files in both
+         compressed and uncompressed form, and the ability to query the table
+         of content's rich meta-data.
+      '';
+
+    license     = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ copumpkin ];
+    platforms   = lib.platforms.all;
+    mainProgram = "xar";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/xdelta/default.nix b/nixpkgs/pkgs/tools/compression/xdelta/default.nix
new file mode 100644
index 000000000000..27d0141ff75b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/xdelta/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, lzmaSupport ? true, xz ? null
+}:
+
+assert lzmaSupport -> xz != null;
+
+let
+  mkWith = flag: name: if flag
+    then "--with-${name}"
+    else "--without-${name}";
+in stdenv.mkDerivation rec {
+  pname = "xdelta";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    sha256 = "09mmsalc7dwlvgrda56s2k927rpl3a5dzfa88aslkqcjnr790wjy";
+    rev = "v${version}";
+    repo = "xdelta-devel";
+    owner = "jmacd";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = []
+    ++ lib.optionals lzmaSupport [ xz ];
+
+  postPatch = ''
+    cd xdelta3
+  '';
+
+  configureFlags = [
+    (mkWith lzmaSupport "liblzma")
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+  checkPhase = ''
+    mkdir $PWD/tmp
+    for i in testing/file.h xdelta3-test.h; do
+      substituteInPlace $i --replace /tmp $PWD/tmp
+    done
+    ./xdelta3regtest
+  '';
+
+  installPhase = ''
+    install -D -m755 xdelta3 $out/bin/xdelta3
+    install -D -m644 xdelta3.1 $out/share/man/man1/xdelta3.1
+  '';
+
+  meta = with lib; {
+    description = "Binary differential compression in VCDIFF (RFC 3284) format";
+    longDescription = ''
+      xdelta is a command line program for delta encoding, which generates two
+      file differences. This is similar to diff and patch, but it is targeted
+      for binary files and does not generate human readable output.
+    '';
+    homepage = "http://xdelta.org/";
+    license = licenses.gpl2Plus;
+    mainProgram = "xdelta3";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/xdelta/unstable.nix b/nixpkgs/pkgs/tools/compression/xdelta/unstable.nix
new file mode 100644
index 000000000000..2ac8398dbc2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/xdelta/unstable.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, lzmaSupport ? true, xz ? null
+}:
+
+assert lzmaSupport -> xz != null;
+
+let
+  mkWith = flag: name: if flag
+    then "--with-${name}"
+    else "--without-${name}";
+in stdenv.mkDerivation rec {
+  pname = "xdelta";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    sha256 = "09mmsalc7dwlvgrda56s2k927rpl3a5dzfa88aslkqcjnr790wjy";
+    rev = "v${version}";
+    repo = "xdelta-devel";
+    owner = "jmacd";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = []
+    ++ lib.optionals lzmaSupport [ xz ];
+
+  postPatch = ''
+    cd xdelta3
+
+    substituteInPlace Makefile.am --replace \
+      "common_CFLAGS =" \
+      "common_CFLAGS = -DXD3_USE_LARGESIZET=1"
+  '';
+
+  configureFlags = [
+    (mkWith lzmaSupport "liblzma")
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+  checkPhase = ''
+    mkdir $PWD/tmp
+    for i in testing/file.h xdelta3-test.h; do
+      substituteInPlace $i --replace /tmp $PWD/tmp
+    done
+    ./xdelta3regtest
+  '';
+
+  installPhase = ''
+    install -D -m755 xdelta3 $out/bin/xdelta3
+    install -D -m644 xdelta3.1 $out/share/man/man1/xdelta3.1
+  '';
+
+  meta = with lib; {
+    description = "Binary differential compression in VCDIFF (RFC 3284) format";
+    longDescription = ''
+      xdelta is a command line program for delta encoding, which generates two
+      file differences. This is similar to diff and patch, but it is targeted
+      for binary files and does not generate human readable output.
+    '';
+    homepage = "http://xdelta.org/";
+    license = licenses.gpl2Plus;
+    mainProgram = "xdelta3";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/xz/default.nix b/nixpkgs/pkgs/tools/compression/xz/default.nix
new file mode 100644
index 000000000000..9e195a0aa7db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/xz/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchurl
+, enableStatic ? stdenv.hostPlatform.isStatic
+, writeScript
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "xz";
+  version = "5.4.6";
+
+  src = fetchurl {
+    url = "https://github.com/tukaani-project/xz/releases/download/v${version}/xz-${version}.tar.bz2";
+    sha256 = "sha256-kThRsnTo4dMXgeyUnxwj6NvPDs9uc6JDbcIXad0+b0k=";
+  };
+
+  strictDeps = true;
+  outputs = [ "bin" "dev" "out" "man" "doc" ];
+
+  configureFlags = lib.optional enableStatic "--disable-shared";
+
+  enableParallelBuilding = true;
+  doCheck = true;
+
+  preCheck = ''
+    # Tests have a /bin/sh dependency...
+    patchShebangs tests
+  '';
+
+  # In stdenv-linux, prevent a dependency on bootstrap-tools.
+  preConfigure = "CONFIG_SHELL=/bin/sh";
+
+  postInstall = "rm -rf $out/share/doc";
+
+  passthru = {
+    updateScript = writeScript "update-xz" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -eu -o pipefail
+
+      # Expect the text in format of '>xz-5.2.6.tar.bz2</a>'
+      # We pick first match where a stable release goes first.
+      new_version="$(curl -s https://tukaani.org/xz/ |
+          pcregrep -o1 '>xz-([0-9.]+)[.]tar[.]bz2</a>' |
+          head -n1)"
+      update-source-version ${pname} "$new_version"
+    '';
+  };
+
+  meta = with lib; {
+    homepage = "https://tukaani.org/xz/";
+    description = "A general-purpose data compression software, successor of LZMA";
+
+    longDescription =
+      '' XZ Utils is free general-purpose data compression software with high
+         compression ratio.  XZ Utils were written for POSIX-like systems,
+         but also work on some not-so-POSIX systems.  XZ Utils are the
+         successor to LZMA Utils.
+
+         The core of the XZ Utils compression code is based on LZMA SDK, but
+         it has been modified quite a lot to be suitable for XZ Utils.  The
+         primary compression algorithm is currently LZMA2, which is used
+         inside the .xz container format.  With typical files, XZ Utils
+         create 30 % smaller output than gzip and 15 % smaller output than
+         bzip2.
+      '';
+
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
+    maintainers = with maintainers; [ sander ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/zdelta/default.nix b/nixpkgs/pkgs/tools/compression/zdelta/default.nix
new file mode 100644
index 000000000000..b30a43f33c13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zdelta/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "zdelta";
+  version = "2.1";
+
+  src = fetchurl {
+    url = "https://web.archive.org/web/20160316212948/http://cis.poly.edu/zdelta/downloads/zdelta-2.1.tar.gz";
+    sha256 = "sha256-WiQKWxJkINIwRBcdiuVLMDiupQ8gOsiXOEZvHDa5iFg=";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -p zdc zdu $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://web.archive.org/web/20160316212948/http://cis.poly.edu/zdelta/";
+    platforms = platforms.all;
+    license = licenses.zlib;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/zfp/default.nix b/nixpkgs/pkgs/tools/compression/zfp/default.nix
new file mode 100644
index 000000000000..8df75d48eb56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zfp/default.nix
@@ -0,0 +1,57 @@
+{ cmake, cudatoolkit, fetchFromGitHub, gfortran, lib, llvmPackages, python3Packages, stdenv
+, config
+, enableCfp ? true
+, enableCuda ? config.cudaSupport
+, enableFortran ? builtins.elem stdenv.hostPlatform.system gfortran.meta.platforms
+, enableOpenMP ? true
+, enablePython ? true
+, enableUtilities ? true }:
+
+stdenv.mkDerivation rec {
+  pname = "zfp";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "LLNL";
+    repo = "zfp";
+    rev = version;
+    sha256 = "sha256-iZxA4lIviZQgaeHj6tEQzEFSKocfgpUyf4WvUykb9qk=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = lib.optional enableCuda cudatoolkit
+    ++ lib.optional enableFortran gfortran
+    ++ lib.optional enableOpenMP llvmPackages.openmp
+    ++ lib.optionals enablePython (with python3Packages; [ cython numpy python ]);
+
+  # compile CUDA code for all extant GPUs so the binary will work with any GPU
+  # and driver combination. to be ultimately solved upstream:
+  # https://github.com/LLNL/zfp/issues/178
+  # NB: not in cmakeFlags due to https://github.com/NixOS/nixpkgs/issues/114044
+  preConfigure = lib.optionalString enableCuda ''
+    cmakeFlagsArray+=(
+      "-DCMAKE_CUDA_FLAGS=-gencode=arch=compute_52,code=sm_52 -gencode=arch=compute_60,code=sm_60 -gencode=arch=compute_61,code=sm_61 -gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_75,code=sm_75 -gencode=arch=compute_80,code=sm_80 -gencode=arch=compute_86,code=sm_86 -gencode=arch=compute_87,code=sm_87 -gencode=arch=compute_86,code=compute_86"
+    )
+  '';
+
+  cmakeFlags = [
+  ] ++ lib.optional enableCfp "-DBUILD_CFP=ON"
+    ++ lib.optional enableCuda "-DZFP_WITH_CUDA=ON"
+    ++ lib.optional enableFortran "-DBUILD_ZFORP=ON"
+    ++ lib.optional enableOpenMP "-DZFP_WITH_OPENMP=ON"
+    ++ lib.optional enablePython "-DBUILD_ZFPY=ON"
+    ++ ([ "-DBUILD_UTILITIES=${if enableUtilities then "ON" else "OFF"}" ]);
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://computing.llnl.gov/projects/zfp";
+    description = "Library for random-access compression of floating-point arrays";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.spease ];
+    # 64-bit only
+    platforms = platforms.aarch64 ++ platforms.x86_64;
+    mainProgram = "zfp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/zopfli/default.nix b/nixpkgs/pkgs/tools/compression/zopfli/default.nix
new file mode 100644
index 000000000000..2c844cffc21b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zopfli/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "zopfli";
+  version = "1.0.3";
+  outputs = [ "out" "lib" "dev" ];
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "zopfli";
+    rev = "${pname}-${version}";
+    name = "${pname}-${version}-src";
+    sha256 = "0dr8n4j5nj2h9n208jns56wglw59gg4qm3s7c6y3hs75d0nnkhm4";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [ "-DBUILD_SHARED_LIBS=ON" "-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" ];
+
+  postInstall = ''
+    install -Dm444 -t $out/share/doc/zopfli ../README*
+    cp $src/src/zopfli/*.h $dev/include/
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Very good, but slow, deflate or zlib compression";
+    longDescription = ''
+      Zopfli Compression Algorithm is a compression library programmed
+      in C to perform very good, but slow, deflate or zlib compression.
+
+      This library can only compress, not decompress. Existing zlib or
+      deflate libraries can decompress the data.
+    '';
+    platforms = platforms.unix;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bobvanderlinden edef ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/zstd/default.nix b/nixpkgs/pkgs/tools/compression/zstd/default.nix
new file mode 100644
index 000000000000..4ba37c1502f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zstd/default.nix
@@ -0,0 +1,129 @@
+{ lib, stdenv, fetchFromGitHub, cmake, bash, gnugrep
+, fixDarwinDylibNames
+, file
+, legacySupport ? false
+, static ? stdenv.hostPlatform.isStatic # generates static libraries *only*
+, enableStatic ? static
+# these need to be ran on the host, thus disable when cross-compiling
+, buildContrib ? stdenv.hostPlatform == stdenv.buildPlatform
+, doCheck ? stdenv.hostPlatform == stdenv.buildPlatform
+, nix-update-script
+
+# for passthru.tests
+, libarchive
+, rocksdb
+, arrow-cpp
+, libzip
+, curl
+, python3Packages
+, haskellPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zstd";
+  version = "1.5.5";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "zstd";
+    rev = "v${version}";
+    sha256 = "sha256-tHHHIsQU7vJySrVhJuMKUSq11MzkmC+Pcsj00uFJdnQ=";
+  };
+
+  nativeBuildInputs = [ cmake ]
+   ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
+  buildInputs = lib.optional stdenv.hostPlatform.isUnix bash;
+
+  patches = [
+    # This patches makes sure we do not attempt to use the MD5 implementation
+    # of the host platform when running the tests
+    ./playtests-darwin.patch
+  ];
+
+  postPatch = lib.optionalString (!static) ''
+    substituteInPlace build/cmake/CMakeLists.txt \
+      --replace 'message(SEND_ERROR "You need to build static library to build tests")' ""
+    substituteInPlace build/cmake/tests/CMakeLists.txt \
+      --replace 'libzstd_static' 'libzstd_shared'
+    sed -i \
+      "1aexport ${lib.optionalString stdenv.isDarwin "DY"}LD_LIBRARY_PATH=$PWD/build_/lib" \
+      tests/playTests.sh
+  '';
+
+  cmakeFlags = lib.attrsets.mapAttrsToList
+    (name: value: "-DZSTD_${name}:BOOL=${if value then "ON" else "OFF"}") {
+      BUILD_SHARED = !static;
+      BUILD_STATIC = enableStatic;
+      BUILD_CONTRIB = buildContrib;
+      PROGRAMS_LINK_SHARED = !static;
+      LEGACY_SUPPORT = legacySupport;
+      BUILD_TESTS = doCheck;
+    };
+
+  cmakeDir = "../build/cmake";
+  dontUseCmakeBuildDir = true;
+  preConfigure = ''
+    mkdir -p build_ && cd $_
+  '';
+
+  nativeCheckInputs = [ file ];
+  inherit doCheck;
+  checkPhase = ''
+    runHook preCheck
+    # Patch shebangs for playTests
+    patchShebangs ../programs/zstdgrep
+    ctest -R playTests # The only relatively fast test.
+    runHook postCheck
+  '';
+
+  preInstall = ''
+    mkdir -p $bin/bin
+    substituteInPlace ../programs/zstdgrep \
+      --replace ":-grep" ":-${gnugrep}/bin/grep" \
+      --replace ":-zstdcat" ":-$bin/bin/zstdcat"
+
+    substituteInPlace ../programs/zstdless \
+      --replace "zstdcat" "$bin/bin/zstdcat"
+  '' + lib.optionalString buildContrib (
+    ''
+      cp contrib/pzstd/pzstd $bin/bin/pzstd
+    '' + lib.optionalString stdenv.isDarwin ''
+      install_name_tool -change @rpath/libzstd.1.dylib $out/lib/libzstd.1.dylib $bin/bin/pzstd
+    ''
+  );
+
+  outputs = [ "bin" "dev" ]
+    ++ lib.optional stdenv.hostPlatform.isUnix "man"
+    ++ [ "out" ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = {
+      inherit libarchive rocksdb arrow-cpp;
+      libzip = libzip.override { withZstd = true; };
+      curl = curl.override { zstdSupport = true; };
+      python-zstd = python3Packages.zstd;
+      haskell-zstd = haskellPackages.zstd;
+      haskell-hs-zstd = haskellPackages.hs-zstd;
+    };
+  };
+
+  meta = with lib; {
+    description = "Zstandard real-time compression algorithm";
+    longDescription = ''
+      Zstd, short for Zstandard, is a fast lossless compression algorithm,
+      targeting real-time compression scenarios at zlib-level compression
+      ratio. Zstd can also offer stronger compression ratio at the cost of
+      compression speed. Speed/ratio trade-off is configurable by small
+      increment, to fit different situations. Note however that decompression
+      speed is preserved and remain roughly the same at all settings, a
+      property shared by most LZ compression algorithms, such as zlib.
+    '';
+    homepage = "https://facebook.github.io/zstd/";
+    changelog = "https://github.com/facebook/zstd/blob/v${version}/CHANGELOG";
+    license = with licenses; [ bsd3 ]; # Or, at your opinion, GPL-2.0-only.
+
+    platforms = platforms.all;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/zstd/playtests-darwin.patch b/nixpkgs/pkgs/tools/compression/zstd/playtests-darwin.patch
new file mode 100644
index 000000000000..454489a24a12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zstd/playtests-darwin.patch
@@ -0,0 +1,40 @@
+--- a/tests/playTests.sh
++++ b/tests/playTests.sh
+@@ -112,29 +112,19 @@ case "$OS" in
+ esac
+ 
+ case "$UNAME" in
+-  Darwin) MD5SUM="md5 -r" ;;
+-  FreeBSD) MD5SUM="gmd5sum" ;;
+-  NetBSD) MD5SUM="md5 -n" ;;
+-  OpenBSD) MD5SUM="md5" ;;
+   *) MD5SUM="md5sum" ;;
+ esac
+ 
+ MTIME="stat -c %Y"
+-case "$UNAME" in
+-    Darwin | FreeBSD | OpenBSD | NetBSD) MTIME="stat -f %m" ;;
+-esac
+ 
+ assertSameMTime() {
+     MT1=$($MTIME "$1")
+     MT2=$($MTIME "$2")
+     echo MTIME $MT1 $MT2
+     [ "$MT1" = "$MT2" ] || die "mtime on $1 doesn't match mtime on $2 ($MT1 != $MT2)"
+ }
+ 
+ GET_PERMS="stat -c %a"
+-case "$UNAME" in
+-    Darwin | FreeBSD | OpenBSD | NetBSD) GET_PERMS="stat -f %Lp" ;;
+-esac
+ 
+ assertFilePermissions() {
+     STAT1=$($GET_PERMS "$1")
+@@ -967,7 +957,6 @@ $MD5SUM dirTestDict/* > tmph1
+ zstd -f --rm dirTestDict/* -D tmpDictC
+ zstd -d --rm dirTestDict/*.zst -D tmpDictC  # note : use internal checksum by default
+ case "$UNAME" in
+-  Darwin) println "md5sum -c not supported on OS-X : test skipped" ;;  # not compatible with OS-X's md5
+   *) $MD5SUM -c tmph1 ;;
+ esac
+ rm -rf dirTestDict
diff --git a/nixpkgs/pkgs/tools/compression/zsync/default.nix b/nixpkgs/pkgs/tools/compression/zsync/default.nix
new file mode 100644
index 000000000000..0de21cb9c736
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zsync/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "zsync";
+  version = "0.6.2";
+
+  src = fetchurl {
+    url = "http://zsync.moria.org.uk/download/${pname}-${version}.tar.bz2";
+    sha256 = "1wjslvfy76szf0mgg2i9y9q30858xyjn6v2acc24zal76d1m778b";
+  };
+
+  makeFlags = [ "AR=${stdenv.cc.bintools.targetPrefix}ar" ];
+
+  meta = with lib; {
+    homepage = "http://zsync.moria.org.uk/";
+    description = "File distribution system using the rsync algorithm";
+    license = licenses.artistic2;
+    maintainers = with maintainers; [ viric ];
+    platforms = with platforms; all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/dotool/default.nix b/nixpkgs/pkgs/tools/dotool/default.nix
new file mode 100644
index 000000000000..61d0667b35a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/dotool/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGoModule
+, fetchFromSourcehut
+, libxkbcommon
+, pkg-config
+}:
+
+buildGoModule rec {
+  pname = "dotool";
+  version = "1.3";
+
+  src = fetchFromSourcehut {
+    owner = "~geb";
+    repo = "dotool";
+    rev = version;
+    hash = "sha256-z0fQ+qenHjtoriYSD2sOjEvfLVtZcMJbvnjKZFRSsMA=";
+  };
+
+  vendorHash = "sha256-v0uoG9mNaemzhQAiG85RequGjkSllPd4UK2SrLjfm7A=";
+
+  # uses nix store path for the dotool binary
+  # also replaces /bin/echo with echo
+  patches = [ ./fix-paths.patch ];
+
+  postPatch = ''
+    substituteInPlace ./dotoold --replace "@dotool@" "$out/bin/dotool"
+  '';
+
+  buildInputs = [ libxkbcommon ];
+  nativeBuildInputs = [ pkg-config ];
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    cp ./dotoold ./dotoolc $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Command to simulate input anywhere";
+    homepage = "https://git.sr.ht/~geb/dotool";
+    changelog = "https://git.sr.ht/~geb/dotool/tree/${version}/item/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/dotool/fix-paths.patch b/nixpkgs/pkgs/tools/dotool/fix-paths.patch
new file mode 100644
index 000000000000..cedac77974de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/dotool/fix-paths.patch
@@ -0,0 +1,33 @@
+diff --git a/dotoolc b/dotoolc
+index e2f7bba..6d1879e 100755
+--- a/dotoolc
++++ b/dotoolc
+@@ -7,7 +7,7 @@ is $DOTOOL_PIPE else /tmp/dotool-pipe.' >&2
+ fi
+ 
+ fifo_being_read(){
+-	[ -p "$1" ] && /bin/echo 1<>"$1" >"$1"
++	[ -p "$1" ] && echo 1<>"$1" >"$1"
+ }
+ 
+ p="${DOTOOL_PIPE:-/tmp/dotool-pipe}"
+diff --git a/dotoold b/dotoold
+index d2d39a3..e46129c 100755
+--- a/dotoold
++++ b/dotoold
+@@ -7,7 +7,7 @@ for the pipe is $DOTOOL_PIPE else /tmp/dotool-pipe.' >&2
+ fi
+ 
+ fifo_being_read(){
+-	[ -p "$1" ] && /bin/echo 1<>"$1" >"$1"
++	[ -p "$1" ] && echo 1<>"$1" >"$1"
+ }
+ 
+ p="${DOTOOL_PIPE:-/tmp/dotool-pipe}"
+@@ -20,5 +20,5 @@ fi
+ rm -f -- "$p" || exit 1
+ trap 'rm -f -- "$p"; pkill -P $$; trap - EXIT; exit' EXIT INT TERM HUP
+ mkfifo -m 660 "$p" || exit 1
+-dotool <> "$p" &
++@dotool@ <> "$p" &
+ wait
diff --git a/nixpkgs/pkgs/tools/filesystems/9pfs/default.nix b/nixpkgs/pkgs/tools/filesystems/9pfs/default.nix
new file mode 100644
index 000000000000..7b652bd68aa0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/9pfs/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, fuse, gitUpdater }:
+
+stdenv.mkDerivation rec {
+  pname = "9pfs";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "ftrvxmtrx";
+    repo = "9pfs";
+    rev = version;
+    sha256 = "sha256-ywWG/H2ilt36mjlDSgIzYpardCFXpmbLiml6wy47XuA=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace "pkg-config" "$PKG_CONFIG"
+  '';
+
+  makeFlags = [ "BIN=$(out)/bin" "MAN=$(out)/share/man/man1" ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ fuse ];
+  enableParallelBuilding = true;
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = {
+    homepage = "https://github.com/ftrvxmtrx/9pfs";
+    description = "FUSE-based client of the 9P network filesystem protocol";
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = lib.platforms.unix;
+    license = with lib.licenses; [ lpl-102 bsd2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/aefs/default.nix b/nixpkgs/pkgs/tools/filesystems/aefs/default.nix
new file mode 100644
index 000000000000..5364b62c29cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/aefs/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, fuse
+, git
+}:
+
+stdenv.mkDerivation {
+  pname = "aefs";
+  version = "unstable-2015-05-06";
+
+  src = fetchFromGitHub {
+    owner = "edolstra";
+    repo = "aefs";
+    rev = "e7a9bf8cfa9166668fe1514cc1afd31fc4e10e9a";
+    hash = "sha256-a3YQWxJ7+bYhf1W1kdIykV8U1R4dcDZJ7K3NvNxbF0s=";
+  };
+
+  # autoconf's AC_CHECK_HEADERS and AC_CHECK_LIBS fail to detect libfuse on
+  # Darwin if FUSE_USE_VERSION isn't set at configure time.
+  #
+  # NOTE: Make sure the value of FUSE_USE_VERSION specified here matches the
+  # actual version used in the source code:
+  #
+  #     $ tar xf "$(nix-build -A aefs.src)"
+  #     $ grep -R FUSE_USE_VERSION
+  configureFlags = lib.optional stdenv.isDarwin "CPPFLAGS=-DFUSE_USE_VERSION=26";
+
+  nativeBuildInputs = [ autoreconfHook git ];
+
+  buildInputs = [ fuse ];
+
+  meta = with lib; {
+    homepage = "https://github.com/edolstra/aefs";
+    description = "A cryptographic filesystem implemented in userspace using FUSE";
+    maintainers = [ maintainers.eelco ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/afpfs-ng/default.nix b/nixpkgs/pkgs/tools/filesystems/afpfs-ng/default.nix
new file mode 100644
index 000000000000..02dd1a7aafe0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/afpfs-ng/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, fuse, readline, libgcrypt, gmp }:
+
+stdenv.mkDerivation {
+  pname = "afpfs-ng";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner  = "simonvetter";
+    repo   = "afpfs-ng";
+    rev    = "f6e24eb73c9283732c3b5d9cb101a1e2e4fade3e";
+    sha256 = "125jx1rsqkiifcffyjb05b2s36rllckdgjaf1bay15k9gzhwwldz";
+  };
+
+  # Add workaround for -fno-common toolchains like upstream gcc-10 to
+  # avoid build failures like:
+  #   ld: afpcmd-cmdline_main.o:/build/source/cmdline/cmdline_afp.h:4: multiple definition of
+  #    `full_url'; afpcmd-cmdline_afp.o:/build/source/cmdline/cmdline_afp.c:27: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  buildInputs = [ fuse readline libgcrypt gmp ];
+
+  meta = with lib; {
+    homepage    = "https://github.com/simonvetter/afpfs-ng";
+    description = "A client implementation of the Apple Filing Protocol";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ rnhmjoj ];
+    platforms   = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/afsctool/default.nix b/nixpkgs/pkgs/tools/filesystems/afsctool/default.nix
new file mode 100644
index 000000000000..303ec05bf834
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/afsctool/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, cmake
+, git
+, zlib
+, sparsehash
+, CoreServices
+}:
+
+stdenv.mkDerivation rec {
+  pname = "afsctool";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "RJVB";
+    repo = pname;
+    rev = version;
+    hash = "sha256-rqca7gpH46hk4MEPMHqYnteYJnGpLS/gu4XP7xWqDzo=";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake git ];
+  buildInputs = [ zlib sparsehash CoreServices ];
+
+  meta = with lib; {
+    description = "Utility that allows end-users to leverage HFS+/APFS compression";
+    license = licenses.unfree;
+    maintainers = [ maintainers.viraptor ];
+    platforms = platforms.darwin;
+    homepage = "https://github.com/RJVB/afsctool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/android-file-transfer/darwin-dont-vendor-dependencies.patch b/nixpkgs/pkgs/tools/filesystems/android-file-transfer/darwin-dont-vendor-dependencies.patch
new file mode 100644
index 000000000000..6e0f38582cc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/android-file-transfer/darwin-dont-vendor-dependencies.patch
@@ -0,0 +1,21 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8b05ab0..81e31f5 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -236,16 +236,6 @@ endif()
+
+ if (''${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ 	set(MACOSX_BUNDLE_LIBS)
+-	if (OPENSSL_FOUND)
+-		list(APPEND MACOSX_BUNDLE_LIBS /usr/local/opt/openssl@1.1/lib/libcrypto.1.1.dylib)
+-	endif()
+-	if (TAGLIB_FOUND)
+-		list(APPEND MACOSX_BUNDLE_LIBS /usr/local/opt/taglib/lib/libtag.1.dylib)
+-	endif()
+-	if (FUSE_FOUND)
+-		list(APPEND MACOSX_BUNDLE_LIBS /usr/local/lib/libosxfuse.2.dylib)
+-	endif()
+-
+ 	set(MACOSX_BUNDLE_LIBS_INSTALL)
+ 	set(MACOSX_BUNDLE_ROOT_DIR "''${CMAKE_INSTALL_PREFIX}/''${CMAKE_PROJECT_NAME}.app")
+ 	message(STATUS "bundle root dir: ''${MACOSX_BUNDLE_ROOT_DIR}")
diff --git a/nixpkgs/pkgs/tools/filesystems/android-file-transfer/default.nix b/nixpkgs/pkgs/tools/filesystems/android-file-transfer/default.nix
new file mode 100644
index 000000000000..b5fe1a4e85ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/android-file-transfer/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, fuse
+, readline
+, pkg-config
+, qtbase
+, qttools
+, wrapQtAppsHook }:
+
+mkDerivation rec {
+  pname = "android-file-transfer";
+  version = "4.3";
+
+  src = fetchFromGitHub {
+    owner = "whoozle";
+    repo = "android-file-transfer-linux";
+    rev = "v${version}";
+    sha256 = "sha256-UOARMtOnG6tekmOsIWRZbl2y32mR0kPD6w7IHRG8VsU=";
+  };
+
+  patches = [ ./darwin-dont-vendor-dependencies.patch ];
+
+  nativeBuildInputs = [ cmake readline pkg-config wrapQtAppsHook ];
+  buildInputs = [ fuse qtbase qttools ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir $out/Applications
+    mv $out/*.app $out/Applications
+  '';
+
+  meta = with lib; {
+    description = "Reliable MTP client with minimalistic UI";
+    homepage = "https://whoozle.github.io/android-file-transfer-linux/";
+    license = licenses.lgpl21Plus;
+    maintainers = [ maintainers.xaverdh ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/apfs-fuse/default.nix b/nixpkgs/pkgs/tools/filesystems/apfs-fuse/default.nix
new file mode 100644
index 000000000000..5881d361c549
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/apfs-fuse/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, fuse, fuse3, bzip2, zlib, attr, cmake }:
+
+stdenv.mkDerivation {
+  pname = "apfs-fuse";
+  version = "unstable-2023-03-12";
+
+  src = fetchFromGitHub {
+    owner  = "sgan81";
+    repo   = "apfs-fuse";
+    rev    = "66b86bd525e8cb90f9012543be89b1f092b75cf3";
+    hash = "sha256-uYAlqnQp0K880XEWuH1548DUA3ii53+hfsuh/T3Vwzg=";
+    fetchSubmodules = true;
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace CMakeLists.txt \
+      --replace "/usr/local/lib/libosxfuse.dylib" "fuse"
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    (if stdenv.isDarwin then fuse else fuse3)
+    bzip2
+    zlib
+  ] ++ lib.optional stdenv.isLinux attr;
+
+  cmakeFlags = lib.optional stdenv.isDarwin "-DUSE_FUSE3=OFF";
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-DUSE_FUSE2";
+
+  postFixup = ''
+    ln -s $out/bin/apfs-fuse $out/bin/mount.fuse.apfs-fuse
+  '';
+
+  meta = with lib; {
+    homepage    = "https://github.com/sgan81/apfs-fuse";
+    description = "FUSE driver for APFS (Apple File System)";
+    license     = licenses.gpl2Plus;
+    mainProgram = "apfs-fuse";
+    maintainers = with maintainers; [ ealasu ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/archivemount/default.nix b/nixpkgs/pkgs/tools/filesystems/archivemount/default.nix
new file mode 100644
index 000000000000..22e41611aef8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/archivemount/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl, pkg-config, fuse, libarchive }:
+
+stdenv.mkDerivation rec {
+  pname = "archivemount";
+  version = "0.9.1";
+
+  src = fetchurl {
+    url = "https://www.cybernoia.de/software/archivemount/archivemount-${version}.tar.gz";
+    sha256 = "1cy5b6qril9c3ry6fv7ir87s8iyy5vxxmbyx90dm86fbra0vjaf5";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ fuse libarchive ];
+
+  meta = {
+    description = "Gateway between FUSE and libarchive: allows mounting of cpio, .tar.gz, .tar.bz2 archives";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/avfs/default.nix b/nixpkgs/pkgs/tools/filesystems/avfs/default.nix
new file mode 100644
index 000000000000..a59c2695c20a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/avfs/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, pkg-config, fuse, xz }:
+
+stdenv.mkDerivation rec {
+  pname = "avfs";
+  version = "1.1.5";
+  src = fetchurl {
+    url = "mirror://sourceforge/avf/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-rZ87ZBBNYAmgWMcPZwiPeZMJv4UZsUsVSvrSJqRScs8=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ fuse xz ];
+
+  configureFlags = [
+    "--enable-library"
+    "--enable-fuse"
+  ];
+
+  meta = {
+    homepage = "https://avf.sourceforge.net/";
+    description = "Virtual filesystem that allows browsing of compressed files";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2Only;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/bashmount/default.nix b/nixpkgs/pkgs/tools/filesystems/bashmount/default.nix
new file mode 100644
index 000000000000..dbd573d5f012
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bashmount/default.nix
@@ -0,0 +1,38 @@
+{lib, stdenv, fetchFromGitHub}:
+
+stdenv.mkDerivation rec {
+  pname = "bashmount";
+  version = "4.3.2";
+
+  src = fetchFromGitHub {
+    owner = "jamielinux";
+    repo = "bashmount";
+    rev = version;
+    sha256 = "1irw47s6i1qwxd20cymzlfw5sv579cw877l27j3p66qfhgadwxrl";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bashmount $out/bin
+
+    mkdir -p $out/etc
+    cp bashmount.conf $out/etc
+
+    mkdir -p $out/share/man/man1
+    gzip -c -9 bashmount.1 > bashmount.1.gz
+    cp bashmount.1.gz $out/share/man/man1
+
+    mkdir -p $out/share/doc/bashmount
+    cp COPYING $out/share/doc/bashmount
+    cp NEWS    $out/share/doc/bashmount
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jamielinux/bashmount";
+    description = "A menu-driven bash script for the management of removable media with udisks";
+    mainProgram = "bashmount";
+    maintainers = [ maintainers.koral ];
+    license = licenses.gpl2;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch b/nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch
new file mode 100644
index 000000000000..c6cf79785b73
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch
@@ -0,0 +1,52 @@
+This patch does two things:
+1) Drops probe-bcache, so now new util-linux detecting functionality is used.
+2) Drops bcache-register, using kmod (built in udev) and moving registering device
+   into rule using 'sh'.
+This reduces things that need to be present in initrd, replacing them with already
+existing functionality and reducing overall initrd size.
+
+diff --git a/69-bcache.rules b/69-bcache.rules
+index 5d28e70..6a52893 100644
+--- a/69-bcache.rules
++++ b/69-bcache.rules
+@@ -10,15 +10,11 @@ KERNEL=="fd*|sr*", GOTO="bcache_end"
+ # It recognised bcache (util-linux 2.24+)
+ ENV{ID_FS_TYPE}=="bcache", GOTO="bcache_backing_found"
+ # It recognised something else; bail
+-ENV{ID_FS_TYPE}=="?*", GOTO="bcache_backing_end"
+-
+-# Backing devices: scan, symlink, register
+-IMPORT{program}="probe-bcache -o udev $tempnode"
+-ENV{ID_FS_TYPE}!="bcache", GOTO="bcache_backing_end"
+-ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
++GOTO="bcache_backing_end"
+ 
+ LABEL="bcache_backing_found"
+-RUN+="bcache-register $tempnode"
++RUN{builtin}+="kmod load bcache"
++RUN+="/bin/sh -c 'echo $tempnode > /sys/fs/bcache/register_quiet'"
+ LABEL="bcache_backing_end"
+ 
+ # Cached devices: symlink
+diff --git a/Makefile b/Makefile
+index 3f8d87b..15638a7 100644
+--- a/Makefile
++++ b/Makefile
+@@ -9,7 +9,7 @@ all: make-bcache probe-bcache bcache-super-show
+ 
+ install: make-bcache probe-bcache bcache-super-show
+ 	$(INSTALL) -m0755 make-bcache bcache-super-show	$(DESTDIR)${PREFIX}/sbin/
+-	$(INSTALL) -m0755 probe-bcache bcache-register		$(DESTDIR)$(UDEVLIBDIR)/
++#	$(INSTALL) -m0755 probe-bcache bcache-register		$(DESTDIR)$(UDEVLIBDIR)/
+ 	$(INSTALL) -m0644 69-bcache.rules	$(DESTDIR)$(UDEVLIBDIR)/rules.d/
+ 	$(INSTALL) -m0644 -- *.8 $(DESTDIR)${PREFIX}/share/man/man8/
+ 	$(INSTALL) -D -m0755 initramfs/hook	$(DESTDIR)/usr/share/initramfs-tools/hooks/bcache
+diff --git a/bcache-register b/bcache-register
+index 9b592bc..75b4faf 100755
+--- a/bcache-register
++++ b/bcache-register
+@@ -1,4 +1,3 @@
+ #!/bin/sh
+-/sbin/modprobe -qba bcache
+ test -f /sys/fs/bcache/register_quiet && echo "$1" > /sys/fs/bcache/register_quiet
+ 
diff --git a/nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix b/nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix
new file mode 100644
index 000000000000..58f6a05992e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, util-linux, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "bcache-tools";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "g2p";
+    repo = "bcache-tools";
+    rev = "v${version}";
+    hash = "sha256-Ors2xXRrVTf8Cq3BYnSVSfJy/nyGjT5BGLSNpxOcHR4=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ util-linux ];
+
+  # * Remove broken install rules (they ignore $PREFIX) for stuff we don't need
+  #   anyway (it's distro specific stuff).
+  # * Fixup absolute path to modprobe.
+  prePatch = ''
+    sed -e "/INSTALL.*initramfs\/hook/d" \
+        -e "/INSTALL.*initcpio\/install/d" \
+        -e "/INSTALL.*dracut\/module-setup.sh/d" \
+        -e "s/pkg-config/$PKG_CONFIG/" \
+        -i Makefile
+  '';
+
+  patches = [
+    ./bcache-udev-modern.patch
+    ./fix-static.patch
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "UDEVLIBDIR=${placeholder "out"}/lib/udev/"
+  ];
+
+  preInstall = ''
+    mkdir -p "$out/sbin" "$out/lib/udev/rules.d" "$out/share/man/man8"
+  '';
+
+  meta = with lib; {
+    description = "User-space tools required for bcache (Linux block layer cache)";
+    longDescription = ''
+      Bcache is a Linux kernel block layer cache. It allows one or more fast
+      disk drives such as flash-based solid state drives (SSDs) to act as a
+      cache for one or more slower hard disk drives.
+
+      This package contains the required user-space tools.
+
+      User documentation is in Documentation/bcache.txt in the Linux kernel
+      tree.
+    '';
+    homepage = "https://bcache.evilpiepirate.org/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch b/nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch
new file mode 100644
index 000000000000..e5dd2df5299d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch
@@ -0,0 +1,22 @@
+diff --git a/bcache.c b/bcache.c
+index 8f37445..79806d8 100644
+--- a/bcache.c
++++ b/bcache.c
+@@ -26,7 +26,7 @@
+  * x^7 + x^4 + x + 1
+ */
+ 
+-static const uint64_t crc_table[256] = {
++const uint64_t crc_table[256] = {
+ 	0x0000000000000000ULL, 0x42F0E1EBA9EA3693ULL, 0x85E1C3D753D46D26ULL,
+ 	0xC711223CFA3E5BB5ULL, 0x493366450E42ECDFULL, 0x0BC387AEA7A8DA4CULL,
+ 	0xCCD2A5925D9681F9ULL, 0x8E224479F47CB76AULL, 0x9266CC8A1C85D9BEULL,
+@@ -115,7 +115,7 @@ static const uint64_t crc_table[256] = {
+ 	0x9AFCE626CE85B507ULL
+ };
+ 
+-inline uint64_t crc64(const void *_data, size_t len)
++uint64_t crc64(const void *_data, size_t len)
+ {
+ 	uint64_t crc = 0xFFFFFFFFFFFFFFFFULL;
+ 	const unsigned char *data = _data;
diff --git a/nixpkgs/pkgs/tools/filesystems/bcachefs-tools/Cargo.lock b/nixpkgs/pkgs/tools/filesystems/bcachefs-tools/Cargo.lock
new file mode 100644
index 000000000000..091f76071a2b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bcachefs-tools/Cargo.lock
@@ -0,0 +1,871 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c677ab05e09154296dd37acecd46420c17b9713e8366facafa8fc0885167cf4c"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bcachefs-rust"
+version = "0.3.1"
+dependencies = [
+ "anyhow",
+ "atty",
+ "bch_bindgen",
+ "byteorder",
+ "chrono",
+ "clap",
+ "clap_complete",
+ "colored",
+ "either",
+ "errno 0.2.8",
+ "gag",
+ "getset",
+ "libc",
+ "log",
+ "parse-display",
+ "rpassword",
+ "udev",
+ "uuid",
+]
+
+[[package]]
+name = "bch_bindgen"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "bindgen",
+ "bitfield",
+ "bitflags 1.3.2",
+ "byteorder",
+ "chrono",
+ "colored",
+ "gag",
+ "libc",
+ "memoffset",
+ "paste",
+ "pkg-config",
+ "udev",
+ "uuid",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.64.0"
+source = "git+https://evilpiepirate.org/git/rust-bindgen.git#f773267b090bf16b9e8375fcbdcd8ba5e88806a8"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bitfield"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+]
+
+[[package]]
+name = "clap"
+version = "4.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb690e81c7840c0d7aade59f242ea3b41b9bc27bcd5997890e7702ae4b32e487"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ed2e96bc16d8d740f6f48d663eddf4b8a0983e79210fd55479b7bcd0a69860e"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc443334c81a804575546c5a8a79b4913b50e28d69232903604cada1de817ce"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colored"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6"
+dependencies = [
+ "is-terminal",
+ "lazy_static",
+ "windows-sys",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "filedescriptor"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7199d965852c3bac31f779ef99cbb4537f80e952e2d6aa0ffeb30cce00f4f46e"
+dependencies = [
+ "libc",
+ "thiserror",
+ "winapi",
+]
+
+[[package]]
+name = "gag"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a713bee13966e9fbffdf7193af71d54a6b35a0bb34997cd6c9519ebeb5005972"
+dependencies = [
+ "filedescriptor",
+ "tempfile",
+]
+
+[[package]]
+name = "getset"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "rustix 0.38.25",
+ "windows-sys",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "libudev-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "parse-display"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd87725635cbae7fe960f91f55a114ed104e637790317cc8d9197ea16b058010"
+dependencies = [
+ "lazy_static",
+ "parse-display-derive",
+ "regex",
+]
+
+[[package]]
+name = "parse-display-derive"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc52b391380aa8550348736a356bf028f5469391d580533a566e97543f55e813"
+dependencies = [
+ "lazy_static",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "regex-syntax 0.6.29",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "rpassword"
+version = "4.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.37.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno 0.3.7",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno 0.3.7",
+ "libc",
+ "linux-raw-sys 0.4.11",
+ "windows-sys",
+]
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix 0.38.25",
+ "windows-sys",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+dependencies = [
+ "rustix 0.37.27",
+ "windows-sys",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "udev"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebdbbd670373442a12fe9ef7aeb53aec4147a5a27a00bbc3ab639f08f48191a"
+dependencies = [
+ "libc",
+ "libudev-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
diff --git a/nixpkgs/pkgs/tools/filesystems/bcachefs-tools/default.nix b/nixpkgs/pkgs/tools/filesystems/bcachefs-tools/default.nix
new file mode 100644
index 000000000000..36566dc71002
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bcachefs-tools/default.nix
@@ -0,0 +1,123 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, libuuid
+, libsodium
+, keyutils
+, liburcu
+, zlib
+, libaio
+, zstd
+, lz4
+, attr
+, udev
+, nixosTests
+, fuse3
+, cargo
+, rustc
+, rustPlatform
+, makeWrapper
+, writeScript
+, python3
+, fuseSupport ? false
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "bcachefs-tools";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "koverstreet";
+    repo = "bcachefs-tools";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-+KqTiIp9dIJWG2KvgvPwXC7p754XfgvKHjvwjCdbvCs=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    cargo
+    rustc
+    rustPlatform.cargoSetupHook
+    rustPlatform.bindgenHook
+    makeWrapper
+  ];
+
+  cargoRoot = "rust-src";
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "bindgen-0.64.0" = "sha256-GNG8as33HLRYJGYe0nw6qBzq86aHiGonyynEM7gaEE4=";
+    };
+  };
+
+  buildInputs = [
+    libaio
+    keyutils
+    lz4
+
+    libsodium
+    liburcu
+    libuuid
+    zstd
+    zlib
+    attr
+    udev
+  ] ++ lib.optional fuseSupport fuse3;
+
+  # FIXME: Try enabling this once the default linux kernel is at least 6.7
+  doCheck = false; # needs bcachefs module loaded on builder
+  checkFlags = [ "BCACHEFS_TEST_USE_VALGRIND=no" ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "VERSION=${finalAttrs.version}"
+    "INITRAMFS_DIR=${placeholder "out"}/etc/initramfs-tools"
+    "BCACHEFS_FUSE=${toString fuseSupport}"
+  ];
+
+  preCheck = lib.optionalString (!fuseSupport) ''
+    rm tests/test_fuse.py
+  '';
+
+  # Tries to install to the 'systemd-minimal' and 'udev' nix installation paths
+  installFlags = [
+    "PKGCONFIG_SERVICEDIR=$(out)/lib/systemd/system"
+    "PKGCONFIG_UDEVDIR=$(out)/lib/udev"
+  ];
+
+  postInstall = ''
+    substituteInPlace $out/libexec/bcachefsck_all \
+      --replace "/usr/bin/python3" "${python3}/bin/python3"
+  '';
+
+  passthru = {
+    tests = {
+      smoke-test = nixosTests.bcachefs;
+      inherit (nixosTests.installer) bcachefsSimple bcachefsEncrypted bcachefsMulti;
+    };
+
+    updateScript = writeScript "update-bcachefs-tools-and-cargo-lock.sh" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl jq common-updater-scripts
+      res="$(curl ''${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} \
+        -sL "https://api.github.com/repos/${finalAttrs.src.owner}/${finalAttrs.src.repo}/tags?per_page=1")"
+
+      version="$(echo $res | jq '.[0].name | split("v") | .[1]' --raw-output)"
+      update-source-version ${finalAttrs.pname} "$version" --ignore-same-hash
+
+      curl "https://raw.githubusercontent.com/${finalAttrs.src.owner}/${finalAttrs.src.repo}/v$version/rust-src/Cargo.lock" > \
+        "$(git rev-parse --show-toplevel)/pkgs/tools/filesystems/bcachefs-tools/Cargo.lock"
+    '';
+  };
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Tool for managing bcachefs filesystems";
+    homepage = "https://bcachefs.org/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ davidak Madouura ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/filesystems/bees/bees-service-wrapper b/nixpkgs/pkgs/tools/filesystems/bees/bees-service-wrapper
new file mode 100755
index 000000000000..67c95e8f8031
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bees/bees-service-wrapper
@@ -0,0 +1,227 @@
+#!@bash@/bin/bash
+PATH=@bash@/bin:@coreutils@/bin:@utillinux@/bin:@btrfsProgs@/bin:$PATH
+beesd_bin=@bees@/lib/bees/bees
+# PLEASE KEEP NIX-ISMS ABOVE THIS LINE TO EASE UPSTREAM MERGE
+#!/usr/bin/env bash
+
+shopt -s extglob
+
+# Upstream wrapper requires UUID to be used for configuration.
+
+# However, when declaratively describing a host, we may not know its UUID, and
+# shouldn't need to persist something that will differ between hosts built from
+# the same configuration template.
+
+# Thus, for using bees from NixOS, we have our own wrapper, which supports not
+# just UUID but any specification permitted by findmnt
+
+[[ $bees_debug ]] && { PS4=':${BASH_SOURCE##*/}:$LINENO+'; set -x; }
+
+usage() {
+  cat >&2 <<EOF
+Usage: ${BASH_SOURCE##*/} run|cleanup config-name|fsSpec [idxSizeMB=...] [verbosity=...] [workDir=...] [-- daemon-options...]
+
+  fsSpec should be in a format recognized by findmnt. Alternately,
+  "config-name" may refer to a file that exists in ${bees_config_dir:-/etc/bees}
+  with a .conf extension; if that file does not specify UUID, findmnt will be
+  used in addition.
+
+  Note that while config files may presently use shell arithmetic, use of this
+  functionality is not encouraged going forward: Setting ''idxSizeMB=4096'' is
+  preferred over ''DB_SIZE=$((1024*1024*1024*4))'' or ''DB_SIZE=$(( AL16M * 256 ))'',
+  although both of these are presently supported.
+
+  If fsSpec contains a /, it assumed to be a mount point to be looked up by
+  findmnt, not a config file name.
+
+  daemon-options are passed directly through to the daemon on startup, as
+  documented at https://github.com/Zygo/bees/blob/master/docs/options.md.
+EOF
+  exit 1
+}
+
+die() { echo "$*" >&2; exit 1; }
+
+allConfigNames=( blockdev fsSpec home idxSize idxSizeMB mntDir runDir status verbosity workDir )
+
+# Alternate names for configuration values; "bees_" will always be prepended
+declare -A altConfigNames=(
+  # from original bees wrapper
+  [BEESHOME]=home
+  [BEESSTATUS]=status
+  [MNT_DIR]=mntDir
+  [UUID]=uuid
+  [WORK_DIR]=runDir
+  [DB_SIZE]=idxSize
+)
+
+# legacy bees config files can be arbitrary shell scripts, so we need to actually evaluate them
+sandboxedConfigFileEval() {
+  bash_exe=$(type -P bash) || exit
+  PATH=/var/empty ENV='' BASH_ENV='' AL128K="$((128*1024))" AL16M="$((16*1024*1024))" "$bash_exe" -r ${bees_debug+-x} \
+    -c 'eval "$(</dev/stdin)" >&2; for var; do [[ ${!var} ]] && printf "%q=%s\\0" "$var" "${!var}"; done' \
+    "${!altConfigNames[@]}" "${allConfigNames[@]}" \
+    <"$1"
+}
+
+readConfigFileIfExists() {
+  local line
+  [[ -s $1 ]] || return 1
+  while IFS= read -r -d '' line; do
+    line=${line%%+([[:space:]])"#"*}
+    [[ $line ]] || continue
+    [[ $line = *=* ]] || {
+      printf 'WARNING: Config file line not recognized: %q\n' "$line" >&2
+      continue
+    }
+    set_option "$line"
+  done < <(sandboxedConfigFileEval "$1")
+}
+
+set_option() {
+  local k v
+  k="${1%%=*}" v="${1#*=}"
+  [[ ${altConfigNames[$k]} ]] && k=${altConfigNames[$k]}
+  printf -v "bees_$k" %s "$v"
+}
+
+uuid_re='^[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}$'
+
+# Shared code for setting configuration used by other operations.
+#
+# Reads from global associative array "opts" containing options passed in as
+# key=value pairs on the command line, looks for config-file overrides, and
+# sets individual global variables.
+_setup() {
+  declare fstype
+  bees_fsSpec=$1; shift
+
+  # Look for file-based configuration, additional to honoring configuration on the command line
+  bees_config_dir="${bees_config_dir:-/etc/bees}"
+  if [[ $bees_fsSpec =~ $uuid_re ]]; then
+    bees_uuid=$bees_fsSpec
+    # If our spec looks like a bare UUID, and no config file exists in the new
+    # format, fall back to legacy config file search mechanism (grep; ewww).
+    if ! readConfigFileIfExists "$bees_config_dir/UUID=$bees_fsSpec.conf"; then
+      # Legacy approach to finding a config file: Grep for a *.conf file
+      # containing the UUID within its text. Permitting spaces around the "="
+      # appears to be a bug, but is retained for compatibility with the
+      # original upstream script.
+      allConfFiles=( "$bees_config_dir"/*.conf )
+      if (( ${#allConfFiles[@]} )); then
+        # in read or readarray with -d '', the NUL terminating the empty string is used as delimiter character.
+        readarray -d '' -t matchingConfFiles < <(grep -E -l -Z "^[^#]*UUID[[:space:]]*=[[:space:]]*" "${allConfFiles[@]}")
+      else
+        matchingConfFiles=( )
+      fi
+      if (( ${#matchingConfFiles[@]} == 1 )); then
+        # Exactly one configuration file exists in our target directory with a reference to the UUID given.
+        bees_config_file=${matchingConfFiles[0]}
+        readConfigFileIfExists "$bees_config_file"
+        echo "NOTE: Please consider renaming $bees_config_file to $bees_config_dir/UUID=$bees_fsSpec" >&2
+        echo "      ...and passing UUID=$bees_fsSpec on startup." >&2
+      elif (( ${#matchingConfFiles[@]} > 1 )); then
+        # The legacy wrapper would silently use the first file and ignore
+        # others, but... no.
+        echo "ERROR: Passed a bare UUID, but multiple configuration files match it:" >&2
+        printf ' - %q\n' "${matchingConfFiles[@]}" >&2
+        die "Unable to continue."
+      fi
+    fi
+  else
+    # For a non-UUID fsSpec that is not a path, look only for a config file
+    # exactly matching its text.
+    #
+    # (Passing a mount point as a fsSpec is only supported with the new
+    # wrapper; all key=value pairs can be passed on the command line in this
+    # mode, so config file support is not needed).
+    [[ $bees_fsSpec = */* ]] || readConfigFileIfExists "$bees_config_dir/$bees_fsSpec.conf"
+  fi
+
+  [[ $bees_uuid ]] || {
+    # if bees_uuid is not in our .conf file, look it up with findmnt
+    for findmnt_mode in --kernel --mtab --fstab; do
+      read -r bees_uuid fstype < <(findmnt "$findmnt_mode" -n -o uuid,fstype "$bees_fsSpec") ||:
+      [[ $bees_uuid && $fstype ]] && break
+    done
+    [[ $bees_uuid ]] || die "Unable to identify a device matching $bees_fsSpec with findmnt"
+    [[ $fstype = btrfs ]] || die "Device type is $fstype, not btrfs"
+  }
+
+  [[ $bees_uuid = */* ]] || readConfigFileIfExists "$bees_config_dir/UUID=$bees_uuid.conf"
+
+  # Honor any values read from config files above; otherwise, set defaults.
+  bees_workDir="${bees_workDir:-.beeshome}"
+  bees_runDir="${bees_runDir:-/run/bees}"
+  bees_mntDir="${bees_mntDir:-$bees_runDir/mnt/$bees_uuid}"
+  bees_home="${bees_home:-$bees_mntDir/$bees_workDir}"
+  bees_status="${bees_status:-${bees_runDir}/$bees_uuid.status}"
+  bees_verbosity="${bees_verbosity:-6}"
+  bees_idxSizeMB="${bees_idxSizeMB:-1024}"
+  bees_idxSize=${bees_idxSize:-"$(( bees_idxSizeMB * 1024 * 1024 ))"}
+  bees_blockdev=${bees_blockdev:-"/dev/disk/by-uuid/$bees_uuid"}
+
+  [[ -b $bees_blockdev ]] || die "Block device $bees_blockdev missing"
+  (( bees_idxSize % (16 * 1024 * 1024) == 0 )) || die "DB size must be divisible by 16MB"
+}
+
+do_run() {
+  local db old_db_size
+
+  _setup "$1"; shift
+  mkdir -p -- "$bees_mntDir" || exit
+
+  # subvol id 5 is reserved for the root subvolume of a btrfs filesystem.
+  mountpoint -q "$bees_mntDir" || mount -osubvolid=5 -- "$bees_blockdev" "$bees_mntDir" || exit
+  if [[ -d $bees_home ]]; then
+    btrfs subvolume show "$bees_home" >/dev/null 2>&1 || die "$bees_home exists but is not a subvolume"
+  else
+    btrfs subvolume create "$bees_home" || exit
+    sync # workaround for Zygo/bees#93
+  fi
+  db=$bees_home/beeshash.dat
+  touch -- "$db"
+
+  old_db_size=$(stat -c %s -- "$db")
+  new_db_size=$bees_idxSize
+
+  if (( old_db_size != new_db_size )); then
+    rm -f -- "$bees_home"/beescrawl."$bees_uuid".dat
+    truncate -s "$new_db_size" -- "$db" || exit
+  fi
+  chmod 700 -- "$bees_home"
+
+  # BEESSTATUS and BEESHOME are the only variables handled by the legacy
+  # wrapper for which getenv() is called in C code.
+  BEESSTATUS=$bees_status BEESHOME=$bees_home exec "${beesd_bin:-/lib/bees/bees}" \
+    --verbose "$bees_verbosity" \
+    "$@" "$bees_mntDir" || exit
+}
+
+do_cleanup() {
+  _setup "$1"; shift
+  mountpoint -q "$bees_mntDir" && umount -l -- "$bees_mntDir" || exit
+}
+
+(( $# >= 2 )) || usage
+declare -f "do_$1" >/dev/null 2>&1 || usage
+mode=$1; shift # must be a do_* function; currently "run" or "cleanup"
+
+declare -a args=( "$1" ); shift  # pass first argument (config-name|fsSpec) through literally
+
+# parse other arguments as key=value pairs, or pass them through literally if they do not match that form.
+# similarly, any option after "--" will be passed through literally.
+while (( $# )); do
+  if [[ $1 = *=* ]]; then
+    set_option "$1"
+  elif [[ $1 = -- ]]; then
+    shift
+    args+=( "$@" )
+    break
+  else
+    args+=( "$1" )
+  fi
+  shift
+done
+
+"do_$mode" "${args[@]}"
diff --git a/nixpkgs/pkgs/tools/filesystems/bees/default.nix b/nixpkgs/pkgs/tools/filesystems/bees/default.nix
new file mode 100644
index 000000000000..1dbb62ccb1b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bees/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, stdenv
+, runCommand
+, fetchFromGitHub
+, bash
+, btrfs-progs
+, coreutils
+, python3Packages
+, util-linux
+, nixosTests
+}:
+
+let
+
+  bees = stdenv.mkDerivation rec {
+    pname = "bees";
+    version = "0.10";
+
+    src = fetchFromGitHub {
+      owner = "Zygo";
+      repo = "bees";
+      rev = "v${version}";
+      hash = "sha256-f3P3BEd8uO6QOZ1/2hBzdcuOSggYvHxW3g9pGftKO8g=";
+    };
+
+    buildInputs = [
+      btrfs-progs # for btrfs/ioctl.h
+      util-linux # for uuid.h
+    ];
+
+    nativeBuildInputs = [
+      python3Packages.markdown # documentation build
+    ];
+
+    preBuild = ''
+      git() { if [[ $1 = describe ]]; then echo ${version}; else command git "$@"; fi; }
+      export -f git
+    '';
+
+    postBuild = ''
+      unset -f git
+    '';
+
+    buildFlags = [
+      "ETC_PREFIX=/var/run/bees/configs"
+    ];
+
+    makeFlags = [
+      "SHELL=bash"
+      "PREFIX=$(out)"
+      "ETC_PREFIX=$(out)/etc"
+      "BEES_VERSION=${version}"
+      "SYSTEMD_SYSTEM_UNIT_DIR=$(out)/etc/systemd/system"
+    ];
+
+    meta = with lib; {
+      homepage = "https://github.com/Zygo/bees";
+      description = "Block-oriented BTRFS deduplication service";
+      longDescription = "Best-Effort Extent-Same: bees finds not just identical files, but also identical extents within files that differ";
+      license = licenses.gpl3;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ chaduffy ];
+    };
+  };
+
+in
+
+(runCommand "bees-service"
+  {
+    inherit bash bees coreutils;
+    utillinux = util-linux; # needs to be a valid shell variable name
+    btrfsProgs = btrfs-progs; # needs to be a valid shell variable name
+  } ''
+  mkdir -p -- "$out/bin"
+  substituteAll ${./bees-service-wrapper} "$out"/bin/bees-service-wrapper
+  chmod +x "$out"/bin/bees-service-wrapper
+  ln -s ${bees}/bin/beesd "$out"/bin/beesd
+'').overrideAttrs {
+  passthru.tests = {
+    smoke-test = nixosTests.bees;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/bindfs/default.nix b/nixpkgs/pkgs/tools/filesystems/bindfs/default.nix
new file mode 100644
index 000000000000..f7d5ce61d81c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bindfs/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, fuse
+, fuse3
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  version = "1.17.6";
+  pname = "bindfs";
+
+  src = fetchurl {
+    url = "https://bindfs.org/downloads/bindfs-${finalAttrs.version}.tar.gz";
+    hash = "sha256-076zzGm7K2gCzFOViOkh/qlz7WGRsTPyAkcZMR0cwYs=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = if stdenv.isDarwin then [ fuse ] else [ fuse3 ];
+
+  postFixup = ''
+    ln -s $out/bin/bindfs $out/bin/mount.fuse.bindfs
+  '';
+
+  meta = {
+    changelog = "https://github.com/mpartel/bindfs/raw/${finalAttrs.version}/ChangeLog";
+    description = "A FUSE filesystem for mounting a directory to another location";
+    homepage = "https://bindfs.org";
+    license = lib.licenses.gpl2Only;
+    maintainers = with lib.maintainers; [ lovek323 lovesegfault ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/filesystems/blobfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/blobfuse/default.nix
new file mode 100644
index 000000000000..2acd137be736
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/blobfuse/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, fuse3, testers, blobfuse }:
+
+let
+  version = "2.1.2";
+  src = fetchFromGitHub {
+    owner = "Azure";
+    repo = "azure-storage-fuse";
+    rev = "blobfuse2-${version}";
+    sha256 = "sha256-KzpD+6g1WwviydYE0v5pSH35zC41MrPlk5MitwAIgnE=";
+  };
+in buildGoModule {
+  pname = "blobfuse";
+  inherit version src;
+
+  vendorHash = "sha256-+Z+mkTs/8qCtYcWZIMzsW9MQsC08KDJUHNbxyc6Ro5Y=";
+
+  buildInputs = [ fuse3 ];
+
+  # Many tests depend on network or needs to be configured to pass. See the link below for a starting point
+  # https://github.com/NixOS/nixpkgs/pull/201196/files#diff-e669dbe391f8856f4564f26023fe147a7b720aeefe6869ab7a218f02a8247302R20
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion { package = blobfuse; };
+
+  meta = with lib; {
+    description = "Mount an Azure Blob storage as filesystem through FUSE";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jbgi ];
+    platforms = platforms.linux;
+    mainProgram = "azure-storage-fuse";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/bonnie/default.nix b/nixpkgs/pkgs/tools/filesystems/bonnie/default.nix
new file mode 100644
index 000000000000..a2f1c51e7e12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bonnie/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bonnie++";
+  version = "2.00a";
+
+  src = fetchurl {
+    url = "https://www.coker.com.au/bonnie++/bonnie++-${version}.tgz";
+    hash = "sha256-qNM7vYG8frVZzlv25YS5tT+uo5zPtK6S5Y8nJX5Gjw4=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "bonnie++-2.00a-gcc11.patch";
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-benchmarks/bonnie++/files/bonnie++-2.00a-gcc11.patch?id=d0f29755e969c805fbd6240905e3925671340666";
+      hash = "sha256-/cIC4HYQco5Nv1UoTELl2OGD5hdWhbz3L0+GjN/vcdE=";
+    })
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Hard drive and file system benchmark suite";
+    homepage = "http://www.coker.com.au/bonnie++/";
+    license = lib.licenses.gpl2Only;
+    mainProgram = "bonnie++";
+    maintainers = with lib.maintainers; [ wegank ];
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/boxfs/default.nix b/nixpkgs/pkgs/tools/filesystems/boxfs/default.nix
new file mode 100644
index 000000000000..ef611afd5d09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/boxfs/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchFromGitHub, curl, fuse, libxml2, pkg-config }:
+
+let
+  srcs = {
+    boxfs2 = fetchFromGitHub {
+      sha256 = "10af1l3sjnh25shmq5gdnpyqk4vrq7i1zklv4csf1n2nrahln8j8";
+      rev = "d7018b0546d2dae956ae3da3fb95d2f63fa6d3ff";
+      repo = "boxfs2";
+      owner = "drotiro";
+    };
+    libapp = fetchFromGitHub {
+      sha256 = "1p2sbxiranan2n2xsfjkp3c6r2vcs57ds6qvjv4crs1yhxr7cp00";
+      rev = "febebe2bc0fb88d57bdf4eb4a2a54c9eeda3f3d8";
+      repo = "libapp";
+      owner = "drotiro";
+    };
+    libjson = fetchFromGitHub {
+      sha256 = "1vhss3gq44nl61fbnh1l3qzwvz623gwhfgykf1lf1p31rjr7273w";
+      rev = "75a7f50fca2c667bc5f32cdd6dd98f2b673f6657";
+      repo = "libjson";
+      owner = "vincenthz";
+    };
+  };
+in stdenv.mkDerivation {
+  pname = "boxfs";
+  version = "2-20150109";
+
+  src = srcs.boxfs2;
+
+  prePatch = with srcs; ''
+    substituteInPlace Makefile --replace "git pull" "true"
+    cp -a --no-preserve=mode ${libapp} libapp
+    cp -a --no-preserve=mode ${libjson} libjson
+  '';
+  patches = [ ./work-around-API-borkage.patch ];
+
+  buildInputs = [ curl fuse libxml2 ];
+  nativeBuildInputs = [ pkg-config ];
+
+  buildFlags = [
+    "static"
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ] ++ lib.optional stdenv.isDarwin "CFLAGS=-D_BSD_SOURCE";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install boxfs boxfs-init $out/bin
+  '';
+
+  meta = with lib; {
+    description = "FUSE file system for box.com accounts";
+    longDescription = ''
+      Store files on box.com (an account is required). The first time you run
+      boxfs, you will need to complete the authentication (oauth2) process and
+      grant access to your box.com account. Just follow the instructions on
+      the terminal and in your browser. When you've done using your files,
+      unmount the file system with `fusermount -u mountpoint`.
+    '';
+    homepage = "https://github.com/drotiro/boxfs2";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/boxfs/work-around-API-borkage.patch b/nixpkgs/pkgs/tools/filesystems/boxfs/work-around-API-borkage.patch
new file mode 100644
index 000000000000..b74e7f324665
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/boxfs/work-around-API-borkage.patch
@@ -0,0 +1,15 @@
+diff --git a/boxapi.c b/boxapi.c
+index 4964273..1a32e0d 100644
+--- a/boxapi.c
++++ b/boxapi.c
+@@ -38,8 +38,8 @@
+ //    AUTH
+ #define API_KEY_VAL "f9ss11y2w0hg5r04jsidxlhk4pil28cf"
+ #define API_SECRET  "r3ZHAIhsOL2FoHjgERI9xf74W5skIM0w"
+-#define API_OAUTH_URL "https://app.box.com/api/oauth2/" //"https://www.box.com/api/oauth2/"
+-#define API_OAUTH_AUTHORIZE API_OAUTH_URL "authorize?response_type=code&client_id=" API_KEY_VAL /*"&redirect_uri=http%3A//localhost"*/
++#define API_OAUTH_URL "https://api.box.com/oauth2/" //"https://www.box.com/api/oauth2/"
++#define API_OAUTH_AUTHORIZE "https://app.box.com/api/oauth2/authorize?response_type=code&client_id=" API_KEY_VAL /*"&redirect_uri=http%3A//localhost"*/
+ #define API_OAUTH_TOKEN     API_OAUTH_URL "token"
+ //    CALLS
+ #define API_ENDPOINT	"https://api.box.com/2.0/"
diff --git a/nixpkgs/pkgs/tools/filesystems/btrfs-heatmap/default.nix b/nixpkgs/pkgs/tools/filesystems/btrfs-heatmap/default.nix
new file mode 100644
index 000000000000..9de91738e74d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/btrfs-heatmap/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, lib
+, fetchFromGitHub
+, python3
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "btrfs-heatmap";
+  version = "9";
+
+  src = fetchFromGitHub {
+    owner = "knorrie";
+    repo = "btrfs-heatmap";
+    rev = "v${version}";
+    sha256 = "sha256-yCkuZqWwxrs2eS7EXY6pAOVVVSq7dAMxJtf581gX8vg=";
+  };
+
+  buildInputs = [ python3 ];
+  nativeBuildInputs = [ python3.pkgs.wrapPython installShellFiles ];
+
+  outputs = [ "out" "man" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm 0755 btrfs-heatmap $out/sbin/btrfs-heatmap
+    installManPage man/btrfs-heatmap.1
+
+    buildPythonPath ${python3.pkgs.btrfs}
+    patchPythonScript $out/sbin/btrfs-heatmap
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Visualize the layout of a mounted btrfs";
+    homepage = "https://github.com/knorrie/btrfs-heatmap";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.evils ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/btrfs-progs/default.nix b/nixpkgs/pkgs/tools/filesystems/btrfs-progs/default.nix
new file mode 100644
index 000000000000..6f154f7aeeca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/btrfs-progs/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchurl
+, buildPackages
+, pkg-config
+, zstd
+, acl, attr, e2fsprogs, libuuid, lzo, udev, zlib
+, runCommand, btrfs-progs
+, gitUpdater
+, udevSupport ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "btrfs-progs";
+  version = "6.7.1";
+
+  src = fetchurl {
+    url = "mirror://kernel/linux/kernel/people/kdave/btrfs-progs/btrfs-progs-v${version}.tar.xz";
+    hash = "sha256-JNx7l08KV7oOyoD5dEC4QN+oWw8cssAb39l2WaSAsgA=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ] ++ [
+    (buildPackages.python3.withPackages (ps: with ps; [
+      sphinx
+      sphinx-rtd-theme
+    ]))
+  ];
+
+  buildInputs = [ acl attr e2fsprogs libuuid lzo udev zlib zstd ];
+
+  # gcc bug with -O1 on ARM with gcc 4.8
+  # This should be fine on all platforms so apply universally
+  postPatch = "sed -i s/-O1/-O2/ configure";
+
+  postInstall = ''
+    install -v -m 444 -D btrfs-completion $out/share/bash-completion/completions/btrfs
+  '';
+
+  configureFlags = [
+    # Built separately, see python3Packages.btrfsutil
+    "--disable-python"
+  ] ++ lib.optionals stdenv.hostPlatform.isMusl [
+    "--disable-backtrace"
+  ] ++ lib.optionals (!udevSupport) [
+    "--disable-libudev"
+  ];
+
+  makeFlags = [ "udevruledir=$(out)/lib/udev/rules.d" ];
+
+  enableParallelBuilding = true;
+
+  passthru.tests = {
+    simple-filesystem = runCommand "btrfs-progs-create-fs" {} ''
+      mkdir -p $out
+      truncate -s110M $out/disc
+      ${btrfs-progs}/bin/mkfs.btrfs $out/disc | tee $out/success
+      ${btrfs-progs}/bin/btrfs check $out/disc | tee $out/success
+      [ -e $out/success ]
+    '';
+  };
+
+  passthru.updateScript = gitUpdater {
+    # No nicer place to find latest release.
+    url = "https://github.com/kdave/btrfs-progs.git";
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    description = "Utilities for the btrfs filesystem";
+    homepage = "https://btrfs.readthedocs.io/en/latest/";
+    changelog = "https://github.com/kdave/btrfs-progs/raw/v${version}/CHANGES";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/btrfs-snap/default.nix b/nixpkgs/pkgs/tools/filesystems/btrfs-snap/default.nix
new file mode 100644
index 000000000000..efc2ddafa419
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/btrfs-snap/default.nix
@@ -0,0 +1,32 @@
+{ bash, btrfs-progs, coreutils, fetchFromGitHub, gnugrep, lib, makeWrapper, stdenvNoCC, util-linuxMinimal }:
+stdenvNoCC.mkDerivation rec {
+  pname = "btrfs-snap";
+  version = "1.7.3";
+  src = fetchFromGitHub {
+    owner = "jf647";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-SDzLjgNRuR9XpmcYCD9T10MLS+//+pWFGDiTAb8NiLQ=";
+  };
+  buildInputs = [ bash ];
+  nativeBuildInputs = [ makeWrapper ];
+  dontConfigure = true;
+  dontBuild = true;
+  installPhase = ''
+    mkdir -p $out/bin
+    cp btrfs-snap $out/bin/
+    wrapProgram $out/bin/btrfs-snap --prefix PATH : ${lib.makeBinPath [
+      btrfs-progs       # btrfs
+      coreutils         # cut, date, head, ls, mkdir, readlink, stat, tail, touch, test, [
+      gnugrep           # grep
+      util-linuxMinimal # logger, mount
+    ]}
+  '';
+  meta = with lib; {
+    description = "Create and maintain the history of snapshots of btrfs filesystems";
+    homepage = "https://github.com/jf647/btrfs-snap";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ lionello ];
+    platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/catcli/default.nix b/nixpkgs/pkgs/tools/filesystems/catcli/default.nix
new file mode 100644
index 000000000000..a2f5402dca25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/catcli/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "catcli";
+  version = "0.9.6";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "deadc0de6";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-+/kd7oPT6msojPj25bzG9HwVqPj47gIUg9LngbDc3y8=";
+  };
+
+  postPatch = "patchShebangs . ";
+
+  propagatedBuildInputs = with python3.pkgs; [
+    anytree
+    docopt
+    fusepy
+    pyfzf
+    types-docopt
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "The command line catalog tool for your offline data";
+    homepage = "https://github.com/deadc0de6/catcli";
+    changelog = "https://github.com/deadc0de6/catcli/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ petersjt014 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ceph-csi/default.nix b/nixpkgs/pkgs/tools/filesystems/ceph-csi/default.nix
new file mode 100644
index 000000000000..d6b39ef68e4f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ceph-csi/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, go, ceph, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ceph-csi";
+  version = "3.10.1";
+
+  nativeBuildInputs = [ go ];
+  buildInputs = [ ceph ];
+
+  src = fetchFromGitHub {
+    owner = "ceph";
+    repo = "ceph-csi";
+    rev = "v${version}";
+    sha256 = "sha256-S5jv9l/Oozv0NrEEf+Bik0jnaK4AYIChFm2pU2/DQow=";
+  };
+
+  preConfigure = ''
+    export GOCACHE=$(pwd)/.cache
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./_output/* $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://ceph.com/";
+    description = "Container Storage Interface (CSI) driver for Ceph RBD and CephFS";
+    license = [ licenses.asl20 ];
+    maintainers = with maintainers; [ johanot ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ceph/default.nix b/nixpkgs/pkgs/tools/filesystems/ceph/default.nix
new file mode 100644
index 000000000000..5d1c3249b98f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ceph/default.nix
@@ -0,0 +1,462 @@
+{ lib
+, stdenv
+, runCommand
+, fetchurl
+, fetchFromGitHub
+, fetchPypi
+
+# Build time
+, cmake
+, ensureNewerSourcesHook
+, fmt
+, git
+, makeWrapper
+, nasm
+, pkg-config
+, which
+
+# Tests
+, nixosTests
+
+# Runtime dependencies
+, arrow-cpp
+, babeltrace
+, boost179
+, bzip2
+, cryptsetup
+, cunit
+, doxygen
+, gperf
+, graphviz
+, gnugrep
+, gtest
+, icu
+, kmod
+, libcap
+, libcap_ng
+, libnl
+, libxml2
+, lttng-ust
+, lua
+, lz4
+, oath-toolkit
+, openldap
+, python310
+, rdkafka
+, rocksdb
+, snappy
+, sqlite
+, utf8proc
+, zlib
+, zstd
+
+# Dependencies of overridden Python dependencies, hopefully we can remove these soon.
+, rustPlatform
+
+# Optional Dependencies
+, curl ? null
+, expat ? null
+, fuse ? null
+, libatomic_ops ? null
+, libedit ? null
+, libs3 ? null
+, yasm ? null
+
+# Mallocs
+, gperftools ? null
+, jemalloc ? null
+
+# Crypto Dependencies
+, cryptopp ? null
+, nspr ? null
+, nss ? null
+
+# Linux Only Dependencies
+, linuxHeaders
+, util-linux
+, libuuid
+, udev
+, keyutils
+, rdma-core
+, rabbitmq-c
+, libaio ? null
+, libxfs ? null
+, liburing ? null
+, zfs ? null
+, ...
+}:
+
+# We must have one crypto library
+assert cryptopp != null || (nss != null && nspr != null);
+
+let
+  shouldUsePkg = pkg: if pkg != null && lib.meta.availableOn stdenv.hostPlatform pkg then pkg else null;
+
+  optYasm = shouldUsePkg yasm;
+  optExpat = shouldUsePkg expat;
+  optCurl = shouldUsePkg curl;
+  optFuse = shouldUsePkg fuse;
+  optLibedit = shouldUsePkg libedit;
+  optLibatomic_ops = shouldUsePkg libatomic_ops;
+  optLibs3 = shouldUsePkg libs3;
+
+  optJemalloc = shouldUsePkg jemalloc;
+  optGperftools = shouldUsePkg gperftools;
+
+  optCryptopp = shouldUsePkg cryptopp;
+  optNss = shouldUsePkg nss;
+  optNspr = shouldUsePkg nspr;
+
+  optLibaio = shouldUsePkg libaio;
+  optLibxfs = shouldUsePkg libxfs;
+  optZfs = shouldUsePkg zfs;
+
+  # Downgrade rocksdb, 7.10 breaks ceph
+  rocksdb' = rocksdb.overrideAttrs {
+    version = "7.9.2";
+    src = fetchFromGitHub {
+      owner = "facebook";
+      repo = "rocksdb";
+      rev = "refs/tags/v7.9.2";
+      hash = "sha256-5P7IqJ14EZzDkbjaBvbix04ceGGdlWBuVFH/5dpD5VM=";
+    };
+  };
+
+  hasRadosgw = optExpat != null && optCurl != null && optLibedit != null;
+
+  # Malloc implementation (can be jemalloc, tcmalloc or null)
+  malloc = if optJemalloc != null then optJemalloc else optGperftools;
+
+  # We prefer nss over cryptopp
+  cryptoStr = if optNss != null && optNspr != null then "nss" else
+    if optCryptopp != null then "cryptopp" else "none";
+
+  cryptoLibsMap = {
+    nss = [ optNss optNspr ];
+    cryptopp = [ optCryptopp ];
+    none = [ ];
+  };
+
+  getMeta = description: with lib; {
+     homepage = "https://ceph.io/en/";
+     inherit description;
+     license = with licenses; [ lgpl21 gpl2 bsd3 mit publicDomain ];
+     maintainers = with maintainers; [ adev ak johanot krav ];
+     platforms = [ "x86_64-linux" "aarch64-linux" ];
+   };
+
+  ceph-common = with python.pkgs; buildPythonPackage {
+    pname = "ceph-common";
+    inherit src version;
+
+    sourceRoot = "ceph-${version}/src/python-common";
+
+    propagatedBuildInputs = [
+      pyyaml
+    ];
+
+    nativeCheckInputs = [
+      pytestCheckHook
+    ];
+
+    disabledTests = [
+      # requires network access
+      "test_valid_addr"
+    ];
+
+    meta = getMeta "Ceph common module for code shared by manager modules";
+  };
+
+  # Watch out for python <> boost compatibility
+  python = python310.override {
+    packageOverrides = self: super: let cryptographyOverrideVersion = "40.0.1"; in {
+      # Ceph does not support `cryptography` > 40 yet:
+      # * https://github.com/NixOS/nixpkgs/pull/281858#issuecomment-1899358602
+      # * Upstream issue: https://tracker.ceph.com/issues/63529
+      #   > Python Sub-Interpreter Model Used by ceph-mgr Incompatible With Python Modules Based on PyO3
+      #
+      # We pin the older `cryptography` 40 here;
+      # this also forces us to pin an older `pyopenssl` because the current one
+      # is not compatible with older `cryptography`, see:
+      #     https://github.com/pyca/pyopenssl/blob/d9752e44127ba36041b045417af8a0bf16ec4f1e/CHANGELOG.rst#2320-2023-05-30
+      cryptography = super.cryptography.overridePythonAttrs (old: rec {
+        version = cryptographyOverrideVersion;
+
+        src = fetchPypi {
+          inherit (old) pname;
+          version = cryptographyOverrideVersion;
+          hash = "sha256-KAPy+LHpX2FEGZJsfm9V2CivxhTKXtYVQ4d65mjMNHI=";
+        };
+
+        cargoDeps = rustPlatform.fetchCargoTarball {
+          inherit src;
+          sourceRoot = let cargoRoot = "src/rust"; in "${old.pname}-${cryptographyOverrideVersion}/${cargoRoot}";
+          name = "${old.pname}-${cryptographyOverrideVersion}";
+          hash = "sha256-gFfDTc2QWBWHBCycVH1dYlCsWQMVcRZfOBIau+njtDU=";
+        };
+
+        patches = [
+          # Fix https://nvd.nist.gov/vuln/detail/CVE-2023-49083 which has no upstream backport.
+          # See https://github.com/pyca/cryptography/commit/f09c261ca10a31fe41b1262306db7f8f1da0e48a#diff-f5134bf8f3cf0a5cc8601df55e50697acc866c603a38caff98802bd8e17976c5R1893
+          ./python-cryptography-Cherry-pick-fix-for-CVE-2023-49083-on-cryptography-40.patch
+        ];
+
+        # Tests would require overriding `cryptography-vectors`, which is not currently
+        # possible/desired, see: https://github.com/NixOS/nixpkgs/pull/281858#pullrequestreview-1841421866
+        doCheck = false;
+      });
+
+      # This is the most recent version of `pyopenssl` that's still compatible with `cryptography` 40.
+      # See https://github.com/NixOS/nixpkgs/pull/281858#issuecomment-1899358602
+      pyopenssl = super.pyopenssl.overridePythonAttrs (old: rec {
+        version = "23.1.1";
+        src = fetchPypi {
+          pname = "pyOpenSSL";
+          inherit version;
+          hash = "sha256-hBSYub7GFiOxtsR+u8AjZ8B9YODhlfGXkIF/EMyNsLc=";
+        };
+      });
+
+      # Ceph does not support `kubernetes` >= 19, see:
+      #     https://github.com/NixOS/nixpkgs/pull/281858#issuecomment-1900324090
+      kubernetes = super.kubernetes.overridePythonAttrs (old: rec {
+        version = "18.20.0";
+        src = fetchFromGitHub {
+          owner = "kubernetes-client";
+          repo = "python";
+          rev = "v${version}";
+          sha256 = "1sawp62j7h0yksmg9jlv4ik9b9i1a1w9syywc9mv8x89wibf5ql1";
+          fetchSubmodules = true;
+        };
+      });
+
+    };
+  };
+
+  boost = boost179.override {
+    enablePython = true;
+    inherit python;
+  };
+
+  # TODO: split this off in build and runtime environment
+  ceph-python-env = python.withPackages (ps: with ps; [
+    ceph-common
+
+    # build time
+    cython
+
+    # debian/control
+    bcrypt
+    cherrypy
+    influxdb
+    jinja2
+    kubernetes
+    natsort
+    numpy
+    pecan
+    prettytable
+    pyjwt
+    pyopenssl
+    python-dateutil
+    pyyaml
+    requests
+    routes
+    scikit-learn
+    scipy
+    setuptools
+    sphinx
+    virtualenv
+    werkzeug
+
+    # src/pybind/mgr/requirements-required.txt
+    cryptography
+    jsonpatch
+
+    # src/tools/cephfs/shell/setup.py
+    cmd2
+    colorama
+  ]);
+  inherit (ceph-python-env.python) sitePackages;
+
+  version = "18.2.1";
+  src = fetchurl {
+    url = "https://download.ceph.com/tarballs/ceph-${version}.tar.gz";
+    hash = "sha256-gHWwNHf0KtI7Hv0MwaCqP6A3YR/AWakfUZTktRyddko=";
+  };
+in rec {
+  ceph = stdenv.mkDerivation {
+    pname = "ceph";
+    inherit src version;
+
+    nativeBuildInputs = [
+      cmake
+      fmt
+      git
+      makeWrapper
+      nasm
+      pkg-config
+      python
+      python.pkgs.python # for the toPythonPath function
+      python.pkgs.wrapPython
+      which
+      (ensureNewerSourcesHook { year = "1980"; })
+      # for building docs/man-pages presumably
+      doxygen
+      graphviz
+    ];
+
+    enableParallelBuilding = true;
+
+    buildInputs = cryptoLibsMap.${cryptoStr} ++ [
+      arrow-cpp
+      babeltrace
+      boost
+      bzip2
+      ceph-python-env
+      cryptsetup
+      cunit
+      gperf
+      gtest
+      icu
+      libcap
+      libnl
+      libxml2
+      lttng-ust
+      lua
+      lz4
+      malloc
+      oath-toolkit
+      openldap
+      optLibatomic_ops
+      optLibs3
+      optYasm
+      rdkafka
+      rocksdb'
+      snappy
+      sqlite
+      utf8proc
+      zlib
+      zstd
+    ] ++ lib.optionals stdenv.isLinux [
+      keyutils
+      libcap_ng
+      liburing
+      libuuid
+      linuxHeaders
+      optLibaio
+      optLibxfs
+      optZfs
+      rabbitmq-c
+      rdma-core
+      udev
+      util-linux
+    ] ++ lib.optionals hasRadosgw [
+      optCurl
+      optExpat
+      optFuse
+      optLibedit
+    ];
+
+    pythonPath = [ ceph-python-env "${placeholder "out"}/${ceph-python-env.sitePackages}" ];
+
+    # replace /sbin and /bin based paths with direct nix store paths
+    # increase the `command` buffer size since 2 nix store paths cannot fit within 128 characters
+    preConfigure =''
+      substituteInPlace src/common/module.c \
+        --replace "char command[128];" "char command[256];" \
+        --replace "/sbin/modinfo"  "${kmod}/bin/modinfo" \
+        --replace "/sbin/modprobe" "${kmod}/bin/modprobe" \
+        --replace "/bin/grep" "${gnugrep}/bin/grep"
+
+      # install target needs to be in PYTHONPATH for "*.pth support" check to succeed
+      # set PYTHONPATH, so the build system doesn't silently skip installing ceph-volume and others
+      export PYTHONPATH=${ceph-python-env}/${sitePackages}:$lib/${sitePackages}:$out/${sitePackages}
+      patchShebangs src/
+    '';
+
+    cmakeFlags = [
+      "-DCMAKE_INSTALL_DATADIR=${placeholder "lib"}/lib"
+
+      "-DWITH_CEPHFS_SHELL:BOOL=ON"
+      "-DWITH_SYSTEMD:BOOL=OFF"
+      # `WITH_JAEGER` requires `thrift` as a depenedncy (fine), but the build fails with:
+      #     CMake Error at src/opentelemetry-cpp-stamp/opentelemetry-cpp-build-Release.cmake:49 (message):
+      #     Command failed: 2
+      #
+      #        'make' 'opentelemetry_trace' 'opentelemetry_exporter_jaeger_trace'
+      #
+      #     See also
+      #
+      #        /build/ceph-18.2.0/build/src/opentelemetry-cpp/src/opentelemetry-cpp-stamp/opentelemetry-cpp-build-*.log
+      # and that file contains:
+      #     /build/ceph-18.2.0/src/jaegertracing/opentelemetry-cpp/exporters/jaeger/src/TUDPTransport.cc: In member function 'virtual void opentelemetry::v1::exporter::jaeger::TUDPTransport::close()':
+      #     /build/ceph-18.2.0/src/jaegertracing/opentelemetry-cpp/exporters/jaeger/src/TUDPTransport.cc:71:7: error: '::close' has not been declared; did you mean 'pclose'?
+      #       71 |     ::THRIFT_CLOSESOCKET(socket_);
+      #          |       ^~~~~~~~~~~~~~~~~~
+      # Looks like `close()` is somehow not included.
+      # But the relevant code is already removed in `open-telemetry` 1.10: https://github.com/open-telemetry/opentelemetry-cpp/pull/2031
+      # So it's proably not worth trying to fix that for this Ceph version,
+      # and instead just disable Ceph's Jaeger support.
+      "-DWITH_JAEGER:BOOL=OFF"
+      "-DWITH_TESTS:BOOL=OFF"
+
+      # Use our own libraries, where possible
+      "-DWITH_SYSTEM_ARROW:BOOL=ON" # Only used if other options enable Arrow support.
+      "-DWITH_SYSTEM_BOOST:BOOL=ON"
+      "-DWITH_SYSTEM_GTEST:BOOL=ON"
+      "-DWITH_SYSTEM_ROCKSDB:BOOL=ON"
+      "-DWITH_SYSTEM_UTF8PROC:BOOL=ON"
+      "-DWITH_SYSTEM_ZSTD:BOOL=ON"
+
+      # TODO breaks with sandbox, tries to download stuff with npm
+      "-DWITH_MGR_DASHBOARD_FRONTEND:BOOL=OFF"
+      # WITH_XFS has been set default ON from Ceph 16, keeping it optional in nixpkgs for now
+      ''-DWITH_XFS=${if optLibxfs != null then "ON" else "OFF"}''
+    ] ++ lib.optional stdenv.isLinux "-DWITH_SYSTEM_LIBURING=ON";
+
+    postFixup = ''
+      wrapPythonPrograms
+      wrapProgram $out/bin/ceph-mgr --prefix PYTHONPATH ":" "$(toPythonPath ${placeholder "out"}):$(toPythonPath ${ceph-python-env})"
+
+      # Test that ceph-volume exists since the build system has a tendency to
+      # silently drop it with misconfigurations.
+      test -f $out/bin/ceph-volume
+    '';
+
+    outputs = [ "out" "lib" "dev" "doc" "man" ];
+
+    doCheck = false; # uses pip to install things from the internet
+
+    # Takes 7+h to build with 2 cores.
+    requiredSystemFeatures = [ "big-parallel" ];
+
+    meta = getMeta "Distributed storage system";
+
+    passthru = {
+      inherit version;
+      tests = {
+        inherit (nixosTests)
+          ceph-multi-node
+          ceph-single-node
+          ceph-single-node-bluestore;
+      };
+    };
+  };
+
+  ceph-client = runCommand "ceph-client-${version}" {
+      meta = getMeta "Tools needed to mount Ceph's RADOS Block Devices/Cephfs";
+    } ''
+      mkdir -p $out/{bin,etc,${sitePackages},share/bash-completion/completions}
+      cp -r ${ceph}/bin/{ceph,.ceph-wrapped,rados,rbd,rbdmap} $out/bin
+      cp -r ${ceph}/bin/ceph-{authtool,conf,dencoder,rbdnamer,syn} $out/bin
+      cp -r ${ceph}/bin/rbd-replay* $out/bin
+      cp -r ${ceph}/sbin/mount.ceph $out/bin
+      cp -r ${ceph}/sbin/mount.fuse.ceph $out/bin
+      ln -s bin $out/sbin
+      cp -r ${ceph}/${sitePackages}/* $out/${sitePackages}
+      cp -r ${ceph}/etc/bash_completion.d $out/share/bash-completion/completions
+      # wrapPythonPrograms modifies .ceph-wrapped, so lets just update its paths
+      substituteInPlace $out/bin/ceph          --replace ${ceph} $out
+      substituteInPlace $out/bin/.ceph-wrapped --replace ${ceph} $out
+   '';
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ceph/python-cryptography-Cherry-pick-fix-for-CVE-2023-49083-on-cryptography-40.patch b/nixpkgs/pkgs/tools/filesystems/ceph/python-cryptography-Cherry-pick-fix-for-CVE-2023-49083-on-cryptography-40.patch
new file mode 100644
index 000000000000..7ca05cf7450f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ceph/python-cryptography-Cherry-pick-fix-for-CVE-2023-49083-on-cryptography-40.patch
@@ -0,0 +1,44 @@
+commit 08dbad8552ecca85d3e38072f94eb864b143d218
+Author: Niklas Hambüchen <mail@nh2.me>
+Date:   Mon Jan 22 12:52:06 2024 +0000
+
+    Cherry-pick fix for CVE-2023-49083
+    
+    Cherry-Picked-From: f09c261ca10a31fe41b1262306db7f8f1da0e48a
+    Cherry-Picked-By: Niklas Hambüchen <mail@nh2.me>
+
+diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py
+index a3fe1bce4..58e7207c4 100644
+--- a/src/cryptography/hazmat/backends/openssl/backend.py
++++ b/src/cryptography/hazmat/backends/openssl/backend.py
+@@ -2383,9 +2383,12 @@ class Backend:
+                 _Reasons.UNSUPPORTED_SERIALIZATION,
+             )
+ 
++        certs: list[x509.Certificate] = []
++        if p7.d.sign == self._ffi.NULL:
++            return certs
++
+         sk_x509 = p7.d.sign.cert
+         num = self._lib.sk_X509_num(sk_x509)
+-        certs = []
+         for i in range(num):
+             x509 = self._lib.sk_X509_value(sk_x509, i)
+             self.openssl_assert(x509 != self._ffi.NULL)
+diff --git a/tests/hazmat/primitives/test_pkcs7.py b/tests/hazmat/primitives/test_pkcs7.py
+index 4e61c5ef5..d8170bfb9 100644
+--- a/tests/hazmat/primitives/test_pkcs7.py
++++ b/tests/hazmat/primitives/test_pkcs7.py
+@@ -89,6 +89,12 @@ class TestPKCS7Loading:
+                 mode="rb",
+             )
+ 
++    def test_load_pkcs7_empty_certificates(self, backend):
++        der = b"\x30\x0B\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x07\x02"
++
++        certificates = pkcs7.load_der_pkcs7_certificates(der)
++        assert certificates == []
++
+ 
+ # We have no public verification API and won't be adding one until we get
+ # some requirements from users so this function exists to give us basic
diff --git a/nixpkgs/pkgs/tools/filesystems/chunkfs/default.nix b/nixpkgs/pkgs/tools/filesystems/chunkfs/default.nix
new file mode 100644
index 000000000000..e4a20e3da5a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/chunkfs/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, perl, fuse }:
+
+stdenv.mkDerivation rec {
+  version = "0.7";
+  pname = "chunkfs";
+
+  src = fetchurl {
+    url = "https://chunkfs.florz.de/chunkfs_${version}.tar.gz";
+    sha256 = "4c168fc2b265a6ba34afc565707ea738f34375325763c0596f2cfa1c9b8d40f1";
+  };
+
+  buildInputs = [perl fuse];
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = {
+    description = "FUSE filesystems for viewing chunksync-style directory trees as a block device and vice versa";
+    homepage = "http://chunkfs.florz.de/";
+    license = lib.licenses.gpl2;
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ciopfs/default.nix b/nixpkgs/pkgs/tools/filesystems/ciopfs/default.nix
new file mode 100644
index 000000000000..31311756ab47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ciopfs/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, pkg-config, fuse, glib, attr }:
+
+stdenv.mkDerivation rec {
+  pname = "ciopfs";
+  version = "0.4";
+
+  src = fetchurl {
+    url = "http://www.brain-dump.org/projects/ciopfs/ciopfs-${version}.tar.gz";
+    sha256 = "0sr9i9b3qfwbfvzvk00yrrg3x2xqk1njadbldkvn7hwwa4z5bm9l";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ fuse glib attr ];
+
+  makeFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
+
+  meta = {
+    homepage = "https://www.brain-dump.org/projects/ciopfs/";
+    description = "A case-insensitive filesystem layered on top of any other filesystem";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/cpcfs/default.nix b/nixpkgs/pkgs/tools/filesystems/cpcfs/default.nix
new file mode 100644
index 000000000000..93bfdd8d23fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/cpcfs/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, ncurses, readline, ronn }:
+
+stdenv.mkDerivation rec {
+
+  pname = "cpcfs";
+  version = "0.85.4";
+
+  src = fetchFromGitHub {
+    owner = "derikz";
+    repo = "cpcfs";
+    rev = "v${version}";
+    sha256 = "0rfbry0qy8mv746mzk9zdfffkdgq4w7invgb5cszjma2cp83q3i2";
+  };
+
+  sourceRoot = "${src.name}/src";
+
+  nativeBuildInputs = [ makeWrapper ncurses readline ronn ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace '-ltermcap' '-lncurses' \
+      --replace '-L /usr/lib/termcap' ' '
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    mkdir -p $out/man/man1
+    cp cpcfs $out/bin
+    ronn --roff ../template.doc --pipe > $out/man/man1/cpcfs.1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Manipulating CPC dsk images and files";
+    homepage = "https://github.com/derikz/cpcfs/" ;
+    license = licenses.bsd2;
+    maintainers = [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/cryfs/default.nix b/nixpkgs/pkgs/tools/filesystems/cryfs/default.nix
new file mode 100644
index 000000000000..588dcb320aa5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/cryfs/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchFromGitHub
+, cmake, pkg-config, python3
+, boost, curl, fuse, openssl, range-v3, spdlog
+# cryptopp and gtest on standby - using the vendored ones for now
+# see https://github.com/cryfs/cryfs/issues/369
+, llvmPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cryfs";
+  version = "0.11.4";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    hash = "sha256-OkJhLg+YzS3kDhlpUQe9A+OiVBPG/iKs6OU7aKFJ5wY=";
+  };
+
+  postPatch = ''
+    patchShebangs src
+
+    # remove tests that require network access
+    substituteInPlace test/cpp-utils/CMakeLists.txt \
+      --replace "network/CurlHttpClientTest.cpp" "" \
+      --replace "network/FakeHttpClientTest.cpp" ""
+
+    # remove CLI test trying to access /dev/fuse
+    substituteInPlace test/cryfs-cli/CMakeLists.txt \
+      --replace "CliTest_IntegrityCheck.cpp" "" \
+      --replace "CliTest_Setup.cpp" "" \
+      --replace "CliTest_WrongEnvironment.cpp" "" \
+      --replace "CryfsUnmountTest.cpp" ""
+
+    # downsize large file test as 4.5G is too big for Hydra
+    substituteInPlace test/cpp-utils/data/DataTest.cpp \
+      --replace "(4.5L*1024*1024*1024)" "(0.5L*1024*1024*1024)"
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config python3 ];
+
+  strictDeps = true;
+
+  buildInputs = [ boost curl fuse openssl range-v3 spdlog ]
+    ++ lib.optional stdenv.cc.isClang llvmPackages.openmp;
+
+  #nativeCheckInputs = [ gtest ];
+
+  cmakeFlags = [
+    "-DDEPENDENCY_CONFIG='../cmake-utils/DependenciesFromLocalSystem.cmake'"
+    "-DCRYFS_UPDATE_CHECKS:BOOL=FALSE"
+    "-DBoost_USE_STATIC_LIBS:BOOL=FALSE" # this option is case sensitive
+    "-DBUILD_TESTING:BOOL=${if doCheck then "TRUE" else "FALSE"}"
+  ]; # ++ lib.optional doCheck "-DCMAKE_PREFIX_PATH=${gtest.dev}/lib/cmake";
+
+  # macFUSE needs to be installed for the test to succeed on Darwin
+  doCheck = !stdenv.isDarwin;
+
+  checkPhase = ''
+    runHook preCheck
+    export HOME=$(mktemp -d)
+
+    # Skip CMakeFiles directory and tests depending on fuse (does not work well with sandboxing)
+    SKIP_IMPURE_TESTS="CMakeFiles|fspp|my-gtest-main"
+
+    for t in $(ls -d test/*/ | grep -E -v "$SKIP_IMPURE_TESTS") ; do
+      "./$t$(basename $t)-test"
+    done
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Cryptographic filesystem for the cloud";
+    homepage    = "https://www.cryfs.org/";
+    changelog   = "https://github.com/cryfs/cryfs/raw/${version}/ChangeLog.txt";
+    license     = licenses.lgpl3Only;
+    maintainers = with maintainers; [ peterhoeg c0bw3b ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/curlftpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/curlftpfs/default.nix
new file mode 100644
index 000000000000..1263ccb8565e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/curlftpfs/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, autoreconfHook, fuse, curl, pkg-config, glib, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "curlftpfs";
+  version = "0.9.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/curlftpfs/curlftpfs-${version}.tar.gz";
+    sha256 = "0n397hmv21jsr1j7zx3m21i7ryscdhkdsyqpvvns12q7qwwlgd2f";
+  };
+
+  patches = [
+    # This removes AC_FUNC_MALLOC and AC_FUNC_REALLOC from configure.ac because
+    # it is known to cause problems. Search online for "rpl_malloc" and
+    # "rpl_realloc" to find out more.
+    ./fix-rpl_malloc.patch
+    ./suse-bug-580609.patch
+    ./suse-bug-955687.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ fuse curl glib zlib ];
+
+  CFLAGS = lib.optionalString stdenv.isDarwin "-D__off_t=off_t";
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    # Fix the build on macOS with macFUSE installed. Needs autoreconfHook for
+    # this change to effect
+    substituteInPlace configure.ac --replace \
+      'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' \
+      ""
+  '';
+
+  doCheck = false; # fails, doesn't work well too, btw
+
+  meta = with lib; {
+    description = "Filesystem for accessing FTP hosts based on FUSE and libcurl";
+    homepage = "https://curlftpfs.sourceforge.net";
+    license = licenses.gpl2Only;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/curlftpfs/fix-rpl_malloc.patch b/nixpkgs/pkgs/tools/filesystems/curlftpfs/fix-rpl_malloc.patch
new file mode 100644
index 000000000000..0265e1d82893
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/curlftpfs/fix-rpl_malloc.patch
@@ -0,0 +1,13 @@
+diff -Naur a/configure.ac b/configure.ac
+--- a/configure.ac	2008-04-23 20:37:42.000000000 +0900
++++ b/configure.ac	2021-05-16 01:28:24.000000000 +0900
+@@ -46,9 +46,7 @@
+ 
+ # Checks for library functions.
+ AC_FUNC_CHOWN
+-AC_FUNC_MALLOC
+ AC_FUNC_MKTIME
+-AC_FUNC_REALLOC
+ AC_FUNC_SELECT_ARGTYPES
+ AC_FUNC_STRFTIME
+ AC_FUNC_UTIME_NULL
diff --git a/nixpkgs/pkgs/tools/filesystems/curlftpfs/suse-bug-580609.patch b/nixpkgs/pkgs/tools/filesystems/curlftpfs/suse-bug-580609.patch
new file mode 100644
index 000000000000..068fb129a4b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/curlftpfs/suse-bug-580609.patch
@@ -0,0 +1,10 @@
+--- a/ftpfs.c	2008-04-30 01:05:47.000000000 +0200
++++ b/ftpfs.c	2010-05-21 13:01:42.569006163 +0200
+@@ -503,7 +503,6 @@ static void *ftpfs_write_thread(void *da
+   
+   curl_easy_setopt_or_die(fh->write_conn, CURLOPT_URL, fh->full_path);
+   curl_easy_setopt_or_die(fh->write_conn, CURLOPT_UPLOAD, 1);
+-  curl_easy_setopt_or_die(fh->write_conn, CURLOPT_INFILESIZE, -1);
+   curl_easy_setopt_or_die(fh->write_conn, CURLOPT_READFUNCTION, write_data_bg);
+   curl_easy_setopt_or_die(fh->write_conn, CURLOPT_READDATA, fh);
+   curl_easy_setopt_or_die(fh->write_conn, CURLOPT_LOW_SPEED_LIMIT, 1);
diff --git a/nixpkgs/pkgs/tools/filesystems/curlftpfs/suse-bug-955687.patch b/nixpkgs/pkgs/tools/filesystems/curlftpfs/suse-bug-955687.patch
new file mode 100644
index 000000000000..b198c586e0cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/curlftpfs/suse-bug-955687.patch
@@ -0,0 +1,11 @@
+--- a/ftpfs.c
++++ b/ftpfs.c
+@@ -614,6 +614,8 @@ static void free_ftpfs_file(struct ftpfs
+   sem_destroy(&fh->data_need);
+   sem_destroy(&fh->data_written);
+   sem_destroy(&fh->ready);
++  if (fh->buf.size) { buf_free(&fh->buf); }
++  if (fh->stream_buf.size) { buf_free(&fh->stream_buf); }
+   free(fh);
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/filesystems/darling-dmg/default.nix b/nixpkgs/pkgs/tools/filesystems/darling-dmg/default.nix
new file mode 100644
index 000000000000..54d23e770db1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/darling-dmg/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, cmake, fuse, zlib, bzip2, openssl, libxml2, icu, lzfse, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "darling-dmg";
+  version = "1.0.4+git20200427";
+
+  src = fetchFromGitHub {
+    owner = "darlinghq";
+    repo = "darling-dmg";
+    rev = "71cc76c792db30328663272788c0b64aca27fdb0";
+    sha256 = "08iphkxlmjddrxpbm13gxyqwcrd0k65z3l1944n4pccb6qbyj8gv";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ fuse openssl zlib bzip2 libxml2 icu lzfse ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv ];
+
+  CXXFLAGS = [
+    "-DCOMPILE_WITH_LZFSE=1"
+    "-llzfse"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.darlinghq.org/";
+    description = "Darling lets you open macOS dmgs on Linux";
+    platforms = platforms.unix;
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ Luflosi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/davfs2/0001-umount_davfs-substitute-ps-command.patch b/nixpkgs/pkgs/tools/filesystems/davfs2/0001-umount_davfs-substitute-ps-command.patch
new file mode 100644
index 000000000000..3fbbc4c7d0fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/davfs2/0001-umount_davfs-substitute-ps-command.patch
@@ -0,0 +1,25 @@
+From 0cb1321c4cbb2978318ddad73c9ee6f2a19c55c8 Mon Sep 17 00:00:00 2001
+From: Florian Klink <flokli@flokli.de>
+Date: Sat, 11 Jan 2020 21:06:33 +0100
+Subject: [PATCH] umount_davfs: substitute ps command
+
+---
+ src/umount_davfs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/umount_davfs.c b/src/umount_davfs.c
+index b7019c3..a278679 100644
+--- a/src/umount_davfs.c
++++ b/src/umount_davfs.c
+@@ -157,7 +157,7 @@ main(int argc, char *argv[])
+     }
+     fclose(file);
+ 
+-    char *ps_command = ne_concat("ps -p ", pid, NULL);
++    char *ps_command = ne_concat("@ps@ -p ", pid, NULL);
+     FILE *ps_in = popen(ps_command, "r");
+     if (!ps_in) {
+         error(0, 0,
+-- 
+2.24.1
+
diff --git a/nixpkgs/pkgs/tools/filesystems/davfs2/0002-Make-sure-that-the-setuid-wrapped-umount-is-invoked.patch b/nixpkgs/pkgs/tools/filesystems/davfs2/0002-Make-sure-that-the-setuid-wrapped-umount-is-invoked.patch
new file mode 100644
index 000000000000..0f8741ca28f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/davfs2/0002-Make-sure-that-the-setuid-wrapped-umount-is-invoked.patch
@@ -0,0 +1,26 @@
+diff --git a/src/dav_fuse.c b/src/dav_fuse.c
+index 6311428..1b1698d 100644
+--- a/src/dav_fuse.c
++++ b/src/dav_fuse.c
+@@ -189,7 +189,7 @@ dav_fuse_loop(int device, char *mpoint, size_t bufsize, time_t idle_time,
+             pid_t pid = fork();
+             if (pid == 0) {
+ #if defined(__linux__)
+-                execl("/bin/umount", "umount", "-il", mountpoint, NULL);
++                execl("@wrapperDir@/umount", "umount", "-il", mountpoint, NULL);
+ #elif defined(__FreeBSD__)
+                 execl("/sbin/umount", "umount", "-v", mountpoint, NULL);
+ #endif
+diff --git a/src/umount_davfs.c b/src/umount_davfs.c
+index 6a82fd2..93958be 100644
+--- a/src/umount_davfs.c
++++ b/src/umount_davfs.c
+@@ -50,7 +50,7 @@
+ #endif
+ 
+ #if defined(__linux__)
+-#define UMOUNT_CMD "umount -i"
++#define UMOUNT_CMD "@wrapperDir@/umount -i"
+ #elif defined(__FreeBSD__)
+ #define UMOUNT_CMD "umount"
+ #endif
diff --git a/nixpkgs/pkgs/tools/filesystems/davfs2/default.nix b/nixpkgs/pkgs/tools/filesystems/davfs2/default.nix
new file mode 100644
index 000000000000..a64812e96b9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/davfs2/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv
+, fetchurl
+, autoreconfHook
+, neon
+, procps
+, substituteAll
+, zlib
+, wrapperDir ? "/run/wrappers/bin"
+}:
+
+stdenv.mkDerivation rec {
+  pname = "davfs2";
+  version = "1.7.0";
+
+  src = fetchurl {
+    url = "mirror://savannah/davfs2/davfs2-${version}.tar.gz";
+    sha256 = "sha256-JR23Wic4DMoTMLG5cXAMXl3MDJDlpHYiKF8BQO3+Oi8=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    zlib
+  ];
+
+  patches = [
+    ./fix-sysconfdir.patch
+    ./disable-suid.patch
+    (substituteAll {
+      src = ./0001-umount_davfs-substitute-ps-command.patch;
+      ps = "${procps}/bin/ps";
+    })
+    (substituteAll {
+      src = ./0002-Make-sure-that-the-setuid-wrapped-umount-is-invoked.patch;
+      inherit wrapperDir;
+    })
+  ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--with-neon=${lib.getLib neon}"
+  ];
+
+  meta = {
+    homepage = "https://savannah.nongnu.org/projects/davfs2";
+    description = "Mount WebDAV shares like a typical filesystem";
+    license = lib.licenses.gpl3Plus;
+
+    longDescription = ''
+      Web Distributed Authoring and Versioning (WebDAV), an extension to
+      the HTTP-protocol, allows authoring of resources on a remote web
+      server. davfs2 provides the ability to access such resources like
+      a typical filesystem, allowing for use by standard applications
+      with no built-in support for WebDAV.
+    '';
+
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/davfs2/disable-suid.patch b/nixpkgs/pkgs/tools/filesystems/davfs2/disable-suid.patch
new file mode 100644
index 000000000000..074e08d157cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/davfs2/disable-suid.patch
@@ -0,0 +1,9 @@
+diff --git a/src/Makefile.am b/src/Makefile.am
+index bbde353..bcbed04 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -54,4 +54,3 @@ LIBS += @LIBICONV@
+ endif
+ 
+ install-exec-hook:
+-	chmod u+s $(DESTDIR)$(sbindir)/mount.davfs;
diff --git a/nixpkgs/pkgs/tools/filesystems/davfs2/fix-sysconfdir.patch b/nixpkgs/pkgs/tools/filesystems/davfs2/fix-sysconfdir.patch
new file mode 100644
index 000000000000..7094a93a9f1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/davfs2/fix-sysconfdir.patch
@@ -0,0 +1,30 @@
+diff --git a/etc/Makefile.am b/etc/Makefile.am
+index 5a01282..6a40921 100644
+--- a/etc/Makefile.am
++++ b/etc/Makefile.am
+@@ -24,17 +24,17 @@ pkgsysconfdir = $(sysconfdir)/@PACKAGE@
+ 
+ install-data-local: $(dist_pkgdata_DATA)
+ 	@$(NORMAL_INSTALL)
+-	$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)
+-	$(INSTALL_DATA) -b $(srcdir)/davfs2.conf $(DESTDIR)$(pkgsysconfdir)/davfs2.conf
+-	$(INSTALL_DATA) -b -m 600 $(srcdir)/secrets $(DESTDIR)$(pkgsysconfdir)/secrets
+-	$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)/certs
+-	$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)/certs/private
+-	chmod 700 $(DESTDIR)$(pkgsysconfdir)/certs/private
++	$(mkinstalldirs) $(out)$(pkgsysconfdir)
++	$(INSTALL_DATA) -b $(srcdir)/davfs2.conf $(out)$(pkgsysconfdir)/davfs2.conf
++	$(INSTALL_DATA) -b -m 600 $(srcdir)/secrets $(out)$(pkgsysconfdir)/secrets
++	$(mkinstalldirs) $(out)$(pkgsysconfdir)/certs
++	$(mkinstalldirs) $(out)$(pkgsysconfdir)/certs/private
++	chmod 700 $(out)$(pkgsysconfdir)/certs/private
+ 
+ uninstall-local:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
+ 	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+-	  echo " rm -f $(DESTDIR)$(pkgsysconfdir)/$$f"; \
+-	  rm -f $(DESTDIR)$(pkgsysconfdir)/$$f; \
++	  echo " rm -f $(out)$(pkgsysconfdir)/$$f"; \
++	  rm -f $(out)$(pkgsysconfdir)/$$f; \
+ 	done
diff --git a/nixpkgs/pkgs/tools/filesystems/dduper/default.nix b/nixpkgs/pkgs/tools/filesystems/dduper/default.nix
new file mode 100644
index 000000000000..7f876df37ee1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/dduper/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchpatch, fetchFromGitHub, btrfs-progs, python3 }:
+
+let
+  btrfsProgsPatched = btrfs-progs.overrideAttrs {
+    patches = [
+      (fetchpatch {
+        url = "https://raw.githubusercontent.com/Lakshmipathi/dduper/1f1d29eff61430e118f88239545a29f0bcf3e15d/patch/btrfs-progs-v6.3.3/0001-Print-csum-for-a-given-file-on-stdout.patch";
+        hash = "sha256-bO0t8QePnUbMkQQPesZlBF/khD/H8AaWHr2GkOnT6x8=";
+      })
+    ];
+  };
+  py3 = python3.withPackages (ps: with ps; [
+    prettytable
+    numpy
+  ]);
+in
+stdenv.mkDerivation rec {
+  pname = "dduper";
+  version = "0.04";
+
+  src = fetchFromGitHub {
+    owner = "lakshmipathi";
+    repo = "dduper";
+    rev = "v${version}";
+    sha256 = "09ncdawxkffldadqhfblqlkdl05q2qmywxyg6p61fv3dr2f2v5wm";
+  };
+
+  buildInputs = [
+    btrfsProgsPatched
+    py3
+  ];
+
+  patchPhase = ''
+    substituteInPlace ./dduper --replace "/usr/sbin/btrfs.static" "${btrfsProgsPatched}/bin/btrfs"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m755 ./dduper $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Fast block-level out-of-band BTRFS deduplication tool";
+    homepage = "https://github.com/Lakshmipathi/dduper";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ thesola10 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/disk-inventory-x/default.nix b/nixpkgs/pkgs/tools/filesystems/disk-inventory-x/default.nix
new file mode 100644
index 000000000000..008781d4cd45
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/disk-inventory-x/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, undmg
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "disk-inventory-x";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "https://www.derlien.com/diskinventoryx/downloads/Disk%20Inventory%20X%20${finalAttrs.version}.dmg";
+    sha256 = "1rfqp8ia6ficvqxynn43f1pba4rfmhf61kn2ihysbnjs8c33bbvq";
+  };
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ undmg ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    cp -r *.app $out/Applications
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Disk usage utility for Mac OS X";
+    homepage = "https://www.derlien.com";
+    license = licenses.gpl3Plus;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ emilytrau Enzime ];
+    platforms = [ "x86_64-darwin" ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/filesystems/dislocker/default.nix b/nixpkgs/pkgs/tools/filesystems/dislocker/default.nix
new file mode 100644
index 000000000000..396f8142ba93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/dislocker/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, pkg-config
+, mbedtls_2
+, fuse
+}:
+
+
+stdenv.mkDerivation rec {
+  pname = "dislocker";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "aorimn";
+    repo = "dislocker";
+    rev = "v${version}";
+    sha256 = "1ak68s1v5dwh8y2dy5zjybmrh0pnqralmyqzis67y21m87g47h2k";
+  };
+
+  patches = [
+    # This patch
+    #   1. adds support for the latest FUSE on macOS
+    #   2. uses pkg-config to find libfuse instead of searching in predetermined
+    #      paths
+    #
+    # https://github.com/Aorimn/dislocker/pull/246
+    (fetchpatch {
+      url = "https://github.com/Aorimn/dislocker/commit/7744f87c75fcfeeb414d0957771042b10fb64e62.diff";
+      sha256 = "0bpyccbbfjsidsrd2q9qylb95nvi8g3glb3jss7xmhywj86bhzr5";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ fuse mbedtls_2 ];
+
+  meta = with lib; {
+    description = "Read BitLocker encrypted partitions in Linux";
+    homepage    = "https://github.com/aorimn/dislocker";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ elitak ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/disorderfs/default.nix b/nixpkgs/pkgs/tools/filesystems/disorderfs/default.nix
new file mode 100644
index 000000000000..27dc55fb9263
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/disorderfs/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, pkg-config, fuse, attr, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "disorderfs";
+  version = "0.5.11";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/d/disorderfs/disorderfs_${version}.orig.tar.bz2";
+    sha256 = "sha256-KqAMKVUykCgVdNyjacZjpVXqVdeob76v0iOuSd4TNIY=";
+  };
+
+  nativeBuildInputs = [ pkg-config asciidoc ];
+
+  buildInputs = [ fuse attr ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "An overlay FUSE filesystem that introduces non-determinism into filesystem metadata";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/djmount/default.nix b/nixpkgs/pkgs/tools/filesystems/djmount/default.nix
new file mode 100644
index 000000000000..d3a75e420db9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/djmount/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, pkg-config, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "djmount";
+  version = "0.71";
+  src = fetchurl {
+    url = "mirror://sourceforge/djmount/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0kqf0cy3h4cfiy5a2sigmisx0lvvsi1n0fbyb9ll5gacmy1b8nxa";
+  };
+
+  postPatch = ''
+    # Taken from https://github.com/pupnp/pupnp/pull/334/files
+    substituteInPlace libupnp/threadutil/inc/ithread.h \
+      --replace \
+        "#define ithread_mutexattr_setkind_np pthread_mutexattr_setkind_np" \
+        '#define ithread_mutexattr_setkind_np pthread_mutexattr_settype'
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ fuse ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: libupnp/upnp/.libs/libupnp.a(libupnp_la-gena_ctrlpt.o):libupnp/upnp/src/inc/upnpapi.h:163:
+  #     multiple definition of `pVirtualDirList'; libupnp/upnp/.libs/libupnp.a(libupnp_la-upnpapi.o):libupnp/upnp/src/inc/upnpapi.h:163: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  meta = {
+    homepage = "https://djmount.sourceforge.net/";
+    description = "UPnP AV client, mounts as a Linux filesystem the media content of compatible UPnP AV devices";
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.jagajaga ];
+    license = lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/dosfstools/default.nix b/nixpkgs/pkgs/tools/filesystems/dosfstools/default.nix
new file mode 100644
index 000000000000..eda54d341f9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/dosfstools/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config, libiconv, gettext, xxd }:
+
+stdenv.mkDerivation rec {
+  pname = "dosfstools";
+  version = "4.2";
+
+  src = fetchFromGitHub {
+    owner = "dosfstools";
+    repo = "dosfstools";
+    rev = "v${version}";
+    sha256 = "sha256-2gxB0lQixiHOHw8uTetHekaM57fvUd9zOzSxWnvUz/c=";
+  };
+
+  patches = [
+    # macOS and FreeBSD build fixes backported from master
+    # TODO: remove on the next release
+    (fetchpatch {
+      url = "https://github.com/dosfstools/dosfstools/commit/77ffb87e8272760b3bb2dec8f722103b0effb801.patch";
+      sha256 = "sha256-xHxIs3faHK/sK3vAVoG8JcTe4zAV+ZtkozWIIFBvPWI=";
+    })
+    (fetchpatch {
+      url = "https://github.com/dosfstools/dosfstools/commit/2d3125c4a74895eae1f66b93287031d340324524.patch";
+      sha256 = "nlIuRDsNjk23MKZL9cZ05odOfTXvsyQaKcv/xEr4c+U=";
+    })
+    # reproducible builds fix backported from master
+    # (respect SOURCE_DATE_EPOCH)
+    # TODO: remove on the next release
+    (fetchpatch {
+      url = "https://github.com/dosfstools/dosfstools/commit/8da7bc93315cb0c32ad868f17808468b81fa76ec.patch";
+      sha256 = "sha256-Quegj5uYZgACgjSZef6cjrWQ64SToGQxbxyqCdl8C7o=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ]
+    ++ lib.optional stdenv.isDarwin libiconv;
+
+  # configure.ac:75: error: required file './config.rpath' not found
+  # https://github.com/dosfstools/dosfstools/blob/master/autogen.sh
+  postPatch = ''
+    cp ${gettext}/share/gettext/config.rpath config.rpath
+  '';
+
+  configureFlags = [ "--enable-compat-symlinks" ];
+
+  nativeCheckInputs = [ xxd ];
+  doCheck = true;
+
+  meta = {
+    description = "Utilities for creating and checking FAT and VFAT file systems";
+    homepage = "https://github.com/dosfstools/dosfstools";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/duff/default.nix b/nixpkgs/pkgs/tools/filesystems/duff/default.nix
new file mode 100644
index 000000000000..f980c7613332
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/duff/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, gettext }:
+
+stdenv.mkDerivation {
+  pname = "duff";
+  # The last release (0.5.2) is more than 2 years old and lacks features like -D,
+  # limiting its usefulness. Upstream appears comatose if not dead.
+  version = "2014-07-03";
+
+  src = fetchFromGitHub {
+    sha256 = "1k2dx38pjzc5d624vw1cs5ipj9fprsm5vqv55agksc29m63lswnx";
+    rev = "f26d4837768b062a3f98fa075c791d9c8a0bb75c";
+    repo = "duff";
+    owner = "elmindreda";
+  };
+
+  nativeBuildInputs = [ autoreconfHook gettext ];
+
+  preAutoreconf = ''
+    # gettexttize rightly refuses to run non-interactively:
+    cp ${gettext}/bin/gettextize .
+    substituteInPlace gettextize \
+      --replace "read dummy" "echo '(Automatically acknowledged)' #"
+    ./gettextize
+    sed 's@po/Makefile.in\( .*\)po/Makefile.in@po/Makefile.in \1@' \
+      -i configure.ac
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Quickly find duplicate files";
+    longDescription = ''
+      Duff is a Unix command-line utility for quickly finding duplicates in
+      a given set of files.
+    '';
+    homepage = "https://duff.dreda.org/";
+    license = licenses.zlib;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/dupe-krill/Cargo.lock b/nixpkgs/pkgs/tools/filesystems/dupe-krill/Cargo.lock
new file mode 100644
index 000000000000..98c3d7157a1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/dupe-krill/Cargo.lock
@@ -0,0 +1,339 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "arrayref"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "blake3"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "cc",
+ "cfg-if",
+ "constant_time_eq",
+ "digest",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d91974fbbe88ec1df0c24a4f00f99583667a7e2e6272b2b92d294d81e462173"
+dependencies = [
+ "nix",
+ "winapi",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dupe-krill"
+version = "1.4.8"
+dependencies = [
+ "blake3",
+ "ctrlc",
+ "getopts",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "smallvec",
+ "tempdir",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+
+[[package]]
+name = "libc"
+version = "0.2.135"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c"
+
+[[package]]
+name = "nix"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb"
+dependencies = [
+ "autocfg",
+ "bitflags",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+
+[[package]]
+name = "serde"
+version = "1.0.145"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
+
+[[package]]
+name = "serde_derive"
+version = "1.0.145"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.102"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempdir"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+dependencies = [
+ "rand",
+ "remove_dir_all",
+]
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/nixpkgs/pkgs/tools/filesystems/dupe-krill/default.nix b/nixpkgs/pkgs/tools/filesystems/dupe-krill/default.nix
new file mode 100644
index 000000000000..8f962b65a329
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/dupe-krill/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dupe-krill";
+  version = "1.4.8";
+
+  src = fetchFromGitHub {
+    owner = "kornelski";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-2fT9bw5LgJUQ0tm1T/vV5SaDjNH0OGKt7QUQLd7nmOs=";
+    postFetch = ''
+      cp ${./Cargo.lock} $out/Cargo.lock
+    '';
+  };
+
+  cargoSha256 = "sha256-JUcIDUVzSLzblb2EbmSfuCAB+S0fyW6wpGF0b/xR+b0=";
+
+  meta = with lib; {
+    description = "A fast file deduplicator";
+    homepage = "https://github.com/kornelski/dupe-krill";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ urbas ];
+    mainProgram = "dupe-krill";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/duperemove/default.nix b/nixpkgs/pkgs/tools/filesystems/duperemove/default.nix
new file mode 100644
index 000000000000..c1d860256804
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/duperemove/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libgcrypt
+, pkg-config
+, glib
+, linuxHeaders ? stdenv.cc.libc.linuxHeaders
+, sqlite
+, util-linux
+, testers
+, duperemove
+}:
+
+stdenv.mkDerivation rec {
+  pname = "duperemove";
+  version = "0.14.1";
+
+  src = fetchFromGitHub {
+    owner = "markfasheh";
+    repo = "duperemove";
+    rev = "v${version}";
+    hash = "sha256-iMv80UKktYOhNfVA3mW6kKv8TwLZaP6MQt24t3Rchk4=";
+  };
+
+  postPatch = ''
+    substituteInPlace util.c --replace \
+      "lscpu" "${lib.getBin util-linux}/bin/lscpu"
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libgcrypt glib linuxHeaders sqlite util-linux ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "VERSION=v${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = duperemove;
+    command = "duperemove --version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "A simple tool for finding duplicated extents and submitting them for deduplication";
+    homepage = "https://github.com/markfasheh/duperemove";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ bluescreen303 thoughtpolice ];
+    platforms = platforms.linux;
+    mainProgram = "duperemove";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/dwarfs/default.nix b/nixpkgs/pkgs/tools/filesystems/dwarfs/default.nix
new file mode 100644
index 000000000000..abd99731de13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/dwarfs/default.nix
@@ -0,0 +1,101 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, substituteAll
+
+, bison
+, boost
+, cmake
+, double-conversion
+, fmt
+, fuse3
+, glog
+, gtest
+, jemalloc
+, libarchive
+, libevent
+, libunwind
+, lz4
+, openssl
+, pkg-config
+, ronn
+, xxHash
+, utf8cpp
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dwarfs";
+  version = "0.7.5";
+
+  src = fetchFromGitHub {
+    owner = "mhx";
+    repo = "dwarfs";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-Zzm2SaFR31TBBMDfgJulVbqsJBh1He2wBFzHRC/c5vg=";
+  };
+
+  patches = [
+    (with lib.versions; substituteAll {
+      src = ./version_info.patch;
+
+      versionFull = version; # displayed as version number (with v prepended)
+      versionMajor = major version;
+      versionMinor = minor version;
+      versionPatch = patch version;
+    })
+  ];
+
+  cmakeFlags = [
+    "-DPREFER_SYSTEM_ZSTD=ON"
+    "-DPREFER_SYSTEM_XXHASH=ON"
+    "-DPREFER_SYSTEM_GTEST=ON"
+    "-DPREFER_SYSTEM_LIBFMT=ON"
+
+    # may be added under an option in the future
+    # "-DWITH_LEGACY_FUSE=ON"
+    "-DWITH_TESTS=ON"
+  ];
+
+  nativeBuildInputs = [
+    bison
+    cmake
+    pkg-config
+    ronn
+  ];
+
+  buildInputs = [
+    # dwarfs
+    boost
+    fmt
+    fuse3
+    jemalloc
+    libarchive
+    lz4
+    xxHash
+    utf8cpp
+    zstd
+
+    # folly
+    double-conversion
+    glog
+    libevent
+    libunwind
+    openssl
+  ];
+
+  doCheck = true;
+  nativeCheckInputs = [ gtest ];
+  # these fail inside of the sandbox due to missing access
+  # to the FUSE device
+  GTEST_FILTER = "-dwarfs/tools_test.end_to_end/*:dwarfs/tools_test.mutating_ops/*";
+
+  meta = with lib; {
+    description = "A fast high compression read-only file system";
+    homepage = "https://github.com/mhx/dwarfs";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ keksbg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/dwarfs/version_info.patch b/nixpkgs/pkgs/tools/filesystems/dwarfs/version_info.patch
new file mode 100644
index 000000000000..8d62bd8d2295
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/dwarfs/version_info.patch
@@ -0,0 +1,58 @@
+diff --git a/cmake/package_version.cmake b/cmake/package_version.cmake
+new file mode 100644
+index 0000000..d4fdb9c
+--- /dev/null
++++ b/cmake/package_version.cmake
+@@ -0,0 +1,12 @@
++# autogenerated code, do not modify
++
++set(PRJ_GIT_REV "v@versionFull@")
++set(PRJ_GIT_DESC "v@versionFull@")
++set(PRJ_GIT_BRANCH "HEAD")
++set(PRJ_GIT_ID "v@versionFull@")
++set(PRJ_GIT_RELEASE_TAG "v@versionFull@")
++set(PRJ_VERSION_FULL "@versionFull@")
++set(PRJ_VERSION_SHORT "@versionFull@")
++set(PRJ_VERSION_MAJOR "@versionMajor@")
++set(PRJ_VERSION_MINOR "@versionMinor@")
++set(PRJ_VERSION_PATCH "@versionPatch@")
+diff --git a/include/dwarfs/version.h b/include/dwarfs/version.h
+new file mode 100644
+index 0000000..54cf86a
+--- /dev/null
++++ b/include/dwarfs/version.h
+@@ -0,0 +1,16 @@
++// autogenerated code, do not modify
++
++#pragma once
++
++#define PRJ_VERSION_MAJOR @versionMajor@
++#define PRJ_VERSION_MINOR @versionMinor@
++#define PRJ_VERSION_PATCH @versionPatch@
++
++namespace dwarfs {
++
++extern char const* PRJ_GIT_REV;
++extern char const* PRJ_GIT_DESC;
++extern char const* PRJ_GIT_BRANCH;
++extern char const* PRJ_GIT_ID;
++
++} // namespace dwarfs
+diff --git a/src/dwarfs/version.cpp b/src/dwarfs/version.cpp
+new file mode 100644
+index 0000000..5759120
+--- /dev/null
++++ b/src/dwarfs/version.cpp
+@@ -0,0 +1,12 @@
++// autogenerated code, do not modify
++
++#include "dwarfs/version.h"
++
++namespace dwarfs {
++
++char const* PRJ_GIT_REV = "@versionFull@";
++char const* PRJ_GIT_DESC = "v@versionFull@";
++char const* PRJ_GIT_BRANCH = "HEAD";
++char const* PRJ_GIT_ID = "v@versionFull@";
++
++} // namespace dwarfs
diff --git a/nixpkgs/pkgs/tools/filesystems/dysk/default.nix b/nixpkgs/pkgs/tools/filesystems/dysk/default.nix
new file mode 100644
index 000000000000..2dc4698f8172
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/dysk/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dysk";
+  version = "2.8.2";
+
+  src = fetchFromGitHub {
+    owner = "Canop";
+    repo = "dysk";
+    rev = "v${version}";
+    hash = "sha256-h/vdc7ltlXJQi1f013+fNyYB6fc0hTUcx4LN6UySIGM=";
+  };
+
+  cargoHash = "sha256-LC7A+fu4SqfsxT3K9gYJPx8G9h+7kXq0Nq70iSlfygE=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installManPage $releaseDir/build/*/out/dysk.1
+    installShellCompletion $releaseDir/build/*/out/{dysk.bash,dysk.fish,_dysk}
+  '';
+
+  meta = with lib; {
+    description = "Get information on your mounted disks";
+    homepage = "https://github.com/Canop/dysk";
+    changelog = "https://github.com/Canop/dysk/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda koral ];
+    mainProgram = "dysk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/e2fsprogs/default.nix b/nixpkgs/pkgs/tools/filesystems/e2fsprogs/default.nix
new file mode 100644
index 000000000000..a5ca282955f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/e2fsprogs/default.nix
@@ -0,0 +1,95 @@
+{ lib, stdenv, buildPackages, fetchurl, fetchpatch, pkg-config, libuuid, gettext, texinfo
+, withFuse ? stdenv.isLinux, fuse
+, shared ? !stdenv.hostPlatform.isStatic
+, e2fsprogs, runCommand
+}:
+
+stdenv.mkDerivation rec {
+  pname = "e2fsprogs";
+  version = "1.47.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    hash = "sha256-Zmev3lbu8MavJmhJdEAOTSKI6knpRBv15iKRldUaNXg=";
+  };
+
+  # fuse2fs adds 14mb of dependencies
+  outputs = [ "bin" "dev" "out" "man" "info" ]
+    ++ lib.optionals withFuse [ "fuse2fs" ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ pkg-config texinfo ];
+  buildInputs = [ libuuid gettext ]
+    ++ lib.optionals withFuse [ fuse ];
+
+  patches = [
+    (fetchpatch { # avoid using missing __GNUC_PREREQ(X,Y)
+      url = "https://raw.githubusercontent.com/void-linux/void-packages/9583597eb3e6e6b33f61dbc615d511ce030bc443/srcpkgs/e2fsprogs/patches/fix-glibcism.patch";
+      sha256 = "1gfcsr0i3q8q2f0lqza8na0iy4l4p3cbii51ds6zmj0y4hz2dwhb";
+      excludes = [ "lib/ext2fs/hashmap.h" ];
+      extraPrefix = "";
+    })
+    # Avoid trouble with older systems like NixOS 23.05.
+    # TODO: most likely drop this at some point, e.g. when 23.05 loses support.
+    (fetchurl {
+      name = "mke2fs-avoid-incompatible-features.patch";
+      url = "https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/plain/debian/patches/disable-metadata_csum_seed-and-orphan_file-by-default?h=debian/master&id=3fb3d18baba90e5d48d94f4c0b79b2d271b0c913";
+      hash = "sha256-YD11K4s2bqv0rvzrxtaiodzLp3ztULlOlPUf1XcpxRY=";
+    })
+  ];
+
+  configureFlags =
+    if stdenv.isLinux then [
+      # It seems that the e2fsprogs is one of the few packages that cannot be
+      # build with shared and static libs.
+      (if shared then "--enable-elf-shlibs" else "--disable-elf-shlibs")
+      "--enable-symlink-install"
+      "--enable-relative-symlinks"
+      "--with-crond-dir=no"
+      # fsck, libblkid, libuuid and uuidd are in util-linux-ng (the "libuuid" dependency)
+      "--disable-fsck"
+      "--disable-libblkid"
+      "--disable-libuuid"
+      "--disable-uuidd"
+    ] else [
+      "--enable-libuuid --disable-e2initrd-helper"
+    ];
+
+  nativeCheckInputs = [ buildPackages.perl ];
+  doCheck = true;
+
+  postInstall = ''
+    # avoid cycle between outputs
+    if [ -f $out/lib/${pname}/e2scrub_all_cron ]; then
+      mv $out/lib/${pname}/e2scrub_all_cron $bin/bin/
+    fi
+  '' + lib.optionalString withFuse ''
+    mkdir -p $fuse2fs/bin
+    mv $bin/bin/fuse2fs $fuse2fs/bin/fuse2fs
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = {
+    simple-filesystem = runCommand "e2fsprogs-create-fs" {} ''
+      mkdir -p $out
+      truncate -s10M $out/disc
+      ${e2fsprogs}/bin/mkfs.ext4 $out/disc | tee $out/success
+      ${e2fsprogs}/bin/e2fsck -n $out/disc | tee $out/success
+      [ -e $out/success ]
+    '';
+  };
+  meta = with lib; {
+    homepage = "https://e2fsprogs.sourceforge.net/";
+    changelog = "https://e2fsprogs.sourceforge.net/e2fsprogs-release.html#${version}";
+    description = "Tools for creating and checking ext2/ext3/ext4 filesystems";
+    license = with licenses; [
+      gpl2Plus
+      lgpl2Plus # lib/ext2fs, lib/e2p
+      bsd3      # lib/uuid
+      mit       # lib/et, lib/ss
+    ];
+    platforms = platforms.unix;
+    maintainers = [ maintainers.eelco ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/e2tools/default.nix b/nixpkgs/pkgs/tools/filesystems/e2tools/default.nix
new file mode 100644
index 000000000000..d448b0f67b5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/e2tools/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, e2fsprogs }:
+
+stdenv.mkDerivation rec {
+  pname = "e2tools";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "e2tools";
+    repo = "e2tools";
+    rev = "6ee7c2d9015dce7b90c3388096602e307e3bd790";
+    sha256 = "0nlqynrhj6ww7bnfhhfcx6bawii8iyvhgp6vz60zbnpgd68ifcx7";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ e2fsprogs ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = "https://e2tools.github.io/";
+    description = "Utilities to read/write/manipulate files in an ext2/ext3 filesystem";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/eiciel/default.nix b/nixpkgs/pkgs/tools/filesystems/eiciel/default.nix
new file mode 100644
index 000000000000..a3f7378c205c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/eiciel/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, acl
+, gnome
+, glibmm_2_68
+, gtkmm4
+, meson
+, ninja
+, pkg-config
+, itstool
+, wrapGAppsHook4
+, gtk4
+}:
+
+stdenv.mkDerivation rec {
+  pname = "eiciel";
+  version = "0.10.0";
+
+  outputs = [ "out" "nautilusExtension" ];
+
+  src = fetchFromGitHub {
+    owner = "rofirrim";
+    repo = "eiciel";
+    rev = version;
+    sha256 = "0lhnrxhbg80pqjy9f8yiqi7x48rb6m2cmkffv25ssjynsmdnar0s";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    itstool
+    wrapGAppsHook4
+    gtk4
+  ];
+
+  buildInputs = [
+    acl
+    glibmm_2_68
+    gtkmm4
+    gnome.nautilus
+  ];
+
+  mesonFlags = [
+    "-Dnautilus-extension-dir=${placeholder "nautilusExtension"}/lib/nautilus/extensions-4"
+  ];
+
+  meta = with lib; {
+    description = "Graphical editor for ACLs and extended attributes";
+    homepage = "https://rofi.roger-ferrer.org/eiciel/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ sersorrel ];
+    platforms = platforms.linux;
+    mainProgram = "eiciel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/encfs/default.nix b/nixpkgs/pkgs/tools/filesystems/encfs/default.nix
new file mode 100644
index 000000000000..966c39682392
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/encfs/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, cmake, pkg-config, perl
+, gettext, fuse, openssl, tinyxml2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "encfs";
+  version = "1.9.5";
+
+  src = fetchFromGitHub {
+    sha256 = "099rjb02knr6yz7przlnyj62ic0ag5ncs7vvcc36ikyqrmpqsdch";
+    rev = "v${version}";
+    repo = "encfs";
+    owner = "vgough";
+  };
+
+  patches = lib.optionals stdenv.cc.isClang [
+    # Fixes a build failure when building with newer versions of clang.
+    # https://github.com/vgough/encfs/pull/650
+    (fetchpatch {
+      url = "https://github.com/vgough/encfs/commit/406b63bfe234864710d1d23329bf41d48001fbfa.patch";
+      hash = "sha256-VunC5ICRJBgCXqkr7ad7DPzweRJr1bdOpo1LKNCs4zY=";
+    })
+  ];
+
+  buildInputs = [ gettext fuse openssl tinyxml2 ];
+  nativeBuildInputs = [ cmake pkg-config perl ];
+
+  cmakeFlags =
+    [ "-DUSE_INTERNAL_TINYXML=OFF"
+      "-DBUILD_SHARED_LIBS=ON"
+      "-DINSTALL_LIBENCFS=ON"
+    ];
+
+  meta = with lib; {
+    description = "An encrypted filesystem in user-space via FUSE";
+    homepage = "https://vgough.github.io/encfs";
+    license = with licenses; [ gpl3Plus lgpl3Plus ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/envfs/default.nix b/nixpkgs/pkgs/tools/filesystems/envfs/default.nix
new file mode 100644
index 000000000000..e91df03f7da1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/envfs/default.nix
@@ -0,0 +1,28 @@
+{ rustPlatform, lib, fetchFromGitHub, nixosTests }:
+rustPlatform.buildRustPackage rec {
+  pname = "envfs";
+  version = "1.0.3";
+  src = fetchFromGitHub {
+    owner = "Mic92";
+    repo = "envfs";
+    rev = version;
+    hash = "sha256-WbMqh/MzEMfZmKl/DNBGnzG3l8unFmAYbG6feSiMz+Y=";
+  };
+  cargoHash = "sha256-RoreNBZvTsVY87nbVibJBy4gsafFwAMctVncAhhiaP8=";
+
+  passthru.tests = {
+    envfs = nixosTests.envfs;
+  };
+
+  postInstall = ''
+    ln -s envfs $out/bin/mount.envfs
+    ln -s envfs $out/bin/mount.fuse.envfs
+  '';
+  meta = with lib; {
+    description = "Fuse filesystem that returns symlinks to executables based on the PATH of the requesting process";
+    homepage = "https://github.com/Mic92/envfs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mic92 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/erofs-utils/default.nix b/nixpkgs/pkgs/tools/filesystems/erofs-utils/default.nix
new file mode 100644
index 000000000000..5346403fa0e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/erofs-utils/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, fuse, util-linux, lz4, xz, zlib, libselinux
+, fuseSupport ? stdenv.isLinux
+, selinuxSupport ? false
+, lzmaSupport ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "erofs-utils";
+  version = "1.7.1";
+  outputs = [ "out" "man" ];
+
+  src = fetchurl {
+    url =
+      "https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/snapshot/erofs-utils-${version}.tar.gz";
+    hash = "sha256-GWCD1j5eIx+1eZ586GqUS7ylZNqrzj3pIlqKyp3K/xU=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ util-linux lz4 zlib ]
+    ++ lib.optionals fuseSupport [ fuse ]
+    ++ lib.optionals selinuxSupport [ libselinux ]
+    ++ lib.optionals lzmaSupport [ xz ];
+
+  configureFlags = [
+    "MAX_BLOCK_SIZE=4096"
+  ] ++ lib.optional fuseSupport "--enable-fuse"
+    ++ lib.optional selinuxSupport "--with-selinux"
+    ++ lib.optional lzmaSupport "--enable-lzma";
+
+  meta = with lib; {
+    homepage = "https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/about/";
+    description = "Userspace utilities for linux-erofs file system";
+    changelog = "https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/tree/ChangeLog?h=v${version}";
+    license = with licenses; [ gpl2Plus ];
+    maintainers = with maintainers; [ ehmry nikstur ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/exfat/default.nix b/nixpkgs/pkgs/tools/filesystems/exfat/default.nix
new file mode 100644
index 000000000000..831f19c68f68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/exfat/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "exfat";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "relan";
+    repo = "exfat";
+    rev = "v${version}";
+    sha256 = "sha256-5m8fiItEOO6piR132Gxq6SHOPN1rAFTuTVE+UI0V00k=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ fuse ];
+
+  meta = with lib; {
+    description = "Free exFAT file system implementation";
+    inherit (src.meta) homepage;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dywedir ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/exfatprogs/default.nix b/nixpkgs/pkgs/tools/filesystems/exfatprogs/default.nix
new file mode 100644
index 000000000000..dafdd2c830a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/exfatprogs/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook, file }:
+
+stdenv.mkDerivation rec {
+  pname = "exfatprogs";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-2j+N/H+Vdy3Q6Ie2gBGkNKtLjt19RDvm9HZMS5l3L5Y=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook file ];
+
+  meta = with lib; {
+    description = "exFAT filesystem userspace utilities";
+    homepage = "https://github.com/exfatprogs/exfatprogs";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ zane ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ext4magic/default.nix b/nixpkgs/pkgs/tools/filesystems/ext4magic/default.nix
new file mode 100644
index 000000000000..bb23f58c38c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ext4magic/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, fetchpatch, file, libuuid, e2fsprogs, zlib, bzip2 }:
+
+stdenv.mkDerivation rec {
+  version = "0.3.2";
+  pname = "ext4magic";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ext4magic/${pname}-${version}.tar.gz";
+    sha256 = "8d9c6a594f212aecf4eb5410d277caeaea3adc03d35378257dfd017ef20ea115";
+  };
+
+  patches = [
+    (fetchpatch {
+        url = "https://sourceforge.net/p/ext4magic/tickets/10/attachment/ext4magic-0.3.2-i_dir_acl.patch";
+        sha256 = "1accydd8kigid68yir2fbihm3r3x8ws3iyznp25snkx41w6y6x8c";
+    })
+    ./glibc-fix.patch
+  ];
+
+  buildInputs = [ file libuuid e2fsprogs zlib bzip2 ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Recover / undelete files from ext3 or ext4 partitions";
+    longDescription = ''
+      ext4magic can recover/undelete files from ext3 or ext4 partitions
+      by retrieving file-information from the filesystem journal.
+
+      If the information in the journal are sufficient, ext4magic can
+      recover the most file types, with original filename, owner and group,
+      file mode bits and also the old atime/mtime stamps.
+
+      It's much more effective and works much better than extundelete.
+    '';
+    homepage = "https://ext4magic.sourceforge.net/ext4magic_en.html";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.rkoe ];
+    mainProgram = "ext4magic";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ext4magic/glibc-fix.patch b/nixpkgs/pkgs/tools/filesystems/ext4magic/glibc-fix.patch
new file mode 100644
index 000000000000..906609788939
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ext4magic/glibc-fix.patch
@@ -0,0 +1,12 @@
+diff --git a/src/recover.c b/src/recover.c
+index 41b4aee..30b5d8f 100644
+--- a/src/recover.c
++++ b/src/recover.c
+@@ -24,6 +24,7 @@
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <utime.h>
++#include <sys/sysmacros.h>
+ 
+ #ifndef O_LARGEFILE
+ #define O_LARGEFILE 0
diff --git a/nixpkgs/pkgs/tools/filesystems/extundelete/default.nix b/nixpkgs/pkgs/tools/filesystems/extundelete/default.nix
new file mode 100644
index 000000000000..0c3062fb11ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/extundelete/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, e2fsprogs }:
+
+stdenv.mkDerivation {
+  version = "0.2.4";
+  pname = "extundelete";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/extundelete/extundelete-0.2.4.tar.bz2";
+    sha256 = "1x0r7ylxlp9lbj3d7sqf6j2a222dwy2nfpff05jd6mkh4ihxvyd1";
+  };
+
+  buildInputs = [ e2fsprogs ];
+
+  # inode field i_dir_acl was repurposed as i_size_high in e2fsprogs 1.44,
+  # breaking the build
+  patchPhase = ''
+    substituteInPlace src/insertionops.cc \
+      --replace "Directory ACL:" "High 32 bits of size:" \
+      --replace "inode.i_dir_acl" "inode.i_size_high"
+  '';
+
+  meta = with lib; {
+    description = "Utility that can recover deleted files from an ext3 or ext4 partition";
+    homepage = "https://extundelete.sourceforge.net/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.domenkozar ];
+    mainProgram = "extundelete";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/f2fs-tools/default.nix b/nixpkgs/pkgs/tools/filesystems/f2fs-tools/default.nix
new file mode 100644
index 000000000000..811adfadb55b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/f2fs-tools/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchzip, autoreconfHook, libselinux, libuuid, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "f2fs-tools";
+  version = "1.16.0";
+
+  src = fetchzip {
+    url = "https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/snapshot/f2fs-tools-v${version}.tar.gz";
+    sha256 = "sha256-zNG1F//+BTBzlEc6qNVixyuCB6PMZD5Kf8pVK0ePYiA=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libselinux libuuid ];
+
+  patches = [ ./f2fs-tools-cross-fix.patch ];
+
+  meta = with lib; {
+    homepage = "https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/";
+    description = "Userland tools for the f2fs filesystem";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ehmry jagajaga ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/f2fs-tools/f2fs-tools-cross-fix.patch b/nixpkgs/pkgs/tools/filesystems/f2fs-tools/f2fs-tools-cross-fix.patch
new file mode 100644
index 000000000000..e01a97b0bc3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/f2fs-tools/f2fs-tools-cross-fix.patch
@@ -0,0 +1,29 @@
+diff --git a/configure.ac b/configure.ac
+index 9b0e872..0108219 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -20,14 +20,16 @@ AC_DEFINE([F2FS_MINOR_VERSION], m4_bpatsubst(f2fs_tools_version,
+ 				[\([0-9]*\).\([0-9]*\)\(\w\|\W\)*], [\2]),
+ 				[Minor version for f2fs-tools])
+ 
+-AS_IF([test -d .git],[
+-	AC_DEFINE([F2FS_TOOLS_DATE],
+-		"m4_bpatsubst(f2fs_tools_gitdate,
+-		[\([0-9-]*\)\(\w\|\W\)*], [\1])",
+-		[f2fs-tools date based on Git commits])],[
+-	AC_DEFINE([F2FS_TOOLS_DATE],
+-		"f2fs_tools_date",
+-		[f2fs-tools date based on Source releases])])
++dnl AS_IF([test -d .git],[
++dnl	AC_DEFINE([F2FS_TOOLS_DATE],
++dnl		"m4_bpatsubst(f2fs_tools_gitdate,
++dnl		[\([0-9-]*\)\(\w\|\W\)*], [\1])",
++dnl		[f2fs-tools date based on Git commits])],[
++dnl	AC_DEFINE([F2FS_TOOLS_DATE],
++dnl		"f2fs_tools_date",
++dnl		[f2fs-tools date based on Source releases])])
++
++AC_DEFINE([F2FS_TOOLS_DATE], "f2fs_tools_date", [f2fs-tools date based on Source releases])
+ 
+ AC_CONFIG_SRCDIR([config.h.in])
+ AC_CONFIG_HEADER([config.h])
diff --git a/nixpkgs/pkgs/tools/filesystems/f3/default.nix b/nixpkgs/pkgs/tools/filesystems/f3/default.nix
new file mode 100644
index 000000000000..ebdedd5b4aa3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/f3/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, parted
+, systemd
+, argp-standalone
+}:
+
+stdenv.mkDerivation rec {
+  pname = "f3";
+  version = "8.0";
+
+  src = fetchFromGitHub {
+    owner = "AltraMayor";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "17l5vspfcgfbkqg7bakp3gql29yb05gzawm8n3im30ilzdr53678";
+  };
+
+  postPatch = ''
+    sed -i 's/-oroot -groot//' Makefile
+
+    for f in f3write.h2w log-f3wr; do
+     substituteInPlace $f \
+       --replace '$(dirname $0)' $out/bin
+    done
+  '';
+
+  buildInputs = lib.optionals stdenv.isLinux [ systemd parted ]
+    ++ lib.optionals stdenv.isDarwin [ argp-standalone ];
+
+  buildFlags = [
+    "all" # f3read, f3write
+  ]
+  ++ lib.optional stdenv.isLinux "extra"; # f3brew, f3fix, f3probe
+
+  installFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  installTargets = [
+    "install"
+  ]
+  ++ lib.optional stdenv.isLinux "install-extra";
+
+  postInstall = ''
+    install -Dm555 -t $out/bin f3write.h2w log-f3wr
+    install -Dm444 -t $out/share/doc/${pname} LICENSE README.rst
+  '';
+
+  meta = with lib; {
+    description = "Fight Flash Fraud";
+    homepage = "https://fight-flash-fraud.readthedocs.io/en/stable/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ makefu evils ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fatresize/default.nix b/nixpkgs/pkgs/tools/filesystems/fatresize/default.nix
new file mode 100644
index 000000000000..80f7e5ecd4ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fatresize/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, parted, util-linux, pkg-config }:
+
+stdenv.mkDerivation rec {
+
+  version = "1.1.0";
+  pname = "fatresize";
+
+  src = fetchFromGitHub {
+    owner = "ya-mouse";
+    repo = "fatresize";
+    rev = "v${version}";
+    sha256 = "1vhz84kxfyl0q7mkqn68nvzzly0a4xgzv76m6db0bk7xyczv1qr2";
+  };
+
+  buildInputs = [ parted util-linux ];
+  nativeBuildInputs = [ pkg-config ];
+
+  propagatedBuildInputs = [ parted util-linux ];
+
+  meta = with lib; {
+    description = "The FAT16/FAT32 non-destructive resizer";
+    homepage = "https://github.com/ya-mouse/fatresize";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    mainProgram = "fatresize";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fatsort/default.nix b/nixpkgs/pkgs/tools/filesystems/fatsort/default.nix
new file mode 100644
index 000000000000..d1604e49a32e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fatsort/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchurl
+, help2man
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.6.5.640";
+  pname = "fatsort";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/fatsort/${pname}-${version}.tar.xz";
+    sha256 = "sha256-Yw7OVtnrOlVSSvCuw6reeFQ2DrqUkXKmz7R2jLj75C4=";
+  };
+
+  buildInputs = [ help2man libiconv ];
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "LD=${stdenv.cc.targetPrefix}cc"
+
+    "UNAME_O=${stdenv.hostPlatform.uname.system}"
+    "UNAME_S=${stdenv.hostPlatform.uname.system}"
+  ];
+
+  # make install target is broken (DESTDIR usage is insane)
+  # it's easier to just skip make and install manually
+  installPhase = ''
+    runHook preInstall
+    install -D -m 755 ./src/fatsort   $out/bin/fatsort
+    install -D -m 644 ./man/fatsort.1 $out/man/man1/fatsort.1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "http://fatsort.sourceforge.net/";
+    description = "Sorts FAT partition table, for devices that don't do sorting of files";
+    maintainers = [ maintainers.kovirobi ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    mainProgram = "fatsort";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/file-rename/default.nix b/nixpkgs/pkgs/tools/filesystems/file-rename/default.nix
new file mode 100644
index 000000000000..8bc7a899cd3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/file-rename/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, perl, perlPackages }:
+
+perlPackages.buildPerlPackage {
+  pname = "File-Rename";
+  version = "0.20";
+
+  src = fetchurl {
+    url = "mirror://cpan/authors/id/R/RM/RMBARKER/File-Rename-0.20.tar.gz";
+    sha256 = "1cf6xx2hiy1xalp35fh8g73j67r0w0g66jpcbc6971x9jbm7bvjy";
+  };
+
+  # Fix an incorrect platform test that misidentifies Darwin as Windows
+  postPatch = ''
+    substituteInPlace Makefile.PL \
+      --replace '/win/i' '/MSWin32/'
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/bin/rename \
+      --replace "#!${perl}/bin/perl" "#!${perl}/bin/perl -I $out/${perl.libPrefix}"
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Perl extension for renaming multiple files";
+    license = licenses.artistic1;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "rename";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/default.nix b/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/default.nix
new file mode 100644
index 000000000000..86db1f4872a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, fuse, p7zip, autoconf, automake, pkg-config, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "fuse-7z-ng";
+  version = "unstable-2014-06-08";
+
+  src = fetchFromGitHub {
+    owner = "kedazo";
+    repo = pname;
+    rev = "eb5efb1f304c2b7bc2e0389ba06c9bf2ac4b932c";
+    sha256 = "17v1gcmg5q661b047zxjar735i4d3508dimw1x3z1pk4d1zjhp3x";
+  };
+  patches = [
+    # Drop unused pthread library. pthread_yield()
+    # fails the configure.
+    ./no-pthread.patch
+    # Zero-initialize unset fields of `struct fuse_operations` so that
+    # garbage values don't cause segfault.
+    # <https://github.com/kedazo/fuse-7z-ng/pull/8>
+    ./zero-init-fuse-operations.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config makeWrapper autoconf automake ];
+  buildInputs = [ fuse ];
+
+  preConfigure = "./autogen.sh";
+
+  libs = lib.makeLibraryPath [ p7zip ]; # 'cause 7z.so is loaded manually
+  postInstall = ''
+    wrapProgram $out/bin/${pname} --suffix LD_LIBRARY_PATH : "${libs}/p7zip"
+
+    mkdir -p $out/share/doc/${pname}
+    cp TODO README NEWS COPYING ChangeLog AUTHORS $out/share/doc/${pname}/
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "A FUSE-based filesystem that uses the p7zip library";
+    longDescription = ''
+      fuse-7z-ng is a FUSE file system that uses the p7zip
+      library to access all archive formats supported by 7-zip.
+
+      This project is a fork of fuse-7z ( https://gitorious.org/fuse-7z/fuse-7z ).
+    '';
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+    mainProgram = "fuse-7z-ng";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/no-pthread.patch b/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/no-pthread.patch
new file mode 100644
index 000000000000..193090defebc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/no-pthread.patch
@@ -0,0 +1,11 @@
+pthread_yield() is not used by fuse-7z-ng, fails configure.
+--- a/configure.ac
++++ b/configure.ac
+@@ -25,7 +25,6 @@ AC_CHECK_HEADERS([fcntl.h stddef.h string.h unistd.h dlfcn.h dirent.h])
+ AC_CHECK_FUNCS([memset memmove])
+ AC_CHECK_FUNCS([sqrt])
+ 
+-AC_CHECK_LIB([pthread], [pthread_yield],,AC_MSG_ERROR([pthread library not found.]))
+ AC_CHECK_LIB([dl], [dlclose])
+ 
+ PKG_CHECK_MODULES([fuse], [fuse >= 2.8])
diff --git a/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/zero-init-fuse-operations.patch b/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/zero-init-fuse-operations.patch
new file mode 100644
index 000000000000..35acdaa04542
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/zero-init-fuse-operations.patch
@@ -0,0 +1,13 @@
+Zero-initialize unset fields of `struct fuse_operations`.
+<https://github.com/kedazo/fuse-7z-ng/pull/8>
+--- a/src/main.cpp
++++ b/src/main.cpp
+@@ -195,7 +195,7 @@ main (int argc, char **argv)
+         mkdir(param.mountpoint, 0750);
+     }
+ 
+-    struct fuse_operations fuse7z_oper;
++    struct fuse_operations fuse7z_oper = {0};
+     fuse7z_oper.init = fuse7z_init;
+     fuse7z_oper.destroy = fuse7z_destroy;
+     fuse7z_oper.readdir = fuse7z_readdir;
diff --git a/nixpkgs/pkgs/tools/filesystems/fuse-archive/default.nix b/nixpkgs/pkgs/tools/filesystems/fuse-archive/default.nix
new file mode 100644
index 000000000000..58f48a264498
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuse-archive/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fuse
+, libarchive
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fuse-archive";
+  version = "0.1.14";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "fuse-archive";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-l4tIK157Qo4m611etwMSk564+eC28x4RbmjX3J57/7Q=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    fuse
+    libarchive
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-D_FILE_OFFSET_BITS=64";
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "Serve an archive or a compressed file as a read-only FUSE file system";
+    homepage = "https://github.com/google/fuse-archive";
+    changelog = "https://github.com/google/fuse-archive/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ icyrockcom ];
+    mainProgram = "fuse-archive";
+  };
+
+  inherit (fuse.meta) platforms;
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fuse-ext2/darwin-no-installer.patch b/nixpkgs/pkgs/tools/filesystems/fuse-ext2/darwin-no-installer.patch
new file mode 100644
index 000000000000..6886bc4fd172
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuse-ext2/darwin-no-installer.patch
@@ -0,0 +1,31 @@
+diff --git a/fuse-ext2/Makefile.am b/fuse-ext2/Makefile.am
+index 9d3a065..c73f337 100644
+--- a/fuse-ext2/Makefile.am
++++ b/fuse-ext2/Makefile.am
+@@ -113,7 +113,7 @@ fuse_ext2_CFLAGS = \
+ 	-DHAVE_CONFIG_H \
+ 	-I/usr/local/include
+ 
+-if DARWIN
++if FALSE
+ bin_PROGRAMS += \
+ 	fuse-ext2.wait \
+ 	fuse-ext2.install \
+@@ -151,9 +151,6 @@ endif
+ if DARWIN
+ install-exec-local:
+ 	$(INSTALL) -d "$(DESTDIR)/$(sbindir)"
+-	$(LN_S) -f "/Library/Filesystems/fuse-ext2.fs/Contents/Resources/mount_fuse-ext2" "$(DESTDIR)/$(sbindir)/mount_fuse-ext2"
+-	$(LN_S) -f "/usr/local/opt/e2fsprogs/sbin/e2label" "$(DESTDIR)/$(sbindir)/e2label"
+-	$(LN_S) -f "/usr/local/opt/e2fsprogs/sbin/mke2fs" "$(DESTDIR)/$(sbindir)/mke2fs"
+ endif
+ if LINUX
+ install-data-hook:
+diff --git a/tools/Makefile.am b/tools/Makefile.am
+index 52f81e1..78c418f 100644
+--- a/tools/Makefile.am
++++ b/tools/Makefile.am
+@@ -1,2 +1,2 @@
+ 
+-SUBDIRS = macosx
++SUBDIRS =
diff --git a/nixpkgs/pkgs/tools/filesystems/fuse-ext2/default.nix b/nixpkgs/pkgs/tools/filesystems/fuse-ext2/default.nix
new file mode 100644
index 000000000000..aaff185a4a1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuse-ext2/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, e2fsprogs
+, fuse
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "fuse-ext2";
+  version = "unstable-2020-07-12";
+
+  src = fetchFromGitHub {
+    owner = "alperakcan";
+    repo = "fuse-ext2";
+    rev = "899f17c982dadcea13aa447c3a83c53b9431435a";
+    sha256 = "AE7Z+HePAy/h2TCNI9tsz6GVLdnE2AIOM3GnQzerKn8=";
+  };
+
+  patches = [
+    # Remove references to paths outside the nix store
+    ./remove-impure-paths.patch
+    # Don't build macOS desktop installer
+    ./darwin-no-installer.patch
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    e2fsprogs
+    fuse
+  ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=incompatible-function-pointer-types";
+
+  meta = with lib; {
+    description = "FUSE module to mount ext2, ext3 and ext4 with read write support";
+    homepage = "https://github.com/alperakcan/fuse-ext2";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.unix;
+    mainProgram = "fuse-ext2";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/filesystems/fuse-ext2/remove-impure-paths.patch b/nixpkgs/pkgs/tools/filesystems/fuse-ext2/remove-impure-paths.patch
new file mode 100644
index 000000000000..02a8b1e5a826
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuse-ext2/remove-impure-paths.patch
@@ -0,0 +1,35 @@
+diff --git a/fuse-ext2/Makefile.am b/fuse-ext2/Makefile.am
+index 9d3a065..0bb4341 100644
+--- a/fuse-ext2/Makefile.am
++++ b/fuse-ext2/Makefile.am
+@@ -17,8 +17,7 @@ fuse_ext2_probe_SOURCES = \
+ 
+ fuse_ext2_probe_CFLAGS = \
+ 	-Wall \
+-	-DHAVE_CONFIG_H \
+-	-I/usr/local/include
++	-DHAVE_CONFIG_H
+ 
+ fuse_ext2_SOURCES =	\
+ 	fuse-ext2.h \
+@@ -98,9 +97,7 @@ umfuseext2_la_CFLAGS = \
+ 	-Wall \
+ 	-DHAVE_CONFIG_H \
+ 	-D_GNU_SOURCE \
+-	$(DEVELFLAGS) \
+-	-I$(includedir)/umview \
+-	-I/usr/local/include
++	$(DEVELFLAGS)
+ 
+ umfuseext2_la_LDFLAGS = \
+ 	-module \
+@@ -110,8 +107,7 @@ umfuseext2_la_LDFLAGS = \
+ 
+ fuse_ext2_CFLAGS = \
+ 	-Wall \
+-	-DHAVE_CONFIG_H \
+-	-I/usr/local/include
++	-DHAVE_CONFIG_H
+ 
+ if DARWIN
+ bin_PROGRAMS += \
diff --git a/nixpkgs/pkgs/tools/filesystems/fuse-overlayfs/default.nix b/nixpkgs/pkgs/tools/filesystems/fuse-overlayfs/default.nix
new file mode 100644
index 000000000000..6afbda9f27cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuse-overlayfs/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, fuse3, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "fuse-overlayfs";
+  version = "1.13";
+
+  src = fetchFromGitHub {
+    owner = "containers";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ngpC1KtUsIJOfpJ9dSqZn9XhKkJSpp2/6RBz/RlZ+A0=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ fuse3 ];
+
+  enableParallelBuilding = true;
+  strictDeps = true;
+
+  passthru.tests = { inherit (nixosTests) podman; };
+
+  meta = with lib; {
+    description = "FUSE implementation for overlayfs";
+    longDescription = "An implementation of overlay+shiftfs in FUSE for rootless containers.";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ma9e ] ++ teams.podman.members;
+    platforms = platforms.linux;
+    inherit (src.meta) homepage;
+    mainProgram = "fuse-overlayfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fuseiso/default.nix b/nixpkgs/pkgs/tools/filesystems/fuseiso/default.nix
new file mode 100644
index 000000000000..b731e9c7cc96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuseiso/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchurl, fetchpatch, autoreconfHook, pkg-config, fuse, glib, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "fuseiso";
+  version = "20070708";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/fuseiso/fuseiso/${version}/fuseiso-${version}.tar.bz2";
+    sha256 = "127xql52dcdhmh7s5m9xc6q39jdlj3zhbjar1j821kb6gl3jw94b";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "00-support_large_iso.patch";
+      url = "https://sources.debian.net/data/main/f/fuseiso/${version}-3.2/debian/patches/00-support_large_iso.patch";
+      sha256 = "1lmclb1qwzz5f4wlq693g83bblwnjjl73qhgfxbsaac5hnn2shjw";
+    })
+    (fetchpatch {
+      name = "01-fix_typo.patch";
+      url = "https://sources.debian.net/data/main/f/fuseiso/${version}-3.2/debian/patches/01-fix_typo.patch";
+      sha256 = "14rpxp0yylzsgqv0r19l4wx1h5hvqp617gpv1yg0w48amr9drasa";
+    })
+    (fetchpatch {
+      name = "02-prevent-buffer-overflow_CVE-2015-8837.patch";
+      url = "https://sources.debian.net/data/main/f/fuseiso/${version}-3.2/debian/patches/02-prevent-buffer-overflow.patch";
+      sha256 = "1ls2pp3mh91pdb51qz1fsd8pwhbky6988bpd156bn7wgfxqzh8ig";
+    })
+    (fetchpatch {
+      name = "03-prevent-integer-overflow_CVE-2015-8836.patch";
+      url = "https://sources.debian.net/data/main/f/fuseiso/${version}-3.2/debian/patches/03-prevent-integer-overflow.patch";
+      sha256 = "100cw07fk4sa3hl7a1gk2hgz4qsxdw99y20r7wpidwwwzy463zcv";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ fuse glib zlib ];
+
+  # after autoreconfHook, glib and zlib are not found, so force link against
+  # them
+  NIX_LDFLAGS = "-lglib-2.0 -lz";
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    install -Dm444 -t $out/share/doc/${pname} NEWS README
+  '';
+
+  meta = with lib; {
+    description = "FUSE module to mount ISO filesystem images";
+    homepage = "https://sourceforge.net/projects/fuseiso";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    mainProgram = "fuseiso";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fwanalyzer/default.nix b/nixpkgs/pkgs/tools/filesystems/fwanalyzer/default.nix
new file mode 100644
index 000000000000..26fd45fa90ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fwanalyzer/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, e2tools
+, makeWrapper
+, mtools
+}:
+
+buildGoModule rec {
+  pname = "fwanalyzer";
+  version = "1.4.4";
+
+  src = fetchFromGitHub {
+    owner = "cruise-automation";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-fcqtyfpxdjD+1GsYl05RSJaFDoLSYQDdWcQV6a+vNGA=";
+  };
+
+  vendorHash = "sha256-nLr12VQogr4nV9E/DJu2XTcgEi7GsOdOn/ZqVk7HS7I=";
+
+  subPackages = [ "cmd/${pname}" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/fwanalyzer" --prefix PATH : "${lib.makeBinPath [ e2tools mtools ]}"
+  '';
+
+  # The tests requires an additional setup (unpacking images, etc.)
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to analyze filesystem images";
+    homepage = "https://github.com/cruise-automation/fwanalyzer";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "fwanalyzer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/garage/default.nix b/nixpkgs/pkgs/tools/filesystems/garage/default.nix
new file mode 100644
index 000000000000..e34822845b40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/garage/default.nix
@@ -0,0 +1,110 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitea
+, fetchpatch
+, openssl
+, pkg-config
+, protobuf
+, cacert
+, Security
+, garage
+, nixosTests
+}:
+let
+  generic = { version, sha256, cargoSha256, eol ? false, broken ? false }: rustPlatform.buildRustPackage {
+    pname = "garage";
+    inherit version;
+
+    src = fetchFromGitea {
+      domain = "git.deuxfleurs.fr";
+      owner = "Deuxfleurs";
+      repo = "garage";
+      rev = "v${version}";
+      inherit sha256;
+    };
+
+    postPatch = ''
+      # Starting in 0.9.x series, Garage is using mold in local development
+      # and this leaks in this packaging, we remove it to use the default linker.
+      rm .cargo/config.toml || true
+    '';
+
+    inherit cargoSha256;
+
+    nativeBuildInputs = [ protobuf pkg-config ];
+
+    buildInputs = [
+      openssl
+    ] ++ lib.optional stdenv.isDarwin Security;
+
+    checkInputs = [
+      cacert
+    ];
+
+    OPENSSL_NO_VENDOR = true;
+
+    # See https://git.deuxfleurs.fr/Deuxfleurs/garage/src/tag/v0.8.2/nix/compile.nix#L192-L198
+    # on version changes for checking if changes are required here
+    buildFeatures = [
+      "kubernetes-discovery"
+      "bundled-libs"
+      "sled"
+      "metrics"
+      "k2v"
+      "telemetry-otlp"
+      "lmdb"
+      "sqlite"
+      "consul-discovery"
+    ];
+
+    # To make integration tests pass, we include the optional k2v feature here,
+    # but in buildFeatures only for version 0.8+, where it's enabled by default.
+    # See: https://garagehq.deuxfleurs.fr/documentation/reference-manual/k2v/
+    checkFeatures = [
+      "k2v"
+      "kubernetes-discovery"
+      "bundled-libs"
+      "sled"
+      "lmdb"
+      "sqlite"
+    ];
+
+    passthru.tests = nixosTests.garage;
+
+    meta = {
+      description = "S3-compatible object store for small self-hosted geo-distributed deployments";
+      changelog = "https://git.deuxfleurs.fr/Deuxfleurs/garage/releases/tag/v${version}";
+      homepage = "https://garagehq.deuxfleurs.fr";
+      license = lib.licenses.agpl3Only;
+      maintainers = with lib.maintainers; [ nickcao _0x4A6F teutat3s raitobezarius ];
+      knownVulnerabilities = (lib.optional eol "Garage version ${version} is EOL");
+      inherit broken;
+      mainProgram = "garage";
+    };
+  };
+in
+rec {
+  # Until Garage hits 1.0, 0.7.3 is equivalent to 7.3.0 for now, therefore
+  # we have to keep all the numbers in the version to handle major/minor/patch level.
+  # for <1.0.
+
+  garage_0_8_5 = generic {
+    version = "0.8.5";
+    sha256 = "sha256-YRxkjETSmI1dcHP9qTPLcOMqXx9B2uplVR3bBjJWn3I=";
+    cargoSha256 = "sha256-VOcymlvqqQRdT1MFzRcMuD+Xo3fc3XTuRA12tW7ZjdI=";
+    broken = stdenv.isDarwin;
+  };
+
+  garage_0_8 = garage_0_8_5;
+
+  garage_0_9_1 = generic {
+    version = "0.9.1";
+    sha256 = "sha256-AXLaifVmZU4j5D/wKn/0TzhjHZBzZW1+tMyhsAo2eBU=";
+    cargoSha256 = "sha256-4/+OsM73TroBB1TGqare2xASO5KhqVyNkkss0Y0JZXg=";
+  };
+
+  garage_0_9 = garage_0_9_1;
+
+  garage = garage_0_9;
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/gcsfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/gcsfuse/default.nix
new file mode 100644
index 000000000000..145fddb9222b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/gcsfuse/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gcsfuse";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "googlecloudplatform";
+    repo = "gcsfuse";
+    rev = "v${version}";
+    hash = "sha256-xQWkrFuMvwloDjnIU2T1Fmfpc/2w3ISbyDhFmN/ETFA=";
+  };
+
+  vendorHash = "sha256-cIOjgoS3cW6GA697K0Loi76ed64Ev2jZbuOIPNRM1HU=";
+
+  subPackages = [ "." "tools/mount_gcsfuse" ];
+
+  ldflags = [ "-s" "-w" "-X main.gcsfuseVersion=${version}" ];
+
+  preCheck =
+    let
+      skippedTests = [
+        "Test_Main"
+        "TestFlags"
+      ];
+    in
+    ''
+      # Disable flaky tests
+      buildFlagsArray+=("-run" "[^(${builtins.concatStringsSep "|" skippedTests})]")
+    '';
+
+  postInstall = ''
+    ln -s $out/bin/mount_gcsfuse $out/bin/mount.gcsfuse
+    ln -s $out/bin/mount_gcsfuse $out/bin/mount.fuse.gcsfuse
+  '';
+
+  meta = with lib; {
+    description = "A user-space file system for interacting with Google Cloud Storage";
+    homepage = "https://cloud.google.com/storage/docs/gcs-fuse";
+    changelog = "https://github.com/GoogleCloudPlatform/gcsfuse/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/genext2fs/default.nix b/nixpkgs/pkgs/tools/filesystems/genext2fs/default.nix
new file mode 100644
index 000000000000..b640c99dc82f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/genext2fs/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libarchive }:
+
+stdenv.mkDerivation rec {
+  pname = "genext2fs";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "bestouff";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-9LAU5XuCwwEhU985MzZ2X+YYibvyECULQSn9X2jdj5I=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [
+    libarchive
+  ];
+
+  configureFlags = [
+    "--enable-libarchive"
+  ];
+
+  doCheck = true;
+  checkPhase = ''
+    ./test.sh
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/bestouff/genext2fs";
+    description = "A tool to generate ext2 filesystem images without requiring root privileges";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "genext2fs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/genimage/default.nix b/nixpkgs/pkgs/tools/filesystems/genimage/default.nix
new file mode 100644
index 000000000000..34500447b875
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/genimage/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, libconfuse, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "genimage";
+  version = "17";
+
+  src = fetchurl {
+    url = "https://public.pengutronix.de/software/genimage/genimage-${version}.tar.xz";
+    sha256 = "sha256-qHVuNWeg1NgsNrCMzB4IglC5AG1WcMaysBQYXm7GBnE=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libconfuse gettext ];
+
+  postInstall = ''
+    # As there is no manpage or built-in --help, add the README file for
+    # documentation.
+    docdir="$out/share/doc/genimage"
+    mkdir -p "$docdir"
+    cp -v README.rst "$docdir"
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://git.pengutronix.de/cgit/genimage";
+    description = "Generate filesystem images from directory trees";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "genimage";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/genromfs/default.nix b/nixpkgs/pkgs/tools/filesystems/genromfs/default.nix
new file mode 100644
index 000000000000..6c40c4ad94cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/genromfs/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "0.5.2";
+  pname = "genromfs";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/romfs/genromfs/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0q6rpq7cmclmb4ayfyknvzbqysxs4fy8aiahlax1sb2p6k3pzwrh";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "prefix = /usr" "prefix = $out" \
+      --replace "gcc" "cc"
+  '';
+
+  meta = with lib; {
+    homepage = "https://romfs.sourceforge.net/";
+    description = "Tool for creating romfs file system images";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.all;
+    mainProgram = "genromfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/gfs2-utils/default.nix b/nixpkgs/pkgs/tools/filesystems/gfs2-utils/default.nix
new file mode 100644
index 000000000000..00c73ce3e603
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/gfs2-utils/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl
+, autoreconfHook, bison, flex, pkg-config
+, bzip2, check, ncurses, util-linux, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gfs2-utils";
+  version = "3.5.1";
+
+  src = fetchurl {
+    url = "https://pagure.io/gfs2-utils/archive/${version}/gfs2-utils-${version}.tar.gz";
+    hash = "sha256-ZWzNfYuhIxGmSAe454vRjAKp9Lq7EBBSY36P7qVgZnw=";
+  };
+
+  outputs = [ "bin" "doc" "out" "man" ];
+
+  nativeBuildInputs = [ autoreconfHook bison flex pkg-config ];
+  buildInputs = [ bzip2 ncurses util-linux zlib ];
+
+  nativeCheckInputs = [ check ];
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://pagure.io/gfs2-utils";
+    description = "Tools for creating, checking and working with gfs2 filesystems";
+    maintainers = with maintainers; [ qyliss ];
+    license = [ licenses.gpl2Plus licenses.lgpl2Plus ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/gitfs/default.nix b/nixpkgs/pkgs/tools/filesystems/gitfs/default.nix
new file mode 100644
index 000000000000..c5e388fc5ffb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/gitfs/default.nix
@@ -0,0 +1,44 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gitfs";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "PressLabs";
+    repo = "gitfs";
+    rev = version;
+    sha256 = "1jzwdwan8ndvp2lw6j7zbvg5k9rgf2d8dcxjrwc6bwyk59xdxn4p";
+  };
+
+  patchPhase = ''
+    # requirement checks are unnecessary at runtime
+    echo > requirements.txt
+
+    # NOTE: As of gitfs 0.5.2, The pygit2 release that upstream uses is a major
+    # version behind the one packaged in nixpkgs.
+    substituteInPlace gitfs/mounter.py --replace \
+      'from pygit2.remote import RemoteCallbacks' \
+      'from pygit2 import RemoteCallbacks'
+  '';
+
+  nativeCheckInputs = with python3Packages; [ pytest pytest-cov mock ];
+  propagatedBuildInputs = with python3Packages; [ atomiclong fusepy pygit2 six ];
+
+  checkPhase = "py.test";
+  doCheck = false;
+
+  meta = {
+    description = "A FUSE filesystem that fully integrates with git";
+    longDescription = ''
+      A git remote repository's branch can be mounted locally,
+      and any subsequent changes made to the files will be
+      automatically committed to the remote.
+    '';
+    homepage = "https://github.com/PressLabs/gitfs";
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.robbinch ];
+    mainProgram = "gitfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/glusterfs/default.nix b/nixpkgs/pkgs/tools/filesystems/glusterfs/default.nix
new file mode 100644
index 000000000000..f7e830f3211d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/glusterfs/default.nix
@@ -0,0 +1,207 @@
+{lib, stdenv, fetchFromGitHub, fuse, bison, flex, openssl, python3, ncurses, readline,
+ autoconf, automake, libtool, pkg-config, zlib, libaio, libxml2, acl, sqlite,
+ liburcu, liburing, attr, makeWrapper, coreutils, gnused, gnugrep, which,
+ openssh, gawk, findutils, util-linux, lvm2, btrfs-progs, e2fsprogs, xfsprogs, systemd,
+ rsync, getent, rpcsvc-proto, libtirpc, gperftools, nixosTests
+}:
+let
+  # NOTE: On each glusterfs release, it should be checked if gluster added
+  #       new, or changed, Python scripts whose PYTHONPATH has to be set in
+  #       `postFixup` below, and whose runtime deps need to go into
+  #       `nativeBuildInputs`.
+  #       The command
+  #         find /nix/store/...-glusterfs-.../ -name '*.py' -executable
+  #       can help with finding new Python scripts.
+
+  buildInputs = [
+    fuse openssl ncurses readline
+    zlib libaio libxml2
+    acl sqlite liburcu attr util-linux libtirpc gperftools
+    liburing
+    (python3.withPackages (pkgs: [
+      pkgs.flask
+      pkgs.prettytable
+      pkgs.requests
+      pkgs.pyxattr
+    ]))
+    # NOTE: `python3` has to be *AFTER* the above `python3.withPackages`,
+    #       to ensure that the packages are available but the `toPythonPath`
+    #       shell function used in `postFixup` is also still available.
+    python3
+  ];
+  # Some of the headers reference acl
+  propagatedBuildInputs = [
+    acl
+  ];
+  # Packages from which GlusterFS calls binaries at run-time from PATH,
+  # with comments on which commands are known to be called by it.
+  runtimePATHdeps = [
+    attr # getfattr setfattr
+    btrfs-progs # btrfs
+    coreutils # lots of commands in bash scripts
+    e2fsprogs # tune2fs
+    findutils # find
+    gawk # awk
+    getent # getent
+    gnugrep # grep
+    gnused # sed
+    lvm2 # lvs
+    openssh # ssh
+    rsync # rsync, e.g. for geo-replication
+    systemd # systemctl
+    util-linux # mount umount
+    which # which
+    xfsprogs # xfs_info
+  ];
+in stdenv.mkDerivation rec {
+  pname = "glusterfs";
+  version = "11.1";
+
+  src = fetchFromGitHub {
+    owner = "gluster";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ZClMfozeFO3266fkuCSV04QwpZaYa8B0uq2lTPEN2rQ=";
+  };
+  inherit buildInputs propagatedBuildInputs;
+
+  patches = [
+    # Upstream invokes `openssl version -d` to derive the canonical system path
+    # for certificates, which resolves to a nix store path, so this patch
+    # statically sets the configure.ac value. There's probably a less-brittle
+    # way to do this! (this will likely fail on a version bump)
+    # References:
+    # - https://github.com/gluster/glusterfs/issues/3234
+    # - https://github.com/gluster/glusterfs/commit/a7dc43f533ad4b8ff68bf57704fefc614da65493
+    ./ssl_cert_path.patch
+  ];
+
+  postPatch = ''
+    sed -e '/chmod u+s/d' -i contrib/fuse-util/Makefile.am
+    substituteInPlace libglusterfs/src/glusterfs/lvm-defaults.h \
+      --replace '/sbin/' '${lvm2}/bin/'
+    substituteInPlace libglusterfs/src/glusterfs/compat.h \
+      --replace '/bin/umount' '${util-linux}/bin/umount'
+    substituteInPlace contrib/fuse-lib/mount-gluster-compat.h \
+      --replace '/bin/mount' '${util-linux}/bin/mount'
+  '';
+
+  # Note that the VERSION file is something that is present in release tarballs
+  # but not in git tags (at least not as of writing in v3.10.1).
+  # That's why we have to create it.
+  # Without this, gluster (at least 3.10.1) will fail very late and cryptically,
+  # for example when setting up geo-replication, with a message like
+  #   Staging of operation 'Volume Geo-replication Create' failed on localhost : Unable to fetch master volume details. Please check the master cluster and master volume.
+  # What happens here is that the gverify.sh script tries to compare the versions,
+  # but fails when the version is empty.
+  # See upstream GlusterFS bug https://bugzilla.redhat.com/show_bug.cgi?id=1452705
+  preConfigure = ''
+    patchShebangs build-aux/pkg-version
+    echo "v${version}" > VERSION
+    ./autogen.sh
+    export PYTHON=${python3}/bin/python
+  '';
+
+  configureFlags = [
+    "--localstatedir=/var"
+  ];
+
+  nativeBuildInputs = [ autoconf automake libtool pkg-config bison flex makeWrapper rpcsvc-proto ];
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    cp -r $out/$out/* $out
+    rm -r $out/nix
+  '';
+
+  postFixup = ''
+    # glusterd invokes `gluster` and other utilities when telling other glusterd nodes to run commands.
+    # For example for `peer_georep-sshkey` key generation, so `$out/bin` is needed in the PATH.
+    # It also invokes bash scripts like `gverify.sh`.
+    # It also invokes executable Python scripts in `$out/libexec/glusterfs`, which is why we set up PYTHONPATH accordingly.
+    # We set up the paths for the main entry point executables.
+
+    GLUSTER_PATH="${lib.makeBinPath runtimePATHdeps}:$out/bin"
+    GLUSTER_PYTHONPATH="$(toPythonPath $out):$out/libexec/glusterfs"
+    GLUSTER_LD_LIBRARY_PATH="$out/lib"
+
+    wrapProgram $out/bin/glusterd --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/bin/gluster --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/sbin/mount.glusterfs --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+
+    # Set Python environment for the Python based utilities.
+    # It would be nice if there was a better way to do this, automatically for all of them.
+    # Also, this is brittle: If we forget a dependency or gluster adds a new one, things will break deep inside gluster.
+    # We should better try to get an explicit list of Python dependencies from gluster and ensure all of them are in the PYTHONPATH of all these python scripts.
+    # But at the time of writing (gluster 3.10), gluster only provides this in form of a gluster.spec file for RPM creation,
+    # and even that one is not complete (for example it doesn't mention the `flask` dependency).
+
+    wrapProgram $out/bin/gluster-eventsapi --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/bin/gluster-georep-sshkey --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/bin/gluster-mountbroker --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/bin/glusterfind --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+
+    # Note that we only wrap the symlinks in $out/bin, not the actual executable scripts in $out/libexec/glusterfs.
+    # This is because those scripts use `__file__` in their program logic
+    # (see https://github.com/gluster/glusterfs/blob/v3.10.1/extras/cliutils/cliutils.py#L116)
+    # which would break if we changed the file name (which is what `wrapProgram` does).
+    # Luckily, `libexec` scripts are never supposed to be invoked straight from PATH,
+    # instead they are invoked directly from `gluster` or `glusterd`, which is why it is
+    # sufficient to set PYTHONPATH for those executables.
+    #
+    # Exceptions to these rules are the `glusterfind` `brickfind.py` and `changelog.py`
+    # crawlers, which are directly invoked on other gluster nodes using a remote SSH command
+    # issues by `glusterfind`.
+
+    wrapProgram $out/share/glusterfs/scripts/eventsdash.py --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/libexec/glusterfs/glusterfind/brickfind.py --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/libexec/glusterfs/glusterfind/changelog.py --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+  '';
+
+  doInstallCheck = true;
+
+  # Below we run Python programs. That generates .pyc/.pyo files.
+  # By default they are indeterministic because such files contain time stamps
+  # (see https://nedbatchelder.com/blog/200804/the_structure_of_pyc_files.html).
+  # So we use the same environment variables as in
+  #   https://github.com/NixOS/nixpkgs/blob/249b34aadca7038207492f29142a3456d0cecec3/pkgs/development/interpreters/python/mk-python-derivation.nix#L61
+  # to make these files deterministic.
+  # A general solution to this problem might be brought by #25707.
+  DETERMINISTIC_BUILD = 1;
+  PYTHONHASHSEED = 0;
+
+  installCheckPhase = ''
+    # Tests that the above programs work without import errors.
+    # For testing it manually in a shell you may want to substitute `$out` with `$(dirname $(readlink -f $(which gluster)))/../`.
+    $out/bin/glusterd --help
+    # $out/bin/gluster help # can't do this because even `gluster help` tries to write to `/var/log/glusterfs/cli.log`
+    $out/bin/gluster-eventsapi --help
+    $out/bin/gluster-georep-sshkey --help
+    $out/bin/gluster-mountbroker --help
+    $out/bin/glusterfind --help
+    # gfid_to_path.py doesn't accept --help, and it requires different arguments
+    # (a dir as single argument) than the usage prints when stdin is not a TTY.
+    # The `echo ""` is just so that stdin is not a TTY even if you try this line
+    # on a real TTY for testing purposes.
+    echo "" | (mkdir -p nix-test-dir-for-gfid_to_path && touch b && $out/libexec/glusterfs/gfind_missing_files/gfid_to_path.py nix-test-dir-for-gfid_to_path)
+    $out/share/glusterfs/scripts/eventsdash.py --help
+
+    # this gets falsely loaded as module by glusterfind
+    rm -r $out/bin/conf.py
+  '';
+
+  passthru.tests = {
+    glusterfs = nixosTests.glusterfs;
+  };
+
+  meta = with lib; {
+    description = "Distributed storage system";
+    homepage = "https://www.gluster.org";
+    license = licenses.lgpl3Plus; # dual licese: choice of lgpl3Plus or gpl2
+    maintainers = [ maintainers.raskin ];
+    platforms = with platforms; linux ++ freebsd;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/glusterfs/ssl_cert_path.patch b/nixpkgs/pkgs/tools/filesystems/glusterfs/ssl_cert_path.patch
new file mode 100644
index 000000000000..71b632e12eae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/glusterfs/ssl_cert_path.patch
@@ -0,0 +1,23 @@
+diff --git a/configure.ac b/configure.ac
+index fb8db11e9e..4c40683057 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -766,14 +766,10 @@ AS_IF([test "x$enable_fuse_notifications" != "xno"], [
+ 
+ dnl Find out OpenSSL trusted certificates path
+ AC_MSG_CHECKING([for OpenSSL trusted certificates path])
+-SSL_CERT_PATH=$(openssl version -d | sed -e 's|OPENSSLDIR: "\(.*\)".*|\1|')
+-if test -d "${SSL_CERT_PATH}" 1>/dev/null 2>&1; then
+-   AC_MSG_RESULT([$SSL_CERT_PATH])
+-   AC_DEFINE_UNQUOTED(SSL_CERT_PATH, ["$SSL_CERT_PATH"], [Path to OpenSSL trusted certificates.])
+-   AC_SUBST(SSL_CERT_PATH)
+-else
+-   AC_MSG_ERROR([Unable to detect path to OpenSSL trusted certificates])
+-fi
++SSL_CERT_PATH=/etc/ssl
++AC_MSG_RESULT([$SSL_CERT_PATH])
++AC_DEFINE_UNQUOTED(SSL_CERT_PATH, ["$SSL_CERT_PATH"], [Path to OpenSSL trusted certificates.])
++AC_SUBST(SSL_CERT_PATH)
+ 
+ AC_CHECK_LIB([ssl], TLS_method, [HAVE_OPENSSL_1_1="yes"], [HAVE_OPENSSL_1_1="no"])
+ if test "x$HAVE_OPENSSL_1_1" = "xyes"; then
diff --git a/nixpkgs/pkgs/tools/filesystems/go-mtpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/go-mtpfs/default.nix
new file mode 100644
index 000000000000..f3ed4fb6ab98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/go-mtpfs/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, pkg-config, libusb1 }:
+
+buildGoModule rec {
+  pname = "go-mtpfs";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "hanwen";
+    repo = "go-mtpfs";
+    rev = "v${version}";
+    hash = "sha256-HVfB8/MImgZZLx4tcrlYOfQjpAdHMHshEaSsd+n758w=";
+  };
+
+  vendorHash = "sha256-OrAEvD2rF0Y0bvCD9TUv/E429lASsvC3uK3qNvbg734=";
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ];
+
+  preCheck = ''
+    # Only run tests under mtp/encoding_test.go
+    # Other tests require an Android deviced attached over USB.
+    buildFlagsArray+=("-run" "Test(Encode|Decode|Variant).*")
+  '';
+
+  meta = with lib; {
+    description = "A simple FUSE filesystem for mounting Android devices as a MTP device";
+    homepage = "https://github.com/hanwen/go-mtpfs";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+    broken = stdenv.isDarwin;
+    mainProgram = "go-mtpfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/gocryptfs/default.nix b/nixpkgs/pkgs/tools/filesystems/gocryptfs/default.nix
new file mode 100644
index 000000000000..a1f424915f30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/gocryptfs/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fuse
+, makeWrapper
+, openssl
+, pandoc
+, pkg-config
+, libfido2
+}:
+
+buildGoModule rec {
+  pname = "gocryptfs";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "rfjakob";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-lStaMj2f8lQZx2E42o4ikPmFQzydlN3PFKwFvUx37SI=";
+  };
+
+  vendorHash = "sha256-ir7FR7ndbPhzUOCVPrYO0SEe03wDFIP74I4X6HJxtE8=";
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+    pandoc
+  ];
+
+  buildInputs = [ openssl ];
+
+  propagatedBuildInputs = [ libfido2 ];
+
+  ldflags = [
+    "-X main.GitVersion=${version}"
+    "-X main.GitVersionFuse=[vendored]"
+    "-X main.BuildDate=unknown"
+  ];
+
+  subPackages = [ "." "gocryptfs-xray" "contrib/statfs" ];
+
+  postBuild = ''
+    pushd Documentation/
+    mkdir -p $out/share/man/man1
+    # taken from Documentation/MANPAGE-render.bash
+    pandoc MANPAGE.md -s -t man -o $out/share/man/man1/gocryptfs.1
+    pandoc MANPAGE-XRAY.md -s -t man -o $out/share/man/man1/gocryptfs-xray.1
+    pandoc MANPAGE-STATFS.md -s -t man -o $out/share/man/man1/statfs.1
+    popd
+  '';
+
+  # use --suffix here to ensure we don't shadow /run/wrappers/bin/fusermount,
+  # as the setuid wrapper is required to use gocryptfs as non-root on NixOS
+  postInstall = ''
+    wrapProgram $out/bin/gocryptfs \
+      --suffix PATH : ${lib.makeBinPath [ fuse ]}
+    ln -s $out/bin/gocryptfs $out/bin/mount.fuse.gocryptfs
+  '';
+
+  meta = with lib; {
+    description = "Encrypted overlay filesystem written in Go";
+    license = licenses.mit;
+    homepage = "https://nuetzlich.net/gocryptfs/";
+    maintainers = with maintainers; [ flokli offline prusnak ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/goofys/default.nix b/nixpkgs/pkgs/tools/filesystems/goofys/default.nix
new file mode 100644
index 000000000000..1865b6f57644
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/goofys/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule {
+  pname = "goofys";
+  version = "unstable-2022-04-21";
+
+  src = fetchFromGitHub {
+    owner = "kahing";
+    repo = "goofys";
+    # Same as v0.24.0 but migrated to Go modules
+    rev = "829d8e5ce20faa3f9f6f054077a14325e00e9249";
+    sha256 = "sha256-6yVMNSwwPZlADXuPBDRlgoz4Stuz2pgv6r6+y2/C8XY=";
+  };
+
+  vendorHash = "sha256-shFld293pdmVcnu3p0NoBmPGLJddZd4O/gJ8klgdlQ8=";
+
+  subPackages = [ "." ];
+
+  # Tests are using networking
+  postPatch = ''
+    rm internal/*_test.go
+  '';
+
+  meta = {
+    homepage = "https://github.com/kahing/goofys";
+    description = "A high-performance, POSIX-ish Amazon S3 file system written in Go";
+    license = [ lib.licenses.mit ];
+    maintainers = [ lib.maintainers.adisbladis ];
+    broken = stdenv.isDarwin; # needs to update gopsutil to at least v3.21.3 to include https://github.com/shirou/gopsutil/pull/1042
+    mainProgram = "goofys";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/gpart/default.nix b/nixpkgs/pkgs/tools/filesystems/gpart/default.nix
new file mode 100644
index 000000000000..a8466d3462e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/gpart/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gpart";
+  version = "0.3";
+
+  # GitHub repository 'collating patches for gpart from all distributions':
+  src = fetchFromGitHub {
+    sha256 = "1lsd9k876p944k9s6sxqk5yh9yr7m42nbw9vlsllin7pd4djl4ya";
+    rev = version;
+    repo = "gpart";
+    owner = "baruch";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Guess PC-type hard disk partitions";
+    longDescription = ''
+      Gpart is a tool which tries to guess the primary partition table of a
+      PC-type hard disk in case the primary partition table in sector 0 is
+      damaged, incorrect or deleted. The guessed table can be written to a file
+      or device.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    mainProgram = "gpart";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/grive2/default.nix b/nixpkgs/pkgs/tools/filesystems/grive2/default.nix
new file mode 100644
index 000000000000..41afc98e7f94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/grive2/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, yajl
+, cmake
+, libgcrypt
+, curl
+, expat
+, boost
+, libiberty
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.5.3";
+  pname = "grive2";
+
+  src = fetchFromGitHub {
+    owner = "vitalif";
+    repo = "grive2";
+    rev =  "v${version}";
+    sha256 = "sha256-P6gitA5cXfNbNDy4ohRLyXj/5dUXkCkOdE/9rJPzNCg=";
+  };
+
+  patches = [
+    # Backport gcc-12 support:
+    #   https://github.com/vitalif/grive2/pull/363
+    (fetchpatch {
+      name = "gcc-12.patch";
+      url = "https://github.com/vitalif/grive2/commit/3cf1c058a3e61deb370dde36024a106a213ab2c6.patch";
+      hash = "sha256-v2Pb6Qvgml/fYzh/VCjOvEVnFYMkOHqROvLLe61DmKA=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ libgcrypt yajl curl expat boost libiberty ];
+
+  meta = with lib; {
+    description = "A console Google Drive client";
+    homepage = "https://github.com/vitalif/grive2";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    mainProgram = "grive";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/hfsprogs/default.nix b/nixpkgs/pkgs/tools/filesystems/hfsprogs/default.nix
new file mode 100644
index 000000000000..2ac17286fb41
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/hfsprogs/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub, openssl, libbsd }:
+
+let
+  version = "332.25";
+
+  apple_src = fetchFromGitHub {
+    owner = "apple-oss-distributions";
+    repo = "diskdev_cmds";
+    rev = "diskdev_cmds-${version}";
+    hash = "sha256-cycPGPx2Gbjn4FKGKuQKJkh+dWGbJfy6C+LTz8rrs0A=";
+    name = "diskdev_cmds-${version}";
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "hfsprogs";
+  inherit version;
+
+  srcs = [
+    (fetchurl {
+      url = "http://ftp.de.debian.org/debian/pool/main/h/hfsprogs/hfsprogs_${version}-11.debian.tar.gz";
+      sha256 = "62d9b8599c66ebffbc57ce5d776e20b41341130d9b27341d63bda08460ebde7c";
+    })
+    apple_src
+  ];
+
+  postPatch = ''
+    sed -ie '/sys\/sysctl.h/d' newfs_hfs.tproj/makehfs.c
+  '';
+
+  sourceRoot = apple_src.name;
+  patches = [ "../debian/patches/*.patch" ];
+
+  buildInputs = [ openssl libbsd ];
+  makefile = "Makefile.lnx";
+
+  # Inspired by PKGBUILD of https://www.archlinux.org/packages/community/x86_64/hfsprogs/
+  installPhase = ''
+    # Create required package directories
+    install -m 755 -d "$out/bin"
+    install -m 755 -d "$out/share/hfsprogs"
+    install -m 755 -d "$out/share/man/man8/"
+    # Copy executables
+    install -m 755 "newfs_hfs.tproj/newfs_hfs" "$out/bin/mkfs.hfsplus"
+    install -m 755 "fsck_hfs.tproj/fsck_hfs" "$out/bin/fsck.hfsplus"
+    # Copy shared data
+    install -m 644 "newfs_hfs.tproj/hfsbootdata.img" "$out/share/hfsprogs/hfsbootdata"
+    # Copy man pages
+    install -m 644 "newfs_hfs.tproj/newfs_hfs.8" "$out/share/man/man8/mkfs.hfsplus.8"
+    install -m 644 "fsck_hfs.tproj/fsck_hfs.8" "$out/share/man/man8/fsck.hfsplus.8"
+  '';
+
+  meta = {
+    description = "HFS/HFS+ user space utils";
+    license = lib.licenses.apsl20;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/httm/Cargo.lock b/nixpkgs/pkgs/tools/filesystems/httm/Cargo.lock
new file mode 100644
index 000000000000..dd039c32b0d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/httm/Cargo.lock
@@ -0,0 +1,1332 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "beef"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "cc"
+version = "1.0.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "console"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c050367d967ced717c04b65d8c619d863ef9292ce0c5760028655a2fb298718c"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "terminal_size 0.1.17",
+ "winapi",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "crossbeam"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.7.1",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdf07d07d6531bfcdbe9b8b739b104610c6508dcc4d63b410585faf338241daf"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2eb5b96ecdc99f72657332953d4d9c50135af1bac34277801cc3937906ebd39"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac040a39517fd1674e0f32177648334b0f4074625b5588a64519804ba0553b12"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1362b0ddcfc4eb0a1f57b68bd77dd99f0e826958a96abd0ae9bd092e114ffed6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "defer-drop"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f613ec9fa66a6b28cdb1842b27f9adf24f39f9afc4dcdd9fdecee4aca7945c57"
+dependencies = [
+ "crossbeam-channel",
+ "once_cell",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3"
+dependencies = [
+ "derive_builder_macro",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "derive_builder_macro"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68"
+dependencies = [
+ "derive_builder_core",
+ "syn",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "either"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "exacl"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cfeb22a59deb24c3262c43ffcafd1eb807180f371f9fcc99098d181b5d639be"
+dependencies = [
+ "bitflags",
+ "log",
+ "scopeguard",
+ "uuid",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "fuzzy-matcher"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94"
+dependencies = [
+ "thread_local",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038"
+dependencies = [
+ "ahash",
+ "rayon",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "httm"
+version = "0.23.3"
+dependencies = [
+ "ansi_term",
+ "chrono",
+ "clap",
+ "crossbeam",
+ "exacl",
+ "hashbrown 0.13.1",
+ "indicatif",
+ "lscolors",
+ "nix 0.26.1",
+ "number_prefix",
+ "once_cell",
+ "proc-mounts",
+ "rayon",
+ "serde",
+ "serde_json",
+ "simd-adler32",
+ "skim",
+ "terminal_size 0.2.3",
+ "time 0.3.17",
+ "which",
+ "xattr",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4295cbb7573c16d310e99e713cf9e75101eb190ab31fccd35f2d2691b4352b19"
+dependencies = [
+ "console",
+ "number_prefix",
+ "portable-atomic",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+
+[[package]]
+name = "js-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.138"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8"
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f9f08d8963a6c613f4b1a78f4f4a4dbfadf8e6545b2d72861731e4858b8b47f"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "lscolors"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2dedc85d67baf5327114fad78ab9418f8893b1121c17d5538dd11005ad1ddf2"
+dependencies = [
+ "ansi_term",
+ "nu-ansi-term",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "nix"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
+dependencies = [
+ "autocfg",
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+ "pin-utils",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46a58d1d356c6597d08cde02c2f09d785b09e28711837b1ed667dc652c08a694"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "once_cell"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "partition-identity"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fa925f9becb532d758b0014b472c576869910929cf4c3f8054b386f19ab9e21"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "portable-atomic"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15eb2c6e362923af47e13c23ca5afb859e83d54452c55b0b9ac763b8f7c1ac16"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proc-mounts"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d652f8435d0ab70bf4f3590a6a851d59604831a458086541b95238cc51ffcf2"
+dependencies = [
+ "partition-identity",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b"
+dependencies = [
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "rustix"
+version = "0.36.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3807b5d10909833d3e9acd1eb5fb988f79376ff10fce42937de71a449c4c588"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8"
+
+[[package]]
+name = "ryu"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+
+[[package]]
+name = "serde_json"
+version = "1.0.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14a5df39617d7c8558154693a1bb8157a4aab8179209540cc0b10e5dc24e0b18"
+
+[[package]]
+name = "skim"
+version = "0.10.2"
+source = "git+https://github.com/kimono-koans/skim?branch=httm-vendored#00b10497101d206340919f3ae411bdc0342484e7"
+dependencies = [
+ "beef",
+ "bitflags",
+ "chrono",
+ "crossbeam",
+ "defer-drop",
+ "derive_builder",
+ "fuzzy-matcher",
+ "lazy_static",
+ "log",
+ "nix 0.25.1",
+ "once_cell",
+ "rayon",
+ "regex",
+ "time 0.3.17",
+ "timer",
+ "tuikit",
+ "unicode-width",
+ "vte",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb20089a8ba2b69debd491f8d2d023761cbf196e999218c591fa1e7e15a21907"
+dependencies = [
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
+dependencies = [
+ "itoa",
+ "libc",
+ "num_threads",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "timer"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31d42176308937165701f50638db1c31586f183f1aab416268216577aec7306b"
+dependencies = [
+ "chrono",
+]
+
+[[package]]
+name = "tuikit"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e19c6ab038babee3d50c8c12ff8b910bdb2196f62278776422f50390d8e53d8"
+dependencies = [
+ "bitflags",
+ "lazy_static",
+ "log",
+ "nix 0.24.3",
+ "term",
+ "unicode-width",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372"
+
+[[package]]
+name = "uuid"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "vte"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aae21c12ad2ec2d168c236f369c38ff332bc1134f7246350dca641437365045"
+dependencies = [
+ "arrayvec",
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+
+[[package]]
+name = "which"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
+name = "xattr"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea263437ca03c1522846a4ddafbca2542d0ad5ed9b784909d4b27b76f62bc34a"
+dependencies = [
+ "libc",
+]
diff --git a/nixpkgs/pkgs/tools/filesystems/httm/default.nix b/nixpkgs/pkgs/tools/filesystems/httm/default.nix
new file mode 100644
index 000000000000..3a36af72462e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/httm/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "httm";
+  version = "0.23.3";
+
+  src = fetchFromGitHub {
+    owner = "kimono-koans";
+    repo = pname;
+    rev = version;
+    hash = "sha256-yia7GEPemFVHzTkhrL7HejQsFO1zwpdUtq4DLdm4s2g=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "skim-0.10.2" = "sha256-5bDQZer4r9sNupIilY3afXbyFE1UB8kNsZIFOPmuyu4=";
+    };
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage httm.1
+
+    installShellCompletion --cmd httm \
+      --zsh scripts/httm-key-bindings.zsh
+  '';
+
+  meta = with lib; {
+    description = "Interactive, file-level Time Machine-like tool for ZFS/btrfs";
+    homepage = "https://github.com/kimono-koans/httm";
+    changelog = "https://github.com/kimono-koans/httm/releases/tag/${version}";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ wyndon ];
+    mainProgram = "httm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/httpdirfs/default.nix b/nixpkgs/pkgs/tools/filesystems/httpdirfs/default.nix
new file mode 100644
index 000000000000..6163e1a0158a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/httpdirfs/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, curl, expat, fuse, gumbo, libuuid }:
+
+stdenv.mkDerivation rec {
+  pname = "httpdirfs";
+  version = "1.2.3";
+
+  src = fetchFromGitHub {
+    owner = "fangfufu";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-rdeBlAV3t/si9x488tirUGLZRYAxh13zdRIQe0OPd+A=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ curl expat fuse gumbo libuuid ];
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "A FUSE filesystem for HTTP directory listings";
+    homepage = "https://github.com/fangfufu/httpdirfs";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ sbruder schnusch ];
+    platforms = platforms.unix;
+    mainProgram = "httpdirfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/httpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/httpfs/default.nix
new file mode 100644
index 000000000000..f7a42f192eef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/httpfs/default.nix
@@ -0,0 +1,37 @@
+{ fetchurl, lib, stdenv, pkg-config, fuse, openssl, asciidoc
+, docbook_xml_dtd_45, docbook_xsl , libxml2, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "httpfs2";
+  version = "0.1.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/httpfs/httpfs2/httpfs2-${version}.tar.gz";
+    sha256 = "1h8ggvhw30n2r6w11n1s458ypggdqx6ldwd61ma4yd7binrlpjq1";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs =
+    [ fuse openssl
+      asciidoc docbook_xml_dtd_45 docbook_xsl libxml2 libxslt
+    ];
+
+  installPhase =
+    '' mkdir -p "$out/bin"
+       cp -v httpfs2 "$out/bin"
+
+       mkdir -p "$out/share/man/man1"
+       cp -v *.1 "$out/share/man/man1"
+    '';
+
+  meta = {
+    description = "FUSE-based HTTP filesystem for Linux";
+
+    homepage = "https://httpfs.sourceforge.net/";
+
+    license = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.unix;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/hubicfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/hubicfuse/default.nix
new file mode 100644
index 000000000000..95dabe2f97b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/hubicfuse/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, curl, openssl, fuse, libxml2, json_c, file }:
+
+stdenv.mkDerivation rec {
+  pname = "hubicfuse";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    owner = "TurboGit";
+    repo = "hubicfuse";
+    rev = "v${version}";
+    sha256 = "1x988hfffxgvqxh083pv3lj5031fz03sbgiiwrjpaiywfbhm8ffr";
+  };
+
+  patches = [
+    # Fix Darwin build
+    # https://github.com/TurboGit/hubicfuse/pull/159
+    (fetchpatch {
+      url = "https://github.com/TurboGit/hubicfuse/commit/b460f40d86bc281a21379158a7534dfb9f283786.patch";
+      sha256 = "0nqvcbrgbc5dms8fkz3brlj40yn48p36drabrnc26gvb3hydh5dl";
+    })
+    # UPstream fix for build failure on -fno-common toolchains
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/TurboGit/hubicfuse/commit/34a6c3e57467b5f7e9befe2171bf4292893c5a18.patch";
+      sha256 = "0k1jz2h8sdhmi0srx0adbyrcrm57j4annj84yw6hdrly5hsf7bzc";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ curl openssl fuse libxml2 json_c file ];
+  postInstall = ''
+    install hubic_token $out/bin
+    mkdir -p $out/sbin
+    ln -sf $out/bin/hubicfuse $out/sbin/mount.hubicfuse
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/TurboGit/hubicfuse";
+    description = "FUSE-based filesystem to access hubic cloud storage";
+    platforms = platforms.unix;
+    license = licenses.mit;
+    maintainers = [ maintainers.jpierre03 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ifuse/default.nix b/nixpkgs/pkgs/tools/filesystems/ifuse/default.nix
new file mode 100644
index 000000000000..8f2e1f2a6ffb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ifuse/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, fuse
+, usbmuxd
+, libimobiledevice
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ifuse";
+  version = "1.1.4+date=2022-04-04";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "6f5b8e410f9615b3369ca5eb5367745e13d83b92";
+    hash = "sha256-KbuJLS2BWua9DnhLv2KtsQObin0PQwXQwEdgi3lSAPk=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    fuse
+    usbmuxd
+    libimobiledevice
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/libimobiledevice/ifuse";
+    description = "A fuse filesystem implementation to access the contents of iOS devices";
+    longDescription = ''
+      Mount directories of an iOS device locally using fuse. By default the media
+      directory is mounted, options allow to also mount the sandbox container of an
+      app, an app's documents folder or even the root filesystem on jailbroken
+      devices.
+    '';
+    license = licenses.lgpl21Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ infinisil ];
+    mainProgram = "ifuse";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ioztat/default.nix b/nixpkgs/pkgs/tools/filesystems/ioztat/default.nix
new file mode 100644
index 000000000000..b5f949ad4f2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ioztat/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ioztat";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "jimsalterjrs";
+    repo = "ioztat";
+    rev = "v${version}";
+    sha256 = "sha256-8svMijgVxSuquPFO2Q2HeqGLdMkwhiujS1DSxC/LRRk=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+  buildInputs = [ python3 ];
+
+  prePatch = ''
+    patchShebangs .
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vDt $out/bin -m 0555 ioztat
+
+    if [ -f ioztat.8 ]; then
+      installManPage ioztat.8
+    fi
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    inherit version;
+    inherit (src.meta) homepage;
+    description = "A storage load analysis tool for OpenZFS";
+    longDescription = ''
+      ioztat is a storage load analysis tool for OpenZFS. It provides
+      iostat-like statistics at an individual dataset/zvol level.
+
+      The statistics offered are read and write operations per second, read and
+      write throughput per second, and the average size of read and write
+      operations issued in the current reporting interval. Viewing these
+      statistics at the individual dataset level allows system administrators
+      to identify storage "hot spots" in larger multi-tenant
+      systems -- particularly those with many VMs or containers operating
+      essentially independent workloads.
+    '';
+    license = licenses.bsd2;
+    platforms = with platforms; linux ++ freebsd;
+    maintainers = with maintainers; [ numinit ];
+    mainProgram = "ioztat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/irods/common.nix b/nixpkgs/pkgs/tools/filesystems/irods/common.nix
new file mode 100644
index 000000000000..27825fdcbeac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/irods/common.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, bzip2, zlib, autoconf, automake, cmake, help2man, texinfo, libtool, cppzmq, libarchive
+, avro-cpp, boost, zeromq, openssl, pam, libiodbc, libkrb5, gcc, libcxx, which, catch2, nanodbc, fmt
+, nlohmann_json, spdlog, curl }:
+
+# Common attributes of irods packages
+
+{
+  nativeBuildInputs = [ autoconf automake cmake help2man texinfo which gcc ];
+  buildInputs = [ bzip2 zlib libtool cppzmq libarchive avro-cpp zeromq openssl pam libiodbc libkrb5 boost
+                  libcxx catch2 nanodbc fmt nlohmann_json spdlog curl ];
+
+  cmakeFlags = [
+    "-DIRODS_EXTERNALS_FULLPATH_CLANG=${stdenv.cc}"
+    "-DIRODS_EXTERNALS_FULLPATH_CLANG_RUNTIME=${stdenv.cc}"
+    "-DIRODS_EXTERNALS_FULLPATH_ARCHIVE=${libarchive.lib}"
+    "-DIRODS_EXTERNALS_FULLPATH_AVRO=${avro-cpp}"
+    "-DIRODS_EXTERNALS_FULLPATH_BOOST=${boost}"
+    "-DIRODS_EXTERNALS_FULLPATH_ZMQ=${zeromq}"
+    "-DIRODS_EXTERNALS_FULLPATH_CPPZMQ=${cppzmq}"
+    "-DIRODS_EXTERNALS_FULLPATH_CATCH2=${catch2}"
+    "-DIRODS_EXTERNALS_FULLPATH_NANODBC=${nanodbc}"
+    "-DIRODS_EXTERNALS_FULLPATH_FMT=${fmt}"
+    "-DIRODS_EXTERNALS_FULLPATH_JSON=${nlohmann_json}"
+    "-DIRODS_EXTERNALS_FULLPATH_SPDLOG=${spdlog}"
+    "-DIRODS_LINUX_DISTRIBUTION_NAME=nix"
+    "-DIRODS_LINUX_DISTRIBUTION_VERSION_MAJOR=1.0"
+    "-DCPACK_GENERATOR=TGZ"
+    "-DCMAKE_CXX_FLAGS=-I${lib.getDev libcxx}/include/c++/v1"
+  ];
+
+  postPatch = ''
+    patchShebangs ./packaging ./scripts
+    export cmakeFlags="$cmakeFlags
+      -DCMAKE_INSTALL_PREFIX=$out
+      -DIRODS_HOME_DIRECTORY=$out
+      -DCMAKE_INSTALL_SBINDIR=$out/sbin
+    "
+  '';
+
+  meta = with lib; {
+    description = "Integrated Rule-Oriented Data System (iRODS)";
+    longDescription = ''
+      The Integrated Rule-Oriented Data System (iRODS) is open source data management
+      software used by research organizations and government agencies worldwide.
+      iRODS is released as a production-level distribution aimed at deployment in mission
+      critical environments.  It virtualizes data storage resources, so users can take
+      control of their data, regardless of where and on what device the data is stored.
+      As data volumes grow and data services become more complex, iRODS is increasingly
+      important in data management. The development infrastructure supports exhaustive
+      testing on supported platforms; plug-in support for microservices, storage resources,
+      drivers, and databases; and extensive documentation, training and support services.'';
+    homepage = "https://irods.org";
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.bzizou ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/irods/default.nix b/nixpkgs/pkgs/tools/filesystems/irods/default.nix
new file mode 100644
index 000000000000..0b25f45c910d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/irods/default.nix
@@ -0,0 +1,89 @@
+{ lib, stdenv, fetchFromGitHub, bzip2, zlib, autoconf, automake, cmake, help2man, texinfo, libtool, cppzmq
+, libarchive, avro-cpp_llvm, boost, zeromq, openssl, pam, libiodbc, libkrb5, gcc, libcxx, which, catch2
+, nanodbc_llvm, fmt, nlohmann_json, spdlog, curl }:
+
+let
+  avro-cpp = avro-cpp_llvm;
+  nanodbc = nanodbc_llvm;
+in
+let
+  common = import ./common.nix {
+    inherit lib stdenv bzip2 zlib autoconf automake cmake
+      help2man texinfo libtool cppzmq libarchive
+      zeromq openssl pam libiodbc libkrb5 gcc libcxx
+      boost avro-cpp which catch2 nanodbc fmt nlohmann_json
+      spdlog curl;
+  };
+in
+rec {
+
+  # irods: libs and server package
+  irods = stdenv.mkDerivation (finalAttrs: common // {
+    version = "4.3.0";
+    pname = "irods";
+
+    src = fetchFromGitHub {
+      owner = "irods";
+      repo = "irods";
+      rev = finalAttrs.version;
+      sha256 = "sha256-rceDGFpfoFIByzDOtgNIo9JRoVd0syM21MjEKoZUQaE=";
+      fetchSubmodules = true;
+    };
+
+    # fix build with recent llvm versions
+    env.NIX_CFLAGS_COMPILE = "-Wno-deprecated-register -Wno-deprecated-declarations";
+
+    postPatch = common.postPatch + ''
+      patchShebangs ./test
+      substituteInPlace plugins/database/CMakeLists.txt --replace "COMMAND cpp" "COMMAND ${gcc.cc}/bin/cpp"
+      for file in unit_tests/cmake/test_config/*.cmake
+      do
+        substituteInPlace $file --replace "CATCH2}/include" "CATCH2}/include/catch2"
+      done
+      export cmakeFlags="$cmakeFlags
+        -DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath,$out/lib
+        -DCMAKE_MODULE_LINKER_FLAGS=-Wl,-rpath,$out/lib
+        -DCMAKE_SHARED_LINKER_FLAGS=-Wl,-rpath,$out/lib
+        "
+
+      substituteInPlace server/auth/CMakeLists.txt --replace SETUID ""
+    '';
+
+    meta = common.meta // {
+      longDescription = common.meta.longDescription + "This package provides the servers and libraries.";
+    };
+  });
+
+
+  # icommands (CLI) package, depends on the irods package
+  irods-icommands = stdenv.mkDerivation (finalAttrs: common // {
+    version = "4.3.0";
+    pname = "irods-icommands";
+
+    src = fetchFromGitHub {
+      owner = "irods";
+      repo = "irods_client_icommands";
+      rev = finalAttrs.version;
+      sha256 = "sha256-90q1GPkoEUoiQXM6cA+DWwth7g8v93V471r9jm+l9aw=";
+    };
+
+    buildInputs = common.buildInputs ++ [ irods ];
+
+    postPatch = common.postPatch + ''
+      patchShebangs ./bin
+    '';
+
+    cmakeFlags = common.cmakeFlags ++ [
+      "-DCMAKE_INSTALL_PREFIX=${stdenv.out}"
+      "-DIRODS_DIR=${irods}/lib/irods/cmake"
+      "-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath,${irods}/lib"
+      "-DCMAKE_MODULE_LINKER_FLAGS=-Wl,-rpath,${irods}/lib"
+      "-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-rpath,${irods}/lib"
+    ];
+
+    meta = common.meta // {
+      description = common.meta.description + " CLI clients";
+      longDescription = common.meta.longDescription + "This package provides the CLI clients, called 'icommands'.";
+    };
+  });
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/jefferson/default.nix b/nixpkgs/pkgs/tools/filesystems/jefferson/default.nix
new file mode 100644
index 000000000000..948de453ec18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jefferson/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "jefferson";
+  version = "0.4.5";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "onekey-sec";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-PGtrvZ0cQvdiswn2Bk43c3LbIZqJyvNe5rnTPw/ipUM=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    cstruct
+    lzallright
+  ];
+
+  pythonImportsCheck = [
+    "jefferson"
+  ];
+
+  # upstream has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "JFFS2 filesystem extraction tool";
+    homepage = "https://github.com/onekey-sec/jefferson";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tnias vlaci ];
+    mainProgram = "jefferson";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/jfsutils/ar-fix.patch b/nixpkgs/pkgs/tools/filesystems/jfsutils/ar-fix.patch
new file mode 100644
index 000000000000..697029cd5a8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jfsutils/ar-fix.patch
@@ -0,0 +1,10 @@
+--- jfsutils-1.1.15/configure.in.orig	2018-11-27 20:46:55.830242385 +0300
++++ jfsutils-1.1.15/configure.in	2018-11-27 20:47:00.596307630 +0300
+@@ -15,6 +15,7 @@
+ AC_PATH_PROG(LN, ln, ln)
+ AC_PROG_LN_S
+ AC_PROG_RANLIB
++AM_PROG_AR
+ 
+ dnl Checks for header files.
+ AC_HEADER_STDC
diff --git a/nixpkgs/pkgs/tools/filesystems/jfsutils/default.nix b/nixpkgs/pkgs/tools/filesystems/jfsutils/default.nix
new file mode 100644
index 000000000000..0ddd6cfd4dad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jfsutils/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, fetchpatch, libuuid, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "jfsutils";
+  version = "1.1.15";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/jfs/jfsutils-${version}.tar.gz";
+    sha256 = "0kbsy2sk1jv4m82rxyl25gwrlkzvl3hzdga9gshkxkhm83v1aji4";
+  };
+
+  patches = [
+    ./types.patch
+    ./hardening-format.patch
+    # required for cross-compilation
+    ./ar-fix.patch
+    # fix for glibc>=2.28
+    (fetchpatch {
+      name   = "add_sysmacros.patch";
+      url    = "https://sources.debian.org/data/main/j/jfsutils/1.1.15-4/debian/patches/add_sysmacros.patch";
+      sha256 = "1qcwvxs4d0d24w5x98z59arqfx2n7f0d9xaqhjcg6w8n34vkhnyc";
+    })
+    # fix for musl
+    (fetchpatch {
+      name = "musl-fix-includes.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/jfsutils/musl-fix-includes.patch?id=567823dca7dc1f8ce919efbe99762d2d5c020124";
+      sha256 = "sha256-FjdUOI+y+MdSWxTR+csH41uR0P+PWWTfIMPwQjBfQtQ=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libuuid ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #     ld: extract.o:/build/jfsutils-1.1.15/fscklog/extract.c:67: multiple definition of
+  #       `xchklog_buffer'; display.o:/build/jfsutils-1.1.15/fscklog/display.c:57: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  # this required for wipefreespace
+  postInstall = ''
+    mkdir -p $out/include
+    cp include/*.h $out/include
+    mkdir -p $out/lib
+    cp ./libfs/libfs.a $out/lib
+  '';
+
+  meta = with lib; {
+    description = "IBM JFS utilities";
+    homepage = "https://jfs.sourceforge.net";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/jfsutils/hardening-format.patch b/nixpkgs/pkgs/tools/filesystems/jfsutils/hardening-format.patch
new file mode 100644
index 000000000000..dd2a93a81ec6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jfsutils/hardening-format.patch
@@ -0,0 +1,37 @@
+--- a/fscklog/fscklog.c	2016-01-29 04:59:54.102223291 +0000
++++ b/fscklog/fscklog.c	2016-01-29 05:00:10.707552565 +0000
+@@ -252,8 +252,8 @@
+ 
+ 	sprintf(debug_detail, " [%s:%d]\n", basename(file_name), line_number);
+ 
+-	printf(msg_string);
+-	printf(debug_detail);
++	printf("%s", msg_string);
++	printf("%s", debug_detail);
+ 
+ 	return 0;
+ }
+--- a/fscklog/display.c	2016-01-29 05:05:42.582133444 +0000
++++ b/fscklog/display.c	2016-01-29 05:05:47.541231780 +0000
+@@ -182,7 +182,7 @@
+ 				} else {
+ 					/* the record looks ok */
+ 					msg_txt = &log_entry[log_entry_pos];
+-					printf(msg_txt);
++					printf("%s", msg_txt);
+ 					/*
+ 					 * set up for the next record
+ 					 */
+--- a/logdump/helpers.c	2016-01-29 05:06:26.081996021 +0000
++++ b/logdump/helpers.c	2016-01-29 05:06:43.097333425 +0000
+@@ -95,8 +95,8 @@
+ 
+ 	sprintf(debug_detail, " [%s:%d]\n", file_name, line_number);
+ 
+-	printf(msg_string);
+-	printf(debug_detail);
++	printf("%s", msg_string);
++	printf("%s", debug_detail);
+ 
+ 	return 0;
+ }
diff --git a/nixpkgs/pkgs/tools/filesystems/jfsutils/types.patch b/nixpkgs/pkgs/tools/filesystems/jfsutils/types.patch
new file mode 100644
index 000000000000..a682f2695f9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jfsutils/types.patch
@@ -0,0 +1,12 @@
+diff -ru -x '*~' jfsutils-1.1.15-orig/libfs/devices.h jfsutils-1.1.15/libfs/devices.h
+--- jfsutils-1.1.15-orig/libfs/devices.h	2005-11-22 21:43:55.000000000 +0100
++++ jfsutils-1.1.15/libfs/devices.h	2013-01-28 13:58:56.888630278 +0100
+@@ -18,6 +18,8 @@
+ #ifndef H_DEVICES
+ #define H_DEVICES
+ 
++#include <inttypes.h>
++
+ #define GET	0
+ #define PUT	1
+ #define VRFY	2
diff --git a/nixpkgs/pkgs/tools/filesystems/jmtpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/jmtpfs/default.nix
new file mode 100644
index 000000000000..6c5dd3d30c70
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jmtpfs/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, file, fuse, libmtp }:
+
+stdenv.mkDerivation rec {
+  pname = "jmtpfs";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    sha256 = "1pm68agkhrwgrplrfrnbwdcvx5lrivdmqw8pb5gdmm3xppnryji1";
+    rev = "v${version}";
+    repo = "jmtpfs";
+    owner = "JasonFerrara";
+  };
+
+  patches = [
+    # Fix Darwin build (https://github.com/JasonFerrara/jmtpfs/pull/12)
+    (fetchpatch {
+      url = "https://github.com/JasonFerrara/jmtpfs/commit/b89084303477d1bc4dc9a887ba9cdd75221f497d.patch";
+      sha256 = "0s7x3jfk8i86rd5bwhj7mb1lffcdlpj9bd7b41s1768ady91rb29";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ file fuse libmtp ];
+
+  meta = with lib; {
+    description = "A FUSE filesystem for MTP devices like Android phones";
+    homepage = "https://github.com/JasonFerrara/jmtpfs";
+    license = licenses.gpl3Only;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.coconnor ];
+    mainProgram = "jmtpfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/juicefs/default.nix b/nixpkgs/pkgs/tools/filesystems/juicefs/default.nix
new file mode 100644
index 000000000000..6f6dd4101597
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/juicefs/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "juicefs";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "juicedata";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Sf68N5ZKveKM6xZEqF7Ah0KGgOx1cGZpJ2lYkUlgpI0=";
+  };
+
+  vendorHash = "sha256-ofUo/3EQPhXPNeD/3to5oFir/3eAaf9WBHR4DOzcxBQ=";
+
+  ldflags = [ "-s" "-w" ];
+
+  doCheck = false; # requires network access
+
+  # we dont need the libjfs binary
+  postFixup = ''
+    rm $out/bin/libjfs
+  '';
+
+  postInstall = ''
+    ln -s $out/bin/juicefs $out/bin/mount.juicefs
+  '';
+
+  meta = with lib; {
+    description = "A distributed POSIX file system built on top of Redis and S3";
+    homepage = "https://www.juicefs.com/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/kdiskmark/default.nix b/nixpkgs/pkgs/tools/filesystems/kdiskmark/default.nix
new file mode 100644
index 000000000000..fd6281a43ab6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/kdiskmark/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, lib
+, wrapQtAppsHook
+, qtbase
+, qttools
+, fio
+, cmake
+, polkit-qt
+, extra-cmake-modules
+, fetchFromGitHub
+}:
+stdenv.mkDerivation rec {
+  name = "kdiskmark";
+  version = "3.1.4";
+
+  src = fetchFromGitHub {
+    owner = "jonmagon";
+    repo = "kdiskmark";
+    rev = version;
+    sha256 = "sha256-JueY7zw9PIo9ETi7pQLpw8FGRhNXYXeXEvTzZGz9lbw=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  buildInputs = [
+    qtbase
+    qttools
+    extra-cmake-modules
+    polkit-qt
+  ];
+
+  preConfigure = ''
+    substituteInPlace CMakeLists.txt \
+      --replace \$\{POLKITQT-1_POLICY_FILES_INSTALL_DIR\} $out/share/polkit-1/actions
+  '';
+
+  qtWrapperArgs =
+    [ "--prefix" "PATH" ":" (lib.makeBinPath [ fio ]) ];
+
+  meta = with lib; {
+    description = "HDD and SSD benchmark tool with a friendly graphical user interface";
+    longDescription = ''
+      If kdiskmark is not run as root it can rely on polkit to get the necessary
+      privileges. In this case you must install it with `environment.systemPackages`
+      on NixOS, nix-env will not work.
+    '';
+    homepage = "https://github.com/JonMagon/KDiskMark";
+    maintainers = [ maintainers.symphorien ];
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    mainProgram = "kdiskmark";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/filesystems/kio-fuse/default.nix b/nixpkgs/pkgs/tools/filesystems/kio-fuse/default.nix
new file mode 100644
index 000000000000..3d5e7f509bc4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/kio-fuse/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, mkDerivation
+, fetchgit
+, cmake
+, extra-cmake-modules
+, kio
+, fuse3
+}:
+
+mkDerivation rec {
+  pname = "kio-fuse";
+  version = "5.1.0";
+
+  src = fetchgit {
+    url = "https://invent.kde.org/system/kio-fuse.git";
+    sha256 = "sha256-xVeDNkSeHCk86L07lPVokSgHNkye2tnLoCkdw4g2Jv0=";
+    rev = "v${version}";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  buildInputs = [ kio fuse3 ];
+
+  meta = with lib; {
+    description = "FUSE Interface for KIO";
+    homepage = "https://invent.kde.org/system/kio-fuse";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ _1000teslas ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/lizardfs/default.nix b/nixpkgs/pkgs/tools/filesystems/lizardfs/default.nix
new file mode 100644
index 000000000000..7f7a9f54fd82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/lizardfs/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, makeWrapper
+, python3
+, db
+, fuse
+, asciidoc
+, libxml2
+, libxslt
+, docbook_xml_dtd_412
+, docbook_xsl
+, boost
+, pkg-config
+, judy
+, pam
+, spdlog
+, systemdMinimal
+, zlib # optional
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lizardfs";
+  version = "3.13.0-rc3";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-rgaFhJvmA1RVDL4+vQLMC0GrdlgUlvJeZ5/JJ67C20Q=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+
+  buildInputs = [
+    db fuse asciidoc libxml2 libxslt docbook_xml_dtd_412 docbook_xsl
+    zlib boost judy pam spdlog python3 systemdMinimal
+  ];
+
+  meta = with lib; {
+    homepage = "https://lizardfs.com";
+    description = "A highly reliable, scalable and efficient distributed file system";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ rushmorem shamilton ];
+    # 'fprintf' was not declared in this scope
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mergerfs/default.nix b/nixpkgs/pkgs/tools/filesystems/mergerfs/default.nix
new file mode 100644
index 000000000000..edc5708a6119
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mergerfs/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, automake, autoconf, pkg-config, gettext, libtool, pandoc, which, attr, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "mergerfs";
+  version = "2.39.0";
+
+  src = fetchFromGitHub {
+    owner = "trapexit";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-48ArTS1Gd1z7WUX1RjiHMuyp3K3p9FJPU2XO4bj292I=";
+  };
+
+  nativeBuildInputs = [
+    automake autoconf pkg-config gettext libtool pandoc which
+  ];
+  prePatch = ''
+    sed -i -e '/chown/d' -e '/chmod/d' libfuse/Makefile
+  '';
+  buildInputs = [ attr libiconv ];
+
+  preConfigure = ''
+    echo "${version}" > VERSION
+  '';
+
+  makeFlags = [ "DESTDIR=${placeholder "out"}" "XATTR_AVAILABLE=1" "PREFIX=/" "SBINDIR=/bin" ];
+  enableParallelBuilding = true;
+
+  postFixup = ''
+    ln -srf $out/bin/mergerfs $out/bin/mount.fuse.mergerfs
+    ln -srf $out/bin/mergerfs $out/bin/mount.mergerfs
+  '';
+
+  meta = {
+    description = "A FUSE based union filesystem";
+    homepage = "https://github.com/trapexit/mergerfs";
+    license = lib.licenses.isc;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mergerfs/tools.nix b/nixpkgs/pkgs/tools/filesystems/mergerfs/tools.nix
new file mode 100644
index 000000000000..f5235239103d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mergerfs/tools.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, coreutils, makeWrapper
+, rsync, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "mergerfs-tools";
+  version = "20230912";
+
+  src = fetchFromGitHub {
+    owner = "trapexit";
+    repo = pname;
+    rev = "80d6c9511da554009415d67e7c0ead1256c1fc41";
+    hash = "sha256-9sn2ziIjes2squSGbjjXVch2zDFjQruWB4282p4jWcY=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 ];
+
+  makeFlags = [
+    "INSTALL=${coreutils}/bin/install"
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  postInstall = with lib; ''
+    wrapProgram $out/bin/mergerfs.balance --prefix PATH : ${makeBinPath [ rsync ]}
+    wrapProgram $out/bin/mergerfs.dup --prefix PATH : ${makeBinPath [ rsync ]}
+    wrapProgram $out/bin/mergerfs.mktrash --prefix PATH : ${makeBinPath [ python3.pkgs.xattr ]}
+  '';
+
+  meta = with lib; {
+    description = "Optional tools to help manage data in a mergerfs pool";
+    homepage = "https://github.com/trapexit/mergerfs-tools";
+    license = licenses.isc;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mhddfs/default.nix b/nixpkgs/pkgs/tools/filesystems/mhddfs/default.nix
new file mode 100644
index 000000000000..58986c25dbf2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mhddfs/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, fuse, pkg-config, attr, uthash }:
+
+stdenv.mkDerivation rec {
+  pname = "mhddfs";
+  version = "0.1.39";
+
+  src = fetchurl {
+    url = "https://mhddfs.uvw.ru/downloads/mhddfs_${version}.tar.gz";
+    sha256 = "14ggmh91vv69fp2qpz0nxp0hprlw2wsijss2k2485hb0ci4cabvh";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ fuse attr uthash ];
+
+  patches = [
+    ./fix-format-security-error.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace src/main.c --replace "attr/xattr.h" "sys/xattr.h"
+    substituteInPlace src/tools.c --replace "attr/xattr.h" "sys/xattr.h"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp mhddfs $out/bin/
+  '';
+
+  meta = {
+    homepage = "https://mhddfs.uvw.ru/";
+    description = "Combines a several mount points into the single one";
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.makefu ];
+    mainProgram = "mhddfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mhddfs/fix-format-security-error.patch b/nixpkgs/pkgs/tools/filesystems/mhddfs/fix-format-security-error.patch
new file mode 100644
index 000000000000..35e58cf0ce9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mhddfs/fix-format-security-error.patch
@@ -0,0 +1,12 @@
+--- mhddfs-0.1.39/src/usage.c.old	2017-02-28 15:00:25.435438622 +0100
++++ mhddfs-0.1.39/src/usage.c	2017-02-28 15:00:33.847454958 +0100
+@@ -43,7 +43,7 @@
+ 		"\n"
+ 		" see fusermount(1) for information about other options\n"
+ 		"";
+-	fprintf(to, usage);
++	fputs(usage, to);
+ 	if (to==stdout) exit(0);
+ 	exit(-1);
+ }
+
diff --git a/nixpkgs/pkgs/tools/filesystems/mkspiffs/default.nix b/nixpkgs/pkgs/tools/filesystems/mkspiffs/default.nix
new file mode 100644
index 000000000000..c2712376da6b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mkspiffs/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+# Changing the variables CPPFLAGS and BUILD_CONFIG_NAME can be done by
+# overriding the same-named attributes. See ./presets.nix for examples.
+
+stdenv.mkDerivation rec {
+  pname = "mkspiffs";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "igrr";
+    repo = "mkspiffs";
+    rev = version;
+    fetchSubmodules = true;
+    hash = "sha256-oa6Lmo2yb66IjtEKkZyJBgM/p7rdvmrKfgNd2rAM/Lk=";
+  };
+
+  buildFlags = [ "dist" ];
+
+  makeFlags = [
+    "VERSION=${version}"
+    "SPIFFS_VERSION=unknown"
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp mkspiffs $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Tool to build and unpack SPIFFS images";
+    license = licenses.mit;
+    homepage = "https://github.com/igrr/mkspiffs";
+    maintainers = with maintainers; [ haslersn ];
+    platforms = platforms.linux;
+    mainProgram = "mkspiffs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mkspiffs/presets.nix b/nixpkgs/pkgs/tools/filesystems/mkspiffs/presets.nix
new file mode 100644
index 000000000000..d4008b2fa3c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mkspiffs/presets.nix
@@ -0,0 +1,20 @@
+{ lib, mkspiffs }:
+
+# We provide the same presets as the upstream
+
+lib.mapAttrs (
+  name: { CPPFLAGS }:
+  mkspiffs.overrideAttrs {
+    inherit CPPFLAGS;
+    BUILD_CONFIG_NAME = "-${name}";
+  }
+) {
+  arduino-esp8266.CPPFLAGS = [
+    "-DSPIFFS_USE_MAGIC_LENGTH=0"
+    "-DSPIFFS_ALIGNED_OBJECT_INDEX_TABLES=1"
+  ];
+
+  arduino-esp32.CPPFLAGS = [ "-DSPIFFS_OBJ_META_LEN=4" ];
+
+  esp-idf.CPPFLAGS = [ "-DSPIFFS_OBJ_META_LEN=4" ];
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/moosefs/default.nix b/nixpkgs/pkgs/tools/filesystems/moosefs/default.nix
new file mode 100644
index 000000000000..55b796ec3254
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/moosefs/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv
+, fetchFromGitHub
+, python3
+, fuse
+, pkg-config
+, libpcap
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "moosefs";
+  version = "3.0.117";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-6zBMAi9ruPPlcnpdgqwl35QZ5u4MyFPUa70yvGTkHpo=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs =
+    [ fuse libpcap zlib python3 ];
+
+  strictDeps = true;
+
+  buildFlags = lib.optionals stdenv.isDarwin [ "CPPFLAGS=-UHAVE_STRUCT_STAT_ST_BIRTHTIME" ];
+
+  # Fix the build on macOS with macFUSE installed
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace configure --replace \
+      "/usr/local/lib/pkgconfig" "/nonexistent"
+  '';
+
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace config.h --replace \
+      "#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1" \
+      "#undef HAVE_STRUCT_STAT_ST_BIRTHTIME"
+  '';
+
+  postInstall = ''
+    substituteInPlace $out/sbin/mfscgiserv --replace "datapath=\"$out" "datapath=\""
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://moosefs.com";
+    description = "Open Source, Petabyte, Fault-Tolerant, Highly Performing, Scalable Network Distributed File System";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.mfossen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mount-zip/default.nix b/nixpkgs/pkgs/tools/filesystems/mount-zip/default.nix
new file mode 100644
index 000000000000..bda338108051
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mount-zip/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, fuse, boost, gcc, icu, libzip, pandoc
+, pkg-config }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "mount-zip";
+  version = "1.0.12";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "mount-zip";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-bsuGEgCrU7Gxd9oAiI39AYT9aiXufrI9CniTCfa6LCY=";
+  };
+
+  nativeBuildInputs = [ boost gcc icu pandoc pkg-config ];
+  buildInputs = [ fuse libzip ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "FUSE file system for ZIP archives";
+    homepage = "https://github.com/google/mount-zip";
+    longDescription = ''
+      mount-zip is a tool allowing to open, explore and extract ZIP archives.
+
+      This project is a fork of fuse-zip.
+    '';
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ arti5an ];
+    platforms = platforms.linux;
+    mainProgram = "mount-zip";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/filesystems/mountain-duck/default.nix b/nixpkgs/pkgs/tools/filesystems/mountain-duck/default.nix
new file mode 100644
index 000000000000..a881eb4f998f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mountain-duck/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, unzip
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "mountain-duck";
+  version = "4.14.1.21330";
+
+  src = fetchurl {
+    url = "https://dist.mountainduck.io/Mountain%20Duck-${finalAttrs.version}.zip";
+    sha256 = "0wcnqwzrhzgjpm7pqzbn4fbnwc5rnmw56gma0a1961d5j9vqcs49";
+  };
+  dontUnpack = true;
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    unzip -d $out/Applications $src
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Mount server and cloud storage as a disk on macOS and Windows";
+    homepage = "https://mountainduck.io";
+    license = licenses.unfree;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ emilytrau Enzime ];
+    platforms = platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/filesystems/mp3fs/default.nix b/nixpkgs/pkgs/tools/filesystems/mp3fs/default.nix
new file mode 100644
index 000000000000..0412a99beee0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mp3fs/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, flac
+, fuse
+, lame
+, libid3tag
+, libvorbis
+, autoreconfHook
+, pkg-config
+, pandoc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mp3fs";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "khenriks";
+    repo = "mp3fs";
+    rev = "v${version}";
+    sha256 = "sha256-dF+DfkNKvYOucS6KjYR1MMGxayM+1HVS8mbmaavmgKM=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/mp3fs.cc \
+      --replace "#include <fuse_darwin.h>" "" \
+      --replace "osxfuse_version()" "fuse_version()"
+  '';
+
+  buildInputs = [ flac fuse lame libid3tag libvorbis ];
+  nativeBuildInputs = [ autoreconfHook pkg-config pandoc ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "FUSE file system that transparently transcodes to MP3";
+    longDescription = ''
+      A read-only FUSE filesystem which transcodes between audio formats
+      (currently FLAC and Ogg Vorbis to MP3) on the fly when opened and read.
+      This can let you use a FLAC or Ogg Vorbis collection with software
+      and/or hardware which only understands the MP3 format, or transcode
+      files through simple drag-and-drop in a file browser.
+    '';
+    homepage = "https://khenriks.github.io/mp3fs/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ Luflosi ];
+    mainProgram = "mp3fs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mtdutils/default.nix b/nixpkgs/pkgs/tools/filesystems/mtdutils/default.nix
new file mode 100644
index 000000000000..0ca64234e5f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mtdutils/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchgit, autoreconfHook, pkg-config, cmocka, acl, libuuid, lzo, zlib, zstd }:
+
+stdenv.mkDerivation rec {
+  pname = "mtd-utils";
+  version = "2.1.6";
+
+  src = fetchgit {
+    url = "git://git.infradead.org/mtd-utils.git";
+    rev = "v${version}";
+    sha256 = "sha256-NMYzUPt/91lv8f7E1ytX91SqwbBEOtHjCL54EcumcZA=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ] ++ lib.optional doCheck cmocka;
+  buildInputs = [ acl libuuid lzo zlib zstd ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = with lib; [
+    (enableFeature doCheck "unit-tests")
+    (enableFeature doCheck "tests")
+  ];
+
+  makeFlags = [
+    "AR:=$(AR)"
+  ];
+
+  doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
+
+  outputs = [ "out" "dev" ];
+
+  postInstall = ''
+    mkdir -p $dev/lib
+    mv *.a $dev/lib/
+    mv include $dev/
+  '';
+
+  meta = with lib; {
+    description = "Tools for MTD filesystems";
+    downloadPage = "https://git.infradead.org/mtd-utils.git";
+    license = licenses.gpl2Plus;
+    homepage = "http://www.linux-mtd.infradead.org/";
+    maintainers = with maintainers; [ viric ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mtools/UNUSED-darwin.patch b/nixpkgs/pkgs/tools/filesystems/mtools/UNUSED-darwin.patch
new file mode 100644
index 000000000000..46b790afd30a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mtools/UNUSED-darwin.patch
@@ -0,0 +1,11 @@
+--- mtools/sysincludes.h.orig	2017-04-01 20:59:46.083196540 +0100
++++ mtools/sysincludes.h	2017-04-01 20:59:12.855030456 +0100
+@@ -103,7 +103,7 @@
+ # define PACKED __attribute__ ((packed))
+ # if __GNUC__ == 2 && __GNUC_MINOR__ > 6 || __GNUC__ >= 3
+ /* gcc 2.6.3 doesn't have "unused" */		/* mool */
+-#  define UNUSED(x) x __attribute__ ((unused));x
++#  define UNUSED(x) x
+ #  define UNUSEDP __attribute__ ((unused))
+ # else
+ #  define UNUSED(x) x
diff --git a/nixpkgs/pkgs/tools/filesystems/mtools/default.nix b/nixpkgs/pkgs/tools/filesystems/mtools/default.nix
new file mode 100644
index 000000000000..9045699e2e32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mtools/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "mtools";
+  version = "4.0.43";
+
+  src = fetchurl {
+    url = "mirror://gnu/mtools/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-VB4XlmXcTicrlgLyB0JDWRoVfaicxHBk2oxYKdvSszk=";
+  };
+
+  patches = lib.optional stdenv.isDarwin ./UNUSED-darwin.patch;
+
+  # fails to find X on darwin
+  configureFlags = lib.optional stdenv.isDarwin "--without-x";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  doCheck = true;
+
+  passthru = {
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/mtools/";
+    description = "Utilities to access MS-DOS disks";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mtools/update.sh b/nixpkgs/pkgs/tools/filesystems/mtools/update.sh
new file mode 100755
index 000000000000..8fd6505490fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mtools/update.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl common-updater-scripts
+set -eu -o pipefail
+
+version="$(curl -s --list-only ftp://ftp.gnu.org/gnu/mtools/ | sed 's/^.*-\([0-9]\+\.[0-9]\+\.[0-9]\+\).*$/\1/' | sort -n | uniq | tail -n1)"
+update-source-version mtools "$version"
diff --git a/nixpkgs/pkgs/tools/filesystems/mtpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/mtpfs/default.nix
new file mode 100644
index 000000000000..d84f9cc9b9b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mtpfs/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, pkg-config, fuse, libmtp, glib, libmad, libid3tag }:
+
+stdenv.mkDerivation rec {
+  pname = "mtpfs";
+  version = "1.1";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ fuse libmtp glib libid3tag libmad ];
+
+  src = fetchurl {
+    url = "https://www.adebenham.com/files/mtp/mtpfs-${version}.tar.gz";
+    sha256 = "07acrqb17kpif2xcsqfqh5j4axvsa4rnh6xwnpqab5b9w5ykbbqv";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/cjd/mtpfs";
+    description = "FUSE Filesystem providing access to MTP devices";
+    platforms = platforms.all;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.qknight ];
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/mtpfs.x86_64-darwin
+    mainProgram = "mtpfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/netatalk/000-no-suid.patch b/nixpkgs/pkgs/tools/filesystems/netatalk/000-no-suid.patch
new file mode 100644
index 000000000000..194c1f5fac9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/netatalk/000-no-suid.patch
@@ -0,0 +1,11 @@
+diff --git a/bin/afppasswd/Makefile.am b/bin/afppasswd/Makefile.am
+index 578eac1..d17aa22 100644
+--- a/bin/afppasswd/Makefile.am
++++ b/bin/afppasswd/Makefile.am
+@@ -16,5 +16,5 @@ AM_CFLAGS = @SSL_CFLAGS@ -I$(top_srcdir)/sys \
+ 
+ install-exec-hook:
+ if HAVE_OPENSSL
+-	chmod u+s $(DESTDIR)$(bindir)/afppasswd
++#	chmod u+s $(DESTDIR)$(bindir)/afppasswd
+ endif
diff --git a/nixpkgs/pkgs/tools/filesystems/netatalk/001-omit-localstatedir-creation.patch b/nixpkgs/pkgs/tools/filesystems/netatalk/001-omit-localstatedir-creation.patch
new file mode 100644
index 000000000000..01c4ee9ba478
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/netatalk/001-omit-localstatedir-creation.patch
@@ -0,0 +1,19 @@
+diff --git a/config/Makefile.am b/config/Makefile.am
+index c98a2ab..58b7f0a 100644
+--- a/config/Makefile.am
++++ b/config/Makefile.am
+@@ -36,10 +36,10 @@ endif
+ #
+ 
+ install-data-local: install-config-files
+-	mkdir -pm 0755 $(DESTDIR)$(localstatedir)/netatalk/
+-	mkdir -pm 0755 $(DESTDIR)$(localstatedir)/netatalk/CNID/
+-	$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(localstatedir)/netatalk/
+-	$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(localstatedir)/netatalk/CNID/
++#	mkdir -pm 0755 $(DESTDIR)$(localstatedir)/netatalk/
++#	mkdir -pm 0755 $(DESTDIR)$(localstatedir)/netatalk/CNID/
++#	$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(localstatedir)/netatalk/
++#	$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(localstatedir)/netatalk/CNID/
+ 
+ uninstall-local:
+ 	@for f in $(CONFFILES) $(GENFILES); do \
diff --git a/nixpkgs/pkgs/tools/filesystems/netatalk/default.nix b/nixpkgs/pkgs/tools/filesystems/netatalk/default.nix
new file mode 100644
index 000000000000..950d10640bf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/netatalk/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchurl
+, acl
+, autoreconfHook
+, avahi
+, db
+, libevent
+, libgcrypt
+, libiconv
+, openssl
+, pam
+, perl
+, pkg-config
+, python3
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netatalk";
+  version = "3.1.18";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/netatalk/netatalk/netatalk-${finalAttrs.version}.tar.bz2";
+    hash = "sha256-htIJ3Hd2pLoXhFFk0uN2pGnO43aiexiuMYmOP0ukFlU=";
+  };
+
+  patches = [
+    ./000-no-suid.patch
+    ./001-omit-localstatedir-creation.patch
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    perl
+    python3
+    python3.pkgs.wrapPython
+  ];
+
+  buildInputs = [
+    acl
+    avahi
+    db
+    libevent
+    libgcrypt
+    libiconv
+    openssl
+    pam
+  ];
+
+  configureFlags = [
+    "--with-bdb=${db.dev}"
+    "--with-ssl-dir=${openssl.dev}"
+    "--with-lockfile=/run/lock/netatalk"
+    "--localstatedir=/var/lib"
+  ];
+
+  postInstall = ''
+    sed -i -e "s%/usr/bin/env python%${python3}/bin/python3%" $out/bin/afpstats
+    buildPythonPath ${python3.pkgs.dbus-python}
+    patchPythonScript $out/bin/afpstats
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Apple Filing Protocol Server";
+    homepage = "http://netatalk.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jcumming ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/filesystems/nilfs-utils/default.nix b/nixpkgs/pkgs/tools/filesystems/nilfs-utils/default.nix
new file mode 100644
index 000000000000..5f3b5e534ca3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nilfs-utils/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libuuid, libselinux
+, e2fsprogs }:
+
+stdenv.mkDerivation rec {
+  pname = "nilfs-utils";
+  version = "2.2.9";
+
+  src = fetchFromGitHub {
+    owner = "nilfs-dev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XqViUvPj2BHO3bGs9xBO3VpRq9XqnwBptHvMwBOntqo=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ libuuid libselinux ];
+
+  postPatch = ''
+    # Fix up hardcoded paths.
+    substituteInPlace lib/cleaner_exec.c --replace /sbin/ $out/bin/
+    substituteInPlace sbin/mkfs/mkfs.c --replace /sbin/ ${lib.getBin e2fsprogs}/bin/
+  '';
+
+  # According to upstream, libmount should be detected automatically but the
+  # build system fails to do this. This is likely a bug with their build system
+  # hence it is explicitly enabled here.
+  configureFlags = [ "--with-libmount" ];
+
+  installFlags = [
+    "sysconfdir=${placeholder "out"}/etc"
+    "root_sbindir=${placeholder "out"}/sbin"
+  ];
+
+  # FIXME: https://github.com/NixOS/patchelf/pull/98 is in, but stdenv
+  # still doesn't use it
+  #
+  # To make sure patchelf doesn't mistakenly keep the reference via
+  # build directory
+  postInstall = ''
+    find . -name .libs -exec rm -rf -- {} +
+  '';
+
+  meta = with lib; {
+    description = "NILFS utilities";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license =  with licenses; [ gpl2 lgpl21 ];
+    downloadPage = "http://nilfs.sourceforge.net/en/download.html";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ntfs-3g/autoconf-sbin-helpers.patch b/nixpkgs/pkgs/tools/filesystems/ntfs-3g/autoconf-sbin-helpers.patch
new file mode 100644
index 000000000000..5e896063ba6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ntfs-3g/autoconf-sbin-helpers.patch
@@ -0,0 +1,98 @@
+diff --git a/configure.ac b/configure.ac
+index 9aa25bd5..c7c0437b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -185,6 +185,30 @@ AC_ARG_ENABLE(
+ 	]
+ )
+ 
++AC_ARG_WITH(
++	[mount-helper],
++	[AS_HELP_STRING([--with-mount-helper=BIN],[use the specified binary as mount helper @<:@default=/sbin/mount@:>@])],
++	[mount_helper="$withval"],
++	[mount_helper="/sbin/mount"]
++)
++AC_DEFINE_UNQUOTED([MOUNT_HELPER], ["$mount_helper"], [Binary used as mount helper.])
++
++AC_ARG_WITH(
++	[umount-helper],
++	[AS_HELP_STRING([--with-umount-helper=BIN],[use the specified binary as umount helper @<:@default=/sbin/umount@:>@])],
++	[umount_helper="$withval"],
++	[umount_helper="/sbin/umount"]
++)
++AC_DEFINE_UNQUOTED([UMOUNT_HELPER], ["$umount_helper"], [Binary used as umount helper.])
++
++AC_ARG_WITH(
++	[modprobe-helper],
++	[AS_HELP_STRING([--with-modprobe-helper=BIN],[use the specified binary as modprobe helper @<:@default=/sbin/modprobe@:>@])],
++	[modprobe_helper="$withval"],
++	[modprobe_helper="/sbin/modprobe"]
++)
++AC_DEFINE_UNQUOTED([MODPROBE_HELPER], ["$modprobe_helper"], [Binary used as modprobe helper.])
++
+ # pthread_rwlock_t requires _GNU_SOURCE
+ AC_GNU_SOURCE
+ 
+diff --git a/libfuse-lite/mount_util.c b/libfuse-lite/mount_util.c
+index 8b317224..ee75ace6 100644
+--- a/libfuse-lite/mount_util.c
++++ b/libfuse-lite/mount_util.c
+@@ -89,10 +89,10 @@ int fuse_mnt_add_mount(const char *progname, const char *fsname,
+             exit(1);
+         }
+         rmdir(tmp);
+-        execle("/sbin/mount", "/sbin/mount", "-F", type, "-o", opts,
++        execle(MOUNT_HELPER, MOUNT_HELPER, "-F", type, "-o", opts,
+               fsname, mnt, NULL, &env);
+-        fprintf(stderr, "%s: failed to execute /sbin/mount: %s\n", progname,
+-                strerror(errno));
++        fprintf(stderr, "%s: failed to execute %s: %s\n", progname,
++                MOUNT_HELPER, strerror(errno));
+         exit(1);
+     }
+     res = waitpid(res, &status, 0);
+@@ -126,14 +126,14 @@ int fuse_mnt_umount(const char *progname, const char *mnt, int lazy)
+ 
+         setuid(geteuid());
+         if (lazy) {
+-            execle("/sbin/umount", "/sbin/umount", mnt,
++            execle(UMOUNT_HELPER, UMOUNT_HELPER, mnt,
+                    NULL, &env);
+         } else {
+-            execle("/sbin/umount", "/sbin/umount", "-f", mnt,
++            execle(UMOUNT_HELPER, UMOUNT_HELPER, "-f", mnt,
+                    NULL, &env);
+         }
+-        fprintf(stderr, "%s: failed to execute /sbin/umount: %s\n", progname,
+-                strerror(errno));
++        fprintf(stderr, "%s: failed to execute %s: %s\n", progname,
++                UMOUNT_HELPER, strerror(errno));
+         exit(1);
+     }
+     res = waitpid(res, &status, 0);
+diff --git a/src/lowntfs-3g.c b/src/lowntfs-3g.c
+index 9330500c..dd18a93f 100644
+--- a/src/lowntfs-3g.c
++++ b/src/lowntfs-3g.c
+@@ -4463,7 +4463,7 @@ static fuse_fstype load_fuse_module(void)
+ 	int i;
+ 	struct stat st;
+ 	pid_t pid;
+-	const char *cmd = "/sbin/modprobe";
++	const char *cmd = MODPROBE_HELPER;
+ 	char *env = (char*)NULL;
+ 	struct timespec req = { 0, 100000000 };   /* 100 msec */
+ 	fuse_fstype fstype;
+diff --git a/src/ntfs-3g.c b/src/ntfs-3g.c
+index d8227e71..f5d77252 100644
+--- a/src/ntfs-3g.c
++++ b/src/ntfs-3g.c
+@@ -4171,7 +4171,7 @@ static fuse_fstype load_fuse_module(void)
+ 	int i;
+ 	struct stat st;
+ 	pid_t pid;
+-	const char *cmd = "/sbin/modprobe";
++	const char *cmd = MODPROBE_HELPER;
+ 	char *env = (char*)NULL;
+ 	struct timespec req = { 0, 100000000 };   /* 100 msec */
+ 	fuse_fstype fstype;
diff --git a/nixpkgs/pkgs/tools/filesystems/ntfs-3g/consistent-sbindir-usage.patch b/nixpkgs/pkgs/tools/filesystems/ntfs-3g/consistent-sbindir-usage.patch
new file mode 100644
index 000000000000..29a35ecb1dd1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ntfs-3g/consistent-sbindir-usage.patch
@@ -0,0 +1,48 @@
+diff --git a/ntfsprogs/Makefile.am b/ntfsprogs/Makefile.am
+index 08228322..a390d8c7 100644
+--- a/ntfsprogs/Makefile.am
++++ b/ntfsprogs/Makefile.am
+@@ -165,7 +165,7 @@ extras:	libs $(EXTRA_PROGRAMS)
+ 
+ if ENABLE_MOUNT_HELPER
+ install-exec-hook:
+-	$(INSTALL) -d $(DESTDIR)/$(sbindir)
++	$(INSTALL) -d $(DESTDIR)$(sbindir)
+ 	$(LN_S) -f $(sbindir)/mkntfs $(DESTDIR)$(sbindir)/mkfs.ntfs
+ 
+ install-data-hook:
+@@ -173,7 +173,7 @@ install-data-hook:
+ 	$(LN_S) -f mkntfs.8 $(DESTDIR)$(man8dir)/mkfs.ntfs.8
+ 
+ uninstall-local:
+-	$(RM) -f $(DESTDIR)/sbin/mkfs.ntfs
++	$(RM) -f $(DESTDIR)$(sbindir)/mkfs.ntfs
+ 	$(RM) -f $(DESTDIR)$(man8dir)/mkfs.ntfs.8
+ endif
+ 
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 8d984083..ea407067 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -66,9 +66,9 @@ endif
+ 
+ if ENABLE_MOUNT_HELPER
+ install-exec-local:	install-rootbinPROGRAMS
+-	$(MKDIR_P) "$(DESTDIR)/sbin"
+-	$(LN_S) -f "$(rootbindir)/ntfs-3g" "$(DESTDIR)/sbin/mount.ntfs-3g"
+-	$(LN_S) -f "$(rootbindir)/lowntfs-3g" "$(DESTDIR)/sbin/mount.lowntfs-3g"
++	$(MKDIR_P) "$(DESTDIR)$(rootsbindir)"
++	$(LN_S) -f "$(rootbindir)/ntfs-3g" "$(DESTDIR)$(rootsbindir)/mount.ntfs-3g"
++	$(LN_S) -f "$(rootbindir)/lowntfs-3g" "$(DESTDIR)$(rootsbindir)/mount.lowntfs-3g"
+ 
+ install-data-local:	install-man8
+ 	$(LN_S) -f ntfs-3g.8 "$(DESTDIR)$(man8dir)/mount.ntfs-3g.8"
+@@ -76,7 +76,7 @@ install-data-local:	install-man8
+ 
+ uninstall-local:
+ 	$(RM) -f "$(DESTDIR)$(man8dir)/mount.ntfs-3g.8"
+-	$(RM) -f "$(DESTDIR)/sbin/mount.ntfs-3g" "$(DESTDIR)/sbin/mount.lowntfs-3g"
++	$(RM) -f "$(DESTDIR)$(rootsbindir)/mount.ntfs-3g" "$(DESTDIR)$(rootsbindir)/mount.lowntfs-3g"
+ endif
+ 
+ endif # ENABLE_NTFS_3G
diff --git a/nixpkgs/pkgs/tools/filesystems/ntfs-3g/default.nix b/nixpkgs/pkgs/tools/filesystems/ntfs-3g/default.nix
new file mode 100644
index 000000000000..56d6bdc7fba2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ntfs-3g/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, gettext, mount, libuuid, kmod, macfuse-stubs, DiskArbitration
+, crypto ? false, libgcrypt, gnutls
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ntfs3g";
+  version = "2022.10.3";
+
+  outputs = [ "out" "dev" "man" "doc" ];
+
+  src = fetchFromGitHub {
+    owner = "tuxera";
+    repo = "ntfs-3g";
+    rev = version;
+    sha256 = "sha256-nuFTsGkm3zmSzpwmhyY7Ke0VZfZU0jHOzEWaLBbglQk=";
+  };
+
+  buildInputs = [ gettext libuuid ]
+    ++ lib.optionals crypto [ gnutls libgcrypt ]
+    ++ lib.optionals stdenv.isDarwin [ macfuse-stubs DiskArbitration ];
+
+  # Note: libgcrypt is listed here non-optionally because its m4 macros are
+  # being used in ntfs-3g's configure.ac.
+  nativeBuildInputs = [ autoreconfHook libgcrypt pkg-config ];
+
+  patches = [
+    # https://github.com/tuxera/ntfs-3g/pull/39
+    ./autoconf-sbin-helpers.patch
+    ./consistent-sbindir-usage.patch
+  ];
+
+  configureFlags = [
+    "--disable-ldconfig"
+    "--exec-prefix=\${prefix}"
+    "--enable-mount-helper"
+    "--enable-posix-acls"
+    "--enable-xattr-mappings"
+    "--${if crypto then "enable" else "disable"}-crypto"
+    "--enable-extras"
+    "--with-mount-helper=${mount}/bin/mount"
+    "--with-umount-helper=${mount}/bin/umount"
+  ] ++ lib.optionals stdenv.isLinux [
+    "--with-modprobe-helper=${kmod}/bin/modprobe"
+  ];
+
+  postInstall =
+    ''
+      # Prefer ntfs-3g over the ntfs driver in the kernel.
+      ln -sv mount.ntfs-3g $out/sbin/mount.ntfs
+    '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/tuxera/ntfs-3g";
+    description = "FUSE-based NTFS driver with full write support";
+    maintainers = with maintainers; [ dezgeg ];
+    platforms = with platforms; darwin ++ linux;
+    license = with licenses; [
+      gpl2Plus # ntfs-3g itself
+      lgpl2Plus # fuse-lite
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/orangefs/default.nix b/nixpkgs/pkgs/tools/filesystems/orangefs/default.nix
new file mode 100644
index 000000000000..0b4ec481fc71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/orangefs/default.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv, fetchurl, fetchpatch, bison, flex, autoreconfHook
+, openssl, db, attr, perl, tcsh
+} :
+
+stdenv.mkDerivation rec {
+  pname = "orangefs";
+  version = "2.9.8";
+
+  src = fetchurl {
+    url = "http://download.orangefs.org/current/source/orangefs-${version}.tar.gz";
+    sha256 = "0c2yla615j04ygclfavh8g5miqhbml2r0zs2c5mvkacf9in7p7sq";
+  };
+
+  patches = [
+    # Pull upstream fix for -fno-common toolchains
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/waltligon/orangefs/commit/f472beb50356bea657d1c32f1ca8a73e4718fd57.patch";
+      sha256 = "0jaq1ffdxgymjciddsy8h8r87nwbif4v5yv4wd7jxysn25a0hdai";
+    })
+  ];
+
+  nativeBuildInputs = [ bison flex perl autoreconfHook ];
+  buildInputs = [ openssl db attr tcsh ];
+
+  postPatch = ''
+    # Issue introduced by attr-2.4.48
+    substituteInPlace src/apps/user/ofs_setdirhint.c --replace attr/xattr.h sys/xattr.h
+
+    # Do not try to install empty sysconfdir
+    substituteInPlace Makefile.in --replace 'install -d $(sysconfdir)' ""
+
+    # perl interpreter needs to be fixed or build fails
+    patchShebangs ./src/apps/admin/pvfs2-genconfig
+
+    # symlink points to a location in /usr
+    rm ./src/client/webpack/ltmain.sh
+  '';
+
+  configureFlags = [
+    "--sysconfdir=/etc/orangefs"
+    "--enable-shared"
+    "--enable-fast"
+    "--with-ssl=${lib.getDev openssl}"
+  ];
+
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    # install useful helper scripts
+    install examples/keys/pvfs2-gen-keys.sh $out/bin
+  '';
+
+  postFixup = ''
+    for f in pvfs2-getmattr pvfs2-setmattr; do
+      substituteInPlace $out/bin/$f --replace '#!/bin/csh' '#!${tcsh}/bin/tcsh'
+    done
+
+    sed -i 's:openssl:${openssl}/bin/openssl:' $out/bin/pvfs2-gen-keys.sh
+  '';
+
+  meta = with lib; {
+    description = "Scale-out network file system for use on high-end computing systems";
+    homepage = "http://www.orangefs.org/";
+    license = with licenses;  [ asl20 bsd3 gpl2 lgpl21 lgpl21Plus openldap ];
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ markuskowa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/rar2fs/default.nix b/nixpkgs/pkgs/tools/filesystems/rar2fs/default.nix
new file mode 100644
index 000000000000..3b42a7890fbd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/rar2fs/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, fuse
+, unrar
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rar2fs";
+  version = "1.29.6";
+
+  src = fetchFromGitHub {
+    owner = "hasse69";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-b8zMCzSFJewXMQOuaKwMJx//Wq9vT/bUj6XS/jDBBBo=";
+  };
+
+  postPatch = ''
+    substituteInPlace get-version.sh \
+      --replace "which echo" "echo"
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ fuse unrar ];
+
+  configureFlags = [
+    "--with-unrar=${unrar.src}/unrar"
+    "--disable-static-unrar"
+  ];
+
+  meta = with lib; {
+    description = "FUSE file system for reading RAR archives";
+    homepage = "https://hasse69.github.io/rar2fs/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kraem wegank ];
+    platforms = with platforms; linux ++ freebsd;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/rdfind/default.nix b/nixpkgs/pkgs/tools/filesystems/rdfind/default.nix
new file mode 100644
index 000000000000..0e7c8fd42d63
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/rdfind/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, nettle }:
+
+stdenv.mkDerivation rec {
+  pname = "rdfind";
+  version = "1.6.0";
+
+  src = fetchurl {
+    url = "https://rdfind.pauldreik.se/${pname}-${version}.tar.gz";
+    sha256 = "sha256-ekBujvGIalhpZVYEYY3Zj2cvEsamvkkm0FO+ZQcPMnk=";
+  };
+
+  buildInputs = [ nettle ];
+
+  meta = with lib; {
+    homepage = "https://rdfind.pauldreik.se/";
+    description = "Removes or hardlinks duplicate files very swiftly";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.wmertens ];
+    platforms = platforms.all;
+    mainProgram = "rdfind";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/reiser4progs/default.nix b/nixpkgs/pkgs/tools/filesystems/reiser4progs/default.nix
new file mode 100644
index 000000000000..9f9b3bd5c2ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/reiser4progs/default.nix
@@ -0,0 +1,37 @@
+{lib, stdenv, fetchurl, libaal}:
+
+stdenv.mkDerivation rec {
+  pname = "reiser4progs";
+  version = "2.0.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/reiser4/reiser4-utils/${pname}-${version}.tar.gz";
+    sha256 = "sha256-DBR2C5h6ue4aqHmDG50jCLXe13DSWAYwfibrzTM+7Sw=";
+  };
+
+  buildInputs = [libaal];
+
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    substituteInPlace configure --replace " -static" ""
+  '';
+
+  preInstall = ''
+    substituteInPlace Makefile --replace ./run-ldconfig true
+  '';
+
+  # this required for wipefreespace
+  postInstall = ''
+    mkdir -p $out/lib
+    cp ./libmisc/.libs/libmisc.a $out/lib/libreiser4misc.a.la
+  '';
+
+  meta = with lib; {
+    inherit version;
+    homepage = "https://sourceforge.net/projects/reiser4/";
+    description = "Reiser4 utilities";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/reiserfsprogs/default.nix b/nixpkgs/pkgs/tools/filesystems/reiserfsprogs/default.nix
new file mode 100644
index 000000000000..a3dd60635350
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/reiserfsprogs/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, libuuid, autoreconfHook, e2fsprogs, acl }:
+
+stdenv.mkDerivation rec {
+  pname = "reiserfsprogs";
+  version = "3.6.27";
+
+  src = fetchurl {
+    url = "https://www.kernel.org/pub/linux/kernel/people/jeffm/reiserfsprogs/v${version}/${pname}-${version}.tar.xz";
+    hash = "sha256-DpW2f6d0ajwtWRRem5wv60pr5ShT6DtJexgurlCOYuM=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libuuid e2fsprogs acl ];
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-std=gnu90" "-D_GNU_SOURCE" ];
+
+  meta = {
+    inherit version;
+    homepage = "http://www.namesys.com/";
+    description = "ReiserFS utilities";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/rmfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/rmfuse/default.nix
new file mode 100644
index 000000000000..04a4d6273878
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/rmfuse/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "rmfuse";
+  version = "unstable-2021-06-06";
+
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "rschroll";
+    repo = "rmfuse";
+    rev = "3796b8610c8a965a60a417fc0bf8ea5200b71fd2";
+    hash = "sha256-W3kS6Kkmp8iWMOYFL7r1GyjSQvFotBXQCuTMK0vyHQ8=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "bidict"
+    "rmrl"
+    "xdg"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    bidict
+    rmrl
+    rmcl
+    pyfuse3
+    xdg
+  ];
+
+  meta = {
+    description = "FUSE access to the reMarkable Cloud";
+    homepage = "https://github.com/rschroll/rmfuse";
+    license = lib.licenses.mit;
+    longDescription = ''
+      RMfuse provides access to your reMarkable Cloud files in the form of a
+      FUSE filesystem. These files are exposed either in their original format,
+      or as PDF files that contain your annotations. This lets you manage files
+      in the reMarkable Cloud using the same tools you use on your local
+      system.
+    '';
+    maintainers = with lib.maintainers; [ ];
+    mainProgram = "rmfuse";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/rmount/default.nix b/nixpkgs/pkgs/tools/filesystems/rmount/default.nix
new file mode 100644
index 000000000000..ec4bb1392712
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/rmount/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, nmap, jq, cifs-utils, sshfs, fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+
+  pname   = "rmount";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "Luis-Hebendanz";
+    repo = "rmount";
+    sha256 = "0j1ayncw1nnmgna7vyx44vwinh4ah1b0l5y8agc7i4s8clbvy3h0";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -D ${src}/rmount.man  $out/share/man/man1/rmount.1
+    install -D ${src}/rmount.bash $out/bin/rmount
+    install -D ${src}/config.json $out/share/config.json
+
+    wrapProgram $out/bin/rmount --prefix PATH : ${lib.makeBinPath [ nmap jq cifs-utils sshfs ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Luis-Hebendanz/rmount";
+    description = "Remote mount utility which parses a json file";
+    license = licenses.mit;
+    maintainers = [ maintainers.luis ];
+    platforms = platforms.linux;
+    mainProgram = "rmount";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/rnm/default.nix b/nixpkgs/pkgs/tools/filesystems/rnm/default.nix
new file mode 100644
index 000000000000..479feabb8ebc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/rnm/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gmp
+, jpcre2
+, pcre2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rnm";
+  version = "4.0.9";
+
+  src = fetchFromGitHub {
+    owner = "neurobin";
+    repo = "rnm";
+    rev = "refs/tags/${version}";
+    hash = "sha256-cMWIxRuL7UCDjGr26+mfEYBPRA/dxEt0Us5qU92TelY=";
+  };
+
+  buildInputs = [
+    gmp
+    jpcre2
+    pcre2
+  ];
+
+  meta = with lib; {
+    homepage = "https://neurobin.org/projects/softwares/unix/rnm/";
+    description = "Bulk rename utility";
+    changelog = "https://github.com/neurobin/rnm/blob/${version}/ChangeLog";
+    platforms = lib.platforms.all;
+    license = licenses.gpl3Only;
+    mainProgram = "rnm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/romdirfs/default.nix b/nixpkgs/pkgs/tools/filesystems/romdirfs/default.nix
new file mode 100644
index 000000000000..cc711e57cdb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/romdirfs/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "romdirfs";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "mlafeldt";
+    repo = "romdirfs";
+    rev = "v${version}";
+    sha256 = "1jbsmpklrycz5q86qmzvbz4iz2g5fvd7p9nca160aw2izwpws0g7";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ fuse ];
+
+  meta = with lib; {
+    description = "FUSE for access Playstation 2 IOP IOPRP images and BIOS dumps";
+    homepage = "https://github.com/mlafeldt/romdirfs";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+    mainProgram = "romdirfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/s3backer/default.nix b/nixpkgs/pkgs/tools/filesystems/s3backer/default.nix
new file mode 100644
index 000000000000..3585408a2f7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/s3backer/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, pkg-config
+, fuse, curl, expat }:
+
+stdenv.mkDerivation rec {
+  pname = "s3backer";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    sha256 = "sha256-xmOtL4v3UxdjrL09sSfXyF5FoMrNerSqG9nvEuwMvNM=";
+    rev = version;
+    repo = "s3backer";
+    owner = "archiecobbs";
+  };
+
+  patches = [
+    # from upstream, after latest release
+    # https://github.com/archiecobbs/s3backer/commit/303a669356fa7cd6bc95ac7076ce51b1cab3970a
+    ./fix-darwin-builds.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ fuse curl expat ];
+
+  # AC_CHECK_DECLS doesn't work with clang
+  postPatch = lib.optionalString stdenv.cc.isClang ''
+    substituteInPlace configure.ac --replace \
+      'AC_CHECK_DECLS(fdatasync)' ""
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/archiecobbs/s3backer";
+    description = "FUSE-based single file backing store via Amazon S3";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    mainProgram = "s3backer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/s3backer/fix-darwin-builds.patch b/nixpkgs/pkgs/tools/filesystems/s3backer/fix-darwin-builds.patch
new file mode 100644
index 000000000000..e5755f1cb9b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/s3backer/fix-darwin-builds.patch
@@ -0,0 +1,25 @@
+From 303a669356fa7cd6bc95ac7076ce51b1cab3970a Mon Sep 17 00:00:00 2001
+From: Adrian Ho <the.gromgit@gmail.com>
+Date: Tue, 6 Sep 2022 10:49:10 +0800
+Subject: [PATCH] Enable macOS builds
+
+macOS requires explicit `environ` declaration.
+---
+ s3backer.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/s3backer.h b/s3backer.h
+index ccc9053..383e246 100644
+--- a/s3backer.h
++++ b/s3backer.h
+@@ -90,6 +90,10 @@
+ #include <zlib.h>
+ #include <fuse.h>
+ 
++#ifdef __APPLE__
++extern char **environ;
++#endif
++
+ #ifndef FUSE_OPT_KEY_DISCARD
+ #define FUSE_OPT_KEY_DISCARD -4
+ #endif
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/filesystems/s3fs/default.nix b/nixpkgs/pkgs/tools/filesystems/s3fs/default.nix
new file mode 100644
index 000000000000..88f2f8a08771
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/s3fs/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, curl, openssl, libxml2, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "s3fs-fuse";
+  version = "1.93";
+
+  src = fetchFromGitHub {
+    owner  = "s3fs-fuse";
+    repo   = "s3fs-fuse";
+    rev    = "v${version}";
+    sha256 = "sha256-7rLHnQlyJDOn/RikOrrEAQ7O+4T+26vNGiTkOgNH75Q=";
+  };
+
+  buildInputs = [ curl openssl libxml2 fuse ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  configureFlags = [
+    "--with-openssl"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/s3fs $out/bin/mount.s3fs
+  '';
+
+  meta = with lib; {
+    description = "Mount an S3 bucket as filesystem through FUSE";
+    homepage = "https://github.com/s3fs-fuse/s3fs-fuse";
+    changelog = "https://github.com/s3fs-fuse/s3fs-fuse/raw/v${version}/ChangeLog";
+    maintainers = [ ];
+    license = licenses.gpl2Only;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/sandboxfs/default.nix b/nixpkgs/pkgs/tools/filesystems/sandboxfs/default.nix
new file mode 100644
index 000000000000..76eb667bceaa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/sandboxfs/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, installShellFiles
+, fuse
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sandboxfs";
+  version = "0.2.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-nrrkFYAf7HqaGFruolNTkXzy4ID6/vipxd+fOCKYARM=";
+  };
+
+  cargoSha256 = "sha256-izz10ePmEt2xxOyR4NODIMAcY9d4ODo677mq+DVf4RI=";
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+
+  buildInputs = [ fuse ];
+
+  postInstall = "installManPage man/sandboxfs.1";
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A virtual file system for sandboxing";
+    homepage = "https://github.com/bazelbuild/sandboxfs";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ jeremyschlatter ];
+    mainProgram = "sandboxfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/sasquatch/default.nix b/nixpkgs/pkgs/tools/filesystems/sasquatch/default.nix
new file mode 100644
index 000000000000..f8d66683fccb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/sasquatch/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchurl
+, xz
+, lzo
+, zlib
+, zstd
+, lz4
+, lz4Support ? false
+}:
+
+let
+  patch = fetchFromGitHub
+    {
+      # NOTE: This uses my personal fork for now, until
+      # https://github.com/devttys0/sasquatch/pull/40 is merged.
+      # I, cole-h, will keep this fork available until that happens.
+      owner = "cole-h";
+      repo = "sasquatch";
+      rev = "6edc54705454c6410469a9cb5bc58e412779731a";
+      sha256 = "x+PuPYGD4Pd0fcJtlLWByGy/nggsmZkxwSXxJfPvUgo=";
+    } + "/patches/patch0.txt";
+in
+stdenv.mkDerivation rec {
+  pname = "sasquatch";
+  version = "4.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/squashfs/squashfs${version}.tar.gz";
+    sha256 = "qYGz8/IFS1ouZYhRo8BqJGCtBKmopkXgr+Bjpj/bsH4=";
+  };
+
+  buildInputs = [
+    xz
+    lzo
+    zlib
+    zstd
+  ]
+  ++ lib.optionals lz4Support [ lz4 ];
+
+  patches = [ patch ];
+  patchFlags = [ "-p0" ];
+
+  postPatch = ''
+    # Drop blanket -Werror to avoid build failure on fresh toolchains
+    # like gcc-11.
+    substituteInPlace squashfs-tools/Makefile --replace ' -Werror' ' '
+    cd squashfs-tools
+  '';
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: unsquashfs_xattr.o:/build/squashfs4.4/squashfs-tools/error.h:34: multiple definition of
+  #     `verbose'; unsquashfs.o:/build/squashfs4.4/squashfs-tools/error.h:34: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  installFlags = [ "INSTALL_DIR=\${out}/bin" ];
+
+  makeFlags = [
+    "XZ_SUPPORT=1"
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "CXX=${stdenv.cc.targetPrefix}c++"
+    "AR=${stdenv.cc.targetPrefix}ar"
+  ]
+    ++ lib.optional lz4Support "LZ4_SUPPORT=1";
+
+  meta = with lib; {
+    homepage = "https://github.com/devttys0/sasquatch";
+    description = "Set of patches to the standard unsquashfs utility (part of squashfs-tools) that attempts to add support for as many hacked-up vendor-specific SquashFS implementations as possible";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.pamplemousse ];
+    platforms = platforms.linux;
+    mainProgram = "sasquatch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/sdat2img/default.nix b/nixpkgs/pkgs/tools/filesystems/sdat2img/default.nix
new file mode 100644
index 000000000000..93493356eb51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/sdat2img/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication {
+  pname = "sdat2img";
+  version = "unstable-2021-11-09";
+
+  src = fetchFromGitHub {
+    repo = "sdat2img";
+    owner = "xpirt";
+    rev = "b432c988a412c06ff24d196132e354712fc18929";
+    sha256 = "sha256-NCbf9H0hoJgeDtP6cQY0H280BQqgKXv3ConZ87QixVY=";
+  };
+
+  format = "other";
+  installPhase = ''
+    install -D $src/sdat2img.py $out/bin/sdat2img
+  '';
+
+  meta = {
+    description = "Convert sparse Android data image (.dat) into filesystem ext4 image (.img)";
+    homepage = "https://github.com/xpirt/sdat2img";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.xaverdh ];
+    platforms = lib.platforms.unix;
+    mainProgram = "sdat2img";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/securefs/default.nix b/nixpkgs/pkgs/tools/filesystems/securefs/default.nix
new file mode 100644
index 000000000000..fe148e955cb2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/securefs/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, fuse
+}:
+
+stdenv.mkDerivation rec {
+  pname = "securefs";
+  version = "0.13.1";
+
+  src = fetchFromGitHub {
+    owner = "netheril96";
+    repo = "securefs";
+    rev = version;
+    fetchSubmodules = true;
+    hash = "sha256-7xjGuN7jcLgfGkaBoSj+WsBpM806PPGzeBs7DnI+fwc=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ fuse ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Transparent encryption filesystem";
+    longDescription = ''
+      Securefs is a filesystem in userspace (FUSE) that transparently encrypts
+      and authenticates data stored. It is particularly designed to secure
+      data stored in the cloud.
+      Securefs mounts a regular directory onto a mount point. The mount point
+      appears as a regular filesystem, where one can read/write/create files,
+      directories and symbolic links. The underlying directory will be
+      automatically updated to contain the encrypted and authenticated
+      contents.
+    '';
+    license = with licenses; [ bsd2 mit ];
+    platforms = platforms.unix;
+    mainProgram = "securefs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/sftpman/default.nix b/nixpkgs/pkgs/tools/filesystems/sftpman/default.nix
new file mode 100644
index 000000000000..579c03992dde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/sftpman/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sftpman";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "spantaleev";
+    repo = pname;
+    rev = version;
+    hash = "sha256-YxqN4+u0nYUWehbyRhjddIo2sythH3E0fiPSyrUlWhM=";
+  };
+
+  checkPhase = ''
+    $out/bin/sftpman help
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/spantaleev/sftpman";
+    description = "Application that handles sshfs/sftp file systems mounting";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ contrun ];
+    mainProgram = "sftpman";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/simg2img/default.nix b/nixpkgs/pkgs/tools/filesystems/simg2img/default.nix
new file mode 100644
index 000000000000..69ac44257aa5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/simg2img/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "simg2img";
+  version = "1.1.4";
+
+  src = fetchFromGitHub {
+    owner = "anestisb";
+    repo = "android-simg2img";
+    rev = version;
+    sha256 = "1xm9kaqs2w8c7a4psv78gv66gild88mpgjn5lj087d7jh1jxy7bf";
+  };
+
+  buildInputs = [ zlib ];
+
+  makeFlags = [ "PREFIX=$(out)" "DEP_CXX:=$(CXX)" ];
+
+  meta = with lib; {
+    description = "Tool to convert Android sparse images to raw images";
+    homepage = "https://github.com/anestisb/android-simg2img";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ dezgeg arkivm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/simple-mtpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/simple-mtpfs/default.nix
new file mode 100644
index 000000000000..994b785c444e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/simple-mtpfs/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, autoconf-archive
+, pkg-config
+, fuse
+, libmtp
+}:
+stdenv.mkDerivation rec {
+  pname = "simple-mtpfs";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "phatina";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-vAqi2owa4LJK7y7S7TwkPAqDxzyHrZZBTu0MBwMT0gI=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook autoconf-archive pkg-config ];
+  buildInputs = [ fuse libmtp ];
+
+  meta = with lib; {
+    description = "Simple MTP fuse filesystem driver";
+    homepage = "https://github.com/phatina/simple-mtpfs";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ laalsaas ];
+    mainProgram = "simple-mtpfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/smbnetfs/default.nix b/nixpkgs/pkgs/tools/filesystems/smbnetfs/default.nix
new file mode 100644
index 000000000000..120b30cbb1d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/smbnetfs/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, fuse, samba, pkg-config, glib, autoconf, attr, libsecret }:
+
+stdenv.mkDerivation rec {
+  pname = "smbnetfs";
+  version = "0.6.3";
+  src = fetchurl {
+    url = "mirror://sourceforge/project/smbnetfs/smbnetfs/SMBNetFS-${version}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-6sN7l2n76cP0uvPrZMYaa1mtTyqgXf3culoaxK301WA=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoconf ];
+  buildInputs = [ fuse samba glib attr libsecret ];
+
+  meta = with lib; {
+    description = "A FUSE FS for mounting Samba shares";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    downloadPage = "https://sourceforge.net/projects/smbnetfs/files/smbnetfs";
+    homepage = "https://sourceforge.net/projects/smbnetfs/";
+    mainProgram = "smbnetfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/snapraid/default.nix b/nixpkgs/pkgs/tools/filesystems/snapraid/default.nix
new file mode 100644
index 000000000000..89be607027f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/snapraid/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "snapraid";
+  version = "12.3";
+
+  src = fetchFromGitHub {
+    owner = "amadvance";
+    repo = "snapraid";
+    rev = "v${version}";
+    sha256 = "sha256-pkLooA3JZV/rPlE5+JeJN1QW2xAdNu7c/iFFtT4M4vc=";
+  };
+
+  VERSION = version;
+
+  doCheck = !(stdenv.isDarwin && stdenv.isx86_64);
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ];
+
+  meta = {
+    homepage = "http://www.snapraid.it/";
+    description = "A backup program for disk arrays";
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.makefu ];
+    platforms = lib.platforms.unix;
+    mainProgram = "snapraid";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/default.nix b/nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/default.nix
new file mode 100644
index 000000000000..ecb9d18fd6c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchurl, doxygen, graphviz, perl, pkg-config
+, bzip2, lz4, lzo, xz, zlib, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "squashfs-tools-ng";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://infraroot.at/pub/squashfs/squashfs-tools-ng-${version}.tar.xz";
+    sha256 = "sha256-1zYHYJXVhJdWQKeM0VVM4VzL3r3XPXebfR7IAEgyt+c=";
+  };
+
+  nativeBuildInputs = [ doxygen graphviz pkg-config perl ];
+  buildInputs = [ bzip2 zlib xz lz4 lzo zstd ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/AgentD/squashfs-tools-ng";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ qyliss ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/squashfs/4k-align.patch b/nixpkgs/pkgs/tools/filesystems/squashfs/4k-align.patch
new file mode 100644
index 000000000000..bbb4d99329a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/squashfs/4k-align.patch
@@ -0,0 +1,100 @@
+This patch is an old patch; see below for the original message body. The patch
+has been updated several times to be compatible with new releases.
+
+ * To apply to squashfs 4.4, commit 52eb4c279cd283ed9802dd1ceb686560b22ffb67.
+ * To apply to squashfs 4.5, commit 0496d7c3de3e09da37ba492081c86159806ebb07.
+ * To apply to squashfs 4.6, commit f7623b3d9953a1190fec181708c9489ef3522b9f.
+
+From af8a6dca694ddd38d8a775a2b5f9a24fe2d10153 Mon Sep 17 00:00:00 2001
+From: Amin Hassani <ahassani@google.com>
+Date: Thu, 15 Dec 2016 10:43:15 -0800
+Subject: [PATCH] mksquashfs 4K aligns the files inside the squashfs image
+
+Files inside a squashfs image are not necessarily 4k (4096)
+aligned. This patch starts each file in a 4k aligned address and pads
+zero to the end of the file until it reaches the next 4k aligned
+address. This will not change the size of the compressed
+blocks (especially the last one) and hence it will not change how the
+files are being loaded in kernel or unsquashfs. However on average this
+increases the size of the squashfs image which can be calculated by the
+following formula:
+
+increased_size = (number_of_unfragmented_files_in_image + number of fragments) * 2048
+
+The 4k alignment can be enabled by flag '-4k-align'
+---
+ squashfs-tools/mksquashfs.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c
+index 3429aac..db164c2 100644
+--- a/squashfs-tools/mksquashfs.c
++++ b/squashfs-tools/mksquashfs.c
+@@ -82,6 +82,8 @@ int noI = FALSE;
+ int noId = FALSE;
+ int noD = FALSE;
+ int noX = FALSE;
++int do_4k_align = FALSE;
++#define ALIGN_UP(bytes, size) (bytes = (bytes + size - 1) & ~(size - 1))
+ 
+ /* block size used to build filesystem */
+ int block_size = SQUASHFS_FILE_SIZE;
+@@ -1624,6 +1626,9 @@ static void unlock_fragments()
+ 	 * queue at this time.
+ 	 */
+ 	while(!queue_empty(locked_fragment)) {
++		// 4k align the start of remaining queued fragments.
++		if(do_4k_align)
++			ALIGN_UP(bytes, 4096);
+ 		write_buffer = queue_get(locked_fragment);
+ 		frg = write_buffer->block;	
+ 		size = SQUASHFS_COMPRESSED_SIZE_BLOCK(fragment_table[frg].size);
+@@ -2627,6 +2632,9 @@ static void *frag_deflator(void *arg)
+ 		write_buffer->size = compressed_size;
+ 		pthread_mutex_lock(&fragment_mutex);
+ 		if(fragments_locked == FALSE) {
++			// 4k align the start of each fragment.
++			if(do_4k_align)
++				ALIGN_UP(bytes, 4096);
+ 			fragment_table[file_buffer->block].size = c_byte;
+ 			fragment_table[file_buffer->block].start_block = bytes;
+ 			write_buffer->block = bytes;
+@@ -3021,6 +3029,10 @@ static struct file_info *write_file_blocks(int *status, struct dir_ent *dir_ent,
+ 	struct file_info *file;
+ 	int bl_hash = 0;
+ 
++	// 4k align the start of each file.
++	if(do_4k_align)
++		ALIGN_UP(bytes, 4096);
++
+ 	if(pre_duplicate(read_size, dir_ent->inode, read_buffer, &bl_hash))
+ 		return write_file_blocks_dup(status, dir_ent, read_buffer, dup, bl_hash);
+ 
+@@ -6169,6 +6181,7 @@ static void print_options(FILE *stream, char *name, int total_mem)
+ 	fprintf(stream, "or metadata.  This is\n\t\t\tequivalent to ");
+ 	fprintf(stream, "specifying -noI -noD -noF and -noX\n");
+ 	fprintf(stream, "\nFilesystem build options:\n");
++	fprintf(stream, "-4k-align\t\tenables 4k alignment of all files\n");
+ 	fprintf(stream, "-tar\t\t\tread uncompressed tar file from standard in (stdin)\n");
+ 	fprintf(stream, "-no-strip\t\tact like tar, and do not strip leading ");
+ 	fprintf(stream, "directories\n\t\t\tfrom source files\n");
+@@ -6690,6 +6703,7 @@ static void print_summary()
+ 		"compressed", no_fragments ? "no" : noF ? "uncompressed" :
+ 		"compressed", no_xattrs ? "no" : noX ? "uncompressed" :
+ 		"compressed", noI || noId ? "uncompressed" : "compressed");
++	printf("\t4k %saligned\n", do_4k_align ? "" : "un");
+ 	printf("\tduplicates are %sremoved\n", duplicate_checking ? "" :
+ 		"not ");
+ 	printf("Filesystem size %.2f Kbytes (%.2f Mbytes)\n", bytes / 1024.0,
+@@ -8417,6 +8431,8 @@ print_compressor_options:
+ 		} else if(strcmp(argv[i], "-comp") == 0) {
+ 			/* parsed previously */
+ 			i++;
++		} else if(strcmp(argv[i], "-4k-align") == 0) {
++			do_4k_align = TRUE;
+ 		} else {
+ 			ERROR("%s: invalid option\n\n", argv[0]);
+ 			print_options(stderr, argv[0], total_mem);
+-- 
+2.39.2
+
diff --git a/nixpkgs/pkgs/tools/filesystems/squashfs/default.nix b/nixpkgs/pkgs/tools/filesystems/squashfs/default.nix
new file mode 100644
index 000000000000..ae658330b280
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/squashfs/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, help2man
+, lz4
+, lzo
+, nixosTests
+, which
+, xz
+, zlib
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "squashfs";
+  version = "4.6.1";
+
+  src = fetchFromGitHub {
+    owner = "plougher";
+    repo = "squashfs-tools";
+    rev = version;
+    hash = "sha256-C/awQpp1Q/0adx3YVNTq6ruEAzcjL5G7SkOCgpvAA50=";
+  };
+
+  patches = [
+    # This patch adds an option to pad filesystems (increasing size) in
+    # exchange for better chunking / binary diff calculation.
+    ./4k-align.patch
+  ];
+
+  strictDeps = true;
+  nativeBuildInputs = [ which ]
+    # when cross-compiling help2man cannot run the cross-compiled binary
+    ++ lib.optionals (stdenv.hostPlatform == stdenv.buildPlatform) [ help2man ];
+  buildInputs = [ zlib xz zstd lz4 lzo ];
+
+  preBuild = ''
+    cd squashfs-tools
+  '' ;
+
+  installFlags = [
+    "INSTALL_DIR=${placeholder "out"}/bin"
+    "INSTALL_MANPAGES_DIR=${placeholder "out"}/share/man/man1"
+  ];
+
+  makeFlags = [
+    "XZ_SUPPORT=1"
+    "ZSTD_SUPPORT=1"
+    "LZ4_SUPPORT=1"
+    "LZMA_XZ_SUPPORT=1"
+    "LZO_SUPPORT=1"
+  ];
+
+  passthru.tests = {
+    nixos-iso-boots-and-verifies = nixosTests.boot.biosCdrom;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/plougher/squashfs-tools";
+    description = "Tool for creating and unpacking squashfs filesystems";
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ruuda ];
+    mainProgram = "mksquashfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/squashfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/squashfuse/default.nix
new file mode 100644
index 000000000000..c1c374ac0340
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/squashfuse/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libtool, fuse,
+  pkg-config, lz4, xz, zlib, lzo, zstd }:
+
+stdenv.mkDerivation rec {
+
+  pname = "squashfuse";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "vasi";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-nCdAO5WPYt/aHdNnfkIJqz0T59COgsSGeXho4bFZVTY=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook libtool pkg-config ];
+  buildInputs = [ lz4 xz zlib lzo zstd fuse ];
+
+  meta = {
+    description = "FUSE filesystem to mount squashfs archives";
+    homepage = "https://github.com/vasi/squashfuse";
+    maintainers = [  ];
+    platforms = lib.platforms.unix;
+    license = "BSD-2-Clause";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ssdfs-utils/default.nix b/nixpkgs/pkgs/tools/filesystems/ssdfs-utils/default.nix
new file mode 100644
index 000000000000..46d2c8ed9293
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ssdfs-utils/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, libtool
+, libuuid
+, zlib
+}:
+
+stdenv.mkDerivation {
+  # The files and commit messages in the repository refer to the package
+  # as ssdfs-utils, not ssdfs-tools.
+  pname = "ssdfs-utils";
+  # The version is taken from `configure.ac`, there are no tags.
+  version = "4.38";
+
+  src = fetchFromGitHub {
+    owner = "dubeyko";
+    repo = "ssdfs-tools";
+    rev = "14c0e9eb63f75c100a711493a16665c313c7bcf7";
+    hash = "sha256-s8HWuUub7EzDVZTFSitW/Zg2u0PSrXnmb5fnfOyrNL0=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    libtool
+    libuuid
+    zlib
+  ];
+
+  passthru = {
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    description = "SSDFS file system utilities";
+    homepage = "https://github.com/dubeyko/ssdfs-tools";
+    license = licenses.bsd3Clear;
+    maintainers = with maintainers; [ ners ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ssdfs-utils/update.sh b/nixpkgs/pkgs/tools/filesystems/ssdfs-utils/update.sh
new file mode 100755
index 000000000000..b30d7bd3357c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ssdfs-utils/update.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnugrep common-updater-scripts
+set -euo pipefail
+
+owner=dubeyko
+repo=ssdfs-tools
+
+version="$(curl --silent https://raw.githubusercontent.com/${owner}/${repo}/master/configure.ac | \
+    grep 'AC_INIT(ssdfs' | \
+    egrep -o '[0-9\.]{3,}')"
+
+rev=$(curl -s -H "Accept: application/vnd.github.VERSION.sha" https://api.github.com/repos/${owner}/${repo}/commits/master)
+
+update-source-version ssdfs-utils "$version" --rev="$rev"
diff --git a/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/common.nix b/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/common.nix
new file mode 100644
index 000000000000..932c7693dc88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/common.nix
@@ -0,0 +1,62 @@
+{ version, sha256, platforms, patches ? [ ] }:
+
+{ lib, stdenv, fetchFromGitHub
+, meson, pkg-config, ninja, docutils, makeWrapper
+, fuse3, macfuse-stubs, glib
+, which, python3Packages
+, openssh
+}:
+
+let
+  fuse = if stdenv.isDarwin then macfuse-stubs else fuse3;
+in stdenv.mkDerivation rec {
+  pname = "sshfs-fuse";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "libfuse";
+    repo = "sshfs";
+    rev = "sshfs-${version}";
+    inherit sha256;
+  };
+
+  inherit patches;
+
+  nativeBuildInputs = [ meson pkg-config ninja docutils makeWrapper ];
+  buildInputs = [ fuse glib ];
+  nativeCheckInputs = [ which python3Packages.pytest ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString
+    (stdenv.hostPlatform.system == "i686-linux")
+    "-D_FILE_OFFSET_BITS=64";
+
+  postInstall = ''
+    mkdir -p $out/sbin
+    ln -sf $out/bin/sshfs $out/sbin/mount.sshfs
+  '' + lib.optionalString (!stdenv.isDarwin) ''
+    wrapProgram $out/bin/sshfs --prefix PATH : "${openssh}/bin"
+  '';
+
+  # doCheck = true;
+  checkPhase = lib.optionalString (!stdenv.isDarwin) ''
+    # The tests need fusermount:
+    mkdir bin
+    cp ${fuse}/bin/fusermount3 bin/fusermount
+    export PATH=bin:$PATH
+    # Can't access /dev/fuse within the sandbox: "FUSE kernel module does not seem to be loaded"
+    substituteInPlace test/util.py --replace "/dev/fuse" "/dev/null"
+    # TODO: "fusermount executable not setuid, and we are not root"
+    # We should probably use a VM test instead
+    ${python3Packages.python.interpreter} -m pytest test/
+  '';
+
+  meta = with lib; {
+    inherit platforms;
+    description = "FUSE-based filesystem that allows remote filesystems to be mounted over SSH";
+    longDescription = macfuse-stubs.warning;
+    homepage = "https://github.com/libfuse/sshfs";
+    license = licenses.gpl2Plus;
+    mainProgram = "sshfs";
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/default.nix b/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/default.nix
new file mode 100644
index 000000000000..2f11bb0047ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, callPackage, fetchpatch }:
+
+let mkSSHFS = args: callPackage (import ./common.nix args) { };
+in if stdenv.isDarwin then
+  mkSSHFS {
+    version = "2.10"; # macFUSE isn't yet compatible with libfuse 3.x
+    sha256 = "1dmw4kx6vyawcywiv8drrajnam0m29mxfswcp4209qafzx3mjlp1";
+    patches = [
+      # remove reference to fuse_darwin.h which doens't exist on recent macFUSE
+      ./fix-fuse-darwin-h.patch
+
+      # From https://github.com/libfuse/sshfs/pull/185:
+      # > With this patch, setting I/O size to a reasonable large value, will
+      # > result in much improved performance, e.g.: -o iosize=1048576
+      (fetchpatch {
+        name = "fix-configurable-blksize.patch";
+        url = "https://github.com/libfuse/sshfs/commit/667cf34622e2e873db776791df275c7a582d6295.patch";
+        sha256 = "0d65lawd2g2aisk1rw2vl65dgxywf4vqgv765n9zj9zysyya8a54";
+      })
+    ];
+    platforms = lib.platforms.darwin;
+  }
+else
+  mkSSHFS {
+    version = "3.7.3";
+    sha256 = "0s2hilqixjmv4y8n67zaq374sgnbscp95lgz5ignp69g3p1vmhwz";
+    platforms = lib.platforms.linux;
+  }
diff --git a/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/fix-fuse-darwin-h.patch b/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/fix-fuse-darwin-h.patch
new file mode 100644
index 000000000000..045cc0e61f33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/fix-fuse-darwin-h.patch
@@ -0,0 +1,14 @@
+diff --git a/sshfs.c b/sshfs.c
+index 97eaf06..d442577 100644
+--- a/sshfs.c
++++ b/sshfs.c
+@@ -14,9 +14,6 @@
+ #if !defined(__CYGWIN__)
+ #include <fuse_lowlevel.h>
+ #endif
+-#ifdef __APPLE__
+-#  include <fuse_darwin.h>
+-#endif
+ #include <assert.h>
+ #include <stdio.h>
+ #include <stdlib.h>
diff --git a/nixpkgs/pkgs/tools/filesystems/stratis-cli/default.nix b/nixpkgs/pkgs/tools/filesystems/stratis-cli/default.nix
new file mode 100644
index 000000000000..4c27b888bbaa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/stratis-cli/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, nixosTests
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "stratis-cli";
+  version = "3.6.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "stratis-storage";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-mLmjMofdr0U+Bfnkde7lJqPXkd1ICPYdlcsOm2nOcQA=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    dbus-client-gen
+    dbus-python-client-gen
+    justbytes
+    packaging
+    psutil
+    python-dateutil
+    wcwidth
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # tests below require dbus daemon
+    "tests/whitebox/integration"
+  ];
+
+  pythonImportsCheck = [ "stratis_cli" ];
+
+  passthru.tests = nixosTests.stratis;
+
+  meta = with lib; {
+    description = "CLI for the Stratis project";
+    homepage = "https://stratis-storage.github.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "stratis";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/stratisd/default.nix b/nixpkgs/pkgs/tools/filesystems/stratisd/default.nix
new file mode 100644
index 000000000000..ebe7c9f14ba8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/stratisd/default.nix
@@ -0,0 +1,122 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, cargo
+, rustc
+, pkg-config
+, asciidoc
+, ncurses
+, glibc
+, dbus
+, cryptsetup
+, util-linux
+, lvm2
+, systemd
+, xfsprogs
+, thin-provisioning-tools
+, clevis
+, jose
+, jq
+, curl
+, tpm2-tools
+, coreutils
+, clevisSupport ? false
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stratisd";
+  version = "3.6.5";
+
+  src = fetchFromGitHub {
+    owner = "stratis-storage";
+    repo = pname;
+    rev = "refs/tags/stratisd-v${version}";
+    hash = "sha256-qgf5Q2MAY8PAYlplvTX+YjYfDFLfddpyIG4S/IIYbsU=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit pname version src;
+    hash = "sha256-Bu87uHEcMKB+TX8gWHD1vRazOkqJSZKQcsPiaKXrGFE=";
+  };
+
+  postPatch = ''
+    substituteInPlace udev/61-stratisd.rules \
+      --replace stratis-base32-decode "$out/lib/udev/stratis-base32-decode" \
+      --replace stratis-str-cmp       "$out/lib/udev/stratis-str-cmp"
+
+    substituteInPlace systemd/stratis-fstab-setup \
+      --replace stratis-min           "$out/bin/stratis-min" \
+      --replace systemd-ask-password  "${systemd}/bin/systemd-ask-password" \
+      --replace sleep                 "${coreutils}/bin/sleep" \
+      --replace udevadm               "${systemd}/bin/udevadm"
+  '';
+
+  nativeBuildInputs = [
+    rustPlatform.cargoSetupHook
+    rustPlatform.bindgenHook
+    cargo
+    rustc
+    pkg-config
+    asciidoc
+    ncurses # tput
+  ];
+
+  buildInputs = [
+    glibc
+    glibc.static
+    dbus
+    cryptsetup
+    util-linux
+    systemd
+    lvm2
+  ];
+
+  outputs = [ "out" "initrd" ];
+
+  env.EXECUTABLES_PATHS = lib.makeBinPath ([
+    xfsprogs
+    thin-provisioning-tools
+  ] ++ lib.optionals clevisSupport [
+    clevis
+    jose
+    jq
+    cryptsetup
+    curl
+    tpm2-tools
+    coreutils
+  ]);
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" "INSTALL=install" ];
+  buildFlags = [ "build-all" ];
+
+  doCheck = true;
+  checkTarget = "test";
+
+  # remove files for supporting dracut
+  postInstall = ''
+    mkdir -p "$initrd/bin"
+    cp "$out/lib/dracut/modules.d/90stratis/stratis-rootfs-setup" "$initrd/bin"
+    mkdir -p "$initrd/lib/systemd/system"
+    substitute "$out/lib/dracut/modules.d/90stratis/stratisd-min.service" \
+      "$initrd/lib/systemd/system/stratisd-min.service" \
+      --replace mkdir "${coreutils}/bin/mkdir"
+    mkdir -p "$initrd/lib/udev/rules.d"
+    cp udev/61-stratisd.rules "$initrd/lib/udev/rules.d"
+    rm -r "$out/lib/dracut"
+    rm -r "$out/lib/systemd/system-generators"
+  '';
+
+  passthru.tests = nixosTests.stratis // {
+    inherit (nixosTests.installer-systemd-stage-1) stratisRoot;
+  };
+
+  meta = with lib; {
+    description = "Easy to use local storage management for Linux";
+    homepage = "https://stratis-storage.github.io";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ nickcao ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/stuffbin/default.nix b/nixpkgs/pkgs/tools/filesystems/stuffbin/default.nix
new file mode 100644
index 000000000000..6249c7f5bbd5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/stuffbin/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "stuffbin";
+  version = "1.3.0";
+
+  vendorHash = null;
+
+  src = fetchFromGitHub {
+    owner = "knadh";
+    repo = "stuffbin";
+    rev = "v${version}";
+    sha256 = "sha256-dOlc/G2IiuMAN0LqiZtbpXLSYaOpe5cl1+cs3YhaAbg=";
+  };
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "Compress and embed static files and assets into Go binaries and access them with a virtual file system in production";
+    homepage = "https://github.com/knadh/stuffbin";
+    changelog = "https://github.com/knadh/stuffbin/releases/tag/v${version}";
+    maintainers = with maintainers; [ raitobezarius ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/supertag/cargo-lock-update-lexical-core.patch b/nixpkgs/pkgs/tools/filesystems/supertag/cargo-lock-update-lexical-core.patch
new file mode 100644
index 000000000000..70c941ddd125
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/supertag/cargo-lock-update-lexical-core.patch
@@ -0,0 +1,27 @@
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1,5 +1,7 @@
+ # This file is automatically @generated by Cargo.
+ # It is not intended for manual editing.
++version = 3
++
+ [[package]]
+ name = "adler32"
+ version = "1.2.0"
+@@ -530,13 +532,13 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+ 
+ [[package]]
+ name = "lexical-core"
+-version = "0.7.4"
++version = "0.7.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "db65c6da02e61f55dae90a0ae427b2a5f6b3e8db09f58d10efab23af92592616"
++checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
+ dependencies = [
+  "arrayvec",
+  "bitflags 1.2.1",
+- "cfg-if 0.1.10",
++ "cfg-if 1.0.0",
+  "ryu",
+  "static_assertions",
+ ]
diff --git a/nixpkgs/pkgs/tools/filesystems/supertag/default.nix b/nixpkgs/pkgs/tools/filesystems/supertag/default.nix
new file mode 100644
index 000000000000..cee8ae3ead44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/supertag/default.nix
@@ -0,0 +1,43 @@
+{ lib, rustPlatform, fetchFromGitHub
+, pkg-config
+, dbus, fuse, sqlite
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "supertag";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "amoffat";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0jzm7pn38hlr96n0z8gqfsfdbw48y0nnbsgjdq7hpgwmcgvgqdam";
+  };
+
+  # lexical-core is outdated and incompatible with newer versions of rust
+  # patches Cargo.lock to include a more up-to-date version of lexical-core
+  cargoPatches = [ ./cargo-lock-update-lexical-core.patch ];
+
+  cargoSha256 = "sha256-W5Emkbe1jI9Z+irMckD/3gJO47rACa9E5k5dqAFC1yQ=";
+
+  nativeBuildInputs = [ rustPlatform.bindgenHook pkg-config ];
+  buildInputs = [ dbus fuse sqlite ];
+
+  # The test are requiring extended permissions.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tag-based filesystem";
+    longDescription = ''
+      Supertag is a tag-based filesystem, written in Rust, for Linux and MacOS.
+      It provides a tag-based view of your files by removing the hierarchy
+      constraints typically imposed on files and folders. In other words, it
+      allows you to think about your files not as objects stored in folders, but
+      as objects that can be filtered by folders.
+    '';
+    homepage = "https://github.com/amoffat/supertag";
+    license = licenses.agpl3Plus;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/svnfs/default.nix b/nixpkgs/pkgs/tools/filesystems/svnfs/default.nix
new file mode 100644
index 000000000000..8aa66de8da3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/svnfs/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, autoreconfHook, subversion, fuse, apr, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "svnfs";
+  version = "0.4";
+
+  src = fetchurl {
+    url = "http://www.jmadden.eu/wp-content/uploads/svnfs/svnfs-${version}.tgz";
+    sha256 = "1lrzjr0812lrnkkwk60bws9k1hq2iibphm0nhqyv26axdsygkfky";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ subversion fuse apr perl ];
+
+  # autoconf's AC_CHECK_HEADERS and AC_CHECK_LIBS fail to detect libfuse on
+  # Darwin if FUSE_USE_VERSION isn't set at configure time.
+  #
+  # NOTE: Make sure the value of FUSE_USE_VERSION specified here matches the
+  # actual version used in the source code:
+  #
+  #     $ tar xf "$(nix-build -A svnfs.src)"
+  #     $ grep -R FUSE_USE_VERSION
+  configureFlags = lib.optionals stdenv.isDarwin [ "CFLAGS=-DFUSE_USE_VERSION=25" ];
+
+  # why is this required?
+  preConfigure=''
+    export LD_LIBRARY_PATH=${subversion.out}/lib
+  '';
+
+  # -fcommon: workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: svnclient.o:/build/svnfs-0.4/src/svnfs.h:40: multiple definition of
+  #     `dirbuf'; svnfs.o:/build/svnfs-0.4/src/svnfs.h:40: first defined here
+  env.NIX_CFLAGS_COMPILE = "-I ${subversion.dev}/include/subversion-1 -fcommon";
+  NIX_LDFLAGS="-lsvn_client-1 -lsvn_subr-1";
+
+  meta = {
+    description = "FUSE filesystem for accessing Subversion repositories";
+    homepage = "https://www.jmadden.eu/index.php/svnfs/";
+    license = lib.licenses.gpl2Only;
+    maintainers = [lib.maintainers.marcweber];
+    platforms = lib.platforms.unix;
+    mainProgram = "svnfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/tar2ext4/default.nix b/nixpkgs/pkgs/tools/filesystems/tar2ext4/default.nix
new file mode 100644
index 000000000000..81df5e64d9f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/tar2ext4/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tar2ext4";
+  version = "0.11.4";
+
+  src = fetchFromGitHub {
+    owner = "microsoft";
+    repo = "hcsshim";
+    rev = "v${version}";
+    sha256 = "sha256-bu1uLJmFSetTv1R3qyCtZxba+wxjDDSkEpBwKNZ/meM=";
+  };
+
+  sourceRoot = "${src.name}/cmd/tar2ext4";
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Convert a tar archive to an ext4 image";
+    maintainers = with maintainers; [ qyliss ];
+    license = licenses.mit;
+    mainProgram = "tar2ext4";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/tmsu/default.nix b/nixpkgs/pkgs/tools/filesystems/tmsu/default.nix
new file mode 100644
index 000000000000..aa3057202c74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/tmsu/default.nix
@@ -0,0 +1,42 @@
+{ lib, buildGoPackage, fetchFromGitHub, installShellFiles }:
+
+buildGoPackage rec {
+  pname = "tmsu";
+  version = "0.7.5";
+  goPackagePath = "github.com/oniony/TMSU";
+
+  src = fetchFromGitHub {
+    owner = "oniony";
+    repo = "tmsu";
+    rev = "v${version}";
+    sha256 = "0834hah7p6ad81w60ifnxyh9zn09ddfgrll04kwjxwp7ypbv38wq";
+  };
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preBuild = ''
+    mv go/src/${goPackagePath} src
+    mv src/src/${goPackagePath} go/src/${goPackagePath}
+    export GOPATH=$PWD:$GOPATH
+  '';
+
+  postInstall = ''
+    # can't do "mv TMSU tmsu" on case-insensitive filesystems
+    mv $out/bin/{TMSU,tmsu.tmp}
+    mv $out/bin/{tmsu.tmp,tmsu}
+
+    cp src/misc/bin/* $out/bin/
+    installManPage src/misc/man/tmsu.1
+    installShellCompletion --zsh src/misc/zsh/_tmsu
+  '';
+
+  meta = with lib; {
+    homepage    = "http://www.tmsu.org";
+    description = "A tool for tagging your files using a virtual filesystem";
+    maintainers = with maintainers; [ pSub ];
+    license     = licenses.gpl3Plus;
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/tmsu/deps.nix b/nixpkgs/pkgs/tools/filesystems/tmsu/deps.nix
new file mode 100644
index 000000000000..7dee6324b672
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/tmsu/deps.nix
@@ -0,0 +1,39 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/hanwen/go-fuse";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hanwen/go-fuse";
+      rev = "0f728ba15b38579efefc3dc47821882ca18ffea7";
+      sha256 = "05ymw2pp58avf19wvi0cgdzqf3d88k1jdf6ldj4hmhbkm3waqf7l";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-sqlite3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-sqlite3";
+      rev = "98a44bcf5949f178c8116fa30e62c9ac2ef65927";
+      sha256 = "108rk74ringkkyx05zlq5khh32fsfi0przyzrpsr1r5j57xrhxj0";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "3c4aac89819a5fdc28d906456729d3423fd46969";
+      sha256 = "16q9ay6bl28zrnb377p8lvrs2nd98h7i6y3yi8ccjwzg1czbfdsi";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "1957bb5e6d1f523308b49060df02171d06ddfc77";
+      sha256 = "0imqk4l9785rw7ddvywyf8zn7k3ga6f17ky8rmf8wrri7nknr03f";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/filesystems/u3-tool/default.nix b/nixpkgs/pkgs/tools/filesystems/u3-tool/default.nix
new file mode 100644
index 000000000000..e666c893b798
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/u3-tool/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "u3-tool";
+  version = "0.3";
+
+  enableParallelBuilding = true;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1p9c9kibd1pdbdfa0nd0i3n7bvzi3xg0chm38jg3xfl8gsn0390f";
+  };
+
+  meta = with lib; {
+    description = "Tool for controlling the special features of a 'U3 smart drive' USB Flash disk";
+    homepage = "https://sourceforge.net/projects/u3-tool/";
+    license = licenses.gpl2;
+    platforms = with platforms; linux;
+    maintainers = with maintainers; [ makefu ];
+    mainProgram = "u3-tool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ubi_reader/default.nix b/nixpkgs/pkgs/tools/filesystems/ubi_reader/default.nix
new file mode 100644
index 000000000000..0d2e059b78f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ubi_reader/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ubi_reader";
+  version = "0.8.5";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "jrspruitt";
+    repo = pname;
+    rev = "v${version}-master";
+    hash = "sha256-tjQs1F9kcFrC9FDkfdnax0C8O8Bg7blkpL7GU56eeWU=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ python-lzo ];
+
+  # There are no tests in the source
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Collection of Python scripts for reading information about and extracting data from UBI and UBIFS images";
+    homepage = "https://github.com/jrspruitt/ubi_reader";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ vlaci ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ubidump/default.nix b/nixpkgs/pkgs/tools/filesystems/ubidump/default.nix
new file mode 100644
index 000000000000..c038042b6871
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ubidump/default.nix
@@ -0,0 +1,42 @@
+{ lib, fetchFromGitHub, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+
+  pname = "ubidump";
+  version = "unstable-2019-09-11";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "nlitsme";
+    repo = pname;
+    rev = "0691f1a9a38604c2baf8c9af6b826eb2632af74a";
+    sha256 = "1hiivlgni4r3nd5n2rzl5qzw6y2wpjpmyls5lybrc8imd6rmj3w2";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ crcmod python-lzo setuptools ];
+
+  dontBuild = true;
+
+  patchPhase = ''
+    sed -i '1s;^;#!${python3.interpreter}\n;' ubidump.py
+    patchShebangs ubidump.py
+  '';
+
+  installPhase = ''
+    install -D -m755 ubidump.py $out/bin/ubidump
+    wrapProgram $out/bin/ubidump --set PYTHONPATH $PYTHONPATH
+  '';
+
+  installCheckPhase = ''
+    $out/bin/ubidump -h  > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "View or extract the contents of UBIFS images";
+    homepage = "https://github.com/nlitsme/ubidump";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sgo ];
+    mainProgram = "ubidump";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/filesystems/udftools/default.nix b/nixpkgs/pkgs/tools/filesystems/udftools/default.nix
new file mode 100644
index 000000000000..f50f98d33dc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/udftools/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, readline, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "udftools";
+  version = "2.0";
+  src = fetchFromGitHub {
+    owner = "pali";
+    repo = "udftools";
+    rev = version;
+    sha256 = "0mz04h3rki6ljwfs15z83gf4vv816w7xgz923waiqgmfj9xpvx87";
+  };
+
+  buildInputs = [ ncurses readline ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  hardeningDisable = [ "fortify" ];
+
+  env.NIX_CFLAGS_COMPILE = "-std=gnu90";
+
+  preConfigure = ''
+    sed -e '1i#include <limits.h>' -i cdrwtool/cdrwtool.c -i pktsetup/pktsetup.c
+    sed -e 's@[(]char[*][)]spm [+]=@spm = ((char*) spm) + @' -i wrudf/wrudf.c
+    sed -e '27i#include <string.h>' -i include/udf_endian.h
+    sed -e '38i#include <string.h>' -i wrudf/wrudf-cdrw.c
+    sed -e '12i#include <string.h>' -i wrudf/wrudf-cdr.c
+    sed -e '37i#include <stdlib.h>' -i wrudf/ide-pc.c
+    sed -e '46i#include <sys/sysmacros.h>' -i mkudffs/main.c
+
+    sed -e "s@\$(DESTDIR)/lib/udev/rules.d@$out/lib/udev/rules.d@" -i pktsetup/Makefile.am
+  '';
+
+  postFixup = ''
+    sed -i -e "s@/usr/sbin/pktsetup@$out/sbin/pktsetup@" $out/lib/udev/rules.d/80-pktsetup.rules
+  '';
+
+  meta = with lib; {
+    description = "UDF tools";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/default.nix b/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/default.nix
new file mode 100644
index 000000000000..4dc9ca9de6e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, cmake, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "unionfs-fuse";
+  version = "2.2";
+
+  src = fetchFromGitHub {
+    owner = "rpodgorny";
+    repo = "unionfs-fuse";
+    rev = "v${version}";
+    sha256 = "sha256-EJryML6E0CW4kvsqMRqV3cq77j50HuylNzgaHD6CL/o=";
+  };
+
+  patches = [
+    # Prevent the unionfs daemon from being killed during
+    # shutdown. See
+    # https://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons/
+    # for details.
+    ./prevent-kill-on-shutdown.patch
+  ];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace CMakeLists.txt \
+      --replace '/usr/local/include/osxfuse/fuse' '${fuse}/include/fuse'
+  '';
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ fuse ];
+
+  # Put the unionfs mount helper in place as mount.unionfs-fuse. This makes it
+  # possible to do:
+  #   mount -t unionfs-fuse none /dest -o dirs=/source1=RW,/source2=RO
+  #
+  # This must be done in preConfigure because the build process removes
+  # helper from the source directory during the build.
+  preConfigure = lib.optionalString (!stdenv.isDarwin) ''
+    mkdir -p $out/sbin
+    cp -a mount.unionfs $out/sbin/mount.unionfs-fuse
+    substituteInPlace $out/sbin/mount.unionfs-fuse --replace mount.fuse ${fuse}/sbin/mount.fuse
+    substituteInPlace $out/sbin/mount.unionfs-fuse --replace unionfs $out/bin/unionfs
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "FUSE UnionFS implementation";
+    homepage = "https://github.com/rpodgorny/unionfs-fuse";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/prevent-kill-on-shutdown.patch b/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/prevent-kill-on-shutdown.patch
new file mode 100644
index 000000000000..0a98b83282b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/prevent-kill-on-shutdown.patch
@@ -0,0 +1,14 @@
+diff -ru -x '*~' unionfs-fuse-0.26-orig/src/unionfs.c unionfs-fuse-0.26/src/unionfs.c
+--- unionfs-fuse-0.26-orig/src/unionfs.c	2012-09-11 00:06:32.000000000 +0200
++++ unionfs-fuse-0.26/src/unionfs.c	2014-05-21 14:22:03.597861805 +0200
+@@ -831,6 +831,10 @@
+ 	}
+ #endif
+ 
++	/* Prevent systemd's shutdown from killing us. */
++	if (access("/etc/initrd-release", F_OK) >= 0)
++		argv[0][0] = '@';
++
+ 	umask(0);
+ 	int res = fuse_main(args.argc, args.argv, &unionfs_oper, NULL);
+ 	RETURN(uopt.doexit ? uopt.retval : res);
diff --git a/nixpkgs/pkgs/tools/filesystems/upspin/default.nix b/nixpkgs/pkgs/tools/filesystems/upspin/default.nix
new file mode 100644
index 000000000000..6ef087ff5387
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/upspin/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "upspin";
+  version = "unstable-2023-02-05";
+
+  src = fetchFromGitHub {
+    owner = "upspin";
+    repo = "upspin";
+    rev = "67e250ec27d8878c0009213b8e32c6803f2727ea";
+    sha256 = "sha256-1pFDJSCUDKn4CTAg3wdB8oYPyrmd8B62zNl3m5YAqVM=";
+  };
+
+  vendorHash = "sha256-Jl++FvKyqz5WFa/Eoly+UnFsoC9Qwdaizhkq6LyJ+XQ=";
+
+  # No upstream tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A global name space for storing data akin to a filesystem";
+    homepage = "https://upspin.io";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ orthros ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/vmfs-tools/default.nix b/nixpkgs/pkgs/tools/filesystems/vmfs-tools/default.nix
new file mode 100644
index 000000000000..b60dccc4e68f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/vmfs-tools/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, asciidoc
+, docbook_xsl
+, fuse
+, libuuid
+, libxslt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vmfs-tools";
+  version = "0.2.5.20160116";
+
+  src = fetchFromGitHub {
+    owner = "glandium";
+    repo = pname;
+    rev = "4ab76ef5b074bdf06e4b518ff6d50439de05ae7f";
+    sha256 = "14y412ww5hxk336ils62s3fwykfh6mx1j0iiaa5cwc615pi6qvi4";
+  };
+
+  nativeBuildInputs = [ asciidoc docbook_xsl libxslt pkg-config ];
+
+  buildInputs = [ fuse libuuid ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    install -Dm444 -t $out/share/doc/${pname} AUTHORS LICENSE README TODO
+  '';
+
+  meta = with lib; {
+    description = "FUSE-based VMFS (vmware) file system tools";
+    maintainers = with maintainers; [ peterhoeg ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/wdfs/default.nix b/nixpkgs/pkgs/tools/filesystems/wdfs/default.nix
new file mode 100644
index 000000000000..3f8897c091bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/wdfs/default.nix
@@ -0,0 +1,28 @@
+{lib, stdenv, fetchurl, glib, neon, fuse, autoreconfHook, pkg-config}:
+
+stdenv.mkDerivation rec {
+  pname = "wdfs-fuse";
+  version = "1.4.2";
+
+  src = fetchurl {
+    url = "http://noedler.de/projekte/wdfs/wdfs-${version}.tar.gz";
+    sha256 = "fcf2e1584568b07c7f3683a983a9be26fae6534b8109e09167e5dff9114ba2e5";
+  };
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [fuse glib neon];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    # Fix the build on macOS with macFUSE installed. Needs autoreconfHook to
+    # take effect.
+    substituteInPlace configure.ac --replace \
+      'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' ""
+  '';
+
+  meta = with lib; {
+    homepage = "http://noedler.de/projekte/wdfs/";
+    license = licenses.gpl2Plus;
+    description = "User-space filesystem that allows to mount a webdav share";
+    platforms = platforms.unix;
+    mainProgram = "wdfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/wiimms-iso-tools/default.nix b/nixpkgs/pkgs/tools/filesystems/wiimms-iso-tools/default.nix
new file mode 100644
index 000000000000..4519ee9d42a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/wiimms-iso-tools/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, fetchpatch, zlib, ncurses, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "wiimms-iso-tools";
+  version = "3.05a";
+
+  src = fetchurl {
+    url = "https://download.wiimm.de/source/wiimms-iso-tools/wiimms-iso-tools.source-${version}.txz";
+    hash = "sha256-5aikiPJkZf9OwD8QmQ7ijhBOtFQpkIErvb6gOvEu2L0=";
+  };
+
+  buildInputs = [ zlib ncurses fuse ];
+
+  patches = [
+    ./fix-paths.diff
+
+    # Pull pending upstream fix for ncurses-6.3:
+    #  https://github.com/Wiimm/wiimms-iso-tools/pull/14
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/Wiimm/wiimms-iso-tools/commit/3f1e84ec6915cc4f658092d33411985bd3eaf4e6.patch";
+      sha256 = "18cfri4y1082phg6fzh402gk5ri24wr8ff4zl8v5rlgjndh610im";
+      stripLen = 1;
+    })
+  ];
+
+  postPatch = ''
+    patchShebangs setup.sh gen-template.sh gen-text-file.sh
+    substituteInPlace setup.sh --replace gcc "$CC"
+    substituteInPlace Makefile --replace gcc "$CC"
+  '';
+
+  INSTALL_PATH = "$out";
+
+  installPhase = ''
+    mkdir "$out"
+    patchShebangs install.sh
+    ./install.sh --no-sudo
+  '';
+
+  meta = with lib; {
+    homepage = "https://wit.wiimm.de";
+    description = "A set of command line tools to manipulate Wii and GameCube ISO images and WBFS containers";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ nilp0inter ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/wiimms-iso-tools/fix-paths.diff b/nixpkgs/pkgs/tools/filesystems/wiimms-iso-tools/fix-paths.diff
new file mode 100644
index 000000000000..4a545e92a185
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/wiimms-iso-tools/fix-paths.diff
@@ -0,0 +1,12 @@
+diff -r -u wiimms-iso-tools.source-3.02a.patched/setup.sh wiimms-iso-tools.source-3.02a/setup.sh
+--- wiimms-iso-tools.source-3.02a.patched/setup.sh	2020-06-02 23:48:18.651495869 +0200
++++ wiimms-iso-tools.source-3.02a/setup.sh	2020-06-02 23:48:29.758162513 +0200
+@@ -57,7 +57,7 @@
+ 
+ #--------------------------------------------------
+ 
+-INSTALL_PATH=/usr/local
++ INSTALL_PATH="$out"
+ 
+ if [[ -d $INSTALL_PATH/bin ]]
+ then
diff --git a/nixpkgs/pkgs/tools/filesystems/wipefreespace/default.nix b/nixpkgs/pkgs/tools/filesystems/wipefreespace/default.nix
new file mode 100644
index 000000000000..bf2ddb391c86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/wipefreespace/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, lib
+, fetchurl
+, e2fsprogs
+, ntfs3g
+, xfsprogs
+, reiser4progs
+, libaal
+, jfsutils
+, libuuid
+, texinfo
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wipefreespace";
+  version = "2.6";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/wipefreespace/wipefreespace/${version}/wipefreespace-${version}.tar.gz";
+    hash = "sha256-Pt6MDQ9wSJbL4tW/qckTpFsvE9FdXIkp/QmnYSlWR/M=";
+  };
+
+  nativeBuildInputs = [
+    texinfo
+  ];
+
+  # missed: Reiser3 FAT12/16/32 MinixFS HFS+ OCFS
+  buildInputs = [
+    e2fsprogs
+    ntfs3g
+    xfsprogs
+    reiser4progs
+    libaal
+    jfsutils
+    libuuid
+  ];
+
+  strictDeps = true;
+
+  preConfigure = ''
+    export PATH=$PATH:${xfsprogs}/bin
+    export CFLAGS=-I${jfsutils}/include
+    export LDFLAGS="-L${jfsutils}/lib -L${reiser4progs}/lib"
+  '';
+
+  meta = with lib; {
+    description = "A program which will securely wipe the free space";
+    homepage = "https://wipefreespace.sourceforge.io";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ catap ];
+    mainProgram = "wipefreespace";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/xfsdump/default.nix b/nixpkgs/pkgs/tools/filesystems/xfsdump/default.nix
new file mode 100644
index 000000000000..a6867e3c0a5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/xfsdump/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchurl
+, attr
+, gettext
+, autoconf
+, automake
+, ncurses
+, libtool
+, libuuid
+, libxfs
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xfsdump";
+  version = "3.1.12";
+
+  src = fetchurl {
+    url = "mirror://kernel/linux/utils/fs/xfs/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-85xMGzBrLdfsl5wOlNYP5pCD0uz5rwUcrF7zvtdyx0o=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    gettext
+    libtool
+  ];
+  buildInputs = [
+    attr
+    libuuid
+    libxfs
+    ncurses
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "cp include/install-sh ." "cp -f include/install-sh ."
+  '';
+
+  # Conifigure scripts don't check PATH, see xfstests derviation
+  preConfigure = ''
+    export MAKE=$(type -P make)
+    export MSGFMT=$(type -P msgfmt)
+    export MSGMERGE=$(type -P msgmerge)
+    export XGETTEXT=$(type -P xgettext)
+
+    make configure
+    patchShebangs ./install-sh
+  '';
+
+  meta = with lib; {
+    description = "XFS filesystem incremental dump utility";
+    homepage = "https://git.kernel.org/pub/scm/fs/xfs/xfsdump-dev.git/tree/doc/CHANGES";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.lunik1 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/xfsprogs/default.nix b/nixpkgs/pkgs/tools/filesystems/xfsprogs/default.nix
new file mode 100644
index 000000000000..c8c80e5ff777
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/xfsprogs/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, buildPackages, fetchurl, gettext, pkg-config
+, icu, libuuid, readline, inih, liburcu
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xfsprogs";
+  version = "6.4.0";
+
+  src = fetchurl {
+    url = "mirror://kernel/linux/utils/fs/xfs/xfsprogs/${pname}-${version}.tar.xz";
+    hash = "sha256-wxhoQYv79Jo6nEf8cM3/3p2W9P8AUb0EoIgeZlRkgQQ=";
+  };
+
+  outputs = [ "bin" "dev" "out" "doc" ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [
+    gettext pkg-config
+    libuuid # codegen tool uses libuuid
+    liburcu # required by crc32selftest
+  ];
+  buildInputs = [ readline icu inih liburcu ];
+  propagatedBuildInputs = [ libuuid ]; # Dev headers include <uuid/uuid.h>
+
+  enableParallelBuilding = true;
+  # Install fails as:
+  #   make[1]: *** No rule to make target '\', needed by 'kmem.lo'.  Stop.
+  enableParallelInstalling = false;
+
+  # @sbindir@ is replaced with /run/current-system/sw/bin to fix dependency cycles
+  preConfigure = ''
+    for file in scrub/{xfs_scrub_all.cron.in,xfs_scrub@.service.in,xfs_scrub_all.service.in}; do
+      substituteInPlace "$file" \
+        --replace '@sbindir@' '/run/current-system/sw/bin'
+    done
+    patchShebangs ./install-sh
+  '';
+
+  configureFlags = [
+    "--disable-lib64"
+    "--with-systemd-unit-dir=${placeholder "out"}/lib/systemd/system"
+  ];
+
+  installFlags = [ "install-dev" ];
+
+  # FIXME: forbidden rpath
+  postInstall = ''
+    find . -type d -name .libs | xargs rm -rf
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests.installer) lvm;
+  };
+
+  meta = with lib; {
+    homepage = "https://xfs.org/";
+    description = "SGI XFS utilities";
+    license = with licenses; [ gpl2Only lgpl21 gpl3Plus ];  # see https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/tree/debian/copyright
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dezgeg ] ++ teams.helsinki-systems.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/xtreemfs/default.nix b/nixpkgs/pkgs/tools/filesystems/xtreemfs/default.nix
new file mode 100644
index 000000000000..6c02117936da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/xtreemfs/default.nix
@@ -0,0 +1,113 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, makeWrapper
+, ant
+, attr
+, boost
+, cmake
+, file
+, fuse
+, jdk8
+, openssl
+, python3
+, valgrind
+, which
+}:
+
+stdenv.mkDerivation {
+  pname = "XtreemFS";
+  # using unstable release because stable (v1.5.1) has broken repl java plugin
+  version = "unstable-2015-06-17";
+
+  src = fetchFromGitHub {
+    rev = "7ddcb081aa125b0cfb008dc98addd260b8353ab3";
+    owner = "xtreemfs";
+    repo = "xtreemfs";
+    sha256 = "1hjmd32pla27zf98ghzz6r5ml8ry86m9dsryv1z01kxv5l95b3m0";
+  };
+
+  nativeBuildInputs = [ makeWrapper python3 ];
+  buildInputs = [ which attr ];
+
+  patches = [
+    (fetchpatch {
+      name = "protobuf-add-arm64-atomicops.patch";
+      url = "https://github.com/protocolbuffers/protobuf/commit/2ca19bd8066821a56f193e7fca47139b25c617ad.patch";
+      stripLen = 1;
+      extraPrefix = "cpp/thirdparty/protobuf-2.5.0/";
+      sha256 = "sha256-hlL5ZiJhpO3fPpcSTV+yki4zahg/OhFdIZEGF1TNTe0=";
+    })
+    (fetchpatch {
+      name = "protobuf-add-aarch64-architecture-to-platform-macros.patch";
+      url = "https://github.com/protocolbuffers/protobuf/commit/f0b6a5cfeb5f6347c34975446bda08e0c20c9902.patch";
+      stripLen = 1;
+      extraPrefix = "cpp/thirdparty/protobuf-2.5.0/";
+      sha256 = "sha256-VRl303x9g5ES/LMODcAdhsPiEmQTq/qXhE/DfvLXF84=";
+    })
+    (fetchpatch {
+      name = "xtreemfs-fix-for-boost-version-1.66.patch";
+      url = "https://github.com/xtreemfs/xtreemfs/commit/aab843cb115ab0739edf7f58fd2d4553a05374a8.patch";
+      sha256 = "sha256-y/vXI/PT1TwSy8/73+RKIgKq4pZ9i22MBxr6jo/M5l8=";
+    })
+    (fetchpatch {
+      name = "xtreemfs-fix-for-openssl_1_1.patch";
+      url = "https://github.com/xtreemfs/xtreemfs/commit/ebfdc2fff56c09f310159d92026883941e42a953.patch";
+      sha256 = "075w00ad88qm6xpm5679m0gfzkrc53w17sk7ycybf4hzxjs29ygy";
+    })
+  ];
+
+  preConfigure = ''
+    export JAVA_HOME=${jdk8}
+    export ANT_HOME=${ant}
+
+    export BOOST_INCLUDEDIR=${boost.dev}/include
+    export BOOST_LIBRARYDIR=${boost.out}/lib
+    export CMAKE_INCLUDE_PATH=${openssl.dev}/include
+    export CMAKE_LIBRARY_PATH=${lib.getLib openssl}/lib
+
+    substituteInPlace cpp/cmake/FindValgrind.cmake \
+      --replace "/usr/local" "${valgrind}"
+
+    substituteInPlace cpp/CMakeLists.txt \
+      --replace '"/lib64" "/usr/lib64"' '"${attr.out}/lib" "${fuse}/lib"'
+
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${fuse}/include"
+    export NIX_CFLAGS_LINK="$NIX_CFLAGS_LINK -L${fuse}/lib"
+
+    export DESTDIR=$out
+
+    substituteInPlace Makefile \
+      --replace "/usr/share/" "/share/" \
+      --replace 'BIN_DIR=$(DESTDIR)/usr/bin' "BIN_DIR=$out/bin"
+
+    substituteInPlace etc/init.d/generate_initd_scripts.sh \
+      --replace "/bin/bash" "${stdenv.shell}"
+
+    substituteInPlace cpp/thirdparty/gtest-1.7.0/configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+
+    substituteInPlace cpp/thirdparty/protobuf-2.5.0/configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+
+    substituteInPlace cpp/thirdparty/protobuf-2.5.0/gtest/configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+
+    # do not put cmake into buildInputs
+    export PATH="$PATH:${cmake}/bin"
+  '';
+
+  doCheck = false;
+
+  postInstall = ''
+    rm -r $out/sbin
+  '';
+
+  meta = {
+    description = "A distributed filesystem";
+    maintainers = with lib.maintainers; [ raskin matejc ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/yandex-disk/default.nix b/nixpkgs/pkgs/tools/filesystems/yandex-disk/default.nix
new file mode 100644
index 000000000000..94907ee4fd2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/yandex-disk/default.nix
@@ -0,0 +1,72 @@
+{ lib, stdenv, fetchurl, writeText, zlib, rpmextract, patchelf, which }:
+
+let
+  p = if stdenv.is64bit then {
+      arch = "x86_64";
+      gcclib = "${stdenv.cc.cc.lib}/lib64";
+      sha256 = "sha256-HH/pLZmDr6m/B3e6MHafDGnNWR83oR2y1ijVMR/LOF0=";
+      webarchive = "20220519080155";
+    }
+    else {
+      arch = "i386";
+      gcclib = "${stdenv.cc.cc.lib}/lib";
+      sha256 = "sha256-28dmdnJf+qh9r3F0quwlYXB/UqcOzcHzuzFq8vt2bf0=";
+      webarchive = "20220519080430";
+    };
+in
+stdenv.mkDerivation rec {
+
+  pname = "yandex-disk";
+  version = "0.1.6.1080";
+
+  src = fetchurl {
+    urls = [
+      "https://repo.yandex.ru/yandex-disk/rpm/stable/${p.arch}/${pname}-${version}-1.fedora.${p.arch}.rpm"
+      "https://web.archive.org/web/${p.webarchive}/https://repo.yandex.ru/yandex-disk/rpm/stable/${p.arch}/${pname}-${version}-1.fedora.${p.arch}.rpm"
+    ];
+    sha256 = p.sha256;
+  };
+
+  builder = writeText "builder.sh" ''
+    . $stdenv/setup
+    mkdir -pv $out/bin
+    mkdir -pv $out/share
+    mkdir -pv $out/etc
+
+    mkdir -pv unpacked
+    cd unpacked
+    ${rpmextract}/bin/rpmextract $src
+
+    mkdir -p $out/share/bash-completion/completions
+    cp -r -t $out/bin usr/bin/*
+    cp -r -t $out/share usr/share/*
+    cp -r -t $out/share/bash-completion/completions etc/bash_completion.d/*
+
+    sed -i 's@have@${which}/bin/which >/dev/null 2>\&1@' \
+      $out/share/bash-completion/completions/yandex-disk-completion.bash
+
+    ${patchelf}/bin/patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${zlib.out}/lib:${p.gcclib}" \
+      $out/bin/yandex-disk
+  '';
+
+  meta = {
+    homepage = "https://help.yandex.com/disk/cli-clients.xml";
+    description = "A free cloud file storage service";
+    maintainers = with lib.maintainers; [ smironov jagajaga ];
+    platforms = ["i686-linux" "x86_64-linux"];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    longDescription = ''
+      Yandex.Disk console client for Linux lets you manage files on Disk without
+      using a window interface or programs that support WebDAV. The advantages
+      of the console client compared to a WebDAV connection:
+       * low system resource requirements;
+       * faster file reading and writing speeds;
+       * faster syncing with Disk's server;
+       * no need to be constantly connected to work with files.
+    '';
+    mainProgram = "yandex-disk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/zerofree/default.nix b/nixpkgs/pkgs/tools/filesystems/zerofree/default.nix
new file mode 100644
index 000000000000..d44e92a33c46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/zerofree/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, installShellFiles, e2fsprogs }:
+
+let
+  manpage = fetchurl {
+    url = "https://manpages.ubuntu.com/manpages.gz/xenial/man8/zerofree.8.gz";
+    sha256 = "0y132xmjl02vw41k794psa4nmjpdyky9f6sf0h4f7rvf83z3zy4k";
+  };
+in stdenv.mkDerivation rec {
+  pname = "zerofree";
+  version = "1.1.1";
+
+  src = fetchurl {
+    url = "https://frippery.org/uml/${pname}-${version}.tgz";
+    sha256 = "0rrqfa5z103ws89vi8kfvbks1cfs74ix6n1wb6vs582vnmhwhswm";
+  };
+
+  buildInputs = [ e2fsprogs installShellFiles ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/zerofree
+    cp zerofree $out/bin
+    cp COPYING $out/share/zerofree/COPYING
+    installManPage ${manpage}
+  '';
+
+  meta = {
+    homepage = "https://frippery.org/uml/";
+    description = "Zero free blocks from ext2, ext3 and ext4 file-systems";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.theuni ];
+    mainProgram = "zerofree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/zfstools/default.nix b/nixpkgs/pkgs/tools/filesystems/zfstools/default.nix
new file mode 100644
index 000000000000..0a4447bacc4f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/zfstools/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, ruby, zfs, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "zfstools";
+  version = "0.3.6";
+
+  src = fetchFromGitHub {
+    sha256 = "16lvw3xbmxp2pr8nixqn7lf4504zaaxvbbdnjkv4dggwd4lsdjyg";
+    rev = "v${version}";
+    repo = "zfstools";
+    owner = "bdrewery";
+  };
+
+  buildInputs = [ ruby ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/* $out/bin/
+
+    cp -R lib $out/
+
+    for f in $out/bin/*; do
+      wrapProgram $f \
+        --set RUBYLIB $out/lib \
+        --prefix PATH : ${zfs}/bin
+    done
+  '';
+
+  meta = with lib; {
+    inherit version;
+    inherit (src.meta) homepage;
+    description = "OpenSolaris-compatible auto-snapshotting script for ZFS";
+    longDescription = ''
+      zfstools is an OpenSolaris-like and compatible auto snapshotting script
+      for ZFS, which also supports auto snapshotting mysql databases.
+    '';
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/zkfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/zkfuse/default.nix
new file mode 100644
index 000000000000..00d78af0146f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/zkfuse/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, lib
+, autoreconfHook
+, boost
+, fuse
+, log4cxx
+, zookeeper
+, zookeeper_mt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zkfuse";
+  inherit (zookeeper_mt) version src;
+
+  sourceRoot = "apache-${zookeeper.pname}-${version}/zookeeper-contrib/zookeeper-contrib-zkfuse";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ zookeeper_mt log4cxx boost fuse ];
+
+  postPatch = ''
+    # Make the async API accessible, and use the proper include path.
+    sed -i src/zkadapter.h \
+        -e '/"zookeeper\.h"/i#define THREADED' \
+        -e 's,"zookeeper\.h",<zookeeper/zookeeper.h>,'
+  '';
+
+  # c++17 (gcc-11's default) breaks the build as:
+  #   zkadapter.h:616:33: error: ISO C++17 does not allow dynamic exception specifications
+  env.NIX_CFLAGS_COMPILE = toString [ "-std=c++14" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -v src/zkfuse $out/bin
+  '';
+
+  meta = with lib; {
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ztzg ];
+    license = licenses.asl20;
+    mainProgram = "zkfuse";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/zpool-auto-expand-partitions/Cargo.lock b/nixpkgs/pkgs/tools/filesystems/zpool-auto-expand-partitions/Cargo.lock
new file mode 100644
index 000000000000..3611e181a0fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/zpool-auto-expand-partitions/Cargo.lock
@@ -0,0 +1,753 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bindgen"
+version = "0.65.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.39",
+ "which",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.69.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ffcebc3849946a7170a05992aac39da343a90676ab392c51a4280981d6379c2"
+dependencies = [
+ "bitflags 2.4.1",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.39",
+ "which",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "blkid"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f68440dfd06d6a97a56f8e67729316f33c7e52c31f59f16f6e9641777702bb7"
+dependencies = [
+ "bitflags 1.3.2",
+ "blkid-sys",
+ "libc",
+ "pkg-config",
+ "strum",
+ "strum_macros",
+ "thiserror",
+]
+
+[[package]]
+name = "blkid-sys"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc9c952498f4ffdf6ec98a7e739ca08cc8af1950efdd9f47db46d9dbdc111565"
+dependencies = [
+ "bindgen 0.65.1",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "3.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5177fac1ab67102d8989464efd043c6ff44191b1557ec1ddd489b4f7e1447e77"
+dependencies = [
+ "atty",
+ "bitflags 1.3.2",
+ "clap_derive",
+ "indexmap",
+ "lazy_static",
+ "os_str_bytes",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01d42c94ce7c2252681b5fed4d3627cc807b13dfc033246bd05d5b252399000e"
+dependencies = [
+ "heck 0.4.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.86",
+]
+
+[[package]]
+name = "cstr-argument"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bd9c8e659a473bce955ae5c35b116af38af11a7acb0b480e01f3ed348aeb40"
+dependencies = [
+ "cfg-if",
+ "memchr",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "errno"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libzfs"
+version = "0.6.16"
+source = "git+https://github.com/DeterminateSystems/rust-libzfs?branch=fix-build-zpool-auto-expand-partitions#7c14513fb85a147ce91afa02f5a0dc3e3f788c3a"
+dependencies = [
+ "cstr-argument",
+ "foreign-types",
+ "lazy_static",
+ "libzfs-sys",
+ "libzfs-types",
+ "nvpair-sys",
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "libzfs-sys"
+version = "0.5.11"
+source = "git+https://github.com/DeterminateSystems/rust-libzfs?branch=fix-build-zpool-auto-expand-partitions#7c14513fb85a147ce91afa02f5a0dc3e3f788c3a"
+dependencies = [
+ "bindgen 0.69.1",
+ "nvpair-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libzfs-types"
+version = "0.1.2"
+source = "git+https://github.com/DeterminateSystems/rust-libzfs?branch=fix-build-zpool-auto-expand-partitions#7c14513fb85a147ce91afa02f5a0dc3e3f788c3a"
+dependencies = [
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "memchr"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nvpair-sys"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc4cc751960db1094a7a732dd0706927aeae9194bf66c30fa227b70fc62b6c8"
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
+
+[[package]]
+name = "prettyplease"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
+dependencies = [
+ "proc-macro2",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.86",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.38.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
+
+[[package]]
+name = "ryu"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
+
+[[package]]
+name = "serde"
+version = "1.0.136"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.136"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.86",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb"
+
+[[package]]
+name = "strum_macros"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.86",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
+
+[[package]]
+name = "thiserror"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.86",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "zpool_part_disks"
+version = "0.1.1"
+dependencies = [
+ "blkid",
+ "clap",
+ "libzfs",
+ "serde",
+ "serde_json",
+]
diff --git a/nixpkgs/pkgs/tools/filesystems/zpool-auto-expand-partitions/default.nix b/nixpkgs/pkgs/tools/filesystems/zpool-auto-expand-partitions/default.nix
new file mode 100644
index 000000000000..8fced13e93db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/zpool-auto-expand-partitions/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, rustPlatform
+, cloud-utils
+, fetchFromGitHub
+, pkg-config
+, util-linux
+, zfs
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "zpool-auto-expand-partitions";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "DeterminateSystems";
+    repo = "zpool-auto-expand-partitions";
+    rev = "v${version}";
+    hash = "sha256-N1znZbJULEeNR4ABSrUtHHkmz08N+CZqX6Ni7jFzc4c=";
+  };
+
+  cargoLock.lockFile = ./Cargo.lock;
+  # We rely on a fork of libzfs in order to bump the bindgen version to fix
+  # builds against LLVM 16.
+  cargoLock.outputHashes = {
+    "libzfs-0.6.16" = "sha256-kQunP/xW1Zb1q+TcgAkmZkt1yDnJo9CwF5qldikVN94=";
+  };
+
+  preBuild = ''
+    substituteInPlace src/grow.rs \
+      --replace '"growpart"' '"${cloud-utils}/bin/growpart"'
+    substituteInPlace src/lsblk.rs \
+      --replace '"lsblk"' '"${util-linux}/bin/lsblk"'
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    util-linux
+    zfs
+  ];
+
+  meta = with lib; {
+    description = "A tool that aims to expand all partitions in a specified zpool to fill the available space";
+    homepage = "https://github.com/DeterminateSystems/zpool-auto-expand-partitions";
+    license = licenses.asl20;
+    maintainers = teams.determinatesystems.members;
+    mainProgram = "zpool_part_disks";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/zpool-iostat-viz/default.nix b/nixpkgs/pkgs/tools/filesystems/zpool-iostat-viz/default.nix
new file mode 100644
index 000000000000..4f546e544e66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/zpool-iostat-viz/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+, installShellFiles
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "zpool-iostat-viz";
+  version = "unstable-2021-11-13";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "chadmiller";
+    repo = pname;
+    rev = "cdd8f3d882ab7a9990fb2d26af3e5b2bcc4bb312";
+    sha256 = "sha256-vNXD5SauBpCtP7VPTumQ0/wXfW0PjtooS21cjpAole8=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    python3Packages.wrapPython
+  ];
+
+  # There is no setup.py
+  dontConfigure = true;
+  dontBuild = true;
+  doCheck = false;
+
+  installPhase = ''
+    wrapPythonPrograms
+    install -D zpool-iostat-viz $out/bin/zpool-iostat-viz
+    installManPage zpool-iostat-viz.1
+  '';
+
+  meta = with lib; {
+    description = "\"zpool iostats\" for humans; find the slow parts of your ZFS pool";
+    homepage = "https://github.com/chadmiller/zpool-iostat-viz";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ julm ];
+    mainProgram = "zpool-iostat-viz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/ajour/Cargo.lock b/nixpkgs/pkgs/tools/games/ajour/Cargo.lock
new file mode 100644
index 000000000000..32c11739927e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/ajour/Cargo.lock
@@ -0,0 +1,4781 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ab_glyph"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af0ac006645f86f20f6c6fa4dcaef920bf803df819123626f9440e35835e7d80"
+dependencies = [
+ "ab_glyph_rasterizer",
+ "owned_ttf_parser 0.12.1",
+]
+
+[[package]]
+name = "ab_glyph_rasterizer"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9fe5e32de01730eb1f6b7f5b51c17e03e2325bf40a74f754f04f130043affff"
+
+[[package]]
+name = "addr2line"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ajour"
+version = "1.3.2"
+dependencies = [
+ "ajour-core",
+ "ajour-weak-auras",
+ "ajour-widgets",
+ "anyhow",
+ "async-std",
+ "chrono",
+ "embed-resource",
+ "fern",
+ "futures",
+ "fuzzy-matcher",
+ "iced",
+ "iced_futures",
+ "iced_native",
+ "image",
+ "isahc 0.9.14",
+ "isolang",
+ "json-gettext",
+ "log",
+ "log-panics",
+ "native-dialog",
+ "num-format",
+ "once_cell",
+ "open",
+ "opener",
+ "rfd",
+ "serde",
+ "serde_json",
+ "strfmt",
+ "structopt",
+ "timeago",
+ "version-compare 0.0.11",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ajour-core"
+version = "1.3.2"
+dependencies = [
+ "async-std",
+ "async-trait",
+ "chrono",
+ "dirs-next",
+ "dyn-clone",
+ "fancy-regex",
+ "fern",
+ "flate2",
+ "futures",
+ "glob",
+ "iced_native",
+ "isahc 1.4.0",
+ "log",
+ "num_cpus",
+ "once_cell",
+ "path-slash",
+ "rayon",
+ "regex",
+ "retry",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "serde_yaml",
+ "tar",
+ "tempfile",
+ "thiserror",
+ "urlencoding",
+ "walkdir",
+ "zip",
+ "zstd",
+]
+
+[[package]]
+name = "ajour-weak-auras"
+version = "1.3.2"
+dependencies = [
+ "ajour-core",
+ "anyhow",
+ "async-std",
+ "futures",
+ "isahc 1.4.0",
+ "mlua",
+ "percent-encoding",
+ "serde",
+ "serde_json",
+ "structopt",
+ "thiserror",
+]
+
+[[package]]
+name = "ajour-widgets"
+version = "1.3.2"
+dependencies = [
+ "iced_core",
+ "iced_glow",
+ "iced_graphics",
+ "iced_native",
+ "iced_wgpu",
+]
+
+[[package]]
+name = "andrew"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf"
+dependencies = [
+ "bitflags",
+ "rusttype",
+ "walkdir",
+ "xdg",
+ "xml-rs",
+]
+
+[[package]]
+name = "android_glue"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407"
+
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "595d3cfa7a60d4555cb5067b99f07142a08ea778de5cf993f7b75c7d8fabc486"
+
+[[package]]
+name = "approx"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9"
+dependencies = [
+ "nodrop",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "ash"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c69a8137596e84c22d57f3da1b5de1d4230b1742a710091c85f4d7ce50f00f38"
+dependencies = [
+ "libloading 0.6.7",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965"
+dependencies = [
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-mutex",
+ "blocking",
+ "futures-lite",
+ "num_cpus",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b"
+dependencies = [
+ "concurrent-queue",
+ "futures-lite",
+ "libc",
+ "log",
+ "once_cell",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-mutex"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-process"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f38756dd9ac84671c428afbf7c9f7495feff9ec5b0710f17100098e5b354ac"
+dependencies = [
+ "async-io",
+ "blocking",
+ "cfg-if 1.0.0",
+ "event-listener",
+ "futures-lite",
+ "libc",
+ "once_cell",
+ "signal-hook",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "async-std"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f06685bad74e0570f5213741bea82158279a4103d988e57bfada11ad230341"
+dependencies = [
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "async-process",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "num_cpus",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0"
+
+[[package]]
+name = "async-trait"
+version = "0.1.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f530e4af131d94cc4fa15c5c9d0348f0ef28bac64ba660b6b2a1cf2605dedfce"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
+name = "backtrace"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide 0.4.4",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "blocking"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5e170dbede1f740736619b776d7251cb1b9095c435c34d8ca9f57fcd2f335e9"
+dependencies = [
+ "async-channel",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "bumpalo"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad807f2fc2bf185eeb98ff3a901bd46dc5ad58163d0fa4577ba0d25674d71708"
+
+[[package]]
+name = "bumpalo"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631"
+
+[[package]]
+name = "bytemuck"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e215f8c2f9f79cb53c8335e687ffd07d5bfcb6fe5fc80723762d0be46e7cc54"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytes"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
+
+[[package]]
+name = "bzip2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cache-padded"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba"
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ed2639b9ad5f1d6efa76de95558e11339e7318426d84ac4890b86c03e828ca7"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "calloop"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b036167e76041694579972c28cf4877b4f92da222560ddb49008937b6a6727c"
+dependencies = [
+ "log",
+ "nix 0.18.0",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cgl"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e4ea1881992efc993e4dc50a324cdbd03216e41bdc8385720ff47efc9bd2ca8"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "clipboard_macos"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "145a7f9e9b89453bc0a5e32d166456405d389cea5b578f57f1274b1397588a95"
+dependencies = [
+ "objc",
+ "objc-foundation",
+ "objc_id",
+]
+
+[[package]]
+name = "clipboard_wayland"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f6364a9f7a66f2ac1a1a098aa1c7f6b686f2496c6ac5e5c0d773445df912747"
+dependencies = [
+ "smithay-clipboard",
+]
+
+[[package]]
+name = "clipboard_x11"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64240d63f1883d87e5637bfcaf9d77e5c8bd24e30fd440ea2dff5c48c0bf0b7a"
+dependencies = [
+ "thiserror",
+ "x11rb",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c54201c07dcf3a5ca33fececb8042aed767ee4bfd5a0235a8ceabcda956044b2"
+dependencies = [
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "core-foundation 0.9.1",
+ "core-graphics 0.22.2",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832"
+dependencies = [
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "core-foundation 0.9.1",
+ "core-graphics 0.22.2",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
+dependencies = [
+ "bitflags",
+ "block",
+ "core-foundation 0.9.1",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "concurrent-queue"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
+dependencies = [
+ "cache-padded",
+]
+
+[[package]]
+name = "copyless"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536"
+
+[[package]]
+name = "core-foundation"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
+dependencies = [
+ "core-foundation-sys 0.7.0",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62"
+dependencies = [
+ "core-foundation-sys 0.8.2",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b"
+
+[[package]]
+name = "core-graphics"
+version = "0.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.7.0",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics"
+version = "0.22.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "269f35f69b542b80e736a20a89a05215c0ce80c2c03c514abb2e318b78379d86"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.9.1",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.9.1",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-text"
+version = "19.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25"
+dependencies = [
+ "core-foundation 0.9.1",
+ "core-graphics 0.22.2",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-video-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828"
+dependencies = [
+ "cfg-if 0.1.10",
+ "core-foundation-sys 0.7.0",
+ "core-graphics 0.19.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db"
+dependencies = [
+ "cfg-if 1.0.0",
+ "lazy_static",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "curl"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "003cb79c1c6d1c93344c7e1201bb51c2148f24ec2bd9c253709d6b2efb796515"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.45+curl-7.78.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de9e5a72b1c744eb5dd20b2be4d7eb84625070bb5c4ab9b347b70464ab1e62eb"
+dependencies = [
+ "cc",
+ "libc",
+ "libnghttp2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "d3d12"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a60cceb22c7c53035f8980524fdc7f17cf49681a3c154e6757d30afbec6ec4"
+dependencies = [
+ "bitflags",
+ "libloading 0.6.7",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "darling"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.9.3",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "deflate"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "dlib"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76"
+dependencies = [
+ "libloading 0.6.7",
+]
+
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading 0.7.0",
+]
+
+[[package]]
+name = "dodrio"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7593dfc68e57dc1d058ada0f151ba07f4b05183c4da4c4df8ff651a81ef0fab"
+dependencies = [
+ "bumpalo 2.6.0",
+ "cfg-if 0.1.10",
+ "fxhash",
+ "js-sys",
+ "longest-increasing-subsequence",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "dwrote"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "winapi 0.3.9",
+ "wio",
+]
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf"
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "embed-resource"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45de30eb317b4cd3882ee16623cb3004e5fb99a8f4cd40097cadf61efbc54adc"
+dependencies = [
+ "cc",
+ "vswhom",
+ "winreg",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5115567ac25674e0043e472be13d14e537f37ea8aa4bdc4aef0c89add1db1ff"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "euclid"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da96828553a086d7b18dcebfc579bd9628b016f86590d7453c115e490fa74b80"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59"
+
+[[package]]
+name = "expat-sys"
+version = "2.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa"
+dependencies = [
+ "cmake",
+ "pkg-config",
+]
+
+[[package]]
+name = "fancy-regex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe09872bd11351a75f22b24c3769fc863e8212d926d6db46b94ad710d14cc5cc"
+dependencies = [
+ "bit-set",
+ "regex",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b394ed3d285a429378d3b384b9eb1285267e7df4b166df24b7a6939a04dc392e"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fern"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9a4820f0ccc8a7afd67c39a0f1a0f4b07ca1725164271a64939d7aeb9af065"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd3aec53de10fe96d7d8c565eb17f2c687bb5518a2ec453b5b1252964526abe0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crc32fast",
+ "libc",
+ "miniz_oxide 0.4.4",
+]
+
+[[package]]
+name = "float-ord"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e"
+
+[[package]]
+name = "flume"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bebadab126f8120d410b677ed95eee4ba6eb7c6dd8e34a5ec88a08050e26132"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "spinning_top",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "font-kit"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46c9a156ec38864999bc9c4156e5f3b50224d4a5578028a64e5a3875caa9ee28"
+dependencies = [
+ "bitflags",
+ "byteorder",
+ "core-foundation 0.9.1",
+ "core-graphics 0.22.2",
+ "core-text",
+ "dirs-next",
+ "dwrote",
+ "float-ord",
+ "freetype",
+ "lazy_static",
+ "libc",
+ "log",
+ "pathfinder_geometry",
+ "pathfinder_simd",
+ "servo-fontconfig",
+ "walkdir",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "freetype"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6"
+dependencies = [
+ "freetype-sys",
+ "libc",
+]
+
+[[package]]
+name = "freetype-sys"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a"
+dependencies = [
+ "cmake",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futures"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1adc00f486adfc9ce99f77d717836f0c5aa84965eb0b4f051f4e83f7cab53f8b"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74ed2411805f6e4e3d9bc904c95d5d423b89b3b25dc0250aa74729de20629ff9"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af51b1b4a7fdff033703db39de8802c673eb91855f2e0d47dcf3bf2c0ef01f99"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d0d535a57b87e1ae31437b892713aee90cd2d7b0ee48727cd11fc72ef54761c"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+ "num_cpus",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b0e06c393068f3a6ef246c75cdca793d6a46347e75286933e5e75fd2fd11582"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c54913bae956fb8df7f4dc6fc90362aa72e69148e3f39041fbe8742d21e0ac57"
+dependencies = [
+ "autocfg 1.0.1",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0f30aaa67363d119812743aa5f33c201a7a66329f97d1a887022971feea4b53"
+
+[[package]]
+name = "futures-task"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe54a98670017f3be909561f6ad13e810d9a51f3f061b902062ca3da80799f2"
+
+[[package]]
+name = "futures-util"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67eb846bfd58e44a8481a00049e82c43e0ccb5d61f8dc071057cb19249dd4d78"
+dependencies = [
+ "autocfg 1.0.1",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "proc-macro-hack",
+ "proc-macro-nested",
+ "slab",
+]
+
+[[package]]
+name = "fuzzy-matcher"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94"
+dependencies = [
+ "thread_local",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bfe468a7f43e97b8d193a762b6c5cf67a7d36cacbc0b9291dbcae24bfea1e8f"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a9653cfc500fd268015b1ac055ddbc3df7a5c9ea3f4ccef147b3957bd140d69"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e692e296bfac1d2533ef168d0b60ff5897b8b70a4009276834014dd8924cc028"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.10.2+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gfx-auxil"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07cd956b592970f08545b9325b87580eb95a51843b6f39da27b8667fec1a1216"
+dependencies = [
+ "fxhash",
+ "gfx-hal",
+ "spirv_cross",
+]
+
+[[package]]
+name = "gfx-backend-dx11"
+version = "0.6.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54b43f06089866bdffe59b5a6801022c86b74d2c1dd28940a9cf301d3d014fbc"
+dependencies = [
+ "arrayvec 0.5.2",
+ "bitflags",
+ "gfx-auxil",
+ "gfx-hal",
+ "libloading 0.6.7",
+ "log",
+ "parking_lot",
+ "range-alloc",
+ "raw-window-handle",
+ "smallvec",
+ "spirv_cross",
+ "thunderdome",
+ "winapi 0.3.9",
+ "wio",
+]
+
+[[package]]
+name = "gfx-backend-dx12"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "375014deed24d76b03604736dd899f0925158a1a96db90cbefb9cce070f71af7"
+dependencies = [
+ "arrayvec 0.5.2",
+ "bit-set",
+ "bitflags",
+ "d3d12",
+ "gfx-auxil",
+ "gfx-hal",
+ "log",
+ "range-alloc",
+ "raw-window-handle",
+ "smallvec",
+ "spirv_cross",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "gfx-backend-empty"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2085227c12b78f6657a900c829f2d0deb46a9be3eaf86844fde263cdc218f77c"
+dependencies = [
+ "gfx-hal",
+ "log",
+ "raw-window-handle",
+]
+
+[[package]]
+name = "gfx-backend-metal"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "273d60d5207f96d99e0d11d0718995f67e56533a9df1444d83baf787f4c3cb32"
+dependencies = [
+ "arrayvec 0.5.2",
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "copyless",
+ "foreign-types",
+ "gfx-auxil",
+ "gfx-hal",
+ "lazy_static",
+ "log",
+ "metal",
+ "objc",
+ "parking_lot",
+ "range-alloc",
+ "raw-window-handle",
+ "smallvec",
+ "spirv_cross",
+ "storage-map",
+]
+
+[[package]]
+name = "gfx-backend-vulkan"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a3a63cf61067a09b7d1ac480af3cb2ae0c5ede5bed294607bbd814cb1666c45"
+dependencies = [
+ "arrayvec 0.5.2",
+ "ash",
+ "byteorder",
+ "core-graphics-types",
+ "gfx-hal",
+ "inplace_it",
+ "lazy_static",
+ "log",
+ "objc",
+ "raw-window-handle",
+ "smallvec",
+ "winapi 0.3.9",
+ "x11",
+]
+
+[[package]]
+name = "gfx-descriptor"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd8c7afcd000f279d541a490e27117e61037537279b9342279abf4938fe60c6b"
+dependencies = [
+ "arrayvec 0.5.2",
+ "fxhash",
+ "gfx-hal",
+ "log",
+]
+
+[[package]]
+name = "gfx-hal"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18d0754f5b7a43915fd7466883b2d1bb0800d7cc4609178d0b27bf143b9e5123"
+dependencies = [
+ "bitflags",
+ "raw-window-handle",
+]
+
+[[package]]
+name = "gfx-memory"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dccdda5d2b39412f4ca2cb15c70b5a82783a86b0606f5e985342754c8ed88f05"
+dependencies = [
+ "bit-set",
+ "fxhash",
+ "gfx-hal",
+ "log",
+ "slab",
+]
+
+[[package]]
+name = "gif"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a668f699973d0f573d15749b7002a9ac9e1f9c6b220e7b165601334c173d8de"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gimli"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"
+
+[[package]]
+name = "gio-sys"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e24fb752f8f5d2cf6bbc2c606fd2bc989c81c5e2fe321ab974d54f8b6344eac"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "gl_generator"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
+dependencies = [
+ "khronos_api",
+ "log",
+ "xml-rs",
+]
+
+[[package]]
+name = "glam"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579160312273c954cc51bd440f059dde741029ac8daf8c84fece76cb77f62c15"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7e9b997a66e9a23d073f2b1abb4dbfc3925e0b8952f67efd8d9b6e168e4cdc1"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47204a46aaff920a1ea58b11d03dec6f704287d27561724a4631e450654a891f"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "glow"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1625b792e2f9267116dd41eb7d325e0ea2572ceba5069451906745e04f852f33"
+dependencies = [
+ "js-sys",
+ "slotmap",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "glow_glyph"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0510450eb46dd2b8e3284b50b08bfd870f1ef93a55045f54d7376fbcb63b1cb"
+dependencies = [
+ "bytemuck",
+ "glow",
+ "glyph_brush",
+ "log",
+]
+
+[[package]]
+name = "glutin"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ae1cbb9176b9151c4ce03f012e3cd1c6c18c4be79edeaeb3d99f5d8085c5fa3"
+dependencies = [
+ "android_glue",
+ "cgl",
+ "cocoa 0.23.0",
+ "core-foundation 0.9.1",
+ "glutin_egl_sys",
+ "glutin_emscripten_sys",
+ "glutin_gles2_sys",
+ "glutin_glx_sys",
+ "glutin_wgl_sys",
+ "lazy_static",
+ "libloading 0.6.7",
+ "log",
+ "objc",
+ "osmesa-sys",
+ "parking_lot",
+ "wayland-client",
+ "wayland-egl",
+ "winapi 0.3.9",
+ "winit",
+]
+
+[[package]]
+name = "glutin_egl_sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211"
+dependencies = [
+ "gl_generator",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "glutin_emscripten_sys"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1"
+
+[[package]]
+name = "glutin_gles2_sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103"
+dependencies = [
+ "gl_generator",
+ "objc",
+]
+
+[[package]]
+name = "glutin_glx_sys"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351"
+dependencies = [
+ "gl_generator",
+ "x11-dl",
+]
+
+[[package]]
+name = "glutin_wgl_sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696"
+dependencies = [
+ "gl_generator",
+]
+
+[[package]]
+name = "glyph_brush"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e3f00b8574a76fb6c50890c48da03946ca50e4372a2778737922666a2238221"
+dependencies = [
+ "glyph_brush_draw_cache",
+ "glyph_brush_layout",
+ "log",
+ "ordered-float",
+ "rustc-hash",
+ "twox-hash",
+]
+
+[[package]]
+name = "glyph_brush_draw_cache"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac2c82074cafb68b9e459c50c655f7eedcb92d6ee7166813802934bc6fc29fa3"
+dependencies = [
+ "ab_glyph",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "linked-hash-map",
+ "rayon",
+ "rustc-hash",
+]
+
+[[package]]
+name = "glyph_brush_layout"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38"
+dependencies = [
+ "ab_glyph",
+ "approx",
+ "xi-unicode",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "952133b60c318a62bf82ee75b93acc7e84028a093e06b9e27981c2b6fe68218c"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89acda6f084863307d948ba64a4b1ef674e8527dddab147ee4cdcc194c880457"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "guillotiere"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9253eedea82720b2bc91fe831c9ce3a31299955ed5eb19b9ed600a625b686212"
+dependencies = [
+ "euclid",
+ "svg_fmt",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "http"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11"
+dependencies = [
+ "bytes 1.0.1",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "iced"
+version = "0.3.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+dependencies = [
+ "iced_core",
+ "iced_futures",
+ "iced_glow",
+ "iced_glutin",
+ "iced_web",
+ "iced_wgpu",
+ "iced_winit",
+ "thiserror",
+]
+
+[[package]]
+name = "iced_core"
+version = "0.4.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+
+[[package]]
+name = "iced_futures"
+version = "0.3.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+dependencies = [
+ "async-std",
+ "futures",
+ "log",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "iced_glow"
+version = "0.2.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+dependencies = [
+ "bytemuck",
+ "euclid",
+ "glow",
+ "glow_glyph",
+ "glyph_brush",
+ "iced_graphics",
+ "iced_native",
+ "log",
+]
+
+[[package]]
+name = "iced_glutin"
+version = "0.2.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+dependencies = [
+ "glutin",
+ "iced_graphics",
+ "iced_native",
+ "iced_winit",
+]
+
+[[package]]
+name = "iced_graphics"
+version = "0.2.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+dependencies = [
+ "bytemuck",
+ "font-kit",
+ "glam",
+ "iced_native",
+ "iced_style",
+ "raw-window-handle",
+ "thiserror",
+]
+
+[[package]]
+name = "iced_native"
+version = "0.4.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+dependencies = [
+ "iced_core",
+ "iced_futures",
+ "num-traits",
+ "twox-hash",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "iced_style"
+version = "0.3.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+dependencies = [
+ "iced_core",
+]
+
+[[package]]
+name = "iced_web"
+version = "0.4.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+dependencies = [
+ "dodrio",
+ "iced_core",
+ "iced_futures",
+ "iced_style",
+ "num-traits",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "iced_wgpu"
+version = "0.4.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+dependencies = [
+ "bytemuck",
+ "futures",
+ "glyph_brush",
+ "guillotiere",
+ "iced_graphics",
+ "iced_native",
+ "log",
+ "raw-window-handle",
+ "wgpu",
+ "wgpu_glyph",
+]
+
+[[package]]
+name = "iced_winit"
+version = "0.3.0"
+source = "git+https://github.com/ajour/iced?branch=revert-wgpu-0.7#fb41fd2337528ebffbd261cf257f35fa6c7e3792"
+dependencies = [
+ "iced_futures",
+ "iced_graphics",
+ "iced_native",
+ "log",
+ "thiserror",
+ "winapi 0.3.9",
+ "window_clipboard",
+ "winit",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.23.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "gif",
+ "jpeg-decoder",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+ "png",
+ "scoped_threadpool",
+ "tiff",
+]
+
+[[package]]
+name = "inplace_it"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90953f308a79fe6d62a4643e51f848fbfddcd05975a38e69fdf4ab86a7baf7ca"
+
+[[package]]
+name = "instant"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "isahc"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a"
+dependencies = [
+ "bytes 0.5.6",
+ "crossbeam-utils",
+ "curl",
+ "curl-sys",
+ "encoding_rs",
+ "flume",
+ "futures-lite",
+ "http",
+ "log",
+ "mime",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "slab",
+ "sluice",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "waker-fn",
+]
+
+[[package]]
+name = "isahc"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81c01404730bb4574bbacb59ca0855f969f8eabd688ca22866f2cc333f1a4f69"
+dependencies = [
+ "async-channel",
+ "crossbeam-utils",
+ "curl",
+ "curl-sys",
+ "encoding_rs",
+ "event-listener",
+ "futures-lite",
+ "http",
+ "log",
+ "mime",
+ "once_cell",
+ "polling",
+ "serde",
+ "serde_json",
+ "slab",
+ "sluice",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "waker-fn",
+]
+
+[[package]]
+name = "isolang"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "265ef164908329e47e753c769b14cbb27434abf0c41984dca201484022f09ce5"
+dependencies = [
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "972f5ae5d1cb9c6ae417789196c803205313edde988685da5e3aae0827b9e7fd"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83bdfbace3a0e81a4253f73b49e960b053e396a11012cbd49b9b74d6a2b67062"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json-gettext"
+version = "3.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f1f7580c52e9046fb414aa0b4d0df8c34612397f7dceffda415a3b24139833f"
+dependencies = [
+ "regex",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "khronos_api"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790"
+
+[[package]]
+name = "libloading"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "libnghttp2-sys"
+version = "0.1.6+1.43.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0af55541a8827e138d59ec9e5877fb6095ece63fb6f4da45e7491b4fbd262855"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
+
+[[package]]
+name = "lock_api"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if 1.0.0",
+ "value-bag",
+]
+
+[[package]]
+name = "log-panics"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae0136257df209261daa18d6c16394757c63e032e27aafd8b07788b051082bef"
+dependencies = [
+ "backtrace",
+ "log",
+]
+
+[[package]]
+name = "longest-increasing-subsequence"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86"
+
+[[package]]
+name = "lua-src"
+version = "540.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3abacd03794cff973408c83f918215649d4b4612eb25049a305c2fd74e0f69f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "luajit-src"
+version = "210.2.0+resty5f13855"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f85722ea9e022305a077b916c9271011a195ee8dc9b2b764fc78b0378e3b72"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
+
+[[package]]
+name = "memmap2"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memmap2"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "723e3ebdcdc5c023db1df315364573789f8857c11b631a2fdfad7c00f5c046b4"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
+dependencies = [
+ "autocfg 1.0.1",
+]
+
+[[package]]
+name = "metal"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c4e8a431536529327e28c9ba6992f2cb0c15d4222f0602a16e6d7695ff3bccf"
+dependencies = [
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "foreign-types",
+ "log",
+ "objc",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
+dependencies = [
+ "adler32",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
+dependencies = [
+ "adler",
+ "autocfg 1.0.1",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "mio-extras"
+version = "2.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19"
+dependencies = [
+ "lazycell",
+ "log",
+ "mio",
+ "slab",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "mlua"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f778acf55b288d9e0b81e7189988766499f4ec7f774b0965e30140295221e01d"
+dependencies = [
+ "bstr",
+ "cc",
+ "lazy_static",
+ "lua-src",
+ "luajit-src",
+ "num-traits",
+ "pkg-config",
+]
+
+[[package]]
+name = "naga"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0873deb76cf44b7454fba7b2ba6a89d3de70c08aceffd2c489379b3d9d08e661"
+dependencies = [
+ "bitflags",
+ "fxhash",
+ "log",
+ "num-traits",
+ "spirv_headers",
+ "thiserror",
+]
+
+[[package]]
+name = "native-dialog"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d689b01017db3e350e0e9798d233cca9ad3bf810e7c02b9b55ec06b9ee7dbd8a"
+dependencies = [
+ "cocoa 0.24.0",
+ "dirs-next",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "once_cell",
+ "raw-window-handle",
+ "thiserror",
+ "wfd",
+ "which",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ndk"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73"
+dependencies = [
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-glue"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-macro",
+ "ndk-sys",
+]
+
+[[package]]
+name = "ndk-macro"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d"
+dependencies = [
+ "darling",
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "ndk-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d"
+
+[[package]]
+name = "net2"
+version = "0.2.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "nix"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if 0.1.10",
+ "libc",
+]
+
+[[package]]
+name = "nix"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+]
+
+[[package]]
+name = "nodrop"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
+
+[[package]]
+name = "nom"
+version = "6.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2"
+dependencies = [
+ "memchr",
+ "version_check",
+]
+
+[[package]]
+name = "num-format"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bafe4179722c2894288ee77a9f044f02811c86af699344c498b0840c698a2465"
+dependencies = [
+ "arrayvec 0.4.12",
+ "itoa",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg 1.0.1",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
+dependencies = [
+ "autocfg 1.0.1",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
+dependencies = [
+ "autocfg 1.0.1",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg 1.0.1",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4"
+dependencies = [
+ "derivative",
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+ "objc_exception",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_exception"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c55827317fb4c08822499848a14237d2874d6f139828893017237e7ab93eb386"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
+
+[[package]]
+name = "open"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcea7a30d6b81a2423cc59c43554880feff7b57d12916f231a79f8d6d9470201"
+dependencies = [
+ "pathdiff",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "opener"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13117407ca9d0caf3a0e74f97b490a7e64c0ae3aa90a8b7085544d0c37b6f3ae"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a7907e3bfa08bb85105209cdfcb6c63d109f8f6c1ed6ca318fff5c1853fbc1d"
+dependencies = [
+ "autocfg 1.0.1",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-float"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039f02eb0f69271f26abe3202189275d7aa2258b903cb0281b5de710a2570ff3"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "osmesa-sys"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b"
+dependencies = [
+ "shared_library",
+]
+
+[[package]]
+name = "owned_ttf_parser"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f923fb806c46266c02ab4a5b239735c144bdeda724a50ed058e5226f594cde3"
+dependencies = [
+ "ttf-parser 0.6.2",
+]
+
+[[package]]
+name = "owned_ttf_parser"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60ac8dda2e5cc09bf6480e3b3feff9783db251710c922ae9369a429c51efdeb0"
+dependencies = [
+ "ttf-parser 0.12.3",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d2650c8b62d116c020abd0cea26a4ed96526afda89b1c4ea567131fdefc890"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018"
+dependencies = [
+ "cfg-if 1.0.0",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "path-slash"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cacbb3c4ff353b534a67fb8d7524d00229da4cb1dc8c79f4db96e375ab5b619"
+
+[[package]]
+name = "pathdiff"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877630b3de15c0b64cc52f659345724fbf6bdad9bd9566699fc53688f3c34a34"
+
+[[package]]
+name = "pathfinder_geometry"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3"
+dependencies = [
+ "log",
+ "pathfinder_simd",
+]
+
+[[package]]
+name = "pathfinder_simd"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39fe46acc5503595e5949c17b818714d26fdf9b4920eacf3b2947f0199f4a6ff"
+dependencies = [
+ "rustc_version",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pest"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+dependencies = [
+ "ucd-trie",
+]
+
+[[package]]
+name = "phf"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
+dependencies = [
+ "phf_shared",
+ "rand 0.6.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "png"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "deflate",
+ "miniz_oxide 0.3.7",
+]
+
+[[package]]
+name = "polling"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92341d779fa34ea8437ef4d82d440d5e1ce3f3ff7f824aa64424cd481f9a1f25"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "log",
+ "wepoll-ffi",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+
+[[package]]
+name = "proc-macro-nested"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+dependencies = [
+ "autocfg 0.1.7",
+ "libc",
+ "rand_chacha 0.1.1",
+ "rand_core 0.4.2",
+ "rand_hc 0.1.0",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg",
+ "rand_xorshift",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc 0.2.0",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.3",
+ "rand_hc 0.3.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.7",
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom 0.2.3",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
+dependencies = [
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+dependencies = [
+ "libc",
+ "rand_core 0.4.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+dependencies = [
+ "autocfg 0.1.7",
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "range-alloc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63e935c45e09cc6dcf00d2f0b2d630a58f4095320223d47fc68918722f0538b6"
+
+[[package]]
+name = "raw-window-handle"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "rayon"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
+dependencies = [
+ "autocfg 1.0.1",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "lazy_static",
+ "num_cpus",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
+dependencies = [
+ "getrandom 0.2.3",
+ "redox_syscall",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "retry"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0ee4a654b43dd7e3768be7a1c0fc20e90f0a84b72a60ffb6c11e1cae2545c2e"
+dependencies = [
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "rfd"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1084e570d9ce1890734b33edd8c1a7b7276076f9610fa23a48aa955587da141"
+dependencies = [
+ "block",
+ "dispatch",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "js-sys",
+ "lazy_static",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "raw-window-handle",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dead70b0b5e03e9c814bcb6b01e03e68f7c57a80aa48c72ec92152ab3e818d49"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rusttype"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc7c727aded0be18c5b80c1640eae0ac8e396abf6fa8477d96cb37d18ee5ec59"
+dependencies = [
+ "ab_glyph_rasterizer",
+ "owned_ttf_parser 0.6.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
+dependencies = [
+ "lazy_static",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
+
+[[package]]
+name = "scoped_threadpool"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.127"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.127"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15654ed4ab61726bf918a39cb8d98a2e2995b002387807fa6ba58fdf7f59bb23"
+dependencies = [
+ "dtoa",
+ "linked-hash-map",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "servo-fontconfig"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c"
+dependencies = [
+ "libc",
+ "servo-fontconfig-sys",
+]
+
+[[package]]
+name = "servo-fontconfig-sys"
+version = "5.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388"
+dependencies = [
+ "expat-sys",
+ "freetype-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "shared_library"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11"
+dependencies = [
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "470c5a6397076fae0094aaf06a08e6ba6f37acb77d3b1b91ea92b4d6c8650c39"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
+
+[[package]]
+name = "slab"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527"
+
+[[package]]
+name = "slotmap"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61b40583e0c1bd3100652ba8940939decc8808e7b2a07f4f4606c6a8a40035a"
+
+[[package]]
+name = "sluice"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fa0333a60ff2e3474a6775cc611840c2a55610c831dd366503474c02f1a28f5"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4750c76fd5d3ac95fa3ed80fe667d6a3d8590a960e5b575b98eea93339a80b80"
+dependencies = [
+ "andrew",
+ "bitflags",
+ "calloop",
+ "dlib 0.4.2",
+ "lazy_static",
+ "log",
+ "memmap2 0.1.0",
+ "nix 0.18.0",
+ "wayland-client",
+ "wayland-cursor",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec783683499a2cfc85b6df3d04f83b1907b5cbd98a1aed44667dbdf1eac4e64c"
+dependencies = [
+ "bitflags",
+ "dlib 0.5.0",
+ "lazy_static",
+ "log",
+ "memmap2 0.2.3",
+ "nix 0.20.0",
+ "wayland-client",
+ "wayland-cursor",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "smithay-clipboard"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "986c5b4a7bd4f50d4c51f81f844745535cb488360f9cf63293780b109b9295f3"
+dependencies = [
+ "smithay-client-toolkit 0.14.0",
+ "wayland-client",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "spinning_top"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75adad84ee84b521fb2cca2d4fd0f1dab1d8d026bda3c5bea4ca63b5f9f9293c"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spirv_cross"
+version = "0.22.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ebd49af36be83ecd6290b57147e2a0e26145b832634b17146d934b197ca3713"
+dependencies = [
+ "cc",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "spirv_headers"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f5b132530b1ac069df335577e3581765995cba5a13995cdbbdbc8fb057c532c"
+dependencies = [
+ "bitflags",
+ "num-traits",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "storage-map"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418bb14643aa55a7841d5303f72cf512cfb323b8cc221d51580500a1ca75206c"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "str-buf"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a"
+
+[[package]]
+name = "strfmt"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b278b244ef7aa5852b277f52dd0c6cac3a109919e1f6d699adde63251227a30f"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+
+[[package]]
+name = "structopt"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69b041cdcb67226aca307e6e7be44c8806423d83e018bd662360a93dabce4d71"
+dependencies = [
+ "clap",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7813934aecf5f51a54775e00068c237de98489463968231a51746bbbc03f9c10"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "strum"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b"
+
+[[package]]
+name = "strum_macros"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "svg_fmt"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2"
+
+[[package]]
+name = "syn"
+version = "1.0.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "474aaa926faa1603c40b7885a9eaea29b444d1cb2850cb7c0e37bb1a4182f4fa"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "unicode-xid",
+]
+
+[[package]]
+name = "system-deps"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b"
+dependencies = [
+ "heck",
+ "pkg-config",
+ "strum",
+ "strum_macros",
+ "thiserror",
+ "toml",
+ "version-compare 0.0.10",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d779dc6aeff029314570f666ec83f19df7280bb36ef338442cfa8c604021b80"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "rand 0.8.4",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "thunderdome"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7572415bd688d401c52f6e36f4c8e805b9ae1622619303b9fa835d531db0acae"
+
+[[package]]
+name = "tiff"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437"
+dependencies = [
+ "jpeg-decoder",
+ "miniz_oxide 0.4.4",
+ "weezl",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "timeago"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86bbfe57985713aa17ddf7eb37e9ebe66d7ad9bf3577a4aa0d0f2ac540b3689a"
+dependencies = [
+ "chrono",
+ "isolang",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "toml"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d"
+dependencies = [
+ "cfg-if 1.0.0",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c42e6fa53307c8a17e4ccd4dc81cf5ec38db9209f59b222210375b54ee40d1e2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "ttf-parser"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc"
+
+[[package]]
+name = "ttf-parser"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ae2f58a822f08abdaf668897e96a5656fe72f5a9ce66422423e8849384872e6"
+
+[[package]]
+name = "twox-hash"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59"
+dependencies = [
+ "cfg-if 0.1.10",
+ "rand 0.7.3",
+ "static_assertions",
+]
+
+[[package]]
+name = "typed-arena"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0685c84d5d54d1c26f7d3eb96cd41550adb97baed141a761cf335d3d33bcd0ae"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0"
+dependencies = [
+ "matches",
+]
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "urlencoding"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a1f0175e03a0973cf4afd476bef05c26e228520400eb1fd473ad417b1c00ffb"
+
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd320e1520f94261153e96f7534476ad869c14022aee1e59af7c778075d840ae"
+dependencies = [
+ "ctor",
+ "version_check",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version-compare"
+version = "0.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1"
+
+[[package]]
+name = "version-compare"
+version = "0.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
+
+[[package]]
+name = "version_check"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
+
+[[package]]
+name = "vswhom"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
+dependencies = [
+ "libc",
+ "vswhom-sys",
+]
+
+[[package]]
+name = "vswhom-sys"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc2f5402d3d0e79a069714f7b48e3ecc60be7775a2c049cb839457457a239532"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi 0.3.9",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900"
+dependencies = [
+ "bumpalo 3.7.0",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fba7978c679d53ce2d0ac80c8c175840feb849a161664365d1287b41f2e67f1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f"
+
+[[package]]
+name = "wayland-client"
+version = "0.28.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ab332350e502f159382201394a78e3cc12d0f04db863429260164ea40e0355"
+dependencies = [
+ "bitflags",
+ "downcast-rs",
+ "libc",
+ "nix 0.20.0",
+ "scoped-tls",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.28.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a21817947c7011bbd0a27e11b17b337bfd022e8544b071a2641232047966fbda"
+dependencies = [
+ "nix 0.20.0",
+ "once_cell",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-cursor"
+version = "0.28.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be610084edd1586d45e7bdd275fe345c7c1873598caa464c4fb835dee70fa65a"
+dependencies = [
+ "nix 0.20.0",
+ "wayland-client",
+ "xcursor",
+]
+
+[[package]]
+name = "wayland-egl"
+version = "0.28.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99ba1ab1e18756b23982d36f08856d521d7df45015f404a2d7c4f0b2d2f66956"
+dependencies = [
+ "wayland-client",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.28.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "286620ea4d803bacf61fa087a4242ee316693099ee5a140796aaba02b29f861f"
+dependencies = [
+ "bitflags",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.28.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce923eb2deb61de332d1f356ec7b6bf37094dc5573952e1c8936db03b54c03f1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.28.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d841fca9aed7febf9bed2e9796c49bf58d4152ceda8ac949ebe00868d8f0feb8"
+dependencies = [
+ "dlib 0.5.0",
+ "lazy_static",
+ "pkg-config",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec600b26223b2948cedfde2a0aa6756dcf1fef616f43d7b3097aaf53a6c4d92b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e"
+
+[[package]]
+name = "wepoll-ffi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "wfd"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e713040b67aae5bf1a0ae3e1ebba8cc29ab2b90da9aa1bff6e09031a8a41d7a8"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "wgpu"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "991903e4c9f5b7319732b30a3d0339e27a51ea992cea22769b5f6c7f7076af6d"
+dependencies = [
+ "arrayvec 0.5.2",
+ "futures",
+ "gfx-backend-vulkan",
+ "js-sys",
+ "objc",
+ "parking_lot",
+ "raw-window-handle",
+ "smallvec",
+ "tracing",
+ "typed-arena",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "wgpu-core",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-core"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea487deeae90e06d77eb8e6cef945247774e7c0a0a226d238b31e90633594365"
+dependencies = [
+ "arrayvec 0.5.2",
+ "bitflags",
+ "copyless",
+ "fxhash",
+ "gfx-backend-dx11",
+ "gfx-backend-dx12",
+ "gfx-backend-empty",
+ "gfx-backend-metal",
+ "gfx-backend-vulkan",
+ "gfx-descriptor",
+ "gfx-hal",
+ "gfx-memory",
+ "naga",
+ "parking_lot",
+ "raw-window-handle",
+ "smallvec",
+ "thiserror",
+ "tracing",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-types"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e3529528e608b54838ee618c3923b0f46e6db0334cfc6c42a16cf4ceb3bdb57"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "wgpu_glyph"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27812a263e1298d3330795af62faf5daf5852beb632794acf93e4494234fc9f4"
+dependencies = [
+ "glyph_brush",
+ "log",
+ "wgpu",
+ "zerocopy",
+]
+
+[[package]]
+name = "which"
+version = "4.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea187a8ef279bc014ec368c27a920da2024d2a711109bfbe3440585d5cf27ad9"
+dependencies = [
+ "either",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "window_clipboard"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33a4518b538a45ad39d138a8c3bea8f6b4452174aeb38143d1dd643a3a838ccc"
+dependencies = [
+ "clipboard-win",
+ "clipboard_macos",
+ "clipboard_wayland",
+ "clipboard_x11",
+ "raw-window-handle",
+]
+
+[[package]]
+name = "winit"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da4eda6fce0eb84bd0a33e3c8794eb902e1033d0a1d5a31bc4f19b1b4bbff597"
+dependencies = [
+ "bitflags",
+ "cocoa 0.24.0",
+ "core-foundation 0.9.1",
+ "core-graphics 0.22.2",
+ "core-video-sys",
+ "dispatch",
+ "instant",
+ "lazy_static",
+ "libc",
+ "log",
+ "mio",
+ "mio-extras",
+ "ndk",
+ "ndk-glue",
+ "ndk-sys",
+ "objc",
+ "parking_lot",
+ "percent-encoding",
+ "raw-window-handle",
+ "smithay-client-toolkit 0.12.3",
+ "wayland-client",
+ "winapi 0.3.9",
+ "x11-dl",
+]
+
+[[package]]
+name = "winreg"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16cdb3898397cf7f624c294948669beafaeebc5577d5ec53d0afb76633593597"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "wio"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "x11"
+version = "2.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ecd092546cb16f25783a5451538e73afc8d32e242648d54f4ae5459ba1e773"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.18.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "maybe-uninit",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ffb080b3f2f616242a4eb8e7d325035312127901025b0052bc3154a282d0f19"
+dependencies = [
+ "gethostname",
+ "nix 0.20.0",
+ "winapi 0.3.9",
+ "winapi-wsapoll",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xcursor"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a9a231574ae78801646617cefd13bfe94be907c0e4fa979cfd8b770aa3c5d08"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "xdg"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57"
+
+[[package]]
+name = "xi-unicode"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6580539ad917b7c026220c4b3f2c08d52ce54d6ce0dc491e66002e35388fab46"
+dependencies = [
+ "byteorder",
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d498dbd1fd7beb83c86709ae1c33ca50942889473473d287d56ce4770a18edfb"
+dependencies = [
+ "proc-macro2",
+ "syn",
+ "synstructure",
+]
+
+[[package]]
+name = "zip"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815"
+dependencies = [
+ "byteorder",
+ "bzip2",
+ "crc32fast",
+ "flate2",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "zstd"
+version = "0.6.1+zstd.1.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de55e77f798f205d8561b8fe2ef57abfb6e0ff2abe7fd3c089e119cdb5631a3"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "3.0.1+zstd.1.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1387cabcd938127b30ce78c4bf00b30387dddf704e3f0881dbc4ff62b5566f8c"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "1.4.20+zstd.1.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd5b733d7cf2d9447e2c3e76a5589b4f5e5ae065c22a2bc0b023cbc331b6c8e"
+dependencies = [
+ "cc",
+ "libc",
+]
diff --git a/nixpkgs/pkgs/tools/games/ajour/default.nix b/nixpkgs/pkgs/tools/games/ajour/default.nix
new file mode 100644
index 000000000000..0f90a794987e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/ajour/default.nix
@@ -0,0 +1,97 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, autoPatchelfHook
+, cmake
+, makeWrapper
+, pkg-config
+, python3
+, expat
+, freetype
+, kdialog
+, zenity
+, openssl
+, libglvnd
+, libX11
+, libxcb
+, libXcursor
+, libXi
+, libxkbcommon
+, libXrandr
+, vulkan-loader
+, wayland
+}:
+
+let
+  rpathLibs = [
+    libglvnd
+    libXcursor
+    libXi
+    libxkbcommon
+    libXrandr
+    libX11
+    vulkan-loader
+    wayland
+  ];
+
+in rustPlatform.buildRustPackage rec {
+  pname = "ajour";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "casperstorm";
+    repo = "ajour";
+    rev = version;
+    sha256 = "sha256-oVaNLclU0EVNtxAASE8plXcC+clkwhBeb9pz1vXufV0=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "iced-0.3.0" = "sha256-cPQ0qqcdCMx2agSpAKSvVDBEoF/vUffGg1UkX85KmfY=";
+    };
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    cmake
+    makeWrapper
+    pkg-config
+    python3
+  ];
+
+  buildInputs = [
+    expat
+    freetype
+    openssl
+    libxcb
+    libX11
+    libxkbcommon
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp -r resources/logo $out/share/icons
+    install -Dm444 resources/linux/ajour.desktop -t $out/share/applications
+  '';
+
+  fixupPhase = ''
+    patchelf --set-rpath "${lib.makeLibraryPath rpathLibs}:$(patchelf --print-rpath $out/bin/ajour)" $out/bin/ajour
+    wrapProgram $out/bin/ajour --prefix PATH ":" ${lib.makeBinPath [ zenity kdialog ]}
+  '';
+
+  meta = with lib; {
+    description = "World of Warcraft addon manager written in Rust";
+    longDescription = ''
+      Ajour is a World of Warcraft addon manager written in Rust with a
+      strong focus on performance and simplicity. The project is
+      completely advertisement free, privacy respecting and open source.
+    '';
+    homepage = "https://github.com/casperstorm/ajour";
+    changelog = "https://github.com/casperstorm/ajour/blob/master/CHANGELOG.md";
+    license = licenses.mit;
+    broken = stdenv.isDarwin;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/alice-tools/default.nix b/nixpkgs/pkgs/tools/games/alice-tools/default.nix
new file mode 100644
index 000000000000..07d96cbd03fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/alice-tools/default.nix
@@ -0,0 +1,100 @@
+{ stdenv
+, lib
+, gitUpdater
+, testers
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, bison
+, flex
+, libiconv
+, libpng
+, libjpeg
+, libwebp
+, zlib
+, withGUI ? true
+, qtbase ? null
+, wrapQtAppsHook ? null
+}:
+
+assert withGUI -> qtbase != null && wrapQtAppsHook != null;
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "alice-tools" + lib.optionalString withGUI "-qt${lib.versions.major qtbase.version}";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "nunuhara";
+    repo = "alice-tools";
+    rev = finalAttrs.version;
+    fetchSubmodules = true;
+    hash = "sha256-DazWnBeI5XShkIx41GFZLP3BbE0O8T9uflvKIZUXCHo=";
+  };
+
+  postPatch = lib.optionalString (withGUI && lib.versionAtLeast qtbase.version "6.0") ''
+    # Use Meson's Qt6 module
+    substituteInPlace src/meson.build \
+      --replace qt5 qt6
+
+    # For some reason Meson uses QMake instead of pkg-config detection method for Qt6 on Darwin, which gives wrong search paths for tools
+    export PATH=${qtbase.dev}/libexec:$PATH
+  '';
+
+  mesonFlags = lib.optionals (withGUI && lib.versionAtLeast qtbase.version "6.0") [
+    # Qt6 requires at least C++17, project uses compiler's default, default too old on Darwin & aarch64-linux
+    "-Dcpp_std=c++17"
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    bison
+    flex
+  ] ++ lib.optionals withGUI [
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    libiconv
+    libpng
+    libjpeg
+    libwebp
+    zlib
+  ] ++ lib.optionals withGUI [
+    qtbase
+  ];
+
+  dontWrapQtApps = true;
+
+  # Default install step only installs a static library of a build dependency
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 src/alice $out/bin/alice
+  '' + lib.optionalString withGUI ''
+    install -Dm755 src/galice $out/bin/galice
+    wrapQtApp $out/bin/galice
+  '' + ''
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = gitUpdater { };
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = lib.optionalString withGUI "env QT_QPA_PLATFORM=minimal " + "${lib.getExe finalAttrs.finalPackage} --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "Tools for extracting/editing files from AliceSoft games";
+    homepage = "https://github.com/nunuhara/alice-tools";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ OPNA2608 ];
+    mainProgram = if withGUI then "galice" else "alice";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/games/dualsensectl/default.nix b/nixpkgs/pkgs/tools/games/dualsensectl/default.nix
new file mode 100644
index 000000000000..24c2c2940a7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/dualsensectl/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, dbus
+, hidapi
+, udev
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dualsensectl";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "nowrep";
+    repo = "dualsensectl";
+    rev = "v${version}";
+    hash = "sha256-DrPVzbaLO2NgjNcEFyCs2W+dlbdpBeRX1ZfFenqz7IY=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace "/usr/" "/"
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    dbus
+    hidapi
+    udev
+  ];
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "Linux tool for controlling PS5 DualSense controller";
+    homepage = "https://github.com/nowrep/dualsensectl";
+    license = licenses.gpl2Only;
+    mainProgram = "dualsensectl";
+    maintainers = with maintainers; [ azuwis ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/er-patcher/default.nix b/nixpkgs/pkgs/tools/games/er-patcher/default.nix
new file mode 100644
index 000000000000..084dfdcc1098
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/er-patcher/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, python3
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "er-patcher";
+  version = "1.10.1-1";
+
+  src = fetchFromGitHub {
+    owner = "gurrgur";
+    repo = "er-patcher";
+    rev = "v${version}";
+    sha256 = "sha256-vSCZQBI9Q+7m+TT9pS7R5Fw3BgTxznbFAArJ7J6+tUQ=";
+  };
+
+  buildInputs = [
+    python3
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -Dm755 $src/er-patcher $out/bin/er-patcher
+    patchShebangs $out/bin/er-patcher
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/gurrgur/er-patcher";
+    changelog = "https://github.com/gurrgur/er-patcher/releases/tag/v${version}";
+    description = "Enhancement patches for Elden Ring adding ultrawide support, custom frame rate limits and more";
+    longDescription = ''
+      A tool aimed at enhancing the experience when playing the game on linux through proton or natively on windows.
+      This tool is based on patching the game executable through hex-edits. However it is done in a safe and non-destructive way,
+      that ensures the patched executable is never run with EAC enabled (unless explicity told to do so). Use at your own risk!
+    '';
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+    mainProgram = "er-patcher";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/gamemode/default.nix b/nixpkgs/pkgs/tools/games/gamemode/default.nix
new file mode 100644
index 000000000000..928b9233bccd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/gamemode/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libgamemode32
+, makeWrapper
+, meson
+, ninja
+, pkg-config
+, dbus
+, inih
+, systemd
+, appstream
+, findutils
+, gawk
+, procps
+, nix-update-script
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "gamemode";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "FeralInteractive";
+    repo = "gamemode";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-kusb58nGxYA3U9GbZdW3hLjA3NmHc+af0VT4iGRewBw=";
+  };
+
+  outputs = [ "out" "dev" "lib" "man" ];
+
+  patches = [
+    # Add @libraryPath@ template variable to fix loading the PRELOAD library
+    ./preload-nix-workaround.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace data/gamemoderun \
+      --subst-var-by libraryPath ${lib.makeLibraryPath ([
+        (placeholder "lib")
+      ] ++ lib.optionals (stdenv.hostPlatform.system == "x86_64-linux") [
+        # Support wrapping 32bit applications on a 64bit linux system
+        libgamemode32
+      ])}
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    dbus
+    inih
+    systemd
+  ];
+
+  mesonFlags = [
+    "-Dwith-pam-limits-dir=etc/security/limits.d"
+    "-Dwith-systemd-user-unit-dir=lib/systemd/user"
+    "-Dwith-systemd-group-dir=lib/sysusers.d"
+
+    # The meson builder installs internal executables to $lib/lib by
+    # default, but they should be installed to "$out". It's also more
+    # appropriate to install these executables under a libexec
+    # directory instead of lib.
+    "--libexecdir=libexec"
+  ];
+
+  doCheck = true;
+  nativeCheckInputs = [
+    appstream
+  ];
+
+  postFixup = ''
+    # Add $lib/lib to gamemoded & gamemode-simulate-game's rpath since
+    # they use dlopen to load libgamemode. Can't use makeWrapper since
+    # it would break the security wrapper in the NixOS module.
+    for bin in "$out/bin/gamemoded" "$out/bin/gamemode-simulate-game"; do
+      patchelf --set-rpath "$lib/lib:$(patchelf --print-rpath "$bin")" "$bin"
+    done
+
+    wrapProgram "$out/bin/gamemodelist" \
+      --prefix PATH : ${lib.makeBinPath [
+        findutils
+        gawk
+        procps
+      ]}
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Optimise Linux system performance on demand";
+    homepage = "https://github.com/FeralInteractive/gamemode";
+    changelog = "https://github.com/FeralInteractive/gamemode/blob/${finalAttrs.version}/CHANGELOG.md";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = platforms.linux;
+    mainProgram = "gamemoderun"; # Requires NixOS module to run
+  };
+})
diff --git a/nixpkgs/pkgs/tools/games/gamemode/preload-nix-workaround.patch b/nixpkgs/pkgs/tools/games/gamemode/preload-nix-workaround.patch
new file mode 100644
index 000000000000..06989ff984ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/gamemode/preload-nix-workaround.patch
@@ -0,0 +1,12 @@
+diff --git a/data/gamemoderun b/data/gamemoderun
+index 573b3e4..6f2799e 100755
+--- a/data/gamemoderun
++++ b/data/gamemoderun
+@@ -5,5 +5,6 @@ GAMEMODEAUTO_NAME="libgamemodeauto.so.0"
+ 
+ # ld will find the right path to load the library, including for 32-bit apps.
+ LD_PRELOAD="${GAMEMODEAUTO_NAME}${LD_PRELOAD:+:$LD_PRELOAD}"
++LD_LIBRARY_PATH="@libraryPath@${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
+ 
+-exec env LD_PRELOAD="${LD_PRELOAD}" $GAMEMODERUNEXEC "$@"
++exec env LD_PRELOAD="${LD_PRELOAD}" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" $GAMEMODERUNEXEC "$@"
diff --git a/nixpkgs/pkgs/tools/games/joystickwake/default.nix b/nixpkgs/pkgs/tools/games/joystickwake/default.nix
new file mode 100644
index 000000000000..9b2012857db2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/joystickwake/default.nix
@@ -0,0 +1,31 @@
+{ lib, python3, fetchFromGitHub }:
+python3.pkgs.buildPythonApplication rec {
+  pname = "joystickwake";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "foresto";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-qf1owRdBGyU3q9ZJAzDEcMlnHfeUMSXga4v6QXdxXO0=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ dbus-next pyudev xlib ];
+
+  postInstall = ''
+    # autostart file
+    ln -s $out/${python3.sitePackages}/etc $out/etc
+  '';
+
+  meta = with lib; {
+    description = "A joystick-aware screen waker";
+    longDescription = ''
+      Linux gamers often find themselves unexpectedly staring at a blank screen, because their display server fails to recognize game controllers as input devices, allowing the screen blanker to activate during gameplay.
+      This program works around the problem by temporarily disabling screen blankers when joystick activity is detected.
+    '';
+    homepage = "https://github.com/foresto/joystickwake";
+    maintainers = with maintainers; [ bertof ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/jpsxdec/default.nix b/nixpkgs/pkgs/tools/games/jpsxdec/default.nix
new file mode 100644
index 000000000000..85fd9d65ada1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/jpsxdec/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, ant
+, jdk8 # the build script wants JAVA 8 for compilation
+, jre # version can be >= 8 (latest version by default)
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, canonicalize-jars-hook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "jpsxdec";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "m35";
+    repo = "jpsxdec";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-PZOc5mpnUiUyydWyfZjWuPG4w+tRd6WLJ6YQMqu/95I=";
+  };
+
+  sourceRoot = "${finalAttrs.src.name}/jpsxdec";
+
+  nativeBuildInputs = [
+    ant
+    jdk8
+    makeWrapper
+    copyDesktopItems
+    canonicalize-jars-hook
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    ant release
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/jpsxdec
+    mv _ant/release/{doc,*.jar} $out/share/jpsxdec
+    install -Dm644 src/jpsxdec/gui/icon48.png $out/share/pixmaps/jpsxdec.png
+
+    makeWrapper ${jre}/bin/java $out/bin/jpsxdec \
+        --add-flags "-jar $out/share/jpsxdec/jpsxdec.jar"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "jpsxdec";
+      exec = "jpsxdec";
+      icon = "jpsxdec";
+      desktopName = "jPSXdec";
+      comment = finalAttrs.meta.description;
+      categories = [ "AudioVideo" "Utility" ];
+    })
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/m35/jpsxdec/blob/${finalAttrs.src.rev}/jpsxdec/doc/CHANGES.txt";
+    description = "Cross-platform PlayStation 1 audio and video converter";
+    homepage = "https://jpsxdec.blogspot.com/";
+    license = {
+      url = "https://raw.githubusercontent.com/m35/jpsxdec/${finalAttrs.src.rev}/.github/LICENSE.md";
+      free = true;
+    };
+    mainProgram = "jpsxdec";
+    maintainers = with maintainers; [ zane ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/games/minecraft/amidst/default.nix b/nixpkgs/pkgs/tools/games/minecraft/amidst/default.nix
new file mode 100644
index 000000000000..5e6a79e1cba1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/minecraft/amidst/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "amidst";
+  version = "4.7";
+
+  src = fetchurl { # TODO: Compile from src
+    url = "https://github.com/toolbox4minecraft/amidst/releases/download/v${version}/amidst-v${lib.replaceStrings [ "." ] [ "-" ] version}.jar";
+    sha256 = "sha256-oecRjD7JUuvFym8N/hSE5cbAFQojS6yxOuxpwWRlW9M=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ jre makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib/amidst}
+    cp $src $out/lib/amidst/amidst.jar
+    makeWrapper ${jre}/bin/java $out/bin/amidst \
+      --add-flags "-jar $out/lib/amidst/amidst.jar"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/toolbox4minecraft/amidst";
+    description = "Advanced Minecraft Interface and Data/Structure Tracking";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/minecraft/fabric-installer/default.nix b/nixpkgs/pkgs/tools/games/minecraft/fabric-installer/default.nix
new file mode 100644
index 000000000000..27c70d38a06c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/minecraft/fabric-installer/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "fabric-installer";
+  version = "1.0.0";
+
+  src = fetchurl {
+    url = "https://maven.fabricmc.net/net/fabricmc/fabric-installer/${version}/fabric-installer-${version}.jar";
+    sha256 = "sha256-fX5bHTp/jiCBBpiY6V3HHYS7Olx5yyNcA0iVFzz9NHs=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ jre makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib/fabric}
+
+    cp $src $out/lib/fabric/fabric-installer.jar
+    makeWrapper ${jre}/bin/java $out/bin/fabric-installer \
+      --add-flags "-jar $out/lib/fabric/fabric-installer.jar"
+  '';
+
+  meta = with lib; {
+    homepage = "https://fabricmc.net/";
+    description = "A lightweight, experimental modding toolchain for Minecraft";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/minecraft/mcaselector/default.nix b/nixpkgs/pkgs/tools/games/minecraft/mcaselector/default.nix
new file mode 100644
index 000000000000..395be450f65c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/minecraft/mcaselector/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, makeWrapper
+, jre
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "mcaselector";
+  version = "2.3";
+
+  src = fetchurl {
+    url = "https://github.com/Querz/mcaselector/releases/download/${finalAttrs.version}/mcaselector-${finalAttrs.version}.jar";
+    hash = "sha256-8ivqTqgO6hvEgwnAfnPXuruFGS3s/wD/WKt+5Bg/5Z0=";
+  };
+
+  dontUnpack = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ jre makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,lib/mcaselector}
+    cp $src $out/lib/mcaselector/mcaselector.jar
+    makeWrapper ${jre}/bin/java $out/bin/mcaselector \
+      --add-flags "-jar $out/lib/mcaselector/mcaselector.jar"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Querz/mcaselector";
+    description = "A tool to select chunks from Minecraft worlds for deletion or export";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = [ maintainers.Scrumplex ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/games/minecraft/minecraft-server-hibernation/default.nix b/nixpkgs/pkgs/tools/games/minecraft/minecraft-server-hibernation/default.nix
new file mode 100644
index 000000000000..ff0e7873827b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/minecraft/minecraft-server-hibernation/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "minecraft-server-hibernation";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "gekware";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-b6LeqjIraIasHBpaVgy8esl4NV8rdBrfO7ewgeIocS8=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  checkFlags =
+    let
+      skippedTests = [
+        # Disable tests requiring network access
+        "Test_getPing"
+        "Test_getReqType"
+        "Test_QueryBasic"
+        "Test_QueryFull"
+      ];
+    in
+    [ "-skip" "${builtins.concatStringsSep "|" skippedTests}" ];
+
+  meta = with lib; {
+    description = "Autostart and stop minecraft-server when players join/leave";
+    homepage = "https://github.com/gekware/minecraft-server-hibernation";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ squarepear ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/minecraft/optifine/default.nix b/nixpkgs/pkgs/tools/games/minecraft/optifine/default.nix
new file mode 100644
index 000000000000..e5608559af0d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/minecraft/optifine/default.nix
@@ -0,0 +1,17 @@
+{ recurseIntoAttrs
+, callPackage
+, lib
+}:
+
+# All versions are taken from `version.json` created by `update.py`, and realised with `generic.nix`.
+# The `update.py` is a web scraper script that writes the latest versions into `version.json`.
+
+# The `versions.json` can be automatically updated and committed with a commit summary.
+# To do so, change directory to nixpkgs root, and do:
+# $ nix-shell ./maintainers/scripts/update.nix --argstr package optifinePackages.optifine-latest --argstr commit true
+
+recurseIntoAttrs (
+  lib.mapAttrs
+    (name: value: callPackage ./generic.nix value)
+    (lib.importJSON ./versions.json)
+)
diff --git a/nixpkgs/pkgs/tools/games/minecraft/optifine/generic.nix b/nixpkgs/pkgs/tools/games/minecraft/optifine/generic.nix
new file mode 100644
index 000000000000..3174998cb5f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/minecraft/optifine/generic.nix
@@ -0,0 +1,50 @@
+{ version
+, sha256
+, lib
+, runCommand
+, fetchurl
+, makeWrapper
+, jre
+}:
+
+let
+  mcVersion = builtins.head (lib.splitString "_" version);
+in
+runCommand "optifine-${mcVersion}" {
+  pname = "optifine";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://optifine.net/download?f=OptiFine_${version}.jar";
+    inherit sha256;
+    name = "OptiFine_${version}.jar";
+  };
+
+  nativeBuildInputs = [ jre makeWrapper ];
+
+  passthru.updateScript = {
+    command = [ ./update.py ];
+    supportedFeatures = [ "commit" ];
+  };
+
+  meta = with lib; {
+    homepage = "https://optifine.net/";
+    description = "A Minecraft ${mcVersion} optimization mod";
+    longDescription = ''
+      OptiFine is a Minecraft optimization mod.
+      It allows Minecraft to run faster and look better with full support for HD textures and many configuration options.
+      This is for version ${mcVersion} of Minecraft.
+    '';
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.unix;
+    mainProgram = "optifine";
+  };
+} ''
+  mkdir -p $out/{bin,lib/optifine}
+  cp $src $out/lib/optifine/optifine.jar
+
+  makeWrapper ${jre}/bin/java $out/bin/optifine \
+    --add-flags "-jar $out/lib/optifine/optifine.jar"
+''
diff --git a/nixpkgs/pkgs/tools/games/minecraft/optifine/update.py b/nixpkgs/pkgs/tools/games/minecraft/optifine/update.py
new file mode 100755
index 000000000000..999f688be285
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/minecraft/optifine/update.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=./. -i python3 -p python3.pkgs.requests python3.pkgs.lxml nix
+
+from lxml import html
+import json
+import os.path
+import re
+import requests
+import subprocess
+
+def nix_prefetch_sha256(name):
+    return subprocess.run(['nix-prefetch-url', '--type', 'sha256', 'https://optifine.net/download?f=' + name], capture_output=True, text=True).stdout.strip()
+
+# fetch download page
+sess = requests.session()
+page = sess.get('https://optifine.net/downloads')
+tree = html.fromstring(page.content)
+
+# parse and extract main jar file names
+href = tree.xpath('//tr[@class="downloadLine downloadLineMain"]/td[@class="colMirror"]/a/@href')
+expr = re.compile('(OptiFine_)([0-9.]*)(.*)\.jar')
+result = [ expr.search(x) for x in href ]
+
+# format name, version and hash for each file
+catalogue = {}
+for i, r in enumerate(result):
+    index = r.group(1).lower() + r.group(2).replace('.', '_')
+    version = r.group(2) + r.group(3)
+    catalogue[index] = {
+        "version": version,
+        "sha256": nix_prefetch_sha256(r.group(0))
+    }
+
+# latest version should be the first entry
+if len(catalogue) > 0:
+    catalogue['optifine-latest'] = list(catalogue.values())[0]
+
+# read previous versions
+d = os.path.dirname(os.path.abspath(__file__))
+with open(os.path.join(d, 'versions.json'), 'r') as f:
+    prev = json.load(f)
+
+# `maintainers/scripts/update.py` will extract stdout to write commit message
+# embed the commit message in json and print it
+changes = [ { 'commitMessage': 'optifinePackages: update versions\n\n' } ]
+
+# build a longest common subsequence, natural sorted by keys
+for key, value in sorted({**prev, **catalogue}.items(), key=lambda item: [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', item[0])]):
+    if key not in prev:
+        changes[0]['commitMessage'] += 'optifinePackages.{}: init at {}\n'.format(key, value['version'])
+    elif value['version'] != prev[key]['version']:
+        changes[0]['commitMessage'] += 'optifinePackages.{}: {} -> {}\n'.format(key, prev[key]['version'], value['version'])
+
+# print the changes in stdout
+print(json.dumps(changes))
+
+# write catalogue to file
+with open(os.path.join(d, 'versions.json'), 'w') as f:
+    json.dump(catalogue, f, indent=4)
+    f.write('\n')
diff --git a/nixpkgs/pkgs/tools/games/minecraft/optifine/versions.json b/nixpkgs/pkgs/tools/games/minecraft/optifine/versions.json
new file mode 100644
index 000000000000..47980d6b2618
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/minecraft/optifine/versions.json
@@ -0,0 +1,154 @@
+{
+    "optifine_1_20_1": {
+        "version": "1.20.1_HD_U_I6",
+        "sha256": "0l66pz4hy42qxv9a2jlq1hd7jiiysnv54g9gk1dfbwpd19kwnrqb"
+    },
+    "optifine_1_19_4": {
+        "version": "1.19.4_HD_U_I4",
+        "sha256": "0smgr2mxk8p7v7xzklj34kzqs36bl1kbb94lq41i1ks1wg50n09c"
+    },
+    "optifine_1_19_3": {
+        "version": "1.19.3_HD_U_I3",
+        "sha256": "15xgw12sacq6bqssm1szmmg5gac24rsah2plwky67hi67bj894iv"
+    },
+    "optifine_1_19_2": {
+        "version": "1.19.2_HD_U_I2",
+        "sha256": "0klhhzmr4l5alkyq8q1ishzach2jip5y6d6d4jk9whcbhia33sxg"
+    },
+    "optifine_1_19_1": {
+        "version": "1.19.1_HD_U_H9",
+        "sha256": "1p5a3i383ca2l3snsm36dyngfz9a1f9xffaxk439149h0i2d0nlj"
+    },
+    "optifine_1_19": {
+        "version": "1.19_HD_U_H9",
+        "sha256": "19zjvwg0sr6279plj5qxj7hdlw9w8q3qd78dg6911m356z6g87ah"
+    },
+    "optifine_1_18_2": {
+        "version": "1.18.2_HD_U_H9",
+        "sha256": "0lf16i7hjyral3704kzyhbhrc01crbpzaicsl4cyj6qx15z0lwxx"
+    },
+    "optifine_1_18_1": {
+        "version": "1.18.1_HD_U_H6",
+        "sha256": "0nh8ls306rs1qcbyibb6idapws4z5cyaqrgh9ipvm1vcwvxxj9ys"
+    },
+    "optifine_1_18": {
+        "version": "1.18_HD_U_H3",
+        "sha256": "11zqiwmqj4ja6l87acwzs7cnabsgn2x36510hap8gj139l3vbrvb"
+    },
+    "optifine_1_17_1": {
+        "version": "1.17.1_HD_U_H1",
+        "sha256": "14zp7jq0g9krq4ma4s5an2ncpyc2ipcxfcfhb0zqc7f8nvipnyqw"
+    },
+    "optifine_1_16_5": {
+        "version": "1.16.5_HD_U_G8",
+        "sha256": "0ks91d6n4vkgb5ykdrc67br2c69nqjr0xhp7rrkybg24xn8bqxiw"
+    },
+    "optifine_1_16_4": {
+        "version": "1.16.4_HD_U_G7",
+        "sha256": "063zdfmhzq5jgfdy27c8b0008sribl8rbvfxa7nkk86qwpvz6v8h"
+    },
+    "optifine_1_16_3": {
+        "version": "1.16.3_HD_U_G5",
+        "sha256": "0pipr77jrva5wrllil40myansyrxxvcckxlvf4k2vhqf2g1mfigl"
+    },
+    "optifine_1_16_2": {
+        "version": "1.16.2_HD_U_G5",
+        "sha256": "1iav08qqk7wb43ars9nilbgm4ybdi02pd0ahb0xy7clkxvlnjcx2"
+    },
+    "optifine_1_16_1": {
+        "version": "1.16.1_HD_U_G2",
+        "sha256": "1gwbxv3dx82lxkbp9gaf1nqczkcxdzlfsspxlrv6gcn7w8vvwf5v"
+    },
+    "optifine_1_15_2": {
+        "version": "1.15.2_HD_U_G6",
+        "sha256": "10qz6y3h80s56wsk3f5wwg52d0d7mkklhhhvgp6y84zlzq6xdbq4"
+    },
+    "optifine_1_14_4": {
+        "version": "1.14.4_HD_U_G5",
+        "sha256": "1fw9adbixl7942mkr48hl0aar2fwzgsh2js68c06xj5s0fyvkvi3"
+    },
+    "optifine_1_14_3": {
+        "version": "1.14.3_HD_U_F2",
+        "sha256": "00wys29pmgfsc4j2jy2mpfl493vy52jdxprxl92hcg2xz77ipqjh"
+    },
+    "optifine_1_14_2": {
+        "version": "1.14.2_HD_U_F1",
+        "sha256": "0645d38z8llnnv546zfkflqp441kxvf8vd0l3zjsls81w3bpc6n8"
+    },
+    "optifine_1_13_2": {
+        "version": "1.13.2_HD_U_G5",
+        "sha256": "0wdvaxpvbnpfpqgb8v1r8br56pkcn7kvgsi29vcxcg8zvyi10ddj"
+    },
+    "optifine_1_13_1": {
+        "version": "1.13.1_HD_U_E4",
+        "sha256": "0r5x703pgwi8vakii0nhlij7j24zkq1xvyscqd8lv6w3yq7xd5b3"
+    },
+    "optifine_1_13": {
+        "version": "1.13_HD_U_E4",
+        "sha256": "0x8ynnm9dglzrajb3ffmvmwkx6ipzs306qadwhcp0ah148wiz1l3"
+    },
+    "optifine_1_12_2": {
+        "version": "1.12.2_HD_U_G5",
+        "sha256": "07i7p8wsh22xx31g22kk5vxwwy4sgjp0ha8d5mzvkzkifxwhc01v"
+    },
+    "optifine_1_12_1": {
+        "version": "1.12.1_HD_U_G5",
+        "sha256": "1jn02mknpf622q6i942v63x3kzs9q7n394x188nfh508rn9fpipn"
+    },
+    "optifine_1_12": {
+        "version": "1.12_HD_U_G5",
+        "sha256": "1slbz0ss670gwlzv4dw362cc5wlpxjv81004n04vcsip8l491pdb"
+    },
+    "optifine_1_11_2": {
+        "version": "1.11.2_HD_U_G5",
+        "sha256": "1zlap4j3qzb00a9qxk9ww1cgmqaiznblahj19p1r4yrrsc3d9hnn"
+    },
+    "optifine_1_11": {
+        "version": "1.11_HD_U_G5",
+        "sha256": "1azgnsqbl71087i83dn6wyb7qdz2wa42f04cabnlhmdcmdd4kcsj"
+    },
+    "optifine_1_10_2": {
+        "version": "1.10.2_HD_U_I5",
+        "sha256": "0m05xqcmh8kaqvlb57yz0mslf22wr89wamlf1q1cma4fn385i57f"
+    },
+    "optifine_1_10": {
+        "version": "1.10_HD_U_I5",
+        "sha256": "1kd502h6ikxmyj99bj7d41j7z237yipn1hxhb3hsff37s5lar8x0"
+    },
+    "optifine_1_9_4": {
+        "version": "1.9.4_HD_U_I5",
+        "sha256": "08pb3x0c898pgsciigvy0q9j25arlyqzira4qmcz75qkzlhv3qxp"
+    },
+    "optifine_1_9_2": {
+        "version": "1.9.2_HD_U_E3",
+        "sha256": "1bgyxhs554wswavidsnmm6mahngndd5bc98jma6wgi7g5qrngcrp"
+    },
+    "optifine_1_9_0": {
+        "version": "1.9.0_HD_U_I5",
+        "sha256": "1nyiv91hm9765244xa6mh9cf62l329ppm8rdib35lb3ghgasid9n"
+    },
+    "optifine_1_8_9": {
+        "version": "1.8.9_HD_U_M5",
+        "sha256": "1i5j4jvsd1zkly6pf8zs71gga61z533bq5y8gmfax9pwf057cf97"
+    },
+    "optifine_1_8_8": {
+        "version": "1.8.8_HD_U_I7",
+        "sha256": "0x4aambs2kww9lanm4kp2jw4h3cwk25fa6xwsm9r7a1jv42jlyay"
+    },
+    "optifine_1_8_0": {
+        "version": "1.8.0_HD_U_I7",
+        "sha256": "1ig013l61f7yj061ncnvmjsp9j2nd8fy8j03f8ry045d0s7idnfk"
+    },
+    "optifine_1_7_10": {
+        "version": "1.7.10_HD_U_E7",
+        "sha256": "1d7s8ip697xnlpap89qrr794f307kwv5y44qyj8ha6h0vs1rvkcb"
+    },
+    "optifine_1_7_2": {
+        "version": "1.7.2_HD_U_F7",
+        "sha256": "18lzyh639mi7r2hzwnmxv0a6v1ay7dk9bzasvwff82dxq0y9zi7m"
+    },
+    "optifine-latest": {
+        "version": "1.20.1_HD_U_I6",
+        "sha256": "0l66pz4hy42qxv9a2jlq1hd7jiiysnv54g9gk1dfbwpd19kwnrqb"
+    }
+}
diff --git a/nixpkgs/pkgs/tools/games/minecraft/packwiz/default.nix b/nixpkgs/pkgs/tools/games/minecraft/packwiz/default.nix
new file mode 100644
index 000000000000..11d4774f0150
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/minecraft/packwiz/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule {
+  pname = "packwiz";
+  version = "unstable-2023-08-28";
+
+  src = fetchFromGitHub {
+    owner = "packwiz";
+    repo = "packwiz";
+    rev = "b451a9b034fd414a2a8d9b306bb8e29fb25ad245";
+    sha256 = "sha256-Ly5z+h11yyhIgzhohjk2g8hQNEPkxxag9m7XYmTMfEQ=";
+  };
+
+  vendorHash = "sha256-yL5pWbVqf6mEpgYsItLnv8nwSmoMP+SE0rX/s7u2vCg=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd packwiz \
+      --bash <($out/bin/packwiz completion bash) \
+      --fish <($out/bin/packwiz completion fish) \
+      --zsh <($out/bin/packwiz completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A command line tool for editing and distributing Minecraft modpacks, using a git-friendly TOML format";
+    homepage = "https://packwiz.infra.link/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ infinidoge ];
+    mainProgram = "packwiz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/mymcplus/default.nix b/nixpkgs/pkgs/tools/games/mymcplus/default.nix
new file mode 100644
index 000000000000..0e5abb1e8994
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/mymcplus/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchFromSourcehut
+, pythonPackages
+, wrapGAppsHook
+}:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "mymcplus";
+  version = "3.0.5";
+
+  src = fetchFromSourcehut {
+    owner = "~thestr4ng3r";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-GFReOgM8zi5oyePpJm5HxtizUVqqUUINTRwyG/LGWB8=";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = with pythonPackages; [
+    pyopengl
+    wxpython
+  ];
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~thestr4ng3r/mymcplus";
+    description = "A PlayStation 2 memory card manager";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/opentracker/default.nix b/nixpkgs/pkgs/tools/games/opentracker/default.nix
new file mode 100644
index 000000000000..6bb5fc8ff207
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/opentracker/default.nix
@@ -0,0 +1,87 @@
+{
+  lib,
+  stdenv,
+  buildDotnetModule,
+  fetchFromGitHub,
+  autoPatchelfHook,
+  wrapGAppsHook,
+  dotnetCorePackages,
+  fontconfig,
+  gtk3,
+  libunwind,
+  openssl,
+  xinput,
+  xorg,
+}:
+buildDotnetModule rec {
+  pname = "opentracker";
+  version = "1.8.5";
+
+  src = fetchFromGitHub {
+    owner = "trippsc2";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha512-nWkPgVYdnBJibyJRdLPe3O3RioDPbzumSritRejmr4CeiPb7aUTON7HjivcV/GKor1guEYu+TJ+QxYrqO/eppg==";
+  };
+
+  patches = [./remove-project.patch];
+
+  dotnet-runtime = dotnetCorePackages.runtime_6_0;
+
+  nugetDeps = ./deps.nix;
+
+  projectFile = "OpenTracker.sln";
+  executables = ["OpenTracker"];
+
+  doCheck = true;
+  disabledTests = [
+    "OpenTracker.UnitTests.Models.Nodes.Factories.SLightWorldConnectionFactoryTests.GetNodeConnections_ShouldReturnExpectedValue"
+    "OpenTracker.UnitTests.Models.Sections.Factories.ItemSectionFactoryTests.GetItemSection_ShouldReturnExpected"
+  ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    stdenv.cc.cc.lib
+    fontconfig
+    gtk3
+    libunwind
+  ];
+
+  runtimeDeps =
+    [
+      gtk3
+      openssl
+      xinput
+    ]
+    ++ (with xorg; [
+      libICE
+      libSM
+      libX11
+      libXi
+    ]);
+
+  # Attempts to patchelf unneeded SOs
+  autoPatchelfIgnoreMissingDeps = [
+    "libc.musl-x86_64.so.1"
+    "libintl.so.8"
+  ];
+
+  meta = with lib; {
+    description = "A tracking application for A Link to the Past Randomizer";
+    homepage = "https://github.com/trippsc2/OpenTracker";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      # deps
+      binaryBytecode
+      binaryNativeCode
+    ];
+    license = licenses.mit;
+    maintainers = [maintainers.ivar];
+    mainProgram = "OpenTracker";
+    platforms = ["x86_64-linux"];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/opentracker/deps.nix b/nixpkgs/pkgs/tools/games/opentracker/deps.nix
new file mode 100644
index 000000000000..b6185c4c34b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/opentracker/deps.nix
@@ -0,0 +1,215 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Autofac"; version = "6.3.0"; sha256 = "0zg0lsqzb8hh7l97mfd2z3fxdab86sbmxkaprzi41v0hs1x3jd9b"; })
+  (fetchNuGet { pname = "Avalonia"; version = "0.10.12"; sha256 = "1hb6v8sm7gd8aswdv0slnk8cvvxs5ac82knc3pzvxj0js2n4lnv2"; })
+  (fetchNuGet { pname = "Avalonia.Angle.Windows.Natives"; version = "2.1.0.2020091801"; sha256 = "04jm83cz7vkhhr6n2c9hya2k8i2462xbf6np4bidk55as0jdq43a"; })
+  (fetchNuGet { pname = "Avalonia.Controls.DataGrid"; version = "0.10.12"; sha256 = "1r8qi0kgd9rqbacnriy5sa684d12vxi45a6n2a4w7ydxr97zv5nm"; })
+  (fetchNuGet { pname = "Avalonia.Desktop"; version = "0.10.12"; sha256 = "17ng7vvmynnmll7fb8zkjlhcn0ksg7p4v6kw207yq72acgvyn96g"; })
+  (fetchNuGet { pname = "Avalonia.Diagnostics"; version = "0.10.12"; sha256 = "17skzs05iv5ljgnqm36zrbhrh3x20xf5hgni543i02zffj2015ki"; })
+  (fetchNuGet { pname = "Avalonia.FreeDesktop"; version = "0.10.12"; sha256 = "00920pdiv8wlpym0s80nz8lfmw515ikrr5f2a6sr4kmjwfd9cffj"; })
+  (fetchNuGet { pname = "Avalonia.Markup.Xaml.Loader"; version = "0.10.12"; sha256 = "18glwqn4a8p3rz5zsp1xyrm5xwv853056nykf7mdcv1lglh74fsm"; })
+  (fetchNuGet { pname = "Avalonia.Native"; version = "0.10.12"; sha256 = "1j6gxg0n55923rbw2p7z6yh27i81xrzpqarb268d3hd6hgjycwc1"; })
+  (fetchNuGet { pname = "Avalonia.ReactiveUI"; version = "0.10.12"; sha256 = "04ga7f8bmz3bqp4dsc4fzrphfq61zf62hlz4nbazf1igx0jzdygy"; })
+  (fetchNuGet { pname = "Avalonia.Remote.Protocol"; version = "0.10.12"; sha256 = "0ghrb8yf4qahwlpa2appk7q0m0n01q0s65nx1xj1plpi4jr6vvw2"; })
+  (fetchNuGet { pname = "Avalonia.Skia"; version = "0.10.12"; sha256 = "1qj0sw4780za3p6hbwvx1p3b6px3s5vp3ml3vvyak1bajvifz969"; })
+  (fetchNuGet { pname = "Avalonia.Win32"; version = "0.10.12"; sha256 = "1af174qca95gxf04zhxm716mi1dazfz7k3995i1nyaz7hygs3p04"; })
+  (fetchNuGet { pname = "Avalonia.X11"; version = "0.10.12"; sha256 = "1jjg4lhg0a95laffwm7imgs92q06whrfkaszm7svgfv1ryazv71q"; })
+  (fetchNuGet { pname = "Avalonia.Xaml.Behaviors"; version = "0.10.12"; sha256 = "0j897knwxpl6sss8v2wrhy4bw4nw4jqc04n8b8d4s76jaqcr3z2h"; })
+  (fetchNuGet { pname = "Avalonia.Xaml.Interactions"; version = "0.10.12"; sha256 = "0nyqg66sg7garc2k729k3dqixbb3asvsjd2kxympfx9q6xyz6vrh"; })
+  (fetchNuGet { pname = "Avalonia.Xaml.Interactivity"; version = "0.10.12"; sha256 = "13qbmz39bf29wvq82b1irci8y50fjhhj563cdwd235nm633sixqb"; })
+  (fetchNuGet { pname = "Castle.Core"; version = "4.4.1"; sha256 = "13dja1jxl5zwhi0ghkgvgmqdrixn57f9hk52jy5vpaaakzr550r7"; })
+  (fetchNuGet { pname = "Citrus.Avalonia"; version = "1.6.1"; sha256 = "1hl98dmgmm6ml5gl70v7vg577n7vn6bjxaq82sgnql5g623pg18x"; })
+  (fetchNuGet { pname = "DotNet.Bundle"; version = "0.9.13"; sha256 = "0awzvk62hgszm9b8ar87y862aj8nlm77d7hgfmp84mxny0ag03jl"; })
+  (fetchNuGet { pname = "DynamicData"; version = "7.4.11"; sha256 = "1vrrwkmqrdzr4ncjihfzik5ykmy1234iyp2q5qk8spz6y0gwq2h8"; })
+  (fetchNuGet { pname = "DynamicData"; version = "7.4.9"; sha256 = "0ssgh42fi5m6xyw36f4km04ls9nq4w8cpbck8gh7g8n3ixz05rrw"; })
+  (fetchNuGet { pname = "ExpectedObjects"; version = "3.5.4"; sha256 = "1mklg6dx8biaaf9jxp09rddsw66l42r4fpsgnmm6szn6fj2n888k"; })
+  (fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2-preview.178"; sha256 = "1p5nwzl7jpypsd6df7hgcf47r977anjlyv21wacmalsj6lvdgnvn"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Linux"; version = "2.8.2-preview.178"; sha256 = "1402ylkxbgcnagcarqlfvg4gppy2pqs3bmin4n5mphva1g7bqb2p"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.macOS"; version = "2.8.2-preview.178"; sha256 = "0p8miaclnbfpacc1jaqxwfg0yfx9byagi4j4k91d9621vd19i8b2"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.WebAssembly"; version = "2.8.2-preview.178"; sha256 = "1n9jay9sji04xly6n8bzz4591fgy8i65p21a8mv5ip9lsyj1c320"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2-preview.178"; sha256 = "1r5syii96wv8q558cvsqw3lr10cdw6677lyiy82p6i3if51v3mr7"; })
+  (fetchNuGet { pname = "JetBrains.Annotations"; version = "2021.3.0"; sha256 = "01ssylllbwpana2w3iybi533zlvcsbhzjc8kr0g4kg307kjbfn8v"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.3.3"; sha256 = "09m4cpry8ivm9ga1abrxmvw16sslxhy2k5sl14zckhqb1j164im6"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "4.0.1"; sha256 = "0axjv1nhk1z9d4c51d9yxdp09l8yqqnqaifhqcwnxnv0r4y5cka9"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "4.0.1"; sha256 = "1h6jfifg7pw2vacpdds4v4jqnaydg9b108irf315wzx6rh8yv9cb"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "4.0.1"; sha256 = "0ncbld51ja7hp6p2cabw0dx4km2syiz0z58al62h21cpbjfnls5p"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.NetAnalyzers"; version = "6.0.0"; sha256 = "06zy947m5lrbwb684g42ijb07r5jsqycvfnphc6cqfdrfnzqv6k9"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "4.0.1"; sha256 = "0zhrlk30js7dp6i76zd7zilaxq26gwsl3pk85p919039786sqs9p"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.0.0"; sha256 = "18gdbsqf6i79ld4ikqr4jhx9ndsggm865b5xj1xmnmgg12ydp19a"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.0.0"; sha256 = "0bknyf5kig5icwjxls7pcn51x2b2qf91dz9qv67fl70v6cczaz2r"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "6.0.1"; sha256 = "13v33cm88px9wymlxidzgy2ljaq33h1xna3lgdggmy7w4bbdkddh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "5.0.0"; sha256 = "0z3qyv7qal5irvabc8lmkh58zsl42mrzd1i0sssvzhv4q4kl3cg6"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.0.0"; sha256 = "1bh5scbvl6ndldqv20sl34h4y257irm9ziv2wyfc3hka6912fhn7"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.0.0"; sha256 = "06mn31cgpp7d8lwdyjanh89prc66j37dchn74vrd9s588rq0y70r"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; })
+  (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 = "NSubstitute"; version = "4.3.0"; sha256 = "026kx6fab9r1a0m8p9hlznp73qhh44k4i0352szvchsis6vlj9gm"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.0.0"; sha256 = "18ijvmj13cwjdrrm52c8fpq021531zaz4mj4b4zapxaqzzxf2qjr"; })
+  (fetchNuGet { pname = "Packaging.Targets"; version = "0.1.220"; sha256 = "0ci4jkkqk70vwzf2sgc44a8dap70afp6yhvj967shy7anffxb511"; })
+  (fetchNuGet { pname = "ReactiveUI"; version = "13.2.10"; sha256 = "0x4pk45wipzsjzkv23as8l0sdds665l9404gaix8c0z2n24s76gg"; })
+  (fetchNuGet { pname = "ReactiveUI"; version = "17.1.17"; sha256 = "1v0w88mk8bh68lcj968q61zyx6l07himild605c2xi5lb6a42z71"; })
+  (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.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (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 = "Serilog"; version = "2.10.0"; sha256 = "08bih205i632ywryn3zxkhb15dwgyaxbhmm1z3b5nmby9fb25k7v"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Debug"; version = "2.0.0"; sha256 = "1i7j870l47gan3gpnnlzkccn5lbm7518cnkp25a3g5gp9l0dbwpw"; })
+  (fetchNuGet { pname = "Serilog.Sinks.File"; version = "5.0.0"; sha256 = "097rngmgcrdfy7jy8j7dq3xaq2qky8ijwg0ws6bfv5lx0f3vvb0q"; })
+  (fetchNuGet { pname = "SkiaSharp"; version = "2.88.0-preview.178"; sha256 = "062g14s6b2bixanpwihj3asm3jwvfw15mhvzqv6901afrlgzx4nk"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Linux"; version = "2.88.0-preview.178"; sha256 = "07kga1j51l3l302nvf537zg5clf6rflinjy0xd6i06cmhpkf3ksw"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.macOS"; version = "2.88.0-preview.178"; sha256 = "14p95nxccs6yq4rn2h9zbb60k0232k6349zdpy31jcfr6gc99cgi"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.WebAssembly"; version = "2.88.0-preview.178"; sha256 = "09jmcg5k1vpsal8jfs90mwv0isf2y5wq3h4hd77rv6vffn5ic4sm"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Win32"; version = "2.88.0-preview.178"; sha256 = "0ficil702lv3fvwpngbqh5l85i05l5jafzyh4jprzshr2qbnd8nl"; })
+  (fetchNuGet { pname = "Splat"; version = "10.0.1"; sha256 = "18fzrn7xwjzxj4v3drs8djd3yf14bnq5n9n8vdnwfa1zk5jqpsb9"; })
+  (fetchNuGet { pname = "Splat"; version = "14.1.17"; sha256 = "1akhj04sbxhhfj6zdlr5c0sh696747b0x46g3ayv4yl15kwq6pz5"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; })
+  (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.Annotations"; version = "4.5.0"; sha256 = "1jj6f6g87k0iwsgmg3xmnn67a14mq88np0l1ys5zkxhkvbc8976p"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; })
+  (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.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "6.0.0"; sha256 = "0rrihs9lnb1h6x4h0hn6kgfnh58qq7hx8qq99gh6fayx4dcnx3s5"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (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.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; })
+  (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.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (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.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (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.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (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.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Reactive"; version = "5.0.0"; sha256 = "1lafmpnadhiwxyd543kraxa3jfdpm6ipblxrjlibym9b1ykpr5ik"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (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"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; })
+  (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.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "5.0.0"; sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (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.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.1"; sha256 = "03ch4d2acf6q037a4njxpll2kkx3dwzlg07yxr4z5m6j1kqgmm27"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.6.0"; sha256 = "0xmzi2gpbmgyfr75p24rqqsba3cmrqgmcv45lsqp5amgrdwd0f0m"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (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.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (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.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.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "6.0.0"; sha256 = "0gm2kiz2ndm9xyzxgi0jhazgwslcs427waxgfa30m7yqll1kcrww"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (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.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (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.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.5.0"; sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
+  (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.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
+  (fetchNuGet { pname = "ThemeEditor.Controls.ColorPicker"; version = "0.10.12"; sha256 = "17kh28fkywqmz5yams8wzr50ihkv52y24gk8bz9fxl6kfzmgk0ky"; })
+  (fetchNuGet { pname = "Tmds.DBus"; version = "0.10.1"; sha256 = "1wafa009cjj1rziias2n00ap0g8kdg2iig5sjlrxj2kld24lgbli"; })
+  (fetchNuGet { pname = "WebSocketSharp-netstandard"; version = "1.0.1"; sha256 = "0q89wiqpli72333zsa04d1vzq9xj0583hn5mih9sdd84myksz5b0"; })
+  (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.console"; version = "2.4.1"; sha256 = "13ykz9anhz72xc4q6byvdfwrp54hlcbl6zsfapwfhnzyvfgb9w13"; })
+  (fetchNuGet { pname = "xunit.runner.visualstudio"; version = "2.4.3"; sha256 = "0j1d0rbcm7pp6dypi61sjxp8l22sv261252z55b243l39jgv2rp3"; })
+]
diff --git a/nixpkgs/pkgs/tools/games/opentracker/remove-project.patch b/nixpkgs/pkgs/tools/games/opentracker/remove-project.patch
new file mode 100644
index 000000000000..22a2068512e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/opentracker/remove-project.patch
@@ -0,0 +1,14 @@
+diff --git a/OpenTracker.sln b/OpenTracker.sln
+index 0a8c438..77124e1 100644
+--- a/OpenTracker.sln
++++ b/OpenTracker.sln
+@@ -4,9 +4,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
+ VisualStudioVersion = 16.0.29806.167
+ MinimumVisualStudioVersion = 10.0.40219.1
+ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTracker", "OpenTracker\OpenTracker.csproj", "{9D32A24F-7FF0-4632-B663-5AD2D64A6C87}"
+-	ProjectSection(ProjectDependencies) = postProject
+-		{732A9A56-32B4-4149-B3A5-F2A4F48293D3} = {732A9A56-32B4-4149-B3A5-F2A4F48293D3}
+-	EndProjectSection
+ EndProject
+ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTracker.Models", "OpenTracker.Models\OpenTracker.Models.csproj", "{5DB05A1F-56E3-4035-8898-5CFB22DB3568}"
+ EndProject
diff --git a/nixpkgs/pkgs/tools/games/pokefinder/default.nix b/nixpkgs/pkgs/tools/games/pokefinder/default.nix
new file mode 100644
index 000000000000..16439309b413
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/pokefinder/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, copyDesktopItems
+, makeDesktopItem
+, fetchFromGitHub
+, cmake
+, qtbase
+, qttools
+, qtwayland
+, imagemagick
+, wrapQtAppsHook
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pokefinder";
+  version = "4.1.2";
+
+  src = fetchFromGitHub {
+    owner = "Admiral-Fish";
+    repo = "PokeFinder";
+    rev = "v${version}";
+    sha256 = "ps8F6IcbCNybrZ02tbLNyB3YEvKlcYgCpv5Em7Riv+Q=";
+    fetchSubmodules = true;
+  };
+
+  patches = [ ./set-desktop-file-name.patch ];
+
+  postPatch = ''
+    patchShebangs Source/Core/Resources/
+  '';
+
+  installPhase = ''
+    runHook preInstall
+  '' + lib.optionalString (stdenv.isDarwin) ''
+    mkdir -p $out/Applications
+    cp -R Source/PokeFinder.app $out/Applications
+  '' + lib.optionalString (!stdenv.isDarwin) ''
+    install -D Source/PokeFinder $out/bin/PokeFinder
+    mkdir -p $out/share/pixmaps
+    convert "$src/Source/Form/Images/pokefinder.ico[-1]" $out/share/pixmaps/pokefinder.png
+  '' + ''
+    runHook postInstall
+  '';
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ] ++ lib.optionals (!stdenv.isDarwin) [ copyDesktopItems imagemagick ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "pokefinder";
+      exec = "PokeFinder";
+      icon = "pokefinder";
+      comment = "Cross platform Pokémon RNG tool";
+      desktopName = "PokéFinder";
+      categories = [ "Utility" ];
+    })
+  ];
+
+  buildInputs = [ qtbase qttools ]
+    ++ lib.optionals stdenv.isLinux [ qtwayland ];
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/Admiral-Fish/PokeFinder";
+    description = "Cross platform Pokémon RNG tool";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ leo60228 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/pokefinder/set-desktop-file-name.patch b/nixpkgs/pkgs/tools/games/pokefinder/set-desktop-file-name.patch
new file mode 100644
index 000000000000..e22046f6fd0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/pokefinder/set-desktop-file-name.patch
@@ -0,0 +1,12 @@
+diff --git a/Source/main.cpp b/Source/main.cpp
+index 3e58a381..2e7e4a86 100644
+--- a/Source/main.cpp
++++ b/Source/main.cpp
+@@ -69,6 +69,7 @@ int main(int argc, char *argv[])
+ {
+     QApplication a(argc, argv);
+     a.setApplicationName("PokeFinder");
++    a.setDesktopFileName("pokefinder");
+     a.setOrganizationName("PokeFinder Team");
+ 
+     Q_INIT_RESOURCE(resources);
diff --git a/nixpkgs/pkgs/tools/games/ps3-disc-dumper/default.nix b/nixpkgs/pkgs/tools/games/ps3-disc-dumper/default.nix
new file mode 100644
index 000000000000..e097ebd93d2b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/ps3-disc-dumper/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildDotnetModule
+, fetchFromGitHub
+, zlib
+, openssl
+}:
+
+buildDotnetModule rec {
+  pname = "ps3-disc-dumper";
+  version = "3.2.3";
+
+  src = fetchFromGitHub {
+    owner = "13xforever";
+    repo = "ps3-disc-dumper";
+    rev = "v${version}";
+    sha256 = "sha256-m3TS9H6cbEAHn6PvYQDMzdKdnOnDSM4lxCTdHBCXLV4=";
+  };
+
+  selfContainedBuild = true;
+
+  projectFile = "UI.Console/UI.Console.csproj";
+  nugetDeps = ./deps.nix;
+
+  runtimeDeps = [
+    zlib
+    openssl
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/13xforever/ps3-disc-dumper";
+    description = "A handy utility to make decrypted PS3 disc dumps";
+    license = licenses.mit;
+    maintainers = with maintainers; [ evanjs ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "ps3-disc-dumper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/ps3-disc-dumper/deps.nix b/nixpkgs/pkgs/tools/games/ps3-disc-dumper/deps.nix
new file mode 100644
index 000000000000..d62b17a828b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/ps3-disc-dumper/deps.nix
@@ -0,0 +1,244 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Crc32.NET"; version = "1.2.0"; sha256 = "0qaj3192k1vfji87zf50rhydn5mrzyzybrs2k4v7ap29k8i0vi5h"; })
+  (fetchNuGet { pname = "DiscUtils.Core"; version = "0.16.13"; sha256 = "1q5pbs7x6bbvsqcz363fj7c0gxdg3ay1r9a83f7yh137rmaprj8h"; })
+  (fetchNuGet { pname = "DiscUtils.Iso9660"; version = "0.16.13"; sha256 = "0vdy9l8kvbf76q7ssgsq3xgkrp1wdbf8a0h4d27371zapg111h54"; })
+  (fetchNuGet { pname = "DiscUtils.OpticalDisk"; version = "0.16.13"; sha256 = "1h0s9msvxqcivkkr0mpk357q3yl4n7pfa2w8ayyv3iif0m6ha1xf"; })
+  (fetchNuGet { pname = "DiscUtils.Streams"; version = "0.16.13"; sha256 = "03wzvxm3k6vld6g0hk5r2qyhckr6rg4885s7hf5z2cvs1qfas9qd"; })
+  (fetchNuGet { pname = "DiscUtils.Udf"; version = "0.16.13"; sha256 = "0q4kx4p4x2rj41i7rbxfxih62aaji9vfs1qmdrbpq7zd0i552jyc"; })
+  (fetchNuGet { pname = "DotNetZip"; version = "1.16.0"; sha256 = "14ggqkcjxfzkbpk1961gp9fzikbf037s985zjb8jpi63xs8cfp26"; })
+  (fetchNuGet { pname = "EndianBitConverter"; version = "1.1.0"; sha256 = "02wz9agw56a8s0gxsgflqga2r0mbn6xzqyj5hvzn043jr4xwggpk"; })
+  (fetchNuGet { pname = "Libuv"; version = "1.9.1"; sha256 = "0j9gdbd3gjycyx822q0c0hl9wjc7dlhz86i4rm3ds88ykngma1vd"; })
+  (fetchNuGet { pname = "Microsoft.AspNet.WebApi.Client"; version = "5.2.7"; sha256 = "1j0wbdmycj5xbk06p32f7xrddc40sbj3yca4d7ywg611yk26mvi1"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "1.1.0"; sha256 = "08r667hj2259wbim1p3al5qxkshydykmb7nd9ygbjlg4mmydkapc"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "1.3.0"; sha256 = "097qi36jhyllpqj313nxzwc64a4f65p014gaj6fz4z5jcphkkk15"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "1.3.0"; sha256 = "0vpslncd5lk88ijb42qbp88dfrd0fg4kri44w6jpmxb3fcqazais"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.VisualBasic"; version = "1.3.0"; sha256 = "186chky80rryhzh5dh8j318ghyvn1a7r2876rlyadxdrs7aqv0ll"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App"; version = "1.0.4"; sha256 = "0yc3nrvwfh3b9ajf0sqlhdil5imf2p16bqjnaasf7wdx6lwl98in"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.DotNetHost"; version = "1.0.1"; sha256 = "1qr4gnzlpwzv8jr7ijmdg13x2s9m35g4ma0bh18kci4ml7h9jb6a"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.DotNetHostPolicy"; version = "1.0.3"; sha256 = "0r5gi9j9ynvjd9kz0ajrsgw8m8lynxjq2czinxfmj5ajrvczx0vn"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.DotNetHostResolver"; version = "1.0.1"; sha256 = "109zs3bqhzh6mhbf2rfpwxmpb8fq57jr7wriyylynirsqh1lnql4"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Jit"; version = "1.0.6"; sha256 = "1ah7mhbcrj4bkvl4nbbf4hcilg6wy9i57n8xr1h2lxflpk763sij"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.2"; sha256 = "17rrj0awknxx6rpdxr7yijdxqdmbbpdlcf2nsadjbd4d2gw7dck0"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "3.1.0"; sha256 = "1gc1x8f95wk8yhgznkwsg80adk1lc65v9n5rx4yaa4bc5dva0z3j"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "3.1.1"; sha256 = "05hmaygd5131rnqi6ipv7agsbpi7ka18779vw45iw6b385l7n987"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Runtime.CoreCLR"; version = "1.0.6"; sha256 = "006yqsjkigyb6kv2vh2ids5jdrkwqpa94qzk2c23l92l9ajz36c9"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Windows.ApiSets"; version = "1.0.1"; sha256 = "16k8chghkr25jf49banhzl839vs8n3vbfpg4wn4idi0hzjipix78"; })
+  (fetchNuGet { pname = "Microsoft.VisualBasic"; version = "10.0.1"; sha256 = "0q6vv9qfkbwn7gz8qf1gfcn33r87m260hsxdsk838mcbqmjz6wgc"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.0.1"; sha256 = "1n8ap0cmljbqskxpf8fjzn7kh1vvlndsa75k01qig26mbw97k2q7"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.0.0"; sha256 = "1spf4m9pikkc19544p29a47qnhcd885klncahz133hbnyqbkmz9k"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "4.7.0"; sha256 = "0pjll2a62hc576hd4wgyasva0lp733yllmk54n37svz5ac7nfz0q"; })
+  (fetchNuGet { pname = "Mono.Options"; version = "6.12.0.148"; sha256 = "07va9kjcafj0a93ks3z8jhcn6r5h39dbpd6h1iqk214b7gk1p9k0"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.0"; sha256 = "0nmmv4yw7gw04ik8ialj3ak0j6pxa9spih67hnn1h2c38ba8h58k"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.0"; sha256 = "1bc4ba8ahgk15m8k4nd7x406nhi0kwqzbgjk2dmw52ss553xz7iy"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "Newtonsoft.Json.Bson"; version = "1.0.1"; sha256 = "1r1hvj5gjl466bya2bfl5aaj8rbwyf5x1msg710wf3k2llbci1xa"; })
+  (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"; sha256 = "1ppk69xk59ggacj9n7g6fyxvzmk1g5p4fkijm0d7xqfkig98qrkf"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.1.0"; sha256 = "0d720z4lzyfcabmmnvh0bnj76ll7djhji2hmfh3h44sdkjnlkknk"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.0.1"; sha256 = "1hgv2bmbaskx77v8glh7waxws973jn4ah35zysnkxmf0196sfxg6"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Security"; version = "4.0.1"; sha256 = "1nk4pf8vbrgf73p0skhwmzhgz1hax3j123ilhwdncr47l3x1dbhk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography"; version = "4.0.0"; sha256 = "0k57aa2c3b10wl3hfqbgrl7xq7g8hh3a3ir44b31dn5p61iiw3z9"; })
+  (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"; sha256 = "0fv3cma1jp4vgj7a8hqc9n7hr1f1kjp541s6z0q1r6nazb4iz9mz"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.CodeDom"; version = "6.0.0"; sha256 = "1i55cxp8ycc03dmxx4n22qi6jkwfl23cgffb95izq7bjar8avxxq"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.0.12"; sha256 = "07y08kvrzpak873pmyxs129g1ch8l27zmg51pcyj2jvq03n0r0fc"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.2.0"; sha256 = "1jm4pc666yiy7af1mcf7766v710gp0h40p228ghj6bavx7xfa38m"; })
+  (fetchNuGet { pname = "System.ComponentModel"; version = "4.0.1"; sha256 = "0v4qpmqlzyfad2kswxxj2frnaqqhz9201c3yn8fmmarx5vlzg52z"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.1.0"; sha256 = "0l6m3z6h2qjjam1rp1fzk7zz5czjjazmw78rbh72x25y6kmyn6wf"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.0.0"; sha256 = "0ynxqbc3z1nwbrc11hkkpw9skw116z4y9wjzn7id49p9yi7mzmlf"; })
+  (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.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.0.0"; sha256 = "1n6c3fbz7v8d3pn77h4v5wvsfrfg7v1c57lg3nff3cjyh597v23m"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.FileVersionInfo"; version = "4.0.0"; sha256 = "1s5vxhy7i09bmw51kxqaiz9zaj9am8wsjyz13j85sp23z267hbv3"; })
+  (fetchNuGet { pname = "System.Diagnostics.Process"; version = "4.1.0"; sha256 = "061lrcs7xribrmq7kab908lww6kn2xn1w3rdc41q189y0jibl19s"; })
+  (fetchNuGet { pname = "System.Diagnostics.StackTrace"; version = "4.0.1"; sha256 = "0q29axqklpl36vvyni5h1cyb02lfvvkqprb9wfvcdca3181q5al2"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.1.0"; sha256 = "1d2r76v1x610x61ahfpigda89gd13qydz6vbwzhpqlyvq8jj6394"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "4.7.0"; sha256 = "0yfw7cpl54mgfcylvlpvrl0c8r1b0zca6p7r3rcwkvqy23xqcyhg"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.0.1"; sha256 = "0bv0alrm2ck2zk3rz25lfyk9h42f3ywq77mx1syl6vvyncnpg4qh"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.0.1"; sha256 = "0hjhdb5ri8z9l93bw04s7ynwrjrhx2n0p34sf33a9hl9phz69fyc"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.1.0"; sha256 = "0iym7s3jkl8n0vzm3jd6xqg9zjjjqni05x45dwxyjr2dy88hlgji"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.0.1"; sha256 = "0h72znbagmgvswzr46mihn7xm7chfk2fhrp5krzkjf29pz0i6z82"; })
+  (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.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Watcher"; version = "4.0.0"; sha256 = "0rgfjiqz8dqy8hmbfsls4sa46ss6p9vh86cvn1vqx7zg45pf3hir"; })
+  (fetchNuGet { pname = "System.IO.MemoryMappedFiles"; version = "4.0.0"; sha256 = "1ahp27llf76ngc0fngl8zy4y1sgflzrkmxddilnd0l0cbbq1lm6m"; })
+  (fetchNuGet { pname = "System.IO.UnmanagedMemoryStream"; version = "4.0.1"; sha256 = "012g8nwbfv94rhblsb3pxn1bazfpgjiy3kmy00679gg3651b87jb"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.1"; sha256 = "1ndivw7bnwsjiihhkl19gf27m1lgk382d0qnl8hjdgyv9nmnc14z"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Linq.Parallel"; version = "4.0.1"; sha256 = "0i33x9f4h3yq26yvv6xnq4b0v51rl5z8v1bm7vk972h5lvf4apad"; })
+  (fetchNuGet { pname = "System.Linq.Queryable"; version = "4.0.1"; sha256 = "11jn9k34g245yyf260gr3ldzvaqa9477w2c5nhb1p8vjx4xm3qaw"; })
+  (fetchNuGet { pname = "System.Management"; version = "6.0.0"; sha256 = "0ra1g75ykapg6i5y0za721kpjd6xcq6dalijkdm6fsxxmz8iz4dr"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.1.1"; sha256 = "08yby7shng92afki7k55f3k15nmrwnjs1s7xkhljf1kn9dnc157q"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
+  (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.0.0"; sha256 = "0dj3pvpv069nyia28gkl4a0fb7q33hbxz2dg25qvpah3l7pbl0qh"; })
+  (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.0.11"; sha256 = "10xzzaynkzkakp7jai1ik3r805zrqjxiz7vcagchyxs2v26a516r"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Requests"; version = "4.0.11"; sha256 = "13mka55sa6dg6nw4zdrih44gnp8hnj5azynz47ljsh2791lz3d9h"; })
+  (fetchNuGet { pname = "System.Net.Security"; version = "4.0.0"; sha256 = "0ybyfssnm0cri37byhxnkfrzprz77nizbfj553x7s1vry2pnm5gb"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.1.0"; sha256 = "1385fvh8h29da5hh58jm1v78fzi9fi5vj93vhlm2kvqpfahvpqls"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.Net.WebHeaderCollection"; version = "4.0.1"; sha256 = "10bxpxj80c4z00z3ksrfswspq9qqsw8jwxcbzvymzycb97m9b55q"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.1.1"; sha256 = "1xkzrpl700pp0l6dc9fx7cj318i596w0i0qixsbrz5v65fnhbzia"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (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.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.DispatchProxy"; version = "4.0.1"; sha256 = "1maglcnvm3h8bfmx3rvwg4wjda7527iqp38cg1r6vh9japrw1n0r"; })
+  (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.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.3.0"; sha256 = "1y5m6kryhjpqqm2g3h3b6bzig13wkiw954x3b7icqjm6xypm1x3b"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.Reader"; version = "4.0.0"; sha256 = "1jafi73dcf1lalrir46manq3iy6xnxk2z7gpdpwg4wqql7dv3ril"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (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.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (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.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.0.0"; sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (fetchNuGet { pname = "System.Runtime.Loader"; version = "4.0.0"; sha256 = "0lpfi3psqcp6zxsjk2qyahal7zaawviimc8lhrlswhip2mx7ykl0"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.0.1"; sha256 = "1y308zfvy0l5nrn46mqqr4wb4z1xk758pkk8svbz8b5ij7jnv4nn"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "4.7.0"; sha256 = "0n0k0w44flkd8j0xw7g3g3vhw7dijfm51f75xkm1qxnbh4y45mpz"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.0.1"; sha256 = "03dw0ls49bvsrffgwycyifjgz0qzr9r85skqhdyhfd51fqf398n6"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.2.0"; sha256 = "148s9g5dgm33ri7dnh19s4lgnlxbpwvrw2jnzllq2kijj4i4vs85"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.2.0"; sha256 = "118jijz446kix20blxip0f0q8mhsh9bz118mwc2ch1p6g7facpzc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.0.0"; sha256 = "1cwv8lqj8r15q81d2pz2jwzzbaji0l28xfrpw29kdpsaypm92z2q"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.0.0"; sha256 = "0a8y1a5wkmpawc787gfmnrnbzdgxmx1a14ax43jf3rj9gxmy3vk4"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.0.0"; sha256 = "16sx3cig3d0ilvzl8xxgffmxbiqx87zdi8fc73i3i7zjih1a7f4q"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.0.0"; sha256 = "0i7cfnwph9a10bm26m538h5xcr8b36jscp9sy1zhgifksxz4yixh"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.1.0"; sha256 = "0clg1bv55mfv5dq00m19cp634zx6inm31kf8ppbq1jgyjf2185dh"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Permissions"; version = "4.7.0"; sha256 = "13f366sj36jwbvld957gk2q64k2xbj48r8b0k9avrri2nlq1fs04"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.0.1"; sha256 = "1nbzdfqvzzbgsfdd5qsh94d7dbg2v4sw0yx6himyn52zf8z6007p"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.0.0"; sha256 = "1d3vc8i0zss9z8p4qprls4gbh7q4218l9845kclx7wvw41809k6z"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.7.0"; sha256 = "1a56ls5a9sr3ya0nr086sdpa9qv0abv31dd6fp27maqa9zclqq5d"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.0.1"; sha256 = "00wpm3b9y0k996rm9whxprngm8l500ajmzgy2ip9pgwk0icp06y3"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.7.1"; sha256 = "1y1hdap9qbl7vp74j8s9zcbh3v1rnrrvcc55wj1hl6has2v3qh1r"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (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.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Overlapped"; version = "4.0.1"; sha256 = "0fi79az3vmqdp9mv3wh2phblfjls89zlj6p9nc3i9f6wmfarj188"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "4.6.0"; sha256 = "0a1davr71wssyn4z1hr75lk82wqa0daz0vfwkmg1fm3kckfd72k1"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Parallel"; version = "4.0.1"; sha256 = "114wdg32hr46dfsnns3pgs67kcha5jn47p5gg0mhxfn5vrkr2p75"; })
+  (fetchNuGet { pname = "System.Threading.Thread"; version = "4.0.0"; sha256 = "1gxxm5fl36pjjpnx1k688dcw8m9l7nmf802nxis6swdaw8k54jzc"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.0.1"; sha256 = "15n54f1f8nn3mjcjrlzdg6q3520571y012mx7v991x2fvp73lmg6"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.Windows.Extensions"; version = "4.7.0"; sha256 = "11dmyx3j0jafjx5r9mkj1v4w2a4rzrdn8fgwm2d1g7fs1ayqcvy9"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
+  (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.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.0.1"; sha256 = "0ihsnkvyc76r4dcky7v3ansnbyqjzkbyyia0ir5zvqirzan0bnl1"; })
+  (fetchNuGet { pname = "System.Xml.XPath"; version = "4.0.1"; sha256 = "0fjqgb6y66d72d5n8qq1h213d9nv2vi8mpv8p28j3m9rccmsh04m"; })
+  (fetchNuGet { pname = "System.Xml.XPath.XDocument"; version = "4.0.1"; sha256 = "1fndc70lbjvh8kxs71c7cidfm8plznd61bg4fwpiyq3mq0qg5z0z"; })
+]
diff --git a/nixpkgs/pkgs/tools/games/ps3iso-utils/default.nix b/nixpkgs/pkgs/tools/games/ps3iso-utils/default.nix
new file mode 100644
index 000000000000..63093b59b2cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/ps3iso-utils/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, fetchFromGitHub
+, unstableGitUpdater
+, lib
+}:
+stdenv.mkDerivation {
+  pname = "ps3iso-utils";
+  version = "277db7de";
+
+  src = fetchFromGitHub {
+    owner = "bucanero";
+    repo = "ps3iso-utils";
+    rev = "878090980a9042c61901920fed1b034af215e8c7";
+    hash = "sha256-HUx5BqHBvVMUHReuJL0RcyxXOnufSt1Zi/ieAlI2eoc=";
+  };
+
+  buildPhase = ''
+    mkdir -p bin/
+    find . -type f -name "*.c" -exec \
+    sh -c 'OFILE=`basename "{}" ".c"` && $CC "{}" -o bin/"$OFILE"' \;
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/* $out/bin
+  '';
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    description = "Estwald's PS3ISO utilities";
+    homepage = "https://github.com/bucanero/ps3iso-utils";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ soupglasses ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/games/scarab/default.nix b/nixpkgs/pkgs/tools/games/scarab/default.nix
new file mode 100644
index 000000000000..c71502b7f506
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/scarab/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, buildDotnetModule
+, fetchFromGitHub
+, glibc
+, zlib
+, libX11
+, libICE
+, libSM
+, fontconfig
+, gtk3
+, copyDesktopItems
+, icoutils
+, wrapGAppsHook
+, makeDesktopItem
+}:
+
+buildDotnetModule rec {
+  pname = "scarab";
+  version = "2.5.0.0";
+
+  src = fetchFromGitHub {
+    owner = "fifty-six";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-z1hmMrfeoYyjVEPPjWvUfKUKsOS7UsocSWMYrFY+/kI=";
+  };
+
+  nugetDeps = ./deps.nix;
+  projectFile = "Scarab.sln";
+  executables = [ "Scarab" ];
+
+  runtimeDeps = [
+    glibc
+    zlib
+    libX11
+    libICE
+    libSM
+    fontconfig
+    gtk3
+  ];
+
+  buildInputs = [
+    gtk3
+  ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    icoutils
+    wrapGAppsHook
+  ];
+
+  postFixup = ''
+    # Icons for the desktop file
+    icotool -x $src/Scarab/Assets/omegamaggotprime.ico
+
+    sizes=(256 128 64 48 32 16)
+    for i in ''${!sizes[@]}; do
+      size=''${sizes[$i]}x''${sizes[$i]}
+      install -D omegamaggotprime_''$((i+1))_''${size}x32.png $out/share/icons/hicolor/$size/apps/scarab.png
+    done
+  '';
+
+  desktopItems = [(makeDesktopItem {
+    desktopName = "Scarab";
+    name = "scarab";
+    exec = "Scarab";
+    icon = "scarab";
+    comment = meta.description;
+    type = "Application";
+    categories = [ "Game" ];
+  })];
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Hollow Knight mod installer and manager";
+    homepage = "https://github.com/fifty-six/Scarab";
+    downloadPage = "https://github.com/fifty-six/Scarab/releases";
+    changelog = "https://github.com/fifty-six/Scarab/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ huantian ];
+    mainProgram = "Scarab";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/scarab/deps.nix b/nixpkgs/pkgs/tools/games/scarab/deps.nix
new file mode 100644
index 000000000000..a440529298e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/scarab/deps.nix
@@ -0,0 +1,269 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Avalonia"; version = "11.0.0"; sha256 = "0wfbwrr8p5hg9f809d44gh2zfkfwnwayfw84vs33hh7ms0r380gd"; })
+  (fetchNuGet { pname = "Avalonia.Angle.Windows.Natives"; version = "2.1.0.2023020321"; sha256 = "1az4s1g22ipak9a3xfh55z2h3rm6lpqh7svbpw6ag4ysrgsjjsjd"; })
+  (fetchNuGet { pname = "Avalonia.AvaloniaEdit"; version = "11.0.0"; sha256 = "12ibz472083iiz5zskd1ivigggbl0d9yv3nazgw17s97nmnl2lpj"; })
+  (fetchNuGet { pname = "Avalonia.BuildServices"; version = "0.0.28"; sha256 = "0d9hyc1zmyvzlb320arwrv12ncp45llq98hibv711b7ibm11dm7c"; })
+  (fetchNuGet { pname = "Avalonia.Controls.ColorPicker"; version = "11.0.0"; sha256 = "06wgzhxkivlaxkn8p61wainsprml2g1q4jmvy9fpn64qnfywjdn7"; })
+  (fetchNuGet { pname = "Avalonia.Controls.DataGrid"; version = "11.0.0"; sha256 = "0qlcdx4w1pcljgs7sfbn5xmmnqwp2m0fqyswrgz6c8cvjzcfsjsj"; })
+  (fetchNuGet { pname = "Avalonia.Desktop"; version = "11.0.0"; sha256 = "08y31b357fax7c1ggwhjsfwgaj6zkm2abhpc6amlmk6ci4zn12lf"; })
+  (fetchNuGet { pname = "Avalonia.Diagnostics"; version = "11.0.0"; sha256 = "134xl19rfswnz75a1mhil9yqy8haqa788rmd1p1kk6ibjbhb3np9"; })
+  (fetchNuGet { pname = "Avalonia.Fonts.Inter"; version = "11.0.0"; sha256 = "1vbkk97jhy9qwix25jc875m98cp6vrl86029la55cbky9m1819am"; })
+  (fetchNuGet { pname = "Avalonia.FreeDesktop"; version = "11.0.0"; sha256 = "042s8lc83lw6ygcsiza14wlsc09rgzw3ch2qaxkhlp73bh736ps3"; })
+  (fetchNuGet { pname = "Avalonia.Native"; version = "11.0.0"; sha256 = "1j7wpv81wqwh6zhfzc1f36vb5dp6s2ig45v8km9sp0q6f66zkrsh"; })
+  (fetchNuGet { pname = "Avalonia.ReactiveUI"; version = "11.0.0"; sha256 = "1fhp6f2aj2bmzlcj0s5r9i9rcxwakdg9gvjqvdqaq8s98d0s06qh"; })
+  (fetchNuGet { pname = "Avalonia.Remote.Protocol"; version = "11.0.0"; sha256 = "1b5031k8slwiz7bncih67fjl6ny234yd4skqxk611l9zp5snjic2"; })
+  (fetchNuGet { pname = "Avalonia.Skia"; version = "11.0.0"; sha256 = "1ra1kd0kkblppr5zy7rzdbwllggrzvp9lkxblf9mg3y8rnp6fk83"; })
+  (fetchNuGet { pname = "Avalonia.Svg"; version = "11.0.0.1"; sha256 = "0a61xg6pcmjy90mmjv42d64av5a7q919qbrhnv6vd1rmm6hxv7zf"; })
+  (fetchNuGet { pname = "Avalonia.Svg.Skia"; version = "11.0.0.1"; sha256 = "1bywgrqdqc5wgcsabnhm8yssg78g9lw3p3sza5f8w5vdzmr116ff"; })
+  (fetchNuGet { pname = "Avalonia.Themes.Simple"; version = "11.0.0"; sha256 = "1qw76n78c14xl419yzabahbsrgymm850ql05gd4fh5naq2brksdm"; })
+  (fetchNuGet { pname = "Avalonia.Win32"; version = "11.0.0"; sha256 = "1djp4m5yin4i2f9sjv4v3syv02fllwbfinzm9h0hm2abc2ccvrm3"; })
+  (fetchNuGet { pname = "Avalonia.X11"; version = "11.0.0"; sha256 = "1gd4zrjyw3hg3d48ivhxp0ca7ma13dnpr8y1wc7d51ddlrj3c86g"; })
+  (fetchNuGet { pname = "Castle.Core"; version = "5.1.1"; sha256 = "1caf4878nvjid3cw3rw18p9cn53brfs5x8dkvf82xvcdwc3i0nd1"; })
+  (fetchNuGet { pname = "ColorTextBlock.Avalonia"; version = "11.0.0-d1"; sha256 = "1vf5fp11zx21bsakbpf12j6mchafh749cs03w9cifb6ci98jchgh"; })
+  (fetchNuGet { pname = "ColorTextBlock.Avalonia"; version = "11.0.2"; sha256 = "0zvdgpg6r142zhldam5kcpmjpi0qjxsm40cy491gb9ynrj39hrhn"; })
+  (fetchNuGet { pname = "coverlet.collector"; version = "1.3.0"; sha256 = "0k65d9hag6d59w1ixf4n5ihcphp04vrjmd99x5nhga81w1k9i20y"; })
+  (fetchNuGet { pname = "DryIoc.dll"; version = "5.4.1"; sha256 = "1dbaac5pi7mim4qil3lrqcpad9vbn261rznk5rw26kvngzcc65n6"; })
+  (fetchNuGet { pname = "DryIoc.Microsoft.DependencyInjection"; version = "6.2.0"; sha256 = "0iygbabd73ggzyq1ckbxifrh1kvzwlkr3x32ahamka7pv3982khb"; })
+  (fetchNuGet { pname = "DynamicData"; version = "7.9.5"; sha256 = "1m9qx8g6na5ka6kd9vhg8gjmxrnkzb6v5cl5yqp1kdjsw4rcwy6x"; })
+  (fetchNuGet { pname = "ExCSS"; version = "4.1.4"; sha256 = "1y50xp6rihkydbf5l73mr3qq2rm6rdfjrzdw9h1dw9my230q5lpd"; })
+  (fetchNuGet { pname = "FakeItEasy"; version = "8.0.0-alpha.1.10"; sha256 = "0492cayij2ap7rc9l8rkmmch1rb0jqckaspqxrsy0myldfqc2lpq"; })
+  (fetchNuGet { pname = "Fizzler"; version = "1.2.1"; sha256 = "1w5jb1d0figbv68dydbnlcsfmqlc3sv9z1zxp7d79dg2dkarc4qm"; })
+  (fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2.3"; sha256 = "115aybicqs9ijjlcv6k6r5v0agkjm1bm1nkd0rj3jglv8s0xvmp2"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Linux"; version = "2.8.2.3"; sha256 = "1f18ahwkaginrg0vwsi6s56lvnqvvxv7pzklfs5lnknasxy1a76z"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.macOS"; version = "2.8.2.3"; sha256 = "052d8frpkj4ijs6fm6xp55xbv95b1s9biqwa0w8zp3rgm88m9236"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.WebAssembly"; version = "2.8.2.3"; sha256 = "043hv36bg5240znbm8x5la7py17m4jfzy57q3ka32f6zjld83j36"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2.3"; sha256 = "08khd2jqm8sw58ljz5srangzfm2sz3gd2q1jzc5fr80lj8rv6r74"; })
+  (fetchNuGet { pname = "HtmlAgilityPack"; version = "1.11.42"; sha256 = "0cvnc1qdfcjbqkh335bv4wp44zisb4hc69lq3zphiyzqfrjisnyb"; })
+  (fetchNuGet { pname = "JetBrains.Annotations"; version = "2023.2.0"; sha256 = "0nx7nrzbg9gk9skdc9x330cbr5xbsly6z9gzxm46vywf55yp8vaj"; })
+  (fetchNuGet { pname = "Markdown.Avalonia"; version = "11.0.2"; sha256 = "1nx1f3pqlpffwwpdk8d6bbd27mz2q45k3gkc5dz6m2pfxi0ij6ak"; })
+  (fetchNuGet { pname = "Markdown.Avalonia.Html"; version = "11.0.2"; sha256 = "1xjz45lg9dcfwcdl0sbfy0145m6bd8y3b6kvwh96fnnj8ks6074q"; })
+  (fetchNuGet { pname = "Markdown.Avalonia.Svg"; version = "11.0.2"; sha256 = "1s5yazazpmhkc2nizzm46cnfwk7wwdd6gg2lzcs30k813i3621z3"; })
+  (fetchNuGet { pname = "Markdown.Avalonia.SyntaxHigh"; version = "11.0.2"; sha256 = "0di7r0wiif2lvgr0wlw1lj7b9j85yp1pf5hyhh4n9ciykklkkq0p"; })
+  (fetchNuGet { pname = "Markdown.Avalonia.Tight"; version = "11.0.0-d1"; sha256 = "0ks9k3wqwvdssiwbcjc4gnrfn1r8x2dbp9amraxkmws5a7vbjdyk"; })
+  (fetchNuGet { pname = "Markdown.Avalonia.Tight"; version = "11.0.2"; sha256 = "1mz229r42f1p320xkjl45pdv72lycn9cqk46arycm9km45jgzzgl"; })
+  (fetchNuGet { pname = "MessageBox.Avalonia"; version = "2.3.1-rc1"; sha256 = "13zvqg95wa5v5b8h8kl63ydpprxqyk6zgzqdh673y005s1y58w4a"; })
+  (fetchNuGet { pname = "MicroCom.Runtime"; version = "0.11.0"; sha256 = "0p9c3m0zk59x9dcqw077hzd2yk60myisbacvm36mnwpcjwzjkp2m"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.0.0"; sha256 = "0bbl0jpqywqmzz2gagld1p2gvdfldjfjmm25hil9wj2nq1zc4di8"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "3.8.0"; sha256 = "12n7rvr39bzkf2maw7zplw8rwpxpxss4ich3bb2pw770rx4nyvyw"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "3.8.0"; sha256 = "1kmry65csvfn72zzc16vj1nfbfwam28wcmlrk3m5rzb8ydbzgylb"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "3.8.0"; sha256 = "0w0yx0lpg54iw5jazqk46h48gx43ij32gwac8iywdj6kxfxm03vw"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "3.8.0"; sha256 = "0hjgxcsj5zy27lqk0986m59n5dbplx2vjjla2lsvg4bwg8qa7bpk"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "16.7.1"; sha256 = "1farw63445cdyciplfs6l9j1gayxw16rkzmrwsiswfyjhqz70xd4"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.3.0"; sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "7.0.0"; sha256 = "121zs4jp8iimgbpzm3wsglhjwkc06irg1pxy8c1zcdlsg34cfq1p"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "7.0.0"; sha256 = "181d7mp9307fs17lyy42f8cxnjwysddmpsalky4m0pqxcimnr6g7"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "7.0.0"; sha256 = "1bqd3pqn5dacgnkq0grc17cgb2i0w8z1raw12nwm3p3zhrfcvgxf"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "7.0.0"; sha256 = "1gn7d18i1wfy13vrwhmdv1rmsb4vrk26kqdld4cgvh77yigj90xs"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "7.0.0"; sha256 = "0b90zkrsk5dw3wr749rbynhpxlg4bgqdnd7d5vdlw2g9c7zlhgx6"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "7.0.0"; sha256 = "1b4km9fszid9vp2zb3gya5ni9fn8bq62bzaas2ck2r7gs0sdys80"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "16.7.1"; sha256 = "0yqxipj74ax2n76w9ccydppx78ym8m5fda88qnvj4670qjvl0kf8"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.1.2"; sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "16.7.1"; sha256 = "0s9dyh99gzdpk1i5v468i2r9m6i3jrr41r394pwdwiajsz99kay0"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "16.7.1"; sha256 = "1xik06rxn9ps83in0zn9vcl2ibv3acmdqvrx07qq89lxj1sgqlhs"; })
+  (fetchNuGet { pname = "Microsoft.Toolkit.HighPerformance"; version = "7.1.2"; sha256 = "18l950mq0l8s1z771l9p332ni7jryidjh4hi9p37l6p8frcnccxb"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.0.0"; sha256 = "18ijvmj13cwjdrrm52c8fpq021531zaz4mj4b4zapxaqzzxf2qjr"; })
+  (fetchNuGet { pname = "Projektanker.Icons.Avalonia"; version = "6.6.0-rc1.1"; sha256 = "04sac2grc1mbx1rfx29i16k0yrqh29c60njsj2mq8yrs1z2ky9jj"; })
+  (fetchNuGet { pname = "Projektanker.Icons.Avalonia.FontAwesome"; version = "6.6.0-rc1.1"; sha256 = "1mzdgds62f7apy8gajrpsa6fay89rzfl7f9mf6y573ani7a131xc"; })
+  (fetchNuGet { pname = "PropertyChanged.SourceGenerator"; version = "1.0.8"; sha256 = "05ygdj1sizcw678vf459hzhz4ynz2s5s206vl99g5gy3d9kaham6"; })
+  (fetchNuGet { pname = "ReactiveUI"; version = "18.3.1"; sha256 = "1lxkc8yk9glj0w9n5vry2dnwwvh8152ad2c5bivk8aciq64zidyn"; })
+  (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.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (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 = "Semi.Avalonia"; version = "11.0.0"; sha256 = "1js7lk05y171y6hrh39ai6ddqn17x08ri2fdpz9iq0ic8iryrvxi"; })
+  (fetchNuGet { pname = "Serilog"; version = "3.0.1"; sha256 = "1sigmcsy6mvjk2lqlxdxj47f961p1wvc0b8d8nx84hwy7mfikxvi"; })
+  (fetchNuGet { pname = "Serilog.Extensions.Logging"; version = "7.0.0"; sha256 = "0qbdgjfr534jhrl87fjav46pbbrzj3izw3wd6hbz5gi1lrphmzar"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "4.1.0"; sha256 = "1rpkphmqfh3bv3m7v1zwz88wz4sirj4xqyff9ga0c6bqhblj6wii"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Debug"; version = "2.0.0"; sha256 = "1i7j870l47gan3gpnnlzkccn5lbm7518cnkp25a3g5gp9l0dbwpw"; })
+  (fetchNuGet { pname = "Serilog.Sinks.File"; version = "5.0.0"; sha256 = "097rngmgcrdfy7jy8j7dq3xaq2qky8ijwg0ws6bfv5lx0f3vvb0q"; })
+  (fetchNuGet { pname = "SerilogAnalyzer"; version = "0.15.0"; sha256 = "0k83cyzl9520q282vp07zb8rs16a56axv7a31l3m5fb1afq2hv9l"; })
+  (fetchNuGet { pname = "ShimSkiaSharp"; version = "1.0.0.1"; sha256 = "1iza1yvvvz5pfl2vx6fwlb0gj262gwva9fay6pb6kgiv70h7rmcg"; })
+  (fetchNuGet { pname = "SkiaSharp"; version = "2.88.3"; sha256 = "1yq694myq2rhfp2hwwpyzcg1pzpxcp7j72wib8p9pw9dfj7008sv"; })
+  (fetchNuGet { pname = "SkiaSharp.HarfBuzz"; version = "2.88.3"; sha256 = "0axz2zfyg0h3zis7rr86ikrm2jbxxy0gqb3bbawpgynf1k0fsi6a"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Linux"; version = "2.88.3"; sha256 = "0dajvr60nwvnv7s6kcqgw1w97zxdpz1c5lb7kcq7r0hi0l05ck3q"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.macOS"; version = "2.88.3"; sha256 = "191ajgi6fnfqcvqvkayjsxasiz6l0bv3pps8vv9abbyc4b12qvph"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.WebAssembly"; version = "2.88.3"; sha256 = "1w5njksq3amrrp7fqxw89nv6ar2kgc5yx092i4rxv7hrjbd1aagx"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Win32"; version = "2.88.3"; sha256 = "03wwfbarsxjnk70qhqyd1dw65098dncqk2m0vksx92j70i7lry6q"; })
+  (fetchNuGet { pname = "Splat"; version = "14.4.1"; sha256 = "03ycyjn2ii44npi015p4rk344xnjgdzz02cf63cmhx2ab8hv6p4b"; })
+  (fetchNuGet { pname = "Splat"; version = "14.6.37"; sha256 = "1rj2ik4b4mxl2w2d8316a2afyfd23p6ysc5vczsis7bhxcjp1x2h"; })
+  (fetchNuGet { pname = "Splat"; version = "14.7.1"; sha256 = "1rs8bmwcvzg4yn05zglgk7vbmyi2flyyhjqn62sx1cjkrd9m0cs7"; })
+  (fetchNuGet { pname = "Splat.Microsoft.Extensions.DependencyInjection"; version = "14.6.37"; sha256 = "1pqb0ij1kmzjx92j5slp579aqshsp499wd8vxbnm58z0ix4a7bn6"; })
+  (fetchNuGet { pname = "Splat.Serilog"; version = "14.7.1"; sha256 = "0xdw92jxarvpan9v8zja2710z2m03yam94qwar8j5axvnqbh8fhj"; })
+  (fetchNuGet { pname = "Svg.Custom"; version = "1.0.0.1"; sha256 = "00ly1pbm8a7s2k71gz7ikw42l25wfgabdx4bqrzdxysgnfaaa43d"; })
+  (fetchNuGet { pname = "Svg.Model"; version = "1.0.0.1"; sha256 = "0kyllnbya6zvhv8rg53b3zdndmdz9hak4k204gjzcnhkqsn8dcy6"; })
+  (fetchNuGet { pname = "Svg.Skia"; version = "1.0.0.1"; sha256 = "1z487pnz12cy6554xl4nifj4y4a2l15yxz5d3rlsc3asb4qs5jvy"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (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.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.6.0"; sha256 = "1pbxzdz3pwqyybzv5ff2b7nrc281bhg7hq34w0fn1w3qfgrbwyw2"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "7.0.0"; sha256 = "1n9122cy6v3qhsisc9lzwa1m1j62b8pi2678nsmnlyvfpk0zdagm"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.5.0"; sha256 = "1jj6f6g87k0iwsgmg3xmnn67a14mq88np0l1ys5zkxhkvbc8976p"; })
+  (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.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.EventLog"; version = "6.0.0"; sha256 = "08y1x2d5w2hnhkh9r1998pjc7r4qp0rmzax062abha85s11chifd"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; })
+  (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.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (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.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Abstractions"; version = "19.2.29"; sha256 = "1d25i63zg36w1xf7f89036qi3hjb567lc9if1acnvd769ss7qc09"; })
+  (fetchNuGet { pname = "System.IO.Abstractions.TestingHelpers"; version = "19.2.29"; sha256 = "08a1v4a5nmmqk6mbzqd7k41cw0d478na9pf3cnbl8935fqc176ys"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (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.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.Pipelines"; version = "6.0.0"; sha256 = "08211lvckdsdbd67xz4f6cyk76cli565j0dby1grlc4k9bhwby65"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (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.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (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.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reactive"; version = "5.0.0"; sha256 = "1lafmpnadhiwxyd543kraxa3jfdpm6ipblxrjlibym9b1ykpr5ik"; })
+  (fetchNuGet { pname = "System.Reactive.Linq"; version = "5.0.0"; sha256 = "07p05v13yixbxhs84231k5l8jw3nji0j3zcqc6nsbcmh54jpjsrb"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (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.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "5.0.0"; sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (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.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (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.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (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.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (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.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (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.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "7.0.0"; sha256 = "1151hbyrcf8kyg1jz8k9awpbic98lwz9x129rg7zk1wrs6vjlpxl"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "7.0.0"; sha256 = "0scb0lp7wbgcinaa4kqiqs7b8i5nx4ppfad81138jiwd1sl37pyp"; })
+  (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.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (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.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.5.0"; sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
+  (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.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "TestableIO.System.IO.Abstractions"; version = "19.2.29"; sha256 = "00gf9bw3dbacp1vnyr4m3lj61vnllrxhsiryn91jaylld4yl2r7x"; })
+  (fetchNuGet { pname = "TestableIO.System.IO.Abstractions.TestingHelpers"; version = "19.2.29"; sha256 = "1j1728yfj29bc24pc3dz8vnsybs8islgzrkmdyp9p193dmc9ryb5"; })
+  (fetchNuGet { pname = "TestableIO.System.IO.Abstractions.Wrappers"; version = "19.2.29"; sha256 = "1ffk5z4wi61711rwng67wviw0g0xyzvmf352i3yyfhm4i4xlsf3z"; })
+  (fetchNuGet { pname = "Tmds.DBus.Protocol"; version = "0.15.0"; sha256 = "0d99kcs7r9cp6gpyc7z230czkkyx4164x86dhy0mca73f2ykc2g2"; })
+  (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.3"; sha256 = "0j1d0rbcm7pp6dypi61sjxp8l22sv261252z55b243l39jgv2rp3"; })
+]
diff --git a/nixpkgs/pkgs/tools/games/scarab/update.sh b/nixpkgs/pkgs/tools/games/scarab/update.sh
new file mode 100755
index 000000000000..9ec65acfe47c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/scarab/update.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq common-updater-scripts
+set -euo pipefail
+
+new_version="$(curl -s "https://api.github.com/repos/fifty-six/Scarab/releases?per_page=1" | jq -r '.[0].name')"
+new_version=${new_version#"v"}
+old_version="$(sed -nE 's/^\s*version = "([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)";$/\1/p' ./default.nix)"
+
+if [[ "$new_version" == "$old_version" ]]; then
+    echo "Up to date"
+    exit 0
+fi
+
+update-source-version scarab "$new_version"
+
+$(nix-build . -A scarab.fetch-deps --no-out-link)
diff --git a/nixpkgs/pkgs/tools/games/slipstream/default.nix b/nixpkgs/pkgs/tools/games/slipstream/default.nix
new file mode 100644
index 000000000000..250ef7c2f357
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/slipstream/default.nix
@@ -0,0 +1,49 @@
+{ lib, fetchFromGitHub, makeWrapper, maven, jdk }:
+let
+  mavenWithJdk = maven.override { inherit jdk; };
+in
+mavenWithJdk.buildMavenPackage rec {
+  pname = "slipstream";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "Vhati";
+    repo = "Slipstream-Mod-Manager";
+    rev = "v${version}";
+    hash = "sha256-F+o94Oh9qxVdfgwdmyOv+WZl1BjQuzhQWaVrAgScgIU=";
+  };
+
+  mvnHash = "sha256-zqXbLnLmTZHzwH+vgGASR7Jsz1t173DmQMIe2R6B6Ic=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/java
+    install -Dm644 target/ftl-mod-manager-${version}.jar $out/share/java
+    install -Dm644 target/modman.jar $out/share/java
+
+    # slipstream is very finniky about having specific
+    # folders at startup, so wrapper creates them for it.
+    # this is because slipstream expects to be started from
+    # archive it comes from, but we can't do that since
+    # we need the mods directory to be writable.
+    # see: https://github.com/Vhati/Slipstream-Mod-Manager/blob/85cad4ffbef8583d908b189204d7d22a26be43f8/src/main/java/net/vhati/modmanager/cli/SlipstreamCLI.java#L105
+    makeWrapper ${jdk}/bin/java $out/bin/${pname} \
+      --run '_dir="''${XDG_DATA_HOME:-$HOME/.local/share}/slipstream"' \
+      --run 'mkdir -p $_dir/{mods,backup}' \
+      --run 'cd $_dir' \
+      --append-flags "-jar $out/share/java/modman.jar"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A mod manager for FTL: Faster Than Light";
+    homepage = "https://github.com/Vhati/Slipstream-Mod-Manager";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ mib ];
+    mainProgram = "slipstream";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/steam-acf/default.nix b/nixpkgs/pkgs/tools/games/steam-acf/default.nix
new file mode 100644
index 000000000000..ea6572216104
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/steam-acf/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "steam-acf";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "chisui";
+    repo = "acf";
+    rev = "v${version}";
+    sha256 = "16q3md7cvdz37pqm1sda81rkjf249xbsrlpdl639r06p7f4nqlc2";
+  };
+
+  cargoSha256 = "0fzlvn0sl7613hpsb7ncykmcl53dgl8rzsg317nwkj2w679q4xq6";
+
+  meta = with lib; {
+    description = "Tool to convert Steam .acf files to JSON";
+    homepage = "https://github.com/chisui/acf";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ chisui ];
+    mainProgram = "acf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/steam-rom-manager/default.nix b/nixpkgs/pkgs/tools/games/steam-rom-manager/default.nix
new file mode 100644
index 000000000000..89af86fe7511
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/steam-rom-manager/default.nix
@@ -0,0 +1,29 @@
+{ lib, appimageTools, fetchurl }:
+
+appimageTools.wrapType2 rec {
+  name = "steam-rom-manager";
+  version = "2.4.17";
+
+  src = fetchurl {
+    url = "https://github.com/SteamGridDB/steam-rom-manager/releases/download/v${version}/Steam-ROM-Manager-${version}.AppImage";
+    sha256 = "sha256-NRqryY9v6s51/eoCdqqID6m5Osx5PPChKGxjmLhh7ac=";
+  };
+
+  extraInstallCommands = let
+    appimageContents = appimageTools.extract { inherit name src; };
+    in ''
+      install -m 444 -D ${appimageContents}/${name}.desktop -t $out/share/applications
+      substituteInPlace $out/share/applications/${name}.desktop \
+        --replace 'Exec=AppRun' 'Exec=${name}'
+      cp -r ${appimageContents}/usr/share/icons $out/share
+    '';
+
+  meta = with lib; {
+    description = "An app for managing ROMs in Steam";
+    homepage = "https://github.com/SteamGridDB/steam-rom-manager";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ squarepear ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "steam-rom-manager";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/steamback/default.nix b/nixpkgs/pkgs/tools/games/steamback/default.nix
new file mode 100644
index 000000000000..42e5ec3b2ef9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/steamback/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, pythonRelaxDepsHook
+, setuptools
+, setuptools-scm
+, wheel
+, pillow
+, psutil
+, async-tkinter-loop
+, timeago
+, platformdirs
+, sv-ttk
+}:
+
+buildPythonApplication rec {
+  pname = "steamback";
+  version = "0.3.6";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-hvMPSxIfwwQqo80JCpYhcbVY4kXs5jWtjjafVSMrw6o=";
+  };
+
+  nativeBuildInputs = [
+    pythonRelaxDepsHook
+    setuptools-scm
+    wheel
+  ];
+
+  buildInputs = [
+    setuptools
+    pillow
+  ];
+
+  propagatedBuildInputs = [
+    psutil
+    async-tkinter-loop
+    timeago
+    platformdirs
+    sv-ttk
+  ];
+
+  pythonRelaxDeps = [
+    "async-tkinter-loop"
+    "platformdirs"
+    "Pillow"
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    $out/bin/${pname} --help
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "A Decky plugin to add versioned save-game snapshots to Steam-cloud enabled games";
+    homepage = "https://github.com/geeksville/steamback";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ AngryAnt ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/steamtinkerlaunch/default.nix b/nixpkgs/pkgs/tools/games/steamtinkerlaunch/default.nix
new file mode 100644
index 000000000000..4f37109f5437
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/steamtinkerlaunch/default.nix
@@ -0,0 +1,61 @@
+{ bash
+, gawk
+, git
+, gnugrep
+, fetchFromGitHub
+, lib
+, makeWrapper
+, stdenv
+, unixtools
+, unzip
+, wget
+, xdotool
+, xorg
+, yad
+}:
+
+stdenv.mkDerivation rec {
+  pname = "steamtinkerlaunch";
+  version = "12.12";
+
+  src = fetchFromGitHub {
+    owner = "sonic2kk";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-oigHNfg5rHxRabwUs66ye+chJzivmCIw8mg/GaJLPkg=";
+  };
+
+  # hardcode PROGCMD because #150841
+  postPatch = ''
+    substituteInPlace steamtinkerlaunch --replace 'PROGCMD="''${0##*/}"' 'PROGCMD="steamtinkerlaunch"'
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installFlags = [ "PREFIX=\${out}" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/steamtinkerlaunch --prefix PATH : ${lib.makeBinPath [
+      bash
+      gawk
+      git
+      gnugrep
+      unixtools.xxd
+      unzip
+      wget
+      xdotool
+      xorg.xprop
+      xorg.xrandr
+      xorg.xwininfo
+      yad
+    ]}
+  '';
+
+  meta = with lib; {
+    description = "Linux wrapper tool for use with the Steam client for custom launch options and 3rd party programs";
+    homepage = "https://github.com/sonic2kk/steamtinkerlaunch";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ urandom ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/ukmm/Cargo.lock b/nixpkgs/pkgs/tools/games/ukmm/Cargo.lock
new file mode 100644
index 000000000000..9872fa564617
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/ukmm/Cargo.lock
@@ -0,0 +1,5793 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "Inflector"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
+
+[[package]]
+name = "ab_glyph"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39"
+dependencies = [
+ "ab_glyph_rasterizer",
+ "owned_ttf_parser",
+]
+
+[[package]]
+name = "ab_glyph_rasterizer"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
+
+[[package]]
+name = "accesskit"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3083ac5a97521e35388ca80cf365b6be5210962cc59f11ee238cd92ac2fa9524"
+dependencies = [
+ "enumset",
+ "kurbo",
+ "serde",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "once_cell",
+ "serde",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aliasable"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
+
+[[package]]
+name = "aligned"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80a21b9440a626c7fc8573a9e3d3a06b75c7c97754c2949bc7857b90353ca655"
+dependencies = [
+ "as-slice",
+]
+
+[[package]]
+name = "almost"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3aa2999eb46af81abb65c2d30d446778d7e613b60bbf4e174a027e80f90a3c14"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "anyhow_ext"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a135cb522bf5b2254ed712979bc242f60c13f7906c1e4585d5fef36ae9017528"
+dependencies = [
+ "anyhow",
+]
+
+[[package]]
+name = "arboard"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854"
+dependencies = [
+ "clipboard-win",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "once_cell",
+ "parking_lot",
+ "thiserror",
+ "winapi",
+ "x11rb",
+]
+
+[[package]]
+name = "array-init"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc"
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "as-slice"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "astrolabe"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f751fcf1d5272d514a83197d8440d6c4527cc5ba992713f93b666eba556f92c"
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "futures-lite",
+ "log",
+ "parking",
+ "polling",
+ "rustix",
+ "slab",
+ "socket2",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "atomic_refcell"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79d6dc922a2792b006573f60b2648076355daeae5ce9cb59507e5908c9625d31"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "auto-enum"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c70bf3f7ad3d6a1eb8d7366314ae6c7f12ac27560e21692574564a2ce06b75e1"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "binrw"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab81d22cbd2d745852348b2138f3db2103afa8ce043117a374581926a523e267"
+dependencies = [
+ "array-init",
+ "binrw_derive",
+ "bytemuck",
+]
+
+[[package]]
+name = "binrw_derive"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6b019a3efebe7f453612083202887b6f1ace59e20d010672e336eea4ed5be97"
+dependencies = [
+ "either",
+ "owo-colors",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bit_field"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-sys"
+version = "0.1.0-beta.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146"
+dependencies = [
+ "objc-sys",
+]
+
+[[package]]
+name = "block2"
+version = "0.2.0-alpha.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42"
+dependencies = [
+ "block-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "botw-utils"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92fcbb05a52a1b8cbb62f63f12a2d575aa89a35704f90e929ba5522a6550f634"
+dependencies = [
+ "include-flate",
+ "once_cell",
+ "regex",
+ "roead",
+ "serde_json",
+ "twox-hash",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8"
+
+[[package]]
+name = "bytecount"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "byteordered"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a90ff53bdca087f5c3ebf666edb0aaf3cd17c145b6db177f305407b0370de9a9"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "calloop"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a59225be45a478d772ce015d9743e49e92798ece9e34eda9a6aa2a6a7f40192"
+dependencies = [
+ "log",
+ "nix 0.25.1",
+ "slotmap",
+ "thiserror",
+ "vec_map",
+]
+
+[[package]]
+name = "camino"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "catppuccin-egui"
+version = "1.0.2"
+source = "git+https://github.com/NiceneNerd/egui-catppuccin#23adfdba9f43e35ed1f0656df654cb04cc0c0e52"
+dependencies = [
+ "egui",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
+[[package]]
+name = "cgl"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
+dependencies = [
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics",
+ "foreign-types 0.3.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6"
+dependencies = [
+ "bitflags",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.3.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "codepage-437"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e40c1169585d8d08e5675a39f2fc056cd19a258fc4cba5e3bbf4a9c1026de535"
+dependencies = [
+ "csv",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color-hex"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecdffb913a326b6c642290a0d0ec8e8d6597291acdc07cc4c9cb4b3635d44cf9"
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "configparser"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5458d9d1a587efaf5091602c59d299696a3877a439c8f6d461a2d3cce11df87a"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "foreign-types 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "core-text"
+version = "19.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25"
+dependencies = [
+ "core-foundation",
+ "core-graphics",
+ "foreign-types 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49fc9a695bca7f35f5f4c15cddc84415f66a74ea78eef08e90c5024f2b540e23"
+dependencies = [
+ "crc-catalog 1.1.1",
+]
+
+[[package]]
+name = "crc"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe"
+dependencies = [
+ "crc-catalog 2.2.0",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403"
+
+[[package]]
+name = "crc-catalog"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset 0.8.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossfont"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21fd3add36ea31aba1520aa5288714dd63be506106753226d0eb387a93bc9c45"
+dependencies = [
+ "cocoa",
+ "core-foundation",
+ "core-foundation-sys",
+ "core-graphics",
+ "core-text",
+ "dwrote",
+ "foreign-types 0.5.0",
+ "freetype-rs",
+ "libc",
+ "log",
+ "objc",
+ "once_cell",
+ "pkg-config",
+ "servo-fontconfig",
+ "winapi",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "csv"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad"
+dependencies = [
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ctor"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd4056f63fce3b82d852c3da92b08ea59959890813a7f4ce9c0ff85b10cf301b"
+dependencies = [
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "cty"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+
+[[package]]
+name = "cvt"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2ae9bf77fbf2d39ef573205d554d87e86c12f1994e9ea335b0651b9b278bcf1"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "scratch",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core 0.13.4",
+ "darling_macro 0.13.4",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c99d16b88c92aef47e58dadd53e87b4bd234c29934947a6cec8b466300f99b"
+dependencies = [
+ "darling_core 0.20.0",
+ "darling_macro 0.20.0",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "strsim 0.10.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ea05d2fcb27b53f7a98faddaf5f2914760330ab7703adfc9df13332b42189f9"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "strsim 0.10.0",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core 0.13.4",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bfb82b62b1b8a2a9808fb4caf844ede819a76cfc23b2827d7f94eefb49551eb"
+dependencies = [
+ "darling_core 0.20.0",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+ "rayon",
+ "serde",
+]
+
+[[package]]
+name = "data-url"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30bfce702bcfa94e906ef82421f2c0e61c076ad76030c16ee5d2e9a32fe193"
+dependencies = [
+ "matches",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "dircpy"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10b6622b9d0dc20c70e74ff24c56493278d7d9299ac8729deb923703616e5a7e"
+dependencies = [
+ "jwalk 0.6.2",
+ "log",
+ "walkdir",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs2"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4049c5941d42b500fab4dbe85341aa7eb7b533e2c678529db3c1e88ed1aba8b5"
+dependencies = [
+ "cfg-if 0.1.10",
+ "dirs-sys",
+]
+
+[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dwrote"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "serde",
+ "serde_derive",
+ "winapi",
+ "wio",
+]
+
+[[package]]
+name = "ecolor"
+version = "0.20.0"
+source = "git+https://github.com/NiceneNerd/egui#3803a3223e98b3e50dfd858aa9e7fd5c6615dc09"
+dependencies = [
+ "bytemuck",
+ "color-hex",
+ "serde",
+]
+
+[[package]]
+name = "eframe"
+version = "0.20.0"
+source = "git+https://github.com/NiceneNerd/egui#3803a3223e98b3e50dfd858aa9e7fd5c6615dc09"
+dependencies = [
+ "bytemuck",
+ "egui",
+ "egui-winit",
+ "egui_glow",
+ "glow",
+ "glutin",
+ "js-sys",
+ "percent-encoding",
+ "raw-window-handle 0.5.2",
+ "tracing",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winit",
+]
+
+[[package]]
+name = "egui"
+version = "0.20.0"
+source = "git+https://github.com/NiceneNerd/egui#3803a3223e98b3e50dfd858aa9e7fd5c6615dc09"
+dependencies = [
+ "accesskit",
+ "ahash",
+ "epaint",
+ "nohash-hasher",
+ "ron",
+ "serde",
+ "tracing",
+]
+
+[[package]]
+name = "egui-notify"
+version = "0.4.0"
+source = "git+https://github.com/NiceneNerd/egui-notify#ae2c44477b154133037f04f1adf8df60c2f0dc53"
+dependencies = [
+ "egui",
+]
+
+[[package]]
+name = "egui-winit"
+version = "0.20.0"
+source = "git+https://github.com/NiceneNerd/egui#3803a3223e98b3e50dfd858aa9e7fd5c6615dc09"
+dependencies = [
+ "arboard",
+ "egui",
+ "instant",
+ "smithay-clipboard",
+ "tracing",
+ "webbrowser",
+ "winit",
+]
+
+[[package]]
+name = "egui_commonmark"
+version = "0.6.0"
+source = "git+https://github.com/NiceneNerd/egui_commonmark#a3cde22510be11330467d920d8fdd379964f260d"
+dependencies = [
+ "egui",
+ "ehttp",
+ "image",
+ "pulldown-cmark",
+ "resvg 0.20.0",
+ "tiny-skia 0.6.6",
+ "url",
+ "usvg 0.20.0",
+]
+
+[[package]]
+name = "egui_dock"
+version = "0.2.1"
+source = "git+https://github.com/NiceneNerd/egui_dock#0dffb443c6dcc19bc5713b5f8ad2d4b4abd44c9c"
+dependencies = [
+ "egui",
+ "serde",
+]
+
+[[package]]
+name = "egui_extras"
+version = "0.20.0"
+source = "git+https://github.com/NiceneNerd/egui#3803a3223e98b3e50dfd858aa9e7fd5c6615dc09"
+dependencies = [
+ "egui",
+ "image",
+ "resvg 0.23.0",
+ "serde",
+ "tiny-skia 0.6.6",
+ "usvg 0.23.0",
+]
+
+[[package]]
+name = "egui_glow"
+version = "0.20.0"
+source = "git+https://github.com/NiceneNerd/egui#3803a3223e98b3e50dfd858aa9e7fd5c6615dc09"
+dependencies = [
+ "bytemuck",
+ "egui",
+ "glow",
+ "memoffset 0.6.5",
+ "tracing",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "ehttp"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80b69a6f9168b96c0ae04763bec27a8b06b34343c334dd2703a4ec21f0f5e110"
+dependencies = [
+ "js-sys",
+ "ureq",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "emath"
+version = "0.20.0"
+source = "git+https://github.com/NiceneNerd/egui#3803a3223e98b3e50dfd858aa9e7fd5c6615dc09"
+dependencies = [
+ "bytemuck",
+ "serde",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
+dependencies = [
+ "heck",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enum_dispatch"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11f36e95862220b211a6e2aa5eca09b4fa391b13cd52ceb8035a24bf65a79de2"
+dependencies = [
+ "once_cell",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enumset"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59b025475ad197bd8b4a9bdce339216b6cf3bd568bf2e107c286b51613f0b3cf"
+dependencies = [
+ "enumset_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumset_derive"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c2852ff17a4c9a2bb2abbca3074737919cb05dc24b0a8ca9498081a7033dd6"
+dependencies = [
+ "darling 0.20.0",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "epaint"
+version = "0.20.0"
+source = "git+https://github.com/NiceneNerd/egui#3803a3223e98b3e50dfd858aa9e7fd5c6615dc09"
+dependencies = [
+ "ab_glyph",
+ "ahash",
+ "atomic_refcell",
+ "bytemuck",
+ "ecolor",
+ "emath",
+ "nohash-hasher",
+ "parking_lot",
+ "serde",
+]
+
+[[package]]
+name = "erased-serde"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f2b0c2380453a92ea8b6c8e5f64ecaafccddde8ceab55ff7a8ac1029f894569"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-chain"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "expat-sys"
+version = "2.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa"
+dependencies = [
+ "cmake",
+ "pkg-config",
+]
+
+[[package]]
+name = "exr"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4"
+dependencies = [
+ "bit_field",
+ "flume",
+ "half",
+ "lebe",
+ "miniz_oxide 0.6.2",
+ "rayon-core",
+ "smallvec",
+ "zune-inflate",
+]
+
+[[package]]
+name = "fancy-regex"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d6b8560a05112eb52f04b00e5d3790c0dd75d9d980eb8a122fb23b92a623ccf"
+dependencies = [
+ "bit-set",
+ "regex",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fdeflate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "filetime_creation"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d961767622336521cc48b3de810fce4edbf02d0c21079d78f3a6eeaf45b9450"
+dependencies = [
+ "cfg-if 1.0.0",
+ "filetime",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+
+[[package]]
+name = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "pin-project",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "font-loader"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c49d6b4c11dca1a1dd931a34a9f397e2da91abe3de4110505f3530a80e560b52"
+dependencies = [
+ "core-foundation",
+ "core-text",
+ "libc",
+ "servo-fontconfig",
+ "winapi",
+]
+
+[[package]]
+name = "fontconfig-parser"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ab2e12762761366dcb876ab8b6e0cfa4797ddcd890575919f008b5ba655672a"
+dependencies = [
+ "roxmltree 0.18.0",
+]
+
+[[package]]
+name = "fontdb"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b07f5c05414a0d8caba4c17eef8dc8b5c8955fc7c68d324191c7a56d3f3449"
+dependencies = [
+ "log",
+ "memmap2",
+ "ttf-parser 0.12.3",
+]
+
+[[package]]
+name = "fontdb"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52186a39c335aa6f79fc0bf1c3cf854870b6ad4e50a7bb8a59b4ba1331f478a"
+dependencies = [
+ "fontconfig-parser",
+ "log",
+ "memmap2",
+ "ttf-parser 0.17.1",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared 0.1.1",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
+dependencies = [
+ "foreign-types-macros",
+ "foreign-types-shared 0.3.1",
+]
+
+[[package]]
+name = "foreign-types-macros"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "freetype-rs"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74eadec9d0a5c28c54bb9882e54787275152a4e36ce206b45d7451384e5bf5fb"
+dependencies = [
+ "bitflags",
+ "freetype-sys",
+ "libc",
+]
+
+[[package]]
+name = "freetype-sys"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a"
+dependencies = [
+ "cmake",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "fs-err"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541"
+
+[[package]]
+name = "fs_at"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0504bab20f4487fdf1c20ed48e3e32c7951827a778cd3dfded1768f90b6abb0a"
+dependencies = [
+ "aligned",
+ "cfg-if 1.0.0",
+ "cvt",
+ "libc",
+ "nix 0.26.2",
+ "smart-default",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "ghost"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e77ac7b51b8e6313251737fcef4b1c01a2ea102bde68415b62c0ee9268fec357"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "gif"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "gl_generator"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
+dependencies = [
+ "khronos_api",
+ "log",
+ "xml-rs",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "glow"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919"
+dependencies = [
+ "js-sys",
+ "slotmap",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "glutin"
+version = "0.30.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f89bab9ec7715de13d5d5402238e66f48e3a5ae636ebb45aba4013c962e2ff15"
+dependencies = [
+ "bitflags",
+ "cfg_aliases",
+ "cgl",
+ "core-foundation",
+ "dispatch",
+ "glutin_egl_sys",
+ "glutin_glx_sys",
+ "glutin_wgl_sys",
+ "libloading",
+ "objc2",
+ "once_cell",
+ "raw-window-handle 0.5.2",
+ "wayland-sys 0.30.1",
+ "windows-sys 0.45.0",
+ "x11-dl",
+]
+
+[[package]]
+name = "glutin_egl_sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5aaf0abb5c4148685b33101ae326a207946b4d3764d6cdc79f8316cdaa8367d"
+dependencies = [
+ "gl_generator",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "glutin_glx_sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b53cb5fe568964aa066a3ba91eac5ecbac869fb0842cd0dc9e412434f1a1494"
+dependencies = [
+ "gl_generator",
+ "x11-dl",
+]
+
+[[package]]
+name = "glutin_wgl_sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef89398e90033fc6bc65e9bd42fd29bbbfd483bda5b56dc5562f455550618165"
+dependencies = [
+ "gl_generator",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "half"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "http_req"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5825a38a94c3aff23ea7f60572726829ef055ca02fc64899c3e2e7db2ce4f03f"
+dependencies = [
+ "rustls 0.19.1",
+ "unicase",
+ "webpki 0.21.4",
+ "webpki-roots 0.21.1",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows 0.48.0",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.24.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "exr",
+ "gif 0.12.0",
+ "jpeg-decoder 0.3.0",
+ "num-rational",
+ "num-traits",
+ "png",
+ "qoi",
+ "tiff",
+]
+
+[[package]]
+name = "include-flate"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e11569346406931d20276cc460215ee2826e7cad43aa986999cb244dd7adb0"
+dependencies = [
+ "include-flate-codegen-exports",
+ "lazy_static",
+ "libflate",
+]
+
+[[package]]
+name = "include-flate-codegen"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a7d6e1419fa3129eb0802b4c99603c0d425c79fb5d76191d5a20d0ab0d664e8"
+dependencies = [
+ "libflate",
+ "proc-macro-hack",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "include-flate-codegen-exports"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75657043ffe3d8280f1cb8aef0f505532b392ed7758e0baeac22edadcee31a03"
+dependencies = [
+ "include-flate-codegen",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+ "serde",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "inventory"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7741301a6d6a9b28ce77c0fb77a4eb116b6bc8f3bef09923f7743d059c4157d3"
+dependencies = [
+ "ctor",
+ "ghost",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if 1.0.0",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "join_str"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de046f45ca45d4526a5d340223c0e03cef1f06457bee78a523d5ce55894ac0a"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9478aa10f73e7528198d75109c8be5cd7d15fb530238040148d5f9a22d4c5b3b"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "junction"
+version = "0.2.0"
+source = "git+https://github.com/NiceneNerd/junction#84e0dbd793645acf2702de283f78e8f6e0043ea5"
+dependencies = [
+ "scopeguard",
+ "winapi",
+]
+
+[[package]]
+name = "jwalk"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dbcda57db8b6dc067e589628b7348639014e793d9e8137d8cf215e8b133a0bd"
+dependencies = [
+ "crossbeam",
+ "rayon",
+]
+
+[[package]]
+name = "jwalk"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2735847566356cd2179a2a38264839308f7079fa96e6bd5a42d740460e003c56"
+dependencies = [
+ "crossbeam",
+ "rayon",
+]
+
+[[package]]
+name = "khronos_api"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
+
+[[package]]
+name = "kurbo"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449"
+dependencies = [
+ "arrayvec 0.7.2",
+ "serde",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lebe"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
+
+[[package]]
+name = "lenient_semver"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de8de3f4f3754c280ce1c8c42ed8dd26a9c8385c2e5ad4ec5a77e774cea9c1ec"
+dependencies = [
+ "lenient_semver_parser",
+ "lenient_version",
+ "semver",
+]
+
+[[package]]
+name = "lenient_semver_parser"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f650c1d024ddc26b4bb79c3076b30030f2cf2b18292af698c81f7337a64d7d6"
+dependencies = [
+ "lenient_semver_version_builder",
+ "semver",
+]
+
+[[package]]
+name = "lenient_semver_version_builder"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9049f8ff49f75b946f95557148e70230499c8a642bf2d6528246afc7d0282d17"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "lenient_version"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bad7b41cc0ad9b8a9f8d8fcb7c2ab6703a6da4b369cbb7e3a63ee0840769b4eb"
+dependencies = [
+ "lenient_semver_parser",
+ "lenient_semver_version_builder",
+ "serde",
+]
+
+[[package]]
+name = "lexical"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6"
+dependencies = [
+ "lexical-core",
+]
+
+[[package]]
+name = "lexical-core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
+dependencies = [
+ "lexical-parse-float",
+ "lexical-parse-integer",
+ "lexical-util",
+ "lexical-write-float",
+ "lexical-write-integer",
+]
+
+[[package]]
+name = "lexical-parse-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
+dependencies = [
+ "lexical-parse-integer",
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-parse-integer"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-util"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc"
+dependencies = [
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862"
+dependencies = [
+ "lexical-util",
+ "lexical-write-integer",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-integer"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.142"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
+
+[[package]]
+name = "libflate"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97822bf791bd4d5b403713886a5fbe8bf49520fe78e323b0dc480ca1a03e50b0"
+dependencies = [
+ "adler32",
+ "crc32fast",
+ "libflate_lz77",
+]
+
+[[package]]
+name = "libflate_lz77"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a52d3a8bfc85f250440e4424db7d857e241a3aebbbe301f3eb606ab15c39acbf"
+dependencies = [
+ "rle-decode-fast",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi",
+]
+
+[[package]]
+name = "libmimalloc-sys"
+version = "0.1.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4ac0e912c8ef1b735e92369695618dc5b1819f5a7bf3f167301a3ba1cea515e"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "lighter"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a59ce94dd95c6363bfe7fde22951e2a97c53d0164373ae4c8996028c91f3ac5"
+dependencies = [
+ "lighter-derive",
+]
+
+[[package]]
+name = "lighter-derive"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38ce0407b25ce2ba0e9ff4ec2cf60c2b499da0658fe6b6745fb85dfbb56fae12"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+ "serde",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "lzma-rust"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808dc37ccba979c213304880eadaab444bb522a5fe79acca9e90ec62377125c2"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "mach2"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memmap2"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mimalloc"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e2894987a3459f3ffb755608bd82188f8ed00d0ae077f1edea29c068d639d98"
+dependencies = [
+ "libmimalloc-sys",
+]
+
+[[package]]
+name = "minicbor"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a20020e8e2d1881d8736f64011bb5ff99f1db9947ce3089706945c8915695cb"
+dependencies = [
+ "minicbor-derive",
+]
+
+[[package]]
+name = "minicbor-derive"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8608fb1c805b5b6b3d5ab7bd95c40c396df622b64d77b2d621a5eae1eed050ee"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "minicbor-ser"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0834b86a9c56311671913d56f640d7f0b6da803df61121661cc890f0edc0eb1"
+dependencies = [
+ "minicbor",
+ "serde",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "mmap-rs"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07e0a1864d403b362a53630123b970d4c59074a225002955b781d95a1a831631"
+dependencies = [
+ "bitflags",
+ "combine",
+ "libc",
+ "mach2",
+ "nix 0.24.3",
+ "sysctl",
+ "thiserror",
+ "widestring",
+ "windows 0.39.0",
+]
+
+[[package]]
+name = "moka"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0d3b8e76a2e4b17de765db9432e377a171c42fbe0512b8bc860ff1bfe2e273b"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "num_cpus",
+ "once_cell",
+ "parking_lot",
+ "quanta",
+ "rustc_version",
+ "scheduled-thread-pool",
+ "skeptic",
+ "smallvec",
+ "tagptr",
+ "thiserror",
+ "triomphe",
+ "uuid",
+]
+
+[[package]]
+name = "msbt"
+version = "0.1.1"
+source = "git+https://github.com/NiceneNerd/msbt-rs#9837597fe8e8349b6b079a0d17b9ac224df3984d"
+dependencies = [
+ "byteordered",
+ "thiserror",
+]
+
+[[package]]
+name = "msyt"
+version = "1.2.1"
+source = "git+https://github.com/NiceneNerd/msyt?rev=12e4d95fb6480f445284f37706db7bfa8351dc06#12e4d95fb6480f445284f37706db7bfa8351dc06"
+dependencies = [
+ "anyhow",
+ "base64 0.10.1",
+ "byteordered",
+ "clap",
+ "glob",
+ "indexmap",
+ "msbt",
+ "rayon",
+ "serde",
+ "serde_derive",
+ "serde_yaml 0.8.26",
+]
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "ndk"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
+dependencies = [
+ "bitflags",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "raw-window-handle 0.5.2",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-glue"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0434fabdd2c15e0aab768ca31d5b7b333717f03cf02037d5a0a3ff3c278ed67f"
+dependencies = [
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-macro",
+ "ndk-sys",
+ "once_cell",
+ "parking_lot",
+]
+
+[[package]]
+name = "ndk-macro"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c"
+dependencies = [
+ "darling 0.13.4",
+ "proc-macro-crate",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ndk-sys"
+version = "0.4.1+23.1.7779620"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
+dependencies = [
+ "autocfg",
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "static_assertions",
+]
+
+[[package]]
+name = "nohash-hasher"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "normpath"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc-sys"
+version = "0.2.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7"
+
+[[package]]
+name = "objc2"
+version = "0.3.0-beta.3.patch-leaks.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468"
+dependencies = [
+ "block2",
+ "objc-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "objc2-encode"
+version = "2.0.0-pre.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512"
+dependencies = [
+ "objc-sys",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "open"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8"
+dependencies = [
+ "pathdiff",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "ouroboros"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db"
+dependencies = [
+ "aliasable",
+ "ouroboros_macro",
+]
+
+[[package]]
+name = "ouroboros_macro"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7"
+dependencies = [
+ "Inflector",
+ "proc-macro-error",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "owned_ttf_parser"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4"
+dependencies = [
+ "ttf-parser 0.19.0",
+]
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "pango-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "path-slash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "phf"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+dependencies = [
+ "phf_macros",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pico-args"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468"
+
+[[package]]
+name = "pico-args"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "piz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "898b071c1938a2c92b95c18708cbf38f2566a01f0ab9dd7bdf4329987e5c2e17"
+dependencies = [
+ "camino",
+ "chrono",
+ "codepage-437",
+ "crc32fast",
+ "flate2",
+ "log",
+ "memchr",
+ "thiserror",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "png"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d9cc634bc78768157b5cbfe988ffcd1dcba95cd2b2f03a88316c08c6d00ed63"
+dependencies = [
+ "bitflags",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "qoi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "quanta"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cc73c42f9314c4bdce450c77e6f09ecbddefbeddb1b5979ded332a3913ded33"
+dependencies = [
+ "crossbeam-utils",
+ "libc",
+ "mach2",
+ "once_cell",
+ "raw-cpuid",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "quote"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+dependencies = [
+ "proc-macro2 0.4.30",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2 1.0.56",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "raw-cpuid"
+version = "10.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41"
+dependencies = [
+ "cty",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rctree"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ae028b272a6e99d9f8260ceefa3caa09300a8d6c8d2b2001316474bc52122e9"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.7.1",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23895cfadc1917fed9c6ed76a8c2903615fa3704f7493ff82b364c6540acc02b"
+dependencies = [
+ "aligned",
+ "cfg-if 1.0.0",
+ "cvt",
+ "fs_at",
+ "lazy_static",
+ "libc",
+ "normpath",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "resvg"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d94a32ca845cdda27237a40beba9bd3d3858ac8fc5356eb9442bdeecfe34d9e0"
+dependencies = [
+ "jpeg-decoder 0.1.22",
+ "log",
+ "pico-args 0.4.2",
+ "png",
+ "rgb",
+ "svgfilters",
+ "svgtypes",
+ "tiny-skia 0.6.6",
+ "usvg 0.20.0",
+]
+
+[[package]]
+name = "resvg"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34489194784b86c03c3d688258e2ba73f3c82700ba4673ee2ecad5ae540b9438"
+dependencies = [
+ "gif 0.11.4",
+ "jpeg-decoder 0.2.6",
+ "log",
+ "pico-args 0.5.0",
+ "png",
+ "rgb",
+ "svgfilters",
+ "svgtypes",
+ "tiny-skia 0.6.6",
+ "usvg 0.23.0",
+]
+
+[[package]]
+name = "rfd"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cb2988ec50c9bcdb0c012b89643a6094a35a785a37897211ee62e1639342f7b"
+dependencies = [
+ "async-io",
+ "block",
+ "dispatch",
+ "futures-util",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "js-sys",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "raw-window-handle 0.5.2",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "windows 0.44.0",
+]
+
+[[package]]
+name = "rgb"
+version = "0.8.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rle-decode-fast"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
+
+[[package]]
+name = "roead"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d6ee119334dbf298d9c144867d9a6f5475020e3acb2116175cc16867e436941"
+dependencies = [
+ "almost",
+ "base64 0.21.0",
+ "binrw",
+ "cxx",
+ "cxx-build",
+ "indexmap",
+ "join_str",
+ "lexical",
+ "num-integer",
+ "num-traits",
+ "once_cell",
+ "parking_lot",
+ "rustc-hash",
+ "ryml",
+ "serde",
+ "serde_json",
+ "smartstring",
+ "thiserror",
+]
+
+[[package]]
+name = "ron"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff"
+dependencies = [
+ "base64 0.13.1",
+ "bitflags",
+ "serde",
+]
+
+[[package]]
+name = "roxmltree"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "921904a62e410e37e215c40381b7117f830d9d89ba60ab5236170541dd25646b"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "roxmltree"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8f595a457b6b8c6cda66a48503e92ee8d19342f905948f29c383200ec9eb1d8"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "rstb"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7926d979e44948756fef61f532234b87422a313f85551de4775f1e4c16ef92a9"
+dependencies = [
+ "crc 2.1.0",
+ "include-flate",
+ "once_cell",
+ "phf",
+ "roead",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+dependencies = [
+ "base64 0.13.1",
+ "log",
+ "ring",
+ "sct 0.6.1",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct 0.7.0",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "rustybuzz"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44561062e583c4873162861261f16fd1d85fe927c4904d71329a4fe43dc355ef"
+dependencies = [
+ "bitflags",
+ "bytemuck",
+ "smallvec",
+ "ttf-parser 0.12.3",
+ "unicode-bidi-mirroring",
+ "unicode-ccc",
+ "unicode-general-category",
+ "unicode-script",
+]
+
+[[package]]
+name = "rustybuzz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a617c811f5c9a7060fe511d35d13bf5b9f0463ce36d63ce666d05779df2b4eba"
+dependencies = [
+ "bitflags",
+ "bytemuck",
+ "smallvec",
+ "ttf-parser 0.15.2",
+ "unicode-bidi-mirroring",
+ "unicode-ccc",
+ "unicode-general-category",
+ "unicode-script",
+]
+
+[[package]]
+name = "ryml"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d623f90d8843413059c3de3ae7ae1b2e445dba85293247f3494ac97475accfc0"
+dependencies = [
+ "auto-enum",
+ "cxx",
+ "cxx-build",
+ "thiserror",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "safe_arch"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ff3d6d9696af502cc3110dacce942840fb06ff4514cad92236ecc455f2ce05"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "sanitise-file-name"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19d36299972b96b8ae7e8f04ecbf75fb41a27bf3781af00abcf57609774cb911"
+
+[[package]]
+name = "scheduled-thread-pool"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19"
+dependencies = [
+ "parking_lot",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
+name = "sct"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sctk-adwaita"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61270629cc6b4d77ec1907db1033d5c2e1a404c412743621981a871dc9c12339"
+dependencies = [
+ "crossfont",
+ "log",
+ "smithay-client-toolkit",
+ "tiny-skia 0.7.0",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f02d8aa6e3c385bf084924f660ce2a3a6bd333ba55b35e8590b321f35d88513"
+dependencies = [
+ "base64 0.21.0",
+ "chrono",
+ "hex",
+ "indexmap",
+ "serde",
+ "serde_json",
+ "serde_with_macros",
+ "time 0.3.20",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edc7d5d3932fb12ce722ee5e64dd38c504efba37567f0c402f6ca728c3b8b070"
+dependencies = [
+ "darling 0.20.0",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "servo-fontconfig"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c"
+dependencies = [
+ "libc",
+ "servo-fontconfig-sys",
+]
+
+[[package]]
+name = "servo-fontconfig-sys"
+version = "5.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388"
+dependencies = [
+ "expat-sys",
+ "freetype-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "sevenz-rust"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1e99665d02305372743530ff8b84069ea54f4edee8eceb4c92f840e5664c7b3"
+dependencies = [
+ "bit-set",
+ "byteorder",
+ "crc 3.0.1",
+ "filetime_creation",
+ "js-sys",
+ "lzma-rust",
+ "sha2",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer",
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+ "opaque-debug",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f"
+
+[[package]]
+name = "simplecss"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "skeptic"
+version = "0.13.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8"
+dependencies = [
+ "bytecount",
+ "cargo_metadata",
+ "error-chain",
+ "glob",
+ "pulldown-cmark",
+ "tempfile",
+ "walkdir",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "smart-default"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eb01866308440fc64d6c44d9e86c5cc17adfe33c4d6eed55da9145044d0ffc1"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "smartstring"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
+dependencies = [
+ "autocfg",
+ "serde",
+ "static_assertions",
+ "version_check",
+]
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454"
+dependencies = [
+ "bitflags",
+ "calloop",
+ "dlib",
+ "lazy_static",
+ "log",
+ "memmap2",
+ "nix 0.24.3",
+ "pkg-config",
+ "wayland-client",
+ "wayland-cursor",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "smithay-clipboard"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8"
+dependencies = [
+ "smithay-client-toolkit",
+ "wayland-client",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "split-iter"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f2b15926089e5526bb2dd738a2eb0e59034356e06eb71e1cd912358c0e62c4d"
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "svgfilters"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "639abcebc15fdc2df179f37d6f5463d660c1c79cd552c12343a4600827a04bce"
+dependencies = [
+ "float-cmp",
+ "rgb",
+]
+
+[[package]]
+name = "svgtypes"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22975e8a2bac6a76bb54f898a6b18764633b00e780330f0b689f65afb3975564"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "syn"
+version = "0.15.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "unicode-xid",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syntect"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6c454c27d9d7d9a84c7803aaa3c50cd088d2906fe3c6e42da3209aa623576a8"
+dependencies = [
+ "bincode",
+ "bitflags",
+ "fancy-regex",
+ "flate2",
+ "fnv",
+ "lazy_static",
+ "once_cell",
+ "regex-syntax 0.6.29",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "thiserror",
+ "walkdir",
+ "yaml-rust",
+]
+
+[[package]]
+name = "sysctl"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed66d6a2ccbd656659289bc90767895b7abbdec897a0fc6031aca3ed1cb51d3e"
+dependencies = [
+ "bitflags",
+ "byteorder",
+ "enum-as-inner",
+ "libc",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0fe581ad25d11420b873cf9aedaca0419c2b411487b134d4d21065f3d092055"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml 0.7.3",
+ "version-compare",
+]
+
+[[package]]
+name = "tagptr"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417"
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5"
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "tiff"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471"
+dependencies = [
+ "flate2",
+ "jpeg-decoder 0.3.0",
+ "weezl",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tiny-skia"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d049bfef0eaa2521e75d9ffb5ce86ad54480932ae19b85f78bec6f52c4d30d78"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.5.2",
+ "bytemuck",
+ "cfg-if 1.0.0",
+ "png",
+ "safe_arch",
+]
+
+[[package]]
+name = "tiny-skia"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "642680569bb895b16e4b9d181c60be1ed136fa0c9c7f11d004daf053ba89bf82"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.5.2",
+ "bytemuck",
+ "cfg-if 1.0.0",
+ "png",
+ "safe_arch",
+ "tiny-skia-path",
+]
+
+[[package]]
+name = "tiny-skia-path"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c114d32f0c2ee43d585367cb013dfaba967ab9f62b90d9af0d696e955e70fa6c"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "triomphe"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1ee9bd9239c339d714d657fac840c6d2a4f9c45f4f9ec7b0975113458be78db"
+
+[[package]]
+name = "ttf-parser"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ae2f58a822f08abdaf668897e96a5656fe72f5a9ce66422423e8849384872e6"
+
+[[package]]
+name = "ttf-parser"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd"
+
+[[package]]
+name = "ttf-parser"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "375812fa44dab6df41c195cd2f7fecb488f6c09fbaafb62807488cefab642bff"
+
+[[package]]
+name = "ttf-parser"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44dcf002ae3b32cd25400d6df128c5babec3927cd1eb7ce813cfff20eb6c3746"
+
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if 1.0.0",
+ "rand",
+ "static_assertions",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "typetag"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6898cc6f6a32698cc3e14d5632a14d2b23ed9f7b11e6b8e05ce685990acc22"
+dependencies = [
+ "erased-serde",
+ "inventory",
+ "once_cell",
+ "serde",
+ "typetag-impl",
+]
+
+[[package]]
+name = "typetag-impl"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c3e1c30cedd24fc597f7d37a721efdbdc2b1acae012c1ef1218f4c7c2c0f3e7"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "uk-content"
+version = "0.10.1"
+dependencies = [
+ "anyhow",
+ "indexmap",
+ "itertools",
+ "join_str",
+ "lexical",
+ "lexical-core",
+ "lighter",
+ "mimalloc",
+ "minicbor-ser",
+ "msyt",
+ "roead",
+ "rstb",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "smartstring",
+ "thiserror",
+ "uk-content-derive",
+ "uk-ui",
+ "uk-ui-derive",
+ "uk-util",
+ "zstd",
+]
+
+[[package]]
+name = "uk-content-derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "uk-editor"
+version = "0.10.1"
+dependencies = [
+ "anyhow",
+ "eframe",
+ "flume",
+ "fs-err",
+ "jwalk 0.8.1",
+ "minicbor-ser",
+ "parking_lot",
+ "path-slash",
+ "rayon",
+ "rfd",
+ "roead",
+ "ron",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.21",
+ "uk-content",
+ "uk-manager",
+ "uk-mod",
+ "uk-ui",
+ "uk-ui-derive",
+ "uk-util",
+]
+
+[[package]]
+name = "uk-manager"
+version = "0.10.1"
+dependencies = [
+ "anyhow",
+ "anyhow_ext",
+ "dashmap",
+ "dircpy",
+ "dirs2",
+ "fs-err",
+ "join_str",
+ "junction",
+ "jwalk 0.8.1",
+ "lenient_semver",
+ "log",
+ "parking_lot",
+ "path-slash",
+ "rayon",
+ "remove_dir_all",
+ "roead",
+ "rstb",
+ "rustc-hash",
+ "sanitise-file-name",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "serde_yaml 0.9.21",
+ "sevenz-rust",
+ "smartstring",
+ "split-iter",
+ "tempfile",
+ "uk-content",
+ "uk-mod",
+ "uk-reader",
+ "uk-util",
+ "zip",
+]
+
+[[package]]
+name = "uk-mod"
+version = "0.10.1"
+dependencies = [
+ "anyhow",
+ "anyhow_ext",
+ "botw-utils",
+ "configparser",
+ "dashmap",
+ "enum_dispatch",
+ "env_logger",
+ "fs-err",
+ "indexmap",
+ "join_str",
+ "jwalk 0.8.1",
+ "lenient_semver",
+ "log",
+ "minicbor-ser",
+ "mmap-rs",
+ "ouroboros",
+ "parking_lot",
+ "path-slash",
+ "piz",
+ "rayon",
+ "roead",
+ "rstb",
+ "sanitise-file-name",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "serde_yaml 0.9.21",
+ "smartstring",
+ "tempfile",
+ "typetag",
+ "uk-content",
+ "uk-reader",
+ "uk-util",
+ "zip",
+ "zstd",
+]
+
+[[package]]
+name = "uk-reader"
+version = "0.10.1"
+dependencies = [
+ "anyhow",
+ "anyhow_ext",
+ "dashmap",
+ "fs-err",
+ "include-flate",
+ "join_str",
+ "log",
+ "minicbor-ser",
+ "moka",
+ "parking_lot",
+ "roead",
+ "serde",
+ "serde_json",
+ "smartstring",
+ "thiserror",
+ "typetag",
+ "uk-content",
+ "uk-util",
+ "zarchive",
+]
+
+[[package]]
+name = "uk-ui"
+version = "0.10.1"
+dependencies = [
+ "catppuccin-egui",
+ "color-hex",
+ "eframe",
+ "egui",
+ "egui_dock",
+ "egui_extras",
+ "font-loader",
+ "hex",
+ "indexmap",
+ "msyt",
+ "once_cell",
+ "rfd",
+ "roead",
+ "rustc-hash",
+ "serde",
+ "serde_yaml 0.9.21",
+ "smartstring",
+ "syntect",
+]
+
+[[package]]
+name = "uk-ui-derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "uk-util"
+version = "0.10.1"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "ukmm"
+version = "0.10.1"
+dependencies = [
+ "anyhow",
+ "anyhow_ext",
+ "astrolabe",
+ "dircpy",
+ "dirs2",
+ "eframe",
+ "egui-notify",
+ "egui_commonmark",
+ "env_logger",
+ "flume",
+ "fs-err",
+ "http_req",
+ "image",
+ "join_str",
+ "jwalk 0.8.1",
+ "lenient_semver",
+ "log",
+ "once_cell",
+ "open",
+ "parking_lot",
+ "rayon",
+ "remove_dir_all",
+ "rfd",
+ "roxmltree 0.18.0",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.21",
+ "smartstring",
+ "uk-content",
+ "uk-manager",
+ "uk-mod",
+ "uk-reader",
+ "uk-ui",
+ "uk-util",
+ "winres",
+ "xflags",
+ "zip",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-bidi-mirroring"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694"
+
+[[package]]
+name = "unicode-ccc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1"
+
+[[package]]
+name = "unicode-general-category"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07547e3ee45e28326cc23faac56d44f58f16ab23e413db526debce3b0bfd2742"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-script"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc"
+
+[[package]]
+name = "unicode-vo"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "ureq"
+version = "2.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "338b31dd1314f68f3aabf3ed57ab922df95ffcd902476ca7ba3c4ce7b908c46d"
+dependencies = [
+ "base64 0.13.1",
+ "flate2",
+ "log",
+ "once_cell",
+ "rustls 0.20.8",
+ "url",
+ "webpki 0.22.0",
+ "webpki-roots 0.22.6",
+]
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "usvg"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00f064d38f79ff69e3160e2fba884e4ede897061c15178041a3976371c68cab1"
+dependencies = [
+ "base64 0.13.1",
+ "data-url",
+ "flate2",
+ "float-cmp",
+ "fontdb 0.7.0",
+ "kurbo",
+ "log",
+ "pico-args 0.4.2",
+ "rctree",
+ "roxmltree 0.14.1",
+ "rustybuzz 0.4.0",
+ "simplecss",
+ "siphasher",
+ "svgtypes",
+ "ttf-parser 0.12.3",
+ "unicode-bidi",
+ "unicode-script",
+ "unicode-vo",
+ "xmlwriter",
+]
+
+[[package]]
+name = "usvg"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28a82565b5c96dcbb58c9bdbb6aa3642abd395a6a6b480658532c6f74c3c4b7a"
+dependencies = [
+ "base64 0.13.1",
+ "data-url",
+ "flate2",
+ "float-cmp",
+ "fontdb 0.9.3",
+ "kurbo",
+ "log",
+ "pico-args 0.5.0",
+ "rctree",
+ "roxmltree 0.14.1",
+ "rustybuzz 0.5.1",
+ "simplecss",
+ "siphasher",
+ "svgtypes",
+ "ttf-parser 0.15.2",
+ "unicode-bidi",
+ "unicode-script",
+ "unicode-vo",
+ "xmlwriter",
+]
+
+[[package]]
+name = "uuid"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote 1.0.26",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "wayland-client"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
+dependencies = [
+ "bitflags",
+ "downcast-rs",
+ "libc",
+ "nix 0.24.3",
+ "scoped-tls",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys 0.29.5",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
+dependencies = [
+ "nix 0.24.3",
+ "once_cell",
+ "smallvec",
+ "wayland-sys 0.29.5",
+]
+
+[[package]]
+name = "wayland-cursor"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661"
+dependencies = [
+ "nix 0.24.3",
+ "wayland-client",
+ "xcursor",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
+dependencies = [
+ "bitflags",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.26",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
+dependencies = [
+ "dlib",
+ "lazy_static",
+ "pkg-config",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06"
+dependencies = [
+ "dlib",
+ "lazy_static",
+ "log",
+ "pkg-config",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webbrowser"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b692165700260bbd40fbc5ff23766c03e339fbaca907aeea5cb77bf0a553ca83"
+dependencies = [
+ "core-foundation",
+ "dirs",
+ "jni",
+ "log",
+ "ndk-context",
+ "objc",
+ "raw-window-handle 0.5.2",
+ "url",
+ "web-sys",
+]
+
+[[package]]
+name = "webpki"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+dependencies = [
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
+dependencies = [
+ "windows_aarch64_msvc 0.39.0",
+ "windows_i686_gnu 0.39.0",
+ "windows_i686_msvc 0.39.0",
+ "windows_x86_64_gnu 0.39.0",
+ "windows_x86_64_msvc 0.39.0",
+]
+
+[[package]]
+name = "windows"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winit"
+version = "0.27.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb796d6fbd86b2fd896c9471e6f04d39d750076ebe5680a3958f00f5ab97657c"
+dependencies = [
+ "bitflags",
+ "cocoa",
+ "core-foundation",
+ "core-graphics",
+ "dispatch",
+ "instant",
+ "libc",
+ "log",
+ "mio",
+ "ndk",
+ "ndk-glue",
+ "objc",
+ "once_cell",
+ "parking_lot",
+ "percent-encoding",
+ "raw-window-handle 0.4.3",
+ "raw-window-handle 0.5.2",
+ "sctk-adwaita",
+ "smithay-client-toolkit",
+ "wasm-bindgen",
+ "wayland-client",
+ "wayland-protocols",
+ "web-sys",
+ "windows-sys 0.36.1",
+ "x11-dl",
+]
+
+[[package]]
+name = "winnow"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winres"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "wio"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
+dependencies = [
+ "libc",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507"
+dependencies = [
+ "gethostname",
+ "nix 0.24.3",
+ "winapi",
+ "winapi-wsapoll",
+ "x11rb-protocol",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67"
+dependencies = [
+ "nix 0.24.3",
+]
+
+[[package]]
+name = "xcursor"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "xflags"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4554b580522d0ca238369c16b8f6ce34524d61dafe7244993754bbd05f2c2ea"
+dependencies = [
+ "xflags-macros",
+]
+
+[[package]]
+name = "xflags-macros"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f58e7b3ca8977093aae6b87b6a7730216fc4c53a6530bab5c43a783cd810c1a8"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
+[[package]]
+name = "xmlparser"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd"
+
+[[package]]
+name = "xmlwriter"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zarchive"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85f12ed23294b7f5c9ddc2c880d4b79f110bfca5114af45fd3b454e068235d08"
+dependencies = [
+ "cxx",
+ "cxx-build",
+ "thiserror",
+ "tinyvec",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zip"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef"
+dependencies = [
+ "byteorder",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+]
+
+[[package]]
+name = "zstd"
+version = "0.12.3+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.5+zstd.1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.8+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "zune-inflate"
+version = "0.2.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
+dependencies = [
+ "simd-adler32",
+]
diff --git a/nixpkgs/pkgs/tools/games/ukmm/default.nix b/nixpkgs/pkgs/tools/games/ukmm/default.nix
new file mode 100644
index 000000000000..5f2d366e7f9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/ukmm/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wrapGAppsHook
+, atk
+, glib
+, gtk3-x11
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ukmm";
+  version = "0.10.1";
+
+  src = fetchFromGitHub {
+    owner = "NiceneNerd";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-suxUiJ++39aJe5XmAqh5sQajLzYoXo06k9mYw9rLU9E=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "catppuccin-egui-1.0.2" = "sha256-+ILfvDgZxe/QPJuVqIbRjaHNovpRAX+ym2QZ96glb4w=";
+      "ecolor-0.20.0" = "sha256-uTDkNRWsA1nM8Qhb0X2LjVDRuaW31vWxR8kDLL27BVE=";
+      "egui-notify-0.4.0" = "sha256-jybtUnv9xqzulZ5nfg+T1u8iTOsPjKGVVQ7JhwbvPdU=";
+      "egui_commonmark-0.6.0" = "sha256-hsVbtL2F+jifnzN6FgcDAVtLd1bVxTs0twn0SMvq9eU=";
+      "egui_dock-0.2.1" = "sha256-gGIO0boXKxLu0ABDH/uJhEZEoE/ql8E65LRmr0Xhv3s=";
+      "junction-0.2.0" = "sha256-6+pPp5wG1NoIj16Z+OvO4Pvy0jnQibn/A9cTaHAEVq4=";
+      "msbt-0.1.1" = "sha256-PtBs60xgYrwS7yPnRzXpExwYUD3azIaqObRnnJEL5dE=";
+      "msyt-1.2.1" = "sha256-aw5whCoQBhO0u9Fx2rTO1sRuPdGnAAlmPWv5q8CbQcI=";
+    };
+  };
+
+  RUSTC_BOOTSTRAP = true;
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    atk
+    glib
+    gtk3-x11
+  ];
+
+  cargoTestFlags = [
+    "--all"
+  ];
+
+  checkFlags = [
+    # Requires a game dump of Breath of the Wild
+    "--skip=gui::tasks::tests::remerge"
+    "--skip=pack::tests::pack_mod"
+    "--skip=project::tests::project_from_mod"
+    "--skip=tests::read_meta"
+    "--skip=unpack::tests::read_mod"
+    "--skip=unpack::tests::unpack_mod"
+    "--skip=unpack::tests::unzip_mod"
+
+    # Requires Clear Camera mod
+    "--skip=bnp::test_convert"
+  ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A new mod manager for The Legend of Zelda: Breath of the Wild";
+    homepage = "https://github.com/NiceneNerd/ukmm";
+    changelog = "https://github.com/NiceneNerd/ukmm/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/games/weidu/default.nix b/nixpkgs/pkgs/tools/games/weidu/default.nix
new file mode 100644
index 000000000000..580eea067031
--- /dev/null
+++ b/nixpkgs/pkgs/tools/games/weidu/default.nix
@@ -0,0 +1,64 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, elkhound
+, ocaml-ng
+, perl
+, which
+, gnumake42
+}:
+
+let
+  # 1. Needs ocaml >= 4.04 and <= 4.11 (patched against 4.14)
+  # 2. ocaml 4.10 defaults to safe (immutable) strings so we need a version with
+  #    that disabled as weidu is strongly dependent on mutable strings
+  ocaml' = ocaml-ng.ocamlPackages_4_14_unsafe_string.ocaml;
+
+in
+stdenv.mkDerivation rec {
+  pname = "weidu";
+  version = "249.00";
+
+  src = fetchFromGitHub {
+    owner = "WeiDUorg";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+vkKTzFZdAzY2dL+mZ4A0PDxhTKGgs9bfArz7S6b4m4=";
+  };
+
+  postPatch = ''
+    substitute sample.Configuration Configuration \
+      --replace /usr/bin ${lib.makeBinPath [ ocaml' ]} \
+      --replace elkhound ${elkhound}/bin/elkhound
+
+    mkdir -p obj/{.depend,x86_LINUX}
+
+    # undefined reference to `caml_hash_univ_param'
+    sed -i "20,21d;s/old_hash_param/hash_param/" hashtbl-4.03.0/myhashtbl.ml
+  '';
+
+  nativeBuildInputs = [ elkhound ocaml' perl which gnumake42 ];
+
+  buildFlags = [ "weidu" "weinstall" "tolower" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    for b in tolower weidu weinstall; do
+      install -Dm555 $b.asm.exe $out/bin/$b
+    done
+
+    install -Dm444 -t $out/share/doc/weidu README* COPYING
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "InfinityEngine Modding Engine";
+    homepage = "https://weidu.org";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ peterhoeg ];
+    # should work fine on both Darwin and Windows
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/aaphoto/default.nix b/nixpkgs/pkgs/tools/graphics/aaphoto/default.nix
new file mode 100644
index 000000000000..57744eb6b8ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/aaphoto/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchurl
+, jasper
+, libpng
+, libjpeg
+, zlib
+, llvmPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "aaphoto";
+  version = "0.45";
+
+  src = fetchurl {
+    url = "http://log69.com/downloads/aaphoto_sources_${version}.tar.gz";
+    sha256 = "sha256-06koJM7jNVFqVgqg6BmOZ74foqk6yjUIFnwULzPZ4go=";
+  };
+
+  nativeBuildInputs = lib.optionals stdenv.cc.isClang [
+    llvmPackages.openmp
+  ];
+
+  buildInputs = [
+    jasper
+    libpng
+    libjpeg
+    zlib
+  ];
+
+  postInstall = ''
+    install -Dm644 NEWS README REMARKS TODO -t $out/share/doc/${pname}
+  '';
+
+  meta = with lib; {
+    homepage = "http://log69.com/aaphoto_en.html";
+    description = "Free and open source automatic photo adjusting software";
+    longDescription = ''
+      Auto Adjust Photo tries to give a solution for the automatic color
+      correction of photos. This means setting the contrast, color balance,
+      saturation and gamma levels of the image by analization.
+
+      This can be a solution for those kind of users who are not able to manage
+      and correct images with complicated graphical softwares, or just simply
+      don't intend to spend a lot of time with manually correcting the images
+      one-by-one.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+    mainProgram = "aaphoto";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/adriconf/default.nix b/nixpkgs/pkgs/tools/graphics/adriconf/default.nix
new file mode 100644
index 000000000000..3d516f8ee113
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/adriconf/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, cmake
+, pkg-config
+, libdrm
+, libGL
+, atkmm
+, pcre
+, gtkmm4
+, pugixml
+, mesa
+, pciutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "adriconf";
+  version = "2.7.1";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "mesa";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-GRmra4P30EW9/WrG84HXYC3Rk4RD+BhuWtsSXvY/5Rk=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libdrm libGL atkmm pcre gtkmm4 pugixml mesa pciutils ];
+
+  cmakeFlags = [ "-DENABLE_UNIT_TESTS=off" ];
+
+  postInstall = ''
+    install -Dm444 ../flatpak/org.freedesktop.adriconf.metainfo.xml \
+      -t $out/share/metainfo/
+    install -Dm444 ../flatpak/org.freedesktop.adriconf.desktop \
+      -t $out/share/applications/
+    install -Dm444 ../flatpak/org.freedesktop.adriconf.png \
+      -t $out/share/icons/hicolor/256x256/apps/
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.freedesktop.org/mesa/adriconf/";
+    description = "A GUI tool used to configure open source graphics drivers";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ muscaln ];
+    platforms = platforms.linux;
+    mainProgram = "adriconf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/agi/default.nix b/nixpkgs/pkgs/tools/graphics/agi/default.nix
new file mode 100644
index 000000000000..501522b27ea3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/agi/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenvNoCC
+, fetchzip
+, autoPatchelfHook
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, wrapGAppsHook
+, gobject-introspection
+, gdk-pixbuf
+, jre
+, android-tools
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "agi";
+  version = "3.3.1";
+
+  src = fetchzip {
+    url = "https://github.com/google/agi/releases/download/${version}/agi-${version}-linux.zip";
+    sha256 = "sha256-Yawl6InBYSWNw3clHyGAeC2PVfXEzWmbd6vcYrqAPO0=";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gdk-pixbuf
+    gobject-introspection
+    autoPatchelfHook
+    copyDesktopItems
+    makeWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp ./{agi,gapis,gapir,gapit,device-info} $out/bin
+    cp -r lib $out
+
+    for i in 16 32 48 64 96 128 256 512 1024; do
+      install -D ${src}/icon.png $out/share/icons/hicolor/''${i}x$i/apps/agi.png
+    done
+
+    runHook postInstall
+  '';
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    wrapProgram $out/bin/agi \
+      --add-flags "--vm ${jre}/bin/java" \
+      --add-flags "--adb ${android-tools}/bin/adb" \
+      --add-flags "--jar $out/lib/gapic.jar" \
+      "''${gappsWrapperArgs[@]-}"
+  '';
+
+  desktopItems = lib.toList (makeDesktopItem {
+    name = "agi";
+    desktopName = "Android GPU Inspector";
+    exec = "agi";
+    icon = "agi";
+    categories = [ "Development" "Debugger" "Graphics" "3DGraphics" ];
+  });
+
+  meta = with lib; {
+    description = "Android GPU Inspector";
+    homepage = "https://gpuinspector.dev";
+    changelog = "https://github.com/google/agi/releases/tag/v${version}";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ivar kashw2 ];
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/amber/default.nix b/nixpkgs/pkgs/tools/graphics/amber/default.nix
new file mode 100644
index 000000000000..9c9a43a49be4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/amber/default.nix
@@ -0,0 +1,101 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, cctools
+, makeWrapper
+, python3
+, vulkan-headers
+, vulkan-loader
+, vulkan-validation-layers
+}:
+let
+  glslang = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "glslang";
+    rev = "81cc10a498b25a90147cccd6e8939493c1e9e20e";
+    hash = "sha256-jTOxZ1nU7kvtdWjPzyIp/5ZeKw3JtYyqhlFeIE7CyX8=";
+  };
+
+  lodepng = fetchFromGitHub {
+    owner = "lvandeve";
+    repo = "lodepng";
+    rev = "5601b8272a6850b7c5d693dd0c0e16da50be8d8d";
+    hash = "sha256-dD8QoyOoGov6VENFNTXWRmen4nYYleoZ8+4TpICNSpo=";
+  };
+
+  shaderc = fetchFromGitHub {
+    owner = "google";
+    repo = "shaderc";
+    rev = "e72186b66bb90ed06aaf15cbdc9a053581a0616b";
+    hash = "sha256-hd1IGsWksgAfB8Mq5yZOzSyNGxXsCJxb350pD/Gcskk=";
+  };
+
+  spirv-headers = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "SPIRV-Headers";
+    rev = "d13b52222c39a7e9a401b44646f0ca3a640fbd47";
+    hash = "sha256-bjiWGSmpEbydXtCLP8fRZfPBvdCzBoJxKXTx3BroQbg=";
+  };
+
+  spirv-tools = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "SPIRV-Tools";
+    rev = "d87f61605b3647fbceae9aaa922fce0031afdc63";
+    hash = "sha256-lB2i6wjehIFDOQdIPUvCy3zzcnJSsR5vNawPhGmb0es=";
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "amber";
+  version = "unstable-2023-09-02";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "8e90b2d2f532bcd4a80069e3f37a9698209a21bc";
+    hash = "sha256-LuNCND/NXoNbbTWv7RYQUkq2QXL1qXR27uHwFIz0DXg=";
+  };
+
+  buildInputs = [
+    vulkan-headers
+    vulkan-loader
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    pkg-config
+    python3
+  ] ++ lib.optionals stdenv.isDarwin [
+    cctools
+  ];
+
+  # Tests are disabled so we do not have to pull in googletest and more dependencies
+  cmakeFlags = [ "-DAMBER_SKIP_TESTS=ON" "-DAMBER_DISABLE_WERROR=ON" ];
+
+  prePatch = ''
+    cp -r ${glslang}/ third_party/glslang
+    cp -r ${lodepng}/ third_party/lodepng
+    cp -r ${shaderc}/ third_party/shaderc
+    cp -r ${spirv-tools}/ third_party/spirv-tools
+    cp -r ${spirv-headers}/ third_party/spirv-headers
+    chmod u+w -R third_party
+
+    substituteInPlace tools/update_build_version.py \
+      --replace "not os.path.exists(directory)" "True"
+  '';
+
+  installPhase = ''
+    install -Dm755 -t $out/bin amber image_diff
+    wrapProgram $out/bin/amber \
+      --suffix VK_LAYER_PATH : ${vulkan-validation-layers}/share/vulkan/explicit_layer.d
+  '';
+
+  meta = with lib; {
+    description = "Multi-API shader test framework";
+    homepage = "https://github.com/google/amber";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Flakebi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/argyllcms/default.nix b/nixpkgs/pkgs/tools/graphics/argyllcms/default.nix
new file mode 100644
index 000000000000..a966b11382aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/argyllcms/default.nix
@@ -0,0 +1,154 @@
+{ stdenv, fetchzip, jam, unzip, libX11, libXxf86vm, libXrandr, libXinerama
+, libXrender, libXext, libtiff, libjpeg, libpng, libXScrnSaver, writeText
+, libXdmcp, libXau, lib, openssl
+, buildPackages, substituteAll, writeScript
+}:
+
+stdenv.mkDerivation rec {
+  pname = "argyllcms";
+  version = "3.1.0";
+
+  src = fetchzip {
+    # Kind of flacky URL, it was reaturning 406 and inconsistent binaries for a
+    # while on me. It might be good to find a mirror
+    url = "https://www.argyllcms.com/Argyll_V${version}_src.zip";
+    hash = "sha256-IZScf+xpvvMt5YFlYQprg51cw2ztMdOrqcLm7l5uBhU=";
+  };
+
+  nativeBuildInputs = [ jam unzip ];
+
+  patches = lib.optional (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) (
+    # Build process generates files by compiling and then invoking an executable.
+    substituteAll {
+      src = ./jam-cross.patch;
+      emulator = stdenv.hostPlatform.emulator buildPackages;
+    }
+  );
+
+  postPatch = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    substituteInPlace Jambase \
+      --replace "-m64" ""
+  '';
+
+  preConfigure = let
+    # The contents of this file comes from the Jamtop file from the
+    # root of the ArgyllCMS distribution, rewritten to pick up Nixpkgs
+    # library paths. When ArgyllCMS is updated, make sure that changes
+    # in that file is reflected here.
+    jamTop = writeText "argyllcms_jamtop" ''
+      DESTDIR = "/" ;
+      REFSUBDIR = "share/argyllcms" ;
+
+      # Keep this DESTDIR anchored to Jamtop. PREFIX is used literally
+      ANCHORED_PATH_VARS = DESTDIR ;
+
+      # Tell standalone libraries that they are part of Argyll:
+      DEFINES += ARGYLLCMS ;
+
+      # enable serial instruments & support
+      USE_SERIAL = true ;
+
+      # enable fast serial instruments & support
+      USE_FAST_SERIAL = true ;                # (Implicit in USE_SERIAL too)
+
+      # enable USB instruments & support
+      USE_USB = true ;
+
+      # enable dummy Demo Instrument (only if code is available)
+      USE_DEMOINST = true ;
+
+      # enable Video Test Patch Generator and 3DLUT device support
+      # (V2.0.0 and above)
+      USE_VTPGLUT = false ;
+
+      # enable Printer device support
+      USE_PRINTER = false ;
+
+      # enable CMF Measurement device and accessory support (if present)
+      USE_CMFM = false ;
+
+      # Use ArgyllCMS version of libusb (deprecated - don't use)
+      USE_LIBUSB = false ;
+
+      # Compile in graph plotting code (Not fully implemented)
+      USE_PLOT = true ;		# [true]
+
+      JPEGLIB = ;
+      JPEGINC = ;
+      HAVE_JPEG = true ;
+
+      TIFFLIB = ;
+      TIFFINC = ;
+      HAVE_TIFF = true ;
+
+      PNGLIB = ;
+      PNGINC = ;
+      HAVE_PNG = true ;
+
+      ZLIB = ;
+      ZINC = ;
+      HAVE_Z = true ;
+
+      SSLLIB = ;
+      SSLINC = ;
+      HAVE_SSL = true ;
+
+      LINKFLAGS +=
+        ${lib.concatStringsSep " " (map (x: "-L${x}/lib") buildInputs)}
+        -lrt -lX11 -lXext -lXxf86vm -lXinerama -lXrandr -lXau -lXdmcp -lXss
+        -ljpeg -ltiff -lpng -lssl ;
+    '';
+  in ''
+    cp ${jamTop} Jamtop
+    substituteInPlace Makefile --replace "-j 3" "-j $NIX_BUILD_CORES"
+    # Remove tiff, jpg and png to be sure the nixpkgs-provided ones are used
+    rm -rf tiff jpg png
+
+    export AR="$AR rusc"
+  '';
+
+  buildInputs = [
+    libtiff libjpeg libpng libX11 libXxf86vm libXrandr libXinerama libXext
+    libXrender libXScrnSaver libXdmcp libXau openssl
+  ];
+
+  buildFlags = [ "all" ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  # Install udev rules, but remove lines that set up the udev-acl
+  # stuff, since that is handled by udev's own rules (70-udev-acl.rules)
+  postInstall = ''
+    rm -v $out/bin/License.txt
+    mkdir -p $out/etc/udev/rules.d
+    sed -i '/udev-acl/d' usb/55-Argyll.rules
+    cp -v usb/55-Argyll.rules $out/etc/udev/rules.d/
+
+    sed -i -e 's/^CREATED .*/CREATED "'"$(date -d @$SOURCE_DATE_EPOCH)"'"/g' $out/share/argyllcms/RefMediumGamut.gam
+
+  '';
+
+  passthru = {
+    updateScript = writeScript "update-argyllcms" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -eu -o pipefail
+
+      # Expect the text in format of 'Current Version 3.0.1 (19th October 2023)'
+      new_version="$(curl -s https://www.argyllcms.com/ |
+          pcregrep -o1 '>Current Version ([0-9.]+) ')"
+      update-source-version ${pname} "$new_version"
+    '';
+  };
+
+  meta = with lib; {
+    homepage = "https://www.argyllcms.com/";
+    description = "Color management system (compatible with ICC)";
+    license = licenses.gpl3;
+    maintainers = [];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/argyllcms/jam-cross.patch b/nixpkgs/pkgs/tools/graphics/argyllcms/jam-cross.patch
new file mode 100644
index 000000000000..86a51ed83110
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/argyllcms/jam-cross.patch
@@ -0,0 +1,22 @@
+diff --git a/Jambase b/Jambase
+--- a/Jambase
++++ b/Jambase
+@@ -4247,7 +4247,7 @@
+
+ actions GenFileND1
+ {
+-	$(>)
++	@emulator@ $(>)
+ }
+
+ actions GenFileNND1
+@@ -4410,7 +4410,7 @@
+ 	actions GenFile1
+ 	{
+ 		PATH="$PATH:."
+-		$(>[1]) $(<) $(>[2-])
++		@emulator@ $(>[1]) $(<) $(>[2-])
+ 	}
+
+ 	actions CreateCatFile_
+
diff --git a/nixpkgs/pkgs/tools/graphics/astc-encoder/default.nix b/nixpkgs/pkgs/tools/graphics/astc-encoder/default.nix
new file mode 100644
index 000000000000..0a227a1781ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/astc-encoder/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, simdExtensions ? null
+}:
+
+with rec {
+  # SIMD instruction sets to compile for. If none are specified by the user,
+  # an appropriate one is selected based on the detected host system
+  isas = with stdenv.hostPlatform;
+    if simdExtensions != null then lib.toList simdExtensions
+    else if avx2Support then [ "AVX2" ]
+    else if sse4_1Support then [ "SSE41" ]
+    else if isx86_64 then [ "SSE2" ]
+    else if isAarch64 then [ "NEON" ]
+    else [ "NONE" ];
+
+  # CMake Build flags for the selected ISAs. For a list of flags, see
+  # https://github.com/ARM-software/astc-encoder/blob/main/Docs/Building.md
+  isaFlags = map ( isa: "-DASTCENC_ISA_${isa}=ON" ) isas;
+
+  # The suffix of the binary to link as 'astcenc'
+  mainBinary = builtins.replaceStrings
+    [ "AVX2" "SSE41"  "SSE2" "NEON" "NONE" "NATIVE" ]
+    [ "avx2" "sse4.1" "sse2" "neon" "none" "native" ]
+    ( builtins.head isas );
+};
+
+stdenv.mkDerivation rec {
+  pname = "astc-encoder";
+  version = "4.7.0";
+
+  src = fetchFromGitHub {
+    owner = "ARM-software";
+    repo = "astc-encoder";
+    rev = version;
+    sha256 = "sha256-UzMVJnXYLy7E9RuM4VPdqnIyfQjDOdAlKiqRkXuxnQ0=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeBuildType = "RelWithDebInfo";
+
+  cmakeFlags = isaFlags ++ [
+    "-DASTCENC_UNIVERSAL_BUILD=OFF"
+  ];
+
+  # Set a fixed build year to display within help output (otherwise, it would be 1980)
+  postPatch = ''
+    substituteInPlace Source/cmake_core.cmake \
+      --replace 'string(TIMESTAMP astcencoder_YEAR "%Y")' 'set(astcencoder_YEAR "2023")'
+  '';
+
+  # Provide 'astcenc' link to main executable
+  postInstall = ''
+    ln -s $out/bin/astcenc-${mainBinary} $out/bin/astcenc
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ARM-software/astc-encoder";
+    description = "An encoder for the ASTC texture compression format";
+    longDescription = ''
+      The Adaptive Scalable Texture Compression (ASTC) format is
+      widely supported by mobile and desktop graphics hardware and
+      provides better quality at a given bitrate compared to ETC2.
+
+      This program supports both compression and decompression in LDR
+      and HDR mode and can read various image formats. Run `astcenc
+      -help` to see all the options.
+    '';
+    platforms = platforms.unix;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dasisdormax ];
+    broken = !stdenv.is64bit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/asymptote/default.nix b/nixpkgs/pkgs/tools/graphics/asymptote/default.nix
new file mode 100644
index 000000000000..a5968425f5d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/asymptote/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, bison, glm, flex, wrapQtAppsHook, cmake
+, freeglut, ghostscriptX, imagemagick, fftw
+, boehmgc, libGLU, libGL, mesa, ncurses, readline, gsl, libsigsegv
+, python3, qtbase, qtsvg, boost
+, zlib, perl, curl
+, texliveSmall, texinfo
+, darwin
+}:
+
+stdenv.mkDerivation rec {
+  version = "2.86";
+  pname = "asymptote";
+
+  src = fetchFromGitHub {
+    owner = "vectorgraphics";
+    repo = pname;
+    rev = version;
+    hash = "sha256-Bk8/WIQTfrbOo9b2hw580vJwiK6P1OBV5HMqMH+LkuE=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    bison
+    flex
+    bison
+    texinfo
+    wrapQtAppsHook
+    cmake
+  ];
+
+  buildInputs = [
+    ghostscriptX imagemagick fftw
+    boehmgc ncurses readline gsl libsigsegv
+    zlib perl curl qtbase qtsvg boost
+    (texliveSmall.withPackages (ps: with ps; [ epsf cm-super ps.texinfo media9 ocgx2 collection-latexextra ]))
+    (python3.withPackages (ps: with ps; [ cson numpy pyqt5 ]))
+  ];
+
+  propagatedBuildInputs = [
+    glm
+  ] ++ lib.optionals stdenv.isLinux [
+    freeglut libGLU libGL mesa.osmesa
+  ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    OpenGL GLUT Cocoa
+  ]);
+
+  dontWrapQtApps = true;
+
+  preConfigure = ''
+    HOME=$TMP
+  '';
+
+  configureFlags = [
+    "--with-latex=$out/share/texmf/tex/latex"
+    "--with-context=$out/share/texmf/tex/context/third"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-I${boehmgc.dev}/include/gc";
+
+  postInstall = ''
+    rm "$out"/bin/xasy
+    makeQtWrapper "$out"/share/asymptote/GUI/xasy.py "$out"/bin/xasy --prefix PATH : "$out"/bin
+
+    mv $out/share/info/asymptote/*.info $out/share/info/
+    sed -i -e 's|(asymptote/asymptote)|(asymptote)|' $out/share/info/asymptote.info
+    rmdir $out/share/info/asymptote
+    rm -f $out/share/info/dir
+
+    rm -rf $out/share/texmf
+    install -Dt $out/share/emacs/site-lisp/${pname} $out/share/asymptote/*.el
+  '';
+
+  dontUseCmakeConfigure = true;
+
+  enableParallelBuilding = true;
+  # Missing install depends:
+  #   ...-coreutils-9.1/bin/install: cannot stat 'asy-keywords.el': No such file or directory
+  #   make: *** [Makefile:272: install-asy] Error 1
+  enableParallelInstalling = false;
+
+  meta = with lib; {
+    description =  "A tool for programming graphics intended to replace Metapost";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/barcode/default.nix b/nixpkgs/pkgs/tools/graphics/barcode/default.nix
new file mode 100644
index 000000000000..9eb368b83af6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/barcode/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  version = "0.99";
+  pname = "barcode";
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "1indapql5fjz0bysyc88cmc54y8phqrbi7c76p71fgjp45jcyzp8";
+  };
+  patches = [
+    # Pull upstream patch for -fno-common toolchains.
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "http://git.savannah.gnu.org/cgit/barcode.git/patch/?id=4654f68706a459c9602d9932b56a56e8930f7d53";
+      sha256 = "15kclzcwlh0ymr7m48vc0m8z98q0wf4xbfcky4g1y8yvvpvvrfgc";
+    })
+  ];
+
+  configureFlags = lib.optional stdenv.isDarwin "ac_cv_func_calloc_0_nonnull=yes";
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "GNU barcode generator";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+    downloadPage = "https://ftp.gnu.org/gnu/barcode/";
+    homepage = "https://www.gnu.org/software/barcode/";
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/blockhash/default.nix b/nixpkgs/pkgs/tools/graphics/blockhash/default.nix
new file mode 100644
index 000000000000..a58fcc4e8ec6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/blockhash/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, python3, pkg-config, imagemagick, wafHook }:
+
+stdenv.mkDerivation rec {
+  pname = "blockhash";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "commonsmachinery";
+    repo = "blockhash";
+    rev = "v${version}";
+    sha256 = "sha256-QoqFTCfWtXIrFF3Yx4NfOa9cSjHtCSKz3k3i0u9Qx9M=";
+  };
+
+  nativeBuildInputs = [ python3 pkg-config wafHook ];
+  buildInputs = [ imagemagick ];
+
+  strictDeps = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/commonsmachinery/blockhash";
+    description = ''
+      This is a perceptual image hash calculation tool based on algorithm
+      descibed in Block Mean Value Based Image Perceptual Hashing by Bian Yang,
+      Fan Gu and Xiamu Niu.
+    '';
+    license = licenses.mit;
+    maintainers = [ maintainers.infinisil ];
+    platforms = platforms.unix;
+    mainProgram = "blockhash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/blur-effect/default.nix b/nixpkgs/pkgs/tools/graphics/blur-effect/default.nix
new file mode 100644
index 000000000000..cc88bb088949
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/blur-effect/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, cmake, gdk-pixbuf, libGL, mesa }:
+
+stdenv.mkDerivation rec {
+  pname = "blur-effect";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "sonald";
+    repo = pname;
+    rev = version;
+    sha256 = "0cjw7iz0p7x1bi4vmwrivfidry5wlkgfgdl9wly88cm3z9ib98jj";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    libGL
+    mesa
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/sonald/blur-effect";
+    description = "Off-screen image blurring utility using OpenGL ES 3.0";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    broken = stdenv.hostPlatform.isDarwin; # packages 'libdrm' and 'gbm' not found
+    maintainers = with maintainers; [ romildo ];
+    mainProgram = "blur_image";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/briss/default.nix b/nixpkgs/pkgs/tools/graphics/briss/default.nix
new file mode 100644
index 000000000000..801b8f5a4862
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/briss/default.nix
@@ -0,0 +1,30 @@
+# The releases of this project are apparently precompiled to .jar files.
+
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "briss";
+  version = "0.9";
+  src = fetchurl {
+    url = "mirror://sourceforge/briss/briss-${version}.tar.gz";
+    sha256 = "45dd668a9ceb9cd59529a9fefe422a002ee1554a61be07e6fc8b3baf33d733d9";
+  };
+
+  nativeBuildInputs = [makeWrapper];
+
+  installPhase = ''
+    mkdir -p "$out/bin";
+    mkdir -p "$out/share";
+    install -D -m444 -t "$out/share" *.jar
+    makeWrapper "${jre}/bin/java" "$out/bin/briss" --add-flags "-Xms128m -Xmx1024m -cp \"$out/share/\" -jar \"$out/share/briss-${version}.jar\""
+  '';
+
+  meta = {
+    homepage = "https://sourceforge.net/projects/briss/";
+    description = "Java application for cropping PDF files";
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
+    mainProgram = "briss";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/cfdg/default.nix b/nixpkgs/pkgs/tools/graphics/cfdg/default.nix
new file mode 100644
index 000000000000..496255c57953
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/cfdg/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, libpng, bison, flex, ffmpeg, icu }:
+
+stdenv.mkDerivation rec {
+  pname = "cfdg";
+  version = "3.4.1";
+  src = fetchFromGitHub {
+    owner = "MtnViewJohn";
+    repo = "context-free";
+    rev = "Version${version}";
+    sha256 = "sha256-f2VMb0TM50afKf/lGdZBP2z13UrCVgG4/IYi5gnD+ow=";
+  };
+
+  nativeBuildInputs = [ bison flex ];
+  buildInputs = [ libpng ffmpeg icu ];
+
+  postPatch = ''
+    sed -e "/YY_NO_UNISTD/a#include <stdio.h>" -i src-common/cfdg.l
+    sed -e '1i#include <algorithm>' -i src-common/{cfdg,builder,ast}.cpp
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp cfdg $out/bin/
+
+    mkdir -p $out/share/doc/${pname}-${version}
+    cp *.txt $out/share/doc/${pname}-${version}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Context-free design grammar - a tool for graphics generation";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    homepage = "https://contextfreeart.org/";
+    license = licenses.gpl2Only;
+    mainProgram = "cfdg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/cfdg/src-info-for-default.nix b/nixpkgs/pkgs/tools/graphics/cfdg/src-info-for-default.nix
new file mode 100644
index 000000000000..b84376e9882e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/cfdg/src-info-for-default.nix
@@ -0,0 +1,6 @@
+{
+  downloadPage = "https://contextfreeart.org/mediawiki/index.php/Download_page";
+  baseName = "cfdg";
+  sourceRegexp = ".*[.]tgz";
+  versionExtractorSedScript = ''s/[^0-9]*([0-9.]*)[.]tgz/\1/'';
+}
diff --git a/nixpkgs/pkgs/tools/graphics/cgif/default.nix b/nixpkgs/pkgs/tools/graphics/cgif/default.nix
new file mode 100644
index 000000000000..f581a97759b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/cgif/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, meson
+, ninja
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "cgif";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "dloebl";
+    repo = "cgif";
+    rev = "V${finalAttrs.version}";
+    sha256 = "sha256-FvqpToIVYblpuRWeEaUA8MA2Bnp9dpqGquylnXevhX4=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+  ];
+
+  meta = {
+    homepage = "https://github.com/dloebl/cgif";
+    description = "CGIF, a GIF encoder written in C";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/convchain/default.nix b/nixpkgs/pkgs/tools/graphics/convchain/default.nix
new file mode 100644
index 000000000000..20f29b2a0ad5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/convchain/default.nix
@@ -0,0 +1,39 @@
+{lib, stdenv, fetchFromGitHub, mono}:
+stdenv.mkDerivation rec {
+  pname = "convchain";
+  version = "0.0pre20160901";
+  src = fetchFromGitHub {
+    owner = "mxgmn";
+    repo = "ConvChain";
+    rev = "8abb1e88a496fcae4c0ae31acd4eea55957dab68";
+    sha256 = "0lnscljgbw0s90sfcahwvnxakml0f4d8jxi5ikm4ak8qgnvw6rql";
+  };
+  buildPhase = ''
+    mcs ConvChain.cs -out:convchain.exe -r:System.Drawing
+    mcs ConvChainFast.cs -out:convchainfast.exe -r:System.Drawing
+    grep -m1 -B999 '^[*][/]' ConvChainFast.cs > COPYING.MIT
+  '';
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/doc/convchain,share/convchain}
+    cp README.md COPYING.MIT "$out"/share/doc/convchain
+    cp convchain*.exe "$out"/bin
+    cp -r [Ss]amples samples.xml "$out/share/convchain"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/convchain"
+    echo "chmod u+w ." >> "$out/bin/convchain"
+    echo "'${mono}/bin/mono' '$out/bin/convchain.exe' \"\$@\"" >>  "$out/bin/convchain"
+    chmod a+x "$out/bin/convchain"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/convchainfast"
+    echo "chmod u+w ." >> "$out/bin/convchainfast"
+    echo "'${mono}/bin/mono' '$out/bin/convchainfast.exe' \"\$@\"" >>  "$out/bin/convchainfast"
+    chmod a+x "$out/bin/convchainfast"
+  '';
+  buildInputs = [mono];
+  meta = {
+    description = "Bitmap generation from a single example with convolutions and MCMC";
+    license = lib.licenses.mit;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/csv2svg/default.nix b/nixpkgs/pkgs/tools/graphics/csv2svg/default.nix
new file mode 100644
index 000000000000..e8c28cf51a61
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/csv2svg/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "csv2svg";
+  version = "0.1.9";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-3VebLFkeJLK97jqoPXt4Wt6QTR0Zyu+eQV9oaLBSeHE=";
+  };
+
+  cargoHash = "sha256-EIsKb9BzM+H3BO7OpoTmvIvGd578gYSq5vU18BejT0s=";
+
+  meta = with lib; {
+    description = "Take a csv as input and outputs svg";
+    homepage = "https://github.com/Canop/csv2svg";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "csv2svg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/cuneiform/default.nix b/nixpkgs/pkgs/tools/graphics/cuneiform/default.nix
new file mode 100644
index 000000000000..9332b25babfb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/cuneiform/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, cmake, imagemagick, testers }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "cuneiform";
+  version = "1.1.0";
+
+  src = fetchurl {
+    url = "https://launchpad.net/cuneiform-linux/1.1/1.1/+download/cuneiform-linux-1.1.0.tar.bz2";
+    sha256 = "1bdvppyfx2184zmzcylskd87cxv56d8f32jf7g1qc8779l2hszjp";
+  };
+
+  patches = [
+  (fetchurl {
+    url = "https://raw.githubusercontent.com/archlinux/svntogit-community/a2ec92f05de006b56d16ac6a6c370d54a554861a/cuneiform/trunk/build-fix.patch";
+    sha256 = "19cmrlx4khn30qqrpyayn7bicg8yi0wpz1x1bvqqrbvr3kwldxyj";
+  })
+  (fetchurl {
+    url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-text/cuneiform/files/cuneiform-1.1.0-gcc11.patch";
+    sha256 = "14bp2f4dvlgxnpdza1rgszhkbxhp6p7lhgnb1s7c1x7vwdrx0ri7";
+  })
+  ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: CMakeFiles/rbal.dir/src/statsearchbl.cpp.o:(.bss+0x0):
+  #     multiple definition of `minrow'; CMakeFiles/rbal.dir/src/linban.c.o:(.bss+0xa3a): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  postPatch = ''
+    rm cuneiform_src/Kern/hhh/tigerh/h/strings.h
+  '';
+
+  # make the install path match the rpath
+  postInstall = ''
+    if [[ -d ''${!outputLib}/lib64 ]]; then
+      mv ''${!outputLib}/lib64 ''${!outputLib}/lib
+      ln -s lib ''${!outputLib}/lib64
+    fi
+  '';
+
+  buildInputs = [ imagemagick ];
+
+  nativeBuildInputs = [ cmake ];
+
+  passthru.tests = testers.testVersion {
+    package = finalAttrs.finalPackage;
+    command = "cuneiform";
+  };
+
+  meta = with lib; {
+    description = "Multi-language OCR system";
+    homepage = "https://launchpad.net/cuneiform-linux";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.raskin ];
+    mainProgram = "cuneiform";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/dcraw/default.nix b/nixpkgs/pkgs/tools/graphics/dcraw/default.nix
new file mode 100644
index 000000000000..35657cf8fc53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/dcraw/default.nix
@@ -0,0 +1,43 @@
+{lib, stdenv, fetchurl, libjpeg, lcms2, gettext, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "dcraw";
+  version = "9.28.0";
+
+  src = fetchurl {
+    url = "https://www.dechifro.org/dcraw/archive/dcraw-${version}.tar.gz";
+    sha256 = "1fdl3xa1fbm71xzc3760rsjkvf0x5jdjrvdzyg2l9ka24vdc7418";
+  };
+
+  nativeBuildInputs = lib.optional stdenv.isDarwin libiconv;
+  buildInputs = [ libjpeg lcms2 gettext ];
+
+  # Jasper is disabled because the library is abandoned and has many
+  # CVEs.
+  patchPhase = ''
+    substituteInPlace install \
+      --replace 'prefix=/usr/local' 'prefix=$out' \
+      --replace gcc '$CC' \
+      --replace '-ljasper' '-DNO_JASPER=1'
+  '';
+
+  buildPhase = ''
+    mkdir -p $out/bin
+    sh -e install
+  '';
+
+  meta = {
+    homepage = "https://www.dechifro.org/dcraw/";
+    description = "Decoder for many camera raw picture formats";
+    license = lib.licenses.free;
+    platforms = lib.platforms.unix; # Once had cygwin problems
+    maintainers = [ ];
+    knownVulnerabilities = [
+      "CVE-2018-19655"
+      "CVE-2018-19565"
+      "CVE-2018-19566"
+      "CVE-2018-19567"
+      "CVE-2018-19568"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/deqp-runner/default.nix b/nixpkgs/pkgs/tools/graphics/deqp-runner/default.nix
new file mode 100644
index 000000000000..88fa06d36b3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/deqp-runner/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitLab, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "deqp-runner";
+  version = "0.16.1";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "anholt";
+    repo = "deqp-runner";
+    rev = "v${version}";
+    hash = "sha256-Spx7Y0es+s3k2dod/kdEgypncED8mNR23uRdOOcLxJc=";
+  };
+
+  cargoHash = "sha256-G4fxtpIhwAVleJ+0rN1+ZhKWw7QbWTB5aLUa3EdFyvA=";
+
+  meta = with lib; {
+    description = "A VK-GL-CTS/dEQP wrapper program to parallelize it across CPUs and report results against a baseline";
+    homepage = "https://gitlab.freedesktop.org/anholt/deqp-runner";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ Benjamin-L ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/diagrams-builder/default.nix b/nixpkgs/pkgs/tools/graphics/diagrams-builder/default.nix
new file mode 100644
index 000000000000..85f4fdc83efa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/diagrams-builder/default.nix
@@ -0,0 +1,44 @@
+/*
+  If user need access to more haskell package for building his
+  diagrams, he simply has to pass these package through the
+  extra packages function as follow in `config.nix`:
+
+  ~~~
+  diagrams-builder.override {
+    extraPackages = self : [myHaskellPackage];
+  }
+  ­~~~
+*/
+
+{ lib, stdenv, ghcWithPackages, makeWrapper, diagrams-builder, extraPackages ? (self: []) }:
+
+let
+
+  # Used same technique as for the yiCustom package.
+  wrappedGhc = ghcWithPackages
+    (self: [ diagrams-builder ] ++ extraPackages self);
+  ghcVersion = wrappedGhc.version;
+
+  exeWrapper = backend : ''
+    makeWrapper \
+    "${diagrams-builder}/bin/diagrams-builder-${backend}" "$out/bin/diagrams-builder-${backend}" \
+      --set NIX_GHC ${wrappedGhc}/bin/ghc \
+      --set NIX_GHC_LIBDIR ${wrappedGhc}/lib/ghc-${ghcVersion}
+  '';
+
+  backends = ["svg" "cairo" "ps"];
+
+in
+
+stdenv.mkDerivation {
+  name = "diagrams-builder";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = with lib;
+    concatStringsSep "\n" (map exeWrapper backends);
+
+  # Will be faster to build the wrapper locally then to fetch it from a binary cache.
+  preferLocalBuild = true;
+  meta = diagrams-builder.meta;
+}
diff --git a/nixpkgs/pkgs/tools/graphics/dippi/default.nix b/nixpkgs/pkgs/tools/graphics/dippi/default.nix
new file mode 100644
index 000000000000..1a094c2750e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/dippi/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, python3
+, vala
+, glib
+, gtk3
+, gtk4
+, libadwaita
+, wrapGAppsHook4
+, appstream-glib
+, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dippi";
+  version = "4.0.6";
+
+  src = fetchFromGitHub {
+    owner = "cassidyjames";
+    repo = "dippi";
+    rev = version;
+    hash = "sha256-oZy8WfaAPABZRm8dm4zpI4v9RwT46F6WL6Wj767FcZg=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    pkg-config
+    wrapGAppsHook4
+    appstream-glib
+    desktop-file-utils
+    # For post_install.py
+    python3
+    glib
+    gtk3
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+  ];
+
+  postPatch = ''
+    patchShebangs build-aux/meson/post_install.py
+  '';
+
+  postInstall = ''
+    ln -s $out/bin/com.github.cassidyjames.dippi $out/bin/dippi
+  '';
+
+  meta = with lib; {
+    description = "Calculate display info like DPI and aspect ratio";
+    homepage = "https://github.com/cassidyjames/dippi";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ zendo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/directx-shader-compiler/default.nix b/nixpkgs/pkgs/tools/graphics/directx-shader-compiler/default.nix
new file mode 100644
index 000000000000..1bd0293f39b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/directx-shader-compiler/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, cmake, ninja, python3, git }:
+
+stdenv.mkDerivation rec {
+  pname = "directx-shader-compiler";
+  version = "1.7.2308";
+
+  # Put headers in dev, there are lot of them which aren't necessary for
+  # using the compiler binary.
+  outputs = [ "out" "dev" ];
+
+  src = fetchFromGitHub {
+    owner = "microsoft";
+    repo = "DirectXShaderCompiler";
+    rev = "v${version}";
+    hash = "sha256-pfdAD+kRpmqW29Y8jn6+X5Ujy/9cIvisYr0tH1PuxsY=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake git ninja python3 ];
+
+  cmakeFlags = [ "-C../cmake/caches/PredefinedParams.cmake" ];
+
+  # The default install target installs heaps of LLVM stuff.
+  #
+  # Upstream issue: https://github.com/microsoft/DirectXShaderCompiler/issues/3276
+  #
+  # The following is based on the CI script:
+  # https://github.com/microsoft/DirectXShaderCompiler/blob/master/appveyor.yml#L63-L66
+  installPhase = ''
+    mkdir -p $out/bin $out/lib $dev/include
+    mv bin/dxc* $out/bin/
+    mv lib/libdxcompiler.so* lib/libdxcompiler.*dylib $out/lib/
+    cp -r $src/include/dxc $dev/include/
+  '';
+
+  meta = with lib; {
+    description = "A compiler to compile HLSL programs into DXIL and SPIR-V";
+    homepage = "https://github.com/microsoft/DirectXShaderCompiler";
+    platforms = with platforms; linux ++ darwin;
+    license = licenses.ncsa;
+    maintainers = with maintainers; [ expipiplus1 Flakebi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ditaa/default.nix b/nixpkgs/pkgs/tools/graphics/ditaa/default.nix
new file mode 100644
index 000000000000..c6823fbed369
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ditaa/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "ditaa";
+  version = "0.11.0";
+
+  src = fetchurl {
+    url = "https://github.com/stathissideris/ditaa/releases/download/v${version}/ditaa-${version}-standalone.jar";
+    sha256 = "1acnl7khz8aasg230nbsx9dyf8716scgb5l3679cb2bdzxisl64l";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib
+
+    cp ${src} "$out/lib/ditaa.jar"
+
+    cat > "$out/bin/ditaa" << EOF
+    #!${stdenv.shell}
+    exec ${jre}/bin/java -jar "$out/lib/ditaa.jar" "\$@"
+    EOF
+
+    chmod a+x "$out/bin/ditaa"
+  '';
+
+  meta = with lib; {
+    description = "Convert ascii art diagrams into proper bitmap graphics";
+    homepage = "https://github.com/stathissideris/ditaa";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.lgpl3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "ditaa";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/dmtx-utils/default.nix b/nixpkgs/pkgs/tools/graphics/dmtx-utils/default.nix
new file mode 100644
index 000000000000..f03f38742e19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/dmtx-utils/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, libdmtx
+, imagemagick
+, Foundation
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dmtx-utils";
+  version = "0.7.6-unstable-2023-09-21";
+
+  src = fetchFromGitHub {
+    owner = "dmtx";
+    repo = "dmtx-utils";
+    rev = "057faa00143c152e8e21c29a36137f771614daed";
+    hash = "sha256-uXzPAv6DappyHBNmsTg6qRUvtUUdP1IPOdDvIcevfco=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ libdmtx imagemagick ]
+    ++ lib.optional stdenv.isDarwin Foundation;
+
+  meta = {
+    description = "Data matrix command-line utilities";
+    homepage = "https://github.com/dmtx/dmtx-utils";
+    changelog = "https://github.com/dmtx/dmtx-utils/blob/v${version}/ChangeLog";
+    license = lib.licenses.lgpl2;
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/dnglab/default.nix b/nixpkgs/pkgs/tools/graphics/dnglab/default.nix
new file mode 100644
index 000000000000..9088a1110b7b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/dnglab/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "dnglab";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "dnglab";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jkOkkcMFK1RLY8Hn/bMMuMZtyGwnwGdm0os8QKhcWqo=";
+  };
+
+  cargoSha256 = "sha256-qwhOJxFYRJC51dKB1pi/WVJs7H955jM6KmKbxsAScDI=";
+
+  postInstall = ''
+    rm $out/bin/benchmark $out/bin/identify
+  '';
+
+  meta = with lib; {
+    description = "Camera RAW to DNG file format converter";
+    homepage = "https://github.com/dnglab/dnglab";
+    license = licenses.lgpl21Only;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "dnglab";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/dpic/default.nix b/nixpkgs/pkgs/tools/graphics/dpic/default.nix
new file mode 100644
index 000000000000..fb3e0c19bf82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/dpic/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dpic";
+  version = "2023.06.01";
+
+  src = fetchurl {
+    url = "https://ece.uwaterloo.ca/~aplevich/dpic/${pname}-${version}.tar.gz";
+    sha256 = "sha256-7sIGSHMsxEsO9b7nutY6cBxS59mrT3bepNNDQi2L+X4=";
+  };
+
+  # The prefix passed to configure is not used.
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    description = "An implementation of the pic little language for creating drawings";
+    homepage = "https://ece.uwaterloo.ca/~aplevich/dpic/";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ aespinosa ];
+    platforms = platforms.all;
+    mainProgram = "dpic";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/graphics/dynamic-wallpaper/default.nix b/nixpkgs/pkgs/tools/graphics/dynamic-wallpaper/default.nix
new file mode 100644
index 000000000000..0a52d19bf441
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/dynamic-wallpaper/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, python3
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, blueprint-compiler
+, wrapGAppsHook4
+, appstream-glib
+, desktop-file-utils
+, glib
+, gtk4
+, libadwaita
+, librsvg
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "dynamic-wallpaper";
+  version = "0.1.0";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "dusansimic";
+    repo = pname;
+    rev = version;
+    hash = "sha256-DAdx34EYO8ysQzbWrAIPoghhibwFtoqCi8oyDVyO5lk=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    blueprint-compiler
+    wrapGAppsHook4
+    appstream-glib
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+    librsvg
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pygobject3
+  ];
+
+  # Prevent double wrapping
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Dynamic wallpaper maker for Gnome";
+    homepage = "https://github.com/dusansimic/dynamic-wallpaper";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    mainProgram = "me.dusansimic.DynamicWallpaper";
+    maintainers = with maintainers; [ zendo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/editres/default.nix b/nixpkgs/pkgs/tools/graphics/editres/default.nix
new file mode 100644
index 000000000000..ce8b2e0a4ff6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/editres/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, pkg-config, libXt, libXaw, libXres, utilmacros }:
+
+stdenv.mkDerivation rec {
+  pname = "editres";
+  version = "1.0.8";
+
+  src = fetchurl {
+    url = "mirror://xorg/individual/app/editres-${version}.tar.gz";
+    sha256 = "sha256-LVbWB3vHZ6+n4DD+ssNy/mvok/7EApoj9FodVZ/YRq4=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libXt libXaw libXres utilmacros ];
+
+  configureFlags = [ "--with-appdefaultdir=$(out)/share/X11/app-defaults/editres" ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "https://cgit.freedesktop.org/xorg/app/editres/";
+    description = "A dynamic resource editor for X Toolkit applications";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    mainProgram = "editres";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/enblend-enfuse/default.nix b/nixpkgs/pkgs/tools/graphics/enblend-enfuse/default.nix
new file mode 100644
index 000000000000..f47a2aa961e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/enblend-enfuse/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchhg
+, autoreconfHook
+, boost
+, freeglut
+, glew
+, gsl
+, lcms2
+, libpng
+, libtiff
+, libGLU
+, libGL
+, vigra
+, help2man
+, pkg-config
+, perl
+, texliveSmall
+}:
+
+stdenv.mkDerivation rec {
+  pname = "enblend-enfuse";
+  version = "unstable-2022-03-06";
+
+  src = fetchhg {
+    url = "http://hg.code.sf.net/p/enblend/code";
+    rev = "0f423c72e51872698fe2985ca3bd453961ffe4e0";
+    sha256 = "sha256-0gCUSdg3HR3YeIbOByEBCZh2zGlYur6DeCOzUM53fdc=";
+  };
+
+  buildInputs = [ boost freeglut glew gsl lcms2 libpng libtiff libGLU libGL vigra ];
+
+  nativeBuildInputs = [ autoreconfHook help2man perl pkg-config texliveSmall ];
+
+  preConfigure = ''
+    patchShebangs src/embrace
+  '';
+
+  meta = with lib; {
+    homepage = "https://enblend.sourceforge.net/";
+    description = "Blends away the seams in a panoramic image mosaic using a multiresolution spline";
+    license = licenses.gpl2;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/eplot/default.nix b/nixpkgs/pkgs/tools/graphics/eplot/default.nix
new file mode 100644
index 000000000000..2e69bc8a2637
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/eplot/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, gnuplot, ruby }:
+
+stdenv.mkDerivation {
+  pname = "eplot";
+  version = "2.09";
+
+  # Upstream has been contacted (2015-03) regarding providing versioned
+  # download URLs. Initial response was positive, but no action yet.
+  src = fetchurl {
+    url = "http://liris.cnrs.fr/christian.wolf/software/eplot/download/eplot";
+    sha256 = "0y9x82i3sfpgxsqz2w42r6iad6ph7vxb7np1xbwapx5iipciclw5";
+  };
+
+  ecSrc = fetchurl {
+    url = "http://liris.cnrs.fr/christian.wolf/software/eplot/download/ec";
+    sha256 = "0fg31g8mrcx14h2rjcf091cbd924n19z55iscaiflspifya30yhd";
+  };
+
+  buildInputs = [ ruby ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    cp "$src" "$out/bin/eplot"
+    cp "$ecSrc" "$out/bin/ec"
+    chmod +x "$out/bin/"*
+
+    sed -i -e "s|gnuplot -persist|${gnuplot}/bin/gnuplot -persist|" "$out/bin/eplot"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Create plots quickly with gnuplot";
+    longDescription = ''
+      eplot ("easy gnuplot") is a ruby script which allows to pipe data easily
+      through gnuplot and create plots quickly, which can be saved in
+      postscript, PDF, PNG or EMF files. Plotting of multiple files into a
+      single diagram is supported.
+
+      This package also includes the complementary 'ec' tool (say "extract
+      column").
+    '';
+    homepage = "https://perso.liris.cnrs.fr/christian.wolf/software/eplot/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bjornfor shamilton ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/epstool/default.nix b/nixpkgs/pkgs/tools/graphics/epstool/default.nix
new file mode 100644
index 000000000000..5952734e4582
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/epstool/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "3.09";
+  pname = "epstool";
+
+  src = fetchurl {
+    url = "http://ftp.de.debian.org/debian/pool/main/e/epstool/epstool_${version}.orig.tar.xz";
+    hash = "sha256-HoUknRpE+UGLH5Wjrr2LB4TauOSd62QXrJuZbKCPYBE=";
+  };
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "CLINK=${stdenv.cc.targetPrefix}cc"
+    "LINK=${stdenv.cc.targetPrefix}cc"
+  ];
+
+  installPhase = ''
+    make EPSTOOL_ROOT=$out install
+  '';
+
+  meta = with lib; {
+    description = "A utility to create or extract preview images in EPS files, fix bounding boxes and convert to bitmaps";
+    homepage = "http://pages.cs.wisc.edu/~ghost/gsview/epstool.htm";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.asppsa ];
+    platforms = platforms.all;
+    mainProgram = "epstool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/escrotum/default.nix b/nixpkgs/pkgs/tools/graphics/escrotum/default.nix
new file mode 100644
index 000000000000..c2e5a7ec9a71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/escrotum/default.nix
@@ -0,0 +1,52 @@
+{ lib, python3Packages, fetchFromGitHub
+, ffmpeg-full
+, gtk3
+, pango
+, gobject-introspection
+, wrapGAppsHook
+}:
+
+with python3Packages; buildPythonApplication {
+  pname = "escrotum";
+  version = "unstable-2020-12-07";
+
+  src = fetchFromGitHub {
+    owner  = "Roger";
+    repo   = "escrotum";
+    rev    = "a41d0f11bb6af4f08e724b8ccddf8513d905c0d1";
+    sha256 = "sha256-z0AyTbOEE60j/883X17mxgoaVlryNtn0dfEB0C18G2s=";
+  };
+
+  buildInputs = [
+    gtk3
+    pango
+  ];
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = [ pygobject3 xcffib pycairo numpy ];
+
+  # Cannot find pango without strictDeps = false
+  strictDeps = false;
+
+  outputs = [ "out" "man" ];
+
+  makeWrapperArgs = ["--prefix PATH : ${lib.makeBinPath [ ffmpeg-full ]}"];
+
+  postInstall = ''
+    mkdir -p $man/share/man/man1
+    cp man/escrotum.1 $man/share/man/man1/
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Roger/escrotum";
+    description = "Linux screen capture using pygtk, inspired by scrot";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rasendubi ];
+    license = licenses.gpl3;
+    mainProgram = "escrotum";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/esshader/default.nix b/nixpkgs/pkgs/tools/graphics/esshader/default.nix
new file mode 100644
index 000000000000..38bd4d1b7f0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/esshader/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, pkg-config, libGL, glfw, soil, lib }:
+
+stdenv.mkDerivation {
+  pname = "esshader";
+  version = "unstable-2020-08-09";
+
+  src = fetchFromGitHub {
+    owner = "cmcsun";
+    repo = "esshader";
+    rev = "506eb02f3de52d3d1f4d81ac9ee145655216dee5";
+    sha256 = "sha256-euxJw7CqOwi6Ndzalps37kDr5oOIL3tZICCfmxsujfk=";
+  };
+
+  postPatch = ''
+    substituteInPlace config.mk \
+      --replace "-lGLESv2" "-lGL -lGLESv2"
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [
+    libGL glfw soil
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a esshader $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Offline ShaderToy-compatible GLSL shader viewer using OpenGL ES 2.0";
+    homepage = "https://github.com/cmcsun/esshader";
+    license = licenses.mit;
+    maintainers = with maintainers; [ astro ];
+    platforms = lib.platforms.unix;
+    # never built on aarch64-darwin, x86_64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin;
+    mainProgram = "esshader";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/exif/default.nix b/nixpkgs/pkgs/tools/graphics/exif/default.nix
new file mode 100644
index 000000000000..437ae29a2f50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/exif/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, pkg-config
+, libexif
+, popt
+, libintl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "exif";
+  version = "0.6.22";
+
+  src = fetchFromGitHub {
+    owner = "libexif";
+    repo = pname;
+    rev = "${pname}-${builtins.replaceStrings ["."] ["_"] version}-release";
+    sha256 = "1xlb1gdwxm3rmw7vlrynhvjp9dkwmvw23mxisdbdmma7ah2nda3i";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2021-27815.part-1.patch";
+      url = "https://github.com/libexif/exif/commit/f6334d9d32437ef13dc902f0a88a2be0063d9d1c.patch";
+      sha256 = "0mfx7l8w3w1c2mn5h5d6s7gdfyd91wnml8v0f19v5sdn70hx5aa4";
+    })
+    (fetchpatch {
+      name = "CVE-2021-27815.part-2.patch";
+      url = "https://github.com/libexif/exif/commit/eb84b0e3c5f2a86013b6fcfb800d187896a648fa.patch";
+      sha256 = "11lyvy20maisiyhxgxvm85v5l5ba7p0bpd4m0g4ryli32mrwwy0l";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libexif popt libintl ];
+
+  meta = with lib; {
+    homepage = "https://libexif.github.io";
+    description = "A utility to read and manipulate EXIF data in digital photographs";
+    platforms = platforms.unix;
+    license = licenses.lgpl21Plus;
+    mainProgram = "exif";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/exifprobe/default.nix b/nixpkgs/pkgs/tools/graphics/exifprobe/default.nix
new file mode 100644
index 000000000000..7331ac69185a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/exifprobe/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "exifprobe";
+  version = "unstable-2018-06-19";
+
+  src = fetchFromGitHub {
+    owner = "hfiguiere";
+    repo = "exifprobe";
+    rev = "ce1ea2bc3dbbe8092b26f41cd89831cafe633d69";
+    sha256 = "1c1fhc0v1m452lgnfcijnvrc0by06qfbhn3zkliqi60kv8l2isbp";
+  };
+
+  CFLAGS = [ "-O2" ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    mv $out/usr/bin $out/bin
+    mv $out/usr/share $out/share
+    rm -r $out/usr
+  '';
+
+  meta = with lib; {
+    description = "Tool for reading EXIF data from image files produced by digital cameras";
+    homepage = "https://github.com/hfiguiere/exifprobe";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ siraben ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/exiftags/default.nix b/nixpkgs/pkgs/tools/graphics/exiftags/default.nix
new file mode 100644
index 000000000000..6823f6bc20eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/exiftags/default.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "exiftags";
+  version = "1.01";
+
+  src = fetchurl {
+    url = "https://johnst.org/sw/exiftags/exiftags-${version}.tar.gz";
+    sha256 = "194ifl6hybx2a5x8jhlh9i56k3qfc6p2l72z0ii1b7v0bzg48myr";
+  };
+
+  patchPhase = ''
+    sed -i -e s@/usr/local@$out@ Makefile
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $out/man/man1
+  '';
+
+  meta = {
+    homepage = "http://johnst.org/sw/exiftags/";
+    description = "Displays EXIF data from JPEG files";
+    license = lib.licenses.free;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/facedetect/default.nix b/nixpkgs/pkgs/tools/graphics/facedetect/default.nix
new file mode 100644
index 000000000000..d83501d26da6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/facedetect/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, python3Packages }:
+
+stdenv.mkDerivation rec {
+  pname = "facedetect";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "wavexx";
+    repo = "facedetect";
+    rev = "v${version}";
+    sha256 = "0mddh71cjbsngpvjli406ndi2x613y39ydgb8bi4z1jp063865sd";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "python3-support.patch";
+      url = "https://gitlab.com/wavexx/facedetect/-/commit/8037d4406eb76dd5c106819f72c3562f8b255b5b.patch";
+      sha256 = "1752k37pbkigiwglx99ba9360ahzzrrb65a8d77k3xs4c3bcmk2p";
+    })
+  ];
+
+  buildInputs = [ python3Packages.python python3Packages.wrapPython ];
+  pythonPath = [ python3Packages.numpy python3Packages.opencv4 ];
+
+  dontConfigure = true;
+
+  postPatch = ''
+    substituteInPlace facedetect \
+      --replace /usr/share/opencv "${python3Packages.opencv4}/share/opencv4"
+  '';
+
+  installPhase = ''
+    install -v -m644 -D README.rst $out/share/doc/${pname}-${version}/README.rst
+    install -v -m755 -D facedetect $out/bin/facedetect
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.thregr.org/~wavexx/software/facedetect/";
+    description = "A simple face detector for batch processing";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rycee ];
+    mainProgram = "facedetect";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/fbv/default.nix b/nixpkgs/pkgs/tools/graphics/fbv/default.nix
new file mode 100644
index 000000000000..659a661fded8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/fbv/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, fetchpatch, getopt, libjpeg, libpng12, giflib }:
+
+stdenv.mkDerivation rec {
+  pname = "fbv";
+  version = "1.0b";
+
+  src = fetchurl {
+    url = "http://s-tech.elsat.net.pl/fbv/fbv-${version}.tar.gz";
+    sha256 = "0g5b550vk11l639y8p5sx1v1i6ihgqk0x1hd0ri1bc2yzpdbjmcv";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/void-linux/void-packages/4a5bfe522ea5afd8203e804dc6a642d0871cd6dd/srcpkgs/fbv/patches/giflib-5.1.patch";
+      sha256 = "00q1zcn92yvvyij68bnq0m1sr3a411w914f4nyp6mpz0j5xc6dc7";
+    })
+  ];
+
+  patchFlags = [ "-p0" ];
+
+  buildInputs = [ getopt libjpeg libpng12 giflib ];
+  makeFlags = [ "LDFLAGS=-lgif" ];
+
+  enableParallelBuilding = true;
+
+  preInstall = ''
+    mkdir -p $out/{bin,man/man1}
+  '';
+
+  meta = with lib; {
+    description = "View pictures on a linux framebuffer device";
+    homepage = "http://s-tech.elsat.net.pl/fbv/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "fbv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/feedgnuplot/default.nix b/nixpkgs/pkgs/tools/graphics/feedgnuplot/default.nix
new file mode 100644
index 000000000000..6503a2887ab2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/feedgnuplot/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, fetchFromGitHub
+, makeWrapper
+, makeFontsConf
+, freefont_ttf
+, gnuplot
+, perl
+, perlPackages
+, stdenv
+, shortenPerlShebang
+, installShellFiles
+}:
+
+let
+
+  fontsConf = makeFontsConf { fontDirectories = [ freefont_ttf ]; };
+
+in
+
+perlPackages.buildPerlPackage rec {
+  pname = "feedgnuplot";
+  version = "1.61";
+
+  src = fetchFromGitHub {
+    owner = "dkogan";
+    repo = "feedgnuplot";
+    rev = "v${version}";
+    sha256 = "sha256-r5rszxr65lSozkUNaqfBn4I4XjLtvQ6T/BG366JXLRM=";
+  };
+
+  outputs = [ "out" ];
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ] ++ lib.optional stdenv.isDarwin shortenPerlShebang;
+
+  buildInputs = [ gnuplot perl ]
+    ++ (with perlPackages; [ ListMoreUtils IPCRun StringShellQuote ]);
+
+  # Fontconfig error: Cannot load default config file
+  FONTCONFIG_FILE = fontsConf;
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  # Tests require gnuplot 4.6.4 and are completely skipped with gnuplot 5.
+  doCheck = false;
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/feedgnuplot
+  '' + ''
+    wrapProgram $out/bin/feedgnuplot \
+        --prefix "PATH" ":" "$PATH" \
+        --prefix "PERL5LIB" ":" "$PERL5LIB"
+
+    installShellCompletion --bash --name feedgnuplot.bash completions/bash/feedgnuplot
+    installShellCompletion --zsh completions/zsh/_feedgnuplot
+  '';
+
+  meta = with lib; {
+    description = "General purpose pipe-oriented plotting tool";
+    homepage = "https://github.com/dkogan/feedgnuplot/";
+    license = with licenses; [ artistic1 gpl1Plus ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ mnacamura ];
+    mainProgram = "feedgnuplot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/fgallery/default.nix b/nixpkgs/pkgs/tools/graphics/fgallery/default.nix
new file mode 100644
index 000000000000..be8bc4eb6eab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/fgallery/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, unzip, makeWrapper, perlPackages
+, coreutils, zip, imagemagick, pngcrush, lcms2
+, facedetect, fbida }:
+
+# TODO: add optional dependencies (snippet from fgallery source):
+#
+# if(system("jpegoptim -V >/dev/null 2>&1")) {
+#   $jpegoptim = 0;
+# }
+
+stdenv.mkDerivation rec {
+  pname = "fgallery";
+  version = "1.9.1";
+
+  src = fetchurl {
+    url = "https://www.thregr.org/~wavexx/software/fgallery/releases/fgallery-${version}.zip";
+    hash = "sha256-FvF0wkRe3wTPUG9/GEBxkaxvZ1B4wEd9kI9rURHKxn0=";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+  buildInputs = (with perlPackages; [ perl ImageExifTool CpanelJSONXS ]);
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "/usr" $out
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/fgallery"
+
+    cp -r * "$out/share/fgallery"
+    ln -s -r "$out/share/fgallery/fgallery" "$out/bin/fgallery"
+
+    # Don't preserve file attributes when copying files to output directories.
+    # (fgallery copies parts of itself to each output directory, and without
+    # this change the read-only nix store causes some bumps in the workflow.)
+    sed -i -e "s|'cp'|'cp', '--no-preserve=all'|g" "$out/share/fgallery/fgallery"
+
+    wrapProgram "$out/share/fgallery/fgallery" \
+        --set PERL5LIB "$PERL5LIB" \
+        --set PATH "${lib.makeBinPath
+                     [ coreutils zip imagemagick pngcrush lcms2 facedetect fbida ]}"
+  '';
+
+  meta = with lib; {
+    description = "Static photo gallery generator";
+    homepage = "https://www.thregr.org/~wavexx/software/fgallery/";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "fgallery";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/fim/default.nix b/nixpkgs/pkgs/tools/graphics/fim/default.nix
new file mode 100644
index 000000000000..0f2e11ba59b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/fim/default.nix
@@ -0,0 +1,52 @@
+{ gcc9Stdenv, fetchurl, autoconf, automake, pkg-config, lib
+, perl, flex, bison, readline, libexif
+, x11Support ? true, SDL
+, svgSupport ? true, inkscape
+, asciiArtSupport ? true, aalib
+, gifSupport ? true, giflib
+, tiffSupport ? true, libtiff
+, jpegSupport ? true, libjpeg
+, pngSupport ? true, libpng
+}:
+
+gcc9Stdenv.mkDerivation rec {
+  pname = "fim";
+  version = "0.7";
+
+  src = fetchurl {
+    url = "mirror://savannah/fbi-improved/${pname}-${version}-trunk.tar.gz";
+    sha256 = "sha256-/p7bjeZM46DJOQ9sgtebhkNpBPj2RJYY3dMXhzHnNmg=";
+  };
+
+  postPatch = ''
+   substituteInPlace doc/vim2html.pl \
+     --replace /usr/bin/perl ${perl}/bin/perl
+  '';
+
+  nativeBuildInputs = [ autoconf automake pkg-config ];
+
+  buildInputs = with lib;
+    [ perl flex bison readline libexif ]
+    ++ optional x11Support SDL
+    ++ optional svgSupport inkscape
+    ++ optional asciiArtSupport aalib
+    ++ optional gifSupport giflib
+    ++ optional tiffSupport libtiff
+    ++ optional jpegSupport libjpeg
+    ++ optional pngSupport libpng;
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString x11Support "-lSDL";
+
+  meta = with lib; {
+    description = "A lightweight, highly customizable and scriptable image viewer";
+    longDescription = ''
+      FIM (Fbi IMproved) is a lightweight, console based image viewer that aims
+      to be a highly customizable and scriptable for users who are comfortable
+      with software like the VIM text editor or the Mutt mail user agent.
+    '';
+    homepage = "https://www.nongnu.org/fbi-improved/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/flam3/default.nix b/nixpkgs/pkgs/tools/graphics/flam3/default.nix
new file mode 100644
index 000000000000..4eb0bc67c3f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/flam3/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libjpeg
+, libpng
+, libxml2
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "flam3";
+  version = "3.1.1+date=2018-04-12";
+
+  src = fetchFromGitHub {
+    owner = "scottdraves";
+    repo = pname;
+    rev = "7fb50c82e90e051f00efcc3123d0e06de26594b2";
+    hash = "sha256-cKRfmTcyWY2LyxqojTzxD2wnxu5eh3emHi51bhS3gYg=";
+  };
+
+  buildInputs = [
+    libjpeg
+    libpng
+    libxml2
+    zlib
+  ];
+
+  meta = with lib; {
+    homepage = "https://flam3.com/";
+    description = "Cosmic recursive fractal flames";
+    longDescription = ''
+      Flames are algorithmically generated images and animations. The software
+      was originally written in 1992 and released as open source, aka free
+      software. Over the years it has been greatly expanded, and is now widely
+      used to create art and special effects. The shape and color of each image
+      is specified by a long string of numbers - a genetic code of sorts.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gfxreconstruct/default.nix b/nixpkgs/pkgs/tools/graphics/gfxreconstruct/default.nix
new file mode 100644
index 000000000000..b166f82c6294
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gfxreconstruct/default.nix
@@ -0,0 +1,68 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, cmake
+, makeWrapper
+, pkg-config
+, python3
+, wayland
+, libX11
+, libxcb
+, lz4
+, vulkan-loader
+, xcbutilkeysyms
+, zlib
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gfxreconstruct";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "LunarG";
+    repo = "gfxreconstruct";
+    rev = "v${version}";
+    hash = "sha256-4jFHnDiLO2BrfXzxKXU3FGhvcmkUXCT2k/7A+DJPz90=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [
+    libX11
+    libxcb
+    lz4
+    python3
+    wayland
+    xcbutilkeysyms
+    zlib
+    zstd
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    pkg-config
+  ];
+
+  # The python script searches in subfolders, but we want to search in the same bin directory
+  prePatch = ''
+    substituteInPlace tools/gfxrecon/gfxrecon.py \
+      --replace "scriptdir, '..', cmd" 'scriptdir'
+  '';
+
+  # Fix the path to the layer library
+  postInstall = ''
+    substituteInPlace $out/share/vulkan/explicit_layer.d/VkLayer_gfxreconstruct.json \
+      --replace 'libVkLayer_gfxreconstruct.so' "$out/lib/libVkLayer_gfxreconstruct.so"
+    wrapProgram $out/bin/gfxrecon-replay \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ vulkan-loader ]}
+  '';
+
+  meta = with lib; {
+    description = "Graphics API Capture and Replay Tools";
+    homepage = "https://github.com/LunarG/gfxreconstruct/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Flakebi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ggobi/default.nix b/nixpkgs/pkgs/tools/graphics/ggobi/default.nix
new file mode 100644
index 000000000000..2bd5abf00666
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ggobi/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, pkg-config, libxml2, gtk2 }:
+
+stdenv.mkDerivation rec {
+  version = "2.1.11";
+  pname = "ggobi";
+
+  src = fetchurl {
+    url = "http://www.ggobi.org/downloads/ggobi-${version}.tar.bz2";
+    sha256 = "2c4ddc3ab71877ba184523e47b0637526e6f3701bd9afb6472e6dfc25646aed7";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libxml2 gtk2 ];
+
+  configureFlags = [ "--with-all-plugins" ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "Visualization program for exploring high-dimensional data";
+    homepage = "http://www.ggobi.org/";
+    license = licenses.cpl10;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.michelk ];
+    mainProgram = "ggobi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gifsicle/default.nix b/nixpkgs/pkgs/tools/graphics/gifsicle/default.nix
new file mode 100644
index 000000000000..912bbde2f3e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gifsicle/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, xorgproto, libXt, libX11
+, gifview ? false
+, static ? stdenv.hostPlatform.isStatic
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gifsicle";
+  version = "1.94";
+
+  src = fetchurl {
+    url = "https://www.lcdf.org/gifsicle/${pname}-${version}.tar.gz";
+    sha256 = "sha256-S8lwBcB4liDedfiZl9PC9wdYxyxhqgou8E96Zxov+Js=";
+  };
+
+  buildInputs = lib.optionals gifview [ xorgproto libXt libX11 ];
+
+  configureFlags = lib.optional (!gifview) "--disable-gifview";
+
+  LDFLAGS = lib.optionalString static "-static";
+
+  doCheck = true;
+  checkPhase = ''
+    ./src/gifsicle --info logo.gif
+  '';
+
+  meta = {
+    description = "Command-line tool for creating, editing, and getting information about GIF images and animations";
+    homepage = "https://www.lcdf.org/gifsicle/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gifski/Cargo.lock b/nixpkgs/pkgs/tools/graphics/gifski/Cargo.lock
new file mode 100644
index 000000000000..bc840dec7f1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gifski/Cargo.lock
@@ -0,0 +1,820 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7d5a2cecb58716e47d67d5703a249964b14c7be1ec3cad3affc295b2d1c35d"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bindgen"
+version = "0.64.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956"
+dependencies = [
+ "clap_builder",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "fallible_collections"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a88c69768c0a15262df21899142bc6df9b9b823546d4b4b9a7bc2d6c448ec6fd"
+dependencies = [
+ "hashbrown",
+]
+
+[[package]]
+name = "ffmpeg-next"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8af03c47ad26832ab3aabc4cdbf210af3d3b878783edd5a7ba044ba33aab7a60"
+dependencies = [
+ "bitflags",
+ "ffmpeg-sys-next",
+ "libc",
+]
+
+[[package]]
+name = "ffmpeg-sys-next"
+version = "6.0.1"
+source = "git+https://github.com/kornelski/rust-ffmpeg-sys-1?rev=94d5496d88900bdc0cad66733138134d0ea3cf31#94d5496d88900bdc0cad66733138134d0ea3cf31"
+dependencies = [
+ "bindgen",
+ "cc",
+ "libc",
+ "num_cpus",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "gif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
+dependencies = [
+ "weezl",
+]
+
+[[package]]
+name = "gif-dispose"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "347afae04a03ca25a3a76d130abb63e7e6e7367b895470fdc3d996aec916c3d7"
+dependencies = [
+ "gif",
+ "imgref",
+ "rgb",
+]
+
+[[package]]
+name = "gifski"
+version = "1.13.1"
+dependencies = [
+ "clap",
+ "crossbeam-channel",
+ "crossbeam-utils",
+ "dunce",
+ "ffmpeg-next",
+ "gif",
+ "gif-dispose",
+ "imagequant",
+ "imgref",
+ "lodepng",
+ "loop9",
+ "natord",
+ "num-traits",
+ "pbr",
+ "quick-error",
+ "resize",
+ "rgb",
+ "wild",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "imagequant"
+version = "4.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84d51957ac48371e8e2eaaeb4eba56150ff2109c1c8c200002afb7dd6e2d260f"
+dependencies = [
+ "arrayvec",
+ "once_cell",
+ "rayon",
+ "rgb",
+ "thread_local",
+]
+
+[[package]]
+name = "imgref"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90d944e334f00f4449c9640b440a171f816be0152305c12ef90424fc35fd035c"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "lodepng"
+version = "3.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3cdccd0cf57a5d456f0656ebcff72c2e19503287e1afbf3b84382812adc0606"
+dependencies = [
+ "crc32fast",
+ "fallible_collections",
+ "flate2",
+ "libc",
+ "rgb",
+]
+
+[[package]]
+name = "loop9"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81a837f917de41d61ab531ba255d1913208d02325cab0d6a66a706e0dbaa699d"
+dependencies = [
+ "imgref",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "natord"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308d96db8debc727c3fd9744aac51751243420e46edf401010908da7f8d5e57c"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "pbr"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed5827dfa0d69b6c92493d6c38e633bbaa5937c153d0d7c28bf12313f8c6d514"
+dependencies = [
+ "crossbeam-channel",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "resize"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce43c0220eff4793a20c120ff89ee01499ba3c882957021dcdc12f5e4ca97c8"
+dependencies = [
+ "rayon",
+ "rgb",
+]
+
+[[package]]
+name = "rgb"
+version = "0.8.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "wild"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10d01931a94d5a115a53f95292f51d316856b68a035618eb831bbba593a30b67"
+dependencies = [
+ "glob",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c19fae0c8a9efc6a8281f2e623db8af1db9e57852e04cde3e754dd2dc29340f"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc56589e9ddd1f1c28d4b4b5c773ce232910a6bb67a70133d61c9e347585efe9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
diff --git a/nixpkgs/pkgs/tools/graphics/gifski/default.nix b/nixpkgs/pkgs/tools/graphics/gifski/default.nix
new file mode 100644
index 000000000000..312388a9742f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gifski/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, ffmpeg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gifski";
+  version = "1.13.1";
+
+  src = fetchFromGitHub {
+    owner = "ImageOptim";
+    repo = "gifski";
+    # rev = version;
+    rev = "1.31.1"; # upstream tagged incorrectly
+    hash = "sha256-JzQReCX1AfFhbVbSPOIAKAVvNoddrWFHaJ1AxlsIPA0=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "ffmpeg-sys-next-6.0.1" = "sha256-/KxW57lt9/qKqNUUZqJucsP0cKvZ1m/FdGCsZxBlxYc=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    ffmpeg
+  ];
+
+  buildFeatures = [ "video" ];
+
+  # When the default checkType of release is used, we get the following error:
+  #
+  #   error: the crate `gifski` is compiled with the panic strategy `abort` which
+  #   is incompatible with this crate's strategy of `unwind`
+  #
+  # It looks like https://github.com/rust-lang/cargo/issues/6313, which does not
+  # outline a solution.
+  #
+  checkType = "debug";
+
+  # Cargo.lock is outdated
+  postPatch = ''
+    cargo metadata --offline
+  '';
+
+  meta = with lib; {
+    description = "GIF encoder based on libimagequant (pngquant)";
+    homepage = "https://gif.ski/";
+    changelog = "https://github.com/ImageOptim/gifski/releases/tag/${src.rev}";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ figsoda marsam ];
+    mainProgram = "gifski";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/glee/default.nix b/nixpkgs/pkgs/tools/graphics/glee/default.nix
new file mode 100644
index 000000000000..aeec2ffb4939
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/glee/default.nix
@@ -0,0 +1,33 @@
+{lib, stdenv, fetchgit, cmake, libGLU, libGL, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "glee";
+  rev = "f727ec7463d514b6279981d12833f2e11d62b33d";
+  version = "20170205-${lib.strings.substring 0 7 rev}";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://git.code.sf.net/p/${pname}/${pname}";
+    sha256 = "13mf3s7nvmj26vr2wbcg08l4xxqsc1ha41sx3bfghvq8c5qpk2ph";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ libGLU libGL xorg.libX11 ];
+
+  configureScript = ''
+    cmake
+  '';
+
+  preInstall = ''
+    sed -i 's/readme/Readme/' cmake_install.cmake
+  '';
+
+  meta = with lib; {
+    description = "GL Easy Extension Library";
+    homepage = "https://sourceforge.net/p/glee/glee/";
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/glmark2/default.nix b/nixpkgs/pkgs/tools/graphics/glmark2/default.nix
new file mode 100644
index 000000000000..cbfdeb22fbcc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/glmark2/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, makeWrapper
+, meson
+, ninja
+, wayland-scanner
+, libjpeg
+, libpng
+, libX11
+, libGL
+, libdrm
+, udev
+, wayland
+, wayland-protocols
+, mesa
+}:
+
+stdenv.mkDerivation rec {
+  pname = "glmark2";
+  version = "2023.01";
+
+  src = fetchFromGitHub {
+    owner = "glmark2";
+    repo = "glmark2";
+    rev = version;
+    sha256 = "sha256-WCvc5GqrAdpIKQ4LVqwO6ZGbzBgLCl49NxiGJynIjSQ=";
+  };
+
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ pkg-config makeWrapper meson ninja wayland-scanner ];
+  buildInputs = [
+    libjpeg
+    libpng
+    libX11
+    libdrm
+    udev
+    wayland
+    wayland-protocols
+    mesa
+  ];
+
+  mesonFlags = [ "-Dflavors=drm-gl,drm-glesv2,gbm-gl,gbm-glesv2,wayland-gl,wayland-glesv2,x11-gl,x11-gl-egl,x11-glesv2" ];
+
+  postInstall = ''
+    for binary in $out/bin/glmark2*; do
+      wrapProgram $binary \
+        --set LD_LIBRARY_PATH ${libGL}/lib
+    done
+  '';
+
+  meta = with lib; {
+    description = "OpenGL (ES) 2.0 benchmark";
+    homepage = "https://github.com/glmark2/glmark2";
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      glmark2 is a benchmark for OpenGL (ES) 2.0. It uses only the subset of
+      the OpenGL 2.0 API that is compatible with OpenGL ES 2.0.
+    '';
+    platforms = platforms.linux;
+    maintainers = [ maintainers.wmertens ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/glxinfo/default.nix b/nixpkgs/pkgs/tools/graphics/glxinfo/default.nix
new file mode 100644
index 000000000000..0dcf30fda156
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/glxinfo/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libGL, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "glxinfo";
+  version = "8.4.0";
+
+  src = fetchurl {
+    url = "ftp://ftp.freedesktop.org/pub/mesa/demos/mesa-demos-${version}.tar.bz2";
+    sha256 = "0zgzbz55a14hz83gbmm0n9gpjnf5zadzi2kjjvkn6khql2a9rs81";
+  };
+
+  buildInputs = [ libX11 libGL ];
+
+  dontConfigure = true;
+
+  buildPhase = "
+    $CC src/xdemos/{glxinfo.c,glinfo_common.c} -o glxinfo -lGL -lX11
+    $CC src/xdemos/glxgears.c -o glxgears -lGL -lX11 -lm
+    $CC src/egl/opengles2/es2_info.c -o es2_info -lEGL -lGLESv2 -lX11
+    $CC src/egl/opengles2/es2gears.c src/egl/eglut/{eglut.c,eglut_x11.c} -o es2gears -Isrc/egl/eglut -lEGL -lGLESv2 -lX11 -lm
+    $CC src/egl/opengl/eglinfo.c -o eglinfo -lEGL -lGLESv2 -lX11
+  ";
+
+  installPhase = "
+    install -Dm 555 -t $out/bin glx{info,gears} es2{_info,gears} eglinfo
+  ";
+
+  meta = with lib; {
+    description = "Test utilities for OpenGL";
+    homepage = "https://www.mesa3d.org/";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gmic-qt/default.nix b/nixpkgs/pkgs/tools/graphics/gmic-qt/default.nix
new file mode 100644
index 000000000000..a67479e4ffd5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gmic-qt/default.nix
@@ -0,0 +1,143 @@
+{ lib
+, stdenv
+, fetchzip
+, cimg
+, cmake
+, coreutils
+, curl
+, fftw
+, gimp
+, gimpPlugins
+, gmic
+, gnugrep
+, gnused
+, graphicsmagick
+, libjpeg
+, libpng
+, libtiff
+, ninja
+, nix-update
+, openexr
+, pkg-config
+, qtbase
+, qttools
+, wrapQtAppsHook
+, writeShellScript
+, zlib
+, variant ? "standalone"
+}:
+
+let
+  variants = {
+    gimp = {
+      extraDeps = [
+        gimp
+        gimp.gtk
+      ];
+      description = "GIMP plugin for the G'MIC image processing framework";
+    };
+
+    standalone = {
+      description = "Versatile front-end to the image processing framework G'MIC";
+    };
+  };
+
+in
+
+assert lib.assertMsg
+  (builtins.hasAttr variant variants)
+  "gmic-qt variant \"${variant}\" is not supported. Please use one of ${lib.concatStringsSep ", " (builtins.attrNames variants)}.";
+
+assert lib.assertMsg
+  (builtins.all (d: d != null) variants.${variant}.extraDeps or [])
+  "gmic-qt variant \"${variant}\" is missing one of its dependencies.";
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "gmic-qt${lib.optionalString (variant != "standalone") "-${variant}"}";
+  version = "3.3.3";
+
+  src = fetchzip {
+    url = "https://gmic.eu/files/source/gmic_${finalAttrs.version}.tar.gz";
+    hash = "sha256-LkWQ3fSHJSaXztX+soGZ+pl3MnXNgw6tV09356bAfYY=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    ninja
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    gmic
+    qtbase
+    qttools
+    fftw
+    zlib
+    libjpeg
+    libtiff
+    libpng
+    openexr
+    graphicsmagick
+    curl
+  ] ++ variants.${variant}.extraDeps or [];
+
+  preConfigure = ''
+    cd gmic-qt
+  '';
+
+  postPatch = ''
+    patchShebangs \
+      translations/filters/csv2ts.sh \
+      translations/lrelease.sh
+  '';
+
+  cmakeFlags = [
+    (lib.cmakeFeature "GMIC_QT_HOST" (if variant == "standalone" then "none" else variant))
+    (lib.cmakeBool "ENABLE_SYSTEM_GMIC" true)
+    (lib.cmakeBool "ENABLE_DYNAMIC_LINKING" true)
+  ];
+
+  postFixup = lib.optionalString (variant == "gimp") ''
+    echo "wrapping $out/${gimp.targetPluginDir}/gmic_gimp_qt/gmic_gimp_qt"
+    wrapQtApp "$out/${gimp.targetPluginDir}/gmic_gimp_qt/gmic_gimp_qt"
+  '';
+
+  passthru = {
+    tests = {
+      gimp-plugin = gimpPlugins.gmic;
+      # Needs to update them all in lockstep.
+      inherit cimg gmic;
+    };
+
+    updateScript = writeShellScript "gmic-qt-update-script" ''
+      set -euo pipefail
+
+      export PATH="${lib.makeBinPath [ coreutils curl gnugrep gnused nix-update ]}:$PATH"
+
+      latestVersion=$(curl 'https://gmic.eu/files/source/' \
+                       | grep -E 'gmic_[^"]+\.tar\.gz' \
+                       | sed -E 's/.+<a href="gmic_([^"]+)\.tar\.gz".+/\1/g' \
+                       | sort --numeric-sort --reverse | head -n1)
+
+      if [[ '${finalAttrs.version}' = "$latestVersion" ]]; then
+          echo "The new version same as the old version."
+          exit 0
+      fi
+
+      nix-update --version "$latestVersion"
+    '';
+  };
+
+  meta = {
+    homepage = "http://gmic.eu/";
+    inherit (variants.${variant}) description;
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "gmic_qt";
+    maintainers = [
+      lib.maintainers.AndersonTorres
+      lib.maintainers.lilyinstarlight
+    ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/gnuplot/default.nix b/nixpkgs/pkgs/tools/graphics/gnuplot/default.nix
new file mode 100644
index 000000000000..64e00642889c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gnuplot/default.nix
@@ -0,0 +1,93 @@
+{ lib, stdenv, fetchurl, makeWrapper, pkg-config, texinfo
+, cairo, gd, libcerf, pango, readline, zlib
+, withTeXLive ? false, texliveSmall
+, withLua ? false, lua
+, withCaca ? false, libcaca
+, libX11 ? null
+, libXt ? null
+, libXpm ? null
+, libXaw ? null
+, aquaterm ? false
+, withWxGTK ? false, wxGTK32, Cocoa
+, fontconfig ? null
+, gnused ? null
+, coreutils ? null
+, withQt ? false, mkDerivation, qttools, qtbase, qtsvg
+}:
+
+assert libX11 != null -> (fontconfig != null && gnused != null && coreutils != null);
+let
+  withX = libX11 != null && !aquaterm && !stdenv.isDarwin;
+in
+(if withQt then mkDerivation else stdenv.mkDerivation) rec {
+  pname = "gnuplot";
+  version = "6.0.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gnuplot/${pname}-${version}.tar.gz";
+    sha256 = "sha256-Y1oo8Jk/arDRF54HKtObgTnQf1Ejf4Qdk8bC/0sXWOw=";
+  };
+
+  nativeBuildInputs = [ makeWrapper pkg-config texinfo ] ++ lib.optional withQt qttools;
+
+  buildInputs =
+    [ cairo gd libcerf pango readline zlib ]
+    ++ lib.optional withTeXLive texliveSmall
+    ++ lib.optional withLua lua
+    ++ lib.optional withCaca libcaca
+    ++ lib.optionals withX [ libX11 libXpm libXt libXaw ]
+    ++ lib.optionals withQt [ qtbase qtsvg ]
+    ++ lib.optional withWxGTK wxGTK32
+    ++ lib.optional (withWxGTK && stdenv.isDarwin) Cocoa;
+
+  postPatch = ''
+    # lrelease is in qttools, not in qtbase.
+    sed -i configure -e 's|''${QT5LOC}/lrelease|lrelease|'
+  '';
+
+  configureFlags = [
+    (if withX then "--with-x" else "--without-x")
+    (if withQt then "--with-qt=qt5" else "--without-qt")
+    (if aquaterm then "--with-aquaterm" else "--without-aquaterm")
+  ] ++ lib.optional withCaca "--with-caca";
+
+  CXXFLAGS = lib.optionalString (stdenv.isDarwin && withQt) "-std=c++11";
+
+  # we'll wrap things ourselves
+  dontWrapGApps = true;
+  dontWrapQtApps = true;
+
+  # binary wrappers don't support --run
+  postInstall = lib.optionalString withX ''
+    wrapProgramShell $out/bin/gnuplot \
+       --prefix PATH : '${lib.makeBinPath [ gnused coreutils fontconfig.bin ]}' \
+       "''${gappsWrapperArgs[@]}" \
+       "''${qtWrapperArgs[@]}" \
+       --run '. ${./set-gdfontpath-from-fontconfig.sh}'
+  '';
+
+  # When cross-compiling, don't build docs and demos.
+  # Inspiration taken from https://sourceforge.net/p/gnuplot/gnuplot-main/merge-requests/10/
+  makeFlags = lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
+    "-C src"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "http://www.gnuplot.info/";
+    description = "A portable command-line driven graphing utility for many platforms";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = {
+      # Essentially a BSD license with one modifaction:
+      # Permission to modify the software is granted, but not the right to
+      # distribute the complete modified source code.  Modifications are to
+      # be distributed as patches to the released version.  Permission to
+      # distribute binaries produced by compiling modified sources is granted,
+      # provided you: ...
+      url = "https://sourceforge.net/p/gnuplot/gnuplot-main/ci/master/tree/Copyright";
+    };
+    maintainers = with maintainers; [ lovek323 ];
+    mainProgram = "gnuplot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gnuplot/set-gdfontpath-from-fontconfig.sh b/nixpkgs/pkgs/tools/graphics/gnuplot/set-gdfontpath-from-fontconfig.sh
new file mode 100644
index 000000000000..92ad2e97b5b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gnuplot/set-gdfontpath-from-fontconfig.sh
@@ -0,0 +1,4 @@
+p=( $(fc-list : file | sed "s@/[^/]*: @@" | sort -u) )
+IFS=:
+export GDFONTPATH="${GDFONTPATH}${GDFONTPATH:+:}${p[*]}"
+unset IFS p
diff --git a/nixpkgs/pkgs/tools/graphics/goverlay/default.nix b/nixpkgs/pkgs/tools/graphics/goverlay/default.nix
new file mode 100644
index 000000000000..b73216a7875c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/goverlay/default.nix
@@ -0,0 +1,118 @@
+{ lib
+, writeScriptBin
+, bash
+, stdenv
+, fetchFromGitHub
+, fpc
+, lazarus-qt
+, wrapQtAppsHook
+, breeze-qt5
+, libGL
+, libGLU
+, libqt5pas
+, libX11
+, coreutils
+, git
+, gnugrep
+, libnotify
+, polkit
+, procps
+, systemd
+, util-linux
+, vulkan-tools
+, which
+, nix-update-script
+}:
+
+let
+  # Finds data files using the XDG Base Directory Specification
+  # See https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
+  find-xdg-data-files = writeScriptBin "find-xdg-data-files" ''
+    #!${bash}/bin/sh
+    IFS=:
+    for xdg_data_dir in ''${XDG_DATA_HOME:-$HOME/.local/share}:''${XDG_DATA_DIRS:-/usr/local/share:/usr/share}; do
+      if [ -f "$xdg_data_dir/$1" ]; then
+        echo "$xdg_data_dir/$1"
+      fi
+    done
+  '';
+in stdenv.mkDerivation rec {
+  pname = "goverlay";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "benjamimgois";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-oXkGrMHjs8uui0pzGYW8jnttet/5IX0r8eat0n5saFk=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  patches = [
+    # Find MangoHud & vkBasalt Vulkan layers using the XDG Base Directory Specification
+    ./find-xdg-data-files.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace 'prefix = /usr/local' "prefix = $out"
+
+    substituteInPlace overlayunit.pas \
+      --replace '/usr/share/icons/hicolor/128x128/apps/goverlay.png' "$out/share/icons/hicolor/128x128/apps/goverlay.png"
+  '';
+
+  nativeBuildInputs = [
+    fpc
+    lazarus-qt
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    breeze-qt5
+    libGL
+    libGLU
+    libqt5pas
+    libX11
+  ];
+
+  NIX_LDFLAGS = "-lGLU -rpath ${lib.makeLibraryPath buildInputs}";
+
+  buildPhase = ''
+    runHook preBuild
+    HOME=$(mktemp -d) lazbuild --lazarusdir=${lazarus-qt}/share/lazarus -B goverlay.lpi
+    runHook postBuild
+  '';
+
+  qtWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [
+      bash
+      coreutils
+      find-xdg-data-files
+      git
+      gnugrep
+      libnotify
+      polkit
+      procps
+      systemd
+      util-linux.bin
+      vulkan-tools
+      which
+    ]}"
+
+    # Force xcb since libqt5pas doesn't support Wayland
+    # See https://github.com/benjamimgois/goverlay/issues/107
+    "--set QT_QPA_PLATFORM xcb"
+  ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "An opensource project that aims to create a Graphical UI to help manage Linux overlays";
+    homepage = "https://github.com/benjamimgois/goverlay";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = platforms.linux;
+    mainProgram = "goverlay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/goverlay/find-xdg-data-files.patch b/nixpkgs/pkgs/tools/graphics/goverlay/find-xdg-data-files.patch
new file mode 100644
index 000000000000..17ba9ed1140e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/goverlay/find-xdg-data-files.patch
@@ -0,0 +1,40 @@
+diff --git a/overlayunit.pas b/overlayunit.pas
+index 97a088d..4c42414 100644
+--- a/overlayunit.pas
++++ b/overlayunit.pas
+@@ -5007,7 +5007,7 @@ begin
+    //Determine Mangohud dependency status
+ 
+           //locate MangoHud and store result in tmp folder
+-          RunCommand('bash -c ''find /usr/share/vulkan/implicit_layer.d/MangoHud.json >> /tmp/goverlay/dependency_mangohud''', s);
++          RunCommand('bash -c ''find-xdg-data-files vulkan/implicit_layer.d/MangoHud.json >> /tmp/goverlay/dependency_mangohud''', s);
+ 
+           // Assign Text file dependency_mangohud to variable mangohudVAR
+           AssignFile(mangohudVAR, '/tmp/goverlay/dependency_mangohud');
+@@ -5016,7 +5016,7 @@ begin
+           CloseFile(mangohudVAR);
+ 
+           // Read String and store value on mangohuddependencyVALUE based on result
+-          if mangohudSTR = '/usr/share/vulkan/implicit_layer.d/MangoHud.json' then
++          if mangohudSTR <> '' then
+           mangohuddependencyVALUE := 1
+           else
+           mangohuddependencyVALUE := 0;
+@@ -5025,7 +5025,7 @@ begin
+    //Determine vkBasalt dependency staus
+ 
+            //locate vkBasalt and store result in tmp folder
+-           RunCommand('bash -c ''find /usr/share/vulkan/implicit_layer.d/vkBasalt.json >> /tmp/goverlay/dependency_vkbasalt''', s);
++           RunCommand('bash -c ''find-xdg-data-files vulkan/implicit_layer.d/vkBasalt.json >> /tmp/goverlay/dependency_vkbasalt''', s);
+ 
+            // Assign Text file dependency_mangohud to variable mangohudVAR
+            AssignFile(vkbasaltVAR, '/tmp/goverlay/dependency_vkbasalt');
+@@ -5034,7 +5034,7 @@ begin
+            CloseFile(vkbasaltVAR);
+ 
+            // Read String and store value on vkbasaltdependencyVALUE based on result
+-           if vkbasaltSTR = '/usr/share/vulkan/implicit_layer.d/vkBasalt.json' then
++           if vkbasaltSTR <> '' then
+            vkbasaltdependencyVALUE := 1
+            else
+            vkbasaltdependencyVALUE := 0;
diff --git a/nixpkgs/pkgs/tools/graphics/graph-cli/default.nix b/nixpkgs/pkgs/tools/graphics/graph-cli/default.nix
new file mode 100644
index 000000000000..ebddd548bed0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/graph-cli/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, python3Packages
+, fetchPypi
+, qt5
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "graph-cli";
+  version = "0.1.19";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "graph_cli";
+    hash = "sha256-AOfUgeVgcTtuf5IuLYy1zFTBCjWZxu0OiZzUVXDIaSc=";
+  };
+
+  nativeBuildInputs = [ qt5.wrapQtAppsHook ];
+
+  dontWrapQtApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    numpy
+    pandas
+    (matplotlib.override { enableQt = true; })
+  ];
+
+  # does not contain tests despite reference in Makefile
+  doCheck = false;
+  pythonImportsCheck = [ "graph_cli" ];
+
+  meta = with lib; {
+    description = "CLI to create graphs from CSV files";
+    homepage = "https://github.com/mcastorina/graph-cli/";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ leungbk ];
+    mainProgram = "graph";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/graph-easy/default.nix b/nixpkgs/pkgs/tools/graphics/graph-easy/default.nix
new file mode 100644
index 000000000000..668c7527e9e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/graph-easy/default.nix
@@ -0,0 +1,18 @@
+{ lib, perlPackages, fetchurl }:
+
+perlPackages.buildPerlPackage {
+  pname = "graph-easy";
+  version = "0.76";
+  src = fetchurl {
+    url = "mirror://cpan/authors/id/S/SH/SHLOMIF/Graph-Easy-0.76.tar.gz";
+    sha256 = "d4a2c10aebef663b598ea37f3aa3e3b752acf1fbbb961232c3dbe1155008d1fa";
+  };
+
+  meta = with lib; {
+    description = "Render/convert graphs in/from various formats";
+    license = licenses.gpl1Only;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.jensbin ];
+    mainProgram = "graph-easy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/graphviz/default.nix b/nixpkgs/pkgs/tools/graphics/graphviz/default.nix
new file mode 100644
index 000000000000..20b296de802c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/graphviz/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, autoreconfHook
+, pkg-config
+, cairo
+, expat
+, flex
+, fontconfig
+, gd
+, gts
+, libjpeg
+, libpng
+, libtool
+, pango
+, bash
+, bison
+, xorg
+, ApplicationServices
+, python3
+, fltk
+, exiv2
+, withXorg ? true
+}:
+
+let
+  inherit (lib) optional optionals optionalString;
+in
+stdenv.mkDerivation rec {
+  pname = "graphviz";
+  version = "9.0.0";
+
+  src = fetchFromGitLab {
+    owner = "graphviz";
+    repo = "graphviz";
+    rev = version;
+    hash = "sha256-lLESaULvHkWJjbKjjG9VIcVInqsDmY1OAAKfjCFDThQ=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    python3
+    bison
+    flex
+  ];
+
+  buildInputs = [
+    libpng
+    libjpeg
+    expat
+    fontconfig
+    gd
+    gts
+    pango
+    bash
+  ] ++ optionals withXorg (with xorg; [ libXrender libXaw libXpm ])
+  ++ optionals stdenv.isDarwin [ ApplicationServices ];
+
+  hardeningDisable = [ "fortify" ];
+
+  configureFlags = [
+    "--with-ltdl-lib=${libtool.lib}/lib"
+    "--with-ltdl-include=${libtool}/include"
+  ] ++ optional (xorg == null) "--without-x";
+
+  enableParallelBuilding = true;
+
+  CPPFLAGS = optionalString (withXorg && stdenv.isDarwin)
+    "-I${cairo.dev}/include/cairo";
+
+  doCheck = false; # fails with "Graphviz test suite requires ksh93" which is not in nixpkgs
+
+  preAutoreconf = "./autogen.sh";
+
+  postFixup = optionalString withXorg ''
+    substituteInPlace $out/bin/vimdot \
+      --replace '"/usr/bin/vi"' '"$(command -v vi)"' \
+      --replace '"/usr/bin/vim"' '"$(command -v vim)"' \
+      --replace /usr/bin/vimdot $out/bin/vimdot \
+  '';
+
+  passthru.tests = {
+    inherit (python3.pkgs) pygraphviz;
+    inherit fltk exiv2;
+  };
+
+  meta = with lib; {
+    homepage = "https://graphviz.org";
+    description = "Graph visualization tools";
+    license = licenses.epl10;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bjornfor raskin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/grim/default.nix b/nixpkgs/pkgs/tools/graphics/grim/default.nix
new file mode 100644
index 000000000000..f0253c8b6613
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/grim/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, pixman
+, libpng
+, libjpeg
+, meson
+, ninja
+, pkg-config
+, scdoc
+, wayland
+, wayland-protocols
+, wayland-scanner
+}:
+
+stdenv.mkDerivation rec {
+  pname = "grim";
+  version = "1.4.1";
+
+  src = fetchFromSourcehut {
+    owner = "~emersion";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-5csJqRLNqhyeXR4dEQtnPUSwuZ8oY+BIt6AVICkm1+o=";
+  };
+
+  mesonFlags = [
+    "-Dwerror=false"
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    scdoc
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    pixman
+    libpng
+    libjpeg
+    wayland
+    wayland-protocols
+  ];
+
+  meta = with lib; {
+    description = "Grab images from a Wayland compositor";
+    homepage = "https://github.com/emersion/grim";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ buffet eclairevoyant ];
+    mainProgram = "grim";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gromit-mpx/default.nix b/nixpkgs/pkgs/tools/graphics/gromit-mpx/default.nix
new file mode 100644
index 000000000000..0a54626419b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gromit-mpx/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config
+, gtk, glib, pcre, libappindicator, libpthreadstubs, xorg
+, libxkbcommon, libepoxy, at-spi2-core, dbus, libdbusmenu
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gromit-mpx";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "bk138";
+    repo = "gromit-mpx";
+    rev = version;
+    sha256 = "sha256-6sjps0wbB0sTaQtehRmz2KBWxqk3pqJmQs9htqxmJwo=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config wrapGAppsHook ];
+  buildInputs = [
+    gtk glib pcre libappindicator libpthreadstubs
+    xorg.libXdmcp libxkbcommon libepoxy at-spi2-core
+    dbus libdbusmenu
+  ];
+
+  meta = with lib; {
+    description = "Desktop annotation tool";
+
+    longDescription = ''
+      Gromit-MPX (GRaphics Over MIscellaneous Things) is a small tool
+      to make annotations on the screen.
+    '';
+
+    homepage = "https://github.com/bk138/gromit-mpx";
+    maintainers = with maintainers; [ pjones ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    mainProgram = "gromit-mpx";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/guff/default.nix b/nixpkgs/pkgs/tools/graphics/guff/default.nix
new file mode 100644
index 000000000000..2ca68376baa2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/guff/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "guff";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "silentbicycle";
+    repo = "guff";
+    rev = "v${version}";
+    sha256 = "0n8mc9j3044j4b3vgc94ryd2j9ik6g73fqja54yxfdfrks4ksyds";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  doCheck = true;
+
+  meta = with lib;  {
+    description = "A plot device";
+    homepage = "https://github.com/silentbicycle/guff";
+    license = licenses.isc;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.all;
+    mainProgram = "guff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/hobbits/default.nix b/nixpkgs/pkgs/tools/graphics/hobbits/default.nix
new file mode 100644
index 000000000000..78cb959a8fc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/hobbits/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub
+, cmake, pkg-config, pffft, libpcap, libusb1, python3, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hobbits";
+  version = "0.54.0";
+
+  src = fetchFromGitHub {
+    owner = "Mahlet-Inc";
+    repo = "hobbits";
+    rev = "v${version}";
+    hash = "sha256-zbpYVoWOffMxx2RS5gXw+rpwdxoRutH/yzZqJIc57UU=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/hobbits-core/settingsdata.cpp \
+      --replace "pythonHome = \"/usr\"" "pythonHome = \"${python3}\""
+    substituteInPlace cmake/gitversion.cmake \
+      --replace "[Mystery Build]" "${version}"
+  '';
+
+  buildInputs = [ pffft libpcap libusb1 python3 ];
+
+  nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
+
+  cmakeFlags = [ "-DUSE_SYSTEM_PFFFT=ON" ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isAarch64 "-Wno-error=narrowing";
+
+  meta = with lib; {
+    description = "A multi-platform GUI for bit-based analysis, processing, and visualization";
+    homepage = "https://github.com/Mahlet-Inc/hobbits";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ibniz/default.nix b/nixpkgs/pkgs/tools/graphics/ibniz/default.nix
new file mode 100644
index 000000000000..04aadf911e1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ibniz/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, SDL }:
+
+stdenv.mkDerivation rec {
+  pname = "ibniz";
+  version = "1.18";
+
+  src = fetchurl {
+    url = "http://www.pelulamu.net/ibniz/${pname}-${version}.tar.gz";
+    sha256 = "10b4dka8zx7y84m1a58z9j2vly8mz9aw9wn8z9vx9av739j95wp2";
+  };
+
+  buildInputs = [ SDL ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ibniz $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Virtual machine designed for extremely compact low-level audiovisual programs";
+    homepage = "https://github.com/viznut/IBNIZ";
+    license = licenses.zlib;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.dezgeg ];
+    mainProgram = "ibniz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/icoutils/default.nix b/nixpkgs/pkgs/tools/graphics/icoutils/default.nix
new file mode 100644
index 000000000000..b450537b5a42
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/icoutils/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, libpng, perl, perlPackages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "icoutils";
+  version = "0.32.3";
+
+  src = fetchurl {
+    url = "mirror://savannah/icoutils/icoutils-${version}.tar.bz2";
+    sha256 = "1q66cksms4l62y0wizb8vfavhmf7kyfgcfkynil3n99s0hny1aqp";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libpng perl ];
+  propagatedBuildInputs = [ perlPackages.LWP ];
+
+  # Fixes a build failure on aarch64-darwin. Define for all Darwin targets for when x86_64-darwin
+  # upgrades to a newer SDK.
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-DTARGET_OS_IPHONE=0";
+
+  patchPhase = ''
+    patchShebangs extresso/extresso
+    patchShebangs extresso/extresso.in
+    patchShebangs extresso/genresscript
+    patchShebangs extresso/genresscript.in
+  '';
+
+  preFixup = ''
+    wrapProgram $out/bin/extresso --prefix PERL5LIB : $PERL5LIB
+    wrapProgram $out/bin/genresscript --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = {
+    homepage = "https://www.nongnu.org/icoutils/";
+    description = "Set of programs to deal with Microsoft Windows(R) icon and cursor files";
+    license = lib.licenses.gpl3Plus;
+    platforms = with lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ifm/default.nix b/nixpkgs/pkgs/tools/graphics/ifm/default.nix
new file mode 100644
index 000000000000..854a35262b07
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ifm/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchzip, autoreconfHook, bison, flex, help2man, perl, tk }:
+
+stdenv.mkDerivation rec {
+  pname = "ifm";
+  version = "2015-11-08";
+
+  src = fetchzip {
+    url = "https://bitbucket.org/zondo/ifm/get/dca0774e4d3a.zip";
+    sha256 = "14af21qjd5jvsscm6vxpsdrnipdr33g6niagzmykrhyfhwcbjahi";
+  };
+
+  nativeBuildInputs = [ autoreconfHook bison flex help2man ];
+
+  buildInputs = [ perl tk ]; # perl and wish are not run but written as shebangs.
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: libvars.a(vars-freeze-lex.o):src/libvars/vars-freeze-lex.l:23:
+  #     multiple definition of `line_number'; ifm-main.o:src/ifm-main.c:46: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  enableParallelBuilding = false; # ifm-scan.l:16:10: fatal error: ifm-parse.h: No such file or directory
+
+  meta = with lib; {
+    homepage = "https://bitbucket.org/zondo/ifm";
+    description = "Interactive fiction mapper";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/imageworsener/default.nix b/nixpkgs/pkgs/tools/graphics/imageworsener/default.nix
new file mode 100644
index 000000000000..1da3b9f89050
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/imageworsener/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv
+, fetchurl
+, zlib
+, libpng
+, libjpeg
+, libwebp
+}:
+
+stdenv.mkDerivation rec {
+  pname = "imageworsener";
+  version = "1.3.5";
+
+  src = fetchurl {
+    url = "https://entropymine.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-p/u2XFreZ9nrwy5SxYmIpPmGuswAjJAh/ja1mEZtXI0=";
+  };
+
+  postPatch = ''
+    patchShebangs tests/runtest
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/doc/imageworsener
+    cp readme.txt technical.txt $out/share/doc/imageworsener
+  '';
+
+  buildInputs = [ zlib libpng libjpeg libwebp ];
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A raster image scaling and processing utility";
+    homepage = "https://entropymine.com/imageworsener/";
+    changelog = "https://github.com/jsummers/${pname}/blob/${version}/changelog.txt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emily smitop ];
+    mainProgram = "imagew";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/imgur-screenshot/default.nix b/nixpkgs/pkgs/tools/graphics/imgur-screenshot/default.nix
new file mode 100644
index 000000000000..fe23866bda0b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/imgur-screenshot/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, curl, jq, gnugrep, libnotify, scrot, which, xclip }:
+
+let deps = lib.makeBinPath [ curl jq gnugrep libnotify scrot which xclip ];
+in stdenv.mkDerivation rec {
+  version = "2.0.0";
+  pname = "imgur-screenshot";
+
+  src = fetchFromGitHub {
+    owner = "jomo";
+    repo = "imgur-screenshot";
+    rev = "v${version}";
+    sha256 = "0fkhvfraijbrw806pgij41bn1hc3r7l7l3snkicmshxj83lmsd5k";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 imgur-screenshot $out/bin/imgur-screenshot
+    wrapProgram $out/bin/imgur-screenshot --prefix PATH ':' ${deps}
+  '';
+
+  meta = with lib; {
+    description = "A tool for easy screencapping and uploading to imgur";
+    homepage = "https://github.com/jomo/imgur-screenshot/";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ lw ];
+    mainProgram = "imgur-screenshot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/imgurbash2/default.nix b/nixpkgs/pkgs/tools/graphics/imgurbash2/default.nix
new file mode 100644
index 000000000000..e577c8be5a3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/imgurbash2/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, bash, curl, xsel }:
+
+stdenv.mkDerivation rec {
+  pname = "imgurbash2";
+  version = "3.3";
+
+  src = fetchFromGitHub {
+    owner = "ram-on";
+    repo = "imgurbash2";
+    rev = version;
+    sha256 = "sha256-7J3LquzcYX0wBR6kshz7VuPv/TftTzKFdWcgsML2DnI=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cat <<EOF >$out/bin/imgurbash2
+    #!${bash}/bin/bash
+    PATH=${lib.makeBinPath [curl xsel]}:\$PATH
+    EOF
+    cat imgurbash2 >> $out/bin/imgurbash2
+    chmod +x $out/bin/imgurbash2
+  '';
+
+  meta = with lib; {
+    description = "A shell script that uploads images to imgur";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ abbradar ];
+    homepage = "https://github.com/ram-on/imgurbash2";
+    mainProgram = "imgurbash2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/jhead/default.nix b/nixpkgs/pkgs/tools/graphics/jhead/default.nix
new file mode 100644
index 000000000000..391780a4df35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/jhead/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, libjpeg }:
+
+stdenv.mkDerivation rec {
+  pname = "jhead";
+  version = "3.08";
+
+  src = fetchFromGitHub {
+    owner = "Matthias-Wandel";
+    repo = "jhead";
+    rev = version;
+    hash = "sha256-d1cuy4kkwY/21UcpNN6judrFxGVyEH+b+0TaZw9hP2E=";
+  };
+
+  buildInputs = [ libjpeg ];
+
+  makeFlags = [ "CPPFLAGS=" "CFLAGS=-O3" "LDFLAGS=" ];
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+
+    (
+      cd tests
+      patchShebangs runtests pretend-editor
+      ./runtests
+    )
+
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    mkdir -p \
+      $out/bin \
+      $out/man/man1 \
+      $out/share/doc/${pname}-${version}
+
+    cp -v jhead $out/bin
+    cp -v jhead.1 $out/man/man1
+    cp -v *.txt $out/share/doc/${pname}-${version}
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.sentex.net/~mwandel/jhead/";
+    description = "Exif Jpeg header manipulation tool";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ rycee ];
+    platforms = platforms.all;
+    mainProgram = "jhead";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/jpegexiforient/default.nix b/nixpkgs/pkgs/tools/graphics/jpegexiforient/default.nix
new file mode 100644
index 000000000000..bdf2ce12e837
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/jpegexiforient/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl }:
+stdenv.mkDerivation {
+  pname = "jpegexiforient";
+  version = "unstable-2002-02-17";
+  src = fetchurl {
+    url = "http://sylvana.net/jpegcrop/jpegexiforient.c";
+    sha256 = "1v0f42cvs0397g9v46p294ldgxwbp285npg6npgnlnvapk6nzh5s";
+  };
+  unpackPhase = ''
+    cp $src jpegexiforient.c
+  '';
+  buildPhase = ''
+    $CC -o jpegexiforient jpegexiforient.c
+  '';
+  installPhase = ''
+    install -Dt $out/bin jpegexiforient
+  '';
+  meta = with lib; {
+    description = "Utility program to get and set the Exif Orientation Tag";
+    homepage = "http://sylvana.net/jpegcrop/exif_orientation.html";
+    # Website doesn't mention any license, but I think it's safe to assume this
+    # to be free since it's from IJG, the current maintainers of libjpeg
+    license = licenses.free;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ infinisil ];
+    mainProgram = "jpegexiforient";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/leela/default.nix b/nixpkgs/pkgs/tools/graphics/leela/default.nix
new file mode 100644
index 000000000000..7ddf02d16369
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/leela/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, poppler }:
+
+stdenv.mkDerivation {
+  pname = "leela";
+  version = "12.fe7a35a";
+
+  src = fetchFromGitHub {
+    owner = "TrilbyWhite";
+    repo = "Leela";
+    rev = "576a60185b191d3a3030fef10492fe32d2125563";
+    sha256 = "1k6n758r9dhjmc1pnpk6qzpg0q7pkq2hf18z3b0s2z198jpkg9s3";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ poppler ];
+
+  installFlags = [ "PREFIX=$(out)" "MANDIR=$(out)/share/man" ];
+
+  meta = {
+    description = "CLI frontend to the poppler-glib library of PDF tools";
+    homepage = "https://github.com/TrilbyWhite/Leela";
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.puffnfresh ];
+    platforms = lib.platforms.linux;
+    mainProgram = "leela";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/lepton/default.nix b/nixpkgs/pkgs/tools/graphics/lepton/default.nix
new file mode 100644
index 000000000000..f590e7178d67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/lepton/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, git, glibc }:
+
+stdenv.mkDerivation rec {
+  version = "2019-08-20";
+  pname = "lepton-unstable";
+
+  src = fetchFromGitHub {
+    repo = "lepton";
+    owner = "dropbox";
+    rev = "3d1bc19da9f13a6e817938afd0f61a81110be4da";
+    sha256 = "0aqs6nvcbq8cbfv8699fa634bsz7csmk0169n069yvv17d1c07fd";
+  };
+
+  nativeBuildInputs = [ cmake git ];
+  buildInputs = lib.optionals stdenv.isLinux [ glibc.static ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dropbox/lepton";
+    description = "A tool to losslessly compress JPEGs";
+    license = licenses.asl20;
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    maintainers = with maintainers; [ artemist ];
+    knownVulnerabilities = [ "CVE-2022-4104" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/libyafaray/default.nix b/nixpkgs/pkgs/tools/graphics/libyafaray/default.nix
new file mode 100644
index 000000000000..22bbfddbcf5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/libyafaray/default.nix
@@ -0,0 +1,66 @@
+{ cmake
+, fetchFromGitHub
+, freetype
+, ilmbase
+, lib
+, libjpeg
+, libtiff
+, libxml2
+, opencv
+, openexr
+, pkg-config
+, stdenv
+, swig
+, zlib
+, withPython ? true, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libyafaray";
+  version = "unstable-2022-09-17";
+
+  src = fetchFromGitHub {
+    owner  = "YafaRay";
+    repo   = "libYafaRay";
+    rev    = "6e8c45fb150185b3356220e5f99478f20408ee49";
+    sha256 = "sha256-UVBA1vXOuLg4RT+BdF4rhbZ6I9ySeZX0N81gh3MH84I=";
+  };
+
+  postPatch = ''
+    sed '1i#include <memory>' -i \
+      include/geometry/poly_double.h include/noise/noise_generator.h # gcc12
+  '';
+
+  preConfigure = ''
+    NIX_CFLAGS_COMPILE+=" -isystem ${ilmbase.dev}/include/OpenEXR"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    freetype
+    ilmbase
+    libjpeg
+    libtiff
+    libxml2
+    opencv
+    openexr
+    swig
+    zlib
+  ] ++ lib.optional withPython python3;
+
+  meta = with lib; {
+    description = "A free, open source raytracer";
+    downloadPage = "https://github.com/YafaRay/libYafaRay";
+    homepage = "http://www.yafaray.org";
+    maintainers = with maintainers; [ hodapp ];
+    license = licenses.lgpl21;
+    platforms = [ "aarch64-linux" "x86_64-linux" ];
+  };
+}
+
+# TODO: Add optional Ruby support
+# TODO: Add Qt support? (CMake looks for it, but what for?)
diff --git a/nixpkgs/pkgs/tools/graphics/logstalgia/default.nix b/nixpkgs/pkgs/tools/graphics/logstalgia/default.nix
new file mode 100644
index 000000000000..69084a8b5370
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/logstalgia/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, SDL2, ftgl, pkg-config, libpng, libjpeg, pcre, SDL2_image, glew
+, libGLU, libGL, boost, glm, freetype }:
+
+stdenv.mkDerivation rec {
+  pname = "logstalgia";
+  version = "1.1.2";
+
+  src = fetchurl {
+    url = "https://github.com/acaudwell/Logstalgia/releases/download/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "1agwjlwzp1c86hqb1p7rmzqzhd3wpnyh8whsfq4sbx01wj0l0gzd";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glew SDL2 ftgl libpng libjpeg pcre SDL2_image libGLU libGL boost
+                  glm freetype ];
+
+  meta = with lib; {
+    homepage = "https://logstalgia.io/";
+    description = "Website traffic visualization tool";
+    license = licenses.gpl3Plus;
+
+    longDescription = ''
+      Logstalgia is a website traffic visualization that replays or
+      streams web-server access logs as a pong-like battle between the
+      web server and an never ending torrent of requests.
+
+      Requests appear as colored balls (the same color as the host)
+      which travel across the screen to arrive at the requested
+      location. Successful requests are hit by the paddle while
+      unsuccessful ones (eg 404 - File Not Found) are missed and pass
+      through.
+
+      The paths of requests are summarized within the available space by
+      identifying common path prefixes. Related paths are grouped
+      together under headings. For instance, by default paths ending in
+      png, gif or jpg are grouped under the heading Images. Paths that
+      don’t match any of the specified groups are lumped together under
+      a Miscellaneous section.
+    '';
+
+    platforms = platforms.gnu ++ platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "logstalgia";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/lsix/default.nix b/nixpkgs/pkgs/tools/graphics/lsix/default.nix
new file mode 100644
index 000000000000..b054351bf9ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/lsix/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenvNoCC, fetchFromGitHub, makeWrapper, imagemagick }:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "lsix";
+  version = "1.8.2";
+
+  src = fetchFromGitHub {
+    owner = "hackerb9";
+    repo = "lsix";
+    rev = finalAttrs.version;
+    sha256 = "sha256-xlOlAfZonSo/RERt5WxPqMvppVrY5/Yhh7SgCCsYDQE=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 lsix -t $out/bin
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/lsix \
+      --prefix PATH : ${lib.makeBinPath [ (imagemagick.override { ghostscriptSupport = true;}) ]}
+  '';
+
+  meta = with lib; {
+    description = "Shows thumbnails in terminal using sixel graphics";
+    homepage = "https://github.com/hackerb9/lsix";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ justinlime kidonng ];
+    mainProgram = "lsix";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/maim/default.nix b/nixpkgs/pkgs/tools/graphics/maim/default.nix
new file mode 100644
index 000000000000..ce91e361a6eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/maim/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config
+, zlib, libpng, libjpeg, libwebp, libGLU, libGL, glm
+, libX11, libXext, libXfixes, libXrandr, libXcomposite, slop, icu
+}:
+
+stdenv.mkDerivation rec {
+  pname = "maim";
+  version = "5.7.4";
+
+  src = fetchFromGitHub {
+    owner = "naelstrof";
+    repo = "maim";
+    rev = "v${version}";
+    sha256 = "sha256-uFtiwaM3H09vfvz3wVvumbqkoZhLNJxONkMqqqrJBs4=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ zlib libpng libjpeg libwebp libGLU libGL glm
+      libX11 libXext libXfixes libXrandr libXcomposite slop icu ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    mainProgram = "maim";
+    inherit (src.meta) homepage;
+    description = "A command-line screenshot utility";
+    longDescription = ''
+      maim (make image) takes screenshots of your desktop. It has options to
+      take only a region, and relies on slop to query for regions. maim is
+      supposed to be an improved scrot.
+    '';
+    changelog = "https://github.com/naelstrof/maim/releases/tag/v${version}";
+    platforms = lib.platforms.all;
+    license = lib.licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/mangohud/default.nix b/nixpkgs/pkgs/tools/graphics/mangohud/default.nix
new file mode 100644
index 000000000000..fc0fc9930d78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/mangohud/default.nix
@@ -0,0 +1,259 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchFromGitHub
+, fetchurl
+, substituteAll
+, fetchpatch
+, coreutils
+, curl
+, glxinfo
+, gnugrep
+, gnused
+, xdg-utils
+, dbus
+, hwdata
+, mangohud32
+, addOpenGLRunpath
+, appstream
+, git
+, glslang
+, mako
+, meson
+, ninja
+, pkg-config
+, unzip
+, libXNVCtrl
+, wayland
+, libX11
+, nlohmann_json
+, spdlog
+, glew
+, glfw
+, xorg
+, gamescopeSupport ? true # build mangoapp and mangohudctl
+, lowerBitnessSupport ? stdenv.hostPlatform.isx86_64 # Support 32 bit on 64bit
+, nix-update-script
+}:
+
+let
+  # Derived from subprojects/cmocka.wrap
+  cmocka = {
+    src = fetchFromGitLab {
+      owner = "cmocka";
+      repo = "cmocka";
+      rev = "59dc0013f9f29fcf212fe4911c78e734263ce24c";
+      hash = "sha256-IbAZOC0Q60PrKlKVWsgg/PFDV0PLb/yy+Iz/4Iziny0=";
+    };
+  };
+
+  # Derived from subprojects/implot.wrap
+  implot = rec {
+    version = "0.16";
+    src = fetchFromGitHub {
+      owner = "epezent";
+      repo = "implot";
+      rev = "refs/tags/v${version}";
+      hash = "sha256-/wkVsgz3wiUVZBCgRl2iDD6GWb+AoHN+u0aeqHHgem0=";
+    };
+    patch = fetchurl {
+      url = "https://wrapdb.mesonbuild.com/v2/implot_${version}-1/get_patch";
+      hash = "sha256-HGsUYgZqVFL6UMHaHdR/7YQfKCMpcsgtd48pYpNlaMc=";
+    };
+  };
+
+  # Derived from subprojects/imgui.wrap
+  imgui = rec {
+    version = "1.89.9";
+    src = fetchFromGitHub {
+      owner = "ocornut";
+      repo = "imgui";
+      rev = "refs/tags/v${version}";
+      hash = "sha256-0k9jKrJUrG9piHNFQaBBY3zgNIKM23ZA879NY+MNYTU=";
+    };
+    patch = fetchurl {
+      url = "https://wrapdb.mesonbuild.com/v2/imgui_${version}-1/get_patch";
+      hash = "sha256-myEpDFl9dr+NTus/n/oCSxHZ6mxh6R1kjMyQtChD1YQ=";
+    };
+  };
+
+  # Derived from subprojects/vulkan-headers.wrap
+  vulkan-headers = rec {
+    version = "1.2.158";
+    src = fetchFromGitHub {
+      owner = "KhronosGroup";
+      repo = "Vulkan-Headers";
+      rev = "refs/tags/v${version}";
+      hash = "sha256-5uyk2nMwV1MjXoa3hK/WUeGLwpINJJEvY16kc5DEaks=";
+    };
+    patch = fetchurl {
+      url = "https://wrapdb.mesonbuild.com/v2/vulkan-headers_${version}-2/get_patch";
+      hash = "sha256-hgNYz15z9FjNHoj4w4EW0SOrQh1c4uQSnsOOrt2CDhc=";
+    };
+  };
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "mangohud";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "flightlessmango";
+    repo = "MangoHud";
+    rev = "refs/tags/v${finalAttrs.version}";
+    fetchSubmodules = true;
+    hash = "sha256-Gnq+1j+PFbeipAfXGnTq7wZdVQeG9R9vLAKZnZj7Bvs=";
+  };
+
+  outputs = [ "out" "doc" "man" ];
+
+  # Unpack subproject sources
+  postUnpack = ''(
+    cd "$sourceRoot/subprojects"
+    ${lib.optionalString finalAttrs.finalPackage.doCheck ''
+      cp -R --no-preserve=mode,ownership ${cmocka.src} cmocka
+    ''}
+    cp -R --no-preserve=mode,ownership ${implot.src} implot-${implot.version}
+    cp -R --no-preserve=mode,ownership ${imgui.src} imgui-${imgui.version}
+    cp -R --no-preserve=mode,ownership ${vulkan-headers.src} Vulkan-Headers-${vulkan-headers.version}
+  )'';
+
+  patches = [
+    # Add @libraryPath@ template variable to fix loading the preload
+    # library and @dataPath@ to support overlaying Vulkan apps without
+    # requiring MangoHud to be installed
+    ./preload-nix-workaround.patch
+
+    # Hard code dependencies. Can't use makeWrapper since the Vulkan
+    # layer can be used without the mangohud executable by setting MANGOHUD=1.
+    (substituteAll {
+      src = ./hardcode-dependencies.patch;
+
+      path = lib.makeBinPath [
+        coreutils
+        curl
+        glxinfo
+        gnugrep
+        gnused
+        xdg-utils
+      ];
+
+      libdbus = dbus.lib;
+      inherit hwdata;
+    })
+
+    # Add dep_vulkan to mangoapp and test_amdgpu to fix build failure
+    # TODO: Remove in next release
+    (fetchpatch {
+      url = "https://github.com/flightlessmango/MangoHud/commit/cba217ffaf93aea6acb4e59e3e46bf912f740ccf.patch";
+      hash = "sha256-1My4/EuSMpe3AFhhFOJr8rz/wnywp+BW+F4dSgxToe0=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace bin/mangohud.in \
+      --subst-var-by libraryPath ${lib.makeSearchPath "lib/mangohud" ([
+        (placeholder "out")
+      ] ++ lib.optionals lowerBitnessSupport [
+        mangohud32
+      ])} \
+      --subst-var-by version "${finalAttrs.version}" \
+      --subst-var-by dataDir ${placeholder "out"}/share
+
+    (
+      cd subprojects
+      unzip ${implot.patch}
+      unzip ${imgui.patch}
+      unzip ${vulkan-headers.patch}
+    )
+  '';
+
+  mesonFlags = [
+    "-Dwith_wayland=enabled"
+    "-Duse_system_spdlog=enabled"
+    "-Dtests=${if finalAttrs.finalPackage.doCheck then "enabled" else "disabled"}"
+  ] ++ lib.optionals gamescopeSupport [
+    "-Dmangoapp=true"
+    "-Dmangoapp_layer=true"
+    "-Dmangohudctl=true"
+  ];
+
+  nativeBuildInputs = [
+    addOpenGLRunpath
+    git
+    glslang
+    mako
+    meson
+    ninja
+    pkg-config
+    unzip
+
+    # Only the headers are used from these packages
+    # The corresponding libraries are loaded at runtime from the app's runpath
+    libXNVCtrl
+    wayland
+    libX11
+  ];
+
+  buildInputs = [
+    dbus
+    nlohmann_json
+    spdlog
+  ] ++ lib.optionals gamescopeSupport [
+    glew
+    glfw
+    xorg.libXrandr
+  ];
+
+  doCheck = true;
+
+  nativeCheckInputs = [
+    appstream
+  ];
+
+  # Support 32bit Vulkan applications by linking in 32bit Vulkan layers
+  # This is needed for the same reason the 32bit preload workaround is needed.
+  postInstall = lib.optionalString lowerBitnessSupport ''
+    ln -s ${mangohud32}/share/vulkan/implicit_layer.d/MangoHud.x86.json \
+      "$out/share/vulkan/implicit_layer.d"
+
+    ${lib.optionalString gamescopeSupport ''
+      ln -s ${mangohud32}/share/vulkan/implicit_layer.d/libMangoApp.x86.json \
+        "$out/share/vulkan/implicit_layer.d"
+    ''}
+  '';
+
+  postFixup =
+    let
+      archMap = {
+        "x86_64-linux" = "x86_64";
+        "i686-linux" = "x86";
+      };
+      layerPlatform = archMap."${stdenv.hostPlatform.system}" or null;
+      # We need to give the different layers separate names or else the loader
+      # might try the 32-bit one first, fail and not attempt to load the 64-bit
+      # layer under the same name.
+    in
+    lib.optionalString (layerPlatform != null) ''
+      substituteInPlace $out/share/vulkan/implicit_layer.d/MangoHud.${layerPlatform}.json \
+        --replace "VK_LAYER_MANGOHUD_overlay" "VK_LAYER_MANGOHUD_overlay_${toString stdenv.hostPlatform.parsed.cpu.bits}"
+    '' + ''
+      # Add OpenGL driver path to RUNPATH to support NVIDIA cards
+      addOpenGLRunpath "$out/lib/mangohud/libMangoHud.so"
+    '' + lib.optionalString gamescopeSupport ''
+      addOpenGLRunpath "$out/bin/mangoapp"
+    '' + lib.optionalString finalAttrs.finalPackage.doCheck ''
+      # libcmocka.so is only used for tests
+      rm "$out/lib/libcmocka.so"
+    '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A Vulkan and OpenGL overlay for monitoring FPS, temperatures, CPU/GPU load and more";
+    homepage = "https://github.com/flightlessmango/MangoHud";
+    changelog = "https://github.com/flightlessmango/MangoHud/releases/tag/v${finalAttrs.version}";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kira-bruneau zeratax ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch b/nixpkgs/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch
new file mode 100644
index 000000000000..1c0f3a497fe6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch
@@ -0,0 +1,47 @@
+diff --git a/src/dbus.cpp b/src/dbus.cpp
+index 7379af1..4eef3fe 100644
+--- a/src/dbus.cpp
++++ b/src/dbus.cpp
+@@ -152,7 +152,7 @@ bool dbus_manager::get_media_player_metadata(metadata& meta, std::string name) {
+ }
+ 
+ bool dbus_manager::init_internal() {
+-    if (!m_dbus_ldr.IsLoaded() && !m_dbus_ldr.Load("libdbus-1.so.3")) {
++    if (!m_dbus_ldr.IsLoaded() && !m_dbus_ldr.Load("@libdbus@/lib/libdbus-1.so.3")) {
+         SPDLOG_ERROR("Could not load libdbus-1.so.3");
+         return false;
+     }
+diff --git a/src/logging.cpp b/src/logging.cpp
+index ca33ee3..90d3638 100644
+--- a/src/logging.cpp
++++ b/src/logging.cpp
+@@ -26,7 +26,11 @@ string exec(string command) {
+ #endif
+     std::array<char, 128> buffer;
+     std::string result;
++
++    char* originalPath = getenv("PATH");
++    setenv("PATH", "@path@", 1);
+     std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(command.c_str(), "r"), pclose);
++    setenv("PATH", originalPath, 1);
+     if (!pipe) {
+       return "popen failed!";
+     }
+diff --git a/src/pci_ids.cpp b/src/pci_ids.cpp
+index 002a843..5a6262b 100644
+--- a/src/pci_ids.cpp
++++ b/src/pci_ids.cpp
+@@ -24,11 +24,9 @@ static std::istream& get_uncommented_line(std::istream& is, std::string &line)
+ void parse_pciids()
+ {
+     std::ifstream file;
+-    file.open("/usr/share/hwdata/pci.ids");
++    file.open("@hwdata@/share/hwdata/pci.ids");
+     if (file.fail()){
+-        file.open("/usr/share/misc/pci.ids");
+-        if (file.fail())
+-            SPDLOG_ERROR("can't find file pci.ids");
++        SPDLOG_ERROR("can't find file pci.ids");
+     }
+ 
+     std::string line;
diff --git a/nixpkgs/pkgs/tools/graphics/mangohud/preload-nix-workaround.patch b/nixpkgs/pkgs/tools/graphics/mangohud/preload-nix-workaround.patch
new file mode 100644
index 000000000000..5aa538b4c4c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/mangohud/preload-nix-workaround.patch
@@ -0,0 +1,39 @@
+diff --git a/bin/mangohud.in b/bin/mangohud.in
+index 53c72ef..18240ea 100755
+--- a/bin/mangohud.in
++++ b/bin/mangohud.in
+@@ -13,13 +13,15 @@ fi
+ DISABLE_LD_PRELOAD="cs2.sh
+ some_other_exe"
+ 
+-MANGOHUD_LIB_NAME="@ld_libdir_mangohud@libMangoHud_opengl.so"
++LD_LIBRARY_PATH="@libraryPath@${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
++XDG_DATA_DIRS="@dataDir@${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}"
++MANGOHUD_LIB_NAME="libMangoHud_opengl.so"
+ 
+ if [ "$1" = "--dlsym" ]; then
+-    MANGOHUD_LIB_NAME="@ld_libdir_mangohud@libMangoHud_dlsym.so:${MANGOHUD_LIB_NAME}"
++    MANGOHUD_LIB_NAME="libMangoHud_dlsym.so:${MANGOHUD_LIB_NAME}"
+     shift  # shift will only be executed if $1 is "--dlsym"
+ elif [ "$MANGOHUD_DLSYM" = "1" ]; then
+-    MANGOHUD_LIB_NAME="@ld_libdir_mangohud@libMangoHud_dlsym.so:${MANGOHUD_LIB_NAME}"
++    MANGOHUD_LIB_NAME="libMangoHud_dlsym.so:${MANGOHUD_LIB_NAME}"
+ fi
+ 
+ if [ "$1" = "--version" ]; then
+@@ -41,7 +43,7 @@ for exe in $DISABLE_LD_PRELOAD; do
+ done
+ 
+ if [ "$disable_preload" = true ]; then
+-    exec env MANGOHUD=1 "$@"
++    exec env MANGOHUD=1 LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" XDG_DATA_DIRS="${XDG_DATA_DIRS}" "$@"
+ else
+     # Make sure we don't append mangohud lib multiple times
+     # otherwise, this could cause issues with the steam runtime
+@@ -54,5 +56,5 @@ else
+             LD_PRELOAD="${LD_PRELOAD:+$LD_PRELOAD:}${MANGOHUD_LIB_NAME}"
+     esac
+ 
+-    exec env MANGOHUD=1 LD_PRELOAD="${LD_PRELOAD}" "$@"
++    exec env MANGOHUD=1 LD_PRELOAD="${LD_PRELOAD}" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" XDG_DATA_DIRS="${XDG_DATA_DIRS}" "$@"
+ fi
diff --git a/nixpkgs/pkgs/tools/graphics/maskromtool/default.nix b/nixpkgs/pkgs/tools/graphics/maskromtool/default.nix
new file mode 100644
index 000000000000..b2506bfa9df8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/maskromtool/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, qtbase
+, qt6
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "maskromtool";
+  version = "2024-01-28";
+
+  src = fetchFromGitHub {
+    owner = "travisgoodspeed";
+    repo = "maskromtool";
+    rev = "v${version}";
+    hash = "sha256-jYnJgZ4bn5NDSzNyhb46xnmzbF9Y59shw8y/2zmxiVM=";
+  };
+
+  buildInputs = [
+    qtbase
+    qt6.qtcharts
+    qt6.qttools
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    wrapQtAppsHook
+  ];
+
+  meta = {
+    description = "A CAD tool for extracting bits from Mask ROM photographs";
+    homepage = "https://github.com/travisgoodspeed/maskromtool";
+    license = [
+      lib.licenses.beerware
+      lib.licenses.gpl1Plus
+    ];
+    maintainers = [
+      lib.maintainers.evanrichter
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/mesa-demos/default.nix b/nixpkgs/pkgs/tools/graphics/mesa-demos/default.nix
new file mode 100644
index 000000000000..0bc30c8773fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/mesa-demos/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchurl
+, freeglut
+, libGL
+, libGLU
+, libX11
+, libXext
+, mesa
+, meson
+, ninja
+, pkg-config
+, wayland
+, wayland-scanner
+, wayland-protocols
+, vulkan-loader
+, libxkbcommon
+, libdecor
+, glslang
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mesa-demos";
+  version = "9.0.0";
+
+  src = fetchurl {
+    url = "https://archive.mesa3d.org/demos/${pname}-${version}.tar.xz";
+    sha256 = "sha256-MEaj0mp7BRr3690lel8jv+sWDK1u2VIynN/x6fHtSWs=";
+  };
+
+  strictDeps = true;
+
+  depsBuildBuild = [
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wayland-scanner
+    glslang
+  ];
+
+  buildInputs = [
+    freeglut
+    libX11
+    libXext
+    libGL
+    libGLU
+    mesa
+    wayland
+    wayland-protocols
+    vulkan-loader
+    libxkbcommon
+    libdecor
+  ] ++ lib.optional (mesa ? osmesa) mesa.osmesa;
+
+  mesonFlags = [
+    "-Degl=${if stdenv.isDarwin then "disabled" else "auto"}"
+    "-Dlibdrm=${if mesa.libdrm == null then "disabled" else "enabled"}"
+    "-Dosmesa=${if mesa ? osmesa then "enabled" else "disabled"}"
+    "-Dwayland=${if wayland.withLibraries then "enabled" else "disabled"}"
+    "-Dwith-system-data-files=true"
+  ];
+
+  meta = with lib; {
+    inherit (mesa.meta) homepage platforms;
+    description = "Collection of demos and test programs for OpenGL and Mesa";
+    license = licenses.mit;
+    maintainers = with maintainers; [ andersk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/metapixel/default.nix b/nixpkgs/pkgs/tools/graphics/metapixel/default.nix
new file mode 100644
index 000000000000..8c9fef0cd484
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/metapixel/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, libpng, libjpeg, giflib, perl, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "metapixel";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "schani";
+    repo = pname;
+    rev = "98ee9daa093b6c334941242e63f90b1c2876eb4f";
+    fetchSubmodules = true;
+    sha256 = "0r7n3a6bvcxkbpda4mwmrpicii09iql5z69nkjqygkwxw7ny3309";
+  };
+
+  makeFlags = [ "metapixel" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libpng libjpeg giflib perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp metapixel $out/bin/metapixel
+    cp metapixel-prepare $out/bin/metapixel-prepare
+    cp metapixel-sizesort $out/bin/metapixel-sizesort
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/schani/metapixel";
+    description = "Tool for generating photomosaics";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ dandellion ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/mscgen/default.nix b/nixpkgs/pkgs/tools/graphics/mscgen/default.nix
new file mode 100644
index 000000000000..a391a62ccb68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/mscgen/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv
+, bison
+, fetchurl
+, flex
+, gd
+, libjpeg
+, libpng
+, libwebp
+, pkg-config
+, runtimeShell
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mscgen";
+  version = "0.20";
+
+  src = fetchurl {
+    url = "http://www.mcternan.me.uk/mscgen/software/mscgen-src-${version}.tar.gz";
+    sha256 = "3c3481ae0599e1c2d30b7ed54ab45249127533ab2f20e768a0ae58d8551ddc23";
+  };
+
+  nativeBuildInputs = [ bison flex pkg-config ];
+  buildInputs = [ gd libjpeg libpng libwebp zlib ];
+
+  doCheck = true;
+  preCheck = ''
+    sed -i -e "s|#!/bin/bash|#!${runtimeShell}|" test/renderercheck.sh
+  '';
+
+  outputs = [ "out" "man" ];
+
+  meta = {
+    homepage = "http://www.mcternan.me.uk/mscgen/";
+    description = "Convert Message Sequence Chart descriptions into PNG, SVG, or EPS images";
+    license = lib.licenses.gpl2;
+
+    longDescription = ''
+      Mscgen is a small program that parses Message Sequence Chart
+      descriptions and produces PNG, SVG, EPS or server side image maps
+      (ismaps) as the output. Message Sequence Charts (MSCs) are a way
+      of representing entities and interactions over some time period
+      and are often used in combination with SDL. MSCs are popular in
+      Telecoms to specify how protocols operate although MSCs need not
+      be complicated to create or use. Mscgen aims to provide a simple
+      text language that is clear to create, edit and understand, which
+      can also be transformed into common image formats for display or
+      printing.
+    '';
+
+    platforms = lib.platforms.unix;
+    mainProgram = "mscgen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/netpbm/default.nix b/nixpkgs/pkgs/tools/graphics/netpbm/default.nix
new file mode 100644
index 000000000000..14002fe65096
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/netpbm/default.nix
@@ -0,0 +1,130 @@
+{ lib
+, stdenv
+, fetchsvn
+, pkg-config
+, libjpeg
+, libpng
+, jbigkit
+, flex
+, zlib
+, perl
+, libxml2
+, makeWrapper
+, libtiff
+, enableX11 ? false
+, libX11
+, buildPackages
+}:
+
+stdenv.mkDerivation {
+  # Determine version and revision from:
+  # https://sourceforge.net/p/netpbm/code/HEAD/log/?path=/advanced
+  pname = "netpbm";
+  version = "11.5.2";
+
+  outputs = [ "bin" "out" "dev" ];
+
+  src = fetchsvn {
+    url = "https://svn.code.sf.net/p/netpbm/code/advanced";
+    rev = "4839";
+    sha256 = "tK9HGERr8UejswZTW3NdXa7OGpzqDTCegGQVaB4RK+I=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    flex
+    makeWrapper
+  ];
+
+  buildInputs = [
+    zlib
+    perl
+    libpng
+    libjpeg
+    libxml2
+    libtiff
+    jbigkit
+  ] ++ lib.optional enableX11 libX11;
+
+
+  strictDeps = true;
+
+  enableParallelBuilding = true;
+
+  # Environment variables
+  STRIPPROG = "${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}strip";
+
+  postPatch = ''
+    # Install libnetpbm.so symlink to correct destination
+    substituteInPlace lib/Makefile \
+      --replace '/sharedlink' '/lib'
+  '';
+
+  configurePhase = ''
+    runHook preConfigure
+
+    cp config.mk.in config.mk
+
+    # Disable building static library
+    echo "STATICLIB_TOO = N" >> config.mk
+
+    # Enable cross-compilation
+    echo 'AR = ${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ar' >> config.mk
+    echo 'CC = ${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc' >> config.mk
+    echo 'CC_FOR_BUILD = ${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc' >> config.mk
+    echo 'LD_FOR_BUILD = $(CC_FOR_BUILD)' >> config.mk
+    echo 'PKG_CONFIG = ${buildPackages.pkg-config}/bin/${buildPackages.pkg-config.targetPrefix}pkg-config' >> config.mk
+    echo 'RANLIB = ${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ranlib' >> config.mk
+
+    # Use libraries from Nixpkgs
+    echo "TIFFLIB = libtiff.so" >> config.mk
+    echo "TIFFLIB_NEEDS_JPEG = N" >> config.mk
+    echo "TIFFLIB_NEEDS_Z = N" >> config.mk
+    echo "JPEGLIB = libjpeg.so" >> config.mk
+    echo "JBIGLIB = libjbig.a" >> config.mk
+    # Insecure
+    echo "JASPERLIB = NONE" >> config.mk
+
+    # Fix path to rgb.txt
+    echo "RGB_DB_PATH = $out/share/netpbm/misc/rgb.txt" >> config.mk
+  '' + lib.optionalString stdenv.isDarwin ''
+    echo "LDSHLIB=-dynamiclib -install_name $out/lib/libnetpbm.\$(MAJ).dylib" >> config.mk
+    echo "NETPBMLIBTYPE = dylib" >> config.mk
+    echo "NETPBMLIBSUFFIX = dylib" >> config.mk
+  '' + ''
+    runHook postConfigure
+  '';
+
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_CFLAGS_COMPILE = "-Wno-implicit-function-declaration";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    make package pkgdir=$out
+
+    rm -rf $out/*_template $out/{pkginfo,README,VERSION} $out/man/web
+
+    mkdir -p $out/share/netpbm
+    mv $out/misc $out/share/netpbm/
+
+    moveToOutput bin "''${!outputBin}"
+
+    # wrap any scripts that expect other programs in the package to be in their PATH
+    for prog in ppmquant; do
+        wrapProgram "''${!outputBin}/bin/$prog" --prefix PATH : "''${!outputBin}/bin"
+    done
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = {
+    homepage = "https://netpbm.sourceforge.net/";
+    description = "Toolkit for manipulation of graphic images";
+    license = lib.licenses.free; # http://netpbm.svn.code.sourceforge.net/p/netpbm/code/trunk/doc/copyright_summary
+    platforms = with lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/netpbm/update.sh b/nixpkgs/pkgs/tools/graphics/netpbm/update.sh
new file mode 100755
index 000000000000..670e872e951d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/netpbm/update.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -p bash -p subversion -p common-updater-scripts -i bash
+
+die() {
+    echo "error: $1" >&2
+    exit 1
+}
+
+attr=netpbm
+svnRoot=https://svn.code.sf.net/p/netpbm/code/advanced
+
+oldRev=$(nix-instantiate --eval -E "with import ./. {}; $attr.src.rev" | tr -d '"')
+if [[ -z "$oldRev" ]]; then
+    die "Could not extract old revision."
+fi
+
+latestRev=$(svn info --show-item "last-changed-revision" "$svnRoot")
+if [[ -z "$latestRev" ]]; then
+    die "Could not find out last changed revision."
+fi
+
+versionInfo=$(svn cat -r "$latestRev" "$svnRoot/version.mk")
+if [[ -z "$versionInfo" ]]; then
+    die "Could not get version info."
+fi
+
+nixFile=$(nix-instantiate --eval --strict -A "$attr.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/')
+if [[ ! -f "$nixFile" ]]; then
+    die "Could not evaluate '$attr.meta.position' to locate the .nix file!"
+fi
+
+# h remembers if we found the pattern; on the last line, if a pattern was previously found, we exit with 1
+# https://stackoverflow.com/a/12145797/160386
+sed -i "$nixFile" -re '/(\brev\b\s*=\s*)"'"$oldRev"'"/{ s||\1"'"$latestRev"'"|; h }; ${x; /./{x; q1}; x}' && die "Unable to update revision."
+
+majorRelease=$(grep --perl-regex --only-matching 'NETPBM_MAJOR_RELEASE = \K.+' <<< "$versionInfo")
+minorRelease=$(grep --perl-regex --only-matching 'NETPBM_MINOR_RELEASE = \K.+' <<< "$versionInfo")
+pointRelease=$(grep --perl-regex --only-matching 'NETPBM_POINT_RELEASE = \K.+' <<< "$versionInfo")
+
+update-source-version "$attr" "$majorRelease.$minorRelease.$pointRelease"
diff --git a/nixpkgs/pkgs/tools/graphics/nifskope/default.nix b/nixpkgs/pkgs/tools/graphics/nifskope/default.nix
new file mode 100644
index 000000000000..056b3ad8d065
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/nifskope/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchFromGitHub, qmake, qtbase, qttools, substituteAll, libGLU, wrapQtAppsHook, fetchpatch }:
+
+stdenv.mkDerivation {
+  pname = "nifskope";
+  version = "2.0.dev7";
+
+  src = fetchFromGitHub {
+    owner = "niftools";
+    repo = "nifskope";
+    rev = "47b788d26ae0fa12e60e8e7a4f0fa945a510c7b2"; # `v${version}` doesn't work with submodules
+    sha256 = "1wqpn53rkq28ws3apqghkzyrib4wis91x171ns64g8kp4q6mfczi";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    ./external-lib-paths.patch
+    (substituteAll {
+      src = ./qttools-bins.patch;
+      qttools = "${qttools.dev}/bin";
+    })
+    (fetchpatch {
+      name = "qt512-build-fix.patch";
+      url = "https://github.com/niftools/nifskope/commit/30954e7f01f3d779a2a1fd37d363e8a6ad560bd3.patch";
+      sha256 = "0d6xjj2mjjhdd7w1aig5f75jksjni16jyj0lxsz51pys6xqb6fpj";
+    })
+  ] ++ (lib.optional stdenv.isAarch64 ./no-sse-on-arm.patch);
+
+  buildInputs = [ qtbase qttools libGLU.dev ];
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+
+  preConfigure = ''
+    shopt -s globstar
+    for i in **/*.cpp; do
+      substituteInPlace $i --replace /usr/share/nifskope $out/share/nifskope
+    done
+  '';
+
+  # Inspired by install/linux-install/nifskope.spec.in.
+  installPhase = ''
+    runHook preInstall
+
+    d=$out/share/nifskope
+    mkdir -p $out/bin $out/share/applications $out/share/pixmaps $d/{shaders,lang}
+    cp release/NifSkope $out/bin/
+    cp ./res/nifskope.png $out/share/pixmaps/
+    cp release/{nif.xml,kfm.xml,style.qss} $d/
+    cp res/shaders/*.frag res/shaders/*.prog res/shaders/*.vert $d/shaders/
+    cp ./res/lang/*.ts ./res/lang/*.tm $d/lang/
+    cp ./install/linux-install/nifskope.desktop $out/share/applications
+
+    substituteInPlace $out/share/applications/nifskope.desktop \
+      --replace 'Exec=nifskope' "Exec=$out/bin/NifSkope" \
+      --replace 'Icon=nifskope' "Icon=$out/share/pixmaps/nifskope.png"
+
+    find $out/share -type f -exec chmod -x {} \;
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://niftools.sourceforge.net/wiki/NifSkope";
+    description = "A tool for analyzing and editing NetImmerse/Gamebryo '*.nif' files";
+    maintainers = with maintainers; [ eelco ];
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+    mainProgram = "NifSkope";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/nifskope/external-lib-paths.patch b/nixpkgs/pkgs/tools/graphics/nifskope/external-lib-paths.patch
new file mode 100644
index 000000000000..a7f329caf74f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/nifskope/external-lib-paths.patch
@@ -0,0 +1,33 @@
+diff --git a/NifSkope.pro b/NifSkope.pro
+index 1c0bc5a..cc29fc5 100644
+--- a/NifSkope.pro
++++ b/NifSkope.pro
+@@ -330,14 +330,14 @@ nvtristrip {
+ }
+ 
+ qhull {
+-    !*msvc*:QMAKE_CFLAGS += -isystem ../nifskope/lib/qhull/src
+-    !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/qhull/src
++    !*msvc*:QMAKE_CFLAGS += -isystem ./lib/qhull/src
++    !*msvc*:QMAKE_CXXFLAGS += -isystem ./lib/qhull/src
+     else:INCLUDEPATH += lib/qhull/src
+     HEADERS += $$files($$PWD/lib/qhull/src/libqhull/*.h, false)
+ }
+ 
+ gli {
+-    !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/gli/gli -isystem ../nifskope/lib/gli/external
++    !*msvc*:QMAKE_CXXFLAGS += -isystem ./lib/gli/gli -isystem ./lib/gli/external
+     else:INCLUDEPATH += lib/gli/gli lib/gli/external
+     HEADERS += $$files($$PWD/lib/gli/gli/*.hpp, true)
+     HEADERS += $$files($$PWD/lib/gli/gli/*.inl, true)
+@@ -346,8 +346,8 @@ gli {
+ }
+ 
+ zlib {
+-    !*msvc*:QMAKE_CFLAGS += -isystem ../nifskope/lib/zlib
+-    !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/zlib
++    !*msvc*:QMAKE_CFLAGS += -isystem ./lib/zlib
++    !*msvc*:QMAKE_CXXFLAGS += -isystem ./lib/zlib
+     else:INCLUDEPATH += lib/zlib
+     HEADERS += $$files($$PWD/lib/zlib/*.h, false)
+     SOURCES += $$files($$PWD/lib/zlib/*.c, false)
diff --git a/nixpkgs/pkgs/tools/graphics/nifskope/no-sse-on-arm.patch b/nixpkgs/pkgs/tools/graphics/nifskope/no-sse-on-arm.patch
new file mode 100644
index 000000000000..452fb1a76d5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/nifskope/no-sse-on-arm.patch
@@ -0,0 +1,19 @@
+diff --git a/NifSkope.pro b/NifSkope.pro
+index cc29fc5..b17bb6e 100644
+--- a/NifSkope.pro
++++ b/NifSkope.pro
+@@ -428,13 +428,10 @@ win32 {
+ 	#  Optimization flags
+ 	QMAKE_CXXFLAGS_DEBUG -= -O0 -g
+ 	QMAKE_CXXFLAGS_DEBUG *= -Og -g3
+-	QMAKE_CXXFLAGS_RELEASE *= -O3 -mfpmath=sse
++	QMAKE_CXXFLAGS_RELEASE *= -O3
+ 
+ 	# C++11 Support
+ 	QMAKE_CXXFLAGS_RELEASE *= -std=c++14
+-
+-	#  Extension flags
+-	QMAKE_CXXFLAGS_RELEASE *= -msse2 -msse
+ }
+ 
+ win32 {
diff --git a/nixpkgs/pkgs/tools/graphics/nifskope/qttools-bins.patch b/nixpkgs/pkgs/tools/graphics/nifskope/qttools-bins.patch
new file mode 100644
index 000000000000..5d85f9ef4fdd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/nifskope/qttools-bins.patch
@@ -0,0 +1,22 @@
+diff --git a/NifSkope_targets.pri b/NifSkope_targets.pri
+index 05324c2..d8389b1 100644
+--- a/NifSkope_targets.pri
++++ b/NifSkope_targets.pri
+@@ -11,7 +11,7 @@ else:EXE = ""
+ ## lupdate / lrelease
+ ###############################
+ 
+-QMAKE_LUPDATE = $$[QT_INSTALL_BINS]/lupdate$${EXE}
++QMAKE_LUPDATE = @qttools@/lupdate$${EXE}
+ exists($$QMAKE_LUPDATE) {
+ 	# Make target for Updating .ts
+ 	updatets.target = updatets
+@@ -23,7 +23,7 @@ exists($$QMAKE_LUPDATE) {
+ 	message("lupdate could not be found, ignoring make target")
+ }
+ 
+-QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease$${EXE}
++QMAKE_LRELEASE = @qttools@/lrelease$${EXE}
+ exists($$QMAKE_LRELEASE) {
+ 	# Build Step for Releasing .ts->.qm
+ 	updateqm.input = TRANSLATIONS
diff --git a/nixpkgs/pkgs/tools/graphics/nip2/default.nix b/nixpkgs/pkgs/tools/graphics/nip2/default.nix
new file mode 100644
index 000000000000..651baf547a9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/nip2/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, glib
+, libxml2
+, flex
+, bison
+, vips
+, gtk2
+, fftw
+, gsl
+, goffice
+, libgsf
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nip2";
+  version = "8.9.1";
+
+  src = fetchurl {
+    url = "https://github.com/libvips/nip2/releases/download/v${version}/nip2-${version}.tar.gz";
+    sha256 = "sha256-t14m6z+5lPqpiOjgdDbKwqSWXCyrCL7zlo6BeoZtds0=";
+  };
+
+  nativeBuildInputs = [
+    bison
+    flex
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [
+    glib
+    libxml2
+    vips
+    gtk2
+    fftw
+    gsl
+    goffice
+    libgsf
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/nip2 --set VIPSHOME "$out"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/libvips/nip2";
+    description = "Graphical user interface for VIPS image processing system";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ kovirobi ];
+    platforms = platforms.unix;
+    mainProgram = "nip2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/optar/default.nix b/nixpkgs/pkgs/tools/graphics/optar/default.nix
new file mode 100644
index 000000000000..320acaba420c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/optar/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, imagemagick, libpng }:
+
+stdenv.mkDerivation {
+  pname = "optar";
+  version = "20150210";
+
+  src = fetchurl {
+    url    = "http://ronja.twibright.com/optar.tgz";
+    sha256 = "10lr31k3xfcpa6vxkbl3abph7j3gks2210489khnnzmhmfdnm1a4";
+  };
+
+  buildInputs = [ libpng ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/local $out
+
+    substituteInPlace pgm2ps \
+      --replace 'convert ' "${lib.getBin imagemagick}/bin/convert "
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with lib; {
+    description = "OPTical ARchiver - it's a codec for encoding data on paper";
+    homepage = "http://ronja.twibright.com/optar/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = with platforms; linux; # possibly others, but only tested on Linux
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/optipng/default.nix b/nixpkgs/pkgs/tools/graphics/optipng/default.nix
new file mode 100644
index 000000000000..bbabcaf6b800
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/optipng/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, libpng
+, static ? stdenv.hostPlatform.isStatic
+}:
+
+# This package comes with its own copy of zlib, libpng and pngxtern
+
+stdenv.mkDerivation rec {
+  pname = "optipng";
+  version = "0.7.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/optipng/optipng-${version}.tar.gz";
+    hash = "sha256-JaO9aEgfIVAsyqD0wT+E3PayAzjkxOjFHyzvvYUTOYw=";
+  };
+
+  buildInputs = [ libpng ];
+
+  # Workaround for crash in cexcept.h. See
+  # https://github.com/NixOS/nixpkgs/issues/28106
+  preConfigure = ''
+    export LD=$CC
+  '';
+
+  # OptiPNG does not like --static, --build or --host
+  dontDisableStatic = true;
+  dontAddStaticConfigureFlags = true;
+  configurePlatforms = [ ];
+
+  configureFlags = [
+    "--with-system-zlib"
+    "--with-system-libpng"
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    #"-prefix=$out"
+  ];
+
+  postInstall = if stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.isWindows then ''
+    mv "$out"/bin/optipng{,.exe}
+  '' else null;
+
+  meta = with lib; {
+    homepage = "https://optipng.sourceforge.net/";
+    description = "A PNG optimizer";
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    mainProgram = "optipng";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/oxipng/default.nix b/nixpkgs/pkgs/tools/graphics/oxipng/default.nix
new file mode 100644
index 000000000000..23f9692597a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/oxipng/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchCrate, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  version = "9.0.0";
+  pname = "oxipng";
+
+  src = fetchCrate {
+    inherit version pname;
+    hash = "sha256-1OpSweosYiqtLqCcAw1EsAtBAYVc/VH8kRtVSpmTytM=";
+  };
+
+  cargoHash = "sha256-kPdAfqMNOoQPSdv+VLRDUr6AXGPy47UnldXwvpwKp6s=";
+
+  doCheck = !stdenv.isAarch64 && !stdenv.isDarwin;
+
+  meta = {
+    homepage = "https://github.com/shssoichiro/oxipng";
+    description = "A multithreaded lossless PNG compression optimizer";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dywedir ];
+    mainProgram = "oxipng";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pdf2svg/default.nix b/nixpkgs/pkgs/tools/graphics/pdf2svg/default.nix
new file mode 100644
index 000000000000..b68ba12ebfe9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pdf2svg/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, cairo, gtk2, poppler }:
+
+stdenv.mkDerivation rec {
+  pname = "pdf2svg";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "db9052";
+    repo = "pdf2svg";
+    rev = "v${version}";
+    sha256 = "14ffdm4y26imq99wjhkrhy9lp33165xci1l5ndwfia8hz53bl02k";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ cairo poppler gtk2 ];
+
+  meta = with lib; {
+    description = "PDF converter to SVG format";
+    homepage = "http://www.cityinthesky.co.uk/opensource/pdf2svg";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ianwookim ];
+    platforms = platforms.unix;
+    mainProgram = "pdf2svg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pdftag/default.nix b/nixpkgs/pkgs/tools/graphics/pdftag/default.nix
new file mode 100644
index 000000000000..90b8dde05f37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pdftag/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, meson, vala, ninja
+, gtk3, poppler, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "pdftag";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "arrufat";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1paj8hs27akzsivn01a30fl3zx5gfn1h89wxg2m72fd806hk0hql";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja wrapGAppsHook vala ];
+  buildInputs = [ gtk3 poppler ];
+
+  meta = with lib; {
+    description = "Edit metadata found in PDFs";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.unix;
+    mainProgram = "pdftag";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pdftoipe/default.nix b/nixpkgs/pkgs/tools/graphics/pdftoipe/default.nix
new file mode 100644
index 000000000000..e969d90f9e05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pdftoipe/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, poppler
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pdftoipe";
+  version = "7.2.24.1";
+
+  src = fetchFromGitHub {
+    owner = "otfried";
+    repo = "ipe-tools";
+    rev = "v${version}";
+    hash = "sha256-jlrjrjzZQo79CKMySayhCm1dqLh89wOQuXrXa2aqc0k=";
+  };
+
+  patches = [
+    # Fix build with poppler > 22.03.0
+    # https://github.com/otfried/ipe-tools/pull/48
+    (fetchpatch {
+      url = "https://github.com/otfried/ipe-tools/commit/14335180432152ad094300d0afd00d8e390469b2.patch";
+      hash = "sha256-V3FmwG3bR6io/smxjasFJ5K0/u8RSFfdUX41ClGXhFc=";
+      stripLen = 1;
+      name = "poppler_fix_build_48.patch";
+    })
+    # https://github.com/otfried/ipe-tools/pull/55
+    (fetchpatch {
+      url = "https://github.com/otfried/ipe-tools/commit/65586fcd9cc39e482ae5a9abdb6f4932d9bb88c4.patch";
+      hash = "sha256-qr1AQyWHz1e2a65m05xSHFnP6oSP6qSmMVekNk2flRc=";
+      stripLen = 1;
+      name = "poppler_fix_build_55.patch";
+    })
+  ];
+
+  sourceRoot = "${src.name}/pdftoipe";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ poppler ];
+
+  installPhase = ''
+    install -D pdftoipe $out/bin/pdftoipe
+  '';
+
+  meta = with lib; {
+    description = "A program that tries to convert arbitrary PDF documents to Ipe files";
+    homepage = "https://github.com/otfried/ipe-tools";
+    changelog = "https://github.com/otfried/ipe-tools/releases";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ yrd ];
+    mainProgram = "pdftoipe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/perceptualdiff/default.nix b/nixpkgs/pkgs/tools/graphics/perceptualdiff/default.nix
new file mode 100644
index 000000000000..aa88b33aa381
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/perceptualdiff/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, freeimage }:
+
+stdenv.mkDerivation rec {
+  pname = "perceptualdiff";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "myint";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "176n518xv0pczf1yyz9r5a8zw5r6sh5ym596kmvw30qznp8n4a8j";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ freeimage ];
+
+  meta = with lib; {
+    description = "A program that compares two images using a perceptually based image metric";
+    homepage = "https://github.com/myint/perceptualdiff";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ uri-canva ];
+    platforms = platforms.unix;
+    mainProgram = "perceptualdiff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pfstools/default.nix b/nixpkgs/pkgs/tools/graphics/pfstools/default.nix
new file mode 100644
index 000000000000..99debde345fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pfstools/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, mkDerivation, fetchurl, cmake, pkg-config, darwin
+, openexr, zlib, imagemagick6, libGLU, libGL, freeglut, fftwFloat
+, fftw, gsl, libexif, perl, qtbase, netpbm
+, enableUnfree ? false, opencv2
+}:
+
+mkDerivation rec {
+  pname = "pfstools";
+  version = "2.2.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${version}/${pname}-${version}.tgz";
+    sha256 = "sha256-m/aESYVmMibCGZjutDwmGsuOSziRuakbcpVUQGKJ18o=";
+  };
+
+  outputs = [ "out" "dev" "man"];
+
+  cmakeFlags = [ "-DWITH_MATLAB=false" ];
+
+  preConfigure = ''
+    sed -e 's|#include( ''${PROJECT_SRC_DIR}/cmake/FindNETPBM.cmake )|include( ''${PROJECT_SOURCE_DIR}/cmake/FindNETPBM.cmake )|' -i CMakeLists.txt
+
+    rm cmake/FindNETPBM.cmake
+    echo "SET(NETPBM_LIBRARY `find ${lib.getLib netpbm} -name "*${stdenv.hostPlatform.extensions.sharedLibrary}*" -type f`)" >> cmake/FindNETPBM.cmake
+    echo "SET(NETPBM_LIBRARIES `find ${lib.getLib netpbm} -name "*${stdenv.hostPlatform.extensions.sharedLibrary}*" -type f`)" >> cmake/FindNETPBM.cmake
+    echo "SET(NETPBM_INCLUDE_DIR ${lib.getDev netpbm}/include/netpbm)" >> cmake/FindNETPBM.cmake
+    echo "INCLUDE(FindPackageHandleStandardArgs)" >> cmake/FindNETPBM.cmake
+    echo "FIND_PACKAGE_HANDLE_STANDARD_ARGS(NETPBM DEFAULT_MSG NETPBM_LIBRARY NETPBM_INCLUDE_DIR)" >> cmake/FindNETPBM.cmake
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [
+    openexr zlib imagemagick6 fftwFloat
+    fftw gsl libexif perl qtbase netpbm
+  ] ++ (if stdenv.isDarwin then (with darwin.apple_sdk.frameworks; [
+    OpenGL GLUT
+  ]) else [
+    libGLU libGL freeglut
+  ]) ++ lib.optional enableUnfree (opencv2.override { enableUnfree = true; });
+
+  patches = [ ./glut.patch ./threads.patch ./pfstools.patch ./pfsalign.patch ];
+
+  meta = with lib; {
+    homepage = "https://pfstools.sourceforge.net/";
+    description = "Toolkit for manipulation of HDR images";
+    platforms = platforms.linux;
+    license = licenses.lgpl2;
+    maintainers = [ maintainers.juliendehos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pfstools/glut.patch b/nixpkgs/pkgs/tools/graphics/pfstools/glut.patch
new file mode 100644
index 000000000000..b540b5ebc6a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pfstools/glut.patch
@@ -0,0 +1,12 @@
+--- a/src/pfsglview/CMakeLists.txt	2022-04-04 23:21:11.164016369 +0300
++++ b/src/pfsglview/CMakeLists.txt	2022-04-04 23:21:32.757878750 +0300
+@@ -11,8 +11,7 @@
+ 

+ add_executable(pfsglview pfsglview.cpp picture_io.cpp module.cpp m_histogram.cpp m_status.cpp m_on_screen_display.cpp)

+ 

+-# TODO: Use ${GLUT_LIBRARY} instead.

+-target_link_libraries(pfsglview ${OPENGL_LIBRARIES} ${GLUT_glut_LIBRARY} pfs)

++target_link_libraries(pfsglview ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} pfs)

+ 

+ install (TARGETS pfsglview DESTINATION bin)

+ install (FILES pfsglview.1 DESTINATION ${MAN_DIR})

diff --git a/nixpkgs/pkgs/tools/graphics/pfstools/pfsalign.patch b/nixpkgs/pkgs/tools/graphics/pfstools/pfsalign.patch
new file mode 100644
index 000000000000..f079415ddcba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pfstools/pfsalign.patch
@@ -0,0 +1,12 @@
+--- a/src/camera/CMakeLists.txt 2017-11-13 18:38:27.000000000 +0100
++++ b/src/camera/CMakeLists.txt 2018-12-30 14:55:30.235571520 +0100
+@@ -9,7 +9,7 @@ target_link_libraries(${TRG} pfs)
+ install (TARGETS ${TRG} DESTINATION bin)
+ install (FILES ${TRG}.1 DESTINATION ${MAN_DIR})
+ 
+-if( OpenCV_FOUND AND EXIF_FOUND )
++if( OpenCV_FOUND AND MYPKG_FOUND )
+ 
+        set(TRG pfsalign)
+        add_executable(${TRG} ${TRG}.cpp  "${GETOPT_OBJECT}")
+
diff --git a/nixpkgs/pkgs/tools/graphics/pfstools/pfstools.patch b/nixpkgs/pkgs/tools/graphics/pfstools/pfstools.patch
new file mode 100644
index 000000000000..c678a25b01bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pfstools/pfstools.patch
@@ -0,0 +1,21 @@
+--- a/CMakeLists.txt	2016-05-26 11:31:16.000000000 +0200
++++ b/CMakeLists.txt	2016-07-22 19:07:22.074669909 +0200
+@@ -320,12 +320,12 @@
+ 
+ # ======== libexif ==========
+ 
+-find_package(EXIF)
+-if( NOT EXIF_FOUND )
+-    message( "EXIF library (libexif) not found. 'pfsalign' will not be compiled" )
+-else( NOT EXIF_FOUND )
+-    message(STATUS "libexif library found.")  
+-endif( NOT EXIF_FOUND )
++find_package( PkgConfig REQUIRED )
++pkg_check_modules( MYPKG REQUIRED libexif IlmBase )
++if( MYPKG_FOUND )
++    message( STATUS "libexif and IlmBase found." )
++endif( MYPKG_FOUND )
++include_directories( ${MYPKG_INCLUDE_DIRS} )
+ 
+ # ======== Config and sub dirs ===========
+ 
diff --git a/nixpkgs/pkgs/tools/graphics/pfstools/threads.patch b/nixpkgs/pkgs/tools/graphics/pfstools/threads.patch
new file mode 100644
index 000000000000..e3f61db60899
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pfstools/threads.patch
@@ -0,0 +1,20 @@
+--- a/src/fileformat/CMakeLists.txt	2016-05-26 11:31:23.000000000 +0200
++++ b/src/fileformat/CMakeLists.txt	2016-07-21 23:19:56.510958771 +0200
+@@ -53,13 +53,15 @@
+ if( OPENEXR_FOUND )
+     include_directories("${OPENEXR_INCLUDE_DIR}")
+ 
++    find_package (Threads)
++
+     add_executable(pfsinexr pfsinexr.cpp "${GETOPT_OBJECT}")
+-    target_link_libraries(pfsinexr pfs ${OPENEXR_LIBRARIES})
++    target_link_libraries(pfsinexr pfs ${OPENEXR_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+     install (TARGETS pfsinexr DESTINATION bin)
+     install (FILES pfsinexr.1 DESTINATION ${MAN_DIR})
+ 
+     add_executable(pfsoutexr pfsoutexr.cpp "${GETOPT_OBJECT}")
+-    target_link_libraries(pfsoutexr pfs ${OPENEXR_LIBRARIES})
++    target_link_libraries(pfsoutexr pfs ${OPENEXR_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+     install (TARGETS pfsoutexr DESTINATION bin)
+     install (FILES pfsoutexr.1 DESTINATION ${MAN_DIR})
+  endif( OPENEXR_FOUND )
diff --git a/nixpkgs/pkgs/tools/graphics/pgf/default.nix b/nixpkgs/pkgs/tools/graphics/pgf/default.nix
new file mode 100644
index 000000000000..e63875c19cd3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pgf/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchzip
+, autoreconfHook
+, dos2unix
+, doxygen
+, freeimage
+, libpgf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pgf";
+  version = "7.21.7";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/libpgf/libpgf/${version}/pgf-console.zip";
+    hash = "sha256-W9eXYhbynLtvZQsn724Uw0SZ5TuyK2MwREwYKGFhJj0=";
+  };
+
+  postPatch = ''
+    find . -type f | xargs dos2unix
+    mv README.txt README
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    dos2unix
+    doxygen
+  ];
+
+  buildInputs = [
+    freeimage
+    libpgf
+  ];
+
+  meta = {
+    homepage = "https://www.libpgf.org/";
+    description = "Progressive Graphics Format command line program";
+    license = lib.licenses.lgpl21Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/piglit/default.nix b/nixpkgs/pkgs/tools/graphics/piglit/default.nix
new file mode 100644
index 000000000000..aa076d1b84e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/piglit/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, fetchFromGitLab
+, lib
+, cmake
+, freeglut
+, libGL
+, libGLU
+, libglvnd
+, makeWrapper
+, ninja
+, pkg-config
+, python3
+, waffle
+, wayland
+, libX11
+, libXrender
+, libxcb
+, libxkbcommon
+}:
+
+stdenv.mkDerivation rec {
+  pname = "piglit";
+  version = "unstable-2020-10-23";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "mesa";
+    repo = "piglit";
+    rev = "59e695c16fdcdd4ea4f16365f0e397a93cef7b80";
+    sha256 = "kx0+2Sdvdc3SbpAIl2OuGCWCpaLJC/7cXG+ZLvf92g8=";
+  };
+
+  buildInputs = [
+    freeglut
+    libGL
+    libGLU
+    libglvnd
+    libX11
+    libXrender
+    libxcb
+    libxkbcommon
+    (python3.withPackages (ps: with ps; [
+      mako
+      numpy
+    ]))
+    waffle
+    wayland
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    ninja
+    pkg-config
+  ];
+
+  # Find data dir: piglit searches for the data directory in some places, however as it is wrapped,
+  # it search in ../lib/.piglit-wrapped, we just replace the script name with "piglit" again.
+  prePatch = ''
+    substituteInPlace piglit \
+      --replace 'script_basename_noext = os.path.splitext(os.path.basename(__file__))[0]' 'script_basename_noext = "piglit"'
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/piglit \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libGL libglvnd ]} \
+      --prefix PATH : "${waffle}/bin"
+  '';
+
+  meta = with lib; {
+    description = "An OpenGL test suite, and test-suite runner";
+    homepage = "https://gitlab.freedesktop.org/mesa/piglit";
+    license = licenses.free; # custom license. See COPYING in the source repo.
+    platforms = platforms.mesaPlatforms;
+    maintainers = with maintainers; [ Flakebi ];
+    mainProgram = "piglit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pikchr/default.nix b/nixpkgs/pkgs/tools/graphics/pikchr/default.nix
new file mode 100644
index 000000000000..3216790590e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pikchr/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchfossil
+, tcl
+
+, enableTcl ? true
+}:
+
+stdenv.mkDerivation {
+  pname = "pikchr";
+  # To update, use the last check-in in https://pikchr.org/home/timeline?r=trunk
+  version = "unstable-2023-08-30";
+
+  src = fetchfossil {
+    url = "https://pikchr.org/home";
+    rev = "d6f80b1ab30654d5";
+    sha256 = "sha256-GEH1qFiMYmNFJnZzLG5rxpl+F7OSRMoVcdo94+mvrlY=";
+  };
+
+  # can't open generated html files
+  postPatch = ''
+    substituteInPlace Makefile --replace open "test -f"
+  '';
+
+  nativeBuildInputs = lib.optional enableTcl tcl.tclPackageHook;
+
+  buildInputs = lib.optional enableTcl tcl;
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  buildFlags = [ "pikchr" ] ++ lib.optional enableTcl "piktcl";
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 pikchr $out/bin/pikchr
+    install -Dm755 pikchr.out $out/lib/pikchr.o
+    install -Dm644 pikchr.h $out/include/pikchr.h
+  '' + lib.optionalString enableTcl ''
+    cp -r piktcl $out/lib/piktcl
+  '' + ''
+    runHook postInstall
+  '';
+
+  dontWrapTclBinaries = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A PIC-like markup language for diagrams in technical documentation";
+    homepage = "https://pikchr.org";
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+    mainProgram = "pikchr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pixel2svg/default.nix b/nixpkgs/pkgs/tools/graphics/pixel2svg/default.nix
new file mode 100644
index 000000000000..1094cad56a33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pixel2svg/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildPythonPackage, fetchurl, python310Packages }:
+
+python310Packages.buildPythonPackage rec {
+  pname = "pixel2svg";
+  version = "0.3.0";
+
+  src = fetchurl {
+    url = "https://static.florian-berger.de/pixel2svg-${version}.zip";
+    sha256 = "sha256-aqcTTmZKcdRdVd8GGz5cuaQ4gjPapVJNtiiZu22TZgQ=";
+  };
+
+  propagatedBuildInputs = with python310Packages; [ pillow svgwrite ];
+
+  meta = with lib; {
+    homepage = "https://florian-berger.de/en/software/pixel2svg/";
+    description = "Converts pixel art to SVG - pixel by pixel";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ annaaurora ];
+    mainProgram = "pixel2svg.py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ploticus/default.nix b/nixpkgs/pkgs/tools/graphics/ploticus/default.nix
new file mode 100644
index 000000000000..ac5855304f4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ploticus/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, stdenv
+, fetchurl
+, zlib
+, libX11
+, libpng
+, libjpeg
+, gd
+, freetype
+, runCommand
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ploticus";
+  version = "2.42";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ploticus/ploticus/${finalAttrs.version}/ploticus${lib.replaceStrings [ "." ] [ "" ] finalAttrs.version}_src.tar.gz";
+    sha256 = "PynkufQFIDqT7+yQDlgW2eG0OBghiB4kHAjKt91m4LA=";
+  };
+
+  patches = [
+    # Replace hardcoded FHS path with $out.
+    ./ploticus-install.patch
+
+    # Set the location of the PREFABS directory.
+    ./set-prefabs-dir.patch
+
+    # Use gd from Nixpkgs instead of the vendored one.
+    # This is required for non-ASCII fonts to work:
+    # https://ploticus.sourceforge.net/doc/fonts.html
+    ./use-gd-package.patch
+  ];
+
+  buildInputs = [
+    zlib
+    libX11
+    libpng
+    gd
+    freetype
+    libjpeg
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  postPatch = ''
+    substituteInPlace src/pl.h --subst-var out
+  '';
+
+  preBuild = ''
+    cd src
+  '';
+  makeFlags = [ "CC=cc" ];
+
+  preInstall = ''
+    mkdir -p "$out/bin"
+  '';
+
+  postInstall = ''
+    cd ..
+
+    # Install the “prefabsâ€.
+    mkdir -p "$out/share/ploticus/prefabs"
+    cp -rv prefabs/* "$out/share/ploticus/prefabs"
+
+    # Add aliases for backwards compatibility.
+    ln -s "pl" "$out/bin/ploticus"
+  '';
+
+  passthru.tests = {
+    prefab = runCommand "ploticus-prefab-test" {
+      buildInputs = [ finalAttrs.finalPackage ];
+    } ''
+      # trivial test to see if the prefab path munging works
+      mkdir $out/
+      pl -prefab scat inlinedata="A 1 2" x=2 y=3 -png -o $out/out.png
+    '';
+  };
+
+  meta = with lib; {
+    description = "A non-interactive software package for producing plots and charts";
+    longDescription = ''
+      Ploticus is a free, GPL'd, non-interactive
+      software package for producing plots, charts, and graphics from
+      data.  Ploticus is good for automated or just-in-time graph
+      generation, handles date and time data nicely, and has basic
+      statistical capabilities.  It allows significant user control
+      over colors, styles, options and details.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pSub ];
+    homepage = "https://ploticus.sourceforge.net/";
+    platforms = with platforms; linux ++ darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/ploticus/ploticus-install.patch b/nixpkgs/pkgs/tools/graphics/ploticus/ploticus-install.patch
new file mode 100644
index 000000000000..04edbc709d0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ploticus/ploticus-install.patch
@@ -0,0 +1,12 @@
+--- pl240src/src/Makefile	2008-01-15 21:05:14.000000000 +0100
++++ pl240src/src/Makefile	2008-03-26 23:51:53.000000000 +0100
+@@ -131,7 +131,7 @@ ZFLAG = -DWZ
+ 
+ 
+ #### If you do a "make install", where do you want the executable(s) to be moved to?
+-INSTALLBIN = /usr/local/bin
++INSTALLBIN = $(out)/bin
+ 
+ 
+ #### For LOCALE support (non-roman alphabets & collation), uncomment the following..
+
diff --git a/nixpkgs/pkgs/tools/graphics/ploticus/set-prefabs-dir.patch b/nixpkgs/pkgs/tools/graphics/ploticus/set-prefabs-dir.patch
new file mode 100644
index 000000000000..82871654fdea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ploticus/set-prefabs-dir.patch
@@ -0,0 +1,11 @@
+--- a/src/pl.h
++++ b/src/pl.h
+@@ -8,7 +8,7 @@
+ #include <stdlib.h>
+ #include "plg.h"
+ 
+-#define PREFABS_DIR ""  	 /* INSTALLERS can set this to a valid pathname, so that users don't need to set PLOTICUS_PREFABS env var */
++#define PREFABS_DIR "@out@/share/ploticus/prefabs"  	 /* INSTALLERS can set this to a valid pathname, so that users don't need to set PLOTICUS_PREFABS env var */
+ 
+ #define PLVERSION "2.42-May2013" /* see also the Copyright page, and page headers and footers */
+ 
diff --git a/nixpkgs/pkgs/tools/graphics/ploticus/use-gd-package.patch b/nixpkgs/pkgs/tools/graphics/ploticus/use-gd-package.patch
new file mode 100644
index 000000000000..9a72489ddaad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ploticus/use-gd-package.patch
@@ -0,0 +1,34 @@
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -91,10 +91,10 @@
+ 
+ 
+ ########### Option 1: use bundled GD16 (PNG only).  Requires libpng and zlib.
+-exetarget: plpng 
+-GD16LIBS = -lpng -lz
+-GD16H =  -I/usr/local/include
+-ZFLAG = -DWZ
++# exetarget: plpng 
++# GD16LIBS = -lpng -lz
++# GD16H =  -I/usr/local/include
++# ZFLAG = -DWZ
+ ### These should remain commented unless your libs are not in usual places, then alter to suit...
+ ### GD16LIBS = /home/scg/lib/libpng.a /home/scg/lib/libz.a
+ ### GD16H = -I/home/scg/lib
+@@ -111,11 +111,11 @@
+ 
+ ########### Option 4: use your own GD resource with FreeType2 (ttf) fonts enabled.  
+ ###########           Requires GD 1.84+, libpng, zlib, libjpeg and libfreetype
+-# exetarget: plgd18 
+-# GD18LIBS = -lgd -lpng -lz -ljpeg -lfreetype
+-# GD18H = 
+-# GDFREETYPE = -DGDFREETYPE
+-# ZFLAG = -DWZ
++exetarget: plgd18 
++GD18LIBS = -lgd -lpng -lz -ljpeg -lfreetype
++GD18H = 
++GDFREETYPE = -DGDFREETYPE
++ZFLAG = -DWZ
+ 
+ ########### Option 5: don't use GD at all.
+ # exetarget: plnogd 
diff --git a/nixpkgs/pkgs/tools/graphics/plotutils/c++17-register-usage-fix.patch b/nixpkgs/pkgs/tools/graphics/plotutils/c++17-register-usage-fix.patch
new file mode 100644
index 000000000000..c83409221ac2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/plotutils/c++17-register-usage-fix.patch
@@ -0,0 +1,44 @@
+diff -ur a/pic2plot/gram.cc b/pic2plot/gram.cc
+--- a/pic2plot/gram.cc	2000-06-28 00:23:21.000000000 -0400
++++ b/pic2plot/gram.cc	2023-09-07 22:59:47.004460065 -0400
+@@ -1229,9 +1229,9 @@
+      char *from;
+      unsigned int count;
+ {
+-  register char *f = from;
+-  register char *t = to;
+-  register int i = count;
++  char *f = from;
++  char *t = to;
++  int i = count;
+
+   while (i-- > 0)
+     *t++ = *f++;
+@@ -1244,9 +1244,9 @@
+ static void
+ __yy_memcpy (char *to, char *from, unsigned int count)
+ {
+-  register char *t = to;
+-  register char *f = from;
+-  register int i = count;
++  char *t = to;
++  char *f = from;
++  int i = count;
+
+   while (i-- > 0)
+     *t++ = *f++;
+@@ -1289,10 +1289,10 @@
+ yyparse(YYPARSE_PARAM_ARG)
+      YYPARSE_PARAM_DECL
+ {
+-  register int yystate;
+-  register int yyn;
+-  register short *yyssp;
+-  register YYSTYPE *yyvsp;
++  int yystate;
++  int yyn;
++  short *yyssp;
++  YYSTYPE *yyvsp;
+   int yyerrstatus;	/*  number of tokens to shift before error messages enabled */
+   int yychar1 = 0;		/*  lookahead token as an internal (translated) token number */
+ 
diff --git a/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.nix b/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.nix
new file mode 100644
index 000000000000..d7c60a11eb67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.nix
@@ -0,0 +1,42 @@
+# Generated by debian-patches.sh from debian-patches.txt
+let
+  prefix = "https://sources.debian.org/data/main/p/plotutils/2.6-9/debian/patches";
+in
+[
+  {
+    url = "${prefix}/01_AC_PROG_CXX.diff";
+    sha256 = "0r7xgwbk2yqs7b29gwhr8pnbqvy3a3x698j17s4yg501ragw1gqv";
+  }
+  {
+    url = "${prefix}/10_repair_postscript";
+    sha256 = "01v4a8mdhgsjxbf9a2xppx2lb05lp818v8afp5x2njv64wpgla8p";
+  }
+  {
+    url = "${prefix}/11_manpages_sb_macro";
+    sha256 = "01vvhznw5z7lb7afwgw53cwg8w676s4v30kychlrl8kn5yks94qs";
+  }
+  {
+    url = "${prefix}/14_manpage_spline";
+    sha256 = "1xp3cx9y9njp5wp40dkp7rwd2flkiik2gb08nh4516vkm73avfrd";
+  }
+  {
+    url = "${prefix}/20_svg_attribute_syntax";
+    sha256 = "0vy089w00x2zh87igv3dcqq7kggqxpc4javb694pa5xl5bvddnqk";
+  }
+  {
+    url = "${prefix}/21_plot2svg_test.diff";
+    sha256 = "0lv8hj9fiqj6z72pnaw3imk3164n1kcy5ym0j9jl2pn3a19p1jmb";
+  }
+  {
+    url = "${prefix}/25_libpng15";
+    sha256 = "0l640rcsgc2mwpk7iqm0cf3b0gfcdgcn9wg4x88gaqxzx9rriph0";
+  }
+  {
+    url = "${prefix}/30_hershey_glyphs";
+    sha256 = "0n7rn6ln9ikzq2dialif58ag5pch7q7zqd5zcsxxdyyasx4s5gm2";
+  }
+  {
+    url = "${prefix}/35_spline.test.error.diff";
+    sha256 = "1kqj1n8myk8xmglj6qcybj34zm4kpn6aw320jbpqhblkgp7m0fb1";
+  }
+]
diff --git a/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.txt b/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.txt
new file mode 100644
index 000000000000..c28d96fdd5bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.txt
@@ -0,0 +1,10 @@
+plotutils/2.6-9
+01_AC_PROG_CXX.diff
+10_repair_postscript
+11_manpages_sb_macro
+14_manpage_spline
+20_svg_attribute_syntax
+21_plot2svg_test.diff
+25_libpng15
+30_hershey_glyphs
+35_spline.test.error.diff
diff --git a/nixpkgs/pkgs/tools/graphics/plotutils/default.nix b/nixpkgs/pkgs/tools/graphics/plotutils/default.nix
new file mode 100644
index 000000000000..29b4c4b35fe9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/plotutils/default.nix
@@ -0,0 +1,62 @@
+{ fetchurl, lib, stdenv, libpng, autoreconfHook }:
+
+# debian splits this package into plotutils and libplot2c2
+
+# gentoo passes X, this package contains fonts
+# I'm only interested in making pstoedit convert to svg
+
+stdenv.mkDerivation rec {
+  pname = "plotutils";
+  version = "2.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/plotutils/plotutils-${version}.tar.gz";
+    sha256 = "1arkyizn5wbgvbh53aziv3s6lmd3wm9lqzkhxb3hijlp1y124hjg";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libpng ];
+  patches = map fetchurl (import ./debian-patches.nix)
+    # `pic2plot/gram.cc` uses the register storage class specifier, which is not supported in C++17.
+    # This prevents clang 16 from building plotutils because it defaults to C++17.
+    ++ [ ./c++17-register-usage-fix.patch ];
+
+  preBuild = ''
+    # Fix parallel building.
+    make -C libplot xmi.h
+  '';
+
+  configureFlags = [ "--enable-libplotter" ]; # required for pstoedit
+
+  hardeningDisable = [ "format" ];
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Powerful C/C++ library for exporting 2D vector graphics";
+
+    longDescription =
+      '' The GNU plotutils package contains software for both programmers and
+         technical users.  Its centerpiece is libplot, a powerful C/C++
+         function library for exporting 2-D vector graphics in many file
+         formats, both vector and raster.  It can also do vector graphics
+         animations.
+
+         libplot is device-independent in the sense that its API (application
+         programming interface) does not depend on the type of graphics file
+         to be exported.
+
+         Besides libplot, the package contains command-line programs for
+         plotting scientific data.  Many of them use libplot to export
+         graphics.
+      '';
+
+    homepage = "https://www.gnu.org/software/plotutils/";
+
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.marcweber ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngcheck/default.nix b/nixpkgs/pkgs/tools/graphics/pngcheck/default.nix
new file mode 100644
index 000000000000..d6ed7a6960fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngcheck/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, zlib, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "pngcheck";
+  version = "3.0.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/png-mng/pngcheck-${version}.tar.gz";
+    sha256 = "sha256-DX4mLyQRb93yhHqM61yS2fXybvtC6f/2PsK7dnYTHKc=";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  postPatch = ''
+    substituteInPlace $makefile \
+      --replace "gcc" "$CC"
+  '';
+
+  makefile = "Makefile.unx";
+  makeFlags = [ "ZPATH=${zlib.static}/lib" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ zlib ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 -t $out/bin/ pngcheck
+    installManPage $pname.1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://pmt.sourceforge.net/pngcrush";
+    description = "Verifies the integrity of PNG, JNG and MNG files";
+    license = licenses.free;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ starcraft66 ];
+    mainProgram = "pngcheck";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngcrush/default.nix b/nixpkgs/pkgs/tools/graphics/pngcrush/default.nix
new file mode 100644
index 000000000000..8ce9965eae25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngcrush/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, libpng }:
+
+stdenv.mkDerivation rec {
+  pname = "pngcrush";
+  version = "1.8.13";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pmt/pngcrush-${version}-nolib.tar.xz";
+    sha256 = "0l43c59d6v9l0g07z3q3ywhb8xb3vz74llv3mna0izk9bj6aqkiv";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" "LD=${stdenv.cc.targetPrefix}cc" ];      # gcc and/or clang compat
+
+  configurePhase = ''
+    sed -i s,/usr,$out, Makefile
+  '';
+
+  buildInputs = [ libpng ];
+
+  meta = {
+    homepage = "http://pmt.sourceforge.net/pngcrush";
+    description = "A PNG optimizer";
+    license = lib.licenses.free;
+    platforms = with lib.platforms; linux ++ darwin;
+    mainProgram = "pngcrush";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngloss/default.nix b/nixpkgs/pkgs/tools/graphics/pngloss/default.nix
new file mode 100644
index 000000000000..7eca91f42d7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngloss/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, libpng, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "pngloss";
+  version = "unstable-2020-11-25";
+
+  src = fetchFromGitHub {
+    owner = "foobaz";
+    repo = pname;
+    rev = "559f09437e1c797a1eaf08dfdcddd9b082f0e09c";
+    sha256 = "sha256-dqrrzbLu4znyWOlTDIf56O3efxszetiP+CdFiy2PBd4=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    libpng
+    zlib
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D ./src/pngloss $out/bin/pngloss
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Lossy compression of PNG images";
+    homepage = "https://github.com/foobaz/pngloss";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ _2gn ];
+    mainProgram = "pngloss";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngnq/default.nix b/nixpkgs/pkgs/tools/graphics/pngnq/default.nix
new file mode 100644
index 000000000000..57b83cbf9e73
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngnq/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, pkg-config, libpng, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "pngnq";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pngnq/pngnq-${version}.tar.gz";
+    sha256 = "1qmnnl846agg55i7h4vmrn11lgb8kg6gvs8byqz34bdkjh5gwiy1";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libpng zlib ];
+
+  patchPhase = ''
+    sed -i '/png.h/a \#include <zlib.h>' src/rwpng.c
+  '';
+
+  meta = with lib; {
+    homepage = "https://pngnq.sourceforge.net/";
+    description = "A PNG quantizer";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngoptimizer/default.nix b/nixpkgs/pkgs/tools/graphics/pngoptimizer/default.nix
new file mode 100644
index 000000000000..c75ba0fb1015
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngoptimizer/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, gtk3, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "pngoptimizer";
+  version = "2.7";
+
+  src = fetchFromGitHub {
+    owner = "hadrien-psydk";
+    repo = "pngoptimizer";
+    rev = "v${version}";
+    sha256 = "1hbgf91vzx46grslfdx86smdvm6gs6lq9hpa3bax9xfbsknxi0i7";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gtk3 ];
+
+  makeFlags = [ "CONFIG=release" "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    mv $out/usr/bin $out/bin
+    mv $out/usr/share $out/share
+    rmdir $out/usr
+  '';
+
+  meta = with lib; {
+    homepage = "https://psydk.org/pngoptimizer";
+    description = "PNG optimizer and converter";
+    # https://github.com/hadrien-psydk/pngoptimizer#license-information
+    license = with licenses; [ gpl2Only lgpl21Only zlib ];
+    maintainers = with maintainers; [ smitop ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngout/default.nix b/nixpkgs/pkgs/tools/graphics/pngout/default.nix
new file mode 100644
index 000000000000..c80d4a65adc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngout/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchurl
+, unzip
+}:
+
+let
+  platforms = {
+    aarch64-linux = { folder = "aarch64"; ld-linux = "ld-linux-aarch64.so.1"; };
+    armv7l-linux = { folder = "armv7"; ld-linux = "ld-linux-armhf.so.3"; };
+    i686-linux = { folder = "i686"; ld-linux = "ld-linux.so.2"; };
+    x86_64-darwin = { folder = "."; };
+    x86_64-linux = { folder = "amd64"; ld-linux = "ld-linux-x86-64.so.2"; };
+  };
+  platform = platforms."${stdenv.hostPlatform.system}"
+    or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+  download = if stdenv.isDarwin
+    then { extension = "macos.zip"; hash = "sha256-MnL6lH7q/BrACG4fFJNfnvoh0JClVeaJIlX+XIj2aG4="; }
+    else { extension = "linux.tar.gz"; hash = "sha256-rDi7pvDeKQM96GZTjDr6ZDQTGbaVu+OI77xf2egw6Sg="; };
+in
+stdenv.mkDerivation rec {
+  pname = "pngout";
+  version = "20200115";
+
+  src = fetchurl {
+    inherit (download) hash;
+    url = "http://static.jonof.id.au/dl/kenutils/pngout-${version}-${download.extension}";
+  };
+
+  nativeBuildInputs = lib.optionals stdenv.isDarwin [ unzip ];
+
+  # pngout is code-signed on Darwin, so don’t alter the binary to avoid breaking the signature.
+  dontFixup = stdenv.isDarwin;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${platform.folder}/pngout $out/bin
+  '' + lib.optionalString stdenv.isLinux ''
+    patchelf --set-interpreter ${stdenv.cc.libc}/lib/${platform.ld-linux} $out/bin/pngout
+  '';
+
+  meta = {
+    description = "A tool that aggressively optimizes the sizes of PNG images";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfreeRedistributable;
+    homepage = "http://advsys.net/ken/utils.htm";
+    platforms = lib.attrNames platforms;
+    maintainers = [ lib.maintainers.sander ];
+    mainProgram = "pngout";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngquant/add-Cargo.lock.patch b/nixpkgs/pkgs/tools/graphics/pngquant/add-Cargo.lock.patch
new file mode 100644
index 000000000000..9098198724bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngquant/add-Cargo.lock.patch
@@ -0,0 +1,428 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..319b40b
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,422 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++version = 3
++
++[[package]]
++name = "arrayvec"
++version = "0.7.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
++
++[[package]]
++name = "autocfg"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
++
++[[package]]
++name = "bitflags"
++version = "1.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
++
++[[package]]
++name = "bitflags"
++version = "2.4.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
++
++[[package]]
++name = "bytemuck"
++version = "1.14.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
++
++[[package]]
++name = "cc"
++version = "1.0.83"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
++dependencies = [
++ "jobserver",
++ "libc",
++]
++
++[[package]]
++name = "cfg-if"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
++
++[[package]]
++name = "cocoa_image"
++version = "1.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ea3dcd9c6980e6b9152a61476163a7039bdd73b4508f699b4b3b102d53490839"
++dependencies = [
++ "core-foundation",
++ "core-graphics",
++ "imgref",
++ "objc",
++ "rgb",
++]
++
++[[package]]
++name = "core-foundation"
++version = "0.9.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
++dependencies = [
++ "core-foundation-sys",
++ "libc",
++]
++
++[[package]]
++name = "core-foundation-sys"
++version = "0.8.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
++
++[[package]]
++name = "core-graphics"
++version = "0.23.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212"
++dependencies = [
++ "bitflags 1.3.2",
++ "core-foundation",
++ "core-graphics-types",
++ "foreign-types",
++ "libc",
++]
++
++[[package]]
++name = "core-graphics-types"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33"
++dependencies = [
++ "bitflags 1.3.2",
++ "core-foundation",
++ "libc",
++]
++
++[[package]]
++name = "crossbeam-deque"
++version = "0.8.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
++dependencies = [
++ "cfg-if",
++ "crossbeam-epoch",
++ "crossbeam-utils",
++]
++
++[[package]]
++name = "crossbeam-epoch"
++version = "0.9.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
++dependencies = [
++ "autocfg",
++ "cfg-if",
++ "crossbeam-utils",
++ "memoffset",
++ "scopeguard",
++]
++
++[[package]]
++name = "crossbeam-utils"
++version = "0.8.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
++dependencies = [
++ "cfg-if",
++]
++
++[[package]]
++name = "dunce"
++version = "1.0.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
++
++[[package]]
++name = "either"
++version = "1.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
++
++[[package]]
++name = "foreign-types"
++version = "0.5.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
++dependencies = [
++ "foreign-types-macros",
++ "foreign-types-shared",
++]
++
++[[package]]
++name = "foreign-types-macros"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "foreign-types-shared"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
++
++[[package]]
++name = "getopts"
++version = "0.2.21"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
++dependencies = [
++ "unicode-width",
++]
++
++[[package]]
++name = "glob"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
++
++[[package]]
++name = "imagequant"
++version = "4.2.2"
++dependencies = [
++ "arrayvec",
++ "once_cell",
++ "rayon",
++ "rgb",
++ "thread_local",
++]
++
++[[package]]
++name = "imagequant-sys"
++version = "4.0.3"
++dependencies = [
++ "bitflags 2.4.1",
++ "imagequant",
++ "libc",
++]
++
++[[package]]
++name = "imgref"
++version = "1.10.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "90d944e334f00f4449c9640b440a171f816be0152305c12ef90424fc35fd035c"
++
++[[package]]
++name = "jobserver"
++version = "0.1.27"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "lcms2-sys"
++version = "4.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "137dae56197ab9e66729ff73e2942e26f16f9ddcd14a53295c35f53dcd067b58"
++dependencies = [
++ "cc",
++ "dunce",
++ "libc",
++ "pkg-config",
++]
++
++[[package]]
++name = "libc"
++version = "0.2.150"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
++
++[[package]]
++name = "libpng-sys"
++version = "1.1.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b531eb8c558e697d1fc6a642b260426aa85ba4d054a8f0db66f5866918332674"
++dependencies = [
++ "cc",
++ "dunce",
++ "libc",
++ "libz-sys",
++ "pkg-config",
++]
++
++[[package]]
++name = "libz-sys"
++version = "1.1.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
++dependencies = [
++ "cc",
++ "libc",
++ "pkg-config",
++ "vcpkg",
++]
++
++[[package]]
++name = "malloc_buf"
++version = "0.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "memoffset"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
++dependencies = [
++ "autocfg",
++]
++
++[[package]]
++name = "objc"
++version = "0.2.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
++dependencies = [
++ "malloc_buf",
++]
++
++[[package]]
++name = "once_cell"
++version = "1.18.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
++
++[[package]]
++name = "pkg-config"
++version = "0.3.27"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
++
++[[package]]
++name = "pngquant"
++version = "3.0.3"
++dependencies = [
++ "cc",
++ "cocoa_image",
++ "dunce",
++ "getopts",
++ "imagequant-sys",
++ "lcms2-sys",
++ "libc",
++ "libpng-sys",
++ "wild",
++]
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.69"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
++dependencies = [
++ "unicode-ident",
++]
++
++[[package]]
++name = "quote"
++version = "1.0.33"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
++dependencies = [
++ "proc-macro2",
++]
++
++[[package]]
++name = "rayon"
++version = "1.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
++dependencies = [
++ "either",
++ "rayon-core",
++]
++
++[[package]]
++name = "rayon-core"
++version = "1.12.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
++dependencies = [
++ "crossbeam-deque",
++ "crossbeam-utils",
++]
++
++[[package]]
++name = "rgb"
++version = "0.8.37"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8"
++dependencies = [
++ "bytemuck",
++]
++
++[[package]]
++name = "scopeguard"
++version = "1.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
++
++[[package]]
++name = "syn"
++version = "2.0.39"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "unicode-ident",
++]
++
++[[package]]
++name = "thread_local"
++version = "1.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
++dependencies = [
++ "cfg-if",
++ "once_cell",
++]
++
++[[package]]
++name = "unicode-ident"
++version = "1.0.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
++
++[[package]]
++name = "unicode-width"
++version = "0.1.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
++
++[[package]]
++name = "vcpkg"
++version = "0.2.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
++
++[[package]]
++name = "wild"
++version = "2.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "10d01931a94d5a115a53f95292f51d316856b68a035618eb831bbba593a30b67"
++dependencies = [
++ "glob",
++]
diff --git a/nixpkgs/pkgs/tools/graphics/pngquant/default.nix b/nixpkgs/pkgs/tools/graphics/pngquant/default.nix
new file mode 100644
index 000000000000..cdfcb4093548
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngquant/default.nix
@@ -0,0 +1,41 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, libpng, zlib, lcms2 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pngquant";
+  version = "3.0.3";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "kornelski";
+    repo = "pngquant";
+    rev = version;
+    hash = "sha256-u2zEp9Llo+c/+1QGW4V4r40KQn/ATHCTEsrpy7bRf/I=";
+    fetchSubmodules = true;
+  };
+
+  cargoHash = "sha256-mZpg6BRpsvEiMsS6ZJzVYg6wXHLb3Cf72sK1yzTF8y4=";
+  cargoPatches = [
+    # https://github.com/kornelski/pngquant/issues/347
+    ./add-Cargo.lock.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libpng zlib lcms2 ];
+
+  doCheck = false; # Has no Rust-based tests
+
+  postInstall = ''
+    install -Dpm0444 pngquant.1 $man/share/man/man1/pngquant.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://pngquant.org/";
+    description = "A tool to convert 24/32-bit RGBA PNGs to 8-bit palette with alpha channel preserved";
+    changelog = "https://github.com/kornelski/pngquant/raw/${version}/CHANGELOG";
+    platforms = platforms.unix;
+    license = with licenses; [ gpl3Plus hpnd bsd2 ];
+    mainProgram = "pngquant";
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngtoico/default.nix b/nixpkgs/pkgs/tools/graphics/pngtoico/default.nix
new file mode 100644
index 000000000000..a537e16d96ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngtoico/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, libpng, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "pngtoico";
+  version = "1.0";
+
+  src = fetchurl {
+    url = "mirror://kernel/software/graphics/pngtoico/pngtoico-${version}.tar.gz";
+    sha256 = "1xb4aa57sjvgqfp01br3dm72hf7q0gb2ad144s1ifrs09215fgph";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/media-gfx/pngtoico/files/pngtoico-1.0.1-libpng15.patch";
+      hash = "sha256-MeRV4FL37Wq7aFRnjbxPokcBKmPM+h94cnFJmdvHAt0=";
+    })
+  ];
+
+  configurePhase = ''
+    sed -i s,/usr/local,$out, Makefile
+  '';
+
+  buildInputs = [ libpng ];
+
+  meta = {
+    homepage = "https://www.kernel.org/pub/software/graphics/pngtoico/";
+    description = "Small utility to convert a set of PNG images to Microsoft ICO format";
+    license = lib.licenses.gpl2Plus;
+    platforms = with lib.platforms; linux;
+    mainProgram = "pngtoico";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngtools/default.nix b/nixpkgs/pkgs/tools/graphics/pngtools/default.nix
new file mode 100644
index 000000000000..563c8af50ae8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngtools/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, libpng12, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "pngtools";
+  version = "unstable-2022-03-14";
+
+  src = fetchFromGitHub {
+    owner = "mikalstill";
+    repo = "pngtools";
+    rev = "1ccca3a0f3f6882661bbafbfb62feb774ca195d1";
+    sha256 = "sha256-W1XofOVTyfA7IbxOnTkWdOOZ00gZ4e0GOYl7nMtLIJk=";
+  };
+
+  buildInputs = [ libpng12 ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mikalstill/pngtools";
+    description = "PNG manipulation tools";
+    maintainers = with maintainers; [ zendo ];
+    license = licenses.gpl2Only;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/povray/default.nix b/nixpkgs/pkgs/tools/graphics/povray/default.nix
new file mode 100644
index 000000000000..5e432a0d13c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/povray/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf
+, automake
+, boost
+, zlib
+, libX11
+, libICE
+, libSM
+, libpng
+, libjpeg
+, libtiff
+, SDL
+}:
+
+stdenv.mkDerivation rec {
+  pname = "povray";
+  version = "3.8.0-x.10064738";
+
+  src = fetchFromGitHub {
+    owner = "POV-Ray";
+    repo = "povray";
+    rev = "v${version}";
+    sha256 = "0hy5a3q5092szk2x3s9lpn1zkszgq9bp15rxzdncxlvnanyzsasf";
+  };
+
+  nativeBuildInputs = [ automake autoconf ];
+  buildInputs = [ boost zlib libX11 libICE libSM libpng libjpeg libtiff SDL ];
+
+  # the installPhase wants to put files into $HOME. I let it put the files
+  # to $TMPDIR, so they don't get into the $out
+  postPatch = '' cd unix
+                 ./prebuild.sh
+                 cd ..
+                 sed -i -e 's/^povconfuser.*/povconfuser=$(TMPDIR)\/povray/' Makefile.{am,in}
+                 sed -i -e 's/^povuser.*/povuser=$(TMPDIR)\/.povray/' Makefile.{am,in}
+                 sed -i -e 's/^povowner.*/povowner=nobody/' Makefile.{am,in}
+                 sed -i -e 's/^povgroup.*/povgroup=nogroup/' Makefile.{am,in}
+               '';
+
+  configureFlags = [ "COMPILED_BY='nix'" "--with-boost-thread=boost_thread" "--with-x" ];
+
+  enableParallelBuilding = true;
+
+  preInstall = ''
+    mkdir "$TMP/bin"
+    for i in chown chgrp; do
+      echo '#!${stdenv.shell}' >> "$TMP/bin/$i"
+      chmod +x "$TMP/bin/$i"
+      PATH="$TMP/bin:$PATH"
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.povray.org/";
+    description = "Persistence of Vision Raytracer";
+    license = licenses.free;
+    platforms = platforms.linux;
+    mainProgram = "povray";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pstoedit/default.nix b/nixpkgs/pkgs/tools/graphics/pstoedit/default.nix
new file mode 100644
index 000000000000..3bd4c1a86fbc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pstoedit/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pkg-config, darwin, lib
+, zlib, ghostscript, imagemagick, plotutils, gd
+, libjpeg, libwebp, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pstoedit";
+  version = "3.78";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pstoedit/pstoedit-${version}.tar.gz";
+    sha256 = "sha256-jMKONLx/iNkTeA+AdOgT3VqqCsIFams21L8ASg6Q2AE=";
+  };
+
+  #
+  # Turn on "-rdb" option (REALLYDELAYBIND) by default to ensure compatibility with gs-9.22
+  #
+  patches = [ ./pstoedit-gs-9.22-compat.patch  ];
+
+  outputs = [ "out" "dev" ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ zlib ghostscript imagemagick plotutils gd libjpeg libwebp ]
+  ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    libiconv ApplicationServices
+  ]);
+
+  # '@LIBPNG_LDFLAGS@' is no longer substituted by autoconf (the code is commented out)
+  # so we need to remove it from the pkg-config file as well
+  preConfigure = ''
+    substituteInPlace config/pstoedit.pc.in --replace '@LIBPNG_LDFLAGS@' ""
+  '';
+
+  meta = with lib; {
+    description = "Translates PostScript and PDF graphics into other vector formats";
+    homepage = "https://sourceforge.net/projects/pstoedit/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.marcweber ];
+    platforms = platforms.unix;
+    mainProgram = "pstoedit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pstoedit/pstoedit-gs-9.22-compat.patch b/nixpkgs/pkgs/tools/graphics/pstoedit/pstoedit-gs-9.22-compat.patch
new file mode 100644
index 000000000000..64fe805d5015
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pstoedit/pstoedit-gs-9.22-compat.patch
@@ -0,0 +1,13 @@
+diff --git a/src/pstoeditoptions.h b/src/pstoeditoptions.h
+index 7846883..0fb6a6f 100755
+--- a/src/pstoeditoptions.h
++++ b/src/pstoeditoptions.h
+@@ -453,7 +453,7 @@ private:
+ 		"Later versions of Ghostscript will probably support -dDELAYBIND again. "
+ 		"But also in that case the security risk remains. So be careful with what "
+ 		"files you process with pstoedit and Ghostscript.",
+-		false),	//
++		true),	//
+ #endif
+ 	pagetoextract		(true, "-page","page number",g_t,"extract a specific page: 0 means all pages",
+ 		"Select a single page from a multi-page PostScript or PDF file.",
diff --git a/nixpkgs/pkgs/tools/graphics/puppeteer-cli/default.nix b/nixpkgs/pkgs/tools/graphics/puppeteer-cli/default.nix
new file mode 100644
index 000000000000..6a2eea146f0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/puppeteer-cli/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, makeWrapper
+, chromium
+}:
+
+buildNpmPackage rec {
+  pname = "puppeteer-cli";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "JarvusInnovations";
+    repo = "puppeteer-cli";
+    rev = "v${version}";
+    sha256 = "0xrb8r4qc9ds7wmfd30nslnkqylxqfwr4gqf7b30v651sjyds29x";
+  };
+
+  npmDepsHash = "sha256-R22lXQuYNQ+TQ7U2l4wZeBmAl8AXHUPG/3qVQBi3Ezo=";
+
+  env = {
+    PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = true;
+  };
+
+  dontNpmBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/puppeteer \
+      --set PUPPETEER_EXECUTABLE_PATH ${chromium}/bin/chromium
+  '';
+
+  meta = {
+    description = "Command-line wrapper for generating PDF prints and PNG screenshots with Puppeteer";
+    homepage = "https://github.com/JarvusInnovations/puppeteer-cli";
+    license = lib.licenses.mit;
+    mainProgram = "puppeteer";
+    maintainers = with lib.maintainers; [ chessai ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/qrcode/default.nix b/nixpkgs/pkgs/tools/graphics/qrcode/default.nix
new file mode 100644
index 000000000000..e870f53da82e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/qrcode/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "qrcode";
+  version = "unstable-2023-12-02";
+
+  src = fetchFromGitHub {
+    owner = "qsantos";
+    repo = "qrcode";
+    rev = "96fac69ad3e4f616ce75c0e3ef4ed0574cfab315";
+    hash = "sha256-Aesjys6FchB6qcLRWJNGfcEZRlO3stw3+IM8Xe2pF+Q=";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/doc/qrcode}
+    cp qrcode "$out/bin"
+    cp DOCUMENTATION LICENCE "$out/share/doc/qrcode"
+  '';
+
+  meta = with lib; {
+    description = "A small QR-code tool";
+    homepage = "https://github.com/qsantos/qrcode";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = with platforms; unix;
+    mainProgram = "qrcode";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/quirc/0001-dont-build-demos.patch b/nixpkgs/pkgs/tools/graphics/quirc/0001-dont-build-demos.patch
new file mode 100644
index 000000000000..9ecb6dda4e19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/quirc/0001-dont-build-demos.patch
@@ -0,0 +1,29 @@
+diff --git a/Makefile b/Makefile
+index 2d5b745..ecef988 100644
+--- a/Makefile
++++ b/Makefile
+@@ -37,7 +37,7 @@ DEMO_UTIL_OBJ = \
+ 
+ OPENCV_CFLAGS != pkg-config --cflags opencv4
+ OPENCV_LIBS != pkg-config --libs opencv4
+-QUIRC_CXXFLAGS = $(QUIRC_CFLAGS) $(OPENCV_CFLAGS) --std=c++17
++QUIRC_CXXFLAGS = $(QUIRC_CFLAGS) --std=c++17
+ 
+ .PHONY: all v4l sdl opencv install uninstall clean
+ 
+@@ -85,14 +85,11 @@ libquirc.so.$(LIB_VERSION): $(LIB_OBJ)
+ .cxx.o:
+ 	$(CXX) $(QUIRC_CXXFLAGS) -o $@ -c $<
+ 
+-install: libquirc.a libquirc.so.$(LIB_VERSION) quirc-demo quirc-scanner
++install: libquirc.a libquirc.so.$(LIB_VERSION)
+ 	install -o root -g root -m 0644 lib/quirc.h $(DESTDIR)$(PREFIX)/include
+ 	install -o root -g root -m 0644 libquirc.a $(DESTDIR)$(PREFIX)/lib
+ 	install -o root -g root -m 0755 libquirc.so.$(LIB_VERSION) \
+ 		$(DESTDIR)$(PREFIX)/lib
+-	install -o root -g root -m 0755 quirc-demo $(DESTDIR)$(PREFIX)/bin
+-	# install -o root -g root -m 0755 quirc-demo-opencv $(DESTDIR)$(PREFIX)/bin
+-	install -o root -g root -m 0755 quirc-scanner $(DESTDIR)$(PREFIX)/bin
+ 
+ uninstall:
+ 	rm -f $(DESTDIR)$(PREFIX)/include/quirc.h
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/graphics/quirc/default.nix b/nixpkgs/pkgs/tools/graphics/quirc/default.nix
new file mode 100644
index 000000000000..88993dbe8ce6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/quirc/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub, SDL_gfx, SDL, libjpeg, libpng, opencv
+, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "quirc";
+  version = "2021-10-08";
+
+  src = fetchFromGitHub {
+    owner = "dlbeer";
+    repo = "quirc";
+    rev = "516d91a94d880ca1006fc1d57f318bdff8411f0d";
+    sha256 = "0jkaz5frm6jr9bxyfympvzh180nczrfvvb3z3qhk21djlas6nr5f";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ SDL SDL_gfx libjpeg libpng opencv ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  env.NIX_CFLAGS_COMPILE = "-I${lib.getDev SDL}/include/SDL -I${SDL_gfx}/include/SDL";
+
+  # Disable building of linux-only demos on darwin systems
+  patches = lib.optionals stdenv.isDarwin [ ./0001-dont-build-demos.patch ];
+
+  buildPhase = lib.optionalString stdenv.isDarwin ''
+    runHook preBuild
+    make libquirc.so
+    make qrtest
+    runHook postBuild
+  '';
+
+  configurePhase = ''
+    runHook preConfigure
+
+    # don't try to change ownership
+    sed -e 's/-[og] root//g' -i Makefile
+
+    runHook postConfigure
+  '';
+
+  preInstall = ''
+    mkdir -p "$out"/{bin,lib,include}
+
+    # install all binaries
+    find -maxdepth 1 -type f -executable ! -name '*.so.*' | xargs cp -t "$out"/bin
+  '';
+
+  meta = {
+    description = "A small QR code decoding library";
+    license = lib.licenses.isc;
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.linux ++ [ "x86_64-darwin" "aarch64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/cmakelists.patch b/nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/cmakelists.patch
new file mode 100644
index 000000000000..faeb65d3b847
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/cmakelists.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1e7b71a..9db85b1 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -107,6 +107,8 @@ if(USE_SYSTEM_NCNN)
+
+         find_package(Threads)
+
++        include("${GLSLANG_TARGET_DIR}/SPIRV-Tools/SPIRV-ToolsTarget.cmake")
++        include("${GLSLANG_TARGET_DIR}/SPIRV-Tools-opt/SPIRV-Tools-optTargets.cmake")
+         include("${GLSLANG_TARGET_DIR}/OSDependentTargets.cmake")
+         include("${GLSLANG_TARGET_DIR}/OGLCompilerTargets.cmake")
+         if(EXISTS "${GLSLANG_TARGET_DIR}/HLSLTargets.cmake")
diff --git a/nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/default.nix b/nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/default.nix
new file mode 100644
index 000000000000..6a3b66a3548c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchzip
+, fetchFromGitHub
+, cmake
+, vulkan-headers
+, vulkan-loader
+, glslang
+, libwebp
+, ncnn
+}:
+
+stdenv.mkDerivation rec {
+  pname = "Real-ESRGAN-ncnn-vulkan";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "xinntao";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-F+NfkAbk8UtAKzsF42ppPF2UGjK/M6iFfBsRRBbCmcI=";
+  };
+  sourceRoot = "${src.name}/src";
+
+  models = fetchzip {
+    # Choose the newst release from https://github.com/xinntao/Real-ESRGAN/releases to update
+    url = "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-ubuntu.zip";
+    stripRoot = false;
+    sha256 = "sha256-1YiPzv1eGnHrazJFRvl37+C1F2xnoEbN0UQYkxLT+JQ=";
+  };
+
+  patches = [
+    ./cmakelists.patch
+    ./models_path.patch
+  ];
+
+  cmakeFlags = [
+    "-DUSE_SYSTEM_NCNN=1"
+    "-DUSE_SYSTEM_WEBP=1"
+
+    "-DGLSLANG_TARGET_DIR=${glslang}/lib/cmake"
+  ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ vulkan-headers vulkan-loader glslang libwebp ncnn ];
+
+  postPatch = ''
+    substituteInPlace main.cpp --replace REPLACE_MODELS $out/share/models
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share
+    cp realesrgan-ncnn-vulkan $out/bin/
+    cp -r ${models}/models $out/share
+  '';
+
+  meta = with lib; {
+    description = "NCNN implementation of Real-ESRGAN. Real-ESRGAN aims at developing Practical Algorithms for General Image Restoration";
+    homepage = "https://github.com/xinntao/Real-ESRGAN-ncnn-vulkan";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tilcreator ];
+    platforms = platforms.all;
+    mainProgram = "realesrgan-ncnn-vulkan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/models_path.patch b/nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/models_path.patch
new file mode 100644
index 000000000000..8cd2d6d1e982
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/realesrgan-ncnn-vulkan/models_path.patch
@@ -0,0 +1,22 @@
+diff --git a/main.cpp b/main.cpp
+index ebe0e62..ef3a1ed 100644
+--- a/main.cpp
++++ b/main.cpp
+@@ -109,7 +109,7 @@ static void print_usage()
+     fprintf(stderr, "  -o output-path       output image path (jpg/png/webp) or directory\n");
+     fprintf(stderr, "  -s scale             upscale ratio (can be 2, 3, 4. default=4)\n");
+     fprintf(stderr, "  -t tile-size         tile size (>=32/0=auto, default=0) can be 0,0,0 for multi-gpu\n");
+-    fprintf(stderr, "  -m model-path        folder path to the pre-trained models. default=models\n");
++    fprintf(stderr, "  -m model-path        folder path to the pre-trained models. default=REPLACE_MODELS\n");
+     fprintf(stderr, "  -n model-name        model name (default=realesr-animevideov3, can be realesr-animevideov3 | realesrgan-x4plus | realesrgan-x4plus-anime | realesrnet-x4plus)\n");
+     fprintf(stderr, "  -g gpu-id            gpu device to use (default=auto) can be 0,1,2 for multi-gpu\n");
+     fprintf(stderr, "  -j load:proc:save    thread count for load/proc/save (default=1:2:2) can be 1:2,2,2:2 for multi-gpu\n");
+@@ -438,7 +438,7 @@ int main(int argc, char** argv)
+     path_t outputpath;
+     int scale = 4;
+     std::vector<int> tilesize;
+-    path_t model = PATHSTR("models");
++    path_t model = PATHSTR("REPLACE_MODELS");
+     path_t modelname = PATHSTR("realesr-animevideov3");
+     std::vector<int> gpuid;
+     int jobs_load = 1;
diff --git a/nixpkgs/pkgs/tools/graphics/resvg/default.nix b/nixpkgs/pkgs/tools/graphics/resvg/default.nix
new file mode 100644
index 000000000000..199fff0d615e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/resvg/default.nix
@@ -0,0 +1,34 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "resvg";
+  version = "0.40.0";
+
+  src = fetchFromGitHub {
+    owner = "RazrFalcon";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-M1log9JAgKB+S1jyieXNOhI8Wa0GwujbzyLJUd6b8VI=";
+  };
+
+  cargoHash = "sha256-KyiwupObxEVyDzwsQOKWw0+avhf96L83m7tiI6EK3/U=";
+
+  cargoBuildFlags = [
+    "--package=resvg"
+    "--package=resvg-capi"
+    "--package=usvg"
+  ];
+
+  postInstall = ''
+    install -Dm644 -t $out/include crates/c-api/*.h
+  '';
+
+  meta = with lib; {
+    description = "An SVG rendering library";
+    homepage = "https://github.com/RazrFalcon/resvg";
+    changelog = "https://github.com/RazrFalcon/resvg/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "resvg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/rocket/default.nix b/nixpkgs/pkgs/tools/graphics/rocket/default.nix
new file mode 100644
index 000000000000..070e359fe1c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/rocket/default.nix
@@ -0,0 +1,31 @@
+{ mkDerivation, lib, fetchFromGitHub, qmake, qtbase }:
+
+mkDerivation {
+  pname = "rocket";
+  version = "2018-06-09";
+
+  src = fetchFromGitHub {
+    owner = "rocket";
+    repo = "rocket";
+    rev = "7bc1e9826cad5dbc63e56371c6aa1798b2a7b50b";
+    sha256 = "13bdg2dc6ypk17sz39spqdlb3wai2y085bdb36pls2as2nf22drp";
+  };
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [ qtbase ];
+
+  dontConfigure = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r editor/editor $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "A tool for synchronizing music and visuals in demoscene productions";
+    homepage = "https://github.com/rocket/rocket";
+    license = licenses.zlib;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.dezgeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/s2png/default.nix b/nixpkgs/pkgs/tools/graphics/s2png/default.nix
new file mode 100644
index 000000000000..940e9db05419
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/s2png/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, diffutils, gd, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "s2png";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "dbohdan";
+    repo = "s2png";
+    rev = "v${version}";
+    sha256 = "0y3crfm0jqprgxamlly713cka2x1bp6z63p1lw9wh4wc37kpira6";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ diffutils gd ];
+  installFlags = [ "prefix=" "DESTDIR=$(out)" ];
+
+  meta = {
+    homepage = "https://github.com/dbohdan/s2png/";
+    description = "Store any data in PNG images";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.dbohdan ];
+    platforms = lib.platforms.unix;
+    mainProgram = "s2png";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/sanjuuni/default.nix b/nixpkgs/pkgs/tools/graphics/sanjuuni/default.nix
new file mode 100644
index 000000000000..6b96e6ad5a92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/sanjuuni/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, ffmpeg
+, poco
+, ocl-icd
+, opencl-clhpp
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sanjuuni";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "MCJack123";
+    repo = "sanjuuni";
+    rev = version;
+    sha256 = "sha256-wgtyrik4Z5AXd8MHkiMuxMpGh/xcEtNqivyhvL68aac=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    ffmpeg
+    poco
+    ocl-icd
+    opencl-clhpp
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 sanjuuni $out/bin/sanjuuni
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/MCJack123/sanjuuni";
+    description = "A command-line tool that converts images and videos into a format that can be displayed in ComputerCraft";
+    changelog = "https://github.com/MCJack123/sanjuuni/releases/tag/${version}";
+    maintainers = [ maintainers.tomodachi94 ];
+    license = licenses.gpl2Plus;
+    broken = stdenv.isDarwin;
+    mainProgram = "sanjuuni";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/scanbd/default.nix b/nixpkgs/pkgs/tools/graphics/scanbd/default.nix
new file mode 100644
index 000000000000..3f2331a0de04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/scanbd/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, fetchurl, pkg-config
+, dbus, libconfuse, libjpeg, sane-backends, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "scanbd";
+  version = "1.5.1";
+
+  src = fetchurl {
+    sha256 = "0pvy4qirfjdfm8aj6x5rkbgl7hk3jfa2s21qkk8ic5dqfjjab75n";
+    url = "mirror://sourceforge/scanbd/${pname}-${version}.tgz";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ dbus libconfuse libjpeg sane-backends systemd ];
+
+  configureFlags = [
+    "--disable-Werror"
+    "--enable-udev"
+    "--with-scanbdconfdir=/etc/scanbd"
+    "--with-systemdsystemunitdir=$out/lib/systemd/system"
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # AC_FUNC_MALLOC is broken on cross builds.
+    "ac_cv_func_malloc_0_nonnull=yes"
+    "ac_cv_func_realloc_0_nonnull=yes"
+  ];
+
+  enableParallelBuilding = true;
+
+  installFlags = [
+    "scanbdconfdir=$(out)/etc/scanbd"
+    "scannerconfdir=$(scanbdconfdir)/scanner.d"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Scanner button daemon";
+    longDescription = ''
+      scanbd polls a scanner's buttons, looking for button presses, function
+      knob changes, or other scanner events such as paper inserts and removals,
+      while at the same time allowing scan-applications to access the scanner.
+
+      Various actions can be submitted (scan, copy, email, ...) via action
+      scripts. The function knob values are passed to the action scripts as
+      well. Scan actions are also signaled via dbus. This can be useful for
+      foreign applications. Scans can also be triggered via dbus from foreign
+      applications.
+
+      On platforms which support signaling of dynamic device insertion/removal
+      (libudev, dbus, hal), scanbd supports this as well.
+
+      scanbd can use all sane-backends or some special backends from the (old)
+      scanbuttond project.
+    '';
+    homepage = "http://scanbd.sourceforge.net/";
+    downloadPage = "https://sourceforge.net/projects/scanbd/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/scrot/default.nix b/nixpkgs/pkgs/tools/graphics/scrot/default.nix
new file mode 100644
index 000000000000..7d0b1abae1b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/scrot/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, imlib2
+, autoreconfHook
+, autoconf-archive
+, libX11
+, libXext
+, libXfixes
+, libXcomposite
+, libXinerama
+, pkg-config
+, libbsd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "scrot";
+  version = "1.10";
+
+  src = fetchFromGitHub {
+    owner = "resurrecting-open-source-projects";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ypPUQt3N30qUw5ecVRhwz3Hnh9lTOnbAm7o5tdxjyds=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    autoconf-archive
+    pkg-config
+  ];
+
+  buildInputs = [
+    imlib2
+    libX11
+    libXext
+    libXfixes
+    libXcomposite
+    libXinerama
+    libbsd
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/resurrecting-open-source-projects/scrot";
+    description = "A command-line screen capture utility";
+    mainProgram = "scrot";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    license = licenses.mitAdvertising;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/shot-scraper/default.nix b/nixpkgs/pkgs/tools/graphics/shot-scraper/default.nix
new file mode 100644
index 000000000000..0c3e8688a3f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/shot-scraper/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "shot-scraper";
+  version = "1.4";
+  format = "setuptools";
+
+  disabled = python3.pkgs.pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-hPzOwvTQAFs9IQRkq/uw+pHv5ZP5XU3Zn605SL8udPA=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    click-default-group
+    playwright
+    pyyaml
+  ];
+
+  # skip tests due to network access
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "shot_scraper"
+  ];
+
+  meta = with lib; {
+    description = "A command-line utility for taking automated screenshots of websites";
+    homepage = "https://github.com/simonw/shot-scraper";
+    changelog = "https://github.com/simonw/shot-scraper/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ techknowlogick ];
+    mainProgram = "shot-scraper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/shotgun/default.nix b/nixpkgs/pkgs/tools/graphics/shotgun/default.nix
new file mode 100644
index 000000000000..d2d3c92982f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/shotgun/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shotgun";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "neXromancers";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-sBstFz7cYfwVQpDZeC3wPjzbKU5zQzmnhiWNqiCda1k=";
+  };
+
+  cargoSha256 = "sha256-P6riJgnEe+bNP3cUKNCfIkgKM44XGYSDADnU6w7CFDA=";
+
+  meta = with lib; {
+    description = "Minimal X screenshot utility";
+    homepage = "https://github.com/neXromancers/shotgun";
+    license = with licenses; [ mpl20 ];
+    maintainers = with maintainers; [ figsoda lumi novenary ];
+    platforms = platforms.linux;
+    mainProgram = "shotgun";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/sic-image-cli/default.nix b/nixpkgs/pkgs/tools/graphics/sic-image-cli/default.nix
new file mode 100644
index 000000000000..42dae849fc9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/sic-image-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles, nasm }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sic-image-cli";
+  version = "0.22.4";
+
+  src = fetchFromGitHub {
+    owner = "foresterre";
+    repo = "sic";
+    rev = "v${version}";
+    hash = "sha256-PFbHHO3m4mnV5s8DVev/iao9sC3FYht0whTHYzO25Yo=";
+  };
+
+  cargoHash = "sha256-Pw5PJ0xQCLfPaVEzsfqeHJ0E3miDwlj+71J98KRrYDs=";
+
+  nativeBuildInputs = [ installShellFiles nasm ];
+
+  postBuild = ''
+    cargo run --example gen_completions
+  '';
+
+  postInstall = ''
+    installShellCompletion sic.{bash,fish}
+    installShellCompletion --zsh _sic
+  '';
+
+  meta = with lib; {
+    description = "Accessible image processing and conversion from the terminal";
+    homepage = "https://github.com/foresterre/sic";
+    changelog = "https://github.com/foresterre/sic/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "sic";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/smartcrop/default.nix b/nixpkgs/pkgs/tools/graphics/smartcrop/default.nix
new file mode 100644
index 000000000000..7660607a9a47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/smartcrop/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule {
+  pname = "smartcrop";
+  version = "unstable-2023-03-16";
+
+  src = fetchFromGitHub {
+    owner = "muesli";
+    repo = "smartcrop";
+    rev = "f1935b108c21d44756141bfebf302dfd7b03fdbe";
+    hash = "sha256-3fNDmKR5b6SexG3fBn7uXrtL1gbXrpo8d8boKul1R6Y=";
+  };
+
+  vendorHash = "sha256-ov3dHF/NxqxWPaVzddaJSjz3boLpZtIPtvP1iNBtiTc=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Find good image crops for arbitrary crop sizes";
+    homepage = "https://github.com/muesli/smartcrop";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "smartcrop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/snapdragon-profiler/default.nix b/nixpkgs/pkgs/tools/graphics/snapdragon-profiler/default.nix
new file mode 100644
index 000000000000..caf187cb4c1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/snapdragon-profiler/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenv
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, icoutils
+, mono
+, jre
+, androidenv
+, gtk-sharp-2_0
+, gtk2
+, libcxx
+, libcxxabi
+, coreutils
+, requireFile
+, archive ? requireFile {
+    name = "snapdragonprofiler_external_linux.tar.gz";
+    message = ''
+      This nix expression requires that "snapdragonprofiler_external_linux.tar.gz" is
+      already part of the store. To get this archive, you need to download it from:
+        https://developer.qualcomm.com/software/snapdragon-profiler
+      and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
+    '';
+    sha256 = "c6731c417ca39fa9b0f190bd80c99b1603cf97d23becab9e47db6beafd6206b7";
+  }
+}:
+
+stdenv.mkDerivation rec {
+  pname = "snapdragon-profiler";
+  version = "2021.2";
+
+  src = archive;
+
+  nativeBuildInputs = [
+    makeWrapper
+    icoutils
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    mono
+    gtk-sharp-2_0
+    gtk2
+    libcxx
+    libcxxabi
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{bin,lib/snapdragon-profiler}
+    mkdir -p $out/share/icons/hicolor/{16x16,32x32,48x48}/apps
+
+    mv *.so $out/lib
+    cp -r * $out/lib/snapdragon-profiler
+    makeWrapper "${mono}/bin/mono" $out/bin/snapdragon-profiler \
+      --add-flags "$out/lib/snapdragon-profiler/SnapdragonProfiler.exe" \
+      --suffix PATH : ${lib.makeBinPath [ jre androidenv.androidPkgs_9_0.platform-tools coreutils ]} \
+      --prefix MONO_GAC_PREFIX : ${gtk-sharp-2_0} \
+      --suffix LD_LIBRARY_PATH : $(echo $NIX_LDFLAGS | sed 's/ -L/:/g;s/ -rpath /:/g;s/-rpath //') \
+      --chdir "$out/lib/snapdragon-profiler" # Fixes themes not loading correctly
+
+    wrestool -x -t 14 SnapdragonProfiler.exe > snapdragon-profiler.ico
+    icotool -x -i 1 -o $out/share/icons/hicolor/16x16/apps/snapdragon-profiler.png snapdragon-profiler.ico
+    icotool -x -i 2 -o $out/share/icons/hicolor/32x32/apps/snapdragon-profiler.png snapdragon-profiler.ico
+    icotool -x -i 3 -o $out/share/icons/hicolor/48x48/apps/snapdragon-profiler.png snapdragon-profiler.ico
+
+    runHook postInstall
+  '';
+
+  desktopItems = [(makeDesktopItem {
+    name = pname;
+    desktopName = "Snapdragon Profiler";
+    exec = "snapdragon-profiler";
+    icon = "snapdragon-profiler";
+    comment = meta.description;
+    categories = [ "Development" "Debugger" "Graphics" "3DGraphics" ];
+  })];
+
+  dontStrip = true; # Always needed on Mono
+  dontPatchELF = true; # Certain libraries are to be deployed to the remote device, they should not be patched
+
+  meta = with lib; {
+    homepage = "https://developer.qualcomm.com/software/snapdragon-profiler";
+    description = "An profiler for Android devices running Snapdragon chips";
+    license = licenses.unfree;
+    maintainers = [ maintainers.ivar ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/sng/default.nix b/nixpkgs/pkgs/tools/graphics/sng/default.nix
new file mode 100644
index 000000000000..a8db32128a5e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/sng/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, libpng, netpbm }:
+
+stdenv.mkDerivation rec {
+  pname = "sng";
+  version = "1.1.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sng/sng-${version}.tar.gz";
+    sha256 = "06a6ydvx9xb3vxvrzdrg3hq0rjwwj9ibr7fyyxjxq6qx1j3mb70i";
+  };
+
+  buildInputs = [ libpng ];
+
+  configureFlags = [
+    "--with-rgbtxt=${netpbm.out}/share/netpbm/misc/rgb.txt"
+  ];
+
+  meta = with lib; {
+    description = "Minilanguage designed to represent the entire contents of a PNG file in an editable form";
+    homepage = "https://sng.sourceforge.net/";
+    license = licenses.zlib;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.unix;
+    mainProgram = "sng";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/spirv-cross/default.nix b/nixpkgs/pkgs/tools/graphics/spirv-cross/default.nix
new file mode 100644
index 000000000000..73413c1aee4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/spirv-cross/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, cmake, python3 }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "spirv-cross";
+  version = "1.3.275.0";
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "SPIRV-Cross";
+    rev = "vulkan-sdk-${finalAttrs.version}";
+    hash = "sha256-Mhr3Yxm5MeLLQFmxWmtXLsq+ZcOE+KMs+3iiTYF8t30=";
+  };
+
+  nativeBuildInputs = [ cmake python3 ];
+
+  postFixup = ''
+    substituteInPlace $out/lib/pkgconfig/*.pc \
+      --replace '=''${prefix}//' '=/'
+  '';
+
+  meta = with lib; {
+    description = "A tool designed for parsing and converting SPIR-V to other shader languages";
+    homepage = "https://github.com/KhronosGroup/SPIRV-Cross";
+    changelog = "https://github.com/KhronosGroup/SPIRV-Cross/releases/tag/${version}";
+    platforms = platforms.all;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Flakebi ];
+    mainProgram = "spirv-cross";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/steghide/default.nix b/nixpkgs/pkgs/tools/graphics/steghide/default.nix
new file mode 100644
index 000000000000..c62761bb2a21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/steghide/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, libjpeg
+, libmcrypt
+, libmhash
+, zlib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "steghide";
+  version = "0.5.1.1";
+
+  src = fetchFromGitHub {
+    owner = "museoa";
+    repo = "steghide";
+    rev = finalAttrs.version;
+    hash = "sha256-uUXEipIUfu9AbG7Ekz+25JkWSEGzqA7sJHZqezLzUto=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+     libjpeg
+     libmcrypt
+     libmhash
+     zlib
+  ];
+
+  postPatch = ''
+    cd src
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/museoa/steghide";
+    description = "Open source steganography program";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; unix;
+    mainProgram = "steghide";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/stegsolve/default.nix b/nixpkgs/pkgs/tools/graphics/stegsolve/default.nix
new file mode 100644
index 000000000000..a42b3c304b28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/stegsolve/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, jre
+, makeWrapper
+, copyDesktopItems
+, makeDesktopItem
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "stegsolve";
+  version = "1.3";
+
+  src = fetchurl {
+    # No versioned binary is published :(
+    url = "https://web.archive.org/web/20230319054116if_/http://www.caesum.com/handbook/Stegsolve.jar";
+    sha256 = "0np5zb28sg6yzkp1vic80pm8iiaamvjpbf5dxmi9kwvqcrh4jyq0";
+  };
+
+  dontUnpack = true;
+
+  desktopItems = [
+    (makeDesktopItem {
+      type = "Application";
+      name = finalAttrs.pname;
+      desktopName = "Stegsolve";
+      comment = "A steganographic image analyzer, solver and data extractor for challanges";
+      exec = finalAttrs.pname;
+      categories = [ "Graphics" ];
+    })
+  ];
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+
+  installPhase = ''
+    runHook preInstall
+
+    export JAR=$out/share/java/stegsolve/stegsolve.jar
+    install -D $src $JAR
+    makeWrapper ${jre}/bin/java $out/bin/stegsolve \
+      --add-flags "-jar $JAR"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A steganographic image analyzer, solver and data extractor for challanges";
+    homepage = "https://www.wechall.net/forum/show/thread/527/Stegsolve_1.3/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = {
+      fullName = "Cronos License";
+      url = "http://www.caesum.com/legal.php";
+      free = false;
+      redistributable = true;
+    };
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.all;
+    mainProgram = "stegsolve";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/svg2pdf/default.nix b/nixpkgs/pkgs/tools/graphics/svg2pdf/default.nix
new file mode 100644
index 000000000000..24065574ddcc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/svg2pdf/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "svg2pdf";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "typst";
+    repo = "svg2pdf";
+    rev = "v${version}";
+    hash = "sha256-mWj9zWxqcJ+5VFYSaeNLxClWdOGd34JboZBwT8E75Ew=";
+  };
+
+  cargoHash = "sha256-zP448dFnkoPca/GJA2kT5ht1fVGkWN0XdaKEePJaloQ=";
+
+  cargoBuildFlags = [
+    "-p=svg2pdf-cli"
+  ];
+
+  meta = with lib; {
+    description = "Convert SVG files to PDFs";
+    homepage = "https://github.com/typst/svg2pdf";
+    changelog = "https://github.com/typst/svg2pdf/releases/tag/${src.rev}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ doronbehar figsoda ];
+    mainProgram = "svg2pdf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/svgbob/default.nix b/nixpkgs/pkgs/tools/graphics/svgbob/default.nix
new file mode 100644
index 000000000000..b09d8dee1ab0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/svgbob/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "svgbob";
+  version = "0.7.2";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "svgbob_cli";
+    sha256 = "sha256-QWDi6cpADm5zOzz8hXuqOBtVrqb0DteWmiDXC6PsLS4=";
+  };
+
+  cargoHash = "sha256-Fj1qjG4SKlchUWW4q0tBC+9fHFFuY6MHngJCFz6J5JY=";
+
+  postInstall = ''
+    mv $out/bin/svgbob_cli $out/bin/svgbob
+  '';
+
+  meta = with lib; {
+    description = "Convert your ascii diagram scribbles into happy little SVG";
+    homepage = "https://github.com/ivanceras/svgbob";
+    changelog = "https://github.com/ivanceras/svgbob/raw/${version}/Changelog.md";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "svgbob";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/svgcleaner/default.nix b/nixpkgs/pkgs/tools/graphics/svgcleaner/default.nix
new file mode 100644
index 000000000000..1ec42817456a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/svgcleaner/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "SVGCleaner";
+  version = "unstable-2021-08-30";
+
+  src = fetchFromGitHub {
+    owner = "RazrFalcon";
+    repo = pname;
+    rev = "575eac74400a5ac45c912b144f0c002aa4a0135f";
+    sha256 = "sha256-pRDRRVb8Lyna8X/PEjS9tS5dbG4g7vyMCU5AqPlpxec=";
+  };
+
+  cargoSha256 = "sha256-SZWmJGiCc/FevxMWJpa8xKVz/rbll52oNbFtqPpz74g=";
+
+  meta = with lib; {
+    description = "Clean and optimize SVG files from unnecessary data";
+    homepage = "https://github.com/RazrFalcon/SVGCleaner";
+    changelog = "https://github.com/RazrFalcon/svgcleaner/releases";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ yuu ];
+    mainProgram = "svgcleaner";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/syntex/default.nix b/nixpkgs/pkgs/tools/graphics/syntex/default.nix
new file mode 100644
index 000000000000..b149333f2eac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/syntex/default.nix
@@ -0,0 +1,33 @@
+{lib, stdenv, fetchFromGitHub, mono}:
+stdenv.mkDerivation rec {
+  pname = "syntex";
+  version = "0.0pre20160915";
+  src = fetchFromGitHub {
+    owner = "mxgmn";
+    repo = "SynTex";
+    rev = "f499a7c8112be4a63eb44843ba72957c2c9a04db";
+    sha256 = "13fz6frlxsdz8qq94fsvim27cd5klmdsax5109yxm9175vgvpa0a";
+  };
+  buildPhase = ''
+    mcs *.cs -out:syntex.exe -r:System.Drawing
+    grep -m1 -B999 '^[*][/]' SynTex.cs > COPYING.MIT
+  '';
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/doc/syntex,share/syntex}
+    cp README.md COPYING.MIT "$out"/share/doc/syntex
+    cp syntex.exe "$out"/bin
+    cp -r [Ss]amples samples.xml "$out/share/syntex"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/syntex"
+    echo "chmod u+w ." >> "$out/bin/syntex"
+    echo "'${mono}/bin/mono' '$out/bin/syntex.exe' \"\$@\"" >>  "$out/bin/syntex"
+    chmod a+x "$out/bin/syntex"
+  '';
+  buildInputs = [mono];
+  meta = {
+    description = "Texture synthesis from examples";
+    license = lib.licenses.mit;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/termimage/default.nix b/nixpkgs/pkgs/tools/graphics/termimage/default.nix
new file mode 100644
index 000000000000..3703d5a993e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/termimage/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, installShellFiles
+, ronn
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "termimage";
+  version = "1.2.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-1FOPe466GqQfiIpsQT9DJn+FupI2vy9b4+7p31ceY6M=";
+  };
+
+  cargoHash = "sha256-Up6wvkZJ4yLrXp/2sEAv5RqGbhLOQPNHO2vEy2Vhy+E=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    ronn
+  ];
+
+  postInstall = ''
+    ronn --roff --organization="termimage developers" termimage.md
+    installManPage termimage.1
+  '';
+
+  meta = with lib; {
+    description = "Display images in your terminal";
+    homepage = "https://github.com/nabijaczleweli/termimage";
+    changelog = "https://github.com/nabijaczleweli/termimage/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "termimage";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/textplots/default.nix b/nixpkgs/pkgs/tools/graphics/textplots/default.nix
new file mode 100644
index 000000000000..79787ec7e7d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/textplots/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "textplots";
+  version = "0.8.5";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-83EAe6O8ETsuGJ5MK6kt68OnJL+r+BAYkFzvzlxHyp4=";
+  };
+
+  cargoHash = "sha256-O47b00PGRXTWWxywitS2V15gXahzgjNvFKUvE+VMXaM=";
+
+  buildFeatures = [ "tool" ];
+
+  meta = with lib; {
+    description = "Terminal plotting written in Rust";
+    homepage = "https://github.com/loony-bean/textplots-rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "textplots";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/texture-synthesis/Cargo.lock b/nixpkgs/pkgs/tools/graphics/texture-synthesis/Cargo.lock
new file mode 100644
index 000000000000..424314c1ee49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/texture-synthesis/Cargo.lock
@@ -0,0 +1,1194 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "bstr"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe"
+
+[[package]]
+name = "bytemuck"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bed57e2090563b83ba8f83366628ce535a7584c9afa4c9fc0612a03925c6df58"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "cast"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0"
+dependencies = [
+ "rustc_version",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "console"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3993e6445baa160675931ec041a5e03ca84b9c6e32a056150d3aa2bdda0a1f45"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "regex",
+ "terminal_size",
+ "unicode-width",
+ "winapi",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "criterion"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab327ed7354547cc2ef43cbe20ef68b988e70b4b593cbd66a2a61733123a3d23"
+dependencies = [
+ "atty",
+ "cast",
+ "clap",
+ "criterion-plot",
+ "csv",
+ "itertools 0.10.0",
+ "lazy_static",
+ "num-traits",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_cbor",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e022feadec601fba1649cfa83586381a4ad31c6bf3a9ab7d408118b05dd9889d"
+dependencies = [
+ "cast",
+ "itertools 0.9.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "lazy_static",
+]
+
+[[package]]
+name = "csv"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+dependencies = [
+ "bstr",
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "deflate"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "winapi",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd3aec53de10fe96d7d8c565eb17f2c687bb5518a2ec453b5b1252964526abe0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crc32fast",
+ "libc",
+ "miniz_oxide 0.4.4",
+]
+
+[[package]]
+name = "half"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3"
+
+[[package]]
+name = "heck"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "image"
+version = "0.23.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ce04077ead78e39ae8610ad26216aed811996b043d47beed5090db674f9e9b5"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "jpeg-decoder",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+ "png",
+]
+
+[[package]]
+name = "img_hash"
+version = "2.1.0"
+source = "git+https://github.com/EmbarkStudios/img_hash.git?rev=c40da78#c40da78946840c810543e6ec53967afb7adafd74"
+dependencies = [
+ "bit-vec",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7baab56125e25686df467fe470785512329883aab42696d661247aca2a2896e4"
+dependencies = [
+ "console",
+ "lazy_static",
+ "number_prefix",
+ "regex",
+]
+
+[[package]]
+name = "itertools"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37d572918e350e82412fe766d24b15e6682fb2ed2bbe018280caa810397cb319"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
+
+[[package]]
+name = "js-sys"
+version = "0.3.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc15e39392125075f60c95ba416f5381ff6c3a948ff02ab12464715adf56c821"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8916b1f6ca17130ec6568feccee27c156ad12037880833a3b842a823236502e7"
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+
+[[package]]
+name = "memoffset"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc14fc54a812b4472b4113facc3e44d099fbc0ea2ce0551fa5c703f8edfbfd38"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minifb"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b18d2987dac6afdd7f6d81101a3b422b7da3e6799d7f11863ad006d8ccd562b2"
+dependencies = [
+ "cast",
+ "cc",
+ "orbclient",
+ "raw-window-handle",
+ "time",
+ "winapi",
+ "x11-dl",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
+dependencies = [
+ "adler32",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
+dependencies = [
+ "adler",
+ "autocfg",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "orbclient"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c976c5018e7f1db4359616d8b31ef8ae7d9649b11803c0b38fff67fd2999fc8"
+dependencies = [
+ "libc",
+ "raw-window-handle",
+ "redox_syscall",
+ "sdl2",
+ "sdl2-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "pdqselect"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec91767ecc0a0bbe558ce8c9da33c068066c57ecc8bb8477ef8c1ad3ef77c27"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "plotters"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45ca0ae5f169d0917a7c7f5a9c1a3d3d9598f18f529dd2b8373ed988efea307a"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b07fffcddc1cb3a1de753caa4e4df03b79922ba43cf882acc1bdd7e8df9f4590"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b38a02e23bd9604b842a812063aec4ef702b57989c37b655254bb61c471ad211"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "png"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "deflate",
+ "miniz_oxide 0.3.7",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+
+[[package]]
+name = "rand_pcg"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7de198537002b913568a3847e53535ace266f93526caf5c360ec41d72c5787f0"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "rayon"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "lazy_static",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"
+
+[[package]]
+name = "rstar"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0650eaaa56cbd1726fd671150fce8ac6ed9d9a25d1624430d7ee9d196052f6b6"
+dependencies = [
+ "num-traits",
+ "pdqselect",
+]
+
+[[package]]
+name = "rustc-serialize"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sdl2"
+version = "0.34.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcbb85f4211627a7291c83434d6bbfa723e28dcaa53c7606087e3c61929e4b9c"
+dependencies = [
+ "bitflags",
+ "lazy_static",
+ "libc",
+ "raw-window-handle",
+ "sdl2-sys",
+]
+
+[[package]]
+name = "sdl2-sys"
+version = "0.34.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d81feded049b9c14eceb4a4f6d596a98cebbd59abdba949c5552a015466d33"
+dependencies = [
+ "cfg-if 0.1.10",
+ "cmake",
+ "flate2",
+ "libc",
+ "tar",
+ "unidiff",
+ "version-compare",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.125"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171"
+
+[[package]]
+name = "serde_cbor"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622"
+dependencies = [
+ "half",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.125"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c"
+dependencies = [
+ "clap",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0bcfbd6a598361fda270d82469fff3d65089dc33e175c9a131f7b4cd395f228"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ca8ced750734db02076f44132d802af0b33b09942331f4459dde8636fd2406"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "texture-synthesis"
+version = "0.8.1"
+dependencies = [
+ "criterion",
+ "crossbeam-utils",
+ "image",
+ "img_hash",
+ "num_cpus",
+ "rand",
+ "rand_pcg",
+ "rstar",
+]
+
+[[package]]
+name = "texture-synthesis-cli"
+version = "0.8.2"
+dependencies = [
+ "atty",
+ "indicatif",
+ "minifb",
+ "structopt",
+ "texture-synthesis",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "time"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+dependencies = [
+ "libc",
+ "wasi",
+ "winapi",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+
+[[package]]
+name = "unidiff"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8a62719acf1933bfdbeb73a657ecd9ecece70b405125267dd549e2e2edc232c"
+dependencies = [
+ "encoding_rs",
+ "lazy_static",
+ "regex",
+]
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version-compare"
+version = "0.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1"
+
+[[package]]
+name = "version_check"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fe8f61dba8e5d645a4d8132dc7a0a66861ed5e1045d2c0ed940fab33bac0fbe"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046ceba58ff062da072c7cb4ba5b22a37f00a302483f7e2a6cdc18fedbdc1fd3"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9aa01d36cda046f797c57959ff5f3c615c9cc63997a8d545831ec7976819b"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96eb45c1b2ee33545a813a92dbb53856418bf7eb54ab34f7f7ff1448a5b3735d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7148f4696fb4960a346eaa60bbfb42a1ac4ebba21f750f75fc1375b098d5ffa"
+
+[[package]]
+name = "web-sys"
+version = "0.3.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59fe19d70f5dacc03f6e46777213facae5ac3801575d56ca6cbd4c93dcd12310"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "x11-dl"
+version = "2.18.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "maybe-uninit",
+ "pkg-config",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c"
+dependencies = [
+ "libc",
+]
diff --git a/nixpkgs/pkgs/tools/graphics/texture-synthesis/default.nix b/nixpkgs/pkgs/tools/graphics/texture-synthesis/default.nix
new file mode 100644
index 000000000000..7122450587a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/texture-synthesis/default.nix
@@ -0,0 +1,31 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "texture-synthesis";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "embarkstudios";
+    repo = pname;
+    rev = version;
+    sha256 = "0n1wbxcnxb7x5xwakxdzq7kg1fn0c48i520j03p7wvm5x97vm5h4";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "img_hash-2.1.0" = "sha256-Ba26n//bZweYvb5p47U209dHrsDHKHLQ3YEHbKT+hjE=";
+    };
+  };
+
+  # tests fail for unknown reasons on aarch64-darwin
+  doCheck = !(stdenv.isDarwin && stdenv.isAarch64);
+
+  meta = with lib; {
+    description = "Example-based texture synthesis written in Rust";
+    homepage = "https://github.com/embarkstudios/texture-synthesis";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "texture-synthesis";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/timg/default.nix b/nixpkgs/pkgs/tools/graphics/timg/default.nix
new file mode 100644
index 000000000000..5811cbba25e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/timg/default.nix
@@ -0,0 +1,64 @@
+{ cmake
+, fetchFromGitHub
+, ffmpeg
+, graphicsmagick
+, lib
+, libdeflate
+, libexif
+, libjpeg
+, libsixel
+, openslide
+, poppler
+, librsvg
+, cairo
+, pkg-config
+, stb
+, qoi
+, stdenv
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "timg";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "hzeller";
+    repo = "timg";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-rTqToWgCPQeRYnMUmhPd/lJPX6L9PstFs1NczyecaB0=";
+  };
+
+  buildInputs = [
+    ffmpeg
+    graphicsmagick
+    libdeflate
+    libexif
+    libjpeg
+    libsixel
+    openslide
+    poppler
+    librsvg
+    cairo
+    qoi.dev
+    stb
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  cmakeFlags = [
+    "-DTIMG_VERSION_FROM_GIT=Off"
+    "-DWITH_VIDEO_DECODING=On"
+    "-DWITH_VIDEO_DEVICE=On"
+    "-DWITH_OPENSLIDE_SUPPORT=On"
+    "-DWITH_LIBSIXEL=On"
+  ];
+
+  meta = {
+    description = "A terminal image and video viewer";
+    homepage = "https://timg.sh/";
+    license = lib.licenses.gpl2Only;
+    mainProgram = "timg";
+    maintainers = with lib.maintainers; [ hzeller ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/twilight/default.nix b/nixpkgs/pkgs/tools/graphics/twilight/default.nix
new file mode 100644
index 000000000000..52941f7b96d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/twilight/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub
+, libGL, libGLU, freeglut, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "twilight";
+  version = "unstable-2018-04-19";
+
+  src = fetchFromGitHub {
+    owner = "tweakoz";
+    repo = "twilight";
+    rev = "43f21d15c2a8923c9d707bdf3789f480bfd4b36d";
+    sha256 = "0mmmi4jj8yd8wnah6kx5na782sjycszgzim33dfalr0ph361m4pz";
+  };
+
+  buildInputs = [ libGL libGLU freeglut libX11 ];
+
+  installPhase = ''
+    install -Dm755 twilight $out/bin/twilight
+  '';
+
+  meta = with lib; {
+    description = "Redo of IRIX twilight backdrop in old school OpenGL";
+    homepage = src.meta.homepage;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    mainProgram = "twilight";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ueberzugpp/default.nix b/nixpkgs/pkgs/tools/graphics/ueberzugpp/default.nix
new file mode 100644
index 000000000000..815983126451
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ueberzugpp/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, cli11
+, openssl
+, zeromq
+, cppzmq
+, tbb_2021_8
+, spdlog
+, libsodium
+, fmt
+, vips
+, nlohmann_json
+, libsixel
+, microsoft-gsl
+, chafa
+, enableOpencv ? stdenv.isLinux
+, opencv
+, enableWayland ? stdenv.isLinux
+, extra-cmake-modules
+, wayland
+, wayland-protocols
+, enableX11 ? stdenv.isLinux
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ueberzugpp";
+  version = "2.9.2";
+
+  src = fetchFromGitHub {
+    owner = "jstkdng";
+    repo = "ueberzugpp";
+    rev = "v${version}";
+    hash = "sha256-yIohpJRytmwt+6DLCWpmBiuCm9GcCHsGmpTI64/3d8U=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+    zeromq
+    cppzmq
+    tbb_2021_8
+    spdlog
+    libsodium
+    fmt
+    vips
+    nlohmann_json
+    libsixel
+    microsoft-gsl
+    chafa
+    cli11
+  ] ++ lib.optionals enableOpencv [
+    opencv
+  ] ++ lib.optionals enableWayland [
+    extra-cmake-modules
+    wayland
+    wayland-protocols
+  ] ++ lib.optionals enableX11 [
+    xorg.libX11
+    xorg.xcbutilimage
+  ];
+
+  cmakeFlags = lib.optionals (!enableOpencv) [
+    "-DENABLE_OPENCV=OFF"
+  ] ++ lib.optionals enableWayland [
+    "-DENABLE_WAYLAND=ON"
+  ] ++ lib.optionals (!enableX11) [
+    "-DENABLE_X11=OFF"
+  ];
+
+  # error: aligned deallocation function of type 'void (void *, std::align_val_t) noexcept' is only available on macOS 10.14 or newer
+  preBuild = lib.optionalString (stdenv.isDarwin && lib.versionOlder stdenv.hostPlatform.darwinMinVersion "11.0") ''
+    export MACOSX_DEPLOYMENT_TARGET=10.14
+  '';
+
+  meta = with lib; {
+    description = "Drop in replacement for ueberzug written in C++";
+    homepage = "https://github.com/jstkdng/ueberzugpp";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ aleksana wegank ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/unpaper/default.nix b/nixpkgs/pkgs/tools/graphics/unpaper/default.nix
new file mode 100644
index 000000000000..c59353af5a11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/unpaper/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchurl
+
+# build
+, meson
+, ninja
+, pkg-config
+
+# docs
+, sphinx
+
+# runtime
+, buildPackages
+, ffmpeg_5-headless
+
+# tests
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "unpaper";
+  version = "7.0.0";
+
+  src = fetchurl {
+    url = "https://www.flameeyes.eu/files/${pname}-${version}.tar.xz";
+    hash = "sha256-JXX7vybCJxnRy4grWWAsmQDH90cRisEwiD9jQZvkaoA=";
+  };
+
+  outputs = [
+    "out"
+    "man"
+  ];
+
+  nativeBuildInputs = [
+    buildPackages.libxslt.bin
+    meson
+    ninja
+    pkg-config
+    sphinx
+  ];
+
+  buildInputs = [
+    ffmpeg_5-headless
+  ];
+
+  passthru.tests = {
+    inherit (nixosTests) paperless;
+  };
+
+  meta = with lib; {
+    homepage = "https://www.flameeyes.eu/projects/unpaper";
+    changelog = "https://github.com/unpaper/unpaper/blob/unpaper-${version}/NEWS";
+    description = "Post-processing tool for scanned sheets of paper";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    mainProgram = "unpaper";
+    maintainers = [ maintainers.rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vips/default.nix b/nixpkgs/pkgs/tools/graphics/vips/default.nix
new file mode 100644
index 000000000000..5c59971f955c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vips/default.nix
@@ -0,0 +1,139 @@
+{ lib
+, stdenv
+, pkg-config
+, glib
+, libxml2
+, expat
+, ApplicationServices
+, Foundation
+, python3
+, fetchFromGitHub
+, meson
+, ninja
+, gtk-doc
+, docbook-xsl-nons
+, gobject-introspection
+  # Optional dependencies
+, libjpeg
+, libexif
+, librsvg
+, poppler
+, libtiff
+, fftw
+, lcms2
+, libspng
+, libimagequant
+, imagemagick
+, pango
+, matio
+, cfitsio
+, libwebp
+, openexr
+, openjpeg
+, libjxl
+, openslide
+, libheif
+, cgif
+, libarchive
+, libhwy
+, testers
+, nix-update-script
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "vips";
+  version = "8.15.1";
+
+  outputs = [ "bin" "out" "man" "dev" ] ++ lib.optionals (!stdenv.isDarwin) [ "devdoc" ];
+
+  src = fetchFromGitHub {
+    owner = "libvips";
+    repo = "libvips";
+    rev = "refs/tags/v${finalAttrs.version}";
+    hash = "sha256-0zfYpOawH7XnTH9k8BdNDtZEKpYUlCXp7GY+fdXalsE=";
+    # Remove unicode file names which leads to different checksums on HFS+
+    # vs. other filesystems because of unicode normalisation.
+    postFetch = ''
+      rm -r $out/test/test-suite/images/
+    '';
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    docbook-xsl-nons
+    gobject-introspection
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    gtk-doc
+  ];
+
+  buildInputs = [
+    glib
+    libxml2
+    expat
+    (python3.withPackages (p: [ p.pycairo ]))
+    # Optional dependencies
+    libjpeg
+    libexif
+    librsvg
+    poppler
+    libtiff
+    fftw
+    lcms2
+    libspng
+    libimagequant
+    imagemagick
+    pango
+    matio
+    cfitsio
+    libwebp
+    openexr
+    openjpeg
+    libjxl
+    openslide
+    libheif
+    cgif
+    libarchive
+    libhwy
+  ] ++ lib.optionals stdenv.isDarwin [ ApplicationServices Foundation ];
+
+  # Required by .pc file
+  propagatedBuildInputs = [
+    glib
+  ];
+
+  mesonFlags = [
+    "-Dpdfium=disabled"
+    "-Dnifti=disabled"
+  ]
+  ++ lib.optional (!stdenv.isDarwin) "-Dgtk_doc=true"
+  ++ lib.optional (imagemagick == null) "-Dmagick=disabled"
+  ;
+
+  passthru = {
+    tests = {
+      pkg-config = testers.hasPkgConfigModules {
+        package = finalAttrs.finalPackage;
+      };
+      version = testers.testVersion {
+        package = finalAttrs.finalPackage;
+        command = "vips --version";
+      };
+    };
+    updateScript = nix-update-script {
+      extraArgs = [ "--version-regex" "v([0-9.]+)" ];
+    };
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/libvips/libvips/blob/${finalAttrs.src.rev}/ChangeLog";
+    homepage = "https://www.libvips.org/";
+    description = "Image processing system for large images";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ kovirobi anthonyroussel ];
+    pkgConfigModules = [ "vips" "vips-cpp" ];
+    platforms = platforms.unix;
+    mainProgram = "vips";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/viu/default.nix b/nixpkgs/pkgs/tools/graphics/viu/default.nix
new file mode 100644
index 000000000000..83c97376676a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/viu/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, libsixel
+, withSixel ? false
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "viu";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "atanunq";
+    repo = "viu";
+    rev = "v${version}";
+    sha256 = "sha256-lAuIl25368Gv717a8p2So1o1VMDJJAOlDdqfItYizo4=";
+  };
+
+  # tests need an interactive terminal
+  doCheck = false;
+
+  cargoSha256 = "sha256-ildtjaYGbrQacJOdGDVwFv+kod+vZHqukWN6ARtJqI4=";
+
+  buildFeatures = lib.optional withSixel "sixel";
+  buildInputs = lib.optional withSixel libsixel;
+
+  meta = with lib; {
+    description = "A command-line application to view images from the terminal written in Rust";
+    homepage = "https://github.com/atanunq/viu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ chuangzhu ];
+    mainProgram = "viu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vkbasalt-cli/default.nix b/nixpkgs/pkgs/tools/graphics/vkbasalt-cli/default.nix
new file mode 100644
index 000000000000..efe704ace293
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vkbasalt-cli/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, python3Packages
+, fetchFromGitLab
+, vkbasalt
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "vkbasalt-cli";
+  version = "3.1.1";
+
+  src = fetchFromGitLab {
+    owner = "TheEvilSkeleton";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-4MFqndnvwAsqyer9kMNuCZFP/Xdl7W//AyCe7n83328=";
+  };
+
+  postPatch = ''
+    substituteInPlace vkbasalt/lib.py \
+      --replace /usr ${vkbasalt}
+  '';
+
+  pythonImportsCheck = [ "vkbasalt.lib" ];
+
+  meta = with lib; {
+    description = "Command-line utility for vkBasalt";
+    homepage = "https://gitlab.com/TheEvilSkeleton/vkbasalt-cli";
+    license = with licenses; [ lgpl3Only gpl3Only ];
+    maintainers = with maintainers; [ martfont ];
+    mainProgram = "vkbasalt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vkbasalt/default.nix b/nixpkgs/pkgs/tools/graphics/vkbasalt/default.nix
new file mode 100644
index 000000000000..937166ae9f46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vkbasalt/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, glslang
+, meson
+, ninja
+, pkg-config
+, libX11
+, spirv-headers
+, vulkan-headers
+, vkbasalt32
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "vkbasalt";
+  version = "0.3.2.10";
+
+  src = fetchFromGitHub {
+    owner = "DadSchoorse";
+    repo = "vkBasalt";
+    rev = "refs/tags/v${finalAttrs.version}";
+    hash = "sha256-GC6JKYnsfcUBg+CX6v7MyE4FeLmjadFwighaiyureDg=";
+  };
+
+  nativeBuildInputs = [ glslang meson ninja pkg-config ];
+  buildInputs = [ libX11 spirv-headers vulkan-headers ];
+  mesonFlags = [ "-Dappend_libdir_vkbasalt=true" ];
+
+  postInstall = lib.optionalString (stdenv.hostPlatform.system == "x86_64-linux") ''
+    install -Dm 644 $src/config/vkBasalt.conf $out/share/vkBasalt/vkBasalt.conf
+    # Include 32bit layer in 64bit build
+    ln -s ${vkbasalt32}/share/vulkan/implicit_layer.d/vkBasalt.json \
+      "$out/share/vulkan/implicit_layer.d/vkBasalt32.json"
+  '';
+
+  # We need to give the different layers separate names or else the loader
+  # might try the 32-bit one first, fail and not attempt to load the 64-bit
+  # layer under the same name.
+  postFixup = ''
+    substituteInPlace "$out/share/vulkan/implicit_layer.d/vkBasalt.json" \
+      --replace "VK_LAYER_VKBASALT_post_processing" "VK_LAYER_VKBASALT_post_processing_${toString stdenv.hostPlatform.parsed.cpu.bits}"
+  '';
+
+  meta = with lib; {
+    description = "A Vulkan post processing layer for Linux";
+    homepage = "https://github.com/DadSchoorse/vkBasalt";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/vkdisplayinfo/default.nix b/nixpkgs/pkgs/tools/graphics/vkdisplayinfo/default.nix
new file mode 100644
index 000000000000..3a88b2e21147
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vkdisplayinfo/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, meson
+, ninja
+, vulkan-loader
+, vulkan-headers
+, fetchFromGitHub
+}:
+stdenv.mkDerivation rec {
+  pname = "vkdisplayinfo";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "ChristophHaag";
+    repo = "vkdisplayinfo";
+    rev = version;
+    hash = "sha256-n6U7T5aOYTpgWE2WGPBPHtQKzitf9PxAoXJNWyz4rYw=";
+  };
+
+  postInstall = ''
+    install vkdisplayinfo -Dm755 -t $out/bin
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    ($out/bin/vkdisplayinfo 2>&1 || true) | grep -q vkdisplayinfo
+    runHook postInstallCheck
+  '';
+
+  nativeBuildInputs = [
+    meson
+    ninja
+  ];
+
+  buildInputs = [
+    vulkan-loader
+    vulkan-headers
+  ];
+
+  meta = with lib; {
+    description = "Print displays and modes enumerated with the Vulkan function vkGetPhysicalDeviceDisplayPropertiesKHR";
+    homepage = "https://github.com/ChristophHaag/vkdisplayinfo";
+    platforms = platforms.linux;
+    license = licenses.boost;
+    maintainers = [ maintainers.LunNova ];
+    mainProgram = "vkdisplayinfo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vkmark/default.nix b/nixpkgs/pkgs/tools/graphics/vkmark/default.nix
new file mode 100644
index 000000000000..e6b72eb20702
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vkmark/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, meson
+, ninja
+, vulkan-headers
+, vulkan-loader
+, mesa
+, wayland-protocols
+, wayland
+, glm
+, assimp
+, libxcb
+, xcbutilwm
+, unstableGitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vkmark";
+  version = "2017.08-unstable-2023-04-12";
+
+  src = fetchFromGitHub {
+    owner = "vkmark";
+    repo = "vkmark";
+    rev = "ab6e6f34077722d5ae33f6bd40b18ef9c0e99a15";
+    sha256 = "sha256-X1Y2U1aJymKrv3crJLN7tvXHG2W+w0W5gB2g00y4yvc=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [
+    vulkan-headers
+    vulkan-loader
+    mesa
+    glm
+    assimp
+    libxcb
+    xcbutilwm
+    wayland
+    wayland-protocols
+  ];
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    description = "An extensible Vulkan benchmarking suite";
+    homepage = "https://github.com/vkmark/vkmark";
+    license = with licenses; [ lgpl21Plus ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ muscaln ];
+    mainProgram = "vkmark";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vulkan-caps-viewer/default.nix b/nixpkgs/pkgs/tools/graphics/vulkan-caps-viewer/default.nix
new file mode 100644
index 000000000000..f5962d9aa6c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vulkan-caps-viewer/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, qmake
+, vulkan-loader
+, wayland
+, wrapQtAppsHook
+, x11Support ? true
+, qtx11extras
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vulkan-caps-viewer";
+  version = "3.33";
+
+  src = fetchFromGitHub {
+    owner = "SaschaWillems";
+    repo = "VulkanCapsViewer";
+    rev = version;
+    hash = "sha256-eKUgsT3KDua+whO0JdtnniKqoRmBt58LELeUz24goPM=";
+    # Note: this derivation strictly requires vulkan-header to be the same it was developed against.
+    # To help us, they've put it in a git-submodule.
+    # The result will work with any vulkan-loader version.
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    qmake
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    vulkan-loader
+    wayland
+  ] ++ lib.lists.optionals x11Support [ qtx11extras ];
+
+  patchPhase = ''
+    substituteInPlace vulkanCapsViewer.pro \
+      --replace '/usr/' "/"
+  '';
+
+  qmakeFlags = [
+    "CONFIG+=release"
+  ];
+
+  installFlags = [ "INSTALL_ROOT=$(out)" ];
+
+  meta = with lib; {
+    mainProgram = "vulkanCapsViewer";
+    description = "Vulkan hardware capability viewer";
+    longDescription = ''
+      Client application to display hardware implementation details for GPUs supporting the Vulkan API by Khronos.
+      The hardware reports can be submitted to a public online database that allows comparing different devices, browsing available features, extensions, formats, etc.
+    '';
+    homepage = "https://vulkan.gpuinfo.org/";
+    platforms = platforms.unix;
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ pedrohlc ];
+    changelog = "https://github.com/SaschaWillems/VulkanCapsViewer/releases/tag/${version}";
+    # never built on aarch64-darwin, x86_64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vulkan-cts/default.nix b/nixpkgs/pkgs/tools/graphics/vulkan-cts/default.nix
new file mode 100644
index 000000000000..497fd13df341
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vulkan-cts/default.nix
@@ -0,0 +1,123 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchurl
+, runCommand
+, cmake
+, ffmpeg_4
+, libdrm
+, libglvnd
+, libffi
+, libpng
+, libX11
+, libXau
+, libXdmcp
+, libxcb
+, makeWrapper
+, mesa
+, ninja
+, pkg-config
+, python3
+, vulkan-loader
+, wayland
+, wayland-protocols
+, wayland-scanner
+, zlib
+}:
+let
+  renderdoc = fetchurl {
+    url = "https://raw.githubusercontent.com/baldurk/renderdoc/v1.1/renderdoc/api/app/renderdoc_app.h";
+    hash = "sha256-57XwqlsbDq3GOhxiTAyn9a8TOqhX1qQnGw7z0L22ho4=";
+  };
+
+  # The build system expects all these dependencies inside the external folder and
+  # does not search for system-wide installations.
+  # It also expects the version specified in the repository, which can be incompatible
+  # with the version in nixpkgs (e.g. for SPIRV-Headers), so we don't want to patch in our packages.
+  # The revisions are extracted from https://github.com/KhronosGroup/VK-GL-CTS/blob/main/external/fetch_sources.py#L290
+  # with the vk-cts-sources.py script.
+  sources = import ./sources.nix { inherit fetchurl fetchFromGitHub; };
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "vulkan-cts";
+  version = "1.3.7.3";
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "VK-GL-CTS";
+    rev = "${finalAttrs.pname}-${finalAttrs.version}";
+    hash = "sha256-YtfUnrqWZwPMkLr3ovJz8Xr2ES1piW0yB+rBAaiQKoQ=";
+  };
+
+  prePatch = ''
+    mkdir -p external/renderdoc/src
+
+    cp -r ${renderdoc} external/renderdoc/src/renderdoc_app.h
+
+    ${sources.prePatch}
+
+    chmod u+w -R external
+  '';
+
+  buildInputs = [
+    ffmpeg_4
+    libdrm
+    libffi
+    libglvnd
+    libpng
+    libX11
+    libXau
+    libXdmcp
+    libxcb
+    wayland
+    wayland-protocols
+    zlib
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    ninja
+    pkg-config
+    python3
+    wayland-scanner
+  ];
+
+  cmakeFlags = [
+    # Fix cts cmake not coping with absolute install dirs
+    "-DCMAKE_INSTALL_BINDIR=bin"
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+    "-DCMAKE_INSTALL_INCLUDEDIR=include"
+
+    "-DWAYLAND_SCANNER=wayland-scanner"
+  ];
+
+  postInstall = ''
+    # Check that nothing was installed so far
+    ! test -e $out
+
+    mkdir -p $out/bin $out/archive-dir
+    cp -a external/vulkancts/modules/vulkan/deqp-vk external/vulkancts/modules/vulkan/deqp-vksc $out/bin/
+    cp -a external/vulkancts/modules/vulkan/vulkan $out/archive-dir/
+    cp -a external/vulkancts/modules/vulkan/vk-default $out/
+
+    wrapProgram $out/bin/deqp-vk \
+      --add-flags '--deqp-vk-library-path=${vulkan-loader}/lib/libvulkan.so' \
+      --add-flags "--deqp-archive-dir=$out/archive-dir"
+  '';
+
+  passthru.updateScript = ./update.sh;
+  passthru.tests.lavapipe = runCommand "vulkan-cts-tests-lavapipe" { nativeBuildInputs = [ finalAttrs.finalPackage ]; } ''
+    # Expand the wildcard to pick the existing architecture
+    export VK_ICD_FILENAMES=$(echo ${mesa.drivers}/share/vulkan/icd.d/lvp_icd.*.json)
+    deqp-vk -n dEQP-VK.api.smoke.triangle
+    touch $out
+  '';
+
+  meta = with lib; {
+    description = "Khronos Vulkan Conformance Tests";
+    homepage = "https://github.com/KhronosGroup/VK-GL-CTS/blob/main/external/vulkancts/README.md";
+    changelog = "https://github.com/KhronosGroup/VK-GL-CTS/releases/tag/${finalAttrs.pname}-${finalAttrs.version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Flakebi ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/vulkan-cts/sources.nix b/nixpkgs/pkgs/tools/graphics/vulkan-cts/sources.nix
new file mode 100644
index 000000000000..3e42e9c4ed7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vulkan-cts/sources.nix
@@ -0,0 +1,73 @@
+# Autogenerated from vk-cts-sources.py
+{ fetchurl, fetchFromGitHub }:
+rec {
+  ESExtractor = fetchFromGitHub {
+    owner = "Igalia";
+    repo = "ESExtractor";
+    rev = "v0.3.3";
+    hash = "sha256-qqhDv08cLQlLaEj0qfghByK+IohdvQdI2ePfUNFEArQ=";
+  };
+
+  amber = fetchFromGitHub {
+    owner = "google";
+    repo = "amber";
+    rev = "933ecb4d6288675a92eb1650e0f52b1d7afe8273";
+    hash = "sha256-v9z4gv/mTjaCkByZn6uDpMteQuIf0FzZXeKyoXfFjXo=";
+  };
+
+  glslang = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "glslang";
+    rev = "c5117b328afc86e16edff6ed6afe0fe7872a7cf3";
+    hash = "sha256-4SoET76fCfutttK00JGCKVQUn0ivGdTw6GhndvxbIDU=";
+  };
+
+  jsoncpp = fetchFromGitHub {
+    owner = "open-source-parsers";
+    repo = "jsoncpp";
+    rev = "9059f5cad030ba11d37818847443a53918c327b1";
+    hash = "sha256-m0tz8w8HbtDitx3Qkn3Rxj/XhASiJVkThdeBxIwv3WI=";
+  };
+
+  nvidia-video-samples = fetchFromGitHub {
+    owner = "Igalia";
+    repo = "vk_video_samples";
+    rev = "138bbe048221d315962ddf8413aa6a08cc62a381";
+    hash = "sha256-ftHhb5u3l7WbgEu6hHynBnvNbVOn5TFne915M17jiAQ=";
+  };
+
+  spirv-headers = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "SPIRV-Headers";
+    rev = "b8b9eb8640c8c0107ba580fbcb10f969022ca32c";
+    hash = "sha256-gcKwML5ItccAhX+QtR9G86h0JnaiVQEmOQzQpL005dg=";
+  };
+
+  spirv-tools = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "SPIRV-Tools";
+    rev = "bfc94f63a7adbcf8ae166f5f108ac9f69079efc0";
+    hash = "sha256-gju6hJSIWOswGnRxKeJZsU1jgp3HSZAf7wFRxswY+Js=";
+  };
+
+  vulkan-docs = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "Vulkan-Docs";
+    rev = "b9aad705f0d9e5e6734ac2ad671d5d1de57b05e0";
+    hash = "sha256-bJ2C1+zjvLiYp5A5AHTevFPU9Yka99imqLwH+uApuoY=";
+  };
+
+
+  prePatch = ''
+    mkdir -p external/ESExtractor external/amber external/glslang external/jsoncpp external/nvidia-video-samples external/spirv-headers external/spirv-tools external/vulkan-docs
+
+    cp -r ${ESExtractor} external/ESExtractor/src
+    cp -r ${amber} external/amber/src
+    cp -r ${glslang} external/glslang/src
+    cp -r ${jsoncpp} external/jsoncpp/src
+    cp -r ${nvidia-video-samples} external/nvidia-video-samples/src
+    cp -r ${spirv-headers} external/spirv-headers/src
+    cp -r ${spirv-tools} external/spirv-tools/src
+    cp -r ${vulkan-docs} external/vulkan-docs/src
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vulkan-cts/update.sh b/nixpkgs/pkgs/tools/graphics/vulkan-cts/update.sh
new file mode 100755
index 000000000000..300fe230264e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vulkan-cts/update.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p common-updater-scripts curl jq
+
+set -euo pipefail
+
+rawVersion="$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s "https://api.github.com/repos/KhronosGroup/VK-GL-CTS/releases" | jq -r  'map(select(.tag_name | startswith("vulkan-cts-"))) | .[0].tag_name')"
+basedir="$(git rev-parse --show-toplevel)"
+
+cd "$basedir"
+# Strip prefix
+version="$(echo "$rawVersion" | sed 's/vulkan-cts-//')"
+update-source-version vulkan-cts "$version"
+
+# Update imported sources
+tmpDir="$(mktemp -d)"
+trap "rm -rf $tmpDir" EXIT
+
+curl -s "https://raw.githubusercontent.com/KhronosGroup/VK-GL-CTS/$rawVersion/external/fetch_sources.py" -o "$tmpDir/fetch_sources.py"
+sed -i '/from ctsbuild.common import/d' "$tmpDir/fetch_sources.py"
+cd "$(dirname "$0")"
+PYTHONPATH="$tmpDir/" ./vk-cts-sources.py
diff --git a/nixpkgs/pkgs/tools/graphics/vulkan-cts/vk-cts-sources.py b/nixpkgs/pkgs/tools/graphics/vulkan-cts/vk-cts-sources.py
new file mode 100755
index 000000000000..f3e42bd82e7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vulkan-cts/vk-cts-sources.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p nix-prefetch-github -p git
+#nix-shell -I nixpkgs=../../../../ -i python3 -p "python3.withPackages (ps: with ps; [ nix-prefetch-github ])" -p "git"
+
+import json
+import re
+import subprocess
+import sys
+
+import fetch_sources
+
+def get_github_hash(owner, repo, revision):
+    result = subprocess.run(
+        ["nix-prefetch-github", owner, repo, "--json", "--rev", revision],
+        check=True,
+        capture_output=True,
+        text=True,
+    )
+    j = json.loads(result.stdout)
+    # Remove False values
+    return {k: v for k, v in j.items() if v}
+
+def main():
+    pkgs = fetch_sources.PACKAGES
+    pkgs.sort(key = lambda pkg: pkg.baseDir)
+    existing_sources = {}
+
+    # Fetch hashes from existing sources file
+    with open("sources.nix") as f:
+        existing_file = f.read()
+
+    source_re = re.compile("(?P<name>[^ ]+) = fetchFromGitHub[^\n]*\n"
+        "[^\n]+\n" # owner
+        "[^\n]+\n" # repo
+        " *rev = \"(?P<rev>[^\"]+)\";\n"
+        " *hash = \"(?P<hash>[^\"]+)\";\n"
+    )
+
+    for m in source_re.finditer(existing_file):
+        if m.group("hash").startswith("sha"):
+            print(f"Found {m.group('name')}: {m.group('rev')} -> {m.group('hash')}")
+            existing_sources[m.group("name")] = (m.group("rev"), m.group("hash"))
+    print()
+
+
+    # Write new sources file
+    with open("sources.nix", "w") as f:
+        f.write("# Autogenerated from vk-cts-sources.py\n")
+        f.write("{ fetchurl, fetchFromGitHub }:\n")
+        f.write("rec {");
+
+        github_re = re.compile("https://github.com/(?P<owner>[^/]+)/(?P<repo>[^/]+).git")
+
+        for pkg in pkgs:
+            if isinstance(pkg, fetch_sources.GitRepo):
+                ms = github_re.match(pkg.httpsUrl)
+
+                # Check for known hash
+                hash = None
+                if pkg.baseDir in existing_sources:
+                    existing_src = existing_sources[pkg.baseDir]
+                    if existing_src[0] == pkg.revision:
+                        hash = existing_src[1]
+
+                if hash is None:
+                    print(f"Fetching {pkg.baseDir}: {pkg.revision}")
+                    hash = get_github_hash(ms.group("owner"), ms.group("repo"), pkg.revision)["hash"]
+                    print(f"Got {pkg.baseDir}: {pkg.revision} -> {hash}")
+
+                f.write(f"\n  {pkg.baseDir} = fetchFromGitHub {{\n");
+                f.write(f"    owner = \"{ms.group('owner')}\";\n");
+                f.write(f"    repo = \"{ms.group('repo')}\";\n");
+                f.write(f"    rev = \"{pkg.revision}\";\n");
+                f.write(f"    hash = \"{hash}\";\n");
+                f.write(f"  }};\n");
+
+        f.write("\n\n  prePatch = ''\n");
+        f.write("    mkdir -p");
+        for pkg in pkgs:
+            if isinstance(pkg, fetch_sources.GitRepo):
+                f.write(f" external/{pkg.baseDir}")
+        f.write("\n\n");
+
+        for pkg in pkgs:
+            if isinstance(pkg, fetch_sources.GitRepo):
+                f.write(f"    cp -r ${{{pkg.baseDir}}} external/{pkg.baseDir}/{pkg.extractDir}\n");
+
+        f.write("  '';\n");
+
+        f.write("}\n");
+
+if __name__ == "__main__":
+    main()
diff --git a/nixpkgs/pkgs/tools/graphics/vulkan-extension-layer/default.nix b/nixpkgs/pkgs/tools/graphics/vulkan-extension-layer/default.nix
new file mode 100644
index 000000000000..336c31811aa2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vulkan-extension-layer/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, writeText, vulkan-headers, vulkan-utility-libraries,  jq, libX11, libXrandr, libxcb, wayland }:
+
+stdenv.mkDerivation rec {
+  pname = "vulkan-extension-layer";
+  version = "1.3.275.0";
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "Vulkan-ExtensionLayer";
+    rev = "vulkan-sdk-${version}";
+    hash = "sha256-zQycF3yKoa54KBUIuG1BqFGB00yc6oZQzdcDel2rXN0=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config jq ];
+
+  buildInputs = [ vulkan-headers vulkan-utility-libraries libX11 libXrandr libxcb wayland ];
+
+  # Help vulkan-loader find the validation layers
+  setupHook = writeText "setup-hook" ''
+    addToSearchPath XDG_DATA_DIRS @out@/share
+  '';
+
+  # Tests are not for gpu-less and headless environments
+  cmakeFlags = [
+    "-DBUILD_TESTS=false"
+  ];
+
+  # Include absolute paths to layer libraries in their associated
+  # layer definition json files.
+  preFixup = ''
+    for f in "$out"/share/vulkan/explicit_layer.d/*.json "$out"/share/vulkan/implicit_layer.d/*.json; do
+      jq <"$f" >tmp.json ".layer.library_path = \"$out/lib/\" + .layer.library_path"
+      mv tmp.json "$f"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Layers providing Vulkan features when native support is unavailable";
+    homepage = "https://github.com/KhronosGroup/Vulkan-ExtensionLayer/";
+    platforms = platforms.linux;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ expipiplus1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vulkan-helper/default.nix b/nixpkgs/pkgs/tools/graphics/vulkan-helper/default.nix
new file mode 100644
index 000000000000..93e6d7be0f04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vulkan-helper/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, vulkan-loader
+, addOpenGLRunpath
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vulkan-helper";
+  version = "unstable-2023-12-22";
+
+  src = fetchFromGitHub {
+    owner = "imLinguin";
+    repo = "vulkan-helper-rs";
+    rev = "04b290c92febcfd6293fcf4730ce3bba55cd9ce0";
+    hash = "sha256-2pLHnTn0gJKz4gfrR6h85LHOaZPrhIGYzQeci4Dzz2E=";
+  };
+
+  cargoSha256 = "sha256-OXMz1qu4/LDeQbwe7shhn2Eee15xKmBpWSsP0IbjoGM=";
+
+  nativeBuildInputs = [
+    addOpenGLRunpath
+  ];
+
+  postFixup = ''
+    patchelf --add-rpath ${vulkan-loader}/lib $out/bin/vulkan-helper
+    addOpenGLRunpath $out/bin/vulkan-helper
+  '';
+
+  meta = with lib; {
+    description = "A simple CLI app used to interface with basic Vulkan APIs";
+    homepage = "https://github.com/imLinguin/vulkan-helper-rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aidalgol ];
+    platforms = platforms.linux;
+    mainProgram = "vulkan-helper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vulkan-tools-lunarg/default.nix b/nixpkgs/pkgs/tools/graphics/vulkan-tools-lunarg/default.nix
new file mode 100644
index 000000000000..778b13655886
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vulkan-tools-lunarg/default.nix
@@ -0,0 +1,93 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, python3
+, jq
+, expat
+, jsoncpp
+, libX11
+, libXdmcp
+, libXrandr
+, libffi
+, libxcb
+, pkg-config
+, wayland
+, which
+, xcbutilkeysyms
+, xcbutilwm
+, valijson
+, vulkan-headers
+, vulkan-loader
+, vulkan-utility-libraries
+, writeText
+, libsForQt5
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vulkan-tools-lunarg";
+  version = "1.3.275.0";
+
+  src = fetchFromGitHub {
+   owner = "LunarG";
+   repo = "VulkanTools";
+   rev = "vulkan-sdk-${version}";
+   hash = "sha256-MEQX90HL90jyVBWWcvOF7QLzm1+fNE5TW3MWdK4w53M=";
+ };
+
+  nativeBuildInputs = [ cmake python3 jq which pkg-config libsForQt5.qt5.wrapQtAppsHook ];
+
+  buildInputs = [
+    expat
+    jsoncpp
+    libX11
+    libXdmcp
+    libXrandr
+    libffi
+    libxcb
+    valijson
+    vulkan-headers
+    vulkan-loader
+    vulkan-utility-libraries
+    wayland
+    xcbutilkeysyms
+    xcbutilwm
+    libsForQt5.qt5.qtbase
+    libsForQt5.qt5.qtwayland
+  ];
+
+  cmakeFlags = [
+    "-DVULKAN_HEADERS_INSTALL_DIR=${vulkan-headers}"
+  ];
+
+  preConfigure = ''
+    patchShebangs scripts/*
+    substituteInPlace via/CMakeLists.txt --replace "jsoncpp_static" "jsoncpp"
+  '';
+
+  # Include absolute paths to layer libraries in their associated
+  # layer definition json files.
+  preFixup = ''
+    for f in "$out"/etc/vulkan/explicit_layer.d/*.json "$out"/etc/vulkan/implicit_layer.d/*.json; do
+      jq <"$f" >tmp.json ".layer.library_path = \"$out/lib/\" + .layer.library_path"
+      mv tmp.json "$f"
+    done
+  '';
+
+  # Help vulkan-loader find the validation layers
+  setupHook = writeText "setup-hook" ''
+    export XDG_CONFIG_DIRS=@out@/etc''${XDG_CONFIG_DIRS:+:''${XDG_CONFIG_DIRS}}
+  '';
+
+  meta = with lib; {
+    description = "LunarG Vulkan Tools and Utilities";
+    longDescription = ''
+      Tools to aid in Vulkan development including useful layers, trace and
+      replay, and tests.
+    '';
+    homepage = "https://github.com/LunarG/VulkanTools";
+    platforms = platforms.linux;
+    license = licenses.asl20;
+    maintainers = [ maintainers.expipiplus1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vulkan-tools/default.nix b/nixpkgs/pkgs/tools/graphics/vulkan-tools/default.nix
new file mode 100644
index 000000000000..e084f7e2285b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vulkan-tools/default.nix
@@ -0,0 +1,96 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildPackages
+, cmake
+, pkg-config
+, python3
+, glslang
+, libffi
+, libX11
+, libXau
+, libxcb
+, libXdmcp
+, libXrandr
+, vulkan-headers
+, vulkan-loader
+, vulkan-volk
+, wayland
+, wayland-protocols
+, moltenvk
+, AppKit
+, Cocoa
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vulkan-tools";
+  version = "1.3.275.0";
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "Vulkan-Tools";
+    rev = "vulkan-sdk-${version}";
+    hash = "sha256-0sAwO8gXzpMst+7l7LS1oiDLo9E6otDktCti+v8jwDw=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    python3
+  ];
+
+  buildInputs = [
+    glslang
+    vulkan-headers
+    vulkan-loader
+    vulkan-volk
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    libffi
+    libX11
+    libXau
+    libxcb
+    libXdmcp
+    libXrandr
+    wayland
+    wayland-protocols
+  ] ++ lib.optionals stdenv.isDarwin [
+    moltenvk
+    moltenvk.dev
+    AppKit
+    Cocoa
+  ];
+
+  libraryPath = lib.strings.makeLibraryPath [ vulkan-loader ];
+
+  dontPatchELF = true;
+
+  env.PKG_CONFIG_WAYLAND_SCANNER_WAYLAND_SCANNER="${buildPackages.wayland-scanner}/bin/wayland-scanner";
+
+  cmakeFlags = [
+    # Don't build the mock ICD as it may get used instead of other drivers, if installed
+    "-DBUILD_ICD=OFF"
+    # vulkaninfo loads libvulkan using dlopen, so we have to add it manually to RPATH
+    "-DCMAKE_INSTALL_RPATH=${libraryPath}"
+    "-DPKG_CONFIG_EXECUTABLE=${buildPackages.pkg-config}/bin/${buildPackages.pkg-config.targetPrefix}pkg-config"
+    "-DGLSLANG_INSTALL_DIR=${glslang}"
+    # Hide dev warnings that are useless for packaging
+    "-Wno-dev"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-DMOLTENVK_REPO_ROOT=${moltenvk}/share/vulkan/icd.d"
+    # Don’t build the cube demo because it requires `ibtool`, which is not available in nixpkgs.
+    "-DBUILD_CUBE=OFF"
+  ];
+
+  meta = with lib; {
+    description = "Khronos official Vulkan Tools and Utilities";
+    longDescription = ''
+      This project provides Vulkan tools and utilities that can assist
+      development by enabling developers to verify their applications correct
+      use of the Vulkan API.
+    '';
+    homepage    = "https://github.com/KhronosGroup/Vulkan-Tools";
+    platforms   = platforms.unix;
+    license     = licenses.asl20;
+    maintainers = [ maintainers.ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix b/nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix
new file mode 100644
index 000000000000..dd2c15c8fda4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix
@@ -0,0 +1,47 @@
+{ cmake, fetchFromGitHub, makeWrapper, opencv4, lib, stdenv, ocl-icd, opencl-headers, OpenCL
+, config
+, cudaSupport ? config.cudaSupport, cudatoolkit ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "waifu2x-converter-cpp";
+  version = "5.3.4";
+
+  src = fetchFromGitHub {
+    owner = "DeadSix27";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0rv8bnyxz89za6gwk9gmdbaf3j7c1j52mip7h81rir288j35m84x";
+  };
+
+  patches = [
+    # Remove the hard-coded compiler on Darwin and use the one in stdenv.
+    ./waifu2x_darwin_build.diff
+  ];
+
+  buildInputs = [
+    opencv4
+  ] ++ lib.optional cudaSupport cudatoolkit
+    ++ lib.optional stdenv.isDarwin OpenCL
+    ++ lib.optionals stdenv.isLinux [ ocl-icd opencl-headers ];
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+
+  preFixup = lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/bin/waifu2x-converter-cpp --prefix LD_LIBRARY_PATH : "${ocl-icd}/lib"
+  '';
+
+  cmakeFlags = [
+    # file RPATH_CHANGE could not write new RPATH
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+  ];
+
+  meta = {
+    description = "Improved fork of Waifu2X C++ using OpenCL and OpenCV";
+    homepage = "https://github.com/DeadSix27/waifu2x-converter-cpp";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.xzfc ];
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+    mainProgram = "waifu2x-converter-cpp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/waifu2x_darwin_build.diff b/nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/waifu2x_darwin_build.diff
new file mode 100644
index 000000000000..2a6a83c5ee80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/waifu2x_darwin_build.diff
@@ -0,0 +1,15 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8b728b5..dedf8b6 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -71,10 +71,6 @@ message(STATUS "System is: ${CMAKE_SYSTEM_NAME} (${LOCAL_SYS_TYPE})")
+ 
+ ### Get binary paths for APPLE users
+ if(APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")
+-	set(CMAKE_C_COMPILER "/usr/local/opt/llvm/bin/clang")
+-	set(CMAKE_CXX_COMPILER "/usr/local/opt/llvm/bin/clang++")
+-	set(CMAKE_EXE_LINKER_FLAGS "-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib")
+-	set(CMAKE_SHARED_LINKER_FLAGS "-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib")
+ 	if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)
+ 		set(FILE_SYSTEM_LIB "c++fs")
+ 	endif()
diff --git a/nixpkgs/pkgs/tools/graphics/wallutils/000-add-nixos-dirs-to-default-wallpapers.patch b/nixpkgs/pkgs/tools/graphics/wallutils/000-add-nixos-dirs-to-default-wallpapers.patch
new file mode 100644
index 000000000000..77c55b35c96b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wallutils/000-add-nixos-dirs-to-default-wallpapers.patch
@@ -0,0 +1,26 @@
+From 2643b06889605e6096174fb48dcb64a49b252217 Mon Sep 17 00:00:00 2001
+From: Michael Weiss <dev.primeos@gmail.com>
+Date: Sun, 17 Nov 2019 20:30:08 +0100
+Subject: [PATCH] lscollection: Add NixOS paths to DefaultWallpaperDirectories
+
+---
+ collections.go | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/collections.go b/collections.go
+index be04d41..cc79c56 100644
+--- a/collections.go
++++ b/collections.go
+@@ -22,6 +22,9 @@ const (
+ 
+ // DefaultWallpaperDirectories lists the default locations to look for wallpapers
+ var DefaultWallpaperDirectories = []string{
++	"/run/current-system/sw/share/pixmaps",
++	"/run/current-system/sw/share/wallpapers",
++	"/run/current-system/sw/share/backgrounds",
+ 	"/usr/share/pixmaps",
+ 	"/usr/share/wallpapers",
+ 	"/usr/share/backgrounds",
+-- 
+2.23.0
+
diff --git a/nixpkgs/pkgs/tools/graphics/wallutils/default.nix b/nixpkgs/pkgs/tools/graphics/wallutils/default.nix
new file mode 100644
index 000000000000..796baa25b0bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wallutils/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, libX11
+, libXcursor
+, libXmu
+, libXpm
+, libheif
+, pkg-config
+, wayland
+, xbitmaps
+}:
+
+buildGoModule rec {
+  pname = "wallutils";
+  version = "5.12.7";
+
+  src = fetchFromGitHub {
+    owner = "xyproto";
+    repo = "wallutils";
+    rev = version;
+    hash = "sha256-7UqZr/DEiHDgg3XwvsKk/gc6FNtLh3aj5NWVz/A3J4o=";
+  };
+
+  vendorHash = null;
+
+  patches = [
+    ./000-add-nixos-dirs-to-default-wallpapers.patch
+  ];
+
+  excludedPackages = [
+    "./pkg/event/cmd" # Development tools
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libX11
+    libXcursor
+    libXmu
+    libXpm
+    libheif
+    wayland
+    xbitmaps
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  preCheck =
+    let skippedTests = [
+      "TestClosest" # Requiring Wayland or X
+      "TestEveryMinute" # Blocking
+      "TestNewSimpleEvent" # Blocking
+    ]; in
+    ''
+      export XDG_RUNTIME_DIR=`mktemp -d`
+
+      buildFlagsArray+=("-run" "[^(${builtins.concatStringsSep "|" skippedTests})]")
+    '';
+
+  meta = {
+    description = "Utilities for handling monitors, resolutions, and (timed) wallpapers";
+    inherit (src.meta) homepage;
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.AndersonTorres ];
+    inherit (wayland.meta) platforms;
+    badPlatforms = lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/wavefunctioncollapse/default.nix b/nixpkgs/pkgs/tools/graphics/wavefunctioncollapse/default.nix
new file mode 100644
index 000000000000..2c7ce4272458
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wavefunctioncollapse/default.nix
@@ -0,0 +1,33 @@
+{lib, stdenv, fetchFromGitHub, mono}:
+stdenv.mkDerivation rec {
+  pname = "wavefunctioncollapse";
+  version = "0.0pre20170130";
+  src = fetchFromGitHub {
+    owner = "mxgmn";
+    repo = "WaveFunctionCollapse";
+    rev = "ef660c037b1d7c4ebce66efc625af2bb2f2111c0";
+    sha256 = "1dr5fvdgn1jqqacby6rrqm951adx3jw0j70r5i8pmrqnnw482l8m";
+  };
+  buildPhase = ''
+    mcs *.cs -out:wavefunctioncollapse.exe -r:System.Drawing
+    grep -m1 -B999 '^[*][/]' Main.cs > COPYING.MIT
+  '';
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/doc/wavefunctioncollapse,share/wavefunctioncollapse}
+    cp README.md COPYING.MIT "$out"/share/doc/wavefunctioncollapse
+    cp wavefunctioncollapse.exe "$out"/bin
+    cp -r [Ss]amples samples.xml "$out/share/wavefunctioncollapse"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/wavefunctioncollapse"
+    echo "chmod u+w ." >> "$out/bin/wavefunctioncollapse"
+    echo "'${mono}/bin/mono' '$out/bin/wavefunctioncollapse.exe' \"\$@\"" >>  "$out/bin/wavefunctioncollapse"
+    chmod a+x "$out/bin/wavefunctioncollapse"
+  '';
+  buildInputs = [mono];
+  meta = {
+    description = "A generator of bitmaps that are locally similar to the input bitmap";
+    license = lib.licenses.mit;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/wdisplays/default.nix b/nixpkgs/pkgs/tools/graphics/wdisplays/default.nix
new file mode 100644
index 000000000000..9c7093b58f85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wdisplays/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, gtk3, libepoxy, wayland, wrapGAppsHook }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "wdisplays";
+  version = "1.1.1";
+
+  nativeBuildInputs = [ meson ninja pkg-config wrapGAppsHook ];
+
+  buildInputs = [ gtk3 libepoxy wayland ];
+
+  src = fetchFromGitHub {
+    owner = "artizirk";
+    repo = "wdisplays";
+    rev = finalAttrs.version;
+    sha256 = "sha256-dtvP930ChiDRT60xq6xBDU6k+zHnkrAkxkKz2FxlzRs=";
+  };
+
+  meta = with lib; {
+    description = "A graphical application for configuring displays in Wayland compositors";
+    homepage = "https://github.com/luispabon/wdisplays";
+    maintainers = with maintainers; [ lheckemann ma27 ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "wdisplays";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/graphics/welkin/default.nix b/nixpkgs/pkgs/tools/graphics/welkin/default.nix
new file mode 100644
index 000000000000..111abc745be5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/welkin/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchsvn, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "welkin";
+  version = "1.1";
+
+  src = fetchsvn {
+    url = "http://simile.mit.edu/repository/welkin";
+    rev = "9638";
+    sha256 = "1bqh3vam7y805xrmdw7k0ckcfwjg88wypxgv3njkkwyn7kxnfnqp";
+  };
+
+  sourceRoot = "${src.name}/tags/${version}";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,share}
+    cp -R . $out/share
+    cp $out/share/welkin.sh $out/bin/welkin
+    sed -e 's@\./lib/welkin\.jar@'"$out"'/share/lib/welkin.jar@' -i $out/bin/welkin
+    wrapProgram $out/bin/welkin \
+      --set JAVA_HOME ${jre}
+    chmod a+x $out/bin/welkin
+  '';
+
+  meta = {
+    description = "An RDF visualizer";
+    maintainers = with lib.maintainers; [
+      raskin
+    ];
+    hydraPlatforms = [];
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license = lib.licenses.free;
+    platforms = with lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/wgpu-utils/Cargo.lock b/nixpkgs/pkgs/tools/graphics/wgpu-utils/Cargo.lock
new file mode 100644
index 000000000000..5b4861ff0848
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wgpu-utils/Cargo.lock
@@ -0,0 +1,3588 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom 0.2.8",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
+
+[[package]]
+name = "arrayref"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ash"
+version = "0.37.2+1.3.238"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28bf19c1f0a470be5fbf7522a308a05df06610252c5bcf5143e1b23f629a9a03"
+dependencies = [
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685"
+dependencies = [
+ "event-listener",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-task"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524"
+
+[[package]]
+name = "async-trait"
+version = "0.1.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.11",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide 0.5.4",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
+dependencies = [
+ "byteorder",
+ "safemem",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64-simd"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195"
+dependencies = [
+ "outref",
+ "vsimd",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c70beb79cbb5ce9c4f8e20849978f34225931f665bb49efa6982875a4d5facb3"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db"
+
+[[package]]
+name = "calloop"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "595eb0438b3c6d262395fe30e6de9a61beb57ea56290b00a07f227fe6e20cbf2"
+dependencies = [
+ "log",
+ "nix",
+ "slotmap",
+ "thiserror",
+ "vec_map",
+]
+
+[[package]]
+name = "cargo-run-wasm"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc1e37cf14ef470ed74ec2a8b95e51b8623bcf6f76d24f233ebaeb209f766230"
+dependencies = [
+ "devserver_lib",
+ "pico-args",
+ "serde_json",
+ "wasm-bindgen-cli-support",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cgl"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics",
+ "foreign-types 0.3.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.3.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "com-rs"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd7bef69dc86e3c610e4e7aed41035e2a7ed12e72dd7530f61327a6579a4390b"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "console_log"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f"
+dependencies = [
+ "log",
+ "web-sys",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "foreign-types 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "core-text"
+version = "19.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25"
+dependencies = [
+ "core-foundation",
+ "core-graphics",
+ "foreign-types 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossfont"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21fd3add36ea31aba1520aa5288714dd63be506106753226d0eb387a93bc9c45"
+dependencies = [
+ "cocoa",
+ "core-foundation",
+ "core-foundation-sys",
+ "core-graphics",
+ "core-text",
+ "dwrote",
+ "foreign-types 0.5.0",
+ "freetype-rs",
+ "libc",
+ "log",
+ "objc",
+ "once_cell",
+ "pkg-config",
+ "servo-fontconfig",
+ "winapi",
+]
+
+[[package]]
+name = "cts_runner"
+version = "0.1.0"
+dependencies = [
+ "deno_console",
+ "deno_core",
+ "deno_url",
+ "deno_web",
+ "deno_webgpu",
+ "deno_webidl",
+ "termcolor",
+ "tokio",
+]
+
+[[package]]
+name = "cty"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+
+[[package]]
+name = "d3d12"
+version = "0.6.0"
+source = "git+https://github.com/gfx-rs/d3d12-rs?rev=b940b1d71#b940b1d71ab7083ae80eec697872672dc1f2bd32"
+dependencies = [
+ "bitflags 1.3.2",
+ "libloading 0.7.4",
+ "winapi",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb"
+
+[[package]]
+name = "ddsfile"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "594ecd967c2f40db5dde8da4c356975fc1fe030e951c7c3962f6dc2e80042e87"
+dependencies = [
+ "bitflags 1.3.2",
+ "byteorder",
+ "enum_primitive",
+]
+
+[[package]]
+name = "deno_console"
+version = "0.92.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55193bcb66a9a9830e1348280acbb9dd65c67d9a9a0586af9730079886408dce"
+dependencies = [
+ "deno_core",
+]
+
+[[package]]
+name = "deno_core"
+version = "0.174.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8077367e7e7ab2f52f1bc6285af301a1a6328b984991a3ff22236ad79862fce3"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "deno_ops",
+ "futures",
+ "indexmap",
+ "libc",
+ "log",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "pin-project",
+ "serde",
+ "serde_json",
+ "serde_v8",
+ "smallvec",
+ "sourcemap",
+ "url",
+ "v8",
+]
+
+[[package]]
+name = "deno_ops"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc9d81c9e5cd9590be6043546f4565670cb6e6a7de1986fd1c354adce04eb9d4"
+dependencies = [
+ "once_cell",
+ "pmutil",
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "deno_url"
+version = "0.92.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "906895a8ba4a95f48c51a32947061bf82f42da8f7c8df787012503f1a6042685"
+dependencies = [
+ "deno_core",
+ "serde",
+ "serde_repr",
+ "urlpattern",
+]
+
+[[package]]
+name = "deno_web"
+version = "0.123.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af75e7ff90a3f719adc074a8789da16687b9e77a97d67eb727b65fae71262637"
+dependencies = [
+ "async-trait",
+ "base64-simd",
+ "deno_core",
+ "encoding_rs",
+ "flate2",
+ "serde",
+ "tokio",
+ "uuid",
+]
+
+[[package]]
+name = "deno_webgpu"
+version = "0.85.0"
+dependencies = [
+ "deno_core",
+ "raw-window-handle 0.5.2",
+ "serde",
+ "tokio",
+ "wgpu-core",
+ "wgpu-types",
+]
+
+[[package]]
+name = "deno_webidl"
+version = "0.92.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "387a0cfb076580e0237ba6f1b338ee2688779c6a5e531d4a8a2a82b216917ae0"
+dependencies = [
+ "deno_core",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version 0.4.0",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "devserver_lib"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edf215dbb8cb1409cca7645aaed35f9e39fb0a21855bba1ac48bc0334903bf66"
+
+[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dummy"
+version = "0.16.1"
+dependencies = [
+ "wgpu-core",
+]
+
+[[package]]
+name = "dwrote"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "serde",
+ "serde_derive",
+ "winapi",
+ "wio",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum_primitive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180"
+dependencies = [
+ "num-traits 0.1.43",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "expat-sys"
+version = "2.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa"
+dependencies = [
+ "cmake",
+ "pkg-config",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fdeflate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.5.4",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared 0.1.1",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
+dependencies = [
+ "foreign-types-macros",
+ "foreign-types-shared 0.3.1",
+]
+
+[[package]]
+name = "foreign-types-macros"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8469d0d40519bc608ec6863f1cc88f3f1deee15913f2f3b3e573d81ed38cccc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "freetype-rs"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74eadec9d0a5c28c54bb9882e54787275152a4e36ce206b45d7451384e5bf5fb"
+dependencies = [
+ "bitflags 1.3.2",
+ "freetype-sys",
+ "libc",
+]
+
+[[package]]
+name = "freetype-sys"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a"
+dependencies = [
+ "cmake",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "fslock"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57eafdd0c16f57161105ae1b98a1238f97645f2f588438b2949c99a2af9616bf"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-intrusive"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a604f7a68fbf8103337523b1fadc8ade7361ee3f112f7c680ad179651616aed5"
+dependencies = [
+ "futures-core",
+ "lock_api",
+ "parking_lot 0.11.2",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.11",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
+
+[[package]]
+name = "gl_generator"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
+dependencies = [
+ "khronos_api",
+ "log",
+ "xml-rs",
+]
+
+[[package]]
+name = "glam"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815"
+
+[[package]]
+name = "glow"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e007a07a24de5ecae94160f141029e9a347282cfe25d1d58d85d845cf3130f1"
+dependencies = [
+ "js-sys",
+ "slotmap",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "glutin"
+version = "0.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "444c9ad294fdcaf20ccf6726b78f380b5450275540c9b68ab62f49726ad1c713"
+dependencies = [
+ "cgl",
+ "cocoa",
+ "core-foundation",
+ "glutin_egl_sys",
+ "glutin_gles2_sys",
+ "glutin_glx_sys",
+ "glutin_wgl_sys",
+ "libloading 0.7.4",
+ "log",
+ "objc",
+ "once_cell",
+ "osmesa-sys",
+ "parking_lot 0.12.1",
+ "raw-window-handle 0.5.2",
+ "wayland-client",
+ "wayland-egl",
+ "winapi",
+ "winit",
+]
+
+[[package]]
+name = "glutin_egl_sys"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68900f84b471f31ea1d1355567eb865a2cf446294f06cef8d653ed7bcf5f013d"
+dependencies = [
+ "gl_generator",
+ "winapi",
+]
+
+[[package]]
+name = "glutin_gles2_sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103"
+dependencies = [
+ "gl_generator",
+ "objc",
+]
+
+[[package]]
+name = "glutin_glx_sys"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d93d0575865098580c5b3a423188cd959419912ea60b1e48e8b3b526f6d02468"
+dependencies = [
+ "gl_generator",
+ "x11-dl",
+]
+
+[[package]]
+name = "glutin_wgl_sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696"
+dependencies = [
+ "gl_generator",
+]
+
+[[package]]
+name = "gpu-alloc"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fc59e5f710e310e76e6707f86c561dd646f69a8876da9131703b2f717de818d"
+dependencies = [
+ "bitflags 1.3.2",
+ "gpu-alloc-types",
+]
+
+[[package]]
+name = "gpu-alloc-types"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "gpu-allocator"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8"
+dependencies = [
+ "backtrace",
+ "log",
+ "thiserror",
+ "winapi",
+ "windows",
+]
+
+[[package]]
+name = "gpu-descriptor"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b0c02e1ba0bdb14e965058ca34e09c020f8e507a760df1121728e0aef68d57a"
+dependencies = [
+ "bitflags 1.3.2",
+ "gpu-descriptor-types",
+ "hashbrown",
+]
+
+[[package]]
+name = "gpu-descriptor-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hassle-rs"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0"
+dependencies = [
+ "bitflags 1.3.2",
+ "com-rs",
+ "libc",
+ "libloading 0.7.4",
+ "thiserror",
+ "widestring",
+ "winapi",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hexf-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "id-arena"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005"
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "if_chain"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed"
+
+[[package]]
+name = "image"
+version = "0.24.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "num-rational",
+ "num-traits 0.2.15",
+ "png",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+ "serde",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix 0.36.8",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "khronos-egl"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3"
+dependencies = [
+ "libc",
+ "libloading 0.7.4",
+ "pkg-config",
+]
+
+[[package]]
+name = "khronos_api"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
+[[package]]
+name = "libc"
+version = "0.2.141"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libloading"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memmap2"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "metal"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "core-graphics-types",
+ "foreign-types 0.3.2",
+ "log",
+ "objc",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "naga"
+version = "0.12.0"
+source = "git+https://github.com/gfx-rs/naga?rev=b99d58ea435090e561377949f428bce2c18451bb#b99d58ea435090e561377949f428bce2c18451bb"
+dependencies = [
+ "bit-set",
+ "bitflags 1.3.2",
+ "codespan-reporting",
+ "hexf-parse",
+ "indexmap",
+ "log",
+ "num-traits 0.2.15",
+ "petgraph",
+ "pp-rs",
+ "rustc-hash",
+ "serde",
+ "spirv",
+ "termcolor",
+ "thiserror",
+ "unicode-xid",
+]
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+
+[[package]]
+name = "ndk"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
+dependencies = [
+ "bitflags 1.3.2",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "raw-window-handle 0.5.2",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-glue"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0434fabdd2c15e0aab768ca31d5b7b333717f03cf02037d5a0a3ff3c278ed67f"
+dependencies = [
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-macro",
+ "ndk-sys",
+ "once_cell",
+ "parking_lot 0.12.1",
+]
+
+[[package]]
+name = "ndk-macro"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c"
+dependencies = [
+ "darling",
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "ndk-sys"
+version = "0.4.1+23.1.7779620"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "noise"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82051dd6745d5184c6efb7bc8be14892a7f6d4f3ad6dbf754d1c7d7d5fe24b43"
+dependencies = [
+ "rand",
+ "rand_xorshift",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
+dependencies = [
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "obj"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "059c95245738cdc7b40078cdd51a23200252a4c0a0a6dd005136152b3f467a4a"
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+ "objc_exception",
+]
+
+[[package]]
+name = "objc_exception"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "object"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "osmesa-sys"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b"
+dependencies = [
+ "shared_library",
+]
+
+[[package]]
+name = "outref"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a"
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.5",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.5",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "petgraph"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "pico-args"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "player"
+version = "0.16.1"
+dependencies = [
+ "env_logger",
+ "log",
+ "raw-window-handle 0.5.2",
+ "ron",
+ "serde",
+ "wgpu-core",
+ "wgpu-types",
+ "winit",
+]
+
+[[package]]
+name = "pmutil"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3894e5d549cccbe44afecf72922f277f603cd4bb0219c8342631ef18fffbe004"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "png"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "pollster"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5da3b0203fd7ee5720aa0b5e790b591aa5d3f41c3ed2c34a3a393382198af2f7"
+
+[[package]]
+name = "pp-rs"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
+dependencies = [
+ "once_cell",
+ "thiserror",
+ "toml",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "profiling"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "332cd62e95873ea4f41f3dfd6bbbfc5b52aec892d7e8d534197c4720a0bbbab2"
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77d416b86801d23dde1aa643023b775c3a462efc0ed96443add11546cdf1dca8"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "range-alloc"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab"
+
+[[package]]
+name = "raw-window-handle"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41"
+dependencies = [
+ "cty",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "renderdoc-sys"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b"
+
+[[package]]
+name = "ron"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff"
+dependencies = [
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "serde",
+]
+
+[[package]]
+name = "run-wasm"
+version = "0.16.1"
+dependencies = [
+ "cargo-run-wasm",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.17",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno 0.2.8",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.1.4",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno 0.3.1",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+
+[[package]]
+name = "safe_arch"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ff3d6d9696af502cc3110dacce942840fb06ff4514cad92236ecc455f2ce05"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sctk-adwaita"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61270629cc6b4d77ec1907db1033d5c2e1a404c412743621981a871dc9c12339"
+dependencies = [
+ "crossfont",
+ "log",
+ "smithay-client-toolkit",
+ "tiny-skia",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.11",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "serde_v8"
+version = "0.85.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dba78050262072324b0b1efba11db7367735251adf7ec734fd75780c598c743b"
+dependencies = [
+ "bytes",
+ "derive_more",
+ "serde",
+ "serde_bytes",
+ "smallvec",
+ "v8",
+]
+
+[[package]]
+name = "servo-fontconfig"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c"
+dependencies = [
+ "libc",
+ "servo-fontconfig-sys",
+]
+
+[[package]]
+name = "servo-fontconfig-sys"
+version = "5.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388"
+dependencies = [
+ "expat-sys",
+ "freetype-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "shared_library"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11"
+dependencies = [
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f"
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454"
+dependencies = [
+ "bitflags 1.3.2",
+ "calloop",
+ "dlib",
+ "lazy_static",
+ "log",
+ "memmap2",
+ "nix",
+ "pkg-config",
+ "wayland-client",
+ "wayland-cursor",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "sourcemap"
+version = "6.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eed16231c92d0a6f0388f56e0ab2be24ecff1173f8e22f0ea5e074d0525631cb"
+dependencies = [
+ "data-encoding",
+ "if_chain",
+ "rustc_version 0.2.3",
+ "serde",
+ "serde_json",
+ "unicode-id",
+ "url",
+]
+
+[[package]]
+name = "spirv"
+version = "0.2.0+1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830"
+dependencies = [
+ "bitflags 1.3.2",
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix 0.37.7",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.11",
+]
+
+[[package]]
+name = "tiny-skia"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "642680569bb895b16e4b9d181c60be1ed136fa0c9c7f11d004daf053ba89bf82"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.5.2",
+ "bytemuck",
+ "cfg-if",
+ "png",
+ "safe_arch",
+ "tiny-skia-path",
+]
+
+[[package]]
+name = "tiny-skia-path"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c114d32f0c2ee43d585367cb013dfaba967ab9f62b90d9af0d696e955e70fa6c"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-ucd-ident"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-id"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "urlpattern"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9bd5ff03aea02fa45b13a7980151fe45009af1980ba69f651ec367121a31609"
+dependencies = [
+ "derive_more",
+ "regex",
+ "serde",
+ "unic-ucd-ident",
+ "url",
+]
+
+[[package]]
+name = "uuid"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b55a3fef2a1e3b3a00ce878640918820d3c51081576ac657d23af9fc7928fdb"
+dependencies = [
+ "getrandom 0.2.8",
+ "serde",
+]
+
+[[package]]
+name = "v8"
+version = "0.64.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2287b485fa902172da3722d7e557e083afd63921777e0c6e5c0fba28e6d59d3"
+dependencies = [
+ "bitflags 1.3.2",
+ "fslock",
+ "lazy_static",
+ "which",
+]
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "vsimd"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walrus"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb08e48cde54c05f363d984bb54ce374f49e242def9468d2e1b6c2372d291f8"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "leb128",
+ "log",
+ "walrus-macro",
+ "wasmparser 0.77.0",
+]
+
+[[package]]
+name = "walrus-macro"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a6e5bd22c71e77d60140b0bd5be56155a37e5bd14e24f5f87298040d0cc40d7"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-cli-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d4780c659b883a19ddb7ced365db19f7f45cd182d832ee14de2b7ef52e88a9f"
+dependencies = [
+ "anyhow",
+ "base64 0.9.3",
+ "log",
+ "rustc-demangle",
+ "serde_json",
+ "tempfile",
+ "unicode-ident",
+ "walrus",
+ "wasm-bindgen-externref-xform",
+ "wasm-bindgen-multi-value-xform",
+ "wasm-bindgen-shared",
+ "wasm-bindgen-threads-xform",
+ "wasm-bindgen-wasm-conventions",
+ "wasm-bindgen-wasm-interpreter",
+ "wit-text",
+ "wit-validator",
+ "wit-walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-externref-xform"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d154c3843bf3b635b602ad41b56f505f8f1a25f8a0133fca4bbd0918d74efdc"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.105",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-multi-value-xform"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00a577fbd4be358ef8095432189b5c2e6b6e71f5081797c2032572f77d65d26"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "wasm-bindgen-test"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db36fc0f9fb209e88fb3642590ae0205bb5a56216dabd963ba15879fe53a30b"
+dependencies = [
+ "console_error_panic_hook",
+ "js-sys",
+ "scoped-tls",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-bindgen-test-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-test-macro"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0734759ae6b3b1717d661fe4f016efcfb9828f5edb4520c18eaee05af3b43be9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "wasm-bindgen-threads-xform"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0aa93941bae037b7b4fac4ecfc132294b828036c5990a806d0e6fd9284297d94"
+dependencies = [
+ "anyhow",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
+[[package]]
+name = "wasm-bindgen-wasm-conventions"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8f5de325048d945c90600fdf66b13521f3340d85971287775c36aa99c04466b"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-wasm-interpreter"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f695df44962e3a107436282232a2daa185b8453c16be8ddfb637cd2601f31128"
+dependencies = [
+ "anyhow",
+ "log",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9"
+
+[[package]]
+name = "wasmparser"
+version = "0.77.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6"
+
+[[package]]
+name = "wast"
+version = "21.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b1844f66a2bc8526d71690104c0e78a8e59ffa1597b7245769d174ebb91deb5"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wayland-client"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
+dependencies = [
+ "bitflags 1.3.2",
+ "downcast-rs",
+ "libc",
+ "nix",
+ "scoped-tls",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
+dependencies = [
+ "nix",
+ "once_cell",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-cursor"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661"
+dependencies = [
+ "nix",
+ "wayland-client",
+ "xcursor",
+]
+
+[[package]]
+name = "wayland-egl"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "402de949f81a012926d821a2d659f930694257e76dd92b6e0042ceb27be4107d"
+dependencies = [
+ "wayland-client",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
+dependencies = [
+ "bitflags 1.3.2",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
+dependencies = [
+ "dlib",
+ "lazy_static",
+ "pkg-config",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "wgpu"
+version = "0.16.1"
+dependencies = [
+ "arrayvec 0.7.2",
+ "async-executor",
+ "bitflags 2.1.0",
+ "bytemuck",
+ "cfg-if",
+ "console_error_panic_hook",
+ "console_log",
+ "ddsfile",
+ "env_logger",
+ "futures-intrusive",
+ "glam",
+ "image",
+ "js-sys",
+ "log",
+ "naga",
+ "nanorand",
+ "noise",
+ "obj",
+ "parking_lot 0.11.2",
+ "png",
+ "pollster",
+ "profiling",
+ "raw-window-handle 0.5.2",
+ "serde",
+ "smallvec",
+ "static_assertions",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-bindgen-test",
+ "web-sys",
+ "wgpu-core",
+ "wgpu-hal",
+ "wgpu-types",
+ "winit",
+]
+
+[[package]]
+name = "wgpu-core"
+version = "0.16.1"
+dependencies = [
+ "arrayvec 0.7.2",
+ "bit-vec",
+ "bitflags 2.1.0",
+ "codespan-reporting",
+ "log",
+ "naga",
+ "parking_lot 0.11.2",
+ "profiling",
+ "raw-window-handle 0.5.2",
+ "ron",
+ "rustc-hash",
+ "serde",
+ "smallvec",
+ "thiserror",
+ "web-sys",
+ "wgpu-hal",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-hal"
+version = "0.16.0"
+dependencies = [
+ "android_system_properties",
+ "arrayvec 0.7.2",
+ "ash",
+ "bit-set",
+ "bitflags 2.1.0",
+ "block",
+ "core-graphics-types",
+ "d3d12",
+ "env_logger",
+ "foreign-types 0.3.2",
+ "glow",
+ "glutin",
+ "gpu-alloc",
+ "gpu-allocator",
+ "gpu-descriptor",
+ "hassle-rs",
+ "js-sys",
+ "khronos-egl",
+ "libc",
+ "libloading 0.8.0",
+ "log",
+ "metal",
+ "naga",
+ "objc",
+ "parking_lot 0.11.2",
+ "profiling",
+ "range-alloc",
+ "raw-window-handle 0.5.2",
+ "renderdoc-sys",
+ "rustc-hash",
+ "smallvec",
+ "thiserror",
+ "wasm-bindgen",
+ "web-sys",
+ "wgpu-types",
+ "winapi",
+ "winit",
+]
+
+[[package]]
+name = "wgpu-info"
+version = "0.16.1"
+dependencies = [
+ "env_logger",
+ "num-traits 0.2.15",
+ "wgpu",
+]
+
+[[package]]
+name = "wgpu-types"
+version = "0.16.0"
+dependencies = [
+ "bitflags 2.1.0",
+ "js-sys",
+ "serde",
+ "serde_json",
+ "web-sys",
+]
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
+dependencies = [
+ "windows-targets 0.42.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.1",
+ "windows_aarch64_msvc 0.42.1",
+ "windows_i686_gnu 0.42.1",
+ "windows_i686_msvc 0.42.1",
+ "windows_x86_64_gnu 0.42.1",
+ "windows_x86_64_gnullvm 0.42.1",
+ "windows_x86_64_msvc 0.42.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.1",
+ "windows_aarch64_msvc 0.42.1",
+ "windows_i686_gnu 0.42.1",
+ "windows_i686_msvc 0.42.1",
+ "windows_x86_64_gnu 0.42.1",
+ "windows_x86_64_gnullvm 0.42.1",
+ "windows_x86_64_msvc 0.42.1",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winit"
+version = "0.27.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb796d6fbd86b2fd896c9471e6f04d39d750076ebe5680a3958f00f5ab97657c"
+dependencies = [
+ "bitflags 1.3.2",
+ "cocoa",
+ "core-foundation",
+ "core-graphics",
+ "dispatch",
+ "instant",
+ "libc",
+ "log",
+ "mio",
+ "ndk",
+ "ndk-glue",
+ "objc",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "percent-encoding",
+ "raw-window-handle 0.4.3",
+ "raw-window-handle 0.5.2",
+ "sctk-adwaita",
+ "smithay-client-toolkit",
+ "wasm-bindgen",
+ "wayland-client",
+ "wayland-protocols",
+ "web-sys",
+ "windows-sys 0.36.1",
+ "x11-dl",
+]
+
+[[package]]
+name = "wio"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "wit-parser"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f5fd97866f4b9c8e1ed57bcf9446f3d0d8ba37e2dd01c3c612c046c053b06f7"
+dependencies = [
+ "anyhow",
+ "leb128",
+ "wit-schema-version",
+]
+
+[[package]]
+name = "wit-schema-version"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfee4a6a4716eefa0682e7a3b836152e894a3e4f34a9d6c2c3e1c94429bfe36a"
+
+[[package]]
+name = "wit-text"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33358e95c77d660f1c7c07f4a93c2bd89768965e844e3c50730bb4b42658df5f"
+dependencies = [
+ "anyhow",
+ "wast",
+ "wit-writer",
+]
+
+[[package]]
+name = "wit-validator"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c11d93d925420e7872b226c4161849c32be38385ccab026b88df99d8ddc6ba6"
+dependencies = [
+ "anyhow",
+ "wasmparser 0.59.0",
+ "wit-parser",
+ "wit-schema-version",
+]
+
+[[package]]
+name = "wit-walrus"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad559e3e4c6404b2a6a675d44129d62a3836e3b951b90112fa1c5feb852757cd"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "walrus",
+ "wit-parser",
+ "wit-schema-version",
+ "wit-writer",
+]
+
+[[package]]
+name = "wit-writer"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2ad01ba5e9cbcff799a0689e56a153776ea694cec777f605938cb9880d41a09"
+dependencies = [
+ "leb128",
+ "wit-schema-version",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1536d6965a5d4e573c7ef73a2c15ebcd0b2de3347bdf526c34c297c00ac40f0"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "xcursor"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
diff --git a/nixpkgs/pkgs/tools/graphics/wgpu-utils/default.nix b/nixpkgs/pkgs/tools/graphics/wgpu-utils/default.nix
new file mode 100644
index 000000000000..236cf3f7a7fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wgpu-utils/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, pkg-config, makeWrapper, vulkan-loader, QuartzCore }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wgpu-utils";
+  version = "0.16.1";
+
+  src = fetchFromGitHub {
+    owner = "gfx-rs";
+    repo = "wgpu";
+    rev = "v${version}";
+    hash = "sha256-tGjjjQDcN9zkxQSOrW/D1Pu6cycTKo/lh71mTEpZQIE=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "d3d12-0.6.0" = "sha256-xCazXUriIQWMVa3DOI1aySBATmYwyDqsVYULRV2l/44=";
+      "naga-0.12.0" = "sha256-EZ8ZKixOFPT9ZTKIC/UGh2B3F09ENbCTUi+ASamJzMM=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = lib.optional stdenv.isDarwin QuartzCore;
+
+  # Tests fail, as the Nix sandbox doesn't provide an appropriate adapter (e.g. Vulkan).
+  doCheck = false;
+
+  postInstall = ''
+    wrapProgram $out/bin/wgpu-info \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ vulkan-loader ]}
+  '';
+
+  meta = with lib; {
+    description = "Safe and portable GPU abstraction in Rust, implementing WebGPU API";
+    homepage = "https://wgpu.rs/";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ erictapen ];
+    mainProgram = "wgpu-info";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/wkhtmltopdf-bin/default.nix b/nixpkgs/pkgs/tools/graphics/wkhtmltopdf-bin/default.nix
new file mode 100644
index 000000000000..29e1d391958f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wkhtmltopdf-bin/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, autoPatchelfHook
+, cpio
+, freetype
+, zlib
+, openssl
+, fetchurl
+, gcc-unwrapped
+, libjpeg8
+, libpng
+, fontconfig
+, stdenv
+, xar
+, xorg
+}:
+
+let
+  darwinAttrs = rec {
+    version = "0.12.6-2";
+    src = fetchurl {
+      url = "https://github.com/wkhtmltopdf/packaging/releases/download/${version}/wkhtmltox-${version}.macos-cocoa.pkg";
+      sha256 = "sha256-gaZrd7UI/t6NvKpnEnIDdIN2Vos2c6F/ZhG21R6YlPg=";
+    };
+
+    nativeBuildInputs = [ xar cpio ];
+
+    unpackPhase = ''
+      xar -xf $src
+      zcat Payload | cpio -i
+      tar -xf usr/local/share/wkhtmltox-installer/wkhtmltox.tar.gz
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out
+      cp -r bin include lib share $out/
+      runHook postInstall
+    '';
+  };
+
+  linuxAttrs = rec {
+    version = "0.12.6-3";
+    src = fetchurl {
+      url = "https://github.com/wkhtmltopdf/packaging/releases/download/${version}/wkhtmltox-${version}.archlinux-x86_64.pkg.tar.xz";
+      sha256 = "sha256-6Ewu8sPRbqvYWj27mBlQYpEN+mb+vKT46ljrdEUxckI=";
+    };
+
+    nativeBuildInputs = [ autoPatchelfHook ];
+
+    buildInputs = [
+      xorg.libXext
+      xorg.libXrender
+
+      freetype
+      openssl
+      zlib
+
+      (lib.getLib fontconfig)
+      (lib.getLib gcc-unwrapped)
+      (lib.getLib libjpeg8)
+      (lib.getLib libpng)
+    ];
+
+    unpackPhase = "tar -xf $src";
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out
+      cp -r usr/bin usr/include usr/lib usr/share $out/
+      runHook postInstall
+    '';
+  };
+in
+stdenv.mkDerivation ({
+  pname = "wkhtmltopdf-bin";
+
+  dontStrip = true;
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/wkhtmltopdf --version
+  '';
+
+  meta = with lib; {
+    homepage = "https://wkhtmltopdf.org/";
+    description =
+      "Tools for rendering web pages to PDF or images (binary package)";
+    longDescription = ''
+      wkhtmltopdf and wkhtmltoimage are open source (LGPL) command line tools
+      to render HTML into PDF and various image formats using the QT Webkit
+      rendering engine. These run entirely "headless" and do not require a
+      display or display service.
+
+      There is also a C library, if you're into that kind of thing.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ nbr kalbasit ];
+    platforms = [ "x86_64-darwin" "x86_64-linux" ];
+  };
+}
+// lib.optionalAttrs (stdenv.hostPlatform.isDarwin) darwinAttrs
+// lib.optionalAttrs (stdenv.hostPlatform.isLinux) linuxAttrs
+)
diff --git a/nixpkgs/pkgs/tools/graphics/wkhtmltopdf/default.nix b/nixpkgs/pkgs/tools/graphics/wkhtmltopdf/default.nix
new file mode 100644
index 000000000000..7f1e40a695e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wkhtmltopdf/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, fetchFromGitHub, qtwebkit, qtsvg, qtxmlpatterns
+, fontconfig, freetype, libpng, zlib, libjpeg, wrapQtAppsHook
+, openssl, libX11, libXext, libXrender }:
+
+stdenv.mkDerivation rec {
+  version = "0.12.6";
+  pname = "wkhtmltopdf";
+
+  src = fetchFromGitHub {
+    owner  = "wkhtmltopdf";
+    repo   = "wkhtmltopdf";
+    rev    = version;
+    sha256 = "0m2zy986kzcpg0g3bvvm815ap9n5ann5f6bdy7pfj6jv482bm5mg";
+  };
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    fontconfig freetype libpng zlib libjpeg openssl
+    libX11 libXext libXrender
+    qtwebkit qtsvg qtxmlpatterns
+  ];
+
+  prePatch = ''
+    for f in src/image/image.pro src/pdf/pdf.pro ; do
+      substituteInPlace $f --replace '$(INSTALL_ROOT)' ""
+    done
+  '';
+
+  # rewrite library path
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -change libwkhtmltox.0.dylib $out/lib/libwkhtmltox.0.dylib $out/bin/wkhtmltopdf
+    install_name_tool -change libwkhtmltox.0.dylib $out/lib/libwkhtmltox.0.dylib $out/bin/wkhtmltoimage
+  '';
+
+  configurePhase = "qmake wkhtmltopdf.pro INSTALLBASE=$out";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://wkhtmltopdf.org/";
+    description = "Tools for rendering web pages to PDF or images";
+    longDescription = ''
+      wkhtmltopdf and wkhtmltoimage are open source (LGPL) command line tools
+      to render HTML into PDF and various image formats using the QT Webkit
+      rendering engine. These run entirely "headless" and do not require a
+      display or display service.
+
+      There is also a C library, if you're into that kind of thing.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jb55 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/xcftools/default.nix b/nixpkgs/pkgs/tools/graphics/xcftools/default.nix
new file mode 100644
index 000000000000..7b3d45421291
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/xcftools/default.nix
@@ -0,0 +1,49 @@
+{lib, stdenv, fetchpatch, fetchurl, libpng, perl, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "xcftools";
+  version = "1.0.7";
+
+  src = fetchurl {
+    url = "http://henning.makholm.net/xcftools/xcftools-${version}.tar.gz";
+    sha256 = "19i0x7yhlw6hd2gp013884zchg63yzjdj4hpany011il0n26vgqy";
+  };
+
+  buildInputs = [ libpng perl gettext ];
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2019-5086.CVE-2019-5087.patch";
+      url = "https://github.com/gladk/xcftools/commit/59c38e3e45b9112c2bcb4392bccf56e297854f8a.patch";
+      sha256 = "sha256-a1Biv6viXzTSaLDzinOyu0HdDTUPsKITsdKu9B9Y8GE=";
+    })
+  ];
+
+  postPatch = ''
+    # Required if building with libpng-1.6, innocuous otherwise
+    substituteInPlace xcf2png.c         \
+      --replace png_voidp_NULL NULL     \
+      --replace png_error_ptr_NULL NULL
+
+    # xcfview needs mailcap and isn't that useful anyway
+    sed -i -e '/BINARIES/s/xcfview//' Makefile.in
+  '';
+
+  meta = {
+    homepage = "http://henning.makholm.net/software";
+    description = "Command-line tools for converting Gimp XCF files";
+    longDescription = ''
+      A set of fast command-line tools for extracting information from
+      the Gimp's native file format XCF.
+
+      The tools are designed to allow efficient use of layered XCF
+      files as sources in a build system that use 'make' and similar
+      tools to manage automatic processing of the graphics.
+
+      These tools work independently of the Gimp engine and do not
+      require the Gimp to even be installed.
+    '';
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/xcolor/default.nix b/nixpkgs/pkgs/tools/graphics/xcolor/default.nix
new file mode 100644
index 000000000000..50aa912522d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/xcolor/default.nix
@@ -0,0 +1,48 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, libX11, libXcursor
+, libxcb, python3, installShellFiles, makeDesktopItem, copyDesktopItems }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xcolor";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "Soft";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-NfmoBZek4hsga6RflE5EKkWarhCFIcTwEXhg2fpkxNE=";
+  };
+
+  cargoSha256 = "sha256-Zh73+FJ63SkusSavCqSCLbHVnU++4ZFSMFUIM7TnOj0=";
+
+  nativeBuildInputs = [ pkg-config python3 installShellFiles copyDesktopItems ];
+
+  buildInputs = [ libX11 libXcursor libxcb ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "XColor";
+      exec = "xcolor -s";
+      desktopName = "XColor";
+      comment = "Select colors visible anywhere on the screen to get their RGB representation";
+      icon = "xcolor";
+      categories = [ "Graphics" ];
+    })
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/applications
+
+    installManPage man/xcolor.1
+    for x in 16 24 32 48 256 512; do
+        install -D -m644 extra/icons/xcolor-''${x}.png $out/share/icons/hicolor/''${x}x''${x}/apps/xcolor.png
+    done
+  '';
+
+  meta = with lib; {
+    description = "Lightweight color picker for X11";
+    homepage = "https://github.com/Soft/xcolor";
+    maintainers = with lib.maintainers; [ moni ];
+    license = licenses.mit;
+    mainProgram = "xcolor";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/xcur2png/default.nix b/nixpkgs/pkgs/tools/graphics/xcur2png/default.nix
new file mode 100644
index 000000000000..5d5396aea273
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/xcur2png/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, libpng, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "xcur2png";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "eworm-de";
+    repo = pname;
+    rev = version;
+    sha256 = "0858wn2p14bxpv9lvaz2bz1rk6zk0g8zgxf8iy595m8fqv4q2fya";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libpng
+    xorg.libX11
+    xorg.libXcursor
+    xorg.xorgproto
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/eworm-de/xcur2png/releases";
+    description = "Convert X cursors to PNG images";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ romildo ];
+    mainProgram = "xcur2png";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/yaxg/default.nix b/nixpkgs/pkgs/tools/graphics/yaxg/default.nix
new file mode 100644
index 000000000000..dd428ae0c427
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/yaxg/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper,
+  maim, slop, ffmpeg, byzanz, libnotify, xdpyinfo }:
+
+stdenv.mkDerivation rec {
+  pname = "yaxg";
+  version = "unstable-2018-05-03";
+
+  src = fetchFromGitHub {
+    owner = "DanielFGray";
+    repo = "yaxg";
+    rev = "9d6af75da2ec25dba4b8d784e431064033d67ad2";
+    sha256 = "01p6ghp1vfrlnrm78bgbl9ppqwsdxh761g0qa172dpvsqg91l1p6";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ maim slop ffmpeg byzanz libnotify xdpyinfo ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    mv yaxg $out/bin/
+    chmod +x $out/bin/yaxg
+    wrapProgram $out/bin/yaxg --prefix PATH : ${ lib.makeBinPath [ maim slop ffmpeg byzanz libnotify xdpyinfo ]}
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Yet Another X Grabber script";
+    longDescription = ''
+      Capture and record your screen with callbacks. Wraps maim, slop, ffmpeg,
+      and byzanz to enable still image, video, or gif recording of part or all
+      of your screen. Similar command-line interface to scrot but is overall
+      more flexible and less buggy.
+    '';
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ neonfuz ];
+    mainProgram = "yaxg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/zbar/default.nix b/nixpkgs/pkgs/tools/graphics/zbar/default.nix
new file mode 100644
index 000000000000..fe398bf53314
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zbar/default.nix
@@ -0,0 +1,151 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, imagemagickBig
+, pkg-config
+, withXorg ? true
+, libX11
+, libv4l
+, qtbase
+, qtx11extras
+, wrapQtAppsHook
+, wrapGAppsHook
+, gtk3
+, xmlto
+, docbook_xsl
+, autoreconfHook
+, dbus
+, enableVideo ? stdenv.isLinux
+  # The implementation is buggy and produces an error like
+  # Name Error (Connection ":1.4380" is not allowed to own the service "org.linuxtv.Zbar" due to security policies in the configuration file)
+  # for every scanned code.
+  # see https://github.com/mchehab/zbar/issues/104
+, enableDbus ? false
+, libintl
+, libiconv
+, Foundation
+, bash
+, python3
+, argp-standalone
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zbar";
+  version = "0.23.92";
+
+  outputs = [ "out" "lib" "dev" "doc" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "mchehab";
+    repo = "zbar";
+    rev = version;
+    sha256 = "sha256-VhVrngAX7pXZp+szqv95R6RGAJojp3svdbaRKigGb0w=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2023-40889.patch";
+      url = "https://salsa.debian.org/debian/zbar/-/raw/debian/0.23.92-9/debian/patches/0003-CVE-2023-40889-qrdec.c-Fix-array-out-of-bounds-acces.patch";
+      hash = "sha256-z0IADJwUt9PBoox5xJJN//5vrcRbIrWB9H7wtxNVUZU=";
+    })
+    (fetchpatch {
+      name = "CVE-2023-40890.patch";
+      url = "https://salsa.debian.org/debian/zbar/-/raw/debian/0.23.92-9/debian/patches/0004-Add-bounds-check-for-CVE-2023-40890.patch";
+      hash = "sha256-YgiptwXpRpz0qIcXBpARfIzSB8KYmksZR58o5yFPahs=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    xmlto
+    autoreconfHook
+    docbook_xsl
+  ] ++ lib.optionals enableVideo [
+    wrapGAppsHook
+    wrapQtAppsHook
+    qtbase
+  ];
+
+  buildInputs = [
+    imagemagickBig
+    libintl
+  ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+    Foundation
+  ] ++ lib.optionals enableDbus [
+    dbus
+  ] ++ lib.optionals withXorg [
+    libX11
+  ] ++ lib.optionals enableVideo [
+    libv4l
+    gtk3
+    qtbase
+    qtx11extras
+  ];
+
+  nativeCheckInputs = [
+    bash
+    python3
+  ];
+
+  checkInputs = lib.optionals stdenv.isDarwin [
+    argp-standalone
+  ];
+
+  # Note: postConfigure instead of postPatch in order to include some
+  # autoconf-generated files. The template files for the autogen'd scripts are
+  # not chmod +x, so patchShebangs misses them.
+  postConfigure = ''
+    patchShebangs test
+  '';
+
+  # Disable assertions which include -dev QtBase file paths.
+  env.NIX_CFLAGS_COMPILE = "-DQT_NO_DEBUG";
+
+  configureFlags = [
+    "--without-python"
+  ] ++ (if enableDbus then [
+    "--with-dbusconfdir=${placeholder "out"}/share"
+  ] else [
+    "--without-dbus"
+  ]) ++ (if enableVideo then [
+    "--with-gtk=gtk3"
+  ] else [
+    "--disable-video"
+    "--without-gtk"
+    "--without-qt"
+  ]);
+
+  doCheck = true;
+
+  preCheck = lib.optionalString stdenv.isDarwin ''
+    export NIX_LDFLAGS="$NIX_LDFLAGS -largp"
+  '';
+
+  dontWrapQtApps = true;
+  dontWrapGApps = true;
+
+  postFixup = lib.optionalString enableVideo ''
+    wrapGApp "$out/bin/zbarcam-gtk"
+    wrapQtApp "$out/bin/zbarcam-qt"
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Bar code reader";
+    longDescription = ''
+      ZBar is an open source software suite for reading bar codes from various
+      sources, such as video streams, image files and raw intensity sensors. It
+      supports many popular symbologies (types of bar codes) including
+      EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 and QR
+      Code.
+    '';
+    maintainers = with maintainers; [ delroth raskin ];
+    platforms = platforms.unix;
+    license = licenses.lgpl21;
+    homepage = "https://github.com/mchehab/zbar";
+    mainProgram = "zbarimg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/zxing/default.nix b/nixpkgs/pkgs/tools/graphics/zxing/default.nix
new file mode 100644
index 000000000000..175b15b22aec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zxing/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, jre }:
+stdenv.mkDerivation rec {
+  pname = "zxing";
+  version = "3.1.0";
+  # Maven builds are hard to get right
+  core_jar = fetchurl {
+    url = "http://repo1.maven.org/maven2/com/google/zxing/core/${version}/core-${version}.jar";
+    sha256 = "199l4xvlcpafqn69r3k9qjpqkw9lvkl02hzpm0ackvdhl7vk42zh";
+  };
+  javase_jar = fetchurl {
+    url = "http://repo1.maven.org/maven2/com/google/zxing/javase/${version}/javase-${version}.jar";
+    sha256 = "0fzxvvf5dqyrs5m9rqw4ffm9h1s27bi7q3jb1dam34s80q2rp2zq";
+  };
+  inherit jre;
+  dontUnpack = true;
+  installPhase = ''
+    mkdir -p "$out/lib/java" "$out/bin"
+    cp "${core_jar}" "${javase_jar}" "$out/lib/java"
+    substituteAll "${./java-zxing.sh}" "$out/bin/java-zxing"
+    substituteAll "${./zxing-cmdline-runner.sh}" "$out/bin/zxing-cmdline-runner"
+    substituteAll "${./zxing-cmdline-encoder.sh}" "$out/bin/zxing-cmdline-encoder"
+    substituteAll "${./zxing.sh}" "$out/bin/zxing"
+    chmod a+x "$out/bin"/*
+    cd "$out/lib/java"; for i in *.jar; do mv "$i" "''${i#*-}"; done
+  '';
+  meta = {
+    description = "1D and 2D code reading library";
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license = lib.licenses.asl20;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+    homepage = "https://github.com/zxing/zxing";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/zxing/java-zxing.sh b/nixpkgs/pkgs/tools/graphics/zxing/java-zxing.sh
new file mode 100644
index 000000000000..bee3ac9e27a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zxing/java-zxing.sh
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+@jre@/bin/java -cp @out@/lib/java/core-@version@.jar:@out@/lib/java/javase-@version@.jar "$@"
diff --git a/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-encoder.sh b/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-encoder.sh
new file mode 100644
index 000000000000..a17ba49cecf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-encoder.sh
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+java-zxing com.google.zxing.client.j2se.CommandLineEncoder "$@"
diff --git a/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-runner.sh b/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-runner.sh
new file mode 100644
index 000000000000..cb2a25dc03f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-runner.sh
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+java-zxing com.google.zxing.client.j2se.CommandLineRunner "$@"
diff --git a/nixpkgs/pkgs/tools/graphics/zxing/zxing.sh b/nixpkgs/pkgs/tools/graphics/zxing/zxing.sh
new file mode 100644
index 000000000000..a38558d87026
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zxing/zxing.sh
@@ -0,0 +1,18 @@
+#! /bin/sh
+choice="$1";
+shift
+case "$choice" in
+    encode | create | write | CommandLineEncoder)
+        zxing-cmdline-encoder "$@";
+        ;;
+    decode | read | run | CommandLineRunner)
+        zxing-cmdline-runner "$@";
+        ;;
+    help | usage | --help | --usage | -h)
+        zxing read;
+        zxing write;
+        ;;
+    *)
+        zxing read "$choice" "$@"
+        ;;
+esac
diff --git a/nixpkgs/pkgs/tools/inputmethods/anthy/default.nix b/nixpkgs/pkgs/tools/inputmethods/anthy/default.nix
new file mode 100644
index 000000000000..23e2da0e41e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/anthy/default.nix
@@ -0,0 +1,19 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "anthy";
+  version = "9100h";
+
+  meta = with lib; {
+    description = "Hiragana text to Kana Kanji mixed text Japanese input method";
+    homepage    = "https://anthy.osdn.jp/";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ericsagnes ];
+    platforms   = platforms.unix;
+  };
+
+  src = fetchurl {
+    url = "mirror://osdn/anthy/37536/anthy-${version}.tar.gz";
+    sha256 = "0ism4zibcsa5nl77wwi12vdsfjys3waxcphn1p5s7d0qy1sz0mnj";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/droidmote/default.nix b/nixpkgs/pkgs/tools/inputmethods/droidmote/default.nix
new file mode 100644
index 000000000000..017c548f84d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/droidmote/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchurl, autoPatchelfHook }:
+
+let
+  srcs = {
+    x86_64-linux = fetchurl {
+      urls = [
+        "https://videomap.it/script/dms-ubuntu-x64"
+        "https://archive.org/download/videomap/dms-ubuntu-x64"
+      ];
+      sha256 = "1x7pp6k27lr206a8j2pn0wf4wjb0zi28s0g1g3rb08jmr8fh1jnh";
+    };
+    i686-linux = fetchurl {
+      urls = [
+        "https://videomap.it/script/dms-ubuntu-x32"
+        "https://archive.org/download/videomap/dms-ubuntu-x32"
+      ];
+      sha256 = "1d62d7jz50wzk5rqqm3xab66jdzi9i1j6mwxf7r7nsgm6j5zz8r4";
+    };
+    aarch64-linux = fetchurl {
+      urls = [
+        "https://videomap.it/script/dms-ubuntu-arm64"
+        "https://archive.org/download/videomap/dms-ubuntu-arm64"
+      ];
+      sha256 = "1l1x7iqbxn6zsh3d37yb5x15qsxlwy3cz8g2g8vnzkgaafw9vva0";
+    };
+    armv7l-linux = fetchurl {
+      urls = [
+        "https://videomap.it/script/dms-ubuntu-arm"
+        "https://archive.org/download/videomap/dms-ubuntu-arm"
+      ];
+      sha256 = "1i7q9mylzvbsfydv4xf83nyqkh0nh01612jrqm93q1w6d0k2zvcd";
+    };
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "droidmote";
+  version = "3.0.6";
+
+  src = srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  dontUnpack = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -m755 -D $src $out/bin/droidmote
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Control your computer from your couch";
+    homepage = "https://www.videomap.it/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ atila ];
+    platforms = lib.attrNames srcs;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/emote/default.nix b/nixpkgs/pkgs/tools/inputmethods/emote/default.nix
new file mode 100644
index 000000000000..8e3d7227d1bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/emote/default.nix
@@ -0,0 +1,61 @@
+{ lib, fetchFromGitHub, python3Packages, wrapGAppsHook, gobject-introspection, keybinder3, xdotool }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "emote";
+  version = "4.0.1";
+
+  src = fetchFromGitHub {
+    owner = "tom-james-watson";
+    repo = "Emote";
+    rev = "v${version}";
+    sha256 = "sha256-+GpL4Rp0ECsxXGP9dWZbVNkH7H2GF1brDTLsB+TQY5A=";
+  };
+
+  postPatch = ''
+    sed -i setup.py -e '/==.*/d'
+    substituteInPlace emote/config.py --replace 'os.environ.get("SNAP")' "'$out/share/emote'"
+    substituteInPlace emote/picker.py --replace 'os.environ.get("SNAP_VERSION", "dev build")' "'$version'"
+    substituteInPlace snap/gui/emote.desktop --replace "Icon=\''${SNAP}/usr/share/icons/emote.svg" "Icon=emote.svg"
+  '';
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    # used by gobject-introspection's setup-hook and only detected at runtime
+    keybinder3
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    dbus-python.out # don't propagate dev output
+    manimpango
+    pygobject3.out # not listed in setup.py, don't propagate dev output
+    setproctitle
+  ];
+
+  postInstall = ''
+    install -D snap/gui/emote.desktop $out/share/applications/emote.desktop
+    install -D snap/gui/emote.svg $out/share/pixmaps/emote.svg
+    install -D -t $out/share/emote/static static/{emojis.csv,logo.svg,style.css}
+  '';
+
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}"
+      --prefix PATH : ${lib.makeBinPath [ xdotool ]}
+    )
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Modern emoji picker for Linux";
+    homepage = "https://github.com/tom-james-watson/emote";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ emilytrau SuperSandro2000 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/evdevremapkeys/default.nix b/nixpkgs/pkgs/tools/inputmethods/evdevremapkeys/default.nix
new file mode 100644
index 000000000000..497a4abc5956
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/evdevremapkeys/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "evdevremapkeys";
+  version = "unstable-2021-05-04";
+
+  src = fetchFromGitHub {
+    owner = "philipl";
+    repo = pname;
+    rev = "9b6f372a9bdf8b27d39f7e655b74f6b9d1a8467f";
+    sha256 = "sha256-FwRbo0RTiiV2AB7z6XOalMnwMbj15jM4Dxs41TsIOQI=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    pyyaml
+    pyxdg
+    python-daemon
+    evdev
+    pyudev
+  ];
+
+  # hase no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "evdevremapkeys" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/philipl/evdevremapkeys";
+    description = "Daemon to remap events on linux input devices";
+    license = licenses.mit;
+    maintainers = [ maintainers.q3k ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/evscript/default.nix b/nixpkgs/pkgs/tools/inputmethods/evscript/default.nix
new file mode 100644
index 000000000000..d1440bea357f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/evscript/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitea }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "evscript";
+  version = "0.1.0";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "valpackett";
+    repo = pname;
+    rev = version;
+    hash = "sha256-lCXDDLovUb5aSOPTyVJL25v1JT1BGrrUlUR0Mu0XX4Q=";
+  };
+
+  cargoHash = "sha256-KcQZnGFtev4ckhtQ7CNB773fAsExZ9EQl9e4Jf4beGo=";
+
+  meta = with lib; {
+    homepage = "https://codeberg.org/valpackett/evscript";
+    description = "A tiny sandboxed Dyon scripting environment for evdev input devices";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ milesbreslin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/evsieve/default.nix b/nixpkgs/pkgs/tools/inputmethods/evsieve/default.nix
new file mode 100644
index 000000000000..de18668e7475
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/evsieve/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, libevdev
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "evsieve";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "KarsMulder";
+    repo = "evsieve";
+    rev = "v${version}";
+    hash = "sha256-UV5m8DmFtkCU/DoBJNBCdvhU/jYtU5+WnnhKwxZNl9g=";
+  };
+
+  cargoHash = "sha256-Bug25xK3YYQ3YjrUXlgWaVUPn87V3N/8XikqwYL/sUg=";
+
+  buildInputs = [ libevdev ];
+
+  doCheck = false; # unit tests create uinput devices
+
+  meta = with lib; {
+    description = "A utility for mapping events from Linux event devices";
+    homepage = "https://github.com/KarsMulder/evsieve";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ tsowell ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/default.nix
new file mode 100644
index 000000000000..a3b5e180bcfb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/default.nix
@@ -0,0 +1,110 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, cmake
+, extra-cmake-modules
+, cairo
+, pango
+, expat
+, fribidi
+, fmt
+, wayland
+, systemd
+, wayland-protocols
+, json_c
+, isocodes
+, xkeyboard_config
+, enchant
+, gdk-pixbuf
+, libGL
+, libuuid
+, libselinux
+, libXdmcp
+, libsepol
+, libxkbcommon
+, libthai
+, libdatrie
+, xcbutilkeysyms
+, pcre
+, xcbutil
+, xcbutilwm
+, xcb-imdkit
+, libxkbfile
+, nixosTests
+}:
+let
+  enDictVer = "20121020";
+  enDict = fetchurl {
+    url = "https://download.fcitx-im.org/data/en_dict-${enDictVer}.tar.gz";
+    hash = "sha256-xEpdeEeSXuqeTS0EdI1ELNKN2SmaC1cu99kerE9abOs=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "fcitx5";
+  version = "5.1.7";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    hash = "sha256-XI4E+fWDIYDiYBv6HezytaZmhzv4NUaNam1T5Fyx+LI=";
+  };
+
+  prePatch = ''
+    ln -s ${enDict} src/modules/spell/$(stripHash ${enDict})
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    pkg-config
+  ];
+
+  buildInputs = [
+    expat
+    fmt
+    isocodes
+    cairo
+    enchant
+    pango
+    libthai
+    libdatrie
+    fribidi
+    systemd
+    gdk-pixbuf
+    wayland
+    wayland-protocols
+    json_c
+    libGL
+    libuuid
+    libselinux
+    libsepol
+    libXdmcp
+    libxkbcommon
+    pcre
+    xcbutil
+    xcbutilwm
+    xcbutilkeysyms
+    xcb-imdkit
+    xkeyboard_config
+    libxkbfile
+  ];
+
+  passthru = {
+    updateScript = ./update.py;
+    tests = {
+      inherit (nixosTests) fcitx5;
+    };
+  };
+
+  meta = with lib; {
+    description = "Next generation of fcitx";
+    homepage = "https://github.com/fcitx/fcitx5";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-anthy.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-anthy.nix
new file mode 100644
index 000000000000..de8e78f62ad1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-anthy.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, cmake, extra-cmake-modules, pkg-config, fcitx5, anthy, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-anthy";
+  version = "5.1.3";
+
+  src = fetchurl {
+    url = "https://download.fcitx-im.org/fcitx5/fcitx5-anthy/${pname}-${version}.tar.xz";
+    sha256 = "sha256-pOJYe5+/11j8YmuJDyAbFPFsnUa9DQqbYirSwD992zY=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules pkg-config ];
+  buildInputs = [ fcitx5 anthy gettext ];
+
+  meta = with lib; {
+    description = "Anthy Wrapper for Fcitx5";
+    homepage = "https://github.com/fcitx/fcitx5-anthy";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ elnudev ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-bamboo.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-bamboo.nix
new file mode 100644
index 000000000000..b8e34332e8ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-bamboo.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, fcitx5
+, gettext
+, go
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "fcitx5-bamboo";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = "fcitx5-bamboo";
+    rev = finalAttrs.version;
+    hash = "sha256-EcpuZN2JU6HSuiQgBPBsoYftdHypiyFlrUxDBlVW6eo=";
+    fetchSubmodules = true;
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    cmake
+    gettext
+    go
+  ];
+
+  buildInputs = [
+    fcitx5
+    extra-cmake-modules
+  ];
+
+  preConfigure = ''
+    export GOCACHE=$TMPDIR/go-cache
+  '';
+
+  meta = {
+    description = "Vietnamese input method engine support for Fcitx";
+    homepage = "https://github.com/fcitx/fcitx5-bamboo";
+    license = lib.licenses.lgpl21Plus;
+    maintainers = with lib.maintainers; [ eclairevoyant ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-chewing.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-chewing.nix
new file mode 100644
index 000000000000..47d7dfad6bd5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-chewing.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, gettext
+, fcitx5
+, libchewing
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-chewing";
+  version = "5.1.1";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-boIkbtNLPTNXY9e5gdQklhJuDU36ZswOqY2X8nRKqho=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    gettext
+  ];
+
+  buildInputs = [
+    fcitx5
+    libchewing
+  ];
+
+  meta = with lib; {
+    description = "Chewing wrapper for Fcitx5";
+    homepage = "https://github.com/fcitx/fcitx5-chewing";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ xrelkd ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix
new file mode 100644
index 000000000000..385043ef9a29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix
@@ -0,0 +1,72 @@
+{ lib
+, mkDerivation
+, fetchurl
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, boost
+, libime
+, fcitx5
+, fcitx5-qt
+, fcitx5-lua
+, qtwebengine
+, opencc
+, curl
+, fmt
+, luaSupport ? true
+}:
+
+let
+  pyStrokeVer = "20121124";
+  pyStroke = fetchurl {
+    url = "http://download.fcitx-im.org/data/py_stroke-${pyStrokeVer}.tar.gz";
+    sha256 = "0j72ckmza5d671n2zg0psg7z9iils4gyxz7jgkk54fd4pyljiccf";
+  };
+  pyTableVer = "20121124";
+  pyTable = fetchurl {
+    url = "http://download.fcitx-im.org/data/py_table-${pyTableVer}.tar.gz";
+    sha256 = "011cg7wssssm6hm564cwkrrnck2zj5rxi7p9z5akvhg6gp4nl522";
+  };
+in
+
+mkDerivation rec {
+  pname = "fcitx5-chinese-addons";
+  version = "5.1.3";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-z+udRjvAZbnu6EcvvdaFVCr0OKLxFBJbgoYpH9QjrDI=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    boost
+    fcitx5-lua
+  ];
+
+  prePatch = ''
+    ln -s ${pyStroke} modules/pinyinhelper/$(stripHash ${pyStroke})
+    ln -s ${pyTable} modules/pinyinhelper/$(stripHash ${pyTable})
+  '';
+
+  buildInputs = [
+    fcitx5
+    fcitx5-qt
+    libime
+    curl
+    opencc
+    qtwebengine
+    fmt
+  ] ++ lib.optional luaSupport fcitx5-lua;
+
+  meta = with lib; {
+    description = "Addons related to Chinese, including IME previous bundled inside fcitx4";
+    homepage = "https://github.com/fcitx/fcitx5-chinese-addons";
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-configtool.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-configtool.nix
new file mode 100644
index 000000000000..b726a3515508
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-configtool.nix
@@ -0,0 +1,67 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, fcitx5
+, fcitx5-qt
+, qtx11extras
+, qtquickcontrols2
+, kwidgetsaddons
+, kdeclarative
+, kirigami2
+, isocodes
+, xkeyboardconfig
+, libxkbfile
+, libXdmcp
+, plasma5Packages
+, plasma-framework
+, kcmSupport ? true
+}:
+
+mkDerivation rec {
+  pname = "fcitx5-configtool";
+  version = "5.1.3";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-IwGlhIeON0SenW738p07LWZAzVDMtxOSMuUIAgfmTEg=";
+  };
+
+  cmakeFlags = [
+    "-DKDE_INSTALL_USE_QT_SYS_PATHS=ON"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  buildInputs = [
+    fcitx5
+    fcitx5-qt
+    qtx11extras
+    qtquickcontrols2
+    kirigami2
+    isocodes
+    xkeyboardconfig
+    libxkbfile
+    libXdmcp
+  ] ++ lib.optionals kcmSupport [
+    kdeclarative
+    kwidgetsaddons
+    plasma5Packages.kiconthemes
+    plasma-framework
+  ];
+
+  meta = with lib; {
+    description = "Configuration Tool for Fcitx5";
+    homepage = "https://github.com/fcitx/fcitx5-configtool";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+    mainProgram = "fcitx5-config-qt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-gtk.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-gtk.nix
new file mode 100644
index 000000000000..1036b28685c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-gtk.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, fcitx5
+, gobject-introspection
+, glib
+, gtk2
+, gtk3
+, gtk4
+, fmt
+, pcre
+, libuuid
+, libselinux
+, libsepol
+, libthai
+, libdatrie
+, libXdmcp
+, libxkbcommon
+, libepoxy
+, dbus
+, at-spi2-core
+, libXtst
+, withGTK2 ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-gtk";
+  version = "5.1.1";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Ex24cHTsYsZjP8o+vrCdgGogk1UotWpd8xaLZAqzgaQ=";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  cmakeFlags = [
+    "-DGOBJECT_INTROSPECTION_GIRDIR=share/gir-1.0"
+    "-DGOBJECT_INTROSPECTION_TYPELIBDIR=lib/girepository-1.0"
+  ] ++ lib.optional (! withGTK2) "-DENABLE_GTK2_IM_MODULE=off";
+
+  buildInputs = [
+    glib
+    gtk3
+    gtk4
+    fmt
+    fcitx5
+    pcre
+    libuuid
+    libselinux
+    libsepol
+    libthai
+    libdatrie
+    libXdmcp
+    libxkbcommon
+    libepoxy
+    dbus
+    at-spi2-core
+    libXtst
+  ] ++ lib.optional withGTK2 gtk2;
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    gobject-introspection
+  ];
+
+  meta = with lib; {
+    description = "Fcitx5 gtk im module and glib based dbus client library";
+    homepage = "https://github.com/fcitx/fcitx5-gtk";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-hangul.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-hangul.nix
new file mode 100644
index 000000000000..9a1a2c8eca24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-hangul.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, gettext
+, fcitx5
+, libhangul
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-hangul";
+  version = "5.1.1";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-3gkZh+ZzgTdpTbQe92gxJlG0x6Yhl7LfMiFEq5mb92o=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    gettext
+  ];
+
+  buildInputs = [
+    fcitx5
+    libhangul
+  ];
+
+  passthru.tests = {
+    inherit (nixosTests) fcitx5;
+  };
+
+  meta = with lib; {
+    description = "Hangul wrapper for Fcitx5";
+    homepage = "https://github.com/fcitx/fcitx5-hangul";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ xrelkd ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-lua.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-lua.nix
new file mode 100644
index 000000000000..45d7cc3288a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-lua.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, fcitx5
+, lua
+, gettext
+}:
+stdenv.mkDerivation rec {
+  pname = "fcitx5-lua";
+  version = "5.0.12";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-tnGPjMc8oL/P6Vyt7eNYWcPMhYhdpFWtCF4E3dJYGPw=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  buildInputs = [ fcitx5 lua gettext ];
+
+  passthru = {
+    extraLdLibraries = [ lua ];
+  };
+
+  meta = with lib; {
+    description = "Lua support for Fcitx 5";
+    homepage = "https://github.com/fcitx/fcitx5-lua";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-m17n.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-m17n.nix
new file mode 100644
index 000000000000..19336e58d1dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-m17n.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, pkg-config
+, fcitx5
+, m17n_lib
+, m17n_db
+, gettext
+, fmt
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-m17n";
+  version = "5.1.0";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-qo3tS0tjQCD7+CoNvjyvhQPAfa38o7/f/MjqRkIL2R0=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    pkg-config
+    gettext
+  ];
+
+  buildInputs = [
+    fcitx5
+    m17n_db
+    m17n_lib
+    fmt
+  ];
+
+  passthru.tests = {
+    inherit (nixosTests) fcitx5;
+  };
+
+  meta = with lib; {
+    description = "m17n support for Fcitx5";
+    homepage = "https://github.com/fcitx/fcitx5-m17n";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ Technical27 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-mozc.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-mozc.nix
new file mode 100644
index 000000000000..e58db09f706c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-mozc.nix
@@ -0,0 +1,129 @@
+{ lib, clangStdenv, fetchFromGitHub, fetchurl, fetchpatch
+, python3Packages, ninja, pkg-config, protobuf, zinnia, qt5, fcitx5
+, jsoncpp, gtest, which, gtk2, unzip, abseil-cpp, breakpad, nixosTests }:
+let
+  inherit (python3Packages) python gyp six;
+  utdic = fetchurl {
+    url = "https://osdn.net/downloads/users/39/39056/mozcdic-ut-20220904.tar.bz2";
+    sha256 = "sha256-pmLBCcw2Zsirzl1PjYkviRIZoyfUz5rpESeABDxuhtU=";
+  };
+  japanese_usage_dictionary = fetchFromGitHub {
+    owner = "hiroyuki-komatsu";
+    repo = "japanese-usage-dictionary";
+    rev = "e5b3425575734c323e1d947009dd74709437b684";
+    sha256 = "0pyrpz9c8nxccwpgyr36w314mi8h132cis8ijvlqmmhqxwsi30hm";
+  };
+  zipcode_rel = "202011";
+  jigyosyo = fetchurl {
+    url = "https://osdn.net/projects/ponsfoot-aur/storage/mozc/jigyosyo-${zipcode_rel}.zip";
+    sha256 = "j7MkNtd4+QTi91EreVig4/OV0o5y1+KIjEJBEmLK/mY=";
+  };
+  x-ken-all = fetchurl {
+    url =
+      "https://osdn.net/projects/ponsfoot-aur/storage/mozc/x-ken-all-${zipcode_rel}.zip";
+    sha256 = "ExS0Cg3rs0I9IOVbZHLt8UEfk8/LmY9oAHPVVlYuTPw=";
+  };
+
+in clangStdenv.mkDerivation {
+  pname = "fcitx5-mozc";
+  version = "2.26.4220.102";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = "mozc";
+    rev = "1882e33b61673b66d63277f82b4c80ae4e506c10";
+    sha256 = "R+w0slVFpqtt7PIr1pyupJjRoQsABVZiMdZ9fKGKAqw=";
+  };
+
+  nativeBuildInputs = [ gyp ninja python pkg-config qt5.wrapQtAppsHook six which unzip ];
+
+  buildInputs = [ protobuf zinnia qt5.qtbase fcitx5 abseil-cpp jsoncpp gtest gtk2 ];
+
+  patches = [
+    # Support linking system abseil-cpp
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/mozc/-/raw/debian/sid/debian/patches/0007-Update-src-base-absl.gyp.patch";
+      sha256 = "UiS0UScDKyAusXOhc7Bg8dF8ARQQiVTylEhAOxqaZt8=";
+    })
+
+  ];
+
+  postUnpack = ''
+    unzip ${x-ken-all} -d $sourceRoot/src/
+    unzip ${jigyosyo} -d $sourceRoot/src/
+    mkdir $TMPDIR/unpack
+    tar xf ${utdic} -C $TMPDIR/unpack
+    cat $TMPDIR/unpack/mozcdic-ut-20220904/mozcdic-ut-20220904.txt >> $sourceRoot/src/data/dictionary_oss/dictionary00.txt
+
+    rmdir $sourceRoot/src/third_party/breakpad/
+    ln -s ${breakpad} $sourceRoot/src/third_party/breakpad
+    rmdir $sourceRoot/src/third_party/gtest/
+    ln -s ${gtest} $sourceRoot/src/third_party/gtest
+    rmdir $sourceRoot/src/third_party/gyp/
+    ln -s ${gyp} $sourceRoot/src/third_party/gyp
+    rmdir $sourceRoot/src/third_party/japanese_usage_dictionary/
+    ln -s ${japanese_usage_dictionary} $sourceRoot/src/third_party/japanese_usage_dictionary
+  '';
+
+  # Copied from https://github.com/archlinux/svntogit-community/blob/packages/fcitx5-mozc/trunk/PKGBUILD
+  configurePhase = ''
+    cd src
+    export GYP_DEFINES="document_dir=$out/share/doc/mozc use_libzinnia=1 use_libprotobuf=1 use_libabseil=1"
+
+    # disable fcitx4
+    rm unix/fcitx/fcitx.gyp
+
+    # gen zip code seed
+    PYTHONPATH="$PWD:$PYTHONPATH" python dictionary/gen_zip_code_seed.py --zip_code="x-ken-all.csv" --jigyosyo="JIGYOSYO.CSV" >> data/dictionary_oss/dictionary09.txt
+
+    # use libstdc++ instead of libc++
+    sed "/stdlib=libc++/d;/-lc++/d" -i gyp/common.gypi
+
+    # run gyp
+    python build_mozc.py gyp --gypdir=${gyp}/bin --server_dir=$out/lib/mozc
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    python build_mozc.py build -c Release \
+      server/server.gyp:mozc_server \
+      gui/gui.gyp:mozc_tool \
+      unix/fcitx5/fcitx5.gyp:fcitx5-mozc
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    export PREFIX=$out
+    export _bldtype=Release
+    ../scripts/install_server
+    install -d $out/share/licenses/fcitx5-mozc
+    head -n 29 server/mozc_server.cc > $out/share/licenses/fcitx5-mozc/LICENSE
+    install -m644 data/installer/*.html $out/share/licenses/fcitx5-mozc/
+    install -d $out/share/fcitx5/addon
+    install -d $out/share/fcitx5/inputmethod
+    install -d $out/lib/fcitx5
+    ../scripts/install_fcitx5
+
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    wrapQtApp $out/lib/mozc/mozc_tool
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) fcitx5;
+  };
+
+  meta = with lib; {
+    description = "Fcitx5 Module of A Japanese Input Method for Chromium OS, Windows, Mac and Linux (the Open Source Edition of Google Japanese Input)";
+    homepage = "https://github.com/fcitx/mozc";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ berberman govanify ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-qt.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-qt.nix
new file mode 100644
index 000000000000..202886e4e8e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-qt.nix
@@ -0,0 +1,60 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, fcitx5
+, qtx11extras
+, libxcb
+, libXdmcp
+, qtbase
+, qt6
+, wayland
+}:
+
+mkDerivation rec {
+  pname = "fcitx5-qt";
+  version = "5.1.4";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-bVH2US/uEZGERslnAh/fyUbzR9fK1UfG4J+mOmrIE8Y=";
+  };
+
+  preConfigure = ''
+    substituteInPlace qt5/platforminputcontext/CMakeLists.txt \
+      --replace \$"{CMAKE_INSTALL_QT5PLUGINDIR}" $out/${qtbase.qtPluginPrefix}
+    substituteInPlace qt6/platforminputcontext/CMakeLists.txt \
+      --replace \$"{CMAKE_INSTALL_QT6PLUGINDIR}" $out/${qt6.qtbase.qtPluginPrefix}
+  '';
+
+  cmakeFlags = [
+    # adding qt6 to buildInputs would result in error: detected mismatched Qt dependencies
+    "-DCMAKE_PREFIX_PATH=${qt6.qtbase};${qt6.qtwayland}"
+    "-DENABLE_QT4=0"
+    "-DENABLE_QT6=1"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  buildInputs = [
+    fcitx5
+    qtx11extras
+    libxcb
+    libXdmcp
+    wayland
+  ];
+
+  meta = with lib; {
+    description = "Fcitx5 Qt Library";
+    homepage = "https://github.com/fcitx/fcitx5-qt";
+    license = with licenses; [ lgpl21Plus bsd3 ];
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
new file mode 100644
index 000000000000..3698abeed8aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, cmake
+, extra-cmake-modules
+, gettext
+, fcitx5
+, librime
+, rime-data
+, symlinkJoin
+, rimeDataPkgs ? [ rime-data ]
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-rime";
+  version = "5.1.4";
+
+  src = fetchurl {
+    url = "https://download.fcitx-im.org/fcitx5/${pname}/${pname}-${version}.tar.xz";
+    hash = "sha256-tbCIWenH5brJUVIsmOiw/E/uIXAWwK1yangIVlkeOAs=";
+  };
+
+  cmakeFlags = [
+    "-DRIME_DATA_DIR=${placeholder "out"}/share/rime-data"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    pkg-config
+    gettext
+  ];
+
+  buildInputs = [
+    fcitx5
+    librime
+  ];
+
+  rimeDataDrv = symlinkJoin {
+    name = "fcitx5-rime-data";
+    paths = rimeDataPkgs;
+  };
+
+  postInstall = ''
+    cp -r "${rimeDataDrv}/share/rime-data/." $out/share/rime-data/
+  '';
+
+  meta = with lib; {
+    description = "RIME support for Fcitx5";
+    homepage = "https://github.com/fcitx/fcitx5-rime";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-skk.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-skk.nix
new file mode 100644
index 000000000000..31ecbed35bc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-skk.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, cmake
+, extra-cmake-modules
+, gettext
+, fcitx5
+, fcitx5-qt
+, libskk
+, qtbase
+, skk-dicts
+, wrapQtAppsHook
+, enableQt ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-skk";
+  version = "5.1.1";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-a+ZsuFEan61U0oOuhrTFoK5J4Vd0jj463jQ8Mk7TdbA=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    gettext
+    pkg-config
+  ] ++ lib.optional enableQt wrapQtAppsHook;
+
+  buildInputs = [
+    fcitx5
+    libskk
+  ] ++ lib.optionals enableQt [
+    fcitx5-qt
+    qtbase
+  ];
+
+  cmakeFlags = [
+    "-DENABLE_QT=${toString enableQt}"
+    "-DSKK_DEFAULT_PATH=${skk-dicts}/share/SKK-JISYO.L"
+  ];
+
+  meta = with lib; {
+    description = "Input method engine for Fcitx5, which uses libskk as its backend";
+    homepage = "https://github.com/fcitx/fcitx5-skk";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ milran ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-table-extra.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-table-extra.nix
new file mode 100644
index 000000000000..0320fa5c4f01
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-table-extra.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, gettext
+, libime
+, boost
+, fcitx5
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-table-extra";
+  version = "5.1.3";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    hash = "sha256-w4JFZvYFL3fHrDgZqYND2bl3lT9/O1GXgfOwR7WyzWY=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    gettext
+    libime
+    boost
+    fcitx5
+  ];
+
+  meta = with lib; {
+    description = "Extra table for Fcitx, including Boshiamy, Zhengma, Cangjie, and Quick";
+    homepage = "https://github.com/fcitx/fcitx5-table-extra";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-table-other.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-table-other.nix
new file mode 100644
index 000000000000..b0129a923438
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-table-other.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, gettext
+, libime
+, boost
+, fcitx5
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-table-other";
+  version = "5.1.0";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ymHAKaPmQckxM/XHoDOVSzEWpyQGb7zVG21CDwNfyjg=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    gettext
+    libime
+    boost
+    fcitx5
+  ];
+
+  meta = with lib; {
+    description = "Some other tables for Fcitx";
+    homepage = "https://github.com/fcitx/fcitx5-table-other";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-unikey.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-unikey.nix
new file mode 100644
index 000000000000..aa87d725f104
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/fcitx5-unikey.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, fcitx5
+, fcitx5-qt
+, gettext
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-unikey";
+  version = "5.1.2";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = "fcitx5-unikey";
+    rev = version;
+    sha256 = "sha256-tLooADS8HojS9i178i5FJVqZtKrTXlzOBPlE9K49Tjc=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules wrapQtAppsHook ];
+
+  buildInputs = [ fcitx5 fcitx5-qt gettext ];
+
+  meta = with lib; {
+    description = "Unikey engine support for Fcitx5";
+    homepage = "https://github.com/fcitx/fcitx5-unikey";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ berberman ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/update.py b/nixpkgs/pkgs/tools/inputmethods/fcitx5/update.py
new file mode 100755
index 000000000000..8fa59d2926e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/update.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p nix-update python3Packages.requests
+
+import requests
+import subprocess
+
+REPOS = [
+        "libime",
+        "xcb-imdkit",
+
+        "fcitx5",
+        "fcitx5-anthy",
+        "fcitx5-chewing",
+        "fcitx5-chinese-addons",
+        "fcitx5-configtool",
+        "fcitx5-gtk",
+        "fcitx5-hangul",
+        "fcitx5-lua",
+        "fcitx5-m17n",
+        "fcitx5-qt",
+        "fcitx5-rime",
+        "fcitx5-skk",
+        "fcitx5-table-extra",
+        "fcitx5-table-other",
+        "fcitx5-unikey"
+        ]
+
+OWNER = "fcitx"
+
+def get_latest_tag(repo, owner=OWNER):
+    r = requests.get('https://api.github.com/repos/{}/{}/tags'.format(owner,repo))
+    return r.json()[0].get("name")
+
+def main():
+    for repo in REPOS:
+        rev = get_latest_tag(repo)
+        if repo == "fcitx5-qt":
+            subprocess.run(["nix-update", "--commit", "--version", rev, "libsForQt5.{}".format(repo)])
+        else:
+            subprocess.run(["nix-update", "--commit", "--version", rev, repo])
+
+if __name__ == "__main__":
+    main ()
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx5/with-addons.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx5/with-addons.nix
new file mode 100644
index 000000000000..75fac87b6285
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx5/with-addons.nix
@@ -0,0 +1,47 @@
+{ lib
+, symlinkJoin
+, makeBinaryWrapper
+, fcitx5
+, withConfigtool ? true
+, fcitx5-configtool
+, fcitx5-qt
+, fcitx5-gtk
+, addons ? [ ]
+}:
+
+symlinkJoin {
+  name = "fcitx5-with-addons-${fcitx5.version}";
+
+  paths = [
+    fcitx5
+    fcitx5-qt
+    fcitx5-gtk
+  ] ++ lib.optionals withConfigtool [
+    fcitx5-configtool
+  ] ++ addons;
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/fcitx5 \
+      --prefix FCITX_ADDON_DIRS : "$out/lib/fcitx5" \
+      --suffix XDG_DATA_DIRS : "$out/share" \
+      --suffix PATH : "$out/bin" \
+      --suffix LD_LIBRARY_PATH : "${lib.makeLibraryPath (lib.flatten (map (x: x.extraLdLibraries or []) addons))}"
+
+    ${lib.optionalString withConfigtool ''
+      # Configtool call libexec/fcitx5-qt5-gui-wrapper for gui addons in FCITX_ADDON_DIRS
+      wrapProgram $out/bin/fcitx5-config-qt --prefix FCITX_ADDON_DIRS : "$out/lib/fcitx5"
+    ''}
+
+    desktop=share/applications/org.fcitx.Fcitx5.desktop
+    autostart=etc/xdg/autostart/org.fcitx.Fcitx5.desktop
+    rm $out/$desktop
+    rm $out/$autostart
+    cp ${fcitx5}/$desktop $out/$desktop
+    sed -i $out/$desktop -e "s|^Exec=.*|Exec=$out/bin/fcitx5|g"
+    ln -s $out/$desktop $out/$autostart
+  '';
+
+  inherit (fcitx5) meta;
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile b/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile
new file mode 100644
index 000000000000..7cee961df4a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile
@@ -0,0 +1,19 @@
+source 'https://rubygems.org'
+gem "fusuma", ">=3.0.0"
+gem "fusuma-plugin-appmatcher"
+gem "fusuma-plugin-keypress"
+gem "fusuma-plugin-sendkey"
+gem "fusuma-plugin-wmctrl"
+
+# I've not activated the following plugins for the reasons given below.
+
+# tap has been archived by upstream
+# gem "fusuma-plugin-tap"
+
+# touchscreen needs specific h/w support I don't have access to, so I can't confirm
+# if it's problem free.  A quick check didn't reveal any problems.
+#gem "fusuma-plugin-touchscreen"
+
+# thumbsense pulls in remap, and at best remap requires further configuration to allow the use access to event devices.
+#gem "fusuma-plugin-thumbsense"
+#gem "fusuma-plugin-remap"
diff --git a/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile.lock b/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile.lock
new file mode 100644
index 000000000000..283d4c3fa5e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile.lock
@@ -0,0 +1,32 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    fusuma (3.3.1)
+    fusuma-plugin-appmatcher (0.6.1)
+      fusuma (>= 3.0)
+      rexml
+      ruby-dbus
+    fusuma-plugin-keypress (0.9.0)
+      fusuma (>= 3.1)
+    fusuma-plugin-sendkey (0.10.1)
+      fusuma (>= 3.1)
+      revdev
+    fusuma-plugin-wmctrl (1.3.1)
+      fusuma (>= 3.1)
+    revdev (0.2.1)
+    rexml (3.2.6)
+    ruby-dbus (0.23.1)
+      rexml
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fusuma (>= 3.0.0)
+  fusuma-plugin-appmatcher
+  fusuma-plugin-keypress
+  fusuma-plugin-sendkey
+  fusuma-plugin-wmctrl
+
+BUNDLED WITH
+   2.4.22
diff --git a/nixpkgs/pkgs/tools/inputmethods/fusuma/default.nix b/nixpkgs/pkgs/tools/inputmethods/fusuma/default.nix
new file mode 100644
index 000000000000..0622ce699f8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fusuma/default.nix
@@ -0,0 +1,24 @@
+{ lib, bundlerApp, bundlerUpdateScript, makeWrapper, gnugrep, libinput }:
+
+bundlerApp {
+  pname = "fusuma";
+  gemdir = ./.;
+  exes = [ "fusuma" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram "$out/bin/fusuma" \
+      --prefix PATH : ${lib.makeBinPath [ gnugrep libinput ]}
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "fusuma";
+
+  meta = with lib; {
+    description = "Multitouch gestures with libinput driver on X11, Linux";
+    homepage = "https://github.com/iberianpig/fusuma";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nicknovitski Br1ght0ne ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fusuma/gemset.nix b/nixpkgs/pkgs/tools/inputmethods/fusuma/gemset.nix
new file mode 100644
index 000000000000..47d5f6215995
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fusuma/gemset.nix
@@ -0,0 +1,87 @@
+{
+  fusuma = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13pbvmkjriq6myynv4gfismiqa9y7bfbvvrfcv25670l4zyiakhm";
+      type = "gem";
+    };
+    version = "3.3.1";
+  };
+  fusuma-plugin-appmatcher = {
+    dependencies = ["fusuma" "rexml" "ruby-dbus"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qkir4a657znq0fnx91lik7bw5kyq54jwhiy2zrlplln78xs5yai";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  fusuma-plugin-keypress = {
+    dependencies = ["fusuma"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0as95haqa943i740xs7czcaibb8lvy4gn6kr8nbldq20nly64bih";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  fusuma-plugin-sendkey = {
+    dependencies = ["fusuma" "revdev"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rdpxq4nanw85x1djdanwnz46b19fr46kdlkkgbxa4dnjk0zx4pp";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  fusuma-plugin-wmctrl = {
+    dependencies = ["fusuma"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rgz1d6ahg5i9sr4z2kab5qk7pm3rm0h7r1vwkygi75rv2r3jy86";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  revdev = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b6zg6vqlaik13fqxxcxhd4qnkfgdjnl4wy3a1q67281bl0qpsz9";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  ruby-dbus = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hf9y5lbi1xcadc2fw87wlif75s1359c2wwlvvd0gag7cq5dm0pm";
+      type = "gem";
+    };
+    version = "0.23.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/gebaar-libinput/default.nix b/nixpkgs/pkgs/tools/inputmethods/gebaar-libinput/default.nix
new file mode 100644
index 000000000000..9a808535fe04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/gebaar-libinput/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, pkg-config, cmake, libinput, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "gebaar-libinput";
+  version = "0.0.5";
+
+  src = fetchFromGitHub {
+    owner = "Coffee2CodeNL";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1kqcgwkia1p195xr082838dvj1gqif9d63i8a52jb0lc32zzizh6";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # fix build with gcc 11+
+    (fetchpatch {
+      url = "https://github.com/9ary/gebaar-libinput-fork/commit/25cac08a5f1aed1951b03de12fa0010a0964967d.patch";
+      hash = "sha256-CtgfMTBCXotiPAXc7cA3h+7Kb0NHFi/q7w72IY32CyA=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config cmake ];
+  buildInputs = [ libinput zlib ];
+
+  meta = with lib; {
+    description = "Gebaar, A Super Simple WM Independent Touchpad Gesture Daemon for libinput";
+    homepage = "https://github.com/Coffee2CodeNL/gebaar-libinput";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ colemickens lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/hime/default.nix b/nixpkgs/pkgs/tools/inputmethods/hime/default.nix
new file mode 100644
index 000000000000..685ac169e065
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/hime/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, fetchFromGitHub
+, pkg-config
+, which
+, gtk2
+, gtk3
+, qt5
+, libXtst
+, lib
+, libchewing
+, unixtools
+, anthy
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hime";
+  version = "0.9.11";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = "hime-ime";
+    rev = "v${version}";
+    sha256 = "sha256-fCqet+foQjI+LpTQ/6Egup1GzXELlL2hgbh0dCKLwPI=";
+  };
+
+  nativeBuildInputs = [ which pkg-config unixtools.whereis ];
+  buildInputs = [ libXtst gtk2 gtk3 qt5.qtbase libchewing anthy ];
+
+  preConfigure = "patchShebangs configure";
+  configureFlags = [ "--disable-lib64" "--disable-qt5-immodule" ];
+  dontWrapQtApps = true;
+  postFixup = ''
+    hime_rpath=$(patchelf --print-rpath $out/bin/hime)
+    patchelf --set-rpath $out/lib/hime:$hime_rpath $out/bin/hime
+  '';
+
+
+  meta = with lib; {
+    homepage = "http://hime-ime.github.io/";
+    downloadPage = "https://github.com/hime-ime/hime/downloads";
+    description = "A useful input method engine for Asia region";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ yanganto ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix
new file mode 100644
index 000000000000..ab71af957481
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv
+, fetchurl
+, gettext
+, pkg-config
+, wrapGAppsHook
+, anthy
+, ibus
+, glib
+, gobject-introspection
+, gtk3
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-anthy";
+  version = "1.5.15";
+
+  src = fetchurl {
+    url = "https://github.com/ibus/ibus-anthy/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-WMTm1YNqSsnjOqnoTljE3rZ62pjztUSyRAxXgyN+2Ys=";
+  };
+
+  buildInputs = [
+    anthy
+    glib
+    gtk3
+    ibus
+    (python3.withPackages (ps: [
+      ps.pygobject3
+      (ps.toPythonModule ibus)
+    ]))
+  ];
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  configureFlags = [
+    "--with-anthy-zipcode=${anthy}/share/anthy/zipcode.t"
+  ];
+
+  postFixup = ''
+    substituteInPlace $out/share/ibus/component/anthy.xml --replace \$\{exec_prefix\} $out
+  '';
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description = "IBus interface to the anthy input method";
+    homepage = "https://github.com/fujiwarat/ibus-anthy";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ gebner ericsagnes ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-bamboo/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-bamboo/default.nix
new file mode 100644
index 000000000000..95ad99ca8fd5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-bamboo/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv
+, fetchFromGitHub
+, glib
+, gettext
+, xorg
+, pkg-config
+, wrapGAppsHook
+, gtk3
+, go
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-bamboo";
+  version = "0.8.2-rc18";
+
+  src = fetchFromGitHub {
+    owner = "BambooEngine";
+    repo = pname;
+    rev = "v" + lib.toUpper version;
+    sha256 = "sha256-5FSGPUJtUdYyeqJenvKaMIJcvon91I//62fnTCXcdig=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    pkg-config
+    wrapGAppsHook
+    go
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    xorg.libX11
+    xorg.xorgproto
+    xorg.libXtst
+    xorg.libXi
+  ];
+
+  preConfigure = ''
+    export GOCACHE="$TMPDIR/go-cache"
+    sed -i "s,/usr,$out," bamboo.xml
+  '';
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description = "A Vietnamese IME for IBus";
+    homepage = "https://github.com/BambooEngine/ibus-bamboo";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ superbo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-cangjie/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-cangjie/default.nix
new file mode 100644
index 000000000000..0d7f06039a09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-cangjie/default.nix
@@ -0,0 +1,74 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, gettext
+, pkg-config
+, wrapGAppsHook
+, ibus
+, glib
+, gobject-introspection
+, gtk3
+, python3
+, autoreconfHook
+, intltool
+}:
+
+let
+  pythonModules = with python3.pkgs; [
+    pygobject3
+    pycangjie
+    (toPythonModule ibus)
+  ];
+
+  # Upstream builds Python packages as a part of a non-python
+  # autotools build, making it awkward to rely on Nixpkgs Python builders.
+  # Hence we manually set up PYTHONPATH.
+  pythonPath = "$out/${python3.sitePackages}" + ":" + python3.pkgs.makePythonPath pythonModules;
+
+in
+stdenv.mkDerivation {
+  pname = "ibus-cangjie";
+  version = "unstable-2023-07-25";
+
+  src = fetchFromGitHub {
+    owner = "Cangjians";
+    repo = "ibus-cangjie";
+    rev = "46c36f578047bb3cb2ce777217abf528649bc58d";
+    sha256 = "sha256-msVqWougc40bVXIonJA6K/VgurnDeR2TdtGKfd9rzwM=";
+  };
+
+  buildInputs = [
+    glib
+    gtk3
+    ibus
+    python3
+  ] ++ pythonModules;
+
+  nativeBuildInputs = [
+    autoreconfHook
+    intltool
+    gettext
+    gobject-introspection
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  # Upstream builds Python packages as a part of a non-python
+  # autotools build, making it awkward to rely on Nixpkgs Python builders.
+  postInstall = ''
+    gappsWrapperArgs+=(--prefix PYTHONPATH : "${pythonPath}")
+  '';
+
+  postFixup = ''
+    wrapGApp $out/lib/ibus-cangjie/ibus-engine-cangjie
+  '';
+
+  meta = {
+    isIbusEngine = true;
+    description = "An IBus engine for users of the Cangjie and Quick input methods";
+    homepage = "https://github.com/Cangjians/ibus-cangjie";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ adisbladis ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix
new file mode 100644
index 000000000000..af3e1edd6399
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv
+, fetchurl
+, substituteAll
+, appstream-glib
+, gettext
+, pkg-config
+, wrapGAppsHook
+, gtk3
+, ibus
+, libhangul
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-hangul";
+  version = "1.5.4";
+
+  src = fetchurl {
+    url = "https://github.com/choehwanjin/ibus-hangul/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1q6g2pnrn5gqn9jqnm3975v9hh60hc5gn9x3zbrdjgy0n3wpxwm9";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      libhangul = "${libhangul}/lib/libhangul.so.1";
+    })
+  ];
+
+  nativeBuildInputs = [
+    appstream-glib
+    gettext
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    ibus
+    libhangul
+    (python3.withPackages (pypkgs: with pypkgs; [
+      pygobject3
+      (toPythonModule ibus)
+    ]))
+  ];
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description = "Ibus Hangul engine";
+    homepage = "https://github.com/choehwanjin/ibus-hangul";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ericsagnes ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/fix-paths.patch b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/fix-paths.patch
new file mode 100644
index 000000000000..7487d074d559
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/fix-paths.patch
@@ -0,0 +1,13 @@
+diff --git a/setup/main.py b/setup/main.py
+index 8d581cd..2ac47b9 100644
+--- a/setup/main.py
++++ b/setup/main.py
+@@ -37,7 +37,7 @@
+ 
+ def get_hangul_keyboard_list():
+     from ctypes import CDLL, c_int, c_char_p
+-    libhangul = CDLL('libhangul.so.1')
++    libhangul = CDLL('@libhangul@')
+     libhangul.hangul_ic_get_n_keyboards.argtypes = []
+     libhangul.hangul_ic_get_n_keyboards.restype = c_int
+     libhangul.hangul_ic_get_keyboard_id.argtypes = [c_int]
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix
new file mode 100644
index 000000000000..00ce8df19367
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl
+, vala, intltool, pkg-config
+, libkkc, ibus, skk-dicts
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-kkc";
+  version = "1.5.22";
+
+  src = fetchurl {
+    url = "${meta.homepage}/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "1kj74c9zy9yxkjx7pz96mzqc13cf10yfmlgprr8sfd4ay192bzi2";
+  };
+
+  nativeBuildInputs = [
+    vala intltool pkg-config
+  ];
+
+  buildInputs = [ libkkc ibus skk-dicts gtk3 ];
+
+  postInstall = ''
+    ln -s ${skk-dicts}/share $out/share/skk
+  '';
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description  = "libkkc (Japanese Kana Kanji input method) engine for ibus";
+    homepage     = "https://github.com/ueno/ibus-kkc";
+    license      = licenses.gpl2;
+    platforms    = platforms.linux;
+    maintainers  = with maintainers; [ vanzef ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix
new file mode 100644
index 000000000000..b00ca264bc15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, gettext
+, pkg-config
+, wrapGAppsHook
+, sqlite
+, libpinyin
+, db
+, ibus
+, glib
+, gtk3
+, python3
+, lua
+, opencc
+, libsoup_3
+, json-glib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-libpinyin";
+  version = "1.15.7";
+
+  src = fetchFromGitHub {
+    owner = "libpinyin";
+    repo = "ibus-libpinyin";
+    rev = version;
+    hash = "sha256-Sr0zB6VeEYGDu1gx2kTVoaTm131F4K+/QH/+ibcbMT8=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gettext
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  configureFlags = [
+    "--enable-cloud-input-mode"
+    "--enable-opencc"
+  ];
+
+  buildInputs = [
+    ibus
+    glib
+    sqlite
+    libpinyin
+    (python3.withPackages (pypkgs: with pypkgs; [
+      pygobject3
+      (toPythonModule ibus)
+    ]))
+    gtk3
+    db
+    lua
+    opencc
+    libsoup_3
+    json-glib
+  ];
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description = "IBus interface to the libpinyin input method";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ linsui ericsagnes ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libthai/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libthai/default.nix
new file mode 100644
index 000000000000..2e322d24a7ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libthai/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, pkg-config, ibus, gtk3, libthai }:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-libthai";
+  version = "0.1.5";
+
+  src = fetchurl {
+    url = "https://linux.thai.net/pub/ThaiLinux/software/libthai/ibus-libthai-${version}.tar.xz";
+    sha256 = "sha256-egAxttjwuKiDoIuJluoOTJdotFZJe6ZOmJgdiFCAwx0=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gtk3 ibus libthai ];
+
+  meta = with lib; {
+    isIbusEngine = true;
+    homepage = "https://linux.thai.net/projects/ibus-libthai";
+    description = "Thai input method engine for IBus";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix
new file mode 100644
index 000000000000..eea671dc7b55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, ibus
+, gtk3
+, m17n_lib
+, m17n_db
+, gettext
+, python3
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-m17n";
+  version = "1.4.27";
+
+  src = fetchFromGitHub {
+    owner = "ibus";
+    repo = "ibus-m17n";
+    rev = version;
+    sha256 = "sha256-A8XxmYEi7OuJk1BhXCtk/hx5/JOqg2sJ6yE9gzaTRNA=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gettext
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    ibus
+    gtk3
+    m17n_lib
+    m17n_db
+    (python3.withPackages (ps: [
+      ps.pygobject3
+      (ps.toPythonModule ibus)
+    ]))
+  ];
+
+  configureFlags = [
+    "--with-gtk=3.0"
+  ];
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description = "m17n engine for ibus";
+    homepage = "https://github.com/ibus/ibus-m17n";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ericsagnes ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix
new file mode 100644
index 000000000000..220c89ca175d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, buildBazelPackage
+, fetchFromGitHub
+, qt6
+, pkg-config
+, bazel
+, ibus
+, unzip
+, xdg-utils
+}:
+let
+  zip-codes = fetchFromGitHub {
+    owner = "musjj";
+    repo = "jp-zip-codes";
+    rev = "a1eed9bae0ba909c8c8f5387008b08ff490f5e57";
+    hash = "sha256-VfI8qAMPPCC2H4vjm4a6sAmSwc1YkXlMyLm1cnufvrU=";
+  };
+in
+buildBazelPackage rec {
+  pname = "ibus-mozc";
+  version = "2.29.5268.102";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "mozc";
+    rev = version;
+    hash = "sha256-B7hG8OUaQ1jmmcOPApJlPVcB8h1Rw06W5LAzlTzI9rU=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ qt6.wrapQtAppsHook pkg-config unzip ];
+
+  buildInputs = [ ibus qt6.qtbase ];
+
+  dontAddBazelOpts = true;
+  removeRulesCC = false;
+
+  inherit bazel;
+
+  fetchAttrs = {
+    sha256 = "sha256-17QHh1MJUu8OK/T+WSpLXEx83DmRORLN7yLzILqP7vw=";
+
+    # remove references of buildInputs
+    preInstall = ''
+      rm -rv $bazelOut/external/{ibus,qt_linux}
+    '';
+  };
+
+  bazelFlags = [ "--config" "oss_linux" "--compilation_mode" "opt" ];
+
+  bazelTargets = [ "package" ];
+
+  postPatch = ''
+    substituteInPlace src/config.bzl \
+      --replace-fail "/usr/bin/xdg-open" "${xdg-utils}/bin/xdg-open" \
+      --replace-fail "/usr" "$out"
+    substituteInPlace src/WORKSPACE.bazel \
+      --replace-fail "https://www.post.japanpost.jp/zipcode/dl/kogaki/zip/ken_all.zip" "file://${zip-codes}/ken_all.zip" \
+      --replace-fail "https://www.post.japanpost.jp/zipcode/dl/jigyosyo/zip/jigyosyo.zip" "file://${zip-codes}/jigyosyo.zip"
+  '';
+
+  preConfigure = ''
+    cd src
+  '';
+
+  buildAttrs.installPhase = ''
+    runHook preInstall
+
+    unzip bazel-bin/unix/mozc.zip -x "tmp/*" -d /
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    inherit zip-codes;
+  };
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description = "Japanese input method from Google";
+    homepage = "https://github.com/google/mozc";
+    license = licenses.free;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ gebner ericsagnes pineapplehunter ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix
new file mode 100644
index 000000000000..774978929b40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, gdk-pixbuf
+, glib
+, ibus
+, libnotify
+, librime
+, pkg-config
+, rime-data
+, symlinkJoin
+, rimeDataPkgs ? [ rime-data ]
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-rime";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "rime";
+    repo = "ibus-rime";
+    rev = version;
+    sha256 = "0gdxg6ia0i31jn3cvh1nrsjga1j31hf8a2zfgg8rzn25chrfr319";
+  };
+
+  buildInputs = [ gdk-pixbuf glib ibus libnotify librime ];
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  cmakeFlags = [ "-DRIME_DATA_DIR=${placeholder "out"}/share/rime-data" ];
+
+  rimeDataDrv = symlinkJoin {
+    name = "ibus-rime-data";
+    paths = rimeDataPkgs;
+  };
+
+  postInstall = ''
+    cp -r "${rimeDataDrv}/share/rime-data/." $out/share/rime-data/
+  '';
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description = "Rime input method engine for IBus";
+    homepage = "https://rime.im/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pmy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix
new file mode 100644
index 000000000000..40c33aff4011
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchgit, fetchFromGitHub, pkg-config, ibus, ibus-table, python3, cmake }:
+
+let
+  src = fetchFromGitHub {
+    owner = "definite";
+    repo = "ibus-table-chinese";
+    rev = "f1f6a3384f021caa3b84c517e2495086f9c34507";
+    sha256 = "14wpw3pvyrrqvg7al37jk2dxqfj9r4zf88j8k2n2lmdc50f3xs7k";
+  };
+
+  cmakeFedoraSrc = fetchgit {
+    url = "https://pagure.io/cmake-fedora.git";
+    rev = "7d5297759aef4cd086bdfa30cf6d4b2ad9446992";
+    sha256 = "0mx9jvxpiva9v2ffaqlyny48iqr073h84yw8ln43z2avv11ipr7n";
+  };
+in stdenv.mkDerivation {
+  pname = "ibus-table-chinese";
+  version = "1.8.2";
+
+  srcs = [ src cmakeFedoraSrc ];
+  sourceRoot = src.name;
+
+  postUnpack = ''
+    chmod u+w -R ${cmakeFedoraSrc.name}
+    mv ${cmakeFedoraSrc.name}/* source/cmake-fedora
+  '';
+
+  preConfigure = ''
+    # cmake script needs ./Modules folder to link to cmake-fedora
+    ln -s cmake-fedora/Modules ./
+  '';
+
+  # Fails when writing to /prj_info.cmake in https://pagure.io/cmake-fedora/blob/master/f/Modules/ManageVersion.cmake
+  cmakeFlags = [ "-DPRJ_INFO_CMAKE_FILE=/dev/null" "-DPRJ_DOC_DIR=REPLACE" "-DDATA_DIR=share" ];
+  # Must replace PRJ_DOC_DIR with actual share/ folder for ibus-table-chinese
+  # Otherwise it tries to write to /ibus-table-chinese if not defined (!)
+  postConfigure = ''
+    substituteInPlace cmake_install.cmake --replace '/build/source/REPLACE' $out/share/ibus-table-chinese
+  '';
+  # Fails otherwise with "no such file or directory: <table>.txt"
+  dontUseCmakeBuildDir = true;
+  # Fails otherwise sometimes with
+  # FileExistsError: [Errno 17] File exists: '/build/tmp.BfVAUM4llr/ibus-table-chinese/.local/share/ibus-table'
+  enableParallelBuilding = false;
+
+  preBuild = ''
+    export HOME=$(mktemp -d)/ibus-table-chinese
+  '';
+
+  postFixup = ''
+    rm -rf $HOME
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ ibus ibus-table python3 ];
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description  = "Chinese tables for IBus-Table";
+    homepage     = "https://github.com/definite/ibus-table-chinese";
+    license      = licenses.gpl3;
+    platforms    = platforms.linux;
+    maintainers  = with maintainers; [ pneumaticat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix
new file mode 100644
index 000000000000..c997c20c8d26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, ibus, ibus-table, pkg-config, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-table-others";
+  version = "1.3.17";
+
+  src = fetchurl {
+    url = "https://github.com/moebiuscurve/ibus-table-others/releases/download/${version}/${pname}-${version}.tar.gz";
+    hash = "sha256-7//axHjQ1LgLpeWR4MTI8efLURm4Umj4JV3G33Y0m0g=";
+  };
+
+  nativeBuildInputs = [ pkg-config python3 ];
+  buildInputs = [ ibus ibus-table ];
+
+  preBuild = ''
+    export HOME=$TMPDIR
+  '';
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description  = "Various table-based input methods for IBus";
+    homepage     = "https://github.com/moebiuscurve/ibus-table-others";
+    license      = licenses.gpl3;
+    platforms    = platforms.linux;
+    maintainers  = with maintainers; [ mudri McSinyx ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix
new file mode 100644
index 000000000000..c5f02f4c8a22
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, docbook2x, pkg-config
+, gtk3, dconf, gobject-introspection
+, ibus, python3, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-table";
+  version = "1.17.4";
+
+  src = fetchFromGitHub {
+    owner  = "kaio";
+    repo   = "ibus-table";
+    rev    = version;
+    sha256 = "sha256-XljpwsDsdZkcnXimnN7BzPhOZdUmEEJbBM53Sv/9rIo=";
+  };
+
+  postPatch = ''
+    # Data paths will be set at run-time.
+    sed -e "/export IBUS_TABLE_LIB_LOCATION=/ s/^.*$//" \
+        -e "/export IBUS_TABLE_LOCATION=/ s/^.*$//" \
+        -i "engine/ibus-engine-table.in"
+    sed -e "/export IBUS_TABLE_BIN_PATH=/ s/^.*$//" \
+        -e "/export IBUS_TABLE_DATA_DIR=/ s/^.*$//" \
+        -i "engine/ibus-table-createdb.in"
+    sed -e "/export IBUS_PREFIX=/ s/^.*$//" \
+        -e "/export IBUS_DATAROOTDIR=/ s/^.$//" \
+        -e "/export IBUS_LOCALEDIR=/ s/^.$//" \
+        -i "setup/ibus-setup-table.in"
+    substituteInPlace engine/tabcreatedb.py --replace '/usr/share/ibus-table' $out/share/ibus-table
+    substituteInPlace engine/ibus_table_location.py \
+      --replace '/usr/libexec' $out/libexec \
+      --replace '/usr/share/ibus-table/' $out/share/ibus-table/
+  '';
+
+  buildInputs = [
+    dconf
+    gtk3
+    ibus
+    (python3.withPackages (pypkgs: with pypkgs; [
+      dbus-python
+      pygobject3
+      (toPythonModule ibus)
+    ]))
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    docbook2x
+    pkg-config
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  postUnpack = ''
+    substituteInPlace $sourceRoot/engine/Makefile.am \
+      --replace "docbook2man" "docbook2man --sgml"
+  '';
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description  = "An IBus framework for table-based input methods";
+    homepage     = "https://github.com/kaio/ibus-table/wiki";
+    license      = licenses.lgpl21;
+    platforms    = platforms.linux;
+    maintainers  = with maintainers; [ mudri ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix
new file mode 100644
index 000000000000..3c05cc5cf06c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, python3, ibus, pkg-config, gtk3, m17n_lib
+, wrapGAppsHook, gobject-introspection
+}:
+
+let
+
+  python = python3.withPackages (ps: with ps; [
+    pygobject3
+    dbus-python
+  ]);
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "ibus-typing-booster";
+  version = "2.25.1";
+
+  src = fetchFromGitHub {
+    owner = "mike-fabian";
+    repo = "ibus-typing-booster";
+    rev = version;
+    hash = "sha256-/FmmcEDmN03+lE3+nmIk8PCnpjQMFQBPtijSYiAfCmk=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config wrapGAppsHook gobject-introspection ];
+  buildInputs = [ python ibus gtk3 m17n_lib ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${m17n_lib}/lib")
+  '';
+
+  meta = with lib; {
+    homepage = "https://mike-fabian.github.io/ibus-typing-booster/";
+    license = licenses.gpl3Plus;
+    description = "A completion input method for faster typing";
+    maintainers = with maintainers; [ ncfavier ];
+    isIbusEngine = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix
new file mode 100644
index 000000000000..4b5180f0e15c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix
@@ -0,0 +1,26 @@
+{ typing-booster, symlinkJoin, hunspellDicts, lib, makeWrapper
+, langs ? [ "de-de" "en-gb-ise" "en-us" "es-es" "fr-moderne" "it-it" "sv-se" "sv-fi" ]
+}:
+
+let
+
+  hunspellDirs = lib.makeSearchPath "share/hunspell" (lib.attrVals langs hunspellDicts);
+
+in
+
+symlinkJoin {
+  name = "${typing-booster.name}-with-hunspell";
+  paths = [ typing-booster ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    for i in bin/emoji-picker libexec/ibus-{setup,engine}-typing-booster; do
+      wrapProgram "$out/$i" \
+        --prefix DICPATH : ${lib.escapeShellArg hunspellDirs}
+    done
+
+    sed -i -e "s,${typing-booster},$out," $out/share/ibus/component/typing-booster.xml
+  '';
+
+  inherit (typing-booster) meta;
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/allow-wrapping.patch b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/allow-wrapping.patch
new file mode 100644
index 000000000000..434c85d3dbea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/allow-wrapping.patch
@@ -0,0 +1,13 @@
+diff --git a/uniemoji.xml.in b/uniemoji.xml.in
+index 5fbfd0f..6fb8ad3 100644
+--- a/uniemoji.xml.in
++++ b/uniemoji.xml.in
+@@ -7,7 +7,7 @@
+     <license>GPL</license>
+     <author>Lalo Martins &lt;lalo.martins@gmail.com&gt;</author>
+     <homepage>https://github.com/salty-horse/ibus-uniemoji</homepage>
+-    <exec>@PYTHON@ @DATADIR@/ibus-uniemoji/uniemoji.py --ibus</exec>
++    <exec>@DATADIR@/ibus-uniemoji/uniemoji.py --ibus</exec>
+     <textdomain>uniemoji</textdomain>
+     <engines>
+         <engine>
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix
new file mode 100644
index 000000000000..4c202939e722
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv
+, fetchFromGitHub
+, gobject-introspection
+, wrapGAppsHook
+, python3
+, ibus
+}:
+
+let
+  python = python3.withPackages (ps: with ps; [
+    pygobject3
+    (toPythonModule ibus)
+    pyxdg
+    levenshtein
+  ]);
+in stdenv.mkDerivation rec {
+  pname = "ibus-uniemoji";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "salty-horse";
+    repo = "ibus-uniemoji";
+    rev = "v${version}";
+    sha256 = "121zh3q0li1k537fcvbd4ns4jgl9bbb9gm9ihy8cfxgirv38lcfa";
+  };
+
+  patches = [
+    # Do not run wrapper script with Python,
+    # the wrapped script will have Python in shebang anyway.
+    ./allow-wrapping.patch
+  ];
+
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    python
+    ibus
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "SYSCONFDIR=${placeholder "out"}/etc"
+    "PYTHON=${python.interpreter}"
+  ];
+
+  postFixup = ''
+    wrapGApp $out/share/ibus-uniemoji/uniemoji.py
+  '';
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description = "Input method (ibus) for entering unicode symbols and emoji by name";
+    homepage = "https://github.com/salty-horse/ibus-uniemoji";
+    license = with licenses; [ gpl3 mit ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ aske ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus/build-without-dbus-launch.patch b/nixpkgs/pkgs/tools/inputmethods/ibus/build-without-dbus-launch.patch
new file mode 100644
index 000000000000..cb587ccf47d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus/build-without-dbus-launch.patch
@@ -0,0 +1,21 @@
+diff --git a/data/dconf/make-dconf-override-db.sh b/data/dconf/make-dconf-override-db.sh
+index 601c1c3f..fcb7305d 100755
+--- a/data/dconf/make-dconf-override-db.sh
++++ b/data/dconf/make-dconf-override-db.sh
+@@ -12,10 +12,6 @@ export XDG_CACHE_HOME="$TMPDIR/cache"
+ export GSETTINGS_SCHEMA_DIR="$TMPDIR/schemas"
+ mkdir -p $XDG_CONFIG_HOME $XDG_CACHE_HOME $GSETTINGS_SCHEMA_DIR
+ 
+-eval `dbus-launch --sh-syntax`
+-
+-trap 'rm -rf $TMPDIR; kill $DBUS_SESSION_BUS_PID' ERR
+-
+ # in case that schema is not installed on the system
+ glib-compile-schemas --targetdir "$GSETTINGS_SCHEMA_DIR" "$PWD"
+ 
+@@ -52,5 +48,3 @@ if [ -d $TMPDIR/cache/gvfs ] ; then
+     umount $TMPDIR/cache/gvfs
+ fi
+ rm -rf $TMPDIR
+-
+-kill $DBUS_SESSION_BUS_PID
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus/default.nix
new file mode 100644
index 000000000000..417b1be605d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus/default.nix
@@ -0,0 +1,196 @@
+{ lib, stdenv
+, substituteAll
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, gettext
+, makeWrapper
+, pkg-config
+, vala
+, wrapGAppsHook
+, dbus
+, systemd
+, dconf ? null
+, glib
+, gdk-pixbuf
+, gobject-introspection
+, gtk3
+, gtk4
+, gtk-doc
+, runCommand
+, isocodes
+, cldr-annotations
+, unicode-character-database
+, unicode-emoji
+, python3
+, json-glib
+, libnotify ? null
+, enableUI ? true
+, withWayland ? false
+, libxkbcommon
+, wayland
+, buildPackages
+, runtimeShell
+, nixosTests
+}:
+
+let
+  python3Runtime = python3.withPackages (ps: with ps; [ pygobject3 ]);
+  python3BuildEnv = python3.buildEnv.override {
+    # ImportError: No module named site
+    postBuild = ''
+      makeWrapper ${glib.dev}/bin/gdbus-codegen $out/bin/gdbus-codegen --unset PYTHONPATH
+      makeWrapper ${glib.dev}/bin/glib-genmarshal $out/bin/glib-genmarshal --unset PYTHONPATH
+      makeWrapper ${glib.dev}/bin/glib-mkenums $out/bin/glib-mkenums --unset PYTHONPATH
+    '';
+  };
+  # make-dconf-override-db.sh needs to execute dbus-launch in the sandbox,
+  # it will fail to read /etc/dbus-1/session.conf unless we add this flag
+  dbus-launch = runCommand "sandbox-dbus-launch" {
+    nativeBuildInputs = [ makeWrapper ];
+  } ''
+      makeWrapper ${dbus}/bin/dbus-launch $out/bin/dbus-launch \
+        --add-flags --config-file=${dbus}/share/dbus-1/session.conf
+  '';
+in
+
+stdenv.mkDerivation rec {
+  pname = "ibus";
+  version = "1.5.28";
+
+  src = fetchFromGitHub {
+    owner = "ibus";
+    repo = "ibus";
+    rev = version;
+    sha256 = "sha256-zjV+QkhVkrHFs9Vt1FpbvmS4nRHxwKaKU3mQkSgyLaQ=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      pythonInterpreter = python3Runtime.interpreter;
+      pythonSitePackages = python3.sitePackages;
+    })
+    ./build-without-dbus-launch.patch
+    # unicode and emoji input are broken before 1.5.29
+    # https://github.com/NixOS/nixpkgs/issues/226526
+    (fetchpatch {
+      url = "https://github.com/ibus/ibus/commit/7c8abbe89403c2fcb08e3fda42049a97187e53ab.patch";
+      hash = "sha256-59HzAdLq8ahrF7K+tFGLjTodwIiTkJGEkFe8quqIkhU=";
+    })
+    # fix SIGABRT in X11 https://github.com/ibus/ibus/issues/2484
+    (fetchpatch {
+      url = "https://github.com/ibus/ibus/commit/8f706d160631f1ffdbfa16543a38b9d5f91c16ad.patch";
+      hash = "sha256-YzS9TmUWW0OmheDeCeU00kFK2U2QEmKYMSRJAbu14ec=";
+    })
+    # fix missing key releases in Wine https://github.com/ibus/ibus/issues/2480
+    (fetchpatch {
+      url = "https://github.com/ibus/ibus/commit/497f0c74230a65309e22ce5569060ce48310406b.patch";
+      hash = "sha256-PAZcUxmzjChs1/K8hXgOcytyS4LYoNL1dtU6X5Tx8ic=";
+    })
+  ];
+
+  outputs = [ "out" "dev" "installedTests" ];
+
+  postPatch = ''
+    patchShebangs --build data/dconf/make-dconf-override-db.sh
+    cp ${buildPackages.gtk-doc}/share/gtk-doc/data/gtk-doc.make .
+    substituteInPlace bus/services/org.freedesktop.IBus.session.GNOME.service.in --replace "ExecStart=sh" "ExecStart=${runtimeShell}"
+    substituteInPlace bus/services/org.freedesktop.IBus.session.generic.service.in --replace "ExecStart=sh" "ExecStart=${runtimeShell}"
+  '';
+
+  preAutoreconf = "touch ChangeLog";
+
+  configureFlags = [
+    "--disable-memconf"
+    (lib.enableFeature (dconf != null) "dconf")
+    (lib.enableFeature (libnotify != null) "libnotify")
+    (lib.enableFeature withWayland "wayland")
+    (lib.enableFeature enableUI "ui")
+    "--disable-gtk2"
+    "--enable-gtk4"
+    "--enable-install-tests"
+    "--with-unicode-emoji-dir=${unicode-emoji}/share/unicode/emoji"
+    "--with-emoji-annotation-dir=${cldr-annotations}/share/unicode/cldr/common/annotations"
+    "--with-ucd-dir=${unicode-character-database}/share/unicode"
+  ];
+
+  # missing make dependency
+  # https://github.com/NixOS/nixpkgs/pull/218120#issuecomment-1514027173
+  preBuild = ''
+    make -C src ibusenumtypes.h
+  '';
+
+  makeFlags = [
+    "test_execsdir=${placeholder "installedTests"}/libexec/installed-tests/ibus"
+    "test_sourcesdir=${placeholder "installedTests"}/share/installed-tests/ibus"
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gtk-doc
+    gettext
+    makeWrapper
+    pkg-config
+    python3BuildEnv
+    vala
+    wrapGAppsHook
+    dbus-launch
+    gobject-introspection
+  ];
+
+  propagatedBuildInputs = [
+    glib
+  ];
+
+  buildInputs = [
+    dbus
+    systemd
+    dconf
+    gdk-pixbuf
+    python3.pkgs.pygobject3 # for pygobject overrides
+    gtk3
+    gtk4
+    isocodes
+    json-glib
+    libnotify
+  ] ++ lib.optionals withWayland [
+    libxkbcommon
+    wayland
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # requires X11 daemon
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/ibus version
+  '';
+
+  postInstall = ''
+    # It has some hardcoded FHS paths and also we do not use it
+    # since we set up the environment in NixOS tests anyway.
+    moveToOutput "bin/ibus-desktop-testing-runner" "$installedTests"
+  '';
+
+  postFixup = ''
+    # set necessary environment also for tests
+    for f in $installedTests/libexec/installed-tests/ibus/*; do
+        wrapGApp $f
+    done
+  '';
+
+  passthru = {
+    tests = {
+      installed-tests = nixosTests.installed-tests.ibus;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/ibus/ibus";
+    description = "Intelligent Input Bus, input method framework";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ttuegel yana ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus/fix-paths.patch b/nixpkgs/pkgs/tools/inputmethods/ibus/fix-paths.patch
new file mode 100644
index 000000000000..340ec22130f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus/fix-paths.patch
@@ -0,0 +1,51 @@
+diff --git a/configure.ac b/configure.ac
+index a3cdb2da..cade9466 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -469,11 +469,11 @@ PKG_CHECK_EXISTS([pygobject-3.0 >= $PYGOBJECT_REQUIRED],
+ if test "x$enable_pygobject" = "xyes"; then
+     PKG_CHECK_MODULES(PYTHON, [pygobject-3.0 >= $PYGOBJECT_REQUIRED])
+ 
+-    pyoverridesdir=`$PYTHON -c "import gi; print(gi._overridesdir)"`
++    pyoverridesdir="$prefix/@pythonSitePackages@/gi/overrides"
+     AC_SUBST(pyoverridesdir)
+ 
+     if test x"$enable_python2" = x"yes"; then
+-        py2overridesdir=`$PYTHON2 -c "import gi; print(gi._overridesdir)"`
++        py2overridesdir="$prefix/@pythonSitePackages@/gi/overrides"
+         AC_SUBST(py2overridesdir)
+     fi
+ fi
+@@ -502,7 +502,7 @@ if test x"$enable_python_library" = x"yes"; then
+     PYTHON2_VERSION=`$PYTHON2 -c "import sys; sys.stdout.write(sys.version[[:3]])"`
+     PYTHON2_LIBDIR="$PYTHON2_PREFIX/lib/python$PYTHON2_VERSION"
+     python2dir="$PYTHON2_LIBDIR/site-packages"
+-    pkgpython2dir="$python2dir/ibus"
++    pkgpython2dir="$prefix/@pythonSitePackages@/ibus"
+     AC_SUBST(pkgpython2dir)
+ else
+     enable_python_library="no (disabled, use --enable-python-library to enable)"
+diff --git a/data/dconf/Makefile.am b/data/dconf/Makefile.am
+index 5360f033..6d5e726f 100644
+--- a/data/dconf/Makefile.am
++++ b/data/dconf/Makefile.am
+@@ -50,7 +50,7 @@ man_5dir = $(mandir)/man5
+ 
+ install-data-hook:
+ 	if test -z "$(DESTDIR)"; then \
+-	    dconf update; \
++	    true; \
+ 	fi
+ 
+ EXTRA_DIST = \
+diff --git a/setup/ibus-setup.in b/setup/ibus-setup.in
+index 474ce8a8..ee30808e 100644
+--- a/setup/ibus-setup.in
++++ b/setup/ibus-setup.in
+@@ -27,5 +27,5 @@ export IBUS_PREFIX=@prefix@
+ export IBUS_DATAROOTDIR=@datarootdir@
+ export IBUS_LOCALEDIR=@localedir@
+ export IBUS_LIBEXECDIR=${libexecdir}
+-exec ${PYTHON:-@PYTHON@} @prefix@/share/ibus/setup/main.py "$@"
++exec @pythonInterpreter@ @prefix@/share/ibus/setup/main.py "$@"
+ 
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus/wrapper.nix b/nixpkgs/pkgs/tools/inputmethods/ibus/wrapper.nix
new file mode 100644
index 000000000000..c1328fbe984a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus/wrapper.nix
@@ -0,0 +1,115 @@
+{ lib
+, buildEnv
+, makeWrapper
+, dconf
+, hicolor-icon-theme
+, ibus
+, librsvg
+, plugins ? [ ]
+}:
+
+buildEnv {
+  name = "ibus-with-plugins-" + lib.getVersion ibus;
+
+  paths = [ ibus ] ++ plugins;
+
+  pathsToLink = [
+    "/bin"
+    "/etc"
+    "/lib"
+    "/libexec"
+    "/share"
+    # Need to link contents so that the directories are writeable.
+    "/lib/systemd"
+    "/share/dbus-1/services"
+    "/share/systemd/user"
+    "/share/systemd/user/gnome-session.target.wants"
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [ ibus ] ++ plugins;
+
+  postBuild = ''
+    for prog in ibus; do
+        wrapProgram "$out/bin/$prog" \
+          --set GDK_PIXBUF_MODULE_FILE ${librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \
+          --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH:$out/lib/girepository-1.0" \
+          --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules" \
+          --set IBUS_COMPONENT_PATH "$out/share/ibus/component/" \
+          --set IBUS_DATAROOTDIR "$out/share" \
+          --set IBUS_LIBEXECDIR "$out/libexec" \
+          --set IBUS_LOCALEDIR "$out/share/locale" \
+          --set IBUS_PREFIX "$out" \
+          --set IBUS_TABLE_BIN_PATH "$out/bin" \
+          --set IBUS_TABLE_DATA_DIR "$out/share" \
+          --set IBUS_TABLE_LIB_LOCATION "$out/libexec" \
+          --set IBUS_TABLE_LOCATION "$out/share/ibus-table" \
+          --prefix PYTHONPATH : "$PYTHONPATH" \
+          --prefix XDG_DATA_DIRS : "$out/share:$GSETTINGS_SCHEMAS_PATH" \
+          --suffix XDG_DATA_DIRS : "${hicolor-icon-theme}/share"
+    done
+
+    for prog in ibus-daemon; do
+        wrapProgram "$out/bin/$prog" \
+          --set GDK_PIXBUF_MODULE_FILE ${librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \
+          --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH:$out/lib/girepository-1.0" \
+          --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules" \
+          --set IBUS_COMPONENT_PATH "$out/share/ibus/component/" \
+          --set IBUS_DATAROOTDIR "$out/share" \
+          --set IBUS_LIBEXECDIR "$out/libexec" \
+          --set IBUS_LOCALEDIR "$out/share/locale" \
+          --set IBUS_PREFIX "$out" \
+          --set IBUS_TABLE_BIN_PATH "$out/bin" \
+          --set IBUS_TABLE_DATA_DIR "$out/share" \
+          --set IBUS_TABLE_LIB_LOCATION "$out/libexec" \
+          --set IBUS_TABLE_LOCATION "$out/share/ibus-table" \
+          --prefix PYTHONPATH : "$PYTHONPATH" \
+          --prefix XDG_DATA_DIRS : "$out/share:$GSETTINGS_SCHEMAS_PATH" \
+          --suffix XDG_DATA_DIRS : "${hicolor-icon-theme}/share" \
+          --add-flags "--cache=refresh"
+    done
+
+    ibusPackage="${ibus}"
+
+    # Update services.
+    for service in \
+        "share/dbus-1/services/org.freedesktop.IBus.service" \
+        "share/systemd/user/org.freedesktop.IBus.session.generic.service" \
+        "share/systemd/user/org.freedesktop.IBus.session.GNOME.service"
+    do
+        unlink "$out/$service"
+        substitute "$ibusPackage/$service" "$out/$service" --replace "$ibusPackage/bin" "$out/bin"
+    done
+
+    # Re-create relative symbolic links.
+    for link in \
+        "$out/share/systemd/user/gnome-session.target.wants/"*
+    do
+        target="$link"
+        until [[ "''${target:0:1}" != "/" ]]; do
+            target="$(readlink "$target")"
+        done
+        unlink "$link"
+        ln -s "$target" "$link"
+    done
+
+    # Update absolute symbolic links.
+    for link in \
+        "$out/lib/systemd/user"
+    do
+        target="$(readlink -f "$link")"
+        relativeTarget="''${target#$ibusPackage/}"
+        if [[ "$ibusPackage/$relativeTarget" != "$target" ]]; then
+            >&2 echo "File $link does not point to to a file in $ibusPackage"
+            exit 1
+        fi
+        unlink "$link"
+        ln -s "$out/$relativeTarget" "$link"
+    done
+  '';
+
+  inherit (ibus) meta;
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/input-remapper/default.nix b/nixpkgs/pkgs/tools/inputmethods/input-remapper/default.nix
new file mode 100644
index 000000000000..04f8c7f74c15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/input-remapper/default.nix
@@ -0,0 +1,157 @@
+{ lib
+, pkgconfig
+, wrapGAppsHook
+, gettext
+, gtk3
+, glib
+, dbus
+, gobject-introspection
+, xmodmap
+, pygobject3
+, setuptools
+, evdev
+, pydantic
+, pydbus
+, psutil
+, fetchFromGitHub
+, buildPythonApplication
+, procps
+, gtksourceview4
+, nixosTests
+  # Change the default log level to debug for easier debugging of package issues
+, withDebugLogLevel ? false
+  # Xmodmap is an optional dependency
+  # If you use Xmodmap to set keyboard mappings (or your DE does)
+  # it is required to correctly map keys
+, withXmodmap ? true
+  # Some tests are flakey under high CPU load and could cause intermittent
+  # failures when building. Override this to true to run tests anyway
+  # See upstream issue: https://github.com/sezanzeb/input-remapper/issues/306
+, withDoCheck ? false
+}:
+
+let
+  maybeXmodmap = lib.optional withXmodmap xmodmap;
+in
+(buildPythonApplication rec {
+  pname = "input-remapper";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "sezanzeb";
+    repo = "input-remapper";
+    rev = version;
+    hash = "sha256-rwlVGF/cWSv6Bsvhrs6nMDQ8avYT80aasrhWyQv55/A=";
+  };
+
+  postPatch = ''
+    # fix FHS paths
+    substituteInPlace inputremapper/configs/data.py \
+      --replace "/usr/share"  "$out/usr/share"
+  '' + lib.optionalString withDebugLogLevel ''
+    # if debugging
+    substituteInPlace inputremapper/logger.py --replace "logger.setLevel(logging.INFO)"  "logger.setLevel(logging.DEBUG)"
+  '';
+
+  doCheck = withDoCheck;
+  nativeCheckInputs = [
+    psutil
+  ];
+  pythonImportsCheck = [
+    "evdev"
+    "inputremapper"
+  ];
+
+  # Custom test script, can't use plain pytest / pytestCheckHook
+  # We only run tests in the unit folder, integration tests require UI
+  # To allow tests which access the system and session DBUS to run, we start a dbus session
+  # and bind it to both the system and session buses
+  installCheckPhase = ''
+    echo "<busconfig>
+      <type>session</type>
+      <listen>unix:tmpdir=$TMPDIR</listen>
+      <listen>unix:path=/build/system_bus_socket</listen>
+      <standard_session_servicedirs/>
+      <policy context=\"default\">
+        <!-- Allow everything to be sent -->
+        <allow send_destination=\"*\" eavesdrop=\"true\"/>
+        <!-- Allow everything to be received -->
+        <allow eavesdrop=\"true\"/>
+        <!-- Allow anyone to own anything -->
+        <allow own=\"*\"/>
+      </policy>
+    </busconfig>" > dbus.cfg
+    PATH=${lib.makeBinPath ([ dbus procps ] ++ maybeXmodmap)}:$PATH \
+      USER="$(id -u -n)" \
+      DBUS_SYSTEM_BUS_ADDRESS=unix:path=/build/system_bus_socket \
+      ${dbus}/bin/dbus-run-session --config-file dbus.cfg \
+      python tests/test.py --start-dir unit
+  '';
+
+  # Nixpkgs 15.9.4.3. When using wrapGAppsHook with special derivers you can end up with double wrapped binaries.
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}"
+      --prefix PATH : "${lib.makeBinPath maybeXmodmap}"
+    )
+  '';
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gettext # needed to build translations
+    gtk3
+    glib
+    gobject-introspection
+    pygobject3
+  ] ++ maybeXmodmap;
+
+  propagatedBuildInputs = [
+    setuptools # needs pkg_resources
+    pygobject3
+    evdev
+    pkgconfig
+    pydantic
+    pydbus
+    gtksourceview4
+  ];
+
+  postInstall = ''
+    sed -r "s#RUN\+\=\"/bin/input-remapper-control#RUN\+\=\"$out/bin/input-remapper-control#g" -i data/99-input-remapper.rules
+    sed -r "s#ExecStart\=/usr/bin/input-remapper-service#ExecStart\=$out/bin/input-remapper-service#g" -i data/input-remapper.service
+
+    chmod +x data/*.desktop
+
+    install -D -t $out/share/applications/ data/*.desktop
+    install -D -t $out/share/polkit-1/actions/ data/input-remapper.policy
+    install -D data/99-input-remapper.rules $out/etc/udev/rules.d/99-input-remapper.rules
+    install -D data/input-remapper.service $out/lib/systemd/system/input-remapper.service
+    install -D data/input-remapper.policy $out/share/polkit-1/actions/input-remapper.policy
+    install -D data/inputremapper.Control.conf $out/etc/dbus-1/system.d/inputremapper.Control.conf
+    install -D -t $out/usr/share/input-remapper/ data/*
+
+    # Only install input-remapper prefixed binaries, we don't care about deprecated key-mapper ones
+    install -m755 -D -t $out/bin/ bin/input-remapper*
+  '';
+
+  passthru.tests = nixosTests.input-remapper;
+
+  meta = with lib; {
+    description = "An easy to use tool to change the mapping of your input device buttons";
+    homepage = "https://github.com/sezanzeb/input-remapper";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ LunNova ];
+    mainProgram = "input-remapper-gtk";
+  };
+}).overrideAttrs (final: prev: {
+  # Set in an override as buildPythonApplication doesn't yet support
+  # the `final:` arg yet from #119942 'overlay style overridable recursive attributes'
+  # this ensures the rev matches the input src's rev after overriding
+  # See https://discourse.nixos.org/t/avoid-rec-expresions-in-nixpkgs/8293/7 for more
+  # discussion
+  postPatch = prev.postPatch or "" + ''
+    # set revision for --version output
+    echo "COMMIT_HASH = '${final.src.rev}'" > inputremapper/commit_hash.py
+  '';
+})
diff --git a/nixpkgs/pkgs/tools/inputmethods/interception-tools/caps2esc.nix b/nixpkgs/pkgs/tools/inputmethods/interception-tools/caps2esc.nix
new file mode 100644
index 000000000000..933a731828fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/interception-tools/caps2esc.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitLab, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "caps2esc";
+  version = "0.3.2";
+
+  src = fetchFromGitLab {
+    group = "interception";
+    owner = "linux/plugins";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-gPFElAixiDTTwcl2XKM7MbTkpRrg8ToO5K7H8kz3DHk=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/interception/linux/plugins/caps2esc";
+    description = "Transforming the most useless key ever into the most useful one";
+    license = licenses.mit;
+    maintainers = [ maintainers.vyp ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/interception-tools/default.nix b/nixpkgs/pkgs/tools/inputmethods/interception-tools/default.nix
new file mode 100644
index 000000000000..843584a7d443
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/interception-tools/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitLab, pkg-config, cmake, yaml-cpp,
+  libevdev, udev, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "interception-tools";
+  version = "0.6.8";
+  src = fetchFromGitLab {
+    owner = "interception/linux";
+    repo = "tools";
+    rev = "v${version}";
+    sha256 = "sha256-jhdgfCWbkF+jD/iXsJ+fYKOtPymxcC46Q4w0aqpvcek=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libevdev udev yaml-cpp boost ];
+
+  meta = {
+    description = "A minimal composable infrastructure on top of libudev and libevdev";
+    homepage = "https://gitlab.com/interception/linux/tools";
+    license = lib.licenses.gpl3Only;
+    maintainers = [ lib.maintainers.vyp ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/interception-tools/dual-function-keys.nix b/nixpkgs/pkgs/tools/inputmethods/interception-tools/dual-function-keys.nix
new file mode 100644
index 000000000000..022e7dfa0389
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/interception-tools/dual-function-keys.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitLab, pkg-config, yaml-cpp, libevdev }:
+
+stdenv.mkDerivation rec {
+  pname = "dual-function-keys";
+  version = "1.5.0";
+
+  src = fetchFromGitLab {
+    group = "interception";
+    owner = "linux/plugins";
+    repo = pname;
+    rev = version;
+    hash = "sha256-m/oEczUNKqj0gs/zMOIBxoQaffNg+YyPINMXArkATJ4=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libevdev yaml-cpp ];
+
+  prePatch = ''
+    substituteInPlace config.mk --replace \
+      '/usr/include/libevdev-1.0' \
+      "$(pkg-config --cflags libevdev | cut -c 3-)"
+  '';
+
+  installFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/interception/linux/plugins/dual-function-keys";
+    description = "Tap for one key, hold for another";
+    license = licenses.mit;
+    maintainers = with maintainers; [ svend ];
+    platforms = platforms.linux;
+    mainProgram = "dual-function-keys";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/keyd/default.nix b/nixpkgs/pkgs/tools/inputmethods/keyd/default.nix
new file mode 100644
index 000000000000..a3df8d44cec8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/keyd/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, systemd
+, runtimeShell
+, python3
+, nixosTests
+}:
+
+let
+  version = "2.4.3";
+
+  src = fetchFromGitHub {
+    owner = "rvaiya";
+    repo = "keyd";
+    rev = "v" + version;
+    hash = "sha256-NhZnFIdK0yHgFR+rJm4cW+uEhuQkOpCSLwlXNQy6jas=";
+  };
+
+  pypkgs = python3.pkgs;
+
+  appMap = pypkgs.buildPythonApplication rec {
+    pname = "keyd-application-mapper";
+    inherit version src;
+    format = "other";
+
+    postPatch = ''
+      substituteInPlace scripts/${pname} \
+        --replace /bin/sh ${runtimeShell}
+    '';
+
+    propagatedBuildInputs = with pypkgs; [ xlib ];
+
+    dontBuild = true;
+
+    installPhase = ''
+      install -Dm555 -t $out/bin scripts/${pname}
+    '';
+
+    meta.mainProgram = "keyd-application-mapper";
+  };
+
+in
+stdenv.mkDerivation {
+  pname = "keyd";
+  inherit version src;
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /usr ""
+
+    substituteInPlace keyd.service \
+      --replace /usr/bin $out/bin
+  '';
+
+  installFlags = [ "DESTDIR=${placeholder "out"}" ];
+
+  buildInputs = [ systemd ];
+
+  enableParallelBuilding = true;
+
+  # post-2.4.2 may need this to unbreak the test
+  # makeFlags = [ "SOCKET_PATH/run/keyd/keyd.socket" ];
+
+  postInstall = ''
+    ln -sf ${lib.getExe appMap} $out/bin/${appMap.pname}
+    rm -rf $out/etc
+  '';
+
+  passthru.tests.keyd = nixosTests.keyd;
+
+  meta = with lib; {
+    description = "A key remapping daemon for Linux";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/keyfuzz/default.nix b/nixpkgs/pkgs/tools/inputmethods/keyfuzz/default.nix
new file mode 100644
index 000000000000..8980abba2f62
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/keyfuzz/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "keyfuzz";
+  version = "0.2";
+
+  meta = with lib; {
+    description = "Manipulate the scancode/keycode translation tables of keyboard drivers";
+    homepage    = "http://0pointer.de/lennart/projects/keyfuzz/";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ mboes ];
+  };
+
+  src = fetchurl {
+    url = "http://0pointer.de/lennart/projects/keyfuzz/keyfuzz-0.2.tar.gz";
+    sha256 = "0xv9ymivp8fnyc5xcyh1vamxnx90bzw66wlld813fvm6q2gsiknk";
+  };
+
+  configureFlags = [ "--without-initdir" "--disable-lynx" ];
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/keymapper/default.nix b/nixpkgs/pkgs/tools/inputmethods/keymapper/default.nix
new file mode 100644
index 000000000000..e93acecb62bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/keymapper/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, dbus
+, libX11
+, libusb1
+, pkg-config
+, udev
+, wayland
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "keymapper";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "houmain";
+    repo = "keymapper";
+    rev = finalAttrs.version;
+    hash = "sha256-X2Qk/cAczdkteB+6kyURGjvm1Ryio6WHj3Ga2POosCA=";
+  };
+
+  # all the following must be in nativeBuildInputs
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    dbus
+    wayland
+    libX11
+    udev
+    libusb1
+  ];
+
+  meta = {
+    changelog = "https://github.com/houmain/keymapper/blob/${finalAttrs.src.rev}/CHANGELOG.md";
+    description = "A cross-platform context-aware key remapper";
+    homepage = "https://github.com/houmain/keymapper";
+    license = lib.licenses.gpl3Only;
+    mainProgram = "keymapper";
+    maintainers = with lib.maintainers; [ dit7ya ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/inputmethods/kime/default.nix b/nixpkgs/pkgs/tools/inputmethods/kime/default.nix
new file mode 100644
index 000000000000..cbd3a34daac4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/kime/default.nix
@@ -0,0 +1,114 @@
+{ lib, stdenv, rustPlatform, rustc, cargo, fetchFromGitHub, pkg-config, cmake, extra-cmake-modules
+, withWayland ? true
+, withIndicator ? true, dbus, libdbusmenu
+, withXim ? true, xorg, cairo
+, withGtk3 ? true, gtk3
+, withGtk4 ? true, gtk4
+, withQt5 ? true, qt5
+, withQt6 ? false, qt6
+}:
+
+let
+  cmake_args = lib.optionals withGtk3 ["-DENABLE_GTK3=ON"]
+  ++ lib.optionals withGtk4 ["-DENABLE_GTK4=ON"]
+  ++ lib.optionals withQt5 ["-DENABLE_QT5=ON"]
+  ++ lib.optionals withQt6 ["-DENABLE_QT6=ON"];
+
+  optFlag = w: (if w then "1" else "0");
+in
+stdenv.mkDerivation rec {
+  pname = "kime";
+  version = "3.0.2";
+
+  src = fetchFromGitHub {
+    owner = "Riey";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-qLQ6DmV7KHhdXWR5KtO52cmXBm818zKJVj4nxsR14dc=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    sha256 = "sha256-/o9b7YvrpV+IujkllFWAz6Mg4CbS9BInF8antfZ0Vsw=";
+  };
+
+  # Replace autostart path
+  postPatch = ''
+    substituteInPlace res/kime.desktop --replace "/usr/bin/kime" "$out/bin/kime"
+  '';
+
+  dontUseCmakeConfigure = true;
+  dontWrapQtApps = true;
+  buildPhase = ''
+    runHook preBuild
+    export KIME_BUILD_CHECK=1
+    export KIME_BUILD_INDICATOR=${optFlag withIndicator}
+    export KIME_BUILD_XIM=${optFlag withXim}
+    export KIME_BUILD_WAYLAND=${optFlag withWayland}
+    export KIME_BUILD_KIME=1
+    export KIME_CARGO_ARGS="-j$NIX_BUILD_CORES --frozen"
+    export KIME_MAKE_ARGS="-j$NIX_BUILD_CORES"
+    export KIME_CMAKE_ARGS="${lib.concatStringsSep " " cmake_args}"
+    bash scripts/build.sh -r
+    runHook postBuild
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    cargo test --release --frozen
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    export KIME_BIN_DIR=bin
+    export KIME_INSTALL_HEADER=1
+    export KIME_INSTALL_DOC=1
+    export KIME_INCLUDE_DIR=include
+    export KIME_DOC_DIR=share/doc/kime
+    export KIME_ICON_DIR=share/icons
+    export KIME_LIB_DIR=lib
+    export KIME_QT5_DIR=lib/qt-${qt5.qtbase.version}
+    export KIME_QT6_DIR=lib/qt-${qt6.qtbase.version}
+    bash scripts/install.sh "$out"
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    # Don't pipe output to head directly it will cause broken pipe error https://github.com/rust-lang/rust/issues/46016
+    kimeVersion=$(echo "$($out/bin/kime --version)" | head -n1)
+    echo "'kime --version | head -n1' returns: $kimeVersion"
+    [[ "$kimeVersion" == "kime ${version}" ]]
+    runHook postInstallCheck
+  '';
+
+  buildInputs = lib.optionals withIndicator [ dbus libdbusmenu ]
+  ++ lib.optionals withXim [ xorg.libxcb cairo ]
+  ++ lib.optionals withGtk3 [ gtk3 ]
+  ++ lib.optionals withGtk4 [ gtk4 ]
+  ++ lib.optionals withQt5 [ qt5.qtbase ]
+  ++ lib.optionals withQt6 [ qt6.qtbase ];
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    extra-cmake-modules
+    rustPlatform.bindgenHook
+    rustPlatform.cargoSetupHook
+    rustc
+    cargo
+  ];
+
+  RUST_BACKTRACE = 1;
+
+  meta = with lib; {
+    homepage = "https://github.com/Riey/kime";
+    description = "Korean IME";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.riey ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0001-hardcode-name.patch b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0001-hardcode-name.patch
new file mode 100644
index 000000000000..f811343ee79b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0001-hardcode-name.patch
@@ -0,0 +1,13 @@
+diff --git a/libinput-gestures b/libinput-gestures
+index 78c7c28..da04007 100755
+--- a/libinput-gestures
++++ b/libinput-gestures
+@@ -27,7 +27,7 @@ except ImportError:
+
+ session_locked = False
+
+-PROGPATH = Path(sys.argv[0])
++PROGPATH = Path("libinput-gestures")
+ PROGNAME = PROGPATH.stem
+
+ # Conf file containing gesture commands.
diff --git a/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0002-paths.patch b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0002-paths.patch
new file mode 100644
index 000000000000..a507625406f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0002-paths.patch
@@ -0,0 +1,34 @@
+diff --git a/libinput-gestures b/libinput-gestures
+index 78c7c28..1a2c965 100755
+--- a/libinput-gestures
++++ b/libinput-gestures
+@@ -87,11 +87,11 @@ def get_libinput_vers():
+     'Return the libinput installed version number string'
+     # Try to use newer libinput interface then fall back to old
+     # (depreciated) interface.
+-    res = run(('libinput', '--version'), check=False)
++    res = run(('@libinput@', '--version'), check=False)
+     if res:
+         return res.strip(), True
+
+-    res = run(('libinput-list-devices', '--version'), check=False)
++    res = run(('@libinput-list-devices@', '--version'), check=False)
+     return res and res.strip(), False
+
+ def get_devices_list(cmd_list_devices, device_list):
+@@ -694,11 +694,11 @@ def main():
+         sys.exit('libinput helper tools do not seem to be installed?')
+
+     if has_subcmd:
+-        cmd_debug_events = 'libinput debug-events'
+-        cmd_list_devices = 'libinput list-devices'
++        cmd_debug_events = '@libinput@ debug-events'
++        cmd_list_devices = '@libinput@ list-devices'
+     else:
+-        cmd_debug_events = 'libinput-debug-events'
+-        cmd_list_devices = 'libinput-list-devices'
++        cmd_debug_events = '@libinput@-debug-events'
++        cmd_list_devices = '@libinput@-list-devices'
+
+     if args.verbose:
+         # Output various info/version info
diff --git a/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/default.nix b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/default.nix
new file mode 100644
index 000000000000..b9384469e963
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper,
+  libinput, wmctrl, python3,
+  coreutils, xdotool ? null,
+  extraUtilsPath ? lib.optional (xdotool != null) xdotool
+}:
+stdenv.mkDerivation rec {
+  pname = "libinput-gestures";
+  version = "2.76";
+
+  src = fetchFromGitHub {
+    owner = "bulletmark";
+    repo = "libinput-gestures";
+    rev = version;
+    sha256 = "sha256-Tb/gQ/2Ul4JzEiLEUPJBj9T6ZAqzMSPdgiofdnDj73Q=";
+  };
+  patches = [
+    ./0001-hardcode-name.patch
+    ./0002-paths.patch
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 ];
+
+  postPatch =
+    ''
+      substituteInPlace libinput-gestures-setup --replace /usr/ /
+
+      substituteInPlace libinput-gestures \
+        --replace      /etc     "$out/etc" \
+        --subst-var-by libinput "${libinput}/bin/libinput" \
+        --subst-var-by wmctrl   "${wmctrl}/bin/wmctrl"
+    '';
+  installPhase =
+    ''
+      runHook preInstall
+      ${stdenv.shell} libinput-gestures-setup -d "$out" install
+      runHook postInstall
+    '';
+  postFixup =
+    ''
+      rm "$out/bin/libinput-gestures-setup"
+      substituteInPlace "$out/share/systemd/user/libinput-gestures.service" --replace "/usr" "$out"
+      substituteInPlace "$out/share/applications/libinput-gestures.desktop" --replace "/usr" "$out"
+      chmod +x "$out/share/applications/libinput-gestures.desktop"
+      wrapProgram "$out/bin/libinput-gestures" --prefix PATH : "${lib.makeBinPath ([coreutils] ++ extraUtilsPath)}"
+    '';
+
+  meta = with lib; {
+    homepage = "https://github.com/bulletmark/libinput-gestures";
+    description = "Gesture mapper for libinput";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ teozkr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/libkkc/default.nix b/nixpkgs/pkgs/tools/inputmethods/libkkc/default.nix
new file mode 100644
index 000000000000..06bc775689f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/libkkc/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, fetchpatch
+, vala, gobject-introspection, intltool, python3, glib
+, pkg-config
+, libgee, json-glib, marisa, libkkc-data
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libkkc";
+  version = "0.3.5";
+
+  src = fetchurl {
+    url = "${meta.homepage}/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "89b07b042dae5726d306aaa1296d1695cb75c4516f4b4879bc3781fe52f62aef";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "build-python3.patch";
+      url = "https://github.com/ueno/libkkc/commit/ba1c1bd3eb86d887fc3689c3142732658071b5f7.patch";
+      hash = "sha256-4IVpcJJFrxmxJGNiRHteleAa6trOwbvMHRTE/qyjOPY=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    vala gobject-introspection
+    python3 python3.pkgs.marisa
+    intltool glib pkg-config
+  ];
+
+  buildInputs = [ marisa libkkc-data ];
+  enableParallelBuilding = true;
+
+  propagatedBuildInputs = [ libgee json-glib ];
+
+  postInstall = ''
+    ln -s ${libkkc-data}/lib/libkkc/models $out/share/libkkc/models
+  '';
+
+  meta = with lib; {
+    description = "Japanese Kana Kanji conversion input method library";
+    homepage    = "https://github.com/ueno/libkkc";
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ vanzef ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/lisgd/default.nix b/nixpkgs/pkgs/tools/inputmethods/lisgd/default.nix
new file mode 100644
index 000000000000..dd57f61de9d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/lisgd/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, writeText
+, libinput
+, libX11
+, wayland
+, conf ? null
+, patches ? [ ]
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lisgd";
+  version = "0.4.0";
+
+  src = fetchFromSourcehut {
+    owner = "~mil";
+    repo = "lisgd";
+    rev = version;
+    hash = "sha256-ljRZpBo4lW2cYZYxKKMrXanE0YaHSFwcdyECK0czdWY=";
+  };
+
+  inherit patches;
+
+  postPatch = let
+    configFile = if lib.isDerivation conf || lib.isPath conf then
+      conf
+    else
+      writeText "config.def.h" conf;
+  in lib.optionalString (conf != null) ''
+    cp ${configFile} config.def.h
+  '';
+
+  buildInputs = [
+    libinput
+    libX11
+    wayland
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "Bind gestures via libinput touch events";
+    homepage = "https://git.sr.ht/~mil/lisgd";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/m17n-db/default.nix b/nixpkgs/pkgs/tools/inputmethods/m17n-db/default.nix
new file mode 100644
index 000000000000..dc0ed25a3efe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/m17n-db/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, gettext, gawk, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "m17n-db";
+  version = "1.8.5";
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/m17n/m17n-db-${version}.tar.gz";
+    sha256 = "sha256-to//QiwKKGTuVuLEUXOCEzuYG7S6ObU/R4lc2LHApzY=";
+  };
+
+  nativeBuildInputs = [ gettext ];
+  buildInputs = [ gettext gawk bash ];
+
+  strictDeps = true;
+
+  configureFlags = [ "--with-charmaps=${stdenv.cc.libc}/share/i18n/charmaps" ]
+  ;
+
+  meta = {
+    homepage = "https://www.nongnu.org/m17n/";
+    description = "Multilingual text processing library (database)";
+    changelog = "https://git.savannah.nongnu.org/cgit/m17n/m17n-db.git/plain/NEWS?h=REL-${lib.replaceStrings [ "." ] [ "-" ] version}";
+    license = lib.licenses.lgpl21Plus;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ astsmtl ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/m17n-lib/default.nix b/nixpkgs/pkgs/tools/inputmethods/m17n-lib/default.nix
new file mode 100644
index 000000000000..ca586a449703
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/m17n-lib/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchurl
+, m17n_db
+, autoreconfHook
+, pkg-config
+}:
+stdenv.mkDerivation rec {
+  pname = "m17n-lib";
+  version = "1.8.4";
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/m17n/m17n-lib-${version}.tar.gz";
+    hash = "sha256-xqJYLG5PKowueihE+lx+s2Oq0lOLBS8gPHEGSd1CHMg=";
+  };
+
+  strictDeps = true;
+
+  # reconf needed to sucesfully cross-compile
+  nativeBuildInputs = [
+    autoreconfHook pkg-config
+    # requires m17n-db tool at build time
+    m17n_db
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = "https://www.nongnu.org/m17n/";
+    description = "Multilingual text processing library (runtime)";
+    license = lib.licenses.lgpl21Plus;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ astsmtl ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/m17n-lib/otf.nix b/nixpkgs/pkgs/tools/inputmethods/m17n-lib/otf.nix
new file mode 100644
index 000000000000..d700dfb3ebd9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/m17n-lib/otf.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, autoreconfHook, xorg, freetype }:
+
+stdenv.mkDerivation rec {
+  pname = "libotf";
+  version = "0.9.16";
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/m17n/${pname}-${version}.tar.gz";
+    sha256 = "0sq6g3xaxw388akws6qrllp3kp2sxgk2dv4j79k6mm52rnihrnv8";
+  };
+
+  patches = [
+    # https://salsa.debian.org/debian/libotf/-/tree/master/debian/patches
+    # Fix cross-compilation
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/libotf/-/raw/1be04cedf887720eb8f5efb3594dc2cefd96b1f1/debian/patches/0002-use-pkg-config-not-freetype-config.patch";
+      sha256 = "sha256-VV9iGoNWIEie6UiLLTJBD+zxpvj0acgqkcBeAN1V6Kc=";
+    })
+    # these 2 are required by the above patch
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/libotf/-/raw/1be04cedf887720eb8f5efb3594dc2cefd96b1f1/debian/patches/0001-do-not-add-flags-for-required-packages-to-pc-file.patch";
+      sha256 = "sha256-3kzqNPAHNVJQ1F4fyifq3AqLdChWli/k7wOq+ha+iDs=";
+    })
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/libotf/-/raw/1be04cedf887720eb8f5efb3594dc2cefd96b1f1/debian/patches/0001-libotf-config-modify-to-support-multi-arch.patch";
+      sha256 = "sha256-SUlI87h+MtYWWtrAegzAnSds8JhxZwTJltDcj/se/Qc=";
+    })
+  ];
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+
+  buildInputs = [ xorg.libXaw freetype ];
+
+  outputs = [ "out" "dev" ];
+
+  postInstall = ''
+    mkdir -p $dev/bin
+    mv $out/bin/libotf-config $dev/bin/
+    substituteInPlace $dev/bin/libotf-config \
+      --replace "pkg-config" "${pkg-config}/bin/pkg-config"
+  '';
+
+  meta = {
+    homepage = "https://www.nongnu.org/m17n/";
+    description = "Multilingual text processing library (libotf)";
+    license = lib.licenses.lgpl21Plus;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ bendlas ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/nabi/default.nix b/nixpkgs/pkgs/tools/inputmethods/nabi/default.nix
new file mode 100644
index 000000000000..72f13d4eb2dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/nabi/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, pkg-config, gtk2, libhangul }:
+
+stdenv.mkDerivation rec {
+  pname = "nabi";
+  version = "1.0.0";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/nabi/nabi-${version}.tar.gz";
+    sha256 = "0craa24pw7b70sh253arv9bg9sy4q3mhsjwfss3bnv5nf0xwnncw";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 libhangul ];
+
+  meta = with lib; {
+    description = "The Easy Hangul XIM";
+    homepage = "https://github.com/choehwanjin/nabi";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ianwookim ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/netevent/default.nix b/nixpkgs/pkgs/tools/inputmethods/netevent/default.nix
new file mode 100644
index 000000000000..b7c0e4d47020
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/netevent/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, docutils, installShellFiles }:
+
+stdenv.mkDerivation {
+  pname = "netevent";
+  version = "20201018";
+
+  src = fetchFromGitHub {
+    owner = "Blub";
+    repo = "netevent";
+    rev = "ddd330f0dc956a95a111c58ad10546071058e4c1";
+    sha256 = "0myk91pmim0m51h4b8hplkbxvns0icvfmv0401r0hw8md828nh5c";
+  };
+
+  buildInputs = [ docutils ];
+  nativeBuildInputs = [ installShellFiles ];
+
+  outputs = [ "out" "doc" "man" ];
+
+  configurePhase = ''
+    export RST2MAN=rst2man
+    ./configure
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 0755 netevent $out/bin/
+
+    installManPage doc/netevent.1
+
+    mkdir -p $doc/share/doc/netevent
+    cp doc/netevent.rst $doc/share/doc/netevent/netevent.rst
+  '';
+
+  meta = with lib; {
+    description = "Share linux event devices with other machines";
+    homepage = "https://github.com/Blub/netevent";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rgrunbla ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/remote-touchpad/default.nix b/nixpkgs/pkgs/tools/inputmethods/remote-touchpad/default.nix
new file mode 100644
index 000000000000..eef3ddfe835a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/remote-touchpad/default.nix
@@ -0,0 +1,33 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, libXi
+, libXrandr
+, libXt
+, libXtst
+}:
+
+buildGoModule rec {
+  pname = "remote-touchpad";
+  version = "1.4.6";
+
+  src = fetchFromGitHub {
+    owner = "unrud";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-LytZBVubsGajx4hFYwP3MwHkAW7LlIr77aVLpeHwWxU=";
+  };
+
+  buildInputs = [ libXi libXrandr libXt libXtst ];
+  tags = [ "portal,x11" ];
+
+  vendorHash = "sha256-vL6kSm0yPEn5TNpB6E+2+Xjm/ANNUxgA8XEWz9n7kHI=";
+
+  meta = with lib; {
+    description = "Control mouse and keyboard from the web browser of a smartphone";
+    homepage = "https://github.com/unrud/remote-touchpad";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ schnusch ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/skk/skk-dicts/default.nix b/nixpkgs/pkgs/tools/inputmethods/skk/skk-dicts/default.nix
new file mode 100644
index 000000000000..da6074a96a30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/skk/skk-dicts/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, fetchurl, iconv, skktools }:
+
+let
+  # kana to kanji
+  small = fetchurl {
+    url = "https://raw.githubusercontent.com/skk-dev/dict/8b35d07a7d2044d48b063d2774d9f9d00bb7cb48/SKK-JISYO.S";
+    sha256 = "11cjrc8m99hj4xpl2nvzxanlswpapi92vmgk9d6yimdz0jidb6cq";
+  };
+  medium = fetchurl {
+    url = "https://raw.githubusercontent.com/skk-dev/dict/8b35d07a7d2044d48b063d2774d9f9d00bb7cb48/SKK-JISYO.M";
+    sha256 = "0pwjp9qjmn9sq6zc0k6632l7dc2dbjn45585ibckvvl9iwfqqxdp";
+  };
+  large = fetchurl {
+    url = "https://raw.githubusercontent.com/skk-dev/dict/8b35d07a7d2044d48b063d2774d9f9d00bb7cb48/SKK-JISYO.L";
+    sha256 = "0ps0a7sbkryd6hxvphq14i7g5wci4gvr0vraac8ia2ww67a2xbyc";
+  };
+
+  # english to japanese
+  edict = fetchurl {
+    url = "https://raw.githubusercontent.com/skk-dev/dict/8b35d07a7d2044d48b063d2774d9f9d00bb7cb48/SKK-JISYO.edict";
+    sha256 = "1vrwnq0vvjn61nijbln6wfinqg93802d2a8d4ad82n692v83b1li";
+  };
+  # misc
+  assoc = fetchurl {
+    url = "https://raw.githubusercontent.com/skk-dev/dict/8b35d07a7d2044d48b063d2774d9f9d00bb7cb48/SKK-JISYO.assoc";
+    sha256 = "1smcbyv6srrhnpl7ic9nqds9nz3g2dgqngmhzkrdlwmvcpvakp1v";
+  };
+in
+
+stdenv.mkDerivation {
+  pname = "skk-dicts-unstable";
+  version = "2020-03-24";
+  srcs = [ small medium large edict assoc ];
+  nativeBuildInputs = [ iconv skktools ];
+
+  strictDeps = true;
+
+  dontUnpack = true;
+
+  installPhase = ''
+    function dictname() {
+      src=$1
+      name=$(basename $src)          # remove dir name
+      dict=$(echo $name | cut -b34-) # remove sha256 prefix
+      echo $dict
+    }
+    mkdir -p $out/share
+
+    for src in $srcs; do
+      dst=$out/share/$(dictname $src)
+      echo ";;; -*- coding: utf-8 -*-" > $dst  # libskk requires this on the first line
+      iconv -f EUC-JP -t UTF-8 $src | skkdic-expr2 >> $dst
+    done
+
+    # combine .L .edict and .assoc for convenience
+    dst=$out/share/SKK-JISYO.combined
+    echo ";;; -*- coding: utf-8 -*-" > $dst
+    skkdic-expr2 \
+      $out/share/$(dictname ${large}) + \
+      $out/share/$(dictname ${edict}) + \
+      $out/share/$(dictname ${assoc}) >> $dst
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A collection of standard SKK dictionaries";
+    longDescription = ''
+      This package provides a collection of standard kana-to-kanji
+      dictionaries for the SKK Japanese input method.
+    '';
+    homepage = "https://github.com/skk-dev/dict";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ yuriaisaka ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/skk/skktools/default.nix b/nixpkgs/pkgs/tools/inputmethods/skk/skktools/default.nix
new file mode 100644
index 000000000000..130c27090a48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/skk/skktools/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gdbm, glib }:
+
+# Note (2017-10-24, yuriaisaka):
+# - Version 1.3.3 dates from Jul. 19, 2013.
+# - The latest commit to the github repo dates from Mar. 05, 2017
+# - The repo since appears to have become a kitchen sink place to keep
+#   misc tools to handle SKK dictionaries, and these tools have runtime
+#   dependencies on a Ruby interpreter etc.
+# - We for the moment do not package them to keep the dependencies slim.
+#   Probably, shall package the newer tools as skktools-extra in the future.
+stdenv.mkDerivation rec {
+  pname = "skktools";
+  version = "1.3.4";
+  src = fetchFromGitHub {
+    owner = "skk-dev";
+    repo = "skktools";
+    rev = "skktools-${lib.replaceStrings ["."] ["_"] version}";
+    sha256 = "1zway8jsm18279xq8zlpr84iqiw373x3v0ysay74n9bjqxbl234a";
+  };
+  # # See "12.2. Package naming"
+  # name = "skktools-unstable-${version}";
+  # version = "2017-03-05";
+  # src = fetchFromGitHub {
+  #   owner = "skk-dev";
+  #   repo = "skktools";
+  #   rev = "e14d98e734d2fdff611385c7df65826e94d929db";
+  #   sha256 = "1k9zxqybl1l5h0a8px2awc920qrdyp1qls50h3kfrj3g65d08aq2";
+  # };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gdbm glib ];
+
+  meta = {
+    description = "A collection of tools to edit SKK dictionaries";
+    longDescription = ''
+      This package provides a collection of tools to manipulate
+      (merge, sort etc.) the dictionaries formatted for SKK Japanese
+      input method.
+    '';
+    homepage = "https://github.com/skk-dev/skktools";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ yuriaisaka ];
+    platforms = with lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix b/nixpkgs/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix
new file mode 100644
index 000000000000..627445136410
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation {
+  pname = "tegaki-zinnia-japanese";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "http://www.tegaki.org/releases/0.3/models/tegaki-zinnia-japanese-0.3.zip";
+    sha256 = "1nmg9acxhcqly9gwkyb9m0hpy76fll91ywk4b1q4xms0ajxip1h7";
+  };
+
+  meta = with lib; {
+    description = "Japanese handwriting model for the Zinnia engine";
+    homepage = "http://tegaki.org/";
+    license = licenses.lgpl21;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.gebner ];
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  makeFlags = [ "installpath=$(out)/share/tegaki/models/zinnia/" ];
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/touchegg/default.nix b/nixpkgs/pkgs/tools/inputmethods/touchegg/default.nix
new file mode 100644
index 000000000000..de30b853670a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/touchegg/default.nix
@@ -0,0 +1,81 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, nix-update-script
+, systemd
+, libinput
+, pugixml
+, cairo
+, xorg
+, gtk3-x11
+, pcre
+, pkg-config
+, cmake
+, pantheon
+, withPantheon ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "touchegg";
+  version = "2.0.17";
+
+  src = fetchFromGitHub {
+    owner = "JoseExposito";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-he6ERl6ZNWuD5StUqQWsUjeJ35nD0b8KddIAvntqlOI=";
+  };
+
+  patches = lib.optionals withPantheon [
+    # Required for the next patch to apply
+    # Reverts https://github.com/JoseExposito/touchegg/pull/603
+    (fetchpatch {
+      url = "https://github.com/JoseExposito/touchegg/commit/34e947181d84620021601e7f28deb1983a154da8.patch";
+      sha256 = "sha256-qbWwmEzVXvDAhhrGvMkKN4YNtnFfRW+Yra+i6VEQX4g=";
+      revert = true;
+    })
+    # Disable per-application gesture by default to make sure the default
+    # config does not conflict with Pantheon switchboard settings.
+    (fetchpatch {
+      url = "https://github.com/elementary/os-patches/commit/7d9b133e02132d7f13cf2fe850b2fe4c015c3c5e.patch";
+      sha256 = "sha256-ZOGVkxiXoTORXC6doz5r9IObAbYjhsDjgg3HtzlTSUc=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+  ];
+
+  buildInputs = [
+    systemd
+    libinput
+    pugixml
+    cairo
+    gtk3-x11
+    pcre
+  ] ++ (with xorg; [
+    libX11
+    libXtst
+    libXrandr
+    libXi
+    libXdmcp
+    libpthreadstubs
+    libxcb
+  ]);
+
+  PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "${placeholder "out"}/lib/systemd/system";
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/JoseExposito/touchegg";
+    description = "Linux multi-touch gesture recognizer";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.pantheon.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/triggerhappy/default.nix b/nixpkgs/pkgs/tools/inputmethods/triggerhappy/default.nix
new file mode 100644
index 000000000000..73df87a8262e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/triggerhappy/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, perl, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "triggerhappy";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "wertarbyte";
+    repo = "triggerhappy";
+    rev = "release/${version}";
+    sha256 = "0gb1qhrxwq7i5abd408d01a2dpf28nr1fph1fg7w7n0i5i1nnk90";
+  };
+
+  nativeBuildInputs = [ pkg-config perl ];
+  buildInputs = [ systemd ];
+
+  makeFlags = [ "PREFIX=$(out)" "BINDIR=$(out)/bin" ];
+
+  postInstall = ''
+    install -D -m 644 -t "$out/etc/triggerhappy/triggers.d" "triggerhappy.conf.examples"
+  '';
+
+  meta = with lib; {
+    description = "A lightweight hotkey daemon";
+    longDescription = ''
+      Triggerhappy is a hotkey daemon developed with small and embedded systems in
+      mind, e.g. linux based routers. It attaches to the input device files and
+      interprets the event data received and executes scripts configured in its
+      configuration.
+    '';
+    homepage = "https://github.com/wertarbyte/triggerhappy/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ taha ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/uim/data-hook.patch b/nixpkgs/pkgs/tools/inputmethods/uim/data-hook.patch
new file mode 100644
index 000000000000..be80962527ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/uim/data-hook.patch
@@ -0,0 +1,38 @@
+--- a/gtk2/immodule/Makefile.in	2015-11-24 16:21:08.967087208 +0900
++++ b/gtk2/immodule/Makefile.in	2015-11-24 16:22:53.316095150 +0900
+@@ -928,7 +928,6 @@
+ 
+ install-data-am: install-moduleLTLIBRARIES
+ 	@$(NORMAL_INSTALL)
+-	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
+ install-dvi: install-dvi-am
+ 
+ install-dvi-am:
+@@ -993,7 +992,7 @@
+ 	distclean-compile distclean-generic distclean-libtool \
+ 	distclean-tags distdir dvi dvi-am html html-am info info-am \
+ 	install install-am install-data install-data-am \
+-	install-data-hook install-dvi install-dvi-am install-exec \
++	install-dvi install-dvi-am install-exec \
+ 	install-exec-am install-html install-html-am install-info \
+ 	install-info-am install-man install-moduleLTLIBRARIES \
+ 	install-pdf install-pdf-am install-ps install-ps-am \
+--- a/gtk3/immodule/Makefile.in	2015-11-24 16:21:08.971087209 +0900
++++ b/gtk3/immodule/Makefile.in	2015-11-24 16:23:28.251097832 +0900
+@@ -896,7 +896,6 @@
+ 
+ install-data-am: install-moduleLTLIBRARIES
+ 	@$(NORMAL_INSTALL)
+-	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
+ install-dvi: install-dvi-am
+ 
+ install-dvi-am:
+@@ -959,7 +958,7 @@
+ 	cscopelist-am ctags ctags-am distclean distclean-compile \
+ 	distclean-generic distclean-libtool distclean-tags distdir dvi \
+ 	dvi-am html html-am info info-am install install-am \
+-	install-data install-data-am install-data-hook install-dvi \
++	install-data install-data-am install-dvi \
+ 	install-dvi-am install-exec install-exec-am install-html \
+ 	install-html-am install-info install-info-am install-man \
+ 	install-moduleLTLIBRARIES install-pdf install-pdf-am \
diff --git a/nixpkgs/pkgs/tools/inputmethods/uim/default.nix b/nixpkgs/pkgs/tools/inputmethods/uim/default.nix
new file mode 100644
index 000000000000..df1793eb36ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/uim/default.nix
@@ -0,0 +1,148 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, shared-mime-info
+, autoconf, automake, intltool, libtool, pkg-config, cmake
+, ruby, librsvg
+, ncurses, m17n_lib, m17n_db, expat
+, withAnthy ? true, anthy ? null
+, withGtk ? true
+, withGtk2 ? withGtk, gtk2 ? null
+, withGtk3 ? withGtk, gtk3 ? null
+# Was never enabled in the history of this package and is not needed by any
+# dependent package, hence disabled to save up closure size.
+, withQt ? false
+, withQt5 ? withQt, qt5 ? null
+, withLibnotify ? true, libnotify ? null
+, withSqlite ? true, sqlite ? null
+, withNetworking ? true, curl ? null, openssl ? null
+, withFFI ? true, libffi ? null
+
+# Things that are clearly an overkill to be enabled by default
+, withMisc ? false, libeb ? null
+}:
+
+assert withGtk2 -> gtk2 != null;
+assert withGtk3 -> gtk3 != null;
+
+assert withAnthy -> anthy != null;
+assert withLibnotify -> libnotify != null;
+assert withSqlite -> sqlite != null;
+assert withNetworking -> curl != null && openssl != null;
+assert withFFI -> libffi != null;
+assert withMisc -> libeb != null;
+
+stdenv.mkDerivation rec {
+  version = "1.8.8";
+  pname = "uim";
+
+  src = fetchFromGitHub {
+    owner = "uim";
+    repo = "uim";
+    rev = "2c0958c9c505a87e70e344c2192e2e5123c71ea5";
+    fetchSubmodules = true;
+    sha256 = "1hkjxi5r49gcna37m3jvykny5hz9ram4y8a3q7lw4qzr52mz9pdp";
+  };
+
+  nativeBuildInputs = [
+    autoconf automake intltool libtool pkg-config cmake
+
+    ruby # used by sigscheme build to generate function tables
+    librsvg # used by uim build to generate png pixmaps from svg
+  ] ++ lib.optionals withQt5 [
+    qt5.wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    ncurses m17n_lib m17n_db expat
+  ]
+  ++ lib.optional withAnthy anthy
+  ++ lib.optional withGtk2 gtk2
+  ++ lib.optional withGtk3 gtk3
+  ++ lib.optionals withQt5 [ qt5.qtbase qt5.qtx11extras ]
+  ++ lib.optional withLibnotify libnotify
+  ++ lib.optional withSqlite sqlite
+  ++ lib.optionals withNetworking [
+    curl openssl
+  ]
+  ++ lib.optional withFFI libffi
+  ++ lib.optional withMisc libeb;
+
+  prePatch = ''
+    patchShebangs *.sh */*.sh */*/*.sh
+
+    # configure sigscheme in maintainer mode or else some function tables won't get autogenerated
+    substituteInPlace configure.ac \
+      --replace "--with-master-pkg=uim --enable-conf=uim" \
+                "--enable-maintainer-mode --with-master-pkg=uim --enable-conf=uim"
+
+    # generate ./configure files
+    (cd sigscheme/libgcroots; ./autogen.sh)
+    (cd sigscheme; ./autogen.sh)
+    ./autogen.sh
+  '';
+
+  patches = [
+    ./data-hook.patch
+
+    # Pull upstream fix for -fno-common toolchains
+    #   https://github.com/uim/libgcroots/pull/4
+    (fetchpatch {
+      name = "libgcroots-fno-common.patch";
+      url = "https://github.com/uim/libgcroots/commit/7e39241344ad0663409e836560ae6b5eb231e1fc.patch";
+      sha256 = "0iifcl5lk8bvl0cflm47gkymg88aiwzj0gxh2aj3mqlyhvyx78nz";
+      # Patch comes from git submodule. Relocate as:
+      # a/include/private/gc_priv.h -> a/sigscheme/libgcroots/include/private/gc_priv.h
+      stripLen = 1;
+      extraPrefix = "sigscheme/libgcroots/";
+    })
+  ];
+
+  configureFlags = [
+    # configure in maintainer mode or else some pixmaps won't get autogenerated
+    # this should imply the above `--enable-maintainer-mode`, but it does not
+    "--enable-maintainer-mode"
+
+    "--enable-pref"
+    "--with-skk"
+    "--with-x"
+    "--with-xft"
+    "--with-expat=${expat.dev}"
+  ]
+  ++ lib.optional withAnthy "--with-anthy-utf8"
+  ++ lib.optional withGtk2 "--with-gtk2"
+  ++ lib.optional withGtk3 "--with-gtk3"
+  ++ lib.optionals withQt5 [
+    "--with-qt5"
+    "--with-qt5-immodule"
+  ]
+  ++ lib.optional withLibnotify "--enable-notify=libnotify"
+  ++ lib.optional withSqlite "--with-sqlite3"
+  ++ lib.optionals withNetworking [
+    "--with-curl"
+    "--with-openssl-dir=${openssl.dev}"
+  ]
+  ++ lib.optional withFFI "--with-ffi"
+  ++ lib.optional withMisc "--with-eb";
+
+  # TODO: things in `./configure --help`, but not in nixpkgs
+  #--with-canna            Use Canna [default=no]
+  #--with-wnn              Build with libwnn [default=no]
+  #--with-mana             Build a plugin for Mana [default=yes]
+  #--with-prime            Build a plugin for PRIME [default=yes]
+  #--with-sj3              Use SJ3 [default=no]
+  #--with-osx-dcs          Build with OS X Dictionary Services [default=no]
+
+  # TODO: fix this in librsvg/glib later
+  # https://github.com/NixOS/nixpkgs/pull/57027#issuecomment-475461733
+  preBuild = ''
+    export XDG_DATA_DIRS="${shared-mime-info}/share"
+  '';
+
+  dontUseCmakeConfigure = true;
+
+  meta = with lib; {
+    homepage    = src.meta.homepage;
+    description = "A multilingual input method framework";
+    license     = licenses.bsd3;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ ericsagnes oxij ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/unnaturalscrollwheels/default.nix b/nixpkgs/pkgs/tools/inputmethods/unnaturalscrollwheels/default.nix
new file mode 100644
index 000000000000..b28b7ad784f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/unnaturalscrollwheels/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, _7zz
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "unnaturalscrollwheels";
+  version = "1.3.0";
+
+  src = fetchurl {
+    url = "https://github.com/ther0n/UnnaturalScrollWheels/releases/download/${finalAttrs.version}/UnnaturalScrollWheels-${finalAttrs.version}.dmg";
+    sha256 = "1c6vlf0kc7diz0hb1fmrqaj7kzzfvr65zcchz6xv5cxf0md4n70r";
+  };
+  sourceRoot = ".";
+
+  # APFS format is unsupported by undmg
+  nativeBuildInputs = [ _7zz ];
+  unpackCmd = "7zz x $curSrc";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    cp -r *.app $out/Applications
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Invert scroll direction for physical scroll wheels";
+    homepage = "https://github.com/ther0n/UnnaturalScrollWheels";
+    license = licenses.gpl3Plus;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ emilytrau Enzime ];
+    platforms = platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/inputmethods/xlibinput_calibrator/default.nix b/nixpkgs/pkgs/tools/inputmethods/xlibinput_calibrator/default.nix
new file mode 100644
index 000000000000..2b6585c92513
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/xlibinput_calibrator/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libX11
+, libXi
+, libXrandr
+, txt2man
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xlibinput-calibrator";
+  version = "0.11";
+
+  src = fetchFromGitHub {
+    owner = "kreijack";
+    repo = "xlibinput_calibrator";
+    rev = "v${version}";
+    hash = "sha256-MvlamN8WSER0zN9Ru3Kr2MFARD9s7PYKkRtyD8s6ZPI=";
+  };
+
+  nativeBuildInputs = [
+    txt2man
+  ];
+
+  buildInputs = [
+    libX11
+    libXi
+    libXrandr
+  ];
+
+  installFlags = [ "prefix=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Touch calibrator for libinput";
+    homepage = "https://github.com/kreijack/xlibinput_calibrator";
+    changelog = "https://github.com/kreijack/xlibinput_calibrator/blob/${src.rev}/Changelog";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ atemu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/zinnia/default.nix b/nixpkgs/pkgs/tools/inputmethods/zinnia/default.nix
new file mode 100644
index 000000000000..8070dbc66ba8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/zinnia/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "zinnia";
+  version = "2016-08-28";
+
+  src = fetchFromGitHub {
+    owner = "taku910";
+    repo = "zinnia";
+    rev = "fd74d8c8680bb3df8692279151ea6339ab68e32b";
+    sha256 = "1izjy5qw6swg0rs2ym2i72zndb90mwrfbd1iv8xbpwckbm4899lg";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */zinnia)
+  '';
+
+  meta = with lib; {
+    description = "Online hand recognition system with machine learning";
+    homepage = "http://taku910.github.io/zinnia/";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/llm/gorilla-cli/default.nix b/nixpkgs/pkgs/tools/llm/gorilla-cli/default.nix
new file mode 100644
index 000000000000..276793c2c8bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/llm/gorilla-cli/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, python3
+, fetchFromGitHub
+, nix-update-script
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gorilla-cli";
+  version = "0.0.9";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "gorilla-llm";
+    repo = "gorilla-cli";
+    rev = version;
+    hash = "sha256-3h3QtBDKswTDL7zNM2C4VWiGCqknm/bxhP9sw4ieIcQ=";
+  };
+
+  disabled = python3.pythonOlder "3.6";
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+    halo
+    prompt-toolkit
+  ];
+
+  passthru.updateScript = nix-update-script { };
+
+  # no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "LLMs for your CLI";
+    homepage = "https://github.com/gorilla-llm/gorilla-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ happysalada ];
+    mainProgram = "gorilla";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/llm/heygpt/default.nix b/nixpkgs/pkgs/tools/llm/heygpt/default.nix
new file mode 100644
index 000000000000..eb2c7e4b11b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/llm/heygpt/default.nix
@@ -0,0 +1,34 @@
+{
+  fetchFromGitHub,
+  lib,
+  openssl,
+  rustPlatform,
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "heygpt";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "fuyufjh";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-oP0yIdYytXSsbZ2pNaZ8Rrak1qJsudTe/oP6dGncGUM=";
+  };
+
+  cargoHash = "sha256-yKHAZpELuUD7wlM3Mi7XvxbKgdU1QxD9hsvIFcj3twE=";
+
+  nativeBuildInputs = [openssl];
+
+  # Needed to get openssl-sys to use pkg-config.
+  OPENSSL_NO_VENDOR = 1;
+  OPENSSL_LIB_DIR = "${lib.getLib openssl}/lib";
+  OPENSSL_DIR = "${lib.getDev openssl}";
+
+  meta = with lib; {
+    description = "A simple command-line interface for ChatGPT API";
+    homepage = "https://github.com/fuyufjh/heygpt";
+    license = licenses.mit;
+    mainProgram = "heygpt";
+    maintainers = with maintainers; [aldoborrero];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/llm/shell_gpt/default.nix b/nixpkgs/pkgs/tools/llm/shell_gpt/default.nix
new file mode 100644
index 000000000000..ed3f27633e81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/llm/shell_gpt/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, python3
+, fetchPypi
+, nix-update-script
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "shell_gpt";
+  version = "1.0.1";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-/rBD2n5IZzSeC5dmVQRZY8UrzUOkAEVHp8KwIfV1hec=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    python3.pkgs.pythonRelaxDepsHook
+    python3
+    pip
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    markdown-it-py
+    rich
+    distro
+    typer
+    requests
+    hatchling
+  ];
+
+  pythonRelaxDeps = [ "requests" "rich" "distro" "typer" ];
+
+  passthru.updateScript = nix-update-script { };
+
+  doCheck = false;
+
+  meta = with lib; {
+    mainProgram = "sgpt";
+    homepage = "https://github.com/TheR1D/shell_gpt";
+    description = "Access ChatGPT from your terminal";
+    platforms = platforms.unix;
+    license = licenses.mit;
+    maintainers = with maintainers; [ mglolenstine ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/0x/Cargo.lock b/nixpkgs/pkgs/tools/misc/0x/Cargo.lock
new file mode 100644
index 000000000000..4c0c44ae6ea1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/0x/Cargo.lock
@@ -0,0 +1,232 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "argh"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7e7e4aa7e40747e023c0761dafcb42333a9517575bbf1241747f68dd3177a62"
+dependencies = [
+ "argh_derive",
+ "argh_shared",
+]
+
+[[package]]
+name = "argh_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69f2bd7ff6ed6414f4e5521bd509bae46454bbd513801767ced3f21a751ab4bc"
+dependencies = [
+ "argh_shared",
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "argh_shared"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47253b98986dafc7a3e1cf3259194f1f47ac61abb57a57f46ec09e48d004ecda"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "colorous"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "882e392738ed515520f38708166e9efec85ee154f80bf1fc64510e2fc54bf481"
+
+[[package]]
+name = "find-crate"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2"
+dependencies = [
+ "toml",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "ohx"
+version = "0.1.0"
+dependencies = [
+ "argh",
+ "colorous",
+ "palette",
+]
+
+[[package]]
+name = "palette"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f9cd68f7112581033f157e56c77ac4a5538ec5836a2e39284e65bd7d7275e49"
+dependencies = [
+ "approx",
+ "num-traits",
+ "palette_derive",
+ "phf",
+]
+
+[[package]]
+name = "palette_derive"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05eedf46a8e7c27f74af0c9cfcdb004ceca158cb1b918c6f68f8d7a549b3e427"
+dependencies = [
+ "find-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+dependencies = [
+ "phf_macros",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+
+[[package]]
+name = "serde"
+version = "1.0.143"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53e8e5d5b70924f74ff5c6d64d9a5acd91422117c60f48c4e07855238a254553"
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "syn"
+version = "1.0.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
diff --git a/nixpkgs/pkgs/tools/misc/0x/default.nix b/nixpkgs/pkgs/tools/misc/0x/default.nix
new file mode 100644
index 000000000000..b76c13e66287
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/0x/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "0x";
+  version = "unstable-2022-07-11";
+
+  src = fetchFromGitHub {
+    owner = "mcy";
+    repo = "0x";
+    rev = "8070704b8efdd1f16bc7e01e393230f16cd8b0a6";
+    hash = "sha256-NzD/j8rBfk/cpoBnkFHFqpXz58mswLZr8TUS16vlrZQ=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  postPatch = ''
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mcy/0x";
+    description = "A colorful, configurable xxd";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/3llo/Gemfile b/nixpkgs/pkgs/tools/misc/3llo/Gemfile
new file mode 100644
index 000000000000..7ad7c5aab15a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem '3llo', '1.3.1'
diff --git a/nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock b/nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock
new file mode 100644
index 000000000000..76926d648aff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock
@@ -0,0 +1,27 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    3llo (1.3.1)
+      tty-prompt (~> 0.20)
+    pastel (0.8.0)
+      tty-color (~> 0.5)
+    tty-color (0.6.0)
+    tty-cursor (0.7.1)
+    tty-prompt (0.23.1)
+      pastel (~> 0.8)
+      tty-reader (~> 0.8)
+    tty-reader (0.9.0)
+      tty-cursor (~> 0.7)
+      tty-screen (~> 0.8)
+      wisper (~> 2.0)
+    tty-screen (0.8.1)
+    wisper (2.0.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  3llo (= 1.3.1)
+
+BUNDLED WITH
+   2.2.33
diff --git a/nixpkgs/pkgs/tools/misc/3llo/default.nix b/nixpkgs/pkgs/tools/misc/3llo/default.nix
new file mode 100644
index 000000000000..8515849f3a9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/default.nix
@@ -0,0 +1,16 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "3llo";
+
+  gemdir  = ./.;
+
+  exes = [ "3llo" ];
+
+  meta = with lib; {
+    description = "Trello interactive CLI on terminal";
+    license = licenses.mit;
+    homepage = "https://github.com/qcam/3llo";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/3llo/gemset.nix b/nixpkgs/pkgs/tools/misc/3llo/gemset.nix
new file mode 100644
index 000000000000..4de7651dbce0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/gemset.nix
@@ -0,0 +1,86 @@
+{
+  "3llo" = {
+    dependencies = ["tty-prompt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w327skga2lpq9rbqqxy6w1r6k9k1l8prk5wmzrycvydn1wp7jk2";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  pastel = {
+    dependencies = ["tty-color"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xash2gj08dfjvq4hy6l1z22s5v30fhizwgs10d6nviggpxsj7a8";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  tty-color = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0aik4kmhwwrmkysha7qibi2nyzb4c8kp42bd5vxnf8sf7b53g73g";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  tty-prompt = {
+    dependencies = ["pastel" "tty-reader"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1j4y8ik82azjxshgd4i1v4wwhsv3g9cngpygxqkkz69qaa8cxnzw";
+      type = "gem";
+    };
+    version = "0.23.1";
+  };
+  tty-reader = {
+    dependencies = ["tty-cursor" "tty-screen" "wisper"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cf2k7w7d84hshg4kzrjvk9pkyc2g1m3nx2n1rpmdcf0hp4p4af6";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  tty-screen = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18jr6s1cg8yb26wzkqa6874q0z93rq0y5aw092kdqazk71y6a235";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  wisper = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rpsi0ziy78cj82sbyyywby4d0aw0a5q84v65qd28vqn79fbq5yf";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/3mux/default.nix b/nixpkgs/pkgs/tools/misc/3mux/default.nix
new file mode 100644
index 000000000000..9ec4572328e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3mux/default.nix
@@ -0,0 +1,58 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, makeWrapper }:
+
+buildGoModule rec {
+  pname = "3mux";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "aaronjanse";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QT4QXTlJf2NfTqXE4GF759EoW6Ri12lxDyodyEFc+ag=";
+  };
+
+  patches = [
+    # Needed so that the subsequent patch applies.
+    (fetchpatch {
+      name = "use-shorter-uuids.patch";
+      url = "https://github.com/aaronjanse/3mux/commit/6dd36694586f96e3c82ef7db1a0e7917ceb05794.patch";
+      hash = "sha256-FnFupOIIQi66mvjshn3EQ6XRzC4cLx3vGTeTUM1HOwM=";
+    })
+    # Fix the build for Darwin when building with Go 1.18.
+    # https://github.com/aaronjanse/3mux/pull/127
+    (fetchpatch {
+      name = "darwin-go-1.18-fix.patch";
+      url = "https://github.com/aaronjanse/3mux/commit/f2c26c1037927896d6e9a17ea038f8260620fbd4.patch";
+      hash = "sha256-RC3p30r0PGUKrxo8uOLL02oyfLqLfhNjBYy6E+OQ2f0=";
+    })
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  vendorHash = "sha256-KMcl6mj+cEgvdZMzBxUtGJsgwPdFuXrY3yjmkB3CS4o=";
+
+  # This is a package used for internally testing 3mux. It's meant for
+  # use by 3mux maintainers/contributors only.
+  excludedPackages = [ "fuzz" ];
+
+  # 3mux needs to have itself in the path so users can run `3mux detach`.
+  # This ensures that, while inside 3mux, the binary in the path is the
+  # same version as the 3mux hosting the session. This also allows users
+  # to use 3mux via `nix run nixpkgs#_3mux` (otherwise they'd get "command
+  # not found").
+  postInstall = ''
+    wrapProgram $out/bin/3mux --prefix PATH : $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Terminal multiplexer inspired by i3";
+    longDescription = ''
+      Terminal multiplexer with out-of-the-box support for search,
+      mouse-controlled scrollback, and i3-like keybindings
+    '';
+    homepage = "https://github.com/aaronjanse/3mux";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaronjanse Br1ght0ne ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/SP800-90B_EntropyAssessment/default.nix b/nixpkgs/pkgs/tools/misc/SP800-90B_EntropyAssessment/default.nix
new file mode 100644
index 000000000000..f2ff558168d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/SP800-90B_EntropyAssessment/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bzip2
+, libdivsufsort
+, jsoncpp
+, openssl
+, mpfr
+}:
+
+stdenv.mkDerivation rec {
+  pname = "SP800-90B_EntropyAssessment";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "usnistgov";
+    repo = "SP800-90B_EntropyAssessment";
+    rev = "v${version}";
+    hash = "sha256-KZQ7kC0PbBkjLEQZIqYakQ91OvCxruhdfUwiRHtno3w=";
+  };
+
+  buildInputs = [ bzip2 libdivsufsort jsoncpp openssl mpfr ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "-march=native" ""
+  '';
+
+  sourceRoot = "source/cpp";
+
+  makeFlags = [
+    "CROSS_COMPILE=${stdenv.cc.targetPrefix}"
+    "ARCH=${stdenv.hostPlatform.linuxArch}"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp ea_* $out/bin
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "https://github.com/usnistgov/SP800-90B_EntropyAssessment";
+    description = "Implementation of min-entropy assessment methods included in Special Publication 800-90B";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.free; #this software uses the NIST software license
+    maintainers = with lib.maintainers; [ orichter thillux ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aaa/default.nix b/nixpkgs/pkgs/tools/misc/aaa/default.nix
new file mode 100644
index 000000000000..0988bbca7acb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aaa/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "aaa";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "DomesticMoth";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-gIOlPjZOcmVLi9oOn4gBv6F+3Eq6t5b/3fKzoFqxclw=";
+  };
+  cargoSha256 = "sha256-ugB0r9qiGRurc30GrJH4MKM6fWZ99+f1Gy7/1lSmrwU=";
+
+  meta = with lib; {
+    description = "Terminal viewer for 3a format";
+    homepage = "https://github.com/DomesticMoth/aaa";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ asciimoth ];
+    mainProgram = "aaa";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/abduco/default.nix b/nixpkgs/pkgs/tools/misc/abduco/default.nix
new file mode 100644
index 000000000000..011f186bbbe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/abduco/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchpatch, fetchzip, writeText, conf ? null }:
+
+let
+  rev = "8c32909a159aaa9484c82b71f05b7a73321eb491";
+in
+stdenv.mkDerivation {
+  pname = "abduco";
+  version = "unstable-2020-04-30";
+
+  src = fetchzip {
+    urls = [
+      "https://github.com/martanne/abduco/archive/${rev}.tar.gz"
+      "https://git.sr.ht/~martanne/abduco/archive/${rev}.tar.gz"
+    ];
+    hash = "sha256-o7SPK/G31cW/rrLwV3UJOTq6EBHl6AEE/GdeKGlHdyg=";
+  };
+
+  preBuild = lib.optionalString (conf != null)
+    "cp ${writeText "config.def.h" conf} config.def.h";
+
+  installFlags = [ "install-completion" ];
+  CFLAGS = lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
+
+  patches = [
+    # https://github.com/martanne/abduco/pull/22
+    (fetchpatch {
+      name = "use-XDG-directory-scheme-by-default";
+      url = "https://github.com/martanne/abduco/commit/0e9a00312ac9777edcb169122144762e3611287b.patch";
+      sha256 = "sha256-4NkIflbRkUpS5XTM/fxBaELpvlZ4S5lecRa8jk0XC9g=";
+    })
+
+    # “fix bug where attaching to dead session won't give underlying exit codeâ€
+    # https://github.com/martanne/abduco/pull/45
+    (fetchpatch {
+      name = "exit-code-when-attaching-to-dead-session";
+      url = "https://github.com/martanne/abduco/commit/972ca8ab949ee342569dbd66b47cc4a17b28247b.patch";
+      sha256 = "sha256-8hios0iKYDOmt6Bi5NNM9elTflGudnG2xgPF1pSkHI0=";
+    })
+
+    # “report pixel sizes to child processes that use ioctl(0, TIOCGWINSZ, ...)â€
+    # used for kitty & other terminals that display images
+    # https://github.com/martanne/abduco/pull/62
+    (fetchpatch {
+      name = "report-pixel-sizes-to-child-processes";
+      url = "https://github.com/martanne/abduco/commit/a1e222308119b3251f00b42e1ddff74a385d4249.patch";
+      sha256 = "sha256-eiF0A4IqJrrvXxjBYtltuVNpxQDv/iQPO+K7Y8hWBGg=";
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "http://brain-dump.org/projects/abduco";
+    license = licenses.isc;
+    description = "Allows programs to be run independently from its controlling terminal";
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.unix;
+    mainProgram = "abduco";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix b/nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix
new file mode 100644
index 000000000000..4a87c9692ca9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix
@@ -0,0 +1,27 @@
+{ lib, python3, fetchPypi }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "adafruit-ampy";
+  version = "1.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "f4cba36f564096f2aafd173f7fbabb845365cc3bb3f41c37541edf98b58d3976";
+  };
+
+  nativeBuildInputs = [ setuptools-scm ];
+  propagatedBuildInputs = [ click python-dotenv pyserial ];
+
+  # No tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/pycampers/ampy";
+    license = licenses.mit;
+    description = "Utility to interact with a MicroPython board over a serial connection";
+    maintainers = with maintainers; [ ];
+    mainProgram = "ampy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/addic7ed-cli/default.nix b/nixpkgs/pkgs/tools/misc/addic7ed-cli/default.nix
new file mode 100644
index 000000000000..d335cfb1d737
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/addic7ed-cli/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, python3Packages
+, fetchPypi
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "addic7ed-cli";
+  version = "1.4.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "182cpwxpdybsgl1nps850ysvvjbqlnx149kri4hxhgm58nqq0qf5";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    requests
+    pyquery
+  ];
+
+  # Tests require network access
+  doCheck = false;
+  pythonImportsCheck = [ "addic7ed_cli" ];
+
+  meta = with lib; {
+    description = "A commandline access to addic7ed subtitles";
+    homepage = "https://github.com/BenoitZugmeyer/addic7ed-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aethelz ];
+    platforms = platforms.unix;
+    mainProgram = "addic7ed";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/addlicense/default.nix b/nixpkgs/pkgs/tools/misc/addlicense/default.nix
new file mode 100644
index 000000000000..532bf3464fb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/addlicense/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+}:
+
+buildGoModule rec {
+  pname = "addlicense";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "addlicense";
+    rev = "v${version}";
+    sha256 = "sha256-YMMHj6wctKtJi/rrcMIrLmNw/uvO6wCwokgYRQxcsFw=";
+  };
+
+  patches = [
+    # Add support for Nix files. Upstream is slow with responding to PRs,
+    # patch backported from PR https://github.com/google/addlicense/pull/153.
+    (fetchpatch {
+      url = "https://github.com/google/addlicense/commit/e0fb3f44cc7670dcc5cbcec2211c9ad238c5f9f1.patch";
+      hash = "sha256-XCAvL+HEa1hGc0GAnl+oYHKzBJ3I5ArS86vgABrP/Js=";
+    })
+  ];
+
+  vendorHash = "sha256-2mncc21ecpv17Xp8PA9GIodoaCxNBacbbya/shU8T9Y=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Ensures source code files have copyright license headers by scanning directory patterns recursively";
+    homepage = "https://github.com/google/addlicense";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "addlicense";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/adrgen/default.nix b/nixpkgs/pkgs/tools/misc/adrgen/default.nix
new file mode 100644
index 000000000000..4a367062cafa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/adrgen/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+, testers
+, adrgen
+}:
+
+buildGoModule rec {
+  pname = "adrgen";
+  version = "0.4.0-beta";
+
+  src = fetchFromGitHub {
+    owner = "asiermarques";
+    repo = "adrgen";
+    rev = "v${version}";
+    hash = "sha256-2ZE/orsfwL59Io09c4yfXt2enVmpSM/QHlUMgyd9RYQ=";
+  };
+
+  patches = [
+    # https://github.com/asiermarques/adrgen/pull/14
+    (fetchpatch {
+      name = "update-x-sys-for-go-1.18-on-aarch64-darwin.patch";
+      url = "https://github.com/asiermarques/adrgen/commit/485dc383106467d1029ee6d92c9bcbc3c2281626.patch";
+      hash = "sha256-38ktHrRgW5ysQmafvFthNtkZ6nnM61z4yEA7wUGmWb4=";
+    })
+  ];
+
+  vendorHash = "sha256-RXwwv3Q/kQ6FondpiUm5XZogAVK2aaVmKu4hfr+AnAM=";
+
+  passthru.tests.version = testers.testVersion {
+    package = adrgen;
+    command = "adrgen version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/asiermarques/adrgen";
+    description = "A command-line tool for generating and managing Architecture Decision Records";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+    mainProgram = "adrgen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aescrypt/default.nix b/nixpkgs/pkgs/tools/misc/aescrypt/default.nix
new file mode 100644
index 000000000000..0ced53804643
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aescrypt/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libiconv }:
+
+stdenv.mkDerivation rec {
+  version = "3.16";
+  pname = "aescrypt";
+
+  src = fetchurl {
+    url = "https://www.aescrypt.com/download/v3/linux/${pname}-${version}.tgz";
+    sha256 = "sha256-4uGS0LReq5dI7+Wel7ZWzFXx+utZWi93q4TUSw7AhNI=";
+  };
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-liconv";
+
+  preBuild = ''
+    substituteInPlace src/Makefile --replace "CC=gcc" "CC?=gcc"
+    cd src
+  '';
+
+  installPhase= ''
+    mkdir -p $out/bin
+    cp aescrypt $out/bin
+    cp aescrypt_keygen $out/bin
+  '';
+
+  buildInputs = [ libiconv ];
+
+  meta = with lib; {
+    description = "Encrypt files with Advanced Encryption Standard (AES)";
+    homepage    = "https://www.aescrypt.com/";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ lovek323 qknight ];
+    platforms   = lib.platforms.all;
+    hydraPlatforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/afetch/default.nix b/nixpkgs/pkgs/tools/misc/afetch/default.nix
new file mode 100644
index 000000000000..9b8fe7e4e091
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/afetch/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "afetch";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "13-CF";
+    repo = "afetch";
+    rev = "V${version}";
+    sha256 = "sha256-bHP3DJpgh89AaCX4c1tQGaZ/PiWjArED1rMdszFUq+U=";
+  };
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "A fetch program written in C";
+    homepage = "https://github.com/13-CF/afetch";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 jk ];
+    platforms = platforms.linux;
+    mainProgram = "afetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/agedu/default.nix b/nixpkgs/pkgs/tools/misc/agedu/default.nix
new file mode 100644
index 000000000000..d8b2c1a2c5ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/agedu/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv
+, fetchgit
+, cmake
+, halibut
+}:
+let
+  date = "20211129";
+  rev = "8cd63c5";
+in
+stdenv.mkDerivation {
+  pname = "agedu";
+  version = "${date}.${rev}";
+
+  # upstream provides tarballs but it seems they disappear after the next version is released
+  src = fetchgit {
+    url = "https://git.tartarus.org/simon/agedu.git";
+    inherit rev;
+    hash = "sha256-5wqpL7wrFwIf6lxVte+GXLsXYY0/36EIAUepVNDCnSE=";
+  };
+
+  nativeBuildInputs = [ cmake halibut ];
+
+  meta = with lib; {
+    description = "A Unix utility for tracking down wasted disk space";
+    longDescription = ''
+       Most Unix file systems, in their default mode, helpfully record when a
+       file was last accessed. So if you generated a large amount of data years
+       ago, forgot to clean it up, and have never used it since, then it ought
+       in principle to be possible to use those last-access time stamps to tell
+       the difference between that and a large amount of data you're still
+       using regularly.
+
+       agedu uses this information to tell you which files waste disk space when
+       you haven't used them since a long time.
+    '';
+    homepage = "https://www.chiark.greenend.org.uk/~sgtatham/agedu/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ symphorien ];
+    platforms = platforms.unix;
+    mainProgram = "agedu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aichat/default.nix b/nixpkgs/pkgs/tools/misc/aichat/default.nix
new file mode 100644
index 000000000000..3a35cb888497
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aichat/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, darwin
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "aichat";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "sigoden";
+    repo = "aichat";
+    rev = "v${version}";
+    hash = "sha256-GWT3NYoEQ6fNLeTdBybJyQ0aqYbtaRzK1A3grUL+4jM=";
+  };
+
+  cargoHash = "sha256-Aah6OcQW2AW+70azLEyS4xnB3AFedvA5MZP+u8RrB9s=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Use GPT-4(V), Gemini, LocalAI, Ollama and other LLMs in the terminal";
+    homepage = "https://github.com/sigoden/aichat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mwdomino ];
+    mainProgram = "aichat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix b/nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix
new file mode 100644
index 000000000000..525d65dd7e08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, pkg-config
+, wrapGAppsHook
+, gst_all_1
+, libnotify
+, libayatana-appindicator
+}:
+
+stdenv.mkDerivation rec {
+  pname = "alarm-clock-applet";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = "alarm-clock";
+    rev = version;
+    hash = "sha256-10hkWWEsAUJnGeu35bR5d0RFKd9CKDZI7WGMzmEM3rI=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/alarm-clock-applet/alarm-clock/commit/6a11003099660dfae0e3d5800f49880d3a26f5ec.patch";
+      hash = "sha256-NP1PlEw5AFWZgywvppIs2e+5EfMSPbU4Pq2tIfwODrQ=";
+    })
+    (fetchpatch {
+      url = "https://github.com/alarm-clock-applet/alarm-clock/commit/cbcf22fac5b45ab251ade2e7e993f422f33f926e.patch";
+      hash = "sha256-xKaaNfXsv9Ckwy73r1n93kOWIZ01fU5GDqYSQCch1Kc=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gst_all_1.gstreamer
+    libnotify
+    libayatana-appindicator
+  ];
+
+  cmakeFlags = [
+    # gconf is already deprecated
+    "-DENABLE_GCONF_MIGRATION=OFF"
+  ];
+
+  meta = with lib; {
+    description = "A fully-featured alarm clock with an indicator";
+    homepage = "https://alarm-clock-applet.github.io";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.linux;
+    mainProgram = "alarm-clock-applet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/altserver-linux/default.nix b/nixpkgs/pkgs/tools/misc/altserver-linux/default.nix
new file mode 100644
index 000000000000..701fe0d5afb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/altserver-linux/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, fetchurl
+, lib
+, avahi-compat
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "altserver-linux";
+  version = "0.0.5";
+
+  src = fetchurl {
+    url = "https://github.com/NyaMisty/AltServer-Linux/releases/download/v${finalAttrs.version}/AltServer-x86_64";
+    hash = "sha256-C+fDrcaewRd6FQMrO443xdDk/vtHycQ5zWLCOLPqF/s=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp $src $out/bin/alt-server
+    chmod u+x $out/bin/alt-server
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/NyaMisty/AltServer-Linux";
+    description = "AltServer for AltStore, but on-device. Requires root privileges as well as running a custom anisette server currently";
+    license = licenses.agpl3;
+    mainProgram = "alt-server";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ max-amb ];
+  };
+})
+
diff --git a/nixpkgs/pkgs/tools/misc/android-tools/default.nix b/nixpkgs/pkgs/tools/misc/android-tools/default.nix
new file mode 100644
index 000000000000..891bea3fe474
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/android-tools/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl
+, cmake, ninja, pkg-config, perl, go, python3
+, protobuf, zlib, gtest, brotli, lz4, zstd, libusb1, pcre2
+}:
+
+let
+  pythonEnv = python3.withPackages(ps: [ ps.protobuf ]);
+in
+
+stdenv.mkDerivation rec {
+  pname = "android-tools";
+  version = "34.0.4";
+
+  src = fetchurl {
+    url = "https://github.com/nmeum/android-tools/releases/download/${version}/android-tools-${version}.tar.xz";
+    hash = "sha256-eiL/nOqB/0849WBoeFjo+PtzNiRBJZfjzBqwJi+No6E=";
+  };
+
+  nativeBuildInputs = [ cmake ninja pkg-config perl go ];
+  buildInputs = [ protobuf zlib gtest brotli lz4 zstd libusb1 pcre2 ];
+  propagatedBuildInputs = [ pythonEnv ];
+
+  preConfigure = ''
+    export GOCACHE=$TMPDIR/go-cache
+  '';
+
+  meta = with lib; {
+    description = "Android SDK platform tools";
+    longDescription = ''
+      Android SDK Platform-Tools is a component for the Android SDK. It
+      includes tools that interface with the Android platform, such as adb and
+      fastboot. These tools are required for Android app development. They're
+      also needed if you want to unlock your device bootloader and flash it
+      with a new system image.
+      Currently the following tools are supported:
+      - adb
+      - fastboot
+      - mke2fs.android (required by fastboot)
+      - simg2img, img2simg, append2simg
+      - lpdump, lpmake, lpadd, lpflash, lpunpack
+      - mkbootimg, unpack_bootimg, repack_bootimg, avbtool
+      - mkdtboimg
+    '';
+    # https://developer.android.com/studio/command-line#tools-platform
+    # https://developer.android.com/studio/releases/platform-tools
+    homepage = "https://github.com/nmeum/android-tools";
+    license = with licenses; [ asl20 unicode-dfs-2015 ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/antimicrox/default.nix b/nixpkgs/pkgs/tools/misc/antimicrox/default.nix
new file mode 100644
index 000000000000..85e9af7bb67e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/antimicrox/default.nix
@@ -0,0 +1,44 @@
+{ mkDerivation
+, lib
+, cmake
+, extra-cmake-modules
+, pkg-config
+, SDL2
+, qttools
+, xorg
+, fetchFromGitHub
+, itstool
+}:
+
+mkDerivation rec {
+  pname = "antimicrox";
+  version = "3.3.4";
+
+  src = fetchFromGitHub {
+    owner = "AntiMicroX";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-WEtKeQKRZcYpZ4mnFdj4ZRApBuD8fByf11Uu6ylbAcY=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules pkg-config itstool ];
+  buildInputs = [
+    SDL2
+    qttools
+    xorg.libXtst
+  ];
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+        --replace "/usr/lib/udev/rules.d/" "$out/lib/udev/rules.d/"
+  '';
+
+  meta = with lib; {
+    description = "GUI for mapping keyboard and mouse controls to a gamepad";
+    inherit (src.meta) homepage;
+    maintainers = with maintainers; [ sbruder ];
+    license = licenses.gpl3Plus;
+    platforms = with platforms; linux;
+    mainProgram = "antimicrox";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile b/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile
new file mode 100644
index 000000000000..be47216200d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile
@@ -0,0 +1,37 @@
+source 'https://rubygems.org'
+gemspec
+
+
+group :development, :test do
+  #gem 'anystyle-data', github: 'inukshuk/anystyle-data'
+  #gem 'wapiti', github: 'inukshuk/wapiti-ruby'
+  gem 'bibtex-ruby'
+  gem 'rake'
+  gem 'rspec', '~>3.0'
+  gem 'language_detector', github: 'feedbackmine/language_detector'
+  gem 'unicode-scripts'
+  gem 'edtf'
+  gem 'citeproc'
+  gem 'unicode_utils' if RUBY_VERSION < '2.4'
+end
+
+group :coverage do
+  gem 'simplecov', require: false
+  gem 'coveralls', require: false if ENV['CI']
+end
+
+group :debug do
+  gem 'byebug', require: false
+end
+
+group :profile do
+  gem 'ruby-prof', require: false
+  gem 'gnuplot', require: false
+end
+
+group :extra do
+  gem 'lmdb'
+  gem 'redis'
+  gem 'redis-namespace'
+  gem 'yard'
+end
diff --git a/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile.lock b/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile.lock
new file mode 100644
index 000000000000..8d28ef808948
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile.lock
@@ -0,0 +1,99 @@
+GIT
+  remote: https://github.com/feedbackmine/language_detector.git
+  revision: 89102790194150b3a8110ce691f9989b8ce70f8d
+  specs:
+    language_detector (0.1.2)
+
+PATH
+  remote: .
+  specs:
+    anystyle (1.3.10)
+      anystyle-data (~> 1.2)
+      bibtex-ruby (~> 5.0)
+      gli (~> 2.17)
+      namae (~> 1.0)
+      wapiti (~> 1.0, >= 1.0.2)
+
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (6.0.3.2)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
+      minitest (~> 5.1)
+      tzinfo (~> 1.1)
+      zeitwerk (~> 2.2, >= 2.2.2)
+    anystyle-data (1.2.0)
+    bibtex-ruby (5.1.4)
+      latex-decode (~> 0.0)
+    builder (3.2.4)
+    byebug (11.1.3)
+    citeproc (1.0.10)
+      namae (~> 1.0)
+    concurrent-ruby (1.1.7)
+    diff-lcs (1.4.4)
+    docile (1.3.2)
+    edtf (3.0.5)
+      activesupport (>= 3.0, < 7.0)
+    gli (2.19.2)
+    gnuplot (2.6.2)
+    i18n (1.8.5)
+      concurrent-ruby (~> 1.0)
+    latex-decode (0.3.1)
+    lmdb (0.5.3)
+    minitest (5.14.1)
+    namae (1.0.1)
+    rake (13.0.1)
+    redis (4.2.1)
+    redis-namespace (1.8.0)
+      redis (>= 3.0.4)
+    rspec (3.9.0)
+      rspec-core (~> 3.9.0)
+      rspec-expectations (~> 3.9.0)
+      rspec-mocks (~> 3.9.0)
+    rspec-core (3.9.2)
+      rspec-support (~> 3.9.3)
+    rspec-expectations (3.9.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.9.0)
+    rspec-mocks (3.9.1)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.9.0)
+    rspec-support (3.9.3)
+    ruby-prof (1.4.1)
+    simplecov (0.19.0)
+      docile (~> 1.1)
+      simplecov-html (~> 0.11)
+    simplecov-html (0.12.2)
+    thread_safe (0.3.6)
+    tzinfo (1.2.7)
+      thread_safe (~> 0.1)
+    unicode-scripts (1.6.0)
+    wapiti (1.0.7)
+      builder (~> 3.2)
+    yard (0.9.25)
+    zeitwerk (2.4.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  anystyle!
+  bibtex-ruby
+  byebug
+  citeproc
+  edtf
+  gnuplot
+  language_detector!
+  lmdb
+  rake
+  redis
+  redis-namespace
+  rspec (~> 3.0)
+  ruby-prof
+  simplecov
+  unicode-scripts
+  yard
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/anystyle-cli/anystyle.gemspec b/nixpkgs/pkgs/tools/misc/anystyle-cli/anystyle.gemspec
new file mode 100644
index 000000000000..57db427fb024
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/anystyle-cli/anystyle.gemspec
@@ -0,0 +1,52 @@
+# -*- encoding: utf-8 -*-
+lib = File.expand_path('../lib/', __FILE__)
+$:.unshift lib unless $:.include?(lib)
+
+require 'anystyle/version'
+
+Gem::Specification.new do |s|
+  s.name         = 'anystyle'
+  s.version      = AnyStyle::VERSION.dup
+  s.platform     = Gem::Platform::RUBY
+  s.authors      = ['Sylvester Keil']
+  s.email        = ['http://sylvester.keil.or.at']
+  s.homepage     = 'http://anystyle.io'
+  s.summary      = 'Smart and fast bibliography parser.'
+  s.description  = 'A sophisticated parser for academic reference lists and bibliographies based on machine learning algorithms using conditional random fields.'
+  s.license      = 'BSD-2-Clause'
+  s.executables  = []
+  s.require_path = 'lib'
+
+  s.required_ruby_version = '>= 2.2'
+
+  s.add_runtime_dependency('bibtex-ruby', '~>5.0')
+  s.add_runtime_dependency('anystyle-data', '~>1.2')
+  s.add_runtime_dependency('gli', '~>2.17')
+  s.add_runtime_dependency('wapiti', '~>1.0', '>=1.0.2')
+  s.add_runtime_dependency('namae', '~>1.0')
+
+  s.files =
+    `git ls-files`.split("\n") - `git ls-files spec`.split("\n") - %w{
+      .coveralls.yml
+      .gitignore
+      .rspec
+      .simplecov
+      .travis.yml
+      Gemfile
+      Rakefile
+      appveyor.yml
+      anystyle.gemspec
+      res/core.xml
+    }
+
+  s.rdoc_options = %w{
+    --line-numbers
+    --inline-source
+    --title "AnyStyle"
+    --main README.md
+  }
+  s.extra_rdoc_files = %w{README.md LICENSE}
+
+end
+
+# vim: syntax=ruby
diff --git a/nixpkgs/pkgs/tools/misc/anystyle-cli/default.nix b/nixpkgs/pkgs/tools/misc/anystyle-cli/default.nix
new file mode 100644
index 000000000000..beebae6542b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/anystyle-cli/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildRubyGem
+, bundlerEnv
+, ruby
+, poppler_utils
+}:
+let
+  deps = bundlerEnv rec {
+    name = "anystyle-cli-${version}";
+    source.sha256 = lib.fakeSha256;
+    version = "1.3.1";
+    inherit ruby;
+    gemdir = ./.;
+    gemset = lib.recursiveUpdate (import ./gemset.nix) {
+      anystyle.source = {
+        remotes = ["https://rubygems.org"];
+        sha256 = "1w79zcia60nnnyrmyvpd10pmxrpk5c7lj9gmmblhwi8x5mfq9k0n";
+        type = "gem";
+      };
+    };
+  };
+in
+buildRubyGem rec {
+  inherit ruby;
+  gemName = "anystyle-cli";
+  pname = gemName;
+  version = "1.3.1";
+  source.sha256 = "1a3ifwxwqkp5dnfk9r8qq8kgfb8k1pl7jjdghbb8ixbxz9ac7awy";
+
+  propagatedBuildInputs = [ deps ];
+
+  preFixup = ''
+    wrapProgram $out/bin/anystyle --prefix PATH : ${poppler_utils}/bin
+  '';
+
+  meta = with lib; {
+    description = "Command line interface to the AnyStyle Parser and Finder";
+    homepage    = "https://anystyle.io/";
+    license     = licenses.bsd2;
+    maintainers = with maintainers; [ shamilton ];
+    mainProgram = "anystyle";
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/anystyle-cli/gemset.nix b/nixpkgs/pkgs/tools/misc/anystyle-cli/gemset.nix
new file mode 100644
index 000000000000..46444760b7bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/anystyle-cli/gemset.nix
@@ -0,0 +1,1570 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02sh4q8izyfdnh7z2nj5mn5sklfvqgx9rrag5j3l51y8aqkrg2yk";
+      type = "gem";
+    };
+    version = "6.0.3.2";
+  };
+  anystyle = {
+    dependencies = ["anystyle-data" "bibtex-ruby" "gli" "namae" "wapiti"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      path = ./.;
+      type = "path";
+    };
+    version = "1.3.10";
+  };
+  anystyle-data = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ry6836mq48d85hjcfp7xiw0yk3ivpiwjvmdwv5jag30ijfyaccy";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  bibtex-ruby = {
+    dependencies = ["latex-decode"];
+    groups = ["default" "development" "test"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00zwmmmjrbrxhajdvn1d4rnv2qw00arcj021cwyx3hl6dsv22l2w";
+      type = "gem";
+    };
+    version = "5.1.4";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  byebug = {
+    groups = ["debug"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nx3yjf4xzdgb8jkmk2344081gqr22pgjqnmjg2q64mj5d6r9194";
+      type = "gem";
+    };
+    version = "11.1.3";
+  };
+  citeproc = {
+    dependencies = ["namae"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13vl5sjmksk5a8kjcqnjxh7kn9gn1n4f9p1rvqfgsfhs54p0m6l2";
+      type = "gem";
+    };
+    version = "1.0.10";
+  };
+  concurrent-ruby = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vnxrbhi7cq3p4y2v9iwd10v1c7l15is4var14hwnb2jip4fyjzz";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  diff-lcs = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m925b8xc6kbpnif9dldna24q1szg4mk0fvszrki837pfn46afmz";
+      type = "gem";
+    };
+    version = "1.4.4";
+  };
+  docile = {
+    groups = ["coverage" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qrwiyagxzl8zlx3dafb0ay8l14ib7imb2rsmx70i5cp420v8gif";
+      type = "gem";
+    };
+    version = "1.3.2";
+  };
+  edtf = {
+    dependencies = ["activesupport"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xknzamagsx68iq7zdiswr077sxirig77yggbcsw51m8365ajzpc";
+      type = "gem";
+    };
+    version = "3.0.5";
+  };
+  gli = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0q598mvl20isn3ja1ya0p72svmqwx3m6fjp5slnv0b2c5mh0ahvv";
+      type = "gem";
+    };
+    version = "2.19.2";
+  };
+  gnuplot = {
+    groups = ["profile"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cvb84lahhy6qxkkgg0pfk9b85qrb1by2p3jlpqgczl6am58vhnj";
+      type = "gem";
+    };
+    version = "2.6.2";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153sx77p16vawrs4qpkv7qlzf9v5fks4g7xqcj1dwk40i6g7rfzk";
+      type = "gem";
+    };
+    version = "1.8.5";
+  };
+  language_detector = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      fetchSubmodules = false;
+      rev = "89102790194150b3a8110ce691f9989b8ce70f8d";
+      sha256 = "0wxs9i0wqmwysrz1c1i85i4f670m217y12rj5slcmd1y4ylsmvyi";
+      type = "git";
+      url = "https://github.com/feedbackmine/language_detector.git";
+    };
+    version = "0.1.2";
+  };
+  latex-decode = {
+    groups = ["default" "development" "test"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dqanr69as05vdyp9gx9737w3g44rhyk7x96bh9x01fnf1yalyzd";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  lmdb = {
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qk2ycgyyk052dvbgik35mr4n9im4k1j6v7anbjqhx52y5f07sfg";
+      type = "gem";
+    };
+    version = "0.5.3";
+  };
+  minitest = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09bz9nsznxgaf06cx3b5z71glgl0hdw469gqx3w7bqijgrb55p5g";
+      type = "gem";
+    };
+    version = "5.14.1";
+  };
+  namae = {
+    groups = ["default" "development" "test"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00w0dgvmdy8lw2b5q9zvhqd5k98a192vdmka96qngi9cvnsh5snw";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  rake = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9";
+      type = "gem";
+    };
+    version = "13.0.1";
+  };
+  redis = {
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19hm66kw5vx1lmlh8bj7rxlddyj0vfp11ajw9njhrmn8173d0vb5";
+      type = "gem";
+    };
+    version = "4.2.1";
+  };
+  redis-namespace = {
+    dependencies = ["redis"];
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i6s898z5w31z385cba1683pgg5nnmj4m686cbravg7j4pgbcgv";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hzsig4pi9ybr0xl5540m1swiyxa74c8h09225y5sdh2rjkkg84h";
+      type = "gem";
+    };
+    version = "3.9.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xndkv5cz763wh30x7hdqw6k7zs8xfh0f86amra9agwn44pcqs0y";
+      type = "gem";
+    };
+    version = "3.9.2";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bxkv25qmy39jqrdx35bfgw00g24qkssail9jlljm7hywbqvr9bb";
+      type = "gem";
+    };
+    version = "3.9.2";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19vmdqym1v2g1zbdnq37zwmyj87y9yc9ijwc8js55igvbb9hx0mr";
+      type = "gem";
+    };
+    version = "3.9.1";
+  };
+  rspec-support = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dandh2fy1dfkjk8jf9v4azbbma6968bhh06hddv0yqqm8108jir";
+      type = "gem";
+    };
+    version = "3.9.3";
+  };
+  ruby-prof = {
+    groups = ["profile"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cd91m08ih0imfpy4k87618hd4mhyz291a6bx2hcskza4nf6d27";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  simplecov = {
+    dependencies = ["docile" "simplecov-html"];
+    groups = ["coverage"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b082xrklq6k755cc3rzpnfdjv5338rlky9him36jasw8s9q68mr";
+      type = "gem";
+    };
+    version = "0.19.0";
+  };
+  simplecov-html = {
+    groups = ["coverage" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v7b4mf7njw8kv4ghl4q7mwz3q0flbld7v8blp4m4m3n3aq11bn9";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+  thread_safe = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i3jh086w1kbdj3k5l60lc3nwbanmzdf8yjj3mlrx9b2gjjxhi9r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  unicode-scripts = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04xfy4f61xf7qnbfa68aqscmyxk7wx3swn571cijsfqalhz8swjg";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  wapiti = {
+    dependencies = ["builder"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aw2l759cfmii9a67pn8pswip11v08nabkzm825mrmxa6r91izqs";
+      type = "gem";
+    };
+    version = "1.0.7";
+  };
+  yard = {
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "126m49mvh4lbvlvrprq7xj2vjixbq3xqr8dwr089vadvs0rkn4rd";
+      type = "gem";
+    };
+    version = "0.9.25";
+  };
+  zeitwerk = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvn50k76kl14fpymk4hdsf9sk00jl84yxzl783xhnw4dicp0m0k";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/aoc-cli/default.nix b/nixpkgs/pkgs/tools/misc/aoc-cli/default.nix
new file mode 100644
index 000000000000..4fec5647e04d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aoc-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "aoc-cli";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "scarvalhojr";
+    repo = pname;
+    rev = version;
+    hash = "sha256-UdeCKhEWr1BjQ6OMLP19OLWPlvvP7FGAO+mi+bQUPQA=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
+
+  cargoHash = "sha256-EluP4N3UBQeEKVdHTs4O0THXji+nAyE52nGKsxA3AA4=";
+
+  meta = with lib; {
+    description = "Advent of code command line tool";
+    homepage = "https://github.com/scarvalhojr/aoc-cli/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jordanisaacs ];
+    mainProgram = "aoc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/apkeep/default.nix b/nixpkgs/pkgs/tools/misc/apkeep/default.nix
new file mode 100644
index 000000000000..2da292b815b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/apkeep/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, openssl
+, pkg-config
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "apkeep";
+  version = "0.15.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-PikUb9D9duMATo9hJgjuZUK3WXUKfnCDWJBE/bJI92c=";
+  };
+
+  cargoHash = "sha256-R58CzeI1Xho6kzjb9ktO7sr6TgM3Hf2VU0pK4hmb1v4=";
+
+  prePatch = ''
+    rm .cargo/config.toml
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "A command-line tool for downloading APK files from various sources";
+    homepage = "https://github.com/EFForg/apkeep";
+    changelog = "https://github.com/EFForg/apkeep/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ joelkoen ];
+    mainProgram = "apkeep";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/apparix/default.nix b/nixpkgs/pkgs/tools/misc/apparix/default.nix
new file mode 100644
index 000000000000..a75a9f03f300
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/apparix/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "apparix";
+  version = "11-062";
+
+  src = fetchurl {
+    url = "https://micans.org/apparix/src/apparix-${version}.tar.gz";
+    sha256 = "211bb5f67b32ba7c3e044a13e4e79eb998ca017538e9f4b06bc92d5953615235";
+  };
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "http://micans.org/apparix";
+    description = "Add directory bookmarks, distant listing, and distant editing to the command line";
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    mainProgram = "apparix";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aptly/default.nix b/nixpkgs/pkgs/tools/misc/aptly/default.nix
new file mode 100644
index 000000000000..6da10fe9b7fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aptly/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, makeWrapper, gnupg, bzip2, xz, graphviz, testers, aptly }:
+
+buildGoModule rec {
+  pname = "aptly";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "aptly-dev";
+    repo = "aptly";
+    rev = "v${version}";
+    sha256 = "sha256-LqGOLXXaGfQfoj2r+aY9SdOKUDI9+22EsHKBhHMidyk=";
+  };
+
+  vendorHash = "sha256-6l3OFKFTtFWT68Ylav6woczBlMhD75C9ZoQ6OeLz0Cs=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  postInstall = ''
+    installShellCompletion --bash --name aptly completion.d/aptly
+    installShellCompletion --zsh --name _aptly completion.d/_aptly
+    wrapProgram "$out/bin/aptly" \
+      --prefix PATH ":" "${lib.makeBinPath [ gnupg bzip2 xz graphviz ]}"
+  '';
+
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = aptly;
+    command = "aptly version";
+  };
+
+  meta = with lib; {
+    homepage = "https://www.aptly.info";
+    description = "Debian repository management tool";
+    license = licenses.mit;
+    maintainers = with maintainers; [ montag451 ] ++ teams.bitnomial.members;
+    changelog =
+      "https://github.com/aptly-dev/aptly/releases/tag/v${version}";
+    mainProgram = "aptly";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aquosctl/default.nix b/nixpkgs/pkgs/tools/misc/aquosctl/default.nix
new file mode 100644
index 000000000000..f8eba27e0fe4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aquosctl/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+let
+  pname = "aquosctl";
+in
+stdenv.mkDerivation {
+  inherit pname;
+  version = "unstable-2014-04-06";
+
+  src = fetchFromGitHub {
+    owner = "jdwhite";
+    repo = pname;
+    rev = "b5e48d9ef848188b97dfb24bfcc99d5196cab5f6";
+    hash = "sha256-FA3LR58KMG5RzSxxnOkVw1+inM/gMGPtw5+JQwSHBYs=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm0755 aquosctl $out/bin/aquosctl
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Sharp Aquos television RS-232 control application";
+    homepage = "https://github.com/jdwhite/aquosctl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+    platforms = platforms.linux;
+    mainProgram = "aquosctl";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/arch-install-scripts/default.nix b/nixpkgs/pkgs/tools/misc/arch-install-scripts/default.nix
new file mode 100644
index 000000000000..a87268309252
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/arch-install-scripts/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, resholve
+, fetchFromGitHub
+, asciidoc
+, bash
+, coreutils
+, gawk
+, gnugrep
+, gnum4
+, pacman
+, util-linux
+, chrootPath ? [
+    "/usr/local/sbin"
+    "/usr/local/bin"
+    "/usr/bin"
+    "/usr/bin/site_perl"
+    "/usr/bin/vendor_perl"
+    "/usr/bin/core_perl"
+  ]
+}:
+
+resholve.mkDerivation rec {
+  pname = "arch-install-scripts";
+  version = "28";
+
+  src = fetchFromGitHub {
+    owner = "archlinux";
+    repo = "arch-install-scripts";
+    rev = "v${version}";
+    hash = "sha256-TytCeejhjWYDzWFjGubUl08OrsAQa9fFULoamDfbdDY=";
+  };
+
+  nativeBuildInputs = [ asciidoc gnum4 ];
+
+  postPatch = ''
+    substituteInPlace ./Makefile \
+      --replace "PREFIX = /usr/local" "PREFIX ?= /usr/local"
+    substituteInPlace ./pacstrap.in \
+      --replace "cp -a" "cp -LR --no-preserve=mode" \
+      --replace "unshare pacman" "unshare ${pacman}/bin/pacman" \
+      --replace 'gnupg "$newroot/etc/pacman.d/"' 'gnupg "$newroot/etc/pacman.d/" && chmod 700 "$newroot/etc/pacman.d/gnupg"'
+    echo "export PATH=${lib.strings.makeSearchPath "" chrootPath}:\$PATH" >> ./common
+  '';
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  doCheck = true;
+
+  solutions = {
+    # Give each solution a short name. This is what you'd use to
+    # override its settings, and it shows in (some) error messages.
+    profile = {
+      # the only *required* arguments are the 3 below
+
+      # Specify 1 or more $out-relative script paths. Unlike many
+      # builders, resholve.mkDerivation modifies the output files during
+      # fixup (to correctly resolve in-package sourcing).
+      scripts = [ "bin/arch-chroot" "bin/genfstab" "bin/pacstrap" ];
+
+      # "none" for no shebang, "${bash}/bin/bash" for bash, etc.
+      interpreter = "${bash}/bin/bash";
+
+      # packages resholve should resolve executables from
+      inputs = [ coreutils gawk gnugrep pacman util-linux ];
+
+      execer = [ "cannot:${pacman}/bin/pacman-key" ];
+
+      # TODO: no good way to resolve mount/umount in Nix builds for now
+      # see https://github.com/abathur/resholve/issues/29
+      fix = {
+        mount = true;
+        umount = true;
+      };
+
+      keep = [ "$setup" "$pid_unshare" "$mount_unshare" "${pacman}/bin/pacman" ];
+    };
+  };
+
+  meta = with lib; {
+    description = "Useful scripts for installing Arch Linux";
+    longDescription = ''
+      A small suite of scripts aimed at automating some menial tasks when installing Arch Linux.
+    '';
+    homepage = "https://github.com/archlinux/arch-install-scripts";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ samlukeyes123 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/archi/default.nix b/nixpkgs/pkgs/tools/misc/archi/default.nix
new file mode 100644
index 000000000000..e5850f8871e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/archi/default.nix
@@ -0,0 +1,85 @@
+{ lib, stdenv
+, fetchurl
+, autoPatchelfHook
+, makeWrapper
+, jdk
+, libsecret
+, webkitgtk
+, wrapGAppsHook
+, _7zz
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "Archi";
+  version = "5.2.0";
+
+  src = {
+    "x86_64-linux" = fetchurl {
+      url = "https://www.archimatetool.com/downloads/archi_5.php?/${version}/Archi-Linux64-${version}.tgz";
+      hash = "sha256-uGW4Wl3E71ZCgWzPHkmXv/PluegDF8C64FUQ7C5/SDA=";
+    };
+    "x86_64-darwin" = fetchurl {
+      url = "https://www.archimatetool.com/downloads/archi_5.php?/${version}/Archi-Mac-${version}.dmg";
+      hash = "sha256-GI9aIAYwu60RdjN0Y3O94sVMzJR1+nX4txVcvqn1r58=";
+    };
+    "aarch64-darwin" = fetchurl {
+      url = "https://www.archimatetool.com/downloads/archi_5.php?/${version}/Archi-Mac-Silicon-${version}.dmg";
+      hash = "sha256-Jg+tl902OWSm4GHxF7QXbRU5nxX4/5q6LTGubHWQ08E=";
+    };
+  }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  buildInputs = [
+    libsecret
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    wrapGAppsHook
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    _7zz
+  ] ++ lib.optionals stdenv.hostPlatform.isLinux [
+    autoPatchelfHook
+  ];
+
+  unpackPhase = if stdenv.hostPlatform.isDarwin then ''
+    7zz x $src
+  '' else null;
+
+  installPhase =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      ''
+        mkdir -p $out/bin $out/libexec
+        for f in configuration features p2 plugins Archi.ini; do
+          cp -r $f $out/libexec
+        done
+
+        install -D -m755 Archi $out/libexec/Archi
+        makeWrapper $out/libexec/Archi $out/bin/Archi \
+          --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath ([ webkitgtk ])} \
+          --prefix PATH : ${jdk}/bin
+      ''
+    else
+      ''
+        mkdir -p "$out/Applications"
+        mv Archi.app "$out/Applications/"
+      '';
+
+  passthru.updateScript = ./update.sh;
+
+  passthru.tests = { inherit (nixosTests) archi; };
+
+  meta = with lib; {
+    description = "ArchiMate modelling toolkit";
+    longDescription = ''
+      Archi is an open source modelling toolkit to create ArchiMate
+      models and sketches.
+    '';
+    homepage = "https://www.archimatetool.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mit;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ earldouglas paumr ];
+    mainProgram = "Archi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/archi/update.sh b/nixpkgs/pkgs/tools/misc/archi/update.sh
new file mode 100755
index 000000000000..dbdf876a2a4f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/archi/update.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq coreutils common-updater-scripts
+
+latestVersion=$(curl "https://api.github.com/repos/archimatetool/archi/tags" | jq -r '.[0].name' | tail -c +9)
+currentVersion=$(nix-instantiate --eval -E "with import ./. {}; archi.version or (lib.getVersion archi)" | tr -d '"')
+
+echo "latest  version: $latestVersion"
+echo "current version: $currentVersion"
+
+if [[ "$latestVersion" == "$currentVersion" ]]; then
+    echo "package is up-to-date"
+    exit 0
+fi
+
+hash_aarch64_darwin=$(nix-prefetch-url https://www.archimatetool.com/downloads/archi_5.php?/$latestVersion/Archi-Mac-Silicon-$latestVersion.dmg)
+hash_x86_64_darwin=$(nix-prefetch-url https://www.archimatetool.com/downloads/archi_5.php?/$latestVersion/Archi-Mac-$latestVersion.dmg)
+hash_x86_64_linux=$(nix-prefetch-url https://www.archimatetool.com/downloads/archi_5.php?/$latestVersion/Archi-Linux64-$latestVersion.tgz)
+
+update-source-version archi 0 "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" --system=aarch64-darwin
+update-source-version archi $latestVersion $hash_aarch64_darwin --system=aarch64-darwin
+update-source-version archi 0 "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" --system=x86_64-darwin
+update-source-version archi $latestVersion $hash_x86_64_darwin --system=x86_64-darwin
+update-source-version archi 0 "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" --system=x86_64-linux
+update-source-version archi $latestVersion $hash_x86_64_linux --system=x86_64-linux
+
diff --git a/nixpkgs/pkgs/tools/misc/arp-scan/default.nix b/nixpkgs/pkgs/tools/misc/arp-scan/default.nix
new file mode 100644
index 000000000000..35d528598381
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/arp-scan/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libpcap, makeWrapper, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "arp-scan";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "royhills";
+    repo = "arp-scan";
+    rev = version;
+    sha256 = "sha256-BS+ItZd6cSMX92M6XGYrIeAiCB2iBdvbMvKdLfwawLQ=";
+  };
+
+  patches = [
+    ./remove-install-exec-hook.patch
+  ];
+
+  perlModules = with perlPackages; [
+    HTTPDate
+    HTTPMessage
+    LWP
+    TextCSV
+    URI
+  ];
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper ];
+  buildInputs = [ perlPackages.perl libpcap ];
+
+  postInstall = ''
+    for binary in get-{oui,iab}; do
+      wrapProgram "$out/bin/$binary" --set PERL5LIB "${perlPackages.makeFullPerlPath perlModules}"
+    done;
+  '';
+
+  meta = with lib; {
+    description = "ARP scanning and fingerprinting tool";
+    longDescription = ''
+      Arp-scan is a command-line tool that uses the ARP protocol to discover
+      and fingerprint IP hosts on the local network.
+    '';
+    homepage = "https://github.com/royhills/arp-scan/wiki/arp-scan-User-Guide";
+    license = licenses.gpl3;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ bjornfor mikoim r-burns ];
+    mainProgram = "arp-scan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/arp-scan/remove-install-exec-hook.patch b/nixpkgs/pkgs/tools/misc/arp-scan/remove-install-exec-hook.patch
new file mode 100644
index 000000000000..38421400384c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/arp-scan/remove-install-exec-hook.patch
@@ -0,0 +1,24 @@
+diff --git a/Makefile.am b/Makefile.am
+index c02e1cc..0dd6321 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -29,19 +29,3 @@ arp-scan.1: arp-scan.1.dist Makefile
+ 	$(do_subst) < $(srcdir)/arp-scan.1.dist > arp-scan.1
+ get-oui.1: get-oui.1.dist Makefile
+ 	$(do_subst) < $(srcdir)/get-oui.1.dist > get-oui.1
+-# Install arp-scan with cap_net_raw if possible, otherwise SUID root
+-install-exec-hook:
+-	@if command -v setcap > /dev/null; then \
+-	if setcap cap_net_raw+p $(DESTDIR)$(bindir)/arp-scan$(EXEEXT); then \
+-	echo "setcap cap_net_raw+p $(DESTDIR)$(bindir)/arp-scan$(EXEEXT)"; \
+-	chmod u-s $(DESTDIR)$(bindir)/arp-scan$(EXEEXT); \
+-	else \
+-	echo "Setcap failed on $(DESTDIR)$(bindir)/arp-scan$(EXEEXT), falling back to setuid" >&2; \
+-	echo "chmod u+s $(DESTDIR)$(bindir)/arp-scan$(EXEEXT)";  \
+-	chmod u+s $(DESTDIR)$(bindir)/arp-scan$(EXEEXT);  \
+-	fi \
+-	else \
+-	echo "Setcap is not installed, falling back to setuid" >&2 ; \
+-	echo "chmod u+s $(DESTDIR)$(bindir)/arp-scan$(EXEEXT)" ;\
+-	chmod u+s $(DESTDIR)$(bindir)/arp-scan$(EXEEXT) ;\
+-	fi
diff --git a/nixpkgs/pkgs/tools/misc/as-tree/default.nix b/nixpkgs/pkgs/tools/misc/as-tree/default.nix
new file mode 100644
index 000000000000..f4c5eb1354de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/as-tree/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "as-tree";
+  version = "unstable-2021-03-09";
+
+  src = fetchFromGitHub {
+    owner = "jez";
+    repo = pname;
+    rev = "0036c20f66795774eb9cda3ccbae6ca1e1c19444";
+    sha256 = "sha256-80yB89sKIuv7V68p0jEsi2hRdz+5CzE+4R0joRzO7Dk=";
+  };
+
+  cargoSha256 = "sha256-BLEVPKO2YwcKuM/rUeMuyE38phOrbq0e8cjqh1qmJjM=";
+
+  meta = with lib; {
+    description = "Print a list of paths as a tree of paths";
+    homepage = "https://github.com/jez/as-tree";
+    license = with licenses; [ blueOak100 ];
+    maintainers = with maintainers; [ jshholland ];
+    mainProgram = "as-tree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/asciinema-agg/Cargo.lock b/nixpkgs/pkgs/tools/misc/asciinema-agg/Cargo.lock
new file mode 100644
index 000000000000..a1feb20f9a47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asciinema-agg/Cargo.lock
@@ -0,0 +1,2062 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "agg"
+version = "1.4.3"
+dependencies = [
+ "anyhow",
+ "avt",
+ "clap 3.2.23",
+ "env_logger",
+ "fontdb",
+ "fontdue",
+ "gifski",
+ "imgref",
+ "log",
+ "reqwest",
+ "resvg",
+ "rgb",
+ "serde",
+ "serde_json",
+ "shellexpand",
+ "tiny-skia",
+ "usvg",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstream"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-wincon",
+ "concolor-override",
+ "concolor-query",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "avt"
+version = "0.8.0"
+source = "git+https://github.com/asciinema/avt.git?tag=v0.8.0#aaec6a11896551296d2f49078f432756e8a0529d"
+dependencies = [
+ "rgb",
+ "serde",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "3.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex 0.2.4",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap"
+version = "4.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3"
+dependencies = [
+ "clap_builder",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags",
+ "clap_lex 0.4.1",
+ "once_cell",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "concolor-override"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f"
+
+[[package]]
+name = "concolor-query"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "data-url"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5"
+
+[[package]]
+name = "dirs"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dece029acd3353e3a58ac2e3eb3c8d6c35827a892edc6cc4138ef9c33df46ecd"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04414300db88f70d74c5ff54e50f9e1d1737d9a5b90f53fcf2e95ca2a9ab554b"
+dependencies = [
+ "libc",
+ "redox_users",
+ "windows-sys",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fallible_collections"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9acf77205554f3cfeca94a4b910e159ad9824e8c2d164de02b3f12495cc1074d"
+dependencies = [
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.6.2",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "fontconfig-parser"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ab2e12762761366dcb876ab8b6e0cfa4797ddcd890575919f008b5ba655672a"
+dependencies = [
+ "roxmltree 0.18.0",
+]
+
+[[package]]
+name = "fontdb"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8131752b3f3b876a20f42b3d08233ad177d6e7ec6d18aaa6954489a201071be5"
+dependencies = [
+ "fontconfig-parser",
+ "log",
+ "memmap2",
+ "ttf-parser 0.17.1",
+]
+
+[[package]]
+name = "fontdue"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a62391ecb864cf12ed06b2af4eda2e609b97657950d6a8f06841b17726ab253"
+dependencies = [
+ "hashbrown 0.11.2",
+ "ttf-parser 0.15.2",
+]
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd"
+
+[[package]]
+name = "futures-io"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2"
+
+[[package]]
+name = "futures-task"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879"
+
+[[package]]
+name = "futures-util"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gif"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gif-dispose"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a40dfdf5be59e0cbbf77cb7c6a91a18ee6d398b70fc54ad900e2bcba1860cb50"
+dependencies = [
+ "gif 0.12.0",
+ "imgref",
+ "rgb",
+]
+
+[[package]]
+name = "gifsicle"
+version = "1.93.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d2c35b9670c2a3313343ce54d00669ca18a8236fe727f52e0cf8c5a77acac07"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "gifski"
+version = "1.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd5981f4673c4da9f816e141d0baef1ca4f9008fc31573b2d19984c390c46442"
+dependencies = [
+ "clap 4.2.1",
+ "crossbeam-channel",
+ "crossbeam-utils",
+ "dunce",
+ "gif 0.12.0",
+ "gif-dispose",
+ "gifsicle",
+ "imagequant",
+ "imgref",
+ "lodepng",
+ "loop9",
+ "natord",
+ "num-traits",
+ "pbr",
+ "quick-error",
+ "resize",
+ "rgb",
+ "scopeguard",
+ "wild",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "h2"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+dependencies = [
+ "ahash 0.7.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash 0.8.3",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "imagequant"
+version = "4.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f332f82fc531b53cffa3181c14f7beb5b6c33932d68bb0c2fa4fd583553fca64"
+dependencies = [
+ "arrayvec",
+ "noisy_float",
+ "num_cpus",
+ "once_cell",
+ "rayon",
+ "rgb",
+ "thread_local",
+]
+
+[[package]]
+name = "imagesize"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df19da1e92fbfec043ca97d622955381b1f3ee72a180ec999912df31b1ccd951"
+
+[[package]]
+name = "imgref"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2cf49df1085dcfb171460e4592597b84abe50d900fb83efb6e41b20fefd6c2c"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kurbo"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449"
+dependencies = [
+ "arrayvec",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d"
+
+[[package]]
+name = "lodepng"
+version = "3.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0ad39f75bbaa4b10bb6f2316543632a8046a5bcf9c785488d79720b21f044f8"
+dependencies = [
+ "crc32fast",
+ "fallible_collections",
+ "flate2",
+ "libc",
+ "rgb",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "loop9"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a703804431e5927454bcaf2b2a162595e95db931130c2728c18d050090f69940"
+dependencies = [
+ "imgref",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memmap2"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "natord"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308d96db8debc727c3fd9744aac51751243420e46edf401010908da7f8d5e57c"
+
+[[package]]
+name = "noisy_float"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978fe6e6ebc0bf53de533cd456ca2d9de13de13856eda1518a285d7705a213af"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+
+[[package]]
+name = "pbr"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed5827dfa0d69b6c92493d6c38e633bbaa5937c153d0d7c28bf12313f8c6d514"
+dependencies = [
+ "crossbeam-channel",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pico-args"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "png"
+version = "0.17.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f0e7f4c94ec26ff209cee506314212639d6c91b80afb82984819fafce9df01c"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "flate2",
+ "miniz_oxide 0.5.4",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rctree"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "reqwest"
+version = "0.11.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254"
+dependencies = [
+ "async-compression",
+ "base64 0.21.0",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-rustls",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "resize"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87e7bdfff05e26408cf8f82fe896ce3d7624f0c0b06c84b2f1009c50452ead41"
+dependencies = [
+ "fallible_collections",
+ "rgb",
+]
+
+[[package]]
+name = "resvg"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c115863f2d3621999cf187e318bc92b16402dfeff6a48c74df700d77381394c1"
+dependencies = [
+ "gif 0.11.4",
+ "jpeg-decoder",
+ "log",
+ "pico-args",
+ "png",
+ "rgb",
+ "svgfilters",
+ "svgtypes",
+ "tiny-skia",
+ "usvg",
+ "usvg-text-layout",
+]
+
+[[package]]
+name = "rgb"
+version = "0.8.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "roxmltree"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b9de9831a129b122e7e61f242db509fa9d0838008bf0b29bb0624669edfe48a"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "roxmltree"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8f595a457b6b8c6cda66a48503e92ee8d19342f905948f29c383200ec9eb1d8"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+dependencies = [
+ "base64 0.21.0",
+]
+
+[[package]]
+name = "rustybuzz"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab9e34ecf6900625412355a61bda0bd68099fe674de707c67e5e4aed2c05e489"
+dependencies = [
+ "bitflags",
+ "bytemuck",
+ "smallvec",
+ "ttf-parser 0.17.1",
+ "unicode-bidi-mirroring",
+ "unicode-ccc",
+ "unicode-general-category",
+ "unicode-script",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.159"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.159"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.11",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.95"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "shellexpand"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b"
+dependencies = [
+ "dirs",
+]
+
+[[package]]
+name = "simplecss"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "strict-num"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9df65f20698aeed245efdde3628a6b559ea1239bbb871af1b6e3b58c413b2bd1"
+dependencies = [
+ "float-cmp",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "svgfilters"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "639abcebc15fdc2df179f37d6f5463d660c1c79cd552c12343a4600827a04bce"
+dependencies = [
+ "float-cmp",
+ "rgb",
+]
+
+[[package]]
+name = "svgtypes"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22975e8a2bac6a76bb54f898a6b18764633b00e780330f0b689f65afb3975564"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.11",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tiny-skia"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfef3412c6975196fdfac41ef232f910be2bb37b9dd3313a49a1a6bc815a5bdb"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "bytemuck",
+ "cfg-if",
+ "png",
+ "tiny-skia-path",
+]
+
+[[package]]
+name = "tiny-skia-path"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4b5edac058fc98f51c935daea4d805b695b38e2f151241cad125ade2a2ac20d"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+ "strict-num",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "ttf-parser"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd"
+
+[[package]]
+name = "ttf-parser"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "375812fa44dab6df41c195cd2f7fecb488f6c09fbaafb62807488cefab642bff"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-bidi-mirroring"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694"
+
+[[package]]
+name = "unicode-ccc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1"
+
+[[package]]
+name = "unicode-general-category"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-script"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc"
+
+[[package]]
+name = "unicode-vo"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "usvg"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b5b7c2b30845b3348c067ca3d09e20cc6e327c288f0ca4c48698712abf432e9"
+dependencies = [
+ "base64 0.13.1",
+ "data-url",
+ "flate2",
+ "imagesize",
+ "kurbo",
+ "log",
+ "rctree",
+ "roxmltree 0.15.1",
+ "simplecss",
+ "siphasher",
+ "strict-num",
+ "svgtypes",
+]
+
+[[package]]
+name = "usvg-text-layout"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c9550670848028641bf976b06f5c520ffdcd6f00ee7ee7eb0853f78e2c249d7"
+dependencies = [
+ "fontdb",
+ "kurbo",
+ "log",
+ "rustybuzz",
+ "unicode-bidi",
+ "unicode-script",
+ "unicode-vo",
+ "usvg",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "wild"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b116685a6be0c52f5a103334cbff26db643826c7b3735fc0a3ba9871310a74"
+dependencies = [
+ "glob",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "xmlparser"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd"
diff --git a/nixpkgs/pkgs/tools/misc/asciinema-agg/default.nix b/nixpkgs/pkgs/tools/misc/asciinema-agg/default.nix
new file mode 100644
index 000000000000..3b530eb28f6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asciinema-agg/default.nix
@@ -0,0 +1,33 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "agg";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "asciinema";
+    repo = "agg";
+    rev = "v${version}";
+    sha256 = "sha256-WCUYnveTWWQOzhIViMkSnyQ6vgLs5HDLWa/xvfZMh3A=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "avt-0.8.0" = "sha256-5IN8P/2UWJ2EmkbbTSGWECTqiD8TeOd8LgwLZ+W2z90=";
+    };
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "A command-line tool for generating animated GIF files from asciicast v2 files produced by asciinema terminal recorder";
+    homepage = "https://github.com/asciinema/agg";
+    changelog = "https://github.com/asciinema/agg/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "agg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/asciinema-scenario/default.nix b/nixpkgs/pkgs/tools/misc/asciinema-scenario/default.nix
new file mode 100644
index 000000000000..91102ab46eae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asciinema-scenario/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "asciinema-scenario";
+  version = "0.3.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-fnX5CIYLdFqi04PQPVIAYDGn+xXi016l8pPcIrYIhmQ=";
+  };
+
+  cargoSha256 = "sha256-8I3mPSJ5aXvQ88nh0SWyuTq9JSTktS2lQPrXlcvD66c=";
+
+  meta = with lib; {
+    description = "Create asciinema videos from a text file";
+    homepage = "https://github.com/garbas/asciinema-scenario/";
+    maintainers = with maintainers; [ garbas ];
+    license = with licenses; [ mit ];
+    mainProgram = "asciinema-scenario";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/asciinema/default.nix b/nixpkgs/pkgs/tools/misc/asciinema/default.nix
new file mode 100644
index 000000000000..ff8d6cd4b1e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asciinema/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, glibcLocales
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "asciinema";
+  version = "2.4.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "asciinema";
+    repo = "asciinema";
+    rev = "v${version}";
+    hash = "sha256-UegLwpJ+uc9cW3ozLQJsQBjIGD7+vzzwzQFRV5gmDmI=";
+  };
+
+  nativeBuildInputs = [
+    python3Packages.setuptools
+  ];
+
+  postPatch = ''
+    substituteInPlace tests/pty_test.py \
+      --replace "python3" "${python3Packages.python}/bin/python"
+  '';
+
+  nativeCheckInputs = [
+    glibcLocales
+    python3Packages.nose
+  ];
+
+  checkPhase = ''
+    LC_ALL=en_US.UTF-8 nosetests -v tests/config_test.py
+  '';
+
+  meta = {
+    description = "Terminal session recorder and the best companion of asciinema.org";
+    homepage = "https://asciinema.org/";
+    license = with lib.licenses; [ gpl3Plus ];
+    maintainers = with lib.maintainers; [ eclairevoyant ];
+    platforms = lib.platforms.all;
+    mainProgram = "asciinema";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/asdf-vm/default.nix b/nixpkgs/pkgs/tools/misc/asdf-vm/default.nix
new file mode 100644
index 000000000000..c9b7f27c42b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asdf-vm/default.nix
@@ -0,0 +1,86 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, installShellFiles, bash, curl, git, writeScript }:
+
+let
+  asdfReshimFile = writeScript "asdf-reshim" ''
+#!/usr/bin/env bash
+
+# asdf-vm create "shim" file like this:
+#
+#    exec $ASDF_DIR/bin/asdf exec "node" "$@"
+#
+# So we should reshim all installed versions every time shell initialized,
+# because $out always change
+
+asdfDir="''${ASDF_DIR:-$HOME/.asdf}"
+asdfDataDir="''${ASDF_DATA_DIR:-$HOME/.asdf}"
+
+prevAsdfDirFilePath="$asdfDataDir/.nix-prev-asdf-dir-path"
+
+if [ -r "$prevAsdfDirFilePath" ]; then
+  prevAsdfDir="$(cat "$prevAsdfDirFilePath")"
+else
+  prevAsdfDir=""
+fi
+
+if [ "$prevAsdfDir" != "$asdfDir" ]; then
+  rm -rf "$asdfDataDir"/shims
+  "$asdfDir"/bin/asdf reshim
+  echo "$asdfDir" > "$prevAsdfDirFilePath"
+fi
+  '';
+
+  asdfPrepareFile = writeScript "asdf-prepare" ''
+ASDF_DIR="@asdfDir@"
+
+source "$ASDF_DIR/asdf.sh"
+${asdfReshimFile}
+  '';
+in stdenv.mkDerivation rec {
+  pname = "asdf-vm";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "asdf-vm";
+    repo = "asdf";
+    rev = "v${version}";
+    sha256 = "sha256-DmwKzW0oHjokMxj2RMT4iogurEMKeAcl7MWlPTOqMmg=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    installShellFiles
+  ];
+
+  buildInputs = [
+    bash
+    curl
+    git
+  ];
+
+  installPhase = ''
+    mkdir -p $out/share/asdf-vm
+    cp -r . $out/share/asdf-vm
+
+    mkdir -p $out/etc/profile.d
+    substitute ${asdfPrepareFile} $out/etc/profile.d/asdf-prepare.sh \
+      --replace "@asdfDir@" "$out/share/asdf-vm"
+
+    mkdir -p $out/bin
+    makeWrapper $out/share/asdf-vm/bin/asdf $out/bin/asdf \
+      --set ASDF_DIR $out/share/asdf-vm
+
+    installShellCompletion --cmd asdf \
+      --zsh completions/_asdf \
+      --fish completions/asdf.fish \
+      --bash completions/asdf.bash
+  '';
+
+  meta = with lib; {
+    description = "Extendable version manager with support for Ruby, Node.js, Erlang & more";
+    homepage = "https://asdf-vm.com/";
+    license = licenses.mit;
+    maintainers = [ maintainers.c4605 ];
+    mainProgram = "asdf";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/askalono/default.nix b/nixpkgs/pkgs/tools/misc/askalono/default.nix
new file mode 100644
index 000000000000..3b9a0c9633e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/askalono/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "askalono";
+  version = "0.4.6";
+
+  src = fetchCrate {
+    pname = "askalono-cli";
+    inherit version;
+    hash = "sha256-7l5bHSsmuMoHbbOI3TAYFeHwD3Y62JvfrrXZa08V3+U=";
+  };
+
+  cargoHash = "sha256-OkN8V37GApJvremRJlWG3HSpWgMC17Ge8JMTiQVoc/g=";
+
+  meta = with lib; {
+    description = "A tool to detect open source licenses from texts";
+    homepage = "https://github.com/jpeddicord/askalono";
+    changelog = "https://github.com/jpeddicord/askalono/blob/${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "askalono";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aspcud/default.nix b/nixpkgs/pkgs/tools/misc/aspcud/default.nix
new file mode 100644
index 000000000000..cd290d5e085e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aspcud/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, boost
+, catch2
+, cmake
+, clingo
+, re2c
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.9.6";
+  pname = "aspcud";
+
+  src = fetchFromGitHub {
+    owner = "potassco";
+    repo = "aspcud";
+    rev = "v${version}";
+    hash = "sha256-PdRfpmH7zF5dn+feoijtzdSUjaYhjHwyAUfuYoWCL9E=";
+  };
+
+  postPatch = ''
+    cp ${catch2}/include/catch2/catch.hpp libcudf/tests/catch.hpp
+  '';
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost clingo re2c ];
+
+  cmakeFlags = [
+    "-DASPCUD_GRINGO_PATH=${clingo}/bin/gringo"
+    "-DASPCUD_CLASP_PATH=${clingo}/bin/clasp"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Solver for package problems in CUDF format using ASP";
+    homepage = "https://potassco.org/aspcud/";
+    platforms = platforms.all;
+    maintainers = [ maintainers.hakuch ];
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/astronomer/default.nix b/nixpkgs/pkgs/tools/misc/astronomer/default.nix
new file mode 100644
index 000000000000..fb10f428967b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/astronomer/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "astronomer";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "Ullaakut";
+    repo = "astronomer";
+    rev = "v${version}";
+    hash = "sha256-4hUfJI2BRZl3Trk8F2qLZAyA57kq0oW9/e13atj/BVg=";
+  };
+
+  vendorHash = "sha256-EOtpZPIrAVMPIZGnkZoNs7ovaR7Ts3dJsFLXClIoNVI=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A tool to detect illegitimate stars from bot accounts on GitHub projects";
+    homepage = "https://github.com/Ullaakut/astronomer";
+    changelog = "https://github.com/Ullaakut/astronomer/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "astronomer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/audible-cli/default.nix b/nixpkgs/pkgs/tools/misc/audible-cli/default.nix
new file mode 100644
index 000000000000..297917b6a92a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/audible-cli/default.nix
@@ -0,0 +1,63 @@
+{ lib, python3Packages, fetchFromGitHub, installShellFiles }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "audible-cli";
+  version = "0.2.6";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "mkb79";
+    repo = "audible-cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-J81RcehFokOpsQBJLvmeihSrlMyX0geHPl3PPxvGjmY=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    pythonRelaxDepsHook
+    setuptools
+  ] ++ [
+    installShellFiles
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    aiofiles
+    audible
+    click
+    httpx
+    packaging
+    pillow
+    questionary
+    tabulate
+    toml
+    tqdm
+  ];
+
+  pythonRelaxDeps = [
+    "httpx"
+    "audible"
+  ];
+
+  postInstall = ''
+    export PATH=$out/bin:$PATH
+    installShellCompletion --cmd audible \
+      --bash <(source utils/code_completion/audible-complete-bash.sh) \
+      --fish <(source utils/code_completion/audible-complete-zsh-fish.sh) \
+      --zsh <(source utils/code_completion/audible-complete-zsh-fish.sh)
+  '';
+
+  # upstream has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "audible_cli"
+  ];
+
+  meta = with lib; {
+    description = "A command line interface for audible package. With the cli you can download your Audible books, cover, chapter files";
+    license = licenses.agpl3Only;
+    homepage = "https://github.com/mkb79/audible-cli";
+    changelog = "https://github.com/mkb79/audible-cli/blob/${src.rev}/CHANGELOG.md";
+    maintainers = with maintainers; [ jvanbruegge ];
+    mainProgram = "audible";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/autojump/default.nix b/nixpkgs/pkgs/tools/misc/autojump/default.nix
new file mode 100644
index 000000000000..e1bb2f084110
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autojump/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "autojump";
+  version = "22.5.3";
+
+  src = fetchFromGitHub {
+    owner = "wting";
+    repo = "autojump";
+    rev = "release-v${version}";
+    sha256 = "1rgpsh70manr2dydna9da4x7p8ahii7dgdgwir5fka340n1wrcws";
+  };
+
+  buildInputs = [ python3 ];
+  nativeBuildInputs = [ python3 ];
+  dontBuild = true;
+  strictDeps = true;
+
+  installPhase = ''
+    python ./install.py -d "$out" -p "" -z "$out/share/zsh/site-functions/"
+
+    chmod +x "$out/etc/profile.d/autojump.sh"
+    install -Dt "$out/share/bash-completion/completions/" -m444 "$out/share/autojump/autojump.bash"
+    install -Dt "$out/share/fish/vendor_conf.d/" -m444 "$out/share/autojump/autojump.fish"
+    install -Dt "$out/share/zsh/site-functions/" -m444 "$out/share/autojump/autojump.zsh"
+  '';
+
+  meta = with lib; {
+    description = "A `cd' command that learns";
+    longDescription = ''
+      One of the most used shell commands is “cdâ€.  A quick survey
+      among my friends revealed that between 10 and 20% of all
+      commands they type are actually cd commands! Unfortunately,
+      jumping from one part of your system to another with cd
+      requires to enter almost the full path, which isn’t very
+      practical and requires a lot of keystrokes.
+
+      Autojump is a faster way to navigate your filesystem.  It
+      works by maintaining a database of the directories you use the
+      most from the command line.  The jstat command shows you the
+      current contents of the database.  You need to work a little
+      bit before the database becomes usable.  Once your database
+      is reasonably complete, you can “jump†to a directory by
+      typing "j dirspec", where dirspec is a few characters of the
+      directory you want to jump to.  It will jump to the most used
+      directory whose name matches the pattern given in dirspec.
+
+      Autojump supports tab-completion.
+    '';
+    homepage = "https://github.com/wting/autojump";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ domenkozar yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/automirror/default.nix b/nixpkgs/pkgs/tools/misc/automirror/default.nix
new file mode 100644
index 000000000000..457303c6bc26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/automirror/default.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchFromGitHub, git, ronn}:
+
+stdenv.mkDerivation rec {
+  pname = "automirror";
+  version = "49";
+
+  src = fetchFromGitHub {
+    owner = "schlomo";
+    repo = "automirror";
+    rev = "v${version}";
+    sha256 = "1syyf7dcm8fbyw31cpgmacg80h7pg036dayaaf0svvdsk0hqlsch";
+  };
+
+  patchPhase = "sed -i s#/usr##g Makefile";
+
+  buildInputs = [ git ronn ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/schlomo/automirror";
+    description = "Automatic Display Mirror";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    mainProgram = "automirror";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/autorandr/0001-don-t-use-sys.executable.patch b/nixpkgs/pkgs/tools/misc/autorandr/0001-don-t-use-sys.executable.patch
new file mode 100644
index 000000000000..81879a8f834b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autorandr/0001-don-t-use-sys.executable.patch
@@ -0,0 +1,33 @@
+From fdcc2f01441ec25104456022e6f8d3120709cede Mon Sep 17 00:00:00 2001
+From: Romanos Skiadas <rom.skiad@gmail.com>
+Date: Tue, 28 Jun 2022 06:16:10 +0300
+Subject: [PATCH] don't use sys.executable
+
+This is required for forking self in a nixpkgs environment,
+where arandr might be wrapped. In that case, the actual arandr command
+will be a bash script, not python.
+There is no real reason to keep this around, nixpkgs properly sets the
+interpreter in the shebang anyway.
+---
+ autorandr.py | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git autorandr.py autorandr.py
+index 35c15f6..1e84a2f 100755
+--- a/autorandr.py
++++ b/autorandr.py
+@@ -1192,10 +1192,7 @@ def dispatch_call_to_sessions(argv):
+             os.chdir(pwent.pw_dir)
+             os.environ.clear()
+             os.environ.update(process_environ)
+-            if sys.executable != "" and sys.executable != None:
+-                os.execl(sys.executable, sys.executable, autorandr_binary, *argv[1:])
+-            else:
+-                os.execl(autorandr_binary, autorandr_binary, *argv[1:])
++            os.execl(autorandr_binary, autorandr_binary, *argv[1:])
+             sys.exit(1)
+         os.waitpid(child_pid, 0)
+ 
+-- 
+2.36.1
+
diff --git a/nixpkgs/pkgs/tools/misc/autorandr/default.nix b/nixpkgs/pkgs/tools/misc/autorandr/default.nix
new file mode 100644
index 000000000000..cc196de6230b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autorandr/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, python3
+, fetchFromGitHub
+, systemd
+, xrandr
+, installShellFiles
+, desktop-file-utils
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "autorandr";
+  version = "1.14";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "phillipberndt";
+    repo = "autorandr";
+    rev = "refs/tags/${version}";
+    hash = "sha256-Ru3nQF0DB98rKSew6QtxAZQEB/9nVlIelNX3M7bNYHk=";
+  };
+
+  nativeBuildInputs = [ installShellFiles desktop-file-utils ];
+  propagatedBuildInputs = with python3.pkgs; [ packaging ];
+
+  buildPhase = ''
+    substituteInPlace autorandr.py \
+      --replace 'os.popen("xrandr' 'os.popen("${xrandr}/bin/xrandr' \
+      --replace '["xrandr"]' '["${xrandr}/bin/xrandr"]'
+  '';
+
+  patches = [ ./0001-don-t-use-sys.executable.patch ];
+
+  outputs = [ "out" "man" ];
+
+  installPhase = ''
+    runHook preInstall
+    make install TARGETS='autorandr' PREFIX=$out
+
+    # zsh completions exist but currently have no make target, use
+    # installShellCompletions for both
+    # see https://github.com/phillipberndt/autorandr/issues/197
+    installShellCompletion --cmd autorandr \
+        --bash contrib/bash_completion/autorandr \
+        --zsh contrib/zsh_completion/_autorandr \
+        --fish contrib/fish_copletion/autorandr.fish
+    # In the line above there's a typo that needs to be fixed in the next
+    # release
+
+    make install TARGETS='autostart_config' PREFIX=$out DESTDIR=$out
+
+    make install TARGETS='manpage' PREFIX=$man
+
+    ${if systemd != null then ''
+      make install TARGETS='systemd udev' PREFIX=$out DESTDIR=$out \
+        SYSTEMD_UNIT_DIR=/lib/systemd/system \
+        UDEV_RULES_DIR=/etc/udev/rules.d
+      substituteInPlace $out/etc/udev/rules.d/40-monitor-hotplug.rules \
+        --replace /bin/systemctl "/run/current-system/systemd/bin/systemctl"
+    '' else ''
+      make install TARGETS='pmutils' DESTDIR=$out \
+        PM_SLEEPHOOKS_DIR=/lib/pm-utils/sleep.d
+      make install TARGETS='udev' PREFIX=$out DESTDIR=$out \
+        UDEV_RULES_DIR=/etc/udev/rules.d
+    ''}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/phillipberndt/autorandr/";
+    description = "Automatically select a display configuration based on connected devices";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ coroa ];
+    platforms = platforms.unix;
+    mainProgram = "autorandr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/autorevision/default.nix b/nixpkgs/pkgs/tools/misc/autorevision/default.nix
new file mode 100644
index 000000000000..f0d979769380
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autorevision/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, asciidoc, libxml2, docbook_xml_dtd_45, libxslt
+, docbook_xsl, diffutils, coreutils, gnugrep, gnused
+}:
+
+stdenv.mkDerivation rec {
+  pname = "autorevision";
+  version = "1.22";
+
+  src = fetchurl {
+    url = "https://github.com/Autorevision/autorevision/releases/download/v%2F${version}/autorevision-${version}.tgz";
+    sha256 = "sha256-3ktLVC73m2xddq5BhxVKw/FJd6pZ5RVb7fv29dxUoRE=";
+  };
+
+  buildInputs = [
+    asciidoc libxml2 docbook_xml_dtd_45 libxslt docbook_xsl
+  ];
+
+  installFlags = [ "prefix=$(out)" ];
+
+  postInstall = ''
+    sed -e "s|\<cmp\>|${diffutils}/bin/cmp|g" \
+        -e "s|\<cat\>|${coreutils}/bin/cat|g" \
+        -e "s|\<grep\>|${gnugrep}/bin/grep|g" \
+        -e "s|\<sed\>|${gnused}/bin/sed|g" \
+        -e "s|\<tee\>|${coreutils}/bin/tee|g" \
+        -i "$out/bin/autorevision"
+  '';
+
+  meta = with lib; {
+    description = "Extracts revision metadata from your VCS repository";
+    homepage = "https://autorevision.github.io/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "autorevision";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix b/nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix
new file mode 100644
index 000000000000..9b03e2dd1bdb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "aws-mturk-clt";
+  version = "1.3.0";
+
+  src = fetchurl {
+    url = "https://mturk.s3.amazonaws.com/CLTSource/aws-mturk-clt-${version}.tar.gz";
+    sha256 = "00yyc7k3iygg83cknv9i2dsaxwpwzdkc8a2l9j56lg999hw3mqm3";
+  };
+
+  installPhase =
+    ''
+      mkdir -p $out
+      cp -prvd bin $out/
+
+      for i in $out/bin/*.sh; do
+        sed -i "$i" -e "s|^MTURK_CMD_HOME=.*|MTURK_CMD_HOME=$out\nexport JAVA_HOME=${jre}|"
+      done
+
+      mkdir -p $out/lib
+      cp -prvd lib/* $out/lib/
+    ''; # */
+
+  meta = {
+    homepage = "https://requester.mturk.com/developer";
+    description = "Command line tools for interacting with the Amazon Mechanical Turk";
+    license = lib.licenses.amazonsl;
+
+    longDescription =
+      ''
+        The Amazon Mechanical Turk is a crowdsourcing marketplace that
+        allows users (“requestersâ€) to submit tasks to be performed by
+        other humans (“workersâ€) for a small fee.  This package
+        contains command-line tools for submitting tasks, querying
+        results, and so on.
+
+        The command-line tools expect a file
+        <filename>mturk.properties<filename> in the current directory,
+        which should contain the following:
+
+        <screen>
+        access_key=[insert your access key here]
+        secret_key=[insert your secret key here]
+        service_url=http://mechanicalturk.amazonaws.com/?Service=AWSMechanicalTurkRequester
+        </screen>
+      '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/backdown/default.nix b/nixpkgs/pkgs/tools/misc/backdown/default.nix
new file mode 100644
index 000000000000..e578b1ab4295
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/backdown/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "backdown";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "Canop";
+    repo = "backdown";
+    rev = "v${version}";
+    hash = "sha256-w9EdDSGqmHRLXwx5qFo0BngKATKtQsieMt6dPgfOrQ0=";
+  };
+
+  cargoHash = "sha256-BOwhXq/xVuk3KylL3KeIkiIG3SXVASFiYkUgKJhMzuU=";
+
+  meta = with lib; {
+    description = "A file deduplicator";
+    homepage = "https://github.com/Canop/backdown";
+    changelog = "https://github.com/Canop/backdown/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "backdown";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/balanceofsatoshis/default.nix b/nixpkgs/pkgs/tools/misc/balanceofsatoshis/default.nix
new file mode 100644
index 000000000000..b1b17e02366b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/balanceofsatoshis/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, installShellFiles
+, python3
+}:
+
+buildNpmPackage rec {
+  pname = "balanceofsatoshis";
+  version = "15.8.15";
+
+  src = fetchFromGitHub {
+    owner = "alexbosworth";
+    repo = "balanceofsatoshis";
+    rev = "v${version}";
+    hash = "sha256-8GWITeFn7ELUH7bxcNlmQvgperQutBwVUhp2yjeEWrM=";
+  };
+
+  npmDepsHash = "sha256-lTXv4pEjrzcOK68RO1K007r7dCbAyc45G8Oy8V3XLts=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    python3
+  ];
+
+  dontNpmBuild = true;
+
+  npmFlags = [ "--ignore-scripts" ];
+
+  postInstall = ''
+    installShellCompletion --cmd bos \
+        --bash <($out/bin/bos completion bash) \
+        --zsh <($out/bin/bos completion zsh) \
+        --fish <($out/bin/bos completion fish)
+  '';
+
+  meta = {
+    changelog = "https://github.com/alexbosworth/balanceofsatoshis/blob/${src.rev}/CHANGELOG.md";
+    description = "Tool for working with the balance of your satoshis on LND";
+    homepage = "https://github.com/alexbosworth/balanceofsatoshis";
+    license = lib.licenses.mit;
+    mainProgram = "bos";
+    maintainers = with lib.maintainers; [ mmilata ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bandwidth/default.nix b/nixpkgs/pkgs/tools/misc/bandwidth/default.nix
new file mode 100644
index 000000000000..9a34442b2210
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bandwidth/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, nasm }:
+
+let
+  inherit (stdenv.hostPlatform.parsed.cpu) bits;
+  arch = "bandwidth${toString bits}";
+in
+stdenv.mkDerivation rec {
+  pname = "bandwidth";
+  version = "1.11.2d";
+
+  src = fetchurl {
+    url = "https://zsmith.co/archives/${pname}-${version}.tar.gz";
+    hash = "sha256-7IrNiCXKf1vyRGl73Ccu3aYMqPVc4PpEr6lnSqIa4Q8=";
+  };
+
+  postPatch = ''
+    sed -i 's,ar ,$(AR) ,g' OOC/Makefile
+    # Remove unnecessary -m32 for 32-bit targets
+    sed -i 's,-m32,,g' OOC/Makefile
+    # Replace arm64 with aarch64
+    sed -i 's#,arm64#,aarch64#g' Makefile
+    # Fix wrong comment character
+    sed -i 's,# 32,; 32,g' routines-x86-32bit.asm
+    # Fix missing symbol exports for macOS clang
+    echo global _VectorToVector128 >> routines-x86-64bit.asm
+    echo global _VectorToVector256 >> routines-x86-64bit.asm
+    # Fix unexpected token on macOS
+    sed -i '/.section .note.GNU-stack/d' *-64bit.asm
+    sed -i '/.section code/d' *-arm-64bit.asm
+    sed -i 's#-Wl,-z,noexecstack##g' Makefile-arm64
+  '';
+
+  nativeBuildInputs = [ nasm ];
+
+  buildFlags = [
+    "AR=${stdenv.cc.targetPrefix}ar"
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "ARM_AS=${stdenv.cc.targetPrefix}as"
+    "ARM_CC=$(CC)"
+    "UNAMEPROC=${stdenv.hostPlatform.parsed.cpu.name}"
+    "UNAMEMACHINE=${stdenv.hostPlatform.parsed.cpu.name}"
+    arch
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${arch} $out/bin/bandwidth
+  '';
+
+  meta = with lib; {
+    homepage = "https://zsmith.co/bandwidth.html";
+    description = "Artificial benchmark for identifying weaknesses in the memory subsystem";
+    license = licenses.gpl2Plus;
+    platforms = platforms.x86 ++ platforms.arm ++ platforms.aarch64;
+    maintainers = with maintainers; [ r-burns ];
+    mainProgram = "bandwidth";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/barman/default.nix b/nixpkgs/pkgs/tools/misc/barman/default.nix
new file mode 100644
index 000000000000..b4bf50437218
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/barman/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "barman";
+  version = "3.10.0";
+
+  src = fetchFromGitHub {
+    owner = "EnterpriseDB";
+    repo = pname;
+    rev = "refs/tags/release/${version}";
+    hash = "sha256-NcDW1SLeP2BVH+TQp1M03Otg75axSFXfwQzlEJ1JOxo=";
+  };
+
+  patches = [
+    ./unwrap-subprocess.patch
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    mock
+    python-snappy
+    google-cloud-storage
+    pytestCheckHook
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    argcomplete
+    azure-identity
+    azure-storage-blob
+    boto3
+    psycopg2
+    python-dateutil
+  ];
+
+  disabledTests = [
+    # Assertion error
+    "test_help_output"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # FsOperationFailed
+    "test_get_file_mode"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.pgbarman.org/";
+    description = "Backup and Recovery Manager for PostgreSQL";
+    changelog = "https://github.com/EnterpriseDB/barman/blob/release/${version}/NEWS";
+    maintainers = with maintainers; [ freezeboy ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/barman/unwrap-subprocess.patch b/nixpkgs/pkgs/tools/misc/barman/unwrap-subprocess.patch
new file mode 100644
index 000000000000..7dfd6529a293
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/barman/unwrap-subprocess.patch
@@ -0,0 +1,30 @@
+--- a/barman/command_wrappers.py
++++ b/barman/command_wrappers.py
+@@ -1144,5 +1144,5 @@
+         # * pass the current configuration file with -c
+         # * set it quiet with -q
+-        self.command = [sys.executable, command, "-c", config, "-q", subcommand]
++        self.command = [command, "-c", config, "-q", subcommand]
+         self.keep_descriptors = keep_descriptors
+         # Handle args for the sub-command (like the server name)
+
+--- a/tests/test_command_wrappers.py
++++ a/tests/test_command_wrappers.py
+@@ -1595,5 +1595,4 @@
+         )
+         assert subprocess.command == [
+-            sys.executable,
+             sys.argv[0],
+             "-c",
+@@ -1622,5 +1621,4 @@
+         )
+         assert subprocess.command == [
+-            sys.executable,
+             "path/to/barman",
+             "-c",
+@@ -1644,5 +1642,4 @@
+ 
+         command = [
+-            sys.executable,
+             "path/to/barman",
+             "-c",
diff --git a/nixpkgs/pkgs/tools/misc/bartib/default.nix b/nixpkgs/pkgs/tools/misc/bartib/default.nix
new file mode 100644
index 000000000000..893fbe7b58a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bartib/default.nix
@@ -0,0 +1,29 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bartib";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "nikolassv";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ph3rsrhcyi272bv5018pw185zn7fvp5fqj24yh9rjrz8x7iawib";
+  };
+
+  cargoSha256 = "sha256-1ZFwX7NKIainer7o9dIMxwyycdGW8K9euLHad/tF95w=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd bartib --bash misc/bartibCompletion.sh
+  '';
+
+  meta = with lib; {
+    description = "A simple timetracker for the command line";
+    homepage = "https://github.com/nikolassv/bartib";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "bartib";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/basez/default.nix b/nixpkgs/pkgs/tools/misc/basez/default.nix
new file mode 100644
index 000000000000..e7fe906836e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/basez/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl } :
+
+stdenv.mkDerivation rec {
+  pname = "basez";
+  version = "1.6.2";
+
+  src = fetchurl {
+    url = "http://www.quarkline.net/basez/download/basez-${version}.tar.gz";
+    sha256 = "sha256-Kp+CFIh5HCdj7wEgx1xD3IPdFlZ7fEFvMDMYif1ZiTc=";
+  };
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Base 16/32/64 encode/decode data to standard output";
+    longDescription = ''
+        Encode  data into/decode data from base16, base32, base32hex, base64 or
+        base64url stream per RFC 4648;  MIME  base64  Content-Transfer-Encoding
+        per RFC 2045; or PEM Printable Encoding per RFC 1421.
+    '';
+    homepage = "http://www.quarkline.net/basez/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.oaksoaj ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bash_unit/default.nix b/nixpkgs/pkgs/tools/misc/bash_unit/default.nix
new file mode 100644
index 000000000000..ffedb168f1b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bash_unit/default.nix
@@ -0,0 +1,28 @@
+{ fetchFromGitHub
+, lib, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bash_unit";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "pgrange";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-c1C+uBo5PSH07VjulCxkmvfj7UYm6emdDAaN00uvAcg=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bash_unit $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Bash unit testing enterprise edition framework for professionals";
+    maintainers = with maintainers; [ pamplemousse ];
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    mainProgram = "bash_unit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bashcards/default.nix b/nixpkgs/pkgs/tools/misc/bashcards/default.nix
new file mode 100644
index 000000000000..bce5ab40e2dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bashcards/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bashcards";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "rpearce";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1rpqrh0022sbrjvd55a0jvpdqhhka5msf8dsz6adbbmxy3xzgdid";
+  };
+
+  dontBuild = true;
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man8
+    cp bashcards.8 $out/share/man/man8/
+    cp bashcards $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Practice flashcards in bash";
+    homepage = "https://github.com/rpearce/bashcards/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ rpearce ];
+    platforms = platforms.all;
+    mainProgram = "bashcards";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bashplotlib/default.nix b/nixpkgs/pkgs/tools/misc/bashplotlib/default.nix
new file mode 100644
index 000000000000..d35d9ebcbcc0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bashplotlib/default.nix
@@ -0,0 +1,23 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication {
+  pname = "bashplotlib";
+  version = "2021-03-31";
+
+  src = fetchFromGitHub {
+    owner = "glamp";
+    repo = "bashplotlib";
+    rev = "db4065cfe65c0bf7c530e0e8b9328daf9593ad74";
+    sha256 = "sha256-0S6mgy6k7CcqsDR1kE5xcXGidF1t061e+M+ZuP2Gk3c=";
+  };
+
+  # No tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/glamp/bashplotlib";
+    description = "Plotting in the terminal";
+    maintainers = with maintainers; [ dtzWill ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bat-extras/default.nix b/nixpkgs/pkgs/tools/misc/bat-extras/default.nix
new file mode 100644
index 000000000000..67fa9dcf4e90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bat-extras/default.nix
@@ -0,0 +1,155 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, bat
+# batdiff, batgrep, and batwatch
+, coreutils
+, getconf
+, less
+# tests
+, bash
+, zsh
+, fish
+# batgrep
+, ripgrep
+# prettybat
+, withShFmt ? shfmt != null, shfmt ? null
+, withPrettier ? nodePackages?prettier, nodePackages ? null
+, withClangTools ? clang-tools != null, clang-tools ? null
+, withRustFmt ? rustfmt != null, rustfmt ? null
+# batwatch
+, withEntr ? entr != null, entr ? null
+# batdiff
+, gitMinimal
+, withDelta ? delta != null, delta ? null
+# batman
+, util-linux
+}:
+
+let
+  # Core derivation that all the others are based on.
+  # This includes the complete source so the per-script derivations can run the tests.
+  core = stdenv.mkDerivation rec {
+    pname   = "bat-extras";
+    version = "2024.02.12";
+
+    src = fetchFromGitHub {
+      owner  = "eth-p";
+      repo   = "bat-extras";
+      rev    = "v${version}";
+      hash   = "sha256-EPDGQkwwxYFTJPJtwSkVrpBf27+VlMd/nqEkJupHlyA=";
+      fetchSubmodules = true;
+    };
+
+    # bat needs to be in the PATH during building so EXECUTABLE_BAT picks it up
+    nativeBuildInputs = [ bat ];
+
+    dontConfigure = true;
+
+    postPatch = ''
+      patchShebangs --build test.sh test/shimexec .test-framework/bin/best.sh
+    '';
+
+    buildPhase = ''
+      runHook preBuild
+      bash ./build.sh --minify=none --no-verify
+      runHook postBuild
+    '';
+
+    # Run the library tests as they don't have external dependencies
+    doCheck = true;
+    nativeCheckInputs = [ bash fish zsh ] ++ (lib.optionals stdenv.isDarwin [ getconf ]);
+    checkPhase = ''
+      runHook preCheck
+      # test list repeats suites. Unique them
+      declare -A test_suites
+      while read -r action arg _; do
+        [[ "$action" == "test_suite" && "$arg" == lib_* ]] &&
+        test_suites+=(["$arg"]=1)
+      done <<<"$(./test.sh --compiled --list --porcelain)"
+      (( ''${#test_suites[@]} != 0 )) || {
+        echo "Couldn't find any library test suites"
+        exit 1
+      }
+      ./test.sh --compiled $(printf -- "--suite %q\n" "''${!test_suites[@]}")
+      runHook postCheck
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      cp -a . $out
+      runHook postInstall
+    '';
+
+    # A few random files have shebangs. Don't patch them, they don't make it into the final output.
+    # The per-script derivations will go ahead and patch the files they actually install.
+    dontPatchShebangs = true;
+
+    meta = with lib; {
+      description = "Bash scripts that integrate bat with various command line tools";
+      homepage    = "https://github.com/eth-p/bat-extras";
+      license     = with licenses; [ mit ];
+      maintainers = with maintainers; [ bbigras lilyball ];
+      platforms   = platforms.all;
+    };
+  };
+  script =
+    name: # the name of the script
+    dependencies: # the tools we need to prefix onto PATH
+    stdenv.mkDerivation {
+      pname = name;
+      inherit (core) version;
+
+      src = core;
+
+      nativeBuildInputs = [ makeWrapper ];
+      # Make the dependencies available to the tests.
+      buildInputs = dependencies;
+
+      # Patch shebangs now because our tests rely on them
+      postPatch = ''
+        patchShebangs --host bin/${name}
+      '';
+
+      dontConfigure = true;
+      dontBuild = true; # we've already built
+
+      doCheck = true;
+      nativeCheckInputs = [ bat bash fish zsh ] ++ (lib.optionals stdenv.isDarwin [ getconf ]);
+      checkPhase = ''
+        runHook preCheck
+        bash ./test.sh --compiled --suite ${name}
+        runHook postCheck
+      '';
+
+      installPhase = ''
+        runHook preInstall
+        mkdir -p $out/bin
+        cp -p bin/${name} $out/bin/${name}
+      '' + lib.optionalString (dependencies != []) ''
+        wrapProgram $out/bin/${name} \
+          --prefix PATH : ${lib.makeBinPath dependencies}
+      '' + ''
+        runHook postInstall
+      '';
+
+      # We already patched
+      dontPatchShebangs = true;
+
+      meta = core.meta // {
+        mainProgram = name;
+      };
+    };
+  optionalDep = cond: dep:
+    assert cond -> dep != null;
+    lib.optional cond dep;
+in
+{
+  batdiff = script "batdiff" ([ less coreutils gitMinimal ] ++ optionalDep withDelta delta);
+  batgrep = script "batgrep" [ less coreutils ripgrep ];
+  batman = script "batman" (lib.optionals stdenv.isLinux [ util-linux ]);
+  batpipe = script "batpipe" [ less ];
+  batwatch = script "batwatch" ([ less coreutils ] ++ optionalDep withEntr entr);
+  prettybat = script "prettybat" ([]
+    ++ optionalDep withShFmt shfmt
+    ++ optionalDep withPrettier nodePackages.prettier
+    ++ optionalDep withClangTools clang-tools
+    ++ optionalDep withRustFmt rustfmt);
+}
diff --git a/nixpkgs/pkgs/tools/misc/bbe/default.nix b/nixpkgs/pkgs/tools/misc/bbe/default.nix
new file mode 100644
index 000000000000..58d099da4b06
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bbe/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv , fetchurl, autoreconfHook }:
+stdenv.mkDerivation rec {
+  pname = "bbe";
+  version = "0.2.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bbe-/${version}/bbe-${version}.tar.gz";
+    sha256 = "1nyxdqi4425sffjrylh7gl57lrssyk4018afb7mvrnd6fmbszbms";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  outputs = [ "out" "doc" ];
+
+  meta = with lib; {
+    description = "A sed-like editor for binary files";
+    homepage = "https://bbe-.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.hhm ];
+    mainProgram = "bbe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bc/cross-bc.patch b/nixpkgs/pkgs/tools/misc/bc/cross-bc.patch
new file mode 100644
index 000000000000..ba8857abb581
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bc/cross-bc.patch
@@ -0,0 +1,169 @@
+commit fdda59736ddc048cf38a2c7103f4f5d9eeaf995e
+Author: Ben Gamari <ben@smart-cactus.org>
+Date:   Tue Oct 17 10:51:34 2017 -0400
+
+    Try implementing cross-compilation
+
+diff --git a/bc/Makefile.am b/bc/Makefile.am
+index d9d412e..fdef633 100644
+--- a/bc/Makefile.am
++++ b/bc/Makefile.am
+@@ -17,6 +17,7 @@ MAINTAINERCLEANFILES = Makefile.in bc.c bc.h scan.c \
+ 
+ AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/../h
+ LIBBC = ../lib/libbc.a
++LIBBC_HOST = ../lib/libbc_host.a
+ LIBL = @LEXLIB@
+ LDADD = $(LIBBC) $(LIBL) @READLINELIB@
+ 
+@@ -29,12 +30,20 @@ $(PROGRAMS): libmath.h $(LIBBC)
+ scan.o: bc.h
+ global.o: libmath.h
++
++main_host.c : main.c
++	cp $< $@
+ 
+-fbcOBJ = main.o bc.o scan.o execute.o load.o storage.o util.o warranty.o
++fbcOBJ = $(addsuffix _host,main.o bc.o scan.o execute.o load.o storage.o util.o warranty.o)
++
++%.o_host : CC:=$(CC_FOR_BUILD)
++
++%.o_host : %.c
++	$(COMPILE) -c $(CFLAGS) $(INCLUDES) -o $@ $<
+ 
+-libmath.h: libmath.b $(fbcOBJ) $(LIBBC)
++libmath.h: libmath.b $(fbcOBJ) $(LIBBC_HOST)
+ 	echo '{0}' > libmath.h
+-	$(MAKE) global.o
+-	$(LINK) -o fbc $(fbcOBJ) global.o $(LIBBC) $(LIBL) $(READLINELIB) $(LIBS)
++	$(MAKE) global.o_host
++	$(CC_FOR_BUILD) -o fbc $(fbcOBJ) global.o_host $(LIBBC_HOST) $(LIBL) ${READLINELIB} $(LIBS)
+ 	./fbc -c $(srcdir)/libmath.b </dev/null >libmath.h
+ 	$(srcdir)/fix-libmath_h
+ 	rm -f ./fbc ./global.o
+diff --git a/configure.ac b/configure.ac
+index fc74573..5cabb73 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -20,6 +20,7 @@ m4_define([dc_version], 1.4.1)
+ 
+ AC_INIT([bc],[bc_version])
+ AC_CONFIG_SRCDIR(doc/bc.1)
++AC_CONFIG_MACRO_DIR([m4])
+ AM_INIT_AUTOMAKE([dist-bzip2])
+ AC_CONFIG_HEADERS(config.h)
+ 
+@@ -35,6 +36,7 @@ AC_DEFINE([DC_COPYRIGHT],
+ 	  [Define the dc copyright line.])
+ 
+ AC_PROG_CC
++AX_CC_FOR_BUILD
+ AC_USE_SYSTEM_EXTENSIONS
+ 
+ AM_PROG_LEX
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index ec4bf59..c670f5b 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -1,5 +1,5 @@
+ ## Process this file with automake to produce Makefile.in
+-noinst_LIBRARIES = libbc.a
++noinst_LIBRARIES = libbc.a libbc_host.a
+ 
+ AM_CPPFLAGS = -I. -I.. -I$(srcdir)/../h
+ 
+@@ -24,3 +24,11 @@ testmul: testmul.o number.o
+ 
+ specialnumber: newnumber.o
+ 	cp newnumber.o number.o
++
++%.o_host : CC:=$(CC_FOR_BUILD)
++%.o_host : %.c
++	$(COMPILE) -c $(CFLAGS) $(INCLUDES) -o $@ $<
++
++libbc_host.a : $(addsuffix _host,$(libbc_a_OBJECTS))
++	ar cru $@ $+
++	ranlib $@
+diff --git a/m4/cc_for_build.m4 b/m4/cc_for_build.m4
+new file mode 100644
+index 0000000..c62ffad
+--- /dev/null
++++ b/m4/cc_for_build.m4
+@@ -0,0 +1,77 @@
++# ===========================================================================
++#     https://www.gnu.org/software/autoconf-archive/ax_cc_for_build.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_CC_FOR_BUILD
++#
++# DESCRIPTION
++#
++#   Find a build-time compiler. Sets CC_FOR_BUILD and EXEEXT_FOR_BUILD.
++#
++# LICENSE
++#
++#   Copyright (c) 2010 Reuben Thomas <rrt@sc3d.org>
++#   Copyright (c) 1999 Richard Henderson <rth@redhat.com>
++#
++#   This program is free software: you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation, either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <https://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 3
++
++dnl Get a default for CC_FOR_BUILD to put into Makefile.
++AC_DEFUN([AX_CC_FOR_BUILD],
++[# Put a plausible default for CC_FOR_BUILD in Makefile.
++if test -z "$CC_FOR_BUILD"; then
++  if test "x$cross_compiling" = "xno"; then
++    CC_FOR_BUILD='$(CC)'
++  else
++    CC_FOR_BUILD=gcc
++  fi
++fi
++AC_SUBST(CC_FOR_BUILD)
++# Also set EXEEXT_FOR_BUILD.
++if test "x$cross_compiling" = "xno"; then
++  EXEEXT_FOR_BUILD='$(EXEEXT)'
++else
++  AC_CACHE_CHECK([for build system executable suffix], bfd_cv_build_exeext,
++    [rm -f conftest*
++     echo 'int main () { return 0; }' > conftest.c
++     bfd_cv_build_exeext=
++     ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5
++     for file in conftest.*; do
++       case $file in
++       *.c | *.o | *.obj | *.ilk | *.pdb) ;;
++       *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;;
++       esac
++     done
++     rm -f conftest*
++     test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no])
++  EXEEXT_FOR_BUILD=""
++  test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext}
++fi
++AC_SUBST(EXEEXT_FOR_BUILD)])dnl
diff --git a/nixpkgs/pkgs/tools/misc/bc/default.nix b/nixpkgs/pkgs/tools/misc/bc/default.nix
new file mode 100644
index 000000000000..e788fc53875f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bc/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, autoreconfHook, buildPackages
+, fetchurl, flex, readline, ed, texinfo
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bc";
+  version = "1.07.1";
+  src = fetchurl {
+    url = "mirror://gnu/bc/${pname}-${version}.tar.gz";
+    sha256 = "62adfca89b0a1c0164c2cdca59ca210c1d44c3ffc46daf9931cf4942664cb02a";
+  };
+
+  configureFlags = [ "--with-readline" ];
+
+  # As of 1.07 cross-compilation is quite complicated as the build system wants
+  # to build a code generator, bc/fbc, on the build machine.
+  patches = [ ./cross-bc.patch ];
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [
+    # Tools
+    autoreconfHook ed flex texinfo
+    # Libraries for build
+    buildPackages.readline buildPackages.ncurses
+  ];
+  buildInputs = [ readline flex ];
+
+  doCheck = true; # not cross
+
+  # Hack to make sure we never to the relaxation `$PATH` and hooks support for
+  # compatibility. This will be replaced with something clearer in a future
+  # masss-rebuild.
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "GNU software calculator";
+    homepage = "https://www.gnu.org/software/bc/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bcunit/default.nix b/nixpkgs/pkgs/tools/misc/bcunit/default.nix
new file mode 100644
index 000000000000..14cf183f5878
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bcunit/default.nix
@@ -0,0 +1,27 @@
+{ cmake
+, fetchFromGitLab
+, lib, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bcunit";
+  version = "linphone-4.4.1";
+
+  nativeBuildInputs = [ cmake ];
+  src = fetchFromGitLab {
+    domain = "gitlab.linphone.org";
+    owner = "public";
+    group = "BC";
+    repo = pname;
+    rev = "c5eebcc7f794e9567d3c72d15d3f28bffe6bfd0f";
+    sha256 = "sha256-8DSfqHerx/V00SJjTSQaG9Rjqx330iG6sGivBDUvQfA=";
+  };
+
+  meta = with lib; {
+    description = "Belledonne Communications' fork of CUnit test framework. Part of the Linphone project";
+    homepage = "https://gitlab.linphone.org/BC/public/bcunit";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ raskin jluttine ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bdf2psf/default.nix b/nixpkgs/pkgs/tools/misc/bdf2psf/default.nix
new file mode 100644
index 000000000000..41caab53e2fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bdf2psf/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, perl, dpkg }:
+
+stdenv.mkDerivation rec {
+  pname = "bdf2psf";
+  version = "1.226";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/c/console-setup/bdf2psf_${version}_all.deb";
+    sha256 = "sha256-MLNLeCgBzp2awt9ZJM2kaCWQhRnC6sSwm1fHlv3EwHo=";
+  };
+
+  nativeBuildInputs = [ dpkg ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  unpackPhase = ''
+    runHook preUnpack
+    dpkg-deb -x $src .
+    runHook postUnpack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    substituteInPlace usr/bin/bdf2psf --replace /usr/bin/perl "${perl}/bin/perl"
+    rm usr/share/doc/bdf2psf/changelog.gz
+    mv usr "$out"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "BDF to PSF converter";
+    homepage = "https://packages.debian.org/sid/bdf2psf";
+    longDescription = ''
+      Font converter to generate console fonts from BDF source fonts
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ rnhmjoj vrthra ];
+    platforms = platforms.all;
+    mainProgram = "bdf2psf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bdf2sfd/default.nix b/nixpkgs/pkgs/tools/misc/bdf2sfd/default.nix
new file mode 100644
index 000000000000..73a72ffeb61a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bdf2sfd/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "bdf2sfd";
+  version = "1.1.8";
+
+  src = fetchFromGitHub {
+    owner = "fcambus";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-+CPULpy3mqZv0QaXS4kKYWKjifibtcQt7unKGOUTSV0=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "BDF to SFD converter";
+    homepage = "https://github.com/fcambus/bdf2sfd";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "bdf2sfd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bdfresize/default.nix b/nixpkgs/pkgs/tools/misc/bdfresize/default.nix
new file mode 100644
index 000000000000..077b52430275
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bdfresize/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "bdfresize";
+  version = "1.5";
+
+  src = fetchurl {
+    url = "http://openlab.ring.gr.jp/efont/dist/tools/bdfresize/${pname}-${version}.tar.gz";
+    hash = "sha256-RAz8BiCgI35GNSwUoHdMqj8wWXWbCiDe/vyU6EkIl6Y=";
+  };
+
+  patches = [ ./remove-malloc-declaration.patch ];
+
+  meta = with lib; {
+    description = "Tool to resize BDF fonts";
+    homepage = "http://openlab.ring.gr.jp/efont/dist/tools/bdfresize/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ malte-v ];
+    mainProgram = "bdfresize";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bdfresize/remove-malloc-declaration.patch b/nixpkgs/pkgs/tools/misc/bdfresize/remove-malloc-declaration.patch
new file mode 100644
index 000000000000..c58888a4be2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bdfresize/remove-malloc-declaration.patch
@@ -0,0 +1,11 @@
+Remove an unneeded declaration of malloc so gcc doesn't complain.
+--- a/charresize.c
++++ b/charresize.c
+@@ -46,7 +46,6 @@ static int	bit[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
+ void
+ processChar(void)
+ {
+-  char	*malloc();
+   char	*srcimage;
+   int	*dstgray;
+ 
diff --git a/nixpkgs/pkgs/tools/misc/beats/default.nix b/nixpkgs/pkgs/tools/misc/beats/default.nix
new file mode 100644
index 000000000000..a8ad2436f08c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/beats/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "beats";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "j0hax";
+    repo = "beats";
+    rev = "v${version}";
+    sha256 = "1rdvsqrjpily74y8vwch711401585xckb4p41cfwrmj6vf44jhif";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" "CC=cc" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/j0hax/beats";
+    license = licenses.gpl3Only;
+    description = "Swatch Internet Time implemented as a C program";
+    platforms = platforms.all;
+    maintainers = [ maintainers.j0hax ];
+    mainProgram = "beats";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bepasty/default.nix b/nixpkgs/pkgs/tools/misc/bepasty/default.nix
new file mode 100644
index 000000000000..9bf8c8e3ae16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bepasty/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, python3
+, fetchPypi
+}:
+let
+  # bepasty 1.2 needs xstatic-font-awesome < 5, see
+  # https://github.com/bepasty/bepasty-server/issues/305
+  bepastyPython = python3.override {
+    self = bepastyPython;
+    packageOverrides = self: super: {
+      xstatic-font-awesome = super.xstatic-font-awesome.overridePythonAttrs(oldAttrs: rec {
+        version = "4.7.0.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "sha256-4B+0gMqqfHlj3LMyikcA5jG+9gcNsOi2hYFtIg5oX2w=";
+        };
+      });
+    };
+  };
+
+#We need to use buildPythonPackage here to get the PYTHONPATH build correctly.
+#This is needed for services.bepasty
+#https://github.com/NixOS/nixpkgs/pull/38300
+in with bepastyPython.pkgs; buildPythonPackage rec {
+  pname = "bepasty";
+  version = "1.2.0";
+  format = "pyproject";
+
+  propagatedBuildInputs = [
+    flask
+    markupsafe
+    pygments
+    setuptools
+    xstatic
+    xstatic-asciinema-player
+    xstatic-bootbox
+    xstatic-bootstrap
+    xstatic-font-awesome
+    xstatic-jquery
+    xstatic-jquery-file-upload
+    xstatic-jquery-ui
+    xstatic-pygments
+  ];
+
+  buildInputs = [ setuptools-scm ];
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-R3bvrl/tOP0S9m6X+MwYK6fMQ51cI6W5AoxyYZ8aZ/w=";
+  };
+
+  nativeCheckInputs = [
+    build
+    codecov
+    flake8
+    pytestCheckHook
+    pytest-cov
+    selenium
+    tox
+    twine
+  ];
+
+  disabledTestPaths = [
+    # Can be enabled when werkzeug is updated to >2.2, see #245145
+    # and https://github.com/bepasty/bepasty-server/pull/303
+    "src/bepasty/tests/test_rest_server.py"
+
+    # These require a web browser
+    "src/bepasty/tests/screenshots.py"
+    "src/bepasty/tests/test_website.py"
+  ];
+
+  meta = {
+    homepage = "https://github.com/bepasty/bepasty-server";
+    description = "Binary pastebin server";
+    license = lib.licenses.bsd2;
+    maintainers = with lib.maintainers; [ aither64 makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/betterdiscord-installer/default.nix b/nixpkgs/pkgs/tools/misc/betterdiscord-installer/default.nix
new file mode 100644
index 000000000000..f064f5227bf9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/betterdiscord-installer/default.nix
@@ -0,0 +1,33 @@
+{ appimageTools, lib, fetchurl }:
+let
+  pname = "betterdiscord-installer";
+  version = "1.0.0-beta";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/BetterDiscord/Installer/releases/download/v${version}/Betterdiscord-Linux.AppImage";
+    sha256 = "103acb11qmvjmf6g9lgsfm5jyahfwfdqw0x9w6lmv1hzwbs26dsr";
+  };
+
+  appimageContents = appimageTools.extract { inherit name src; };
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+
+    install -m 444 -D ${appimageContents}/betterdiscord.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/betterdiscord.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "Installer for BetterDiscord";
+    homepage = "https://betterdiscord.app";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "betterdiscord-installer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/betterdiscordctl/default.nix b/nixpkgs/pkgs/tools/misc/betterdiscordctl/default.nix
new file mode 100644
index 000000000000..c2c935c0d981
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/betterdiscordctl/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenvNoCC, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "betterdiscordctl";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "bb010g";
+    repo = "betterdiscordctl";
+    rev = "v${version}";
+    sha256 = "0p321rfcihz2779sdd6qfgpxgk5yd53d33vq5pvb50dbdgxww0bc";
+  };
+
+  postPatch = ''
+    substituteInPlace betterdiscordctl \
+      --replace "DISABLE_SELF_UPGRADE=" "DISABLE_SELF_UPGRADE=yes"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin" "$out/share/doc/betterdiscordctl"
+    install -Dm744 betterdiscordctl $out/bin/betterdiscordctl
+    install -Dm644 README.md $out/share/doc/betterdiscordctl/README.md
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/betterdiscordctl --version
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/bb010g/betterdiscordctl";
+    description = "A utility for managing BetterDiscord on Linux";
+    license = licenses.mit;
+    mainProgram = "betterdiscordctl";
+    maintainers = with maintainers; [ ivar bb010g ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bfetch/default.nix b/nixpkgs/pkgs/tools/misc/bfetch/default.nix
new file mode 100644
index 000000000000..2d678da53233
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bfetch/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenvNoCC, fetchFromGitHub, bash }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "bfetch";
+  version = "unstable-2021-05-21";
+
+  src = fetchFromGitHub {
+    owner = "NNBnh";
+    repo = pname;
+    rev = "ef88e9d3f815e5074efc8ef4b7f32be6818130f2";
+    sha256 = "sha256-jS9zI8b+z3KbI+LeHFwIMJfEmAKSzO8HRZ2rk35hJCk=";
+  };
+
+  buildInputs = [ bash ];
+
+  postPatch = ''
+    patchShebangs --host bin/bfetch
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A SuperB general-purpose fetch displayer written in portable sh";
+    homepage = "https://github.com/NNBnh/bfetch";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moni ];
+    mainProgram = "bfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bfr/default.nix b/nixpkgs/pkgs/tools/misc/bfr/default.nix
new file mode 100644
index 000000000000..5308d2098d5e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bfr/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "bfr";
+  version = "1.6";
+
+  src = fetchurl {
+    url = "http://www.sourcefiles.org/Utilities/Text_Utilities/bfr-${version}.tar.bz2";
+    sha256 = "0fadfssvj9klj4dq9wdrzys1k2a1z2j0p6kgnfgbjv0n1bq6h4cy";
+  };
+
+  patches =
+    [ (fetchurl {
+        url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-misc/bfr/files/bfr-1.6-perl.patch";
+        sha256 = "1pk9jm3c1qzs727lh0bw61w3qbykaqg4jblywf9pvq5bypk88qfj";
+      })
+    ];
+
+  buildInputs = [ perl ];
+
+  meta = with lib; {
+    description = "A general-purpose command-line pipe buffer";
+    license = lib.licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bfscripts/default.nix b/nixpkgs/pkgs/tools/misc/bfscripts/default.nix
new file mode 100644
index 000000000000..537cab8697a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bfscripts/default.nix
@@ -0,0 +1,63 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, python3
+}:
+
+let
+  # Most of the binaries are not really useful because they have hardcoded
+  # paths that only make sense when you're running the stock BlueField OS on
+  # your BlueField. These might be patched in the future with resholve
+  # (https://github.com/abathur/resholve). If there is one that makes sense
+  # without resholving it, it can simply be uncommented and will be included in
+  # the output.
+  binaries = [
+    # "bfacpievt"
+    # "bfbootmgr"
+    # "bfcfg"
+    # "bfcpu-freq"
+    # "bfdracut"
+    # "bffamily"
+    # "bfgrubcheck"
+    # "bfhcafw"
+    # "bfinst"
+    # "bfpxe"
+    # "bfrec"
+    "bfrshlog"
+    # "bfsbdump"
+    # "bfsbkeys"
+    # "bfsbverify"
+    # "bfver"
+    # "bfvcheck"
+    "mlx-mkbfb"
+    "bfup"
+  ];
+in
+stdenv.mkDerivation rec {
+  pname = "bfscripts";
+  version = "unstable-2023-05-15";
+
+  src = fetchFromGitHub {
+    owner = "Mellanox";
+    repo = pname;
+    rev = "1da79f3ece7cdf99b2571c00e8b14d2e112504a4";
+    hash = "sha256-pTubrnZKEFmtAj/omycFYeYwrCog39zBDEszoCrsQNQ=";
+  };
+
+  buildInputs = [
+    python3
+  ];
+
+  installPhase = ''
+    ${lib.concatStringsSep "\n" (map (b: "install -D ${b} $out/bin/${b}") binaries)}
+  '';
+
+  meta = with lib;
+    {
+      description = "Collection of scripts used for BlueField SoC system management";
+      homepage = "https://github.com/Mellanox/bfscripts";
+      license = licenses.bsd2;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ nikstur ];
+    };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bibtex2html/default.nix b/nixpkgs/pkgs/tools/misc/bibtex2html/default.nix
new file mode 100644
index 000000000000..2e5ebd1e56a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bibtex2html/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, ocaml, perl }:
+
+stdenv.mkDerivation {
+  pname = "bibtex2html";
+  version = "1.99";
+
+  src = fetchurl {
+    url = "https://www.lri.fr/~filliatr/ftp/bibtex2html/bibtex2html-1.99.tar.gz";
+    sha256 = "07gzrs4lfrkvbn48cgn2gn6c7cx3jsanakkrb2irj0gmjzfxl96j";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ ocaml perl ];
+
+  meta = with lib; {
+    description = "A collection of tools for translating from BibTeX to HTML";
+    homepage = "https://www.lri.fr/~filliatr/bibtex2html/";
+    license = licenses.gpl2;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [ maintainers.scolobb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bibtool/default.nix b/nixpkgs/pkgs/tools/misc/bibtool/default.nix
new file mode 100644
index 000000000000..f9de299c87b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bibtool/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "bibtool";
+  version = "2.68";
+
+  src = fetchurl {
+    url = "http://www.gerd-neugebauer.de/software/TeX/BibTool/BibTool-${version}.tar.gz";
+    sha256 = "1ymq901ckaysq2n1bplk1064rb2njq9n30pii15w157y0lxcwd3i";
+  };
+
+  # Perl for running test suite.
+  buildInputs = [ perl ];
+
+  installTargets = [ "install" "install.man" ];
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = with lib; {
+    description = "Tool for manipulating BibTeX bibliographies";
+    homepage = "http://www.gerd-neugebauer.de/software/TeX/BibTool/index.en.html";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rycee ];
+    mainProgram = "bibtool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bibutils/default.nix b/nixpkgs/pkgs/tools/misc/bibutils/default.nix
new file mode 100644
index 000000000000..c454e8cfa1d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bibutils/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchurl
+, static ? stdenv.hostPlatform.isStatic
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bibutils";
+  version = "7.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bibutils/bibutils_${version}_src.tgz";
+    sha256 = "sha256-bgKK7x6Kaz5azvCYWEp7tocI81z+dAEbNBwR/qXktcM=";
+  };
+
+  preConfigure = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace lib/Makefile.dynamic \
+      --replace '-Wl,-soname,$(SONAME)' ""
+  '';
+
+  # the configure script is not generated by autoconf
+  # and do not recognize --build/--host cross compilation flags
+  configurePlatforms = [ ];
+
+  configureFlags = [
+    (if static then "--static" else "--dynamic")
+    "--install-dir" "$(out)/bin"
+    "--install-lib" "$(out)/lib"
+  ];
+
+  dontAddPrefix = true;
+
+  makeFlags = [
+    "CC:=$(CC)"
+  ];
+
+  doCheck = true;
+  checkTarget = "test";
+  preCheck = lib.optionalString stdenv.isDarwin ''
+    export DYLD_LIBRARY_PATH=`pwd`/lib
+  '';
+
+  meta = with lib; {
+    description = "Bibliography format interconversion";
+    longDescription = "The bibutils program set interconverts between various bibliography formats using a common MODS-format XML intermediate. For example, one can convert RIS-format files to Bibtex by doing two transformations: RIS->MODS->Bibtex. By using a common intermediate for N formats, only 2N programs are required and not N²-N. These programs operate on the command line and are styled after standard UNIX-like filters.";
+    homepage = "https://sourceforge.net/p/bibutils/home/Bibutils/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.garrison ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/birdfont/default.nix b/nixpkgs/pkgs/tools/misc/birdfont/default.nix
new file mode 100644
index 000000000000..aa8e9ac6a9e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/birdfont/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, pkg-config, python3, xmlbird,
+cairo, gdk-pixbuf, libgee, glib, gtk3, webkitgtk, libnotify, sqlite, vala,
+gobject-introspection, gsettings-desktop-schemas, wrapGAppsHook, autoPatchelfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "birdfont";
+  version = "2.33.3";
+
+  src = fetchurl {
+    url = "https://birdfont.org/releases/${pname}-${version}.tar.xz";
+    sha256 = "sha256-NNw7203BtHhNyyQezb3/EP98cTsu7ABDFBnM5Ms2ePY=";
+  };
+
+  nativeBuildInputs = [ python3 pkg-config vala gobject-introspection wrapGAppsHook autoPatchelfHook ];
+  buildInputs = [ xmlbird libgee cairo gdk-pixbuf glib gtk3 webkitgtk libnotify sqlite gsettings-desktop-schemas ];
+
+  postPatch = ''
+    substituteInPlace install.py \
+      --replace 'platform.version()' '"Nix"'
+
+    patchShebangs .
+  '';
+
+  buildPhase = "./build.py";
+
+  installPhase = "./install.py";
+
+  meta = with lib; {
+    description = "Font editor which can generate fonts in TTF, EOT, SVG and BIRDFONT format";
+    homepage = "https://birdfont.org";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix b/nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix
new file mode 100644
index 000000000000..2fbdbcf777a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, python3, pkg-config, vala, glib, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+  pname = "xmlbird";
+  version = "1.2.15";
+
+  src = fetchurl {
+    url = "https://birdfont.org/${pname}-releases/lib${pname}-${version}.tar.xz";
+    sha256 = "sha256-8GX4ijF+AxaGGFlSxRPOAoUezRG6592jOrifz/mWTRM=";
+  };
+
+  nativeBuildInputs = [ python3 pkg-config vala gobject-introspection ];
+
+  buildInputs = [ glib ];
+
+  postPatch = ''
+    substituteInPlace configure \
+      --replace 'platform.dist()[0]' '"nix"'
+    patchShebangs .
+  '';
+
+  buildPhase = "./build.py";
+
+  installPhase = "./install.py";
+
+  meta = with lib; {
+    description = "XML parser for Vala and C programs";
+    homepage = "https://birdfont.org/xmlbird.php";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bitwise/default.nix b/nixpkgs/pkgs/tools/misc/bitwise/default.nix
new file mode 100644
index 000000000000..a01fa83b3c79
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bitwise/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, readline, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "bitwise";
+  version = "0.50";
+
+  src = fetchFromGitHub {
+    owner = "mellowcandle";
+    repo = "bitwise";
+    rev = "v${version}";
+    sha256 = "sha256-x+ky1X0c0bQZnkNvNNuXN2BoMDtDSCt/8dBAG92jCCQ=";
+  };
+
+  buildInputs = [ ncurses readline ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Terminal based bitwise calculator in curses";
+    homepage = "https://github.com/mellowcandle/bitwise";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.whonore ];
+    platforms = platforms.unix;
+    mainProgram = "bitwise";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bkt/default.nix b/nixpkgs/pkgs/tools/misc/bkt/default.nix
new file mode 100644
index 000000000000..beef0b8412ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bkt/default.nix
@@ -0,0 +1,25 @@
+{ rustPlatform
+, fetchFromGitHub
+, lib
+}: rustPlatform.buildRustPackage rec {
+
+  pname = "bkt";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "dimo414";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-XQK7oZfutqCvFoGzMH5G5zoGvqB8YaXSdrwjS/SVTNU=";
+  };
+
+  cargoHash = "sha256-Pl+a+ZpxaguRloH8R7x4FmYpTwTUwFrYy7AS/5K3L+8=";
+
+  meta = {
+    description = "A subprocess caching utility";
+    homepage = "https://github.com/dimo414/bkt";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.mangoiv ];
+    mainProgram = "bkt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bkyml/default.nix b/nixpkgs/pkgs/tools/misc/bkyml/default.nix
new file mode 100644
index 000000000000..8b930e960e24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bkyml/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "bkyml";
+  version = "1.4.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "01kpx35572mp4xl2fjyvfk39jfgfjcyzymbifk76891kaqkjb7r9";
+  };
+
+  # The pyscaffold is not a runtime dependency but just a python project bootstrapping tool. Thus,
+  # instead of implement this package in nix we remove a dependency on it and fix up the version
+  # of the package, that has been affected by the pyscaffold package dependency removal.
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "['pyscaffold>=3.0a0,<3.1a0'] + " "" \
+      --replace "use_pyscaffold=True"  ""
+    substituteInPlace src/bkyml/skeleton.py --replace \
+        "from bkyml import __version__" \
+        "__version__ = \"${version}\""
+  '';
+
+  # Don't run tests because they are broken when run within
+  # buildPythonApplication for reasons I don't quite understand.
+  doCheck = false;
+
+  pythonImportsCheck = [ "bkyml" ];
+
+  propagatedBuildInputs = [
+    ruamel-yaml
+    setuptools
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/joscha/bkyml";
+    description = "A CLI tool to generate a pipeline.yaml file for Buildkite on the fly";
+    license = licenses.mit;
+    maintainers = with maintainers; [ olebedev ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blacken-docs/default.nix b/nixpkgs/pkgs/tools/misc/blacken-docs/default.nix
new file mode 100644
index 000000000000..434f684b78d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blacken-docs/default.nix
@@ -0,0 +1,39 @@
+{ black
+, fetchFromGitHub
+, lib
+, python3
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "blacken-docs";
+  version = "1.15.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "adamchainz";
+    repo = "blacken-docs";
+    rev = version;
+    hash = "sha256-3FGuFOAHCcybPwujWlh58NWtuF5CebaKTgBWgCGpSL8=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.setuptools
+  ];
+
+  propagatedBuildInputs = [
+    black
+  ];
+
+  nativeCheckInputs = [
+    black
+    python3.pkgs.pytestCheckHook
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/adamchainz/blacken-docs";
+    changelog = "https://github.com/adamchainz/blacken-docs/blob/${src.rev}/CHANGELOG.rst";
+    description = "Run Black on Python code blocks in documentation files";
+    license = licenses.mit;
+    maintainers = with maintainers; [ l0b0 ];
+    mainProgram = "blacken-docs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blahaj/default.nix b/nixpkgs/pkgs/tools/misc/blahaj/default.nix
new file mode 100644
index 000000000000..c0e591515cdf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blahaj/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, crystal
+, fetchFromGitHub
+}:
+
+crystal.buildCrystalPackage rec {
+  pname = "blahaj";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "GeopJr";
+    repo = "BLAHAJ";
+    rev = "v${version}";
+    hash = "sha256-CmMF9jDKUo+c8dYc2UEHKdBDE4dgwExcRS5sSUsUJik=";
+  };
+
+  meta = with lib; {
+    description = "Gay sharks at your local terminal - lolcat-like CLI tool";
+    homepage = "https://blahaj.queer.software";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ aleksana cafkafk ];
+    mainProgram = "blahaj";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blflash/default.nix b/nixpkgs/pkgs/tools/misc/blflash/default.nix
new file mode 100644
index 000000000000..36c1712a6e57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blflash/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "blflash";
+  version = "0.3.5";
+
+  src = fetchFromGitHub {
+    owner = "spacemeowx2";
+    repo = "blflash";
+    rev = "v${version}";
+    hash = "sha256-lv5bUbq5AnZVeR8V0A4pamY9ZIQAhLmvZEr+CRMPcj0=";
+  };
+
+  cargoHash = "sha256-NRBW2rGrtEmmxONTpCM1D+o5HtnLjp175Sq9+aCp7ZE=";
+
+  meta = with lib; {
+    description = "An bl602 serial flasher written in Rust";
+    homepage = "https://github.com/spacemeowx2/blflash";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ _0x4A6F ];
+    mainProgram = "blflash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blink1-tool/default.nix b/nixpkgs/pkgs/tools/misc/blink1-tool/default.nix
new file mode 100644
index 000000000000..df994593d99b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blink1-tool/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "blink1";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "todbot";
+    repo = "blink1-tool";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-xuCjPSQUQ/KOcdsie/ndecUiEt+t46m4eI33PXJoAAY=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "@git submodule update --init" "true"
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ];
+
+  makeFlags = [
+    "GIT_TAG=v${version}"
+    "USBLIB_TYPE=HIDAPI"
+    "HIDAPI_TYPE=LIBUSB"
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Command line client for the blink(1) notification light";
+    homepage = "https://blink1.thingm.com/";
+    license = with licenses; [ cc-by-sa-40 ];
+    maintainers = with maintainers; [ cransom ];
+    platforms = platforms.linux;
+    mainProgram = "blink1-tool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bmap-tools/default.nix b/nixpkgs/pkgs/tools/misc/bmap-tools/default.nix
new file mode 100644
index 000000000000..4bf170ccbc7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bmap-tools/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "bmap-tools";
+  version = "3.6";
+
+  src = fetchFromGitHub {
+    owner = "intel";
+    repo = "bmap-tools";
+    rev = "v${version}";
+    sha256 = "01xzrv5nvd2nvj91lz4x9s91y9825j9pj96z0ap6yvy3w2dgvkkl";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ six ];
+
+  # tests fail only on hydra.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "bmap-related tools";
+    homepage = "https://github.com/intel/bmap-tools";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "bmaptool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bmon/default.nix b/nixpkgs/pkgs/tools/misc/bmon/default.nix
new file mode 100644
index 000000000000..237eb7476da5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bmon/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config, ncurses, libconfuse
+, libnl }:
+
+stdenv.mkDerivation rec {
+  pname = "bmon";
+  version = "4.0";
+
+  src = fetchFromGitHub {
+    owner = "tgraf";
+    repo = "bmon";
+    rev = "v${version}";
+    sha256 = "1ilba872c09mnlvylslv4hqv6c9cz36l76q74rr99jvis1dg69gf";
+  };
+
+  # The source code defines `__unused__`, which is a reserved name
+  # https://github.com/tgraf/bmon/issues/89
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/macports/macports-ports/raw/6d1dd5e9c8fae608bd22f3ede21e576f29c6358c/net/bmon/files/patch-fix__unused.diff";
+      extraPrefix = "";
+      sha256 = "sha256-UYIiJZzipsx9a0xabrKfyj8TWNW7IM77oXnVnSPkQkc=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ ncurses libconfuse ] ++ lib.optional stdenv.isLinux libnl;
+
+  preConfigure = ''
+    # Must be an absolute path
+    export PKG_CONFIG="$(command -v "$PKG_CONFIG")"
+  '';
+
+  meta = with lib; {
+    description = "Network bandwidth monitor";
+    homepage = "https://github.com/tgraf/bmon";
+    # Licensed unter BSD and MIT
+    #  - https://github.com/tgraf/bmon/blob/master/LICENSE.BSD
+    #  - https://github.com/tgraf/bmon/blob/master/LICENSE.MIT
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bjornfor pSub ];
+    mainProgram = "bmon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bogofilter/default.nix b/nixpkgs/pkgs/tools/misc/bogofilter/default.nix
new file mode 100644
index 000000000000..df78108e43e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bogofilter/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchurl
+, flex
+, db
+, makeWrapper
+, pax
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bogofilter";
+  version = "1.2.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bogofilter/bogofilter-${version}.tar.xz";
+    hash = "sha256-MkihNzv/VSxQCDStvqS2yu4EIkUWrlgfslpMam3uieo=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ flex db ];
+
+  doCheck = false; # needs "y" tool
+
+  postInstall = ''
+    wrapProgram "$out/bin/bf_tar" --prefix PATH : "${lib.makeBinPath [ pax ]}"
+  '';
+
+  meta = {
+    homepage = "http://bogofilter.sourceforge.net/";
+    longDescription = ''
+      Bogofilter is a mail filter that classifies mail as spam or ham
+      (non-spam) by a statistical analysis of the message's header and
+      content (body).  The program is able to learn from the user's
+      classifications and corrections.  It is based on a Bayesian
+      filter.
+    '';
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/boltbrowser/default.nix b/nixpkgs/pkgs/tools/misc/boltbrowser/default.nix
new file mode 100644
index 000000000000..f4603ab3b4ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/boltbrowser/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "boltbrowser";
+  version = "2.2";
+
+  src = fetchFromGitHub {
+    owner = "br0xen";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-3t0U1bSJbo3RJZe+PwaUeuzSt23Gs++WRe/uehfa4cA=";
+  };
+
+  vendorHash = "sha256-lLSjAO0sK2zwl+id/e15XWYbLPCa7qK8J6tdvaBMLPs=";
+
+  meta = with lib; {
+    description = "CLI Browser for BoltDB files";
+    homepage = "https://github.com/br0xen/boltbrowser";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "boltbrowser";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bonk/default.nix b/nixpkgs/pkgs/tools/misc/bonk/default.nix
new file mode 100644
index 000000000000..cfd815d66b31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bonk/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bonk";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "elliot40404";
+    repo = "bonk";
+    rev = "v${version}";
+    hash = "sha256-sAMIteNkGRqmE7BQD/TNC01K3eQQTLKuc0jcxHxtKF8=";
+  };
+
+  cargoHash = "sha256-/qBuIG5ETUWMv2iOGpW3/awuhZb35qsBAflNJv3xTUs=";
+
+  meta = {
+    description = "The blazingly fast touch alternative written in Rust";
+    homepage = "https://github.com/elliot40404/bonk";
+    license = lib.licenses.mit;
+    mainProgram = "bonk";
+    maintainers = with lib.maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bootspec/default.nix b/nixpkgs/pkgs/tools/misc/bootspec/default.nix
new file mode 100644
index 000000000000..2ffa6c47ab09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bootspec/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, fetchpatch
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "bootspec";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "DeterminateSystems";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-5IGSMHeL0eKfl7teDejAckYQjc8aeLwfwIQSzQ8YaAg=";
+  };
+
+  patches = [
+    # https://github.com/DeterminateSystems/bootspec/pull/127
+    # Fixes the synthesize tool for aarch64-linux
+    (fetchpatch {
+      name = "aarch64-support.patch";
+      url = "https://github.com/DeterminateSystems/bootspec/commit/1d0e925f360f0199f13422fb7541225fd162fd4f.patch";
+      sha256 = "sha256-wU/jWnOqVBrU2swANdXbQfzRpNd/JIS4cxSyCvixZM0=";
+    })
+
+  ];
+
+  cargoHash = "sha256-eGSKVHjPnHK7WyGkO5LIjocNGHawahYQR3H5Lgk1C9s=";
+
+  meta = with lib; {
+    description = "Implementation of RFC-0125's datatype and synthesis tooling";
+    homepage = "https://github.com/DeterminateSystems/bootspec";
+    license = licenses.mit;
+    maintainers = teams.determinatesystems.members;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bottom-rs/default.nix b/nixpkgs/pkgs/tools/misc/bottom-rs/default.nix
new file mode 100644
index 000000000000..f9a24537676f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bottom-rs/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bottom-rs";
+  version = "1.2.0";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "bottomify";
+    sha256 = "sha256-R1zj+TFXoolonIFa1zJDd7CdrORfzAPlxJoJVYe9xdc=";
+  };
+
+  cargoSha256 = "sha256-7xD65ookkK09XwCBH6fXqmWRYlmvpwAocojBg/dHzUI=";
+
+  meta = with lib; {
+    description = "Fantastic (maybe) CLI for translating between bottom and human-readable text";
+    homepage = "https://github.com/bottom-software-foundation/bottom-rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ winter ];
+    mainProgram = "bottomify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/boxxy/default.nix b/nixpkgs/pkgs/tools/misc/boxxy/default.nix
new file mode 100644
index 000000000000..ac723e959022
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/boxxy/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, oniguruma
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "boxxy";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "queer";
+    repo = "boxxy";
+    rev = "v${version}";
+    hash = "sha256-euIecFMDktL0gDkso83T1qZfVdfYAAC+WBMsfZaarAQ=";
+  };
+
+  cargoHash = "sha256-8aIuMRjZHLlP3x+C9S9WX21/i98RAUvGGwzptzCpRR4=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    oniguruma
+  ];
+
+  env = {
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
+
+  meta = with lib; {
+    description = "Puts bad Linux applications in a box with only their files";
+    homepage = "https://github.com/queer/boxxy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya figsoda ];
+    platforms = platforms.linux;
+    broken = stdenv.isAarch64;
+    mainProgram = "boxxy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/brltty/default.nix b/nixpkgs/pkgs/tools/misc/brltty/default.nix
new file mode 100644
index 000000000000..7b677aff70ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/brltty/default.nix
@@ -0,0 +1,99 @@
+{ lib, stdenv, fetchurl, pkg-config, python3, bluez
+, tcl, acl, kmod, coreutils, shadow, util-linux
+, alsaSupport ? stdenv.isLinux, alsa-lib
+, systemdSupport ? lib.meta.availableOn stdenv.hostPlatform systemd, systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "brltty";
+  version = "6.6";
+
+  src = fetchurl {
+    url = "https://brltty.app/archive/${pname}-${version}.tar.gz";
+    sha256 = "E+j2mb8UTuGx6PkAOt03hQkvf1XvEHxJEuPBT2zMpPw=";
+  };
+
+  nativeBuildInputs = [ pkg-config python3.pkgs.cython python3.pkgs.setuptools tcl ];
+  buildInputs = [ bluez ]
+    ++ lib.optional alsaSupport alsa-lib
+    ++ lib.optional systemdSupport systemd;
+
+  meta = {
+    description = "Access software for a blind person using a braille display";
+    longDescription = ''
+      BRLTTY is a background process (daemon) which provides access to the Linux/Unix
+      console (when in text mode) for a blind person using a refreshable braille display.
+      It drives the braille display, and provides complete screen review functionality.
+      Some speech capability has also been incorporated.
+    '';
+    homepage = "https://brltty.app";
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.bramd ];
+    platforms = lib.platforms.all;
+  };
+
+  makeFlags = [
+    "PYTHON_PREFIX=$(out)"
+    "SYSTEMD_UNITS_DIRECTORY=$(out)/lib/systemd/system"
+    "SYSTEMD_USERS_DIRECTORY=$(out)/lib/sysusers.d"
+    "SYSTEMD_FILES_DIRECTORY=$(out)/lib/tmpfiles.d"
+    "UDEV_PARENT_LOCATION=$(out)/lib"
+    "INSTALL_COMMANDS_DIRECTORY=$(out)/libexec/brltty"
+    "UDEV_RULES_TYPE=all"
+    "POLKIT_POLICY_DIR=$(out)/share/polkit-1/actions"
+    "POLKIT_RULE_DIR=$(out)/share/polkit-1/rules.d"
+    "TCL_DIR=$(out)/lib"
+  ];
+  configureFlags = [
+    "--with-writable-directory=/run/brltty"
+    "--with-updatable-directory=/var/lib/brltty"
+    "--with-api-socket-path=/var/lib/BrlAPI"
+  ];
+  installFlags = [ "install-systemd" "install-udev" "install-polkit" ];
+
+  preConfigure = ''
+    substituteInPlace configure --replace /sbin/ldconfig ldconfig
+
+    # Some script needs a working tclsh shebang
+    patchShebangs .
+
+    # Skip impure operations
+    substituteInPlace Programs/Makefile.in    \
+      --replace install-writable-directory "" \
+      --replace install-apisoc-directory ""   \
+      --replace install-api-key ""
+  '';
+
+  postInstall = ''
+    # Rewrite absolute paths
+    substituteInPlace $out/bin/brltty-mkuser \
+      --replace '/sbin/nologin' '${shadow}/bin/nologin'
+    (
+      cd $out/lib
+      substituteInPlace systemd/system/brltty@.service \
+        --replace '/sbin/modprobe' '${kmod}/bin/modprobe'
+      # Ensure the systemd-wrapper script uses the correct path to the brltty binary
+      sed "/^Environment=\"BRLTTY_EXECUTABLE_ARGUMENTS.*/a Environment=\"BRLTTY_EXECUTABLE_PATH=$out/bin/brltty\"" -i systemd/system/brltty@.service
+      substituteInPlace systemd/system/brltty-device@.service \
+        --replace '/usr/bin/true' '${coreutils}/bin/true'
+      substituteInPlace udev/rules.d/90-brltty-uinput.rules \
+        --replace '/usr/bin/setfacl' '${acl}/bin/setfacl'
+      substituteInPlace udev/rules.d/90-brltty-hid.rules \
+        --replace '/usr/bin/setfacl' '${acl}/bin/setfacl'
+       substituteInPlace tmpfiles.d/brltty.conf \
+        --replace "$out/etc" '/etc'
+
+      # Remove unused commands from udev rules
+      sed '/initctl/d' -i udev/rules.d/90-brltty-usb-generic.rules
+      sed '/initctl/d' -i udev/rules.d/90-brltty-usb-customized.rules
+      # Remove pulse-access group from systemd unit and sysusers
+      substituteInPlace systemd/system/brltty@.service \
+        --replace 'SupplementaryGroups=pulse-access' '# SupplementaryGroups=pulse-access'
+      substituteInPlace sysusers.d/brltty.conf \
+        --replace 'm brltty pulse-access' '# m brltty pulse-access'
+     )
+     substituteInPlace $out/libexec/brltty/systemd-wrapper \
+       --replace 'logger' "${util-linux}/bin/logger" \
+       --replace 'udevadm' "${systemd}/bin/udevadm"
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix b/nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix
new file mode 100644
index 000000000000..087b56c9d1a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix
@@ -0,0 +1,36 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "broadlink-cli";
+  version = "0.18.3";
+
+  # the tools are available as part of the source distribution from GH but
+  # not pypi, so we have to fetch them here.
+  src = fetchFromGitHub {
+    owner  = "mjg59";
+    repo   = "python-broadlink";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-8bSlMA5Nb3hqpVMeHlgb8AkKt5JrfEiyKjobxRBdmNM=";
+  };
+
+  format = "other";
+
+  propagatedBuildInputs = with python3Packages; [
+    broadlink
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin cli/broadlink_{cli,discovery}
+    install -Dm444 -t $out/share/doc/broadlink cli/README.md
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tools for interfacing with Broadlink RM2/3 (Pro) remote controls, A1 sensor platforms and SP2/3 smartplugs";
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (python3Packages.broadlink.meta) homepage license;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/broot/default.nix b/nixpkgs/pkgs/tools/misc/broot/default.nix
new file mode 100644
index 000000000000..17090d28ca93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/broot/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, makeWrapper
+, pkg-config
+, libgit2
+, oniguruma
+, libiconv
+, Foundation
+, Security
+, xorg
+, zlib
+, buildPackages
+, withClipboard ? false
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "broot";
+  version = "1.33.1";
+
+  src = fetchFromGitHub {
+    owner = "Canop";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-k8rBf1kSeumtOHixJR9g90q+u5eIL0584fvTK/Qg/FU=";
+  };
+
+  cargoHash = "sha256-MxWtPc1C+L5ZSPOyXwxzdAWe5WbZiPW+Zfv1P1j73JQ=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [ libgit2 oniguruma xorg.libxcb ] ++ lib.optionals stdenv.isDarwin [
+    Foundation
+    libiconv
+    Security
+    zlib
+  ];
+
+  buildFeatures = lib.optionals withClipboard [ "clipboard" ];
+
+  RUSTONIG_SYSTEM_LIBONIG = true;
+
+  postPatch = ''
+    # Fill the version stub in the man page. We can't fill the date
+    # stub reproducibly.
+    substitute man/page man/broot.1 \
+      --replace "#version" "${version}"
+  '';
+
+  postInstall = lib.optionalString (stdenv.hostPlatform.emulatorAvailable buildPackages) ''
+    # Install shell function for bash.
+    ${stdenv.hostPlatform.emulator buildPackages} $out/bin/broot --print-shell-function bash > br.bash
+    install -Dm0444 -t $out/etc/profile.d br.bash
+
+    # Install shell function for zsh.
+    ${stdenv.hostPlatform.emulator buildPackages} $out/bin/broot --print-shell-function zsh > br.zsh
+    install -Dm0444 br.zsh $out/share/zsh/site-functions/br
+
+    # Install shell function for fish
+    ${stdenv.hostPlatform.emulator buildPackages} $out/bin/broot --print-shell-function fish > br.fish
+    install -Dm0444 -t $out/share/fish/vendor_functions.d br.fish
+
+  '' + ''
+    # install shell completion files
+    OUT_DIR=$releaseDir/build/broot-*/out
+
+    installShellCompletion --bash $OUT_DIR/{br,broot}.bash
+    installShellCompletion --fish $OUT_DIR/{br,broot}.fish
+    installShellCompletion --zsh $OUT_DIR/{_br,_broot}
+
+    installManPage man/broot.1
+
+    # Do not nag users about installing shell integration, since
+    # it is impure.
+    wrapProgram $out/bin/broot \
+      --set BR_INSTALL no
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/broot --version | grep "${version}"
+  '';
+
+  meta = with lib; {
+    description = "An interactive tree view, a fuzzy search, a balanced BFS descent and customizable commands";
+    homepage = "https://dystroy.org/broot/";
+    changelog = "https://github.com/Canop/broot/releases/tag/v${version}";
+    maintainers = with maintainers; [ dywedir ];
+    license = with licenses; [ mit ];
+    mainProgram = "broot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/brotab/default.nix b/nixpkgs/pkgs/tools/misc/brotab/default.nix
new file mode 100644
index 000000000000..9a58c83ae303
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/brotab/default.nix
@@ -0,0 +1,50 @@
+{ lib, fetchFromGitHub, fetchpatch, python }:
+
+python.pkgs.buildPythonApplication rec {
+  pname = "brotab";
+  version = "1.4.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "balta2ar";
+    repo = pname;
+    rev = version;
+    hash = "sha256-HKKjiW++FwjdorqquSCIdi1InE6KbMbFKZFYHBxzg8Q=";
+  };
+
+  patches = [
+    # https://github.com/balta2ar/brotab/pull/102
+    (fetchpatch {
+      name = "remove-unnecessary-pip-import.patch";
+      url = "https://github.com/balta2ar/brotab/commit/825cd48f255c911aabbfb495f6b8fc73f27d3fe5.patch";
+      hash = "sha256-IN28AOLPKPUc3KkxIGFMpZNNXA1+O12NxS+Hl4KMXbg=";
+    })
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    flask
+    psutil
+    requests
+    setuptools
+  ];
+
+  postPatch = ''
+    substituteInPlace requirements/base.txt \
+      --replace "Flask==2.0.2" "Flask>=2.0.2" \
+      --replace "psutil==5.8.0" "psutil>=5.8.0" \
+      --replace "requests==2.24.0" "requests>=2.24.0"
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  nativeCheckInputs = with python.pkgs; [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/balta2ar/brotab";
+    description = "Control your browser's tabs from the command line";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bsp-layout/default.nix b/nixpkgs/pkgs/tools/misc/bsp-layout/default.nix
new file mode 100644
index 000000000000..e0348fb9207e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bsp-layout/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, git
+, bc
+, bspwm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bsp-layout";
+  version = "unstable-2022-06-19";
+
+  src = fetchFromGitHub {
+    owner = "phenax";
+    repo = pname;
+    rev = "9d60fc271454ea1bfca598575207a06d8d172d3e";
+    sha256 = "sha256-7bBVWJdgAnXLWzjQGZxVqhku2rsxX2kMxU4xkI9/DHE=";
+  };
+
+  nativeBuildInputs = [ makeWrapper git bc ];
+  buildInputs = [ bspwm ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    substituteInPlace $out/lib/bsp-layout/layout.sh --replace 'bc ' '${bc}/bin/bc '
+    for layout in tall rtall wide rwide
+    do
+      substituteInPlace "$out/lib/bsp-layout/layouts/$layout.sh" --replace 'bc ' '${bc}/bin/bc '
+    done
+  '';
+
+  meta = with lib; {
+    description = "Manage layouts in bspwm";
+    longDescription = ''
+      bsp-layout is a dynamic layout manager for bspwm, written in bash.
+      It provides layout options to fit most workflows.
+    '';
+    homepage = "https://github.com/phenax/bsp-layout";
+    license = licenses.mit;
+    maintainers = with maintainers; [ totoroot ];
+    platforms = platforms.linux;
+    mainProgram = "bsp-layout";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/btc-rpc-explorer/default.nix b/nixpkgs/pkgs/tools/misc/btc-rpc-explorer/default.nix
new file mode 100644
index 000000000000..9e548d5f3dfd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/btc-rpc-explorer/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, pkg-config
+, python3
+, vips
+}:
+
+buildNpmPackage rec {
+  pname = "btc-rpc-explorer";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "janoside";
+    repo = "btc-rpc-explorer";
+    rev = "v${version}";
+    hash = "sha256-ZGg3jwSl1XyzS9hMa2YqwExhHSNgrsUmSscZtfF2h54=";
+  };
+
+  npmDepsHash = "sha256-9pVjydGaEaHytZqwXv0/kaJAVqlE7zzuTvubBFTkuBg=";
+
+  postPatch = ''
+    ln -s npm-shrinkwrap.json package-lock.json
+  '';
+
+  makeCacheWritable = true;
+
+  nativeBuildInputs = [
+    pkg-config
+    python3
+  ];
+
+  buildInputs = [
+    vips
+  ];
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/janoside/btc-rpc-explorer/blob/${src.rev}/CHANGELOG.md";
+    description = "Database-free, self-hosted Bitcoin explorer, via RPC to Bitcoin Core";
+    homepage = "https://github.com/janoside/btc-rpc-explorer";
+    license = lib.licenses.mit;
+    mainProgram = "btc-rpc-explorer";
+    maintainers = with lib.maintainers; [ d-xo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/btdu/default.nix b/nixpkgs/pkgs/tools/misc/btdu/default.nix
new file mode 100644
index 000000000000..631c542a9f8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/btdu/default.nix
@@ -0,0 +1,93 @@
+{ lib
+, stdenv
+, fetchurl
+, dub
+, ncurses
+, ldc
+, zlib
+, removeReferencesTo
+}:
+
+let
+    _d_ae_ver              = "0.0.3236";
+    _d_btrfs_ver           = "0.0.18";
+    _d_ncurses_ver         = "1.0.0";
+    _d_emsi_containers_ver = "0.9.0";
+in
+stdenv.mkDerivation rec {
+    pname = "btdu";
+    version = "0.5.1";
+
+    srcs = [
+      (fetchurl {
+        url = "https://github.com/CyberShadow/${pname}/archive/v${version}.tar.gz";
+        sha256 = "566269f365811f6db53280fc5476a7fcf34791396ee4e090c150af4280b35ba5";
+      })
+      (fetchurl {
+        url = "https://github.com/CyberShadow/ae/archive/v${_d_ae_ver}.tar.gz";
+        sha256 = "5ea3f0d9d2d13012ce6a1ee1b52d9fdff9dfb1d5cc7ee5d1b04cab1947ed4d36";
+      })
+      (fetchurl {
+        url = "https://github.com/CyberShadow/d-btrfs/archive/v${_d_btrfs_ver}.tar.gz";
+        sha256 = "32af4891d93c7898b0596eefb8297b88d3ed5c14c84a5951943b7b54c7599dbd";
+      })
+      (fetchurl {
+        url = "https://github.com/D-Programming-Deimos/ncurses/archive/v${_d_ncurses_ver}.tar.gz";
+        sha256 = "b5db677b75ebef7a1365ca4ef768f7344a2bc8d07ec223a2ada162f185d0d9c6";
+      })
+      (fetchurl {
+        url = "https://github.com/dlang-community/containers/archive/v${_d_emsi_containers_ver}.tar.gz";
+        sha256 = "5e256b84bbdbd2bd625cba0472ea27a1fde6d673d37a85fe971a20d52874acaa";
+      })
+    ];
+
+    sourceRoot = ".";
+
+    postUnpack = ''
+      mv ae-${_d_ae_ver} "ae"
+    '';
+
+
+    nativeBuildInputs = [ dub ldc ];
+    buildInputs = [ ncurses zlib ];
+
+    configurePhase = ''
+      runHook preConfigure
+      mkdir home
+      HOME="home" dub add-local ae ${_d_ae_ver}
+      HOME="home" dub add-local d-btrfs-${_d_btrfs_ver} ${_d_btrfs_ver}
+      HOME="home" dub add-local ncurses-${_d_ncurses_ver} ${_d_ncurses_ver}
+      HOME="home" dub add-local containers-${_d_emsi_containers_ver} ${_d_emsi_containers_ver}
+      runHook postConfigure
+    '';
+
+    buildPhase = ''
+      runHook preBuild
+      cd ${pname}-${version}
+      HOME="../home" dub --skip-registry=all build -b release
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/bin
+      cp btdu $out/bin/
+      runHook postInstall
+    '';
+
+    postInstall = ''
+      ${removeReferencesTo}/bin/remove-references-to -t ${ldc} $out/bin/btdu
+    '';
+
+    passthru.updateScript = ./update.py;
+
+    meta = with lib; {
+      description = "Sampling disk usage profiler for btrfs";
+      homepage = "https://github.com/CyberShadow/btdu";
+      changelog = "https://github.com/CyberShadow/btdu/releases/tag/v${version}";
+      license = licenses.gpl2Only;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ atila ];
+      mainProgram = "btdu";
+    };
+}
diff --git a/nixpkgs/pkgs/tools/misc/btdu/update.py b/nixpkgs/pkgs/tools/misc/btdu/update.py
new file mode 100755
index 000000000000..aa3b149d733e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/btdu/update.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python -p python39Packages.requests
+
+import requests
+import subprocess
+
+pkgbuild = requests.get('https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=btdu').text
+
+def grabDepVersions(depDict, pkgbuild=pkgbuild):
+    for line in pkgbuild.split('\n'):
+        if depDict["string"] in line:
+            start = len(depDict["string"]) + 1
+            depDict["version"] = line[start:]
+            break
+
+def grabDepHashes(key,pkgbuild=pkgbuild):
+    start = pkgbuild.find(key) + len(key)
+    end = start+64
+    hashes = []
+    for i in range(5):
+        hashes.append(pkgbuild[start:end])
+        start     = pkgbuild.find("'",end+1) + 1
+        end       = start+64
+    return hashes
+
+def findLine(key,derivation):
+    count = 0
+    lines = []
+    for line in derivation:
+        if key in line:
+            lines.append(count)
+        count += 1
+    return lines
+
+def updateVersions(btdu,ae,btrfs,ncurses,containers,derivation):
+    key = "let"
+    line = findLine(key,derivation)[0] + 1
+    derivation[line+0] = f'    _d_ae_ver              = "{ae["version"]}";\n'
+    derivation[line+1] = f'    _d_btrfs_ver           = "{btrfs["version"]}";\n'
+    derivation[line+2] = f'    _d_ncurses_ver         = "{ncurses["version"]}";\n'
+    derivation[line+3] = f'    _d_emsi_containers_ver = "{containers["version"]}";\n'
+
+    key = "version = "
+    line = findLine(key,derivation)[0]
+    derivation[line] = f'    version = "{btdu["version"]}";\n'
+
+    return derivation
+
+def updateHashes(btdu,ae,btrfs,ncurses,containers,derivation):
+    key = "sha256 = "
+    hashLines = findLine(key,derivation)
+    for i in range(len(hashes)):
+        derivation[hashLines[i]] = f'        sha256 = "{hashes[i]}";\n'
+
+    return derivation
+
+if __name__ == "__main__":
+
+    btdu       = {"string": "pkgver"}
+    ae         = {"string": "_d_ae_ver"}
+    btrfs      = {"string": "_d_btrfs_ver"}
+    ncurses    = {"string": "_d_ncurses_ver"}
+    containers = {"string": "_d_emsi_containers_ver"}
+
+    grabDepVersions(btdu)
+    grabDepVersions(ae)
+    grabDepVersions(btrfs)
+    grabDepVersions(ncurses)
+    grabDepVersions(containers)
+
+    hashes = grabDepHashes("sha256sums=('")
+
+    nixpkgs = subprocess.check_output(["git", "rev-parse", "--show-toplevel"]).decode("utf-8").strip('\n')
+    btduFolder = "/pkgs/tools/misc/btdu/"
+    with open(nixpkgs + btduFolder + "default.nix", 'r') as arq:
+        derivation = arq.readlines()
+
+    derivation = updateVersions(btdu,ae,btrfs,ncurses,containers,derivation)
+    derivation = updateHashes(btdu,ae,btrfs,ncurses,containers,derivation)
+
+    with open(nixpkgs + btduFolder + "default.nix", 'w') as arq:
+        arq.writelines(derivation)
diff --git a/nixpkgs/pkgs/tools/misc/btrfs-assistant/default.nix b/nixpkgs/pkgs/tools/misc/btrfs-assistant/default.nix
new file mode 100644
index 000000000000..474a5e5dc5b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/btrfs-assistant/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, bash
+, btrfs-progs
+, cmake
+, coreutils
+, git
+, pkg-config
+, qtbase
+, qtsvg
+, qttools
+, snapper
+, util-linux
+, wrapQtAppsHook
+, enableSnapper ? true
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "btrfs-assistant";
+  version = "1.9";
+
+  src = fetchFromGitLab {
+    owner = "btrfs-assistant";
+    repo = "btrfs-assistant";
+    rev = finalAttrs.version;
+    hash = "sha256-a854WI8f9/G/BRU5rn1FKC6WRZyXNYsUL4p258C8ppw=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    git
+    pkg-config
+  ];
+
+  buildInputs = [
+    btrfs-progs
+    qtbase
+    qtsvg
+    qttools
+  ];
+
+  propagatedBuildInputs = [ wrapQtAppsHook ];
+
+  prePatch = ''
+    substituteInPlace src/util/System.cpp \
+      --replace '/bin/bash' "${lib.getExe bash}"
+  ''
+  + lib.optionalString enableSnapper ''
+    substituteInPlace src/main.cpp \
+      --replace '/usr/bin/snapper' "${lib.getExe snapper}"
+  '';
+
+  postPatch = ''
+    substituteInPlace src/org.btrfs-assistant.pkexec.policy \
+      --replace '/usr/bin' "$out/bin"
+
+    substituteInPlace src/btrfs-assistant \
+      --replace 'btrfs-assistant-bin' "$out/bin/btrfs-assistant-bin"
+
+    substituteInPlace src/btrfs-assistant-launcher \
+      --replace 'btrfs-assistant' "$out/bin/btrfs-assistant"
+  ''
+  + lib.optionalString enableSnapper ''
+    substituteInPlace src/btrfs-assistant.conf \
+      --replace '/usr/bin/snapper' "${lib.getExe snapper}"
+  '';
+
+  qtWrapperArgs =
+    let
+      runtimeDeps = lib.makeBinPath ([
+        coreutils
+        util-linux
+      ]
+      ++ lib.optionals enableSnapper [ snapper ]);
+    in
+    [
+      "--prefix PATH : ${runtimeDeps}"
+    ];
+
+  meta = {
+    description = "A GUI management tool to make managing a Btrfs filesystem easier";
+    homepage = "https://gitlab.com/btrfs-assistant/btrfs-assistant";
+    license = lib.licenses.gpl3Only;
+    mainProgram = "btrfs-assistant-bin";
+    maintainers = with lib.maintainers; [ khaneliman ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/buildtorrent/default.nix b/nixpkgs/pkgs/tools/misc/buildtorrent/default.nix
new file mode 100644
index 000000000000..d9fc90768a98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/buildtorrent/default.nix
@@ -0,0 +1,19 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "buildtorrent";
+  version = "0.8";
+
+  src = fetchurl {
+    url = "https://mathr.co.uk/blog/code/${pname}-${version}.tar.gz";
+    sha256 = "sha256-6OJ2R72ziHOsVw1GwalompKwG7Z/WQidHN0IeE9wUtA=";
+  };
+
+  meta = with lib; {
+    description = "A simple commandline torrent creator";
+    homepage = "https://mathr.co.uk/blog/torrent.html";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    mainProgram = "buildtorrent";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bunnyfetch/default.nix b/nixpkgs/pkgs/tools/misc/bunnyfetch/default.nix
new file mode 100644
index 000000000000..e14fe8244313
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bunnyfetch/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "bunnyfetch";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Rosettea";
+    repo = "bunnyfetch";
+    rev = "v${version}";
+    sha256 = "sha256-6MnjCXc9/8twdf8PHKsVJY1yWYwUf5R01vtQFJbyy7M=";
+  };
+
+  vendorHash = "sha256-w+O1dU8t7uNvdlFnYhCdJCDixpWWZAnj9GrtsCbu9SM=";
+
+  # No upstream tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tiny system info fetch utility";
+    homepage = "https://github.com/Rosettea/bunnyfetch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ devins2518 ];
+    platforms = platforms.linux;
+    mainProgram = "bunnyfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/byobu/default.nix b/nixpkgs/pkgs/tools/misc/byobu/default.nix
new file mode 100644
index 000000000000..efcf679c1994
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/byobu/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchurl, makeWrapper
+, python3, perl, textual-window-manager
+, gettext, vim, bc, screen }:
+
+let
+  pythonEnv = python3.withPackages (ps: with ps; [ snack ]);
+in
+stdenv.mkDerivation rec {
+  version = "5.133";
+  pname = "byobu";
+
+  src = fetchurl {
+    url = "https://launchpad.net/byobu/trunk/${version}/+download/byobu_${version}.orig.tar.gz";
+    sha256 = "0qvmmdnvwqbgbhn5c8asmrmjhclcl029py2d2zvmd7h5ij7s93jd";
+  };
+
+  doCheck = true;
+
+  strictdeps = true;
+  nativeBuildInputs = [ makeWrapper gettext ];
+  buildInputs = [ perl ]; # perl is needed for `lib/byobu/include/*` scripts
+  propagatedBuildInputs = [ textual-window-manager screen ];
+
+  postPatch = ''
+    substituteInPlace usr/bin/byobu-export.in \
+      --replace "gettext" "${gettext}/bin/gettext"
+    substituteInPlace usr/lib/byobu/menu \
+      --replace "gettext" "${gettext}/bin/gettext"
+  '';
+
+  postInstall = ''
+    # Byobu does not compile its po files for some reason
+    for po in po/*.po; do
+      lang=''${po#po/}
+      lang=''${lang%.po}
+      # Path where byobu looks for translations as observed in the source code and strace
+      mkdir -p $out/share/byobu/po/$lang/LC_MESSAGES/
+      msgfmt $po -o $out/share/byobu/po/$lang/LC_MESSAGES/byobu.mo
+    done
+
+    # Override the symlinks otherwise they mess with the wrapping
+    cp --remove-destination $out/bin/byobu $out/bin/byobu-screen
+    cp --remove-destination $out/bin/byobu $out/bin/byobu-tmux
+
+    for i in $out/bin/byobu*; do
+      # We don't use the usual ".$package-wrapped" because arg0 within the shebang scripts
+      # points to the filename and byobu matches against this to know which backend
+      # to start with
+      file=".$(basename $i)"
+      mv $i $out/bin/$file
+      makeWrapper "$out/bin/$file" "$out/bin/$(basename $i)" --argv0 $(basename $i) \
+        --set BYOBU_PATH ${lib.escapeShellArg (lib.makeBinPath [ vim bc ])} \
+        --set BYOBU_PYTHON "${pythonEnv}/bin/python"
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://launchpad.net/byobu/";
+    description = "Text-based window manager and terminal multiplexer";
+
+    longDescription =
+      ''Byobu is a GPLv3 open source text-based window manager and terminal multiplexer.
+        It was originally designed to provide elegant enhancements to the otherwise functional,
+        plain, practical GNU Screen, for the Ubuntu server distribution.
+        Byobu now includes an enhanced profiles, convenient keybindings,
+        configuration utilities, and toggle-able system status notifications for both
+        the GNU Screen window manager and the more modern Tmux terminal multiplexer,
+        and works on most Linux, BSD, and Mac distributions.
+      '';
+
+    license = licenses.gpl3;
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ qknight berbiche ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/caffeine/default.nix b/nixpkgs/pkgs/tools/misc/caffeine/default.nix
new file mode 100644
index 000000000000..6c8995192a14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/caffeine/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, undmg
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "caffeine";
+  version = "1.1.3";
+
+  src = fetchurl {
+    url = "https://github.com/IntelliScape/caffeine/releases/download/${finalAttrs.version}/Caffeine.dmg";
+    hash = "sha256-JA5auDKiXtCvQ67/0dZtxmPf6nwlJdkYwhTWEHmBoDs=";
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ undmg ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    cp -r *.app $out/Applications
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Don't let your Mac fall asleep";
+    homepage = "https://intelliscapesolutions.com/apps/caffeine";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau Enzime ];
+    platforms = [ "x86_64-darwin" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/calamares-nixos-extensions/default.nix b/nixpkgs/pkgs/tools/misc/calamares-nixos-extensions/default.nix
new file mode 100644
index 000000000000..6bca9abeb9f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares-nixos-extensions/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "calamares-nixos-extensions";
+  version = "0.3.14";
+
+  src = fetchFromGitHub {
+    owner = "NixOS";
+    repo = "calamares-nixos-extensions";
+    rev = version;
+    hash = "sha256-wRKZ80yU3WsUkGn5/ft4wDR22s39/WTxTrjFE0/9mlc=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{lib,share}/calamares
+    cp -r modules $out/lib/calamares/
+    cp -r config/* $out/share/calamares/
+    cp -r branding $out/share/calamares/
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Calamares modules for NixOS";
+    homepage = "https://github.com/NixOS/calamares-nixos-extensions";
+    license = with licenses; [ gpl3Plus bsd2 cc-by-40 cc-by-sa-40 cc0 ];
+    maintainers = with maintainers; [ vlinkz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/calamares/default.nix b/nixpkgs/pkgs/tools/misc/calamares/default.nix
new file mode 100644
index 000000000000..6b9b50144708
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/default.nix
@@ -0,0 +1,98 @@
+{ lib, fetchurl, boost, cmake, extra-cmake-modules, kparts, kpmcore, kirigami2
+, kservice, libatasmart, libxcb, yaml-cpp, libpwquality, parted, polkit-qt, python
+, qtbase, qtquickcontrols, qtsvg, qttools, qtwebengine, util-linux, tzdata
+, ckbcomp, xkeyboard_config, mkDerivation
+, nixos-extensions ? false
+}:
+
+mkDerivation rec {
+  pname = "calamares";
+  version = "3.2.62";
+
+  # release including submodule
+  src = fetchurl {
+    url = "https://github.com/calamares/calamares/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-oPvOwqQ4aTdT/BdCIDVhGa1624orGcMXUYqhywJdbdA=";
+  };
+
+  patches = lib.optionals nixos-extensions [
+    # Modifies the users module to only set passwords of user and root
+    # as the users will have already been created in the configuration.nix file
+    ./userjob.patch
+    # Makes calamares search /run/current-system/sw/share/calamares/ for extra configuration files
+    # as by default it only searches /usr/share/calamares/ and /nix/store/<hash>-calamares-<version>/share/calamares/
+    # but calamares-nixos-extensions is not in either of these locations
+    ./nixos-extensions-paths.patch
+    # Uses pkexec within modules in order to run calamares without root permissions as a whole
+    # Also fixes storage check in the welcome module
+    ./nonroot.patch
+    # Adds unfree qml to packagechooserq
+    ./unfreeq.patch
+    # Modifies finished module to add some NixOS resources
+    # Modifies packagechooser module to change the UI
+    ./uimod.patch
+    # Remove options for unsupported partition types
+    ./partitions.patch
+    # Fix setting the kayboard layout on GNOME wayland
+    # By default the module uses the setxkbmap, which will not change the keyboard
+    ./waylandkbd.patch
+    # Change default location where calamares searches for locales
+    ./supportedlocale.patch
+  ];
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+  buildInputs = [
+    boost kparts.dev kpmcore.out kservice.dev kirigami2
+    libatasmart libxcb yaml-cpp libpwquality parted polkit-qt python
+    qtbase qtquickcontrols qtsvg qttools qtwebengine.dev util-linux
+  ];
+
+  cmakeFlags = [
+    "-DPYTHON_LIBRARY=${python}/lib/lib${python.libPrefix}.so"
+    "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}"
+    "-DCMAKE_VERBOSE_MAKEFILE=True"
+    "-DWITH_PYTHONQT:BOOL=ON"
+  ];
+
+  POLKITQT-1_POLICY_FILES_INSTALL_DIR = "$(out)/share/polkit-1/actions";
+
+  postPatch = ''
+    # Run calamares without root. Other patches make it functional as a normal user
+    sed -e "s,pkexec calamares,calamares -D6," \
+        -i calamares.desktop
+
+    sed -e "s,X-AppStream-Ignore=true,&\nStartupWMClass=calamares," \
+        -i calamares.desktop
+
+    # Fix desktop reference with wayland
+    mv calamares.desktop io.calamares.calamares.desktop
+
+    sed -e "s,calamares.desktop,io.calamares.calamares.desktop," \
+        -i CMakeLists.txt
+
+    sed -e "s,/usr/bin/calamares,$out/bin/calamares," \
+        -i com.github.calamares.calamares.policy
+
+    sed -e 's,/usr/share/zoneinfo,${tzdata}/share/zoneinfo,' \
+        -i src/modules/locale/SetTimezoneJob.cpp \
+        -i src/libcalamares/locale/TimeZone.cpp
+
+    sed -e 's,/usr/share/X11/xkb/rules/base.lst,${xkeyboard_config}/share/X11/xkb/rules/base.lst,' \
+        -i src/modules/keyboard/keyboardwidget/keyboardglobal.cpp
+
+    sed -e 's,"ckbcomp","${ckbcomp}/bin/ckbcomp",' \
+        -i src/modules/keyboard/keyboardwidget/keyboardpreview.cpp
+
+    sed "s,\''${POLKITQT-1_POLICY_FILES_INSTALL_DIR},''${out}/share/polkit-1/actions," \
+        -i CMakeLists.txt
+  '';
+
+  meta = with lib; {
+    description = "Distribution-independent installer framework";
+    homepage = "https://calamares.io/";
+    license = with licenses; [ gpl3Plus bsd2 cc0 ];
+    maintainers = with maintainers; [ manveru vlinkz ];
+    platforms = platforms.linux;
+    mainProgram = "calamares";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/calamares/nixos-extensions-paths.patch b/nixpkgs/pkgs/tools/misc/calamares/nixos-extensions-paths.patch
new file mode 100644
index 000000000000..4e0012160e9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/nixos-extensions-paths.patch
@@ -0,0 +1,46 @@
+diff --git a/src/calamares/main.cpp b/src/calamares/main.cpp
+index de709156f..a0b6c5faf 100644
+--- a/src/calamares/main.cpp
++++ b/src/calamares/main.cpp
+@@ -131,6 +132,8 @@ main( int argc, char* argv[] )
+     // TODO: umount anything in /tmp/calamares-... as an emergency save function
+ #endif
+ 
++    CalamaresUtils::setNixosDirs();
++
+     bool is_debug = handle_args( a );
+ 
+ #ifdef WITH_KF5DBus
+diff --git a/src/libcalamares/utils/Dirs.cpp b/src/libcalamares/utils/Dirs.cpp
+index f333d6e64..6118fb412 100644
+--- a/src/libcalamares/utils/Dirs.cpp
++++ b/src/libcalamares/utils/Dirs.cpp
+@@ -115,6 +116,14 @@ setXdgDirs()
+     s_haveExtraDirs = !( s_extraConfigDirs.isEmpty() && s_extraDataDirs.isEmpty() );
+ }
+ 
++void
++setNixosDirs()
++{
++    s_extraConfigDirs << "/run/current-system/sw/share/calamares/";
++    s_extraDataDirs << "/run/current-system/sw/share/calamares/";
++    s_haveExtraDirs = !( s_extraConfigDirs.isEmpty() && s_extraDataDirs.isEmpty() ); 
++}
++
+ QStringList
+ extraConfigDirs()
+ {
+diff --git a/src/libcalamares/utils/Dirs.h b/src/libcalamares/utils/Dirs.h
+index 445cbe1f1..da869d446 100644
+--- a/src/libcalamares/utils/Dirs.h
++++ b/src/libcalamares/utils/Dirs.h
+@@ -50,6 +50,9 @@ DLLEXPORT bool isAppDataDirOverridden();
+ /** @brief Setup extra config and data dirs from the XDG variables.
+  */
+ DLLEXPORT void setXdgDirs();
++/** @brief Setup extra config and data dirs fir NixOS.
++ */
++DLLEXPORT void setNixosDirs();
+ /** @brief Are any extra directories configured? */
+ DLLEXPORT bool haveExtraDirs();
+ /** @brief XDG_CONFIG_DIRS, each guaranteed to end with / */
diff --git a/nixpkgs/pkgs/tools/misc/calamares/nonroot.patch b/nixpkgs/pkgs/tools/misc/calamares/nonroot.patch
new file mode 100644
index 000000000000..7843f45f284c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/nonroot.patch
@@ -0,0 +1,105 @@
+diff --git a/src/libcalamares/utils/Runner.cpp b/src/libcalamares/utils/Runner.cpp
+index c7146c2d7..e165d9a8f 100644
+--- a/src/libcalamares/utils/Runner.cpp
++++ b/src/libcalamares/utils/Runner.cpp
+@@ -140,13 +140,13 @@ Calamares::Utils::Runner::run()
+     }
+     if ( m_location == RunLocation::RunInTarget )
+     {
+-        process.setProgram( "chroot" );
+-        process.setArguments( QStringList { workingDirectory.absolutePath() } << m_command );
++        process.setProgram( "pkexec" );
++        process.setArguments( QStringList { "chroot" } + QStringList { workingDirectory.absolutePath() } << m_command );
+     }
+     else
+     {
+-        process.setProgram( "env" );
+-        process.setArguments( m_command );
++        process.setProgram( "pkexec" );
++        process.setArguments( QStringList { "env" } + m_command );
+     }
+ 
+     if ( m_output )
+diff --git a/src/modules/mount/main.py b/src/modules/mount/main.py
+index a3318d1a0..5fbe202fd 100644
+--- a/src/modules/mount/main.py
++++ b/src/modules/mount/main.py
+@@ -152,7 +152,8 @@ def mount_partition(root_mount_point, partition, partitions):
+ 
+     # Ensure that the created directory has the correct SELinux context on
+     # SELinux-enabled systems.
+-    os.makedirs(mount_point, exist_ok=True)
++    subprocess.check_call(["pkexec", "mkdir", "-p", mount_point])
++
+     try:
+         subprocess.call(['chcon', '--reference=' + raw_mount_point, mount_point])
+     except FileNotFoundError as e:
+@@ -193,13 +194,13 @@ def mount_partition(root_mount_point, partition, partitions):
+         for s in btrfs_subvolumes:
+             if not s["subvolume"]:
+                 continue
+-            os.makedirs(root_mount_point + os.path.dirname(s["subvolume"]), exist_ok=True)
+-            subprocess.check_call(["btrfs", "subvolume", "create",
++            subprocess.check_call(["pkexec", "mkdir", "-p", root_mount_point + os.path.dirname(s["subvolume"])])
++            subprocess.check_call(["pkexec", "btrfs", "subvolume", "create",
+                                    root_mount_point + s["subvolume"]])
+             if s["mountPoint"] == "/":
+                 # insert the root subvolume into global storage
+                 libcalamares.globalstorage.insert("btrfsRootSubvolume", s["subvolume"])
+-        subprocess.check_call(["umount", "-v", root_mount_point])
++        subprocess.check_call(["pkexec", "umount", "-v", root_mount_point])
+ 
+         device = partition["device"]
+ 
+diff --git a/src/modules/welcome/checker/GeneralRequirements.cpp b/src/modules/welcome/checker/GeneralRequirements.cpp
+index ca7219ca4..6ac682ba4 100644
+--- a/src/modules/welcome/checker/GeneralRequirements.cpp
++++ b/src/modules/welcome/checker/GeneralRequirements.cpp
+@@ -371,10 +371,34 @@ GeneralRequirements::checkEnoughStorage( qint64 requiredSpace )
+     cWarning() << "GeneralRequirements is configured without libparted.";
+     return false;
+ #else
+-    return check_big_enough( requiredSpace );
++    return big_enough( requiredSpace );
+ #endif
+ }
+ 
++bool
++GeneralRequirements::big_enough( qint64 requiredSpace )
++{
++    FILE *fpipe;
++    char command[128];
++    snprintf(command, sizeof(command), "lsblk --bytes -no SIZE,TYPE | grep disk | awk '$1 > %llu {print $1}'", requiredSpace);
++    char c = 0;
++
++    if (0 == (fpipe = (FILE*)popen(command, "r")))
++    {
++        cWarning() << "Failed to check storage size.";
++        return false;
++    }
++
++    while (fread(&c, sizeof c, 1, fpipe))
++    {
++        pclose(fpipe);
++        return true;
++    }
++
++    pclose(fpipe);
++
++    return false;
++}
+ 
+ bool
+ GeneralRequirements::checkEnoughRam( qint64 requiredRam )
+diff --git a/src/modules/welcome/checker/GeneralRequirements.h b/src/modules/welcome/checker/GeneralRequirements.h
+index b6646da11..ea27324fa 100644
+--- a/src/modules/welcome/checker/GeneralRequirements.h
++++ b/src/modules/welcome/checker/GeneralRequirements.h
+@@ -36,6 +36,7 @@ private:
+     bool checkHasPower();
+     bool checkHasInternet();
+     bool checkIsRoot();
++    bool big_enough( qint64 requiredSpace );
+ 
+     qreal m_requiredStorageGiB;
+     qreal m_requiredRamGiB;
diff --git a/nixpkgs/pkgs/tools/misc/calamares/partitions.patch b/nixpkgs/pkgs/tools/misc/calamares/partitions.patch
new file mode 100644
index 000000000000..ae3c7961ae64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/partitions.patch
@@ -0,0 +1,28 @@
+diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp
+index c5b17c69e..353b6f964 100644
+--- a/src/modules/partition/gui/CreatePartitionDialog.cpp
++++ b/src/modules/partition/gui/CreatePartitionDialog.cpp
+@@ -107,7 +107,8 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device,
+     {
+         // We need to ensure zfs is added to the list if the zfs module is enabled
+         if ( ( fs->type() == FileSystem::Type::Zfs && Calamares::Settings::instance()->isModuleEnabled( "zfs" ) )
+-             || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) )
++             || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended
++             && fs->type() != FileSystem::Luks && fs->type() != FileSystem::Luks2 && fs->type() != FileSystem::Minix ) )
+         {
+             fsNames << userVisibleFS( fs );  // This is put into the combobox
+             if ( fs->type() == defaultFSType )
+diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.cpp b/src/modules/partition/gui/EditExistingPartitionDialog.cpp
+index 0bc35cabe..3cf8a7fa2 100644
+--- a/src/modules/partition/gui/EditExistingPartitionDialog.cpp
++++ b/src/modules/partition/gui/EditExistingPartitionDialog.cpp
+@@ -95,7 +95,8 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device,
+     {
+         // We need to ensure zfs is added to the list if the zfs module is enabled
+         if ( ( fs->type() == FileSystem::Type::Zfs && Calamares::Settings::instance()->isModuleEnabled( "zfs" ) )
+-             || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) )
++             || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended
++             && fs->type() != FileSystem::Luks && fs->type() != FileSystem::Luks2 && fs->type() != FileSystem::Minix) )
+         {
+             fsNames << userVisibleFS( fs );  // For the combo box
+         }
diff --git a/nixpkgs/pkgs/tools/misc/calamares/supportedlocale.patch b/nixpkgs/pkgs/tools/misc/calamares/supportedlocale.patch
new file mode 100644
index 000000000000..ab161ffdee7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/supportedlocale.patch
@@ -0,0 +1,13 @@
+diff --git a/src/modules/locale/Config.cpp b/src/modules/locale/Config.cpp
+index 2357019a7..75b547430 100644
+--- a/src/modules/locale/Config.cpp
++++ b/src/modules/locale/Config.cpp
+@@ -48,7 +48,7 @@ loadLocales( const QString& localeGenPath )
+     // supported locales. We first try that one, and if it doesn't exist, we fall back
+     // to parsing the lines from locale.gen
+     localeGenLines.clear();
+-    QFile supported( "/usr/share/i18n/SUPPORTED" );
++    QFile supported( "/run/current-system/sw/share/i18n/SUPPORTED" );
+     QByteArray ba;
+ 
+     if ( supported.exists() && supported.open( QIODevice::ReadOnly | QIODevice::Text ) )
diff --git a/nixpkgs/pkgs/tools/misc/calamares/uimod.patch b/nixpkgs/pkgs/tools/misc/calamares/uimod.patch
new file mode 100644
index 000000000000..5a6ec6cdeea2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/uimod.patch
@@ -0,0 +1,85 @@
+diff --git a/src/modules/finished/FinishedPage.cpp b/src/modules/finished/FinishedPage.cpp
+index 6c5f9ad16..24d75e07b 100644
+--- a/src/modules/finished/FinishedPage.cpp
++++ b/src/modules/finished/FinishedPage.cpp
+@@ -71,7 +71,10 @@ FinishedPage::retranslate()
+         {
+             ui->mainText->setText( tr( "<h1>All done.</h1><br/>"
+                                        "%1 has been set up on your computer.<br/>"
+-                                       "You may now start using your new system." )
++                                       "You may now start using your new system.<br/>"
++                                       "You can change every setting later except the bootloader.<br/>"
++                                       "Check the <a href=\"https://nixos.org/manual/nixos/stable/\">manual</a> for instructions on how to install software, upgrade the system or enable services.<br/>"
++                                       "You can find ways to get in touch with the <a href=\"https://nixos.org/community/\">community on the website!</a>")
+                                        .arg( branding->versionedName() ) );
+             ui->restartCheckBox->setToolTip( tr( "<html><head/><body>"
+                                                  "<p>When this box is checked, your system will "
+@@ -84,7 +87,10 @@ FinishedPage::retranslate()
+             ui->mainText->setText( tr( "<h1>All done.</h1><br/>"
+                                        "%1 has been installed on your computer.<br/>"
+                                        "You may now restart into your new system, or continue "
+-                                       "using the %2 Live environment." )
++                                       "using the %2 Live environment.<br/>"
++                                       "You can change every setting later except the bootloader.<br/>"
++                                       "Check the <a href=\"https://nixos.org/manual/nixos/stable/\">manual</a> for instructions on how to install software, upgrade the system or enable services.<br/>"
++                                       "You can find ways to get in touch with the <a href=\"https://nixos.org/community/\">community on the website!</a>")
+                                        .arg( branding->versionedName(), branding->productName() ) );
+             ui->restartCheckBox->setToolTip( tr( "<html><head/><body>"
+                                                  "<p>When this box is checked, your system will "
+diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp
+index 721329c1b..164b9945e 100644
+--- a/src/modules/packagechooser/PackageChooserPage.cpp
++++ b/src/modules/packagechooser/PackageChooserPage.cpp
+@@ -52,6 +52,7 @@ PackageChooserPage::currentChanged( const QModelIndex& index )
+     if ( !index.isValid() || !ui->products->selectionModel()->hasSelection() )
+     {
+         ui->productName->setText( m_introduction.name.get() );
++        ui->productName->setStyleSheet("font-weight: bold");
+         ui->productScreenshot->setPixmap( m_introduction.screenshot );
+         ui->productDescription->setText( m_introduction.description.get() );
+     }
+diff --git a/src/modules/packagechooser/page_package.ui b/src/modules/packagechooser/page_package.ui
+index d021b08b3..fecfa3060 100644
+--- a/src/modules/packagechooser/page_package.ui
++++ b/src/modules/packagechooser/page_package.ui
+@@ -38,19 +38,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
+      </item>
+      <item>
+-      <layout class="QVBoxLayout" name="verticalLayout" stretch="1,30,1">
++      <layout class="QVBoxLayout" name="verticalLayout" stretch="30,1,1">
+-       <item>
+-        <widget class="QLabel" name="productName">
+-         <property name="sizePolicy">
+-          <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+-           <horstretch>0</horstretch>
+-           <verstretch>0</verstretch>
+-          </sizepolicy>
+-         </property>
+-         <property name="text">
+-          <string>Product Name</string>
+-         </property>
+-        </widget>
+-       </item>
+        <item>
+         <widget class="FixedAspectRatioLabel" name="productScreenshot">
+          <property name="sizePolicy">
+@@ -67,6 +54,19 @@ SPDX-License-Identifier: GPL-3.0-or-later
+          </property>
+         </widget>
+        </item>
++       <item>
++        <widget class="QLabel" name="productName">
++         <property name="sizePolicy">
++          <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
++           <horstretch>0</horstretch>
++           <verstretch>0</verstretch>
++          </sizepolicy>
++         </property>
++         <property name="text">
++          <string>Product Name</string>
++         </property>
++        </widget>
++       </item>
+        <item>
+         <widget class="QLabel" name="productDescription">
+          <property name="sizePolicy">
diff --git a/nixpkgs/pkgs/tools/misc/calamares/unfreeq.patch b/nixpkgs/pkgs/tools/misc/calamares/unfreeq.patch
new file mode 100644
index 000000000000..a234113a726e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/unfreeq.patch
@@ -0,0 +1,109 @@
+diff --git a/src/modules/packagechooserq/packagechooserq.qrc b/src/modules/packagechooserq/packagechooserq.qrc
+index 1b892dce1..ee80a934b 100644
+--- a/src/modules/packagechooserq/packagechooserq.qrc
++++ b/src/modules/packagechooserq/packagechooserq.qrc
+@@ -4,5 +4,6 @@
+         <file>images/libreoffice.jpg</file>
+         <file>images/no-selection.png</file>
+         <file>images/plasma.png</file>
++        <file>packagechooserq@unfree.qml</file>
+     </qresource>
+ </RCC>
+diff --git a/src/modules/packagechooserq/packagechooserq@unfree.qml b/src/modules/packagechooserq/packagechooserq@unfree.qml
+new file mode 100644
+index 000000000..cb87d864a
+--- /dev/null
++++ b/src/modules/packagechooserq/packagechooserq@unfree.qml
+@@ -0,0 +1,75 @@
++/* === This file is part of Calamares - <https://calamares.io> ===
++ *
++ *   SPDX-FileCopyrightText: 2021 Anke Boersma <demm@kaosx.us>
++ *   SPDX-License-Identifier: GPL-3.0-or-later
++ *
++ *   Calamares is Free Software: see the License-Identifier above.
++ *
++ */
++
++import io.calamares.core 1.0
++import io.calamares.ui 1.0
++
++import QtQuick 2.15
++import QtQuick.Controls 2.15
++import QtQuick.Layouts 1.3
++
++Item {
++    
++    SystemPalette {
++        id: palette
++        colorGroup: SystemPalette.Active
++    }
++
++    width:  parent.width
++    height: parent.height
++
++    Rectangle {
++        anchors.fill: parent
++        color: palette.window
++
++        ButtonGroup {
++            id: switchGroup
++        }
++
++        Column {
++            id: column
++            anchors.centerIn: parent
++            spacing: 5
++
++            Rectangle {
++                width: 700
++                height: 200
++                color: palette.base
++                radius: 10
++                border.width: 0
++                Text {
++                    color: palette.text
++                    width: 600
++                    height: 150
++                    anchors.centerIn: parent
++                    text: qsTr("NixOS is fully open source, but it also provides software packages with unfree licenses. By default unfree packages are not allowed, but you can enable it here. If you check this box, software installed might have additional End User License Agreements (EULAs) attached. If not enabled, some hardware might not work fully when no suitable open source drivers are available.<br/>")
++                    font.pointSize: 12
++                    wrapMode: Text.WordWrap
++                }
++
++                CheckBox {
++                    id: element2
++                    anchors.horizontalCenter: parent.horizontalCenter
++                    y: 145
++                    text: qsTr("Allow unfree software")
++                    checked: false
++
++                    onCheckedChanged: {
++                        if ( checked ) {
++                            config.packageChoice = "unfree"
++                        } else {
++                            config.packageChoice = "free"
++                        }
++                    }
++                }
++            }
++        }
++    }
++
++}
+diff --git a/src/modules/packagechooserq/unfree.conf b/src/modules/packagechooserq/unfree.conf
+new file mode 100644
+index 000000000..da79a8eac
+--- /dev/null
++++ b/src/modules/packagechooserq/unfree.conf
+@@ -0,0 +1,11 @@
++# SPDX-FileCopyrightText: no
++# SPDX-License-Identifier: CC0-1.0
++#
++---
++qmlLabel:
++    label: "Unfree Software"
++method: legacy
++mode: required
++labels:
++    step: "Unfree Software"
++packageChoice: free
diff --git a/nixpkgs/pkgs/tools/misc/calamares/userjob.patch b/nixpkgs/pkgs/tools/misc/calamares/userjob.patch
new file mode 100644
index 000000000000..a0bfea9bb05a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/userjob.patch
@@ -0,0 +1,31 @@
+diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp
+index eedfd274d..0f3e78848 100644
+--- a/src/modules/users/Config.cpp
++++ b/src/modules/users/Config.cpp
+@@ -972,26 +972,11 @@ Config::createJobs() const
+ 
+     Calamares::Job* j;
+ 
+-    if ( !m_sudoersGroup.isEmpty() )
+-    {
+-        j = new SetupSudoJob( m_sudoersGroup, m_sudoStyle );
+-        jobs.append( Calamares::job_ptr( j ) );
+-    }
+-
+-    j = new SetupGroupsJob( this );
+-    jobs.append( Calamares::job_ptr( j ) );
+-
+-    j = new CreateUserJob( this );
+-    jobs.append( Calamares::job_ptr( j ) );
+-
+     j = new SetPasswordJob( loginName(), userPassword() );
+     jobs.append( Calamares::job_ptr( j ) );
+ 
+     j = new SetPasswordJob( "root", rootPassword() );
+     jobs.append( Calamares::job_ptr( j ) );
+ 
+-    j = new SetHostNameJob( this );
+-    jobs.append( Calamares::job_ptr( j ) );
+-
+     return jobs;
+ }
diff --git a/nixpkgs/pkgs/tools/misc/calamares/waylandkbd.patch b/nixpkgs/pkgs/tools/misc/calamares/waylandkbd.patch
new file mode 100644
index 000000000000..37cddcf4e2af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/waylandkbd.patch
@@ -0,0 +1,25 @@
+diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp
+index 720588810..af0dd1c8d 100644
+--- a/src/modules/keyboard/Config.cpp
++++ b/src/modules/keyboard/Config.cpp
+@@ -219,7 +219,10 @@ Config::xkbApply()
+                                                { m_additionalLayoutInfo.additionalVariant, m_selectedVariant },
+                                                m_additionalLayoutInfo.groupSwitcher ) );
+ 
+-
++        QString xkbmap = QString( "[('xkb','%1\%2'),('xkb','%3\%4')]").arg(
++                m_selectedLayout, ((!m_selectedVariant.isEmpty()) ? "+" + m_selectedVariant : ""),
++                m_additionalLayoutInfo.additionalLayout, ((!m_additionalLayoutInfo.additionalVariant.isEmpty()) ? "+" + m_additionalLayoutInfo.additionalVariant : ""));
++        QProcess::execute( "sh", { "-c", "if command -v gsettings; then gsettings set org.gnome.desktop.input-sources sources \"$0\"; fi", xkbmap });
+         cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant << "(added "
+                  << m_additionalLayoutInfo.additionalLayout << "-" << m_additionalLayoutInfo.additionalVariant
+                  << " since current layout is not ASCII-capable)";
+@@ -227,6 +230,8 @@ Config::xkbApply()
+     else
+     {
+         QProcess::execute( "setxkbmap", xkbmap_layout_args( m_selectedLayout, m_selectedVariant ) );
++        QString xkbmap = QString( "[('xkb','%1\%2')]").arg( m_selectedLayout, ((!m_selectedVariant.isEmpty()) ? "+" + m_selectedVariant : "") );
++        QProcess::execute( "sh", { "-c", "if command -v gsettings; then gsettings set org.gnome.desktop.input-sources sources \"$0\"; fi", xkbmap });
+         cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant;
+     }
+     m_setxkbmapTimer.disconnect( this );
diff --git a/nixpkgs/pkgs/tools/misc/capture/default.nix b/nixpkgs/pkgs/tools/misc/capture/default.nix
new file mode 100644
index 000000000000..be08be4f1436
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/capture/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, slop, ffmpeg, fetchFromGitHub, makeWrapper}:
+
+stdenv.mkDerivation {
+  pname = "capture-unstable";
+  version = "2019-03-10";
+
+  src = fetchFromGitHub {
+    owner = "buhman";
+    repo = "capture";
+    rev  = "80dd9e7195aad5c132badef610f19509f3935b24";
+    sha256 = "0zyyg4mvrny7cc2xgvfip97b6yc75ka5ni39rwls93971jbk83d6";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 src/capture.sh $out/bin/capture
+
+    patchShebangs $out/bin/capture
+    wrapProgram $out/bin/capture \
+      --prefix PATH : '${lib.makeBinPath [ slop ffmpeg ]}'
+  '';
+
+  meta = with lib; {
+    description = "A no bullshit screen capture tool";
+    homepage = "https://github.com/buhman/capture";
+    maintainers = [ maintainers.ar1a ];
+    license = licenses.gpl3Plus;
+    mainProgram = "capture";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/castty/default.nix b/nixpkgs/pkgs/tools/misc/castty/default.nix
new file mode 100644
index 000000000000..86dae729790b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/castty/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, fetchFromGitHub, libsoundio, lame }:
+
+stdenv.mkDerivation {
+  pname = "castty";
+  version = "unstable-2020-11-10";
+
+  src = fetchFromGitHub {
+    owner = "dhobsd";
+    repo = "castty";
+    rev = "333a2bafd96d56cd0bb91577ae5ba0f7d81b3d99";
+    sha256 = "0p84ivwsp8ds4drn0hx2ax04gp0xyq6blj1iqfsmrs4slrajdmqs";
+  };
+
+  buildInputs = [ libsoundio lame ];
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "PREFIX=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "CLI tool to record audio-enabled screencasts of your terminal, for the web";
+    homepage = "https://github.com/dhobsd/castty";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ iblech ];
+    platforms = platforms.unix;
+    mainProgram = "castty";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/catimg/default.nix b/nixpkgs/pkgs/tools/misc/catimg/default.nix
new file mode 100644
index 000000000000..9edfc576837d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/catimg/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake } :
+
+stdenv.mkDerivation rec {
+  pname = "catimg";
+  version = "2.7.0";
+
+  src = fetchFromGitHub {
+    owner = "posva";
+    repo = pname;
+    rev = version;
+    sha256 = "0a2dswbv4xddb2l2d55hc43lzvjwrjs5z9am7v6i0p0mi2fmc89s";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    license = licenses.mit;
+    homepage = "https://github.com/posva/catimg";
+    description = "Insanely fast image printing in your terminal";
+    maintainers = with maintainers; [ ryantm ];
+    platforms = platforms.unix;
+    mainProgram = "catimg";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/cc2538-bsl/default.nix b/nixpkgs/pkgs/tools/misc/cc2538-bsl/default.nix
new file mode 100644
index 000000000000..a4b3c992544a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cc2538-bsl/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3Packages
+}:
+
+python3Packages.buildPythonPackage rec {
+  pname = "cc2538-bsl";
+  version = "2.1-unstable-2023-10-03";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "JelmerT";
+    repo = "cc2538-bsl";
+    rev = "4d64ac633dbaf29d098842c5937ed6eea2fd7c45";
+    hash = "sha256-NX2jPYAz15bSucj/YR5E/0eJy/cbszSrNxyJHRsbXxo=";
+  };
+
+  patches = [
+    (fetchpatch {
+      # fix extras specification in setup.py; https://github.com/JelmerT/cc2538-bsl/pull/143
+      url = "https://github.com/JelmerT/cc2538-bsl/commit/c70f58ec0222357db8020176711d6d45cf24da35.patch";
+      hash = "sha256-Rxm/TRcm87WgRfq60cu0loyrbJmZou09XYR7uhrhhj8=";
+    })
+  ];
+
+  env.SETUPTOOLS_SCM_PRETEND_VERSION = "0.1.dev0+g${lib.substring 0 7 src.rev}";
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    intelhex
+    pyserial
+    python-magic
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+    scripttest
+  ];
+
+  postInstall = ''
+    # Remove .py from binary
+    mv $out/bin/cc2538-bsl.py $out/bin/cc2538-bsl
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/JelmerT/cc2538-bsl";
+    description = "Flash TI SimpleLink chips (CC2538, CC13xx, CC26xx) over serial";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ lorenz ];
+    mainProgram = "cc2538-bsl";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/ccal/default.nix b/nixpkgs/pkgs/tools/misc/ccal/default.nix
new file mode 100644
index 000000000000..e7a01795f0db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ccal/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, lib
+, fetchurl
+, makeWrapper
+, ghostscript_headless  # for ps2pdf binary
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ccal";
+  version = "2.5.3";
+  src = fetchurl {
+    url = "https://ccal.chinesebay.com/${pname}-${version}.tar.gz";
+    sha256 = "sha256-PUy9yfkFzgKrSEBB+79/C3oxmuajUMbBbWNuGlpQ35Y=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "CXX:=$(CXX)" "BINDIR=$(out)/bin" "MANDIR=$(out)/share/man" ];
+  installTargets = [ "install" "install-man" ];
+
+  # ccalpdf depends on a `ps2pdf` binary in PATH
+  postFixup = ''
+    wrapProgram $out/bin/ccalpdf \
+      --prefix PATH : ${lib.makeBinPath [ ghostscript_headless ]}:$out/bin
+  '';
+
+  meta = {
+    homepage = "https://ccal.chinesebay.com/ccal.htm";
+    description = "Command line Chinese calendar viewer, similar to cal";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ sharzy ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ccze/default.nix b/nixpkgs/pkgs/tools/misc/ccze/default.nix
new file mode 100644
index 000000000000..4946fd64d89d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ccze/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, ncurses, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "ccze";
+  version = "0.2.1-2";
+
+  src = fetchFromGitHub {
+    owner = "madhouse";
+    repo = "ccze";
+    rev = "ccze-${version}";
+    hash = "sha256-LVwmbrq78mZcAEuAqjXTqLE5we83H9mcMPtxQx2Tn/c=";
+  };
+
+  nativeBuildInputs = [ autoconf ];
+
+  buildInputs = [ ncurses pcre ];
+
+  preConfigure = ''
+    autoheader
+    autoconf
+  '';
+
+  meta = with lib; {
+    description = "Fast, modular log colorizer";
+    longDescription = ''
+      Fast log colorizer written in C, intended to be a drop-in replacement
+      for the Perl colorize tool.  Includes plugins for a variety of log
+      formats (Apache, Postfix, Procmail, etc.).
+    '';
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ malyn ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cf-terraforming/default.nix b/nixpkgs/pkgs/tools/misc/cf-terraforming/default.nix
new file mode 100644
index 000000000000..d27230906157
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cf-terraforming/default.nix
@@ -0,0 +1,33 @@
+{ buildGoModule, fetchFromGitHub, lib, cf-terraforming, testers }:
+
+buildGoModule rec {
+  pname = "cf-terraforming";
+  version = "0.18.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = "cf-terraforming";
+    rev = "v${version}";
+    sha256 = "sha256-U6xYJWVf1O/DLtC6J3b+DL97QYUW6ObRh/9EKXhi/j4=";
+  };
+
+  vendorHash = "sha256-r5qlnY3gIigjbFUj9ZVY9WTQM4aYNlTv3HHpc2r/+Rw=";
+  ldflags = [ "-X github.com/cloudflare/cf-terraforming/internal/app/cf-terraforming/cmd.versionString=${version}" ];
+
+  # The test suite insists on downloading a binary release of Terraform from
+  # Hashicorp at runtime, which isn't going to work in a nix build
+  doCheck = false;
+
+  passthru.tests = testers.testVersion {
+    package = cf-terraforming;
+    command = "cf-terraforming version";
+  };
+
+  meta = with lib; {
+    description = "A command line utility to facilitate terraforming your existing Cloudflare resources";
+    homepage = "https://github.com/cloudflare/cf-terraforming/";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ benley ];
+    mainProgram = "cf-terraforming";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cfonts/default.nix b/nixpkgs/pkgs/tools/misc/cfonts/default.nix
new file mode 100644
index 000000000000..12d9687c59be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cfonts/default.nix
@@ -0,0 +1,21 @@
+{ lib, rustPlatform, fetchCrate }:
+rustPlatform.buildRustPackage rec {
+  pname = "cfonts";
+  version = "1.1.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-ixxDlHjx5Bi6Wl/kzJ/R7d+jgTDCAti25TV1RlXRPus=";
+  };
+
+  cargoHash = "sha256-NltvO5ACf8TsE9CgC1jAXx04/T/kHSZLxXJ4zhA5DGo=";
+
+  meta = with lib; {
+    homepage = "https://github.com/dominikwilkowski/cfonts";
+    description =
+      "A silly little command line tool for sexy ANSI fonts in the console";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ leifhelm ];
+    mainProgram = "cfonts";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chafa/default.nix b/nixpkgs/pkgs/tools/misc/chafa/default.nix
new file mode 100644
index 000000000000..2ba80d7565d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chafa/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, pkg-config, which
+, libxslt, libxml2, docbook_xml_dtd_412, docbook_xsl, glib, imagemagick
+, Foundation
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.14.0";
+  pname = "chafa";
+
+  src = fetchFromGitHub {
+    owner = "hpjansson";
+    repo = "chafa";
+    rev = version;
+    sha256 = "sha256-7l8+WD5/5uBXVnhwqiEScIEQ1dg0W2zqqZJ2AeKCZRU=";
+  };
+
+  nativeBuildInputs = [ autoconf
+                        automake
+                        libtool
+                        pkg-config
+                        which
+                        libxslt
+                        libxml2
+                        docbook_xml_dtd_412
+                        docbook_xsl
+                      ];
+
+  buildInputs = [ glib imagemagick ]
+    ++ lib.optional stdenv.isDarwin Foundation;
+
+  patches = [ ./xmlcatalog_patch.patch ];
+
+  preConfigure = ''
+    substituteInPlace ./autogen.sh --replace pkg-config '$PKG_CONFIG'
+    NOCONFIGURE=1 ./autogen.sh
+  '';
+
+  configureFlags = [ "--enable-man"
+                     "--with-xml-catalog=${docbook_xml_dtd_412}/xml/dtd/docbook/catalog.xml"
+                   ];
+
+  # https://github.com/NixOS/nixpkgs/pull/240893#issuecomment-1635347507
+  NIX_LDFLAGS = [ "-lwebp" ];
+
+  meta = with lib; {
+    description = "Terminal graphics for the 21st century";
+    homepage = "https://hpjansson.org/chafa/";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.mog ];
+    mainProgram = "chafa";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch b/nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch
new file mode 100644
index 000000000000..6bf988d6117f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch
@@ -0,0 +1,23 @@
+diff --git a/configure.ac b/configure.ac
+index 0055a70..fd4a905 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -111,18 +111,6 @@ AS_IF([ test "$enable_man" != no ], [
+   ])
+ ])
+ 
+-AS_IF([test "$enable_man" != no], [
+-  dnl check for DocBook XSL stylesheets in the local catalog
+-  JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
+-     [DocBook XSL Stylesheets], [have_docbook_style=yes],[have_docbook_style=no])
+-  AS_IF([ test "$have_docbook_style" != yes ], [
+-    AS_IF([ test "$enable_man" = yes ], [
+-      AC_MSG_ERROR([DocBook XSL Stylesheets are required for --enable-man])
+-    ])
+-    enable_man=no
+-  ])
+-])
+-
+ AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
+ 
+ AC_MSG_CHECKING([whether to generate man pages])
diff --git a/nixpkgs/pkgs/tools/misc/changelogger/default.nix b/nixpkgs/pkgs/tools/misc/changelogger/default.nix
new file mode 100644
index 000000000000..bae346ca37c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/changelogger/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "changelogger";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "MarkusFreitag";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XDiO8r1HpdsfBKzFLnsWdxte2EqL1blPH21137fNm5M=";
+  };
+
+  vendorHash = "sha256-E6J+0tZriskBnXdhQOQA240c3z+laXM5honoREjHPfM=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/MarkusFreitag/changelogger/cmd.BuildVersion=${version}"
+    "-X github.com/MarkusFreitag/changelogger/cmd.BuildDate=1970-01-01T00:00:00"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd changelogger \
+      --bash <($out/bin/changelogger completion bash) \
+      --fish <($out/bin/changelogger completion fish) \
+      --zsh <($out/bin/changelogger completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A tool to manage your changelog file in Markdown";
+    homepage = "https://github.com/MarkusFreitag/changelogger";
+    changelog = "https://github.com/MarkusFreitag/changelogger/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tomsiewert ];
+    mainProgram = "changelogger";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/charasay/default.nix b/nixpkgs/pkgs/tools/misc/charasay/default.nix
new file mode 100644
index 000000000000..7e79c6479b40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/charasay/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "charasay";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "latipun7";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7z5+7yrx5X5rdBMNj9oWBZ2IX0s88c1SLhgz2IDDEn8=";
+  };
+
+  cargoHash = "sha256-5htNU8l+amh+C8EL1K4UcXzf5Pbhhjd5RhxrucJoj/M=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = ''
+    rm .cargo/config.toml
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd himalaya \
+      --bash <($out/bin/chara completion --shell bash) \
+      --fish <($out/bin/chara completion --shell fish) \
+      --zsh <($out/bin/chara completion --shell zsh)
+  '';
+
+  meta = with lib; {
+    description = "The future of cowsay - Colorful characters saying something";
+    homepage = "https://github.com/latipun7/charasay";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hmajid2301 ];
+    mainProgram = "chara";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chatgpt-cli/default.nix b/nixpkgs/pkgs/tools/misc/chatgpt-cli/default.nix
new file mode 100644
index 000000000000..b823eb997e84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chatgpt-cli/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+,
+}:
+buildGoModule rec {
+  pname = "chatgpt";
+  version = "1.3.4";
+
+  src = fetchFromGitHub {
+    owner = "j178";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-PwC/LyWGgFdj1aye8A/W9wc78z9mEbvz4DNsB0eHtl0=";
+  };
+
+  vendorHash = "sha256-hmg301m4Zn7BzlOJ6VVySkxwFt7CDT7MS9EH1JqeW/E=";
+
+  subPackages = [ "cmd/chatgpt" ];
+
+  meta = with lib; {
+    description = "Interactive CLI for ChatGPT";
+    homepage = "https://github.com/j178/chatgpt";
+    license = licenses.mit;
+    mainProgram = "chatgpt";
+    maintainers = with maintainers; [ Ruixi-rebirth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/checkpwn/default.nix b/nixpkgs/pkgs/tools/misc/checkpwn/default.nix
new file mode 100644
index 000000000000..994fecc6c4db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/checkpwn/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "checkpwn";
+  version = "0.5.6";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-M0Jb+8rKn4KVuumNSsM6JEbSOoBOFy9mmXiCnUnDgak=";
+  };
+
+  cargoHash = "sha256-G+QWnGf+Zp94EHVnYM3Q/iEhEQMU2O/c4i5ya/dY7K4=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # requires internet access
+  checkFlags = [
+    "--skip=test_cli_"
+  ];
+
+  meta = with lib; {
+    description = "Check Have I Been Pwned and see if it's time for you to change passwords";
+    homepage = "https://github.com/brycx/checkpwn";
+    changelog = "https://github.com/brycx/checkpwn/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "checkpwn";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile b/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile
new file mode 100644
index 000000000000..2b0f5743e5a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem "chef-cli"
diff --git a/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile.lock b/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile.lock
new file mode 100644
index 000000000000..95a301ec0cc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile.lock
@@ -0,0 +1,303 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.8.4)
+      public_suffix (>= 2.0.2, < 6.0)
+    aws-eventstream (1.2.0)
+    aws-partitions (1.749.0)
+    aws-sdk-core (3.171.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.651.0)
+      aws-sigv4 (~> 1.5)
+      jmespath (~> 1, >= 1.6.1)
+    aws-sdk-kms (1.63.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.120.1)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.4)
+    aws-sdk-secretsmanager (1.73.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.5.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+    builder (3.2.4)
+    chef (17.10.0)
+      addressable
+      aws-sdk-s3 (~> 1.91)
+      aws-sdk-secretsmanager (~> 1.46)
+      chef-config (= 17.10.0)
+      chef-utils (= 17.10.0)
+      chef-vault
+      chef-zero (>= 14.0.11)
+      corefoundation (~> 0.3.4)
+      diff-lcs (>= 1.2.4, < 1.6.0, != 1.4.0)
+      erubis (~> 2.7)
+      ffi (>= 1.5.0)
+      ffi-libarchive (~> 1.0, >= 1.0.3)
+      ffi-yajl (~> 2.2)
+      iniparse (~> 1.4)
+      inspec-core (~> 4.23)
+      license-acceptance (>= 1.0.5, < 3)
+      mixlib-archive (>= 0.4, < 2.0)
+      mixlib-authentication (>= 2.1, < 4)
+      mixlib-cli (>= 2.1.1, < 3.0)
+      mixlib-log (>= 2.0.3, < 4.0)
+      mixlib-shellout (>= 3.1.1, < 4.0)
+      net-sftp (>= 2.1.2, < 4.0)
+      ohai (~> 17.0)
+      plist (~> 3.2)
+      proxifier (~> 1.0)
+      syslog-logger (~> 1.6)
+      train-core (~> 3.2, >= 3.2.28)
+      train-winrm (>= 0.2.5)
+      uuidtools (>= 2.1.5, < 3.0)
+      vault (~> 0.16)
+    chef-cli (5.6.8)
+      addressable (>= 2.3.5, < 2.9)
+      chef (>= 16.0)
+      cookbook-omnifetch (~> 0.5)
+      diff-lcs (>= 1.0, < 1.4)
+      ffi-yajl (>= 1.0, < 3.0)
+      license-acceptance (>= 1.0.11, < 3)
+      minitar (~> 0.6)
+      mixlib-cli (>= 1.7, < 3.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      pastel (~> 0.7)
+      solve (> 2.0, < 5.0)
+    chef-config (17.10.0)
+      addressable
+      chef-utils (= 17.10.0)
+      fuzzyurl
+      mixlib-config (>= 2.2.12, < 4.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      tomlrb (~> 1.2)
+    chef-telemetry (1.1.1)
+      chef-config
+      concurrent-ruby (~> 1.0)
+    chef-utils (17.10.0)
+      concurrent-ruby
+    chef-vault (4.1.11)
+    chef-zero (15.0.11)
+      ffi-yajl (~> 2.2)
+      hashie (>= 2.0, < 5.0)
+      mixlib-log (>= 2.0, < 4.0)
+      rack (~> 2.0, >= 2.0.6)
+      uuidtools (~> 2.1)
+      webrick
+    coderay (1.1.3)
+    concurrent-ruby (1.2.2)
+    cookbook-omnifetch (0.12.2)
+      mixlib-archive (>= 0.4, < 2.0)
+    corefoundation (0.3.13)
+      ffi (>= 1.15.0)
+    diff-lcs (1.3)
+    erubi (1.12.0)
+    erubis (2.7.0)
+    faraday (1.4.3)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.1)
+      multipart-post (>= 1.2, < 3)
+      ruby2_keywords (>= 0.0.4)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday_middleware (1.2.0)
+      faraday (~> 1.0)
+    ffi (1.15.5)
+    ffi-libarchive (1.1.3)
+      ffi (~> 1.0)
+    ffi-yajl (2.4.0)
+      libyajl2 (>= 1.2)
+    fuzzyurl (0.9.0)
+    gssapi (1.3.1)
+      ffi (>= 1.0.1)
+    gyoku (1.4.0)
+      builder (>= 2.1.2)
+      rexml (~> 3.0)
+    hashie (4.1.0)
+    httpclient (2.8.3)
+    iniparse (1.5.0)
+    inspec-core (4.56.20)
+      addressable (~> 2.4)
+      chef-telemetry (~> 1.0, >= 1.0.8)
+      faraday (>= 0.9.0, < 1.5)
+      faraday_middleware (~> 1.0)
+      hashie (>= 3.4, < 5.0)
+      license-acceptance (>= 0.2.13, < 3.0)
+      method_source (>= 0.8, < 2.0)
+      mixlib-log (~> 3.0)
+      multipart-post (~> 2.0)
+      parallel (~> 1.9)
+      parslet (>= 1.5, < 2.0)
+      pry (~> 0.13)
+      rspec (>= 3.9, <= 3.11)
+      rspec-its (~> 1.2)
+      rubyzip (>= 1.2.2, < 3.0)
+      semverse (~> 3.0)
+      sslshake (~> 1.2)
+      thor (>= 0.20, < 2.0)
+      tomlrb (>= 1.2, < 2.1)
+      train-core (~> 3.0)
+      tty-prompt (~> 0.17)
+      tty-table (~> 0.10)
+    ipaddress (0.8.3)
+    jmespath (1.6.2)
+    json (2.6.3)
+    libyajl2 (2.1.0)
+    license-acceptance (2.1.13)
+      pastel (~> 0.7)
+      tomlrb (>= 1.2, < 3.0)
+      tty-box (~> 0.6)
+      tty-prompt (~> 0.20)
+    little-plugger (1.1.4)
+    logging (2.3.1)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.14)
+    method_source (1.0.0)
+    minitar (0.9)
+    mixlib-archive (1.1.7)
+      mixlib-log
+    mixlib-authentication (3.0.10)
+    mixlib-cli (2.1.8)
+    mixlib-config (3.0.27)
+      tomlrb
+    mixlib-log (3.0.9)
+    mixlib-shellout (3.2.7)
+      chef-utils
+    molinillo (0.8.0)
+    multi_json (1.15.0)
+    multipart-post (2.3.0)
+    net-scp (4.0.0)
+      net-ssh (>= 2.6.5, < 8.0.0)
+    net-sftp (2.1.2)
+      net-ssh (>= 2.6.5)
+    net-ssh (7.1.0)
+    nori (2.6.0)
+    ohai (17.9.1)
+      chef-config (>= 14.12, < 18)
+      chef-utils (>= 16.0, < 18)
+      ffi (~> 1.9)
+      ffi-yajl (~> 2.2)
+      ipaddress
+      mixlib-cli (>= 1.7.0)
+      mixlib-config (>= 2.0, < 4.0)
+      mixlib-log (>= 2.0.1, < 4.0)
+      mixlib-shellout (~> 3.2, >= 3.2.5)
+      plist (~> 3.1)
+      train-core
+      wmi-lite (~> 1.0)
+    parallel (1.23.0)
+    parslet (1.8.2)
+    pastel (0.8.0)
+      tty-color (~> 0.5)
+    plist (3.7.0)
+    proxifier (1.0.3)
+    pry (0.14.2)
+      coderay (~> 1.1)
+      method_source (~> 1.0)
+    public_suffix (5.0.1)
+    rack (2.2.6.4)
+    rexml (3.2.5)
+    rspec (3.11.0)
+      rspec-core (~> 3.11.0)
+      rspec-expectations (~> 3.11.0)
+      rspec-mocks (~> 3.11.0)
+    rspec-core (3.11.0)
+      rspec-support (~> 3.11.0)
+    rspec-expectations (3.11.1)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.11.0)
+    rspec-its (1.3.0)
+      rspec-core (>= 3.0.0)
+      rspec-expectations (>= 3.0.0)
+    rspec-mocks (3.11.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.11.0)
+    rspec-support (3.11.1)
+    ruby2_keywords (0.0.5)
+    rubyntlm (0.6.3)
+    rubyzip (2.3.2)
+    semverse (3.0.2)
+    solve (4.0.4)
+      molinillo (~> 0.6)
+      semverse (>= 1.1, < 4.0)
+    sslshake (1.3.1)
+    strings (0.2.1)
+      strings-ansi (~> 0.2)
+      unicode-display_width (>= 1.5, < 3.0)
+      unicode_utils (~> 1.4)
+    strings-ansi (0.2.0)
+    syslog-logger (1.6.8)
+    thor (1.2.1)
+    tomlrb (1.3.0)
+    train-core (3.10.7)
+      addressable (~> 2.5)
+      ffi (!= 1.13.0)
+      json (>= 1.8, < 3.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      net-scp (>= 1.2, < 5.0)
+      net-ssh (>= 2.9, < 8.0)
+    train-winrm (0.2.13)
+      winrm (>= 2.3.6, < 3.0)
+      winrm-elevated (~> 1.2.2)
+      winrm-fs (~> 1.0)
+    tty-box (0.7.0)
+      pastel (~> 0.8)
+      strings (~> 0.2.0)
+      tty-cursor (~> 0.7)
+    tty-color (0.6.0)
+    tty-cursor (0.7.1)
+    tty-prompt (0.23.1)
+      pastel (~> 0.8)
+      tty-reader (~> 0.8)
+    tty-reader (0.9.0)
+      tty-cursor (~> 0.7)
+      tty-screen (~> 0.8)
+      wisper (~> 2.0)
+    tty-screen (0.8.1)
+    tty-table (0.12.0)
+      pastel (~> 0.8)
+      strings (~> 0.2.0)
+      tty-screen (~> 0.8)
+    unicode-display_width (2.4.2)
+    unicode_utils (1.4.0)
+    uuidtools (2.2.0)
+    vault (0.17.0)
+      aws-sigv4
+    webrick (1.8.1)
+    winrm (2.3.6)
+      builder (>= 2.1.2)
+      erubi (~> 1.8)
+      gssapi (~> 1.2)
+      gyoku (~> 1.0)
+      httpclient (~> 2.2, >= 2.2.0.2)
+      logging (>= 1.6.1, < 3.0)
+      nori (~> 2.0)
+      rubyntlm (~> 0.6.0, >= 0.6.3)
+    winrm-elevated (1.2.3)
+      erubi (~> 1.8)
+      winrm (~> 2.0)
+      winrm-fs (~> 1.0)
+    winrm-fs (1.3.5)
+      erubi (~> 1.8)
+      logging (>= 1.6.1, < 3.0)
+      rubyzip (~> 2.0)
+      winrm (~> 2.0)
+    wisper (2.0.1)
+    wmi-lite (1.0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  chef-cli!
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/chef-cli/default.nix b/nixpkgs/pkgs/tools/misc/chef-cli/default.nix
new file mode 100644
index 000000000000..af3a60103ca3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chef-cli/default.nix
@@ -0,0 +1,19 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "chef-cli";
+  gemdir = ./.;
+  inherit ruby;
+
+  exes = ["chef-cli"];
+
+  passthru.updateScript = bundlerUpdateScript "chef-cli";
+
+  meta = with lib; {
+    description = "The Chef Infra Client is a powerful agent that applies your configurations on remote Linux, macOS, Windows and cloud-based systems";
+    homepage = "https://chef.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dylanmtaylor ];
+    mainProgram = "chef-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chef-cli/gemset.nix b/nixpkgs/pkgs/tools/misc/chef-cli/gemset.nix
new file mode 100644
index 000000000000..7a99b1851245
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chef-cli/gemset.nix
@@ -0,0 +1,1130 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15s8van7r2ad3dq6i03l3z4hqnvxcq75a3h72kxvf9an53sqma20";
+      type = "gem";
+    };
+    version = "2.8.4";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12n41py8jfxf9p3gy62ikw8n7wd0cmczk3i2fzxb4ms2xvkxv7b0";
+      type = "gem";
+    };
+    version = "1.749.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0732vv8zi67z25fss1sdvqx0vv1ap3w6hz1avxzwznkjp002vj39";
+      type = "gem";
+    };
+    version = "3.171.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v87zi28dfmrv7bv91yfldccnpd63n295siirbz7wqv1rajn8n02";
+      type = "gem";
+    };
+    version = "1.63.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mapdzm97rv22pca1hvvshwsafa12gd2yv2fcy63dfjn5vjjq893";
+      type = "gem";
+    };
+    version = "1.120.1";
+  };
+  aws-sdk-secretsmanager = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1907wr02afyq7vaig3hc858bipz9nmgf3aqb6kpbpxzf0qirf476";
+      type = "gem";
+    };
+    version = "1.73.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11hkna2av47bl0yprgp8k4ya70rc3m2ib5w10fn0piplgkkmhz7m";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  chef = {
+    dependencies = ["addressable" "aws-sdk-s3" "aws-sdk-secretsmanager" "chef-config" "chef-utils" "chef-vault" "chef-zero" "corefoundation" "diff-lcs" "erubis" "ffi" "ffi-libarchive" "ffi-yajl" "iniparse" "inspec-core" "license-acceptance" "mixlib-archive" "mixlib-authentication" "mixlib-cli" "mixlib-log" "mixlib-shellout" "net-sftp" "ohai" "plist" "proxifier" "syslog-logger" "train-core" "train-winrm" "uuidtools" "vault"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vh6hrmglq4vfi5qvv42d9qhygnc5dfz32hrr07v7vbyhbqw8ck";
+      type = "gem";
+    };
+    version = "17.10.0";
+  };
+  chef-cli = {
+    dependencies = ["addressable" "chef" "cookbook-omnifetch" "diff-lcs" "ffi-yajl" "license-acceptance" "minitar" "mixlib-cli" "mixlib-shellout" "pastel" "solve"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r6ig76j2gf9cc6hq1g9bpcyrv2dqki0x51ajsy0spyiinkfnvpx";
+      type = "gem";
+    };
+    version = "5.6.8";
+  };
+  chef-config = {
+    dependencies = ["addressable" "chef-utils" "fuzzyurl" "mixlib-config" "mixlib-shellout" "tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z72pwfb9n9zwjlk5g9mcy0jlmbq5f8mx60973k7fznif5k6zyrd";
+      type = "gem";
+    };
+    version = "17.10.0";
+  };
+  chef-telemetry = {
+    dependencies = ["chef-config" "concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l9icc3nfdj28mip85vf31v5l60qsfqq3a5dscv7jryh1k94y05x";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  chef-utils = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aq212rz8lzv3rxdsgqgmn8ryy168cz3fxminwg5gm1qw1hnjp5m";
+      type = "gem";
+    };
+    version = "17.10.0";
+  };
+  chef-vault = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hnvngygbdpvpflls3png2312y1svh6k9wj7g5i084q4p72qv22i";
+      type = "gem";
+    };
+    version = "4.1.11";
+  };
+  chef-zero = {
+    dependencies = ["ffi-yajl" "hashie" "mixlib-log" "rack" "uuidtools" "webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l20bljvh0imfraxx3mbq08sf9rwxkbl7rl9rsjzfynz53ch2sv5";
+      type = "gem";
+    };
+    version = "15.0.11";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  cookbook-omnifetch = {
+    dependencies = ["mixlib-archive"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gqh66p6fxg438qpvc67s0y7ji9mvan6layyd7w9ljwva1snvy2n";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+  corefoundation = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14rgy3d636l9zy7zmw04j7pjkf3bn41vx7kb265l4zhxrik7gh19";
+      type = "gem";
+    };
+    version = "0.3.13";
+  };
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
+      type = "gem";
+    };
+    version = "1.3";
+  };
+  erubi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08s75vs9cxlc4r1q2bjg4br8g9wc5lc5x5vl0vv4zq5ivxsdpgi7";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  erubis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  faraday = {
+    dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-net_http" "faraday-net_http_persistent" "multipart-post" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zmdsl6n05khwwq8gjssmfca0ifz6q82wwghf1qyzbxxjdna5mly";
+      type = "gem";
+    };
+    version = "1.4.3";
+  };
+  faraday-em_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-em_synchrony = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-net_http_persistent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bw8mfh4yin2xk7138rg3fhb2p5g2dlmdma88k82psah9mbmvlfy";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  ffi-libarchive = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gyxnsy5fm2pnqph0dhaivmn1pws9xwnb3wjqpx097m06lh1igj1";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  ffi-yajl = {
+    dependencies = ["libyajl2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y2yg9ls3v9rjdq6pmdn57w43xhrf8rrg44s9pfsc2i8jdmmhizz";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  fuzzyurl = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03qchs33vfwbsv5awxg3acfmlcrf5xbhnbrc83fdpamwya0glbjl";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  gssapi = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qdfhj12aq8v0y961v4xv96a1y2z80h3xhvzrs9vsfgf884g6765";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  gyoku = {
+    dependencies = ["builder" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kd2q59xpm39hpvmmvyi6g3f1fr05xjbnxwkrdqz4xy7hirqi79q";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  hashie = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02bsx12ihl78x0vdm37byp78jjw2ff6035y7rrmbd90qxjwxr43q";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  iniparse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wb1qy4i2xrrd92dc34pi7q7ibrjpapzk9y465v0n9caiplnb89n";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  inspec-core = {
+    dependencies = ["addressable" "chef-telemetry" "faraday" "faraday_middleware" "hashie" "license-acceptance" "method_source" "mixlib-log" "multipart-post" "parallel" "parslet" "pry" "rspec" "rspec-its" "rubyzip" "semverse" "sslshake" "thor" "tomlrb" "train-core" "tty-prompt" "tty-table"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mvngxv6v080z8is3clnkdrm499l2syqdd0nhc1gbnq4lwlh6ivy";
+      type = "gem";
+    };
+    version = "4.56.20";
+  };
+  ipaddress = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45";
+      type = "gem";
+    };
+    version = "0.8.3";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  libyajl2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vx0mv0bbcy0qh3ik08b42vrq4kw1zg51121r18c0vvp4p3zcpda";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  license-acceptance = {
+    dependencies = ["pastel" "tomlrb" "tty-box" "tty-prompt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12h5a3j57h50xkfpdz9gr42k0v8g1qxn2pnj5hbbzbmdhydjbjzf";
+      type = "gem";
+    };
+    version = "2.1.13";
+  };
+  little-plugger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zflchpx4g8c110gjdcs540bk5a336nq6nmx379rdg56xw0pjd02";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  minitar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "126mq86x67d1p63acrfka4zx0cx2r0vc93884jggxnrmmnzbxh13";
+      type = "gem";
+    };
+    version = "0.9";
+  };
+  mixlib-archive = {
+    dependencies = ["mixlib-log"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vw0h8ag45608hvm02g43bkfvqy8l3lwk9lqj7b5kzdw6ynvn6a";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  mixlib-authentication = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07m6q8icjjzrv7k2vsjqmviswqv6cigc577hf48liy7b1i4l9gn5";
+      type = "gem";
+    };
+    version = "3.0.10";
+  };
+  mixlib-cli = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ydxlfgd7nnj3rp1y70k4yk96xz5cywldjii2zbnw3sq9pippwp6";
+      type = "gem";
+    };
+    version = "2.1.8";
+  };
+  mixlib-config = {
+    dependencies = ["tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j0122lv2qgccl61njqi0pj6sp6nb85y07gcmw16bwg4k0c8nx6p";
+      type = "gem";
+    };
+    version = "3.0.27";
+  };
+  mixlib-log = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n5dm5iz90ijvjn59jfm8gb8hgsvbj0f1kpzbl38b02z0z4a4v7x";
+      type = "gem";
+    };
+    version = "3.0.9";
+  };
+  mixlib-shellout = {
+    dependencies = ["chef-utils"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zkwg76y96nkh1mv0k92ybq46cr06v1wmic16129ls3yqzwx3xj6";
+      type = "gem";
+    };
+    version = "3.2.7";
+  };
+  molinillo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p846facmh1j5xmbrpgzadflspvk7bzs3sykrh5s7qi4cdqz5gzg";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lgyysrpl50wgcb9ahg29i4p01z0irb3p9lirygma0kkfr5dgk9x";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1si2nq9l6jy5n2zw1q59a5gaji7v9vhy8qx08h4fg368906ysbdk";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  net-sftp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04674g4n6mryjajlcd82af8g8k95la4b1bj712dh71hw1c9vhw1y";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yx0pb5fmziz92bw8qzbh8vf20lr56nd3s6q8h0gsgr307lki687";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  ohai = {
+    dependencies = ["chef-config" "chef-utils" "ffi" "ffi-yajl" "ipaddress" "mixlib-cli" "mixlib-config" "mixlib-log" "mixlib-shellout" "plist" "train-core" "wmi-lite"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ff5z3nzqk8ry32qiqfrr0zgm5vyaf21sj225faz8wqmxjvklsd2";
+      type = "gem";
+    };
+    version = "17.9.1";
+  };
+  parallel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jcc512l38c0c163ni3jgskvq1vc3mr8ly5pvjijzwvfml9lf597";
+      type = "gem";
+    };
+    version = "1.23.0";
+  };
+  parslet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12nrzfwjphjlakb9pmpj70hgjwgzvnr8i1zfzddifgyd44vspl88";
+      type = "gem";
+    };
+    version = "1.8.2";
+  };
+  pastel = {
+    dependencies = ["tty-color"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xash2gj08dfjvq4hy6l1z22s5v30fhizwgs10d6nviggpxsj7a8";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  plist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wzhnbzraz60paxhm48c50fp9xi7cqka4gfhxmiq43mhgh5ajg3h";
+      type = "gem";
+    };
+    version = "3.7.0";
+  };
+  proxifier = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1abzlg39cfji1nx3i8kmb5k3anr2rd392yg2icms24wkqz9g9zj0";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k9kqkd9nps1w1r1rb7wjr31hqzkka2bhi8b518x78dcxppm9zn4";
+      type = "gem";
+    };
+    version = "0.14.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hz0bx2qs2pwb0bwazzsah03ilpf3aai8b7lk7s35jsfzwbkjq35";
+      type = "gem";
+    };
+    version = "5.0.1";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qgwkcb8kxns8d5187cxjaxf18b7dmg9gh6cr9c1125m0bj2pnfk";
+      type = "gem";
+    };
+    version = "2.2.6.4";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19dyb6rcvgi9j2mksd29wfdhfdyzqk7yjhy1ai77559hbhpg61w9";
+      type = "gem";
+    };
+    version = "3.11.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "118hkfw9b11hvvalr7qlylwal5h8dihagm9xg7k4gskg7587hca6";
+      type = "gem";
+    };
+    version = "3.11.0";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l1bzk6a68i1b2qix83vs40r0pbjawv67hixiq2qxsja19bbq3bc";
+      type = "gem";
+    };
+    version = "3.11.1";
+  };
+  rspec-its = {
+    dependencies = ["rspec-core" "rspec-expectations"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zafd70gxly5i0s00nky14sj2n92dnj3xpj83ysl3c2wx0119ad";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vsqp9dij2rj9aapcn3sz7qzw0d8ln7x9p46h9rzd3jzb7his9kk";
+      type = "gem";
+    };
+    version = "3.11.2";
+  };
+  rspec-support = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c01iicvrjk6vv744jgh0y4kk9d0kg2rd2ihdyzvg5p06xm2fpzq";
+      type = "gem";
+    };
+    version = "3.11.1";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b8hczk8hysv53ncsqzx4q6kma5gy5lqc7s5yx8h64x3vdb18cjv";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  semverse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrh6p0756n3gjnk6am1cc4kmw6wzzd02hcajj27rlsqg3p6lwn9";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  solve = {
+    dependencies = ["molinillo" "semverse"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "059lrsf40rl5kclp1w8pb0fzz5sv8aikg073cwcvn5mndk14ayky";
+      type = "gem";
+    };
+    version = "4.0.4";
+  };
+  sslshake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r3ifksx8a05yqhv7nc4cwan8bwmxgq5kyv7q7hy2h9lv5zcjs8h";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  strings = {
+    dependencies = ["strings-ansi" "unicode-display_width" "unicode_utils"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yynb0qhhhplmpzavfrrlwdnd1rh7rkwzcs4xf0mpy2wr6rr6clk";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  strings-ansi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "120wa6yjc63b84lprglc52f40hx3fx920n4dmv14rad41rv2s9lh";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  syslog-logger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14y20phq1khdla4z9wvf98k7j3x6n0rjgs4f7vb0xlf7h53g6hbm";
+      type = "gem";
+    };
+    version = "1.6.8";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  tomlrb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00x5y9h4fbvrv4xrjk4cqlkm4vq8gv73ax4alj3ac2x77zsnnrk8";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  train-core = {
+    dependencies = ["addressable" "ffi" "json" "mixlib-shellout" "net-scp" "net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f0yxh5mpr7rdn3660jf5iwc3rhv4l82dd9mhcrm6v85901rvj9c";
+      type = "gem";
+    };
+    version = "3.10.7";
+  };
+  train-winrm = {
+    dependencies = ["winrm" "winrm-elevated" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07haiwh7jcg00mmiarj5g7k9kclq40yqd4j4r3c01qn2cq1sw2xb";
+      type = "gem";
+    };
+    version = "0.2.13";
+  };
+  tty-box = {
+    dependencies = ["pastel" "strings" "tty-cursor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12yzhl3s165fl8pkfln6mi6mfy3vg7p63r3dvcgqfhyzq6h57x0p";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  tty-color = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0aik4kmhwwrmkysha7qibi2nyzb4c8kp42bd5vxnf8sf7b53g73g";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  tty-prompt = {
+    dependencies = ["pastel" "tty-reader"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1j4y8ik82azjxshgd4i1v4wwhsv3g9cngpygxqkkz69qaa8cxnzw";
+      type = "gem";
+    };
+    version = "0.23.1";
+  };
+  tty-reader = {
+    dependencies = ["tty-cursor" "tty-screen" "wisper"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cf2k7w7d84hshg4kzrjvk9pkyc2g1m3nx2n1rpmdcf0hp4p4af6";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  tty-screen = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18jr6s1cg8yb26wzkqa6874q0z93rq0y5aw092kdqazk71y6a235";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  tty-table = {
+    dependencies = ["pastel" "strings" "tty-screen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fcrbfb0hjd9vkkazkksri93dv9wgs2hp6p1xwb1lp43a13pmhpx";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gi82k102q7bkmfi7ggn9ciypn897ylln1jk9q67kjhr39fj043a";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+  unicode_utils = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h1a5yvrxzlf0lxxa1ya31jcizslf774arnsd89vgdhk4g7x08mr";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  uuidtools = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s8h35ia80p919kidb66nfp8904rhdmn41z9ghsx4ihp2ild3bn4";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  vault = {
+    dependencies = ["aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aanqvdppvqwd8z7iqpx01izm65kfx9f92j1y9g1ixirzc086jxg";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qm7s0gr2pmfcl7dxrmq38asaza4w0i2n9my4yzs499j731wh8r";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  winrm = {
+    dependencies = ["builder" "erubi" "gssapi" "gyoku" "httpclient" "logging" "nori" "rubyntlm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nxf6a47d1xf1nvi7rbfbzjyyjhz0iakrnrsr2hj6y24a381sd8i";
+      type = "gem";
+    };
+    version = "2.3.6";
+  };
+  winrm-elevated = {
+    dependencies = ["erubi" "winrm" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lmlaii8qapn84wxdg5d82gbailracgk67d0qsnbdnffcg8kswzd";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  winrm-fs = {
+    dependencies = ["erubi" "logging" "rubyzip" "winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gb91k6s1yjqw387x4w1nkpnxblq3pjdqckayl0qvz5n3ygdsb0d";
+      type = "gem";
+    };
+    version = "1.3.5";
+  };
+  wisper = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rpsi0ziy78cj82sbyyywby4d0aw0a5q84v65qd28vqn79fbq5yf";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  wmi-lite = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nnx4xz8g40dpi3ccqk5blj1ck06ydx09f9diksn1ghd8yxzavhi";
+      type = "gem";
+    };
+    version = "1.0.7";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chelf/default.nix b/nixpkgs/pkgs/tools/misc/chelf/default.nix
new file mode 100644
index 000000000000..7dd84eba1e44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chelf/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "chelf";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "Gottox";
+    repo = "chelf";
+    rev = "v${version}";
+    sha256 = "0xwd84aynyqsi2kcndbff176vmhrak3jmn3lfcwya59653pppjr6";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv chelf $out/bin/chelf
+  '';
+
+  meta = with lib; {
+    description = "change or display the stack size of an ELF binary";
+    homepage = "https://github.com/Gottox/chelf";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "chelf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chezmoi/default.nix b/nixpkgs/pkgs/tools/misc/chezmoi/default.nix
new file mode 100644
index 000000000000..e1360c96ae49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chezmoi/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "chezmoi";
+  version = "2.46.1";
+
+  src = fetchFromGitHub {
+    owner = "twpayne";
+    repo = "chezmoi";
+    rev = "v${version}";
+    hash = "sha256-RMhYgmNN2SPBU33ZzR6ZK7ElVlT9ZM/8QOS7k/NOBSY=";
+  };
+
+  vendorHash = "sha256-C3aRKluMIZ6X7VHwC1xitG/gLJE8qcbbskxsgsXvzuA=";
+
+  doCheck = false;
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}" "-X main.builtBy=nixpkgs"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --bash --name chezmoi.bash completions/chezmoi-completion.bash
+    installShellCompletion --fish completions/chezmoi.fish
+    installShellCompletion --zsh completions/chezmoi.zsh
+  '';
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    homepage = "https://www.chezmoi.io/";
+    description = "Manage your dotfiles across multiple machines, securely";
+    changelog = "https://github.com/twpayne/chezmoi/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jhillyerd ];
+    mainProgram = "chezmoi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chrome-export/default.nix b/nixpkgs/pkgs/tools/misc/chrome-export/default.nix
new file mode 100644
index 000000000000..d3f4878ee691
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chrome-export/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "chrome-export";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "bdesham";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0p1914wfjggjavw7a0dh2nb7z97z3wrkwrpwxkdc2pj5w5lv405m";
+  };
+
+  buildInputs = [ python3 ];
+
+  dontBuild = true;
+  installPhase = ''
+    mkdir -p $out/bin
+    cp export-chrome-bookmarks export-chrome-history $out/bin
+    mkdir -p $out/share/man/man1
+    cp man_pages/*.1 $out/share/man/man1
+  '';
+  doInstallCheck = true;
+  installCheckPhase = ''
+    bash test/run_tests $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Scripts to save Google Chrome's bookmarks and history as HTML bookmarks files";
+    homepage = "https://github.com/bdesham/chrome-export";
+    license = [ licenses.isc ];
+    maintainers = [ maintainers.bdesham ];
+    platforms = python3.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cht.sh/default.nix b/nixpkgs/pkgs/tools/misc/cht.sh/default.nix
new file mode 100644
index 000000000000..b34b1ee4d517
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cht.sh/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv
+, fetchFromGitHub
+, unstableGitUpdater
+, makeWrapper
+, curl
+, ncurses
+, rlwrap
+, xsel
+}:
+
+stdenv.mkDerivation {
+  pname = "cht.sh";
+  version = "unstable-2022-04-18";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchFromGitHub {
+    owner = "chubin";
+    repo = "cheat.sh";
+    rev = "571377f2f79422398a701cb1864487124ec3dcc6";
+    sha256 = "0e9YhYcxU9t0SFeT1TjoRGTM3h1xRC528ae69tvz+a0=";
+  };
+
+  # Fix ".cht.sh-wrapped" in the help message
+  postPatch = "substituteInPlace share/cht.sh.txt --replace '\${0##*/}' cht.sh";
+
+  installPhase = ''
+    install -m755 -D share/cht.sh.txt "$out/bin/cht.sh"
+
+    # install shell completion files
+    mkdir -p $out/share/bash-completion/completions $out/share/zsh/site-functions
+    mv share/bash_completion.txt $out/share/bash-completion/completions/cht.sh
+    cp share/zsh.txt $out/share/zsh/site-functions/_cht
+
+    wrapProgram "$out/bin/cht.sh" \
+      --prefix PATH : "${lib.makeBinPath [ curl rlwrap ncurses xsel ]}"
+  '';
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/chubin/cheat.sh.git";
+  };
+
+  meta = with lib; {
+    description = "CLI client for cheat.sh, a community driven cheat sheet";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz evanjs ];
+    homepage = "https://github.com/chubin/cheat.sh";
+    mainProgram = "cht.sh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cicero-tui/Cargo.lock b/nixpkgs/pkgs/tools/misc/cicero-tui/Cargo.lock
new file mode 100644
index 000000000000..26aa86890a5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cicero-tui/Cargo.lock
@@ -0,0 +1,958 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cc"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cicero"
+version = "0.4.0"
+dependencies = [
+ "clap",
+ "crossterm 0.20.0",
+ "dirs",
+ "freetype-rs",
+ "hex-slice",
+ "scopeguard",
+ "serde",
+ "serde_json",
+ "servo-fontconfig",
+ "toml",
+ "tui",
+ "unic",
+ "walkdir",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f4919d60f26ae233e14233cc39746c8c8bb8cd7b05840ace83604917b51b6c7"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi 0.6.2",
+ "lazy_static",
+ "libc",
+ "mio",
+ "parking_lot 0.10.2",
+ "signal-hook 0.1.17",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ebde6a9dd5e331cd6c6f48253254d117642c31653baa475e394657c59c1f7d"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi 0.8.0",
+ "libc",
+ "mio",
+ "parking_lot 0.11.2",
+ "signal-hook 0.3.10",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2265c3f8e080075d9b6417aa72293fc71662f34b4af2612d8d1b074d29510db"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a6966607622438301997d3dac0d2f6e9a90c68bb6bc1785ea98456ab93c0507"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "dirs"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "expat-sys"
+version = "2.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa"
+dependencies = [
+ "cmake",
+ "pkg-config",
+]
+
+[[package]]
+name = "freetype-rs"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74eadec9d0a5c28c54bb9882e54787275152a4e36ce206b45d7451384e5bf5fb"
+dependencies = [
+ "bitflags",
+ "freetype-sys",
+ "libc",
+]
+
+[[package]]
+name = "freetype-sys"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a"
+dependencies = [
+ "cmake",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex-slice"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5491a308e0214554f07a81d8944abe45f552871c12e3c3c6e7e5d354039a6c4c"
+
+[[package]]
+name = "instant"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.102"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2a5ac8f984bfcf3a823267e5fde638acc3325f6496633a5da6bb6eb2171e103"
+
+[[package]]
+name = "lock_api"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "mio"
+version = "0.7.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16"
+dependencies = [
+ "libc",
+ "log",
+ "miow",
+ "ntapi",
+ "winapi",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e"
+dependencies = [
+ "lock_api 0.3.4",
+ "parking_lot_core 0.7.2",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api 0.4.5",
+ "parking_lot_core 0.8.5",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3"
+dependencies = [
+ "cfg-if 0.1.10",
+ "cloudabi",
+ "libc",
+ "redox_syscall 0.1.57",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+dependencies = [
+ "cfg-if 1.0.0",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.10",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.10",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "serde"
+version = "1.0.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "servo-fontconfig"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c"
+dependencies = [
+ "libc",
+ "servo-fontconfig-sys",
+]
+
+[[package]]
+name = "servo-fontconfig-sys"
+version = "5.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388"
+dependencies = [
+ "expat-sys",
+ "freetype-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c98891d737e271a2954825ef19e46bd16bdb98e2746f2eec4f7a4ef7946efd1"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29fd5867f1c4f2c5be079aee7a2adf1152ebb04a4bc4d341f504b7dece607ed4"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook 0.3.10",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "syn"
+version = "1.0.76"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "toml"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tui"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9533d39bef0ae8f510e8a99d78702e68d1bbf0b98a78ec9740509d287010ae1e"
+dependencies = [
+ "bitflags",
+ "cassowary",
+ "crossterm 0.17.7",
+ "either",
+ "itertools",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "unic"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-bidi",
+ "unic-char",
+ "unic-common",
+ "unic-emoji",
+ "unic-idna",
+ "unic-normal",
+ "unic-segment",
+ "unic-ucd",
+]
+
+[[package]]
+name = "unic-bidi"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "matches",
+ "unic-ucd-bidi",
+]
+
+[[package]]
+name = "unic-char"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-basics",
+ "unic-char-property",
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-basics"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+
+[[package]]
+name = "unic-emoji"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-emoji-char",
+]
+
+[[package]]
+name = "unic-emoji-char"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-idna"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "matches",
+ "unic-idna-mapping",
+ "unic-idna-punycode",
+ "unic-normal",
+ "unic-ucd-bidi",
+ "unic-ucd-normal",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-idna-mapping"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-idna-punycode"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+
+[[package]]
+name = "unic-normal"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-ucd-normal",
+]
+
+[[package]]
+name = "unic-segment"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-ucd-segment",
+]
+
+[[package]]
+name = "unic-ucd"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-ucd-age",
+ "unic-ucd-bidi",
+ "unic-ucd-block",
+ "unic-ucd-case",
+ "unic-ucd-category",
+ "unic-ucd-common",
+ "unic-ucd-hangul",
+ "unic-ucd-ident",
+ "unic-ucd-name",
+ "unic-ucd-name_aliases",
+ "unic-ucd-normal",
+ "unic-ucd-segment",
+ "unic-ucd-unihan",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-age"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-bidi"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-block"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-case"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-category"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "matches",
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-common"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-hangul"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-ident"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-name"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-ucd-hangul",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-name_aliases"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-normal"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-category",
+ "unic-ucd-hangul",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-segment"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-emoji-char",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-unihan"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/nixpkgs/pkgs/tools/misc/cicero-tui/default.nix b/nixpkgs/pkgs/tools/misc/cicero-tui/default.nix
new file mode 100644
index 000000000000..0ab33112a6e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cicero-tui/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, pkg-config
+, expat
+, fontconfig
+, freetype
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cicero-tui";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "eyeplum";
+    repo = "cicero-tui";
+    rev = "v${version}";
+    sha256 = "sha256-2raSkIycXCdT/TSlaQviI6Eql7DONgRVsPP2B2YuW8U=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+  buildInputs = [
+    expat
+    fontconfig
+    freetype
+  ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "unic-0.9.0" = "sha256-ZE4C+rrtmHdqTmenP5c7QGNTW/n7pi8nh7lqLhHgi3w=";
+    };
+  };
+
+  meta = with lib; {
+    description = "Unicode tool with a terminal user interface";
+    homepage = "https://github.com/eyeplum/cicero-tui";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.linux;
+    mainProgram = "cicero";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/citron/default.nix b/nixpkgs/pkgs/tools/misc/citron/default.nix
new file mode 100644
index 000000000000..d40c8c936928
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/citron/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, dbus
+, installShellFiles
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "citron";
+  version = "0.15.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-6wJ4UfiwpV9zFuBR8SYj6eBiRqQitFs7wRe5R51Z3SA=";
+  };
+
+  cargoHash = "sha256-xTmhgE4iHydhZBMrHWqQUcS9KDlZAzW2CmPGpJr40Fw=";
+
+  buildInputs = [ dbus ];
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  postInstall = ''
+    installManPage doc/citron.1
+  '';
+
+  meta = {
+    homepage = "https://git.sr.ht/~grtcdr/citron";
+    description = "System data via on-demand notifications";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ vuimuich ];
+    platforms = lib.platforms.linux;
+    mainProgram = "citron";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ckb-next/default.nix b/nixpkgs/pkgs/tools/misc/ckb-next/default.nix
new file mode 100644
index 000000000000..549cb543af19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ckb-next/default.nix
@@ -0,0 +1,58 @@
+{ lib, wrapQtAppsHook, fetchFromGitHub, substituteAll, udev, stdenv
+, pkg-config, qtbase, cmake, zlib, kmod, libXdmcp, qttools, qtx11extras, libdbusmenu
+, withPulseaudio ? stdenv.isLinux, libpulseaudio, quazip
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.6.0";
+  pname = "ckb-next";
+
+  src = fetchFromGitHub {
+    owner = "ckb-next";
+    repo = "ckb-next";
+    rev = "v${version}";
+    hash = "sha256-G0cvET3wMIi4FlBmaTkdTyYtcdVGzK4X0C2HYZr43eg=";
+  };
+
+  buildInputs = [
+    udev
+    qtbase
+    zlib
+    libXdmcp
+    qttools
+    qtx11extras
+    libdbusmenu
+    quazip
+  ] ++ lib.optional withPulseaudio libpulseaudio;
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    pkg-config
+    cmake
+  ];
+
+  cmakeFlags = [
+    "-DINSTALL_DIR_ANIMATIONS=libexec"
+    "-DUDEV_RULE_DIRECTORY=lib/udev/rules.d"
+    "-DFORCE_INIT_SYSTEM=systemd"
+    "-DDISABLE_UPDATER=1"
+  ];
+
+  patches = [
+    ./install-dirs.patch
+    (substituteAll {
+      name = "ckb-next-modprobe.patch";
+      src = ./modprobe.patch;
+      inherit kmod;
+    })
+  ];
+
+  meta = with lib; {
+    description = "Driver and configuration tool for Corsair keyboards and mice";
+    homepage = "https://github.com/ckb-next/ckb-next";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    mainProgram = "ckb-next";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch b/nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch
new file mode 100644
index 000000000000..05a661c7ffc0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch
@@ -0,0 +1,13 @@
+diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt
+index a04b80c..2969b3b 100644
+--- a/src/daemon/CMakeLists.txt
++++ b/src/daemon/CMakeLists.txt
+@@ -437,7 +437,7 @@ if ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "launchd")
+ elseif ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "systemd")
+     install(
+         FILES "${CMAKE_CURRENT_BINARY_DIR}/service/ckb-next-daemon.service"
+-        DESTINATION "${SYSTEMD_UNIT_INSTALL_DIR}"
++        DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/systemd/system"
+         PERMISSIONS
+         OWNER_READ OWNER_WRITE
+         GROUP_READ
diff --git a/nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch b/nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch
new file mode 100644
index 000000000000..257683e11f67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch
@@ -0,0 +1,26 @@
+diff --git a/src/daemon/input_linux.c b/src/daemon/input_linux.c
+index 933e628..c4f97f2 100644
+--- a/src/daemon/input_linux.c
++++ b/src/daemon/input_linux.c
+@@ -70,7 +70,7 @@ int os_inputopen(usbdevice* kb){
+ 
+     // If not available, load the module
+     if(fd < 0){
+-        if(system("modprobe uinput") != 0) {
++        if(system("@kmod@/bin/modprobe uinput") != 0) {
+             ckb_fatal("Failed to load uinput module");
+             return 1;
+         }
+diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp
+index eeadaf8..87de71f 100644
+--- a/src/gui/mainwindow.cpp
++++ b/src/gui/mainwindow.cpp
+@@ -309,7 +309,7 @@ void MainWindow::updateVersion(){
+ #elif defined(Q_OS_LINUX)
+             if(!(QFileInfo("/dev/uinput").exists() || QFileInfo("/dev/input/uinput").exists())){
+                 QProcess modprobe;
+-                modprobe.start("modprobe", QStringList("uinput"));
++                modprobe.start("@kmod@/bin/modprobe", QStringList("uinput"));
+ 
+                 if(!modprobe.waitForFinished())
+                     qDebug() << "Modprobe error";
diff --git a/nixpkgs/pkgs/tools/misc/clac/default.nix b/nixpkgs/pkgs/tools/misc/clac/default.nix
new file mode 100644
index 000000000000..e87fc0bb97ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clac/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "clac";
+  version = "0.3.3-unstable-2021-09-06";
+
+  src = fetchFromGitHub {
+    owner = "soveran";
+    repo = "clac";
+    rev = "beae8c4bc89912f4cd66bb875585fa471692cd54";
+    sha256 = "XaULDkFF9OZW7Hbh60wbGgvCJ6L+3gZNGQ9uQv3G0zU=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    mkdir -p "$out/share/doc/${pname}"
+    cp README* LICENSE "$out/share/doc/${pname}"
+  '';
+
+  meta = with lib; {
+    description = "Interactive stack-based calculator";
+    homepage = "https://github.com/soveran/clac";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+    mainProgram = "clac";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/claws/default.nix b/nixpkgs/pkgs/tools/misc/claws/default.nix
new file mode 100644
index 000000000000..05231d2b16e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/claws/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "claws";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "thehowl";
+    repo = pname;
+    hash = "sha256-3zzUBeYfu9x3vRGX1DionLnAs1e44tFj8Z1dpVwjdCg=";
+  };
+
+  vendorHash = "sha256-FP+3Rw5IdCahhx9giQrpepMMtF1pWcyjNglrlu9ju0Q=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/thehowl/claws";
+    description = "Interactive command line client for testing websocket servers";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "claws";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clematis/default.nix b/nixpkgs/pkgs/tools/misc/clematis/default.nix
new file mode 100644
index 000000000000..cba0b6cd5f95
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clematis/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "clematis";
+  version = "2022-04-16";
+
+  src = fetchFromGitHub {
+    owner = "TorchedSammy";
+    repo = "clematis";
+    rev = "cbe74da084b9d3f6893f53721c27cd0f3a45fe93";
+    sha256 = "sha256-TjoXHbY0vUQ2rhwdCJ/s/taRd9/MG0P9HaEw2BOIy/s=";
+  };
+
+  vendorHash = "sha256-YKu+7LFUoQwCH//URIswiaqa0rmnWZJvuSn/68G3TUA=";
+
+  meta = with lib; {
+    description = "Discord rich presence for MPRIS music players";
+    homepage = "https://github.com/TorchedSammy/Clematis";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ misterio77 ];
+    mainProgram = "clematis";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clickclack/default.nix b/nixpkgs/pkgs/tools/misc/clickclack/default.nix
new file mode 100644
index 000000000000..884c2ac84bc1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clickclack/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, SDL2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clickclack";
+  version = "0.2.3";
+
+  src = fetchFromSourcehut {
+    owner = "~proycon";
+    repo = "clickclack";
+    rev = version;
+    hash = "sha256-YmlbGEmZgT/30c+mWQzdz4rKc69d75zhoNUA5FdxdMc=";
+  };
+
+  buildInputs = [
+    SDL2
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "A vibration/audio feedback tool to be used with virtual keyboards";
+    homepage = "https://git.sr.ht/~proycon/clickclack";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dotlambda ];
+    mainProgram = "clickclack";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clini/default.nix b/nixpkgs/pkgs/tools/misc/clini/default.nix
new file mode 100644
index 000000000000..95d86e6fd46d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clini/default.nix
@@ -0,0 +1,21 @@
+{ fetchCrate, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "clini";
+  version = "0.1.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-+HnoYFRG7GGef5lV4CUsUzqPzFUzXDajprLu25SCMQo=";
+  };
+
+  cargoHash = "sha256-hOPj3c3WIISRqP/9Kpc/Yh9Z/wfAkHQ/731+BkWElIQ=";
+
+  meta = with lib; {
+    description = "A simple tool to do basic modification of ini files";
+    homepage = "https://github.com/domgreen/clini";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Flakebi ];
+    mainProgram = "clini";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clipboard-jh/default.nix b/nixpkgs/pkgs/tools/misc/clipboard-jh/default.nix
new file mode 100644
index 000000000000..abd52a5d012e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipboard-jh/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libffi
+, pkg-config
+, wayland-protocols
+, wayland
+, xorg
+, darwin
+, nix-update-script
+, alsa-lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clipboard-jh";
+  version = "0.9.0.1";
+
+  src = fetchFromGitHub {
+    owner = "Slackadays";
+    repo = "clipboard";
+    rev = version;
+    hash = "sha256-iILtyURYCshicgAV3MWkgMQsXHe7Unj1A08W7tUMU2o=";
+  };
+
+  postPatch = ''
+    sed -i "/CMAKE_OSX_ARCHITECTURES/d" CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    libffi
+    wayland-protocols
+    wayland
+    xorg.libX11
+    alsa-lib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+  ];
+
+  cmakeBuildType = "MinSizeRel";
+
+  cmakeFlags = [
+    "-Wno-dev"
+    "-DINSTALL_PREFIX=${placeholder "out"}"
+  ];
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    patchelf $out/bin/cb --add-rpath $out/lib
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Cut, copy, and paste anything, anywhere, all from the terminal";
+    homepage = "https://github.com/Slackadays/clipboard";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dit7ya ];
+    platforms = platforms.all;
+    mainProgram = "cb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clipbuzz/default.nix b/nixpkgs/pkgs/tools/misc/clipbuzz/default.nix
new file mode 100644
index 000000000000..9e1e3724b899
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipbuzz/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchzip
+, libX11
+, libXfixes
+, zig_0_11
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "clipbuzz";
+  version = "2.0.1";
+
+  src = fetchzip {
+    url = "https://trong.loang.net/~cnx/clipbuzz/snapshot/clipbuzz-${finalAttrs.version}.tar.gz";
+    hash = "sha256-2//IwthAjGyVSZaXjgpM1pUJGYWZVkrJ6JyrVbzOtr8=";
+  };
+
+  nativeBuildInputs = [ zig_0_11.hook ];
+
+  buildInputs = [
+    libX11
+    libXfixes
+  ];
+
+  meta =  {
+    description = "Buzz on new X11 clipboard events";
+    homepage = "https://trong.loang.net/~cnx/clipbuzz";
+    license = lib.licenses.unlicense;
+    maintainers = [ lib.maintainers.McSinyx ];
+    mainProgram = "clipbuzz";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/clipnotify/default.nix b/nixpkgs/pkgs/tools/misc/clipnotify/default.nix
new file mode 100644
index 000000000000..8f94f974b058
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipnotify/default.nix
@@ -0,0 +1,27 @@
+{ libX11, libXfixes, lib, stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+  pname = "clipnotify";
+  version = "unstable-2018-02-20";
+
+  src = fetchFromGitHub {
+    owner = "cdown";
+    repo = "clipnotify";
+    rev = "9cb223fbe494c5b71678a9eae704c21a97e3bddd";
+    sha256 = "1x9avjq0fgw0svcbw6b6873qnsqxbacls9sipmcv86xia4bxh8dn";
+  };
+
+  buildInputs = [ libX11 libXfixes ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp clipnotify $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Notify on new X clipboard events";
+    inherit (src.meta) homepage;
+    maintainers = with maintainers; [ jb55 ];
+    license = licenses.publicDomain;
+    mainProgram = "clipnotify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clipster/default.nix b/nixpkgs/pkgs/tools/misc/clipster/default.nix
new file mode 100644
index 000000000000..26170d148943
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipster/default.nix
@@ -0,0 +1,52 @@
+{fetchFromGitHub , lib, stdenv, python3, gtk3, libwnck,
+ gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation  rec {
+  pname = "clipster";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "mrichar1";
+    repo = "clipster";
+    rev = version;
+    sha256 = "sha256-MLLkFsBBQtb7RFQN+uoEmuCn5bnbkYsqoyWGZtTCI2U=";
+  };
+
+  pythonEnv = python3.withPackages(ps: with ps; [ pygobject3 ]);
+
+  nativeBuildInputs = [ gobject-introspection ];
+  buildInputs =  [ pythonEnv gtk3 libwnck wrapGAppsHook ];
+
+  installPhase = ''
+    sed -i 's/python/python3/g' clipster
+    mkdir -p $out/bin/
+    cp clipster $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "lightweight python clipboard manager";
+    longDescription = ''
+      Clipster was designed to try to add a good selection of useful features, while avoiding bad design decisions or becoming excessively large.
+      Its feature list includes:
+      - Event driven, rather than polling. More efficient, helps with power management.
+      - Control over when it write to disk, for similar reasons.
+      - Command-line options/config for everything.
+      - No global keybindings - that's the job of a Window Manager
+      - Sensible handling of unusual clipboard events. Some apps (Chrome, Emacs) trigger a clipboard 'update event' for every character you select, rather than just one event when you stop selecting.
+      - Preserves the last item in clipboard after an application closes. (Many apps clear the clipboard on exit).
+      - Minimal dependencies, no complicated build/install requirements.
+      - utf-8 support
+      - Proper handling of embedded newlines and control codes.
+      - Smart matching of urls, emails, regexes. (extract_*)
+      - Option to synchronise the SELECTION and CLIPBOARD clipboards. (sync_selections)
+      - Option to track one or both clipboards. (active_selections)
+      - Option to ignore clipboard updates form certain applications. (filter_classes)
+      - Ability to delete items in clipboard history.
+    '';
+    license = licenses.agpl3;
+    homepage = "https://github.com/mrichar1/clipster";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.magnetophon ];
+    mainProgram = "clipster";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cloc/default.nix b/nixpkgs/pkgs/tools/misc/cloc/default.nix
new file mode 100644
index 000000000000..14c7b2133c71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cloc/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perlPackages }:
+
+let version = "2.00";
+in stdenv.mkDerivation {
+  pname = "cloc";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "AlDanial";
+    repo = "cloc";
+    rev = "v${version}";
+    sha256 = "sha256-GZvrsVuPLg09yOlDmdHNZ0QLXoftgSYMFkn6PLf1/Pw=";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */Unix)
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = with perlPackages; [
+    perl
+    AlgorithmDiff
+    ParallelForkManager
+    RegexpCommon
+  ];
+
+  makeFlags = [ "prefix=" "DESTDIR=$(out)" "INSTALL=install" ];
+
+  postFixup = "wrapProgram $out/bin/cloc --prefix PERL5LIB : $PERL5LIB";
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    echo -n 'checking --version...'
+    $out/bin/cloc --version | grep '${version}' > /dev/null
+    echo ' ok'
+
+    cat > test.nix <<EOF
+    {a, b}: {
+      test = a
+        + b;
+    }
+    EOF
+
+    echo -n 'checking lines in test.nix...'
+    $out/bin/cloc --quiet --csv test.nix | grep '1,Nix,0,0,4' > /dev/null
+    echo ' ok'
+
+    runHook postInstallCheck
+  '';
+
+  meta = {
+    description = "A program that counts lines of source code";
+    homepage = "https://github.com/AlDanial/cloc";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ rycee ];
+    mainProgram = "cloc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clolcat/default.nix b/nixpkgs/pkgs/tools/misc/clolcat/default.nix
new file mode 100644
index 000000000000..5ba22c69b41b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clolcat/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clolcat";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "IchMageBaume";
+    repo = "clolcat";
+    rev = version;
+    sha256 = "sha256-fLa239dwEXe4Jyy5ntgfU9V0h5wrBsvq6/s2HCis7Sc=";
+  };
+
+  preInstall = "mkdir -p $out/bin";
+
+  makeFlags = [ "DESTDIR=$(out)/bin" ];
+
+  meta = with lib; {
+    description = "Much faster lolcat";
+    homepage = "https://github.com/IchMageBaume/clolcat";
+    platforms = platforms.all;
+    maintainers = [ maintainers.felipeqq2 ];
+    license = licenses.wtfpl;
+    mainProgram = "clolcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cloud-utils/default.nix b/nixpkgs/pkgs/tools/misc/cloud-utils/default.nix
new file mode 100644
index 000000000000..32ef248ca854
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cloud-utils/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, makeWrapper
+, gawk, gnused, util-linux, file
+, wget, python3, qemu-utils
+, e2fsprogs, cdrkit
+, gptfdisk }:
+
+let
+  # according to https://packages.debian.org/sid/cloud-image-utils + https://packages.debian.org/sid/admin/cloud-guest-utils
+  guestDeps = [
+    e2fsprogs gptfdisk gawk gnused util-linux
+  ];
+  binDeps = guestDeps ++ [
+    wget file qemu-utils cdrkit
+  ];
+in stdenv.mkDerivation rec {
+  # NOTICE: if you bump this, make sure to run
+  # $ nix-build nixos/release-combined.nix -A nixos.tests.ec2-nixops
+  # growpart is needed in initrd in nixos/system/boot/grow-partition.nix
+  pname = "cloud-utils";
+  version = "0.32";
+  src = fetchurl {
+    url = "https://launchpad.net/cloud-utils/trunk/${version}/+download/cloud-utils-${version}.tar.gz";
+    sha256 = "0xxdi55lzw7j91zfajw7jhd2ilsqj2dy04i9brlk8j3pvb5ma8hk";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 ];
+  installFlags = [ "LIBDIR=$(out)/lib" "BINDIR=$(out)/bin" "MANDIR=$(out)/man/man1" "DOCDIR=$(out)/doc" ];
+
+  # $guest output contains all executables needed for cloud-init and $out the rest + $guest
+  # This is similar to debian's package split into cloud-image-utils and cloud-guest-utils
+  # The reason is to reduce the closure size
+  outputs = [ "out" "guest"];
+
+  postFixup = ''
+    moveToOutput bin/ec2metadata $guest
+    moveToOutput bin/growpart $guest
+    moveToOutput bin/vcs-run $guest
+
+    for i in $out/bin/*; do
+      wrapProgram $i --prefix PATH : "${lib.makeBinPath binDeps}:$out/bin"
+    done
+
+    for i in $guest/bin/*; do
+      wrapProgram $i --prefix PATH : "${lib.makeBinPath guestDeps}:$guest/bin"
+      ln -s $i $out/bin
+    done
+  '';
+
+  dontBuild = true;
+
+  meta = with lib; {
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff b/nixpkgs/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff
new file mode 100644
index 000000000000..aed9112682b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff
@@ -0,0 +1,72 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 86fec9e..b9d0341 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -22,7 +22,7 @@ elseif(WIN32 AND ${OpenCL_LIBRARIES} MATCHES "OpenCL.lib")
+   set(OpenCL_LIBRARIES ${OpenCL_LIBRARIES} cfgmgr32.lib)
+ endif()
+ 
+-FIND_PATH(HPP_FOUND CL/cl.hpp PATHS ${OpenCL_INCLUDE_DIRS})
++FIND_PATH(HPP_FOUND CL/cl2.hpp PATHS ${OpenCL_INCLUDE_DIRS})
+ if(NOT HPP_FOUND)
+   list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+   include(BuildCLHpp)
+diff --git a/include/clpeak.h b/include/clpeak.h
+index c090d31..0d9d5e2 100644
+--- a/include/clpeak.h
++++ b/include/clpeak.h
+@@ -1,14 +1,10 @@
+ #ifndef CLPEAK_HPP
+ #define CLPEAK_HPP
+ 
+-#define __CL_ENABLE_EXCEPTIONS
+-
+-#include <CL/cl.hpp>
+-
+ #include <iostream>
+ #include <stdio.h>
+ #include <iomanip>
+-#include <string.h>
++#include <string>
+ #include <sstream>
+ #include <common.h>
+ #include <logger.h>
+diff --git a/include/common.h b/include/common.h
+index 91318cb..6aaca04 100644
+--- a/include/common.h
++++ b/include/common.h
+@@ -1,7 +1,11 @@
+ #ifndef COMMON_H
+ #define COMMON_H
+ 
+-#include <CL/cl.hpp>
++#define CL_HPP_ENABLE_EXCEPTIONS
++#define CL_HPP_MINIMUM_OPENCL_VERSION 120
++#define CL_HPP_TARGET_OPENCL_VERSION 120
++#include <CL/cl2.hpp>
++
+ #if defined(__APPLE__) || defined(__MACOSX) || defined(__FreeBSD__)
+ #include <sys/types.h>
+ #endif
+diff --git a/src/clpeak.cpp b/src/clpeak.cpp
+index 8708463..4a47842 100644
+--- a/src/clpeak.cpp
++++ b/src/clpeak.cpp
+@@ -3,7 +3,7 @@
+ 
+ #define MSTRINGIFY(...) #__VA_ARGS__
+ 
+-static const char *stringifiedKernels =
++static const std::string stringifiedKernels =
+ #include "global_bandwidth_kernels.cl"
+ #include "compute_sp_kernels.cl"
+ #include "compute_hp_kernels.cl"
+@@ -65,7 +65,7 @@ int clPeak::runAll()
+ 
+       cl::Context ctx(CL_DEVICE_TYPE_ALL, cps);
+       vector<cl::Device> devices = ctx.getInfo<CL_CONTEXT_DEVICES>();
+-      cl::Program::Sources source(1, make_pair(stringifiedKernels, (strlen(stringifiedKernels) + 1)));
++      cl::Program::Sources source(1, stringifiedKernels);
+       cl::Program prog = cl::Program(ctx, source);
+ 
+       for (size_t d = 0; d < devices.size(); d++)
diff --git a/nixpkgs/pkgs/tools/misc/clpeak/default.nix b/nixpkgs/pkgs/tools/misc/clpeak/default.nix
new file mode 100644
index 000000000000..4539602320f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clpeak/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, cmake, ocl-icd, opencl-clhpp }:
+
+stdenv.mkDerivation rec {
+  pname = "clpeak";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "krrishnarraj";
+    repo = "clpeak";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "1wkjpvn4r89c3y06rv7gfpwpqw6ljmqwz0w0mljl9y5hn1r4pkx2";
+  };
+
+  patches = [
+    # The cl.hpp header was removed from opencl-clhpp. This patch
+    # updates clpeak to use the new cp2.hpp header. The patch comes
+    # from the following PR and was updated to apply against more
+    # recent versions: https://github.com/krrishnarraj/clpeak/pull/46
+    ./clpeak-clhpp2.diff
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ ocl-icd opencl-clhpp ];
+
+  meta = with lib; {
+    description = "A tool which profiles OpenCL devices to find their peak capacities";
+    homepage = "https://github.com/krrishnarraj/clpeak/";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ ];
+    mainProgram = "clpeak";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clubhouse-cli/default.nix b/nixpkgs/pkgs/tools/misc/clubhouse-cli/default.nix
new file mode 100644
index 000000000000..22148f820d40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clubhouse-cli/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "clubhouse-cli";
+  version = "2.7.0";
+
+  src = fetchFromGitHub {
+    owner = "andjosh";
+    repo = "clubhouse-cli";
+    rev = "v${version}";
+    hash = "sha256-OGUEPWKL3GBIQHEDljX1gXMRDEztIrJT5ivAIcyW91k=";
+  };
+
+  npmDepsHash = "sha256-QlCLEvmqLVkWwgTVlToYD6bptLp/MVfQ10Wdfr3PIr4=";
+
+  meta = {
+    description = "A command line tool for viewing, creating and updating clubhouse.io stories";
+    homepage = "https://github.com/andjosh/clubhouse-cli";
+    changelog = "https://github.com/andjosh/clubhouse-cli/blob/${src.rev}/CHANGELOG.md";
+    license = lib.licenses.mit;
+    mainProgram = "club";
+    maintainers = with lib.maintainers; [ tobim ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cmdpack/default.nix b/nixpkgs/pkgs/tools/misc/cmdpack/default.nix
new file mode 100644
index 000000000000..0fe2c75d1ea0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cmdpack/default.nix
@@ -0,0 +1,136 @@
+{ stdenv, lib, fetchurl }:
+let
+  mkCmdPackDerivation = { pname, postInstall ? "", description }: stdenv.mkDerivation {
+    inherit pname postInstall;
+
+    version = "1.03";
+
+    src = fetchurl {
+      url = "https://web.archive.org/web/20140330233023/http://www.neillcorlett.com/downloads/cmdpack-1.03-src.tar.gz";
+      sha256 = "0v0a9rpv59w8lsp1cs8f65568qj65kd9qp7854z1ivfxfpq0da2n";
+    };
+
+    buildPhase = ''
+      runHook preBuild
+
+      gcc -o ${pname} src/${pname}.c
+
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/bin
+      cp ${pname} $out/bin
+
+      runHook postInstall
+    '';
+
+    meta = with lib; {
+      inherit description;
+
+      homepage = "https://web.archive.org/web/20140330233023/http://www.neillcorlett.com/cmdpack/";
+      platforms = platforms.all;
+      license = licenses.gpl3Plus;
+      maintainers = with maintainers; [ zane ];
+    };
+  };
+in
+{
+  bin2iso = mkCmdPackDerivation {
+    pname = "bin2iso";
+    description = "Convert CD .BIN to .ISO";
+  };
+
+  bincomp = mkCmdPackDerivation {
+    pname = "bincomp";
+    description = "Compare binary files";
+  };
+
+  brrrip = mkCmdPackDerivation {
+    pname = "brrrip";
+    description = "Rip SNES BRR sound samples";
+  };
+
+  byteshuf = mkCmdPackDerivation {
+    pname = "byteshuf";
+    description = "Shuffle or unshuffle bytes in a file";
+  };
+
+  byteswap = mkCmdPackDerivation {
+    pname = "byteswap";
+    description = "Swap byte order of files";
+  };
+
+  cdpatch = mkCmdPackDerivation {
+    pname = "cdpatch";
+    description = "CD-XA image insert/extract utility";
+  };
+
+  ecm = mkCmdPackDerivation {
+    pname = "ecm";
+    postInstall = "ln $out/bin/ecm $out/bin/unecm";
+    description = "Encoder/decoder for Error Code Modeler format";
+  };
+
+  fakecrc = mkCmdPackDerivation {
+    pname = "fakecrc";
+    description = "Fake the CRC32 of a file";
+  };
+
+  hax65816 = mkCmdPackDerivation {
+    pname = "hax65816";
+    description = "Simple 65816 disassembler";
+  };
+
+  id3point = mkCmdPackDerivation {
+    pname = "id3point";
+    description = "Pointless ID3v1 Tagger";
+  };
+
+  pecompat = mkCmdPackDerivation {
+    pname = "pecompat";
+    description = "Maximize compatibility of a Win32 PE file";
+  };
+
+  rels = mkCmdPackDerivation {
+    pname = "rels";
+    description = "Relative Searcher";
+  };
+
+  screamf = mkCmdPackDerivation {
+    pname = "screamf";
+    description = ".AMF to .S3M converter";
+  };
+
+  subfile = mkCmdPackDerivation {
+    pname = "subfile";
+    description = "Extract a portion of a file";
+  };
+
+  uips = mkCmdPackDerivation {
+    pname = "uips";
+    description = "Universal IPS patch create/apply utility";
+  };
+
+  usfv = mkCmdPackDerivation {
+    pname = "usfv";
+    description = "Universal SFV create/verify utility";
+  };
+
+  vb2rip = mkCmdPackDerivation {
+    pname = "vb2rip";
+    description = "VB2 sound format ripping utility";
+  };
+
+  wordadd = mkCmdPackDerivation {
+    pname = "wordadd";
+    description = "Addition word puzzle solver";
+  };
+
+  zerofill = mkCmdPackDerivation {
+    pname = "zerofill";
+    description = "Create a large, empty file";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cod/default.nix b/nixpkgs/pkgs/tools/misc/cod/default.nix
new file mode 100644
index 000000000000..eba78d6c2263
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cod/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchFromGitHub, buildGoModule, python3 }:
+
+buildGoModule rec {
+  pname = "cod";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "dim-an";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-mT7OkR8fXXTE3TPx9AmH6ehKGLk4CP9euBPs2zVAJnI=";
+  };
+
+  vendorHash = "sha256-kezfBDTgpOTBYKTNlwuP+M5tXU2w/MXz0B5nBJcL1io=";
+
+  ldflags = [ "-s" "-w" "-X main.GitSha=${src.rev}" ];
+
+  nativeCheckInputs = [ python3 ];
+
+  preCheck = ''
+    pushd test/binaries/
+    for f in *.py; do
+      patchShebangs ''$f
+    done
+    popd
+    export COD_TEST_BINARY="''${NIX_BUILD_TOP}/go/bin/cod"
+
+    substituteInPlace test/learn_test.go --replace TestLearnArgparseSubCommand SkipLearnArgparseSubCommand
+  '';
+
+  meta = with lib; {
+    description = "Tool for generating Bash/Fish/Zsh autocompletions based on `--help` output";
+    homepage = "https://github.com/dim-an/cod/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    broken = stdenv.isDarwin;
+    mainProgram = "cod";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/code-minimap/default.nix b/nixpkgs/pkgs/tools/misc/code-minimap/default.nix
new file mode 100644
index 000000000000..33e6ee825b0b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/code-minimap/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "code-minimap";
+  version = "0.6.4";
+
+  src = fetchFromGitHub {
+    owner = "wfxr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XhewfU3l/n2wiF9pKm1OOKQ7REzz3WzcBiVgOiYnAYU=";
+  };
+
+  cargoSha256 = "sha256-Z3bc0w8slI9lHbDbrIK65xurtmTK4Y4caF7kxxJBA3Q=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "A high performance code minimap render";
+    homepage = "https://github.com/wfxr/code-minimap";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ bsima ];
+    mainProgram = "code-minimap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/codebraid/default.nix b/nixpkgs/pkgs/tools/misc/codebraid/default.nix
new file mode 100644
index 000000000000..516dd66cf01b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/codebraid/default.nix
@@ -0,0 +1,42 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "codebraid";
+  version = "0.11.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "gpoore";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-E9vzGK9ZEVwF+UBpSkdM+hm6vINen/A+LgnnPpc77QQ=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ setuptools ];
+  propagatedBuildInputs = with python3Packages; [ bespon ];
+  # unfortunately upstream doesn't contain tests
+  checkPhase = ''
+    $out/bin/codebraid --help > /dev/null
+  '';
+  meta = with lib; {
+    homepage = "https://github.com/gpoore/codebraid";
+    description = ''
+      Live code in Pandoc Markdown.
+
+      Codebraid is a Python program that enables executable code in Pandoc
+      Markdown documents. Using Codebraid can be as simple as adding a class to
+      your code blocks' attributes, and then running codebraid rather than
+      pandoc to convert your document from Markdown to another format.
+      codebraid supports almost all of pandoc's options and passes them to
+      pandoc internally.
+
+      Codebraid provides two options for executing code. It includes a built-in
+      code execution system that currently supports Python 3.5+, Julia, Rust,
+      R, Bash, and JavaScript. Code can also be executed using Jupyter kernels,
+      with support for rich output like plots.
+    '';
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ synthetica ];
+    mainProgram = "codebraid";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/codemov/default.nix b/nixpkgs/pkgs/tools/misc/codemov/default.nix
new file mode 100644
index 000000000000..d8cc40e3d861
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/codemov/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeBinaryWrapper
+, pkg-config
+, oniguruma
+, ffmpeg
+, git
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "codemov";
+  version = "unstable-2023-08-08";
+
+  src = fetchFromGitHub {
+    owner = "sloganking";
+    repo = "codemov";
+    rev = "8a4d6e50c21010866ca06f845f30c2aa54c09854";
+    hash = "sha256-nOqh8kXS5mx0AM4NvIcwvC0lAZRHsQwrxI0c+9PeroU=";
+  };
+
+  cargoHash = "sha256-cyzoMD97ofrbm3BDAtl8pSezcM4B2TVbW9V5J6xRVLc=";
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+    pkg-config
+  ];
+
+  buildInputs = [
+    oniguruma
+  ];
+
+  env = {
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
+
+  postInstall = ''
+    wrapProgram $out/bin/codemov \
+      --prefix PATH : ${lib.makeBinPath [ ffmpeg git ]}
+  '';
+
+  meta = with lib; {
+    description = "Create a video of how a git repository's code changes over time";
+    homepage = "https://github.com/sloganking/codemov";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "codemov";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/codevis/default.nix b/nixpkgs/pkgs/tools/misc/codevis/default.nix
new file mode 100644
index 000000000000..c41351f95983
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/codevis/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, oniguruma
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "codevis";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "sloganking";
+    repo = "codevis";
+    rev = "v${version}";
+    hash = "sha256-LZ6NsoyEPUvgcVdbG7U2Vzuz/TLLraScvW97PocUNpU=";
+  };
+
+  cargoHash = "sha256-sQKZJVnRs4IcBKmmaQDoJYBQtnuZW4aEICr6Xa8Flnk=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    oniguruma
+  ];
+
+  env = {
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
+
+  meta = with lib; {
+    description = "A tool to take all source code in a folder and render them to one image";
+    homepage = "https://github.com/sloganking/codevis";
+    changelog = "https://github.com/sloganking/codevis/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "codevis";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coinlive/default.nix b/nixpkgs/pkgs/tools/misc/coinlive/default.nix
new file mode 100644
index 000000000000..2d5faff98a02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coinlive/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+, pkg-config
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "coinlive";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "mayeranalytics";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-llw97jjfPsDd4nYi6lb9ug6sApPoD54WlzpJswvdbRs=";
+  };
+
+  cargoSha256 = "sha256-T1TgwnohUDvfpn6GXNP4xJGHM3aenMK+ORxE3z3PPA4=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  checkFlags = [
+    # requires network access
+    "--skip=utils::test_get_infos"
+  ];
+
+  meta = with lib; {
+    description = "Live cryptocurrency prices CLI";
+    homepage = "https://github.com/mayeranalytics/coinlive";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "coinlive";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colord-gtk/default.nix b/nixpkgs/pkgs/tools/misc/colord-gtk/default.nix
new file mode 100644
index 000000000000..decca87739ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colord-gtk/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, fetchurl
+, colord
+, gettext
+, meson
+, ninja
+, gobject-introspection
+, gtk-doc
+, docbook-xsl-ns
+, docbook-xsl-nons
+, docbook_xml_dtd_412
+, libxslt
+, glib
+, withGtk4 ? false
+, gtk3
+, gtk4
+, pkg-config
+, lcms2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "colord-gtk";
+  version = "0.3.1";
+
+  outputs = [ "out" "dev" "devdoc" ];
+
+  src = fetchurl {
+    url = "https://www.freedesktop.org/software/colord/releases/${pname}-${version}.tar.xz";
+    sha256 = "wXa4ibdWMKF/Tj1+8kwJo+EjaOYzSWCHRZyLU6w6Ei0=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    gettext
+    meson
+    ninja
+    gobject-introspection
+    gtk-doc
+    docbook-xsl-ns
+    docbook-xsl-nons
+    docbook_xml_dtd_412
+    libxslt
+  ];
+
+  buildInputs = [
+    glib
+    lcms2
+  ];
+
+  propagatedBuildInputs = [
+    colord
+  ] ++ (if withGtk4 then [
+    gtk4
+  ] else [
+    gtk3
+  ]);
+
+  mesonFlags = [
+    "-Dgtk4=${lib.boolToString withGtk4}"
+    "-Dgtk3=${lib.boolToString (!withGtk4)}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.freedesktop.org/software/colord/intro.html";
+    license = licenses.lgpl21Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+    mainProgram = "cd-convert";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colord/default.nix b/nixpkgs/pkgs/tools/misc/colord/default.nix
new file mode 100644
index 000000000000..989f7d57e0b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colord/default.nix
@@ -0,0 +1,121 @@
+{ lib
+, stdenv
+, fetchurl
+, nixosTests
+, bash-completion
+, glib
+, polkit
+, pkg-config
+, gettext
+, gusb
+, lcms2
+, sqlite
+, systemd
+, dbus
+, gobject-introspection
+, argyllcms
+, meson
+, mesonEmulatorHook
+, ninja
+, vala
+, libgudev
+, wrapGAppsNoGuiHook
+, shared-mime-info
+, sane-backends
+, docbook_xsl
+, docbook_xsl_ns
+, docbook_xml_dtd_412
+, gtk-doc
+, libxslt
+, enableDaemon ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "colord";
+  version = "1.4.7";
+
+  outputs = [ "out" "dev" "devdoc" "man" "installedTests" ];
+
+  src = fetchurl {
+    url = "https://www.freedesktop.org/software/colord/releases/${pname}-${version}.tar.xz";
+    hash = "sha256-3gLZkQY0rhWVR1hc7EFORQ9xHCcjVFO0+bOKnyNhplM=";
+  };
+
+  patches = [
+    # Put installed tests into its own output
+    ./installed-tests-path.patch
+  ];
+
+  postPatch = ''
+    for file in data/tests/meson.build lib/colord/cd-test-shared.c lib/colord/meson.build; do
+        substituteInPlace $file --subst-var-by installed_tests_dir "$installedTests"
+    done
+  '';
+
+  mesonFlags = [
+    "--localstatedir=/var"
+    "-Dinstalled_tests=true"
+    "-Dlibcolordcompat=true"
+    "-Dsane=true"
+    "-Dvapi=true"
+    "-Ddaemon=${lib.boolToString enableDaemon}"
+    "-Ddaemon_user=colord"
+  ];
+
+  nativeBuildInputs = [
+    docbook_xml_dtd_412
+    docbook_xsl
+    docbook_xsl_ns
+    gettext
+    gobject-introspection
+    gtk-doc
+    libxslt
+    meson
+    ninja
+    pkg-config
+    shared-mime-info
+    vala
+    wrapGAppsNoGuiHook
+  ] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
+    mesonEmulatorHook
+  ];
+
+  buildInputs = [
+    argyllcms
+    bash-completion
+    dbus
+    glib
+    gusb
+    lcms2
+    libgudev
+    sane-backends
+    sqlite
+    systemd
+  ] ++ lib.optionals enableDaemon [
+    polkit
+  ];
+
+  postInstall = ''
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "${placeholder "out"}/lib/systemd/system";
+  PKG_CONFIG_SYSTEMD_SYSTEMDUSERUNITDIR = "${placeholder "out"}/lib/systemd/user";
+  PKG_CONFIG_SYSTEMD_TMPFILESDIR = "${placeholder "out"}/lib/tmpfiles.d";
+  PKG_CONFIG_BASH_COMPLETION_COMPLETIONSDIR = "${placeholder "out"}/share/bash-completion/completions";
+  PKG_CONFIG_UDEV_UDEVDIR = "${placeholder "out"}/lib/udev";
+
+  passthru = {
+    tests = {
+      installedTests = nixosTests.installed-tests.colord;
+    };
+  };
+
+  meta = with lib; {
+    description = "System service to manage, install and generate color profiles to accurately color manage input and output devices";
+    homepage = "https://www.freedesktop.org/software/colord/";
+    license = licenses.lgpl2Plus;
+    maintainers = [ maintainers.marcweber ] ++ teams.freedesktop.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch b/nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch
new file mode 100644
index 000000000000..6d91cbbcb022
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch
@@ -0,0 +1,72 @@
+diff --git a/data/tests/meson.build b/data/tests/meson.build
+index 8b38f10..250582c 100644
+--- a/data/tests/meson.build
++++ b/data/tests/meson.build
+@@ -17,6 +17,6 @@ if get_option('installed_tests')
+       'test.ccss',
+       'test.sp',
+     ],
+-    install_dir: join_paths(libexecdir, 'installed-tests', 'colord')
++    install_dir: join_paths('@installed_tests_dir@', 'libexec', 'installed-tests', 'colord')
+   )
+ endif
+diff --git a/lib/colord/cd-test-shared.c b/lib/colord/cd-test-shared.c
+index c3b9d23..7577e13 100644
+--- a/lib/colord/cd-test-shared.c
++++ b/lib/colord/cd-test-shared.c
+@@ -45,7 +45,8 @@ cd_test_get_filename (const gchar *filename)
+ 
+ 	/* running in the installed system */
+ 	if (g_getenv ("INSTALLED_TESTS") != NULL) {
+-		return g_build_filename (LIBEXECDIR,
++		return g_build_filename ("@installed_tests_dir@",
++					 "libexec",
+ 					 "installed-tests",
+ 					 PACKAGE_NAME,
+ 					 filename,
+diff --git a/lib/colord/meson.build b/lib/colord/meson.build
+index 61f0518..df71358 100644
+--- a/lib/colord/meson.build
++++ b/lib/colord/meson.build
+@@ -214,20 +214,20 @@ endif
+ if get_option('installed_tests')
+ con2 = configuration_data()
+ con2.set('installedtestsdir',
+-         join_paths(libexecdir, 'installed-tests', 'colord'))
++         join_paths('@installed_tests_dir@', 'libexec', 'installed-tests', 'colord'))
+ configure_file(
+   input : 'colord-daemon.test.in',
+   output : 'colord-daemon.test',
+   configuration : con2,
+   install: true,
+-  install_dir: join_paths('share', 'installed-tests', 'colord'),
++  install_dir: join_paths('@installed_tests_dir@', 'share', 'installed-tests', 'colord'),
+ )
+ configure_file(
+   input : 'colord-private.test.in',
+   output : 'colord-private.test',
+   configuration : con2,
+   install: true,
+-  install_dir: join_paths('share', 'installed-tests', 'colord'),
++  install_dir: join_paths('@installed_tests_dir@', 'share', 'installed-tests', 'colord'),
+ )
+ endif
+ 
+@@ -254,7 +254,7 @@ if get_option('tests')
+       '-DTESTDATADIR="' + testdatadir + '"',
+     ],
+     install : get_option('installed_tests'),
+-    install_dir : join_paths(libexecdir, 'installed-tests', 'colord'),
++    install_dir : join_paths('@installed_tests_dir@','libexec', 'installed-tests', 'colord'),
+   )
+   test('colord-test-private', e)
+   e = executable(
+@@ -278,7 +278,7 @@ if get_option('tests')
+       '-DTESTDATADIR="' + testdatadir + '"',
+     ],
+     install : get_option('installed_tests'),
+-    install_dir : join_paths(libexecdir, 'installed-tests', 'colord'),
++    install_dir : join_paths('@installed_tests_dir@', 'libexec', 'installed-tests', 'colord'),
+   )
+   test('colord-test-daemon', e)
+ endif
diff --git a/nixpkgs/pkgs/tools/misc/colorless/default.nix b/nixpkgs/pkgs/tools/misc/colorless/default.nix
new file mode 100644
index 000000000000..d7613d30d097
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colorless/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchurl
+, stdenvNoCC
+, coreutils
+, bash
+, binSh ? "${bash}/bin/bash"
+, gnused
+, less
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "colorless";
+  version = "109";
+
+  src = fetchurl {
+    url = "http://software.kimmo.suominen.com/${pname}-${version}.tar.gz";
+    sha256 = "039a140fa11cf153cc4d03e4f753b7ff142cab88ff116b7600ccf9edee81927c";
+  };
+
+  makeFlags = [
+    "TOOLPATH=${lib.makeBinPath [ coreutils gnused less ]}"
+    "PREFIX=$(out)"
+    "SHELL=${binSh}"
+  ];
+
+  preInstall = ''
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  postInstall = ''
+    install -Dm644 -t $out/share/doc/colorless LICENSE README.md
+  '';
+
+  strictDeps = true;
+
+  meta = with lib; {
+    homepage = "https://kimmo.suominen.com/sw/colorless";
+    description = "Enable colorised command output and pipe it to less";
+    longDescription = ''
+      colorless is a wrapper that enables colorised output of commands and
+      pipes the output to less(1).
+    '';
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ suominen ];
+    platforms = platforms.unix;
+    mainProgram = "colorless";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colorpanes/default.nix b/nixpkgs/pkgs/tools/misc/colorpanes/default.nix
new file mode 100644
index 000000000000..e89dc66897c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colorpanes/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitea }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "colorpanes";
+  version = "3.0.1";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "qaOH+LXNDq+utwyI1yzHWNt25AvdAXCTAziGV9ElroU=";
+  };
+
+  cargoSha256 = "eJne4OmV4xHxntTb8HE+2ghX1hZLE3WQ3QqsjVm9E4M=";
+
+  postInstall = ''
+    ln -s $out/bin/colp $out/bin/colorpanes
+  '';
+
+  meta = with lib; {
+    description = "Panes in the 8 bright terminal colors with shadows of the respective darker color";
+    homepage = "https://codeberg.org/annaaurora/colorpanes";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colorpicker/default.nix b/nixpkgs/pkgs/tools/misc/colorpicker/default.nix
new file mode 100644
index 000000000000..8b45da17626c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colorpicker/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gtk2 }:
+
+stdenv.mkDerivation rec {
+  pname = "colorpicker";
+  version = "unstable-2017-09-01";
+
+  src = fetchFromGitHub {
+    owner = "Jack12816";
+    repo = "colorpicker";
+    rev = "a4455b92fde1dfbac81e7852f171093932154a30";
+    sha256 = "z2asxTIP8WcsWcePmIg0k4bOF2JwkqOxNqSpQv4/a40=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 ];
+
+  installPhase = ''
+    install -Dt $out/bin colorpicker
+  '';
+
+  meta = with lib; {
+    description = "Click on a pixel on your screen and print its color value in RGB";
+    homepage = "https://github.com/Jack12816/colorpicker";
+    maintainers = with maintainers; [ jb55 ];
+    license = licenses.mit;
+    mainProgram = "colorpicker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colorz/default.nix b/nixpkgs/pkgs/tools/misc/colorz/default.nix
new file mode 100644
index 000000000000..f60843afcfb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colorz/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "colorz";
+  version = "1.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0ghd90lgplf051fs5n5bb42zffd3fqpgzkbv6bhjw7r8jqwgcky0";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ pillow scipy ];
+
+  checkPhase = ''
+    $out/bin/colorz --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Color scheme generator";
+    homepage = "https://github.com/metakirby5/colorz";
+    license = licenses.mit;
+    maintainers = with maintainers; [ skykanin ];
+    mainProgram = "colorz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/compdb/default.nix b/nixpkgs/pkgs/tools/misc/compdb/default.nix
new file mode 100644
index 000000000000..0a5e689bb4b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/compdb/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "compdb";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Sarcasm";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-nFAgTrup6V5oE+LP4UWDOCgTVCv2v9HbQbkGW+oDnTg=";
+  };
+
+  meta = with lib; {
+    description = "Command line tool to manipulate compilation databases";
+    license = licenses.mit;
+    homepage = "https://github.com/Sarcasm/compdb";
+    maintainers = [ maintainers.detegr ];
+    mainProgram = "compdb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/complete-alias/default.nix b/nixpkgs/pkgs/tools/misc/complete-alias/default.nix
new file mode 100644
index 000000000000..fdf0c1ae0ab2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/complete-alias/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, stdenvNoCC
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "complete-alias";
+  version = "1.18.0";
+
+  src = fetchFromGitHub {
+    owner = "cykerway";
+    repo = pname;
+    rev = version;
+    sha256 = "18lmdb3inphxyjv08ing5wckqnjq0m5zfl0f15mqzlvf2ypar63x";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    # required for the patchShebangs setup hook
+    chmod +x complete_alias
+
+    patchShebangs complete_alias
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r complete_alias "$out"/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Automagical shell alias completion";
+    homepage = "https://github.com/cykerway/complete-alias";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ tuxinaut ];
+    mainProgram = "complete_alias";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/completely/Gemfile b/nixpkgs/pkgs/tools/misc/completely/Gemfile
new file mode 100644
index 000000000000..bfae92920327
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/completely/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'completely'
diff --git a/nixpkgs/pkgs/tools/misc/completely/Gemfile.lock b/nixpkgs/pkgs/tools/misc/completely/Gemfile.lock
new file mode 100644
index 000000000000..656c96cbc40c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/completely/Gemfile.lock
@@ -0,0 +1,20 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    colsole (0.8.2)
+    completely (0.5.2)
+      colsole (~> 0.6)
+      mister_bin (~> 0.7.2)
+    docopt (0.6.1)
+    mister_bin (0.7.3)
+      colsole (~> 0.7)
+      docopt (~> 0.6)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  completely
+
+BUNDLED WITH
+   2.4.5
diff --git a/nixpkgs/pkgs/tools/misc/completely/default.nix b/nixpkgs/pkgs/tools/misc/completely/default.nix
new file mode 100644
index 000000000000..326887299c0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/completely/default.nix
@@ -0,0 +1,22 @@
+{ lib
+, bundlerApp
+, bundlerUpdateScript
+}:
+
+bundlerApp {
+  pname = "completely";
+
+  gemdir = ./.;
+  exes = [ "completely" ];
+
+  passthru.updateScript = bundlerUpdateScript "completely";
+
+  meta = with lib; {
+    description = "Generate bash completion scripts using a simple configuration file";
+    homepage = "https://github.com/DannyBen/completely";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ zendo ];
+    mainProgram = "completely";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/completely/gemset.nix b/nixpkgs/pkgs/tools/misc/completely/gemset.nix
new file mode 100644
index 000000000000..a078a113f6d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/completely/gemset.nix
@@ -0,0 +1,44 @@
+{
+  colsole = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l29sxy4p9jbvcihckxfsyqx98b8xwzd3hjqvdh1zxw8nv5walnp";
+      type = "gem";
+    };
+    version = "0.8.2";
+  };
+  completely = {
+    dependencies = ["colsole" "mister_bin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w7cmmsp9m42c8w4j03kr98zy7x7yszw3qsm3ww600dmc0d0xd2b";
+      type = "gem";
+    };
+    version = "0.5.2";
+  };
+  docopt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rvlfbb7kzyagncm4zdpcjwrh682zamgf5rcf5qmj0bd6znkgy3k";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  mister_bin = {
+    dependencies = ["colsole" "docopt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f51zs9wjpslhdadp8yfx4ij0jj1ya92cbzqlfd2wfr19wdr2jgd";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/conserver/default.nix b/nixpkgs/pkgs/tools/misc/conserver/default.nix
new file mode 100644
index 000000000000..30ac050ee0d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/conserver/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, libxcrypt
+, gssapiSupport ? false
+, libkrb5
+, freeipmiSupport ? false
+, freeipmi
+, ipv6Support ? true
+, opensslSupport ? true
+, openssl
+, trustUdsCredSupport ? false
+, udsSupport ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "conserver";
+  version = "8.2.7";
+
+  src = fetchFromGitHub {
+    owner = "bstansell";
+    repo = "conserver";
+    rev = "v${version}";
+    sha256 = "sha256-LiCknqitBoa8E8rNMVgp1004CwkW8G4O5XGKe4NfZI8=";
+  };
+
+  # Remove upon next release since upstream is fixed
+  # https://github.com/bstansell/conserver/pull/82
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/bstansell/conserver/commit/84fc79a459e00dbc87b8cfc943c5045bfcc7aeeb.patch";
+      sha256 = "sha256:1dy8r9z7rv8512fl0rk5gi1vl02hnh7x0i6flvpcc13h6r6fhxyc";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ libxcrypt ]
+    ++ lib.optionals freeipmiSupport [ freeipmi ]
+    ++ lib.optionals gssapiSupport [ libkrb5 ]
+    ++ lib.optionals opensslSupport [ openssl ];
+
+  configureFlags = [ "--with-ccffile=/dev/null" "--with-cffile=/dev/null" ]
+    ++ lib.optionals freeipmiSupport [ "--with-freeipmi=${freeipmi}/include" ]
+    ++ lib.optionals gssapiSupport [ "--with-gssapi=${libkrb5.dev}/include" ]
+    ++ lib.optionals ipv6Support [ "--with-ipv6" ]
+    ++ lib.optionals opensslSupport [ "--with-openssl=${openssl.dev}/include" ]
+    ++ lib.optionals trustUdsCredSupport [ "--with-trust-uds-cred" ]
+    ++ lib.optionals udsSupport [ "--with-uds" ];
+
+  # Disabled due to exist upstream cases failing 8/15 tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://www.conserver.com/";
+    description = "An application that allows multiple users to watch a serial console at the same time";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sarcasticadmin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/contacts/default.nix b/nixpkgs/pkgs/tools/misc/contacts/default.nix
new file mode 100644
index 000000000000..175b7a9ed247
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/contacts/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, xcbuildHook, Foundation, AddressBook }:
+
+stdenv.mkDerivation {
+  version = "1.1a-3";
+  pname = "contacts";
+
+  src = fetchFromGitHub {
+    owner = "dhess";
+    repo = "contacts";
+    rev = "4092a3c6615d7a22852a3bafc44e4aeeb698aa8f";
+    hash = "sha256-Li/c5uf9rfpuU+hduuSm7EmhVwIIkS72dqzmN+0cE3A=";
+  };
+
+  postPatch = ''
+    substituteInPlace contacts.m \
+      --replace "int peopleSort" "long peopleSort"
+  '';
+
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ Foundation AddressBook ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp Products/Default/contacts $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Access contacts from the Mac address book from command-line";
+    homepage = "http://www.gnufoo.org/contacts/contacts.html";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ jwiegley ];
+    platforms = platforms.darwin;
+    hydraPlatforms = platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/convbin/default.nix b/nixpkgs/pkgs/tools/misc/convbin/default.nix
new file mode 100644
index 000000000000..96164902dc2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/convbin/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "convbin";
+  version = "3.7";
+
+  src = fetchFromGitHub {
+    owner = "mateoconlechuga";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-zCRM62xwaPaN8+cg+CeaqK/9hKpZmSBBeUOQqAvQGYw=";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile --replace "-flto" ""
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  checkPhase = ''
+    pushd test
+    patchShebangs test.sh
+    ./test.sh
+    popd
+  '';
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 bin/convbin $out/bin/convbin
+  '';
+
+  meta = with lib; {
+    description = "Converts files to other formats";
+    longDescription = ''
+      This program is used to convert files to other formats,
+      specifically for the TI84+CE and related calculators.
+    '';
+    homepage = "https://github.com/mateoconlechuga/convbin";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ luc65r ];
+    platforms = platforms.all;
+    mainProgram = "convbin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/convfont/default.nix b/nixpkgs/pkgs/tools/misc/convfont/default.nix
new file mode 100644
index 000000000000..d58f7ecc2bea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/convfont/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "convfont";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "drdnar";
+    repo = pname;
+    rev = "v20190438";
+    sha256 = "1lj24yq5gj9hxhy1srk73521q95zyqzkws0q4v271hf5wmqaxa2f";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    install -Dm755 convfont $out/bin/convfont
+  '';
+
+  meta = with lib; {
+    description = "Converts font for use with FontLibC";
+    homepage = "https://github.com/drdnar/convfont";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ luc65r ];
+    platforms = platforms.all;
+    mainProgram = "convfont";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/convimg/default.nix b/nixpkgs/pkgs/tools/misc/convimg/default.nix
new file mode 100644
index 000000000000..1e37c2636bbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/convimg/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "convimg";
+  version = "9.3";
+
+  src = fetchFromGitHub {
+    owner = "mateoconlechuga";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xnfMHlbQ7XG/mvnWoGkRHhxIK2u7kWJTVnLxd9c5oNU=";
+    fetchSubmodules = true;
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  checkPhase = ''
+    pushd test
+    patchShebangs test.sh
+    ./test.sh
+    popd
+  '';
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 bin/convimg $out/bin/convimg
+  '';
+
+  meta = with lib; {
+    description = "Image palette quantization";
+    longDescription = ''
+      This program is used to convert images to other formats,
+      specifically for the TI84+CE and related calculators.
+    '';
+    homepage = "https://github.com/mateoconlechuga/convimg";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ luc65r ];
+    platforms = platforms.linux;
+    mainProgram = "convimg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/convmv/default.nix b/nixpkgs/pkgs/tools/misc/convmv/default.nix
new file mode 100644
index 000000000000..8d392f78f47f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/convmv/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "convmv";
+  version = "2.05";
+
+  src = fetchurl {
+    url = "https://www.j3e.de/linux/convmv/convmv-${version}.tar.gz";
+    sha256 = "19hwv197p7c23f43vvav5bs19z9b72jzca2npkjsxgprwj5ardjk";
+  };
+
+  preBuild=''
+    makeFlags="PREFIX=$out"
+  '';
+
+  patchPhase=''
+    tar -xf testsuite.tar
+    patchShebangs .
+  '';
+
+  doCheck = true;
+  checkTarget = "test";
+
+  buildInputs = [ perl ];
+
+  meta = with lib; {
+    description = "Converts filenames from one encoding to another";
+    platforms = platforms.linux ++ platforms.freebsd ++ platforms.cygwin;
+    maintainers = [ ];
+    license = licenses.gpl2Plus;
+    mainProgram = "convmv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cope/default.nix b/nixpkgs/pkgs/tools/misc/cope/default.nix
new file mode 100644
index 000000000000..7e65c854f288
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cope/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, perl, perlPackages }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "cope";
+  version = "unstable-2015-01-29";
+
+  src = fetchFromGitHub {
+    owner = "lotrfan";
+    repo = pname;
+    rev = "0dc82a939a9498ff80caf472841c279dfe03efae";
+    sha256 = "sha256-Tkv26M6YnaUB0nudjKGG482fvUkCobPk0VF1manBCoY=";
+  };
+
+  buildInputs = with perlPackages; [ EnvPath FileShareDir IOPty IOStty ListMoreUtils RegexpCommon RegexpIPv6 ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    mv $out/lib/perl5/site_perl/${perl.version}/auto/share/dist/Cope/* $out/bin/
+    rm -r $out/lib/perl5/site_perl/${perl.version}/auto
+  '';
+
+  meta = with lib; {
+    description = "A colourful wrapper for terminal programs";
+    homepage = "https://github.com/lotrfan/cope";
+    license = with licenses; [ artistic1 gpl1Plus ];
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/copier/default.nix b/nixpkgs/pkgs/tools/misc/copier/default.nix
new file mode 100644
index 000000000000..2b1a65cf99eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/copier/default.nix
@@ -0,0 +1,58 @@
+{ lib, git, python3, fetchFromGitHub }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "copier";
+  version = "9.1.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "copier-org";
+    repo = "copier";
+    rev = "v${version}";
+    # Conflict on APFS on darwin
+    postFetch = ''
+      rm $out/tests/demo/doc/ma*ana.txt
+    '';
+    hash = "sha256-x5r7Xv4lAOMkR+UIEeSY7LvbYMLpTWYuICYe9ygz1tA=";
+  };
+
+  POETRY_DYNAMIC_VERSIONING_BYPASS = version;
+
+  nativeBuildInputs = [
+    python3.pkgs.poetry-core
+    python3.pkgs.poetry-dynamic-versioning
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    decorator
+    dunamai
+    funcy
+    iteration-utilities
+    jinja2
+    jinja2-ansible-filters
+    mkdocs-material
+    mkdocs-mermaid2-plugin
+    mkdocstrings
+    packaging
+    pathspec
+    plumbum
+    pydantic
+    pygments
+    pyyaml
+    pyyaml-include
+    questionary
+  ];
+
+  makeWrapperArgs = [
+    "--suffix PATH : ${lib.makeBinPath [ git ] }"
+  ];
+
+  meta = with lib; {
+    description = "Library and command-line utility for rendering projects templates";
+    homepage = "https://copier.readthedocs.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer greg ];
+    mainProgram = "copier";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coreboot-configurator/default.nix b/nixpkgs/pkgs/tools/misc/coreboot-configurator/default.nix
new file mode 100644
index 000000000000..2c51fd61fc11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreboot-configurator/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, fetchFromGitHub
+, inkscape
+, meson
+, mkDerivation
+, ninja
+  # We will resolve pkexec from the path because it has a setuid wrapper on
+  # NixOS meaning that we cannot just use the path from the nix store.
+  # Using the path to the wrapper here would make the package incompatible
+  # with non-NixOS systems.
+, pkexecPath ? "pkexec"
+, pkg-config
+, yaml-cpp
+, nvramtool
+, systemd
+, qtbase
+, qtsvg
+, wrapQtAppsHook
+}:
+
+mkDerivation {
+  pname = "coreboot-configurator";
+  version = "unstable-2023-01-17";
+
+  src = fetchFromGitHub {
+    owner = "StarLabsLtd";
+    repo = "coreboot-configurator";
+    rev = "944b575dc873c78627c352f9c1a1493981431a58";
+    sha256 = "sha256-ReWQNzeoyTF66hVnevf6Kkrnt0/PqRHd3oyyPYtx+0M=";
+  };
+
+  nativeBuildInputs = [ inkscape meson ninja pkg-config wrapQtAppsHook ];
+  buildInputs = [ yaml-cpp qtbase qtsvg ];
+
+  postPatch = ''
+    substituteInPlace src/application/*.cpp \
+      --replace '/usr/bin/pkexec' '${pkexecPath}' \
+      --replace '/usr/bin/systemctl' '${lib.getBin systemd}/systemctl' \
+      --replace '/usr/sbin/nvramtool' '${lib.getExe nvramtool}'
+
+    substituteInPlace src/resources/org.coreboot.nvramtool.policy \
+      --replace '/usr/sbin/nvramtool' '${lib.getExe nvramtool}'
+
+    substituteInPlace src/resources/org.coreboot.reboot.policy \
+      --replace '/usr/sbin/reboot' '${lib.getBin systemd}/reboot'
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/share/applications/coreboot-configurator.desktop \
+      --replace '/usr/bin/coreboot-configurator' 'coreboot-configurator'
+  '';
+
+  meta = with lib; {
+    description = "A simple GUI to change settings in Coreboot's CBFS";
+    homepage = "https://support.starlabs.systems/kb/guides/coreboot-configurator";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ danth ];
+    mainProgram = "coreboot-configurator";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix b/nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix
new file mode 100644
index 000000000000..5af1d23c5442
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix
@@ -0,0 +1,131 @@
+{ lib, stdenv, fetchgit, pkg-config, zlib, pciutils, openssl, coreutils, acpica-tools, makeWrapper, gnugrep, gnused, file, buildEnv }:
+
+let
+  version = "4.21";
+
+  commonMeta = with lib; {
+    description = "Various coreboot-related tools";
+    homepage = "https://www.coreboot.org";
+    license = with licenses; [ gpl2Only gpl2Plus ];
+    maintainers = with maintainers; [ felixsinger yuka ];
+    platforms = platforms.linux;
+  };
+
+  generic = { pname, path ? "util/${pname}", ... }@args: stdenv.mkDerivation (rec {
+    inherit pname version;
+
+    src = fetchgit {
+      url = "https://review.coreboot.org/coreboot";
+      rev = "c1386ef6128922f49f93de5690ccd130a26eecf2";
+      sha256 = "sha256-n/bo3hoY7DEP103ftWu3uCLFXEsz+F9rWS22kcF7Ah8=";
+    };
+
+    enableParallelBuilding = true;
+
+    postPatch = ''
+      substituteInPlace 3rdparty/vboot/Makefile --replace 'ar qc ' '$$AR qc '
+      cd ${path}
+      patchShebangs .
+    '';
+
+    makeFlags = [
+      "INSTALL=install"
+      "PREFIX=${placeholder "out"}"
+    ];
+
+    meta = commonMeta // args.meta;
+  } // (removeAttrs args [ "meta" ]));
+
+  utils = {
+    msrtool = generic {
+      pname = "msrtool";
+      meta.description = "Dump chipset-specific MSR registers";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      buildInputs = [ pciutils zlib ];
+      preConfigure = "export INSTALL=install";
+    };
+    cbmem = generic {
+      pname = "cbmem";
+      meta.description = "coreboot console log reader";
+    };
+    ifdtool = generic {
+      pname = "ifdtool";
+      meta.description = "Extract and dump Intel Firmware Descriptor information";
+    };
+    intelmetool = generic {
+      pname = "intelmetool";
+      meta.description = "Dump interesting things about Management Engine";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      buildInputs = [ pciutils zlib ];
+    };
+    cbfstool = generic {
+      pname = "cbfstool";
+      meta.description = "Management utility for CBFS formatted ROM images";
+    };
+    nvramtool = generic {
+      pname = "nvramtool";
+      meta.description = "Read and write coreboot parameters and display information from the coreboot table in CMOS/NVRAM";
+      meta.mainProgram = "nvramtool";
+    };
+    superiotool = generic {
+      pname = "superiotool";
+      meta.description = "User-space utility to detect Super I/O of a mainboard and provide detailed information about the register contents of the Super I/O";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      buildInputs = [ pciutils zlib ];
+    };
+    ectool = generic {
+      pname = "ectool";
+      meta.description = "Dump the RAM of a laptop's Embedded/Environmental Controller (EC)";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      preInstall = "mkdir -p $out/sbin";
+    };
+    inteltool = generic {
+      pname = "inteltool";
+      meta.description = "Provides information about Intel CPU/chipset hardware configuration (register contents, MSRs, etc)";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      buildInputs = [ pciutils zlib ];
+    };
+    amdfwtool = generic {
+      pname = "amdfwtool";
+      meta.description = "Create AMD firmware combination";
+      buildInputs = [ openssl ];
+      nativeBuildInputs = [ pkg-config ];
+      installPhase = ''
+        runHook preInstall
+
+        install -Dm755 amdfwtool $out/bin/amdfwtool
+
+        runHook postInstall
+      '';
+    };
+    acpidump-all = generic {
+      pname = "acpidump-all";
+      path = "util/acpi";
+      meta.description = "Walk through all ACPI tables with their addresses";
+      nativeBuildInputs = [ makeWrapper ];
+      dontBuild = true;
+      installPhase = ''
+        runHook preInstall
+
+        install -Dm755 acpidump-all $out/bin/acpidump-all
+
+        runHook postInstall
+      '';
+      postFixup = ''
+        wrapProgram $out/bin/acpidump-all \
+          --set PATH ${lib.makeBinPath [ coreutils acpica-tools gnugrep gnused file ]}
+      '';
+    };
+  };
+
+in
+utils // {
+  coreboot-utils = (buildEnv {
+    name = "coreboot-utils-${version}";
+    paths = lib.filter (lib.meta.availableOn stdenv.hostPlatform) (lib.attrValues utils);
+    postBuild = "rm -rf $out/sbin";
+  }) // {
+    inherit version;
+    meta = commonMeta;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coreutils/default.nix b/nixpkgs/pkgs/tools/misc/coreutils/default.nix
new file mode 100644
index 000000000000..24e25e584d4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreutils/default.nix
@@ -0,0 +1,176 @@
+{ lib
+, stdenv
+, fetchurl
+, autoreconfHook
+, buildPackages
+, libiconv
+, perl
+, texinfo
+, xz
+, gmpSupport ? true, gmp
+, aclSupport ? stdenv.isLinux, acl
+, attrSupport ? stdenv.isLinux, attr
+, selinuxSupport ? false, libselinux, libsepol
+# No openssl in default version, so openssl-induced rebuilds aren't too big.
+# It makes *sum functions significantly faster.
+, minimal ? true
+, withOpenssl ? !minimal, openssl
+, withPrefix ? false
+, singleBinary ? "symlinks" # you can also pass "shebangs" or false
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus cannot use
+# fetchpatch! All mutable patches (generated by GitHub or cgit) that are needed
+# here should be included directly in Nixpkgs as files.
+
+assert aclSupport -> acl != null;
+assert selinuxSupport -> libselinux != null && libsepol != null;
+
+let
+  inherit (lib) concatStringsSep isString optional optionals optionalString;
+  isCross = (stdenv.hostPlatform != stdenv.buildPlatform);
+in
+stdenv.mkDerivation rec {
+  pname = "coreutils" + (optionalString (!minimal) "-full");
+  version = "9.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/coreutils/coreutils-${version}.tar.xz";
+    hash = "sha256-6mE6TPRGEjJukXIBu7zfvTAd4h/8O1m25cB+BAsnXlI=";
+  };
+
+  postPatch = ''
+    # The test tends to fail on btrfs, f2fs and maybe other unusual filesystems.
+    sed '2i echo Skipping dd sparse test && exit 77' -i ./tests/dd/sparse.sh
+    sed '2i echo Skipping du threshold test && exit 77' -i ./tests/du/threshold.sh
+    sed '2i echo Skipping cp reflink-auto test && exit 77' -i ./tests/cp/reflink-auto.sh
+    sed '2i echo Skipping cp sparse test && exit 77' -i ./tests/cp/sparse.sh
+    sed '2i echo Skipping rm deep-2 test && exit 77' -i ./tests/rm/deep-2.sh
+    sed '2i echo Skipping du long-from-unreadable test && exit 77' -i ./tests/du/long-from-unreadable.sh
+
+    # Some target platforms, especially when building inside a container have
+    # issues with the inotify test.
+    sed '2i echo Skipping tail inotify dir recreate test && exit 77' -i ./tests/tail/inotify-dir-recreate.sh
+
+    # sandbox does not allow setgid
+    sed '2i echo Skipping chmod setgid test && exit 77' -i ./tests/chmod/setgid.sh
+    substituteInPlace ./tests/install/install-C.sh \
+      --replace 'mode3=2755' 'mode3=1755'
+
+    # Fails on systems with a rootfs. Looks like a bug in the test, see
+    # https://lists.gnu.org/archive/html/bug-coreutils/2019-12/msg00000.html
+    sed '2i print "Skipping df skip-rootfs test"; exit 77' -i ./tests/df/skip-rootfs.sh
+
+    # these tests fail in the unprivileged nix sandbox (without nix-daemon) as we break posix assumptions
+    for f in ./tests/chgrp/{basic.sh,recurse.sh,default-no-deref.sh,no-x.sh,posix-H.sh}; do
+      sed '2i echo Skipping chgrp && exit 77' -i "$f"
+    done
+    for f in gnulib-tests/{test-chown.c,test-fchownat.c,test-lchown.c}; do
+      echo "int main() { return 77; }" > "$f"
+    done
+
+    # intermittent failures on builders, unknown reason
+    sed '2i echo Skipping du basic test && exit 77' -i ./tests/du/basic.sh
+  '' + (optionalString (stdenv.hostPlatform.libc == "musl") (concatStringsSep "\n" [
+    ''
+      echo "int main() { return 77; }" > gnulib-tests/test-parse-datetime.c
+      echo "int main() { return 77; }" > gnulib-tests/test-getlogin.c
+    ''
+  ])) + (optionalString stdenv.isAarch64 ''
+    # Sometimes fails: https://github.com/NixOS/nixpkgs/pull/143097#issuecomment-954462584
+    sed '2i echo Skipping cut huge range test && exit 77' -i ./tests/cut/cut-huge-range.sh
+  '');
+
+  outputs = [ "out" "info" ];
+  separateDebugInfo = true;
+
+  nativeBuildInputs = [
+    # autoreconfHook is due to patch, normally only needed for cygwin
+    autoreconfHook
+    perl
+    xz.bin
+  ]
+  ++ optionals stdenv.hostPlatform.isCygwin [
+    # due to patch
+    texinfo
+  ];
+
+  buildInputs = [ ]
+    ++ optional aclSupport acl
+    ++ optional attrSupport attr
+    ++ optional gmpSupport gmp
+    ++ optional withOpenssl openssl
+    ++ optionals selinuxSupport [ libselinux libsepol ]
+    # TODO(@Ericson2314): Investigate whether Darwin could benefit too
+    ++ optional (isCross && stdenv.hostPlatform.libc != "glibc") libiconv;
+
+  configureFlags = [ "--with-packager=https://nixos.org" ]
+    ++ optional (singleBinary != false)
+      ("--enable-single-binary" + optionalString (isString singleBinary) "=${singleBinary}")
+    ++ optional withOpenssl "--with-openssl"
+    ++ optional stdenv.hostPlatform.isSunOS "ac_cv_func_inotify_init=no"
+    ++ optional withPrefix "--program-prefix=g"
+    # the shipped configure script doesn't enable nls, but using autoreconfHook
+    # does so which breaks the build
+    ++ optional stdenv.isDarwin "--disable-nls"
+    ++ optionals (isCross && stdenv.hostPlatform.libc == "glibc") [
+      # TODO(19b98110126fde7cbb1127af7e3fe1568eacad3d): Needed for fstatfs() I
+      # don't know why it is not properly detected cross building with glibc.
+      "fu_cv_sys_stat_statfs2_bsize=yes"
+    ]
+    # /proc/uptime is available on Linux and produces accurate results even if
+    # the boot time is set to the epoch because the system has no RTC. We
+    # explicitly enable it for cases where it can't be detected automatically,
+    # such as when cross-compiling.
+    ++ optional stdenv.hostPlatform.isLinux "gl_cv_have_proc_uptime=yes";
+
+  # The tests are known broken on Cygwin
+  # (http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/19025),
+  # Darwin (http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/19351),
+  # and {Open,Free}BSD.
+  # With non-standard storeDir: https://github.com/NixOS/nix/issues/512
+  doCheck = (!isCross)
+    && (stdenv.hostPlatform.libc == "glibc" || stdenv.hostPlatform.libc == "musl")
+    && !stdenv.isAarch32;
+
+  # Prevents attempts of running 'help2man' on cross-built binaries.
+  PERL = if isCross then "missing" else null;
+
+  enableParallelBuilding = true;
+
+  NIX_LDFLAGS = optionalString selinuxSupport "-lsepol";
+  FORCE_UNSAFE_CONFIGURE = optionalString stdenv.hostPlatform.isSunOS "1";
+  env.NIX_CFLAGS_COMPILE = toString ([]
+    # Work around a bogus warning in conjunction with musl.
+    ++ optional stdenv.hostPlatform.isMusl "-Wno-error"
+    ++ optional stdenv.hostPlatform.isAndroid "-D__USE_FORTIFY_LEVEL=0");
+
+  # Works around a bug with 8.26:
+  # Makefile:3440: *** Recursive variable 'INSTALL' references itself (eventually).  Stop.
+  preInstall = optionalString isCross ''
+    sed -i Makefile -e 's|^INSTALL =.*|INSTALL = ${buildPackages.coreutils}/bin/install -c|'
+  '';
+
+  postInstall = optionalString (isCross && !minimal) ''
+    rm $out/share/man/man1/*
+    cp ${buildPackages.coreutils-full}/share/man/man1/* $out/share/man/man1
+  ''
+  # du: 8.7 M locale + 0.4 M man pages
+  + optionalString minimal ''
+    rm -r "$out/share"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/coreutils/";
+    description = "The GNU Core Utilities";
+    longDescription = ''
+      The GNU Core Utilities are the basic file, shell and text manipulation
+      utilities of the GNU operating system. These are the core utilities which
+      are expected to exist on every operating system.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ das_j ];
+    platforms = with platforms; unix ++ windows;
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cowsay/default.nix b/nixpkgs/pkgs/tools/misc/cowsay/default.nix
new file mode 100644
index 000000000000..62ae9994fff8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cowsay/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, perl, fetchFromGitHub, fetchpatch, makeWrapper, nix-update-script, testers, cowsay }:
+
+stdenv.mkDerivation rec {
+  pname = "cowsay";
+  version = "3.7.0";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "cowsay-org";
+    repo = "cowsay";
+    rev = "v${version}";
+    hash = "sha256-t1grmCPQhRgwS64RjEwkK61F2qxxMBKuv0/DzBTnL3s=";
+  };
+
+  patches = [
+    # Install cowthink as a symlink, not a copy
+    # See https://github.com/cowsay-org/cowsay/pull/18
+    (fetchpatch {
+      url = "https://github.com/cowsay-org/cowsay/commit/9e129fa0933cf1837672c97f5ae5ad4a1a10ec11.patch";
+      hash = "sha256-zAYEUAM5MkyMONAl5BXj8hBHRalQVAOdpxgiM+Ewmlw=";
+    })
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  postInstall = ''
+    wrapProgram $out/bin/cowsay \
+      --suffix COWPATH : $out/share/cowsay/cows
+  '';
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = cowsay;
+      command = "cowsay --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "A program which generates ASCII pictures of a cow with a message";
+    homepage = "https://cowsay.diamonds";
+    changelog = "https://github.com/cowsay-org/cowsay/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ rob anthonyroussel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cp210x-program/default.nix b/nixpkgs/pkgs/tools/misc/cp210x-program/default.nix
new file mode 100644
index 000000000000..b734008fad2a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cp210x-program/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cp210x-program";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "VCTLabs";
+    repo = "cp210x-program";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-IjKshP12WfFly9cPm6svD4qZW6cT8C7lOVrGenSqbfY=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    hexdump
+    pyusb
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/cp210x-program{.py,}
+  '';
+
+  meta = with lib; {
+    description = "EEPROM tool for Silabs CP210x USB-Serial adapter";
+    homepage = "https://github.com/VCTLabs/cp210x-program";
+    license = licenses.lgpl21Only; # plus/only status unclear
+    maintainers = with maintainers; [ ckie ];
+    mainProgram = "cp210x-program";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cp437/default.nix b/nixpkgs/pkgs/tools/misc/cp437/default.nix
new file mode 100644
index 000000000000..cb4b1b8508cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cp437/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "cp437";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "keaston";
+    repo  = "cp437";
+    rev   = "v${version}";
+    sha256 = "18f4mnfnyviqclbhmbhix80k823481ypkwbp26qfvhnxdgzbggcc";
+  };
+
+  installPhase = ''
+    install -Dm755 cp437 -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = ''
+      Emulates an old-style "code page 437" / "IBM-PC" character
+      set terminal on a modern UTF-8 terminal emulator
+    '';
+    homepage = "https://github.com/keaston/cp437";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jb55 ];
+    mainProgram = "cp437";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cpufetch/default.nix b/nixpkgs/pkgs/tools/misc/cpufetch/default.nix
new file mode 100644
index 000000000000..d4686dd79df4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpufetch/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cpufetch";
+  version = "1.05";
+
+  src = fetchFromGitHub {
+    owner = "Dr-Noob";
+    repo = "cpufetch";
+    rev = "v${version}";
+    sha256 = "sha256-8g4nFV3PgYRagzUG7S2ifpuSaCCZ5HlwsjkQ+wdk4Yw=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    install -Dm755 cpufetch   $out/bin/cpufetch
+    install -Dm644 LICENSE    $out/share/licenses/cpufetch/LICENSE
+    installManPage cpufetch.1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Simplistic yet fancy CPU architecture fetching tool";
+    license = licenses.gpl2Only;
+    homepage = "https://github.com/Dr-Noob/cpufetch";
+    changelog = "https://github.com/Dr-Noob/cpufetch/releases/tag/v${version}";
+    maintainers = with maintainers; [ devhell ];
+    mainProgram = "cpufetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cpulimit/default.nix b/nixpkgs/pkgs/tools/misc/cpulimit/default.nix
new file mode 100644
index 000000000000..75c3ba733b14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpulimit/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "cpulimit";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "opsengine";
+    repo = "cpulimit";
+    rev = "v${version}";
+    sha256 = "1dz045yhcsw1rdamzpz4bk8mw888in7fyqk1q1b3m1yk4pd1ahkh";
+  };
+
+  patches = [ ./remove-sys-sysctl.h.patch ./get-missing-basename.patch ];
+
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp src/cpulimit $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/opsengine/cpulimit";
+    description = "CPU usage limiter";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+    mainProgram = "cpulimit";
+    maintainers = [ maintainers.jsoo1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cpulimit/get-missing-basename.patch b/nixpkgs/pkgs/tools/misc/cpulimit/get-missing-basename.patch
new file mode 100644
index 000000000000..d27eda0b6fa9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpulimit/get-missing-basename.patch
@@ -0,0 +1,12 @@
+diff --git a/src/process_group.c b/src/process_group.c
+index 06d73a6..3ca66b0 100644
+--- a/src/process_group.c
++++ b/src/process_group.c
+@@ -20,6 +20,7 @@
+  */
+ 
+ #include <string.h>
++#include <libgen.h>
+ #include <stdlib.h>
+ #include <limits.h>
+ #include <sys/time.h>
diff --git a/nixpkgs/pkgs/tools/misc/cpulimit/remove-sys-sysctl.h.patch b/nixpkgs/pkgs/tools/misc/cpulimit/remove-sys-sysctl.h.patch
new file mode 100644
index 000000000000..a152cab3acc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpulimit/remove-sys-sysctl.h.patch
@@ -0,0 +1,21 @@
+Remove references to sys/sysctl.h which were deprecated long ago.
+
+diff --git a/src/cpulimit.c b/src/cpulimit.c
+index 50eabea..eba4615 100644
+--- a/src/cpulimit.c
++++ b/src/cpulimit.c
+@@ -38,7 +38,9 @@
+ #include <string.h>
+ #include <sys/stat.h>
+ #include <sys/time.h>
++#ifdef __APPLE__
+ #include <sys/sysctl.h>
++#endif
+ #include <sys/resource.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+
+-#ifdef __APPLE__ || __FREEBSD__
++#if defined(__APPLE__) || defined(__FREEBSD__)
+ #include <libgen.h>
+ #endif
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/cpuminer/default.nix b/nixpkgs/pkgs/tools/misc/cpuminer/default.nix
new file mode 100644
index 000000000000..4b7c5fc7f486
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpuminer/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, curl
+, jansson
+, perl
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cpuminer";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "pooler";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0f44i0z8rid20c2hiyp92xq0q0mjj537r05sa6vdbc0nl0a5q40i";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-build-on-aarch64.patch";
+      url = "https://github.com/pooler/cpuminer/commit/5f02105940edb61144c09a7eb960bba04a10d5b7.patch";
+      hash = "sha256-lGAcwDcXgcJBFhasSEdQIEIY7pp6x/PEXHBsVwAOqhc=";
+    })
+  ];
+
+  postPatch = if stdenv.cc.isClang then "${perl}/bin/perl ./nomacro.pl" else null;
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ curl jansson ];
+
+  configureFlags = [ "CFLAGS=-O3" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/pooler/cpuminer";
+    description = "CPU miner for Litecoin and Bitcoin";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "minerd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/crex/default.nix b/nixpkgs/pkgs/tools/misc/crex/default.nix
new file mode 100644
index 000000000000..d173457d7190
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/crex/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "crex";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "octobanana";
+    repo = "crex";
+    rev = version;
+    sha256 = "086rvwl494z48acgsq3yq11qh1nxm8kbf11adn16aszai4d4ipr3";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt --replace "/usr/local/bin" "bin"
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "Explore, test, and check regular expressions in the terminal";
+    homepage = "https://octobanana.com/software/crex";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+    platforms = platforms.all;
+    mainProgram = "crex";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/crudini/default.nix b/nixpkgs/pkgs/tools/misc/crudini/default.nix
new file mode 100644
index 000000000000..ea77f4db163e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/crudini/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3Packages
+, help2man
+, installShellFiles
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "crudini";
+  version = "0.9.5";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "pixelb";
+    repo = "crudini";
+    rev = version;
+    hash = "sha256-BU4u7uBsNyDOwWUjOIlBWcf1AeUXXZ+johAe+bjws1U=";
+  };
+
+  postPatch = ''
+    patchShebangs crudini.py crudini-help tests/test.sh
+  '';
+
+  nativeBuildInputs = [
+    help2man
+    installShellFiles
+    python3Packages.setuptools
+    python3Packages.setuptools-scm
+    python3Packages.wheel
+  ];
+
+  propagatedBuildInputs = with python3Packages; [ iniparse ];
+
+  postInstall = ''
+    # this just creates the man page
+    make all
+
+    install -Dm444 -t $out/share/doc/${pname} README.md EXAMPLES
+    installManPage *.1
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    pushd tests >/dev/null
+    ./test.sh
+    popd >/dev/null
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "A utility for manipulating ini files ";
+    homepage = "https://www.pixelbeat.org/programs/crudini/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "crudini";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/crypto-tracker/default.nix b/nixpkgs/pkgs/tools/misc/crypto-tracker/default.nix
new file mode 100644
index 000000000000..273a0aa63e4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/crypto-tracker/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "crypto-tracker";
+  version = "0.1.8";
+
+  src = fetchFromGitHub {
+    owner  = "Nox04";
+    repo   = "crypto-tracker";
+    rev    = "v${version}";
+    hash = "sha256-8tTaXpHZWcDq0Jfa9Hf258VYwfimLhYjCAzD4X/Ow0s=";
+  };
+
+  vendorHash = "sha256-ORdDrZ61u76mz2oZyxfdf7iuo9SnuQeDxESt9lORhgQ=";
+
+  meta = with lib; {
+    description = "Program to retrieve the latest price for several cryptocurrencies using the CoinMarketCap API";
+    homepage = "https://github.com/Nox04/crypto-tracker";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tiredofit ];
+    mainProgram = "crypto-tracker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/csv2latex/default.nix b/nixpkgs/pkgs/tools/misc/csv2latex/default.nix
new file mode 100644
index 000000000000..cc286c54e9ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/csv2latex/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "csv2latex";
+  version = "0.23.1";
+
+  src = fetchurl {
+    url = "http://brouits.free.fr/csv2latex/csv2latex-${version}.tar.gz";
+    sha256 = "sha256-k1vQyrVJmfaJ7jVaoW2dkPD7GO8EoDqJY5m8O2U/kYw=";
+  };
+
+  installPhase = ''
+  mkdir -p $out/bin
+  make PREFIX=$out install
+  '';
+
+  meta = with lib; {
+    description = "Command-line CSV to LaTeX file converter";
+    homepage = "http://brouits.free.fr/csv2latex/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.catern ];
+    mainProgram = "csv2latex";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/csv2parquet/default.nix b/nixpkgs/pkgs/tools/misc/csv2parquet/default.nix
new file mode 100644
index 000000000000..0d6050d703a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/csv2parquet/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "csv2parquet";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "domoritz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-499DC0kLvvP5Oq2WYRb9BIppTdfm41u8hwrPU8b66Zw=";
+  };
+
+  cargoHash = "sha256-GoUmr1NArOyGx1A9E9K/Od0xXR2YxZqBcBdYFumgIJU=";
+
+  meta = with lib; {
+    description = "Convert CSV files to Apache Parquet";
+    homepage = "https://github.com/domoritz/csv2parquet";
+    license = licenses.mit;
+    maintainers = with maintainers; [ john-shaffer ];
+    mainProgram = "csv2parquet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/csvs-to-sqlite/default.nix b/nixpkgs/pkgs/tools/misc/csvs-to-sqlite/default.nix
new file mode 100644
index 000000000000..28537e9631ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/csvs-to-sqlite/default.nix
@@ -0,0 +1,62 @@
+{ lib, python3, fetchFromGitHub, fetchpatch }:
+
+with python3.pkgs; buildPythonApplication rec {
+  pname = "csvs-to-sqlite";
+  version = "1.3";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "simonw";
+    repo = pname;
+    rev = version;
+    hash = "sha256-wV6htULG3lg2IhG2bXmc/9vjcK8/+WA7jm3iJu4ZoOE=";
+  };
+
+  patches = [
+    # https://github.com/simonw/csvs-to-sqlite/pull/92
+    (fetchpatch {
+      name = "pandas2-compatibility-1.patch";
+      url = "https://github.com/simonw/csvs-to-sqlite/commit/fcd5b9c7485bc7b95bf2ed9507f18a60728e0bcb.patch";
+      hash = "sha256-ZmaNWxsqeNw5H5gAih66DLMmzmePD4no1B5mTf8aFvI=";
+    })
+    (fetchpatch {
+      name = "pandas2-compatibility-2.patch";
+      url = "https://github.com/simonw/csvs-to-sqlite/commit/3d190aa44e8d3a66a9a3ca5dc11c6fe46da024df.patch";
+      hash = "sha256-uYUH0Mhn6LIf+AHcn6WuCo5zFuSNWOZBM+AoqkmMnSI=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = [
+    click
+    dateparser
+    pandas
+    py-lru-cache
+    six
+  ];
+
+  pythonRelaxDeps = [
+    "click"
+  ];
+
+  nativeCheckInputs = [
+    cogapp
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # Test needs to be adjusted for click >= 8.
+    "test_if_cog_needs_to_be_run"
+  ];
+
+  meta = with lib; {
+    description = "Convert CSV files into a SQLite database";
+    homepage = "https://github.com/simonw/csvs-to-sqlite";
+    license = licenses.asl20;
+    maintainers = [ maintainers.costrouc ];
+    mainProgram = "csvs-to-sqlite";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cunit/default.nix b/nixpkgs/pkgs/tools/misc/cunit/default.nix
new file mode 100644
index 000000000000..77af6497a573
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cunit/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, autoconf, automake, libtool, autoreconfHook}:
+
+stdenv.mkDerivation rec {
+  pname = "CUnit";
+  version = "2.1-3";
+
+  nativeBuildInputs = [ autoreconfHook autoconf automake ];
+  buildInputs = [libtool];
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cunit/CUnit/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "057j82da9vv4li4z5ri3227ybd18nzyq81f6gsvhifs5z0vr3cpm";
+  };
+
+  meta = {
+    description = "A Unit Testing Framework for C";
+
+    longDescription = ''
+      CUnit is a lightweight system for writing, administering, and running
+      unit tests in C.  It provides C programmers a basic testing functionality
+      with a flexible variety of user interfaces.
+    '';
+
+    homepage = "https://cunit.sourceforge.net/";
+
+    license = lib.licenses.lgpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cutecom/default.nix b/nixpkgs/pkgs/tools/misc/cutecom/default.nix
new file mode 100644
index 000000000000..490d33b123d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cutecom/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitLab, qtserialport, cmake, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "cutecom";
+  version = "0.51.0+patch";
+
+  src = fetchFromGitLab {
+    owner = "cutecom";
+    repo = "cutecom";
+    rev = "70d0c497acf8f298374052b2956bcf142ed5f6ca";
+    sha256 = "X8jeESt+x5PxK3rTNC1h1Tpvue2WH09QRnG2g1eMoEE=";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "/Applications" "$out/Applications"
+  '';
+
+  buildInputs = [ qtserialport ];
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  postInstall = if stdenv.isDarwin then ''
+    mkdir -p $out/Applications
+  '' else ''
+    cd ..
+    mkdir -p "$out"/share/{applications,icons/hicolor/scalable/apps,man/man1}
+    cp cutecom.desktop "$out/share/applications"
+    cp images/cutecom.svg "$out/share/icons/hicolor/scalable/apps"
+    cp cutecom.1 "$out/share/man/man1"
+  '';
+
+  meta = with lib; {
+    description = "A graphical serial terminal";
+    homepage = "https://gitlab.com/cutecom/cutecom/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bennofs ];
+    platforms = platforms.unix;
+    mainProgram = "cutecom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cyberchef/default.nix b/nixpkgs/pkgs/tools/misc/cyberchef/default.nix
new file mode 100644
index 000000000000..caa1f693f368
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cyberchef/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, fetchzip
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cyberchef";
+  version = "10.7.0";
+
+  src = fetchzip {
+    url = "https://github.com/gchq/CyberChef/releases/download/v${version}/CyberChef_v${version}.zip";
+    sha256 = "sha256-/miIdPP00vIh3Em8BFDoxkYFpgU4Vty4V5RiCgqOKPo=";
+    stripRoot = false;
+  };
+
+  installPhase = ''
+    mkdir -p "$out/share/cyberchef"
+    mv "CyberChef_v${version}.html" index.html
+    mv * "$out/share/cyberchef"
+  '';
+
+  meta = with lib; {
+    description = "The Cyber Swiss Army Knife for encryption, encoding, compression and data analysis";
+    homepage = "https://gchq.github.io/CyberChef";
+    changelog = "https://github.com/gchq/CyberChef/blob/v${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ sebastianblunt ];
+    license = licenses.asl20;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cyclonedx-python/default.nix b/nixpkgs/pkgs/tools/misc/cyclonedx-python/default.nix
new file mode 100644
index 000000000000..fa5be39000af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cyclonedx-python/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+
+      # Requires 'cyclonedx-python-lib = ">= 2.0.0, < 4.0.0"'
+      cyclonedx-python-lib = super.cyclonedx-python-lib.overridePythonAttrs (oldAttrs: rec {
+        version = "3.1.5";
+        src = fetchFromGitHub {
+          owner = "CycloneDX";
+          repo = "cyclonedx-python-lib";
+          rev = "refs/tags/v${version}";
+          hash = "sha256-4lA8OdmvQD94jTeDf+Iz7ZyEQ9fZzCxnXQG9Ir8FKhk=";
+        };
+      });
+    };
+  };
+in
+with py.pkgs;
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cyclonedx-python";
+  version = "3.11.7";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "CycloneDX";
+    repo = "cyclonedx-python";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-jU/0FkQCyph59TnEE+lckJXsU9whfvWp7dkdfzprYw8=";
+  };
+
+  nativeBuildInputs = with py.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with py.pkgs; [
+    chardet
+    cyclonedx-python-lib
+    packageurl-python
+    pip-requirements-parser
+    setuptools
+    toml
+  ];
+
+  # The tests want access to the cyclonedx binary
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "cyclonedx"
+  ];
+
+  meta = with lib; {
+    description = "Creates CycloneDX Software Bill of Materials (SBOM) from Python projects";
+    homepage = "https://github.com/CycloneDX/cyclonedx-python";
+    changelog = "https://github.com/CycloneDX/cyclonedx-python/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    mainProgram = "cyclonedx-py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dabet/default.nix b/nixpkgs/pkgs/tools/misc/dabet/default.nix
new file mode 100644
index 000000000000..acdc66cbad8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dabet/default.nix
@@ -0,0 +1,25 @@
+{ lib, rustPlatform, fetchFromGitea }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dabet";
+  version = "3.0.1";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-BYE+GGwf84zENf+lPS98OzZQbXxd7kykWL+B3guyVNI=";
+  };
+
+  cargoHash = "sha256-kguQmCXP5+E6e8CSKP18faa93VKToU2pcQixDOBrd+8=";
+
+  meta = with lib; {
+    description = "Print the duration between two times";
+    homepage = "https://codeberg.org/annaaurora/dabet";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+    mainProgram = "dabet";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/daktilo/default.nix b/nixpkgs/pkgs/tools/misc/daktilo/default.nix
new file mode 100644
index 000000000000..b28f3b08f8cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/daktilo/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+, unixtools
+, pkg-config
+, alsa-lib
+, xorg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "daktilo";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "daktilo";
+    rev = "v${version}";
+    hash = "sha256-kbJwBOUODtHdngbfa6HbbQJ0kgW6f64c0EG3y8wLymw=";
+  };
+
+  cargoHash = "sha256-u9vL2HAUgP43ZDwIEK2u/I+KUEjQsfXda03gnGJ1Krc=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+  ];
+
+  buildInputs = [
+    alsa-lib
+    xorg.libX11
+    xorg.libXi
+    xorg.libXtst
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  nativeCheckInputs = [
+    unixtools.script
+  ];
+
+  postInstall = ''
+    mkdir -p man completions
+
+    OUT_DIR=man $out/bin/daktilo-mangen
+    OUT_DIR=completions $out/bin/daktilo-completions
+
+    installManPage man/daktilo.1
+    installShellCompletion \
+      completions/daktilo.{bash,fish} \
+      --zsh completions/_daktilo
+
+    rm $out/bin/daktilo-{completions,mangen}
+  '';
+
+  meta = with lib; {
+    description = "Turn your keyboard into a typewriter";
+    homepage = "https://github.com/orhun/daktilo";
+    changelog = "https://github.com/orhun/daktilo/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ orhun ];
+    mainProgram = "daktilo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dashing/default.nix b/nixpkgs/pkgs/tools/misc/dashing/default.nix
new file mode 100644
index 000000000000..c7ec598fe309
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dashing/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, dashing }:
+
+buildGoModule rec {
+  pname = "dashing";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "technosophos";
+    repo = pname;
+    rev = version;
+    hash = "sha256-CcEgGPnJGrTXrgo82u5dxQTB/YjFBhHdsv7uggsHG1Y=";
+  };
+
+  vendorHash = "sha256-XeUFmzf6y0S82gMOzkj4AUNFkVvkVOwauYpqY4jeWLM=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = dashing;
+  };
+
+  meta = with lib; {
+    description = "A Dash Generator Script for Any HTML";
+    homepage = "https://github.com/technosophos/dashing";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "dashing";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dasht/default.nix b/nixpkgs/pkgs/tools/misc/dasht/default.nix
new file mode 100644
index 000000000000..4ab9cfdd0e0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dasht/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+, installShellFiles
+, coreutils
+, gnused
+, gnugrep
+, sqlite
+, wget
+, w3m
+, socat
+, gawk
+}:
+
+stdenv.mkDerivation rec {
+  pname   = "dasht";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner  = "sunaku";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "08wssmifxi7pnvn9gqrvpzpkc2qpkfbzbhxh0dk1gff2y2211qqk";
+  };
+
+  deps = lib.makeBinPath [
+    coreutils
+    gnused
+    gnugrep
+    sqlite
+    wget
+    w3m
+    socat
+    gawk
+    (placeholder "out")
+  ];
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp bin/* $out/bin/
+
+    installManPage man/man1/*
+    installShellCompletion --zsh etc/zsh/completions/*
+
+    for i in $out/bin/*; do
+      echo "Wrapping $i"
+      wrapProgram $i --prefix PATH : ${deps};
+    done;
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Search API docs offline, in terminal or browser";
+    homepage    = "https://sunaku.github.io/dasht/man";
+    license     = lib.licenses.isc;
+    platforms   = lib.platforms.unix; #cannot test other
+    maintainers = with lib.maintainers; [ matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/datamash/default.nix b/nixpkgs/pkgs/tools/misc/datamash/default.nix
new file mode 100644
index 000000000000..15cd8234a573
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/datamash/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "datamash";
+  version = "1.8";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-etl+jH72Ft0DqlvWeuJMSIJy2z59H1d0FhwYt18p9v0=";
+  };
+
+  meta = with lib; {
+    description = "A command-line program which performs basic numeric,textual and statistical operations on input textual data files";
+    homepage = "https://www.gnu.org/software/datamash/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub vrthra ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/datefmt/default.nix b/nixpkgs/pkgs/tools/misc/datefmt/default.nix
new file mode 100644
index 000000000000..0b2dd7fae270
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/datefmt/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, datefmt, testers }:
+
+stdenv.mkDerivation rec {
+  pname = "datefmt";
+  version = "0.2.2";
+
+  src = fetchurl {
+    url = "https://cdn.jb55.com/tarballs/datefmt/datefmt-${version}.tar.gz";
+    sha256 = "sha256-HgW/vOGVEmAbm8k3oIwIa+cogq7qmX7MfTmHqxv9lhY=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  passthru.tests.version = testers.testVersion { package = datefmt; };
+
+  meta = with lib; {
+    homepage = "https://jb55.com/datefmt";
+    description = "A tool that formats timestamps in text streams";
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jb55 ];
+    mainProgram = "datefmt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dateutils/default.nix b/nixpkgs/pkgs/tools/misc/dateutils/default.nix
new file mode 100644
index 000000000000..60219070d96a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dateutils/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, autoreconfHook, tzdata }:
+
+stdenv.mkDerivation rec {
+  version = "0.4.11";
+  pname = "dateutils";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/hroptatyr/dateutils/downloads/${pname}-${version}.tar.xz";
+    sha256 = "sha256-uP6gsJcUu63yArmzQ0zOa1nCgueGkmjQwIuFiA/btEY=";
+  };
+
+  # https://github.com/hroptatyr/dateutils/issues/148
+  postPatch = "rm test/dzone.008.ctst";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ tzdata ]; # needed for datezone
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A bunch of tools that revolve around fiddling with dates and times in the command line";
+    homepage = "http://www.fresse.org/dateutils/";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.paperdigits ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dbacl/default.nix b/nixpkgs/pkgs/tools/misc/dbacl/default.nix
new file mode 100644
index 000000000000..6a2700f482a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dbacl/default.nix
@@ -0,0 +1,19 @@
+{fetchurl, lib, stdenv}:
+
+stdenv.mkDerivation rec {
+  pname = "dbacl";
+  version = "1.14";
+
+  src = fetchurl {
+    url = "https://www.lbreyer.com/gpl/dbacl-${version}.tar.gz";
+    sha256 = "0224g6x71hyvy7jikfxmgcwww1r5lvk0jx36cva319cb9nmrbrq7";
+  };
+
+  meta = {
+    homepage = "https://dbacl.sourceforge.net/";
+    longDescription = "a digramic Bayesian classifier for text recognition.";
+    maintainers = [];
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dbus-map/default.nix b/nixpkgs/pkgs/tools/misc/dbus-map/default.nix
new file mode 100644
index 000000000000..955a248be7bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dbus-map/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, pkg-config, glib, procps, libxml2 }:
+
+stdenv.mkDerivation {
+  pname = "dbus-map";
+  version = "2015-05-28";
+  src = fetchFromGitHub {
+    owner = "taviso";
+    repo = "dbusmap";
+    rev = "43703fc5e15743309b67131b5ba457b0d6ea7667";
+    sha256 = "1pjqn6w29ci8hfxkn1aynzfc8nvy3pqv3hixbxwr7qx20g4rwvdc";
+  };
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    glib procps libxml2
+  ];
+  installPhase = ''
+    mkdir -p $out/bin
+    mv dbus-map $out/bin
+  '';
+  meta = with lib; {
+    description = "Simple utility for enumerating D-Bus endpoints, an nmap for D-Bus";
+    homepage = "https://github.com/taviso/dbusmap";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    mainProgram = "dbus-map";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ddate/default.nix b/nixpkgs/pkgs/tools/misc/ddate/default.nix
new file mode 100644
index 000000000000..012e00c8f972
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ddate/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "ddate";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "bo0ts";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "1qchxnxvghbma6gp1g78wnjxsri0b72ha9axyk31cplssl7yn73f";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bo0ts/ddate";
+    description = "Discordian version of the date program";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ kovirobi ];
+    platforms = platforms.all;
+    mainProgram = "ddate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ddccontrol/default.nix b/nixpkgs/pkgs/tools/misc/ddccontrol/default.nix
new file mode 100644
index 000000000000..630b06bcfb3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ddccontrol/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, intltool
+, libxml2
+, pciutils
+, pkg-config
+, gtk2
+, ddccontrol-db
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ddccontrol";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "ddccontrol";
+    repo = "ddccontrol";
+    rev = version;
+    sha256 = "sha256-100SITpGbui/gRhFjVZxn6lZRB0najtGHd18oUpByJo=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    intltool
+    pkg-config
+  ];
+
+  buildInputs = [
+    libxml2
+    pciutils
+    gtk2
+    ddccontrol-db
+  ];
+
+  patches = [
+    # Upstream commit, fixed the version number in v1.0.0
+    (fetchpatch {
+      url = "https://github.com/ddccontrol/ddccontrol/commit/fc8c5b5d0f2b64b08b95f4a7d8f47f2fd8ceec34.patch";
+      hash = "sha256-SB1BaolTNCUYgj38nMg1uLUqOHvnwCr8T3cnfu/7rjI=";
+    })
+  ];
+
+  configureFlags = [
+    "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+  ];
+
+  prePatch = ''
+    substituteInPlace configure.ac              \
+      --replace                                 \
+      "\$""{datadir}/ddccontrol-db"             \
+      "${ddccontrol-db}/share/ddccontrol-db"
+
+    substituteInPlace src/ddcpci/Makefile.am    \
+       --replace "chmod 4711" "chmod 0711"
+  '';
+
+  preConfigure = ''
+    intltoolize --force
+  '';
+
+  meta = with lib; {
+    description = "A program used to control monitor parameters by software";
+    homepage = "https://github.com/ddccontrol/ddccontrol";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with lib.maintainers; [ pakhfn ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ddcutil/default.nix b/nixpkgs/pkgs/tools/misc/ddcutil/default.nix
new file mode 100644
index 000000000000..c8e009569cd5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ddcutil/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchurl
+, autoreconfHook
+, pkg-config
+, glib
+, jansson
+, udev
+, libgudev
+, libusb1
+, libdrm
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ddcutil";
+  version = "2.1.3";
+
+  src = fetchurl {
+    url = "https://www.ddcutil.com/tarballs/ddcutil-${version}.tar.gz";
+    hash = "sha256-l6C9cJ0MfffzULuH9DIoNzGKqp7o4cwpbDrbC93yc/g=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [
+    glib
+    jansson
+    libdrm
+    libgudev
+    libusb1
+    udev
+    xorg.libXext
+    xorg.libXrandr
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "http://www.ddcutil.com/";
+    description = "Query and change Linux monitor settings using DDC/CI and USB";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rnhmjoj ];
+    changelog = "https://github.com/rockowitz/ddcutil/blob/v${version}/CHANGELOG.md";
+    mainProgram = "ddcutil";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix b/nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix
new file mode 100644
index 000000000000..d70994753dbd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix
@@ -0,0 +1,89 @@
+{lib, stdenv, fetchurl, fetchpatch, xz, dpkg
+, libxslt, docbook_xsl, makeWrapper, writeShellScript
+, python3Packages
+, perlPackages, curl, gnupg, diffutils, nano, pkg-config, bash-completion, help2man
+, sendmailPath ? "/run/wrappers/bin/sendmail"
+}:
+
+let
+  inherit (python3Packages) python setuptools;
+  sensible-editor = writeShellScript "sensible-editor" ''
+    exec ''${EDITOR-${nano}/bin/nano} "$@"
+  '';
+in stdenv.mkDerivation rec {
+  version = "2.23.5";
+  pname = "debian-devscripts";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/d/devscripts/devscripts_${version}.tar.xz";
+    hash = "sha256-j0fUVTS/lPKFdgeMhksiJz2+E5koB07IK2uEj55EWG0=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "hardening-check-obey-binutils-env-vars.patch";
+      url = "https://github.com/Debian/devscripts/pull/2/commits/c6a018e0ef50a1b0cb4962a2f96dae7c6f21f1d4.patch";
+      hash = "sha256-UpS239JiAM1IYxNuJLdILq2h0xlR5t0Tzhj47xiMHww=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace scripts/Makefile --replace /usr/share/dpkg ${dpkg}/share/dpkg
+    substituteInPlace scripts/debrebuild.pl --replace /usr/bin/perl ${perlPackages.perl}/bin/perl
+    patchShebangs scripts
+  '';
+
+  nativeBuildInputs = [ makeWrapper pkg-config ];
+  buildInputs = [ xz dpkg libxslt python setuptools curl gnupg diffutils bash-completion help2man ] ++
+    (with perlPackages; [ perl CryptSSLeay LWP TimeDate DBFile FileDesktopEntry ParseDebControl LWPProtocolHttps Moo FileHomeDir IPCRun FileDirList FileTouch ]);
+
+  preConfigure = ''
+    export PERL5LIB="$PERL5LIB''${PERL5LIB:+:}${dpkg}";
+    tgtpy="$out/${python.sitePackages}"
+    mkdir -p "$tgtpy"
+    export PYTHONPATH="$PYTHONPATH''${PYTHONPATH:+:}$tgtpy"
+    find lib po4a scripts -type f -exec sed -r \
+      -e "s@/usr/bin/gpg(2|)@${gnupg}/bin/gpg@g" \
+      -e "s@/usr/(s|)bin/sendmail@${sendmailPath}@g" \
+      -e "s@/usr/bin/diff@${diffutils}/bin/diff@g" \
+      -e "s@/usr/bin/gpgv(2|)@${gnupg}/bin/gpgv@g" \
+      -e "s@(command -v|/usr/bin/)curl@${curl.bin}/bin/curl@g" \
+      -e "s@sensible-editor@${sensible-editor}@g" \
+      -e "s@(^|\W)/bin/bash@\1${stdenv.shell}@g" \
+      -i {} +
+    sed -e "s@/usr/share/sgml/[^ ]*/manpages/docbook.xsl@${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl@" -i scripts/Makefile
+    sed -r \
+      -e "s@/usr( |$|/)@$out\\1@g" \
+      -e "s@/etc( |$|/)@$out/etc\\1@g" \
+      -e 's/ translated_manpages//; s/--install-layout=deb//; s@--root="[^ ]*"@--prefix="'"$out"'"@' \
+      -i Makefile* */Makefile*
+  '';
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+    "COMPL_DIR=/share/bash-completion/completions"
+    "PERLMOD_DIR=/share/devscripts"
+  ];
+
+  postInstall = ''
+    sed -re 's@(^|[ !`"])/bin/bash@\1${stdenv.shell}@g' -i "$out/bin"/*
+    for i in "$out/bin"/*; do
+      wrapProgram "$i" \
+        --prefix PERL5LIB : "$PERL5LIB" \
+        --prefix PERL5LIB : "$out/share/devscripts" \
+        --prefix PYTHONPATH : "$out/${python.sitePackages}" \
+        --prefix PATH : "${dpkg}/bin"
+    done
+    ln -s cvs-debi $out/bin/cvs-debc
+    ln -s debchange $out/bin/dch
+    ln -s pts-subscribe $out/bin/pts-unsubscribe
+  '';
+
+  meta = with lib; {
+    description = "Debian package maintenance scripts";
+    license = licenses.free; # Mix of public domain, Artistic+GPL, GPL1+, GPL2+, GPL3+, and GPL2-only... TODO
+    maintainers = with maintainers; [raskin];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/debootstrap/default.nix b/nixpkgs/pkgs/tools/misc/debootstrap/default.nix
new file mode 100644
index 000000000000..96e003fe7204
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/debootstrap/default.nix
@@ -0,0 +1,102 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, dpkg
+, gawk
+, perl
+, wget
+, binutils
+, bzip2
+, coreutils
+, util-linux
+, gnugrep
+, gnupg1
+, gnutar
+, gnused
+, gzip
+, xz
+, makeWrapper
+, nix-update-script
+, testers
+, debootstrap
+}:
+
+# USAGE like this: debootstrap sid /tmp/target-chroot-directory
+# There is also cdebootstrap now. Is that easier to maintain?
+let binPath = lib.makeBinPath [
+    binutils
+    bzip2
+    coreutils
+    dpkg
+    gawk
+    gnugrep
+    gnupg1
+    gnused
+    gnutar
+    gzip
+    perl
+    wget
+    xz
+  ];
+in stdenv.mkDerivation rec {
+  pname = "debootstrap";
+  version = "1.0.131";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "installer-team";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-rwNcrS2GzVs0JYxeHcpLMG9FDwSpthNmZIemn95hC6g=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    substituteInPlace debootstrap \
+      --replace 'CHROOT_CMD="chroot '  'CHROOT_CMD="${coreutils}/bin/chroot ' \
+      --replace 'CHROOT_CMD="unshare ' 'CHROOT_CMD="${util-linux}/bin/unshare ' \
+      --replace /usr/bin/dpkg ${dpkg}/bin/dpkg \
+      --replace '#!/bin/sh' '#!/bin/bash' \
+      --subst-var-by VERSION ${version}
+
+    d=$out/share/debootstrap
+    mkdir -p $out/{share/debootstrap,bin}
+
+    mv debootstrap $out/bin
+
+    cp -r . $d
+
+    wrapProgram $out/bin/debootstrap \
+      --set PATH ${binPath} \
+      --set-default DEBOOTSTRAP_DIR $d
+
+    mkdir -p $out/man/man8
+    mv debootstrap.8 $out/man/man8
+
+    rm -rf $d/debian
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = debootstrap;
+    };
+  };
+
+  meta = with lib; {
+    changelog = "https://salsa.debian.org/installer-team/debootstrap/-/blob/${version}/debian/changelog";
+    description = "Tool to create a Debian system in a chroot";
+    homepage = "https://wiki.debian.org/Debootstrap";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marcweber ];
+    platforms = platforms.linux;
+    mainProgram = "debootstrap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/depotdownloader/default.nix b/nixpkgs/pkgs/tools/misc/depotdownloader/default.nix
new file mode 100644
index 000000000000..419b58bfa722
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/depotdownloader/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildDotnetModule
+, fetchFromGitHub
+}:
+
+buildDotnetModule rec {
+  pname = "depotdownloader";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "SteamRE";
+    repo = "DepotDownloader";
+    rev = "DepotDownloader_${version}";
+    sha256 = "Kgi0u+H5BIAhrjk9e+8H1h0p5Edm3+2twYBPY3JQGps=";
+  };
+
+  projectFile = "DepotDownloader.sln";
+  nugetDeps = ./deps.nix;
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Steam depot downloader utilizing the SteamKit2 library";
+    changelog = "https://github.com/SteamRE/DepotDownloader/releases/tag/DepotDownloader_${version}";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.babbaj ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    mainProgram = "DepotDownloader";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/depotdownloader/deps.nix b/nixpkgs/pkgs/tools/misc/depotdownloader/deps.nix
new file mode 100644
index 000000000000..58e2f63ba01d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/depotdownloader/deps.nix
@@ -0,0 +1,15 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "protobuf-net"; version = "3.2.16"; sha256 = "0pwlqlq2p8my2sr8b0cvdav5cm8wpwf3s4gy7s1ba701ac2zyb9y"; })
+  (fetchNuGet { pname = "protobuf-net.Core"; version = "3.2.16"; sha256 = "00znhikq7valr3jaxg66cwli9hf75wkmmpf6rf8p790hf8lxq0c5"; })
+  (fetchNuGet { pname = "QRCoder"; version = "1.4.3"; sha256 = "1hmlqbdyq5n9bsmns5h0dwcxpd2jvqr9a2y6dyc9kbjmc8j1dpla"; })
+  (fetchNuGet { pname = "SteamKit2"; version = "2.5.0-beta.1"; sha256 = "0691285g4z12hv5kpv72l36h45086n14rw56x3dnixcvrjzg2q01"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "7.0.0"; sha256 = "1n9122cy6v3qhsisc9lzwa1m1j62b8pi2678nsmnlyvfpk0zdagm"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+]
diff --git a/nixpkgs/pkgs/tools/misc/depotdownloader/update.sh b/nixpkgs/pkgs/tools/misc/depotdownloader/update.sh
new file mode 100755
index 000000000000..2adbb6037a9d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/depotdownloader/update.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=./. -i bash -p jq curl common-updater-scripts nix coreutils
+
+set -eou pipefail
+
+currentVersion="$(nix eval --raw -f . depotdownloader.version)"
+latestVersion="$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} "https://api.github.com/repos/SteamRE/DepotDownloader/releases?per_page=1" \
+    | jq -r '.[].name' | cut -d' ' -f2)"
+
+if [[ "$currentVersion" = "$latestVersion" ]]; then
+    echo "Already up to date!"
+    exit
+fi
+
+update-source-version depotdownloader "$latestVersion"
+$(nix-build -A depotdownloader.fetch-deps --no-out-link)
diff --git a/nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix b/nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix
new file mode 100644
index 000000000000..ae17b51025dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, lib
+, fetchurl
+, pkg-config
+, meson
+, ninja
+, glib
+, libintl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "desktop-file-utils";
+  version = "0.27";
+
+  src = fetchurl {
+    url = "https://www.freedesktop.org/software/${pname}/releases/${pname}-${version}.tar.xz";
+    hash = "sha256-oIF985zjhbZiGIBAfFbx8pgWjAQMIDLO34jVt2r/6DY=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+  ];
+
+  buildInputs = [
+    glib
+    libintl
+  ];
+
+  postPatch = ''
+    substituteInPlace src/install.c \
+      --replace \"update-desktop-database\" \"$out/bin/update-desktop-database\"
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    homepage = "https://www.freedesktop.org/wiki/Software/desktop-file-utils";
+    description = "Command line utilities for working with .desktop files";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh b/nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh
new file mode 100644
index 000000000000..728070e34581
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh
@@ -0,0 +1,6 @@
+# Remove mimeinfo cache
+mimeinfoPreFixupPhase() {
+    rm -f $out/share/applications/mimeinfo.cache
+}
+
+preFixupPhases="${preFixupPhases-} mimeinfoPreFixupPhase"
diff --git a/nixpkgs/pkgs/tools/misc/detox/default.nix b/nixpkgs/pkgs/tools/misc/detox/default.nix
new file mode 100644
index 000000000000..570882d59ab9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/detox/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, flex, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "detox";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "dharple";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-cTuK5EIimRVZ1nfuTa1ds6xrawYIAbwNNIkNONd9y4Q=";
+  };
+
+  nativeBuildInputs = [ flex autoreconfHook ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dharple/detox";
+    description = "Utility designed to clean up filenames";
+    changelog = "https://github.com/dharple/detox/blob/v${version}/CHANGELOG.md";
+    longDescription = ''
+      Detox is a utility designed to clean up filenames. It replaces
+      difficult to work with characters, such as spaces, with standard
+      equivalents. It will also clean up filenames with UTF-8 or Latin-1
+      (or CP-1252) characters in them.
+    '';
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    mainProgram = "detox";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dgoss/default.nix b/nixpkgs/pkgs/tools/misc/dgoss/default.nix
new file mode 100644
index 000000000000..8201a8805be1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dgoss/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, fetchFromGitHub
+, resholve
+, bash
+, coreutils
+, goss
+, which
+}:
+
+resholve.mkDerivation rec {
+  pname = "dgoss";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "goss-org";
+    repo = "goss";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-FDn1OETkYIpMenk8QAAHvfNZcSzqGl5xrD0fAZPVmRM=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    sed -i '2i GOSS_PATH=${goss}/bin/goss' extras/dgoss/dgoss
+    install -D extras/dgoss/dgoss $out/bin/dgoss
+  '';
+
+  solutions = {
+    default = {
+      scripts = [ "bin/dgoss" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = [ coreutils which ];
+      keep = {
+        "$CONTAINER_RUNTIME" = true;
+      };
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/goss-org/goss/blob/v${version}/extras/dgoss/README.md";
+    changelog = "https://github.com/goss-org/goss/releases/tag/v${version}";
+    description = "Convenience wrapper around goss that aims to bring the simplicity of goss to docker containers";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ hyzual anthonyroussel ];
+    mainProgram = "dgoss";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dialogbox/default.nix b/nixpkgs/pkgs/tools/misc/dialogbox/default.nix
new file mode 100644
index 000000000000..7012f9d69ad5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dialogbox/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, mkDerivation
+, fetchFromGitHub
+, qmake
+, qtbase
+}:
+
+mkDerivation rec {
+  pname = "dialogbox";
+  version = "1.0+unstable=2020-11-16";
+
+  src = fetchFromGitHub {
+    owner = "martynets";
+    repo = pname;
+    rev = "6989740746f376becc989ab2698e77d14186a0f9";
+    hash = "sha256-paTas3KbV4yZ0ePnrOH1S3bLLHDddFml1h6b6azK4RQ=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+  ];
+
+  buildInputs = [
+    qtbase
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -d $out/{bin,share/doc/dialogbox}
+    install dist/dialogbox $out/bin
+    install README.md $out/share/doc/dialogbox/
+    cp -r demos $out/share/doc/dialogbox/demos
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://github.com/martynets/dialogbox/";
+    description = "Qt-based scriptable engine providing GUI dialog boxes";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+    mainProgram = "dialogbox";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/didu/default.nix b/nixpkgs/pkgs/tools/misc/didu/default.nix
new file mode 100644
index 000000000000..a5a8a790e4ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/didu/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitea }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "didu";
+  version = "2.5.2";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "szYWRN1NZbfpshipwMMJSWJw/NG4w7I+aqwtmqpT0R0=";
+  };
+
+  cargoSha256 = "O1kkfrwv7xiOh3wCV/ce6cqpkMPRRzcXOFESYMAhiKA=";
+
+  meta = with lib; {
+    description = "Duration conversion between units";
+    homepage = "https://codeberg.org/annaaurora/didu";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+    mainProgram = "didu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/didyoumean/default.nix b/nixpkgs/pkgs/tools/misc/didyoumean/default.nix
new file mode 100644
index 000000000000..d7671cf08bbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/didyoumean/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, libxcb
+, openssl
+  # Darwin dependencies
+, AppKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "didyoumean";
+  version = "1.1.4";
+
+  src = fetchFromGitHub {
+    owner = "hisbaan";
+    repo = "didyoumean";
+    rev = "v${version}";
+    sha256 = "sha256-PSEoh1OMElFJ8m4er1vBMkQak3JvLjd+oWNWA46cows=";
+  };
+
+  cargoSha256 = "sha256-QERnohWpkJ0LWkdxHrY6gKxdGqxDkLla7jlG44laojk=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ] ++ lib.optionals stdenv.isLinux [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    libxcb
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    AppKit
+  ];
+
+  postInstall = ''
+    installManPage man/dym.1
+    installShellCompletion completions/dym.{bash,fish}
+    installShellCompletion --zsh completions/_dym
+  '';
+
+  # Clipboard doesn't exist in test environment
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A CLI spelling corrector for when you're unsure";
+    homepage = "https://github.com/hisbaan/didyoumean";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ evanjs wegank ];
+    mainProgram = "dym";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diffoci/default.nix b/nixpkgs/pkgs/tools/misc/diffoci/default.nix
new file mode 100644
index 000000000000..6337b2d500c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoci/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, buildPackages
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "diffoci";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "reproducible-containers";
+    repo = "diffoci";
+    rev = "v${version}";
+    hash = "sha256-BTggky5behIxbVxyDZ09uobw0FBopboE9uUBEVgCgR4=";
+  };
+
+  vendorHash = "sha256-4C35LBxSm6EkcOznQY1hT2vX9bwFfps/q76VqqPKBfI=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/reproducible-containers/diffoci/cmd/diffoci/version.Version=v${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall =
+    let
+      diffoci = if stdenv.buildPlatform.canExecute stdenv.hostPlatform then placeholder "out" else buildPackages.diffoci;
+    in
+    ''
+      installShellCompletion --cmd trivy \
+        --bash <(${diffoci}/bin/diffoci completion bash) \
+        --fish <(${diffoci}/bin/diffoci completion fish) \
+        --zsh <(${diffoci}/bin/diffoci completion zsh)
+    '';
+
+  meta = with lib; {
+    description = "Diff for Docker and OCI container images";
+    homepage = "https://github.com/reproducible-containers/diffoci/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+    mainProgram = "diffoci";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diffoscope/default.nix b/nixpkgs/pkgs/tools/misc/diffoscope/default.nix
new file mode 100644
index 000000000000..625f86c1da47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoscope/default.nix
@@ -0,0 +1,308 @@
+{ lib
+, stdenv
+, abootimg
+, acl
+, apksigcopier
+, apksigner
+, apktool
+, binutils-unwrapped-all-targets
+, bzip2
+, cbfstool
+, cdrkit
+, colord
+, colordiff
+, coreutils
+, cpio
+, db
+, diffutils
+, docutils
+, dtc
+, e2fsprogs
+, enableBloat ? true
+, enjarify
+, fetchurl
+, file
+, findutils
+, fontforge-fonttools
+, ffmpeg
+, fpc
+, gettext
+, ghc
+, ghostscriptX
+, giflib
+, gnumeric
+, gnupg
+, gnutar
+, gzip
+, hdf5
+, help2man
+, html2text
+, imagemagick
+, installShellFiles
+, jdk
+, libarchive
+, libcaca
+, libxmlb
+, llvm
+, lz4
+, lzip
+, mono
+, ocaml
+, odt2txt
+, oggvideotools
+, openssh
+, openssl
+, pdftk
+, pgpdump
+, poppler_utils
+, procyon
+, python3
+, qemu
+, R
+, radare2
+, sng
+, sqlite
+, squashfsTools
+, tcpdump
+, ubootTools
+, unzip
+, wabt
+, xmlbeans
+, xxd
+, xz
+, zip
+, zstd
+  # updater only
+, writeScript
+}:
+
+# Note: when upgrading this package, please run the list-missing-tools.sh script as described below!
+python3.pkgs.buildPythonApplication rec {
+  pname = "diffoscope";
+  version = "257";
+
+  src = fetchurl {
+    url = "https://diffoscope.org/archive/diffoscope-${version}.tar.bz2";
+    hash = "sha256-Fejp4i0uzsK9+9JBVPsE1AdDwshtRlxpxPfJdqRQQH4=";
+  };
+
+  outputs = [
+    "out"
+    "man"
+  ];
+
+  patches = [
+    ./ignore_links.patch
+  ];
+
+  postPatch = ''
+    # Upstream doesn't provide a PKG-INFO file
+    sed -i setup.py -e "/'rpm-python',/d"
+
+    # When generating manpage, use the installed version
+    substituteInPlace doc/Makefile --replace "../bin" "$out/bin"
+  '';
+
+  nativeBuildInputs = [
+    docutils
+    help2man
+    installShellFiles
+  ];
+
+  # Most of the non-Python dependencies here are optional command-line tools for various file-format parsers.
+  # To help figuring out what's missing from the list, run: ./pkgs/tools/misc/diffoscope/list-missing-tools.sh
+  #
+  # Still missing these tools:
+  # Android-specific tools:
+  # aapt2
+  # dexdump
+  # Darwin-specific tools:
+  # lipo
+  # otool
+  # Other tools:
+  # docx2txt <- makes tests broken:
+  # > FAILED tests/comparators/test_docx.py::test_diff - IndexError: list index out of range
+  # > FAILED tests/comparators/test_docx.py::test_compare_non_existing - AssertionError
+  #
+  # We filter automatically all packages for the host platform (some dependencies are not supported on Darwin, aarch64, etc.).
+  pythonPath = lib.filter (lib.meta.availableOn stdenv.hostPlatform) ([
+    acl
+    binutils-unwrapped-all-targets
+    bzip2
+    cdrkit
+    colordiff
+    coreutils
+    cpio
+    db
+    diffutils
+    dtc
+    e2fsprogs
+    file
+    findutils
+    fontforge-fonttools
+    gettext
+    gnutar
+    gzip
+    html2text
+    libarchive
+    libxmlb
+    lz4
+    lzip
+    openssl
+    pgpdump
+    sng
+    sqlite
+    squashfsTools
+    unzip
+    xxd
+    xz
+    zip
+    zstd
+  ]
+  ++ (with python3.pkgs; [
+    argcomplete
+    debian
+    defusedxml
+    jsbeautifier
+    jsondiff
+    libarchive-c
+    progressbar33
+    pypdf2
+    python-magic
+    pyxattr
+    rpm
+    tlsh
+  ])
+  ++ lib.optionals enableBloat (
+    [
+      abootimg
+      apksigcopier
+      apksigner
+      apktool
+      cbfstool
+      colord
+      enjarify
+      ffmpeg
+      fpc
+      ghc
+      ghostscriptX
+      giflib
+      gnupg
+      hdf5
+      imagemagick
+      jdk
+      libcaca
+      llvm
+      mono
+      ocaml
+      odt2txt
+      openssh
+      pdftk
+      poppler_utils
+      procyon
+      qemu
+      R
+      radare2
+      tcpdump
+      ubootTools
+      wabt
+      xmlbeans
+    ]
+    ++ (with python3.pkgs; [
+      androguard
+      binwalk
+      guestfs
+      h5py
+      pdfminer-six
+      # docx2txt, breaks the tests.
+    ])
+    # oggvideotools is broken on Darwin, please put it back when it will be fixed?
+    ++ lib.optionals stdenv.isLinux [ oggvideotools ]
+    # This doesn't work on aarch64-darwin
+    ++ lib.optionals (stdenv.hostPlatform.system != "aarch64-darwin") [ gnumeric ]
+  ));
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ] ++ pythonPath;
+
+  pytestFlagsArray = [
+    # Always show more information when tests fail
+    "-vv"
+  ];
+
+  postInstall = ''
+    make -C doc
+    installManPage doc/diffoscope.1
+  '';
+
+  disabledTests = [
+    "test_sbin_added_to_path"
+    "test_diff_meta"
+    "test_diff_meta2"
+
+    # Fails because it fails to determine llvm version
+    "test_item3_deflate_llvm_bitcode"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # Disable flaky tests on Darwin
+    "test_non_unicode_filename"
+    "test_listing"
+    "test_symlink_root"
+
+    # Appears to be a sandbox related issue
+    "test_trim_stderr_in_command"
+    # Seems to be a bug caused by having different versions of rdata than
+    # expected. Will file upstream.
+    "test_item_rdb"
+    # Caused by getting an otool command instead of llvm-objdump. Could be Nix
+    # setup, could be upstream bug. Will file upstream.
+    "test_libmix_differences"
+  ];
+
+  disabledTestPaths = [
+    # fails due to https://github.com/NixOS/nixpkgs/issues/256896
+    # should be removed once that issue is resolved in coreboot or diffoscope
+    "tests/comparators/test_cbfs.py"
+  ]
+  # Flaky tests on Darwin
+  ++ lib.optionals stdenv.isDarwin [
+    "tests/comparators/test_git.py"
+    "tests/comparators/test_java.py"
+    "tests/comparators/test_uimage.py"
+    "tests/comparators/test_device.py"
+    "tests/comparators/test_macho.py"
+  ];
+
+  passthru = {
+    updateScript = writeScript "update-diffoscope" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -eu -o pipefail
+
+      # Expect the text in format of "Latest release: 198 (31 Dec 2021)"'.
+      newVersion="$(curl -s https://diffoscope.org/ | pcregrep -o1 'Latest release: ([0-9]+)')"
+      update-source-version ${pname} "$newVersion"
+    '';
+  };
+
+  meta = with lib; {
+    description = "Perform in-depth comparison of files, archives, and directories";
+    longDescription = ''
+      diffoscope will try to get to the bottom of what makes files or directories
+      different. It will recursively unpack archives of many kinds and transform
+      various binary formats into more human readable form to compare them. It can
+      compare two tarballs, ISO images, or PDF just as easily. The differences can
+      be shown in a text or HTML report.
+
+      diffoscope is developed as part of the "reproducible builds" Debian
+      project and was formerly known as "debbindiff".
+    '';
+    homepage = "https://diffoscope.org/";
+    changelog = "https://diffoscope.org/news/diffoscope-${version}-released/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dezgeg danielfullmer raitobezarius ];
+    platforms = platforms.unix;
+    mainProgram = "diffoscope";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch b/nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch
new file mode 100644
index 000000000000..2830acdd9655
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch
@@ -0,0 +1,20 @@
+diff --git a/diffoscope/comparators/directory.py b/diffoscope/comparators/directory.py
+index 5f34d62..36999a3 100644
+--- a/diffoscope/comparators/directory.py
++++ b/diffoscope/comparators/directory.py
+@@ -77,6 +77,7 @@ else:
+         FILE_RE = re.compile(r"^\s*File:.*$")
+         DEVICE_RE = re.compile(r"Device: [0-9a-f]+h/[0-9]+d\s+")
+         INODE_RE = re.compile(r"Inode: [0-9]+\s+")
++        LINKS_RE = re.compile(r"Links: [0-9]+\s+")
+         ACCESS_TIME_RE = re.compile(r"^Access: [0-9]{4}-[0-9]{2}-[0-9]{2}.*$")
+         CHANGE_TIME_RE = re.compile(r"^Change: [0-9]{4}-[0-9]{2}-[0-9]{2}.*$")
+         BIRTH_TIME_RE = re.compile(r"^\s*Birth:.*$")
+@@ -86,6 +87,7 @@ else:
+             line = Stat.FILE_RE.sub("", line)
+             line = Stat.DEVICE_RE.sub("", line)
+             line = Stat.INODE_RE.sub("", line)
++            line = Stat.LINKS_RE.sub("", line)
+             line = Stat.ACCESS_TIME_RE.sub("", line)
+             line = Stat.CHANGE_TIME_RE.sub("", line)
+             line = Stat.BIRTH_TIME_RE.sub("", line)
diff --git a/nixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh b/nixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh
new file mode 100755
index 000000000000..5f4d118cfed7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+# This script lists all the optional command-line tools that diffoscope can use
+# (i.e. `diffoscope --list-tools`) but are missing from the Nix expression.
+
+diffoscope=$(nix-build --no-out-link -E 'with import ./. {}; diffoscope.override { enableBloat = true; }')/bin/diffoscope
+
+required=$($diffoscope --list-tools | \
+    grep '^External-Tools-Required:' | \
+    cut -d ' ' -f2- | \
+    tr -d ,)
+
+# Uber-hacky!
+pathScript=$(cat $diffoscope | grep PATH)
+
+export PATH=$(nix-build --no-out-link -A which)/bin
+eval "$pathScript"
+
+for tool in $required; do
+    if ! which $tool >/dev/null 2>&1; then
+        echo $tool
+    fi
+done | sort
diff --git a/nixpkgs/pkgs/tools/misc/digitemp/default.nix b/nixpkgs/pkgs/tools/misc/digitemp/default.nix
new file mode 100644
index 000000000000..2be4ac841afc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/digitemp/default.nix
@@ -0,0 +1,53 @@
+{ fetchFromGitHub, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "digitemp";
+  version = "3.7.2";
+
+  src = fetchFromGitHub {
+    owner = "bcl";
+    repo = "digitemp";
+    rev = "v${version}";
+    sha256 = "19zka5fcdxhhginaspak76l984iqq9v2j6qrwvi5mvca7bcj8f72";
+  };
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "LOCK=no"
+    "ds9097"
+    "ds9097u"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D -m555 -t $out/bin digitemp_*
+    install -D -m444 -t $out/share/doc/${pname} FAQ README
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Temperature logging and reporting using Maxim's iButtons and 1-Wire protocol";
+    longDescription = ''
+      DigiTemp is a command line application used for reading 1-wire sensors like
+      the DS18S20 temperature sensor, or DS2438 battery monitor. DigiTemp supports
+      the following devices:
+
+        DS18S20 (and older DS1820) Temperature Sensor
+        DS18B20 Temperature Sensor
+        DS1822 Temperature Sensor
+        DS2438 Battery monitor
+        DS2409 1-wire coupler (used in 1-wire hubs)
+        DS2422 Counter
+        DS2423 Counter
+
+      The output format can be customized and all settings are stored in a
+      configuration file (.digitemprc) in the current directory. DigiTemp can
+      repeatedly read the sensors and output to stdout and/or to a logfile.
+    '';
+    homepage = "https://www.digitemp.com";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.fogti ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dijo/default.nix b/nixpkgs/pkgs/tools/misc/dijo/default.nix
new file mode 100644
index 000000000000..45da82571bd4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dijo/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, ncurses, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dijo";
+  version = "0.2.7";
+  buildInputs = [ ncurses ] ++ lib.optional stdenv.isDarwin CoreServices;
+  src = fetchFromGitHub {
+    owner = "NerdyPepper";
+    repo = "dijo";
+    rev = "v${version}";
+    sha256 = "sha256-g+A8BJxqoAvm9LTLrLnClVGtFJCQ2gT0mDGAov/6vXE=";
+  };
+  cargoSha256 = "sha256-o3+KcE7ozu6eUgwsOSr9DOoIo+/BZ3bJZe+WYQLXHpY=";
+
+  meta = with lib; {
+    description = "Scriptable, curses-based, digital habit tracker";
+    homepage = "https://github.com/NerdyPepper/dijo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ infinisil ];
+    mainProgram = "dijo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ding-libs/default.nix b/nixpkgs/pkgs/tools/misc/ding-libs/default.nix
new file mode 100644
index 000000000000..db2c2f5e146f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ding-libs/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, check }:
+
+stdenv.mkDerivation rec {
+  pname = "ding-libs";
+  version = "0.6.1";
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/SSSD/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1h97mx2jdv4caiz4r7y8rxfsq78fx0k4jjnfp7x2s7xqvqks66d3";
+  };
+
+  enableParallelBuilding = true;
+  buildInputs = [ check ];
+
+  doCheck = true;
+
+  meta = {
+    description = "'D is not GLib' utility libraries";
+    homepage = "https://pagure.io/SSSD/ding-libs";
+    platforms = with lib.platforms; linux;
+    maintainers = with lib.maintainers; [ ];
+    license = [ lib.licenses.gpl3 lib.licenses.lgpl3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/direnv/default.nix b/nixpkgs/pkgs/tools/misc/direnv/default.nix
new file mode 100644
index 000000000000..9395cade650b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/direnv/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub, buildGoModule, bash, fish, zsh }:
+
+buildGoModule rec {
+  pname = "direnv";
+  version = "2.33.0";
+
+  src = fetchFromGitHub {
+    owner = "direnv";
+    repo = "direnv";
+    rev = "v${version}";
+    sha256 = "sha256-/xOqJ3dr+3S502rXHVBcHhgBCctoMYnWpfLqgrxIoN8=";
+  };
+
+  vendorHash = "sha256-QGPcNgA/iiGt0CdFs2kR3zLL5/SWulSyyf/pW212JpU=";
+
+  # we have no bash at the moment for windows
+  BASH_PATH =
+    lib.optionalString (!stdenv.hostPlatform.isWindows)
+    "${bash}/bin/bash";
+
+  # replace the build phase to use the GNUMakefile instead
+  buildPhase = ''
+    make BASH_PATH=$BASH_PATH
+  '';
+
+  installPhase = ''
+    make install PREFIX=$out
+  '';
+
+  nativeCheckInputs = [ fish zsh ];
+
+  checkPhase = ''
+    export HOME=$(mktemp -d)
+    make test-go test-bash test-fish test-zsh
+  '';
+
+  meta = with lib; {
+    description = "A shell extension that manages your environment";
+    longDescription = ''
+      Once hooked into your shell direnv is looking for an .envrc file in your
+      current directory before every prompt.
+
+      If found it will load the exported environment variables from that bash
+      script into your current environment, and unload them if the .envrc is
+      not reachable from the current path anymore.
+
+      In short, this little tool allows you to have project-specific
+      environment variables.
+    '';
+    homepage = "https://direnv.net";
+    license = licenses.mit;
+    maintainers = [ maintainers.zimbatm ];
+    mainProgram = "direnv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/discocss/default.nix b/nixpkgs/pkgs/tools/misc/discocss/default.nix
new file mode 100644
index 000000000000..b930338c29f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/discocss/default.nix
@@ -0,0 +1,43 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+, discordAlias ? false
+, discord
+, makeWrapper
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "discocss";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "mlvzk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-of7OMgbuwebnFmbefGD1/dOhyTX1Hy7TccnWSRCweW0=";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 discocss $out/bin/discocss
+  '' + lib.optionalString discordAlias ''
+    wrapProgram $out/bin/discocss --set DISCOCSS_DISCORD_BIN ${discord}/bin/Discord
+    ln -s $out/bin/discocss $out/bin/Discord
+    ln -s $out/bin/discocss $out/bin/discord
+    mkdir -p $out/share
+    ln -s ${discord}/share/* $out/share
+  '';
+
+  meta = with lib; {
+    description = "A tiny Discord css-injector";
+    changelog = "https://github.com/mlvzk/discocss/releases/tag/v${version}";
+    homepage = "https://github.com/mlvzk/discocss";
+    license = licenses.mpl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ mlvzk ];
+    mainProgram = "discocss";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/disfetch/default.nix b/nixpkgs/pkgs/tools/misc/disfetch/default.nix
new file mode 100644
index 000000000000..6cd7a2683d60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/disfetch/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "disfetch";
+  version = "3.7";
+
+  src = fetchFromGitHub {
+    owner = "q60";
+    repo = "disfetch";
+    rev = version;
+    sha256 = "sha256-xzOE+Pnx0qb3B9vWWrF5Q0nhUo0QYBUO6j6al8N3deY=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 -t $out/bin disfetch
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Yet another *nix distro fetching program, but less complex";
+    homepage = "https://github.com/q60/disfetch";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ vel ];
+    mainProgram = "disfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diskonaut/default.nix b/nixpkgs/pkgs/tools/misc/diskonaut/default.nix
new file mode 100644
index 000000000000..6193e0a5e816
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diskonaut/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "diskonaut";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "imsnif";
+    repo = "diskonaut";
+    rev = version;
+    sha256 = "1pmbag3r2ka30zmy2rs9jps2qxj2zh0gy4a774v9yhf0b6qjid54";
+  };
+
+  cargoSha256 = "10jrcy8m9ll4136ghq3fhmnphd9g3rw863x708vm17n44kgdxyab";
+
+  # 1 passed; 44 failed https://hydra.nixos.org/build/148943783/nixlog/1
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Terminal disk space navigator";
+    homepage = "https://github.com/imsnif/diskonaut";
+    license = licenses.mit;
+    maintainers = with maintainers; [ evanjs figsoda ];
+    mainProgram = "diskonaut";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diskscan/default.nix b/nixpkgs/pkgs/tools/misc/diskscan/default.nix
new file mode 100644
index 000000000000..7471089f45f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diskscan/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, cmake, ncurses, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "diskscan";
+  version = "0.21";
+
+  src = fetchFromGitHub {
+    owner  = "baruch";
+    repo   = "diskscan";
+    rev    = version;
+    sha256 = "sha256-2y1ncPg9OKxqImBN5O5kXrTsuwZ/Cg/8exS7lWyZY1c=";
+  };
+
+  buildInputs = [ ncurses zlib ];
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    homepage = "https://github.com/baruch/diskscan";
+    description = "Scan HDD/SSD for failed and near failed sectors";
+    platforms = with platforms; linux;
+    maintainers = with maintainers; [ peterhoeg ];
+    license = licenses.gpl3;
+    mainProgram = "diskscan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diskus/default.nix b/nixpkgs/pkgs/tools/misc/diskus/default.nix
new file mode 100644
index 000000000000..cfbcfdcca6eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diskus/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "diskus";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = "diskus";
+    rev = "v${version}";
+    sha256 = "sha256-SKd2CU0F2iR4bSHntu2VKvZyjjf2XJeXJG6XS/fIBMU=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoSha256 = "sha256-qNXv6Z9sKl7rol78UTOSRFML/JCGfOJMGOdt49KHD50=";
+
+  meta = with lib; {
+    description = "A minimal, fast alternative to 'du -sh'";
+    homepage = "https://github.com/sharkdp/diskus";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.fuerbringer ];
+    platforms = platforms.unix;
+    longDescription = ''
+      diskus is a very simple program that computes the total size of the
+      current directory. It is a parallelized version of du -sh.
+    '';
+    mainProgram = "diskus";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/djenrandom/default.nix b/nixpkgs/pkgs/tools/misc/djenrandom/default.nix
new file mode 100644
index 000000000000..51f892a5a453
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/djenrandom/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "djenrandom";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "dj-on-github";
+    repo = "djenrandom";
+    rev = "${version}";
+    hash = "sha256-r5UT8z8vvFZDffsl6CqBXuvBaZ/sl1WLxJi26CxkpAw=";
+  };
+
+  preBuild = ''
+    sed -i s/gcc/${stdenv.cc.targetPrefix}gcc/g Makefile
+  ''
+  + lib.optionalString (!stdenv.hostPlatform.isx86_64) ''
+    sed -i s/-m64//g Makefile
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D djenrandom $out/bin/djenrandom
+    runHook postInstall
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = {
+    homepage = "http://www.deadhat.com/";
+    description = ''
+      A C program to generate random data using several random models,
+      with parameterized non uniformities and flexible output formats
+    '';
+    license = lib.licenses.gpl2Only;
+    # djenrandom uses x86 specific instructions, therefore we can only compile for the x86 architechture
+    platforms = lib.platforms.x86;
+    maintainers = with lib.maintainers; [ orichter thillux ];
+    mainProgram = "djenrandom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dmg2img/default.nix b/nixpkgs/pkgs/tools/misc/dmg2img/default.nix
new file mode 100644
index 000000000000..7f9c41cda32c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dmg2img/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, zlib, bzip2, openssl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "dmg2img";
+  version = "1.6.7";
+
+  src = fetchurl {
+    url = "http://vu1tur.eu.org/tools/dmg2img-${version}.tar.gz";
+    sha256 = "066hqhg7k90xcw5aq86pgr4l7apzvnb4559vj5s010avbk8adbh2";
+  };
+
+  buildInputs = [ zlib bzip2 openssl ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/Homebrew/formula-patches/85fa66a9/dmg2img/openssl-1.1.diff";
+      sha256 = "076sz69hf3ryylplg025vl8sj991cb81g3yazsmrf8anrd7ffmxx";
+    })
+  ];
+
+  patchFlags = [ "-p0" ];
+
+  installPhase = ''
+    install -D dmg2img $out/bin/dmg2img
+    install -D vfdecrypt $out/bin/vfdecrypt
+  '';
+
+  meta = {
+    platforms = lib.platforms.unix;
+    description = "An Apple's compressed dmg to standard (hfsplus) image disk file convert tool";
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix b/nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix
new file mode 100644
index 000000000000..f64a73a338ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, expat }:
+
+stdenv.mkDerivation rec {
+  pname = "docbook2mdoc";
+  version = "0.0.9";
+
+  src = fetchurl {
+    url = "http://mdocml.bsd.lv/docbook2mdoc/snapshots/${pname}-${version}.tgz";
+    sha256 = "07il80sg89xf6ym4bry6hxdacfzqgbwkxzyf7bjaihmw5jj0lclk";
+  };
+
+  buildInputs = [ expat.dev ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "http://mdocml.bsd.lv/";
+    description = "converter from DocBook V4.x and v5.x XML into mdoc";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ramkromberg ];
+    mainProgram = "docbook2mdoc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docker-ls/default.nix b/nixpkgs/pkgs/tools/misc/docker-ls/default.nix
new file mode 100644
index 000000000000..6f6a322cc28f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-ls/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule, fetchFromGitHub, lib, docker }:
+
+buildGoModule rec {
+  pname = "docker-ls";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "mayflower";
+    repo = "docker-ls";
+    rev = "v${version}";
+    sha256 = "sha256-4+REt0NH4S367qFsyJncVedUrC4t1zw5o0CLTiQfIz8=";
+  };
+
+  vendorHash = "sha256-UulcjQOLEIP++eoYQTEIbCJW51jyE312dMxB8+AKcdU=";
+
+  meta = with lib; {
+    description = "Tools for browsing and manipulating docker registries";
+    longDescription = ''
+      Docker-ls is a set of CLI tools for browsing and manipulating docker registries.
+      In particular, docker-ls can handle authentication and display the sha256 content digests associated
+      with tags.
+    '';
+
+    homepage = "https://github.com/mayflower/docker-ls";
+    maintainers = with maintainers; [ ];
+    platforms = docker.meta.platforms;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile
new file mode 100644
index 000000000000..2c8125a46165
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org' do
+  gem 'docker-sync'
+end
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock
new file mode 100644
index 000000000000..4f14b77d0ef0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock
@@ -0,0 +1,29 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    backticks (1.0.2)
+    daemons (1.3.1)
+    docker-compose (1.1.10)
+      backticks (~> 1.0)
+    docker-sync (0.5.9)
+      daemons (~> 1.2, >= 1.2.3)
+      docker-compose (~> 1.1, >= 1.1.7)
+      dotenv (~> 2.1, >= 2.1.1)
+      gem_update_checker (~> 0.2.0, >= 0.2.0)
+      os
+      terminal-notifier (= 2.0.0)
+      thor (~> 0.20, >= 0.20.0)
+    dotenv (2.6.0)
+    gem_update_checker (0.2.0)
+    os (1.0.0)
+    terminal-notifier (2.0.0)
+    thor (0.20.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  docker-sync!
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/default.nix b/nixpkgs/pkgs/tools/misc/docker-sync/default.nix
new file mode 100644
index 000000000000..aa129c0a36db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/default.nix
@@ -0,0 +1,21 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "docker-sync";
+  gemdir = ./.;
+
+  inherit ruby;
+
+  exes = ["docker-sync"];
+
+  passthru.updateScript = bundlerUpdateScript "docker-sync";
+
+  meta = with lib; {
+    description = "Run your application at full speed while syncing your code for development";
+    homepage = "http://docker-sync.io";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    platforms = platforms.unix;
+    mainProgram = "docker-sync";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix b/nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix
new file mode 100644
index 000000000000..aef4d9928ab1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix
@@ -0,0 +1,76 @@
+{
+  backticks = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vr28l9vckavnrb9pnqrhcmnk3wsvvpas8jjh165w2rzv3sdkws5";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  daemons = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  docker-compose = {
+    dependencies = ["backticks"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00v3y182rmpq34dl91iprvhc50vw8hysy2h7iy3ihmmm9pgg71gc";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  docker-sync = {
+    dependencies = ["daemons" "docker-compose" "dotenv" "gem_update_checker" "os" "terminal-notifier" "thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrlcggj7k8w30b76f23p64yx4wg7p7mq9lp6lsnh2ysq9n3cjqg";
+      type = "gem";
+    };
+    version = "0.5.9";
+  };
+  dotenv = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rgl2kqhnxqbjvi9brbvb52iaq1z8yi0pl0bawk4fm6kl9igxr8f";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  gem_update_checker = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ckbz4q3q59kkv138n0cmsyida0wg45pwscxzf5vshxcrxhmq3x7";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  os = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s401gvhqgs2r8hh43ia205mxsy1wc0ib4k76wzkdpspfcnfr1rk";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  terminal-notifier = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1slc0y8pjpw30hy21v8ypafi8r7z9jlj4bjbgz03b65b28i2n3bs";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docui/default.nix b/nixpkgs/pkgs/tools/misc/docui/default.nix
new file mode 100644
index 000000000000..d226c2fc8f00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docui/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "docui";
+  version = "2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "skanehira";
+    repo = "docui";
+    rev = version;
+    hash = "sha256-tHv1caNGiWC9Dc/qR4ij9xGM1lotT0KyrpJpdBsHyks=";
+  };
+
+  vendorHash = "sha256-5xQ5MmGpyzVh4gXZAhCY16iVw8zbCMzMA5IOsPdn7b0=";
+
+  meta = with lib; {
+    description = "TUI Client for Docker";
+    homepage = "https://github.com/skanehira/docui";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aethelz ];
+    broken = stdenv.isDarwin;
+    mainProgram = "docui";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/doitlive/default.nix b/nixpkgs/pkgs/tools/misc/doitlive/default.nix
new file mode 100644
index 000000000000..9e1d83bb4d98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/doitlive/default.nix
@@ -0,0 +1,28 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "doitlive";
+  version = "5.0.0";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-jAoibszDpQJjiNCZDhX3fLniALOG7r9YqaYEySkmMM4=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ setuptools ];
+
+  propagatedBuildInputs = with python3Packages; [ click click-completion click-didyoumean ];
+
+  # disable tests (too many failures)
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for live presentations in the terminal";
+    homepage = "https://github.com/sloria/doitlive";
+    changelog = "https://github.com/sloria/doitlive/blob/${version}/CHANGELOG.rst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mbode ];
+    mainProgram = "doitlive";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/domine/default.nix b/nixpkgs/pkgs/tools/misc/domine/default.nix
new file mode 100644
index 000000000000..3d193ba2a06f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/domine/default.nix
@@ -0,0 +1,15 @@
+{ buildDartApplication, fetchFromGitHub, lib }:
+
+buildDartApplication rec {
+  pname = "domine";
+  version = "nightly-2023-08-10";
+
+  src = fetchFromGitHub {
+    owner = "breitburg";
+    repo = pname;
+    rev = "d99d02b014d009b0201380a21ddaa57696dc77af";
+    sha256 = "038yfa22q7lzz85czmny3c1lkv8mjv4pq62cbmh054fqvgf3k3s4";
+  };
+
+  pubspecLock = lib.importJSON ./pubspec.lock.json;
+}
diff --git a/nixpkgs/pkgs/tools/misc/domine/pubspec.lock.json b/nixpkgs/pkgs/tools/misc/domine/pubspec.lock.json
new file mode 100644
index 000000000000..214f3f49b2d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/domine/pubspec.lock.json
@@ -0,0 +1,197 @@
+{
+  "packages": {
+    "args": {
+      "dependency": "direct main",
+      "description": {
+        "name": "args",
+        "sha256": "eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.2"
+    },
+    "async": {
+      "dependency": "transitive",
+      "description": {
+        "name": "async",
+        "sha256": "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.11.0"
+    },
+    "collection": {
+      "dependency": "transitive",
+      "description": {
+        "name": "collection",
+        "sha256": "f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.17.2"
+    },
+    "dart_openai": {
+      "dependency": "direct main",
+      "description": {
+        "name": "dart_openai",
+        "sha256": "707f6975454513f4a6197125b5a0fbe92ab7cbe4b8ea9111e529a09d7a3ce0c3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.0"
+    },
+    "dio": {
+      "dependency": "direct main",
+      "description": {
+        "name": "dio",
+        "sha256": "ce75a1b40947fea0a0e16ce73337122a86762e38b982e1ccb909daa3b9bc4197",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "5.3.2"
+    },
+    "dio_smart_retry": {
+      "dependency": "direct main",
+      "description": {
+        "name": "dio_smart_retry",
+        "sha256": "1a2d0cf73ab56bf5998b375cda2d51f45c77268e712e4073f232cdc7753a94b2",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "5.0.0"
+    },
+    "fetch_api": {
+      "dependency": "transitive",
+      "description": {
+        "name": "fetch_api",
+        "sha256": "7896632eda5af40c4459d673ad601df21d4c3ae6a45997e300a92ca63ec9fe4c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.1"
+    },
+    "fetch_client": {
+      "dependency": "transitive",
+      "description": {
+        "name": "fetch_client",
+        "sha256": "83c07b07a63526a43630572c72715707ca113a8aa3459efbc7b2d366b79402af",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.2"
+    },
+    "http": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http",
+        "sha256": "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.0"
+    },
+    "http_parser": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http_parser",
+        "sha256": "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.2"
+    },
+    "js": {
+      "dependency": "transitive",
+      "description": {
+        "name": "js",
+        "sha256": "f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.7"
+    },
+    "lints": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "lints",
+        "sha256": "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.1"
+    },
+    "meta": {
+      "dependency": "transitive",
+      "description": {
+        "name": "meta",
+        "sha256": "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.9.1"
+    },
+    "path": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path",
+        "sha256": "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.8.3"
+    },
+    "source_span": {
+      "dependency": "transitive",
+      "description": {
+        "name": "source_span",
+        "sha256": "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.10.0"
+    },
+    "string_scanner": {
+      "dependency": "transitive",
+      "description": {
+        "name": "string_scanner",
+        "sha256": "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "term_glyph": {
+      "dependency": "transitive",
+      "description": {
+        "name": "term_glyph",
+        "sha256": "a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.1"
+    },
+    "tint": {
+      "dependency": "direct main",
+      "description": {
+        "name": "tint",
+        "sha256": "9652d9a589f4536d5e392cf790263d120474f15da3cf1bee7f1fdb31b4de5f46",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.1"
+    },
+    "typed_data": {
+      "dependency": "transitive",
+      "description": {
+        "name": "typed_data",
+        "sha256": "facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.2"
+    }
+  },
+  "sdks": {
+    "dart": ">=3.0.6 <4.0.0"
+  }
+}
diff --git a/nixpkgs/pkgs/tools/misc/dooit/default.nix b/nixpkgs/pkgs/tools/misc/dooit/default.nix
new file mode 100644
index 000000000000..1621ea8e5249
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dooit/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, fetchFromGitHub
+, dooit
+, python3
+, testers
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "dooit";
+  version = "2.2.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "kraanzu";
+    repo = "dooit";
+    rev = "v${version}";
+    hash = "sha256-GtXRzj+o+FClleh73kqelk0JrSyafZhf847lX1BiS9k=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "tzlocal"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    pyperclip
+    python-dateutil
+    pyyaml
+    textual
+    tzlocal
+  ];
+
+  # No tests available
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = dooit;
+    command = "HOME=$(mktemp -d) dooit --version";
+  };
+
+  meta = with lib; {
+    description = "A TUI todo manager";
+    homepage = "https://github.com/kraanzu/dooit";
+    changelog = "https://github.com/kraanzu/dooit/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ khaneliman wesleyjrz ];
+    mainProgram = "dooit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dotacat/default.nix b/nixpkgs/pkgs/tools/misc/dotacat/default.nix
new file mode 100644
index 000000000000..2512ff20d8d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dotacat/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitLab
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "dotacat";
+  version = "v0.3.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.scd31.com";
+    owner = "stephen";
+    repo = "dotacat";
+    rev = "f3b7e7816bed6b84123e066c57cf4003d77a85f1";
+    hash = "sha256-y+u9PO01W+IzBatGHZpgOD7cRKjdeuy4/VX7/V9cu3Q=";
+  };
+
+  cargoHash = "sha256-ilvsqwvfQejo453veSZ5VMP8XhL7NryrDh+rYJkXk30=";
+
+  meta = with lib; {
+    description = "Like lolcat, but fast";
+    homepage = "https://gitlab.scd31.com/stephen/dotacat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ traxys ];
+    mainProgram = "dotacat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dotter/default.nix b/nixpkgs/pkgs/tools/misc/dotter/default.nix
new file mode 100644
index 000000000000..bcabb2ef8aac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dotter/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nix-update-script
+, rustPlatform
+, CoreServices
+, which
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dotter";
+  version = "0.13.1";
+
+  src = fetchFromGitHub {
+    owner = "SuperCuber";
+    repo = "dotter";
+    rev = "v${version}";
+    hash = "sha256-Xmdg5ITKWhL5AxTS7z4f9ecigQpBqna+kZclA+mDJhA=";
+  };
+
+  cargoHash = "sha256-W8khm9E5f/PROVJDAUr57nAiTEXV4a0fepzV00HoT8c=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  nativeCheckInputs = [ which ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A dotfile manager and templater written in rust 🦀";
+    homepage = "https://github.com/SuperCuber/dotter";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ linsui ];
+    mainProgram = "dotter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix b/nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix
new file mode 100644
index 000000000000..5f1e53f8105f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix
@@ -0,0 +1,37 @@
+{ lib, python3Packages, fetchFromGitHub }:
+python3Packages.buildPythonApplication rec {
+  pname = "dpt-rp1-py";
+  version = "0.1.16";
+
+  src = fetchFromGitHub {
+    owner = "janten";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0zvf09b9rzpx5b0w81ziqd7v321hfhgsgvshdx23karj2hf75bvj";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = with python3Packages; [
+    anytree
+    fusepy
+    httpsig
+    pbkdf2
+    pyyaml
+    requests
+    setuptools
+    tqdm
+    urllib3
+    zeroconf
+  ];
+
+  pythonImportsCheck = [ "dptrp1" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/janten/dpt-rp1-py";
+    description = "Python script to manage Sony DPT-RP1 without Digital Paper App";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mt-caret ];
+    mainProgram = "dptrp1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dsq/default.nix b/nixpkgs/pkgs/tools/misc/dsq/default.nix
new file mode 100644
index 000000000000..9d05e567fb10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dsq/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, nix-update-script
+, testers
+, python3
+, curl
+, jq
+, p7zip
+, dsq
+}:
+
+buildGoModule rec {
+  pname = "dsq";
+  version = "0.23.0";
+
+  src = fetchFromGitHub {
+    owner = "multiprocessio";
+    repo = "dsq";
+    rev = "v${version}";
+    hash = "sha256-FZBJe+2y4HV3Pgeap4yvD0a8M/j+6pAJEFpoQVVE1ec=";
+  };
+
+  vendorHash = "sha256-MbBR+OC1OGhZZGcZqc+Jzmabdc5ZfFEwzqP5YMrj6mY=";
+
+  ldflags = [ "-X" "main.Version=${version}" ];
+
+  nativeCheckInputs = [ python3 curl jq p7zip ];
+
+  preCheck = ''
+    substituteInPlace scripts/test.py \
+      --replace 'dsq latest' 'dsq ${version}'
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    7z e testdata/taxi.csv.7z
+    cp "$GOPATH/bin/dsq" .
+    python3 scripts/test.py
+
+    runHook postCheck
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+
+    tests.version = testers.testVersion { package = dsq; };
+  };
+
+  meta = with lib; {
+    mainProgram = "dsq";
+    description = "Commandline tool for running SQL queries against JSON, CSV, Excel, Parquet, and more";
+    homepage = "https://github.com/multiprocessio/dsq";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ liff ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dtach/default.nix b/nixpkgs/pkgs/tools/misc/dtach/default.nix
new file mode 100644
index 000000000000..226c7335f264
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dtach/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dtach";
+  version = "0.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/dtach/dtach/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1wwj2hlngi8qn2pisvhyfxxs8gyqjlgrrv5lz91w8ly54dlzvs9j";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp dtach $out/bin/dtach
+  '';
+
+  meta = {
+    homepage = "https://dtach.sourceforge.net/";
+    description = "A program that emulates the detach feature of screen";
+
+    longDescription = ''
+      dtach is a tiny program that emulates the detach feature of
+      screen, allowing you to run a program in an environment that is
+      protected from the controlling terminal and attach to it later.
+      dtach does not keep track of the contents of the screen, and
+      thus works best with programs that know how to redraw
+      themselves.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.unix;
+    maintainers = [ ];
+    mainProgram = "dtach";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dtool/default.nix b/nixpkgs/pkgs/tools/misc/dtool/default.nix
new file mode 100644
index 000000000000..9cf22a9da39f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dtool/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dtool";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "guoxbin";
+    repo = "dtool";
+    rev = "v${version}";
+    hash = "sha256-m4H+ANwEbK6vGW3oIVZqnqvMiAKxNJf2TLIGh/G6AU4=";
+  };
+
+  cargoHash = "sha256-r8r3f4yKMQgjtB3j4qE7cqQL18nIqAGPO5RsFErqh2c=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  checkType = "debug";
+
+  meta = with lib; {
+    description = "A command-line tool collection to assist development written in RUST";
+    homepage = "https://github.com/guoxbin/dtool";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ linuxissuper ];
+    mainProgram = "dtool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dua/default.nix b/nixpkgs/pkgs/tools/misc/dua/default.nix
new file mode 100644
index 000000000000..110862bf1396
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dua/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dua";
+  version = "2.28.0";
+
+  src = fetchFromGitHub {
+    owner = "Byron";
+    repo = "dua-cli";
+    rev = "v${version}";
+    hash = "sha256-a5J6G7QvCi2u064fP4V5uxxvBXcbN+a+dIO5MbsVU70=";
+    # Remove unicode file names which leads to different checksums on HFS+
+    # vs. other filesystems because of unicode normalisation.
+    postFetch = ''
+      rm -r $out/tests/fixtures
+    '';
+  };
+
+  cargoHash = "sha256-Up7HvBJMR5h+/rdlJVMeCCuOiOQ8++oReCBI8wt3T2M=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Foundation
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool to conveniently learn about the disk usage of directories";
+    homepage = "https://github.com/Byron/dua-cli";
+    changelog = "https://github.com/Byron/dua-cli/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ figsoda killercup ];
+    mainProgram = "dua";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/duc/default.nix b/nixpkgs/pkgs/tools/misc/duc/default.nix
new file mode 100644
index 000000000000..0501b681aa3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/duc/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, tokyocabinet, ncurses
+, cairo ? null, pango ? null
+, enableCairo ? stdenv.isLinux
+}:
+
+assert enableCairo -> cairo != null && pango != null;
+
+stdenv.mkDerivation rec {
+  pname = "duc";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "zevv";
+    repo = "duc";
+    rev = version;
+    sha256 = "sha256-ZLNsyp82UnsveEfDKzH8WfRh/Y/PQlXq8Ma+jIZl9Gk=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ tokyocabinet ncurses ] ++
+    lib.optionals enableCairo [ cairo pango ];
+
+  configureFlags =
+    lib.optionals (!enableCairo) [ "--disable-x11" "--disable-cairo" ];
+
+  meta = with lib; {
+    homepage = "http://duc.zevv.nl/";
+    description = "Collection of tools for inspecting and visualizing disk usage";
+    license = licenses.gpl2;
+
+    platforms = platforms.all;
+    maintainers = [ ];
+    mainProgram = "duc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/duf/default.nix b/nixpkgs/pkgs/tools/misc/duf/default.nix
new file mode 100644
index 000000000000..5c2ccb5717fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/duf/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, buildGoModule, installShellFiles }:
+
+buildGoModule rec {
+  pname = "duf";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "muesli";
+    repo = "duf";
+    rev = "v${version}";
+    sha256 = "sha256-bVuqX88KY+ky+fd1FU9GWP78jQc4fRDk9yRSeIesHyI=";
+  };
+
+  vendorHash = "sha256-oihi7E67VQmym9U1gdD802AYxWRrSowhzBiKg0CBDPc=";
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage duf.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/muesli/duf/";
+    description = "Disk Usage/Free Utility";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda penguwin ];
+    mainProgram = "duf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dumptorrent/default.nix b/nixpkgs/pkgs/tools/misc/dumptorrent/default.nix
new file mode 100644
index 000000000000..194d40e1c1cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dumptorrent/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+    pname = "dumptorrent";
+    version = "1.2";
+
+    src = fetchurl {
+      url = "mirror://sourceforge/dumptorrent/dumptorrent-${version}.tar.gz";
+      sha256 = "073h03bmpfdy15qh37lvppayld2747i4acpyk0pm5nf2raiak0zm";
+    };
+
+    postPatch = ''
+      substituteInPlace Makefile \
+        --replace "gcc" "$CC"
+    '';
+
+    installPhase = ''
+      mkdir -p $out/bin
+      cp ./dumptorrent $out/bin
+    '';
+
+    meta = with lib; {
+      description = "Dump .torrent file information";
+      homepage = "https://sourceforge.net/projects/dumptorrent/";
+      license = licenses.gpl2;
+      maintainers = [ maintainers.zohl ];
+      platforms = platforms.all;
+      mainProgram = "dumptorrent";
+    };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dupd/default.nix b/nixpkgs/pkgs/tools/misc/dupd/default.nix
new file mode 100644
index 000000000000..cf5ab77e7d47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dupd/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, perl, which
+, openssl, sqlite }:
+
+# Instead of writing directly into $HOME, we change the default db location
+# from $HOME/.dupd_sqlite to $HOME/.cache/dupd.sqlite3
+
+stdenv.mkDerivation rec {
+  pname = "dupd";
+  version = "1.7.3";
+
+  src = fetchFromGitHub {
+    owner = "jvirkki";
+    repo  = "dupd";
+    rev   = version;
+    sha256 = "sha256-ZiQroJ5fjBCIjU+M8KRA0N3Mrg9h0NVtfYUIS4cYyhw=";
+  };
+
+  postPatch = ''
+    patchShebangs tests
+
+    # tests need HOME to write the database
+    export HOME=$TMPDIR
+
+    mkdir -p $HOME/.cache
+
+    for f in man/dupd man/dupd.1 src/main.c tests/test.56 tests/test.57 ; do
+      substituteInPlace $f --replace .dupd_sqlite .cache/dupd.sqlite3
+    done
+  '';
+
+  buildInputs = [ openssl sqlite ];
+
+  nativeBuildInputs = [ perl which ];
+
+  makeFlags = [
+    "INSTALL_PREFIX=$(out)"
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "CLI utility to find duplicate files";
+    homepage = "http://www.virkki.com/dupd";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "dupd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dutree/default.nix b/nixpkgs/pkgs/tools/misc/dutree/default.nix
new file mode 100644
index 000000000000..fe47997296e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dutree/default.nix
@@ -0,0 +1,28 @@
+{ fetchFromGitHub, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dutree";
+  version = "0.2.18";
+
+  src = fetchFromGitHub {
+    owner = "nachoparker";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "17lm8jd07bi499mywg2iq669im34j4x4yhc8a3adxn12f8j0dfg7";
+    # test directory has files with unicode names which causes hash mismatches
+    # It is also not used by any tests or parts of build process
+    postFetch = ''
+      rm -r $out/test
+    '';
+  };
+
+  cargoSha256 = "0gg1w0xx36aswfm0y53nqwwz7zds25ysmklbrc8v2r91j74bhkzw";
+
+  meta = with lib; {
+    description = "A tool to analyze file system usage written in Rust";
+    homepage = "https://github.com/nachoparker/dutree";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "dutree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dvtm/default.nix b/nixpkgs/pkgs/tools/misc/dvtm/default.nix
new file mode 100644
index 000000000000..ea5a051c62b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dvtm/default.nix
@@ -0,0 +1,20 @@
+{callPackage, fetchurl}:
+callPackage ./dvtm.nix rec {
+  pname = "dvtm";
+  version = "0.15";
+
+  src = fetchurl {
+    url = "https://www.brain-dump.org/projects/dvtm/dvtm-${version}.tar.gz";
+    sha256 = "0475w514b7i3gxk6khy8pfj2gx9l7lv2pwacmq92zn1abv01a84g";
+  };
+
+  patches = [
+    # https://github.com/martanne/dvtm/pull/69
+    # Use self-pipe instead of signal blocking fixes issues on darwin.
+    (fetchurl {
+      url = "https://github.com/martanne/dvtm/commit/1f1ed664d64603f3f1ce1388571227dc723901b2.patch";
+      sha256 = "1cby8x3ckvhzqa8yxlfrwzgm8wk7yz84kr9psdjr7xwpnca1cqrd";
+    })
+  ];
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix b/nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix
new file mode 100644
index 000000000000..feb9c7a92f82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, ncurses, customConfig ? null, pname, version, src, patches ? [] }:
+stdenv.mkDerivation {
+
+  inherit pname version src patches;
+
+  CFLAGS = lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
+
+  postPatch = lib.optionalString (customConfig != null) ''
+    cp ${builtins.toFile "config.h" customConfig} ./config.h
+  '';
+
+  nativeBuildInputs = [ ncurses ];
+  buildInputs = [ ncurses ];
+
+  prePatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/share/terminfo $out/share/terminfo
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Dynamic virtual terminal manager";
+    homepage = "http://www.brain-dump.org/projects/dvtm";
+    license = licenses.mit;
+    maintainers = [ maintainers.vrthra ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dvtm/unstable.nix b/nixpkgs/pkgs/tools/misc/dvtm/unstable.nix
new file mode 100644
index 000000000000..4008407f28fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dvtm/unstable.nix
@@ -0,0 +1,27 @@
+{ callPackage, fetchpatch, fetchzip }:
+
+let
+  rev = "7bcf43f8dbd5c4a67ec573a1248114caa75fa3c2";
+in
+callPackage ./dvtm.nix {
+  pname = "dvtm-unstable";
+  version = "unstable-2021-03-09";
+
+  src = fetchzip {
+    urls = [
+      "https://github.com/martanne/dvtm/archive/${rev}.tar.gz"
+      "https://git.sr.ht/~martanne/dvtm/archive/${rev}.tar.gz"
+    ];
+    hash = "sha256-UtkNsW0mvLfbPSAIIZ1yvX9xzIDtiBeXCjhN2R8JhDc=";
+  };
+
+  patches = [
+    # https://github.com/martanne/dvtm/pull/69
+    # Use self-pipe instead of signal blocking fixes issues on darwin.
+    (fetchpatch {
+      name = "use-self-pipe-fix-darwin";
+      url = "https://github.com/martanne/dvtm/commit/1f1ed664d64603f3f1ce1388571227dc723901b2.patch";
+      sha256 = "14j3kks7b1v6qq12442v1da3h7khp02rp0vi0qrz0rfgkg1zilpb";
+    })
+  ];
+}
diff --git a/nixpkgs/pkgs/tools/misc/dwarf2json/default.nix b/nixpkgs/pkgs/tools/misc/dwarf2json/default.nix
new file mode 100644
index 000000000000..3bd0fa4b94a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dwarf2json/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "dwarf2json";
+  version = "unstable-2021-04-15";
+
+  src = fetchFromGitHub {
+    owner = "volatilityfoundation";
+    repo = "dwarf2json";
+    rev = "e8a1ce85dc33bf2039adc7f8a5f47f3016153720";
+    sha256 = "sha256-hnS00glAcj78mZp5as63CsEn+dcr+GNEkz8iC3KM0h0=";
+  };
+
+  vendorHash = "sha256-tgs0l+sYdAxMHwVTew++keNpDyrHmevpmOBVIiuL+34=";
+
+  meta = with lib; {
+    homepage = "https://github.com/volatilityfoundation/dwarf2json";
+    description = "Convert ELF/DWARF symbol and type information into vol3's intermediate JSON";
+    license = licenses.vol-sl;
+    maintainers = with maintainers; [ arkivm ];
+    mainProgram = "dwarf2json";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dwt1-shell-color-scripts/default.nix b/nixpkgs/pkgs/tools/misc/dwt1-shell-color-scripts/default.nix
new file mode 100644
index 000000000000..e7c7287b5311
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dwt1-shell-color-scripts/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitLab
+, installShellFiles
+}:
+
+stdenvNoCC.mkDerivation {
+  pname = "dwt1-shell-color-scripts";
+  version = "unstable-2023-03-27";
+
+  src = fetchFromGitLab {
+    owner = "dwt1";
+    repo = "shell-color-scripts";
+    rev = "576735cf656ece1bfd314e617b91c0e9d486d262";
+    hash = "sha256-1iDcUv6uVq5LzFgZo36RRKqAzKoYKZW/MnlbneayvCY=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = ''
+    patchShebangs ./colorscript.sh
+    patchShebangs ./colorscripts
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/shell-color-scripts
+    install -Dm755 colorscript.sh $out/bin/colorscript
+    cp -r colorscripts $out/share/shell-color-scripts/colorscripts
+
+    installManPage colorscript.1
+    installShellCompletion --fish completions/colorscript.fish
+    installShellCompletion --zsh completions/_colorscript
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/bin/colorscript \
+      --replace "/opt/shell-color-scripts/colorscripts" \
+                "$out/share/shell-color-scripts/colorscripts"
+  '';
+
+  meta = {
+    homepage = "https://gitlab.com/dwt1/shell-color-scripts";
+    description = "A collection of shell color scripts collected by dt (Derek Taylor)";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.all;
+    mainProgram = "colorscript";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix b/nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix
new file mode 100644
index 000000000000..0c04f70f26f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "dynamic-colors";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner  = "peterhoeg";
+    repo   = "dynamic-colors";
+    rev    = "v${version}";
+    sha256 = "sha256-jSdwq9WwYZP8MK6z7zJa0q93xfanr6iuvAt8YQkQxxE=";
+  };
+
+  PREFIX = placeholder "out";
+
+  postPatch = ''
+    substituteInPlace bin/dynamic-colors \
+      --replace /usr/share/dynamic-colors $out/share/dynamic-colors
+  '';
+
+  meta = with lib; {
+    description = "Change terminal colors on the fly";
+    homepage    = "https://github.com/peterhoeg/dynamic-colors";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.unix;
+    mainProgram = "dynamic-colors";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ea/default.nix b/nixpkgs/pkgs/tools/misc/ea/default.nix
new file mode 100644
index 000000000000..d45f3b431dcd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ea/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, rustPlatform
+, installShellFiles
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ea";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "dduan";
+    repo = "ea";
+    rev = version;
+    hash = "sha256-VXSSe5d7VO3LfjumzN9a7rrKRedOtOzTdLVQWgV1ED8=";
+  };
+
+  cargoPatches = [
+    # https://github.com/dduan/ea/pull/64
+    (fetchpatch {
+      name = "update-guard.patch";
+      url = "https://github.com/dduan/ea/commit/068aa36d7a472c7a4bac855f2404e7094dec7d58.patch";
+      hash = "sha256-iK3fjB6zSDqe0yMUIFjP1nEFLYLFg7dy6+b0T6mC1GA=";
+    })
+  ];
+
+  cargoHash = "sha256-/MkLWAbEr14CYdqSwJP1vNYxK7pAmMLdhiV61UQEbME=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    libiconv
+  ];
+
+  postInstall = ''
+    installManPage docs/ea.1
+  '';
+
+  meta = with lib; {
+    description = "Makes file paths from CLI output actionable";
+    homepage = "https://github.com/dduan/ea";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ deejayem ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/easeprobe/default.nix b/nixpkgs/pkgs/tools/misc/easeprobe/default.nix
new file mode 100644
index 000000000000..70181956339c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/easeprobe/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "easeprobe";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "megaease";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vdbzDwFpCYVgH9T8e62+1hnMyWsWrT7e6WPaAlBc2H0=";
+  };
+
+  vendorHash = "sha256-ZB6q8XvDVSF5/kx2Avq0PYBkYqSoMD6YHhuXRrotFgk=";
+
+  subPackages = [ "cmd/easeprobe" ];
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-extldflags -static"
+    "-X github.com/megaease/easeprobe/global.Ver=${version}"
+    "-X github.com/megaease/easeprobe/pkg/version.REPO=megaease/easeprobe"
+  ];
+
+  meta = with lib; {
+    description = "A simple, standalone, and lightweight tool that can do health/status checking, written in Go";
+    homepage = "https://github.com/megaease/easeprobe";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "easeprobe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/edid-decode/default.nix b/nixpkgs/pkgs/tools/misc/edid-decode/default.nix
new file mode 100644
index 000000000000..eb72d0a81570
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/edid-decode/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchgit
+, unstableGitUpdater
+}:
+
+stdenv.mkDerivation {
+  pname = "edid-decode";
+  version = "unstable-2022-12-14";
+
+  outputs = [
+    "out"
+    "man"
+  ];
+
+  src = fetchgit {
+    url = "git://linuxtv.org/edid-decode.git";
+    rev = "e052f5f9fdf74ca11aa1a8edfa62eff8d0aa3d0d";
+    hash = "sha256-qNtb/eM7VpS8nRbC/nNm6J9vEWVUSrg7OwNaW1774QY=";
+  };
+
+  preBuild = ''
+    export DESTDIR=$out
+    export bindir=/bin
+    export mandir=/share/man
+  '';
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    description = "EDID decoder and conformance tester";
+    homepage = "https://git.linuxtv.org/edid-decode.git";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ Madouura ];
+    platforms = platforms.all;
+    mainProgram = "edid-decode";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/edid-generator/default.nix b/nixpkgs/pkgs/tools/misc/edid-generator/default.nix
new file mode 100644
index 000000000000..fc7f01226972
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/edid-generator/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, dos2unix
+, edid-decode
+, hexdump
+, zsh
+}:
+
+# Usage:
+#   hardware.firmware = [(edid-generator.overrideAttrs {
+#     clean = true;
+#     modelines = ''
+#       Modeline "PG278Q_60"      241.50   2560 2608 2640 2720   1440 1443 1448 1481   -hsync +vsync
+#       Modeline "PG278Q_120"     497.75   2560 2608 2640 2720   1440 1443 1448 1525   +hsync -vsync
+#       Modeline "U2711_60"       241.50   2560 2600 2632 2720   1440 1443 1448 1481   -hsync +vsync
+#     '';
+#   })];
+
+stdenv.mkDerivation {
+  pname = "edid-generator";
+  version = "master-2023-11-20";
+
+  # so `hardware.firmware` doesn't compress it
+  compressFirmware = false;
+
+  src = fetchFromGitHub {
+    owner = "akatrevorjay";
+    repo = "edid-generator";
+    rev = "476a016d8b488df749bf6d6efbf7b9fbfb2e3cb8";
+    sha256 = "sha256-UGxze273VB5cQDWrv9X/Lam6WbOu9U3bro8GcVbEvws=";
+  };
+
+  nativeBuildInputs = [ dos2unix edid-decode hexdump zsh ];
+
+  postPatch = ''
+    patchShebangs modeline2edid
+  '';
+
+  passAsFile = [ "modelines" ];
+  clean = false;
+  modelines = "";
+
+  configurePhase = ''
+    test "$clean" != 1 || rm *x*.S
+    ./modeline2edid - <"$modelinesPath"
+
+    for file in *.S ; do
+      echo "--- generated file: $file"
+      cat "$file"
+    done
+    make clean
+  '';
+
+  buildPhase = ''
+    make all
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    for file in *.bin ; do
+      echo "validating $file"
+      edid-decode <"$file"
+    done
+  '';
+
+  installPhase = ''
+    install -Dm 444 *.bin -t "$out/lib/firmware/edid"
+  '';
+
+  meta = {
+    description = "Hackerswork to generate an EDID blob from given Xorg Modelines";
+    homepage = "https://github.com/akatrevorjay/edid-generator";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ flokli nazarewk ];
+    platforms = lib.platforms.all;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/edid-generator.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/edir/default.nix b/nixpkgs/pkgs/tools/misc/edir/default.nix
new file mode 100644
index 000000000000..41e51a251b38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/edir/default.nix
@@ -0,0 +1,29 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "edir";
+  version = "2.27";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-i9c5DDZnCj6Roqw6fpy+rhX2/Sup1hh8vIpsRcWZQFc=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    platformdirs
+  ];
+
+  meta = with lib; {
+    description = "Program to rename and remove files and directories using your editor";
+    homepage = "https://github.com/bulletmark/edir";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ guyonvarch ];
+    platforms = platforms.all;
+    mainProgram = "edir";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/edk2-uefi-shell/default.nix b/nixpkgs/pkgs/tools/misc/edk2-uefi-shell/default.nix
new file mode 100644
index 000000000000..7547f9b3e476
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/edk2-uefi-shell/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, edk2
+, llvmPackages
+, util-linux
+, nasm
+, python3
+}:
+edk2.mkDerivation "ShellPkg/ShellPkg.dsc" (finalAttrs: {
+  pname = "edk2-uefi-shell";
+  inherit (edk2) version;
+
+  nativeBuildInputs = [ util-linux nasm python3 ]
+    ++ lib.optionals stdenv.cc.isClang [ llvmPackages.bintools llvmPackages.llvm ];
+  strictDeps = true;
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.cc.isClang [ "-fno-pic" "-Qunused-arguments" ]);
+
+  # Set explicitly to use Python 3 from nixpkgs. Otherwise, the build system will detect and try to
+  # use `/usr/bin/python3` on Darwin when sandboxing is disabled.
+  PYTHON_COMMAND = "${lib.getBin python3}/bin/python3";
+
+  # We only have a .efi file in $out which shouldn't be patched or stripped
+  dontPatchELF = true;
+  dontStrip = true;
+
+  # GUID hardcoded to match ShellPkg.dsc
+  installPhase = ''
+    runHook preInstall
+    install -D -m0644 Build/Shell/RELEASE*/*/Shell_EA4BB293-2D7F-4456-A681-1F22F42CD0BC.efi $out/shell.efi
+    runHook postInstall
+  '';
+
+  passthru.efi = "${finalAttrs.finalPackage}/shell.efi";
+
+  meta = {
+    inherit (edk2.meta) license platforms;
+    description = "UEFI Shell from Tianocore EFI development kit";
+    homepage = "https://github.com/tianocore/tianocore.github.io/wiki/ShellPkg";
+    maintainers = with lib.maintainers; [ LunNova ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/eget/default.nix b/nixpkgs/pkgs/tools/misc/eget/default.nix
new file mode 100644
index 000000000000..1bf2b7f10110
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eget/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, pandoc
+, installShellFiles
+, nix-update-script
+, testers
+, eget
+}:
+
+buildGoModule rec {
+  pname = "eget";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "zyedidia";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-OOqfZ2uS3sYBH9xrlQN1iSNdNE9RGi6qiDXfPgf2aB0=";
+  };
+
+  vendorHash = "sha256-A3lZtV0pXh4KxINl413xGbw2Pz7OzvIQiFSRubH428c=";
+
+  ldflags = [ "-s" "-w" "-X main.Version=v${version}" ];
+
+  nativeBuildInputs = [ pandoc installShellFiles ];
+
+  postInstall = ''
+    pandoc man/eget.md -s -t man -o eget.1
+    installManPage eget.1
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = eget;
+      command = "eget -v";
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Easily install prebuilt binaries from GitHub";
+    homepage = "https://github.com/zyedidia/eget";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zendo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ego/default.nix b/nixpkgs/pkgs/tools/misc/ego/default.nix
new file mode 100644
index 000000000000..67a71a196bd7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ego/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeBinaryWrapper
+, acl
+, xorg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ego";
+  version = "1.1.7";
+
+  src = fetchFromGitHub {
+    owner = "intgr";
+    repo = "ego";
+    rev = version;
+    hash = "sha256-613RM7Ldye0wHAH3VMhzhyT5WVTybph3gS/WNMrsgGI=";
+  };
+
+  buildInputs = [ acl ];
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  cargoHash = "sha256-3leKejQ8kxamjwQPH1vg2I1CYc3r8k3pYfTWpOkqq8I=";
+
+  # requires access to /root
+  checkFlags = [
+    "--skip tests::test_check_user_homedir"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/ego --prefix PATH : ${lib.makeBinPath [ xorg.xhost ]}
+  '';
+
+  meta = {
+    description = "Run Linux desktop applications under a different local user";
+    homepage = "https://github.com/intgr/ego";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dit7ya ];
+    mainProgram = "ego";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/elfcat/default.nix b/nixpkgs/pkgs/tools/misc/elfcat/default.nix
new file mode 100644
index 000000000000..2344eb717547
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/elfcat/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "elfcat";
+  version = "0.1.8";
+
+  src = fetchFromGitHub {
+    owner = "ruslashev";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-NzFKNCCPWBj/fhaEJF34nyeyvLMeQwIcQgTlYc6mgYo=";
+  };
+
+  cargoHash = "sha256-Dc+SuLwbLFcNSr9RiNSc7dgisBOvOUEIDR8dFAkC/O0=";
+
+  meta = with lib; {
+    description = "ELF visualizer, generates HTML files from ELF binaries";
+    homepage = "https://github.com/ruslashev/elfcat";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ moni ];
+    mainProgram = "elfcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/eludris/default.nix b/nixpkgs/pkgs/tools/misc/eludris/default.nix
new file mode 100644
index 000000000000..ac3ecc2e5a6c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eludris/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, openssl
+, pkg-config
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "eludris";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "eludris";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-TVYgimkGUSITB3IaMlMd10PWomqyJRvONvJwiW85U4M=";
+  };
+
+  cargoHash = "sha256-5B9D19jFh5+eNTjiho22CFsn51nmwLry08zSDWvs1OU=";
+
+  cargoBuildFlags = [ "-p eludris" ];
+  cargoTestFlags = [ "-p eludris" ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "A simple CLI to help you with setting up and managing your Eludris instance";
+    homepage = "https://github.com/eludris/eludris/tree/main/cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ooliver1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/empty/0.6-Makefile.patch b/nixpkgs/pkgs/tools/misc/empty/0.6-Makefile.patch
new file mode 100644
index 000000000000..6fb494cdf54c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/empty/0.6-Makefile.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index 1fe4c41..2c69558 100644
+--- a/Makefile
++++ b/Makefile
+@@ -16,7 +16,7 @@ LIBS =	-lutil
+ PREFIX = /usr/local
+ 
+ all:
+-	${CC} ${CFLAGS} -Wall ${LIBS} -o empty empty.c
++	${CC} ${CFLAGS} -Wall -o empty empty.c ${LIBS}
+ 
+ FreeBSD:	all
+ NetBSD:		all
diff --git a/nixpkgs/pkgs/tools/misc/empty/default.nix b/nixpkgs/pkgs/tools/misc/empty/default.nix
new file mode 100644
index 000000000000..29dfa606dd44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/empty/default.nix
@@ -0,0 +1,47 @@
+{ fetchzip, lib, stdenv, which }:
+
+stdenv.mkDerivation rec {
+  pname = "empty";
+  version = "0.6.21b";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/${pname}/${pname}/${pname}-${version}.tgz";
+    sha256 = "1rkixh2byr70pdxrwr4lj1ckh191rjny1m5xbjsa7nqw1fw6c2xs";
+    stripRoot = false;
+  };
+
+  patches = [
+    ./0.6-Makefile.patch
+  ];
+
+  nativeBuildInputs = [ which ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postPatch = ''
+    rm empty
+  '';
+
+  meta = with lib; {
+    homepage = "https://empty.sourceforge.net";
+    description = "A simple tool to automate interactive terminal applications";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    longDescription = ''
+      The empty utility provides an interface to execute and/or interact with
+      processes under pseudo-terminal sessions (PTYs). This tool is definitely
+      useful in programming of shell scripts designed to communicate with
+      interactive programs like telnet, ssh, ftp, etc. In some cases empty can
+      be the simplest replacement for TCL/expect or other similar programming
+      tools because empty:
+
+      - can be easily invoked directly from shell prompt or script
+      - does not use TCL, Perl, PHP, Python or anything else as an underlying language
+      - is written entirely in C
+      - has small and simple source code
+      - can easily be ported to almost all UNIX-like systems
+    '';
+    maintainers = [ maintainers.djwf ];
+    mainProgram = "empty";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/emv/default.nix b/nixpkgs/pkgs/tools/misc/emv/default.nix
new file mode 100644
index 000000000000..a317805e463c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/emv/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "emv";
+  version = "1.95";
+
+  src = fetchurl {
+    url = "http://www.i0i0.de/toolchest/emv";
+    sha256 = "7e0e12afa45ef5ed8025e5f2c6deea0ff5f512644a721f7b1b95b63406a8f7ce";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -pv $out/bin
+    cp $src $out/bin/emv
+    chmod +x $out/bin/emv
+  '';
+
+  meta = {
+    homepage = "http://www.i0i0.de/toolchest/emv";
+    description = "Editor Move: Rename files with your favourite text editor";
+    license = lib.licenses.publicDomain;
+    platforms = lib.platforms.unix;
+    mainProgram = "emv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/encpipe/default.nix b/nixpkgs/pkgs/tools/misc/encpipe/default.nix
new file mode 100644
index 000000000000..f3ab870b0f05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/encpipe/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "encpipe";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "jedisct1";
+    repo = "encpipe";
+    rev = version;
+    hash = "sha256-YlEKSWzZuQyDi0mbwJh9Dfn4gKiOeqihSHPt4yY6YdY=";
+    fetchSubmodules = true;
+  };
+
+  installFlags = [
+    "PREFIX=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "An encryption tool";
+    homepage = "https://github.com/jedisct1/encpipe";
+    license = licenses.isc;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "encpipe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/enjarify/default.nix b/nixpkgs/pkgs/tools/misc/enjarify/default.nix
new file mode 100644
index 000000000000..0a146dc02f32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/enjarify/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, python3, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "enjarify";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-VDBC5n2jWLNJsilX+PV1smL5JeBDj23jYFRwdObXwYs=";
+  };
+
+  installPhase = ''
+    pypath="$out/${python3.sitePackages}"
+    mkdir -p $out/bin $pypath
+    mv enjarify $pypath
+
+    cat << EOF > $out/bin/enjarify
+    #!${runtimeShell}
+    export PYTHONPATH=$pypath
+    exec ${python3.interpreter} -O -m enjarify.main "\$@"
+    EOF
+    chmod +x $out/bin/enjarify
+  '';
+
+  buildInputs = [ ];
+
+  meta = with lib; {
+    description = "Tool for translating Dalvik bytecode to equivalent Java bytecode";
+    homepage = "https://github.com/google/enjarify/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    mainProgram = "enjarify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ent/default.nix b/nixpkgs/pkgs/tools/misc/ent/default.nix
new file mode 100644
index 000000000000..3152e00503bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ent/default.nix
@@ -0,0 +1,32 @@
+{lib, stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation {
+  pname = "ent";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://www.fourmilab.ch/random/random.zip";
+    sha256 = "1v39jlj3lzr5f99avzs2j2z6anqqd64bzm1pdf6q84a5n8nxckn1";
+  };
+
+  # Work around the "unpacker appears to have produced no directories"
+  # case that happens when the archive doesn't have a subdirectory.
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ unzip ];
+
+  buildFlags = lib.optional stdenv.cc.isClang "CC=clang";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ent $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Pseudorandom Number Sequence Test Program";
+    homepage = "https://www.fourmilab.ch/random/";
+    platforms = platforms.all;
+    license = licenses.publicDomain;
+    mainProgram = "ent";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/entr/default.nix b/nixpkgs/pkgs/tools/misc/entr/default.nix
new file mode 100644
index 000000000000..6d00d4128a51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/entr/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "entr";
+  version = "5.5";
+
+  src = fetchurl {
+    url = "https://eradman.com/entrproject/code/${pname}-${version}.tar.gz";
+    hash = "sha256-EowM4u/qWua9P9M8PNMeFh6wwCYJ2HF6036VtBZW5SY=";
+  };
+
+  postPatch = ''
+    substituteInPlace entr.c --replace /bin/cat ${coreutils}/bin/cat
+    substituteInPlace entr.1 --replace /bin/cat cat
+  '';
+  dontAddPrefix = true;
+  doCheck = true;
+  checkTarget = "test";
+  installFlags = [ "PREFIX=$(out)" ];
+
+  TARGET_OS = stdenv.hostPlatform.uname.system;
+
+  meta = with lib; {
+    homepage = "https://eradman.com/entrproject/";
+    description = "Run arbitrary commands when files change";
+    changelog = "https://github.com/eradman/entr/raw/${version}/NEWS";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub synthetica ];
+    mainProgram = "entr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/enumer/default.nix b/nixpkgs/pkgs/tools/misc/enumer/default.nix
new file mode 100644
index 000000000000..c10cfdccd91f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/enumer/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "enumer";
+  version = "1.5.9";
+
+  src = fetchFromGitHub {
+    owner = "dmarkham";
+    repo = "enumer";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-NYL36GBogFM48IgIWhFa1OLZNUeEi0ppS6KXybnPQks=";
+  };
+
+  vendorHash = "sha256-CJCay24FlzDmLjfZ1VBxih0f+bgBNu+Xn57QgWT13TA=";
+
+  meta = with lib; {
+    description = "Go tool to auto generate methods for enums";
+    homepage = "https://github.com/dmarkham/enumer";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ hexa ];
+    mainProgram = "enumer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/envchain/default.nix b/nixpkgs/pkgs/tools/misc/envchain/default.nix
new file mode 100644
index 000000000000..a204f31a7484
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/envchain/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, libedit, libsecret, ncurses, pkg-config, readline, Security }:
+
+stdenv.mkDerivation rec {
+  pname = "envchain";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "sorah";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0qxwiqhb8cg0zbn5p0mvnbyxx1xwvgiricrkjlvxz13sf2ngq87p";
+  };
+
+  postPatch = ''
+    sed -i -e "s|-ltermcap|-lncurses|" Makefile
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libsecret readline ]
+    ++ lib.optionals stdenv.isDarwin [ libedit ncurses Security ];
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    description = "Set environment variables with macOS keychain or D-Bus secret service";
+    homepage = "https://github.com/sorah/envchain";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+    mainProgram = "envchain";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/envsubst/default.nix b/nixpkgs/pkgs/tools/misc/envsubst/default.nix
new file mode 100644
index 000000000000..8cd59df31b1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/envsubst/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "envsubst";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "a8m";
+    repo = "envsubst";
+    rev = "v${version}";
+    sha256 = "sha256-gfzqf/CXSwGXBK5VHJnepFZ1wB3WElpEp6ra9JI4WtY=";
+  };
+
+  vendorHash = "sha256-L0MbABgUniuI5NXc4ffBUsQRI716W/FiH38bGthpXzI=";
+
+  postInstall = ''
+    install -Dm444 -t $out/share/doc/${pname} LICENSE *.md
+  '';
+
+  meta = with lib; {
+    description = "Environment variables substitution for Go";
+    homepage = "https://github.com/a8m/envsubst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nicknovitski ];
+    mainProgram = "envsubst";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/eot-utilities/default.nix b/nixpkgs/pkgs/tools/misc/eot-utilities/default.nix
new file mode 100644
index 000000000000..bb9279687b1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eot-utilities/default.nix
@@ -0,0 +1,21 @@
+{lib, stdenv, fetchurl, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "eot_utilities";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://www.w3.org/Tools/eot-utils/eot-utilities-${version}.tar.gz";
+    sha256 = "0cb41riabss23hgfg7vxhky09d6zqwjy1nxdvr3l2bh5qzd4kvaf";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = {
+    homepage = "https://www.w3.org/Tools/eot-utils/";
+    description = "Create Embedded Open Type from OpenType or TrueType font";
+    license = lib.licenses.w3c;
+    maintainers = with lib.maintainers; [ leenaars ];
+    platforms = with lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/esphome/dashboard.nix b/nixpkgs/pkgs/tools/misc/esphome/dashboard.nix
new file mode 100644
index 000000000000..f5bd9910569f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esphome/dashboard.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "esphome-dashboard";
+  version = "20231107.0";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-84iM987nxNidMObnbY3lt78xRbN9USNtqQzfOzkd17k=";
+  };
+
+  # no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "esphome_dashboard"
+  ];
+
+  meta = with lib; {
+    description = "ESPHome dashboard";
+    homepage = "https://esphome.io/";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/esphome/default.nix b/nixpkgs/pkgs/tools/misc/esphome/default.nix
new file mode 100644
index 000000000000..f3073c051be9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esphome/default.nix
@@ -0,0 +1,138 @@
+{ lib
+, callPackage
+, python3Packages
+, fetchFromGitHub
+, installShellFiles
+, platformio
+, esptool
+, git
+, inetutils
+, stdenv
+}:
+
+let
+  python = python3Packages.python.override {
+    packageOverrides = self: super: {
+      esphome-dashboard = self.callPackage ./dashboard.nix { };
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "esphome";
+  version = "2023.12.9";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-8SHf6cbPYPZctjJgIuEb7eOJVi5hWNONyRnMXK0iBXc=";
+  };
+
+  nativeBuildInputs = with python.pkgs; [
+    setuptools
+    argcomplete
+    installShellFiles
+  ];
+
+  postPatch = ''
+    # remove all version pinning (E.g tornado==5.1.1 -> tornado)
+    sed -i -e "s/==[0-9.]*//" requirements.txt
+
+    # drop coverage testing
+    sed -i '/--cov/d' pytest.ini
+  '';
+
+  # Remove esptool and platformio from requirements
+  ESPHOME_USE_SUBPROCESS = "";
+
+  # esphome has optional dependencies it does not declare, they are
+  # loaded when certain config blocks are used, like `font`, `image`
+  # or `animation`.
+  # They have validation functions like:
+  # - validate_cryptography_installed
+  # - validate_pillow_installed
+  propagatedBuildInputs = with python.pkgs; [
+    aioesphomeapi
+    argcomplete
+    click
+    colorama
+    cryptography
+    esphome-dashboard
+    kconfiglib
+    paho-mqtt
+    pillow
+    platformio
+    protobuf
+    pyparsing
+    pyserial
+    python-magic
+    pyyaml
+    requests
+    tornado
+    tzdata
+    tzlocal
+    voluptuous
+  ];
+
+  makeWrapperArgs = [
+    # platformio is used in esphome/platformio_api.py
+    # esptool is used in esphome/__main__.py
+    # git is used in esphome/writer.py
+    # inetutils is used in esphome/dashboard/status/ping.py
+    "--prefix PATH : ${lib.makeBinPath [ platformio esptool git inetutils ]}"
+    "--prefix PYTHONPATH : ${python.pkgs.makePythonPath propagatedBuildInputs}" # will show better error messages
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ stdenv.cc.cc.lib ]}"
+    "--set ESPHOME_USE_SUBPROCESS ''"
+  ];
+
+  # Needed for tests
+  __darwinAllowLocalNetworking = true;
+
+  nativeCheckInputs = with python3Packages; [
+    hypothesis
+    mock
+    pytest-asyncio
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # requires hypothesis 5.49, we have 6.x
+    # ImportError: cannot import name 'ip_addresses' from 'hypothesis.provisional'
+    "tests/unit_tests/test_core.py"
+    "tests/unit_tests/test_helpers.py"
+  ];
+
+  postCheck = ''
+    $out/bin/esphome --help > /dev/null
+  '';
+
+  postInstall =
+    let
+      argcomplete = lib.getExe' python3Packages.argcomplete "register-python-argcomplete";
+    in
+    ''
+      installShellCompletion --cmd esphome \
+        --bash <(${argcomplete} --shell bash esphome) \
+        --zsh <(${argcomplete} --shell zsh esphome) \
+        --fish <(${argcomplete} --shell fish esphome)
+    '';
+
+  passthru = {
+    dashboard = python.pkgs.esphome-dashboard;
+    updateScript = callPackage ./update.nix { };
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/esphome/esphome/releases/tag/${version}";
+    description = "Make creating custom firmwares for ESP32/ESP8266 super easy";
+    homepage = "https://esphome.io/";
+    license = with licenses; [
+      mit # The C++/runtime codebase of the ESPHome project (file extensions .c, .cpp, .h, .hpp, .tcc, .ino)
+      gpl3Only # The python codebase and all other parts of this codebase
+    ];
+    maintainers = with maintainers; [ globin hexa ];
+    mainProgram = "esphome";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/esphome/update.nix b/nixpkgs/pkgs/tools/misc/esphome/update.nix
new file mode 100644
index 000000000000..6b05162f3955
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esphome/update.nix
@@ -0,0 +1,23 @@
+{ writeShellScript
+, lib
+, curl
+, jq
+, git
+, gnugrep
+, gnused
+, nix-update
+}:
+
+writeShellScript "update-esphome" ''
+  PATH=${lib.makeBinPath [ curl gnugrep gnused jq git nix-update ]}
+
+  LATEST=$(curl https://api.github.com/repos/esphome/esphome/releases/latest | jq -r '.name')
+  echo "Latest version: $LATEST"
+
+  DASHBOARD_VERSION=$(curl https://raw.githubusercontent.com/esphome/esphome/$LATEST/requirements.txt | \
+    grep "esphome-dashboard==" | sed "s/.*=//")
+  echo "Dashboard version: $DASHBOARD_VERSION"
+
+  nix-update esphome.dashboard --version $DASHBOARD_VERSION
+  nix-update esphome --version $LATEST
+''
diff --git a/nixpkgs/pkgs/tools/misc/esptool-ck/default.nix b/nixpkgs/pkgs/tools/misc/esptool-ck/default.nix
new file mode 100644
index 000000000000..2dd6415324e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esptool-ck/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "esptool-ck";
+  version = "0.4.13";
+
+  src = fetchFromGitHub {
+    owner = "igrr";
+    repo = "esptool-ck";
+    rev = "0.4.13";
+    sha256 = "1cb81b30a71r7i0gmkh2qagfx9lhq0myq5i37fk881bq6g7i5n2k";
+  };
+
+  makeFlags = [ "VERSION=${version}" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp esptool $out/bin
+  '';
+
+  meta = with lib; {
+    description = "ESP8266/ESP32 build helper tool";
+    homepage = "https://github.com/igrr/esptool-ck";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "esptool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/esptool/default.nix b/nixpkgs/pkgs/tools/misc/esptool/default.nix
new file mode 100644
index 000000000000..67eaacddaf6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esptool/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, fetchFromGitHub
+, python3
+, softhsm
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "esptool";
+  version = "4.7.0";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "espressif";
+    repo = "esptool";
+    rev = "v${version}";
+    hash = "sha256-yrEwCg0e+8jZorL6jcqeuKUCFoV0oP9HVFh1n/ezjPg=";
+  };
+
+  postPatch = ''
+    patchShebangs ci
+
+    substituteInPlace test/test_espsecure_hsm.py \
+      --replace "/usr/lib/softhsm" "${lib.getLib softhsm}/lib/softhsm"
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    bitstring
+    cryptography
+    ecdsa
+    intelhex
+    pyserial
+    reedsolo
+    pyyaml
+    python-pkcs11
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pyelftools
+    pytestCheckHook
+    softhsm
+  ];
+
+  # tests mentioned in `.github/workflows/test_esptool.yml`
+  checkPhase = ''
+    runHook preCheck
+
+    export SOFTHSM2_CONF=$(mktemp)
+    echo "directories.tokendir = $(mktemp -d)" > "$SOFTHSM2_CONF"
+    ./ci/setup_softhsm2.sh
+
+    pytest test/test_imagegen.py
+    pytest test/test_espsecure.py
+    pytest test/test_espsecure_hsm.py
+    pytest test/test_merge_bin.py
+    pytest test/test_image_info.py
+    pytest test/test_modules.py
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "ESP8266 and ESP32 serial bootloader utility";
+    homepage = "https://github.com/espressif/esptool";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dezgeg dotlambda ] ++ teams.lumiguide.members;
+    platforms = with platforms; linux ++ darwin;
+    mainProgram = "esptool.py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/etcher/default.nix b/nixpkgs/pkgs/tools/misc/etcher/default.nix
new file mode 100644
index 000000000000..4b27f35cf53c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/etcher/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, stdenv
+, fetchurl
+, bash
+, util-linux
+, autoPatchelfHook
+, dpkg
+, makeWrapper
+, udev
+, electron
+}:
+
+stdenv.mkDerivation rec {
+  pname = "etcher";
+  version = "1.18.12";
+
+  src = fetchurl {
+    url = "https://github.com/balena-io/etcher/releases/download/v${version}/balena-etcher_${version}_amd64.deb";
+    hash = "sha256-Ucs187xTpbRJ7P32hCl8cHPxO3HCs44ZneAas043FXk=";
+  };
+
+  # sudo-prompt has hardcoded binary paths on Linux and we patch them here
+  # along with some other paths
+  postPatch = ''
+    substituteInPlace opt/balenaEtcher/resources/app/generated/gui.js \
+      --replace '/usr/bin/pkexec' '/usr/bin/pkexec", "/run/wrappers/bin/pkexec' \
+      --replace '/bin/bash' '${bash}/bin/bash' \
+      --replace '"lsblk"' '"${util-linux}/bin/lsblk"'
+  '';
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    makeWrapper
+  ];
+
+  buildInputs = [
+    stdenv.cc.cc.lib
+    udev
+  ];
+
+  dontConfigure = true;
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${pname}
+
+    cp -a usr/share/* $out/share
+    cp -a opt/balenaEtcher/{locales,resources} $out/share/${pname}
+
+    makeWrapper ${electron}/bin/electron $out/bin/${pname} \
+      --add-flags $out/share/${pname}/resources/app
+
+    substituteInPlace $out/share/applications/balena-etcher.desktop \
+      --replace /opt/balenaEtcher/balena-etcher ${pname}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Flash OS images to SD cards and USB drives, safely and easily";
+    homepage = "https://etcher.io/";
+    license = licenses.asl20;
+    mainProgram = "etcher";
+    maintainers = with maintainers; [ wegank ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ethtool/default.nix b/nixpkgs/pkgs/tools/misc/ethtool/default.nix
new file mode 100644
index 000000000000..eb1911170beb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ethtool/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, libmnl
+, pkg-config
+, writeScript
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ethtool";
+  version = "6.1";
+
+  src = fetchurl {
+    url = "mirror://kernel/software/network/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-xB/Igf+lpAQy0t2CnrRMZKSd7kgucWuqz5Jixk2qj5A=";
+  };
+
+  patches = [
+    # Patch that fixes build with musl libc
+    # NOTE remove on next release, since it is applied in upstream
+    (fetchpatch {
+      name = "Fix-build-with-musl-libc.patch";
+      url = "https://git.kernel.org/pub/scm/network/ethtool/ethtool.git/patch/marvell.c?id=41be533331fc3c6b711dbe532405782d3b8be5d1";
+      sha256 = "sha256-CItvt/eeNJkr1sOzaaHZhAnaybDutL9cT2O6XwQll+M=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libmnl
+  ];
+
+  passthru = {
+    updateScript = writeScript "update-ethtool" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -eu -o pipefail
+
+      # Expect the text in format of '<a href="ethtool-VER.tar.xz">...</a>'
+      # The page always lists versions newest to oldest. Pick the first one.
+      new_version="$(curl -s https://mirrors.edge.kernel.org/pub/software/network/ethtool/ |
+          pcregrep -o1 '<a href="ethtool-([0-9.]+)[.]tar[.]xz">' |
+          head -n1)"
+      update-source-version ${pname} "$new_version"
+    '';
+  };
+
+  meta = with lib; {
+    description = "Utility for controlling network drivers and hardware";
+    homepage = "https://www.kernel.org/pub/software/network/ethtool/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bjornfor ];
+    mainProgram = "ethtool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ets/default.nix b/nixpkgs/pkgs/tools/misc/ets/default.nix
new file mode 100644
index 000000000000..7d9103e7b350
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ets/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, installShellFiles }:
+
+buildGoModule rec {
+  pname = "ets";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "zmwangx";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XWIDo5msTMTLr60x1R9cwsiZIDG6G+uHWx8idt4F2iA=";
+  };
+
+  # https://github.com/zmwangx/ets/pull/18/
+  patches = [ (fetchpatch {
+    url = "https://github.com/zmwangx/ets/commit/600ec17a9c86ca63cd022d00439cdc4978e2afa9.patch";
+    sha256 = "sha256-SGCISHkWNFubgKkQYx8Vf5/fknNDfPNYkSuw1mMhZaE=";
+  }) ];
+
+  vendorHash = "sha256-+8dXfqOu8XTw2uEx3GAynQSHtzifejZtddr1CdxrupA=";
+
+  ldflags = [ "-s" "-w" "-X main.version=v${version}-nixpkgs" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preBuild = ''
+    rm -rf fixtures
+  '';
+
+  postInstall = ''
+    installManPage ets.1
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command output timestamper";
+    homepage = "https://github.com/zmwangx/ets/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cameronfyfe ];
+    mainProgram = "ets";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/eva/default.nix b/nixpkgs/pkgs/tools/misc/eva/default.nix
new file mode 100644
index 000000000000..b15957a909a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eva/default.nix
@@ -0,0 +1,21 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "eva";
+  version = "0.3.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-eX2d9h6zNbheS68j3lyhJW05JZmQN2I2MdcmiZB8Mec=";
+  };
+
+  cargoSha256 = "sha256-gnym2sedyzQzubOtj64Yoh+sKT+sa60w/Z72hby7Pms=";
+
+  meta = with lib; {
+    description = "A calculator REPL, similar to bc";
+    homepage = "https://github.com/NerdyPepper/eva";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nrdxp ma27 figsoda ];
+    mainProgram = "eva";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/evhz/default.nix b/nixpkgs/pkgs/tools/misc/evhz/default.nix
new file mode 100644
index 000000000000..712606c6913a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/evhz/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+}:
+
+stdenv.mkDerivation {
+  pname = "evhz";
+  version = "unstable-2021-09-20";
+
+  src = fetchFromSourcehut {
+    owner = "~iank";
+    repo = "evhz";
+    rev = "35b7526e0655522bbdf92f6384f4e9dff74f38a0";
+    hash = "sha256-lC0CeN9YVhkSiooC59Dbom811jHvPDQcYl+KADUwVdQ=";
+  };
+
+  buildPhase = "gcc -o evhz evhz.c";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv evhz $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Show mouse refresh rate under linux + evdev";
+    homepage = "https://git.sr.ht/~iank/evhz";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ Tungsten842 ];
+    platforms = platforms.linux;
+    mainProgram = "evhz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/expect/default.nix b/nixpkgs/pkgs/tools/misc/expect/default.nix
new file mode 100644
index 000000000000..e2457ad63e13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/expect/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, buildPackages, fetchurl, tcl, makeWrapper, autoreconfHook, fetchpatch, substituteAll }:
+
+tcl.mkTclDerivation rec {
+  pname = "expect";
+  version = "5.45.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/expect/Expect/${version}/expect${version}.tar.gz";
+    hash = "sha256-Safag7C92fRtBKBN7sGcd2e7mjI+QMR4H4nK92C5LDQ=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/buildroot/buildroot/c05e6aa361a4049eabd8b21eb64a34899ef83fc7/package/expect/0001-enable-cross-compilation.patch";
+      hash = "sha256-yyzE0Jjac5qaj7Svn4VpMiAqSNLYrw7VZbtFqgMVncs=";
+    })
+    (substituteAll {
+      src = ./fix-cross-compilation.patch;
+      tcl = "${buildPackages.tcl}/bin/tclsh";
+    })
+    # The following patches fix compilation with clang 15+
+    (fetchpatch {
+      url = "https://sourceforge.net/p/expect/patches/24/attachment/0001-Add-prototype-to-function-definitions.patch";
+      hash = "sha256-X2Vv6VVM3KjmBHo2ukVWe5YTVXRmqe//Kw2kr73OpZs=";
+    })
+    (fetchpatch {
+      url = "https://sourceforge.net/p/expect/patches/_discuss/thread/b813ca9895/6759/attachment/expect-configure-c99.patch";
+      hash = "sha256-PxQQ9roWgVXUoCMxkXEgu+it26ES/JuzHF6oML/nk54=";
+    })
+    # Include `sys/ioctl.h` and `util.h` on Darwin, which are required for `ioctl` and `openpty`.
+    ./fix-darwin-clang16.patch
+  ];
+
+  postPatch = ''
+    sed -i "s,/bin/stty,$(type -p stty),g" configure.in
+  '';
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper ];
+
+  strictDeps = true;
+  hardeningDisable = [ "format" ];
+
+  postInstall = ''
+    tclWrapperArgs+=(--prefix PATH : ${lib.makeBinPath [ tcl ]})
+    ${lib.optionalString stdenv.isDarwin "tclWrapperArgs+=(--prefix DYLD_LIBRARY_PATH : $out/lib/expect${version})"}
+  '';
+
+  outputs = [ "out" "dev" ];
+
+  meta = with lib; {
+    description = "A tool for automating interactive applications";
+    homepage = "https://expect.sourceforge.net/";
+    license = licenses.publicDomain;
+    platforms = platforms.unix;
+    mainProgram = "expect";
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/expect/fix-cross-compilation.patch b/nixpkgs/pkgs/tools/misc/expect/fix-cross-compilation.patch
new file mode 100644
index 000000000000..8edc4bea39d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/expect/fix-cross-compilation.patch
@@ -0,0 +1,11 @@
+--- a/Makefile.in	2022-09-07 21:46:37.090519258 +0200
++++ b/Makefile.in	2022-09-07 21:46:21.462592279 +0200
+@@ -380,7 +380,7 @@
+ 	cp $(DIST_ROOT)/$(PKG_DIR).tar.gz $(top_builddir)
+ 
+ $(SCRIPTS):
+-	$(TCLSH) $(srcdir)/fixline1 $(SHORT_BINDIR) < $(srcdir)/example/$@ > $@
++	@tcl@ $(srcdir)/fixline1 $(SHORT_BINDIR) < $(srcdir)/example/$@ > $@
+ 
+ ## We cannot use TCL_LIBS below (after TCL_LIB_SPEC) because its
+ ## expansion references the contents of LIBS, which contains linker
diff --git a/nixpkgs/pkgs/tools/misc/expect/fix-darwin-clang16.patch b/nixpkgs/pkgs/tools/misc/expect/fix-darwin-clang16.patch
new file mode 100644
index 000000000000..9454769c99c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/expect/fix-darwin-clang16.patch
@@ -0,0 +1,31 @@
+diff -ur a/exp_win.c b/exp_win.c
+--- a/exp_win.c	2018-02-02 14:15:52.000000000 -0500
++++ b/exp_win.c	2023-10-10 07:47:33.082690432 -0400
+@@ -39,7 +39,8 @@
+ /* Sigh.  On AIX 2.3, termios.h exists but does not define TIOCGWINSZ */
+ /* Instead, it has to come from ioctl.h.  However, As I said above, this */
+ /* can't be cavalierly included on all machines, even when it exists. */
+-#if defined(HAVE_TERMIOS) && !defined(HAVE_TIOCGWINSZ_IN_TERMIOS_H)
++/* Darwin also has termios.h, but it requires ioctl.h for `ioctl`. */
++#if defined(HAVE_TERMIOS) && (defined(__APPLE__) || !defined(HAVE_TIOCGWINSZ_IN_TERMIOS_H))
+ #  include <sys/ioctl.h>
+ #endif
+ 
+diff -ur d/pty_termios.c c/pty_termios.c
+--- d/pty_termios.c	2023-10-10 07:59:23.244452442 -0400
++++ c/pty_termios.c	2023-10-10 08:00:35.303231582 -0400
+@@ -7,7 +7,13 @@
+ 
+ */
+ 
+-#include <pty.h> /* openpty */
++/* openpty */
++#ifdef __APPLE__
++#include <util.h>
++#else /* pty.h is Linux-specific */
++#include <pty.h>
++#endif
++
+ #include <stdio.h>
+ #include <signal.h>
+ 
diff --git a/nixpkgs/pkgs/tools/misc/f2/default.nix b/nixpkgs/pkgs/tools/misc/f2/default.nix
new file mode 100644
index 000000000000..f97c2b8e80c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/f2/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "f2";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "ayoisaiah";
+    repo = "f2";
+    rev = "v${version}";
+    sha256 = "sha256-vpyI6WtK/0UpPiB8y+HpPd0IsKKkMHa/eIreYo32iAA=";
+  };
+
+  vendorHash = "sha256-Bz3Igjcyq4rkMkgv1J3+JiAqroAjxyAvHw4d4eZJgAM=";
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  # has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command-line batch renaming tool";
+    homepage = "https://github.com/ayoisaiah/f2";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zendo ];
+    mainProgram = "f2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/faketty/default.nix b/nixpkgs/pkgs/tools/misc/faketty/default.nix
new file mode 100644
index 000000000000..815eb5a631c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/faketty/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "faketty";
+  version = "1.0.14";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-oma8Vmp1AMmEGyZG8i/ztiyYH0RrLZ/l/vXgPJs+5o0=";
+  };
+
+  cargoHash = "sha256-+gojthIR5WMSjN1gCUyN0cKHWYBKBezsckVZJD7JncM=";
+
+  postPatch = ''
+    patchShebangs tests/test.sh
+  '';
+
+  meta = with lib; {
+    description = "A wrapper to execute a command in a pty, even if redirecting the output";
+    homepage = "https://github.com/dtolnay/faketty";
+    changelog = "https://github.com/dtolnay/faketty/releases/tag/${version}";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "faketty";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fasd/default.nix b/nixpkgs/pkgs/tools/misc/fasd/default.nix
new file mode 100644
index 000000000000..76c7731e27f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fasd/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub } :
+
+stdenv.mkDerivation rec {
+  pname = "fasd";
+  version = "unstable-2016-08-11";
+
+  src = fetchFromGitHub {
+    owner = "clvv";
+    repo = pname;
+    rev = "90b531a5daaa545c74c7d98974b54cbdb92659fc";
+    sha256 = "0i22qmhq3indpvwbxz7c472rdyp8grag55x7iyjz8gmyn8gxjc11";
+  };
+
+  installPhase = ''
+    PREFIX=$out make install
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/clvv/fasd";
+    description = "Quick command-line access to files and directories for POSIX shells";
+    license = licenses.mit;
+
+    longDescription = ''
+      Fasd is a command-line productivity booster.
+      Fasd offers quick access to files and directories for POSIX shells. It is
+      inspired by tools like autojump, z and v. Fasd keeps track of files and
+      directories you have accessed, so that you can quickly reference them in the
+      command line.
+    '';
+
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ];
+    mainProgram = "fasd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fastfetch/default.nix b/nixpkgs/pkgs/tools/misc/fastfetch/default.nix
new file mode 100644
index 000000000000..91d9844fd1f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fastfetch/default.nix
@@ -0,0 +1,163 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, chafa
+, cmake
+, darwin
+, dbus
+, dconf
+, ddcutil
+, glib
+, imagemagick_light
+, libXrandr
+, libglvnd
+, libpulseaudio
+, libselinux
+, libsepol
+, libxcb
+, makeBinaryWrapper
+, networkmanager
+, nix-update-script
+, ocl-icd
+, opencl-headers
+, pciutils
+, pcre
+, pcre2
+, pkg-config
+, python3
+, rpm
+, sqlite
+, testers
+, util-linux
+, vulkan-loader
+, wayland
+, xfce
+, xorg
+, yyjson
+, zlib
+, rpmSupport ? false
+, vulkanSupport ? true
+, waylandSupport ? true
+, x11Support ? true
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "fastfetch";
+  version = "2.8.3";
+
+  src = fetchFromGitHub {
+    owner = "fastfetch-cli";
+    repo = "fastfetch";
+    rev = finalAttrs.version;
+    hash = "sha256-W6SmKyTBR0cXAkgcbbM1lEiHFanqCaa2lhAb+zQP/mg=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [
+    cmake
+    makeBinaryWrapper
+    pkg-config
+    python3
+  ];
+
+  buildInputs = [
+    chafa
+    imagemagick_light
+    pcre
+    pcre2
+    sqlite
+    yyjson
+  ] ++ lib.optionals stdenv.isLinux [
+    dbus
+    dconf
+    ddcutil
+    glib
+    libpulseaudio
+    libselinux
+    libsepol
+    networkmanager
+    ocl-icd
+    opencl-headers
+    pciutils
+    util-linux
+    zlib
+  ] ++ lib.optionals rpmSupport [
+    rpm
+  ] ++ lib.optionals vulkanSupport [
+    vulkan-loader
+  ] ++ lib.optionals waylandSupport [
+    wayland
+  ] ++ lib.optionals x11Support [
+    libXrandr
+    libglvnd
+    libxcb
+    xorg.libXau
+    xorg.libXdmcp
+    xorg.libXext
+  ] ++ lib.optionals (x11Support && (!stdenv.isDarwin)) [
+    xfce.xfconf
+  ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk_11_0.frameworks; [
+    Apple80211
+    AppKit
+    AVFoundation
+    Cocoa
+    CoreDisplay
+    CoreVideo
+    CoreWLAN
+    DisplayServices
+    IOBluetooth
+    MediaRemote
+    OpenCL
+    SystemConfiguration
+    darwin.moltenvk
+  ]);
+
+  cmakeFlags = [
+    (lib.cmakeOptionType "filepath" "CMAKE_INSTALL_SYSCONFDIR" "${placeholder "out"}/etc")
+    (lib.cmakeBool "ENABLE_DIRECTX_HEADERS" false)
+    (lib.cmakeBool "ENABLE_DRM" false)
+    (lib.cmakeBool "ENABLE_IMAGEMAGICK6" false)
+    (lib.cmakeBool "ENABLE_OSMESA" false)
+    (lib.cmakeBool "ENABLE_SYSTEM_YYJSON" true)
+    (lib.cmakeBool "ENABLE_GLX" x11Support)
+    (lib.cmakeBool "ENABLE_RPM" rpmSupport)
+    (lib.cmakeBool "ENABLE_VULKAN" x11Support)
+    (lib.cmakeBool "ENABLE_WAYLAND" waylandSupport)
+    (lib.cmakeBool "ENABLE_X11" x11Support)
+    (lib.cmakeBool "ENABLE_XCB" x11Support)
+    (lib.cmakeBool "ENABLE_XCB_RANDR" x11Support)
+    (lib.cmakeBool "ENABLE_XFCONF" (x11Support && (!stdenv.isDarwin)))
+    (lib.cmakeBool "ENABLE_XRANDR" x11Support)
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # Needed with GCC 12
+    "-Wno-error=uninitialized"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/fastfetch \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath finalAttrs.buildInputs}"
+    wrapProgram $out/bin/flashfetch \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath finalAttrs.buildInputs}"
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = "fastfetch -v | cut -d '(' -f 1";
+      version = "fastfetch ${finalAttrs.version}";
+    };
+  };
+
+  meta = {
+    description = "Like neofetch, but much faster because written in C";
+    homepage = "https://github.com/fastfetch-cli/fastfetch";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ gerg-l khaneliman federicoschonborn ];
+    platforms = lib.platforms.all;
+    mainProgram = "fastfetch";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/fbcat/default.nix b/nixpkgs/pkgs/tools/misc/fbcat/default.nix
new file mode 100644
index 000000000000..d90ec77b6d5e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fbcat/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, netpbm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fbcat";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "jwilk";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ORzcd8XGy2BfwuPK5UX+K5Z+FYkb+tdg/gHl3zHjvbk=";
+  };
+
+  postPatch = ''
+    substituteInPlace fbgrab \
+      --replace 'pnmtopng' '${netpbm}/bin/pnmtopng' \
+      --replace 'fbcat' "$out/bin/fbcat"
+  '';
+
+  installFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    homepage = "http://jwilk.net/software/fbcat";
+    description = "Framebuffer screenshot tool";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/fbmark/default.nix b/nixpkgs/pkgs/tools/misc/fbmark/default.nix
new file mode 100644
index 000000000000..fe8bca0e2240
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fbmark/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "fbmark";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "caramelli";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0n2czl2sy1k6r5ri0hp7jgq84xcwrx4x43bqvw1b4na99mqhyahn";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Linux Framebuffer Benchmark";
+    homepage = "https://github.com/caramelli/fbmark";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ davidak ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fclones/default.nix b/nixpkgs/pkgs/tools/misc/fclones/default.nix
new file mode 100644
index 000000000000..6db73d081a24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fclones/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fclones";
+  version = "0.34.0";
+
+  src = fetchFromGitHub {
+    owner = "pkolaczk";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-JgeajCubRz9hR6uvRAw1HXdKa6Ua+l/Im/bYXdx1gL0=";
+  };
+
+  cargoHash = "sha256-mEgFfg8I+JJuUEvj+sia2aL3BVg3HteQorZ2EOiLo64=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.AppKit
+  ];
+
+  # device::test_physical_device_name test fails on Darwin
+  doCheck = !stdenv.isDarwin;
+
+  checkFlags = [
+    # ofborg sometimes fails with "Resource temporarily unavailable"
+    "--skip=cache::test::return_none_if_different_transform_was_used"
+  ];
+
+  meta = with lib; {
+    description = "Efficient Duplicate File Finder and Remover";
+    homepage = "https://github.com/pkolaczk/fclones";
+    changelog = "https://github.com/pkolaczk/fclones/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cyounkins figsoda msfjarvis ];
+    mainProgram = "fclones";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fclones/gui.nix b/nixpkgs/pkgs/tools/misc/fclones/gui.nix
new file mode 100644
index 000000000000..7b2d063d45b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fclones/gui.nix
@@ -0,0 +1,55 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, wrapGAppsHook4
+, gdk-pixbuf
+, gtk4
+, libadwaita
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fclones-gui";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "pkolaczk";
+    repo = "fclones-gui";
+    rev = "v${version}";
+    hash = "sha256-ad7wyoCjSQ8i6c+4IorImqAY2Q6pwBtI2JkkbkGa46U=";
+  };
+
+  cargoHash = "sha256-7+I0Tj+DcrItU2apB1iMiYiTv9AeDparke86HkJNF3A=";
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    gtk4
+    libadwaita
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.IOKit
+  ];
+
+  postInstall = ''
+    substituteInPlace snap/gui/fclones-gui.desktop \
+      --replace Exec=fclones-gui Exec=$out/bin/fclones-gui \
+      --replace 'Icon=''${SNAP}/meta/gui/fclones-gui.png' Icon=fclones-gui
+
+    install -Dm444 snap/gui/fclones-gui.desktop -t $out/share/applications
+    install -Dm444 snap/gui/fclones-gui.png -t $out/share/pixmaps
+  '';
+
+  meta = with lib; {
+    description = "Interactive duplicate file remover";
+    homepage = "https://github.com/pkolaczk/fclones-gui";
+    changelog = "https://github.com/pkolaczk/fclones-gui/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fcp/default.nix b/nixpkgs/pkgs/tools/misc/fcp/default.nix
new file mode 100644
index 000000000000..61db506bc1ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fcp/default.nix
@@ -0,0 +1,34 @@
+{ expect, fetchFromGitHub, lib, rustPlatform, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fcp";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "svetlitski";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0f242n8w88rikg1srimdifadhggrb2r1z0g65id60ahb4bjm8a0x";
+  };
+
+  cargoSha256 = "0gw7gjfwc4r03rg6z65ml0y37sh4yf716isqs0mb4jqkp7rwfbc9";
+
+  nativeBuildInputs = [ expect ];
+
+  # character_device fails with "File name too long" on darwin
+  doCheck = !stdenv.isDarwin;
+
+  postPatch = ''
+    patchShebangs tests/*.exp
+  '';
+
+  meta = with lib; {
+    description = "A significantly faster alternative to the classic Unix cp(1) command";
+    homepage = "https://github.com/svetlitski/fcp";
+    changelog = "https://github.com/svetlitski/fcp/releases/tag/v${version}";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "fcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fd/default.nix b/nixpkgs/pkgs/tools/misc/fd/default.nix
new file mode 100644
index 000000000000..32d0d1b27124
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fd/default.nix
@@ -0,0 +1,52 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles, rust-jemalloc-sys, testers, fd }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fd";
+  version = "9.0.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = "fd";
+    rev = "v${version}";
+    hash = "sha256-xcrvAWbSvUUtbFXyENy3eQimxt5aXzFrHnL6VptyydA=";
+  };
+
+  cargoHash = "sha256-z4PV8k6avaLwo58yJq47WEUJGw3JCW1GZGviBaPTs+8=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ rust-jemalloc-sys ];
+
+  # skip flaky test
+  checkFlags = [
+    "--skip=test_owner_current_group"
+  ];
+
+  postInstall = ''
+    installManPage doc/fd.1
+
+    installShellCompletion --cmd fd \
+      --bash <($out/bin/fd --gen-completions bash) \
+      --fish <($out/bin/fd --gen-completions fish)
+    installShellCompletion --zsh contrib/completion/_fd
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = fd;
+  };
+
+  meta = with lib; {
+    description = "A simple, fast and user-friendly alternative to find";
+    longDescription = ''
+      `fd` is a simple, fast and user-friendly alternative to `find`.
+
+      While it does not seek to mirror all of `find`'s powerful functionality,
+      it provides sensible (opinionated) defaults for 80% of the use cases.
+    '';
+    homepage = "https://github.com/sharkdp/fd";
+    changelog = "https://github.com/sharkdp/fd/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dywedir figsoda globin ma27 zowoq ];
+    mainProgram = "fd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fdtools/default.nix b/nixpkgs/pkgs/tools/misc/fdtools/default.nix
new file mode 100644
index 000000000000..0815ae04d623
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fdtools/default.nix
@@ -0,0 +1,87 @@
+{ stdenv, lib, fetchurl, skawarePackages }:
+
+let
+  pname = "fdtools";
+  # When you update, check whether we can drop the skalibs pin.
+  version = "2020.05.04";
+  sha256 = "0lnafcp4yipi0dl8gh33zjs8wlpz0mim8mwmiz9s49id0b0fmlla";
+  skalibs = skawarePackages.skalibs_2_10;
+
+in stdenv.mkDerivation {
+  inherit pname version;
+
+  src = fetchurl {
+    url = "https://code.dogmap.org/${pname}/releases/${pname}-${version}.tar.bz2";
+    inherit sha256;
+  };
+
+  patches = [ ./new-skalibs.patch ];
+  outputs = [ "bin" "lib" "dev" "doc" "out" ];
+
+  buildInputs = [
+    # temporary, until fdtools catches up to skalibs
+    skalibs
+  ];
+
+  configurePhase = ''
+    cd ${pname}-${version}
+    sed -e 's|gcc|$CC|' \
+      conf-compile/defaults/host_link.sh \
+      > conf-compile/host_link.sh
+    sed -e 's|gcc|$CC|' \
+      conf-compile/defaults/host_compile.sh \
+      > conf-compile/host_compile.sh
+
+    echo "${skalibs.lib}/lib/skalibs/sysdeps" \
+      > conf-compile/depend_skalibs_sysdeps
+  '';
+
+  buildPhase = ''
+    bash package/build
+  '';
+
+  installPhase = ''
+    mkdir -p $bin/bin
+    tools=( grabconsole multitee pipecycle recvfd seek0 sendfd setblock setstate statfile vc-get vc-lock vc-switch )
+
+    for t in "''${tools[@]}"; do
+      mv "command/$t" "$bin/bin/$t"
+    done
+
+    mkdir -p $lib/lib
+    mkdir -p $dev/include
+    docdir=$doc/share/doc/${pname}
+    mkdir -p $docdir
+
+    mv library/fdtools.a $lib/lib/fdtools.a
+    mv include/fdtools.h $dev/include/fdtools.h
+
+    ${skawarePackages.cleanPackaging.commonFileActions {
+       noiseFiles = [
+         "conf-compile/**/*"
+         "src/**/*"
+         "src/.**/*"
+         "compile/**/*"
+         "package/{build,check,compile,elsewhere,install,install_commands,own,run,sharing,upgrade,upgrade_version,url_src,url_src_latest,versions}"
+       ];
+       docFiles = [
+         "package/INSTALL"
+         "package/LICENSE"
+         "package/README"
+       ];
+    }} $docdir
+
+    ${skawarePackages.cleanPackaging.checkForRemainingFiles}
+
+    # we don’t use this, but nixpkgs requires it
+    touch $out
+  '';
+
+  meta = {
+    homepage = "https://code.dogmap.org/fdtools/";
+    description = "A set of utilities for working with file descriptors";
+    license = lib.licenses.gpl2Only;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fdtools/new-skalibs.patch b/nixpkgs/pkgs/tools/misc/fdtools/new-skalibs.patch
new file mode 100644
index 000000000000..76c5396f8a88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fdtools/new-skalibs.patch
@@ -0,0 +1,223 @@
+diff -Naur misc/fdtools-2020.05.04/src/check_exit_exec.c misc-new/fdtools-2020.05.04/src/check_exit_exec.c
+--- misc/fdtools-2020.05.04/src/check_exit_exec.c	2015-03-16 04:55:56.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/check_exit_exec.c	2021-01-22 10:50:25.529955213 +0100
+@@ -2,6 +2,7 @@
+ #include <unistd.h>
+ #include <errno.h>
+ 
++#include <skalibs/exec.h>
+ #include <skalibs/stddjb.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+@@ -14,7 +15,7 @@
+ 
+   if (str_equal(arg, ":")) {
+     ++argv;
+-    pathexec0((char const**)argv);
++    mexec0((char const**)argv);
+     DIE1(exec, argv[0]);
+   }
+ }
+diff -Naur misc/fdtools-2020.05.04/src/grabconsole.c misc-new/fdtools-2020.05.04/src/grabconsole.c
+--- misc/fdtools-2020.05.04/src/grabconsole.c	2020-04-24 06:01:22.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/grabconsole.c	2021-01-22 10:43:27.887754936 +0100
+@@ -4,6 +4,7 @@
+ #include <errno.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -26,6 +27,6 @@
+   if (fd_grabconsole(fd)!=0) DIE0(tioccons);
+ 
+   argv+=2;
+-  pathexec0((char const**)argv);
++  mexec0((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/pipecycle.c misc-new/fdtools-2020.05.04/src/pipecycle.c
+--- misc/fdtools-2020.05.04/src/pipecycle.c	2015-03-16 04:55:56.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/pipecycle.c	2021-01-22 10:47:58.033220790 +0100
+@@ -4,6 +4,7 @@
+ #include <unistd.h>
+ #include <signal.h>
+ 
++#include <skalibs/exec.h>
+ #include <skalibs/stddjb.h>
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -56,7 +57,7 @@
+       if (fd_shuffle(2, current, wanted)!=0) DIE0(dup);
+     }
+     read(start[0], &j, 1);
+-    pathexec(args);
++    mexec(args);
+     DIE1(exec, args[0]);
+   }
+ 
+diff -Naur misc/fdtools-2020.05.04/src/recvfd.c misc-new/fdtools-2020.05.04/src/recvfd.c
+--- misc/fdtools-2020.05.04/src/recvfd.c	2020-04-28 09:35:05.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/recvfd.c	2021-01-22 10:47:14.180994779 +0100
+@@ -7,6 +7,7 @@
+ #include <limits.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+ #include "fdtools.h"
+@@ -69,9 +70,9 @@
+       named_fd=duped;
+     }
+     buf[int_fmt(buf, named_fd)]='\0';
+-    if (pathexec_env(argv[i]+1, buf)==0) DIE0(alloc);
++    if (env_mexec(argv[i]+1, buf)==0) DIE0(alloc);
+   }
+   argv+=nfds+1;
+-  pathexec0((char const**)argv);
++  mexec0((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/sendfd.c misc-new/fdtools-2020.05.04/src/sendfd.c
+--- misc/fdtools-2020.05.04/src/sendfd.c	2015-03-16 06:48:39.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/sendfd.c	2021-01-22 10:43:07.207634214 +0100
+@@ -7,6 +7,7 @@
+ #include <limits.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+ #include "fdtools.h"
+@@ -40,6 +41,6 @@
+   argv+=nfds;
+   if (*argv==NULL) _exit(0);
+   ++argv;
+-  pathexec0((char const**)argv);
++  mexec0((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/setstate.c misc-new/fdtools-2020.05.04/src/setstate.c
+--- misc/fdtools-2020.05.04/src/setstate.c	2020-05-04 10:04:21.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/setstate.c	2021-01-22 10:45:05.084304318 +0100
+@@ -8,6 +8,7 @@
+ #include <errno.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/intattr.h"
+ #include "prjlibs-c/diewarn.h"
+@@ -167,6 +168,6 @@
+   }
+ 
+   argv+=2;
+-  pathexec_run(argv[0], (char const**)argv, (char const**)environ);
++  mexec_ae(argv[0], (char const**)argv, (char const**)environ);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/statfile.c misc-new/fdtools-2020.05.04/src/statfile.c
+--- misc/fdtools-2020.05.04/src/statfile.c	2015-03-22 00:33:44.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/statfile.c	2021-01-22 10:48:23.673351183 +0100
+@@ -6,6 +6,7 @@
+ #include <errno.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/warn.h"
+@@ -15,7 +16,7 @@
+ char const* PROG="statfile";
+ 
+ static void set(char const* const var, char const* const val) {
+-  if (pathexec_env(var, val)==0) DIE0(alloc);
++  if (env_mexec(var, val)==0) DIE0(alloc);
+ }
+ 
+ static void set64n(char const* const var, time_t t, unsigned int nsec) {
+@@ -178,6 +179,6 @@
+   }
+ 
+   argv+=3;
+-  pathexec((char const**)argv);
++  mexec((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/vc-get-linux.c misc-new/fdtools-2020.05.04/src/vc-get-linux.c
+--- misc/fdtools-2020.05.04/src/vc-get-linux.c	2020-04-28 07:04:49.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/vc-get-linux.c	2021-01-22 10:47:34.649100757 +0100
+@@ -10,6 +10,7 @@
+ #include <sys/sysmacros.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -38,7 +39,7 @@
+       errno=0;
+       if (ioctl(fd, VT_OPENQRY, &vtnum)<0 || vtnum==-1) DIE0(vt_qry);
+       bufnum[ulong_fmt(bufnum, vtnum)]='\0';
+-      if (pathexec_env("TTY", buf)==0) DIE0(alloc);
++      if (env_mexec("TTY", buf)==0) DIE0(alloc);
+     }
+     fd_close(fd);
+ 
+@@ -50,12 +51,12 @@
+       if (fstat(fd, &statbuf)!=0) DIE1(stat, buf);
+       buf[ulong_fmt(buf, minor(statbuf.st_rdev))]='\0';
+     }
+-    if (pathexec_env("VCNUM", buf)==0) DIE0(alloc);
++    if (env_mexec("VCNUM", buf)==0) DIE0(alloc);
+ 
+     buf[ulong_fmt(buf, fd)]='\0';
+-    if (pathexec_env("VCFD", buf)==0) DIE0(alloc);
++    if (env_mexec("VCFD", buf)==0) DIE0(alloc);
+   }
+ 
+-  pathexec((char const**)argv+2);
++  mexec((char const**)argv+2);
+   DIE1(exec, argv[2]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/vc-lock-linux.c misc-new/fdtools-2020.05.04/src/vc-lock-linux.c
+--- misc/fdtools-2020.05.04/src/vc-lock-linux.c	2015-03-20 05:59:42.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/vc-lock-linux.c	2021-01-22 10:48:36.857417751 +0100
+@@ -8,6 +8,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/vt.h>
+ 
++#include <skalibs/exec.h>
+ #include <skalibs/stddjb.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+@@ -79,7 +80,7 @@
+       WARN0(fork);
+     } else if (pid==0) {
+       sigprocmask(SIG_SETMASK, &old_set, NULLP);
+-      pathexec((char const**)argv);
++      mexec((char const**)argv);
+       DIE1(exec, *argv);
+     } else {
+       int status;
+diff -Naur misc/fdtools-2020.05.04/src/vc-switch-linux.c misc-new/fdtools-2020.05.04/src/vc-switch-linux.c
+--- misc/fdtools-2020.05.04/src/vc-switch-linux.c	2020-04-28 07:14:04.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/vc-switch-linux.c	2021-01-22 10:42:41.259480648 +0100
+@@ -10,6 +10,7 @@
+ #include <sys/sysmacros.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -36,6 +37,6 @@
+   if (ioctl(fd, VT_ACTIVATE, ttyno)<0) DIE0(vt_act);
+   if (!scan) fd_close(fd);
+ 
+-  pathexec0((char const**)argv+3);
++  mexec0((char const**)argv+3);
+   DIE1(exec, argv[3]);
+ }
diff --git a/nixpkgs/pkgs/tools/misc/fdupes/default.nix b/nixpkgs/pkgs/tools/misc/fdupes/default.nix
new file mode 100644
index 000000000000..e4e52115c356
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fdupes/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, ncurses, pcre2 }:
+
+stdenv.mkDerivation rec {
+  pname = "fdupes";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner = "adrianlopezroche";
+    repo  = "fdupes";
+    rev   = "v${version}";
+    hash  = "sha256-8GYQfnUxS790pDXw2sjnDZNB55PMDaCcO6daIa/MPMw=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ ncurses pcre2 ];
+
+  meta = with lib; {
+    description = "Identifies duplicate files residing within specified directories";
+    longDescription = ''
+      fdupes searches the given path for duplicate files.
+      Such files are found by comparing file sizes and MD5 signatures,
+      followed by a byte-by-byte comparison.
+    '';
+    homepage = "https://github.com/adrianlopezroche/fdupes";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.maggesi ];
+    mainProgram = "fdupes";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fedifetcher/default.nix b/nixpkgs/pkgs/tools/misc/fedifetcher/default.nix
new file mode 100644
index 000000000000..dbf8c3bce281
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fedifetcher/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchFromGitHub, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "fedifetcher";
+  version = "7.0.3";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "nanos";
+    repo = "FediFetcher";
+    rev = "v${version}";
+    hash = "sha256-ADf6ZVqO9v6GQbNWi3NDX5bNmFDX5LMJfM6ePEWwbrQ=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    defusedxml
+    python-dateutil
+    requests
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD find_posts.py $out/bin/fedifetcher
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A tool for Mastodon that automatically fetches missing replies and posts from other fediverse instances";
+    longDescription = ''
+      FediFetcher is a tool for Mastodon that automatically fetches missing
+      replies and posts from other fediverse instances, and adds them to your
+      own Mastodon instance.
+    '';
+    homepage = "https://blog.thms.uk/fedifetcher";
+    license = licenses.mit;
+    maintainers = with maintainers; [ delroth ];
+    mainProgram = "fedifetcher";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fend/default.nix b/nixpkgs/pkgs/tools/misc/fend/default.nix
new file mode 100644
index 000000000000..a3e46fa4f18d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fend/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, darwin
+, pandoc
+, installShellFiles
+, copyDesktopItems
+, makeDesktopItem
+, nix-update-script
+, testers
+, writeText
+, runCommand
+, fend
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fend";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "printfn";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-s6b15FhVfEwsHtVt4bhd6LDxl/WW1PXlUrH2XFOTT5E=";
+  };
+
+  cargoHash = "sha256-Ilsv0mo7/4eEdRH3jWZXdF4LSYYdWr6gCvnMMAZn5j0=";
+
+  nativeBuildInputs = [ pandoc installShellFiles copyDesktopItems ];
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  postBuild = ''
+    patchShebangs --build ./documentation/build.sh
+    ./documentation/build.sh
+  '';
+
+  preFixup = ''
+    installManPage documentation/fend.1
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    [[ "$($out/bin/fend "1 km to m")" = "1000 m" ]]
+  '';
+
+  postInstall = ''
+    install -D -m 444 $src/icon/fend-icon-256.png $out/share/icons/hicolor/256x256/apps/fend.png
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "fend";
+      desktopName = "fend";
+      genericName = "Calculator";
+      comment = "Arbitrary-precision unit-aware calculator";
+      icon = "fend";
+      exec = "fend";
+      terminal = true;
+      categories = [ "Utility" "Calculator" "ConsoleOnly" ];
+    })
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = {
+      version = testers.testVersion { package = fend; };
+      units = testers.testEqualContents {
+        assertion = "fend does simple math and unit conversions";
+        expected = writeText "expected" ''
+          36 kph
+        '';
+        actual = runCommand "actual" { } ''
+          ${lib.getExe fend} '(100 meters) / (10 seconds) to kph' > $out
+        '';
+      };
+    };
+  };
+
+  meta = with lib; {
+    description = "Arbitrary-precision unit-aware calculator";
+    homepage = "https://github.com/printfn/fend";
+    changelog = "https://github.com/printfn/fend/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ djanatyn liff ];
+    mainProgram = "fend";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fet-sh/default.nix b/nixpkgs/pkgs/tools/misc/fet-sh/default.nix
new file mode 100644
index 000000000000..689eb0395f40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fet-sh/default.nix
@@ -0,0 +1,30 @@
+{ stdenvNoCC, lib, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "fet-sh";
+  version = "1.9";
+
+  src = fetchFromGitHub {
+    owner = "6gk";
+    repo = "fet.sh";
+    rev = "v${version}";
+    sha256 = "sha256-xhX2nVteC3T3IjQh++mYlm0btDJQbyQa6b8sGualV0E=";
+  };
+
+  postPatch = ''
+    patchShebangs fet.sh
+  '';
+
+  installPhase = ''
+    install -m755 -D fet.sh $out/bin/fet.sh
+  '';
+
+  meta = with lib; {
+    description = "A fetch written in posix shell without any external commands";
+    homepage = "https://github.com/6gk/fet.sh";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ elkowar ];
+    mainProgram = "fet.sh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fetch-scm/default.nix b/nixpkgs/pkgs/tools/misc/fetch-scm/default.nix
new file mode 100644
index 000000000000..a5bc1f65a904
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fetch-scm/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, guile }:
+
+stdenv.mkDerivation rec {
+  pname = "fetch-scm";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "KikyTokamuro";
+    repo = "fetch.scm";
+    rev = "v${version}";
+    sha256 = "sha256-WdYi8EVxQ6xPtld8JyZlUmgpxroevBehtkRANovMh2E=";
+  };
+
+  dontBuild = true;
+
+  buildInputs = [ guile ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 fetch.scm $out/bin/fetch-scm
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "System information fetcher written in GNU Guile Scheme";
+    homepage = "https://github.com/KikyTokamuro/fetch.scm";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ vel ];
+    mainProgram = "fetch-scm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fetchutils/default.nix b/nixpkgs/pkgs/tools/misc/fetchutils/default.nix
new file mode 100644
index 000000000000..d1c830f877d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fetchutils/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenvNoCC, fetchFromGitHub, bash, scdoc }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "fetchutils";
+  version = "unstable-2021-03-16";
+
+  src = fetchFromGitHub {
+    owner = "kiedtl";
+    repo = pname;
+    rev = "882781a297e86f4ad4eaf143e0777fb3e7c69526";
+    sha256 = "sha256-ONrVZC6GBV5v3TeBekW9ybZjDHF3FNyXw1rYknqKRbk=";
+  };
+
+  buildInputs = [ bash scdoc ];
+
+  installFlags = [ "PREFIX=$(out)/" ];
+
+  postPatch = ''
+    patchShebangs --host src/*
+  '';
+
+  meta = with lib; {
+    description = "A collection of small shell utilities to fetch system information";
+    homepage = "https://github.com/lptstr/fetchutils";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ moni ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fffuu/default.nix b/nixpkgs/pkgs/tools/misc/fffuu/default.nix
new file mode 100644
index 000000000000..2463ee5a6e99
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fffuu/default.nix
@@ -0,0 +1,51 @@
+{ mkDerivation, haskellPackages, fetchFromGitHub, lib }:
+
+mkDerivation {
+  pname = "fffuu";
+  version = "unstable-2018-05-26";
+
+  src = fetchFromGitHub {
+    owner = "diekmann";
+    repo = "Iptables_Semantics";
+    rev = "e0a2516bd885708fce875023b474ae341cbdee29";
+    sha256 = "1qc7p44dqja6qrjbjdc2xn7n9v41j5v59sgjnxjj5k0mxp58y1ch";
+  };
+
+  postPatch = ''
+    substituteInPlace haskell_tool/fffuu.cabal \
+      --replace "containers >=0.5 && <0.6" "containers >= 0.6" \
+      --replace "optparse-generic >= 1.2.3 && < 1.3" "optparse-generic >= 1.2.3"
+  '';
+
+  preCompileBuildDriver = ''
+    cd haskell_tool
+  '';
+
+  isLibrary = false;
+
+  isExecutable = true;
+
+  # fails with sandbox
+  doCheck = false;
+
+  libraryHaskellDepends = with haskellPackages; [
+    base
+    containers
+    split
+    parsec
+    optparse-generic
+  ];
+
+  executableHaskellDepends = with haskellPackages; [ base ];
+
+  testHaskellDepends = with haskellPackages; [
+    tasty
+    tasty-hunit
+    tasty-golden
+  ];
+
+  description = "Fancy Formal Firewall Universal Understander";
+  homepage = "https://github.com/diekmann/Iptables_Semantics/tree/master/haskell_tool";
+  license = lib.licenses.bsd2;
+  maintainers = [ lib.maintainers.marsam ];
+}
diff --git a/nixpkgs/pkgs/tools/misc/ffsend/default.nix b/nixpkgs/pkgs/tools/misc/ffsend/default.nix
new file mode 100644
index 000000000000..18f5a0ee0a16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ffsend/default.nix
@@ -0,0 +1,93 @@
+{ lib, stdenv, fetchFromGitLab, fetchpatch, rustPlatform, pkg-config, openssl
+, installShellFiles
+, Security, AppKit
+
+, x11Support ? stdenv.isLinux || stdenv.hostPlatform.isBSD
+, xclip ? null, xsel ? null
+, preferXsel ? false # if true and xsel is non-null, use it instead of xclip
+}:
+
+let
+  usesX11 = stdenv.isLinux || stdenv.isBSD;
+in
+
+assert (x11Support && usesX11) -> xclip != null || xsel != null;
+
+rustPlatform.buildRustPackage rec {
+  pname = "ffsend";
+  version = "0.2.76";
+
+  src = fetchFromGitLab {
+    owner = "timvisee";
+    repo = "ffsend";
+    rev = "v${version}";
+    sha256 = "sha256-L1j1lXPxy9nWMeED9uzQHV5y7XTE6+DB57rDnXa4kMo=";
+  };
+
+  cargoHash = "sha256-r1yIPV2sW/EpHJpdaJyi6pzE+rtNkBIxSUJF+XA8kbA=";
+
+  cargoPatches = [
+
+    # Update dependencies (needed for the below patch to merge cleanly)
+    (fetchpatch {
+      name = "Update-dependencies-1";
+      url = "https://github.com/timvisee/ffsend/commit/afb004680b9ed672c7e87ff23f16bb2c51fea06e.patch";
+      hash = "sha256-eDcbyi05aOq+muVWdLmlLzLXUKcrv/9Y0R+0aHgL4+s=";
+    })
+
+    # Disable unused features in prettytable-rs crate (needed for the below patch to merge cleanly)
+    (fetchpatch {
+      name = "Disable-unused-features";
+      url = "https://github.com/timvisee/ffsend/commit/9b8dee12ea839f911ed207ff9602d929cab5d34b.patch";
+      hash = "sha256-6LK1Fqov+zEbPZ4+B6JCLXtXmgSad9vr9YO2oYodBSM=";
+    })
+
+    # Update dependencies (needed for the below patch to merge cleanly)
+    (fetchpatch {
+      name = "Update-dependencies-2";
+      url = "https://github.com/timvisee/ffsend/commit/fd5b38f9ab9cbc5f962d1024f4809eb36ba8986c.patch";
+      hash = "sha256-BDZKrVtQHpOewmB2Lb6kUfy02swcNK+CYZ3lj3kwFV4=";
+    })
+
+    # Fix seg fault
+    (fetchpatch {
+      name = "Fix-segfault";
+      url = "https://github.com/timvisee/ffsend/commit/3c1c2dc28ca1d88c45f87496a7a96052f5c37858.patch";
+      hash = "sha256-2hWlFXDopNy26Df74nJoB1J8qzPEOpf61wEOEtxOVx8=";
+    })
+  ];
+
+  nativeBuildInputs = [ installShellFiles ]
+    ++ lib.optionals stdenv.isLinux [ pkg-config ];
+  buildInputs =
+    if stdenv.isDarwin then [ Security AppKit ]
+    else [ openssl ];
+
+  preBuild = lib.optionalString (x11Support && usesX11) (
+    if preferXsel && xsel != null then ''
+      export XSEL_PATH="${xsel}/bin/xsel"
+    '' else ''
+      export XCLIP_PATH="${xclip}/bin/xclip"
+    ''
+  );
+
+  postInstall = ''
+    installShellCompletion contrib/completions/ffsend.{bash,fish} --zsh contrib/completions/_ffsend
+  '';
+  # There's also .elv and .ps1 completion files but I don't know where to install those
+
+  meta = with lib; {
+    description = "Easily and securely share files from the command line. A fully featured Firefox Send client";
+    longDescription = ''
+      Easily and securely share files and directories from the command line through a safe, private
+      and encrypted link using a single simple command. Files are shared using the Send service and
+      may be up to 2GB. Others are able to download these files with this tool, or through their
+      web browser.
+    '';
+    homepage = "https://gitlab.com/timvisee/ffsend";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ lilyball equirosa marsam ];
+    platforms = platforms.unix;
+    mainProgram = "ffsend";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fiano/default.nix b/nixpkgs/pkgs/tools/misc/fiano/default.nix
new file mode 100644
index 000000000000..ba4b415b283e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fiano/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "fiano";
+
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "linuxboot";
+    repo = "fiano";
+    rev = "v${version}";
+    hash = "sha256-QX0XMec99YbYWyfRThhwDaNjKstkUEz6wsisBynprmg=";
+  };
+
+  subPackages = [
+    "cmds/cbfs"
+    "cmds/create-ffs"
+    "cmds/fmap"
+    "cmds/fspinfo"
+    "cmds/glzma"
+    "cmds/guid2english"
+    "cmds/microcode"
+    "cmds/utk"
+  ];
+
+  vendorHash = "sha256-00ZSAVEmk2pNjv6fo++gnpIheK8lo4AVWf+ghXappnI=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Go-based tools for modifying UEFI firmware";
+    homepage = "https://github.com/linuxboot/fiano";
+    changelog = "https://github.com/linuxboot/fiano/blob/v${version}/RELEASES.md";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.jmbaur ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/figlet/default.nix b/nixpkgs/pkgs/tools/misc/figlet/default.nix
new file mode 100644
index 000000000000..746def80c6d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/figlet/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, fetchpatch, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "figlet";
+  version = "2.2.5";
+
+  # some tools can be found here ftp://ftp.figlet.org/pub/figlet/util/
+  src = fetchurl {
+    url = "ftp://ftp.figlet.org/pub/figlet/program/unix/figlet-${version}.tar.gz";
+    sha256 = "0za1ax15x7myjl8jz271ybly8ln9kb9zhm1gf6rdlxzhs07w925z";
+  };
+
+  contributed = fetchzip {
+    url = "ftp://ftp.figlet.org/pub/figlet/fonts/contributed.tar.gz";
+    hash = "sha256-AyvAoc3IqJeKWgJftBahxb/KJjudeJIY4KD6mElNagQ=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://git.alpinelinux.org/aports/plain/main/figlet/musl-fix-cplusplus-decls.patch?h=3.4-stable&id=71776c73a6f04b6f671430f702bcd40b29d48399";
+      name = "musl-fix-cplusplus-decls.patch";
+      sha256 = "1720zgrfk9makznqkbjrnlxm7nnhk6zx7g458fv53337n3g3zn7j";
+    })
+    (fetchpatch {
+      url = "https://github.com/cmatsuoka/figlet/commit/9a50c1795bc32e5a698b855131ee87c8d7762c9e.patch";
+      name = "unistd-on-darwin.patch";
+      sha256 = "hyfY87N+yuAwjsBIjpgvcdJ1IbzlR4A2yUJQSzShCRI=";
+    })
+  ];
+
+  makeFlags = [ "prefix=$(out)" "CC:=$(CC)" "LD:=$(CC)" ];
+
+  postInstall = "cp -ar ${contributed}/* $out/share/figlet/";
+
+  doCheck = true;
+
+  meta = {
+    description = "Program for making large letters out of ordinary text";
+    homepage = "http://www.figlet.org/";
+    license = lib.licenses.afl21;
+    maintainers = with lib.maintainers; [ ehmry ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/file/32-bit-time_t.patch b/nixpkgs/pkgs/tools/misc/file/32-bit-time_t.patch
new file mode 100644
index 000000000000..19c595215d65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/file/32-bit-time_t.patch
@@ -0,0 +1,38 @@
+https://github.com/file/file/commit/218fdf813fd5ccecbb8887a1b62509cd1c6dd3a1.patch
+
+From 218fdf813fd5ccecbb8887a1b62509cd1c6dd3a1 Mon Sep 17 00:00:00 2001
+From: Christos Zoulas <christos@zoulas.com>
+Date: Fri, 28 Jul 2023 14:38:25 +0000
+Subject: [PATCH] deal with 32 bit time_t
+
+---
+ src/file.h | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/src/file.h b/src/file.h
+index 2e0494d2f..78f574ea1 100644
+--- a/src/file.h
++++ b/src/file.h
+@@ -27,7 +27,7 @@
+  */
+ /*
+  * file.h - definitions for file(1) program
+- * @(#)$File: file.h,v 1.247 2023/07/27 19:40:22 christos Exp $
++ * @(#)$File: file.h,v 1.248 2023/07/28 14:38:25 christos Exp $
+  */
+ 
+ #ifndef __file_h__
+@@ -159,9 +159,11 @@
+ /*
+  * Dec 31, 23:59:59 9999
+  * we need to make sure that we don't exceed 9999 because some libc
+- * implementations like muslc crash otherwise
++ * implementations like muslc crash otherwise. If you are unlucky
++ * to be running on a system with a 32 bit time_t, then it is even less.
+  */
+-#define	MAX_CTIME	CAST(time_t, 0x3afff487cfULL)
++#define	MAX_CTIME \
++    CAST(time_t, sizeof(time_t) > 4 ? 0x3afff487cfULL : 0x7fffffffULL)
+ 
+ #define FILE_BADSIZE CAST(size_t, ~0ul)
+ #define MAXDESC	64		/* max len of text description/MIME type */
diff --git a/nixpkgs/pkgs/tools/misc/file/default.nix b/nixpkgs/pkgs/tools/misc/file/default.nix
new file mode 100644
index 000000000000..8cff5ccd70af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/file/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, file, zlib, libgnurx
+, testers
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "file";
+  version = "5.45";
+
+  src = fetchurl {
+    urls = [
+      "https://astron.com/pub/file/${finalAttrs.pname}-${finalAttrs.version}.tar.gz"
+      "https://distfiles.macports.org/file/${finalAttrs.pname}-${finalAttrs.version}.tar.gz"
+    ];
+    hash = "sha256-/Jf1ECm7DiyfTjv/79r2ePDgOe6HK53lwAKm0Jx4TYI=";
+  };
+
+  outputs = [ "out" "dev" "man" ];
+
+  patches = [
+    # Upstream patch to fix 32-bit tests.
+    # Will be included in 5.46+ releases.
+    ./32-bit-time_t.patch
+  ];
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) file;
+  buildInputs = [ zlib ]
+    ++ lib.optional stdenv.hostPlatform.isWindows libgnurx;
+
+  # https://bugs.astron.com/view.php?id=382
+  doCheck = !stdenv.buildPlatform.isMusl;
+
+  makeFlags = lib.optional stdenv.hostPlatform.isWindows "FILE_COMPILE=file";
+
+  passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
+
+  meta = with lib; {
+    homepage = "https://darwinsys.com/file";
+    description = "A program that shows the type of files";
+    maintainers = with maintainers; [ doronbehar ];
+    license = licenses.bsd2;
+    pkgConfigModules = [ "libmagic" ];
+    platforms = platforms.all;
+    mainProgram = "file";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/filebench/default.nix b/nixpkgs/pkgs/tools/misc/filebench/default.nix
new file mode 100644
index 000000000000..b8d4c6fa7a89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/filebench/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, autoreconfHook, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "filebench";
+  version = "1.4.9.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/filebench/${pname}-${version}.tar.gz";
+    sha256 = "13hmx67lsz367sn8lrvz1780mfczlbiz8v80gig9kpkpf009yksc";
+  };
+
+  nativeBuildInputs = [ autoreconfHook bison flex ];
+
+  meta = with lib; {
+    description = "File system and storage benchmark that can generate both micro and macro workloads";
+    homepage = "https://sourceforge.net/projects/filebench/";
+    license = licenses.cddl;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "filebench";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fileschanged/default.nix b/nixpkgs/pkgs/tools/misc/fileschanged/default.nix
new file mode 100644
index 000000000000..5644a01fa75a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fileschanged/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, gamin }:
+
+stdenv.mkDerivation rec {
+  pname = "fileschanged";
+  version = "0.6.9";
+
+  src = fetchurl {
+    url = "mirror://savannah/fileschanged/fileschanged-${version}.tar.gz";
+    sha256 = "0ajc9h023vzpnlqqjli4wbvs0q36nr5p9msc3wzbic8rk687qcxc";
+  };
+
+  buildInputs = [ gamin ];
+
+  patches = [./unused-variables.debian.patch];
+
+  doCheck = true;
+
+  meta = {
+    homepage = "https://www.nongnu.org/fileschanged/";
+    description = "A command-line utility that reports when files have been altered";
+    license = lib.licenses.gpl3Plus;
+
+    longDescription = ''
+      This utility is a client to FAM (File Alteration Monitor) servers
+      like FAM or Gamin. You give it some filenames on the command line
+      and then it monitors those files for changes. When it discovers
+      that a file has been altered, it displays the filename on the
+      standard-output or executes a given command.
+    '';
+
+    platforms = lib.platforms.linux;
+    mainProgram = "fileschanged";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch b/nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch
new file mode 100644
index 000000000000..73d307f9413d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch
@@ -0,0 +1,48 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 07_unused_variables.dpatch by Colin Watson <cjwatson@ubuntu.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: GCC 4.6 warns about unused variables, and fileschanged builds with
+## DP: -Werror, so deal with unused variable warnings.
+
+@DPATCH@
+diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' fileschanged-0.6.5~/src/monitor.c fileschanged-0.6.5/src/monitor.c
+--- fileschanged-0.6.5~/src/monitor.c	2006-04-19 20:42:29.000000000 +0100
++++ fileschanged-0.6.5/src/monitor.c	2011-09-14 01:17:23.000000000 +0100
+@@ -84,6 +84,7 @@
+ 	  retval = FAMMonitorDirectory (c, node->filename, &node->request,
+ 					(void *) node);
+ 	  //printf ("FAMMonitorDirectory returns %d (reqnum %d)\n", retval, node->request.reqnum);
++	  (void) retval;
+ 	}
+       else if (S_ISREG (node->statbuf.st_mode))
+ 	{
+@@ -91,6 +92,7 @@
+ 	  retval = FAMMonitorFile (c, node->filename, &node->request,
+ 				   (void *) node);
+ 	  //printf ("FAMMonitorFile returns %d (reqnum %d)\n", retval, node->request.reqnum);
++	  (void) retval;
+ 	}
+       monitor_handle_events (c, list, 0, 30);
+     }
+
+diff -r -U3 fileschanged-0.6.9-orig/src/main.c fileschanged-0.6.9/src/main.c
+--- fileschanged-0.6.9-orig/src/main.c  2012-04-13 01:31:59.160601022 +0400
++++ fileschanged-0.6.9/src/main.c       2012-04-13 01:32:47.549599643 +0400
+@@ -126,6 +126,7 @@
+     {
+       retval = process_file (filelist, filelist_len, arguments.args[i]);
+     }
++  (void) retval;
+   return 0;
+ }
+ 
+@@ -168,6 +169,7 @@
+ 
+   if (fileptr != stdin)
+     fclose (fileptr);
++  (void) retval;
+   return 0;
+ }
+ int 
+
diff --git a/nixpkgs/pkgs/tools/misc/findup/default.nix b/nixpkgs/pkgs/tools/misc/findup/default.nix
new file mode 100644
index 000000000000..eaba884d79d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/findup/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, testers
+, zig_0_10
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "findup";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "booniepepper";
+    repo = "findup";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-Tpyiy5oJQ04lqVEOFshFC0+90VoNILQ+N6Dd7lbuH/Q=";
+  };
+
+  nativeBuildInputs = [ zig_0_10.hook ];
+
+  passthru.tests.version = testers.testVersion { package = finalAttrs.finalPackage; };
+
+  meta = {
+    homepage = "https://github.com/booniepepper/findup";
+    description = "Search parent directories for sentinel files";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ booniepepper ];
+    mainProgram = "findup";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/findutils/default.nix b/nixpkgs/pkgs/tools/misc/findutils/default.nix
new file mode 100644
index 000000000000..b37eaeaea1be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/findutils/default.nix
@@ -0,0 +1,96 @@
+{ lib, stdenv, fetchurl
+, coreutils
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "findutils";
+  version = "4.9.0";
+
+  src = fetchurl {
+    url = "mirror://gnu/findutils/${pname}-${version}.tar.xz";
+    sha256 = "sha256-or+4wJ1DZ3DtxZ9Q+kg+eFsWGjt7nVR1c8sIBl/UYv4=";
+  };
+
+  postPatch = ''
+    substituteInPlace xargs/xargs.c --replace 'char default_cmd[] = "echo";' 'char default_cmd[] = "${coreutils}/bin/echo";'
+  '';
+
+  patches = [ ./no-install-statedir.patch ];
+
+  buildInputs = [ coreutils ]; # bin/updatedb script needs to call sort
+
+  # Since glibc-2.25 the i686 tests hang reliably right after test-sleep.
+  doCheck
+    =  !stdenv.hostPlatform.isDarwin
+    && !(stdenv.hostPlatform.libc == "glibc" && stdenv.hostPlatform.isi686)
+    && (stdenv.hostPlatform.libc != "musl")
+    && stdenv.hostPlatform == stdenv.buildPlatform;
+
+  outputs = [ "out" "info" "locate"];
+
+  configureFlags = [
+    # "sort" need not be on the PATH as a run-time dep, so we need to tell
+    # configure where it is. Covers the cross and native case alike.
+    "SORT=${coreutils}/bin/sort"
+    "--localstatedir=/var/cache"
+  ];
+
+  CFLAGS = lib.optionals stdenv.isDarwin [
+    # TODO: Revisit upstream issue https://savannah.gnu.org/bugs/?59972
+    # https://github.com/Homebrew/homebrew-core/pull/69761#issuecomment-770268478
+    "-D__nonnull\\(params\\)="
+  ];
+
+  postInstall = ''
+    moveToOutput bin/locate $locate
+    moveToOutput bin/updatedb $locate
+  '';
+
+  # can't move man pages in postInstall because the multi-output hook will move them back to $out
+  postFixup = ''
+    moveToOutput share/man/man5 $locate
+    moveToOutput share/man/man1/locate.1.gz $locate
+    moveToOutput share/man/man1/updatedb.1.gz $locate
+  '';
+
+  enableParallelBuilding = true;
+
+  # bionic libc is super weird and has issues with fortify outside of its own libc, check this comment:
+  # https://github.com/NixOS/nixpkgs/pull/192630#discussion_r978985593
+  # or you can check libc/include/sys/cdefs.h in bionic source code
+  hardeningDisable = lib.optional (stdenv.hostPlatform.libc == "bionic") "fortify";
+
+  meta = {
+    homepage = "https://www.gnu.org/software/findutils/";
+    description = "GNU Find Utilities, the basic directory searching utilities of the GNU operating system";
+
+    longDescription = ''
+      The GNU Find Utilities are the basic directory searching
+      utilities of the GNU operating system.  These programs are
+      typically used in conjunction with other programs to provide
+      modular and powerful directory search and file locating
+      capabilities to other commands.
+
+      The tools supplied with this package are:
+
+          * find - search for files in a directory hierarchy;
+          * xargs - build and execute command lines from standard input.
+
+      The following are available in the locate output:
+
+          * locate - list files in databases that match a pattern;
+          * updatedb - update a file name database;
+    '';
+
+    platforms = lib.platforms.all;
+
+    license = lib.licenses.gpl3Plus;
+
+    mainProgram = "find";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch b/nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch
new file mode 100644
index 000000000000..a7a48038a3aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch
@@ -0,0 +1,11 @@
+--- a/locate/Makefile.in
++++ b/locate/Makefile.in
+@@ -2357,7 +2357,7 @@ updatedb: updatedb.sh Makefile
+ 	chmod +x $@
+ 
+ install-data-hook:
+-	$(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(localstatedir)
++	#$(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(localstatedir)
+ 
+ dblocation.texi:
+ 	echo '@set LOCATE_DB $(LOCATE_DB)' > $@.tmp
diff --git a/nixpkgs/pkgs/tools/misc/flameshot/default.nix b/nixpkgs/pkgs/tools/misc/flameshot/default.nix
new file mode 100644
index 000000000000..937e23fe596c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flameshot/default.nix
@@ -0,0 +1,47 @@
+{ mkDerivation
+, lib
+, fetchFromGitHub
+, qtbase
+, cmake
+, qttools
+, qtsvg
+, nix-update-script
+, fetchpatch
+}:
+
+mkDerivation rec {
+  pname = "flameshot";
+  version = "12.1.0";
+
+  src = fetchFromGitHub {
+    owner = "flameshot-org";
+    repo = "flameshot";
+    rev = "v${version}";
+    sha256 = "sha256-omyMN8d+g1uYsEw41KmpJCwOmVWLokEfbW19vIvG79w=";
+  };
+
+  patches = [
+    # https://github.com/flameshot-org/flameshot/pull/3166
+    (fetchpatch {
+      name = "10-fix-wayland.patch";
+      url = "https://github.com/flameshot-org/flameshot/commit/5fea9144501f7024344d6f29c480b000b2dcd5a6.patch";
+      sha256 = "sha256-SnjVbFMDKD070vR4vGYrwLw6scZAFaQA4b+MbI+0W9E=";
+    })
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  nativeBuildInputs = [ cmake qttools qtsvg ];
+  buildInputs = [ qtbase ];
+
+  meta = with lib; {
+    description = "Powerful yet simple to use screenshot software";
+    homepage = "https://github.com/flameshot-org/flameshot";
+    mainProgram = "flameshot";
+    maintainers = with maintainers; [ scode oxalica ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/flashrom-stable/default.nix b/nixpkgs/pkgs/tools/misc/flashrom-stable/default.nix
new file mode 100644
index 000000000000..81beb2346e34
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flashrom-stable/default.nix
@@ -0,0 +1,48 @@
+{ fetchgit
+, installShellFiles
+, lib
+, libftdi1
+, libgpiod_1
+, libjaylink
+, libusb1
+, pciutils
+, pkg-config
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "flashrom-stable";
+  version = "1.1";
+
+  src = fetchgit {
+    url = "https://review.coreboot.org/flashrom-stable";
+    rev = "272aae888ce5abf5e999d750ee4577407db32246";
+    hash = "sha256-DR4PAING69+TMsyycGxt1cu0ba1tTlG36+H/pJ0oP4E=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+  ];
+
+  buildInputs = [
+    libftdi1
+    libjaylink
+    libusb1
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    libgpiod_1
+    pciutils
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" "libinstall" ] ++ lib.optionals stdenv.isDarwin [ "CONFIG_ENABLE_LIBPCI_PROGRAMMERS=no" ]
+    ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [ "CONFIG_INTERNAL_X86=no" "CONFIG_INTERNAL_DMI=no" "CONFIG_RAYER_SPI=0" ];
+
+  meta = with lib; {
+    homepage = "https://www.flashrom.org";
+    description = "Utility for reading, writing, erasing and verifying flash ROM chips";
+    license = with licenses; [ gpl2 gpl2Plus ];
+    maintainers = with maintainers; [ felixsinger ];
+    platforms = platforms.all;
+    mainProgram = "flashrom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/flashrom/default.nix b/nixpkgs/pkgs/tools/misc/flashrom/default.nix
new file mode 100644
index 000000000000..b2b9583db232
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flashrom/default.nix
@@ -0,0 +1,48 @@
+{ fetchurl
+, stdenv
+, installShellFiles
+, lib
+, libftdi1
+, libjaylink
+, libusb1
+, pciutils
+, pkg-config
+, jlinkSupport ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "flashrom";
+  version = "1.3.0";
+
+  src = fetchurl {
+    url = "https://download.flashrom.org/releases/flashrom-v${version}.tar.bz2";
+    hash = "sha256-oFMjRFPM0BLnnzRDvcxhYlz5e3/Xy0zdi/v/vosUliM=";
+  };
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+  buildInputs = [ libftdi1 libusb1 ]
+    ++ lib.optionals (!stdenv.isDarwin) [ pciutils ]
+    ++ lib.optional jlinkSupport libjaylink;
+
+  postPatch = ''
+    substituteInPlace util/flashrom_udev.rules \
+      --replace 'GROUP="plugdev"' 'TAG+="uaccess", TAG+="udev-acl"'
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" "libinstall" ]
+    ++ lib.optional jlinkSupport "CONFIG_JLINK_SPI=yes"
+    ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [ "CONFIG_INTERNAL_X86=no" "CONFIG_INTERNAL_DMI=no" "CONFIG_RAYER_SPI=no" ];
+
+  postInstall = ''
+    install -Dm644 util/flashrom_udev.rules $out/lib/udev/rules.d/flashrom.rules
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.flashrom.org";
+    description = "Utility for reading, writing, erasing and verifying flash ROM chips";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fpletz felixsinger ];
+    platforms = platforms.all;
+    mainProgram = "flashrom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/flexoptix-app/default.nix b/nixpkgs/pkgs/tools/misc/flexoptix-app/default.nix
new file mode 100644
index 000000000000..1e9b16a84855
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flexoptix-app/default.nix
@@ -0,0 +1,57 @@
+{ lib, appimageTools, fetchurl, asar }: let
+  pname = "flexoptix-app";
+  version = "5.16.0-latest";
+
+  src = fetchurl {
+    name = "${pname}-${version}.AppImage";
+    url = "https://flexbox.reconfigure.me/download/electron/linux/x64/FLEXOPTIX%20App.${version}.AppImage";
+    hash = "sha256-A10r8IUB3zWKWmjen90vLXPF7V/Cgo+DhFn/Hsc1Nhg=";
+  };
+
+  udevRules = fetchurl {
+    url = "https://www.flexoptix.net/static/frontend/Flexoptix/default/en_US/files/99-tprogrammer.rules";
+    hash = "sha256-OZe5dV50xq99olImbo7JQxPjRd7hGyBIVwFvtR9cIVc=";
+  };
+
+  appimageContents = (appimageTools.extract { inherit pname version src; }).overrideAttrs (oA: {
+    buildCommand = ''
+      ${oA.buildCommand}
+
+      # Get rid of the autoupdater
+      ${asar}/bin/asar extract $out/resources/app.asar app
+      sed -i 's/async isUpdateAvailable.*/async isUpdateAvailable(updateInfo) { return false;/g' app/node_modules/electron-updater/out/AppUpdater.js
+      ${asar}/bin/asar pack app $out/resources/app.asar
+    '';
+  });
+
+in appimageTools.wrapAppImage {
+  inherit pname version;
+  src = appimageContents;
+
+  multiArch = false; # no 32bit needed
+  extraPkgs = { pkgs, ... }@args: [
+    pkgs.hidapi
+  ] ++ appimageTools.defaultFhsEnvArgs.multiPkgs args;
+
+  extraInstallCommands = ''
+    # Add desktop convencience stuff
+    mv $out/bin/{${pname}-*,${pname}}
+    install -Dm444 ${appimageContents}/flexoptix-app.desktop -t $out/share/applications
+    install -Dm444 ${appimageContents}/flexoptix-app.png -t $out/share/pixmaps
+    substituteInPlace $out/share/applications/flexoptix-app.desktop \
+      --replace 'Exec=AppRun' "Exec=$out/bin/${pname} --"
+
+    # Add udev rules
+    mkdir -p $out/lib/udev/rules.d
+    ln -s ${udevRules} $out/lib/udev/rules.d/99-tprogrammer.rules
+  '';
+
+  meta = {
+    description = "Configure FLEXOPTIX Universal Transceivers in seconds";
+    homepage = "https://www.flexoptix.net";
+    changelog = "https://www.flexoptix.net/en/flexoptix-app/?os=linux#flexapp__modal__changelog";
+    license = lib.licenses.unfree;
+    maintainers = with lib.maintainers; [ das_j ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/flitter/default.nix b/nixpkgs/pkgs/tools/misc/flitter/default.nix
new file mode 100644
index 000000000000..958c5ebc3209
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flitter/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, ocamlPackages
+, fetchFromGitHub
+, makeWrapper
+, python3
+}:
+
+ocamlPackages.buildDunePackage {
+  pname = "flitter";
+  # request to tag releases: https://github.com/alexozer/flitter/issues/34
+  version = "unstable-2020-10-05";
+
+  duneVersion = "3";
+
+  src = fetchFromGitHub {
+    owner = "alexozer";
+    repo = "flitter";
+    rev = "666c5483bc93efa6d01e0b7a927461269f8e14de";
+    sha256 = "1k3m7bjq5yrrq7vhnbdykni65dsqhq6knnv9wvwq3svb3n07z4w3";
+  };
+
+  # compatibility with core >= 0.15
+  patches = [ ./flitter.patch ];
+
+  # https://github.com/alexozer/flitter/issues/28
+  postPatch = ''
+    for f in src/*.ml; do
+      substituteInPlace "$f" \
+        --replace 'Unix.gettimeofday' 'Caml_unix.gettimeofday' \
+        --replace 'Core_kernel' 'Core' \
+        --replace 'sexp_option' 'option[@sexp.option]' \
+        --replace 'sexp_list' 'list[@sexp.list]'
+    done
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = with ocamlPackages; [
+    core_unix
+    lwt_ppx
+    sexp_pretty
+    color
+    notty
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/flitter \
+      --prefix PATH : "${python3.withPackages (pp: [ pp.pynput ])}/bin"
+  '';
+
+  meta = with lib; {
+    description = "A Livesplit-inspired speedrunning split timer for Linux/macOS terminal";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz ];
+    homepage = "https://github.com/alexozer/flitter";
+    platforms = platforms.unix;
+    mainProgram = "flitter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/flitter/flitter.patch b/nixpkgs/pkgs/tools/misc/flitter/flitter.patch
new file mode 100644
index 000000000000..f59b8a22eb67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flitter/flitter.patch
@@ -0,0 +1,13 @@
+diff --git a/src/dune b/src/dune
+index a50b09a..54cc770 100644
+--- a/src/dune
++++ b/src/dune
+@@ -1,7 +1,7 @@
+ (library
+   (name flitter)
+   (wrapped false)
+-  (libraries core lwt.unix notty notty.unix re color sexp_pretty)
++  (libraries core core_kernel.caml_unix lwt.unix notty notty.unix re color sexp_pretty)
+   (preprocess (pps lwt_ppx ppx_sexp_conv))
+   )
+ 
diff --git a/nixpkgs/pkgs/tools/misc/flowgger/default.nix b/nixpkgs/pkgs/tools/misc/flowgger/default.nix
new file mode 100644
index 000000000000..c9517043adc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flowgger/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, stdenv
+, fetchCrate
+, pkg-config
+, openssl
+, capnproto
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "flowgger";
+  version = "0.3.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-PRlcfSVfQWt+rQEJjblY7/AMrjhGYO2/G7EX60aGApA=";
+  };
+
+  cargoHash = "sha256-hp2LrEVWo0gk95dPROqVcHEEG5N9fWms0mZkY9QILg0=";
+
+  nativeBuildInputs = [
+    pkg-config
+    capnproto
+  ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin CoreServices;
+
+  checkFlags = [
+    # test failed
+    "--skip=flowgger::encoder::ltsv_encoder::test_ltsv_full_encode_multiple_sd"
+    "--skip=flowgger::encoder::ltsv_encoder::test_ltsv_full_encode_no_sd"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/awslabs/flowgger";
+    description = "A fast, simple and lightweight data collector written in Rust";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [];
+    mainProgram = "flowgger";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fltrdr/default.nix b/nixpkgs/pkgs/tools/misc/fltrdr/default.nix
new file mode 100644
index 000000000000..25cbf8059335
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fltrdr/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, icu, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fltrdr";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    repo   = "fltrdr";
+    owner  = "octobanana";
+    rev    = version;
+    sha256 = "1vpci7vqzcpdd21zgigyz38k77r9fc81dmiwsvfr8w7gad5sg6sj";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ icu openssl ];
+
+  meta = with lib; {
+    homepage = "https://octobanana.com/software/fltrdr";
+    description = "A TUI text reader for the terminal";
+
+    longDescription = ''
+      Fltrdr, or flat-reader, is an interactive text reader for the terminal. It
+      is flat in the sense that the reader is word-based. It creates a
+      horizontal stream of words, ignoring all newline characters and reducing
+      extra whitespace. Its purpose is to facilitate reading, scanning, and
+      searching text. The program has a play mode that moves the reader forward
+      one word at a time, along with a configurable words per minute (WPM),
+      setting.
+    '';
+
+    platforms   = platforms.linux; # can only test linux
+    license     = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+    mainProgram = "fltrdr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fluent-bit/default.nix b/nixpkgs/pkgs/tools/misc/fluent-bit/default.nix
new file mode 100644
index 000000000000..b5b24e3faee3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluent-bit/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, flex
+, bison
+, systemd
+, postgresql
+, openssl
+, libyaml
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "fluent-bit";
+  version = "2.2.2";
+
+  src = fetchFromGitHub {
+    owner = "fluent";
+    repo = "fluent-bit";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-+AkIoGIAwz5dqQGtTJQjz+a9jgtxU1zwDuivj862Rw0=";
+  };
+
+  nativeBuildInputs = [ cmake flex bison ];
+
+  buildInputs = [ openssl libyaml postgresql ]
+    ++ lib.optionals stdenv.isLinux [ systemd ];
+
+  cmakeFlags = [
+    "-DFLB_RELEASE=ON"
+    "-DFLB_METRICS=ON"
+    "-DFLB_HTTP_SERVER=ON"
+    "-DFLB_OUT_PGSQL=ON"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString (
+    # Used by the embedded luajit, but is not predefined on older mac SDKs.
+    lib.optionals stdenv.isDarwin [ "-DTARGET_OS_IPHONE=0" ]
+    # Assumes GNU version of strerror_r, and the posix version has an
+    # incompatible return type.
+    ++ lib.optionals (!stdenv.hostPlatform.isGnu) [ "-Wno-int-conversion" ]
+  );
+
+  outputs = [ "out" "dev" ];
+
+  postPatch = ''
+    substituteInPlace src/CMakeLists.txt \
+      --replace /lib/systemd $out/lib/systemd
+  '';
+
+  meta = {
+    changelog = "https://github.com/fluent/fluent-bit/releases/tag/v${finalAttrs.version}";
+    description = "Log forwarder and processor, part of Fluentd ecosystem";
+    homepage = "https://fluentbit.io";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.samrose lib.maintainers.fpletz ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/Gemfile b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile
new file mode 100644
index 000000000000..0ad3a4dde385
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile
@@ -0,0 +1,13 @@
+source "https://rubygems.org"
+
+gem 'fluentd'
+gem 'fluent-plugin-record-reformer'
+gem 'fluent-plugin-s3'
+gem 'fluent-plugin-kinesis'
+gem 'fluent-plugin-kafka'
+gem 'fluent-plugin-elasticsearch'
+gem 'fluent-plugin-mongo'
+gem 'fluent-plugin-webhdfs'
+gem 'fluent-plugin-rewrite-tag-filter'
+gem 'fluent-plugin-cloudwatch-logs'
+gem 'fluent-plugin-concat'
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock
new file mode 100644
index 000000000000..f8d002614fe5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock
@@ -0,0 +1,169 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.8.1)
+      public_suffix (>= 2.0.2, < 6.0)
+    aws-eventstream (1.2.0)
+    aws-partitions (1.677.0)
+    aws-sdk-cloudwatchlogs (1.58.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-core (3.168.4)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.651.0)
+      aws-sigv4 (~> 1.5)
+      jmespath (~> 1, >= 1.6.1)
+      nokogiri (~> 1.0)
+    aws-sdk-firehose (1.50.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kinesis (1.42.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kms (1.61.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.117.2)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.4)
+    aws-sdk-sqs (1.52.1)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.5.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+    bson (4.15.0)
+    concurrent-ruby (1.1.10)
+    cool.io (1.7.1)
+    digest-crc (0.6.4)
+      rake (>= 12.0.0, < 14.0.0)
+    elastic-transport (8.1.0)
+      faraday (< 3)
+      multi_json
+    elasticsearch (8.5.2)
+      elastic-transport (~> 8)
+      elasticsearch-api (= 8.5.2)
+    elasticsearch-api (8.5.2)
+      multi_json
+    excon (0.95.0)
+    faraday (1.10.2)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-httpclient (~> 1.0)
+      faraday-multipart (~> 1.0)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.0)
+      faraday-patron (~> 1.0)
+      faraday-rack (~> 1.0)
+      faraday-retry (~> 1.0)
+      ruby2_keywords (>= 0.0.4)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-httpclient (1.0.1)
+    faraday-multipart (1.0.4)
+      multipart-post (~> 2)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday-patron (1.0.0)
+    faraday-rack (1.0.0)
+    faraday-retry (1.0.3)
+    fluent-config-regexp-type (1.0.0)
+      fluentd (> 1.0.0, < 2)
+    fluent-plugin-cloudwatch-logs (0.14.3)
+      aws-sdk-cloudwatchlogs (~> 1.0)
+      fluentd (>= 1.8.0)
+    fluent-plugin-concat (2.5.0)
+      fluentd (>= 0.14.0, < 2)
+    fluent-plugin-elasticsearch (5.2.4)
+      elasticsearch
+      excon
+      faraday (~> 1.10)
+      fluentd (>= 0.14.22)
+    fluent-plugin-kafka (0.18.1)
+      fluentd (>= 0.10.58, < 2)
+      ltsv
+      ruby-kafka (>= 1.4.0, < 2)
+    fluent-plugin-kinesis (3.4.2)
+      aws-sdk-firehose (~> 1, != 1.9, != 1.5, != 1.15)
+      aws-sdk-kinesis (~> 1, != 1.5, != 1.4, != 1.14)
+      fluentd (>= 0.14.22, < 2)
+      google-protobuf (~> 3)
+    fluent-plugin-mongo (1.6.0)
+      fluentd (>= 0.14.22, < 2)
+      mongo (>= 2.15.0, < 2.19.0)
+    fluent-plugin-record-reformer (0.9.1)
+      fluentd
+    fluent-plugin-rewrite-tag-filter (2.4.0)
+      fluent-config-regexp-type
+      fluentd (>= 0.14.2, < 2)
+    fluent-plugin-s3 (1.7.2)
+      aws-sdk-s3 (~> 1.60)
+      aws-sdk-sqs (~> 1.23)
+      fluentd (>= 0.14.22, < 2)
+    fluent-plugin-webhdfs (1.5.0)
+      fluentd (>= 0.14.22)
+      webhdfs (>= 0.10.0)
+    fluentd (1.15.3)
+      bundler
+      cool.io (>= 1.4.5, < 2.0.0)
+      http_parser.rb (>= 0.5.1, < 0.9.0)
+      msgpack (>= 1.3.1, < 2.0.0)
+      serverengine (>= 2.3.0, < 3.0.0)
+      sigdump (~> 0.2.2)
+      strptime (>= 0.2.4, < 1.0.0)
+      tzinfo (>= 1.0, < 3.0)
+      tzinfo-data (~> 1.0)
+      webrick (>= 1.4.2, < 1.8.0)
+      yajl-ruby (~> 1.0)
+    google-protobuf (3.21.12)
+    http_parser.rb (0.8.0)
+    jmespath (1.6.2)
+    ltsv (0.1.2)
+    mini_portile2 (2.8.2)
+    mongo (2.18.2)
+      bson (>= 4.14.1, < 5.0.0)
+    msgpack (1.6.0)
+    multi_json (1.15.0)
+    multipart-post (2.2.3)
+    nokogiri (1.15.2)
+      mini_portile2 (2.8.2)
+      racc (1.6.2)
+    public_suffix (5.0.1)
+    racc (1.6.2)
+    rake (13.0.6)
+    ruby-kafka (1.5.0)
+      digest-crc
+    ruby2_keywords (0.0.5)
+    serverengine (2.3.0)
+      sigdump (~> 0.2.2)
+    sigdump (0.2.4)
+    strptime (0.2.5)
+    tzinfo (2.0.5)
+      concurrent-ruby (~> 1.0)
+    tzinfo-data (1.2022.7)
+      tzinfo (>= 1.0.0)
+    webhdfs (0.10.2)
+      addressable
+    webrick (1.7.0)
+    yajl-ruby (1.4.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fluent-plugin-cloudwatch-logs
+  fluent-plugin-concat
+  fluent-plugin-elasticsearch
+  fluent-plugin-kafka
+  fluent-plugin-kinesis
+  fluent-plugin-mongo
+  fluent-plugin-record-reformer
+  fluent-plugin-rewrite-tag-filter
+  fluent-plugin-s3
+  fluent-plugin-webhdfs
+  fluentd
+
+BUNDLED WITH
+   2.3.26
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/default.nix b/nixpkgs/pkgs/tools/misc/fluentd/default.nix
new file mode 100644
index 000000000000..18752acb98d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/default.nix
@@ -0,0 +1,19 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript, nixosTests }:
+
+bundlerEnv {
+  inherit ruby;
+
+  pname = "fluentd";
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "fluentd";
+  passthru.tests.fluentd = nixosTests.fluentd;
+
+  meta = with lib; {
+    description = "A data collector";
+    homepage    = "https://www.fluentd.org/";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ offline nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/gemset.nix b/nixpkgs/pkgs/tools/misc/fluentd/gemset.nix
new file mode 100644
index 000000000000..16417bb0e4e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/gemset.nix
@@ -0,0 +1,686 @@
+{
+  mini_portile2 = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z7f38iq37h376n9xbl4gajdrnwzq284c9v1py4imw3gri2d5cj6";
+      type = "gem";
+    };
+    version = "2.8.2";
+  };
+  racc = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09jgz6r0f7v84a7jz9an85q8vvmp743dqcsdm3z9c8rqcqv6pljq";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mr2ibfk874ncv0qbdkynay738w2mfinlkhnbd5lyk5yiw5q1p10";
+      type = "gem";
+    };
+    version = "1.15.2";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ypdmpdn20hxp5vwxz3zc04r5xcwqc25qszdlg41h8ghdqbllwmw";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c6w07lm5ssn0v06sh90g3swqb42ma65pfz0qlk3hqlj1fs5zd9b";
+      type = "gem";
+    };
+    version = "1.677.0";
+  };
+  aws-sdk-cloudwatchlogs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yhwbr3g9brh7g8vjxygfvhlc9sa04g5bzyhkdcdkl7faqpy93z3";
+      type = "gem";
+    };
+    version = "1.58.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "131acgw2hi893n0dfbczs42bkc41afhyrmd9w8zx5y8r1k5zd6rc";
+      type = "gem";
+    };
+    version = "3.168.4";
+  };
+  aws-sdk-firehose = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02lznpqdmla1i5ilxn6kkbdwasl2w4m9ml09whig9wwrlwjfkdnm";
+      type = "gem";
+    };
+    version = "1.50.0";
+  };
+  aws-sdk-kinesis = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n6jdkcyh9cm4f15zmmgpzwxbal5dg2w17xcm65d1gf9dwajsjda";
+      type = "gem";
+    };
+    version = "1.42.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ajp7yvnf95d60xmg618xznfwsy8h1vrkzj33r1bsf2gsfp50vzy";
+      type = "gem";
+    };
+    version = "1.61.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xpb8c8zw1c0grbw1rcc0ynlys1301vm9kkqy4ls3i2zqk5v6n91";
+      type = "gem";
+    };
+    version = "1.117.2";
+  };
+  aws-sdk-sqs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hirj20g7nnyf0xhxwvgfl12nypm1r5id16ccc8y1rbasclxs897";
+      type = "gem";
+    };
+    version = "1.52.1";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11hkna2av47bl0yprgp8k4ya70rc3m2ib5w10fn0piplgkkmhz7m";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  bson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19vgs9rzzyvd7jfrzynjnc6518q0ffpfciyicfywbp77zl8nc9hk";
+      type = "gem";
+    };
+    version = "4.15.0";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s4fpn3mqiizpmpy2a24k4v365pv75y50292r8ajrv4i1p5b2k14";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  "cool.io" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dfq4h168wzvs9cvn2mm8648ynkl936pgjva2p8ik34p6d620537";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  digest-crc = {
+    dependencies = ["rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1czaak53w8n13y1fr0q23gp0fhklvxjac5n562qj3xk6sh5ad0x2";
+      type = "gem";
+    };
+    version = "0.6.4";
+  };
+  elastic-transport = {
+    dependencies = ["faraday" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w5l26fwyby8pjcyyap015q5lxc619j8ig6af5slbp9l2x7kjaby";
+      type = "gem";
+    };
+    version = "8.1.0";
+  };
+  elasticsearch = {
+    dependencies = ["elastic-transport" "elasticsearch-api"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mwrf667p3n0xdashlk3m66a7vcqsg4vnr5icm7jgdd71qr4yvds";
+      type = "gem";
+    };
+    version = "8.5.2";
+  };
+  elasticsearch-api = {
+    dependencies = ["multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "138s5rcy5j63sjf6k8av8gaxn46nh8nf1bwxyxfygyy3q2q9m4vs";
+      type = "gem";
+    };
+    version = "8.5.2";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08idrrnpwzr87wc5yhyv6id1f6zigr3nfn45mff01605b0zghdby";
+      type = "gem";
+    };
+    version = "0.95.0";
+  };
+  faraday = {
+    dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-httpclient" "faraday-multipart" "faraday-net_http" "faraday-net_http_persistent" "faraday-patron" "faraday-rack" "faraday-retry" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d5ipsv069dhgv9zhxgj8pz4j52yhgvfm01aq881yz7qgjd7ilxp";
+      type = "gem";
+    };
+    version = "1.10.2";
+  };
+  faraday-em_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-em_synchrony = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  faraday-httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-multipart = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09871c4hd7s5ws1wl4gs7js1k2wlby6v947m2bbzg43pnld044lh";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-net_http_persistent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  faraday-patron = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h184g4vqql5jv9s9im6igy00jp6mrah2h14py6mpf9bkabfqq7g";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-retry = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153i967yrwnswqgvnnajgwp981k9p50ys1h80yz3q94rygs59ldd";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  fluent-config-regexp-type = {
+    dependencies = ["fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hk0vxcmlbid7n6piyv3x83j5gyiz7in397l9x3c6nh69wicy7gm";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  fluent-plugin-cloudwatch-logs = {
+    dependencies = ["aws-sdk-cloudwatchlogs" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "139d7qv4my818mhjp0104ns9dlndlvrb6dgxa2rkv6jlzlamjpjb";
+      type = "gem";
+    };
+    version = "0.14.3";
+  };
+  fluent-plugin-concat = {
+    dependencies = ["fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b9z6hrjcsvccfimmgczzcbhvf2zwyqzvsdc29i2biqhk1mcwn3k";
+      type = "gem";
+    };
+    version = "2.5.0";
+  };
+  fluent-plugin-elasticsearch = {
+    dependencies = ["elasticsearch" "excon" "faraday" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "136nsmi15vcn0var59j1vqkysvmcp7y8fva25gkcx3hx1l92bxwh";
+      type = "gem";
+    };
+    version = "5.2.4";
+  };
+  fluent-plugin-kafka = {
+    dependencies = ["fluentd" "ltsv" "ruby-kafka"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ggiq89brahyamnw4sn4pmfqsw8xjz2k9k9hajsjlzkm9djppdwf";
+      type = "gem";
+    };
+    version = "0.18.1";
+  };
+  fluent-plugin-kinesis = {
+    dependencies = ["aws-sdk-firehose" "aws-sdk-kinesis" "fluentd" "google-protobuf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07n5pzfz143hlvbzbx5rczb33ai9kdp48vhdak100m6xpaqkvc2p";
+      type = "gem";
+    };
+    version = "3.4.2";
+  };
+  fluent-plugin-mongo = {
+    dependencies = ["fluentd" "mongo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m3fa6fwpzxw08lnczsif5c7v33yryyvgb1lbp7a7qjhipvb6jfm";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  fluent-plugin-record-reformer = {
+    dependencies = ["fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gwfrfyi9is4l9q4ih3c4l3c9qvyh00jnd2qajdpdh5xjj2m7akn";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  fluent-plugin-rewrite-tag-filter = {
+    dependencies = ["fluent-config-regexp-type" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vjvn8ph87cl2dl0dbaap69rciglsdma1y5ghn2vm5mvh5h7xbs6";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  fluent-plugin-s3 = {
+    dependencies = ["aws-sdk-s3" "aws-sdk-sqs" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04yvxhynjqm35dycrxqwfw9r7mv6ycyda1wvki27z5hpsdy57b1m";
+      type = "gem";
+    };
+    version = "1.7.2";
+  };
+  fluent-plugin-webhdfs = {
+    dependencies = ["fluentd" "webhdfs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1llpsbd5n2lgxbq16px5hbp3zfw65bdp46b08v87b6rmn3h47aiv";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  fluentd = {
+    dependencies = ["cool.io" "http_parser.rb" "msgpack" "serverengine" "sigdump" "strptime" "tzinfo" "tzinfo-data" "webrick" "yajl-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jn1i14zaw2pf4j6i7g7cj0h8j94wrcbn0an8w44h7g5mazl98nn";
+      type = "gem";
+    };
+    version = "1.15.3";
+  };
+  google-protobuf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dcgkhjiaxha3yznyxxzm8a4n4jf61rk7kgbxy4sdkb865zbn2ab";
+      type = "gem";
+    };
+    version = "3.21.12";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gj4fmls0mf52dlr928gaq0c0cb0m3aqa9kaa6l0ikl2zbqk42as";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  ltsv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wrjvc5079zhpn62k1yflrf7js6vaysrg1qwggf7bj2zi0p5rhys";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  mongo = {
+    dependencies = ["bson"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ldpcyqhgvdn7rd1vdbv2n3xnr6ajw7964yb9gr44nv7z35fd7kn";
+      type = "gem";
+    };
+    version = "2.18.2";
+  };
+  msgpack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q03pb0vq8388s431nbxabsfxnch6p304c8vnjlk0zzpcv713yr3";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n0kvnrcrjn31jb97kcx3wj1f5kkjza7yygfq8rxzf3i57g7jaa6";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hz0bx2qs2pwb0bwazzsah03ilpf3aai8b7lk7s35jsfzwbkjq35";
+      type = "gem";
+    };
+    version = "5.0.1";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+      type = "gem";
+    };
+    version = "13.0.6";
+  };
+  ruby-kafka = {
+    dependencies = ["digest-crc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13i3fvjy0n1n1aa71b30nwx2xchhsps3yhi17r0s6ay7wr26jr7p";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  serverengine = {
+    dependencies = ["sigdump"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1snxfmkmmxpdica8629gdl6qj3xradcx787ccvhfa90gh8wyfqqj";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  sigdump = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mqf06iw7rymv54y7rgbmfi6ppddgjjmxzi3hrw658n1amp1gwhb";
+      type = "gem";
+    };
+    version = "0.2.4";
+  };
+  strptime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ycs0xz58kymf7yp4h56f0nid2z7g3s18dj7pa3p790pfzzpgvcq";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rx114mpqnw2k4h98vc0rs0x0bmf0img84yh8mkkjkal07cjydf5";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  tzinfo-data = {
+    dependencies = ["tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0drm9pygji01pyimxq65ngdvgpn228g7fhffmrqw0xn7l2rdhclp";
+      type = "gem";
+    };
+    version = "1.2022.7";
+  };
+  webhdfs = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pkdsj8ybjfp1sr7gzdxd7van5fpmhc9v2c5g3hifdx4s4yzhcq7";
+      type = "gem";
+    };
+    version = "0.10.2";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  yajl-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lni4jbyrlph7sz8y49q84pb0sbj82lgwvnjnsiv01xf26f4v5wc";
+      type = "gem";
+    };
+    version = "1.4.3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fntsample/default.nix b/nixpkgs/pkgs/tools/misc/fntsample/default.nix
new file mode 100644
index 000000000000..6600b7fab72b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fntsample/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchFromGitHub
+, cmake
+, pkg-config
+, cairo
+, fontconfig
+, freetype
+, glib
+, libXdmcp
+, makeWrapper
+, pango
+, pcre
+, perlPackages
+}:
+
+let
+  ucd-blocks = fetchurl {
+    url = "https://www.unicode.org/Public/15.0.0/ucd/Blocks.txt";
+    hash = "sha256-Up3F0PY4bVLy9W4AS7+rSM4tWH7qnTi6VGxAUkkb2CA=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "fntsample";
+  version = "5.4";
+
+  src = fetchFromGitHub {
+    owner = "eugmes";
+    repo = pname;
+    rev = "release/${version}";
+    hash = "sha256-O5RT68wPWwzCb51JZWWNcIubWoM7NZw/MRiaHXPDmF0=";
+  };
+
+  cmakeFlags = [
+    "-DUNICODE_BLOCKS=${ucd-blocks.outPath}"
+  ];
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [
+    cairo
+    fontconfig
+    freetype
+    glib
+    libXdmcp
+    pango
+    perlPackages.perl
+    pcre
+  ];
+
+  postFixup =
+    let
+      perlPath = with perlPackages; makePerlPath [
+        ExporterTiny
+        ListMoreUtils
+        PDFAPI2
+        libintl-perl
+      ];
+    in ''
+    for cmd in pdfoutline pdf-extract-outline; do
+      wrapProgram "$out/bin/$cmd" --prefix PERL5LIB : "${perlPath}"
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/eugmes/fntsample";
+    description = "PDF and PostScript font samples generator";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+  };
+}
+# TODO: factor/package ucd-blocks
diff --git a/nixpkgs/pkgs/tools/misc/foma/default.nix b/nixpkgs/pkgs/tools/misc/foma/default.nix
new file mode 100644
index 000000000000..5d82f699e7d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/foma/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, zlib, flex, bison, readline, darwin }:
+
+stdenv.mkDerivation rec {
+  pname = "foma";
+  version = "0.10.0alpha";
+
+  src = fetchFromGitHub {
+    owner = "mhulden";
+    repo = "foma";
+    rev = "82f9acdef234eae8b7619ccc3a386cc0d7df62bc";
+    sha256 = "1vf01l18j8cksnavbabcckp9gg692w6v5lg81xrzv6f5v14zp4nr";
+  };
+
+  sourceRoot = "${src.name}/foma";
+
+  nativeBuildInputs = [ flex bison ]
+    ++ lib.optional stdenv.isDarwin darwin.cctools;
+  buildInputs = [ zlib readline ];
+
+  makeFlags = [
+    "CC:=$(CC)"
+    "RANLIB:=$(RANLIB)"
+    "prefix=$(out)"
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    "AR:=$(AR)" # libtool is used for darwin
+  ];
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace '-ltermcap' ' '
+  '';
+
+  meta = with lib; {
+    description = "A multi-purpose finite-state toolkit designed for applications ranging from natural language processing to research in automata theory";
+    homepage = "https://github.com/mhulden/foma";
+    license = licenses.asl20;
+    maintainers = [ maintainers.tckmn ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fondu/default.nix b/nixpkgs/pkgs/tools/misc/fondu/default.nix
new file mode 100644
index 000000000000..9435d0487b76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fondu/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, CoreServices }:
+
+stdenv.mkDerivation rec {
+  version = "060102";
+  pname = "fondu";
+
+  src = fetchurl {
+    url = "http://fondu.sourceforge.net/fondu_src-${version}.tgz";
+    sha256 = "152prqad9jszjmm4wwqrq83zk13ypsz09n02nrk1gg0fcxfm7fr2";
+  };
+
+  postConfigure = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile --replace /System/Library/Frameworks/CoreServices.framework/CoreServices "-framework CoreServices"
+  '';
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  hardeningDisable = [ "fortify" ];
+
+  meta = {
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/font-config-info/default.nix b/nixpkgs/pkgs/tools/misc/font-config-info/default.nix
new file mode 100644
index 000000000000..20133eb0df77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/font-config-info/default.nix
@@ -0,0 +1,47 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, gtk3
+, xsettingsd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "font-config-info";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "derat";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "14z7hg9c7q8wliyqv68kp080mmk2rh6kpww6pn87hy7lwq20l2b7";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    gtk3
+    xsettingsd
+  ];
+
+  postPatch = ''
+    substituteInPlace font-config-info.c --replace "dump_xsettings |" "${xsettingsd}/bin/dump_xsettings |"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D -t $out/bin font-config-info
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Prints a Linux system's font configuration";
+    homepage = "https://github.com/derat/font-config-info";
+    license = with licenses; [ bsd3 ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ romildo ];
+    mainProgram = "font-config-info";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fontfor/default.nix b/nixpkgs/pkgs/tools/misc/fontfor/default.nix
new file mode 100644
index 000000000000..b973317b722e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fontfor/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, pkg-config
+, expat
+, fontconfig
+, freetype
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fontfor";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "7sDream";
+    repo = "fontfor";
+    rev = "v${version}";
+    sha256 = "sha256-/UoZ+5X6Csoyqc+RSP0Hree7NtCDs7BjsqcpALxAazc=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+  buildInputs = [
+    expat
+    fontconfig
+    freetype
+  ];
+
+  cargoHash = "sha256-j1Qf0IKlAUEyiGAUoF7IlEbPIv2pGkn+YMCoFdF9oUE=";
+
+  meta = with lib; {
+    description = "Find fonts which can show a specified character and preview them in browser";
+    homepage = "https://github.com/7sDream/fontfor";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.linux;
+    mainProgram = "fontfor";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fontforge/default.nix b/nixpkgs/pkgs/tools/misc/fontforge/default.nix
new file mode 100644
index 000000000000..c6e939d5b505
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fontforge/default.nix
@@ -0,0 +1,71 @@
+{ stdenv, fetchFromGitHub, lib
+, cmake, uthash, pkg-config
+, python, freetype, zlib, glib, giflib, libpng, libjpeg, libtiff, libxml2, cairo, pango
+, readline, woff2, zeromq
+, withSpiro ? false, libspiro
+, withGTK ? false, gtk3
+, withGUI ? withGTK
+, withPython ? true
+, withExtras ? true
+, Carbon, Cocoa
+}:
+
+assert withGTK -> withGUI;
+
+stdenv.mkDerivation rec {
+  pname = "fontforge";
+  version = "20230101";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-/RYhvL+Z4n4hJ8dmm+jbA1Ful23ni2DbCRZC5A3+pP0=";
+  };
+
+  # use $SOURCE_DATE_EPOCH instead of non-deterministic timestamps
+  postPatch = ''
+    find . -type f -name '*.c' -exec sed -r -i 's#\btime\(&(.+)\)#if (getenv("SOURCE_DATE_EPOCH")) \1=atol(getenv("SOURCE_DATE_EPOCH")); else &#g' {} \;
+    sed -r -i 's#author\s*!=\s*NULL#& \&\& !getenv("SOURCE_DATE_EPOCH")#g'                            fontforge/cvexport.c fontforge/dumppfa.c fontforge/print.c fontforge/svg.c fontforge/splineutil2.c
+    sed -r -i 's#\bb.st_mtime#getenv("SOURCE_DATE_EPOCH") ? atol(getenv("SOURCE_DATE_EPOCH")) : &#g'  fontforge/parsepfa.c fontforge/sfd.c fontforge/svg.c
+    sed -r -i 's#^\s*ttf_fftm_dump#if (!getenv("SOURCE_DATE_EPOCH")) ttf_fftm_dump#g'                 fontforge/tottf.c
+    sed -r -i 's#sprintf\(.+ author \);#if (!getenv("SOURCE_DATE_EPOCH")) &#g'                        fontforgeexe/fontinfo.c
+  '';
+
+  # do not use x87's 80-bit arithmetic, rouding errors result in very different font binaries
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isi686 "-msse2 -mfpmath=sse";
+
+  nativeBuildInputs = [ pkg-config cmake ];
+  buildInputs = [
+    readline uthash woff2 zeromq
+    python freetype zlib glib giflib libpng libjpeg libtiff libxml2
+  ]
+    ++ lib.optionals withSpiro [ libspiro ]
+    ++ lib.optionals withGUI [ gtk3 cairo pango ]
+    ++ lib.optionals stdenv.isDarwin [ Carbon Cocoa ];
+
+  cmakeFlags = [ "-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" ]
+    ++ lib.optional (!withSpiro) "-DENABLE_LIBSPIRO=OFF"
+    ++ lib.optional (!withGUI) "-DENABLE_GUI=OFF"
+    ++ lib.optional (!withGTK) "-DENABLE_X11=ON"
+    ++ lib.optional withExtras "-DENABLE_FONTFORGE_EXTRAS=ON";
+
+  preConfigure = ''
+    # The way $version propagates to $version of .pe-scripts (https://github.com/dejavu-fonts/dejavu-fonts/blob/358190f/scripts/generate.pe#L19)
+    export SOURCE_DATE_EPOCH=$(date -d ${version} +%s)
+  '';
+
+  postInstall =
+    # get rid of the runtime dependency on python
+    lib.optionalString (!withPython) ''
+      rm -r "$out/share/fontforge/python"
+    '';
+
+  meta = with lib; {
+    description = "A font editor";
+    homepage = "https://fontforge.github.io";
+    platforms = platforms.all;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.erictapen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix b/nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix
new file mode 100644
index 000000000000..ea4acfc5f0bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix
@@ -0,0 +1 @@
+{ fontforge }: fontforge.override { withExtras = true; }
diff --git a/nixpkgs/pkgs/tools/misc/fortune/default.nix b/nixpkgs/pkgs/tools/misc/fortune/default.nix
new file mode 100644
index 000000000000..91afc1f76fd6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fortune/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, cmake, recode, perl, rinutils, withOffensive ? false }:
+
+stdenv.mkDerivation rec {
+  pname = "fortune-mod";
+  version = "3.20.0";
+
+  # We use fetchurl instead of fetchFromGitHub because the release pack has some
+  # special files.
+  src = fetchurl {
+    url = "https://github.com/shlomif/fortune-mod/releases/download/${pname}-${version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-MQG+lfuJxISNSD5ykw2o0D9pJXN6I9eIA9a1XEL+IJQ=";
+  };
+
+  nativeBuildInputs = [ cmake perl rinutils ];
+
+  buildInputs = [ recode ];
+
+  cmakeFlags = [
+    "-DLOCALDIR=${placeholder "out"}/share/fortunes"
+  ] ++ lib.optional (!withOffensive) "-DNO_OFFENSIVE=true";
+
+  patches = [ (builtins.toFile "not-a-game.patch" ''
+    diff --git a/CMakeLists.txt b/CMakeLists.txt
+    index 865e855..5a59370 100644
+    --- a/CMakeLists.txt
+    +++ b/CMakeLists.txt
+    @@ -154,7 +154,7 @@ ENDMACRO()
+     my_exe(
+         "fortune"
+         "fortune/fortune.c"
+    -    "games"
+    +    "bin"
+     )
+
+     my_exe(
+    --
+  '') ];
+
+  postFixup = lib.optionalString (!withOffensive) ''
+    rm -f $out/share/fortunes/men-women*
+  '';
+
+  meta = with lib; {
+    mainProgram = "fortune";
+    description = "A program that displays a pseudorandom message from a database of quotations";
+    license = licenses.bsdOriginal;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ vonfry ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fpart/default.nix b/nixpkgs/pkgs/tools/misc/fpart/default.nix
new file mode 100644
index 000000000000..d72a0bc9f85a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fpart/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, fts }:
+
+stdenv.mkDerivation rec {
+  pname = "fpart";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "martymac";
+    repo = "fpart";
+    rev = "${pname}-${version}";
+    sha256 = "sha256-kAvGLd5W633fRS+qVD/yclreFfcauyLygQGtzv7AP24=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ fts ];
+
+  postInstall = ''
+    sed "s|^FPART_BIN=.*|FPART_BIN=\"$out/bin/fpart\"|" \
+        -i "$out/bin/fpsync"
+  '';
+
+  meta = with lib; {
+    description = "Split file trees into bags (called \"partitions\")";
+    longDescription = ''
+      Fpart is a tool that helps you sort file trees and pack them into bags
+      (called "partitions").
+
+      It splits a list of directories and file trees into a certain number of
+      partitions, trying to produce partitions with the same size and number of
+      files. It can also produce partitions with a given number of files or a
+      limited size.
+
+      Once generated, partitions are either printed as file lists to stdout
+      (default) or to files. Those lists can then be used by third party programs.
+
+      Fpart also includes a live mode, which allows it to crawl very large
+      filesystems and produce partitions in live. Hooks are available to act on
+      those partitions (e.g. immediately start a transfer using rsync(1))
+      without having to wait for the filesystem traversal job to be finished.
+      Used this way, fpart can be seen as a powerful data migration tool.
+    '';
+    homepage = "http://contribs.martymac.org/";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fpp/default.nix b/nixpkgs/pkgs/tools/misc/fpp/default.nix
new file mode 100644
index 000000000000..d8f575b1363b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fpp/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, python3, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "fpp";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "PathPicker";
+    rev = version;
+    sha256 = "sha256-4BkdGvG/RyF3JBnd/X5r5nboEHG4aqahcYHDunMv2zU=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = ''
+    substituteInPlace fpp --replace 'PYTHONCMD="python3"' 'PYTHONCMD="${python3.interpreter}"'
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/fpp $out/bin
+    cp -r fpp src $out/share/fpp
+    ln -s $out/share/fpp/fpp $out/bin/fpp
+    installManPage debian/usr/share/man/man1/fpp.1
+  '';
+
+  meta = {
+    description = "CLI program that accepts piped input and presents files for selection";
+    homepage = "https://facebook.github.io/PathPicker/";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.all;
+    mainProgram = "fpp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fre/default.nix b/nixpkgs/pkgs/tools/misc/fre/default.nix
new file mode 100644
index 000000000000..807529f200dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fre/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fre";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "camdencheek";
+    repo = "fre";
+    rev = "v${version}";
+    hash = "sha256-cYqEPohqUmewvBUoGJQfa4ATxw2uny5+nUKtNzrxK38=";
+  };
+
+  cargoHash = "sha256-BEIrjHsIrNkFEEjCrTKwsJL9hptmVOI8x3ZWoo9ZUvQ=";
+
+  meta = with lib; {
+    description = "A CLI tool for tracking your most-used directories and files";
+    homepage = "https://github.com/camdencheek/fre";
+    changelog = "https://github.com/camdencheek/fre/blob/${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ gaykitty ];
+    mainProgram = "fre";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/frei/default.nix b/nixpkgs/pkgs/tools/misc/frei/default.nix
new file mode 100644
index 000000000000..6e8a2181abb1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/frei/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "frei";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "alexcoder04";
+    repo = "frei";
+    rev = "v${version}";
+    sha256 = "sha256-9CV6B7fRHXl73uI2JRv3RiaFczLHHBOd7/8UoCAwK6w=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Modern replacement for free";
+    homepage = "https://github.com/alexcoder04/frei";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ infinidoge ];
+    mainProgram = "frei";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/freshfetch/Cargo.lock b/nixpkgs/pkgs/tools/misc/freshfetch/Cargo.lock
new file mode 100644
index 000000000000..24cfb7e9de96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/freshfetch/Cargo.lock
@@ -0,0 +1,587 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "bstr"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "time",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clml_rs"
+version = "0.3.0"
+source = "git+https://github.com/K4rakara/clml-rs#eecf1378f4e85a9b3dc91e8a15d497a2fd75906f"
+dependencies = [
+ "lazy_static",
+ "rand",
+ "regex",
+]
+
+[[package]]
+name = "cmd_lib"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42443b644d30f401746fb4483fba96b13076e1ef6cb5bca7d6a14d1d8f9f2bd9"
+dependencies = [
+ "cmd_lib_core",
+ "cmd_lib_macros",
+]
+
+[[package]]
+name = "cmd_lib_core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50c50a1536e882455aeaff22015146ea143b9106fc8e116669dd078ec7b7fc8"
+
+[[package]]
+name = "cmd_lib_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d202b0cfc28d8928ba89138c0a8248cf921b9870c6c9d60c9951092df5b62b2"
+dependencies = [
+ "cmd_lib_core",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b"
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "lazy_static",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "freshfetch"
+version = "0.2.0"
+dependencies = [
+ "chrono",
+ "clap",
+ "clml_rs",
+ "cmd_lib",
+ "cmd_lib_core",
+ "lazy_static",
+ "mlua",
+ "regex",
+ "sysinfo",
+ "term_size",
+ "uname",
+ "users",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41"
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "lua-src"
+version = "543.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029180f994b9b36f47d905f92569b516acf7d073778e2e781c15ee375b1ca27d"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "luajit-src"
+version = "210.1.3+restyfe08842"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36d3de8377d8e0492b646527befb7eb826a9ecd2dc8c1f81ab0e654bc03a029b"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+
+[[package]]
+name = "memoffset"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mlua"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f2fc8e1085d53b72898c59ceee1980b5826b0c98ce99886b7518f0ead00e5cb"
+dependencies = [
+ "bstr",
+ "cc",
+ "lazy_static",
+ "lua-src",
+ "luajit-src",
+ "num-traits",
+ "pkg-config",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rayon"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "lazy_static",
+ "num_cpus",
+]
+
+[[package]]
+name = "regex"
+version = "1.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "sysinfo"
+version = "0.15.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de94457a09609f33fec5e7fceaf907488967c6c7c75d64da6a7ce6ffdb8b5abd"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "core-foundation-sys",
+ "doc-comment",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "term_size"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "time"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "uname"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+
+[[package]]
+name = "users"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4227e95324a443c9fcb06e03d4d85e91aabe9a5a02aa818688b6918b6af486"
+dependencies = [
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/nixpkgs/pkgs/tools/misc/freshfetch/default.nix b/nixpkgs/pkgs/tools/misc/freshfetch/default.nix
new file mode 100644
index 000000000000..0723c18048b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/freshfetch/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, AppKit
+, CoreFoundation
+, DiskArbitration
+, Foundation
+, IOKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "freshfetch";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "k4rakara";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1l9zngr5l12g71j85iyph4jjri3crxc2pi9q0gczrrzvs03439mn";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "clml_rs-0.3.0" = "sha256-KTAm0TCNHGeuOmqmLcZfjl2mQmWcCxWaTPOzA38qbUM=";
+    };
+  };
+
+  # freshfetch depends on rust nightly features
+  RUSTC_BOOTSTRAP = 1;
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    AppKit
+    CoreFoundation
+    DiskArbitration
+    Foundation
+    IOKit
+  ];
+
+  meta = with lib; {
+    description = "A fresh take on neofetch";
+    homepage = "https://github.com/k4rakara/freshfetch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "freshfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsearch/default.nix b/nixpkgs/pkgs/tools/misc/fsearch/default.nix
new file mode 100644
index 000000000000..a9e3b6caa352
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsearch/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gtk3
+, pcre2
+, glib
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+, gettext
+, icu
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fsearch";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "cboxdoerfer";
+    repo = pname;
+    rev = version;
+    hash = "sha256-VBcoDxh4ip2zLBcXVHDe9s1lVRQF4bZJKsGUt6sPcos=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+    gettext
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    pcre2
+    icu
+  ];
+
+  preFixup = ''
+    substituteInPlace $out/share/applications/io.github.cboxdoerfer.FSearch.desktop \
+      --replace "Exec=fsearch" "Exec=$out/bin/fsearch"
+  '';
+
+  meta = with lib; {
+    description = "A fast file search utility for Unix-like systems based on GTK+3";
+    homepage = "https://github.com/cboxdoerfer/fsearch.git";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ artturin ];
+    platforms = platforms.unix;
+    mainProgram = "fsearch";
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/fsearch.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fselect/default.nix b/nixpkgs/pkgs/tools/misc/fselect/default.nix
new file mode 100644
index 000000000000..feeb9f3a3d21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fselect/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, installShellFiles, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fselect";
+  version = "0.8.5";
+
+  src = fetchFromGitHub {
+    owner = "jhspetersson";
+    repo = "fselect";
+    rev = version;
+    sha256 = "sha256-gEiKv1YbNNWexNfzUULbe0fT0ueJ9TJojhBHp31i6OY=";
+  };
+
+  cargoHash = "sha256-eqzqIyQHHklxo3aojCvY06TUPSqChoz6yZ2zzpgRNqs=";
+
+  nativeBuildInputs = [ installShellFiles ];
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  postInstall = ''
+    installManPage docs/fselect.1
+  '';
+
+  meta = with lib; {
+    description = "Find files with SQL-like queries";
+    homepage = "https://github.com/jhspetersson/fselect";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "fselect";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsmark/default.nix b/nixpkgs/pkgs/tools/misc/fsmark/default.nix
new file mode 100644
index 000000000000..2c2aa2c6fef8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsmark/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "fsmark";
+  version = "3.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/fsmark/${version}/fs_mark-${version}.tar.gz";
+    sha256 = "15f8clcz49qsfijdmcz165ysp8v4ybsm57d3dxhhlnq1bp1i9w33";
+  };
+
+  patchPhase = ''
+    sed -i Makefile -e 's/-static //'
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp fs_mark $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Synchronous write workload file system benchmark";
+    homepage = "https://sourceforge.net/projects/fsmark/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "fs_mark";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsmon/default.nix b/nixpkgs/pkgs/tools/misc/fsmon/default.nix
new file mode 100644
index 000000000000..f704de4f6515
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsmon/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fsmon";
+  version = "1.8.5";
+
+  src = fetchFromGitHub {
+    owner = "nowsecure";
+    repo = "fsmon";
+    rev = "refs/tags/${version}";
+    hash = "sha256-vAlAnGeFMgLIKaqUusBV7QalYh0+dZdifUvZwebk65U=";
+  };
+
+  installPhase = ''
+    make install PREFIX=$out
+  '';
+
+  meta = with lib; {
+    description = "FileSystem Monitor utility";
+    homepage = "https://github.com/nowsecure/fsmon";
+    changelog = "https://github.com/nowsecure/fsmon/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "fsmon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsql/default.nix b/nixpkgs/pkgs/tools/misc/fsql/default.nix
new file mode 100644
index 000000000000..d9f3b3ae8f90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsql/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "fsql";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "kshvmdn";
+    repo = "fsql";
+    rev = "v${version}";
+    sha256 = "sha256-U6TPszqsZvoz+9GIB0wNYMRJqIDLOp/BZO3/k8FC0Gs=";
+  };
+
+  vendorHash = "sha256-+laTnx6Xkrv3QQel5opqYQSuFmo54UMI2A653xbBWzQ=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Search through your filesystem with SQL-esque queries";
+    homepage = "https://github.com/kshvmdn/fsql";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "fsql";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsrx/default.nix b/nixpkgs/pkgs/tools/misc/fsrx/default.nix
new file mode 100644
index 000000000000..63f3b9728f1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsrx/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, rustPlatform, testers, fsrx }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fsrx";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "thatvegandev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hzfpjunP20WCt3erYu7AO7A3nz+UMKdFzWUA5jASbVA=";
+  };
+
+  cargoSha256 = "sha256-bRStmz2sJnhCKpvoQfc/ZP9B2ZdNHYNEHd+wZErdS1Y=";
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = fsrx;
+    };
+  };
+
+  meta = with lib; {
+    description = "A flow state reader in the terminal";
+    homepage = "https://github.com/thatvegandev/fsrx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ MoritzBoehme ];
+    mainProgram = "fsrx";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fuc/default.nix b/nixpkgs/pkgs/tools/misc/fuc/default.nix
new file mode 100644
index 000000000000..f30c26092a97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fuc/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, clippy
+, rustfmt
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fuc";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "SUPERCILEX";
+    repo = "fuc";
+    rev = version;
+    hash = "sha256-Y43+LB6JXxpU94BrrjSBs2ge2g3NB7O3wYeU6rbF28U=";
+  };
+
+  cargoHash = "sha256-uNG+7a9EvGLkPIu/p8tnucZ3R6/LhZ2Lfv7V0e5YIxs=";
+
+  RUSTC_BOOTSTRAP = 1;
+
+  cargoBuildFlags = [ "--workspace" "--bin cpz" "--bin rmz" ];
+
+  nativeCheckInputs = [ clippy rustfmt ];
+
+  meta = with lib; {
+    description = "Modern, performance focused unix commands";
+    homepage = "https://github.com/SUPERCILEX/fuc";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fw/default.nix b/nixpkgs/pkgs/tools/misc/fw/default.nix
new file mode 100644
index 000000000000..54d263fc112f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fw/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libgit2
+, openssl
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fw";
+  version = "2.19.1";
+
+  src = fetchFromGitHub {
+    owner = "brocode";
+    repo = "fw";
+    rev = "v${version}";
+    hash = "sha256-fG1N/3Er7BvXOJTMGooaIMa5I9iNwnH+1om2jcWkI68=";
+  };
+
+  cargoHash = "sha256-1d2uX/A1HZAmAI3d0iet1NkG0IFuJpVnhWxpY0jVVUI=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libgit2
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  env = {
+    OPENSSL_NO_VENDOR = true;
+  };
+
+  meta = with lib; {
+    description = "A workspace productivity booster";
+    homepage = "https://github.com/brocode/fw";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "fw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fwup/default.nix b/nixpkgs/pkgs/tools/misc/fwup/default.nix
new file mode 100644
index 000000000000..d43914685d2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fwup/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, DiskArbitration
+, pkg-config
+, bzip2
+, libarchive
+, libconfuse
+, libsodium
+, xz
+, zlib
+, coreutils
+, dosfstools
+, mtools
+, unzip
+, zip
+, which
+, xdelta
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fwup";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "fhunleth";
+    repo = "fwup";
+    rev = "v${version}";
+    sha256 = "sha256-s2TlxksxGYvRqDwRA7eLlXAyT5uPK2DiL8ma1nNVz5Q=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    bzip2
+    libarchive
+    libconfuse
+    libsodium
+    xz
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    DiskArbitration
+  ];
+
+  propagatedBuildInputs = [
+    coreutils
+    unzip
+    zip
+  ] ++ lib.optionals doCheck [
+    mtools
+    dosfstools
+  ];
+
+  nativeCheckInputs = [
+    which
+    xdelta
+  ];
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Configurable embedded Linux firmware update creator and runner";
+    homepage = "https://github.com/fhunleth/fwup";
+    license = licenses.asl20;
+    maintainers = [ maintainers.georgewhewell ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fx-cast-bridge/default.nix b/nixpkgs/pkgs/tools/misc/fx-cast-bridge/default.nix
new file mode 100644
index 000000000000..722905df951f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fx-cast-bridge/default.nix
@@ -0,0 +1,58 @@
+{ lib, buildNpmPackage, fetchFromGitHub, avahi-compat, nodejs_18, python3 }:
+
+buildNpmPackage rec {
+  pname = "fx-cast-bridge";
+  version = "0.3.1";
+
+  nodejs = nodejs_18;
+
+  src = fetchFromGitHub {
+    owner = "hensm";
+    repo = "fx_cast";
+    rev = "v${version}";
+    hash = "sha256-hB4NVJW2exHoKsMp0CKzHerYgj8aR77rV+ZsCoWA1Dg=";
+  };
+  sourceRoot = "${src.name}/app";
+  npmDepsHash = "sha256-GLrDRZqKcX1PDGREx+MLZ1TEjr88r9nz4TvZ9nvo40g=";
+
+  nativeBuildInputs = [ python3 ];
+  buildInputs = [ avahi-compat ];
+
+  postPatch = ''
+    substituteInPlace bin/lib/paths.js \
+      --replace "../../../" "../../"
+  '';
+
+  dontNpmInstall = true;
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,lib/mozilla/native-messaging-hosts}
+
+    substituteInPlace dist/app/fx_cast_bridge.json \
+      --replace "$(realpath dist/app/fx_cast_bridge.sh)" "$out/bin/fx_cast_bridge"
+    mv dist/app/fx_cast_bridge.json $out/lib/mozilla/native-messaging-hosts
+
+    rm dist/app/fx_cast_bridge.sh
+    mv dist/app $out/lib/fx_cast_bridge
+    mv node_modules $out/lib/fx_cast_bridge/node_modules
+
+    echo "#! /bin/sh
+    NODE_PATH=\"$out/lib/node_modules\" \\
+      exec ${nodejs}/bin/node \\
+      $out/lib/fx_cast_bridge/src/main.js \\
+      --_name fx_cast_bridge \"\$@\"
+    " >$out/bin/fx_cast_bridge
+    chmod +x $out/bin/fx_cast_bridge
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Implementation of the Chrome Sender API (Chromecast) within Firefox";
+    homepage = "https://hensm.github.io/fx_cast/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "fx_cast_bridge";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix
new file mode 100644
index 000000000000..fba442e4aa0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, lib, fetchzip, substituteAll, dpkg, autoPatchelfHook, cups, tcl, tk, xorg, makeWrapper }:
+let
+  debPlatform =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "amd64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "i386"
+         else throw "Unsupported system: ${stdenv.hostPlatform.system}";
+in
+stdenv.mkDerivation rec {
+  pname = "fxlinuxprintutil";
+  version = "1.1.1-1";
+
+  # https://support-fb.fujifilm.com/driver_downloads/fxlinuxpdf112119031.zip is gone
+  src = fetchzip {
+    url = "https://github.com/NixOS/nixpkgs/files/12232817/fxlinuxpdf112119031.zip";
+    sha256 = "1mv07ch6ysk9bknfmjqsgxb803sj6vfin29s9knaqv17jvgyh0n3";
+  };
+
+  patches = [
+    # replaces references to “path/to/fxlputil†via $0 that are broken by our wrapProgram
+    # with /nix/store/fxlinuxprintutil/bin/fxlputil
+    ./fxlputil.patch
+
+    # replaces the code that looks for Tcl packages in the working directory and /usr/lib
+    # or /usr/lib64 with /nix/store/fxlinuxprintutil/lib
+    ./fxlputil.tcl.patch
+
+    # replaces the code that looks for X11’s locale.alias in /usr/share/X11/locale or
+    # /usr/lib/X11/locale with /nix/store/libX11/share/X11/locale
+    (substituteAll {
+      src = ./fxlocalechk.tcl.patch;
+      inherit (xorg) libX11;
+    })
+  ];
+
+  nativeBuildInputs = [ dpkg autoPatchelfHook makeWrapper ];
+  buildInputs = [ cups tcl tk ];
+
+  sourceRoot = ".";
+  unpackCmd = "dpkg-deb -x $curSrc/${pname}_${version}_${debPlatform}.deb .";
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out
+    mv usr/bin $out
+    mv usr/lib $out
+
+    wrapProgram $out/bin/fxlputil --prefix PATH : ${lib.makeBinPath [ tcl tk ]}
+  '';
+
+  meta = with lib; {
+    description = "Optional configuration tool for fxlinuxprint";
+    homepage = "https://onlinesupport.fujixerox.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ delan ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch
new file mode 100644
index 000000000000..fbf211065e9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch
@@ -0,0 +1,18 @@
+diff --git a/usr/bin/fxlocalechk.tcl b/usr/bin/fxlocalechk.tcl
+index f0ebc6c..c3486fe 100755
+--- a/usr/bin/fxlocalechk.tcl
++++ b/usr/bin/fxlocalechk.tcl
+@@ -12,12 +12,7 @@
+ #THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ #i18N
+-#---- check locale with environment variable
+-set locale_alias_path  /usr/share/X11/locale
+-
+-if {[file exists $locale_alias_path/locale.alias] != 1} {
+-    set locale_alias_path /usr/lib/X11/locale
+-}
++set locale_alias_path @libX11@/share/X11/locale
+ 
+ proc conv_locale {alias} {
+     global env envL locale_alias_path
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch
new file mode 100644
index 000000000000..972152b2cc3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch
@@ -0,0 +1,28 @@
+diff --git a/usr/bin/fxlputil b/usr/bin/fxlputil
+index cdac66d..aa86d02 100755
+--- a/usr/bin/fxlputil
++++ b/usr/bin/fxlputil
+@@ -7,17 +7,19 @@
+ #	TCL=`which fxlputil`
+ #fi
+ 
++wrapper=$(dirname $0)/fxlputil
++
+ #set LC_ALL
+-locale=`tclsh $0lo.tcl`
++locale=`tclsh ${wrapper}lo.tcl`
+ 
+ case $locale in
+ 	"ja")
+-		env LC_ALL=ja_JP.UTF-8 wish $0.tcl $1
++		env LC_ALL=ja_JP.UTF-8 wish ${wrapper}.tcl $1
+ 		;;
+ 	"en")
+-		env LC_ALL=en_US.ISO8859-1 wish $0.tcl $1
++		env LC_ALL=en_US.ISO8859-1 wish ${wrapper}.tcl $1
+ 		;;
+ 	*)
+-		env LC_ALL=C wish $0.tcl $1
++		env LC_ALL=C wish ${wrapper}.tcl $1
+ 		;;
+ esac
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch
new file mode 100644
index 000000000000..2bfbab450cb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch
@@ -0,0 +1,21 @@
+diff --git a/usr/bin/fxlputil.tcl b/usr/bin/fxlputil.tcl
+index 02eeaf6..788ed5a 100755
+--- a/usr/bin/fxlputil.tcl
++++ b/usr/bin/fxlputil.tcl
+@@ -25,14 +25,8 @@ catch {namespace import combobox::*}
+ 
+ 
+ 
+-lappend auto_path $cwd
+-
+-if {[lsearch $auto_path /usr/lib] == -1} {
+-	lappend auto_path /usr/lib
+-}
+-if {[lsearch $auto_path /usr/lib64] == -1} {
+-	lappend auto_path /usr/lib64
+-}
++# https://stackoverflow.com/a/23287132
++lappend auto_path [file join [file dirname [file dirname [info script]]] lib]
+ 
+ package require fxlputil
+ 
diff --git a/nixpkgs/pkgs/tools/misc/fzf/default.nix b/nixpkgs/pkgs/tools/misc/fzf/default.nix
new file mode 100644
index 000000000000..a64246693ee1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fzf/default.nix
@@ -0,0 +1,109 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, writeShellScriptBin
+, runtimeShell
+, installShellFiles
+, bc
+, ncurses
+, perl
+, testers
+, fzf
+}:
+
+let
+  # on Linux, wrap perl in the bash completion scripts with the glibc locales,
+  # so that using the shell completion (ctrl+r, etc) doesn't result in ugly
+  # warnings on non-nixos machines
+  ourPerl = if !stdenv.isLinux then perl else (
+    writeShellScriptBin "perl" ''
+      export PERL_BADLANG=0
+      exec ${perl}/bin/perl "$@"
+    '');
+in
+buildGoModule rec {
+  pname = "fzf";
+  version = "0.46.1";
+
+  src = fetchFromGitHub {
+    owner = "junegunn";
+    repo = pname;
+    rev = version;
+    hash = "sha256-gMSelLwIIYv/vkbdWi4Cw3FEy4lbC8P/5+T+c/e66+c=";
+  };
+
+  vendorHash = "sha256-8ojmIETUyZ3jDhrqkHYnxptRG8vdj0GADYvEpw0wi6w=";
+
+  CGO_ENABLED = 0;
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ ncurses ];
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version} -X main.revision=${src.rev}"
+  ];
+
+  # The vim plugin expects a relative path to the binary; patch it to abspath.
+  postPatch = ''
+    sed -i -e "s|expand('<sfile>:h:h')|'$out'|" plugin/fzf.vim
+
+    if ! grep -q $out plugin/fzf.vim; then
+        echo "Failed to replace vim base_dir path with $out"
+        exit 1
+    fi
+
+    # Has a sneaky dependency on perl
+    # Include first args to make sure we're patching the right thing
+    substituteInPlace shell/key-bindings.bash \
+      --replace "command -v perl" "command -v ${ourPerl}/bin/perl" \
+      --replace " perl -n " " ${ourPerl}/bin/perl -n "
+    # fzf-tmux depends on bc
+   substituteInPlace bin/fzf-tmux \
+     --replace "bc" "${bc}/bin/bc"
+  '';
+
+  postInstall = ''
+    install bin/fzf-tmux $out/bin
+
+    installManPage man/man1/fzf.1 man/man1/fzf-tmux.1
+
+    install -D plugin/* -t $out/share/vim-plugins/${pname}/plugin
+    mkdir -p $out/share/nvim
+    ln -s $out/share/vim-plugins/${pname} $out/share/nvim/site
+
+    # Install shell integrations
+    install -D shell/* -t $out/share/fzf/
+    install -D shell/key-bindings.fish $out/share/fish/vendor_functions.d/fzf_key_bindings.fish
+    mkdir -p $out/share/fish/vendor_conf.d
+    cat << EOF > $out/share/fish/vendor_conf.d/load-fzf-key-bindings.fish
+      status is-interactive; or exit 0
+      fzf_key_bindings
+    EOF
+
+    cat <<SCRIPT > $out/bin/fzf-share
+    #!${runtimeShell}
+    # Run this script to find the fzf shared folder where all the shell
+    # integration scripts are living.
+    echo $out/share/fzf
+    SCRIPT
+    chmod +x $out/bin/fzf-share
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = fzf;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/junegunn/fzf";
+    description = "A command-line fuzzy finder written in Go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ma27 zowoq ];
+    platforms = platforms.unix;
+    changelog = "https://github.com/junegunn/fzf/blob/${version}/CHANGELOG.md";
+    mainProgram = "fzf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fzy/default.nix b/nixpkgs/pkgs/tools/misc/fzy/default.nix
new file mode 100644
index 000000000000..b7186e08d3db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fzy/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "fzy";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "jhawthorn";
+    repo = "fzy";
+    rev = version;
+    sha256 = "1gkzdvj73f71388jvym47075l9zw61v6l8wdv2lnc0mns6dxig0k";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A better fuzzy finder";
+    homepage = "https://github.com/jhawthorn/fzy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dywedir ];
+    platforms = platforms.all;
+    mainProgram = "fzy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/g203-led/default.nix b/nixpkgs/pkgs/tools/misc/g203-led/default.nix
new file mode 100644
index 000000000000..f2db4f58d591
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/g203-led/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv
+, fetchFromGitHub
+, python3
+}:
+stdenv.mkDerivation rec {
+  pname = "g203-led";
+  version = "unstable-2021-05-08";
+  src = fetchFromGitHub {
+    owner = "smasty";
+    repo = pname;
+    rev = "f9d10ba3aa8f9359f928bbab0a2ea00cefc69f4b";
+    sha256 = "1fhaimci80xmihg84bgrml61zr56pi9rkxfbs13vvw9dwjf031k0";
+  };
+
+  buildInputs = [
+    (python3.withPackages (ps: with ps; [
+      pyusb
+    ]))
+  ];
+
+  postPatch = ''
+    patchShebangs g203-led.py
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D g203-led.py $out/bin/g203-led
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Logitech G203 Prodigy / G203 LightSync Mouse LED control for Linux";
+    longDescription = ''
+      Allows you to control the LED lighting of your G203 Prodigy
+      or G203 LightSync Mouse programmatically.
+      Inspired by and based on g810-led.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ r-burns ];
+    homepage = "https://github.com/smasty/g203-led";
+    platforms = platforms.linux;
+    mainProgram = "g203-led";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/g933-utils/default.nix b/nixpkgs/pkgs/tools/misc/g933-utils/default.nix
new file mode 100644
index 000000000000..de084fb74bf4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/g933-utils/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, rustPlatform, udev, pkg-config }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "g933-utils";
+  version = "unstable-2021-11-19";
+
+  src = fetchFromGitHub {
+    owner = "ashkitten";
+    repo = "g933-utils";
+    rev = "1fc8cec375ed0d6f72191eadec788a49f51032d1";
+    sha256 = "sha256-kGLMRqZHzRuXQNTjIuLz8JPC1c/ZK38msfkTIVnaomg=";
+  };
+
+  cargoSha256 = "sha256-FBX5hrS8tNWN83XX+x+s/mYyvO1h6V63bXCx7y0R8bY=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ udev ];
+
+  meta = with lib; {
+    description = "An application to configure Logitech wireless G933/G533 headsets";
+    homepage = "https://github.com/ashkitten/g933-utils";
+    license = licenses.mit;
+    maintainers = with maintainers; [ seqizz ];
+    platforms = platforms.linux;
+    mainProgram = "g933-utils";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gams/default.nix b/nixpkgs/pkgs/tools/misc/gams/default.nix
new file mode 100644
index 000000000000..be71618aae20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gams/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, unzip, file, licenseFile ? null, optgamsFile ? null}:
+
+assert licenseFile != null;
+
+stdenv.mkDerivation rec {
+  version = "25.0.2";
+  pname = "gams";
+  src = fetchurl {
+    url = "https://d37drm4t2jghv5.cloudfront.net/distributions/${version}/linux/linux_x64_64_sfx.exe";
+    sha256 = "4f95389579f33ff7c2586838a2c19021aa0746279555cbb51aa6e0efd09bd297";
+  };
+  unpackCmd = "unzip $src";
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ file ];
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/share/gams"
+    cp -a * "$out/share/gams"
+
+    cp ${licenseFile} $out/share/gams/gamslice.txt
+  '' + lib.optionalString (optgamsFile != null) ''
+    cp ${optgamsFile} $out/share/gams/optgams.def
+    ln -s $out/share/gams/optgams.def $out/bin/optgams.def
+  '';
+
+  postFixup = ''
+    for f in $out/share/gams/*; do
+      if [[ -x $f ]] && [[ -f $f ]] && [[ ! $f =~ .*\.so$ ]]; then
+        if patchelf \
+          --set-rpath "$out/share/gams" \
+          --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) $f; then
+          ln -s $f $out/bin/$(basename $f)
+        fi
+      fi
+    done
+  '';
+
+  meta = with lib;{
+    description = "General Algebraic Modeling System";
+    longDescription = ''
+      The General Algebraic Modeling System is a high-level modeling system for mathematical optimization.
+      GAMS is designed for modeling and solving linear, nonlinear, and mixed-integer optimization problems.
+    '';
+    homepage = "https://www.gams.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.Scriptkiddi ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/gaphor/default.nix b/nixpkgs/pkgs/tools/misc/gaphor/default.nix
new file mode 100644
index 000000000000..48f9fa7a7bba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gaphor/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, copyDesktopItems
+, gobject-introspection
+, poetry-core
+, wrapGAppsHook
+, gtksourceview4
+, pango
+, gaphas
+, generic
+, jedi
+, pycairo
+, pygobject3
+, tinycss2
+, gtk3
+, librsvg
+, makeDesktopItem
+, python
+}:
+
+buildPythonApplication rec {
+  pname = "gaphor";
+  version = "2.8.2";
+
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-+qqsSLjdY2I19fxdfkOEQ9DhTTHccUDll4O5yqtLiz0=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    gobject-introspection
+    poetry-core
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtksourceview4
+    pango
+  ];
+
+  propagatedBuildInputs = [
+    gaphas
+    generic
+    jedi
+    pycairo
+    pygobject3
+    tinycss2
+  ];
+
+  desktopItems = makeDesktopItem {
+    name = pname;
+    exec = "gaphor";
+    icon = "gaphor";
+    comment = meta.description;
+    desktopName = "Gaphor";
+  };
+
+  # Disable automatic wrapGAppsHook to prevent double wrapping
+  dontWrapGApps = true;
+
+  postInstall = ''
+    install -Dm644 $out/${python.sitePackages}/gaphor/ui/icons/hicolor/scalable/apps/org.gaphor.Gaphor.svg $out/share/pixmaps/gaphor.svg
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}" \
+      --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+      --set GDK_PIXBUF_MODULE_FILE "${librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache"
+    )
+  '';
+
+  meta = with lib; {
+    description = "Simple modeling tool written in Python";
+    maintainers = with maintainers; [ wolfangaukang ];
+    homepage = "https://github.com/gaphor/gaphor";
+    license = licenses.asl20;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gavin-bc/default.nix b/nixpkgs/pkgs/tools/misc/gavin-bc/default.nix
new file mode 100644
index 000000000000..ad8364d41ce4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gavin-bc/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitea
+, editline
+, readline
+, historyType ? "internal"
+, predefinedBuildType ? "BSD"
+}:
+
+assert lib.elem historyType [ "editline" "readline" "internal" ];
+assert lib.elem predefinedBuildType [ "BSD" "GNU" "GDH" "DBG" "" ];
+stdenv.mkDerivation (finalAttrs: {
+  pname = "gavin-bc";
+  version = "6.5.0";
+
+  src = fetchFromGitea {
+    domain = "git.gavinhoward.com";
+    owner = "gavin";
+    repo = "bc";
+    rev = finalAttrs.version;
+    hash = "sha256-V0L5OmpcI0Zu5JvESjuhp4wEs5Bu/CvjF6B5WllTEqo=";
+  };
+
+  buildInputs =
+    (lib.optional (historyType == "editline") editline)
+    ++ (lib.optional (historyType == "readline") readline);
+
+  configureFlags = [
+    "--disable-nls"
+  ]
+  ++ (lib.optional (predefinedBuildType != "") "--predefined-build-type=${predefinedBuildType}")
+  ++ (lib.optional (historyType == "editline") "--enable-editline")
+  ++ (lib.optional (historyType == "readline") "--enable-readline")
+  ++ (lib.optional (historyType == "internal") "--enable-internal-history");
+
+  meta = {
+    homepage = "https://git.gavinhoward.com/gavin/bc";
+    description = "Gavin Howard's BC calculator implementation";
+    changelog = "https://git.gavinhoward.com/gavin/bc/raw/tag/${finalAttrs.version}/NEWS.md";
+    license = lib.licenses.bsd2;
+    maintainers = [ lib.maintainers.AndersonTorres ];
+    platforms = lib.platforms.unix;
+    broken = stdenv.isDarwin;
+  };
+})
+# TODO: cover most of configure settings
diff --git a/nixpkgs/pkgs/tools/misc/gay/default.nix b/nixpkgs/pkgs/tools/misc/gay/default.nix
new file mode 100644
index 000000000000..d1129702f867
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gay/default.nix
@@ -0,0 +1,22 @@
+{ lib,
+  python3,
+  fetchPypi,
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gay";
+  version = "1.2.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-x+RVVgQvJwV5j7DLYS7AnXb4OMJ4v+l0awUuonQIgzY=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/ms-jpq/gay";
+    description = "Colour your text / terminal to be more gay";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres CodeLongAndProsper90 ];
+    mainProgram = "gay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gazelle-origin/default.nix b/nixpkgs/pkgs/tools/misc/gazelle-origin/default.nix
new file mode 100644
index 000000000000..924c0ba8df7b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gazelle-origin/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, bencoder
+, pyyaml
+, requests
+}:
+buildPythonApplication rec {
+  pname = "gazelle-origin";
+  version = "3.0.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    # Use the spinfast319 fork, since it seems that upstream
+    # at <https://github.com/x1ppy/gazelle-origin> is inactive
+    owner = "spinfast319";
+    rev = version;
+    hash = "sha256-+yMKnfG2f+A1/MxSBFLaHfpCgI2m968iXqt+2QanM/c=";
+  };
+
+  propagatedBuildInputs = [
+    bencoder
+    pyyaml
+    requests
+  ];
+
+  pythonImportsCheck = [ "gazelleorigin" ];
+
+  meta = with lib; {
+    description = "Tool for generating origin files using the API of Gazelle-based torrent trackers";
+    homepage = "https://github.com/spinfast319/gazelle-origin";
+    # TODO license is unspecified in the upstream, as well as the fork
+    license = licenses.unfree;
+    maintainers = with maintainers; [ somasis ];
+    mainProgram = "gazelle-origin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch b/nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch
new file mode 100644
index 000000000000..9c437deca07c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch
@@ -0,0 +1,15 @@
+diff --git "a/Makefile.in" "b/Makefile.in"
+index b482958..472b8da 100644
+--- "a/Makefile.in"
++++ "b/Makefile.in"
+@@ -27,9 +27,7 @@ MKINSTALLDIRS = ./mkinstalldirs
+ CC = @CC@
+ CFLAGS = @XX_CFLAGS@ @CFLAGS@
+ 
+-DEFINES = @DEFINES@ -DG_DISABLE_DEPRECATED \
+-	-DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED \
+-	-DGTK_DISABLE_DEPRECATED
++DEFINES = @DEFINES@
+ 
+ SRCS = bdf.c \
+        bdfcons.c \
diff --git a/nixpkgs/pkgs/tools/misc/gbdfed/default.nix b/nixpkgs/pkgs/tools/misc/gbdfed/default.nix
new file mode 100644
index 000000000000..0d709117b924
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gbdfed/default.nix
@@ -0,0 +1,33 @@
+ { lib, stdenv, fetchurl, pkg-config, freetype, gtk }:
+
+stdenv.mkDerivation rec {
+  version = "1.6";
+  pname = "gbdfed";
+
+  src = fetchurl {
+    url = "http://sofia.nmsu.edu/~mleisher/Software/gbdfed/${pname}-${version}.tar.bz2";
+    sha256 = "0g09k6wim58hngxncq2brr7mwjm92j3famp0vs4b3p48wr65vcjx";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ freetype gtk ];
+
+  patches = [ ./Makefile.patch ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "Bitmap Font Editor";
+    longDescription = ''
+      gbdfed lets you interactively create new bitmap font files or modify existing ones.
+      It allows editing multiple fonts and multiple glyphs,
+      it allows cut and paste operations between fonts and glyphs and editing font properties.
+      The editor works natively with BDF fonts.
+    '';
+    homepage = "http://sofia.nmsu.edu/~mleisher/Software/gbdfed/";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.linquize ];
+    platforms = lib.platforms.all;
+    mainProgram = "gbdfed";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/geekbench/4.nix b/nixpkgs/pkgs/tools/misc/geekbench/4.nix
new file mode 100644
index 000000000000..789f92babf80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/geekbench/4.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, addOpenGLRunpath
+, makeWrapper
+, ocl-icd
+, vulkan-loader
+}:
+
+stdenv.mkDerivation rec {
+  pname = "geekbench";
+  version = "4.4.4";
+
+  src = fetchurl {
+    url = "https://cdn.geekbench.com/Geekbench-${version}-Linux.tar.gz";
+    sha256 = "sha256-KVsBE0ueWewmoVY/vzxX2sKhRTzityPNR+wmTwZBWiI=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
+  buildInputs = [ stdenv.cc.cc ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r geekbench.plar geekbench4 geekbench_x86_64 $out/bin
+
+    for f in geekbench4 geekbench_x86_64 ; do
+      wrapProgram $out/bin/$f \
+        --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
+          addOpenGLRunpath.driverLink
+          ocl-icd
+          vulkan-loader
+       ]}"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform benchmark";
+    homepage = "https://geekbench.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.michalrus ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "geekbench4";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/geekbench/5.nix b/nixpkgs/pkgs/tools/misc/geekbench/5.nix
new file mode 100644
index 000000000000..7784b3632a73
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/geekbench/5.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, addOpenGLRunpath
+, makeWrapper
+, ocl-icd
+, vulkan-loader
+}:
+
+let
+  inherit (stdenv.hostPlatform.uname) processor;
+  version = "5.5.1";
+  sources = {
+    "x86_64-linux" = {
+      url = "https://cdn.geekbench.com/Geekbench-${version}-Linux.tar.gz";
+      hash = "sha256-MgN+VcPcjzYP4Wt/uxiNMTh+p1mA5I2M8CgzDjI5xAQ=";
+    };
+    "aarch64-linux" = {
+      url = "https://cdn.geekbench.com/Geekbench-${version}-LinuxARMPreview.tar.gz";
+      hash = "sha256-nrPKnsMqvw6+HGQAKxkQi/6lPEEca1VrDCaJUUuMvW8=";
+    };
+  };
+in
+stdenv.mkDerivation {
+  inherit version;
+  pname = "geekbench";
+
+  src = fetchurl (sources.${stdenv.system});
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
+
+  buildInputs = [ stdenv.cc.cc.lib ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r geekbench.plar geekbench5 geekbench_${processor} $out/bin
+
+    for f in geekbench5 geekbench_${processor} ; do
+      wrapProgram $out/bin/$f \
+        --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
+          addOpenGLRunpath.driverLink
+          ocl-icd
+          vulkan-loader
+       ]}"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform benchmark";
+    homepage = "https://geekbench.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.michalrus ];
+    platforms = builtins.attrNames sources;
+    mainProgram = "geekbench5";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/geekbench/6.nix b/nixpkgs/pkgs/tools/misc/geekbench/6.nix
new file mode 100644
index 000000000000..4ac5f1d0e49a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/geekbench/6.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, addOpenGLRunpath
+, makeWrapper
+, ocl-icd
+, vulkan-loader
+}:
+
+let
+  inherit (stdenv.hostPlatform.uname) processor;
+  version = "6.2.0";
+  sources = {
+    "x86_64-linux" = {
+      url = "https://cdn.geekbench.com/Geekbench-${version}-Linux.tar.gz";
+      hash = "sha256-QoxSw825qqx1vzhzW9TZg03BPNvgOCokBWARGUhjCGY=";
+    };
+    "aarch64-linux" = {
+      url = "https://cdn.geekbench.com/Geekbench-${version}-LinuxARMPreview.tar.gz";
+      hash = "sha256-m2uz5Rk34rm9Bx3j5FjFigOIKaj2c4I+uXKzU4cK4D4=";
+    };
+  };
+  geekbench_avx2 = lib.optionalString stdenv.isx86_64 "geekbench_avx2";
+in
+stdenv.mkDerivation {
+  inherit version;
+  pname = "geekbench";
+
+  src = fetchurl (sources.${stdenv.system});
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
+
+  buildInputs = [ stdenv.cc.cc.lib ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r geekbench.plar geekbench-workload.plar geekbench6 geekbench_${processor} ${geekbench_avx2} $out/bin
+
+    for f in geekbench6 geekbench_${processor} ${geekbench_avx2} ; do
+      wrapProgram $out/bin/$f \
+        --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
+          addOpenGLRunpath.driverLink
+          ocl-icd
+          vulkan-loader
+        ]}"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform benchmark";
+    homepage = "https://geekbench.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.michalrus ];
+    platforms = builtins.attrNames sources;
+    mainProgram = "geekbench6";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/geteltorito/default.nix b/nixpkgs/pkgs/tools/misc/geteltorito/default.nix
new file mode 100644
index 000000000000..5fb2209ee8c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/geteltorito/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, perl, ronn, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "geteltorito";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://userpages.uni-koblenz.de/~krienke/ftp/noarch/geteltorito/geteltorito-${version}.tar.gz";
+    sha256 = "1gkbm9ahj2mgqrkrfpibzclsriqgsbsvjh19fr815vpd9f6snkxv";
+  };
+
+  buildInputs = [ perl ronn ];
+
+  unpackCmd = "";
+  dontBuild = true;
+  configurePhase = "";
+  installPhase = ''
+    # reformat README to ronn markdown
+    cat > README.new <<EOF
+    geteltorito -- ${meta.description}
+    ===========
+
+    ## SYNOPSIS
+
+    EOF
+
+    # skip the first two lines
+    # -e reformat function call
+    # -e reformat example
+    # -e make everything else (that is no code) that contains `: ` a list item
+    tail -n +3 README | sed \
+        -e 's/^\(call:\s*\)\(getelt.*\)$/\1`\2`/' \
+        -e 's/^\(example:\s*\)\(getelt.*\)$/\1 `\2`/' \
+        -e 's/^\(.*: \)/- \1/g' \
+           >> README.new
+    mkdir -p $out/man/man1
+    ronn --roff README.new --pipe > $out/man/man1/geteltorito.1
+    install -vD geteltorito $out/bin/geteltorito
+  '';
+
+  meta = with lib; {
+    description = "Extract the initial/default boot image from a CD image if existent";
+    homepage = "https://userpages.uni-koblenz.de/~krienke/ftp/noarch/geteltorito/";
+    maintainers = [ maintainers.Profpatsch ];
+    license = licenses.gpl2;
+    mainProgram = "geteltorito";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/getopt/default.nix b/nixpkgs/pkgs/tools/misc/getopt/default.nix
new file mode 100644
index 000000000000..6b6cbf66b13f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/getopt/default.nix
@@ -0,0 +1,28 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "getopt";
+  version = "1.1.6";
+  src = fetchurl {
+    url = "http://frodo.looijaard.name/system/files/software/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1zn5kp8ar853rin0ay2j3p17blxy16agpp8wi8wfg4x98b31vgyh";
+  };
+
+  # This should be fine on Linux and Darwin. Clang 16 requires it because otherwise getopt will
+  # attempt to use C library functions without declaring them, which is raised as an error.
+  env.NIX_CFLAGS_COMPILE = "-D__GNU_LIBRARY__";
+
+  makeFlags = [
+    "WITHOUT_GETTEXT=1"
+    "LIBCGETOPT=0"
+    "prefix=${placeholder "out"}"
+    "CC:=$(CC)"
+  ];
+
+  meta = {
+    platforms = lib.platforms.unix;
+    homepage = "http://frodo.looijaard.name/project/getopt";
+    description = "Parses command-line arguments from shell scripts";
+    mainProgram = "getopt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/getoptions/default.nix b/nixpkgs/pkgs/tools/misc/getoptions/default.nix
new file mode 100644
index 000000000000..9860430515e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/getoptions/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenvNoCC, fetchFromGitHub, shellspec, busybox-sandbox-shell, ksh, mksh, yash, zsh }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "getoptions";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "ko1nksm";
+    repo = "getoptions";
+    rev = "v${version}";
+    hash = "sha256-kUQ0dPjPr/A/btgFQu13ZLklnI284Ij74hCYbGgzF3A=";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  doCheck = true;
+
+  nativeCheckInputs = [ shellspec ksh mksh yash zsh ]
+    ++ lib.lists.optional (!stdenvNoCC.isDarwin) busybox-sandbox-shell;
+
+  # Disable checks against yash, since shellspec seems to be broken for yash>=2.54
+  # (see: https://github.com/NixOS/nixpkgs/pull/218264#pullrequestreview-1434402054)
+  preCheck = ''
+    sed -i '/shellspec -s posh/d' Makefile
+    sed -i '/shellspec -s yash/d' Makefile
+    '' + lib.strings.optionalString stdenvNoCC.isDarwin ''
+    sed -i "/shellspec -s 'busybox ash'/d" Makefile
+  '';
+
+  checkTarget = "testall";
+
+  meta = with lib; {
+    description = "An elegant option/argument parser for shell scripts (full support for bash and all POSIX shells)";
+    homepage = "https://github.com/ko1nksm/getoptions";
+    license = licenses.cc0;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ matrss ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-actions-cache/default.nix b/nixpkgs/pkgs/tools/misc/gh-actions-cache/default.nix
new file mode 100644
index 000000000000..2575beabf82a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-actions-cache/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "gh-actions-cache";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "actions";
+    repo = "gh-actions-cache";
+    rev = "v${version}";
+    hash = "sha256-GVha3xxLTBTiKfAjGb2q9btsGYzWQivGLyZ4Gg0s/N0=";
+  };
+
+  vendorHash = "sha256-4/Zt+ga3abEPtR0FjWIsDpOiG1bfVtVuLuXP8aHbzqk=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  # Needed for tests.
+  # https://github.com/actions/gh-actions-cache/issues/53#issuecomment-1464954495
+  env.GH_TOKEN = "dummy-token-to-facilitate-rest-client";
+
+  meta = {
+    description = "gh extension to manage GitHub Actions caches";
+    homepage = "https://github.com/actions/gh-actions-cache";
+    changelog = "https://github.com/actions/gh-actions-cache/releases/tag/${src.rev}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ amesgen ];
+    mainProgram = "gh-actions-cache";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-cal/default.nix b/nixpkgs/pkgs/tools/misc/gh-cal/default.nix
new file mode 100644
index 000000000000..98334e0afd55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-cal/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, pkg-config
+, openssl
+, Security
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "gh-cal";
+  version = "0.1.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-x9DekflZoXxH964isWCi6YuV3v/iIyYOuRYVgKaUBx0=";
+  };
+
+  cargoSha256 = "sha256-73gqk0DjhaLGIEP5VQQlubPomxHQyg4RnY5XTgE7msQ=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "GitHub contributions calender terminal viewer";
+    homepage = "https://github.com/mrshmllow/gh-cal";
+    license = licenses.mit;
+    maintainers = with maintainers; [ loicreynier ];
+    mainProgram = "gh-cal";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-dash/default.nix b/nixpkgs/pkgs/tools/misc/gh-dash/default.nix
new file mode 100644
index 000000000000..e56d53ec8ed0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-dash/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, testers
+, gh-dash
+}:
+
+buildGoModule rec {
+  pname = "gh-dash";
+  version = "3.13.1";
+
+  src = fetchFromGitHub {
+    owner = "dlvhdr";
+    repo = "gh-dash";
+    rev = "v${version}";
+    hash = "sha256-zITrwGklEcC3QsPGfx+ymVu1QBg96Q9aJIXR2x2e2LQ=";
+  };
+
+  vendorHash = "sha256-jCf9FWAhZK5hTzyy8N4r5dfUYTgESmsn8iKxCccgWiM=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/dlvhdr/gh-dash/cmd.Version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion { package = gh-dash; };
+  };
+
+  meta = {
+    changelog = "https://github.com/dlvhdr/gh-dash/releases/tag/${src.rev}";
+    description = "Github Cli extension to display a dashboard with pull requests and issues";
+    homepage = "https://github.com/dlvhdr/gh-dash";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ amesgen ];
+    mainProgram = "gh-dash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-eco/default.nix b/nixpkgs/pkgs/tools/misc/gh-eco/default.nix
new file mode 100644
index 000000000000..329ef60c1b4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-eco/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "gh-eco";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "coloradocolby";
+    repo = "gh-eco";
+    rev = "v${version}";
+    sha256 = "sha256-TE1AymNlxjUtkBnBO/VBjYaqLuRyxL75s6sMidKUXTE=";
+  };
+
+  vendorHash = "sha256-K85fYV1uP/qSw8GPoG1u6UQo94vQOUo4cd9Ro+UApQ0=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/coloradocolby/gh-eco";
+    description = "gh extension to explore the ecosystem";
+    license = licenses.mit;
+    maintainers = with maintainers; [ helium ];
+    mainProgram = "gh-eco";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/gh-markdown-preview/default.nix b/nixpkgs/pkgs/tools/misc/gh-markdown-preview/default.nix
new file mode 100644
index 000000000000..68f041dbbf2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-markdown-preview/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, gh-markdown-preview
+, testers
+}:
+
+buildGoModule rec {
+  pname = "gh-markdown-preview";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "yusukebe";
+    repo = "gh-markdown-preview";
+    rev = "v${version}";
+    hash = "sha256-UBveXL4/3GxxIVjqG0GuTbkGkzXFc/stew2s+dTj9BI=";
+  };
+
+  vendorHash = "sha256-O6Q9h5zcYAoKLjuzGu7f7UZY0Y5rL2INqFyJT2QZJ/E=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/yusukebe/gh-markdown-preview/cmd.Version=${version}"
+  ];
+
+  # Tests need network
+  doCheck = false;
+
+  passthru.tests = {
+    version = testers.testVersion { package = gh-markdown-preview; };
+  };
+
+  meta = {
+    description = "gh extension to preview Markdown looking like on GitHub";
+    homepage = "https://github.com/yusukebe/gh-markdown-preview";
+    changelog = "https://github.com/yusukebe/gh-markdown-preview/releases/tag/${src.rev}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ amesgen ];
+    mainProgram = "gh-markdown-preview";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-ost/default.nix b/nixpkgs/pkgs/tools/misc/gh-ost/default.nix
new file mode 100644
index 000000000000..91798cfae8c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-ost/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, gh-ost }:
+
+buildGoModule rec {
+  pname = "gh-ost";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "github";
+    repo = "gh-ost";
+    rev = "v${version}";
+    hash = "sha256-dTz4w+OJXe2+ygsYsQ9tanDyaMXvdh8W3d8xpjQMapI=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.AppVersion=${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = gh-ost;
+  };
+
+  meta = with lib; {
+    description = "Triggerless online schema migration solution for MySQL";
+    homepage = "https://github.com/github/gh-ost";
+    license = licenses.mit;
+    mainProgram = "gh-ost";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ghostie/Cargo.lock b/nixpkgs/pkgs/tools/misc/ghostie/Cargo.lock
new file mode 100644
index 000000000000..8e696d2b3c72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ghostie/Cargo.lock
@@ -0,0 +1,2665 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
+
+[[package]]
+name = "async-attributes"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-broadcast"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d26004fe83b2d1cd3a97609b21e39f9a31535822210fe83205d2ce48866ea61"
+dependencies = [
+ "event-listener",
+ "futures-core",
+ "parking_lot",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28"
+dependencies = [
+ "concurrent-queue 1.2.4",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue 2.0.0",
+ "fastrand",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+ "tokio",
+]
+
+[[package]]
+name = "async-io"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "concurrent-queue 2.0.0",
+ "futures-lite",
+ "libc",
+ "log",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685"
+dependencies = [
+ "event-listener",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-recursion"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-attributes",
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524"
+
+[[package]]
+name = "async-trait"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "blocking"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc"
+dependencies = [
+ "async-channel",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "boxfnonce"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5988cb1d626264ac94100be357308f29ff7cbdd3b36bda27f450a4ee3f713426"
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
+
+[[package]]
+name = "cache-padded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cc"
+version = "1.0.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
+dependencies = [
+ "heck 0.4.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clokwerk"
+version = "0.4.0-rc1"
+source = "git+https://github.com/attriaayush/clokwerk#f8180dfe64a98d39a5cded998998a3df8809b92c"
+dependencies = [
+ "chrono",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "1.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c"
+dependencies = [
+ "cache-padded",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd7bef69dc86e3c610e4e7aed41035e2a7ed12e72dd7530f61327a6579a4390b"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "console"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c050367d967ced717c04b65d8c619d863ef9292ce0c5760028655a2fb298718c"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "terminal_size",
+ "unicode-width",
+ "winapi",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.7.1",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4a41a86530d0fe7f5d9ea779916b7cadd2d4f9add748b99c2c029cbbdfaf453"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06416d667ff3e3ad2df1cd8cd8afae5da26cf9cec4d0825040f88b5ca659a2f0"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "820a9a2af1669deeef27cb271f476ffd196a2c4b6731336011e0ba63e2c7cf71"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08a6e2fcc370a089ad3b4aaf54db3b1b4cee38ddabce5896b33eb693275f470"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "daemonize"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70c24513e34f53b640819f0ac9f705b673fcf4006d7aab8778bee72ebfc89815"
+dependencies = [
+ "boxfnonce",
+ "libc",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"
+dependencies = [
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dialoguer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92e7e37ecef6857fdc0c0c5d42fd5b0938e46590c2183cc92dd310a6d078eb1"
+dependencies = [
+ "console",
+ "tempfile",
+ "zeroize",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "either"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb"
+dependencies = [
+ "enumflags2_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fake"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d68f517805463f3a896a9d29c1d6ff09d3579ded64a7201b4069f8f9c0d52fd"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+
+[[package]]
+name = "fastrand"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
+
+[[package]]
+name = "futures-task"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
+
+[[package]]
+name = "futures-util"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "ghostie"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-std",
+ "cfg-if",
+ "chrono",
+ "clap",
+ "clokwerk",
+ "crossterm",
+ "daemonize",
+ "dialoguer",
+ "dirs",
+ "fake",
+ "futures",
+ "lazy_static",
+ "notify-rust",
+ "open",
+ "opener",
+ "rand",
+ "regex",
+ "reqwest",
+ "rusqlite",
+ "serde",
+ "serde_json",
+ "serial_test",
+ "sysinfo",
+ "thiserror",
+ "tui",
+ "which",
+]
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"
+dependencies = [
+ "hashbrown",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f88c5561171189e69df9d98bcf18fd5f9558300f7ea7b801eb8a0fd748bd8745"
+
+[[package]]
+name = "itoa"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+
+[[package]]
+name = "js-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"
+dependencies = [
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+ "value-bag",
+]
+
+[[package]]
+name = "mac-notification-sys"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5"
+dependencies = [
+ "cc",
+ "dirs-next",
+ "objc-foundation",
+ "objc_id",
+ "time",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mio"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "notify-rust"
+version = "4.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368e89ea58df747ce88be669ae44e79783c1d30bfd540ad0fc520b3f41f0b3b0"
+dependencies = [
+ "mac-notification-sys",
+ "serde",
+ "tauri-winrt-notification",
+ "zbus",
+ "zvariant",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc51db7b362b205941f71232e56c625156eb9a929f8cf74a428fd5bc094a4afc"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
+
+[[package]]
+name = "open"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8"
+dependencies = [
+ "pathdiff",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "opener"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea3ebcd72a54701f56345f16785a6d3ac2df7e986d273eb4395c0b01db17952"
+dependencies = [
+ "bstr",
+ "winapi",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b03b84c3b2d099b81f0953422b4d4ad58761589d0229b5506356afca05a3670a"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-stream"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44630c059eacfd6e08bdaa51b1db2ce33119caa4ddc1235e923109aa5f25ccb1"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "polling"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab4609a838d88b73d8238967b60dd115cc08d38e2bbaf51ee1e4b695f89122e2"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "libc",
+ "log",
+ "wepoll-ffi",
+ "winapi",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
+dependencies = [
+ "once_cell",
+ "thiserror",
+ "toml",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b"
+dependencies = [
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rusqlite"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"
+dependencies = [
+ "bitflags",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "smallvec",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
+
+[[package]]
+name = "security-framework"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serial_test"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92761393ee4dc3ff8f4af487bd58f4307c9329bbedea02cac0089ad9c411e153"
+dependencies = [
+ "dashmap",
+ "futures",
+ "lazy_static",
+ "log",
+ "parking_lot",
+ "serial_test_derive",
+]
+
+[[package]]
+name = "serial_test_derive"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b6f5d1c3087fb119617cff2966fe3808a80e5eb59a8c1601d5994d66f4346a5"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+dependencies = [
+ "sha1_smol",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sysinfo"
+version = "0.26.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c375d5fd899e32847b8566e10598d6e9f1d9b55ec6de3cdf9e7da4bdc51371bc"
+dependencies = [
+ "cfg-if",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "tauri-winrt-notification"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b"
+dependencies = [
+ "quick-xml",
+ "strum",
+ "windows",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "time"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
+dependencies = [
+ "serde",
+ "time-core",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "1.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "tui"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1"
+dependencies = [
+ "bitflags",
+ "cassowary",
+ "crossterm",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "uds_windows"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+dependencies = [
+ "tempfile",
+ "winapi",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
+dependencies = [
+ "ctor",
+ "version_check",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "wepoll-ffi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "which"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b55551e42cbdf2ce2bedd2203d0cc08dba002c27510f86dab6d0ce304cba3dfe"
+dependencies = [
+ "either",
+ "libc",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
+dependencies = [
+ "windows_aarch64_msvc 0.39.0",
+ "windows_i686_gnu 0.39.0",
+ "windows_i686_msvc 0.39.0",
+ "windows_x86_64_gnu 0.39.0",
+ "windows_x86_64_msvc 0.39.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc 0.42.0",
+ "windows_i686_gnu 0.42.0",
+ "windows_i686_msvc 0.42.0",
+ "windows_x86_64_gnu 0.42.0",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc 0.42.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "zbus"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d8f1a037b2c4a67d9654dc7bdfa8ff2e80555bbefdd3c1833c1d1b27c963a6b"
+dependencies = [
+ "async-broadcast",
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "async-recursion",
+ "async-task",
+ "async-trait",
+ "byteorder",
+ "derivative",
+ "dirs",
+ "enumflags2",
+ "event-listener",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hex",
+ "lazy_static",
+ "nix",
+ "once_cell",
+ "ordered-stream",
+ "rand",
+ "serde",
+ "serde_repr",
+ "sha1",
+ "static_assertions",
+ "tracing",
+ "uds_windows",
+ "winapi",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f8fb5186d1c87ae88cf234974c240671238b4a679158ad3b94ec465237349a6"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn",
+]
+
+[[package]]
+name = "zbus_names"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f34f314916bd89bdb9934154627fab152f4f28acdda03e7c4c68181b214fe7e3"
+dependencies = [
+ "serde",
+ "static_assertions",
+ "zvariant",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
+
+[[package]]
+name = "zvariant"
+version = "3.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "576cc41e65c7f283e5460f5818073e68fb1f1631502b969ef228c2e03c862efb"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fd4aafc0dee96ae7242a24249ce9babf21e1562822f03df650d4e68c20e41ed"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/nixpkgs/pkgs/tools/misc/ghostie/default.nix b/nixpkgs/pkgs/tools/misc/ghostie/default.nix
new file mode 100644
index 000000000000..0a4e1cb695e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ghostie/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, sqlite
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ghostie";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "attriaayush";
+    repo = "ghostie";
+    rev = "v${version}";
+    sha256 = "sha256-lEjJLmBA3dlIVxc8E+UvR7u154QGeCfEbxdgUxAS3Cw=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "clokwerk-0.4.0-rc1" = "sha256-GQDWEN2arDDRu2ft8QYdXsNhBEIhBNZTnLoLy27cbAI=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+    sqlite
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Cocoa
+  ];
+
+  # 4 out of 5 tests are notification tests which do not work in nix builds
+  doCheck = false;
+
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "Github notifications in your terminal";
+    homepage = "https://github.com/attriaayush/ghostie";
+    changelog = "https://github.com/attriaayush/ghostie/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    broken = stdenv.isx86_64 && stdenv.isDarwin;
+    mainProgram = "ghostie";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gibo/default.nix b/nixpkgs/pkgs/tools/misc/gibo/default.nix
new file mode 100644
index 000000000000..edd166f00f56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gibo/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, coreutils, findutils, git }:
+
+stdenv.mkDerivation rec {
+  pname = "gibo";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "simonwhitaker";
+    repo = "gibo";
+    rev = version;
+    sha256 = "07j3sv9ar9l074krajw8nfmsfmdp836irsbd053dbqk2v880gfm6";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/bash-completion/completions
+    cp gibo $out/bin
+    cp gibo-completion.bash $out/share/bash-completion/completions
+
+    sed -e 's|\<git |${git}/bin/git |g' \
+        -e 's|\<basename |${coreutils}/bin/basename |g' \
+        -i "$out/bin/gibo"
+    sed -e 's|\<find |${findutils}/bin/find |g' \
+        -i "$out/share/bash-completion/completions/gibo-completion.bash"
+  '';
+
+  meta = {
+    homepage = "https://github.com/simonwhitaker/gibo";
+    license = lib.licenses.publicDomain;
+    description = "A shell script for easily accessing gitignore boilerplates";
+    platforms = lib.platforms.unix;
+    mainProgram = "gibo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix b/nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix
new file mode 100644
index 000000000000..3a2ad84a4430
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3Packages
+, ffmpeg
+, zlib
+, libjpeg
+}:
+
+python3Packages.buildPythonApplication {
+  pname = "gif-for-cli";
+  version = "1.1.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "gif-for-cli";
+    rev = "31f8aa2d617d6d6e941154f60e287c38dd9a74d5";
+    hash = "sha256-Bl5o492BUAn1KsscnlMIXCzJuy7xWUsdnxIKZKaRM3M=";
+  };
+
+  patches = [
+    # https://github.com/google/gif-for-cli/pull/36
+    (fetchpatch {
+      name = "pillow-10-compatibility.patch";
+      url = "https://github.com/google/gif-for-cli/commit/49b13ec981e197cbc10f920b7b25a97c4cc6a61c.patch";
+      hash = "sha256-B8wfkdhSUY++St6DzgaJ1xF1mZKvi8oxLXbo63yemDM=";
+    })
+  ];
+
+  # coverage is not needed to build and test this package
+  postPatch = ''
+    sed -i '/coverage>=/d' setup.py
+  '';
+
+  buildInputs = [
+    zlib
+    libjpeg
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    ffmpeg
+    pillow
+    requests
+    x256
+  ];
+
+  meta = with lib; {
+    description = "Render gifs as ASCII art in your cli";
+    longDescription = "Takes in a GIF, short video, or a query to the Tenor GIF API and converts it to animated ASCII art.";
+    homepage = "https://github.com/google/gif-for-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Scriptkiddi ];
+    mainProgram = "gif-for-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gigalixir/default.nix b/nixpkgs/pkgs/tools/misc/gigalixir/default.nix
new file mode 100644
index 000000000000..b700d1b70059
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gigalixir/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, python3
+, fetchPypi
+, git
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gigalixir";
+  version = "1.10.0";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-yIf8a54vA/1q5qhaWsrrROB1IB7X5f/KMoryPew4tAI=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "'pytest-runner'," "" \
+      --replace "cryptography==" "cryptography>="
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    pygments
+    pyopenssl
+    qrcode
+    requests
+    rollbar
+    stripe
+  ];
+
+  nativeCheckInputs = [
+    git
+  ] ++ (with python3.pkgs; [
+    httpretty
+    pytestCheckHook
+    sure
+  ]);
+
+  disabledTests = [
+    # Test requires network access
+    "test_rollback_without_version"
+    # These following test's are now depraced and removed, check out these commits:
+    # https://github.com/gigalixir/gigalixir-cli/commit/00b758ed462ad8eff6ff0b16cd37fa71f75b2d7d
+    # https://github.com/gigalixir/gigalixir-cli/commit/76fa25f96e71fd75cc22e5439b4a8f9e9ec4e3e5
+    "test_create_config"
+    "test_delete_free_database"
+    "test_get_free_databases"
+  ];
+
+  pythonImportsCheck = [
+    "gigalixir"
+  ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Gigalixir Command-Line Interface";
+    homepage = "https://github.com/gigalixir/gigalixir-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "gigalixir";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/github-backup/default.nix b/nixpkgs/pkgs/tools/misc/github-backup/default.nix
new file mode 100644
index 000000000000..4f57b084ba60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/github-backup/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3
+, fetchPypi
+, git
+, git-lfs
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "github-backup";
+  version = "0.45.0";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-bT5eqhpSK9u6Q4hO8FTgbpjjv0x2am1m2fOw5OqxixQ=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ git git-lfs ])
+  ];
+
+  # has no unit tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Backup a github user or organization";
+    homepage = "https://github.com/josegonzalez/python-github-backup";
+    changelog = "https://github.com/josegonzalez/python-github-backup/blob/${version}/CHANGES.rst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+    mainProgram = "github-backup";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/github-copilot-cli/default.nix b/nixpkgs/pkgs/tools/misc/github-copilot-cli/default.nix
new file mode 100644
index 000000000000..644f3f983b8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/github-copilot-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildNpmPackage, fetchzip }:
+
+buildNpmPackage rec {
+  pname = "github-copilot-cli";
+  version = "0.1.36";
+
+  src = fetchzip {
+    url = "https://registry.npmjs.org/@githubnext/${pname}/-/${pname}-${version}.tgz";
+    hash = "sha256-7n+7sN61OrqMVGaKll85+HwX7iGG9M/UW5lf2Pd5sRU=";
+  };
+
+  npmDepsHash = "sha256-h0StxzGbl3ZeOQ4Jy1BgJ5sJ0pAbubMCRsiIOYpU04w=";
+
+  postPatch = ''
+    cp ${./package-lock.json} package-lock.json
+  '';
+
+  dontNpmBuild = true;
+
+  meta = with lib; {
+    description = "A CLI experience for letting GitHub Copilot help you on the command line";
+    homepage = "https://githubnext.com/projects/copilot-cli/";
+    license = licenses.unfree; # upstream has no license
+    maintainers = [ maintainers.malo ];
+    platforms = platforms.all;
+    mainProgram = "github-copilot-cli";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/github-copilot-cli/package-lock.json b/nixpkgs/pkgs/tools/misc/github-copilot-cli/package-lock.json
new file mode 100644
index 000000000000..03bc0c1fc339
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/github-copilot-cli/package-lock.json
@@ -0,0 +1,3329 @@
+{
+  "name": "@githubnext/github-copilot-cli",
+  "version": "0.1.36",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "@githubnext/github-copilot-cli",
+      "version": "0.1.36",
+      "dependencies": {
+        "applicationinsights": "^2.9.1",
+        "axios": "^1.6.0",
+        "chalk": "^5.1.0",
+        "cli-highlight": "^2.1.11",
+        "commander": "^9.4.1",
+        "get-stream": "^6.0.1",
+        "immer": "^9.0.16",
+        "ink": "^3.2.0",
+        "ink-divider": "^3.0.0",
+        "ink-select-input": "^4.2.1",
+        "ink-spinner": "^4.0.3",
+        "ink-text-input": "^4.0.3",
+        "inquirer": "^9.1.4",
+        "marked": "^4.2.12",
+        "marked-terminal": "^5.1.1",
+        "ora": "^6.1.2",
+        "radash": "^9.1.0",
+        "react": "17",
+        "react-devtools-core": "^4.28.4",
+        "react-dom": "17",
+        "react-query": "^3.39.2",
+        "semver": "^5.7.2",
+        "simple-update-notifier": "^1.1.0",
+        "tiny-invariant": "^1.3.1",
+        "tough-cookie": "^4.1.3",
+        "ts-dedent": "^2.2.0",
+        "use-zustand": "^0.0.1",
+        "uuid": "^9.0.0",
+        "zustand": "^4.1.4"
+      },
+      "bin": {
+        "github-copilot-cli": "cli.js"
+      },
+      "devDependencies": {
+        "@types/inquirer": "^9.0.2",
+        "@types/node": "^18.8.3",
+        "@types/react": "^18.0.25",
+        "@types/uuid": "^8.3.4",
+        "esbuild": "^0.15.10",
+        "genversion": "^3.1.1",
+        "typescript": "^4.8.4"
+      }
+    },
+    "node_modules/@azure/abort-controller": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz",
+      "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==",
+      "dependencies": {
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/@azure/core-auth": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz",
+      "integrity": "sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==",
+      "dependencies": {
+        "@azure/abort-controller": "^1.0.0",
+        "@azure/core-util": "^1.1.0",
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@azure/core-rest-pipeline": {
+      "version": "1.10.1",
+      "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz",
+      "integrity": "sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA==",
+      "dependencies": {
+        "@azure/abort-controller": "^1.0.0",
+        "@azure/core-auth": "^1.4.0",
+        "@azure/core-tracing": "^1.0.1",
+        "@azure/core-util": "^1.0.0",
+        "@azure/logger": "^1.0.0",
+        "form-data": "^4.0.0",
+        "http-proxy-agent": "^5.0.0",
+        "https-proxy-agent": "^5.0.0",
+        "tslib": "^2.2.0",
+        "uuid": "^8.3.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@azure/core-rest-pipeline/node_modules/uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+      "bin": {
+        "uuid": "dist/bin/uuid"
+      }
+    },
+    "node_modules/@azure/core-tracing": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+      "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
+      "dependencies": {
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/@azure/core-util": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.2.0.tgz",
+      "integrity": "sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng==",
+      "dependencies": {
+        "@azure/abort-controller": "^1.0.0",
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@azure/logger": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz",
+      "integrity": "sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==",
+      "dependencies": {
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@azure/opentelemetry-instrumentation-azure-sdk": {
+      "version": "1.0.0-beta.5",
+      "resolved": "https://registry.npmjs.org/@azure/opentelemetry-instrumentation-azure-sdk/-/opentelemetry-instrumentation-azure-sdk-1.0.0-beta.5.tgz",
+      "integrity": "sha512-fsUarKQDvjhmBO4nIfaZkfNSApm1hZBzcvpNbSrXdcUBxu7lRvKsV5DnwszX7cnhLyVOW9yl1uigtRQ1yDANjA==",
+      "dependencies": {
+        "@azure/core-tracing": "^1.0.0",
+        "@azure/logger": "^1.0.0",
+        "@opentelemetry/api": "^1.4.1",
+        "@opentelemetry/core": "^1.15.2",
+        "@opentelemetry/instrumentation": "^0.41.2",
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@babel/runtime": {
+      "version": "7.23.8",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz",
+      "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==",
+      "dependencies": {
+        "regenerator-runtime": "^0.14.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@colors/colors": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
+      "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+      "optional": true,
+      "engines": {
+        "node": ">=0.1.90"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
+      "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
+      "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@ljharb/through": {
+      "version": "2.3.11",
+      "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.11.tgz",
+      "integrity": "sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==",
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/@microsoft/applicationinsights-web-snippet": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.0.1.tgz",
+      "integrity": "sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ=="
+    },
+    "node_modules/@opentelemetry/api": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz",
+      "integrity": "sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==",
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/@opentelemetry/core": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.20.0.tgz",
+      "integrity": "sha512-lSRvk5AIdD6CtgYJcJXh0wGibQ3S/8bC2qbqKs9wK8e0K1tsWV6YkGFOqVc+jIRlCbZoIBeZzDe5UI+vb94uvg==",
+      "dependencies": {
+        "@opentelemetry/semantic-conventions": "1.20.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": ">=1.0.0 <1.8.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation": {
+      "version": "0.41.2",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.41.2.tgz",
+      "integrity": "sha512-rxU72E0pKNH6ae2w5+xgVYZLzc5mlxAbGzF4shxMVK8YC2QQsfN38B2GPbj0jvrKWWNUElfclQ+YTykkNg/grw==",
+      "dependencies": {
+        "@types/shimmer": "^1.0.2",
+        "import-in-the-middle": "1.4.2",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.1",
+        "shimmer": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@opentelemetry/resources": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.20.0.tgz",
+      "integrity": "sha512-nOpV0vGegSq+9ze2cEDvO3BMA5pGBhmhKZiAlj+xQZjiEjPmJtdHIuBLRvptu2ahcbFJw85gIB9BYHZOvZK1JQ==",
+      "dependencies": {
+        "@opentelemetry/core": "1.20.0",
+        "@opentelemetry/semantic-conventions": "1.20.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": ">=1.0.0 <1.8.0"
+      }
+    },
+    "node_modules/@opentelemetry/sdk-trace-base": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.20.0.tgz",
+      "integrity": "sha512-BAIZ0hUgnhdb3OBQjn1FKGz/Iwie4l+uOMKklP7FGh7PTqEAbbzDNMJKaZQh6KepF7Fq+CZDRKslD3yrYy2Tzw==",
+      "dependencies": {
+        "@opentelemetry/core": "1.20.0",
+        "@opentelemetry/resources": "1.20.0",
+        "@opentelemetry/semantic-conventions": "1.20.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": ">=1.0.0 <1.8.0"
+      }
+    },
+    "node_modules/@opentelemetry/semantic-conventions": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.20.0.tgz",
+      "integrity": "sha512-3zLJJCgTKYpbqFX8drl8hOCHtdchELC+kGqlVcV4mHW1DiElTtv1Nt9EKBptTd1IfL56QkuYnWJ3DeHd2Gtu/A==",
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@tootallnate/once": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+      "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@types/inquirer": {
+      "version": "9.0.7",
+      "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.7.tgz",
+      "integrity": "sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==",
+      "dev": true,
+      "dependencies": {
+        "@types/through": "*",
+        "rxjs": "^7.2.0"
+      }
+    },
+    "node_modules/@types/node": {
+      "version": "18.19.8",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.8.tgz",
+      "integrity": "sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==",
+      "dev": true,
+      "dependencies": {
+        "undici-types": "~5.26.4"
+      }
+    },
+    "node_modules/@types/prop-types": {
+      "version": "15.7.11",
+      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
+      "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
+      "devOptional": true
+    },
+    "node_modules/@types/react": {
+      "version": "18.2.48",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz",
+      "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==",
+      "devOptional": true,
+      "dependencies": {
+        "@types/prop-types": "*",
+        "@types/scheduler": "*",
+        "csstype": "^3.0.2"
+      }
+    },
+    "node_modules/@types/scheduler": {
+      "version": "0.16.8",
+      "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
+      "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
+      "devOptional": true
+    },
+    "node_modules/@types/shimmer": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.5.tgz",
+      "integrity": "sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww=="
+    },
+    "node_modules/@types/through": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz",
+      "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==",
+      "dev": true,
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
+    "node_modules/@types/uuid": {
+      "version": "8.3.4",
+      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
+      "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
+      "dev": true
+    },
+    "node_modules/@types/yoga-layout": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz",
+      "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="
+    },
+    "node_modules/acorn": {
+      "version": "8.11.3",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+      "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/acorn-import-assertions": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+      "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+      "peerDependencies": {
+        "acorn": "^8"
+      }
+    },
+    "node_modules/agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "dependencies": {
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
+    },
+    "node_modules/ansi-escapes": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+      "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+      "dependencies": {
+        "type-fest": "^0.21.3"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ansi-escapes/node_modules/type-fest": {
+      "version": "0.21.3",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "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"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/ansicolors": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
+      "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg=="
+    },
+    "node_modules/any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+    },
+    "node_modules/applicationinsights": {
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-2.9.2.tgz",
+      "integrity": "sha512-wlDiD7v0BQNM8oNzsf9C836R5ze25u+CuCEZsbA5xMIXYYBxkqkWE/mo9GFJM7rsKaiGqpxEwWmePHKD2Lwy2w==",
+      "dependencies": {
+        "@azure/core-auth": "^1.5.0",
+        "@azure/core-rest-pipeline": "1.10.1",
+        "@azure/core-util": "1.2.0",
+        "@azure/opentelemetry-instrumentation-azure-sdk": "^1.0.0-beta.5",
+        "@microsoft/applicationinsights-web-snippet": "^1.0.1",
+        "@opentelemetry/api": "^1.7.0",
+        "@opentelemetry/core": "^1.19.0",
+        "@opentelemetry/sdk-trace-base": "^1.19.0",
+        "@opentelemetry/semantic-conventions": "^1.19.0",
+        "cls-hooked": "^4.2.2",
+        "continuation-local-storage": "^3.2.1",
+        "diagnostic-channel": "1.1.1",
+        "diagnostic-channel-publishers": "1.0.8"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      },
+      "peerDependencies": {
+        "applicationinsights-native-metrics": "*"
+      },
+      "peerDependenciesMeta": {
+        "applicationinsights-native-metrics": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/arr-rotate": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/arr-rotate/-/arr-rotate-1.0.0.tgz",
+      "integrity": "sha512-yOzOZcR9Tn7enTF66bqKorGGH0F36vcPaSWg8fO0c0UYb3LX3VMXj5ZxEqQLNOecAhlRJ7wYZja5i4jTlnbIfQ==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/astral-regex": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+      "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/async": {
+      "version": "3.2.5",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+      "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
+      "dev": true
+    },
+    "node_modules/async-hook-jl": {
+      "version": "1.7.6",
+      "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz",
+      "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==",
+      "dependencies": {
+        "stack-chain": "^1.3.7"
+      },
+      "engines": {
+        "node": "^4.7 || >=6.9 || >=7.3"
+      }
+    },
+    "node_modules/async-listener": {
+      "version": "0.6.10",
+      "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz",
+      "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==",
+      "dependencies": {
+        "semver": "^5.3.0",
+        "shimmer": "^1.1.0"
+      },
+      "engines": {
+        "node": "<=0.11.8 || >0.11.10"
+      }
+    },
+    "node_modules/asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+    },
+    "node_modules/auto-bind": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz",
+      "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/axios": {
+      "version": "1.6.5",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz",
+      "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==",
+      "dependencies": {
+        "follow-redirects": "^1.15.4",
+        "form-data": "^4.0.0",
+        "proxy-from-env": "^1.1.0"
+      }
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/big-integer": {
+      "version": "1.6.52",
+      "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+      "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/bl": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
+      "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==",
+      "dependencies": {
+        "buffer": "^6.0.3",
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.4.0"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "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.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/broadcast-channel": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz",
+      "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "detect-node": "^2.1.0",
+        "js-sha3": "0.8.0",
+        "microseconds": "0.2.0",
+        "nano-time": "1.0.0",
+        "oblivious-set": "1.0.0",
+        "rimraf": "3.0.2",
+        "unload": "2.2.0"
+      }
+    },
+    "node_modules/buffer": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
+    "node_modules/call-bind": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+      "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
+      "dependencies": {
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.1",
+        "set-function-length": "^1.1.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/cardinal": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz",
+      "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==",
+      "dependencies": {
+        "ansicolors": "~0.3.2",
+        "redeyed": "~2.1.0"
+      },
+      "bin": {
+        "cdl": "bin/cdl.js"
+      }
+    },
+    "node_modules/chalk": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+      "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+      "engines": {
+        "node": "^12.17.0 || ^14.13 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/chardet": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
+    },
+    "node_modules/ci-info": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+      "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
+    },
+    "node_modules/cjs-module-lexer": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
+      "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ=="
+    },
+    "node_modules/cli-boxes": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
+      "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/cli-cursor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+      "dependencies": {
+        "restore-cursor": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cli-highlight": {
+      "version": "2.1.11",
+      "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
+      "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "highlight.js": "^10.7.1",
+        "mz": "^2.4.0",
+        "parse5": "^5.1.1",
+        "parse5-htmlparser2-tree-adapter": "^6.0.0",
+        "yargs": "^16.0.0"
+      },
+      "bin": {
+        "highlight": "bin/highlight"
+      },
+      "engines": {
+        "node": ">=8.0.0",
+        "npm": ">=5.0.0"
+      }
+    },
+    "node_modules/cli-highlight/node_modules/chalk": {
+      "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.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/cli-spinners": {
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+      "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/cli-table3": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
+      "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
+      "dependencies": {
+        "string-width": "^4.2.0"
+      },
+      "engines": {
+        "node": "10.* || >= 12.*"
+      },
+      "optionalDependencies": {
+        "@colors/colors": "1.5.0"
+      }
+    },
+    "node_modules/cli-truncate": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+      "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+      "dependencies": {
+        "slice-ansi": "^3.0.0",
+        "string-width": "^4.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/cli-width": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
+      "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/cliui": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^7.0.0"
+      }
+    },
+    "node_modules/cliui/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+      "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/cls-hooked": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz",
+      "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==",
+      "dependencies": {
+        "async-hook-jl": "^1.7.6",
+        "emitter-listener": "^1.0.1",
+        "semver": "^5.4.1"
+      },
+      "engines": {
+        "node": "^4.7 || >=6.9 || >=7.3 || >=8.2.1"
+      }
+    },
+    "node_modules/code-excerpt": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz",
+      "integrity": "sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==",
+      "dependencies": {
+        "convert-to-spaces": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+    },
+    "node_modules/combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dependencies": {
+        "delayed-stream": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/commander": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+      "engines": {
+        "node": "^12.20.0 || >=14"
+      }
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+    },
+    "node_modules/continuation-local-storage": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz",
+      "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==",
+      "dependencies": {
+        "async-listener": "^0.6.0",
+        "emitter-listener": "^1.1.1"
+      }
+    },
+    "node_modules/convert-to-spaces": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz",
+      "integrity": "sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==",
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+      "devOptional": true
+    },
+    "node_modules/debug": {
+      "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"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/defaults": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+      "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
+      "dependencies": {
+        "clone": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/define-data-property": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
+      "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+      "dependencies": {
+        "get-intrinsic": "^1.2.1",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/detect-node": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+      "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="
+    },
+    "node_modules/diagnostic-channel": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-1.1.1.tgz",
+      "integrity": "sha512-r2HV5qFkUICyoaKlBEpLKHjxMXATUf/l+h8UZPGBHGLy4DDiY2sOLcIctax4eRnTw5wH2jTMExLntGPJ8eOJxw==",
+      "dependencies": {
+        "semver": "^7.5.3"
+      }
+    },
+    "node_modules/diagnostic-channel-publishers": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-1.0.8.tgz",
+      "integrity": "sha512-HmSm9hXxSPxA9BaLGY98QU1zsdjeCk113KjAYGPCen1ZP6mhVaTPzHd6UYv5r21DnWANi+f+NyPOHruGT9jpqQ==",
+      "peerDependencies": {
+        "diagnostic-channel": "*"
+      }
+    },
+    "node_modules/diagnostic-channel/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/ejs": {
+      "version": "3.1.9",
+      "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
+      "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
+      "dev": true,
+      "dependencies": {
+        "jake": "^10.8.5"
+      },
+      "bin": {
+        "ejs": "bin/cli.js"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/emitter-listener": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz",
+      "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==",
+      "dependencies": {
+        "shimmer": "^1.2.0"
+      }
+    },
+    "node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+    },
+    "node_modules/esbuild": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
+      "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
+      "dev": true,
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/android-arm": "0.15.18",
+        "@esbuild/linux-loong64": "0.15.18",
+        "esbuild-android-64": "0.15.18",
+        "esbuild-android-arm64": "0.15.18",
+        "esbuild-darwin-64": "0.15.18",
+        "esbuild-darwin-arm64": "0.15.18",
+        "esbuild-freebsd-64": "0.15.18",
+        "esbuild-freebsd-arm64": "0.15.18",
+        "esbuild-linux-32": "0.15.18",
+        "esbuild-linux-64": "0.15.18",
+        "esbuild-linux-arm": "0.15.18",
+        "esbuild-linux-arm64": "0.15.18",
+        "esbuild-linux-mips64le": "0.15.18",
+        "esbuild-linux-ppc64le": "0.15.18",
+        "esbuild-linux-riscv64": "0.15.18",
+        "esbuild-linux-s390x": "0.15.18",
+        "esbuild-netbsd-64": "0.15.18",
+        "esbuild-openbsd-64": "0.15.18",
+        "esbuild-sunos-64": "0.15.18",
+        "esbuild-windows-32": "0.15.18",
+        "esbuild-windows-64": "0.15.18",
+        "esbuild-windows-arm64": "0.15.18"
+      }
+    },
+    "node_modules/esbuild-android-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
+      "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-android-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
+      "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-darwin-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
+      "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-darwin-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
+      "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-freebsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
+      "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-freebsd-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
+      "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-32": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
+      "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
+      "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-arm": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
+      "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
+      "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-mips64le": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
+      "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-ppc64le": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
+      "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-riscv64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
+      "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-s390x": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
+      "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-netbsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
+      "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-openbsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
+      "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-sunos-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
+      "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-32": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
+      "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
+      "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
+      "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "bin": {
+        "esparse": "bin/esparse.js",
+        "esvalidate": "bin/esvalidate.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/external-editor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+      "dependencies": {
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
+        "tmp": "^0.0.33"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/figures": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+      "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+      "dependencies": {
+        "escape-string-regexp": "^1.0.5"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/filelist": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+      "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+      "dev": true,
+      "dependencies": {
+        "minimatch": "^5.0.1"
+      }
+    },
+    "node_modules/filelist/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/filelist/node_modules/minimatch": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/find-package": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/find-package/-/find-package-1.0.0.tgz",
+      "integrity": "sha512-yVn71XCCaNgxz58ERTl8nA/8YYtIQDY9mHSrgFBfiFtdNNfY0h183Vh8BRkKxD8x9TUw3ec290uJKhDVxqGZBw==",
+      "dev": true,
+      "dependencies": {
+        "parents": "^1.0.1"
+      }
+    },
+    "node_modules/follow-redirects": {
+      "version": "1.15.5",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+      "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/form-data": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/genversion": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/genversion/-/genversion-3.2.0.tgz",
+      "integrity": "sha512-OIYSX6XYA8PHecLDCTri30hadSZfAjZ8Iq1+BBDXqLWP4dRLuJNLoNjsSWtTpw97IccK2LDWzkEstxAB8GdN7g==",
+      "dev": true,
+      "dependencies": {
+        "commander": "^7.2.0",
+        "ejs": "^3.1.9",
+        "find-package": "^1.0.0"
+      },
+      "bin": {
+        "genversion": "bin/genversion.js"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/genversion/node_modules/commander": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+      "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
+      "dependencies": {
+        "function-bind": "^1.1.2",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/glob": {
+      "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.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+      "dependencies": {
+        "get-intrinsic": "^1.1.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/has-property-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+      "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+      "dependencies": {
+        "get-intrinsic": "^1.2.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-proto": {
+      "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==",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/highlight.js": {
+      "version": "10.7.3",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
+      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/http-proxy-agent": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+      "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+      "dependencies": {
+        "@tootallnate/once": "2",
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "dependencies": {
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/immer": {
+      "version": "9.0.21",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
+      "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/immer"
+      }
+    },
+    "node_modules/import-in-the-middle": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz",
+      "integrity": "sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==",
+      "dependencies": {
+        "acorn": "^8.8.2",
+        "acorn-import-assertions": "^1.9.0",
+        "cjs-module-lexer": "^1.2.2",
+        "module-details-from-path": "^1.0.3"
+      }
+    },
+    "node_modules/indent-string": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/inflight": {
+      "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.3.0",
+        "wrappy": "1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "node_modules/ink": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/ink/-/ink-3.2.0.tgz",
+      "integrity": "sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==",
+      "dependencies": {
+        "ansi-escapes": "^4.2.1",
+        "auto-bind": "4.0.0",
+        "chalk": "^4.1.0",
+        "cli-boxes": "^2.2.0",
+        "cli-cursor": "^3.1.0",
+        "cli-truncate": "^2.1.0",
+        "code-excerpt": "^3.0.0",
+        "indent-string": "^4.0.0",
+        "is-ci": "^2.0.0",
+        "lodash": "^4.17.20",
+        "patch-console": "^1.0.0",
+        "react-devtools-core": "^4.19.1",
+        "react-reconciler": "^0.26.2",
+        "scheduler": "^0.20.2",
+        "signal-exit": "^3.0.2",
+        "slice-ansi": "^3.0.0",
+        "stack-utils": "^2.0.2",
+        "string-width": "^4.2.2",
+        "type-fest": "^0.12.0",
+        "widest-line": "^3.1.0",
+        "wrap-ansi": "^6.2.0",
+        "ws": "^7.5.5",
+        "yoga-layout-prebuilt": "^1.9.6"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": ">=16.8.0",
+        "react": ">=16.8.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/ink-divider": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/ink-divider/-/ink-divider-3.0.0.tgz",
+      "integrity": "sha512-Mqb9WArtEZCtXw622aHhJqPK157QNc+8ssl9/RvAZlS6nZRCKyW4mYOYCudQh6dSuFGt9eG5yaqT1mJaGmwu+w==",
+      "dependencies": {
+        "prop-types": "^15.7.2",
+        "string-width": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "peerDependencies": {
+        "ink": ">=3.0.0",
+        "react": ">=16.8.0"
+      }
+    },
+    "node_modules/ink-select-input": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/ink-select-input/-/ink-select-input-4.2.2.tgz",
+      "integrity": "sha512-E5AS2Vnd4CSzEa7Rm+hG47wxRQo1ASfh4msKxO7FHmn/ym+GKSSsFIfR+FonqjKNDPXYJClw8lM47RdN3Pi+nw==",
+      "dependencies": {
+        "arr-rotate": "^1.0.0",
+        "figures": "^3.2.0",
+        "lodash.isequal": "^4.5.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "ink": "^3.0.5",
+        "react": "^16.5.2 || ^17.0.0"
+      }
+    },
+    "node_modules/ink-spinner": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/ink-spinner/-/ink-spinner-4.0.3.tgz",
+      "integrity": "sha512-uJ4nbH00MM9fjTJ5xdw0zzvtXMkeGb0WV6dzSWvFv2/+ks6FIhpkt+Ge/eLdh0Ah6Vjw5pLMyNfoHQpRDRVFbQ==",
+      "dependencies": {
+        "cli-spinners": "^2.3.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "ink": ">=3.0.5",
+        "react": ">=16.8.2"
+      }
+    },
+    "node_modules/ink-text-input": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/ink-text-input/-/ink-text-input-4.0.3.tgz",
+      "integrity": "sha512-eQD01ik9ltmNoHmkeQ2t8LszYkv2XwuPSUz3ie/85qer6Ll/j0QSlSaLNl6ENHZakBHdCBVZY04iOXcLLXA0PQ==",
+      "dependencies": {
+        "chalk": "^4.1.0",
+        "type-fest": "^0.15.1"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "ink": "^3.0.0-3",
+        "react": "^16.5.2 || ^17.0.0"
+      }
+    },
+    "node_modules/ink-text-input/node_modules/chalk": {
+      "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.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/ink-text-input/node_modules/type-fest": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.15.1.tgz",
+      "integrity": "sha512-n+UXrN8i5ioo7kqT/nF8xsEzLaqFra7k32SEsSPwvXVGyAcRgV/FUQN/sgfptJTR1oRmmq7z4IXMFSM7im7C9A==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ink/node_modules/chalk": {
+      "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.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/inquirer": {
+      "version": "9.2.12",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz",
+      "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==",
+      "dependencies": {
+        "@ljharb/through": "^2.3.11",
+        "ansi-escapes": "^4.3.2",
+        "chalk": "^5.3.0",
+        "cli-cursor": "^3.1.0",
+        "cli-width": "^4.1.0",
+        "external-editor": "^3.1.0",
+        "figures": "^5.0.0",
+        "lodash": "^4.17.21",
+        "mute-stream": "1.0.0",
+        "ora": "^5.4.1",
+        "run-async": "^3.0.0",
+        "rxjs": "^7.8.1",
+        "string-width": "^4.2.3",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^6.2.0"
+      },
+      "engines": {
+        "node": ">=14.18.0"
+      }
+    },
+    "node_modules/inquirer/node_modules/bl": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+      "dependencies": {
+        "buffer": "^5.5.0",
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.4.0"
+      }
+    },
+    "node_modules/inquirer/node_modules/buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "node_modules/inquirer/node_modules/escape-string-regexp": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inquirer/node_modules/figures": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz",
+      "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==",
+      "dependencies": {
+        "escape-string-regexp": "^5.0.0",
+        "is-unicode-supported": "^1.2.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inquirer/node_modules/is-interactive": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+      "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/inquirer/node_modules/log-symbols": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+      "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+      "dependencies": {
+        "chalk": "^4.1.0",
+        "is-unicode-supported": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inquirer/node_modules/log-symbols/node_modules/chalk": {
+      "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.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/inquirer/node_modules/log-symbols/node_modules/is-unicode-supported": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inquirer/node_modules/ora": {
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+      "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
+      "dependencies": {
+        "bl": "^4.1.0",
+        "chalk": "^4.1.0",
+        "cli-cursor": "^3.1.0",
+        "cli-spinners": "^2.5.0",
+        "is-interactive": "^1.0.0",
+        "is-unicode-supported": "^0.1.0",
+        "log-symbols": "^4.1.0",
+        "strip-ansi": "^6.0.0",
+        "wcwidth": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inquirer/node_modules/ora/node_modules/chalk": {
+      "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.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/inquirer/node_modules/ora/node_modules/is-unicode-supported": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-ci": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+      "dependencies": {
+        "ci-info": "^2.0.0"
+      },
+      "bin": {
+        "is-ci": "bin.js"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.13.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+      "dependencies": {
+        "hasown": "^2.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-interactive": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+      "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-unicode-supported": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+      "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jake": {
+      "version": "10.8.7",
+      "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
+      "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
+      "dev": true,
+      "dependencies": {
+        "async": "^3.2.3",
+        "chalk": "^4.0.2",
+        "filelist": "^1.0.4",
+        "minimatch": "^3.1.2"
+      },
+      "bin": {
+        "jake": "bin/cli.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jake/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/js-sha3": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
+      "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+    },
+    "node_modules/lodash.isequal": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+      "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
+    },
+    "node_modules/log-symbols": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz",
+      "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==",
+      "dependencies": {
+        "chalk": "^5.0.0",
+        "is-unicode-supported": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "dependencies": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      },
+      "bin": {
+        "loose-envify": "cli.js"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/marked": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
+      "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
+      "bin": {
+        "marked": "bin/marked.js"
+      },
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/marked-terminal": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz",
+      "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==",
+      "dependencies": {
+        "ansi-escapes": "^6.2.0",
+        "cardinal": "^2.1.1",
+        "chalk": "^5.2.0",
+        "cli-table3": "^0.6.3",
+        "node-emoji": "^1.11.0",
+        "supports-hyperlinks": "^2.3.0"
+      },
+      "engines": {
+        "node": ">=14.13.1 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0"
+      }
+    },
+    "node_modules/marked-terminal/node_modules/ansi-escapes": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz",
+      "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==",
+      "dependencies": {
+        "type-fest": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/marked-terminal/node_modules/type-fest": {
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
+      "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/match-sorter": {
+      "version": "6.3.3",
+      "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.3.tgz",
+      "integrity": "sha512-sgiXxrRijEe0SzHKGX4HouCpfHRPnqteH42UdMEW7BlWy990ZkzcvonJGv4Uu9WE7Y1f8Yocm91+4qFPCbmNww==",
+      "dependencies": {
+        "@babel/runtime": "^7.23.8",
+        "remove-accents": "0.5.0"
+      }
+    },
+    "node_modules/microseconds": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz",
+      "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA=="
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/minimatch": {
+      "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.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/module-details-from-path": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz",
+      "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="
+    },
+    "node_modules/ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "node_modules/mute-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
+      "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+      "dependencies": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "node_modules/nano-time": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz",
+      "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==",
+      "dependencies": {
+        "big-integer": "^1.6.16"
+      }
+    },
+    "node_modules/node-emoji": {
+      "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_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/oblivious-set": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz",
+      "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw=="
+    },
+    "node_modules/once": {
+      "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"
+      }
+    },
+    "node_modules/onetime": {
+      "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"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ora": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz",
+      "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==",
+      "dependencies": {
+        "chalk": "^5.0.0",
+        "cli-cursor": "^4.0.0",
+        "cli-spinners": "^2.6.1",
+        "is-interactive": "^2.0.0",
+        "is-unicode-supported": "^1.1.0",
+        "log-symbols": "^5.1.0",
+        "stdin-discarder": "^0.1.0",
+        "strip-ansi": "^7.0.1",
+        "wcwidth": "^1.0.1"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ora/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/ora/node_modules/cli-cursor": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+      "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+      "dependencies": {
+        "restore-cursor": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ora/node_modules/restore-cursor": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+      "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+      "dependencies": {
+        "onetime": "^5.1.0",
+        "signal-exit": "^3.0.2"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ora/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/parents": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+      "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==",
+      "dev": true,
+      "dependencies": {
+        "path-platform": "~0.11.15"
+      }
+    },
+    "node_modules/parse5": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+      "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="
+    },
+    "node_modules/parse5-htmlparser2-tree-adapter": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+      "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
+      "dependencies": {
+        "parse5": "^6.0.1"
+      }
+    },
+    "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+      "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
+    },
+    "node_modules/patch-console": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-1.0.0.tgz",
+      "integrity": "sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+    },
+    "node_modules/path-platform": {
+      "version": "0.11.15",
+      "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+      "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/prop-types": {
+      "version": "15.8.1",
+      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+      "dependencies": {
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.13.1"
+      }
+    },
+    "node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
+    "node_modules/psl": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+    },
+    "node_modules/punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+    },
+    "node_modules/radash": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/radash/-/radash-9.5.0.tgz",
+      "integrity": "sha512-t0s8BJlvrk8YPaOS8X0J2xzqAsBlXAUkDEjoBXwlzaXsXNCpBILjT9OvWlabLa2KB/r4XrhThdXjxMs7SiCyIw==",
+      "engines": {
+        "node": ">=14.18.0"
+      }
+    },
+    "node_modules/react": {
+      "version": "17.0.2",
+      "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
+      "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/react-devtools-core": {
+      "version": "4.28.5",
+      "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz",
+      "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==",
+      "dependencies": {
+        "shell-quote": "^1.6.1",
+        "ws": "^7"
+      }
+    },
+    "node_modules/react-dom": {
+      "version": "17.0.2",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
+      "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "scheduler": "^0.20.2"
+      },
+      "peerDependencies": {
+        "react": "17.0.2"
+      }
+    },
+    "node_modules/react-is": {
+      "version": "16.13.1",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+    },
+    "node_modules/react-query": {
+      "version": "3.39.3",
+      "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz",
+      "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==",
+      "dependencies": {
+        "@babel/runtime": "^7.5.5",
+        "broadcast-channel": "^3.4.1",
+        "match-sorter": "^6.0.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/tannerlinsley"
+      },
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      },
+      "peerDependenciesMeta": {
+        "react-dom": {
+          "optional": true
+        },
+        "react-native": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-reconciler": {
+      "version": "0.26.2",
+      "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.26.2.tgz",
+      "integrity": "sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "scheduler": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      },
+      "peerDependencies": {
+        "react": "^17.0.2"
+      }
+    },
+    "node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/redeyed": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz",
+      "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==",
+      "dependencies": {
+        "esprima": "~4.0.0"
+      }
+    },
+    "node_modules/regenerator-runtime": {
+      "version": "0.14.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+    },
+    "node_modules/remove-accents": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz",
+      "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A=="
+    },
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/require-in-the-middle": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.2.0.tgz",
+      "integrity": "sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw==",
+      "dependencies": {
+        "debug": "^4.1.1",
+        "module-details-from-path": "^1.0.3",
+        "resolve": "^1.22.1"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
+    },
+    "node_modules/resolve": {
+      "version": "1.22.8",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+      "dependencies": {
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/restore-cursor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+      "dependencies": {
+        "onetime": "^5.1.0",
+        "signal-exit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/run-async": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz",
+      "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/rxjs": {
+      "version": "7.8.1",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+      "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
+    "node_modules/scheduler": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
+      "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1"
+      }
+    },
+    "node_modules/semver": {
+      "version": "5.7.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/set-function-length": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz",
+      "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==",
+      "dependencies": {
+        "define-data-property": "^1.1.1",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.2",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/shell-quote": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+      "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/shimmer": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
+      "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="
+    },
+    "node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+    },
+    "node_modules/simple-update-notifier": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz",
+      "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==",
+      "dependencies": {
+        "semver": "~7.0.0"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/simple-update-notifier/node_modules/semver": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+      "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/slice-ansi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+      "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "astral-regex": "^2.0.0",
+        "is-fullwidth-code-point": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/stack-chain": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz",
+      "integrity": "sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug=="
+    },
+    "node_modules/stack-utils": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+      "dependencies": {
+        "escape-string-regexp": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/stack-utils/node_modules/escape-string-regexp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+      "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/stdin-discarder": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz",
+      "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==",
+      "dependencies": {
+        "bl": "^5.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
+    "node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "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"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-hyperlinks": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+      "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
+      "dependencies": {
+        "has-flag": "^4.0.0",
+        "supports-color": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/thenify": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+      "dependencies": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "node_modules/thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+      "dependencies": {
+        "thenify": ">= 3.1.0 < 4"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/tiny-invariant": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
+      "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw=="
+    },
+    "node_modules/tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+      "dependencies": {
+        "os-tmpdir": "~1.0.2"
+      },
+      "engines": {
+        "node": ">=0.6.0"
+      }
+    },
+    "node_modules/tough-cookie": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+      "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+      "dependencies": {
+        "psl": "^1.1.33",
+        "punycode": "^2.1.1",
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/ts-dedent": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
+      "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
+      "engines": {
+        "node": ">=6.10"
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+    },
+    "node_modules/type-fest": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz",
+      "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/typescript": {
+      "version": "4.9.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+      "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+      "dev": true,
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=4.2.0"
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "5.26.5",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+      "dev": true
+    },
+    "node_modules/universalify": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+      "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
+    "node_modules/unload": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz",
+      "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==",
+      "dependencies": {
+        "@babel/runtime": "^7.6.2",
+        "detect-node": "^2.0.4"
+      }
+    },
+    "node_modules/url-parse": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "dependencies": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "node_modules/use-sync-external-store": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+      "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      }
+    },
+    "node_modules/use-zustand": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/use-zustand/-/use-zustand-0.0.1.tgz",
+      "integrity": "sha512-axjswesUfXirTQ1CC1F4r0dkaI7g2nMEftyvg23Wq4PnAbLogswzj+o5gbnnnQaQOMXKHxNZIlYpKfuTnL466Q==",
+      "peerDependencies": {
+        "react": "*"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+    },
+    "node_modules/uuid": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+      "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+      "funding": [
+        "https://github.com/sponsors/broofa",
+        "https://github.com/sponsors/ctavan"
+      ],
+      "bin": {
+        "uuid": "dist/bin/uuid"
+      }
+    },
+    "node_modules/wcwidth": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+      "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
+      "dependencies": {
+        "defaults": "^1.0.3"
+      }
+    },
+    "node_modules/widest-line": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
+      "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
+      "dependencies": {
+        "string-width": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+    },
+    "node_modules/ws": {
+      "version": "7.5.9",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+      "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+      "engines": {
+        "node": ">=8.3.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": "^5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/y18n": {
+      "version": "5.0.8",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    },
+    "node_modules/yargs": {
+      "version": "16.2.0",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+      "dependencies": {
+        "cliui": "^7.0.2",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.0",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^20.2.2"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yoga-layout-prebuilt": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.10.0.tgz",
+      "integrity": "sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==",
+      "dependencies": {
+        "@types/yoga-layout": "1.9.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/zustand": {
+      "version": "4.4.7",
+      "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.7.tgz",
+      "integrity": "sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==",
+      "dependencies": {
+        "use-sync-external-store": "1.2.0"
+      },
+      "engines": {
+        "node": ">=12.7.0"
+      },
+      "peerDependencies": {
+        "@types/react": ">=16.8",
+        "immer": ">=9.0",
+        "react": ">=16.8"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "immer": {
+          "optional": true
+        },
+        "react": {
+          "optional": true
+        }
+      }
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/tools/misc/gitrs/default.nix b/nixpkgs/pkgs/tools/misc/gitrs/default.nix
new file mode 100644
index 000000000000..4ce36855ef67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gitrs/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+, pkg-config
+, libiconv
+, darwin
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gitrs";
+  version = "v0.3.6";
+
+  src = fetchFromGitHub {
+    owner = "mccurdyc";
+    repo = pname;
+    rev = version;
+    hash = "sha256-+43XJroPNWmdUC6FDL84rZWrJm5fzuUXfpDkAMyVQQg=";
+  };
+
+  cargoHash = "sha256-2TXm1JTs0Xkid91A5tdi6Kokm0K1NOPmlocwFXv48uw=";
+
+  nativeBuildInputs = [
+    pkg-config # for openssl
+  ];
+
+  buildInputs = [ openssl.dev ]
+    ++ lib.optionals stdenv.isDarwin [
+    libiconv
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  meta = with lib; {
+    description = "A simple, opinionated, tool, written in Rust, for declaratively managing Git repos on your machine";
+    homepage = "https://github.com/mccurdyc/gitrs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mccurdyc ];
+    mainProgram = "gitrs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/glasgow/default.nix b/nixpkgs/pkgs/tools/misc/glasgow/default.nix
new file mode 100644
index 000000000000..77f3eb01d96a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/glasgow/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, python3
+, fetchFromGitHub
+, sdcc
+, yosys
+, icestorm
+, nextpnr
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "glasgow";
+  version = "unstable-2023-09-20";
+  # python -m setuptools_scm
+  realVersion = "0.1.dev1798+g${lib.substring 0 7 src.rev}";
+
+  src = fetchFromGitHub {
+    owner = "GlasgowEmbedded";
+    repo = "glasgow";
+    rev = "e9a9801d5be3dcba0ee188dd8a6e9115e337795d";
+    sha256 = "sha256-ztB3I/jrDSm1gKB1e5igivUVloq+YYhkshDlWg75NMA=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.setuptools-scm
+    sdcc
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiohttp
+    amaranth
+    appdirs
+    bitarray
+    crc
+    fx2
+    libusb1
+    packaging
+    pyvcd
+    setuptools
+  ];
+
+  nativeCheckInputs = [ yosys icestorm nextpnr ];
+
+  enableParallelBuilding = true;
+
+  preBuild = ''
+    make -C firmware LIBFX2=${python3.pkgs.fx2}/share/libfx2
+    cp firmware/glasgow.ihex software/glasgow
+    cd software
+    export SETUPTOOLS_SCM_PRETEND_VERSION="${realVersion}"
+  '';
+
+  # installCheck tries to build_ext again
+  doInstallCheck = false;
+
+  postInstall = ''
+    mkdir -p $out/etc/udev/rules.d
+    cp $src/config/99-glasgow.rules $out/etc/udev/rules.d
+  '';
+
+  checkPhase = ''
+    # tests attempt to cache bitstreams
+    # for linux:
+    export XDG_CACHE_HOME=$TMPDIR
+    # for darwin:
+    export HOME=$TMPDIR
+    ${python3.interpreter} -W ignore::DeprecationWarning test.py
+  '';
+
+  makeWrapperArgs = [
+    "--set" "YOSYS" "${yosys}/bin/yosys"
+    "--set" "ICEPACK" "${icestorm}/bin/icepack"
+    "--set" "NEXTPNR_ICE40" "${nextpnr}/bin/nextpnr-ice40"
+  ];
+
+  meta = with lib; {
+    description = "Software for Glasgow, a digital interface multitool";
+    homepage = "https://github.com/GlasgowEmbedded/Glasgow";
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ emily thoughtpolice ];
+    mainProgram = "glasgow";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/go-ios/default.nix b/nixpkgs/pkgs/tools/misc/go-ios/default.nix
new file mode 100644
index 000000000000..a5f204c9d04d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/go-ios/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+}:
+
+buildGoModule rec {
+  pname = "go-ios";
+  version = "1.0.121";
+
+  src = fetchFromGitHub {
+    owner = "danielpaulus";
+    repo = "go-ios";
+    rev = "v${version}";
+    sha256 = "sha256-zWaEtfxrJYaROQ05nBQvM5fiIRSG+hCecU+BVnpIuck=";
+  };
+
+  vendorHash = "sha256-0Wi9FCTaOD+kzO5cRjpqbXHqx5UAKSGu+hc9bpj+PWo=";
+
+  excludedPackages = [
+    "restapi"
+  ];
+
+  checkFlags = [
+    "-tags=fast"
+  ];
+
+  postInstall = ''
+    # aligns the binary with what is expected from go-ios
+    mv $out/bin/go-ios $out/bin/ios
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "An operating system independent implementation of iOS device features";
+    homepage = "https://github.com/danielpaulus/go-ios";
+    license = licenses.mit;
+    maintainers = with maintainers; [ eyjhb ];
+    mainProgram = "ios";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/go.rice/default.nix b/nixpkgs/pkgs/tools/misc/go.rice/default.nix
new file mode 100644
index 000000000000..3ee268f2a829
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/go.rice/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-rice";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "GeertJohan";
+    repo = "go.rice";
+    rev = "v${version}";
+    sha256 = "sha256-jO4otde/m52L2NrE88aXRjdGDBNxnbP1Zt+5fEqfNIc=";
+  };
+
+  vendorHash = "sha256-VlpdZcqg7yWUADN8oD/IAgAXVdzJeIeymx2Pu/7E21o=";
+
+  subPackages = [ "." "rice" ];
+
+  meta = with lib; {
+    description = "A Go package that makes working with resources such as html, js, css, images, templates very easy";
+    homepage = "https://github.com/GeertJohan/go.rice";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ blaggacao ];
+    mainProgram = "rice";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/goaccess/default.nix b/nixpkgs/pkgs/tools/misc/goaccess/default.nix
new file mode 100644
index 000000000000..774cc18ad801
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/goaccess/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, autoreconfHook
+, fetchFromGitHub
+, gettext
+, libmaxminddb
+, ncurses
+, openssl
+, withGeolocation ? true
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.9.1";
+  pname = "goaccess";
+
+  src = fetchFromGitHub {
+    owner = "allinurl";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vfsMyUnhwsI/tY7d/UpDCyG6DmYzWn9qTi2C0icTPpg=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    ncurses
+    openssl
+  ] ++ lib.optionals withGeolocation [
+    libmaxminddb
+  ] ++ lib.optionals stdenv.isDarwin [
+    gettext
+  ];
+
+  configureFlags = [
+    "--enable-utf8"
+    "--with-openssl"
+  ] ++ lib.optionals withGeolocation [
+    "--enable-geoip=mmdb"
+  ];
+
+  meta = with lib; {
+    description = "Real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems";
+    homepage = "https://goaccess.io";
+    changelog = "https://github.com/allinurl/goaccess/raw/v${version}/ChangeLog";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ederoyd46 ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "goaccess";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/godu/default.nix b/nixpkgs/pkgs/tools/misc/godu/default.nix
new file mode 100644
index 000000000000..7bd29ed43661
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/godu/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "godu";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "viktomas";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-fJeSUAuNELZZ1DcybNsYd2ZX93VYWsLum5tHp68ZVlo=";
+  };
+
+  vendorHash = "sha256-8cZCeZ0gqxqbwB0WuEOFmEUNQd3/KcLeN0eLGfWG8BY=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Utility helping to discover large files/folders";
+    homepage = "https://github.com/viktomas/godu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rople380 ];
+    mainProgram = "godu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gomi/default.nix b/nixpkgs/pkgs/tools/misc/gomi/default.nix
new file mode 100644
index 000000000000..76ef724332e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gomi/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gomi";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "b4b4r07";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YsR2KU5Np6xQHkjM8KAoDp/XZ/9DkwBlMbu2IX5OQlk=";
+  };
+
+  vendorHash = "sha256-n31LUfdgbLQ/KmcFi8LdqmDHXgzbSCc+dnustGvc5SY=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Replacement for UNIX rm command";
+    homepage = "https://github.com/b4b4r07/gomi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ozkutuk ];
+    mainProgram = "gomi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/google-cloud-bigtable-tool/default.nix b/nixpkgs/pkgs/tools/misc/google-cloud-bigtable-tool/default.nix
new file mode 100644
index 000000000000..3c61159bf972
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/google-cloud-bigtable-tool/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "google-cloud-bigtable-tool";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "googleapis";
+    repo = "cloud-bigtable-cbt-cli";
+    rev = "v.${version}";
+    hash = "sha256-N5nbWMj7kLIdRiwBUWFz4Rat88Wx01i3hceMxAvSjaA=";
+  };
+
+  vendorHash = "sha256-kwvEfvHs6XF84bB3Ss1307OjId0nh/0Imih1fRFdY0M=";
+
+  preCheck = ''
+    buildFlagsArray+="-short"
+  '';
+
+  meta = with lib; {
+    description = "Google Cloud Bigtable Tool";
+    longDescription = ''
+      `cbt` is the Google Cloud Bigtable Tool. A CLI utility to interact with Google Cloud Bigtable.
+      The cbt CLI is a command-line interface for performing several different operations on Cloud Bigtable.
+      It is written in Go using the Go client library for Cloud Bigtable.
+      An overview of its usage can be found in the [Google Cloud docs](https://cloud.google.com/bigtable/docs/cbt-overview).
+      For information about Bigtable in general, see the [overview of Bigtable](https://cloud.google.com/bigtable/docs/overview).
+    '';
+    homepage = "https://github.com/googleapis/cloud-bigtable-cbt-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ totoroot ];
+    mainProgram = "cbt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/google-cloud-sql-proxy/default.nix b/nixpkgs/pkgs/tools/misc/google-cloud-sql-proxy/default.nix
new file mode 100644
index 000000000000..01a1db8fdb77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/google-cloud-sql-proxy/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "google-cloud-sql-proxy";
+  version = "2.8.2";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = "cloud-sql-proxy";
+    rev = "v${version}";
+    hash = "sha256-ZCUBr7K7mGpV/oCS4X6cteUGRjMjqAAA3saPfZ6Vowk=";
+  };
+
+  subPackages = [ "." ];
+
+  vendorHash = "sha256-ScGfP5HdXkMlU2PQmlQxuRC7a+iadf3dOKpFFi2EaAY=";
+
+  preCheck = ''
+    buildFlagsArray+="-short"
+  '';
+
+  meta = with lib; {
+    description = "Utility for ensuring secure connections to Google Cloud SQL instances";
+    longDescription = ''
+      The Cloud SQL Auth Proxy is a utility for ensuring secure connections to your Cloud SQL instances.
+      It provides IAM authorization, allowing you to control who can connect to your instance through IAM permissions,
+      and TLS 1.3 encryption, without having to manage certificates.
+      See the [Connecting Overview](https://cloud.google.com/sql/docs/mysql/connect-overview) page for more information
+      on connecting to a Cloud SQL instance, or the [About the Proxy](https://cloud.google.com/sql/docs/mysql/sql-proxy)
+      page for details on how the Cloud SQL Proxy works.
+    '';
+    homepage = "https://github.com/GoogleCloudPlatform/cloud-sql-proxy";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nicknovitski totoroot ];
+    mainProgram = "cloud-sql-proxy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/goose/default.nix b/nixpkgs/pkgs/tools/misc/goose/default.nix
new file mode 100644
index 000000000000..13de61b48e9d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/goose/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "goose";
+  version = "3.15.0";
+
+  src = fetchFromGitHub {
+    owner = "pressly";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-BpCyBd5ogwpZussfKTCnCAcAnvT6jmlvLj2892+bZsg=";
+  };
+
+  proxyVendor = true;
+  vendorHash = "sha256-hOTP9fR0kK4aPJ0xlgwjl/D7O5rUfy9Xb1ruLV/uk1U=";
+
+  # end-to-end tests require a docker daemon
+  postPatch = ''
+    rm -r tests/e2e
+    rm -r tests/gomigrations
+    rm -r tests/vertica
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.gooseVersion=${version}"
+  ];
+
+  checkFlags = [
+    # these also require a docker daemon
+    "-skip=TestClickUpDown|TestClickHouseFirstThree"
+  ];
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Database migration tool which supports SQL migrations and Go functions";
+    homepage = "https://pressly.github.io/goose/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ yuka ];
+    mainProgram = "goose";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/goreleaser/default.nix b/nixpkgs/pkgs/tools/misc/goreleaser/default.nix
new file mode 100644
index 000000000000..da0445730f0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/goreleaser/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, buildPackages
+, testers
+, goreleaser
+}:
+buildGoModule rec {
+  pname = "goreleaser";
+  version = "1.24.0";
+
+  src = fetchFromGitHub {
+    owner = "goreleaser";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-oC35g9F9tsbpoccfh1bgLHveW4xAQ3cMnvdYiGoI8Ys=";
+  };
+
+  vendorHash = "sha256-5M2OkmjQJM+n5Hr4nRGSFWSmNAj5vXJp/3aw6ppOXoI=";
+
+  ldflags =
+    [ "-s" "-w" "-X main.version=${version}" "-X main.builtBy=nixpkgs" ];
+
+  # tests expect the source files to be a build repo
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall =
+    let emulator = stdenv.hostPlatform.emulator buildPackages;
+    in ''
+      ${emulator} $out/bin/goreleaser man > goreleaser.1
+      installManPage ./goreleaser.1
+      installShellCompletion --cmd goreleaser \
+        --bash <(${emulator} $out/bin/goreleaser completion bash) \
+        --fish <(${emulator} $out/bin/goreleaser completion fish) \
+        --zsh  <(${emulator} $out/bin/goreleaser completion zsh)
+    '';
+
+  passthru.tests.version = testers.testVersion {
+    package = goreleaser;
+    command = "goreleaser -v";
+    inherit version;
+  };
+
+  meta = with lib; {
+    description = "Deliver Go binaries as fast and easily as possible";
+    homepage = "https://goreleaser.com";
+    maintainers = with maintainers; [
+      c0deaddict
+      endocrimes
+      sarcasticadmin
+      techknowlogick
+      developer-guy
+      caarlos0
+    ];
+    license = licenses.mit;
+    mainProgram = "goreleaser";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/goss/default.nix b/nixpkgs/pkgs/tools/misc/goss/default.nix
new file mode 100644
index 000000000000..83b6b2466fbf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/goss/default.nix
@@ -0,0 +1,77 @@
+{ bash
+, buildGoModule
+, fetchFromGitHub
+, getent
+, goss
+, lib
+, makeWrapper
+, nix-update-script
+, nixosTests
+, stdenv
+, systemd
+, testers
+}:
+
+buildGoModule rec {
+  pname = "goss";
+
+  # Don't forget to update dgoss to the same version.
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "goss-org";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-dH052t30unWmrFTZK5niXNvbg1nngzWY7mwuZr4ULbM=";
+  };
+
+  vendorHash = "sha256-4fEEz/c/xIeWxIzyyjwgSn2/2FWLA2tIedK65jGgYhY=";
+
+  CGO_ENABLED = 0;
+  ldflags = [
+    "-s" "-w" "-X main.version=v${version}"
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  checkFlags = [
+    # Prometheus tests are skipped upstream
+    # See https://github.com/goss-org/goss/blob/master/ci/go-test.sh
+    "-skip" "^TestPrometheus"
+  ];
+
+  postInstall = let
+    runtimeDependencies = [ bash getent ]
+      ++ lib.optionals stdenv.isLinux [ systemd ];
+  in ''
+    wrapProgram $out/bin/goss \
+      --prefix PATH : "${lib.makeBinPath runtimeDependencies}"
+  '';
+
+  passthru = {
+    tests = {
+      inherit (nixosTests) goss;
+      version = testers.testVersion {
+        command = "goss --version";
+        package = goss;
+        version = "v${version}";
+      };
+    };
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/goss-org/goss/";
+    changelog = "https://github.com/goss-org/goss/releases/tag/v${version}";
+    description = "Quick and easy server validation";
+    longDescription = ''
+      Goss is a YAML based serverspec alternative tool for validating a server’s configuration.
+      It eases the process of writing tests by allowing the user to generate tests from the current system state.
+      Once the test suite is written they can be executed, waited-on, or served as a health endpoint.
+    '';
+    license = licenses.asl20;
+    mainProgram = "goss";
+    maintainers = with maintainers; [ hyzual jk anthonyroussel ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gosu/default.nix b/nixpkgs/pkgs/tools/misc/gosu/default.nix
new file mode 100644
index 000000000000..bd3ba4c930d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gosu/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, gosu }:
+
+buildGoModule rec {
+  pname = "gosu";
+  version = "1.17";
+
+  src = fetchFromGitHub {
+    owner = "tianon";
+    repo = "gosu";
+    rev = version;
+    hash = "sha256-ziviUXqCpCGECewyZNLDKSjnpmz/3i5DKrIKZlLwl4o=";
+  };
+
+  vendorHash = "sha256-fygLYSO0kpMFJd6WQp/uLYkELkyaOPZ9V8BrJcIcMuU=";
+
+  ldflags = [ "-d" "-s" "-w" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = gosu;
+  };
+
+  meta = with lib; {
+    description = "Tool that avoids TTY and signal-forwarding behavior of sudo and su";
+    homepage = "https://github.com/tianon/gosu";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gotify-cli/default.nix b/nixpkgs/pkgs/tools/misc/gotify-cli/default.nix
new file mode 100644
index 000000000000..296f3d19a88d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gotify-cli/default.nix
@@ -0,0 +1,31 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "gotify-cli";
+  version = "2.2.3";
+
+  src = fetchFromGitHub {
+    owner = "gotify";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-mOIomHNA20gKU7uh2Sf4NqqLNjNnD5hgOTUu9DuduiI=";
+  };
+
+  vendorHash = "sha256-ObJfUIy2GwogFm2/uCmShEXnIxDTqWWXCZPu9KJVFOA=";
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/gotify
+  '';
+
+  ldflags = [
+    "-X main.Version=${version}" "-X main.Commit=${version}" "-X main.BuildDate=1970-01-01"
+  ];
+
+  meta = with lib; {
+    license = licenses.mit;
+    homepage = "https://github.com/gotify/cli";
+    description = "A command line interface for pushing messages to gotify/server";
+    maintainers = with maintainers; [ ];
+    mainProgram = "gotify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gotify-desktop/default.nix b/nixpkgs/pkgs/tools/misc/gotify-desktop/default.nix
new file mode 100644
index 000000000000..409179461ef0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gotify-desktop/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, rustPlatform, openssl, pkg-config, stdenv}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gotify-desktop";
+  version = "1.3.4";
+
+  src = fetchFromGitHub {
+    owner = "desbma";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-TuqzwmKB48xcdzrAr7MvDA9JChobraESQZPKoy24mPE=";
+  };
+
+  cargoHash = "sha256-vg3al+eH9Q4D/T56jwWBlBT4IhuggiEVBl8WoZmUS2Y=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ];
+
+  meta = with lib; {
+    description = "Small Gotify daemon to send messages as desktop notifications";
+    homepage = "https://github.com/desbma/gotify-desktop";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bryanasdev000 genofire ];
+    broken = stdenv.isDarwin;
+    mainProgram = "gotify-desktop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gparted/default.nix b/nixpkgs/pkgs/tools/misc/gparted/default.nix
new file mode 100644
index 000000000000..1c16795d40bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gparted/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchurl, gettext, coreutils, gnused, gnome
+, gnugrep, parted, glib, libuuid, pkg-config, gtkmm3, libxml2
+, gpart, hdparm, procps, util-linux, polkit, wrapGAppsHook, substituteAll
+, mtools, dosfstools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gparted";
+  version = "1.5.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gparted/${pname}-${version}.tar.gz";
+    sha256 = "sha256-PJXqJqlECD/x2bF2ObHirZdY3yJdx1H/QHsqaqCSqN4=";
+  };
+
+  # Tries to run `pkexec --version` to get version.
+  # however the binary won't be suid so it returns
+  # an error preventing the program from detection
+  patches = [
+    (substituteAll {
+      src = ./polkit.patch;
+      polkit_version = polkit.version;
+    })
+  ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [ "--disable-doc" ];
+
+  buildInputs = [ parted glib libuuid gtkmm3 libxml2 polkit.bin gnome.adwaita-icon-theme  ];
+  nativeBuildInputs = [ gettext pkg-config wrapGAppsHook ];
+
+  preConfigure = ''
+    # For ITS rules
+    addToSearchPath "XDG_DATA_DIRS" "${polkit.out}/share"
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+       --prefix PATH : "${lib.makeBinPath [ gpart hdparm util-linux procps coreutils gnused gnugrep mtools dosfstools ]}"
+    )
+  '';
+
+  # Doesn't get installed automaticallly if PREFIX != /usr
+  postInstall = ''
+    install -D -m0644 org.gnome.gparted.policy \
+      $out/share/polkit-1/actions/org.gnome.gparted.policy
+  '';
+
+  meta = with lib; {
+    description = "Graphical disk partitioning tool";
+    longDescription = ''
+      GNOME Partition Editor for creating, reorganizing, and deleting disk
+      partitions. GParted enables you to change the partition organization
+      while preserving the partition contents.
+    '';
+    homepage = "https://gparted.org";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    mainProgram = "gparted";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gparted/polkit.patch b/nixpkgs/pkgs/tools/misc/gparted/polkit.patch
new file mode 100644
index 000000000000..a42ed785de94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gparted/polkit.patch
@@ -0,0 +1,12 @@
+diff -ru old/gparted-1.0.0/configure gparted-1.0.0/configure
+--- old/gparted-1.0.0/configure	2019-05-29 12:02:13.000000000 -0400
++++ gparted-1.0.0/configure	2019-08-08 18:09:52.792795781 -0400
+@@ -16145,7 +16145,7 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pkexec >= $PKEXEC_REQUIRED_VERSION" >&5
+ $as_echo_n "checking for pkexec >= $PKEXEC_REQUIRED_VERSION... " >&6; }
+ PKEXEC_REQUIRED_INT=`echo "$PKEXEC_REQUIRED_VERSION" | $AWK -F. '{print $1 * 10000 + $2}'`
+-PKEXEC_VERSION_OUTPUT=`pkexec --version 2> /dev/null` ||
++PKEXEC_VERSION_OUTPUT='pkexec version @polkit_version@' ||
+ 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+ $as_echo "not found" >&6; }
+ if test "x$PKEXEC_VERSION_OUTPUT" != 'x'; then
diff --git a/nixpkgs/pkgs/tools/misc/gpick/default.nix b/nixpkgs/pkgs/tools/misc/gpick/default.nix
new file mode 100644
index 000000000000..0d421212a3d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gpick/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, fetchFromGitHub
+, cmake
+, wrapGAppsHook
+, boost
+, pkg-config
+, gtk3
+, ragel
+, lua
+, fetchpatch
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gpick";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "thezbyg";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Z17YpdAAr2wvDFkrAosyCN6Y/wsFVkiB9IDvXuP9lYo=";
+  };
+
+  patches = [
+    # gpick/cmake/Version.cmake
+    ./dot-version.patch
+
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/archlinux/svntogit-community/1d53a9aace4bb60300e52458bb1577d248cb87cd/trunk/buildfix.diff";
+      hash = "sha256-DnRU90VPyFhLYTk4GPJoiVYadJgtYgjMS4MLgmpYLP0=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config wrapGAppsHook ];
+  buildInputs = [ boost gtk3 ragel lua ];
+
+  meta = with lib; {
+    description = "Advanced color picker written in C++ using GTK+ toolkit";
+    homepage = "http://www.gpick.org/";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.vanilla ];
+    platforms = platforms.linux;
+    mainProgram = "gpick";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gpick/dot-version.patch b/nixpkgs/pkgs/tools/misc/gpick/dot-version.patch
new file mode 100644
index 000000000000..b460fbc98b21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gpick/dot-version.patch
@@ -0,0 +1,10 @@
+diff --git a/.version b/.version
+new file mode 100644
+index 0000000..abc36c9
+--- /dev/null
++++ b/.version
+@@ -0,0 +1,4 @@
++0.3
++0
++dd27232a4dd08cf6271ecc2a7e96da25f8071ed5
++2022-05-08
diff --git a/nixpkgs/pkgs/tools/misc/gradescope-submit/default.nix b/nixpkgs/pkgs/tools/misc/gradescope-submit/default.nix
new file mode 100644
index 000000000000..89e7dc89438c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gradescope-submit/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, ocamlPackages
+}:
+
+ocamlPackages.buildDunePackage rec {
+  pname = "gradescope_submit";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "nmittu";
+    repo = "gradescope-submit";
+    rev = version;
+    hash = "sha256-BVNXipgw0wz3PRGYvur8jrXZw/6i0fZ+MOZHzXzlFOk=";
+  };
+
+  buildInputs = with ocamlPackages; [
+    core
+    core_unix
+    cohttp
+    cohttp-lwt-unix
+    lambdasoup
+    toml
+    yojson
+    lwt_ssl
+  ];
+
+  meta = with lib; {
+    description = "A small script to submit to Gradescope via GitHub";
+    homepage = "https://github.com/nmittu/gradescope-submit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "submit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grafterm/default.nix b/nixpkgs/pkgs/tools/misc/grafterm/default.nix
new file mode 100644
index 000000000000..a15ab6e5ed0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grafterm/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "grafterm";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "slok";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-0pM36rAmwx/P1KAlmVaGoSj8eb9JucYycNC2R867dVo=";
+  };
+
+  vendorHash = "sha256-veg5B68AQhkSZg8YA/e4FbqJNG0YGwnUQFsAdscz0QI=";
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Command-line tool for rendering metrics dashboards inspired by Grafana";
+    homepage = "https://github.com/slok/grafterm";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ arikgrahl ];
+    mainProgram = "grafterm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grass-sass/default.nix b/nixpkgs/pkgs/tools/misc/grass-sass/default.nix
new file mode 100644
index 000000000000..457822052d01
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grass-sass/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "grass";
+  version = "0.13.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-JFfNj+IMwIZ+DkaCy3mobSAaq4YphhMpGkx/P33UdJE=";
+  };
+
+  cargoHash = "sha256-WzG+yOjxTX2ms2JMpZJYcaKZw0gc9g6/OUe/T7oyK20=";
+
+  # tests require rust nightly
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A Sass compiler written purely in Rust";
+    homepage = "https://github.com/connorskees/grass";
+    changelog = "https://github.com/connorskees/grass/blob/master/CHANGELOG.md#${replaceStrings [ "." ] [ "" ] version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "grass";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/graylog/5.1.nix b/nixpkgs/pkgs/tools/misc/graylog/5.1.nix
new file mode 100644
index 000000000000..2a77925e0b37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/graylog/5.1.nix
@@ -0,0 +1,9 @@
+{ callPackage, lib, ...}:
+let
+  buildGraylog = callPackage ./graylog.nix {};
+in buildGraylog {
+  version = "5.1.11";
+  sha256 = "sha256-xvG9COKMNgHg5zzyCRfXsfrW3C2Gwbdxf8PMXQnJ2yg=";
+  maintainers = [ lib.maintainers.f2k1de ];
+  license = lib.licenses.sspl;
+}
diff --git a/nixpkgs/pkgs/tools/misc/graylog/5.2.nix b/nixpkgs/pkgs/tools/misc/graylog/5.2.nix
new file mode 100644
index 000000000000..e262d84f3f09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/graylog/5.2.nix
@@ -0,0 +1,9 @@
+{ callPackage, lib, ...}:
+let
+  buildGraylog = callPackage ./graylog.nix {};
+in buildGraylog {
+  version = "5.2.4";
+  sha256 = "sha256-TbZMRMLpYlg6wrsC+tDEk8sLYJ1nwJum/rL30CEGQcw=";
+  maintainers = [ lib.maintainers.f2k1de ];
+  license = lib.licenses.sspl;
+}
diff --git a/nixpkgs/pkgs/tools/misc/graylog/graylog.nix b/nixpkgs/pkgs/tools/misc/graylog/graylog.nix
new file mode 100644
index 000000000000..4608d6fa3f57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/graylog/graylog.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, makeWrapper, openjdk11_headless, openjdk17_headless, systemd, nixosTests}:
+
+{ version, sha256, maintainers, license }:
+stdenv.mkDerivation rec {
+  pname = "graylog_${lib.versions.majorMinor version}";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://packages.graylog2.org/releases/graylog/graylog-${version}.tgz";
+    inherit sha256;
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  makeWrapperArgs = [
+    "--set-default" "JAVA_HOME" "${if (lib.versionAtLeast version "5.0") then openjdk17_headless else openjdk11_headless}"
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ systemd ]}"
+  ];
+
+  passthru.tests = { inherit (nixosTests) graylog; };
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r {graylog.jar,bin,plugin} $out
+  '' + lib.optionalString (lib.versionOlder version "4.3") ''
+    cp -r lib $out
+  '' + ''
+    wrapProgram $out/bin/graylogctl $makeWrapperArgs
+  '';
+
+  meta = with lib; {
+    description = "Open source log management solution";
+    homepage    = "https://www.graylog.org/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    inherit license;
+    inherit maintainers;
+    mainProgram = "graylogctl";
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/graylog/plugins.nix b/nixpkgs/pkgs/tools/misc/graylog/plugins.nix
new file mode 100644
index 000000000000..e25aeb39f7aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/graylog/plugins.nix
@@ -0,0 +1,299 @@
+{ lib, stdenv, fetchurl, unzip, graylog-5_1 }:
+
+with lib;
+
+let
+  glPlugin = a@{
+    pluginName,
+    version,
+    installPhase ? ''
+      mkdir -p $out/bin
+      cp $src $out/bin/${pluginName}-${version}.jar
+    '',
+    ...
+  }:
+    stdenv.mkDerivation (a // {
+      inherit installPhase;
+      dontUnpack = true;
+      nativeBuildInputs = [ unzip ];
+      meta = a.meta // {
+        platforms = graylog-5_1.meta.platforms;
+        maintainers = (a.meta.maintainers or []) ++ [ maintainers.fadenb ];
+        sourceProvenance = with sourceTypes; [ binaryBytecode ];
+      };
+    });
+in {
+  aggregates = glPlugin rec {
+    name = "graylog-aggregates-${version}";
+    pluginName = "graylog-plugin-aggregates";
+    version = "2.4.0";
+    src = fetchurl {
+      url = "https://github.com/cvtienhoven/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1c48almnjr0b6nvzagnb9yddqbcjs7yhrd5yc5fx9q7w3vxi50zp";
+    };
+    meta = {
+      homepage = "https://github.com/cvtienhoven/graylog-plugin-aggregates";
+      description = "A plugin that enables users to execute term searches and get notified when the given criteria are met";
+    };
+  };
+  auth_sso = glPlugin rec {
+    name = "graylog-auth-sso-${version}";
+    pluginName = "graylog-plugin-auth-sso";
+    version = "3.3.0";
+    src = fetchurl {
+      url = "https://github.com/Graylog2/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1g47hlld8vzicd47b5i9n2816rbrhv18vjq8gp765c7mdg4a2jn8";
+    };
+    meta = {
+      homepage = "https://github.com/Graylog2/graylog-plugin-auth-sso";
+      description = "SSO support for Graylog through trusted HTTP headers set by load balancers or authentication proxies";
+    };
+  };
+  dnsresolver = glPlugin rec {
+    name = "graylog-dnsresolver-${version}";
+    pluginName = "graylog-plugin-dnsresolver";
+    version = "1.2.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0djlyd4w4mrrqfbrs20j1xw0fygqsb81snz437v9bf80avmcyzg1";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-dnsresolver";
+      description = "Message filter plugin can be used to do DNS lookups for the source field in Graylog messages";
+    };
+  };
+  enterprise-integrations = glPlugin rec {
+    name = "graylog-enterprise-integrations-${version}";
+    pluginName = "graylog-plugin-enterprise-integrations";
+    version = "3.3.9";
+    src = fetchurl {
+      url = "https://downloads.graylog.org/releases/graylog-enterprise-integrations/graylog-enterprise-integrations-plugins-${version}.tgz";
+      sha256 = "0yr2lmf50w8qw5amimmym6y4jxga4d7s7cbiqs5sqzvipgsknbwj";
+    };
+    installPhase = ''
+      mkdir -p $out/bin
+      tar --strip-components=2 -xf $src
+      cp ${pluginName}-${version}.jar $out/bin/${pluginName}-${version}.jar
+    '';
+    meta = {
+      homepage = "https://docs.graylog.org/en/3.3/pages/integrations.html#enterprise";
+      description = "Integrations are tools that help Graylog work with external systems (unfree enterprise integrations)";
+      license = lib.licenses.unfree;
+    };
+  };
+  filter-messagesize = glPlugin rec {
+    name = "graylog-filter-messagesize-${version}";
+    pluginName = "graylog-plugin-filter-messagesize";
+    version = "0.0.2";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1vx62yikd6d3lbwsfiyf9j6kx8drvn4xhffwv27fw5jzhfqr61ji";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-filter-messagesize";
+      description = "Prints out all messages that have an estimated size crossing a configured threshold during processing";
+    };
+  };
+  integrations = glPlugin rec {
+    name = "graylog-integrations-${version}";
+    pluginName = "graylog-plugin-integrations";
+    version = "3.3.9";
+    src = fetchurl {
+      url = "https://downloads.graylog.org/releases/graylog-integrations/graylog-integrations-plugins-${version}.tgz";
+      sha256 = "0q858ffmkinngyqqsaszcrx93zc4fg43ny0xb7vm0p4wd48hjyqc";
+    };
+    installPhase = ''
+      mkdir -p $out/bin
+      tar --strip-components=2 -xf $src
+      cp ${pluginName}-${version}.jar $out/bin/${pluginName}-${version}.jar
+    '';
+    meta = {
+      homepage = "https://github.com/Graylog2/graylog-plugin-integrations";
+      description = "A collection of open source Graylog integrations that will be released together";
+    };
+  };
+  internal-logs = glPlugin rec {
+    name = "graylog-internal-logs-${version}";
+    pluginName = "graylog-plugin-internal-logs";
+    version = "2.4.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1jyy0wkjapv3xv5q957xxv2pcnd4n1yivkvkvg6cx7kv1ip75xwc";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-internal-logs";
+      description = "Graylog plugin to record internal logs of Graylog efficiently instead of sending them over the network";
+    };
+  };
+  ipanonymizer = glPlugin rec {
+    name = "graylog-ipanonymizer-${version}";
+    pluginName = "graylog-plugin-ipanonymizer";
+    version = "1.1.2";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0hd66751hp97ddkn29s1cmjmc2h1nrp431bq7d2wq16iyxxlygri";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-ipanonymizer";
+      description = "A graylog-server plugin that replaces the last octet of IP addresses in messages with xxx";
+    };
+  };
+  jabber = glPlugin rec {
+    name = "graylog-jabber-${version}";
+    pluginName = "graylog-plugin-jabber";
+    version = "2.4.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0zy27q8y0bv7i5nypsfxad4yiw121sbwzd194jsz2w08jhk3skl5";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-jabber";
+      description = "Jabber Alarmcallback Plugin for Graylog";
+    };
+  };
+  metrics = glPlugin rec {
+    name = "graylog-metrics-${version}";
+    pluginName = "graylog-plugin-metrics";
+    version = "1.3.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1v1yzmqp43kxigh3fymdwki7pn21sk2ym3kk4nn4qv4zzkhz59vp";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-metrics";
+      description = "An output plugin for integrating Graphite, Ganglia and StatsD with Graylog";
+    };
+  };
+  mongodb-profiler = glPlugin rec {
+    name = "graylog-mongodb-profiler-${version}";
+    pluginName = "graylog-plugin-mongodb-profiler";
+    version = "2.0.1";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1hadxyawdz234lal3dq5cy3zppl7ixxviw96iallyav83xyi23i8";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-mongodb-profiler";
+      description = "Graylog input plugin that reads MongoDB profiler data";
+    };
+  };
+  pagerduty = glPlugin rec {
+    name = "graylog-pagerduty-${version}";
+    pluginName = "graylog-plugin-pagerduty";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0xhcwfwn7c77giwjilv7k7aijnj9azrjbjgd0r3p6wdrw970f27r";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-pagerduty";
+      description = "An alarm callback plugin for integrating PagerDuty into Graylog";
+    };
+  };
+  redis = glPlugin rec {
+    name = "graylog-redis-${version}";
+    pluginName = "graylog-plugin-redis";
+    version = "0.1.1";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0dfgh6w293ssagas5y0ixwn0vf54i5iv61r5p2q0rbv2da6xvhbw";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-redis";
+      description = "Redis plugin for Graylog";
+    };
+  };
+  slack = glPlugin rec {
+    name = "graylog-slack-${version}";
+    pluginName = "graylog-plugin-slack";
+    version = "3.1.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "067p8g94b007gypwyyi8vb6qhwdanpk8ah57abik54vv14jxg94k";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-slack";
+      description = "Can notify Slack or Mattermost channels about triggered alerts in Graylog (Alarm Callback)";
+    };
+  };
+  smseagle = glPlugin rec {
+    name = "graylog-smseagle-${version}";
+    pluginName = "graylog-plugin-smseagle";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://bitbucket.org/proximus/smseagle-graylog/raw/b99cfc349aafc7c94d4c2503f7c3c0bde67684d1/jar/graylog-plugin-smseagle-1.0.1.jar";
+      sha256 = "sha256-rvvftzPskXRGs1Z9dvd/wFbQoIoNtEQIFxMIpSuuvf0=";
+    };
+    meta = {
+      homepage = "https://bitbucket.org/proximus/smseagle-graylog/";
+      description = "Alert/notification callback plugin for integrating the SMSEagle into Graylog";
+      license = lib.licenses.gpl3Only;
+    };
+  };
+  snmp = glPlugin rec {
+    name = "graylog-snmp-${version}";
+    pluginName = "graylog-plugin-snmp";
+    version = "0.3.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1hkaklwzcsvqq45b98chwqxqdgnnbj4dg68agsll13yq4zx37qpp";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-snmp";
+      description = "Graylog plugin to receive SNMP traps";
+    };
+  };
+  spaceweather = glPlugin rec {
+    name = "graylog-spaceweather-${version}";
+    pluginName = "graylog-plugin-spaceweather";
+    version = "1.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/spaceweather-input.jar";
+      sha256 = "1mwqy3fhyy4zdwyrzvbr565xwf96xs9d3l70l0khmrm848xf8wz4";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-spaceweather";
+      description = "Correlate proton density to the response time of your app and the ion temperature to your exception rate";
+    };
+  };
+  splunk = glPlugin rec {
+    name = "graylog-splunk-${version}";
+    pluginName = "graylog-plugin-splunk";
+    version = "0.5.0-rc.1";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/graylog-plugin-splunk/releases/download/0.5.0-rc.1/graylog-plugin-splunk-0.5.0-rc.1.jar";
+      sha256 = "sha256-EwF/Dc8GmMJBTxH9xGZizUIMTGSPedT4bprorN6X9Os=";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-splunk";
+      description = "Graylog output plugin that forwards one or more streams of data to Splunk via TCP";
+      license = lib.licenses.gpl3Only;
+    };
+  };
+  twiliosms = glPlugin rec {
+    name = "graylog-twiliosms-${version}";
+    pluginName = "graylog-plugin-twiliosms";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0kwfv1zfj0fmxh9i6413bcsaxrn1vdwrzb6dphvg3dx27wxn1j1a";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-twiliosms";
+      description = "An alarm callback plugin for integrating the Twilio SMS API into Graylog";
+    };
+  };
+  twitter = glPlugin rec {
+    name = "graylog-twitter-${version}";
+    pluginName = "graylog-plugin-twitter";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1pi34swy9nzq35a823zzvqrjhb6wsg302z31vk2y656sw6ljjxyh";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-twitter";
+      description = "Graylog input plugin that reads Twitter messages based on keywords in realtime";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grc/default.nix b/nixpkgs/pkgs/tools/misc/grc/default.nix
new file mode 100644
index 000000000000..e8f4282fb193
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grc/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, fetchFromGitHub
+, buildPythonApplication
+, installShellFiles
+}:
+
+buildPythonApplication rec {
+  pname = "grc";
+  version = "1.13";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "garabik";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1h0h88h484a9796hai0wasi1xmjxxhpyxgixn6fgdyc5h69gv8nl";
+  };
+
+  postPatch = ''
+    for f in grc grcat; do
+      substituteInPlace $f \
+        --replace /usr/local/ $out/
+    done
+
+    # Support for absolute store paths.
+    substituteInPlace grc.conf \
+      --replace "^([/\w\.]+\/)" "^([/\w\.\-]+\/)"
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+
+    ./install.sh "$out" "$out"
+    installShellCompletion --zsh --name _grc _grc
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "http://kassiopeia.juls.savba.sk/~garabik/software/grc.html";
+    description = "A generic text colouriser";
+    longDescription = ''
+      Generic Colouriser is yet another colouriser (written in Python) for
+      beautifying your logfiles or output of commands.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ azahi lovek323 AndersonTorres peterhoeg ];
+    platforms = platforms.unix;
+    mainProgram = "grc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grex/default.nix b/nixpkgs/pkgs/tools/misc/grex/default.nix
new file mode 100644
index 000000000000..2a6ca6031e3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grex/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "grex";
+  version = "1.4.4";
+
+  src = fetchFromGitHub {
+    owner = "pemistahl";
+    repo = "grex";
+    rev = "v${version}";
+    hash = "sha256-ef1eUxeCznIgXLoywwJmnLkTGdW1AmGwCin9DLU9kAs=";
+  };
+
+  cargoHash = "sha256-XLH+fS3fwRcWmVOzTjUacV010N37Oofs9Tbixdka1qY=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/grex --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "A command-line tool for generating regular expressions from user-provided test cases";
+    homepage = "https://github.com/pemistahl/grex";
+    changelog = "https://github.com/pemistahl/grex/releases/tag/v${version}";
+    license = licenses.asl20;
+    mainProgram = "grex";
+    maintainers = with maintainers; [ SuperSandro2000 mfrw ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grit/default.nix b/nixpkgs/pkgs/tools/misc/grit/default.nix
new file mode 100644
index 000000000000..448224c9e9ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grit/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "grit";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "climech";
+    repo = "grit";
+    rev = "v${version}";
+    sha256 = "sha256-c8wBwmXFjpst6UxL5zmTxMR4bhzpHYljQHiJFKiNDms=";
+  };
+
+  vendorHash = "sha256-iMMkjJ5dnlr0oSCifBQPWkInQBCp1bh23s+BcKzDNCg=";
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A multitree-based personal task manager";
+    homepage = "https://github.com/climech/grit";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+    mainProgram = "grit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grizzly/default.nix b/nixpkgs/pkgs/tools/misc/grizzly/default.nix
new file mode 100644
index 000000000000..d16356d6d5ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grizzly/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "grizzly";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "grafana";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-d/DUazWBT96+dnwVXo667RHALUM2FHxXoI54fFU2HZw=";
+  };
+
+  vendorHash = "sha256-8myfB2LKDPUCFV9GBSXrBo9E+WrCOCm0ZHKTQ1dEb9U=";
+
+  subPackages = [ "cmd/grr" ];
+
+  meta = with lib; {
+    description = "A utility for managing Jsonnet dashboards against the Grafana API";
+    homepage = "https://grafana.github.io/grizzly/";
+    license = licenses.asl20;
+    maintainers = with lib.maintainers; [ nrhtr ];
+    platforms = platforms.unix;
+    mainProgram = "grr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grub/add-hidden-menu-entries.patch b/nixpkgs/pkgs/tools/misc/grub/add-hidden-menu-entries.patch
new file mode 100644
index 000000000000..836a9853708f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/add-hidden-menu-entries.patch
@@ -0,0 +1,204 @@
+diff --git a/grub-core/commands/legacycfg.c b/grub-core/commands/legacycfg.c
+index e9e9d94ef..54e08a1b4 100644
+--- a/grub-core/commands/legacycfg.c
++++ b/grub-core/commands/legacycfg.c
+@@ -143,7 +143,7 @@ legacy_file (const char *filename)
+ 	    args[0] = oldname;
+ 	    grub_normal_add_menu_entry (1, args, NULL, NULL, "legacy",
+ 					NULL, NULL,
+-					entrysrc, 0);
++					entrysrc, 0, 0);
+ 	    grub_free (args);
+ 	    entrysrc[0] = 0;
+ 	    grub_free (oldname);
+@@ -205,7 +205,7 @@ legacy_file (const char *filename)
+ 	}
+       args[0] = entryname;
+       grub_normal_add_menu_entry (1, args, NULL, NULL, NULL,
+-				  NULL, NULL, entrysrc, 0);
++				  NULL, NULL, entrysrc, 0, 0);
+       grub_free (args);
+     }
+ 
+diff --git a/grub-core/commands/menuentry.c b/grub-core/commands/menuentry.c
+index 720e6d8ea..50632ccce 100644
+--- a/grub-core/commands/menuentry.c
++++ b/grub-core/commands/menuentry.c
+@@ -78,7 +78,7 @@ grub_normal_add_menu_entry (int argc, const char **args,
+ 			    char **classes, const char *id,
+ 			    const char *users, const char *hotkey,
+ 			    const char *prefix, const char *sourcecode,
+-			    int submenu)
++			    int submenu, int hidden)
+ {
+   int menu_hotkey = 0;
+   char **menu_args = NULL;
+@@ -188,8 +188,11 @@ grub_normal_add_menu_entry (int argc, const char **args,
+   (*last)->args = menu_args;
+   (*last)->sourcecode = menu_sourcecode;
+   (*last)->submenu = submenu;
++  (*last)->hidden = hidden;
++
++  if (!hidden)
++    menu->size++;
+ 
+-  menu->size++;
+   return GRUB_ERR_NONE;
+ 
+  fail:
+@@ -286,7 +289,8 @@ grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args)
+ 				       users,
+ 				       ctxt->state[2].arg, 0,
+ 				       ctxt->state[3].arg,
+-				       ctxt->extcmd->cmd->name[0] == 's');
++				       ctxt->extcmd->cmd->name[0] == 's',
++               ctxt->extcmd->cmd->name[0] == 'h');
+ 
+   src = args[argc - 1];
+   args[argc - 1] = NULL;
+@@ -303,7 +307,8 @@ grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args)
+ 				  ctxt->state[0].args, ctxt->state[4].arg,
+ 				  users,
+ 				  ctxt->state[2].arg, prefix, src + 1,
+-				  ctxt->extcmd->cmd->name[0] == 's');
++				  ctxt->extcmd->cmd->name[0] == 's',
++          ctxt->extcmd->cmd->name[0] == 'h');
+ 
+   src[len - 1] = ch;
+   args[argc - 1] = src;
+@@ -311,7 +316,7 @@ grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args)
+   return r;
+ }
+ 
+-static grub_extcmd_t cmd, cmd_sub;
++static grub_extcmd_t cmd, cmd_sub, cmd_hidden;
+ 
+ void
+ grub_menu_init (void)
+@@ -327,6 +332,12 @@ grub_menu_init (void)
+ 				  | GRUB_COMMAND_FLAG_EXTRACTOR,
+ 				  N_("BLOCK"), N_("Define a submenu."),
+ 				  options);
++  cmd_hidden = grub_register_extcmd ("hiddenentry", grub_cmd_menuentry,
++                  GRUB_COMMAND_FLAG_BLOCKS
++                  | GRUB_COMMAND_ACCEPT_DASH
++                  | GRUB_COMMAND_FLAG_EXTRACTOR,
++                  N_("BLOCK"), N_("Define a hidden menu entry."),
++                  options);
+ }
+ 
+ void
+diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c
+index 6a90e091f..4236f55bc 100644
+--- a/grub-core/normal/menu.c
++++ b/grub-core/normal/menu.c
+@@ -37,6 +37,8 @@
+    entry failing to boot.  */
+ #define DEFAULT_ENTRY_ERROR_DELAY_MS  2500
+ 
++#define MENU_INCLUDE_HIDDEN 0x10000
++
+ grub_err_t (*grub_gfxmenu_try_hook) (int entry, grub_menu_t menu,
+ 				     int nested) = NULL;
+ 
+@@ -80,8 +82,20 @@ grub_menu_get_entry (grub_menu_t menu, int no)
+ {
+   grub_menu_entry_t e;
+ 
+-  for (e = menu->entry_list; e && no > 0; e = e->next, no--)
+-    ;
++  if (no & MENU_INCLUDE_HIDDEN) {
++    no &= ~MENU_INCLUDE_HIDDEN;
++
++    for (e = menu->entry_list; e && no > 0; e = e->next, no--)
++      ;
++  } else {
++    for (e = menu->entry_list; e && no > 0; e = e->next, no--) {
++      /* Skip hidden entries */
++      while (e && e->hidden)
++        e = e->next;
++    }
++    while (e && e->hidden)
++      e = e->next;
++  }
+ 
+   return e;
+ }
+@@ -93,10 +107,10 @@ get_entry_index_by_hotkey (grub_menu_t menu, int hotkey)
+   grub_menu_entry_t entry;
+   int i;
+ 
+-  for (i = 0, entry = menu->entry_list; i < menu->size;
++  for (i = 0, entry = menu->entry_list; entry;
+        i++, entry = entry->next)
+     if (entry->hotkey == hotkey)
+-      return i;
++      return i | MENU_INCLUDE_HIDDEN;
+ 
+   return -1;
+ }
+@@ -509,6 +523,10 @@ get_entry_number (grub_menu_t menu, const char *name)
+       grub_menu_entry_t e = menu->entry_list;
+       int i;
+ 
++       /* Skip hidden entries */
++      while (e && e->hidden)
++        e = e->next;
++
+       grub_errno = GRUB_ERR_NONE;
+ 
+       for (i = 0; e; i++)
+@@ -520,6 +538,10 @@ get_entry_number (grub_menu_t menu, const char *name)
+ 	      break;
+ 	    }
+ 	  e = e->next;
++
++    /* Skip hidden entries */
++    while (e && e->hidden)
++      e = e->next;
+ 	}
+ 
+       if (! e)
+diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c
+index b1321eb26..d2e46cac8 100644
+--- a/grub-core/normal/menu_text.c
++++ b/grub-core/normal/menu_text.c
+@@ -289,7 +289,11 @@ print_entries (grub_menu_t menu, const struct menu_viewer_data *data)
+       print_entry (data->geo.first_entry_y + i, data->offset == i,
+ 		   e, data);
+       if (e)
+-	e = e->next;
++	      e = e->next;
++
++      /* Skip hidden entries */
++      while (e && e->hidden)
++        e = e->next;
+     }
+ 
+   grub_term_gotoxy (data->term,
+diff --git a/include/grub/menu.h b/include/grub/menu.h
+index ee2b5e910..eb8a86ba9 100644
+--- a/include/grub/menu.h
++++ b/include/grub/menu.h
+@@ -58,6 +58,8 @@ struct grub_menu_entry
+ 
+   int submenu;
+ 
++  int hidden;
++
+   /* The next element.  */
+   struct grub_menu_entry *next;
+ };
+diff --git a/include/grub/normal.h b/include/grub/normal.h
+index 218cbabcc..bcb412466 100644
+--- a/include/grub/normal.h
++++ b/include/grub/normal.h
+@@ -145,7 +145,7 @@ grub_normal_add_menu_entry (int argc, const char **args, char **classes,
+ 			    const char *id,
+ 			    const char *users, const char *hotkey,
+ 			    const char *prefix, const char *sourcecode,
+-			    int submenu);
++			    int submenu, int hidden);
+ 
+ grub_err_t
+ grub_normal_set_password (const char *user, const char *password);
diff --git a/nixpkgs/pkgs/tools/misc/grub/default.nix b/nixpkgs/pkgs/tools/misc/grub/default.nix
new file mode 100644
index 000000000000..8f1ff2625d36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/default.nix
@@ -0,0 +1,214 @@
+{ lib, stdenv, runCommand, fetchFromSavannah, fetchpatch, flex, bison, python3, autoconf, automake, libtool, bash
+, rsync, gettext, ncurses, libusb-compat-0_1, freetype, qemu, lvm2, unifont, pkg-config
+, buildPackages
+, nixosTests
+, fuse # only needed for grub-mount
+, runtimeShell
+, zfs ? null
+, efiSupport ? false
+, zfsSupport ? false
+, xenSupport ? false
+, kbdcompSupport ? false, ckbcomp
+}:
+
+let
+  pcSystems = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "i386";
+  };
+
+  efiSystemsBuild = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "x86_64";
+    armv7l-linux.target = "arm";
+    aarch64-linux.target = "aarch64";
+    riscv32-linux.target = "riscv32";
+    riscv64-linux.target = "riscv64";
+  };
+
+  # For aarch64, we need to use '--target=aarch64-efi' when building,
+  # but '--target=arm64-efi' when installing. Insanity!
+  efiSystemsInstall = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "x86_64";
+    armv7l-linux.target = "arm";
+    aarch64-linux.target = "arm64";
+    riscv32-linux.target = "riscv32";
+    riscv64-linux.target = "riscv64";
+  };
+
+  canEfi = lib.any (system: stdenv.hostPlatform.system == system) (lib.mapAttrsToList (name: _: name) efiSystemsBuild);
+  inPCSystems = lib.any (system: stdenv.hostPlatform.system == system) (lib.mapAttrsToList (name: _: name) pcSystems);
+
+  gnulib = fetchFromSavannah {
+    repo = "gnulib";
+    # NOTE: keep in sync with bootstrap.conf!
+    rev = "9f48fb992a3d7e96610c4ce8be969cff2d61a01b";
+    hash = "sha256-mzbF66SNqcSlI+xmjpKpNMwzi13yEWoc1Fl7p4snTto=";
+  };
+
+  src = fetchFromSavannah {
+    repo = "grub";
+    rev = "grub-2.12";
+    hash = "sha256-lathsBb2f7urh8R86ihpTdwo3h1hAHnRiHd5gCLVpBc=";
+  };
+
+  # HACK: the translations are stored on a different server,
+  # not versioned and not included in the git repo, so fetch them
+  # and hope they don't change often
+  locales = runCommand "grub-locales" {
+    nativeBuildInputs = [rsync];
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "sha256-XzW2e7Xe7Pi297eV/fD2B/6uONEz9UjL2EHDCY0huTA=";
+  }
+  ''
+    mkdir -p po
+    ${src}/linguas.sh
+
+    mv po $out
+  '';
+in (
+
+assert efiSupport -> canEfi;
+assert zfsSupport -> zfs != null;
+assert !(efiSupport && xenSupport);
+
+stdenv.mkDerivation rec {
+  pname = "grub";
+  version = "2.12";
+  inherit src;
+
+  patches = [
+    ./fix-bash-completion.patch
+    ./add-hidden-menu-entries.patch
+  ];
+
+  postPatch = if kbdcompSupport then ''
+    sed -i util/grub-kbdcomp.in -e 's@\bckbcomp\b@${ckbcomp}/bin/ckbcomp@'
+  '' else ''
+    echo '#! ${runtimeShell}' > util/grub-kbdcomp.in
+    echo 'echo "Compile grub2 with { kbdcompSupport = true; } to enable support for this command."' >> util/grub-kbdcomp.in
+  '';
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ bison flex python3 pkg-config gettext freetype autoconf automake ];
+  buildInputs = [ ncurses libusb-compat-0_1 freetype lvm2 fuse libtool bash ]
+    ++ lib.optional doCheck qemu
+    ++ lib.optional zfsSupport zfs;
+
+  strictDeps = true;
+
+  hardeningDisable = [ "all" ];
+
+  separateDebugInfo = !xenSupport;
+
+  preConfigure =
+    '' for i in "tests/util/"*.in
+       do
+         sed -i "$i" -e's|/bin/bash|${stdenv.shell}|g'
+       done
+
+       # Apparently, the QEMU executable is no longer called
+       # `qemu-system-i386', even on i386.
+       #
+       # In addition, use `-nodefaults' to avoid errors like:
+       #
+       #  chardev: opening backend "stdio" failed
+       #  qemu: could not open serial device 'stdio': Invalid argument
+       #
+       # See <http://www.mail-archive.com/qemu-devel@nongnu.org/msg22775.html>.
+       sed -i "tests/util/grub-shell.in" \
+           -e's/qemu-system-i386/qemu-system-x86_64 -nodefaults/g'
+
+      unset CPP # setting CPP intereferes with dependency calculation
+
+      patchShebangs .
+
+      GNULIB_REVISION=$(. bootstrap.conf; echo $GNULIB_REVISION)
+      if [ "$GNULIB_REVISION" != ${gnulib.rev} ]; then
+        echo "This version of GRUB requires a different gnulib revision!"
+        echo "We have: ${gnulib.rev}"
+        echo "GRUB needs: $GNULIB_REVISION"
+        exit 1
+      fi
+
+      cp -f --no-preserve=mode ${locales}/* po
+
+      ./bootstrap --no-git --gnulib-srcdir=${gnulib}
+
+      substituteInPlace ./configure --replace '/usr/share/fonts/unifont' '${unifont}/share/fonts'
+    '';
+
+  postConfigure = ''
+    # make sure .po files are up to date to workaround
+    # parallel `msgmerge --update` on autogenerated .po files:
+    #   https://github.com/NixOS/nixpkgs/pull/248747#issuecomment-1676301670
+    make dist
+  '';
+
+  configureFlags = [
+    "--enable-grub-mount" # dep of os-prober
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # grub doesn't do cross-compilation as usual and tries to use unprefixed
+    # tools to target the host. Provide toolchain information explicitly for
+    # cross builds.
+    #
+    # Ref: # https://github.com/buildroot/buildroot/blob/master/boot/grub2/grub2.mk#L108
+    "TARGET_CC=${stdenv.cc.targetPrefix}cc"
+    "TARGET_NM=${stdenv.cc.targetPrefix}nm"
+    "TARGET_OBJCOPY=${stdenv.cc.targetPrefix}objcopy"
+    "TARGET_RANLIB=${stdenv.cc.targetPrefix}ranlib"
+    "TARGET_STRIP=${stdenv.cc.targetPrefix}strip"
+  ] ++ lib.optional zfsSupport "--enable-libzfs"
+    ++ lib.optionals efiSupport [ "--with-platform=efi" "--target=${efiSystemsBuild.${stdenv.hostPlatform.system}.target}" "--program-prefix=" ]
+    ++ lib.optionals xenSupport [ "--with-platform=xen" "--target=${efiSystemsBuild.${stdenv.hostPlatform.system}.target}"];
+
+  # save target that grub is compiled for
+  grubTarget = if efiSupport
+               then "${efiSystemsInstall.${stdenv.hostPlatform.system}.target}-efi"
+               else lib.optionalString inPCSystems "${pcSystems.${stdenv.hostPlatform.system}.target}-pc";
+
+  doCheck = false;
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    # Avoid a runtime reference to gcc
+    sed -i $out/lib/grub/*/modinfo.sh -e "/grub_target_cppflags=/ s|'.*'|' '|"
+    # just adding bash to buildInputs wasn't enough to fix the shebang
+    substituteInPlace $out/lib/grub/*/modinfo.sh \
+      --replace ${buildPackages.bash} "/usr/bin/bash"
+  '';
+
+  passthru.tests = {
+    nixos-grub = nixosTests.grub;
+    nixos-install-simple = nixosTests.installer.simple;
+    nixos-install-grub-uefi = nixosTests.installer.simpleUefiGrub;
+    nixos-install-grub-uefi-spec = nixosTests.installer.simpleUefiGrubSpecialisation;
+  };
+
+  meta = with lib; {
+    description = "GNU GRUB, the Grand Unified Boot Loader";
+
+    longDescription =
+      '' GNU GRUB is a Multiboot boot loader. It was derived from GRUB, GRand
+         Unified Bootloader, which was originally designed and implemented by
+         Erich Stefan Boleyn.
+
+         Briefly, the boot loader is the first software program that runs when a
+         computer starts.  It is responsible for loading and transferring
+         control to the operating system kernel software (such as the Hurd or
+         the Linux).  The kernel, in turn, initializes the rest of the
+         operating system (e.g., GNU).
+      '';
+
+    homepage = "https://www.gnu.org/software/grub/";
+
+    license = licenses.gpl3Plus;
+
+    platforms = platforms.gnu ++ platforms.linux;
+
+    maintainers = [ maintainers.samueldr ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch b/nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch
new file mode 100644
index 000000000000..97cecdce373f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch
@@ -0,0 +1,24 @@
+diff -ubr grub-2.00-orig/util/bash-completion.d/grub-completion.bash.in grub-2.00/util/bash-completion.d/grub-completion.bash.in
+--- grub-2.00-orig/util/bash-completion.d/grub-completion.bash.in	2012-10-16 19:02:36.342733957 +0200
++++ grub-2.00/util/bash-completion.d/grub-completion.bash.in	2012-10-16 19:04:48.262733941 +0200
+@@ -17,6 +17,12 @@
+ # along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ # bash completion for grub
+ 
++have()
++{
++    unset -v have
++    _have $1 && have=yes
++}
++
+ __grub_dir() {
+     local i c=1 boot_dir
+ 
+@@ -479,6 +485,7 @@
+ have ${__grub_script_check_program} && \
+  complete -F _grub_script_check -o filenames ${__grub_script_check_program}
+ 
++unset -f have
+ 
+ # Local variables:
+ # mode: shell-script
diff --git a/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg
new file mode 100644
index 000000000000..e9883149ab5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg
@@ -0,0 +1 @@
+normal (memdisk)/grub.cfg
diff --git a/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg
new file mode 100644
index 000000000000..69115b7101c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg
@@ -0,0 +1,10 @@
+# The parentheses around ${root} here to match Grub's config file syntax
+if search -s -f /boot/grub/grub.cfg ; then
+        echo "Reading (${root})/boot/grub/grub.cfg"
+	configfile /boot/grub/grub.cfg
+fi
+
+if search -s -f /grub/grub.cfg ; then
+	echo "Reading (${root})/grub/grub.cfg"
+	configfile /grub/grub.cfg
+fi
diff --git a/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix
new file mode 100644
index 000000000000..b6883e570802
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, grub2_xen }:
+
+let
+  efiSystemsBuild = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "x86_64";
+    armv7l-linux.target = "arm";
+    aarch64-linux.target = "aarch64";
+    riscv32-linux.target = "riscv32";
+    riscv64-linux.target = "riscv64";
+  };
+
+in (
+
+stdenv.mkDerivation rec {
+  name = "pvgrub-image";
+
+  configs = ./configs;
+
+  buildInputs = [ grub2_xen ];
+
+  buildCommand = ''
+    cp "${configs}"/* .
+    tar -cf memdisk.tar grub.cfg
+    # We include all modules except all_video.mod as otherwise grub will fail printing "no symbol table"
+    # if we include it.
+    grub-mkimage -O "${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen" -c grub-bootstrap.cfg \
+      -m memdisk.tar -o "grub-${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen.bin" \
+      $(ls "${grub2_xen}/lib/grub/${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen/" |grep 'mod''$'|grep -v '^all_video\.mod''$')
+    mkdir -p "$out/lib/grub-xen"
+    cp "grub-${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen.bin" $out/lib/grub-xen/
+  '';
+
+  meta = with lib; {
+    description = "PvGrub image for use for booting PV Xen guests";
+
+    longDescription =
+      '' This package provides a PvGrub image for booting Para-Virtualized (PV)
+         Xen guests
+      '';
+
+    platforms = platforms.gnu ++ platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/grub4dos/default.nix b/nixpkgs/pkgs/tools/misc/grub4dos/default.nix
new file mode 100644
index 000000000000..f00720af15ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub4dos/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, nasm }:
+
+let arch =
+  if stdenv.isi686 then "i386"
+  else if stdenv.isx86_64 then "x86_64"
+  else throw "Unknown architecture";
+in stdenv.mkDerivation {
+  pname = "grub4dos";
+  version = "0.4.6a-2019-05-12";
+
+  src = fetchFromGitHub {
+    owner = "chenall";
+    repo = "grub4dos";
+    rev = "e8224a2d20760139ffaeafa07838e2c3c54de783";
+    sha256 = "0i7n71za43qnlsxfvjrv1z5g1w5jl9snpbnas7rw97rry7cgyswf";
+  };
+
+  nativeBuildInputs = [ nasm ];
+
+  hardeningDisable = [ "stackprotector" ];
+
+  configureFlags = [ "--host=${arch}-pc-linux-gnu" ];
+
+  postInstall = ''
+    mv $out/lib/grub/${arch}-pc/* $out/lib/grub
+    rmdir $out/lib/grub/${arch}-pc
+    chmod +x $out/lib/grub/bootlace.com
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  # make[2]: *** No rule to make target 'pre_stage2_fullsize', needed by 'all-am'.  Stop.
+  enableParallelBuilding = false;
+
+  meta = with lib; {
+    homepage = "http://grub4dos.chenall.net/";
+    description = "GRUB for DOS is the dos extension of GRUB";
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    # Needs a port to modern binutils:
+    #   https://github.com/chenall/grub4dos/issues/160
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix b/nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix
new file mode 100644
index 000000000000..a1c163f6784e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix
@@ -0,0 +1,47 @@
+{ fetchurl, lib, stdenv, smartmontools, autoreconfHook, gettext, gtkmm3, pkg-config, wrapGAppsHook, pcre-cpp, gnome }:
+
+stdenv.mkDerivation rec {
+  pname = "gsmartcontrol";
+  version = "1.1.4";
+
+  src = fetchurl {
+    url = "https://github.com/ashaduri/gsmartcontrol/releases/download/v${version}/gsmartcontrol-${version}.tar.bz2";
+    sha256 = "sha256-/ECfK4qEzEC7ED1sgkAbnUwBgtWjsiPJOVnHrWYZGEc=";
+  };
+
+  patches = [
+    ./fix-paths.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace data/org.gsmartcontrol.policy --replace "/usr/sbin" $out/bin
+  '';
+
+  nativeBuildInputs = [ autoreconfHook gettext pkg-config wrapGAppsHook ];
+  buildInputs = [ gtkmm3 pcre-cpp gnome.adwaita-icon-theme ];
+
+  enableParallelBuilding = true;
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : "${lib.makeBinPath [ smartmontools ]}"
+    )
+  '';
+
+  meta = {
+    description = "Hard disk drive health inspection tool";
+    longDescription = ''
+      GSmartControl is a graphical user interface for smartctl (from
+      smartmontools package), which is a tool for querying and controlling
+      SMART (Self-Monitoring, Analysis, and Reporting Technology) data on
+      modern hard disk drives.
+
+      It allows you to inspect the drive's SMART data to determine its health,
+      as well as run various tests on it.
+    '';
+    homepage = "https://gsmartcontrol.shaduri.dev/";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [qknight];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch b/nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch
new file mode 100644
index 000000000000..b8ec19eb2563
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch
@@ -0,0 +1,33 @@
+diff --git a/data/gsmartcontrol-root.in b/data/gsmartcontrol-root.in
+--- a/data/gsmartcontrol-root.in
++++ b/data/gsmartcontrol-root.in
+@@ -8,7 +8,7 @@
+ # Run gsmartcontrol with root, asking for root password first.
+ # export GSMARTCONTROL_SU to override a su command (e.g. "kdesu -c").
+ 
+-EXEC_BIN="@prefix@/sbin/gsmartcontrol";
++EXEC_BIN="@prefix@/bin/gsmartcontrol";
+ prog_name="gsmartcontrol"
+ 
+ 
+@@ -118,7 +118,7 @@
+ # Add @prefix@/sbin as well (freebsd seems to require it).
+ # Note that beesu won't show a GUI login box if /usr/sbin is before /usr/bin,
+ # so add it first as well.
+-EXTRA_PATHS="/usr/bin:/usr/sbin:/usr/local/sbin:@prefix@/sbin";
++EXTRA_PATHS="/usr/bin:/usr/sbin:/usr/local/sbin:@prefix@/bin";
+ export PATH="$EXTRA_PATHS:$PATH"
+ 
+ 
+diff --git a/src/Makefile.am b/src/Makefile.am
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -24,7 +24,7 @@
+ # endif
+ 
+ 
+-sbin_PROGRAMS = gsmartcontrol
++bin_PROGRAMS = gsmartcontrol
+ 
+ gsmartcontrol_LDADD = $(top_builddir)/src/applib/libapplib.a \
+ 	$(top_builddir)/src/libdebug/libdebug.a \
diff --git a/nixpkgs/pkgs/tools/misc/gti/default.nix b/nixpkgs/pkgs/tools/misc/gti/default.nix
new file mode 100644
index 000000000000..9e396f33e6a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gti/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gti";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "rwos";
+    repo = "gti";
+    rev = "v${version}";
+    sha256 = "sha256-DUDCFcaB38Xkp3lLfEhjGC0j430dphXFBVhGzm7/Bp0=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace 'CC=cc' 'CC=${stdenv.cc.targetPrefix}cc'
+  '';
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  installPhase = ''
+    install -D gti $out/bin/gti
+    installManPage gti.6
+    installShellCompletion --cmd gti \
+      --bash completions/gti.bash \
+      --zsh completions/gti.zsh
+  '';
+
+  meta = with lib; {
+    homepage = "https://r-wos.org/hacks/gti";
+    license = licenses.mit;
+    description = "Humorous typo-based git runner; drives a car over the terminal";
+    maintainers = with maintainers; [ fadenb ];
+    platforms = platforms.unix;
+    mainProgram = "gti";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gtkterm/default.nix b/nixpkgs/pkgs/tools/misc/gtkterm/default.nix
new file mode 100644
index 000000000000..85636afb9d38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gtkterm/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchFromGitHub, meson, ninja, pkg-config, gtk3, vte, libgudev, wrapGAppsHook, pcre2 }:
+
+stdenv.mkDerivation rec {
+  pname = "gtkterm";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "Jeija";
+    repo = "gtkterm";
+    rev = version;
+    sha256 = "sha256-4Z+8fs4VEk2+Ci1X3oUuInylTdIbQ5AiPenFqnyNXvc=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    vte
+    libgudev
+    pcre2
+  ];
+
+  meta = with lib; {
+    description = "A simple, graphical serial port terminal emulator";
+    homepage = "https://github.com/Jeija/gtkterm";
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      GTKTerm is a simple, graphical serial port terminal emulator for
+      Linux and possibly other POSIX-compliant operating systems. It
+      can be used to communicate with all kinds of devices with a
+      serial interface, such as embedded computers, microcontrollers,
+      modems, GPS receivers, CNC machines and more.
+    '';
+    maintainers = with maintainers; [ wentasah ];
+    platforms = platforms.linux;
+    mainProgram = "gtkterm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gummy/default.nix b/nixpkgs/pkgs/tools/misc/gummy/default.nix
new file mode 100644
index 000000000000..9d5b473c3b9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gummy/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, testers
+, gummy
+, cmake
+, libX11
+, libXext
+, sdbus-cpp
+, udev
+, coreutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gummy";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "fushko";
+    repo = "gummy";
+    rev = version;
+    sha256 = "sha256-dw2yOXTS61OIe+NOq8MPydhkZvTit13eC7cbL5nFseg=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    libX11
+    libXext
+    sdbus-cpp
+    udev
+  ];
+
+  cmakeFlags = [
+    "-DUDEV_DIR=${placeholder "out"}/lib/udev"
+  ];
+
+  # Fixes the "gummy start" command, without this it cannot find the binary.
+  # Setting this through cmake does not seem to work.
+  postPatch = ''
+    substituteInPlace src/gummy/gummy.cpp \
+      --replace "CMAKE_INSTALL_DAEMON_PATH" "\"${placeholder "out"}/libexec/gummyd\""
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/lib/udev/99-gummy.rules \
+      --replace "/bin/chmod" "${coreutils}/bin/chmod"
+
+    ln -s $out/libexec/gummyd $out/bin/gummyd
+  '';
+
+  passthru.tests.version = testers.testVersion { package = gummy; };
+
+  meta = with lib; {
+    homepage = "https://github.com/Fushko/gummy";
+    description = "Brightness and temperature manager for X11";
+    longDescription = ''
+      CLI screen manager for X11 that allows automatic and manual brightness/temperature adjustments,
+      via backlight (currently only for embedded displays) and gamma. Multiple monitors are supported.
+    '';
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.ivar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gwe/default.nix b/nixpkgs/pkgs/tools/misc/gwe/default.nix
new file mode 100644
index 000000000000..d889230ed228
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gwe/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, wrapGAppsHook
+, pkg-config
+, meson
+, ninja
+, cmake
+, gobject-introspection
+, desktop-file-utils
+, python3
+, gtk3
+, libdazzle
+, libappindicator-gtk3
+, libnotify
+, nvidia_x11
+ }:
+
+let
+ pythonEnv = python3.withPackages (pypkgs: with pypkgs; [
+   injector
+   matplotlib
+   peewee
+   pynvml
+   pygobject3
+   xlib
+   pyxdg
+   requests
+   rx
+   gtk3
+   reactivex
+ ]);
+in stdenv.mkDerivation rec {
+  pname = "gwe";
+  version = "0.15.7";
+
+  src = fetchFromGitLab {
+    owner = "leinardi";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0/VQD3WuSMShsPjydOxVEufBZqVOCTFO3UbJpsy+oLE=";
+  };
+
+  prePatch = ''
+    patchShebangs scripts/{make_local_manifest,meson_post_install}.py
+
+    substituteInPlace gwe/repository/nvidia_repository.py \
+      --replace "from py3nvml import py3nvml" "import pynvml" \
+      --replace "py3nvml.py3nvml" "pynvml" \
+      --replace "py3nvml" "pynvml"
+  '';
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    pkg-config
+    meson
+    ninja
+    cmake
+    gobject-introspection
+    desktop-file-utils
+    pythonEnv
+  ];
+
+  buildInputs = [
+    gtk3
+    libdazzle
+    libappindicator-gtk3
+    libnotify
+  ];
+
+  postInstall = ''
+    mv $out/bin/gwe $out/lib/gwe-bin
+
+    makeWrapper ${pythonEnv}/bin/python $out/bin/gwe \
+      --add-flags "$out/lib/gwe-bin" \
+      --prefix LD_LIBRARY_PATH : "/run/opengl-driver/lib" \
+      --prefix PATH : "${builtins.concatStringsSep ":" [ (lib.makeBinPath [ nvidia_x11 nvidia_x11.settings ]) "/run/wrappers/bin" ]}" \
+      --unset "SHELL" \
+      ''${gappsWrapperArgs[@]}
+  '';
+
+  meta = with lib; {
+    description = "System utility designed to provide information, control the fans and overclock your NVIDIA card";
+    homepage = "https://gitlab.com/leinardi/gwe";
+    platforms = platforms.linux;
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.ivar ];
+    mainProgram = "gwe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/h/default.nix b/nixpkgs/pkgs/tools/misc/h/default.nix
new file mode 100644
index 000000000000..6e4ae6381e75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/h/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, ruby }:
+
+stdenv.mkDerivation rec {
+  pname = "h";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "zimbatm";
+    repo = "h";
+    rev = "v${version}";
+    hash = "sha256-eitUKOo2c1c+SyctkUW/SUb2RCKUoU6nJplfJVdwBSs=";
+  };
+
+  buildInputs = [ ruby ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp h $out/bin/h
+    cp up $out/bin/up
+  '';
+
+  meta = with lib; {
+    description = "faster shell navigation of projects";
+    homepage = "https://github.com/zimbatm/h";
+    license = licenses.mit;
+    maintainers = [ maintainers.zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/h5utils/default.nix b/nixpkgs/pkgs/tools/misc/h5utils/default.nix
new file mode 100644
index 000000000000..f0267608d3a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/h5utils/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, lib
+, hdf5, libpng, libjpeg
+, hdf4 ? null
+, libmatheval ? null
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.13.2";
+  pname = "h5utils";
+
+  # fetchurl is used instead of fetchFromGitHub because the git repo version requires
+  # additional tools to build compared to the tarball release; see the README for details.
+  src = fetchurl {
+    url = "https://github.com/stevengj/h5utils/releases/download/${version}/h5utils-${version}.tar.gz";
+    sha256 = "sha256-7qeFWoI1+st8RU5hEDCY5VZY2g3fS23luCqZLl8CQ1E=";
+  };
+
+  # libdf is an alternative name for libhdf (hdf4)
+  preConfigure = lib.optionalString (hdf4 != null)
+  ''
+    substituteInPlace configure \
+    --replace "-ldf" "-lhdf" \
+  '';
+
+  preBuild = lib.optionalString hdf5.mpiSupport "export CC=${hdf5.mpi}/bin/mpicc";
+
+  buildInputs = with lib; [ hdf5 libjpeg libpng ] ++ optional hdf5.mpiSupport hdf5.mpi
+    ++ optional (hdf4 != null) hdf4
+    ++ optional (libmatheval != null) libmatheval;
+
+  meta = with lib; {
+    description = "A set of utilities for visualization and conversion of scientific data in the free, portable HDF5 format";
+    homepage = "https://github.com/stevengj/h5utils";
+    changelog = "https://github.com/NanoComp/h5utils/releases/tag/${version}";
+    license = with licenses; [ mit gpl2 ];
+    maintainers = with maintainers; [ sfrijters ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/hackertyper/default.nix b/nixpkgs/pkgs/tools/misc/hackertyper/default.nix
new file mode 100644
index 000000000000..da9af1eca922
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hackertyper/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation {
+  pname = "hackertyper";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner  = "Hurricane996";
+    repo   = "Hackertyper";
+    rev    = "8d08e3200c65817bd8c5bd0baa5032919315853b";
+    sha256 = "0shri0srihw9fk027k61qkxr9ikwkn28aaamrhps6lg0vpbqpx2w";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  buildInputs = [ ncurses ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/hackertyper -v
+  '';
+
+  meta = with lib; {
+    description = "A C rewrite of hackertyper.net";
+    homepage = "https://github.com/Hurricane996/Hackertyper";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.marius851000 ];
+    mainProgram = "hackertyper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hacksaw/default.nix b/nixpkgs/pkgs/tools/misc/hacksaw/default.nix
new file mode 100644
index 000000000000..5532fa181f64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hacksaw/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchCrate, rustPlatform, pkg-config, libXrandr, libX11, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hacksaw";
+  version = "1.0.4";
+
+  nativeBuildInputs = [ pkg-config python3 ];
+
+  buildInputs = [ libXrandr libX11 ];
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "1l6i91xb81p1li1j2jm0r2rx8dbzl2yh468cl3dw0lqpqy4i65hx";
+  };
+
+  cargoSha256 = "1rykc06lq3bkblsrj68rbil63yqdnvxkxlppq1w74wf0d6cwjc08";
+
+  meta = with lib; {
+    description = "Lightweight selection tool for usage in screenshot scripts etc";
+    homepage = "https://github.com/neXromancers/hacksaw";
+    license = with licenses; [ mpl20 ];
+    maintainers = with maintainers; [ TethysSvensson ];
+    platforms = platforms.linux;
+    mainProgram = "hacksaw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hakuneko/default.nix b/nixpkgs/pkgs/tools/misc/hakuneko/default.nix
new file mode 100644
index 000000000000..0ad8c5907a70
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hakuneko/default.nix
@@ -0,0 +1,98 @@
+{ autoPatchelfHook
+, dpkg
+, fetchurl
+, makeDesktopItem
+, makeWrapper
+, udev
+, stdenv
+, lib
+, wrapGAppsHook
+, alsa-lib
+, nss
+, nspr
+, systemd
+, xorg
+}:
+let
+  desktopItem = makeDesktopItem {
+    desktopName = "HakuNeko Desktop";
+    genericName = "Manga & Anime Downloader";
+    categories = [ "Network" "FileTransfer" ];
+    exec = "hakuneko";
+    icon = "hakuneko-desktop";
+    name = "hakuneko-desktop";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "hakuneko";
+  version = "6.1.7";
+
+  src = {
+    "x86_64-linux" = fetchurl {
+      url = "https://github.com/manga-download/hakuneko/releases/download/v${version}/hakuneko-desktop_${version}_linux_amd64.deb";
+      sha256 = "06bb17d7a06bb0601053eaaf423f9176f06ff3636cc43ffc024438e1962dcd02";
+    };
+    "i686-linux" = fetchurl {
+      url = "https://github.com/manga-download/hakuneko/releases/download/v${version}/hakuneko-desktop_${version}_linux_i386.deb";
+      sha256 = "32017d26bafffaaf0a83dd6954d3926557014af4022a972371169c56c0e3d98b";
+    };
+  }."${stdenv.hostPlatform.system}";
+
+  dontBuild = true;
+  dontConfigure = true;
+  dontPatchELF = true;
+  dontWrapGApps = true;
+
+  # TODO: migrate off autoPatchelfHook and use nixpkgs' electron
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    makeWrapper
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    nss
+    nspr
+    xorg.libXScrnSaver
+    xorg.libXtst
+    systemd
+  ];
+
+  unpackPhase = ''
+    # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here
+    dpkg --fsys-tarfile $src | tar --extract
+  '';
+
+  installPhase = ''
+    cp -R usr "$out"
+    # Overwrite existing .desktop file.
+    cp "${desktopItem}/share/applications/hakuneko-desktop.desktop" \
+       "$out/share/applications/hakuneko-desktop.desktop"
+  '';
+
+  runtimeDependencies = [
+    (lib.getLib udev)
+  ];
+
+  postFixup = ''
+    makeWrapper $out/lib/hakuneko-desktop/hakuneko $out/bin/hakuneko \
+      "''${gappsWrapperArgs[@]}"
+  '';
+
+  meta = with lib; {
+    description = "Manga & Anime Downloader";
+    homepage = "https://sourceforge.net/projects/hakuneko/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unlicense;
+    maintainers = with maintainers; [
+      nloomans
+    ];
+    platforms = [
+      "x86_64-linux"
+      "i686-linux"
+    ];
+    mainProgram = "hakuneko";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/halp/default.nix b/nixpkgs/pkgs/tools/misc/halp/default.nix
new file mode 100644
index 000000000000..e88e23f7cfe7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/halp/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+, unixtools
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "halp";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "halp";
+    rev = "v${version}";
+    hash = "sha256-SeBponGeQWKjbiS4GL8YA7y92BqLL+ja6ZSKAI3CeRM=";
+  };
+
+  cargoHash = "sha256-/mzbLsIc0PW5yx/m9eq3IWYM6i1MKvmOY+17/Bwjguk=";
+
+  patches = [
+    # patch tests to point to the correct target directory
+    ./fix-target-dir.patch
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  nativeCheckInputs = [
+    unixtools.script
+  ];
+
+  # tests are failing on darwin
+  doCheck = !stdenv.isDarwin;
+
+  checkFlags = [
+    # requires internet access
+    "--skip=helper::docs::cheat::tests::test_fetch_cheat_sheet"
+  ];
+
+  postPatch = ''
+    substituteInPlace src/helper/args/mod.rs \
+      --subst-var-by releaseDir target/${stdenv.hostPlatform.rust.rustcTargetSpec}/$cargoCheckType
+  '';
+
+  preCheck = ''
+    export NO_COLOR=1
+    export OUT_DIR=target
+  '';
+
+  postInstall = ''
+    mkdir -p man completions
+
+    OUT_DIR=man $out/bin/halp-mangen
+    OUT_DIR=completions $out/bin/halp-completions
+
+    installManPage man/halp.1
+    installShellCompletion \
+      completions/halp.{bash,fish} \
+      --zsh completions/_halp
+
+    rm $out/bin/halp-{completions,mangen,test}
+  '';
+
+  meta = with lib; {
+    description = "A CLI tool to get help with CLI tools";
+    homepage = "https://github.com/orhun/halp";
+    changelog = "https://github.com/orhun/halp/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "halp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/halp/fix-target-dir.patch b/nixpkgs/pkgs/tools/misc/halp/fix-target-dir.patch
new file mode 100644
index 000000000000..0bc1c8e3b542
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/halp/fix-target-dir.patch
@@ -0,0 +1,13 @@
+--- a/src/helper/args/mod.rs
++++ b/src/helper/args/mod.rs
+@@ -129,9 +129,7 @@ mod tests {
+ 
+     /// Returns the path of the test binary.
+     fn get_test_bin() -> String {
+-        PathBuf::from(env!("CARGO_MANIFEST_DIR"))
+-            .join("target")
+-            .join("debug")
++        PathBuf::from("@releaseDir@")
+             .join(format!("{}-test", env!("CARGO_PKG_NAME")))
+             .to_string_lossy()
+             .to_string()
diff --git a/nixpkgs/pkgs/tools/misc/handlr/default.nix b/nixpkgs/pkgs/tools/misc/handlr/default.nix
new file mode 100644
index 000000000000..1022763b7540
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/handlr/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, shared-mime-info, libiconv, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "handlr";
+  version = "unstable-2021-08-29";
+
+  src = fetchFromGitHub {
+    owner = "chmln";
+    repo = pname;
+    rev = "90e78ba92d0355cb523abf268858f3123fd81238";
+    sha256 = "sha256-wENhlUBwfNg/r7yMKa1cQI1fbFw+qowwK8EdO912Yys=";
+  };
+
+  cargoSha256 = "sha256-30fSOzWq1CoIabPWGWndi/SaCN/ckxjlbtzuwV8rk6M=";
+
+  nativeBuildInputs = [ installShellFiles shared-mime-info ];
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  preCheck = ''
+    export HOME=$TEMPDIR
+  '';
+
+  postInstall = ''
+    installShellCompletion \
+      --zsh  completions/_handlr \
+      --bash  completions/handlr \
+      --fish completions/handlr.fish
+  '';
+
+  meta = with lib; {
+    description = "Alternative to xdg-open to manage default applications with ease";
+    homepage = "https://github.com/chmln/handlr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mredaelli artturin ];
+    mainProgram = "handlr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hashit/default.nix b/nixpkgs/pkgs/tools/misc/hashit/default.nix
new file mode 100644
index 000000000000..a7bcde7ab5fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hashit/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, nix-update-script, meson, ninja, pkg-config, vala, pantheon, python3, libgee, gtk3, desktop-file-utils, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "hashit";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "artemanufrij";
+    repo = pname;
+    rev = version;
+    sha256 = "1s8fbzg1z2ypn55xg1pfm5xh15waq55fkp49j8rsqiq8flvg6ybf";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    vala
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    libgee
+    pantheon.granite
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A simple app for checking usual checksums - Designed for elementary OS";
+    homepage = "https://github.com/artemanufrij/hashit";
+    license = licenses.gpl2Plus;
+    maintainers = teams.pantheon.members;
+    platforms = platforms.linux;
+    mainProgram = "com.github.artemanufrij.hashit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hashpump/default.nix b/nixpkgs/pkgs/tools/misc/hashpump/default.nix
new file mode 100644
index 000000000000..11b0650d849d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hashpump/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, openssl, lib }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "hashpump";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "bwall";
+    repo = "HashPump";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-xL/1os17agwFtdq0snS3ZJzwJhk22ujxfWLH65IMMEM=";
+  };
+
+  makeFlags = [ "INSTALLLOCATION=${placeholder "out"}/bin/" ];
+
+  buildInputs = [ openssl ];
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    ./hashpump --test
+    runHook postCheck
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = {
+    description = "A tool to exploit the hash length extension attack in various hashing algorithms";
+    homepage = "https://github.com/bwall/HashPump";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ t4ccer ];
+    platforms = lib.platforms.linux;
+    mainProgram = "hashpump";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/haste-client/Gemfile b/nixpkgs/pkgs/tools/misc/haste-client/Gemfile
new file mode 100644
index 000000000000..06dd69c0179e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/haste-client/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'haste'
diff --git a/nixpkgs/pkgs/tools/misc/haste-client/Gemfile.lock b/nixpkgs/pkgs/tools/misc/haste-client/Gemfile.lock
new file mode 100644
index 000000000000..3f395ed9ef82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/haste-client/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    faraday (0.17.3)
+      multipart-post (>= 1.2, < 3)
+    haste (0.2.3)
+      faraday (~> 0.9)
+      json
+    json (2.5.1)
+    multipart-post (2.1.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  haste
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/haste-client/default.nix b/nixpkgs/pkgs/tools/misc/haste-client/default.nix
new file mode 100644
index 000000000000..eb4b6f868294
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/haste-client/default.nix
@@ -0,0 +1,18 @@
+{ lib
+, bundlerApp
+}:
+
+bundlerApp {
+  pname = "haste";
+  gemdir = ./.;
+  exes = [ "haste" ];
+
+  meta = with lib; {
+    description = "Command line interface to the AnyStyle Parser and Finder";
+    homepage    = "https://rubygems.org/gems/haste";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ shamilton ];
+    platforms   = platforms.unix;
+    mainProgram = "haste";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/haste-client/gemset.nix b/nixpkgs/pkgs/tools/misc/haste-client/gemset.nix
new file mode 100644
index 000000000000..e6cbbff11aa6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/haste-client/gemset.nix
@@ -0,0 +1,491 @@
+{
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13aghksmni2sl15y7wfpx6k5l3lfd8j9gdyqi6cbw6jgc7bqyyn2";
+      type = "gem";
+    };
+    version = "0.17.3";
+  };
+  haste = {
+    dependencies = ["faraday" "json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jaq0kvlxwvd0jq9pl707saqnaaal3dis13mqwfjbj121gr4hq4q";
+      type = "gem";
+    };
+    version = "0.2.3";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix b/nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix
new file mode 100644
index 000000000000..1999d9ad0d56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, freeglut, libGL, libGLU }:
+
+stdenv.mkDerivation rec {
+  pname = "hdaps-gl";
+  version = "0.0.7";
+  src = fetchFromGitHub {
+    owner = "linux-thinkpad";
+    repo = "hdaps-gl";
+    rev = version;
+    sha256 = "0jywsrcr1wzkjig5cvz014c3r026sbwscbkv7zh1014lkjm0kyyh";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ freeglut libGL libGLU ];
+
+  meta = with lib; {
+    description = "GL-based laptop model that rotates in real-time via hdaps";
+    homepage = "https://github.com/linux-thinkpad/hdaps-gl";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.symphorien ];
+    mainProgram = "hdaps-gl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch b/nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch
new file mode 100644
index 000000000000..7b0dddc2ae47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch
@@ -0,0 +1,28 @@
+diff -Nuar --exclude '*~' hddtemp-0.3-beta15.orig/src/sata.c hddtemp-0.3-beta15/src/sata.c
+--- hddtemp-0.3-beta15.orig/src/sata.c	2006-05-14 02:09:55.579437498 -0700
++++ hddtemp-0.3-beta15/src/sata.c	2006-05-14 02:06:08.495948437 -0700
+@@ -88,7 +88,9 @@
+     return strdup(_("unknown"));
+   else
+   {
++		//fprintf(stderr,"sata_model1=%s\n",identify + 54);
+     sata_fixstring(identify + 54, 24);
++		//fprintf(stderr,"sata_model2=%s\n",identify + 54);
+     return strdup(identify + 54);
+   }
+ }
+diff -Nuar --exclude '*~' hddtemp-0.3-beta15.orig/src/satacmds.c hddtemp-0.3-beta15/src/satacmds.c
+--- hddtemp-0.3-beta15.orig/src/satacmds.c	2006-05-14 02:09:40.983470339 -0700
++++ hddtemp-0.3-beta15/src/satacmds.c	2006-05-14 02:09:02.319557333 -0700
+@@ -98,7 +98,10 @@
+   /* convert from big-endian to host byte order */
+   for (p = end ; p != s;) {
+     unsigned short *pp = (unsigned short *) (p -= 2);
+-    *pp = ntohs(*pp);
++		char tmp = p[0];
++		p[0] = p[1];
++		p[1] = tmp;
++    //*pp = ntohs(*pp);
+   }
+ 
+   /* strip leading blanks */
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/default.nix b/nixpkgs/pkgs/tools/misc/hddtemp/default.nix
new file mode 100644
index 000000000000..3bdd7e84f3ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl }:
+let
+  db = fetchurl {
+    url = "mirror://savannah/hddtemp/hddtemp.db";
+    sha256 = "1fr6qgns6qv7cr40lic5yqwkkc7yjmmgx8j0z6d93csg3smzhhya";
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "hddtemp";
+  version = "0.3-beta15";
+
+  src = fetchurl {
+    url = "mirror://savannah/hddtemp/hddtemp-${version}.tar.bz2";
+    sha256 = "sha256-YYVBWEBUCT1TvootnoHJcXTzDwCvkcuHAKl+RC1571s=";
+  };
+
+  # from Gentoo
+  patches = [ ./byteswap.patch ./dontwake.patch ./execinfo.patch ./satacmds.patch ];
+
+  configureFlags = [
+    "--with-db-path=${placeholder "out"}/share/${pname}/hddtemp.db"
+  ];
+
+  postInstall = ''
+    install -Dm444 ${db} $out/share/${pname}/hddtemp.db
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Tool for displaying hard disk temperature";
+    homepage = "https://savannah.nongnu.org/projects/hddtemp/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+    mainProgram = "hddtemp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch b/nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch
new file mode 100644
index 000000000000..969da7a70e40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch
@@ -0,0 +1,20 @@
+--- hddtemp-0.3-beta15/src/sata.c	2012-07-01 16:35:01.681708074 +0200
++++ hddtemp-0.3-beta15/src/sata.c	2012-07-01 16:33:58.172109699 +0200
+@@ -125,6 +125,17 @@
+     dsk->fd = -1;
+     return GETTEMP_NOSENSOR;
+   }
++
++  switch(ata_get_powermode(dsk->fd)) {
++  case PWM_STANDBY:
++  case PWM_SLEEPING:
++    if (!wakeup)
++      return GETTEMP_DRIVE_SLEEP;
++  case PWM_UNKNOWN:
++  case PWM_ACTIVE: /* active or idle */
++  default:
++    break;
++  }
+   
+   /* get SMART values */
+   if(sata_enable_smart(dsk->fd) != 0) {
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch b/nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch
new file mode 100644
index 000000000000..1e7239535d4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch
@@ -0,0 +1,21 @@
+--- hddtemp-0.3-beta15/configure.in~	2005-10-17 19:14:19 +0000
++++ hddtemp-0.3-beta15/configure.in	2006-12-11 18:23:22 +0000
+@@ -18,6 +18,7 @@
+ AC_HEADER_STDC
+ AC_CHECK_HEADERS(fcntl.h)
+ AC_CHECK_HEADERS(netinet/in.h)
++AC_CHECK_HEADERS(execinfo.h)
+ AC_CHECK_TYPE(in_addr_t, ,[AC_DEFINE_UNQUOTED([in_addr_t], [uint32_t], [Define to 'uint32_t' if <netinet/in.h> does not define.])], [#include <netinet/in.h>])
+ 
+ # Checks for typedefs, structures, and compiler characteristics.
+--- hddtemp-0.3-beta15/src/backtrace.c-orig	2006-12-11 18:20:41 +0000
++++ hddtemp-0.3-beta15/src/backtrace.c	2006-12-11 18:23:28 +0000
+@@ -18,7 +18,7 @@
+ 
+ #include <features.h>
+ 
+-#if defined(__i386__) && defined(__GLIBC__)
++#ifdef HAS_EXECINFO_H
+ 
+ #include <execinfo.h>
+ 
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch b/nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch
new file mode 100644
index 000000000000..d67e0681f33f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch
@@ -0,0 +1,26 @@
+diff -Naurp hddtemp-0.3-beta15-orig/src/satacmds.c hddtemp-0.3-beta15/src/satacmds.c
+--- hddtemp-0.3-beta15-orig/src/satacmds.c	2007-02-10 14:25:15.000000000 +0100
++++ hddtemp-0.3-beta15/src/satacmds.c	2007-02-10 14:26:53.000000000 +0100
+@@ -54,7 +54,6 @@ int sata_pass_thru(int device, unsigned 
+   unsigned char cdb[16];
+   unsigned char sense[32];
+   int dxfer_direction;
+-  int ret;
+   
+   memset(cdb, 0, sizeof(cdb));
+   cdb[0] = ATA_16;
+@@ -78,13 +77,7 @@ int sata_pass_thru(int device, unsigned 
+     cdb[6] = cmd[1];
+   cdb[14] = cmd[0];
+ 
+-  ret = scsi_SG_IO(device, cdb, sizeof(cdb), buffer, cmd[3] * 512, sense, sizeof(sense), dxfer_direction);
+- 
+-  /* Verify SATA magics */
+-  if (sense[0] != 0x72 || sense[7] != 0x0e || sense[9] != 0x0e || sense[10] != 0x00)
+-    return 1;		  
+-  else 
+-    return ret;
++  return scsi_SG_IO(device, cdb, sizeof(cdb), buffer, cmd[3] * 512, sense, sizeof(sense), dxfer_direction);
+ }
+ 
+ void sata_fixstring(unsigned char *s, int bytecount)
diff --git a/nixpkgs/pkgs/tools/misc/hdf4/darwin-aarch64.patch b/nixpkgs/pkgs/tools/misc/hdf4/darwin-aarch64.patch
new file mode 100644
index 000000000000..cff81e581176
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf4/darwin-aarch64.patch
@@ -0,0 +1,11 @@
+--- a/hdf/src/hdfi.h	2021-06-16 16:31:31.000000000 +1200
++++ b/hdf/src/hdfi.h	2021-06-16 16:42:26.000000000 +1200
+@@ -1343,7 +1343,7 @@
+ #endif /* IA64 */
+ 
+ /* Linux AArch64 */
+-#if defined __aarch64__
++#if defined __aarch64__ && !defined __APPLE__
+ 
+ #ifdef GOT_MACHINE
+ If you get an error on this line more than one machine type has been defined.
diff --git a/nixpkgs/pkgs/tools/misc/hdf4/default.nix b/nixpkgs/pkgs/tools/misc/hdf4/default.nix
new file mode 100644
index 000000000000..2636cb71717b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf4/default.nix
@@ -0,0 +1,148 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchurl
+, fixDarwinDylibNames
+, cmake
+, libjpeg
+, uselibtirpc ? stdenv.isLinux
+, libtirpc
+, zlib
+, szipSupport ? false
+, szip
+, javaSupport ? false
+, jdk
+, fortranSupport ? false
+, gfortran
+, netcdfSupport ? false
+}:
+stdenv.mkDerivation rec {
+  pname = "hdf";
+  version = "4.2.15";
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF/releases/HDF${version}/src/hdf-${version}.tar.bz2";
+    sha256 = "04nbgfxyj5jg4d6sr28162cxbfwqgv0sa7vz1ayzvm8wbbpkbq5x";
+  };
+
+  patches = [
+    # Note that the PPC, SPARC and s390 patches are only needed so the aarch64 patch applies cleanly
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-ppc.patch";
+      sha256 = "0dbbfpsvvqzy9zyfv38gd81zzc44gxjib9sd8scxqnkkqprj6jq0";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-4.2.4-sparc.patch";
+      sha256 = "0ip4prcjpa404clm87ib7l71605mws54x9492n9pbz5yb51r9aqh";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-s390.patch";
+      sha256 = "0aiqbr4s1l19y3r3y4wjd5fkv9cfc8rlr4apbh1p0d57wyvqa7i3";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-arm.patch";
+      sha256 = "157k1avvkpf3x89m1fv4a1kgab6k3jv74rskazrmjivgzav4qaw3";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-aarch64.patch";
+      sha256 = "112svcsilk16ybbsi8ywnxfl2p1v44zh3rfn4ijnl8z08vfqrvvs";
+    })
+    ./darwin-aarch64.patch
+  ];
+
+  nativeBuildInputs = [
+    cmake
+  ] ++ lib.optionals stdenv.isDarwin [
+    fixDarwinDylibNames
+  ] ++ lib.optional fortranSupport gfortran;
+
+  buildInputs = [
+    libjpeg
+    zlib
+  ]
+  ++ lib.optional javaSupport jdk
+  ++ lib.optional szipSupport szip
+  ++ lib.optional uselibtirpc libtirpc;
+
+  preConfigure = lib.optionalString uselibtirpc ''
+    # Make tirpc discovery work with CMAKE_PREFIX_PATH
+    substituteInPlace config/cmake/FindXDR.cmake \
+      --replace 'find_path(XDR_INCLUDE_DIR NAMES rpc/types.h PATHS "/usr/include" "/usr/include/tirpc")' \
+                'find_path(XDR_INCLUDE_DIR NAMES rpc/types.h PATH_SUFFIXES include/tirpc)'
+  '' + lib.optionalString szipSupport ''
+    export SZIP_INSTALL=${szip}
+  '';
+
+  cmakeFlags = [
+    "-DBUILD_SHARED_LIBS=ON"
+    "-DHDF4_BUILD_TOOLS=ON"
+    "-DHDF4_BUILD_UTILS=ON"
+    "-DHDF4_BUILD_WITH_INSTALL_NAME=OFF"
+    "-DHDF4_ENABLE_JPEG_LIB_SUPPORT=ON"
+    "-DHDF4_ENABLE_NETCDF=${if netcdfSupport then "ON" else "OFF"}"
+    "-DHDF4_ENABLE_Z_LIB_SUPPORT=ON"
+    "-DJPEG_DIR=${libjpeg}"
+  ] ++ lib.optionals javaSupport [
+    "-DHDF4_BUILD_JAVA=ON"
+    "-DJAVA_HOME=${jdk}"
+  ] ++ lib.optionals szipSupport [
+    "-DHDF4_ENABLE_SZIP_ENCODING=ON"
+    "-DHDF4_ENABLE_SZIP_SUPPORT=ON"
+  ] ++ (if fortranSupport
+  then [
+    "-DHDF4_BUILD_FORTRAN=ON"
+    "-DCMAKE_Fortran_FLAGS=-fallow-argument-mismatch"
+  ]
+  else [ "-DHDF4_BUILD_FORTRAN=OFF" ]
+  );
+
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_CFLAGS_COMPILE = toString [
+      "-Wno-error=implicit-function-declaration"
+      "-Wno-error=implicit-int"
+    ];
+  };
+
+  doCheck = true;
+
+  excludedTests = lib.optionals stdenv.isDarwin [
+    "MFHDF_TEST-hdftest"
+    "MFHDF_TEST-hdftest-shared"
+    "HDP-dumpsds-18"
+    "NC_TEST-nctest"
+  ];
+
+  checkPhase =
+    let
+      excludedTestsRegex = lib.optionalString (excludedTests != [ ]) "(${lib.concatStringsSep "|" excludedTests})";
+    in
+    ''
+      runHook preCheck
+      ctest -E "${excludedTestsRegex}" --output-on-failure
+      runHook postCheck
+    '';
+
+  outputs = [ "bin" "dev" "out" ];
+
+  postInstall = ''
+    moveToOutput bin "$bin"
+  '';
+
+  passthru = {
+    inherit
+      uselibtirpc
+      libtirpc
+      szipSupport
+      szip
+      javaSupport
+      jdk
+      ;
+  };
+
+  meta = with lib; {
+    description = "Data model, library, and file format for storing and managing data";
+    homepage = "https://support.hdfgroup.org/products/hdf4/";
+    maintainers = with maintainers; [ knedlsepp ];
+    platforms = platforms.unix;
+    license = licenses.bsdOriginal;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdf5/1.10.nix b/nixpkgs/pkgs/tools/misc/hdf5/1.10.nix
new file mode 100644
index 000000000000..dda8fd3a8fa4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf5/1.10.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchurl
+, removeReferencesTo
+, zlibSupport ? true
+, zlib
+, enableShared ? !stdenv.hostPlatform.isStatic
+, javaSupport ? false
+, jdk
+}:
+
+let inherit (lib) optional; in
+
+stdenv.mkDerivation rec {
+  version = "1.10.11";
+  pname = "hdf5";
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-${lib.versions.majorMinor version}/${pname}-${version}/src/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-Cvx32lxGIXcJR1u++8qRwMtvHqYozNjDYZbPbFpN4wQ=";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  buildInputs = optional javaSupport jdk;
+
+  nativeBuildInputs = [ removeReferencesTo ];
+
+  propagatedBuildInputs = optional zlibSupport zlib;
+
+  configureFlags = optional enableShared "--enable-shared"
+    ++ optional javaSupport "--enable-java";
+
+  patches = [ ];
+
+  postInstall = ''
+    find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
+    moveToOutput 'bin/h5cc' "''${!outputDev}"
+    moveToOutput 'bin/h5c++' "''${!outputDev}"
+    moveToOutput 'bin/h5fc' "''${!outputDev}"
+    moveToOutput 'bin/h5pcc' "''${!outputDev}"
+  '';
+
+  meta = {
+    description = "Data model, library, and file format for storing and managing data";
+    longDescription = ''
+      HDF5 supports an unlimited variety of datatypes, and is designed for flexible and efficient
+      I/O and for high volume and complex data. HDF5 is portable and is extensible, allowing
+      applications to evolve in their use of HDF5. The HDF5 Technology suite includes tools and
+      applications for managing, manipulating, viewing, and analyzing data in the HDF5 format.
+    '';
+    license = lib.licenses.bsd3; # Lawrence Berkeley National Labs BSD 3-Clause variant
+    homepage = "https://www.hdfgroup.org/HDF5/";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdf5/default.nix b/nixpkgs/pkgs/tools/misc/hdf5/default.nix
new file mode 100644
index 000000000000..ba00746c08f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf5/default.nix
@@ -0,0 +1,113 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, removeReferencesTo
+, cppSupport ? false
+, fortranSupport ? false
+, fortran
+, zlibSupport ? true
+, zlib
+, szipSupport ? false
+, szip
+, mpiSupport ? false
+, mpi
+, enableShared ? !stdenv.hostPlatform.isStatic
+, javaSupport ? false
+, jdk
+, usev110Api ? false
+, threadsafe ? false
+, python3
+}:
+
+# cpp and mpi options are mutually exclusive
+# (--enable-unsupported could be used to force the build)
+assert !cppSupport || !mpiSupport;
+
+let inherit (lib) optional optionals; in
+
+stdenv.mkDerivation rec {
+  version = "1.14.3";
+  pname = "hdf5"
+    + lib.optionalString cppSupport "-cpp"
+    + lib.optionalString fortranSupport "-fortran"
+    + lib.optionalString mpiSupport "-mpi"
+    + lib.optionalString threadsafe "-threadsafe";
+
+  src = fetchurl {
+    url =
+      let
+        majorMinor = lib.versions.majorMinor version;
+        majorMinorPatch = with lib.versions; "${major version}.${minor version}.${patch version}";
+      in
+      "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-${majorMinor}/hdf5-${majorMinorPatch}/src/hdf5-${version}.tar.bz2";
+    sha256 = "sha256-lCXyJO110SgLtG1vJpI92Tj5BA5+rr9X5m7HNXwI+Rc=";
+  };
+
+  passthru = {
+    inherit
+      cppSupport
+      fortranSupport
+      fortran
+      zlibSupport
+      zlib
+      szipSupport
+      szip
+      mpiSupport
+      mpi
+      ;
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [ removeReferencesTo cmake ]
+    ++ optional fortranSupport fortran;
+
+  buildInputs = optional fortranSupport fortran
+    ++ optional szipSupport szip
+    ++ optional javaSupport jdk;
+
+  propagatedBuildInputs = optional zlibSupport zlib
+    ++ optional mpiSupport mpi;
+
+  cmakeFlags = [
+    "-DHDF5_INSTALL_CMAKE_DIR=${placeholder "dev"}/lib/cmake"
+  ] ++ lib.optional stdenv.isDarwin "-DHDF5_BUILD_WITH_INSTALL_NAME=ON"
+    ++ lib.optional cppSupport "-DHDF5_BUILD_CPP_LIB=ON"
+    ++ lib.optional fortranSupport "-DHDF5_BUILD_FORTRAN=ON"
+    ++ lib.optional szipSupport "-DHDF5_ENABLE_SZIP_SUPPORT=ON"
+    ++ lib.optionals mpiSupport [ "-DHDF5_ENABLE_PARALLEL=ON" ]
+    ++ lib.optional enableShared "-DBUILD_SHARED_LIBS=ON"
+    ++ lib.optional javaSupport "-DHDF5_BUILD_JAVA=ON"
+    ++ lib.optional usev110Api "-DDEFAULT_API_VERSION=v110"
+    ++ lib.optionals threadsafe [ "-DDHDF5_ENABLE_THREADSAFE:BOOL=ON" "-DHDF5_BUILD_HL_LIB=OFF" ]
+  ;
+
+  postInstall = ''
+    find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
+    moveToOutput 'bin/h5cc' "''${!outputDev}"
+    moveToOutput 'bin/h5c++' "''${!outputDev}"
+    moveToOutput 'bin/h5fc' "''${!outputDev}"
+    moveToOutput 'bin/h5pcc' "''${!outputDev}"
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = {
+    inherit (python3.pkgs) h5py;
+  };
+
+  meta = with lib; {
+    description = "Data model, library, and file format for storing and managing data";
+    longDescription = ''
+      HDF5 supports an unlimited variety of datatypes, and is designed for flexible and efficient
+      I/O and for high volume and complex data. HDF5 is portable and is extensible, allowing
+      applications to evolve in their use of HDF5. The HDF5 Technology suite includes tools and
+      applications for managing, manipulating, viewing, and analyzing data in the HDF5 format.
+    '';
+    license = licenses.bsd3; # Lawrence Berkeley National Labs BSD 3-Clause variant
+    maintainers = [ maintainers.markuskowa ];
+    homepage = "https://www.hdfgroup.org/HDF5/";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdfview/0001-Hardcode-isUbuntu-false-to-avoid-hostname-dependency.patch b/nixpkgs/pkgs/tools/misc/hdfview/0001-Hardcode-isUbuntu-false-to-avoid-hostname-dependency.patch
new file mode 100644
index 000000000000..fde26e0dca83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdfview/0001-Hardcode-isUbuntu-false-to-avoid-hostname-dependency.patch
@@ -0,0 +1,38 @@
+From e5eb394458e19ce8f8a231e8b2005c80c64fd426 Mon Sep 17 00:00:00 2001
+From: Jiajie Chen <c@jia.je>
+Date: Fri, 15 Jul 2022 10:13:23 +0800
+Subject: [PATCH] Hardcode isUbuntu=false to avoid hostname dependency.
+
+The original build.xml detects whether the system is ubuntu based on its
+hostname, which is useless in nixpkgs and brings additional dependency.
+
+As suggested by @risicle in #180613, we can simply hardcode isUbuntu to
+false.
+
+Signed-off-by: Jiajie Chen <c@jia.je>
+---
+ build.xml | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/build.xml b/build.xml
+index c4f0974..15a6078 100644
+--- a/build.xml
++++ b/build.xml
+@@ -143,11 +143,9 @@
+         </and>
+     </condition>
+ 
+-    <exec executable="hostname" outputproperty="computer.hostname"/>
+-
+-    <condition property="isUbuntu">
+-        <contains string="${computer.hostname}" substring="ubuntu" />
+-    </condition>
++    <!-- Since we do not package .deb nor .rpm files, we can safely
++        hardcode isUbuntu = false. -->
++    <property name="isUbuntu" value="false" />
+ 
+     <!-- Build 64-bit binary.
+        Note: os.arch gives the architecture of the JVM, NOT the OS;
+-- 
+2.36.1
+
diff --git a/nixpkgs/pkgs/tools/misc/hdfview/default.nix b/nixpkgs/pkgs/tools/misc/hdfview/default.nix
new file mode 100644
index 000000000000..23995e65859a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdfview/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchurl, ant, jdk, hdf4, hdf5, makeDesktopItem, copyDesktopItems }:
+
+stdenv.mkDerivation rec {
+  pname = "hdfview";
+  version = "3.3.1";
+
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF5/releases/HDF-JAVA/${pname}-${version}/src/${pname}-${version}.tar.gz";
+    sha256 = "sha256-WcGYceMOB8gCycJSW4KdApy2gIBgTnE/d0PxGZClUqg=";
+  };
+
+  patches = [
+    # Hardcode isUbuntu=false to avoid calling hostname to detect os
+    ./0001-Hardcode-isUbuntu-false-to-avoid-hostname-dependency.patch
+    # Disable signing on macOS
+    ./disable-mac-signing.patch
+  ];
+
+  nativeBuildInputs = [
+    ant
+    jdk
+    copyDesktopItems
+  ];
+
+  HDFLIBS = (hdf4.override { javaSupport = true; }).out;
+  HDF5LIBS = (hdf5.override { javaSupport = true; }).out;
+
+  buildPhase =
+    let
+      arch = if stdenv.isx86_64 then "x86_64" else "aarch64";
+    in
+    ''
+      runHook preBuild
+
+      ant createJPackage -Dmachine.arch=${arch}
+
+      runHook postBuild
+    '';
+
+  desktopItem = makeDesktopItem rec {
+    name = "HDFView";
+    desktopName = name;
+    exec = name;
+    icon = name;
+    comment = meta.description;
+    categories = [ "Science" "DataVisualization" ];
+  };
+
+  installPhase = ''
+    runHook preInstall
+  '' + lib.optionalString stdenv.isLinux ''
+    mkdir -p $out/bin $out/lib
+    cp -a build/dist/HDFView/bin/HDFView $out/bin/
+    cp -a build/dist/HDFView/lib/app $out/lib/
+    cp -a build/dist/HDFView/lib/libapplauncher.so $out/lib/
+    ln -s ${jdk}/lib/openjdk $out/lib/runtime
+
+    mkdir -p $out/share/applications $out/share/icons/hicolor/32x32/apps
+    cp src/HDFView.png $out/share/icons/hicolor/32x32/apps/
+  '' + lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    cp -a build/dist/HDFView.app $out/Applications/
+  '' + ''
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A visual tool for browsing and editing HDF4 and HDF5 files";
+    license = lib.licenses.free; # BSD-like
+    homepage = "https://www.hdfgroup.org/downloads/hdfview";
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+    maintainers = with lib.maintainers; [ jiegec ];
+    mainProgram = "HDFView";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdfview/disable-mac-signing.patch b/nixpkgs/pkgs/tools/misc/hdfview/disable-mac-signing.patch
new file mode 100644
index 000000000000..d7d67f7ac608
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdfview/disable-mac-signing.patch
@@ -0,0 +1,26 @@
+diff --git a/build.xml b/build.xml
+index 70ab3e2..9460321 100644
+--- a/build.xml
++++ b/build.xml
+@@ -1802,13 +1802,6 @@
+             description="Create the final package for distribution" />
+ 
+     <target name="createJPackageMac" depends="createJPackageBase" if="${isAppMac}">
+-        <!-- unlock keychain -->
+-        <exec executable="security" dir="${dist.dir}" failonerror="true">
+-            <arg value="unlock-keychain" />
+-            <arg value="-p" />
+-            <arg value="${login.keychain_key}" />
+-            <arg value="login.keychain" />
+-        </exec>
+ 
+         <echo> Create the mac jpackage</echo>
+         <exec executable="${java.home}/bin/jpackage">
+@@ -1864,7 +1857,6 @@
+             <arg value="app-image" />
+             <arg value="--icon" />
+             <arg value="${basedir}/package_files/macosx/HDFView.icns" />
+-            <arg value="--mac-sign" />
+             <arg value="--mac-package-identifier" />
+             <arg value="HDFView.hdfgroup.org" />
+             <arg value="--mac-package-name" />
diff --git a/nixpkgs/pkgs/tools/misc/hdl-dump/default.nix b/nixpkgs/pkgs/tools/misc/hdl-dump/default.nix
new file mode 100644
index 000000000000..8990a447dc0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdl-dump/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hdl-dump";
+  version = "unstable-2022-09-19";
+
+  src = fetchFromGitHub {
+    owner = "ps2homebrew";
+    repo = pname;
+    rev = "87d3099d2ba39a15e86ebc7dc725e8eaa49f2d5f";
+    hash = "sha256-eBqF4OGEaLQXQ4JMtD/Yn+f97RzKVsnC+4oyiEhLTUM=";
+  };
+
+  makeFlags = [ "RELEASE=yes" ];
+
+  installPhase = ''
+    install -Dm755 hdl_dump -t $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ps2homebrew/hdl-dump";
+    description = "PlayStation 2 HDLoader image dump/install utility";
+    platforms = platforms.linux;
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ makefu ];
+    mainProgram = "hdl_dump";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/heatseeker/default.nix b/nixpkgs/pkgs/tools/misc/heatseeker/default.nix
new file mode 100644
index 000000000000..24da793445cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/heatseeker/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, rustPlatform, coreutils }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "heatseeker";
+  version = "1.7.2";
+
+  src = fetchFromGitHub {
+    owner = "rschmitt";
+    repo = "heatseeker";
+    rev = "v${version}";
+    sha256 = "sha256-SU5HLAFA7IHnVhsmVtxskteeKKIEvvVSqHIeEk5BkfA=";
+  };
+
+  cargoSha256 = "sha256-RHD2/Uvj8NWpZ+xK16xTN5K/hDWYhwHnu2E5NslGFQI=";
+
+  # https://github.com/rschmitt/heatseeker/issues/42
+  # I've suggested using `/usr/bin/env stty`, but doing that isn't quite as simple
+  # as a substitution, and this works since we have the path to coreutils stty.
+  patchPhase = ''
+    substituteInPlace src/screen/unix.rs --replace "/bin/stty" "${coreutils}/bin/stty"
+  '';
+
+  # some tests require a tty, this variable turns them off for Travis CI,
+  # which we can also make use of
+  TRAVIS = "true";
+
+  meta = with lib; {
+    description = "A general-purpose fuzzy selector";
+    homepage = "https://github.com/rschmitt/heatseeker";
+    license = licenses.mit;
+    maintainers = [ maintainers.michaelpj ];
+    mainProgram = "hs";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hebcal/default.nix b/nixpkgs/pkgs/tools/misc/hebcal/default.nix
new file mode 100644
index 000000000000..80d52592c742
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hebcal/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version = "4.24";
+  pname = "hebcal";
+
+  src = fetchFromGitHub {
+    owner = "hebcal";
+    repo = "hebcal";
+    rev = "v${version}";
+    sha256 = "sha256-iWp2S3s8z/y4dZ66Ogqu7Yf4gTUvSS1J5F7d0ifRbcY=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://hebcal.github.io";
+    description = "A perpetual Jewish Calendar";
+    longDescription = "Hebcal is a program which prints out the days in the Jewish calendar for a given Gregorian year. Hebcal is fairly flexible in terms of which events in the Jewish calendar it displays.";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.hhm ];
+    platforms = platforms.all;
+    mainProgram = "hebcal";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/heimdall/default.nix b/nixpkgs/pkgs/tools/misc/heimdall/default.nix
new file mode 100644
index 000000000000..422363ef418a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/heimdall/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, cmake, zlib, libusb1
+, enableGUI ? false, qtbase ? null
+}:
+
+mkDerivation rec {
+  pname = "heimdall${lib.optionalString enableGUI "-gui"}";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner  = "Benjamin-Dobell";
+    repo   = "Heimdall";
+    rev    = "v${version}";
+    sha256 = "1ygn4snvcmi98rgldgxf5hwm7zzi1zcsihfvm6awf9s6mpcjzbqz";
+  };
+
+  buildInputs = [
+    zlib
+    libusb1
+  ] ++ lib.optional enableGUI qtbase;
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [
+    "-DDISABLE_FRONTEND=${if enableGUI then "OFF" else "ON"}"
+    "-DLIBUSB_LIBRARY=${libusb1}"
+  ];
+
+  preConfigure = ''
+    # Give ownership of the Galaxy S USB device to the logged in user.
+    substituteInPlace heimdall/60-heimdall.rules --replace 'MODE="0666"' 'TAG+="uaccess"'
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace libpit/CMakeLists.txt --replace "-std=gnu++11" ""
+  '';
+
+  installPhase = lib.optionalString (stdenv.isDarwin && enableGUI) ''
+    mkdir -p $out/Applications
+    mv bin/heimdall-frontend.app $out/Applications/heimdall-frontend.app
+    wrapQtApp $out/Applications/heimdall-frontend.app/Contents/MacOS/heimdall-frontend
+  '' + ''
+    mkdir -p $out/{bin,share/doc/heimdall,lib/udev/rules.d}
+    install -m755 -t $out/bin                bin/*
+    install -m644 -t $out/lib/udev/rules.d   ../heimdall/60-heimdall.rules
+    install -m644 ../Linux/README   $out/share/doc/heimdall/README.linux
+    install -m644 ../OSX/README.txt $out/share/doc/heimdall/README.osx
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "http://www.glassechidna.com.au/products/heimdall/";
+    description = "A cross-platform tool suite to flash firmware onto Samsung Galaxy S devices";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+    mainProgram = "heimdall";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hex/default.nix b/nixpkgs/pkgs/tools/misc/hex/default.nix
new file mode 100644
index 000000000000..ef64cbea0559
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hex/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, testers
+, hex
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hex";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "sitkevij";
+    repo = "hex";
+    rev = "v${version}";
+    hash = "sha256-YctXDhCMJvDQLPsuhzdyYDUIlFE2vKltNtrFFeE7YE8=";
+  };
+
+  cargoHash = "sha256-Nlha9Zn0qaQhpN2ivbBvpIPxCN2I7BtJJULb6sYdpdo=";
+
+  passthru.tests.version = testers.testVersion {
+    package = hex;
+    version = "hx ${version}";
+  };
+
+  meta = with lib; {
+    description = "Futuristic take on hexdump, made in Rust";
+    homepage = "https://github.com/sitkevij/hex";
+    changelog = "https://github.com/sitkevij/hex/releases/tag/v${version}";
+    mainProgram = "hx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ivar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hexd/default.nix b/nixpkgs/pkgs/tools/misc/hexd/default.nix
new file mode 100644
index 000000000000..140db3435083
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hexd/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "hexd";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "FireyFly";
+    repo = "hexd";
+    rev = "v${version}";
+    sha256 = "sha256-b/dROBQVPEiMBTcu4MTi6Lf6ChkFZqZrJ1V0j54rrFY=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Colourful, human-friendly hexdump tool";
+    homepage = "https://github.com/FireyFly/hexd";
+    maintainers = [ maintainers.FireyFly ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+    mainProgram = "hexd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hexdiff/default.nix b/nixpkgs/pkgs/tools/misc/hexdiff/default.nix
new file mode 100644
index 000000000000..937a07bee78b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hexdiff/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "hexdiff";
+  version = "unstable-2018-01-24";
+
+  src = fetchFromGitHub {
+    owner = "ahroach";
+    repo = "hexdiff";
+    rev = "3e96f27e65167c619ede35ab04232163dc273e69";
+    sha256 = "sha256-G6Qi7e4o+0ahcslJ8UfJrdoc8NNkY+nl6kyDlkJCo9I=";
+  };
+
+  dontConfigure = true;
+
+  buildPhase = ''
+    runHook preBuild
+
+    $CC -o hexdiff hexdiff.c
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D hexdiff  -t $out/bin/
+
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "https://github.com/ahroach/hexdiff";
+    description = "A terminal application for differencing two binary files, with color-coded output";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ rogarb ];
+    platforms = lib.platforms.linux;
+    mainProgram = "hexdiff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hexyl/default.nix b/nixpkgs/pkgs/tools/misc/hexyl/default.nix
new file mode 100644
index 000000000000..fa68fb4a2d43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hexyl/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hexyl";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-di7SBuB4LsnqlP3BdMcsSLj4zpyKA/ninVpRyR9AJaI=";
+  };
+
+  cargoHash = "sha256-fXrdOiCmRgMPJxZIS/SkTkZZkag8ZUhNnMlU4k1m/+0=";
+
+  meta = with lib; {
+    description = "A command-line hex viewer";
+    longDescription = ''
+      `hexyl` is a simple hex viewer for the terminal. It uses a colored
+      output to distinguish different categories of bytes (NULL bytes,
+      printable ASCII characters, ASCII whitespace characters, other ASCII
+      characters and non-ASCII).
+    '';
+    homepage = "https://github.com/sharkdp/hexyl";
+    changelog = "https://github.com/sharkdp/hexyl/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dywedir figsoda SuperSandro2000 ];
+    mainProgram = "hexyl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hhpc/default.nix b/nixpkgs/pkgs/tools/misc/hhpc/default.nix
new file mode 100644
index 000000000000..71c39c68acce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hhpc/default.nix
@@ -0,0 +1,29 @@
+{lib, stdenv, fetchFromGitHub, xorg, pkg-config}:
+
+stdenv.mkDerivation rec {
+  pname = "hhpc";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "aktau";
+    repo = "hhpc";
+    rev = "v${version}";
+    sha256 = "1djsw1r38mh6zx0rbyn2cfa931hyddib4fl3i27c4z7xinl709ss";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ xorg.libX11 ];
+
+  installPhase = ''
+      mkdir -p $out/bin
+      cp hhpc $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Hides the mouse pointer in X11";
+    maintainers = with maintainers; [ nico202 ];
+    platforms = platforms.unix;
+    license = lib.licenses.bsd3;
+    mainProgram = "hhpc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hid-listen/default.nix b/nixpkgs/pkgs/tools/misc/hid-listen/default.nix
new file mode 100644
index 000000000000..62c2d7beb2ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hid-listen/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchzip }:
+stdenv.mkDerivation rec {
+  pname = "hid-listen";
+  version = "1.01";
+
+  src = fetchzip {
+    name = "hid_listen_${version}";
+    url = "https://www.pjrc.com/teensy/hid_listen_${version}.zip";
+    sha256 = "0sd4dvi39fl4vy880mg531ryks5zglfz5mdyyqr7x6qv056ffx9w";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv ./hid_listen $out/bin/hid_listen
+  '';
+
+  meta = with lib; {
+    description = "A tool thats prints debugging information from usb HID devices";
+    homepage = "https://www.pjrc.com/teensy/hid_listen.html";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ tomsmeets ];
+    platforms = platforms.linux;
+    mainProgram = "hid_listen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hid-tools/default.nix b/nixpkgs/pkgs/tools/misc/hid-tools/default.nix
new file mode 100644
index 000000000000..82c61caf020a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hid-tools/default.nix
@@ -0,0 +1,53 @@
+{ python3
+, lib
+, fetchFromGitLab
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "hid-tools";
+  version = "0.7";
+
+  format = "pyproject";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "libevdev";
+    repo = "hid-tools";
+    rev = version;
+    hash = "sha256-h880jJcZDc9pIPf+nr30wu2i9y3saAKFZpooJ4MF67E=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    hatchling
+    pypandoc
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    libevdev
+    parse
+    pyyaml
+    click
+    pyudev
+    typing-extensions
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  # Tests require /dev/uhid
+  # https://gitlab.freedesktop.org/libevdev/hid-tools/-/issues/18#note_166353
+  doCheck = false;
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace-fail "pypandoc_binary" "pypandoc"
+  '';
+
+  meta = with lib; {
+    description = "Python scripts to manipulate HID data";
+    homepage = "https://gitlab.freedesktop.org/libevdev/hid-tools";
+    license = licenses.mit;
+    maintainers = teams.freedesktop.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hidrd/default.nix b/nixpkgs/pkgs/tools/misc/hidrd/default.nix
new file mode 100644
index 000000000000..5ce3e969f276
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hidrd/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation {
+  pname = "hidrd";
+  version = "unstable-2019-06-03";
+
+  src = fetchFromGitHub {
+    owner = "DIGImend";
+    repo = "hidrd";
+    rev = "6c0ed39708a5777ac620f902f39c8a0e03eefe4e";
+    sha256 = "1rnhq6b0nrmphdig1qrpzpbpqlg3943gzpw0v7p5rwcdynb6bb94";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "HID report descriptor I/O library and conversion tool";
+    homepage = "https://github.com/DIGImend/hidrd";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pacien ];
+    platforms = platforms.all;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/hidrd.x86_64-darwin
+    mainProgram = "hidrd-convert";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hiksink/default.nix b/nixpkgs/pkgs/tools/misc/hiksink/default.nix
new file mode 100644
index 000000000000..05d7e1c9f44e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hiksink/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, Security
+, openssl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hiksink";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "CornerBit";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-k/cBCc7DywyBbAzCRCHdrOVmo+QVCsSgDn8hcyTIUI8=";
+  };
+
+  cargoSha256 = "sha256-vqzXpSPBwY7m/Fdob0mHH0OXnzyQwFk7x2kk9Tgez3M=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "Tool to convert Hikvision camera events to MQTT";
+    homepage = "https://github.com/CornerBit/HikSink";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "hik_sink";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hoard/default.nix b/nixpkgs/pkgs/tools/misc/hoard/default.nix
new file mode 100644
index 000000000000..4bdf7b7127b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hoard/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hoard";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "Hyde46";
+    repo = "hoard";
+    rev = "v${version}";
+    hash = "sha256-c9iSbxkHwLOeATkO7kzTyLD0VAwZUzCvw5c4FyuR5/E=";
+  };
+
+  cargoHash = "sha256-4EeeD1ySR4M1i2aaKJP/BNSn+t1l8ingiv2ZImFFn1A=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "CLI command organizer written in rust";
+    homepage = "https://github.com/hyde46/hoard";
+    changelog = "https://github.com/Hyde46/hoard/blob/${src.rev}/CHANGES.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ builditluc figsoda ];
+    mainProgram = "hoard";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/homesick/Gemfile b/nixpkgs/pkgs/tools/misc/homesick/Gemfile
new file mode 100644
index 000000000000..fb1d6a5584f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "homesick"
diff --git a/nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock b/nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock
new file mode 100644
index 000000000000..accc917e240f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    homesick (1.1.6)
+      thor (>= 0.14.0)
+    thor (0.20.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  homesick
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/homesick/default.nix b/nixpkgs/pkgs/tools/misc/homesick/default.nix
new file mode 100644
index 000000000000..663990ffac80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/default.nix
@@ -0,0 +1,29 @@
+{ lib, bundlerEnv, bundlerUpdateScript, git }:
+bundlerEnv {
+  pname = "homesick";
+
+  gemdir = ./.;
+
+  # Cannot use `wrapProgram` because the the help is aware of the file name.
+  postInstall = ''
+    rm $out/bin/thor
+    sed 1a'ENV["PATH"] = "${git}/bin:#{ENV["PATH"] ? ":#{ENV["PATH"]}" : "" }"' -i $out/bin/homesick
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "homesick";
+
+  meta = with lib; {
+    description = "Your home directory is your castle. Don't leave your dotfiles behind";
+    longDescription =
+      ''
+        Homesick is sorta like rip, but for dotfiles. It uses git to clone a repository containing
+        dotfiles, and saves them in ~/.homesick. It then allows you to symlink all the dotfiles into
+        place with a single command.
+      '';
+    homepage = "https://github.com/technicalpickles/homesick";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaronschif nicknovitski ];
+    platforms = platforms.unix;
+    mainProgram = "homesick";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/homesick/gemset.nix b/nixpkgs/pkgs/tools/misc/homesick/gemset.nix
new file mode 100644
index 000000000000..4a01696c2c79
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/gemset.nix
@@ -0,0 +1,19 @@
+{
+  homesick = {
+    dependencies = ["thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lxvnp4ncbx0irlblfxbd1f8h4hl11hgmyiy35q79w137r3prxml";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmqpyj642sk4g16nkbq6pj856adpv91lp4krwhqkh2iw63aszdl";
+      type = "gem";
+    };
+    version = "0.20.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hostmux/default.nix b/nixpkgs/pkgs/tools/misc/hostmux/default.nix
new file mode 100644
index 000000000000..27e714a5e7f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hostmux/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, openssh
+, tmux
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "hostmux";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "hukl";
+    repo = "hostmux";
+    rev = finalAttrs.version;
+    hash = "sha256-odN7QFsU3MsWW8VabVjZH+8+AUFOUio8eF9ORv9iPEA=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = [
+    openssh
+    tmux
+  ];
+
+  postPatch = ''
+    substituteInPlace hostmux \
+      --replace "SSH_CMD=ssh" "SSH_CMD=${openssh}/bin/ssh" \
+      --replace "tmux -2" "${tmux}/bin/tmux -2" \
+      --replace "tmux s" "${tmux}/bin/tmux s"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 hostmux $out/bin/hostmux
+    installManPage man/hostmux.1
+    installShellCompletion --zsh zsh-completion/_hostmux
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Small wrapper script for tmux to easily connect to a series of hosts via ssh and open a split pane for each of the hosts";
+    homepage = "https://github.com/hukl/hostmux";
+    license = lib.licenses.mit;
+    mainProgram = "hostmux";
+    maintainers = with lib.maintainers; [ fernsehmuell ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/hostsblock/default.nix b/nixpkgs/pkgs/tools/misc/hostsblock/default.nix
new file mode 100644
index 000000000000..0346c81c66db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hostsblock/default.nix
@@ -0,0 +1,73 @@
+{ lib, coreutils, curl, fetchFromGitHub, unzip, p7zip, gnused, gnugrep, stdenv
+, blacklist ? [ "adwords.google.com" ]
+, whitelist ? [
+  ".dropbox.com"
+  " www.malwaredomainlists.com"
+  " www.arcamax.com"
+  " www.instructables.com"
+  " goo.gl"
+  " www.reddit.com"
+  " t.co"
+  " bit.ly"
+  " www.viddler.com"
+  " viddler.com"
+  " tinyurl.com"
+  " ompldr.org"
+  " www.ompldr.org"
+  "login.yahoo.com"
+  " l.yimg.com"
+  ".bp.blogspot.com"
+] }:
+
+stdenv.mkDerivation {
+  pname = "hostsblock";
+  version = "20161213";
+
+  src = fetchFromGitHub {
+    owner = "gaenserich";
+    repo = "hostsblock";
+    rev = "91cacbdfbfb5e7ae9ba3babf8de41e135270c310";
+    sha256 = "1w91fbgf8v2nn0a6m8l6kd455km2j1lvpvqil4yxhrg018aigax0";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -Dm744 src/hostsblock.sh $out/bin/hostsblock
+    install -Dm744 src/hostsblock-urlcheck.sh $out/bin/hostsblock-urlcheck
+
+    mkdir -p $out/lib
+    install -Dm644 src/hostsblock-common.sh $out/lib/
+
+    mkdir -p $out/etc
+    install -Dm644 conf/hostsblock.conf $out/etc/
+    ${lib.concatMapStrings (d: "echo ${d} >> $out/etc/black.list\n") blacklist}
+    ${lib.concatMapStrings (d: "echo ${d} >> $out/etc/white.list\n") whitelist}
+    install -Dm644 conf/hosts.head $out/etc/
+
+    for f in $out/bin/* $out/lib/* $out/etc/hostsblock.conf; do
+      substituteInPlace $f --replace "/dev/shm" "/tmp"
+      substituteInPlace $f --replace "/usr/lib/" "$out/lib/"
+      substituteInPlace $f --replace "/etc/hostsblock/" "$out/etc/"
+      sed --in-place --regexp-extended "s|([\` ])curl |\1${curl}/bin/curl |g" $f
+      substituteInPlace $f --replace grep ${gnugrep}/bin/grep
+      substituteInPlace $f --replace " sed " " ${gnused}/bin/sed "
+      sed --in-place --regexp-extended "s|([^_])unzip |\1${unzip}/bin/unzip |" $f
+      sed --in-place --regexp-extended "s|7za([^,])|${p7zip}/bin/7za\1|g" $f
+    done
+
+    echo "postprocess(){ ${coreutils}/bin/true; }" >> $out/etc/hostsblock.conf
+
+    mkdir -p $out/share/dbus-1/system-services
+    install -Dm644 systemd/hostsblock.service $out/share/dbus-1/system-services
+    install -Dm644 systemd/hostsblock.timer $out/share/dbus-1/system-services
+  '';
+
+  meta = with lib; {
+    description = "An ad- and malware-blocking script for Linux";
+    homepage = "http://gaenserich.github.io/hostsblock/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.nicknovitski ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/hpcg/default.nix b/nixpkgs/pkgs/tools/misc/hpcg/default.nix
new file mode 100644
index 000000000000..77621bd6f158
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hpcg/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, mpi } :
+
+stdenv.mkDerivation rec {
+  pname = "hpcg";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://www.hpcg-benchmark.org/downloads/${pname}-${version}.tar.gz";
+    sha256 = "197lw2nwmzsmfsbvgvi8z7kj69n374kgfzzp8pkmk7mp2vkk991k";
+  };
+
+  dontConfigure = true;
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ mpi ];
+
+  makeFlags = [ "arch=Linux_MPI" ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/hpcg
+
+    cp bin/xhpcg $out/bin
+    cp bin/hpcg.dat $out/share/hpcg
+  '';
+
+  meta = with lib; {
+    description = "HPC conjugate gradient benchmark";
+    homepage = "https://www.hpcg-benchmark.org";
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.markuskowa ];
+    mainProgram = "xhpcg";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/hpl/default.nix b/nixpkgs/pkgs/tools/misc/hpl/default.nix
new file mode 100644
index 000000000000..0521afc4ef26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hpl/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, blas, lapack, mpi } :
+
+assert (!blas.isILP64) && (!lapack.isILP64);
+
+stdenv.mkDerivation rec {
+  pname = "hpl";
+  version = "2.3";
+
+  src = fetchurl {
+    url = "http://www.netlib.org/benchmark/hpl/${pname}-${version}.tar.gz";
+    sha256 = "0c18c7fzlqxifz1bf3izil0bczv3a7nsv0dn6winy3ik49yw3i9j";
+  };
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    # only contains the static lib
+    rm -r $out/lib
+
+    install -D testing/ptest/HPL.dat $out/share/hpl/HPL.dat
+  '';
+
+  buildInputs = [ blas lapack mpi ];
+
+  meta = with lib; {
+    description = "Portable Implementation of the Linpack Benchmark for Distributed-Memory Computers";
+    homepage = "http://www.netlib.org/benchmark/hpl/";
+    platforms = platforms.unix;
+    license = licenses.bsdOriginal;
+    maintainers = [ maintainers.markuskowa ];
+    mainProgram = "xhpl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hsd/default.nix b/nixpkgs/pkgs/tools/misc/hsd/default.nix
new file mode 100644
index 000000000000..a1e82076cca4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hsd/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, buildNpmPackage
+, fetchFromGitHub
+, python3
+, unbound
+, darwin
+}:
+
+buildNpmPackage rec {
+  pname = "hsd";
+  version = "6.1.1";
+
+  src = fetchFromGitHub {
+    owner = "handshake-org";
+    repo = "hsd";
+    rev = "v${version}";
+    hash = "sha256-T57kDEQwHIyW7xVXrzjJdUcocST9ks4x3JR8yytH8P4=";
+  };
+
+  npmDepsHash = "sha256-EBrCuRckBg42k6ZUoB25xObv3lULnSPNJ2nO9l/TWvA=";
+
+  nativeBuildInputs = [
+    python3
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.cctools
+  ];
+
+  buildInputs = [
+    unbound
+  ];
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/handshake-org/hsd/blob/${src.rev}/CHANGELOG.md";
+    description = "Implementation of the Handshake protocol";
+    homepage = "https://github.com/handshake-org/hsd";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ d-xo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile
new file mode 100644
index 000000000000..a7c369cc6804
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'html-proofer'
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock
new file mode 100644
index 000000000000..846b465bfd8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock
@@ -0,0 +1,60 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    Ascii85 (1.1.0)
+    addressable (2.8.5)
+      public_suffix (>= 2.0.2, < 6.0)
+    afm (0.2.2)
+    async (2.6.3)
+      console (~> 1.10)
+      fiber-annotation
+      io-event (~> 1.1)
+      timers (~> 4.1)
+    console (1.23.1)
+      fiber-annotation
+      fiber-local
+    ethon (0.16.0)
+      ffi (>= 1.15.0)
+    ffi (1.15.5)
+    fiber-annotation (0.2.0)
+    fiber-local (1.0.0)
+    hashery (2.1.2)
+    html-proofer (5.0.8)
+      addressable (~> 2.3)
+      async (~> 2.1)
+      nokogiri (~> 1.13)
+      pdf-reader (~> 2.11)
+      rainbow (~> 3.0)
+      typhoeus (~> 1.3)
+      yell (~> 2.0)
+      zeitwerk (~> 2.5)
+    io-event (1.2.3)
+    mini_portile2 (2.8.4)
+    nokogiri (1.15.4)
+      mini_portile2 (~> 2.8.2)
+      racc (~> 1.4)
+    pdf-reader (2.11.0)
+      Ascii85 (~> 1.0)
+      afm (~> 0.2.1)
+      hashery (~> 2.0)
+      ruby-rc4
+      ttfunk
+    public_suffix (5.0.3)
+    racc (1.7.1)
+    rainbow (3.1.1)
+    ruby-rc4 (0.1.5)
+    timers (4.3.5)
+    ttfunk (1.7.0)
+    typhoeus (1.4.0)
+      ethon (>= 0.9.0)
+    yell (2.2.2)
+    zeitwerk (2.6.11)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  html-proofer
+
+BUNDLED WITH
+   2.4.17
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/default.nix b/nixpkgs/pkgs/tools/misc/html-proofer/default.nix
new file mode 100644
index 000000000000..cc4f6f69f263
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/default.nix
@@ -0,0 +1,21 @@
+{ bundlerEnv, ruby, lib, bundlerUpdateScript }:
+
+bundlerEnv rec {
+  name = "${pname}-${version}";
+  pname = "html-proofer";
+  version = (import ./gemset.nix).html-proofer.version;
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript pname;
+
+  meta = with lib; {
+    description = "A tool to validate HTML files";
+    homepage    = "https://github.com/gjtorikian/html-proofer";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms   = platforms.unix;
+    mainProgram = "htmlproofer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix b/nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix
new file mode 100644
index 000000000000..45ad23f7ab0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix
@@ -0,0 +1,250 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  afm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  Ascii85 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ds4v9xgsyvijnlflak4dzf1qwmda9yd5bv8jwsb56nngd399rlw";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  async = {
+    dependencies = ["console" "fiber-annotation" "io-event" "timers"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0806cya8kq9glg6vifa9j4zjf81drwa84hdzx71ah98zz317hvhb";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  console = {
+    dependencies = ["fiber-annotation" "fiber-local"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04cpbx4bsw3k20xgvz6cs1gi41q9mmagc95x2zk6ar49a25z89sb";
+      type = "gem";
+    };
+    version = "1.23.1";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17ix0mijpsy3y0c6ywrk5ibarmvqzjsirjyprpsy3hwax8fdm85v";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  fiber-annotation = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vcmynyvhny8n4p799rrhcx0m033hivy0s1gn30ix8rs7qsvgvs";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  fiber-local = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrxxb09fc7aicb9zb0pmn5akggjy21dmxkdl3w949y4q05rldr9";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  hashery = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qj8815bf7q6q7llm5rzdz279gzmpqmqqicxnzv066a020iwqffj";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  html-proofer = {
+    dependencies = ["addressable" "async" "nokogiri" "pdf-reader" "rainbow" "typhoeus" "yell" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lzh3lb3l2qid3sh3da0fgjdwdly2g5jia6drzpn1dn1b92a7wwm";
+      type = "gem";
+    };
+    version = "5.0.8";
+  };
+  io-event = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0046p1q98xrys4bzcx74k658fv1fiigdgcd0az0pm12n2hjcms6r";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02mj8mpd6ck5gpcnsimx5brzggw5h5mmmpq2djdypfq16wcw82qq";
+      type = "gem";
+    };
+    version = "2.8.4";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k9w2z0953mnjrsji74cshqqp08q7m1r6zhadw1w0g34xzjh3a74";
+      type = "gem";
+    };
+    version = "1.15.4";
+  };
+  pdf-reader = {
+    dependencies = ["Ascii85" "afm" "hashery" "ruby-rc4" "ttfunk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09sx25jpnip2sp6wh5sn5ad7za78rfi95qp5iiczfh43z4jqa8q3";
+      type = "gem";
+    };
+    version = "2.11.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n9j7mczl15r3kwqrah09cxj8hxdfawiqxa60kga2bmxl9flfz9k";
+      type = "gem";
+    };
+    version = "5.0.3";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11v3l46mwnlzlc371wr3x6yylpgafgwdf0q7hc7c1lzx6r414r5g";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  ruby-rc4 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vci475258mmbvsdqkmqadlwn6gj9m01sp7b5a3zd90knil1k00";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  timers = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pjzipnmzfywvgsr3gxwj6nmg47lz4700g0q71jgcy1z6rb7dn7p";
+      type = "gem";
+    };
+    version = "4.3.5";
+  };
+  ttfunk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15iaxz9iak5643bq2bc0jkbjv8w2zn649lxgvh5wg48q9d4blw13";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m22yrkmbj81rzhlny81j427qdvz57yk5wbcf3km0nf3bl6qiygz";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  yell = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g16kcdhdfvczn7x81jiq6afg3bdxmb73skqjyjlkp5nqcy6y5hx";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mwdd445w63khz13hpv17m2br5xngyjl3jdj08xizjbm78i2zrxd";
+      type = "gem";
+    };
+    version = "2.6.11";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hueadm/default.nix b/nixpkgs/pkgs/tools/misc/hueadm/default.nix
new file mode 100644
index 000000000000..7eeb7b2eb790
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hueadm/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "hueadm";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "bahamas10";
+    repo = "hueadm";
+    rev = "v${version}";
+    hash = "sha256-QNjkfE8V/lUkYP8NAf11liKXILBk3wSNm3NSrgaH+nc=";
+  };
+
+  npmDepsHash = "sha256-EbwHbPe8QvT6ekH20q+ihGmwpAHykwkwoJ6vwAf0FlA=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "Command line management interface to Philips Hue";
+    homepage = "https://github.com/bahamas10/hueadm";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ infinisil ];
+    mainProgram = "hueadm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hunt/default.nix b/nixpkgs/pkgs/tools/misc/hunt/default.nix
new file mode 100644
index 000000000000..38fbf9bc828d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hunt/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hunt";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "LyonSyonII";
+    repo = "hunt-rs";
+    rev = "v${version}";
+    sha256 = "sha256-TwxNVT2x9Y0jnLXiIquf/bQ31B+2VwFfh9EFbJQHpt4=";
+  };
+
+  cargoHash = "sha256-GU3AXZJ8yGFnj0SXRezS/YI6aS/lJowwo+GBBv5wNik=";
+
+  meta = with lib; {
+    description = "Simplified Find command made with Rust";
+    homepage = "https://github.com/LyonSyonII/hunt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "hunt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hwatch/default.nix b/nixpkgs/pkgs/tools/misc/hwatch/default.nix
new file mode 100644
index 000000000000..2eb8be5d2f93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hwatch/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchFromGitHub, rustPlatform, testers, hwatch, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hwatch";
+  version = "0.3.10";
+
+  src = fetchFromGitHub {
+    owner = "blacknon";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-RvsL6OajXwEY77W3Wj6GMijYwn7XDnKiJyDXbNG01ag=";
+  };
+
+  cargoHash = "sha256-v7MvXnc9Xa+6QAyi2N9/WtqnvXf9M1SlR86kNjfu46Y=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd hwatch \
+      --bash $src/completion/bash/hwatch-completion.bash \
+      --fish $src/completion/fish/hwatch.fish \
+      --zsh $src/completion/zsh/_hwatch \
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = hwatch;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/blacknon/hwatch";
+    description = "Modern alternative to the watch command";
+    longDescription = ''
+      A modern alternative to the watch command, records the differences in
+      execution results and can check this differences at after.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ hamburger1984 ];
+    mainProgram = "hwatch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hyfetch/default.nix b/nixpkgs/pkgs/tools/misc/hyfetch/default.nix
new file mode 100644
index 000000000000..2e906541bda1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hyfetch/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "hyfetch";
+  version = "1.4.11";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "hykilpikonna";
+    repo = "hyfetch";
+    rev = "refs/tags/${version}";
+    hash = "sha256-xzN/tbS5BUvpKeozesE99gNp3NRDjvf4Qx7BHLc4svo=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    typing-extensions
+    setuptools
+  ];
+
+  # No test available
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "hyfetch"
+  ];
+
+  meta = with lib; {
+    description = "neofetch with pride flags <3";
+    longDescription = ''
+      HyFetch is a command-line system information tool fork of neofetch.
+      HyFetch displays information about your system next to your OS logo
+      in ASCII representation. The ASCII representation is then colored in
+      the pattern of the pride flag of your choice. The main purpose of
+      HyFetch is to be used in screenshots to show other users what
+      operating system or distribution you are running, what theme or
+      icon set you are using, etc.
+    '';
+    homepage = "https://github.com/hykilpikonna/HyFetch";
+    license = licenses.mit;
+    mainProgram = "hyfetch";
+    maintainers = with maintainers; [ yisuidenghua ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hyperfine/default.nix b/nixpkgs/pkgs/tools/misc/hyperfine/default.nix
new file mode 100644
index 000000000000..16de5fa76f3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hyperfine/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hyperfine";
+  version = "1.18.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = "hyperfine";
+    rev = "v${version}";
+    hash = "sha256-9YfnCHiG9TDOsEAcrrb0GOxdq39Q+TiltWKwnr3ObAQ=";
+  };
+
+  cargoHash = "sha256-E2y/hQNcpW6b/ZJBlsp+2RDH2OgpX4kbn36aBHA5X6U=";
+
+  nativeBuildInputs = [ installShellFiles ];
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    installManPage doc/hyperfine.1
+
+    installShellCompletion \
+      $releaseDir/build/hyperfine-*/out/hyperfine.{bash,fish} \
+      --zsh $releaseDir/build/hyperfine-*/out/_hyperfine
+  '';
+
+  meta = with lib; {
+    description = "Command-line benchmarking tool";
+    homepage = "https://github.com/sharkdp/hyperfine";
+    changelog = "https://github.com/sharkdp/hyperfine/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda thoughtpolice ];
+    mainProgram = "hyperfine";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix b/nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix
new file mode 100644
index 000000000000..e320b0355e4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "hyperledger-fabric";
+  version = "2.5.5";
+
+  src = fetchFromGitHub {
+    owner = "hyperledger";
+    repo = "fabric";
+    rev = "v${version}";
+    hash = "sha256-Ev9a+d15kr6apKyGR5xTa/2I3cByyPSTW2Y+HAQk9GU=";
+  };
+
+  vendorHash = null;
+
+  postPatch = ''
+    # Broken
+    rm cmd/peer/main_test.go
+    # Requires network
+    rm cmd/osnadmin/main_test.go
+  '';
+
+  subPackages = [
+    "cmd/configtxgen"
+    "cmd/configtxlator"
+    "cmd/cryptogen"
+    "cmd/discover"
+    "cmd/ledgerutil"
+    "cmd/orderer"
+    "cmd/osnadmin"
+    "cmd/peer"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/hyperledger/fabric/common/metadata.Version=${version}"
+    "-X github.com/hyperledger/fabric/common/metadata.CommitSha=${src.rev}"
+  ];
+
+  meta = with lib; {
+    description = "High-performance, secure, permissioned blockchain network";
+    longDescription = ''
+      Hyperledger Fabric is an enterprise-grade permissioned distributed ledger
+      framework for developing solutions and applications. Its modular and
+      versatile design satisfies a broad range of industry use cases. It offers
+      a unique approach to consensus that enables performance at scale while
+      preserving privacy.
+    '';
+    homepage = "https://wiki.hyperledger.org/display/fabric";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hyperpotamus/default.nix b/nixpkgs/pkgs/tools/misc/hyperpotamus/default.nix
new file mode 100644
index 000000000000..869b8aea9143
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hyperpotamus/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "hyperpotamus";
+  version = "0.39.0";
+
+  src = fetchFromGitHub {
+    owner = "pmarkert";
+    repo = "hyperpotamus";
+    rev = "v${version}";
+    hash = "sha256-dExkvObz+PNjqAZnigZHs/DCSHq31jDg9pgFmmtPmWk=";
+  };
+
+  npmDepsHash = "sha256-cH0VEhs4q13gnFKQmmu8fXjueBu/u7xtySE6HTm+bik=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "YAML based HTTP script processing engine";
+    homepage = "https://github.com/pmarkert/hyperpotamus";
+    license = lib.licenses.mit;
+    mainProgram = "hyperpotamus";
+    maintainers = with lib.maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/i3minator/default.nix b/nixpkgs/pkgs/tools/misc/i3minator/default.nix
new file mode 100644
index 000000000000..4db029ef8fa2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/i3minator/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, python3Packages, glibcLocales }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "i3minator";
+  version = "0.0.4";
+
+  src = fetchFromGitHub {
+    owner = "carlesso";
+    repo = "i3minator";
+    rev = version;
+    sha256 = "07dic5d2m0zw0psginpl43xn0mpxw7wilj49d02knz69f7c416lm";
+  };
+
+  LC_ALL = "en_US.UTF-8";
+  buildInputs = [ glibcLocales ];
+  propagatedBuildInputs = [ python3Packages.pyyaml python3Packages.i3-py ];
+
+  # No tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "i3 project manager similar to tmuxinator";
+    longDescription = ''
+      A simple "workspace manager" for i3. It allows to quickly
+      manage workspaces defining windows and their layout. The
+      project is inspired by tmuxinator and uses i3-py.
+    '';
+    homepage = "https://github.com/carlesso/i3minator";
+    license = lib.licenses.wtfpl;
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = lib.platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/i3nator/default.nix b/nixpkgs/pkgs/tools/misc/i3nator/default.nix
new file mode 100644
index 000000000000..4c62e4ca8050
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/i3nator/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "i3nator";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "pitkley";
+    repo = pname;
+    rev = version;
+    sha256 = "10rxvxq48dhzlw5p9fsj6x0ci4pap85s9b192zakgvk4h97ifp2p";
+  };
+
+  cargoSha256 = "04sx1dsznvh60s2yd9bzbvj6fgjvj37vv33qpww13fyph832i37g";
+
+  meta = with lib; {
+    description = "Tmuxinator for the i3 window manager";
+    homepage = "https://github.com/pitkley/i3nator";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ mpoquet ];
+    mainProgram = "i3nator";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/iam-policy-json-to-terraform/default.nix b/nixpkgs/pkgs/tools/misc/iam-policy-json-to-terraform/default.nix
new file mode 100644
index 000000000000..a015f3dabfac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/iam-policy-json-to-terraform/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "iam-policy-json-to-terraform";
+  version = "1.8.2";
+
+  src = fetchFromGitHub {
+    owner = "flosell";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ovmWZpeHt1L8zNzG7+2BohteSjpYADMivi+AP0Vm8/E=";
+  };
+
+  vendorHash = "sha256-1WTc7peTJI3IvHJqznqRz29uQ2NG0CZpAAzlyYymZCQ=";
+
+  meta = with lib; {
+    description = "Small tool to convert an IAM Policy in JSON format into a Terraform aws_iam_policy_document ";
+    homepage = "https://github.com/flosell/iam-policy-json-to-terraform";
+    changelog = "https://github.com/flosell/iam-policy-json-to-terraform/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ivankovnatsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/iay/default.nix b/nixpkgs/pkgs/tools/misc/iay/default.nix
new file mode 100644
index 000000000000..1ef3d332e75d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/iay/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, openssl
+, pkg-config
+, AppKit
+, Cocoa
+, Foundation
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "iay";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "aaqaishtyaq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vk+1RbAmzRf2bbvbSpO+upVW4VrtYWM+5iiH73N+dsc=";
+  };
+
+  cargoHash = "sha256-+PpmxVPyRx/xF7jQGy/07xqALmdNp2uL3HZVOeRicqY=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    openssl
+  ]
+  ++ lib.optionals stdenv.isDarwin [
+    AppKit
+    Cocoa
+    Foundation
+    Security
+  ];
+
+  NIX_LDFLAGS = lib.optionals stdenv.isDarwin [ "-framework" "AppKit" ];
+
+  meta = with lib; {
+    description = "Minimalistic, blazing-fast, and extendable prompt for bash and zsh";
+    homepage = "https://github.com/aaqaishtyaq/iay";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaqaishtyaq omasanori ];
+    mainProgram = "iay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ibus-theme-tools/default.nix b/nixpkgs/pkgs/tools/misc/ibus-theme-tools/default.nix
new file mode 100644
index 000000000000..05c56edd3697
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ibus-theme-tools/default.nix
@@ -0,0 +1,30 @@
+{ lib, python3Packages, fetchFromGitHub, gettext }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ibus-theme-tools";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "openSUSE";
+    repo = "IBus-Theme-Tools";
+    rev = "v${version}";
+    sha256 = "0i8vwnikwd1bfpv4xlgzc51gn6s18q58nqhvcdiyjzcmy3z344c2";
+  };
+
+  buildInputs = [ gettext ];
+
+  propagatedBuildInputs = with python3Packages; [ tinycss2 pygobject3 ];
+
+  # No test.
+  doCheck = false;
+
+  pythonImportsCheck = [ "ibus_theme_tools" ];
+
+  meta = with lib; {
+    description = "Generate the IBus GTK or GNOME Shell theme from existing themes";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ hollowman6 ];
+    homepage = "https://github.com/openSUSE/IBus-Theme-Tools";
+    mainProgram = "ibus-theme-tools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ical2orgpy/default.nix b/nixpkgs/pkgs/tools/misc/ical2orgpy/default.nix
new file mode 100644
index 000000000000..ac5607b4a819
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ical2orgpy/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ical2orgpy";
+  version = "0.5";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ical2org-py";
+    repo = "ical2org.py";
+    rev = version;
+    hash = "sha256-vBi1WYXMuDFS/PnwFQ/fqN5+gIvtylXidfZklyd6LcI=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    future
+    icalendar
+    pytz
+    tzlocal
+    recurring-ical-events
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    freezegun
+    pytestCheckHook
+    pyyaml
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/ical2org-py/ical2org.py/blob/${src.rev}/CHANGELOG.rst";
+    description = "Converting ICAL file into org-mode format";
+    homepage = "https://github.com/ical2org-py/ical2org.py";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ StillerHarpo ];
+    mainProgram = "ical2orgpy";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/ictree/default.nix b/nixpkgs/pkgs/tools/misc/ictree/default.nix
new file mode 100644
index 000000000000..c8ffdc090c20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ictree/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ictree";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "NikitaIvanovV";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-77Wo6jN8VUGTXBuGL0a9kvSIixdyEQoxqqNsHq9jcWw=";
+    fetchSubmodules = true;
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Like tree but interactive";
+    homepage = "https://github.com/NikitaIvanovV/ictree";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ foo-dogsquared ];
+    mainProgram = "ictree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix b/nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix
new file mode 100644
index 000000000000..63bb1e7cb0fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, usbmuxd
+, libimobiledevice
+, libzip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ideviceinstaller";
+  version = "1.1.1+date=2023-04-30";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "71ec5eaa30d2780c2614b6b227a2229ea3aeb1e9";
+    hash = "sha256-YsQwAlt71vouYJzXl0P7b3fG/MfcwI947GtvN4g3/gM=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    usbmuxd
+    libimobiledevice
+    libzip
+  ];
+
+  # the package uses zip_get_num_entries, which is deprecated
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-Wno-error=deprecated-declarations"
+  ];
+
+  preAutoreconf = ''
+    export RELEASE_VERSION=${version}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/libimobiledevice/ideviceinstaller";
+    description = "List/modify installed apps of iOS devices";
+    longDescription = ''
+      ideviceinstaller is a tool to interact with the installation_proxy
+      of an iOS device allowing to install, upgrade, uninstall, archive, restore
+      and enumerate installed or archived apps.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ aristid infinisil ];
+    mainProgram = "ideviceinstaller";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/idevicerestore/default.nix b/nixpkgs/pkgs/tools/misc/idevicerestore/default.nix
new file mode 100644
index 000000000000..55fa9fcda8ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/idevicerestore/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, curl
+, libimobiledevice
+, libirecovery
+, libzip
+, libusbmuxd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "idevicerestore";
+  version = "1.0.0+date=2023-05-23";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "609f7f058487596597e8e742088119fdd46729df";
+    hash = "sha256-VXtXAitPC1+pxZlkGBg+u6yYhyM/jVpSgDO/6dXh5V4=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    libimobiledevice
+    libirecovery
+    libzip
+    libusbmuxd
+    # Not listing other dependencies specified in
+    # https://github.com/libimobiledevice/idevicerestore/blob/8a882038b2b1e022fbd19eaf8bea51006a373c06/README#L20
+    # because they are inherited `libimobiledevice`.
+  ];
+
+  preAutoreconf = ''
+    export RELEASE_VERSION=${version}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/libimobiledevice/idevicerestore";
+    description = "Restore/upgrade firmware of iOS devices";
+    longDescription = ''
+      The idevicerestore tool allows to restore firmware files to iOS devices.
+
+      It is a full reimplementation of all granular steps which are performed during
+      restore of a firmware to a device.
+
+      In general, upgrades and downgrades are possible, however subject to
+      availability of SHSH blobs from Apple for signing the firmare files.
+
+      To restore a device to some firmware, simply run the following:
+      $ sudo idevicerestore -l
+
+      This will download and restore a device to the latest firmware available.
+    '';
+    license = licenses.lgpl21Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ nh2 ];
+    mainProgram = "idevicerestore";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/idutils/default.nix b/nixpkgs/pkgs/tools/misc/idutils/default.nix
new file mode 100644
index 000000000000..cbdf1b761049
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/idutils/default.nix
@@ -0,0 +1,61 @@
+{ fetchurl, lib, stdenv, emacs, gnulib, autoconf, bison, automake, gettext, gperf, texinfo, perl, rsync, darwin }:
+
+stdenv.mkDerivation rec {
+  pname = "idutils";
+  version = "4.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/idutils/idutils-${version}.tar.xz";
+    sha256 = "1hmai3422iaqnp34kkzxdnywl7n7pvlxp11vrw66ybxn9wxg90c1";
+  };
+
+  preConfigure = ''
+    # replace embedded gnulib tests with those from gnulib package
+    bash -O extglob -c "cd gnulib-tests; rm -r !(Makefile.am)"
+    substituteInPlace ./configure.ac --replace "AC_PREREQ(2.61)" "AC_PREREQ(2.64)"
+    ./bootstrap --force --gnulib-srcdir=${gnulib} --skip-po --bootstrap-sync --no-git
+    '';
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    emacs
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  nativeBuildInputs = [ gnulib autoconf bison automake gettext gperf texinfo perl rsync ];
+
+  doCheck = !stdenv.isDarwin;
+
+  patches = [ ./nix-mapping.patch ];
+
+  meta = with lib; {
+    description = "Text searching utility";
+
+    longDescription = ''
+      An "ID database" is a binary file containing a list of file
+      names, a list of tokens, and a sparse matrix indicating which
+      tokens appear in which files.
+
+      With this database and some tools to query it, many
+      text-searching tasks become simpler and faster.  For example,
+      you can list all files that reference a particular `\#include'
+      file throughout a huge source hierarchy, search for all the
+      memos containing references to a project, or automatically
+      invoke an editor on all files containing references to some
+      function or variable.  Anyone with a large software project to
+      maintain, or a large set of text files to organize, can benefit
+      from the ID utilities.
+
+      Although the name `ID' is short for `identifier', the ID
+      utilities handle more than just identifiers; they also treat
+      other kinds of tokens, most notably numeric constants, and the
+      contents of certain character strings.
+    '';
+
+    homepage = "https://www.gnu.org/software/idutils/";
+    license = licenses.gpl3Plus;
+
+    maintainers = with maintainers; [ gfrascadorio ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch b/nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch
new file mode 100644
index 000000000000..6f92ffa07b52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch
@@ -0,0 +1,12 @@
+Recognize `.nix' files as text files.
+
+--- idutils-4.5/libidu/id-lang.map	2009-05-17 16:38:42.000000000 +0200
++++ idutils-4.5/libidu/id-lang.map	2010-07-04 15:52:48.000000000 +0200
+@@ -88,6 +88,7 @@ GNUmakefile		make
+ *.doc			text
+ *.txt			text
+ *.org			text
++*.nix			text
+ 
+ *.m4			m4
+ *.ac			m4
diff --git a/nixpkgs/pkgs/tools/misc/ikill/default.nix b/nixpkgs/pkgs/tools/misc/ikill/default.nix
new file mode 100644
index 000000000000..b5c18e5dfd97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ikill/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ikill";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "pjmp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hOQBBwxkVnTkAZJi84qArwAo54fMC0zS+IeYMV04kUs=";
+  };
+
+  cargoSha256 = "sha256-zKa2FP0lBS2XjgPWfyPZ60aHyeAe0uNIFbmuX4Uo1rA=";
+
+  meta = with lib; {
+    description = "Interactively kill running processes";
+    homepage = "https://github.com/pjmp/ikill";
+    maintainers = with maintainers; [ zendo ];
+    license = [ licenses.mit ];
+    platforms = platforms.linux;
+    mainProgram = "ikill";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ili2c/default.nix b/nixpkgs/pkgs/tools/misc/ili2c/default.nix
new file mode 100644
index 000000000000..ac4e3274e308
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ili2c/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, ant
+, jdk8
+, jre8
+, makeWrapper
+, canonicalize-jars-hook
+}:
+
+let
+  jdk = jdk8;
+  jre = jre8;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ili2c";
+  version = "5.1.1"; # There are newer versions, but they use gradle
+
+  nativeBuildInputs = [
+    ant
+    jdk
+    makeWrapper
+    canonicalize-jars-hook
+  ];
+
+  src = fetchFromGitHub {
+    owner = "claeis";
+    repo = "ili2c";
+    rev = "ili2c-${finalAttrs.version}";
+    hash = "sha256-FHhx+f253+UdbFjd2fOlUY1tpQ6pA2aVu9CBSwUVoKQ=";
+  };
+
+  patches = [
+    # avoids modifying Version.properties file because that would insert the current timestamp into the file
+    ./dont-use-build-timestamp.patch
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    ant jar
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm644 build/jar/ili2c.jar -t $out/share/ili2c
+    makeWrapper ${jre}/bin/java $out/bin/ili2c \
+        --add-flags "-jar $out/share/ili2c/ili2c.jar"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "The INTERLIS Compiler";
+    longDescription = ''
+      Checks the syntactical correctness of an INTERLIS data model.
+    '';
+    homepage = "https://www.interlis.ch/downloads/ili2c";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode # source bundles dependencies as jars
+    ];
+    license = licenses.lgpl21Plus;
+    maintainers = [ maintainers.das-g ];
+    platforms = platforms.linux;
+    mainProgram = "ili2c";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/ili2c/dont-use-build-timestamp.patch b/nixpkgs/pkgs/tools/misc/ili2c/dont-use-build-timestamp.patch
new file mode 100644
index 000000000000..e3388c54ab53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ili2c/dont-use-build-timestamp.patch
@@ -0,0 +1,29 @@
+diff --git a/build.xml b/build.xml
+index d0493d8..50d4286 100644
+--- a/build.xml
++++ b/build.xml
+@@ -221,11 +221,6 @@
+     </jar>
+   </target>
+   <target depends="init,compile-core,copyres" name="jar-core">
+-    <propertyfile file="${versionfile}">
+-	<!-- <entry  key="versionMicro" type="int" value="1" operation="+"/> -->
+-	<entry  key="versionDate" type="date" value="now" pattern="yyyyMMdd"/>
+-    </propertyfile>
+-
+     <jar jarfile="${build}/jar/${ant.project.name}-core.jar">
+ 	<!-- fileset dir="${build}/classes" excludes="ch/interlis/ili2c/tests/**/*.class" includes="ch/interlis/models/**/*.class,ch/interlis/ili2c/parser/**/*.class,ch/interlis/ili2c/generator/**/*.class,ch/interlis/ili2c/modelscan/**/*.class,ch/interlis/ili2c/metamodel/**/*.class,ch/interlis/ili2c/config/**/*.class,ch/interlis/ili2c/CompilerLogEvent.class,ch/interlis/ili2c/Ili2cException.class,ch/interlis/ili2c/Ili2cFailure.class,ch/interlis/ili2c/gui/UserSettings.class,ch/interlis/ilirepository/ReposManager.class,ch/interlis/ilirepository/impl/RepositoryAccessException.class,ch/interlis/ilirepository/Dataset.class"/--> 
+ 	<fileset dir="${build}/classes-core" excludes="ch/interlis/ili2c/tests/**/*.class" />
+diff --git a/src-core/ch/interlis/ili2c/metamodel/TransferDescription.java b/src-core/ch/interlis/ili2c/metamodel/TransferDescription.java
+index 9e165af..86d8f89 100644
+--- a/src-core/ch/interlis/ili2c/metamodel/TransferDescription.java
++++ b/src-core/ch/interlis/ili2c/metamodel/TransferDescription.java
+@@ -219,7 +219,7 @@ public static final String MIMETYPE_XTF = "application/interlis+xml;version=2.3"
+       ret.append(branch);
+       ret.append('-');
+       }
+-      ret.append(resVersion.getString("versionDate"));
++      ret.append("nixpkgs");
+       version = ret.toString();
+   }
+   return version;
diff --git a/nixpkgs/pkgs/tools/misc/immich-cli/default.nix b/nixpkgs/pkgs/tools/misc/immich-cli/default.nix
new file mode 100644
index 000000000000..82d8e96ec798
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/immich-cli/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage {
+  pname = "immich-cli";
+  version = "2.0.6";
+
+  src = fetchFromGitHub {
+    owner = "immich-app";
+    repo = "immich";
+    # Using a fixed commit until upstream has release tags for cli.
+    rev = "014adf175ad50a61f92804666940e267ab329064";
+    hash = "sha256-MK3Watq5/Zp+rymCIfWxAXSgBPDE13g23uDnW7A5x9g=";
+  };
+
+  npmDepsHash = "sha256-ssxOXKE1t/bSb972w/cBeK61IrqPLmx9ODMn6D+2Ezw=";
+
+  postPatch = ''
+    cd cli
+  '';
+
+  meta = {
+    description = "CLI utilities for Immich to help upload images and videos";
+    homepage = "https://github.com/immich-app/immich";
+    license = lib.licenses.mit;
+    mainProgram = "immich";
+    maintainers = with lib.maintainers; [ felschr pineapplehunter ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/inav-blackbox-tools/default.nix b/nixpkgs/pkgs/tools/misc/inav-blackbox-tools/default.nix
new file mode 100644
index 000000000000..43524f6a3fe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inav-blackbox-tools/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, cairo }:
+
+stdenv.mkDerivation rec {
+  pname = "inav-blackbox-tools";
+  version = "unstable-2021-04-22";
+
+  src = fetchFromGitHub {
+    owner = "iNavFlight";
+    repo = "blackbox-tools";
+    rev = "0109e2fb9b44d593e60bca4cef4098d83c55c373";
+    sha256 = "1rdlw74dqq0hahnka2w2pgvs172vway2x6v8byxl2s773l22k4ln";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ cairo ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    cp obj/{blackbox_decode,blackbox_render,encoder_testbed} "$out/bin"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tools for working with blackbox flight logs";
+    homepage = "https://github.com/inavflight/blackbox-tools";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ expipiplus1 ];
+    platforms = platforms.all;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/inav-blackbox-tools.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/infracost/default.nix b/nixpkgs/pkgs/tools/misc/infracost/default.nix
new file mode 100644
index 000000000000..ddec6c3c5d89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/infracost/default.nix
@@ -0,0 +1,68 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "infracost";
+  version = "0.10.33";
+
+  src = fetchFromGitHub {
+    owner = "infracost";
+    rev = "v${version}";
+    repo = "infracost";
+    sha256 = "sha256-zIAf6lD9XFmrAgvVmIY+tXLn4FmkkdimjVCWasK7OCc=";
+  };
+  vendorHash = "sha256-ji9TpUcq0aUAn5vV5dnaC15i0Uli2Qsz/BrOKB3/Rl4=";
+
+  ldflags = [ "-s" "-w" "-X github.com/infracost/infracost/internal/version.Version=v${version}" ];
+
+  subPackages = [ "cmd/infracost" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preCheck = ''
+    # Feed in all tests for testing
+    # This is because subPackages above limits what is built to just what we
+    # want but also limits the tests
+    unset subPackages
+
+    # checkFlags aren't correctly passed through via buildGoModule so we use buildFlagsArray
+    # -short only runs the unit-tests tagged short
+    # move to checkFlags after https://github.com/NixOS/nixpkgs/pull/173702
+    buildFlagsArray+="-short"
+
+    # remove tests that require networking
+    rm cmd/infracost/{breakdown,diff,hcl,run}_test.go
+  '';
+
+  postInstall = ''
+    export INFRACOST_SKIP_UPDATE_CHECK=true
+    installShellCompletion --cmd infracost \
+      --bash <($out/bin/infracost completion --shell bash) \
+      --fish <($out/bin/infracost completion --shell fish) \
+      --zsh <($out/bin/infracost completion --shell zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    export INFRACOST_SKIP_UPDATE_CHECK=true
+    $out/bin/infracost --help
+    $out/bin/infracost --version | grep "v${version}"
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://infracost.io";
+    changelog = "https://github.com/infracost/infracost/releases/tag/v${version}";
+    description = "Cloud cost estimates for Terraform in your CLI and pull requests";
+    longDescription = ''
+      Infracost shows hourly and monthly cost estimates for a Terraform project.
+      This helps developers, DevOps et al. quickly see the cost breakdown and
+      compare different deployment options upfront.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ davegallant jk kashw2 ];
+    mainProgram = "infracost";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ink/default.nix b/nixpkgs/pkgs/tools/misc/ink/default.nix
new file mode 100644
index 000000000000..30df6e9691fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ink/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, libinklevel }:
+
+stdenv.mkDerivation rec {
+  pname = "ink";
+  version = "0.5.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1fk0b8vic04a3i3vmq73hbk7mzbi57s8ks6ighn3mvr6m2v8yc9d";
+  };
+
+  buildInputs = [
+    libinklevel
+  ];
+
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
+    description = "A command line tool for checking the ink level of your locally connected printer";
+    longDescription = ''
+      Ink is a command line tool for checking the ink level of your locally connected printer on a system which runs Linux or FreeBSD. Canon BJNP network printers are supported too.
+    '';
+    homepage = "https://ink.sourceforge.net/";
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ platforms.freebsd;
+    maintainers = with maintainers; [ samb96 ];
+    mainProgram = "ink";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/inklingreader/default.nix b/nixpkgs/pkgs/tools/misc/inklingreader/default.nix
new file mode 100644
index 000000000000..efe1eeb34aeb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inklingreader/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, gtk3
+, librsvg
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "inklingreader";
+  version = "unstable-2017-09-07";
+
+  src = fetchFromGitHub {
+    owner = "roelj";
+    repo = "inklingreader";
+    rev = "90f9d0d7f5353657f4d25fd75635e29c10c08d2e";
+    sha256 = "sha256-852m8g61r+NQhCYz9ghSbCG0sjao2E8B9GS06NG4GyY=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+  buildInputs = [
+    gtk3
+    librsvg
+    libusb1
+  ];
+
+  meta = {
+    homepage = "https://github.com/roelj/inklingreader";
+    description = "A GNU/Linux-friendly version of the Wacom Inkling SketchManager";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ totoroot ];
+    platforms = lib.platforms.linux;
+    mainProgram = "inklingreader";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/inspec/Gemfile b/nixpkgs/pkgs/tools/misc/inspec/Gemfile
new file mode 100644
index 000000000000..b1627ca5e5d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inspec/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+gem "inspec"
+gem "inspec-bin"
diff --git a/nixpkgs/pkgs/tools/misc/inspec/Gemfile.lock b/nixpkgs/pkgs/tools/misc/inspec/Gemfile.lock
new file mode 100644
index 000000000000..503207134db0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inspec/Gemfile.lock
@@ -0,0 +1,643 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.0.4.3)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    addressable (2.8.4)
+      public_suffix (>= 2.0.2, < 6.0)
+    ast (2.4.2)
+    aws-eventstream (1.2.0)
+    aws-partitions (1.749.0)
+    aws-sdk-alexaforbusiness (1.58.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-amplify (1.32.0)
+      aws-sdk-core (~> 3, >= 3.120.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-apigateway (1.81.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-apigatewayv2 (1.44.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-applicationautoscaling (1.51.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-athena (1.64.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-autoscaling (1.63.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-batch (1.47.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-budgets (1.52.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudformation (1.77.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudfront (1.76.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudhsm (1.41.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudhsmv2 (1.44.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudtrail (1.58.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudwatch (1.72.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudwatchevents (1.46.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudwatchlogs (1.62.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-codecommit (1.53.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-codedeploy (1.52.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-codepipeline (1.55.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cognitoidentity (1.31.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cognitoidentityprovider (1.53.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-configservice (1.89.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-core (3.171.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.651.0)
+      aws-sigv4 (~> 1.5)
+      jmespath (~> 1, >= 1.6.1)
+    aws-sdk-costandusagereportservice (1.43.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-databasemigrationservice (1.53.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-dynamodb (1.84.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ec2 (1.375.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ecr (1.58.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ecrpublic (1.16.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ecs (1.114.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-efs (1.59.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-eks (1.83.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticache (1.84.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticbeanstalk (1.54.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticloadbalancing (1.42.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticloadbalancingv2 (1.84.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticsearchservice (1.69.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-emr (1.53.0)
+      aws-sdk-core (~> 3, >= 3.121.2)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-eventbridge (1.24.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-firehose (1.51.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-glue (1.88.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-guardduty (1.67.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-iam (1.77.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kafka (1.54.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kinesis (1.45.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kms (1.63.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-lambda (1.95.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-mq (1.40.0)
+      aws-sdk-core (~> 3, >= 3.120.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-networkfirewall (1.26.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-networkmanager (1.30.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-organizations (1.59.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ram (1.26.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-rds (1.176.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-redshift (1.91.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-route53 (1.71.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-route53domains (1.43.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-route53resolver (1.40.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.120.1)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.4)
+    aws-sdk-s3control (1.43.0)
+      aws-sdk-core (~> 3, >= 3.122.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-secretsmanager (1.46.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-securityhub (1.79.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-servicecatalog (1.60.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ses (1.41.0)
+      aws-sdk-core (~> 3, >= 3.120.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-shield (1.51.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-signer (1.32.0)
+      aws-sdk-core (~> 3, >= 3.120.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-simpledb (1.29.0)
+      aws-sdk-core (~> 3, >= 3.120.0)
+      aws-sigv2 (~> 1.0)
+    aws-sdk-sms (1.43.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-sns (1.60.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-sqs (1.53.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ssm (1.150.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-states (1.39.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-synthetics (1.19.0)
+      aws-sdk-core (~> 3, >= 3.121.2)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-transfer (1.34.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-waf (1.43.0)
+      aws-sdk-core (~> 3, >= 3.122.0)
+      aws-sigv4 (~> 1.1)
+    aws-sigv2 (1.1.0)
+    aws-sigv4 (1.5.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+    azure_graph_rbac (0.17.2)
+      ms_rest_azure (~> 0.12.0)
+    azure_mgmt_key_vault (0.17.7)
+      ms_rest_azure (~> 0.12.0)
+    azure_mgmt_resources (0.18.2)
+      ms_rest_azure (~> 0.12.0)
+    azure_mgmt_security (0.19.0)
+      ms_rest_azure (~> 0.12.0)
+    azure_mgmt_storage (0.23.0)
+      ms_rest_azure (~> 0.12.0)
+    bson (4.15.0)
+    builder (3.2.4)
+    chef-config (18.2.7)
+      addressable
+      chef-utils (= 18.2.7)
+      fuzzyurl
+      mixlib-config (>= 2.2.12, < 4.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      tomlrb (~> 1.2)
+    chef-telemetry (1.1.1)
+      chef-config
+      concurrent-ruby (~> 1.0)
+    chef-utils (18.2.7)
+      concurrent-ruby
+    coderay (1.1.3)
+    concurrent-ruby (1.2.2)
+    cookstyle (7.32.2)
+      rubocop (= 1.25.1)
+    declarative (0.0.20)
+    diff-lcs (1.5.0)
+    docker-api (2.2.0)
+      excon (>= 0.47.0)
+      multi_json
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
+    erubi (1.12.0)
+    excon (0.99.0)
+    faraday (1.10.3)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-httpclient (~> 1.0)
+      faraday-multipart (~> 1.0)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.0)
+      faraday-patron (~> 1.0)
+      faraday-rack (~> 1.0)
+      faraday-retry (~> 1.0)
+      ruby2_keywords (>= 0.0.4)
+    faraday-cookie_jar (0.0.7)
+      faraday (>= 0.8.0)
+      http-cookie (~> 1.0.0)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-follow_redirects (0.3.0)
+      faraday (>= 1, < 3)
+    faraday-httpclient (1.0.1)
+    faraday-multipart (1.0.4)
+      multipart-post (~> 2)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday-patron (1.0.0)
+    faraday-rack (1.0.0)
+    faraday-retry (1.0.3)
+    faraday_middleware (1.0.0)
+      faraday (~> 1.0)
+    ffi (1.15.5)
+    fuzzyurl (0.9.0)
+    google-api-client (0.52.0)
+      addressable (~> 2.5, >= 2.5.1)
+      googleauth (~> 0.9)
+      httpclient (>= 2.8.1, < 3.0)
+      mini_mime (~> 1.0)
+      representable (~> 3.0)
+      retriable (>= 2.0, < 4.0)
+      rexml
+      signet (~> 0.12)
+    googleauth (0.14.0)
+      faraday (>= 0.17.3, < 2.0)
+      jwt (>= 1.4, < 3.0)
+      memoist (~> 0.16)
+      multi_json (~> 1.11)
+      os (>= 0.9, < 2.0)
+      signet (~> 0.14)
+    gssapi (1.3.1)
+      ffi (>= 1.0.1)
+    gyoku (1.4.0)
+      builder (>= 2.1.2)
+      rexml (~> 3.0)
+    hashie (4.1.0)
+    highline (2.1.0)
+    http-cookie (1.0.5)
+      domain_name (~> 0.5)
+    httpclient (2.8.3)
+    i18n (1.12.0)
+      concurrent-ruby (~> 1.0)
+    inifile (3.0.0)
+    inspec (5.21.29)
+      cookstyle
+      faraday_middleware (>= 0.12.2, < 1.1)
+      inspec-core (= 5.21.29)
+      mongo (= 2.13.2)
+      progress_bar (~> 1.3.3)
+      rake
+      train (~> 3.10)
+      train-aws (~> 0.2)
+      train-habitat (~> 0.1)
+      train-winrm (~> 0.2)
+    inspec-bin (5.21.29)
+      inspec (= 5.21.29)
+    inspec-core (5.21.29)
+      addressable (~> 2.4)
+      chef-telemetry (~> 1.0, >= 1.0.8)
+      faraday (>= 1, < 3)
+      faraday-follow_redirects (~> 0.3)
+      hashie (>= 3.4, < 5.0)
+      license-acceptance (>= 0.2.13, < 3.0)
+      method_source (>= 0.8, < 2.0)
+      mixlib-log (~> 3.0)
+      multipart-post (~> 2.0)
+      parallel (~> 1.9)
+      parslet (>= 1.5, < 2.0)
+      pry (~> 0.13)
+      rspec (>= 3.9, <= 3.11)
+      rspec-its (~> 1.2)
+      rubyzip (>= 1.2.2, < 3.0)
+      semverse (~> 3.0)
+      sslshake (~> 1.2)
+      thor (>= 0.20, < 2.0)
+      tomlrb (>= 1.2, < 2.1)
+      train-core (~> 3.10)
+      tty-prompt (~> 0.17)
+      tty-table (~> 0.10)
+    jmespath (1.6.2)
+    json (2.6.3)
+    jwt (2.7.0)
+    license-acceptance (2.1.13)
+      pastel (~> 0.7)
+      tomlrb (>= 1.2, < 3.0)
+      tty-box (~> 0.6)
+      tty-prompt (~> 0.20)
+    little-plugger (1.1.4)
+    logging (2.3.1)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.14)
+    memoist (0.16.2)
+    method_source (1.0.0)
+    mini_mime (1.1.2)
+    minitest (5.18.0)
+    mixlib-config (3.0.27)
+      tomlrb
+    mixlib-log (3.0.9)
+    mixlib-shellout (3.2.7)
+      chef-utils
+    mongo (2.13.2)
+      bson (>= 4.8.2, < 5.0.0)
+    ms_rest (0.7.6)
+      concurrent-ruby (~> 1.0)
+      faraday (>= 0.9, < 2.0.0)
+      timeliness (~> 0.3.10)
+    ms_rest_azure (0.12.0)
+      concurrent-ruby (~> 1.0)
+      faraday (>= 0.9, < 2.0.0)
+      faraday-cookie_jar (~> 0.0.6)
+      ms_rest (~> 0.7.6)
+    multi_json (1.15.0)
+    multipart-post (2.3.0)
+    net-scp (4.0.0)
+      net-ssh (>= 2.6.5, < 8.0.0)
+    net-ssh (7.1.0)
+    nori (2.6.0)
+    options (2.3.2)
+    os (1.1.4)
+    parallel (1.23.0)
+    parser (3.2.2.0)
+      ast (~> 2.4.1)
+    parslet (1.8.2)
+    pastel (0.8.0)
+      tty-color (~> 0.5)
+    progress_bar (1.3.3)
+      highline (>= 1.6, < 3)
+      options (~> 2.3.0)
+    pry (0.14.2)
+      coderay (~> 1.1)
+      method_source (~> 1.0)
+    public_suffix (5.0.1)
+    rainbow (3.1.1)
+    rake (13.0.6)
+    regexp_parser (2.8.0)
+    representable (3.2.0)
+      declarative (< 0.1.0)
+      trailblazer-option (>= 0.1.1, < 0.2.0)
+      uber (< 0.2.0)
+    retriable (3.1.2)
+    rexml (3.2.5)
+    rspec (3.11.0)
+      rspec-core (~> 3.11.0)
+      rspec-expectations (~> 3.11.0)
+      rspec-mocks (~> 3.11.0)
+    rspec-core (3.11.0)
+      rspec-support (~> 3.11.0)
+    rspec-expectations (3.11.1)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.11.0)
+    rspec-its (1.3.0)
+      rspec-core (>= 3.0.0)
+      rspec-expectations (>= 3.0.0)
+    rspec-mocks (3.11.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.11.0)
+    rspec-support (3.11.1)
+    rubocop (1.25.1)
+      parallel (~> 1.10)
+      parser (>= 3.1.0.0)
+      rainbow (>= 2.2.2, < 4.0)
+      regexp_parser (>= 1.8, < 3.0)
+      rexml
+      rubocop-ast (>= 1.15.1, < 2.0)
+      ruby-progressbar (~> 1.7)
+      unicode-display_width (>= 1.4.0, < 3.0)
+    rubocop-ast (1.28.0)
+      parser (>= 3.2.1.0)
+    ruby-progressbar (1.13.0)
+    ruby2_keywords (0.0.5)
+    rubyntlm (0.6.3)
+    rubyzip (2.3.2)
+    semverse (3.0.2)
+    signet (0.17.0)
+      addressable (~> 2.8)
+      faraday (>= 0.17.5, < 3.a)
+      jwt (>= 1.5, < 3.0)
+      multi_json (~> 1.10)
+    sslshake (1.3.1)
+    strings (0.2.1)
+      strings-ansi (~> 0.2)
+      unicode-display_width (>= 1.5, < 3.0)
+      unicode_utils (~> 1.4)
+    strings-ansi (0.2.0)
+    thor (1.2.1)
+    timeliness (0.3.10)
+    tomlrb (1.3.0)
+    trailblazer-option (0.1.2)
+    train (3.10.7)
+      activesupport (>= 6.0.3.1)
+      azure_graph_rbac (~> 0.16)
+      azure_mgmt_key_vault (~> 0.17)
+      azure_mgmt_resources (~> 0.15)
+      azure_mgmt_security (~> 0.18)
+      azure_mgmt_storage (~> 0.18)
+      docker-api (>= 1.26, < 3.0)
+      google-api-client (>= 0.23.9, <= 0.52.0)
+      googleauth (>= 0.6.6, <= 0.14.0)
+      inifile (~> 3.0)
+      train-core (= 3.10.7)
+      train-winrm (~> 0.2)
+    train-aws (0.2.24)
+      aws-sdk-alexaforbusiness (~> 1.0)
+      aws-sdk-amplify (~> 1.32.0)
+      aws-sdk-apigateway (~> 1.0)
+      aws-sdk-apigatewayv2 (~> 1.0)
+      aws-sdk-applicationautoscaling (>= 1.46, < 1.52)
+      aws-sdk-athena (~> 1.0)
+      aws-sdk-autoscaling (>= 1.22, < 1.64)
+      aws-sdk-batch (>= 1.36, < 1.48)
+      aws-sdk-budgets (~> 1.0)
+      aws-sdk-cloudformation (~> 1.0)
+      aws-sdk-cloudfront (~> 1.0)
+      aws-sdk-cloudhsm (~> 1.0)
+      aws-sdk-cloudhsmv2 (~> 1.0)
+      aws-sdk-cloudtrail (~> 1.8)
+      aws-sdk-cloudwatch (~> 1.13)
+      aws-sdk-cloudwatchevents (>= 1.36, < 1.47)
+      aws-sdk-cloudwatchlogs (~> 1.13)
+      aws-sdk-codecommit (~> 1.0)
+      aws-sdk-codedeploy (~> 1.0)
+      aws-sdk-codepipeline (~> 1.0)
+      aws-sdk-cognitoidentity (>= 1.26, < 1.32)
+      aws-sdk-cognitoidentityprovider (>= 1.46, < 1.54)
+      aws-sdk-configservice (~> 1.21)
+      aws-sdk-core (~> 3.0)
+      aws-sdk-costandusagereportservice (~> 1.6)
+      aws-sdk-databasemigrationservice (>= 1.42, < 1.54)
+      aws-sdk-dynamodb (~> 1.31)
+      aws-sdk-ec2 (~> 1.70)
+      aws-sdk-ecr (~> 1.18)
+      aws-sdk-ecrpublic (~> 1.3)
+      aws-sdk-ecs (~> 1.30)
+      aws-sdk-efs (~> 1.0)
+      aws-sdk-eks (~> 1.9)
+      aws-sdk-elasticache (~> 1.0)
+      aws-sdk-elasticbeanstalk (~> 1.0)
+      aws-sdk-elasticloadbalancing (~> 1.8)
+      aws-sdk-elasticloadbalancingv2 (~> 1.0)
+      aws-sdk-elasticsearchservice (~> 1.0)
+      aws-sdk-emr (~> 1.53.0)
+      aws-sdk-eventbridge (~> 1.24.0)
+      aws-sdk-firehose (~> 1.0)
+      aws-sdk-glue (>= 1.71, < 1.89)
+      aws-sdk-guardduty (~> 1.31)
+      aws-sdk-iam (~> 1.13)
+      aws-sdk-kafka (~> 1.0)
+      aws-sdk-kinesis (~> 1.0)
+      aws-sdk-kms (~> 1.13)
+      aws-sdk-lambda (~> 1.0)
+      aws-sdk-mq (~> 1.40.0)
+      aws-sdk-networkfirewall (>= 1.6.0)
+      aws-sdk-networkmanager (>= 1.13.0)
+      aws-sdk-organizations (>= 1.17, < 1.60)
+      aws-sdk-ram (>= 1.21, < 1.27)
+      aws-sdk-rds (~> 1.43)
+      aws-sdk-redshift (~> 1.0)
+      aws-sdk-route53 (~> 1.0)
+      aws-sdk-route53domains (~> 1.0)
+      aws-sdk-route53resolver (~> 1.0)
+      aws-sdk-s3 (~> 1.30)
+      aws-sdk-s3control (~> 1.43.0)
+      aws-sdk-secretsmanager (>= 1.42, < 1.47)
+      aws-sdk-securityhub (~> 1.0)
+      aws-sdk-servicecatalog (>= 1.48, < 1.61)
+      aws-sdk-ses (~> 1.41.0)
+      aws-sdk-shield (~> 1.30)
+      aws-sdk-signer (~> 1.32.0)
+      aws-sdk-simpledb (~> 1.29.0)
+      aws-sdk-sms (~> 1.0)
+      aws-sdk-sns (~> 1.9)
+      aws-sdk-sqs (~> 1.10)
+      aws-sdk-ssm (~> 1.0)
+      aws-sdk-states (>= 1.35, < 1.40)
+      aws-sdk-synthetics (~> 1.19.0)
+      aws-sdk-transfer (>= 1.26, < 1.35)
+      aws-sdk-waf (~> 1.43.0)
+    train-core (3.10.7)
+      addressable (~> 2.5)
+      ffi (!= 1.13.0)
+      json (>= 1.8, < 3.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      net-scp (>= 1.2, < 5.0)
+      net-ssh (>= 2.9, < 8.0)
+    train-habitat (0.2.22)
+    train-winrm (0.2.13)
+      winrm (>= 2.3.6, < 3.0)
+      winrm-elevated (~> 1.2.2)
+      winrm-fs (~> 1.0)
+    tty-box (0.7.0)
+      pastel (~> 0.8)
+      strings (~> 0.2.0)
+      tty-cursor (~> 0.7)
+    tty-color (0.6.0)
+    tty-cursor (0.7.1)
+    tty-prompt (0.23.1)
+      pastel (~> 0.8)
+      tty-reader (~> 0.8)
+    tty-reader (0.9.0)
+      tty-cursor (~> 0.7)
+      tty-screen (~> 0.8)
+      wisper (~> 2.0)
+    tty-screen (0.8.1)
+    tty-table (0.12.0)
+      pastel (~> 0.8)
+      strings (~> 0.2.0)
+      tty-screen (~> 0.8)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    uber (0.1.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.8.2)
+    unicode-display_width (2.4.2)
+    unicode_utils (1.4.0)
+    winrm (2.3.6)
+      builder (>= 2.1.2)
+      erubi (~> 1.8)
+      gssapi (~> 1.2)
+      gyoku (~> 1.0)
+      httpclient (~> 2.2, >= 2.2.0.2)
+      logging (>= 1.6.1, < 3.0)
+      nori (~> 2.0)
+      rubyntlm (~> 0.6.0, >= 0.6.3)
+    winrm-elevated (1.2.3)
+      erubi (~> 1.8)
+      winrm (~> 2.0)
+      winrm-fs (~> 1.0)
+    winrm-fs (1.3.5)
+      erubi (~> 1.8)
+      logging (>= 1.6.1, < 3.0)
+      rubyzip (~> 2.0)
+      winrm (~> 2.0)
+    wisper (2.0.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  inspec!
+  inspec-bin!
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/inspec/default.nix b/nixpkgs/pkgs/tools/misc/inspec/default.nix
new file mode 100644
index 000000000000..759b1fcaed87
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inspec/default.nix
@@ -0,0 +1,20 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "inspec";
+  gemdir = ./.;
+
+  inherit ruby;
+
+  exes = ["inspec"];
+
+  passthru.updateScript = bundlerUpdateScript "inspec";
+
+  meta = with lib; {
+    description = "Inspec is an open-source testing framework for infrastructure with a human- and machine-readable language for specifying compliance, security and policy requirements";
+    homepage = "https://inspec.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dylanmtaylor ];
+    mainProgram = "inspec";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/inspec/gemset.nix b/nixpkgs/pkgs/tools/misc/inspec/gemset.nix
new file mode 100644
index 000000000000..ac2a8914427f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inspec/gemset.nix
@@ -0,0 +1,2230 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15m0b1im6i401ab51vzr7f8nk8kys1qa0snnl741y3sir3xd07jp";
+      type = "gem";
+    };
+    version = "7.0.4.3";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15s8van7r2ad3dq6i03l3z4hqnvxcq75a3h72kxvf9an53sqma20";
+      type = "gem";
+    };
+    version = "2.8.4";
+  };
+  ast = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12n41py8jfxf9p3gy62ikw8n7wd0cmczk3i2fzxb4ms2xvkxv7b0";
+      type = "gem";
+    };
+    version = "1.749.0";
+  };
+  aws-sdk-alexaforbusiness = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hbb2fpmxb77bp4mm3z24k8vhcc8y9ngjz9jarb54v4lbs8cmlq6";
+      type = "gem";
+    };
+    version = "1.58.0";
+  };
+  aws-sdk-amplify = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fv4w1npqglxm9sl6939akjw3y1ivhpl55i75azvbzx0f7abh3b8";
+      type = "gem";
+    };
+    version = "1.32.0";
+  };
+  aws-sdk-apigateway = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m3vxlx20hjd14hc90k4lvqvhblh4c9m14pbnqp3k271zpaljnzx";
+      type = "gem";
+    };
+    version = "1.81.0";
+  };
+  aws-sdk-apigatewayv2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lq2qzxk396kbmbxcsx8ic61758zl3ynxymwia1wzdxwkpsxks71";
+      type = "gem";
+    };
+    version = "1.44.0";
+  };
+  aws-sdk-applicationautoscaling = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lp008dcyiqcz90fkck5dgx23ycgk04rhd0n1ywz14rg45844nfn";
+      type = "gem";
+    };
+    version = "1.51.0";
+  };
+  aws-sdk-athena = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qzdnv42x0q2f53zsvj7i56b49n82zbx3qikcf9mp2bgxsbddvg8";
+      type = "gem";
+    };
+    version = "1.64.0";
+  };
+  aws-sdk-autoscaling = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wr9dkf88h46s9n173imvbm6233a8d3cmcnvbm2s3bz0glzp0k4c";
+      type = "gem";
+    };
+    version = "1.63.0";
+  };
+  aws-sdk-batch = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xd8yvvxdmha951h8b1qjijx3l21c9pwjr6nifaxjylpx5897fc0";
+      type = "gem";
+    };
+    version = "1.47.0";
+  };
+  aws-sdk-budgets = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qmlqplc5l72p3mgpin3wjcdny4fbnq9lwcn55vphp8kgdzvv74p";
+      type = "gem";
+    };
+    version = "1.52.0";
+  };
+  aws-sdk-cloudformation = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1634skrhc9nj46smvclx3767qvj02ydqjw15rkww1pigqvh46mcz";
+      type = "gem";
+    };
+    version = "1.77.0";
+  };
+  aws-sdk-cloudfront = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jfrqwrvp9iv7sf24w0bbw094nz87w1gvrbq1725b0d0bry66ydy";
+      type = "gem";
+    };
+    version = "1.76.0";
+  };
+  aws-sdk-cloudhsm = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gis7ggljdsygb64knxfg6vxn8rbk5zfgcxqrjhvf4812hqzv4sp";
+      type = "gem";
+    };
+    version = "1.41.0";
+  };
+  aws-sdk-cloudhsmv2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10fcy73lvivjdywklkqhp70jik2fscp0cz54qdzjpdhwvvpvgnfk";
+      type = "gem";
+    };
+    version = "1.44.0";
+  };
+  aws-sdk-cloudtrail = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zfppjsasqbdhv9vvvjqif3b4mxgchw0i66hyxpc2gswk2a5803j";
+      type = "gem";
+    };
+    version = "1.58.0";
+  };
+  aws-sdk-cloudwatch = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vls66mnkmxd05wqadgh7hfknj7yhnsfdms43cy607jv057lcqn4";
+      type = "gem";
+    };
+    version = "1.72.0";
+  };
+  aws-sdk-cloudwatchevents = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xfyviddwll6n4lxl3g57x86gic9ycppnmpnl90jsbgy2dp12632";
+      type = "gem";
+    };
+    version = "1.46.0";
+  };
+  aws-sdk-cloudwatchlogs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1paqyv0m55ag25liwmgqdj1vwi3yd231hvn419i0y1wg5ffcsg7j";
+      type = "gem";
+    };
+    version = "1.62.0";
+  };
+  aws-sdk-codecommit = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vzpfsnnvwp21d9rsdaaml8fsigbwj344ghqw9834m4y3g7xax80";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-codedeploy = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g8lp4ci1b40rx754hf2vfpzl4v9zi5vjakzmc1r9fg58x0v9wyv";
+      type = "gem";
+    };
+    version = "1.52.0";
+  };
+  aws-sdk-codepipeline = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kvzsssfas7m2sxmfirnl0bp49m079bgj8lg5rlj2gri3wdgkx3f";
+      type = "gem";
+    };
+    version = "1.55.0";
+  };
+  aws-sdk-cognitoidentity = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k7d4riiczkkxi4l3nh8nd2sn449j73s9cwcbk6b37lnkvq81kq2";
+      type = "gem";
+    };
+    version = "1.31.0";
+  };
+  aws-sdk-cognitoidentityprovider = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j2v3m0d5d756nm98xgf10kz4cz68a8m9xlwzlqh86smqcml6v25";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-configservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lky7k2fqzqs8lpm3wqa5vw1b7np8g82hi39m6fsk1wvahx6kiwa";
+      type = "gem";
+    };
+    version = "1.89.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0732vv8zi67z25fss1sdvqx0vv1ap3w6hz1avxzwznkjp002vj39";
+      type = "gem";
+    };
+    version = "3.171.0";
+  };
+  aws-sdk-costandusagereportservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l9df1dji0m1sj6w5gjmxd0bjv7q858pnhwjhfkr0mfdk1dnsjbj";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-databasemigrationservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kppbmbd26bmbwy1f803symy36kbigf5mdgd91jh5r2l63418m46";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-dynamodb = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h7sl8236mgq0q6mzbznrq3wksr3jd4m8lwj6bkz678z6mxa0fal";
+      type = "gem";
+    };
+    version = "1.84.0";
+  };
+  aws-sdk-ec2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj67jzg81nr3da2mwh27b22ps2waz41fhvc2f2khdfjazi7knqv";
+      type = "gem";
+    };
+    version = "1.375.0";
+  };
+  aws-sdk-ecr = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cyscy0v5xsk8x946r125bidrzx7y4fam09ra8pl8xjp5a0706ig";
+      type = "gem";
+    };
+    version = "1.58.0";
+  };
+  aws-sdk-ecrpublic = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15iz3wnc2z3n0f9lnbfgqyyi0bg6l65dyn5wc09p8wilg6jlib5c";
+      type = "gem";
+    };
+    version = "1.16.0";
+  };
+  aws-sdk-ecs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pkz2fy63wr6wfzmwyscfzsjn4443cp7y4kzvirg1gcyq1cpyxgy";
+      type = "gem";
+    };
+    version = "1.114.0";
+  };
+  aws-sdk-efs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r16nqsqhlc429p9hd1j226fkd9xq6x4ybm01sj482vjg4wsq4qg";
+      type = "gem";
+    };
+    version = "1.59.0";
+  };
+  aws-sdk-eks = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12k9i7syfmxlk5dracwvin03bjhy8abyd58180z4zmq77al0dn24";
+      type = "gem";
+    };
+    version = "1.83.0";
+  };
+  aws-sdk-elasticache = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wydzznzk4zhy3bh4ra8b2dsdhhib4ahnppni72zhr3dvda0pxfg";
+      type = "gem";
+    };
+    version = "1.84.0";
+  };
+  aws-sdk-elasticbeanstalk = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13haliasq2k74xhk0sl2rb9x14vk980rnp2rzm5d0jls42mkkzsm";
+      type = "gem";
+    };
+    version = "1.54.0";
+  };
+  aws-sdk-elasticloadbalancing = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jf2mcb1lqqm5dpmrhrlszmf9hb98kj6i7yw118lqn5dkb1mjjy1";
+      type = "gem";
+    };
+    version = "1.42.0";
+  };
+  aws-sdk-elasticloadbalancingv2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yzyk4q2g3hx74fhr7y37n8zp349g71micwzix5gwbjhfpjizy72";
+      type = "gem";
+    };
+    version = "1.84.0";
+  };
+  aws-sdk-elasticsearchservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rz8hs78cd1lxcha29y751hxrv6yhcw6q9rvpcg24bgf81d4n4ag";
+      type = "gem";
+    };
+    version = "1.69.0";
+  };
+  aws-sdk-emr = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wybb0aadsk8x3whwlid58g40613c9rrl48g43ikgpqz9f3b44ac";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-eventbridge = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cj1pwvhwal1qvmaiwi42lhsak7mb61bmm7j1g4gmscxg36l3bj2";
+      type = "gem";
+    };
+    version = "1.24.0";
+  };
+  aws-sdk-firehose = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z0dvga01xg6pahy5p4bfc8s73n3ycjr0h3cxvhy8kcymynswn1k";
+      type = "gem";
+    };
+    version = "1.51.0";
+  };
+  aws-sdk-glue = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1608aiav3iz6jcxdlprcax5984gq5m20dyg8w8caqjkgrrgkyd3f";
+      type = "gem";
+    };
+    version = "1.88.0";
+  };
+  aws-sdk-guardduty = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12wvpgzqw7lswxchsbwmn0csp5lj521a1fx6f0dv8s26swnmhdsk";
+      type = "gem";
+    };
+    version = "1.67.0";
+  };
+  aws-sdk-iam = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0crb3m1apj6kszp9aqmc2lqw99i1xkxbp5fl1s5748718kld4s8v";
+      type = "gem";
+    };
+    version = "1.77.0";
+  };
+  aws-sdk-kafka = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pxzjmdb5bqrqnivmw7li2qliam0dm6v56idv50slds96q6jck61";
+      type = "gem";
+    };
+    version = "1.54.0";
+  };
+  aws-sdk-kinesis = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k14773dyzwcjcb9a1pqbh0vqzjlb19cwf0ydw7pch5g8x5fs5g2";
+      type = "gem";
+    };
+    version = "1.45.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v87zi28dfmrv7bv91yfldccnpd63n295siirbz7wqv1rajn8n02";
+      type = "gem";
+    };
+    version = "1.63.0";
+  };
+  aws-sdk-lambda = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a0l6yxmvc1hxlmhg4lcsh6yljmsav8p1rprlnnjvhgszhp3gcv3";
+      type = "gem";
+    };
+    version = "1.95.0";
+  };
+  aws-sdk-mq = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pr2v6lf2rcnfsdbs5s5ig5mlvnfm1xwy2y8jcyp9w4s933ps9fg";
+      type = "gem";
+    };
+    version = "1.40.0";
+  };
+  aws-sdk-networkfirewall = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ai74sc8q0vvnkicl4dyq1xikclpmdd0rbzlqpww64wd5q2i6myp";
+      type = "gem";
+    };
+    version = "1.26.0";
+  };
+  aws-sdk-networkmanager = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ldlvhcvbs5r2dzfa2wglacywnqgijbr9iqalq0jhbv4aknmgfjy";
+      type = "gem";
+    };
+    version = "1.30.0";
+  };
+  aws-sdk-organizations = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b5zy7hc67k5pmmnv90p5skd12a61gk1swqlq4a5vn3kjlmg57al";
+      type = "gem";
+    };
+    version = "1.59.0";
+  };
+  aws-sdk-ram = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rm6sr5kvdy9q1xjg00c80648l8j3cpc6l5fakfxiqhp256bf2ac";
+      type = "gem";
+    };
+    version = "1.26.0";
+  };
+  aws-sdk-rds = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15jril7gd5ax0pabbj6gxfnh30x2c9ffw4dv31vb8k7rpdrzkzj8";
+      type = "gem";
+    };
+    version = "1.176.0";
+  };
+  aws-sdk-redshift = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1smv2621gzrhk0wbnmyb2kdqcjp8z8wldy1vfypdcpgvlj9m2wvk";
+      type = "gem";
+    };
+    version = "1.91.0";
+  };
+  aws-sdk-route53 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xcg7rl6lllm4syxgw496976dnsmfwvxw4131klaycfx9dixz1kc";
+      type = "gem";
+    };
+    version = "1.71.0";
+  };
+  aws-sdk-route53domains = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12in1rcjnni4xza6mdmp3avrb4hgkfk8dzsiqp97yvpywd1dbara";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-route53resolver = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vcwh47pgr745wyl0zwjjhr29yynjgl9w8d0qpnqn1i8ywbnxn9b";
+      type = "gem";
+    };
+    version = "1.40.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mapdzm97rv22pca1hvvshwsafa12gd2yv2fcy63dfjn5vjjq893";
+      type = "gem";
+    };
+    version = "1.120.1";
+  };
+  aws-sdk-s3control = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kf3i430b6lwzf7dmm506jvm7xy0rj4zhc9kywcg4rc1fp0bmzh3";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-secretsmanager = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xkx39yi2mlwyh3lyg6h39nzj5n059nc6idaqlnsjlrkkrh3i13i";
+      type = "gem";
+    };
+    version = "1.46.0";
+  };
+  aws-sdk-securityhub = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vp8hkmwl0p7xasbzhgnsk3ikj6l34vgyd3g9yg5nfsr4098almv";
+      type = "gem";
+    };
+    version = "1.79.0";
+  };
+  aws-sdk-servicecatalog = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zjxbpr5jj3znrsynazcjznaqcqbfpy646nzvl3c83gcwrsqj8s7";
+      type = "gem";
+    };
+    version = "1.60.0";
+  };
+  aws-sdk-ses = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xii4i4dia1w6hizfxvni8jawpikv9g26ixiw349x33l09f12cbw";
+      type = "gem";
+    };
+    version = "1.41.0";
+  };
+  aws-sdk-shield = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xd1baasgazrfc1b2pr196jycj14rb6kdkxjkqa0rnd0ml9xwiwj";
+      type = "gem";
+    };
+    version = "1.51.0";
+  };
+  aws-sdk-signer = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ysspl6n2rw5hr3bz38k46k04nkbri0c54fc109kgw57fxfwq3fk";
+      type = "gem";
+    };
+    version = "1.32.0";
+  };
+  aws-sdk-simpledb = {
+    dependencies = ["aws-sdk-core" "aws-sigv2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15vrakmbxz7pg9vf2gi8ssb6jg4k5jwrsik6x0hkjf3n4g3vfgqs";
+      type = "gem";
+    };
+    version = "1.29.0";
+  };
+  aws-sdk-sms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z40zf3v3isqsc6ipmv8v6f28a0bsrba2rivgya98hk1wyivxn4w";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-sns = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10kn9nsh7jn0ikmxybhxh3wgczlpp3pcanqvmc3cjh1sahy8sb1n";
+      type = "gem";
+    };
+    version = "1.60.0";
+  };
+  aws-sdk-sqs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rp62fmz4lc32qj2phqmrdic4j4la34xp2a6vlg4v6lqz2y2fjhs";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-ssm = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16p7l4mgzs6al3rpb35318gc06vp757vjb99brbkx8ppyg78cdir";
+      type = "gem";
+    };
+    version = "1.150.0";
+  };
+  aws-sdk-states = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00ja9hkx4rdgd0242l8vmbfmb1qgvys3xs2ryap3ms3qaa76sach";
+      type = "gem";
+    };
+    version = "1.39.0";
+  };
+  aws-sdk-synthetics = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10zh51r45pzbnx8fxjz8pppwlgbzpbvs4kaji1mi53cwpfprlhsz";
+      type = "gem";
+    };
+    version = "1.19.0";
+  };
+  aws-sdk-transfer = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "017zpcqssv138y7nqzwqpvcnsbq2jws6g22996n64kcr2azj28gn";
+      type = "gem";
+    };
+    version = "1.34.0";
+  };
+  aws-sdk-waf = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "036655pbqkvzwd05svimvn2v96srz370zmhczg1jzsca0249hxfr";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sigv2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bnsw26vd0z3gayrqxhjg94ccjdygpk00bmhdjhzagmgngmdbhrk";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11hkna2av47bl0yprgp8k4ya70rc3m2ib5w10fn0piplgkkmhz7m";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  azure_graph_rbac = {
+    dependencies = ["ms_rest_azure"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mmx8jp85xa13j3asa9xnfi6wa8a9wwlp0hz0nj70fi3ydmcpdag";
+      type = "gem";
+    };
+    version = "0.17.2";
+  };
+  azure_mgmt_key_vault = {
+    dependencies = ["ms_rest_azure"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f4fai5l3453yirrwajds0jgah60gvawffx53a0jyv3b93ag88mz";
+      type = "gem";
+    };
+    version = "0.17.7";
+  };
+  azure_mgmt_resources = {
+    dependencies = ["ms_rest_azure"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p4hsa7xha8ifml58hmkxdkp7vyhm7sw624xam1mrq0hvzawvkm3";
+      type = "gem";
+    };
+    version = "0.18.2";
+  };
+  azure_mgmt_security = {
+    dependencies = ["ms_rest_azure"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11h2dyz4awzidvfj41h7k2q7mcqqcgzvm95fxpfxz609pbvck0g2";
+      type = "gem";
+    };
+    version = "0.19.0";
+  };
+  azure_mgmt_storage = {
+    dependencies = ["ms_rest_azure"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ik06knz7fxn9q2x874d7q1v2fb00askwh36wbl75fnsi2m5m6rq";
+      type = "gem";
+    };
+    version = "0.23.0";
+  };
+  bson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19vgs9rzzyvd7jfrzynjnc6518q0ffpfciyicfywbp77zl8nc9hk";
+      type = "gem";
+    };
+    version = "4.15.0";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  chef-config = {
+    dependencies = ["addressable" "chef-utils" "fuzzyurl" "mixlib-config" "mixlib-shellout" "tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13581xgpdvdyd0zvdankharj9aahs99vmihcknm66v03a37q7y6x";
+      type = "gem";
+    };
+    version = "18.2.7";
+  };
+  chef-telemetry = {
+    dependencies = ["chef-config" "concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l9icc3nfdj28mip85vf31v5l60qsfqq3a5dscv7jryh1k94y05x";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  chef-utils = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q5by0q1i443lds626cyq78jhzkwb6b1f8vcbv82q790q06vg1w9";
+      type = "gem";
+    };
+    version = "18.2.7";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  cookstyle = {
+    dependencies = ["rubocop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0np0y94x1rgn13bwkd4hc5ysimn9ax57ihrpz5rl4fwrn3lybm1s";
+      type = "gem";
+    };
+    version = "7.32.2";
+  };
+  declarative = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yczgnqrbls7shrg63y88g7wand2yp9h6sf56c9bdcksn5nds8c0";
+      type = "gem";
+    };
+    version = "0.0.20";
+  };
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwvjahnp7cpmracd8x732rjgnilqv2sx7d1gfrysslc3h039fa9";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  docker-api = {
+    dependencies = ["excon" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g7dbniz15b3l2sy6xh0j0998dr5jypf3xg3bsygp0108vv7waxy";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  erubi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08s75vs9cxlc4r1q2bjg4br8g9wc5lc5x5vl0vv4zq5ivxsdpgi7";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j826kfvzn7nc5pv950n270r0sx1702k988ad11cdlav3dcxxw09";
+      type = "gem";
+    };
+    version = "0.99.0";
+  };
+  faraday = {
+    dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-httpclient" "faraday-multipart" "faraday-net_http" "faraday-net_http_persistent" "faraday-patron" "faraday-rack" "faraday-retry" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c760q0ks4vj4wmaa7nh1dgvgqiwaw0mjr7v8cymy7i3ffgjxx90";
+      type = "gem";
+    };
+    version = "1.10.3";
+  };
+  faraday-cookie_jar = {
+    dependencies = ["faraday" "http-cookie"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00hligx26w9wdnpgsrf0qdnqld4rdccy8ym6027h5m735mpvxjzk";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+  faraday-em_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-em_synchrony = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  faraday-follow_redirects = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y87p3yk15bjbk0z9mf01r50lzxvp7agr56lbm9gxiz26mb9fbfr";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  faraday-httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-multipart = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09871c4hd7s5ws1wl4gs7js1k2wlby6v947m2bbzg43pnld044lh";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-net_http_persistent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  faraday-patron = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h184g4vqql5jv9s9im6igy00jp6mrah2h14py6mpf9bkabfqq7g";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-retry = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153i967yrwnswqgvnnajgwp981k9p50ys1h80yz3q94rygs59ldd";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jik2kgfinwnfi6fpp512vlvs0mlggign3gkbpkg5fw1jr9his0r";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  fuzzyurl = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03qchs33vfwbsv5awxg3acfmlcrf5xbhnbrc83fdpamwya0glbjl";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  google-api-client = {
+    dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "rexml" "signet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q1lsyyyfvff7727sr01j8qx6b30qpx6h0bna5s0bfz853fhl33b";
+      type = "gem";
+    };
+    version = "0.52.0";
+  };
+  googleauth = {
+    dependencies = ["faraday" "jwt" "memoist" "multi_json" "os" "signet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cm60nbmwzf83fzy06f3iyn5a6sw91siw8x9bdvpwwmjsmivana6";
+      type = "gem";
+    };
+    version = "0.14.0";
+  };
+  gssapi = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qdfhj12aq8v0y961v4xv96a1y2z80h3xhvzrs9vsfgf884g6765";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  gyoku = {
+    dependencies = ["builder" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kd2q59xpm39hpvmmvyi6g3f1fr05xjbnxwkrdqz4xy7hirqi79q";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  hashie = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02bsx12ihl78x0vdm37byp78jjw2ff6035y7rrmbd90qxjwxr43q";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f8cr014j7mdqpdb9q17fp5vb5b8n1pswqaif91s3ylg5x3pygfn";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vdcchz7jli1p0gnc669a7bj3q1fv09y9ppf0y3k0vb1jwdwrqwi";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  inifile = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c5zmk7ia63yw5l2k14qhfdydxwi1sah1ppjdiicr4zcalvfn0xi";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  inspec = {
+    dependencies = ["cookstyle" "faraday_middleware" "inspec-core" "mongo" "progress_bar" "rake" "train" "train-aws" "train-habitat" "train-winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y2p1dm8b648gw6sabgq45mj0wvc683xq4jvh286vmfhkld8ibgh";
+      type = "gem";
+    };
+    version = "5.21.29";
+  };
+  inspec-bin = {
+    dependencies = ["inspec"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02lq4qnmxdc3vn5wwrb5m526js14jvj5c3wczln2skmqg5yr6pbh";
+      type = "gem";
+    };
+    version = "5.21.29";
+  };
+  inspec-core = {
+    dependencies = ["addressable" "chef-telemetry" "faraday" "faraday-follow_redirects" "hashie" "license-acceptance" "method_source" "mixlib-log" "multipart-post" "parallel" "parslet" "pry" "rspec" "rspec-its" "rubyzip" "semverse" "sslshake" "thor" "tomlrb" "train-core" "tty-prompt" "tty-table"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1irzd4nms4fpv5llkqsx8mlgyhgsibkzk293w31yixarg3jbnvd7";
+      type = "gem";
+    };
+    version = "5.21.29";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  jwt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09yj3z5snhaawh2z1w45yyihzmh57m6m7dp8ra8gxavhj5kbiq5p";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  license-acceptance = {
+    dependencies = ["pastel" "tomlrb" "tty-box" "tty-prompt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12h5a3j57h50xkfpdz9gr42k0v8g1qxn2pnj5hbbzbmdhydjbjzf";
+      type = "gem";
+    };
+    version = "2.1.13";
+  };
+  little-plugger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zflchpx4g8c110gjdcs540bk5a336nq6nmx379rdg56xw0pjd02";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  memoist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i9wpzix3sjhf6d9zw60dm4371iq8kyz7ckh2qapan2vyaim6b55";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ic7i5z88zcaqnpzprf7saimq2f6sad57g5mkkqsrqrcd6h3mx06";
+      type = "gem";
+    };
+    version = "5.18.0";
+  };
+  mixlib-config = {
+    dependencies = ["tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j0122lv2qgccl61njqi0pj6sp6nb85y07gcmw16bwg4k0c8nx6p";
+      type = "gem";
+    };
+    version = "3.0.27";
+  };
+  mixlib-log = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n5dm5iz90ijvjn59jfm8gb8hgsvbj0f1kpzbl38b02z0z4a4v7x";
+      type = "gem";
+    };
+    version = "3.0.9";
+  };
+  mixlib-shellout = {
+    dependencies = ["chef-utils"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zkwg76y96nkh1mv0k92ybq46cr06v1wmic16129ls3yqzwx3xj6";
+      type = "gem";
+    };
+    version = "3.2.7";
+  };
+  mongo = {
+    dependencies = ["bson"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mkksik7mffwm29dz0pxjfz87rmm578nqzg8bc4kp076xqjwn2xp";
+      type = "gem";
+    };
+    version = "2.13.2";
+  };
+  ms_rest = {
+    dependencies = ["concurrent-ruby" "faraday" "timeliness"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jiha1bda5knpjqjymwik6i41n69gb0phcrgvmgc5icl4mcisai7";
+      type = "gem";
+    };
+    version = "0.7.6";
+  };
+  ms_rest_azure = {
+    dependencies = ["concurrent-ruby" "faraday" "faraday-cookie_jar" "ms_rest"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06i37b84r2q206kfm5vsi9s1qiiy09091vhvc5pzb7320h0hc1ih";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lgyysrpl50wgcb9ahg29i4p01z0irb3p9lirygma0kkfr5dgk9x";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1si2nq9l6jy5n2zw1q59a5gaji7v9vhy8qx08h4fg368906ysbdk";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yx0pb5fmziz92bw8qzbh8vf20lr56nd3s6q8h0gsgr307lki687";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  options = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s650nwnabx66w584m1cyw82icyym6hv5kzfsbp38cinkr5klh9j";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  os = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gwd20smyhxbm687vdikfh1gpi96h8qb1x28s2pdcysf6dm6v0ap";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  parallel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jcc512l38c0c163ni3jgskvq1vc3mr8ly5pvjijzwvfml9lf597";
+      type = "gem";
+    };
+    version = "1.23.0";
+  };
+  parser = {
+    dependencies = ["ast"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s5afi89p76k8vpwiqvh343pm5l23ijqlpszhz65afym3zpkxhzx";
+      type = "gem";
+    };
+    version = "3.2.2.0";
+  };
+  parslet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12nrzfwjphjlakb9pmpj70hgjwgzvnr8i1zfzddifgyd44vspl88";
+      type = "gem";
+    };
+    version = "1.8.2";
+  };
+  pastel = {
+    dependencies = ["tty-color"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xash2gj08dfjvq4hy6l1z22s5v30fhizwgs10d6nviggpxsj7a8";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  progress_bar = {
+    dependencies = ["highline" "options"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04kv6h5mdjd9zf8mcf2dplxls06n2jf72281s74k6b2ar731hc47";
+      type = "gem";
+    };
+    version = "1.3.3";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k9kqkd9nps1w1r1rb7wjr31hqzkka2bhi8b518x78dcxppm9zn4";
+      type = "gem";
+    };
+    version = "0.14.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hz0bx2qs2pwb0bwazzsah03ilpf3aai8b7lk7s35jsfzwbkjq35";
+      type = "gem";
+    };
+    version = "5.0.1";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+      type = "gem";
+    };
+    version = "13.0.6";
+  };
+  regexp_parser = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17xizkw5ryw8hhq64iqxmzdrrdxpc5lhkqc1fgm1aj0zsk1r2950";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  representable = {
+    dependencies = ["declarative" "trailblazer-option" "uber"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kms3r6w6pnryysnaqqa9fsn0v73zx1ilds9d1c565n3xdzbyafc";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  retriable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q48hqws2dy1vws9schc0kmina40gy7sn5qsndpsfqdslh65snha";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19dyb6rcvgi9j2mksd29wfdhfdyzqk7yjhy1ai77559hbhpg61w9";
+      type = "gem";
+    };
+    version = "3.11.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "118hkfw9b11hvvalr7qlylwal5h8dihagm9xg7k4gskg7587hca6";
+      type = "gem";
+    };
+    version = "3.11.0";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l1bzk6a68i1b2qix83vs40r0pbjawv67hixiq2qxsja19bbq3bc";
+      type = "gem";
+    };
+    version = "3.11.1";
+  };
+  rspec-its = {
+    dependencies = ["rspec-core" "rspec-expectations"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zafd70gxly5i0s00nky14sj2n92dnj3xpj83ysl3c2wx0119ad";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vsqp9dij2rj9aapcn3sz7qzw0d8ln7x9p46h9rzd3jzb7his9kk";
+      type = "gem";
+    };
+    version = "3.11.2";
+  };
+  rspec-support = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c01iicvrjk6vv744jgh0y4kk9d0kg2rd2ihdyzvg5p06xm2fpzq";
+      type = "gem";
+    };
+    version = "3.11.1";
+  };
+  rubocop = {
+    dependencies = ["parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l3q96il8zx5zl041lxvmfrndxxpk08fksza1gqshhjjzms7c2rk";
+      type = "gem";
+    };
+    version = "1.25.1";
+  };
+  rubocop-ast = {
+    dependencies = ["parser"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n2gsafg6p7nr1z8i1hkvp2qqkkbg842ba183dnl0h08xd9ms6q5";
+      type = "gem";
+    };
+    version = "1.28.0";
+  };
+  ruby-progressbar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cwvyb7j47m7wihpfaq7rc47zwwx9k4v7iqd9s1xch5nm53rrz40";
+      type = "gem";
+    };
+    version = "1.13.0";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b8hczk8hysv53ncsqzx4q6kma5gy5lqc7s5yx8h64x3vdb18cjv";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  semverse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrh6p0756n3gjnk6am1cc4kmw6wzzd02hcajj27rlsqg3p6lwn9";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  signet = {
+    dependencies = ["addressable" "faraday" "jwt" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0100rclkhagf032rg3r0gf3f4znrvvvqrimy6hpa73f21n9k2a0x";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+  sslshake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r3ifksx8a05yqhv7nc4cwan8bwmxgq5kyv7q7hy2h9lv5zcjs8h";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  strings = {
+    dependencies = ["strings-ansi" "unicode-display_width" "unicode_utils"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yynb0qhhhplmpzavfrrlwdnd1rh7rkwzcs4xf0mpy2wr6rr6clk";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  strings-ansi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "120wa6yjc63b84lprglc52f40hx3fx920n4dmv14rad41rv2s9lh";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  timeliness = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gvp9b7yn4pykn794cibylc9ys1lw7fzv7djx1433icxw4y26my3";
+      type = "gem";
+    };
+    version = "0.3.10";
+  };
+  tomlrb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00x5y9h4fbvrv4xrjk4cqlkm4vq8gv73ax4alj3ac2x77zsnnrk8";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  trailblazer-option = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18s48fndi2kfvrfzmq6rxvjfwad347548yby0341ixz1lhpg3r10";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  train = {
+    dependencies = ["activesupport" "azure_graph_rbac" "azure_mgmt_key_vault" "azure_mgmt_resources" "azure_mgmt_security" "azure_mgmt_storage" "docker-api" "google-api-client" "googleauth" "inifile" "train-core" "train-winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04ixvxhpv33h8wcirplzgp5pix2xipx5hfxxlrjp579hrcs38sjy";
+      type = "gem";
+    };
+    version = "3.10.7";
+  };
+  train-aws = {
+    dependencies = ["aws-sdk-alexaforbusiness" "aws-sdk-amplify" "aws-sdk-apigateway" "aws-sdk-apigatewayv2" "aws-sdk-applicationautoscaling" "aws-sdk-athena" "aws-sdk-autoscaling" "aws-sdk-batch" "aws-sdk-budgets" "aws-sdk-cloudformation" "aws-sdk-cloudfront" "aws-sdk-cloudhsm" "aws-sdk-cloudhsmv2" "aws-sdk-cloudtrail" "aws-sdk-cloudwatch" "aws-sdk-cloudwatchevents" "aws-sdk-cloudwatchlogs" "aws-sdk-codecommit" "aws-sdk-codedeploy" "aws-sdk-codepipeline" "aws-sdk-cognitoidentity" "aws-sdk-cognitoidentityprovider" "aws-sdk-configservice" "aws-sdk-core" "aws-sdk-costandusagereportservice" "aws-sdk-databasemigrationservice" "aws-sdk-dynamodb" "aws-sdk-ec2" "aws-sdk-ecr" "aws-sdk-ecrpublic" "aws-sdk-ecs" "aws-sdk-efs" "aws-sdk-eks" "aws-sdk-elasticache" "aws-sdk-elasticbeanstalk" "aws-sdk-elasticloadbalancing" "aws-sdk-elasticloadbalancingv2" "aws-sdk-elasticsearchservice" "aws-sdk-emr" "aws-sdk-eventbridge" "aws-sdk-firehose" "aws-sdk-glue" "aws-sdk-guardduty" "aws-sdk-iam" "aws-sdk-kafka" "aws-sdk-kinesis" "aws-sdk-kms" "aws-sdk-lambda" "aws-sdk-mq" "aws-sdk-networkfirewall" "aws-sdk-networkmanager" "aws-sdk-organizations" "aws-sdk-ram" "aws-sdk-rds" "aws-sdk-redshift" "aws-sdk-route53" "aws-sdk-route53domains" "aws-sdk-route53resolver" "aws-sdk-s3" "aws-sdk-s3control" "aws-sdk-secretsmanager" "aws-sdk-securityhub" "aws-sdk-servicecatalog" "aws-sdk-ses" "aws-sdk-shield" "aws-sdk-signer" "aws-sdk-simpledb" "aws-sdk-sms" "aws-sdk-sns" "aws-sdk-sqs" "aws-sdk-ssm" "aws-sdk-states" "aws-sdk-synthetics" "aws-sdk-transfer" "aws-sdk-waf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vl7yfzcd6mq5lmjgagxbdhjhyv5rj2piap3w28zdwqkbyyhir8b";
+      type = "gem";
+    };
+    version = "0.2.24";
+  };
+  train-core = {
+    dependencies = ["addressable" "ffi" "json" "mixlib-shellout" "net-scp" "net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f0yxh5mpr7rdn3660jf5iwc3rhv4l82dd9mhcrm6v85901rvj9c";
+      type = "gem";
+    };
+    version = "3.10.7";
+  };
+  train-habitat = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qdi2q5djzfl6x3fv2vrvybjdvrnx53nfh4vzrcl2h7nrf801n6v";
+      type = "gem";
+    };
+    version = "0.2.22";
+  };
+  train-winrm = {
+    dependencies = ["winrm" "winrm-elevated" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07haiwh7jcg00mmiarj5g7k9kclq40yqd4j4r3c01qn2cq1sw2xb";
+      type = "gem";
+    };
+    version = "0.2.13";
+  };
+  tty-box = {
+    dependencies = ["pastel" "strings" "tty-cursor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12yzhl3s165fl8pkfln6mi6mfy3vg7p63r3dvcgqfhyzq6h57x0p";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  tty-color = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0aik4kmhwwrmkysha7qibi2nyzb4c8kp42bd5vxnf8sf7b53g73g";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  tty-prompt = {
+    dependencies = ["pastel" "tty-reader"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1j4y8ik82azjxshgd4i1v4wwhsv3g9cngpygxqkkz69qaa8cxnzw";
+      type = "gem";
+    };
+    version = "0.23.1";
+  };
+  tty-reader = {
+    dependencies = ["tty-cursor" "tty-screen" "wisper"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cf2k7w7d84hshg4kzrjvk9pkyc2g1m3nx2n1rpmdcf0hp4p4af6";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  tty-screen = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18jr6s1cg8yb26wzkqa6874q0z93rq0y5aw092kdqazk71y6a235";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  tty-table = {
+    dependencies = ["pastel" "strings" "tty-screen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fcrbfb0hjd9vkkazkksri93dv9wgs2hp6p1xwb1lp43a13pmhpx";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  uber = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p1mm7mngg40x05z52md3mbamkng0zpajbzqjjwmsyw0zw3v9vjv";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch";
+      type = "gem";
+    };
+    version = "0.0.8.2";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gi82k102q7bkmfi7ggn9ciypn897ylln1jk9q67kjhr39fj043a";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+  unicode_utils = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h1a5yvrxzlf0lxxa1ya31jcizslf774arnsd89vgdhk4g7x08mr";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  winrm = {
+    dependencies = ["builder" "erubi" "gssapi" "gyoku" "httpclient" "logging" "nori" "rubyntlm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nxf6a47d1xf1nvi7rbfbzjyyjhz0iakrnrsr2hj6y24a381sd8i";
+      type = "gem";
+    };
+    version = "2.3.6";
+  };
+  winrm-elevated = {
+    dependencies = ["erubi" "winrm" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lmlaii8qapn84wxdg5d82gbailracgk67d0qsnbdnffcg8kswzd";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  winrm-fs = {
+    dependencies = ["erubi" "logging" "rubyzip" "winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gb91k6s1yjqw387x4w1nkpnxblq3pjdqckayl0qvz5n3ygdsb0d";
+      type = "gem";
+    };
+    version = "1.3.5";
+  };
+  wisper = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rpsi0ziy78cj82sbyyywby4d0aw0a5q84v65qd28vqn79fbq5yf";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/instaloader/default.nix b/nixpkgs/pkgs/tools/misc/instaloader/default.nix
new file mode 100644
index 000000000000..b648a55cb3df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/instaloader/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, setuptools
+, sphinx
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "instaloader";
+  version = "4.10.3";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "instaloader";
+    repo = "instaloader";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-+K15MlyOONC5E8ZjtzbYnGGzQEMDGEGBFDbLZp7FeWQ=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    requests
+    sphinx
+  ];
+
+  pythonImportsCheck = [ "instaloader" ];
+
+  meta = with lib; {
+    homepage = "https://instaloader.github.io/";
+    description = "Download pictures (or videos) along with their captions and other metadata from Instagram";
+    maintainers = with maintainers; [ creator54 ];
+    license = licenses.mit;
+    mainProgram = "instaloader";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/interactsh/default.nix b/nixpkgs/pkgs/tools/misc/interactsh/default.nix
new file mode 100644
index 000000000000..3331e5aebc6c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/interactsh/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "interactsh";
+  version = "1.1.8";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-wGxviByvtn72OvFIdjhzUuHwJTWvXhGsL/jSIICW5ig=";
+  };
+
+  vendorHash = "sha256-HguNO3Vb3+bTLGi1bm097IXVsRU3bnAFsX/vneOWxss=";
+
+  modRoot = ".";
+  subPackages = [
+    "cmd/interactsh-client"
+    "cmd/interactsh-server"
+  ];
+
+  # Test files are not part of the release tarball
+  doCheck = false;
+
+  meta = with lib; {
+    description = "An Out of bounds interaction gathering server and client library";
+    longDescription = ''
+      Interactsh is an Open-Source Solution for Out of band Data Extraction,
+      A tool designed to detect bugs that cause external interactions,
+      For example - Blind SQLi, Blind CMDi, SSRF, etc.
+    '';
+    homepage = "https://github.com/projectdiscovery/interactsh";
+    changelog = "https://github.com/projectdiscovery/interactsh/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hanemile ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/intermodal/default.nix b/nixpkgs/pkgs/tools/misc/intermodal/default.nix
new file mode 100644
index 000000000000..e4a296333569
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/intermodal/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "intermodal";
+  version = "0.1.13";
+
+  src = fetchFromGitHub {
+    owner = "casey";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-hKMO7ZicXSYESXWKmDC2ILD996KoYDXS5HJExyXMdX4=";
+  };
+
+  cargoHash = "sha256-7vtUMG6mxAHKnbouyTsaUf1myJssxYoqAIOjc6m86Fo=";
+
+  # include_hidden test tries to use `chflags` on darwin
+  checkFlagsArray = lib.optionals stdenv.isDarwin [ "--skip=subcommand::torrent::create::tests::include_hidden" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd imdl \
+      --bash <($out/bin/imdl completions bash) \
+      --fish <($out/bin/imdl completions fish) \
+      --zsh  <($out/bin/imdl completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "User-friendly and featureful command-line BitTorrent metainfo utility";
+    homepage = "https://github.com/casey/intermodal";
+    changelog = "https://github.com/casey/intermodal/releases/tag/v${version}";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ Br1ght0ne xrelkd ];
+    mainProgram = "imdl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/invoice/default.nix b/nixpkgs/pkgs/tools/misc/invoice/default.nix
new file mode 100644
index 000000000000..ea7ce5c2205a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/invoice/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "invoice";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "maaslalani";
+    repo = "invoice";
+    rev = "v${version}";
+    hash = "sha256-WtQ4nF31uIoplY18GZNs41ZOCxmbIu71YpEGk8aTGww=";
+  };
+
+  vendorHash = "sha256-8VhBflnpsJ5h8S6meDFZKCcS2nz5u4kPE9W710gJG4U=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Command line invoice generator";
+    homepage = "https://github.com/maaslalani/invoice";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "invoice";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/iotools/default.nix b/nixpkgs/pkgs/tools/misc/iotools/default.nix
new file mode 100644
index 000000000000..17330d9c19cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/iotools/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "iotools";
+  version = "unstable-2017-12-11";
+
+  src = fetchFromGitHub {
+    owner = "adurbin";
+    repo = pname;
+    rev = "18949fdc4dedb1da3f51ee83a582b112fb9f2c71";
+    sha256 = "0vymnah44d5bzsjhfmxkcrlrikkp0db22k7a1s8bknz7glk9fldn";
+  };
+
+  makeFlags = [ "DEBUG=0" "STATIC=0" ];
+
+  installPhase = ''
+    install -Dm755 iotools -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Set of simple command line tools which allow access to
+      hardware device registers";
+    longDescription = ''
+      Provides a set of simple command line tools which allow access to
+      hardware device registers. Supported register interfaces include PCI,
+      IO, memory mapped IO, SMBus, CPUID, and MSR. Also included are some
+      utilities which allow for simple arithmetic, logical, and other
+      operations.
+    '';
+    homepage = "https://github.com/adurbin/iotools";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ felixsinger ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    mainProgram = "iotools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ipad_charge/default.nix b/nixpkgs/pkgs/tools/misc/ipad_charge/default.nix
new file mode 100644
index 000000000000..fdbab82aabcd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ipad_charge/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, libusb1 }:
+
+stdenv.mkDerivation rec {
+  pname = "ipad_charge";
+  version = "2015-02-03";
+
+  src = fetchFromGitHub {
+    sha256 = "0f40hqx1dbqpwrhyf42h5982jwqv8j5zp5hwwakz6600hyqvnnz7";
+    rev = "bb24e1c3a79016cfdffb9d28189485766d655ec6";
+    repo = "ipad_charge";
+    owner = "mkorenkov";
+  };
+
+  buildInputs = [ libusb1 ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace " -o root -g root" "" \
+      --replace "/usr" "$out" \
+      --replace "/etc/udev" "$out/lib/udev"
+    substituteInPlace *.rules \
+      --replace "/usr" "$out"
+  '';
+
+  enableParallelBuilding = true;
+
+  preInstall = ''
+    mkdir -p $out/{bin,lib/udev/rules.d}
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Apple device USB charging utility for Linux";
+    longDescription = ''
+      USB charging control utility used to enable/disable charging of an Apple
+      device connected to USB port. For a list of supported devices, see
+      https://github.com/mkorenkov/ipad_charge#supported-devices.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    mainProgram = "ipad_charge";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ipbt/default.nix b/nixpkgs/pkgs/tools/misc/ipbt/default.nix
new file mode 100644
index 000000000000..3b9b6d1496ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ipbt/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, perl, ncurses }:
+
+stdenv.mkDerivation rec {
+  version = "20210215.5a9cb02";
+  pname = "ipbt";
+
+  src = fetchurl {
+    url = "https://www.chiark.greenend.org.uk/~sgtatham/ipbt/ipbt-${version}.tar.gz";
+    sha256 = "0w6blpv22jjivzr58y440zv6djvi5iccdmj4y2md52fbpjngmsha";
+  };
+
+  nativeBuildInputs = [ perl ];
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    description = "A high-tech ttyrec player for Unix";
+    homepage = "https://www.chiark.greenend.org.uk/~sgtatham/ipbt/";
+    license = licenses.mit;
+    maintainers = [ maintainers.tckmn ];
+    platforms = platforms.unix;
+    mainProgram = "ipbt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ipxe/default.nix b/nixpkgs/pkgs/tools/misc/ipxe/default.nix
new file mode 100644
index 000000000000..2c1b16d29925
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ipxe/default.nix
@@ -0,0 +1,112 @@
+{ stdenv, lib, fetchFromGitHub, unstableGitUpdater, buildPackages
+, gnu-efi, mtools, openssl, perl, xorriso, xz
+, syslinux ? null
+, embedScript ? null
+, additionalTargets ? {}
+, additionalOptions ? []
+}:
+
+let
+  targets = additionalTargets // lib.optionalAttrs stdenv.isx86_64 {
+    "bin-x86_64-efi/ipxe.efi" = null;
+    "bin-x86_64-efi/ipxe.efirom" = null;
+    "bin-x86_64-efi/ipxe.usb" = "ipxe-efi.usb";
+    "bin-x86_64-efi/snp.efi" = null;
+  } // lib.optionalAttrs stdenv.hostPlatform.isx86 {
+    "bin/ipxe.dsk" = null;
+    "bin/ipxe.usb" = null;
+    "bin/ipxe.iso" = null;
+    "bin/ipxe.lkrn" = null;
+    "bin/undionly.kpxe" = null;
+  } // lib.optionalAttrs stdenv.isAarch32 {
+    "bin-arm32-efi/ipxe.efi" = null;
+    "bin-arm32-efi/ipxe.efirom" = null;
+    "bin-arm32-efi/ipxe.usb" = "ipxe-efi.usb";
+    "bin-arm32-efi/snp.efi" = null;
+  } // lib.optionalAttrs stdenv.isAarch64 {
+    "bin-arm64-efi/ipxe.efi" = null;
+    "bin-arm64-efi/ipxe.efirom" = null;
+    "bin-arm64-efi/ipxe.usb" = "ipxe-efi.usb";
+    "bin-arm64-efi/snp.efi" = null;
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "ipxe";
+  version = "unstable-2024-01-19";
+
+  nativeBuildInputs = [ gnu-efi mtools openssl perl xorriso xz ] ++ lib.optional stdenv.hostPlatform.isx86 syslinux;
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  strictDeps = true;
+
+  src = fetchFromGitHub {
+    owner = "ipxe";
+    repo = "ipxe";
+    rev = "de8a0821c7bc737e724fa3dfb6d89dc36f591d7a";
+    hash = "sha256-bVFr1fTulww6swWPKupWRGfQOAiXp2oP1/VC5GpzLnY=";
+  };
+
+  postPatch = lib.optionalString stdenv.hostPlatform.isAarch64 ''
+    substituteInPlace src/util/genfsimg --replace "	syslinux " "	true "
+  ''; # calling syslinux on a FAT image isn't going to work
+
+  # not possible due to assembler code
+  hardeningDisable = [ "pic" "stackprotector" ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  makeFlags =
+    [ "ECHO_E_BIN_ECHO=echo" "ECHO_E_BIN_ECHO_E=echo" # No /bin/echo here.
+      "CROSS=${stdenv.cc.targetPrefix}"
+    ] ++ lib.optional (embedScript != null) "EMBED=${embedScript}";
+
+
+  enabledOptions = [
+    "PING_CMD"
+    "IMAGE_TRUST_CMD"
+    "DOWNLOAD_PROTO_HTTP"
+    "DOWNLOAD_PROTO_HTTPS"
+  ] ++ additionalOptions;
+
+  configurePhase = ''
+    runHook preConfigure
+    for opt in ${lib.escapeShellArgs enabledOptions}; do echo "#define $opt" >> src/config/general.h; done
+    substituteInPlace src/Makefile.housekeeping --replace '/bin/echo' echo
+  '' + lib.optionalString stdenv.hostPlatform.isx86 ''
+    substituteInPlace src/util/genfsimg --replace /usr/lib/syslinux ${syslinux}/share/syslinux
+  '' + ''
+    runHook postConfigure
+  '';
+
+  preBuild = "cd src";
+
+  buildFlags = lib.attrNames targets;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    ${lib.concatStringsSep "\n" (lib.mapAttrsToList (from: to:
+      if to == null
+      then "cp -v ${from} $out"
+      else "cp -v ${from} $out/${to}") targets)}
+
+    # Some PXE constellations especially with dnsmasq are looking for the file with .0 ending
+    # let's provide it as a symlink to be compatible in this case.
+    ln -s undionly.kpxe $out/undionly.kpxe.0
+
+    runHook postInstall
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib;
+    { description = "Network boot firmware";
+      homepage = "https://ipxe.org/";
+      license = licenses.gpl2Only;
+      platforms = platforms.linux;
+    };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ised/default.nix b/nixpkgs/pkgs/tools/misc/ised/default.nix
new file mode 100644
index 000000000000..9f6b716b4293
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ised/default.nix
@@ -0,0 +1,18 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ised";
+  version = "2.7.1";
+  src = fetchurl {
+    url = "mirror://sourceforge/project/ised/${pname}-${version}.tar.bz2";
+    sha256 = "0fhha61whkkqranqdxg792g0f5kgp5m3m6z1iqcvjh2c34rczbmb";
+  };
+
+  meta = {
+    description = "A numeric sequence editor";
+    maintainers = with lib.maintainers; [ raskin ];
+    platforms = with lib.platforms; linux;
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "ised";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/isoimagewriter/default.nix b/nixpkgs/pkgs/tools/misc/isoimagewriter/default.nix
new file mode 100644
index 000000000000..1ffb0f51db51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/isoimagewriter/default.nix
@@ -0,0 +1,31 @@
+{ lib, mkDerivation, fetchurl, cmake, extra-cmake-modules, wrapQtAppsHook,
+karchive, kcoreaddons, kcrash, kiconthemes, kwidgetsaddons, solid, qgpgme }:
+mkDerivation rec {
+  pname = "isoimagewriter";
+  version = "1.0.0";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/${pname}-${version}.tar.xz";
+    hash = "sha256-ppAiMD7Bvra3tPDWjlnkGZ08mGh2fLnrI8bdGZngal0=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules wrapQtAppsHook ];
+  buildInputs = [
+    karchive
+    kcoreaddons
+    kcrash
+    kiconthemes
+    kwidgetsaddons
+    solid
+    qgpgme
+  ];
+
+  meta = {
+    description = "A program to write hybrid ISO files onto USB disks";
+    homepage = "https://invent.kde.org/utilities/isoimagewriter";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ k900 ];
+    mainProgram = "isoimagewriter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ix/default.nix b/nixpkgs/pkgs/tools/misc/ix/default.nix
new file mode 100644
index 000000000000..52781f8a08bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ix/default.nix
@@ -0,0 +1,37 @@
+{ lib, resholve, fetchurl, bash, curl }:
+
+resholve.mkDerivation {
+  pname = "ix";
+  version = "20190815";
+
+  src = fetchurl {
+    url = "http://ix.io/client";
+    hash = "sha256-p/j/Nz7tzLJV7HgUwVsiwN1WxCx4Por+HyRgFTTRgnU=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 $src $out/bin/ix
+    substituteInPlace $out/bin/ix \
+      --replace '$echo ' ""
+
+    runHook postInstall
+  '';
+
+  solutions.default = {
+    scripts = [ "bin/ix" ];
+    interpreter = "${lib.getExe bash}";
+    inputs = [ curl ];
+  };
+
+  meta = with lib; {
+    homepage = "http://ix.io";
+    description = "Command line pastebin";
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.all;
+    mainProgram = "ix";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jdiskreport/default.nix b/nixpkgs/pkgs/tools/misc/jdiskreport/default.nix
new file mode 100644
index 000000000000..6490d68ce0b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jdiskreport/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, unzip, jre, makeDesktopItem, copyDesktopItems }:
+
+let
+  desktopItem = makeDesktopItem {
+    desktopName = "JDiskReport";
+    genericName = "A graphical utility to visualize disk usage";
+    categories = [ "Utility" ];
+    exec = "jdiskreport";
+    name = "jdiskreport";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "jdiskreport";
+  version = "1.4.1";
+
+  src = fetchurl {
+    url = "https://www.jgoodies.com/download/jdiskreport/jdiskreport-${lib.replaceStrings ["."] ["_"] version}.zip";
+    sha256 = "0d5mzkwsbh9s9b1vyvpaawqc09b0q41l2a7pmwf7386b1fsx6d58";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems unzip ];
+  inherit jre;
+
+  installPhase = ''
+    runHook preInstall
+
+    unzip $src
+
+    jar=$(ls */*.jar)
+
+    mkdir -p $out/share/java
+    mv $jar $out/share/java
+
+    mkdir -p $out/bin
+    cat > $out/bin/jdiskreport <<EOF
+    #! $SHELL -e
+    exec $jre/bin/java -jar $out/share/java/$(basename $jar)
+    EOF
+    chmod +x $out/bin/jdiskreport
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    homepage = "http://www.jgoodies.com/freeware/jdiskreport/";
+    description = "A graphical utility to visualize disk usage";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.unfreeRedistributable; #TODO freedist, libs under BSD-3
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    maintainers = with maintainers; [ kylesferrazza ];
+    mainProgram = "jdiskreport";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jdupes/default.nix b/nixpkgs/pkgs/tools/misc/jdupes/default.nix
new file mode 100644
index 000000000000..8e29307ad24a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jdupes/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchFromGitea, libjodycode }:
+
+stdenv.mkDerivation rec {
+  pname = "jdupes";
+  version = "1.27.3";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "jbruchon";
+    repo  = "jdupes";
+    rev   = "v${version}";
+    hash = "sha256-hR5nl8G7TYVm4ol/jgo7iOb4dLr2MovgjKSXCD2UwMg=";
+    # Unicode file names lead to different checksums on HFS+ vs. other
+    # filesystems because of unicode normalisation. The testdir
+    # directories have such files and will be removed.
+    postFetch = "rm -r $out/testdir";
+  };
+
+  buildInputs = [ libjodycode ];
+
+  dontConfigure = true;
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ] ++ lib.optionals stdenv.isLinux [
+    "ENABLE_DEDUPE=1"
+    "STATIC_DEDUPE_H=1"
+  ] ++ lib.optionals stdenv.cc.isGNU [
+    "HARDEN=1"
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # broken Makefile, the above also removes tests
+
+  postInstall = ''
+    install -Dm444 -t $out/share/doc/jdupes CHANGES.txt LICENSE.txt README.md
+  '';
+
+  meta = with lib; {
+    description = "A powerful duplicate file finder and an enhanced fork of 'fdupes'";
+    longDescription = ''
+      jdupes is a program for identifying and taking actions upon
+      duplicate files. This fork known as 'jdupes' is heavily modified
+      from and improved over the original.
+    '';
+    homepage = "https://github.com/jbruchon/jdupes";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "jdupes";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jfrog-cli/default.nix b/nixpkgs/pkgs/tools/misc/jfrog-cli/default.nix
new file mode 100644
index 000000000000..3704cfed317c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jfrog-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "jfrog-cli";
+  version = "2.52.10";
+
+  src = fetchFromGitHub {
+    owner = "jfrog";
+    repo = "jfrog-cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-sqKlYHOpjIxNff1QK540Xxqr7w+WZ+pZXgfAKjRbMuM=";
+  };
+
+  vendorHash = "sha256-Cm6Wu2U2i6WZfps1WLAjYuVZZ1y7J4WXFLmX2bkevd4=";
+
+  postInstall = ''
+    # Name the output the same way as the original build script does
+    mv $out/bin/jfrog-cli $out/bin/jf
+  '';
+
+  # Some of the tests require a writable $HOME
+  preCheck = "export HOME=$TMPDIR";
+
+  meta = with lib; {
+    homepage = "https://github.com/jfrog/jfrog-cli";
+    description = "Client for accessing to JFrog's Artifactory and Mission Control through their respective REST APIs";
+    changelog = "https://github.com/jfrog/jfrog-cli/releases/tag/v${version}";
+    license = licenses.asl20;
+    mainProgram = "jf";
+    maintainers = with maintainers; [ detegr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/journaldriver/default.nix b/nixpkgs/pkgs/tools/misc/journaldriver/default.nix
new file mode 100644
index 000000000000..a5174c4b309e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/journaldriver/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchgit, rustPlatform, pkg-config, openssl, systemd }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "journaldriver";
+  version = "5656.0.0";
+  cargoSha256 = "0jxv7skqgkk2j28jzs0gqnic0pqbdpgy8ryhz613pn0cslgy1p5q";
+
+  src = fetchgit {
+    url = "https://code.tvl.fyi/depot.git:/ops/journaldriver.git";
+    sha256 = "0bnf67k6pkw4rngn58b5zm19danr4sh2g6rfd4k5w2sa1lzqai04";
+
+    # TVL revision r/5656; as of 2023-01-13 the revision tag is
+    # unavailable through git, hence the pinned hash.
+    rev = "4e191353228197ce548d63cb9955e53661244f9c";
+  };
+
+  buildInputs = [ openssl systemd ];
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "Log forwarder from journald to Stackdriver Logging";
+    homepage = "https://code.tvl.fyi/about/ops/journaldriver";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.tazjin ];
+    platforms = platforms.linux;
+    mainProgram = "journaldriver";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jsonwatch/default.nix b/nixpkgs/pkgs/tools/misc/jsonwatch/default.nix
new file mode 100644
index 000000000000..2f0e3b89149c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jsonwatch/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jsonwatch";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "dbohdan";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-TGW04P8t0mAXza7I7qp6QRXA/MDE3m1dlRC7bMf2dSk=";
+  };
+
+  cargoSha256 = "sha256-Gjb7v3kz11iOml3Ykxhy43KNxzaprgMbb5DpPNChLTc=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "Like watch -d but for JSON";
+    longDescription = ''
+      jsonwatch is a command line utility with which you can track
+      changes in JSON data delivered by a shell command or a web
+      (HTTP/HTTPS) API. jsonwatch requests data from the designated
+      source repeatedly at a set interval and displays the
+      differences when the data changes.
+    '';
+    homepage = "https://github.com/dbohdan/jsonwatch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    # never built on aarch64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+    mainProgram = "jsonwatch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jstest-gtk/default.nix b/nixpkgs/pkgs/tools/misc/jstest-gtk/default.nix
new file mode 100644
index 000000000000..1b201396b7ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jstest-gtk/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, fetchFromGitLab, cmake, pkg-config, gtkmm3, libsigcxx, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "jstest-gtk";
+  version = "2018-07-10";
+
+  src = fetchFromGitLab {
+    owner = pname;
+    repo = pname;
+    rev = "62f6e2d7d44620e503149510c428df9e004c9f3b";
+    sha256 = "0icbbhrj5aqljhiavdy3hic60vp0zzfzyg0d6vpjaqkbzd5pv9d8";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ gtkmm3 libsigcxx xorg.libX11 ];
+
+  meta = with lib; {
+    description = "A simple joystick tester based on Gtk+";
+    longDescription = ''
+      It provides you with a list of attached joysticks, a way to display which
+      buttons and axis are pressed, a way to remap axis and buttons and a way
+      to calibrate your joystick.
+    '';
+    homepage = "https://jstest-gtk.gitlab.io/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wucke13 ];
+    platforms = platforms.linux;
+    mainProgram = "jstest-gtk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jugglinglab/default.nix b/nixpkgs/pkgs/tools/misc/jugglinglab/default.nix
new file mode 100644
index 000000000000..64b91a68d948
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jugglinglab/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, maven
+, fetchFromGitHub
+, makeWrapper
+, wrapGAppsHook
+, jre
+}:
+
+let
+  platformName = {
+    "x86_64-linux" = "linux-x86-64";
+    "aarch64-linux" = "linux-aarch64";
+    "x86_64-darwin" = "darwin-x86-64";
+    "aarch64-darwin" = "darwin-aarch64";
+  }.${stdenv.system} or null;
+in
+maven.buildMavenPackage rec {
+  pname = "jugglinglab";
+  version = "1.6.5";
+
+  src = fetchFromGitHub {
+    owner = "jkboyce";
+    repo = "jugglinglab";
+    rev = "v${version}";
+    hash = "sha256-Y87uHFpVs4A/wErNO2ZF6Su0v4LEvaE9nIysrqFoY8w=";
+  };
+
+  patches = [
+    # make sure mvnHash doesn't change when maven is updated
+    ./fix-default-maven-plugin-versions.patch
+  ];
+
+  mvnHash = "sha256-1Uzo9nRw+YR/sd7CC9MTPe/lttkRX6BtmcsHaagP1Do=";
+
+  # fix jar timestamps for reproducibility
+  mvnParameters = "-Dproject.build.outputTimestamp=1980-01-01T00:00:02Z";
+
+  nativeBuildInputs = [
+    makeWrapper
+    wrapGAppsHook
+  ];
+
+  dontWrapGApps = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm644 bin/JugglingLab.jar -t $out/share/jugglinglab
+    ${lib.optionalString (platformName != null) ''
+      install -Dm755 bin/ortools-lib/ortools-${platformName}/* -t $out/lib/ortools-lib
+    ''}
+
+    runHook postInstall
+  '';
+
+  # gappsWrapperArgs are set in preFixup
+  postFixup = ''
+    makeWrapper ${jre}/bin/java $out/bin/jugglinglab \
+        "''${gappsWrapperArgs[@]}" \
+        --add-flags "-Xss2048k -Djava.library.path=$out/lib/ortools-lib" \
+        --add-flags "-jar $out/share/jugglinglab/JugglingLab.jar"
+  '';
+
+  meta = with lib; {
+    description = "A program to visualize different juggling pattens";
+    homepage = "https://jugglinglab.org/";
+    license = licenses.gpl2Only;
+    mainProgram = "jugglinglab";
+    maintainers = with maintainers; [ wnklmnn tomasajt ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jugglinglab/fix-default-maven-plugin-versions.patch b/nixpkgs/pkgs/tools/misc/jugglinglab/fix-default-maven-plugin-versions.patch
new file mode 100644
index 000000000000..a2f74b19b61f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jugglinglab/fix-default-maven-plugin-versions.patch
@@ -0,0 +1,70 @@
+diff --git a/pom.xml b/pom.xml
+index 93fd6be..5f929c3 100644
+--- a/pom.xml
++++ b/pom.xml
+@@ -42,6 +43,65 @@
+ 
+     <build>
+         <plugins>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-enforcer-plugin</artifactId>
++                <version>3.4.1</version>
++                <executions>
++                    <execution>
++                        <id>require-all-plugin-versions-to-be-set</id>
++                        <phase>validate</phase>
++                        <goals>
++                            <goal>enforce</goal>
++                        </goals>
++                        <configuration>
++                            <rules>
++                                <requirePluginVersions />
++                            </rules>
++                        </configuration>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.12.1</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-surefire-plugin</artifactId>
++                <version>3.2.3</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>3.3.0</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-clean-plugin</artifactId>
++                <version>3.3.2</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-install-plugin</artifactId>
++                <version>3.1.1</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-site-plugin</artifactId>
++                <version>4.0.0-M13</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-resources-plugin</artifactId>
++                <version>3.3.1</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-deploy-plugin</artifactId>
++                <version>3.1.1</version>
++            </plugin>
+ 
+             <!-- remove existing `bin/JugglingLab.jar` -->
+             <!-- otherwise on overwrite Maven creates `bin/original-JugglingLab.jar` -->
diff --git a/nixpkgs/pkgs/tools/misc/kak-lsp/0001-Use-full-Perl-path.patch b/nixpkgs/pkgs/tools/misc/kak-lsp/0001-Use-full-Perl-path.patch
new file mode 100644
index 000000000000..38f0d38cb215
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kak-lsp/0001-Use-full-Perl-path.patch
@@ -0,0 +1,37 @@
+From b93660cfa8a80a5e5bf72e1f06fb7bf95272c7e4 Mon Sep 17 00:00:00 2001
+From: PoweredByPie <poweredbypie@users.noreply.github.com>
+Date: Fri, 8 Dec 2023 04:39:01 -0800
+Subject: [PATCH] Use full Perl path
+
+---
+ rc/lsp.kak | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/rc/lsp.kak b/rc/lsp.kak
+index d695a2e..7c6a436 100644
+--- a/rc/lsp.kak
++++ b/rc/lsp.kak
+@@ -2339,11 +2339,6 @@ define-command -hidden lsp-snippets-insert-completion -params 1 %{ evaluate-comm
+ }}
+ 
+ define-command lsp-snippets-insert -hidden -params 1 %[
+-    evaluate-commands %sh{
+-        if ! command -v perl > /dev/null 2>&1; then
+-            printf "fail '''perl'' must be installed to use the ''snippets-insert'' command'"
+-        fi
+-    }
+     evaluate-commands -draft -save-regs '^"' %[
+         set-register '"' %arg{1}
+         execute-keys <a-P>
+@@ -2397,7 +2392,7 @@ define-command lsp-snippets-insert -hidden -params 1 %[
+ 
+ define-command -hidden lsp-snippets-insert-perl-impl %[
+     evaluate-commands %sh[ # $kak_quoted_selections
+-        perl -e '
++        @perlPath@/bin/perl -e '
+ use strict;
+ use warnings;
+ use Text::ParseWords();
+-- 
+2.42.0
+
diff --git a/nixpkgs/pkgs/tools/misc/kak-lsp/default.nix b/nixpkgs/pkgs/tools/misc/kak-lsp/default.nix
new file mode 100644
index 000000000000..a49847f8e11f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kak-lsp/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform, perl, CoreServices, Security, SystemConfiguration }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kak-lsp";
+  version = "15.0.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-W4z2YtOEBCTM+NsL1HBHSYCXJXN459chE4RW0CPMjD4=";
+  };
+
+  cargoHash = "sha256-tAA9eu4y1h6huNmEgY3L6v29itP5I4a8UZgoA+ANoq0=";
+
+  buildInputs = [ perl ] ++ lib.optionals stdenv.isDarwin [ CoreServices Security SystemConfiguration ];
+
+  patches = [ ./0001-Use-full-Perl-path.patch ];
+
+  postPatch = ''
+    substituteInPlace rc/lsp.kak \
+      --subst-var-by perlPath ${lib.getBin perl}
+  '';
+
+  meta = with lib; {
+    description = "Kakoune Language Server Protocol Client";
+    homepage = "https://github.com/kak-lsp/kak-lsp";
+    license = with licenses; [ unlicense /* or */ mit ];
+    maintainers = with maintainers; [ spacekookie poweredbypie ];
+    mainProgram = "kak-lsp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kakoune-cr/default.nix b/nixpkgs/pkgs/tools/misc/kakoune-cr/default.nix
new file mode 100644
index 000000000000..9a9fa5c9162a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kakoune-cr/default.nix
@@ -0,0 +1,50 @@
+{ lib, crystal, fetchFromGitHub, fetchurl, jq, bash }:
+let
+  icon = fetchurl {
+    url = "https://github.com/mawww/kakoune/raw/master/doc/kakoune_logo.svg";
+    hash = "sha256-JxhIEmjiGrisaarA1sX1AfzNjHNIm9xjyPs/nG1uL/U=";
+  };
+in
+crystal.buildCrystalPackage rec {
+  pname = "kakoune.cr";
+  version = "unstable-2021-11-12";
+
+  src = fetchFromGitHub {
+    owner = "alexherbo2";
+    repo = "kakoune.cr";
+    rev = "43d4276e1d173839f335ff60f205b89705892e00";
+    hash = "sha256-xFrxbnZl/49vGKdkESPa6LpK0ckq4Jv5GNLL/G0qA1w=";
+  };
+
+  buildInputs = [ bash ];
+  propagatedUserEnvPkgs = [ jq ];
+
+  format = "shards";
+  shardsFile = ./shards.nix;
+  lockFile = ./shard.lock;
+
+  preConfigure = ''
+    substituteInPlace src/kakoune/version.cr --replace \
+      '`git describe --tags --always`' \
+      '"${version}"'
+  '';
+
+  postInstall = ''
+    install -Dm555 share/kcr/commands/*/kcr-* -t $out/bin
+    install -Dm444 share/kcr/applications/kcr.desktop -t $out/share/applications
+    install -Dm444 ${icon} $out/share/icons/hicolor/scalable/apps/kcr.svg
+    cp -r share/kcr $out/share/
+  '';
+
+  installCheckPhase = ''
+    $out/bin/kcr --help
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/alexherbo2/kakoune.cr";
+    description = "A command-line tool for Kakoune";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ malte-v ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kakoune-cr/shard.lock b/nixpkgs/pkgs/tools/misc/kakoune-cr/shard.lock
new file mode 100644
index 000000000000..79981b8460d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kakoune-cr/shard.lock
@@ -0,0 +1,10 @@
+version: 2.0
+shards:
+  fifo:
+    git: https://github.com/alexherbo2/fifo.cr.git
+    version: 0.1.0+git.commit.37a2cc2718af0f8a1c50071106d7a5ca3a0d3da2
+
+  rsub:
+    git: https://github.com/alexherbo2/rsub.cr.git
+    version: 0.1.0+git.commit.43c6b9836ee281328bccfdf8c669bab26448e3b3
+
diff --git a/nixpkgs/pkgs/tools/misc/kakoune-cr/shards.nix b/nixpkgs/pkgs/tools/misc/kakoune-cr/shards.nix
new file mode 100644
index 000000000000..b4160f403c74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kakoune-cr/shards.nix
@@ -0,0 +1,14 @@
+{
+  fifo = {
+    owner = "alexherbo2";
+    repo = "fifo.cr";
+    rev = "37a2cc2718af0f8a1c50071106d7a5ca3a0d3da2";
+    sha256 = "0syh2819dzsfb562z645sajfh7xplhh3mxdachjnzlsdfqkxw85r";
+  };
+  rsub = {
+    owner = "alexherbo2";
+    repo = "rsub.cr";
+    rev = "43c6b9836ee281328bccfdf8c669bab26448e3b3";
+    sha256 = "144p83y3d02jy4gapify53x3i4i51yva6ajbvgi8rx0zj2ajgr0d";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kalker/default.nix b/nixpkgs/pkgs/tools/misc/kalker/default.nix
new file mode 100644
index 000000000000..2df69dd8f252
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kalker/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, gmp
+, mpfr
+, libmpc
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kalker";
+  version = "2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "PaddiM8";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-8tJi4PRGhNCndiMRdZUvCSdx/+p9OhJyJ3AbD+PucSo=";
+  };
+
+  cargoHash = "sha256-rGy4tkjjPiV2lpdOtfqjsXgBgi/x+45K4KeUDhyfQoA=";
+
+  buildInputs = [ gmp mpfr libmpc ];
+
+  outputs = [ "out" "lib" ];
+
+  # Cargo.lock is outdated
+  preConfigure = ''
+    cargo metadata --offline
+  '';
+
+  postInstall = ''
+    moveToOutput "lib" "$lib"
+  '';
+
+  env.CARGO_FEATURE_USE_SYSTEM_LIBS = "1";
+
+  meta = with lib; {
+    homepage = "https://kalker.strct.net";
+    changelog = "https://github.com/PaddiM8/kalker/releases/tag/v${version}";
+    description = "A command line calculator";
+    longDescription = ''
+      A command line calculator that supports math-like syntax with user-defined
+      variables, functions, derivation, integration, and complex numbers
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda lovesegfault ];
+    mainProgram = "kalker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kargo/default.nix b/nixpkgs/pkgs/tools/misc/kargo/default.nix
new file mode 100644
index 000000000000..2097d47aa1ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kargo/default.nix
@@ -0,0 +1,39 @@
+{ lib, fetchurl, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  version = "0.4.8";
+  pname = "kargo";
+
+  src = fetchurl {
+    url = "mirror://pypi/k/kargo/${pname}-${version}.tar.gz";
+    sha256 = "1iq3vrmglag9gpsir03yz7556m0bz99nwb2mf594378cqzbr6db3";
+  };
+
+  propagatedBuildInputs = [
+    ansible-core
+    boto
+    cffi
+    cryptography
+    libcloud
+    markupsafe
+    netaddr
+    pyasn1
+    requests
+    setuptools
+  ];
+
+  checkPhase = ''
+    HOME=$TMPDIR $out/bin/kargo -v
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/kubespray/kargo-cli";
+    description = "A tool helps to deploy a kubernetes cluster with Ansible";
+    platforms = platforms.all;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "kargo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kb/default.nix b/nixpkgs/pkgs/tools/misc/kb/default.nix
new file mode 100644
index 000000000000..85a72adebcdd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kb/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "kb";
+  version = "0.1.7";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "gnebbia";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-K8EAqZbl2e0h03fFwaKIclZTZARDQp1tRo44znxwW0I=";
+  };
+
+  postPatch = ''
+    # `attr` module is not available. And `attrs` defines another `attr` package
+    # that shadows it.
+    substituteInPlace setup.py \
+      --replace \
+        "install_requires=[\"colored\",\"toml\",\"attr\",\"attrs\",\"gitpython\"]," \
+        "install_requires=[\"colored\",\"toml\",\"attrs\",\"gitpython\"],"
+
+    # pytest coverage reporting isn't necessary
+    substituteInPlace setup.cfg \
+      --replace \
+      "addopts = --cov=kb --cov-report term-missing" ""
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colored
+    toml
+    attrs
+    gitpython
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "A minimalist command line knowledge base manager";
+    longDescription = ''
+      kb is a text-oriented minimalist command line knowledge base manager. kb
+      can be considered a quick note collection and access tool oriented toward
+      software developers, penetration testers, hackers, students or whoever has
+      to collect and organize notes in a clean way. Although kb is mainly
+      targeted on text-based note collection, it supports non-text files as well
+      (e.g., images, pdf, videos and others).
+    '';
+    homepage = "https://github.com/gnebbia/kb";
+    changelog = "https://github.com/gnebbia/kb/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wesleyjrz ];
+    mainProgram = "kb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kcollectd/default.nix b/nixpkgs/pkgs/tools/misc/kcollectd/default.nix
new file mode 100644
index 000000000000..a5c1039274a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kcollectd/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, fetchFromGitLab
+, mkDerivation
+, qtbase
+, cmake
+, kconfig
+, kio
+, kiconthemes
+, kxmlgui
+, ki18n
+, kguiaddons
+, extra-cmake-modules
+, boost
+, shared-mime-info
+, rrdtool
+, breeze-icons
+}:
+
+mkDerivation rec {
+  pname = "kcollectd";
+  version = "0.12.0";
+  src = fetchFromGitLab {
+    owner = "aerusso";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Ihd4Ps4t9+sNB3joO3vTxDR/25t7Ecl6yvHQ15QiUdY=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    shared-mime-info
+  ];
+
+  buildInputs = [
+    qtbase
+    kconfig
+    kio
+    kxmlgui
+    kiconthemes
+    ki18n
+    kguiaddons
+    boost
+    rrdtool
+    # otherwise some buttons are blank
+    breeze-icons
+  ];
+
+  meta = with lib; {
+    description = "A graphical frontend to collectd";
+    homepage = "https://www.antonioerusso.com/projects/kcollectd/";
+    maintainers = [ maintainers.symphorien ];
+    license = [ lib.licenses.gpl3Plus ];
+    platforms = lib.platforms.linux;
+    mainProgram = "kcollectd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kepubify/default.nix b/nixpkgs/pkgs/tools/misc/kepubify/default.nix
new file mode 100644
index 000000000000..1820b3a4dca6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kepubify/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "kepubify";
+  version = "4.0.4";
+
+  src = fetchFromGitHub {
+    owner = "pgaskin";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-H6W+C5twXit7Z9hLIJKAftbnvYDA9HAb9tR6yeQGRKI=";
+  };
+
+  vendorHash = "sha256-QOMLwDDvrDQAaK4M4QhBFTGD1CzblkDoA3ZqtCoRHtQ=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  excludedPackages = [ "kobotest" ];
+
+  meta = with lib; {
+    description = "EPUB to KEPUB converter";
+    homepage = "https://pgaskin.net/kepubify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zowoq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kermit/default.nix b/nixpkgs/pkgs/tools/misc/kermit/default.nix
new file mode 100644
index 000000000000..bccecde01cc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kermit/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, ncurses, libxcrypt }:
+
+stdenv.mkDerivation {
+  pname = "kermit";
+  version = "9.0.302";
+
+  src = fetchurl {
+    url = "ftp://ftp.kermitproject.org/kermit/archives/cku302.tar.gz";
+    sha256 = "0487mh6s99ijqf1pfmbm302pa5i4pzmm8s439hdl1ffs5g8jqpqd";
+  };
+
+  buildInputs = [ ncurses libxcrypt ];
+
+  unpackPhase = ''
+    mkdir -p src
+    pushd src
+    tar xvzf $src
+  '';
+
+  postPatch = ''
+    sed -i -e 's@-I/usr/include/ncurses@@' \
+      -e 's@/usr/local@'"$out"@ makefile
+  '';
+
+  buildPhase = "make -f makefile linux KFLAGS='-D_IO_file_flags' LNKFLAGS='-lcrypt -lresolv'";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/man/man1
+    make -f makefile install
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.kermitproject.org/ck90.html";
+    description = "Portable Scriptable Network and Serial Communication Software";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/keychain/default.nix b/nixpkgs/pkgs/tools/misc/keychain/default.nix
new file mode 100644
index 000000000000..edb0bc34e776
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/keychain/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, makeWrapper
+, coreutils
+, openssh
+, gnupg
+, perl
+, procps
+, gnugrep
+, gawk
+, findutils
+, gnused
+}:
+
+stdenv.mkDerivation rec {
+  pname = "keychain";
+  version = "2.8.5";
+
+  src = fetchFromGitHub {
+    owner = "funtoo";
+    repo = "keychain";
+    rev = version;
+    sha256 = "1bkjlg0a2bbdjhwp37ci1rwikvrl4s3xlbf2jq2z4azc96dr83mj";
+  };
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp keychain $out/bin/keychain
+    installManPage keychain.1
+    wrapProgram $out/bin/keychain \
+      --prefix PATH ":" "${lib.makeBinPath [ coreutils findutils gawk gnupg gnugrep gnused openssh procps ]}" \
+  '';
+
+  meta = with lib; {
+    description = "Keychain management tool";
+    longDescription = ''
+      Keychain helps you to manage SSH and GPG keys in a convenient and secure
+      manner. It acts as a frontend to ssh-agent and ssh-add, but allows you
+      to easily have one long running ssh-agent process per system, rather
+      than the norm of one ssh-agent per login session.
+
+      This dramatically reduces the number of times you need to enter your
+      passphrase. With keychain, you only need to enter a passphrase once
+      every time your local machine is rebooted. Keychain also makes it easy
+      for remote cron jobs to securely "hook in" to a long-running ssh-agent
+      process, allowing your scripts to take advantage of key-based logins.
+    '';
+    homepage = "https://www.funtoo.org/Keychain";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sigma ];
+    mainProgram = "keychain";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/keymapviz/default.nix b/nixpkgs/pkgs/tools/misc/keymapviz/default.nix
new file mode 100644
index 000000000000..6ed68a43b31f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/keymapviz/default.nix
@@ -0,0 +1,23 @@
+{ fetchFromGitHub, lib, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "keymapviz";
+  version = "1.14.1";
+
+  src = fetchFromGitHub {
+    owner = "yskoht";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-eCvwgco22uPEDDsT8FfTRon1xCGy5p1PBp0pDfNprMs=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ regex ];
+
+  meta = with lib; {
+    description = "A qmk keymap.c visualizer";
+    homepage = "https://github.com/yskoht/keymapviz";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lom ];
+    mainProgram = "keymapviz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kicli/default.nix b/nixpkgs/pkgs/tools/misc/kicli/default.nix
new file mode 100644
index 000000000000..61eb8fe28ae6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kicli/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+}:
+buildGoModule rec {
+  pname = "kicli";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "anned20";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Mt1lHOC8gBcLQ6kArUvlPrH+Y/63mIQTCsUY2UTJE2c=";
+  };
+
+  vendorHash = "sha256-+8L/9NJ3dzP4k+LXkPD208uFGeARv7aT39bhH+R08e0=";
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://github.com/anned20/kicli";
+    description = "CLI interface to the Kimai time tracking project";
+    license = licenses.mit;
+    maintainers = with maintainers; [ poelzi ];
+    platforms = platforms.all;
+    mainProgram = "kicli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/killport/default.nix b/nixpkgs/pkgs/tools/misc/killport/default.nix
new file mode 100644
index 000000000000..d043385f2069
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/killport/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "killport";
+  version = "0.9.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-eyRI4ZVp9HPMvpzyV9sQdh2r966pCdyUPnEhxGkzH3Q=";
+  };
+
+  cargoHash = "sha256-QQ43dT9BTu7qCzpnTGKzlVL6jKDXofXStYWYNLHSuVs=";
+
+  nativeBuildInputs = [ rustPlatform.bindgenHook ];
+
+  meta = with lib; {
+    description = "A command-line tool to easily kill processes running on a specified port";
+    homepage = "https://github.com/jkfran/killport";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sno2wman ];
+    mainProgram = "killport";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kisslicer/default.nix b/nixpkgs/pkgs/tools/misc/kisslicer/default.nix
new file mode 100644
index 000000000000..c016c0b88f4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kisslicer/default.nix
@@ -0,0 +1,61 @@
+{ fetchzip
+, libX11
+, libGLU, libGL
+, makeWrapper
+, lib, stdenv
+}:
+
+let
+
+  libPath = lib.makeLibraryPath [
+    libGLU libGL
+    stdenv.cc.cc
+    libX11
+  ];
+
+  inidir = "\\\${XDG_CONFIG_HOME:-\\$HOME/.config}/kisslicer";
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "kisslicer";
+  version = "1.6.3";
+
+  src = fetchzip {
+    url = "https://www.kisslicer.com/uploads/1/5/3/8/15381852/kisslicer_linux64_${version}_release.zip";
+    sha256 = "1xmywj5jrcsqv1d5x3mphhvafs4mfm9l12npkhk7l03qxbwg9j82";
+    stripRoot = false;
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    libGLU libGL
+    libX11
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -p * $out/bin
+  '';
+
+  fixupPhase = ''
+    chmod 755 $out/bin/KISSlicer
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath ${libPath}   $out/bin/KISSlicer
+    wrapProgram $out/bin/KISSlicer \
+      --add-flags "-inidir ${inidir}" \
+      --run "mkdir -p ${inidir}"
+  '';
+
+  meta = with lib; {
+    description = "Convert STL files into Gcode";
+    homepage = "http://www.kisslicer.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.cransom ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kitty-img/default.nix b/nixpkgs/pkgs/tools/misc/kitty-img/default.nix
new file mode 100644
index 000000000000..c47c4e6fc80d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kitty-img/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromSourcehut }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kitty-img";
+  version = "1.0.0";
+
+  src = fetchFromSourcehut {
+    owner = "~zethra";
+    repo = "kitty-img";
+    rev = version;
+    hash = "sha256-5thx4ADmJE29bxN+ZO3hF0jhgXK+boqt8oj4Sygl5SU=";
+  };
+
+  cargoHash = "sha256-Ai1Esw83V3jbPDDQyNh8bTNLQBYBonIDkWP3AFgN78U=";
+
+  meta = with lib; {
+    description = "Print images inline in kitty";
+    homepage = "https://git.sr.ht/~zethra/kitty-img";
+    changelog = "https://git.sr.ht/~zethra/kitty-img/refs/${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ gaykitty ];
+    mainProgram = "kitty-img";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kodi-cli/default.nix b/nixpkgs/pkgs/tools/misc/kodi-cli/default.nix
new file mode 100644
index 000000000000..10b9cea73d76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kodi-cli/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, curl, bash, jq, youtube-dl, gnome }:
+
+stdenv.mkDerivation rec {
+  pname = "kodi-cli";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "nawar";
+    repo = pname;
+    rev = version;
+    sha256 = "0f9wdq2fg8hlpk3qbjfkb3imprxkvdrhxfkcvr3dwfma0j2yfwam";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a kodi-cli $out/bin
+    wrapProgram $out/bin/kodi-cli --prefix PATH : ${lib.makeBinPath [ curl bash ]}
+    cp -a playlist_to_kodi $out/bin
+    wrapProgram $out/bin/playlist_to_kodi --prefix PATH : ${lib.makeBinPath [ curl bash gnome.zenity jq youtube-dl ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/nawar/kodi-cli";
+    description = "Kodi/XBMC bash script to send Kodi commands using JSON RPC. It also allows sending YouTube videos to Kodi";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.pstn ];
+ };
+}
diff --git a/nixpkgs/pkgs/tools/misc/krapslog/default.nix b/nixpkgs/pkgs/tools/misc/krapslog/default.nix
new file mode 100644
index 000000000000..909d047f834a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/krapslog/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "krapslog";
+  version = "0.5.4";
+
+  src = fetchFromGitHub {
+    owner = "acj";
+    repo = "krapslog-rs";
+    rev = version;
+    sha256 = "sha256-nYKqPaO7sA9aWPqngLoTq2PkpAi9zCADFZhYwIK1L2s=";
+  };
+
+  cargoHash = "sha256-Ybz2hNRMWSRuF6tWKsm0Ka7TOKwKvssA9/i6Hqk1tEE=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "Visualize a log file with sparklines";
+    homepage = "https://github.com/acj/krapslog-rs";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ yanganto ];
+    mainProgram = "krapslog";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kronometer/default.nix b/nixpkgs/pkgs/tools/misc/kronometer/default.nix
new file mode 100644
index 000000000000..06fafedf42ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kronometer/default.nix
@@ -0,0 +1,25 @@
+{
+  mkDerivation, fetchurl, lib,
+  extra-cmake-modules, kdoctools,
+  kconfig, kcrash, kinit
+}:
+
+mkDerivation rec {
+  pname = "kronometer";
+  version = "2.3.0";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/src/${pname}-${version}.tar.xz";
+    sha256 = "sha256-dbnhom8PRo0Bay3DzS2P0xQSrJaMXD51UadQL3z6xHY=";
+  };
+
+  meta = with lib; {
+    homepage = "https://kde.org/applications/utilities/kronometer/";
+    description = "A stopwatch application";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "kronometer";
+  };
+  nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+  propagatedBuildInputs = [ kconfig kcrash kinit ];
+}
diff --git a/nixpkgs/pkgs/tools/misc/krunner-translator/default.nix b/nixpkgs/pkgs/tools/misc/krunner-translator/default.nix
new file mode 100644
index 000000000000..c97428b9469c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/krunner-translator/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, krunner
+, kconfigwidgets
+, ktextwidgets
+, kservice
+, ki18n
+, translate-shell
+, qtbase
+, qtdeclarative
+, qtlocation
+}:
+
+stdenv.mkDerivation rec {
+  pname = "krunner-translator";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "naraesk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "8MusGvNhTxa8Sm8WiSwRaVIfZOeXmgcO4T6H9LqFGLs=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  dontWrapQtApps = true;
+
+  buildInputs = [
+    krunner
+    kconfigwidgets
+    ktextwidgets
+    kservice
+    ki18n
+    qtbase
+    qtdeclarative
+    qtlocation
+  ];
+
+  postPatch = ''
+    substituteInPlace src/translateShellProcess.cpp --replace "start(\"trans\", arguments);" "start(\"${translate-shell}/bin/trans\", arguments);"
+  '';
+
+  meta = with lib; {
+    description = "A plugin for KRunner which integrates a translator, supports Google Translate, Bing Translator, youdao and Baidu Fanyi";
+    homepage = "https://github.com/naraesk/krunner-translator";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pongo1231 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ksnip/default.nix b/nixpkgs/pkgs/tools/misc/ksnip/default.nix
new file mode 100644
index 000000000000..60ba06a29930
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ksnip/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, lib
+, cmake
+, extra-cmake-modules
+, fetchFromGitHub
+, kcolorpicker
+, kimageannotator
+, wrapQtAppsHook
+, qtsvg
+, qttools
+, qtx11extras
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ksnip";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "ksnip";
+    repo = "ksnip";
+    rev = "v${version}";
+    sha256 = "sha256-n7YwDXd73hyrzb6L8utZFuHh9HnjVtkU6CC4jfWPj/I=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    wrapQtAppsHook
+    qttools
+  ];
+
+  buildInputs = [
+    kcolorpicker
+    kimageannotator
+    qtsvg
+    qtx11extras
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ksnip/ksnip";
+    description = "Cross-platform screenshot tool with many annotation features";
+    longDescription = ''
+      Features:
+
+      - Supports Linux (X11, Plasma Wayland, GNOME Wayland and xdg-desktop-portal Wayland), Windows and macOS.
+      - Screenshot of a custom rectangular area that can be drawn with mouse cursor.
+      - Screenshot of last selected rectangular area without selecting again.
+      - Screenshot of the screen/monitor where the mouse cursor is currently located.
+      - Screenshot of full-screen, including all screens/monitors.
+      - Screenshot of window that currently has focus.
+      - Screenshot of window under mouse cursor.
+      - Screenshot with or without mouse cursor.
+      - Capture mouse cursor as annotation item that can be moved and deleted.
+      - Customizable capture delay for all capture options.
+      - Upload screenshots directly to imgur.com in anonymous or user mode.
+      - Upload screenshots via custom user defined scripts.
+      - Command-line support, for capturing screenshots and saving to default location, filename and format.
+      - Filename wildcards for Year ($Y), Month ($M), Day ($D), Time ($T) and Counter (multiple # characters for number with zero-leading padding).
+      - Print screenshot or save it to PDF/PS.
+      - Annotate screenshots with pen, marker, rectangles, ellipses, texts and other tools.
+      - Annotate screenshots with stickers and add custom stickers.
+      - Obfuscate image regions with blur and pixelate.
+      - Add effects to image (Drop Shadow, Grayscale, invert color or Border).
+      - Add watermarks to captured images.
+      - Global hotkeys for capturing screenshots (currently only for Windows and X11).
+      - Tabs for screenshots and images.
+      - Open existing images via dialog, drag-and-drop or paste from clipboard.
+      - Run as single instance application (secondary instances send cli parameter to primary instance).
+      - Pin screenshots in frameless windows that stay atop other windows.
+      - User-defined actions for taking screenshot and post-processing.
+      - Many configuration options.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ x3ro ];
+    platforms = platforms.linux;
+    mainProgram = "ksnip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kt/default.nix b/nixpkgs/pkgs/tools/misc/kt/default.nix
new file mode 100644
index 000000000000..2e0bfbc1b102
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kt/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "kt";
+  version = "13.1.0";
+
+  src = fetchFromGitHub {
+    owner = "fgeller";
+    repo = "kt";
+    rev = "v${version}";
+    sha256 = "sha256-1UGsiMMmAyIQZ62hNIi0uzyX2uNL03EWupIazjznqDc=";
+  };
+
+  vendorHash = "sha256-PeNpDro6G78KLN6B2CDhsTKamRTWQyxPJYWuuv6sUyw=";
+
+  ldflags = [ "-s" "-w" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Kafka command line tool";
+    homepage = "https://github.com/fgeller/kt";
+    maintainers = with maintainers; [ utdemir ];
+    platforms = with platforms; unix;
+    license = licenses.mit;
+    mainProgram = "kt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/latex2html/default.nix b/nixpkgs/pkgs/tools/misc/latex2html/default.nix
new file mode 100644
index 000000000000..79b80eb3e55e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/latex2html/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper
+, ghostscript, netpbm, perl }:
+# TODO: withTex
+
+stdenv.mkDerivation rec {
+  pname = "latex2html";
+  version = "2023.2";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-fn9Td4IVqlON93p3xPpQuurFQR8Rjp/sHoQG33O5GkI=";
+  };
+
+  buildInputs = [ ghostscript netpbm perl ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  configurePhase = ''
+    ./configure \
+      --prefix="$out" \
+      --without-mktexlsr \
+      --with-texpath=$out/share/texmf/tex/latex/html
+  '';
+
+  postInstall = ''
+    for p in $out/bin/{latex2html,pstoimg}; do \
+      wrapProgram $p --add-flags '--tmp="''${TMPDIR:-/tmp}"'
+    done
+  '';
+
+  meta = with lib; {
+    description = "LaTeX-to-HTML translator";
+    longDescription = ''
+      A Perl program that translates LaTeX into HTML (HyperText Markup
+      Language), optionally creating separate HTML files corresponding to each
+      unit (e.g., section) of the document. LaTeX2HTML proceeds by interpreting
+      LaTeX (to the best of its abilities). It contains definitions from a wide
+      variety of classes and packages, and users may add further definitions by
+      writing Perl scripts that provide information about class/package
+      commands.
+    '';
+
+    homepage = "https://www.ctan.org/pkg/latex2html";
+
+    license = licenses.gpl2;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lavat/default.nix b/nixpkgs/pkgs/tools/misc/lavat/default.nix
new file mode 100644
index 000000000000..6cd38f6f34a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lavat/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+,
+}:
+let
+  version = "2.1.0";
+in
+stdenv.mkDerivation {
+  pname = "lavat";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "AngelJumbo";
+    repo = "lavat";
+    rev = "v${version}";
+    hash = "sha256-wGtuYgZS03gXYgdNdugGu/UlROQTrQ3C1inJ/aTUBKk=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp lavat $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Lava lamp simulation in the terminal";
+    longDescription = ''
+      Lavat puts ascii metaballs in your terminal to make it look a bit like a
+      lava lamp.
+
+      Lavat contains various options, including those to change the color and
+      speed of the metaballs. For a full list, run `lavat -h`
+    '';
+    maintainers = [ maintainers.minion3665 ];
+    license = licenses.mit;
+    homepage = "https://github.com/AngelJumbo/lavat";
+    platforms = platforms.all;
+    mainProgram = "lavat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lazycli/default.nix b/nixpkgs/pkgs/tools/misc/lazycli/default.nix
new file mode 100644
index 000000000000..70b5f345690e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lazycli/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lazycli";
+  version = "0.1.15";
+
+  src = fetchFromGitHub {
+    owner = "jesseduffield";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1qq167hc7pp9l0m40ysphfljakmm8hjjnhpldvb0kbc825h0z8z5";
+  };
+
+  cargoSha256 = "sha256-1BIUXepR7ppEkTLDOCZz9RBv+RazNMXnCnH1rvzVFgs=";
+
+  checkFlags = [
+    # currently broken: https://github.com/jesseduffield/lazycli/pull/20
+    "--skip=command::test_run_command_fail"
+  ];
+
+  meta = with lib; {
+    description = "A tool to static turn CLI commands into TUIs";
+    homepage = "https://github.com/jesseduffield/lazycli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lazycli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lazydocker/default.nix b/nixpkgs/pkgs/tools/misc/lazydocker/default.nix
new file mode 100644
index 000000000000..59a6ad16ce9d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lazydocker/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, lazydocker, testers }:
+
+buildGoModule rec {
+  pname = "lazydocker";
+  version = "0.23.1";
+
+  src = fetchFromGitHub {
+    owner = "jesseduffield";
+    repo = "lazydocker";
+    rev = "v${version}";
+    sha256 = "sha256-nW3eaSisXLqoWZ+5YLLCfC1k4lTXWd5ZqY2xTM/I0PY=";
+  };
+
+  vendorHash = null;
+
+  postPatch = ''
+    rm -f pkg/config/app_config_test.go
+  '';
+
+  excludedPackages = [ "scripts" "test/printrandom" ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = lazydocker;
+  };
+
+  meta = with lib; {
+    description = "A simple terminal UI for both docker and docker-compose";
+    homepage = "https://github.com/jesseduffield/lazydocker";
+    license = licenses.mit;
+    maintainers = with maintainers; [ das-g Br1ght0ne ];
+    mainProgram = "lazydocker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch b/nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch
new file mode 100644
index 000000000000..d388467559a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch
@@ -0,0 +1,11 @@
+--- a/lbdb.rc.in
++++ b/lbdb.rc.in
+@@ -40,7 +40,7 @@
+ # - m_vcf        search a vcard (according to RFC2426) file.
+ # - m_khard      search a CardDAV address book via khard
+ 
+-METHODS="m_inmail m_passwd m_finger"
++METHODS="@MODULES@"
+ 
+ 
+ #
diff --git a/nixpkgs/pkgs/tools/misc/lbdb/default.nix b/nixpkgs/pkgs/tools/misc/lbdb/default.nix
new file mode 100644
index 000000000000..43dab4772d5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lbdb/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, perl
+, bsd-finger
+, withAbook ? true, abook
+, withGnupg ? true, gnupg
+, withGoobook ? true, goobook
+, withKhard ? true, khard
+, withMu ? true, mu
+}:
+
+let
+  perl' = perl.withPackages (p: with p; [
+    AuthenSASL
+    ConvertASN1
+    IOSocketSSL
+    perlldap
+  ]);
+in
+stdenv.mkDerivation rec {
+  pname = "lbdb";
+  version = "0.48.1";
+
+  src = fetchurl {
+    url = "https://www.spinnaker.de/lbdb/download/lbdb_${version}.tar.gz";
+    sha256 = "1gr5l2fr9qbdccga8bhsrpvz6jxigvfkdxrln9wyf2xpps5cdjxh";
+  };
+
+  buildInputs = [ perl' ]
+    ++ lib.optional (!stdenv.isDarwin) bsd-finger
+    ++ lib.optional withAbook abook
+    ++ lib.optional withGnupg gnupg
+    ++ lib.optional withGoobook goobook
+    ++ lib.optional withKhard khard
+    ++ lib.optional withMu mu;
+
+  configureFlags = [ ]
+    ++ lib.optional withAbook "--with-abook"
+    ++ lib.optional withGnupg "--with-gpg"
+    ++ lib.optional withGoobook "--with-goobook"
+    ++ lib.optional withKhard "--with-khard"
+    ++ lib.optional withMu "--with-mu";
+
+  patches = [
+    ./add-methods-to-rc.patch
+    # fix undefined exec_prefix. Remove with the next release
+    (fetchpatch {
+      url = "https://github.com/RolandRosenfeld/lbdb/commit/60b7bae255011f59212d96adfbded459d6a27129.patch";
+      sha256 = "129zg086glmlalrg395jq8ljcp787dl3rxjf9v7apsd8mqfdkl2v";
+      excludes = [ "debian/changelog" ];
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.spinnaker.de/lbdb/";
+    description = "The Little Brother's Database";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ kaiha bfortz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lcdf-typetools/default.nix b/nixpkgs/pkgs/tools/misc/lcdf-typetools/default.nix
new file mode 100644
index 000000000000..eaa2ce01347b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lcdf-typetools/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "lcdf-typetools";
+  version = "2.110";
+
+  src = fetchFromGitHub {
+    owner = "kohler";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hoILYYCef2R1v6aN9V+FoYnXYaKsnGN2jlpb/QFAN/w=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  configureFlags = [ "--without-kpathsea" ];
+
+  meta = with lib; {
+    description = "Utilities for manipulating OpenType, PostScript Type 1, and Multiple Master fonts";
+    homepage = "https://www.lcdf.org/type";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ldapvi/default.nix b/nixpkgs/pkgs/tools/misc/ldapvi/default.nix
new file mode 100644
index 000000000000..4be3b9e9024c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ldapvi/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchgit, openldap, openssl, popt, glib, libxcrypt, ncurses, readline, pkg-config, cyrus_sasl, autoconf, automake }:
+
+stdenv.mkDerivation {
+  pname = "ldapvi";
+  version = "unstable-2012-04-28";
+
+  # use latest git, it includes some important patches since 2007 release
+  src = fetchgit {
+    url = "http://www.lichteblau.com/git/ldapvi.git";
+    rev = "f1d42bad66cc4623d1ff21fbd5dddbf5009d3e40";
+    sha256 = "3ef3103030ecb04d7fe80180e3fd490377cf81fb2af96782323fddabc3225030";
+  };
+
+  nativeBuildInputs = [ pkg-config autoconf automake ];
+  buildInputs = [ openldap openssl popt glib libxcrypt ncurses readline cyrus_sasl ];
+
+  preConfigure = ''
+    cd ldapvi
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "Interactive LDAP client for Unix terminals";
+    longDescription = ''
+      ldapvi is an interactive LDAP client for Unix terminals. Using it, you
+      can update LDAP entries with a text editor.
+    '';
+    homepage = "http://www.lichteblau.com/ldapvi/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms = lib.platforms.linux;
+    mainProgram = "ldapvi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ldmtool/default.nix b/nixpkgs/pkgs/tools/misc/ldmtool/default.nix
new file mode 100644
index 000000000000..6a1527ea8fe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ldmtool/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, gtk-doc, pkg-config, libuuid,
+  libtool, readline, gobject-introspection, json-glib, lvm2, libxslt, docbook_xsl
+, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "ldmtool";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "mdbooth";
+    repo = "libldm";
+    rev = "libldm-${version}";
+    sha256 = "1fy5wbmk8kwl86lzswq0d1z2j5y023qzfm2ppm8knzv9c47kniqk";
+  };
+
+  patches = [
+    # Remove useage of deprecrated G_PARAM_PRIVATE
+    (fetchpatch {
+      url = "https://github.com/mdbooth/libldm/commit/ee1b37a034038f09d61b121cc8b3651024acc46f.patch";
+      sha256 = "02y34kbcpcpffvy1n9yqngvdldmxmvdkha1v2xjqvrnclanpigcp";
+    })
+  ];
+
+  preConfigure = ''
+    sed -i docs/reference/ldmtool/Makefile.am \
+      -e 's|-nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl|--nonet ${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl|g'
+  '';
+
+  # glib-2.62 deprecations
+  env.NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  configureScript = "sh autogen.sh";
+
+  nativeBuildInputs = [ pkg-config autoconf automake gobject-introspection ];
+  buildInputs = [ gtk-doc lvm2 libxslt.bin
+    libtool readline json-glib libuuid
+  ];
+
+  meta = with lib; {
+    description = "Tool and library for managing Microsoft Windows Dynamic Disks";
+    homepage = "https://github.com/mdbooth/libldm";
+    maintainers = with maintainers; [ jensbin ];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    mainProgram = "ldmtool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/leanify/default.nix b/nixpkgs/pkgs/tools/misc/leanify/default.nix
new file mode 100644
index 000000000000..a8a7625bcbec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/leanify/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "leanify";
+  version = "unstable-2023-10-19";
+
+  src = fetchFromGitHub {
+    owner = "JayXon";
+    repo = "Leanify";
+    rev = "5511415b02a7669f5fe9b454e5705e8328ab0359";
+    hash = "sha256-eOp/SOynh0HUz62Ki5ADRk7FjQY0Gh55ydVnO0MCXAA=";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile \
+      --replace "-flto" "" \
+      --replace "lib/LZMA/Alloc.o" "lib/LZMA/CpuArch.o lib/LZMA/Alloc.o"
+  '';
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp leanify $out/bin/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Lightweight lossless file minifier/optimizer";
+    longDescription = ''
+      Leanify is a lightweight lossless file minifier/optimizer.
+      It removes unnecessary data (debug information, comments, metadata, etc.) and recompress the file to reduce file size.
+      It will not reduce image quality at all.
+    '';
+    homepage = "https://github.com/JayXon/Leanify";
+    changelog = "https://github.com/JayXon/Leanify/blob/master/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = [ maintainers.mynacol ];
+    platforms = platforms.all;
+    mainProgram = "leanify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ledit/default.nix b/nixpkgs/pkgs/tools/misc/ledit/default.nix
new file mode 100644
index 000000000000..e6470ea3fb8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ledit/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, ocamlPackages }:
+
+stdenv.mkDerivation {
+  pname = "ledit";
+  version = "2.06";
+
+  src = fetchFromGitHub {
+    owner = "chetmurthy";
+    repo = "ledit";
+    rev = "3dbd668d9c69aab5ccd61f6b906c14122ae3271d";
+    hash = "sha256-9+isvwOw5Iw5OToztqZ5PiQPj6Pxl2ZqAC7UMF+tCM4=";
+  };
+
+  preBuild = ''
+    substituteInPlace Makefile --replace /bin/rm rm --replace /usr/local/ $out/
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = with ocamlPackages; [
+    ocaml
+    findlib
+    camlp5
+  ];
+
+  buildInputs = with ocamlPackages; [
+    camlp5
+    camlp-streams
+  ];
+
+
+  meta = with lib; {
+    homepage = "http://pauillac.inria.fr/~ddr/ledit/";
+    description = "A line editor, allowing to use shell commands with control characters like in emacs";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.delta ];
+    mainProgram = "ledit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lektor/default.nix b/nixpkgs/pkgs/tools/misc/lektor/default.nix
new file mode 100644
index 000000000000..aef55ffb9b1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lektor/default.nix
@@ -0,0 +1,105 @@
+{ lib
+, fetchFromGitHub
+, fetchNpmDeps
+, fetchPypi
+, nodejs
+, npmHooks
+, python3
+}:
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      mistune = super.mistune.overridePythonAttrs (old: rec {
+        version = "2.0.5";
+        src = fetchPypi {
+          inherit (old) pname;
+          inherit version;
+          hash = "sha256-AkYRPLJJLbh1xr5Wl0p8iTMzvybNkokchfYxUc7gnTQ=";
+        };
+      });
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "lektor";
+  version = "3.4.0b8";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "lektor";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-FtmRW4AS11zAX2jvGY8XTsPrN3mhHkIWoFY7sXmqG/U=";
+  };
+
+  npmDeps = fetchNpmDeps {
+    src = "${src}/frontend";
+    hash = "sha256-Z7LP9rrVSzKoLITUarsnRbrhIw7W7TZSZUgV/OT+m0M=";
+  };
+
+  npmRoot = "frontend";
+
+  nativeBuildInputs = [
+    python.pkgs.hatch-vcs
+    python.pkgs.hatchling
+    nodejs
+    npmHooks.npmConfigHook
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    babel
+    click
+    exifread
+    filetype
+    flask
+    inifile
+    jinja2
+    markupsafe
+    marshmallow
+    marshmallow-dataclass
+    mistune
+    pillow
+    pip
+    python-slugify
+    requests
+    watchfiles
+    werkzeug
+  ];
+
+  nativeCheckInputs = with python.pkgs; [
+    pytest-click
+    pytest-mock
+    pytestCheckHook
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "werkzeug"
+  ];
+
+  postInstall = ''
+    cp -r lektor/translations "$out/${python.sitePackages}/lektor/"
+  '';
+
+  pythonImportsCheck = [
+    "lektor"
+  ];
+
+  disabledTests = [
+    # Tests require network access
+    "test_path_installed_plugin_is_none"
+    "test_VirtualEnv_run_pip_install"
+    # expects FHS paths
+    "test_VirtualEnv_executable"
+  ];
+
+  meta = with lib; {
+    description = "A static content management system";
+    homepage = "https://www.getlektor.com/";
+    changelog = "https://github.com/lektor/lektor/blob/v${version}/CHANGES.md";
+    license = licenses.bsd0;
+    mainProgram = "lektor";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lemmeknow/default.nix b/nixpkgs/pkgs/tools/misc/lemmeknow/default.nix
new file mode 100644
index 000000000000..aa5c3786831a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lemmeknow/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lemmeknow";
+  version = "0.8.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-Q82tP4xNWAooFjHeJCFmuULnWlFbgca/9Y2lm8rVXKs=";
+  };
+
+  cargoHash = "sha256-slV9RxdFCEx1El7hngWGv+5CqDSQsU2ACF2nWQLOTU0=";
+
+  meta = with lib; {
+    description = "A tool to identify anything";
+    homepage = "https://github.com/swanandx/lemmeknow";
+    changelog = "https://github.com/swanandx/lemmeknow/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda Br1ght0ne ];
+    mainProgram = "lemmeknow";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lemmy-help/default.nix b/nixpkgs/pkgs/tools/misc/lemmy-help/default.nix
new file mode 100644
index 000000000000..8c0f7110226e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lemmy-help/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lemmy-help";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "numToStr";
+    repo = "lemmy-help";
+    rev = "v${version}";
+    sha256 = "sha256-HcIvHuuzQj4HsRJyn1A9nXiGDGAcz1nqTsC7sROt7OI=";
+  };
+
+  buildFeatures = [ "cli" ];
+
+  cargoSha256 = "sha256-BCwpiBPvnLgbpOaXgUK2EDXnT8d4jo7aqgM6uwl80eg=";
+
+  meta = with lib; {
+    description = "A CLI for generating vim help docs from emmylua comments";
+    longDescription = ''
+      `lemmy-help` is an emmylua parser as well as a CLI which takes that parsed tree and converts it into vim help docs.
+    '';
+    homepage = "https://github.com/numToStr/lemmy-help";
+    changelog = "https://github.com/numToStr/lemmy-help/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lemmy-help";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lerpn/default.nix b/nixpkgs/pkgs/tools/misc/lerpn/default.nix
new file mode 100644
index 000000000000..8e35a5b0b107
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lerpn/default.nix
@@ -0,0 +1,34 @@
+{ python3
+, lib
+, fetchFromGitea
+}:
+
+python3.pkgs.buildPythonApplication {
+  pname = "lerpn";
+  version = "unstable-2023-06-09";
+
+  src = fetchFromGitea {
+    domain = "gitea.alexisvl.rocks";
+    owner = "alexisvl";
+    repo = "lerpn";
+    rev = "b65e56cfbbb38f8200e7b0c18b3a585ae768c6e2";
+    hash = "sha256-4xqBHcOWHAvQtXS9CJWTGTdE4SGHxjghZY+/KPUgX70=";
+  };
+
+  checkPhase = ''
+    runHook preCheck
+    patchShebangs test
+
+    substituteInPlace test --replace "#raise TestFailedException()" "sys.exit(1)"
+    ./test
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitea.alexisvl.rocks/alexisvl/lerpn";
+    description = "Curses RPN calculator written in straight Python";
+    maintainers = with maintainers; [ ckie ];
+    license = licenses.gpl3Plus;
+    mainProgram = "lerpn";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lesspipe/default.nix b/nixpkgs/pkgs/tools/misc/lesspipe/default.nix
new file mode 100644
index 000000000000..c7978485c7e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lesspipe/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perl, procps, file, gnused, bash, binutils }:
+
+stdenv.mkDerivation rec {
+  pname = "lesspipe";
+  version = "2.11";
+
+  src = fetchFromGitHub {
+    owner = "wofr06";
+    repo = "lesspipe";
+    rev = "v${version}";
+    hash = "sha256-jJrKiRdrargk0JzcPWxBZGyOpMfTIONHG8HNRecazVo=";
+  };
+
+  nativeBuildInputs = [ perl makeWrapper ];
+  buildInputs = [ perl bash ];
+  strictDeps = true;
+
+  postPatch = ''
+    patchShebangs --build configure
+    substituteInPlace configure --replace '/etc/bash_completion.d' '/share/bash-completion/completions'
+  '';
+
+  configureFlags = [ "--shell=${bash}/bin/bash" "--prefix=/" ];
+  configurePlatforms = [ ];
+
+  dontBuild = true;
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    for f in lesspipe.sh lesscomplete; do
+      wrapProgram "$out/bin/$f" --prefix-each PATH : "${lib.makeBinPath [ binutils file gnused procps ]}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "A preprocessor for less";
+    longDescription = ''
+      Usually lesspipe.sh is called as an input filter to less. With the help
+      of that filter less will display the uncompressed contents of compressed
+      (gzip, bzip2, compress, rar, 7-zip, lzip, xz or lzma) files. For files
+      containing archives and directories, a table of contents will be
+      displayed (e.g tar, ar, rar, jar, rpm and deb formats). Other supported
+      formats include nroff, pdf, ps, dvi, shared library, MS word, OASIS
+      (e.g. Openoffice), NetCDF, html, mp3, jpg, png, iso images, MacOSX bom,
+      plist and archive formats, perl storable data and gpg encrypted files.
+      This does require additional helper programs being installed.
+    '';
+    homepage = "https://github.com/wofr06/lesspipe";
+    platforms = platforms.all;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.martijnvermaat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix
new file mode 100644
index 000000000000..266ef9accca6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, boost, libbitcoin, libbitcoin-protocol }:
+
+stdenv.mkDerivation rec {
+  pname = "libbitcoin-client";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-5qbxixaozHFsOcBxnuGEfNJyGL8UaYCOPwPakfc0bAg=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  propagatedBuildInputs = [ libbitcoin libbitcoin-protocol ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with lib; {
+    description = "Bitcoin client query library";
+    homepage = "https://github.com/libbitcoin/libbitcoin-client";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
new file mode 100644
index 000000000000..48c8e9a4f721
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, boost, libbitcoin-client, libbitcoin-network }:
+
+stdenv.mkDerivation rec {
+  pname = "libbitcoin-explorer";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-NUAtjrfRbZg5ewQo4PZ1HEoG8GRrsPcNb78UYMHqdyo=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libbitcoin-client libbitcoin-network ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+    "--with-bash-completiondir=$out/share/bash-completion/completions"
+  ];
+
+  meta = with lib; {
+    description = "Bitcoin command line tool";
+    homepage = "https://github.com/libbitcoin/libbitcoin-explorer";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ asymmetric ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix
new file mode 100644
index 000000000000..ee9cb1da687f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, boost, libbitcoin, zeromq }:
+
+stdenv.mkDerivation rec {
+  pname = "libbitcoin-network";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zDT92bvA779mzTodpKugCoxapB6vY2jCMSGZEkJLTXQ=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libbitcoin zeromq ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with lib; {
+    description = "Bitcoin P2P Network Library";
+    homepage = "https://libbitcoin.info/";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ asymmetric ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix
new file mode 100644
index 000000000000..57e55400aa27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, boost, libbitcoin, secp256k1, zeromq }:
+
+stdenv.mkDerivation rec {
+  pname = "libbitcoin-protocol";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-xf0qQQnZ8h6ent1sgkVTo55+9drZM8Zbx0deYZnLBho=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libbitcoin secp256k1 ];
+  propagatedBuildInputs = [ zeromq ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with lib; {
+    description = "Bitcoin Blockchain Query Protocol";
+    homepage = "https://libbitcoin.info/";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ asymmetric ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix
new file mode 100644
index 000000000000..70a0f9bff6ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, boost, secp256k1 }:
+
+stdenv.mkDerivation rec {
+  pname = "libbitcoin";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7fxj2hnuGRUS4QSQ1w0s3looe9pMvE2U50/yhNyBMf0=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  propagatedBuildInputs = [ secp256k1 ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with lib; {
+    description = "C++ library for building bitcoin applications";
+    homepage = "https://libbitcoin.info/";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ ];
+    # AGPL with a lesser clause
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libgen-cli/default.nix b/nixpkgs/pkgs/tools/misc/libgen-cli/default.nix
new file mode 100644
index 000000000000..45192447bdca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libgen-cli/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "libgen-cli";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "ciehanski";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-EicXsxAvVe/umpcOn4dVlTexaAol1qYPg/h5MU5dysM=";
+  };
+
+  vendorHash = "sha256-q1EPjnVq382gEKVmGKWYgKRcU6Y0rm1Et5ExzOmyeo4=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installShellCompletion --cmd libgen-cli \
+      --bash <($out/bin/libgen-cli completion bash) \
+      --fish <($out/bin/libgen-cli completion fish) \
+      --zsh <($out/bin/libgen-cli completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ciehanski/libgen-cli";
+    description =
+      "A CLI tool used to access the Library Genesis dataset; written in Go";
+    longDescription = ''
+      libgen-cli is a command line interface application which allows users to
+      quickly query the Library Genesis dataset and download any of its
+      contents.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zaninime ];
+    mainProgram = "libgen-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libpff/default.nix b/nixpkgs/pkgs/tools/misc/libpff/default.nix
new file mode 100644
index 000000000000..62ee7c8f447c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libpff/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, lib
+, fetchzip
+, pkg-config
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libpff";
+  version = "20211114";
+
+  src = fetchzip {
+    url = "https://github.com/libyal/libpff/releases/download/${version}/libpff-alpha-${version}.tar.gz";
+    sha256 = "sha256-UmGRBgi78nDSuuOXi/WmODojWU5AbQGKNQwLseoh714=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  outputs = [ "bin" "dev" "out" ];
+
+  meta = {
+    description = "Library and tools to access the Personal Folder File (PFF) and the Offline Folder File (OFF) format";
+    homepage = "https://github.com/libyal/libpff";
+    downloadPage = "https://github.com/libyal/libpff/releases";
+    changelog = "https://github.com/libyal/libpff/blob/${version}/ChangeLog";
+    license = lib.licenses.lgpl3Only;
+    maintainers = with lib.maintainers; [ hacker1024 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/librespeed-cli/default.nix b/nixpkgs/pkgs/tools/misc/librespeed-cli/default.nix
new file mode 100644
index 000000000000..8751d9ab43d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/librespeed-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "librespeed-cli";
+  version = "1.0.10";
+
+  src = fetchFromGitHub {
+    owner = "librespeed";
+    repo = "speedtest-cli";
+    rev = "v${version}";
+    sha256 = "sha256-LFGlKYWUaHi/byoRPD6zsdr0U5r0zWxxRa2NJNB2yb8=";
+  };
+
+  vendorHash = "sha256-psZyyySpY06J+ji+9uHUtX7Ks1hzZC3zINszYP75NfQ=";
+
+  # Tests have additional requirements
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command line client for LibreSpeed";
+    homepage = "https://github.com/librespeed/speedtest-cli";
+    license = with licenses; [ lgpl3Only ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "speedtest-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lice/default.nix b/nixpkgs/pkgs/tools/misc/lice/default.nix
new file mode 100644
index 000000000000..f873907c51ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lice/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonPackage, fetchPypi , setuptools, pytestCheckHook }:
+
+buildPythonPackage rec {
+  pname = "lice";
+  version = "0.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0skyyirbidknfdzdvsjga8zb4ar6xpd5ilvz11dfm2a9yxh3d59d";
+  };
+
+  propagatedBuildInputs = [ setuptools ];
+
+  nativeCheckInputs = [ pytestCheckHook ];
+  meta = with lib; {
+    description = "Print license based on selection and user options";
+    homepage = "https://github.com/licenses/lice";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ swflint ];
+    platforms = platforms.unix;
+    mainProgram = "lice";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/license-cli/default.nix b/nixpkgs/pkgs/tools/misc/license-cli/default.nix
new file mode 100644
index 000000000000..bf3de443e302
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/license-cli/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromSourcehut
+, rustPlatform
+, installShellFiles
+, scdoc
+, makeWrapper
+
+# Script dependencies.
+, fzf
+, wl-clipboard
+, xclip
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "license-cli";
+  version = "3.1.0";
+
+  src = fetchFromSourcehut {
+    owner = "~zethra";
+    repo = "license";
+    rev = version;
+    hash = "sha256-OGS26mE5rjxlZOaBWhYc7C8aM3Lq2xX0f31LgckjJF8=";
+  };
+
+  cargoHash = "sha256-Zj9t/e6QhiOxU8mlVRBKEbviSTKXM4WQ3lqtoCcMbMI=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  preInstall = ''
+    ${scdoc}/bin/scdoc < doc/license.scd > license.1
+  '';
+
+  postInstall = ''
+    installShellCompletion completions/license.{bash,fish}
+    installShellCompletion --zsh completions/_license
+    installManPage ./license.1
+
+    install -Dm0755 ./scripts/set-license -t $out/bin
+    wrapProgram $out/bin/set-license \
+      --prefix PATH : "$out/bin" \
+      --prefix PATH : ${lib.makeBinPath [ fzf ]}
+
+    install -Dm0755 ./scripts/copy-header -t $out/bin
+    wrapProgram $out/bin/copy-header \
+      --prefix PATH : "$out/bin" \
+      --prefix PATH : ${lib.makeBinPath [ wl-clipboard xclip ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~zethra/license";
+    description = "Command-line tool to easily add license to your project";
+    license = licenses.mpl20;
+    mainProgram = "license";
+    maintainers = with maintainers; [ foo-dogsquared ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/license-generator/default.nix b/nixpkgs/pkgs/tools/misc/license-generator/default.nix
new file mode 100644
index 000000000000..2aa2235e7c3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/license-generator/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchCrate, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "license-generator";
+  version = "1.0.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-ijA/AqLeQ9/XLeCriWNUA6R3iKyq+QPDH5twSvqFmEA=";
+  };
+
+  cargoHash = "sha256-FfkCV4anPHElGGIOYDSzHam5ohVGpOgtu/nM0aw9HzU=";
+
+  meta = with lib; {
+    description = "Command-line tool for generating license files";
+    homepage = "https://github.com/azu/license-generator";
+    license = licenses.mit;
+    maintainers = with maintainers; [ loicreynier ];
+    mainProgram = "license-generator";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/licensor/default.nix b/nixpkgs/pkgs/tools/misc/licensor/default.nix
new file mode 100644
index 000000000000..2972eb8bbb61
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/licensor/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "licensor";
+  version = "unstable-2021-02-03";
+
+  src = fetchFromGitHub {
+    owner = "raftario";
+    repo = pname;
+    rev = "1897882a708ec6ed65a9569ae0e07d6ea576c652";
+    sha256 = "0x0lkfrj7jka0p6nx6i9syz0bnzya5z9np9cw09zm1c9njv9mm32";
+  };
+
+  cargoSha256 = "1h66d1brx441bg7vzbqdish4avgmc6h7rrkw2qf1siwmplwqqhw0";
+
+  # https://github.com/raftario/licensor/issues/67
+  postPatch = ''
+    sed "/Copyright (c) 2021/s/2021/$(date +%Y)/" -i tests/integration.rs
+  '';
+
+  meta = with lib; {
+    description = "Write licenses to stdout";
+    homepage = "https://github.com/raftario/licensor";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "licensor";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lifecycled/default.nix b/nixpkgs/pkgs/tools/misc/lifecycled/default.nix
new file mode 100644
index 000000000000..728424f8d89e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lifecycled/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+buildGoModule rec {
+  pname = "lifecycled";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "lifecycled";
+    rev = "v${version}";
+    sha256 = "sha256-zskN2T0+1xZPjppggeGpPFuQ8/AgPNyN77F33rDoghc=";
+  };
+
+  vendorHash = "sha256-q5wYKSLHRzL+UGn29kr8+mUupOPR1zohTscbzjMRCS0=";
+
+  postInstall = ''
+    mkdir -p $out/lib/systemd/system
+    substitute init/systemd/lifecycled.unit $out/lib/systemd/system/lifecycled.service \
+      --replace /usr/bin/lifecycled $out/bin/lifecycled
+  '';
+
+  meta = with lib; {
+    description = "A daemon for responding to AWS AutoScaling Lifecycle Hooks";
+    homepage = "https://github.com/buildkite/lifecycled/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cole-h grahamc ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/Cargo.lock b/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/Cargo.lock
new file mode 100644
index 000000000000..daaa1802698f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/Cargo.lock
@@ -0,0 +1,1212 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "anstream"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "bluez-async"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce7d4413c940e8e3cb6afc122d3f4a07096aca259d286781128683fc9f39d9b"
+dependencies = [
+ "async-trait",
+ "bitflags 2.4.0",
+ "bluez-generated",
+ "dbus",
+ "dbus-tokio",
+ "futures",
+ "itertools",
+ "log",
+ "serde",
+ "serde-xml-rs",
+ "thiserror",
+ "tokio",
+ "uuid",
+]
+
+[[package]]
+name = "bluez-generated"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d1c659dbc82f0b8ca75606c91a371e763589b7f6acf36858eeed0c705afe367"
+dependencies = [
+ "dbus",
+]
+
+[[package]]
+name = "btleplug"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1ad24f1a9171b691da81fd0a0ae6859ef471979a4d68372515bafc2f4586df1"
+dependencies = [
+ "async-trait",
+ "bitflags 1.3.2",
+ "bluez-async",
+ "cocoa",
+ "dashmap",
+ "dbus",
+ "futures",
+ "jni",
+ "jni-utils",
+ "libc",
+ "log",
+ "objc",
+ "once_cell",
+ "serde",
+ "serde_bytes",
+ "static_assertions",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "uuid",
+ "windows",
+]
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c8d502cbaec4595d2e7d5f61e318f05417bd2b66fdc3809498f0d3fdf0bea27"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap-verbosity-flag"
+version = "2.1.1"
+source = "git+https://github.com/ShayBoxs-Forks/clap-verbosity-flag.git#5807fd33f935a71ade25e2e6d5aa1b8727c8e63f"
+dependencies = [
+ "clap",
+ "tracing",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5891c7bc0edb3e1c2204fc5e94009affabeb1821c9e5fdc3959536c5c0bb984d"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9fd1a5729c4548118d7d70ff234a44868d00489a4b6597b0b020918a0e91a1a"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
+
+[[package]]
+name = "cocoa"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics",
+ "foreign-types 0.5.0",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.3.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core-graphics"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.5.0",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "libc",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "dbus"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
+dependencies = [
+ "futures-channel",
+ "futures-util",
+ "libc",
+ "libdbus-sys",
+ "winapi",
+]
+
+[[package]]
+name = "dbus-tokio"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "007688d459bc677131c063a3a77fb899526e17b7980f390b69644bdbc41fad13"
+dependencies = [
+ "dbus",
+ "libc",
+ "tokio",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared 0.1.1",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
+dependencies = [
+ "foreign-types-macros",
+ "foreign-types-shared 0.3.1",
+]
+
+[[package]]
+name = "foreign-types-macros"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "jni"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec"
+dependencies = [
+ "cesu8",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jni-utils"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "259e9f2c3ead61de911f147000660511f07ab00adeed1d84f5ac4d0386e7a6c4"
+dependencies = [
+ "dashmap",
+ "futures",
+ "jni",
+ "log",
+ "once_cell",
+ "static_assertions",
+ "uuid",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libdbus-sys"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "lighthouse"
+version = "1.1.1"
+dependencies = [
+ "btleplug",
+ "clap",
+ "clap-verbosity-flag",
+ "serde",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "uuid",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "object"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "serde"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-xml-rs"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb3aa78ecda1ebc9ec9847d5d3aba7d618823446a049ba2491940506da6e2782"
+dependencies = [
+ "log",
+ "serde",
+ "thiserror",
+ "xml-rs",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "2.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tokio"
+version = "1.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "nu-ansi-term",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47430998a7b5d499ccee752b41567bc3afc57e1327dc855b1a2aa44ce29b5fa1"
diff --git a/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/default.nix b/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/default.nix
new file mode 100644
index 000000000000..4ddd33ff1872
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, lib, rustPlatform, pkg-config, dbus }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "Lighthouse";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "ShayBox";
+    repo = pname;
+    rev = version;
+    sha256 = "0g0cs54j1vmcig5nc8sqgx30nfn2zjs40pvv30j5g9cyyszbzwkw";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "clap-verbosity-flag-2.1.1" = "1213bsb0bpvv6621j9zicjsqy05sv21gh6inrvszqwcmj6fxxc7j";
+    };
+  };
+
+  postPatch = ''
+    cp ${./Cargo.lock} Cargo.lock
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ dbus ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "VR Lighthouse power state management";
+    homepage = "https://github.com/ShayBox/Lighthouse";
+    license = licenses.mit;
+    maintainers = with maintainers; [ expipiplus1 bddvlpr ];
+    mainProgram = "lighthouse";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lilo/default.nix b/nixpkgs/pkgs/tools/misc/lilo/default.nix
new file mode 100644
index 000000000000..17b485ca8da6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lilo/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchurl, dev86, sharutils }:
+
+stdenv.mkDerivation rec {
+  pname = "lilo";
+  version = "24.2";
+  src = fetchurl {
+    url = "https://www.joonet.de/lilo/ftp/sources/${pname}-${version}.tar.gz";
+    hash = "sha256-4VjxneRWDJNevgUHwht5v/F2GLkjDYB2/oxf/5/b1bE=";
+  };
+  nativeBuildInputs = [ dev86 sharutils ];
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: identify.o:(.bss+0x0): multiple definition of `identify';
+  #     common.o:(.bss+0x160): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  makeFlags = [
+    "DESTDIR=${placeholder "out"}"
+    "SBIN_DIR=/bin"
+    "USRSBIN_DIR=/bin"
+    "MAN_DIR=/share/man"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.joonet.de/lilo/";
+    description = "Linux bootloader";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kaction ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/limitcpu/default.nix b/nixpkgs/pkgs/tools/misc/limitcpu/default.nix
new file mode 100644
index 000000000000..830eed9d94ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/limitcpu/default.nix
@@ -0,0 +1,28 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "limitcpu";
+  version = "3.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/limitcpu/cpulimit-${version}.tar.gz";
+    sha256 = "sha256-rS9BXrK72j6DqKLZGO9ekPUuvMb+5h6Uv5F7PoTrtJw=";
+  };
+
+  buildFlags = with stdenv; [ (
+    if isDarwin then "osx"
+    else if isFreeBSD then "freebsd"
+    else "cpulimit"
+  ) ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://limitcpu.sourceforge.net/";
+    description = "A tool to throttle the CPU usage of programs";
+    platforms = with platforms; linux ++ freebsd;
+    license = licenses.gpl2;
+    maintainers = [maintainers.rycee];
+    mainProgram = "cpulimit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lineselect/default.nix b/nixpkgs/pkgs/tools/misc/lineselect/default.nix
new file mode 100644
index 000000000000..a99908b2e70e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lineselect/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, makeBinaryWrapper
+, nodejs
+}:
+
+buildNpmPackage rec {
+  pname = "lineselect";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "chfritz";
+    repo = "lineselect";
+    rev = "v${version}";
+    hash = "sha256-dCmLD4Wjsdlta2xsFCMj1zWQr4HWCfcWsKVmrTND4Yw=";
+  };
+
+  npmDepsHash = "sha256-wBtswfXtJTI7um0HZQk1YygpSggZ4j0/7IBcJiQpOUY=";
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  postInstall = ''
+    makeWrapper ${lib.getExe nodejs} $out/bin/lineselect \
+      --set FORCE_COLOR 2 \
+      --add-flags $out/lib/node_modules/lineselect/dist/cli.js
+  '';
+
+  meta = with lib; {
+    description = "Shell utility to interactively select lines from stdin";
+    homepage = "https://github.com/chfritz/lineselect";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lineselect";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/linux-logo/default.nix b/nixpkgs/pkgs/tools/misc/linux-logo/default.nix
new file mode 100644
index 000000000000..ad7dd7227a90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/linux-logo/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gettext
+, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "linux_logo";
+  version = "6.01";
+
+  src = fetchFromGitHub {
+    owner = "deater";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-yBAxPwgKyFFIX0wuG7oG+FbEDpA5cPwyyJgWrFErJ7I=";
+  };
+
+  nativeBuildInputs = [ gettext which ];
+
+  meta = with lib; {
+    description = "Prints an ASCII logo and some system info";
+    homepage = "http://www.deater.net/weave/vmwprod/linux_logo";
+    changelog = "https://github.com/deater/linux_logo/blob/${src.rev}/CHANGES";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/linuxquota/default.nix b/nixpkgs/pkgs/tools/misc/linuxquota/default.nix
new file mode 100644
index 000000000000..b5fc42be82dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/linuxquota/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, e2fsprogs, openldap, pkg-config }:
+
+stdenv.mkDerivation rec {
+  version = "4.09";
+  pname = "quota";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/linuxquota/quota-${version}.tar.gz";
+    sha256 = "sha256-nNrKFUvJKvwxF/Dl9bMgjdX4RYOvHPBhw5uqCiuxQvk=";
+  };
+
+  outputs = [ "out" "dev" "doc" "man" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ e2fsprogs openldap ];
+
+  meta = with lib; {
+    description = "Tools to manage kernel-level quotas in Linux";
+    homepage = "https://sourceforge.net/projects/linuxquota/";
+    license = licenses.gpl2; # With some files being BSD as an exception
+    platforms = platforms.linux;
+    maintainers = [ maintainers.dezgeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lipl/Cargo.lock b/nixpkgs/pkgs/tools/misc/lipl/Cargo.lock
new file mode 100644
index 000000000000..f87ac4ead5c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lipl/Cargo.lock
@@ -0,0 +1,308 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "clap"
+version = "2.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "cmd_lib"
+version = "0.7.8"
+source = "git+https://github.com/rust-shell-script/rust_cmd_lib?rev=9f9cba4b36cdff5f7d7495d998923f1b378cb9c2#9f9cba4b36cdff5f7d7495d998923f1b378cb9c2"
+
+[[package]]
+name = "either"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "heck"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "itertools"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "linreg"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "lipl"
+version = "0.1.0"
+dependencies = [
+ "cmd_lib 0.7.8 (git+https://github.com/rust-shell-script/rust_cmd_lib?rev=9f9cba4b36cdff5f7d7495d998923f1b378cb9c2)",
+ "linreg 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "structopt 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "termion 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tui 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "log"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "numtoa"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "proc-macro-error"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "redox_termios"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "structopt"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "structopt-derive 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "termion"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tui"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cassowary 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "termion 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "vec_map"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
+"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
+"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+"checksum cassowary 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
+"checksum cmd_lib 0.7.8 (git+https://github.com/rust-shell-script/rust_cmd_lib?rev=9f9cba4b36cdff5f7d7495d998923f1b378cb9c2)" = "<none>"
+"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
+"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
+"checksum itertools 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "87fa75c9dea7b07be3138c49abbb83fd4bea199b5cdc76f9804458edc5da0d6e"
+"checksum libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "1a31a0627fdf1f6a39ec0dd577e101440b7db22672c0901fe00a9a6fbb5c24e8"
+"checksum linreg 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d85303c06c6c77a71a07c50c98e8fceda7ec120d6b2ee9e050876dc59e2e3dbe"
+"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
+"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4"
+"checksum numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
+"checksum proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aeccfe4d5d8ea175d5f0e4a2ad0637e0f4121d63bd99d356fb1f39ab2e7c6097"
+"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
+"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
+"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
+"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
+"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+"checksum structopt 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4f66a4c0ddf7aee4677995697366de0749b0139057342eccbb609b12d0affc"
+"checksum structopt-derive 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8fe0c13e476b4e21ff7f5c4ace3818b6d7bdc16897c31c73862471bc1663acae"
+"checksum syn 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0e7bedb3320d0f3035594b0b723c8a28d7d336a3eda3881db79e61d676fb644c"
+"checksum termion 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a8fb22f7cde82c8220e5aeacb3258ed7ce996142c77cba193f203515e26c330"
+"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+"checksum tui 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "73b422ff4986065d33272b587907654f918a3fe8702786a8110bf68dede0d8ee"
+"checksum unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1967f4cdfc355b37fd76d2a954fb2ed3871034eb4f26d60537d88795cfc332a9"
+"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
+"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
+"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
+"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
+"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/nixpkgs/pkgs/tools/misc/lipl/default.nix b/nixpkgs/pkgs/tools/misc/lipl/default.nix
new file mode 100644
index 000000000000..1f6b8437af30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lipl/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lipl";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "yxdunc";
+    repo = "lipl";
+    rev = "v${version}";
+    hash = "sha256-ZeYz9g06vMsOk3YDmy0I+8e6BtLfweXqVH5uRt+mtes=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "cmd_lib-0.7.8" = "sha256-FyJZkxhKwHyGEmeLZfcvLe1D6h7XY5tvsHbANQk+D+4=";
+    };
+  };
+
+  meta = with lib; {
+    description = "A command line tool to analyse the output over time of custom shell commands";
+    homepage = "https://github.com/yxdunc/lipl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lipl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/livedl/default.nix b/nixpkgs/pkgs/tools/misc/livedl/default.nix
new file mode 100644
index 000000000000..6db500695933
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/livedl/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub, stdenv }:
+
+buildGoModule rec {
+  pname = "livedl";
+  version = "unstable-2021-05-16";
+
+  src = fetchFromGitHub {
+    owner = "himananiito";
+    repo = pname;
+    rev = "a8720f1e358e5b0ade6fdeb8aacc00781e6cc504";
+    sha256 = "1zax215jp6sl47m8ahssyyrbzn96dh74srq9g61jc76sq10xg329";
+  };
+
+  modRoot = "src";
+
+  proxyVendor = true;
+  vendorHash = "sha256-C7lUusq/cWBCnA2wP9fzQglJCXvQyvFG4JY13H0cP6g=";
+
+  meta = with lib; {
+    description = "Command-line tool to download nicovideo.jp livestreams";
+    homepage = "https://github.com/himananiito/livedl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wakira ];
+    platforms = platforms.linux ++ platforms.darwin;
+    broken = stdenv.isDarwin; # build fails with go > 1.17
+    mainProgram = "livedl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lnav/0001-Forcefully-disable-docs-build.patch b/nixpkgs/pkgs/tools/misc/lnav/0001-Forcefully-disable-docs-build.patch
new file mode 100644
index 000000000000..afbec1d7e479
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lnav/0001-Forcefully-disable-docs-build.patch
@@ -0,0 +1,38 @@
+From 20c3fe76340981c43eeed16a5509480a0f5cb56d Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Fri, 6 Aug 2021 10:55:01 +0200
+Subject: [PATCH] Forcefully disable docs build
+
+This currently affects the following statement in `src/Makefile.am`
+only:
+
+    if !DISABLE_DOCUMENTATION
+    all-local: lnav
+            if test -w $(srcdir)/internals; then \
+                    env DUMP_INTERNALS_DIR=$(srcdir)/internals DUMP_CRASH=1 ./lnav Makefile; \
+                    mv $(srcdir)/internals/*.schema.json $(top_srcdir)/docs/schemas; \
+            fi
+    endif
+
+We cannot do this (even on non-cross builds) since `lnav` requires e.g.
+`/etc/nsswitch.conf` and other impurities here.
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index ce311fd8..e3c9ebe0 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -287,7 +287,7 @@ AS_IF([test $? -eq 0],
+ 
+ AM_CONDITIONAL(USE_INCLUDED_YAJL, test $HAVE_LOCAL_YAJL -eq 0)
+ AM_CONDITIONAL(HAVE_LIBCURL, test x"$LIBCURL" != x"")
+-AM_CONDITIONAL([DISABLE_DOCUMENTATION], [ test x"$cross_compiling" != x"no" ])
++AM_CONDITIONAL([DISABLE_DOCUMENTATION], [ true ])
+ 
+ AC_CONFIG_HEADERS([src/config.h])
+ AC_CONFIG_FILES([Makefile])
+-- 
+2.31.1
+
diff --git a/nixpkgs/pkgs/tools/misc/lnav/default.nix b/nixpkgs/pkgs/tools/misc/lnav/default.nix
new file mode 100644
index 000000000000..ffaea930b5d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lnav/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pcre2
+, sqlite
+, ncurses
+, readline
+, zlib
+, bzip2
+, autoconf
+, automake
+, curl
+, buildPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lnav";
+  version = "0.11.2";
+
+  src = fetchFromGitHub {
+    owner = "tstack";
+    repo = "lnav";
+    rev = "v${version}";
+    sha256 = "sha256-OuxxcXpdpSxrDdiUqRbEaXvCZBAcWvE4YwaMtLKSqCM=";
+  };
+
+  patches = [ ./0001-Forcefully-disable-docs-build.patch ];
+  postPatch = ''
+    substituteInPlace Makefile.am \
+      --replace "SUBDIRS = tools src test" "SUBDIRS = tools src"
+  '';
+
+  enableParallelBuilding = true;
+
+  strictDeps = true;
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [
+    autoconf
+    automake
+    zlib
+    curl.dev
+  ];
+  buildInputs = [
+    bzip2
+    ncurses
+    pcre2
+    readline
+    sqlite
+    curl
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/tstack/lnav";
+    description = "The Logfile Navigator";
+    longDescription = ''
+      The log file navigator, lnav, is an enhanced log file viewer that takes
+      advantage of any semantic information that can be gleaned from the files
+      being viewed, such as timestamps and log levels. Using this extra
+      semantic information, lnav can do things like interleaving messages from
+      different files, generate histograms of messages over time, and providing
+      hotkeys for navigating through the file. It is hoped that these features
+      will allow the user to quickly and efficiently zero in on problems.
+    '';
+    downloadPage = "https://github.com/tstack/lnav/releases";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dochang ];
+    platforms = platforms.unix;
+    mainProgram = "lnav";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/lnch/default.nix b/nixpkgs/pkgs/tools/misc/lnch/default.nix
new file mode 100644
index 000000000000..30759303efbd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lnch/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "lnch";
+  version = "unstable-2021-08-15";
+
+  src = fetchFromGitHub {
+    owner = "oem";
+    repo = pname;
+    rev = "56b5e256b46c002821bef3b9c1b6f68b9dbb4207";
+    sha256 = "sha256-Iro/FjPFMqulcK90MbludnOXkMEHW0QSCoQRL01/LDE";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/oem/lnch";
+    description = "Launches a process and moves it out of the process group";
+    license = licenses.mit;
+    mainProgram = "lnch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/loadlibrary/default.nix b/nixpkgs/pkgs/tools/misc/loadlibrary/default.nix
new file mode 100644
index 000000000000..f919facf21b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/loadlibrary/default.nix
@@ -0,0 +1,32 @@
+{ lib, cabextract, fetchFromGitHub, readline, stdenv_32bit }:
+
+# stdenv_32bit is needed because the program depends upon 32-bit libraries and does not have
+# support for 64-bit yet: it requires libc6-dev:i386, libreadline-dev:i386.
+
+stdenv_32bit.mkDerivation rec {
+  pname = "loadlibrary";
+  version = "20170525-${lib.strings.substring 0 7 rev}";
+  rev = "721b084c088d779075405b7f20c77c2578e2a961";
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "taviso";
+    repo = "loadlibrary";
+    sha256 = "01hb7wzfh1s5b8cvmrmr1gqknpq5zpzj9prq3wrpsgg129jpsjkb";
+  };
+
+  buildInputs = [ cabextract readline ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp mpclient $out/bin/
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/taviso/loadlibrary";
+    description = "Porting Windows Dynamic Link Libraries to Linux";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.eleanor ];
+    license = licenses.gpl2;
+    mainProgram = "mpclient";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/locate-dominating-file/default.nix b/nixpkgs/pkgs/tools/misc/locate-dominating-file/default.nix
new file mode 100644
index 000000000000..6d599440a8e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/locate-dominating-file/default.nix
@@ -0,0 +1,68 @@
+{ bats
+, bash
+, fetchFromGitHub
+, lib
+, resholve
+, coreutils
+, getopt
+}:
+let
+  version = "0.0.1";
+in
+resholve.mkDerivation {
+  pname = "locate-dominating-file";
+  inherit version;
+  src = fetchFromGitHub {
+    owner = "roman";
+    repo = "locate-dominating-file";
+    rev = "v${version}";
+    hash = "sha256-gwh6fAw7BV7VFIkQN02QIhK47uxpYheMk64UeLyp2IY=";
+  };
+
+  postPatch = ''
+    for file in $(find src tests -type f); do
+      patchShebangs "$file"
+    done
+  '';
+
+  buildInputs = [ getopt coreutils ];
+
+  checkInputs = [ (bats.withLibraries (p: [ p.bats-support p.bats-assert ])) ];
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+
+    bats -t tests
+
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp src/locate-dominating-file.sh $out/bin/locate-dominating-file
+
+    runHook postInstall
+  '';
+
+  solutions.default = {
+    scripts = [ "bin/locate-dominating-file" ];
+    interpreter = "${bash}/bin/bash";
+    inputs = [
+      coreutils
+      getopt
+    ];
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/roman/locate-dominating-file";
+    description = "Program that looks up in a directory hierarchy for a given filename";
+    license = licenses.mit;
+    maintainers = [ maintainers.roman ];
+    platforms = platforms.all;
+    mainProgram = "locate-dominating-file";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix b/nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix
new file mode 100644
index 000000000000..eec9564f0f5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, liblockfile }:
+
+stdenv.mkDerivation rec {
+  pname   = "lockfile-progs";
+  version = "0.1.19";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/l/${pname}/${pname}_${version}.tar.gz";
+    sha256 = "sha256-LFcEsByPR0+CkheA5Fkqknsr9qbXYWNUpsXXzVZkhX4=";
+  };
+
+  buildInputs = [ liblockfile ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isGNU (toString [
+    # Needed with GCC 12
+    "-Wno-error=format-overflow"
+  ]);
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin $out/man/man1
+    install -s bin/* $out/bin
+    install man/*.1 $out/man/man1
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Programs for locking and unlocking files and mailboxes";
+    homepage = "http://packages.debian.org/sid/lockfile-progs";
+    license = lib.licenses.gpl2Only;
+
+    maintainers = [ lib.maintainers.bluescreen303 ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/logstash/7.x.nix b/nixpkgs/pkgs/tools/misc/logstash/7.x.nix
new file mode 100644
index 000000000000..c7e21e0521d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/logstash/7.x.nix
@@ -0,0 +1,88 @@
+{ config
+, elk7Version
+, enableUnfree ? true
+, lib
+, stdenv
+, fetchurl
+, makeWrapper
+, nixosTests
+, jre
+}:
+
+let
+  info = lib.splitString "-" stdenv.hostPlatform.system;
+  arch = lib.elemAt info 0;
+  plat = lib.elemAt info 1;
+  hashes =
+    if enableUnfree
+    then {
+      x86_64-linux  = "sha512-ze0hJxUHCN52bOxUs5upDj64tIE58P2BTow2kaCo6HreRiF9rfTTzNkNr/hCmEgE+/oFbgSEuOQLz+6G373RDQ==";
+      x86_64-darwin = "sha512-FOFd8d+4UddSGorjuUWW/JbQ5fQH4LU1f1HJLmdbfnb8Q5L4GEveb2LmWNILU8/a85V4HGmD6lL8mCJqH9CULQ==";
+      aarch64-linux = "sha512-giYqW88/6iT3haXzJVn/+b7uxjYhHq4GERmiq3tMIvjxDyu7B6g+X7JneaTYxhpNdn6gOD/hfXgNv+hFRq6lgg==";
+    }
+    else {
+      x86_64-linux  = "sha512-OC9gx76k+RMdjqcDkrJCNbPYSQameyddaYMxUIB0foVxCmo6UvbdcwZGXRLPPn95in8rYOCjvPoBkmupiQw9xQ==";
+      x86_64-darwin = "sha512-1OEfEED/jjlT3Fd095Y5VYiWKnovytI3UYCCy1Rs3tEvkZPHYwqIQHfMQYeAvGgUci37ADwEDu8xrSQULHToLw==";
+      aarch64-linux = "sha512-QWW0AXOMNIXThxpUiRomvINm+917MvGrSDndrEw11IYYuvi0d0dckJiRytfnBbBNoOKpVhB68uOmfjIcZBNpWQ==";
+    };
+  this = stdenv.mkDerivation rec {
+    version = elk7Version;
+    pname = "logstash${lib.optionalString (!enableUnfree) "-oss"}";
+
+
+    src = fetchurl {
+      url = "https://artifacts.elastic.co/downloads/logstash/${pname}-${version}-${plat}-${arch}.tar.gz";
+      hash = hashes.${stdenv.hostPlatform.system} or (throw "Unknown architecture");
+    };
+
+    dontBuild = true;
+    dontPatchELF = true;
+    dontStrip = true;
+    dontPatchShebangs = true;
+
+    nativeBuildInputs = [
+      makeWrapper
+    ];
+
+    buildInputs = [
+      jre
+    ];
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out
+      cp -r {Gemfile*,modules,vendor,lib,bin,config,data,logstash-core,logstash-core-plugin-api} $out
+
+      patchShebangs $out/bin/logstash
+      patchShebangs $out/bin/logstash-plugin
+
+      wrapProgram $out/bin/logstash \
+         --set JAVA_HOME "${jre}"
+
+      wrapProgram $out/bin/logstash-plugin \
+         --set JAVA_HOME "${jre}"
+      runHook postInstall
+    '';
+
+    meta = with lib; {
+      description = "Logstash is a data pipeline that helps you process logs and other event data from a variety of systems";
+      homepage = "https://www.elastic.co/products/logstash";
+      sourceProvenance = with sourceTypes; [
+        fromSource
+        binaryBytecode  # source bundles dependencies as jars
+        binaryNativeCode  # bundled jruby includes native code
+      ];
+      license = if enableUnfree then licenses.elastic20 else licenses.asl20;
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ offline basvandijk ];
+    };
+    passthru.tests =
+      lib.optionalAttrs (config.allowUnfree && enableUnfree) (
+        assert this.drvPath == nixosTests.elk.unfree.ELK-7.elkPackages.logstash.drvPath;
+        {
+          elk = nixosTests.elk.unfree.ELK-7;
+        }
+      );
+  };
+in
+this
diff --git a/nixpkgs/pkgs/tools/misc/logstash/contrib.nix b/nixpkgs/pkgs/tools/misc/logstash/contrib.nix
new file mode 100644
index 000000000000..2d2f6272fddf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/logstash/contrib.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchzip }:
+
+# Note that plugins are supposed to be installed as:
+#   $path/logstash/{inputs,codecs,filters,outputs}/*.rb
+stdenv.mkDerivation rec {
+  version = "1.4.2";
+  pname = "logstash-contrib";
+
+  src = fetchzip {
+   url = "https://download.elasticsearch.org/logstash/logstash/logstash-contrib-${version}.tar.gz";
+   sha256 = "1yj8sf3b526gixh3c6zhgkfpg4f0c72p1lzhfhdx8b3lw7zjkj0k";
+  };
+
+  dontBuild    = true;
+  dontPatchELF = true;
+  dontStrip    = true;
+  dontPatchShebangs = true;
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/logstash
+    cp -r lib/* $out
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Community-maintained logstash plugins";
+    homepage    = "https://github.com/elasticsearch/logstash-contrib";
+    license     = lib.licenses.asl20;
+    platforms   = lib.platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/logtop/default.nix b/nixpkgs/pkgs/tools/misc/logtop/default.nix
new file mode 100644
index 000000000000..ff0b3cdac000
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/logtop/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, uthash, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "logtop";
+  version = "0.7";
+
+  src = fetchFromGitHub {
+    rev = "logtop-${version}";
+    owner = "JulienPalard";
+    repo  ="logtop";
+    sha256 = "1f8vk9gybldxvc0kwz38jxmwvzwangsvlfslpsx8zf04nvbkqi12";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ ncurses uthash ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postConfigure = ''
+    substituteInPlace Makefile --replace /usr ""
+  '';
+
+  meta = with lib; {
+    description = "Displays a real-time count of strings received from stdin";
+    longDescription = ''
+      logtop displays a real-time count of strings received from stdin.
+      It can be useful in some cases, like getting the IP flooding your
+      server or the top buzzing article of your blog
+    '';
+    license = licenses.bsd2;
+    homepage = "https://github.com/JulienPalard/logtop";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.starcraft66 ];
+    mainProgram = "logtop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lokalise2-cli/default.nix b/nixpkgs/pkgs/tools/misc/lokalise2-cli/default.nix
new file mode 100644
index 000000000000..43a6e50b5b36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lokalise2-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "lokalise2-cli";
+  version = "2.6.10";
+
+  src = fetchFromGitHub {
+    owner = "lokalise";
+    repo = "lokalise-cli-2-go";
+    rev = "v${version}";
+    sha256 = "sha256-jRytFOlyCp8uXOaAgfvjGGFX2IBLKGE5/cQnOed1elE=";
+  };
+
+  vendorHash = "sha256-P7AqMSV05UKeiUqWBxCOlLwMJcAtp0lpUC+eoE3JZFM=";
+
+  doCheck = false;
+
+  postInstall = ''
+    mv $out/bin/lokalise-cli-2-go $out/bin/lokalise2
+  '';
+
+  meta = with lib; {
+    description = "Translation platform for developers. Upload language files, translate, integrate via API";
+    homepage = "https://lokalise.com";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ timstott ];
+    mainProgram = "lokalise2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/Gemfile b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile
new file mode 100644
index 000000000000..ea1216e2405d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile
@@ -0,0 +1,2 @@
+source "https://rubygems.org"
+gem "lolcat"
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock
new file mode 100644
index 000000000000..d98402b0a599
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    lolcat (100.0.1)
+      manpages (~> 0.6.1)
+      optimist (~> 3.0.1)
+      paint (~> 2.2.0)
+    manpages (0.6.1)
+    optimist (3.0.1)
+    paint (2.2.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  lolcat
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/default.nix b/nixpkgs/pkgs/tools/misc/lolcat/default.nix
new file mode 100644
index 000000000000..a10c81416053
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "lolcat";
+  gemdir = ./.;
+  exes = [ "lolcat" ];
+
+  passthru.updateScript = bundlerUpdateScript "lolcat";
+
+  meta = with lib; {
+    description = "A rainbow version of cat";
+    homepage    = "https://github.com/busyloop/lolcat";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ StillerHarpo manveru nicknovitski ];
+    mainProgram = "lolcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/gemset.nix b/nixpkgs/pkgs/tools/misc/lolcat/gemset.nix
new file mode 100644
index 000000000000..9d71d400a69e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/gemset.nix
@@ -0,0 +1,43 @@
+{
+  lolcat = {
+    dependencies = ["manpages" "optimist" "paint"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13p8i08vdqfg2bqyjkl8jsp7gw8cf6r68i8plp9zqavlqadqlg4q";
+      type = "gem";
+    };
+    version = "100.0.1";
+  };
+  manpages = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11p6ilnfda6af15ks3xiz2pr0hkvdvadnk1xm4ahqlf84dld3fnd";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  optimist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vg2chy1cfmdj6c1gryl8zvjhhmb3plwgyh1jfnpq4fnfqv7asrk";
+      type = "gem";
+    };
+    version = "3.0.1";
+  };
+  paint = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "014b5rkbg6qri0cwkq972bfi93zvqdgswgvphjrgjl0pr6hywlkl";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/loop/default.nix b/nixpkgs/pkgs/tools/misc/loop/default.nix
new file mode 100644
index 000000000000..6fa819cd8366
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/loop/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage {
+  pname = "loop";
+  version = "unstable-2020-07-08";
+
+  src = fetchFromGitHub {
+    owner = "Miserlou";
+    repo  = "Loop";
+    rev   = "944df766ddecd7a0d67d91cc2dfda8c197179fb0";
+    sha256 = "0v61kahwk1kdy8pb40rjnzcxby42nh02nyg9jqqpx3vgdrpxlnix";
+  };
+
+  cargoSha256 = "0pk6hwmzs58vgbkvmlpa4s4cd29izp6xq17zaix5v2didbzr5ixi";
+
+  meta = with lib; {
+    description = "UNIX's missing `loop` command";
+    homepage = "https://github.com/Miserlou/Loop";
+    maintainers = with maintainers; [ koral ];
+    license = licenses.mit;
+    mainProgram = "loop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lorri/default.nix b/nixpkgs/pkgs/tools/misc/lorri/default.nix
new file mode 100644
index 000000000000..a2cd0ef600d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lorri/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, pkgs
+, rustPackages
+, fetchFromGitHub
+, rustPlatform
+, writers
+, nixosTests
+, CoreServices
+, Security
+}:
+
+let
+  # Run `eval $(nix-build -A lorri.updater)` after updating the revision!
+  # It will copy some required files if necessary.
+  # Also don’t forget to run `nix-build -A lorri.tests`
+  version = "1.6.0";
+  gitRev = "1.6.0";
+  sha256 = "sha256-peelMKv9GOTPdyb1iifzlFikeayTchqaYCgeXyR5EgM=";
+  cargoSha256 = "sha256-UFAmTYnCqsQxBnCm1zMu+BcWIZMuuxvpF7poLlzC6Kg=";
+
+in (rustPlatform.buildRustPackage rec {
+  pname = "lorri";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = pname;
+    rev = gitRev;
+    inherit sha256;
+  };
+
+  outputs = [ "out" "man" "doc" ];
+
+  inherit cargoSha256;
+  doCheck = false;
+
+  BUILD_REV_COUNT = src.revCount or 1;
+  RUN_TIME_CLOSURE = pkgs.callPackage ./runtime.nix { };
+
+  nativeBuildInputs = [ rustPackages.rustfmt ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices Security ];
+
+  # copy the docs to the $man and $doc outputs
+  postInstall = ''
+    install -Dm644 lorri.1 $man/share/man/man1/lorri.1
+    install -Dm644 -t $doc/share/doc/lorri/ \
+      README.md \
+      CONTRIBUTING.md \
+      LICENSE \
+      MAINTAINERS.md
+    cp -r contrib/ $doc/share/doc/lorri/contrib
+  '';
+
+  passthru = {
+    updater = writers.writeBash "copy-runtime-nix.sh" ''
+      set -euo pipefail
+      cp ${src}/nix/runtime.nix ${toString ./runtime.nix}
+      cp ${src}/nix/runtime-closure.nix.template ${toString ./runtime-closure.nix.template}
+    '';
+    tests = {
+      nixos = nixosTests.lorri;
+    };
+  };
+
+  meta = with lib; {
+    description = "Your project's nix-env";
+    homepage = "https://github.com/target/lorri";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ grahamc Profpatsch ];
+    mainProgram = "lorri";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template b/nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template
new file mode 100644
index 000000000000..2cb2ec4bbb9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template
@@ -0,0 +1,37 @@
+# Nix with sandboxing requires every path used at build time be
+# explicitly declared. If we simply passed in the paths, they
+# would be copied in as sources. Using builtins.storePath we're
+# able to tell Nix that, no, in fact, treat these not as sources
+# to copy, but instead of a regular store path.
+#
+# Include the explicit closure, too, otherwise we'll get mysterious
+# "file not found" errors due to the glibc interpreter being
+# missing.
+let
+  # Magic inspired by Nix's config.nix:
+  # https://github.com/NixOS/nix/blob/f9a2ea44867cd1dbb408bca4df0ced806137b7f7/corepkgs/config.nix.in#L23
+  #
+  # If the dependency is in the Nix store we're using, refer to
+  # it as a literal store path. If it isn't, refer to it "normally".
+  #
+  # This makes sandboxing happy when in a nix-build, and the
+  # evaluation happy when in a «cargo build».
+  tools_build_host = @tools_build_host@;
+
+  # Compare the stringified version of the tools_build_host Nix store
+  # path to the evaluator's stringified Nix store path. Otherwise,
+  # Nix will read the sources in to the /nix/store, and, well,
+  # you can only copy the /nix/store in to the /nix/store so many
+  # times before you run out of disk space.
+  dep = if ("${toString (dirOf tools_build_host)}" == "${toString builtins.storeDir}")
+    then (builtins.trace "using storePath"  builtins.storePath)
+    else (builtins.trace "using toString" toString) # assume we have no sandboxing
+    ;
+
+  tools = dep tools_build_host;
+
+in {
+  path = "${tools}/bin";
+  builder = "${tools}/bin/bash";
+  closure = import @runtime_closure_list@ { inherit dep; };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lorri/runtime.nix b/nixpkgs/pkgs/tools/misc/lorri/runtime.nix
new file mode 100644
index 000000000000..96b14b26e82c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lorri/runtime.nix
@@ -0,0 +1,38 @@
+{
+  # Plumbing tools:
+  closureInfo
+, runCommand
+, writeText
+, buildEnv
+, # Actual dependencies to propagate:
+  bash
+, coreutils
+}:
+let
+  tools = buildEnv {
+    name = "lorri-runtime-tools";
+    paths = [ coreutils bash ];
+  };
+
+  runtimeClosureInfo = closureInfo {
+    rootPaths = [ tools ];
+  };
+
+  closureToNix = runCommand "closure.nix" {}
+    ''
+      (
+        echo '{ dep, ... }: ['
+        sed -E 's/^(.*)$/    (dep \1)/' ${runtimeClosureInfo}/store-paths
+        echo ']'
+      ) > $out
+    '';
+
+  runtimeClosureInfoAsNix = runCommand "runtime-closure.nix" {
+    runtime_closure_list = closureToNix;
+    tools_build_host = tools;
+  }
+    ''
+      substituteAll ${./runtime-closure.nix.template} $out
+    '';
+in
+runtimeClosureInfoAsNix
diff --git a/nixpkgs/pkgs/tools/misc/lottieconverter/default.nix b/nixpkgs/pkgs/tools/misc/lottieconverter/default.nix
new file mode 100644
index 000000000000..557ac293aaa2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lottieconverter/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libpng
+, rlottie
+, giflib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "lottieconverter";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "sot-tech";
+    repo = finalAttrs.pname;
+    rev = "r${finalAttrs.version}";
+    hash = "sha256-oCFQsOQbWzmzClaTOeuEtGo7uXoKYtaJuSLLgqAQP1M=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libpng rlottie giflib ];
+
+  cmakeFlags = [
+    "-DSYSTEM_RL=1"
+    "-DSYSTEM_GL=1"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 lottieconverter "$out/bin/lottieconverter"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/sot-tech/LottieConverter/";
+    description = "Lottie converter utility";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ CRTified nickcao ];
+    mainProgram = "lottieconverter";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/lrzsz/default.nix b/nixpkgs/pkgs/tools/misc/lrzsz/default.nix
new file mode 100644
index 000000000000..867e492b33e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lrzsz/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, gettext, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "lrzsz";
+  version = "0.12.20";
+
+  src = fetchurl {
+    url = "https://ohse.de/uwe/releases/lrzsz-${version}.tar.gz";
+    sha256 = "1wcgfa9fsigf1gri74gq0pa7pyajk12m4z69x7ci9c6x9fqkd2y2";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2018-10195.patch";
+      url = "https://bugzilla.redhat.com/attachment.cgi?id=79507";
+      sha256 = "0jlh8w0cjaz6k56f0h3a0h4wgc51axmrdn3mdspk7apjfzqcvx3c";
+    })
+  ];
+
+  makeFlags = [ "AR:=$(AR)" ];
+
+  nativeBuildInputs = [ gettext ];
+
+  hardeningDisable = [ "format" ];
+
+  configureFlags = [ "--program-transform-name=s/^l//" ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=implicit-function-declaration -Wno-error=implicit-int";
+
+  meta = with lib; {
+    homepage = "https://ohse.de/uwe/software/lrzsz.html";
+    description = "Communication package providing the XMODEM, YMODEM ZMODEM file transfer protocols";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lsd/default.nix b/nixpkgs/pkgs/tools/misc/lsd/default.nix
new file mode 100644
index 000000000000..99dee32424fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lsd/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, darwin
+, pandoc
+, testers
+, lsd
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lsd";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "lsd-rs";
+    repo = "lsd";
+    rev = "v${version}";
+    hash = "sha256-syT+1LNdigUWkfJ/wkbY/kny2uW6qfpl7KmW1FjZKR8=";
+  };
+
+  cargoHash = "sha256-viLr76Bq9OkPMp+BoprQusMDgx59nbevVi4uxjZ+eZg=";
+
+  nativeBuildInputs = [ installShellFiles pandoc ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  postInstall = ''
+    pandoc --standalone --to man doc/lsd.md -o lsd.1
+    installManPage lsd.1
+
+    installShellCompletion --cmd lsd \
+      --bash $releaseDir/build/lsd-*/out/lsd.bash \
+      --fish $releaseDir/build/lsd-*/out/lsd.fish \
+      --zsh $releaseDir/build/lsd-*/out/_lsd
+  '';
+
+  # Found argument '--test-threads' which wasn't expected, or isn't valid in this context
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = lsd;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/lsd-rs/lsd";
+    description = "The next gen ls command";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ marsam zowoq SuperSandro2000 ];
+    mainProgram = "lsd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ltunify/default.nix b/nixpkgs/pkgs/tools/misc/ltunify/default.nix
new file mode 100644
index 000000000000..b85e3da4a5c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ltunify/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+# Although we copy in the udev rules here, you probably just want to use
+# logitech-udev-rules instead of adding this to services.udev.packages on NixOS
+
+stdenv.mkDerivation rec {
+  pname = "ltunify";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "Lekensteyn";
+    repo = "ltunify";
+    rev = "v${version}";
+    sha256 = "sha256-9avri/2H0zv65tkBsIi9yVxx3eVS9oCkVCCFdjXqSgI=";
+  };
+
+  makeFlags = [ "DESTDIR=$(out)" "bindir=/bin" ];
+
+  meta = with lib; {
+    description = "Tool for working with Logitech Unifying receivers and devices";
+    longDescription = ''
+      This tool requires either to be run with root/sudo or alternatively to have the udev rules files installed. On NixOS this can be achieved by setting `hardware.logitech.wireless.enable`.
+    '';
+    homepage = "https://lekensteyn.nl/logitech-unifying.html";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+    mainProgram = "ltunify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lwc/default.nix b/nixpkgs/pkgs/tools/misc/lwc/default.nix
new file mode 100644
index 000000000000..77e6d5033f31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lwc/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "lwc";
+  version = "unstable-2022-07-26";
+
+  src = fetchFromGitHub {
+    owner = "timdp";
+    repo = "lwc";
+    rev = "3330928c9d82200837350f85335f5e6c09f0658b";
+    hash = "sha256-HFuXA5Y274XtgqG9odDAg9SSCgUxprnojfGavnYW4LE=";
+  };
+
+  vendorHash = "sha256-av736cW0bPsGQV+XFL/q6p/9VhjOeDwkiK5DLRnRtUg=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${src.rev}"
+  ];
+
+  meta = with lib; {
+    description = "A live-updating version of the UNIX wc command";
+    homepage = "https://github.com/timdp/lwc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lwc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/macchina/default.nix b/nixpkgs/pkgs/tools/misc/macchina/default.nix
new file mode 100644
index 000000000000..3da4d9b07fbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/macchina/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "macchina";
+  version = "6.1.8";
+
+  src = fetchFromGitHub {
+    owner = "Macchina-CLI";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-MntHq5nphfjbO0Rx7v6WjsnabSMH5Ke3aR9/embG/rk=";
+  };
+
+  cargoHash = "sha256-w8WIpT8rUe7olB5kdpDyrId6D698AhcqzsfpOlutaHQ=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    darwin.apple_sdk.frameworks.DisplayServices
+  ];
+
+  postInstall = ''
+    installManPage doc/macchina.{1,7}
+  '';
+
+  meta = with lib; {
+    description = "A fast, minimal and customizable system information fetcher";
+    homepage = "https://github.com/Macchina-CLI/macchina";
+    changelog = "https://github.com/Macchina-CLI/macchina/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ _414owen figsoda ];
+    mainProgram = "macchina";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mailman-rss/default.nix b/nixpkgs/pkgs/tools/misc/mailman-rss/default.nix
new file mode 100644
index 000000000000..d71ee8795528
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mailman-rss/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchPypi, withTwitter ? false}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "mailman-rss";
+  version = "0.2.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1brrik70jyagxa9l0cfmlxvqpilwj1q655bphxnvjxyganxf4c00";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ python-dateutil future requests beautifulsoup4 ]
+    ++ lib.optional withTwitter python3Packages.twitter
+  ;
+
+  # No tests in Pypi Tarball
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Mailman archive -> rss converter";
+    homepage = "https://github.com/kyamagu/mailman-rss";
+    license = licenses.mit;
+    maintainers = with maintainers; [ samueldr ];
+    mainProgram = "mailman-rss";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/makebootfat/default.nix b/nixpkgs/pkgs/tools/misc/makebootfat/default.nix
new file mode 100644
index 000000000000..b2e93bb140ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/makebootfat/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "makebootfat";
+  version = "1.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/advancemame/makebootfat-${version}.tar.gz";
+    sha256 = "0v0g1xax0y6hmw2x10nfhchp9n7vqyvgc33gcxqax8jdq2pxm1q2";
+  };
+
+  meta = with lib; {
+    description = "Create bootable USB disks using the FAT filesystem and syslinux";
+    homepage = "http://advancemame.sourceforge.net/boot-readme.html";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ehmry ];
+    platforms = platforms.linux;
+    mainProgram = "makebootfat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/maker-panel/default.nix b/nixpkgs/pkgs/tools/misc/maker-panel/default.nix
new file mode 100644
index 000000000000..cbe618d406fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/maker-panel/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, go-md2man
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "maker-panel";
+  version = "0.12.4";
+
+  src = fetchFromGitHub {
+    owner = "twitchyliquid64";
+    repo = "maker-panel";
+    rev = version;
+    sha256 = "0dlsy0c46781sb652kp80pvga7pzx6xla64axir92fcgg8k803bi";
+  };
+
+  cargoSha256 = "1ar62dn0khlbm47chakrsrxd1y76gpq0sql4g9j7dqqrvkavgd7w";
+
+  nativeBuildInputs = [ go-md2man installShellFiles ];
+
+  postBuild = ''
+    go-md2man --in docs/spec-reference.md --out maker-panel.5
+  '';
+
+  postInstall = ''
+    installManPage maker-panel.5
+  '';
+
+  meta = with lib; {
+    description = "Make mechanical PCBs by combining shapes together";
+    homepage = "https://github.com/twitchyliquid64/maker-panel";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ twitchyliquid64 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/man-db/default.nix b/nixpkgs/pkgs/tools/misc/man-db/default.nix
new file mode 100644
index 000000000000..e5829a56a8b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/man-db/default.nix
@@ -0,0 +1,97 @@
+{ buildPackages
+, db
+, fetchurl
+, groff
+, gzip
+, lib
+, libiconv
+, libpipeline
+, makeWrapper
+, nixosTests
+, pkg-config
+, stdenv
+, zstd
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "man-db";
+  version = "2.12.0";
+
+  src = fetchurl {
+    url = "mirror://savannah/man-db/man-db-${version}.tar.xz";
+    hash = "sha256-QVpihKInZK0i/w9mcQ2FO+d5DdRRzXFDbj0lx02ZapU=";
+  };
+
+  outputs = [ "out" "doc" ];
+  outputMan = "out"; # users will want `man man` to work
+
+  strictDeps = true;
+  nativeBuildInputs = [ autoreconfHook groff makeWrapper pkg-config zstd ];
+  buildInputs = [ libpipeline db groff ]; # (Yes, 'groff' is both native and build input)
+  nativeCheckInputs = [ libiconv /* for 'iconv' binary */ ];
+
+  patches = [
+    ./systemwide-man-db-conf.patch
+  ];
+
+  postPatch = ''
+    # Remove all mandatory manpaths. Nixpkgs makes no requirements on
+    # these directories existing.
+    sed -i 's/^MANDATORY_MANPATH/# &/' src/man_db.conf.in
+
+    # Add Nix-related manpaths
+    echo "MANPATH_MAP	/nix/var/nix/profiles/default/bin	/nix/var/nix/profiles/default/share/man" >> src/man_db.conf.in
+
+    # Add mandb locations for the above
+    echo "MANDB_MAP	/nix/var/nix/profiles/default/share/man	/var/cache/man/nixpkgs" >> src/man_db.conf.in
+  '';
+
+  configureFlags = [
+    "--disable-setuid"
+    "--disable-cache-owner"
+    "--localstatedir=/var"
+    "--with-config-file=${placeholder "out"}/etc/man_db.conf"
+    "--with-systemdtmpfilesdir=${placeholder "out"}/lib/tmpfiles.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-pager=less"
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    "ac_cv_func__set_invalid_parameter_handler=no"
+    "ac_cv_func_posix_fadvise=no"
+    "ac_cv_func_mempcpy=no"
+  ];
+
+  preConfigure = ''
+    configureFlagsArray+=("--with-sections=1 n l 8 3 0 2 5 4 9 6 7")
+  '';
+
+  postInstall = ''
+    # apropos/whatis uses program name to decide whether to act like apropos or whatis
+    # (multi-call binary). `apropos` is actually just a symlink to whatis. So we need to
+    # make sure that we don't wrap symlinks (since that changes argv[0] to the -wrapped name)
+    find "$out/bin" -type f | while read file; do
+      wrapProgram "$file" \
+        --prefix PATH : "${lib.makeBinPath [ groff gzip zstd ]}"
+    done
+  '';
+
+  disallowedReferences = lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    buildPackages.groff
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = !stdenv.hostPlatform.isMusl /* iconv binary */;
+
+  passthru.tests = {
+    nixos = nixosTests.man;
+  };
+
+  meta = with lib; {
+    homepage = "http://man-db.nongnu.org";
+    description = "An implementation of the standard Unix documentation system accessed using the man command";
+    license = licenses.gpl2;
+    platforms = lib.platforms.unix;
+    mainProgram = "man";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch b/nixpkgs/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch
new file mode 100644
index 000000000000..2d4477776bb1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch
@@ -0,0 +1,39 @@
+commit 9089291006a4258c39c75a920ad536b61504251a
+Author: rnhmjoj <rnhmjoj@inventati.org>
+Date:   Fri May 1 19:32:15 2020 +0200
+
+    check for systemwide man_db.conf before the bundled one
+
+diff --git a/src/manp.c b/src/manp.c
+index 5441339..0bbf566 100644
+--- a/src/manp.c
++++ b/src/manp.c
+@@ -841,18 +841,24 @@ void read_config_file (bool optional)
+ 	}
+ 
+ 	if (getenv ("MAN_TEST_DISABLE_SYSTEM_CONFIG") == NULL) {
+-		config_file = fopen (CONFIG_FILE, "r");
++		const char *config_filepath;
++		if (access ("/etc/man_db.conf", F_OK) != -1) {
++			config_filepath = "/etc/man_db.conf";
++		} else {
++			config_filepath = CONFIG_FILE;
++		}
++		config_file = fopen (config_filepath, "r");
+ 		if (config_file == NULL) {
+ 			if (optional)
+ 				debug ("can't open %s; continuing anyway\n",
+-				       CONFIG_FILE);
++				       config_filepath);
+ 			else
+ 				error (FAIL, 0,
+ 				       _("can't open the manpath "
+ 					 "configuration file %s"),
+-				       CONFIG_FILE);
++				       config_filepath);
+ 		} else {
+-			debug ("From the config file %s:\n", CONFIG_FILE);
++			debug ("From the config file %s:\n", config_filepath);
+ 
+ 			add_to_dirlist (config_file, 0);
+ 			fclose (config_file);
diff --git a/nixpkgs/pkgs/tools/misc/mandoc/default.nix b/nixpkgs/pkgs/tools/misc/mandoc/default.nix
new file mode 100644
index 000000000000..e8553b7f9e58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mandoc/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchurl, zlib, perl, nixosTests }:
+
+let
+  # Name of an UTF-8 locale _always_ present at runtime, used for UTF-8 support
+  # (locale set by the user may differ). This would usually be C.UTF-8, but
+  # darwin has no such locale.
+  utf8Locale =
+    if stdenv.hostPlatform.isDarwin
+    then "en_US.UTF-8"
+    else "C.UTF-8";
+in
+
+stdenv.mkDerivation rec {
+  pname = "mandoc";
+  version = "1.14.6";
+
+  src = fetchurl {
+    url = "https://mandoc.bsd.lv/snapshots/mandoc-${version}.tar.gz";
+    sha256 = "8bf0d570f01e70a6e124884088870cbed7537f36328d512909eb10cd53179d9c";
+  };
+
+  buildInputs = [ zlib ];
+
+  configureLocal = ''
+    MANPATH_DEFAULT="/run/current-system/sw/share/man"
+    MANPATH_BASE="$MANPATH_DEFAULT"
+    OSNAME="Nixpkgs"
+    PREFIX="$out"
+    LD_OHASH="-lutil"
+    # Use symlinks instead of hardlinks (more commonly used in nixpkgs)
+    LN="ln -sf"
+    # nixpkgs doesn't have sbin, install makewhatis to bin
+    SBINDIR="$PREFIX/bin"
+    CC=${stdenv.cc.targetPrefix}cc
+    AR=${stdenv.cc.bintools.targetPrefix}ar
+    # Allow makewhatis(8) to follow symlinks from a manpath to the nix store
+    READ_ALLOWED_PATH=${builtins.storeDir}
+    # Bypass the locale(1)-based check for UTF-8 support since it causes trouble:
+    # * We only have meaningful locale(1) implementations for glibc and macOS
+    # * NetBSD's locale(1) (used for macOS) depends on mandoc
+    # * Sandbox and locales cause all kinds of trouble
+    # * build and host libc (and thus locale handling) may differ
+    HAVE_WCHAR=1
+    UTF8_LOCALE=${utf8Locale}
+  '';
+
+  preConfigure = ''
+    printf '%s' "$configureLocal" > configure.local
+  '';
+
+  doCheck = true;
+  checkTarget = "regress";
+  nativeCheckInputs = [ perl ];
+  preCheck = "patchShebangs --build regress/regress.pl";
+
+  passthru.tests = {
+    nixos = nixosTests.man;
+  };
+
+  meta = with lib; {
+    # check if we can execute binaries for the host platform on the build platform
+    # even though the platforms aren't the same. mandoc can't be cross compiled
+    # (easily) because of its configurePhase which executes compiled programs
+    # for gathering information about the host system. Consequently, we can only
+    # allow “native†cross such as pkgsLLVM and pkgsStatic.
+    # For a lack of a better predicate at the moment, we compare the platforms'
+    # system tuples. See also:
+    # * https://github.com/NixOS/nixpkgs/pull/140271
+    # * https://github.com/NixOS/nixpkgs/issues/61414
+    # We need to use broken instead of, say a top level assert, to keep splicing
+    # working.
+    broken = stdenv.buildPlatform.system != stdenv.hostPlatform.system;
+
+    homepage = "https://mandoc.bsd.lv/";
+    description = "suite of tools compiling mdoc and man";
+    downloadPage = "http://mandoc.bsd.lv/snapshots/";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bb010g ramkromberg sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mandown/default.nix b/nixpkgs/pkgs/tools/misc/mandown/default.nix
new file mode 100644
index 000000000000..308605e1172f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mandown/default.nix
@@ -0,0 +1,21 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mandown";
+  version = "0.1.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-8a4sImsjw+lzeVK4V74VpIKDcAhMR1bOmJYVWzfWEfc=";
+  };
+
+  cargoHash = "sha256-Wf1+dxwgPZ4CHpas+3P6n6kKDIISbnfI01+XksjxQlQ=";
+
+  meta = with lib; {
+    description = "Markdown to groff (man page) converter";
+    homepage = "https://gitlab.com/kornelski/mandown";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ ];
+    mainProgram = "mandown";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/manga-cli/default.nix b/nixpkgs/pkgs/tools/misc/manga-cli/default.nix
new file mode 100644
index 000000000000..65d45cf60e3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/manga-cli/default.nix
@@ -0,0 +1,40 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+, makeWrapper
+, img2pdf
+, zathura
+}:
+
+stdenvNoCC.mkDerivation {
+  pname = "manga-cli";
+  version = "unstable-2022-04-11";
+
+  src = fetchFromGitHub {
+    owner = "7USTIN";
+    repo = "manga-cli";
+    rev = "a69fe935341eaf96618a6b2064d4dcb36c8690b5";
+    sha256 = "sha256-AnpOEgOBt2a9jtPNvfBnETGtc5Q1WBmSRFDvQB7uBE4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 manga-cli $out/bin/manga-cli
+
+    wrapProgram $out/bin/manga-cli \
+      --prefix PATH : ${lib.makeBinPath [ img2pdf zathura ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/7USTIN/manga-cli";
+    description = "Bash script for reading mangas via the terminal by scraping manganato";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ baitinq ];
+    mainProgram = "manga-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/map/default.nix b/nixpkgs/pkgs/tools/misc/map/default.nix
new file mode 100644
index 000000000000..b6049904dc62
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/map/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "map";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "soveran";
+    repo = "map";
+    rev = version;
+    sha256 = "sha256-yGzmhZwv1qKy0JNcSzqL996APQO8OGWQ1GBkEkKTOXA=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    mkdir -p "$out/share/doc/${pname}"
+    cp README* LICENSE "$out/share/doc/${pname}"
+  '';
+
+  doCheck = true;
+
+  checkPhase = "./test/tests.sh";
+
+  meta = with lib; {
+    description = "Map lines from stdin to commands";
+    homepage = "https://github.com/soveran/map";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ pogobanane ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mapcidr/default.nix b/nixpkgs/pkgs/tools/misc/mapcidr/default.nix
new file mode 100644
index 000000000000..6bb2f43677b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mapcidr/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "mapcidr";
+  version = "1.1.16";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-O0HVlrLOz4+hxhf/BTSZs0qDCbYokbzmg5KbzUD1UHg=";
+  };
+
+  vendorHash = "sha256-j/3Z2KxbybJoE6/PXkwMLivzmTnZSi7tgO8IQKCoaEQ=";
+
+  modRoot = ".";
+  subPackages = [
+    "cmd/mapcidr"
+  ];
+
+  meta = with lib; {
+    description = "Small utility program to perform multiple operations for a given subnet/CIDR ranges";
+    longDescription = ''
+      mapCIDR is developed to ease load distribution for mass scanning
+      operations, it can be used both as a library and as independent CLI tool.
+    '';
+    homepage = "https://github.com/projectdiscovery/mapcidr";
+    changelog = "https://github.com/projectdiscovery/mapcidr/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hanemile ];
+    mainProgram = "mapcidr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/markdown-anki-decks/default.nix b/nixpkgs/pkgs/tools/misc/markdown-anki-decks/default.nix
new file mode 100644
index 000000000000..082bdf5a5f98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/markdown-anki-decks/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "markdown-anki-decks";
+  version = "1.1.1";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-SvKjjE629OwxWsPo2egGf2K6GzlWAYYStarHhA4Ex0w=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    genanki
+    markdown
+    python-frontmatter
+    typer
+  ] ++ typer.optional-dependencies.all;
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'typer = "^0.4.0"' 'typer = "*"'
+  '';
+
+  # No tests available on Pypi and there is only a failing version assertion test in the repo.
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "markdown_anki_decks"
+  ];
+
+  meta = with lib; {
+    description = "Tool to convert Markdown files into Anki Decks";
+    homepage = "https://github.com/lukesmurray/markdown-anki-decks";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    mainProgram = "mdankideck";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/marlin-calc/default.nix b/nixpkgs/pkgs/tools/misc/marlin-calc/default.nix
new file mode 100644
index 000000000000..dc8ff4221009
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/marlin-calc/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "marlin-calc";
+  version = "2019-10-17";
+
+  src = fetchFromGitHub {
+    owner = "eyal0";
+    repo = "Marlin";
+    rev = "3d5a5c86bea35a2a169eb56c70128bf2d070feef";
+    sha256 = "14sqajm361gnrcqv84g7kbmyqm8pppbhqsabszc4j2cn7vbwkdg5";
+  };
+
+  postPatch = ''
+    # missing header for gcc >= 11
+    sed -i '1i#include <limits>' Marlin/src/module/calc.cpp
+  '';
+
+  buildPhase = ''
+    cd Marlin/src
+    c++ module/planner.cpp module/calc.cpp feature/fwretract.cpp \
+      -O2 -Wall -std=gnu++11 -o marlin-calc
+  '';
+
+  installPhase = ''
+    install -Dm0755 {,$out/bin/}marlin-calc
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/eyal0/Marlin";
+    description = "Marlin 3D printer timing simulator";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/marlin-calc.x86_64-darwin
+    mainProgram = "marlin-calc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/massren/default.nix b/nixpkgs/pkgs/tools/misc/massren/default.nix
new file mode 100644
index 000000000000..4ca386c1374a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/massren/default.nix
@@ -0,0 +1,45 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "massren";
+  version = "1.5.6";
+
+  src = fetchFromGitHub {
+    owner = "laurent22";
+    repo = "massren";
+    rev = "v${version}";
+    hash = "sha256-17y+vmspvZKKRRaEwzP3Zya4r/z+2aSGG6oNZiA8D64=";
+  };
+
+  vendorHash = null;
+
+  patches = [
+    # Add Go Modules support
+    (fetchpatch {
+      url = "https://github.com/laurent22/massren/commit/83df215b6e112d1ec375b08d8c44dadc5107155d.patch";
+      hash = "sha256-FMTmUrv6zGq11vexUirAuK3H6r78RtoipqyWoh+pzrs=";
+    })
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  preCheck =
+    let
+      skippedTests = [
+        # Possible error about github.com/mattn/go-sqlite3
+        "Test_guessEditorCommand"
+        "Test_processFileActions"
+      ];
+    in
+    ''
+      buildFlagsArray+=("-run" "[^(${builtins.concatStringsSep "|" skippedTests})]")
+    '';
+
+  meta = with lib; {
+    description = "Easily rename multiple files using your text editor";
+    license = licenses.mit;
+    homepage = "https://github.com/laurent22/massren";
+    maintainers = with maintainers; [ andrew-d ];
+    mainProgram = "massren";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mastotool/default.nix b/nixpkgs/pkgs/tools/misc/mastotool/default.nix
new file mode 100644
index 000000000000..a75f97c4a6ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mastotool/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "mastotool";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "muesli";
+    repo = "mastotool";
+    rev = "v${version}";
+    hash = "sha256-KmYUt2WXLY6i17dZ+o5HOTyMwbQnynY7IT43LIEN3B0=";
+  };
+
+  vendorHash = "sha256-uQgLwH8Z8rBfyKHMm2JHO+H1gsHK25+c34bOnMcmquA=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A collection of command-line tools to work with your Mastodon account";
+    homepage = "https://github.com/muesli/mastotool";
+    changelog = "https://github.com/muesli/mastotool/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "mastotool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mathpix-snipping-tool/default.nix b/nixpkgs/pkgs/tools/misc/mathpix-snipping-tool/default.nix
new file mode 100644
index 000000000000..2a3e45dd6367
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mathpix-snipping-tool/default.nix
@@ -0,0 +1,32 @@
+{ appimageTools, lib, fetchurl }:
+let
+  pname = "mathpix-snipping-tool";
+  version = "03.00.0072";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://download.mathpix.com/linux/Mathpix_Snipping_Tool-x86_64.v${version}.AppImage";
+    sha256 = "1igg8wnshmg9f23qqw1gqb85h1aa3461c1n7dmgw6sn4lrrrh5ms";
+  };
+
+  appimageContents = appimageTools.extract { inherit name src; };
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "OCR tool to convert pictures to LaTeX";
+    homepage = "https://mathpix.com/";
+    license = licenses.unfree;
+    maintainers = [ maintainers.hiro98 ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "mathpix-snipping-tool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mbuffer/default.nix b/nixpkgs/pkgs/tools/misc/mbuffer/default.nix
new file mode 100644
index 000000000000..45510dafa8cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mbuffer/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchurl
+, openssl
+, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mbuffer";
+  version = "20240107";
+
+  src = fetchurl {
+    url = "http://www.maier-komor.de/software/mbuffer/mbuffer-${version}.tgz";
+    sha256 = "sha256-14YG4X3ZAmpTI21ezAenAgLSZC0X49kHRxzbWKBFiBQ=";
+  };
+
+  buildInputs = [
+    openssl
+  ];
+  nativeBuildInputs = [
+    which
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description  = "A tool for buffering data streams with a large set of unique features";
+    homepage = "https://www.maier-komor.de/mbuffer.html";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ tokudan ];
+    platforms = platforms.linux; # Maybe other non-darwin Unix
+    mainProgram = "mbuffer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mcfly/default.nix b/nixpkgs/pkgs/tools/misc/mcfly/default.nix
new file mode 100644
index 000000000000..675639a03294
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcfly/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mcfly";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "cantino";
+    repo = "mcfly";
+    rev = "v${version}";
+    hash = "sha256-beoXLTy3XikdZBS0Lh3cugHflNJ51PbqsCE3xtCHpj0=";
+  };
+
+  postPatch = ''
+    substituteInPlace mcfly.bash --replace '$(command which mcfly)' '${placeholder "out"}/bin/mcfly'
+    substituteInPlace mcfly.zsh  --replace '$(command which mcfly)' '${placeholder "out"}/bin/mcfly'
+    substituteInPlace mcfly.fish --replace '(command which mcfly)'  '${placeholder "out"}/bin/mcfly'
+  '';
+
+  cargoHash = "sha256-wWYpDU6oXT+sDCzX8VWJ6GfNPOi7T02LK0JKcWHFGi8=";
+
+  meta = with lib; {
+    homepage = "https://github.com/cantino/mcfly";
+    description = "An upgraded ctrl-r where history results make sense for what you're working on right now";
+    changelog = "https://github.com/cantino/mcfly/raw/v${version}/CHANGELOG.txt";
+    license = licenses.mit;
+    maintainers = [ maintainers.melkor333 ];
+    mainProgram = "mcfly";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/default.nix b/nixpkgs/pkgs/tools/misc/mcrypt/default.nix
new file mode 100644
index 000000000000..c5013eb46a04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, libmcrypt, libmhash }:
+
+stdenv.mkDerivation rec {
+  version = "2.6.8";
+  pname = "mcrypt";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/mcrypt/MCrypt/${version}/${pname}-${version}.tar.gz";
+    sha256 = "5145aa844e54cca89ddab6fb7dd9e5952811d8d787c4f4bf27eb261e6c182098";
+  };
+
+  patches = [
+    ./format-string_CVE-2012-4426.patch
+    ./overflow_CVE-2012-4409.patch
+    ./segv.patch
+    ./sprintf_CVE-2012-4527.patch
+    ./malloc_to_stdlib.patch
+  ];
+
+  buildInputs = [ libmcrypt libmhash ];
+
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_CFLAGS_COMPILE = "-Wno-implicit-function-declaration";
+  };
+
+  meta = {
+    description = "Replacement for old UNIX crypt(1)";
+    longDescription = ''
+      mcrypt, and the accompanying libmcrypt, are intended to be replacements
+      for the old Unix crypt, except that they are under the GPL and support an
+      ever-wider range of algorithms and modes.
+    '';
+    homepage = "https://mcrypt.sourceforge.net";
+    license = lib.licenses.gpl3Only;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.qknight ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/format-string_CVE-2012-4426.patch b/nixpkgs/pkgs/tools/misc/mcrypt/format-string_CVE-2012-4426.patch
new file mode 100644
index 000000000000..322ab473811f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/format-string_CVE-2012-4426.patch
@@ -0,0 +1,31 @@
+--- mcrypt-2.6.8/src/errors.c
++++ mcrypt-2.6.8/src/errors.c
+@@ -25,24 +25,24 @@
+
+ void err_quit(char *errmsg)
+ {
+-	fprintf(stderr, errmsg);
++	fprintf(stderr, "%s", errmsg);
+ 	exit(-1);
+ }
+
+ void err_warn(char *errmsg)
+ {
+ 	if (quiet <= 1)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
+
+ void err_info(char *errmsg)
+ {
+ 	if (quiet == 0)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
+
+ void err_crit(char *errmsg)
+ {
+ 	if (quiet <= 2)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch b/nixpkgs/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch
new file mode 100755
index 000000000000..6bead60dc56b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch
@@ -0,0 +1,26 @@
+From e295844e8ef5c13487996ab700e5f12a7fadb1a6 Mon Sep 17 00:00:00 2001
+From: Private <private@private.priv>
+Date: Wed, 30 Dec 2020 16:06:46 -0800
+Subject: [PATCH] malloc.h to stdlib.h in rfc2440.c
+
+The malloc.h is deprecated and should not be used
+---
+ src/rfc2440.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/rfc2440.c b/src/rfc2440.c
+index 5a1f296..4d6a5db 100644
+--- a/src/rfc2440.c
++++ b/src/rfc2440.c
+@@ -23,7 +23,7 @@
+ #include <zlib.h>
+ #endif
+ #include <stdio.h>
+-#include <malloc.h>
++#include <stdlib.h>
+ 
+ #include "xmalloc.h"
+ #include "keys.h"
+-- 
+2.13.5
+
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/overflow_CVE-2012-4409.patch b/nixpkgs/pkgs/tools/misc/mcrypt/overflow_CVE-2012-4409.patch
new file mode 100644
index 000000000000..bf747a58266a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/overflow_CVE-2012-4409.patch
@@ -0,0 +1,24 @@
+From 3efb40e17ce4f76717ae17a1ce1e1f747ddf59fd Mon Sep 17 00:00:00 2001
+From: Alon Bar-Lev <alon.barlev@gmail.com>
+Date: Sat, 22 Dec 2012 22:37:06 +0200
+Subject: [PATCH] cleanup: buffer overflow
+
+---
+ mcrypt-2.6.8/src/extra.c |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/mcrypt-2.6.8/src/extra.c b/mcrypt-2.6.8/src/extra.c
+index 3082f82..c7a1ac0 100644
+--- a/src/extra.c
++++ b/src/extra.c
+@@ -241,6 +241,8 @@ int check_file_head(FILE * fstream, char *algorithm, char *mode,
+ 		if (m_getbit(6, flags) == 1) { /* if the salt bit is set */
+ 			if (m_getbit(0, sflag) != 0) { /* if the first bit is set */
+ 				*salt_size = m_setbit(0, sflag, 0);
++				if (*salt_size > sizeof(tmp_buf))
++					err_quit(_("Salt is too long\n"));
+ 				if (*salt_size > 0) {
+ 					fread(tmp_buf, 1, *salt_size,
+ 					      fstream);
+--
+1.7.8.6
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/segv.patch b/nixpkgs/pkgs/tools/misc/mcrypt/segv.patch
new file mode 100644
index 000000000000..6796163418f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/segv.patch
@@ -0,0 +1,39 @@
+From 5bee29fae8f0e936ad4c957aef6035d09532a57a Mon Sep 17 00:00:00 2001
+From: Alon Bar-Lev <alon.barlev@gmail.com>
+Date: Sat, 22 Dec 2012 22:04:27 +0200
+Subject: [PATCH] cleanup: fixup segv on buffer access
+
+use exact buffer size instead of guess.
+
+do not copy out of source buffer.
+
+Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
+---
+ mcrypt-2.6.8/src/rfc2440.c |    5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/mcrypt-2.6.8/src/rfc2440.c b/mcrypt-2.6.8/src/rfc2440.c
+index 5a1f296..929b9ab 100644
+--- a/src/rfc2440.c
++++ b/src/rfc2440.c
+@@ -497,7 +497,7 @@ plaintext_encode(const USTRING dat)
+     time_t t;
+
+     assert(dat->len > 0);
+-    result = make_ustring( NULL,  2 * dat->len); /* xxx */
++    result = make_ustring( NULL,  dat->len + 12); /* xxx */
+     newdat = (USTRING)dat;
+     result->d[pos++] = (0x80 | 0x40 | PKT_PLAINTEXT);
+
+@@ -810,7 +810,8 @@ encrypted_encode(const USTRING pt, const DEK *dek)
+     _mcrypt_encrypt(dek->hd, rndpref, dek->blocklen + 2, NULL, 0);
+     _mcrypt_sync(dek->hd, rndpref, dek->blocklen);
+
+-    ct = make_ustring( rndpref,   2 * pt->len); /* xxx */
++    ct = make_ustring( NULL, dek->blocklen + 2 + pt->len + 12); /* xxx */
++    memcpy(ct->d, rndpref, dek->blocklen + 2);
+     pos = dek->blocklen + 2;
+
+     _mcrypt_encrypt(dek->hd, ct->d + pos, pt->len, pt->d, pt->len);
+--
+1.7.8.6
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/sprintf_CVE-2012-4527.patch b/nixpkgs/pkgs/tools/misc/mcrypt/sprintf_CVE-2012-4527.patch
new file mode 100644
index 000000000000..1c9ade807778
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/sprintf_CVE-2012-4527.patch
@@ -0,0 +1,108 @@
+Description: [CVE-2012-4527] Stack-based buffer overflow with long file names
+ .
+ A buffer overflow in mcrypt version 2.6.8 and earlier due to long filenames.
+ If a user were tricked into attempting to encrypt/decrypt specially crafted
+ long filename(s), this flaw would cause a stack-based buffer overflow that
+ could potentially lead to arbitrary code execution.
+ .
+ Note that this is caught by FORTIFY_SOURCE, which makes this a crash-only
+ bug on wheezy.
+Author: Attila Bogar, Jean-Michel Vourgère <jmv_deb@nirgal.com>
+Origin: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-4527
+Bug: CVE-2012-4527
+Bug-Debian: http://bugs.debian.org/690924
+Forwarded: no
+Last-Update: 2012-11-01
+Index: mcrypt-2.6.8/src/mcrypt.c
+===================================================================
+--- mcrypt-2.6.8.orig/src/mcrypt.c
++++ mcrypt-2.6.8/src/mcrypt.c
+@@ -41,4 +41,6 @@
+
++/* Temporary error message can contain one file name and 1k of text */
++#define ERRWIDTH ((PATH_MAX)+1024)
+-char tmperr[128];
++char tmperr[ERRWIDTH];
+ unsigned int stream_flag = FALSE;
+ char *keymode = NULL;
+ char *mode = NULL;
+@@ -482,7 +485,7 @@
+ #ifdef HAVE_STAT
+       if (stream_flag == FALSE) {
+ 	 if (is_normal_file(file[i]) == FALSE) {
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: %s is not a regular file. Skipping...\n"),
+ 		    program_name, file[i]);
+@@ -501,7 +504,7 @@
+ 	    dinfile = file[i];
+ 	 if ((isatty(fileno((FILE *) (stdin))) == 1)
+ 	     && (stream_flag == TRUE) && (force == 0)) {	/* not a tty */
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: Encrypted data will not be read from a terminal.\n"),
+ 		    program_name);
+@@ -520,7 +523,7 @@
+ 	    einfile = file[i];
+ 	 if ((isatty(fileno((FILE *) (stdout))) == 1)
+ 	     && (stream_flag == TRUE) && (force == 0)) {	/* not a tty */
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: Encrypted data will not be written to a terminal.\n"),
+ 		    program_name);
+@@ -544,7 +547,7 @@
+ 	    strcpy(outfile, einfile);
+ 	    /* if file has already the .nc ignore it */
+ 	    if (strstr(outfile, ".nc") != NULL) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("%s: file %s has the .nc suffix... skipping...\n"),
+ 		       program_name, outfile);
+@@ -590,10 +593,10 @@
+
+ 	 if (x == 0) {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr, _("File %s was decrypted.\n"), dinfile);
++	       snprintf(tmperr, ERRWIDTH, _("File %s was decrypted.\n"), dinfile);
+ 	       err_warn(tmperr);
+ 	    } else {
+-	       sprintf(tmperr, _("Stdin was decrypted.\n"));
++	       snprintf(tmperr, ERRWIDTH, _("Stdin was decrypted.\n"));
+ 	       err_warn(tmperr);
+ 	    }
+ #ifdef HAVE_STAT
+@@ -610,7 +613,7 @@
+
+ 	 } else {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("File %s was NOT decrypted successfully.\n"),
+ 		       dinfile);
+@@ -636,10 +639,10 @@
+
+ 	 if (x == 0) {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr, _("File %s was encrypted.\n"), einfile);
++	       snprintf(tmperr, ERRWIDTH, _("File %s was encrypted.\n"), einfile);
+ 	       err_warn(tmperr);
+ 	    } else {
+-	       sprintf(tmperr, _("Stdin was encrypted.\n"));
++	       snprintf(tmperr, ERRWIDTH, _("Stdin was encrypted.\n"));
+ 	       err_warn(tmperr);
+ 	    }
+ #ifdef HAVE_STAT
+@@ -655,7 +658,7 @@
+
+ 	 } else {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("File %s was NOT encrypted successfully.\n"),
+ 		       einfile);
diff --git a/nixpkgs/pkgs/tools/misc/mdbtools/default.nix b/nixpkgs/pkgs/tools/misc/mdbtools/default.nix
new file mode 100644
index 000000000000..327b58d8d78b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mdbtools/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchFromGitHub, glib, readline
+, bison, flex, pkg-config, autoreconfHook
+, txt2man, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mdbtools";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mdbtools";
+    repo = "mdbtools";
+    rev = "v${version}";
+    sha256 = "sha256-e9rgTWu8cwuccpp/wAfas1ZeQPTpGcgE6YjLz7KRnhw=";
+  };
+
+  configureFlags = [ "--disable-scrollkeeper" ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=unused-but-set-variable";
+
+  nativeBuildInputs = [
+    pkg-config bison flex autoreconfHook txt2man which
+  ];
+
+  buildInputs = [ glib readline ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = ".mdb (MS Access) format tools";
+    license = with licenses; [ gpl2 lgpl2 ];
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mdr/default.nix b/nixpkgs/pkgs/tools/misc/mdr/default.nix
new file mode 100644
index 000000000000..b33c51c99ca0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mdr/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "mdr";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "MichaelMure";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ibM3303pXnseAFP9qFTOzj0G/SxRPX+UeRfbJ+MCABk=";
+  };
+
+  vendorHash = "sha256-5jzU4EybEGKoEXCFhnu7z4tFRS9fgf2wJXhkvigRM0E=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.GitCommit=${src.rev}"
+    "-X main.GitLastTag=${version}"
+    "-X main.GitExactTag=${version}"
+  ];
+
+  meta = with lib; {
+    description = "MarkDown Renderer for the terminal";
+    homepage = "https://github.com/MichaelMure/mdr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "mdr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mdslides/default.nix b/nixpkgs/pkgs/tools/misc/mdslides/default.nix
new file mode 100644
index 000000000000..f329d02237a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mdslides/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "mdslides";
+  version = "unstable-2022-12-15";
+
+  src = fetchFromGitHub {
+    owner  = "dadoomer";
+    repo   = "markdown-slides";
+    rev = "fd27dd09cf90f00093a393338e08953c8d65d68e";
+    sha256 = "sha256-31ALsy1P/vfI+H6Onmg4TXLeKbVAQ1FlnFs4k6ZOgHQ=";
+  };
+
+  doCheck = false;
+
+  meta = with lib; {
+    longDescription = "Using markdown, write simple but beautiful presentations with math, animations and media, which can be visualized in a web browser or exported to PDF.";
+    homepage    = "https://github.com/dadoomer/markdown-slides";
+    license     = licenses.mit;
+    maintainers = [ maintainers.qjoly ];
+    mainProgram = "mdslides";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/me_cleaner/default.nix b/nixpkgs/pkgs/tools/misc/me_cleaner/default.nix
new file mode 100644
index 000000000000..ec742b11c98e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/me_cleaner/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3, fetchFromGitHub }:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "me_cleaner";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "corna";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1bdj2clm13ir441vn7sv860xsc5gh71ja5lc2wn0gggnff0adxj4";
+  };
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Tool for partial deblobbing of Intel ME/TXE firmware images";
+    longDescription = ''
+      me_cleaner is a Python script able to modify an Intel ME firmware image
+      with the final purpose of reducing its ability to interact with the system.
+    '';
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "me_cleaner.py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/megacli/default.nix b/nixpkgs/pkgs/tools/misc/megacli/default.nix
new file mode 100644
index 000000000000..b198b030f3ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/megacli/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, rpmextract, ncurses5, patchelf, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "megacli";
+  version = "8.07.14";
+
+  src = fetchurl {
+    url = "https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/${builtins.replaceStrings ["."] ["-"] version}_MegaCLI.zip";
+    sha256 = "1sdn58fbmd3fj4nzbajq3gcyw71ilgdh45r5p4sa6xmb7np55cfr";
+  };
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [rpmextract ncurses5];
+  libPath =
+    lib.makeLibraryPath
+       [ stdenv.cc.cc stdenv.cc.libc ncurses5 ];
+
+  buildCommand = ''
+    unzip ${src}
+    rpmextract Linux/MegaCli-${version}-1.noarch.rpm
+
+    mkdir -p $out/{bin,share/MegaRAID/MegaCli}
+    cp -r opt $out
+    cp ${version}_MegaCLI.txt $out/share/MegaRAID/MegaCli
+
+    ${patchelf}/bin/patchelf \
+      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath ${libPath}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.cc.lib}/lib \
+      $out/opt/MegaRAID/MegaCli/MegaCli64
+
+    ln -s $out/opt/MegaRAID/MegaCli/MegaCli64 $out/bin/MegaCli64
+    eval fixupPhase
+  '';
+
+  meta = {
+    description = "CLI program for LSI MegaRAID cards, which also works with some Dell PERC RAID cards";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "MegaCli64";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/melody/default.nix b/nixpkgs/pkgs/tools/misc/melody/default.nix
new file mode 100644
index 000000000000..b4284a63eec1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/melody/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "melody";
+  version = "0.19.0";
+
+  src = fetchCrate {
+    pname = "melody_cli";
+    inherit version;
+    sha256 = "sha256-sJVZ4dRP6mAx9g7iqwI3L2cMa5x4qQuzKWPXvOOq6q8=";
+  };
+
+  cargoHash = "sha256-8UWz+gYUxf2UNWZCnhQlGiSX6kPsHPlYcdl7wD3Rchs=";
+
+  meta = with lib; {
+    description = "Language that compiles to regular expressions";
+    homepage = "https://github.com/yoav-lavi/melody";
+    license = licenses.mit;
+    maintainers = with maintainers; [ joelkoen ];
+    mainProgram = "melody";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/memtest86+/default.nix b/nixpkgs/pkgs/tools/misc/memtest86+/default.nix
new file mode 100644
index 000000000000..297ef5dff041
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/memtest86+/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "memtest86+";
+  version = "7.00";
+
+  src = fetchFromGitHub {
+    owner = "memtest86plus";
+    repo = "memtest86plus";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-DVYiE9yi20IR2AZs8bya1h9vK4si7nKdg9Nqef4WTrw=";
+  };
+
+  # Binaries are booted directly by BIOS/UEFI or bootloader
+  # and should not be patched/stripped
+  dontPatchELF = true;
+  dontStrip = true;
+
+  passthru.efi = "${finalAttrs.finalPackage}/memtest.efi";
+
+  preBuild = ''
+    cd ${if stdenv.isi686 then "build32" else "build64"}
+  '';
+
+  installPhase = ''
+    install -Dm0444 -t $out/ memtest.bin memtest.efi
+  '';
+
+  meta = {
+    homepage = "https://www.memtest.org/";
+    description = "A tool to detect memory errors";
+    license = lib.licenses.gpl2;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = [ lib.maintainers.LunNova ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix b/nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix
new file mode 100644
index 000000000000..264fe013b27a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix
@@ -0,0 +1,64 @@
+{ stdenv
+, lib
+, fetchzip
+, util-linux
+, jq
+, mtools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "memtest86-efi";
+  version = "9.3.1000";
+
+  src = fetchzip {
+    # We're using the Internet Archive Wayback Machine because the company developing MemTest86 has stopped providing a versioned download link for the latest version:
+    # https://forums.passmark.com/memtest86/44494-version-8-1-distribution-file-is-not-versioned
+    url = "https://web.archive.org/web/20211111004725/https://www.memtest86.com/downloads/memtest86-usb.zip";
+    sha256 = "sha256-GJdZCUFw1uX4HcaaAy5QqDGNqHTFtrqla13wF7xCAaM=";
+    stripRoot = false;
+  };
+
+  nativeBuildInputs = [
+    util-linux
+    jq
+    mtools
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    # memtest86 is distributed as a bootable USB image.  It contains the actual
+    # memtest86 EFI app.
+    #
+    # The following uses sfdisk to calculate the offset of the FAT EFI System
+    # Partition in the disk image, and mcopy to extract the actual EFI app from
+    # the filesystem so that it can be installed directly on the hard drive.
+    IMG=$src/memtest86-usb.img
+    ESP_OFFSET=$(sfdisk --json $IMG | jq -r '
+      # Partition type GUID identifying EFI System Partitions
+      def ESP_GUID: "C12A7328-F81F-11D2-BA4B-00A0C93EC93B";
+      .partitiontable |
+      .sectorsize * (.partitions[] | select(.type == ESP_GUID) | .start)
+    ')
+    mkdir $out
+    mcopy -vsi $IMG@@$ESP_OFFSET ::'/EFI/BOOT/*' $out/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.memtest86.com/";
+    downloadPage = "https://www.memtest86.com/download.htm";
+    changelog = "https://www.memtest86.com/whats-new.html";
+    description = "A tool to detect memory errors, to be run from a bootloader";
+    longDescription = ''
+      A UEFI app that is able to detect errors in RAM.  It can be run from a
+      bootloader.  Released under a proprietary freeware license.
+    '';
+    # MemTest86 Free Edition is free to download with no restrictions on usage. However, the source code is not available.
+    # https://www.memtest86.com/tech_license-information.html
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ cdepillabout ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mermaid-filter/default.nix b/nixpkgs/pkgs/tools/misc/mermaid-filter/default.nix
new file mode 100644
index 000000000000..3ed315784569
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mermaid-filter/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, makeWrapper
+, chromium
+}:
+
+buildNpmPackage rec {
+  pname = "mermaid-filter";
+  version = "1.4.7";
+
+  src = fetchFromGitHub {
+    owner = "raghur";
+    repo = "mermaid-filter";
+    rev = "v${version}";
+    hash = "sha256-GG2RWr5nVe6PCcTEJLmPyKL2j7ggSyNnHZAffNvPukg=";
+  };
+
+  npmDepsHash = "sha256-Hj4h8xTch2Z3ByUhxzPhbCTSXNOXuTXC6XUrBkRvQ/U=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  env.PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = 1;
+
+  dontNpmBuild = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/mermaid-filter \
+      --set PUPPETEER_EXECUTABLE_PATH ${chromium}/bin/chromium
+  '';
+
+  meta = with lib; {
+    description = "Pandoc filter for creating diagrams in mermaid syntax blocks in markdown docs";
+    homepage = "https://github.com/raghur/mermaid-filter";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ners ];
+    platforms = chromium.meta.platforms;
+    mainProgram = "mermaid-filter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/microplane/default.nix b/nixpkgs/pkgs/tools/misc/microplane/default.nix
new file mode 100644
index 000000000000..53d5cc567f09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/microplane/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "microplane";
+  version = "0.0.34";
+
+  src = fetchFromGitHub {
+    owner = "Clever";
+    repo = "microplane";
+    rev = "v${version}";
+    sha256 = "sha256-ZrBkVXRGZp8yGFIBo7sLGvJ8pMQq7Cq0xJiko57z164=";
+  };
+
+  vendorHash = "sha256-PqSjSFTVrIsQ065blIxZ9H/ARku6BEcnjboH+0K0G14=";
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/microplane $out/bin/mp
+  '';
+
+  meta = with lib; {
+    description = "A CLI tool to make git changes across many repos";
+    homepage = "https://github.com/Clever/microplane";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dbirks ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mimeo/default.nix b/nixpkgs/pkgs/tools/misc/mimeo/default.nix
new file mode 100644
index 000000000000..49a86807017f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mimeo/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchurl, desktop-file-utils, file, python3Packages }:
+
+let version = "2023";
+in python3Packages.buildPythonApplication {
+  pname = "mimeo";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://xyne.dev/projects/mimeo/src/mimeo-${version}.tar.xz";
+    hash = "sha256-CahvSypwR1aHVDHTdtty1ZfaKBWPolxc73uZ5OyeqZA=";
+  };
+
+  buildInputs = [ file desktop-file-utils ];
+
+  propagatedBuildInputs = [ python3Packages.pyxdg ];
+
+  preConfigure = ''
+    substituteInPlace Mimeo.py \
+      --replace "EXE_UPDATE_DESKTOP_DATABASE = 'update-desktop-database'" \
+                "EXE_UPDATE_DESKTOP_DATABASE = '${desktop-file-utils}/bin/update-desktop-database'" \
+      --replace "EXE_FILE = 'file'" \
+                "EXE_FILE = '${file}/bin/file'"
+  '';
+
+  installPhase = "install -Dm755 Mimeo.py $out/bin/mimeo";
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/mimeo --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Open files by MIME-type or file name using regular expressions";
+    homepage = "https://xyne.dev/projects/mimeo/";
+    license = [ licenses.gpl2Only ];
+    maintainers = [ maintainers.rycee ];
+    platforms = platforms.unix;
+    mainProgram = "mimeo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/minicom/default.nix b/nixpkgs/pkgs/tools/misc/minicom/default.nix
new file mode 100644
index 000000000000..361909ebddf2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/minicom/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, autoreconfHook
+, makeWrapper
+, pkg-config
+, lrzsz
+, ncurses
+, libiconv
+, IOKit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "minicom";
+  version = "2.9";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "minicom-team";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-+fKvHrApDXm94LItXv+xSDIE5zD7rTY5IeNSuzQglpg=";
+  };
+
+  buildInputs = [ ncurses ] ++ lib.optionals stdenv.isDarwin [ libiconv IOKit ];
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper pkg-config ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--enable-lock-dir=/var/lock"
+  ];
+
+  patches = [ ./xminicom_terminal_paths.patch ];
+
+  preConfigure = ''
+    # Have `configure' assume that the lock directory exists.
+    substituteInPlace configure \
+      --replace 'test -d $UUCPLOCK' true
+  '';
+
+  postInstall = ''
+    for f in $out/bin/*minicom ; do
+      wrapProgram $f \
+        --prefix PATH : ${lib.makeBinPath [ lrzsz ]}:$out/bin
+    done
+  '';
+
+  meta = with lib; {
+    description = "Modem control and terminal emulation program";
+    homepage = "https://salsa.debian.org/minicom-team/minicom";
+    license = licenses.gpl2;
+    longDescription = ''
+      Minicom is a menu driven communications program. It emulates ANSI
+      and VT102 terminals. It has a dialing directory and auto zmodem
+      download.
+    '';
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch b/nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch
new file mode 100644
index 000000000000..18535253d9f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch
@@ -0,0 +1,79 @@
+diff --git a/src/xminicom b/src/xminicom
+index a59aa08..cef153b 100755
+--- a/src/xminicom
++++ b/src/xminicom
+@@ -7,57 +7,39 @@
+ #
+ # version	$Id: xminicom,v 1.4 2008-06-09 20:48:35 al-guest Exp $
+
+-findcmd()
+-{
+-  IFS=:
+-  for i in $PATH
+-  do
+-	if [ -x $i\/$1 ]
+-	then
+-		result=$i\/$1
+-		IFS=
+-		return 0
+-	fi
+-  done
+-  result=
+-  IFS=
+-  return 1
++findcmd() {
++  result=$(command -v $1)
+ }
+
+-if findcmd x-terminal-emulator
+-then
++if findcmd x-terminal-emulator ; then
+   exec $result -T minicom -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd color_xterm
+-then
++if findcmd konsole ; then
++  exec $result -T minicom -geometry 80x25 -e minicom -m -c on "$@"
++  exit 1
++fi
++
++if findcmd gnome-terminal ; then
++  exec $result -T minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
++  exit 1
++fi
++
++if findcmd color_xterm ; then
+   exec $result -T minicom -bg black -fg grey -n minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd rxvt
+-then
++if findcmd rxvt ; then
+   exec $result -bg black -fg grey -n minicom -T minicom -sl 0 -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd kterm
+-then
++if findcmd xterm ; then
+   exec $result -T minicom -n minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd xterm
+-then
+-  if [ -f /etc/debian_version ]
+-  then
+-  exec $result -T minicom -n minicom -bg black -fg grey -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+-  else
+-  exec $result -T minicom -n minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+-  fi
+-  exit 1
+-fi
+-
+-echo "xminicom: rxvt, color_xterm or xterm NOT found!" 1>&2
++echo "xminicom: konsole, gnome-terminal, rxvt, color_xterm or xterm NOT found!" 1>&2
+ exit 1
diff --git a/nixpkgs/pkgs/tools/misc/minipro/default.nix b/nixpkgs/pkgs/tools/misc/minipro/default.nix
new file mode 100644
index 000000000000..870c4706f882
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/minipro/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, pkg-config
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "minipro";
+  version = "0.6";
+
+  src = fetchFromGitLab {
+    owner = "DavidGriffith";
+    repo = "minipro";
+    rev = version;
+    sha256 = "sha256-6i4PYzSm6lcO/Nb6n3holrNe4TtAnG2o81ZIMAIGqOE=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ];
+  makeFlags = [
+    "VERSION=${version}"
+    "PREFIX=$(out)"
+    "UDEV_DIR=$(out)/lib/udev"
+    "COMPLETIONS_DIR=$(out)/share/bash-completion/completions"
+    "PKG_CONFIG=${pkg-config}/bin/${pkg-config.targetPrefix}pkg-config"
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "CFLAGS=-O2"
+  ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/DavidGriffith/minipro";
+    description = "An open source program for controlling the MiniPRO TL866xx series of chip programmers";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.bmwalters ];
+    mainProgram = "minipro";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/miniserve/default.nix b/nixpkgs/pkgs/tools/misc/miniserve/default.nix
new file mode 100644
index 000000000000..7ba0165b0e01
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/miniserve/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+, curl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "miniserve";
+  version = "0.26.0";
+
+  src = fetchFromGitHub {
+    owner = "svenstaro";
+    repo = "miniserve";
+    rev = "v${version}";
+    hash = "sha256-f+k7ONX9bDrkyIhFxxaJvZYH2WBxYwCssbfM2fBPtRk=";
+  };
+
+  cargoHash = "sha256-Omxd0ZgvtEiciFnKWkYupyts2QT9LUTXxaTdfu0Jnx8=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  nativeCheckInputs = [
+    curl
+  ];
+
+  checkFlags = [
+    "--skip=bind_ipv4_ipv6::case_2"
+    "--skip=qrcode_hidden_in_tty_when_disabled"
+    "--skip=qrcode_shown_in_tty_when_enabled"
+    "--skip=show_root_readme_contents"
+    "--skip=validate_printed_urls"
+  ];
+
+  postInstall = ''
+    $out/bin/miniserve --print-manpage >miniserve.1
+    installManPage miniserve.1
+
+    installShellCompletion --cmd miniserve \
+      --bash <($out/bin/miniserve --print-completions bash) \
+      --fish <($out/bin/miniserve --print-completions fish) \
+      --zsh <($out/bin/miniserve --print-completions zsh)
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "CLI tool to serve files and directories over HTTP";
+    homepage = "https://github.com/svenstaro/miniserve";
+    changelog = "https://github.com/svenstaro/miniserve/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "miniserve";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ministat/default.nix b/nixpkgs/pkgs/tools/misc/ministat/default.nix
new file mode 100644
index 000000000000..d0f88e5d1b1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ministat/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchgit }:
+
+stdenv.mkDerivation rec {
+  pname = "ministat";
+  version = "20150715-1";
+
+  src = fetchgit {
+    url = "https://git.decadent.org.uk/git/ministat.git";
+    rev = "refs/tags/debian/${version}";
+    sha256 = "1p4g0yqgsy4hiqhr8gqp8d38zxzrss5qz70s0bw3i2pg4w668k6f";
+  };
+
+  postPatch = ''
+    patch -p1 < debian/patches/fix-ctype-usage.patch
+    patch -p1 < debian/patches/not-bsd
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp ministat $out/bin
+    cp ministat.1 $out/share/man/man1/
+  '';
+
+  meta = with lib; {
+    description = "Simple tool for statistical comparison of data sets";
+    homepage = "https://git.decadent.org.uk/gitweb/?p=ministat.git";
+    license = licenses.beerware;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.all;
+    mainProgram = "ministat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mise/default.nix b/nixpkgs/pkgs/tools/misc/mise/default.nix
new file mode 100644
index 000000000000..b0d48fd6fcfb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mise/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, nix-update-script
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, coreutils
+, bash
+, pkg-config
+, openssl
+, direnv
+, Security
+, SystemConfiguration
+, mise
+, testers
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mise";
+  version = "2024.2.16";
+
+  src = fetchFromGitHub {
+    owner = "jdx";
+    repo = "mise";
+    rev = "v${version}";
+    hash = "sha256-SrLgLYe0jeVzLoJZahqVrlYDd2FJ3G1uxrHx2BKjbHM=";
+  };
+
+  cargoHash = "sha256-G/NR53u+rX9Q7tJVYi1tlXQL+gxK7wfqN3IpkoXzTRk=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+
+  postPatch = ''
+    patchShebangs --build \
+      ./test/data/plugins/**/bin/* \
+      ./src/fake_asdf.rs \
+      ./src/cli/reshim.rs \
+      ./test/cwd/.mise/tasks/filetask
+
+    substituteInPlace ./src/env_diff.rs \
+      --replace '"bash"' '"${bash}/bin/bash"'
+
+    substituteInPlace ./src/cli/direnv/exec.rs \
+      --replace '"env"' '"${coreutils}/bin/env"' \
+      --replace 'cmd!("direnv"' 'cmd!("${direnv}/bin/direnv"'
+  '';
+
+  checkFlags = [
+    # Requires .git directory to be present
+    "--skip=cli::plugins::ls::tests::test_plugin_list_urls"
+  ];
+  cargoTestFlags = [ "--all-features" ];
+  # some tests access the same folders, don't test in parallel to avoid race conditions
+  dontUseCargoParallelTests = true;
+
+  postInstall = ''
+    installManPage ./man/man1/mise.1
+
+    installShellCompletion \
+      --bash ./completions/mise.bash \
+      --fish ./completions/mise.fish \
+      --zsh ./completions/_mise
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion { package = mise; };
+  };
+
+  meta = {
+    homepage = "https://mise.jdx.dev";
+    description = "The front-end to your dev env";
+    changelog = "https://github.com/jdx/mise/releases/tag/v${version}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ konradmalik ];
+    mainProgram = "mise";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mktorrent/default.nix b/nixpkgs/pkgs/tools/misc/mktorrent/default.nix
new file mode 100644
index 000000000000..74f449969a66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mktorrent/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "mktorrent";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "pobrn";
+    repo = "mktorrent";
+    rev = "v${version}";
+    sha256 = "17pdc5mandl739f8q26n5is8ga56s83aqcrwhlnnplbxwx2inidr";
+  };
+
+  makeFlags = [ "USE_PTHREADS=1" "USE_OPENSSL=1" "USE_LONG_OPTIONS=1" ]
+    ++ lib.optional stdenv.isi686 "USE_LARGE_FILES=1"
+    ++ lib.optional stdenv.isLinux "CFLAGS=-lgcc_s";
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  buildInputs = [ openssl ];
+
+  meta = with lib; {
+    description = "Command line utility to create BitTorrent metainfo files";
+    homepage = "https://github.com/pobrn/mktorrent/wiki";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ Profpatsch winter ];
+    platforms = platforms.all;
+    mainProgram = "mktorrent";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mloader/default.nix b/nixpkgs/pkgs/tools/misc/mloader/default.nix
new file mode 100644
index 000000000000..9790b169651d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mloader/default.nix
@@ -0,0 +1,36 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "mloader";
+  version = "1.1.11";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-SFFjv4RWh1JZtxkDmaun35gKi5xty1ifIItwaz3lot4=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "protobuf~=3.6" "protobuf"
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    click
+    protobuf
+    requests
+  ];
+
+  # No tests in repository
+  doCheck = false;
+
+  pythonImportsCheck = [ "mloader" ];
+
+  meta = with lib; {
+    description = "Command-line tool to download manga from mangaplus";
+    homepage = "https://github.com/hurlenko/mloader";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ marsam ];
+    mainProgram = "mloader";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mlocate/default.nix b/nixpkgs/pkgs/tools/misc/mlocate/default.nix
new file mode 100644
index 000000000000..c9253be930af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mlocate/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mlocate";
+  version = "0.26";
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/mlocate/mlocate-${version}.tar.xz";
+    sha256 = "0gi6y52gkakhhlnzy0p6izc36nqhyfx5830qirhvk3qrzrwxyqrh";
+  };
+
+  makeFlags = [
+    "dbfile=/var/cache/locatedb"
+  ];
+
+  meta = with lib; {
+    description = "Merging locate is an utility to index and quickly search for files";
+    homepage = "https://pagure.io/mlocate";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mlxbf-bootctl/default.nix b/nixpkgs/pkgs/tools/misc/mlxbf-bootctl/default.nix
new file mode 100644
index 000000000000..531956dd4b1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mlxbf-bootctl/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mlxbf-bootctl";
+  version = "1.1-6";
+
+  src = fetchFromGitHub {
+    owner = "Mellanox";
+    repo = pname;
+    rev = "${pname}-${version}";
+    hash = "sha256-F49ZZtty+NARXA/doAFLhsQn4XkPW6GWLXGy4waIaM0=";
+  };
+
+  installPhase = ''
+    install -D mlxbf-bootctl $out/bin/mlxbf-bootctl
+  '';
+
+  meta = with lib; {
+    description = "Control BlueField boot partitions";
+    homepage = "https://github.com/Mellanox/mlxbf-bootctl";
+    license = licenses.bsd2;
+    changelog = "https://github.com/Mellanox/mlxbf-bootctl/releases/tag/${pname}-${version}";
+    # This package is supposed to only run on a BlueField. Thus aarch64-linux
+    # is the only relevant platform.
+    platforms = [ "aarch64-linux" ];
+    maintainers = with maintainers; [ nikstur ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mmake/default.nix b/nixpkgs/pkgs/tools/misc/mmake/default.nix
new file mode 100644
index 000000000000..32f089f1a771
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmake/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mmake";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "tj";
+    repo = "mmake";
+    rev = "v${version}";
+    sha256 = "sha256-JPsVfLIl06PJ8Nsfu7ogwrttB1G93HTKbZFqUTSV9O8=";
+  };
+
+  vendorHash = "sha256-0z+sujzzBl/rtzXbhL4Os+jYfLUuO9PlXshUDxAH9DU=";
+
+  ldflags = [ "-s" "-w" ];
+
+  # Almost all tests require non-local networking, trying to resolve githubusercontent.com.
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/tj/mmake";
+    description = "A small program  which wraps make to provide additional functionality";
+    longDescription = ''
+      Mmake is a small program  which wraps make to provide additional
+      functionality,  such   as  user-friendly  help   output,  remote
+      includes,  and   eventually  more.   It  otherwise  acts   as  a
+      pass-through to standard make.
+    '';
+    license = licenses.mit;
+    maintainers = [ maintainers.gabesoft ];
+    mainProgram = "mmake";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mmctl/0001-module-replace-public.patch b/nixpkgs/pkgs/tools/misc/mmctl/0001-module-replace-public.patch
new file mode 100644
index 000000000000..2ac563dbbf4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmctl/0001-module-replace-public.patch
@@ -0,0 +1,8 @@
+--- a/go.mod
++++ b/go.mod
+@@ -218,3 +218,5 @@ exclude (
+ 	github.com/dyatlov/go-opengraph v0.0.0-20210112100619-dae8665a5b09
+ 	github.com/willf/bitset v1.2.0
+ )
++
++replace github.com/mattermost/mattermost/server/public => ./public
diff --git a/nixpkgs/pkgs/tools/misc/mmctl/default.nix b/nixpkgs/pkgs/tools/misc/mmctl/default.nix
new file mode 100644
index 000000000000..197d145fc6c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmctl/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "mmctl";
+  version = "9.2.2";
+
+  src = fetchFromGitHub {
+    owner = "mattermost";
+    repo = "mattermost";
+    rev = "v${version}";
+    hash = "sha256-53L2F20vaLLxtQS3DP/u0ZxLtnXHmjfcOMbXd4i+A6Y=";
+  } + "/server";
+
+  vendorHash = "sha256-v8aKZyb4emrwuIgSBDgla5wzwyt6PVGakbXjB9JVaCk=";
+
+  patches = [ ./0001-module-replace-public.patch ];
+
+  subPackages = [ "cmd/mmctl" ];
+
+  checkPhase = "go test -tags unit -timeout 30m ./cmd/mmctl/...";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/mattermost/mattermost/server/public/model.Version=${version}"
+    "-X github.com/mattermost/mattermost/server/public/model.BuildNumber=${version}-nixpkgs"
+    "-X github.com/mattermost/mattermost/server/public/model.BuildDate=1970-01-01"
+    "-X github.com/mattermost/mattermost/server/public/model.BuildHash=v${version}"
+    "-X github.com/mattermost/mattermost/server/public/model.BuildHashEnterprise=none"
+    "-X github.com/mattermost/mattermost/server/public/model.BuildEnterpriseReady=false"
+  ];
+
+  meta = with lib; {
+    description = "A remote CLI tool for Mattermost";
+    homepage = "https://github.com/mattermost/mmctl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ppom mgdelacroix ];
+    mainProgram = "mmctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mmv-go/default.nix b/nixpkgs/pkgs/tools/misc/mmv-go/default.nix
new file mode 100644
index 000000000000..da1f443c6736
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmv-go/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mmv-go";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "itchyny";
+    repo = "mmv";
+    rev = "v${version}";
+    sha256 = "sha256-DNLiW0QX7WrBslwVCbvydLnE6JAcfcRALYqwsK/J5x0=";
+  };
+
+  vendorHash = "sha256-HHGiMSBu3nrIChSYaEu9i22nwhLKgVQkPvbTMHBWwAE=";
+
+  ldflags = [ "-s" "-w" "-X main.revision=${src.rev}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/itchyny/mmv";
+    description = "Rename multiple files using your $EDITOR";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "mmv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mmv/default.nix b/nixpkgs/pkgs/tools/misc/mmv/default.nix
new file mode 100644
index 000000000000..c8ce33207787
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmv/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gengetopt, m4, gnupg
+, git, perl, autoconf, automake, help2man, boehmgc }:
+
+stdenv.mkDerivation rec {
+  pname = "mmv";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "rrthomas";
+    repo = "mmv";
+    rev = "v${version}";
+    sha256 = "sha256-01MJjYVPfDaRkzitqKXTJZHbkkZTEaFoyYZEEMizHp0=";
+    fetchSubmodules = true;
+  };
+
+  preConfigure = ''
+    ./bootstrap
+  '';
+
+  nativeBuildInputs = [ gengetopt m4 git gnupg perl autoconf automake help2man pkg-config ];
+  buildInputs = [ boehmgc ];
+
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_CFLAGS_COMPILE = toString [
+      "-Wno-error=implicit-function-declaration"
+      "-Wno-error=implicit-int"
+    ];
+  };
+
+  meta = {
+    homepage = "https://github.com/rrthomas/mmv";
+    description = "Utility for wildcard renaming, copying, etc";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ siraben ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mnc/default.nix b/nixpkgs/pkgs/tools/misc/mnc/default.nix
new file mode 100644
index 000000000000..b4b033c94f65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mnc/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromSourcehut
+}:
+
+buildGoModule rec {
+  pname = "mnc";
+  version = "0.4";
+
+  vendorHash = "sha256-H0KmGTWyjZOZLIEWophCwRYPeKLxBC050RI7cMXNbPs=";
+
+  src = fetchFromSourcehut {
+    owner = "~anjan";
+    repo = "mnc";
+    rev = version;
+    sha256 = "sha256-S7MBIxuYI+cc8OMQULt7VS7ouPqhq0Jk+rz6E5GyKac=";
+  };
+
+  meta = with lib; {
+    description = "Opens the user's crontab and echos the time when the next cronjob will be ran";
+    homepage = "https://git.sr.ht/~anjan/mnc";
+    license = licenses.unlicense;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wentam ];
+    mainProgram = "mnc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/moar/default.nix b/nixpkgs/pkgs/tools/misc/moar/default.nix
new file mode 100644
index 000000000000..0fa109f4cda8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/moar/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "moar";
+  version = "1.23.6";
+
+  src = fetchFromGitHub {
+    owner = "walles";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-WWMFyDLNi5XUEWi33Sav69i41icbp7NTzFy+Y+ImGNU=";
+  };
+
+  vendorHash = "sha256-1u/2OlMX2FuZaxWnpU4n5r/4xKe+rK++GoCJiSq/BdE=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage ./moar.1
+  '';
+
+  ldflags = [
+    "-s" "-w"
+    "-X" "main.versionString=v${version}"
+  ];
+
+  meta = with lib; {
+    description = "Nice-to-use pager for humans";
+    homepage = "https://github.com/walles/moar";
+    license = licenses.bsd2WithViews;
+    mainProgram = "moar";
+    maintainers = with maintainers; [ foo-dogsquared ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mods/default.nix b/nixpkgs/pkgs/tools/misc/mods/default.nix
new file mode 100644
index 000000000000..fda8944c330f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mods/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, gitUpdater
+, testers
+, mods
+}:
+
+buildGoModule rec {
+  pname = "mods";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "charmbracelet";
+    repo = "mods";
+    rev = "v${version}";
+    hash = "sha256-ZWH3YuN1cmdw96/HVzsp1u70ziUfupUeBjJiNI5a538=";
+  };
+
+  vendorHash = "sha256-PgaxqfgtwBYnzyL2F/OPJP1rdmLOtBCTKEPhMgvC6XA=";
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  passthru = {
+    updateScript = gitUpdater {
+      rev-prefix = "v";
+      ignoredVersions = ".(rc|beta).*";
+    };
+
+    tests.version = testers.testVersion {
+      package = mods;
+      command = "HOME=$(mktemp -d) mods -v";
+    };
+  };
+
+  meta = with lib; {
+    description = "AI on the command line";
+    homepage = "https://github.com/charmbracelet/mods";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "mods";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix b/nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix
new file mode 100644
index 000000000000..7e3185b489d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix
@@ -0,0 +1,139 @@
+{
+alsa-lib,
+at-spi2-atk,
+at-spi2-core,
+atk,
+cairo,
+cups,
+curl,
+dbus,
+dpkg,
+expat,
+fetchurl,
+fontconfig,
+freetype,
+gdk-pixbuf,
+glib,
+gtk3,
+lib,
+libdrm,
+libnotify,
+libsecret,
+libuuid,
+libxcb,
+libxkbcommon,
+mesa,
+nspr,
+nss,
+pango,
+stdenv,
+systemd,
+wrapGAppsHook,
+xorg,
+}:
+
+let
+  version = "1.42.1";
+
+  rpath = lib.makeLibraryPath [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    curl
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gtk3
+    libdrm
+    libnotify
+    libsecret
+    libuuid
+    libxcb
+    libxkbcommon
+    mesa
+    nspr
+    nss
+    pango
+    stdenv.cc.cc
+    systemd
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libxkbfile
+    xorg.libxshmfence
+    (lib.getLib stdenv.cc.cc)
+  ];
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        url = "https://downloads.mongodb.com/compass/mongodb-compass_${version}_amd64.deb";
+        sha256 = "sha256-URxzoMb03p8UTLbn8tmtaSQQV27hYRSwlTiacF/48F8=";
+      }
+    else
+      throw "MongoDB compass is not supported on ${stdenv.hostPlatform.system}";
+      # NOTE While MongoDB Compass is available to darwin, I do not have resources to test it
+      # Feel free to make a PR adding support if desired
+
+in stdenv.mkDerivation {
+  pname = "mongodb-compass";
+  inherit version;
+
+  inherit src;
+
+  buildInputs = [ dpkg wrapGAppsHook gtk3 ];
+  dontUnpack = true;
+
+  buildCommand = ''
+    IFS=$'\n'
+
+    # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here
+    dpkg --fsys-tarfile $src | tar --extract
+
+    mkdir -p $out
+    mv usr/* $out
+
+    # cp -av $out/usr/* $out
+    rm -rf $out/share/lintian
+
+    # The node_modules are bringing in non-linux files/dependencies
+    find $out -name "*.app" -exec rm -rf {} \; || true
+    find $out -name "*.dll" -delete
+    find $out -name "*.exe" -delete
+
+    # Otherwise it looks "suspicious"
+    chmod -R g-w $out
+
+    for file in `find $out -type f -perm /0111 -o -name \*.so\*`; do
+      echo "Manipulating file: $file"
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
+      patchelf --set-rpath ${rpath}:$out/lib/mongodb-compass "$file" || true
+    done
+
+    wrapGAppsHook $out/bin/mongodb-compass
+  '';
+
+  meta = with lib; {
+    description = "The GUI for MongoDB";
+    maintainers = with maintainers; [ bryanasdev000 ];
+    homepage = "https://github.com/mongodb-js/compass";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.sspl;
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "mongodb-compass";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix b/nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix
new file mode 100644
index 000000000000..0ed70de2e8e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix
@@ -0,0 +1,50 @@
+{ lib, buildGoModule, fetchFromGitHub, openssl, pkg-config, libpcap }:
+
+buildGoModule rec {
+  pname = "mongo-tools";
+  version = "100.9.4";
+
+  src = fetchFromGitHub {
+    owner = "mongodb";
+    repo = "mongo-tools";
+    rev = version;
+    sha256 = "sha256-FGgO8JNUU0+WqIh13I0i9cprN8qE/020wDXjFsZdFy0=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl libpcap ];
+
+  # Mongodb incorrectly names all of their binaries main
+  # Let's work around this with our own installer
+  buildPhase =
+    let
+      tools = [
+        "bsondump"
+        "mongodump"
+        "mongoexport"
+        "mongofiles"
+        "mongoimport"
+        "mongorestore"
+        "mongostat"
+        "mongotop"
+      ]; in
+    ''
+      # move vendored codes so nixpkgs go builder could find it
+      runHook preBuild
+
+      ${lib.concatMapStrings (t: ''
+        go build -o "$out/bin/${t}" -tags ssl -ldflags "-s -w" ./${t}/main
+      '') tools}
+
+      runHook postBuild
+    '';
+
+  meta = {
+    homepage = "https://github.com/mongodb/mongo-tools";
+    description = "Tools for the MongoDB";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mons/default.nix b/nixpkgs/pkgs/tools/misc/mons/default.nix
new file mode 100644
index 000000000000..d386c901e7c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mons/default.nix
@@ -0,0 +1,96 @@
+{ lib
+, bash
+, coreutils
+, fetchFromGitHub
+, gawk
+, gnugrep
+, gnused
+, help2man
+, resholve
+, xrandr
+}:
+
+resholve.mkDerivation rec {
+  pname = "mons";
+  version = "unstable-2020-03-20";
+
+  src = fetchFromGitHub {
+    owner = "Ventto";
+    repo = pname;
+    rev = "375bbba3aa700c8b3b33645a7fb70605c8b0ff0c";
+    sha256 = "19r5y721yrxhd9jp99s29jjvm0p87vl6xfjlcj38bljq903f21cl";
+    fetchSubmodules = true;
+  };
+
+  /*
+    Remove reference to `%LIBDIR%/liblist.sh`. This would be linked to the
+    non-resholved of the library in the final derivation.
+
+    Patching out the library check; it's bad on multiple levels:
+    1. The check literally breaks if it fails.
+       See https://github.com/Ventto/mons/pull/49
+    2. It doesn't need to do this; source would fail with a
+       sensible message if the script was missing.
+    3. resholve can't wrestle with test/[] (at least until
+       https://github.com/abathur/resholve/issues/78)
+  */
+  postPatch = ''
+    substituteInPlace mons.sh \
+      --replace "lib='%LIBDIR%/liblist.sh'" "" \
+      --replace '[ ! -r "$lib" ] && { "$lib: library not found."; exit 1; }' ""
+  '';
+
+  solutions = {
+    mons = {
+      scripts = [ "bin/mons" "lib/libshlist/liblist.sh" ];
+      interpreter = "${bash}/bin/sh";
+      inputs = [
+        bash
+        coreutils
+        gawk
+        gnugrep
+        gnused
+        xrandr
+      ];
+      fix = {
+        "$lib" = [ "lib/libshlist/liblist.sh" ];
+        "$XRANDR" = [ "xrandr" ];
+      };
+      keep = {
+        /*
+        has a whole slate of *flag variables that it sets to either
+        the true or false builtin and then executes...
+        */
+        "$aFlag" = true;
+        "$dFlag" = true;
+        "$eFlag" = true;
+        "$mFlag" = true;
+        "$nFlag" = true;
+        "$oFlag" = true;
+        "$sFlag" = true;
+        "$OFlag" = true;
+        "$SFlag" = true;
+        "$pFlag" = true;
+        "$iFlag" = true;
+        "$xFlag" = true;
+        "$is_flag" = true;
+      };
+    };
+  };
+
+  nativeBuildInputs = [ help2man ];
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
+
+  meta = with lib; {
+    description = "POSIX Shell script to quickly manage 2-monitors display";
+    homepage = "https://github.com/Ventto/mons.git";
+    license = licenses.mit;
+    maintainers = with maintainers; [ thiagokokada ];
+    platforms = platforms.unix;
+    mainProgram = "mons";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/moon-phases/default.nix b/nixpkgs/pkgs/tools/misc/moon-phases/default.nix
new file mode 100644
index 000000000000..f4d5a850efc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/moon-phases/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchCrate, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "moon-phases";
+  version = "0.3.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-8ZdtM246aqc49Q3ygMGk51LIzRA8RIdlaistbKUj3yY=";
+  };
+
+  cargoSha256 = "sha256-5JKM+GnigkpuX4qeGQAjDz/X48ZxXtCfYVwGco13YRM=";
+
+  meta = with lib; {
+    description = "Command-line/WM bar tool to display the moon phase at a certain date";
+    homepage = "https://github.com/mirrorwitch/moon-phases";
+    license = licenses.acsl14;
+    maintainers = with maintainers; [ mirrorwitch ];
+    mainProgram = "moon-phases";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/moreutils/default.nix b/nixpkgs/pkgs/tools/misc/moreutils/default.nix
new file mode 100644
index 000000000000..6975d4878c52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/moreutils/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchgit
+, libxml2
+, libxslt
+, docbook-xsl
+, docbook_xml_dtd_44
+, perlPackages
+, makeWrapper
+, perl # for pod2man
+, darwin
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "moreutils";
+  version = "0.68";
+
+  src = fetchgit {
+    url = "git://git.joeyh.name/moreutils";
+    rev = "refs/tags/${version}";
+    hash = "sha256-kOY12oejH0xKaaPrKem+l0PACqyPqD4P1jEjOYfNntM=";
+  };
+
+  preBuild = ''
+    substituteInPlace Makefile --replace /usr/share/xml/docbook/stylesheet/docbook-xsl ${docbook-xsl}/xml/xsl/docbook
+  '';
+
+  strictDeps = true;
+  nativeBuildInputs = [ makeWrapper perl libxml2 libxslt docbook-xsl docbook_xml_dtd_44 ];
+  buildInputs = lib.optional stdenv.isDarwin darwin.cctools;
+
+  propagatedBuildInputs = with perlPackages; [ perl IPCRun TimeDate TimeDuration ];
+
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/chronic --prefix PERL5LIB : $PERL5LIB
+    wrapProgram $out/bin/ts --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  passthru.updateScript = gitUpdater {
+    # No nicer place to find latest release.
+    url = "git://git.joeyh.name/moreutils";
+  };
+
+  meta = with lib; {
+    description = "Growing collection of the unix tools that nobody thought to write long ago when unix was young";
+    homepage = "https://joeyh.name/code/moreutils/";
+    maintainers = with maintainers; [ koral pSub ];
+    platforms = platforms.all;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/moserial/default.nix b/nixpkgs/pkgs/tools/misc/moserial/default.nix
new file mode 100644
index 000000000000..8ac7091e003c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/moserial/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, autoreconfHook
+, intltool
+, itstool
+, pkg-config
+, vala
+, glib
+, graphviz
+, yelp-tools
+, gtk3
+, lrzsz
+}:
+
+stdenv.mkDerivation rec {
+  pname = "moserial";
+  version = "3.0.21";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = pname;
+    rev = "moserial_${lib.replaceStrings [ "." ] [ "_" ] version}";
+    sha256 = "sha256-wfdI51ECqVNcUrIVjYBijf/yqpiwSQeMiKaVJSSma3k=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    intltool
+    itstool
+    pkg-config
+    vala
+  ];
+
+  buildInputs = [
+    glib
+    graphviz
+    yelp-tools
+    gtk3
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : ${lib.makeBinPath [ lrzsz ]}
+    )
+  '';
+
+  meta = with lib; {
+    description = "Clean, friendly gtk-based serial terminal for the gnome desktop";
+    homepage = "https://wiki.gnome.org/moserial";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ linsui ];
+    platforms = platforms.linux;
+    mainProgram = "moserial";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/most/default.nix b/nixpkgs/pkgs/tools/misc/most/default.nix
new file mode 100644
index 000000000000..87280b9f295e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/most/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, slang, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "most";
+  version = "5.2.0";
+
+  src = fetchurl {
+    url = "https://www.jedsoft.org/releases/${pname}/${pname}-${version}.tar.gz";
+    hash = "sha256-lFWuuPgm+oOFyFDcIr8PIs+QabPDQj+6S/LG9iJtmQM=";
+  };
+
+  outputs = [ "out" "doc" ];
+
+  makeFlags = [
+    "DOC_DIR=${placeholder "doc"}/share/doc/most"
+  ];
+
+  preConfigure = ''
+    sed -i -e "s|-ltermcap|-lncurses|" configure
+    sed -i autoconf/Makefile.in src/Makefile.in \
+      -e "s|/bin/cp|cp|"  \
+      -e "s|/bin/rm|rm|"
+  '';
+
+  configureFlags = [ "--with-slang=${slang.dev}" ];
+
+  buildInputs = [ slang ncurses ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A terminal pager similar to 'more' and 'less'";
+    longDescription = ''
+      MOST is a powerful paging program for Unix, VMS, MSDOS, and win32
+      systems. Unlike other well-known paging programs most supports multiple
+      windows and can scroll left and right. Why settle for less?
+    '';
+    homepage = "https://www.jedsoft.org/most/index.html";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    mainProgram = "most";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mpdscribble/default.nix b/nixpkgs/pkgs/tools/misc/mpdscribble/default.nix
new file mode 100644
index 000000000000..335dedf12fe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mpdscribble/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, pkg-config
+, meson
+, ninja
+, boost
+, curl
+, libgcrypt
+, libmpdclient
+, systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mpdscribble";
+  version = "0.24";
+
+  src = fetchurl {
+    url = "https://www.musicpd.org/download/mpdscribble/${version}/mpdscribble-${version}.tar.xz";
+    sha256 = "sha256-9rTLp0izuH5wUnC0kjyOI+lMLgD+3VC+sUaNvi+yqOc=";
+  };
+
+  # Fix build issue on darwin; to be removed after the next release
+  patches = [(fetchpatch {
+    name = "remove-empty-static-lib.patch";
+    url = "https://github.com/MusicPlayerDaemon/mpdscribble/commit/0dbcea25c81f3fdc608f71ef71a9784679fee17f.patch";
+    sha256 = "sha256-3wLfQvbwx+OFrCl5vMV7Zps4e4iEYFhqPiVCo5hDqgw=";
+  })];
+
+  postPatch = ''
+    sed '1i#include <ctime>' -i src/Log.cxx # gcc12
+  '';
+
+  nativeBuildInputs = [ pkg-config meson ninja ];
+  buildInputs = [
+    libmpdclient
+    curl
+    boost
+    libgcrypt
+  ] ++ lib.optional stdenv.isLinux systemd;
+
+  meta = with lib; {
+    description = "A MPD client which submits info about tracks being played to a scrobbler";
+    homepage = "https://www.musicpd.org/clients/mpdscribble/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.sohalt ];
+    platforms = platforms.unix;
+    mainProgram = "mpdscribble";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mpremote/default.nix b/nixpkgs/pkgs/tools/misc/mpremote/default.nix
new file mode 100644
index 000000000000..18b6dc9a4cde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mpremote/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, hatchling
+, hatch-requirements-txt
+, hatch-vcs
+, pyserial
+, importlib-metadata
+}:
+buildPythonApplication rec {
+  pname = "mpremote";
+  version = "1.22.1";
+
+  src = fetchFromGitHub {
+    owner = "micropython";
+    repo = "micropython";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-tGFXJW1RkUs/64Yatgg/1zZFPDQdu76uiMjNU8ebdvg=";
+  };
+  sourceRoot = "source/tools/mpremote";
+  format = "pyproject";
+
+  nativeBuildInputs = [
+    hatchling
+    hatch-requirements-txt
+    hatch-vcs
+  ];
+  propagatedBuildInputs = [
+    pyserial
+    importlib-metadata
+  ];
+
+  pythonImportsCheck = [ "mpremote" ];
+
+  meta = with lib; {
+    description = "An integrated set of utilities to remotely interact with and automate a MicroPython device over a serial connection";
+    homepage = "https://github.com/micropython/micropython/blob/master/tools/mpremote/README.md";
+    platforms = platforms.unix;
+    license = licenses.mit;
+    maintainers = with maintainers; [ _999eagle ];
+    mainProgram = "mpremote";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mprime/default.nix b/nixpkgs/pkgs/tools/misc/mprime/default.nix
new file mode 100644
index 000000000000..e55f8ca50fe0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mprime/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, lib, fetchurl, unzip, boost, curl, hwloc, gmp }:
+
+let
+  throwSystem = throw "Unsupported system: ${stdenv.hostPlatform.system}";
+
+  srcDir = {
+    x86_64-linux = "linux64";
+    i686-linux = "linux";
+    x86_64-darwin = "macosx64";
+  }."${stdenv.hostPlatform.system}" or throwSystem;
+
+  gwnum = {
+    x86_64-linux = "make64";
+    i686-linux = "makefile";
+    x86_64-darwin = "makemac";
+  }."${stdenv.hostPlatform.system}" or throwSystem;
+in
+
+stdenv.mkDerivation rec {
+  pname = "mprime";
+  version = "30.8b15";
+
+  src = fetchurl {
+    url = "https://www.mersenne.org/ftp_root/gimps/p95v${lib.replaceStrings ["."] [""] version}.source.zip";
+    hash = "sha256-CNYorZStHV0aESGX9LfLZ4oD5PFR2UOFLN1MiLaKw58=";
+  };
+
+  postPatch = ''
+    sed -i ${srcDir}/makefile \
+      -e 's/^LFLAGS =.*//'
+    substituteInPlace ${srcDir}/makefile \
+      --replace '-Wl,-Bstatic'  "" \
+      --replace '-Wl,-Bdynamic' ""
+  '';
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ unzip ];
+
+  buildInputs = [ boost curl hwloc gmp ];
+
+  enableParallelBuilding = true;
+
+  buildPhase = ''
+    make -C gwnum -f ${gwnum}
+    make -C ${srcDir}
+  '';
+
+  installPhase = ''
+    install -Dm555 -t $out/bin ${srcDir}/mprime
+  '';
+
+  meta = with lib; {
+    description = "Mersenne prime search / System stability tester";
+    longDescription = ''
+      MPrime is the Linux command-line interface version of Prime95, to be run
+      in a text terminal or in a terminal emulator window as a remote shell
+      client. It is identical to Prime95 in functionality, except it lacks a
+      graphical user interface.
+    '';
+    homepage = "https://www.mersenne.org/";
+    # Unfree, because of a license requirement to share prize money if you find
+    # a suitable prime. http://www.mersenne.org/legal/#EULA
+    license = licenses.unfree;
+    # Untested on linux-32 and osx. Works in theory.
+    platforms = ["i686-linux" "x86_64-linux" "x86_64-darwin"];
+    mainProgram = "mprime";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mprocs/default.nix b/nixpkgs/pkgs/tools/misc/mprocs/default.nix
new file mode 100644
index 000000000000..c42c17bd53c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mprocs/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mprocs";
+  version = "0.6.4";
+
+  src = fetchFromGitHub {
+    owner = "pvolok";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-uwr+cHenV38IsTEW/PQB0kCDsyahiQrBh4s8v8SyEn8=";
+  };
+
+  cargoSha256 = "sha256-H9oHppG7sew/3JrUtWq2Pip1S9H36qYeHu6x/sPfwV0=";
+
+  # Package tests are currently failing (even upstream) but the package seems to work fine.
+  # Relevant issues:
+  # https://github.com/pvolok/mprocs/issues/50
+  # https://github.com/pvolok/mprocs/issues/61
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A TUI tool to run multiple commands in parallel and show the output of each command separately";
+    homepage = "https://github.com/pvolok/mprocs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ GaetanLepage thehedgeh0g ];
+    mainProgram = "mprocs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mpy-utils/default.nix b/nixpkgs/pkgs/tools/misc/mpy-utils/default.nix
new file mode 100644
index 000000000000..0ee7701b730b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mpy-utils/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, lib, buildPythonApplication, fetchPypi, fusepy, pyserial }:
+
+buildPythonApplication rec {
+  pname = "mpy-utils";
+  version = "0.1.13";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-die8hseaidhs9X7mfFvV8C8zn0uyw08gcHNqmjl+2Z4=";
+  };
+
+  propagatedBuildInputs = [ fusepy pyserial ];
+
+  meta = with lib; {
+    description = "MicroPython development utility programs";
+    homepage = "https://github.com/nickzoic/mpy-utils";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aciceri ];
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mrtg/default.nix b/nixpkgs/pkgs/tools/misc/mrtg/default.nix
new file mode 100644
index 000000000000..343a3d5c2a25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mrtg/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, perl, gd, rrdtool }:
+
+stdenv.mkDerivation rec {
+  pname = "mrtg";
+  version = "2.17.10";
+
+  src = fetchurl {
+    url = "https://oss.oetiker.ch/mrtg/pub/${pname}-${version}.tar.gz";
+    sha256 = "sha256-x/EcteIXpQDYfuO10mxYqGUu28DTKRaIu3krAQ+uQ6w=";
+  };
+
+  buildInputs = [
+    perl
+    gd
+    rrdtool
+  ];
+
+  meta = with lib; {
+    description = "The Multi Router Traffic Grapher";
+    homepage = "https://oss.oetiker.ch/mrtg/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ robberer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ms-sys/default.nix b/nixpkgs/pkgs/tools/misc/ms-sys/default.nix
new file mode 100644
index 000000000000..5d736952d232
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ms-sys/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "ms-sys";
+  version = "2.6.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ms-sys/${pname}-${version}.tar.gz";
+    sha256 = "06xqpm2s9cg8fj7a1822wmh3p4arii0sifssazg1gr6i7xg7kbjz";
+  };
+  # TODO: Remove with next release, see https://sourceforge.net/p/ms-sys/patches/8/
+  patches = [ ./manpages-without-build-timestamps.patch ];
+
+  nativeBuildInputs = [ gettext ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A program for writing Microsoft-compatible boot records";
+    homepage = "https://ms-sys.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = with platforms; linux;
+    mainProgram = "ms-sys";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch b/nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch
new file mode 100644
index 000000000000..7b031cb34f1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch
@@ -0,0 +1,12 @@
+diff -u ms-sys-2.6.0/Makefile ms-sys-2.6.0-fixed/Makefile
+--- ms-sys-2.6.0/Makefile	2015-09-27 20:39:45.000000000 +0200
++++ ms-sys-2.6.0-fixed/Makefile2020-01-06 16:43:55.181477511 +0100
+@@ -121,7 +121,7 @@
+
+ $(DESTDIR)$(MANDIR)/%: $(MAN)/$(dir $(*D))/$(*F)
+ 	install -D -m 644 $(MAN)/$(dir $(*D))$(*F) $@
+-	gzip -f $@
++	gzip -n -f $@
+
+ #$(DESTDIR)$(MANDIR)/%: $(MAN)/$(*F)
+ #	echo t: $<
diff --git a/nixpkgs/pkgs/tools/misc/mslink/default.nix b/nixpkgs/pkgs/tools/misc/mslink/default.nix
new file mode 100644
index 000000000000..82c60ab926f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mslink/default.nix
@@ -0,0 +1,34 @@
+{ gccStdenv
+, lib
+, fetchurl
+}:
+
+gccStdenv.mkDerivation rec {
+  pname = "mslink";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "http://www.mamachine.org/mslink/mslink_v${version}.tar.gz";
+    sha256 = "1qiwqa6w2in6gk4sxiy37c2wwpakin6l2ad2cf5s7ij96z2ijgqg";
+  };
+
+  preBuild = ''
+    rm mslink # clean up shipped executable
+  '';
+
+  installPhase = ''
+    if [[ "$(uname)" == "Darwin" ]]; then
+      mv mslink.exe mslink
+    fi
+    install -D mslink $out/bin/mslink
+  '';
+
+  meta = with lib; {
+    description = "Create Windows Shortcut Files (.LNK) without using Windows";
+    homepage = "http://www.mamachine.org/mslink/index.en.html";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ mkg20001 ];
+    platforms = platforms.unix;
+    mainProgram = "mslink";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mstflint/default.nix b/nixpkgs/pkgs/tools/misc/mstflint/default.nix
new file mode 100644
index 000000000000..c4c99da85e18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mstflint/default.nix
@@ -0,0 +1,128 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, rdma-core
+, openssl
+, zlib
+, xz
+, expat
+, boost
+, curl
+, pkg-config
+, libxml2
+, pciutils
+, busybox
+, python3
+, automake
+, autoconf
+, libtool
+, git
+# use this to shrink the package's footprint if necessary (e.g. for hardened appliances)
+, onlyFirmwareUpdater ? false
+# contains binary-only libraries
+, enableDPA ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mstflint";
+  version = "4.26.0-1";
+
+  src = fetchurl {
+    url = "https://github.com/Mellanox/mstflint/releases/download/v${version}/mstflint-${version}.tar.gz";
+    hash = "sha256-P8XACcz6d8UTOhFFeTijfFOthBqnUghGlDj9K145sZ8=";
+  };
+
+  patches = [
+    # needed to introduce this with GCC 13. Remove, when https://github.com/Mellanox/mstflint/pull/916 is upstream.
+    (fetchpatch {
+      name = "elf.patch";
+      url = "https://patch-diff.githubusercontent.com/raw/Mellanox/mstflint/pull/916.patch";
+      hash = "sha256-quBdmiuzwThu4MkAaT74eJDlZwIcUZMrLZa8OIcO96w=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    libtool
+    pkg-config
+    libxml2
+    git
+  ];
+
+  buildInputs = [
+    rdma-core
+    zlib
+    libxml2
+    openssl
+  ] ++ lib.optionals (!onlyFirmwareUpdater) [
+    boost
+    curl
+    expat
+    xz
+    python3
+  ];
+
+  preConfigure = ''
+    export CPPFLAGS="-I$(pwd)/tools_layouts -isystem ${libxml2.dev}/include/libxml2"
+    export INSTALL_BASEDIR=$out
+    ./autogen.sh
+  '';
+
+  # Cannot use wrapProgram since the python script's logic depends on the
+  # filename and will get messed up if the executable is named ".xyz-wrapped".
+  # That is why the python executable and runtime dependencies are injected
+  # this way.
+  #
+  # Remove host_cpu replacement again (see https://github.com/Mellanox/mstflint/pull/865),
+  # needs to hit master or a release. master_devel may be rebased.
+  #
+  # Remove patch for regex check, after https://github.com/Mellanox/mstflint/pull/871
+  # got merged.
+  prePatch = [
+  ''
+    patchShebangs eval_git_sha.sh
+    substituteInPlace configure.ac \
+        --replace "build_cpu" "host_cpu"
+    substituteInPlace common/compatibility.h \
+        --replace "#define ROOT_PATH \"/\"" "#define ROOT_PATH \"$out/\""
+    substituteInPlace configure.ac \
+        --replace 'Whether to use GNU C regex])' 'Whether to use GNU C regex])],[AC_MSG_RESULT([yes])'
+  ''
+  (lib.optionals (!onlyFirmwareUpdater) ''
+    substituteInPlace common/python_wrapper.sh \
+      --replace \
+      'exec $PYTHON_EXEC $SCRIPT_PATH "$@"' \
+      'export PATH=$PATH:${lib.makeBinPath [ (placeholder "out") pciutils busybox]}; exec ${python3}/bin/python3 $SCRIPT_PATH "$@"'
+  '')
+  ];
+
+  configureFlags = [
+    "--enable-xml2"
+    "--datarootdir=${placeholder "out"}/share"
+  ] ++ lib.optionals (!onlyFirmwareUpdater) [
+    "--enable-adb-generic-tools"
+    "--enable-cs"
+    "--enable-dc"
+    "--enable-fw-mgr"
+    "--enable-inband"
+    "--enable-rdmem"
+  ] ++ lib.optionals enableDPA [
+    "--enable-dpa"
+  ];
+
+  enableParallelBuilding = true;
+
+  hardeningDisable = [ "format" ];
+
+  dontDisableStatic = true;  # the build fails without this. should probably be reported upstream
+
+  meta = with lib; {
+    description = "Open source version of Mellanox Firmware Tools (MFT)";
+    homepage = "https://github.com/Mellanox/mstflint";
+    license = with licenses; [ gpl2 bsd2 ];
+    maintainers = with maintainers; [ thillux ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mtm/default.nix b/nixpkgs/pkgs/tools/misc/mtm/default.nix
new file mode 100644
index 000000000000..ffd7eefce8ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mtm/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "mtm";
+  version = "1.2.1";
+
+  outputs = [ "out" "terminfo" ];
+
+  src = fetchFromGitHub {
+    owner = "deadpixi";
+    repo = pname;
+    rev = version;
+    sha256 = "0gibrvah059z37jvn1qs4b6kvd4ivk2mfihmcpgx1vz6yg70zghv";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "DESTDIR=${placeholder "out"}" "MANDIR=${placeholder "out"}/share/man/man1" ];
+
+  preInstall = ''
+    mkdir -p $out/bin/ $out/share/man/man1
+  '';
+
+  postInstall = ''
+    mkdir -p $terminfo/share/terminfo $out/nix-support
+    tic -x -o $terminfo/share/terminfo mtm.ti
+    echo "$terminfo" >> $out/nix-support/propagated-user-env-packages
+  '';
+
+  meta = with lib; {
+    description = "Perhaps the smallest useful terminal multiplexer in the world";
+    homepage = "https://github.com/deadpixi/mtm";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "mtm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/multitail/default.nix b/nixpkgs/pkgs/tools/misc/multitail/default.nix
new file mode 100644
index 000000000000..3732d64dd929
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/multitail/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, pkg-config, cmake }:
+
+stdenv.mkDerivation rec {
+  version = "7.1.2";
+  pname = "multitail";
+
+  src = fetchFromGitHub {
+    owner = "folkertvanheusden";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-00NZI/KFcgEAkvESnx0KQFW1GvX6FgZLA4Z1Fv2qi+E=";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake ];
+
+  buildInputs = [ ncurses ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/multitail $out/bin
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = "https://github.com/folkertvanheusden/multitail";
+    description = "tail on Steroids";
+    maintainers = with lib.maintainers; [ matthiasbeyer ];
+    platforms = lib.platforms.unix;
+    license = lib.licenses.asl20;
+    mainProgram = "multitail";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/multitime/default.nix b/nixpkgs/pkgs/tools/misc/multitime/default.nix
new file mode 100644
index 000000000000..e6f6280abab1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/multitime/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "multitime";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "ltratt";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "1p6m4gyy6dw7nxnpsk32qiijagmiq9vwch0fbc25qvmybwqp8qc0";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = {
+    description = "Time command execution over multiple executions";
+
+    longDescription = ''
+      Unix's `time` utility is a simple and often effective way of measuring
+      how long a command takes to run. Unfortunately, running a command once
+      can give misleading timings: the process may create a cache on its first
+      execution, running faster subsequently; other processes may cause the
+      command to be starved of CPU or IO time; etc. It is common to see people
+      run `time` several times and take whichever values they feel most
+      comfortable with. Inevitably, this causes problems.
+
+      `multitime` is, in essence, a simple extension to time which runs a
+      command multiple times and prints the timing means (with confidence
+      intervals), standard deviations, minimums, medians, and maximums having
+      done so. This can give a much better understanding of the command's
+      performance.
+    '';
+
+    license = lib.licenses.mit;
+    homepage = "https://tratt.net/laurie/src/multitime/";
+    platforms = lib.platforms.unix;
+    mainProgram = "multitime";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mutagen-compose/default.nix b/nixpkgs/pkgs/tools/misc/mutagen-compose/default.nix
new file mode 100644
index 000000000000..fe8f2b06505d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mutagen-compose/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mutagen-compose";
+  version = "0.17.5";
+
+  src = fetchFromGitHub {
+    owner = "mutagen-io";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-EkUaxk+zCm1ta1/vjClZHki/MghLvUkCeiW7hST7WEc=";
+  };
+
+  vendorHash = "sha256-siLS53YVQfCwqyuvXXvHFtlpr3RQy2GP2/ZV+Tv/Lqc=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/mutagen-compose" ];
+
+  tags = [ "mutagencompose" ];
+
+  meta = with lib; {
+    description = "Compose with Mutagen integration";
+    homepage = "https://mutagen.io/";
+    changelog = "https://github.com/mutagen-io/mutagen-compose/releases/tag/v${version}";
+    maintainers = [ maintainers.matthewpi ];
+    license = licenses.mit;
+    mainProgram = "mutagen-compose";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mutagen/default.nix b/nixpkgs/pkgs/tools/misc/mutagen/default.nix
new file mode 100644
index 000000000000..5cfdff54a708
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mutagen/default.nix
@@ -0,0 +1,46 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchzip }:
+
+buildGoModule rec {
+  pname = "mutagen";
+  version = "0.17.1";
+
+  src = fetchFromGitHub {
+    owner = "mutagen-io";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-M7h8qlqqGK4Nl4yXL7ZhGTq/CL+LdDpI/nv90koyu3Y=";
+  };
+
+  vendorHash = "sha256-kfzT+230KY2TJVc0qKMi4TysmltZSgF/OvL5nPLPcbM=";
+
+  agents = fetchzip {
+    name = "mutagen-agents-${version}";
+    # The package architecture does not matter since all packages contain identical mutagen-agents.tar.gz.
+    url = "https://github.com/mutagen-io/mutagen/releases/download/v${version}/mutagen_linux_amd64_v${version}.tar.gz";
+    stripRoot = false;
+    postFetch = ''
+      rm $out/mutagen # Keep only mutagen-agents.tar.gz.
+    '';
+    hash = "sha256-RFB1/gzLjs9w8mebEd4M9Ldv3BrLIj2RsN/QAIJi45E=";
+  };
+
+  doCheck = false;
+
+  subPackages = [ "cmd/mutagen" "cmd/mutagen-agent" ];
+
+  tags = [ "mutagencli" "mutagenagent" ];
+
+  postInstall = ''
+    install -d $out/libexec
+    ln -s ${agents}/mutagen-agents.tar.gz $out/libexec/
+  '';
+
+  meta = with lib; {
+    description = "Make remote development work with your local tools";
+    homepage = "https://mutagen.io/";
+    changelog = "https://github.com/mutagen-io/mutagen/releases/tag/v${version}";
+    maintainers = [ maintainers.marsam ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mutt-wizard/default.nix b/nixpkgs/pkgs/tools/misc/mutt-wizard/default.nix
new file mode 100644
index 000000000000..98c160768d98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mutt-wizard/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "mutt-wizard";
+  version = "3.3.1";
+
+  src = fetchFromGitHub {
+    owner = "LukeSmithxyz";
+    repo = "mutt-wizard";
+    rev = "v${version}";
+    sha256 = "sha256-1/+awwoAqD8Xm3hULcbpeTaLOHVuYRA4PPr3cq5Gy20=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "System for automatically configuring mutt and isync";
+    homepage = "https://github.com/LukeSmithxyz/mutt-wizard";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mvebu64boot/default.nix b/nixpkgs/pkgs/tools/misc/mvebu64boot/default.nix
new file mode 100644
index 000000000000..0c682cebd5e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mvebu64boot/default.nix
@@ -0,0 +1,35 @@
+{ fetchFromGitHub
+, stdenv
+, lib
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mvebu64boot";
+  version = "unstable-2022-10-20";
+
+  src = fetchFromGitHub {
+    owner = "pali";
+    repo = "mvebu64boot";
+    rev = "e7ca70eff2dc278607cc07f6654bbddacb2e4ff6";
+    hash = "sha256-Y2yVr/BuOah5yMvF5EvM7frEUY8r+Hf4bNIKVkHgvQs=";
+  };
+
+  buildInputs = [
+    ncurses
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D mvebu64boot $out/bin/mvebu64boot
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Boot 64-bit Marvell EBU SoC over UART";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ lukegb ];
+    platforms = platforms.all;
+    mainProgram = "mvebu64boot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mynewt-newtmgr/default.nix b/nixpkgs/pkgs/tools/misc/mynewt-newtmgr/default.nix
new file mode 100644
index 000000000000..1ad1bb7ac1bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mynewt-newtmgr/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+, testers
+, mynewt-newtmgr
+}:
+
+buildGoModule rec {
+  pname = "mynewt-newtmgr";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "apache";
+    repo = "mynewt-newtmgr";
+    rev = "mynewt_${builtins.replaceStrings ["."] ["_"] version}_tag";
+    sha256 = "sha256-fobaMkYLLK5qclogtClGdOjgTbmuse/72T3APNssYa4=";
+  };
+
+  vendorHash = "sha256-+vOZoueoMqlGnopLKc6pCgTmcgI34pxaMNbr6Y+JCfQ=";
+
+  passthru.tests.version = testers.testVersion {
+    package = mynewt-newtmgr;
+    command = "newtmgr version";
+  };
+
+  meta = with lib; {
+    homepage = "https://mynewt.apache.org/";
+    description = "Tool to communicate with devices running Mynewt OS";
+    longDescription = ''
+      Newt Manager (newtmgr) an application that enables a user to communicate
+      with and manage remote devices running the Mynewt OS
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bezmuth ];
+    # never built on aarch64-darwin, x86_64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix b/nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix
new file mode 100644
index 000000000000..d3e24c559849
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, perl }:
+
+# The homepage says this script is mature..
+stdenv.mkDerivation rec {
+  pname = "mysql2pgsql";
+  version = "0.0.1a";
+
+  src = fetchurl {
+    url = "http://ftp.plusline.de/ftp.postgresql.org/projects/gborg/mysql2psql/devel/mysql2psql-${version}.tgz";
+    sha256 = "0dpbxf3kdvpihz9cisx6wi3zzd0cnifaqvjxavrbwm4k4sz1qamp";
+  };
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv {,$out/bin/}mysql2psql
+  '';
+
+  meta = {
+    description = "Convert MySQL dump files to PostgreSQL-loadable files";
+    homepage = "https://pgfoundry.org/projects/mysql2pgsql/";
+    license = lib.licenses.bsdOriginal;
+    mainProgram = "mysql2psql";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mysqltuner/default.nix b/nixpkgs/pkgs/tools/misc/mysqltuner/default.nix
new file mode 100644
index 000000000000..f13b455e523b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mysqltuner/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "mysqltuner";
+  version = "1.8.3";
+
+  src = fetchFromGitHub {
+    owner = "major";
+    repo = "MySQLTuner-perl";
+    rev = version;
+    sha256 = "sha256-ezF0zjQB/KWD5rUcbXx2uwiNLsIJ7ZKMoqkclP7oc98=";
+  };
+
+  postPatch = ''
+    substituteInPlace mysqltuner.pl \
+      --replace '/usr/share' "$out/share"
+  '';
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm0555 mysqltuner.pl $out/bin/mysqltuner
+    install -Dm0444 -t $out/share/mysqltuner basic_passwords.txt vulnerabilities.csv
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Make recommendations for increased performance and stability of MariaDB/MySQL";
+    homepage = "https://github.com/major/MySQLTuner-perl";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ peterhoeg shamilton ];
+    mainProgram = "mysqltuner";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nagstamon/default.nix b/nixpkgs/pkgs/tools/misc/nagstamon/default.nix
new file mode 100644
index 000000000000..e9f76dbf22d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nagstamon/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchurl, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "nagstamon";
+  version = "3.2.1";
+
+  src = fetchurl {
+    url = "https://nagstamon.ifw-dresden.de/files/stable/Nagstamon-${version}.tar.gz";
+    sha256 = "1048x55g3nlyyggn6a36xmj24w4hv08llg58f4hzc0fwg074cd58";
+  };
+
+  # Test assumes darwin
+  doCheck = false;
+
+  propagatedBuildInputs = with pythonPackages; [ configparser pyqt5 psutil requests
+     beautifulsoup4 keyring requests-kerberos kerberos lxml ];
+
+  meta = with lib; {
+    description = "A status monitor for the desktop";
+    homepage = "https://nagstamon.ifw-dresden.de/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    # fails to install with:
+    # TypeError: cannot unpack non-iterable bool object
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nanoemoji/default.nix b/nixpkgs/pkgs/tools/misc/nanoemoji/default.nix
new file mode 100644
index 000000000000..a4fb6768d0bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nanoemoji/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, python3
+, fetchFromGitHub
+, resvg
+, pngquant
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "nanoemoji";
+  version = "0.15.1";
+
+  src = fetchFromGitHub {
+    owner = "googlefonts";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-P/lT0PnjTdYzyttICzszu4OL5kj+X8GHZ8doL3tpXQM=";
+  };
+  patches = [
+    # this is necessary because the tests clear PATH/PYTHONPATH otherwise
+    ./test-pythonpath.patch
+    # minor difference in the test output, most likely due to different dependency versions
+    ./fix-test.patch
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools-scm
+    pythonRelaxDepsHook
+
+    pngquant
+    resvg
+  ];
+
+  # these two packages are just prebuilt wheels containing the respective binaries
+  pythonRemoveDeps = [ "pngquant-cli" "resvg-cli" ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    absl-py
+    fonttools
+    lxml
+    ninja
+    picosvg
+    pillow
+    regex
+    toml
+    tomlkit
+    ufo2ft
+    ufolib2
+    zopfli
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+
+    ninja
+    picosvg
+  ];
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ pngquant resvg ]}"
+  ];
+
+  preCheck = ''
+    # make sure the built binaries (nanoemoji/maximum_color) can be found by the test
+    export PATH="$out/bin:$PATH"
+  '';
+
+  meta = with lib; {
+    description = "A wee tool to build color fonts";
+    homepage = "https://github.com/googlefonts/nanoemoji";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ _999eagle ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nanoemoji/fix-test.patch b/nixpkgs/pkgs/tools/misc/nanoemoji/fix-test.patch
new file mode 100644
index 000000000000..4582df9ea5b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nanoemoji/fix-test.patch
@@ -0,0 +1,24 @@
+--- a/tests/proportional_cbdt.ttx
++++ b/tests/proportional_cbdt.ttx
+@@ -13,7 +13,7 @@
+     <mtx name=".notdef" width="0" lsb="5"/>
+     <mtx name=".space" width="0" lsb="0"/>
+     <mtx name="e000" width="110" lsb="0"/>
+-    <mtx name="e001" width="73" lsb="0"/>
++    <mtx name="e001" width="74" lsb="0"/>
+   </hmtx>
+ 
+   <cmap>
+@@ -79,10 +79,10 @@
+       <cbdt_bitmap_format_17 name="e001">
+         <SmallGlyphMetrics>
+           <height value="128"/>
+-          <width value="85"/>
++          <width value="86"/>
+           <BearingX value="0"/>
+           <BearingY value="104"/>
+-          <Advance value="85"/>
++          <Advance value="86"/>
+         </SmallGlyphMetrics>
+         <extfileimagedata value="e001.png"/>
+       </cbdt_bitmap_format_17>
diff --git a/nixpkgs/pkgs/tools/misc/nanoemoji/test-pythonpath.patch b/nixpkgs/pkgs/tools/misc/nanoemoji/test-pythonpath.patch
new file mode 100644
index 000000000000..12733224560c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nanoemoji/test-pythonpath.patch
@@ -0,0 +1,14 @@
+--- a/tests/test_helper.py
++++ b/tests/test_helper.py
+@@ -269,9 +269,9 @@
+     print("subprocess:", " ".join(cmd))  # very useful on failure
+     env = {
+         # We may need to find nanoemoji and other pip-installed cli tools
+-        "PATH": str(Path(shutil.which("nanoemoji")).parent),
++        "PATH": str(Path(shutil.which("nanoemoji")).parent) + ":" + os.environ["PATH"],
+         # We may need to find test modules
+-        "PYTHONPATH": os.pathsep.join((str(Path(__file__).parent),)),
++        "PYTHONPATH": os.pathsep.join((str(Path(__file__).parent),)) + ":" + os.environ["PYTHONPATH"],
+     }
+     # Needed for windows CI to function; ref https://github.com/appveyor/ci/issues/1995
+     if "SYSTEMROOT" in os.environ:
diff --git a/nixpkgs/pkgs/tools/misc/natls/default.nix b/nixpkgs/pkgs/tools/misc/natls/default.nix
new file mode 100644
index 000000000000..205905224f83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/natls/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "natls";
+  version = "2.1.14";
+
+  src = fetchFromGitHub {
+    owner = "willdoescode";
+    repo = "nat";
+    rev = "v${version}";
+    sha256 = "sha256-4x92r6V9AvEO88gFofPTUt+mS7ZhmptDn/8O4pizSRg=";
+  };
+
+  cargoSha256 = "sha256-Am4HmfmhskKxcp1iWod5z3caHwsdo31qCaVi0UxTXAg=";
+
+  meta = with lib; {
+    description = "the 'ls' replacement you never knew you needed";
+    homepage = "https://github.com/willdoescode/nat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ msfjarvis ];
+    mainProgram = "natls";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/default.nix b/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/default.nix
new file mode 100644
index 000000000000..54e85c063633
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, pkg-config
+, dbus
+, dconf
+, fetchFromGitHub
+, glib
+, gnome
+, gobject-introspection
+, gsettings-desktop-schemas
+, gtk3
+, python3
+, wrapGAppsHook
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "nautilus-open-any-terminal";
+  version = "0.5.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "Stunkymonkey";
+    repo = pname;
+    rev = version;
+    hash = "sha256-fcTbt8O/7KEme5+GlDD7hMMcE2RaYqFdfojzJ1KhnA0=";
+  };
+
+  patches = [ ./hardcode-gsettings.patch ];
+
+  nativeBuildInputs = [
+    glib
+    gobject-introspection
+    pkg-config
+    wrapGAppsHook
+    python3.pkgs.setuptools
+  ];
+
+  buildInputs = [
+    dbus
+    dconf
+    gnome.nautilus
+    gnome.nautilus-python
+    gsettings-desktop-schemas
+    gtk3
+    python3.pkgs.pygobject3
+  ];
+
+  postPatch = ''
+    substituteInPlace nautilus_open_any_terminal/nautilus_open_any_terminal.py \
+      --subst-var-by gsettings_path ${glib.makeSchemaPath "$out" "$name"}
+  '';
+
+  postInstall = ''
+    glib-compile-schemas "$out/share/glib-2.0/schemas"
+  '';
+
+  meta = with lib; {
+    description = "Extension for nautilus, which adds an context-entry for opening other terminal-emulators then `gnome-terminal`";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ stunkymonkey ];
+    homepage = "https://github.com/Stunkymonkey/nautilus-open-any-terminal";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/hardcode-gsettings.patch b/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/hardcode-gsettings.patch
new file mode 100644
index 000000000000..5116d5110ca1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/hardcode-gsettings.patch
@@ -0,0 +1,31 @@
+diff --git a/nautilus_open_any_terminal/nautilus_open_any_terminal.py b/nautilus_open_any_terminal/nautilus_open_any_terminal.py
+index b02a995..a616399 100644
+--- a/nautilus_open_any_terminal/nautilus_open_any_terminal.py
++++ b/nautilus_open_any_terminal/nautilus_open_any_terminal.py
+@@ -228,9 +228,10 @@ def set_terminal_args(*args):
+         """Provide keyboard shortcuts for opening terminals in Nautilus."""
+
+         def __init__(self):
+-            gsettings_source = Gio.SettingsSchemaSource.get_default()
+-            if gsettings_source.lookup(GSETTINGS_PATH, True):
+-                self._gsettings = Gio.Settings.new(GSETTINGS_PATH)
++            gsettings_source = Gio.SettingsSchemaSource.new_from_directory("@gsettings_path@", Gio.SettingsSchemaSource.get_default(), True)
++            if True:
++                _schema = gsettings_source.lookup(GSETTINGS_PATH, False)
++                self._gsettings = Gio.Settings.new_full(_schema, None, None);
+                 self._gsettings.connect("changed", self._bind_shortcut)
+                 self._create_accel_group()
+             self._window = None
+@@ -326,9 +327,10 @@ class OpenAnyTerminalExtension(GObject.GObject, Nautilus.MenuProvider):
+         return items
+ 
+ 
+-source = Gio.SettingsSchemaSource.get_default()
+-if source is not None and source.lookup(GSETTINGS_PATH, True):
+-    _gsettings = Gio.Settings.new(GSETTINGS_PATH)
++source = Gio.SettingsSchemaSource.new_from_directory("@gsettings_path@", Gio.SettingsSchemaSource.get_default(), True)
++if True:
++    _schema = source.lookup(GSETTINGS_PATH, False)
++    _gsettings = Gio.Settings.new_full(_schema, None, None);
+     _gsettings.connect("changed", set_terminal_args)
+     set_terminal_args()
diff --git a/nixpkgs/pkgs/tools/misc/nb/default.nix b/nixpkgs/pkgs/tools/misc/nb/default.nix
new file mode 100644
index 000000000000..141b80b15a5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nb/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, lib, fetchFromGitHub, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "nb";
+  version = "7.11.0";
+
+  src = fetchFromGitHub {
+    owner = "xwmx";
+    repo = "nb";
+    rev = version;
+    sha256 = "sha256-A7RC8Zsj746lVm9uqD1W+9gRA/zC+p12WsVVudGBxa8=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    mv nb $out/bin/
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd nb etc/nb-completion.{bash,zsh,fish}
+  '';
+
+  meta = with lib; {
+    description = "A command line note-taking, bookmarking, archiving, and knowledge base application";
+    longDescription = ''
+      `nb` creates notes in text-based formats like Markdown, Emacs Org mode,
+      and LaTeX, can work with files in any format, can import and export notes
+      to many document formats, and can create private, password-protected
+      encrypted notes and bookmarks. With `nb`, you can write notes using Vim,
+      Emacs, VS Code, Sublime Text, and any other text editor you like. `nb`
+      works in any standard Linux / Unix environment, including macOS and
+      Windows via WSL. Optional dependencies can be installed to enhance
+      functionality, but `nb` works great without them.
+
+      `nb` is also a powerful text-based CLI bookmarking system. Page
+      information is automatically downloaded, compiled, and saved into normal
+      Markdown documents made for humans, so bookmarks are easy to edit just
+      like any other note.
+
+      `nb` uses Git in the background to automatically record changes and sync
+      notebooks with remote repositories. `nb` can also be configured to sync
+      notebooks using a general purpose syncing utility like Dropbox so notes
+      can be edited in other apps on any device.
+
+      `nb` is designed to be portable, future-focused, and vendor independent,
+      providing a full-featured and intuitive experience within a highly
+      composable user-centric text interface. The entire program is a single
+      well-tested shell script that can be installed, copied, or curled almost
+      anywhere and just work, using progressive enhancement for various
+      experience improvements in more capable environments. `nb` works great
+      whether you have one notebook with just a few notes or dozens of
+      notebooks containing thousands of notes, bookmarks, and other items. `nb`
+      makes it easy to incorporate other tools, writing apps, and workflows.
+      `nb` can be used a little, a lot, once in a while, or for just a subset
+      of features. `nb` is flexible.
+    '';
+    homepage = "https://xwmx.github.io/nb/";
+    license = licenses.agpl3Plus;
+    maintainers = [ maintainers.toonn ];
+    platforms = platforms.all;
+    mainProgram = "nb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nbench/default.nix b/nixpkgs/pkgs/tools/misc/nbench/default.nix
new file mode 100644
index 000000000000..f1af32cc0e3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nbench/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "nbench-byte";
+  version = "2.2.3";
+
+  src = fetchurl {
+    url = "http://www.math.utah.edu/~mayer/linux/${pname}-${version}.tar.gz";
+    sha256 = "1b01j7nmm3wd92ngvsmn2sbw43sl9fpx4xxmkrink68fz1rx0gbj";
+  };
+
+  prePatch = ''
+    substituteInPlace nbench1.h --replace '"NNET.DAT"' "\"$out/NNET.DAT\""
+    substituteInPlace sysspec.h --replace "malloc.h" "stdlib.h"
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile --replace "-static" ""
+  '';
+
+  buildInputs = lib.optionals stdenv.hostPlatform.isGnu [
+    stdenv.cc.libc.static
+  ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp nbench $out/bin
+    cp NNET.DAT $out
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.math.utah.edu/~mayer/linux/bmark.html";
+    description = "A synthetic computing benchmark program";
+    platforms = platforms.unix;
+    maintainers = with lib.maintainers; [ bennofs ];
+    mainProgram = "nbench";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nbqa/default.nix b/nixpkgs/pkgs/tools/misc/nbqa/default.nix
new file mode 100644
index 000000000000..0c55c78f7b49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nbqa/default.nix
@@ -0,0 +1,99 @@
+{ black
+, blacken-docs
+, fetchFromGitHub
+, lib
+, python3
+, ruff
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "nbqa";
+  version = "1.7.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "nbQA-dev";
+    repo = "nbQA";
+    rev = "refs/tags/${version}";
+    hash = "sha256-a/FuhJyf8BmZekUibzEiGgkHL51A+75R4a6S+h5i28s=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  passthru.optional-dependencies = {
+    black = [ black ];
+    blacken-docs = [ blacken-docs ];
+    flake8 = [ python3.pkgs.flake8 ];
+    isort = [ python3.pkgs.isort ];
+    jupytext = [ python3.pkgs.jupytext ];
+    mypy = [ python3.pkgs.mypy ];
+    pylint = [ python3.pkgs.pylint ];
+    pyupgrade = [ python3.pkgs.pyupgrade ];
+    ruff = [ ruff ];
+  };
+
+  propagatedBuildInputs = with python3.pkgs;
+    [
+      autopep8
+      ipython
+      tokenize-rt
+      tomli
+    ]
+    ++ builtins.attrValues passthru.optional-dependencies;
+
+  postPatch = ''
+    # Force using the Ruff executable rather than the Python package
+    substituteInPlace nbqa/__main__.py --replace 'if shell:' 'if shell or main_command == "ruff":'
+  '';
+
+  preCheck = ''
+    # Allow the tests to run `nbqa` itself from the path
+    export PATH="$out/bin":"$PATH"
+  '';
+
+  nativeCheckInputs =
+    [
+      black
+      ruff
+    ]
+    ++ (with python3.pkgs; [
+      autoflake
+      flake8
+      isort
+      jupytext
+      mdformat
+      pre-commit-hooks
+      pydocstyle
+      pylint
+      pytestCheckHook
+      pyupgrade
+      yapf
+    ]);
+
+  disabledTests = [
+    # Test data not found
+    "test_black_multiple_files"
+    "test_black_return_code"
+    "test_grep"
+    "test_jupytext_on_folder"
+    "test_mypy_works"
+    "test_running_in_different_dir_works"
+    "test_unable_to_reconstruct_message_pythonpath"
+    "test_with_subcommand"
+  ];
+
+  disabledTestPaths = [
+    # Test data not found
+    "tests/test_include_exclude.py"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/nbQA-dev/nbQA";
+    changelog = "https://nbqa.readthedocs.io/en/latest/history.html";
+    description = "Run ruff, isort, pyupgrade, mypy, pylint, flake8, black, blacken-docs, and more on Jupyter Notebooks";
+    license = licenses.mit;
+    maintainers = with maintainers; [ l0b0 ];
+    mainProgram = "nbqa";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ncdu/1.nix b/nixpkgs/pkgs/tools/misc/ncdu/1.nix
new file mode 100644
index 000000000000..09289ea745da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ncdu/1.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "ncdu";
+  version = "1.18.1";
+
+  src = fetchurl {
+    url = "https://dev.yorhel.nl/download/${pname}-${version}.tar.gz";
+    sha256 = "sha256-fA+h6ynYWq7UuhdBZL27jwEbXDkNAXxX1mj8cjEzJAU=";
+  };
+
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    description = "Disk usage analyzer with an ncurses interface";
+    homepage = "https://dev.yorhel.nl/ncdu";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "ncdu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ncdu/default.nix b/nixpkgs/pkgs/tools/misc/ncdu/default.nix
new file mode 100644
index 000000000000..47a1365b5367
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ncdu/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchurl
+, ncurses
+, zig_0_11
+, installShellFiles
+, testers
+, pie ? stdenv.isDarwin
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ncdu";
+  version = "2.3";
+
+  src = fetchurl {
+    url = "https://dev.yorhel.nl/download/ncdu-${finalAttrs.version}.tar.gz";
+    hash = "sha256-u84dHHDxJHZxvk6iE12MUs0ppwivXtYs7Np9xqgACjw=";
+  };
+
+  nativeBuildInputs = [
+    zig_0_11.hook
+    installShellFiles
+  ];
+
+  buildInputs = [
+    ncurses
+  ];
+
+  zigBuildFlags = lib.optional pie "-Dpie=true";
+
+  postInstall = ''
+    installManPage ncdu.1
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+  };
+
+  meta = {
+    homepage = "https://dev.yorhel.nl/ncdu";
+    description = "Disk usage analyzer with an ncurses interface";
+    changelog = "https://dev.yorhel.nl/ncdu/changes2";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ pSub rodrgz ];
+    inherit (zig_0_11.meta) platforms;
+    mainProgram = "ncdu";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/near-cli/default.nix b/nixpkgs/pkgs/tools/misc/near-cli/default.nix
new file mode 100644
index 000000000000..8741f694782c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/near-cli/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, mkYarnPackage
+, fetchFromGitHub
+, fetchYarnDeps
+}:
+
+mkYarnPackage rec {
+  pname = "near-cli";
+  version = "3.4.2";
+
+  src = fetchFromGitHub {
+    owner = "near";
+    repo = "near-cli";
+    rev = "v${version}";
+    hash = "sha256-C+viNYk+6BA11cdi5GqARU3QTTONTR2B2VEZf/SeeSQ=";
+  };
+
+  packageJSON = ./package.json;
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-G/Y8xGGOlXH37Bup7mKhEaNh05GTP5CC9e/Xw4TBNMU=";
+  };
+
+  doDist = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/lib/node_modules"
+    mv deps/near-cli "$out/lib/node_modules"
+    rm "$out/lib/node_modules/near-cli/node_modules"
+    mv node_modules "$out/lib/node_modules/near-cli"
+
+    mkdir -p "$out/bin"
+    ln -s "$out/lib/node_modules/near-cli/bin/near" "$out/bin"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    changelog = "https://github.com/near/near-cli/blob/${src.rev}/CHANGELOG.md";
+    description = "General purpose command line tools for interacting with NEAR Protocol";
+    homepage = "https://github.com/near/near-cli";
+    license = with lib.licenses; [ asl20 mit ];
+    mainProgram = "near";
+    maintainers = with lib.maintainers; [ ekleog ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/near-cli/package.json b/nixpkgs/pkgs/tools/misc/near-cli/package.json
new file mode 100644
index 000000000000..a6b794a99115
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/near-cli/package.json
@@ -0,0 +1,83 @@
+{
+  "name": "near-cli",
+  "version": "3.4.2",
+  "description": "General purpose command line tools for interacting with NEAR Protocol",
+  "engines": {
+    "node": ">= 12"
+  },
+  "main": "index.js",
+  "scripts": {
+    "pretest": "rm -rf tmp-project",
+    "test": "npm run test:unit && npm run test:integration",
+    "test:unit": "jest",
+    "test:integration": "bash ./test/index.sh",
+    "lint": "eslint .",
+    "fix": "eslint . --fix"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/near/near-cli.git"
+  },
+  "author": "Jane Degtiareva",
+  "license": "(MIT AND Apache-2.0)",
+  "bugs": {
+    "url": "https://github.com/near/near-cli/issues"
+  },
+  "homepage": "https://github.com/near/near-cli#readme",
+  "bin": {
+    "near": "bin/near"
+  },
+  "devDependencies": {
+    "danger": "^10.6.6",
+    "lodash": "^4.17.21",
+    "eslint": "^7.0.0",
+    "jest": "^26.1.0",
+    "strip-ansi": "^7.0.0",
+    "strip-ansi-cli": "^3.0.0",
+    "ts-node": "^10.4.0",
+    "typescript": "^4.5.4"
+  },
+  "dependencies": {
+    "analytics-node": "^6.1.0",
+    "ascii-table": "0.0.9",
+    "bn.js": "^5.1.1",
+    "bs58": "^4.0.1",
+    "chalk": "^4.0.0",
+    "flagged-respawn": "^1.0.1",
+    "is-ci": "^2.0.0",
+    "jest-environment-node": "^27.0.6",
+    "ncp": "^2.0.0",
+    "near-api-js": "^0.44.2",
+    "near-seed-phrase": "^0.2.0",
+    "open": "^8.0.7",
+    "rimraf": "^3.0.0",
+    "stoppable": "^1.1.0",
+    "tcp-port-used": "^1.0.1",
+    "update-notifier": "^5.0.0",
+    "uuid": "^8.0.0",
+    "v8flags": "^3.1.3",
+    "yargs": "^16.0.3"
+  },
+  "optionalDependencies": {
+    "@ledgerhq/hw-transport-node-hid": "^6.1.0",
+    "near-ledger-js": "^0.2.0"
+  },
+  "keywords": [
+    "blockchain",
+    "crypto",
+    "dapps",
+    "distributed",
+    "applications",
+    "distributed applications"
+  ],
+  "files": [
+    "bin",
+    "commands",
+    "middleware",
+    "utils",
+    "config.js",
+    "get-config.js",
+    "test_environment.js",
+    "context"
+  ]
+}
diff --git a/nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix b/nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix
new file mode 100644
index 000000000000..e6b675e4d36f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "neo-cowsay";
+  version = "2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "Code-Hex";
+    repo = "Neo-cowsay";
+    rev = "v${version}";
+    hash = "sha256-DmIjqBTIzwkQ8aJ6xCgIwjDtczlTH5AKbPKFUGx3qQ8=";
+  };
+
+  vendorHash = "sha256-gBURmodXkod4fukw6LWEY+MBxPcf4vn/f6K78UR77n0=";
+
+  modRoot = "./cmd";
+
+  doCheck = false;
+
+  subPackages = [ "cowsay" "cowthink" ];
+
+  meta = with lib; {
+    description = "Cowsay reborn, written in Go";
+    homepage = "https://github.com/Code-Hex/Neo-cowsay";
+    license = with licenses; [ artistic1 /* or */ gpl3 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/neofetch/default.nix b/nixpkgs/pkgs/tools/misc/neofetch/default.nix
new file mode 100644
index 000000000000..806655ffe9f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/neofetch/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenvNoCC, fetchFromGitHub, bash, makeWrapper, pciutils
+, x11Support ? true, ueberzug, fetchpatch
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "neofetch";
+  version = "unstable-2021-12-10";
+
+  src = fetchFromGitHub {
+    owner = "dylanaraps";
+    repo = "neofetch";
+    rev = "ccd5d9f52609bbdcd5d8fa78c4fdb0f12954125f";
+    sha256 = "sha256-9MoX6ykqvd2iB0VrZCfhSyhtztMpBTukeKejfAWYW1w=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/dylanaraps/neofetch/commit/413c32e55dc16f0360f8e84af2b59fe45505f81b.patch";
+      sha256 = "1fapdg9z79f0j3vw7fgi72b54aw4brn42bjsj48brbvg3ixsciph";
+      name = "avoid_overwriting_gio_extra_modules_env_var.patch";
+    })
+    # https://github.com/dylanaraps/neofetch/pull/2114
+    (fetchpatch {
+      url = "https://github.com/dylanaraps/neofetch/commit/c4eb4ec7783bb94cca0dbdc96db45a4d965956d2.patch";
+      sha256 = "sha256-F6Q4dUtfmR28VxLbITiLFJ44FjG4T1Cvuz3a0nLisMs=";
+      name = "update_old_nixos_logo.patch";
+    })
+    # https://github.com/dylanaraps/neofetch/pull/2157
+    (fetchpatch {
+      url = "https://github.com/dylanaraps/neofetch/commit/de253afcf41bab441dc58d34cae654040cab7451.patch";
+      sha256 = "sha256-3i7WnCWNfsRjbenTULmKHft5o/o176imzforNmuoJwo=";
+      name = "improve_detect_nixos_version.patch";
+    })
+  ];
+
+  outputs = [ "out" "man" ];
+
+  strictDeps = true;
+  buildInputs = [ bash ];
+  nativeBuildInputs = [ makeWrapper ];
+  postPatch = ''
+    patchShebangs --host neofetch
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/neofetch \
+      --prefix PATH : ${lib.makeBinPath ([ pciutils ] ++ lib.optional x11Support ueberzug) }
+  '';
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "SYSCONFDIR=${placeholder "out"}/etc"
+  ];
+
+  meta = with lib; {
+    description = "A fast, highly customizable system info script";
+    homepage = "https://github.com/dylanaraps/neofetch";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ alibabzo konimex ];
+    mainProgram = "neofetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/netbootxyz-efi/default.nix b/nixpkgs/pkgs/tools/misc/netbootxyz-efi/default.nix
new file mode 100644
index 000000000000..efa16daaeacf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/netbootxyz-efi/default.nix
@@ -0,0 +1,21 @@
+{ lib
+, fetchurl
+}:
+
+let
+  pname = "netboot.xyz-efi";
+  version = "2.0.75";
+in fetchurl {
+  name = "${pname}-${version}";
+
+  url = "https://github.com/netbootxyz/netboot.xyz/releases/download/${version}/netboot.xyz.efi";
+  sha256 = "sha256-VaTUwX3S5Bj5eUZAspXNaVm8Y51hURL3xBb1tRdj6Zw=";
+
+  meta = with lib; {
+    homepage = "https://netboot.xyz/";
+    description = "A tool to boot OS installers and utilities over the network, to be run from a bootloader";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Enzime ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix b/nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix
new file mode 100644
index 000000000000..edfe912f3983
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  version = "1.2.2";
+  pname = "nginx-config-formatter";
+
+  src = fetchFromGitHub {
+    owner = "slomkowski";
+    repo = "nginx-config-formatter";
+    rev = "v${version}";
+    sha256 = "sha256-EUoOfkoVsNpIAwDaQ4NH8MkRIJZI8qeuuHUDE6LuLiI=";
+  };
+
+  buildInputs = [ python3 ];
+
+  doCheck = true;
+  checkPhase = ''
+    python3 $src/test_nginxfmt.py
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 0755 $src/nginxfmt.py $out/bin/nginxfmt
+  '';
+
+  meta = with lib; {
+    description = "nginx config file formatter";
+    maintainers = with maintainers; [ Baughn ];
+    license = licenses.asl20;
+    homepage = "https://github.com/slomkowski/nginx-config-formatter";
+    mainProgram = "nginxfmt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nms/default.nix b/nixpkgs/pkgs/tools/misc/nms/default.nix
new file mode 100644
index 000000000000..e74f18557f32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nms/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "nms";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "bartobri";
+    repo = "no-more-secrets";
+    rev = "v${version}";
+    sha256 = "sha256-QVCEpplsZCSQ+Fq1LBtCuPBvnzgLsmLcSrxR+e4nA5I=";
+  };
+
+  buildFlags = [ "nms" "sneakers" ];
+  installFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bartobri/no-more-secrets";
+    description = ''
+      A command line tool that recreates the famous data decryption
+      effect seen in the 1992 movie Sneakers.
+    '';
+    license = licenses.gpl3;
+    maintainers = [ maintainers.infinisil ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/node-glob/default.nix b/nixpkgs/pkgs/tools/misc/node-glob/default.nix
new file mode 100644
index 000000000000..aba4690bbba4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/node-glob/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "glob";
+  version = "10.3.3";
+
+  src = fetchFromGitHub {
+    owner = "isaacs";
+    repo = "node-glob";
+    rev = "v${version}";
+    hash = "sha256-oLlNhQOnu/hlKjNWa5vjqslz1EarZJOpUEXUB+vGQvc=";
+  };
+
+  npmDepsHash = "sha256-78oODw+CBCk5JRJbDqLqVmzTVImP7Z7o6jRIimDxZDQ=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/isaacs/node-glob/blob/${src.rev}/changelog.md";
+    description = "A little globber for Node.js";
+    homepage = "https://github.com/isaacs/node-glob";
+    license = lib.licenses.isc;
+    mainProgram = "glob";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nomino/default.nix b/nixpkgs/pkgs/tools/misc/nomino/default.nix
new file mode 100644
index 000000000000..e4b7acfa8883
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nomino/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nomino";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "yaa110";
+    repo = pname;
+    rev = version;
+    hash = "sha256-XT8+mwfDFsBVEcpttus1KeIS+4sKqJMJTwqYI3LfW5k=";
+  };
+
+  cargoHash = "sha256-KpjGwqjVORyxXJbMi2Ok7s6gRmM/aJRTsPtu/0PgGr8=";
+
+  meta = with lib; {
+    description = "Batch rename utility for developers";
+    homepage = "https://github.com/yaa110/nomino";
+    changelog = "https://github.com/yaa110/nomino/releases/tag/${src.rev}";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "nomino";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/noteshrink/default.nix b/nixpkgs/pkgs/tools/misc/noteshrink/default.nix
new file mode 100644
index 000000000000..4c76c332645f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/noteshrink/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, python3, imagemagick }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "noteshrink";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner  = "mzucker";
+    repo   = "noteshrink";
+    rev    = version;
+    sha256 = "0xhrvg3d8ffnbbizsrfppcd2y98znvkgxjdmvbvin458m2rwccka";
+  };
+
+  propagatedBuildInputs = [ numpy scipy imagemagick pillow ];
+
+  meta = with lib; {
+    description = "Convert scans of handwritten notes to beautiful, compact PDFs";
+    homepage    = "https://mzucker.github.io/2016/09/20/noteshrink.html";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ rnhmjoj ];
+    mainProgram = "noteshrink";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/noti/default.nix b/nixpkgs/pkgs/tools/misc/noti/default.nix
new file mode 100644
index 000000000000..82d3dd4c2ef4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/noti/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, Cocoa
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "noti";
+  version = "3.7.0";
+
+  src = fetchFromGitHub {
+    owner = "variadico";
+    repo = "noti";
+    rev = version;
+    hash = "sha256-8CHSbKOiWNYqKBU1kqQm5t02DJq0JfoIaPsU6Ylc46E=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optional stdenv.isDarwin Cocoa;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/variadico/noti/internal/command.Version=${version}"
+  ];
+
+  preCheck = ''
+    export PATH=$out/bin:$PATH
+  '';
+
+  postInstall = ''
+    installManPage docs/man/dist/*
+  '';
+
+  meta = with lib; {
+    description = "Monitor a process and trigger a notification";
+    longDescription = ''
+      Monitor a process and trigger a notification.
+
+      Never sit and wait for some long-running process to finish. Noti can alert
+      you when it's done. You can receive messages on your computer or phone.
+    '';
+    homepage = "https://github.com/variadico/noti";
+    license = licenses.mit;
+    maintainers = with maintainers; [ stites marsam ];
+    mainProgram = "noti";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/notify-desktop/default.nix b/nixpkgs/pkgs/tools/misc/notify-desktop/default.nix
new file mode 100644
index 000000000000..0265e5dd8974
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/notify-desktop/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, dbus, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "notify-desktop";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "nowrep";
+    repo = "notify-desktop";
+    rev = "9863919fb4ce7820810ac14a09a46ee73c3d56cc";
+    sha256 = "1brcvl2fx0yzxj9mc8hzfl32zdka1f1bxpzsclcsjplyakyinr1a";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ dbus ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 755 bin/notify-desktop $out/bin/notify-desktop
+  '';
+
+  meta = with lib; {
+    description = "Little application that lets you send desktop notifications with one command";
+    longDescription = ''
+      It's basically clone of notify-send from libnotify,
+      but it supports reusing notifications on screen by passing its ID.
+      It also does not use any external dependencies (except from libdbus of course).
+    '';
+    homepage = "https://github.com/nowrep/notify-desktop";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ylwghst ];
+    mainProgram = "notify-desktop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/notify/default.nix b/nixpkgs/pkgs/tools/misc/notify/default.nix
new file mode 100644
index 000000000000..efbbd7ce6eb3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/notify/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+}:
+
+buildGoModule rec {
+  pname = "notify";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-9oakHqDhOZyqzlVqHPjTsG2f780DABt0+JRckmkWW64=";
+  };
+
+  vendorHash = "sha256-/FJECY1x9nMqOIzqdN6T+vdi9qjjY0YAoqvVNf0kN3s=";
+
+  modRoot = ".";
+  subPackages = [
+    "cmd/notify/"
+  ];
+
+  # Test files are not part of the release tarball
+  doCheck = false;
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Notify allows sending the output from any tool to Slack, Discord and Telegram";
+    longDescription = ''
+      Notify is a helper utility written in Go that allows you to post the output from any tool
+      to Slack, Discord, and Telegram.
+    '';
+    homepage = "https://github.com/projectdiscovery/notify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hanemile ];
+    mainProgram = "notify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ntfy-sh/default.nix b/nixpkgs/pkgs/tools/misc/ntfy-sh/default.nix
new file mode 100644
index 000000000000..1bfde93c39e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ntfy-sh/default.nix
@@ -0,0 +1,69 @@
+{ lib, buildGoModule, fetchFromGitHub, buildNpmPackage
+, nixosTests, debianutils, mkdocs, python3, python3Packages
+}:
+
+
+buildGoModule rec {
+  pname = "ntfy-sh";
+  version = "2.8.0";
+
+  src = fetchFromGitHub {
+    owner = "binwiederhier";
+    repo = "ntfy";
+    rev = "v${version}";
+    hash = "sha256-YO6nf1tY+tEgPlvq7JDgeG0ywE8+HEpZH7ToFzvYfvY=";
+  };
+
+  vendorHash = "sha256-Gvk/EI5b6AIYBCKYqSFKva0SfiWI/oNCeq7cTyVRpwY=";
+
+  ui = buildNpmPackage {
+    inherit src version;
+    pname = "ntfy-sh-ui";
+    npmDepsHash = "sha256-G2yEIiKc/gxcUPS+97B68C/HukabGZAX2XY1gstGBvg=";
+
+    prePatch = ''
+      cd web/
+    '';
+
+    installPhase = ''
+      mv build/index.html build/app.html
+      rm build/config.js
+      mkdir -p $out
+      mv build/ $out/site
+    '';
+  };
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  nativeBuildInputs = [
+    debianutils
+    mkdocs
+    python3
+    python3Packages.mkdocs-material
+    python3Packages.mkdocs-minify-plugin
+    python3Packages.mkdocs-simple-hooks
+  ];
+
+  postPatch = ''
+    sed -i 's# /bin/echo# echo#' Makefile
+  '';
+
+  preBuild = ''
+    cp -r ${ui}/site/ server/
+    make docs-build
+  '';
+
+  passthru = {
+    updateScript = ./update.sh;
+    tests.ntfy-sh = nixosTests.ntfy-sh;
+  };
+
+  meta = with lib; {
+    description = "Send push notifications to your phone or desktop via PUT/POST";
+    homepage = "https://ntfy.sh";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ arjan-s fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ntfy-sh/update.sh b/nixpkgs/pkgs/tools/misc/ntfy-sh/update.sh
new file mode 100755
index 000000000000..748c4df65427
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ntfy-sh/update.sh
@@ -0,0 +1,22 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p gnugrep gnused coreutils curl wget jq nix-update prefetch-npm-deps nodejs
+
+set -euo pipefail
+pushd "$(dirname "${BASH_SOURCE[0]}")"
+
+version=$(curl -s "https://api.github.com/repos/binwiederhier/ntfy/tags" | jq -r .[0].name | grep -oP "^v\K.*")
+url="https://raw.githubusercontent.com/binwiederhier/ntfy/v$version/"
+
+if [[ "$UPDATE_NIX_OLD_VERSION" == "$version" ]]; then
+    echo "Already up to date!"
+    exit 0
+fi
+
+rm -f package-lock.json
+wget "$url/web/package-lock.json"
+npm_hash=$(prefetch-npm-deps package-lock.json)
+sed -i 's#npmDepsHash = "[^"]*"#npmDepsHash = "'"$npm_hash"'"#' default.nix
+rm -f package-lock.json
+
+popd
+nix-update ntfy-sh --version $version
diff --git a/nixpkgs/pkgs/tools/misc/ntfy/default.nix b/nixpkgs/pkgs/tools/misc/ntfy/default.nix
new file mode 100644
index 000000000000..fc9fd078ab20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ntfy/default.nix
@@ -0,0 +1,93 @@
+{ lib
+, stdenv
+, python39
+, fetchFromGitHub
+, fetchpatch
+, withXmpp ? !stdenv.isDarwin
+, withMatrix ? true
+, withSlack ? true
+, withEmoji ? true
+, withPid ? true
+, withDbus ? stdenv.isLinux
+}:
+
+let
+  python = python39.override {
+    packageOverrides = self: super: {
+      ntfy-webpush = self.callPackage ./webpush.nix { };
+
+      # databases, on which slack-sdk depends, is incompatible with SQLAlchemy 2.0
+      sqlalchemy = super.sqlalchemy_1_4;
+
+      django = super.django_3;
+    };
+  };
+in python.pkgs.buildPythonApplication rec {
+  pname = "ntfy";
+  version = "2.7.0";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "dschep";
+    repo = "ntfy";
+    rev = "v${version}";
+    sha256 = "09f02cn4i1l2aksb3azwfb70axqhn7d0d0vl2r6640hqr74nc1cv";
+  };
+
+  nativeCheckInputs = with python.pkgs; [
+    mock
+  ];
+
+  propagatedBuildInputs = with python.pkgs; ([
+    requests ruamel-yaml appdirs
+    ntfy-webpush
+  ] ++ (lib.optionals withXmpp [
+    sleekxmpp dnspython
+  ]) ++ (lib.optionals withMatrix [
+    matrix-client
+  ]) ++ (lib.optionals withSlack [
+    slack-sdk
+  ]) ++ (lib.optionals withEmoji [
+    emoji
+  ]) ++ (lib.optionals withPid [
+    psutil
+  ]) ++ (lib.optionals withDbus [
+    dbus-python
+  ]));
+
+  patches = [
+    # Fix Slack integration no longer working.
+    # From https://github.com/dschep/ntfy/pull/229 - "Swap Slacker for Slack SDK"
+    (fetchpatch {
+      name = "ntfy-Swap-Slacker-for-Slack-SDK.patch";
+      url = "https://github.com/dschep/ntfy/commit/2346e7cfdca84c8f1afc7462a92145c1789deb3e.patch";
+      sha256 = "13k7jbsdx0jx7l5s8whirric76hml5bznkfcxab5xdp88q52kpk7";
+    })
+    # Add compatibility with emoji 2.0
+    # https://github.com/dschep/ntfy/pull/250
+    (fetchpatch {
+      name = "ntfy-Add-compatibility-with-emoji-2.0.patch";
+      url = "https://github.com/dschep/ntfy/commit/4128942bb7a706117e7154a50a73b88f531631fe.patch";
+      sha256 = "sha256-V8dIy/K957CPFQQS1trSI3gZOjOcVNQLgdWY7g17bRw=";
+    })
+  ];
+
+  postPatch = ''
+    # We disable the Darwin specific things because it relies on pyobjc, which we don't have.
+    substituteInPlace setup.py \
+      --replace "':sys_platform == \"darwin\"'" "'darwin'"
+  '';
+
+  checkPhase = ''
+    HOME=$(mktemp -d) ${python.interpreter} setup.py test
+  '';
+
+  meta = with lib; {
+    description = "A utility for sending notifications, on demand and when commands finish";
+    homepage = "http://ntfy.rtfd.org/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ kamilchm ];
+    mainProgram = "ntfy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ntfy/webpush.nix b/nixpkgs/pkgs/tools/misc/ntfy/webpush.nix
new file mode 100644
index 000000000000..cd58c5208e83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ntfy/webpush.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pywebpush
+, py-vapid
+}:
+
+buildPythonPackage rec {
+  pname = "ntfy-webpush";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "dschep";
+    repo = "ntfy-webpush";
+    rev = "v${version}";
+    sha256 = "1dxlvq3glf8yjkn1hdk89rx1s4fi9ygg46yn866a9v7a5a83zx2n";
+  };
+
+  postPatch = ''
+    # break dependency loop
+    substituteInPlace setup.py \
+      --replace "'ntfy', " ""
+  '';
+
+  propagatedBuildInputs = [
+    pywebpush
+    py-vapid
+  ];
+
+  # no tests, just a script
+  doCheck = false;
+
+  meta = with lib; {
+    description = "cloudbell webpush notification support for ntfy";
+    homepage = "https://dschep.github.io/ntfy-webpush/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nurl/Cargo.lock b/nixpkgs/pkgs/tools/misc/nurl/Cargo.lock
new file mode 100644
index 000000000000..2d89af7cda1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nurl/Cargo.lock
@@ -0,0 +1,1559 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
+dependencies = [
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
+dependencies = [
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b6396aa128fe4149d2af114f746eb048b5667e2844cc51ae90830f45de7ccb"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d011140df54d9c4c592974ccd7d694dd4ab5b92ea0436435fa900a211d6b0f6"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "once_cell",
+ "strsim",
+ "terminal_size",
+ "unicase",
+ "unicode-width",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc443334c81a804575546c5a8a79b4913b50e28d69232903604cada1de817ce"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "clap_mangen"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f2e32b579dae093c2424a8b7e2bea09c89da01e1ce5065eb2f0a6f1cc15cc1f"
+dependencies = [
+ "clap",
+ "roff",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "content_inspector"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "enum_dispatch"
+version = "0.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f33313078bb8d4d05a2733a94ac4c2d8a0df9a2b84424ebf4f33bfc224a890e"
+dependencies = [
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gix-features"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f708dc9875d1b3e05c1cbadfd22e5b543c733c511191798587ec479115664221"
+dependencies = [
+ "gix-hash",
+ "gix-trace",
+ "libc",
+]
+
+[[package]]
+name = "gix-hash"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0dd58cdbe7ffa4032fc111864c80d5f8cecd9a2c9736c97ae7e5be834188272"
+dependencies = [
+ "hex",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-path"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfca182d2575ded2ed38280f1ebf75cd5d3790b77e0872de07854cf085821fbe"
+dependencies = [
+ "bstr",
+ "gix-trace",
+ "home",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-trace"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "103eac621617be3ebe0605c9065ca51a223279a23218aaf67d10daa6e452f663"
+
+[[package]]
+name = "gix-url"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "092d3f8f4040ee1b82830224e9002fff69248348af27dfdbcc8536db80283945"
+dependencies = [
+ "bstr",
+ "gix-features",
+ "gix-path",
+ "home",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+dependencies = [
+ "humantime",
+ "serde",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "rustix 0.38.4",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is_ci"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "nix-compat"
+version = "0.1.0"
+source = "git+https://code.tvl.fyi/depot.git:/tvix/nix-compat.git#3ec277c76c43ebe7be6f1fc43b7aad310e58df8b"
+dependencies = [
+ "anyhow",
+ "data-encoding",
+ "glob",
+ "serde",
+ "serde_json",
+ "sha2",
+ "thiserror",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "nu-glob"
+version = "0.82.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a73aed5e2a80f2021866adbd3a4b3013ace1ca06809459b3b208e791eb7729d9"
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "nurl"
+version = "0.3.13"
+dependencies = [
+ "anyhow",
+ "assert_cmd",
+ "bstr",
+ "clap",
+ "clap_complete",
+ "clap_mangen",
+ "data-encoding",
+ "enum_dispatch",
+ "gix-url",
+ "is-terminal",
+ "itertools 0.11.0",
+ "nix-compat",
+ "nu-glob",
+ "once_cell",
+ "owo-colors",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "trycmd",
+ "ureq",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "os_pipe"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+dependencies = [
+ "supports-color",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "predicates"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "itertools 0.10.5",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "roff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.37.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
+dependencies = [
+ "bitflags 2.3.3",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.3",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki 0.101.1",
+ "sct",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.174"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b88756493a5bd5e5395d53baa70b194b05764ab85b59e43e4b8f4e1192fa9b1"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.174"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e5c3a298c7f978e53536f95a63bdc4c4a64550582f31a0359a9afda6aede62e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "similar"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
+
+[[package]]
+name = "snapbox"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6bccd62078347f89a914e3004d94582e13824d4e3d8a816317862884c423835"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "content_inspector",
+ "dunce",
+ "filetime",
+ "libc",
+ "normalize-line-endings",
+ "os_pipe",
+ "similar",
+ "snapbox-macros",
+ "tempfile",
+ "wait-timeout",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "snapbox-macros"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaaf09df9f0eeae82be96290918520214530e738a7fe5a351b0f24cf77c0ca31"
+dependencies = [
+ "anstream",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "supports-color"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ba6faf2ca7ee42fdd458f4347ae0a9bd6bcc445ad7cb57ad82b383f18870d6f"
+dependencies = [
+ "atty",
+ "is_ci",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix 0.38.4",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+dependencies = [
+ "rustix 0.37.23",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "thiserror"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "trycmd"
+version = "0.14.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2925e71868a12b173c1eb166018c2d2f9dfaedfcaec747bdb6ea2246785d258e"
+dependencies = [
+ "glob",
+ "humantime",
+ "humantime-serde",
+ "rayon",
+ "serde",
+ "shlex",
+ "snapbox",
+ "toml_edit",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "ureq"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9"
+dependencies = [
+ "base64",
+ "flate2",
+ "log",
+ "once_cell",
+ "rustls",
+ "rustls-webpki 0.100.1",
+ "serde",
+ "serde_json",
+ "url",
+ "webpki-roots",
+]
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
+dependencies = [
+ "rustls-webpki 0.100.1",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7"
+dependencies = [
+ "memchr",
+]
diff --git a/nixpkgs/pkgs/tools/misc/nurl/default.nix b/nixpkgs/pkgs/tools/misc/nurl/default.nix
new file mode 100644
index 000000000000..e0af2ff638dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nurl/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, makeBinaryWrapper
+, stdenv
+, darwin
+, gitMinimal
+, mercurial
+, nix
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nurl";
+  version = "0.3.13";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nurl";
+    rev = "v${version}";
+    hash = "sha256-rVqF+16esE27G7GS55RT91tD4x/GAzfVlIR0AgSknz0=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "nix-compat-0.1.0" = "sha256-xHwBlmTggcZBFSh4EOY888AbmGQxhwvheJSStgpAj48=";
+    };
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    makeBinaryWrapper
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # tests require internet access
+  doCheck = false;
+
+  postInstall = ''
+    wrapProgram $out/bin/nurl \
+      --prefix PATH : ${lib.makeBinPath [ gitMinimal mercurial nix ]}
+    installManPage artifacts/nurl.1
+    installShellCompletion artifacts/nurl.{bash,fish} --zsh artifacts/_nurl
+  '';
+
+  env = {
+    GEN_ARTIFACTS = "artifacts";
+  };
+
+  meta = with lib; {
+    description = "Command-line tool to generate Nix fetcher calls from repository URLs";
+    homepage = "https://github.com/nix-community/nurl";
+    changelog = "https://github.com/nix-community/nurl/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "nurl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nux/default.nix b/nixpkgs/pkgs/tools/misc/nux/default.nix
new file mode 100644
index 000000000000..89aea5e9dd9d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nux/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, asciidoctor
+, installShellFiles
+}:
+
+let
+  pname = "nux";
+  version = "0.1.4";
+in
+rustPlatform.buildRustPackage {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "NuxPackage";
+    repo = pname;
+    rev = version;
+    hash = "sha256-k3HRaWN8/MTZRGWBxI8RRK0tcSYBbSLs3vHkUdLGTc8";
+  };
+
+  cargoHash = "sha256-wfUr3dcdALMEgJ6CaXhK4Gqk6xflCnov9tELA63drV4=";
+
+  nativeBuildInputs = [ asciidoctor installShellFiles ];
+
+  postInstall = ''
+    installManPage $releaseDir/build/nux-*/out/nux.1
+    installShellCompletion $releaseDir/build/nux-*/out/nux.{bash,fish}
+    installShellCompletion $releaseDir/build/nux-*/out/_nux
+  '';
+
+  meta = {
+    homepage = "https://github.com/NuxPackage/nux";
+    description = "A wrapper over the nix cli";
+    license = with lib.licenses; [ gpl3Plus ];
+    maintainers = with lib.maintainers; [ ];
+    mainProgram = "nux";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nvfancontrol/default.nix b/nixpkgs/pkgs/tools/misc/nvfancontrol/default.nix
new file mode 100644
index 000000000000..1b2bebfce895
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nvfancontrol/default.nix
@@ -0,0 +1,32 @@
+{ lib, rustPlatform, fetchFromGitHub, libXNVCtrl, libX11, libXext }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nvfancontrol";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "foucault";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0WBQSnTYVc3sNmZf/KFzznMg9AVsyaBgdx/IvG1dZAw=";
+  };
+
+  cargoSha256 = "sha256-fEzdghGQSSeyeyiHjw1ggQ38gsETJFl9bq/tizGxIis=";
+
+  nativeBuildInputs = [ libXNVCtrl libX11 libXext ];
+
+  # Needed for static linking
+  preConfigure = ''
+    export LIBRARY_PATH=${libXNVCtrl}/lib:${libX11}/lib:${libXext}/lib
+  '';
+
+  meta = with lib; {
+    description = "NVidia dynamic fan control for Linux";
+    homepage = "https://github.com/foucault/nvfancontrol";
+    changelog = "https://github.com/foucault/nvfancontrol/releases/tag/${version}";
+    license = with licenses; [ gpl3Only ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ devins2518 ];
+    mainProgram = "nvfancontrol";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nvimpager/default.nix b/nixpkgs/pkgs/tools/misc/nvimpager/default.nix
new file mode 100644
index 000000000000..f2679259fa1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nvimpager/default.nix
@@ -0,0 +1,54 @@
+{ fetchFromGitHub
+, lib, stdenv
+, ncurses, neovim, procps
+, scdoc, lua51Packages, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nvimpager";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "lucc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-RmpPWS9gnBnR+Atw6uzBmeDSgoTOFSdKzHoJ84O+gyA=";
+  };
+
+  buildInputs = [
+    ncurses # for tput
+    procps # for nvim_get_proc() which uses ps(1)
+  ];
+  nativeBuildInputs = [ scdoc ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  buildFlags = [ "nvimpager.configured" "nvimpager.1" ];
+  preBuild = ''
+    patchShebangs nvimpager
+    substituteInPlace nvimpager --replace ':-nvim' ':-${neovim}/bin/nvim'
+    '';
+
+  doCheck = true;
+  nativeCheckInputs = [ lua51Packages.busted util-linux neovim ];
+  # filter out one test that fails in the sandbox of nix
+  checkPhase = ''
+    runHook preCheck
+    make test BUSTED='busted --output TAP --exclude-tags=nix'
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Use neovim as pager";
+    longDescription = ''
+      Use neovim as a pager to view manpages, diffs, etc with nvim's syntax
+      highlighting.  Includes a cat mode to print highlighted files to stdout
+      and a ansi esc mode to highlight ansi escape sequences in neovim.
+    '';
+    homepage = "https://github.com/lucc/nvimpager";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.lucc ];
+    mainProgram = "nvimpager";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nyancat/default.nix b/nixpkgs/pkgs/tools/misc/nyancat/default.nix
new file mode 100644
index 000000000000..89acccd66fc1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nyancat/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "nyancat";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    owner = "klange";
+    repo = "nyancat";
+    rev = version;
+    sha256 = "1mg8nm5xzcq1xr8cvx24ym2vmafkw53rijllwcdm9miiz0p5ky9k";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/bin "$out/bin" \
+      --replace /usr/share "$out/share"
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "Nyancat in your terminal, rendered through ANSI escape sequences";
+    homepage = "https://nyancat.dakko.us";
+    license = licenses.ncsa;
+    maintainers = with maintainers; [ midchildan ];
+    platforms = platforms.unix;
+    mainProgram = "nyancat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ocs-url/default.nix b/nixpkgs/pkgs/tools/misc/ocs-url/default.nix
new file mode 100644
index 000000000000..52c65d4b5b26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ocs-url/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchgit, libsForQt5 }:
+
+let
+  version = "3.1.0";
+
+  main_src = fetchgit {
+    url = "https://www.opencode.net/dfn2/ocs-url.git";
+    rev = "release-${version}";
+    sha256 = "RvbkcSj8iUAHAEOyETwfH+3XnCCY/p8XM8LgVrZxrws=";
+  };
+
+  qtil_src = fetchgit {
+    url = "https://github.com/akiraohgaki/qtil";
+    rev = "v0.4.0";
+    sha256 = "XRSp0F7ggfkof1RNAnQU3+O9DcXDy81VR7NakITOXrw=";
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "ocs-url";
+  inherit version;
+
+  srcs = [ main_src qtil_src ];
+  sourceRoot = main_src.name;
+
+  # We are NOT in $sourceRoot here
+  postUnpack = ''
+    mkdir -p $sourceRoot/lib/qtil
+    cp -r ${qtil_src.name}/* $sourceRoot/lib/qtil/
+  '';
+
+  buildInputs = with libsForQt5.qt5; [
+    qtbase
+    qtsvg
+    qtquickcontrols
+    qmake
+    wrapQtAppsHook
+  ];
+
+  meta = with lib; {
+    description = "Open Collaboration System for use with DE store websites";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ SohamG ];
+    platforms = platforms.linux;
+    mainProgram = "ocs-url";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/octofetch/default.nix b/nixpkgs/pkgs/tools/misc/octofetch/default.nix
new file mode 100644
index 000000000000..4c4083d9555d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/octofetch/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+, pkg-config
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "octofetch";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "azur1s";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-/AXE1e02NfxQzJZd0QX6gJDjmFFmuUTOndulZElgIMI=";
+  };
+
+  cargoSha256 = "sha256-iuhJYibyQ7hdeXzqCW2PLq7FiKnZp2VHyKT4qO/6vrU=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    homepage = "https://github.com/azur1s/octofetch";
+    description = "Github user information on terminal";
+    license = licenses.mit;
+    maintainers = with maintainers; [ joelkoen ];
+    mainProgram = "octofetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/octosql/default.nix b/nixpkgs/pkgs/tools/misc/octosql/default.nix
new file mode 100644
index 000000000000..a42f80d95ff9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/octosql/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "octosql";
+  version = "0.12.2";
+
+  src = fetchFromGitHub {
+    owner  = "cube2222";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "sha256-jf40w5QkSTAgGu0JA4NeqsasN2TUf9vnKVw5zlZr8Mw=";
+  };
+
+  vendorHash = "sha256-p/2UsvxxywQKtk/9wDa5fjS0z6xLLzDONuQ5AtnUonk=";
+
+  ldflags = [ "-s" "-w" "-X github.com/cube2222/octosql/cmd.VERSION=${version}" ];
+
+  postInstall = ''
+    rm -v $out/bin/tester
+  '';
+
+  meta = with lib; {
+    description = "Commandline tool for joining, analyzing and transforming data from multiple databases and file formats using SQL";
+    homepage = "https://github.com/cube2222/octosql";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ arikgrahl ];
+    mainProgram = "octosql";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix b/nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix
new file mode 100644
index 000000000000..2dbffe3384ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitHub, coreutils, ubootOdroidXU3, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "odroid-xu3-bootloader";
+  version = "unstable-2015-12-04";
+
+  src = fetchFromGitHub {
+    owner = "hardkernel";
+    repo = "u-boot";
+    rev = "fe2f831fd44a4071f58a42f260164544697aa666";
+    sha256 = "1h5yvawzla0vqhkk98gxcwc824bhc936bh6j77qkyspvqcw761fr";
+  };
+
+  buildCommand = ''
+    install -Dm644 -t $out/lib/sd_fuse-xu3 $src/sd_fuse/hardkernel_1mb_uboot/{bl2,tzsw}.*
+    install -Dm644 -t $out/lib/sd_fuse-xu3 $src/sd_fuse/hardkernel/bl1.*
+    ln -sf ${ubootOdroidXU3}/u-boot-dtb.bin $out/lib/sd_fuse-xu3/u-boot-dtb.bin
+
+    install -Dm755 $src/sd_fuse/hardkernel_1mb_uboot/sd_fusing.1M.sh $out/bin/sd_fuse-xu3
+    sed -i \
+      -e '1i#!${runtimeShell}' \
+      -e '1iPATH=${lib.makeBinPath [ coreutils ]}:$PATH' \
+      -e '/set -x/d' \
+      -e 's,.\/sd_fusing\.sh,sd_fuse-xu3,g' \
+      -e "s,\./,$out/lib/sd_fuse-xu3/,g" \
+      $out/bin/sd_fuse-xu3
+  '';
+
+  meta = with lib; {
+    platforms = platforms.linux;
+    license = licenses.unfreeRedistributableFirmware;
+    description = "Secure boot enabled boot loader for ODROID-XU{3,4}";
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/odyssey/default.nix b/nixpkgs/pkgs/tools/misc/odyssey/default.nix
new file mode 100644
index 000000000000..2f3ccb0e154b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/odyssey/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, cmake, openssl, postgresql, zstd, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "odyssey";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "yandex";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-1ALTKRjpKmmFcAuhmgpcbJBkNuUlTyau8xWDRHh7gf0=";
+  };
+
+  patches = [
+    # Fix compression build. Remove with the next release. https://github.com/yandex/odyssey/pull/441
+    (fetchpatch {
+      url = "https://github.com/yandex/odyssey/commit/01ca5b345c4483add7425785c9c33dfa2c135d63.patch";
+      sha256 = "sha256-8UPkZkiI08ZZL6GShhug/5/kOVrmdqYlsD1bcqfxg/w=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ openssl postgresql zstd ];
+  cmakeFlags = [ "-DPQ_LIBRARY=${postgresql.lib}/lib" "-DBUILD_COMPRESSION=ON" ];
+
+  installPhase = ''
+    install -Dm755 -t $out/bin sources/odyssey
+  '';
+
+  meta = with lib; {
+    description = "Scalable PostgreSQL connection pooler";
+    homepage = "https://github.com/yandex/odyssey";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.marsam ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "odyssey";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/oggvideotools/default.nix b/nixpkgs/pkgs/tools/misc/oggvideotools/default.nix
new file mode 100644
index 000000000000..144c89f802af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/oggvideotools/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, fetchpatch, cmake, pkg-config, boost, gd, libogg, libtheora, libvorbis }:
+
+stdenv.mkDerivation rec {
+  pname = "oggvideotools";
+  version = "0.9.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/oggvideotools/oggvideotools/oggvideotools-${version}/oggvideotools-${version}.tar.bz2";
+    sha256 = "sha256-2dv3iXt86phhIgnYC5EnRzyX1u5ssNzPwrOP4+jilSM=";
+  };
+
+  patches = [
+    # Fix pending upstream inclusion for missing includes:
+    #  https://sourceforge.net/p/oggvideotools/bugs/12/
+    (fetchpatch {
+      name = "gcc-10.patch";
+      url = "https://sourceforge.net/p/oggvideotools/bugs/12/attachment/fix-compile.patch";
+      sha256 = "sha256-mJttoC3jCLM3vmPhlyqh+W0ryp2RjJGIBXd6sJfLJA4=";
+    })
+
+    # Fix pending upstream inclusion for build failure on gcc-12:
+    #  https://sourceforge.net/p/oggvideotools/bugs/13/
+    (fetchpatch {
+      name = "gcc-12.patch";
+      url = "https://sourceforge.net/p/oggvideotools/bugs/13/attachment/fix-gcc-12.patch";
+      sha256 = "sha256-zuDXe86djWkR8SgYZHkuAJJ7Lf2VYsVRBrlEaODtMKE=";
+      # svn patch, rely on prefix added by fetchpatch:
+      extraPrefix = "";
+    })
+  ];
+
+  postPatch = ''
+    # Don't disable optimisations
+    substituteInPlace CMakeLists.txt --replace " -O0 " ""
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ boost gd libogg libtheora libvorbis ];
+
+  meta = with lib; {
+    description = "Toolbox for manipulating and creating Ogg video files";
+    homepage = "http://www.streamnik.de/oggvideotools.html";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ ];
+    # Compilation error on Darwin:
+    # error: invalid argument '--std=c++0x' not allowed with 'C'
+    # make[2]: *** [src/libresample/CMakeFiles/resample.dir/build.make:76: src/libresample/CMakeFiles/resample.dir/filterkit.c.o] Error 1
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ollama/cmake-include.patch b/nixpkgs/pkgs/tools/misc/ollama/cmake-include.patch
new file mode 100644
index 000000000000..013ed66bf91c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ollama/cmake-include.patch
@@ -0,0 +1,7 @@
+--- a/llm/llama.cpp/examples/server/CMakeLists.txt
++++ b/llm/llama.cpp/examples/server/CMakeLists.txt
+@@ -11,3 +11,4 @@
+     TARGET_LINK_LIBRARIES(${TARGET} PRIVATE ws2_32)
+ endif()
+ target_compile_features(${TARGET} PRIVATE cxx_std_11)
++include (../../../ext_server/CMakeLists.txt) # ollama
diff --git a/nixpkgs/pkgs/tools/misc/ollama/default.nix b/nixpkgs/pkgs/tools/misc/ollama/default.nix
new file mode 100644
index 000000000000..6ce576644d49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ollama/default.nix
@@ -0,0 +1,182 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+, buildEnv
+, linkFarm
+, overrideCC
+, makeWrapper
+, stdenv
+
+, cmake
+, gcc12
+, clblast
+, libdrm
+, rocmPackages
+, cudaPackages
+, linuxPackages
+, darwin
+
+, enableRocm ? false
+, enableCuda ? false
+}:
+
+let
+  pname = "ollama";
+  version = "0.1.24";
+
+  warnIfNotLinux = warning: (lib.warnIfNot stdenv.isLinux warning stdenv.isLinux);
+  gpuWarning = api: "building ollama with ${api} is only supported on linux; falling back to cpu";
+  rocmIsEnabled = enableRocm && (warnIfNotLinux (gpuWarning "rocm"));
+  cudaIsEnabled = enableCuda && (warnIfNotLinux (gpuWarning "cuda"));
+  enableLinuxGpu = rocmIsEnabled || cudaIsEnabled;
+
+  appleFrameworks = darwin.apple_sdk_11_0.frameworks;
+  metalFrameworks = [
+    appleFrameworks.Accelerate
+    appleFrameworks.Metal
+    appleFrameworks.MetalKit
+    appleFrameworks.MetalPerformanceShaders
+  ];
+
+  src = fetchFromGitHub {
+    owner = "jmorganca";
+    repo = "ollama";
+    rev = "v${version}";
+    hash = "sha256-GwZA1QUH8I8m2bGToIcMMaB5MBnioQP4+n1SauUJYP8=";
+    fetchSubmodules = true;
+  };
+  preparePatch = patch: hash: fetchpatch {
+    url = "file://${src}/llm/patches/${patch}";
+    inherit hash;
+    stripLen = 1;
+    extraPrefix = "llm/llama.cpp/";
+  };
+  inherit (lib) licenses platforms maintainers;
+  ollama = {
+    inherit pname version src;
+    vendorHash = "sha256-wXRbfnkbeXPTOalm7SFLvHQ9j46S/yLNbFy+OWNSamQ=";
+
+    nativeBuildInputs = [
+      cmake
+    ] ++ lib.optionals enableLinuxGpu [
+      makeWrapper
+    ] ++ lib.optionals stdenv.isDarwin
+      metalFrameworks;
+
+    patches = [
+      # remove uses of `git` in the `go generate` script
+      # instead use `patch` where necessary
+      ./remove-git.patch
+      # replace a hardcoded use of `g++` with `$CXX`
+      ./replace-gcc.patch
+
+      # ollama's patches of llama.cpp's example server
+      # `ollama/llm/generate/gen_common.sh` -> "apply temporary patches until fix is upstream"
+      (preparePatch "01-cache.diff" "sha256-PC4yN98hFvK+PEITiDihL8ki3bJuLVXrAm0CGf8GPJE=")
+      (preparePatch "02-shutdown.diff" "sha256-cElAp9Z9exxN964vB/YFuBhZoEcoAwGSMCnbh+l/V4Q=")
+    ];
+    postPatch = ''
+      # use a patch from the nix store in the `go generate` script
+      substituteInPlace llm/generate/gen_common.sh \
+        --subst-var-by cmakeIncludePatch '${./cmake-include.patch}'
+      # `ollama/llm/generate/gen_common.sh` -> "avoid duplicate main symbols when we link into the cgo binary"
+      substituteInPlace llm/llama.cpp/examples/server/server.cpp \
+        --replace-fail 'int main(' 'int __main('
+      # replace inaccurate version number with actual release version
+      substituteInPlace version/version.go --replace-fail 0.0.0 '${version}'
+    '';
+    preBuild = ''
+      export OLLAMA_SKIP_PATCHING=true
+      # build llama.cpp libraries for ollama
+      go generate ./...
+    '';
+
+    ldflags = [
+      "-s"
+      "-w"
+      "-X=github.com/jmorganca/ollama/version.Version=${version}"
+      "-X=github.com/jmorganca/ollama/server.mode=release"
+    ];
+
+    meta = {
+      description = "Get up and running with large language models locally";
+      homepage = "https://github.com/jmorganca/ollama";
+      license = licenses.mit;
+      platforms = platforms.unix;
+      mainProgram = "ollama";
+      maintainers = with maintainers; [ abysssol dit7ya elohmeier ];
+    };
+  };
+
+
+  rocmClang = linkFarm "rocm-clang" {
+    llvm = rocmPackages.llvm.clang;
+  };
+  rocmPath = buildEnv {
+    name = "rocm-path";
+    paths = [
+      rocmPackages.rocm-device-libs
+      rocmClang
+    ];
+  };
+  rocmVars = {
+    ROCM_PATH = rocmPath;
+    CLBlast_DIR = "${clblast}/lib/cmake/CLBlast";
+  };
+
+  cudaToolkit = buildEnv {
+    name = "cuda-toolkit";
+    ignoreCollisions = true; # FIXME: find a cleaner way to do this without ignoring collisions
+    paths = [
+      cudaPackages.cudatoolkit
+      cudaPackages.cuda_cudart
+    ];
+  };
+  cudaVars = {
+    CUDA_LIB_DIR = "${cudaToolkit}/lib";
+    CUDACXX = "${cudaToolkit}/bin/nvcc";
+    CUDAToolkit_ROOT = cudaToolkit;
+  };
+
+  linuxGpuLibs = {
+    buildInputs = lib.optionals rocmIsEnabled [
+      rocmPackages.clr
+      rocmPackages.hipblas
+      rocmPackages.rocblas
+      rocmPackages.rocsolver
+      rocmPackages.rocsparse
+      libdrm
+    ] ++ lib.optionals cudaIsEnabled [
+      cudaPackages.cuda_cudart
+    ];
+  };
+
+  appleGpuLibs = { buildInputs = metalFrameworks; };
+
+  runtimeLibs = lib.optionals rocmIsEnabled [
+    rocmPackages.rocm-smi
+  ] ++ lib.optionals cudaIsEnabled [
+    linuxPackages.nvidia_x11
+  ];
+  runtimeLibWrapper = {
+    postFixup = ''
+      mv "$out/bin/${pname}" "$out/bin/.${pname}-unwrapped"
+      makeWrapper "$out/bin/.${pname}-unwrapped" "$out/bin/${pname}" \
+        --suffix LD_LIBRARY_PATH : '${lib.makeLibraryPath runtimeLibs}'
+    '';
+  };
+
+  goBuild =
+    if cudaIsEnabled then
+      buildGoModule.override { stdenv = overrideCC stdenv gcc12; }
+    else
+      buildGoModule;
+in
+goBuild (ollama
+  // (lib.optionalAttrs rocmIsEnabled rocmVars)
+  // (lib.optionalAttrs cudaIsEnabled cudaVars)
+  // (lib.optionalAttrs enableLinuxGpu linuxGpuLibs)
+  // (lib.optionalAttrs enableLinuxGpu runtimeLibWrapper)
+
+  // (lib.optionalAttrs stdenv.isDarwin appleGpuLibs))
diff --git a/nixpkgs/pkgs/tools/misc/ollama/remove-git.patch b/nixpkgs/pkgs/tools/misc/ollama/remove-git.patch
new file mode 100644
index 000000000000..9ef4487051ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ollama/remove-git.patch
@@ -0,0 +1,21 @@
+--- a/llm/generate/gen_common.sh
++++ b/llm/generate/gen_common.sh
+@@ -60,6 +60,9 @@
+ }
+ 
+ apply_patches() {
++    patch -i '@cmakeIncludePatch@' "${LLAMACPP_DIR}/examples/server/CMakeLists.txt"
++    return
++    
+     # Wire up our CMakefile
+     if ! grep ollama ${LLAMACPP_DIR}/examples/server/CMakeLists.txt; then
+         echo 'include (../../../ext_server/CMakeLists.txt) # ollama' >>${LLAMACPP_DIR}/examples/server/CMakeLists.txt
+@@ -113,6 +116,8 @@
+ 
+ # Keep the local tree clean after we're done with the build
+ cleanup() {
++    return
++
+     (cd ${LLAMACPP_DIR}/examples/server/ && git checkout CMakeLists.txt server.cpp)
+ 
+     if [ -n "$(ls -A ../patches/*.diff)" ]; then
diff --git a/nixpkgs/pkgs/tools/misc/ollama/replace-gcc.patch b/nixpkgs/pkgs/tools/misc/ollama/replace-gcc.patch
new file mode 100644
index 000000000000..2ebd24e1dc3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ollama/replace-gcc.patch
@@ -0,0 +1,11 @@
+--- a/llm/generate/gen_common.sh
++++ b/llm/generate/gen_common.sh
+@@ -86,7 +89,7 @@
+     cmake -S ${LLAMACPP_DIR} -B ${BUILD_DIR} ${CMAKE_DEFS}
+     cmake --build ${BUILD_DIR} ${CMAKE_TARGETS} -j8
+     mkdir -p ${BUILD_DIR}/lib/
+-    g++ -fPIC -g -shared -o ${BUILD_DIR}/lib/libext_server.${LIB_EXT} \
++    $CXX -fPIC -g -shared -o ${BUILD_DIR}/lib/libext_server.${LIB_EXT} \
+         ${GCC_ARCH} \
+         ${WHOLE_ARCHIVE} ${BUILD_DIR}/examples/server/libext_server.a ${NO_WHOLE_ARCHIVE} \
+         ${BUILD_DIR}/common/libcommon.a \
diff --git a/nixpkgs/pkgs/tools/misc/ondir/default.nix b/nixpkgs/pkgs/tools/misc/ondir/default.nix
new file mode 100644
index 000000000000..1b32f474fc04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ondir/default.nix
@@ -0,0 +1,45 @@
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+}:
+
+stdenv.mkDerivation {
+  pname = "ondir";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "alecthomas";
+    repo = "ondir";
+    rev = "cb2f9f8b21e336165fc0a310d677fda75c8e8513";
+    hash = "sha256-XTZKFIzJ3xL8ae3zG8nsMhGWvpvRUAQ2b6q/Q1QvGd0=";
+  };
+
+  installPhase = ''
+  runHook preInstall
+
+  make DESTDIR="$out" PREFIX= install
+  cp scripts.* $out
+
+  runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "a small program to automate tasks specific to certain directories";
+    longDescription = ''
+    It works by executing scripts in directories when you enter and leave them.
+    This is done by overriding the shell builtins cd, pushd, and popd,
+     which is a manual action.
+    The user is required to add a snippet to their shell initialisation file like .bashrc or .profile.
+
+    Which commands are executed on directory entry and leave is done
+     in predefined locations with a .ondirrc file.
+
+    See man ondir for more information
+    '';
+    homepage = "https://github.com/alecthomas/ondir/";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.michaelCTS ];
+    mainProgram = "ondir";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/onefetch/default.nix b/nixpkgs/pkgs/tools/misc/onefetch/default.nix
new file mode 100644
index 000000000000..fe509320a712
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/onefetch/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, installShellFiles
+, pkg-config
+, zstd
+, stdenv
+, CoreFoundation
+, libresolv
+, Security
+, git
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "onefetch";
+  version = "2.19.0";
+
+  src = fetchFromGitHub {
+    owner = "o2sh";
+    repo = pname;
+    rev = version;
+    hash = "sha256-IaXQyTQMvgfm3CWU6z0T4nTJNgA8/8urG+hhuthB4+U=";
+  };
+
+  cargoHash = "sha256-8brPYBVqoBg9wO/Y6LdNgVasJgmyZvdNIC0Cclpyk68=";
+
+  cargoPatches = [
+    # enable pkg-config feature of zstd
+    ./zstd-pkg-config.patch
+  ];
+
+  nativeBuildInputs = [ cmake installShellFiles pkg-config ];
+
+  buildInputs = [ zstd ]
+    ++ lib.optionals stdenv.isDarwin [ CoreFoundation libresolv Security ];
+
+  nativeCheckInputs = [
+    git
+  ];
+
+  preCheck = ''
+    git init
+    git config user.name nixbld
+    git config user.email nixbld@example.com
+    git add .
+    git commit -m test
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd onefetch \
+      --bash <($out/bin/onefetch --generate bash) \
+      --fish <($out/bin/onefetch --generate fish) \
+      --zsh <($out/bin/onefetch --generate zsh)
+  '';
+
+  meta = with lib; {
+    description = "Git repository summary on your terminal";
+    homepage = "https://github.com/o2sh/onefetch";
+    changelog = "https://github.com/o2sh/onefetch/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne figsoda kloenk ];
+    mainProgram = "onefetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/onefetch/zstd-pkg-config.patch b/nixpkgs/pkgs/tools/misc/onefetch/zstd-pkg-config.patch
new file mode 100644
index 000000000000..9bfc271dc912
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/onefetch/zstd-pkg-config.patch
@@ -0,0 +1,24 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index f6d5b6c..a631bbf 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -2544,6 +2544,7 @@ dependencies = [
+  "typetag",
+  "winres",
+  "yaml-rust",
++ "zstd",
+ ]
+ 
+ [[package]]
+diff --git a/Cargo.toml b/Cargo.toml
+index b77f70d..861f1ac 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -65,6 +65,7 @@ tokei = "12.1.2"
+ typetag = "0.2"
+ yaml-rust = "0.4.5"
+ parking_lot = "0.12"
++zstd = { version = "*", features = ["pkg-config"] }
+ 
+ [dev-dependencies]
+ criterion = "0.5.1"
diff --git a/nixpkgs/pkgs/tools/misc/online-judge-template-generator/default.nix b/nixpkgs/pkgs/tools/misc/online-judge-template-generator/default.nix
new file mode 100644
index 000000000000..e867059eff3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/online-judge-template-generator/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildPythonApplication
+, appdirs
+, beautifulsoup4
+, colorlog
+, fetchFromGitHub
+, mako
+, online-judge-api-client
+, online-judge-tools
+, ply
+, pyyaml
+, requests
+, setuptools
+, toml
+}:
+
+buildPythonApplication rec {
+  pname = "online-judge-template-generator";
+  version = "4.8.1";
+
+  src = fetchFromGitHub {
+    owner = "online-judge-tools";
+    repo = "template-generator";
+    rev = "v${version}";
+    sha256 = "sha256-cS1ED1a92fEFqy6ht8UFjxocWIm35IA/VuaPSLsdlqg=";
+  };
+
+  propagatedBuildInputs = [
+    appdirs
+    beautifulsoup4
+    colorlog
+    mako
+    online-judge-api-client
+    online-judge-tools
+    ply
+    pyyaml
+    requests
+    setuptools
+    toml
+  ];
+
+  # Needs internet to run tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Analyze problems of competitive programming and automatically generate boilerplate";
+    homepage = "https://github.com/online-judge-tools/template-generator";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sei40kr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/open-pdf-sign/default.nix b/nixpkgs/pkgs/tools/misc/open-pdf-sign/default.nix
new file mode 100644
index 000000000000..282ad778db5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/open-pdf-sign/default.nix
@@ -0,0 +1,43 @@
+{ fetchurl
+, jre
+, lib
+, makeBinaryWrapper
+, nix-update-script
+, stdenv
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  version = "0.1.7";
+  pname = "open-pdf-sign";
+
+  src = fetchurl {
+    url = "https://github.com/open-pdf-sign/open-pdf-sign/releases/download/v${finalAttrs.version}/open-pdf-sign.jar";
+    hash = "sha256-pUIE2pTa+5Rt8PNYtfbtqoX0dxdS6lViqdqjJU5feoo=";
+  };
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  buildCommand = ''
+    install -Dm644 $src $out/lib/open-pdf-sign.jar
+
+    mkdir -p $out/bin
+    makeWrapper ${lib.getExe jre} $out/bin/open-pdf-sign \
+      --add-flags "-jar $out/lib/open-pdf-sign.jar"
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = {
+    description = "Digitally sign PDF files from your commandline";
+    homepage = "https://github.com/open-pdf-sign/open-pdf-sign";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ drupol ];
+    platforms = lib.platforms.unix;
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    mainProgram = "open-pdf-sign";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/opencbm/default.nix b/nixpkgs/pkgs/tools/misc/opencbm/default.nix
new file mode 100644
index 000000000000..434b3d421de2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opencbm/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cc65
+, ncurses
+, pkg-config
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "opencbm";
+  version = "0.4.99.104";
+
+  src = fetchFromGitHub {
+    owner = "OpenCBM";
+    repo = "OpenCBM";
+    rev = "v${version}";
+    sha256 = "sha256-5lj5F79Gbhrvi9dxKGobdyDyBLGcptAtxx9SANhLrKw=";
+  };
+
+  makefile = "LINUX/Makefile";
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "ETCDIR=${placeholder "out"}/etc"
+    "UDEVRULESDIR=${placeholder "out"}/etc/udev/rules.d/"
+    "LDCONFIG=true"
+  ];
+  installTargets = "install-all";
+
+  nativeBuildInputs = [
+    cc65
+    pkg-config
+  ];
+  buildInputs = [
+    libusb1
+    ncurses
+  ];
+
+  meta = with lib; {
+    description = "Kernel driver and development library to control serial CBM devices";
+    longDescription = ''
+      Win 7/8/10, and Linux/i386/AMD64 kernel driver and development library to
+      control serial CBM devices, such as the Commodore 1541 disk drive,
+      connected to the PC's parallel port via a XM1541 or XA1541 cable. Fast
+      disk copier included. Successor of cbm4linux. Also supports the XU1541
+      and the XUM1541 devices (a.k.a. "ZoomFloppy").
+    '';
+    homepage = "https://spiro.trikaliotis.net/opencbm";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.sander ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opencorsairlink/default.nix b/nixpkgs/pkgs/tools/misc/opencorsairlink/default.nix
new file mode 100644
index 000000000000..40b747f20305
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opencorsairlink/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, libusb1, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "OpenCorsairLink";
+  version = "unstable-2019-12-23";
+
+  buildInputs = [ libusb1 ];
+  nativeBuildInputs = [ pkg-config ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  src = fetchFromGitHub {
+    owner = "audiohacked";
+    repo = "OpenCorsairLink";
+    rev = "46dbf206e19a40d6de6bd73142ed93bdb26c5c1a";
+    sha256 = "1nizicl0mc9pslc6065mnrs0fnn8sh7ca8iiw7w9ix57zrhabpld";
+  };
+
+  patches = [
+    # Pull upstream fix for -fno-common toolchain
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/audiohacked/OpenCorsairLink/commit/d600c7ff032a3911d30b039844a31f0b3acfe26a.patch";
+      sha256 = "030rwka5bvf79x6ir18vqb09izhz1crp94x5gqjxwv3b20vvv4kx";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Linux and Mac OS support for the CorsairLink Devices ";
+    homepage = "https://github.com/audiohacked/OpenCorsairLink";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ lib.maintainers.expipiplus1 ];
+    mainProgram = "OpenCorsairLink.elf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opentelemetry-collector/contrib.nix b/nixpkgs/pkgs/tools/misc/opentelemetry-collector/contrib.nix
new file mode 100644
index 000000000000..e928544d240a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opentelemetry-collector/contrib.nix
@@ -0,0 +1,72 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, stdenv
+, systemdMinimal
+, withSystemd ? false
+}:
+
+buildGoModule rec {
+  pname = "opentelemetry-collector-contrib";
+  version = "0.87.0";
+
+  src = fetchFromGitHub {
+    owner = "open-telemetry";
+    repo = "opentelemetry-collector-contrib";
+    rev = "v${version}";
+    sha256 = "sha256-b1TCj3aKupqUMQ74O58O5WJfQM9tj1G0ny5YeeilFAM=";
+  };
+
+  # proxy vendor to avoid hash missmatches between linux and macOS
+  proxyVendor = true;
+  vendorHash = "sha256-o/51Z2Zmdza3pNZa0u3j4uG46orE9S7pUsZOXjHKrnI=";
+
+  # there is a nested go.mod
+  sourceRoot = "${src.name}/cmd/otelcontribcol";
+
+  # upstream strongly recommends disabling CGO
+  # additionally dependencies have had issues when GCO was enabled that weren't caught upstream
+  # https://github.com/open-telemetry/opentelemetry-collector/blob/main/CONTRIBUTING.md#using-cgo
+  CGO_ENABLED = 0;
+
+  # journalctl is required in-$PATH for the journald receiver tests.
+  nativeCheckInputs = lib.optionals stdenv.isLinux [ systemdMinimal ];
+
+  # We don't inject the package into propagatedBuildInputs unless
+  # asked to avoid hard-requiring a large package. For the journald
+  # receiver to work, journalctl will need to be available in-$PATH,
+  # so expose this as an option for those who want more control over
+  # it instead of trusting the global $PATH.
+  propagatedBuildInputs = lib.optionals withSystemd [ systemdMinimal ];
+
+  preCheck = "export CGO_ENABLED=1";
+
+  # This test fails on darwin for mysterious reasons.
+  checkFlags = lib.optionals stdenv.isDarwin
+    [ "-skip" "TestDefaultExtensions/memory_ballast" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/open-telemetry/opentelemetry-collector-contrib/internal/version.Version=v${version}"
+  ];
+
+  meta = with lib; {
+    description = "OpenTelemetry Collector superset with additional community collectors";
+    longDescription = ''
+      The OpenTelemetry Collector offers a vendor-agnostic implementation on how
+      to receive, process and export telemetry data. In addition, it removes the
+      need to run, operate and maintain multiple agents/collectors in order to
+      support open-source telemetry data formats (e.g. Jaeger, Prometheus, etc.)
+      sending to multiple open-source or commercial back-ends. The Contrib
+      edition provides aditional vendor specific receivers/exporters and/or
+      components that are only useful to a relatively small number of users and
+      is multiple times larger as a result.
+    '';
+    homepage = "https://github.com/open-telemetry/opentelemetry-collector-contrib";
+    changelog = "https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ uri-canva jk ];
+    mainProgram = "otelcontribcol";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opentelemetry-collector/default.nix b/nixpkgs/pkgs/tools/misc/opentelemetry-collector/default.nix
new file mode 100644
index 000000000000..3559ee5beae5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opentelemetry-collector/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, opentelemetry-collector
+}:
+
+buildGoModule rec {
+  pname = "opentelemetry-collector";
+  version = "0.93.0";
+
+  src = fetchFromGitHub {
+    owner = "open-telemetry";
+    repo = "opentelemetry-collector";
+    rev = "v${version}";
+    hash = "sha256-caDBVB1ChAAU5fGip8HbC4hXcTomsRoLIobtMSvX/HY=";
+  };
+  # there is a nested go.mod
+  sourceRoot = "${src.name}/cmd/otelcorecol";
+  vendorHash = "sha256-Mx+3Ml5BQ3Z+H9mX5xvfdG7fmHm+Cz3ws+cW/6iZddY=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # upstream strongly recommends disabling CGO
+  # additionally dependencies have had issues when GCO was enabled that weren't caught upstream
+  # https://github.com/open-telemetry/opentelemetry-collector/blob/main/CONTRIBUTING.md#using-cgo
+  CGO_ENABLED = 0;
+
+  preBuild = ''
+    # set the build version, can't be done via ldflags
+    sed -i -E 's/Version:(\s*)".*"/Version:\1"${version}"/' main.go
+  '';
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installShellCompletion --cmd otelcorecol \
+      --bash <($out/bin/otelcorecol completion bash) \
+      --fish <($out/bin/otelcorecol completion fish) \
+      --zsh <($out/bin/otelcorecol completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    inherit version;
+    package = opentelemetry-collector;
+    command = "otelcorecol -v";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/open-telemetry/opentelemetry-collector";
+    changelog = "https://github.com/open-telemetry/opentelemetry-collector/blob/v${version}/CHANGELOG.md";
+    description = "A vendor-agnostic implementation on how to receive, process and export telemetry data";
+    longDescription = ''
+      The OpenTelemetry Collector offers a vendor-agnostic implementation on how
+      to receive, process and export telemetry data. In addition, it removes the
+      need to run, operate and maintain multiple agents/collectors in order to
+      support open-source telemetry data formats (e.g. Jaeger, Prometheus, etc.)
+      sending to multiple open-source or commercial back-ends.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ uri-canva jk ];
+    mainProgram = "otelcorecol";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix b/nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix
new file mode 100644
index 000000000000..2a5c2c05a0fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "opentimestamps-client";
+  version = "0.7.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "opentimestamps";
+    repo = "opentimestamps-client";
+    rev = "refs/tags/opentimestamps-client-v${version}";
+    hash = "sha256-0dWaXetRlF1MveBdJ0sAdqJ5HCdn08gkbX+nen/ygsQ=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    gitpython
+    opentimestamps
+    pysocks
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "otsclient"
+  ];
+
+  meta = with lib; {
+    description = "Command-line tool to create and verify OpenTimestamps proofs";
+    homepage = "https://github.com/opentimestamps/opentimestamps-client";
+    changelog = "https://github.com/opentimestamps/opentimestamps-client/releases/tag/opentimestamps-client-v${version}";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ erikarvstedt ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opentsdb/default.nix b/nixpkgs/pkgs/tools/misc/opentsdb/default.nix
new file mode 100644
index 000000000000..abce03cae02f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opentsdb/default.nix
@@ -0,0 +1,352 @@
+{ lib
+, stdenv
+, autoconf
+, automake
+, curl
+, fetchFromGitHub
+, fetchMavenArtifact
+, fetchpatch
+, git
+, jdk8
+, makeWrapper
+, nettools
+, python3
+}:
+
+let
+  jdk = jdk8;
+  jre = jdk8.jre;
+  artifacts = {
+    apache = [
+      (fetchMavenArtifact {
+        groupId = "org.apache.commons";
+        artifactId = "commons-math3";
+        version = "3.6.1";
+        hash = "sha256-HlbXsFjSi2Wr0la4RY44hbZ0wdWI+kPNfRy7nH7yswg=";
+      })
+    ];
+    guava = [
+      (fetchMavenArtifact {
+        groupId = "com.google.guava";
+        artifactId = "guava";
+        version = "18.0";
+        hash = "sha256-1mT7/APS5c6cqypE+wHx0L+d/r7MwaRzsfnqMfefb5k=";
+      })
+    ];
+    gwt = [
+      (fetchMavenArtifact {
+        groupId = "com.google.gwt";
+        artifactId = "gwt-dev";
+        version = "2.6.1";
+        hash = "sha256-iS8VpnMPuxE9L9hkTJVtW5Tqgw2TIYei47zRvkdoK0o=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.google.gwt";
+        artifactId = "gwt-user";
+        version = "2.6.1";
+        hash = "sha256-3IlJ+b6C0Gmuh7aAFg9+ldgvZCdfJmTB8qcdC4HZC9g=";
+      })
+      (fetchMavenArtifact {
+        groupId = "net.opentsdb";
+        artifactId = "opentsdb-gwt-theme";
+        version = "1.0.0";
+        hash = "sha256-JJsjcRlQmIrwpOtMweH12e/Ut5NG8R50VPiOAMMGEdc=";
+      })
+    ];
+    hamcrest = [
+      (fetchMavenArtifact {
+        url = "https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar";
+        groupId = "org.hamcrest";
+        artifactId = "hamcrest-core";
+        version = "1.3";
+        hash = "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=";
+      })
+    ];
+    hbase = [
+      (fetchMavenArtifact {
+        groupId = "org.hbase";
+        artifactId = "asynchbase";
+        version = "1.8.2";
+        hash = "sha256-D7mKprHMW23dE0SzdNsagv3Hp2G5HUN7sKfs1nVzQF4=";
+      })
+    ];
+    jackson = [
+      (fetchMavenArtifact {
+        groupId = "com.fasterxml.jackson.core";
+        artifactId = "jackson-annotations";
+        version = "2.14.1";
+        hash = "sha256-0lW0uGP/jscUqPlvpVw0Yh1D27grgtP1dHZJakwJ4ec=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.fasterxml.jackson.core";
+        artifactId = "jackson-core";
+        version = "2.14.1";
+        hash = "sha256-ARQYfilrNMkxwb+eWoQVK2K/q30YL1Yj85gtwto15SY=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.fasterxml.jackson.core";
+        artifactId = "jackson-databind";
+        version = "2.14.1";
+        hash = "sha256-QjoMgG3ks/petKKGmDBeOjd3xzHhvPobLzo3YMe253M=";
+      })
+    ];
+    javacc = [
+      (fetchMavenArtifact {
+        groupId = "net.java.dev.javacc";
+        artifactId = "javacc";
+        version = "6.1.2";
+        hash = "sha256-7Qxclglhz+tDE4LPAVKCewEVZ0fbN5LRv5PoHjLCBKs=";
+      })
+    ];
+    javassist = [
+      (fetchMavenArtifact {
+        groupId = "org.javassist";
+        artifactId = "javassist";
+        version = "3.21.0-GA";
+        hash = "sha256-eqWeAx+UGYSvB9rMbKhebcm9OkhemqJJTLwDTvoSJdA=";
+      })
+    ];
+    jexl = [
+      (fetchMavenArtifact {
+        groupId = "commons-logging";
+        artifactId = "commons-logging";
+        version = "1.2";
+        hash = "sha256-2t3qHqC+D1aXirMAa4rJKDSv7vvZt+TmMW/KV98PpjY=";
+      })
+      (fetchMavenArtifact {
+        groupId = "org.apache.commons";
+        artifactId = "commons-jexl";
+        version = "2.1.1";
+        hash = "sha256-A8mp+uXaeM5SwL8kRnzDc1W34jGW3/SDniwP8BigEwY=";
+      })
+    ];
+    jgrapht = [
+      (fetchMavenArtifact {
+        groupId = "org.jgrapht";
+        artifactId = "jgrapht-core";
+        version = "0.9.1";
+        hash = "sha256-5u8cEVaJ7aCBQrhtUkYg2mQ7bp8BNAUletB/QtxcaXg=";
+      })
+    ];
+    junit = [
+      (fetchMavenArtifact {
+        groupId = "junit";
+        artifactId = "junit";
+        version = "4.11";
+        hash = "sha256-kKjhYD7spI5+h586+8lWBxUyKYXzmidPb2BwtD+dBv4=";
+      })
+    ];
+    kryo = [
+      (fetchMavenArtifact {
+        groupId = "org.ow2.asm";
+        artifactId = "asm";
+        version = "4.0";
+        hash = "sha256-+y3ekCCke7AkxD2d4KlOc6vveTvwjwE1TMl8stLiqVc=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.esotericsoftware.kryo";
+        artifactId = "kryo";
+        version = "2.21.1";
+        hash = "sha256-adEG73euU3sZBp9WUQNLZBN6Y3UAZXTAxjsuvDuy7q4=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.esotericsoftware.minlog";
+        artifactId = "minlog";
+        version = "1.2";
+        hash = "sha256-pnjLGqj10D2QHJksdXQYQdmKm8PVXa0C6E1lMVxOYPI=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.esotericsoftware.reflectasm";
+        artifactId = "reflectasm";
+        version = "1.07";
+        classifier = "shaded";
+        hash = "sha256-CKcOrbSydO2u/BGUwfdXBiGlGwqaoDaqFdzbe5J+fHY=";
+      })
+    ];
+    logback = [
+      (fetchMavenArtifact {
+        groupId = "ch.qos.logback";
+        artifactId = "logback-classic";
+        version = "1.3.4";
+        hash = "sha256-uGal2myLeOFVxn/M11YoYNC1/Hdric2WjC8/Ljf8OgI=";
+      })
+      (fetchMavenArtifact {
+        groupId = "ch.qos.logback";
+        artifactId = "logback-core";
+        version = "1.3.4";
+        hash = "sha256-R0CgmLtEOnRFVN093wYsaCKHspQGZ1TikuE0bIv1zt0=";
+      })
+    ];
+    mockito = [
+      (fetchMavenArtifact {
+        groupId = "org.mockito";
+        artifactId = "mockito-core";
+        version = "1.9.5";
+        hash = "sha256-+XSDuglEufoTOqKWOHZN2+rbUew9vAIHTFj6LK7NB/o=";
+      })
+    ];
+    netty = [
+      (fetchMavenArtifact {
+        groupId = "io.netty";
+        artifactId = "netty";
+        version = "3.10.6.Final";
+        hash = "sha256-h2ilD749k6iNjmAA6l1o4w9Q3JFbN2TDxYcPcMT7O0k=";
+      })
+    ];
+    objenesis = [
+      (fetchMavenArtifact {
+        groupId = "org.objenesis";
+        artifactId = "objenesis";
+        version = "1.3";
+        hash = "sha256-3U7z0wkQY6T+xXjLsrvmwfkhwACRuimT3Nmv0l/5REo=";
+      })
+    ];
+    powermock = [
+      (fetchMavenArtifact {
+        groupId = "org.powermock";
+        artifactId = "powermock-mockito-release-full";
+        version = "1.5.4";
+        classifier = "full";
+        hash = "sha256-GWXaFG/ZtPlc7uKrghQHNAPzEu2k5VGYCYTXIlbylb4=";
+      })
+    ];
+    protobuf = [
+      (fetchMavenArtifact {
+        groupId = "com.google.protobuf";
+        artifactId = "protobuf-java";
+        version = "2.5.0";
+        hash = "sha256-4MHGRXXABWAXJefGoCzr+eEoXoiPdWsqHXP/qNclzHQ=";
+      })
+    ];
+    slf4j = [
+      (fetchMavenArtifact {
+        groupId = "org.slf4j";
+        artifactId = "log4j-over-slf4j";
+        version = "2.0.6";
+        hash = "sha256-QHMpiJioL0KeHr2iNaMUc7G0jDR94ShnNbtnkiUm6uQ=";
+      })
+      (fetchMavenArtifact {
+        groupId = "org.slf4j";
+        artifactId = "slf4j-api";
+        version = "2.0.6";
+        hash = "sha256-LyqS1BCyaBOdfWO3XtJeIZlc/kEAwZvyNXfP28gHe9o=";
+      })
+    ];
+    suasync = [
+      (fetchMavenArtifact {
+        groupId = "com.stumbleupon";
+        artifactId = "async";
+        version = "1.4.0";
+        hash = "sha256-FJ1HH68JOkjNtkShjLTJ8K4NO/A/qu88ap7J7SEndrM=";
+      })
+    ];
+    validation-api = [
+      (fetchMavenArtifact {
+        groupId = "javax.validation";
+        artifactId = "validation-api";
+        version = "1.0.0.GA";
+        hash = "sha256-5FnzE+vG2ySD+M6q05rwcIY2G0dPqS5A9ELo3l2Yldw=";
+      })
+      (fetchMavenArtifact {
+        groupId = "javax.validation";
+        artifactId = "validation-api";
+        version = "1.0.0.GA";
+        classifier = "sources";
+        hash = "sha256-o5TVKpt/4rsU8HGNKzyDCP/o836RGVYBI5jVXJ+fm1Q=";
+      })
+    ];
+    zookeeper = [
+      (fetchMavenArtifact {
+        groupId = "org.apache.zookeeper";
+        artifactId = "zookeeper";
+        version = "3.4.6";
+        hash = "sha256-ijdaHvmMvA4fbp39DZbZFLdNN60AtL+Bvrd/qPNNM64=";
+      })
+    ];
+  };
+in stdenv.mkDerivation rec {
+  pname = "opentsdb";
+  version = "2.4.1";
+
+  src = fetchFromGitHub {
+    owner = "OpenTSDB";
+    repo = "opentsdb";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-899m1H0UCLsI/bnSrNFnnny4MxSw3XBzf7rgDuEajDs=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "bump-deps.0.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/2f4bbfba2f9a32f9295123e8b90adba022c11ece.patch";
+      hash = "sha256-4LpR4O8mNiJZQ7PUmAzFdkZAaF8i9/ZM5NhQ+8AJgSw=";
+    })
+    (fetchpatch {
+      name = "bump-deps.1.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/8c6a86ddbc367c7e4e2877973b70f77c105c6158.patch";
+      hash = "sha256-LZHqDOhwO/Gfgu870hJ6/uxnmigv7RP8OFe2a7Ug5SM=";
+    })
+    (fetchpatch {
+      name = "bump-deps.2.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/9b62442ba5c006376f57ef250fb7debe1047c3bf.patch";
+      hash = "sha256-2VjI9EkirKj4h7xhUtWdnKxJG0Noz3Hk5njm3pYEU1g=";
+    })
+    (fetchpatch {
+      name = "CVE-2023-25826.prerequisite.0.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/a82a4f85f0fc1af554a104f28cc495451b26b1f6.patch";
+      hash = "sha256-GgoRZUGdKthK+ZwMpgSQQ4V2oHyqi8SwWGZT571gltQ=";
+    })
+    (fetchpatch {
+      name = "CVE-2023-25826.prerequisite.1.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/22b27ea30a859a6dbdcd65fcdf61190d46e1b677.patch";
+      hash = "sha256-pXo6U7d4iy2squAiFvV2iDAQcNDdrl0pIOQEXfkJ3a8=";
+    })
+    (fetchpatch {
+      name = "CVE-2023-25826.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/07c4641471c6f5c2ab5aab615969e97211eb50d9.patch";
+      hash = "sha256-88gIOhAhLCQC/UesIdYtjf0UgKNfnO0W2icyoMmiC3U=";
+    })
+    (fetchpatch {
+      name = "CVE-2023-25827.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/fa88d3e4b5369f9fb73da384fab0b23e246309ba.patch";
+      hash = "sha256-FJHUiEmGhBIHoyOwNZtUWA36ENbrqDkUT8HfccmMSe8=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    makeWrapper
+  ];
+
+  buildInputs = [ curl jdk nettools python3 git ];
+
+  preConfigure = ''
+    chmod +x build-aux/fetchdep.sh.in
+    patchShebangs ./build-aux/
+    ./bootstrap
+  '';
+
+  preBuild = lib.concatStrings (lib.mapAttrsToList (dir: lib.concatMapStrings (artifact: ''
+    cp ${artifact}/share/java/* third_party/${dir}
+  '')) artifacts);
+
+  postInstall = ''
+    wrapProgram $out/bin/tsdb \
+      --set JAVA_HOME "${jre}" \
+      --set JAVA "${jre}/bin/java"
+  '';
+
+  meta = with lib; {
+    description = "Time series database with millisecond precision";
+    homepage = "http://opentsdb.net";
+    license = licenses.lgpl21Plus;
+    platforms = lib.platforms.linux;
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # maven dependencies
+    ];
+    maintainers = [ ];
+    mainProgram = "tsdb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/oppai-ng/default.nix b/nixpkgs/pkgs/tools/misc/oppai-ng/default.nix
new file mode 100644
index 000000000000..cf1ea893fcf9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/oppai-ng/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "oppai-ng";
+  version = "4.1.0";
+
+  src = fetchFromGitHub {
+    owner = "Francesco149";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-L9eraLOWm1tMImS8bLB9T4Md4VdTSxqI9Bt4r8eqxqs=";
+  };
+
+  buildPhase = ''
+    ./build
+    ./libbuild
+  '';
+
+  installPhase = ''
+    install -D oppai $out/bin/oppai
+    install -D oppai.c $out/include/oppai.c
+    install -D liboppai.so $out/lib/liboppai.so
+  '';
+
+  meta = with lib; {
+    description = "Difficulty and pp calculator for osu!";
+    homepage = "https://github.com/Francesco149/oppai-ng";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ tadeokondrak ];
+    mainProgram = "oppai";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/org-stats/default.nix b/nixpkgs/pkgs/tools/misc/org-stats/default.nix
new file mode 100644
index 000000000000..ead4f9e18d33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/org-stats/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, substituteAll
+, installShellFiles
+, testers
+, org-stats
+}:
+
+buildGoModule rec {
+  pname = "org-stats";
+  version = "1.11.2";
+
+  src = fetchFromGitHub {
+    owner = "caarlos0";
+    repo = "org-stats";
+    rev = "v${version}";
+    hash = "sha256-b0Cfs4EqQOft/HNAoJvRriCMzNiOgYagBLiPYgsDgJM=";
+  };
+
+  vendorHash = "sha256-LKpnEXVfxBR3cebv46QontDVeA64MJe0vNiKSnTjLtQ=";
+
+  patches = [
+    # patch in version information
+    # since `debug.ReadBuildInfo` does not work with `go build
+    (substituteAll {
+      src = ./version.patch;
+      inherit version;
+    })
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    $out/bin/org-stats man > org-stats.1
+    installManPage org-stats.1
+
+    installShellCompletion --cmd org-stats \
+      --bash <($out/bin/org-stats completion bash) \
+      --fish <($out/bin/org-stats completion fish) \
+      --zsh <($out/bin/org-stats completion zsh)
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = org-stats;
+      command = "org-stats version";
+    };
+  };
+
+  meta = with lib; {
+    description = "Get the contributor stats summary from all repos of any given organization";
+    homepage = "https://github.com/caarlos0/org-stats";
+    changelog = "https://github.com/caarlos0/org-stats/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "org-stats";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/org-stats/version.patch b/nixpkgs/pkgs/tools/misc/org-stats/version.patch
new file mode 100644
index 000000000000..8cf625fc396c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/org-stats/version.patch
@@ -0,0 +1,11 @@
+--- a/cmd/version.go
++++ b/cmd/version.go
+@@ -16,7 +16,7 @@ var versionCmd = &cobra.Command{
+ 			if sum == "" {
+ 				sum = "none"
+ 			}
+-			fmt.Printf("https://%s %s @ %s\n", info.Main.Path, info.Main.Version, sum)
++			fmt.Printf("https://%s %s @ %s\n", info.Main.Path, "@version@", sum)
+ 		} else {
+ 			fmt.Println("unknown")
+ 		}
diff --git a/nixpkgs/pkgs/tools/misc/os-prober/default.nix b/nixpkgs/pkgs/tools/misc/os-prober/default.nix
new file mode 100644
index 000000000000..5d15b7077385
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/os-prober/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchFromGitLab, makeWrapper, nixosTests,
+# optional dependencies, the command(s) they provide
+coreutils,  # mktemp
+grub2,      # grub-mount and grub-probe
+cryptsetup, # cryptsetup
+libuuid,    # blkid and blockdev
+systemd,    # udevadm
+ntfs3g,     # ntfs3g
+dmraid,     # dmraid
+lvm2        # lvs
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.81";
+  pname = "os-prober";
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "installer-team";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-3FXfGadIcmKp4qn6ZDcOSQHYsUNP2ObL1cJesNle+8A=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  installPhase = ''
+    # executables
+    install -Dt $out/bin os-prober linux-boot-prober
+    install -Dt $out/lib newns
+    install -Dt $out/share common.sh
+
+    # probes
+    case "${stdenv.hostPlatform.system}" in
+        i686*|x86_64*) ARCH=x86;;
+        powerpc*) ARCH=powerpc;;
+        arm*) ARCH=arm;;
+        *) ARCH=other;;
+    esac;
+    for probes in os-probes os-probes/mounted os-probes/init linux-boot-probes linux-boot-probes/mounted; do
+      install -Dt $out/lib/$probes $probes/common/*;
+      if [ -e "$probes/$ARCH" ]; then
+        mkdir -p $out/lib/$probes
+        cp -r $probes/$ARCH/* $out/lib/$probes;
+      fi;
+    done
+    if [ $ARCH = "x86" ]; then
+        cp -r os-probes/mounted/powerpc/20macosx $out/lib/os-probes/mounted;
+    fi;
+  '';
+  postFixup = ''
+    for file in $(find $out  -type f ! -name newns) ; do
+      substituteInPlace $file \
+        --replace /usr/share/os-prober/ $out/share/ \
+        --replace /usr/lib/os-probes/ $out/lib/os-probes/ \
+        --replace /usr/lib/linux-boot-probes/ $out/lib/linux-boot-probes/ \
+        --replace /usr/lib/os-prober/ $out/lib/
+    done;
+    for file in $out/bin/*; do
+      wrapProgram $file \
+        --suffix PATH : ${lib.makeBinPath [ grub2 systemd coreutils cryptsetup libuuid ntfs3g lvm2 dmraid ]} \
+        --run "[ -d /var/lib/os-prober ] || mkdir /var/lib/os-prober"
+    done;
+  '';
+
+  passthru.tests = {
+    os-prober = nixosTests.os-prober;
+  };
+  meta = with lib; {
+    description = "Utility to detect other OSs on a set of drives";
+    homepage = "http://packages.debian.org/source/sid/os-prober";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ symphorien ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/oscclip/default.nix b/nixpkgs/pkgs/tools/misc/oscclip/default.nix
new file mode 100644
index 000000000000..3020998d9392
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/oscclip/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "oscclip";
+  version = "0.4.1";
+
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "rumpelsepp";
+    repo = "oscclip";
+    rev = "v${version}";
+    sha256 = "sha256-WQvZn+SWamEqEXPutIZVDZTIczybtHUG9QsN8XxUeg8=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ poetry-core ];
+
+  meta = with lib; {
+    description = "A program that allows to copy/paste from a terminal using osc-52 control sequences";
+    longDescription = ''
+      oscclip provides two commands: osc-copy and osc-paste. These commands allow to interact with the clipboard through the terminal directly.
+      This means that they work through ssh sessions for example (given that the terminal supports osc-52 sequences).
+    '';
+    homepage = "https://github.com/rumpelsepp/oscclip";
+
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ rumpelsepp traxys ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix b/nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix
new file mode 100644
index 000000000000..774ccd946aa7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, pkg-config
+, meson
+, ninja
+, gettext
+, glib
+, libxml2
+, perl
+, python3
+, libxslt
+, libarchive
+, bzip2
+, xz
+, json-glib
+, libsoup_3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "osinfo-db-tools";
+  version = "1.11.0";
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/libosinfo/${pname}-${version}.tar.xz";
+    sha256 = "sha256-i6bTG7XvBwVuOIeeBwZxr7z+wOtBqH+ZUEULu4MbCh0=";
+  };
+
+  patches = [
+    # Fix build with libxml 2.12
+    (fetchpatch {
+      url = "https://gitlab.com/libosinfo/osinfo-db-tools/-/commit/019487cbc79925e49988789bf533c78dab7e1842.patch";
+      hash = "sha256-skuspjHDRilwym+hFInrSvIZ+rrzBOoI7WeFj2SrGkc=";
+    })
+    (fetchpatch {
+      url = "https://gitlab.com/libosinfo/osinfo-db-tools/-/commit/34378a4ac257f2f5fcf364786d1634a8c36b304f.patch";
+      hash = "sha256-I9vRRbnotqRi8+7q1eZLJwQLaT9J4G3h+3rKxlaCME4=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    perl
+    python3
+  ];
+
+  buildInputs = [
+    glib
+    json-glib
+    libxml2
+    libxslt
+    libarchive
+    bzip2
+    xz
+    libsoup_3
+  ];
+
+  meta = with lib; {
+    description = "Tools for managing the osinfo database";
+    homepage = "https://libosinfo.org/";
+    changelog = "https://gitlab.com/libosinfo/osinfo-db-tools/-/blob/v${version}/NEWS";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/osm2pgsql/default.nix b/nixpkgs/pkgs/tools/misc/osm2pgsql/default.nix
new file mode 100644
index 000000000000..addfb26dfe3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/osm2pgsql/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, expat
+, fmt
+, proj
+, bzip2
+, zlib
+, boost
+, postgresql
+, python3
+, withLuaJIT ? false
+, lua
+, luajit
+, libosmium
+, nlohmann_json
+, opencv
+, potrace
+, protozero
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "osm2pgsql";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "osm2pgsql-dev";
+    repo = "osm2pgsql";
+    rev = finalAttrs.version;
+    hash = "sha256-IFAQ7iA37QXnWOSxUjh9EW7ss85k0h948JGuuUcpr5w=";
+  };
+
+  postPatch = ''
+    # Remove bundled libraries
+    rm -r contrib
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    boost
+    bzip2
+    expat
+    fmt
+    libosmium
+    nlohmann_json
+    opencv
+    postgresql
+    potrace
+    proj
+    protozero
+    (python3.withPackages (p: with p; [ psycopg2 pyosmium ]))
+    zlib
+  ] ++ lib.optional withLuaJIT luajit
+    ++ lib.optional (!withLuaJIT) lua;
+
+  cmakeFlags = [
+    "-DEXTERNAL_LIBOSMIUM=ON"
+    "-DEXTERNAL_PROTOZERO=ON"
+    "-DEXTERNAL_FMT=ON"
+  ] ++ lib.optional withLuaJIT "-DWITH_LUAJIT:BOOL=ON";
+
+  installFlags = [ "install-gen" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+  };
+
+  meta = with lib; {
+    description = "OpenStreetMap data to PostgreSQL converter";
+    homepage = "https://osm2pgsql.org";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jglukasik das-g ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/ostree-rs-ext/Cargo.lock b/nixpkgs/pkgs/tools/misc/ostree-rs-ext/Cargo.lock
new file mode 100644
index 000000000000..fb9855780fa5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree-rs-ext/Cargo.lock
@@ -0,0 +1,2303 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ambient-authority"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "camino"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2"
+
+[[package]]
+name = "cap-primitives"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42068f579028e856717d61423645c85d2d216dde8eff62c9b30140e725c79177"
+dependencies = [
+ "ambient-authority",
+ "fs-set-times",
+ "io-extras",
+ "io-lifetimes",
+ "ipnet",
+ "maybe-owned",
+ "rustix 0.37.19",
+ "windows-sys 0.48.0",
+ "winx",
+]
+
+[[package]]
+name = "cap-std"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "559ad6fab5fedcc9bd5877160e1433fcd481f8af615068d6ca49472b1201cc6c"
+dependencies = [
+ "cap-primitives",
+ "io-extras",
+ "io-lifetimes",
+ "rustix 0.37.19",
+]
+
+[[package]]
+name = "cap-std-ext"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8031eb6e1061d0bdabe0c14eb6c37f02e2ee3621976782881eb0f666ab4673ce"
+dependencies = [
+ "cap-tempfile",
+ "rustix 0.36.13",
+]
+
+[[package]]
+name = "cap-tempfile"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92372a5de78a858f20c22a8dbe3ea55e1cc2daeb82016a3150dab8cf51ea3235"
+dependencies = [
+ "cap-std",
+ "rand",
+ "rustix 0.37.19",
+ "uuid 1.3.3",
+]
+
+[[package]]
+name = "capctl"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbdc32a78afc325d71a48d13084f1c3ddf67cc5dc06c6e5439a8630b14612cad"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clap_mangen"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "105180c05a72388d5f5e4e4f6c79eecb92497bda749fa8f963a16647c5d5377f"
+dependencies = [
+ "clap",
+ "roff",
+]
+
+[[package]]
+name = "console"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "containers-image-proxy"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc8ef9cc4d183f3bfd3c232f304286b91cff5c9aa35665ea2e89499e1e0d021"
+dependencies = [
+ "anyhow",
+ "cap-std-ext",
+ "cap-tempfile",
+ "capctl",
+ "fn-error-context",
+ "futures-util",
+ "libc",
+ "nix 0.26.2",
+ "oci-spec",
+ "once_cell",
+ "semver",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3"
+dependencies = [
+ "derive_builder_macro",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder_macro"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68"
+dependencies = [
+ "derive_builder_core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "libz-sys",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fn-error-context"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cd66269887534af4b0c3e3337404591daa8dc8b9b2b3db71f9523beb4bafb41"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "fs-set-times"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7833d0f115a013d51c55950a3b09d30e4b057be9961b709acb9b5b17a1108861"
+dependencies = [
+ "io-lifetimes",
+ "rustix 0.37.19",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-macro",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getset"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "gio"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "gio-sys",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gvariant"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f7a982b6b38ff2380ea1b1b480cb7f5b51dac917aceff2e16af0c207781e13a"
+dependencies = [
+ "gvariant-macro",
+ "memchr",
+ "ref-cast",
+]
+
+[[package]]
+name = "gvariant-macro"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9915719ccd7435a28103eea8dba78bcf35a25d5637c70273b47dbb49c6d2eb6d"
+dependencies = [
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729"
+dependencies = [
+ "console",
+ "number_prefix",
+ "portable-atomic 0.3.20",
+ "unicode-width",
+]
+
+[[package]]
+name = "indoc"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-extras"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fde93d48f0d9277f977a333eca8313695ddd5301dc96f7e02aeddcb0dd99096f"
+dependencies = [
+ "io-lifetimes",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "js-sys"
+version = "0.3.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "libsystemd"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8144587c71c16756b1055d3dcb0c75cb605a10ecd6523cc33702d5f90902bf6d"
+dependencies = [
+ "hmac",
+ "libc",
+ "log",
+ "nix 0.23.2",
+ "nom",
+ "once_cell",
+ "serde",
+ "sha2",
+ "thiserror",
+ "uuid 0.8.2",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matchers"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "maybe-owned"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "oci-spec"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98135224dd4faeb24c05a2fac911ed53ea6b09ecb09d7cada1cb79963ab2ee34"
+dependencies = [
+ "derive_builder",
+ "getset",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "olpc-cjson"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d637c9c15b639ccff597da8f4fa968300651ad2f1e968aefc3b4927a6fb2027a"
+dependencies = [
+ "serde",
+ "serde_json",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+
+[[package]]
+name = "ostree"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f9c3da362376d17ac2e2d5759fe544cdc7471b66e98c324be5efd2c7995672d"
+dependencies = [
+ "base64",
+ "bitflags",
+ "cap-std",
+ "gio",
+ "glib",
+ "hex",
+ "io-lifetimes",
+ "libc",
+ "once_cell",
+ "ostree-sys",
+ "thiserror",
+]
+
+[[package]]
+name = "ostree-ext"
+version = "0.10.6"
+dependencies = [
+ "anyhow",
+ "async-compression",
+ "bitflags",
+ "camino",
+ "cap-std-ext",
+ "cap-tempfile",
+ "chrono",
+ "clap",
+ "clap_mangen",
+ "containers-image-proxy",
+ "flate2",
+ "fn-error-context",
+ "futures-util",
+ "gvariant",
+ "hex",
+ "indicatif",
+ "indoc",
+ "io-lifetimes",
+ "libc",
+ "libsystemd",
+ "oci-spec",
+ "olpc-cjson",
+ "once_cell",
+ "openssl",
+ "ostree",
+ "ostree-ext",
+ "pin-project",
+ "quickcheck",
+ "regex",
+ "serde",
+ "serde_json",
+ "sh-inline",
+ "tar",
+ "tempfile",
+ "term_size",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "ostree-ext-cli"
+version = "0.1.4"
+dependencies = [
+ "anyhow",
+ "clap",
+ "libc",
+ "log",
+ "ostree-ext",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "ostree-sys"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe57dcbabc3b1ef80f97eb614453d90dc81a39c8f26eb540bd8e68bcae4d0e2f"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "portable-atomic"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e30165d31df606f5726b090ec7592c308a0eaf61721ff64c9a3018e344a8753e"
+dependencies = [
+ "portable-atomic 1.3.2",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc59d1bcc64fc5d021d67521f818db868368028108d37f0e98d74e33f68297b5"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4ec6d5fe0b140acb27c9a0444118cf55bfbb4e0b259739429abb4521dd67c16"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quickcheck"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+dependencies = [
+ "env_logger",
+ "log",
+ "rand",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.7.1",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "roff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
+
+[[package]]
+name = "rustix"
+version = "0.36.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a38f9520be93aba504e8ca974197f46158de5dcaa9fa04b57c57cd6a679d658"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "itoa",
+ "libc",
+ "linux-raw-sys 0.1.4",
+ "once_cell",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "itoa",
+ "libc",
+ "linux-raw-sys 0.3.7",
+ "once_cell",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sh-inline"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea42106b6078e775caeda9d0c8dbd022526f9f9369fe8faa71eb736d36f84360"
+dependencies = [
+ "cap-std-ext",
+ "shlex",
+ "tempfile",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shlex"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml",
+ "version-compare",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5"
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix 0.37.19",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "term_size"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+dependencies = [
+ "serde",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71"
+dependencies = [
+ "ansi_term",
+ "chrono",
+ "lazy_static",
+ "matchers",
+ "regex",
+ "serde",
+ "serde_json",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-serde",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "uuid"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winx"
+version = "0.35.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c52a121f0fbf9320d5f2a9a5d82f6cb7557eda5e8b47fc3e7f359ec866ae960"
+dependencies = [
+ "bitflags",
+ "io-lifetimes",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
diff --git a/nixpkgs/pkgs/tools/misc/ostree-rs-ext/default.nix b/nixpkgs/pkgs/tools/misc/ostree-rs-ext/default.nix
new file mode 100644
index 000000000000..d7b09b65f7ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree-rs-ext/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, makeWrapper
+, glib
+, openssl
+, zlib
+, ostree
+, stdenv
+, darwin
+, util-linux
+, skopeo
+, gnutar
+, ima-evm-utils
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ostree-rs-ext";
+  version = "0.10.6";
+
+  src = fetchFromGitHub {
+    owner = "ostreedev";
+    repo = "ostree-rs-ext";
+    rev = "ostree-ext-v${version}";
+    hash = "sha256-kk/icUevzKMpAQ6IoruUxuKwTxXHlKLrr63Hch1w7po=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  postPatch = ''
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [
+    glib
+    openssl
+    zlib
+    ostree
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  checkFlags = [
+    # these tests expects /var/tmp to be available
+    "--skip=test_cli_fns"
+    "--skip=test_container_chunked"
+    "--skip=test_container_import_export_v1"
+    "--skip=test_container_var_content"
+    "--skip=test_container_write_derive"
+    "--skip=test_container_write_derive_sysroot_hardlink"
+    "--skip=test_diff"
+    "--skip=test_tar_export_reproducible"
+    "--skip=test_tar_export_structure"
+    "--skip=test_tar_import_empty"
+    "--skip=test_tar_import_export"
+    "--skip=test_tar_import_signed"
+    "--skip=test_tar_write"
+    "--skip=test_tar_write_tar_layer"
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/${meta.mainProgram}" --prefix PATH : ${lib.makeBinPath [ util-linux skopeo gnutar ostree ima-evm-utils ]}
+  '';
+
+  meta = with lib; {
+    description = "Rust library with higher level APIs on top of the core ostree API";
+    homepage = "https://github.com/ostreedev/ostree-rs-ext";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "ostree-ext-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ostree/01-Drop-ostree-trivial-httpd-CLI-move-to-tests-director.patch b/nixpkgs/pkgs/tools/misc/ostree/01-Drop-ostree-trivial-httpd-CLI-move-to-tests-director.patch
new file mode 100644
index 000000000000..c255a2762017
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree/01-Drop-ostree-trivial-httpd-CLI-move-to-tests-director.patch
@@ -0,0 +1,268 @@
+From 196c2e1036ed990bca57c199f271c0359509e9f9 Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters@verbum.org>
+Date: Tue, 19 Jun 2018 09:34:18 -0400
+Subject: [PATCH] Drop "ostree trivial-httpd" CLI, move to tests directory
+
+See https://github.com/ostreedev/ostree/issues/1593
+
+Basically this makes it easier for people packaging, as the trivial-httpd
+is only for tests, and this way the binary will live with the tests.
+
+Also at this point nothing should depend on `ostree trivial-httpd`.
+---
+ Makefile-man.am              |   6 --
+ Makefile-ostree.am           |   7 ---
+ Makefile-tests.am            |   7 +++
+ configure.ac                 |   9 ---
+ man/ostree-trivial-httpd.xml | 116 -----------------------------------
+ src/ostree/main.c            |   5 --
+ tests/libtest.sh             |  13 ++--
+ 7 files changed, 12 insertions(+), 151 deletions(-)
+ delete mode 100644 man/ostree-trivial-httpd.xml
+
+diff --git a/Makefile-man.am b/Makefile-man.am
+index 78025fff..4aa668f6 100644
+--- a/Makefile-man.am
++++ b/Makefile-man.am
+@@ -32,12 +32,6 @@ ostree-init.1 ostree-log.1 ostree-ls.1 ostree-prune.1 ostree-pull-local.1 \
+ ostree-pull.1 ostree-refs.1 ostree-remote.1 ostree-reset.1 \
+ ostree-rev-parse.1 ostree-show.1 ostree-sign.1 ostree-summary.1 \
+ ostree-static-delta.1
+-if USE_LIBSOUP
+-man1_files += ostree-trivial-httpd.1
+-else
+-# We still want to distribute the source, even if we are not building it
+-EXTRA_DIST += man/ostree-trivial-httpd.xml
+-endif
+ 
+ if BUILDOPT_FUSE
+ man1_files += rofiles-fuse.1
+diff --git a/Makefile-ostree.am b/Makefile-ostree.am
+index 82af1681..dabc7004 100644
+--- a/Makefile-ostree.am
++++ b/Makefile-ostree.am
+@@ -138,13 +138,6 @@ ostree_SOURCES += src/ostree/ot-builtin-pull.c
+ endif
+ 
+ if USE_LIBSOUP
+-# Eventually once we stop things from using this, we should support disabling this
+-ostree_SOURCES += src/ostree/ot-builtin-trivial-httpd.c
+-pkglibexec_PROGRAMS += ostree-trivial-httpd
+-ostree_trivial_httpd_SOURCES = src/ostree/ostree-trivial-httpd.c
+-ostree_trivial_httpd_CFLAGS = $(ostree_bin_shared_cflags) $(OT_INTERNAL_SOUP_CFLAGS)
+-ostree_trivial_httpd_LDADD = $(ostree_bin_shared_ldadd) $(OT_INTERNAL_SOUP_LIBS)
+-
+ if !USE_CURL
+ # This is necessary for the cookie jar bits
+ ostree_CFLAGS += $(OT_INTERNAL_SOUP_CFLAGS)
+diff --git a/Makefile-tests.am b/Makefile-tests.am
+index 6bae65cf..47b3ab20 100644
+--- a/Makefile-tests.am
++++ b/Makefile-tests.am
+@@ -275,6 +275,13 @@ _installed_or_uninstalled_test_programs += \
+ 	$(NULL)
+ endif
+ 
++if USE_LIBSOUP
++test_extra_programs += ostree-trivial-httpd
++ostree_trivial_httpd_SOURCES = src/ostree/ostree-trivial-httpd.c
++ostree_trivial_httpd_CFLAGS = $(common_tests_cflags) $(OT_INTERNAL_SOUP_CFLAGS)
++ostree_trivial_httpd_LDADD = $(common_tests_ldadd) $(OT_INTERNAL_SOUP_LIBS)
++endif
++
+ if USE_AVAHI
+ test_programs += tests/test-repo-finder-avahi
+ endif
+diff --git a/configure.ac b/configure.ac
+index 93b98cb9..a588eea6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -186,14 +186,6 @@ if test x$with_soup != xno; then OSTREE_FEATURES="$OSTREE_FEATURES libsoup"; fi
+ AM_CONDITIONAL(USE_LIBSOUP, test x$with_soup != xno)
+ AM_CONDITIONAL(HAVE_LIBSOUP_CLIENT_CERTS, test x$have_libsoup_client_certs = xyes)
+ 
+-AC_ARG_ENABLE(trivial-httpd-cmdline,
+-  [AS_HELP_STRING([--enable-trivial-httpd-cmdline],
+-  [Continue to support "ostree trivial-httpd" [default=no]])],,
+-  enable_trivial_httpd_cmdline=no)
+-AS_IF([test x$enable_trivial_httpd_cmdline = xyes],
+-  [AC_DEFINE([BUILDOPT_ENABLE_TRIVIAL_HTTPD_CMDLINE], 1, [Define if we are enabling ostree trivial-httpd entrypoint])]
+-)
+-
+ AS_IF([test x$with_curl = xyes && test x$with_soup = xno], [
+   AC_MSG_WARN([Curl enabled, but libsoup is not; libsoup is needed for tests (make check, etc.)])
+ ])
+@@ -606,7 +598,6 @@ echo "
+     introspection:                                $found_introspection
+     rofiles-fuse:                                 $enable_rofiles_fuse
+     HTTP backend:                                 $fetcher_backend
+-    \"ostree trivial-httpd\":                       $enable_trivial_httpd_cmdline
+     SELinux:                                      $with_selinux
+     fs-verity:                                    $ac_cv_header_linux_fsverity_h
+     cryptographic checksums:                      $with_crypto
+diff --git a/man/ostree-trivial-httpd.xml b/man/ostree-trivial-httpd.xml
+deleted file mode 100644
+index 7ba1dae8..00000000
+--- a/man/ostree-trivial-httpd.xml
++++ /dev/null
+@@ -1,116 +0,0 @@
+-<?xml version='1.0'?> <!--*-nxml-*-->
+-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+-    "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+-
+-<!--
+-Copyright 2011,2013 Colin Walters <walters@verbum.org>
+-
+-SPDX-License-Identifier: LGPL-2.0+
+-
+-This library is free software; you can redistribute it and/or
+-modify it under the terms of the GNU Lesser General Public
+-License as published by the Free Software Foundation; either
+-version 2 of the License, or (at your option) any later version.
+-
+-This library is distributed in the hope that it will be useful,
+-but WITHOUT ANY WARRANTY; without even the implied warranty of
+-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-Lesser General Public License for more details.
+-
+-You should have received a copy of the GNU Lesser General Public
+-License along with this library. If not, see <https://www.gnu.org/licenses/>.
+--->
+-
+-<refentry id="ostree">
+-
+-    <refentryinfo>
+-        <title>ostree trivial-httpd</title>
+-        <productname>OSTree</productname>
+-
+-        <authorgroup>
+-            <author>
+-                <contrib>Developer</contrib>
+-                <firstname>Colin</firstname>
+-                <surname>Walters</surname>
+-                <email>walters@verbum.org</email>
+-            </author>
+-        </authorgroup>
+-    </refentryinfo>
+-
+-    <refmeta>
+-        <refentrytitle>ostree trivial-httpd</refentrytitle>
+-        <manvolnum>1</manvolnum>
+-    </refmeta>
+-
+-    <refnamediv>
+-        <refname>ostree-trivial-httpd</refname>
+-        <refpurpose>Simple webserver</refpurpose>
+-    </refnamediv>
+-
+-    <refsynopsisdiv>
+-            <cmdsynopsis>
+-                <command>ostree trivial-httpd</command> <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt">DIR</arg>
+-            </cmdsynopsis>
+-    </refsynopsisdiv>
+-
+-<!-- Don't entirely understand this command.  Needs details, better content-->
+-    <refsect1>
+-        <title>Description</title>
+-
+-        <para>
+-            This runs a simple webserver and keeps it running until killed.  If DIR is not specified, it defaults to the current directory.
+-        </para>
+-    </refsect1>
+-
+-    <refsect1>
+-        <title>Options</title>
+-
+-        <variablelist>
+-            <varlistentry>
+-                <term><option>--daemonize</option>,<option>-d</option></term>
+-
+-                <listitem><para>
+-                    Fork into background when ready.
+-                </para></listitem>
+-            </varlistentry>
+-
+-            <varlistentry>
+-                <term><option>--autoexit</option></term>
+-
+-                <listitem><para>
+-                    Automatically exit when directory is deleted.
+-                </para></listitem>
+-            </varlistentry>
+-
+-            <varlistentry>
+-                <term><option>--port-file</option>,<option>-p</option>="PATH"</term>
+-
+-                <listitem><para>
+-                    Write port number to PATH (- for standard output).
+-                </para></listitem>
+-            </varlistentry>
+-
+-            <varlistentry>
+-                <term><option>--port</option>,<option>-P</option></term>
+-
+-                <listitem><para>
+-                    Use the specified TCP port to listen on.
+-                </para></listitem>
+-            </varlistentry>
+-
+-            <varlistentry>
+-                <term><option>--force-range-requests</option></term>
+-
+-                <listitem><para>
+-                    Force range requests by only serving half of files.
+-                </para></listitem>
+-            </varlistentry>
+-        </variablelist>
+-    </refsect1>
+-
+-<!-- NEED EXAMPLE OUTPUT HERE!-->
+-    <refsect1>
+-        <title>Example</title>
+-        <para><command>$ ostree trivial-httpd</command></para>
+-    </refsect1>
+-</refentry>
+diff --git a/src/ostree/main.c b/src/ostree/main.c
+index 7d17080c..19d9b8b0 100644
+--- a/src/ostree/main.c
++++ b/src/ostree/main.c
+@@ -118,11 +118,6 @@ static OstreeCommand commands[] = {
+   { "summary", OSTREE_BUILTIN_FLAG_NONE,
+     ostree_builtin_summary,
+     "Manage summary metadata" },
+-#if defined(HAVE_LIBSOUP) && defined(BUILDOPT_ENABLE_TRIVIAL_HTTPD_CMDLINE)
+-  { "trivial-httpd", OSTREE_BUILTIN_FLAG_NONE,
+-    ostree_builtin_trivial_httpd,
+-    NULL },
+-#endif
+   { NULL }
+ };
+ 
+diff --git a/tests/libtest.sh b/tests/libtest.sh
+index 686f08dc..79f8bd1f 100755
+--- a/tests/libtest.sh
++++ b/tests/libtest.sh
+@@ -174,15 +174,12 @@ fi
+ if test -n "${OSTREE_UNINSTALLED:-}"; then
+     OSTREE_HTTPD=${OSTREE_UNINSTALLED}/ostree-trivial-httpd
+ else
+-    # trivial-httpd is now in $libexecdir by default, which we don't
+-    # know at this point. Fortunately, libtest.sh is also in
+-    # $libexecdir, so make an educated guess. If it's not found, assume
+-    # it's still runnable as "ostree trivial-httpd".
+-    if [ -x "${test_srcdir}/../../libostree/ostree-trivial-httpd" ]; then
+-        OSTREE_HTTPD="${CMD_PREFIX} ${test_srcdir}/../../libostree/ostree-trivial-httpd"
+-    else
+-        OSTREE_HTTPD="${CMD_PREFIX} ostree trivial-httpd"
++    # trivial-httpd is now the test directory.
++    OSTREE_HTTPD="${G_TEST_BUILDDIR}/ostree-trivial-httpd"
++    if ! [ -x "${OSTREE_HTTPD}" ]; then
++        fatal "Failed to find ${OSTREE_HTTPD}"
+     fi
++    OSTREE_HTTPD="${CMD_PREFIX} ${OSTREE_HTTPD}"
+ fi
+ 
+ files_are_hardlinked() {
+-- 
+2.35.1
+
diff --git a/nixpkgs/pkgs/tools/misc/ostree/default.nix b/nixpkgs/pkgs/tools/misc/ostree/default.nix
new file mode 100644
index 000000000000..dcb4065a02c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree/default.nix
@@ -0,0 +1,156 @@
+{ stdenv
+, lib
+, fetchurl
+, substituteAll
+, pkg-config
+, gtk-doc
+, gobject-introspection
+, gjs
+, nixosTests
+, curl
+, glib
+, systemd
+, xz
+, e2fsprogs
+, libsoup
+, glib-networking
+, wrapGAppsNoGuiHook
+, gpgme
+, which
+, makeWrapper
+, autoconf
+, automake
+, libtool
+, fuse3
+, util-linuxMinimal
+, libselinux
+, libsodium
+, libarchive
+, libcap
+, bzip2
+, bison
+, libxslt
+, docbook-xsl-nons
+, docbook_xml_dtd_42
+, openssl
+, python3
+}:
+
+let
+  testPython = python3.withPackages (p: with p; [
+    pyyaml
+  ]);
+in stdenv.mkDerivation rec {
+  pname = "ostree";
+  version = "2023.2";
+
+  outputs = [ "out" "dev" "man" "installedTests" ];
+
+  src = fetchurl {
+    url = "https://github.com/ostreedev/ostree/releases/download/v${version}/libostree-${version}.tar.xz";
+    sha256 = "sha256-zrB4h1Wgv/VzjURUNVL7+IPPcd9IG6o8pyiNp6QCu4U=";
+  };
+
+  patches = [
+    # Tests access the helper using relative path
+    # https://github.com/ostreedev/ostree/issues/1593
+    # Patch from https://github.com/ostreedev/ostree/pull/1633
+    ./01-Drop-ostree-trivial-httpd-CLI-move-to-tests-director.patch
+
+    # Workarounds for https://github.com/ostreedev/ostree/issues/1592
+    ./fix-1592.patch
+
+    # Hard-code paths in tests
+    (substituteAll {
+      src = ./fix-test-paths.patch;
+      python3 = testPython.interpreter;
+      openssl = "${openssl}/bin/openssl";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    libtool
+    pkg-config
+    gtk-doc
+    gobject-introspection
+    which
+    makeWrapper
+    bison
+    libxslt
+    docbook-xsl-nons
+    docbook_xml_dtd_42
+    wrapGAppsNoGuiHook
+  ];
+
+  buildInputs = [
+    curl
+    glib
+    systemd
+    e2fsprogs
+    libsoup
+    glib-networking
+    gpgme
+    fuse3
+    libselinux
+    libsodium
+    libcap
+    libarchive
+    bzip2
+    xz
+    util-linuxMinimal # for libmount
+
+    # for installed tests
+    testPython
+    gjs
+  ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-curl"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-systemdsystemgeneratordir=${placeholder "out"}/lib/systemd/system-generators"
+    "--enable-installed-tests"
+    "--with-ed25519-libsodium"
+  ];
+
+  makeFlags = [
+    "installed_testdir=${placeholder "installedTests"}/libexec/installed-tests/libostree"
+    "installed_test_metadir=${placeholder "installedTests"}/share/installed-tests/libostree"
+    # Setting this flag was required as workaround for a clang bug, but seems not relevant anymore.
+    # https://github.com/ostreedev/ostree/commit/fd8795f3874d623db7a82bec56904648fe2c1eb7
+    # See also Makefile-libostree.am
+    "INTROSPECTION_SCANNER_ENV="
+  ];
+
+  preConfigure = ''
+    env NOCONFIGURE=1 ./autogen.sh
+  '';
+
+  postFixup = let
+    typelibPath = lib.makeSearchPath "/lib/girepository-1.0" [
+      (placeholder "out")
+      gobject-introspection
+    ];
+  in ''
+    for test in $installedTests/libexec/installed-tests/libostree/*.js; do
+      wrapProgram "$test" --prefix GI_TYPELIB_PATH : "${typelibPath}"
+    done
+  '';
+
+  passthru = {
+    tests = {
+      installedTests = nixosTests.installed-tests.ostree;
+    };
+  };
+
+  meta = with lib; {
+    description = "Git for operating system binaries";
+    homepage = "https://ostree.readthedocs.io/en/latest/";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ copumpkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ostree/fix-1592.patch b/nixpkgs/pkgs/tools/misc/ostree/fix-1592.patch
new file mode 100644
index 000000000000..6b154d3def18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree/fix-1592.patch
@@ -0,0 +1,149 @@
+--- a/tests/basic-test.sh
++++ b/tests/basic-test.sh
+@@ -226,7 +226,7 @@ cd ${test_tmpdir}
+ if $OSTREE commit ${COMMIT_ARGS} -b test-bootable --bootable $test_tmpdir/checkout-test2-4 2>err.txt; then
+     fatal "committed non-bootable tree"
+ fi
+-assert_file_has_content err.txt "error: .*No such file or directory"
++assert_file_has_content err.txt "error:.*No such file or directory"
+ echo "ok commit fails bootable if no kernel"
+ 
+ cd ${test_tmpdir}
+diff --git a/tests/pull-test.sh b/tests/pull-test.sh
+index f4084290..4af5ec6f 100644
+--- a/tests/pull-test.sh
++++ b/tests/pull-test.sh
+@@ -297,7 +297,7 @@ ostree_repo_init mirrorrepo-local --mode=archive
+ if ${CMD_PREFIX} ostree --repo=mirrorrepo-local pull-local otherrepo 2>err.txt; then
+     fatal "pull with mixed refs succeeded?"
+ fi
+-assert_file_has_content err.txt "error: Invalid ref name origin:main"
++assert_file_has_content err.txt "Invalid ref name origin:main"
+ ${CMD_PREFIX} ostree --repo=mirrorrepo-local pull-local otherrepo localbranch
+ ${CMD_PREFIX} ostree --repo=mirrorrepo-local rev-parse localbranch
+ ${CMD_PREFIX} ostree --repo=mirrorrepo-local fsck
+@@ -308,7 +308,7 @@ if ${CMD_PREFIX} ostree --repo=mirrorrepo-local pull-local otherrepo nosuchbranc
+     fatal "pulled nonexistent branch"
+ fi
+ # So true
+-assert_file_has_content_literal err.txt "error: Refspec 'nosuchbranch' not found"
++assert_file_has_content_literal err.txt "Refspec 'nosuchbranch' not found"
+ echo "ok pull-local nonexistent branch"
+ 
+ cd ${test_tmpdir}
+@@ -687,5 +687,5 @@ rm ostree-srv/gnomerepo/summary
+ if ${CMD_PREFIX} ostree --repo=repo pull origin main 2>err.txt; then
+     fatal "pull of invalid ref succeeded"
+ fi
+-assert_file_has_content_literal err.txt 'error: Fetching checksum for ref ((empty), main): Invalid rev lots of html here  lots of html here  lots of html here  lots of'
++assert_file_has_content_literal err.txt 'Fetching checksum for ref ((empty), main): Invalid rev lots of html here  lots of html here  lots of html here  lots of'
+ echo "ok pull got HTML for a ref"
+diff --git a/tests/test-config.sh b/tests/test-config.sh
+index 2d9aaf53..f1e28614 100755
+--- a/tests/test-config.sh
++++ b/tests/test-config.sh
+@@ -44,7 +44,7 @@ assert_file_has_content list.txt "http://example\.com/ostree/repo/"
+ if ${CMD_PREFIX} ostree config --repo=repo get --group=core lock-timeout-secs extra 2>err.txt; then
+     assert_not_reached "ostree config get should error out if too many arguments are given"
+ fi
+-assert_file_has_content err.txt "error: Too many arguments given"
++assert_file_has_content err.txt "Too many arguments given"
+ echo "ok config get"
+ 
+ ${CMD_PREFIX} ostree config --repo=repo set core.mode bare-user-only
+@@ -61,7 +61,7 @@ assert_file_has_content repo/config "http://example\.com/ostree/"
+ if ${CMD_PREFIX} ostree config --repo=repo set --group=core lock-timeout-secs 120 extra 2>err.txt; then
+     assert_not_reached "ostree config set should error out if too many arguments are given"
+ fi
+-assert_file_has_content err.txt "error: Too many arguments given"
++assert_file_has_content err.txt "Too many arguments given"
+ echo "ok config set"
+ 
+ # Check that using `--` works and that "ostree config unset" works
+@@ -78,7 +78,7 @@ if ${CMD_PREFIX} ostree config --repo=repo get core.lock-timeout-secs 2>err.txt;
+ fi
+ # Check for any character where quotation marks would be as they appear differently in the Fedora and Debian
+ # test suites (Ҡand '' respectively). See: https://github.com/ostreedev/ostree/pull/1839
+-assert_file_has_content err.txt "error: Key file does not have key .lock-timeout-secs. in group .core."
++assert_file_has_content err.txt "Key file does not have key .lock-timeout-secs. in group .core."
+ 
+ # Check that it's idempotent
+ ${CMD_PREFIX} ostree config --repo=repo unset core.lock-timeout-secs
+@@ -95,5 +95,5 @@ ${CMD_PREFIX} ostree config --repo=repo unset --group='remote "aoeuhtns"' 'xa.ti
+ if ${CMD_PREFIX} ostree config --repo=repo unset core.lock-timeout-secs extra 2>err.txt; then
+     assert_not_reached "ostree config unset should error out if too many arguments are given"
+ fi
+-assert_file_has_content err.txt "error: Too many arguments given"
++assert_file_has_content err.txt "Too many arguments given"
+ echo "ok config unset"
+diff --git a/tests/test-fsck-collections.sh b/tests/test-fsck-collections.sh
+index 3dbcdd23..d6359979 100755
+--- a/tests/test-fsck-collections.sh
++++ b/tests/test-fsck-collections.sh
+@@ -98,7 +98,7 @@ ${CMD_PREFIX} ostree fsck --repo=repo
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-bindings > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Commit has no requested ref ‘new-ref’ in ref binding metadata (‘ref1’)"
++assert_file_has_content fsck-error "Commit has no requested ref .new-ref. in ref binding metadata (.ref1.)"
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ 
+ echo "ok 3 fsck detects missing ref bindings"
+@@ -111,7 +111,7 @@ ${CMD_PREFIX} ostree --repo=repo refs --collections --create=org.example.Collect
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-bindings > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Commit has no requested ref ‘new-ref’ in ref binding metadata (‘ref1’)"
++assert_file_has_content fsck-error "Commit has no requested ref .new-ref. in ref binding metadata (.ref1.)"
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ assert_file_has_content fsck "^Validating refs in collections\.\.\.$"
+ 
+@@ -125,7 +125,7 @@ ${CMD_PREFIX} ostree --repo=repo refs --collections --create=org.example.Collect
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-bindings > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Commit has collection ID ‘org\.example\.Collection’ in collection binding metadata, while the remote it came from has collection ID ‘org\.example\.Collection2’"
++assert_file_has_content fsck-error "Commit has collection ID .org\.example\.Collection. in collection binding metadata, while the remote it came from has collection ID .org\.example\.Collection2."
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ assert_file_has_content fsck "^Validating refs in collections\.\.\.$"
+ 
+@@ -145,7 +145,7 @@ echo "ok 6 fsck ignores unreferenced ref bindings"
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-back-refs > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Collection–ref (org\.example\.Collection, ref1) in bindings for commit .* does not exist"
++assert_file_has_content fsck-error 'Collection.ref (org\.example\.Collection, ref1) in bindings for commit .* does not exist'
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ assert_file_has_content fsck "^Validating refs in collections\.\.\.$"
+ 
+@@ -184,7 +184,7 @@ ${CMD_PREFIX} ostree --repo=repo refs --create=new-ref $(cat ref3-checksum)
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-bindings > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Commit has no requested ref ‘new-ref’ in ref binding metadata (‘ref3’, ‘ref4’)"
++assert_file_has_content fsck-error "Commit has no requested ref .new-ref. in ref binding metadata (.ref3., .ref4.)"
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ 
+ echo "ok 9 fsck detects missing ref bindings"
+@@ -203,7 +203,7 @@ echo "ok 10 fsck ignores unreferenced ref bindings"
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-back-refs > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Ref ‘ref3’ in bindings for commit .* does not exist"
++assert_file_has_content fsck-error 'Ref .ref3. in bindings for commit .* does not exist'
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ 
+ echo "ok 11 fsck ignores unreferenced ref bindings"
+diff --git a/tests/test-remote-add.sh b/tests/test-remote-add.sh
+index 2f5ea634..0f63853c 100755
+--- a/tests/test-remote-add.sh
++++ b/tests/test-remote-add.sh
+@@ -81,7 +81,7 @@ echo "ok remote delete"
+ if $OSTREE remote delete nosuchremote 2>err.txt; then
+     assert_not_reached "Deleting remote unexpectedly succeeded"
+ fi
+-assert_file_has_content err.txt "error: "
++assert_file_has_content err.txt "not found"
+ 
+ $OSTREE remote delete --if-exists nosuchremote
+ echo "ok"
diff --git a/nixpkgs/pkgs/tools/misc/ostree/fix-test-paths.patch b/nixpkgs/pkgs/tools/misc/ostree/fix-test-paths.patch
new file mode 100644
index 000000000000..3e5b7e06999e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree/fix-test-paths.patch
@@ -0,0 +1,55 @@
+diff --git a/tests/libtest.sh b/tests/libtest.sh
+index ca457fa2..c0a529ff 100755
+--- a/tests/libtest.sh
++++ b/tests/libtest.sh
+@@ -709,12 +709,12 @@ gen_ed25519_keys ()
+ {
+   # Generate private key in PEM format
+   pemfile="$(mktemp -p ${test_tmpdir} ed25519_XXXXXX.pem)"
+-  openssl genpkey -algorithm ed25519 -outform PEM -out "${pemfile}"
++  @openssl@ genpkey -algorithm ed25519 -outform PEM -out "${pemfile}"
+ 
+   # Based on: http://openssl.6102.n7.nabble.com/ed25519-key-generation-td73907.html
+   # Extract the private and public parts from generated key.
+-  ED25519PUBLIC="$(openssl pkey -outform DER -pubout -in ${pemfile} | tail -c 32 | base64)"
+-  ED25519SEED="$(openssl pkey -outform DER -in ${pemfile} | tail -c 32 | base64)"
++  ED25519PUBLIC="$(@openssl@ pkey -outform DER -pubout -in ${pemfile} | tail -c 32 | base64)"
++  ED25519SEED="$(@openssl@ pkey -outform DER -in ${pemfile} | tail -c 32 | base64)"
+   # Secret key is concantination of SEED and PUBLIC
+   ED25519SECRET="$(echo ${ED25519SEED}${ED25519PUBLIC} | base64 -d | base64 -w 0)"
+ 
+@@ -725,7 +725,7 @@ gen_ed25519_keys ()
+ 
+ gen_ed25519_random_public()
+ {
+-  openssl genpkey -algorithm ED25519 | openssl pkey -outform DER | tail -c 32 | base64
++  @openssl@ genpkey -algorithm ED25519 | @openssl@ pkey -outform DER | tail -c 32 | base64
+ }
+ 
+ is_bare_user_only_repo () {
+diff --git a/tests/test-basic-user-only.sh b/tests/test-basic-user-only.sh
+index f65094fd..105be893 100755
+--- a/tests/test-basic-user-only.sh
++++ b/tests/test-basic-user-only.sh
+@@ -29,7 +29,7 @@ extra_basic_tests=5
+ . $(dirname $0)/basic-test.sh
+ 
+ $CMD_PREFIX ostree --version > version.yaml
+-python3 -c 'import yaml; yaml.safe_load(open("version.yaml"))'
++@python3@ -c 'import yaml; yaml.safe_load(open("version.yaml"))'
+ echo "ok yaml version"
+ 
+ # Reset things so we don't inherit a lot of state from earlier tests
+diff --git a/tests/test-remote-headers.sh b/tests/test-remote-headers.sh
+index a41d087a..77b34c90 100755
+--- a/tests/test-remote-headers.sh
++++ b/tests/test-remote-headers.sh
+@@ -26,7 +26,7 @@ echo '1..2'
+ . $(dirname $0)/libtest.sh
+ 
+ V=$($CMD_PREFIX ostree --version | \
+-  python3 -c 'import sys, yaml; print(yaml.safe_load(sys.stdin)["libostree"]["Version"])')
++  @python3@ -c 'import sys, yaml; print(yaml.safe_load(sys.stdin)["libostree"]["Version"])')
+ 
+ setup_fake_remote_repo1 "archive" "" \
+   --expected-header foo=bar \
diff --git a/nixpkgs/pkgs/tools/misc/otel-cli/default.nix b/nixpkgs/pkgs/tools/misc/otel-cli/default.nix
new file mode 100644
index 000000000000..de35952f184a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/otel-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub, getent, coreutils, nix-update-script, stdenv }:
+
+buildGoModule rec {
+  pname = "otel-cli";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "equinix-labs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-kOTReHG7byOqKsaVrXXNq9DAyawTz4hUeR4Q5lJKmiM=";
+  };
+
+  vendorHash = "sha256-HwbEqWtOqiTe5Z/MtMAs63Lzvll/vgmbCpMTREXgtXA=";
+
+  preCheck = ''
+    ln -s $GOPATH/bin/otel-cli .
+  '' + lib.optionalString (!stdenv.isDarwin) ''
+    substituteInPlace main_test.go \
+      --replace 'const minimumPath = `/bin:/usr/bin`' 'const minimumPath = `${lib.makeBinPath [ getent coreutils ]}`'
+  '';
+
+  passthru.updateScript = nix-update-script {};
+
+  meta = with lib; {
+    homepage = "https://github.com/equinix-labs/otel-cli";
+    description = "A command-line tool for sending OpenTelemetry traces";
+    changelog = "https://github.com/equinix-labs/otel-cli/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with lib.maintainers; [ emattiza urandom ];
+    mainProgram = "otel-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/otfcc/default.nix b/nixpkgs/pkgs/tools/misc/otfcc/default.nix
new file mode 100644
index 000000000000..aa0d86253d77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/otfcc/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, premake5 }:
+
+stdenv.mkDerivation rec {
+  pname = "otfcc";
+  version = "0.10.4";
+
+  src = fetchFromGitHub {
+    owner = "caryll";
+    repo = "otfcc";
+    rev = "v${version}";
+    sha256 = "1nrkzpqklfpqsccji4ans40rj88l80cv7dpxwx4g577xrvk13a0f";
+  };
+
+  nativeBuildInputs = [ premake5 ];
+
+  patches = [
+    ./fix-aarch64.patch
+    ./move-makefiles.patch
+  ];
+
+  buildFlags = lib.optionals stdenv.isAarch64 [ "config=release_arm" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/release-*/otfcc* $out/bin/
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Optimized OpenType builder and inspector";
+    homepage = "https://github.com/caryll/otfcc";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ttuegel ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/otfcc/fix-aarch64.patch b/nixpkgs/pkgs/tools/misc/otfcc/fix-aarch64.patch
new file mode 100644
index 000000000000..80fcb625658f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/otfcc/fix-aarch64.patch
@@ -0,0 +1,22 @@
+diff --git a/premake5.lua b/premake5.lua
+index 997fd79..54a20a0 100644
+--- a/premake5.lua
++++ b/premake5.lua
+@@ -49,7 +49,7 @@ end
+ workspace "otfcc"
+ 	configurations { "release", "debug" }
+ 	
+-	platforms { "x64", "x86" }
++	platforms { "x64", "x86", "arm" }
+ 	filter "action:xcode4"
+ 		platforms { "x64" }
+ 	filter {}
+@@ -67,6 +67,8 @@ workspace "otfcc"
+ 		architecture "x86"
+ 	filter "platforms:x64"
+ 		architecture "x64"
++	filter "platforms:arm"
++		architecture "arm"
+ 	filter {}
+ 	
+ 	filter "action:vs2017"
diff --git a/nixpkgs/pkgs/tools/misc/otfcc/move-makefiles.patch b/nixpkgs/pkgs/tools/misc/otfcc/move-makefiles.patch
new file mode 100644
index 000000000000..961c47b3b45a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/otfcc/move-makefiles.patch
@@ -0,0 +1,13 @@
+diff --git a/premake5.lua b/premake5.lua
+index 997fd79..54a20a0 100644
+--- a/premake5.lua
++++ b/premake5.lua
+@@ -88,7 +90,7 @@ workspace "otfcc"
+ 		flags { "StaticRuntime" }
+ 		includedirs { "dep/polyfill-msvc" }
+ 	filter "action:gmake"
+-		location "build/gmake"
++		location "."
+ 	filter "action:xcode4"
+ 		location "build/xcode"
+ 	filter {}
diff --git a/nixpkgs/pkgs/tools/misc/outils/default.nix b/nixpkgs/pkgs/tools/misc/outils/default.nix
new file mode 100644
index 000000000000..065d641f4f30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/outils/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "outils";
+  version = "0.10";
+
+  src = fetchFromGitHub {
+    owner = "leahneukirchen";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xYjILa0Km57q/xNP+M34r29WLGC15tzUNoUgPzQTtIs=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/leahneukirchen/outils";
+    description = "Port of OpenBSD-exclusive tools such as `calendar`, `vis`, and `signify`";
+    license = with licenses; [
+      beerware
+      bsd2
+      bsd3
+      bsdOriginal
+      isc
+      mit
+      publicDomain
+    ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ somasis ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ovh-ttyrec/default.nix b/nixpkgs/pkgs/tools/misc/ovh-ttyrec/default.nix
new file mode 100644
index 000000000000..550df6531ced
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ovh-ttyrec/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, zstd }:
+
+stdenv.mkDerivation rec {
+  pname = "ovh-ttyrec";
+  version = "1.1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "ovh";
+    repo = "ovh-ttyrec";
+    rev = "v${version}";
+    sha256 = "sha256-VTF9WLwAIWWn+W0sLQaoFBFro+pSXKwcTO6q6MW6JD8=";
+  };
+
+  nativeBuildInputs = [ zstd ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,man}
+    cp ttytime ttyplay ttyrec $out/bin
+    cp docs/*.1 $out/man
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ovh/ovh-ttyrec/";
+    description = "Terminal interaction recorder and player";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ chaduffy zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/owofetch/default.nix b/nixpkgs/pkgs/tools/misc/owofetch/default.nix
new file mode 100644
index 000000000000..b623721ec9b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/owofetch/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenvNoCC
+, rustPlatform
+, fetchFromGitHub
+, Foundation
+, DiskArbitration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "owofetch";
+
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "netthier";
+    repo = "owofetch-rs";
+    rev = "v${version}";
+    sha256 = "sha256-I8mzOUvm72KLLBumpgn9gNyx9FKvUrB4ze1iM1+OA18=";
+  };
+
+  cargoSha256 = "sha256-rfN4QERs1H1G7ZZim//78vlxbYfU4Cx7SYYUz/QLKeU=";
+
+  buildInputs = lib.optionals stdenvNoCC.isDarwin [
+    Foundation
+    DiskArbitration
+  ];
+
+  meta = with lib; {
+    description = "Alternative to *fetch, uwuifies all stats";
+    homepage = "https://github.com/netthier/owofetch-rs";
+    license = licenses.gpl3Only;
+    platforms = platforms.x86_64;
+    maintainers = with maintainers; [ nullishamy ];
+    mainProgram = "owofetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/page/default.nix b/nixpkgs/pkgs/tools/misc/page/default.nix
new file mode 100644
index 000000000000..889baff28b25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/page/default.nix
@@ -0,0 +1,40 @@
+{ lib, rustPlatform, fetchFromGitHub, fetchpatch, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "page";
+  version = "4.6.3";
+
+  src = fetchFromGitHub {
+    owner = "I60R";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-uNdtgx9/9+KOfQvHiKNrT8NFWtR2tfJuI2bMwywBC/4=";
+  };
+
+  cargoHash = "sha256-ctYQMBAdSUfEek2vcCa3gnI9N6ZG9b+VvtAzT20jlXY=";
+
+  cargoPatches = [
+    # Cargo.lock is outdated.
+    # https://github.com/I60R/page/pull/45.
+    (fetchpatch {
+      url = "https://github.com/I60R/page/commit/83f936b64620ba74043c1db31207b4366c0f7e3d.patch";
+      hash = "sha256-qA5oP4K/6eG0A+syVNb1izl+bnYll5V6sWM3LVFTb4o=";
+    })
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    completions_dir=$(find "target" -name "assets" -type d -printf "%T+\t%p\n" | sort | awk 'NR==1{print $2}')
+    installShellCompletion --bash $completions_dir/page.bash
+    installShellCompletion --fish $completions_dir/page.fish
+    installShellCompletion --zsh $completions_dir/_page
+  '';
+
+  meta = with lib; {
+    description = "Use neovim as pager";
+    homepage = "https://github.com/I60R/page";
+    license = licenses.mit;
+    mainProgram = "page";
+    maintainers = [ maintainers.s1341 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pal/default.nix b/nixpkgs/pkgs/tools/misc/pal/default.nix
new file mode 100644
index 000000000000..5456ffdf061c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pal/default.nix
@@ -0,0 +1,30 @@
+{lib, stdenv, fetchurl, glib, gettext, readline, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "pal";
+  version = "0.4.3";
+  src = fetchurl {
+    url = "mirror://sourceforge/palcal/pal-${version}.tgz";
+    sha256 = "072mahxvd7lcvrayl32y589w4v3vh7bmlcnhiksjylknpsvhqiyf";
+  };
+
+  patchPhase = ''
+    sed -i -e 's/-o root//' -e 's,ESTDIR}/etc,ESTDIR}'$out/etc, src/Makefile
+    sed -i -e 's,/etc/pal\.conf,'$out/etc/pal.conf, src/input.c
+  '';
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib gettext readline ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = "https://palcal.sourceforge.net/";
+    description = "Command-line calendar program that can keep track of events";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-acro/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-acro/default.nix
new file mode 100644
index 000000000000..36bd518f5b2b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-acro/default.nix
@@ -0,0 +1,64 @@
+{ buildPythonApplication
+, fetchPypi
+, pandocfilters
+, panflute
+, lib
+, pandoc
+, pandoc-acro
+, texliveTeTeX
+, runCommand
+}:
+
+let
+  pname = "pandoc-acro";
+  version = "0.10.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-JMfSQXX+BCGdFQYPFB+r08WRnhT3aXfnBNINROxCUA0=";
+  };
+in
+buildPythonApplication {
+  inherit pname version src;
+
+  propagatedBuildInputs = [
+    pandocfilters
+    panflute
+  ];
+
+  # Something in the tests does not typecheck, but the tool works well.
+  doCheck = false;
+
+  passthru.tests.example-doc =
+    let
+        env = {
+          nativeBuildInputs = [
+            pandoc
+            pandoc-acro
+            (texliveTeTeX.withPackages (ps: with ps; [ acro translations ]))
+          ];
+        };
+      in
+      runCommand "pandoc-acro-example-docs" env ''
+        set -euo pipefail
+        exampleFile="${pname}-${version}/tests/example.md"
+        metadataFile="${pname}-${version}/tests/metadata.yaml"
+        tar --extract "--file=${src}" "$exampleFile" "$metadataFile"
+        mkdir $out
+
+        pandoc -F pandoc-acro "$exampleFile" "--metadata-file=$metadataFile" \
+          -T pdf -o $out/example.pdf
+        pandoc -F pandoc-acro  "$exampleFile" "--metadata-file=$metadataFile" \
+          -T txt -o $out/example.txt
+
+        ! grep -q "\+afaik" $out/example.txt
+      '';
+
+  meta = with lib; {
+    homepage = "https://pypi.org/project/pandoc-acro/";
+    description = "Pandoc filter which manages acronyms in Pandoc flavored Markdown sources";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ tfc ];
+    mainProgram = "pandoc-acro";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-drawio-filter/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-drawio-filter/default.nix
new file mode 100644
index 000000000000..9a5ff8949ba6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-drawio-filter/default.nix
@@ -0,0 +1,57 @@
+{ buildPythonApplication
+, drawio-headless
+, fetchFromGitHub
+, lib
+, pandoc
+, pandocfilters
+, runCommand
+, texliveTeTeX
+}:
+
+let
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "tfc";
+    repo = "pandoc-drawio-filter";
+    rev = version;
+    sha256 = "sha256-2XJSAfxqEmmamWIAM3vZqi0mZjUUugmR3zWw8Imjadk=";
+  };
+
+  pandoc-drawio-filter = buildPythonApplication {
+    pname = "pandoc-drawio-filter";
+
+    inherit src version;
+
+    propagatedBuildInputs = [
+      drawio-headless
+      pandocfilters
+    ];
+
+    passthru.tests.example-doc =
+      let
+        env = {
+          nativeBuildInputs = [
+            pandoc
+            pandoc-drawio-filter
+            texliveTeTeX
+          ];
+        };
+      in
+      runCommand "$pandoc-drawio-filter-example-doc.pdf" env ''
+        cp -r ${src}/example/* .
+        pandoc -F pandoc-drawio example.md -T pdf -o $out
+      '';
+
+    meta = with lib; {
+      homepage = "https://github.com/tfc/pandoc-drawio-filter";
+      description = "Pandoc filter which converts draw.io diagrams to PDF";
+      license = licenses.mit;
+      maintainers = with maintainers; [ tfc ];
+      mainProgram = "pandoc-drawio";
+    };
+  };
+
+in
+
+pandoc-drawio-filter
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-eqnos/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-eqnos/default.nix
new file mode 100644
index 000000000000..5ee4e9587d61
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-eqnos/default.nix
@@ -0,0 +1,36 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, pandoc-xnos
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-eqnos";
+  version = "2.5.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "tomduck";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-7GQdfGHhtQs6LZK+ZyMmcPSkoFfBWmATTMejMiFcS7Y=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [ pandoc-xnos ];
+
+  # Different pandoc executables are not available
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone pandoc filter from the pandoc-xnos suite for numbering equations and equation references";
+    homepage = "https://github.com/tomduck/pandoc-eqnos";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ppenguin ];
+    mainProgram = "pandoc-eqnos";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-fignos/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-fignos/default.nix
new file mode 100644
index 000000000000..eb8d0154ffce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-fignos/default.nix
@@ -0,0 +1,36 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, pandoc-xnos
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-fignos";
+  version = "2.4.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "tomduck";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-eDwAW0nLB4YqrWT3Ajt9bmX1A43wl+tOPm2St5VpCLk=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [ pandoc-xnos ];
+
+  # Different pandoc executables are not available
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone pandoc filter from the pandoc-xnos suite for numbering figures and figure references";
+    homepage = "https://github.com/tomduck/pandoc-fignos";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ppenguin ];
+    mainProgram = "pandoc-fignos";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix
new file mode 100644
index 000000000000..ae94c3115366
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix
@@ -0,0 +1,29 @@
+{ fetchFromGitHub, buildPythonApplication, lib, pandocfilters, six }:
+
+buildPythonApplication rec {
+  pname = "pandoc-imagine";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    repo = "imagine";
+    owner = "hertogp";
+    rev = version;
+    sha256 = "1wpnckc7qyrf6ga5xhr6gv38k1anpy9nx888n7n3rh6nixzcz2dw";
+  };
+
+  propagatedBuildInputs = [ pandocfilters six ];
+
+  # No tests in archive
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = src.meta.homepage;
+    description = ''
+      A pandoc filter that will turn code blocks tagged with certain classes
+      into images or ASCII art
+    '';
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ synthetica ];
+    mainProgram = "pandoc-imagine";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-include/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-include/default.nix
new file mode 100644
index 000000000000..d55821f92099
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-include/default.nix
@@ -0,0 +1,37 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, natsort
+, panflute
+, lxml
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-include";
+  version = "1.3.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "DCsunset";
+    repo = "pandoc-include";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-aqewWSPxl3BpUIise/rPgBQPsyCOxU6gBlzT1u2mHY0=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [ natsort panflute lxml ];
+
+  pythonImportsCheck = [ "pandoc_include.main" ];
+
+  meta = with lib; {
+    description = "Pandoc filter to allow file and header includes";
+    homepage = "https://github.com/DCsunset/pandoc-include";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ppenguin DCsunset ];
+    mainProgram = "pandoc-include";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-katex/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-katex/default.nix
new file mode 100644
index 000000000000..d2b9f03e51a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-katex/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pandoc-katex";
+  version = "0.1.11";
+
+  src = fetchFromGitHub {
+    owner = "xu-cheng";
+    repo = pname;
+    rev = version;
+    hash = "sha256-2a3WJTNIMqWnTlHB+2U/6ifuoecbOlTP6e7YjD/UvPM=";
+  };
+
+  cargoHash = "sha256-Qf+QYOIBmSgax7p5K32SkaDT0MoKUY4TkxLbf/ZbM+U=";
+
+  meta = with lib; {
+    description = "Pandoc filter to render math equations using KaTeX";
+    homepage = "https://github.com/xu-cheng/pandoc-katex";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ minijackson pacien ];
+    mainProgram = "pandoc-katex";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-lua-filters/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-lua-filters/default.nix
new file mode 100644
index 000000000000..1323da5104ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-lua-filters/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pandoc-lua-filters";
+  version = "2021-11-05";
+
+  src = fetchFromGitHub {
+    owner = "pandoc";
+    repo = "lua-filters";
+    rev = "v${version}";
+    sha256 = "sha256-Y962kdwg2bS3ZoPfsktv4Fy34HUTRhIIuSxPi5ODwWg=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dt $out/share/pandoc/filters **/*.lua
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A collection of lua filters for pandoc";
+    homepage = "https://github.com/pandoc/lua-filters";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-plantuml-filter/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-plantuml-filter/default.nix
new file mode 100644
index 000000000000..d8c1bb2ea8a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-plantuml-filter/default.nix
@@ -0,0 +1,27 @@
+{ buildPythonApplication
+, fetchPypi
+, pandocfilters
+, lib
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-plantuml-filter";
+  version = "0.1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "08673mfwxsw6s52mgglbdz7ybb68svqyr3s9w97d7rifbwvvc9ia";
+  };
+
+  propagatedBuildInputs = [
+    pandocfilters
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/timofurrer/pandoc-plantuml-filter";
+    description = "Pandoc filter which converts PlantUML code blocks to PlantUML images";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cmcdragonkai ];
+    mainProgram = "pandoc-plantuml";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-secnos/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-secnos/default.nix
new file mode 100644
index 000000000000..0880214e218e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-secnos/default.nix
@@ -0,0 +1,40 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, pandoc-xnos
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-secnos";
+  version = "2.2.2";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "tomduck";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-J9KLZvioYM3Pl2UXjrEgd4PuLTwCLYy9SsJIzgw5/jU=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [ pandoc-xnos ];
+
+  patches = [
+    ./patch/fix-manifest.patch
+  ];
+
+  # Different pandoc executables are not available
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone pandoc filter from the pandoc-xnos suite for numbering sections and section references";
+    homepage = "https://github.com/tomduck/pandoc-secnos";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ppenguin ];
+    mainProgram = "pandoc-secnos";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-secnos/patch/fix-manifest.patch b/nixpkgs/pkgs/tools/misc/pandoc-secnos/patch/fix-manifest.patch
new file mode 100644
index 000000000000..782e5b5e07c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-secnos/patch/fix-manifest.patch
@@ -0,0 +1,39 @@
+From 165ee1f4c1208636254392335d34934dc50d273e Mon Sep 17 00:00:00 2001
+From: ppenguin <hieronymusv@gmail.com>
+Date: Tue, 15 Mar 2022 23:15:07 +0100
+Subject: [PATCH] fix setup.py to work in nixpkgs
+
+---
+ setup.py | 13 ++-----------
+ 1 file changed, 2 insertions(+), 11 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index d705846..d7345a2 100644
+--- a/setup.py
++++ b/setup.py
+@@ -42,10 +42,10 @@
+ 
+     author='Thomas J. Duck',
+     author_email='tomduck@tomduck.ca',
+-    description='Equation number filter for pandoc',
++    description='Section number filter for pandoc',
+     long_description=DESCRIPTION,
+     license='GPL',
+-    keywords='pandoc equation numbers filter',
++    keywords='pandoc section numbers filter',
+     url='https://github.com/tomduck/pandoc-secnos',
+     download_url='https://github.com/tomduck/pandoc-secnos/tarball/' + \
+                  __version__,
+@@ -63,12 +63,3 @@
+         'Programming Language :: Python'
+         ]
+ )
+-
+-# Check that the pandoc-secnos script is on the PATH
+-if not shutil.which('pandoc-secnos'):
+-    msg = """
+-          ERROR: `pandoc-secnos` script not found. This will need to 
+-          be corrected.  If you need help, please file an Issue at
+-          https://github.com/tomduck/pandoc-secnos/issues.\n"""
+-    print(textwrap.dedent(msg))
+-    sys.exit(-1)
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-tablenos/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-tablenos/default.nix
new file mode 100644
index 000000000000..6ee5ef65861e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-tablenos/default.nix
@@ -0,0 +1,36 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, pandoc-xnos
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-tablenos";
+  version = "2.3.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "tomduck";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-FwzsRziY3PoySo9hIFuLw6tOO9oQij6oQEyoY8HgnII=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [ pandoc-xnos ];
+
+  # Different pandoc executables are not available
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone pandoc filter from the pandoc-xnos suite for numbering tables and table references";
+    homepage = "https://github.com/tomduck/pandoc-tablenos";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ppenguin ];
+    mainProgram = "pandoc-tablenos";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/panicparse/default.nix b/nixpkgs/pkgs/tools/misc/panicparse/default.nix
new file mode 100644
index 000000000000..6cf97eca5a97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/panicparse/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "panicparse";
+  version = "2.3.1";
+
+  src = fetchFromGitHub {
+    owner = "maruel";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-KjWUubrHPJUJWvoa13EGEwTd5uNC0nrHAF8hzdnxEmY=";
+  };
+
+  vendorHash = "sha256-udkh/6Bu+7djxugMIuVsZvZ3JN2JooihsmcS2wJT0Wo=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Crash your app in style (Golang)";
+    homepage = "https://github.com/maruel/panicparse";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    mainProgram = "panicparse";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/panoply/default.nix b/nixpkgs/pkgs/tools/misc/panoply/default.nix
new file mode 100644
index 000000000000..d0c86c1275f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/panoply/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenvNoCC, fetchurl, makeWrapper, jre } :
+
+stdenvNoCC.mkDerivation rec {
+  pname = "panoply";
+  version = "5.3.2";
+
+  src = fetchurl {
+    url = "https://www.giss.nasa.gov/tools/panoply/download/PanoplyJ-${version}.tgz";
+    sha256 = "sha256-+B/k3MqoefD3AVSYuR006eYyNe+njsfiqwBtQ+1YIHA=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    jarbase=$out/share/panoply
+    mkdir -p $out/bin $jarbase/jars
+
+    sed -i "s:^SCRIPTDIR.*:SCRIPTDIR=$jarbase:" panoply.sh
+
+    cp panoply.sh $out/bin/panoply
+    cp -r jars $jarbase
+
+    wrapProgram "$out/bin/panoply" --prefix PATH : "${jre}/bin"
+
+    runHook postHook
+  '';
+
+  meta = with lib; {
+    description = "netCDF, HDF and GRIB Data Viewer";
+    homepage = "https://www.giss.nasa.gov/tools/panoply";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.markuskowa ];
+    license = licenses.unfree;  # Package does not state a license
+    mainProgram = "panoply";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/paperlike-go/default.nix b/nixpkgs/pkgs/tools/misc/paperlike-go/default.nix
new file mode 100644
index 000000000000..59d477b62fe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/paperlike-go/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule {
+  pname = "paperlike-go";
+  version = "unstable-2021-03-26";
+
+  src = fetchFromGitHub {
+    owner = "leoluk";
+    repo = "paperlike-go";
+    rev = "bd658d88ea9a3b21e1b301b96253abab7cf56d79";
+    hash = "sha256-UuFzBkhIKStVitMYf0Re4dSyYqwLGocRyMPewosVFsA=";
+  };
+
+  vendorHash = "sha256-OfTeJd3VS/WoUpyPY7XfQZWLrvS+vqPPgeL2Hd0HtgI=";
+
+  subPackages = [ "cmd/paperlike-cli" ];
+
+  meta = {
+    description = "A Linux Go library and CLI utility to control a Dasung Paperlike display via I2C DDC";
+    homepage = "https://github.com/leoluk/paperlike-go";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.adisbladis ];
+    platforms = lib.platforms.linux;
+    mainProgram = "paperlike-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/paps/default.nix b/nixpkgs/pkgs/tools/misc/paps/default.nix
new file mode 100644
index 000000000000..ab9c9e433c68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/paps/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub
+, autoconf, automake, pkg-config, intltool, pango }:
+
+stdenv.mkDerivation rec {
+  pname = "paps";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "dov";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "129wpm2ayxs6qfh2761d4x9c034ivb2bcmmcnl56qs4448qb9495";
+  };
+
+  nativeBuildInputs = [ autoconf automake pkg-config intltool ];
+  buildInputs = [ pango ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "Pango to PostScript converter";
+    homepage = "https://github.com/dov/paps";
+    license = licenses.lgpl2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    mainProgram = "paps";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parallel/default.nix b/nixpkgs/pkgs/tools/misc/parallel/default.nix
new file mode 100644
index 000000000000..d196de07f648
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parallel/default.nix
@@ -0,0 +1,58 @@
+{ fetchurl, lib, stdenv, perl, makeWrapper, procps, coreutils, gawk, buildPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "parallel";
+  version = "20240122";
+
+  src = fetchurl {
+    url = "mirror://gnu/parallel/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-hZaIy7VkHNe2sWsrlgviSqTjfmVcyP/NivlxzX1bRJ8=";
+  };
+
+  outputs = [ "out" "man" "doc" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl procps ];
+
+  postPatch = lib.optionalString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    substituteInPlace Makefile.in \
+      --replace '$(DESTDIR)$(bindir)/parallel --shell-completion' '${lib.getExe buildPackages.parallel} --shell-completion'
+  '';
+
+  preInstall = ''
+    patchShebangs ./src/parallel
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/parallel \
+      --prefix PATH : "${lib.makeBinPath [ procps perl coreutils gawk ]}"
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Shell tool for executing jobs in parallel";
+    longDescription =
+      '' GNU Parallel is a shell tool for executing jobs in parallel.  A job
+         is typically a single command or a small script that has to be run
+         for each of the lines in the input.  The typical input is a list of
+         files, a list of hosts, a list of users, or a list of tables.
+
+         If you use xargs today you will find GNU Parallel very easy to use.
+         If you write loops in shell, you will find GNU Parallel may be able
+         to replace most of the loops and make them run faster by running
+         jobs in parallel.  If you use ppss or pexec you will find GNU
+         Parallel will often make the command easier to read.
+
+         GNU Parallel makes sure output from the commands is the same output
+         as you would get had you run the commands sequentially.  This makes
+         it possible to use output from GNU Parallel as input for other
+         programs.
+      '';
+    homepage = "https://www.gnu.org/software/parallel/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub vrthra tomberek ];
+    mainProgram = "parallel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parallel/wrapper.nix b/nixpkgs/pkgs/tools/misc/parallel/wrapper.nix
new file mode 100644
index 000000000000..0240f1ac9e9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parallel/wrapper.nix
@@ -0,0 +1,10 @@
+{ lib, runCommand, makeWrapper, parallel, perlPackages
+, extraPerlPackages ? with perlPackages; [ DBI DBDPg DBDSQLite DBDCSV TextCSV ]
+, willCite ? false }:
+
+runCommand "parallel-full" { nativeBuildInputs = [ makeWrapper ]; } ''
+  mkdir -p $out/bin
+  makeWrapper ${parallel}/bin/parallel $out/bin/parallel \
+    --set PERL5LIB "${perlPackages.makeFullPerlPath extraPerlPackages}" \
+    ${lib.optionalString willCite "--add-flags --will-cite"}
+''
diff --git a/nixpkgs/pkgs/tools/misc/parcellite/default.nix b/nixpkgs/pkgs/tools/misc/parcellite/default.nix
new file mode 100644
index 000000000000..d39115fcecc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parcellite/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, gtk2, hicolor-icon-theme, intltool, pkg-config
+, which, wrapGAppsHook, xdotool, libappindicator-gtk2 }:
+
+stdenv.mkDerivation rec {
+  pname = "parcellite";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "rickyrockrat";
+    repo = "parcellite";
+    rev = version;
+    sha256 = "19q4x6x984s6gxk1wpzaxawgvly5vnihivrhmja2kcxhzqrnfhiy";
+  };
+
+  nativeBuildInputs = [ autoreconfHook intltool pkg-config wrapGAppsHook ];
+  buildInputs = [ gtk2 hicolor-icon-theme libappindicator-gtk2 ];
+  NIX_LDFLAGS = "-lgio-2.0";
+
+  preFixup = ''
+    # Need which and xdotool on path to fix auto-pasting.
+    gappsWrapperArgs+=(--prefix PATH : "${which}/bin:${xdotool}/bin")
+  '';
+
+  meta = with lib; {
+    description = "Lightweight GTK clipboard manager";
+    homepage = "https://github.com/rickyrockrat/parcellite";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "parcellite";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parquet-tools/default.nix b/nixpkgs/pkgs/tools/misc/parquet-tools/default.nix
new file mode 100644
index 000000000000..bd35304f3cf1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parquet-tools/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "parquet-tools";
+  version = "0.2.14";
+
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "ktrueda";
+    repo = "parquet-tools";
+    rev = "refs/tags/${version}";
+    hash = "sha256-2jIwDsxB+g37zV9hLc2VNC5YuZXTpTmr2aQ72AeHYJo=";
+  };
+
+  postPatch = ''
+    substituteInPlace tests/test_inspect.py \
+      --replace "parquet-cpp-arrow version 5.0.0" "parquet-cpp-arrow version ${pyarrow.version}" \
+      --replace "serialized_size: 2222" "serialized_size: 2221" \
+      --replace "format_version: 1.0" "format_version: 2.6"
+  '';
+
+  pythonRelaxDeps = [
+    "halo"
+    "tabulate"
+    "thrift"
+  ];
+
+  nativeBuildInputs = [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = [
+    boto3
+    colorama
+    halo
+    pandas
+    pyarrow
+    tabulate
+    thrift
+  ];
+
+  nativeCheckInputs = [
+    moto
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # These tests try to read Python code as parquet and fail
+    "test_local_wildcard"
+    "test_local_and_s3_wildcard_files"
+    # test file is 2 bytes bigger than expected
+    "test_excute_simple"
+  ];
+
+  pythonImportsCheck = [
+    "parquet_tools"
+  ];
+
+  meta = with lib; {
+    description = "A CLI tool for parquet files";
+    homepage = "https://github.com/ktrueda/parquet-tools";
+    changelog = "https://github.com/ktrueda/parquet-tools/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cpcloud ];
+    mainProgram = "parquet-tools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parted/default.nix b/nixpkgs/pkgs/tools/misc/parted/default.nix
new file mode 100644
index 000000000000..f1ed977e9a60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parted/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv
+, fetchurl
+, lvm2
+, libuuid
+, gettext
+, readline
+, dosfstools
+, e2fsprogs
+, perl
+, python3
+, util-linux
+, check
+, enableStatic ? stdenv.hostPlatform.isStatic
+}:
+
+stdenv.mkDerivation rec {
+  pname = "parted";
+  version = "3.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/parted/parted-${version}.tar.xz";
+    sha256 = "sha256-O0Pb4zzKD5oYYB66tWt4UrEo7Bo986mzDM3l5zNZ5hI=";
+  };
+
+  outputs = [ "out" "dev" "man" "info" ];
+
+  postPatch = ''
+    patchShebangs tests
+  '';
+
+  buildInputs = [ libuuid ]
+    ++ lib.optional (readline != null) readline
+    ++ lib.optional (gettext != null) gettext
+    ++ lib.optional (lvm2 != null) lvm2;
+
+  configureFlags =
+       (if (readline != null)
+        then [ "--with-readline" ]
+        else [ "--without-readline" ])
+    ++ lib.optional (lvm2 == null) "--disable-device-mapper"
+    ++ lib.optional enableStatic "--enable-static";
+
+  # Tests were previously failing due to Hydra running builds as uid 0.
+  # That should hopefully be fixed now.
+  doCheck = !stdenv.hostPlatform.isMusl; /* translation test */
+  nativeCheckInputs = [ check dosfstools e2fsprogs perl python3 util-linux ];
+
+  meta = {
+    description = "Create, destroy, resize, check, and copy partitions";
+
+    longDescription = ''
+      GNU Parted is an industrial-strength package for creating, destroying,
+      resizing, checking and copying partitions, and the file systems on
+      them.  This is useful for creating space for new operating systems,
+      reorganising disk usage, copying data on hard disks and disk imaging.
+
+      It contains a library, libparted, and a command-line frontend, parted,
+      which also serves as a sample implementation and script backend.
+    '';
+
+    homepage = "https://www.gnu.org/software/parted/";
+    license = lib.licenses.gpl3Plus;
+
+    maintainers = [
+      # Add your name here!
+    ];
+
+    # GNU Parted requires libuuid, which is part of util-linux-ng.
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/past-time/default.nix b/nixpkgs/pkgs/tools/misc/past-time/default.nix
new file mode 100644
index 000000000000..cb36808ea366
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/past-time/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "past-time";
+  version = "0.2.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "fabaff";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-9LmFOWNUkvKfWHLo4HB1W1UBQL90Gp9UJJ3VDIYBDHo=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    tqdm
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    freezegun
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "past_time"
+  ];
+
+  meta = with lib; {
+    description = "Tool to visualize the progress of the year based on the past days";
+    homepage = "https://github.com/fabaff/past-time";
+    changelog = "https://github.com/fabaff/past-time/releases/tag/${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "past-time";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pastebinit/default.nix b/nixpkgs/pkgs/tools/misc/pastebinit/default.nix
new file mode 100644
index 000000000000..ba597934ebbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pastebinit/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+, libxslt
+, docbook_xsl
+, installShellFiles
+, callPackage
+}:
+stdenv.mkDerivation rec {
+  version = "1.6.2";
+  pname = "pastebinit";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    hash = "sha256-vuAWkHlQM6QTWarThpSbY0qrxzej0GvLU0jT2JOS/qc=";
+  };
+
+  patches = [
+    ./use-drv-etc.patch
+  ];
+
+  nativeBuildInputs = [
+    libxslt
+    installShellFiles
+  ];
+
+  buildInputs = [
+    (python3.withPackages (p: [ p.distro ]))
+  ];
+
+  buildPhase = ''
+    xsltproc --nonet ${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl pastebinit.xml
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/etc
+    cp -a pastebinit $out/bin
+    cp -a utils/* $out/bin
+    cp -a pastebin.d $out/etc
+    substituteInPlace $out/bin/pastebinit --subst-var-by "etc" "$out/etc"
+    installManPage pastebinit.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://stgraber.org/category/pastebinit/";
+    description = "A software that lets you send anything you want directly to a pastebin from the command line";
+    maintainers = with maintainers; [ raboof samuel-martineau ];
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pastebinit/use-drv-etc.patch b/nixpkgs/pkgs/tools/misc/pastebinit/use-drv-etc.patch
new file mode 100644
index 000000000000..6ccd7897ddf2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pastebinit/use-drv-etc.patch
@@ -0,0 +1,13 @@
+diff --git a/pastebinit b/pastebinit
+index 4e5f9ce..fe06bd3 100755
+--- a/pastebinit
++++ b/pastebinit
+@@ -91,7 +91,7 @@ try:
+         # Files found later override files found earlier.
+         pastebind = {}
+         confdirs = []
+-        for confdir in ['/usr/share', '/usr/local/share'] \
++        for confdir in ['@etc@', '/usr/share', '/usr/local/share'] \
+                 + list(reversed(os.environ.get('XDG_DATA_DIRS', '').split(':'))) \
+                 + list(reversed(os.environ.get('XDG_CONFIG_DIRS', '').split(':'))) \
+                 + ['/etc', '/usr/local/etc',
diff --git a/nixpkgs/pkgs/tools/misc/pazi/default.nix b/nixpkgs/pkgs/tools/misc/pazi/default.nix
new file mode 100644
index 000000000000..c4c1ea18b549
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pazi/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pazi";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "euank";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0z8x70mwg0mvz6iap92gil37d4kpg5dizlyfx3zk7984ynycgap8";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  cargoSha256 = "1iamlp5519h8mmgd4964cvyp7mmnqdg2d3qj5v7yzilyp4nz15jc";
+
+  meta = with lib; {
+    description = "An autojump \"zap to directory\" helper";
+    homepage = "https://github.com/euank/pazi";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "pazi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pb/default.nix b/nixpkgs/pkgs/tools/misc/pb/default.nix
new file mode 100644
index 000000000000..1cbe8eded5cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pb/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, pb }:
+
+buildGoModule rec {
+  pname = "pb";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "parseablehq";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ckRvtEtagyYpXJ0hh8jsgpE/16bu7b9IdNn2stvb2iI=";
+  };
+
+  vendorHash = "sha256-dNSr0bQz7XdC2fTD82TI8tfmwKBuAcbxjaMC9KAjxlI=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  tags = [ "kqueue" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = pb;
+    command = "pb version";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/parseablehq/pb";
+    changelog = "https://github.com/parseablehq/pb/releases/tag/v${version}";
+    description = "CLI client for Parseable server";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ aaronjheng ];
+    mainProgram = "pb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pb_cli/default.nix b/nixpkgs/pkgs/tools/misc/pb_cli/default.nix
new file mode 100644
index 000000000000..b884b2865838
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pb_cli/default.nix
@@ -0,0 +1,40 @@
+{ screenshots ? true, video ? false, clipboard ? true
+, lib, stdenv, jq, curl, fetchFromGitHub, makeWrapper, maim ? null, xclip ? null, capture ? null }:
+
+assert screenshots -> maim != null;
+assert video -> capture != null;
+assert clipboard -> xclip != null;
+
+stdenv.mkDerivation rec {
+  pname = "pb_cli-unstable";
+  version = "2019-03-10";
+
+  src = fetchFromGitHub {
+    owner = "ptpb";
+    repo = "pb_cli";
+    rev  = "6b9ce1ee45fe651d06d7c479a20026a173dd328b";
+    sha256 = "0w6a789zffvz4ixsb92q45n5s4xyx7s2l2f07972i3dajaaai8z7";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  liveDeps = [ jq curl ] ++ lib.optional screenshots maim
+                         ++ lib.optional video capture
+                         ++ lib.optional clipboard xclip;
+
+  installPhase = ''
+    install -Dm755 src/pb.sh $out/bin/pb
+
+    patchShebangs $out/bin/pb
+    wrapProgram $out/bin/pb \
+      --prefix PATH : '${lib.makeBinPath liveDeps}'
+  '';
+
+  meta = with lib; {
+    description = "A no bullshit 0x0.st client";
+    homepage = "https://github.com/ptpb/pb_cli";
+    maintainers = [ maintainers.ar1a ];
+    license = licenses.gpl3Plus;
+    mainProgram = "pb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pc/default.nix b/nixpkgs/pkgs/tools/misc/pc/default.nix
new file mode 100644
index 000000000000..6e9c23ee6d8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pc/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, byacc
+, fetchFromSourcehut
+, gitUpdater
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pc";
+  version = "0.4";
+
+  src = fetchFromSourcehut {
+    owner = "~ft";
+    repo = "pc";
+    rev = finalAttrs.version;
+    hash = "sha256-fzEDI20o5ROY9n/QRzCW66iCKYaBbI++Taur6EoA0wA=";
+  };
+
+  nativeBuildInputs = [ byacc ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  strictDeps = true;
+
+  enableParallelBuilding = true;
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = {
+    description = "Programmer's calculator";
+    homepage = "https://git.sr.ht/~ft/pc";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ moody ];
+    platforms = lib.platforms.unix;
+    mainProgram = "pc";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/pcb2gcode/default.nix b/nixpkgs/pkgs/tools/misc/pcb2gcode/default.nix
new file mode 100644
index 000000000000..2db24a46bfe0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pcb2gcode/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, boost
+, glibmm
+, gtkmm2
+, gerbv
+, librsvg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pcb2gcode";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "pcb2gcode";
+    repo = "pcb2gcode";
+    rev = "v${version}";
+    hash = "sha256-c5YabBqZn6ilIkF3lifTsYyLZMsZN21jDj1hNu0PRAc=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ boost glibmm gtkmm2 gerbv librsvg ];
+
+  postPatch = ''
+    substituteInPlace ./Makefile.am \
+    --replace '`git describe --dirty --always --tags`' '${version}'
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool for isolation, routing and drilling of PCBs ";
+    longDescription = ''
+      pcb2gcode is a command-line software for the isolation, routing and drilling of PCBs.
+      It takes Gerber files as input and it outputs gcode files, suitable for the milling of PCBs.
+      It also includes an Autoleveller, useful for the automatic dynamic calibration of the milling depth.
+    '';
+    homepage = "https://github.com/pcb2gcode/pcb2gcode";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ kritnich ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pcp/default.nix b/nixpkgs/pkgs/tools/misc/pcp/default.nix
new file mode 100644
index 000000000000..e9d245c8129d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pcp/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pcp";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "dennis-tra";
+    repo = "pcp";
+    rev = "v${version}";
+    sha256 = "sha256-aZO8VuOiYhOPctFKZ6a2psJB0lKHlPc+NLy2RWDU4JI=";
+  };
+
+  vendorHash = "sha256-3bkzBQ950Phg4A9p+IjeUx7Xw7eVmUbeYnQViNjghFk=";
+
+  meta = with lib; {
+    description = "Command line peer-to-peer data transfer tool based on libp2p";
+    homepage = "https://github.com/dennis-tra/pcp";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ matthewcroughan ];
+    platforms = platforms.linux;
+    mainProgram = "pcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pdd/default.nix b/nixpkgs/pkgs/tools/misc/pdd/default.nix
new file mode 100644
index 000000000000..2e34e94ad013
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pdd/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, buildPythonApplication, python-dateutil }:
+
+buildPythonApplication rec {
+  pname = "pdd";
+  version = "1.6";
+
+  src = fetchFromGitHub {
+    owner = "jarun";
+    repo = "pdd";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-Z+jUFu4VvrgWUtkXMkjspcRJ/JG81X9gc2tnDoCdrsk=";
+  };
+
+  format = "other";
+
+  propagatedBuildInputs = [ python-dateutil ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jarun/pdd";
+    description = "Tiny date, time diff calculator";
+    longDescription = ''
+      There are times you want to check how old you are (in years, months, days)
+      or how long you need to wait for the next flash sale or the number of days
+      left of your notice period in your current job. pdd (Python3 Date Diff) is
+      a small cmdline utility to calculate date and time difference. If no
+      program arguments are specified it shows the current date, time and
+      timezone.
+    '';
+    maintainers = [ maintainers.infinisil ];
+    license = licenses.gpl3;
+    mainProgram = "pdd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pdf-parser/default.nix b/nixpkgs/pkgs/tools/misc/pdf-parser/default.nix
new file mode 100644
index 000000000000..593960c4d2cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pdf-parser/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3Packages, fetchzip }:
+
+python3Packages.buildPythonApplication {
+  pname = "pdf-parser";
+  version = "0.7.4";
+
+  src = fetchzip {
+    url = "https://didierstevens.com/files/software/pdf-parser_V0_7_4.zip";
+    sha256 = "1j39yww2yl4cav8xgd4zfl5jchbbkvffnrynkamkzvz9dd5np2mh";
+  };
+
+  format = "other";
+
+  installPhase = ''
+    install -Dm555 pdf-parser.py $out/bin/pdf-parser.py
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/bin/pdf-parser.py \
+      --replace '/usr/bin/python' '${python3Packages.python}/bin/python'
+  '';
+
+  meta = with lib; {
+    description = "Parse a PDF document";
+    longDescription = ''
+      This tool will parse a PDF document to identify the fundamental elements used in the analyzed file.
+      It will not render a PDF document.
+    '';
+    homepage = "https://blog.didierstevens.com/programs/pdf-tools/";
+    license = licenses.publicDomain;
+    maintainers = [ maintainers.lightdiscord ];
+    platforms = platforms.all;
+    mainProgram = "pdf-parser.py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/peep/default.nix b/nixpkgs/pkgs/tools/misc/peep/default.nix
new file mode 100644
index 000000000000..301b04cbb816
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/peep/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "peep";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "ryochack";
+    repo = "peep";
+    rev = "v${version}";
+    hash = "sha256-6Y7ZI0kIPE7uMMOkXgm75JMEec090xZPBJFJr9DaswA=";
+  };
+
+  cargoHash = "sha256-CDWa03H8vWfhx2dwZU5rAV3fSwAGqCIPcvl+lTG4npE=";
+
+  meta = with lib; {
+    description = "The CLI text viewer tool that works like less command on small pane within the terminal window";
+    homepage = "https://github.com/ryochack/peep";
+    changelog = "https://github.com/ryochack/peep/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "peep";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/perccli/default.nix b/nixpkgs/pkgs/tools/misc/perccli/default.nix
new file mode 100644
index 000000000000..eacc0c26de33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/perccli/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenvNoCC
+, fetchzip
+, rpmextract
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "perccli";
+
+  # On a new release, update version, URL, hash, and meta.homepage
+  version = "7.2313.00";
+
+  src = fetchzip {
+    # On pkg update: manually adjust the version in the URL because of the different format.
+    url = "https://dl.dell.com/FOLDER09770976M/1/PERCCLI_7.2313.0_A14_Linux.tar.gz";
+    hash = "sha256-IhclHVkdihRx5CzyO2dlOEhCon+0/HB3Fkue7MWsWnw=";
+
+    # Dell seems to block "uncommon" user-agents, such as Nixpkgs's custom one.
+    # 403 otherwise
+    curlOptsList = [ "--user-agent" "Mozilla/5.0" ];
+  };
+
+  nativeBuildInputs = [ rpmextract ];
+
+  unpackPhase = ''
+    rpmextract $src/perccli-00${version}00.0000-1.noarch.rpm
+  '';
+
+  dontPatch = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = let
+    inherit (stdenvNoCC.hostPlatform) system;
+    platforms = {
+      x86_64-linux = ''
+        install -D ./opt/MegaRAID/perccli/perccli64 $out/bin/perccli64
+        ln -s perccli64 $out/bin/perccli
+      '';
+    };
+  in platforms.${system} or (throw "unsupported system: ${system}");
+
+  # Not needed because the binary is statically linked
+  dontFixup = true;
+
+  meta = with lib; {
+    description = "Perccli Support for PERC RAID controllers";
+
+    # Must be updated with every release
+    homepage = "https://www.dell.com/support/home/en-us/drivers/driversdetails?driverid=tdghn";
+
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ panicgh ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/peruse/default.nix b/nixpkgs/pkgs/tools/misc/peruse/default.nix
new file mode 100644
index 000000000000..09c39385c8b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/peruse/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchurl
+, lib
+, extra-cmake-modules
+, kdoctools
+, wrapQtAppsHook
+, baloo
+, karchive
+, kconfig
+, kcrash
+, kfilemetadata
+, kinit
+, kirigami2
+, knewstuff
+, okular
+, plasma-framework
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "peruse";
+  # while technically a beta, the latest release is from 2016 and doesn't build without a lot of
+  # patching
+  version = "1.80";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/peruse/peruse-${finalAttrs.version}.tar.xz";
+    hash = "sha256-xnSVnKF20jbxVoFW41A22NZWVZUry/F7G+Ts5NK6M1E=";
+  };
+
+  nativeBuildInputs = [
+    extra-cmake-modules
+    kdoctools
+    wrapQtAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    baloo
+    karchive
+    kconfig
+    kcrash
+    kfilemetadata
+    kinit
+    kirigami2
+    knewstuff
+    okular
+    plasma-framework
+  ];
+
+  # the build is otherwise crazy loud
+  cmakeFlags = [ "-Wno-dev" ];
+
+  pathsToLink = [ "/etc/xdg/peruse.knsrc" ];
+
+  meta = with lib; {
+    description = "A comic book reader";
+    homepage = "https://peruse.kde.org";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "peruse";
+    inherit (kirigami2.meta) platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/pferd/default.nix b/nixpkgs/pkgs/tools/misc/pferd/default.nix
new file mode 100644
index 000000000000..af343a19d969
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pferd/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pferd";
+  version = "3.5.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Garmelon";
+    repo = "PFERD";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-iGMqKRM/8pnnew/U1r7Od9Giyn9z4BxVGO85nw3FI9Y=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    aiohttp
+    beautifulsoup4
+    rich
+    keyring
+    certifi
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Garmelon/PFERD";
+    description = "Tool for downloading course-related files from ILIAS";
+    license = licenses.mit;
+    maintainers = with maintainers; [ _0xbe7a ];
+    mainProgram = "pferd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pfetch-rs/default.nix b/nixpkgs/pkgs/tools/misc/pfetch-rs/default.nix
new file mode 100644
index 000000000000..7f90a595f469
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pfetch-rs/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pfetch-rs";
+  version = "2.9.0";
+
+  src = fetchFromGitHub {
+    owner = "Gobidev";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7Udop3542L2l9EYQZntk/qW0GUQeYfoDHQQJ8j39krQ=";
+  };
+
+  cargoHash = "sha256-gT5JjBsrGngfg77od566z+EOiH8KdARGYhTLOnOhWj4=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    darwin.apple_sdk.frameworks.DisplayServices
+  ];
+
+
+  meta = with lib; {
+    description = "A rewrite of the pfetch system information tool in Rust";
+    homepage = "https://github.com/Gobidev/pfetch-rs";
+    changelog = "https://github.com/Gobidev/pfetch-rs/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gobidev ];
+    mainProgram = "pfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pfetch/default.nix b/nixpkgs/pkgs/tools/misc/pfetch/default.nix
new file mode 100644
index 000000000000..5f9e8bf7676a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pfetch/default.nix
@@ -0,0 +1,28 @@
+{ stdenvNoCC, lib, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "pfetch";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "dylanaraps";
+    repo = "pfetch";
+    rev = version;
+    sha256 = "06z0k1naw3k052p2z7241lx92rp5m07zlr0alx8pdm6mkc3c4v8f";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm755 -t $out/bin pfetch
+  '';
+
+  meta = with lib; {
+    description = "A pretty system information tool written in POSIX sh";
+    homepage = "https://github.com/dylanaraps/pfetch";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ equirosa ];
+    mainProgram = "pfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pfsshell/default.nix b/nixpkgs/pkgs/tools/misc/pfsshell/default.nix
new file mode 100644
index 000000000000..24eb379adf5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pfsshell/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja }:
+
+stdenv.mkDerivation rec {
+  version = "1.1.1";
+  pname = "pfsshell";
+
+  src = fetchFromGitHub {
+    owner = "uyjulian";
+    repo = "pfsshell";
+    rev = "v${version}";
+    sha256 = "0cr91al3knsbfim75rzl7rxdsglcc144x0nizn7q4jx5cad3zbn8";
+  };
+
+  nativeBuildInputs = [ meson ninja ];
+
+  # Build errors since 1.1.1 when format hardening is enabled:
+  #   cc1: error: '-Wformat-security' ignored without '-Wformat' [-Werror=format-security]
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "PFS (PlayStation File System) shell for POSIX-based systems";
+    platforms = platforms.unix;
+    license = with licenses; [
+      gpl2Only # the pfsshell software itself
+      afl20    # APA, PFS, and iomanX libraries which are compiled together with this package
+    ];
+    maintainers = with maintainers; [ makefu ];
+    mainProgram = "pfsshell";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pg_flame/default.nix b/nixpkgs/pkgs/tools/misc/pg_flame/default.nix
new file mode 100644
index 000000000000..da9cc6c77d59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pg_flame/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pg_flame";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "mgartner";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-glvIv9GHIbp6IZUvZo9fyvkJ6QR03nMlrAOpZ3HfA6g=";
+  };
+
+  vendorHash = "sha256-ReVaetR3zkLLLc3d0EQkBAyUrxwBn3iq8MZAGzkQfeY=";
+
+  meta = with lib; {
+    description = "Flamegraph generator for Postgres EXPLAIN ANALYZE output";
+    homepage = "https://github.com/mgartner/pg_flame";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "pg_flame";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pg_top/default.nix b/nixpkgs/pkgs/tools/misc/pg_top/default.nix
new file mode 100644
index 000000000000..0999c9456d53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pg_top/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, ncurses, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_top";
+  version = "3.7.0";
+
+  src = fetchurl {
+    url = "https://pgfoundry.org/frs/download.php/1781/pg_top-${version}.tar.gz";
+    sha256 = "17xrv0l58rv3an06gkajzw0gg6v810xx6vl137an1iykmhvfh7h2";
+  };
+
+  buildInputs = [ ncurses postgresql ];
+
+  meta = with lib; {
+    description = "A 'top' like tool for PostgreSQL";
+    longDescription = ''
+      pg_top allows you to:
+       * View currently running SQL statement of a process.
+       * View query plan of a currently running SQL statement.
+       * View locks held by a process.
+       * View user table statistics.
+       * View user index statistics.
+    '';
+
+    homepage = "http://ptop.projects.postgresql.org/";
+    platforms = platforms.linux;
+    license = licenses.free; # see commands.c
+    mainProgram = "pg_top";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pgbadger/default.nix b/nixpkgs/pkgs/tools/misc/pgbadger/default.nix
new file mode 100644
index 000000000000..4054e6b20e94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pgbadger/default.nix
@@ -0,0 +1,41 @@
+{ buildPerlPackage, shortenPerlShebang, stdenv, lib, fetchFromGitHub, which, bzip2, PodMarkdown, JSONXS
+, TextCSV_XS }:
+buildPerlPackage rec {
+  pname = "pgbadger";
+  version = "12.2";
+  src = fetchFromGitHub {
+    owner = "darold";
+    repo = "pgbadger";
+    rev = "v${version}";
+    hash = "sha256-IzfpDqzS5VcehkPsFxyn3kJsvXs8nLgJ3WT8ZCmIDxI=";
+  };
+
+  postPatch = ''
+    patchShebangs ./pgbadger
+  '';
+
+  # pgbadger has too many `-Idir` flags on its shebang line on Darwin,
+  # causing the build to fail when trying to generate the documentation.
+  # Rewrite the -I flags in `use lib` form.
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang ./pgbadger
+  '';
+
+  outputs = [ "out" ];
+
+  PERL_MM_OPT = "INSTALL_BASE=${placeholder "out"}";
+
+  buildInputs = [ PodMarkdown JSONXS TextCSV_XS ];
+  nativeBuildInputs = lib.optionals stdenv.isDarwin [ shortenPerlShebang ];
+
+  nativeCheckInputs = [ which bzip2 ];
+
+  meta = {
+    homepage = "https://github.com/darold/pgbadger";
+    description = "A fast PostgreSQL Log Analyzer";
+    changelog = "https://github.com/darold/pgbadger/raw/v${version}/ChangeLog";
+    license = lib.licenses.postgresql;
+    maintainers = lib.teams.determinatesystems.members;
+    mainProgram = "pgbadger";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pgcenter/default.nix b/nixpkgs/pkgs/tools/misc/pgcenter/default.nix
new file mode 100644
index 000000000000..ba962a393665
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pgcenter/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pgcenter";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner  = "lesovsky";
+    repo   = "pgcenter";
+    rev    = "v${version}";
+    sha256 = "sha256-xaY01T12/5Peww9scRgfc5yHj7QA8BEwOK5l6OedziY=";
+  };
+
+  vendorHash = "sha256-9hYiyZ34atmSL7JvuXyiGU7HR4E6qN7bGZlyU+hP+FU=";
+
+  subPackages = [ "cmd" ];
+
+  ldflags = [ "-w" "-s" "-X main.gitTag=${src.rev}" "-X main.gitCommit=${src.rev}" "-X main.gitBranch=master" ];
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/pgcenter
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://pgcenter.org/";
+    changelog = "https://github.com/lesovsky/pgcenter/raw/v${version}/doc/Changelog";
+    description = "Command-line admin tool for observing and troubleshooting PostgreSQL";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "pgcenter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pgmetrics/default.nix b/nixpkgs/pkgs/tools/misc/pgmetrics/default.nix
new file mode 100644
index 000000000000..0df0070e18b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pgmetrics/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pgmetrics";
+  version = "1.16.0";
+
+  src = fetchFromGitHub {
+    owner = "rapidloop";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-8pF3E0Zh/SsH6+5iXt1KFwud2ijoisYfcu+QHRM9x9s=";
+  };
+
+  vendorHash = "sha256-KIMnvGMIipuIFPTSeERtCfvlPuvHvEHdjBJ1TbT2d1s=";
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://pgmetrics.io/";
+    description = "Collect and display information and stats from a running PostgreSQL server";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "pgmetrics";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix b/nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix
new file mode 100644
index 000000000000..cb4762c412f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, php, which, makeWrapper, gnumake, gcc, callPackage }:
+
+stdenv.mkDerivation rec {
+  pname = "phoronix-test-suite";
+  version = "10.8.4";
+
+  src = fetchurl {
+    url = "https://phoronix-test-suite.com/releases/${pname}-${version}.tar.gz";
+    sha256 = "sha256-HyCS1TbAoxk+/FPkpQ887mXA7xp40x5UBPHGY//3t/Q=";
+  };
+
+  buildInputs = [ php ];
+  nativeBuildInputs = [ which makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    ./install-sh $out
+    wrapProgram $out/bin/phoronix-test-suite \
+    --set PHP_BIN ${php}/bin/php \
+    --prefix PATH : ${lib.makeBinPath [ gnumake gcc ]}
+
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    simple-execution = callPackage ./tests.nix { };
+  };
+
+  meta = with lib; {
+    description = "Open-Source, Automated Benchmarking";
+    homepage = "https://www.phoronix-test-suite.com/";
+    maintainers = with maintainers; [ davidak ];
+    license = licenses.gpl3;
+    platforms = with platforms; unix;
+    mainProgram = "phoronix-test-suite";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/phoronix-test-suite/tests.nix b/nixpkgs/pkgs/tools/misc/phoronix-test-suite/tests.nix
new file mode 100644
index 000000000000..85249c1242ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/phoronix-test-suite/tests.nix
@@ -0,0 +1,20 @@
+{ runCommand, phoronix-test-suite }:
+
+let
+  inherit (phoronix-test-suite) pname version;
+in
+
+runCommand "${pname}-tests" { meta.timeout = 60; }
+  ''
+    # automatic initial setup to prevent interactive questions
+    ${phoronix-test-suite}/bin/phoronix-test-suite enterprise-setup >/dev/null
+    # get version of installed program and compare with package version
+    if [[ `${phoronix-test-suite}/bin/phoronix-test-suite version` != *"${version}"*  ]]; then
+      echo "Error: program version does not match package version"
+      exit 1
+    fi
+    # run dummy command
+    ${phoronix-test-suite}/bin/phoronix-test-suite dummy_module.dummy-command >/dev/null
+    # needed for Nix to register the command as successful
+    touch $out
+  ''
diff --git a/nixpkgs/pkgs/tools/misc/phrase-cli/default.nix b/nixpkgs/pkgs/tools/misc/phrase-cli/default.nix
new file mode 100644
index 000000000000..9a7c6fc4633e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/phrase-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "phrase-cli";
+  version = "2.22.0";
+
+  src = fetchFromGitHub {
+    owner = "phrase";
+    repo = "phrase-cli";
+    rev = version;
+    sha256 = "sha256-k0Di69toio7uZiTCI34H0N+PnYXfxygQW9sZ9GpG3rU=";
+  };
+
+  vendorHash = "sha256-/V1jAF3Uf0AT8JF7hERK3Kc4fX15lDnoEsjeHS0QjpE=";
+
+  ldflags = [ "-X=github.com/phrase/phrase-cli/cmd.PHRASE_CLIENT_VERSION=${version}" ];
+
+  postInstall = ''
+    ln -s $out/bin/phrase-cli $out/bin/phrase
+  '';
+
+  meta = with lib; {
+    homepage = "http://docs.phraseapp.com";
+    description = "PhraseApp API v2 Command Line Client";
+    changelog = "https://github.com/phrase/phrase-cli/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ juboba ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pick/default.nix b/nixpkgs/pkgs/tools/misc/pick/default.nix
new file mode 100644
index 000000000000..cee77d3a1588
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pick/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "pick";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mptre";
+    repo = "pick";
+    rev = "v${version}";
+    sha256 = "8cgt5KpLfnLwhucn4DQYC/7ot1u24ahJxWG+/1SL584=";
+  };
+
+  buildInputs = [ ncurses ];
+
+  PREFIX = placeholder "out";
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Fuzzy text selection utility";
+    license = licenses.mit;
+    maintainers = [ maintainers.womfoo ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "pick";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/picocom/default.nix b/nixpkgs/pkgs/tools/misc/picocom/default.nix
new file mode 100644
index 000000000000..d8422e3679fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/picocom/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv
+, fetchFromGitHub
+, installShellFiles
+, lrzsz
+, IOKit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "picocom";
+  # last tagged release is 3.1 but 3.2 is still considered a release
+  version = "3.2a";
+
+  # upstream is quiet as the original author is no longer active since March 2018
+  src = fetchFromGitHub {
+    owner = "npat-efault";
+    repo = "picocom";
+    rev = "1acf1ddabaf3576b4023c4f6f09c5a3e4b086fb8";
+    sha256 = "sha256-cs2bxqZfTbnY5d+VJ257C5hssaFvYup3tBKz68ROnAo=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace '.picocom_history' '.cache/picocom_history'
+
+    substituteInPlace picocom.c \
+      --replace '"rz -vv -E"' '"${lrzsz}/bin/rz -vv -E"' \
+      --replace '"sz -vv"' '"${lrzsz}/bin/sz -vv"'
+  '';
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optional stdenv.isDarwin IOKit;
+
+  installPhase = ''
+    install -Dm555 -t $out/bin picocom
+    installManPage picocom.1
+    installShellCompletion --bash bash_completion/picocom
+  '';
+
+  meta = with lib; {
+    description = "Minimal dumb-terminal emulation program";
+    homepage = "https://github.com/npat-efault/picocom/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    mainProgram = "picocom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pinsel/default.nix b/nixpkgs/pkgs/tools/misc/pinsel/default.nix
new file mode 100644
index 000000000000..de6cc3700838
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pinsel/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gtk3, lua, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "pinsel";
+  version = "unstable-2021-09-13";
+
+  src = fetchFromGitHub {
+    owner = "Nooo37";
+    repo = pname;
+    rev = "24b0205ca041511b3efb2a75ef296539442f9f54";
+    sha256 = "sha256-w+jiKypZODsmZq3uWGNd8PZhe1SowHj0thcQTX8WHfQ=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ pkg-config glib ];
+
+  buildInputs = [ lua gtk3 ];
+
+  makeFlags = [ "INSTALLDIR=${placeholder "out"}/bin" ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Minimal screenshot annotation tool with lua config";
+    homepage = "https://github.com/Nooo37/pinsel";
+    # no license
+    license = licenses.unfree;
+    maintainers = with maintainers; [ lom ];
+    mainProgram = "pinsel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pipe-rename/default.nix b/nixpkgs/pkgs/tools/misc/pipe-rename/default.nix
new file mode 100644
index 000000000000..dc8e545a7d8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipe-rename/default.nix
@@ -0,0 +1,33 @@
+{ lib, rustPlatform, fetchCrate, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pipe-rename";
+  version = "1.6.5";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-av/ig76O7t3dB4Irfi3yqyL30nkJJCzs5EayWRbpOI0=";
+  };
+
+  cargoHash = "sha256-3p6Bf9UfCb5uc5rp/yuXixcDkuXfTiboLl8TI0O52hE=";
+
+  nativeCheckInputs = [ python3 ];
+
+  checkFlags = [
+    # tests are failing upstream
+    "--skip=test_dot"
+    "--skip=test_dotdot"
+  ];
+
+  preCheck = ''
+    patchShebangs tests/editors/env-editor.py
+  '';
+
+  meta = with lib; {
+    description = "Rename your files using your favorite text editor";
+    homepage = "https://github.com/marcusbuffett/pipe-rename";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "renamer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pipectl/default.nix b/nixpkgs/pkgs/tools/misc/pipectl/default.nix
new file mode 100644
index 000000000000..f3e80655279f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipectl/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, scdoc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pipectl";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "Ferdi265";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-dWRem9VHzMwVo+ahUagZB2r4Ag8PyBef5X41vVpZcAc=";
+  };
+
+  nativeBuildInputs = [ cmake scdoc ];
+
+  cmakeFlags = [
+    "-DINSTALL_DOCUMENTATION=ON"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Ferdi265/pipectl";
+    license = licenses.gpl3;
+    description = "a simple named pipe management utility";
+    maintainers = with maintainers; [ synthetica ];
+    mainProgram = "pipectl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pipelight/default.nix b/nixpkgs/pkgs/tools/misc/pipelight/default.nix
new file mode 100644
index 000000000000..90c1e8d1e86a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipelight/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchurl, bash, cabextract, curl, gnupg, libX11, libGLU, libGL, wine-staging }:
+
+let
+  wine_custom = wine-staging;
+
+  mozillaPluginPath = "/lib/mozilla/plugins";
+
+
+in stdenv.mkDerivation rec {
+
+  version = "0.2.8.2";
+
+  pname = "pipelight";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/mmueller2012/pipelight/get/v${version}.tar.gz";
+    sha256 = "1kyy6knkr42k34rs661r0f5sf6l1s2jdbphdg89n73ynijqmzjhk";
+  };
+
+  buildInputs = [ wine_custom libX11 libGLU libGL curl ];
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-fpermissive" ];
+
+  patches = [
+    ./pipelight.patch
+    ./wine-6.13-new-args.patch
+    # https://source.winehq.org/git/wine.git/commit/cf4a781e987a98a8d48610362a20a320c4a1016d
+    # adds ControlMask as a static variable.
+    ./wine-7.10-ControlMask.patch
+  ];
+
+  configurePhase = ''
+    patchShebangs .
+    ./configure \
+      --prefix=$out \
+      --moz-plugin-path=$out/${mozillaPluginPath} \
+      --wine-path=${wine_custom} \
+      --gpg-exec=${gnupg}/bin/gpg \
+      --bash-interp=${bash}/bin/bash \
+      --downloader=${curl.bin}/bin/curl
+      $configureFlags
+  '';
+
+  passthru = {
+    mozillaPlugin = mozillaPluginPath;
+    wine = wine_custom;
+  };
+
+  postInstall = ''
+    $out/bin/pipelight-plugin --create-mozilla-plugins
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/share/pipelight/install-dependency \
+      --replace cabextract ${cabextract}/bin/cabextract
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = "http://pipelight.net/";
+    license = with lib.licenses; [ mpl11 gpl2 lgpl21 ];
+    description = "A wrapper for using Windows plugins in Linux browsers";
+    maintainers = with lib.maintainers; [ ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    mainProgram = "pipelight-plugin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch b/nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch
new file mode 100644
index 000000000000..fc6666f8f12b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch
@@ -0,0 +1,122 @@
+diff -urN pipelight.old/bin/pipelight-plugin.in pipelight.new/bin/pipelight-plugin.in
+--- pipelight.old/bin/pipelight-plugin.in	2014-07-19 22:53:02.000000000 +0200
++++ pipelight.new/bin/pipelight-plugin.in	2014-07-27 00:02:39.275834030 +0200
+@@ -92,7 +92,7 @@
+	PLUGIN_PATH=$(realpath "$PLUGIN_PATH")
+
+	# Global installation
+-	if [ $(/usr/bin/id -u) -eq 0 ]; then
++	if [ $(id -u) -eq 0 ]; then
+		INSTALLDIR="$PLUGIN_PATH"
+
+	# Use environment variable (only if it doesn't point to the global directory)
+@@ -594,7 +594,7 @@
+	fi
+
+	# Ensure the signature is valid, extract the content
+-	if ! @@GPG@@ --batch --no-default-keyring --keyring "$PIPELIGHT_SHARE_PATH/sig-install-dependency.gpg" --decrypt "$tmpfile" > "$decfile"; then
++	if ! @@GPG@@ --homedir /tmp --batch --no-default-keyring --keyring "$PIPELIGHT_SHARE_PATH/sig-install-dependency.gpg" --decrypt "$tmpfile" > "$decfile"; then
+		rm "$tmpfile"
+		rm "$decfile"
+		echo ""
+@@ -630,24 +630,10 @@
+	return 0
+ }
+
+-# Use fetch on FreeBSD if wget is not available
+-if command -v wget >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		wget -O "$1" "$2"
+-	}
+-elif command -v fetch >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		fetch -o "$1" "$2"
+-	}
+-else
+-	download_file()
+-	{
+-		echo "ERROR: Could neither find wget nor fetch. Unable to download file!" >&2
+-		return 1
+-	}
+-fi
++download_file()
++{
++	curl --cacert /etc/ssl/certs/ca-certificates.crt -o "$1" "$2"
++}
+
+ # Use shasum instead of sha256sum on MacOS / *BSD
+ if ! command -v sha256sum >/dev/null 2>&1 && command -v shasum >/dev/null 2>&1; then
+diff -urN pipelight.old/configure pipelight.new/configure
+--- pipelight.old/configure	2014-07-19 22:53:02.000000000 +0200
++++ pipelight.new/configure	2014-07-26 23:52:13.690881447 +0200
+@@ -66,12 +66,8 @@
+ datadir=""
+ libdir=""
+ mandir=""
+-bash_interp="$(which bash)"
+-if which gpg &> /dev/null; then
+-	gpg_exec="$(which gpg)"
+-else
+-	gpg_exec="/usr/bin/gpg"
+-fi
++bash_interp=bash
++gpg_exec=gpg
+ moz_plugin_path=""
+ gcc_runtime_dlls=""
+ so_mode="0644"
+diff -urN pipelight.old/share/install-dependency pipelight.new/share/install-dependency
+--- pipelight.old/share/install-dependency	2014-07-19 22:53:02.000000000 +0200
++++ pipelight.new/share/install-dependency	2014-07-26 23:26:18.431938546 +0200
+@@ -734,42 +734,14 @@
+	return 0
+ }
+
+-# Use fetch on FreeBSD if wget is not available
+-if command -v wget >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		wget -O "$1" "$2"
+-	}
+-	get_download_size()
+-	{
+-		local filesize="$(wget -O- "$1" --spider --server-response 2>&1 | sed -ne '/Content-Length/{s/.*: //;p}')"
+-		local re='^[0-9]+$'
+-		if [[ "$filesize" -ne "0" ]] && [[ "$filesize" =~ $re ]]; then
+-			echo "$(($filesize/(1024*1024)))"
+-		else
+-			echo "N/A"
+-		fi
+-	}
+-elif command -v fetch >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		fetch -o "$1" "$2"
+-	}
+-	get_download_size()
+-	{
+-		echo "N/A"
+-	}
+-else
+-	download_file()
+-	{
+-		echo "ERROR: Could neither find wget nor fetch. Unable to download file!" >&2
+-		return 1
+-	}
+-	get_download_size()
+-	{
+-		echo "N/A"
+-	}
+-fi
++download_file()
++{
++	curl --cacert /etc/ssl/certs/ca-certificates.crt -o "$1" "$2"
++}
++get_download_size()
++{
++	echo "N/A"
++}
+
+ # Use shasum instead of sha256sum on MacOS / *BSD
+ if ! command -v sha256sum >/dev/null 2>&1 && command -v shasum >/dev/null 2>&1; then
diff --git a/nixpkgs/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch b/nixpkgs/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch
new file mode 100644
index 000000000000..b67af621f64f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch
@@ -0,0 +1,42 @@
+diff --git a/src/windows/pluginloader/apihook.c b/src/windows/pluginloader/apihook.c
+index 80bf726..6b80f70 100644
+--- a/src/windows/pluginloader/apihook.c
++++ b/src/windows/pluginloader/apihook.c
+@@ -42,7 +42,9 @@
+ #include "common/common.h"
+ #include "pluginloader.h"
+ 
++#define new cnew
+ #include <windows.h>							// for PVOID and other types
++#undef new
+ #include <string.h>								// for memset
+ 
+ void* patchDLLExport(PVOID ModuleBase, const char* functionName, void* newFunctionPtr){
+diff --git a/src/windows/pluginloader/npnfunctions.c b/src/windows/pluginloader/npnfunctions.c
+index e4e38aa..19f29d5 100644
+--- a/src/windows/pluginloader/npnfunctions.c
++++ b/src/windows/pluginloader/npnfunctions.c
+@@ -41,7 +41,9 @@
+ #include "common/common.h"
+ #include "pluginloader.h"
+ 
++#define new cnew
+ #include <windows.h>
++#undef new
+ 
+ /* Shockwave sometimes calls the function with a wrong instance? Is this a wine bug? */
+ NPP shockwaveInstanceBug = NULL;
+diff --git a/src/windows/pluginloader/pluginloader.c b/src/windows/pluginloader/pluginloader.c
+index 8f1170a..99dbceb 100644
+--- a/src/windows/pluginloader/pluginloader.c
++++ b/src/windows/pluginloader/pluginloader.c
+@@ -50,7 +50,9 @@
+ #include "pluginloader.h"
+ #include "apihook.h"
+ 
++#define new cnew
+ #include <windows.h>
++#undef new
+ #include <objbase.h>							// for CoInitializeEx
+ #include <GL/gl.h>
+ 
diff --git a/nixpkgs/pkgs/tools/misc/pipelight/wine-7.10-ControlMask.patch b/nixpkgs/pkgs/tools/misc/pipelight/wine-7.10-ControlMask.patch
new file mode 100644
index 000000000000..87280d17788a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipelight/wine-7.10-ControlMask.patch
@@ -0,0 +1,26 @@
+diff --git a/src/windows/pluginloader/pluginloader.c b/src/windows/pluginloader/pluginloader.c
+index 751e072..7a4589d 100644
+--- a/src/windows/pluginloader/pluginloader.c
++++ b/src/windows/pluginloader/pluginloader.c
+@@ -190,7 +190,7 @@ static inline WPARAM wParamFromX11State(uint32_t state){
+ 	if (state & Button3Mask) wParam |= MK_RBUTTON;
+ 	if (state & Button2Mask) wParam |= MK_MBUTTON;
+ 	if (state & ShiftMask)   wParam |= MK_SHIFT;
+-	if (state & ControlMask) wParam |= MK_CONTROL;
++	if (state & ControlMask_) wParam |= MK_CONTROL;
+ 	return wParam;
+ }
+ 
+diff --git a/src/windows/pluginloader/pluginloader.h b/src/windows/pluginloader/pluginloader.h
+index ffe89a7..a1ebabc 100644
+--- a/src/windows/pluginloader/pluginloader.h
++++ b/src/windows/pluginloader/pluginloader.h
+@@ -149,7 +149,7 @@ typedef unsigned long int XID;
+ 
+ #define ShiftMask	(1<<0)
+ #define LockMask	(1<<1)
+-#define ControlMask	(1<<2)
++#define ControlMask_	(1<<2)
+ #define Button1Mask	(1<<8)
+ #define Button2Mask	(1<<9)
+ #define Button3Mask	(1<<10)
diff --git a/nixpkgs/pkgs/tools/misc/pipreqs/default.nix b/nixpkgs/pkgs/tools/misc/pipreqs/default.nix
new file mode 100644
index 000000000000..49062b3a5cb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipreqs/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3, fetchPypi }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "pipreqs";
+  version = "0.4.13";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-oX8WeIC2khvjdTPOTIHdxuIrRlwQeq1VfbQ7Gt1WqZs=";
+  };
+
+  propagatedBuildInputs = [ yarg docopt ];
+
+  # Tests requires network access. Works fine without sandboxing
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Generate requirements.txt file for any project based on imports";
+    homepage = "https://github.com/bndr/pipreqs";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ psyanticy ];
+    mainProgram = "pipreqs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pistol/default.nix b/nixpkgs/pkgs/tools/misc/pistol/default.nix
new file mode 100644
index 000000000000..79826e6f7924
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pistol/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, file
+, installShellFiles
+, asciidoctor
+}:
+
+buildGoModule rec {
+  pname = "pistol";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "doronbehar";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-7nALrB+QubEnryVsGPpFMJ003SP2lheYTkWXF5w/V8I=";
+  };
+
+  vendorHash = "sha256-9Ydps8UA1f0fwG5SHRE4F61OyRJiITw/4SyoMEbsRgM=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/pistol" ];
+
+  buildInputs = [
+    file
+  ];
+  nativeBuildInputs = [
+    installShellFiles
+    asciidoctor
+  ];
+  postInstall = ''
+    asciidoctor -b manpage -d manpage README.adoc
+    installManPage pistol.1
+  '';
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "General purpose file previewer designed for Ranger, Lf to make scope.sh redundant";
+    homepage = "https://github.com/doronbehar/pistol";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+    mainProgram = "pistol";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/piston-cli/default.nix b/nixpkgs/pkgs/tools/misc/piston-cli/default.nix
new file mode 100644
index 000000000000..44ec8eabc149
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/piston-cli/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "piston-cli";
+  version = "1.4.3";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "qvDGVJcaMXUajdUQWl4W1dost8k0PsS9XX/o8uQrtfY=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ rich prompt-toolkit requests pygments pyyaml more-itertools ];
+
+  checkPhase = ''
+    $out/bin/piston --help > /dev/null
+  '';
+
+  nativeBuildInputs = with python3Packages; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "rich"
+    "more-itertools"
+    "PyYAML"
+  ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Piston api tool";
+    homepage = "https://github.com/Shivansh-007/piston-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ethancedwards8 ];
+    mainProgram = "piston";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pixd/default.nix b/nixpkgs/pkgs/tools/misc/pixd/default.nix
new file mode 100644
index 000000000000..84ad2c92e207
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pixd/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "pixd";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "FireyFly";
+    repo = "pixd";
+    rev = "v${version}";
+    sha256 = "1vmkbs39mg5vwmkzfcrxqm6p8zr9sj4qdwng9icmyf5k34c34xdg";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Colourful visualization tool for binary files";
+    homepage = "https://github.com/FireyFly/pixd";
+    maintainers = [ maintainers.FireyFly ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+    mainProgram = "pixd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pk2cmd/default.nix b/nixpkgs/pkgs/tools/misc/pk2cmd/default.nix
new file mode 100644
index 000000000000..9b04a668dadb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pk2cmd/default.nix
@@ -0,0 +1,29 @@
+{lib, stdenv, fetchurl, libusb-compat-0_1, makeWrapper}:
+
+stdenv.mkDerivation rec {
+  pname = "pk2cmd";
+  version = "1.20";
+  src = fetchurl {
+    url = "https://ww1.microchip.com/downloads/en/DeviceDoc/pk2cmdv${version}LinuxMacSource.tar.gz";
+    sha256 = "1yjpi2qshnqfpan4w3ggakkr3znfrx5cxkny92ka7v9na3g2fc4h";
+  };
+
+  makeFlags = [ "LIBUSB=${libusb-compat-0_1.dev}" "linux" ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/pk2
+    cp pk2cmd $out/bin
+    cp PK2DeviceFile.dat $out/share/pk2
+    wrapProgram $out/bin/pk2cmd --prefix PATH : $out/share/pk2
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libusb-compat-0_1 ];
+
+  meta = {
+    homepage = "https://www.microchip.com/pickit2";
+    license = lib.licenses.unfree; #MicroChip-PK2
+    description = "Microchip PIC programming software for the PICKit2 programmer";
+    mainProgram = "pk2cmd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pkgdiff/default.nix b/nixpkgs/pkgs/tools/misc/pkgdiff/default.nix
new file mode 100644
index 000000000000..45ec2df2beaf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pkgdiff/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perl, wdiff }:
+
+stdenv.mkDerivation rec {
+  version = "1.7.2";
+  pname = "pkgdiff";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "pkgdiff";
+    rev = version;
+    sha256 = "1ahknyx0s54frbd3gqh070lkv3j1b344jrs6m6p1s1lgwbd70vnb";
+  };
+
+  buildInputs = [ perl ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/pkgdiff --prefix PATH : ${lib.makeBinPath [ wdiff ]}
+  '';
+
+  meta = with lib; {
+    description = "A tool for visualizing changes in Linux software packages";
+    homepage = "https://lvc.github.io/pkgdiff/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ sweber ];
+    platforms = platforms.unix;
+    mainProgram = "pkgdiff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pkgtop/default.nix b/nixpkgs/pkgs/tools/misc/pkgtop/default.nix
new file mode 100644
index 000000000000..acb56dd47d4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pkgtop/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "pkgtop";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "pkgtop";
+    rev = version;
+    hash = "sha256-NY8nx4BKAUq1nGBlzRzm2OH1k01TV6qs2IcoErhuxTc=";
+  };
+
+  vendorHash = "sha256-dlDbNym7CNn5088znMNgGAr2wBM3+nYv3q362353aLs=";
+
+  postInstall = ''
+    mv $out/bin/{cmd,pkgtop}
+  '';
+
+  meta = with lib; {
+    description = "Interactive package manager and resource monitor designed for the GNU/Linux";
+    homepage = "https://github.com/orhun/pkgtop";
+    changelog = "https://github.com/orhun/pkgtop/releases/tag/${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "pkgtop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plantuml-server/default.nix b/nixpkgs/pkgs/tools/misc/plantuml-server/default.nix
new file mode 100644
index 000000000000..e0fa8b00db56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plantuml-server/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, nixosTests }:
+
+let
+  version = "1.2024.3";
+in
+stdenv.mkDerivation rec {
+  pname = "plantuml-server";
+  inherit version;
+  src = fetchurl {
+    url = "https://github.com/plantuml/plantuml-server/releases/download/v${version}/plantuml-v${version}.war";
+    sha256 = "sha256-tuRtQl6tbjrgew6s6OV4EeY+GUo3DPVJJyuoD2vfnoo=";
+  };
+
+  dontUnpack = true;
+  installPhase = ''
+    mkdir -p "$out/webapps"
+    cp "$src" "$out/webapps/plantuml.war"
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) plantuml-server;
+  };
+
+  meta = with lib; {
+    description = "A web application to generate UML diagrams on-the-fly";
+    homepage = "https://plantuml.com/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ truh ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plantuml/default.nix b/nixpkgs/pkgs/tools/misc/plantuml/default.nix
new file mode 100644
index 000000000000..a237bb88c64b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plantuml/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, makeBinaryWrapper
+, jre
+, graphviz
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "plantuml";
+  version = "1.2024.3";
+
+  src = fetchurl {
+    url = "https://github.com/plantuml/plantuml/releases/download/v${finalAttrs.version}/plantuml-pdf-${finalAttrs.version}.jar";
+    hash = "sha256-zgpqXawlIdNgSxiOjtk7XLOnrVVD09T5qE9K8LD4TtY=";
+  };
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  buildCommand = ''
+    install -Dm644 $src $out/lib/plantuml.jar
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/plantuml \
+      --argv0 plantuml \
+      --set GRAPHVIZ_DOT ${graphviz}/bin/dot \
+      --add-flags "-jar $out/lib/plantuml.jar"
+  '';
+
+  doInstallCheck = true;
+  postCheckInstall = ''
+    $out/bin/plantuml -help
+    $out/bin/plantuml -testdot
+  '';
+
+  meta = {
+    description = "Draw UML diagrams using a simple and human readable text description";
+    homepage = "https://plantuml.com/";
+    # "plantuml -license" says GPLv3 or later
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "plantuml";
+    maintainers = with lib.maintainers; [ bjornfor Mogria ];
+    platforms = lib.platforms.unix;
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/plantuml/plantuml-c4.nix b/nixpkgs/pkgs/tools/misc/plantuml/plantuml-c4.nix
new file mode 100644
index 000000000000..2829d0a31eab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plantuml/plantuml-c4.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, makeWrapper, fetchzip, runCommand, plantuml, plantuml-c4, jre }:
+
+# The C4-PlantUML docs say that it suffices to run plantuml with the
+# -DRELATIVE_INCLUDE="..." arg to make plantuml find the C4 templates
+# when included like "!include C4_Container.puml".
+# Unfortunately, this is not sufficient in practise, when the path is not ".".
+# What helps is setting -Dplantuml.include.path="..." *before* the jar
+# parameter.
+# The -DRELATIVE_INCLUDE param then *still* needs to be set (*after* the jar
+# argument), because the C4 template vars check for existence of this variable
+# and if it is not set, reference paths in the internet.
+
+let
+  c4-lib = fetchzip {
+    url = "https://github.com/plantuml-stdlib/C4-PlantUML/archive/refs/tags/v2.8.0.zip";
+    hash = "sha256-pGtTFg7HcAFYPrjd+CAaxS4C6Cqaj94aq45v3NpiAxM=";
+  };
+
+  sprites = fetchzip {
+    url = "https://github.com/tupadr3/plantuml-icon-font-sprites/archive/fa3f885dbd45c9cd0cdf6c0e5e4fb51ec8b76582.zip";
+    hash = "sha256-lt9+NNMIaZSkKNsGyHoqXUCTlKmZFGfNYYGjer6X0Xc=";
+  };
+
+  # In order to pre-fix the plantuml.jar parameter with the argument
+  # -Dplantuml.include.path=..., we post-fix the java command using a wrapper.
+  # This way the plantuml derivation can remain unchanged.
+  plantumlWithExtraPath =
+    let
+      plantumlIncludePath = lib.concatStringsSep ":" [ c4-lib sprites ];
+      includeFlag = "-Dplantuml.include.path=${lib.escapeShellArg plantumlIncludePath}";
+      postFixedJre =
+        runCommand "jre-postfixed" { nativeBuildInputs = [ makeWrapper ]; } ''
+          mkdir -p $out/bin
+
+          makeWrapper ${jre}/bin/java $out/bin/java \
+            --add-flags ${lib.escapeShellArg includeFlag}
+        '';
+    in
+    plantuml.override { jre = postFixedJre; };
+in
+
+stdenv.mkDerivation rec {
+  pname = "plantuml-c4";
+  version = "2.8.0";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+
+    makeWrapper ${plantumlWithExtraPath}/bin/plantuml $out/bin/plantuml \
+      --add-flags "-DRELATIVE_INCLUDE=\"${c4-lib}\""
+
+    $out/bin/plantuml -help
+  '';
+
+  passthru.tests.example-c4-diagram =
+    runCommand "c4-plantuml-sample.png" { nativeBuildInputs = [ plantuml-c4 ]; } ''
+      sed 's/https:.*\///' "${c4-lib}/samples/C4_Context Diagram Sample - enterprise.puml" > sample.puml
+      plantuml sample.puml -o $out
+
+      sed 's/!include ..\//!include /' ${sprites}/examples/complex-example.puml > sprites.puml
+      plantuml sprites.puml -o $out
+    '';
+
+  meta = with lib; {
+    description = "PlantUML bundled with C4-Plantuml and plantuml sprites library";
+    homepage = "https://github.com/plantuml-stdlib/C4-PlantUML";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tfc ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plfit/default.nix b/nixpkgs/pkgs/tools/misc/plfit/default.nix
new file mode 100644
index 000000000000..78e7c3572b6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plfit/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, python ? null
+, swig
+, llvmPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "plfit";
+  version = "0.9.4";
+
+  src = fetchFromGitHub {
+    owner = "ntamas";
+    repo = "plfit";
+    rev = version;
+    hash = "sha256-hnmP/56P2anR0S8zQyQqN1lbge5GgK+P8Lx8bRkwSxA=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ] ++ lib.optionals (python != null) [
+    python
+    swig
+  ];
+
+  cmakeFlags = [
+    "-DPLFIT_USE_OPENMP=ON"
+  ] ++ lib.optionals (python != null) [
+    "-DPLFIT_COMPILE_PYTHON_MODULE=ON"
+  ];
+
+  buildInputs = lib.optionals stdenv.cc.isClang [
+    llvmPackages.openmp
+  ];
+
+  meta = with lib; {
+    description = "Fitting power-law distributions to empirical data";
+    homepage = "https://github.com/ntamas/plfit";
+    changelog = "https://github.com/ntamas/plfit/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plocate/default.nix b/nixpkgs/pkgs/tools/misc/plocate/default.nix
new file mode 100644
index 000000000000..b44cb0b14860
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plocate/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, lib
+, fetchgit
+, pkg-config
+, meson
+, ninja
+, systemd
+, liburing
+, zstd
+}:
+stdenv.mkDerivation rec {
+  pname = "plocate";
+  version = "1.1.22";
+
+  src = fetchgit {
+    url = "https://git.sesse.net/plocate";
+    rev = version;
+    sha256 = "sha256-ejv1IsjbImnvI1oorvMoIvTBu3HuVy7VtgHNTIkqqro=";
+  };
+
+  postPatch = ''
+    sed -i meson.build \
+      -e '/mkdir\.sh/d'
+  '';
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+
+  buildInputs = [ systemd liburing zstd ];
+
+  mesonFlags = [
+    "-Dsystemunitdir=${placeholder "out"}/etc/systemd/system"
+    "-Dsharedstatedir=/var/cache"
+    "-Ddbpath=locatedb"
+  ];
+
+  meta = with lib; {
+    description = "Much faster locate";
+    homepage = "https://plocate.sesse.net/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg SuperSandro2000 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plotinus/default.nix b/nixpkgs/pkgs/tools/misc/plotinus/default.nix
new file mode 100644
index 000000000000..112010c80082
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plotinus/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv
+, fetchFromGitHub
+, gettext
+, libxml2
+, pkg-config
+, gtk3
+, cmake
+, ninja
+, vala
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "plotinus";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "p-e-w";
+    repo = "plotinus";
+    rev = "v${version}";
+    sha256 = "19k6f6ivg4ab57m62g6fkg85q9sv049snmzq1fyqnqijggwshxfz";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook
+    vala
+    cmake
+    ninja
+    gettext
+    libxml2
+  ];
+  buildInputs = [
+    gtk3
+  ];
+
+  meta = with lib; {
+    description = "A searchable command palette in every modern GTK application";
+    homepage = "https://github.com/p-e-w/plotinus";
+    maintainers = with maintainers; [ samdroid-apps ];
+    platforms = platforms.linux;
+    # No COPYING file, but headers in the source code
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plowshare/default.nix b/nixpkgs/pkgs/tools/misc/plowshare/default.nix
new file mode 100644
index 000000000000..4a87e5787bd2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plowshare/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, curl, recode, spidermonkey_102 }:
+
+stdenv.mkDerivation rec {
+
+  pname = "plowshare";
+  version = "2.1.7";
+
+  src = fetchFromGitHub {
+    owner = "mcrapet";
+    repo = "plowshare";
+    rev = "v${version}";
+    sha256 = "1p8s60dlzaldp006yj710s371aan915asyjhd99188vrj4jj1x79";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    make PREFIX="$out" install
+
+    for fn in plow{del,down,list,mod,probe,up}; do
+      wrapProgram "$out/bin/$fn" --prefix PATH : "${lib.makeBinPath [ curl recode spidermonkey_102 ]}"
+    done
+  '';
+
+  meta = {
+    description = ''
+      A command-line download/upload tool for popular file sharing websites
+    '';
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ aforemny ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pmbootstrap/default.nix b/nixpkgs/pkgs/tools/misc/pmbootstrap/default.nix
new file mode 100644
index 000000000000..03cc7997e225
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pmbootstrap/default.nix
@@ -0,0 +1,104 @@
+{ stdenv, lib, git, openssl, buildPythonApplication, pytestCheckHook, ps
+, fetchPypi, fetchFromGitLab, sudo }:
+
+buildPythonApplication rec {
+  pname = "pmbootstrap";
+  version = "2.2.0";
+
+  src = fetchFromGitLab {
+    owner = "postmarketos";
+    repo = pname;
+    rev = version;
+    hash = "sha256-wRJvvABIUPh79QfS8VcwRueB/vO9oGcqyE/OugfTsd8=";
+  };
+
+  pmb_test = "${src}/test";
+
+  # Tests depend on sudo
+  doCheck = stdenv.isLinux;
+
+  nativeCheckInputs = [ pytestCheckHook git openssl ps sudo ];
+
+  # Add test dependency in PATH
+  preCheck = "export PYTHONPATH=$PYTHONPATH:${pmb_test}";
+
+  # skip impure tests
+  disabledTests = [
+    "test_apk_static"
+    "test_aportgen"
+    "test_aportgen_device_wizard"
+    "test_bootimg"
+    "test_build_abuild_leftovers"
+    "test_build_depends_binary_outdated"
+    "test_build_depends_high_level"
+    "test_build_depends_no_binary_error"
+    "test_build_is_necessary"
+    "test_build_local_source_high_level"
+    "test_build_src_invalid_path"
+    "test_check"
+    "test_can_fast_forward"
+    "test_check_build_for_arch"
+    "test_check_config"
+    "test_chroot_arguments"
+    "test_chroot_interactive_shell"
+    "test_chroot_interactive_shell_user"
+    "test_chroot_mount"
+    "test_clean_worktree"
+    "test_config_user"
+    "test_cross_compile_distcc"
+    "test_crossdirect"
+    "test_extract_arch"
+    "test_extract_version"
+    "test_file"
+    "test_filter_aport_packages"
+    "test_filter_missing_packages_binary_exists"
+    "test_filter_missing_packages_invalid"
+    "test_filter_missing_packages_pmaports"
+    "test_finish"
+    "test_folder_size"
+    "test_get_all_component_names"
+    "test_get_apkbuild"
+    "test_get_depends"
+    "test_get_upstream_remote"
+    "test_helpers_lint"
+    "test_helpers_package_get_apkindex"
+    "test_helpers_repo"
+    "test_helpers_ui"
+    "test_init_buildenv"
+    "test_kconfig_check"
+    "test_keys"
+    "test_newapkbuild"
+    "test_package"
+    "test_package_from_aports"
+    "test_pkgrel_bump"
+    "test_pmbootstrap_status"
+    "test_print_checks_git_repo"
+    "test_proxy"
+    "test_pull"
+    "test_qemu_running_processes"
+    "test_questions_additional_options"
+    "test_questions_bootimg"
+    "test_questions_channel"
+    "test_questions_keymaps"
+    "test_questions_work_path"
+    "test_read_config_channel"
+    "test_recurse_invalid"
+    "test_run_abuild"
+    "test_run_core"
+    "test_shell_escape"
+    "test_skip_already_built"
+    "test_switch_to_channel_branch"
+    "test_version"
+  ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ git openssl ]}" ];
+
+  meta = with lib; {
+    description =
+      "Sophisticated chroot/build/flash tool to develop and install postmarketOS";
+    homepage = "https://gitlab.com/postmarketOS/pmbootstrap";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ onny ];
+    mainProgram = "pmbootstrap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix b/nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix
new file mode 100644
index 000000000000..eba487a57fb7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pod2mdoc";
+  version = "0.0.10";
+
+  src = fetchurl {
+    url = "http://mdocml.bsd.lv/pod2mdoc/snapshots/${pname}-${version}.tgz";
+    sha256 = "0nwa9zv9gmfi5ysz1wfm60kahc7nv0133n3dfc2vh2y3gj8mxr4f";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+    install -m 0755 pod2mdoc $out/bin
+    install -m 0444 pod2mdoc.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    homepage = "http://mdocml.bsd.lv/";
+    description = "converter from POD into mdoc";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ramkromberg ];
+    mainProgram = "pod2mdoc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pokeget-rs/default.nix b/nixpkgs/pkgs/tools/misc/pokeget-rs/default.nix
new file mode 100644
index 000000000000..55995e8b0bce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pokeget-rs/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pokeget-rs";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "talwat";
+    repo = "pokeget-rs";
+    rev = version;
+    hash = "sha256-++MD7XYWJ4Oim/VSYSisu/DwazOEfQ4CJNLfR5sjP3M=";
+    fetchSubmodules = true;
+  };
+
+  cargoHash = "sha256-lWImtmtoo3ujbHvaeijuVjt0NQhdp+mxuu8oxNutr2E=";
+
+  meta = with lib; {
+    description = "A better rust version of pokeget";
+    homepage = "https://github.com/talwat/pokeget-rs";
+    license = licenses.mit;
+    mainProgram = "pokeget";
+    maintainers = with maintainers; [ aleksana ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pokemonsay/default.nix b/nixpkgs/pkgs/tools/misc/pokemonsay/default.nix
new file mode 100644
index 000000000000..7053e4ba8073
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pokemonsay/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, fetchpatch
+, cowsay
+, coreutils
+, findutils
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "pokemonsay";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "HRKings";
+    repo = "pokemonsay-newgenerations";
+    rev = "v${version}";
+    hash = "sha256-IDTAZmOzkUg0kLUM0oWuVbi8EwE4sEpLWrNAtq/he+g=";
+  };
+
+  patches = [
+    (fetchpatch { # https://github.com/HRKings/pokemonsay-newgenerations/pull/5
+      name = "word-wrap-fix.patch";
+      url = "https://github.com/pbsds/pokemonsay-newgenerations/commit/7056d7ba689479a8e6c14ec000be1dfcd83afeb0.patch";
+      hash = "sha256-aqUJkyJDWArLjChxLZ4BbC6XAB53LAqARzTvEAxrFCI=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace pokemonsay.sh \
+      --replace \
+        'INSTALL_PATH=''${HOME}/.bin/pokemonsay' \
+        "" \
+      --replace \
+        'POKEMON_PATH=''${INSTALL_PATH}/pokemons' \
+        'POKEMON_PATH=${placeholder "out"}/share/pokemonsay' \
+      --replace \
+        '$(find ' \
+        '$(${findutils}/bin/find ' \
+      --replace \
+        '$(basename ' \
+        '$(${coreutils}/bin/basename ' \
+      --replace \
+        'cowsay -f ' \
+        '${cowsay}/bin/cowsay -f ' \
+      --replace \
+        'cowthink -f ' \
+        '${cowsay}/bin/cowthink -f '
+
+    substituteInPlace pokemonthink.sh \
+      --replace \
+        './pokemonsay.sh' \
+        "${placeholder "out"}/bin/pokemonsay"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/pokemonsay}
+    cp pokemonsay.sh $out/bin/pokemonsay
+    cp pokemonthink.sh $out/bin/pokemonthink
+    cp pokemons/*.cow $out/share/pokemonsay
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    (set -x
+      test "$($out/bin/pokemonsay --list | wc -l)" -ge 891
+    )
+  '';
+
+  meta = with lib; {
+    description = "Print pokemon in the CLI! An adaptation of the classic cowsay";
+    homepage = "https://github.com/HRKings/pokemonsay-newgenerations";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pbsds ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/polar/Gemfile b/nixpkgs/pkgs/tools/misc/polar/Gemfile
new file mode 100644
index 000000000000..65e27d167030
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/polar/Gemfile
@@ -0,0 +1,7 @@
+source 'https://rubygems.org'
+
+gem 'google-protobuf'
+gem 'libusb'
+gem 'rubyserial'
+gem 'nokogiri'
+
diff --git a/nixpkgs/pkgs/tools/misc/polar/Gemfile.lock b/nixpkgs/pkgs/tools/misc/polar/Gemfile.lock
new file mode 100644
index 000000000000..bd3b0226510a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/polar/Gemfile.lock
@@ -0,0 +1,27 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ffi (1.15.0)
+    google-protobuf (3.15.6)
+    libusb (0.6.4)
+      ffi (~> 1.0)
+      mini_portile2 (~> 2.1)
+    mini_portile2 (2.5.0)
+    nokogiri (1.11.2)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    racc (1.5.2)
+    rubyserial (0.6.0)
+      ffi (~> 1.9, >= 1.9.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  google-protobuf
+  libusb
+  nokogiri
+  rubyserial
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/polar/default.nix b/nixpkgs/pkgs/tools/misc/polar/default.nix
new file mode 100644
index 000000000000..022752bbc75d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/polar/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchFromGitHub, ruby, bundlerEnv }:
+let
+
+  # To create Gemfile.lock and gemset.nix
+  # > nix-shell -p bundix bundler zlib
+  # > bundle install
+  # > bundix
+  gems = bundlerEnv {
+    name = "polar-env";
+    inherit ruby;
+    gemdir = ./.;
+  };
+
+in
+stdenv.mkDerivation rec {
+
+  pname = "polar";
+  # The package has no releases so let's use the latest commit
+  version = "unstable-2021-01-12";
+
+  src = fetchFromGitHub {
+    owner = "cmaion";
+    repo = pname;
+    rev = "be15f5f897f8a919dd639009873147dca2a9cea0";
+    sha256 = "0gqkqfrqnrsy6avg372xwqj22yz8g6r2hnzbw6197b1rf7zr1il7";
+  };
+
+  prePatch = ''
+    for script in polar_*
+    do
+      substituteInPlace $script --replace "#{File.dirname(__FILE__)}/lib" "$out/lib/polar"
+    done
+  '';
+  buildInputs = [ gems ruby ];
+
+  # See: https://nixos.wiki/wiki/Packaging/Ruby
+  #
+  # Put library content under lib/polar and the raw scripts under share/polar.
+  # Then, wrap the scripts so that they use the correct ruby environment and put
+  # these wrapped executables under bin.
+  installPhase = ''
+    install -Dm644 -t $out/etc/udev/rules.d ./pkg/99-polar.rules
+    mkdir -p $out/{bin,lib/polar,share/polar}
+    cp -r lib/* $out/lib/polar/
+    for script in ./polar_*
+    do
+      raw="$out/share/polar/$script"
+      bin="$out/bin/$script"
+      cp "$script" "$raw"
+      cat > $bin <<EOF
+#!/bin/sh -e
+exec ${gems}/bin/bundle exec ${ruby}/bin/ruby "$raw" "\$@"
+EOF
+      chmod +x $bin
+    done
+  '';
+
+  meta = with lib; {
+    description = "Command-line tools to interact with Polar watches";
+    longDescription = ''
+      A set of command line tools written in Ruby to interact with Polar watches
+      and decode raw data files.
+
+      Udev rules can be added as:
+
+        services.udev.packages = [ pkgs.polar ]
+    '';
+    homepage = "https://github.com/cmaion/polar";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ jluttine ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/polar/gemset.nix b/nixpkgs/pkgs/tools/misc/polar/gemset.nix
new file mode 100644
index 000000000000..4e360d9b21cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/polar/gemset.nix
@@ -0,0 +1,75 @@
+{
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nq1fb3vbfylccwba64zblxy96qznxbys5900wd7gm9bpplmf432";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  google-protobuf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ak5yqqhr04b4x0axzvpw1xzwmxmfcw0gf4r1ijixv15kidhsj3z";
+      type = "gem";
+    };
+    version = "3.15.6";
+  };
+  libusb = {
+    dependencies = ["ffi" "mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "005q4f3bi68yapza1vxamgwz2gpix2akci52s4yvr03hsxi137a6";
+      type = "gem";
+    };
+    version = "0.6.4";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hdbpmamx8js53yk3h8cqy12kgv6ca06k0c9n3pxh6b6cjfs19x7";
+      type = "gem";
+    };
+    version = "2.5.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b51df8fwadak075cvi17w0nch6qz1r66564qp29qwfj67j9qp0p";
+      type = "gem";
+    };
+    version = "1.11.2";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  rubyserial = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vj5yan6srbvkf5vfp9d9b9z8wyygd0zxcy54c35yhkjl6kwd22q";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ponysay/default.nix b/nixpkgs/pkgs/tools/misc/ponysay/default.nix
new file mode 100644
index 000000000000..2fb48f05850e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ponysay/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, python3, texinfo, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "ponysay";
+  version = "unstable-2021-03-27";
+
+  src = fetchFromGitHub {
+    owner = "erkin";
+    repo = "ponysay";
+    rev = "8a2c71416e70e4e7b0931917ebfd6479f51ddf9a";
+    sha256 = "sha256-LNc83E+7NFYYILORElNlYC7arQKGUJHv6phu+vM5xpQ=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 texinfo ];
+
+  inherit python3;
+
+  installPhase = ''
+    find -type f -name "*.py" | xargs sed -i "s@/usr/bin/env python3@$python3/bin/python3@g"
+    substituteInPlace setup.py --replace \
+        "fileout.write(('#!/usr/bin/env %s\n' % env).encode('utf-8'))" \
+        "fileout.write(('#!%s/bin/%s\n' % (os.environ['python3'], env)).encode('utf-8'))"
+    python3 setup.py --prefix=$out --freedom=partial install \
+        --with-shared-cache=$out/share/ponysay \
+        --with-bash
+  '';
+
+  meta = with lib; {
+    description = "Cowsay reimplemention for ponies";
+    homepage = "https://github.com/erkin/ponysay";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ bodil ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/poop/default.nix b/nixpkgs/pkgs/tools/misc/poop/default.nix
new file mode 100644
index 000000000000..d3b444d9472f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/poop/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, zig_0_11
+}:
+
+stdenv.mkDerivation rec {
+  pname = "poop";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "andrewrk";
+    repo = "poop";
+    rev = version;
+    hash = "sha256-ekZpulQ1NpEOCG9KU2I4O0NL8mD+CC7bKF0tZbl7vHo=";
+  };
+
+  # fix compilation with zig 0.11
+  patches = [
+    # https://github.com/andrewrk/poop/pull/41
+    (fetchpatch {
+      name = "update-to-zig-0-11-0.patch";
+      url = "https://github.com/andrewrk/poop/commit/15c794d9dea91570485104cda26346f2ae5c9365.patch";
+      hash = "sha256-iv3IuYIDPzs98wiTXcO0igngaRRdQnASvzA4bYET54c=";
+    })
+    # https://github.com/andrewrk/poop/pull/36
+    (fetchpatch {
+      name = "update-zig-to-latest-0-11-0-dev-3883-7166407d8.patch";
+      url = "https://github.com/andrewrk/poop/commit/b1ca37c0cf637e9bbbf24cd243bafaedf02fa8c7.patch";
+      hash = "sha256-/j2zqi0Q2Pl7ZL+4GflwD/MnqcKScT/1SdYJAQ3o4bU=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    zig_0_11.hook
+  ];
+
+  meta = with lib; {
+    description = "Compare the performance of multiple commands with a colorful terminal user interface";
+    homepage = "https://github.com/andrewrk/poop";
+    changelog = "https://github.com/andrewrk/poop/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    platforms = platforms.linux;
+    mainProgram = "poop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/popsicle/Cargo.lock b/nixpkgs/pkgs/tools/misc/popsicle/Cargo.lock
new file mode 100644
index 000000000000..5e91d597cc6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/popsicle/Cargo.lock
@@ -0,0 +1,2782 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "as-result"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3702cac3c1601410cd655ae41650c4c87f7c3183dca6d1cd9acc4220ed56a8b7"
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 2.5.3",
+ "futures-core",
+]
+
+[[package]]
+name = "async-channel"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 4.0.2",
+ "event-listener-strategy",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c"
+dependencies = [
+ "async-lock 3.2.0",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 2.0.1",
+ "futures-lite 2.1.0",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c"
+dependencies = [
+ "async-channel 2.1.1",
+ "async-executor",
+ "async-io 2.2.2",
+ "async-lock 3.2.0",
+ "blocking",
+ "futures-lite 2.1.0",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock 2.8.0",
+ "autocfg",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-lite 1.13.0",
+ "log",
+ "parking",
+ "polling 2.8.0",
+ "rustix 0.37.27",
+ "slab",
+ "socket2",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-io"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7"
+dependencies = [
+ "async-lock 3.2.0",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-io",
+ "futures-lite 2.1.0",
+ "parking",
+ "polling 3.3.1",
+ "rustix 0.38.28",
+ "slab",
+ "tracing",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener 2.5.3",
+]
+
+[[package]]
+name = "async-lock"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c"
+dependencies = [
+ "event-listener 4.0.2",
+ "event-listener-strategy",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel 1.9.0",
+ "async-global-executor",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite 1.13.0",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799"
+
+[[package]]
+name = "atk"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ba16453d10c712284061a05f6510f75abeb92b56ba88dfeb48c74775020cc22"
+dependencies = [
+ "atk-sys",
+ "bitflags 1.3.2",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf0a7ca572fbd5762fd8f8cd65a581e06767bc1234913fe1f43e370cff6e90"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "atomic"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "better-panic"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa9e1d11a268684cbd90ed36370d7577afb6c62d912ddff5c15fc34343e5036"
+dependencies = [
+ "backtrace",
+ "console",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.63.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118"
+dependencies = [
+ "async-channel 2.1.1",
+ "async-lock 3.2.0",
+ "async-task",
+ "fastrand 2.0.1",
+ "futures-io",
+ "futures-lite 2.1.0",
+ "piper",
+ "tracing",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytesize"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc"
+
+[[package]]
+name = "cairo-rs"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab3603c4028a5e368d09b51c8b624b9a46edcd7c3778284077a6125af73c9f0a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "691d0c66b1fb4881be80a760cb8fe76ea97218312f9dfe2c9cc0f496ca279cb1"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "cascade"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d499b43edbf784dd81e16f0395f5b4350a35b477da8a074251087adefc11cb52"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clang-sys"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52bdc885e4cacc7f7c9eedc1ef6da641603180c783c41a15c264944deeaab642"
+dependencies = [
+ "clap_builder",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "dbus"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
+dependencies = [
+ "libc",
+ "libdbus-sys",
+ "winapi",
+]
+
+[[package]]
+name = "dbus-udisks2"
+version = "0.3.0"
+source = "git+https://github.com/pop-os/dbus-udisks2#15c4e70f029c6546e96f8c5b2fb78c9504cf9f28"
+dependencies = [
+ "dbus",
+ "num_enum",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "derive-new"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "event-listener"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "218a870470cce1469024e9fb66b901aa983929d81304a1cdb299f28118e550d5"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener-strategy"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3"
+dependencies = [
+ "event-listener 4.0.2",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "field-offset"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
+dependencies = [
+ "memoffset",
+ "rustc_version",
+]
+
+[[package]]
+name = "find-crate"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "fluent"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61f69378194459db76abd2ce3952b790db103ceb003008d3d50d97c41ff847a7"
+dependencies = [
+ "fluent-bundle",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-bundle"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd"
+dependencies = [
+ "fluent-langneg",
+ "fluent-syntax",
+ "intl-memoizer",
+ "intl_pluralrules",
+ "rustc-hash",
+ "self_cell 0.10.3",
+ "smallvec",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-langneg"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-syntax"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "fomat-macros"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f722aa875298d34a0ebb6004699f6f4ea830d36dec8ac2effdbbc840248a096"
+
+[[package]]
+name = "futures"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-lite"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143"
+dependencies = [
+ "fastrand 2.0.1",
+ "futures-core",
+ "futures-io",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "futures_codec"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce54d63f8b0c75023ed920d46fd71d0cbbb830b0ee012726b5b4f506fb6dea5b"
+dependencies = [
+ "bytes",
+ "futures",
+ "memchr",
+ "pin-project",
+]
+
+[[package]]
+name = "gdk"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be1df5ea52cccd7e3a0897338b5564968274b52f5fd12601e0afa44f454c74d3"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "695d6bc846438c5708b07007537b9274d883373dd30858ca881d7d71b5540717"
+dependencies = [
+ "bitflags 1.3.2",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9285ec3c113c66d7d0ab5676599176f1f42f4944ca1b581852215bf5694870cb"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2152de9d38bc67a17b3fe49dc0823af5bf874df59ea088c5f28f31cf103de703"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "genawaiter"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1236259ce812baf9e1d1e316724e0fec341ce788f038aa543f813dfe78e12d32"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "gio"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6973e92937cf98689b6a054a9e56c657ed4ff76de925e36fc331a15f0c5d30a"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ccf87c30a12c469b6d958950f6a9c09f2be20b7773f7e70d20b867fdf2628c3"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3fad45ba8d4d2cea612b432717e834f48031cd8853c8aaf43b2c79fec8d144b"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "gio-sys",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "memchr",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eca5c79337338391f1ab8058d6698125034ce8ef31b72a442437fa6c8580de26"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d80aa6ea7bba0baac79222204aa786a6293078c210abe69ef1336911d4bdc4f0"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd34c3317740a6358ec04572c1bcfd3ac0b5b6529275fae255b237b314bb8062"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c4222ab92b08d4d0bab90ddb6185b4e575ceeea8b8cdf00b938d7b6661d966"
+dependencies = [
+ "atk",
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk",
+ "gdk-pixbuf",
+ "gio",
+ "glib",
+ "gtk-sys",
+ "gtk3-macros",
+ "libc",
+ "once_cell",
+ "pango",
+ "pkg-config",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d8eb6a4b93e5a7e6980f7348d08c1cd93d31fae07cf97f20678c5ec41de3d7e"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk3-macros"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3efb84d682c9a39c10bd9f24f5a4b9c15cc8c7edc45c19cb2ca2c4fc38b2d95e"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "hex-view"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "494e16c9fe4dd02a88f3fe9ec0f27e38045691ea0ceb11603670f220ff5ca97f"
+
+[[package]]
+name = "i18n-config"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c9ce3c48cbc21fd5b22b9331f32b5b51f6ad85d969b99e793427332e76e7640"
+dependencies = [
+ "log",
+ "serde",
+ "serde_derive",
+ "thiserror",
+ "toml 0.8.8",
+ "unic-langid",
+]
+
+[[package]]
+name = "i18n-embed"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94205d95764f5bb9db9ea98fa77f89653365ca748e27161f5bbea2ffd50e459c"
+dependencies = [
+ "arc-swap",
+ "fluent",
+ "fluent-langneg",
+ "fluent-syntax",
+ "i18n-embed-impl",
+ "intl-memoizer",
+ "lazy_static",
+ "locale_config",
+ "log",
+ "parking_lot",
+ "rust-embed",
+ "thiserror",
+ "unic-langid",
+ "walkdir",
+]
+
+[[package]]
+name = "i18n-embed-fl"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc1f8715195dffc4caddcf1cf3128da15fe5d8a137606ea8856c9300047d5a2"
+dependencies = [
+ "dashmap",
+ "find-crate",
+ "fluent",
+ "fluent-syntax",
+ "i18n-config",
+ "i18n-embed",
+ "lazy_static",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.48",
+ "unic-langid",
+]
+
+[[package]]
+name = "i18n-embed-impl"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81093c4701672f59416582fe3145676126fd23ba5db910acad0793c1108aaa58"
+dependencies = [
+ "find-crate",
+ "i18n-config",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "intl-memoizer"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66f"
+dependencies = [
+ "type-map",
+ "unic-langid",
+]
+
+[[package]]
+name = "intl_pluralrules"
+version = "7.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iso9660"
+version = "0.1.1"
+source = "git+https://github.com/ids1024/iso9660-rs#1fbe255a9dc036686ed3b129ed4c6e230fa134b7"
+dependencies = [
+ "bitflags 2.4.1",
+ "nom",
+ "time",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.151"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
+
+[[package]]
+name = "libdbus-sys"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "libloading"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
+
+[[package]]
+name = "locale_config"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934"
+dependencies = [
+ "lazy_static",
+ "objc",
+ "objc-foundation",
+ "regex",
+ "winapi",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+dependencies = [
+ "value-bag",
+]
+
+[[package]]
+name = "loopdev-erikh"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac18afc683a3326b4ba3a7c783ae6613095c8ce49e0d7bce41a2bd58da319b8d"
+dependencies = [
+ "bindgen",
+ "errno 0.2.8",
+ "libc",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "md-5"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if",
+ "digest",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mnt"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1587ebb20a5b04738f16cffa7e2526f1b8496b84f92920facd518362ff1559eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "pango"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35be456fc620e61f62dff7ff70fbd54dcbaf0a4b920c0f16de1107c47d921d48"
+dependencies = [
+ "bitflags 1.3.2",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3da69f9f3850b0d8990d462f8c709561975e95f689c1cdf0fecdebde78b35195"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "pbr"
+version = "1.1.1"
+source = "git+https://github.com/ids1024/pb?branch=write#225bf70cdaf86193c4a6e65079ebccc1b2196c57"
+dependencies = [
+ "crossbeam-channel",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pin-project"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ef0f924a5ee7ea9cbcea77529dba45f8a9ba9f622419fe3386ca581a3ae9d5a"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "piper"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+dependencies = [
+ "atomic-waker",
+ "fastrand 2.0.1",
+ "futures-io",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a"
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "polling"
+version = "3.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf63fa624ab313c11656b4cda960bfc46c410187ad493c41f6ba2d8c1e991c9e"
+dependencies = [
+ "cfg-if",
+ "concurrent-queue",
+ "pin-project-lite",
+ "rustix 0.38.28",
+ "tracing",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "popsicle"
+version = "1.3.3"
+dependencies = [
+ "anyhow",
+ "as-result",
+ "async-std",
+ "derive-new",
+ "futures",
+ "futures_codec",
+ "libc",
+ "memchr",
+ "mnt",
+ "ron",
+ "serde",
+ "srmw",
+ "thiserror",
+ "usb-disk-probe",
+]
+
+[[package]]
+name = "popsicle_cli"
+version = "1.3.3"
+dependencies = [
+ "anyhow",
+ "async-std",
+ "atty",
+ "better-panic",
+ "cascade",
+ "clap",
+ "derive-new",
+ "fomat-macros",
+ "futures",
+ "i18n-embed",
+ "i18n-embed-fl",
+ "libc",
+ "once_cell",
+ "pbr",
+ "popsicle",
+ "rust-embed",
+]
+
+[[package]]
+name = "popsicle_gtk"
+version = "1.3.3"
+dependencies = [
+ "anyhow",
+ "async-std",
+ "atomic",
+ "bytemuck",
+ "bytesize",
+ "cascade",
+ "crossbeam-channel",
+ "dbus",
+ "dbus-udisks2",
+ "digest",
+ "futures",
+ "gdk",
+ "gdk-pixbuf",
+ "gio",
+ "glib",
+ "gtk",
+ "hex-view",
+ "i18n-embed",
+ "i18n-embed-fl",
+ "iso9660",
+ "libc",
+ "md-5",
+ "once_cell",
+ "pango",
+ "popsicle",
+ "pwd",
+ "rust-embed",
+ "sha-1",
+ "sha2",
+ "sys-mount",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "907a61bd0f64c2f29cd1cf1dc34d05176426a3f504a78010f08416ddb7b13708"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pwd"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72c71c0c79b9701efe4e1e4b563b2016dd4ee789eb99badcb09d61ac4b92e4a2"
+dependencies = [
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "ron"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
+dependencies = [
+ "base64",
+ "bitflags 2.4.1",
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "rust-embed"
+version = "8.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a82c0bbc10308ed323529fd3c1dce8badda635aa319a5ff0e6466f33b8101e3f"
+dependencies = [
+ "rust-embed-impl",
+ "rust-embed-utils",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-impl"
+version = "8.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6227c01b1783cdfee1bcf844eb44594cd16ec71c35305bf1c9fb5aade2735e16"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rust-embed-utils",
+ "syn 2.0.48",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-utils"
+version = "8.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cb0a25bfbb2d4b4402179c2cf030387d9990857ce08a32592c6238db9fa8665"
+dependencies = [
+ "sha2",
+ "walkdir",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno 0.3.8",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno 0.3.8",
+ "libc",
+ "linux-raw-sys 0.4.12",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "self_cell"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d"
+dependencies = [
+ "self_cell 1.0.3",
+]
+
+[[package]]
+name = "self_cell"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba"
+
+[[package]]
+name = "semver"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
+
+[[package]]
+name = "serde"
+version = "1.0.194"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b114498256798c94a0689e1a15fec6005dee8ac1f41de56404b67afc2a4b773"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.194"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3385e45322e8f9931410f01b3031ec534c3947d0e94c18049af4d9f9907d4e0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+ "sha1-asm",
+]
+
+[[package]]
+name = "sha1-asm"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ba6947745e7f86be3b8af00b7355857085dbdf8901393c89514510eb61f4e21"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+
+[[package]]
+name = "smart-default"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eb01866308440fc64d6c44d9e86c5cc17adfe33c4d6eed55da9145044d0ffc1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "srmw"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f554d8c36d9555945af2065c967bce4e307484f436045ab7d6463075cb757ac2"
+dependencies = [
+ "async-std",
+ "futures",
+ "genawaiter",
+ "slab",
+ "thiserror",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sys-mount"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65a290d26aaf4d91fc55cf2afde5079c14e5e4ebffebe8f847234b0dc0df8742"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "loopdev-erikh",
+ "smart-default",
+ "thiserror",
+ "tracing",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml 0.8.8",
+ "version-compare",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae"
+
+[[package]]
+name = "thiserror"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "time"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e"
+dependencies = [
+ "deranged",
+ "powerfmt",
+ "serde",
+ "time-core",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "tinystr"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83c02bf3c538ab32ba913408224323915f4ef9a6d61c0e85d493f355921c0ece"
+dependencies = [
+ "displaydoc",
+]
+
+[[package]]
+name = "tokio"
+version = "1.35.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
+dependencies = [
+ "backtrace",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.21.0",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "type-map"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46"
+dependencies = [
+ "rustc-hash",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unic-langid"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238722e6d794ed130f91f4ea33e01fcff4f188d92337a21297892521c72df516"
+dependencies = [
+ "unic-langid-impl",
+]
+
+[[package]]
+name = "unic-langid-impl"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bd55a2063fdea4ef1f8633243a7b0524cbeef1905ae04c31a1c9b9775c55bc6"
+dependencies = [
+ "serde",
+ "tinystr",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "usb-disk-probe"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf22ef5fa3663ec0ceaa44d9b36c9c1336f5639ed18d72a617cdcbaaad18a276"
+dependencies = [
+ "futures",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "value-bag"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ce5bb364b23e66b528d03168df78b38c0f7b6fe17386928f29d5ab2e7cb2f7"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8434aeec7b290e8da5c3f0d628cb0eac6cabcb31d14bb74f779a08109a5914d6"
+dependencies = [
+ "memchr",
+]
diff --git a/nixpkgs/pkgs/tools/misc/popsicle/default.nix b/nixpkgs/pkgs/tools/misc/popsicle/default.nix
new file mode 100644
index 000000000000..c5a9e5edc738
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/popsicle/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, cargo
+, glib
+, pkg-config
+, rustc
+, wrapGAppsHook
+, gdk-pixbuf
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "popsicle";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "pop-os";
+    repo = "popsicle";
+    rev = version;
+    hash = "sha256-sWQNav7odvX+peDglLHd7Jrmvhm5ddFBLBla0WK7wcE=";
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "dbus-udisks2-0.3.0" = "sha256-VtwUUXVPyqvcOtphBH42CkRmW5jI+br9oDJ9wY40hsE=";
+      "iso9660-0.1.1" = "sha256-CXgvQvNbUWuNDpw92djkK1PZ2GbGj5KSNzkjAsNEDrU=";
+      "pbr-1.1.1" = "sha256-KfzPhDiFj6jm1GASXnSoppkHrzoHst7v7cSNTDC/2FM=";
+    };
+  };
+
+  nativeBuildInputs = [
+    cargo
+    glib
+    pkg-config
+    rustPlatform.bindgenHook
+    rustPlatform.cargoSetupHook
+    rustc
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    gtk3
+  ];
+
+  makeFlags = [
+    "prefix=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "Multiple USB File Flasher";
+    homepage = "https://github.com/pop-os/popsicle";
+    changelog = "https://github.com/pop-os/popsicle/releases/tag/${version}";
+    maintainers = with maintainers; [ _13r0ck figsoda ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/portal/default.nix b/nixpkgs/pkgs/tools/misc/portal/default.nix
new file mode 100644
index 000000000000..3577f0f0b31a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/portal/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "portal";
+  version = "1.2.3";
+
+  src = fetchFromGitHub {
+    owner = "SpatiumPortae";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hGB82a2WirUL1Tph6EuoITOQGYA0Lo4zOeKPC46B5Qk=";
+  };
+
+  vendorHash = "sha256-SbNFi5DE3zhTUw0rsX6n+dpYcdDsaDh+zVUrfxgo/4g=";
+  subPackages = [ "cmd/portal/" ];
+
+  ldflags = [ "-s -X main.version=${version}" ]; # from: https://github.com/SpatiumPortae/portal/blob/master/Makefile#L3
+
+  meta = with lib; {
+    description = "A quick and easy command-line file transfer utility from any computer to another";
+    homepage = "https://github.com/SpatiumPortae/portal";
+    changelog = "https://github.com/SpatiumPortae/portal/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tennox ];
+    mainProgram = "portal";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pouf/default.nix b/nixpkgs/pkgs/tools/misc/pouf/default.nix
new file mode 100644
index 000000000000..e114af2c2c1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pouf/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pouf";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "mothsart";
+    repo = pname;
+    rev = version;
+    hash = "sha256-tW86b9a7u1jyfmHjwjs+5DaUujRZH+VhGQsj0CBj0yk=";
+  };
+
+  cargoHash = "sha256-rVJAaeg27SdM8cTx12rKLIGEYtXUhLHXUYpT78oVNlo=";
+
+  # Cargo.lock is outdated.
+  preConfigure = ''
+    cargo update --offline
+  '';
+
+  postInstall = "make PREFIX=$out copy-data";
+
+  meta = with lib; {
+    description = "A CLI program for produce fake datas";
+    homepage = "https://github.com/mothsart/pouf";
+    changelog = "https://github.com/mothsart/pouf/releases/tag/${version}";
+    maintainers = with maintainers; [ mothsart ];
+    license = with licenses; [ mit ];
+    mainProgram = "pouf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/poweralertd/default.nix b/nixpkgs/pkgs/tools/misc/poweralertd/default.nix
new file mode 100644
index 000000000000..677d85e18f09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/poweralertd/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromSourcehut, meson, ninja, pkg-config, scdoc, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "poweralertd";
+  version = "0.2.0";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromSourcehut {
+    owner = "~kennylevinsen";
+    repo = "poweralertd";
+    rev = version;
+    sha256 = "19rw9q4pcqw56nmzjfglfikzx5wwjl4n08awwdhg0jy1k0bm3dvp";
+  };
+
+  postPatch = ''
+    substituteInPlace meson.build --replace "systemd.get_pkgconfig_variable('systemduserunitdir')" "'${placeholder "out"}/lib/systemd/user'"
+  '';
+
+  buildInputs = [
+    systemd
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  depsBuildBuild = [
+    scdoc
+    pkg-config
+  ];
+
+  meta = with lib; {
+    description = "UPower-powered power alerter";
+    homepage = "https://git.sr.ht/~kennylevinsen/poweralertd";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ thibautmarty ];
+    mainProgram = "poweralertd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/powerline-go/default.nix b/nixpkgs/pkgs/tools/misc/powerline-go/default.nix
new file mode 100644
index 000000000000..2b328e474bb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/powerline-go/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "powerline-go";
+  version = "1.24";
+
+  src = fetchFromGitHub {
+    owner = "justjanne";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-3IeyxAc+FRcVsL9AiVr6Jku5f5y3MTT9SXwVQW9MkNo=";
+  };
+
+  vendorHash = "sha256-W7Lf9s689oJy4U5sQlkLt3INJwtvzU2pot3EFimp7Jw=";
+
+  meta = with lib; {
+    description = "A Powerline like prompt for Bash, ZSH and Fish";
+    homepage = "https://github.com/justjanne/powerline-go";
+    changelog = "https://github.com/justjanne/powerline-go/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ sifmelcara ];
+    mainProgram = "powerline-go";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/powerline-rs/default.nix b/nixpkgs/pkgs/tools/misc/powerline-rs/default.nix
new file mode 100644
index 000000000000..5edde7b3653f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/powerline-rs/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, rustPlatform, fetchFromGitLab, pkg-config, file, perl, curl, cmake, openssl, libssh2, libgit2, libzip, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "powerline-rs";
+  version = "0.2.0";
+
+  src = fetchFromGitLab {
+    owner = "jD91mZM2";
+    repo = "powerline-rs";
+    rev = version;
+
+    sha256 = "0rqlxxl58dpfvm2idhi0vzinraf4bgiapmawiih9wxs599fnhm3y";
+  };
+
+  cargoSha256 = "1i29wps7wz6b0qarqqg8rplq7ak1zz83k6m182sjk17cni74n21l";
+
+  nativeBuildInputs = [ pkg-config file perl cmake curl ];
+  buildInputs = [ openssl libssh2 libgit2 libzip ] ++ lib.optional stdenv.isDarwin Security;
+
+  COMPLETION_OUT = "out";
+  postInstall = ''
+    install -Dm 755 "${COMPLETION_OUT}/${pname}.bash" "$out/share/bash-completion/completions/${pname}"
+    install -Dm 755 "${COMPLETION_OUT}/${pname}.fish" "$out/share/fish/vendor_completions.d/${pname}"
+  '';
+
+  meta = with lib; {
+    description = "powerline-shell rewritten in Rust, inspired by powerline-go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    mainProgram = "powerline-rs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pre-commit-hook-ensure-sops/default.nix b/nixpkgs/pkgs/tools/misc/pre-commit-hook-ensure-sops/default.nix
new file mode 100644
index 000000000000..3b0fcacd4892
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pre-commit-hook-ensure-sops/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, fetchpatch
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pre-commit-hook-ensure-sops";
+  version = "1.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "yuvipanda";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-8sMmHNzmYwOmHYSWoZ4rKb/2lKziFmT6ux+s+chd/Do=";
+  };
+
+  patches = [
+    # Add the command-line entrypoint to pyproject.toml
+    # Can be removed after v1.2 release that includes changes
+    (fetchpatch {
+      url =
+        "https://github.com/yuvipanda/pre-commit-hook-ensure-sops/commit/ed88126afa253df6009af7cbe5aa2369f963be1c.patch";
+      hash = "sha256-mMxAoC3WEciO799Rq8gZ2PJ6FT/GbeSpxlr1EPj7r4s=";
+    })
+  ];
+
+  propagatedBuildInputs = [
+    python3Packages.ruamel-yaml
+  ];
+
+  pythonImportsCheck = [
+    "pre_commit_hook_ensure_sops"
+  ];
+
+  # Test entrypoint
+  checkPhase = ''
+    runHook preCheck
+    $out/bin/pre-commit-hook-ensure-sops --help
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "pre-commit hook to ensure that files that should be encrypted with sops are";
+    homepage = "https://github.com/yuvipanda/pre-commit-hook-ensure-sops";
+    maintainers = with maintainers; [ nialov ];
+    license = licenses.bsd3;
+    mainProgram = "pre-commit-hook-ensure-sops";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pre-commit/default.nix b/nixpkgs/pkgs/tools/misc/pre-commit/default.nix
new file mode 100644
index 000000000000..c52c453dd8be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pre-commit/default.nix
@@ -0,0 +1,191 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+, libiconv
+, cargo
+, coursier
+, dotnet-sdk
+, git
+, glibcLocales
+, go
+, nodejs
+, perl
+, cabal-install
+, testers
+, pre-commit
+}:
+
+with python3Packages;
+buildPythonApplication rec {
+  pname = "pre-commit";
+  version = "3.6.1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.9";
+
+  src = fetchFromGitHub {
+    owner = "pre-commit";
+    repo = "pre-commit";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-UmQ1GehoMDXKEXo8wgPLxTDbtObk7YC2cfk1yNqesJM=";
+  };
+
+  patches = [
+    ./languages-use-the-hardcoded-path-to-python-binaries.patch
+    ./hook-tmpl.patch
+    ./pygrep-pythonpath.patch
+  ];
+
+  propagatedBuildInputs = [
+    cfgv
+    identify
+    nodeenv
+    pyyaml
+    toml
+    virtualenv
+  ];
+
+  nativeCheckInputs = [
+    cargo
+    coursier
+    dotnet-sdk
+    git
+    glibcLocales
+    go
+    libiconv # For rust tests on Darwin
+    nodejs
+    perl
+    pytest-env
+    pytest-forked
+    pytest-xdist
+    pytestCheckHook
+    re-assert
+    cabal-install
+  ];
+
+  # i686-linux: dotnet-sdk not available
+  doCheck = stdenv.buildPlatform.system != "i686-linux";
+
+  postPatch = ''
+    substituteInPlace pre_commit/resources/hook-tmpl \
+      --subst-var-by pre-commit $out
+    substituteInPlace pre_commit/languages/python.py \
+      --subst-var-by virtualenv ${virtualenv}
+    substituteInPlace pre_commit/languages/node.py \
+      --subst-var-by nodeenv ${nodeenv}
+
+    patchShebangs pre_commit/resources/hook-tmpl
+  '';
+
+  pytestFlagsArray = [
+    "--forked"
+  ];
+
+  preCheck = lib.optionalString (!(stdenv.isLinux && stdenv.isAarch64)) ''
+    # Disable outline atomics for rust tests on aarch64-linux.
+    export RUSTFLAGS="-Ctarget-feature=-outline-atomics"
+  '' + ''
+    export GIT_AUTHOR_NAME=test GIT_COMMITTER_NAME=test \
+           GIT_AUTHOR_EMAIL=test@example.com GIT_COMMITTER_EMAIL=test@example.com \
+           VIRTUALENV_NO_DOWNLOAD=1 PRE_COMMIT_NO_CONCURRENCY=1 LANG=en_US.UTF-8
+
+    # Resolve `.NET location: Not found` errors for dotnet tests
+    export DOTNET_ROOT="${dotnet-sdk}"
+
+    export HOME=$(mktemp -d)
+
+    git init -b master
+
+    python -m venv --system-site-packages venv
+    source "$PWD/venv/bin/activate"
+  '';
+
+  postCheck = ''
+    deactivate
+  '';
+
+  # Propagating dependencies leaks them through $PYTHONPATH which causes issues
+  # when used in nix-shell.
+  postFixup = ''
+    rm $out/nix-support/propagated-build-inputs
+  '';
+
+  disabledTests = [
+    # ERROR: The install method you used for conda--probably either `pip install conda`
+    # or `easy_install conda`--is not compatible with using conda as an application.
+    "test_conda_"
+    "test_local_conda_"
+
+    # /build/pytest-of-nixbld/pytest-0/test_install_ruby_with_version0/rbenv-2.7.2/libexec/rbenv-init:
+    # /usr/bin/env: bad interpreter: No such file or directory
+    "test_ruby_"
+
+    # network
+    "test_additional_dependencies_roll_forward"
+    "test_additional_golang_dependencies_installed"
+    "test_additional_node_dependencies_installed"
+    "test_additional_rust_cli_dependencies_installed"
+    "test_additional_rust_lib_dependencies_installed"
+    "test_coursier_hook"
+    "test_coursier_hook_additional_dependencies"
+    "test_dart"
+    "test_dart_additional_deps"
+    "test_dart_additional_deps_versioned"
+    "test_docker_hook"
+    "test_docker_image_hook_via_args"
+    "test_docker_image_hook_via_entrypoint"
+    "test_golang_default_version"
+    "test_golang_hook"
+    "test_golang_hook_still_works_when_gobin_is_set"
+    "test_golang_infer_go_version_default"
+    "test_golang_system"
+    "test_golang_versioned"
+    "test_language_version_with_rustup"
+    "test_installs_rust_missing_rustup"
+    "test_installs_without_links_outside_env"
+    "test_local_golang_additional_deps"
+    "test_lua"
+    "test_lua_additional_dependencies"
+    "test_node_additional_deps"
+    "test_node_hook_versions"
+    "test_perl_additional_dependencies"
+    "test_r_hook"
+    "test_r_inline"
+    "test_r_inline_hook"
+    "test_r_local_with_additional_dependencies_hook"
+    "test_r_with_additional_dependencies_hook"
+    "test_run_a_node_hook_default_version"
+    "test_run_lib_additional_dependencies"
+    "test_run_versioned_node_hook"
+    "test_rust_cli_additional_dependencies"
+    "test_swift_language"
+    "test_run_example_executable"
+    "test_run_dep"
+
+    # i don't know why these fail
+    "test_install_existing_hooks_no_overwrite"
+    "test_installed_from_venv"
+    "test_uninstall_restores_legacy_hooks"
+    "test_dotnet_"
+
+    # Expects `git commit` to fail when `pre-commit` is not in the `$PATH`,
+    # but we use an absolute path so it's not an issue.
+    "test_environment_not_sourced"
+  ];
+
+  pythonImportsCheck = [
+    "pre_commit"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = pre-commit;
+  };
+
+  meta = with lib; {
+    description = "A framework for managing and maintaining multi-language pre-commit hooks";
+    homepage = "https://pre-commit.com/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ borisbabic ];
+    mainProgram = "pre-commit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pre-commit/hook-tmpl.patch b/nixpkgs/pkgs/tools/misc/pre-commit/hook-tmpl.patch
new file mode 100644
index 000000000000..56aa59ef4832
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pre-commit/hook-tmpl.patch
@@ -0,0 +1,17 @@
+diff --git a/pre_commit/resources/hook-tmpl b/pre_commit/resources/hook-tmpl
+index 53d29f9..9b5dc2c 100755
+--- a/pre_commit/resources/hook-tmpl
++++ b/pre_commit/resources/hook-tmpl
+@@ -10,11 +10,4 @@ ARGS=(hook-impl)
+ HERE="$(cd "$(dirname "$0")" && pwd)"
+ ARGS+=(--hook-dir "$HERE" -- "$@")
+ 
+-if [ -x "$INSTALL_PYTHON" ]; then
+-    exec "$INSTALL_PYTHON" -mpre_commit "${ARGS[@]}"
+-elif command -v pre-commit > /dev/null; then
+-    exec pre-commit "${ARGS[@]}"
+-else
+-    echo '`pre-commit` not found.  Did you forget to activate your virtualenv?' 1>&2
+-    exit 1
+-fi
++exec @pre-commit@/bin/pre-commit "${ARGS[@]}"
diff --git a/nixpkgs/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch b/nixpkgs/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch
new file mode 100644
index 000000000000..c3469c95b268
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch
@@ -0,0 +1,26 @@
+diff --git a/pre_commit/languages/node.py b/pre_commit/languages/node.py
+index 66d6136..e3f1bac 100644
+--- a/pre_commit/languages/node.py
++++ b/pre_commit/languages/node.py
+@@ -83,7 +83,7 @@ def install_environment(
+     # https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx?f=255&MSPPError=-2147217396#maxpath
+     if sys.platform == 'win32':  # pragma: no cover
+         envdir = fr'\\?\{os.path.normpath(envdir)}'
+-    cmd = [sys.executable, '-mnodeenv', '--prebuilt', '--clean-src', envdir]
++    cmd = ['@nodeenv@/bin/nodeenv', '--prebuilt', '--clean-src', envdir]
+     if version != C.DEFAULT:
+         cmd.extend(['-n', version])
+     cmd_output_b(*cmd)
+diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py
+index 976674e..485fe2d 100644
+--- a/pre_commit/languages/python.py
++++ b/pre_commit/languages/python.py
+@@ -203,7 +203,7 @@ def install_environment(
+         additional_dependencies: Sequence[str],
+ ) -> None:
+     envdir = lang_base.environment_dir(prefix, ENVIRONMENT_DIR, version)
+-    venv_cmd = [sys.executable, '-mvirtualenv', envdir]
++    venv_cmd = ['@virtualenv@/bin/virtualenv', envdir]
+     python = norm_version(version)
+     if python is not None:
+         venv_cmd.extend(('-p', python))
diff --git a/nixpkgs/pkgs/tools/misc/pre-commit/pygrep-pythonpath.patch b/nixpkgs/pkgs/tools/misc/pre-commit/pygrep-pythonpath.patch
new file mode 100644
index 000000000000..722b436169be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pre-commit/pygrep-pythonpath.patch
@@ -0,0 +1,13 @@
+diff --git a/pre_commit/languages/pygrep.py b/pre_commit/languages/pygrep.py
+index ec55560..44e08a1 100644
+--- a/pre_commit/languages/pygrep.py
++++ b/pre_commit/languages/pygrep.py
+@@ -98,7 +98,7 @@ def run_hook(
+         color: bool,
+ ) -> tuple[int, bytes]:
+     cmd = (sys.executable, '-m', __name__, *args, entry)
+-    return xargs(cmd, file_args, color=color)
++    return xargs(cmd, file_args, color=color, env={ "PYTHONPATH": ':'.join(sys.path) })
+ 
+ 
+ def main(argv: Sequence[str] | None = None) -> int:
diff --git a/nixpkgs/pkgs/tools/misc/precice-config-visualizer/default.nix b/nixpkgs/pkgs/tools/misc/precice-config-visualizer/default.nix
new file mode 100644
index 000000000000..9b6d40a0c733
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/precice-config-visualizer/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "config-visualizer";
+  version = "unstable-2022-02-23";
+
+  src = fetchFromGitHub {
+    owner = "precice";
+    repo = pname;
+    rev = "60f2165f25352c8261f370dc4ceb64a8b422d4ec";
+    hash = "sha256-2dnpkec9hN4oAqwu+1WmDJrfeu+JbfqZ6guv3bC4H1c=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ lxml pydot ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/precice/config-visualizer";
+    description = "Small python tool for visualizing the preCICE xml configuration ";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ Scriptkiddi ];
+    mainProgram = "precice-config-visualizer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/present-cli/default.nix b/nixpkgs/pkgs/tools/misc/present-cli/default.nix
new file mode 100644
index 000000000000..7c1c87647a19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/present-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "present";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "terror";
+    repo = pname;
+    rev = version;
+    sha256 = "+kCHe84ikdCLd7j5YwP2j3xz+XTzzo/kLy+b9YUFDnI=";
+  };
+
+  cargoSha256 = "VKY/FQUrFWtLxKoK6LP6qPMqNN4absZvnAbH9mha1fI=";
+
+  # required for tests
+  postPatch = ''
+    patchShebangs bin/get_version
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A script interpolation engine for markdown documents";
+    homepage = "https://github.com/terror/present/";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ cameronfyfe ];
+    mainProgram = "present";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pricehist/default.nix b/nixpkgs/pkgs/tools/misc/pricehist/default.nix
new file mode 100644
index 000000000000..04333a290731
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pricehist/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitLab
+, requests
+, lxml
+, cssselect
+, curlify
+, poetry-core
+, pytest-mock
+, responses
+, pytestCheckHook
+}:
+
+buildPythonApplication rec {
+  pname = "pricehist";
+  version = "1.4.6";
+  format = "pyproject";
+
+  src = fetchFromGitLab {
+    owner = "chrisberkhout";
+    repo = "pricehist";
+    rev = version;
+    hash = "sha256-RMZKp0JXQLt9tBZPkb3e/au85lV/FkRBCRYzd2lgUPc=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    lxml
+    cssselect
+    curlify
+    poetry-core
+  ];
+
+  nativeCheckInputs = [
+    responses
+    pytest-mock
+    pytestCheckHook
+  ];
+  meta = with lib; {
+    description = "A command-line tool for fetching and formatting historical price data, with support for multiple data sources and output formats";
+    homepage = "https://gitlab.com/chrisberkhout/pricehist";
+    license = licenses.mit;
+    mainProgram = "pricehist";
+    maintainers = with maintainers; [ chrpinedo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pridecat/default.nix b/nixpkgs/pkgs/tools/misc/pridecat/default.nix
new file mode 100644
index 000000000000..4d4ed57fc235
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pridecat/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "pridecat";
+  version = "unstable-2020-06-19";
+
+  src = fetchFromGitHub {
+    owner = "lunasorcery";
+    repo = "pridecat";
+    rev = "92396b11459e7a4b5e8ff511e99d18d7a1589c96";
+    sha256 = "sha256-PyGLbbsh9lFXhzB1Xn8VQ9zilivycGFEIc7i8KXOxj8=";
+  };
+
+  # fixes the install path in the Makefile
+  patches = [ ./fix_install.patch ];
+
+  meta = with lib; {
+    description = "Like cat, but more colorful";
+    homepage = "https://github.com/lunasorcery/pridecat";
+    license = licenses.cc-by-nc-sa-40;
+    maintainers = with maintainers; [ lunarequest ];
+    mainProgram = "pridecat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pridecat/fix_install.patch b/nixpkgs/pkgs/tools/misc/pridecat/fix_install.patch
new file mode 100644
index 000000000000..3d05721ccab8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pridecat/fix_install.patch
@@ -0,0 +1,20 @@
+diff --git a/Makefile b/Makefile
+index 815c27e..1556807 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,4 +1,5 @@
+ CXX ?= clang
++out ?= /usr/local
+ 
+ all: pridecat
+ 
+@@ -6,7 +7,8 @@ pridecat: main.cpp
+ 	$(CXX) main.cpp -o pridecat -std=c++11 -lstdc++ -Wall -Wextra -O3
+ 
+ install: pridecat
+-	cp pridecat /usr/local/bin/pridecat
++	mkdir -p ${out}/bin	
++	cp pridecat ${out}/bin/pridecat
+ 
+ uninstall:
+ 	rm -f /usr/local/bin/pridecat
diff --git a/nixpkgs/pkgs/tools/misc/pridefetch/default.nix b/nixpkgs/pkgs/tools/misc/pridefetch/default.nix
new file mode 100644
index 000000000000..dedd3b336d78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pridefetch/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, python3
+, stdenv
+, strip-nondeterminism
+, zip
+}:
+
+let
+  version = "1.1.0";
+  sha256 = "sha256-563xOz63vto19yuaHtReV1dSw6BgNf+CLtS3lrPnaoc=";
+
+  pname = "pridefetch";
+  src = fetchFromGitHub {
+    owner = "SpyHoodle";
+    repo = pname;
+    rev = "v" + version;
+    inherit sha256;
+  };
+in
+
+stdenv.mkDerivation {
+  inherit pname version src;
+
+  nativeBuildInputs = [
+    strip-nondeterminism
+    zip
+  ];
+
+  buildInputs = [
+    (python3.withPackages (pythonPackages: with pythonPackages; [
+      distro
+    ]))
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    pushd src
+    zip -r ../pridefetch.zip ./*
+    strip-nondeterminism ../pridefetch.zip
+    popd
+    echo '#!/usr/bin/env python' | cat - pridefetch.zip > pridefetch
+    rm pridefetch.zip
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    mv pridefetch $out/bin/pridefetch
+    chmod +x $out/bin/pridefetch
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Print out system statistics with pride flags";
+    longDescription = ''
+      Pridefetch prints your system statistics (similarly to neofetch, screenfetch or pfetch) along with a pride flag.
+      The flag which is printed is configurable, as well as the width of the output.
+    '';
+    homepage = "https://github.com/SpyHoodle/pridefetch";
+    license = licenses.mit;
+    maintainers = [
+      maintainers.minion3665
+    ];
+    platforms = platforms.all;
+    mainProgram = "pridefetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/procyon/default.nix b/nixpkgs/pkgs/tools/misc/procyon/default.nix
new file mode 100644
index 000000000000..7026ce6febfb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/procyon/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, runtimeShell, jre_headless }:
+
+stdenv.mkDerivation rec {
+  pname = "procyon";
+  version = "0.6.0";
+
+  src = fetchurl {
+    url = "https://github.com/mstrobel/procyon/releases/download/v${version}/procyon-decompiler-${version}.jar";
+    sha256 = "sha256-gh2pYBL8aSRPoeopjJBFXuTgIUNLx5bTuVRqskYBt3k=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/procyon
+    cp $src $out/share/procyon/procyon-decompiler.jar
+
+    cat << EOF > $out/bin/procyon
+    #!${runtimeShell}
+    exec ${jre_headless}/bin/java -jar $out/share/procyon/procyon-decompiler.jar "\$@"
+    EOF
+    chmod +x $out/bin/procyon
+  '';
+
+  meta = with lib; {
+    description = "Procyon is a suite of Java metaprogramming tools including a Java decompiler";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    homepage = "https://github.com/mstrobel/procyon/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    mainProgram = "procyon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/profetch/default.nix b/nixpkgs/pkgs/tools/misc/profetch/default.nix
new file mode 100644
index 000000000000..fc5f3cea4a0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/profetch/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchFromGitHub, gprolog }:
+
+stdenv.mkDerivation rec {
+  pname = "profetch";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "RustemB";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-JsjpPUXMN0jytRS4yzSjrseqHiEQ+YinklG+tIIy+Zo=";
+  };
+
+  nativeBuildInputs = [ gprolog ];
+
+  buildPhase = ''
+    runHook preBuild
+    gplc profetch.pl --no-top-level --no-debugger    \
+                     --no-fd-lib    --no-fd-lib-warn \
+                     --min-size -o profetch
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 -t $out/bin profetch
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "System Information Fetcher Written in GNU/Prolog";
+    homepage = "https://github.com/RustemB/profetch";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = [ maintainers.vel ];
+    mainProgram = "profetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix b/nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix
new file mode 100644
index 000000000000..8e5d8325d059
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, parallel, sqlite, bc, file }:
+
+stdenv.mkDerivation rec {
+  version = "2.45";
+  pname = "profile-cleaner";
+
+  src = fetchFromGitHub {
+    owner = "graysky2";
+    repo = "profile-cleaner";
+    rev = "v${version}";
+    sha256 = "sha256-10e1S+li7SXKJX2lETSdx84GavWqQYQqyLoBIVToTBI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    PREFIX=\"\" DESTDIR=$out make install
+    wrapProgram $out/bin/profile-cleaner \
+      --prefix PATH : "${lib.makeBinPath [ parallel sqlite bc file ]}"
+  '';
+
+  meta = {
+    description = "Reduces browser profile sizes by cleaning their sqlite databases";
+    longDescription = ''
+      Use profile-cleaner to reduce the size of browser profiles by organizing
+      their sqlite databases using sqlite3's vacuum and reindex functions. The
+      term "browser" is used loosely since profile-cleaner happily works on
+      some email clients and newsreaders too.
+    '';
+    homepage = "https://github.com/graysky2/profile-cleaner";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.devhell ];
+    mainProgram = "profile-cleaner";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix b/nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix
new file mode 100644
index 000000000000..20b6c1aed366
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, util-linux, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "profile-sync-daemon";
+  version = "6.50";
+
+  src = fetchFromGitHub {
+    owner = "graysky2";
+    repo = "profile-sync-daemon";
+    rev = "v${version}";
+    hash = "sha256-Wb9YLxuu9i9s/Y6trz5NZDU9WRywe3138cp5Q2gWbxM=";
+  };
+
+  installPhase = ''
+    PREFIX=\"\" DESTDIR=$out make install
+    substituteInPlace $out/bin/profile-sync-daemon \
+      --replace "/usr/" "$out/" \
+      --replace "sudo " "/run/wrappers/bin/sudo "
+    # $HOME detection fails (and is unnecessary)
+    sed -i '/^HOME/d' $out/bin/profile-sync-daemon
+    substituteInPlace $out/bin/psd-overlay-helper \
+      --replace "PATH=/usr/bin:/bin" "PATH=${util-linux.bin}/bin:${coreutils}/bin" \
+      --replace "sudo " "/run/wrappers/bin/sudo "
+  '';
+
+  meta = with lib; {
+    description = "Syncs browser profile dirs to RAM";
+    longDescription = ''
+      Profile-sync-daemon (psd) is a tiny pseudo-daemon designed to manage your
+      browser's profile in tmpfs and to periodically sync it back to your
+      physical disc (HDD/SSD). This is accomplished via a symlinking step and
+      an innovative use of rsync to maintain back-up and synchronization
+      between the two. One of the major design goals of psd is a completely
+      transparent user experience.
+    '';
+    homepage = "https://github.com/graysky2/profile-sync-daemon";
+    downloadPage = "https://github.com/graysky2/profile-sync-daemon/releases";
+    license = licenses.mit;
+    maintainers = [ maintainers.prikhi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/progress/default.nix b/nixpkgs/pkgs/tools/misc/progress/default.nix
new file mode 100644
index 000000000000..063d4d122acb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/progress/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, ncurses, which }:
+
+stdenv.mkDerivation rec {
+  pname = "progress";
+  version = "0.17";
+
+  src = fetchFromGitHub {
+    owner = "Xfennec";
+    repo = "progress";
+    rev = "v${version}";
+    sha256 = "sha256-riewkageSZIlwDNMjYep9Pb2q1GJ+WMXazokJGbb4bE=";
+  };
+
+  nativeBuildInputs = [ pkg-config which ];
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Xfennec/progress";
+    description = "Tool that shows the progress of coreutils programs";
+    license = licenses.gpl3;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "progress";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/promql-cli/default.nix b/nixpkgs/pkgs/tools/misc/promql-cli/default.nix
new file mode 100644
index 000000000000..d5188e83f293
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/promql-cli/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "promql-cli";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nalbury";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-EV63fdG+GF+kVLH2TxHPhRcUU5xBvkW5bhHC1lEoj84=";
+  };
+
+  vendorHash = "sha256-jhNll04xGaxS6NJTh4spSW9zPrff8jk5OEQiRevPQwU=";
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    mv -v $out/bin/promql-cli $out/bin/promql
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool to query a Prometheus server with PromQL and visualize the output";
+    homepage = "https://github.com/nalbury/promql-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ arikgrahl ];
+    mainProgram = "promql";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/proximity-sort/default.nix b/nixpkgs/pkgs/tools/misc/proximity-sort/default.nix
new file mode 100644
index 000000000000..3b0f1ca5be3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/proximity-sort/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "proximity-sort";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "jonhoo";
+    repo = "proximity-sort";
+    rev = "v${version}";
+    hash = "sha256-MRLQvspv6kjirljhAkk1KT+hPA4hdjA1b7RL9eEyglQ=";
+  };
+
+  cargoHash = "sha256-0hP6qa8d5CaqtBHCWBJ8UjtVJc6Z0GmL8DvdTWDMM8g=";
+
+  meta = with lib; {
+    description = "Simple command-line utility for sorting inputs by proximity to a path argument";
+    homepage = "https://github.com/jonhoo/proximity-sort";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "proximity-sort";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pspg/default.nix b/nixpkgs/pkgs/tools/misc/pspg/default.nix
new file mode 100644
index 000000000000..2449fd30171d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pspg/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, gnugrep, ncurses, pkg-config, installShellFiles, readline, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pspg";
+  version = "5.8.1";
+
+  src = fetchFromGitHub {
+    owner = "okbob";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-nsGBBGw66LCwOuNdBjlz6u9RT+BX6iZmZeDY9yJoc+c=";
+  };
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+  buildInputs = [ gnugrep ncurses readline postgresql ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  postInstall = ''
+    installManPage pspg.1
+    installShellCompletion --bash --cmd pspg bash-completion.sh
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/okbob/pspg";
+    description = "Postgres Pager";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.jlesquembre ];
+    mainProgram = "pspg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/psql2csv/default.nix b/nixpkgs/pkgs/tools/misc/psql2csv/default.nix
new file mode 100644
index 000000000000..729582f2e404
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/psql2csv/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, coreutils
+, gnused
+, postgresql
+, makeWrapper
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "psql2csv";
+  version = "0.12";
+
+  src = fetchFromGitHub {
+    owner = "fphilipe";
+    repo = "psql2csv";
+    rev = "v${version}";
+    hash = "sha256-XIdZ2+Jlw2JLn4KXD9h3+xXymu4FhibAfp5uGGkVwLQ=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin psql2csv
+    wrapProgram $out/bin/psql2csv \
+      --prefix PATH : ${lib.makeBinPath [ coreutils gnused postgresql ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool to run a PostreSQL query and output the result as CSV";
+    homepage = "https://github.com/fphilipe/psql2csv";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    inherit (postgresql.meta) platforms;
+    mainProgram = "psql2csv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/psrecord/default.nix b/nixpkgs/pkgs/tools/misc/psrecord/default.nix
new file mode 100644
index 000000000000..04b1970fe02b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/psrecord/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildPythonApplication, fetchPypi, psutil, matplotlib, pytest }:
+buildPythonApplication rec {
+  pname = "psrecord";
+  version = "1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5d48410e543b71e5dc4677705acc2a753db65814d3ccbdfbca8d5d3a09b053b1";
+  };
+
+  propagatedBuildInputs = [
+    psutil matplotlib
+  ];
+
+  nativeCheckInputs = [
+    pytest
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+    pytest psrecord
+    runHook postCheck
+  '';
+
+  meta = {
+    description = "Record the CPU and memory activity of a process";
+    homepage = "https://github.com/astrofrog/psrecord";
+    license = lib.licenses.bsd2;
+    maintainers = with lib.maintainers; [ johnazoidberg ];
+    mainProgram = "psrecord";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/psw/default.nix b/nixpkgs/pkgs/tools/misc/psw/default.nix
new file mode 100644
index 000000000000..c3d9b347ce1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/psw/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "psw";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Wulfsta";
+    repo = pname;
+    rev = version;
+    sha256 = "1nwmps3zw99lrz6k1j14w4rcm7yj8vhf4cs9wjfc3c1zfjibz9iz";
+  };
+
+  cargoSha256 = "1y2am1bz68q7d9bn4264al13fv2j6a87bwrd60ycx0qak9fczlmv";
+
+  meta = with lib; {
+    description = "A command line tool to write random bytes to stdout";
+    homepage = "https://github.com/Wulfsta/psw";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ wulfsta ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pubs/default.nix b/nixpkgs/pkgs/tools/misc/pubs/default.nix
new file mode 100644
index 000000000000..b02aeb8aefb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pubs/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pubs";
+  version = "0.9.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "pubs";
+    repo = "pubs";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-U/9MLqfXrzYVGttFSafw4pYDy26WgdsJMCxciZzO1pw=";
+  };
+
+  patches = [
+    # https://github.com/pubs/pubs/pull/278
+    (fetchpatch {
+      url = "https://github.com/pubs/pubs/commit/9623d2c3ca8ff6d2bb7f6c8d8624f9a174d831bc.patch";
+      hash = "sha256-6qoufKPv3k6C9BQTZ2/175Nk7zWPh89vG+zebx6ZFOk=";
+    })
+    # https://github.com/pubs/pubs/pull/279
+    (fetchpatch {
+      url = "https://github.com/pubs/pubs/commit/05e214eb406447196c77c8aa3e4658f70e505f23.patch";
+      hash = "sha256-UBkKiYaG6y6z8lsRpdcsaGsoklv6qj07KWdfkQcVl2g=";
+    })
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    argcomplete
+    beautifulsoup4
+    bibtexparser
+    configobj
+    feedparser
+    python-dateutil
+    pyyaml
+    requests
+    six
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    ddt
+    mock
+    pyfakefs
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # Disabling git tests because they expect git to be preconfigured
+    # with the user's details. See
+    # https://github.com/NixOS/nixpkgs/issues/94663
+    "tests/test_git.py"
+  ];
+
+  disabledTests = [
+    # https://github.com/pubs/pubs/issues/276
+    "test_readme"
+    # AssertionError: Lists differ: ['Ini[112 chars]d to...
+    "test_add_non_standard"
+  ];
+
+  pythonImportsCheck = [
+    "pubs"
+  ];
+
+  meta = with lib; {
+    description = "Command-line bibliography manager";
+    homepage = "https://github.com/pubs/pubs";
+    changelog = "https://github.com/pubs/pubs/blob/v${version}/changelog.md";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ gebner dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pv/default.nix b/nixpkgs/pkgs/tools/misc/pv/default.nix
new file mode 100644
index 000000000000..2c8f0d5521ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pv/default.nix
@@ -0,0 +1,23 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pv";
+  version = "1.8.5";
+
+  src = fetchurl {
+    url = "https://www.ivarch.com/programs/sources/pv-${version}.tar.gz";
+    sha256 = "sha256-0ilI0GvgalvjczYxjeVAoiFb4QqwFj+M0jogFJZHt4A=";
+  };
+
+  meta = {
+    homepage = "https://www.ivarch.com/programs/pv.shtml";
+    description = "Tool for monitoring the progress of data through a pipeline";
+    license = lib.licenses.artistic2;
+    maintainers = with lib.maintainers; [ matthiasbeyer ];
+    platforms = lib.platforms.all;
+    mainProgram = "pv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pws/Gemfile b/nixpkgs/pkgs/tools/misc/pws/Gemfile
new file mode 100644
index 000000000000..43b6b931860c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'pws'
diff --git a/nixpkgs/pkgs/tools/misc/pws/Gemfile.lock b/nixpkgs/pkgs/tools/misc/pws/Gemfile.lock
new file mode 100644
index 000000000000..cad7909e406d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    clipboard (1.0.6)
+    paint (1.0.1)
+    pbkdf2-ruby (0.2.1)
+    pws (1.0.6)
+      clipboard (~> 1.0.5)
+      paint (>= 0.8.7)
+      pbkdf2-ruby
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pws
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/pws/default.nix b/nixpkgs/pkgs/tools/misc/pws/default.nix
new file mode 100644
index 000000000000..97f458568677
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, bundlerEnv, ruby, bundlerUpdateScript, xsel, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "pws";
+  version = (import ./gemset.nix).pws.version;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontUnpack = true;
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "${pname}-gems";
+
+      inherit ruby;
+
+      gemdir = ./.;
+    };
+  in ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/pws $out/bin/pws \
+      --set PATH '"${xsel}/bin/:$PATH"'
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "pws";
+
+  meta = with lib; {
+    description = "Command-line password safe";
+    homepage    = "https://github.com/janlelis/pws";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ swistak35 nicknovitski ];
+    platforms   = platforms.unix;
+    mainProgram = "pws";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pws/gemset.nix b/nixpkgs/pkgs/tools/misc/pws/gemset.nix
new file mode 100644
index 000000000000..e0b263e86a58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/gemset.nix
@@ -0,0 +1,34 @@
+{
+  clipboard = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11r5xi1fhll4qxna2sg83vmnphjzqc4pzwdnmc5qwvdps5jbz7cq";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+  paint = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z1fqyyc2jiv6yabv467h652cxr2lmxl5gqqg7p14y28kdqf0nhj";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  pbkdf2-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "014vb5k8klvh192idqrda2571dxsp7ai2v72hj265zd2awy0zyg1";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  pws = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1brn123mmrw09ji60sa13ylgfjjp7aicz07hm9h0dc3162zlw5wn";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix b/nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix
new file mode 100644
index 000000000000..5a63752b8238
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix
@@ -0,0 +1,42 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "q-text-as-data";
+  version = "2.0.19";
+
+  src = fetchFromGitHub {
+    owner = "harelba";
+    repo = "q";
+    rev = version;
+    sha256 = "18cwyfjgxxavclyd08bmb943c8bvzp1gnqp4klkq5xlgqwivr4sv";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    setuptools
+    six
+  ];
+
+  doCheck = false;
+
+  patchPhase = ''
+    # remove broken symlink
+    rm bin/qtextasdata.py
+
+    # not considered good practice pinning in install_requires
+    substituteInPlace setup.py --replace 'six==' 'six>='
+  '';
+
+  meta = with lib; {
+    description = "Run SQL directly on CSV or TSV files";
+    longDescription = ''
+      q is a command line tool that allows direct execution of SQL-like queries on CSVs/TSVs (and any other tabular text files).
+
+      q treats ordinary files as database tables, and supports all SQL constructs, such as WHERE, GROUP BY, JOINs etc. It supports automatic column name and column type detection, and provides full support for multiple encodings.
+    '';
+    homepage = "http://harelba.github.io/q/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.taneb ];
+    platforms = platforms.all;
+    mainProgram = "q";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qdl/default.nix b/nixpkgs/pkgs/tools/misc/qdl/default.nix
new file mode 100644
index 000000000000..02435272535f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qdl/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, libxml2
+, systemd
+}:
+
+stdenv.mkDerivation {
+  pname   = "qdl";
+  version = "unstable-2023-04-11";
+
+  src = fetchFromGitHub {
+    owner = "linux-msm";
+    repo = "qdl";
+    rev = "3b22df2bc7de02d867334af3a7aa8606db4f8cdd";
+    sha256 = "sha256-2sL9HX73APTn9nQOx1Efdkz9F4bNASPMVFMx6YOqxyc=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ systemd libxml2 ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 ./qdl -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/linux-msm/qdl";
+    description = "Tool for flashing images to Qualcomm devices";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ muscaln ];
+    platforms = platforms.linux;
+    mainProgram = "qdl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qflipper/default.nix b/nixpkgs/pkgs/tools/misc/qflipper/default.nix
new file mode 100644
index 000000000000..5c139d017c86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qflipper/default.nix
@@ -0,0 +1,105 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, zlib
+, libusb1
+, libGL
+, qmake
+, wrapGAppsHook
+, wrapQtAppsHook
+, mkDerivation
+
+, qttools
+, qtbase
+, qt3d
+, qtsvg
+, qtserialport
+, qtdeclarative
+, qtquickcontrols
+, qtquickcontrols2
+, qtgraphicaleffects
+, qtwayland
+, nix-update-script
+}:
+let
+  pname = "qFlipper";
+  version = "1.3.3";
+  sha256 = "sha256-/Xzy+OA0Nl/UlSkOOZW2YsOHdJvS/7X3Z3ITkPByAOc=";
+  timestamp = "99999999999";
+  commit = "nix-${version}";
+
+in
+mkDerivation {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "flipperdevices";
+    repo = "qFlipper";
+    rev = version;
+    fetchSubmodules = true;
+    inherit sha256;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    qmake
+    qttools
+    wrapGAppsHook
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    zlib
+    libusb1
+    libGL
+
+    qtbase
+    qt3d
+    qtsvg
+    qtserialport
+    qtdeclarative
+    qtquickcontrols
+    qtquickcontrols2
+    qtgraphicaleffects
+  ] ++ lib.optionals (stdenv.isLinux) [
+    qtwayland
+  ];
+
+  qmakeFlags = [
+    "DEFINES+=DISABLE_APPLICATION_UPDATES"
+    "CONFIG+=qtquickcompiler"
+  ];
+
+  dontWrapGApps = true;
+
+  postPatch = ''
+    substituteInPlace qflipper_common.pri \
+        --replace 'GIT_VERSION = unknown' 'GIT_VERSION = "${version}"' \
+        --replace 'GIT_TIMESTAMP = 0' 'GIT_TIMESTAMP = ${timestamp}' \
+        --replace 'GIT_COMMIT = unknown' 'GIT_COMMIT = "${commit}"'
+    cat qflipper_common.pri
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ${lib.optionalString stdenv.isDarwin ''
+    cp qFlipper.app/Contents/MacOS/qFlipper $out/bin
+    ''}
+    cp qFlipper-cli $out/bin
+
+    mkdir -p $out/etc/udev/rules.d
+    cp installer-assets/udev/42-flipperzero.rules $out/etc/udev/rules.d/
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Cross-platform desktop tool to manage your flipper device";
+    homepage = "https://flipperzero.one/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ cab404 ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" ]; # qtbase doesn't build yet on aarch64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qjoypad/default.nix b/nixpkgs/pkgs/tools/misc/qjoypad/default.nix
new file mode 100644
index 000000000000..a602e7b7fad6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qjoypad/default.nix
@@ -0,0 +1,40 @@
+{ lib, mkDerivation, fetchFromGitHub, pkg-config, cmake, libX11, libXtst, qtbase, qttools, qtx11extras }:
+mkDerivation rec {
+  pname = "qjoypad";
+  version = "4.3.1";
+
+  src = fetchFromGitHub {
+    owner = "panzi";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256:1w26ddxb1xirb7qjf7kv9llxzjhbhcb7warnxbx41qhbni46g26y";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake qttools ];
+  buildInputs = [ libX11 libXtst qtbase qtx11extras ];
+
+  meta = with lib; {
+    description = "A program that lets you use gaming devices anywhere";
+    longDescription = ''
+      A simple Linux/QT program that lets you use your gaming devices
+      where you want them: in your games! QJoyPad takes input from a
+      gamepad or joystick and translates it into key strokes or mouse
+      actions, letting you control any XWindows program with your game
+      controller. This lets you play all those games that for some
+      reason don't have joystick support with your joystick. QJoyPad
+      also gives you the advantage of multiple saved layouts so you
+      can have a separate setting for every game, or for every class
+      of game! That way you can play your games the way you want, not
+      the way the programmers decided, and you can have the same
+      button be "fire" in every one of your space fighters. QJoyPad
+      gives you the freedom and flexibility to really take advantage
+      of gaming devices in Linux, and makes the Linux gaming
+      experience just a little bit nicer.
+    '';
+    homepage = "https://github.com/panzi/qjoypad/";
+    license = lib.licenses.gpl2;
+    maintainers = with maintainers; [ astsmtl ];
+    platforms = with platforms; linux;
+    mainProgram = "qjoypad";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qmake2cmake/default.nix b/nixpkgs/pkgs/tools/misc/qmake2cmake/default.nix
new file mode 100644
index 000000000000..b3c3468973b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qmake2cmake/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildPythonPackage
+, fetchgit
+, packaging
+, platformdirs
+, portalocker
+, pyparsing
+, sympy
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "qmake2cmake";
+  version = "1.0.6";
+
+  src = fetchgit {
+    url = "https://codereview.qt-project.org/qt/qmake2cmake";
+    rev = "v${version}";
+    hash = "sha256-M5XVQ8MXo2Yxg5eZCho2YAGFtB0h++mEAg8NcQVuP/w=";
+  };
+
+  patches = [
+    ./fix-locations.patch
+  ];
+
+  propagatedBuildInputs = [
+    packaging
+    platformdirs
+    portalocker
+    pyparsing
+    sympy
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "Tool to convert qmake .pro files to CMakeLists.txt";
+    homepage = "https://wiki.qt.io/Qmake2cmake";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wegank ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qmake2cmake/fix-locations.patch b/nixpkgs/pkgs/tools/misc/qmake2cmake/fix-locations.patch
new file mode 100644
index 000000000000..33b22382e214
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qmake2cmake/fix-locations.patch
@@ -0,0 +1,22 @@
+diff --git a/src/qmake2cmake/run_pro2cmake.py b/src/qmake2cmake/run_pro2cmake.py
+index fd3e11a..bdbadb0 100755
+--- a/src/qmake2cmake/run_pro2cmake.py
++++ b/src/qmake2cmake/run_pro2cmake.py
+@@ -194,7 +194,6 @@ def run(all_files: typing.List[str], pro2cmake: str, args: argparse.Namespace) -
+     ) -> typing.Tuple[int, str, str]:
+         filename, index, total = data
+         pro2cmake_args = []
+-        pro2cmake_args.append(sys.executable)
+         pro2cmake_args.append(pro2cmake)
+         if args.min_qt_version:
+             pro2cmake_args += ["--min-qt-version", args.min_qt_version]
+@@ -257,8 +256,7 @@ def run(all_files: typing.List[str], pro2cmake: str, args: argparse.Namespace) -
+ def main() -> None:
+     args = parse_command_line()
+ 
+-    script_path = os.path.dirname(os.path.abspath(__file__))
+-    pro2cmake = os.path.join(script_path, "pro2cmake.py")
++    pro2cmake = os.path.join(os.path.dirname(sys.argv[0]), "qmake2cmake")
+     base_path = args.path
+ 
+     all_files = find_all_pro_files(base_path, args)
diff --git a/nixpkgs/pkgs/tools/misc/qmk/default.nix b/nixpkgs/pkgs/tools/misc/qmk/default.nix
new file mode 100644
index 000000000000..42361d5e63cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qmk/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, python3
+, fetchPypi
+, pkgsCross
+, avrdude
+, dfu-programmer
+, dfu-util
+, wb32-dfu-updater
+, gcc-arm-embedded
+, gnumake
+, teensy-loader-cli
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "qmk";
+  version = "1.1.2";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-+HH4jxoMoxujGgCdcWQX5GvFOKT4347eaoAckHbCKZg=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dotty-dict
+    hid
+    hjson
+    jsonschema
+    milc
+    pygments
+    pyserial
+    pyusb
+    pillow
+  ] ++ [ # Binaries need to be in the path so this is in propagatedBuildInputs
+    avrdude
+    dfu-programmer
+    dfu-util
+    wb32-dfu-updater
+    teensy-loader-cli
+    gcc-arm-embedded
+    gnumake
+    pkgsCross.avr.buildPackages.binutils
+    pkgsCross.avr.buildPackages.binutils.bintools
+    pkgsCross.avr.buildPackages.gcc8
+    pkgsCross.avr.libcCross
+  ];
+
+  # no tests implemented
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/qmk/qmk_cli";
+    description = "A program to help users work with QMK Firmware";
+    longDescription = ''
+      qmk_cli is a companion tool to QMK firmware. With it, you can:
+
+      - Interact with your qmk_firmware tree from any location
+      - Use qmk clone to pull down anyone's qmk_firmware fork
+      - Setup and work with your build environment:
+        - qmk setup
+        - qmk doctor
+        - qmk compile
+        - qmk console
+        - qmk flash
+        - qmk lint
+      - ... and many more!
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ bhipple babariviere ekleog ];
+    mainProgram = "qmk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qmk_hid/default.nix b/nixpkgs/pkgs/tools/misc/qmk_hid/default.nix
new file mode 100644
index 000000000000..f5d1b61868a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qmk_hid/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, systemd
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "qmk_hid";
+  version = "0.1.11";
+
+  src = fetchFromGitHub {
+    owner = "FrameworkComputer";
+    repo = "qmk_hid";
+    rev = "v${version}";
+    hash = "sha256-k5cZcrjen7nNJM9mKQEwNTVfBPawXwbwNlCyTARdH/g=";
+  };
+
+  cargoHash = "sha256-GrerrNDoSFtOEAf0vB9MlkBl+yLnzd/szrpFsAmkB6s=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    systemd
+  ];
+
+  checkFlags = [
+    # test doesn't compile
+    "--skip=src/lib.rs"
+  ];
+
+  meta = with lib; {
+    description = "Commandline tool for interactng with QMK devices over HID";
+    homepage = "https://github.com/FrameworkComputer/qmk_hid";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ janik ];
+    mainProgram = "qmk_hid";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qrscan/default.nix b/nixpkgs/pkgs/tools/misc/qrscan/default.nix
new file mode 100644
index 000000000000..6ac80bb7f746
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qrscan/default.nix
@@ -0,0 +1,38 @@
+{ clang_15, lib, rustPlatform, fetchFromGitHub, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "qrscan";
+  version = "0.1.9";
+
+  src = fetchFromGitHub {
+    owner = "sayanarijit";
+    repo = "qrscan";
+    rev = "v${version}";
+    hash = "sha256-nAUZUE7NppsCAV8UyR8+OkikT4nJtnamsSVeyNz21EQ=";
+  };
+
+  nativeBuildInputs = [
+    (rustPlatform.bindgenHook.overrideAttrs {
+      libclang = clang_15.cc.lib;
+    })
+  ];
+
+  cargoHash = "sha256-P40IwFRtEQp6BGRgmt1x3UXtAKtWaMjR3kqhYq+p7wQ=";
+
+  checkFlags = [
+    # requires filesystem write access
+    "--skip=tests::test_export_files"
+    "--skip=tests::test_scan_from_stdin"
+    "--skip=tests::test_scan_jpeg_file"
+    "--skip=tests::test_scan_no_content"
+    "--skip=tests::test_scan_png_file"
+  ];
+
+  meta = with lib; {
+    description = "Scan a QR code in the terminal using the system camera or a given image";
+    homepage = "https://github.com/sayanarijit/qrscan";
+    license = licenses.mit;
+    broken = stdenv.isDarwin;
+    maintainers = [ maintainers.sayanarijit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qt5ct/default.nix b/nixpkgs/pkgs/tools/misc/qt5ct/default.nix
new file mode 100644
index 000000000000..38f9f10d9838
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qt5ct/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchurl, qtbase, qtsvg, qttools, qmake }:
+
+let inherit (lib) getDev; in
+
+mkDerivation rec {
+  pname = "qt5ct";
+  version = "1.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-I7dAVEFepBJDKHcu+ab5UIOpuGVp4SgDSj/3XfrYCOk=";
+  };
+
+  nativeBuildInputs = [ qmake qttools ];
+
+  buildInputs = [ qtbase qtsvg ];
+
+  qmakeFlags = [
+    "LRELEASE_EXECUTABLE=${getDev qttools}/bin/lrelease"
+    "PLUGINDIR=${placeholder "out"}/${qtbase.qtPluginPrefix}"
+    "LIBDIR=${placeholder "out"}/lib"
+  ];
+
+  meta = with lib; {
+    description = "Qt5 Configuration Tool";
+    homepage = "https://sourceforge.net/projects/qt5ct/";
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ralith ];
+    mainProgram = "qt5ct";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qt6ct/default.nix b/nixpkgs/pkgs/tools/misc/qt6ct/default.nix
new file mode 100644
index 000000000000..248bc3a48e4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qt6ct/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, qtbase
+, qtsvg
+, qtwayland
+, qmake
+, qttools
+, wrapQtAppsHook
+}:
+let
+  inherit (lib) getDev;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "qt6ct";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "trialuser02";
+    repo = "qt6ct";
+    rev = finalAttrs.version;
+    hash = "sha256-MmN/qPBlsF2mBST+3eYeXaq+7B3b+nTN2hi6CmxrILc=";
+  };
+
+  nativeBuildInputs = [ qmake qttools wrapQtAppsHook ];
+
+  buildInputs = [ qtbase qtsvg qtwayland ];
+
+  qmakeFlags = [
+    "LRELEASE_EXECUTABLE=${getDev qttools}/bin/lrelease"
+    "PLUGINDIR=${placeholder "out"}/${qtbase.qtPluginPrefix}"
+    "LIBDIR=${placeholder "out"}/lib"
+  ];
+
+  meta = with lib; {
+    description = "Qt6 Configuration Tool";
+    homepage = "https://github.com/trialuser02/qt6ct";
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ Flakebi Scrumplex ];
+    mainProgram = "qt6ct";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/qt6gtk2/default.nix b/nixpkgs/pkgs/tools/misc/qt6gtk2/default.nix
new file mode 100644
index 000000000000..69044a2bb312
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qt6gtk2/default.nix
@@ -0,0 +1,36 @@
+{ fetchFromGitHub, lib, stdenv, gtk2, pkg-config, qmake, qtbase }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "qt6gtk2";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "trialuser02";
+    repo = finalAttrs.pname;
+    rev = finalAttrs.version;
+    hash = "sha256-g5ZCwTnNEJJ57zEwNqMxrl0EWYJMt3PquZ2IsmxQYqk=";
+  };
+
+  buildInputs = [ gtk2 qtbase ];
+  nativeBuildInputs = [ pkg-config qmake ];
+
+  dontWrapQtApps = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/lib/qt-6/plugins/{platformthemes,styles}
+    cp -pr src/qt6gtk2-qtplugin/libqt6gtk2.so $out/lib/qt-6/plugins/platformthemes
+    cp -pr src/qt6gtk2-style/libqt6gtk2-style.so $out/lib/qt-6/plugins/styles
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "GTK+2.0 integration plugins for Qt6";
+    license = lib.licenses.gpl2Plus;
+    homepage = "https://github.com/trialuser02/qt6gtk2";
+    maintainers = [ lib.maintainers.misterio77 ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/quich/default.nix b/nixpkgs/pkgs/tools/misc/quich/default.nix
new file mode 100644
index 000000000000..effd7993b803
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/quich/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "quich";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = "Usbac";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-4gsSjLZ7Z4ErNqe86Fy5IrzLMfvDyY18sE0yBnj9bvM=";
+  };
+
+  doCheck = true;
+
+  makeFlags = [ "DESTDIR=" "PREFIX=$(out)" "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = with lib; {
+    description = "The advanced terminal calculator";
+    longDescription = ''
+      Quich is a compact, fast, powerful and useful calculator for your terminal
+      with numerous features, supporting Windows and Linux Systems,
+      written in ANSI C.
+    '';
+    homepage = "https://github.com/Usbac/quich";
+    license = licenses.mit;
+    maintainers = [ maintainers.xdhampus ];
+    platforms = platforms.all;
+    mainProgram = "quich";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/r3ctl/default.nix b/nixpkgs/pkgs/tools/misc/r3ctl/default.nix
new file mode 100644
index 000000000000..f76f704fc2a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/r3ctl/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, qt5
+, qtbase
+, qttools
+, qtwebsockets
+, qtmultimedia
+, fetchFromGitHub
+}:
+
+qt5.mkDerivation {
+  pname = "r3ctl";
+  version = "a82cb5b3123224e706835407f21acea9dc7ab0f0";
+
+  src = fetchFromGitHub {
+    owner = "0xfeedc0de64";
+    repo = "r3ctl";
+    rev = "a82cb5b3123224e706835407f21acea9dc7ab0f0";
+    sha256 = "5/L8jvEDJGJzsuAxPrctSDS3d8lbFX/+f52OVyGQ/RY=";
+  };
+
+  buildPhase = ''
+    qmake .
+    make
+  '';
+
+  postInstall = ''
+    mv bin $out
+  '';
+
+  nativeBuildInputs = [
+    qt5.wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qttools
+    qtmultimedia
+    qtwebsockets
+  ];
+
+  meta = with lib; {
+    description = "A cmdline tool to control the r3 hackerspace lights";
+    homepage = "https://github.com/0xfeedc0de64/r3ctl";
+    maintainers = with maintainers; [ mkg20001 ];
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/radeon-profile/default.nix b/nixpkgs/pkgs/tools/misc/radeon-profile/default.nix
new file mode 100644
index 000000000000..8c42cccfcdf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/radeon-profile/default.nix
@@ -0,0 +1,33 @@
+{ lib, mkDerivation, fetchFromGitHub
+, qtbase, qtcharts, qmake, libXrandr, libdrm
+}:
+
+mkDerivation rec {
+
+  pname = "radeon-profile";
+  version = "20200824";
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [ qtbase qtcharts libXrandr libdrm ];
+
+  src = (fetchFromGitHub {
+    owner  = "marazmista";
+    repo   = "radeon-profile";
+    rev    = version;
+    sha256 = "0z6a9w79s5wiy8cvwcdp5wmgf6702d0wzw95f6176yhp4cwy4cq2";
+  }) + "/radeon-profile";
+
+  preConfigure = ''
+    substituteInPlace radeon-profile.pro \
+      --replace "/usr/" "$out/"
+  '';
+
+  meta = with lib; {
+    description = "Application to read current clocks of AMD Radeon cards";
+    homepage    = "https://github.com/marazmista/radeon-profile";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.linux;
+    mainProgram = "radeon-profile";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/ramfetch/default.nix b/nixpkgs/pkgs/tools/misc/ramfetch/default.nix
new file mode 100644
index 000000000000..136c33598277
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ramfetch/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchgit
+}:
+
+stdenv.mkDerivation rec {
+  name = "ramfetch";
+  version = "1.1.0a";
+
+  src = fetchgit {
+    url = "https://codeberg.org/jahway603/ramfetch.git";
+    rev = version;
+    hash = "sha256-sUreZ6zm+a1N77OZszjnpS4mmo5wL1dhNGVldJCGoag=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D ramfetch $out/bin/ramfetch
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A tool which displays memory information";
+    homepage = "https://codeberg.org/jahway603/ramfetch";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.markbeep ];
+    mainProgram = "ramfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rargs/default.nix b/nixpkgs/pkgs/tools/misc/rargs/default.nix
new file mode 100644
index 000000000000..54c7e393d2d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rargs/default.nix
@@ -0,0 +1,25 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname   = "rargs";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner  = "lotabout";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "188gj05rbivci1z4z29vwdwxlj2w01v5i4avwrxjnj1dd6mmlbxd";
+  };
+
+  cargoSha256 = "18yd4dpzjyw6w1ms74pzxqyn5fkh8q4rsg6rqsp6bsz7300fxxvh";
+
+  doCheck=false;  # `rargs`'s test depends on the deprecated `assert_cli` crate, which in turn is not in Nixpkgs
+
+  meta = with lib; {
+    description = "xargs + awk with pattern matching support";
+    homepage    = "https://github.com/lolabout/rargs";
+    license     = with licenses; [ mit ];
+    maintainers = with maintainers; [ pblkt ];
+    mainProgram = "rargs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rates/default.nix b/nixpkgs/pkgs/tools/misc/rates/default.nix
new file mode 100644
index 000000000000..3989074d2461
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rates/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rates";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "lunush";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-zw2YLTrvqbGKR8Dg5W+kJTDKIfro+MNyjHXfZMXZhaw=";
+  };
+
+  cargoSha256 = "sha256-5EcTeMfa1GNp1q60qSgEi/I3298hXUD1Vc1K55XGW4I=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "CLI tool that brings currency exchange rates right into your terminal";
+    homepage = "https://github.com/lunush/rates";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "rates";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rauc/default.nix b/nixpkgs/pkgs/tools/misc/rauc/default.nix
new file mode 100644
index 000000000000..d6e8486681ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rauc/default.nix
@@ -0,0 +1,55 @@
+{ curl
+, dbus
+, fetchFromGitHub
+, glib
+, json-glib
+, lib
+, nix-update-script
+, openssl
+, pkg-config
+, stdenv
+, meson
+, ninja
+, util-linux
+, libnl
+, systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rauc";
+  version = "1.11.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xvuBMOAXnuRYCkripjwfv64BCTLySNxebyHF3sB8EQw=";
+  };
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkg-config meson ninja glib ];
+
+  buildInputs = [ curl dbus glib json-glib openssl util-linux libnl systemd ];
+
+  mesonFlags = [
+    "--buildtype=release"
+    (lib.mesonOption "systemdunitdir" "${placeholder "out"}/lib/systemd/system")
+    (lib.mesonOption "dbusinterfacesdir" "${placeholder "out"}/share/dbus-1/interfaces")
+    (lib.mesonOption "dbuspolicydir" "${placeholder "out"}/share/dbus-1/system.d")
+    (lib.mesonOption "dbussystemservicedir" "${placeholder "out"}/share/dbus-1/system-services")
+  ];
+
+  meta = with lib; {
+    description = "Safe and secure software updates for embedded Linux";
+    homepage = "https://rauc.io";
+    license = licenses.lgpl21Only;
+    maintainers = with maintainers; [ emantor ];
+    platforms = with platforms; linux;
+    mainProgram = "rauc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rcm/default.nix b/nixpkgs/pkgs/tools/misc/rcm/default.nix
new file mode 100644
index 000000000000..3aa8ba412e17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rcm/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rcm";
+  version = "1.3.6";
+
+  src = fetchurl {
+    url = "https://thoughtbot.github.io/rcm/dist/rcm-${version}.tar.gz";
+    sha256 = "sha256-9P37xFHR+1dkUxKQogKgqHH2uBujwBprdsSUNchQgKU=";
+  };
+
+  patches = [ ./fix-rcmlib-path.patch ];
+
+  postPatch = ''
+    for f in bin/*.in; do
+      substituteInPlace $f --subst-var-by rcm $out
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thoughtbot/rcm";
+    description = "Management Suite for Dotfiles";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ malyn AndersonTorres ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch b/nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch
new file mode 100644
index 000000000000..e7d600d2a1f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch
@@ -0,0 +1,48 @@
+diff --git a/bin/lsrc.in b/bin/lsrc.in
+index fcf5fbe..119d659 100755
+--- a/bin/lsrc.in
++++ b/bin/lsrc.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ pushdir() {
+diff --git a/bin/mkrc.in b/bin/mkrc.in
+index da22a63..a6bb0ad 100755
+--- a/bin/mkrc.in
++++ b/bin/mkrc.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ destination() {
+diff --git a/bin/rcdn.in b/bin/rcdn.in
+index ae7aad8..c210599 100755
+--- a/bin/rcdn.in
++++ b/bin/rcdn.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ remove_link() {
+diff --git a/bin/rcup.in b/bin/rcup.in
+index bdae664..2076f53 100755
+--- a/bin/rcup.in
++++ b/bin/rcup.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ print_ln_v() {
diff --git a/nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix b/nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix
new file mode 100644
index 000000000000..db05aeda96a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, makeWrapper, python3, exif, imagemagick }:
+
+stdenv.mkDerivation rec {
+  pname = "recoverjpeg";
+  version = "2.6.3";
+
+  src = fetchurl {
+    url = "https://www.rfc1149.net/download/recoverjpeg/${pname}-${version}.tar.gz";
+    sha256 = "009jgxi8lvdp00dwfj0n4x5yqrf64x00xdkpxpwgl2v8wcqn56fv";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ python3 ];
+
+  postFixup = ''
+    wrapProgram $out/bin/sort-pictures \
+      --prefix PATH : ${lib.makeBinPath [ exif imagemagick ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://rfc1149.net/devel/recoverjpeg.html";
+    description = "Recover lost JPEGs and MOV files on a bogus memory card or disk";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/recutils/default.nix b/nixpkgs/pkgs/tools/misc/recutils/default.nix
new file mode 100644
index 000000000000..4bd3ef131c11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/recutils/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchurl
+, bc
+, check
+, curl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "recutils";
+  version = "1.9";
+
+  src = fetchurl {
+    url = "mirror://gnu/recutils/${pname}-${version}.tar.gz";
+    hash = "sha256-YwFZKwAgwUtFZ1fvXUNNSfYCe45fOkmdEzYvIFxIbg4=";
+  };
+
+  hardeningDisable = lib.optional stdenv.cc.isClang "format";
+
+  buildInputs = [
+    curl
+  ];
+
+  nativeCheckInputs = [
+    bc
+    check
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/recutils/";
+    description = "Tools and libraries to access human-editable, text-based databases";
+    longDescription = ''
+      GNU Recutils is a set of tools and libraries to access human-editable,
+      text-based databases called recfiles. The data is stored as a sequence of
+      records, each record containing an arbitrary number of named fields.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/remind/default.nix b/nixpkgs/pkgs/tools/misc/remind/default.nix
new file mode 100644
index 000000000000..bd049671336e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/remind/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchurl
+, tk
+, tcllib
+, tcl
+, tkremind ? true
+}:
+
+let
+  inherit (lib) optionals optionalString;
+  tclLibraries = optionals tkremind [ tcllib tk ];
+  tkremindPatch = optionalString tkremind ''
+    substituteInPlace scripts/tkremind --replace "exec wish" "exec ${tk}/bin/wish"
+  '';
+in
+tcl.mkTclDerivation rec {
+  pname = "remind";
+  version = "04.02.09";
+
+  src = fetchurl {
+    url = "https://dianne.skoll.ca/projects/remind/download/remind-${version}.tar.gz";
+    sha256 = "sha256-ZEaEYLQFpwXfp7ONsUt4I/ENqPADruooFRfdtJhrhyo=";
+  };
+
+  propagatedBuildInputs = tclLibraries;
+
+  postPatch = ''
+    substituteInPlace ./configure \
+      --replace "sleep 1" "true"
+    substituteInPlace ./src/init.c \
+      --replace "rkrphgvba(0);" "" \
+      --replace "rkrphgvba(1);" ""
+    ${tkremindPatch}
+  '';
+
+  meta = with lib; {
+    homepage = "https://dianne.skoll.ca/projects/remind/";
+    description = "Sophisticated calendar and alarm program for the console";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ raskin kovirobi ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/remote-exec/default.nix b/nixpkgs/pkgs/tools/misc/remote-exec/default.nix
new file mode 100644
index 000000000000..979f0f53bae0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/remote-exec/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchFromGitHub
+, buildPythonApplication
+, click
+, pydantic
+, toml
+, watchdog
+, pytestCheckHook
+, rsync
+}:
+
+buildPythonApplication rec {
+  pname = "remote-exec";
+  version = "1.13.3";
+
+  src = fetchFromGitHub {
+    owner = "remote-cli";
+    repo = "remote";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-rsboHJLOHXnpXtsVsvsfKsav8mSbloaq2lzZnU2pw6c=";
+  };
+
+  patches = [
+    # relax install requirements
+    # https://github.com/remote-cli/remote/pull/60.patch
+    (fetchpatch {
+      url = "https://github.com/remote-cli/remote/commit/a2073c30c7f576ad7ceb46e39f996de8d06bf186.patch";
+      hash = "sha256-As0j+yY6LamhOCGFzvjUQoXFv46BN/tRBpvIS7r6DaI=";
+    })
+  ];
+
+  # remove legacy endpoints, we use --multi now
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace '"mremote' '#"mremote'
+  '';
+
+  propagatedBuildInputs = [
+    click
+    pydantic
+    toml
+    watchdog
+  ];
+
+  # disable pytest --cov
+  preCheck = ''
+    rm setup.cfg
+  '';
+
+  doCheck = true;
+
+  nativeCheckInputs = [
+    rsync
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = lib.optionals stdenv.isDarwin [
+    # `watchdog` dependency does not correctly detect fsevents on darwin.
+    # this only affects `remote --stream-changes`
+    "test/test_file_changes.py"
+  ];
+
+  meta = with lib; {
+    description = "Work with remote hosts seamlessly via rsync and ssh";
+    homepage = "https://github.com/remote-cli/remote";
+    changelog = "https://github.com/remote-cli/remote/releases/tag/v${version}";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ pbsds ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rename/default.nix b/nixpkgs/pkgs/tools/misc/rename/default.nix
new file mode 100644
index 000000000000..d7eed90d0639
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rename/default.nix
@@ -0,0 +1,20 @@
+{ lib, fetchFromGitHub, perlPackages }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "rename";
+  version = "1.11";
+  outputs = [ "out" ];
+  src = fetchFromGitHub {
+    owner = "pstray";
+    repo = "rename";
+    rev = "v${version}";
+    sha256 = "SK6wS3IxjCftuDiiZU27TFnn9GVd137zmzvGH88cNLI=";
+  };
+  meta = with lib; {
+    description = "Rename files according to a Perl rewrite expression";
+    homepage = "https://github.com/pstray/rename";
+    maintainers = with maintainers; [ mkg cyplo ];
+    license = with licenses; [ gpl1Plus ];
+    mainProgram = "rename";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/renameutils/default.nix b/nixpkgs/pkgs/tools/misc/renameutils/default.nix
new file mode 100644
index 000000000000..1b6c70a2773d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/renameutils/default.nix
@@ -0,0 +1,37 @@
+{lib, stdenv, fetchurl, readline, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "renameutils";
+  version = "0.12.0";
+
+  src = fetchurl {
+    url = "mirror://savannah/renameutils/renameutils-${version}.tar.gz";
+    sha256 = "18xlkr56jdyajjihcmfqlyyanzyiqqlzbhrm6695mkvw081g1lnb";
+  };
+
+  patches = [ ./install-exec.patch ];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace src/apply.c \
+      --replace "command = \"mv\"" "command = \"${coreutils}/bin/mv\"" \
+      --replace "command = \"cp\"" "command = \"${coreutils}/bin/cp\""
+    substituteInPlace src/icmd.c \
+      --replace "#define MV_COMMAND \"mv\"" "#define MV_COMMAND \"${coreutils}/bin/mv\"" \
+      --replace "#define CP_COMMAND \"cp\"" "#define CP_COMMAND \"${coreutils}/bin/cp\""
+    substituteInPlace src/qcmd.c \
+      --replace "ls_program = xstrdup(\"ls\")" "ls_program = xstrdup(\"${coreutils}/bin/ls\")"
+  '';
+
+  nativeBuildInputs = [ readline ];
+
+  preConfigure = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    export ac_cv_func_lstat64=no
+  '';
+
+  meta = {
+    homepage = "https://www.nongnu.org/renameutils/";
+    description = "A set of programs to make renaming of files faster";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch b/nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch
new file mode 100644
index 000000000000..32b8de5adb80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch
@@ -0,0 +1,24 @@
+diff -Naur renameutils-0.12.0-orig/src/Makefile.am renameutils-0.12.0/src/Makefile.am
+--- renameutils-0.12.0-orig/src/Makefile.am	2012-04-23 12:10:43.000000000 +0100
++++ renameutils-0.12.0/src/Makefile.am	2013-03-25 11:13:21.605447377 +0000
+@@ -49,7 +49,7 @@
+ 	@[ -f icp ] || (echo $(LN_S) icmd icp ; $(LN_S) icmd icp)
+ 
+ install-exec-local:
+-	$(mkdir_p) $(DESTDIR)($bindir)
++	$(mkdir_p) $(DESTDIR)$(bindir)
+ 	@[ -f $(DESTDIR)$(bindir)/qmv ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv)
+ 	@[ -f $(DESTDIR)$(bindir)/qcp ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp)
+ 	@[ -f $(DESTDIR)$(bindir)/imv ] || (echo $(LN_S) icmd $(DESTDIR)$(bindir)/imv ; $(LN_S) icmd $(DESTDIR)$(bindir)/imv)
+diff -Naur renameutils-0.12.0-orig/src/Makefile.in renameutils-0.12.0/src/Makefile.in
+--- renameutils-0.12.0-orig/src/Makefile.in	2012-04-23 12:24:10.000000000 +0100
++++ renameutils-0.12.0/src/Makefile.in	2013-03-25 11:13:40.549847891 +0000
+@@ -1577,7 +1577,7 @@
+ 	@[ -f icp ] || (echo $(LN_S) icmd icp ; $(LN_S) icmd icp)
+ 
+ install-exec-local:
+-	$(mkdir_p) $(DESTDIR)($bindir)
++	$(mkdir_p) $(DESTDIR)$(bindir)
+ 	@[ -f $(DESTDIR)$(bindir)/qmv ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv)
+ 	@[ -f $(DESTDIR)$(bindir)/qcp ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp)
+ 	@[ -f $(DESTDIR)$(bindir)/imv ] || (echo $(LN_S) icmd $(DESTDIR)$(bindir)/imv ; $(LN_S) icmd $(DESTDIR)$(bindir)/imv)
diff --git a/nixpkgs/pkgs/tools/misc/reredirect/default.nix b/nixpkgs/pkgs/tools/misc/reredirect/default.nix
new file mode 100644
index 000000000000..479c8ac28e54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/reredirect/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "reredirect";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "jerome-pouiller";
+    repo = "reredirect";
+    rev = "v${version}";
+    sha256 = "sha256-RHRamDo7afnJ4DlOVAqM8lQAC60YESGSMKa8Io2vcX0=";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  postFixup = ''
+    substituteInPlace ${placeholder "out"}/bin/relink \
+      --replace "reredirect" "${placeholder "out"}/bin/reredirect"
+  '';
+
+  meta = with lib; {
+    description = "Tool to dynamicly redirect outputs of a running process";
+    homepage = "https://github.com/jerome-pouiller/reredirect";
+    license = licenses.mit;
+    maintainers = [ maintainers.tobim ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/rfc/default.nix b/nixpkgs/pkgs/tools/misc/rfc/default.nix
new file mode 100644
index 000000000000..60d77bfbaca2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rfc/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, curl
+, installShellFiles
+, makeWrapper
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "rfc";
+  version = "0.2.6";
+
+  src = fetchFromGitHub {
+    owner = "bfontaine";
+    repo = "rfc";
+    rev = "v${version}";
+    hash = "sha256-dfaeTdJiJuKp8/k6LBP+RC60gTRHfHR5hhLD4ZWJufE=";
+  };
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin rfc
+    wrapProgram $out/bin/rfc \
+      --prefix PATH : ${lib.makeBinPath [ curl ]}
+    installManPage man/rfc.1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A tool to read RFCs from the command line";
+    longDescription = ''
+      rfc is a little tool written in Bash to read RFCs from the command-line.
+      It fetches RFCs and drafts from the Web and caches them locally.
+    '';
+    homepage = "https://github.com/bfontaine/rfc";
+    changelog = "https://github.com/bfontaine/rfc/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.all;
+    mainProgram = "rfc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix b/nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix
new file mode 100644
index 000000000000..7c744935064f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitea, autoreconfHook, check, pkg-config, file, protobufc
+,withWolfSSL ? false, wolfssl
+,withGnuTLS ? false, gnutls
+,withJSON ? true, json_c
+}:
+
+stdenv.mkDerivation rec {
+  pname = "riemann-c-client";
+  version = "2.1.1";
+
+  src = fetchFromGitea {
+    domain = "git.madhouse-project.org";
+    owner = "algernon";
+    repo = "riemann-c-client";
+    rev = "riemann-c-client-${version}";
+    hash = "sha256-FIhTT57g2uZBaH3EPNxNUNJn9n+0ZOhI6WMyF+xIr/Q=";
+  };
+
+  outputs = [ "bin" "dev" "out" ];
+
+  nativeBuildInputs = [ autoreconfHook check pkg-config ];
+  buildInputs = [ file protobufc ]
+    ++ lib.optional withWolfSSL wolfssl
+    ++ lib.optional withGnuTLS gnutls
+    ++ lib.optional withJSON json_c
+  ;
+
+  configureFlags = []
+    ++ lib.optional withWolfSSL "--with-tls=wolfssl"
+    ++ lib.optional withGnuTLS "--with-tls=gnutls"
+  ;
+
+  doCheck = true;
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://git.madhouse-project.org/algernon/riemann-c-client";
+    description = "A C client library for the Riemann monitoring system";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ pradeepchhetri ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile
new file mode 100644
index 000000000000..b2e34d5120e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem "riemann-tools"
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock
new file mode 100644
index 000000000000..a3e1ea62a8c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    beefcake (1.0.0)
+    json (1.8.6)
+    mtrc (0.0.4)
+    optimist (3.0.0)
+    riemann-client (0.2.6)
+      beefcake (>= 0.3.5, <= 1.0.0)
+      mtrc (>= 0.0.4)
+      trollop (>= 1.16.2)
+    riemann-tools (0.2.14)
+      json (~> 1.8)
+      optimist (~> 3.0, >= 3.0.0)
+      riemann-client (~> 0.2, >= 0.2.6)
+    trollop (2.9.9)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  riemann-tools
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/default.nix b/nixpkgs/pkgs/tools/misc/riemann-tools/default.nix
new file mode 100644
index 000000000000..a9977aefd66c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/default.nix
@@ -0,0 +1,37 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "riemann-tools";
+  gemdir = ./.;
+  exes = [
+    "riemann-apache-status"
+    "riemann-bench"
+    "riemann-cloudant"
+    "riemann-consul"
+    "riemann-dir-files-count"
+    "riemann-dir-space"
+    "riemann-diskstats"
+    "riemann-fd"
+    "riemann-freeswitch"
+    "riemann-haproxy"
+    "riemann-health"
+    "riemann-kvminstance"
+    "riemann-memcached"
+    "riemann-net"
+    "riemann-nginx-status"
+    "riemann-ntp"
+    "riemann-portcheck"
+    "riemann-proc"
+    "riemann-varnish"
+    "riemann-zookeeper"
+  ];
+
+  passthru.updateScript = bundlerUpdateScript "riemann-tools";
+
+  meta = with lib; {
+    description = "Tools to submit data to Riemann";
+    homepage = "https://riemann.io";
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix b/nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix
new file mode 100644
index 000000000000..57acb5ac9013
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix
@@ -0,0 +1,74 @@
+{
+  beefcake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10gid0a7pdllh3qmjiqkqxgfqvd7m1f2dmcm4gcd19s63pv620gv";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  mtrc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xj2pv4cpn0ad1xw38sinsxfzwhgqs6ff18hw0cwz5xmsf3zqmiz";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  optimist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05jxrp3nbn5iilc1k7ir90mfnwc5abc9h78s5rpm3qafwqxvcj4j";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  riemann-client = {
+    dependencies = ["beefcake" "mtrc" "trollop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02rp8x2y8h61x8mx9c8kwgm2yyvgg63g8km93zmwmkpp5fyi3fi8";
+      type = "gem";
+    };
+    version = "0.2.6";
+  };
+  riemann-tools = {
+    dependencies = ["json" "optimist" "riemann-client"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07w9x3iw32zwpzsm9l63vn0nv1778qls1blqysr45m7l7x6n5wjx";
+      type = "gem";
+    };
+    version = "0.2.14";
+  };
+  trollop = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "074h7lns72kg1dl5gvz5apl3xz1i0axbnbc01pf2kbw4q0lkpnp4";
+      type = "gem";
+    };
+    version = "2.9.9";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rig/default.nix b/nixpkgs/pkgs/tools/misc/rig/default.nix
new file mode 100644
index 000000000000..b9a3e0951e3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rig/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl } :
+
+stdenv.mkDerivation rec {
+  version = "1.11";
+  pname = "rig";
+
+  src = fetchurl {
+    url = "https://ayera.dl.sourceforge.net/project/rig/rig/${version}/rig-${version}.tar.gz";
+    sha256 = "1f3snysjqqlpk2kgvm5p2icrj4lsdymccmn3igkc2f60smqckgq0";
+  };
+
+  # Note: diff modified from Debian: Norbert Veber <nveber@debian.org>
+  # http://deb.debian.org/debian/pool/main/r/rig/rig_1.11-1.diff.gz
+  patches = [ ./rig_1.11-1.diff ];
+
+  makeFlags = [ "CXX=${stdenv.cc.targetPrefix}c++" ];
+
+  meta = {
+    homepage = "https://rig.sourceforge.net/";
+    description = "Random identity generator";
+    longDescription = ''
+      RIG (Random Identity Generator) is a free replacement for a shareware
+      program out there called 'fake'. It generates random, yet real-looking,
+      personal data. It is useful if you need to feed a name to a Web site,
+      BBS, or real person, and are too lazy to think of one yourself. Also,
+      if the Web site/BBS/person you are giving the information to tries to
+      cross-check the city, state, zip, or area code, it will check out.
+    '';
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ tomberek ];
+    platforms = with lib.platforms; all;
+    mainProgram = "rig";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff b/nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff
new file mode 100644
index 000000000000..301cf78b5a9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff
@@ -0,0 +1,39 @@
+--- rig-1.11.orig/Makefile
++++ rig-1.11/Makefile
+@@ -1,20 +1,21 @@
+-PREFIX=/usr/local
++PREFIX=${out}
+ BINDIR=${PREFIX}/bin
+ MANDIR=${PREFIX}/man
+ DATADIR=${PREFIX}/share/rig
++CXX=g++
+ 
+ all: rig rig.6
+ rig: rig.cc
+-	g++ -g rig.cc -o rig -Wall -DDATADIR="\"$(DATADIR)\""
++	${CXX} -O2 -g rig.cc -o rig -Wall -DDATADIR="\"$(DATADIR)\""
+ 
+ rig.6: rig.6.in
+ 	sed s@DATADIR@"$(DATADIR)"@g < rig.6.in > rig.6
+ 
+ install: rig rig.6
+-	install -g 0 -m 755 -o 0 -s rig $(BINDIR)
+-	install -g 0 -m 644 -o 0 rig.6 $(MANDIR)/man6/rig.6
+-	install -g 0 -m 755 -o 0 -d $(DATADIR)
+-	install -g 0 -m 644 -o 0 data/*.idx $(DATADIR)
++	install -m 755 -d $(DESTDIR)$(DATADIR)
++	install -m 755 -d $(DESTDIR)$(BINDIR)
++	install -m 755 rig $(DESTDIR)$(BINDIR)/rig
++	install -m 644 data/*.idx $(DESTDIR)$(DATADIR)
+ 
+ clean:
+ 	rm -rf *~ *.rej *.orig *.o rig rig.6
+--- rig-1.11.orig/rig.cc
++++ rig-1.11/rig.cc
+@@ -26,6 +26,7 @@
+ #include <time.h>
+ #include <errno.h>
+ #include <assert.h>
++#include <string.h>
+ 
+ using namespace std;
diff --git a/nixpkgs/pkgs/tools/misc/ripdrag/default.nix b/nixpkgs/pkgs/tools/misc/ripdrag/default.nix
new file mode 100644
index 000000000000..fd9d5a8a3514
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ripdrag/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, wrapGAppsHook4, gtk4 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ripdrag";
+  version = "0.4.6";
+
+  src = fetchFromGitHub {
+    owner = "nik012003";
+    repo = "ripdrag";
+    rev = "v${version}";
+    hash = "sha256-42sfSrwRlpaO4Dkw6m6wcKXef5yKZjw9MMoYNwIF6/o=";
+  };
+
+  cargoHash = "sha256-mW334GTAUAUw8xs2Idpr2ThGyN1P0GbP/RjDqj5Ttr0=";
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook4 ];
+
+  buildInputs = [ gtk4 ];
+
+  meta = with lib; {
+    description = "An application that lets you drag and drop files from and to the terminal";
+    homepage = "https://github.com/nik012003/ripdrag";
+    changelog = "https://github.com/nik012003/ripdrag/releases/tag/${src.rev}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "ripdrag";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ristate/default.nix b/nixpkgs/pkgs/tools/misc/ristate/default.nix
new file mode 100644
index 000000000000..3c4baea4d3c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ristate/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitLab }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ristate";
+  version = "unstable-2021-09-10";
+
+  src = fetchFromGitLab {
+    owner = "snakedye";
+    repo = pname;
+    rev = "34dfd0a0bab5b36df118d8da3956fd938c625b15";
+    sha256 = "sha256-CH9DZ/7Bhbe6qKg1Nbj1rA9SzIsqVlBJg51XxAh0XnY=";
+  };
+
+  cargoSha256 = "sha256-HTfRWvE3m7XZhZDj5bEkrQI3pD6GNiKd2gJtMjRQ8Rw=";
+
+  meta = with lib; {
+    description = "A river-status client written in Rust";
+    homepage = "https://gitlab.com/snakedye/ristate";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kranzes ];
+    mainProgram = "ristate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rkflashtool/default.nix b/nixpkgs/pkgs/tools/misc/rkflashtool/default.nix
new file mode 100644
index 000000000000..fa37c98966eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rkflashtool/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libusb1 }:
+
+stdenv.mkDerivation rec {
+  pname = "rkflashtool";
+  version = "5.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/rkflashtool/rkflashtool-${version}-src.tar.bz2";
+    sha256 = "0dbp1crw7pjav9gffrnskhkf0gxlj4xgp65clqhvfmv32460xb9c";
+  };
+
+  versionh = fetchurl {
+    url = "mirror://sourceforge/rkflashtool/version.h";
+    sha256 = "1mkcy3yyfaddhzg524hjnhvmwdmdfzbavib8d9p5y38pcqy8xgdp";
+  };
+
+  buildInputs = [ libusb1 ];
+
+  preBuild = ''
+    cp $versionh version.h
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp rkunpack rkcrc rkflashtool rkparameters rkparametersblock rkunsign rkmisc $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/rkflashtool/";
+    description = "Tools for flashing Rockchip devices";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.viric ];
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rkvm/default.nix b/nixpkgs/pkgs/tools/misc/rkvm/default.nix
new file mode 100644
index 000000000000..bf6ef6e482d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rkvm/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, libevdev
+, openssl
+, makeWrapper
+, nixosTests
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rkvm";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "htrefil";
+    repo = pname;
+    rev = version;
+    hash = "sha256-bWDVc5pWc5gtwGF3vwUgjDhqZP7E79nteKiuAEEbw6E=";
+  };
+
+  cargoHash = "sha256-FUaycVxW7QJ5gTZ/8bWjqSaMSepRF5iqlBNJLaDRNxc=";
+
+  nativeBuildInputs = [ pkg-config rustPlatform.bindgenHook makeWrapper ];
+  buildInputs = [ libevdev ];
+
+  postInstall = ''
+    install -Dm444 -t "$out/lib/systemd/system" systemd/rkvm-*.service
+    install -Dm444 example/server.toml "$out/etc/rkvm/server.example.toml"
+    install -Dm444 example/client.toml "$out/etc/rkvm/client.example.toml"
+
+    wrapProgram $out/bin/rkvm-certificate-gen --prefix PATH : ${lib.makeBinPath [ openssl ]}
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) rkvm;
+  };
+
+  meta = with lib; {
+    description = "Virtual KVM switch for Linux machines";
+    homepage = "https://github.com/htrefil/rkvm";
+    changelog = "https://github.com/htrefil/rkvm/releases/tag/${version}";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ckie ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rlwrap/default.nix b/nixpkgs/pkgs/tools/misc/rlwrap/default.nix
new file mode 100644
index 000000000000..f1c2d6a58971
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rlwrap/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, perl, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "rlwrap";
+  version = "0.46.1";
+
+  src = fetchFromGitHub {
+    owner = "hanslub42";
+    repo = "rlwrap";
+    rev = version;
+    sha256 = "sha256-yKJXfdxfaCsmPtI0KmTzfFKY+evUuytomVrLsSCYDGo=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/readline.c \
+      --replace "if(*p >= 0 && *p < ' ')" "if(*p >= 0 && (*p >= 0) && (*p < ' '))"
+  '';
+
+  nativeBuildInputs = [ autoreconfHook perl ];
+
+  buildInputs = [ readline ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-Wno-error=implicit-function-declaration";
+
+  meta = with lib; {
+    description = "Readline wrapper for console programs";
+    homepage = "https://github.com/hanslub42/rlwrap";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jlesquembre ];
+    mainProgram = "rlwrap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rmate-sh/default.nix b/nixpkgs/pkgs/tools/misc/rmate-sh/default.nix
new file mode 100644
index 000000000000..bc93c6e437fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmate-sh/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, patsh
+, hostname
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rmate";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "aurora";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-fmK6h9bqZ0zO3HWfZvPdYuZ6i/0HZ1CA3FUnkS+E9ns=";
+  };
+
+  nativeBuildInputs = [ patsh ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    substituteInPlace rmate \
+      --replace \
+        'echo "hostname"' \
+        'echo "${hostname}/bin/hostname"'
+    patsh -f rmate -s ${builtins.storeDir}
+
+    runHook preBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 rmate $out/bin/rmate
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Remote TextMate 2 implemented as shell script";
+    longDescription = ''
+      TextMate 2 has a nice feature where it is possible to edit
+      files on a remote server using a helper script called 'rmate',
+      which feeds the file back to the editor over a reverse tunnel.
+      This is a rmate implementation in shell!
+    '';
+    homepage = "https://github.com/aurora/rmate";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pbsds ];
+    mainProgram = "rmate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rmlint/default.nix b/nixpkgs/pkgs/tools/misc/rmlint/default.nix
new file mode 100644
index 000000000000..502761dc9426
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmlint/default.nix
@@ -0,0 +1,90 @@
+{ lib, stdenv
+, cairo
+, fetchFromGitHub
+, glib
+, gobject-introspection
+, gtksourceview3
+, json-glib
+, libelf
+, makeWrapper
+, pango
+, pkg-config
+, polkit
+, python3
+, scons
+, sphinx
+, util-linux
+, wrapGAppsHook
+, withGui ? false }:
+
+assert withGui -> !stdenv.isDarwin;
+
+stdenv.mkDerivation rec {
+  pname = "rmlint";
+  version = "2.10.2";
+
+  src = fetchFromGitHub {
+    owner = "sahib";
+    repo = "rmlint";
+    rev = "v${version}";
+    sha256 = "sha256-pOo1YfeqHUU6xyBRFbcj2lX1MHJ+a5Hi31BMC1nYZGo=";
+  };
+
+  patches = [
+    # pass through NIX_* environment variables to scons.
+    ./scons-nix-env.patch
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    sphinx
+    scons
+  ] ++ lib.optionals withGui [
+    makeWrapper
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    glib
+    json-glib
+    libelf
+    util-linux
+  ] ++ lib.optionals withGui [
+    cairo
+    gtksourceview3
+    pango
+    polkit
+    python3
+    python3.pkgs.pygobject3
+  ];
+
+  prePatch = ''
+    # remove sources of nondeterminism
+    substituteInPlace lib/cmdline.c \
+      --replace "__DATE__" "\"Jan  1 1970\"" \
+      --replace "__TIME__" "\"00:00:00\""
+    substituteInPlace docs/SConscript \
+      --replace "gzip -c " "gzip -cn "
+  '';
+
+  # Otherwise tries to access /usr.
+  prefixKey = "--prefix=";
+
+  sconsFlags = lib.optionals (!withGui) [ "--without-gui" ];
+
+  # in GUI mode, this shells out to itself, and tries to import python modules
+  postInstall = lib.optionalString withGui ''
+    gappsWrapperArgs+=(--prefix PATH : "$out/bin")
+    gappsWrapperArgs+=(--prefix PYTHONPATH : "$(toPythonPath $out):$(toPythonPath ${python3.pkgs.pygobject3}):$(toPythonPath ${python3.pkgs.pycairo})")
+  '';
+
+  meta = with lib; {
+    description = "Extremely fast tool to remove duplicates and other lint from your filesystem";
+    homepage = "https://rmlint.readthedocs.org";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ aaschmid koral ];
+    mainProgram = "rmlint";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rmlint/scons-nix-env.patch b/nixpkgs/pkgs/tools/misc/rmlint/scons-nix-env.patch
new file mode 100644
index 000000000000..10ed5698be3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmlint/scons-nix-env.patch
@@ -0,0 +1,19 @@
+scons does not use os environment by default:
+  https://scons.org/doc/2.1.0/HTML/scons-user/x1750.html
+
+nixpkgs' cc-wrapper on the other hand relies on various NIX_* variables
+to be passed through like NIX_CFLAGS_COMPILE_BEFORE.
+--- a/SConstruct
++++ b/SConstruct
+@@ -559,10 +559,7 @@ options = dict(
+     SHLINKCOMSTR=link_shared_library_message,
+     LINKCOMSTR=link_program_message,
+     PREFIX=GetOption('prefix'),
+-    ENV = dict([ (key, os.environ[key])
+-                 for key in os.environ
+-                 if key in ['PATH', 'TERM', 'HOME', 'PKG_CONFIG_PATH']
+-              ])
++    ENV = os.environ,
+ )
+ 
+ if ARGUMENTS.get('VERBOSE') == "1":
diff --git a/nixpkgs/pkgs/tools/misc/rmtrash/default.nix b/nixpkgs/pkgs/tools/misc/rmtrash/default.nix
new file mode 100644
index 000000000000..793cd49d4188
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmtrash/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenvNoCC, fetchFromGitHub, makeWrapper
+, trash-cli, coreutils, which, getopt }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "rmtrash";
+  version = "1.15";
+
+  src = fetchFromGitHub {
+    owner = "PhrozenByte";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vCtIM6jAYfrAOopiTcb4M5GNtucVnK0XEEKbMq1Cbc4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    for f in rm{,dir}trash; do
+      install -D ./$f $out/bin/$f
+      wrapProgram $out/bin/$f \
+        --prefix PATH : ${lib.makeBinPath [ trash-cli coreutils which getopt ]}
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/PhrozenByte/rmtrash";
+    description = "trash-put made compatible with GNUs rm and rmdir";
+    longDescription = ''
+      Put files (and directories) in trash using the `trash-put` command in a
+      way that is, otherwise as `trash-put` itself, compatible to GNUs `rm`
+      and `rmdir`.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ peelz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rmw/default.nix b/nixpkgs/pkgs/tools/misc/rmw/default.nix
new file mode 100644
index 000000000000..a6bbb4084029
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmw/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rmw";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "theimpossibleastronaut";
+    repo = "rmw";
+    rev = "v${version}";
+    hash = "sha256-rfJdJHSkusZj/PN74KgV5i36YC0YRZmIfRdvkUNoKEM=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+  ];
+
+  buildInputs = [
+    ncurses
+  ];
+
+  meta = with lib; {
+    description = "Trashcan/ recycle bin utility for the command line";
+    homepage = "https://github.com/theimpossibleastronaut/rmw";
+    changelog = "https://github.com/theimpossibleastronaut/rmw/blob/${src.rev}/ChangeLog";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "rmw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix b/nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix
new file mode 100644
index 000000000000..b5762fd651ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchurl
+, cryptopp
+, libusb1
+, makeWrapper
+, pkg-config
+, qt5
+, withEspeak ? false, espeak ? null
+}:
+
+stdenv.mkDerivation  rec {
+  pname = "rockbox-utility";
+  version = "1.4.1";
+
+  src = fetchurl {
+    url = "https://download.rockbox.org/rbutil/source/RockboxUtility-v${version}-src.tar.bz2";
+    hash = "sha256-PhlJ+fNY4/Qjoc72zV9WO+kNqF5bZQuwOh4EpAJwqX4=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+    qt5.qmake
+    qt5.wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    cryptopp
+    libusb1
+    qt5.qtbase
+    qt5.qttools
+  ]
+  ++ lib.optional withEspeak espeak;
+
+  postPatch = ''
+    sed -i rbutil/rbutilqt/rbutilqt.pro \
+        -e '/^lrelease.commands =/ s|$$\[QT_INSTALL_BINS\]/lrelease -silent|${lib.getDev qt5.qttools}/bin/lrelease|'
+  '';
+
+  preConfigure = ''
+    cd rbutil/rbutilqt
+    lrelease rbutilqt.pro
+  '';
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: libmkimxboot.a(elf.c.o):utils/imxtools/sbtools/misc.h:43: multiple definition of `g_nr_keys';
+  #     libmkimxboot.a(mkimxboot.c.o):utils/imxtools/sbtools/misc.h:43: first defined here
+  # TODO: try to remove with 1.5.1 update.
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 RockboxUtility $out/bin/rockboxutility
+    ln -s $out/bin/rockboxutility $out/bin/RockboxUtility
+    wrapProgram $out/bin/rockboxutility \
+    ${lib.optionalString withEspeak ''
+      --prefix PATH : ${espeak}/bin
+    ''}
+
+    runHook postInstall
+  '';
+
+  # `make build/rcc/qrc_rbutilqt-lang.cpp` fails with
+  #      RCC: Error in 'rbutilqt-lang.qrc': Cannot find file 'lang/rbutil_cs.qm'
+  # Do not add `lrelease rbutilqt.pro` into preConfigure, otherwise `make lrelease`
+  # may clobber the files read by the parallel `make build/rcc/qrc_rbutilqt-lang.cpp`.
+  enableParallelBuilding = false;
+
+  meta = with lib; {
+    homepage = "https://www.rockbox.org";
+    description = "Open source firmware for digital music players";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres goibhniu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rot8/default.nix b/nixpkgs/pkgs/tools/misc/rot8/default.nix
new file mode 100644
index 000000000000..6a62d05b5a5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rot8/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rot8";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "efernau";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-dHx3vFY0ztyTIlzUi22TYphPD5hvgfHrWaaeoGxnvW0=";
+  };
+
+  cargoHash = "sha256-KDg6Ggnm6Cl/1fXqNcc7/jRFJ6KTLVGveJ6Fs3NLlHE=";
+
+  meta = with lib; {
+    description = "screen rotation daemon for X11 and wlroots";
+    homepage = "https://github.com/efernau/rot8";
+    license = licenses.mit;
+    maintainers = [ maintainers.smona ];
+    mainProgram = "rot8";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/roundup/default.nix b/nixpkgs/pkgs/tools/misc/roundup/default.nix
new file mode 100644
index 000000000000..efe220fd5f9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/roundup/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, ronn, shocco }:
+
+stdenv.mkDerivation rec {
+  pname = "roundup";
+  version = "0.0.6";
+
+  src = fetchFromGitHub {
+    owner = "bmizerany";
+    repo = "roundup";
+    rev = "v${version}";
+    sha256 = "0nxaqmbv8mdvq9wcaqxk6k5mr31i68jzxf1wxa6pp7xp4prwdc9z";
+  };
+
+  prePatch = ''
+    # Don't change $PATH
+    substituteInPlace configure --replace PATH= NIRVANA=
+    # There are only man pages in sections 1 and 5 \
+    substituteInPlace Makefile --replace "{1..9}" "1 5"
+  '';
+
+  nativeBuildInputs = [ ronn shocco ];
+
+  installTargets = [ "install" "install-man" ];
+
+  preInstall = ''
+    for i in 1 5; do
+      mkdir -p $out/share/man/man$i
+    done
+  '';
+
+  meta = with lib; {
+    description = "A unit testing tool for running test plans which are written in any POSIX shell";
+    homepage = "http://bmizerany.github.io/roundup/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = platforms.all;
+    mainProgram = "roundup";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/routino/default.nix b/nixpkgs/pkgs/tools/misc/routino/default.nix
new file mode 100644
index 000000000000..ea882749a534
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/routino/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, fetchpatch, perl, zlib, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "routino";
+  version = "3.4.1";
+
+  src = fetchurl {
+    url = "https://routino.org/download/${pname}-${version}.tgz";
+    hash = "sha256-C6qNKljRdV0ProbgSxfrZLgZH+Pl8kcpKmTb83GLhSs=";
+  };
+
+  patchFlags = [ "-p0" ];
+  patches = lib.optionals stdenv.isDarwin [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/macports/macports-ports/18fd229516a46e7272003acbe555735b2a902db7/gis/routino/files/patch-Makefile_conf.diff";
+      sha256 = "1b7hpa4sizansnwwxq1c031nxwdwh71pg08jl9z9apiab8pjsn53";
+    })
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/macports/macports-ports/18fd229516a46e7272003acbe555735b2a902db7/gis/routino/files/patch-src_Makefile_dylib_extension.diff";
+      sha256 = "1kigxcfr7977baxdsfvrw6q453cpqlzqakhj7av2agxkcvwyilpv";
+    })
+  ];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile.conf \
+      --subst-var-by PREFIX $out
+  '';
+
+  nativeBuildInputs = [ perl ];
+
+  buildInputs = [ zlib bzip2 ];
+
+  outputs = [ "out" "doc" ];
+
+  CLANG = lib.optionalString stdenv.cc.isClang "1";
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    homepage = "http://www.routino.org/";
+    changelog = "http://routino.org/software/NEWS.txt";
+    description = "OpenStreetMap Routing Software";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rpcsvc-proto/default.nix b/nixpkgs/pkgs/tools/misc/rpcsvc-proto/default.nix
new file mode 100644
index 000000000000..2de8bdefc880
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rpcsvc-proto/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, buildPackages, fetchpatch, targetPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "rpcsvc-proto";
+  version = "1.4.4";
+
+  src = fetchFromGitHub {
+    owner = "thkukuk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-DEXzSSmjMeMsr1PoU/ljaY+6b4COUU2Z8MJkGImsgzk=";
+  };
+
+  patches = [
+    # https://github.com/thkukuk/rpcsvc-proto/pull/14
+    (fetchpatch {
+      name = "follow-RPCGEN_CPP-env-var";
+      url = "https://github.com/thkukuk/rpcsvc-proto/commit/e772270774ff45172709e39f744cab875a816667.diff";
+      sha256 = "sha256-KrUD6YwdyxW9S99h4TB21ahnAOgQmQr2tYz++MIbk1Y=";
+    })
+  ];
+
+  outputs = [ "out" "man" "dev" ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  RPCGEN_CPP = "${stdenv.cc.targetPrefix}cpp";
+
+  postPatch = ''
+    # replace fallback cpp with the target prefixed cpp
+    substituteInPlace rpcgen/rpc_main.c \
+      --replace 'CPP = "cpp"' \
+                'CPP = "${targetPackages.stdenv.cc.targetPrefix}cpp"'
+  '' + lib.optionalString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform)  ''
+    substituteInPlace rpcsvc/Makefile.am \
+      --replace '$(top_builddir)/rpcgen/rpcgen' '${buildPackages.rpcsvc-proto}/bin/rpcgen'
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thkukuk/rpcsvc-proto";
+    description = "This package contains rpcsvc proto.x files from glibc, which are missing in libtirpc";
+    longDescription = ''
+      The RPC-API has been removed from glibc. The 2.32-release-notes
+      (https://sourceware.org/pipermail/libc-announce/2020/000029.html) recommend to use
+      `libtirpc` and this package instead.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+    mainProgram = "rpcgen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rpi-imager/default.nix b/nixpkgs/pkgs/tools/misc/rpi-imager/default.nix
new file mode 100644
index 000000000000..2a68d92b9c13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rpi-imager/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, wrapQtAppsHook
+, cmake
+, pkg-config
+, util-linux
+, curl
+, libarchive
+, qtbase
+, qtdeclarative
+, qtsvg
+, qttools
+, qtquickcontrols2
+, qtgraphicaleffects
+, xz
+, testers
+, nix-update-script
+, enableTelemetry ? false
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "rpi-imager";
+  version = "1.8.5";
+
+  src = fetchFromGitHub {
+    owner = "raspberrypi";
+    repo = "rpi-imager";
+    rev = "refs/tags/v${finalAttrs.version}";
+    sha256 = "sha256-JrotKMyAgQO3Y5RsFAar9N5/wDpWiBcy8RfvBWDiJMs=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    util-linux
+    wrapQtAppsHook
+  ];
+
+  # Disable telemetry and update check.
+  cmakeFlags = lib.optionals (!enableTelemetry) [
+    "-DENABLE_CHECK_VERSION=OFF"
+    "-DENABLE_TELEMETRY=OFF"
+  ];
+
+  buildInputs = [
+    curl
+    libarchive
+    qtbase
+    qtdeclarative
+    qtsvg
+    qttools
+    qtquickcontrols2
+    qtgraphicaleffects
+    xz
+  ];
+
+  sourceRoot = "${finalAttrs.src.name}/src";
+
+  /* By default, the builder checks for JSON support in lsblk by running "lsblk --json",
+    but that throws an error, as /sys/dev doesn't exist in the sandbox.
+    This patch removes the check. */
+  patches = [ ./lsblkCheckFix.patch ];
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = "QT_QPA_PLATFORM=offscreen rpi-imager --version";
+    };
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Raspberry Pi Imaging Utility";
+    homepage = "https://github.com/raspberrypi/rpi-imager/";
+    changelog = "https://github.com/raspberrypi/rpi-imager/releases/tag/v${finalAttrs.version}";
+    license = licenses.asl20;
+    mainProgram = "rpi-imager";
+    maintainers = with maintainers; [ ymarkus anthonyroussel ];
+    platforms = platforms.all;
+    # does not build on darwin
+    broken = stdenv.isDarwin;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch b/nixpkgs/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch
new file mode 100644
index 000000000000..aa4fdeecfdb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch
@@ -0,0 +1,16 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 170ce7a..063a137 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -332,11 +332,6 @@ else()
+         if (NOT LSBLK)
+             message(FATAL_ERROR "Unable to locate lsblk (used for disk enumeration)")
+         endif()
+-
+-        execute_process(COMMAND "${LSBLK}" "--json" OUTPUT_QUIET RESULT_VARIABLE ret)
+-        if (ret EQUAL "1")
+-            message(FATAL_ERROR "util-linux package too old. lsblk does not support --json (used for disk enumeration)")
+-        endif()
+     endif()
+
+     configure_file(
diff --git a/nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix b/nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix
new file mode 100644
index 000000000000..de0fcdbe6142
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix
@@ -0,0 +1,125 @@
+{ lib, stdenv
+, fetchurl
+, ostree
+, rpm
+, which
+, autoconf
+, automake
+, libtool
+, pkg-config
+, cargo
+, rustc
+, gobject-introspection
+, gtk-doc
+, libxml2
+, libxslt
+, docbook_xsl
+, docbook_xml_dtd_42
+, docbook_xml_dtd_43
+, gperf
+, cmake
+, libcap
+, glib
+, systemd
+, json-glib
+, libarchive
+, libsolv
+, librepo
+, polkit
+, bubblewrap
+, pcre
+, check
+, python3
+, json_c
+, zchunk
+, libmodulemd
+, util-linux
+, sqlite
+, cppunit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rpm-ostree";
+  version = "2023.7";
+
+  outputs = [ "out" "dev" "man" "devdoc" ];
+
+  src = fetchurl {
+    url = "https://github.com/coreos/${pname}/releases/download/v${version}/${pname}-${version}.tar.xz";
+    hash = "sha256-OL1PEXGqPbMWFcCTkjRAUk+7zbGTQiwQqmgmkEgfgHE=";
+  };
+
+  nativeBuildInputs = [
+    python3
+    pkg-config
+    which
+    autoconf
+    automake
+    libtool
+    cmake
+    gperf
+    cargo
+    rustc
+    gobject-introspection
+    gtk-doc
+    libxml2
+    libxslt
+    docbook_xsl
+    docbook_xml_dtd_42
+    docbook_xml_dtd_43
+  ];
+
+  buildInputs = [
+    libcap
+    ostree
+    rpm
+    glib
+    systemd
+    polkit
+    bubblewrap
+    json-glib
+    libarchive
+    libsolv
+    librepo
+    pcre
+    check
+
+    # libdnf # vendored unstable branch
+    # required by vendored libdnf
+    json_c
+    zchunk
+    libmodulemd
+    util-linux # for smartcols.pc
+    sqlite
+    cppunit
+  ];
+
+  configureFlags = [
+    "--enable-gtk-doc"
+    "--with-bubblewrap=${bubblewrap}/bin/bwrap"
+  ];
+
+  dontUseCmakeConfigure = true;
+
+  prePatch = ''
+    # According to #cmake on freenode, libdnf should bundle the FindLibSolv.cmake module
+    cp ${libsolv}/share/cmake/Modules/FindLibSolv.cmake libdnf/cmake/modules/
+
+    # Let's not hardcode the rpm-gpg path...
+    substituteInPlace libdnf/libdnf/dnf-keyring.cpp \
+      --replace '"/etc/pki/rpm-gpg"' 'getenv("LIBDNF_RPM_GPG_PATH_OVERRIDE") ? getenv("LIBDNF_RPM_GPG_PATH_OVERRIDE") : "/etc/pki/rpm-gpg"'
+  '';
+
+  preConfigure = ''
+    env NOCONFIGURE=1 ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "A hybrid image/package system. It uses OSTree as an image format, and uses RPM as a component model";
+    homepage = "https://coreos.github.io/rpm-ostree/";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ copumpkin ];
+    platforms = platforms.linux;
+    mainProgram = "rpm-ostree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rrdtool/default.nix b/nixpkgs/pkgs/tools/misc/rrdtool/default.nix
new file mode 100644
index 000000000000..e852374e2a88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rrdtool/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, gettext
+, perl
+, pkg-config
+, libxml2
+, pango
+, cairo
+, groff
+, tcl
+, darwin
+}:
+
+perl.pkgs.toPerlModule (stdenv.mkDerivation rec {
+  pname = "rrdtool";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "oetiker";
+    repo = "rrdtool-1.x";
+    rev = "v${version}";
+    hash = "sha256-a+AxU1+YpkGoFs1Iu/CHAEZ4XIkWs7Vsnr6RcfXzsBE=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    autoreconfHook
+  ];
+
+  buildInputs = [ gettext perl libxml2 pango cairo groff ]
+    ++ lib.optionals stdenv.isDarwin [ tcl darwin.apple_sdk.frameworks.ApplicationServices ];
+
+  postInstall = ''
+    # for munin and rrdtool support
+    mkdir -p $out/${perl.libPrefix}
+    mv $out/lib/perl/5* $out/${perl.libPrefix}
+  '';
+
+  meta = with lib; {
+    homepage = "https://oss.oetiker.ch/rrdtool/";
+    description = "High performance logging in Round Robin Databases";
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ pSub ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/rshim-user-space/default.nix b/nixpkgs/pkgs/tools/misc/rshim-user-space/default.nix
new file mode 100644
index 000000000000..a8bdd356a2cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rshim-user-space/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoconf
+, automake
+, makeBinaryWrapper
+, pkg-config
+, pciutils
+, libusb1
+, fuse
+, busybox
+, pv
+, withBfbInstall ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rshim-user-space";
+  version = "2.0.12";
+
+  src = fetchFromGitHub {
+    owner = "Mellanox";
+    repo = pname;
+    rev = "rshim-${version}";
+    hash = "sha256-jR9Q1i2p4weKuGPTAylNIVglgcZH0UtvXBVVCEquxu8=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    pkg-config
+  ] ++ lib.optionals withBfbInstall [ makeBinaryWrapper ];
+
+  buildInputs = [
+    pciutils
+    libusb1
+    fuse
+  ];
+
+  strictDeps = true;
+
+  preConfigure = "./bootstrap.sh";
+
+  installPhase = ''
+    mkdir -p "$out"/bin
+    cp -a src/rshim "$out"/bin/
+  '' + lib.optionalString withBfbInstall ''
+    cp -a scripts/bfb-install "$out"/bin/
+  '';
+
+  postFixup = lib.optionalString withBfbInstall ''
+    wrapProgram $out/bin/bfb-install \
+      --set PATH ${lib.makeBinPath [ busybox pv ]}
+  '';
+
+  meta = with lib; {
+    description = "user-space rshim driver for the BlueField SoC";
+    longDescription = ''
+      The rshim driver provides a way to access the rshim resources on the
+      BlueField target from external host machine. The current version
+      implements device files for boot image push and virtual console access.
+      It also creates virtual network interface to connect to the BlueField
+      target and provides a way to access the internal rshim registers.
+    '';
+    homepage = "https://github.com/Mellanox/rshim-user-space";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nikstur ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rtz/Cargo.lock b/nixpkgs/pkgs/tools/misc/rtz/Cargo.lock
new file mode 100644
index 000000000000..80d76ab214d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rtz/Cargo.lock
@@ -0,0 +1,3490 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aead"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
+dependencies = [
+ "crypto-common",
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "209b47e8954a928e1d72e86eca7000ebb6655fe1436d33eefc2201cad027e237"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "ghash",
+ "subtle",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "atomic"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
+
+[[package]]
+name = "atomic-polyfill"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28"
+dependencies = [
+ "critical-section",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "binascii"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72"
+
+[[package]]
+name = "bincode"
+version = "2.0.0-rc.3"
+source = "git+https://github.com/bincode-org/bincode.git#224e41274b089e3833a3533459f5c5758c43ab2c"
+dependencies = [
+ "bincode_derive",
+ "serde",
+]
+
+[[package]]
+name = "bincode_derive"
+version = "2.0.0-rc.3"
+source = "git+https://github.com/bincode-org/bincode.git#224e41274b089e3833a3533459f5c5758c43ab2c"
+dependencies = [
+ "virtue",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "bzip2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chashmap"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff41a3c2c1e39921b9003de14bf0439c7b63a9039637c291e1a64925d8ddfa45"
+dependencies = [
+ "owning_ref",
+ "parking_lot 0.4.8",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1369bc6b9e9a7dfdae2055f6ec151fe9c554a9d23d357c0237cee2e25eaabb7"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+ "serde",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2f5ebdc942f57ed96d560a6d1a459bae5851102a25d5bf89dc04ae453e31ecf"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
+[[package]]
+name = "clap"
+version = "4.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0827b011f6f8ab38590295339817b0d26f344aa4932c3ced71b45b0c54b4a9"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9441b403be87be858db6a23edb493e7f694761acdc3343d5a0fcaafd304cbc9e"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colored"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6"
+dependencies = [
+ "is-terminal",
+ "lazy_static",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "config"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7"
+dependencies = [
+ "async-trait",
+ "json5",
+ "lazy_static",
+ "nom",
+ "pathdiff",
+ "ron",
+ "rust-ini",
+ "serde",
+ "serde_json",
+ "toml 0.5.11",
+ "yaml-rust",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "cookie"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24"
+dependencies = [
+ "aes-gcm",
+ "base64 0.21.2",
+ "hkdf",
+ "percent-encoding",
+ "rand 0.8.5",
+ "sha2",
+ "subtle",
+ "time 0.3.23",
+ "version_check",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "critical-section"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52"
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "typenum",
+]
+
+[[package]]
+name = "ctr"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "devise"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6eacefd3f541c66fc61433d65e54e0e46e0a029a819a7dbbc7a7b489e8a85f8"
+dependencies = [
+ "devise_codegen",
+ "devise_core",
+]
+
+[[package]]
+name = "devise_codegen"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8cf4b8dd484ede80fd5c547592c46c3745a617c8af278e2b72bea86b2dfed6"
+dependencies = [
+ "devise_core",
+ "quote",
+]
+
+[[package]]
+name = "devise_core"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35b50dba0afdca80b187392b24f2499a88c336d5a8493e4b4ccfb608708be56a"
+dependencies = [
+ "bitflags 2.3.3",
+ "proc-macro2",
+ "proc-macro2-diagnostics",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dlv-list"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "304e6508efa593091e97a9abbc10f90aa7ca635b6d2784feff3c89d41dd12272"
+
+[[package]]
+name = "earcutr"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0812b44697951d35fde8fcb0da81c9de7e809e825a66bbf1ecb79d9829d4ca3d"
+dependencies = [
+ "itertools",
+ "num-traits",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "figment"
+version = "0.10.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4547e226f4c9ab860571e070a9034192b3175580ecea38da34fcdb53a018c9a5"
+dependencies = [
+ "atomic",
+ "pear",
+ "serde",
+ "toml 0.7.6",
+ "uncased",
+ "version_check",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float_next_after"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generator"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e"
+dependencies = [
+ "cc",
+ "libc",
+ "log",
+ "rustversion",
+ "windows",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "geo"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1645cf1d7fea7dac1a66f7357f3df2677ada708b8d9db8e9b043878930095a96"
+dependencies = [
+ "earcutr",
+ "float_next_after",
+ "geo-types",
+ "geographiclib-rs",
+ "log",
+ "num-traits",
+ "robust",
+ "rstar",
+]
+
+[[package]]
+name = "geo-types"
+version = "0.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9705398c5c7b26132e74513f4ee7c1d7dafd786004991b375c172be2be0eecaa"
+dependencies = [
+ "approx",
+ "num-traits",
+ "rstar",
+ "serde",
+]
+
+[[package]]
+name = "geographiclib-rs"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea804e7bd3c6a4ca6a01edfa35231557a8a81d4d3f3e1e2b650d028c42592be"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "geojson"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5d728c1df1fbf328d74151efe6cb0586f79ee813346ea981add69bd22c9241b"
+dependencies = [
+ "geo-types",
+ "log",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "ghash"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40"
+dependencies = [
+ "opaque-debug",
+ "polyval",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "h2"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hash32"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heapless"
+version = "0.7.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743"
+dependencies = [
+ "atomic-polyfill",
+ "hash32",
+ "rustc_version",
+ "spin 0.9.8",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "inlinable_string"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb"
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json5"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1"
+dependencies = [
+ "pest",
+ "pest_derive",
+ "serde",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libm"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "loom"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
+dependencies = [
+ "cfg-if 1.0.0",
+ "generator",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memory_units"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "multer"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2"
+dependencies = [
+ "bytes",
+ "encoding_rs",
+ "futures-util",
+ "http",
+ "httparse",
+ "log",
+ "memchr",
+ "mime",
+ "spin 0.9.8",
+ "tokio",
+ "tokio-util",
+ "version_check",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "okapi"
+version = "0.7.0-rc.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce66b6366e049880a35c378123fddb630b1a1a3c37fa1ca70caaf4a09f6e2893"
+dependencies = [
+ "log",
+ "schemars",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-multimap"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
+dependencies = [
+ "dlv-list",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owning_ref"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e"
+dependencies = [
+ "owning_ref",
+ "parking_lot_core 0.2.14",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.8",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa"
+dependencies = [
+ "libc",
+ "rand 0.4.6",
+ "smallvec 0.6.14",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "smallvec 1.11.0",
+ "windows-targets",
+]
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "pear"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61a386cd715229d399604b50d1361683fe687066f42d56f54be995bc6868f71c"
+dependencies = [
+ "inlinable_string",
+ "pear_codegen",
+ "yansi 1.0.0-rc",
+]
+
+[[package]]
+name = "pear_codegen"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da9f0f13dac8069c139e8300a6510e3f4143ecf5259c60b116a9b271b4ca0d54"
+dependencies = [
+ "proc-macro2",
+ "proc-macro2-diagnostics",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pest"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d2d1d55045829d65aad9d389139882ad623b33b904e7c9f1b10c5b8927298e5"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f94bca7e7a599d89dea5dfa309e217e7906c3c007fb9c3299c40b10d6a315d3"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d490fe7e8556575ff6911e45567ab95e71617f43781e5c05490dc8d75c965c"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2674c66ebb4b4d9036012091b537aae5878970d6999f81a265034d85b136b341"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "polyval"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi 0.5.1",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proc-macro2-diagnostics"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+ "version_check",
+ "yansi 1.0.0-rc",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61ef7e18e8841942ddb1cf845054f8008410030a3997875d9e49b7a363063df1"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfaf0c85b766276c797f3791f5bc6d5bd116b41d53049af2789666b0c0bc9fa"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.3.3",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "base64 0.21.2",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "robust"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30"
+
+[[package]]
+name = "rocket"
+version = "0.5.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58734f7401ae5cfd129685b48f61182331745b357b96f2367f01aebaf1cc9cc9"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "atomic",
+ "binascii",
+ "bytes",
+ "either",
+ "figment",
+ "futures",
+ "indexmap 1.9.3",
+ "is-terminal",
+ "log",
+ "memchr",
+ "multer",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "ref-cast",
+ "rocket_codegen",
+ "rocket_http",
+ "serde",
+ "serde_json",
+ "state",
+ "tempfile",
+ "time 0.3.23",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "ubyte",
+ "version_check",
+ "yansi 0.5.1",
+]
+
+[[package]]
+name = "rocket_codegen"
+version = "0.5.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7093353f14228c744982e409259fb54878ba9563d08214f2d880d59ff2fc508b"
+dependencies = [
+ "devise",
+ "glob",
+ "indexmap 1.9.3",
+ "proc-macro2",
+ "quote",
+ "rocket_http",
+ "syn 2.0.26",
+ "unicode-xid",
+]
+
+[[package]]
+name = "rocket_cors"
+version = "0.6.0-alpha2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b12771b47f52e34d5d0e0e444aeba382863e73263cb9e18847e7d5b74aa2cbd0"
+dependencies = [
+ "http",
+ "log",
+ "regex",
+ "rocket",
+ "serde",
+ "serde_derive",
+ "unicase",
+ "unicase_serde",
+ "url",
+]
+
+[[package]]
+name = "rocket_http"
+version = "0.5.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936012c99162a03a67f37f9836d5f938f662e26f2717809761a9ac46432090f4"
+dependencies = [
+ "cookie",
+ "either",
+ "futures",
+ "http",
+ "hyper",
+ "indexmap 1.9.3",
+ "log",
+ "memchr",
+ "pear",
+ "percent-encoding",
+ "pin-project-lite",
+ "ref-cast",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "smallvec 1.11.0",
+ "stable-pattern",
+ "state",
+ "time 0.3.23",
+ "tokio",
+ "tokio-rustls",
+ "uncased",
+]
+
+[[package]]
+name = "rocket_okapi"
+version = "0.8.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "742098674565c8f0c35c77444f90344aafedebb71cfee9cdbf0185acc6b9cdb7"
+dependencies = [
+ "either",
+ "log",
+ "okapi",
+ "rocket",
+ "rocket_okapi_codegen",
+ "schemars",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rocket_okapi_codegen"
+version = "0.8.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c43f8edc57d88750a220b0ec1870a36c1106204ec99cc35131b49de3b954a4a"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "rocket_http",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ron"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"
+dependencies = [
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "serde",
+]
+
+[[package]]
+name = "rstar"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6"
+dependencies = [
+ "heapless",
+ "num-traits",
+ "smallvec 1.11.0",
+]
+
+[[package]]
+name = "rtz"
+version = "0.5.3"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bincode",
+ "chashmap",
+ "chrono",
+ "chrono-tz",
+ "clap",
+ "config",
+ "geo",
+ "geojson",
+ "getrandom",
+ "js-sys",
+ "log",
+ "pretty_assertions",
+ "rand 0.8.5",
+ "rayon",
+ "reqwest",
+ "rocket",
+ "rocket_cors",
+ "rocket_okapi",
+ "rtz-build",
+ "rtz-core",
+ "schemars",
+ "serde",
+ "serde_json",
+ "simple_logger",
+ "tokio",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wee_alloc",
+ "zip",
+]
+
+[[package]]
+name = "rtz-build"
+version = "0.2.6"
+dependencies = [
+ "rtz-core",
+]
+
+[[package]]
+name = "rtz-core"
+version = "0.1.4"
+dependencies = [
+ "anyhow",
+ "bincode",
+ "chashmap",
+ "geo",
+ "geojson",
+ "pretty_assertions",
+ "rayon",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "zip",
+]
+
+[[package]]
+name = "rust-ini"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
+dependencies = [
+ "cfg-if 1.0.0",
+ "ordered-multimap",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
+dependencies = [
+ "bitflags 2.3.3",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "schemars"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02c613288622e5f0c3fdc5dbd4db1c5fbe752746b1d1a56a0630b78fd00de44f"
+dependencies = [
+ "chrono",
+ "dyn-clone",
+ "indexmap 1.9.3",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars_derive"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109da1e6b197438deb6db99952990c7f959572794b80ff93707d55a232545e7c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+
+[[package]]
+name = "serde"
+version = "1.0.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simple_logger"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2230cd5c29b815c9b699fb610b49a5ed65588f3509d9f0108be3a885da629333"
+dependencies = [
+ "colored",
+ "log",
+ "time 0.3.23",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "stable-pattern"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "state"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
+dependencies = [
+ "loom",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if 1.0.0",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446"
+dependencies = [
+ "itoa",
+ "libc",
+ "num_threads",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
+dependencies = [
+ "autocfg",
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+dependencies = [
+ "indexmap 2.0.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec 1.11.0",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ubyte"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c81f0dae7d286ad0d9366d7679a77934cfc3cf3a8d67e82669794412b2368fe6"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "uncased"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68"
+dependencies = [
+ "serde",
+ "version_check",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicase_serde"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ef53697679d874d69f3160af80bc28de12730a985d57bdf2b47456ccb8b11f1"
+dependencies = [
+ "serde",
+ "unicase",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "universal-hash"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
+dependencies = [
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "virtue"
+version = "0.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b522f715ead3537dc57c9907899a08e461a8f1e87fc8414a4a89bbd9854289ff"
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "wee_alloc"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "memory_units",
+ "winapi",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "yansi"
+version = "1.0.0-rc"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ee746ad3851dd3bc40e4a028ab3b00b99278d929e48957bcb2d111874a7e43e"
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
+dependencies = [
+ "aes",
+ "byteorder",
+ "bzip2",
+ "constant_time_eq",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "hmac",
+ "pbkdf2",
+ "sha1",
+ "time 0.3.23",
+ "zstd",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.8+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/tools/misc/rtz/default.nix b/nixpkgs/pkgs/tools/misc/rtz/default.nix
new file mode 100644
index 000000000000..ba66935d0a95
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rtz/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, bzip2
+, openssl
+, zstd
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rtz";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "twitchax";
+    repo = "rtz";
+    rev = "v${version}";
+    hash = "sha256-cc5yGZ4zHB9V//ywvKv9qgKGDpKotzkJKbfwv1rK2tM=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "bincode-2.0.0-rc.3" = "sha256-YCoTnIKqRObeyfTanjptTYeD9U2b2c+d4CJFWIiGckI=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    bzip2
+    openssl
+    zstd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  buildFeatures = [ "web" ];
+
+  env = {
+    # requires nightly features
+    RUSTC_BOOTSTRAP = true;
+  };
+
+  meta = with lib; {
+    description = "A tool to easily work with timezone lookups via a binary, a library, or a server";
+    homepage = "https://github.com/twitchax/rtz";
+    changelog = "https://github.com/twitchax/rtz/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rtz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rust-motd/default.nix b/nixpkgs/pkgs/tools/misc/rust-motd/default.nix
new file mode 100644
index 000000000000..26b582e5e944
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rust-motd/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-motd";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "rust-motd";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-x3dx4PdYSYd7wA/GGj9QYC8rK33FWATs2SnaOagGE80=";
+  };
+
+  cargoHash = "sha256-7YvzVG3c10EJET+659F1fwgZ0SmBKMdAWD6LeWnGrNI=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  OPENSSL_NO_VENDOR = 1;
+
+  meta = with lib; {
+    description = "Beautiful, useful MOTD generation with zero runtime dependencies";
+    homepage = "https://github.com/rust-motd/rust-motd";
+    changelog = "https://github.com/rust-motd/rust-motd/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rust-motd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rustypaste-cli/default.nix b/nixpkgs/pkgs/tools/misc/rustypaste-cli/default.nix
new file mode 100644
index 000000000000..93b5340abcc5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rustypaste-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustypaste-cli";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "rustypaste-cli";
+    rev = "v${version}";
+    hash = "sha256-FfAX7a94EY2Y+FHE33UdxbLbFlSq69flvx3uPYlvkT4=";
+  };
+
+  cargoHash = "sha256-FVhOxJE1sI9Ka2teDU8xnbuDvtdIwubuE7+3ypo4+yQ=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "A CLI tool for rustypaste";
+    homepage = "https://github.com/orhun/rustypaste-cli";
+    changelog = "https://github.com/orhun/rustypaste-cli/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rpaste";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rw/default.nix b/nixpkgs/pkgs/tools/misc/rw/default.nix
new file mode 100644
index 000000000000..e77009f7969f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rw/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "rw";
+  version = "1.0";
+
+  src = fetchurl {
+    url = "https://sortix.org/rw/release/rw-portable-${version}.tar.gz";
+    # Use hash provided by upstream
+    sha256 = "50009730e36991dfe579716f91f4f616f5ba05ffb7bf69c03d41bf305ed93b6d";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://sortix.org/rw";
+    description = "Block device and byte copying program similar to dd";
+    longDescription = ''
+      rw is a command line program which copies information between files
+      or byte streams. The rw command is designed to be a replacement for
+      dd with standard style command line flags.
+    '';
+    license = licenses.isc;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "rw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sacad/default.nix b/nixpkgs/pkgs/tools/misc/sacad/default.nix
new file mode 100644
index 000000000000..cd948505301e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sacad/default.nix
@@ -0,0 +1,39 @@
+{ lib, python3Packages, fetchPypi, jpegoptim, optipng }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sacad";
+  version = "2.7.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-ZJPcxKc0G8V7x9nyzKXaXpfNpMB3/qRoX0d4lfBZTFY=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    aiohttp
+    appdirs
+    bitarray
+    cssselect
+    fake-useragent
+    lxml
+    mutagen
+    pillow
+    tqdm
+    unidecode
+    web-cache
+    jpegoptim
+    optipng
+  ];
+
+  # tests require internet connection
+  doCheck = false;
+
+  pythonImportsCheck = [ "sacad" ];
+
+  meta = with lib; {
+    description = "Smart Automatic Cover Art Downloader";
+    homepage = "https://github.com/desbma/sacad";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ moni ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sagoin/default.nix b/nixpkgs/pkgs/tools/misc/sagoin/default.nix
new file mode 100644
index 000000000000..b3fdd6e99405
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sagoin/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sagoin";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "figsoda";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-/WNUDlJxxUGAtykX44A9EqMdBNwVKsGkPnq9pATmLEQ=";
+  };
+
+  cargoHash = "sha256-YGQZR5n71srD/8QrBUOoEe72nPm0cwgk5zrzoXy2Hx0=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  postInstall = ''
+    installManPage artifacts/sagoin.1
+    installShellCompletion artifacts/sagoin.{bash,fish} --zsh artifacts/_sagoin
+  '';
+
+  GEN_ARTIFACTS = "artifacts";
+
+  meta = with lib; {
+    description = "A command-line submission tool for the UMD CS Submit Server";
+    homepage = "https://github.com/figsoda/sagoin";
+    changelog = "https://github.com/figsoda/sagoin/blob/v${version}/CHANGELOG.md";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "sagoin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sam-ba/default.nix b/nixpkgs/pkgs/tools/misc/sam-ba/default.nix
new file mode 100644
index 000000000000..6a383cd4fc4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sam-ba/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchzip, glib, zlib, libglvnd, python3, autoPatchelfHook }:
+
+stdenv.mkDerivation rec {
+  version = "3.5";
+  pname = "sam-ba";
+
+  src = fetchzip {
+    url = "https://ww1.microchip.com/downloads/en/DeviceDoc/sam-ba_${version}-linux_x86_64.tar.gz";
+    sha256 = "1k0nbgyc98z94nphm2q7s82b274clfnayf4a2kv93l5594rzdbp1";
+  };
+
+  buildInputs = [
+    glib
+    libglvnd
+    zlib
+
+    (python3.withPackages (ps: [ps.pyserial]))
+  ];
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin/" \
+             "$out/opt/sam-ba/"
+    cp -a . "$out/opt/sam-ba/"
+    ln -sr "$out/opt/sam-ba/sam-ba" "$out/bin/"
+    ln -sr "$out/opt/sam-ba/multi_sam-ba.py" "$out/bin/"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Programming tools for Atmel SAM3/7/9 ARM-based microcontrollers";
+    longDescription = ''
+      Atmel SAM-BA software provides an open set of tools for programming the
+      Atmel SAM3, SAM7 and SAM9 ARM-based microcontrollers.
+    '';
+    # Alternatively: https://www.microchip.com/en-us/development-tool/SAM-BA-In-system-Programmer
+    homepage = "http://www.at91.com/linux4sam/bin/view/Linux4SAM/SoftwareTools";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.gpl2Only;
+    platforms = [ "x86_64-linux" ];
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sanctity/default.nix b/nixpkgs/pkgs/tools/misc/sanctity/default.nix
new file mode 100644
index 000000000000..7c892bb16894
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sanctity/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitea }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sanctity";
+  version = "1.3.1";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-y6xj4A5SHcW747aFE9TfuurNnuUxjTUeKJmzxeiWqVc=";
+  };
+
+  cargoSha256 = "sha256-co58YBeFjP9DKzxDegQI7txuJ1smqJxdlRLae+Ppwh0=";
+
+  meta = with lib; {
+    description = "Test the 16 terminal colors in all combinations";
+    homepage = "https://codeberg.org/annaaurora/sanctity";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+    mainProgram = "sanctity";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/savepagenow/default.nix b/nixpkgs/pkgs/tools/misc/savepagenow/default.nix
new file mode 100644
index 000000000000..da29fa3b05a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/savepagenow/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "savepagenow";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "pastpages";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1lz6rc47cds9rb35jdf8n13gr61wdkh5jqzx4skikm1yrqkwjyhm";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ click requests ];
+
+  # requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A simple Python wrapper for archive.org's \"Save Page Now\" capturing service";
+    homepage = "https://github.com/pastpages/savepagenow";
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "savepagenow";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scanmem/default.nix b/nixpkgs/pkgs/tools/misc/scanmem/default.nix
new file mode 100644
index 000000000000..817e713b229f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scanmem/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, gobject-introspection
+, intltool
+, wrapGAppsHook
+, procps
+, python3
+, readline
+}:
+
+stdenv.mkDerivation rec {
+  pname = "scanmem";
+  version = "0.17";
+
+  src = fetchFromGitHub {
+    owner  = "scanmem";
+    repo   = "scanmem";
+    rev    = "v${version}";
+    sha256 = "17p8sh0rj8yqz36ria5bp48c8523zzw3y9g8sbm2jwq7sc27i7s9";
+  };
+
+  nativeBuildInputs = [ autoreconfHook gobject-introspection intltool wrapGAppsHook ];
+  buildInputs = [ readline python3 ];
+  configureFlags = ["--enable-gui"];
+
+  # we don't need to wrap the main executable, just the GUI
+  dontWrapGApps = true;
+
+  fixupPhase = ''
+    runHook preFixup
+
+    # replace the upstream launcher which does stupid things
+    # also add procps because it shells out to `ps` and expects it to be procps
+    makeWrapper ${python3}/bin/python3 $out/bin/gameconqueror \
+      "''${gappsWrapperArgs[@]}" \
+      --set PYTHONPATH "${python3.pkgs.makePythonPath [ python3.pkgs.pygobject3 ]}" \
+      --prefix PATH : "${procps}/bin" \
+      --add-flags "$out/share/gameconqueror/GameConqueror.py"
+
+    runHook postFixup
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/scanmem/scanmem";
+    description = "Memory scanner for finding and poking addresses in executing processes";
+    maintainers = [ ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scdl/default.nix b/nixpkgs/pkgs/tools/misc/scdl/default.nix
new file mode 100644
index 000000000000..611326d55403
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scdl/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "scdl";
+  version = "2.7.3";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "60284b7b058040d4847f2e4b0ab906b10e959d51f976a0188641e8e10685474f";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    docopt
+    mutagen
+    termcolor
+    requests
+    clint
+    pathvalidate
+    soundcloud-v2
+  ];
+
+  # No tests in repository
+  doCheck = false;
+
+  pythonImportsCheck = [ "scdl" ];
+
+  meta = with lib; {
+    description = "Download Music from Souncloud";
+    homepage = "https://github.com/flyingrub/scdl";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ marsam ];
+    mainProgram = "scdl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scfbuild/default.nix b/nixpkgs/pkgs/tools/misc/scfbuild/default.nix
new file mode 100644
index 000000000000..e881a288f959
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scfbuild/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildPythonApplication, fetchFromGitHub, python, pyyaml, fonttools, fontforge }:
+
+buildPythonApplication {
+  pname = "scfbuild";
+  version = "2.0.0";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "13rac1";
+    repo = "scfbuild";
+    rev = "6d84339512a892972185d894704efa67dd82e87a";
+    sha256 = "0wkyzkhshlax9rvdmn441gv87n9abfr0qqmgs8bkg9kbcjb4bhad";
+  };
+
+  propagatedBuildInputs = [ pyyaml fonttools fontforge ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/${python.sitePackages}
+    cp -r scfbuild $out/${python.sitePackages}
+    cp -r bin $out
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "SVGinOT color font builder";
+    homepage = "https://github.com/13rac1/scfbuild";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
+    mainProgram = "scfbuild";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/screen/default.nix b/nixpkgs/pkgs/tools/misc/screen/default.nix
new file mode 100644
index 000000000000..9d6d302634f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/screen/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, autoreconfHook
+, ncurses
+, libxcrypt
+, utmp
+, pam ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "screen";
+  version = "4.9.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/screen/${pname}-${version}.tar.gz";
+    hash = "sha256-Js7z48QlccDUhK1vrxEMXBUJH7+HKwb6eqR2bHQFrGk=";
+  };
+
+  configureFlags = [
+    "--enable-telnet"
+    "--enable-pam"
+    "--with-sys-screenrc=/etc/screenrc"
+    "--enable-colors256"
+    "--enable-rxvt_osc"
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+  buildInputs = [
+    ncurses
+    libxcrypt
+  ] ++ lib.optional stdenv.isLinux pam
+    ++ lib.optional stdenv.isDarwin utmp;
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/screen/";
+    description = "A window manager that multiplexes a physical terminal";
+    license = licenses.gpl2Plus;
+
+    longDescription =
+      '' GNU Screen is a full-screen window manager that multiplexes a physical
+         terminal between several processes, typically interactive shells.
+         Each virtual terminal provides the functions of the DEC VT100
+         terminal and, in addition, several control functions from the ANSI
+         X3.64 (ISO 6429) and ISO 2022 standards (e.g., insert/delete line
+         and support for multiple character sets).  There is a scrollback
+         history buffer for each virtual terminal and a copy-and-paste
+         mechanism that allows the user to move text regions between windows.
+         When screen is called, it creates a single window with a shell in it
+         (or the specified command) and then gets out of your way so that you
+         can use the program as you normally would.  Then, at any time, you
+         can create new (full-screen) windows with other programs in them
+         (including more shells), kill the current window, view a list of the
+         active windows, turn output logging on and off, copy text between
+         windows, view the scrollback history, switch between windows, etc.
+         All windows run their programs completely independent of each other.
+         Programs continue to run when their window is currently not visible
+         and even when the whole screen session is detached from the users
+         terminal.
+      '';
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/screenfetch/default.nix b/nixpkgs/pkgs/tools/misc/screenfetch/default.nix
new file mode 100644
index 000000000000..e3ad0e5c51c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/screenfetch/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, coreutils, gawk, procps, gnused
+, bc, findutils, xdpyinfo, xprop, gnugrep, ncurses, pciutils
+, darwin
+}:
+
+let
+  path = lib.makeBinPath ([
+    coreutils gawk gnused findutils
+    gnugrep ncurses bc pciutils
+  ] ++ lib.optionals stdenv.isLinux [
+    procps
+    xdpyinfo
+    xprop
+  ] ++ lib.optionals stdenv.isDarwin (with darwin; [
+    adv_cmds
+    DarwinTools
+    system_cmds
+    "/usr" # some commands like defaults is not available to us
+  ]));
+
+in stdenv.mkDerivation rec {
+  pname = "screenfetch";
+  version = "3.9.1";
+
+  src = fetchFromGitHub {
+    owner  = "KittyKatt";
+    repo   = "screenFetch";
+    rev    = "v${version}";
+    sha256 = "04l8aqr474pb115nagn9f6y48jw92n1qfszgw7dbhgl4mpn95lcr";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm 0755 screenfetch-dev $out/bin/screenfetch
+    install -Dm 0644 screenfetch.1 $out/share/man/man1/screenfetch.1
+    install -Dm 0644 -t $out/share/doc/screenfetch CHANGELOG COPYING README.mkdn TODO
+
+    # Fix all of the dependencies of screenfetch
+    patchShebangs $out/bin/screenfetch
+    wrapProgram "$out/bin/screenfetch" \
+      --prefix PATH : ${path}
+  '';
+
+  meta = with lib; {
+    description = "Fetches system/theme information in terminal for Linux desktop screenshots";
+    longDescription = ''
+      screenFetch is a "Bash Screenshot Information Tool". This handy Bash
+      script can be used to generate one of those nifty terminal theme
+      information + ASCII distribution logos you see in everyone's screenshots
+      nowadays. It will auto-detect your distribution and display an ASCII
+      version of that distribution's logo and some valuable information to the
+      right. There are options to specify no ascii art, colors, taking a
+      screenshot upon displaying info, and even customizing the screenshot
+      command! This script is very easy to add to and can easily be extended.
+    '';
+    license = licenses.gpl3;
+    homepage = "https://github.com/KittyKatt/screenFetch";
+    maintainers = with maintainers; [ relrod ];
+    platforms = platforms.all;
+    mainProgram = "screenfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/script-directory/default.nix b/nixpkgs/pkgs/tools/misc/script-directory/default.nix
new file mode 100644
index 000000000000..59ede7bdccd9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/script-directory/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, installShellFiles
+, patsh
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "script-directory";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "ianthehenry";
+    repo = "sd";
+    rev = "v${version}";
+    hash = "sha256-X5RWCJQUqDnG2umcCk5KS6HQinTJVapBHp6szEmbc4U=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    patsh
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    patsh -f sd
+    install -Dt "$out/bin" sd
+    installShellCompletion --zsh _sd
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A cozy nest for your scripts";
+    homepage = "https://github.com/ianthehenry/sd";
+    changelog = "https://github.com/ianthehenry/sd/tree/${src.rev}#changelog";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ janik ];
+    mainProgram = "sd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scrub/default.nix b/nixpkgs/pkgs/tools/misc/scrub/default.nix
new file mode 100644
index 000000000000..2fc2b43ea29c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scrub/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool }:
+
+stdenv.mkDerivation rec {
+  pname = "scrub";
+  version = "2.6.1";
+
+  src = fetchFromGitHub {
+    owner = "chaos";
+    repo = "scrub";
+    rev = version;
+    sha256 = "0ndcri2ddzqlsxvy1b607ajyd4dxpiagzx331yyi7hf3ijph129f";
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ libtool ];
+
+  preConfigure = "./autogen.sh";
+
+  meta = with lib; {
+    description = "Disk overwrite utility";
+    homepage = "https://github.com/chaos/scrub";
+    changelog = "https://raw.githubusercontent.com/chaos/scrub/master/NEWS";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ j0hax ];
+    platforms = platforms.unix;
+    mainProgram = "scrub";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sd-mux-ctrl/default.nix b/nixpkgs/pkgs/tools/misc/sd-mux-ctrl/default.nix
new file mode 100644
index 000000000000..4f832a35eb30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sd-mux-ctrl/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchgit, cmake, pkg-config, libftdi1, popt}:
+
+stdenv.mkDerivation rec {
+  pname = "sd-mux-ctrl-unstable";
+  version = "2020-02-17";
+
+  src = fetchgit {
+    url = "https://git.tizen.org/cgit/tools/testlab/sd-mux";
+    rev = "9dd189d973da64e033a0c5c2adb3d94b23153d94";
+    sha256 = "0fxl8m1zkkyxkc2zi8930m0njfgnd04a22acny6vljnzag2shjvg";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ libftdi1 popt ];
+
+  postInstall = ''
+    install -D -m 644 ../doc/man/sd-mux-ctrl.1 $out/share/man/man1/sd-mux-ctrl.1
+  '';
+
+  meta = with lib; {
+    description = "Tool for controlling multiple sd-mux devices";
+    homepage = "https://wiki.tizen.org/SD_MUX";
+    license = licenses.asl20;
+    maintainers =  with maintainers; [ sarcasticadmin ];
+    platforms = platforms.unix;
+    mainProgram = "sd-mux-ctrl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sdate/default.nix b/nixpkgs/pkgs/tools/misc/sdate/default.nix
new file mode 100644
index 000000000000..71ab04c807d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sdate/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "sdate";
+  version = "0.7";
+
+  src = fetchFromGitHub {
+    owner = "ChristophBerg";
+    repo = "sdate";
+    rev = version;
+    hash = "sha256-jkwe+bSBa0p1Xzfetsdpw0RYw/gSRxnY2jBOzC5HtJ8=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    homepage = "https://www.df7cb.de/projects/sdate";
+    description = "Eternal september version of the date program";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ edef ];
+    platforms = platforms.all;
+    mainProgram = "sdate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix b/nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix
new file mode 100644
index 000000000000..d6c336990cf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, SDL, SDL2, ncurses, docbook_xsl, git }:
+
+stdenv.mkDerivation {
+  pname = "sdl-jstest";
+  version = "2018-06-15";
+
+  src = fetchFromGitHub {
+    owner = "Grumbel";
+    repo = "sdl-jstest";
+    rev = "aafbdb1ed3e687583037ba55ae88b1210d6ce98b";
+    sha256 = "sha256-Mw+ENOVZ0O8WercdDNLAAkNMPZ2NyxSa+nMtgNmXjFw=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ SDL SDL2 ncurses ];
+  nativeBuildInputs = [ cmake pkg-config docbook_xsl git ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Grumbel/sdl-jstest";
+    description = "Simple SDL joystick test application for the console";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/seaborn-data/default.nix b/nixpkgs/pkgs/tools/misc/seaborn-data/default.nix
new file mode 100644
index 000000000000..5ac78f1eef25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/seaborn-data/default.nix
@@ -0,0 +1,41 @@
+{ lib, newScope, fetchFromGitHub, unzip, stdenvNoCC }:
+let
+  base = {
+    version = "unstable-2023-01-26";
+    dontBuild = true;
+    meta = with lib; {
+      description = "Data repository for seaborn examples";
+      homepage = "https://github.com/mwaskom/seaborn-data";
+      platforms = platforms.all;
+      maintainers = with maintainers; [ mbalatsko ];
+    };
+  };
+  makeSeabornDataPackage = {pname, hash}:
+    let
+      src = fetchFromGitHub {
+        owner = "mwaskom";
+        repo = "seaborn-data";
+        rev = "2b29313169bf8dfa77d8dc930f7bd3eba559a906";
+        inherit hash;
+        sparseCheckout = [ "${pname}.csv" ];
+      };
+    in
+    stdenvNoCC.mkDerivation (base // {
+      inherit pname src;
+      version = base.version;
+      installPhase = ''
+        runHook preInstall
+
+        mkdir -p $out
+        cp ${pname}.csv $out/${pname}.csv
+
+        runHook postInstall
+      '';
+    });
+in
+lib.makeScope newScope (self: {
+  exercise = makeSeabornDataPackage ({
+    pname = "exercise";
+    hash = "sha256-icoc2HkG303A8hCoW6kZxD5qhOKIpdxErLr288o04wE=";
+  });
+})
diff --git a/nixpkgs/pkgs/tools/misc/see/default.nix b/nixpkgs/pkgs/tools/misc/see/default.nix
new file mode 100644
index 000000000000..592bc59262ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/see/default.nix
@@ -0,0 +1,32 @@
+{ lib, python3, fetchFromGitHub }:
+
+python3.pkgs.buildPythonApplication {
+  pname = "see";
+  version = "unstable-2023-03-19";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Textualize";
+    repo = "textualize-see";
+    rev = "eef61dd348178ec60c5b0a01062e0b621eb57315";
+    hash = "sha256-SqjDHcFKWbk4ouWkhGohDl5kGjM/9fzqFDexVcaY1gw=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    colorama
+    toml
+  ];
+
+  meta = {
+    description = "A CLI tool to open files in the terminal";
+    homepage = "https://github.com/Textualize/textualize-see";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ anselmschueler ];
+    mainProgram = "see";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/semiphemeral/default.nix b/nixpkgs/pkgs/tools/misc/semiphemeral/default.nix
new file mode 100644
index 000000000000..7208dca81176
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/semiphemeral/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "semiphemeral";
+  version = "0.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-KRi3zfRWGRZJjQ6KPqBI9wQ6yU8Ohx0TDtA5qoak35U=";
+  };
+
+  doCheck = false; # upstream has no tests
+
+  pythonImportsCheck = [ "semiphemeral" ];
+
+  propagatedBuildInputs = with python3.pkgs; [ click sqlalchemy flask tweepy colorama ];
+
+  meta = with lib; {
+    description = "Automatically delete your old tweets, except for the ones you want to keep";
+    homepage = "https://github.com/micahflee/semiphemeral";
+    license = licenses.mit;
+    maintainers = with maintainers; [ amanjeev ];
+    mainProgram = "semiphemeral";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sensible-utils/default.nix b/nixpkgs/pkgs/tools/misc/sensible-utils/default.nix
new file mode 100644
index 000000000000..238b9f400b89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sensible-utils/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitLab, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "sensible-utils";
+  version = "0.0.18";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "debian";
+    repo = "sensible-utils";
+    rev = "debian/${version}";
+    sha256 = "sha256-fZJKPnEkPfo/3luUcHzAmGB2k1nkA4ATEQMSz0aN0YY=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontConfigure = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    cp sensible-browser sensible-editor sensible-pager sensible-terminal $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "A collection of utilities used by programs to sensibly select and spawn an appropriate browser, editor, or pager";
+    longDescription = ''
+       The specific utilities included are:
+       - sensible-browser
+       - sensible-editor
+       - sensible-pager
+    '';
+    homepage = "https://salsa.debian.org/debian/sensible-utils";
+    changelog = "https://salsa.debian.org/debian/sensible-utils/-/tags";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pbek ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/serverspec/Gemfile b/nixpkgs/pkgs/tools/misc/serverspec/Gemfile
new file mode 100644
index 000000000000..97bc14a34e9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/serverspec/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'serverspec'
diff --git a/nixpkgs/pkgs/tools/misc/serverspec/Gemfile.lock b/nixpkgs/pkgs/tools/misc/serverspec/Gemfile.lock
new file mode 100644
index 000000000000..dc1fd7d44e30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/serverspec/Gemfile.lock
@@ -0,0 +1,45 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    diff-lcs (1.5.0)
+    multi_json (1.15.0)
+    net-scp (4.0.0)
+      net-ssh (>= 2.6.5, < 8.0.0)
+    net-ssh (7.1.0)
+    net-telnet (0.1.1)
+    rspec (3.12.0)
+      rspec-core (~> 3.12.0)
+      rspec-expectations (~> 3.12.0)
+      rspec-mocks (~> 3.12.0)
+    rspec-core (3.12.1)
+      rspec-support (~> 3.12.0)
+    rspec-expectations (3.12.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.12.0)
+    rspec-its (1.3.0)
+      rspec-core (>= 3.0.0)
+      rspec-expectations (>= 3.0.0)
+    rspec-mocks (3.12.5)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.12.0)
+    rspec-support (3.12.0)
+    serverspec (2.42.2)
+      multi_json
+      rspec (~> 3.0)
+      rspec-its
+      specinfra (~> 2.72)
+    sfl (2.3)
+    specinfra (2.85.0)
+      net-scp
+      net-ssh (>= 2.7)
+      net-telnet (= 0.1.1)
+      sfl
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  serverspec!
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/serverspec/default.nix b/nixpkgs/pkgs/tools/misc/serverspec/default.nix
new file mode 100644
index 000000000000..28196efc18a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/serverspec/default.nix
@@ -0,0 +1,20 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "serverspec";
+  gemdir = ./.;
+
+  inherit ruby;
+
+  exes = ["serverspec-init"];
+
+  passthru.updateScript = bundlerUpdateScript "serverspec";
+
+  meta = with lib; {
+    description = "RSpec tests for your servers configured by CFEngine, Puppet, Ansible, Itamae or anything else";
+    homepage = "https://serverspec.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dylanmtaylor ];
+    mainProgram = "serverspec-init";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/serverspec/gemset.nix b/nixpkgs/pkgs/tools/misc/serverspec/gemset.nix
new file mode 100644
index 000000000000..353b122ec810
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/serverspec/gemset.nix
@@ -0,0 +1,150 @@
+{
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwvjahnp7cpmracd8x732rjgnilqv2sx7d1gfrysslc3h039fa9";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1si2nq9l6jy5n2zw1q59a5gaji7v9vhy8qx08h4fg368906ysbdk";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yx0pb5fmziz92bw8qzbh8vf20lr56nd3s6q8h0gsgr307lki687";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  net-telnet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qxznpwmc3hs51b76wqx2w29r158gzzh8719kv2gpi56844c8fx";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "171rc90vcgjl8p1bdrqa92ymrj8a87qf6w20x05xq29mljcigi6c";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0da45cvllbv39sdbsl65vp5djb2xf5m10mxc9jm7rsqyyxjw4h1f";
+      type = "gem";
+    };
+    version = "3.12.1";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03ba3lfdsj9zl00v1yvwgcx87lbadf87livlfa5kgqssn9qdnll6";
+      type = "gem";
+    };
+    version = "3.12.2";
+  };
+  rspec-its = {
+    dependencies = ["rspec-core" "rspec-expectations"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zafd70gxly5i0s00nky14sj2n92dnj3xpj83ysl3c2wx0119ad";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hfm17xakfvwya236graj6c2arr4sb9zasp35q5fykhyz8mhs0w2";
+      type = "gem";
+    };
+    version = "3.12.5";
+  };
+  rspec-support = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12y52zwwb3xr7h91dy9k3ndmyyhr3mjcayk0nnarnrzz8yr48kfx";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  serverspec = {
+    dependencies = ["multi_json" "rspec" "rspec-its" "specinfra"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kqx84yspy75z517wf32mz2hr4bqmq33y46zik57rn7bq2pj39xx";
+      type = "gem";
+    };
+    version = "2.42.2";
+  };
+  sfl = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qm4hvhq9pszi9zs1cl9qgwx1n4wxq0af0hq9sbf6qihqd8rwwwr";
+      type = "gem";
+    };
+    version = "2.3";
+  };
+  specinfra = {
+    dependencies = ["net-scp" "net-ssh" "net-telnet" "sfl"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19kkryvxnci7qd7rq5m3nl3xazy452bcg35a709kfggpfm4c6r38";
+      type = "gem";
+    };
+    version = "2.85.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/setconf/default.nix b/nixpkgs/pkgs/tools/misc/setconf/default.nix
new file mode 100644
index 000000000000..8384617e5e5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/setconf/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+}:
+
+buildPythonApplication rec {
+  pname = "setconf";
+  version = "0.7.7";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "xyproto";
+    repo = "setconf";
+    rev = version;
+    hash = "sha256-HYZdDtDlGrT3zssDdMW3559hhC+cPy8qkmM8d9zEa1A=";
+  };
+
+  meta = {
+    homepage = "https://github.com/xyproto/setconf";
+    description = "A small utility for changing settings in configuration textfiles";
+    changelog = "https://github.com/xyproto/setconf/releases/tag/${version}";
+    maintainers = [ lib.maintainers.AndersonTorres ];
+    mainProgram = "setconf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sfeed/default.nix b/nixpkgs/pkgs/tools/misc/sfeed/default.nix
new file mode 100644
index 000000000000..c12ddec63c94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sfeed/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchgit, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "sfeed";
+  version = "2.0";
+
+  src = fetchgit {
+    url = "git://git.codemadness.org/sfeed";
+    rev = version;
+    sha256 = "sha256-DbzJWi9wAc7w2Z0bQt5PEFOuu9L3xzNrJvCocvCer34=";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "RANLIB:=$(RANLIB)" "SFEED_CURSES_LDFLAGS:=-lncurses" ]
+    # use macOS's strlcat() and strlcpy() instead of vendored ones
+    ++ lib.optional stdenv.isDarwin "COMPATOBJ:=";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  # otherwise does not find SIGWINCH
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
+
+  meta = with lib; {
+    homepage = "https://codemadness.org/sfeed-simple-feed-parser.html";
+    description = "A RSS and Atom parser (and some format programs)";
+    longDescription = ''
+      It converts RSS or Atom feeds from XML to a TAB-separated file. There are
+      formatting programs included to convert this TAB-separated format to
+      various other formats. There are also some programs and scripts included
+      to import and export OPML and to fetch, filter, merge and order feed
+      items.
+    '';
+    license = licenses.isc;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sfz/default.nix b/nixpkgs/pkgs/tools/misc/sfz/default.nix
new file mode 100644
index 000000000000..41841d2ef2b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sfz/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sfz";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "weihanglo";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-mKH1vgk+3tZEnjJRkfa0dDR383VN1VLNd3HEzC7f8YI=";
+  };
+
+  cargoSha256 = "sha256-MgbK39xAr8g9F+1MXZiw5rE/PsgQPcLZ2ZV6LiQbA24=";
+
+  # error: Found argument '--test-threads' which wasn't expected, or isn't valid in this context
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Simple static file serving command-line tool written in Rust";
+    homepage = "https://github.com/weihanglo/sfz";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "sfz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shadowenv/Cargo.lock.patch b/nixpkgs/pkgs/tools/misc/shadowenv/Cargo.lock.patch
new file mode 100644
index 000000000000..d1866991cea7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shadowenv/Cargo.lock.patch
@@ -0,0 +1,13 @@
+diff --git c/Cargo.lock i/Cargo.lock
+index fb6ef6e..347b404 100644
+--- c/Cargo.lock
++++ i/Cargo.lock
+@@ -1168,7 +1168,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "shadowenv"
+-version = "2.1.0"
++version = "2.1.1"
+ dependencies = [
+  "atty",
+  "blake2",
diff --git a/nixpkgs/pkgs/tools/misc/shadowenv/default.nix b/nixpkgs/pkgs/tools/misc/shadowenv/default.nix
new file mode 100644
index 000000000000..06b7cb4e82c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shadowenv/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, installShellFiles, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shadowenv";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "Shopify";
+    repo = pname;
+    rev = version;
+    hash = "sha256-NKqoeJ2sejbe7Gghk3H7oJtP16SX1PcIIjsh/bZdTfQ=";
+  };
+
+  cargoPatches = [ ./Cargo.lock.patch ];
+
+  cargoHash = "sha256-CGAwb+UduM2QKne2bPntOcFnaUQN/3uUANc6z7f/Oig=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  postInstall = ''
+    installManPage man/man1/shadowenv.1
+    installManPage man/man5/shadowlisp.5
+    installShellCompletion --bash sh/completions/shadowenv.bash
+    installShellCompletion --fish sh/completions/shadowenv.fish
+    installShellCompletion --zsh sh/completions/_shadowenv
+  '';
+
+  preCheck = ''
+    HOME=$TMPDIR
+  '';
+
+  meta = with lib; {
+    homepage = "https://shopify.github.io/shadowenv/";
+    description = "reversible directory-local environment variable manipulations";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "shadowenv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shallot/default.nix b/nixpkgs/pkgs/tools/misc/shallot/default.nix
new file mode 100644
index 000000000000..4fbd07f38e32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shallot/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "shallot";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "katmagic";
+    repo = "Shallot";
+    rev = "shallot-${version}";
+    sha256 = "0cjafdxvjkwb9vyifhh11mw0la7yfqswqwqmrfp1fy9jl7m0il9k";
+  };
+
+  buildInputs = [ openssl ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/katmagic/Shallot/commit/c913088dfaaaf249494514f20a62f2a17b5c6606.patch";
+      sha256 = "19l1ppbxpdb0736f7plhybj08wh6rqk1lr3bxsp8jpzpnkh114b2";
+    })
+    (fetchpatch {
+      url = "https://github.com/katmagic/Shallot/commit/cd6628d97b981325e700a38f408a43df426fd569.patch";
+      sha256 = "1gaffp5wp1l5p2qdk0ix3i5fhzpx4xphl0haa6ajhqn8db7hbr9y";
+    })
+    (fetchpatch {
+      url = "https://github.com/katmagic/Shallot/commit/5c7c1ccecbbad5a121c50ba7153cbbee7ee0ebf9.patch";
+      sha256 = "1zmll4iqz39zwk8vj40n1dpvyq3403l64p2127gsjgh2l2v91s4k";
+    })
+  ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: src/shallot.o:(.bss+0x8): multiple definition of `lucky_thread'; src/error.o:(.bss+0x8): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./shallot $out/bin/
+  '';
+
+  meta = {
+    description = "Allows you to create customized .onion addresses for your hidden service";
+
+    license = lib.licenses.mit;
+    homepage = "https://github.com/katmagic/Shallot";
+    platforms = lib.platforms.linux;
+    mainProgram = "shallot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sharedown/default.nix b/nixpkgs/pkgs/tools/misc/sharedown/default.nix
new file mode 100644
index 000000000000..c3e87328c1fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sharedown/default.nix
@@ -0,0 +1,127 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+, ffmpeg
+, yt-dlp
+, libsecret
+, python3
+, pkg-config
+, nodejs
+, electron
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, yarn2nix-moretea
+, fetchYarnDeps
+, chromium
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "Sharedown";
+  version = "5.3.1";
+
+  src = fetchFromGitHub {
+    owner = "kylon";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-llQt3m/qu7v5uQIfA1yxl2JZiFafk6sPgcvrIpQy/DI=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "Sharedown";
+      exec = "Sharedown";
+      icon = "Sharedown";
+      comment = "An Application to save your Sharepoint videos for offline usage.";
+      desktopName = "Sharedown";
+      categories = [ "Network" "Archiving" ];
+    })
+  ];
+
+  dontBuild = true;
+
+  installPhase =
+    let
+      binPath = lib.makeBinPath ([
+        ffmpeg
+        yt-dlp
+      ]);
+
+      modules = yarn2nix-moretea.mkYarnModules rec {
+        name = "${pname}-modules-${version}";
+        inherit pname version;
+
+        yarnFlags = [ "--production" ];
+
+        pkgConfig = {
+          keytar = {
+            nativeBuildInputs = [
+              python3
+              pkg-config
+            ];
+            buildInputs = [
+              libsecret
+            ];
+            postInstall = ''
+              yarn --offline run build
+              # Remove unnecessary store path references.
+              rm build/config.gypi
+            '';
+          };
+        };
+
+        # needed for node-gyp, copied from https://nixos.org/manual/nixpkgs/unstable/#javascript-yarn2nix-pitfalls
+        # permalink: https://github.com/NixOS/nixpkgs/blob/d176767c02cb2a048e766215078c3d231e666091/doc/languages-frameworks/javascript.section.md#pitfalls-javascript-yarn2nix-pitfalls
+        preBuild = ''
+          mkdir -p $HOME/.node-gyp/${nodejs.version}
+          echo 9 > $HOME/.node-gyp/${nodejs.version}/installVersion
+          ln -sfv ${nodejs}/include $HOME/.node-gyp/${nodejs.version}
+          export npm_config_nodedir=${nodejs}
+        '';
+
+        packageJSON = "${src}/package.json";
+        yarnLock = ./yarn.lock;
+
+        offlineCache = fetchYarnDeps {
+          inherit yarnLock;
+          hash = "sha256-NzWzkZbf5R1R72K7KVJbZUCzso1UZ0p3+lRYZE2M/dI=";
+        };
+      };
+    in
+    ''
+      runHook preInstall
+
+      mkdir -p "$out/bin" "$out/share/Sharedown" "$out/share/applications" "$out/share/icons/hicolor/512x512/apps"
+
+      # Electron app
+      cp -r *.js *.json sharedownlogo.png sharedown "${modules}/node_modules" "$out/share/Sharedown"
+
+      # Desktop Launcher
+      cp build/icon.png "$out/share/icons/hicolor/512x512/apps/Sharedown.png"
+
+      # Install electron wrapper script
+      makeWrapper "${electron}/bin/electron" "$out/bin/Sharedown" \
+        --add-flags "$out/share/Sharedown" \
+        --prefix PATH : "${binPath}" \
+        --set PUPPETEER_EXECUTABLE_PATH "${chromium}/bin/chromium"
+
+      runHook postInstall
+    '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Application to save your Sharepoint videos for offline usage";
+    homepage = "https://github.com/kylon/Sharedown";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [
+    ];
+    platforms = platforms.unix;
+    mainProgram = "Sharedown";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sharedown/update.sh b/nixpkgs/pkgs/tools/misc/sharedown/update.sh
new file mode 100755
index 000000000000..d08a258a6a83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sharedown/update.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p common-updater-scripts curl jq yarn yarn2nix-moretea.yarn2nix
+
+set -euo pipefail
+
+owner=kylon
+repo=Sharedown
+latestVersion=$(curl "https://api.github.com/repos/$owner/$repo/releases/latest" | jq -r '.tag_name')
+currentVersion=$(nix-instantiate --eval --expr 'with import ./. {}; sharedown.version' | tr -d '"')
+
+if [[ "$currentVersion" == "$latestVersion" && "${BUMP_LOCK-}" != "1" ]]; then
+    # Skip update when already on the latest version.
+    exit 0
+fi
+
+update-source-version sharedown "$latestVersion"
+
+dirname="$(realpath "$(dirname "$0")")"
+sourceDir="$(nix-build -A sharedown.src --no-out-link)"
+tempDir="$(mktemp -d)"
+
+cp -r "$sourceDir"/* "$tempDir"
+cd "$tempDir"
+PUPPETEER_SKIP_DOWNLOAD=1 yarn install
+yarn2nix > "$dirname/yarndeps.nix"
+cp -r yarn.lock "$dirname"
diff --git a/nixpkgs/pkgs/tools/misc/sharedown/yarn.lock b/nixpkgs/pkgs/tools/misc/sharedown/yarn.lock
new file mode 100644
index 000000000000..7d56b4aca865
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sharedown/yarn.lock
@@ -0,0 +1,2914 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"7zip-bin@~5.1.1":
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876"
+  integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==
+
+"@babel/code-frame@^7.0.0":
+  version "7.22.5"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
+  integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==
+  dependencies:
+    "@babel/highlight" "^7.22.5"
+
+"@babel/helper-validator-identifier@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
+  integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
+
+"@babel/highlight@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
+  integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.22.5"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
+
+"@develar/schema-utils@~2.6.5":
+  version "2.6.5"
+  resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6"
+  integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==
+  dependencies:
+    ajv "^6.12.0"
+    ajv-keywords "^3.4.1"
+
+"@electron/asar@^3.2.1":
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.4.tgz#7e8635a3c4f6d8b3f8ae6efaf5ecb9fbf3bd9864"
+  integrity sha512-lykfY3TJRRWFeTxccEKdf1I6BLl2Plw81H0bbp4Fc5iEc67foDCa5pjJQULVgo0wF+Dli75f3xVcdb/67FFZ/g==
+  dependencies:
+    chromium-pickle-js "^0.2.0"
+    commander "^5.0.0"
+    glob "^7.1.6"
+    minimatch "^3.0.4"
+
+"@electron/get@^2.0.0":
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e"
+  integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==
+  dependencies:
+    debug "^4.1.1"
+    env-paths "^2.2.0"
+    fs-extra "^8.1.0"
+    got "^11.8.5"
+    progress "^2.0.3"
+    semver "^6.2.0"
+    sumchecker "^3.0.1"
+  optionalDependencies:
+    global-agent "^3.0.0"
+
+"@electron/notarize@^1.2.3":
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-1.2.4.tgz#a7d38773f4cad40df111a5edc64037e5d768ea1e"
+  integrity sha512-W5GQhJEosFNafewnS28d3bpQ37/s91CDWqxVchHfmv2dQSTWpOzNlUVQwYzC1ay5bChRV/A9BTL68yj0Pa+TSg==
+  dependencies:
+    debug "^4.1.1"
+    fs-extra "^9.0.1"
+
+"@electron/osx-sign@^1.0.4":
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.4.tgz#8e91442846471636ca0469426a82b253b9170151"
+  integrity sha512-xfhdEcIOfAZg7scZ9RQPya1G1lWo8/zMCwUXAulq0SfY7ONIW+b9qGyKdMyuMctNYwllrIS+vmxfijSfjeh97g==
+  dependencies:
+    compare-version "^0.1.2"
+    debug "^4.3.4"
+    fs-extra "^10.0.0"
+    isbinaryfile "^4.0.8"
+    minimist "^1.2.6"
+    plist "^3.0.5"
+
+"@electron/rebuild@^3.2.13":
+  version "3.2.13"
+  resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.2.13.tgz#98fbb98981b1a86162546a2ab91b2355569cca4c"
+  integrity sha512-DH9Ol4JCnHDYVOD0fKWq+Qqbn/0WU1O6QR0mIpMXEVU4YFM4PlaqNC9K36mGShNBxxGFotZCMDrB1wl/iHM12g==
+  dependencies:
+    "@malept/cross-spawn-promise" "^2.0.0"
+    chalk "^4.0.0"
+    debug "^4.1.1"
+    detect-libc "^2.0.1"
+    fs-extra "^10.0.0"
+    got "^11.7.0"
+    node-abi "^3.0.0"
+    node-api-version "^0.1.4"
+    node-gyp "^9.0.0"
+    ora "^5.1.0"
+    semver "^7.3.5"
+    tar "^6.0.5"
+    yargs "^17.0.1"
+
+"@electron/universal@1.3.4":
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.3.4.tgz#bccd94b635d7c85eeed5eabba457eb4ed2be2777"
+  integrity sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg==
+  dependencies:
+    "@electron/asar" "^3.2.1"
+    "@malept/cross-spawn-promise" "^1.1.0"
+    debug "^4.3.1"
+    dir-compare "^3.0.0"
+    fs-extra "^9.0.1"
+    minimatch "^3.0.4"
+    plist "^3.0.4"
+
+"@fortawesome/fontawesome-free@6.4.0":
+  version "6.4.0"
+  resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz#1ee0c174e472c84b23cb46c995154dc383e3b4fe"
+  integrity sha512-0NyytTlPJwB/BF5LtRV8rrABDbe3TdTXqNB3PdZ+UUUZAEIrdOJdmABqKjt4AXwIoJNaRVVZEXxpNrqvE1GAYQ==
+
+"@isaacs/cliui@^8.0.2":
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+  integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+  dependencies:
+    string-width "^5.1.2"
+    string-width-cjs "npm:string-width@^4.2.0"
+    strip-ansi "^7.0.1"
+    strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+    wrap-ansi "^8.1.0"
+    wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
+"@malept/cross-spawn-promise@^1.1.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
+  integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==
+  dependencies:
+    cross-spawn "^7.0.1"
+
+"@malept/cross-spawn-promise@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d"
+  integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==
+  dependencies:
+    cross-spawn "^7.0.1"
+
+"@malept/flatpak-bundler@^0.4.0":
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz#e8a32c30a95d20c2b1bb635cc580981a06389858"
+  integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==
+  dependencies:
+    debug "^4.1.1"
+    fs-extra "^9.0.0"
+    lodash "^4.17.15"
+    tmp-promise "^3.0.2"
+
+"@npmcli/fs@^3.1.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e"
+  integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==
+  dependencies:
+    semver "^7.3.5"
+
+"@pkgjs/parseargs@^0.11.0":
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+  integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+"@puppeteer/browsers@1.4.1":
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.4.1.tgz#9c8ba163c3ef77ae3fc9708ad1f5787263f7290e"
+  integrity sha512-H43VosMzywHCcYcgv0GXXopvwnV21Ud9g2aXbPlQUJj1Xcz9V0wBwHeFz6saFhx/3VKisZfI1GEKEOhQCau7Vw==
+  dependencies:
+    debug "4.3.4"
+    extract-zip "2.0.1"
+    progress "2.0.3"
+    proxy-agent "6.2.1"
+    tar-fs "2.1.1"
+    unbzip2-stream "1.4.3"
+    yargs "17.7.1"
+
+"@sindresorhus/is@^4.0.0":
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
+  integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
+
+"@szmarczak/http-timer@^4.0.5":
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
+  integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
+  dependencies:
+    defer-to-connect "^2.0.0"
+
+"@tootallnate/once@2":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+  integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
+"@types/cacheable-request@^6.0.1":
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
+  integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
+  dependencies:
+    "@types/http-cache-semantics" "*"
+    "@types/keyv" "^3.1.4"
+    "@types/node" "*"
+    "@types/responselike" "^1.0.0"
+
+"@types/debug@^4.1.6":
+  version "4.1.8"
+  resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317"
+  integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==
+  dependencies:
+    "@types/ms" "*"
+
+"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.11":
+  version "9.0.13"
+  resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
+  integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
+  dependencies:
+    "@types/node" "*"
+
+"@types/http-cache-semantics@*":
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
+  integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
+
+"@types/keyv@^3.1.4":
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
+  integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
+  dependencies:
+    "@types/node" "*"
+
+"@types/ms@*":
+  version "0.7.31"
+  resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
+  integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
+
+"@types/node@*":
+  version "20.4.4"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.4.tgz#c79c7cc22c9d0e97a7944954c9e663bcbd92b0cb"
+  integrity sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew==
+
+"@types/node@^18.11.18":
+  version "18.17.0"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.0.tgz#35d44267a33dd46b49ee0f73d31b05fd7407e290"
+  integrity sha512-GXZxEtOxYGFchyUzxvKI14iff9KZ2DI+A6a37o6EQevtg6uO9t+aUZKcaC1Te5Ng1OnLM7K9NVVj+FbecD9cJg==
+
+"@types/plist@^3.0.1":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.2.tgz#61b3727bba0f5c462fe333542534a0c3e19ccb01"
+  integrity sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==
+  dependencies:
+    "@types/node" "*"
+    xmlbuilder ">=11.0.1"
+
+"@types/responselike@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
+  integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
+  dependencies:
+    "@types/node" "*"
+
+"@types/verror@^1.10.3":
+  version "1.10.6"
+  resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.6.tgz#3e600c62d210c5826460858f84bcbb65805460bb"
+  integrity sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==
+
+"@types/yauzl@^2.9.1":
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
+  integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
+  dependencies:
+    "@types/node" "*"
+
+"@xmldom/xmldom@^0.8.8":
+  version "0.8.10"
+  resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
+  integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
+
+abbrev@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+acorn-walk@^8.2.0:
+  version "8.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
+  integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
+
+acorn@^8.7.0:
+  version "8.10.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
+  integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
+
+agent-base@6, agent-base@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug "4"
+
+agent-base@^7.0.1, agent-base@^7.0.2, agent-base@^7.1.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434"
+  integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==
+  dependencies:
+    debug "^4.3.4"
+
+agentkeepalive@^4.2.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255"
+  integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==
+  dependencies:
+    debug "^4.1.0"
+    depd "^2.0.0"
+    humanize-ms "^1.2.1"
+
+aggregate-error@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+  dependencies:
+    clean-stack "^2.0.0"
+    indent-string "^4.0.0"
+
+ajv-keywords@^3.4.1:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.10.0, ajv@^6.12.0:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+  integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+ansi-styles@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+ansi-styles@^6.1.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+  integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+app-builder-bin@4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0"
+  integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==
+
+app-builder-lib@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.4.0.tgz#1606f94e99366eea9e7507228961b8396e40d546"
+  integrity sha512-EcdqtWvg1LAApKCfyRBukcVkmsa94s2e1VKHjZLpvA9/D14QEt8rHhffYeaA+cH/pVeoNVn2ob735KnfJKEEow==
+  dependencies:
+    "7zip-bin" "~5.1.1"
+    "@develar/schema-utils" "~2.6.5"
+    "@electron/notarize" "^1.2.3"
+    "@electron/osx-sign" "^1.0.4"
+    "@electron/rebuild" "^3.2.13"
+    "@electron/universal" "1.3.4"
+    "@malept/flatpak-bundler" "^0.4.0"
+    "@types/fs-extra" "9.0.13"
+    async-exit-hook "^2.0.1"
+    bluebird-lst "^1.0.9"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    chromium-pickle-js "^0.2.0"
+    debug "^4.3.4"
+    ejs "^3.1.8"
+    electron-publish "24.4.0"
+    form-data "^4.0.0"
+    fs-extra "^10.1.0"
+    hosted-git-info "^4.1.0"
+    is-ci "^3.0.0"
+    isbinaryfile "^5.0.0"
+    js-yaml "^4.1.0"
+    lazy-val "^1.0.5"
+    minimatch "^5.1.1"
+    read-config-file "6.3.2"
+    sanitize-filename "^1.6.3"
+    semver "^7.3.8"
+    tar "^6.1.12"
+    temp-file "^3.4.0"
+
+"aproba@^1.0.3 || ^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
+  integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
+
+arch@^2.1.1:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
+  integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
+
+are-we-there-yet@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
+  integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
+  dependencies:
+    delegates "^1.0.0"
+    readable-stream "^3.6.0"
+
+argparse@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+assert-plus@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+  integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
+
+ast-types@^0.13.4:
+  version "0.13.4"
+  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782"
+  integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==
+  dependencies:
+    tslib "^2.0.1"
+
+astral-regex@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+  integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async-exit-hook@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3"
+  integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==
+
+async@^3.2.3:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
+  integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+at-least-node@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+  integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+axios@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f"
+  integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==
+  dependencies:
+    follow-redirects "^1.15.0"
+    form-data "^4.0.0"
+    proxy-from-env "^1.1.0"
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base64-js@^1.3.1, base64-js@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+basic-ftp@^5.0.2:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.3.tgz#b14c0fe8111ce001ec913686434fe0c2fb461228"
+  integrity sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==
+
+bl@^4.0.3, bl@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+  integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+  dependencies:
+    buffer "^5.5.0"
+    inherits "^2.0.4"
+    readable-stream "^3.4.0"
+
+bluebird-lst@^1.0.9:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c"
+  integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==
+  dependencies:
+    bluebird "^3.5.5"
+
+bluebird@^3.5.5:
+  version "3.7.2"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+boolean@^3.0.1:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
+  integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
+
+bootstrap@5.3.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.0.tgz#0718a7cc29040ee8dbf1bd652b896f3436a87c29"
+  integrity sha512-UnBV3E3v4STVNQdms6jSGO2CvOkjUMdDAVR2V5N4uCMdaIkaQjbcEAMqRimDHIs4uqBYzDAKCQwCB+97tJgHQw==
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+buffer-crc32@~0.2.3:
+  version "0.2.13"
+  resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+  integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+
+buffer-equal@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90"
+  integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer@^5.1.0, buffer@^5.2.1, buffer@^5.5.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+  integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+  dependencies:
+    base64-js "^1.3.1"
+    ieee754 "^1.1.13"
+
+builder-util-runtime@9.2.1:
+  version "9.2.1"
+  resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz#3184dcdf7ed6c47afb8df733813224ced4f624fd"
+  integrity sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==
+  dependencies:
+    debug "^4.3.4"
+    sax "^1.2.4"
+
+builder-util@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.4.0.tgz#dbb201a118fd573180e6a1070cf4c0be6de80cd7"
+  integrity sha512-tONb/GIK1MKa1BcOPHE1naId3o5nj6gdka5kP7yUJh2DOfF+jMq3laiu+UOZH6A7ZtkMtnGNMYFKFTIv408n/A==
+  dependencies:
+    "7zip-bin" "~5.1.1"
+    "@types/debug" "^4.1.6"
+    app-builder-bin "4.0.0"
+    bluebird-lst "^1.0.9"
+    builder-util-runtime "9.2.1"
+    chalk "^4.1.2"
+    cross-spawn "^7.0.3"
+    debug "^4.3.4"
+    fs-extra "^10.1.0"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.1"
+    is-ci "^3.0.0"
+    js-yaml "^4.1.0"
+    source-map-support "^0.5.19"
+    stat-mode "^1.0.0"
+    temp-file "^3.4.0"
+
+cacache@^17.0.0:
+  version "17.1.3"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044"
+  integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==
+  dependencies:
+    "@npmcli/fs" "^3.1.0"
+    fs-minipass "^3.0.0"
+    glob "^10.2.2"
+    lru-cache "^7.7.1"
+    minipass "^5.0.0"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    p-map "^4.0.0"
+    ssri "^10.0.0"
+    tar "^6.1.11"
+    unique-filename "^3.0.0"
+
+cacheable-lookup@^5.0.3:
+  version "5.0.4"
+  resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
+  integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
+
+cacheable-request@^7.0.2:
+  version "7.0.4"
+  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
+  integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
+  dependencies:
+    clone-response "^1.0.2"
+    get-stream "^5.1.0"
+    http-cache-semantics "^4.0.0"
+    keyv "^4.0.0"
+    lowercase-keys "^2.0.0"
+    normalize-url "^6.0.1"
+    responselike "^2.0.0"
+
+callsites@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+chalk@^2.0.0:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  dependencies:
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
+
+chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+chownr@^1.1.1:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+  integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chownr@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+  integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+chromium-bidi@0.4.11:
+  version "0.4.11"
+  resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.4.11.tgz#d3eafb0a99f417406a734b889dacd777be5e227c"
+  integrity sha512-p03ajLhlQ5gebw3cmbDBFmBc2wnJM5dnXS8Phu6mblGn/KQd76yOVL5VwE0VAisa7oazNfKGTaXlIZ8Q5Bb9OA==
+  dependencies:
+    mitt "3.0.0"
+
+chromium-pickle-js@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
+  integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==
+
+ci-info@^3.2.0:
+  version "3.8.0"
+  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91"
+  integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
+
+clean-stack@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-cursor@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+  dependencies:
+    restore-cursor "^3.1.0"
+
+cli-spinners@^2.5.0:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db"
+  integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==
+
+cli-truncate@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+  integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
+  dependencies:
+    slice-ansi "^3.0.0"
+    string-width "^4.2.0"
+
+clipboardy@2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290"
+  integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==
+  dependencies:
+    arch "^2.1.1"
+    execa "^1.0.0"
+    is-wsl "^2.1.1"
+
+cliui@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
+  integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+  dependencies:
+    string-width "^4.2.0"
+    strip-ansi "^6.0.1"
+    wrap-ansi "^7.0.0"
+
+clone-response@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
+  integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
+  dependencies:
+    mimic-response "^1.0.0"
+
+clone@^1.0.2:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+  integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
+
+color-convert@^1.9.0:
+  version "1.9.3"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  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.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  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.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-support@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
+  integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
+
+combined-stream@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+commander@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
+  integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+
+compare-version@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080"
+  integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+config-file-ts@^0.2.4:
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/config-file-ts/-/config-file-ts-0.2.4.tgz#6c0741fbe118a7cf786c65f139030f0448a2cc99"
+  integrity sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ==
+  dependencies:
+    glob "^7.1.6"
+    typescript "^4.0.2"
+
+console-control-strings@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+  integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
+
+core-util-is@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
+
+cosmiconfig@8.1.3:
+  version "8.1.3"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689"
+  integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==
+  dependencies:
+    import-fresh "^3.2.1"
+    js-yaml "^4.1.0"
+    parse-json "^5.0.0"
+    path-type "^4.0.0"
+
+crc@^3.8.0:
+  version "3.8.0"
+  resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6"
+  integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==
+  dependencies:
+    buffer "^5.1.0"
+
+cross-fetch@3.1.6:
+  version "3.1.6"
+  resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.6.tgz#bae05aa31a4da760969756318feeee6e70f15d6c"
+  integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==
+  dependencies:
+    node-fetch "^2.6.11"
+
+cross-spawn@^6.0.0:
+  version "6.0.5"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+  dependencies:
+    nice-try "^1.0.4"
+    path-key "^2.0.1"
+    semver "^5.5.0"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+data-uri-to-buffer@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz#db89a9e279c2ffe74f50637a59a32fb23b3e4d7c"
+  integrity sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==
+
+debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+decompress-response@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+  integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+  dependencies:
+    mimic-response "^3.1.0"
+
+deep-extend@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+  integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+defaults@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
+  integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
+  dependencies:
+    clone "^1.0.2"
+
+defer-to-connect@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+  integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+
+define-properties@^1.1.3:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
+  integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
+  dependencies:
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
+degenerator@^4.0.4:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-4.0.4.tgz#dbeeb602c64ce543c1f17e2c681d1d0cc9d4a0ac"
+  integrity sha512-MTZdZsuNxSBL92rsjx3VFWe57OpRlikyLbcx2B5Dmdv6oScqpMrvpY7zHLMymrUxo3U5+suPUMsNgW/+SZB1lg==
+  dependencies:
+    ast-types "^0.13.4"
+    escodegen "^1.14.3"
+    esprima "^4.0.1"
+    vm2 "^3.9.19"
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+delegates@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+  integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
+
+depd@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+detect-libc@^2.0.0, detect-libc@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d"
+  integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==
+
+detect-node@^2.0.4:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
+  integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+
+devtools-protocol@0.0.1120988:
+  version "0.0.1120988"
+  resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1120988.tgz#8fe49088919ae3b8df7235774633763f1f925066"
+  integrity sha512-39fCpE3Z78IaIPChJsP6Lhmkbf4dWXOmzLk/KFTdRkNk/0JymRIfUynDVRndV9HoDz8PyalK1UH21ST/ivwW5Q==
+
+dir-compare@^3.0.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-3.3.0.tgz#2c749f973b5c4b5d087f11edaae730db31788416"
+  integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==
+  dependencies:
+    buffer-equal "^1.0.0"
+    minimatch "^3.0.4"
+
+dmg-builder@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.4.0.tgz#46c80f119465f6a7275766c72b4f3d514cc8013d"
+  integrity sha512-p5z9Cx539GSBYb+b09Z+hMhuBTh/BrI71VRg4rgF6f2xtIRK/YlTGVS/O08k5OojoyhZcpS7JXxDVSmQoWgiiQ==
+  dependencies:
+    app-builder-lib "24.4.0"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    fs-extra "^10.1.0"
+    iconv-lite "^0.6.2"
+    js-yaml "^4.1.0"
+  optionalDependencies:
+    dmg-license "^1.0.11"
+
+dmg-license@^1.0.11:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.11.tgz#7b3bc3745d1b52be7506b4ee80cb61df6e4cd79a"
+  integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==
+  dependencies:
+    "@types/plist" "^3.0.1"
+    "@types/verror" "^1.10.3"
+    ajv "^6.10.0"
+    crc "^3.8.0"
+    iconv-corefoundation "^1.1.7"
+    plist "^3.0.4"
+    smart-buffer "^4.0.2"
+    verror "^1.10.0"
+
+dotenv-expand@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
+  integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
+
+dotenv@^9.0.2:
+  version "9.0.2"
+  resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05"
+  integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==
+
+eastasianwidth@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+  integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+ejs@^3.1.8:
+  version "3.1.9"
+  resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361"
+  integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==
+  dependencies:
+    jake "^10.8.5"
+
+electron-builder@^24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.4.0.tgz#8846efa45bac8f6b9afc181abf71a4e12530f045"
+  integrity sha512-D5INxodxaUIJgEX6p/fqBd8wQNS8XRAToNIJ9SQC+taNS5D73ZsjLuXiRraFGCB0cVk9KeKhEkdEOH5AaVya4g==
+  dependencies:
+    app-builder-lib "24.4.0"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    chalk "^4.1.2"
+    dmg-builder "24.4.0"
+    fs-extra "^10.1.0"
+    is-ci "^3.0.0"
+    lazy-val "^1.0.5"
+    read-config-file "6.3.2"
+    simple-update-notifier "^1.1.0"
+    yargs "^17.6.2"
+
+electron-publish@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.4.0.tgz#a58f49ecd727620f65372881788ebb1a9b853284"
+  integrity sha512-U3mnVSxIfNrLW7ZnwiedFhcLf6ExPFXgAsx89WpfQFsV4gFAt/LG+H74p0m9NSvsLXiZuF82yXoxi7Ou8GHq4Q==
+  dependencies:
+    "@types/fs-extra" "^9.0.11"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    chalk "^4.1.2"
+    fs-extra "^10.1.0"
+    lazy-val "^1.0.5"
+    mime "^2.5.2"
+
+electron@^25.1.0:
+  version "25.3.1"
+  resolved "https://registry.yarnpkg.com/electron/-/electron-25.3.1.tgz#898cbb5e54d17ad0014123a10f5febc17638c6a9"
+  integrity sha512-t0QXXqgf0/P0OJ9LU3qpcBMK+wL0FRwTQfooBaaG08v5hywPzc1yplfb3l4tS1xC0Ttw8IBaKLBeEoRgxBRHjg==
+  dependencies:
+    "@electron/get" "^2.0.0"
+    "@types/node" "^18.11.18"
+    extract-zip "^2.0.1"
+
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+  version "9.2.2"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+  integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+encoding@^0.1.13:
+  version "0.1.13"
+  resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
+  dependencies:
+    iconv-lite "^0.6.2"
+
+end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+  dependencies:
+    once "^1.4.0"
+
+env-paths@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+  integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+err-code@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+  integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
+error-ex@^1.3.1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  dependencies:
+    is-arrayish "^0.2.1"
+
+es6-error@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
+  integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escodegen@^1.14.3:
+  version "1.14.3"
+  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
+  integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
+  dependencies:
+    esprima "^4.0.1"
+    estraverse "^4.2.0"
+    esutils "^2.0.2"
+    optionator "^0.8.1"
+  optionalDependencies:
+    source-map "~0.6.1"
+
+esprima@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+estraverse@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+esutils@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+execa@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+  dependencies:
+    cross-spawn "^6.0.0"
+    get-stream "^4.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+expand-template@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
+  integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+
+exponential-backoff@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
+  integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
+
+extract-zip@2.0.1, extract-zip@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
+  integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
+  dependencies:
+    debug "^4.1.1"
+    get-stream "^5.1.0"
+    yauzl "^2.10.0"
+  optionalDependencies:
+    "@types/yauzl" "^2.9.1"
+
+extsprintf@^1.2.0:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+  integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
+fast-deep-equal@^3.1.1:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@~2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fd-slicer@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+  integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
+  dependencies:
+    pend "~1.2.0"
+
+fessonia@^2.2.2:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/fessonia/-/fessonia-2.2.2.tgz#c8f9da5701d2e63efc9fd5793368929ddfaaf776"
+  integrity sha512-FvlDFdwHBIxWl2K9XynAIR38NB8xn4vPPZDNK5nIQBnGwZ0xv5FxDXsz+pzYZrUqoEQPQBJemNrYhueD2de7qw==
+
+filelist@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
+  integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
+  dependencies:
+    minimatch "^5.0.1"
+
+follow-redirects@^1.15.0:
+  version "1.15.2"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
+  integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+
+foreground-child@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+  integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+  dependencies:
+    cross-spawn "^7.0.0"
+    signal-exit "^4.0.1"
+
+form-data@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+  integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
+
+fs-constants@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+  integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-extra@^10.0.0, fs-extra@^10.1.0:
+  version "10.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+  integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
+
+fs-extra@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+  integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^4.0.0"
+    universalify "^0.1.0"
+
+fs-extra@^9.0.0, fs-extra@^9.0.1:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+  integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+  dependencies:
+    at-least-node "^1.0.0"
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
+
+fs-minipass@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+  integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+  dependencies:
+    minipass "^3.0.0"
+
+fs-minipass@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3"
+  integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==
+  dependencies:
+    minipass "^5.0.0"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+gauge@^4.0.3:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
+  integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
+  dependencies:
+    aproba "^1.0.3 || ^2.0.0"
+    color-support "^1.1.3"
+    console-control-strings "^1.1.0"
+    has-unicode "^2.0.1"
+    signal-exit "^3.0.7"
+    string-width "^4.2.3"
+    strip-ansi "^6.0.1"
+    wide-align "^1.1.5"
+
+get-caller-file@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.1.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
+  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@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+  dependencies:
+    pump "^3.0.0"
+
+get-stream@^5.1.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+  integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+  dependencies:
+    pump "^3.0.0"
+
+get-uri@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.1.tgz#cff2ba8d456c3513a04b70c45de4dbcca5b1527c"
+  integrity sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==
+  dependencies:
+    basic-ftp "^5.0.2"
+    data-uri-to-buffer "^5.0.1"
+    debug "^4.3.4"
+    fs-extra "^8.1.0"
+
+github-from-package@0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+  integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
+
+glob@^10.2.2:
+  version "10.3.3"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.3.tgz#8360a4ffdd6ed90df84aa8d52f21f452e86a123b"
+  integrity sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==
+  dependencies:
+    foreground-child "^3.1.0"
+    jackspeak "^2.0.3"
+    minimatch "^9.0.1"
+    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+    path-scurry "^1.10.1"
+
+glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+  version "7.2.3"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.1.1"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+global-agent@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
+  integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
+  dependencies:
+    boolean "^3.0.1"
+    es6-error "^4.1.1"
+    matcher "^3.0.0"
+    roarr "^2.15.3"
+    semver "^7.3.2"
+    serialize-error "^7.0.1"
+
+globalthis@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+  integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+  dependencies:
+    define-properties "^1.1.3"
+
+got@^11.7.0, got@^11.8.5:
+  version "11.8.6"
+  resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
+  integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
+  dependencies:
+    "@sindresorhus/is" "^4.0.0"
+    "@szmarczak/http-timer" "^4.0.5"
+    "@types/cacheable-request" "^6.0.1"
+    "@types/responselike" "^1.0.0"
+    cacheable-lookup "^5.0.3"
+    cacheable-request "^7.0.2"
+    decompress-response "^6.0.0"
+    http2-wrapper "^1.0.0-beta.5.2"
+    lowercase-keys "^2.0.0"
+    p-cancelable "^2.0.0"
+    responselike "^2.0.0"
+
+graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6:
+  version "4.2.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+  dependencies:
+    get-intrinsic "^1.1.1"
+
+has-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+  integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
+has-symbols@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-unicode@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+  integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+hosted-git-info@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
+  integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
+  dependencies:
+    lru-cache "^6.0.0"
+
+http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+  integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
+http-proxy-agent@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+  integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+  dependencies:
+    "@tootallnate/once" "2"
+    agent-base "6"
+    debug "4"
+
+http-proxy-agent@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673"
+  integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==
+  dependencies:
+    agent-base "^7.1.0"
+    debug "^4.3.4"
+
+http2-wrapper@^1.0.0-beta.5.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
+  integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
+  dependencies:
+    quick-lru "^5.1.1"
+    resolve-alpn "^1.0.0"
+
+https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+  dependencies:
+    agent-base "6"
+    debug "4"
+
+https-proxy-agent@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz#0277e28f13a07d45c663633841e20a40aaafe0ab"
+  integrity sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==
+  dependencies:
+    agent-base "^7.0.2"
+    debug "4"
+
+humanize-ms@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+  integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+  dependencies:
+    ms "^2.0.0"
+
+iconv-corefoundation@^1.1.7:
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a"
+  integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==
+  dependencies:
+    cli-truncate "^2.1.0"
+    node-addon-api "^1.6.3"
+
+iconv-lite@^0.6.2:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
+ieee754@^1.1.13:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+import-fresh@^3.2.1:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+  integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+  dependencies:
+    parent-module "^1.0.0"
+    resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+indent-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@^2.0.3, inherits@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@~1.3.0:
+  version "1.3.8"
+  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+ip@^1.1.8:
+  version "1.1.8"
+  resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
+  integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
+
+ip@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
+  integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-ci@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
+  integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
+  dependencies:
+    ci-info "^3.2.0"
+
+is-docker@^2.0.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-interactive@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
+  integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
+
+is-lambda@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
+  integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
+
+is-stream@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
+
+is-unicode-supported@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+  integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+is-wsl@^2.1.1:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+  integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+  dependencies:
+    is-docker "^2.0.0"
+
+isbinaryfile@^4.0.8:
+  version "4.0.10"
+  resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3"
+  integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==
+
+isbinaryfile@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234"
+  integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+iso8601-duration@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/iso8601-duration/-/iso8601-duration-2.1.1.tgz#88d9e481525b50e57840bc93fb8a1727a7d849d2"
+  integrity sha512-VGGpW30/R57FpG1J7RqqKBAaK7lIiudlZkQ5tRoO9hNlKYQNnhs60DQpXlPFBmp6I+kJ61PHkI3f/T7cR4wfbw==
+
+jackspeak@^2.0.3:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6"
+  integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==
+  dependencies:
+    "@isaacs/cliui" "^8.0.2"
+  optionalDependencies:
+    "@pkgjs/parseargs" "^0.11.0"
+
+jake@^10.8.5:
+  version "10.8.7"
+  resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f"
+  integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==
+  dependencies:
+    async "^3.2.3"
+    chalk "^4.0.2"
+    filelist "^1.0.4"
+    minimatch "^3.1.2"
+
+js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+  dependencies:
+    argparse "^2.0.1"
+
+json-buffer@3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+  integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-parse-even-better-errors@^2.3.0:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stringify-safe@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+  integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
+json5@^2.2.0:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+  integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsonfile@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+  integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+jsonfile@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+  dependencies:
+    universalify "^2.0.0"
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+keytar@^7.9.0:
+  version "7.9.0"
+  resolved "https://registry.yarnpkg.com/keytar/-/keytar-7.9.0.tgz#4c6225708f51b50cbf77c5aae81721964c2918cb"
+  integrity sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==
+  dependencies:
+    node-addon-api "^4.3.0"
+    prebuild-install "^7.0.1"
+
+keyv@^4.0.0:
+  version "4.5.3"
+  resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25"
+  integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==
+  dependencies:
+    json-buffer "3.0.1"
+
+lazy-val@^1.0.4, lazy-val@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d"
+  integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==
+
+levn@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+  integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
+  dependencies:
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+
+lines-and-columns@^1.1.6:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+  integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+lodash@^4.17.15:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+  integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+  dependencies:
+    chalk "^4.1.0"
+    is-unicode-supported "^0.1.0"
+
+lowercase-keys@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+  integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+  dependencies:
+    yallist "^4.0.0"
+
+lru-cache@^7.14.1, lru-cache@^7.7.1:
+  version "7.18.3"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+  integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+
+"lru-cache@^9.1.1 || ^10.0.0":
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61"
+  integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==
+
+make-fetch-happen@^11.0.3:
+  version "11.1.1"
+  resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f"
+  integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==
+  dependencies:
+    agentkeepalive "^4.2.1"
+    cacache "^17.0.0"
+    http-cache-semantics "^4.1.1"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.0"
+    is-lambda "^1.0.1"
+    lru-cache "^7.7.1"
+    minipass "^5.0.0"
+    minipass-fetch "^3.0.0"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    negotiator "^0.6.3"
+    promise-retry "^2.0.1"
+    socks-proxy-agent "^7.0.0"
+    ssri "^10.0.0"
+
+matcher@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
+  integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
+  dependencies:
+    escape-string-regexp "^4.0.0"
+
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+mime@^2.5.2:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
+  integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
+
+mimic-fn@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+  integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+mimic-response@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+  integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimatch@^5.0.1, minimatch@^5.1.1:
+  version "5.1.6"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
+  integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimatch@^9.0.1:
+  version "9.0.3"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+  integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+minipass-collect@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+  integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-fetch@^3.0.0:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce"
+  integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==
+  dependencies:
+    minipass "^5.0.0"
+    minipass-sized "^1.0.3"
+    minizlib "^2.1.2"
+  optionalDependencies:
+    encoding "^0.1.13"
+
+minipass-flush@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+  integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-pipeline@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+  integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-sized@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
+  integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass@^3.0.0:
+  version "3.3.6"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
+  integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
+  dependencies:
+    yallist "^4.0.0"
+
+minipass@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
+  integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.2.tgz#58a82b7d81c7010da5bd4b2c0c85ac4b4ec5131e"
+  integrity sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==
+
+minizlib@^2.1.1, minizlib@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+  integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+  dependencies:
+    minipass "^3.0.0"
+    yallist "^4.0.0"
+
+mitt@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.0.tgz#69ef9bd5c80ff6f57473e8d89326d01c414be0bd"
+  integrity sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==
+
+mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+  integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
+mkdirp@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+  integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.0.0:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+napi-build-utils@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
+  integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
+
+negotiator@^0.6.3:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+  integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
+netmask@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7"
+  integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==
+
+nice-try@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+node-abi@^3.0.0, node-abi@^3.3.0:
+  version "3.45.0"
+  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5"
+  integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==
+  dependencies:
+    semver "^7.3.5"
+
+node-addon-api@^1.6.3:
+  version "1.7.2"
+  resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d"
+  integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==
+
+node-addon-api@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
+  integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
+
+node-api-version@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080"
+  integrity sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==
+  dependencies:
+    semver "^7.3.5"
+
+node-fetch@^2.6.11:
+  version "2.6.12"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba"
+  integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+node-gyp@^9.0.0:
+  version "9.4.0"
+  resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369"
+  integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==
+  dependencies:
+    env-paths "^2.2.0"
+    exponential-backoff "^3.1.1"
+    glob "^7.1.4"
+    graceful-fs "^4.2.6"
+    make-fetch-happen "^11.0.3"
+    nopt "^6.0.0"
+    npmlog "^6.0.0"
+    rimraf "^3.0.2"
+    semver "^7.3.5"
+    tar "^6.1.2"
+    which "^2.0.2"
+
+nopt@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
+  integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
+  dependencies:
+    abbrev "^1.0.0"
+
+normalize-url@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
+  integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
+
+npm-run-path@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+  integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
+  dependencies:
+    path-key "^2.0.0"
+
+npmlog@^6.0.0:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
+  integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
+  dependencies:
+    are-we-there-yet "^3.0.0"
+    console-control-strings "^1.1.0"
+    gauge "^4.0.3"
+    set-blocking "^2.0.0"
+
+object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+  dependencies:
+    wrappy "1"
+
+onetime@^5.1.0:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+  dependencies:
+    mimic-fn "^2.1.0"
+
+optionator@^0.8.1:
+  version "0.8.3"
+  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+  dependencies:
+    deep-is "~0.1.3"
+    fast-levenshtein "~2.0.6"
+    levn "~0.3.0"
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+    word-wrap "~1.2.3"
+
+ora@^5.1.0:
+  version "5.4.1"
+  resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
+  integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
+  dependencies:
+    bl "^4.1.0"
+    chalk "^4.1.0"
+    cli-cursor "^3.1.0"
+    cli-spinners "^2.5.0"
+    is-interactive "^1.0.0"
+    is-unicode-supported "^0.1.0"
+    log-symbols "^4.1.0"
+    strip-ansi "^6.0.0"
+    wcwidth "^1.0.1"
+
+p-cancelable@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
+  integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
+
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
+
+p-map@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+  dependencies:
+    aggregate-error "^3.0.0"
+
+pac-proxy-agent@^6.0.3:
+  version "6.0.4"
+  resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-6.0.4.tgz#f90d066808974cd6813dfcdac69a2aa483b18ba1"
+  integrity sha512-FbJYeusBOZNe6bmrC2/+r/HljwExryon16lNKEU82gWiwIPMCEktUPSEAcTkO9K3jd/YPGuX/azZel1ltmo6nQ==
+  dependencies:
+    agent-base "^7.0.2"
+    debug "^4.3.4"
+    get-uri "^6.0.1"
+    http-proxy-agent "^7.0.0"
+    https-proxy-agent "^7.0.0"
+    pac-resolver "^6.0.1"
+    socks-proxy-agent "^8.0.1"
+
+pac-resolver@^6.0.1:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-6.0.2.tgz#742ef24d2805b18c0a684ac02bcb0b5ce9644648"
+  integrity sha512-EQpuJ2ifOjpZY5sg1Q1ZeAxvtLwR7Mj3RgY8cysPGbsRu3RBXyJFWxnMus9PScjxya/0LzvVDxNh/gl0eXBU4w==
+  dependencies:
+    degenerator "^4.0.4"
+    ip "^1.1.8"
+    netmask "^2.0.2"
+
+parent-module@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+  dependencies:
+    callsites "^3.0.0"
+
+parse-json@^5.0.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+  integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    error-ex "^1.3.1"
+    json-parse-even-better-errors "^2.3.0"
+    lines-and-columns "^1.1.6"
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^2.0.0, path-key@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+  integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
+
+path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-scurry@^1.10.1:
+  version "1.10.1"
+  resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+  integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
+  dependencies:
+    lru-cache "^9.1.1 || ^10.0.0"
+    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+path-type@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pend@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
+
+plist@^3.0.4, plist@^3.0.5:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9"
+  integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==
+  dependencies:
+    "@xmldom/xmldom" "^0.8.8"
+    base64-js "^1.5.1"
+    xmlbuilder "^15.1.1"
+
+prebuild-install@^7.0.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45"
+  integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==
+  dependencies:
+    detect-libc "^2.0.0"
+    expand-template "^2.0.3"
+    github-from-package "0.0.0"
+    minimist "^1.2.3"
+    mkdirp-classic "^0.5.3"
+    napi-build-utils "^1.0.1"
+    node-abi "^3.3.0"
+    pump "^3.0.0"
+    rc "^1.2.7"
+    simple-get "^4.0.0"
+    tar-fs "^2.0.0"
+    tunnel-agent "^0.6.0"
+
+prelude-ls@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+  integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
+
+progress@2.0.3, progress@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-retry@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+  integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+  dependencies:
+    err-code "^2.0.2"
+    retry "^0.12.0"
+
+proxy-agent@6.2.1:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.2.1.tgz#062df6609a4012fd1c108974865599b61e77abde"
+  integrity sha512-OIbBKlRAT+ycCm6wAYIzMwPejzRtjy8F3QiDX0eKOA3e4pe3U9F/IvzcHP42bmgQxVv97juG+J8/gx+JIeCX/Q==
+  dependencies:
+    agent-base "^7.0.2"
+    debug "^4.3.4"
+    http-proxy-agent "^7.0.0"
+    https-proxy-agent "^7.0.0"
+    lru-cache "^7.14.1"
+    pac-proxy-agent "^6.0.3"
+    proxy-from-env "^1.1.0"
+    socks-proxy-agent "^8.0.1"
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+pump@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+punycode@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
+  integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+
+puppeteer-core@20.5.0:
+  version "20.5.0"
+  resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-20.5.0.tgz#4b9ccd6c4ca35fe02373bf2147dc75b42ebd22c4"
+  integrity sha512-9ddHXUQ7jpliGei87zYTuEZYQvFj6Lzk5R8w4vT4gMmNArkEqC5CX72TnVIJiTUbiTpOXJkvMQaXIHYopjdUtQ==
+  dependencies:
+    "@puppeteer/browsers" "1.4.1"
+    chromium-bidi "0.4.11"
+    cross-fetch "3.1.6"
+    debug "4.3.4"
+    devtools-protocol "0.0.1120988"
+    ws "8.13.0"
+
+puppeteer@20.5.0:
+  version "20.5.0"
+  resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-20.5.0.tgz#453f42edb2cb085bb237914c2bcda7938b7ab1c2"
+  integrity sha512-3j0JShJGDT5z8rfDKf+wZQq3IHxw7JaDAdP7py5H5zOIgmqNG0e8R19y4tFzJ8i2WC4H/0bC51rIrTXyDop1FA==
+  dependencies:
+    "@puppeteer/browsers" "1.4.1"
+    cosmiconfig "8.1.3"
+    puppeteer-core "20.5.0"
+
+quick-lru@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+  integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+rc@^1.2.7:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+  integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+  dependencies:
+    deep-extend "^0.6.0"
+    ini "~1.3.0"
+    minimist "^1.2.0"
+    strip-json-comments "~2.0.1"
+
+read-config-file@6.3.2:
+  version "6.3.2"
+  resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.3.2.tgz#556891aa6ffabced916ed57457cb192e61880411"
+  integrity sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==
+  dependencies:
+    config-file-ts "^0.2.4"
+    dotenv "^9.0.2"
+    dotenv-expand "^5.1.0"
+    js-yaml "^4.1.0"
+    json5 "^2.2.0"
+    lazy-val "^1.0.4"
+
+readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+resolve-alpn@^1.0.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
+  integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
+
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+responselike@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
+  integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
+  dependencies:
+    lowercase-keys "^2.0.0"
+
+restore-cursor@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+  dependencies:
+    onetime "^5.1.0"
+    signal-exit "^3.0.2"
+
+retry@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+  integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
+rimraf@^3.0.0, rimraf@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+  dependencies:
+    glob "^7.1.3"
+
+roarr@^2.15.3:
+  version "2.15.4"
+  resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
+  integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
+  dependencies:
+    boolean "^3.0.1"
+    detect-node "^2.0.4"
+    globalthis "^1.0.1"
+    json-stringify-safe "^5.0.1"
+    semver-compare "^1.0.0"
+    sprintf-js "^1.1.2"
+
+safe-buffer@^5.0.1, safe-buffer@~5.2.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+"safer-buffer@>= 2.1.2 < 3.0.0":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sanitize-filename@^1.6.3:
+  version "1.6.3"
+  resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378"
+  integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==
+  dependencies:
+    truncate-utf8-bytes "^1.0.0"
+
+sax@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+semver-compare@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+  integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
+
+semver@^5.5.0:
+  version "5.7.2"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+  integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
+
+semver@^6.2.0:
+  version "6.3.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.3.2, semver@^7.3.5, semver@^7.3.8:
+  version "7.5.4"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+  integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
+  dependencies:
+    lru-cache "^6.0.0"
+
+semver@~7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+  integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+serialize-error@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
+  integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
+  dependencies:
+    type-fest "^0.13.1"
+
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+
+shebang-command@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+  integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
+  dependencies:
+    shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+  integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7:
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+signal-exit@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967"
+  integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==
+
+simple-concat@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
+  integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
+
+simple-get@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
+  integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
+  dependencies:
+    decompress-response "^6.0.0"
+    once "^1.3.1"
+    simple-concat "^1.0.0"
+
+simple-update-notifier@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82"
+  integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==
+  dependencies:
+    semver "~7.0.0"
+
+slice-ansi@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+  integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
+  dependencies:
+    ansi-styles "^4.0.0"
+    astral-regex "^2.0.0"
+    is-fullwidth-code-point "^3.0.0"
+
+smart-buffer@^4.0.2, smart-buffer@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+  integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
+socks-proxy-agent@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6"
+  integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==
+  dependencies:
+    agent-base "^6.0.2"
+    debug "^4.3.3"
+    socks "^2.6.2"
+
+socks-proxy-agent@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz#ffc5859a66dac89b0c4dab90253b96705f3e7120"
+  integrity sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==
+  dependencies:
+    agent-base "^7.0.1"
+    debug "^4.3.4"
+    socks "^2.7.1"
+
+socks@^2.6.2, socks@^2.7.1:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55"
+  integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==
+  dependencies:
+    ip "^2.0.0"
+    smart-buffer "^4.2.0"
+
+source-map-support@^0.5.19:
+  version "0.5.21"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@~0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sprintf-js@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
+  integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
+
+ssri@^10.0.0:
+  version "10.0.4"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6"
+  integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==
+  dependencies:
+    minipass "^5.0.0"
+
+stat-mode@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465"
+  integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==
+
+"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+  integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+  dependencies:
+    eastasianwidth "^0.2.0"
+    emoji-regex "^9.2.2"
+    strip-ansi "^7.0.1"
+
+string_decoder@^1.1.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+  integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+  dependencies:
+    ansi-regex "^6.0.1"
+
+strip-eof@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+  integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
+
+strip-json-comments@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+  integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+
+sumchecker@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
+  integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
+  dependencies:
+    debug "^4.1.0"
+
+supports-color@^5.3.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  dependencies:
+    has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+  dependencies:
+    has-flag "^4.0.0"
+
+tar-fs@2.1.1, tar-fs@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
+  integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
+  dependencies:
+    chownr "^1.1.1"
+    mkdirp-classic "^0.5.2"
+    pump "^3.0.0"
+    tar-stream "^2.1.4"
+
+tar-stream@^2.1.4:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
+  integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
+  dependencies:
+    bl "^4.0.3"
+    end-of-stream "^1.4.1"
+    fs-constants "^1.0.0"
+    inherits "^2.0.3"
+    readable-stream "^3.1.1"
+
+tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2:
+  version "6.1.15"
+  resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69"
+  integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==
+  dependencies:
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    minipass "^5.0.0"
+    minizlib "^2.1.1"
+    mkdirp "^1.0.3"
+    yallist "^4.0.0"
+
+temp-file@^3.4.0:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7"
+  integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==
+  dependencies:
+    async-exit-hook "^2.0.1"
+    fs-extra "^10.0.0"
+
+through@^2.3.8:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
+tmp-promise@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7"
+  integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==
+  dependencies:
+    tmp "^0.2.0"
+
+tmp@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
+  integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
+  dependencies:
+    rimraf "^3.0.0"
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+truncate-utf8-bytes@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
+  integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==
+  dependencies:
+    utf8-byte-length "^1.0.1"
+
+tslib@^2.0.1:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
+  integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
+
+tunnel-agent@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+  integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+  dependencies:
+    safe-buffer "^5.0.1"
+
+type-check@~0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+  integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
+  dependencies:
+    prelude-ls "~1.1.2"
+
+type-fest@^0.13.1:
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
+  integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
+
+typescript@^4.0.2:
+  version "4.9.5"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
+  integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
+
+unbzip2-stream@1.4.3:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
+  integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
+  dependencies:
+    buffer "^5.2.1"
+    through "^2.3.8"
+
+unique-filename@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea"
+  integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==
+  dependencies:
+    unique-slug "^4.0.0"
+
+unique-slug@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3"
+  integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==
+  dependencies:
+    imurmurhash "^0.1.4"
+
+universalify@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+  integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+utf8-byte-length@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
+  integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==
+
+util-deprecate@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+verror@^1.10.0:
+  version "1.10.1"
+  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb"
+  integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==
+  dependencies:
+    assert-plus "^1.0.0"
+    core-util-is "1.0.2"
+    extsprintf "^1.2.0"
+
+vm2@^3.9.19:
+  version "3.9.19"
+  resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.19.tgz#be1e1d7a106122c6c492b4d51c2e8b93d3ed6a4a"
+  integrity sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==
+  dependencies:
+    acorn "^8.7.0"
+    acorn-walk "^8.2.0"
+
+wcwidth@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+  integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
+  dependencies:
+    defaults "^1.0.3"
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+which@^1.2.9:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+  dependencies:
+    isexe "^2.0.0"
+
+which@^2.0.1, which@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+wide-align@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
+  integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
+  dependencies:
+    string-width "^1.0.2 || 2 || 3 || 4"
+
+word-wrap@~1.2.3:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
+  integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+  integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+  dependencies:
+    ansi-styles "^6.1.0"
+    string-width "^5.0.1"
+    strip-ansi "^7.0.1"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+ws@8.13.0:
+  version "8.13.0"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
+  integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
+
+xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1:
+  version "15.1.1"
+  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
+  integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
+
+y18n@^5.0.5:
+  version "5.0.8"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+  integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@^21.1.1:
+  version "21.1.1"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
+  integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs@17.7.1:
+  version "17.7.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967"
+  integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==
+  dependencies:
+    cliui "^8.0.1"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
+    require-directory "^2.1.1"
+    string-width "^4.2.3"
+    y18n "^5.0.5"
+    yargs-parser "^21.1.1"
+
+yargs@^17.0.1, yargs@^17.6.2:
+  version "17.7.2"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
+  integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+  dependencies:
+    cliui "^8.0.1"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
+    require-directory "^2.1.1"
+    string-width "^4.2.3"
+    y18n "^5.0.5"
+    yargs-parser "^21.1.1"
+
+yauzl@^2.10.0:
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+  integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
+  dependencies:
+    buffer-crc32 "~0.2.3"
+    fd-slicer "~1.1.0"
diff --git a/nixpkgs/pkgs/tools/misc/sheldon/default.nix b/nixpkgs/pkgs/tools/misc/sheldon/default.nix
new file mode 100644
index 000000000000..ddff13c9bcfd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sheldon/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, installShellFiles
+, Security
+, curl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sheldon";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "rossmacarthur";
+    repo = pname;
+    rev = version;
+    hash = "sha256-vGFR8NL3bOCUuNr0KQuAbjQMxvFbN/T9aVmf7Wxt9JU=";
+  };
+
+  cargoSha256 = "sha256-wVB+yL+h90f7NnASDaX5gxT5z45M8I1rxIJwY8uyB4k=";
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security curl ];
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  # Needs network connection
+  checkFlags = [
+    "--skip lock::plugin::tests::external_plugin_lock_git_with_matches"
+    "--skip lock::plugin::tests::external_plugin_lock_git_with_matches_not_each"
+    "--skip lock::plugin::tests::external_plugin_lock_git_with_uses"
+    "--skip lock::plugin::tests::external_plugin_lock_remote"
+    "--skip lock::source::git::tests::git_checkout_resolve_branch"
+    "--skip lock::source::git::tests::git_checkout_resolve_rev"
+    "--skip lock::source::git::tests::git_checkout_resolve_tag"
+    "--skip lock::source::git::tests::lock_git_and_reinstall"
+    "--skip lock::source::git::tests::lock_git_https_with_checkout"
+    "--skip lock::source::local::tests::lock_local"
+    "--skip lock::source::remote::tests::lock_remote_and_reinstall"
+    "--skip lock::source::tests::lock_with_git"
+    "--skip lock::source::tests::lock_with_remote"
+    "--skip lock::tests::locked_config_clean"
+    "--skip directories_default"
+    "--skip directories_old"
+    "--skip directories_xdg_from_env"
+    "--skip lock_and_source_github"
+    "--skip lock_and_source_hooks"
+    "--skip lock_and_source_inline"
+    "--skip lock_and_source_profiles"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd sheldon \
+      --bash <($out/bin/sheldon completions --shell bash) \
+      --zsh <($out/bin/sheldon completions --shell zsh)
+  '';
+
+  meta = with lib; {
+    description = "A fast and configurable shell plugin manager";
+    homepage = "https://github.com/rossmacarthur/sheldon";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ seqizz ];
+    platforms = platforms.linux;
+    mainProgram = "sheldon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shell-hist/default.nix b/nixpkgs/pkgs/tools/misc/shell-hist/default.nix
new file mode 100644
index 000000000000..438b687c73f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shell-hist/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage {
+  pname = "shell-hist";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "jamesmunns";
+    repo = "shell-hist";
+    rev = "158de8c3908b49530ecd76bf6e65c210f351ef82";
+    sha256 = "0kc128xnnp1d56if70vfv0w3qnwhljhbnvzwwb7hfm3x2m0vqrqf";
+  };
+
+  cargoSha256 = "1b2cfs03vlaz7jnr67ilgjfi7cm59izpcdi6pyvbzv8s46z2dysp";
+
+  meta = with lib; {
+    description = "Inspect your shell history";
+    homepage = "https://github.com/jamesmunns/shell-hist";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = [ maintainers.spacekookie ];
+    mainProgram = "shell-hist";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shelldap/default.nix b/nixpkgs/pkgs/tools/misc/shelldap/default.nix
new file mode 100644
index 000000000000..045c5732c3e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shelldap/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, fetchFromGitHub
+, perlPackages
+}:
+
+perlPackages.buildPerlPackage rec {
+  pname = "shelldap";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "mahlonsmith";
+    repo = "shelldap";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-67ttAXzu9pfeqjfhMfLMb9vWCXTrE+iUDCbamqswaLg=";
+  };
+
+  buildInputs = with perlPackages; [
+    AlgorithmDiff
+    AuthenSASL
+    IOSocketSSL
+    perl
+    perlldap
+    TermReadLineGnu
+    TermShell
+    TieIxHash
+    YAMLSyck
+  ];
+
+  prePatch = ''
+    touch Makefile.PL
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 -t $out/bin shelldap
+    runHook preInstall
+  '';
+
+  # no make target 'test', not tests provided by source
+  doCheck = false;
+
+  outputs = [ "out" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mahlonsmith/shelldap/";
+    description = "A handy shell-like interface for browsing LDAP servers and editing their content";
+    changelog = "https://github.com/mahlonsmith/shelldap/blob/v${version}/CHANGELOG";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ clerie tobiasBora ];
+    platforms = platforms.unix;
+    mainProgram = "shelldap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shellspec/default.nix b/nixpkgs/pkgs/tools/misc/shellspec/default.nix
new file mode 100644
index 000000000000..b355f0fc0232
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shellspec/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "shellspec";
+  version = "0.28.1";
+
+  src = fetchFromGitHub {
+    owner = "shellspec";
+    repo = pname;
+    rev = version;
+    sha256 = "1ib5qp29f2fmivwnv6hq35qhvdxz42xgjlkvy0i3qn758riyqf46";
+  };
+
+  strictDeps = true;
+  buildInputs = [ bash ];
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  checkPhase = ''
+    ./shellspec --no-banner --task fixture:stat:prepare
+    ./shellspec --no-banner spec --jobs "$(nproc)"
+  '';
+
+  # "Building" the script happens in Docker
+  dontBuild = true;
+
+  meta = with lib; {
+    description =
+      "A full-featured BDD unit testing framework for bash, ksh, zsh, dash and all POSIX shells";
+    homepage = "https://shellspec.info/";
+    changelog =
+      "https://github.com/shellspec/shellspec/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ j0hax ];
+    platforms = platforms.unix;
+    mainProgram = "shellspec";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shim/default.nix b/nixpkgs/pkgs/tools/misc/shim/default.nix
new file mode 100644
index 000000000000..0b8f6dbe5a9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shim/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchFromGitHub, lib, elfutils, vendorCertFile ? null
+, defaultLoader ? null }:
+
+let
+
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "Unsupported system: ${system}";
+
+  target = {
+    x86_64-linux = "shimx64.efi";
+    aarch64-linux = "shimaa64.efi";
+  }.${system} or throwSystem;
+in stdenv.mkDerivation rec {
+  pname = "shim";
+  version = "15.8";
+
+  src = fetchFromGitHub {
+    owner = "rhboot";
+    repo = pname;
+    rev = version;
+    hash = "sha256-xnr9HBfYP035C7p2YTRZasx5SF4a2ZkOl9IpsVduNm4=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ elfutils ];
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${toString elfutils.dev}/include" ];
+
+  makeFlags =
+    lib.optional (vendorCertFile != null) "VENDOR_CERT_FILE=${vendorCertFile}"
+    ++ lib.optional (defaultLoader != null) "DEFAULT_LOADER=${defaultLoader}"
+    ++ [ target ];
+
+  installPhase = ''
+    mkdir -p $out/share/shim
+    install -m 644 ${target} $out/share/shim/
+  '';
+
+  passthru = {
+    # Expose the target file name so that consumers
+    # (e.g. infrastructure for signing this shim) don't need to
+    # duplicate the logic from here
+    inherit target;
+  };
+
+  meta = with lib; {
+    description = "UEFI shim loader";
+    homepage = "https://github.com/rhboot/shim";
+    license = licenses.bsd1;
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ baloo raitobezarius ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shunit2/default.nix b/nixpkgs/pkgs/tools/misc/shunit2/default.nix
new file mode 100644
index 000000000000..017d19264798
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shunit2/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, resholve
+, fetchFromGitHub
+, bash
+, coreutils
+, gnused
+, gnugrep
+, findutils
+, ncurses
+}:
+
+resholve.mkDerivation rec {
+  pname = "shunit2";
+  version = "2.1.8";
+
+  src = fetchFromGitHub {
+    owner = "kward";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-IZHkgkVqzeh+eEKCDJ87sqNhSA+DU6kBCNDdQaUEeiM=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp ./shunit2 $out/bin/shunit2
+    chmod +x $out/bin/shunit2
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/shunit2
+  '';
+
+  solutions = {
+    shunit = {
+      # Caution: see __SHUNIT_CMD_ECHO_ESC before changing
+      interpreter = "${bash}/bin/sh";
+      scripts = [ "bin/shunit2" ];
+      inputs = [ coreutils gnused gnugrep findutils ncurses ];
+      # resholve's Nix API is analogous to the CLI flags
+      # documented in 'man resholve'
+      fake = {
+        # "missing" functions shunit2 expects the user to declare
+        function = [
+          "oneTimeSetUp"
+          "oneTimeTearDown"
+          "setUp"
+          "tearDown"
+          "suite"
+          "noexec"
+        ];
+        # shunit2 is both bash and zsh compatible, and in
+        # some zsh-specific code it uses this non-bash builtin
+        builtin = [ "setopt" ];
+      };
+      fix = {
+        # stray absolute path; make it resolve from coreutils
+        "/usr/bin/od" = true;
+        /*
+        Caution: this one is contextually debatable. shunit2
+        sets this variable after testing whether `echo -e test`
+        yields `test` or `-e test`. Since we're setting the
+        interpreter, we can pre-test this. But if we go fiddle
+        the interpreter later, I guess we _could_ break it.
+        */
+        "$__SHUNIT_CMD_ECHO_ESC" = [ "echo -e" ];
+        "$SHUNIT_CMD_TPUT" = [ "tput" ]; # from ncurses
+      };
+      keep = {
+        # dynamically defined in shunit2:_shunit_mktempFunc
+        eval = [ "shunit_condition_" "_shunit_test_" "_shunit_prepForSourcing" ];
+
+        # dynamic based on CLI flag
+        "$_SHUNIT_LINENO_" = true;
+      };
+      execer = [
+        # drop after https://github.com/abathur/binlore/issues/2
+        "cannot:${ncurses}/bin/tput"
+      ];
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/kward/shunit2";
+    description = "An xUnit based unit test framework for Bourne based shell scripts";
+    maintainers = with maintainers; [ abathur utdemir ];
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    mainProgram = "shunit2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sixpair/default.nix b/nixpkgs/pkgs/tools/misc/sixpair/default.nix
new file mode 100644
index 000000000000..fa444a86a0ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sixpair/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, libusb-compat-0_1 }:
+stdenv.mkDerivation {
+  pname = "sixpair";
+  version = "unstable-2007-04-18";
+
+  src = fetchurl {
+    url = "http://www.pabr.org/sixlinux/sixpair.c";
+    sha256 = "1b0a3k7gs544cbji7n29jxlrsscwfx6s1r2sgwdl6hmkc1l9gagr";
+  };
+
+  # hcitool is depricated
+  patches = [ ./hcitool.patch ];
+
+  buildInputs = [ libusb-compat-0_1 ];
+
+  unpackPhase = ''
+    cp $src sixpair.c
+  '';
+
+  buildPhase = ''
+    cc -o sixpair sixpair.c -lusb
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp sixpair $out/bin/sixpair
+  '';
+
+  meta = {
+    description = "Pair with SIXAXIS controllers over USB";
+    longDescription = ''
+      This command-line utility searches USB buses for SIXAXIS controllers and tells them to connect to a new Bluetooth master.
+    '';
+    homepage = "http://www.pabr.org/sixlinux/";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.tomsmeets ];
+    platforms = lib.platforms.linux;
+    mainProgram = "sixpair";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch b/nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch
new file mode 100644
index 000000000000..b66e791dd0e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch
@@ -0,0 +1,19 @@
+diff --git a/sixpair.c b/sixpair.c
+index b009a6f..78b7ef0 100644
+--- a/sixpair.c
++++ b/sixpair.c
+@@ -76,11 +76,11 @@ void process_device(int argc, char **argv, struct usb_device *dev,
+       exit(1);
+     }
+   } else {
+-    FILE *f = popen("hcitool dev", "r");
++    FILE *f = popen("bluetoothctl list", "r");
+     if ( !f ||
+-	 fscanf(f, "%*s\n%*s %x:%x:%x:%x:%x:%x",
++	 fscanf(f, "%*s %x:%x:%x:%x:%x:%x",
+ 		&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]) != 6 ) {
+-      printf("Unable to retrieve local bd_addr from `hcitool dev`.\n");
++      printf("Unable to retrieve local bd_addr from `bluetoothctl list`.\n");
+       printf("Please enable Bluetooth or specify an address manually.\n");
+       exit(1);
+     }
diff --git a/nixpkgs/pkgs/tools/misc/skim/default.nix b/nixpkgs/pkgs/tools/misc/skim/default.nix
new file mode 100644
index 000000000000..b6a77485d1ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/skim/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "skim";
+  version = "0.10.4";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-C2yK+SO8Tpw3BxXXu1jeDzYJ2548RZa7NFWaE0SdNJ0=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  outputs = [ "out" "vim" ];
+
+  cargoHash = "sha256-jBcgoWbmBOgU7M71lr4OXOe2S6NAXl+I8D+ZtT45Vos=";
+
+  postPatch = ''
+    sed -i -e "s|expand('<sfile>:h:h')|'$out'|" plugin/skim.vim
+  '';
+
+  postInstall = ''
+    install -D -m 555 bin/sk-tmux -t $out/bin
+
+    install -D -m 444 plugin/skim.vim -t $vim/plugin
+
+    install -D -m 444 shell/* -t $out/share/skim
+
+    installManPage man/man1/*
+
+    cat <<SCRIPT > $out/bin/sk-share
+    #! ${stdenv.shell}
+    # Run this script to find the skim shared folder where all the shell
+    # integration scripts are living.
+    echo $out/share/skim
+    SCRIPT
+    chmod +x $out/bin/sk-share
+  '';
+
+  # https://github.com/lotabout/skim/issues/440
+  doCheck = !stdenv.isAarch64;
+
+  meta = with lib; {
+    description = "Command-line fuzzy finder written in Rust";
+    homepage = "https://github.com/lotabout/skim";
+    license = licenses.mit;
+    mainProgram = "sk";
+    maintainers = with maintainers; [ dywedir ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sl/default.nix b/nixpkgs/pkgs/tools/misc/sl/default.nix
new file mode 100644
index 000000000000..bcb8de78c613
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sl/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "sl";
+  version = "5.05";
+
+  src = fetchFromGitHub {
+    owner = "eyJhb";
+    repo = "sl";
+    rev = version;
+    sha256 = "11a1rdgb8wagikhxgm81g80g5qsl59mv4qgsval3isykqh8729bj";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "CC:=$(CC)" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin sl
+    install -Dm644 -t $out/share/man/man1 sl.1{,.ja}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Steam Locomotive runs across your terminal when you type 'sl'";
+    homepage = "http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html";
+    license = rec {
+      shortName = "Toyoda Masashi's free software license";
+      fullName = shortName;
+      url = "https://github.com/eyJhb/sl/blob/master/LICENSE";
+    };
+    maintainers = with maintainers; [ eyjhb ];
+    platforms = platforms.unix;
+    mainProgram = "sl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/slingshot/default.nix b/nixpkgs/pkgs/tools/misc/slingshot/default.nix
new file mode 100644
index 000000000000..1cf9fe854c3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/slingshot/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "slingshot";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "caio-ishikawa";
+    repo = "slingshot";
+    rev = "v${version}";
+    hash = "sha256-XI6uf54sEJ0htfY43aF8/X1/OF9m6peHUGDS+2nK3xA=";
+  };
+
+  cargoHash = "sha256-NZyO6oXmgTUszp2Vc9iVAnCvM78/BJ8IfpeTrsOMvlo=";
+
+  meta = with lib; {
+    description = "Lightweight command line tool to quickly navigate across folders";
+    homepage = "https://github.com/caio-ishikawa/slingshot";
+    changelog = "https://github.com/caio-ishikawa/slingshot/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "slingshot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/slop/default.nix b/nixpkgs/pkgs/tools/misc/slop/default.nix
new file mode 100644
index 000000000000..b3903bd95153
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/slop/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, pkg-config
+, glew
+, glm
+, libGLU
+, libGL
+, libX11
+, libXext
+, libXrender
+, icu
+, libSM
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slop";
+  version = "7.6";
+
+  src = fetchFromGitHub {
+    owner = "naelstrof";
+    repo = "slop";
+    rev = "v${version}";
+    sha256 = "sha256-LdBQxw8K8WWSfm4E2QpK4GYTuYvI+FX5gLOouVFSU/U=";
+  };
+
+  patches = [
+    (fetchpatch {
+      # From Upstream PR#135: https://github.com/naelstrof/slop/pull/135
+      name = "Fix-linking-of-GLEW-library.patch";
+      url = "https://github.com/naelstrof/slop/commit/811b7e44648b9dd6c1da1554e70298cf4157e5fe.patch";
+      sha256 = "sha256-LNUrAeVZUJFNOt1csOaIid7gLBdtqRxp8AcC7f3cnIQ=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    glew
+    glm
+    libGLU
+    libGL
+    libX11
+    libXext
+    libXrender
+    icu
+    libSM
+  ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Queries a selection from the user and prints to stdout";
+    platforms = lib.platforms.linux;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+    mainProgram = "slop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sloth/default.nix b/nixpkgs/pkgs/tools/misc/sloth/default.nix
new file mode 100644
index 000000000000..2386b5a54a86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sloth/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "sloth";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "slok";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-KMVD7uH3Yg9ThnwKKzo6jom0ctFywt2vu7kNdfjiMCs=";
+  };
+
+  vendorHash = "sha256-j6qXUQ/Tu3VNQL5xBOHloRn5DH3KG/znCLi1s8RIoL8=";
+
+  subPackages = [ "cmd/sloth" ];
+
+  meta = {
+    description = "Easy and simple Prometheus SLO (service level objectives) generator";
+    homepage = "https://sloth.dev/";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ nrhtr ];
+    platforms = lib.platforms.unix;
+    mainProgram = "sloth";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/slsnif/default.nix b/nixpkgs/pkgs/tools/misc/slsnif/default.nix
new file mode 100644
index 000000000000..04bc462350f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/slsnif/default.nix
@@ -0,0 +1,19 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "slsnif";
+  version = "0.4.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/slsnif/slsnif-${version}.tar.gz";
+    sha256 = "0gn8c5hj8m3sywpwdgn6w5xl4rzsvg0z7d2w8dxi6p152j5b0pii";
+  };
+
+  meta = {
+    description = "Serial line sniffer";
+    homepage = "http://slsnif.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    mainProgram = "slsnif";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/smc/default.nix b/nixpkgs/pkgs/tools/misc/smc/default.nix
new file mode 100644
index 000000000000..99ed8de45e45
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/smc/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, jre, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "smc";
+  version = "6.6.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/smc/smc/${lib.replaceStrings ["."] ["_"] version}/smc_${lib.replaceStrings ["."] ["_"] version}.tgz";
+    sha256 = "1gv0hrgdl4wp562virpf9sib6pdhapwv4zvwbl0d5f5xyx04il11";
+  };
+
+  # Prebuilt Java package.
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/smc"
+    mkdir -p "$out/share/smc/lib"
+    mkdir -p "$out/share/icons"
+    mkdir -p "$out/share/java"
+
+    cp bin/Smc.jar "$out/share/java/"
+    cp -r examples/ docs/ tools/ README.txt LICENSE.txt "$out/share/smc/"
+    cp -r lib/* "$out/share/smc/lib/"
+    cp misc/smc.ico "$out/share/icons/"
+
+    cat > "$out/bin/smc" << EOF
+    #!${runtimeShell}
+    ${jre}/bin/java -jar "$out/share/java/Smc.jar" "\$@"
+    EOF
+    chmod a+x "$out/bin/smc"
+  '';
+
+  meta = with lib; {
+    description = "Generate state machine code from text input (state diagram)";
+    longDescription = ''
+      SMC (State Machine Compiler) takes a text input file describing states,
+      events and actions of a state machine and generates source code that
+      implements the state machine.
+
+      SMC supports many target languages:
+      C, C++, DotNet, Groovy, java, Java, JavaScript, Lua, ObjC, Perl, Php,
+      Python, Ruby, Scala, Tcl.
+
+      SMC can also generate GraphViz state diagrams from the input file.
+    '';
+    homepage = "https://smc.sourceforge.net/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mpl11;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "smc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/smenu/default.nix b/nixpkgs/pkgs/tools/misc/smenu/default.nix
new file mode 100644
index 000000000000..d2d893936f50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/smenu/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  version = "1.3.0";
+  pname = "smenu";
+
+  src = fetchFromGitHub {
+    owner = "p-gen";
+    repo = "smenu";
+    rev = "v${version}";
+    sha256 = "sha256-r2N+MmZI2KCuYarrFL2Xn5hu4FO3n5MqADRuTXMOtk0=";
+  };
+
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    homepage = "https://github.com/p-gen/smenu";
+    description = "Terminal selection utility";
+    longDescription = ''
+      Terminal utility that allows you to use words coming from the standard
+      input to create a nice selection window just below the cursor. Once done,
+      your selection will be sent to standard output.
+    '';
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    platforms = platforms.unix;
+    mainProgram = "smenu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/smug/default.nix b/nixpkgs/pkgs/tools/misc/smug/default.nix
new file mode 100644
index 000000000000..e528b2128759
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/smug/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "smug";
+  version = "0.3.3";
+
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    owner = "ivaaaan";
+    repo = "smug";
+    rev = "v${version}";
+    sha256 = "sha256-dQp9Ov8Si9DfziVtX3dXsJg+BNKYOoL9/WwdalQ5TVw=";
+  };
+
+  vendorHash = "sha256-vaDUzVRmpmNn8/vUPeR1U5N6T4llFRIk9A1lum8uauU=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" "-X=main.version=${version}" ];
+
+  postInstall = ''
+    installManPage ./man/man1/smug.1
+    installShellCompletion completion/smug.{bash,fish}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ivaaaan/smug";
+    description = "Smug - tmux session manager";
+    license = licenses.mit;
+    maintainers = with maintainers; [ juboba ];
+    mainProgram = "smug";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/snapper/default.nix b/nixpkgs/pkgs/tools/misc/snapper/default.nix
new file mode 100644
index 000000000000..dd50b9a04089
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/snapper/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, pkg-config, docbook_xsl, libxslt, docbook_xml_dtd_45
+, acl, attr, boost, btrfs-progs, coreutils, dbus, diffutils, e2fsprogs, libxml2
+, lvm2, pam, util-linux, json_c, nixosTests
+, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "snapper";
+  version = "0.10.7";
+
+  src = fetchFromGitHub {
+    owner = "openSUSE";
+    repo = "snapper";
+    rev = "v${version}";
+    sha256 = "sha256-ELhWVimZWKaHL/PK7HtALKCTmzjcZN2ScDS0yOX3lVs=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    autoreconfHook pkg-config
+    docbook_xsl libxslt docbook_xml_dtd_45
+  ];
+  buildInputs = [
+    acl attr boost btrfs-progs dbus diffutils e2fsprogs libxml2
+    lvm2 pam util-linux json_c ncurses
+  ];
+
+  passthru.tests.snapper = nixosTests.snapper;
+
+  postPatch = ''
+    # Hard-coded root paths, hard-coded root paths everywhere...
+    for file in {client,data,pam,scripts,zypp-plugin}/Makefile.am; do
+      substituteInPlace $file \
+        --replace '$(DESTDIR)/usr' "$out" \
+        --replace "DESTDIR" "out" \
+        --replace "/usr" "$out"
+    done
+    substituteInPlace pam/Makefile.am \
+      --replace '/`basename $(libdir)`' "$out/lib"
+  '';
+
+  configureFlags = [
+    "--disable-ext4"	# requires patched kernel & e2fsprogs
+    "DIFFBIN=${diffutils}/bin/diff"
+    "RMBIN=${coreutils}/bin/rm"
+  ];
+
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = "-I${libxml2.dev}/include/libxml2";
+
+  postInstall = ''
+    rm -r $out/etc/cron.*
+    patchShebangs $out/lib/zypp/plugins/commit/*
+    for file in \
+      $out/lib/pam_snapper/* \
+      $out/lib/systemd/system/* \
+      $out/share/dbus-1/system-services/* \
+    ; do
+      substituteInPlace $file --replace "/usr" "$out"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Tool for Linux filesystem snapshot management";
+    homepage = "http://snapper.io";
+    license = licenses.gpl2Only;
+    mainProgram = "snapper";
+    maintainers = with maintainers; [ markuskowa ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/snore/default.nix b/nixpkgs/pkgs/tools/misc/snore/default.nix
new file mode 100644
index 000000000000..a3b9d67bba46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/snore/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "0.3.1";
+  pname = "snore";
+
+  src = fetchFromGitHub {
+    owner = "clamiax";
+    repo = pname;
+    rev = version;
+    hash = "sha256-bKPGSePzp4XEZFY0QQr37fm3R1v3hLD6FeySFd7zNJc=";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "sleep with feedback";
+    homepage = "https://github.com/clamiax/snore";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.unix;
+    mainProgram = "snore";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/somafm-cli/default.nix b/nixpkgs/pkgs/tools/misc/somafm-cli/default.nix
new file mode 100644
index 000000000000..45f79e5bddff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/somafm-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchFromGitHub
+, makeWrapper
+, curl
+, jq
+, mpv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "somafm-cli";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "rockymadden";
+    repo = "somafm-cli";
+    rev = "v${version}";
+    sha256 = "1h5p9qsczgfr450sklh2vkllcpzb7nicbs8ciyvkavh3d7hds0yy";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -m0755 -D src/somafm $out/bin/somafm
+    wrapProgram $out/bin/somafm --prefix PATH ":" "${lib.makeBinPath [ curl jq mpv ]}";
+  '';
+
+  meta = with lib; {
+    description = "Listen to SomaFM in your terminal via pure bash";
+    homepage = "https://github.com/rockymadden/somafm-cli";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "somafm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sonota/default.nix b/nixpkgs/pkgs/tools/misc/sonota/default.nix
new file mode 100644
index 000000000000..5f341bbc98ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sonota/default.nix
@@ -0,0 +1,55 @@
+{ fetchFromGitHub, fetchurl, lib, python3Packages
+, coreVersion ? "1.13.3" # the version of the binary espurna image to flash
+, coreSize    ? "1MB"    # size of the binary image to flash
+, coreSha256  ? "0pkb2nmml0blrfiqpc46xpjc2dw927i89k1lfyqx827wanhc704x" }:
+
+with python3Packages;
+
+let
+  core = fetchurl {
+    url    = "https://github.com/xoseperez/espurna/releases/download/${coreVersion}/espurna-${coreVersion}-espurna-core-${coreSize}.bin";
+    sha256 = coreSha256;
+  };
+
+in buildPythonApplication rec {
+  pname = "sonota-unstable";
+  version = "2018-10-07";
+
+  src = fetchFromGitHub {
+    owner  = "mirko";
+    repo   = "SonOTA";
+    rev    = "d7f4b353858aae7ac403f95475a35560fb7ffeae";
+    sha256 = "0jd9xrhcyk8d2plbjnrlpn87536zr6n708797n0k5blf109q3c1z";
+  };
+
+  patches = [
+    ./set_resource_path.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace sonota.py --subst-var out
+  '';
+
+  format = "other";
+
+  propagatedBuildInputs = [ httplib2 netifaces tornado ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 sonota.py $out/bin/sonota
+    install -d $out/share/sonota
+    cp -r ssl static $out/share/sonota
+    cp ${core} $out/share/sonota/static/image_arduino.bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Flash Itead Sonoff devices with custom firmware via original OTA mechanism";
+    homepage = src.meta.homepage;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "sonota";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch b/nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch
new file mode 100644
index 000000000000..f9a802657762
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch
@@ -0,0 +1,20 @@
+diff --git a/sonota.py b/sonota.py
+index f67128b..9f2752e 100644
+--- a/sonota.py
++++ b/sonota.py
+@@ -475,14 +475,7 @@ def promptforval(msg):
+             return val
+
+ def resource_path(relative_path):
+-    """ Get absolute path to resource, works for dev and for PyInstaller """
+-    try:
+-        # PyInstaller creates a temp folder and stores path in _MEIPASS
+-        base_path = sys._MEIPASS
+-    except Exception:
+-        base_path = os.path.dirname(sys.argv[0])
+-
+-    return os.path.join(base_path, relative_path)
++    return os.path.join("@out@/share/sonota", relative_path)
+
+ def checkargs():
+     # Make sure all of the binary files that are needed are there
diff --git a/nixpkgs/pkgs/tools/misc/spacer/default.nix b/nixpkgs/pkgs/tools/misc/spacer/default.nix
new file mode 100644
index 000000000000..5bf584c07a14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/spacer/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "spacer";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "samwho";
+    repo = "spacer";
+    rev = "v${version}";
+    hash = "sha256-gxqUMtONjYPjSmxyguE9/GBC91PUK1rdFGsISGaSe44=";
+  };
+
+  cargoHash = "sha256-pMYqIl0Td2awAxe3BRglBcOychwTmFZ+pZV0QOT0CL4=";
+
+  meta = with lib; {
+    description = "CLI tool to insert spacers when command output stops";
+    homepage = "https://github.com/samwho/spacer";
+    changelog = "https://github.com/samwho/spacer/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "spacer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sqlite3-to-mysql/default.nix b/nixpkgs/pkgs/tools/misc/sqlite3-to-mysql/default.nix
new file mode 100644
index 000000000000..a4947eb6c8bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sqlite3-to-mysql/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+, nixosTests
+, testers
+, sqlite3-to-mysql
+, mysql80
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sqlite3-to-mysql";
+  version = "2.1.7";
+  format = "pyproject";
+
+  disabled = python3Packages.pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "techouse";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-TglHny0HgVth3o73GQYddh9sdyQ0L+4J4dJBAeJToiM=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    hatchling
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    click
+    mysql-connector
+    pytimeparse2
+    pymysql
+    pymysqlsa
+    simplejson
+    sqlalchemy
+    sqlalchemy-utils
+    tqdm
+    tabulate
+    unidecode
+    packaging
+    mysql80
+  ];
+
+  pythonRelaxDeps = [
+    "mysql-connector-python"
+  ];
+
+  # tests require a mysql server instance
+  doCheck = false;
+
+  # run package tests as a separate nixos test
+  passthru.tests = {
+    nixosTest = nixosTests.sqlite3-to-mysql;
+    version = testers.testVersion {
+      package = sqlite3-to-mysql;
+      command = "sqlite3mysql --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "A simple Python tool to transfer data from SQLite 3 to MySQL";
+    homepage = "https://github.com/techouse/sqlite3-to-mysql";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gador ];
+    mainProgram = "sqlite3mysql";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/srisum/default.nix b/nixpkgs/pkgs/tools/misc/srisum/default.nix
new file mode 100644
index 000000000000..8412e48d7907
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/srisum/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "srisum";
+  version = "5.0.0";
+
+  src = fetchFromGitHub {
+    owner = "zkat";
+    repo = "srisum-rs";
+    rev = "v${version}";
+    hash = "sha256-Nw3uTGOcz1ivAm9X+PnOdNA937wuK3vtJQ0iJHlHVdw=";
+  };
+  cargoHash = "sha256-q6FGykY+HmU3/jMaGRO36OlYGVLG9mU8yZ8j/Shux3s=";
+
+  doInstallCheck = true;
+
+  meta = with lib; {
+    description = "A command-line utility to compute and check subresource integrity hashes";
+    homepage = "https://github.com/zkat/srisum-rs";
+    changelog = "https://github.com/zkat/srisum-rs/raw/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ pjjw ];
+    platforms = platforms.all;
+    mainProgram = "srisum";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sshx/default.nix b/nixpkgs/pkgs/tools/misc/sshx/default.nix
new file mode 100644
index 000000000000..9ae65dcaee1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sshx/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, callPackage
+, rustPlatform
+, fetchFromGitHub
+, protobuf
+, darwin
+, stdenv
+, buildNpmPackage
+}:
+let
+  version = "unstable-2023-11-23";
+
+  src = fetchFromGitHub {
+    owner = "ekzhang";
+    repo = "sshx";
+    rev = "2677f7e1fa3b369132cc7f27f6028a04b92ba5cf";
+    hash = "sha256-9fo8hNUzJr4gse0J2tw7j+alqE82+y8McADzTkxryWk=";
+  };
+
+  mkSshxPackage = { pname, cargoHash, ... }@args:
+    rustPlatform.buildRustPackage (rec {
+      inherit
+        pname
+        version
+        src
+        cargoHash;
+
+      nativeBuildInputs = [ protobuf ];
+      buildInputs = lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
+
+      cargoBuildFlags = [ "--package" pname ];
+      cargoTestFlags = cargoBuildFlags;
+
+      meta = {
+        description = "Fast, collaborative live terminal sharing over the web";
+        homepage = "https://github.com/ekzhang/sshx";
+        license = lib.licenses.mit;
+        maintainers = with lib.maintainers; [ pinpox kranzes ];
+        mainProgram = pname;
+      };
+    } // args);
+in
+{
+  sshx = mkSshxPackage {
+    pname = "sshx";
+    cargoHash = "sha256-dA5Aen/qANW8si75pj/RsBknvOo3KDyU5UISAmmcfRE=";
+  };
+
+  sshx-server = mkSshxPackage rec {
+    pname = "sshx-server";
+    cargoHash = "sha256-1GRWCMXsOzqvORgtwfuywV4wLyX3r4nURhM3Dl5V9Ss=";
+
+    postPatch = ''
+      substituteInPlace crates/sshx-server/src/web.rs \
+        --replace 'ServeDir::new("build")' 'ServeDir::new("${passthru.web.outPath}")' \
+        --replace 'ServeFile::new("build/spa.html")' 'ServeFile::new("${passthru.web.outPath}/spa.html")'
+    '';
+
+    passthru.web = buildNpmPackage {
+      pname = "sshx-web";
+
+      inherit
+        version
+        src;
+
+      postPatch = ''
+        substituteInPlace vite.config.ts \
+          --replace 'execSync("git rev-parse --short HEAD").toString().trim()' '"${src.rev}"'
+      '';
+
+      npmDepsHash = "sha256-bKePCxo6+n0EG+4tbbMimPedJ0Hu1O8yZsgspmhobOs=";
+
+      installPhase = ''
+        mkdir -p "$out"
+        cp -r build/* "$out"
+      '';
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sta/default.nix b/nixpkgs/pkgs/tools/misc/sta/default.nix
new file mode 100644
index 000000000000..696b79447a75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sta/default.nix
@@ -0,0 +1,36 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+}:
+
+stdenv.mkDerivation {
+  pname = "sta";
+  version = "unstable-2021-11-30";
+
+  src = fetchFromGitHub {
+    owner = "simonccarter";
+    repo = "sta";
+    rev = "94559e3dfa97d415e3f37b1180b57c17c7222b4f";
+    sha256 = "sha256-AiygCfBze7J1Emy6mc27Dim34eLR7VId9wodUZapIL4=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Simple statistics from the command line interface (CLI), fast";
+    longDescription = ''
+      This is a lightweight, fast tool for calculating basic descriptive
+      statistics from the command line. Inspired by
+      https://github.com/nferraz/st, this project differs in that it is written
+      in C++, allowing for faster computation of statistics given larger
+      non-trivial data sets.
+    '';
+    license = licenses.mit;
+    homepage = "https://github.com/simonccarter/sta";
+    maintainers = with maintainers; [ infinisil ];
+    platforms = platforms.all;
+    badPlatforms = platforms.darwin;
+    mainProgram = "sta";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/star-history/default.nix b/nixpkgs/pkgs/tools/misc/star-history/default.nix
new file mode 100644
index 000000000000..9e4bbc830cbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/star-history/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, darwin
+, fetchCrate
+, pkg-config
+, openssl
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "star-history";
+  version = "1.0.18";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-PKQyGDSLFRf5eEUICdtDAkbzfljdj0HN40c7+V21wHI=";
+  };
+
+  cargoHash = "sha256-LriRO5XdcTqp+7quV11RwjNQgfzQsc5EV8GNwkuwz8s=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  meta = with lib; {
+    description = "Command line program to generate a graph showing number of GitHub stars of a user, org or repo over time";
+    homepage = "https://github.com/dtolnay/star-history";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "star-history";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/starfetch/default.nix b/nixpkgs/pkgs/tools/misc/starfetch/default.nix
new file mode 100644
index 000000000000..962409d21763
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/starfetch/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "starfetch";
+  version = "0.0.4";
+
+  src = fetchFromGitHub {
+    owner = "Haruno19";
+    repo = "starfetch";
+    rev = version;
+    sha256 = "sha256-I2M/FlLRkGtD2+GcK1l5+vFsb5tCb4T3UJTPxRx68Ww=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/starfetch.cpp --replace /usr/local/ $out/
+  '' + lib.optionalString stdenv.cc.isClang ''
+    substituteInPlace makefile --replace g++ clang++
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mkdir -p $out/share/starfetch
+    cp starfetch $out/bin/
+    cp -r res/* $out/share/starfetch/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "CLI star constellations displayer";
+    homepage = "https://github.com/Haruno19/starfetch";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ annaaurora ];
+    mainProgram = "starfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/starry/default.nix b/nixpkgs/pkgs/tools/misc/starry/default.nix
new file mode 100644
index 000000000000..a59fb3127f17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/starry/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "starry";
+  version = "2.0.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-/ZUmMLEqlpqu+Ja/3XjFJf+OFZJCz7rp5MrQBEjwsXs=";
+  };
+
+  cargoHash = "sha256-L6s1LkWnjht2VLwq1GOFiIosnZjFN9tDSLpPtokmj9o=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Current stars history tells only half the story";
+    homepage = "https://github.com/Canop/starry";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "starry";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/starship/default.nix b/nixpkgs/pkgs/tools/misc/starship/default.nix
new file mode 100644
index 000000000000..605867e285c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/starship/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, cmake
+, git
+, nixosTests
+, Security
+, Foundation
+, Cocoa
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "starship";
+  version = "1.17.1";
+
+  src = fetchFromGitHub {
+    owner = "starship";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-e+vhisUzSYKUUoYfSaQwpfMz2OzNcZbeHgbvyPon18g=";
+  };
+
+  nativeBuildInputs = [ installShellFiles cmake ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security Foundation Cocoa ];
+
+  NIX_LDFLAGS = lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [ "-framework" "AppKit" ];
+
+  # tries to access HOME only in aarch64-darwin environment when building mac-notification-sys
+  preBuild = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    export HOME=$TMPDIR
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd starship \
+      --bash <($out/bin/starship completions bash) \
+      --fish <($out/bin/starship completions fish) \
+      --zsh <($out/bin/starship completions zsh)
+
+    presetdir=$out/share/starship/presets/
+    mkdir -p $presetdir
+    cp docs/.vuepress/public/presets/toml/*.toml $presetdir
+  '';
+
+  cargoHash = "sha256-xLlZyLvS9AcXQHxjyL4Dden1rEwCLB8/comfRyqXXCI=";
+
+  nativeCheckInputs = [ git ];
+
+  preCheck = ''
+    HOME=$TMPDIR
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) starship;
+  };
+
+  meta = with lib; {
+    description = "A minimal, blazing fast, and extremely customizable prompt for any shell";
+    homepage = "https://starship.rs";
+    license = licenses.isc;
+    maintainers = with maintainers; [ danth davidtwco Br1ght0ne Frostman marsam ];
+    mainProgram = "starship";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/staruml/default.nix b/nixpkgs/pkgs/tools/misc/staruml/default.nix
new file mode 100644
index 000000000000..058c2118db54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/staruml/default.nix
@@ -0,0 +1,80 @@
+{ stdenv, lib, fetchurl
+, dpkg, wrapGAppsHook
+, hicolor-icon-theme
+, gtk3, glib, systemd
+, xorg, nss, nspr
+, atk, at-spi2-atk, dbus
+, gdk-pixbuf, pango, cairo
+, expat, libdrm, mesa
+, alsa-lib, at-spi2-core, cups
+, libxkbcommon }:
+
+let
+  LD_LIBRARY_PATH = lib.makeLibraryPath [
+    glib gtk3 xorg.libXdamage
+    xorg.libX11 xorg.libxcb xorg.libXcomposite
+    xorg.libXcursor xorg.libXext xorg.libXfixes
+    xorg.libXi xorg.libXrender xorg.libXtst
+    xorg.libxshmfence libxkbcommon nss
+    nspr atk at-spi2-atk
+    dbus gdk-pixbuf pango cairo
+    xorg.libXrandr expat libdrm
+    mesa alsa-lib at-spi2-core
+    cups
+  ];
+in
+stdenv.mkDerivation (finalAttrs: {
+  version = "6.0.1";
+  pname = "staruml";
+
+  src = fetchurl {
+      url = "https://files.staruml.io/releases-v6/StarUML_${finalAttrs.version}_amd64.deb";
+      sha256 = "sha256-LxulOfYjdJrDjRL661S0W9slIXvhLc+kXZN6e3TfXVs=";
+    };
+
+  nativeBuildInputs = [ wrapGAppsHook dpkg ];
+  buildInputs = [ glib hicolor-icon-theme ];
+
+  unpackPhase = ''
+    mkdir pkg
+    dpkg-deb -x $src pkg
+    sourceRoot=pkg
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv opt $out
+
+    mv usr/share $out
+    rm -rf $out/share/doc
+
+    substituteInPlace $out/share/applications/staruml.desktop \
+      --replace "/opt/StarUML/staruml" "$out/bin/staruml"
+
+    mkdir -p $out/lib
+    ln -s ${stdenv.cc.cc.lib}/lib/libstdc++.so.6 $out/lib/
+    ln -s ${lib.getLib systemd}/lib/libudev.so.1 $out/lib/libudev.so.0
+
+    patchelf \
+      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      $out/opt/StarUML/staruml
+
+    ln -s $out/opt/StarUML/staruml $out/bin/staruml
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH ':' $out/lib:${LD_LIBRARY_PATH}
+    )
+  '';
+
+  meta = with lib; {
+    description = "A sophisticated software modeler";
+    homepage = "https://staruml.io/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ kashw2 ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "staruml";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/statserial/default.nix b/nixpkgs/pkgs/tools/misc/statserial/default.nix
new file mode 100644
index 000000000000..526729dcd31c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/statserial/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, ncurses, glibc }:
+
+stdenv.mkDerivation rec {
+  pname = "statserial";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "http://www.ibiblio.org/pub/Linux/system/serial/${pname}-${version}.tar.gz";
+    sha256 = "0rrrmxfba5yn836zlgmr8g9xnrpash7cjs7lk2m44ac50vakpks0";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace '-lcurses' '-lncurses'
+
+    substituteInPlace Makefile \
+      --replace 'LDFLAGS = -s -N' '#LDFLAGS = -s -N'
+  '';
+
+  buildInputs = [ ncurses glibc ];
+
+  installPhase = ''
+  mkdir -p $out/bin
+  cp statserial $out/bin
+
+  mkdir -p $out/share/man/man1
+  cp statserial.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    homepage = "https://sites.google.com/site/tranter/software";
+    description = "Display serial port modem status lines";
+    license = licenses.gpl2;
+
+    longDescription =
+      '' Statserial displays a table of the signals on a standard 9-pin or
+      25-pin serial port, and indicates the status of the handshaking lines. It
+      can be useful for debugging problems with serial ports or modems.
+      '';
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ rps ];
+    mainProgram = "statserial";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/stderred/default.nix b/nixpkgs/pkgs/tools/misc/stderred/default.nix
new file mode 100644
index 000000000000..f159e4328c9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/stderred/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, fetchFromGitHub
+, cmake
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stderred";
+  version = "unstable-2021-04-28";
+
+  src = fetchFromGitHub {
+    owner = "sickill";
+    repo = "stderred";
+    rev = "b2238f7c72afb89ca9aaa2944d7f4db8141057ea";
+    sha256 = "sha256-k/EA327AsRHgUYu7QqSF5yzOyO6h5XcE9Uv4l1VcIPI=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  sourceRoot = "${src.name}/src";
+
+  meta = with lib; {
+    description = "stderr in red";
+    homepage = "https://github.com/sickill/stderred";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vojta001 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/steampipe/default.nix b/nixpkgs/pkgs/tools/misc/steampipe/default.nix
new file mode 100644
index 000000000000..ecfa780cc532
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/steampipe/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "steampipe";
+  version = "0.21.7";
+
+  src = fetchFromGitHub {
+    owner = "turbot";
+    repo = "steampipe";
+    rev = "v${version}";
+    hash = "sha256-puaqAMUnlQNOQmxhJCKQKTBypTjdModijtIpPBZsIXY=";
+  };
+
+  vendorHash = "sha256-yS2FiTnK65LAY3tGSlMy0LMg6691tS/9yQ4w7HrW/pw=";
+  proxyVendor = true;
+
+  patchPhase = ''
+    runHook prePatch
+    # Patch test that relies on looking up homedir in user struct to prefer ~
+    substituteInPlace pkg/steampipeconfig/shared_test.go \
+      --replace 'filehelpers "github.com/turbot/go-kit/files"' "" \
+      --replace 'filepaths.SteampipeDir, _ = filehelpers.Tildefy("~/.steampipe")' 'filepaths.SteampipeDir = "~/.steampipe"';
+    runHook postPatch
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  # panic: could not create backups directory: mkdir /var/empty/.steampipe: operation not permitted
+  doCheck = !stdenv.isDarwin;
+
+  postInstall = ''
+    INSTALL_DIR=$(mktemp -d)
+    installShellCompletion --cmd steampipe \
+      --bash <($out/bin/steampipe --install-dir $INSTALL_DIR completion bash) \
+      --fish <($out/bin/steampipe --install-dir $INSTALL_DIR completion fish) \
+      --zsh <($out/bin/steampipe --install-dir $INSTALL_DIR completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://steampipe.io/";
+    description = "select * from cloud;";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ hardselius ];
+    changelog = "https://github.com/turbot/steampipe/blob/v${version}/CHANGELOG.md";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/storcli/default.nix b/nixpkgs/pkgs/tools/misc/storcli/default.nix
new file mode 100644
index 000000000000..e5f01b6926c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/storcli/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenvNoCC
+, fetchzip
+, rpmextract
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "storcli";
+  version = "7.2309.00";
+
+  src = fetchzip {
+    url = "https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/Unified_storcli_all_os_${version}00.0000.zip";
+    sha256 = "sha256-n2MzT2LHLHWMWhshWXJ/Q28w9EnLrW6t7hLNveltxLo=";
+  };
+
+  nativeBuildInputs = [ rpmextract ];
+
+  unpackPhase = let
+    inherit (stdenvNoCC.hostPlatform) system;
+    platforms = {
+      x86_64-linux = "Linux";
+      aarch64-linux = "ARM/Linux";
+    };
+    platform = platforms.${system} or (throw "unsupported system: ${system}");
+  in ''
+    rpmextract $src/${platform}/storcli-00${version}00.0000-1.*.rpm
+  '';
+
+  dontPatch = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    install -D ./opt/MegaRAID/storcli/storcli64 $out/bin/storcli64
+    ln -s storcli64 $out/bin/storcli
+  '';
+
+  # Not needed because the binary is statically linked
+  dontFixup = true;
+
+  meta = with lib; {
+    # Unfortunately there is no better page for this.
+    # Filter for downloads, set 100 items per page. Sort by newest does not work.
+    # Then search manually for the latest version.
+    homepage = "https://www.broadcom.com/site-search?q=storcli";
+    description = "Storage Command Line Tool";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ panicgh ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/stow/default.nix b/nixpkgs/pkgs/tools/misc/stow/default.nix
new file mode 100644
index 000000000000..c91cfdabc278
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/stow/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, perl, perlPackages }:
+
+let
+  pname = "stow";
+  version = "2.3.1";
+in
+stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnu/stow/stow-${version}.tar.bz2";
+    sha256 = "0bs2b90wjkk1camcasy8kn403kazq6c7fj5m5msfl3navbgwz9i6";
+  };
+
+  buildInputs = with perlPackages; [ perl IOStringy TestOutput ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A tool for managing the installation of multiple software packages in the same run-time directory tree";
+
+    longDescription = ''
+      GNU Stow is a symlink farm manager which takes distinct packages
+      of software and/or data located in separate directories on the
+      filesystem, and makes them appear to be installed in the same
+      place. For example, /usr/local/bin could contain symlinks to
+      files within /usr/local/stow/emacs/bin, /usr/local/stow/perl/bin
+      etc., and likewise recursively for any other subdirectories such
+      as .../share, .../man, and so on.
+    '';
+
+    license = licenses.gpl3Plus;
+    homepage = "https://www.gnu.org/software/stow/";
+    maintainers = with maintainers; [ sarcasticadmin ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/subberthehut/default.nix b/nixpkgs/pkgs/tools/misc/subberthehut/default.nix
new file mode 100644
index 000000000000..913bc49a5116
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/subberthehut/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, xmlrpc_c, glib, zlib }:
+stdenv.mkDerivation rec {
+  pname = "subberthehut";
+  version = "20";
+
+  src = fetchFromGitHub {
+    owner  = "mus65";
+    repo   = "subberthehut";
+    rev    = version;
+    sha256 = "19prdqbk19h0wak318g2jn1mnfm7l7f83a633bh0rhskysmqrsj1";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ xmlrpc_c glib zlib ];
+
+  installPhase = ''
+    install -Dm755 subberthehut $out/bin/subberthehut
+    install -Dm644 bash_completion $out/share/bash-completion/completions/subberthehut
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mus65/subberthehut";
+    description = "An OpenSubtitles.org downloader";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jqueiroz ];
+    mainProgram = "subberthehut";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sutils/default.nix b/nixpkgs/pkgs/tools/misc/sutils/default.nix
new file mode 100644
index 000000000000..f611b7adc07c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sutils/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, alsa-lib }:
+
+stdenv.mkDerivation rec {
+   version = "0.2";
+   pname = "sutils";
+
+   src = fetchFromGitHub {
+     owner = "baskerville";
+     repo = "sutils";
+     rev = version;
+     sha256 = "0i2g6a6xdaq3w613dhq7mnsz4ymwqn6kvkyan5kgy49mzq97va6j";
+   };
+
+   hardeningDisable = [ "format" ];
+
+   buildInputs = [ alsa-lib ];
+
+   prePatch = ''sed -i "s@/usr/local@$out@" Makefile'';
+
+   meta = {
+     description = "Small command-line utilities";
+     homepage = "https://github.com/baskerville/sutils";
+     maintainers = [ lib.maintainers.meisternu ];
+     license = "Custom";
+     platforms = lib.platforms.linux;
+   };
+}
diff --git a/nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix b/nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix
new file mode 100644
index 000000000000..f777c73e0beb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, python3Packages
+, perl
+, zip
+, gitMinimal
+, ffmpeg
+}:
+
+let
+
+  inherit (python3Packages)
+    python pytest nose3 cryptography pyyaml requests mock requests-mock
+    python-dateutil setuptools;
+
+  version = "4.69";
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "svtplay-dl";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "spaam";
+    repo = "svtplay-dl";
+    rev = version;
+    hash = "sha256-F8VyeIj9I7oDpHTyGw1T8ZvC6kxYf15soY9ni0Zg7u4=";
+  };
+
+  pythonPaths = [ cryptography pyyaml requests ];
+  buildInputs = [ python perl python-dateutil setuptools ] ++ pythonPaths;
+  nativeBuildInputs = [ gitMinimal zip makeWrapper ];
+  nativeCheckInputs = [ nose3 pytest mock requests-mock ];
+
+  postPatch = ''
+    substituteInPlace scripts/run-tests.sh \
+      --replace 'PYTHONPATH=lib' 'PYTHONPATH=lib:$PYTHONPATH'
+
+    sed -i '/def test_sublang2\?(/ i\    @unittest.skip("accesses network")' \
+      lib/svtplay_dl/tests/test_postprocess.py
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" "SYSCONFDIR=$(out)/etc" "PYTHON=${python.interpreter}" ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/svtplay-dl" \
+      --prefix PATH : "${ffmpeg}" \
+      --prefix PYTHONPATH : "$PYTHONPATH"
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    sh scripts/run-tests.sh -2
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/svtplay-dl --help > /dev/null
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/spaam/svtplay-dl";
+    description = "Command-line tool to download videos from svtplay.se and other sites";
+    license = licenses.mit;
+    platforms = lib.platforms.unix;
+    mainProgram = "svtplay-dl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/svu/default.nix b/nixpkgs/pkgs/tools/misc/svu/default.nix
new file mode 100644
index 000000000000..0fafaffc153b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/svu/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, svu }:
+
+buildGoModule rec {
+  pname = "svu";
+  version = "1.12.0";
+
+  src = fetchFromGitHub {
+    owner = "caarlos0";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-MztFramrNqxYmdTRf857HOC7H66dLvezG6LL9njxWUs=";
+  };
+
+  vendorHash = "sha256-+e1oL08KvBSNaRepGR2SBBrEDJaGxl5V9rOBysGEfQs=";
+
+  ldflags = [ "-s" "-w" "-X=main.version=${version}" "-X=main.builtBy=nixpkgs" ];
+
+  # test assumes source directory to be a git repository
+  postPatch = ''
+    rm internal/git/git_test.go
+  '';
+
+  passthru.tests.version = testers.testVersion { package = svu; };
+
+  meta = with lib; {
+    description = "Semantic Version Util";
+    homepage = "https://github.com/caarlos0/svu";
+    maintainers = with maintainers; [ caarlos0 ];
+    license = licenses.mit;
+    mainProgram = "svu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/swaglyrics/default.nix b/nixpkgs/pkgs/tools/misc/swaglyrics/default.nix
new file mode 100644
index 000000000000..4b9095ff59d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/swaglyrics/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, python3
+, fetchFromGitHub
+, ncurses
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "swaglyrics";
+  version = "unstable-2021-06-17";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "SwagLyrics";
+    repo = "SwagLyrics-For-Spotify";
+    rev = "99fe764a9e45cac6cb9fcdf724c7d2f8cb4524fb";
+    hash = "sha256-O48T1WsUIVnNQb8gmzSkFFHTOiFOKVSAEYhF9zUqZz0=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "==" ">="
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    colorama
+    flask
+    requests
+    swspotify
+    unidecode
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    blinker
+    flask
+    flask-testing
+    mock
+    pytestCheckHook
+  ] ++ [
+    ncurses
+  ];
+
+  preBuild = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  disabledTests = [
+     # Disable tests which touch network
+     "test_database_for_unsupported_song"
+     "test_that_lyrics_works_for_unsupported_songs"
+     "test_that_get_lyrics_works"
+     "test_lyrics_are_shown_in_tab"
+     "test_songchanged_can_raise_songplaying"
+  ];
+
+  pythonImportsCheck = [
+    "swaglyrics"
+  ];
+
+  meta = with lib; {
+    description = "Lyrics fetcher for currently playing Spotify song";
+    homepage = "https://github.com/SwagLyrics/SwagLyrics-For-Spotify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    mainProgram = "swaglyrics";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/synth/default.nix b/nixpkgs/pkgs/tools/misc/synth/default.nix
new file mode 100644
index 000000000000..92e4e8531f9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/synth/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, AppKit
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "synth";
+  version = "0.6.9";
+
+  src = fetchFromGitHub {
+    owner = "shuttle-hq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/z2VEfeCCuffxlMh4WOpYkMSAgmh+sbx3ajcD5d4DdE=";
+  };
+
+  cargoSha256 = "sha256-i2Pp9sfTBth3DtrQ99Vw+KLnGECrkqtlRNAKiwSWf48=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    AppKit
+    Security
+  ];
+
+  checkFlags = [
+    # https://github.com/shuttle-hq/synth/issues/309
+    "--skip=docs_blog_2021_08_31_seeding_databases_tutorial_dot_md"
+  ];
+
+  # requires unstable rust features
+  RUSTC_BOOTSTRAP = 1;
+
+  meta = with lib; {
+    description = "A tool for generating realistic data using a declarative data model";
+    homepage = "https://github.com/getsynth/synth";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/system-config-printer/default.nix b/nixpkgs/pkgs/tools/misc/system-config-printer/default.nix
new file mode 100644
index 000000000000..cafc35790193
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/system-config-printer/default.nix
@@ -0,0 +1,85 @@
+{ lib, stdenv, fetchFromGitHub, udev, pkg-config, glib, xmlto, wrapGAppsHook
+, docbook_xml_dtd_412, docbook_xsl
+, libxml2, desktop-file-utils, libusb1, cups, gdk-pixbuf, pango, atk, libnotify
+, gobject-introspection, libsecret, packagekit
+, cups-filters, gettext, libtool, autoconf-archive
+, python3Packages, autoreconfHook, bash, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "system-config-printer";
+  version = "1.5.18";
+
+  src = fetchFromGitHub {
+    owner = "openPrinting";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-l3HEnYycP56vZWREWkAyHmcFgtu09dy4Ds65u7eqNZk=";
+  };
+
+  prePatch = ''
+    # for automake
+    touch README ChangeLog
+    # for tests
+    substituteInPlace Makefile.am --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  patches = [
+    ./detect_serverbindir.patch
+    # fix typeerror, remove on next release
+    (fetchpatch {
+      url = "https://github.com/OpenPrinting/system-config-printer/commit/399b3334d6519639cfe7f1c0457e2475b8ee5230.patch";
+      sha256 = "sha256-JCdGmZk2vRn3X1BDxOJaY3Aw8dr0ODVzi0oY20ZWfRs=";
+      excludes = [ "NEWS" ];
+    })
+  ];
+
+  buildInputs = [
+    glib udev libusb1 cups
+    python3Packages.python
+    libnotify gdk-pixbuf pango atk packagekit
+    libsecret
+  ];
+
+  nativeBuildInputs = [
+    pkg-config gettext libtool autoconf-archive
+    xmlto libxml2 docbook_xml_dtd_412 docbook_xsl desktop-file-utils
+    python3Packages.wrapPython
+    wrapGAppsHook autoreconfHook gobject-introspection
+  ];
+
+  pythonPath = with python3Packages; requiredPythonModules [ pycups pycurl dbus-python pygobject3 pycairo pysmbc ];
+
+  configureFlags = [
+    "--with-udev-rules"
+    "--with-udevdir=${placeholder "out"}/etc/udev"
+    "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+  ];
+
+  stripDebugList = [ "bin" "lib" "etc/udev" ];
+
+  doCheck = true;
+
+  postInstall =
+    ''
+      buildPythonPath "$out $pythonPath"
+      gappsWrapperArgs+=(
+        --prefix PATH : "$program_PATH"
+        --set CUPS_DATADIR "${cups-filters}/share/cups"
+      )
+
+      find $out/share/system-config-printer -name \*.py -type f -perm -0100 -print0 | while read -d "" f; do
+        patchPythonScript "$f"
+      done
+      patchPythonScript $out/etc/udev/udev-add-printer
+
+      substituteInPlace $out/etc/udev/rules.d/70-printers.rules \
+        --replace "udev-configure-printer" "$out/etc/udev/udev-configure-printer"
+    '';
+
+  meta = {
+    homepage = "https://github.com/openprinting/system-config-printer";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch b/nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch
new file mode 100644
index 000000000000..2cd3058f2330
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch
@@ -0,0 +1,17 @@
+diff --git a/cupshelpers/config.py.in b/cupshelpers/config.py.in
+index 55abbfc..1244327 100644
+--- a/cupshelpers/config.py.in
++++ b/cupshelpers/config.py.in
+@@ -22,3 +22,12 @@
+ prefix="@prefix@"
+ sysconfdir="@sysconfdir@"
+ cupsserverbindir="@cupsserverbindir@"
++
++try:
++    with open("/etc/cups/cups-files.conf") as config:
++        for cfgline in config:
++            args = cfgline.split(" ")
++            if len(args) == 2 and args[0] == "ServerBin":
++                cupsserverbindir = args[1].strip()
++except OSError:
++    pass
diff --git a/nixpkgs/pkgs/tools/misc/systrayhelper/default.nix b/nixpkgs/pkgs/tools/misc/systrayhelper/default.nix
new file mode 100644
index 000000000000..1635054b56c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/systrayhelper/default.nix
@@ -0,0 +1,41 @@
+{ lib, pkg-config, libappindicator-gtk3, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "systrayhelper";
+  version = "unstable-2021-05-20";
+  rev = "da47887f050cf0f22d9348cb4493df9ffda2a229";
+
+  src = fetchFromGitHub {
+    owner = "ssbc";
+    repo = "systrayhelper";
+    rev = rev;
+    hash = "sha256-9ejpARZghXhb3EJDvNcidg5QM8Z+P91ICGuA89ksqeA=";
+  };
+
+  vendorHash = null;
+
+  # re date: https://github.com/NixOS/nixpkgs/pull/45997#issuecomment-418186178
+  # > .. keep the derivation deterministic. Otherwise, we would have to rebuild it every time.
+  ldflags = [
+    "-X main.version=v${version}"
+    "-X main.commit=${rev}"
+    "-X main.date=nix-byrev"
+    "-s"
+    "-w"
+  ];
+
+  nativeBuildInputs = [ pkg-config libappindicator-gtk3 ];
+  buildInputs = [ libappindicator-gtk3 ];
+
+  doCheck = false; # Display required
+
+  meta = with lib; {
+    description = "A systray utility written in go, using json over stdio for control and events";
+    homepage = "https://github.com/ssbc/systrayhelper";
+    maintainers = with maintainers; [ cryptix ];
+    license = licenses.mit;
+    # It depends on the inputs, i guess? not sure about solaris, for instance. go supports it though
+    # I hope nix can figure this out?! ¯\\_(ツ)_/¯
+    mainProgram = "systrayhelper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sysz/default.nix b/nixpkgs/pkgs/tools/misc/sysz/default.nix
new file mode 100644
index 000000000000..37b34aec2d27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sysz/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenvNoCC, fetchFromGitHub, makeWrapper, fzf, gawk }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "sysz";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "joehillen";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-X9vj6ILPUKFo/i50JNehM2GSDWfxTdroWGYJv765Cm4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 sysz $out/libexec/sysz
+    makeWrapper $out/libexec/sysz $out/bin/sysz \
+      --prefix PATH : ${lib.makeBinPath [ fzf gawk ]}
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/joehillen/sysz";
+    description = "A fzf terminal UI for systemctl";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ hleboulanger ];
+    platforms = platforms.unix;
+    changelog = "https://github.com/joehillen/sysz/blob/${version}/CHANGELOG.md";
+    mainProgram = "sysz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/szyszka/default.nix b/nixpkgs/pkgs/tools/misc/szyszka/default.nix
new file mode 100644
index 000000000000..335bc81febe0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/szyszka/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, glib
+, cairo
+, pango
+, atk
+, gdk-pixbuf
+, gtk4
+, wrapGAppsHook
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "szyszka";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "qarmin";
+    repo = "szyszka";
+    rev = version;
+    hash = "sha256-LkXGKDFKaY+mg53ZEO4h2br/4eRle/QbSQJTVEMpAoY=";
+  };
+
+  cargoHash = "sha256-WJR1BogNnQoZeOt5yBFzjYNZS8OmE84R1FbQpHTb7V0=";
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    cairo
+    pango
+    atk
+    gdk-pixbuf
+    gtk4
+  ];
+
+  meta = with lib; {
+    description = "A simple but powerful and fast bulk file renamer";
+    homepage = "https://github.com/qarmin/szyszka";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kranzes ];
+    mainProgram = "szyszka";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/t/Gemfile b/nixpkgs/pkgs/tools/misc/t/Gemfile
new file mode 100644
index 000000000000..29813d30ba6b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/Gemfile
@@ -0,0 +1,6 @@
+source "https://rubygems.org"
+
+gem 't'
+# Needed because the twitter gem changed API.
+# https://github.com/sferik/t/issues/402
+gem 'twitter', '~> 6.1.0'
diff --git a/nixpkgs/pkgs/tools/misc/t/Gemfile.lock b/nixpkgs/pkgs/tools/misc/t/Gemfile.lock
new file mode 100644
index 000000000000..9555e08f9715
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/Gemfile.lock
@@ -0,0 +1,65 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.6.0)
+      public_suffix (>= 2.0.2, < 4.0)
+    buftok (0.2.0)
+    domain_name (0.5.20180417)
+      unf (>= 0.0.5, < 1.0.0)
+    equalizer (0.0.11)
+    faraday (0.11.0)
+      multipart-post (>= 1.2, < 3)
+    geokit (1.13.1)
+    htmlentities (4.3.4)
+    http (2.2.2)
+      addressable (~> 2.3)
+      http-cookie (~> 1.0)
+      http-form_data (~> 1.0.1)
+      http_parser.rb (~> 0.6.0)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    http-form_data (1.0.3)
+    http_parser.rb (0.6.0)
+    launchy (2.4.3)
+      addressable (~> 2.3)
+    memoizable (0.4.2)
+      thread_safe (~> 0.3, >= 0.3.1)
+    multipart-post (2.0.0)
+    naught (1.1.0)
+    oauth (0.5.4)
+    public_suffix (3.0.3)
+    retryable (2.0.4)
+    simple_oauth (0.3.1)
+    t (3.1.0)
+      geokit (~> 1.9)
+      htmlentities (~> 4.3)
+      launchy (~> 2.4)
+      oauth (~> 0.5.1)
+      retryable (~> 2.0)
+      thor (>= 0.19.1, < 2)
+      twitter (~> 6.0)
+    thor (0.20.3)
+    thread_safe (0.3.6)
+    twitter (6.1.0)
+      addressable (~> 2.5)
+      buftok (~> 0.2.0)
+      equalizer (= 0.0.11)
+      faraday (~> 0.11.0)
+      http (~> 2.1)
+      http_parser.rb (~> 0.6.0)
+      memoizable (~> 0.4.2)
+      naught (~> 1.1)
+      simple_oauth (~> 0.3.1)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.6)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  t
+  twitter (~> 6.1.0)
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/t/default.nix b/nixpkgs/pkgs/tools/misc/t/default.nix
new file mode 100644
index 000000000000..4d0c961847ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "t";
+  gemdir = ./.;
+  exes = [ "t" ];
+
+  passthru.updateScript = bundlerUpdateScript "t";
+
+  meta = with lib; {
+    description = "A command-line power tool for Twitter";
+    homepage    = "http://sferik.github.io/t/";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ offline manveru nicknovitski ];
+    platforms   = platforms.unix;
+    mainProgram = "t";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/t/gemset.nix b/nixpkgs/pkgs/tools/misc/t/gemset.nix
new file mode 100644
index 000000000000..a61eb81b1da9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/gemset.nix
@@ -0,0 +1,262 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  buftok = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v";
+      type = "gem";
+    };
+    version = "0.5.20180417";
+  };
+  equalizer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18p1csdivgwmshfw3mb698a3bn0yrykg30khk5qxjf6n168g91jr";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  geokit = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mvdpbx88wflqqrcrfa54a5sckvj2sqzm304p7ji3c06frbhmxw8";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  htmlentities = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj";
+      type = "gem";
+    };
+    version = "4.3.4";
+  };
+  http = {
+    dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kcd9qp8vm1rkyp7gfh8j0dbl3zpi97vz2vbhpbcsdsa7l21a59r";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  http-form_data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8dwwbfpf8kc0lcsqcgy29lflszd1x4d7kc0f7227892m7r6y0m";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  launchy = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2";
+      type = "gem";
+    };
+    version = "2.4.3";
+  };
+  memoizable = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  naught = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y";
+      type = "gem";
+    };
+    version = "0.5.4";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  retryable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pxv5xgr08s9gv5npj7h3raxibywznrv2wcrb85ibhlhzgzcxggf";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  simple_oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  t = {
+    dependencies = ["geokit" "htmlentities" "launchy" "oauth" "retryable" "thor" "twitter"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qj5zqc819yiscqbyb93alxillyli5ajvrr4gzq52clgkvyap7bd";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  twitter = {
+    dependencies = ["addressable" "buftok" "equalizer" "faraday" "http" "http_parser.rb" "memoizable" "naught" "simple_oauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l9zv0pg0q4mgcxyhzk2fj57bcs907mbargdr9l0ccnp6xi5sp8v";
+      type = "gem";
+    };
+    version = "6.1.0";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ll6w64ibh81qwvjx19h8nj7mngxgffg7aigjx11klvf5k2g4nxf";
+      type = "gem";
+    };
+    version = "0.0.7.6";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/t1utils/default.nix b/nixpkgs/pkgs/tools/misc/t1utils/default.nix
new file mode 100644
index 000000000000..be9cf659160b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t1utils/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "t1utils";
+  version = "1.42";
+
+  src = fetchurl {
+    url = "https://www.lcdf.org/type/t1utils-${version}.tar.gz";
+    sha256 = "YYd5NbGYcETd/0u5CgUgDKcWRnijVeFwv18aVVbMnyk=";
+  };
+
+  meta = with lib; {
+    description = "Collection of simple Type 1 font manipulation programs";
+    longDescription = ''
+      t1utils is a collection of simple type-1 font manipulation programs.
+      Together, they allow you to convert between PFA (ASCII) and PFB (binary)
+      formats, disassemble PFA or PFB files into human-readable form,
+      reassemble them into PFA or PFB format. Additionally you can extract font
+      resources from a Macintosh font file or create a Macintosh Type 1 font
+      file from a PFA or PFB font.
+    '';
+    homepage = "https://www.lcdf.org/type/";
+    license = {
+      shortName = "Click"; # README.md says BSD-like, see LICENSE
+      url = "https://github.com/kohler/t1utils/blob/master/LICENSE";
+      free = true;
+      redistributable = true;
+    };
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tab-rs/default.nix b/nixpkgs/pkgs/tools/misc/tab-rs/default.nix
new file mode 100644
index 000000000000..26b4fa724b48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tab-rs/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, IOKit }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tab-rs";
+  version = "0.5.7";
+
+  src = fetchFromGitHub {
+    owner = "austinjones";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1crj0caimin667f9kz34c0sm77892dmqaf1kxryqakqm75az5wfr";
+  };
+
+  cargoSha256 = "0v5vkxr2sncw4r4pwvk0jbk4as7zwwfvjk2cpj9872zp07s35a77";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ IOKit ];
+
+  # many tests are failing
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Intuitive, config-driven terminal multiplexer designed for software & systems engineers";
+    homepage = "https://github.com/austinjones/tab-rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "tab";
+    broken = (stdenv.isDarwin && stdenv.isAarch64); # Added 2023-11-13
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tagref/default.nix b/nixpkgs/pkgs/tools/misc/tagref/default.nix
new file mode 100644
index 000000000000..5220c27055b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tagref/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tagref";
+  version = "1.8.5";
+
+  src = fetchFromGitHub {
+    owner = "stepchowfun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-IeGWaPoq4AJAQjsIHa7dWNuIBB3JZr6WBzh63+xRYco=";
+  };
+
+  cargoHash = "sha256-9Xkbj1PS+mlcB/f9rvcMBGUCCngkcfom6M6Zvp7Dgrg=";
+
+  meta = with lib; {
+    description = "Manage cross-references in your code";
+    homepage = "https://github.com/stepchowfun/tagref";
+    license = licenses.mit;
+    maintainers = [ maintainers.yusdacra ];
+    platforms = platforms.unix;
+    mainProgram = "tagref";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tailer/default.nix b/nixpkgs/pkgs/tools/misc/tailer/default.nix
new file mode 100644
index 000000000000..96631875f5a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tailer/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, tailer
+}:
+
+buildGoModule rec {
+  pname = "tailer";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "hionay";
+    repo = "tailer";
+    rev = "v${version}";
+    hash = "sha256-gPezz2ksqdCffgdAHwU2NMTar2glp5YGfA5C+tMYPtE=";
+  };
+
+  vendorHash = "sha256-nQqSvfN+ed/g5VkbD6XhZNA1G3CGGfwFDdadJ5+WoD0=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = tailer;
+    };
+  };
+
+  meta = with lib; {
+    description = "A CLI tool to insert lines when command output stops";
+    homepage = "https://github.com/hionay/tailer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "tailer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tailspin/default.nix b/nixpkgs/pkgs/tools/misc/tailspin/default.nix
new file mode 100644
index 000000000000..c3262cb26ac1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tailspin/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tailspin";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "bensadeh";
+    repo = "tailspin";
+    rev = version;
+    hash = "sha256-cZG4Yu//MKLkQeGP7q+8O0Iy72iyyxfOERsS6kzT7ts=";
+  };
+
+  cargoHash = "sha256-rOKJAmqL58UHuG6X5fcQ4UEw2U3g81lKftmFeKy25+w=";
+
+  meta = with lib; {
+    description = "A log file highlighter";
+    homepage = "https://github.com/bensadeh/tailspin";
+    changelog = "https://github.com/bensadeh/tailspin/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "tspin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/taoup/cachefile.patch b/nixpkgs/pkgs/tools/misc/taoup/cachefile.patch
new file mode 100644
index 000000000000..7c92b2180c67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/taoup/cachefile.patch
@@ -0,0 +1,35 @@
+--- a/taoup-fortune	2021-09-05 12:16:23.408295791 +0800
++++ b/taoup-fortune	2021-09-05 13:02:52.286440200 +0800
+@@ -5,31 +5,9 @@
+ #        - https://github.com/matheuss/parrotsay
+ #        - https://github.com/busyloop/lolcat
+ #        - https://github.com/sckott/cowsay (enhanced version)
+-dir=`dirname "${BASH_SOURCE[0]}"`
+-
+-# USER ALERT!!! @ronjouch complained about execution speed at https://github.com/globalcitizen/taoup/issues/11 
+-#  ... therefore we add caching ... therefore first ensure we have an up to date cache via one of ...
+-# md5sum
+-if [ `which md5sum 2>/dev/null` ]; then
+- MD5SUM=`md5sum ${dir}/taoup | cut -d ' ' -f1`
+-# md5
+-elif [ `which md5 2>/dev/null` ]; then
+- MD5SUM=`md5 -q ${dir}/taoup | cut -d ' ' -f1`
+-# openssl
+-elif [ `which openssl 2>/dev/null` ]; then
+- MD5SUM=`cat ${dir}/taoup | openssl md5 | grep -o '[[:xdigit:]][[:xdigit:]]*$' |cut -d '=' -f2- |cut -c 2-`
+-# ruby
+-elif [ `which ruby 2>/dev/null` ]; then
+- MD5SUM=`ruby -rdigest/md5 -e"puts Digest::MD5.file'${dir}/taoup'"`
+-fi
+ 
+ # determine cachefile name
+-cachefile=${dir}/.taoup-fortune.cache.${MD5SUM}
+-
+-# create if necessary
+-if [ ! -r $cachefile ]; then
+- ${dir}/taoup $@ >${cachefile}
+-fi
++cachefile=@out@/lib/taoup/cache
+ 
+ # handle all classes of society
+ if [ `which cowsay 2>/dev/null` ]; then
diff --git a/nixpkgs/pkgs/tools/misc/taoup/default.nix b/nixpkgs/pkgs/tools/misc/taoup/default.nix
new file mode 100644
index 000000000000..4d991a88cf11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/taoup/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv, fetchFromGitHub, ruby, bash, ncurses }:
+let
+  rubyEnv = ruby.withPackages (ps: with ps; [ ansi ]);
+in
+stdenv.mkDerivation rec {
+  pname = "taoup";
+  version = "1.21";
+
+  src = fetchFromGitHub {
+    owner = "globalcitizen";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-UHo3c+DQn77CJONy/QXM55rpIdhVkJbhR82tqmUltPQ=";
+  };
+
+  buildInputs = [ rubyEnv bash ncurses ];
+
+  patches = [
+    # Pre-create a cache within this derivation
+    ./cachefile.patch
+    # Remove the need to test for `tput`, depend on ncurses directly
+    ./tput.patch
+    # Fix the script name in `taoup --help` output
+    ./help.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace taoup \
+     --subst-var-by ncurses ${ncurses} \
+     --subst-var-by pname ${pname}
+    substituteInPlace taoup-fortune \
+      --subst-var-by out $out \
+      --replace "/bin/bash" "${bash}/bin/bash"
+  '';
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,lib/taoup}
+
+    cp taoup $out/lib/taoup
+    cat > $out/bin/taoup <<EOF
+    #!${bash}/bin/bash
+    exec ${rubyEnv}/bin/ruby "$out/lib/taoup/taoup" "\$@"
+    EOF
+    chmod +x $out/bin/taoup
+
+    # Populate the cache created by cachedir.patch above
+    $out/bin/taoup > $out/lib/taoup/cache
+
+    cp taoup-fortune $out/bin
+    chmod +x $out/bin/taoup-fortune
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "The Tao of Unix Programming (Ruby-powered ANSI colored fortunes)";
+    homepage = "https://github.com/globalcitizen/taoup";
+    license = lib.licenses.gpl3Only;
+    maintainers = [ lib.maintainers.zakame ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/taoup/help.patch b/nixpkgs/pkgs/tools/misc/taoup/help.patch
new file mode 100644
index 000000000000..e8b5f91f3c8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/taoup/help.patch
@@ -0,0 +1,21 @@
+--- a/taoup	2021-09-07 16:45:00.000000000 +0800
++++ b/taoup	2021-09-07 16:46:00.000000000 +0800
+@@ -7,12 +7,12 @@
+ 
+ # show help if requested
+ if ARGV[0] == '--help' or ARGV[0] == '-h' then
+- puts "usage: " + $0 + " [arguments]"
+- puts "       " + $0 + "                    Display all fortunes and sections."
+- puts "       " + $0 + " < --help | -h >    This help."
+- puts "       " + $0 + " --whitetrash       Convert ANSI colors for light/white terminals."
+- puts "       " + $0 + " --machine          Remove ANSI colors."
+- puts "       " + $0 + " --fortune          Convert output to fortune format (and lose colors)."
++ puts "usage: " + "@pname@" + " [arguments]"
++ puts "       " + "@pname@" + "                    Display all fortunes and sections."
++ puts "       " + "@pname@" + " < --help | -h >    This help."
++ puts "       " + "@pname@" + " --whitetrash       Convert ANSI colors for light/white terminals."
++ puts "       " + "@pname@" + " --machine          Remove ANSI colors."
++ puts "       " + "@pname@" + " --fortune          Convert output to fortune format (and lose colors)."
+  exit(0)
+ end
+ # ... but optionally make sure ANSI escape sequences are filtered out
diff --git a/nixpkgs/pkgs/tools/misc/taoup/tput.patch b/nixpkgs/pkgs/tools/misc/taoup/tput.patch
new file mode 100644
index 000000000000..5c82024885bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/taoup/tput.patch
@@ -0,0 +1,17 @@
+--- a/taoup	2021-09-05 12:43:48.334615538 +0800
++++ b/taoup	2021-09-05 12:55:07.631617799 +0800
+@@ -26,11 +26,9 @@
+  zero_colors = true
+  fortunify = true
+ else
+- if `which tput` then
+-  colors = `tput colors`
+-  if colors.chop == "-1" then
+-   zero_colors = true
+-  end
++ colors = `@ncurses@/bin/tput colors`
++ if colors.chop == "-1" then
++  zero_colors = true
+  end
+ end
+ if ARGV[0] == '--whitetrash' then
diff --git a/nixpkgs/pkgs/tools/misc/tbls/default.nix b/nixpkgs/pkgs/tools/misc/tbls/default.nix
new file mode 100644
index 000000000000..7d0921abb8d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tbls/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, tbls
+}:
+
+buildGoModule rec {
+  pname = "tbls";
+  version = "1.73.2";
+
+  src = fetchFromGitHub {
+    owner = "k1LoW";
+    repo = "tbls";
+    rev = "v${version}";
+    hash = "sha256-UXvUewArdClOolWFgN4Ta11vzq9C9zBjEzVGTtWSjiA=";
+  };
+
+  vendorHash = "sha256-zNQADZkAaohTZReD8qTnNJsfy58NXdQjUdd5j8KcOyY=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  CGO_CFLAGS = [ "-Wno-format-security" ];
+
+  preCheck = ''
+    # Remove tests that require additional services.
+    rm -f \
+       datasource/*_test.go \
+       drivers/*/*_test.go
+  '';
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd tbls \
+      --bash <($out/bin/tbls completion bash) \
+      --fish <($out/bin/tbls completion fish) \
+      --zsh <($out/bin/tbls completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = tbls;
+    command = "tbls version";
+    inherit version;
+  };
+
+  meta = with lib; {
+    description = "A tool to generate documentation based on a database structure";
+    homepage = "https://github.com/k1LoW/tbls";
+    changelog = "https://github.com/k1LoW/tbls/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    mainProgram = "tbls";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tcat/default.nix b/nixpkgs/pkgs/tools/misc/tcat/default.nix
new file mode 100644
index 000000000000..5afa7e83affa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tcat/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tcat";
+  version = "1.0.0";
+  src = fetchFromGitHub {
+    owner = "rsc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1szzfz5xsx9l8gjikfncgp86hydzpvsi0y5zvikd621xkp7g7l21";
+  };
+  vendorHash = null;
+  subPackages = ".";
+
+  meta = with lib; {
+    description = "Table cat";
+    homepage = "https://github.com/rsc/tcat";
+    maintainers = with maintainers; [ mmlb ];
+    license = licenses.bsd3;
+    mainProgram = "tcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/td/Gemfile b/nixpkgs/pkgs/tools/misc/td/Gemfile
new file mode 100644
index 000000000000..d22bf73732c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem 'td'
diff --git a/nixpkgs/pkgs/tools/misc/td/Gemfile.lock b/nixpkgs/pkgs/tools/misc/td/Gemfile.lock
new file mode 100644
index 000000000000..b777a8b411aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/Gemfile.lock
@@ -0,0 +1,40 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    fluent-logger (0.8.0)
+      msgpack (>= 1.0.0, < 2)
+    hirb (0.7.3)
+    httpclient (2.8.3)
+    msgpack (1.2.6)
+    parallel (1.13.0)
+    ruby-progressbar (1.10.0)
+    rubyzip (1.2.2)
+    td (0.16.4)
+      hirb (>= 0.4.5)
+      msgpack
+      parallel (~> 1.8)
+      ruby-progressbar (~> 1.7)
+      rubyzip (>= 1.2.1)
+      td-client (>= 1.0.6, < 2)
+      td-logger (>= 0.3.21, < 2)
+      yajl-ruby (~> 1.1)
+      zip-zip (~> 0.3)
+    td-client (1.0.6)
+      httpclient (>= 2.7)
+      msgpack (>= 0.5.6, < 2)
+    td-logger (0.3.27)
+      fluent-logger (>= 0.5.0, < 2.0)
+      msgpack (>= 0.5.6, < 2.0)
+      td-client (>= 0.8.66, < 2.0)
+    yajl-ruby (1.4.1)
+    zip-zip (0.3)
+      rubyzip (>= 1.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  td
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/td/default.nix b/nixpkgs/pkgs/tools/misc/td/default.nix
new file mode 100644
index 000000000000..ebfe642a27d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "td";
+  gemdir = ./.;
+  exes = [ "td" ];
+
+  passthru.updateScript = bundlerUpdateScript "td";
+
+  meta = with lib; {
+    description = "CLI to manage data on Treasure Data, the Hadoop-based cloud data warehousing";
+    homepage    = "https://github.com/treasure-data/td";
+    license     = licenses.asl20;
+    maintainers =  with maintainers; [ groodt nicknovitski ];
+    platforms   = platforms.unix;
+    mainProgram = "td";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/td/gemset.nix b/nixpkgs/pkgs/tools/misc/td/gemset.nix
new file mode 100644
index 000000000000..53d9df0502d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/gemset.nix
@@ -0,0 +1,103 @@
+{
+  fluent-logger = {
+    dependencies = ["msgpack"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yr6vrai4fqajpzybmdlajf8wzsgy29kr1318amn21y9nhjlnys5";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  hirb = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mzch3c2lvmf8gskgzlx6j53d10j42ir6ik2dkrl27sblhy76cji";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+  httpclient = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  msgpack = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0031gd2mjyba6jb7m97sqa149zjkr0vzn2s2gpb3m9nb67gqkm13";
+      type = "gem";
+    };
+    version = "1.2.6";
+  };
+  parallel = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "005shcy8dabc7lwydpkbhd3fx8bfqzvsj6g04r90mx0wky10lz84";
+      type = "gem";
+    };
+    version = "1.13.0";
+  };
+  ruby-progressbar = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  rubyzip = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  td = {
+    dependencies = ["hirb" "msgpack" "parallel" "ruby-progressbar" "rubyzip" "td-client" "td-logger" "yajl-ruby" "zip-zip"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nlxpc4nasgmv6mqanb6ag1q3wmryja2c174dzgwxngxa0y2j1yn";
+      type = "gem";
+    };
+    version = "0.16.4";
+  };
+  td-client = {
+    dependencies = ["httpclient" "msgpack"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5jcsgg020cm8xarbbw67mca4k8cx5pfyd2mm3wcqrnc1cl2bgp";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+  td-logger = {
+    dependencies = ["fluent-logger" "msgpack" "td-client"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y56gilaqk9a4lfhzb777ysmsq77pi1aqkr4q485a7f5dwnpwl1p";
+      type = "gem";
+    };
+    version = "0.3.27";
+  };
+  yajl-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16v0w5749qjp13xhjgr2gcsvjv6mf35br7iqwycix1n2h7kfcckf";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  zip-zip = {
+    dependencies = ["rubyzip"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ny3zv1sn9wasamykfkg7b7xgs6w7k5fy8kggiyjj9vrwfzzavqg";
+      type = "gem";
+    };
+    version = "0.3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tdfgo/default.nix b/nixpkgs/pkgs/tools/misc/tdfgo/default.nix
new file mode 100644
index 000000000000..0d9e5950b51a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tdfgo/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tdfgo";
+  version = "unstable-2022-08-25";
+
+  src = fetchFromGitHub {
+    owner = "digitallyserviced";
+    repo = "tdfgo";
+    rev = "9f0b3315eed32409639a05aca55d7a0252681193";
+    sha256 = "sha256-Lr4+bXdVxYbCXKVzE+fjeLD559HuABK6lOLJ0sBBGNY=";
+  };
+
+  vendorHash = "sha256-T6PSs5NfXSXvzlq67rIDbzURyA+25df3nMMfufo0fow=";
+
+  meta = with lib; {
+    description = "TheDraw font parser and console text renderer";
+    longDescription = "Supports more fonts than `tdfiglet`, and packs more features.";
+    homepage = "https://github.com/digitallyserviced/tdfgo";
+    license = licenses.cc0;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ crinklywrappr ];
+    mainProgram = "tdfgo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tea/default.nix b/nixpkgs/pkgs/tools/misc/tea/default.nix
new file mode 100644
index 000000000000..8e985c9ec13d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tea/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitea }:
+
+buildGoModule rec {
+  pname = "tea";
+  version = "0.9.2";
+
+  src = fetchFromGitea {
+    domain = "gitea.com";
+    owner = "gitea";
+    repo = "tea";
+    rev = "v${version}";
+    sha256 = "sha256-sZfg8+LIu1Ejvmr/o4X3EOz3fv+RvLhrGRf2yy+6t8c=";
+  };
+
+  vendorHash = "sha256-nb0lQEAaIYlGpodFQLhMk/24DmTgg5K3zQ4s/XY+Z1w=";
+
+  meta = with lib; {
+    description = "Gitea official CLI client";
+    homepage    = "https://gitea.com/gitea/tea";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ j4m3s techknowlogick ];
+    mainProgram = "tea";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tealdeer/default.nix b/nixpkgs/pkgs/tools/misc/tealdeer/default.nix
new file mode 100644
index 000000000000..ce06bdfdce8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tealdeer/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tealdeer";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "dbrgn";
+    repo = "tealdeer";
+    rev = "v${version}";
+    sha256 = "sha256-zQzYukhruVUVP1v76/5522ag7wjN9QoE9BtfMNYQ7UY=";
+  };
+
+  cargoSha256 = "sha256-VeJsCWU7sJy88uvGGjpuGRzsAgBRvzOYU1FwpImpiLk=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd tldr \
+      --bash completion/bash_tealdeer \
+      --fish completion/fish_tealdeer \
+      --zsh completion/zsh_tealdeer
+  '';
+
+  # Disable tests that require Internet access:
+  checkFlags = [
+    "--skip test_autoupdate_cache"
+    "--skip test_create_cache_directory_path"
+    "--skip test_pager_flag_enable"
+    "--skip test_quiet_cache"
+    "--skip test_quiet_failures"
+    "--skip test_quiet_old_cache"
+    "--skip test_spaces_find_command"
+    "--skip test_update_cache"
+  ];
+
+  meta = with lib; {
+    description = "A very fast implementation of tldr in Rust";
+    homepage = "https://github.com/dbrgn/tealdeer";
+    maintainers = with maintainers; [ davidak newam ];
+    license = with licenses; [ asl20 mit ];
+    mainProgram = "tldr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/Gemfile b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile
new file mode 100644
index 000000000000..046ba3d536e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'teamocil'
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock
new file mode 100644
index 000000000000..aeca8cadf869
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    teamocil (1.4.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  teamocil
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/default.nix b/nixpkgs/pkgs/tools/misc/teamocil/default.nix
new file mode 100644
index 000000000000..4344668809ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/default.nix
@@ -0,0 +1,21 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv {
+  inherit ruby;
+  pname = "teamocil";
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "teamocil";
+
+  meta = with lib; {
+    description     = "A simple tool used to automatically create windows and panes in tmux with YAML files";
+    homepage        = "https://github.com/remiprev/teamocil";
+    license         = licenses.mit;
+    platforms       = platforms.all;
+    maintainers     = with maintainers; [
+      zachcoyle
+      nicknovitski
+    ];
+    mainProgram = "teamocil";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/gemset.nix b/nixpkgs/pkgs/tools/misc/teamocil/gemset.nix
new file mode 100644
index 000000000000..2c522b096c81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/gemset.nix
@@ -0,0 +1,10 @@
+{
+  teamocil = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l5f33faipb45xx7ds67s7dqgvjlljlcxgpgig4pg8p002vg06r2";
+      type = "gem";
+    };
+    version = "1.4.2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tensorman/default.nix b/nixpkgs/pkgs/tools/misc/tensorman/default.nix
new file mode 100644
index 000000000000..b6f11d190c10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tensorman/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "tensorman";
+  version = "unstable-2023-03-13";
+
+  src = fetchFromGitHub {
+    owner = "pop-os";
+    repo = "tensorman";
+    rev = "b1125f71b55a8d9a4d674a62fa1e8868d40d0f0d";
+    hash = "sha256-WMX+nzNQTGeSUxOfMHo+U0ICYx8rttXpQrQClwU2zX8=";
+  };
+
+  cargoHash = "sha256-y/AE2jTVetqBBExBlPEB0LwIVk+LjB2i0ZjijLPs9js=";
+
+  meta = with lib; {
+    description = "Utility for easy management of Tensorflow containers";
+    homepage = "https://github.com/pop-os/tensorman";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ thefenriswolf ];
+    mainProgram = "tensorman";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tere/default.nix b/nixpkgs/pkgs/tools/misc/tere/default.nix
new file mode 100644
index 000000000000..70bd03ccaa49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tere/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tere";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "mgunyho";
+    repo = "tere";
+    rev = "v${version}";
+    sha256 = "sha256-xqbFBRzBfTwSdkC8e85yANdVA45G6E1FYlTXP8QfVIk=";
+  };
+
+  cargoHash = "sha256-Y2Zgo/VAJxzQd2cXxyiJS5AqcVRClAuUsEogivK3EJw=";
+
+  postPatch = ''
+    rm .cargo/config.toml;
+  '';
+
+  meta = with lib; {
+    description = "A faster alternative to cd + ls";
+    homepage = "https://github.com/mgunyho/tere";
+    license = licenses.eupl12;
+    maintainers = with maintainers; [ ProducerMatt ];
+    mainProgram = "tere";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/termplay/default.nix b/nixpkgs/pkgs/tools/misc/termplay/default.nix
new file mode 100644
index 000000000000..aa35e24da017
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/termplay/default.nix
@@ -0,0 +1,40 @@
+{ rustPlatform, fetchFromGitLab, lib, makeWrapper, gst_all_1, libsixel }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "termplay";
+  version = "2.0.6";
+
+  src = fetchFromGitLab {
+    owner = "jD91mZM2";
+    repo = "termplay";
+    rev = "v${version}";
+    sha256 = "1w7hdqgqr1jgxid3k7f2j52wz31gv8bzr9rsm6xzp7nnihp6i45p";
+  };
+
+  cargoSha256 = "08ip6x4kink244majlk595yh551c2ap3ry58wly994mh8wf6ifwb";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-ugly
+    gst_all_1.gst-plugins-bad
+    libsixel
+  ];
+
+  buildFeatures = [ "bin" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/termplay --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
+  '';
+
+  meta = with lib; {
+    description = "Play an image/video in your terminal";
+    homepage = "https://jd91mzm2.github.io/termplay/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    mainProgram = "termplay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/termtosvg/default.nix b/nixpkgs/pkgs/tools/misc/termtosvg/default.nix
new file mode 100644
index 000000000000..86217693a58f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/termtosvg/default.nix
@@ -0,0 +1,21 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "termtosvg";
+  version = "1.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1vk5kn8w3zf2ymi76l8cpwmvvavkmh3b9lb18xw3x1vzbmhz2f7d";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ lxml pyte wcwidth ];
+
+  meta = with lib; {
+    homepage = "https://nbedos.github.io/termtosvg/";
+    description = "Record terminal sessions as SVG animations";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "termtosvg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tewisay/default.nix b/nixpkgs/pkgs/tools/misc/tewisay/default.nix
new file mode 100644
index 000000000000..f4ae05711285
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tewisay/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, unstableGitUpdater
+}:
+
+buildGoModule rec {
+  pname = "tewisay";
+  version = "unstable-2022-11-04";
+
+  # lucy deleted the old repo, this is a fork/mirror
+  src = fetchFromGitHub {
+    owner = "raymond-w-ko";
+    repo = "tewisay";
+    rev = "caa5b0131dda868f656716d2107f02d04d1048d4";
+    hash = "sha256-E492d8P/Bek9xZlJP+k9xvIJEFtA1YrIB/pogvz3wM4=";
+  };
+
+  vendorHash = "sha256-WcpRJ31kqWA255zfjuWDj0honJgSGdm4ONx2yOKk7/g=";
+
+  # Currently hard-coded, will be fixed by developer
+  postPatch = ''
+    substituteInPlace main.go \
+      --replace "/usr" "$out"
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share
+    mv {cows,zsh} $out/share
+  '';
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    homepage = "https://github.com/raymond-w-ko/tewisay";
+    description = "Cowsay replacement with unicode and partial ansi escape support";
+    license = with licenses; [ cc0 ];
+    maintainers = with maintainers; [ Madouura ];
+    mainProgram = "tewisay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix b/nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix
new file mode 100644
index 000000000000..94219a004250
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "texi2mdoc";
+  version = "0.1.2";
+
+  src = fetchurl {
+    url = "http://mdocml.bsd.lv/texi2mdoc/snapshots/${pname}-${version}.tgz";
+    sha256 = "1zjb61ymwfkw6z5g0aqmsn6qpw895zdxv7fv3059gj3wqa3zsibs";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "http://mdocml.bsd.lv/";
+    description = "converter from Texinfo into mdoc";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ramkromberg ];
+    mainProgram = "texi2mdoc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tfk8s/default.nix b/nixpkgs/pkgs/tools/misc/tfk8s/default.nix
new file mode 100644
index 000000000000..52795b754002
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tfk8s/default.nix
@@ -0,0 +1,49 @@
+{ lib, buildGoModule, fetchFromGitHub, callPackage }:
+
+buildGoModule rec {
+  pname = "tfk8s";
+  version = "0.1.10";
+  tag = "v${version}";
+
+  src = fetchFromGitHub {
+    owner = "jrhouston";
+    repo = "tfk8s";
+    rev = tag;
+    sha256 = "sha256-VLpXL5ABnCxc+7dV3sZ6wsY2nKn2yfu7eTjtn881/XQ=";
+  };
+
+  vendorHash = "sha256-eTADcUW9b6l47BkWF9YLxdcgvMbCzWTjLF28FneJHg8=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.toolVersion=${tag}"
+    "-X main.builtBy=nixpkgs"
+  ];
+
+  doCheck = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/tfk8s --version | grep ${tag} > /dev/null
+  '';
+
+  passthru.tests = {
+    sample1 = callPackage ./tests/sample1 { };
+  };
+
+  meta = with lib; {
+    description = "An utility to convert Kubernetes YAML manifests to Terraform's HCL format";
+    license = licenses.mit;
+    longDescription = ''
+      tfk8s is a tool that makes it easier to work with the Terraform Kubernetes Provider.
+      If you want to copy examples from the Kubernetes documentation or migrate existing YAML manifests and use them with Terraform without having to convert YAML to HCL by hand, this tool is for you.
+      Features:
+      * Convert a YAML file containing multiple manifests.
+      * Strip out server side fields when piping kubectl get $R -o yaml | tfk8s --strip
+    '';
+    homepage = "https://github.com/jrhouston/tfk8s/";
+    maintainers = with maintainers; [ bryanasdev000 ];
+    mainProgram = "tfk8s";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/default.nix b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/default.nix
new file mode 100644
index 000000000000..6b06dbf32340
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/default.nix
@@ -0,0 +1,11 @@
+{ runCommandCC, tfk8s }:
+
+runCommandCC "tfk8s-test-sample1" {
+    buildInputs = [
+      tfk8s
+    ];
+    meta.timeout = 60;
+  }
+  ''
+    cmp <(${tfk8s}/bin/tfk8s -f ${./input.yaml}) ${./output.tf} > $out
+  ''
diff --git a/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml
new file mode 100644
index 000000000000..58ed0eb11d76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml
@@ -0,0 +1,7 @@
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: test
+data:
+  TEST: test
diff --git a/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/output.tf b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/output.tf
new file mode 100644
index 000000000000..51d564400b55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/output.tf
@@ -0,0 +1,12 @@
+resource "kubernetes_manifest" "configmap_test" {
+  manifest = {
+    "apiVersion" = "v1"
+    "data" = {
+      "TEST" = "test"
+    }
+    "kind" = "ConfigMap"
+    "metadata" = {
+      "name" = "test"
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/tools/misc/tgpt/default.nix b/nixpkgs/pkgs/tools/misc/tgpt/default.nix
new file mode 100644
index 000000000000..cf100e5d33fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tgpt/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tgpt";
+  version = "2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "aandrew-me";
+    repo = "tgpt";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-+5hNcemVVuCX1FCL6U9SoJ/Jsef9exQXQFCdPj8qhCk=";
+  };
+
+  vendorHash = "sha256-HXpSoihk0s218DVCHe9VCGLBggWY8I25sw2qSaiUz4I=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "ChatGPT in terminal without needing API keys";
+    homepage = "https://github.com/aandrew-me/tgpt";
+    changelog = "https://github.com/aandrew-me/tgpt/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "tgpt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thefuck/default.nix b/nixpkgs/pkgs/tools/misc/thefuck/default.nix
new file mode 100644
index 000000000000..d7a90fa8891f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thefuck/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, buildPythonApplication
+, colorama, decorator, psutil, pyte, six
+, go, mock, pytestCheckHook, pytest-mock
+}:
+
+buildPythonApplication rec {
+  pname = "thefuck";
+  version = "3.32";
+
+  src = fetchFromGitHub {
+    owner = "nvbn";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-bRCy95owBJaxoyCNQF6gEENoxCkmorhyKzZgU1dQN6I=";
+  };
+
+  propagatedBuildInputs = [ colorama decorator psutil pyte six ];
+
+  nativeCheckInputs = [ go mock pytestCheckHook pytest-mock ];
+
+  disabledTests = lib.optionals stdenv.isDarwin [
+    "test_settings_defaults"
+    "test_from_file"
+    "test_from_env"
+    "test_settings_from_args"
+    "test_get_all_executables_exclude_paths"
+    "test_with_blank_cache"
+    "test_with_filled_cache"
+    "test_when_etag_changed"
+    "test_for_generic_shell"
+    "test_on_first_run"
+    "test_on_run_after_other_commands"
+    "test_when_cant_configure_automatically"
+    "test_when_already_configured"
+    "test_when_successfully_configured"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/nvbn/thefuck";
+    description = "Magnificent app which corrects your previous console command";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/theme-sh/default.nix b/nixpkgs/pkgs/tools/misc/theme-sh/default.nix
new file mode 100644
index 000000000000..3d4125873151
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/theme-sh/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, coreutils, gawk }:
+
+stdenv.mkDerivation rec {
+  pname = "theme-sh";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "lemnos";
+    repo = "theme.sh";
+    rev = "v${version}";
+    sha256 = "sha256-zDw8WGBzO4/HRCgN7yoUxT49ibTz+QkRa5WpBQbl1nI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install -Dm755 bin/theme.sh $out/bin
+    wrapProgram $out/bin/theme.sh \
+      --prefix PATH : ${lib.makeBinPath [ coreutils gawk ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A script which lets you set your $terminal theme";
+    homepage = "https://github.com/lemnos/theme.sh";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "theme.sh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix b/nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix
new file mode 100644
index 000000000000..bff6c9c96887
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, expat, libaio, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "thin-provisioning-tools";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "jthornber";
+    repo = "thin-provisioning-tools";
+    rev = "v${version}";
+    sha256 = "1iwg04rhmdhijmlk5hfl8wvv83115lzb65if6cc1glkkfva8jfjp";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ expat libaio boost ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/jthornber/thin-provisioning-tools/";
+    description = "A suite of tools for manipulating the metadata of the dm-thin device-mapper target";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thinkpad-scripts/default.nix b/nixpkgs/pkgs/tools/misc/thinkpad-scripts/default.nix
new file mode 100644
index 000000000000..5b9b9eae7ad5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thinkpad-scripts/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildPythonPackage, fetchFromGitHub, python3Packages }:
+
+buildPythonPackage rec {
+  pname = "thinkpad-scripts";
+  version = "4.12.0";
+
+  src = fetchFromGitHub {
+    owner = "martin-ueding";
+    repo = "thinkpad-scripts";
+    rev = "v${version}";
+    sha256 = "08adx8r5pwwazbnfahay42l5f203mmvcn2ipz5hg8myqc9jxm2ky";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ setuptools ];
+
+  meta = {
+    description = "Screen rotation, docking and other scripts for ThinkPad® X220 and X230 Tablet";
+    homepage = "https://github.com/martin-ueding/thinkpad-scripts";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ dawidsowa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thumbs/default.nix b/nixpkgs/pkgs/tools/misc/thumbs/default.nix
new file mode 100644
index 000000000000..e7f785b9e5bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thumbs/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "thumbs";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "fcsonline";
+    repo = "tmux-thumbs";
+    rev = version;
+    sha256 = "sha256-XMz1ZOTz2q1Dt4QdxG83re9PIsgvxTTkytESkgKxhGM=";
+  };
+
+  cargoSha256 = "sha256-PfTx6PcW5DESShfr9Ekhbq1asZ0xUGM4Vi9EwmoDv+s";
+
+  patches = [ ./fix.patch ];
+
+  meta = with lib; {
+    homepage = "https://github.com/fcsonline/tmux-thumbs";
+    description = "A lightning fast version of tmux-fingers written in Rust, copy/pasting tmux like vimium/vimperator";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ghostbuster91 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thumbs/fix.patch b/nixpkgs/pkgs/tools/misc/thumbs/fix.patch
new file mode 100644
index 000000000000..35b7a9169165
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thumbs/fix.patch
@@ -0,0 +1,13 @@
+diff --git i/src/swapper.rs w/src/swapper.rs
+index c901f48..cbd278d 100644
+--- i/src/swapper.rs
++++ w/src/swapper.rs
+@@ -215,7 +215,7 @@ impl<'a> Swapper<'a> {
+     };
+ 
+     let pane_command = format!(
+-        "tmux capture-pane -J -t {active_pane_id} -p{scroll_params} | tail -n {height} | {dir}/target/release/thumbs -f '%U:%H' -t {tmp} {args}; tmux swap-pane -t {active_pane_id}; {zoom_command} tmux wait-for -S {signal}",
++        "tmux capture-pane -J -t {active_pane_id} -p{scroll_params} | tail -n {height} | {dir}/thumbs -f '%U:%H' -t {tmp} {args}; tmux swap-pane -t {active_pane_id}; {zoom_command} tmux wait-for -S {signal}",
+         active_pane_id = active_pane_id,
+         scroll_params = scroll_params,
+         height = self.active_pane_height.unwrap_or(i32::MAX),
diff --git a/nixpkgs/pkgs/tools/misc/time-decode/default.nix b/nixpkgs/pkgs/tools/misc/time-decode/default.nix
new file mode 100644
index 000000000000..edd0eba43a24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/time-decode/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "time-decode";
+  version = "6.1.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "digitalsleuth";
+    repo = "time_decode";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-LbXycu3Yiku9ToW+WS/yUqwicvckj2IkP09TiZkRXnk=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    python-dateutil
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "time_decode"
+  ];
+
+  meta = with lib; {
+    description = "Timestamp and date decoder";
+    homepage = "https://github.com/digitalsleuth/time_decode";
+    changelog = "https://github.com/digitalsleuth/time_decode/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "time-decode";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/time/default.nix b/nixpkgs/pkgs/tools/misc/time/default.nix
new file mode 100644
index 000000000000..1df89b323838
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/time/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "time";
+  version = "1.9";
+
+  src = fetchurl {
+    url = "mirror://gnu/time/time-${finalAttrs.version}.tar.gz";
+    hash = "sha256-+6zwyB5iQp3z4zvaTO44dWYE8Y4B2XczjiMwaj47Uh4=";
+  };
+
+  meta = {
+    description = "Tool that runs programs and summarizes the system resources they use";
+    longDescription = ''
+      The `time' command runs another program, then displays
+      information about the resources used by that program, collected
+      by the system while the program was running.  You can select
+      which information is reported and the format in which it is
+      shown, or have `time' save the information in a file instead of
+      displaying it on the screen.
+
+      The resources that `time' can report on fall into the general
+      categories of time, memory, and I/O and IPC calls.  Some systems
+      do not provide much information about program resource use;
+      `time' reports unavailable information as zero values.
+    '';
+    license = lib.licenses.gpl3Plus;
+    homepage = "https://www.gnu.org/software/time/";
+    platforms = lib.platforms.unix;
+    mainProgram = "time";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/timelimit/default.nix b/nixpkgs/pkgs/tools/misc/timelimit/default.nix
new file mode 100644
index 000000000000..534cd320bf1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timelimit/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitLab, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "timelimit";
+  version = "1.9.2";
+
+  src = fetchFromGitLab {
+    owner = "timelimit";
+    repo = pname;
+    rev = "release/${version}";
+    sha256 = "sha256-5IEAF8zCKaCVH6BAxjoa/2rrue9pRGBBkFzN57d+g+g=";
+  };
+
+  nativeCheckInputs = [ perl ];
+  doCheck = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+  INSTALL_PROGRAM = "install -m755";
+  INSTALL_DATA = "install -m644";
+
+  meta = with lib; {
+    description = "Execute a command and terminates the spawned process after a given time with a given signal";
+    homepage = "https://devel.ringlet.net/sysutils/timelimit/";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "timelimit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/timer/default.nix b/nixpkgs/pkgs/tools/misc/timer/default.nix
new file mode 100644
index 000000000000..908127575e7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timer/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, timer }:
+
+buildGoModule rec {
+  pname = "timer";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "caarlos0";
+    repo = "timer";
+    rev = "v${version}";
+    hash = "sha256-8BVzijAXsJ8Q8BhDmhzFbEQ23fUEBdmbUsCPxfpXyBA=";
+  };
+
+  vendorHash = "sha256-1n5vZKlOWoB2SFdDdv+pPWLybzCIJG/wdBYqLMatjNA=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  passthru.tests.version = testers.testVersion { package = timer; };
+
+  meta = with lib; {
+    description = "A `sleep` with progress";
+    homepage = "https://github.com/caarlos0/timer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zowoq caarlos0 ];
+    mainProgram = "timer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/timetagger_cli/default.nix b/nixpkgs/pkgs/tools/misc/timetagger_cli/default.nix
new file mode 100644
index 000000000000..f6204e2d8fe1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timetagger_cli/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "timetagger_cli";
+  version = "23.8.3";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "almarklein";
+    repo = "timetagger_cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-vOpwMR7/EGf/l5KvlHn7mQ1vGGZ1Whd5x2uxLV9nCbk=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+    toml
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Track your time from the command-line ";
+    homepage = "https://github.com/almarklein/timetagger_cli";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ matthiasbeyer ];
+    mainProgram = "timetagger";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/timidity/configure-compat.patch b/nixpkgs/pkgs/tools/misc/timidity/configure-compat.patch
new file mode 100644
index 000000000000..4368f389e0f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timidity/configure-compat.patch
@@ -0,0 +1,33 @@
+--- a/configure	2018-08-28 19:33:39.000000000 -0400
++++ b/configure	2023-09-05 19:44:27.311279263 -0400
+@@ -6874,6 +6874,7 @@
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ctype.h>
++#include <stdlib.h>
+ #if ((' ' & 0x0FF) == 0x020)
+ # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+@@ -7731,6 +7732,7 @@
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ctype.h>
++#include <stdlib.h>
+ #if ((' ' & 0x0FF) == 0x020)
+ # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+@@ -10311,8 +10313,13 @@
+   if test "$cross_compiling" = yes; then
+   ac_cv_func_fork_works=cross
+ else
+-  cat >conftest.$ac_ext <<_ACEOF
++   cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++   cat confdefs.h >>conftest.$ac_ext
++   cat >>conftest.$ac_ext <<_ACEOF
+ /* By Ruediger Kuhlmann. */
++      #include <stdlib.h>
+       #include <sys/types.h>
+       #if HAVE_UNISTD_H
+       # include <unistd.h>
diff --git a/nixpkgs/pkgs/tools/misc/timidity/default.nix b/nixpkgs/pkgs/tools/misc/timidity/default.nix
new file mode 100644
index 000000000000..65d154476f02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timidity/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, memstreamHook
+, CoreAudio
+, libobjc
+, libjack2
+, ncurses
+, alsa-lib
+, buildPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "timidity";
+  version = "2.15.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/timidity/TiMidity++-${version}.tar.bz2";
+    sha256 = "1xf8n6dqzvi6nr2asags12ijbj1lwk1hgl3s27vm2szib8ww07qn";
+  };
+
+  patches = [
+    ./timidity-iA-Oj.patch
+    # Fixes misdetection of features by clang 16. The configure script itself is patched because
+    # it is old and does not work nicely with autoreconfHook.
+    ./configure-compat.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config ]
+    ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [ memstreamHook ];
+  buildInputs = [
+    libjack2
+    ncurses
+  ] ++ lib.optionals stdenv.isLinux [
+    alsa-lib
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreAudio
+    libobjc
+  ];
+
+  configureFlags = [
+    "--enable-ncurses"
+    "lib_cv_va_copy=yes"
+    "lib_cv___va_copy=yes"
+  ] ++ lib.optionals stdenv.isLinux [
+    "--enable-audio=oss,alsa,jack"
+    "--enable-alsaseq"
+    "--with-default-output=alsa"
+    "lib_cv_va_val_copy=yes"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "--enable-audio=darwin,jack"
+    "lib_cv_va_val_copy=no"
+    "timidity_cv_ccoption_rdynamic=yes"
+    # These configure tests fail because of incompatible function pointer conversions.
+    "ac_cv_func_vprintf=yes"
+    "ac_cv_func_popen=yes"
+    "ac_cv_func_vsnprintf=yes"
+    "ac_cv_func_snprintf=yes"
+    "ac_cv_func_open_memstream=yes"
+  ];
+
+  makeFlags = [
+    "AR=${stdenv.cc.targetPrefix}ar"
+  ];
+
+  instruments = fetchurl {
+    url = "http://www.csee.umbc.edu/pub/midia/instruments.tar.gz";
+    sha256 = "0lsh9l8l5h46z0y8ybsjd4pf6c22n33jsjvapfv3rjlfnasnqw67";
+  };
+
+  preBuild = ''
+    # calcnewt has to be built with the host compiler.
+    ${buildPackages.stdenv.cc}/bin/cc -o timidity/calcnewt -lm timidity/calcnewt.c
+    # Remove dependencies of calcnewt so it doesn't try to remake it.
+    sed -i 's/^\(calcnewt\$(EXEEXT):\).*/\1/g' timidity/Makefile
+  '';
+
+  # the instruments could be compressed (?)
+  postInstall = ''
+    mkdir -p $out/share/timidity/;
+    cp ${./timidity.cfg} $out/share/timidity/timidity.cfg
+    substituteAllInPlace $out/share/timidity/timidity.cfg
+    tar --strip-components=1 -xf $instruments -C $out/share/timidity/
+  '';
+  # This fixup step is unnecessary and fails on Darwin
+  dontRewriteSymlinks = stdenv.isDarwin;
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/timidity/";
+    license = licenses.gpl2;
+    description = "A software MIDI renderer";
+    maintainers = [ maintainers.marcweber ];
+    platforms = platforms.unix;
+    mainProgram = "timidity";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/timidity/timidity-iA-Oj.patch b/nixpkgs/pkgs/tools/misc/timidity/timidity-iA-Oj.patch
new file mode 100644
index 000000000000..9bb964134283
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timidity/timidity-iA-Oj.patch
@@ -0,0 +1,14 @@
+Without this timidity -iA -Oj prints "Couldn't start JACK device (`j')"
+and does not play MIDI.
+
+--- a/timidity/jack_a.c
++++ b/timidity/jack_a.c
+@@ -513,6 +513,8 @@ static int actl_jack(int request, void *arg)
+ 		ringbuf_clear(&ctx->rbuf);
+ 		return 0;
+ 
++	case PM_REQ_PLAY_START:
++		return 0;
+ 	}
+ 	return -1;
+ }
diff --git a/nixpkgs/pkgs/tools/misc/timidity/timidity.cfg b/nixpkgs/pkgs/tools/misc/timidity/timidity.cfg
new file mode 100644
index 000000000000..f4a260d249e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timidity/timidity.cfg
@@ -0,0 +1,368 @@
+##############################################################################
+# 
+# Instrument configuration file for timidity
+#
+# ----------------------------------------
+#
+#   Johan Hagman (Johan.Hagman@mailbox.swipnet.se) 26-Sep-96:
+#
+# This config file is for the uncompressed MIDIA GM patches from
+# ftp://archive.cs.umbc.edu/pub/midia/instruments.tar.gz. The
+# patches assumed to be installed are
+#
+#   in /usr/local/lib/timidity/patch		original piano & guitar
+#   in /usr/local/lib/timidity/instruments	MIDIA patches
+#
+# ----------------------------------------
+#
+# Specify library directory:		dir <directory>
+#
+# - Multiple library directories may be given. The ones given last will be
+#   searched first so you can override them in later configuration files.
+#   Extra configuration files and MIDI files will also be searched in these
+#   directories.
+#
+# Set tone bank or drum set to modify:	bank <number>
+#					drumset <number>
+#
+# Map program number to patch map:	<program number> <patch name>
+#
+# - If the patch can't be found in the library directories, TiMidity will 
+#   search again with ".pat" appended to the name.
+#   Programs without a loaded patch will be silent, except that for
+#   banks/drumsets >0, the corresponding patch in  bank/drumset 0 will
+#   be used (if one exists).
+#
+# Read another configuration file:	source <file name>
+#
+
+##############################################################################
+# If you've moved things around since compiling, uncomment and edit this to
+# point to the library directory: 
+#
+
+dir @out@/share/timidity
+
+##############################################################################
+# This sets up the default patches in the TiMidity support package
+# "timidity-lib-0.1.tar.gz":
+
+#bank 0
+#   0 acpiano.pat
+#  24 nylongt2.pat
+
+##############################################################################
+# If you have Dustin McCartney's "wowpats" patches, you can source the 
+# config file to set them up for TiMidity:
+#
+# (Note that later entries in config files always override earlier ones)
+#
+#source wowpats.cfg
+#
+
+##############################################################################
+# If you have Dustin McCartney's GS drum sets, you can source the config
+# file to set them up for TiMidity:
+#
+#source gsdrum.cfg
+#
+
+##############################################################################
+# If you have the GUS General MIDI patch set, uncomment the following lines 
+# and edit the "dir" statement to point to your GUS patch directory. 
+#
+#dir /dos-C/ultrasnd/midi
+#source gravis.cfg
+#
+
+##############################################################################
+# If you have the Midia patch set, you can source midia.cfg to set them up.
+# Note that midia.cfg sources gravis.cfg in turn, since the filenames are 
+# almost identical.
+#
+#source midia.cfg
+#
+
+##############################################################################
+# A config file for the Midia patch set. The patch filenames are identical
+# to the GUS ones, although many of the patches themselves are different.
+
+#source gravis.cfg
+
+##############################################################################
+# These are the standard patches that come with the GUS, mapped into GM
+# programs. 
+#
+
+bank 0
+
+	0 acpiano
+	# The Midia set doesn't have a bright piano,
+	# so we substitute acpiano instead.
+	#1 britepno
+	1 acpiano
+	2 synpiano
+	3 honky
+	4 epiano1
+	5 epiano2
+	6 hrpschrd
+	7 clavinet
+	8 celeste
+	9 glocken
+	10 musicbox
+	11 vibes
+	12 marimba
+	13 xylophon amp=200
+	14 tubebell
+	15 santur
+	16 homeorg
+	17 percorg
+	18 rockorg
+	19 church
+	20 reedorg
+	21 accordn
+	22 harmonca
+	23 concrtna
+	#24 nyguitar
+	# Replace with the guitar that comes with Timidity
+	24 nylongt2
+	25 acguitar
+	26 jazzgtr
+	27 cleangtr
+	28 mutegtr
+	29 odguitar
+	30 distgtr
+	31 gtrharm
+	32 acbass
+	33 fngrbass
+	34 pickbass
+	35 fretless
+	36 slapbas1
+	37 slapbas2
+	38 synbass1
+	39 synbass2
+	40 violin
+	41 viola
+	42 cello
+	43 contraba
+	44 tremstr
+	45 pizzcato
+	46 harp
+	47 timpani
+	# This sounds pretty dumb with the default panning
+	48 marcato pan=center
+	49 slowstr
+	50 synstr1
+	51 synstr2
+	52 choir
+	53 doo
+	54 voices
+	55 orchhit
+	56 trumpet
+	57 trombone
+	58 tuba
+	59 mutetrum
+	60 frenchrn
+	61 hitbrass
+	62 synbras1
+	63 synbras2
+	64 sprnosax
+	65 altosax
+	66 tenorsax
+	67 barisax
+	68 oboe
+	69 englhorn
+	70 bassoon
+	71 clarinet
+	72 piccolo
+	73 flute
+	74 recorder
+	75 woodflut
+	76 bottle
+	77 shakazul
+	78 whistle
+	79 ocarina
+	80 sqrwave
+	81 sawwave
+	82 calliope
+	83 chiflead
+	84 charang
+	85 voxlead
+	86 lead5th
+	87 basslead
+	88 fantasia
+	89 warmpad
+	90 polysyn
+	91 ghostie
+	92 bowglass
+	93 metalpad
+	94 halopad
+	95 sweeper
+	96 aurora
+	97 soundtrk
+	98 crystal
+	99 atmosphr
+	100 freshair
+	101 unicorn
+	102 echovox
+	103 startrak
+	104 sitar
+	105 banjo
+	106 shamisen
+	107 koto
+	108 kalimba
+	109 bagpipes
+	110 fiddle
+	111 shannai
+	112 carillon
+	113 agogo
+	114 steeldrm
+	115 woodblk
+	116 taiko
+	117 toms
+	118 syntom
+	119 revcym
+	120 fx-fret
+	121 fx-blow
+	122 seashore
+	123 jungle
+	124 telephon
+	125 helicptr
+	126 applause note=69
+	127 pistol
+
+##############################################################################
+# The GUS drum patches
+
+drumset 0
+
+	27 highq
+	28 slap
+	29 scratch1
+	30 scratch2
+	31 sticks strip=tail
+	32 sqrclick
+	33 metclick
+	34 metbell keep=loop keep=env
+	35 kick1
+	36 kick2
+	37 stickrim strip=tail
+	38 snare1
+	39 claps
+	40 snare2 note=38
+	41 tomlo2
+	42 hihatcl
+	43 tomlo1
+	44 hihatpd
+	45 tommid2
+	46 hihatop
+	47 tommid1
+	48 tomhi2
+	49 cymcrsh1
+	50 tomhi1
+	51 cymride1
+	52 cymchina
+	53 cymbell
+	54 tamborin
+	55 cymsplsh
+	56 cowbell
+	57 cymcrsh2
+	58 vibslap
+	59 cymride2
+	60 bongohi
+	61 bongolo
+	62 congahi1
+	63 congahi2
+	64 congalo
+	65 timbaleh
+	66 timbalel
+	67 agogohi
+	68 agogolo
+	69 cabasa strip=tail
+	70 maracas
+	71 whistle1 keep=loop keep=env
+	72 whistle2 keep=loop keep=env
+	73 guiro1
+	74 guiro2
+	75 clave
+	76 woodblk1
+	77 woodblk2
+	78 cuica1
+	79 cuica2
+	80 triangl1
+	81 triangl2
+	82 shaker
+	83 jingles
+	84 belltree keep=loop keep=env
+	85 castinet
+	86 surdo1
+	87 surdo2
+	# There's no pistol, but I can't think of a reasonable substitute.
+
+# Drumset 1 is identical to set 0
+drumset 1
+
+	27 highq
+	28 slap
+	29 scratch1
+	30 scratch2
+	31 sticks strip=tail
+	32 sqrclick
+	33 metclick
+	34 metbell keep=loop keep=env
+	35 kick1
+	36 kick2
+	37 stickrim strip=tail
+	38 snare1
+	39 claps
+	40 snare2 note=38
+	41 tomlo2
+	42 hihatcl
+	43 tomlo1
+	44 hihatpd
+	45 tommid2
+	46 hihatop
+	47 tommid1
+	48 tomhi2
+	49 cymcrsh1
+	50 tomhi1
+	51 cymride1
+	52 cymchina
+	53 cymbell
+	54 tamborin
+	55 cymsplsh
+	56 cowbell
+	57 cymcrsh2
+	58 vibslap
+	59 cymride2
+	60 bongohi
+	61 bongolo
+	62 congahi1
+	63 congahi2
+	64 congalo
+	65 timbaleh
+	66 timbalel
+	67 agogohi
+	68 agogolo
+	69 cabasa strip=tail
+	70 maracas
+	71 whistle1 keep=loop keep=env
+	72 whistle2 keep=loop keep=env
+	73 guiro1
+	74 guiro2
+	75 clave
+	76 woodblk1
+	77 woodblk2
+	78 cuica1
+	79 cuica2
+	80 triangl1
+	81 triangl2
+	82 shaker
+	83 jingles
+	84 belltree keep=loop keep=env
+	85 castinet
+	86 surdo1
+	87 surdo2
+
+##############################################################################
+# End of configuration file
diff --git a/nixpkgs/pkgs/tools/misc/tio/default.nix b/nixpkgs/pkgs/tools/misc/tio/default.nix
new file mode 100644
index 000000000000..88e121368e66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tio/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, inih, bash-completion }:
+
+stdenv.mkDerivation rec {
+  pname = "tio";
+  version = "2.7";
+
+  src = fetchFromGitHub {
+    owner = "tio";
+    repo = "tio";
+    rev = "v${version}";
+    hash = "sha256-SGOxy0gyR2RQn5sj28RPhDNmESd7LhNj9nlOoCZSEJs=";
+  };
+
+  strictDeps = true;
+
+  buildInputs = [ inih ];
+
+  nativeBuildInputs = [ meson ninja pkg-config bash-completion ];
+
+  meta = with lib; {
+    description = "Serial console TTY";
+    homepage = "https://tio.github.io/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ yana ];
+    platforms = platforms.unix;
+    mainProgram = "tio";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tkman/default.nix b/nixpkgs/pkgs/tools/misc/tkman/default.nix
new file mode 100644
index 000000000000..e178e173108a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tkman/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, fetchzip
+, fetchpatch
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, tk
+, groff
+, rman
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tkman";
+  version = "2.2";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/tkman/tkman-${version}.tar.gz";
+    hash = "sha256-S4ffz+7zmVy9+isz/8q+FV4wF5Rw2iL1ftY8RsJjRLs=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  patches = [(fetchpatch {
+    url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-text/tkman/files/tkman-CVE-2008-5137.diff";
+    hash = "sha256-l97SY2/YnMgzHYKnVYCVJKV7oGLN1hXNpeHFlLVzTMA=";
+  })];
+
+  makeFlags = [
+    "BINDIR=$(out)/bin"
+    "WISH=${tk}/bin/wish"
+    "rman=${rman}/bin/rman"
+    # TODO package glimpse https://github.com/gvelez17/glimpse
+    "glimpse=\"\""
+  ];
+
+  preBuild = ''
+    makeFlagsArray+=(
+      'manformat="${groff}/bin/groff -te -Tlatin1 -mandoc $$manx(longtmp) -"'
+    )
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/tkman \
+      --run 'export MANPATH="$(manpath)"'
+    rm $out/bin/retkman # doesn't work
+    install -Dm644 contrib/TkMan.gif $out/share/icons/hicolor/64x64/apps/tkman.gif
+  '';
+
+  desktopItems = [(makeDesktopItem {
+    name = "tkman";
+    desktopName = "TkMan";
+    comment = "Graphical man page and info viewer";
+    exec = "tkman %f";
+    icon = "tkman";
+    terminal = false;
+    type = "Application";
+    categories = [ "Utility" ];
+  })];
+
+  meta = with lib; {
+    description = "Graphical, hypertext manual page and Texinfo browser for UNIX";
+    longDescription = ''
+      TkMan is a graphical, hypertext manual page and Texinfo browser for UNIX.
+      TkMan boasts hypertext links, unmatched online text formatting and display
+      quality, (optional) outline view of man pages, high quality display and
+      superior navigational interface to Texinfo documents, a novel information
+      visualization mechanism called Notemarks, full text search among man pages
+      and Texinfo, incremental and regular expression search within pages,
+      regular expression search within Texinfo that shows all matches (not just
+      the next), robustly attached yellow highlight annotations, a shortcut/hot
+      list, lists of all pages in user configurable volumes, a comprehensive
+      Preferences panel, and man page versioning support, among many other features.
+    '';
+    homepage = "https://tkman.sourceforge.net/index.html";
+    license = licenses.artistic1;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tldr/default.nix b/nixpkgs/pkgs/tools/misc/tldr/default.nix
new file mode 100644
index 000000000000..0d4df99a952d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tldr/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, curl, libzip, pkg-config, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "tldr";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "tldr-pages";
+    repo = "tldr-c-client";
+    rev = "v${version}";
+    sha256 = "sha256-1L9frURnzfq0XvPBs8D+hBikybAw8qkb0DyZZtkZleY=";
+  };
+
+  buildInputs = [ curl libzip ];
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+
+  makeFlags = ["CC=${stdenv.cc.targetPrefix}cc" "LD=${stdenv.cc.targetPrefix}cc" "CFLAGS="];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    installShellCompletion --cmd tldr autocomplete/complete.{bash,fish,zsh}
+  '';
+
+  meta = with lib; {
+    description = "Simplified and community-driven man pages";
+    longDescription = ''
+      tldr pages gives common use cases for commands, so you don't need to hunt
+      through a man page for the correct flags.
+    '';
+    homepage = "https://tldr.sh";
+    changelog = "https://github.com/tldr-pages/tldr-c-client/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ taeer carlosdagos kbdharun];
+    platforms = platforms.all;
+    mainProgram = "tldr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tlp/default.nix b/nixpkgs/pkgs/tools/misc/tlp/default.nix
new file mode 100644
index 000000000000..51f10640ccbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tlp/default.nix
@@ -0,0 +1,135 @@
+{ stdenv
+, lib
+, checkbashisms
+, coreutils
+, ethtool
+, fetchFromGitHub
+, gawk
+, gnugrep
+, gnused
+, hdparm
+, iw
+, kmod
+, makeWrapper
+, pciutils
+, perl
+, perlcritic
+, shellcheck
+, smartmontools
+, systemd
+, util-linux
+, x86_energy_perf_policy
+  # RDW only works with NetworkManager, and thus is optional with default off
+, enableRDW ? false
+, networkmanager
+}: stdenv.mkDerivation rec {
+  pname = "tlp";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "linrunner";
+    repo = "TLP";
+    rev = version;
+    hash = "sha256-CxO1KU7F6sT5D8vjKOmntjDxcieoRSHTvuSqXfplcHk=";
+  };
+
+  # XXX: See patch files for relevant explanations.
+  patches = [
+    ./patches/0001-makefile-correctly-sed-paths.patch
+    ./patches/0002-reintroduce-tlp-sleep-service.patch
+  ];
+
+  buildInputs = [ perl ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  # XXX: While [1] states that DESTDIR should not be used, and that the correct
+  # variable to set is, in fact, PREFIX, tlp thinks otherwise. The Makefile for
+  # tlp concerns itself only with DESTDIR [2] (possibly incorrectly) and so we set
+  # that as opposed to PREFIX, despite what [1] says.
+  #
+  # [1]: https://github.com/NixOS/nixpkgs/issues/65718
+  # [2]: https://github.com/linrunner/TLP/blob/ab788abf4936dfb44fbb408afc34af834230a64d/Makefile#L4-L46
+  makeFlags = [
+    "TLP_NO_INIT=1"
+    "TLP_WITH_ELOGIND=0"
+    "TLP_WITH_SYSTEMD=1"
+
+    "DESTDIR=${placeholder "out"}"
+    "TLP_BATD=/share/tlp/bat.d"
+    "TLP_BIN=/bin"
+    "TLP_CONFDEF=/share/tlp/defaults.conf"
+    "TLP_CONFREN=/share/tlp/rename.conf"
+    "TLP_FLIB=/share/tlp/func.d"
+    "TLP_MAN=/share/man"
+    "TLP_META=/share/metainfo"
+    "TLP_SBIN=/sbin"
+    "TLP_SHCPL=/share/bash-completion/completions"
+    "TLP_TLIB=/share/tlp"
+  ];
+
+  installTargets = [ "install-tlp" "install-man" ]
+  ++ lib.optionals enableRDW [ "install-rdw" "install-man-rdw" ];
+
+  doCheck = true;
+  nativeCheckInputs = [ checkbashisms perlcritic shellcheck ];
+  checkTarget = [ "checkall" ];
+
+  # TODO: Consider using resholve here
+  postInstall = let
+    paths = lib.makeBinPath (
+      [
+        coreutils
+        ethtool
+        gawk
+        gnugrep
+        gnused
+        hdparm
+        iw
+        kmod
+        pciutils
+        perl
+        smartmontools
+        systemd
+        util-linux
+      ] ++ lib.optional enableRDW networkmanager
+        ++ lib.optional (lib.meta.availableOn stdenv.hostPlatform x86_energy_perf_policy) x86_energy_perf_policy
+    );
+  in
+    ''
+      fixup_perl=(
+        $out/share/tlp/tlp-pcilist
+        $out/share/tlp/tlp-readconfs
+        $out/share/tlp/tlp-usblist
+        $out/share/tlp/tpacpi-bat
+      )
+      for f in "''${fixup_perl[@]}"; do
+        wrapProgram "$f" --prefix PATH : "${paths}"
+      done
+
+      fixup_bash=(
+        $out/bin/*
+        $out/etc/NetworkManager/dispatcher.d/*
+        $out/lib/udev/tlp-*
+        $out/sbin/*
+        $out/share/tlp/bat.d/*
+        $out/share/tlp/func.d/*
+        $out/share/tlp/tlp-func-base
+      )
+      for f in "''${fixup_bash[@]}"; do
+        sed -i '2iexport PATH=${paths}:$PATH' "$f"
+      done
+
+      rm -rf $out/var
+      rm -rf $out/share/metainfo
+    '';
+
+  meta = with lib; {
+    description = "Advanced Power Management for Linux";
+    homepage =
+      "https://linrunner.de/en/tlp/docs/tlp-linux-advanced-power-management.html";
+    changelog = "https://github.com/linrunner/TLP/releases/tag/${version}";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar lovesegfault ];
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tlp/patches/0001-makefile-correctly-sed-paths.patch b/nixpkgs/pkgs/tools/misc/tlp/patches/0001-makefile-correctly-sed-paths.patch
new file mode 100644
index 000000000000..278cd0b1dde8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tlp/patches/0001-makefile-correctly-sed-paths.patch
@@ -0,0 +1,58 @@
+From 5c5d878bf49bae5920c330482217477819ba9bc2 Mon Sep 17 00:00:00 2001
+From: Bernardo Meurer <bernardo@meurer.org>
+Date: Fri, 15 Oct 2021 23:22:50 -0700
+Subject: [PATCH 1/2] makefile: correctly sed paths
+
+The default Makefile for tlp makes a mess with catenating `DESTDIR` to
+everything, but then not actualy using the catenated (_ prefixed)
+variables to sed it's `.in` files.
+
+This patch makes sure that it correctly sets the paths, taking `DESTDIR`
+in account where it makes sense (e.g. /bin where we want $out/bin) but
+not where it doesn't (/etc/tlp.conf should be just that).
+
+The reason DESTDIR is used at all, as opposed to the more appropriate
+PREFIX, is covered in the nix formula, and is (also) due to the Makefile
+being a bit "different."
+---
+ Makefile | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 8042517..1c436ad 100644
+--- a/Makefile
++++ b/Makefile
+@@ -57,20 +57,20 @@ _TPACPIBAT = $(DESTDIR)$(TPACPIBAT)
+ 
+ SED = sed \
+ 	-e "s|@TLPVER@|$(TLPVER)|g" \
+-	-e "s|@TLP_SBIN@|$(TLP_SBIN)|g" \
+-	-e "s|@TLP_TLIB@|$(TLP_TLIB)|g" \
+-	-e "s|@TLP_FLIB@|$(TLP_FLIB)|g" \
+-	-e "s|@TLP_ULIB@|$(TLP_ULIB)|g" \
+-	-e "s|@TLP_BATD@|$(TLP_BATD)|g" \
++	-e "s|@TLP_SBIN@|$(_SBIN)|g" \
++	-e "s|@TLP_TLIB@|$(_TLIB)|g" \
++	-e "s|@TLP_FLIB@|$(_FLIB)|g" \
++	-e "s|@TLP_ULIB@|$(_ULIB)|g" \
++	-e "s|@TLP_BATD@|$(_BATD)|g" \
+ 	-e "s|@TLP_CONFUSR@|$(TLP_CONFUSR)|g" \
+ 	-e "s|@TLP_CONFDIR@|$(TLP_CONFDIR)|g" \
+-	-e "s|@TLP_CONFDEF@|$(TLP_CONFDEF)|g" \
+-	-e "s|@TLP_CONFREN@|$(TLP_CONFREN)|g" \
+-	-e "s|@TLP_CONFDPR@|$(TLP_CONFDPR)|g" \
+-	-e "s|@TLP_CONF@|$(TLP_CONF)|g" \
++	-e "s|@TLP_CONFDEF@|$(_CONFDEF)|g" \
++	-e "s|@TLP_CONFREN@|$(_CONFREN)|g" \
++	-e "s|@TLP_CONFDPR@|$(_CONFDPR)|g" \
++	-e "s|@TLP_CONF@|$(_CONF)|g" \
+ 	-e "s|@TLP_RUN@|$(TLP_RUN)|g"   \
+ 	-e "s|@TLP_VAR@|$(TLP_VAR)|g"   \
+-	-e "s|@TPACPIBAT@|$(TPACPIBAT)|g"
++	-e "s|@TPACPIBAT@|$(_TPACPIBAT)|g"
+ 
+ INFILES = \
+ 	tlp \
+-- 
+2.41.0
+
diff --git a/nixpkgs/pkgs/tools/misc/tlp/patches/0002-reintroduce-tlp-sleep-service.patch b/nixpkgs/pkgs/tools/misc/tlp/patches/0002-reintroduce-tlp-sleep-service.patch
new file mode 100644
index 000000000000..dfea1c61636d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tlp/patches/0002-reintroduce-tlp-sleep-service.patch
@@ -0,0 +1,85 @@
+From a3506c9bc8929645b7b08859e47039b8cc830d22 Mon Sep 17 00:00:00 2001
+From: Bernardo Meurer <bernardo@meurer.org>
+Date: Fri, 15 Oct 2021 23:07:40 -0700
+Subject: [PATCH 2/2] tlp-sleep.service: reintroduce
+
+This patch reintroduces tlp-sleep as a systemd unit as opposed to a
+systemd system-sleep hook script. This is due to the recommendation by
+systemd itself to not use the hook scripts. As per the manual:
+
+> Note that scripts or binaries dropped in /usr/lib/systemd/system-sleep/
+> are intended for local use only and should be considered hacks. If
+> applications want to react to system suspend/hibernation and resume,
+> they should rather use the Inhibitor interface[1].
+---
+ Makefile             |  6 +++---
+ tlp-sleep.service.in | 19 +++++++++++++++++++
+ 2 files changed, 22 insertions(+), 3 deletions(-)
+ create mode 100644 tlp-sleep.service.in
+
+diff --git a/Makefile b/Makefile
+index 1c436ad..fd5211b 100644
+--- a/Makefile
++++ b/Makefile
+@@ -84,6 +84,7 @@ INFILES = \
+ 	tlp.rules \
+ 	tlp-readconfs \
+ 	tlp-run-on \
++	tlp-sleep.service \
+ 	tlp.service \
+ 	tlp-stat \
+ 	tlp.upstart \
+@@ -115,7 +116,6 @@ SHFILES = \
+ 	tlp-rdw-udev.in \
+ 	tlp-rf.in \
+ 	tlp-run-on.in \
+-	tlp-sleep \
+ 	tlp-sleep.elogind \
+ 	tlp-stat.in \
+ 	tlp-usb-udev.in \
+@@ -172,7 +172,7 @@ ifneq ($(TLP_NO_INIT),1)
+ endif
+ ifneq ($(TLP_WITH_SYSTEMD),0)
+ 	install -D -m 644 tlp.service $(_SYSD)/tlp.service
+-	install -D -m 755 tlp-sleep $(_SDSL)/tlp
++	install -D -m 644 tlp-sleep.service $(_SYSD)/tlp-sleep.service
+ endif
+ ifneq ($(TLP_WITH_ELOGIND),0)
+ 	install -D -m 755 tlp-sleep.elogind $(_ELOD)/49-tlp-sleep
+@@ -240,7 +240,7 @@ uninstall-tlp:
+ 	rm $(_ULIB)/rules.d/85-tlp.rules
+ 	rm -f $(_SYSV)/tlp
+ 	rm -f $(_SYSD)/tlp.service
+-	rm -f $(_SDSL)/tlp-sleep
++	rm -f $(_SYSD)/tlp-sleep.service
+ 	rm -f $(_ELOD)/49-tlp-sleep
+ 	rm -f $(_SHCPL)/tlp-stat
+ 	rm -f $(_SHCPL)/bluetooth
+diff --git a/tlp-sleep.service.in b/tlp-sleep.service.in
+new file mode 100644
+index 0000000..79c202c
+--- /dev/null
++++ b/tlp-sleep.service.in
+@@ -0,0 +1,19 @@
++# tlp - systemd suspend/resume service
++#
++# Copyright (c) 2021 Thomas Koch <linrunner at gmx.net> and others.
++# This software is licensed under the GPL v2 or later.
++
++[Unit]
++Description=TLP suspend/resume
++Before=sleep.target
++StopWhenUnneeded=yes
++Documentation=https://linrunner.de/tlp
++
++[Service]
++Type=oneshot
++RemainAfterExit=yes
++ExecStart=@TLP_SBIN@/tlp suspend
++ExecStop=@TLP_SBIN@/tlp resume
++
++[Install]
++WantedBy=sleep.target
+-- 
+2.41.0
+
diff --git a/nixpkgs/pkgs/tools/misc/tmate/default.nix b/nixpkgs/pkgs/tools/misc/tmate/default.nix
new file mode 100644
index 000000000000..9e1cbdee1277
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmate/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, cmake
+, libtool
+, pkg-config
+, zlib
+, openssl
+, libevent
+, ncurses
+, ruby
+, msgpack-c
+, libssh
+}:
+
+stdenv.mkDerivation {
+  pname = "tmate";
+  version = "unstable-2022-08-07";
+
+  src = fetchFromGitHub {
+    owner  = "tmate-io";
+    repo   = "tmate";
+    rev    = "ac919516f4f1b10ec928e20b3a5034d18f609d68";
+    sha256 = "sha256-t96gfmAMcsjkGf8pvbEx2fNx4Sj3W6oYoQswB3Dklb8=";
+  };
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace 'msgpack >= 1.1.0' 'msgpack-c >= 1.1.0'
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    libtool
+    zlib
+    openssl
+    libevent
+    ncurses
+    ruby
+    msgpack-c
+    libssh
+  ];
+
+  dontUseCmakeConfigure = true;
+
+  meta = with lib; {
+    homepage    = "https://tmate.io/";
+    description = "Instant Terminal Sharing";
+    license     = licenses.mit;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ ck3d ];
+    mainProgram = "tmate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmpwatch/default.nix b/nixpkgs/pkgs/tools/misc/tmpwatch/default.nix
new file mode 100644
index 000000000000..873b7c0f6f0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmpwatch/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, psmisc }:
+
+stdenv.mkDerivation rec {
+  pname = "tmpwatch";
+  version = "2.11";
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "1m5859ngwx61l1i4s6fja2avf1hyv6w170by273w8nsin89825lk";
+  };
+
+  configureFlags = [ "--with-fuser=${psmisc}/bin/fuser" ];
+
+  meta = with lib; {
+    homepage = "https://pagure.io/tmpwatch";
+    description = "Recursively searches through specified directories and removes files which have not been accessed in a specified period of time";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ vlstill ];
+    platforms = platforms.unix;
+    mainProgram = "tmpwatch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix b/nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix
new file mode 100644
index 000000000000..7da4293dc0c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, tmux }:
+
+stdenv.mkDerivation {
+  pname = "tmux-cssh";
+  version = "unstable-2015-10-15";
+
+  src = fetchFromGitHub {
+    owner = "dennishafemann";
+    repo = "tmux-cssh";
+    rev = "21750733c5b6fa2fe23b9e50ce69d8564f2f742a";
+    sha256 = "473e27f3b69864b905d1340d97917cd202705c761611eb3aec4c24521f69b52c";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tmux-cssh $out/bin/tmux-cssh
+    wrapProgram $out/bin/tmux-cssh --suffix PATH : ${tmux}/bin
+  '';
+
+  meta = {
+    homepage = "https://github.com/dennishafemann/tmux-cssh";
+    description = "SSH to multiple hosts at the same time using tmux";
+
+    longDescription =
+      ''
+      tmux is a terminal multiplexer, like e.g. screen, which gives you a
+      possibility to use multiple virtual terminal session within one real
+      terminal session. tmux-cssh (tmux-cluster-ssh) sets a comfortable and
+      easy to use functionality, clustering and synchronizing virtual
+      tmux-sessions, on top of tmux. No need for a x-server or x-forwarding.
+      tmux-cssh works just with tmux and in an low-level terminal-environment,
+      like most server do.
+      '';
+
+    license = lib.licenses.asl20;
+
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ zimbatm ];
+    mainProgram = "tmux-cssh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux-mem-cpu-load/default.nix b/nixpkgs/pkgs/tools/misc/tmux-mem-cpu-load/default.nix
new file mode 100644
index 000000000000..1e197ef162ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux-mem-cpu-load/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "tmux-mem-cpu-load";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "thewtex";
+    repo = "tmux-mem-cpu-load";
+    rev = "v${version}";
+    sha256 = "sha256-dRHV2XF3NFzd4HT9SbRnEn8U40QTnAUJDsM51NA9fEk=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "CPU, RAM, and load monitor for use with tmux";
+    homepage = "https://github.com/thewtex/tmux-mem-cpu-load";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ thomasjm ];
+    platforms = platforms.all;
+    mainProgram = "tmux-mem-cpu-load";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux-sessionizer/default.nix b/nixpkgs/pkgs/tools/misc/tmux-sessionizer/default.nix
new file mode 100644
index 000000000000..11dedf8e599d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux-sessionizer/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, rustPlatform
+, openssl
+, pkg-config
+, Security
+, testers
+, tmux-sessionizer
+}: let
+
+  name = "tmux-sessionizer";
+  # v0.4.1 is not released yet, but v0.4.0 has version discrepancy between Cargo.toml and Cargo.lock and does not build
+  version = "0.4.0-unstable-2024-02-06";
+
+in rustPlatform.buildRustPackage {
+  pname = name;
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "jrmoulton";
+    repo = name;
+    rev = "79ab43a4087aa7e4e865cab6a181dfd24c6e7a90";
+    hash = "sha256-gzbCeNZML2ygIy/H3uT9apahqI+4hmrTwgXvcZq4Xog=";
+  };
+
+  cargoHash = "sha256-Zvr2OH2pKtX60EApUSWhBV4cACMLl750UOiS3nN3J3Q=";
+
+  passthru.tests.version = testers.testVersion {
+    package = tmux-sessionizer;
+    version = "0.4.1";
+  };
+
+  # Needed to get openssl-sys to use pkg-config.
+  OPENSSL_NO_VENDOR = 1;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "The fastest way to manage projects as tmux sessions";
+    homepage = "https://github.com/jrmoulton/tmux-sessionizer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vinnymeller mrcjkb ];
+    mainProgram = "tms";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix b/nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix
new file mode 100644
index 000000000000..47fce699fb0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, openssl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "tmux-xpanes";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "greymd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PF2K2A49c5djQqSO7ZLFyBwPZaJRK58qZTFpY7n+Z0w=";
+  };
+
+  buildInputs = [ openssl perl ];
+
+  installPhase = ''
+    # Create directories.
+    install -m 755 -d $out/bin/
+    install -m 755 -d $out/share/man/man1/
+
+    # Perform installation.
+    install -m 755 bin/* $out/bin/
+    install -m 644 man/*.1 $out/share/man/man1/
+  '';
+
+  meta = with lib; {
+    description = "tmux-based terminal divider";
+    homepage = "https://github.com/greymd/tmux-xpanes";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ monsieurp ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux/default.nix b/nixpkgs/pkgs/tools/misc/tmux/default.nix
new file mode 100644
index 000000000000..a39f65d702ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux/default.nix
@@ -0,0 +1,106 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, bison
+, libevent
+, ncurses
+, pkg-config
+, runCommand
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd, systemd
+, withUtf8proc ? true, utf8proc # gets Unicode updates faster than glibc
+, withUtempter ? stdenv.isLinux && !stdenv.hostPlatform.isMusl, libutempter
+, withSixel ? true
+}:
+
+let
+
+  bashCompletion = fetchFromGitHub {
+    owner = "imomaliev";
+    repo = "tmux-bash-completion";
+    rev = "f5d53239f7658f8e8fbaf02535cc369009c436d6";
+    sha256 = "0sq2g3w0h3mkfa6qwqdw93chb5f1hgkz5vdl8yw8mxwdqwhsdprr";
+  };
+
+in
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "tmux";
+  version = "3.4";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "tmux";
+    repo = "tmux";
+    rev = finalAttrs.version;
+    hash = "sha256-RX3RZ0Mcyda7C7im1r4QgUxTnp95nfpGgQ2HRxr0s64=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    autoreconfHook
+    bison
+  ];
+
+  buildInputs = [
+    ncurses
+    libevent
+  ] ++ lib.optionals withSystemd [ systemd ]
+  ++ lib.optionals withUtf8proc [ utf8proc ]
+  ++ lib.optionals withUtempter [ libutempter ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ] ++ lib.optionals withSystemd [ "--enable-systemd" ]
+  ++ lib.optionals withSixel [ "--enable-sixel" ]
+  ++ lib.optionals withUtempter [ "--enable-utempter" ]
+  ++ lib.optionals withUtf8proc [ "--enable-utf8proc" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mkdir -p $out/share/bash-completion/completions
+    cp -v ${bashCompletion}/completions/tmux $out/share/bash-completion/completions/tmux
+  '' + lib.optionalString stdenv.isDarwin ''
+    mkdir $out/nix-support
+    echo "${finalAttrs.passthru.terminfo}" >> $out/nix-support/propagated-user-env-packages
+  '';
+
+  passthru = {
+    terminfo = runCommand "tmux-terminfo" { nativeBuildInputs = [ ncurses ]; } (if stdenv.isDarwin then ''
+      mkdir -p $out/share/terminfo/74
+      cp -v ${ncurses}/share/terminfo/74/tmux $out/share/terminfo/74
+      # macOS ships an old version (5.7) of ncurses which does not include tmux-256color so we need to provide it from our ncurses.
+      # However, due to a bug in ncurses 5.7, we need to first patch the terminfo before we can use it with macOS.
+      # https://gpanders.com/blog/the-definitive-guide-to-using-tmux-256color-on-macos/
+      tic -o $out/share/terminfo -x <(TERMINFO_DIRS=${ncurses}/share/terminfo infocmp -x tmux-256color | sed 's|pairs#0x10000|pairs#32767|')
+    '' else ''
+      mkdir -p $out/share/terminfo/t
+      ln -sv ${ncurses}/share/terminfo/t/{tmux,tmux-256color,tmux-direct} $out/share/terminfo/t
+    '');
+  };
+
+  meta = {
+    homepage = "https://tmux.github.io/";
+    description = "Terminal multiplexer";
+    longDescription = ''
+      tmux is intended to be a modern, BSD-licensed alternative to programs such as GNU screen. Major features include:
+        * A powerful, consistent, well-documented and easily scriptable command interface.
+        * A window may be split horizontally and vertically into panes.
+        * Panes can be freely moved and resized, or arranged into preset layouts.
+        * Support for UTF-8 and 256-colour terminals.
+        * Copy and paste with multiple buffers.
+        * Interactive menus to select windows, sessions or clients.
+        * Change the current window by searching for text in the target.
+        * Terminal locking, manually or after a timeout.
+        * A clean, easily extended, BSD-licensed codebase, under active development.
+    '';
+    changelog = "https://github.com/tmux/tmux/raw/${finalAttrs.version}/CHANGES";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.unix;
+    mainProgram = "tmux";
+    maintainers = with lib.maintainers; [ thammers fpletz ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/tmuxinator/default.nix b/nixpkgs/pkgs/tools/misc/tmuxinator/default.nix
new file mode 100644
index 000000000000..379430761399
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmuxinator/default.nix
@@ -0,0 +1,54 @@
+{ lib, buildRubyGem, ruby, installShellFiles }:
+
+# Cannot use bundleEnv because bundleEnv create stub with
+# BUNDLE_FROZEN='1' environment variable set, which broke everything
+# that rely on Bundler that runs under Tmuxinator.
+
+buildRubyGem rec {
+  inherit ruby;
+  name = "${gemName}-${version}";
+  gemName = "tmuxinator";
+  version = "3.0.5";
+  source.sha256 = "1ycsx9mvl0jsds4igi6avxclsyl5lndh1mpj2ykvzfz26wdddg6p";
+
+  erubis = buildRubyGem rec {
+    inherit ruby;
+    name = "ruby${ruby.version}-${gemName}-${version}";
+    gemName = "erubis";
+    version = "2.7.0";
+    source.sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+  };
+
+  thor = buildRubyGem rec {
+    inherit ruby;
+    name = "ruby${ruby.version}-${gemName}-${version}";
+    gemName = "thor";
+    version = "1.2.1";
+    source.sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+  };
+
+  xdg = buildRubyGem rec {
+    inherit ruby;
+    name = "ruby${ruby.version}-${gemName}-${version}";
+    gemName = "xdg";
+    version = "2.2.5";
+    source.sha256 = "04xr4cavnzxlk926pkji7b5yiqy4qsd3gdvv8mg6jliq6sczg9gk";
+  };
+
+  propagatedBuildInputs = [ erubis thor xdg ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion $GEM_HOME/gems/${gemName}-${version}/completion/tmuxinator.{bash,zsh,fish}
+  '';
+
+  meta = with lib; {
+    description = "Manage complex tmux sessions easily";
+    homepage    = "https://github.com/tmuxinator/tmuxinator";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ auntie ericsagnes ];
+    platforms   = platforms.unix;
+    mainProgram = "tmuxinator";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmuxp/default.nix b/nixpkgs/pkgs/tools/misc/tmuxp/default.nix
new file mode 100644
index 000000000000..1d1eaa53e7bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmuxp/default.nix
@@ -0,0 +1,43 @@
+{ lib, python3Packages, fetchPypi, installShellFiles }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "tmuxp";
+  version = "1.34.0";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-G93YtgXo4li+tLWKgJFaxx4Ax4sK4F+vK6M3WTXIeiU=";
+  };
+
+  nativeBuildInputs = [
+    python3Packages.poetry-core
+    python3Packages.shtab
+    installShellFiles
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    click
+    colorama
+    kaptan
+    libtmux
+  ];
+
+  # No tests in archive
+  doCheck = false;
+
+  postInstall = ''
+    installShellCompletion --cmd tmuxp \
+      --bash <(shtab --shell=bash -u tmuxp.cli.create_parser) \
+      --zsh <(shtab --shell=zsh -u tmuxp.cli.create_parser)
+  '';
+
+  meta = with lib; {
+    description = "tmux session manager";
+    homepage = "https://tmuxp.git-pull.com/";
+    changelog = "https://github.com/tmux-python/tmuxp/raw/v${version}/CHANGES";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg otavio ];
+    mainProgram = "tmuxp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/toastify/default.nix b/nixpkgs/pkgs/tools/misc/toastify/default.nix
new file mode 100644
index 000000000000..2de5877c0f05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/toastify/default.nix
@@ -0,0 +1,32 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "toastify";
+  version = "0.5.4";
+
+  src = fetchFromGitHub {
+    owner = "hoodie";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hSBh1LTfe3rQDPUryo2Swdf/yLYrOQ/Fg3Dz7ZqV3gw=";
+  };
+
+  cargoHash = "sha256-Ps2pRLpPxw+OS1ungQtVQ8beoKpc8pjzQEndMNni08k=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.Cocoa
+  ];
+
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "A commandline tool that shows desktop notifications using notify-rust";
+    homepage = "https://github.com/hoodie/toastify";
+    changelog = "https://github.com/hoodie/toastify/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ colemickens ];
+    mainProgram = "toastify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/todo/default.nix b/nixpkgs/pkgs/tools/misc/todo/default.nix
new file mode 100644
index 000000000000..6b6c858490a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/todo/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, openssl }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "todo";
+  version = "2.5";
+
+  src = fetchFromGitHub {
+    owner = "sioodmy";
+    repo = "todo";
+    rev = version;
+    sha256 = "oyRdXvVnCfdFM8lI1eCDHHYNWcJc0Qg0TKxQXUqNo40=";
+  };
+
+  cargoSha256 = "B0tecuBx/FFQokhfI6+xpppyG5DD8WS2+MkmPaZfMhI=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ];
+  meta = with lib; {
+    description = "Simple todo cli program written in rust";
+    homepage = "https://github.com/sioodmy/todo";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ sioodmy ];
+    mainProgram = "todo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/toilet/default.nix b/nixpkgs/pkgs/tools/misc/toilet/default.nix
new file mode 100644
index 000000000000..8fdeb8b40739
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/toilet/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, pkg-config, libcaca, toilet, testers }:
+
+stdenv.mkDerivation rec {
+  pname = "toilet";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "http://caca.zoy.org/raw-attachment/wiki/toilet/${pname}-${version}.tar.gz";
+    sha256 = "1pl118qb7g0frpgl9ps43w4sd0psjirpmq54yg1kqcclqcqbbm49";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libcaca ];
+
+  passthru.tests.version = testers.testVersion {
+    package = toilet;
+  };
+
+  meta = with lib; {
+    description = "Display large colourful characters in text mode";
+    homepage = "http://caca.zoy.org/wiki/toilet";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.all;
+    mainProgram = "toilet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/topgrade/default.nix b/nixpkgs/pkgs/tools/misc/topgrade/default.nix
new file mode 100644
index 000000000000..3b632348f263
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/topgrade/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, AppKit
+, Cocoa
+, Foundation
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "topgrade";
+  version = "14.0.1";
+
+  src = fetchFromGitHub {
+    owner = "topgrade-rs";
+    repo = "topgrade";
+    rev = "v${version}";
+    hash = "sha256-opTMV+OH8PR9SxBWj1o8xSngK0QdindDcXyd6TRjdvI=";
+  };
+
+  cargoHash = "sha256-pgYrUZAxoyllQp1HuVhbLR3za+Gx0l8Z2/Zq/KCOKZg=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    AppKit
+    Cocoa
+    Foundation
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.isDarwin [
+    "-framework"
+    "AppKit"
+  ]);
+
+  postInstall = ''
+    installShellCompletion --cmd topgrade \
+      --bash <($out/bin/topgrade --gen-completion bash) \
+      --fish <($out/bin/topgrade --gen-completion fish) \
+      --zsh <($out/bin/topgrade --gen-completion zsh)
+
+    $out/bin/topgrade --gen-manpage > topgrade.8
+    installManPage topgrade.8
+  '';
+
+  meta = with lib; {
+    description = "Upgrade all the things";
+    homepage = "https://github.com/topgrade-rs/topgrade";
+    changelog = "https://github.com/topgrade-rs/topgrade/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ SuperSandro2000 xyenon ];
+    mainProgram = "topgrade";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/topicctl/default.nix b/nixpkgs/pkgs/tools/misc/topicctl/default.nix
new file mode 100644
index 000000000000..3eb949381af8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/topicctl/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "topicctl";
+  version = "1.14.0";
+
+  src = fetchFromGitHub {
+    owner = "segmentio";
+    repo = "topicctl";
+    rev = "v${version}";
+    sha256 = "sha256-Vmx+6UXNWCnVmLskk1J4Pug3+99cdk4WXjA2zO4agvU=";
+  };
+
+  vendorHash = "sha256-+mnnvdna1g6JE29weOJZmdO3jFp2a75dV9wK2XcWJ9s=";
+
+  ldflags = [
+    "-X main.BuildVersion=${version}"
+    "-X main.BuildCommitSha=unknown"
+    "-X main.BuildDate=unknown"
+  ];
+
+  # needs a kafka server
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool for easy, declarative management of Kafka topics";
+    inherit (src.meta) homepage;
+    license = licenses.mit;
+    maintainers = with maintainers; [ eskytthe srhb ];
+    mainProgram = "topicctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/torrenttools/default.nix b/nixpkgs/pkgs/tools/misc/torrenttools/default.nix
new file mode 100644
index 000000000000..0fa5dbffafbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/torrenttools/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bencode
+, catch2
+, cli11
+, cmake
+, ctre
+, expected-lite
+, fmt
+, gsl-lite
+, howard-hinnant-date
+, yaml-cpp
+, ninja
+, nlohmann_json
+, openssl
+, re2
+, sigslot
+}:
+
+stdenv.mkDerivation rec {
+  pname = "torrenttools";
+  version = "0.6.2";
+
+  srcs = [
+    (fetchFromGitHub rec {
+      owner = "fbdtemme";
+      repo = "torrenttools";
+      rev = "v${version}";
+      hash = "sha256-3rAxw4JM5ruOn0ccKnpdCnUWUPTQOUvRYz8OKU/FpJ8=";
+      name = repo;
+    })
+    (fetchFromGitHub rec {
+      owner = "fbdtemme";
+      repo = "cliprogress";
+      rev = "a887519e360e44c1ef88ea4ef7df652ea049c502";
+      hash = "sha256-nVvzez5GB57qSj2SLaxdYlkSX8rRM06H2NnLQGCDWMg=";
+      name = repo;
+    })
+    (fetchFromGitHub rec {
+      owner = "fbdtemme";
+      repo = "dottorrent";
+      rev = "38ac810d6bb3628fd3ce49150c9fb641bb5e78cd";
+      hash = "sha256-0H9h0Hud0Fd64lY0pxQ96coDOEDr5wh8v1sNT1lBxb0=";
+      name = repo;
+    })
+    (fetchFromGitHub rec {
+      owner = "fbdtemme";
+      repo = "termcontrol";
+      rev = "c53eec4efe0e163871d9eb54dc074c25cd01abf0";
+      hash = "sha256-0j78QtEkhlssVivPl709o5Pf36TzhOZ6VHaqDiH0L0I=";
+      name = repo;
+    })
+  ];
+  sourceRoot = "torrenttools";
+
+  postUnpack = ''
+    cp -pr cliprogress torrenttools/external/cliprogress
+    cp -pr dottorrent torrenttools/external/dottorrent
+    cp -pr termcontrol torrenttools/external/termcontrol
+    chmod -R u+w -- "$sourceRoot"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    bencode
+    catch2
+    cli11
+    ctre
+    expected-lite
+    fmt
+    gsl-lite
+    howard-hinnant-date
+    yaml-cpp
+    nlohmann_json
+    openssl
+    re2
+    sigslot
+  ];
+
+  cmakeFlags = [
+    "-DTORRENTTOOLS_BUILD_TESTS:BOOL=ON"
+    "-DTORRENTTOOLS_TBB:BOOL=OFF" # Our TBB doesn't expose a CMake module.
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A CLI tool for creating, inspecting and modifying BitTorrent metafiles";
+    homepage = "https://github.com/fbdtemme/torrenttools";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.unix;
+    mainProgram = "torrenttools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/toybox/default.nix b/nixpkgs/pkgs/tools/misc/toybox/default.nix
new file mode 100644
index 000000000000..07ad33645849
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/toybox/default.nix
@@ -0,0 +1,79 @@
+{
+  stdenv, lib, fetchFromGitHub, which,
+  buildPackages, libxcrypt, libiconv,
+  enableStatic ? stdenv.hostPlatform.isStatic,
+  enableMinimal ? false,
+  extraConfig ? ""
+}:
+
+let
+  inherit (lib) optionals;
+in
+
+stdenv.mkDerivation rec {
+  pname = "toybox";
+  version = "0.8.10";
+
+  src = fetchFromGitHub {
+    owner = "landley";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-MMkNLhQP3ztWoRYhCU/cNXE/M+/ny41OK1SA9oM/lZg=";
+  };
+
+  depsBuildBuild = optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ buildPackages.stdenv.cc ];
+  buildInputs = [
+    libxcrypt
+  ] ++ optionals stdenv.isDarwin [
+    libiconv
+  ] ++ optionals (enableStatic && stdenv.cc.libc ? static) [
+    stdenv.cc.libc
+    stdenv.cc.libc.static
+  ];
+
+  postPatch = "patchShebangs .";
+
+  inherit extraConfig;
+  passAsFile = [ "extraConfig" ];
+
+  configurePhase = ''
+    make ${if enableMinimal then
+      "allnoconfig"
+    else
+      if stdenv.isFreeBSD then
+        "freebsd_defconfig"
+      else
+        if stdenv.isDarwin then
+          "macos_defconfig"
+        else
+          "defconfig"
+    }
+
+    cat $extraConfigPath .config > .config-
+    mv .config- .config
+
+    make oldconfig
+  '';
+
+  makeFlags = [ "PREFIX=$(out)/bin" ] ++ optionals enableStatic [ "LDFLAGS=--static" ];
+
+  installTargets = [ "install_flat" ];
+
+  # tests currently (as of 0.8.0) get stuck in an infinite loop...
+  # ...this is fixed in latest git, so doCheck can likely be enabled for next release
+  # see https://github.com/landley/toybox/commit/b928ec480cd73fd83511c0f5ca786d1b9f3167c3
+  #doCheck = true;
+  nativeCheckInputs = [ which ]; # used for tests with checkFlags = [ "DEBUG=true" ];
+  checkTarget = "tests";
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  meta = with lib; {
+    description = "Lightweight implementation of some Unix command line utilities";
+    homepage = "https://landley.net/toybox/";
+    license = licenses.bsd0;
+    platforms = with platforms; linux ++ darwin ++ freebsd;
+    maintainers = with maintainers; [ hhm ];
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trackma/default.nix b/nixpkgs/pkgs/tools/misc/trackma/default.nix
new file mode 100644
index 000000000000..86834e337d8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trackma/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+, wrapGAppsHook
+, gobject-introspection
+, glib
+, gtk3
+, qt5
+, makeDesktopItem
+, copyDesktopItems
+, withCurses ? false
+, withGTK ? false
+, withQT ? false
+}:
+let
+  mkDesktopItem = name: desktopName: comment: terminal: makeDesktopItem {
+    inherit name desktopName comment terminal;
+    icon = "trackma";
+    exec = name + " %u";
+    type = "Application";
+    categories = [ "Network" ];
+  };
+in
+python3.pkgs.buildPythonApplication rec {
+  pname = "trackma";
+  version = "0.8.6";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "z411";
+    repo = "trackma";
+    rev = "v${version}";
+    sha256 = "qlkFQSJFjxkGd5WkNGfyAo64ys8VJLep/ZOL6icXQ4c=";
+    fetchSubmodules = true; # for anime-relations submodule
+  };
+
+  nativeBuildInputs = [ copyDesktopItems python3.pkgs.poetry-core ]
+    ++ lib.optionals withGTK [ wrapGAppsHook gobject-introspection ]
+    ++ lib.optionals withQT [ qt5.wrapQtAppsHook ];
+
+  buildInputs = lib.optionals withGTK [ glib gtk3 ];
+
+  propagatedBuildInputs = with python3.pkgs; ([ requests ]
+    ++ lib.optionals withQT [ pyqt5 ]
+    ++ lib.optionals withGTK [ pycairo pygobject3 ]
+    ++ lib.optionals withCurses [ urwid ]
+    ++ lib.optionals stdenv.isLinux [ pydbus pyinotify ]
+    ++ lib.optionals (withGTK || withQT) [ pillow ]);
+
+  dontWrapQtApps = true;
+  dontWrapGApps = true;
+
+  preFixup = lib.optional withQT "wrapQtApp $out/bin/trackma-qt"
+    ++ lib.optional withGTK "wrapGApp $out/bin/trackma-gtk";
+
+  desktopItems = lib.optional withQT (mkDesktopItem "trackma-qt" "Trackma (Qt)" "Trackma Updater (Qt-frontend)" false)
+    ++ lib.optional withGTK (mkDesktopItem "trackma-gtk" "Trackma (GTK)" "Trackma Updater (Gtk-frontend)" false)
+    ++ lib.optional withCurses (mkDesktopItem "trackma-curses" "Trackma (ncurses)" "Trackma Updater (ncurses frontend)" true);
+
+  postInstall = ''
+    install -Dvm444 $src/trackma/data/icon.png $out/share/pixmaps/trackma.png
+  '';
+
+  doCheck = false;
+
+  pythonImportsCheck = [ "trackma" ];
+
+  postDist = lib.optional (!withQT) "rm $out/bin/trackma-qt"
+    ++ lib.optional (!withGTK) "rm $out/bin/trackma-gtk"
+    ++ lib.optional (!withCurses) "rm $out/bin/trackma-curses";
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    homepage = "https://github.com/z411/trackma";
+    description = "Open multi-site list manager for Unix-like systems (ex-wMAL)";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trackma/update.sh b/nixpkgs/pkgs/tools/misc/trackma/update.sh
new file mode 100755
index 000000000000..7ad4a31f185b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trackma/update.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq common-updater-scripts
+
+set -eu -o pipefail
+
+version="$(curl --silent "https://api.github.com/repos/z411/trackma/releases" | jq '.[0].tag_name' --raw-output)"
+
+update-source-version trackma "${version:1}"
diff --git a/nixpkgs/pkgs/tools/misc/traefik-certs-dumper/default.nix b/nixpkgs/pkgs/tools/misc/traefik-certs-dumper/default.nix
new file mode 100644
index 000000000000..60cc47969afa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/traefik-certs-dumper/default.nix
@@ -0,0 +1,24 @@
+{ fetchFromGitHub, buildGoModule, lib }:
+
+buildGoModule rec {
+  pname = "traefik-certs-dumper";
+  version = "2.8.3";
+
+  src = fetchFromGitHub {
+    owner = "ldez";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-dSVtowebmDA0X/PtLKktvb1+FhQ+evMoxFBXIXqZujw=";
+  };
+
+  vendorHash = "sha256-a23kTtjIaMYs3+S9rYZ6ttyCyyK6Wm2wUZQw+In/hG4=";
+  excludedPackages = "integrationtest";
+
+  meta = with lib; {
+    description = "dump ACME data from traefik to certificates";
+    homepage = "https://github.com/ldez/traefik-certs-dumper";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "traefik-certs-dumper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trash-cli/default.nix b/nixpkgs/pkgs/tools/misc/trash-cli/default.nix
new file mode 100644
index 000000000000..7b1e286a8ebd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trash-cli/default.nix
@@ -0,0 +1,67 @@
+{ lib, fetchFromGitHub, installShellFiles, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "trash-cli";
+  version = "0.23.11.10";
+
+  src = fetchFromGitHub {
+    owner = "andreafrancia";
+    repo = "trash-cli";
+    rev = version;
+    hash = "sha256-bP1x+yYAsPQ1vXS3rmHD11UiJ7r/02akb84hr+o8JLs=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ psutil six ];
+
+  nativeBuildInputs = with python3Packages; [
+    installShellFiles
+    shtab
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    mock
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    sed -i '/typing/d' setup.cfg
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    # Create a home directory with a test file.
+    HOME="$(mktemp -d)"
+    touch "$HOME/deleteme"
+
+    # Verify that trash list is initially empty.
+    [[ $($out/bin/trash-list) == "" ]]
+
+    # Trash a test file and verify that it shows up in the list.
+    $out/bin/trash "$HOME/deleteme"
+    [[ $($out/bin/trash-list) == *" $HOME/deleteme" ]]
+
+    # Empty the trash and verify that it is empty.
+    $out/bin/trash-empty
+    [[ $($out/bin/trash-list) == "" ]]
+
+    runHook postInstallCheck
+  '';
+  postInstall = ''
+    for bin in trash-empty trash-list trash-restore trash-put trash; do
+      installShellCompletion --cmd "$bin" \
+        --bash <("$out/bin/$bin" --print-completion bash) \
+        --zsh  <("$out/bin/$bin" --print-completion zsh)
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/andreafrancia/trash-cli";
+    description = "Command line interface to the freedesktop.org trashcan";
+    maintainers = [ maintainers.rycee ];
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+    mainProgram = "trash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trashy/default.nix b/nixpkgs/pkgs/tools/misc/trashy/default.nix
new file mode 100644
index 000000000000..cc985b8f3b35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trashy/default.nix
@@ -0,0 +1,33 @@
+{ lib, rustPlatform, fetchCrate, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "trashy";
+  version = "2.0.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-1xHyhAV8hpgMngQdamRzEliyG60t+I3KfsDJi0+180o=";
+  };
+
+  cargoHash = "sha256-ZWqWtWzb+CLH1ravBb/oV+aPxplEyiC1wEFhvchcLqg=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preFixup = ''
+    installShellCompletion --cmd trash \
+      --bash <($out/bin/trash completions bash) \
+      --fish <($out/bin/trash completions fish) \
+      --zsh <($out/bin/trash completions zsh) \
+  '';
+
+  meta = with lib; {
+    description = "A simple, fast, and featureful alternative to rm and trash-cli";
+    homepage = "https://github.com/oberblastmeister/trashy";
+    changelog = "https://github.com/oberblastmeister/trashy/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ oberblastmeister ];
+    mainProgram = "trash";
+    # darwin is unsupported due to https://github.com/Byron/trash-rs/issues/8
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trdl-client/default.nix b/nixpkgs/pkgs/tools/misc/trdl-client/default.nix
new file mode 100644
index 000000000000..e0d92c140ced
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trdl-client/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, trdl-client
+}:
+
+buildGoModule rec {
+  pname = "trdl-client";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "werf";
+    repo = "trdl";
+    rev = "v${version}";
+    hash = "sha256-umeoiEq+Cp/cKpiNxCnMDghubm3LPFPJA18ChuYmIVo=";
+  };
+
+  sourceRoot = "${src.name}/client";
+
+  vendorHash = "sha256-f7FPeR+us3WvwqzcSQLbkKv905CCIAAm+HNV2FFF8OY=";
+
+  subPackages = [ "cmd/trdl" ];
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/werf/trdl/client/pkg/trdl.Version=${src.rev}"
+  ];
+
+  tags = [
+    "dfrunmount"
+    "dfssh"
+  ];
+
+  # There are no tests for cmd/trdl.
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = trdl-client;
+    command = "trdl version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = ''
+      The universal solution for delivering your software updates securely from
+      a trusted The Update Framework (TUF) repository
+    '';
+    longDescription = ''
+      trdl is an Open Source solution providing a secure channel for delivering
+      updates from the Git repository to the end user.
+
+      The project team releases new versions of the software and switches them
+      in the release channels. Git acts as the single source of truth while
+      Vault is used as a tool to verify operations as well as populate and
+      maintain the TUF repository.
+
+      The user selects a release channel, continuously receives the latest
+      software version from the TUF repository, and uses it.
+    '';
+    homepage = "https://trdl.dev";
+    changelog = "https://github.com/werf/trdl/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ azahi ];
+    mainProgram = "trdl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tremor-rs/Cargo.lock b/nixpkgs/pkgs/tools/misc/tremor-rs/Cargo.lock
new file mode 100644
index 000000000000..a8ad6bbe9466
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tremor-rs/Cargo.lock
@@ -0,0 +1,6529 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aead"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561"
+dependencies = [
+ "aes-soft",
+ "aesni",
+ "cipher",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "ghash",
+ "subtle",
+]
+
+[[package]]
+name = "aes-soft"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072"
+dependencies = [
+ "cipher",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aesni"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce"
+dependencies = [
+ "cipher",
+ "opaque-debug",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom 0.2.6",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
+
+[[package]]
+name = "arc-swap"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
+[[package]]
+name = "async-attributes"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-broadcast"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bbd92a9bd0e9c1298118ecf8a2f825e86b12c3ec9e411573e34aaf3a0c03cdd"
+dependencies = [
+ "easy-parallel",
+ "event-listener",
+ "futures-core",
+ "parking_lot 0.11.2",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-compat"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b48b4ff0c2026db683dea961cd8ea874737f56cffca86fa84415eaddc51c00d"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "once_cell",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345fd392ab01f746c717b1357165b76f0b67a60192007b234058c9045fdcf695"
+dependencies = [
+ "bytes 0.5.6",
+ "flate2",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "xz2",
+]
+
+[[package]]
+name = "async-dup"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7427a12b8dc09291528cfb1da2447059adb4a257388c2acd6497a79d55cf6f7c"
+dependencies = [
+ "futures-io",
+ "simple-mutex",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965"
+dependencies = [
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+ "slab",
+]
+
+[[package]]
+name = "async-fs"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b3ca4f8ff117c37c278a2f7415ce9be55560b846b5bc4412aaa5d29c1c3dae2"
+dependencies = [
+ "async-lock",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd8b508d585e01084059b60f06ade4cb7415cd2e4084b71dd1cb44e7d3fb9880"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+ "tokio 0.3.7",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "async-h1"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8101020758a4fc3a7c326cb42aa99e9fa77cbfb76987c128ad956406fe1f70a7"
+dependencies = [
+ "async-channel",
+ "async-dup",
+ "async-std",
+ "futures-core",
+ "http-types",
+ "httparse",
+ "log",
+ "pin-project",
+]
+
+[[package]]
+name = "async-io"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07"
+dependencies = [
+ "concurrent-queue",
+ "futures-lite",
+ "libc",
+ "log",
+ "once_cell",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "winapi",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-native-tls"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e9e7a929bd34c68a82d58a4de7f86fffdaf97fb2af850162a7bb19dd7269b33"
+dependencies = [
+ "async-std",
+ "native-tls",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "async-net"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5373304df79b9b4395068fb080369ec7178608827306ce4d081cba51cac551df"
+dependencies = [
+ "async-io",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-process"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf2c06e30a24e8c78a3987d07f0930edf76ef35e027e7bdb063fccafdad1f60c"
+dependencies = [
+ "async-io",
+ "blocking",
+ "cfg-if",
+ "event-listener",
+ "futures-lite",
+ "libc",
+ "once_cell",
+ "signal-hook",
+ "winapi",
+]
+
+[[package]]
+name = "async-rustls"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c86f33abd5a4f3e2d6d9251a9e0c6a7e52eb1113caf893dae8429bf4a53f378"
+dependencies = [
+ "futures-lite",
+ "rustls 0.19.1",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "async-sse"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53bba003996b8fd22245cd0c59b869ba764188ed435392cf2796d03b805ade10"
+dependencies = [
+ "async-channel",
+ "async-std",
+ "http-types",
+ "log",
+ "memchr",
+ "pin-project-lite 0.1.12",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-attributes",
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "async-process",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite 0.2.9",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-std-resolver"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f2f8a4a203be3325981310ab243a28e6e4ea55b6519bffce05d41ab60e09ad8"
+dependencies = [
+ "async-std",
+ "async-trait",
+ "futures-io",
+ "futures-util",
+ "pin-utils",
+ "socket2",
+ "trust-dns-resolver",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-task"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9"
+
+[[package]]
+name = "async-tls"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d85a97c4a0ecce878efd3f945f119c78a646d8975340bca0398f9bb05c30cc52"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "rustls 0.18.1",
+ "webpki 0.21.4",
+ "webpki-roots 0.20.0",
+]
+
+[[package]]
+name = "async-tls"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "rustls 0.19.1",
+ "webpki 0.21.4",
+ "webpki-roots 0.21.1",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-tungstenite"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1b71b31561643aa8e7df3effe284fa83ab1a840e52294c5f4bd7bfd8b2becbb"
+dependencies = [
+ "async-std",
+ "async-tls 0.11.0",
+ "futures-io",
+ "futures-util",
+ "log",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "tokio-rustls 0.23.4",
+ "tungstenite",
+ "webpki-roots 0.22.3",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
+
+[[package]]
+name = "attohttpc"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe174d1b67f7b2bafed829c09db039301eb5841f66e43be2cf60b326e7f8e2cc"
+dependencies = [
+ "flate2",
+ "http",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "attohttpc"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a8bda305457262b339322106c776e3fd21df860018e566eb6a5b1aa4b6ae02d"
+dependencies = [
+ "flate2",
+ "http",
+ "log",
+ "rustls 0.18.1",
+ "serde",
+ "serde_urlencoded 0.6.1",
+ "url",
+ "webpki 0.21.4",
+ "webpki-roots 0.19.0",
+ "wildmatch",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "aws-config"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f790682283e9fa42799d4800900e5c2f9a2e67b133a276d74c2f6118f7c24ce"
+dependencies = [
+ "aws-http",
+ "aws-sdk-sso",
+ "aws-sdk-sts",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-json",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.1.0",
+ "hex",
+ "http",
+ "hyper",
+ "ring",
+ "tokio 1.18.2",
+ "tower",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-endpoint"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d31dc5bfe810432f2d87465dd6633134e097d19e1a10315446b82a63873552f7"
+dependencies = [
+ "aws-smithy-http",
+ "aws-types",
+ "http",
+ "regex",
+ "tracing",
+]
+
+[[package]]
+name = "aws-http"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d41b649924d2d925e387dc3e9860248c2fd806e783fbc69dbda264878272929"
+dependencies = [
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "aws-types",
+ "http",
+ "lazy_static",
+ "percent-encoding",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sdk-s3"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1523a776944a6207abd71e5b6ef9c32db332c0e94fb05215dfd4415ebf96705"
+dependencies = [
+ "aws-endpoint",
+ "aws-http",
+ "aws-sig-auth",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "bytes 1.1.0",
+ "http",
+ "md-5",
+ "tokio-stream",
+ "tower",
+]
+
+[[package]]
+name = "aws-sdk-sso"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ab3dfc4f61d6f5261269c15b087c2aa36a1b0570dce484fa116003696986f4e"
+dependencies = [
+ "aws-endpoint",
+ "aws-http",
+ "aws-sig-auth",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-json",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.1.0",
+ "http",
+ "tokio-stream",
+ "tower",
+]
+
+[[package]]
+name = "aws-sdk-sts"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89015f25572643bb1bcf7490da9feeecdde23eca0c1a0e98d07fdf4547f89e51"
+dependencies = [
+ "aws-endpoint",
+ "aws-http",
+ "aws-sig-auth",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-query",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "bytes 1.1.0",
+ "http",
+ "tower",
+]
+
+[[package]]
+name = "aws-sig-auth"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75b0895f0f5e5e40851e716041882b9e44d4bb21c68d50b083ea5dcd46378cf"
+dependencies = [
+ "aws-sigv4",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-types",
+ "http",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sigv4"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a415b5e9401847f97e925b2d8a6b398a4422db6dc036234a681900798e1c396e"
+dependencies = [
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "bytes 1.1.0",
+ "form_urlencoded",
+ "hex",
+ "http",
+ "once_cell",
+ "percent-encoding",
+ "regex",
+ "ring",
+ "time 0.3.9",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-async"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2659762757c7c13b87a7473a383fddd09a56cfea14528a8606255506167131d7"
+dependencies = [
+ "futures-util",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "tokio-stream",
+]
+
+[[package]]
+name = "aws-smithy-client"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba658f0c70f4d8aacf1f8d522d1e5082a86c1c3c036cb6e017aab97d0e5e32a7"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-types",
+ "bytes 1.1.0",
+ "fastrand",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls 0.22.1",
+ "lazy_static",
+ "pin-project",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-eventstream"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded4919d467cd6433809c94c6181c5f4d7601cc1456fdf1100d35d48d695256d"
+dependencies = [
+ "aws-smithy-types",
+ "bytes 1.1.0",
+ "crc32fast",
+]
+
+[[package]]
+name = "aws-smithy-http"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cb3bd864edb558c2fdad04cea99f2bafa2ad9cde4a78048273b534be8b34cf9"
+dependencies = [
+ "aws-smithy-eventstream",
+ "aws-smithy-types",
+ "bytes 1.1.0",
+ "bytes-utils",
+ "futures-core",
+ "http",
+ "http-body",
+ "hyper",
+ "once_cell",
+ "percent-encoding",
+ "pin-project",
+ "tokio 1.18.2",
+ "tokio-util 0.7.2",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-http-tower"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44dc4d903a0629df43f9787ac28db8a0fe5b62e3b8d803812c9a122b8a69ac1a"
+dependencies = [
+ "aws-smithy-http",
+ "bytes 1.1.0",
+ "http",
+ "http-body",
+ "pin-project",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-json"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3abdf01b1642ea4eccc3a89bbe636160f9926bd81c99e5c58970ef92139f5184"
+dependencies = [
+ "aws-smithy-types",
+]
+
+[[package]]
+name = "aws-smithy-query"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e8c6411ed3eadf48253e505e0ec54fff9010732593c1163e522d473e467f5f"
+dependencies = [
+ "aws-smithy-types",
+ "urlencoding",
+]
+
+[[package]]
+name = "aws-smithy-types"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d60bf15d33cbbe6cf0708a6908fab91166187550ac963c62427d2befea8e648f"
+dependencies = [
+ "itoa 1.0.2",
+ "num-integer",
+ "ryu",
+ "time 0.3.9",
+]
+
+[[package]]
+name = "aws-smithy-xml"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c547d21db127067775234b1dac68c584a9d389e2dcea67cc46e18640254205"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "aws-types"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40d4a682b35d27cd73ef1beebdbfcdf7686b6cbf8bb76a2983d219a17ce73559"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "http",
+ "rustc_version 0.4.0",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base-x"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc19a4937b4fbd3fe3379793130e42060d10627a360f2127802b10b87e7baf74"
+
+[[package]]
+name = "base64"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
+
+[[package]]
+name = "base64"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "beef"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bimap"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.56.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "clap 2.34.0",
+ "env_logger 0.8.4",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "which 3.1.1",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc"
+dependencies = [
+ "async-channel",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "bollard-stubs"
+version = "1.41.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed2f2e73fffe9455141e170fb9c1feb0ac521ec7e7dcd47a7cab72a658490fb8"
+dependencies = [
+ "chrono",
+ "serde",
+ "serde_with",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "bytes-utils"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1934a3ef9cac8efde4966a92781e77713e1ba329f1d42e446c7d7eba340d8ef1"
+dependencies = [
+ "bytes 1.1.0",
+ "either",
+]
+
+[[package]]
+name = "bzip2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cache-padded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
+
+[[package]]
+name = "cached-path"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f1c56d30236522ab3393a08746b138d4e16372001f42d29c88d513aeb8ab7ef"
+dependencies = [
+ "flate2",
+ "fs2",
+ "glob",
+ "indicatif",
+ "log",
+ "rand 0.8.5",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "sha2 0.10.2",
+ "tar",
+ "tempfile",
+ "thiserror",
+ "zip",
+ "zip-extensions",
+]
+
+[[package]]
+name = "cast"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a"
+dependencies = [
+ "rustc_version 0.4.0",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27"
+dependencies = [
+ "nom 5.1.2",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time 0.1.43",
+ "winapi",
+]
+
+[[package]]
+name = "cidr-utils"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a0c49d94395dc29876e75966ca2176e6c7c2ab117ca99d06937faae6ca89c7b"
+dependencies = [
+ "debug-helper",
+ "num-bigint 0.4.3",
+ "num-traits",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "cipher"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap 0.11.0",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f1fe12880bae935d142c8702d500c63a4e8634b6c3c57ad72bf978fc7b6249a"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim 0.10.0",
+ "termcolor",
+ "textwrap 0.15.0",
+]
+
+[[package]]
+name = "clap_complete"
+version = "3.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c09fbb00fb6e20e92f785598ecbf0c118f269737490c57af28b1ed07f392be16"
+dependencies = [
+ "clap 3.2.6",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed6db9e867166a43a53f7199b5e4d1f522a1e5bd626654be263c999ce59df39a"
+dependencies = [
+ "heck 0.4.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5538cd660450ebeb4234cfecf8f2284b844ffc4c50531e66d584ad5b91293613"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "codespan"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3362992a0d9f1dd7c3d0e89e0ab2bb540b7a95fea8cd798090e758fda2899b5e"
+dependencies = [
+ "codespan-reporting",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
+dependencies = [
+ "cache-padded",
+]
+
+[[package]]
+name = "config"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b076e143e1d9538dde65da30f8481c2a6c44040edb8e02b9bf1351edb92ce3"
+dependencies = [
+ "lazy_static",
+ "nom 5.1.2",
+ "serde",
+]
+
+[[package]]
+name = "conquer-once"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c6d3a9775a69f6d1fe2cc888999b67ed30257d3da4d2af91984e722f2ec918a"
+dependencies = [
+ "conquer-util",
+]
+
+[[package]]
+name = "conquer-util"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e763eef8846b13b380f37dfecda401770b0ca4e56e95170237bd7c25c7db3582"
+
+[[package]]
+name = "console"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31"
+dependencies = [
+ "encode_unicode",
+ "libc",
+ "once_cell",
+ "terminal_size",
+ "winapi",
+]
+
+[[package]]
+name = "const_fn"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935"
+
+[[package]]
+name = "cookie"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951"
+dependencies = [
+ "aes-gcm",
+ "base64 0.13.0",
+ "hkdf",
+ "hmac 0.10.1",
+ "percent-encoding",
+ "rand 0.8.5",
+ "sha2 0.9.9",
+ "time 0.2.27",
+ "version_check",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cpuid-bool"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10"
+dependencies = [
+ "atty",
+ "cast",
+ "clap 2.34.0",
+ "criterion-plot",
+ "csv",
+ "itertools",
+ "lazy_static",
+ "num-traits",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_cbor",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57"
+dependencies = [
+ "cast",
+ "itertools",
+]
+
+[[package]]
+name = "cron"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76219e9243e100d5a37676005f08379297f8addfebc247613299600625c734d"
+dependencies = [
+ "chrono",
+ "nom 7.1.1",
+ "once_cell",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f25d8400f4a7a5778f0e4e52384a48cbd9b5c495d110786187fc750075277a2"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
+dependencies = [
+ "cfg-if",
+ "lazy_static",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "csv"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+dependencies = [
+ "bstr",
+ "csv-core",
+ "itoa 0.4.8",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ct-logs"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1a816186fa68d9e426e3cb4ae4dff1fcd8e4a2c34b781bf7a822574a0d0aac8"
+dependencies = [
+ "sct 0.6.1",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "ctr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "curl"
+version = "0.4.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37d855aeef205b43f65a5001e0997d81f8efca7badad4fad7d897aa7f0d0651f"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.55+curl-7.83.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23734ec77368ec583c2e61dd3f0b0e5c98b93abe6d2a004ca06b91dd7e3e2762"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.10.0",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dashmap"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c"
+dependencies = [
+ "cfg-if",
+ "num_cpus",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3495912c9c1ccf2e18976439f4443f3fee0fd61f424ff99fde6a66b15ecb448f"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.12.1",
+ "lock_api",
+ "parking_lot_core 0.9.3",
+ "serde",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57"
+
+[[package]]
+name = "deadpool"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d126179d86aee4556e54f5f3c6bf6d9884e7cc52cef82f77ee6f90a7747616d"
+dependencies = [
+ "async-trait",
+ "config",
+ "crossbeam-queue",
+ "num_cpus",
+ "serde",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "debug-helper"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e"
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499"
+
+[[package]]
+name = "difference"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+dependencies = [
+ "block-buffer 0.10.2",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "discard"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
+
+[[package]]
+name = "dissect"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36774f66ec318a73f43fb2939cac2e111570b6ff2487ebf948252451c4bcedaa"
+dependencies = [
+ "halfbrown",
+ "simd-json",
+]
+
+[[package]]
+name = "distance"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d9d8664cf849d7d0f3114a3a387d2f5e4303176d746d5a951aaddc66dfe9240"
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28"
+
+[[package]]
+name = "easy-parallel"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946"
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "elasticsearch"
+version = "7.14.0-alpha.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d853e1c104dbad916425c88e72ac5b73db65bbc22d3b8ab945174e68df91e6f0"
+dependencies = [
+ "base64 0.11.0",
+ "bytes 1.1.0",
+ "dyn-clone",
+ "lazy_static",
+ "percent-encoding",
+ "reqwest",
+ "rustc_version 0.2.3",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "url",
+ "void",
+]
+
+[[package]]
+name = "ena"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7402b94a93c24e742487327a7cd839dc9d36fec9de9fb25b09f2dae459f36c3"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73"
+dependencies = [
+ "heck 0.4.0",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "error-chain"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
+dependencies = [
+ "backtrace",
+ "version_check",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
+
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "file-mode"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773ea145485772b8d354624b32adbe20e776353d3e48c7b03ef44e3455e9815c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "winapi",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e"
+
+[[package]]
+name = "flate2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite 0.2.9",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
+
+[[package]]
+name = "futures-task"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
+
+[[package]]
+name = "futures-util"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite 0.2.9",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "gcemeta"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64b740806c16b381ca8d78cb3869fb47ce5b490db28c5f19bc0336a9b9aaca6e"
+dependencies = [
+ "attohttpc 0.15.0",
+ "lazy_static",
+ "serde_json",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.10.2+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "ghash"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375"
+dependencies = [
+ "opaque-debug",
+ "polyval",
+]
+
+[[package]]
+name = "gimli"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4"
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "globset"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc"
+dependencies = [
+ "bitflags",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "googapis"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65e3984a414cce451bd6fa931298c2b384924ddc1b6201adec3b0c0c148dabfa"
+dependencies = [
+ "prost 0.9.0",
+ "prost-types",
+ "tonic",
+]
+
+[[package]]
+name = "gouth"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c138d157085ba4eb1aaa86e622dc348b956d5ac9d2e446b65941467ebffefdd6"
+dependencies = [
+ "attohttpc 0.17.0",
+ "gcemeta",
+ "jsonwebtoken",
+ "serde",
+ "serde_json",
+ "url",
+]
+
+[[package]]
+name = "grok"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "840fbb5c3bf23c11b93fbccddb9e93e79d2eab3e21f0e111bff1793928602670"
+dependencies = [
+ "glob",
+ "onig",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
+dependencies = [
+ "bytes 1.1.0",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio 1.18.2",
+ "tokio-util 0.7.2",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "halfbrown"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce69ed202df415a3d4a01e6f3341320ca88b9bd4f0bf37be6fa239cdea06d9bf"
+dependencies = [
+ "fxhash",
+ "hashbrown 0.12.1",
+ "serde",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+dependencies = [
+ "ahash",
+ "serde",
+]
+
+[[package]]
+name = "hdrhistogram"
+version = "7.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31672b7011be2c4f7456c4ddbcb40e7e9a4a9fad8efe49a6ebaf5f307d0109c0"
+dependencies = [
+ "base64 0.13.0",
+ "byteorder",
+ "crossbeam-channel",
+ "flate2",
+ "nom 7.1.1",
+ "num-traits",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f"
+dependencies = [
+ "digest 0.9.0",
+ "hmac 0.10.1",
+]
+
+[[package]]
+name = "hmac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"
+dependencies = [
+ "crypto-mac",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes 1.1.0",
+ "fnv",
+ "itoa 1.0.2",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes 1.1.0",
+ "http",
+ "pin-project-lite 0.2.9",
+]
+
+[[package]]
+name = "http-client"
+version = "6.5.1"
+source = "git+https://github.com/tremor-rs/http-client?rev=059b23e#059b23e5d615debe41a6a1cd1f4228579179a88c"
+dependencies = [
+ "async-h1",
+ "async-native-tls",
+ "async-std",
+ "async-tls 0.11.0",
+ "async-trait",
+ "cfg-if",
+ "dashmap 4.0.2",
+ "deadpool",
+ "futures",
+ "http-types",
+ "log",
+ "rustls 0.19.1",
+]
+
+[[package]]
+name = "http-client"
+version = "6.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e023af341b797ce2c039f7c6e1d347b68d0f7fd0bc7ac234fe69cfadcca1f89a"
+dependencies = [
+ "async-h1",
+ "async-std",
+ "async-tls 0.10.0",
+ "async-trait",
+ "cfg-if",
+ "dashmap 4.0.2",
+ "deadpool",
+ "futures",
+ "http-types",
+ "log",
+ "rustls 0.18.1",
+]
+
+[[package]]
+name = "http-types"
+version = "2.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad"
+dependencies = [
+ "anyhow",
+ "async-channel",
+ "async-std",
+ "base64 0.13.0",
+ "cookie",
+ "futures-lite",
+ "infer",
+ "pin-project-lite 0.2.9",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "serde_urlencoded 0.7.1",
+ "url",
+]
+
+[[package]]
+name = "httparse"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f"
+dependencies = [
+ "bytes 1.1.0",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.2",
+ "pin-project-lite 0.2.9",
+ "socket2",
+ "tokio 1.18.2",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64"
+dependencies = [
+ "ct-logs",
+ "futures-util",
+ "hyper",
+ "log",
+ "rustls 0.19.1",
+ "rustls-native-certs 0.5.0",
+ "tokio 1.18.2",
+ "tokio-rustls 0.22.0",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls 0.20.6",
+ "tokio 1.18.2",
+ "tokio-rustls 0.23.4",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes 1.1.0",
+ "hyper",
+ "native-tls",
+ "tokio 1.18.2",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
+dependencies = [
+ "crossbeam-utils",
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.1",
+ "serde",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b"
+dependencies = [
+ "console",
+ "lazy_static",
+ "number_prefix",
+ "regex",
+]
+
+[[package]]
+name = "infer"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98"
+dependencies = [
+ "socket2",
+ "widestring",
+ "winapi",
+ "winreg 0.7.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
+
+[[package]]
+name = "itertools"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+
+[[package]]
+name = "jobserver"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "jsonwebtoken"
+version = "7.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afabcc15e437a6484fc4f12d0fd63068fe457bf93f1c148d3d9649c60b103f32"
+dependencies = [
+ "base64 0.12.3",
+ "pem",
+ "ring",
+ "serde",
+ "serde_json",
+ "simple_asn1",
+]
+
+[[package]]
+name = "jumphash"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6cb1d4856e6c1b02aea6b85073b45daa15af1ba17f1750f8ca8772068915da0"
+dependencies = [
+ "rand 0.8.5",
+ "siphasher",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lalrpop"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b30455341b0e18f276fa64540aff54deafb54c589de6aca68659c63dd2d5d823"
+dependencies = [
+ "ascii-canvas",
+ "atty",
+ "bit-set",
+ "diff",
+ "ena",
+ "itertools",
+ "lalrpop-util",
+ "petgraph",
+ "pico-args",
+ "regex",
+ "regex-syntax",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcf796c978e9b4d983414f4caedc9273aa33ee214c5b887bd55fde84c85d2dc4"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "lexical"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6"
+dependencies = [
+ "lexical-core 0.8.5",
+]
+
+[[package]]
+name = "lexical-core"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
+dependencies = [
+ "arrayvec",
+ "bitflags",
+ "cfg-if",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
+dependencies = [
+ "lexical-parse-float",
+ "lexical-parse-integer",
+ "lexical-util",
+ "lexical-write-float",
+ "lexical-write-integer",
+]
+
+[[package]]
+name = "lexical-parse-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
+dependencies = [
+ "lexical-parse-integer",
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-parse-integer"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "125e1f93e5003d4bd89758c2ca2771bfae13632df633cde581efe07c87d354e5"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-util"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc"
+dependencies = [
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862"
+dependencies = [
+ "lexical-util",
+ "lexical-write-integer",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-integer"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "libflate"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05605ab2bce11bcfc0e9c635ff29ef8b2ea83f29be257ee7d730cac3ee373093"
+dependencies = [
+ "adler32",
+ "crc32fast",
+ "libflate_lz77",
+]
+
+[[package]]
+name = "libflate_lz77"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39a734c0493409afcd49deee13c006a04e3586b9761a03543c6272c9c51f2f5a"
+dependencies = [
+ "rle-decode-fast",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
+
+[[package]]
+name = "lock_api"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+ "serde",
+ "value-bag",
+]
+
+[[package]]
+name = "log-mdc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7"
+
+[[package]]
+name = "log4rs"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "893eaf59f4bef8e2e94302adf56385db445a0306b9823582b0b8d5a06d8822f3"
+dependencies = [
+ "anyhow",
+ "arc-swap",
+ "chrono",
+ "derivative",
+ "fnv",
+ "humantime",
+ "libc",
+ "log",
+ "log-mdc",
+ "parking_lot 0.12.1",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "serde_yaml",
+ "thiserror",
+ "thread-id",
+ "typemap",
+ "winapi",
+]
+
+[[package]]
+name = "lru"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a"
+dependencies = [
+ "hashbrown 0.11.2",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "lz4"
+version = "1.23.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4edcb94251b1c375c459e5abe9fb0168c1c826c3370172684844f8f3f8d1a885"
+dependencies = [
+ "libc",
+ "lz4-sys",
+]
+
+[[package]]
+name = "lz4-sys"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7be8908e2ed6f31c02db8a9fa962f03e36c53fbfde437363eae3306b85d7e17"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "lzma-sys"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e06754c4acf47d49c727d5665ca9fb828851cda315ed3bd51edd148ef78a8772"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "mapr"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46a28a55dbc005b2f6f123c4058933d57add373d362f6fd3a76aab4fe6973500"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "matrixmultiply"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84"
+dependencies = [
+ "rawpointer",
+]
+
+[[package]]
+name = "md-5"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658646b21e0b72f7866c7038ab086d3d5e1cd6271f060fd37defb241949d0582"
+dependencies = [
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "native-tls"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "ndarray"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dec23e6762830658d2b3d385a75aa212af2f67a4586d4442907144f3bb6a1ca8"
+dependencies = [
+ "matrixmultiply",
+ "num-complex",
+ "num-integer",
+ "num-traits",
+ "rawpointer",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nom"
+version = "5.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
+dependencies = [
+ "lexical-core 0.7.6",
+ "memchr",
+ "version_check",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "object"
+version = "0.28.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225"
+
+[[package]]
+name = "onig"
+version = "6.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67ddfe2c93bb389eea6e6d713306880c7f6dcc99a75b659ce145d962c861b225"
+dependencies = [
+ "bitflags",
+ "lazy_static",
+ "libc",
+ "onig_sys",
+]
+
+[[package]]
+name = "onig_sys"
+version = "69.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dd3eee045c84695b53b20255bb7317063df090b68e18bfac0abb6c39cf7f33e"
+dependencies = [
+ "bindgen",
+ "cc",
+ "pkg-config",
+]
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5fd19fb3e0a8191c1e34935718976a3e70c112ab9a24af6d7cadccd9d90bc0"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-float"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordered-float"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bcbab4bfea7a59c2c0fe47211a1ac4e3e96bea6eb446d704f310bc5c732ae2"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
+
+[[package]]
+name = "output_vt100"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.5",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.3",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc"
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pem"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb"
+dependencies = [
+ "base64 0.13.0",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "petgraph"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pico-args"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468"
+
+[[package]]
+name = "pin-project"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+
+[[package]]
+name = "plotters"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d88417318da0eaf0fdcdb51a0ee6c3bed624333bff8f946733049380be67ac1c"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "521fa9638fa597e1dc53e9412a4f9cefb01187ee1f7413076f9e6749e2885ba9"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "polling"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "log",
+ "wepoll-ffi",
+ "winapi",
+]
+
+[[package]]
+name = "polyval"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd"
+dependencies = [
+ "cpuid-bool",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "port_scanner"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "325a6d2ac5dee293c3b2612d4993b98aec1dff096b0a2dae70ed7d95784a05da"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "pretty_assertions"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89f989ac94207d048d92db058e4f6ec7342b0971fc58d1271ca148b799b3563"
+dependencies = [
+ "ansi_term",
+ "ctor",
+ "diff",
+ "output_vt100",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a"
+dependencies = [
+ "thiserror",
+ "toml",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proptest"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0d9cc07f18492d879586c92b485def06bc850da3118075cd45d50e9c95b0e5"
+dependencies = [
+ "bit-set",
+ "bitflags",
+ "byteorder",
+ "lazy_static",
+ "num-traits",
+ "quick-error 2.0.1",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "rand_xorshift",
+ "regex-syntax",
+ "rusty-fork",
+ "tempfile",
+]
+
+[[package]]
+name = "prost"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+dependencies = [
+ "bytes 1.1.0",
+ "prost-derive 0.9.0",
+]
+
+[[package]]
+name = "prost"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e"
+dependencies = [
+ "bytes 1.1.0",
+ "prost-derive 0.10.1",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+dependencies = [
+ "bytes 1.1.0",
+ "heck 0.3.3",
+ "itertools",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prost 0.9.0",
+ "prost-types",
+ "regex",
+ "tempfile",
+ "which 4.2.5",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+dependencies = [
+ "bytes 1.1.0",
+ "prost 0.9.0",
+]
+
+[[package]]
+name = "protobuf"
+version = "2.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf7e6d18738ecd0902d30d1ad232c9125985a3422929b16c65517b38adc14f96"
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
+[[package]]
+name = "quote"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "qwal"
+version = "0.1.0"
+source = "git+https://github.com/tremor-rs/qwal#50cfb10c4091f87580c93ad950f3adea96726920"
+dependencies = [
+ "async-std",
+ "byteorder",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom 0.2.6",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
+dependencies = [
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rawpointer"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
+
+[[package]]
+name = "rayon"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rdkafka"
+version = "0.28.0"
+source = "git+https://github.com/fede1024/rust-rdkafka?rev=7a2355f03c9aee8d4544e89bc4b0b0b6b96826e0#7a2355f03c9aee8d4544e89bc4b0b0b6b96826e0"
+dependencies = [
+ "futures",
+ "libc",
+ "log",
+ "rdkafka-sys",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "slab",
+]
+
+[[package]]
+name = "rdkafka-sys"
+version = "4.2.0+1.8.2"
+source = "git+https://github.com/fede1024/rust-rdkafka?rev=7a2355f03c9aee8d4544e89bc4b0b0b6b96826e0#7a2355f03c9aee8d4544e89bc4b0b0b6b96826e0"
+dependencies = [
+ "cmake",
+ "libc",
+ "libz-sys",
+ "num_enum",
+ "pkg-config",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.6",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92"
+dependencies = [
+ "async-compression",
+ "base64 0.13.0",
+ "bytes 1.1.0",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls 0.23.0",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite 0.2.9",
+ "rustls 0.20.6",
+ "rustls-native-certs 0.6.2",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded 0.7.1",
+ "tokio 1.18.2",
+ "tokio-native-tls",
+ "tokio-rustls 0.23.4",
+ "tokio-util 0.7.2",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots 0.22.3",
+ "winreg 0.10.1",
+]
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error 1.2.3",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rle-decode-fast"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
+
+[[package]]
+name = "rmp"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f"
+dependencies = [
+ "byteorder",
+ "num-traits",
+ "paste",
+]
+
+[[package]]
+name = "rmp-serde"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25786b0d276110195fa3d6f3f31299900cf71dfbd6c28450f3f58a0e7f7a347e"
+dependencies = [
+ "byteorder",
+ "rmp",
+ "serde",
+]
+
+[[package]]
+name = "route-recognizer"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56770675ebc04927ded3e60633437841581c285dc6236109ea25fbf3beb7b59e"
+
+[[package]]
+name = "rust-bert"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9944539b0170f138a1d3bb4e1e4a55e3f5c25286d7890a1332eb2aee9f4aa1f8"
+dependencies = [
+ "cached-path",
+ "dirs",
+ "half",
+ "lazy_static",
+ "ordered-float 3.0.0",
+ "rust_tokenizers",
+ "serde",
+ "serde_json",
+ "tch",
+ "thiserror",
+ "uuid",
+]
+
+[[package]]
+name = "rust_tokenizers"
+version = "7.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "196e3b77b07fd5bfcbc8187ecaef5d5931820d9abd6c3fe0a9dc6d3ddb035d72"
+dependencies = [
+ "csv",
+ "hashbrown 0.12.1",
+ "itertools",
+ "lazy_static",
+ "protobuf",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "unicode-normalization",
+ "unicode-normalization-alignments",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.9",
+]
+
+[[package]]
+name = "rustls"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81"
+dependencies = [
+ "base64 0.12.3",
+ "log",
+ "ring",
+ "sct 0.6.1",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "rustls"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+dependencies = [
+ "base64 0.13.0",
+ "log",
+ "ring",
+ "sct 0.6.1",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033"
+dependencies = [
+ "log",
+ "ring",
+ "sct 0.7.0",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092"
+dependencies = [
+ "openssl-probe",
+ "rustls 0.19.1",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9"
+dependencies = [
+ "base64 0.13.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
+
+[[package]]
+name = "rusty-fork"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
+dependencies = [
+ "fnv",
+ "quick-error 1.2.3",
+ "tempfile",
+ "wait-timeout",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd"
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+ "ordered-float 2.10.0",
+ "serde",
+]
+
+[[package]]
+name = "serde_cbor"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
+dependencies = [
+ "half",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
+dependencies = [
+ "itoa 1.0.2",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6"
+dependencies = [
+ "percent-encoding",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97"
+dependencies = [
+ "dtoa",
+ "itoa 0.4.8",
+ "serde",
+ "url",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.2",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "serenity"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "246008828de84241202b092316c4729da36c3edd8f0c17ed6893df8e414c3c9b"
+dependencies = [
+ "async-trait",
+ "async-tungstenite",
+ "base64 0.13.0",
+ "bitflags",
+ "bytes 1.1.0",
+ "cfg-if",
+ "dashmap 5.3.4",
+ "flate2",
+ "futures",
+ "mime",
+ "mime_guess",
+ "parking_lot 0.12.1",
+ "percent-encoding",
+ "reqwest",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "time 0.3.9",
+ "tokio 1.18.2",
+ "tracing",
+ "typemap_rev",
+ "url",
+]
+
+[[package]]
+name = "serial_test"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d19dbfb999a147cedbfe82f042eb9555f5b0fa4ef95ee4570b74349103d9c9f4"
+dependencies = [
+ "lazy_static",
+ "log",
+ "parking_lot 0.12.1",
+ "serial_test_derive",
+]
+
+[[package]]
+name = "serial_test_derive"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb9e2050b2be1d681f8f1c1a528bcfe4e00afa2d8995f713974f5333288659f2"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+dependencies = [
+ "sha1_smol",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[package]]
+name = "shlex"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-async-std"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4aa94397e2023af5b7cff5b8d4785e935cfb77f0e4aab0cae3b26258ace556"
+dependencies = [
+ "async-io",
+ "futures-lite",
+ "libc",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simd-json"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3868f37d8473eb1410c71a8b88a5411778f72ae82bd72340b2355d1c133f2b6a"
+dependencies = [
+ "halfbrown",
+ "serde",
+ "serde_json",
+ "simdutf8",
+ "value-trait",
+]
+
+[[package]]
+name = "simd-json-derive"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23578cc01952bad471e9a6402b9e81392fdd69f3f0acc7844c2999597fcb7109"
+dependencies = [
+ "chrono",
+ "itoa 0.4.8",
+ "ryu",
+ "simd-json",
+ "simd-json-derive-int",
+ "value-trait",
+]
+
+[[package]]
+name = "simd-json-derive-int"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd11950c39dbc9c906d98a217d7fd6be29253145e5d50d45fa0ab0e3a73eb799"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "simd-json",
+ "syn",
+]
+
+[[package]]
+name = "simdutf8"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
+
+[[package]]
+name = "simple-mutex"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38aabbeafa6f6dead8cebf246fe9fae1f9215c8d29b3a69f93bd62a9e4a3dcd6"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "simple_asn1"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "692ca13de57ce0613a363c8c2f1de925adebc81b04c923ac60c5488bb44abe4b"
+dependencies = [
+ "chrono",
+ "num-bigint 0.2.6",
+ "num-traits",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "sketches-ddsketch"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04d2ecae5fcf33b122e2e6bd520a57ccf152d2dde3b38c71039df1a6867264ee"
+
+[[package]]
+name = "slab"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
+
+[[package]]
+name = "sled"
+version = "0.34.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935"
+dependencies = [
+ "crc32fast",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "fs2",
+ "fxhash",
+ "libc",
+ "log",
+ "parking_lot 0.11.2",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+
+[[package]]
+name = "smol"
+version = "1.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cf3b5351f3e783c1d79ab5fc604eeed8b8ae9abd36b166e8b87a089efd85e4"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-fs",
+ "async-io",
+ "async-lock",
+ "async-net",
+ "async-process",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "snap"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451"
+
+[[package]]
+name = "snmalloc-rs"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bbab242a22c735dcd4c1441fffbe7004ea91f7d8fe7902cf283d72405ef978"
+dependencies = [
+ "snmalloc-sys",
+]
+
+[[package]]
+name = "snmalloc-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80756c9f5dacaa9ff49afddb77ea18e80013228128ced3c2162f13306a225dd7"
+dependencies = [
+ "cmake",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "standback"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "stdweb"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
+dependencies = [
+ "discard",
+ "rustc_version 0.2.3",
+ "stdweb-derive",
+ "stdweb-internal-macros",
+ "stdweb-internal-runtime",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "stdweb-derive"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "syn",
+]
+
+[[package]]
+name = "stdweb-internal-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
+dependencies = [
+ "base-x",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha1",
+ "syn",
+]
+
+[[package]]
+name = "stdweb-internal-runtime"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
+
+[[package]]
+name = "string_cache"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "phf_shared",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "strip-ansi-escapes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "011cbb39cf7c1f62871aea3cc46e5817b0937b49e9447370c93cacbe93a766d8"
+dependencies = [
+ "vte",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "surf"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "718b1ae6b50351982dedff021db0def601677f2120938b070eadb10ba4038dd7"
+dependencies = [
+ "async-std",
+ "async-trait",
+ "cfg-if",
+ "encoding_rs",
+ "futures-util",
+ "getrandom 0.2.6",
+ "http-client 6.5.2",
+ "http-types",
+ "log",
+ "mime_guess",
+ "once_cell",
+ "pin-project-lite 0.2.9",
+ "rustls 0.18.1",
+ "serde",
+ "serde_json",
+ "web-sys",
+]
+
+[[package]]
+name = "sval"
+version = "1.0.0-alpha.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45f6ee7c7b87caf59549e9fe45d6a69c75c8019e79e212a835c5da0e92f0ba08"
+
+[[package]]
+name = "syn"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syslog_loose"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c4eae4d024d7912b5bea75e54319445d0ffe7f423bb4b68a46129cdcebecaef"
+dependencies = [
+ "chrono",
+ "nom 7.1.1",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tch"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e92aba73efa51528b4d3370a3386e8ecad0941aa4e688fe900c0c37d9a894561"
+dependencies = [
+ "half",
+ "lazy_static",
+ "libc",
+ "ndarray",
+ "rand 0.8.5",
+ "thiserror",
+ "torch-sys",
+ "zip",
+]
+
+[[package]]
+name = "temp-dir"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "test-case"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "196e8a70562e252cc51eaaaee3ecddc39803d9b7fd4a772b7c7dae7cdf42a859"
+dependencies = [
+ "test-case-macros",
+]
+
+[[package]]
+name = "test-case-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8dd461f47ade621665c9f4e44b20449341769911c253275dc5cb03726cbb852c"
+dependencies = [
+ "cfg-if",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "testcontainers"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e2b1567ca8a2b819ea7b28c92be35d9f76fb9edb214321dcc86eb96023d1f87"
+dependencies = [
+ "bollard-stubs",
+ "conquer-once",
+ "futures",
+ "hex",
+ "hmac 0.12.1",
+ "log",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "sha2 0.10.2",
+ "signal-hook",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+
+[[package]]
+name = "thiserror"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread-id"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fdfe0627923f7411a43ec9ec9c39c3a9b4151be313e0922042581fb6c9b717f"
+dependencies = [
+ "libc",
+ "redox_syscall",
+ "winapi",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tide"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c459573f0dd2cc734b539047f57489ea875af8ee950860ded20cf93a79a1dee0"
+dependencies = [
+ "async-h1",
+ "async-sse",
+ "async-std",
+ "async-trait",
+ "futures-util",
+ "http-client 6.5.2",
+ "http-types",
+ "kv-log-macro",
+ "log",
+ "pin-project-lite 0.2.9",
+ "route-recognizer",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tide-rustls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a85b568b611840ba794ae749d4fa8b345b9f71a9c02b82cf0c28ff076fde6b7"
+dependencies = [
+ "async-dup",
+ "async-h1",
+ "async-rustls",
+ "async-std",
+ "rustls 0.19.1",
+ "tide",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.2.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242"
+dependencies = [
+ "const_fn",
+ "libc",
+ "standback",
+ "stdweb",
+ "time-macros",
+ "version_check",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd"
+dependencies = [
+ "itoa 1.0.2",
+ "libc",
+ "num_threads",
+ "serde",
+]
+
+[[package]]
+name = "time-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
+dependencies = [
+ "proc-macro-hack",
+ "time-macros-impl",
+]
+
+[[package]]
+name = "time-macros-impl"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "standback",
+ "syn",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46409491c9375a693ce7032101970a54f8a2010efb77e13f70788f0d84489e39"
+dependencies = [
+ "autocfg",
+ "num_cpus",
+ "pin-project-lite 0.2.9",
+ "slab",
+]
+
+[[package]]
+name = "tokio"
+version = "1.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4903bf0427cf68dddd5aa6a93220756f8be0c34fcfa9f5e6191e103e15a31395"
+dependencies = [
+ "bytes 1.1.0",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "once_cell",
+ "pin-project-lite 0.2.9",
+ "socket2",
+ "tokio-macros",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+dependencies = [
+ "rustls 0.19.1",
+ "tokio 1.18.2",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls 0.20.6",
+ "tokio 1.18.2",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3"
+dependencies = [
+ "futures-core",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
+dependencies = [
+ "bytes 1.1.0",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f988a1a1adc2fb21f9c12aa96441da33a1728193ae0b95d2be22dbd17fcb4e5c"
+dependencies = [
+ "bytes 1.1.0",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tonic"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "base64 0.13.0",
+ "bytes 1.1.0",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost 0.9.0",
+ "prost-derive 0.9.0",
+ "tokio 1.18.2",
+ "tokio-rustls 0.22.0",
+ "tokio-stream",
+ "tokio-util 0.6.10",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+ "tracing-futures",
+]
+
+[[package]]
+name = "tonic-build"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
+dependencies = [
+ "proc-macro2",
+ "prost-build",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "torch-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bf1a3614ddc8b08054bf11334183e8d049f274b006735d250f82b9cc1f08b1c"
+dependencies = [
+ "anyhow",
+ "cc",
+ "curl",
+ "libc",
+ "zip",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a89fd63ad6adf737582df5db40d286574513c69a11dac5214dc3b5603d6713e"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap",
+ "pin-project",
+ "pin-project-lite 0.2.9",
+ "rand 0.8.5",
+ "slab",
+ "tokio 1.18.2",
+ "tokio-util 0.7.2",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62"
+
+[[package]]
+name = "tower-service"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+
+[[package]]
+name = "tracing"
+version = "0.1.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite 0.2.9",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "traitobject"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
+
+[[package]]
+name = "tremor-api"
+version = "0.12.4"
+dependencies = [
+ "async-std",
+ "env_logger 0.9.0",
+ "halfbrown",
+ "http-types",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_yaml",
+ "simd-json",
+ "surf",
+ "tide",
+ "tremor-common",
+ "tremor-pipeline",
+ "tremor-runtime",
+ "tremor-script",
+ "tremor-value",
+]
+
+[[package]]
+name = "tremor-cli"
+version = "0.12.4"
+dependencies = [
+ "anyhow",
+ "async-std",
+ "clap 3.2.6",
+ "clap_complete",
+ "criterion",
+ "difference",
+ "env_logger 0.9.0",
+ "error-chain",
+ "float-cmp",
+ "futures",
+ "globwalk",
+ "halfbrown",
+ "http-types",
+ "lalrpop",
+ "log",
+ "log4rs",
+ "matches",
+ "port_scanner",
+ "pretty_assertions",
+ "serde",
+ "serde_derive",
+ "serde_yaml",
+ "shell-words",
+ "signal-hook",
+ "signal-hook-async-std",
+ "simd-json",
+ "snmalloc-rs",
+ "surf",
+ "tch",
+ "temp-dir",
+ "termcolor",
+ "tremor-api",
+ "tremor-common",
+ "tremor-pipeline",
+ "tremor-runtime",
+ "tremor-script",
+ "tremor-value",
+ "url",
+]
+
+[[package]]
+name = "tremor-common"
+version = "0.12.4"
+dependencies = [
+ "async-std",
+ "beef",
+ "rand 0.8.5",
+ "simd-json",
+ "simd-json-derive",
+ "url",
+]
+
+[[package]]
+name = "tremor-influx"
+version = "0.12.4"
+dependencies = [
+ "criterion",
+ "lexical",
+ "pretty_assertions",
+ "simd-json",
+ "snmalloc-rs",
+ "value-trait",
+]
+
+[[package]]
+name = "tremor-kv"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a82ccffbb76310036aeda49e2e328c7dc9fac907f76e1929db3a04233b1f98ea"
+dependencies = [
+ "serde",
+ "simd-json",
+]
+
+[[package]]
+name = "tremor-otelapis"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c6cfab2469df1b6c86199844e008f549cc6b19ca59ef0b43b68b8a62f21d63b"
+dependencies = [
+ "async-channel",
+ "prost 0.9.0",
+ "tonic",
+ "tonic-build",
+]
+
+[[package]]
+name = "tremor-pipeline"
+version = "0.12.4"
+dependencies = [
+ "async-broadcast",
+ "async-std",
+ "base64 0.13.0",
+ "beef",
+ "criterion",
+ "error-chain",
+ "halfbrown",
+ "indexmap",
+ "lazy_static",
+ "log",
+ "lru",
+ "petgraph",
+ "rand 0.8.5",
+ "regex",
+ "rust-bert",
+ "serde",
+ "serde_derive",
+ "serde_yaml",
+ "simd-json",
+ "simd-json-derive",
+ "sled",
+ "tempfile",
+ "tremor-common",
+ "tremor-script",
+ "tremor-value",
+ "url",
+ "value-trait",
+ "window",
+ "xz2",
+]
+
+[[package]]
+name = "tremor-runtime"
+version = "0.12.4"
+dependencies = [
+ "anyhow",
+ "async-broadcast",
+ "async-compat",
+ "async-compression",
+ "async-std",
+ "async-std-resolver",
+ "async-stream",
+ "async-tls 0.11.0",
+ "async-trait",
+ "async-tungstenite",
+ "aws-config",
+ "aws-sdk-s3",
+ "aws-smithy-http",
+ "aws-types",
+ "base64 0.13.0",
+ "beef",
+ "bimap",
+ "byteorder",
+ "bytes 1.1.0",
+ "chrono",
+ "cron",
+ "csv",
+ "dashmap 5.3.4",
+ "either",
+ "elasticsearch",
+ "env_logger 0.9.0",
+ "error-chain",
+ "event-listener",
+ "file-mode",
+ "futures",
+ "glob",
+ "googapis",
+ "gouth",
+ "grok",
+ "halfbrown",
+ "hashbrown 0.12.1",
+ "hdrhistogram",
+ "hex",
+ "hostname",
+ "http",
+ "http-client 6.5.1",
+ "http-types",
+ "indexmap",
+ "lazy_static",
+ "libflate",
+ "log",
+ "lz4",
+ "mapr",
+ "matches",
+ "memchr",
+ "num_cpus",
+ "pin-project-lite 0.2.9",
+ "port_scanner",
+ "pretty_assertions",
+ "proptest",
+ "prost 0.10.4",
+ "prost-types",
+ "qwal",
+ "rand 0.8.5",
+ "rdkafka",
+ "rdkafka-sys",
+ "regex",
+ "reqwest",
+ "rmp-serde",
+ "rustls 0.19.1",
+ "rustls-native-certs 0.6.2",
+ "serde",
+ "serde_derive",
+ "serde_yaml",
+ "serenity",
+ "serial_test",
+ "signal-hook",
+ "signal-hook-async-std",
+ "simd-json",
+ "simd-json-derive",
+ "sled",
+ "smol",
+ "snap",
+ "surf",
+ "syslog_loose",
+ "tempfile",
+ "test-case",
+ "testcontainers",
+ "tide",
+ "tide-rustls",
+ "tonic",
+ "tremor-common",
+ "tremor-influx",
+ "tremor-otelapis",
+ "tremor-pipeline",
+ "tremor-script",
+ "tremor-value",
+ "tungstenite",
+ "url",
+ "uuid",
+ "value-trait",
+ "xz2",
+ "zstd",
+]
+
+[[package]]
+name = "tremor-script"
+version = "0.12.4"
+dependencies = [
+ "atty",
+ "base64 0.13.0",
+ "beef",
+ "byteorder",
+ "chrono",
+ "cidr-utils",
+ "codespan",
+ "criterion",
+ "dissect",
+ "distance",
+ "downcast-rs",
+ "error-chain",
+ "float-cmp",
+ "fxhash",
+ "glob",
+ "grok",
+ "halfbrown",
+ "hdrhistogram",
+ "hostname",
+ "jumphash",
+ "lalrpop",
+ "lalrpop-util",
+ "lazy_static",
+ "matches",
+ "percent-encoding",
+ "pretty_assertions",
+ "proptest",
+ "rand 0.8.5",
+ "regex",
+ "serde",
+ "serde_derive",
+ "sha2 0.10.2",
+ "simd-json",
+ "simd-json-derive",
+ "sketches-ddsketch",
+ "strip-ansi-escapes",
+ "tempfile",
+ "termcolor",
+ "tremor-common",
+ "tremor-influx",
+ "tremor-kv",
+ "tremor-value",
+ "unicode-xid",
+ "url",
+ "value-trait",
+ "xz2",
+]
+
+[[package]]
+name = "tremor-value"
+version = "0.12.4"
+dependencies = [
+ "base64 0.13.0",
+ "beef",
+ "float-cmp",
+ "getopts",
+ "halfbrown",
+ "proptest",
+ "serde",
+ "serde_json",
+ "simd-json",
+ "simd-json-derive",
+ "value-trait",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna",
+ "ipnet",
+ "lazy_static",
+ "log",
+ "rand 0.8.5",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig",
+ "lazy_static",
+ "log",
+ "lru-cache",
+ "parking_lot 0.12.1",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "tungstenite"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d96a2dea40e7570482f28eb57afbe42d97551905da6a9400acc5c328d24004f5"
+dependencies = [
+ "base64 0.13.0",
+ "byteorder",
+ "bytes 1.1.0",
+ "http",
+ "httparse",
+ "log",
+ "rand 0.8.5",
+ "rustls 0.20.6",
+ "sha-1",
+ "thiserror",
+ "url",
+ "utf-8",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "typemap"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6"
+dependencies = [
+ "unsafe-any",
+]
+
+[[package]]
+name = "typemap_rev"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed5b74f0a24b5454580a79abb6994393b09adf0ab8070f15827cb666255de155"
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-normalization-alignments"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
+
+[[package]]
+name = "universal-hash"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "unsafe-any"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f"
+dependencies = [
+ "traitobject",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68b90931029ab9b034b300b797048cf23723400aa757e8a2bfb9d748102f9821"
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372"
+
+[[package]]
+name = "uuid"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f"
+dependencies = [
+ "getrandom 0.2.6",
+]
+
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
+dependencies = [
+ "ctor",
+ "sval",
+ "version_check",
+]
+
+[[package]]
+name = "value-trait"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fe40a74a6f052b10668ef021c8c3ae56ab38269f9c0f401daa6ed36f96662fd"
+dependencies = [
+ "float-cmp",
+ "halfbrown",
+ "itoa 0.4.8",
+ "ryu",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "vte"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983"
+dependencies = [
+ "arrayvec",
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744"
+
+[[package]]
+name = "web-sys"
+version = "0.3.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739"
+dependencies = [
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f20dea7535251981a9670857150d571846545088359b28e4951d350bdaf179f"
+dependencies = [
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+dependencies = [
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf"
+dependencies = [
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "wepoll-ffi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "which"
+version = "3.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "which"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae"
+dependencies = [
+ "either",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "widestring"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983"
+
+[[package]]
+name = "wildmatch"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f44b95f62d34113cf558c93511ac93027e03e9c29a60dd0fd70e6e025c7270a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "window"
+version = "0.1.1"
+source = "git+https://github.com/tremor-rs/window.git?tag=v0.1.1#de8324d0fe9db0d6c011a5c0f2fc316f66f1c996"
+dependencies = [
+ "chrono",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xmlparser"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8"
+
+[[package]]
+name = "xz2"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
+dependencies = [
+ "lzma-sys",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07"
+
+[[package]]
+name = "zip"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815"
+dependencies = [
+ "byteorder",
+ "bzip2",
+ "crc32fast",
+ "flate2",
+ "thiserror",
+ "time 0.1.43",
+]
+
+[[package]]
+name = "zip-extensions"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a64c3c977bc3434ce2d4bcea8ad3c644672de0f2c402b72b9171ca80a8885d14"
+dependencies = [
+ "zip",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.1+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b"
+dependencies = [
+ "cc",
+ "libc",
+]
diff --git a/nixpkgs/pkgs/tools/misc/tremor-rs/default.nix b/nixpkgs/pkgs/tools/misc/tremor-rs/default.nix
new file mode 100644
index 000000000000..62ddf4e725e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tremor-rs/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, rustPlatform
+, pkg-config
+, cmake
+, openssl
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, Security
+, libiconv
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tremor";
+  version = "0.12.4";
+
+  src = fetchFromGitHub {
+    owner = "tremor-rs";
+    repo = "tremor-runtime";
+    rev = "v${version}";
+    sha256 = "sha256-+cN+nMDMX4rxjs1VQnSgjBvCsjxxAd13otp9qd21SYo=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "http-client-6.5.1" = "sha256-IfFZSiNqN4kiro8qSR5HV7e0U3nadS2vaYtBF+7UPVs=";
+      "qwal-0.1.0" = "sha256-PFdqRTNht77+/7GWzJm7/wESEaO3QjTTY+aRwpK9Ddo=";
+      "rdkafka-0.28.0" = "sha256-6dUGf5TRtiGz9OCxcrPmLdhtZoOd/aJR9VgNFQC2tnQ=";
+      "window-0.1.1" = "sha256-H6w1Y8ClhXISNYmALSRSwfREOaMzccNafygc6E44NYs=";
+    };
+  };
+
+  nativeBuildInputs = [ cmake pkg-config installShellFiles rustPlatform.bindgenHook ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ Security libiconv ];
+
+  # relax lints to fix an error caused by invalid macro_export
+  # error: `log_error` isn't a valid `#[macro_export]` argument
+  # note: `#[deny(invalid_macro_export_arguments)]` implied by `#[deny(warnings)]`
+  postPatch = ''
+    substituteInPlace src/lib.rs \
+      --replace '#![deny(' '#![warn('
+  '';
+
+  # TODO export TREMOR_PATH($out/lib) variable
+  postInstall = ''
+    # Copy the standard library to $out/lib
+    cp -r ${src}/tremor-script/lib/ $out
+
+    installShellCompletion --cmd tremor \
+      --bash <($out/bin/tremor completions bash) \
+      --fish <($out/bin/tremor completions fish) \
+      --zsh <($out/bin/tremor completions zsh)
+  '';
+
+  # OPENSSL_NO_VENDOR - If set, always find OpenSSL in the system, even if the vendored feature is enabled.
+  OPENSSL_NO_VENDOR = 1;
+
+  # needed for internal protobuf c wrapper library
+  PROTOC = "${protobuf}/bin/protoc";
+  PROTOC_INCLUDE = "${protobuf}/include";
+
+  env = lib.optionalAttrs (stdenv.system == "x86_64-darwin") {
+    RUSTFLAGS = "-C target-feature=+avx,+avx2,+sse4.2";
+  };
+
+  # tests failed on x86_64-darwin with SIGILL: illegal instruction
+  doCheck = !(stdenv.system == "x86_64-darwin");
+
+  checkFlags = [
+    # all try to make a network access
+    "--skip=connectors::tests::http::server::https_server_test"
+    "--skip=connectors::tests::tcp::client::tls_client"
+    "--skip=connectors::tests::udp::udp_no_bind"
+    "--skip=connectors::tests::ws::ws_client_bad_config"
+    "--skip=connectors::tests::ws::wss_server_binary_routing"
+    "--skip=connectors::tests::ws::wss_server_text_routing"
+    "--skip=connectors::utils::tls::tests::client_config"
+  ];
+
+  cargoBuildFlags = [ "-p tremor-cli" ];
+
+  meta = with lib; {
+    description = ''
+      Early stage event processing system for unstructured data with rich
+      support for structural pattern matching, filtering and transformation
+    '';
+    homepage = "https://www.tremor.rs/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ humancalico happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tremor-rs/ls.nix b/nixpkgs/pkgs/tools/misc/tremor-rs/ls.nix
new file mode 100644
index 000000000000..ea1b30b07e81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tremor-rs/ls.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tremor-language-server";
+  version = "0.12.4";
+
+  src = fetchFromGitHub {
+    owner = "tremor-rs";
+    repo = "tremor-language-server";
+    rev = "v${version}";
+    sha256 = "sha256-odYhpb3FkbIF1dc2DSpz3Lg+r39lhDKml9KGmbqJAtA=";
+  };
+
+  nativeBuildInputs = [ rustPlatform.bindgenHook ];
+
+  cargoSha256 = "sha256-/RKwmslhMm30QxviVV7HthDHSmTmaGZn1hdt6bNF3d4=";
+
+  meta = with lib; {
+    description = "Tremor Language Server (Trill)";
+    homepage = "https://www.tremor.rs/docs/next/getting-started/tooling";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/triehash/default.nix b/nixpkgs/pkgs/tools/misc/triehash/default.nix
new file mode 100644
index 000000000000..9e70db4114a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/triehash/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, perlPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "triehash";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "julian-klode";
+    repo = pname;
+    rev = "debian/0.3-3";
+    hash = "sha256-LxVcYj2WKHbhNu5x/DFkxQPOYrVkNvwiE/qcODq52Lc=";
+  };
+
+  nativeBuildInputs = [
+    perlPackages.perl
+  ];
+
+  postPatch = ''
+    patchShebangs triehash.pl
+  '';
+
+  dontConfigure = true;
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -d $out/bin $out/share/doc/${pname}/ $out/share/${pname}/
+    install triehash.pl $out/bin/triehash
+    install README.md $out/share/doc/${pname}/
+    cp -r tests/ $out/share/${pname}/tests/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/julian-klode/triehash";
+    description = "Order-preserving minimal perfect hash function generator";
+    license = with licenses; mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = perlPackages.perl.meta.platforms;
+    mainProgram = "triehash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trillian/default.nix b/nixpkgs/pkgs/tools/misc/trillian/default.nix
new file mode 100644
index 000000000000..f52c8f518dd7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trillian/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "trillian";
+  version = "1.6.0";
+  vendorHash = "sha256-tLhq6ILiKzFM1lIK0DbiIKsn1NWEI168BMaf/MOAtEo=";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YHwT+ddVRyHkmXkw2vROL4PS948pOMj9UwOtHorbTAQ=";
+  };
+
+  subPackages = [
+    "cmd/trillian_log_server"
+    "cmd/trillian_log_signer"
+    "cmd/createtree"
+    "cmd/deletetree"
+    "cmd/updatetree"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/google/trillian";
+    description = "A transparent, highly scalable and cryptographically verifiable data store";
+    license = [ licenses.asl20 ];
+    maintainers = [ maintainers.adisbladis ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttchat/default.nix b/nixpkgs/pkgs/tools/misc/ttchat/default.nix
new file mode 100644
index 000000000000..5aad1527df42
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttchat/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ttchat";
+  version = "0.1.10";
+
+  src = fetchFromGitHub {
+    owner = "atye";
+    repo = "ttchat";
+    rev = "v${version}";
+    hash = "sha256-Ezlqji/j6nyCzc1jrfB1MZR4ugKAa5D5CL6wfuP6PsY=";
+  };
+
+  vendorHash = "sha256-6GcbEGC1O+lcTO+GsaVXOO69yIHMPywXJy7OFX15/eI=";
+
+  meta = with lib; {
+    description = "Connect to a Twitch channel's chat from your terminal";
+    homepage = "https://github.com/atye/ttchat";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ wolfangaukang ];
+    mainProgram = "ttchat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix b/nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix
new file mode 100644
index 000000000000..2383a96eedfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, perl, freetype }:
+
+stdenv.mkDerivation rec {
+  pname = "ttf2pt1";
+  version = "3.4.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ttf2pt1/ttf2pt1-${version}.tgz";
+    sha256 = "1l718n4k4widx49xz7qrj4mybzb8q67kp2jw7f47604ips4654mf";
+  };
+
+  preConfigure = ''
+    find -type f | xargs sed -i 's@/usr/bin/perl@${perl}/bin/perl@'
+    mkdir -p $out
+    sed -e 's/chown/true/' \
+        -e 's/chgrp/true/' \
+        -e 's@^CFLAGS_FT =.*@CFLAGS_FT=-DUSE_FREETYPE -I${freetype.dev}/include/freetype2@' \
+        -i scripts/{inst_dir,inst_file} Makefile
+    makeFlags="INSTDIR=$out OWNER=`id -u`"
+  '';
+
+  buildInputs = [ freetype ];
+  nativeBuildInputs = [ perl ];
+
+  patches = ./gentoo-makefile.patch; # also contains the freetype patch
+
+  meta = {
+    description = "True Type to Postscript Type 3 converter, fpdf";
+    homepage = "https://ttf2pt1.sourceforge.net/index.html";
+    license = "ttf2pt1";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch b/nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch
new file mode 100644
index 000000000000..84854606131f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch
@@ -0,0 +1,98 @@
+diff -Naur ttf2pt1-3.4.4-orig/Makefile ttf2pt1-3.4.4/Makefile
+--- ttf2pt1-3.4.4-orig/Makefile	2007-07-15 20:06:50.000000000 -0600
++++ ttf2pt1-3.4.4/Makefile	2007-07-15 20:12:40.000000000 -0600
+@@ -9,7 +9,7 @@
+ #
+ # Use GNU C even if it's not the default compiler
+ #
+-#CC=gcc
++CC=gcc
+ #
+ # Use the standard ANSI C compiler on HP-UX even if it's not default
+ #
+@@ -60,18 +60,18 @@
+ # (if the include and lib directory do not match your installation,
+ # modify them), also uncomment LIBS_FT
+ #
+-#CFLAGS_FT = -DUSE_FREETYPE -I/usr/local/include/freetype2 -I/usr/local/include
++CFLAGS_FT = -DUSE_FREETYPE -I/usr/include/freetype2 -I/usr/include
+ 
+ # 
+ # The FreeType-2 library flags (disabled by default)
+ 
+-LIBS_FT=
++#LIBS_FT=
+ 
+ # To enable use of the FreeType-2 library
+ # (if the include and lib directory do not match your installation,
+ # modify them), also uncomment CFLAGS_FT
+ #
+-#LIBS_FT= -L/usr/local/lib -lfreetype
++LIBS_FT= -L/usr/lib -lfreetype
+ 
+ #
+ # The flags for C compiler for the Autotrace library (disabled by default). 
+@@ -120,18 +120,18 @@
+ # Installation-related stuff
+ # 
+ # The base dir for installation and subdirs in it
+-INSTDIR = /usr/local
++INSTDIR = /usr
+ # for binaries
+ BINDIR = $(INSTDIR)/bin
+ # for binaries of little general interest
+ LIBXDIR = $(INSTDIR)/libexec/ttf2pt1
+ # for scripts, maps/encodings etc.
+ SHAREDIR = $(INSTDIR)/share/ttf2pt1
+-MANDIR = $(INSTDIR)/man
++MANDIR = $(INSTDIR)/share/man
+ 
+ # owner and group of installed files
+ OWNER = root
+-GROUP = bin
++GROUP = root
+ 
+ # After you have configured the Makefile, comment out the following
+ # definition:
+@@ -244,17 +244,19 @@
+ 	chmod -R go-w $(SHAREDIR)
+ 	scripts/inst_file ttf2pt1 $(BINDIR)/ttf2pt1 $(OWNER) $(GROUP) 0755
+ 	[ -f $(BINDIR)/t1asm ] || scripts/inst_file t1asm $(LIBXDIR)/t1asm $(OWNER) $(GROUP) 0755
+-	sed 's|^TTF2PT1_BINDIR=$$|TTF2PT1_BINDIR=$(BINDIR)|;\
+-		s|^TTF2PT1_LIBXDIR=$$|TTF2PT1_LIBXDIR=$(LIBXDIR)|;\
+-		s|^TTF2PT1_SHAREDIR=$$|TTF2PT1_SHAREDIR=$(SHAREDIR)|;' <scripts/convert >cvt.tmp
++	sed -e 's|^TTF2PT1_BINDIR=$$|TTF2PT1_BINDIR=$(BINDIR)|' \
++		-e 's|^TTF2PT1_LIBXDIR=$$|TTF2PT1_LIBXDIR=$(LIBXDIR)|' \
++		-e 's|^TTF2PT1_SHAREDIR=$$|TTF2PT1_SHAREDIR=$(SHAREDIR)|' \
++		<scripts/convert >cvt.tmp
+ 	scripts/inst_file cvt.tmp $(BINDIR)/ttf2pt1_convert $(OWNER) $(GROUP) 0755
+ 	scripts/inst_file cvt.tmp $(SHAREDIR)/scripts/convert $(OWNER) $(GROUP) 0755
+ 	rm cvt.tmp
+ 	scripts/inst_file scripts/x2gs $(BINDIR)/ttf2pt1_x2gs $(OWNER) $(GROUP) 0755
+ 	for i in $(MANS1); do { \
+-		sed 's|TTF2PT1_BINDIR|$(BINDIR)|;\
+-			s|TTF2PT1_LIBXDIR|$(LIBXDIR)|;\
+-			s|TTF2PT1_SHAREDIR|$(SHAREDIR)|;' <$$i >$(MANDIR)/man1/$$i \
++		sed -e 's|TTF2PT1_BINDIR|$(BINDIR)|' \
++			-e 's|TTF2PT1_LIBXDIR|$(LIBXDIR)|' \
++			-e 's|TTF2PT1_SHAREDIR|$(SHAREDIR)|' \
++			<$$i >$(MANDIR)/man1/$$i \
+ 		&& chown $(OWNER) $(MANDIR)/man1/$$i \
+ 		&& chgrp $(GROUP) $(MANDIR)/man1/$$i \
+ 		&& chmod 0644 $(MANDIR)/man1/$$i \
+
+
+
+
+
+diff -Naur ttf2pt1-3.4.4-orig/ft.c ttf2pt1-3.4.4/ft.c
+--- ttf2pt1-3.4.4-orig/ft.c	2007-07-15 20:23:43.000000000 -0600
++++ ttf2pt1-3.4.4/ft.c	2007-07-15 20:24:02.000000000 -0600
+@@ -12,6 +12,7 @@
+ #include <stdlib.h>
+ #include <ctype.h>
+ #include <sys/types.h>
++#include <ft2build.h>
+ #include <freetype/freetype.h>
+ #include <freetype/ftglyph.h>
+ #include <freetype/ftsnames.h>
diff --git a/nixpkgs/pkgs/tools/misc/ttfautohint/default.nix b/nixpkgs/pkgs/tools/misc/ttfautohint/default.nix
new file mode 100644
index 000000000000..9d2036b97f78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttfautohint/default.nix
@@ -0,0 +1,49 @@
+{
+  stdenv, lib, fetchurl, pkg-config, autoreconfHook
+, freetype, harfbuzz, libiconv, qtbase
+, enableGUI ? true
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.8.3";
+  pname = "ttfautohint";
+
+  src = fetchurl {
+    url = "mirror://savannah/freetype/${pname}-${version}.tar.gz";
+    sha256 = "0zpqgihn3yh3v51ynxwr8asqrijvs4gv686clwv7bm8sawr4kfw7";
+  };
+
+  postAutoreconf = ''
+    substituteInPlace configure --replace "macx-g++" "macx-clang"
+  '';
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+
+  buildInputs = [ freetype harfbuzz libiconv ] ++ lib.optional enableGUI qtbase;
+
+  configureFlags = [ ''--with-qt=${if enableGUI then "${qtbase}/lib" else "no"}'' ];
+
+  # workaround https://github.com/NixOS/nixpkgs/issues/155458
+  preBuild = lib.optionalString stdenv.cc.isClang ''
+    rm version
+  '';
+
+  enableParallelBuilding = true;
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    description = "An automatic hinter for TrueType fonts";
+    longDescription = ''
+      A library and two programs which take a TrueType font as the
+      input, remove its bytecode instructions (if any), and return a
+      new font where all glyphs are bytecode hinted using the
+      information given by FreeType’s auto-hinting module.
+    '';
+    homepage = "https://www.freetype.org/ttfautohint";
+    license = licenses.gpl2Plus; # or the FreeType License (BSD + advertising clause)
+    maintainers = with maintainers; [ goibhniu ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch b/nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch
new file mode 100644
index 000000000000..e1da347c64f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch
@@ -0,0 +1,78 @@
+diff --git a/Makefile b/Makefile
+index e65b64c..52af5ed 100644
+--- a/Makefile
++++ b/Makefile
+@@ -41,8 +41,9 @@ all: ttmkfdir
+ .cpp.o:
+ 	libtool --mode=compile $(CXX) $(CXXFLAGS) -o $@ -c $^
+ 
++# ulgy hack for libtool to find .o files !!
+ ttmkfdir: ttmkfdir.o directory.o commandline.o ttf.o encoding.o parser.o builtin.o
+-	libtool --mode=link $(CXX) -o $@ $^ $(LDFLAGS)
++	libtool --mode=link $(CXX) -o $@ ./.libs/ttmkfdir.o ./.libs/directory.o ./.libs/commandline.o ./.libs/ttf.o ./.libs/encoding.o ./.libs/parser.o ./.libs/builtin.o $(LDFLAGS)
+ 
+ parser.cpp: encoding.l
+ 	    flex -i -8 -o$@ $<
+diff --git a/encoding.cpp b/encoding.cpp
+index 9035d35..b4e9733 100644
+--- a/encoding.cpp
++++ b/encoding.cpp
+@@ -2,7 +2,9 @@
+ #include <cstdio>
+ #include <cstdlib>
+ #include <cstring>
+-#include "freetype/freetype.h"
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include <freetype/ftsnames.h>
+ 
+ #include "ttmkfdir.h"
+ #include "encoding.h"
+diff --git a/encoding.h b/encoding.h
+index fc618bc..e01518f 100644
+--- a/encoding.h
++++ b/encoding.h
+@@ -6,7 +6,8 @@
+ #include <map>
+ #include <string>
+ 
+-#include "freetype/freetype.h"
++#include <ft2build.h>
++#include FT_FREETYPE_H
+ 
+ #include "util.h"
+ 
+diff --git a/ttf.cpp b/ttf.cpp
+index 1dda774..97b37f3 100644
+--- a/ttf.cpp
++++ b/ttf.cpp
+@@ -239,7 +239,7 @@ Face::FontFamilyName (void) const
+ 	for (i = 0; i < n; i++) {
+ 	    if ((fterror = FT_Get_Sfnt_Name (face, i, &NamePtr)) != FT_Err_Ok) {
+                     std::cout << "Warning: Can't SFNT name : " << FileName << "(" << fterror << ")" << std::endl;
+-	            return;
++	            return 0;
+             };
+             platform = NamePtr.platform_id;
+             encoding = NamePtr.encoding_id;
+diff --git a/ttf.h b/ttf.h
+index 4261ef8..c4a0f1f 100644
+--- a/ttf.h
++++ b/ttf.h
+@@ -3,13 +3,14 @@
+ #define TTF_H__
+ 
+ #include <string>
++#include <ft2build.h>
++#include FT_FREETYPE_H
+ #include "freetype/freetype.h"
+ #include "freetype/tttables.h"
+ #include "freetype/ftsnames.h"
+ #include "freetype/ttnameid.h"
+ #include "freetype/fterrors.h"
+-#include "freetype/ftmodule.h"
+-
++#include "freetype/ftmodapi.h"
+ #include "util.h"
+ #include "encoding.h"
+ 
diff --git a/nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix b/nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix
new file mode 100644
index 000000000000..6edf9cc4ef98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, freetype, libtool, flex, bison, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "ttf-mkfontdir";
+  version = "3.0.9-6";
+
+  src = fetchurl {
+    url = "http://mirror.fsf.org/trisquel/pool/main/t/ttmkfdir/ttmkfdir_3.0.9.orig.tar.gz";
+    sha256 = "0n6bmmndmp4c1myisvv7cby559gzgvwsw4rfw065a3f92m87jxiq";
+  };
+
+  # all the patches up from ttmkfdir-3.0.9/Makefile should be reviewed by someone
+  # who knows more about C/C++ ..
+  patches =
+    [ (fetchurl {
+        url = "http://mirror.fsf.org/trisquel/pool/main/t/ttmkfdir/ttmkfdir_3.0.9-6.diff.gz";
+        sha256 = "141kxaf2by8nf87hqyszaxi0n7nnmswr1nh2i5r5bsvxxmaj9633";
+      })
+
+      ./cstring.patch # also fixes some other compilation issues (freetype includes)
+    ];
+
+  # cross-compilation fixes:
+  # - fix libtool, the reason it does not work in nativeBuildInputs is complicated
+  #   see https://github.com/NixOS/nixpkgs/pull/192878 for more info
+  # - freetype-config doesn't properly support cross-compilation, but is just a thin
+  #   wrapper around pkg-config anyways
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "libtool " "${libtool}/bin/libtool --tag=CXX " \
+      --replace "freetype-config" "${stdenv.cc.targetPrefix}pkg-config freetype2"
+  '';
+
+  makeFlags = [ "DESTDIR=${placeholder "out"}" "BINDIR=/bin" "CXX=${stdenv.cc.targetPrefix}c++" ];
+
+  nativeBuildInputs = [ flex bison pkg-config ];
+  buildInputs = [ freetype ];
+
+  meta = {
+    description = "Create fonts.dir for TTF font directory";
+    platforms = lib.platforms.linux;
+    mainProgram = "ttmkfdir";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttwatch/default.nix b/nixpkgs/pkgs/tools/misc/ttwatch/default.nix
new file mode 100644
index 000000000000..273d34ffdb8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttwatch/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub
+, cmake, perl, pkg-config
+, openssl, curl, libusb1, protobufc
+, enableUnsafe ? false }:
+
+stdenv.mkDerivation {
+  pname = "ttwatch";
+  version = "2020-06-24";
+
+  src = fetchFromGitHub {
+    owner = "ryanbinns";
+    repo = "ttwatch";
+    rev = "260aff5869fd577d788d86b546399353d9ff72c1";
+    sha256 = "0yd2hs9d03gfvwm1vywpg2qga6x5c74zrj665wf9aa8gmn96hv8r";
+  };
+
+  nativeBuildInputs = [ cmake perl pkg-config ];
+  buildInputs = [ openssl curl libusb1 protobufc ];
+
+  cmakeFlags = lib.optionals enableUnsafe [ "-Dunsafe=on" ];
+
+  preFixup = ''
+    chmod +x $out/bin/ttbin2mysports
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ryanbinns/ttwatch";
+    description = "Linux TomTom GPS Watch Utilities";
+    maintainers = with maintainers; [ dotlambda ];
+    license = licenses.mit;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tty-clock/default.nix b/nixpkgs/pkgs/tools/misc/tty-clock/default.nix
new file mode 100644
index 000000000000..32701caa64de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tty-clock/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ncurses, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "tty-clock";
+  version = "2.3+unstable=2021-04-07";
+
+  src = fetchFromGitHub {
+    owner = "xorg62";
+    repo = "tty-clock";
+    # Use unreleased version to pull in fix for ncurses-6.3
+    rev = "9e00c32098524c30dac4dab701f7e33f8bc7c880";
+    sha256 = "14jrzz06jr29887bxgad1x6kd26c2fnqrc26864wqm3838fpcqw0";
+  };
+
+  patches = [
+    # Pull upstream patch pending inclusion fir more ncurses-6.3 fixes:
+    #  https://github.com/xorg62/tty-clock/pull/100
+    (fetchpatch {
+      name = "ncurses-6.2.patch";
+      url = "https://github.com/xorg62/tty-clock/commit/4cfd73080da1964557484da620c401745d73881c.patch";
+      sha256 = "13pj1v6yrfc4vynsa746974kixfxxsy2jzzpl73c8bp7msr9d3md";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://github.com/xorg62/tty-clock";
+    license = licenses.free;
+    description = "Digital clock in ncurses";
+    platforms = platforms.all;
+    maintainers = [ maintainers.koral ];
+    mainProgram = "tty-clock";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttygif/default.nix b/nixpkgs/pkgs/tools/misc/ttygif/default.nix
new file mode 100644
index 000000000000..689138186cb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttygif/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, imagemagick, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "ttygif";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "icholy";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-GsMeVR2wNivQguZ6B/0v39Td9VGHg+m3RtAG9DYkNmU=";
+  };
+
+  makeFlags = [ "CC:=$(CC)" "PREFIX=${placeholder "out"}" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  postInstall = ''
+    wrapProgram $out/bin/ttygif \
+      --prefix PATH : ${lib.makeBinPath [ imagemagick xorg.xwd ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/icholy/ttygif";
+    description = "Convert terminal recordings to animated gifs";
+    platforms = platforms.unix;
+    license = licenses.mit;
+    maintainers = with maintainers; [ moaxcp ];
+    mainProgram = "ttygif";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttylog/default.nix b/nixpkgs/pkgs/tools/misc/ttylog/default.nix
new file mode 100644
index 000000000000..ca90481ba9e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttylog/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "ttylog";
+  version = "0.31";
+
+  src = fetchFromGitHub {
+    owner = "rocasa";
+    repo = "ttylog";
+    rev = version;
+    sha256 = "0c746bpjpa77vsr88fxk8h1803p5np1di1mpjf4jy5bv5x3zwm07";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    homepage = "https://ttylog.sourceforge.net";
+    description = "Simple serial port logger";
+    longDescription = ''
+      A serial port logger which can be used to print everything to stdout
+      that comes from a serial device.
+    '';
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    mainProgram = "ttylog";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttyplot/default.nix b/nixpkgs/pkgs/tools/misc/ttyplot/default.nix
new file mode 100644
index 000000000000..fc53f0b8997a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttyplot/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "ttyplot";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "tenox7";
+    repo = "ttyplot";
+    rev = version;
+    hash = "sha256-HBJvTDhp1CA96gRU2Q+lMxcFaZ+txXcmNb8Cg1BFiH4=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    ncurses
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A simple general purpose plotting utility for tty with data input from stdin";
+    homepage = "https://github.com/tenox7/ttyplot";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ lassulus ];
+    mainProgram = "ttyplot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/turbo/default.nix b/nixpkgs/pkgs/tools/misc/turbo/default.nix
new file mode 100644
index 000000000000..c891ad5d0da2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/turbo/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, protobuf
+, rustPlatform
+, pkg-config
+, openssl
+, extra-cmake-modules
+, fontconfig
+, rust-jemalloc-sys
+, testers
+, turbo
+, nix-update-script
+, IOKit
+, CoreServices
+, CoreFoundation
+, capnproto
+}:
+rustPlatform.buildRustPackage rec{
+  pname = "turbo";
+  version = "1.11.3";
+  src = fetchFromGitHub {
+    owner = "vercel";
+    repo = "turbo";
+    rev = "v${version}";
+    hash = "sha256-hjJXbGct9ZmriKdVjB7gwfmFsV1Tv57V7DfUMFZ8Xv0=";
+  };
+  cargoBuildFlags = [
+    "--package"
+    "turbo"
+  ];
+  RELEASE_TURBO_CLI = "true";
+
+  cargoHash = "sha256-bAXO4Lqv4ibo+fz3679MjNgP2MMY8TbxhG0+DRy0xcA=";
+
+  RUSTC_BOOTSTRAP = 1;
+  nativeBuildInputs = [
+    pkg-config
+    extra-cmake-modules
+    protobuf
+    capnproto
+  ];
+  buildInputs = [
+    openssl
+    fontconfig
+    rust-jemalloc-sys
+  ] ++ lib.optionals stdenv.isDarwin [
+      IOKit
+      CoreServices
+      CoreFoundation
+  ];
+
+  # Browser tests time out with chromium and google-chrome
+  doCheck = false;
+
+  passthru = {
+    updateScript = nix-update-script {
+      extraArgs = [ "--version-regex" "^\d+\.\d+\.\d+$" ];
+    };
+    tests.version = testers.testVersion { package = turbo; };
+  };
+
+  meta = with lib; {
+    description = "High-performance build system for JavaScript and TypeScript codebases";
+    homepage = "https://turbo.build/";
+    maintainers = with maintainers; [ dlip ];
+    license = licenses.mpl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tvnamer/default.nix b/nixpkgs/pkgs/tools/misc/tvnamer/default.nix
new file mode 100644
index 000000000000..d1ddb319dc19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tvnamer/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+let
+  python' = python3.override {
+    packageOverrides = final: prev: rec {
+      # tvdb_api v3.1.0 has a hard requirement on requests-cache < 0.6
+      requests-cache = prev.requests-cache.overridePythonAttrs (oldAttrs: rec {
+        version = "0.5.2";
+        src = fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "sha256-gTAjJpaGBF+OAeIonMHn6a5asi3dHihJqQk6s6tycOs=";
+        };
+
+        nativeBuildInputs = with final; [
+          setuptools
+        ];
+
+        # too many changes have been made to requests-cache based on version 0.6 so
+        # simply disable tests
+        doCheck = false;
+      });
+    };
+  };
+
+  pypkgs = python'.pkgs;
+
+in
+pypkgs.buildPythonApplication rec {
+  pname = "tvnamer";
+  version = "3.0.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "dc2ea8188df6ac56439343630466b874c57756dd0b2538dd8e7905048f425f04";
+  };
+
+  propagatedBuildInputs = with pypkgs; [ tvdb-api ];
+
+  # no tests from pypi
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatic TV episode file renamer, uses data from thetvdb.com via tvdb_api";
+    homepage = "https://github.com/dbr/tvnamer";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "tvnamer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twitch-dl/default.nix b/nixpkgs/pkgs/tools/misc/twitch-dl/default.nix
new file mode 100644
index 000000000000..15a3e262e575
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twitch-dl/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+, installShellFiles
+, scdoc
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "twitch-dl";
+  version = "2.1.4";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ihabunek";
+    repo = "twitch-dl";
+    rev = "refs/tags/${version}";
+    hash = "sha256-0mITsNQQWG6lVQSxnDdU4ta548AR9q+zs/E96uwtG/U=";
+  };
+
+  nativeCheckInputs = [
+    installShellFiles
+    python3Packages.pytestCheckHook
+    scdoc
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    httpx
+    m3u8
+  ];
+
+  disabledTestPaths = [
+    # Requires network access
+    "tests/test_api.py"
+  ];
+
+  pythonImportsCheck = [
+    "twitchdl"
+  ];
+
+  postInstall = ''
+    scdoc < twitch-dl.1.scd > twitch-dl.1
+    installManPage twitch-dl.1
+  '';
+
+  meta = with lib; {
+    description = "CLI tool for downloading videos from Twitch";
+    homepage = "https://github.com/ihabunek/twitch-dl";
+    changelog = "https://github.com/ihabunek/twitch-dl/blob/${version}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ marsam ];
+    mainProgram = "twitch-dl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twm/default.nix b/nixpkgs/pkgs/tools/misc/twm/default.nix
new file mode 100644
index 000000000000..3e15aa256418
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twm/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, rustPlatform
+, openssl
+, pkg-config
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "twm";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "vinnymeller";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-gvo5+lZNe5QOHNI4nrPbCR65D+VFf/anmLVdu5RXJiY=";
+  };
+
+  cargoHash = "sha256-5+1B+SbrIrswGjtNLlwbtLEhARMZNs75DFK8wQI2O0M=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A customizable workspace manager for tmux";
+    homepage = "https://github.com/vinnymeller/twm";
+    changelog = "https://github.com/vinnymeller/twm/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vinnymeller ];
+    mainProgram = "twm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twspace-crawler/default.nix b/nixpkgs/pkgs/tools/misc/twspace-crawler/default.nix
new file mode 100644
index 000000000000..34a1c72e2048
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twspace-crawler/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildNpmPackage, fetchFromGitHub }:
+
+buildNpmPackage rec {
+  pname = "twspace-crawler";
+  version = "1.12.9";
+
+  src = fetchFromGitHub {
+    owner = "HitomaruKonpaku";
+    repo = "twspace-crawler";
+    rev = "7875e534b257d4ba5a0cf8179a4772c87005fee6"; # version not tagged
+    hash = "sha256-pA31ak0Rwy4Rc1fVz+4QV1lcTYGUmPOd61FtLQGN1ek=";
+  };
+
+  npmDepsHash = "sha256-2fsYeSZYzadLmikUJbuHE4XMAp38jTZvtRo9xgaZVzg=";
+
+  meta = with lib; {
+    description = "Script to monitor & download Twitter Spaces 24/7";
+    homepage = "https://github.com/HitomaruKonpaku/twspace-crawler";
+    changelog = "https://github.com/HitomaruKonpaku/twspace-crawler/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.isc;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "twspace-crawler";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twspace-dl/default.nix b/nixpkgs/pkgs/tools/misc/twspace-dl/default.nix
new file mode 100644
index 000000000000..48f760b0e0f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twspace-dl/default.nix
@@ -0,0 +1,34 @@
+{ lib, python3Packages, fetchPypi, ffmpeg-headless }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "twspace-dl";
+  version = "2023.7.24.1";
+
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "twspace_dl";
+    sha256 = "sha256-Oq9k5Nfixf1vihhna7g3ZkqCwEtCdnvlbxIuOnGVoKE=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ poetry-core ];
+
+  propagatedBuildInputs = with python3Packages; [
+    mutagen
+    requests
+  ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ ffmpeg-headless ]}" ];
+
+  pythonImportsCheck = [ "twspace_dl" ];
+
+  meta = with lib; {
+    description = "A python module to download twitter spaces";
+    homepage = "https://github.com/HoloArchivists/twspace-dl";
+    changelog = "https://github.com/HoloArchivists/twspace-dl/releases/tag/${version}";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ marsam ];
+    mainProgram = "twspace_dl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twurl/Gemfile b/nixpkgs/pkgs/tools/misc/twurl/Gemfile
new file mode 100644
index 000000000000..55b6e9f5650b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twurl/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem 'twurl'
diff --git a/nixpkgs/pkgs/tools/misc/twurl/Gemfile.lock b/nixpkgs/pkgs/tools/misc/twurl/Gemfile.lock
new file mode 100644
index 000000000000..d29268e656dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twurl/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    oauth (0.5.6)
+    twurl (0.9.6)
+      oauth (~> 0.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  twurl
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/twurl/default.nix b/nixpkgs/pkgs/tools/misc/twurl/default.nix
new file mode 100644
index 000000000000..ff332e88de91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twurl/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "twurl";
+  gemdir = ./.;
+  exes = [ "twurl" ];
+
+  passthru.updateScript = bundlerUpdateScript "twurl";
+
+  meta = with lib; {
+    description = "OAuth-enabled curl for the Twitter API";
+    homepage    = "https://github.com/twitter/twurl";
+    license     = "MIT";
+    maintainers = with maintainers; [ brecht ];
+    platforms   = platforms.unix;
+    mainProgram = "twurl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twurl/gemset.nix b/nixpkgs/pkgs/tools/misc/twurl/gemset.nix
new file mode 100644
index 000000000000..a1a2ed835d3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twurl/gemset.nix
@@ -0,0 +1,23 @@
+{
+  oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zwd6v39yqfdrpg1p3d9jvzs9ljg55ana2p06m0l7qn5w0lgx1a0";
+      type = "gem";
+    };
+    version = "0.5.6";
+  };
+  twurl = {
+    dependencies = ["oauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jgsxa0cnkajnsxxlsrgl2wq3m7khaxvr0rcir4vwbc1hx210700";
+      type = "gem";
+    };
+    version = "0.9.6";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/txt2man/default.nix b/nixpkgs/pkgs/tools/misc/txt2man/default.nix
new file mode 100644
index 000000000000..a6ebcb288216
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/txt2man/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, coreutils, gawk }:
+
+stdenv.mkDerivation rec {
+  pname = "txt2man";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "mvertes";
+    repo = "txt2man";
+    rev = "${pname}-${version}";
+    hash = "sha256-Aqi5PNNaaM/tr9A/7vKeafYKYIs/kHbwHzE7+R/9r9s=";
+  };
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+  ];
+
+  postPatch = ''
+    for f in bookman src2man txt2man; do
+      substituteInPlace $f \
+        --replace "gawk" "${gawk}/bin/gawk" \
+        --replace "(date" "(${coreutils}/bin/date" \
+        --replace "=cat" "=${coreutils}/bin/cat" \
+        --replace "cat <<" "${coreutils}/bin/cat <<" \
+        --replace "expand" "${coreutils}/bin/expand" \
+        --replace "(uname" "(${coreutils}/bin/uname"
+    done
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    # gawk and coreutils are part of stdenv but will not
+    # necessarily be in PATH at runtime.
+    sh -c 'unset PATH; printf hello | ./txt2man'
+  '';
+
+  meta = with lib; {
+    description = "Convert flat ASCII text to man page format";
+    homepage = "http://mvertes.free.fr/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/txtw/default.nix b/nixpkgs/pkgs/tools/misc/txtw/default.nix
new file mode 100644
index 000000000000..9f8783491b11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/txtw/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, cairo }:
+
+stdenv.mkDerivation rec {
+  version = "0.4";
+  pname = "txtw";
+
+  src = fetchFromGitHub {
+    owner = "baskerville";
+    repo = "txtw";
+    rev = version;
+    sha256 = "17yjdgdd080fsf5r1wzgk6vvzwsa15gcwc9z64v7x588jm1ryy3k";
+  };
+
+  buildInputs = [ cairo ];
+
+  prePatch = ''sed -i "s@/usr/local@$out@" Makefile'';
+
+  meta = with lib; {
+    description = "Compute text widths";
+    homepage = "https://github.com/baskerville/txtw";
+    maintainers = with maintainers; [ lihop ];
+    license = licenses.unlicense;
+    platforms = platforms.linux;
+    mainProgram = "txtw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tydra/default.nix b/nixpkgs/pkgs/tools/misc/tydra/default.nix
new file mode 100644
index 000000000000..551519695c43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tydra/default.nix
@@ -0,0 +1,35 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tydra";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "Mange";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1kvyski3qy2lwlpipynq894i0g9x2j4a1iy2mgdwfibfyfkv2jnm";
+  };
+
+  cargoSha256 = "0handd5vxxvmlllzxhvwgadl4r7yc78f068r8jryprpap31azg3a";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage doc/{tydra.1,tydra-actions.5}
+
+    $out/bin/tydra --generate-completions bash > tydra.bash
+    $out/bin/tydra --generate-completions fish > tydra.fish
+    $out/bin/tydra --generate-completions zsh > _tydra
+
+    installShellCompletion tydra.{bash,fish} _tydra
+  '';
+
+  meta = with lib; {
+    description = "Shortcut menu-based task runner, inspired by Emacs Hydra";
+    homepage = "https://github.com/Mange/tydra";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "tydra";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tz/default.nix b/nixpkgs/pkgs/tools/misc/tz/default.nix
new file mode 100644
index 000000000000..4059125353f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tz/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tz";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "oz";
+    repo = "tz";
+    rev = "v${version}";
+    sha256 = "sha256-Mnb0GdJ9dgaUanWBP5JOo6++6MfrUgncBRp4NIbhxf0=";
+  };
+
+  vendorHash = "sha256-lcCra4LyebkmelvBs0Dd2mn6R64Q5MaUWc5AP8V9pec=";
+
+  meta = with lib; {
+    description = "A time zone helper";
+    homepage = "https://github.com/oz/tz";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ siraben ];
+    mainProgram = "tz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uair/default.nix b/nixpkgs/pkgs/tools/misc/uair/default.nix
new file mode 100644
index 000000000000..5d154ef82d80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uair/default.nix
@@ -0,0 +1,37 @@
+{ fetchFromGitHub
+, installShellFiles
+, lib
+, rustPlatform
+, scdoc
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "uair";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "metent";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-cxSNBxs6ixbjWMUYzOnwI+vavkfyaQx3/OmVdTCr7M0=";
+  };
+
+  cargoHash = "sha256-cDIF4RvJ7K6t18GPgiRV6NDoD/x3II/3wCHW3KK2/os=";
+
+  nativeBuildInputs = [ installShellFiles scdoc ];
+
+  preFixup = ''
+    scdoc < docs/uair.1.scd > docs/uair.1
+    scdoc < docs/uair.5.scd > docs/uair.5
+    scdoc < docs/uairctl.1.scd > docs/uairctl.1
+
+    installManPage docs/*.[1-9]
+  '';
+
+  meta = with lib; {
+    description = "An extensible pomodoro timer";
+    homepage = "https://github.com/metent/uair";
+    license = licenses.mit;
+    maintainers = with maintainers; [ thled ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ugs/default.nix b/nixpkgs/pkgs/tools/misc/ugs/default.nix
new file mode 100644
index 000000000000..99fba8bcfe93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ugs/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, copyDesktopItems
+, makeDesktopItem
+, makeWrapper
+, jre
+, fetchzip
+}:
+let
+  desktopItem = makeDesktopItem {
+    name = "ugs";
+    exec = "ugs";
+    comment = "A cross-platform G-Code sender for GRBL, Smoothieware, TinyG and G2core.";
+    desktopName = "Universal-G-Code-Sender";
+    categories = [ "Game" ];
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "ugs";
+  version = "2.1.5";
+
+  src = fetchzip {
+    url = "https://github.com/winder/Universal-G-Code-Sender/releases/download/v${version}/UniversalGcodeSender.zip";
+    hash = "sha256-StXEtDJ3UjTWgiQQ8HQtPcUENQPosdHis1eo81Jf96M=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    makeWrapper ${jre}/bin/java $out/bin/ugs \
+      --prefix PATH : ${lib.makeBinPath [ jre ]} \
+      --add-flags "-jar ${src}/UniversalGcodeSender.jar"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    description = "A cross-platform G-Code sender for GRBL, Smoothieware, TinyG and G2core";
+    homepage = "https://github.com/winder/Universal-G-Code-Sender";
+    maintainers = with maintainers; [ matthewcroughan ];
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    mainProgram = "ugs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ugtrain/default.nix b/nixpkgs/pkgs/tools/misc/ugtrain/default.nix
new file mode 100644
index 000000000000..e92170ad595a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ugtrain/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, scanmem
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.4.1";
+  pname = "ugtrain";
+
+  src = fetchFromGitHub {
+    owner  = "ugtrain";
+    repo   = "ugtrain";
+    rev    = "v${version}";
+    sha256 = "0pw9lm8y83mda7x39874ax2147818h1wcibi83pd2x4rp1hjbkkn";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config scanmem ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ugtrain/ugtrain";
+    description = "The Universal Elite Game Trainer for CLI (Linux game trainer research project)";
+    maintainers = with maintainers; [ mtrsk ];
+    platforms = platforms.linux;
+    license = licenses.gpl3Only;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uhubctl/default.nix b/nixpkgs/pkgs/tools/misc/uhubctl/default.nix
new file mode 100644
index 000000000000..e148e03f820e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uhubctl/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "uhubctl";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "mvp";
+    repo = "uhubctl";
+    rev = "v${version}";
+    sha256 = "sha256-Rt9hTT0Tn8v+J1XqZm8iXTTY4nKow2qjRPNmNCiWNoY=";
+  };
+
+  buildInputs = [ libusb1 ];
+
+  installFlags = [ "prefix=${placeholder "out"}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mvp/uhubctl";
+    description = "Utility to control USB power per-port on smart USB hubs";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ prusnak ];
+    platforms = with platforms; linux ++ darwin;
+    mainProgram = "uhubctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ulid/default.nix b/nixpkgs/pkgs/tools/misc/ulid/default.nix
new file mode 100644
index 000000000000..f2ff23addfe7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ulid/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ulid";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "oklog";
+    repo = "ulid";
+    rev = "v${version}";
+    hash = "sha256-/oQPgcO1xKbHXutxz0WPfIduShPrfH1l+7/mj8jLst8=";
+  };
+
+  vendorHash = "sha256-s1YkEwFxE1zpUUCgwOAl8i6/9HB2rcGG+4kqnixTit0=";
+
+  ldflags = [ "-s" "-w" ];
+
+  checkFlags = [
+    # skip flaky test
+    "-skip=TestMonotonicSafe"
+  ];
+
+  meta = with lib; {
+    description = "Universally Unique Lexicographically Sortable Identifier (ULID) in Go";
+    homepage = "https://github.com/oklog/ulid";
+    changelog = "https://github.com/oklog/ulid/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "ulid";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix b/nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix
new file mode 100644
index 000000000000..990547291f61
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix
@@ -0,0 +1,45 @@
+{ lib, mkDerivation, fetchFromGitHub
+, qmake, qtbase, pkg-config, taglib, libbass, libbass_fx }:
+
+# TODO: get rid of (unfree) libbass
+# issue:https://github.com/UltraStar-Deluxe/UltraStar-Creator/issues/3
+# there’s a WIP branch here:
+# https://github.com/UltraStar-Deluxe/UltraStar-Creator/commits/BASS_removed
+
+mkDerivation {
+  pname = "ultrastar-creator";
+  version = "2019-04-23";
+
+  src = fetchFromGitHub {
+    owner = "UltraStar-Deluxe";
+    repo = "UltraStar-Creator";
+    rev = "36583b4e482b68f6aa949e77ef2744776aa587b1";
+    sha256 = "1rzz04l7s7pxj74xam0cxlq569lfpgig35kpbsplq531d4007pc9";
+  };
+
+  postPatch = with lib; ''
+    # we don’t want prebuild binaries checked into version control!
+    rm -rf lib include
+    sed -e "s|DESTDIR =.*$|DESTDIR = $out/bin|" \
+        -e 's|-L".*unix"||' \
+        -e "/QMAKE_POST_LINK/d" \
+        -e "s|../include/bass|${getLib libbass}/include|g" \
+        -e "s|../include/bass_fx|${getLib libbass_fx}/include|g" \
+        -e "s|../include/taglib|${getLib taglib}/include|g" \
+        -i src/UltraStar-Creator.pro
+  '';
+
+  preConfigure = ''
+    cd src
+  '';
+
+  nativeBuildInputs = [ qmake pkg-config ];
+  buildInputs = [ qtbase taglib libbass libbass_fx ];
+
+  meta = with lib; {
+    description = "Ultrastar karaoke song creation tool";
+    homepage = "https://github.com/UltraStar-Deluxe/UltraStar-Creator";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix b/nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix
new file mode 100644
index 000000000000..d5dd47e0f669
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix
@@ -0,0 +1,122 @@
+{ lib, mkDerivation, fetchFromGitHub, pkg-config, symlinkJoin, qmake, diffPlugins
+, qtbase, qtmultimedia, taglib, libmediainfo, libzen, libbass }:
+
+let
+  version = "2019-04-23";
+  rev = "ef4524e2239ddbb60f26e05bfba1f4f28cb7b54f";
+  sha256 = "0dl2qp686vbs160b3i9qypb7sv37phy2wn21kgzljbk3wnci3yv4";
+  buildInputs = [ qtbase qtmultimedia taglib libmediainfo libzen libbass ];
+
+  plugins = [
+    "albumartex"
+    "amazon"
+    "audiotag"
+    "cleanup"
+    "freecovers"
+    "lyric"
+    "preparatory"
+    "rename"
+ ];
+
+  patchedSrc =
+    let src = fetchFromGitHub {
+      owner = "UltraStar-Deluxe";
+      repo = "UltraStar-Manager";
+      inherit rev sha256;
+    };
+    in mkDerivation {
+      name = "${src.name}-patched";
+      inherit src;
+
+      dontInstall = true;
+
+      patchPhase = with lib; ''
+        # we don’t want prebuild binaries checked into version control!
+        rm -rf lib include
+
+        # fix up main project file
+        sed -e 's|-L.*unix.*lbass.*$|-lbass|' \
+            -e "/QMAKE_POST_LINK/d" \
+            -e "s|../include/bass|${getLib libbass}/include|g" \
+            -e "s|../include/taglib|${getLib taglib}/include|g" \
+            -e "s|../include/mediainfo|${getLib libmediainfo}/include|g" \
+            -i src/UltraStar-Manager.pro
+
+        # if more plugins start depending on ../../../include,
+        # it should be abstracted out for all .pro files
+        sed -e "s|../../../include/taglib|${getLib taglib}/include/taglib|g" \
+            -i src/plugins/audiotag/audiotag.pro
+
+        mkdir $out
+        mv * $out
+      '';
+    };
+
+  patchApplicationPath = file: path: ''
+    sed -e "s|QCore.*applicationDirPath()|QString(\"${path}\")|" -i "${file}"
+  '';
+
+  buildPlugin = name: mkDerivation {
+    name = "ultrastar-manager-${name}-plugin-${version}";
+    src = patchedSrc;
+
+    buildInputs = [ qmake ] ++ buildInputs;
+
+    postPatch = ''
+      sed -e "s|DESTDIR = .*$|DESTDIR = $out|" \
+          -i src/plugins/${name}/${name}.pro
+
+      # plugins use the application’s binary folder (wtf)
+      for f in $(grep -lr "QCoreApplication::applicationDirPath" src/plugins); do
+        ${patchApplicationPath "$f" "\$out"}
+      done
+
+    '';
+    preConfigure = ''
+      cd src/plugins/${name}
+    '';
+  };
+
+  builtPlugins =
+    symlinkJoin {
+      name = "ultrastar-manager-plugins-${version}";
+      paths = map buildPlugin plugins;
+    };
+
+in mkDerivation {
+  pname = "ultrastar-manager";
+  inherit version;
+  src = patchedSrc;
+
+  postPatch = ''
+    sed -e "s|DESTDIR =.*$|DESTDIR = $out/bin|" \
+        -i src/UltraStar-Manager.pro
+    # patch plugin manager to point to the collected plugin folder
+    ${patchApplicationPath "src/plugins/QUPluginManager.cpp" builtPlugins}
+  '';
+
+  buildPhase = ''
+    find -path './src/plugins/*' -prune -type d -print0 \
+      | xargs -0 -i'{}' basename '{}' \
+      | sed -e '/shared/d' \
+      > found_plugins
+    ${diffPlugins plugins "found_plugins"}
+
+    cd src && qmake && make
+  '';
+
+  # is not installPhase so that qt post hooks can run
+  preInstall = ''
+    make install
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  inherit buildInputs;
+
+  meta = with lib; {
+    description = "Ultrastar karaoke song manager";
+    homepage = "https://github.com/UltraStar-Deluxe/UltraStar-Manager";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/umlet/default.nix b/nixpkgs/pkgs/tools/misc/umlet/default.nix
new file mode 100644
index 000000000000..b9d3e5d31538
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/umlet/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, jre, unzip, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "umlet";
+  version = "15.1.0";
+
+  src = fetchurl {
+    # NOTE: The download URL breaks consistency - sometimes w/ patch versions
+    # and sometimes w/o. Furthermore, for 15.1.0 they moved everything to the
+    # new /download subfolder.
+    # As releases are very rarely, just modify it by hand..
+    url = "https://www.umlet.com/download/umlet_15_1/umlet-standalone-15.1.zip";
+    hash = "sha256-M6oVWbOmPBTygS+TFkY9PWucFfYLD33suNUuWpFLMIo=";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/lib"
+
+    cp -R * "$out/lib"
+
+    cat > "$out/bin/umlet" << EOF
+    #!${runtimeShell}
+
+    programDir="$out/lib"
+    cd "\$programDir"
+    if [ \$# -eq 1 ]
+     then "${jre}/bin/java" -jar "\$programDir/umlet.jar" -filename="\$1"
+     else "${jre}/bin/java" -jar "\$programDir/umlet.jar" "\$@"
+    fi
+
+    EOF
+    chmod a+x "$out/bin/umlet"
+  '';
+
+  meta = with lib; {
+    description = "Free, open-source UML tool with a simple user interface";
+    longDescription = ''
+      UMLet is a free, open-source UML tool with a simple user interface:
+      draw UML diagrams fast, produce sequence and activity diagrams from
+      plain text, export diagrams to eps, pdf, jpg, svg, and clipboard,
+      share diagrams using Eclipse, and create new, custom UML elements.
+      UMLet runs stand-alone or as Eclipse plug-in on Windows, macOS and
+      Linux.
+    '';
+    homepage = "https://www.umlet.com";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ oxzi ];
+    platforms = platforms.all;
+    mainProgram = "umlet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix b/nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix
new file mode 100644
index 000000000000..81db6449eb14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub,
+  libev, libX11, libXext, libXi, libXfixes,
+  pkg-config, asciidoc, libxslt, docbook_xsl }:
+
+stdenv.mkDerivation rec {
+  pname = "unclutter-xfixes";
+  version = "1.6";
+
+  src = fetchFromGitHub {
+    owner = "Airblader";
+    repo = "unclutter-xfixes";
+    rev = "v${version}";
+    sha256 = "sha256-suKmaoJq0PBHZc7NzBQ60JGwJkAtWmvzPtTHWOPJEdc=";
+  };
+
+  nativeBuildInputs = [ pkg-config asciidoc libxslt docbook_xsl ];
+  buildInputs = [ libev libX11 libXext libXi libXfixes ];
+
+  prePatch = ''
+    substituteInPlace Makefile --replace 'PKG_CONFIG =' 'PKG_CONFIG ?='
+  '';
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Rewrite of unclutter using the X11 Xfixes extension";
+    platforms = platforms.unix;
+    license = lib.licenses.mit;
+    maintainers = [ ];
+    mainProgram = "unclutter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unclutter/default.nix b/nixpkgs/pkgs/tools/misc/unclutter/default.nix
new file mode 100644
index 000000000000..5d711c5fd03d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unclutter/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchurl
+, libX11
+}:
+
+stdenv.mkDerivation rec {
+  pname = "unclutter";
+  version = "8";
+  src = fetchurl {
+    url = "https://www.ibiblio.org/pub/X11/contrib/utilities/unclutter-${version}.tar.gz";
+    sha256 = "33a78949a7dedf2e8669ae7b5b2c72067896497820292c96afaa60bb71d1f2a6";
+  };
+
+  buildInputs = [ libX11 ];
+
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -pv "$out/bin"
+    mkdir -pv "$out/share/man/man1"
+    make DESTDIR="$out" BINDIR="$out/bin" PREFIX="" install
+    make DESTDIR="$out" MANPATH="$out/share/man" PREFIX="" install.man
+  '';
+
+  meta = with lib; {
+    description = "Hides mouse pointer while not in use";
+    longDescription = ''
+      Unclutter hides your X mouse cursor when you do not need it, to prevent
+      it from getting in the way. You have only to move the mouse to restore
+      the mouse cursor. Unclutter is very useful in tiling wm's where you do
+      not need the mouse often.
+
+      Just run it from your .bash_profile like that:
+
+          unclutter -idle 1 &
+    '';
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = platforms.unix;
+    license = lib.licenses.publicDomain;
+    mainProgram = "unclutter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/undocker/default.nix b/nixpkgs/pkgs/tools/misc/undocker/default.nix
new file mode 100644
index 000000000000..a2ce7dfb7aa1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/undocker/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromSourcehut
+}:
+buildGoModule rec {
+  pname = "undocker";
+  version = "1.0.4";
+
+  src = fetchFromSourcehut {
+    owner = "~motiejus";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-I+pTbr1lKELyYlyHrx2gB+aeZ3/PmcePQfXu1ckhKAk=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~motiejus/undocker";
+    description = "A CLI tool to convert a Docker image to a flattened rootfs tarball";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jordanisaacs ];
+    mainProgram = "undocker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unicode/default.nix b/nixpkgs/pkgs/tools/misc/unicode/default.nix
new file mode 100644
index 000000000000..012ab2fc6cb7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unicode/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchFromGitHub, fetchurl, python3Packages, installShellFiles, gitUpdater }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "unicode";
+  version = "2.9";
+
+  src = fetchFromGitHub {
+    owner = "garabik";
+    repo = "unicode";
+    rev = "v${version}";
+    sha256 = "sha256-FHAlZ5HID/FE9+YR7Dmc3Uh7E16QKORoD8g9jgTeQdY=";
+  };
+
+  ucdtxt = fetchurl {
+    url = "https://www.unicode.org/Public/15.0.0/ucd/UnicodeData.txt";
+    sha256 = "sha256-gG6a7WUDcZfx7IXhK+bozYcPxWCLTeD//ZkPaJ83anM=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postFixup = ''
+    substituteInPlace "$out/bin/.unicode-wrapped" \
+      --replace "/usr/share/unicode/UnicodeData.txt" "$ucdtxt"
+  '';
+
+  postInstall = ''
+    installManPage paracode.1 unicode.1
+  '';
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    description = "Display unicode character properties";
+    homepage = "https://github.com/garabik/unicode";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.woffs ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/units/default.nix b/nixpkgs/pkgs/tools/misc/units/default.nix
new file mode 100644
index 000000000000..56dc43e7f61d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/units/default.nix
@@ -0,0 +1,46 @@
+{
+  stdenv,
+  lib,
+  fetchurl,
+  readline,
+  enableCurrenciesUpdater ? true,
+  pythonPackages ? null
+}:
+
+assert enableCurrenciesUpdater -> pythonPackages != null;
+
+let pythonEnv = pythonPackages.python.withPackages(ps: [
+      ps.requests
+    ]);
+in stdenv.mkDerivation rec {
+  pname = "units";
+  version = "2.22";
+
+  src = fetchurl {
+    url = "mirror://gnu/units/${pname}-${version}.tar.gz";
+    sha256 = "sha256-XRPhIHch/ncm2Qa6HZLcDt2qn8JnWe0i47jRp5MSWEg=";
+  };
+
+  buildInputs = [ readline ]
+    ++ lib.optionals enableCurrenciesUpdater [
+      pythonEnv
+    ]
+  ;
+  prePatch = lib.optionalString enableCurrenciesUpdater ''
+    substituteInPlace units_cur \
+      --replace "#!/usr/bin/env python" ${pythonEnv}/bin/python
+  '';
+  postInstall = ''
+    cp units_cur ${placeholder "out"}/bin/
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Unit conversion tool";
+    homepage = "https://www.gnu.org/software/units/";
+    license = [ licenses.gpl3Plus ];
+    platforms = platforms.all;
+    maintainers = [ maintainers.vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unparam/default.nix b/nixpkgs/pkgs/tools/misc/unparam/default.nix
new file mode 100644
index 000000000000..6578f08c59ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unparam/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "unparam";
+  version = "unstable-2023-03-12";
+
+  src = fetchFromGitHub {
+    owner = "mvdan";
+    repo = "unparam";
+    rev = "e84e2d14e3b88193890ff95d72ecb81312f36589";
+    sha256 = "sha256-kbEdOqX/p/FrNfWQ2WjXX+lERprSV2EI9l+kapHuFi4=";
+  };
+
+  vendorHash = "sha256-gEZFAMcr1okqG2IXcS3hDzZKMINohd2JzxezGbzyeBE=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Find unused parameters in Go";
+    homepage = "https://github.com/mvdan/unparam";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "unparam";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/up/default.nix b/nixpkgs/pkgs/tools/misc/up/default.nix
new file mode 100644
index 000000000000..9fa0c700b8c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/up/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "up";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "akavel";
+    repo = "up";
+    rev = "v${version}";
+    hash = "sha256-d6FCJ9G9ytHhWQ5lXEtlmzclt3odS9e+Y1ry6EiIDsk=";
+  };
+
+  vendorHash = "sha256-PbOMUrKigCUuu5Hv3h0ZYSYezS+64DIZSubnQZ12HOE=";
+
+  meta = with lib; {
+    description = "Ultimate Plumber is a tool for writing Linux pipes with instant live preview";
+    homepage = "https://github.com/akavel/up";
+    maintainers = with maintainers; [ ma27 ];
+    license = licenses.asl20;
+    mainProgram = "up";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/upower-notify/default.nix b/nixpkgs/pkgs/tools/misc/upower-notify/default.nix
new file mode 100644
index 000000000000..c46ad10a40af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/upower-notify/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+# To use upower-notify, the maintainer suggests adding something like this to your configuration.nix:
+#
+# service.xserver.displayManager.sessionCommands = ''
+#   ${pkgs.dunst}/bin/dunst -shrink -geometry 0x0-50-50 -key space & # ...if don't already have a dbus notification display app
+#   (sleep 3; exec ${pkgs.yeshup}/bin/yeshup ${pkgs.go-upower-notify}/bin/upower-notify) &
+# '';
+buildGoPackage rec {
+  pname = "upower-notify";
+  version = "unstable-2016-03-10";
+
+  goPackagePath = "github.com/omeid/upower-notify";
+
+  src = fetchFromGitHub {
+    owner = "omeid";
+    repo = "upower-notify";
+    rev = "14c581e683a7e90ec9fa6d409413c16599a5323c";
+    sha256 = "16zlvn53p9m10ph8n9gps51fkkvl6sf4afdzni6azk05j0ng49jw";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "simple tool to give you Desktop Notifications about your battery";
+    homepage = "https://github.com/omeid/upower-notify";
+    maintainers = with maintainers; [ kamilchm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/upower-notify/deps.nix b/nixpkgs/pkgs/tools/misc/upower-notify/deps.nix
new file mode 100644
index 000000000000..8a729857b819
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/upower-notify/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev = "32c6cc29c14570de4cf6d7e7737d68fb2d01ad15";
+      sha256 = "0v401f761l88yapiaw23pxvxviqrwl2r2vfd6lq02044i7x4i5r3";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/upterm/default.nix b/nixpkgs/pkgs/tools/misc/upterm/default.nix
new file mode 100644
index 000000000000..135fa5dcec69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/upterm/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "upterm";
+  version = "0.13.2";
+
+  src = fetchFromGitHub {
+    owner = "owenthereal";
+    repo = "upterm";
+    rev = "v${version}";
+    hash = "sha256-GpD8OUZWN2myADHjpIBUzu2adkE9eFLENxpybX+k9Zg=";
+  };
+
+  vendorHash = "sha256-Rh3xgxaCPj9CbiNy8AycuCPvD/HCiLohcdiCQwPduDM=";
+
+  subPackages = [ "cmd/upterm" "cmd/uptermd" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    # force go to build for build arch rather than host arch during cross-compiling
+    CGO_ENABLED=0 GOOS= GOARCH= go run cmd/gendoc/main.go
+    installManPage etc/man/man*/*
+    installShellCompletion --bash --name upterm.bash etc/completion/upterm.bash_completion.sh
+    installShellCompletion --zsh --name _upterm etc/completion/upterm.zsh_completion
+  '';
+
+  doCheck = true;
+
+  passthru.tests = { inherit (nixosTests) uptermd; };
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "Secure terminal-session sharing";
+    homepage = "https://upterm.dev";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ hax404 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/urjtag/default.nix b/nixpkgs/pkgs/tools/misc/urjtag/default.nix
new file mode 100644
index 000000000000..33a738f1643c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/urjtag/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchurl
+, autoreconfHook
+, gettext
+, libftdi1
+, libtool
+, libusb-compat-0_1
+, pkg-config
+, readline
+, which
+, bsdlSupport ? true
+, jedecSupport ? true
+, staplSupport ? true
+, svfSupport ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "urjtag";
+  version = "2021.03";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/${pname}/${pname}/${version}/${pname}-${version}.tar.xz";
+    hash = "sha256-sKLqokVROvCW3E13AQmDIzXGlMbBKqXpL++uhoVBbxw=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    which
+    gettext
+  ];
+  buildInputs = [
+    libftdi1
+    libtool
+    libusb-compat-0_1
+    readline
+  ];
+
+  configureFlags = [
+    (lib.enableFeature bsdlSupport  "bsdl")
+    (lib.enableFeature jedecSupport "jedec-exp")
+    (lib.enableFeature staplSupport "stapl")
+    (lib.enableFeature svfSupport   "svf")
+  ];
+
+  meta = with lib; {
+    homepage = "http://urjtag.org/";
+    description = "Universal JTAG library, server and tools";
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/url-parser/default.nix b/nixpkgs/pkgs/tools/misc/url-parser/default.nix
new file mode 100644
index 000000000000..d55639b8be80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/url-parser/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "url-parser";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "thegeeklab";
+    repo = "url-parser";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-1KNe2sYr2DtRJGdgqs7JAA788Qa3+Z7iTntCkiJd29I=";
+  };
+
+  vendorHash = "sha256-DAwPYihfOorC61/UhRNNOsOaAjbu8mDBaikGJIOzk6Y=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X" "main.BuildVersion=${version}"
+    "-X" "main.BuildDate=1970-01-01"
+  ];
+
+  meta = with lib; {
+    description = "Simple command-line URL parser";
+    homepage = "https://github.com/thegeeklab/url-parser";
+    changelog = "https://github.com/thegeeklab/url-parser/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+    mainProgram = "url-parser";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/urlencode/default.nix b/nixpkgs/pkgs/tools/misc/urlencode/default.nix
new file mode 100644
index 000000000000..6b8097a6b527
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/urlencode/default.nix
@@ -0,0 +1,25 @@
+{ fetchFromGitHub
+, lib
+, rustPlatform
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "urlencode";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "dead10ck";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-LvLUbtMPVbYZMUb9vWhTscYfZPtEM5GrZme3azvVlPE=";
+  };
+
+  cargoSha256 = "sha256-UPw+/wVOEM+kciOr70P+gdMCxtCKQ/SXsNAWA44v4v8=";
+
+  meta = with lib; {
+    description = "A CLI utility for URL-encoding or -decoding strings";
+    homepage = "https://github.com/dead10ck/urlencode";
+    license = licenses.mit;
+    maintainers = with maintainers; [ l0b0 ];
+    mainProgram = "urlencode";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/urn-timer/default.nix b/nixpkgs/pkgs/tools/misc/urn-timer/default.nix
new file mode 100644
index 000000000000..26b59a7f908a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/urn-timer/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv
+, fetchFromGitHub
+, unstableGitUpdater
+, xxd
+, pkg-config
+, imagemagick
+, wrapGAppsHook
+, gtk3
+, jansson
+, nixosTests
+}:
+
+stdenv.mkDerivation {
+  pname = "urn-timer";
+  version = "unstable-2023-08-07";
+
+  src = fetchFromGitHub {
+    owner = "paoloose";
+    repo = "urn";
+    rev = "3468e297ee67aa83e6c26529acd35142ade5c6ff";
+    hash = "sha256-e9u/bjFjwgF5QciiqB3AWhyYj7eCstzkpSR9+xNA+4I=";
+  };
+
+  nativeBuildInputs = [
+    xxd
+    pkg-config
+    imagemagick
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    jansson
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/paoloose/urn.git";
+  };
+
+  passthru.tests.nixosTest = nixosTests.urn-timer;
+
+  meta = with lib; {
+    homepage = "https://github.com/paoloose/urn";
+    description = "Split tracker / timer for speedrunning with GTK+ frontend";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz ];
+    mainProgram = "urn-gtk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/usbimager/default.nix b/nixpkgs/pkgs/tools/misc/usbimager/default.nix
new file mode 100644
index 000000000000..b845062c1783
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/usbimager/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitLab, pkg-config, wrapGAppsHook
+, withLibui ? true, gtk3
+, withUdisks ? stdenv.isLinux, udisks, glib
+, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "usbimager";
+  version = "1.0.10";
+
+  src = fetchFromGitLab {
+    owner = "bztsrc";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-HTFopc2xrhp0XYubQtOwMKWTQ+3JSKAyL4mMyQ82kAs=";
+  };
+
+  sourceRoot = "${src.name}/src";
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+  buildInputs = lib.optionals withUdisks [ udisks glib ]
+    ++ lib.optional (!withLibui) libX11
+    ++ lib.optional withLibui gtk3;
+    # libui is bundled with the source of usbimager as a compiled static library
+
+  postPatch = ''
+    sed -i \
+      -e 's|install -m 2755 -g disk|install |g' \
+      -e 's|-I/usr/include/gio-unix-2.0|-I${glib.dev}/include/gio-unix-2.0|g' \
+      -e 's|install -m 2755 -g $(GRP)|install |g' Makefile
+  '';
+
+  dontConfigure = true;
+
+  makeFlags =  [ "PREFIX=$(out)" ]
+    ++ lib.optional withLibui "USE_LIBUI=yes"
+    ++ lib.optional withUdisks "USE_UDISKS2=yes";
+
+  meta = with lib; {
+    description = "A very minimal GUI app that can write compressed disk images to USB drives";
+    homepage = "https://gitlab.com/bztsrc/usbimager";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vdot0x23 ];
+    # windows and darwin could work, but untested
+    # feel free add them if you have a machine to test
+    platforms = with platforms; linux;
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isLinux && stdenv.isAarch64;
+    mainProgram = "usbimager";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/usbmuxd/default.nix b/nixpkgs/pkgs/tools/misc/usbmuxd/default.nix
new file mode 100644
index 000000000000..5a391762cd08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/usbmuxd/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, libimobiledevice
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "usbmuxd";
+  version = "1.1.1+date=2023-05-05";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "01c94c77f59404924f1c46d99c4e5e0c7817281b";
+    hash = "sha256-WqbobkzlJ9g5fb9S2QPi3qdpCLx3pxtNlT7qDI63Zp4=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  propagatedBuildInputs = [
+    libimobiledevice
+    libusb1
+  ];
+
+  preAutoreconf = ''
+    export RELEASE_VERSION=${version}
+  '';
+
+  configureFlags = [
+    "--with-udevrulesdir=${placeholder "out"}/lib/udev/rules.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/libimobiledevice/usbmuxd";
+    description = "A socket daemon to multiplex connections from and to iOS devices";
+    longDescription = ''
+      usbmuxd stands for "USB multiplexing daemon". This daemon is in charge of
+      multiplexing connections over USB to an iOS device. To users, it means
+      you can sync your music, contacts, photos, etc. over USB. To developers, it
+      means you can connect to any listening localhost socket on the device. usbmuxd
+      is not used for tethering data transfer which uses a dedicated USB interface as
+      a virtual network device. Multiple connections to different TCP ports can happen
+      in parallel. The higher-level layers are handled by libimobiledevice.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ infinisil ];
+    mainProgram = "usbmuxd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/usbmuxd2/default.nix b/nixpkgs/pkgs/tools/misc/usbmuxd2/default.nix
new file mode 100644
index 000000000000..2eee1bb71324
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/usbmuxd2/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, clangStdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, libimobiledevice
+, libusb1
+, avahi
+, clang
+, git
+}: let
+
+  libgeneral = clangStdenv.mkDerivation rec {
+    pname = "libgeneral";
+    version = "74";
+    src = fetchFromGitHub {
+      owner = "tihmstar";
+      repo = pname;
+      rev = "refs/tags/${version}";
+      hash = "sha256-6aowcIYssc1xqH6kTi/cpH2F7rgc8+lGC8HgZWYH2w0=";
+      # Leave DotGit so that autoconfigure can read version from git tags
+      leaveDotGit = true;
+    };
+    nativeBuildInputs = [
+      autoreconfHook
+      git
+      pkg-config
+    ];
+    meta = with lib; {
+      description = "Helper library used by usbmuxd2";
+      homepage = "https://github.com/tihmstar/libgeneral";
+      license = licenses.lgpl21;
+      platforms = platforms.all;
+    };
+  };
+
+in
+clangStdenv.mkDerivation rec {
+  pname = "usbmuxd2";
+  version = "unstable-2023-12-12";
+
+  src = fetchFromGitHub {
+    owner = "tihmstar";
+    repo = pname;
+    rev = "2ce399ddbacb110bd5a83a6b8232d42c9a9b6e84";
+    hash = "sha256-UVLLE73XuWTgGlpTMxUDykFmiBDqz6NCRO2rpRAYfow=";
+    # Leave DotGit so that autoconfigure can read version from git tags
+    leaveDotGit = true;
+  };
+
+  postPatch = ''
+    # Checking for libgeneral version still fails
+    sed -i 's/libgeneral >= $LIBGENERAL_MINVERS_STR/libgeneral/' configure.ac
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    clang
+    git
+    pkg-config
+  ];
+
+  propagatedBuildInputs = [
+    avahi
+    libgeneral
+    libimobiledevice
+    libusb1
+  ];
+
+  configureFlags = [
+    "--with-udevrulesdir=${placeholder "out"}/lib/udev/rules.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+  ];
+
+  makeFlags = [
+    "sbindir=${placeholder "out"}/bin"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/tihmstar/usbmuxd2";
+    description = "A socket daemon to multiplex connections from and to iOS devices";
+    license = licenses.lgpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ onny ];
+    mainProgram = "usbmuxd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/usbview/default.nix b/nixpkgs/pkgs/tools/misc/usbview/default.nix
new file mode 100644
index 000000000000..17402fe76120
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/usbview/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, imagemagick
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "usbview";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner = "gregkh";
+    repo = "usbview";
+    rev = "v${version}";
+    hash = "sha256-h+sB83BYsrB2VxwtatPWNiM0WdTCMY289nh+/0o8GOw=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    imagemagick
+  ];
+
+  buildInputs = [
+    gtk3
+  ];
+
+  meta = with lib; {
+    description = "USB viewer for Linux";
+    license = licenses.gpl2Only;
+    homepage = "http://www.kroah.com/linux-usb/";
+    maintainers = with maintainers; [ shamilton h7x4 ];
+    platforms = platforms.linux;
+    mainProgram = "usbview";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uucp/default.nix b/nixpkgs/pkgs/tools/misc/uucp/default.nix
new file mode 100644
index 000000000000..28f7a6572c18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uucp/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "uucp";
+  version = "1.07";
+
+  src = fetchurl {
+    url = "mirror://gnu/uucp/uucp-${version}.tar.gz";
+    sha256 = "0b5nhl9vvif1w3wdipjsk8ckw49jj1w85xw1mmqi3zbcpazia306";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  prePatch = ''
+    # do not set sticky bit in nix store
+    substituteInPlace Makefile.in \
+      --replace 4555 0555
+    sed -i '/chown $(OWNER)/d' Makefile.in
+  '';
+
+  makeFlags = [ "AR:=$(AR)" ];
+
+  meta = {
+    description = "Unix-unix cp over serial line, also includes cu program";
+
+    longDescription =
+      '' Taylor UUCP is a free implementation of UUCP and is the standard
+         UUCP used on the GNU system.  If you don't know what UUCP is chances
+         are, nowadays, that you won't need it.  If you do need it, you've
+         just found one of the finest UUCP implementations available.
+      '';
+
+    homepage = "https://www.gnu.org/software/uucp/uucp.html";
+
+    license = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uudeview/default.nix b/nixpkgs/pkgs/tools/misc/uudeview/default.nix
new file mode 100644
index 000000000000..6875e6f12343
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uudeview/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, tcl
+, tk
+}:
+
+stdenv.mkDerivation rec {
+  pname = "uudeview";
+  version = "0.5.20";
+
+  src = fetchurl {
+    url = "http://www.fpx.de/fp/Software/UUDeview/download/${pname}-${version}.tar.gz";
+    sha256 = "0dg4v888fxhmf51vxq1z1gd57fslsidn15jf42pj4817vw6m36p4";
+  };
+
+  buildInputs = [ tcl tk ];
+
+  configureFlags = [ "--enable-tk=${tk.dev}" "--enable-tcl=${tcl}" ];
+
+  patches = [
+    # https://wiki.tcl.tk/3577
+    ./matherr.patch
+    # format hardening
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/OpenMandrivaAssociation/uudeview/master/uudeview-0.5.20-fix-str-fmt.patch";
+      sha256 = "1biipck60mhpd0j6jwizaisvqa8alisw1dpfqm6zf7ic5b93hmfw";
+      extraPrefix = "";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace tcl/xdeview --replace "exec uuwish" "exec $out/bin/uuwish"
+  '';
+
+  meta = {
+    description = "The Nice and Friendly Decoder";
+    homepage = "http://www.fpx.de/fp/Software/UUDeview/";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ woffs ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uudeview/matherr.patch b/nixpkgs/pkgs/tools/misc/uudeview/matherr.patch
new file mode 100644
index 000000000000..a93db7d7858d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uudeview/matherr.patch
@@ -0,0 +1,19 @@
+diff --git a/tcl/uutcl.c b/tcl/uutcl.c
+index f101f2ce52b..71c24688dc4 100644
+--- a/tcl/uutcl.c
++++ b/tcl/uutcl.c
+@@ -48,14 +48,6 @@
+ #include <tcl.h>
+ #endif
+
+-/*
+- * The following variable is a special hack that is needed in order for
+- * Sun shared libraries to be used for Tcl.
+- */
+-
+-extern int matherr();
+-int *tclDummyMathPtr = (int *) matherr;
+-
+ #include <uudeview.h>
+ #include <uuint.h>
+ #include <fptools.h>
diff --git a/nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix b/nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix
new file mode 100644
index 000000000000..45a1c3f8a28f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, cargo
+, sphinx
+, Security
+, libiconv
+, prefix ? "uutils-"
+, buildMulticallBinary ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "uutils-coreutils";
+  version = "0.0.22";
+
+  src = fetchFromGitHub {
+    owner = "uutils";
+    repo = "coreutils";
+    rev = version;
+    hash = "sha256-aEhU4O4xoj7hrnmNXA9GQYn8nc6XEJCGQIcx/xRtLMc=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-zQN6EVRyd4FWeNNDXI3NY6XWmJTD+n8c+w7BHtXvs1k=";
+  };
+
+  nativeBuildInputs = [ rustPlatform.cargoSetupHook sphinx ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security libiconv ];
+
+  makeFlags = [
+    "CARGO=${cargo}/bin/cargo"
+    "PREFIX=${placeholder "out"}"
+    "PROFILE=release"
+    "INSTALLDIR_MAN=${placeholder "out"}/share/man/man1"
+  ] ++ lib.optionals (prefix != null) [ "PROG_PREFIX=${prefix}" ]
+  ++ lib.optionals buildMulticallBinary [ "MULTICALL=y" ];
+
+  # too many impure/platform-dependent tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Cross-platform Rust rewrite of the GNU coreutils";
+    longDescription = ''
+      uutils is an attempt at writing universal (as in cross-platform)
+      CLI utils in Rust. This repo is to aggregate the GNU coreutils rewrites.
+    '';
+    homepage = "https://github.com/uutils/coreutils";
+    maintainers = with maintainers; [ siraben ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uwufetch/default.nix b/nixpkgs/pkgs/tools/misc/uwufetch/default.nix
new file mode 100644
index 000000000000..d0ae239d9ec2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uwufetch/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, viu }:
+
+stdenv.mkDerivation rec {
+  pname = "uwufetch";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "TheDarkBug";
+    repo = pname;
+    rev = version;
+    hash = "sha256-cA8sajh+puswyKikr0Jp9ei+EpVkH+vhEp+pTerkUqA=";
+  };
+
+  postPatch = ''
+    substituteInPlace uwufetch.c \
+      --replace "/usr/lib/uwufetch" "$out/lib/uwufetch" \
+      --replace "/usr/local/lib/uwufetch" "$out/lib/uwufetch" \
+      --replace "/etc/uwufetch/config" "$out/etc/uwufetch/config"
+    # fix command_path for package manager (nix-store)
+    substituteInPlace fetch.c \
+      --replace "/usr/bin" "/run/current-system/sw/bin"
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile \
+      --replace "local/bin" "bin" \
+      --replace "local/lib" "lib" \
+      --replace "local/include" "include" \
+      --replace "local/share" "share"
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [
+    "UWUFETCH_VERSION=${version}"
+  ];
+
+  installFlags = [
+    "DESTDIR=${placeholder "out"}"
+    "ETC_DIR=${placeholder "out"}/etc"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/uwufetch \
+      --prefix PATH ":" ${lib.makeBinPath [ viu ]}
+  '';
+
+  meta = with lib; {
+    description = "A meme system info tool for Linux";
+    homepage = "https://github.com/TheDarkBug/uwufetch";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bbjubjub ];
+    mainProgram = "uwufetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uwuify/default.nix b/nixpkgs/pkgs/tools/misc/uwuify/default.nix
new file mode 100644
index 000000000000..abcf5e9b23da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uwuify/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "uwuify";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "Daniel-Liu-c0deb0t";
+    repo = "uwu";
+    rev = "v${version}";
+    sha256 = "sha256-MzXObbxccwEG7egmQMCdhUukGqZS+NgbYwZjTaqME7I=";
+  };
+
+  cargoSha256 = "sha256-1BoB7K/dWy3AbogvHIDLrdPD7K54EISvn4RVU5RLTi4=";
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  meta = with lib; {
+    description = "Fast text uwuifier";
+    homepage = "https://github.com/Daniel-Liu-c0deb0t/uwu";
+    license = licenses.mit;
+    platforms = lib.platforms.x86; # uses SSE instructions
+    maintainers = with maintainers; [ siraben ];
+    mainProgram = "uwuify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/valeronoi/default.nix b/nixpkgs/pkgs/tools/misc/valeronoi/default.nix
new file mode 100644
index 000000000000..9826ce510bfc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/valeronoi/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, boost
+, cgal
+, cmake
+, copyDesktopItems
+, gpp
+, mpfr
+, qtbase
+, qtimageformats
+, qtsvg
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "valeronoi";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "ccoors";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-7z967y1hWpitZfXNlHHM8qEBdyuBQSFlJElS4ldsAaE=";
+  };
+
+  buildInputs = [
+    boost
+    cgal
+    gpp
+    mpfr
+    qtbase
+    qtimageformats
+    qtsvg
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    copyDesktopItems
+    wrapQtAppsHook
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/ccoors/Valeronoi/";
+    description = "A WiFi mapping companion app for Valetudo";
+    license = licenses.gpl3Only;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ nova-madeline maeve ];
+    mainProgram = "valeronoi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vcs_query/default.nix b/nixpkgs/pkgs/tools/misc/vcs_query/default.nix
new file mode 100644
index 000000000000..ccfdc62b1296
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vcs_query/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, python3, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "vcs_query";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mageta";
+    repo = "vcs_query";
+    rev = "v${version}";
+    sha256 = "05va0na9yxkpqhm9v0x3k58148qcf2bbcv5bnmj7vn9r7fwyjrlx";
+  };
+
+  nativeBuildInputs = [ python3 python3.pkgs.wrapPython ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm0755 vcs_query.py $out/bin/vcs_query
+    patchShebangs $out/bin
+    buildPythonPath ${python3.pkgs.vobject};
+    patchPythonScript $out/bin/vcs_query
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mageta/vcs_query";
+    description = "eMail query-command to use vCards in mutt and Vim";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+    mainProgram = "vcs_query";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vector/Cargo.lock b/nixpkgs/pkgs/tools/misc/vector/Cargo.lock
new file mode 100644
index 000000000000..41193aa9a014
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vector/Cargo.lock
@@ -0,0 +1,11095 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "Inflector"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
+dependencies = [
+ "lazy_static",
+ "regex",
+]
+
+[[package]]
+name = "RustyXML"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b5ace29ee3216de37c0546865ad08edef58b0f9e76838ed8959a84a990e58c5"
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aead"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
+dependencies = [
+ "crypto-common",
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
+dependencies = [
+ "getrandom 0.2.12",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if",
+ "getrandom 0.2.12",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "amq-protocol"
+version = "7.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d40d8b2465c7959dd40cee32ba6ac334b5de57e9fca0cc756759894a4152a5d"
+dependencies = [
+ "amq-protocol-tcp",
+ "amq-protocol-types",
+ "amq-protocol-uri",
+ "cookie-factory",
+ "nom",
+ "serde",
+]
+
+[[package]]
+name = "amq-protocol-tcp"
+version = "7.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cb2100adae7da61953a2c3a01935d86caae13329fadce3333f524d6d6ce12e2"
+dependencies = [
+ "amq-protocol-uri",
+ "tcp-stream",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "amq-protocol-types"
+version = "7.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "156ff13c8a3ced600b4e54ed826a2ae6242b6069d00dd98466827cef07d3daff"
+dependencies = [
+ "cookie-factory",
+ "nom",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "amq-protocol-uri"
+version = "7.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "751bbd7d440576066233e740576f1b31fdc6ab86cfabfbd48c548de77eca73e4"
+dependencies = [
+ "amq-protocol-types",
+ "percent-encoding",
+ "url",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd2405b3ac1faab2990b74d728624cd9fd115651fcecc7c2d8daf01376275ba"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+
+[[package]]
+name = "apache-avro"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceb7c683b2f8f40970b70e39ff8be514c95b96fcb9c4af87e1ed2cb2e10801a0"
+dependencies = [
+ "digest",
+ "lazy_static",
+ "libflate",
+ "log",
+ "num-bigint",
+ "quad-rand",
+ "rand 0.8.5",
+ "regex-lite",
+ "serde",
+ "serde_json",
+ "strum 0.25.0",
+ "strum_macros 0.25.3",
+ "thiserror",
+ "typed-builder 0.16.2",
+ "uuid",
+]
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "arbitrary"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110"
+dependencies = [
+ "derive_arbitrary",
+]
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "arr_macro"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c49336e062fa2ae8aca17a2f99c34d9c1a5d30827e8aff1cb4c294f253afe992"
+dependencies = [
+ "arr_macro_impl",
+ "proc-macro-hack",
+ "proc-macro-nested",
+]
+
+[[package]]
+name = "arr_macro_impl"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c6368f9ae5c6ec403ca910327ae0c9437b0a85255b6950c90d497e6177f6e5e"
+dependencies = [
+ "proc-macro-hack",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "ascii"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e"
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
+[[package]]
+name = "assert-json-diff"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00ad3f3a942eee60335ab4342358c161ee296829e0d16ff42fc1d6cb07815467"
+dependencies = [
+ "anstyle",
+ "bstr 1.9.0",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 2.5.3",
+ "futures-core",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a116f46a969224200a0a97f29cfd4c50e7534e4b4826bd23ea2c3c533039c82c"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "zstd 0.13.0",
+ "zstd-safe 7.0.0",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0"
+dependencies = [
+ "async-lock 2.8.0",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 2.0.1",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-fs"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
+dependencies = [
+ "async-lock 2.8.0",
+ "autocfg",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "async-global-executor-trait"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33dd14c5a15affd2abcff50d84efd4009ada28a860f01c14f9d654f3e81b3f75"
+dependencies = [
+ "async-global-executor",
+ "async-trait",
+ "executor-trait",
+]
+
+[[package]]
+name = "async-graphql"
+version = "7.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16926f97f683ff3b47b035cc79622f3d6a374730b07a5d9051e81e88b5f1904"
+dependencies = [
+ "async-graphql-derive",
+ "async-graphql-parser",
+ "async-graphql-value",
+ "async-stream",
+ "async-trait",
+ "base64 0.13.1",
+ "bytes 1.5.0",
+ "chrono",
+ "fnv",
+ "futures-util",
+ "http 1.0.0",
+ "indexmap 2.2.3",
+ "mime",
+ "multer",
+ "num-traits",
+ "once_cell",
+ "pin-project-lite",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "static_assertions_next",
+ "thiserror",
+]
+
+[[package]]
+name = "async-graphql-derive"
+version = "7.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6a7349168b79030e3172a620f4f0e0062268a954604e41475eff082380fe505"
+dependencies = [
+ "Inflector",
+ "async-graphql-parser",
+ "darling 0.20.5",
+ "proc-macro-crate 1.3.1",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "strum 0.25.0",
+ "syn 2.0.48",
+ "thiserror",
+]
+
+[[package]]
+name = "async-graphql-parser"
+version = "7.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fdc0adf9f53c2b65bb0ff5170cba1912299f248d0e48266f444b6f005deb1d"
+dependencies = [
+ "async-graphql-value",
+ "pest",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "async-graphql-value"
+version = "7.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cf4d4e86208f4f9b81a503943c07e6e7f29ad3505e6c9ce6431fe64dc241681"
+dependencies = [
+ "bytes 1.5.0",
+ "indexmap 2.2.3",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "async-graphql-warp"
+version = "7.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d906b817c1499c0a814ea62b2a9cc03726e50d694d7e8cad3fcc1b24e8b62883"
+dependencies = [
+ "async-graphql",
+ "futures-util",
+ "http 0.2.9",
+ "serde_json",
+ "warp",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock 2.8.0",
+ "autocfg",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-lite",
+ "log",
+ "parking",
+ "polling 2.8.0",
+ "rustix 0.37.27",
+ "slab",
+ "socket2 0.4.10",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-io"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10da8f3146014722c89e7859e1d7bb97873125d7346d10ca642ffab794355828"
+dependencies = [
+ "async-lock 2.8.0",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-io",
+ "futures-lite",
+ "parking",
+ "polling 3.3.0",
+ "rustix 0.38.31",
+ "slab",
+ "tracing 0.1.40",
+ "waker-fn",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener 2.5.3",
+]
+
+[[package]]
+name = "async-lock"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45e900cdcd39bb94a14487d3f7ef92ca222162e6c7c3fe7cb3550ea75fb486ed"
+dependencies = [
+ "event-listener 3.0.1",
+ "event-listener-strategy",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-nats"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbc1f1a75fd07f0f517322d103211f12d757658e91676def9a2e688774656c60"
+dependencies = [
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "futures 0.3.30",
+ "http 0.2.9",
+ "memchr",
+ "nkeys 0.3.2",
+ "nuid",
+ "once_cell",
+ "rand 0.8.5",
+ "regex",
+ "ring",
+ "rustls",
+ "rustls-native-certs",
+ "rustls-pemfile",
+ "rustls-webpki",
+ "serde",
+ "serde_json",
+ "serde_nanos",
+ "serde_repr",
+ "thiserror",
+ "time",
+ "tokio",
+ "tokio-retry",
+ "tokio-rustls",
+ "tracing 0.1.40",
+ "url",
+]
+
+[[package]]
+name = "async-net"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f"
+dependencies = [
+ "async-io 1.13.0",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-process"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
+dependencies = [
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "async-signal",
+ "blocking",
+ "cfg-if",
+ "event-listener 3.0.1",
+ "futures-lite",
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-reactor-trait"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6012d170ad00de56c9ee354aef2e358359deb1ec504254e0e5a3774771de0e"
+dependencies = [
+ "async-io 1.13.0",
+ "async-trait",
+ "futures-core",
+ "reactor-trait",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "async-signal"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5"
+dependencies = [
+ "async-io 2.1.0",
+ "async-lock 2.8.0",
+ "atomic-waker",
+ "cfg-if",
+ "futures-core",
+ "futures-io",
+ "rustix 0.38.31",
+ "signal-hook-registry",
+ "slab",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "async-task"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1"
+
+[[package]]
+name = "async-trait"
+version = "0.1.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "aws-config"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80c950a809d39bc9480207cb1cfc879ace88ea7e3a4392a8e9999e45d6e5692e"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-sdk-sts",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "fastrand 2.0.1",
+ "http 0.2.9",
+ "hyper",
+ "time",
+ "tokio",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-credential-types"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d56f287a9e65e4914bfedb5b22c056b65e4c232fca512d5509a9df36386759f"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-http"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "361c4310fdce94328cc2d1ca0c8a48c13f43009c61d3367585685a50ca8c66b6"
+dependencies = [
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "http-body",
+ "pin-project-lite",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-runtime"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ed7ef604a15fd0d4d9e43701295161ea6b504b63c44990ead352afea2bc15e9"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "fastrand 2.0.1",
+ "http 0.2.9",
+ "percent-encoding",
+ "tracing 0.1.40",
+ "uuid",
+]
+
+[[package]]
+name = "aws-sdk-cloudwatch"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "043546afc3d129d3d487c2fd121aabe4208300293f541a5c8adffdc919a603b0"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-query",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-cloudwatchlogs"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67a5bcf460e098cf49292d216fe520b28a5d9c8dae10db0ff9a97bb2c95dd386"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "fastrand 2.0.1",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-elasticsearch"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3090fdd5bf46d4097af7f560cb7305e1ef6f3f743bb7a4531246113e823309b0"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-firehose"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8789c5a2d55cb3ed24d8f0635498c53e0f6413c0f9839e9cb54e130e96a81b53"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-kinesis"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbcd6e94c56f1b4881b405c0953a82d50e110311100cf2355e50fdab79d73f44"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-s3"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859a207781360445504b89e790aebf682d80883280aa0d9b6e2e67740a733147"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-checksums",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "http-body",
+ "once_cell",
+ "percent-encoding",
+ "regex",
+ "tracing 0.1.40",
+ "url",
+]
+
+[[package]]
+name = "aws-sdk-sns"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48bff824fe28888cc4ce6acb52ba8e5cd9f4f38fc5bd1bb40d916e3000e17b57"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-query",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-sqs"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5736d9255f65f36df4f0812665c33fa36042b96192e6bba843ef5fcc75187cd8"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-sts"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5700da387716ccfc30b27f44b008f457e1baca5b0f05b6b95455778005e3432a"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-query",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sigv4"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c371c6b0ac54d4605eb6f016624fb5c7c2925d315fdf600ac1bf21b19d5f1742"
+dependencies = [
+ "aws-credential-types",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "form_urlencoded",
+ "hex",
+ "hmac",
+ "http 0.2.9",
+ "http 1.0.0",
+ "once_cell",
+ "percent-encoding",
+ "sha2",
+ "time",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-smithy-async"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "426a5bc369ca7c8d3686439e46edc727f397a47ab3696b13f3ae8c81b3b36132"
+dependencies = [
+ "futures-util",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "aws-smithy-checksums"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5a373ec01aede3dd066ec018c1bc4e8f5dd11b2c11c59c8eef1a5c68101f397"
+dependencies = [
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "crc32c",
+ "crc32fast",
+ "hex",
+ "http 0.2.9",
+ "http-body",
+ "md-5",
+ "pin-project-lite",
+ "sha1",
+ "sha2",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-smithy-eventstream"
+version = "0.60.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6363078f927f612b970edf9d1903ef5cef9a64d1e8423525ebb1f0a1633c858"
+dependencies = [
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "crc32fast",
+]
+
+[[package]]
+name = "aws-smithy-http"
+version = "0.60.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85d6a0619f7b67183067fa3b558f94f90753da2df8c04aeb7336d673f804b0b8"
+dependencies = [
+ "aws-smithy-eventstream",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "bytes-utils",
+ "futures-core",
+ "http 0.2.9",
+ "http-body",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "pin-utils",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-smithy-json"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a46dd338dc9576d6a6a5b5a19bd678dcad018ececee11cf28ecd7588bd1a55c"
+dependencies = [
+ "aws-smithy-types",
+]
+
+[[package]]
+name = "aws-smithy-query"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "feb5b8c7a86d4b6399169670723b7e6f21a39fc833a30f5c5a2f997608178129"
+dependencies = [
+ "aws-smithy-types",
+ "urlencoding",
+]
+
+[[package]]
+name = "aws-smithy-runtime"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4cb6b3afa5fc9825a75675975dcc3e21764b5476bc91dbc63df4ea3d30a576e"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "fastrand 2.0.1",
+ "h2 0.3.24",
+ "http 0.2.9",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "rustls",
+ "tokio",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-smithy-runtime-api"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23165433e80c04e8c09cee66d171292ae7234bae05fa9d5636e33095eae416b2"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "pin-project-lite",
+ "tokio",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-smithy-types"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c94a5bec34850b92c9a054dad57b95c1d47f25125f55973e19f6ad788f0381ff"
+dependencies = [
+ "base64-simd",
+ "bytes 1.5.0",
+ "bytes-utils",
+ "futures-core",
+ "http 0.2.9",
+ "http-body",
+ "itoa",
+ "num-integer",
+ "pin-project-lite",
+ "pin-utils",
+ "ryu",
+ "serde",
+ "time",
+]
+
+[[package]]
+name = "aws-smithy-xml"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ec40d74a67fd395bc3f6b4ccbdf1543672622d905ef3f979689aea5b730cb95"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "aws-types"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "789bbe008e65636fe1b6dbbb374c40c8960d1232b96af5ff4aec349f9c4accf4"
+dependencies = [
+ "aws-credential-types",
+ "aws-smithy-async",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "http 0.2.9",
+ "rustc_version 0.4.0",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "axum"
+version = "0.6.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags 1.3.2",
+ "bytes 1.5.0",
+ "futures-util",
+ "http 0.2.9",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tokio",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes 1.5.0",
+ "futures-util",
+ "http 0.2.9",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "azure_core"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ccd63c07d1fbfb3d4543d7ea800941bf5a30db1911b9b9e4db3b2c4210a434f"
+dependencies = [
+ "async-trait",
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "dyn-clone",
+ "futures 0.3.30",
+ "getrandom 0.2.12",
+ "http-types",
+ "log",
+ "paste",
+ "pin-project",
+ "quick-xml 0.31.0",
+ "rand 0.8.5",
+ "reqwest",
+ "rustc_version 0.4.0",
+ "serde",
+ "serde_json",
+ "time",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "azure_identity"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bd7ea32ca7eb66ff4757f83baac702ff11d469e5de365b6bc6f79f9c25d3436"
+dependencies = [
+ "async-lock 3.0.0",
+ "async-trait",
+ "azure_core",
+ "futures 0.3.30",
+ "log",
+ "oauth2",
+ "pin-project",
+ "serde",
+ "serde_json",
+ "time",
+ "tz-rs",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "azure_storage"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83ca0a07f89fd72a006da4713e93af3d6c44a693e61a1c3c2e7985de39c182e8"
+dependencies = [
+ "RustyXML",
+ "async-trait",
+ "azure_core",
+ "bytes 1.5.0",
+ "futures 0.3.30",
+ "hmac",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha2",
+ "time",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "azure_storage_blobs"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8096c04d370118323c42b2752aa1883e4880a56ef65239f317b359f263b6e194"
+dependencies = [
+ "RustyXML",
+ "azure_core",
+ "azure_storage",
+ "bytes 1.5.0",
+ "futures 0.3.30",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "time",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "backoff"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
+dependencies = [
+ "getrandom 0.2.12",
+ "instant",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "backon"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c1a6197b2120bb2185a267f6515038558b019e92b832bb0320e96d66268dcf9"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "pin-project",
+ "tokio",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base16"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d27c3610c36aee21ce8ac510e6224498de4228ad772a171ed65643a24693a5a8"
+
+[[package]]
+name = "base16ct"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5"
+
+[[package]]
+name = "base64"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+
+[[package]]
+name = "base64-simd"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195"
+dependencies = [
+ "outref",
+ "vsimd",
+]
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "bitmask-enum"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9990737a6d5740ff51cdbbc0f0503015cb30c390f6623968281eb214a520cfc0"
+dependencies = [
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
+dependencies = [
+ "async-channel",
+ "async-lock 2.8.0",
+ "async-task",
+ "fastrand 2.0.1",
+ "futures-io",
+ "futures-lite",
+ "piper",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "bloomy"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489d2af57852b78a86478273ac6a1ef912061b6af3a439694c49f309f6ea3bdd"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "bollard"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f03db470b3c0213c47e978da93200259a1eb4dae2e5512cba9955e2b540a6fc6"
+dependencies = [
+ "base64 0.21.7",
+ "bollard-stubs",
+ "bytes 1.5.0",
+ "chrono",
+ "futures-core",
+ "futures-util",
+ "hex",
+ "home",
+ "http 0.2.9",
+ "hyper",
+ "hyper-rustls",
+ "hyperlocal",
+ "log",
+ "pin-project-lite",
+ "rustls",
+ "rustls-native-certs",
+ "rustls-pemfile",
+ "rustls-webpki",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_repr",
+ "serde_urlencoded",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "url",
+ "webpki-roots",
+ "winapi",
+]
+
+[[package]]
+name = "bollard-stubs"
+version = "1.43.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b58071e8fd9ec1e930efd28e3a90c1251015872a2ce49f81f36421b86466932e"
+dependencies = [
+ "chrono",
+ "serde",
+ "serde_repr",
+ "serde_with 3.6.1",
+]
+
+[[package]]
+name = "borsh"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf617fabf5cdbdc92f774bfe5062d870f228b80056d41180797abf48bed4056e"
+dependencies = [
+ "borsh-derive",
+ "cfg_aliases",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f404657a7ea7b5249e36808dff544bc88a28f26e0ac40009f674b7a009d14be3"
+dependencies = [
+ "once_cell",
+ "proc-macro-crate 2.0.0",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+ "syn_derive",
+]
+
+[[package]]
+name = "bson"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61570f4de0cc9c03b481c96057b3ae7c6ff7b5b35da8b0832c44f0131987a718"
+dependencies = [
+ "ahash 0.8.6",
+ "base64 0.13.1",
+ "bitvec",
+ "hex",
+ "indexmap 1.9.3",
+ "js-sys",
+ "once_cell",
+ "rand 0.8.5",
+ "serde",
+ "serde_bytes",
+ "serde_json",
+ "time",
+ "uuid",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "bstr"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc"
+dependencies = [
+ "memchr",
+ "regex-automata 0.4.4",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytecheck"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627"
+dependencies = [
+ "bytecheck_derive",
+ "ptr_meta",
+ "simdutf8",
+]
+
+[[package]]
+name = "bytecheck_derive"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+dependencies = [
+ "byteorder",
+ "iovec",
+]
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bytes-utils"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e47d3a8076e283f3acd27400535992edb3ba4b5bb72f8891ad8fbe7932a7d4b9"
+dependencies = [
+ "bytes 1.5.0",
+ "either",
+]
+
+[[package]]
+name = "bytesize"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc"
+
+[[package]]
+name = "cached"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "355face540df58778b96814c48abb3c2ed67c4878a8087ab1819c1fedeec505f"
+dependencies = [
+ "ahash 0.8.6",
+ "cached_proc_macro",
+ "cached_proc_macro_types",
+ "hashbrown 0.14.3",
+ "instant",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cached_proc_macro"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d52f526f7cbc875b296856ca8c964a9f6290556922c303a8a3883e3c676e6a1"
+dependencies = [
+ "darling 0.14.4",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cached_proc_macro_types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0"
+
+[[package]]
+name = "cargo_toml"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dc9f7a067415ab5058020f04c60ec7b557084dbec0e021217bbabc7a8d38d14"
+dependencies = [
+ "serde",
+ "toml",
+]
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "castaway"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc"
+dependencies = [
+ "rustversion",
+]
+
+[[package]]
+name = "cbc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfb-mode"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "738b8d467867f80a71351933f70461f5b56f24d5c93e0cf216e59229c968d330"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
+[[package]]
+name = "chacha20"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "chacha20poly1305"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
+dependencies = [
+ "aead",
+ "chacha20",
+ "cipher",
+ "poly1305",
+ "zeroize",
+]
+
+[[package]]
+name = "charset"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18e9079d1a12a2cc2bffb5db039c43661836ead4082120d5844f02555aca2d46"
+dependencies = [
+ "base64 0.13.1",
+ "encoding_rs",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "wasm-bindgen",
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91d7b79e99bfaa0d47da0687c43aa3b7381938a62ad3a6498599039321f660b7"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+ "serde",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "433e39f13c9a060046954e0592a8d0a4bcb1040125cbf91cb8ee58964cfb350f"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "cidr"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d18b093eba54c9aaa1e3784d4361eb2ba944cf7d0a932a830132238f483e8d8"
+
+[[package]]
+name = "cidr-utils"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2315f7119b7146d6a883de6acd63ddf96071b5f79d9d98d2adaa84d749f6abf1"
+dependencies = [
+ "debug-helper",
+ "num-bigint",
+ "num-traits",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "cidr-utils"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25c0a9fb70c2c2cc2a520aa259b1d1345650046a07df1b6da1d3cefcd327f43e"
+dependencies = [
+ "cidr",
+ "num-bigint",
+ "num-traits",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+ "zeroize",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags 1.3.2",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap-verbosity-flag"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b57f73ca21b17a0352944b9bb61803b6007bd911b6cccfef7153f7f0600ac495"
+dependencies = [
+ "clap 4.4.18",
+ "log",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim 0.10.0",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb745187d7f4d76267b37485a65e0149edd0e91a4cfcdd3f27524ad86cee9f3"
+dependencies = [
+ "clap 4.4.18",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "clipboard-win"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c57002a5d9be777c1ef967e33674dac9ebd310d8893e4e3437b14d5f0f6372cc"
+dependencies = [
+ "error-code",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "codecs"
+version = "0.1.0"
+dependencies = [
+ "apache-avro",
+ "bytes 1.5.0",
+ "chrono",
+ "csv-core",
+ "derivative",
+ "dyn-clone",
+ "futures 0.3.30",
+ "indoc",
+ "memchr",
+ "once_cell",
+ "ordered-float 4.2.0",
+ "prost 0.12.3",
+ "prost-reflect",
+ "regex",
+ "rstest",
+ "serde",
+ "serde_json",
+ "similar-asserts",
+ "smallvec",
+ "snafu 0.7.5",
+ "syslog_loose",
+ "tokio",
+ "tokio-util",
+ "tracing 0.1.40",
+ "uuid",
+ "vector-common",
+ "vector-config",
+ "vector-config-common",
+ "vector-config-macros",
+ "vector-core",
+ "vector-lookup",
+ "vrl",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colored"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8"
+dependencies = [
+ "lazy_static",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "combine"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680"
+dependencies = [
+ "ascii",
+ "byteorder",
+ "either",
+ "memchr",
+ "unreachable",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "community-id"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f6af96839c04974cf381e427792a99913ecf3f7bfb348f153dc8a8e5f9803ad"
+dependencies = [
+ "anyhow",
+ "base64 0.21.7",
+ "hex",
+ "lazy_static",
+ "num_enum 0.6.1",
+ "sha1",
+]
+
+[[package]]
+name = "compact_str"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f"
+dependencies = [
+ "castaway",
+ "cfg-if",
+ "itoa",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "confy"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15d296c475c6ed4093824c28e222420831d27577aaaf0a1163a3b7fc35b248a5"
+dependencies = [
+ "directories",
+ "serde",
+ "thiserror",
+ "toml",
+]
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode 0.3.6",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "console-api"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd326812b3fd01da5bb1af7d340d0d555fd3d4b641e7f1dfcf5962a902952787"
+dependencies = [
+ "futures-core",
+ "prost 0.12.3",
+ "prost-types 0.12.3",
+ "tonic",
+ "tracing-core 0.1.32",
+]
+
+[[package]]
+name = "console-subscriber"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7481d4c57092cd1c19dd541b92bdce883de840df30aa5d03fd48a3935c01842e"
+dependencies = [
+ "console-api",
+ "crossbeam-channel",
+ "crossbeam-utils",
+ "futures-task",
+ "hdrhistogram",
+ "humantime",
+ "prost-types 0.12.3",
+ "serde",
+ "serde_json",
+ "thread_local",
+ "tokio",
+ "tokio-stream",
+ "tonic",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+
+[[package]]
+name = "const_fn"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "cookie-factory"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core2"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe"
+dependencies = [
+ "crc-catalog",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4939f9ed1444bd8c896d37f3090012fa6e7834fe84ef8c9daa166109515732f9"
+
+[[package]]
+name = "crc32c"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8f48d60e5b4d2c53d5c2b1d8a58c849a70ae5e5509b08a48d047e3b65714a74"
+dependencies = [
+ "rustc_version 0.4.0",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+dependencies = [
+ "anes",
+ "cast",
+ "ciborium",
+ "clap 4.4.18",
+ "criterion-plot",
+ "futures 0.3.30",
+ "is-terminal",
+ "itertools 0.10.5",
+ "num-traits",
+ "once_cell",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "tokio",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools 0.10.5",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+
+[[package]]
+name = "crossterm"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
+dependencies = [
+ "bitflags 2.4.1",
+ "crossterm_winapi",
+ "futures-core",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-bigint"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "typenum",
+]
+
+[[package]]
+name = "crypto_secretbox"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1"
+dependencies = [
+ "aead",
+ "cipher",
+ "generic-array",
+ "poly1305",
+ "salsa20",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "csv"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe"
+dependencies = [
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ctr"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "4.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "curve25519-dalek-derive",
+ "digest",
+ "fiat-crypto",
+ "platforms 3.1.2",
+ "rustc_version 0.4.0",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "curve25519-dalek-derive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core 0.13.4",
+ "darling_macro 0.13.4",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
+dependencies = [
+ "darling_core 0.14.4",
+ "darling_macro 0.14.4",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc5d6b04b3fd0ba9926f945895de7d806260a2d7431ba82e7edaecb043c4c6b8"
+dependencies = [
+ "darling_core 0.20.5",
+ "darling_macro 0.20.5",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "strsim 0.10.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "strsim 0.10.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04e48a959bcd5c761246f5d090ebc2fbf7b9cd527a492b07a67510c108f1e7e3"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "strsim 0.10.0",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core 0.13.4",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
+dependencies = [
+ "darling_core 0.14.4",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d1545d67a2149e1d93b7e5c7752dce5a7426eb5d1357ddcfd89336b94444f77"
+dependencies = [
+ "darling_core 0.20.5",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "dary_heap"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7762d17f1241643615821a8455a0b2c3e803784b058693d990b11f2dce25a0ca"
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.3",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
+
+[[package]]
+name = "data-url"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a"
+
+[[package]]
+name = "db-key"
+version = "0.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b72465f46d518f6015d9cf07f7f3013a95dd6b9c2747c3d65ae0cce43929d14f"
+
+[[package]]
+name = "deadpool"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "421fe0f90f2ab22016f32a9881be5134fdd71c65298917084b0c7477cbc3856e"
+dependencies = [
+ "async-trait",
+ "deadpool-runtime",
+ "num_cpus",
+ "retain_mut",
+ "tokio",
+]
+
+[[package]]
+name = "deadpool-runtime"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63dfa964fe2a66f3fde91fc70b267fe193d822c7e603e2a675a49a7f46ad3f49"
+
+[[package]]
+name = "debug-helper"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e"
+
+[[package]]
+name = "der"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
+dependencies = [
+ "const-oid",
+ "pem-rfc7468",
+ "zeroize",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+dependencies = [
+ "powerfmt",
+ "serde",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_arbitrary"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case 0.4.0",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "rustc_version 0.4.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "const-oid",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "directories"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dns-lookup"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5766087c2235fec47fafa4cfecc81e494ee679d0fd4a59887ea0919bfb0e4fc"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "socket2 0.5.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dnsmsg-parser"
+version = "0.1.0"
+dependencies = [
+ "criterion",
+ "data-encoding",
+ "hickory-proto",
+ "thiserror",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "docs-renderer"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "serde",
+ "serde_json",
+ "snafu 0.7.5",
+ "tracing 0.1.40",
+ "tracing-subscriber",
+ "vector-config",
+ "vector-config-common",
+]
+
+[[package]]
+name = "duct"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ae3fc31835f74c2a7ceda3aeede378b0ae2e74c8f1c36559fcc9ae2a4e7d3e"
+dependencies = [
+ "libc",
+ "once_cell",
+ "os_pipe",
+ "shared_child",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d"
+
+[[package]]
+name = "ecdsa"
+version = "0.16.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
+dependencies = [
+ "der",
+ "digest",
+ "elliptic-curve",
+ "rfc6979",
+ "signature",
+ "spki",
+]
+
+[[package]]
+name = "ed25519"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
+dependencies = [
+ "pkcs8",
+ "signature",
+]
+
+[[package]]
+name = "ed25519-dalek"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980"
+dependencies = [
+ "curve25519-dalek",
+ "ed25519",
+ "serde",
+ "sha2",
+ "signature",
+ "zeroize",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "elliptic-curve"
+version = "0.13.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9775b22bc152ad86a0cf23f0f348b884b26add12bf741e7ffc4d4ab2ab4d205"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "digest",
+ "ff",
+ "generic-array",
+ "group",
+ "hkdf",
+ "pem-rfc7468",
+ "pkcs8",
+ "rand_core 0.6.4",
+ "sec1",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "ena"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encode_unicode"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+ "serde",
+]
+
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
+[[package]]
+name = "enrichment"
+version = "0.1.0"
+dependencies = [
+ "arc-swap",
+ "chrono",
+ "dyn-clone",
+ "vrl",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "enum_dispatch"
+version = "0.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f33313078bb8d4d05a2733a94ac4c2d8a0df9a2b84424ebf4f33bfc224a890e"
+dependencies = [
+ "once_cell",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939"
+dependencies = [
+ "enumflags2_derive",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "env-test-util"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62a61b2faff777e62dbccd7f82541d873f96264d050c5dd7e95194f79fc4de29"
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "erased-serde"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3286168faae03a0e583f6fde17c02c8b8bba2dcc2061d0f7817066e5b0af706"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "error-chain"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "error-code"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "281e452d3bad4005426416cdba5ccfd4f5c1280e10099e21db27f7c1c28347fc"
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "event-listener"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01cec0252c2afff729ee6f00e903d479fba81784c8e2bd77447673471fdfaea1"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener-strategy"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d96b852f1345da36d551b9473fa1e2b1eb5c5195585c6c018118bc92a8d91160"
+dependencies = [
+ "event-listener 3.0.1",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "executor-trait"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a1052dd43212a7777ec6a69b117da52f5e52f07aec47d00c1a2b33b85d06b08"
+dependencies = [
+ "async-trait",
+]
+
+[[package]]
+name = "exitcode"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de853764b47027c2e862a995c34978ffa63c1501f2e15f987ba11bd4f9bba193"
+
+[[package]]
+name = "fakedata"
+version = "0.1.0"
+dependencies = [
+ "chrono",
+ "fakedata_generator",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "fakedata_generator"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "302a45f60d105c247c9d3131107392da80df844f9215260b7f8ccfa301a6a6f4"
+dependencies = [
+ "passt",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "ff"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
+dependencies = [
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "fiat-crypto"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a481586acf778f1b1455424c343f71124b048ffa5f4fc3f8f6ae9dc432dcb3c7"
+
+[[package]]
+name = "file-source"
+version = "0.1.0"
+dependencies = [
+ "bstr 1.9.0",
+ "bytes 1.5.0",
+ "chrono",
+ "crc",
+ "criterion",
+ "dashmap",
+ "flate2",
+ "futures 0.3.30",
+ "glob",
+ "indexmap 2.2.3",
+ "libc",
+ "quickcheck",
+ "scan_fmt",
+ "serde",
+ "serde_json",
+ "similar-asserts",
+ "tempfile",
+ "tokio",
+ "tracing 0.1.40",
+ "vector-config",
+ "vector-config-common",
+ "vector-config-macros",
+ "winapi",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "finl_unicode"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flagset"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a7e408202050813e6f1d9addadcaafef3dca7530c7ddfb005d4081cce6779"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float_eq"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28a80e3145d8ad11ba0995949bbcf48b9df2be62772b3d351ef017dff6ecb853"
+
+[[package]]
+name = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "pin-project",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "fslock"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
+
+[[package]]
+name = "futures"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-timer"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+ "futures 0.1.31",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "tokio-io",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+ "zeroize",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-utils"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa"
+dependencies = [
+ "js-sys",
+ "serde",
+ "serde_json",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "goauth"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d351469a584f3b3565e2e740d4da60839bddc4320dadd7d61da8bdd77ffb373b"
+dependencies = [
+ "arc-swap",
+ "futures 0.3.30",
+ "log",
+ "reqwest",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "simpl",
+ "smpl_jwt",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "governor"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "821239e5672ff23e2a7060901fa622950bbd80b649cdaadd78d1c1767ed14eb4"
+dependencies = [
+ "cfg-if",
+ "dashmap",
+ "futures 0.3.30",
+ "futures-timer",
+ "no-std-compat",
+ "nonzero_ext",
+ "parking_lot",
+ "rand 0.8.5",
+ "smallvec",
+]
+
+[[package]]
+name = "graphql-introspection-query"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2a4732cf5140bd6c082434494f785a19cfb566ab07d1382c3671f5812fed6d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "graphql-parser"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2ebc8013b4426d5b81a4364c419a95ed0b404af2b82e2457de52d9348f0e474"
+dependencies = [
+ "combine 3.8.1",
+ "thiserror",
+]
+
+[[package]]
+name = "graphql_client"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cdf7b487d864c2939b23902291a5041bc4a84418268f25fda1c8d4e15ad8fa"
+dependencies = [
+ "graphql_query_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "graphql_client_codegen"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a40f793251171991c4eb75bd84bc640afa8b68ff6907bc89d3b712a22f700506"
+dependencies = [
+ "graphql-introspection-query",
+ "graphql-parser",
+ "heck 0.4.1",
+ "lazy_static",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "serde",
+ "serde_json",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "graphql_query_derive"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00bda454f3d313f909298f626115092d348bc231025699f557b27e248475f48c"
+dependencies = [
+ "graphql_client_codegen",
+ "proc-macro2 1.0.78",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "greptime-proto"
+version = "0.1.0"
+source = "git+https://github.com/GreptimeTeam/greptime-proto.git?tag=v0.4.1#4306ab645ee55b3f7f2ad3fb7acc5820f967c1aa"
+dependencies = [
+ "prost 0.12.3",
+ "serde",
+ "serde_json",
+ "strum 0.25.0",
+ "strum_macros 0.25.3",
+ "tonic",
+ "tonic-build 0.10.2",
+]
+
+[[package]]
+name = "greptimedb-client"
+version = "0.1.0"
+source = "git+https://github.com/GreptimeTeam/greptimedb-ingester-rust.git?rev=4cb19ec47eeaf634c451d9ae438dac445a8a3dce#4cb19ec47eeaf634c451d9ae438dac445a8a3dce"
+dependencies = [
+ "dashmap",
+ "enum_dispatch",
+ "futures 0.3.30",
+ "futures-util",
+ "greptime-proto",
+ "parking_lot",
+ "prost 0.12.3",
+ "rand 0.8.5",
+ "snafu 0.7.5",
+ "tokio",
+ "tokio-stream",
+ "tonic",
+ "tonic-build 0.9.2",
+ "tower",
+]
+
+[[package]]
+name = "grok"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "273797968160270573071022613fc4aa28b91fe68f3eef6c96a1b2a1947ddfbd"
+dependencies = [
+ "glob",
+ "onig",
+]
+
+[[package]]
+name = "group"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+dependencies = [
+ "ff",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9"
+dependencies = [
+ "bytes 1.5.0",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http 0.2.9",
+ "indexmap 2.2.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "h2"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31d030e59af851932b72ceebadf4a2b5986dba4c3b99dd2493f8273a0f151943"
+dependencies = [
+ "bytes 1.5.0",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http 1.0.0",
+ "indexmap 2.2.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hash_hasher"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74721d007512d0cb3338cd20f0654ac913920061a4c4d0d8708edb3f2a698c0c"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash 0.7.7",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038"
+dependencies = [
+ "ahash 0.8.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+dependencies = [
+ "ahash 0.8.6",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hdrhistogram"
+version = "7.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d"
+dependencies = [
+ "base64 0.21.7",
+ "byteorder",
+ "crossbeam-channel",
+ "flate2",
+ "nom",
+ "num-traits",
+]
+
+[[package]]
+name = "headers"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270"
+dependencies = [
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "headers-core",
+ "http 0.2.9",
+ "httpdate",
+ "mime",
+ "sha1",
+]
+
+[[package]]
+name = "headers-core"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
+dependencies = [
+ "http 0.2.9",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "heim"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "heim-common",
+ "heim-cpu",
+ "heim-disk",
+ "heim-host",
+ "heim-memory",
+ "heim-net",
+ "heim-runtime",
+]
+
+[[package]]
+name = "heim-common"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "cfg-if",
+ "core-foundation",
+ "futures-core",
+ "futures-util",
+ "lazy_static",
+ "libc",
+ "mach",
+ "nix 0.23.2",
+ "pin-utils",
+ "uom",
+ "winapi",
+]
+
+[[package]]
+name = "heim-cpu"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "cfg-if",
+ "futures 0.3.30",
+ "glob",
+ "heim-common",
+ "heim-runtime",
+ "lazy_static",
+ "libc",
+ "mach",
+ "ntapi",
+ "smol",
+ "winapi",
+]
+
+[[package]]
+name = "heim-disk"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "core-foundation",
+ "heim-common",
+ "heim-runtime",
+ "libc",
+ "mach",
+ "widestring 0.4.3",
+ "winapi",
+]
+
+[[package]]
+name = "heim-host"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "cfg-if",
+ "heim-common",
+ "heim-runtime",
+ "lazy_static",
+ "libc",
+ "log",
+ "mach",
+ "ntapi",
+ "platforms 1.1.0",
+ "winapi",
+]
+
+[[package]]
+name = "heim-memory"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "cfg-if",
+ "heim-common",
+ "heim-runtime",
+ "lazy_static",
+ "libc",
+ "mach",
+ "winapi",
+]
+
+[[package]]
+name = "heim-net"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "heim-common",
+ "heim-runtime",
+ "libc",
+ "macaddr",
+ "nix 0.23.2",
+ "widestring 0.4.3",
+ "winapi",
+]
+
+[[package]]
+name = "heim-runtime"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "futures 0.3.30",
+ "futures-timer",
+ "once_cell",
+ "smol",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hickory-proto"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "091a6fbccf4860009355e3efc52ff4acf37a63489aad7435372d44ceeb6fbbcf"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner 0.6.0",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.4.0",
+ "ipnet",
+ "once_cell",
+ "rand 0.8.5",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "tracing 0.1.40",
+ "url",
+]
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes 1.5.0",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea"
+dependencies = [
+ "bytes 1.5.0",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-range-header"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
+
+[[package]]
+name = "http-serde"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f560b665ad9f1572cfcaf034f7fb84338a7ce945216d64a90fd81f046a3caee"
+dependencies = [
+ "http 0.2.9",
+ "serde",
+]
+
+[[package]]
+name = "http-types"
+version = "2.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad"
+dependencies = [
+ "anyhow",
+ "async-channel",
+ "base64 0.13.1",
+ "futures-lite",
+ "http 0.2.9",
+ "infer 0.2.3",
+ "pin-project-lite",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "serde_urlencoded",
+ "url",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2 0.3.24",
+ "http 0.2.9",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.5.5",
+ "tokio",
+ "tower-service",
+ "tracing 0.1.40",
+ "want",
+]
+
+[[package]]
+name = "hyper-openssl"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6ee5d7a8f718585d1c3c61dfde28ef5b0bb14734b4db13f5ada856cdc6c612b"
+dependencies = [
+ "http 0.2.9",
+ "hyper",
+ "linked_hash_set",
+ "once_cell",
+ "openssl",
+ "openssl-sys",
+ "parking_lot",
+ "tokio",
+ "tokio-openssl",
+ "tower-layer",
+]
+
+[[package]]
+name = "hyper-proxy"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca815a891b24fdfb243fa3239c86154392b0953ee584aa1a2a1f66d20cbe75cc"
+dependencies = [
+ "bytes 1.5.0",
+ "futures 0.3.30",
+ "headers",
+ "http 0.2.9",
+ "hyper",
+ "openssl",
+ "tokio",
+ "tokio-openssl",
+ "tower-service",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
+dependencies = [
+ "futures-util",
+ "http 0.2.9",
+ "hyper",
+ "log",
+ "rustls",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes 1.5.0",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "hyperlocal"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c"
+dependencies = [
+ "futures-util",
+ "hex",
+ "hyper",
+ "pin-project",
+ "tokio",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.3",
+ "serde",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3"
+dependencies = [
+ "console",
+ "instant",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "indoc"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+
+[[package]]
+name = "infer"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac"
+
+[[package]]
+name = "infer"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199"
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "block-padding",
+ "generic-array",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "inventory"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767"
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
+dependencies = [
+ "socket2 0.5.5",
+ "widestring 1.0.2",
+ "windows-sys 0.48.0",
+ "winreg",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
+[[package]]
+name = "ipnetwork"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is_ci"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine 4.6.6",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json-patch"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6"
+dependencies = [
+ "serde",
+ "serde_json",
+ "thiserror",
+ "treediff",
+]
+
+[[package]]
+name = "jsonpath_lib"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f"
+dependencies = [
+ "log",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "k8s-e2e-tests"
+version = "0.1.0"
+dependencies = [
+ "env_logger 0.10.2",
+ "futures 0.3.30",
+ "indoc",
+ "k8s-openapi 0.16.0",
+ "k8s-test-framework",
+ "rand 0.8.5",
+ "regex",
+ "reqwest",
+ "serde_json",
+ "tokio",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "k8s-openapi"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d9455388f4977de4d0934efa9f7d36296295537d774574113a20f6082de03da"
+dependencies = [
+ "base64 0.13.1",
+ "bytes 1.5.0",
+ "chrono",
+ "serde",
+ "serde-value",
+ "serde_json",
+]
+
+[[package]]
+name = "k8s-openapi"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd990069640f9db34b3b0f7a1afc62a05ffaa3be9b66aa3c313f58346df7f788"
+dependencies = [
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "chrono",
+ "http 0.2.9",
+ "percent-encoding",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "url",
+]
+
+[[package]]
+name = "k8s-test-framework"
+version = "0.1.0"
+dependencies = [
+ "k8s-openapi 0.16.0",
+ "log",
+ "serde_json",
+ "tempfile",
+ "tokio",
+]
+
+[[package]]
+name = "keccak"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
+dependencies = [
+ "cpufeatures",
+]
+
+[[package]]
+name = "kqueue"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+]
+
+[[package]]
+name = "krb5-src"
+version = "0.3.2+1.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44cd3b7e7735d48bc3793837041294f2eb747bd0f63bbc081e89972abb9e48fb"
+dependencies = [
+ "duct",
+]
+
+[[package]]
+name = "kube"
+version = "0.82.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc7d3d52dd5c871991679102e80dfb192faaaa09fecdbccdd8c55af264ce7a8f"
+dependencies = [
+ "k8s-openapi 0.18.0",
+ "kube-client",
+ "kube-core",
+ "kube-runtime",
+]
+
+[[package]]
+name = "kube-client"
+version = "0.82.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "544339f1665488243f79080441cacb09c997746fd763342303e66eebb9d3ba13"
+dependencies = [
+ "base64 0.20.0",
+ "bytes 1.5.0",
+ "chrono",
+ "dirs-next",
+ "either",
+ "futures 0.3.30",
+ "http 0.2.9",
+ "http-body",
+ "hyper",
+ "hyper-openssl",
+ "hyper-timeout",
+ "jsonpath_lib",
+ "k8s-openapi 0.18.0",
+ "kube-core",
+ "openssl",
+ "pem 1.1.1",
+ "pin-project",
+ "secrecy",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.31",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tower",
+ "tower-http",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "kube-core"
+version = "0.82.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25983d07f414dfffba08c5951fe110f649113416b1d8e22f7c89c750eb2555a7"
+dependencies = [
+ "chrono",
+ "form_urlencoded",
+ "http 0.2.9",
+ "json-patch",
+ "k8s-openapi 0.18.0",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "kube-runtime"
+version = "0.82.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "125331201e3073707ac79c294c89021faa76c84da3a566a3749a2a93d295c98a"
+dependencies = [
+ "ahash 0.8.6",
+ "async-trait",
+ "backoff",
+ "derivative",
+ "futures 0.3.30",
+ "json-patch",
+ "k8s-openapi 0.18.0",
+ "kube-client",
+ "parking_lot",
+ "pin-project",
+ "serde",
+ "serde_json",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "lalrpop"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8"
+dependencies = [
+ "ascii-canvas",
+ "bit-set",
+ "diff",
+ "ena",
+ "is-terminal",
+ "itertools 0.10.5",
+ "lalrpop-util",
+ "petgraph",
+ "regex",
+ "regex-syntax 0.7.5",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid 0.2.4",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d"
+
+[[package]]
+name = "lapin"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f3067a1fcfbc3fc46455809c023e69b8f6602463201010f4ae5a3b572adb9dc"
+dependencies = [
+ "amq-protocol",
+ "async-global-executor-trait",
+ "async-reactor-trait",
+ "async-trait",
+ "executor-trait",
+ "flume",
+ "futures-core",
+ "futures-io",
+ "parking_lot",
+ "pinky-swear",
+ "reactor-trait",
+ "serde",
+ "tracing 0.1.40",
+ "waker-fn",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+dependencies = [
+ "spin 0.5.2",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.153"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+
+[[package]]
+name = "libflate"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7d5654ae1795afc7ff76f4365c2c8791b0feb18e8996a96adad8ffd7c3b2bf"
+dependencies = [
+ "adler32",
+ "core2",
+ "crc32fast",
+ "dary_heap",
+ "libflate_lz77",
+]
+
+[[package]]
+name = "libflate_lz77"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be5f52fb8c451576ec6b79d3f4deb327398bc05bbdbd99021a6e77a4c855d524"
+dependencies = [
+ "core2",
+ "hashbrown 0.13.1",
+ "rle-decode-fast",
+]
+
+[[package]]
+name = "libm"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libz-sys"
+version = "1.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linked_hash_set"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
+
+[[package]]
+name = "listenfd"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0500463acd96259d219abb05dc57e5a076ef04b2db9a2112846929b5f174c96"
+dependencies = [
+ "libc",
+ "uuid",
+ "winapi",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "lockfree-object-pool"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee33defb27b106378a6efcfcde4dda6226dfdac8ba7a2904f5bc93363cb88557"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "logfmt"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "879777f0cc6f3646a044de60e4ab98c75617e3f9580f7a2032e6ad7ea0cd3054"
+
+[[package]]
+name = "loki-logproto"
+version = "0.1.0"
+dependencies = [
+ "bytes 1.5.0",
+ "chrono",
+ "prost 0.12.3",
+ "prost-build 0.12.3",
+ "prost-types 0.12.3",
+ "snap",
+]
+
+[[package]]
+name = "lru"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db2c024b41519440580066ba82aab04092b333e09066a5eb86c7c4890df31f22"
+dependencies = [
+ "hashbrown 0.14.3",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "lua-src"
+version = "546.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da0daa7eee611a4c30c8f5ee31af55266e26e573971ba9336d2993e2da129b2"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "luajit-src"
+version = "210.5.2+113a168"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "823ec7bedb1819b11633bd583ae981b0082db08492b0c3396412b85dd329ffee"
+dependencies = [
+ "cc",
+ "which 5.0.0",
+]
+
+[[package]]
+name = "lz4"
+version = "1.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1"
+dependencies = [
+ "libc",
+ "lz4-sys",
+]
+
+[[package]]
+name = "lz4-sys"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "macaddr"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baee0bbc17ce759db233beb01648088061bf678383130602a298e6998eedb2d8"
+
+[[package]]
+name = "mach"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "mach2"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "matchit"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
+
+[[package]]
+name = "matrixmultiply"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2"
+dependencies = [
+ "autocfg",
+ "rawpointer",
+]
+
+[[package]]
+name = "maxminddb"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6087e5d8ea14861bb7c7f573afbc7be3798d3ef0fae87ec4fd9a4de9a127c3c"
+dependencies = [
+ "ipnetwork",
+ "log",
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "md-5"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if",
+ "digest",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "memmap2"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "metrics"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5"
+dependencies = [
+ "ahash 0.8.6",
+ "metrics-macros",
+ "portable-atomic",
+]
+
+[[package]]
+name = "metrics-macros"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddece26afd34c31585c74a4db0630c376df271c285d682d1e55012197830b6df"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "metrics-tracing-context"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fec95d1490f2b7e2d49462f9d75aa4fed52cc21e0b40aefc5987c6f404d40a2"
+dependencies = [
+ "itoa",
+ "lockfree-object-pool",
+ "metrics",
+ "metrics-util",
+ "once_cell",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "metrics-util"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4de2ed6e491ed114b40b732e4d1659a9d53992ebd87490c44a6ffe23739d973e"
+dependencies = [
+ "aho-corasick",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "hashbrown 0.13.1",
+ "indexmap 1.9.3",
+ "metrics",
+ "num_cpus",
+ "ordered-float 3.9.2",
+ "quanta 0.11.1",
+ "radix_trie",
+ "sketches-ddsketch",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "mlua"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d3561f79659ff3afad7b25e2bf2ec21507fe601ebecb7f81088669ec4bfd51e"
+dependencies = [
+ "bstr 1.9.0",
+ "mlua-sys",
+ "mlua_derive",
+ "num-traits",
+ "once_cell",
+ "rustc-hash",
+]
+
+[[package]]
+name = "mlua-sys"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2847b42764435201d8cbee1f517edb79c4cca4181877b90047587c89e1b7bce4"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "lua-src",
+ "luajit-src",
+ "pkg-config",
+]
+
+[[package]]
+name = "mlua_derive"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaade5f94e5829db58791664ba98f35fea6a3ffebc783becb51dc97c7a21abee"
+dependencies = [
+ "itertools 0.12.1",
+ "once_cell",
+ "proc-macro-error",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "regex",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "mock_instant"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c1a54de846c4006b88b1516731cc1f6026eb5dc4bcb186aa071ef66d40524ec"
+
+[[package]]
+name = "mongodb"
+version = "2.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de59562e5c71656c098d8e966641b31da87b89dc3dcb6e761d3b37dcdfa0cb72"
+dependencies = [
+ "async-trait",
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "bson",
+ "chrono",
+ "derivative",
+ "derive_more",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-util",
+ "hex",
+ "hmac",
+ "lazy_static",
+ "md-5",
+ "pbkdf2",
+ "percent-encoding",
+ "rand 0.8.5",
+ "rustc_version_runtime",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_bytes",
+ "serde_with 1.14.0",
+ "sha-1",
+ "sha2",
+ "socket2 0.4.10",
+ "stringprep",
+ "strsim 0.10.0",
+ "take_mut",
+ "thiserror",
+ "tokio",
+ "tokio-rustls",
+ "tokio-util",
+ "trust-dns-proto",
+ "trust-dns-resolver",
+ "typed-builder 0.10.0",
+ "uuid",
+ "webpki-roots",
+]
+
+[[package]]
+name = "multer"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a15d522be0a9c3e46fd2632e272d178f56387bdb5c9fbb3a36c649062e9b5219"
+dependencies = [
+ "bytes 1.5.0",
+ "encoding_rs",
+ "futures-util",
+ "http 1.0.0",
+ "httparse",
+ "log",
+ "memchr",
+ "mime",
+ "spin 0.9.8",
+ "version_check",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "ndarray"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32"
+dependencies = [
+ "matrixmultiply",
+ "num-complex",
+ "num-integer",
+ "num-traits",
+ "rawpointer",
+]
+
+[[package]]
+name = "ndarray-stats"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af5a8477ac96877b5bd1fd67e0c28736c12943aba24eda92b127e036b0c8f400"
+dependencies = [
+ "indexmap 1.9.3",
+ "itertools 0.10.5",
+ "ndarray",
+ "noisy_float",
+ "num-integer",
+ "num-traits",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
+dependencies = [
+ "bitflags 1.3.2",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "git+https://github.com/vectordotdev/nix.git?branch=memfd/gnu/musl#6c53a918d2d5bf4307fd60a19d9e10913ae71eeb"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "static_assertions",
+]
+
+[[package]]
+name = "nix"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "nkeys"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aad178aad32087b19042ee36dfd450b73f5f934fbfb058b59b198684dfec4c47"
+dependencies = [
+ "byteorder",
+ "data-encoding",
+ "ed25519",
+ "ed25519-dalek",
+ "getrandom 0.2.12",
+ "log",
+ "rand 0.8.5",
+ "signatory",
+]
+
+[[package]]
+name = "nkeys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6eafe79aeb8066a6f1f84dc44c03ae97403013e946bf0b13626468e0d5e26c6f"
+dependencies = [
+ "byteorder",
+ "data-encoding",
+ "ed25519",
+ "ed25519-dalek",
+ "getrandom 0.2.12",
+ "log",
+ "rand 0.8.5",
+ "signatory",
+]
+
+[[package]]
+name = "no-proxy"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b41e7479dc3678ea792431e04bafd62a31879035f4a5fa707602df062f58c77"
+dependencies = [
+ "cidr-utils 0.5.11",
+ "serde",
+]
+
+[[package]]
+name = "no-std-compat"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c"
+
+[[package]]
+name = "noisy_float"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978fe6e6ebc0bf53de533cd456ca2d9de13de13856eda1518a285d7705a213af"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nonzero_ext"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21"
+
+[[package]]
+name = "notify"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
+dependencies = [
+ "bitflags 2.4.1",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "log",
+ "mio",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.7"
+source = "git+https://github.com/MSxDOS/ntapi.git?rev=24fc1e47677fc9f6e38e5f154e6011dc9b270da6#24fc1e47677fc9f6e38e5f154e6011dc9b270da6"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "nuid"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc895af95856f929163a0aa20c26a78d26bfdc839f51b9d5aa7a5b79e52b7e83"
+dependencies = [
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint-dig"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
+dependencies = [
+ "byteorder",
+ "lazy_static",
+ "libm",
+ "num-integer",
+ "num-iter",
+ "num-traits",
+ "rand 0.8.5",
+ "smallvec",
+ "zeroize",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-format"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3"
+dependencies = [
+ "arrayvec",
+ "itoa",
+ "num-bigint",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive 0.5.11",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1"
+dependencies = [
+ "num_enum_derive 0.6.1",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845"
+dependencies = [
+ "num_enum_derive 0.7.2",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
+dependencies = [
+ "proc-macro-crate 2.0.0",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "oauth2"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c38841cdd844847e3e7c8d29cef9dcfed8877f8f56f9071f77843ecf3baf937f"
+dependencies = [
+ "base64 0.13.1",
+ "chrono",
+ "getrandom 0.2.12",
+ "http 0.2.9",
+ "rand 0.8.5",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "sha2",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ofb"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cc40678e045ff4eb1666ea6c0f994b133c31f673c09aed292261b6d5b6963a0"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "onig"
+version = "6.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "once_cell",
+ "onig_sys",
+]
+
+[[package]]
+name = "onig_sys"
+version = "69.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "opendal"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3350be0d4ba326017ce22c98a9e94d21b069160fcd95bbe6c2555dac4e93c47a"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "backon",
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "chrono",
+ "flagset",
+ "futures 0.3.30",
+ "getrandom 0.2.12",
+ "http 0.2.9",
+ "log",
+ "md-5",
+ "once_cell",
+ "percent-encoding",
+ "quick-xml 0.30.0",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tokio",
+ "uuid",
+]
+
+[[package]]
+name = "openidconnect"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62d6050f6a84b81f23c569f5607ad883293e57491036e318fafe6fc4895fadb1"
+dependencies = [
+ "base64 0.13.1",
+ "chrono",
+ "dyn-clone",
+ "ed25519-dalek",
+ "hmac",
+ "http 0.2.9",
+ "itertools 0.10.5",
+ "log",
+ "oauth2",
+ "p256",
+ "p384",
+ "rand 0.8.5",
+ "rsa",
+ "serde",
+ "serde-value",
+ "serde_derive",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_plain",
+ "serde_with 3.6.1",
+ "sha2",
+ "subtle",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c9d69dd87a29568d4d017cfe8ec518706046a05184e5aea92d0af890b803c8"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "300.2.2+3.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bbfad0063610ac26ee79f7484739e2b07555a75c42453b89263830b5c8103bc"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "opentelemetry-proto"
+version = "0.1.0"
+dependencies = [
+ "bytes 1.5.0",
+ "chrono",
+ "hex",
+ "ordered-float 4.2.0",
+ "prost 0.12.3",
+ "prost-build 0.12.3",
+ "tonic",
+ "tonic-build 0.10.2",
+ "vector-core",
+ "vector-lookup",
+ "vrl",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "ordered-float"
+version = "2.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordered-float"
+version = "3.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordered-float"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "os_info"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e"
+dependencies = [
+ "log",
+ "winapi",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "outref"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owo-colors"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f"
+dependencies = [
+ "supports-color",
+]
+
+[[package]]
+name = "p256"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
+dependencies = [
+ "ecdsa",
+ "elliptic-curve",
+ "primeorder",
+ "sha2",
+]
+
+[[package]]
+name = "p384"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
+dependencies = [
+ "ecdsa",
+ "elliptic-curve",
+ "primeorder",
+ "sha2",
+]
+
+[[package]]
+name = "pad"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "parking"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.4.1",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "passt"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13242a5ce97f39a8095d03c8b273e91d09f2690c0b7d69a2af844941115bab24"
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e9ed2178b0575fff8e1b83b58ba6f75e727aafac2e1b6c795169ad3b17eb518"
+
+[[package]]
+name = "pem"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "pem"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3163d2912b7c3b52d651a055f2c7eec9ba5cd22d26ef75b8dd3a59980b185923"
+dependencies = [
+ "base64 0.21.7",
+ "serde",
+]
+
+[[package]]
+name = "pem-rfc7468"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+dependencies = [
+ "base64ct",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pest"
+version = "2.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "219c0dcc30b6a27553f9cc242972b67f75b60eb0db71f0b5462f38b058c41546"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e1288dbd7786462961e69bfd4df7848c1e37e8b74303dbdab82c3a9cdd2809"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1381c29a877c6d34b8c176e734f35d7f7f5b3adaefe940cb4d1bb7af94678e2e"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0934d6907f148c22a3acbda520c7eed243ad7487a30f51f6ce52b58b7077a8a"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.2.3",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a"
+dependencies = [
+ "phf_generator",
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared 0.11.2",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pinky-swear"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d894b67aa7a4bf295db5e85349078c604edaa6fa5c8721e8eca3c7729a27f2ac"
+dependencies = [
+ "doc-comment",
+ "flume",
+ "parking_lot",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "piper"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+dependencies = [
+ "atomic-waker",
+ "fastrand 2.0.1",
+ "futures-io",
+]
+
+[[package]]
+name = "pkcs1"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
+dependencies = [
+ "der",
+ "pkcs8",
+ "spki",
+]
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "platforms"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "989d43012e2ca1c4a02507c67282691a0a3207f9dc67cec596b43fe925b3d325"
+
+[[package]]
+name = "platforms"
+version = "3.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8"
+
+[[package]]
+name = "plotters"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "polling"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e53b6af1f60f36f8c2ac2aad5459d75a5a9b4be1e8cdd40264f315d78193e531"
+dependencies = [
+ "cfg-if",
+ "concurrent-queue",
+ "pin-project-lite",
+ "rustix 0.38.31",
+ "tracing 0.1.40",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "poly1305"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf"
+dependencies = [
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b"
+
+[[package]]
+name = "portpicker"
+version = "1.0.0"
+dependencies = [
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "postgres-openssl"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1de0ea6504e07ca78355a6fb88ad0f36cafe9e696cbc6717f16a207f3a60be72"
+dependencies = [
+ "futures 0.3.30",
+ "openssl",
+ "tokio",
+ "tokio-openssl",
+ "tokio-postgres",
+]
+
+[[package]]
+name = "postgres-protocol"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520"
+dependencies = [
+ "base64 0.21.7",
+ "byteorder",
+ "bytes 1.5.0",
+ "fallible-iterator",
+ "hmac",
+ "md-5",
+ "memchr",
+ "rand 0.8.5",
+ "sha2",
+ "stringprep",
+]
+
+[[package]]
+name = "postgres-types"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c"
+dependencies = [
+ "bytes 1.5.0",
+ "chrono",
+ "fallible-iterator",
+ "postgres-protocol",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "predicates"
+version = "3.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dfc28575c2e3f19cb3c73b93af36460ae898d426eba6fc15b9bd2a5220758a0"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "itertools 0.11.0",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "prettydiff"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ff1fec61082821f8236cf6c0c14e8172b62ce8a72a0eedc30d3b247bb68dc11"
+dependencies = [
+ "ansi_term",
+ "pad",
+ "prettytable-rs",
+ "structopt",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "prettytable-rs"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a"
+dependencies = [
+ "csv",
+ "encode_unicode 1.0.0",
+ "is-terminal",
+ "lazy_static",
+ "term",
+ "unicode-width",
+]
+
+[[package]]
+name = "primeorder"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
+dependencies = [
+ "elliptic-curve",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
+dependencies = [
+ "toml_edit 0.20.7",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro-nested"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+dependencies = [
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prometheus-parser"
+version = "0.1.0"
+dependencies = [
+ "indexmap 2.2.3",
+ "nom",
+ "num_enum 0.7.2",
+ "prost 0.12.3",
+ "prost-build 0.12.3",
+ "prost-types 0.12.3",
+ "snafu 0.7.5",
+ "vector-common",
+]
+
+[[package]]
+name = "proptest"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf"
+dependencies = [
+ "bit-set",
+ "bit-vec",
+ "bitflags 2.4.1",
+ "lazy_static",
+ "num-traits",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "rand_xorshift",
+ "regex-syntax 0.8.2",
+ "rusty-fork",
+ "tempfile",
+ "unarray",
+]
+
+[[package]]
+name = "proptest-derive"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf16337405ca084e9c78985114633b6827711d22b9e6ef6c6c0d665eb3f0b6e"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
+dependencies = [
+ "bytes 1.5.0",
+ "prost-derive 0.11.9",
+]
+
+[[package]]
+name = "prost"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a"
+dependencies = [
+ "bytes 1.5.0",
+ "prost-derive 0.12.3",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
+dependencies = [
+ "bytes 1.5.0",
+ "heck 0.4.1",
+ "itertools 0.10.5",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prettyplease 0.1.25",
+ "prost 0.11.9",
+ "prost-types 0.11.9",
+ "regex",
+ "syn 1.0.109",
+ "tempfile",
+ "which 4.4.2",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2"
+dependencies = [
+ "bytes 1.5.0",
+ "heck 0.4.1",
+ "itertools 0.11.0",
+ "log",
+ "multimap",
+ "once_cell",
+ "petgraph",
+ "prettyplease 0.2.15",
+ "prost 0.12.3",
+ "prost-types 0.12.3",
+ "regex",
+ "syn 2.0.48",
+ "tempfile",
+ "which 4.4.2",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
+dependencies = [
+ "anyhow",
+ "itertools 0.10.5",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e"
+dependencies = [
+ "anyhow",
+ "itertools 0.11.0",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "prost-reflect"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ae9372e3227f3685376a0836e5c248611eafc95a0be900d44bc6cdf225b700f"
+dependencies = [
+ "base64 0.21.7",
+ "once_cell",
+ "prost 0.12.3",
+ "prost-types 0.12.3",
+ "serde",
+ "serde-value",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
+dependencies = [
+ "prost 0.11.9",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e"
+dependencies = [
+ "prost 0.12.3",
+]
+
+[[package]]
+name = "psl"
+version = "2.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc74a6e6a56708be1cf5c4c4d1a0dc21d33b2dcaa24e731b7fa9c287ce4f916f"
+dependencies = [
+ "psl-types",
+]
+
+[[package]]
+name = "psl-types"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac"
+
+[[package]]
+name = "ptr_meta"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
+dependencies = [
+ "ptr_meta_derive",
+]
+
+[[package]]
+name = "ptr_meta_derive"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pulsar"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d21c6a837986cf25d22ac5b951c267d95808f3c830ff009c2879fff259a0268"
+dependencies = [
+ "async-trait",
+ "bit-vec",
+ "bytes 1.5.0",
+ "chrono",
+ "crc",
+ "data-url",
+ "flate2",
+ "futures 0.3.30",
+ "futures-io",
+ "futures-timer",
+ "log",
+ "lz4",
+ "native-tls",
+ "nom",
+ "oauth2",
+ "openidconnect",
+ "pem 3.0.2",
+ "prost 0.11.9",
+ "prost-build 0.11.9",
+ "prost-derive 0.11.9",
+ "rand 0.8.5",
+ "regex",
+ "serde",
+ "serde_json",
+ "snap",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-util",
+ "url",
+ "uuid",
+ "zstd 0.12.4",
+]
+
+[[package]]
+name = "quad-rand"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658fa1faf7a4cc5f057c9ee5ef560f717ad9d8dc66d975267f709624d6e1ab88"
+
+[[package]]
+name = "quanta"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab"
+dependencies = [
+ "crossbeam-utils",
+ "libc",
+ "mach2",
+ "once_cell",
+ "raw-cpuid 10.7.0",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "quanta"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca0b7bac0b97248c40bb77288fc52029cf1459c0461ea1b05ee32ccf011de2c"
+dependencies = [
+ "crossbeam-utils",
+ "libc",
+ "once_cell",
+ "raw-cpuid 11.0.1",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quick-xml"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "quickcheck"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+dependencies = [
+ "env_logger 0.8.4",
+ "log",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "quickcheck_macros"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b22a693222d716a9587786f37ac3f6b4faedb5b80c23914e7303ff5a1d8016e9"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "quote"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+dependencies = [
+ "proc-macro2 0.4.30",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2 1.0.78",
+]
+
+[[package]]
+name = "quoted_printable"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79ec282e887b434b68c18fe5c121d38e72a5cf35119b59e54ec5b992ea9c8eb0"
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "radix_trie"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
+dependencies = [
+ "endian-type",
+ "nibble_vec",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.12",
+]
+
+[[package]]
+name = "rand_distr"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
+dependencies = [
+ "num-traits",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "ratatui"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "154b85ef15a5d1719bcaa193c3c81fe645cd120c156874cd660fe49fd21d1373"
+dependencies = [
+ "bitflags 2.4.1",
+ "cassowary",
+ "compact_str",
+ "crossterm",
+ "indoc",
+ "itertools 0.12.1",
+ "lru",
+ "paste",
+ "stability",
+ "strum 0.26.1",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "raw-cpuid"
+version = "10.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "raw-cpuid"
+version = "11.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d86a7c4638d42c44551f4791a20e687dbb4c3de1f33c43dd71e355cd429def1"
+dependencies = [
+ "bitflags 2.4.1",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "rawpointer"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "rdkafka"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f16c17f411935214a5870e40aff9291f8b40a73e97bf8de29e5959c473d5ef33"
+dependencies = [
+ "futures-channel",
+ "futures-util",
+ "libc",
+ "log",
+ "rdkafka-sys",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "slab",
+ "tokio",
+]
+
+[[package]]
+name = "rdkafka-sys"
+version = "4.7.0+2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55e0d2f9ba6253f6ec72385e453294f8618e9e15c2c6aba2a5c01ccf9622d615"
+dependencies = [
+ "cmake",
+ "libc",
+ "libz-sys",
+ "num_enum 0.5.11",
+ "openssl-sys",
+ "pkg-config",
+ "sasl2-sys",
+ "zstd-sys",
+]
+
+[[package]]
+name = "reactor-trait"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "438a4293e4d097556730f4711998189416232f009c137389e0f961d2bc0ddc58"
+dependencies = [
+ "async-trait",
+ "futures-core",
+ "futures-io",
+]
+
+[[package]]
+name = "redis"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c580d9cbbe1d1b479e8d67cf9daf6a62c957e6846048408b80b43ac3f6af84cd"
+dependencies = [
+ "arc-swap",
+ "async-trait",
+ "bytes 1.5.0",
+ "combine 4.6.6",
+ "futures 0.3.30",
+ "futures-util",
+ "itoa",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+ "ryu",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-retry",
+ "tokio-util",
+ "url",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.12",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.4",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-lite"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b661b2f27137bdbc16f00eda72866a92bb28af1753ffbd56744fb6e2e9cd8e"
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "relative-path"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c707298afce11da2efef2f600116fa93ffa7a032b5d7b628aa17711ec81383ca"
+
+[[package]]
+name = "rend"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd"
+dependencies = [
+ "bytecheck",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251"
+dependencies = [
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2 0.3.24",
+ "http 0.2.9",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "sync_wrapper",
+ "system-configuration",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "retain_mut"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086"
+
+[[package]]
+name = "rfc6979"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+dependencies = [
+ "hmac",
+ "subtle",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
+dependencies = [
+ "cc",
+ "getrandom 0.2.12",
+ "libc",
+ "spin 0.9.8",
+ "untrusted",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rkyv"
+version = "0.7.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0"
+dependencies = [
+ "bitvec",
+ "bytecheck",
+ "bytes 1.5.0",
+ "hashbrown 0.12.3",
+ "ptr_meta",
+ "rend",
+ "rkyv_derive",
+ "seahash",
+ "tinyvec",
+ "uuid",
+]
+
+[[package]]
+name = "rkyv_derive"
+version = "0.7.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "rle-decode-fast"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
+
+[[package]]
+name = "rmp"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20"
+dependencies = [
+ "byteorder",
+ "num-traits",
+ "paste",
+]
+
+[[package]]
+name = "rmp-serde"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bffea85eea980d8a74453e5d02a8d93028f3c34725de143085a844ebe953258a"
+dependencies = [
+ "byteorder",
+ "rmp",
+ "serde",
+]
+
+[[package]]
+name = "rmpv"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e0e0214a4a2b444ecce41a4025792fc31f77c7bb89c46d253953ea8c65701ec"
+dependencies = [
+ "num-traits",
+ "rmp",
+ "serde",
+ "serde_bytes",
+]
+
+[[package]]
+name = "roaring"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6106b5cf8587f5834158895e9715a3c6c9716c8aefab57f1f7680917191c7873"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "retain_mut",
+]
+
+[[package]]
+name = "roxmltree"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f"
+
+[[package]]
+name = "rsa"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ef35bf3e7fe15a53c4ab08a998e42271eab13eb0db224126bc7bc4c4bad96d"
+dependencies = [
+ "const-oid",
+ "digest",
+ "num-bigint-dig",
+ "num-integer",
+ "num-traits",
+ "pkcs1",
+ "pkcs8",
+ "rand_core 0.6.4",
+ "signature",
+ "spki",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rstest"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199"
+dependencies = [
+ "futures 0.3.30",
+ "futures-timer",
+ "rstest_macros",
+ "rustc_version 0.4.0",
+]
+
+[[package]]
+name = "rstest_macros"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d428f8247852f894ee1be110b375111b586d4fa431f6c46e64ba5a0dcccbe605"
+dependencies = [
+ "cfg-if",
+ "glob",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "regex",
+ "relative-path",
+ "rustc_version 0.4.0",
+ "syn 2.0.48",
+ "unicode-ident",
+]
+
+[[package]]
+name = "rust_decimal"
+version = "1.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06676aec5ccb8fc1da723cc8c0f9a46549f21ebb8753d3915c6c41db1e7f1dc4"
+dependencies = [
+ "arrayvec",
+ "borsh",
+ "bytes 1.5.0",
+ "num-traits",
+ "rand 0.8.5",
+ "rkyv",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.21",
+]
+
+[[package]]
+name = "rustc_version_runtime"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f"
+dependencies = [
+ "rustc_version 0.2.3",
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.12",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.7",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "rusty-fork"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
+dependencies = [
+ "fnv",
+ "quick-error",
+ "tempfile",
+ "wait-timeout",
+]
+
+[[package]]
+name = "rustyline"
+version = "13.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "clipboard-win",
+ "libc",
+ "log",
+ "memchr",
+ "nix 0.27.1",
+ "unicode-segmentation",
+ "unicode-width",
+ "utf8parse",
+ "winapi",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+
+[[package]]
+name = "salsa20"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "sasl2-sys"
+version = "0.1.20+2.1.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e645bd98535fc8fd251c43ba7c7c1f9be1e0369c99b6a5ea719052a773e655c"
+dependencies = [
+ "cc",
+ "duct",
+ "krb5-src",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "scan_fmt"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b53b0a5db882a8e2fdaae0a43f7b39e7e9082389e978398bdf223a55b581248"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "seahash"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
+
+[[package]]
+name = "sec1"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+dependencies = [
+ "base16ct",
+ "der",
+ "generic-array",
+ "pkcs8",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "secrecy"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
+dependencies = [
+ "serde",
+ "zeroize",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-toml-merge"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc6244d74ff29bd838ad4cfc9184e3f5d0011500acc8d3fb96708211d4edfb26"
+dependencies = [
+ "toml",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+ "ordered-float 2.10.1",
+ "serde",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9b713f70513ae1f8d92665bbbbda5c295c2cf1da5542881ae5eefe20c9af132"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "330f01ce65a3a5fe59a60c82f3c9a024b573b8a6e875bd233fe5f934e71d54e3"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.113"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
+dependencies = [
+ "indexmap 2.2.3",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_nanos"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae801b7733ca8d6a2b580debe99f67f36826a0f5b8a36055dc6bc40f8d6bc71"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
+dependencies = [
+ "itoa",
+ "serde",
+]
+
+[[package]]
+name = "serde_plain"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6"
+dependencies = [
+ "percent-encoding",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde",
+ "serde_with_macros 1.5.2",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270"
+dependencies = [
+ "base64 0.21.7",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "indexmap 2.2.3",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_with_macros 3.6.1",
+ "time",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling 0.13.4",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "3.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d"
+dependencies = [
+ "darling 0.20.5",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap 1.9.3",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adf8a49373e98a4c5f0ceb5d05aa7c648d75f63774981ed95b7c7443bbd50c6e"
+dependencies = [
+ "indexmap 2.2.3",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha3"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
+dependencies = [
+ "digest",
+ "keccak",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shared_child"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signatory"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1e303f8205714074f6068773f0e29527e0453937fe837c9717d066635b65f31"
+dependencies = [
+ "pkcs8",
+ "rand_core 0.6.4",
+ "signature",
+ "zeroize",
+]
+
+[[package]]
+name = "signature"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fe458c98333f9c8152221191a77e2a44e8325d0193484af2e9421a53019e57d"
+dependencies = [
+ "digest",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "simdutf8"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
+
+[[package]]
+name = "similar"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597"
+dependencies = [
+ "bstr 0.2.17",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "similar-asserts"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e041bb827d1bfca18f213411d51b665309f1afb37a04a5d1464530e13779fc0f"
+dependencies = [
+ "console",
+ "similar",
+]
+
+[[package]]
+name = "simpl"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a30f10c911c0355f80f1c2faa8096efc4a58cdf8590b954d5b395efa071c711"
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "sketches-ddsketch"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68a406c1882ed7f29cd5e248c9848a80e7cb6ae0fea82346d2746f2f941c07e1"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "smol"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-fs",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "async-net",
+ "async-process",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "smpl_jwt"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff23fdd767425c13e6f354b7443b3cc0c23097ae077e2211ef8143fa68ad014"
+dependencies = [
+ "base64 0.21.7",
+ "log",
+ "openssl",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "simpl",
+ "time",
+]
+
+[[package]]
+name = "snafu"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6"
+dependencies = [
+ "doc-comment",
+ "futures-core",
+ "pin-project",
+ "snafu-derive 0.7.5",
+]
+
+[[package]]
+name = "snafu"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d342c51730e54029130d7dc9fd735d28c4cd360f1368c01981d4f03ff207f096"
+dependencies = [
+ "snafu-derive 0.8.0",
+]
+
+[[package]]
+name = "snafu-derive"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "snafu-derive"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080c44971436b1af15d6f61ddd8b543995cf63ab8e677d46b00cc06f4ef267a0"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "snap"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "stability"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd1b177894da2a2d9120208c3386066af06a488255caabc5de8ddca22dbc3ce"
+dependencies = [
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "static_assertions_next"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7beae5182595e9a8b683fa98c4317f956c9a2dec3b9716990d20023cc60c766"
+
+[[package]]
+name = "stream-cancel"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9fbf9bd71e4cf18d68a8a0951c0e5b7255920c0cd992c4ff51cddd6ef514a3"
+dependencies = [
+ "futures-core",
+ "pin-project",
+ "tokio",
+]
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "stringprep"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6"
+dependencies = [
+ "finl_unicode",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "strip-ansi-escapes"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ff8ef943b384c414f54aefa961dd2bd853add74ec75e7ac74cf91dba62bcfa"
+dependencies = [
+ "vte",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap 2.34.0",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro-error",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+dependencies = [
+ "strum_macros 0.25.3",
+]
+
+[[package]]
+name = "strum"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "723b93e8addf9aa965ebe2d11da6d7540fa2283fcea14b3371ff055f7ba13f5f"
+dependencies = [
+ "strum_macros 0.26.1",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "rustversion",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a3417fc93d76740d974a01654a09777cb500428cc874ca9f45edfe0c4d4cd18"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "rustversion",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "supports-color"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89"
+dependencies = [
+ "is-terminal",
+ "is_ci",
+]
+
+[[package]]
+name = "syn"
+version = "0.15.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "syslog"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7434e95bcccce1215d30f4bf84fe8c00e8de1b9be4fb736d747ca53d36e7f96f"
+dependencies = [
+ "error-chain",
+ "hostname",
+ "libc",
+ "log",
+ "time",
+]
+
+[[package]]
+name = "syslog_loose"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "161028c00842709450114c39db3b29f44c898055ed8833bb9b535aba7facf30e"
+dependencies = [
+ "chrono",
+ "nom",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "take_mut"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60"
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tcp-stream"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4da30af7998f51ee1aa48ab24276fe303a697b004e31ff542b192c088d5630a5"
+dependencies = [
+ "cfg-if",
+ "native-tls",
+ "rustls-pemfile",
+]
+
+[[package]]
+name = "temp-dir"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd16aa9ffe15fe021c6ee3766772132c6e98dfa395a167e16864f61a9cfb71d6"
+
+[[package]]
+name = "tempfile"
+version = "3.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67"
+dependencies = [
+ "cfg-if",
+ "fastrand 2.0.1",
+ "rustix 0.38.31",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "test-generator"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b23be2add79223226e1cb6446cb3e37506a5927089870687a0f1149bb7a073a"
+dependencies = [
+ "glob",
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tikv-jemalloc-sys"
+version = "0.5.4+5.3.0-patched"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "tikv-jemallocator"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "965fe0c26be5c56c94e38ba547249074803efd52adfb66de62107d95aab3eaca"
+dependencies = [
+ "libc",
+ "tikv-jemalloc-sys",
+]
+
+[[package]]
+name = "time"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+dependencies = [
+ "deranged",
+ "itoa",
+ "js-sys",
+ "libc",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931"
+dependencies = [
+ "backtrace",
+ "bytes 1.5.0",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.5",
+ "tokio-macros",
+ "tracing 0.1.40",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-io"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
+dependencies = [
+ "bytes 0.4.12",
+ "futures 0.1.31",
+ "log",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-openssl"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ffab79df67727f6acf57f1ff743091873c24c579b1e2ce4d8f53e47ded4d63d"
+dependencies = [
+ "futures-util",
+ "openssl",
+ "openssl-sys",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-postgres"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8"
+dependencies = [
+ "async-trait",
+ "byteorder",
+ "bytes 1.5.0",
+ "fallible-iterator",
+ "futures-channel",
+ "futures-util",
+ "log",
+ "parking_lot",
+ "percent-encoding",
+ "phf",
+ "pin-project-lite",
+ "postgres-protocol",
+ "postgres-types",
+ "rand 0.8.5",
+ "socket2 0.5.5",
+ "tokio",
+ "tokio-util",
+ "whoami",
+]
+
+[[package]]
+name = "tokio-retry"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f"
+dependencies = [
+ "pin-project",
+ "rand 0.8.5",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-test"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89b3cbabd3ae862100094ae433e1def582cf86451b4e9bf83aa7ac1d8a7d719"
+dependencies = [
+ "async-stream",
+ "bytes 1.5.0",
+ "futures-core",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c"
+dependencies = [
+ "futures-util",
+ "log",
+ "rustls",
+ "tokio",
+ "tungstenite",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "git+https://github.com/vectordotdev/tokio?branch=tokio-util-0.7.8-framed-read-continue-on-error#3747655f8f0443e13fe20da3f613ea65c23347c2"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "pin-project-lite",
+ "slab",
+ "tokio",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.22.4",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap 2.2.3",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+dependencies = [
+ "indexmap 2.2.3",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.22.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c9ffdf896f8daaabf9b66ba8e77ea1ed5ed0f72821b398aba62352e95062951"
+dependencies = [
+ "indexmap 2.2.3",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tonic"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "axum",
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "flate2",
+ "h2 0.3.24",
+ "http 0.2.9",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost 0.12.3",
+ "rustls",
+ "rustls-native-certs",
+ "rustls-pemfile",
+ "tokio",
+ "tokio-rustls",
+ "tokio-stream",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "tonic-build"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
+dependencies = [
+ "prettyplease 0.1.25",
+ "proc-macro2 1.0.78",
+ "prost-build 0.11.9",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "tonic-build"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d021fc044c18582b9a2408cd0dd05b1596e3ecdb5c4df822bb0183545683889"
+dependencies = [
+ "prettyplease 0.2.15",
+ "proc-macro2 1.0.78",
+ "prost-build 0.12.3",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap 1.9.3",
+ "pin-project",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
+dependencies = [
+ "async-compression",
+ "base64 0.21.7",
+ "bitflags 2.4.1",
+ "bytes 1.5.0",
+ "futures-core",
+ "futures-util",
+ "http 0.2.9",
+ "http-body",
+ "http-range-header",
+ "mime",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tower-test"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4546773ffeab9e4ea02b8872faa49bb616a80a7da66afc2f32688943f97efa7"
+dependencies = [
+ "futures-util",
+ "pin-project",
+ "tokio",
+ "tokio-test",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core 0.1.32",
+]
+
+[[package]]
+name = "tracing"
+version = "0.2.0"
+source = "git+https://github.com/tokio-rs/tracing?rev=e0642d949891546a3bb7e47080365ee7274f05cd#e0642d949891546a3bb7e47080365ee7274f05cd"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-core 0.2.0",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.2.0"
+source = "git+https://github.com/tokio-rs/tracing?rev=e0642d949891546a3bb7e47080365ee7274f05cd#e0642d949891546a3bb7e47080365ee7274f05cd"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "tracing-fluent-assertions"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12de1a8c6bcfee614305e836308b596bbac831137a04c61f7e5b0b0bf2cfeaf6"
+dependencies = [
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "futures 0.3.30",
+ "futures-task",
+ "pin-project",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.3.0"
+source = "git+https://github.com/tokio-rs/tracing?rev=e0642d949891546a3bb7e47080365ee7274f05cd#e0642d949891546a3bb7e47080365ee7274f05cd"
+dependencies = [
+ "pin-project-lite",
+ "tracing 0.2.0",
+]
+
+[[package]]
+name = "tracing-limit"
+version = "0.1.0"
+dependencies = [
+ "criterion",
+ "dashmap",
+ "mock_instant",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core 0.1.32",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+dependencies = [
+ "serde",
+ "tracing-core 0.1.32",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "sharded-slab",
+ "thread_local",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-log",
+ "tracing-serde",
+]
+
+[[package]]
+name = "tracing-tower"
+version = "0.1.0"
+source = "git+https://github.com/tokio-rs/tracing?rev=e0642d949891546a3bb7e47080365ee7274f05cd#e0642d949891546a3bb7e47080365ee7274f05cd"
+dependencies = [
+ "futures 0.3.30",
+ "tower-service",
+ "tracing 0.2.0",
+ "tracing-futures 0.3.0",
+]
+
+[[package]]
+name = "treediff"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303"
+dependencies = [
+ "serde_json",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner 0.4.0",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.2.3",
+ "ipnet",
+ "lazy_static",
+ "log",
+ "rand 0.8.5",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig",
+ "lazy_static",
+ "log",
+ "lru-cache",
+ "parking_lot",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "tungstenite"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9"
+dependencies = [
+ "byteorder",
+ "bytes 1.5.0",
+ "data-encoding",
+ "http 0.2.9",
+ "httparse",
+ "log",
+ "rand 0.8.5",
+ "sha1",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if",
+ "static_assertions",
+]
+
+[[package]]
+name = "typed-builder"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "typed-builder"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34085c17941e36627a879208083e25d357243812c30e7d7387c3b954f30ade16"
+dependencies = [
+ "typed-builder-macro",
+]
+
+[[package]]
+name = "typed-builder-macro"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f03ca4cb38206e2bef0700092660bb74d696f808514dae47fa1467cbfe26e96e"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "typetag"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43148481c7b66502c48f35b8eef38b6ccdc7a9f04bd4cc294226d901ccc9bc7"
+dependencies = [
+ "erased-serde",
+ "inventory",
+ "once_cell",
+ "serde",
+ "typetag-impl",
+]
+
+[[package]]
+name = "typetag-impl"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291db8a81af4840c10d636e047cac67664e343be44e24dfdbd1492df9a5d3390"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "tz-rs"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33851b15c848fad2cf4b105c6bb66eb9512b6f6c44a4b13f57c53c73c707e2b4"
+dependencies = [
+ "const_fn",
+]
+
+[[package]]
+name = "uaparser"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf694e7b0434d4fad6c879e984e8fdc3a62f5533c3d421762244f9e9d03f6927"
+dependencies = [
+ "derive_more",
+ "lazy_static",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_yaml 0.8.26",
+]
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "unarray"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
+
+[[package]]
+name = "unicase"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "universal-hash"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
+dependencies = [
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "unreachable"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
+dependencies = [
+ "void",
+]
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "uom"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1ee6bfd0a27bf614353809a035cf6880b74239ec6c5e39a7b2860ca16809137"
+dependencies = [
+ "num-rational",
+ "num-traits",
+ "typenum",
+]
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.5.0",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8-width"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a"
+dependencies = [
+ "getrandom 0.2.12",
+ "rand 0.8.5",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vdev"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "cached",
+ "chrono",
+ "clap 4.4.18",
+ "clap-verbosity-flag",
+ "clap_complete",
+ "confy",
+ "directories",
+ "dunce",
+ "glob",
+ "hex",
+ "indexmap 2.2.3",
+ "indicatif",
+ "itertools 0.12.1",
+ "log",
+ "once_cell",
+ "os_info",
+ "owo-colors",
+ "paste",
+ "regex",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.31",
+ "sha2",
+ "tempfile",
+ "toml",
+]
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "vector"
+version = "0.36.0"
+dependencies = [
+ "apache-avro",
+ "approx",
+ "arc-swap",
+ "arr_macro",
+ "assert_cmd",
+ "async-compression",
+ "async-graphql",
+ "async-graphql-warp",
+ "async-nats",
+ "async-stream",
+ "async-trait",
+ "aws-config",
+ "aws-credential-types",
+ "aws-sdk-cloudwatch",
+ "aws-sdk-cloudwatchlogs",
+ "aws-sdk-elasticsearch",
+ "aws-sdk-firehose",
+ "aws-sdk-kinesis",
+ "aws-sdk-s3",
+ "aws-sdk-sns",
+ "aws-sdk-sqs",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "axum",
+ "azure_core",
+ "azure_identity",
+ "azure_storage",
+ "azure_storage_blobs",
+ "base64 0.21.7",
+ "bloomy",
+ "bollard",
+ "bytes 1.5.0",
+ "bytesize",
+ "chrono",
+ "chrono-tz",
+ "cidr-utils 0.6.1",
+ "clap 4.4.18",
+ "colored",
+ "console-subscriber",
+ "criterion",
+ "crossterm",
+ "csv",
+ "derivative",
+ "dirs-next",
+ "dnsmsg-parser",
+ "dyn-clone",
+ "encoding_rs",
+ "enum_dispatch",
+ "exitcode",
+ "fakedata",
+ "flate2",
+ "futures 0.3.30",
+ "futures-util",
+ "glob",
+ "goauth",
+ "governor",
+ "greptimedb-client",
+ "grok",
+ "h2 0.4.2",
+ "hash_hasher",
+ "hashbrown 0.14.3",
+ "headers",
+ "heim",
+ "hex",
+ "hickory-proto",
+ "hostname",
+ "http 0.2.9",
+ "http-body",
+ "http-serde",
+ "hyper",
+ "hyper-openssl",
+ "hyper-proxy",
+ "indexmap 2.2.3",
+ "indoc",
+ "infer 0.15.0",
+ "inventory",
+ "itertools 0.12.1",
+ "k8s-openapi 0.18.0",
+ "kube",
+ "lapin",
+ "libc",
+ "listenfd",
+ "logfmt",
+ "loki-logproto",
+ "lru",
+ "maxminddb",
+ "md-5",
+ "metrics",
+ "metrics-tracing-context",
+ "mlua",
+ "mongodb",
+ "nix 0.26.2",
+ "nkeys 0.4.0",
+ "nom",
+ "notify",
+ "num-format",
+ "number_prefix",
+ "once_cell",
+ "opendal",
+ "openssl",
+ "openssl-probe",
+ "openssl-src",
+ "ordered-float 4.2.0",
+ "paste",
+ "percent-encoding",
+ "pin-project",
+ "portpicker",
+ "postgres-openssl",
+ "proptest",
+ "prost 0.12.3",
+ "prost-build 0.12.3",
+ "prost-reflect",
+ "prost-types 0.12.3",
+ "pulsar",
+ "quickcheck",
+ "rand 0.8.5",
+ "rand_distr",
+ "ratatui",
+ "rdkafka",
+ "redis",
+ "regex",
+ "reqwest",
+ "rmp-serde",
+ "rmpv",
+ "roaring",
+ "rstest",
+ "seahash",
+ "semver 1.0.21",
+ "serde",
+ "serde-toml-merge",
+ "serde_bytes",
+ "serde_json",
+ "serde_with 3.6.1",
+ "serde_yaml 0.9.31",
+ "sha2",
+ "similar-asserts",
+ "smallvec",
+ "smpl_jwt",
+ "snafu 0.7.5",
+ "snap",
+ "socket2 0.5.5",
+ "stream-cancel",
+ "strip-ansi-escapes",
+ "syslog",
+ "tempfile",
+ "test-generator",
+ "tikv-jemallocator",
+ "tokio",
+ "tokio-openssl",
+ "tokio-postgres",
+ "tokio-stream",
+ "tokio-test",
+ "tokio-tungstenite",
+ "tokio-util",
+ "toml",
+ "tonic",
+ "tonic-build 0.10.2",
+ "tower",
+ "tower-http",
+ "tower-test",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-futures 0.2.5",
+ "tracing-limit",
+ "tracing-subscriber",
+ "tracing-tower",
+ "typetag",
+ "url",
+ "uuid",
+ "vector-lib",
+ "vector-vrl-functions",
+ "vrl",
+ "warp",
+ "windows-service",
+ "wiremock",
+ "zstd 0.13.0",
+]
+
+[[package]]
+name = "vector-api-client"
+version = "0.1.2"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "chrono",
+ "clap 4.4.18",
+ "futures 0.3.30",
+ "graphql_client",
+ "indoc",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tokio-stream",
+ "tokio-tungstenite",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "vector-buffers"
+version = "0.1.0"
+dependencies = [
+ "async-recursion",
+ "async-stream",
+ "async-trait",
+ "bytecheck",
+ "bytes 1.5.0",
+ "clap 4.4.18",
+ "crc32fast",
+ "criterion",
+ "crossbeam-queue",
+ "crossbeam-utils",
+ "derivative",
+ "fslock",
+ "futures 0.3.30",
+ "hdrhistogram",
+ "memmap2",
+ "metrics",
+ "metrics-tracing-context",
+ "metrics-util",
+ "num-traits",
+ "once_cell",
+ "paste",
+ "pin-project",
+ "proptest",
+ "quickcheck",
+ "rand 0.8.5",
+ "rkyv",
+ "serde",
+ "serde_yaml 0.9.31",
+ "snafu 0.7.5",
+ "temp-dir",
+ "tokio",
+ "tokio-test",
+ "tokio-util",
+ "tracing 0.1.40",
+ "tracing-fluent-assertions",
+ "tracing-subscriber",
+ "vector-common",
+ "vector-config",
+ "vector-config-common",
+ "vector-config-macros",
+]
+
+[[package]]
+name = "vector-common"
+version = "0.1.0"
+dependencies = [
+ "async-stream",
+ "bytes 1.5.0",
+ "chrono",
+ "chrono-tz",
+ "crossbeam-utils",
+ "derivative",
+ "futures 0.3.30",
+ "indexmap 2.2.3",
+ "metrics",
+ "nom",
+ "ordered-float 4.2.0",
+ "paste",
+ "pin-project",
+ "quickcheck",
+ "quickcheck_macros",
+ "ryu",
+ "serde",
+ "serde_json",
+ "smallvec",
+ "snafu 0.7.5",
+ "stream-cancel",
+ "tokio",
+ "tracing 0.1.40",
+ "vector-config",
+ "vector-config-common",
+ "vector-config-macros",
+ "vrl",
+]
+
+[[package]]
+name = "vector-config"
+version = "0.1.0"
+dependencies = [
+ "assert-json-diff",
+ "chrono",
+ "chrono-tz",
+ "encoding_rs",
+ "http 0.2.9",
+ "indexmap 2.2.3",
+ "inventory",
+ "no-proxy",
+ "num-traits",
+ "serde",
+ "serde_json",
+ "serde_with 3.6.1",
+ "snafu 0.7.5",
+ "toml",
+ "tracing 0.1.40",
+ "url",
+ "vector-config-common",
+ "vector-config-macros",
+ "vector-core",
+ "vrl",
+]
+
+[[package]]
+name = "vector-config-common"
+version = "0.1.0"
+dependencies = [
+ "convert_case 0.6.0",
+ "darling 0.20.5",
+ "once_cell",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "serde",
+ "serde_json",
+ "syn 2.0.48",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "vector-config-macros"
+version = "0.1.0"
+dependencies = [
+ "darling 0.20.5",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "serde",
+ "serde_derive_internals",
+ "syn 2.0.48",
+ "vector-config",
+ "vector-config-common",
+]
+
+[[package]]
+name = "vector-core"
+version = "0.1.0"
+dependencies = [
+ "async-graphql",
+ "async-trait",
+ "base64 0.21.7",
+ "bitmask-enum",
+ "bytes 1.5.0",
+ "chrono",
+ "chrono-tz",
+ "criterion",
+ "crossbeam-utils",
+ "db-key",
+ "dyn-clone",
+ "enrichment",
+ "enumflags2",
+ "env-test-util",
+ "float_eq",
+ "futures 0.3.30",
+ "futures-util",
+ "headers",
+ "http 0.2.9",
+ "hyper-proxy",
+ "indexmap 2.2.3",
+ "metrics",
+ "metrics-tracing-context",
+ "metrics-util",
+ "mlua",
+ "ndarray",
+ "ndarray-stats",
+ "no-proxy",
+ "noisy_float",
+ "once_cell",
+ "openssl",
+ "ordered-float 4.2.0",
+ "parking_lot",
+ "pin-project",
+ "proptest",
+ "prost 0.12.3",
+ "prost-build 0.12.3",
+ "prost-types 0.12.3",
+ "quanta 0.12.2",
+ "quickcheck",
+ "quickcheck_macros",
+ "rand 0.8.5",
+ "rand_distr",
+ "regex",
+ "ryu",
+ "schannel",
+ "security-framework",
+ "serde",
+ "serde_json",
+ "serde_with 3.6.1",
+ "serde_yaml 0.9.31",
+ "similar-asserts",
+ "smallvec",
+ "snafu 0.7.5",
+ "socket2 0.5.5",
+ "tokio",
+ "tokio-openssl",
+ "tokio-stream",
+ "tokio-test",
+ "tokio-util",
+ "toml",
+ "tonic",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-subscriber",
+ "typetag",
+ "url",
+ "vector-buffers",
+ "vector-common",
+ "vector-config",
+ "vector-config-common",
+ "vector-config-macros",
+ "vector-lookup",
+ "vrl",
+]
+
+[[package]]
+name = "vector-lib"
+version = "0.1.0"
+dependencies = [
+ "codecs",
+ "enrichment",
+ "file-source",
+ "opentelemetry-proto",
+ "prometheus-parser",
+ "vector-api-client",
+ "vector-buffers",
+ "vector-common",
+ "vector-config",
+ "vector-core",
+ "vector-lookup",
+ "vector-stream",
+]
+
+[[package]]
+name = "vector-lookup"
+version = "0.1.0"
+dependencies = [
+ "proptest",
+ "proptest-derive",
+ "serde",
+ "vector-config",
+ "vector-config-macros",
+ "vrl",
+]
+
+[[package]]
+name = "vector-stream"
+version = "0.1.0"
+dependencies = [
+ "async-stream",
+ "futures 0.3.30",
+ "futures-util",
+ "pin-project",
+ "proptest",
+ "rand 0.8.5",
+ "rand_distr",
+ "tokio",
+ "tokio-util",
+ "tower",
+ "tracing 0.1.40",
+ "twox-hash",
+ "vector-common",
+ "vector-core",
+]
+
+[[package]]
+name = "vector-vrl-cli"
+version = "0.1.0"
+dependencies = [
+ "clap 4.4.18",
+ "vector-vrl-functions",
+ "vrl",
+]
+
+[[package]]
+name = "vector-vrl-functions"
+version = "0.1.0"
+dependencies = [
+ "vrl",
+]
+
+[[package]]
+name = "vector-vrl-tests"
+version = "0.1.0"
+dependencies = [
+ "ansi_term",
+ "chrono",
+ "chrono-tz",
+ "clap 4.4.18",
+ "enrichment",
+ "glob",
+ "prettydiff",
+ "regex",
+ "serde",
+ "serde_json",
+ "tikv-jemallocator",
+ "tracing-subscriber",
+ "vector-vrl-functions",
+ "vrl",
+]
+
+[[package]]
+name = "vector-vrl-web-playground"
+version = "0.1.0"
+dependencies = [
+ "cargo_toml",
+ "enrichment",
+ "getrandom 0.2.12",
+ "gloo-utils",
+ "serde",
+ "serde-wasm-bindgen",
+ "vector-vrl-functions",
+ "vrl",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "vrl"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e125a431e61be8819cd967dce0b610290d51b30e287df9a0aeb07afa9a9a719"
+dependencies = [
+ "aes",
+ "ansi_term",
+ "arbitrary",
+ "base16",
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "cbc",
+ "cfb-mode",
+ "cfg-if",
+ "chacha20poly1305",
+ "charset",
+ "chrono",
+ "chrono-tz",
+ "cidr-utils 0.6.1",
+ "clap 4.4.18",
+ "codespan-reporting",
+ "community-id",
+ "crypto_secretbox",
+ "csv",
+ "ctr",
+ "data-encoding",
+ "digest",
+ "dns-lookup",
+ "dyn-clone",
+ "exitcode",
+ "flate2",
+ "grok",
+ "hex",
+ "hmac",
+ "hostname",
+ "iana-time-zone",
+ "idna 0.5.0",
+ "indexmap 2.2.3",
+ "indoc",
+ "itertools 0.12.1",
+ "lalrpop",
+ "lalrpop-util",
+ "md-5",
+ "mlua",
+ "nom",
+ "ofb",
+ "once_cell",
+ "onig",
+ "ordered-float 4.2.0",
+ "paste",
+ "peeking_take_while",
+ "percent-encoding",
+ "pest",
+ "pest_derive",
+ "prettydiff",
+ "prettytable-rs",
+ "psl",
+ "quickcheck",
+ "quoted_printable",
+ "rand 0.8.5",
+ "regex",
+ "roxmltree",
+ "rust_decimal",
+ "rustyline",
+ "seahash",
+ "serde",
+ "serde_json",
+ "sha-1",
+ "sha2",
+ "sha3",
+ "snafu 0.8.0",
+ "snap",
+ "strip-ansi-escapes",
+ "syslog_loose",
+ "termcolor",
+ "thiserror",
+ "tracing 0.1.40",
+ "uaparser",
+ "url",
+ "utf8-width",
+ "uuid",
+ "webbrowser",
+ "woothee",
+ "zstd 0.13.0",
+]
+
+[[package]]
+name = "vsimd"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
+
+[[package]]
+name = "vte"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197"
+dependencies = [
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+]
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "warp"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1e92e22e03ff1230c03a1a8ee37d2f89cd489e2e541b7550d6afad96faed169"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-channel",
+ "futures-util",
+ "headers",
+ "http 0.2.9",
+ "hyper",
+ "log",
+ "mime",
+ "mime_guess",
+ "percent-encoding",
+ "pin-project",
+ "rustls-pemfile",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-stream",
+ "tokio-tungstenite",
+ "tokio-util",
+ "tower-service",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed"
+dependencies = [
+ "quote 1.0.35",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838"
+
+[[package]]
+name = "wasm-streams"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webbrowser"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71"
+dependencies = [
+ "core-foundation",
+ "home",
+ "jni",
+ "log",
+ "ndk-context",
+ "objc",
+ "raw-window-handle",
+ "url",
+ "web-sys",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix 0.38.31",
+]
+
+[[package]]
+name = "which"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "whoami"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50"
+dependencies = [
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "widestring"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-core"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-service"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd9db37ecb5b13762d95468a2fc6009d4b2c62801243223aabd44fca13ad13c8"
+dependencies = [
+ "bitflags 1.3.2",
+ "widestring 1.0.2",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "176b6138793677221d420fd2f0aeeced263f197688b36484660da767bca2fa32"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wiremock"
+version = "0.5.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13a3a53eaf34f390dd30d7b1b078287dd05df2aa2e21a589ccb80f5c7253c2e9"
+dependencies = [
+ "assert-json-diff",
+ "async-trait",
+ "base64 0.21.7",
+ "deadpool",
+ "futures 0.3.30",
+ "futures-timer",
+ "http-types",
+ "hyper",
+ "log",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "tokio",
+]
+
+[[package]]
+name = "woothee"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "896174c6a4779d4d7d4523dd27aef7d46609eda2497e370f6c998325c6bf6971"
+dependencies = [
+ "lazy_static",
+ "regex",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "xmlparser"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a"
+dependencies = [
+ "proc-macro2 1.0.78",
+ "quote 1.0.35",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+
+[[package]]
+name = "zstd"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c"
+dependencies = [
+ "zstd-safe 6.0.6",
+]
+
+[[package]]
+name = "zstd"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110"
+dependencies = [
+ "zstd-safe 7.0.0",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "7.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e"
+dependencies = [
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.9+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/tools/misc/vector/default.nix b/nixpkgs/pkgs/tools/misc/vector/default.nix
new file mode 100644
index 000000000000..0540bcac517b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vector/default.nix
@@ -0,0 +1,131 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, protobuf
+, rdkafka
+, oniguruma
+, zstd
+, rust-jemalloc-sys
+, rust-jemalloc-sys-unprefixed
+, Security
+, libiconv
+, coreutils
+, CoreServices
+, SystemConfiguration
+, tzdata
+, cmake
+, perl
+, git
+  # nix has a problem with the `?` in the feature list
+  # enabling kafka will produce a vector with no features at all
+, enableKafka ? false
+  # TODO investigate adding various "vendor-*"
+  # "disk-buffer" is using leveldb TODO: investigate how useful
+  # it would be, perhaps only for massive scale?
+, features ? ([ "api" "api-client" "enrichment-tables" "sinks" "sources" "sources-dnstap" "transforms" "component-validation-runner" ]
+    # the second feature flag is passed to the rdkafka dependency
+    # building on linux fails without this feature flag (both x86_64 and AArch64)
+    ++ lib.optionals enableKafka [ "rdkafka?/gssapi-vendored" ]
+    ++ lib.optional stdenv.hostPlatform.isUnix "unix")
+, nixosTests
+, nix-update-script
+}:
+
+let
+  pname = "vector";
+  version = "0.36.0";
+in
+rustPlatform.buildRustPackage {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "vectordotdev";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-fbBKmhouY021osFVqNhEC+16cO7z3bS+DBhg1ByDeWw=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "greptime-proto-0.1.0" = "sha256-Q8xr6qN6SAGGK0W96WuNRdQ5/8iNlruqzhXD6xq3Ua8=";
+      "greptimedb-client-0.1.0" = "sha256-l4r/2DGllXiFgOwpa83ZRiK9o0L4bokVltCGD1cp3NM=";
+      "heim-0.1.0-rc.1" = "sha256-TFgLR5zb/oqceVOH4mIOvFFY/HMOLSo8VI5Eh9KP60E=";
+      "nix-0.26.2" = "sha256-uquYvRT56lhupkrESpxwKEimRFhmYvri10n3dj0f2yg=";
+      "ntapi-0.3.7" = "sha256-G6ZCsa3GWiI/FeGKiK9TWkmTxen7nwpXvm5FtjNtjWU=";
+      "tokio-util-0.7.8" = "sha256-HCvtfohOoa1ZjD4s7QLDbIV4fe/MVBKtgM1QQX7gGKQ=";
+      "tracing-0.2.0" = "sha256-YAxeEofFA43PX2hafh3RY+C81a2v6n1fGzYz2FycC3M=";
+    };
+  };
+  nativeBuildInputs = [ pkg-config cmake perl git rustPlatform.bindgenHook ];
+  buildInputs =
+    [ oniguruma openssl protobuf rdkafka zstd ]
+    ++ lib.optionals stdenv.isLinux [ rust-jemalloc-sys-unprefixed ]
+    ++ lib.optionals stdenv.isDarwin [ rust-jemalloc-sys Security libiconv coreutils CoreServices SystemConfiguration ];
+
+  # needed for internal protobuf c wrapper library
+  PROTOC = "${protobuf}/bin/protoc";
+  PROTOC_INCLUDE = "${protobuf}/include";
+  RUSTONIG_SYSTEM_LIBONIG = true;
+
+  TZDIR = "${tzdata}/share/zoneinfo";
+
+  # needed to dynamically link rdkafka
+  CARGO_FEATURE_DYNAMIC_LINKING=1;
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = features;
+
+  # TODO investigate compilation failure for tests
+  # there are about 100 tests failing (out of 1100) for version 0.22.0
+  doCheck = false;
+
+  checkFlags = [
+    # tries to make a network access
+    "--skip=sinks::loki::tests::healthcheck_grafana_cloud"
+
+    # flaky on linux-aarch64
+    "--skip=kubernetes::api_watcher::tests::test_stream_errors"
+
+    # flaky on linux-x86_64
+    "--skip=sources::socket::test::tcp_with_tls_intermediate_ca"
+    "--skip=sources::host_metrics::cgroups::tests::generates_cgroups_metrics"
+    "--skip=sources::aws_kinesis_firehose::tests::aws_kinesis_firehose_forwards_events"
+    "--skip=sources::aws_kinesis_firehose::tests::aws_kinesis_firehose_forwards_events_gzip_request"
+    "--skip=sources::aws_kinesis_firehose::tests::handles_acknowledgement_failure"
+  ];
+
+  # recent overhauls of DNS support in 0.9 mean that we try to resolve
+  # vector.dev during the checkPhase, which obviously isn't going to work.
+  # these tests in the DNS module are trivial though, so stubbing them out is
+  # fine IMO.
+  #
+  # the geoip transform yields maxmindb.so which contains references to rustc.
+  # neither figured out why the shared object is included in the output
+  # (it doesn't seem to be a runtime dependencies of the geoip transform),
+  # nor do I know why it depends on rustc.
+  # However, in order for the closure size to stay at a reasonable level,
+  # transforms-geoip is patched out of Cargo.toml for now - unless explicitly asked for.
+  postPatch = ''
+    substituteInPlace ./src/dns.rs \
+      --replace "#[tokio::test]" ""
+  '';
+
+  passthru = {
+    inherit features;
+    tests = { inherit (nixosTests) vector; };
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A high-performance observability data pipeline";
+    homepage = "https://github.com/vectordotdev/vector";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ thoughtpolice happysalada ];
+    platforms = with platforms; all;
+    mainProgram = "vector";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/veikk-linux-driver-gui/default.nix b/nixpkgs/pkgs/tools/misc/veikk-linux-driver-gui/default.nix
new file mode 100644
index 000000000000..28e3194f56ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/veikk-linux-driver-gui/default.nix
@@ -0,0 +1,33 @@
+{ lib, mkDerivation, fetchFromGitHub, qmake }:
+
+mkDerivation rec {
+  pname = "veikk-linux-driver-gui";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "jlam55555";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02g1q79kwjlzg95w38a1d7nxvcry8xcsvhax2js4c7xqvzhkki5j";
+  };
+
+  nativeBuildInputs = [ qmake ];
+
+  postBuild = ''
+    make all clean
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp veikk-linux-driver-gui $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Configuration tool for the VEIKK Linux driver";
+    homepage = "https://github.com/jlam55555/veikk-linux-driver-gui/";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nicbk ];
+    mainProgram = "veikk-linux-driver-gui";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/via/default.nix b/nixpkgs/pkgs/tools/misc/via/default.nix
new file mode 100644
index 000000000000..47f3df774378
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/via/default.nix
@@ -0,0 +1,42 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "via";
+  version = "3.0.0";
+  name = "${pname}-${version}";
+  src = fetchurl {
+    url = "https://github.com/the-via/releases/releases/download/v${version}/via-${version}-linux.AppImage";
+    name = "via-${version}-linux.AppImage";
+    sha256 = "sha256-+uTvmrqHK7L5VA/lUHCZZeRYPUrcVA+vjG7venxuHhs=";
+  };
+  appimageContents = appimageTools.extractType2 { inherit name src; };
+in
+appimageTools.wrapType2 {
+  inherit name src;
+
+  profile = ''
+    # Skip prompt to add udev rule.
+    # On NixOS you can add this rule with `services.udev.packages = [ pkgs.via ];`.
+    export DISABLE_SUDO_PROMPT=1
+  '';
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/via-nativia.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/via-nativia.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+
+    mkdir -p $out/etc/udev/rules.d
+    echo 'KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"' > $out/etc/udev/rules.d/92-viia.rules
+  '';
+
+  meta = with lib; {
+    description = "Yet another keyboard configurator";
+    homepage = "https://caniusevia.com/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "via";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vial/default.nix b/nixpkgs/pkgs/tools/misc/vial/default.nix
new file mode 100644
index 000000000000..613abcdf7dbf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vial/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchurl, appimageTools }:
+let
+  name = "vial-${version}";
+  version = "0.7.1";
+  pname = "Vial";
+
+  src = fetchurl {
+    url = "https://github.com/vial-kb/vial-gui/releases/download/v${version}/${pname}-v${version}-x86_64.AppImage";
+    hash = "sha256-pOcrxZ6vbnbdE/H4Kxufxm/ZovaYBXjFpVpKZYV7f3c=";
+  };
+
+  appimageContents = appimageTools.extractType2 { inherit name src; };
+in
+appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+    cp -r ${appimageContents}/usr/share/icons $out/share
+
+    mkdir -p $out/etc/udev/rules.d/ # https://get.vial.today/getting-started/linux-udev.html
+    echo 'KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"' > $out/etc/udev/rules.d/92-viia.rules
+  '';
+
+  meta = {
+    description = "An Open-source GUI and QMK fork for configuring your keyboard in real time";
+    homepage = "https://get.vial.today";
+    license = lib.licenses.gpl2Plus;
+    mainProgram = "vial";
+    maintainers = with lib.maintainers; [ kranzes ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/viddy/default.nix b/nixpkgs/pkgs/tools/misc/viddy/default.nix
new file mode 100644
index 000000000000..280cf82c4b41
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/viddy/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "viddy";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "sachaos";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-iF5b5e3HPT3GJLRDxz9wN1U5rO9Ey51Cpw4p2zjffTI=";
+  };
+
+  vendorHash = "sha256-/lx2D2FIByRnK/097M4SQKRlmqtPTvbFo1dwbThJ5Fs=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X"
+    "main.version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "A modern watch command";
+    homepage = "https://github.com/sachaos/viddy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ j-hui ];
+    mainProgram = "viddy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimer/default.nix b/nixpkgs/pkgs/tools/misc/vimer/default.nix
new file mode 100644
index 000000000000..684ecfc5fe38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimer/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "0.2.0";
+  pname = "vimer";
+
+  src = fetchFromGitHub {
+    owner = "susam";
+    repo = "vimer";
+    rev = version;
+    sha256 = "01qhr3i7wasbaxvms39c81infpry2vk0nzh7r5m5b9p713p0phsi";
+  };
+
+  installPhase = ''
+    mkdir $out/bin/ -p
+    cp vimer $out/bin/
+    chmod +x $out/bin/vimer
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/susam/vimer";
+    description = ''
+      A convenience wrapper for gvim/mvim --remote(-tab)-silent to open files
+      in an existing instance of GVim or MacVim.
+    '';
+    license = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.all;
+    mainProgram = "vimer";
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/vimpager/build.nix b/nixpkgs/pkgs/tools/misc/vimpager/build.nix
new file mode 100644
index 000000000000..a610a461656c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimpager/build.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv
+, fetchFromGitHub
+, coreutils
+, sharutils
+, version
+, sha256
+}:
+
+stdenv.mkDerivation {
+  inherit version;
+  pname = "vimpager";
+
+  src = fetchFromGitHub {
+    inherit sha256;
+
+    owner  = "rkitover";
+    repo   = "vimpager";
+    rev    = version;
+  };
+
+  nativeBuildInputs = [ sharutils ]; # for uuencode
+  buildInputs = [ coreutils ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+  ];
+
+  buildPhase = ''
+    sed -i 's,/bin/cat,${coreutils}/bin/cat,g' vimpager
+    make
+  '';
+
+
+  meta = with lib; {
+    description = "Use Vim as PAGER";
+    homepage    = "https://www.vim.org/scripts/script.php?script_id=1723";
+    license     = with licenses; [ bsd2 mit vim ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimpager/default.nix b/nixpkgs/pkgs/tools/misc/vimpager/default.nix
new file mode 100644
index 000000000000..1b1512db3cfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimpager/default.nix
@@ -0,0 +1,6 @@
+{ callPackage }:
+
+callPackage ./build.nix {
+  version = "2.06";
+  sha256  = "05yr7j72bw64nx7a0y6w9fjmz54zd4g46fn1qjfbbqvbc19fjpl8";
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimpager/latest.nix b/nixpkgs/pkgs/tools/misc/vimpager/latest.nix
new file mode 100644
index 000000000000..4ea8d5be57fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimpager/latest.nix
@@ -0,0 +1,10 @@
+{ callPackage, runtimeShell }:
+
+(callPackage ./build.nix {
+  version = "a4da4dfac44d1bbc6986c5c76fea45a60ebdd8e5";
+  sha256  = "0gcjpw2q263hh8w2sjvq3f3k2d28qpkkv0jnl8hw1l7v604i8zxg";
+}).overrideAttrs (old: {
+  postPatch = old.postPatch or "" + ''
+    echo 'echo ${runtimeShell}' > scripts/find_shell
+  '';
+})
diff --git a/nixpkgs/pkgs/tools/misc/vimv-rs/default.nix b/nixpkgs/pkgs/tools/misc/vimv-rs/default.nix
new file mode 100644
index 000000000000..2b419e5403c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimv-rs/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchCrate, stdenv, Foundation }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vimv-rs";
+  version = "3.1.0";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "vimv";
+    hash = "sha256-jbRsgEsRYF5hlvo0jEB4jhy5jzCAXNzOsNWWyh4XULQ=";
+  };
+
+  cargoHash = "sha256-rYQxIttuGBGEkYkFtSBl8ce1I/Akm6FxeITJcaIeP6M=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Foundation ];
+
+  meta = with lib; {
+    description = "Command line utility for batch-renaming files";
+    homepage = "https://www.dmulholl.com/dev/vimv.html";
+    license = licenses.bsd0;
+    mainProgram = "vimv";
+    maintainers = with maintainers; [ zowoq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimv/default.nix b/nixpkgs/pkgs/tools/misc/vimv/default.nix
new file mode 100644
index 000000000000..46753688ec73
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimv/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenvNoCC, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation {
+  pname = "vimv";
+  version = "unstable-2019-10-31";
+
+  src = fetchFromGitHub {
+    owner = "thameera";
+    repo = "vimv";
+    rev = "4152496c1946f68a13c648fb7e583ef23dac4eb8";
+    sha256 = "1fsrfx2gs6bqx7wk7pgcji2i2x4alqpsi66aif4kqvnpqfhcfzjd";
+  };
+
+  installPhase = ''
+    install -d $out/bin
+    install $src/vimv $out/bin/vimv
+    patchShebangs $out/bin/vimv
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thameera/vimv";
+    description = "Batch-rename files using Vim";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ kmein ];
+    mainProgram = "vimv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix b/nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix
new file mode 100644
index 000000000000..b285d18a90ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, markdown
+, pygments
+}:
+
+buildPythonApplication rec {
+  version = "0.4.1";
+  pname = "vimwiki-markdown";
+
+  src = fetchPypi {
+    inherit version pname;
+    sha256 = "sha256-hJl0OTE6kHucVGOxgOZBG0noYRfxma3yZSrUWEssLN4=";
+  };
+
+  propagatedBuildInputs= [
+    markdown
+    pygments
+  ];
+
+  meta = with lib; {
+    description = "Vimwiki markdown plugin";
+    homepage = "https://github.com/WnP/vimwiki_markdown";
+    license = licenses.mit;
+    maintainers = with maintainers; [ seqizz ];
+    mainProgram = "vimwiki_markdown";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vivid/default.nix b/nixpkgs/pkgs/tools/misc/vivid/default.nix
new file mode 100644
index 000000000000..3115735ed9be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vivid/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vivid";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zNsNEXj/SaJaYsYvoOGPopLhJDfLIXSs7eeZDdJrHiQ=";
+  };
+
+  cargoHash = "sha256-gtqdQuf3Ybt0PDCQw3gGAzIROq39NJKPIat0lyIPGgg=";
+
+  meta = with lib; {
+    description = "A generator for LS_COLORS with support for multiple color themes";
+    homepage = "https://github.com/sharkdp/vivid";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.dtzWill ];
+    platforms = platforms.unix;
+    mainProgram = "vivid";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vix/default.nix b/nixpkgs/pkgs/tools/misc/vix/default.nix
new file mode 100644
index 000000000000..9e759536d74c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vix/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, SDL }:
+
+stdenv.mkDerivation {
+  pname = "vix";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "BatchDrake";
+    repo = "vix";
+    rev = "824b6755157a0f7430a0be0af454487d1492204d";
+    sha256 = "1y0a2sajkrsg36px21b8lgx1irf0pyj7hccyd6k806bm4zhgxw1z";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ SDL ];
+
+  meta = with lib; {
+    description = "Visual Interface heXadecimal dump ";
+    homepage = "http://actinid.org/vix/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ehmry ];
+    mainProgram = "vix";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vmtouch/default.nix b/nixpkgs/pkgs/tools/misc/vmtouch/default.nix
new file mode 100644
index 000000000000..120012019a72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vmtouch/default.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchFromGitHub, perl}:
+
+stdenv.mkDerivation rec {
+  pname = "vmtouch";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "hoytech";
+    repo = "vmtouch";
+    rev = "v${version}";
+    sha256 = "08da6apzfkfjwasn4dxrlfxqfx7arl28apdzac5nvm0fhvws0dxk";
+  };
+
+  buildInputs = [perl];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "Portable file system cache diagnostics and control";
+    longDescription = "vmtouch is a tool for learning about and controlling the file system cache of unix and unix-like systems.";
+    homepage = "https://hoytech.com/vmtouch/";
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.garrison ];
+    platforms = lib.platforms.all;
+    mainProgram = "vmtouch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/void/default.nix b/nixpkgs/pkgs/tools/misc/void/default.nix
new file mode 100644
index 000000000000..1204206d34b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/void/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "void";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "spacejam";
+    repo = "void";
+    rev = version;
+    sha256 = "08vazw4rszqscjz988k89z28skyj3grm81bm5iwknxxagmrb20fz";
+  };
+
+  # The tests are long-running and not that useful
+  doCheck = false;
+
+  cargoSha256 = "1wh1yb02w5afghd19i2s0v8mq4lq20djsljrr44xciq68bqfdcp0";
+
+  meta = with lib; {
+    description = "Terminal-based personal organizer";
+    homepage = "https://github.com/spacejam/void";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ spacekookie ];
+    mainProgram = "void";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vorbisgain/default.nix b/nixpkgs/pkgs/tools/misc/vorbisgain/default.nix
new file mode 100644
index 000000000000..e5a85049df0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vorbisgain/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, libogg, libvorbis }:
+
+stdenv.mkDerivation rec {
+  pname = "vorbisgain";
+  version = "0.37";
+
+  src = fetchurl {
+    url = "https://sjeng.org/ftp/vorbis/vorbisgain-${version}.tar.gz";
+    sha256 = "1v1h6mhnckmvvn7345hzi9abn5z282g4lyyl4nnbqwnrr98v0vfx";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  buildInputs = [ libogg libvorbis ];
+
+  patchPhase = ''
+    chmod -v +x configure
+    configureFlags="--mandir=$out/share/man"
+  '';
+
+  meta = with lib; {
+    homepage = "https://sjeng.org/vorbisgain.html";
+    description = "A utility that corrects the volume of an Ogg Vorbis file to a predefined standardized loudness";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "vorbisgain";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vrc-get/default.nix b/nixpkgs/pkgs/tools/misc/vrc-get/default.nix
new file mode 100644
index 000000000000..e89d4d475834
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vrc-get/default.nix
@@ -0,0 +1,30 @@
+{ fetchFromGitHub, lib, rustPlatform, pkg-config, openssl, stdenv, Security, SystemConfiguration }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vrc-get";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    owner = "anatawa12";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-DTiYyTZKYNprQSsAjHmpGdnS6dkXa3hSRGmIiLT/xr8=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+
+  # Make openssl-sys use pkg-config.
+  OPENSSL_NO_VENDOR = 1;
+
+  cargoHash = "sha256-4bhle98/zfw1uGNx+m1/4H9n63DnIezg/ZdV+zj0JNA=";
+
+  meta = with lib; {
+    description = "Command line client of VRChat Package Manager, the main feature of VRChat Creator Companion (VCC)";
+    homepage = "https://github.com/anatawa12/vrc-get";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bddvlpr ];
+    mainProgram = "vrc-get";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vsc-leetcode-cli/default.nix b/nixpkgs/pkgs/tools/misc/vsc-leetcode-cli/default.nix
new file mode 100644
index 000000000000..cb70f9a80eed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vsc-leetcode-cli/default.nix
@@ -0,0 +1,28 @@
+{ buildNpmPackage
+, fetchFromGitHub
+, lib
+}:
+
+buildNpmPackage {
+  pname = "vsc-leetcode-cli";
+  version = "unstable-2021-04-11";
+
+  src = fetchFromGitHub {
+    owner = "leetcode-tools";
+    repo = "leetcode-cli";
+    rev = "c5f6b8987185ae9f181e138f999825516240f44c";
+    hash = "sha256-N8hQqIzCUYTT5RAd0eqNynSNkGiN4omFY+8QLBemIbs=";
+  };
+
+  npmDepsHash = "sha256-t8eEnyAKeDmbmduUXuxo/WbJTced5dLeJTbtjxrrxY8=";
+
+  dontNpmBuild = true;
+
+  meta = with lib; {
+    description = "A CLI tool for leetcode.com";
+    homepage = "https://github.com/leetcode-tools/leetcode-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cpcloud ];
+    mainProgram = "leetcode";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vsh/default.nix b/nixpkgs/pkgs/tools/misc/vsh/default.nix
new file mode 100644
index 000000000000..c061a14f2e30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vsh/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "vsh";
+  version = "0.12.2";
+
+  src = fetchFromGitHub {
+    owner = "fishi0x01";
+    repo = "vsh";
+    rev = "v${version}";
+    sha256 = "13qa9r7kij6aqhackzmsn38vyhmajgmhflnrd9rarfhhyg6ldv4z";
+  };
+
+  # vendor directory is part of repository
+  vendorHash = null;
+
+  # make sure version gets set at compile time
+  ldflags = [ "-s" "-w" "-X main.vshVersion=v${version}" ];
+
+  meta = with lib; {
+    description = "HashiCorp Vault interactive shell";
+    homepage = "https://github.com/fishi0x01/vsh";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fishi0x01 ];
+    mainProgram = "vsh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vtm/default.nix b/nixpkgs/pkgs/tools/misc/vtm/default.nix
new file mode 100644
index 000000000000..3e37ae1bddab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vtm/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "vtm";
+  version = "0.9.63";
+
+  src = fetchFromGitHub {
+    owner = "netxs-group";
+    repo = "vtm";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-6WRSkS2uPHOcEmk2xB63G+zxbRu1tlz1D7k92ITEgSQ=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  cmakeFlags = [ "../src" ];
+
+  meta = {
+    description = "Terminal multiplexer with window manager and session sharing";
+    homepage = "https://vtm.netxs.online/";
+    license = lib.licenses.mit;
+    mainProgram = "vtm";
+    maintainers = with lib.maintainers; [ ahuzik ];
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/vttest/default.nix b/nixpkgs/pkgs/tools/misc/vttest/default.nix
new file mode 100644
index 000000000000..962322ba3437
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vttest/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "vttest";
+  version = "20231230";
+
+  src = fetchurl {
+    urls = [
+      "https://invisible-mirror.net/archives/${pname}/${pname}-${version}.tgz"
+      "ftp://ftp.invisible-island.net/${pname}/${pname}-${version}.tgz"
+    ];
+    sha256 = "sha256-SuYjx3t5fn+UlGlI0LJ+RqtOAdhD9iYIAMVzkKoEy/U=";
+  };
+
+  meta = with lib; {
+    description = "Tests the compatibility of so-called 'VT100-compatible' terminals";
+    homepage = "https://invisible-island.net/vttest/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    mainProgram = "vttest";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/wacomtablet/default.nix b/nixpkgs/pkgs/tools/misc/wacomtablet/default.nix
new file mode 100644
index 000000000000..5ff2800496a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wacomtablet/default.nix
@@ -0,0 +1,36 @@
+{ lib, mkDerivation, fetchurl, fetchpatch, extra-cmake-modules, qtx11extras,
+  plasma-workspace, libwacom, xf86_input_wacom
+}:
+
+mkDerivation rec {
+  pname = "wacomtablet";
+  version = "3.2.0";
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/${pname}-${version}.tar.xz";
+    sha256 = "197pwpl87gqlnza36bp68jvw8ww25znk08acmi8bpz7n84xfc368";
+  };
+  patches = [
+    (fetchpatch {
+      url = "https://invent.kde.org/system/wacomtablet/commit/4f73ff02b3efd5e8728b18fcf1067eca166704ee.patch";
+      sha256 = "0185gbh1vywfz8a3wnvncmzdk0dd189my4bzimkbh85rlrqq2nf8";
+    })
+  ];
+
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    qtx11extras plasma-workspace
+    libwacom xf86_input_wacom
+  ];
+
+  meta = {
+    description = "KDE Configuration Module for Wacom Graphics Tablets";
+    longDescription = ''
+      This module implements a GUI for the Wacom Linux Drivers and extends it
+      with profile support to handle different button / pen layouts per profile.
+    '';
+    homepage = "https://invent.kde.org/system/wacomtablet";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.Thra11 ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wagyu/default.nix b/nixpkgs/pkgs/tools/misc/wagyu/default.nix
new file mode 100644
index 000000000000..39e1085d4c96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wagyu/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wagyu";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "AleoHQ";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ltWNKB3DHtwVVzJyvRWj2I8rjsl7ru2i/RCO9yiQhpg=";
+  };
+
+  cargoHash = "sha256-8dbeSHN6+1jLdVA9QxNAy7Y6EX7wflpQI72kqZAEVIE=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Rust library for generating cryptocurrency wallets";
+    homepage = "https://github.com/AleoHQ/wagyu";
+    license = with licenses; [ mit asl20 ];
+    maintainers = [ maintainers.offline ];
+    mainProgram = "wagyu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wakapi/default.nix b/nixpkgs/pkgs/tools/misc/wakapi/default.nix
new file mode 100644
index 000000000000..be27225ed3c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wakapi/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "wakapi";
+  version = "2.10.5";
+
+  src = fetchFromGitHub {
+    owner = "muety";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-u+br+C5tWSCc8LPGS3/CMkxpqaO30BsWPRFGOkloMlA=";
+  };
+
+  vendorHash = "sha256-TeKVhG1V9inyDWfILwtpU9QknJ9bt3Dja5GVHrK9PkA=";
+
+  # Not a go module required by the project, contains development utilities
+  excludedPackages = [ "scripts" ];
+
+  # Fix up reported version
+  postPatch = ''echo ${version} > version.txt'';
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    homepage = "https://wakapi.dev/";
+    changelog = "https://github.com/muety/wakapi/releases/tag/${version}";
+    description = "A minimalist self-hosted WakaTime-compatible backend for coding statistics";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ t4ccer ];
+    mainProgram = "wakapi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wakatime/default.nix b/nixpkgs/pkgs/tools/misc/wakatime/default.nix
new file mode 100644
index 000000000000..2ce8df19867e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wakatime/default.nix
@@ -0,0 +1,53 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, wakatime }:
+
+buildGoModule rec {
+  pname = "wakatime";
+  version = "1.73.0";
+
+  src = fetchFromGitHub {
+    owner = "wakatime";
+    repo = "wakatime-cli";
+    rev = "v${version}";
+    hash = "sha256-EUZgYRsQRqtp0yiqNYex+ILSZwGEdO4BhciEgUVdui4=";
+  };
+
+  vendorHash = "sha256-SlYYrlRDBvhNm2BxemK9HzzsqM/RGH/sDQXpoGEY8rw=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/wakatime/wakatime-cli/pkg/version.Version=${version}"
+  ];
+
+  preCheck =
+    let
+      skippedTests = [
+        # Tests requiring network
+        "TestFileExperts"
+        "TestSendHeartbeats"
+        "TestSendHeartbeats_ExtraHeartbeats"
+        "TestSendHeartbeats_IsUnsavedEntity"
+        "TestSendHeartbeats_NonExistingExtraHeartbeatsEntity"
+
+        # Flaky tests
+        "TestLoadParams_ApiKey_FromVault_Err_Darwin"
+      ];
+    in
+    ''
+      # Disable tests
+      buildFlagsArray+=("-run" "[^(${builtins.concatStringsSep "|" skippedTests})]")
+    '';
+
+  passthru.tests.version = testers.testVersion {
+    package = wakatime;
+    command = "HOME=$(mktemp -d) wakatime-cli --version";
+  };
+
+  meta = with lib; {
+    homepage = "https://wakatime.com/";
+    description = "WakaTime command line interface";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "wakatime-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wasm-tools/default.nix b/nixpkgs/pkgs/tools/misc/wasm-tools/default.nix
new file mode 100644
index 000000000000..d72e726da863
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wasm-tools/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wasm-tools";
+  version = "1.200.0";
+
+  src = fetchFromGitHub {
+    owner = "bytecodealliance";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-GuN70HiCmqBRwcosXqzT8sl5SRCTttOPIRl6pxaQiec=";
+    fetchSubmodules = true;
+  };
+
+  # Disable cargo-auditable until https://github.com/rust-secure-code/cargo-auditable/issues/124 is solved.
+  auditable = false;
+  cargoHash = "sha256-T9p1PvgiAZrj82ABx7KX2InZACQ/ff7N0zPKGTCTBPk=";
+  cargoBuildFlags = [ "--package" "wasm-tools" ];
+  cargoTestFlags = [ "--all" ];
+
+  meta = with lib; {
+    description = "Low level tooling for WebAssembly in Rust";
+    homepage = "https://github.com/bytecodealliance/wasm-tools";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ereslibre ];
+    mainProgram = "wasm-tools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/watchexec/default.nix b/nixpkgs/pkgs/tools/misc/watchexec/default.nix
new file mode 100644
index 000000000000..cf21202dc810
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/watchexec/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Cocoa, AppKit, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "watchexec";
+  version = "1.25.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-0zBY0PS7qJCAabg9ZKX1JC+gaTM/WSs2U6Avcq3MHmQ=";
+  };
+
+  cargoHash = "sha256-RSJOGiSziI2OJkRJAxPZ57uyPPjd3uExijHdIy52dr4=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Cocoa AppKit ];
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-framework AppKit";
+
+  checkFlags = [ "--skip=help" "--skip=help_short" ];
+
+  postPatch = ''
+    rm .cargo/config
+  '';
+
+  postInstall = ''
+    installManPage doc/watchexec.1
+    installShellCompletion --zsh --name _watchexec completions/zsh
+  '';
+
+  meta = with lib; {
+    description = "Executes commands in response to file modifications";
+    homepage = "https://watchexec.github.io/";
+    license = with licenses; [ asl20 ];
+    maintainers = [ maintainers.michalrus ];
+    mainProgram = "watchexec";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/watchlog/default.nix b/nixpkgs/pkgs/tools/misc/watchlog/default.nix
new file mode 100644
index 000000000000..d942d8282379
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/watchlog/default.nix
@@ -0,0 +1,30 @@
+{
+  lib,
+  rustPlatform,
+  fetchFromGitLab,
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "watchlog";
+  version = "1.213.0";
+
+  src = fetchFromGitLab {
+    owner = "kevincox";
+    repo = "watchlog";
+    rev = "v${version}";
+    sha256 = "sha256-UNywUEhhJy2cJIwl/S9hRReoBfkzvNoN0c4mxp7PuG0=";
+  };
+
+  cargoSha256 = "sha256-HBlfSgR96XIUBj2ZyHi1qaEKP8jG9kcrxJmhIGWjfUE=";
+
+  meta = {
+    description = "Easier monitoring of live logs";
+    homepage = "https://gitlab.com/kevincox/watchlog";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ kevincox ];
+
+    # Dependency only supports Linux + Windows: https://github.com/mentaljam/standard_paths/tree/master/src
+    platforms = with lib.platforms; linux ++ windows;
+    mainProgram = "wl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wayback-machine-archiver/default.nix b/nixpkgs/pkgs/tools/misc/wayback-machine-archiver/default.nix
new file mode 100644
index 000000000000..c3ebc937eb35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wayback-machine-archiver/default.nix
@@ -0,0 +1,32 @@
+{ lib, python3, fetchFromGitHub }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "wayback-machine-archiver";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "agude";
+    repo = "wayback-machine-archiver";
+    rev = "v${version}";
+    sha256 = "0dnnqx507gpj8wsx6f2ivfmha969ydayiqsvxh23p9qcixw9257x";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [ pypandoc ];
+  propagatedBuildInputs = with python3.pkgs; [ requests ];
+  nativeCheckInputs = with python3.pkgs; [ pytestCheckHook requests-mock ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace \"pytest-runner\", ""
+  '';
+
+  pythonImportsCheck = [ "wayback_machine_archiver" ];
+
+  meta = with lib; {
+    description = "A Python script to submit web pages to the Wayback Machine for archiving";
+    homepage = "https://github.com/agude/wayback-machine-archiver";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dandellion ];
+    mainProgram = "archiver";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wayback/default.nix b/nixpkgs/pkgs/tools/misc/wayback/default.nix
new file mode 100644
index 000000000000..368d1bad63f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wayback/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, chromium
+}:
+
+buildGoModule rec {
+  pname = "wayback";
+  version = "0.19.1";
+
+  src = fetchFromGitHub {
+    owner = "wabarc";
+    repo = "wayback";
+    rev = "v${version}";
+    hash = "sha256-LIWCT0/5T52VQQK4Dy6EFmFlJ02MkfvKddN/O/5zpZc=";
+  };
+
+  vendorHash = "sha256-TC4uwJswpD5oKqF/rpXqU/h+k0jErwhguT/LkdBA83Y=";
+
+  doCheck = false;
+
+  buildInputs = [
+    chromium
+  ];
+
+  meta = with lib; {
+    description = "An archiving tool with an IM-style interface";
+    homepage = "https://docs.wabarc.eu.org";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ _2gn ];
+    # binary build for darwin is possible, but it requires chromium for runtime dependency, whose build (for nix) is not supported on darwin.
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/waylevel/default.nix b/nixpkgs/pkgs/tools/misc/waylevel/default.nix
new file mode 100644
index 000000000000..b3b1ddfeeebf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/waylevel/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromSourcehut
+, rustPlatform
+, wayland
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "waylevel";
+  version = "1.0.0";
+
+  src = fetchFromSourcehut {
+    owner = "~shinyzenith";
+    repo = pname;
+    rev = version;
+    hash = "sha256-T2gqiRcKrKsvwGNnWrxR1Ga/VX4AyllYn1H25aIKt5s=";
+  };
+
+  cargoHash = "sha256-gw5m1/btJ5zZP04C7BCnHqEOUBoeu0whK8W7xA+xSQo=";
+
+  postFixup = ''
+    patchelf --set-rpath ${lib.makeLibraryPath [wayland]} $out/bin/waylevel
+  '';
+
+  meta = with lib; {
+    description = "A tool to print wayland toplevels and other compositor info";
+    homepage = "https://git.sr.ht/~shinyzenith/waylevel";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dit7ya ];
+    platforms = platforms.linux;
+    mainProgram = "waylevel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wayshot/default.nix b/nixpkgs/pkgs/tools/misc/wayshot/default.nix
new file mode 100644
index 000000000000..82b7631f5bed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wayshot/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wayshot";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "waycrate";
+    repo = pname;
+    rev = version;
+    hash = "sha256-WN1qlV6vpIn0uNiE+rXeQTMscNYqkgFytVBc6gJzvyU=";
+  };
+
+  cargoHash = "sha256-Hfgr+wWC5zUdHhFMwOBt57h2r94OpdJ1MQpckhYgKQQ=";
+
+  meta = with lib; {
+    description = "A native, blazing-fast screenshot tool for wlroots based compositors such as sway and river";
+    homepage = "https://github.com/waycrate/wayshot";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.dit7ya ];
+    platforms = platforms.linux;
+    mainProgram = "wayshot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/webcat/default.nix b/nixpkgs/pkgs/tools/misc/webcat/default.nix
new file mode 100644
index 000000000000..7c8c56dc86c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/webcat/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub, asciidoctor, installShellFiles }:
+
+buildGoModule rec {
+  pname = "webcat";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "rumpelsepp";
+    repo = "webcat";
+    rev = "v${version}";
+    hash = "sha256-JyZHH8JgS3uoNVicx1wj0SAzlrXyTrpwIBZuok6buRw=";
+  };
+
+  vendorHash = "sha256-duVp/obT+5M4Dl3BAdSgRaP3+LKmS0y51loMMdoGysw=";
+
+  nativeBuildInputs = [ asciidoctor installShellFiles ];
+
+  postInstall = ''
+    make -C man man
+    installManPage man/webcat.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://rumpelsepp.org/blog/ssh-through-websocket/";
+    description = "The lightweight swiss army knife for websockets";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ montag451 ];
+    mainProgram = "webcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/websocat/default.nix b/nixpkgs/pkgs/tools/misc/websocat/default.nix
new file mode 100644
index 000000000000..baef5b264502
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/websocat/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, openssl, rustPlatform, libiconv
+, Security, makeWrapper, bash }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "websocat";
+  version = "1.12.0";
+
+  src = fetchFromGitHub {
+    owner = "vi";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-wyVys+1g2klgwFHlKHI0ztd2qSlWyNXJoFvFCd1PGjo=";
+  };
+
+  cargoHash = "sha256-fakXOPQOEaKEt+AeOYlhumULJyjRHHXFKz4o9AD7WE0=";
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  buildFeatures = [ "ssl" ];
+
+  # Needed to get openssl-sys to use pkg-config.
+  OPENSSL_NO_VENDOR=1;
+
+  # The wrapping is required so that the "sh-c" option of websocat works even
+  # if sh is not in the PATH (as can happen, for instance, when websocat is
+  # started as a systemd service).
+  postInstall = ''
+    wrapProgram $out/bin/websocat \
+      --prefix PATH : ${lib.makeBinPath [ bash ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/vi/websocat";
+    description = "Command-line client for WebSockets (like netcat/socat)";
+    changelog = "https://github.com/vi/websocat/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ thoughtpolice Br1ght0ne ];
+    mainProgram = "websocat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wemux/default.nix b/nixpkgs/pkgs/tools/misc/wemux/default.nix
new file mode 100644
index 000000000000..99adf8bb0823
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wemux/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchFromGitHub, tmux, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "wemux";
+  version = "unstable-2021-04-16";
+
+  src = fetchFromGitHub {
+    owner = "zolrath";
+    repo = "wemux";
+    rev = "01c6541f8deceff372711241db2a13f21c4b210c";
+    sha256 = "1y962nzvs7sf720pl3wa582l6irxc8vavd0gp4ag4243b2gs4qvm";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+
+    substituteInPlace wemux \
+        --replace tmux ${tmux}/bin/tmux \
+        --replace "/usr/local/etc" "/etc"
+
+    substituteInPlace man/wemux.1 --replace "/usr/local/etc" "/etc"
+
+    install -Dm755 wemux -t $out/bin
+    installManPage man/wemux.1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/zolrath/wemux";
+    description = "Multi-user tmux made easy";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bsima ];
+    mainProgram = "wemux";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/whatsapp-chat-exporter/default.nix b/nixpkgs/pkgs/tools/misc/whatsapp-chat-exporter/default.nix
new file mode 100644
index 000000000000..9b2281d07a6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/whatsapp-chat-exporter/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "whatsapp-chat-exporter";
+  version = "0.9.7";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "KnugiHK";
+    repo = "Whatsapp-Chat-Exporter";
+    rev = "refs/tags/${version}";
+    hash = "sha256-ySKZM7zmPKb+AHAK7IDpn07qinwz0YY8btb4KWGfy7w=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    bleach
+    jinja2
+    pycryptodome
+    javaobj-py3
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/KnugiHK/Whatsapp-Chat-Exporter";
+    description = "WhatsApp database parser";
+    changelog = "https://github.com/KnugiHK/Whatsapp-Chat-Exporter/releases/tag/${version}";
+    longDescription = ''
+      A customizable Android and iPhone WhatsApp database parser that will give
+      you the history of your WhatsApp conversations inHTML and JSON. Android
+      Backup Crypt12, Crypt14 and Crypt15 supported.
+    '';
+    license = licenses.mit;
+    mainProgram = "wtsexporter";
+    maintainers = with maintainers; [ bbenno ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wimboot/default.nix b/nixpkgs/pkgs/tools/misc/wimboot/default.nix
new file mode 100644
index 000000000000..e8d8098ad95c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wimboot/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, libbfd, zlib, libiberty }:
+
+stdenv.mkDerivation rec {
+  pname = "wimboot";
+  version = "2.7.6";
+
+  src = fetchFromGitHub {
+    owner = "ipxe";
+    repo = "wimboot";
+    rev = "v${version}";
+    sha256 = "sha256-AFPuHxcDM/cdEJ5nRJnVbPk7Deg97NeSMsg/qwytZX4=";
+  };
+
+  sourceRoot = "${src.name}/src";
+
+  buildInputs = [ libbfd zlib libiberty ];
+  makeFlags = [ "wimboot.x86_64.efi" ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # Needed with GCC 12
+    "-Wno-error=array-bounds"
+  ];
+
+  installPhase = ''
+    mkdir -p $out/share/wimboot/
+    cp wimboot.x86_64.efi $out/share/wimboot
+  '';
+
+  meta = with lib; {
+    homepage = "https://ipxe.org/wimboot";
+    description = "Windows Imaging Format bootloader";
+    license = licenses.gpl2Plus;
+    maintainers = teams.helsinki-systems.members;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wit-bindgen/default.nix b/nixpkgs/pkgs/tools/misc/wit-bindgen/default.nix
new file mode 100644
index 000000000000..9f0fbe1f4565
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wit-bindgen/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wit-bindgen";
+  version = "0.17.0";
+
+  src = fetchFromGitHub {
+    owner = "bytecodealliance";
+    repo = "wit-bindgen";
+    rev = "wit-bindgen-cli-${version}";
+    hash = "sha256-eFJkr/RqQdULPquCVbjhR8843aGjeEnUCF/Ws2U5fQk=";
+  };
+
+  cargoHash = "sha256-934lHOXzE2cLW6LMM0AQl/GJt4wSIKZlY1C7gmjGVrc=";
+
+  # Some tests fail because they need network access to install the `wasm32-unknown-unknown` target.
+  # However, GitHub Actions ensures a proper build.
+  # See also:
+  #   https://github.com/bytecodealliance/wit-bindgen/actions
+  #   https://github.com/bytecodealliance/wit-bindgen/blob/main/.github/workflows/main.yml
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A language binding generator for WebAssembly interface types";
+    homepage = "https://github.com/bytecodealliance/wit-bindgen";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ xrelkd ];
+    mainProgram = "wit-bindgen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wlc/default.nix b/nixpkgs/pkgs/tools/misc/wlc/default.nix
new file mode 100644
index 000000000000..3b52d7eb284d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wlc/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+with python3.pkgs;
+
+buildPythonPackage rec {
+  pname = "wlc";
+  version = "1.13";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-MZ6avuMNT5HIIXW7ezukAJeO70o+SrgJnBnGjNy4tYE=";
+  };
+
+  propagatedBuildInputs = [
+    argcomplete
+    python-dateutil
+    requests
+    pyxdg
+    responses
+    twine
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "A Weblate commandline client using Weblate's REST API";
+    homepage = "https://github.com/WeblateOrg/wlc";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ paperdigits ];
+    mainProgram = "wlc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/woeusb-ng/default.nix b/nixpkgs/pkgs/tools/misc/woeusb-ng/default.nix
new file mode 100644
index 000000000000..821eb73a4a89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/woeusb-ng/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, wrapGAppsHook
+, p7zip
+, parted
+, grub2
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "woeusb-ng";
+  version = "0.2.12";
+
+  src = fetchFromGitHub {
+    owner = "WoeUSB";
+    repo = "WoeUSB-ng";
+    rev = "v${version}";
+    hash = "sha256-2opSiXbbk0zDRt6WqMh97iAt6/KhwNDopOas+OZn6TU=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py WoeUSB/*.py miscellaneous/* \
+      --replace "/usr/local/" "$out/" \
+      --replace "/usr/" "$out/"
+  '';
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    p7zip
+    parted
+    grub2
+    termcolor
+    wxpython
+    six
+  ];
+
+  preConfigure = ''
+    mkdir -p $out/bin $out/share/applications $out/share/polkit-1/actions
+  '';
+
+  # Unable to access the X Display, is $DISPLAY set properly?
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool to create a Windows USB stick installer from a real Windows DVD or image";
+    homepage = "https://github.com/WoeUSB/WoeUSB-ng";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ stunkymonkey ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/woeusb/default.nix b/nixpkgs/pkgs/tools/misc/woeusb/default.nix
new file mode 100644
index 000000000000..9add255896f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/woeusb/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, installShellFiles, makeWrapper
+, coreutils, dosfstools, findutils, gawk, gnugrep, grub2_light, ncurses, ntfs3g, parted, p7zip, util-linux, wimlib, wget }:
+
+stdenv.mkDerivation rec {
+  version = "5.2.4";
+  pname = "woeusb";
+
+  src = fetchFromGitHub {
+    owner = "WoeUSB";
+    repo = "WoeUSB";
+    rev = "v${version}";
+    sha256 = "sha256-HB1E7rP/U58dyL3j6YnhF5AOGAcHqmA/ZZ5JNBDibco=";
+  };
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  postPatch = ''
+    # Emulate version smudge filter (see .gitattributes, .gitconfig).
+    for file in sbin/woeusb share/man/man1/woeusb.1; do
+      substituteInPlace "$file" \
+        --replace '@@WOEUSB_VERSION@@' '${version}'
+    done
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mv sbin/woeusb $out/bin
+    installManPage share/man/man1/woeusb.1
+
+    wrapProgram "$out/bin/woeusb" \
+      --set PATH '${lib.makeBinPath [ coreutils dosfstools findutils gawk gnugrep grub2_light ncurses ntfs3g parted p7zip util-linux wget wimlib ]}'
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+
+  postInstallCheck = ''
+    # woeusb --version checks for missing runtime dependencies.
+    out_version="$("$out/bin/woeusb" --version)"
+    [ "$out_version" = '${version}' ]
+  '';
+
+  meta = with lib; {
+    description = "Create bootable USB disks from Windows ISO images";
+    homepage = "https://github.com/WoeUSB/WoeUSB";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bjornfor ];
+    platforms = platforms.linux;
+    mainProgram = "woeusb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/woof/default.nix b/nixpkgs/pkgs/tools/misc/woof/default.nix
new file mode 100644
index 000000000000..b73ad5615dd0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/woof/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation {
+  pname = "woof";
+  version = "2022-01-13";
+
+  src = fetchFromGitHub {
+    owner = "simon-budig";
+    repo = "woof";
+    rev = "f51e9db264118d4cbcd839348c4a6223fda49813";
+    sha256 = "sha256-tk55q2Ew2mZkQtkxjWCuNgt9t+UbjH4llIJ42IruqGY=";
+  };
+
+  propagatedBuildInputs = [ python3 ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 -t $out/bin woof
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.home.unix-ag.org/simon/woof.html";
+    description = "Web Offer One File - Command-line utility to easily exchange files over a local network";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    mainProgram = "woof";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wootility/default.nix b/nixpkgs/pkgs/tools/misc/wootility/default.nix
new file mode 100644
index 000000000000..a4f3cb2f92d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wootility/default.nix
@@ -0,0 +1,39 @@
+{ appimageTools
+, fetchurl
+, lib
+, xorg
+, udev
+, wooting-udev-rules
+}:
+
+appimageTools.wrapType2 rec {
+  pname = "wootility";
+  version = "4.5.0";
+
+  src = fetchurl {
+    url = "https://s3.eu-west-2.amazonaws.com/wooting-update/wootility-lekker-linux-latest/wootility-lekker-${version}.AppImage";
+    sha256 = "sha256-5V1OpQZk234iKXOlpoXCbWPyixXkrWT8KkrGB92lPro=";
+  };
+
+  profile = ''
+    export LC_ALL=C.UTF-8
+  '';
+
+  multiPkgs = extraPkgs;
+  extraPkgs =
+    pkgs: (appimageTools.defaultFhsEnvArgs.multiPkgs pkgs) ++ ([
+      udev
+      wooting-udev-rules
+      xorg.libxkbfile
+    ]);
+  extraInstallCommands = "mv $out/bin/{${pname}-${version},${pname}}";
+
+  meta = with lib; {
+    homepage = "https://wooting.io/wootility";
+    description = "A customization and management software for Wooting keyboards";
+    platforms = [ "x86_64-linux" ];
+    license = "unknown";
+    maintainers = with maintainers; [ davidtwco ];
+    mainProgram = "wootility";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/writedisk/default.nix b/nixpkgs/pkgs/tools/misc/writedisk/default.nix
new file mode 100644
index 000000000000..cbceb9b7cb10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/writedisk/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "writedisk";
+  version = "1.3.0";
+
+  src = fetchCrate {
+    inherit version;
+    pname = "writedisk";
+    sha256 = "sha256-MZFnNb8rJMu/nlH8rfnD//bhqPSkhyXucbTrwsRM9OY=";
+  };
+
+  cargoSha256 = "sha256-DGroBBozAViibbIYbtqH2SxIGLqdtyJ9XKyz7O1L05g=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "Small utility for writing a disk image to a USB drive";
+    homepage = "https://github.com/nicholasbishop/writedisk";
+    platforms = platforms.linux;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wsl-open/default.nix b/nixpkgs/pkgs/tools/misc/wsl-open/default.nix
new file mode 100644
index 000000000000..e4698ccbabd0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wsl-open/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "wsl-open";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner = "4U6U57";
+    repo = "wsl-open";
+    rev = "v${version}";
+    sha256 = "sha256-amqkDXdgIqGjRZMkltwco0UAI++G0RY/MxLXwtlxogE=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    install -m0755 -D wsl-open.sh $out/bin/wsl-open
+    installManPage wsl-open.1
+  '';
+
+  meta = with lib; {
+    description = "Open files with xdg-open from Windows Subsystem for Linux (WSL) in Windows applications";
+    homepage = "https://gitlab.com/4U6U57/wsl-open";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "wsl-open";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wv/default.nix b/nixpkgs/pkgs/tools/misc/wv/default.nix
new file mode 100644
index 000000000000..ed1b39b38df4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wv/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, zlib, imagemagick, libpng, glib, pkg-config, libgsf
+, libxml2, bzip2
+, autoreconfHook
+, buildPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wv";
+  version = "1.2.9";
+
+  src = fetchurl {
+    url = "http://www.abisource.com/downloads/${pname}/${version}/${pname}-${version}.tar.gz";
+    sha256 = "17f16lkdv1c3amaz2hagiicih59ynpp4786k1m2qa1sw68xhswsc";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ zlib imagemagick libpng glib libgsf libxml2 bzip2 ];
+
+  configureFlags = [
+    "PKG_CONFIG=${buildPackages.pkg-config}/bin/${buildPackages.pkg-config.targetPrefix}pkg-config"
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  enableParallelBuilding = true;
+
+  # autoreconfHook fails hard if these two files do not exist
+  postPatch = ''
+    touch AUTHORS ChangeLog
+  '';
+
+  meta = {
+    description = "Converter from Microsoft Word formats to human-editable ones";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wv2/default.nix b/nixpkgs/pkgs/tools/misc/wv2/default.nix
new file mode 100644
index 000000000000..d57001449404
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wv2/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, pkg-config, cmake, libgsf, glib, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "wv2";
+  version = "0.4.2";
+  src = fetchurl {
+    url = "mirror://sourceforge/wvware/wv2-${version}.tar.bz2";
+    sha256 = "1p1qxr8z5bsiq8pvlina3c8c1vjcb5d96bs3zz4jj3nb20wnsawz";
+  };
+
+  patches = [ ./fix-include.patch ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libgsf glib libxml2 ];
+
+  env.NIX_CFLAGS_COMPILE = "-I${libxml2.dev}/include/libxml2";
+
+  meta = {
+    description = "Excellent MS Word filter lib, used in most Office suites";
+    license = lib.licenses.lgpl2;
+    homepage = "https://wvware.sourceforge.net";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wv2/fix-include.patch b/nixpkgs/pkgs/tools/misc/wv2/fix-include.patch
new file mode 100644
index 000000000000..df34d24af942
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wv2/fix-include.patch
@@ -0,0 +1,12 @@
+From: http://sourceforge.net/tracker/?func=detail&aid=3544851&group_id=10501&atid=110501
+--- a/src/olestream.h
++++ b/src/olestream.h
+@@ -23,7 +23,7 @@
+ #include "global.h"  // U8,... typedefs
+ #include <stack>
+ 
+-#include <glib/giochannel.h> // GSeekType
++#include <glib.h> // GSeekType
+ 
+ namespace wvWare {
+ 
diff --git a/nixpkgs/pkgs/tools/misc/wwcd/default.nix b/nixpkgs/pkgs/tools/misc/wwcd/default.nix
new file mode 100644
index 000000000000..0e83ada195b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wwcd/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, lib
+, fetchFromSourcehut
+, autoreconfHook
+, pkg-config
+, check
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wwcd";
+  version = "unstable-2022-02-05";
+
+  src = fetchFromSourcehut {
+    owner = "~bitfehler";
+    repo = pname;
+    rev = "cdf70bb18dc60c66c074d4810cb37b9e697811e5";
+    sha256 = "sha256-laf1DEtdEs7q+rtp5Y5rb+7AGsKUv5T413CFWJiURWw=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook pkg-config check
+  ];
+
+  autoreconfFlags = [ "-if" ];
+
+  meta = with lib; {
+    description = "What would cron do? Read crontab entries from stdin and print time of next execution(s)";
+    homepage = "https://git.sr.ht/~bitfehler/wwcd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ laalsaas ];
+    mainProgram = "wwcd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wyrd/default.nix b/nixpkgs/pkgs/tools/misc/wyrd/default.nix
new file mode 100644
index 000000000000..4010a0b42d0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wyrd/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, ocamlPackages, ncurses, remind }:
+
+stdenv.mkDerivation rec {
+  version = "1.4.6";
+  pname = "wyrd";
+
+  src = fetchurl {
+    url = "http://pessimization.com/software/wyrd/wyrd-${version}.tar.gz";
+    sha256 = "0zlrg602q781q8dij62lwdprpfliyy9j1rqfqcz8p2wgndpivddj";
+  };
+
+  preConfigure = ''
+    substituteInPlace curses/curses.ml --replace 'pp gcc' "pp $CC"
+  '';
+
+  strictDeps = true;
+  nativeBuildInputs = [ ocamlPackages.ocaml ocamlPackages.camlp4  ];
+  buildInputs = [ ncurses remind ];
+
+  preferLocalBuild = true;
+
+  meta = with lib; {
+    description = "A text-based front-end to Remind";
+    longDescription = ''
+      Wyrd is a text-based front-end to Remind, a sophisticated
+      calendar and alarm program. Remind's power lies in its
+      programmability, and Wyrd does not hide this capability behind
+      flashy GUI dialogs. Rather, Wyrd is designed to make you more
+      efficient at editing your reminder files directly.
+    '';
+    homepage = "http://pessimization.com/software/wyrd/";
+    downloadPage = "http://pessimization.com/software/wyrd/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.prikhi ];
+    platforms = platforms.linux;
+    mainProgram = "wyrd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/x11idle/default.nix b/nixpkgs/pkgs/tools/misc/x11idle/default.nix
new file mode 100644
index 000000000000..e349b54eecae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/x11idle/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, libXScrnSaver, libX11 }:
+
+stdenv.mkDerivation rec {
+  version = "9.2.4";
+  pname = "x11idle-org";
+
+  src = fetchurl {
+    url = "https://code.orgmode.org/bzg/org-mode/raw/release_${version}/contrib/scripts/x11idle.c";
+    sha256 = "0fc5g57xd6bmghyl214gcff0ni3idv33i3gkr339kgn1mdjljv5g";
+  };
+
+  buildInputs = [ libXScrnSaver libX11 ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    gcc -lXss -lX11 $src -o $out/bin/x11idle
+  '';
+
+  meta = with lib; {
+    description = ''
+      Compute consecutive idle time for current X11 session with millisecond resolution
+    '';
+    longDescription = ''
+      Idle time passes when the user does not act, i.e. when the user doesn't move the mouse or use the keyboard.
+    '';
+    homepage = "https://orgmode.org/";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.swflint ];
+    mainProgram = "x11idle";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xburst-tools/default.nix b/nixpkgs/pkgs/tools/misc/xburst-tools/default.nix
new file mode 100644
index 000000000000..e850e347b29a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xburst-tools/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchgit, libusb-compat-0_1, libusb1, autoconf, automake, libconfuse, pkg-config
+, gccCross ? null
+}:
+
+let
+  version = "2011-12-26";
+in
+stdenv.mkDerivation {
+  pname = "xburst-tools";
+  inherit version;
+
+  src = fetchgit {
+    url = "git://projects.qi-hardware.com/xburst-tools.git";
+    rev = "c71ce8e15db25fe49ce8702917cb17720882e341";
+    sha256 = "1hzdngs1l5ivvwnxjwzc246am6w1mj1aidcf0awh9yw0crzcjnjr";
+  };
+
+  preConfigure = ''
+    sh autogen.sh
+  '';
+
+  # Workaround build failure on -fno-common toolchains:
+  #   mipsel-unknown-linux-uclibc-ld: boothandler.o:(.bss+0x8): multiple definition of
+  #     `start_addr'; main.o:(.bss+0x8): first defined here
+  NIX_CFLAGS_COMPILE_FOR_TARGET = "-fcommon";
+
+  configureFlags = lib.optionals (gccCross != null) [
+    "--enable-firmware"
+    "CROSS_COMPILE=${gccCross.targetPrefix}"
+  ];
+
+  hardeningDisable = [ "pic" "stackprotector" ];
+
+  # Not to strip cross build binaries (this is for the gcc-cross-wrapper)
+  dontCrossStrip = true;
+
+  nativeBuildInputs = [ autoconf automake pkg-config ];
+  buildInputs = [ libusb-compat-0_1 libusb1 libconfuse ] ++
+    lib.optional (gccCross != null) gccCross;
+
+  meta = {
+    broken = stdenv.isDarwin;
+    description = "Qi tools to access the Ben Nanonote USB_BOOT mode";
+    license = lib.licenses.gpl3;
+    homepage = "http://www.linux-mtd.infradead.org/";
+    maintainers = with lib.maintainers; [viric];
+    platforms = lib.platforms.x86_64;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xcd/default.nix b/nixpkgs/pkgs/tools/misc/xcd/default.nix
new file mode 100644
index 000000000000..350da6c93925
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xcd/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "xcd";
+  version = "1.2";
+
+  src = fetchurl {
+    url = "https://www.muppetlabs.com/~breadbox/pub/software/${pname}-${version}.tar.gz";
+    sha256 = "1cgwspy08q05rhxbp7m1yrrix252i9jzfcfbzmhdvlgf5bfpl25g";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D $pname $out/bin/$pname
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Colorized hexdump tool";
+    homepage = "https://www.muppetlabs.com/~breadbox/software/xcd.html";
+    maintainers = [ maintainers.xfnw ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+    mainProgram = "xcd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xclip/default.nix b/nixpkgs/pkgs/tools/misc/xclip/default.nix
new file mode 100644
index 000000000000..721d300a19ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xclip/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libXmu }:
+
+stdenv.mkDerivation rec {
+  pname = "xclip";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner = "astrand";
+    repo = "xclip";
+    rev = version;
+    sha256 = "0q0hmvcjlv8arhh1pzhja2wglyj6n7z209jnpnzd281kqqv4czcs";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ libXmu ];
+
+  meta = {
+    description = "Tool to access the X clipboard from a console application";
+    homepage = "https://github.com/astrand/xclip";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
+    mainProgram = "xclip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xcp/default.nix b/nixpkgs/pkgs/tools/misc/xcp/default.nix
new file mode 100644
index 000000000000..b1c11c4465e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xcp/default.nix
@@ -0,0 +1,26 @@
+{ rustPlatform, fetchFromGitHub, lib }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xcp";
+  version = "0.18.1";
+
+  src = fetchFromGitHub {
+    owner = "tarka";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-uZnKrWD3a3TpdKplLxzCKacfpuoo3vrCZmFsePIxR18=";
+  };
+
+  # no such file or directory errors
+  doCheck = false;
+
+  cargoHash = "sha256-QaLNc05fI6V/5hbSfOL+uKnjkyxDclAmULx45z9gigs=";
+
+  meta = with lib; {
+    description = "An extended cp(1)";
+    homepage = "https://github.com/tarka/xcp";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ lom ];
+    mainProgram = "xcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdaliclock/default.nix b/nixpkgs/pkgs/tools/misc/xdaliclock/default.nix
new file mode 100644
index 000000000000..7201ffcbbe99
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdaliclock/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl
+, gtk3
+, wrapGAppsHook
+, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "xdaliclock";
+  version = "2.48";
+
+  src = fetchurl {
+    url = "https://www.jwz.org/xdaliclock/${pname}-${version}.tar.gz";
+    hash = "sha256-BZiqjTSSAgvT/56OJDcKh4pDP9uqVhR5cCx89H+5FLQ=";
+  };
+
+  # Note: don't change this to set sourceRoot, or updateAutotoolsGnuConfigScriptsHook
+  # on aarch64 doesn't find the files to patch and the aarch64 build fails!
+  preConfigure = "cd X11";
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook
+  ];
+  buildInputs = [
+    gtk3
+  ];
+
+  preInstall = ''
+    mkdir -vp $out/bin $out/share/man/man1 $out/share/gsettings-schemas/$name/glib-2.0/schemas $out/share/pixmaps $out/share/applications
+
+    # https://www.jwz.org/blog/2022/08/dali-clock-2-45-released/#comment-236762
+    gappsWrapperArgs+=(--set MESA_GL_VERSION_OVERRIDE 3.1)
+  '';
+
+  installFlags = [
+    "GTK_ICONDIR=${placeholder "out"}/share/pixmaps/"
+    "GTK_APPDIR=${placeholder "out"}/share/applications/"
+  ];
+
+  meta = with lib; {
+    description = "A clock application that morphs digits when they are changed";
+    maintainers = with maintainers; [ raskin ];
+    platforms = with platforms; linux ++ freebsd;
+    license = licenses.free; #TODO BSD on Gentoo, looks like MIT
+    downloadPage = "http://www.jwz.org/xdaliclock/";
+    mainProgram = "xdaliclock";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdg-ninja/default.nix b/nixpkgs/pkgs/tools/misc/xdg-ninja/default.nix
new file mode 100644
index 000000000000..f3c4ca677051
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdg-ninja/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenvNoCC, fetchFromGitHub, makeWrapper, jq, glow }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "xdg-ninja";
+  version = "0.2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "b3nj5m1n";
+    repo = "xdg-ninja";
+    rev = "v${version}";
+    sha256 = "sha256-ASJIFQ/BpZMQGRtw8kPhtMCbXC1eb/X8TWQz+CAnaSM=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 xdg-ninja.sh "$out/share/xdg-ninja/xdg-ninja.sh"
+    install -Dm644 programs/* -t "$out/share/xdg-ninja/programs"
+
+    mkdir -p "$out/bin"
+    ln -s "$out/share/xdg-ninja/xdg-ninja.sh" "$out/bin/xdg-ninja"
+
+    wrapProgram "$out/bin/xdg-ninja" \
+      --prefix PATH : "${lib.makeBinPath [ glow jq ]}"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A shell script which checks your $HOME for unwanted files and directories";
+    homepage = "https://github.com/b3nj5m1n/xdg-ninja";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ arcuru ];
+    mainProgram = "xdg-ninja";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdiskusage/default.nix b/nixpkgs/pkgs/tools/misc/xdiskusage/default.nix
new file mode 100644
index 000000000000..9db3563ca247
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdiskusage/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, fltk }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xdiskusage";
+  version = "1.60";
+
+  src = fetchurl {
+    url = "https://xdiskusage.sourceforge.net/xdiskusage-${finalAttrs.version}.tgz";
+    hash = "sha256-e1NtxvG9xtm+x8KblDXCPZ0yv/ig6+4muZZrJz3J9n4=";
+  };
+
+  nativeBuildInputs = [ fltk ];
+
+  meta = {
+    description = "Program to show you what is using up all your disk space";
+    homepage = "https://xdiskusage.sourceforge.net/";
+    license = with lib.licenses; [ gpl2Plus ];
+    maintainers = with lib.maintainers; [ fuzzdk ];
+    platforms = with lib.platforms; linux;
+    mainProgram = "xdiskusage";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/xdo/default.nix b/nixpkgs/pkgs/tools/misc/xdo/default.nix
new file mode 100644
index 000000000000..268dfcd66e04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdo/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, libxcb, xcbutil, xcbutilwm }:
+
+stdenv.mkDerivation rec {
+   pname = "xdo";
+   version = "0.5.7";
+
+   src = fetchFromGitHub {
+     owner = "baskerville";
+     repo = "xdo";
+     rev = version;
+     sha256 = "1h3jrygcjjbavdbkpx2hscsf0yf97gk487lzjdlvymd7dxdv9hy9";
+   };
+
+   makeFlags = [ "PREFIX=$(out)" ];
+
+   buildInputs = [ libxcb xcbutilwm xcbutil ];
+
+   meta = with lib; {
+     description = "Small X utility to perform elementary actions on windows";
+     homepage = "https://github.com/baskerville/xdo";
+     maintainers = with maintainers; [ meisternu ];
+     license = licenses.bsd2;
+     platforms = platforms.linux;
+     mainProgram = "xdo";
+   };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdummy/default.nix b/nixpkgs/pkgs/tools/misc/xdummy/default.nix
new file mode 100644
index 000000000000..227829346cd0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdummy/default.nix
@@ -0,0 +1,85 @@
+{ writeText, writeScriptBin, xorg, xkeyboard_config, runtimeShell
+, unfreeFonts ? false, lib}:
+
+let
+  xorgConfig = writeText "dummy-xorg.conf" ''
+    Section "ServerLayout"
+      Identifier     "dummy_layout"
+      Screen         0 "dummy_screen"
+      InputDevice    "dummy_keyboard" "CoreKeyboard"
+      InputDevice    "dummy_mouse" "CorePointer"
+    EndSection
+
+    Section "ServerFlags"
+      Option "DontVTSwitch" "true"
+      Option "AllowMouseOpenFail" "true"
+      Option "PciForceNone" "true"
+      Option "AutoEnableDevices" "false"
+      Option "AutoAddDevices" "false"
+    EndSection
+
+    Section "Files"
+      ModulePath "${xorg.xorgserver.out}/lib/xorg/modules"
+      ModulePath "${xorg.xf86videodummy}/lib/xorg/modules"
+      XkbDir "${xkeyboard_config}/share/X11/xkb"
+      FontPath "${xorg.fontadobe75dpi}/lib/X11/fonts/75dpi"
+      FontPath "${xorg.fontadobe100dpi}/lib/X11/fonts/100dpi"
+      FontPath "${xorg.fontmiscmisc}/lib/X11/fonts/misc"
+      FontPath "${xorg.fontcursormisc}/lib/X11/fonts/misc"
+    ${lib.optionalString unfreeFonts ''
+      FontPath "${xorg.fontbhlucidatypewriter75dpi}/lib/X11/fonts/75dpi"
+      FontPath "${xorg.fontbhlucidatypewriter100dpi}/lib/X11/fonts/100dpi"
+      FontPath "${xorg.fontbh100dpi}/lib/X11/fonts/100dpi"
+    ''}
+    EndSection
+
+    Section "Module"
+      Load           "dbe"
+      Load           "extmod"
+      Load           "freetype"
+      Load           "glx"
+    EndSection
+
+    Section "InputDevice"
+      Identifier     "dummy_mouse"
+      Driver         "void"
+    EndSection
+
+    Section "InputDevice"
+      Identifier     "dummy_keyboard"
+      Driver         "void"
+    EndSection
+
+    Section "Monitor"
+      Identifier     "dummy_monitor"
+      HorizSync       30.0 - 130.0
+      VertRefresh     50.0 - 250.0
+      Option         "DPMS"
+    EndSection
+
+    Section "Device"
+      Identifier     "dummy_device"
+      Driver         "dummy"
+      VideoRam       192000
+    EndSection
+
+    Section "Screen"
+      Identifier     "dummy_screen"
+      Device         "dummy_device"
+      Monitor        "dummy_monitor"
+      DefaultDepth    24
+      SubSection     "Display"
+        Depth       24
+        Modes      "1280x1024"
+      EndSubSection
+    EndSection
+  '';
+
+in writeScriptBin "xdummy" ''
+  #!${runtimeShell}
+  exec ${xorg.xorgserver.out}/bin/Xorg \
+    -noreset \
+    -logfile /dev/null \
+    "$@" \
+    -config "${xorgConfig}"
+''
diff --git a/nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix b/nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix
new file mode 100644
index 000000000000..e23d68f8fccb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication {
+  pname = "xdxf2slob";
+  version = "unstable-2015-06-30";
+
+  src = fetchFromGitHub {
+    owner = "itkach";
+    repo = "xdxf2slob";
+    rev = "6831b93c3db8c73200900fa4ddcb17350a677e1b";
+    sha256 = "0m3dnc3816ja3kmik1wabb706dkqdf5sxvabwgf2rcrq891xcddd";
+  };
+
+  propagatedBuildInputs = [ python3Packages.pyicu python3Packages.slob ];
+
+  meta = with lib; {
+    description = "Tool to convert XDXF dictionary files to slob format";
+    homepage = "https://github.com/itkach/xdxf2slob/";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    mainProgram = "xdxf2slob";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xflux/default.nix b/nixpkgs/pkgs/tools/misc/xflux/default.nix
new file mode 100644
index 000000000000..5cfda2df174f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xflux/default.nix
@@ -0,0 +1,42 @@
+{lib, stdenv, fetchurl, libXxf86vm, libXext, libX11, libXrandr, gcc}:
+stdenv.mkDerivation {
+  pname = "xflux";
+  version = "unstable-2013-09-01";
+  src = fetchurl {
+    url = "https://justgetflux.com/linux/xflux64.tgz";
+    sha256 = "cc50158fabaeee58c331f006cc1c08fd2940a126e99d37b76c8e878ef20c2021";
+  };
+
+  libPath = lib.makeLibraryPath [
+    gcc.cc
+    libXxf86vm
+    libXext
+    libX11
+    libXrandr
+  ];
+
+  unpackPhase = ''
+    unpackFile $src;
+  '';
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp  xflux "$out/bin"
+  '';
+  postFixup = ''
+    patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) --set-rpath "$libPath" "$out/bin/xflux"
+  '';
+  meta = {
+    description = "Adjusts your screen to emit warmer light at night";
+    longDescription = ''
+      xflux changes the color temperature of your screen to be much warmer
+      when the sun sets, and then changes it back its colder temperature
+      when the sun rises.
+    '';
+    homepage = "https://justgetflux.com/";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.paholg ];
+    mainProgram = "xflux";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xflux/gui.nix b/nixpkgs/pkgs/tools/misc/xflux/gui.nix
new file mode 100644
index 000000000000..a9ec5d5d0eeb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xflux/gui.nix
@@ -0,0 +1,49 @@
+{ lib, fetchFromGitHub, buildPythonApplication, python3Packages, wrapGAppsHook
+, xflux, gtk3, gobject-introspection, pango, gdk-pixbuf, atk
+, pexpect, pygobject3, pyxdg, libappindicator-gtk3
+}:
+buildPythonApplication rec {
+  pname = "xflux-gui";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    repo = "xflux-gui";
+    owner = "xflux-gui";
+    rev = "v${version}";
+    sha256 = "09zphcd9821ink63636swql4g85hg6lpsazqg1mawlk9ikc8zbps";
+  };
+
+  propagatedBuildInputs = [
+    pyxdg
+    pexpect
+    pygobject3
+  ];
+
+  buildInputs = [
+    xflux gtk3
+  ];
+
+  nativeBuildInputs = [
+    wrapGAppsHook gobject-introspection
+    pango gdk-pixbuf atk libappindicator-gtk3
+  ];
+
+  postPatch = ''
+     substituteInPlace src/fluxgui/xfluxcontroller.py \
+       --replace "pexpect.spawn(\"xflux\"" "pexpect.spawn(\"${xflux}/bin/xflux\""
+  '';
+
+  postFixup = ''
+    wrapGAppsHook
+    wrapPythonPrograms
+    patchPythonScript $out/${python3Packages.python.sitePackages}/fluxgui/fluxapp.py
+  '';
+
+  meta = {
+    description = "Better lighting for Linux. Open source GUI for xflux";
+    homepage = "https://justgetflux.com/linux.html";
+    license = lib.licenses.unfree; # marked as unfree since the source code contains a copy of the unfree xflux binary
+    maintainers = [ lib.maintainers.sheenobu ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xfstests/default.nix b/nixpkgs/pkgs/tools/misc/xfstests/default.nix
new file mode 100644
index 000000000000..5080c8592492
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xfstests/default.nix
@@ -0,0 +1,111 @@
+{ stdenv, acl, attr, autoconf, automake, bash, bc, coreutils, e2fsprogs
+, fetchzip, fio, gawk, keyutils, killall, lib, libaio, libcap, libtool
+, libuuid, libxfs, lvm2, openssl, perl, procps, quota
+, time, util-linux, which, writeScript, xfsprogs, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "xfstests";
+  version = "2023.05.14";
+
+  src = fetchzip {
+    url = "https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/snapshot/xfstests-dev-v${version}.tar.gz";
+    hash = "sha256-yyjY9Q3eUH+q+o15zFUjOcNz1HpXPCwdcxWXoycOx98=";
+  };
+
+  nativeBuildInputs = [
+    autoconf automake libtool
+  ];
+  buildInputs = [
+    acl attr gawk libaio libuuid libxfs openssl perl
+  ];
+
+  hardeningDisable = [ "format" ];
+  enableParallelBuilding = true;
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace "cp include/install-sh ." "cp -f include/install-sh ."
+
+    # Patch the destination directory
+    sed -i include/builddefs.in -e "s|^PKG_LIB_DIR\s*=.*|PKG_LIB_DIR=$out/lib/xfstests|"
+
+    # Don't canonicalize path to mkfs (in util-linux) - otherwise e.g. mkfs.ext4 isn't found
+    sed -i common/config -e 's|^export MKFS_PROG=.*|export MKFS_PROG=mkfs|'
+
+    # Move the Linux-specific test output files to the correct place, or else it will
+    # try to move them at runtime. Also nuke all the irix crap.
+    for f in tests/*/*.out.linux; do
+      mv $f $(echo $f | sed -e 's/\.linux$//')
+    done
+    rm -f tests/*/*.out.irix
+
+    # Fix up lots of impure paths
+    for f in common/* tools/* tests/*/*; do
+      sed -i $f -e 's|/bin/bash|${bash}/bin/bash|'
+      sed -i $f -e 's|/bin/true|true|'
+      sed -i $f -e 's|/usr/sbin/filefrag|${e2fsprogs}/bin/filefrag|'
+      sed -i $f -e 's|hostname -s|hostname|'   # `hostname -s` seems problematic on NixOS
+      sed -i $f -e 's|$(_yp_active)|1|'        # NixOS won't ever have Yellow Pages enabled
+    done
+
+    for f in src/*.c src/*.sh; do
+      sed -e 's|/bin/rm|${coreutils}/bin/rm|' -i $f
+      sed -e 's|/usr/bin/time|${time}/bin/time|' -i $f
+    done
+
+    patchShebangs .
+  '';
+
+  preConfigure = ''
+    # The configure scripts really don't like looking in PATH at all...
+    export AWK=$(type -P awk)
+    export ECHO=$(type -P echo)
+    export LIBTOOL=$(type -P libtool)
+    export MAKE=$(type -P make)
+    export SED=$(type -P sed)
+    export SORT=$(type -P sort)
+
+    make configure
+  '';
+
+  postInstall = ''
+    patchShebangs $out/lib/xfstests
+
+    mkdir -p $out/bin
+    substitute $wrapperScript $out/bin/xfstests-check --subst-var out
+    chmod a+x $out/bin/xfstests-check
+  '';
+
+  # The upstream package is pretty hostile to packaging; it looks up
+  # various paths relative to current working directory, and also
+  # wants to write temporary files there. So create a temporary
+  # to run from and symlink the runtime files to it.
+  wrapperScript = writeScript "xfstests-check" ''
+    #!${runtimeShell}
+    set -e
+    export RESULT_BASE="$(pwd)/results"
+
+    dir=$(mktemp --tmpdir -d xfstests.XXXXXX)
+    trap "rm -rf $dir" EXIT
+
+    chmod a+rx "$dir"
+    cd "$dir"
+    for f in $(cd @out@/lib/xfstests; echo *); do
+      ln -s @out@/lib/xfstests/$f $f
+    done
+
+    export PATH=${lib.makeBinPath [acl attr bc e2fsprogs fio gawk keyutils
+                                   libcap lvm2 perl procps killall quota
+                                   util-linux which xfsprogs]}:$PATH
+    exec ./check "$@"
+  '';
+
+  meta = with lib; {
+    description = "Torture test suite for filesystems";
+    homepage = "https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "xfstests-check";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xiccd/default.nix b/nixpkgs/pkgs/tools/misc/xiccd/default.nix
new file mode 100644
index 000000000000..4ffb5b689e3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xiccd/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libX11, libXrandr, glib, colord }:
+
+stdenv.mkDerivation rec {
+  pname = "xiccd";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "agalakhov";
+    repo = "xiccd";
+    rev = "v${version}";
+    sha256 = "159fyz5535lcabi5bzmxgmjdgxlqcjaiqgzr00mi3ax0i5fdldwn";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libX11 libXrandr glib colord ];
+
+  meta = with lib; {
+    description = "X color profile daemon";
+    homepage = "https://github.com/agalakhov/xiccd";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+    mainProgram = "xiccd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix b/nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix
new file mode 100644
index 000000000000..1eece16d3511
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "xilinx-bootgen";
+  version = "xilinx_v2023.2";
+
+  src = fetchFromGitHub {
+    owner = "xilinx";
+    repo = "bootgen";
+    rev = version;
+    hash = "sha256-YRaq36N6uBHyjuHQ5hCO35Y+y818NuSjg/js181iItA=";
+  };
+
+  buildInputs = [ openssl ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    install -Dm755 bootgen $out/bin/bootgen
+  '';
+
+  meta = with lib; {
+    description = "Generate Boot Images for Xilinx Zynq and ZU+ SoCs";
+    longDescription = ''
+      Bootgen for Xilinx Zynq and ZU+ SoCs, without code related to generating
+      obfuscated key and without code to support FPGA encryption and
+      authentication. These features are only available as part of Bootgen
+      shipped with Vivado tools.
+
+      For more details about Bootgen, please refer to Xilinx UG1283.
+    '';
+    homepage = "https://github.com/Xilinx/bootgen";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.flokli ];
+    mainProgram = "bootgen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xjobs/default.nix b/nixpkgs/pkgs/tools/misc/xjobs/default.nix
new file mode 100644
index 000000000000..9dfa605fbc47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xjobs/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv, fetchurl
+, flex, installShellFiles, ncurses, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xjobs";
+  version = "20200726";
+
+  src = fetchurl {
+    url = "mirror://sourceforge//xjobs/files/${pname}-${version}.tgz";
+    sha256 = "0ay6gn43pnm7r1jamwgpycl67bjg5n87ncl27jb01w2x6x70z0i3";
+  };
+
+  nativeBuildInputs = [
+    flex
+    installShellFiles
+    which
+  ];
+  buildInputs = [
+    ncurses
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+    ./${pname} -V
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{bin,etc}
+    install -m755 ${pname} $out/bin/${pname}
+    install -m644 ${pname}.rc $out/etc/${pname}.rc
+    installManPage ${pname}.1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A program which reads job descriptions line by line and executes them in parallel";
+    homepage = "https://www.maier-komor.de/xjobs.html";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.siriobalmelli ];
+    longDescription = ''
+      xjobs reads job descriptions line by line and executes them in parallel.
+
+      It limits the number of parallel executing jobs and starts new jobs when jobs finish.
+
+      Therefore, it combines the arguments from every input line with the utility
+      and arguments given on the command line.
+      If no utility is given as an argument to xjobs,
+      then the first argument on every job line will be used as utility.
+      To execute utility xjobs searches the directories given in the PATH environment variable
+      and uses the first file found in these directories.
+
+      xjobs is most useful on multi-processor/core machines when one needs to execute
+      several time consuming command several that could possibly be run in parallel.
+      With xjobs this can be achieved easily, and it is possible to limit the load
+      of the machine to a useful value.
+
+      It works similar to xargs, but starts several processes simultaneously
+      and gives only one line of arguments to each utility call.
+    '';
+    mainProgram = "xjobs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xmlbeans/default.nix b/nixpkgs/pkgs/tools/misc/xmlbeans/default.nix
new file mode 100644
index 000000000000..f3702d0302c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xmlbeans/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchzip, jre_headless }:
+
+stdenv.mkDerivation rec {
+  pname = "xmlbeans";
+  version = "5.1.1-20220819";
+
+  src = fetchzip {
+    # old releases are deleted from the cdn
+    url = "https://web.archive.org/web/20230313151507/https://dlcdn.apache.org/poi/xmlbeans/release/bin/xmlbeans-bin-${version}.zip";
+    sha256 = "sha256-TDnWo1uJWL6k6Z8/uaF2LBNzRVQMHYopYze/2Fb/0aI=";
+  };
+
+  postPatch = ''
+    rm bin/*.cmd
+    substituteInPlace bin/dumpxsb \
+      --replace 'echo `dirname $0`' ""
+
+    substituteInPlace bin/_setlib \
+      --replace 'echo XMLBEANS_LIB=$XMLBEANS_LIB' ""
+
+    for file in bin/*; do
+      substituteInPlace $file \
+        --replace "java " "${jre_headless}/bin/java "
+    done
+  '';
+
+  installPhase = ''
+    mkdir -p $out
+    chmod +x bin/*
+    cp -r bin/ lib/ $out/
+  '';
+
+  meta = with lib; {
+    description = "Java library for accessing XML by binding it to Java types";
+    homepage = "https://xmlbeans.apache.org/";
+    downloadPage = "https://dlcdn.apache.org/poi/xmlbeans/release/bin/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xmonad-log/default.nix b/nixpkgs/pkgs/tools/misc/xmonad-log/default.nix
new file mode 100644
index 000000000000..9ba7941b45f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xmonad-log/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "xmonad-log";
+  version = "0.1.0";
+
+  goPackagePath = "github.com/xintron/xmonad-log";
+
+  src = fetchFromGitHub {
+    owner = "xintron";
+    repo = "xmonad-log";
+    rev = version;
+    sha256 = "1il6v0zcjw0pfb1hjj198y94jmlcx255h422ph0f1zr7afqkzmaw";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "xmonad DBus monitoring solution";
+    homepage = "https://github.com/xintron/xmonad-log";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ joko ];
+    mainProgram = "xmonad-log";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix b/nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix
new file mode 100644
index 000000000000..f5a7c7e5dd1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev = "a389bdde4dd695d414e47b755e95e72b7826432c";
+      sha256 = "1ckvg15zdsgmbn4mi36cazkb407ixc9mmyf7vwj8b8wi3d00rgn9";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/xprite-editor/default.nix b/nixpkgs/pkgs/tools/misc/xprite-editor/default.nix
new file mode 100644
index 000000000000..87733d5d9a81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xprite-editor/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, gtk3
+, AppKit
+, pkg-config
+, python3
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xprite-editor-unstable";
+  version = "2019-09-22";
+
+  src = fetchFromGitHub {
+    owner = "rickyhan";
+    repo = "xprite-editor";
+    rev = "7f899dff982642927024540e4bafd74e4ea5e52a";
+    sha256 = "1k6k8y8gg1vdmyjz27q689q9rliw0rrnzwlpjcd4vlc6swaq9ahx";
+    fetchSubmodules = true;
+    # Rename unicode file name which leads to different checksums on HFS+
+    # vs. other filesystems because of unicode normalization.
+    postFetch = ''
+      mv $out/config/palettes/Sweet\ Guaran*.hex $out/config/palettes/Sweet\ Guarana.hex
+    '';
+  };
+
+  buildInputs = lib.optionals stdenv.isLinux [ gtk3 ]
+    ++ lib.optionals stdenv.isDarwin [ AppKit ];
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config python3 ];
+
+  cargoSha256 = "0z1ip667d1qwvm9md3zg8ib9jixpg7qj5ypwib7r2928h14yg7ck";
+
+  cargoBuildFlags = [ "--bin" "xprite-native" ];
+
+  meta = with lib; {
+    # error[E0034]: multiple applicable items in scope
+    # multiple `clamp` found
+    # https://github.com/NixOS/nixpkgs/issues/146949
+    broken = true;
+    homepage = "https://github.com/rickyhan/xprite-editor";
+    description = "Pixel art editor";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xq/default.nix b/nixpkgs/pkgs/tools/misc/xq/default.nix
new file mode 100644
index 000000000000..deddb3306440
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xq/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xq";
+  version = "0.3.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-mgvs3/gseLnFtAciW5txtYqo+8DyyQC7y/tN1kDqcb4=";
+  };
+
+  cargoHash = "sha256-lSyJqGWlk3ldgAkyebuyUDLp8mJdwnw8ee6ZHQXU2Y4=";
+
+  meta = with lib; {
+    description = "Pure rust implementation of jq";
+    homepage = "https://github.com/MiSawa/xq";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthewcroughan ];
+    mainProgram = "xq";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xsel/default.nix b/nixpkgs/pkgs/tools/misc/xsel/default.nix
new file mode 100644
index 000000000000..f32d0a81a61e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xsel/default.nix
@@ -0,0 +1,34 @@
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+  pkg-config,
+  autoreconfHook,
+  libX11,
+  libXt
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xsel";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "kfish";
+    repo = "xsel";
+    rev = finalAttrs.version;
+    hash = "sha256-F2w/Ad8IWxJNH90/0a9+1M8bLfn1M3m4TH3PNpQmEFI=";
+  };
+
+  nativeBuildInputs = [pkg-config autoreconfHook];
+  buildInputs = [libX11 libXt];
+
+  meta = with lib; {
+    description = "Command-line program for getting and setting the contents of the X selection";
+    homepage = "http://www.kfish.org/software/xsel";
+    changelog = "https://github.com/kfish/xsel/releases/tag/${finalAttrs.version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [cafkafk];
+    platforms = lib.platforms.unix;
+    mainProgram = "xsel";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/xstow/default.nix b/nixpkgs/pkgs/tools/misc/xstow/default.nix
new file mode 100644
index 000000000000..e40cffb51659
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xstow/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, ncurses
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xstow";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "majorkingleo";
+    repo = "xstow";
+    rev = version;
+    fetchSubmodules = true;
+    hash = "sha256-c89+thw5N3Cgl1Ww+W7c3YsyhNJMLlreedvdWJFY3WY=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  # Upstream seems to try to support building both static and dynamic version
+  # of executable on dynamic systems, but fails with link error when attempting
+  # to cross-build "xstow-static" to the system where "xstow" proper is static.
+  postPatch = lib.optionalString stdenv.hostPlatform.isStatic ''
+    substituteInPlace src/Makefile.am --replace xstow-static ""
+    substituteInPlace src/Makefile.am --replace xstow-stow ""
+  '';
+
+  buildInputs = [
+    ncurses
+  ];
+
+  meta = with lib; {
+    description = "A replacement of GNU Stow written in C++";
+    homepage = "https://github.com/majorkingleo/xstow";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ nzbr ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xtitle/default.nix b/nixpkgs/pkgs/tools/misc/xtitle/default.nix
new file mode 100644
index 000000000000..94e650144956
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xtitle/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, libxcb, xcbutil, xcbutilwm, git }:
+
+stdenv.mkDerivation rec {
+  pname = "xtitle";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "baskerville";
+    repo = "xtitle";
+    rev = version;
+    hash = "sha256-SVfM2vCCacgchXj0c0sPk3VR6DUI4R0ofFnxJSY4oDg=";
+  };
+
+  postPatch = ''
+    sed -i "s|/usr/local|$out|" Makefile
+  '';
+
+  buildInputs = [ libxcb git xcbutil xcbutilwm ];
+
+  meta = with lib; {
+    description = "Outputs X window titles";
+    homepage = "https://github.com/baskerville/xtitle";
+    maintainers = with maintainers; [ meisternu ];
+    license = "Custom";
+    platforms = platforms.linux;
+    mainProgram = "xtitle";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xvfb-run/default.nix b/nixpkgs/pkgs/tools/misc/xvfb-run/default.nix
new file mode 100644
index 000000000000..eb1e7c5b01b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xvfb-run/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, makeWrapper
+, xorgserver
+, getopt
+, xauth
+, util-linux
+, which
+, fontsConf
+, gawk
+, coreutils
+, installShellFiles
+, xterm
+}:
+stdenvNoCC.mkDerivation rec {
+  pname = "xvfb-run";
+  version = "1+g87f6705";
+
+  src = fetchFromGitHub {
+    owner = "archlinux";
+    repo = "svntogit-packages";
+    rev = "87f67054c49b32511893acd22be94c47ecd44b4a";
+    sha256 = "sha256-KEg92RYgJd7naHFDKbdXEy075bt6NLcmX8VhQROHVPs=";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  dontUnpack = true;
+  dontBuild = true;
+  dontConfigure = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src/trunk/xvfb-run $out/bin/xvfb-run
+    installManPage $src/trunk/xvfb-run.1
+
+    chmod a+x $out/bin/xvfb-run
+    patchShebangs $out/bin/xvfb-run
+    wrapProgram $out/bin/xvfb-run \
+      --set-default FONTCONFIG_FILE "${fontsConf}" \
+      --prefix PATH : ${lib.makeBinPath [ getopt xorgserver xauth which util-linux gawk coreutils ]}
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    (
+      unset PATH
+      echo "running xterm with xvfb-run"
+      $out/bin/xvfb-run ${lib.getBin xterm}/bin/xterm -e true
+    )
+  '';
+
+  passthru = {
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    description = "Convenience script to run a virtualized X-Server";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.artturin ];
+    mainProgram = "xvfb-run";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xvfb-run/update.sh b/nixpkgs/pkgs/tools/misc/xvfb-run/update.sh
new file mode 100755
index 000000000000..e592323154e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xvfb-run/update.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused nix-prefetch jq common-updater-scripts
+# shellcheck shell=bash
+
+set -e
+
+info=$(nix-prefetch-git --quiet --url "https://github.com/archlinux/svntogit-packages" --rev "refs/heads/packages/xorg-server")
+
+rev=$(jq -r '.rev' <<< "$info")
+sha256=$(nix hash to-sri --type sha256 "$(jq -r '.sha256' <<< "$info")")
+dir=$(jq -r '.path' <<< "$info")
+
+newXvfbsha=$(sha256sum "$dir/trunk/xvfb-run")
+oldXvfbsha=$(sha256sum "$(nix build --quiet ".#xvfb-run.src" --json --no-link | jq -r '.[].outputs.out')/trunk/xvfb-run")
+
+if [[ "$newXvfbsha" != "$oldXvfbsha" ]]; then
+    (
+        cd "$(git rev-parse --show-toplevel)"
+        update-source-version xvfb-run "1+g${rev:0:7}" "$sha256" --rev="$rev"
+    )
+fi
diff --git a/nixpkgs/pkgs/tools/misc/xxv/default.nix b/nixpkgs/pkgs/tools/misc/xxv/default.nix
new file mode 100644
index 000000000000..0068de3c9245
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xxv/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform
+, ncurses ? null
+, darwin ? null }:
+
+let useNcurses = !stdenv.hostPlatform.isWindows; in
+
+assert useNcurses -> ncurses != null;
+
+rustPlatform.buildRustPackage rec {
+  pname   = "xxv";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner  = "chrisvest";
+    repo   = pname;
+    rev    = version;
+    sha256 = "0ppfsgdigza2jppbkg4qanjhlkpnq7p115c4471vc6vpikpfrlk3";
+  };
+
+  cargoSha256 = "0pmpvlmy4pw252is34r9af1ysrp78xs8pz8cw4rys9s4fh2hmhjb";
+
+  buildInputs = lib.optionals useNcurses [ ncurses ]
+  ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Security ])
+  ;
+
+  # I'm picking pancurses for Windows simply because that's the example given in Cursive's
+  # documentation for picking an alternative backend. We could just as easily pick crossterm.
+  buildNoDefaultFeatures = !useNcurses;
+  buildFeatures = lib.optional (!useNcurses) "pancurses-backend";
+
+  meta = with lib; {
+    description = "A visual hex viewer for the terminal";
+    longDescription = ''
+      XXV is a terminal hex viewer with a text user interface, written in 100% safe Rust.
+    '';
+    homepage    = "https://chrisvest.github.io/xxv/";
+    license     = with licenses; [ gpl3 ];
+    maintainers = with maintainers; [ lilyball ];
+    mainProgram = "xxv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yad/default.nix b/nixpkgs/pkgs/tools/misc/yad/default.nix
new file mode 100644
index 000000000000..9bbb955f1a1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yad/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, intltool, autoreconfHook, wrapGAppsHook
+, gtk3, hicolor-icon-theme, netpbm }:
+
+stdenv.mkDerivation rec {
+  pname = "yad";
+  version = "13.0";
+
+  src = fetchFromGitHub {
+    owner = "v1cont";
+    repo = "yad";
+    rev = "v${version}";
+    sha256 = "sha256-iYAhiaGfC9/OQ5HrSjX2fhpbwdZun6sxyw8o+8svcvY=";
+  };
+
+  configureFlags = [
+    "--enable-icon-browser"
+    "--with-gtk=gtk3"
+    "--with-rgb=${placeholder "out"}/share/yad/rgb.txt"
+  ];
+
+  buildInputs = [ gtk3 hicolor-icon-theme ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config intltool wrapGAppsHook ];
+
+  postPatch = ''
+    sed -i src/file.c -e '21i#include <glib/gprintf.h>'
+    sed -i src/form.c -e '21i#include <stdlib.h>'
+
+    # there is no point to bring in the whole netpbm package just for this file
+    install -Dm644 ${netpbm.out}/share/netpbm/misc/rgb.txt $out/share/yad/rgb.txt
+  '';
+
+  postAutoreconf = ''
+    intltoolize
+  '';
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/yad-dialog/";
+    description = "GUI dialog tool for shell scripts";
+    longDescription = ''
+      Yad (yet another dialog) is a GUI dialog tool for shell scripts. It is a
+      fork of Zenity with many improvements, such as custom buttons, additional
+      dialogs, pop-up menu in notification icon and more.
+    '';
+
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ smironov ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yafetch/default.nix b/nixpkgs/pkgs/tools/misc/yafetch/default.nix
new file mode 100644
index 000000000000..49611df587af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yafetch/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "yafetch";
+  version = "unstable-2022-04-20";
+
+  src = fetchFromGitHub {
+    owner = "kira64xyz";
+    repo = pname;
+    rev = "a118cfc13f0b475db7c266105c10138d838788b8";
+    sha256 = "bSJlerfbJG6h5dDwWQKHnVLH6DEuvuUyqaRuJ7jvOsA=";
+  };
+
+  # Use the provided NixOS logo automatically
+  prePatch = ''
+    substituteInPlace ./config.h --replace \
+      "#include \"ascii/gnu.h\"" "#include \"ascii/nixos.h\""
+
+    sed '1i#include <array>' -i config.h # gcc12
+  '';
+
+  # Fixes installation path
+  PREFIX = placeholder "out";
+
+  meta = with lib; {
+    homepage = "https://github.com/kira64xyz/yafetch";
+    description = "Yet another fetch clone written in C++";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ivar ashley ];
+    platforms = platforms.linux;
+    mainProgram = "yafetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yai/default.nix b/nixpkgs/pkgs/tools/misc/yai/default.nix
new file mode 100644
index 000000000000..958b88bc2297
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yai/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+buildGoModule rec {
+  pname = "yai";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "ekkinox";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-MoblXLfptlIYJbXQTpbc8GBo2a3Zgxdvwra8IUEGiZs==";
+  };
+
+  vendorHash = "sha256-+NhYK8FXd5B3GsGUPJOMM7Tt3GS1ZJ7LeApz38Xkwx8=";
+
+  ldflags = [
+    "-w -s"
+    "-X main.buildVersion=${version}"
+  ];
+
+  preCheck = ''
+    # analyzer_test.go needs a user
+    export USER=test
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ekkinox/yai";
+    description = "Your AI powered terminal assistant";
+    longDescription = ''
+      Yai (your AI) is an assistant for your terminal, using OpenAI ChatGPT to build and run commands for you.
+      You just need to describe them in your everyday language, it will take care or the rest.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ georgesalkhouri ];
+    mainProgram = "yai";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yajsv/default.nix b/nixpkgs/pkgs/tools/misc/yajsv/default.nix
new file mode 100644
index 000000000000..d6293c74399d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yajsv/default.nix
@@ -0,0 +1,34 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+let
+  version = "1.4.1";
+in
+buildGoModule {
+  pname = "yajsv";
+  version = version;
+
+  src = fetchFromGitHub {
+    owner = "neilpa";
+    repo = "yajsv";
+    rev = "v${version}";
+    hash = "sha256-dp7PBN8yR+gPPUWA+ug11dUN7slU6CJAojuxt5eNTxA=";
+  };
+
+  vendorHash = "sha256-f45climGKl7HxD+1vz2TGqW/d0dqJ0RfvgJoRRM6lUk=";
+
+  ldflags = [ "-s" "-w" ];
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/yajsv -v > /dev/null
+  '';
+
+  meta = {
+    description = "Yet Another JSON Schema Validator";
+    homepage = "https://github.com/neilpa/yajsv";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ rycee ];
+    mainProgram = "yajsv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yank/default.nix b/nixpkgs/pkgs/tools/misc/yank/default.nix
new file mode 100644
index 000000000000..50d883759130
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yank/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, xsel }:
+
+stdenv.mkDerivation rec {
+  pname = "yank";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "mptre";
+    repo = "yank";
+    rev = "v${version}";
+    sha256 = "sha256-sZiZki2Zl0Tfmls5KrLGxT94Bdf9TA9EwoaLoFOX9B4=";
+  };
+
+  installFlags = [ "PREFIX=$(out)" ];
+  makeFlags = [ "YANKCMD=${xsel}/bin/xsel" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mptre/yank";
+    description = "Yank terminal output to clipboard";
+    longDescription = ''
+      Read input from stdin and display a selection interface that allows a
+      field to be selected and copied to the clipboard. Fields are determined
+      by splitting the input on a delimiter sequence, optionally specified
+      using the -d option. New line, carriage return and tab characters are
+      always treated as delimiters.
+    '';
+    downloadPage = "https://github.com/mptre/yank/releases";
+    license = licenses.mit;
+    maintainers = [ maintainers.dochang ];
+    platforms = platforms.unix;
+    mainProgram = "yank";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/yle-dl/default.nix b/nixpkgs/pkgs/tools/misc/yle-dl/default.nix
new file mode 100644
index 000000000000..9a87e000e8e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yle-dl/default.nix
@@ -0,0 +1,38 @@
+{ lib, fetchFromGitHub, rtmpdump, php, wget, python3Packages, ffmpeg
+, testers, yle-dl
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "yle-dl";
+  version = "20240130";
+
+  src = fetchFromGitHub {
+    owner = "aajanki";
+    repo = "yle-dl";
+    rev = version;
+    hash = "sha256-I2DP14PfeU+cDst098SXn6OVx5FKrH/KgKtVfmRPVqE=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    attrs configargparse ffmpeg future lxml requests
+  ];
+  pythonPath = [ rtmpdump php wget ];
+
+  doCheck = false; # tests require network access
+  nativeCheckInputs = with python3Packages; [ pytestCheckHook ];
+
+  passthru.tests.version = testers.testVersion {
+    package = yle-dl;
+    command = "yle-dl -h";
+  };
+
+  meta = with lib; {
+    description = "Downloads videos from Yle (Finnish Broadcasting Company) servers";
+    homepage = "https://aajanki.github.io/yle-dl/";
+    changelog = "https://github.com/aajanki/yle-dl/blob/${version}/ChangeLog";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dezgeg ];
+    platforms = platforms.unix;
+    mainProgram = "yle-dl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/you-get/default.nix b/nixpkgs/pkgs/tools/misc/you-get/default.nix
new file mode 100644
index 000000000000..225c37e4ba46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/you-get/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, python3
+, fetchPypi
+, substituteAll
+, ffmpeg
+, installShellFiles
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "you-get";
+  version = "0.4.1650";
+  format = "setuptools";
+
+  # Tests aren't packaged, but they all hit the real network so
+  # probably aren't suitable for a build environment anyway.
+  doCheck = false;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-s8lEz3pjzEaMzMiBbc5/wAjC5rW6Uq7+XOIIGBijrUc=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./ffmpeg-path.patch;
+      ffmpeg = "${lib.getBin ffmpeg}/bin/ffmpeg";
+      ffprobe = "${lib.getBin ffmpeg}/bin/ffmpeg";
+      version = lib.getVersion ffmpeg;
+    })
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd you-get \
+      --zsh contrib/completion/_you-get \
+      --fish contrib/completion/you-get.fish \
+      --bash contrib/completion/you-get-completion.bash
+  '';
+
+  pythonImportsCheck = [
+    "you_get"
+  ];
+
+  meta = with lib; {
+    description = "A tiny command line utility to download media contents from the web";
+    homepage = "https://you-get.org";
+    changelog = "https://github.com/soimort/you-get/raw/v${version}/CHANGELOG.rst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ryneeverett ];
+    mainProgram = "you-get";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/you-get/ffmpeg-path.patch b/nixpkgs/pkgs/tools/misc/you-get/ffmpeg-path.patch
new file mode 100644
index 000000000000..abbd0be9d3e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/you-get/ffmpeg-path.patch
@@ -0,0 +1,13 @@
+diff --git a/src/you_get/processor/ffmpeg.py b/src/you_get/processor/ffmpeg.py
+index 50e2c9f..46e7f61 100755
+--- a/src/you_get/processor/ffmpeg.py
++++ b/src/you_get/processor/ffmpeg.py
+@@ -31,7 +31,7 @@ def get_usable_ffmpeg(cmd):
+     except:
+         return None
+ 
+-FFMPEG, FFPROBE, FFMPEG_VERSION = get_usable_ffmpeg('ffmpeg') or get_usable_ffmpeg('avconv') or (None, None, None)
++FFMPEG, FFPROBE, FFMPEG_VERSION = ('@ffmpeg@', '@ffprobe@', '@version@')
+ if logging.getLogger().isEnabledFor(logging.DEBUG):
+     LOGLEVEL = ['-loglevel', 'info']
+     STDIN = None
diff --git a/nixpkgs/pkgs/tools/misc/youtube-dl/default.nix b/nixpkgs/pkgs/tools/misc/youtube-dl/default.nix
new file mode 100644
index 000000000000..77a6eceb8a2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/youtube-dl/default.nix
@@ -0,0 +1,96 @@
+{ lib, fetchurl, fetchpatch, buildPythonPackage
+, zip, ffmpeg, rtmpdump, atomicparsley, pycryptodome, pandoc
+# Pandoc is required to build the package's man page. Release tarballs contain a
+# formatted man page already, though, it will still be installed. We keep the
+# manpage argument in place in case someone wants to use this derivation to
+# build a Git version of the tool that doesn't have the formatted man page
+# included.
+, generateManPage ? false
+, ffmpegSupport ? true
+, rtmpSupport ? true
+, hlsEncryptedSupport ? true
+, installShellFiles, makeWrapper }:
+
+buildPythonPackage rec {
+
+  pname = "youtube-dl";
+  # The websites youtube-dl deals with are a very moving target. That means that
+  # downloads break constantly. Because of that, updates should always be backported
+  # to the latest stable release.
+  version = "2021.12.17";
+
+  src = fetchurl {
+    url = "https://yt-dl.org/downloads/${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-nzuZyLd4RVFltFJfIVBehsf/Vl86wxnhlzPYEBlBNd8=";
+  };
+
+  patches = [
+    # Fixes throttling on youtube.com by decoding a "n-parameter". Without the patch
+    # downloads are capped at about 80KiB/s. See, e.g.,
+    #
+    #   https://github.com/ytdl-org/youtube-dl/issues/29326
+    #
+    # The patch comes from PR https://github.com/ytdl-org/youtube-dl/pull/30184#issuecomment-1025261055
+    # plus follow-up (1e677567) from https://github.com/ytdl-org/youtube-dl/pull/30582
+    (fetchpatch {
+      name = "fix-youtube-dl-speed.patch";
+      url = "https://github.com/ytdl-org/youtube-dl/compare/57044eacebc6f2f3cd83c345e1b6e659a22e4773...1e677567cd083d43f55daef0cc74e5fa24575ae3.diff";
+      sha256 = "11s0j3w60r75xx20p0x2j3yc4d3yvz99r0572si8b5qd93lqs4pr";
+    })
+    # The above patch may fail to decode the n-parameter (if, say, YouTube is updated). Failure to decode
+    # it blocks the download instead of falling back to the throttled version. The patch below implements
+    # better fallback behaviour.
+    (fetchpatch {
+      name = "avoid-crashing-if-nsig-decode-fails.patch";
+      url = "https://github.com/ytdl-org/youtube-dl/commit/41f0043983c831b7c0c3614340d2f66ec153087b.diff";
+      sha256 = "sha256-a72gWhBXCLjuBBD36PpZ5F/AHBdiBv4W8Wf9g4P/aBY=";
+    })
+    # YouTube changed the n-parameter format in April 2022, so decoder updates are required.
+    (fetchpatch {
+      name = "fix-n-descrambling.patch";
+      url = "https://github.com/ytdl-org/youtube-dl/commit/a0068bd6bec16008bda7a39caecccbf84881c603.diff";
+      sha256 = "sha256-tSuEns4jputa2nOOo6JsFXpK3hvJ/+z1/ymcLsd3A6w=";
+    })
+  ];
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+  buildInputs = [ zip ] ++ lib.optional generateManPage pandoc;
+  propagatedBuildInputs = lib.optional hlsEncryptedSupport pycryptodome;
+
+  # Ensure these utilities are available in $PATH:
+  # - ffmpeg: post-processing & transcoding support
+  # - rtmpdump: download files over RTMP
+  # - atomicparsley: embedding thumbnails
+  makeWrapperArgs = let
+      packagesToBinPath =
+        [ atomicparsley ]
+        ++ lib.optional ffmpegSupport ffmpeg
+        ++ lib.optional rtmpSupport rtmpdump;
+    in [ ''--prefix PATH : "${lib.makeBinPath packagesToBinPath}"'' ];
+
+  setupPyBuildFlags = [
+    "build_lazy_extractors"
+  ];
+
+  postInstall = ''
+    installShellCompletion youtube-dl.zsh
+  '';
+
+  # Requires network
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://ytdl-org.github.io/youtube-dl/";
+    description = "Command-line tool to download videos from YouTube.com and other sites";
+    longDescription = ''
+      youtube-dl is a small, Python-based command-line program to download
+      videos from YouTube.com and a few more sites.  youtube-dl is released to
+      the public domain, which means you can modify it, redistribute it or use
+      it however you like.
+    '';
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ bluescreen303 fpletz ];
+    platforms = with platforms; linux ++ darwin;
+    mainProgram = "youtube-dl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yt-dlp/default.nix b/nixpkgs/pkgs/tools/misc/yt-dlp/default.nix
new file mode 100644
index 000000000000..eeb05dd4012e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yt-dlp/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, brotli
+, certifi
+, ffmpeg
+, rtmpdump
+, atomicparsley
+, pycryptodomex
+, websockets
+, mutagen
+, secretstorage
+, atomicparsleySupport ? true
+, ffmpegSupport ? true
+, rtmpSupport ? true
+, withAlias ? false # Provides bin/youtube-dl for backcompat
+, update-python-libraries
+}:
+
+buildPythonPackage rec {
+  pname = "yt-dlp";
+  # The websites yt-dlp deals with are a very moving target. That means that
+  # downloads break constantly. Because of that, updates should always be backported
+  # to the latest stable release.
+  version = "2023.12.30";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-oRhi5XchsKDwiD3+taTXm6ITotTEXhiA6f1w+OZXDDg=";
+  };
+
+  propagatedBuildInputs = [
+    brotli
+    certifi
+    mutagen
+    pycryptodomex
+    secretstorage  # "optional", as in not in requirements.txt, needed for `--cookies-from-browser`
+    websockets
+  ];
+
+  # Ensure these utilities are available in $PATH:
+  # - ffmpeg: post-processing & transcoding support
+  # - rtmpdump: download files over RTMP
+  # - atomicparsley: embedding thumbnails
+  makeWrapperArgs =
+    let
+      packagesToBinPath = []
+        ++ lib.optional atomicparsleySupport atomicparsley
+        ++ lib.optional ffmpegSupport ffmpeg
+        ++ lib.optional rtmpSupport rtmpdump;
+    in lib.optionalString (packagesToBinPath != [])
+    [ ''--prefix PATH : "${lib.makeBinPath packagesToBinPath}"'' ];
+
+  setupPyBuildFlags = [
+    "build_lazy_extractors"
+  ];
+
+  # Requires network
+  doCheck = false;
+
+  postInstall = lib.optionalString withAlias ''
+    ln -s "$out/bin/yt-dlp" "$out/bin/youtube-dl"
+  '';
+
+  passthru.updateScript = [ update-python-libraries (toString ./.) ];
+
+  meta = with lib; {
+    homepage = "https://github.com/yt-dlp/yt-dlp/";
+    description = "Command-line tool to download videos from YouTube.com and other sites (youtube-dl fork)";
+    longDescription = ''
+      yt-dlp is a youtube-dl fork based on the now inactive youtube-dlc.
+
+      youtube-dl is a small, Python-based command-line program
+      to download videos from YouTube.com and a few more sites.
+      youtube-dl is released to the public domain, which means
+      you can modify it, redistribute it or use it however you like.
+    '';
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ mkg20001 SuperSandro2000 marsam ];
+    mainProgram = "yt-dlp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ytarchive/default.nix b/nixpkgs/pkgs/tools/misc/ytarchive/default.nix
new file mode 100644
index 000000000000..d2c836402e50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ytarchive/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub, makeBinaryWrapper, ffmpeg-headless }:
+
+buildGoModule rec {
+  pname = "ytarchive";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "Kethsar";
+    repo = "ytarchive";
+    rev = "v${version}";
+    hash = "sha256-mQgpwuTIEHeDv/PzBHpK1sraxFj8Ef3y8vN5bLw5E94=";
+  };
+
+  vendorHash = "sha256-sjwQ/zEYJRkeWUDB7TzV8z+kET8lVRnQkXYbZbcUeHY=";
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  ldflags = [ "-s" "-w" "-X main.Commit=-${src.rev}" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/ytarchive --prefix PATH : ${lib.makeBinPath [ ffmpeg-headless ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Kethsar/ytarchive";
+    description = "Garbage Youtube livestream downloader";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "ytarchive";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ytcast/default.nix b/nixpkgs/pkgs/tools/misc/ytcast/default.nix
new file mode 100644
index 000000000000..798508f2451e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ytcast/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub, }:
+
+buildGoModule rec {
+  pname = "ytcast";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "MarcoLucidi01";
+    repo = "ytcast";
+    rev = "v${version}";
+    sha256 = "sha256-iy9+MgXwP4ALz4NHJyn2ghC5boR53H3ioB2+7tcJunE=";
+  };
+
+  vendorHash = null;
+  ldflags = [ "-X main.progVersion=${version}" ];
+
+  meta = with lib; {
+    description = "A tool to cast YouTube videos from the command-line";
+    homepage = "https://github.com/MarcoLucidi01/ytcast";
+    license = licenses.mit;
+    maintainers = with maintainers; [ waelwindows ];
+    mainProgram = "ytcast";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ytfzf/default.nix b/nixpkgs/pkgs/tools/misc/ytfzf/default.nix
new file mode 100644
index 000000000000..905c7776f1c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ytfzf/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, curl
+, dmenu
+, fzf
+, gnused
+, jq
+, mpv
+, ueberzugpp
+, yt-dlp
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ytfzf";
+  version = "2.6.1";
+
+  src = fetchFromGitHub {
+    owner = "pystardust";
+    repo = "ytfzf";
+    rev = "v${version}";
+    hash = "sha256-wd7IgJRSh8UJ28slItIz1OhAg7cgVSDUldCyaObn6Ak=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installFlags = [
+    "PREFIX="
+    "DESTDIR=${placeholder "out"}"
+    "doc"
+    "addons"
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/ytfzf" \
+      --prefix PATH : ${lib.makeBinPath [
+        coreutils curl dmenu fzf gnused jq mpv ueberzugpp yt-dlp
+      ]} \
+      --set YTFZF_SYSTEM_ADDON_DIR "$out/share/ytfzf/addons"
+  '';
+
+  meta = with lib; {
+    description = "A posix script to find and watch youtube videos from the terminal";
+    homepage = "https://github.com/pystardust/ytfzf";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dotlambda ];
+    mainProgram = "ytfzf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ytmdl/default.nix b/nixpkgs/pkgs/tools/misc/ytmdl/default.nix
new file mode 100644
index 000000000000..9baf2888d78b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ytmdl/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, python3Packages
+, fetchPypi
+, yt-dlp
+, ffmpeg
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ytmdl";
+  version = "2023.11.26";
+
+  src = fetchPypi {
+    inherit pname;
+    version = builtins.replaceStrings [ ".0" ] [ "." ] version;
+    sha256 = "sha256-Im3rQAs/TYookv6FeGpU6tJxUGBMb6/UW1ZMDg9FW4s=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "bs4" "beautifulsoup4" \
+      --replace "/etc/bash_completion.d" "share/bash-completion/completions" \
+      --replace "/usr/share/zsh/functions/Completion/Unix" "share/zsh/site-functions"
+    sed -i '/python_requires=/d' setup.py
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    ffmpeg-python
+    musicbrainzngs
+    rich
+    simber
+    pydes
+    youtube-search-python
+    unidecode
+    pyxdg
+    downloader-cli
+    beautifulsoup4
+    itunespy
+    mutagen
+    pysocks
+    yt-dlp
+    ytmusicapi
+    spotipy
+  ];
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ ffmpeg ])
+  ];
+
+  # This application has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/deepjyoti30/ytmdl";
+    description = "YouTube Music Downloader";
+    license = licenses.mit;
+    maintainers = with maintainers; [ j0hax ];
+    mainProgram = "ytmdl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix b/nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix
new file mode 100644
index 000000000000..2b8e50a7222e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, openssl
+, check
+, pcsclite
+, PCSC
+, gengetopt
+, help2man
+, cmake
+, zlib
+, withApplePCSC ? stdenv.isDarwin
+, nix-update-script
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "yubico-piv-tool";
+  version = "2.5.1";
+
+  outputs = [ "out" "dev" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "Yubico";
+    repo = "yubico-piv-tool";
+    rev = "refs/tags/yubico-piv-tool-${finalAttrs.version}";
+    hash = "sha256-8W5c5JwEAhBAgoRC/pmQs3U3RekQMmkHAXVW36Y+J+U=";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt --replace "-Werror" ""
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    gengetopt
+    help2man
+  ];
+
+  buildInputs = [
+    openssl
+    check
+    zlib.dev
+  ]
+  ++ (if withApplePCSC then [ PCSC ] else [ pcsclite ]);
+
+  cmakeFlags = [
+    "-DGENERATE_MAN_PAGES=ON"
+    "-DCMAKE_INSTALL_BINDIR=bin"
+    "-DCMAKE_INSTALL_INCLUDEDIR=include"
+    "-DCMAKE_INSTALL_MANDIR=share/man"
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+  ];
+
+  configureFlags = [ "--with-backend=${if withApplePCSC then "macscard" else "pcsc"}" ];
+
+  passthru = {
+    updateScript = nix-update-script {
+      extraArgs = [ "--version-regex" "yubico-piv-tool-([0-9.]+)$" ];
+    };
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = "yubico-piv-tool --version";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://developers.yubico.com/yubico-piv-tool/";
+    changelog = "https://developers.yubico.com/yubico-piv-tool/Release_Notes.html";
+    description = ''
+      Used for interacting with the Privilege and Identification Card (PIV)
+      application on a YubiKey
+    '';
+    longDescription = ''
+      The Yubico PIV tool is used for interacting with the Privilege and
+      Identification Card (PIV) application on a YubiKey.
+      With it you may generate keys on the device, importing keys and
+      certificates, and create certificate requests, and other operations.
+      A shared library and a command-line tool is included.
+    '';
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ viraptor anthonyroussel ];
+    mainProgram = "yubico-piv-tool";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix
new file mode 100644
index 000000000000..ce0d06bb089a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, mkDerivation
+, fetchurl
+, imagemagick
+, pcsclite
+, pyotherside
+, python3
+, qmake
+, qtbase
+, qtgraphicaleffects
+, qtquickcontrols2
+, yubikey-manager
+, yubikey-personalization
+}:
+
+mkDerivation rec {
+  pname = "yubikey-manager-qt";
+  version = "1.2.5";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubikey-manager-qt/Releases/yubikey-manager-qt-${version}.tar.gz";
+    hash = "sha256-6bKeR3UX2DhXGcKJ1bxvT1aLTgCfc+aNo6ckE89NV+I=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.wrapPython
+    qmake
+    imagemagick
+  ];
+
+  postPatch = ''
+    substituteInPlace ykman-gui/deployment.pri --replace '/usr/bin' "$out/bin"
+  '';
+
+  buildInputs = [
+    pyotherside
+    python3
+    qtbase
+    qtgraphicaleffects
+    qtquickcontrols2
+  ];
+
+  pythonPath = [
+    (yubikey-manager.override { python3Packages = python3.pkgs; })
+  ];
+
+  postInstall = ''
+    # Desktop files
+    install -D -m0644 resources/ykman-gui.desktop "$out/share/applications/ykman-gui.desktop"
+    substituteInPlace "$out/share/applications/ykman-gui.desktop" \
+      --replace Exec=ykman-gui "Exec=$out/bin/ykman-gui"
+
+    # Icons
+    install -Dt $out/share/ykman-gui/icons resources/icons/*.{icns,ico}
+    install -D -m0644 resources/icons/ykman.png "$out/share/icons/hicolor/128x128/apps/ykman.png"
+    ln -s -- "$out/share/icons/hicolor/128x128/apps/ykman.png" "$out/share/icons/hicolor/128x128/apps/ykman-gui.png"
+    for SIZE in 16 24 32 48 64 96; do
+      # set modify/create for reproducible builds
+      convert -scale ''${SIZE} +set date:create +set date:modify \
+        resources/icons/ykman.png ykman.png
+
+      imageFolder="$out/share/icons/hicolor/''${SIZE}x''${SIZE}/apps"
+      install -D -m0644 ykman.png "$imageFolder/ykman.png"
+      ln -s -- "$imageFolder/ykman.png" "$imageFolder/ykman-gui.png"
+    done
+    unset SIZE imageFolder
+  '';
+
+  qtWrapperArgs = [
+    "--prefix" "LD_LIBRARY_PATH" ":" (lib.makeLibraryPath [ pcsclite yubikey-personalization ])
+  ];
+
+  preFixup = ''
+    buildPythonPath "$pythonPath"
+    qtWrapperArgs+=(--prefix PYTHONPATH : "$program_PYTHONPATH")
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform application for configuring any YubiKey over all USB interfaces";
+    homepage = "https://developers.yubico.com/yubikey-manager-qt/";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.cbley ];
+    mainProgram = "ykman-gui";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix
new file mode 100644
index 000000000000..eb25d052e908
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3Packages
+, installShellFiles
+, procps
+}:
+
+python3Packages.buildPythonPackage rec {
+  pname = "yubikey-manager";
+  version = "5.3.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "Yubico";
+    repo = "yubikey-manager";
+    rev = version;
+    hash = "sha256-c5edonnvvGIZ6SJ6+gd2xcAy0/HiAEUEPMGQzOKK2Sw=";
+  };
+
+  postPatch = ''
+    substituteInPlace "ykman/pcsc/__init__.py" \
+      --replace 'pkill' '${if stdenv.isLinux then procps else "/usr"}/bin/pkill'
+  '';
+
+  nativeBuildInputs = with python3Packages; [
+    poetry-core
+    pythonRelaxDepsHook
+    installShellFiles
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    cryptography
+    pyscard
+    fido2
+    click
+    keyring
+  ];
+
+  pythonRelaxDeps = [
+    "keyring"
+  ];
+
+  postInstall = ''
+    installManPage man/ykman.1
+
+    installShellCompletion --cmd ykman \
+      --bash <(_YKMAN_COMPLETE=bash_source "$out/bin/ykman") \
+      --zsh  <(_YKMAN_COMPLETE=zsh_source  "$out/bin/ykman") \
+      --fish <(_YKMAN_COMPLETE=fish_source "$out/bin/ykman") \
+  '';
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+    makefun
+  ];
+
+  meta = with lib; {
+    homepage = "https://developers.yubico.com/yubikey-manager";
+    changelog = "https://github.com/Yubico/yubikey-manager/releases/tag/${version}";
+    description = "Command line tool for configuring any YubiKey over all USB transports";
+
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ benley lassulus pinpox nickcao ];
+    mainProgram = "ykman";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix
new file mode 100644
index 000000000000..a63ab7a7ce19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, lib, fetchurl, mkDerivation, pkg-config, qtbase, qmake, imagemagick
+, libyubikey, yubikey-personalization }:
+
+mkDerivation rec {
+  pname = "yubikey-personalization-gui";
+  version = "3.1.25";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubikey-personalization-gui/Releases/yubikey-personalization-gui-${version}.tar.gz";
+    sha256 = "1knyv5yss8lhzaff6jpfqv12fjf1b8b21mfxzx3qi0hw4nl8n2v8";
+  };
+
+  nativeBuildInputs = [ pkg-config qmake imagemagick ];
+  buildInputs = [ yubikey-personalization qtbase libyubikey ];
+
+  installPhase = ''
+    install -D -m0755 build/release/yubikey-personalization-gui "$out/bin/yubikey-personalization-gui"
+    install -D -m0644 resources/lin/yubikey-personalization-gui.1 "$out/share/man/man1/yubikey-personalization-gui.1"
+
+    # Desktop files
+    install -D -m0644 resources/lin/yubikey-personalization-gui.desktop "$out/share/applications/yubikey-personalization-gui.desktop"
+
+    # Icons
+    install -D -m0644 resources/lin/yubikey-personalization-gui.xpm "$out/share/pixmaps/yubikey-personalization-gui.xpm"
+    install -D -m0644 resources/lin/yubikey-personalization-gui.png "$out/share/icons/hicolor/128x128/apps/yubikey-personalization-gui.png"
+    for SIZE in 16 24 32 48 64 96; do
+      # set modify/create for reproducible builds
+      convert -scale ''${SIZE} +set date:create +set date:modify \
+        resources/lin/yubikey-personalization-gui.png \
+        yubikey-personalization-gui.png
+
+      install -D -m0644 yubikey-personalization-gui.png "$out/share/icons/hicolor/''${SIZE}x''${SIZE}/apps/yubikey-personalization-gui.png"
+    done
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://developers.yubico.com/yubikey-personalization-gui";
+    description = "A QT based cross-platform utility designed to facilitate reconfiguration of the Yubikey";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    mainProgram = "yubikey-personalization-gui";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix
new file mode 100644
index 000000000000..f8583f361402
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, libusb1, libyubikey, json_c }:
+
+stdenv.mkDerivation rec {
+  pname = "yubikey-personalization";
+  version = "1.20.0";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubikey-personalization/Releases/ykpers-${version}.tar.gz";
+    sha256 = "14wvlwqnwj0gllkpvfqiy8ns938bwvjsz8x1hmymmx32m074vj0f";
+  };
+
+  patches = [
+    # remove after updating to next release
+    (fetchpatch {
+      name = "json-c-0.14-support.patch";
+      url = "https://github.com/Yubico/yubikey-personalization/commit/0aa2e2cae2e1777863993a10c809bb50f4cde7f8.patch";
+      sha256 = "1wnigf3hbq59i15kgxpq3pwrl1drpbj134x81mmv9xm1r44cjva8";
+    })
+
+    # Pull upstream fix for -fno-common toolchain support:
+    #  https://github.com/Yubico/yubikey-personalization/issues/155
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/Yubico/yubikey-personalization/commit/09ea16d9e2030e4da6ad00c1e5147e962aa7ff84.patch";
+      sha256 = "0n3ka8n7f3ndbxv3k0bi77d850kr2ypglkw81gqycpqyaciidqwa";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 libyubikey json_c ];
+
+  configureFlags = [
+    "--with-backend=libusb-1.0"
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    # Don't use 70-yubikey.rules because it depends on ConsoleKit
+    install -D -t $out/lib/udev/rules.d 69-yubikey.rules
+  '';
+
+  meta = with lib; {
+    homepage = "https://developers.yubico.com/yubikey-personalization";
+    description = "A library and command line tool to personalize YubiKeys";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yutto/default.nix b/nixpkgs/pkgs/tools/misc/yutto/default.nix
new file mode 100644
index 000000000000..5af50d54ad6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yutto/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, python3
+, fetchPypi
+, ffmpeg
+, nix-update-script
+}:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "yutto";
+  version = "2.0.0b33";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-TUyjppAHmWCZxifeQeOpFMPBksqLRSYdqgG7NEMVILY=";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    aiohttp
+    aiofiles
+    biliass
+    dict2xml
+    colorama
+  ];
+
+  preFixup = ''
+    makeWrapperArgs+=(--prefix PATH : ${lib.makeBinPath [ ffmpeg ]})
+  '';
+
+  pythonImportsCheck = [ "yutto" ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A Bilibili downloader";
+    homepage = "https://github.com/yutto-dev/yutto";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ linsui ];
+    mainProgram = "yutto";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/z-lua/default.nix b/nixpkgs/pkgs/tools/misc/z-lua/default.nix
new file mode 100644
index 000000000000..5210c6b2a4b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/z-lua/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, lua52Packages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "z-lua";
+  version = "1.8.16";
+
+  src = fetchFromGitHub {
+    owner = "skywind3000";
+    repo = "z.lua";
+    rev = version;
+    sha256 = "sha256-VVJXBVENXlJXVj831Hx4sa7AzGHXpsui6tga9uA6ZnE=";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ lua52Packages.lua ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 z.lua $out/bin/z.lua
+    wrapProgram $out/bin/z.lua --set LUA_CPATH "${lua52Packages.luafilesystem}/lib/lua/5.2/lfs.so" --set _ZL_USE_LFS 1;
+    # Create symlink for backwards compatibility. See: https://github.com/NixOS/nixpkgs/pull/96081
+    ln -s $out/bin/z.lua $out/bin/z
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/skywind3000/z.lua";
+    description = "A new cd command that helps you navigate faster by learning your habits";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam ];
+    mainProgram = "z.lua";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix b/nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix
new file mode 100644
index 000000000000..49f8d504d701
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "zabbix-cli";
+  version = "2.3.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "usit-gd";
+    repo = "zabbix-cli";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-B5t/vxCmPdRR9YKOc2htI57Kmk1ZrpwPUln4JoUrK6g=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    packaging
+    requests
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # TypeError: option values must be strings
+    "test_descriptor_del"
+    "test_initialize"
+  ];
+
+  meta = with lib; {
+    description = "Command-line interface for Zabbix";
+    homepage = "https://github.com/unioslo/zabbix-cli";
+    license = licenses.gpl3Plus;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zabbixctl/default.nix b/nixpkgs/pkgs/tools/misc/zabbixctl/default.nix
new file mode 100644
index 000000000000..ce45196fdba7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zabbixctl/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "zabbixctl";
+  version = "unstable-2021-05-25";
+
+  src = fetchFromGitHub {
+    owner = "kovetskiy";
+    repo = pname;
+    rev = "872d73b12901b143898bffe3711b93a34ca75abe";
+    sha256 = "sha256-fWT3cgIHjHcKwFDjWIf3BUUUaVZ7hyc2ibkpU+AsW0I=";
+  };
+
+  vendorHash = "sha256-BphQcPPmeNU7RDtaHJQxIoW8xxD86xWgqLBsLR08Tag=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Most effective way for operating in Zabbix Server";
+    homepage = "https://github.com/kovetskiy/zabbixctl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mmahut ];
+    mainProgram = "zabbixctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zalgo/default.nix b/nixpkgs/pkgs/tools/misc/zalgo/default.nix
new file mode 100644
index 000000000000..0ca9f3366ce4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zalgo/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "zalgo";
+  version = "unstable-2020-08-26";
+
+  src = fetchFromGitHub {
+    owner = "lunasorcery";
+    repo = "zalgo";
+    rev = "6aa1f66cfe183f8164a666730dfeaf39133cf01a";
+    sha256 = "00q56yvfcj2f89wllrckvizihivqmd6l77nihb52ffqd99rdd24w";
+  };
+
+  installPhase = ''
+    install -Dm755 zalgo -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Read stdin and corrupt it with combining diacritics";
+    homepage = "https://github.com/lunasorcery/zalgo";
+    license = licenses.unfree;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ djanatyn ];
+    mainProgram = "zalgo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zellij/default.nix b/nixpkgs/pkgs/tools/misc/zellij/default.nix
new file mode 100644
index 000000000000..160bb2bab62d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zellij/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+, installShellFiles
+, perl
+, pkg-config
+, libiconv
+, openssl
+, DiskArbitration
+, Foundation
+, mandown
+, zellij
+, testers
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zellij";
+  version = "0.39.2";
+
+  src = fetchFromGitHub {
+    owner = "zellij-org";
+    repo = "zellij";
+    rev = "v${version}";
+    hash = "sha256-FSLbRfxSWY0a9H9iHT3oQ2SXwB70AwyH0Cm8sDZGaUk=";
+  };
+
+  cargoHash = "sha256-a5dFtK5czOGqE6mKeeI0kkY2da1kS3IRZ1NTluZ9Syc=";
+
+  nativeBuildInputs = [
+    mandown
+    installShellFiles
+    perl
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+    DiskArbitration
+    Foundation
+  ];
+
+  preCheck = ''
+    HOME=$TMPDIR
+  '';
+
+  postInstall = ''
+    mandown docs/MANPAGE.md > zellij.1
+    installManPage zellij.1
+
+    installShellCompletion --cmd $pname \
+      --bash <($out/bin/zellij setup --generate-completion bash) \
+      --fish <($out/bin/zellij setup --generate-completion fish) \
+      --zsh <($out/bin/zellij setup --generate-completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion { package = zellij; };
+
+  meta = with lib; {
+    description = "A terminal workspace with batteries included";
+    homepage = "https://zellij.dev/";
+    changelog = "https://github.com/zellij-org/zellij/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ therealansh _0x4A6F abbe thehedgeh0g ];
+    mainProgram = "zellij";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zf/default.nix b/nixpkgs/pkgs/tools/misc/zf/default.nix
new file mode 100644
index 000000000000..402fbbb5f697
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zf/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, testers
+, zig_0_11
+, callPackage
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "zf";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "natecraddock";
+    repo = "zf";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-JPv/59ELh+CS1/akuLNy0qSimMEJsypPO8hiHFAOirI=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    zig_0_11.hook
+  ];
+
+  postPatch = ''
+    ln -s ${callPackage ./deps.nix { }} $ZIG_GLOBAL_CACHE_DIR/p
+  '';
+
+  postInstall = ''
+    installManPage doc/zf.1
+    installShellCompletion \
+      --bash complete/zf \
+      --fish complete/zf.fish \
+      --zsh complete/_zf
+  '';
+
+  passthru.tests.version = testers.testVersion { package = finalAttrs.finalPackage; };
+
+  meta = {
+    homepage = "https://github.com/natecraddock/zf";
+    description = "A commandline fuzzy finder that prioritizes matches on filenames";
+    changelog = "https://github.com/natecraddock/zf/releases/tag/${finalAttrs.version}";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ dit7ya figsoda mmlb ];
+    mainProgram = "zf";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/zf/deps.nix b/nixpkgs/pkgs/tools/misc/zf/deps.nix
new file mode 100644
index 000000000000..226dd9eaeb6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zf/deps.nix
@@ -0,0 +1,13 @@
+# generated by zon2nix (https://github.com/nix-community/zon2nix)
+
+{ linkFarm, fetchzip }:
+
+linkFarm "zig-packages" [
+  {
+    name = "1220dee955839b7f267c1bb21e0ee60888c08f408c30f0722b243cabcc8cce8b7508";
+    path = fetchzip {
+      url = "https://codeberg.org/dude_the_builder/ziglyph/archive/v0.11.1.tar.gz";
+      hash = "sha256-tpl4RyCcukKWZehlZf6t2n41gYFDyL27t7+bzcxHP7g=";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/zitadel-tools/default.nix b/nixpkgs/pkgs/tools/misc/zitadel-tools/default.nix
new file mode 100644
index 000000000000..cd5ae370805b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zitadel-tools/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "zitadel-tools";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "zitadel";
+    repo = "zitadel-tools";
+    rev = "v${version}";
+    hash = "sha256-r9GEHpfDlpK98/dnsxjhUgWKn6vHQla8Z+jQUVrHGyo=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  vendorHash = "sha256-y2PYj0XRSgfiaYpeqAh4VR/+NKUPKd1c0w9pPCWsUrY=";
+
+  ldflags = [
+    "-s" "-w"
+    "-X main.version=${version}"
+  ];
+
+  postInstall = ''
+    local INSTALL="$out/bin/zitadel-tools"
+    installShellCompletion --cmd zitadel-tools \
+      --bash <($out/bin/zitadel-tools completion bash) \
+      --fish <($out/bin/zitadel-tools completion fish) \
+      --zsh <($out/bin/zitadel-tools completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Helper tools for zitadel";
+    homepage = "https://github.com/zitadel/zitadel-tools";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ janik ];
+    mainProgram = "zitadel-tools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zotero-translation-server/default.nix b/nixpkgs/pkgs/tools/misc/zotero-translation-server/default.nix
new file mode 100644
index 000000000000..d44ec426fee5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zotero-translation-server/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildNpmPackage, fetchFromGitHub, nodejs }:
+
+buildNpmPackage rec {
+  pname = "zotero-translation-server";
+  version = "unstable-2023-07-13";
+
+  src = fetchFromGitHub {
+    owner = "zotero";
+    repo = "translation-server";
+    rev = "cf96d57f4e2af66fee7df9bad00681b3f4ac7d77";
+    hash = "sha256-GJn7UAl0raVGzplvFzo4A0RUjNbyGt/YI2mt1UZIJv0=";
+    fetchSubmodules = true;
+  };
+
+  npmDepsHash = "sha256-JHoBxUybs1GGRxEVG5GgX2mOCplTgR5dcPjnR42SEbY=";
+
+  makeCacheWritable = true;
+
+  dontNpmBuild = true;
+
+  postInstall = ''
+    mkdir -p $out/bin/ $out/share/zotero-translation-server/
+    makeWrapper ${nodejs}/bin/node $out/bin/translation-server \
+      --add-flags "$out/lib/node_modules/translation-server/src/server.js"
+    ln -s $out/lib/node_modules/translation-server/config $out/share/zotero-translation-server/config
+    ln -s $out/lib/node_modules/translation-server/modules $out/share/zotero-translation-server/modules
+  '';
+
+  meta = with lib; {
+    description = "A Node.js-based server to run Zotero translators";
+    homepage = "https://github.com/zotero/translation-server";
+    license = licenses.agpl3Only;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "translation-server";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zoxide/default.nix b/nixpkgs/pkgs/tools/misc/zoxide/default.nix
new file mode 100644
index 000000000000..36b677aa20ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zoxide/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, withFzf ? true
+, fzf
+, installShellFiles
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zoxide";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "ajeetdsouza";
+    repo = "zoxide";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-dxdBXoV9X2oA5ig6PK/GuNLRRzO1E0zHJwVFQp7GY2g=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  postPatch = lib.optionalString withFzf ''
+    substituteInPlace src/util.rs \
+      --replace '"fzf"' '"${fzf}/bin/fzf"'
+  '';
+
+  cargoHash = "sha256-fNAS2pCt3Oxz8qyn6GnJpx3Tq/EyPzbwns28tKeMqf0=";
+
+  postInstall = ''
+    installManPage man/man*/*
+    installShellCompletion --cmd zoxide \
+      --bash contrib/completions/zoxide.bash \
+      --fish contrib/completions/zoxide.fish \
+      --zsh contrib/completions/_zoxide
+  '';
+
+  meta = with lib; {
+    description = "A fast cd command that learns your habits";
+    homepage = "https://github.com/ajeetdsouza/zoxide";
+    changelog = "https://github.com/ajeetdsouza/zoxide/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ ysndr cole-h SuperSandro2000 ];
+    mainProgram = "zoxide";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix b/nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix
new file mode 100644
index 000000000000..d16410c31538
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "zsh-autoenv";
+  version = "unstable-2017-12-16";
+
+  src = fetchFromGitHub {
+    owner = "Tarrasch";
+    repo = "zsh-autoenv";
+    rev = "2c8cfbcea8e7286649840d7ec98d7e9d5e1d45a0";
+    sha256 = "004svkfzhc3ab6q2qvwzgj36wvicg5bs8d2gcibx6adq042di7zj";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/{bin,share}
+    cp -R $src $out/share/zsh-autoenv
+
+    cat <<SCRIPT > $out/bin/zsh-autoenv-share
+    #!${runtimeShell}
+    # Run this script to find the zsh-autoenv shared folder where all the shell
+    # integration scripts are living.
+    echo $out/share/zsh-autoenv
+    SCRIPT
+    chmod +x $out/bin/zsh-autoenv-share
+  '';
+
+  meta = with lib; {
+    description = "Automatically sources whitelisted .autoenv.zsh files";
+    longDescription = ''
+      zsh-autoenv automatically sources (known/whitelisted)
+      .autoenv.zsh files, typically used in project root directories.
+      It handles "enter" and "leave" events, nesting, and stashing of
+      variables (overwriting and restoring).
+    '';
+    homepage = "https://github.com/Tarrasch/zsh-autoenv";
+    mainProgram = "zsh-autoenv-share";
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zsh-history-to-fish/default.nix b/nixpkgs/pkgs/tools/misc/zsh-history-to-fish/default.nix
new file mode 100644
index 000000000000..4e8da001f835
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zsh-history-to-fish/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchPypi
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "zsh-history-to-fish";
+  version = "0.3.0";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-expPuffZttyXNRreplPC5Ee/jfWAyOnmjTIMXONtrnw=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+  ];
+
+  # upstream has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "zsh_history_to_fish"
+  ];
+
+  meta = with lib; {
+    description = "Bring your ZSH history to Fish shell";
+    homepage = "https://github.com/rsalmei/zsh-history-to-fish";
+    license = licenses.mit;
+    maintainers = with maintainers; [ alanpearce ];
+    mainProgram = "zsh-history-to-fish";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix b/nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix
new file mode 100644
index 000000000000..f719fe3b6922
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "zsh-navigation-tools";
+  version = "2.2.7";
+
+  src = fetchFromGitHub {
+    owner = "psprint";
+    repo = "zsh-navigation-tools";
+    rev = "v${version}";
+    sha256 = "0c4kb19aprb868xnlyq8h1nd2d32r0zkrqblsrzvg7m9gx8vqps8";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/zsh/site-functions/
+    cp zsh-navigation-tools.plugin.zsh $out/share/zsh/site-functions/
+    cp n-* $out/share/zsh/site-functions/
+    cp znt-* $out/share/zsh/site-functions/
+    mkdir -p $out/share/zsh/site-functions/.config/znt
+    cp .config/znt/n-* $out/share/zsh/site-functions/.config/znt
+  '';
+
+  meta = with lib; {
+    description = "Curses-based tools for ZSH";
+    homepage = "https://github.com/psprint/zsh-navigation-tools";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zthrottle/default.nix b/nixpkgs/pkgs/tools/misc/zthrottle/default.nix
new file mode 100644
index 000000000000..1598215e0eb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zthrottle/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, zsh }:
+
+stdenv.mkDerivation rec {
+  pname = "zthrottle";
+  version = "unstable-2017-7-24";
+
+  src = fetchFromGitHub {
+    owner = "anko";
+    repo = pname;
+    rev = "f62066661e49375baeb891fa8e43ad4527cbd0a0";
+    sha256 = "1ipvwmcsigzmxlg7j22cxpvdcgqckkmfpsnvzy18nbybd5ars9l5";
+  };
+
+  buildInputs = [ zsh ];
+
+  installPhase = ''
+    install -D zthrottle $out/bin/zthrottle
+  '';
+
+  meta = with lib; {
+    description = "A program that throttles a pipeline, only letting a line through at most every $1 seconds";
+    homepage = "https://github.com/anko/zthrottle";
+    license = licenses.unlicense;
+    maintainers = [ maintainers.ckie ];
+    platforms = platforms.unix;
+    mainProgram = "zthrottle";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/6tunnel/default.nix b/nixpkgs/pkgs/tools/networking/6tunnel/default.nix
new file mode 100644
index 000000000000..fbdd23f754ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/6tunnel/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "6tunnel";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner = "wojtekka";
+    repo = pname;
+    rev = version;
+    sha256 = "0zsx9d6xz5w8zvrqsm8r625gpbqqhjzvjdzc3z8yix668yg8ff8h";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Tunnelling for application that don't speak IPv6";
+    homepage = "https://github.com/wojtekka/6tunnel";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/aardvark-dns/default.nix b/nixpkgs/pkgs/tools/networking/aardvark-dns/default.nix
new file mode 100644
index 000000000000..f8770612b253
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/aardvark-dns/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nixosTests
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "aardvark-dns";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "containers";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-BZJn0XrqDttNlKNpLy2iZzt8xcpxCoBrWV+L8MstMnM=";
+  };
+
+  cargoHash = "sha256-hDskOYyOo18EWsYTIf1trZxhRQK0Jf+T4bXb1JJKjEo=";
+
+  passthru.tests = { inherit (nixosTests) podman; };
+
+  meta = with lib; {
+    changelog = "https://github.com/containers/aardvark-dns/releases/tag/${src.rev}";
+    description = "Authoritative dns server for A/AAAA container records";
+    homepage = "https://github.com/containers/aardvark-dns";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ] ++ teams.podman.members;
+    platforms = platforms.linux;
+    mainProgram = "aardvark-dns";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/acme-client/default.nix b/nixpkgs/pkgs/tools/networking/acme-client/default.nix
new file mode 100644
index 000000000000..2a0baedde7ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/acme-client/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchurl
+, libbsd
+, libressl
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "acme-client";
+  version = "1.3.2";
+
+  src = fetchurl {
+    url = "https://data.wolfsden.cz/sources/acme-client-${version}.tar.gz";
+    hash = "sha256-nVB0VIT6mwKwSTY+wDcuxMtpEjtZ9Z0ke0lJ7SzdsJ0=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libbsd
+    libressl
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "Secure ACME/Let's Encrypt client";
+    homepage = "https://sr.ht/~graywolf/acme-client-portable/";
+    platforms = platforms.unix;
+    license = licenses.isc;
+    maintainers = with maintainers; [ pmahoney ];
+    mainProgram = "acme-client";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/ahcpd/default.nix b/nixpkgs/pkgs/tools/networking/ahcpd/default.nix
new file mode 100644
index 000000000000..f6f483602c1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ahcpd/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ahcpd";
+  version = "0.53";
+
+  src = fetchurl {
+    url = "http://www.pps.univ-paris-diderot.fr/~jch/software/files/ahcpd-${version}.tar.gz";
+    sha256 = "0lhdmky3zdyk51hclv2lrhw3hzymbdc8bw2khs3rnaibgn0jwqm4";
+  };
+
+  preBuild = ''
+    makeFlags="PREFIX=$out ETCDIR=$out/etc"
+    sed -i -e s,etc,$out/etc, Makefile
+  '';
+
+  meta = {
+    homepage = "http://www.pps.univ-paris-diderot.fr/~jch/software/ahcp/";
+    description = "Autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 networks";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
+    mainProgram = "ahcpd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ain/default.nix b/nixpkgs/pkgs/tools/networking/ain/default.nix
new file mode 100644
index 000000000000..878af2c68211
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ain/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ain";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "jonaslu";
+    repo = "ain";
+    rev = "v${version}";
+    hash = "sha256-QBtnVtTGONbYToGhZ0L4CZ3o2hViEN1l94ZKJHVMd1w=";
+  };
+
+  vendorHash = "sha256-eyB+0D0+4hHG4yKDj/m9QB+8YTyv+por8fTyu/WcZyg=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.gitSha=${src.rev}"
+  ];
+
+  meta = with lib; {
+    description = "A HTTP API client for the terminal";
+    homepage = "https://github.com/jonaslu/ain";
+    changelog = "https://github.com/jonaslu/ain/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "ain";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/aircrack-ng/default.nix b/nixpkgs/pkgs/tools/networking/aircrack-ng/default.nix
new file mode 100644
index 000000000000..b4cab28e3ebd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/aircrack-ng/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, libpcap, openssl, zlib, wirelesstools
+, iw, ethtool, pciutils, libnl, pkg-config, makeWrapper
+, autoreconfHook, usbutils }:
+
+stdenv.mkDerivation rec {
+  pname = "aircrack-ng";
+  version = "1.7";
+
+  src = fetchurl {
+    url = "https://download.aircrack-ng.org/aircrack-ng-${version}.tar.gz";
+    sha256 = "1hsq1gwmafka4bahs6rc8p98yi542h9a502h64bjlygpr3ih99q5";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper autoreconfHook ];
+  buildInputs = [ libpcap openssl zlib libnl iw ethtool pciutils ];
+
+  patchPhase = ''
+    sed -e 's@/usr/local/bin@'${wirelesstools}@ -i lib/osdep/linux.c
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/airmon-ng --prefix PATH : ${lib.makeBinPath [
+      ethtool iw pciutils usbutils
+    ]}
+  '';
+
+  meta = with lib; {
+    description = "Wireless encryption cracking tools";
+    homepage = "http://www.aircrack-ng.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/airgeddon/default.nix b/nixpkgs/pkgs/tools/networking/airgeddon/default.nix
new file mode 100644
index 000000000000..cba25cae74f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/airgeddon/default.nix
@@ -0,0 +1,167 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+  # Required
+, aircrack-ng
+, bash
+, coreutils-full
+, gawk
+, gnugrep
+, gnused
+, iproute2
+, iw
+, pciutils
+, procps
+, tmux
+  # X11 Front
+, xterm
+, xorg
+  # what the author calls "Internals"
+, usbutils
+, wget
+, ethtool
+, util-linux
+, ccze
+  # Optionals
+  # Missing in nixpkgs: beef, hostapd-wpe
+, asleap
+, bettercap
+, bully
+, crunch
+, dnsmasq
+, ettercap
+, hashcat
+, hcxdumptool
+, hcxtools
+, hostapd
+, john
+, lighttpd
+, mdk4
+, nftables
+, openssl
+, pixiewps
+, reaverwps-t6x # Could be the upstream version too
+, wireshark-cli
+  # Undocumented requirements (there is also ping)
+, apparmor-bin-utils
+, curl
+, glibc
+, ncurses
+, networkmanager
+, systemd
+  # Support groups
+, supportWpaWps ? true # Most common use-case
+, supportHashCracking ? false
+, supportEvilTwin ? false
+, supportX11 ? false # Allow using xterm instead of tmux, hard to test
+}:
+let
+  deps = [
+    aircrack-ng
+    bash
+    coreutils-full
+    curl
+    gawk
+    glibc
+    gnugrep
+    gnused
+    iproute2
+    iw
+    networkmanager
+    ncurses
+    pciutils
+    procps
+    tmux
+    usbutils
+    wget
+    ethtool
+    util-linux
+    ccze
+    systemd
+  ] ++ lib.optionals supportWpaWps [
+    bully
+    pixiewps
+    reaverwps-t6x
+  ] ++ lib.optionals supportHashCracking [
+    asleap
+    crunch
+    hashcat
+    hcxdumptool
+    hcxtools
+    john
+    wireshark-cli
+  ] ++ lib.optionals supportEvilTwin [
+    bettercap
+    dnsmasq
+    ettercap
+    hostapd
+    lighttpd
+    openssl
+    mdk4
+    nftables
+    apparmor-bin-utils
+  ] ++ lib.optionals supportX11 [
+    xterm
+    xorg.xset
+    xorg.xdpyinfo
+  ];
+in
+stdenv.mkDerivation rec {
+  pname = "airgeddon";
+  version = "11.11";
+
+  src = fetchFromGitHub {
+    owner = "v1s1t0r1sh3r3";
+    repo = "airgeddon";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-3Rx1tMRIpSk+IEJGOs+t+kDlvGHYOx1IOSi+663uzrw=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ makeWrapper ];
+
+  # What these replacings do?
+  # - Disable the auto-updates (we'll run from a read-only directory);
+  # - Silence the checks (NixOS will enforce the PATH, it will only see the tools as we listed);
+  # - Use "tmux", we're not patching XTerm commands;
+  # - Remove PWD and $0 references, forcing it to use the paths from store;
+  # - Force our PATH to all tmux sessions.
+  postPatch = ''
+    patchShebangs airgeddon.sh
+    sed -i '
+      s|AIRGEDDON_AUTO_UPDATE=true|AIRGEDDON_AUTO_UPDATE=false|
+      s|AIRGEDDON_SILENT_CHECKS=false|AIRGEDDON_SILENT_CHECKS=true|
+      s|AIRGEDDON_WINDOWS_HANDLING=xterm|AIRGEDDON_WINDOWS_HANDLING=tmux|
+      ' .airgeddonrc
+
+    sed -Ei '
+      s|\$\(pwd\)|${placeholder "out"}/share/airgeddon;scriptfolder=${placeholder "out"}/share/airgeddon/|
+      s|\$\{0\}|${placeholder "out"}/bin/airgeddon|
+      s|tmux send-keys -t "([^"]+)" "|tmux send-keys -t "\1" "export PATH=\\"$PATH\\"; |
+      ' airgeddon.sh
+  '';
+
+  # ATTENTION: No need to chdir around, we're removing the occurrences of "$(pwd)"
+  postInstall = ''
+    wrapProgram $out/bin/airgeddon --prefix PATH : ${lib.makeBinPath deps}
+  '';
+
+  # Install only the interesting files
+  installPhase = ''
+    runHook preInstall
+    install -Dm 755 airgeddon.sh "$out/bin/airgeddon"
+    install -dm 755 "$out/share/airgeddon"
+    cp -dr .airgeddonrc known_pins.db language_strings.sh plugins/ "$out/share/airgeddon/"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Multi-use TUI to audit wireless networks";
+    homepage = "https://github.com/v1s1t0r1sh3r3/airgeddon";
+    changelog = "https://github.com/v1s1t0r1sh3r3/airgeddon/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ali/default.nix b/nixpkgs/pkgs/tools/networking/ali/default.nix
new file mode 100644
index 000000000000..3b6fef73595c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ali/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ali";
+  version = "0.7.5";
+
+  src = fetchFromGitHub {
+    owner = "nakabonne";
+    repo = "ali";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-/pdHlI20IzSTX2pnsbxPiJiWmOCbp13eJWLi0Tcsueg=";
+  };
+
+  vendorHash = "sha256-YWx9K04kTMaI0FXebwRQVCt0nxIwZ6xlbtI2lk3qp0M=";
+
+  meta = with lib; {
+    description = "Generate HTTP load and plot the results in real-time";
+    homepage = "https://github.com/nakabonne/ali";
+    changelog = "https://github.com/nakabonne/ali/releases/tag/v${version}";
+    license = licenses.mit;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ farcaller ];
+    mainProgram = "ali";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/altermime/default.nix b/nixpkgs/pkgs/tools/networking/altermime/default.nix
new file mode 100644
index 000000000000..812da5f8742e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/altermime/default.nix
@@ -0,0 +1,33 @@
+{ lib, gccStdenv, fetchurl }:
+
+gccStdenv.mkDerivation rec {
+  pname = "altermime";
+  version = "0.3.11";
+
+  src = fetchurl {
+    url = "https://pldaniels.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "15zxg6spcmd35r6xbidq2fgcg2nzyv1sbbqds08lzll70mqx4pj7";
+  };
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-Wno-error=format"
+    "-Wno-error=format-truncation"
+    "-Wno-error=pointer-compare"
+    "-Wno-error=memset-elt-size"
+    "-Wno-error=restrict"
+  ];
+
+  postPatch = ''
+    mkdir -p $out/bin
+    substituteInPlace Makefile --replace "/usr/local" "$out"
+  '';
+
+  meta = with lib; {
+    description = "MIME alteration tool";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.all;
+    license.fullName = "alterMIME LICENSE";
+    downloadPage = "https://pldaniels.com/altermime/";
+    mainProgram = "altermime";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/amass/default.nix b/nixpkgs/pkgs/tools/networking/amass/default.nix
new file mode 100644
index 000000000000..cbd651390505
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/amass/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "amass";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "OWASP";
+    repo = "Amass";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-lhvU2fUnjQ+D+EZDRircNg/np4Ynk+HzOBgxT1L8BaQ=";
+  };
+
+  vendorHash = "sha256-PdFIWK4yBh8Bb9mzYdU2h7pDPK8FZMhu8meTd9snP48=";
+
+  outputs = [
+    "out"
+    "wordlists"
+  ];
+
+  postInstall = ''
+    mkdir -p $wordlists
+    cp -R examples/wordlists/*.txt $wordlists
+    gzip $wordlists/*.txt
+  '';
+
+  # https://github.com/OWASP/Amass/issues/640
+  doCheck = false;
+
+  meta = with lib; {
+    description = "In-Depth DNS Enumeration and Network Mapping";
+    longDescription = ''
+      The OWASP Amass tool suite obtains subdomain names by scraping data
+      sources, recursive brute forcing, crawling web archives,
+      permuting/altering names and reverse DNS sweeping. Additionally, Amass
+      uses the IP addresses obtained during resolution to discover associated
+      netblocks and ASNs. All the information is then used to build maps of the
+      target networks.
+
+      Amass ships with a set of wordlist (to be used with the amass -w flag)
+      that are found under the wordlists output.
+      '';
+    homepage = "https://owasp.org/www-project-amass/";
+    changelog = "https://github.com/OWASP/Amass/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit fab ];
+    mainProgram = "amass";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/anevicon/default.nix b/nixpkgs/pkgs/tools/networking/anevicon/default.nix
new file mode 100644
index 000000000000..346c79dd6f31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/anevicon/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, rustPlatform
+, libiconv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "anevicon";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "rozgo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1m3ci7g7nn28p6x5m85av3ljgszwlg55f1hmgjnarc6bas5bapl7";
+  };
+
+  cargoSha256 = "1g15v13ysx09fy0b8qddw5fwql2pvwzc2g2h1ndhzpxvfy7fzpr1";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  cargoPatches = [
+    # Add Cargo.lock file, https://github.com/rozgo/anevicon/pull/1
+    (fetchpatch {
+      name = "cargo-lock-file.patch";
+      url = "https://github.com/rozgo/anevicon/commit/205440a0863aaea34394f30f4255fa0bb1704aed.patch";
+      sha256 = "02syzm7irn4slr3s5dwwhvg1qx8fdplwlhza8gfkc6ajl7vdc7ri";
+    })
+  ];
+
+  # Tries to send large UDP packets that Darwin rejects.
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "UDP-based load generator";
+    homepage = "https://github.com/rozgo/anevicon";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "anevicon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/apc-temp-fetch/default.nix b/nixpkgs/pkgs/tools/networking/apc-temp-fetch/default.nix
new file mode 100644
index 000000000000..7676465eb499
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/apc-temp-fetch/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, pythonOlder
+, requests
+}:
+
+buildPythonApplication rec {
+  pname = "apc-temp-fetch";
+  version = "0.0.2";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    pname = "APC-Temp-fetch";
+    inherit version;
+    hash = "sha256-lXGj/xrOkdMMYvuyVVSCojjQlzISFUT14VTn//iOARo=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  pythonImportsCheck = [
+    "APC_Temp_fetch"
+  ];
+
+  meta = with lib; {
+    description = "unified temperature fetcher interface to several UPS network adapters";
+    homepage = "https://github.com/YZITE/APC_Temp_fetch";
+    license = licenses.asl20;
+    maintainers = [ maintainers.fogti ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/argus-clients/default.nix b/nixpkgs/pkgs/tools/networking/argus-clients/default.nix
new file mode 100644
index 000000000000..8198b21e9094
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/argus-clients/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, libpcap, bison, flex, cyrus_sasl, tcp_wrappers, pkg-config, perl, libtirpc, libnsl }:
+
+stdenv.mkDerivation rec {
+  pname = "argus-clients";
+  version = "3.0.8.3";
+
+  src = fetchurl {
+    url = "http://qosient.com/argus/src/${pname}-${version}.tar.gz";
+    sha256 = "sha256-uNTvi6zbrYHAivQMPkhlNCoqRW9GOkgKvCf3mInds80=";
+  };
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${libtirpc.dev}/include/tirpc" ];
+
+  postPatch = ''
+    for file in ./examples/*/*.pl; do
+      substituteInPlace $file \
+        --subst-var-by PERLBIN ${perl}/bin/perl
+    done
+    '';
+
+  configureFlags = [ "--with-perl=${perl}/bin/perl" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libpcap bison cyrus_sasl tcp_wrappers flex libnsl ];
+
+  meta = with lib; {
+    description = "Clients for ARGUS";
+    longDescription = ''Clients for Audit Record Generation and
+    Utilization System (ARGUS). The Argus Project is focused on developing all
+    aspects of large scale network situtational awareness derived from
+    network activity audit. Argus, itself, is next-generation network
+    flow technology, processing packets, either on the wire or in
+    captures, into advanced network flow data. The data, its models,
+    formats, and attributes are designed to support Network
+    Operations, Performance and Security Management. If you need to
+    know what is going on in your network, right now or historically,
+    you will find Argus a useful tool. '';
+    homepage = "http://qosient.com/argus";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/argus/default.nix b/nixpkgs/pkgs/tools/networking/argus/default.nix
new file mode 100644
index 000000000000..bbb9d2201447
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/argus/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, libpcap, bison, flex, cyrus_sasl, tcp_wrappers,
+  pkg-config, procps, which, wget, lsof, net-snmp, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "argus";
+  version = "3.0.8.2";
+
+  src = fetchurl {
+    url = "http://qosient.com/argus/src/${pname}-${version}.tar.gz";
+    sha256 = "1zzf688dbbcb5z2r9v1p28rddns6znzx35nc05ygza6lp7aknkna";
+  };
+
+  nativeBuildInputs = [ pkg-config bison flex ];
+  buildInputs = [ libpcap cyrus_sasl tcp_wrappers ];
+  propagatedBuildInputs = [ procps which wget lsof net-snmp ];
+
+  patchPhase = ''
+     substituteInPlace events/argus-extip.pl \
+       --subst-var-by PERLBIN ${perl}/bin/perl
+    substituteInPlace events/argus-lsof.pl \
+      --replace "\`which lsof\`" "\"${lsof}/bin/lsof\"" \
+      --subst-var-by PERLBIN ${perl}/bin/perl
+    substituteInPlace events/argus-vmstat.sh \
+      --replace vm_stat ${procps}/bin/vmstat
+    substituteInPlace events/argus-snmp.sh \
+      --replace /usr/bin/snmpget ${lib.getBin net-snmp}/bin/snmpget \
+      --replace /usr/bin/snmpwalk ${lib.getBin net-snmp}/bin/snmpwalk
+  '';
+
+  meta = with lib; {
+    description = "Audit Record Generation and Utilization System for networks";
+    longDescription = ''The Argus Project is focused on developing all
+    aspects of large scale network situtational awareness derived from
+    network activity audit. Argus, itself, is next-generation network
+    flow technology, processing packets, either on the wire or in
+    captures, into advanced network flow data. The data, its models,
+    formats, and attributes are designed to support Network
+    Operations, Performance and Security Management. If you need to
+    know what is going on in your network, right now or historically,
+    you will find Argus a useful tool. '';
+    homepage = "http://qosient.com/argus";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/aria2/default.nix b/nixpkgs/pkgs/tools/networking/aria2/default.nix
new file mode 100644
index 000000000000..094cc8733bdc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/aria2/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, autoreconfHook
+, gnutls, c-ares, libxml2, sqlite, zlib, libssh2
+, cppunit, sphinx
+, Security
+}:
+
+stdenv.mkDerivation rec {
+  pname = "aria2";
+  version = "1.37.0";
+
+  src = fetchFromGitHub {
+    owner = "aria2";
+    repo = "aria2";
+    rev = "release-${version}";
+    sha256 = "sha256-xbiNSg/Z+CA0x0DQfMNsWdA+TATyX6dCeW2Nf3L3Kfs=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ pkg-config autoreconfHook sphinx ];
+
+  buildInputs = [ gnutls c-ares libxml2 sqlite zlib libssh2 ] ++
+    lib.optional stdenv.isDarwin Security;
+
+  outputs = [ "bin" "dev" "out" "doc" "man" ];
+
+  configureFlags = [
+    "--with-ca-bundle=/etc/ssl/certs/ca-certificates.crt"
+    "--enable-libaria2"
+    "--with-bashcompletiondir=${placeholder "bin"}/share/bash-completion/completions"
+  ];
+
+  prePatch = ''
+    patchShebangs --build doc/manual-src/en/mkapiref.py
+  '';
+
+  nativeCheckInputs = [ cppunit ];
+  doCheck = false; # needs the net
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://aria2.github.io";
+    description = "A lightweight, multi-protocol, multi-source, command-line download utility";
+    mainProgram = "aria2c";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ Br1ght0ne koral ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/arping/default.nix b/nixpkgs/pkgs/tools/networking/arping/default.nix
new file mode 100644
index 000000000000..3a08ec85083a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/arping/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, libnet
+, libpcap
+}:
+
+stdenv.mkDerivation rec {
+  pname = "arping";
+  version = "2.24";
+
+  src = fetchFromGitHub {
+    owner = "ThomasHabets";
+    repo = pname;
+    rev = "${pname}-${version}";
+    hash = "sha256-rME4IDzwYHOURbyuG7G5gnXvUIVoQH2WIeLWacHyoBA=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    libnet
+    libpcap
+  ];
+
+  meta = with lib; {
+    description = "Broadcasts a who-has ARP packet on the network and prints answers";
+    homepage = "https://github.com/ThomasHabets/arping";
+    license = with licenses; [ gpl2Plus ];
+    maintainers = with maintainers; [ michalrus ];
+    platforms = platforms.unix;
+    mainProgram = "arping";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/arpoison/default.nix b/nixpkgs/pkgs/tools/networking/arpoison/default.nix
new file mode 100644
index 000000000000..912636a0e72a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/arpoison/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchzip, libnet }:
+
+stdenv.mkDerivation rec {
+  pname = "arpoison";
+  version = "0.7";
+
+  buildInputs = [ libnet ];
+
+  src = fetchzip {
+    url = "http://www.arpoison.net/arpoison-${version}.tar.gz";
+    sha256 = "0krhszx3s0qwfg4rma5a51ak71nnd9xfs2ibggc3hwiz506s2x37";
+  };
+
+  postPatch = "substituteInPlace Makefile --replace gcc cc";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man8
+    gzip arpoison.8
+    cp arpoison $out/bin
+    cp arpoison.8.gz $out/share/man/man8
+  '';
+
+  meta = with lib; {
+    description = "UNIX arp cache update utility";
+    homepage = "http://www.arpoison.net/";
+    license = with licenses; [ gpl2 ];
+    maintainers = [ maintainers.michalrus ];
+    platforms = platforms.unix;
+    mainProgram = "arpoison";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/asleap/default.nix b/nixpkgs/pkgs/tools/networking/asleap/default.nix
new file mode 100644
index 000000000000..1d40bb3b22d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/asleap/default.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchFromGitHub, openssl, libpcap, libxcrypt}:
+
+stdenv.mkDerivation rec {
+  pname = "asleap";
+  version = "unstable-2021-06-20";
+
+  src = fetchFromGitHub {
+    owner = "zackw";
+    repo = pname;
+    rev = "eb3bd42098cba42b65f499c9d8c73d890861b94f";
+    sha256 = "sha256-S6jS0cg9tHSfmP6VHyISkXJxczhPx3HDdxT46c+YmE8=";
+  };
+
+  buildInputs = [ openssl libpcap libxcrypt ];
+
+  installPhase = ''
+    install -Dm755 asleap $out/bin/asleap
+    install -Dm755 genkeys $out/bin/genkeys
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/zackw/asleap";
+    description = "Recovers weak LEAP and PPTP passwords";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ thehedgeh0g ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/assh/default.nix b/nixpkgs/pkgs/tools/networking/assh/default.nix
new file mode 100644
index 000000000000..9d13a323357b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/assh/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, openssh
+, makeWrapper
+, ps
+}:
+
+buildGoModule rec {
+  pname = "assh";
+  version = "2.16.0";
+
+  src = fetchFromGitHub {
+    repo = "advanced-ssh-config";
+    owner = "moul";
+    rev = "v${version}";
+    sha256 = "sha256-rvJJZqVSBdaJ154NV6RaxbymsSsHbKnlJDeR6KHQE7M=";
+  };
+
+  vendorHash = "sha256-L2Uo/jsMtxQClF1UDa7NIUbOm7BflvncNsjqGnCsPKo=";
+
+  ldflags = [
+    "-s" "-w" "-X moul.io/assh/v2/pkg/version.Version=${version}"
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  nativeCheckInputs = lib.optionals stdenv.isDarwin [ ps ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/assh" \
+      --prefix PATH : ${openssh}/bin
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/assh --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Advanced SSH config - Regex, aliases, gateways, includes and dynamic hosts";
+    homepage = "https://github.com/moul/assh";
+    changelog = "https://github.com/moul/assh/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zzamboni ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/atftp/default.nix b/nixpkgs/pkgs/tools/networking/atftp/default.nix
new file mode 100644
index 000000000000..a8db0e93d5d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/atftp/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, autoreconfHook
+, fetchurl
+, gcc
+, makeWrapper
+, pcre2
+, perl
+, ps
+, readline
+, tcp_wrappers
+}:
+
+stdenv.mkDerivation rec {
+  pname = "atftp";
+  version = "0.8.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/atftp/${pname}-${version}.tar.gz";
+    hash = "sha256-3yqgicdnD56rQOVZjl0stqWC3FGCkm6lC01pDk438xY=";
+  };
+
+  # fix test script
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    makeWrapper
+  ];
+
+  buildInputs = [
+    gcc
+    pcre2
+    readline
+    tcp_wrappers
+  ];
+
+  nativeCheckInputs = [
+    perl
+    ps
+  ];
+
+  # Expects pre-GCC5 inline semantics
+  env.NIX_CFLAGS_COMPILE = "-std=gnu89";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Advanced tftp tools";
+    changelog = "https://sourceforge.net/p/atftp/code/ci/v${version}/tree/Changelog";
+    homepage = "https://sourceforge.net/projects/atftp/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/atinout/default.nix b/nixpkgs/pkgs/tools/networking/atinout/default.nix
new file mode 100644
index 000000000000..64d13a7b14ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/atinout/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchgit, ronn, mount }:
+
+stdenv.mkDerivation rec {
+  pname = "atinout";
+  version = "0.9.2-alpha";
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString (!stdenv.cc.isClang) "-Werror=implicit-fallthrough=0";
+  LANG = if stdenv.isDarwin then "en_US.UTF-8" else "C.UTF-8";
+  nativeBuildInputs = [ ronn mount ];
+
+  src = fetchgit {
+    url = "git://git.code.sf.net/p/atinout/code";
+    rev = "4976a6cb5237373b7e23cd02d7cd5517f306e3f6";
+    sha256 = "0bninv2bklz7ly140cxx8iyaqjlq809jjx6xqpimn34ghwsaxbpv";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    make PREFIX=$out install
+  '';
+
+  meta = with lib; {
+    homepage = "https://atinout.sourceforge.net";
+    description = "Tool for talking to modems";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ bendlas ];
+    mainProgram = "atinout";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/autossh/default.nix b/nixpkgs/pkgs/tools/networking/autossh/default.nix
new file mode 100644
index 000000000000..6d73715d832d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/autossh/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, openssh }:
+
+stdenv.mkDerivation rec {
+  pname = "autossh";
+  version = "1.4g";
+
+  src = fetchurl {
+    url = "http://www.harding.motd.ca/autossh/${pname}-${version}.tgz";
+    sha256 = "0xqjw8df68f4kzkns5gcah61s5wk0m44qdk2z1d6388w6viwxhsz";
+  };
+
+  preConfigure = ''
+    export ac_cv_func_malloc_0_nonnull=yes
+    export ac_cv_func_realloc_0_nonnull=yes
+  '';
+
+  nativeBuildInputs = [ openssh ];
+
+  installPhase = ''
+    install -D -m755 autossh      $out/bin/autossh                          || return 1
+    install -D -m644 CHANGES      $out/share/doc/autossh/CHANGES            || return 1
+    install -D -m644 README       $out/share/doc/autossh/README             || return 1
+    install -D -m644 autossh.host $out/share/autossh/examples/autossh.host  || return 1
+    install -D -m644 rscreen      $out/share/autossh/examples/rscreen       || return 1
+    install -D -m644 autossh.1    $out/man/man1/autossh.1                   || return 1
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.harding.motd.ca/autossh/";
+    description = "Automatically restart SSH sessions and tunnels";
+    license = licenses.bsd1;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "autossh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/axel/default.nix b/nixpkgs/pkgs/tools/networking/axel/default.nix
new file mode 100644
index 000000000000..0a5a11bd8eb7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/axel/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, autoconf-archive
+, pkg-config, gettext, libssl, txt2man }:
+
+stdenv.mkDerivation rec {
+  pname = "axel";
+  version = "2.17.13";
+
+  src = fetchFromGitHub {
+    owner = "axel-download-accelerator";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-iCxKQsymTE8ppOAilQtFeQUS+Fpdjhkcw4jaa9TEv3E=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config autoconf-archive txt2man ];
+
+  buildInputs = [ gettext libssl ];
+
+  installFlags = [ "ETCDIR=${placeholder "out"}/etc" ];
+
+  postInstall = ''
+    mkdir -p $out/share/doc
+    cp doc/axelrc.example $out/share/doc/axelrc.example
+  '';
+
+  meta = with lib; {
+    description = "Console downloading program with some features for parallel connections for faster downloading";
+    homepage = "https://github.com/axel-download-accelerator/axel";
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+    license = licenses.gpl2;
+    mainProgram = "axel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/babeld/default.nix b/nixpkgs/pkgs/tools/networking/babeld/default.nix
new file mode 100644
index 000000000000..4fd86e16f446
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/babeld/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchurl
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "babeld";
+  version = "1.13.1";
+
+  src = fetchurl {
+    url = "https://www.irif.fr/~jch/software/files/${pname}-${version}.tar.gz";
+    hash = "sha256-FfJNJtoMz8Bzq83vAwnygeRoTyqnESb4JlcsTIRejdk=";
+  };
+
+  outputs = [
+    "out"
+    "man"
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "ETCDIR=${placeholder "out"}/etc"
+  ];
+
+  passthru.tests.babeld = nixosTests.babeld;
+
+  meta = with lib; {
+    homepage = "http://www.irif.fr/~jch/software/babel/";
+    description = "Loop-avoiding distance-vector routing protocol";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+    platforms = platforms.linux;
+    mainProgram = "babeld";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bacnet-stack/default.nix b/nixpkgs/pkgs/tools/networking/bacnet-stack/default.nix
new file mode 100644
index 000000000000..528dd8141761
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bacnet-stack/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "bacnet-stack";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "bacnet-stack";
+    repo = "bacnet-stack";
+    rev = "bacnet-stack-${version}";
+    sha256 = "sha256-fFQIyZYHHNyszUO8jySIB9Y/Amzj/TTdxaex76ovBmw=";
+  };
+
+  hardeningDisable = [ "all" ];
+
+  buildPhase = ''
+    make BUILD=debug BACNET_PORT=linux BACDL_DEFINE=-DBACDL_BIP=1 BACNET_DEFINES=" -DPRINT_ENABLED=1 -DBACFILE -DBACAPP_ALL -DBACNET_PROPERTY_LISTS"
+  '';
+
+  installPhase = ''
+    mkdir $out
+    cp -r bin $out/bin
+  '';
+
+  meta = with lib; {
+    description = "BACnet open source protocol stack for embedded systems, Linux, and Windows";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ WhittlesJr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/badvpn/default.nix b/nixpkgs/pkgs/tools/networking/badvpn/default.nix
new file mode 100644
index 000000000000..b1fc3b5b9b60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/badvpn/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, cmake, openssl, nss, pkg-config, nspr, bash, debug ? false }:
+
+stdenv.mkDerivation rec {
+  pname = "badvpn";
+  version = "1.999.130";
+
+  src = fetchFromGitHub {
+    owner = "ambrop72";
+    repo = "badvpn";
+    rev = version;
+    sha256 = "sha256-bLTDpq3ohUP+KooPvhv1/AZfdo0HwB3g9QOuE2E/pmY=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [
+    openssl
+    nss
+    nspr
+  ];
+
+  preConfigure = ''
+    find . -name '*.sh' -exec sed -e 's@#!/bin/sh@${stdenv.shell}@' -i '{}' ';'
+    find . -name '*.sh' -exec sed -e 's@#!/bin/bash@${bash}/bin/bash@' -i '{}' ';'
+    cmakeFlagsArray=("-DCMAKE_BUILD_TYPE=" "-DCMAKE_C_FLAGS=-O3 ${lib.optionalString (!debug) "-DNDEBUG"}");
+  '';
+
+  meta = with lib; {
+    description = "A set of network-related (mostly VPN-related) tools";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bandwhich/Cargo.lock b/nixpkgs/pkgs/tools/networking/bandwhich/Cargo.lock
new file mode 100644
index 000000000000..2742af2bd33c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bandwhich/Cargo.lock
@@ -0,0 +1,2438 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aes"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "bandwhich"
+version = "0.22.2"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "chrono",
+ "clap",
+ "clap-verbosity-flag",
+ "clap_complete",
+ "clap_mangen",
+ "crossterm",
+ "derivative",
+ "http_req",
+ "insta",
+ "ipnetwork",
+ "itertools",
+ "log",
+ "netstat2",
+ "once_cell",
+ "packet-builder",
+ "pnet",
+ "pnet_base",
+ "pnet_macros_support",
+ "procfs",
+ "ratatui",
+ "regex",
+ "resolv-conf",
+ "rstest",
+ "simplelog",
+ "strum",
+ "sysinfo",
+ "thiserror",
+ "tokio",
+ "trust-dns-resolver",
+ "unicode-width",
+ "zip",
+]
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "bzip2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap-verbosity-flag"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b57f73ca21b17a0352944b9bb61803b6007bd911b6cccfef7153f7f0600ac495"
+dependencies = [
+ "clap",
+ "log",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df631ae429f6613fcd3a7c1adbdb65f637271e561b03680adaa6573015dfb106"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "clap_mangen"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a7c2b01e5e779c19f46a94bbd398f33ae63b0f78c07108351fb4536845bb7fd"
+dependencies = [
+ "clap",
+ "roff",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "console"
+version = "0.15.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+
+[[package]]
+name = "crossterm"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
+dependencies = [
+ "bitflags 2.4.2",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive-new"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "enum-as-inner"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-timer"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http_req"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90394b01e9de1f7eca6ca0664cc64bd92add9603c1aa4f961813f23789035e10"
+dependencies = [
+ "native-tls",
+ "unicase",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indoc"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "insta"
+version = "1.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc"
+dependencies = [
+ "console",
+ "lazy_static",
+ "linked-hash-map",
+ "similar",
+ "yaml-rust",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
+dependencies = [
+ "socket2",
+ "widestring",
+ "windows-sys 0.48.0",
+ "winreg",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
+[[package]]
+name = "ipnetwork"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "itertools"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7"
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "lru"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2994eeba8ed550fd9b47a0b38f0242bc3344e496483c6180b69139cc2fa5d1d7"
+dependencies = [
+ "hashbrown",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "netstat2"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0faa3f4ad230fd2bf2a5dad71476ecbaeaed904b3c7e7e5b1f266c415c03761f"
+dependencies = [
+ "bitflags 1.3.2",
+ "byteorder",
+ "libc",
+ "num-derive",
+ "num-traits",
+ "thiserror",
+]
+
+[[package]]
+name = "no-std-net"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65"
+
+[[package]]
+name = "ntapi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "openssl"
+version = "0.10.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c9d69dd87a29568d4d017cfe8ec518706046a05184e5aea92d0af890b803c8"
+dependencies = [
+ "bitflags 2.4.2",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "packet-builder"
+version = "0.7.0"
+source = "git+https://github.com/cyqsimon/packet_builder.git?branch=patch-update#bf5a89ba75795f5067bb03fa8de00b833ffe4eae"
+dependencies = [
+ "derive-new",
+ "ipnetwork",
+ "pnet",
+ "pnet_datalink",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb"
+
+[[package]]
+name = "pnet"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "130c5b738eeda2dc5796fe2671e49027e6935e817ab51b930a36ec9e6a206a64"
+dependencies = [
+ "ipnetwork",
+ "pnet_base",
+ "pnet_datalink",
+ "pnet_packet",
+ "pnet_sys",
+ "pnet_transport",
+]
+
+[[package]]
+name = "pnet_base"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe4cf6fb3ab38b68d01ab2aea03ed3d1132b4868fa4e06285f29f16da01c5f4c"
+dependencies = [
+ "no-std-net",
+]
+
+[[package]]
+name = "pnet_datalink"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad5854abf0067ebbd3967f7d45ebc8976ff577ff0c7bd101c4973ae3c70f98fe"
+dependencies = [
+ "ipnetwork",
+ "libc",
+ "pnet_base",
+ "pnet_sys",
+ "winapi",
+]
+
+[[package]]
+name = "pnet_macros"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "688b17499eee04a0408aca0aa5cba5fc86401d7216de8a63fdf7a4c227871804"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "pnet_macros_support"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eea925b72f4bd37f8eab0f221bbe4c78b63498350c983ffa9dd4bcde7e030f56"
+dependencies = [
+ "pnet_base",
+]
+
+[[package]]
+name = "pnet_packet"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9a005825396b7fe7a38a8e288dbc342d5034dac80c15212436424fef8ea90ba"
+dependencies = [
+ "glob",
+ "pnet_base",
+ "pnet_macros",
+ "pnet_macros_support",
+]
+
+[[package]]
+name = "pnet_sys"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "417c0becd1b573f6d544f73671070b039051e5ad819cc64aa96377b536128d00"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "pnet_transport"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2637e14d7de974ee2f74393afccbc8704f3e54e6eb31488715e72481d1662cc3"
+dependencies = [
+ "libc",
+ "pnet_base",
+ "pnet_packet",
+ "pnet_sys",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "procfs"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "731e0d9356b0c25f16f33b5be79b1c57b562f141ebfcdb0ad8ac2c13a24293b4"
+dependencies = [
+ "bitflags 2.4.2",
+ "chrono",
+ "flate2",
+ "hex",
+ "lazy_static",
+ "procfs-core",
+ "rustix",
+]
+
+[[package]]
+name = "procfs-core"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29"
+dependencies = [
+ "bitflags 2.4.2",
+ "chrono",
+ "hex",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "ratatui"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5659e52e4ba6e07b2dad9f1158f578ef84a73762625ddb51536019f34d180eb"
+dependencies = [
+ "bitflags 2.4.2",
+ "cassowary",
+ "crossterm",
+ "indoc",
+ "itertools",
+ "lru",
+ "paste",
+ "stability",
+ "strum",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "rayon"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "relative-path"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e898588f33fdd5b9420719948f9f2a32c922a246964576f71ba7f24f80610fbc"
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "roff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
+
+[[package]]
+name = "rstest"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199"
+dependencies = [
+ "futures",
+ "futures-timer",
+ "rstest_macros",
+ "rustc_version",
+]
+
+[[package]]
+name = "rstest_macros"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d428f8247852f894ee1be110b375111b586d4fa431f6c46e64ba5a0dcccbe605"
+dependencies = [
+ "cfg-if",
+ "glob",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "relative-path",
+ "rustc_version",
+ "syn 2.0.48",
+ "unicode-ident",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca"
+dependencies = [
+ "bitflags 2.4.2",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "schannel"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
+
+[[package]]
+name = "serde"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "similar"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32fea41aca09ee824cc9724996433064c89f7777e60762749a4170a14abbfa21"
+
+[[package]]
+name = "simplelog"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acee08041c5de3d5048c8b3f6f13fafb3026b24ba43c6a695a0c76179b844369"
+dependencies = [
+ "log",
+ "termcolor",
+ "time",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "stability"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd1b177894da2a2d9120208c3386066af06a488255caabc5de8ddca22dbc3ce"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sysinfo"
+version = "0.30.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fb4f3438c8f6389c864e61221cbc97e9bca98b4daf39a5beb7bea660f528bb2"
+dependencies = [
+ "cfg-if",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "windows",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "time"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e"
+dependencies = [
+ "deranged",
+ "itoa",
+ "libc",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.35.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.4.0",
+ "ipnet",
+ "once_cell",
+ "rand",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig",
+ "lru-cache",
+ "once_cell",
+ "parking_lot",
+ "rand",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicase"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.5.0",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b"
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
+dependencies = [
+ "windows-core",
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
+dependencies = [
+ "aes",
+ "byteorder",
+ "bzip2",
+ "constant_time_eq",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "hmac",
+ "pbkdf2",
+ "sha1",
+ "time",
+ "zstd",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.9+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/tools/networking/bandwhich/default.nix b/nixpkgs/pkgs/tools/networking/bandwhich/default.nix
new file mode 100644
index 000000000000..43da60ffb89d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bandwhich/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bandwhich";
+  version = "0.22.2";
+
+  src = fetchFromGitHub {
+    owner = "imsnif";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-/uG1xjhxnIkS3rq7Tv1q1v8X7p1baDB8OiSEV9OLyfo=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "packet-builder-0.7.0" = "sha256-KxNrnLZ/z3JJ3E1pCTJF9tNXI7XYNRc6ooTUz3avpjw=";
+    };
+  };
+
+  checkFlags = [
+    # failing in upstream CI
+    "--skip=tests::cases::ui::layout_under_50_width_under_50_height"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # 10 passed; 47 failed https://hydra.nixos.org/build/148943783/nixlog/1
+  doCheck = !stdenv.isDarwin;
+
+  preConfigure = ''
+    export BANDWHICH_GEN_DIR=_shell-files
+    mkdir -p $BANDWHICH_GEN_DIR
+  '';
+
+  postInstall = ''
+    installManPage $BANDWHICH_GEN_DIR/bandwhich.1
+
+    installShellCompletion $BANDWHICH_GEN_DIR/bandwhich.{bash,fish} \
+      --zsh $BANDWHICH_GEN_DIR/_bandwhich
+  '';
+
+  meta = with lib; {
+    description = "A CLI utility for displaying current network utilization";
+    longDescription = ''
+      bandwhich sniffs a given network interface and records IP packet size, cross
+      referencing it with the /proc filesystem on linux or lsof on MacOS. It is
+      responsive to the terminal window size, displaying less info if there is
+      no room for it. It will also attempt to resolve ips to their host name in
+      the background using reverse DNS on a best effort basis.
+    '';
+    homepage = "https://github.com/imsnif/bandwhich";
+    changelog = "https://github.com/imsnif/bandwhich/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne figsoda ];
+    platforms = platforms.unix;
+    mainProgram = "bandwhich";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bgpdump/default.nix b/nixpkgs/pkgs/tools/networking/bgpdump/default.nix
new file mode 100644
index 000000000000..4ca75a53c254
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bgpdump/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, zlib, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "bgpdump";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "RIPE-NCC";
+    repo = "bgpdump";
+    rev = "v${version}";
+    sha256 = "sha256-1HXMf9mHManR7jhonU2Agon0YFXOlM9APIN1Zm840AM=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile.in --replace 'ar r libbgpdump.a' '$(AR) r libbgpdump.a'
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ zlib bzip2 ];
+
+  meta = {
+    homepage = "https://github.com/RIPE-NCC/bgpdump";
+    description = "Analyze dump files produced by Zebra/Quagga or MRT";
+    license = lib.licenses.hpnd;
+    maintainers = with lib.maintainers; [ lewo ];
+    platforms = with lib.platforms; linux;
+    mainProgram = "bgpdump";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bgpq3/default.nix b/nixpkgs/pkgs/tools/networking/bgpq3/default.nix
new file mode 100644
index 000000000000..7d92aa4ee995
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bgpq3/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "bgpq3";
+  version = "0.1.36.1";
+
+  src = fetchFromGitHub {
+    owner = "snar";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-rOpggVlXKaf3KBhfZ2lVooDaQA0iRjSbsLXF02GEyBw=";
+  };
+
+  meta = with lib; {
+    description = "bgp filtering automation tool";
+    homepage = "https://github.com/snar/bgpq3";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ b4dm4n ];
+    platforms = with platforms; unix;
+    mainProgram = "bgpq3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bgpq4/default.nix b/nixpkgs/pkgs/tools/networking/bgpq4/default.nix
new file mode 100644
index 000000000000..22e17a205c20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bgpq4/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "bgpq4";
+  version = "1.12";
+
+  src = fetchFromGitHub {
+    owner = "bgp";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Irv91M5g21id0QfsnpDA7n5IhP8Qe9QHMh/KizD74qw=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  meta = with lib; {
+    description = "BGP filtering automation tool";
+    homepage = "https://github.com/bgp/bgpq4";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ vincentbernat ];
+    platforms = with platforms; unix;
+    mainProgram = "bgpq4";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/biosdevname/default.nix b/nixpkgs/pkgs/tools/networking/biosdevname/default.nix
new file mode 100644
index 000000000000..fe9ccb3dd20a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/biosdevname/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, zlib, pciutils }:
+
+stdenv.mkDerivation rec {
+  pname = "biosdevname";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "dell";
+    repo = "biosdevname";
+    rev = "v${version}";
+    sha256 = "19wbb79x9h79k55sgd4dylvdbhhrvfaiaknbw9s1wvfmirkxa1dz";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ zlib pciutils ];
+
+  # Don't install /lib/udev/rules.d/*-biosdevname.rules
+  patches = [ ./makefile.patch ];
+
+  configureFlags = [ "--sbindir=\${out}/bin" ];
+
+  meta = with lib; {
+    description = "Udev helper for naming devices per BIOS names";
+    license = licenses.gpl2;
+    platforms = ["x86_64-linux" "i686-linux"];
+    maintainers = with maintainers; [ ];
+    mainProgram = "biosdevname";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/biosdevname/makefile.patch b/nixpkgs/pkgs/tools/networking/biosdevname/makefile.patch
new file mode 100644
index 000000000000..0fc083f9096f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/biosdevname/makefile.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.am b/Makefile.am
+index 14d9a92..9e324d2 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -8,8 +8,6 @@ dist_noinst_DATA = biosdevname.rules.in biosdevname.spec.fedora biosdevname.spec
+ 
+ CLEANFILES = version src/bios_dev_name.h
+ install-data-local:
+-	mkdir -p $(DESTDIR)@RULEDIR@
+-	$(INSTALL_DATA) $(top_srcdir)/biosdevname.rules.in $(DESTDIR)@RULEDEST@
+ 
+ uninstall-local:
+ 	rm -f $(DESTDIR)@RULEDEST@
diff --git a/nixpkgs/pkgs/tools/networking/bitmask-vpn/default.nix b/nixpkgs/pkgs/tools/networking/bitmask-vpn/default.nix
new file mode 100644
index 000000000000..60988da176a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bitmask-vpn/default.nix
@@ -0,0 +1,175 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, mkDerivation
+, buildGoModule
+, wrapQtAppsHook
+, python3Packages
+, pkg-config
+, openvpn
+, cmake
+, qmake
+, which
+, iproute2
+, iptables
+, procps
+, qmltermwidget
+, qtbase
+, qtdeclarative
+, qtgraphicaleffects
+, qtinstaller
+, qtquickcontrols
+, qtquickcontrols2
+, qttools
+, CoreFoundation
+, Security
+, provider ? "riseup"
+}:
+let
+  version = "0.21.11";
+
+  src = fetchFromGitLab {
+    domain = "0xacab.org";
+    owner = "leap";
+    repo = "bitmask-vpn";
+    rev = version;
+    sha256 = "sha256-mhmKG6Exxh64oeeeLezJYWEw61iIHLasHjLomd2L8P4=";
+  };
+
+  # bitmask-root is only used on GNU/Linux
+  # and may one day be replaced by pkg/helper
+  bitmask-root = mkDerivation {
+    inherit src version;
+    sourceRoot = "${src.name}/helpers";
+    pname = "bitmask-root";
+    nativeBuildInputs = [ python3Packages.wrapPython ];
+    postPatch = ''
+      substituteInPlace bitmask-root \
+        --replace 'swhich("ip")' '"${iproute2}/bin/ip"' \
+        --replace 'swhich("iptables")' '"${iptables}/bin/iptables"' \
+        --replace 'swhich("ip6tables")' '"${iptables}/bin/ip6tables"' \
+        --replace 'swhich("sysctl")' '"${procps}/bin/sysctl"' \
+        --replace /usr/sbin/openvpn ${openvpn}/bin/openvpn
+      substituteInPlace se.leap.bitmask.policy \
+        --replace /usr/sbin/bitmask-root $out/bin/bitmask-root
+    '';
+    installPhase = ''
+      runHook preInstall
+
+      install -m 755 -D -t $out/bin bitmask-root
+      install -m 444 -D -t $out/share/polkit-1/actions se.leap.bitmask.policy
+      wrapPythonPrograms
+
+      runHook postInstall
+    '';
+  };
+in
+
+buildGoModule rec {
+  inherit src version;
+  pname = "${provider}-vpn";
+  vendorHash = null;
+
+  postPatch = ''
+    substituteInPlace pkg/pickle/helpers.go \
+      --replace /usr/share $out/share
+
+    # Using $PROVIDER is not working,
+    # thus replacing directly into the vendor.conf
+    substituteInPlace providers/vendor.conf \
+      --replace "provider = riseup" "provider = ${provider}"
+
+    substituteInPlace branding/templates/debian/app.desktop-template \
+      --replace "Icon=icon" "Icon=${pname}"
+
+    patchShebangs gui/build.sh
+    wrapPythonProgramsIn branding/scripts
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace pkg/helper/linux.go \
+      --replace /usr/sbin/openvpn ${openvpn}/bin/openvpn
+    substituteInPlace pkg/vpn/launcher_linux.go \
+      --replace /usr/sbin/openvpn ${openvpn}/bin/openvpn \
+      --replace /usr/sbin/bitmask-root ${bitmask-root}/bin/bitmask-root \
+      --replace /usr/bin/lxpolkit /run/wrappers/bin/polkit-agent-helper-1 \
+      --replace '"polkit-gnome-authentication-agent-1",' '"polkit-gnome-authentication-agent-1","polkitd",'
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    python3Packages.wrapPython
+    qmake
+    qtquickcontrols2
+    qttools
+    which
+    wrapQtAppsHook
+  ] ++ lib.optional (!stdenv.isLinux) qtinstaller;
+
+  buildInputs = [
+    qtbase
+    qmltermwidget
+    qtdeclarative
+    qtgraphicaleffects
+    qtquickcontrols
+    qtquickcontrols2
+  ] ++ lib.optionals stdenv.isDarwin [ CoreFoundation Security ];
+  # FIXME: building on Darwin currently fails
+  # due to missing debug symbols for Qt,
+  # this should be fixable once darwin.apple_sdk >= 10.13
+  # See https://bugreports.qt.io/browse/QTBUG-76777
+
+  # Not using buildGoModule's buildPhase:
+  # gui/build.sh will build Go modules into lib/libgoshim.a
+  buildPhase = ''
+    runHook preBuild
+
+    make gen_providers_json
+    make generate
+    # Remove timestamps in comments
+    sed -i -e '/^\/\//d' pkg/config/version/version.go
+
+    # Not using -j$NIX_BUILD_CORES because the Makefile's rules
+    # are not thread-safe: lib/libgoshim.h is used before being built.
+    make build
+
+    runHook postBuild
+  '';
+
+  postInstall = ''
+    install -m 755 -D -t $out/bin build/qt/release/${pname}
+
+    VERSION=${version} VENDOR_PATH=providers branding/scripts/generate-debian branding/templates/debian/data.json
+    (cd branding/templates/debian && ${python3Packages.python}/bin/python3 generate.py)
+    install -m 444 -D branding/templates/debian/app.desktop $out/share/applications/${pname}.desktop
+    install -m 444 -D providers/${provider}/assets/icon.svg $out/share/icons/hicolor/scalable/apps/${pname}.svg
+  '' + lib.optionalString stdenv.isLinux ''
+    install -m 444 -D -t $out/share/polkit-1/actions ${bitmask-root}/share/polkit-1/actions/se.leap.bitmask.policy
+  '';
+
+  # Some tests need access to the Internet:
+  # Post "https://api.black.riseup.net/3/cert": dial tcp: lookup api.black.riseup.net on [::1]:53: read udp [::1]:56553->[::1]:53: read: connection refused
+  doCheck = false;
+
+  passthru = { inherit bitmask-root; };
+
+  meta = {
+    description = "Generic VPN client by LEAP";
+    longDescription = ''
+      Bitmask, by LEAP (LEAP Encryption Access Project),
+      is an application to provide easy and secure encrypted communication
+      with a VPN (Virtual Private Network). It allows you to select from
+      a variety of trusted service provider all from one app.
+      Current providers include Riseup Networks
+      and The Calyx Institute, where the former is default.
+      The <literal>${pname}</literal> executable should appear
+      in your desktop manager's XDG menu or could be launch in a terminal
+      to get an execution log. A new icon should then appear in your systray
+      to control the VPN and configure some options.
+    '';
+    homepage = "https://bitmask.net";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ julm ];
+    # darwin requires apple_sdk >= 10.13
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bombardier/default.nix b/nixpkgs/pkgs/tools/networking/bombardier/default.nix
new file mode 100644
index 000000000000..89f20860836c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bombardier/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, bombardier
+}:
+
+buildGoModule rec {
+  pname = "bombardier";
+  version = "1.2.6";
+
+  src = fetchFromGitHub {
+    owner = "codesenberg";
+    repo = "bombardier";
+    rev = "v${version}";
+    hash = "sha256-sJ5+nxfyWSN6dFlA4INaqa3UHTY7huYkZhaTidMJFAs=";
+  };
+
+  vendorHash = "sha256-SxW/87l1w86H5cxEhiF/Fj8SxJ/uAfhtc7I1DVvIilk=";
+
+  subPackages = [
+    "."
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  __darwinAllowLocalNetworking = true;
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = bombardier;
+    };
+  };
+
+  meta = with lib; {
+    description = "Fast cross-platform HTTP benchmarking tool written in Go";
+    homepage = "https://github.com/codesenberg/bombardier";
+    changelog = "https://github.com/codesenberg/bombardier/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "bombardier";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bore-cli/default.nix b/nixpkgs/pkgs/tools/networking/bore-cli/default.nix
new file mode 100644
index 000000000000..d339f8a28b56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bore-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bore-cli";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "ekzhang";
+    repo = "bore";
+    rev = "v${version}";
+    hash = "sha256-fHCWK/GI/MDbBPCpkgKJlWjFEsl8Ey6IdUZQPnYUfjg=";
+  };
+
+  cargoHash = "sha256-/k/7/mCD0abspPr+GGk/8ovnWl85OsmJtzirmfVxDNo=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  # tests do not find grcov path correctly
+  meta = with lib; {
+    description = "Rust tool to create TCP tunnels";
+    homepage = "https://github.com/ekzhang/bore";
+    license = licenses.mit;
+    maintainers = with maintainers; [ DieracDelta ];
+    mainProgram = "bore";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bore/default.nix b/nixpkgs/pkgs/tools/networking/bore/default.nix
new file mode 100644
index 000000000000..abbbcc414751
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bore/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, rustPlatform, fetchFromBitbucket, Libsystem, SystemConfiguration, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bore";
+  version = "0.4.1";
+
+  src = fetchFromBitbucket {
+    owner = "delan";
+    repo = "nonymous";
+    rev = "${pname}-${version}";
+    sha256 = "1fdnnx7d18gj4rkv1dc6q379dqabl66zks9i0rjarjwcci8m30d9";
+  };
+
+  cargoSha256 = "1xlbfzmy0wjyz3jpr17r4ma4i79d9b32yqwwi10vrcjzr7vsyhmx";
+  cargoBuildFlags = [ "-p" pname ];
+
+  # error[E0793]: reference to packed field is unaligned
+  doCheck = !stdenv.isDarwin;
+
+  # FIXME can’t test --all-targets and --doc in a single invocation
+  cargoTestFlags = [ "--all-targets" "--workspace" ];
+  checkFeatures = [ "std" ];
+
+  nativeBuildInputs = [ installShellFiles ]
+    ++ lib.optional stdenv.isDarwin rustPlatform.bindgenHook;
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Libsystem
+    SystemConfiguration
+  ];
+
+  postInstall = ''
+    installManPage $src/bore/doc/bore.1
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    printf '\0\0\0\0\0\0\0\0\0\0\0\0' \
+    | $out/bin/bore --decode \
+    | grep -q ';; NoError #0 Query 0 0 0 0 flags'
+  '';
+
+  meta = with lib; {
+    description = "DNS query tool";
+    homepage = "https://crates.io/crates/bore";
+    license = licenses.isc;
+    maintainers = [ maintainers.delan ];
+    mainProgram = "bore";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/boringtun/default.nix b/nixpkgs/pkgs/tools/networking/boringtun/default.nix
new file mode 100644
index 000000000000..b1defdcfb1c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/boringtun/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "boringtun";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = pname;
+    rev = "boringtun-cli-${version}";
+    sha256 = "sha256-PY7yqBNR4CYh8Y/vk4TYxxJnnv0eig8sjXp4dR4CX04=";
+  };
+
+  cargoSha256 = "sha256-WFKlfuZGVU5KA57ZYjsIrIwE4B5TeaU5IKt9BNEnWyY=";
+
+  buildInputs = lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
+
+  # Testing this project requires sudo, Docker and network access, etc.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Userspace WireGuard® implementation in Rust";
+    homepage = "https://github.com/cloudflare/boringtun";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ xrelkd marsam ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "boringtun-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/boundary/default.nix b/nixpkgs/pkgs/tools/networking/boundary/default.nix
new file mode 100644
index 000000000000..66973b17ccba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/boundary/default.nix
@@ -0,0 +1,71 @@
+{ stdenv, lib, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "boundary";
+  version = "0.15.0";
+
+  src =
+    let
+      inherit (stdenv.hostPlatform) system;
+      selectSystem = attrs: attrs.${system} or (throw "Unsupported system: ${system}");
+      suffix = selectSystem {
+        x86_64-linux = "linux_amd64";
+        aarch64-linux = "linux_arm64";
+        x86_64-darwin = "darwin_amd64";
+        aarch64-darwin = "darwin_arm64";
+      };
+      sha256 = selectSystem {
+        x86_64-linux = "sha256-9swvTXPlGXXkHPWzjg54rpH8bsscJ393S2OKRImZGzs=";
+        aarch64-linux = "sha256-dCmJmL+6l+QxWgZLCbj3ymzarwvJTqkyseQj9dO7DcM=";
+        x86_64-darwin = "sha256-vZudiEt+Bi0GuW/jVgIniNq2obAkL/mH0EoUS2cwj0U=";
+        aarch64-darwin = "sha256-dL9SfzN/DZZggpX3x67rIhOJupkOWxcFGdQDMPffecY=";
+      };
+    in
+    fetchzip {
+      url = "https://releases.hashicorp.com/boundary/${version}/boundary_${version}_${suffix}.zip";
+      inherit sha256;
+    };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -D boundary $out/bin/boundary
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/boundary --help
+    $out/bin/boundary version
+    runHook postInstallCheck
+  '';
+
+  dontPatchELF = true;
+  dontPatchShebangs = true;
+  dontStrip = true;
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    homepage = "https://boundaryproject.io/";
+    changelog = "https://github.com/hashicorp/boundary/blob/v${version}/CHANGELOG.md";
+    description = "Enables identity-based access management for dynamic infrastructure";
+    longDescription = ''
+      Boundary provides a secure way to access hosts and critical systems
+      without having to manage credentials or expose your network, and is
+      entirely open source.
+
+      Boundary is designed to be straightforward to understand, highly scalable,
+      and resilient. It can run in clouds, on-prem, secure enclaves and more,
+      and does not require an agent to be installed on every end host.
+    '';
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.bsl11;
+    maintainers = with maintainers; [ jk techknowlogick ];
+    platforms = platforms.unix;
+    mainProgram = "boundary";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/boundary/update.sh b/nixpkgs/pkgs/tools/networking/boundary/update.sh
new file mode 100755
index 000000000000..0533c07967c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/boundary/update.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused gawk nix-prefetch
+
+set -euo pipefail
+
+ROOT="$(dirname "$(readlink -f "$0")")"
+NIX_DRV="$ROOT/default.nix"
+if [ ! -f "$NIX_DRV" ]; then
+  echo "ERROR: cannot find default.nix in $ROOT"
+  exit 1
+fi
+
+fetch_arch() {
+  VER="$1"; ARCH="$2"
+  URL="https://releases.hashicorp.com/boundary/${VER}/boundary_${VER}_${ARCH}.zip"
+  nix-prefetch "{ stdenv, fetchzip }:
+stdenv.mkDerivation rec {
+  pname = \"boundary\"; version = \"${VER}\";
+  src = fetchzip { url = \"$URL\"; };
+}
+"
+}
+
+replace_sha() {
+  sed -i "s#$1 = \"sha256-.\{44\}\"#$1 = \"$2\"#" "$NIX_DRV"
+}
+
+# https://releases.hashicorp.com/boundary/0.1.4/boundary_0.1.4_linux_amd64.zip
+BOUNDARY_VER=$(curl -Ls -w "%{url_effective}" -o /dev/null https://github.com/hashicorp/boundary/releases/latest | awk -F'/' '{print $NF}' | sed 's/v//')
+
+BOUNDARY_LINUX_X64_SHA256=$(fetch_arch "$BOUNDARY_VER" "linux_amd64")
+BOUNDARY_DARWIN_X64_SHA256=$(fetch_arch "$BOUNDARY_VER" "darwin_amd64")
+BOUNDARY_LINUX_AARCH64_SHA256=$(fetch_arch "$BOUNDARY_VER" "linux_arm64")
+BOUNDARY_DARWIN_AARCH64_SHA256=$(fetch_arch "$BOUNDARY_VER" "darwin_arm64")
+
+sed -i "s/version = \".*\"/version = \"$BOUNDARY_VER\"/" "$NIX_DRV"
+
+replace_sha "x86_64-linux" "$BOUNDARY_LINUX_X64_SHA256"
+replace_sha "x86_64-darwin" "$BOUNDARY_DARWIN_X64_SHA256"
+replace_sha "aarch64-linux" "$BOUNDARY_LINUX_AARCH64_SHA256"
+replace_sha "aarch64-darwin" "$BOUNDARY_DARWIN_AARCH64_SHA256"
diff --git a/nixpkgs/pkgs/tools/networking/brook/default.nix b/nixpkgs/pkgs/tools/networking/brook/default.nix
new file mode 100644
index 000000000000..432b49523e18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/brook/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "brook";
+  version = "20240214";
+
+  src = fetchFromGitHub {
+    owner = "txthinking";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-5+AqlmDa11PrB24XkelOFHK4sBi4j78WMLQrzDuP1/M=";
+  };
+
+  vendorHash = "sha256-cTw9k4AqS4NOJ0vX0InR0xxOfCXIgA3FxgL6oXryOnA=";
+
+  meta = with lib; {
+    homepage = "https://github.com/txthinking/brook";
+    description = "A cross-platform Proxy/VPN software";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ xrelkd ];
+    mainProgram = "brook";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bsd-finger/default.nix b/nixpkgs/pkgs/tools/networking/bsd-finger/default.nix
new file mode 100644
index 000000000000..9d4c0267c76a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bsd-finger/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchurl
+, buildClient ? true
+}:
+
+stdenv.mkDerivation rec {
+  srcName = "bsd-finger";
+  pname = srcName + lib.optionalString (!buildClient) "d";
+  version = "0.17";
+
+  src = fetchurl {
+    url = "mirror://ibiblioPubLinux/system/network/finger/${srcName}-${version}.tar.gz";
+    hash = "sha256-hIhdZo0RfvUOAccDSkXYND10fOxiEuQOjQgVG8GOE/o=";
+  };
+
+  # outputs = [ "out" "man" ];
+
+  env.NIX_CFLAGS_COMPILE = "-D_GNU_SOURCE";
+
+  patches = [
+    ./ubuntu-0.17-9.patch
+  ];
+
+  preBuild = let
+    srcdir = if buildClient then "finger" else "fingerd";
+  in ''
+    cd ${srcdir}
+  '';
+
+  preInstall = let
+    bindir = if buildClient then "bin" else "sbin";
+    mandir = if buildClient then "man/man1" else "man/man8";
+  in ''
+    mkdir -p $out/${bindir} $out/${mandir}
+  '';
+
+  meta = with lib; {
+    description =
+      if buildClient
+      then "User information lookup program"
+      else "Remote user information server";
+    platforms = platforms.linux;
+    license = licenses.bsdOriginal;
+    mainProgram = "finger";
+  };
+}
+# TODO: multiple outputs (manpage)
diff --git a/nixpkgs/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch b/nixpkgs/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch
new file mode 100644
index 000000000000..24decb60281f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch
@@ -0,0 +1,261 @@
+--- bsd-finger-0.17.orig/finger/finger.1
++++ bsd-finger-0.17/finger/finger.1
+@@ -169,16 +169,14 @@
+ must be able to see the
+ .Pa .nofinger
+ file. This generally means that the home directory containing the file
+-must have the other-users-execute bit set (o+w). See
++must have the other-users-execute bit set (o+x). See
+ .Xr chmod 1 .
+ If you use this feature for privacy, please test it with ``finger
+ @localhost'' before relying on it, just in case.
+ .It ~/.plan
+ .It ~/.project
+-.It ~/.pgp
++.It ~/.pgpkey
+ These files are printed as part of a long-format request. The
+-.Pa .project
+-file is limited to one line; the
+ .Pa .plan
+ file may be arbitrarily long.
+ .El
+--- bsd-finger-0.17.orig/finger/finger.c
++++ bsd-finger-0.17/finger/finger.c
+@@ -77,7 +77,7 @@
+ #include "../version.h"
+ 
+ static void loginlist(void);
+-static void userlist(int argc, char *argv[]);
++static int userlist(int argc, char *argv[]);
+ 
+ int lflag, pplan;
+ static int sflag, mflag;
+@@ -92,6 +92,7 @@
+ 
+ int main(int argc, char *argv[]) {
+ 	int ch;
++	int err = 0;
+ 	struct sockaddr_in sin;
+ 	socklen_t slen = sizeof(sin);
+ 
+@@ -159,7 +160,7 @@
+ 		}
+ 	} 
+ 	else {
+-		userlist(argc, argv);
++		err = userlist(argc, argv);
+ 		/*
+ 		 * Assign explicit "large" format if names given and -s not
+ 		 * explicitly stated.  Force the -l AFTER we get names so any
+@@ -172,7 +173,7 @@
+ 		if (lflag) lflag_print();
+ 		else sflag_print();
+ 	}
+-	return 0;
++	return err;
+ }
+ 
+ /* Returns 1 if .nofinger is found and enable_nofinger is set. */
+@@ -181,10 +182,16 @@
+ check_nofinger(struct passwd *pw)
+ {
+ 	if (enable_nofinger) {
+-		char path[PATH_MAX];
+ 		struct stat tripe;
+-		snprintf(path, sizeof(path), "%s/.nofinger", pw->pw_dir);
+-		if (stat(path, &tripe)==0) {
++		int ret;
++		char *path;
++		if (asprintf(&path, "%s/.nofinger", pw->pw_dir) < 0) {
++			eprintf("finger: Out of space.\n");
++			exit(1);
++		}
++		ret = stat(path, &tripe);
++		free(path);
++		if (!ret) {
+ 			return 1;
+ 		}
+ 	}
+@@ -264,10 +271,11 @@
+ 
+ }
+ 
+-static void
++static int
+ userlist(int argc, char *argv[])
+ {
+ 	int i;
++	int err = 0;
+ 	PERSON *pn;
+ 	PERSON *nethead, **nettail;
+ 	struct utmp *uptr;
+@@ -297,13 +305,13 @@
+ 
+ 	/* handle network requests */
+ 	for (pn = nethead; pn; pn = pn->next) {
+-		netfinger(pn->name);
++		err |= netfinger(pn->name);
+ 		if (pn->next || entries)
+ 			xputc('\n');
+ 	}
+ 
+ 	if (entries == 0)
+-		return;
++		return err;
+ 
+ 	/*
+ 	 * Scan thru the list of users currently logged in, saving
+@@ -331,4 +339,6 @@
+ 		enter_lastlog(pn);
+ 	}
+ 	endutent();
++
++	return err;
+ }
+--- bsd-finger-0.17.orig/finger/finger.h
++++ bsd-finger-0.17/finger/finger.h
+@@ -92,7 +92,7 @@
+ void enter_where(struct utmp *ut, PERSON *pn);
+ void enter_lastlog(PERSON *pn);
+ int match(struct passwd *pw, const char *user);
+-void netfinger(const char *name);
++int netfinger(const char *name);
+ const char *prphone(const char *num);
+ 
+ #ifndef DAYSPERNYEAR
+--- bsd-finger-0.17.orig/finger/lprint.c
++++ bsd-finger-0.17/finger/lprint.c
+@@ -48,7 +48,7 @@
+ #include <sys/types.h>
+ #include <sys/file.h>
+ #include <sys/stat.h>
+-#include <sys/time.h>
++#include <time.h>
+ #include "finger.h"
+ 
+ static void lprint(PERSON *pn);
+@@ -100,7 +100,7 @@
+ 	 *	office, office phone, home phone if available
+ 	 */
+ 	xprintf("Login: %-15s\t\t\tName: %s\nDirectory: %-25s",
+-		pn->name, pn->realname, pn->dir);
++		pn->name, pn->realname ? pn->realname : "", pn->dir);
+ 	xprintf("\tShell: %-s\n", *pn->shell ? pn->shell : _PATH_BSHELL);
+ 
+ 	/*
+--- bsd-finger-0.17.orig/finger/net.c
++++ bsd-finger-0.17/finger/net.c
+@@ -51,7 +51,7 @@
+ #include <ctype.h>
+ #include "finger.h"
+ 
+-void netfinger(const char *name) {
++int netfinger(const char *name) {
+ 	register FILE *fp;
+ 	struct in_addr defaddr;
+ 	register int c, sawret, ateol;
+@@ -62,7 +62,7 @@
+ 	char *alist[1], *host;
+ 
+ 	host = strrchr(name, '@');
+-	if (!host) return;
++	if (!host) return 1;
+ 	*host++ = '\0';
+ 
+ 	memset(&sn, 0, sizeof(sn));
+@@ -70,7 +70,7 @@
+ 	sp = getservbyname("finger", "tcp");
+ 	if (!sp) {
+ 		eprintf("finger: tcp/finger: unknown service\n");
+-		return;
++		return 1;
+ 	}
+ 	sn.sin_port = sp->s_port;
+ 
+@@ -78,7 +78,7 @@
+ 	if (!hp) {
+ 		if (!inet_aton(host, &defaddr)) {
+ 			eprintf("finger: unknown host: %s\n", host);
+-			return;
++			return 1;
+ 		}
+ 		def.h_name = host;
+ 		def.h_addr_list = alist;
+@@ -96,7 +96,7 @@
+ 
+ 	if ((s = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) {
+ 		eprintf("finger: socket: %s\n", strerror(errno));
+-		return;
++		return 1;
+ 	}
+ 
+ 	/* print hostname before connecting, in case it takes a while */
+@@ -104,7 +104,7 @@
+ 	if (connect(s, (struct sockaddr *)&sn, sizeof(sn)) < 0) {
+ 		eprintf("finger: connect: %s\n", strerror(errno));
+ 		close(s);
+-		return;
++		return 1;
+ 	}
+ 
+ 	/* -l flag for remote fingerd  */
+@@ -128,7 +128,7 @@
+ 	if (!fp) {
+ 		eprintf("finger: fdopen: %s\n", strerror(errno));
+ 		close(s);
+-		return;
++		return 1;
+ 	}
+ 
+ 	sawret = 0;
+@@ -152,4 +152,6 @@
+ 	}
+ 	if (!ateol) xputc('\n');
+ 	fclose(fp);
++
++	return 0;
+ }
+--- bsd-finger-0.17.orig/finger/sprint.c
++++ bsd-finger-0.17/finger/sprint.c
+@@ -40,7 +40,7 @@
+ #endif /* not lint */
+ 
+ #include <sys/types.h>
+-#include <sys/time.h>
++#include <time.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+--- bsd-finger-0.17.orig/finger/util.c
++++ bsd-finger-0.17/finger/util.c
+@@ -64,7 +64,7 @@
+ 	struct stat sb;
+ 
+ 	/* No device for X console. Utmp entry by XDM login (":0"). */
+-	if (w->tty[0] == ':') {
++	if (strchr(w->tty, ':')) {
+ 		w->idletime = 0;  /* would be nice to have it emit ??? */
+ 		w->writable = 0;
+ 		return;
+@@ -109,9 +109,8 @@
+ 	 * fields[3] -> homephone
+ 	 */
+ 	nfields = 0;
+-	for (p = strtok(bp, ","); p; p = strtok(NULL, ",")) {
+-		if (*p==0) p = NULL;  // skip empties
+-		if (nfields < 4) fields[nfields++] = p;
++	while ((p = strsep(&bp, ","))) {
++		if (nfields < 4) fields[nfields++] = *p ? p : NULL;
+ 	}
+ 	while (nfields<4) fields[nfields++] = NULL;
+ 
+@@ -150,6 +149,9 @@
+ 
+ 		pn->realname = rname;
+ 	}
++	else {
++		pn->realname = NULL;
++	}
+ 
+ 	pn->office =      fields[1] ? strdup(fields[1]) : NULL;
+ 	pn->officephone = fields[2] ? strdup(fields[2]) : NULL;
diff --git a/nixpkgs/pkgs/tools/networking/bukubrow/default.nix b/nixpkgs/pkgs/tools/networking/bukubrow/default.nix
new file mode 100644
index 000000000000..8cd005a120aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bukubrow/default.nix
@@ -0,0 +1,49 @@
+{ lib, rustPlatform, fetchFromGitHub, sqlite }: let
+
+manifest = {
+  description = "Bukubrow extension host application";
+  name = "com.samhh.bukubrow";
+  path = "@out@/bin/bukubrow";
+  type = "stdio";
+};
+
+in rustPlatform.buildRustPackage rec {
+  pname = "bukubrow-host";
+  version = "5.4.0";
+
+  src = fetchFromGitHub {
+    owner = "SamHH";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xz5Agsm+ATQXXgpPGN4EQ00i1t8qUlrviNHauVdCu4U=";
+  };
+
+  cargoSha256 = "sha256-mH76ODPKlKDEK9ckThPnL5Ar7p1l1gNd7zXfesLZlBM=";
+
+  buildInputs = [ sqlite ];
+
+  passAsFile = [ "firefoxManifest" "chromeManifest" ];
+  firefoxManifest = builtins.toJSON (manifest // {
+    allowed_extensions = [ "bukubrow@samhh.com" ];
+  });
+  chromeManifest = builtins.toJSON (manifest // {
+    allowed_origins = [ "chrome-extension://ghniladkapjacfajiooekgkfopkjblpn/" ];
+  });
+  postBuild = ''
+    substituteAll $firefoxManifestPath firefox.json
+    substituteAll $chromeManifestPath chrome.json
+  '';
+  postInstall = ''
+    install -Dm0644 firefox.json $out/lib/mozilla/native-messaging-hosts/com.samhh.bukubrow.json
+    install -Dm0644 chrome.json $out/etc/chromium/native-messaging-hosts/com.samhh.bukubrow.json
+  '';
+
+  meta = with lib; {
+    description = "A WebExtension for Buku, a command-line bookmark manager";
+    homepage = "https://github.com/SamHH/bukubrow-host";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ infinisil ];
+    mainProgram = "bukubrow";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/bully/default.nix b/nixpkgs/pkgs/tools/networking/bully/default.nix
new file mode 100644
index 000000000000..3b2f62281ef1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bully/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, libpcap }:
+
+stdenv.mkDerivation rec {
+  pname = "bully";
+  version = "1.4-00";
+
+  src = fetchFromGitHub {
+    owner = "kimocoder";
+    repo = "bully";
+    rev = version;
+    sha256 = "1n2754a5z44g414a0hj3cmi9q5lwnzyvmvzskrj2nci8c8m2kgnf";
+  };
+
+  buildInputs = [ libpcap ];
+
+  enableParallelBuilding = true;
+
+  sourceRoot = "${src.name}/src";
+
+  installPhase = ''
+    install -Dm555 -t $out/bin bully
+    install -Dm444 -t $out/share/doc/${pname} ../*.md
+  '';
+
+  meta = with lib; {
+    description = "Retrieve WPA/WPA2 passphrase from a WPS enabled access point";
+    homepage = "https://github.com/kimocoder/bully";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = platforms.linux;
+    mainProgram = "bully";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/burpsuite/default.nix b/nixpkgs/pkgs/tools/networking/burpsuite/default.nix
new file mode 100644
index 000000000000..02d0a4ab77c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/burpsuite/default.nix
@@ -0,0 +1,89 @@
+{ lib, fetchurl, jdk, buildFHSEnv, unzip, makeDesktopItem, proEdition ? false }:
+let
+  version = "2023.10.2.4";
+
+  product = if proEdition then {
+    productName = "pro";
+    productDesktop = "Burp Suite Professional Edition";
+    hash = "sha256-H5/nxVvAoGzRIAOchv9tAYyFgrodh7XugCTn2oUV9Tw=";
+  } else {
+    productName = "community";
+    productDesktop = "Burp Suite Community Edition";
+    hash = "sha256-en+eay+XL09Vk6H011fYvxGluMAndedtqCo4dQZvbBM=";
+  };
+
+  src = fetchurl {
+    name = "burpsuite.jar";
+    urls = [
+      "https://portswigger-cdn.net/burp/releases/download?product=${product.productName}&version=${version}&type=Jar"
+      "https://portswigger.net/burp/releases/download?product=${product.productName}&version=${version}&type=Jar"
+      "https://web.archive.org/web/https://portswigger.net/burp/releases/download?product=${product.productName}&version=${version}&type=Jar"
+    ];
+    hash = product.hash;
+  };
+
+  pname = "burpsuite";
+  description = "An integrated platform for performing security testing of web applications";
+  desktopItem = makeDesktopItem {
+    name = "burpsuite";
+    exec = pname;
+    icon = pname;
+    desktopName = product.productDesktop;
+    comment = description;
+    categories = [ "Development" "Security" "System" ];
+  };
+
+in
+buildFHSEnv {
+  inherit pname version;
+
+  runScript = "${jdk}/bin/java -jar ${src}";
+
+  targetPkgs = pkgs: with pkgs; [
+    alsa-lib
+    at-spi2-core
+    cairo
+    cups
+    dbus
+    expat
+    glib
+    gtk3
+    libdrm
+    libudev0-shim
+    libxkbcommon
+    mesa.drivers
+    nspr
+    nss
+    pango
+    xorg.libX11
+    xorg.libxcb
+    xorg.libXcomposite
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXrandr
+  ];
+
+  extraInstallCommands = ''
+    mkdir -p "$out/share/pixmaps"
+    ${lib.getBin unzip}/bin/unzip -p ${src} resources/Media/icon64${product.productName}.png > "$out/share/pixmaps/burpsuite.png"
+    cp -r ${desktopItem}/share/applications $out/share
+  '';
+
+  meta = with lib; {
+    inherit description;
+    longDescription = ''
+      Burp Suite is an integrated platform for performing security testing of web applications.
+      Its various tools work seamlessly together to support the entire testing process, from
+      initial mapping and analysis of an application's attack surface, through to finding and
+      exploiting security vulnerabilities.
+    '';
+    homepage = "https://portswigger.net/burp/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.unfree;
+    platforms = jdk.meta.platforms;
+    hydraPlatforms = [ ];
+    maintainers = with maintainers; [ arcayr bennofs ];
+    mainProgram = "burpsuite";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bwm-ng/default.nix b/nixpkgs/pkgs/tools/networking/bwm-ng/default.nix
new file mode 100644
index 000000000000..cfe0d4176a6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bwm-ng/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, autoreconfHook
+, fetchurl
+, fetchpatch
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bwm-ng";
+  version = "0.6.3";
+
+  src = fetchurl {
+    url = "https://www.gropp.org/bwm-ng/${pname}-${version}.tar.gz";
+    sha256 = "0ikzyvnb73msm9n7ripg1dsw9av1i0c7q2hi2173xsj8zyv559f1";
+  };
+
+  patches = [
+    # Pull upstream fix for ncurses-6.3 support.
+    (fetchpatch {
+      name  = "ncurses-6.3.patch";
+      url = "https://github.com/vgropp/bwm-ng/commit/6a2087db6cc7ac5b5f667fcd17c262c079e8dcf2.patch";
+      sha256 = "1l5dii9d52v0x0sq458ybw7m9p8aan2vl94gwx5s8mgxsnbcmzzx";
+      # accidentally committed changes
+      excludes = [ "config.h.in~" "configure.in" "configure~" ];
+     })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    ncurses
+  ];
+
+  meta = with lib; {
+    description = "A small and simple console-based live network and disk io bandwidth monitor";
+    homepage = "http://www.gropp.org/?id=projects&sub=bwm-ng";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+    longDescription = ''
+      bwm-ng supports:
+       - /proc/net/dev, netstat, getifaddr, sysctl, kstat, /proc/diskstats /proc/partitions, IOKit,
+         devstat and libstatgrab
+       - unlimited number of interfaces/devices
+       - interfaces/devices are added or removed dynamically from list
+       - white-/blacklist of interfaces/devices
+       - output of KB/s, Kb/s, packets, errors, average, max and total sum
+       - output in curses, plain console, CSV or HTML
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cadaver/default.nix b/nixpkgs/pkgs/tools/networking/cadaver/default.nix
new file mode 100644
index 000000000000..e164e5bf433a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cadaver/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchurl
+, neon
+, pkg-config
+, zlib
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cadaver";
+  version = "0.24";
+
+  src = fetchurl {
+    url = "https://notroj.github.io/cadaver/cadaver-${version}.tar.gz";
+    hash = "sha256-Rs/y8+vTLNMoNoEspHvMdTU/wr51fwk9qIwN2PEP1fY=";
+  };
+
+  configureFlags = [
+    "--with-ssl"
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    neon
+    openssl
+    zlib
+  ];
+
+  meta = with lib; {
+    description = "A command-line WebDAV client";
+    homepage = "https://notroj.github.io/cadaver/";
+    changelog = "https://github.com/notroj/cadaver/blob/${version}/NEWS";
+    maintainers = with maintainers; [ ianwookim ];
+    license = licenses.gpl2Plus;
+    platforms = with platforms; linux ++ freebsd ++ openbsd;
+    mainProgram = "cadaver";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/calendar-cli/default.nix b/nixpkgs/pkgs/tools/networking/calendar-cli/default.nix
new file mode 100644
index 000000000000..45b3afbf895e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/calendar-cli/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, python3
+, fetchFromGitHub
+, nixosTests
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "calendar-cli";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "tobixen";
+    repo = "calendar-cli";
+    rev = "v${version}";
+    hash = "sha256-w35ySLnfxXZR/a7BrPLYqXs2kqkuYhh5PcgNxJqjDtE=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    icalendar
+    caldav
+    pytz
+    pyyaml
+    tzlocal
+    click
+    six
+  ];
+
+  # tests require networking
+  doCheck = false;
+
+  passthru.tests = {
+    inherit (nixosTests) radicale;
+  };
+
+  meta = with lib; {
+    description = "Simple command-line CalDav client";
+    homepage = "https://github.com/tobixen/calendar-cli";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cantoolz/default.nix b/nixpkgs/pkgs/tools/networking/cantoolz/default.nix
new file mode 100644
index 000000000000..1f9308b741b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cantoolz/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cantoolz";
+  version = "3.7.0";
+
+  src = fetchFromGitHub {
+    owner = "CANToolz";
+    repo = "CANToolz";
+    rev = "v${version}";
+    sha256 = "sha256-0ROWx1CsKtjxmbCgPYZpvr37VKsEsWCwMehf0/0/cnY=";
+  };
+
+  patches = [
+    (fetchpatch {
+      # Import Iterable from collections.abc
+      url = "https://github.com/CANToolz/CANToolz/commit/9e818946716a744b3c7356f248e24ea650791d1f.patch";
+      hash = "sha256-BTQ0Io2RF8WpWlLoYfBj8IhL92FRR8ustGClt28/R8c=";
+    })
+    (fetchpatch {
+      # Replace time.clock() which was removed, https://github.com/CANToolz/CANToolz/pull/30
+      url = "https://github.com/CANToolz/CANToolz/pull/30/commits/d75574523d3b273c40fb714532c4de27f9e6dd3e.patch";
+      sha256 = "0g91hywg5q6f2qk1awgklywigclrbhh6a6mwd0kpbkk1wawiiwbc";
+    })
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    flask
+    pyserial
+    mido
+    numpy
+    bitstring
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    "test_process"
+    # Sandbox issue
+    "test_server"
+  ];
+
+  pythonImportsCheck = [
+    "cantoolz"
+  ];
+
+  meta = with lib; {
+    description = "Black-box CAN network analysis framework";
+    longDescription = ''
+      CANToolz is a framework for analysing CAN networks and devices. It
+      provides multiple modules that can be chained using CANToolz's pipe
+      system and used by security researchers, automotive/OEM security
+      testers in black-box analysis.
+
+      CANToolz can be used for ECU discovery, MitM testing, fuzzing, brute
+      forcing, scanning or R&D, testing and validation. More can easily be
+      implemented with a new module.
+    '';
+    homepage = "https://github.com/CANToolz/CANToolz";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/carddav-util/default.nix b/nixpkgs/pkgs/tools/networking/carddav-util/default.nix
new file mode 100644
index 000000000000..e788de13df81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/carddav-util/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages, makeWrapper }:
+
+stdenv.mkDerivation {
+  pname = "carddav";
+  version = "0.1-2014-02-26";
+
+  src = fetchFromGitHub {
+    owner = "ljanyst";
+    repo = "carddav-util";
+    rev = "53b181faff5f154bcd180467dd04c0ce69405564";
+    sha256 = "sha256-9iRCNDC0FJ+JD2Hk5TC0w4QMjJ9mMtct5WIA35xTGTg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  propagatedBuildInputs = with python3Packages; [ requests vobject lxml ];
+
+  strictDeps = true;
+
+  doCheck = false; # no test
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src/carddav-util.py $out/bin
+
+    pythondir="$out/lib/${python3Packages.python.sitePackages}"
+    mkdir -p "$pythondir"
+    cp $src/carddav.py "$pythondir"
+  '';
+
+  preFixup = ''
+    wrapProgram "$out/bin/carddav-util.py" \
+      --prefix PYTHONPATH : "$PYTHONPATH:$(toPythonPath $out)" \
+      --prefix PATH : "$prefix/bin:$PATH"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ljanyst/carddav-util";
+    description = "A CardDAV import/export utility";
+    platforms = platforms.unix;
+    license = licenses.isc;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cassowary/default.nix b/nixpkgs/pkgs/tools/networking/cassowary/default.nix
new file mode 100644
index 000000000000..2fa92e073076
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cassowary/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "cassowary";
+  version = "0.16.0";
+
+  src = fetchFromGitHub {
+    owner = "rogerwelin";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-wRpITbxtn2sHw7kkQ8rnCPQCU0JS6smdQLq1Z/RyeHo=";
+  };
+
+  vendorHash = "sha256-b77Sje5OsysTRRbzgdLnTlLLyLIACjD4c/oS9zyI0d8=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/rogerwelin/cassowary";
+    description = "Modern cross-platform HTTP load-testing tool written in Go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hugoreeves ];
+    mainProgram = "cassowary";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/castnow/default.nix b/nixpkgs/pkgs/tools/networking/castnow/default.nix
new file mode 100644
index 000000000000..50bea652eef6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/castnow/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "castnow";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "xat";
+    repo = "castnow";
+    rev = "v${version}";
+    hash = "sha256-vAjeDPH+Lu/vj3GhwytXqpbSkg5hKpXsMRNV+8TUeio=";
+  };
+
+  npmDepsHash = "sha256-1cLuti3JHpMHn1sno8gE8Ko+eoUWCqFUfIDIBAS+M34=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "Command-line Chromecast player";
+    homepage = "commandline chromecast player";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ ];
+    mainProgram = "castnow";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cbftp/default.nix b/nixpkgs/pkgs/tools/networking/cbftp/default.nix
new file mode 100644
index 000000000000..5709acb02ddb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cbftp/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchurl
+, ncurses
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cbftp";
+  version = "1173";
+
+  src = fetchurl {
+    url = "https://cbftp.eu/${pname}-r${version}.tar.gz";
+    hash = "sha256-DE6fnLzWsx6Skz2LRJAaijjIqrYFB8/HPp45P5CcEc8=";
+  };
+
+  buildInputs = [
+    ncurses
+    openssl
+  ];
+
+  dontConfigure = true;
+
+  makeFlags = lib.optional stdenv.isDarwin "OPTFLAGS=-O0";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D bin/* -t $out/bin/
+    install -D API README -t $out/share/doc/${pname}/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://cbftp.eu/";
+    description = " An advanced multi-purpose FTP/FXP client";
+    longDescription = ''
+      Cbftp is an advanced multi-purpose FTP/FXP client that focuses on
+      efficient large-scale data spreading, while also supporting most regular
+      FTP/FXP use cases in a modern way. It runs in a terminal and provides a
+      semi-graphical user interface through ncurses.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cdpr/default.nix b/nixpkgs/pkgs/tools/networking/cdpr/default.nix
new file mode 100644
index 000000000000..5e86d58cfb31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cdpr/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, libpcap }:
+
+stdenv.mkDerivation rec {
+  pname = "cdpr";
+  version = "2.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}/${version}/${pname}-${version}.tgz";
+    sha256 = "1idyvyafkk0ifcbi7mc65b60qia6hpsdb6s66j4ggqp7if6vblrj";
+  };
+  patches = [
+    # Pull fix pending upstream inclusion for gcc-10 compatibility:
+    #  https://sourceforge.net/p/cdpr/bugs/3/
+    (fetchurl {
+      name = "fno-common";
+      url = "https://sourceforge.net/p/cdpr/bugs/3/attachment/0001-cdpr-fix-build-on-gcc-10-fno-common.patch";
+      sha256 = "023cvkpc4ry1pbjd91kkwj4af3hia0layk3fp8q40vh6mbr14pnp";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile --replace 'gcc' '"$$CC"'
+  '';
+
+  buildInputs = [ libpcap ];
+
+  installPhase = ''
+    install -Dm755 cdpr $out/bin/cdpr
+  '';
+
+  meta = with lib; {
+    description = "Cisco Discovery Protocol Reporter";
+    homepage = "https://cdpr.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.sgo ];
+    mainProgram = "cdpr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cfspeedtest/default.nix b/nixpkgs/pkgs/tools/networking/cfspeedtest/default.nix
new file mode 100644
index 000000000000..f6b3c59d5864
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cfspeedtest/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cfspeedtest";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "code-inflation";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-sGBEVmiVa9jWlirtmP+lhXNVN2X9Pv/oS9KhiuaOMl8=";
+  };
+
+  cargoHash = "sha256-/Ajlo6nr36GF5jyyuKdQe5HajETMsuEWbXxaszrcj0Y=";
+
+  meta = with lib; {
+    description = "Unofficial CLI for speed.cloudflare.com";
+    homepage = "https://github.com/code-inflation/cfspeedtest";
+    license = with licenses; [ mit ];
+    broken = stdenv.isDarwin;
+    maintainers = with maintainers; [ colemickens ];
+    mainProgram = "cfspeedtest";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/changetower/default.nix b/nixpkgs/pkgs/tools/networking/changetower/default.nix
new file mode 100644
index 000000000000..f5d63bb4336a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/changetower/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "changetower";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "Dc4ts";
+    repo = "ChangeTower";
+    rev = "v${version}";
+    hash = "sha256-P20kzsFTR6kVWUD6mt3T3sge/ioIYgeREfy40oxlDBU=";
+  };
+
+  vendorHash = "sha256-eA2gReP2PbCPHAQGjC/4CvalfczyCAuNNlS3zOHUT0E=";
+
+  meta = with lib; {
+    description = "Tools to watch for webppage changes";
+    homepage = "https://github.com/Dc4ts/ChangeTower";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "ChangeTower";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/chaos/default.nix b/nixpkgs/pkgs/tools/networking/chaos/default.nix
new file mode 100644
index 000000000000..3e66ddac7b6c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/chaos/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "chaos";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "chaos-client";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-TpzTDNkfwL2CgEZwk2b5Zojhh61hXBm3PgjLkav6B3M=";
+  };
+
+  vendorHash = "sha256-Zu3TxBFTrXkAOmtUELjSdyzlE6CIr4SUBSdvaRnKy+k=";
+
+  subPackages = [
+    "cmd/chaos/"
+  ];
+
+  meta = with lib; {
+    description = "Tool to communicate with Chaos DNS API";
+    homepage = "https://github.com/projectdiscovery/chaos-client";
+    changelog = "https://github.com/projectdiscovery/chaos-client/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "chaos";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/checkip/default.nix b/nixpkgs/pkgs/tools/networking/checkip/default.nix
new file mode 100644
index 000000000000..180c08702901
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/checkip/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "checkip";
+  version = "0.46.1";
+
+  src = fetchFromGitHub {
+    owner = "jreisinger";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-U0jHwKmGHpaHSiOYDeYCXiufw0JjzAmhBnINmFsqOJo=";
+  };
+
+  vendorHash = "sha256-9/z1mtZGqrvcvq8cWBpYN7kaPHaPqtyMwMNxuRRP4Cs=";
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  # Requires network
+  doCheck = false;
+
+  meta = with lib; {
+    description = "CLI tool that checks an IP address using various public services";
+    homepage = "https://github.com/jreisinger/checkip";
+    changelog = "https://github.com/jreisinger/checkip/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "checkip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/chisel/default.nix b/nixpkgs/pkgs/tools/networking/chisel/default.nix
new file mode 100644
index 000000000000..d5a54ba15e92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/chisel/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "chisel";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "jpillora";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-hZm0dVDwX6cHiN0TvAcHCWbMAf+k9CCQfC9nlV2vfN4=";
+  };
+
+  vendorHash = "sha256-i6Fb+jSP6LzZoPTHhjQi3YbPBWY6OmsORV8ATcLrHG0=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/jpillora/chisel/share.BuildVersion=${version}"
+  ];
+
+  # Tests require access to the network
+  doCheck = false;
+
+  meta = with lib; {
+    description = "TCP/UDP tunnel over HTTP";
+    longDescription = ''
+      Chisel is a fast TCP/UDP tunnel, transported over HTTP, secured via
+      SSH. Single executable including both client and server. Chisel is
+      mainly useful for passing through firewalls, though it can also be
+      used to provide a secure endpoint into your network.
+    '';
+    homepage = "https://github.com/jpillora/chisel";
+    changelog = "https://github.com/jpillora/chisel/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/chrony/default.nix b/nixpkgs/pkgs/tools/networking/chrony/default.nix
new file mode 100644
index 000000000000..74132e792447
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/chrony/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv, fetchurl, pkg-config
+, gnutls, libedit, nspr, nss, readline, texinfo
+, libcap, libseccomp, pps-tools
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "chrony";
+  version = "4.5";
+
+  src = fetchurl {
+    url = "https://download.tuxfamily.org/chrony/${pname}-${version}.tar.gz";
+    hash = "sha256-Gf4dn0Zk1EWmmpbHHo/bYLzY3yTHPROG4CKH9zZq1CI=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gnutls libedit nspr nss readline texinfo ]
+    ++ lib.optionals stdenv.isLinux [ libcap libseccomp pps-tools ];
+
+  configureFlags = [
+    "--enable-ntp-signd"
+    "--sbindir=$(out)/bin"
+    "--chronyrundir=/run/chrony"
+  ] ++ lib.optional stdenv.isLinux "--enable-scfilter";
+
+  patches = [
+    # Cleanup the installation script
+    ./makefile.patch
+  ];
+
+  postPatch = ''
+    patchShebangs test
+  '';
+
+  hardeningEnable = [ "pie" ];
+
+  passthru.tests = { inherit (nixosTests) chrony chrony-ptp; };
+
+  meta = with lib; {
+    description = "Sets your computer's clock from time servers on the Net";
+    homepage = "https://chrony.tuxfamily.org/";
+    license = licenses.gpl2;
+    platforms = with platforms; linux ++ freebsd ++ openbsd;
+    maintainers = with maintainers; [ fpletz thoughtpolice ];
+
+    longDescription = ''
+      Chronyd is a daemon which runs in background on the system. It obtains
+      measurements via the network of the system clock’s offset relative to
+      time servers on other systems and adjusts the system time accordingly.
+      For isolated systems, the user can periodically enter the correct time by
+      hand (using Chronyc). In either case, Chronyd determines the rate at
+      which the computer gains or loses time, and compensates for this. Chronyd
+      implements the NTP protocol and can act as either a client or a server.
+
+      Chronyc provides a user interface to Chronyd for monitoring its
+      performance and configuring various settings. It can do so while running
+      on the same computer as the Chronyd instance it is controlling or a
+      different computer.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/chrony/makefile.patch b/nixpkgs/pkgs/tools/networking/chrony/makefile.patch
new file mode 100644
index 000000000000..be15ccb5cb22
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/chrony/makefile.patch
@@ -0,0 +1,23 @@
+diff --git a/Makefile.in b/Makefile.in
+index ef100a4..47f54f4 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -23,7 +23,7 @@
+ 
+ SYSCONFDIR = @SYSCONFDIR@
+ BINDIR = @BINDIR@
+-SBINDIR = @SBINDIR@
++SBINDIR = @BINDIR@
+ LOCALSTATEDIR = @LOCALSTATEDIR@
+ CHRONYVARDIR = @CHRONYVARDIR@
+ DESTDIR =
+@@ -86,9 +86,7 @@ getdate :
+ 
+ install: chronyd chronyc
+ 	[ -d $(DESTDIR)$(SYSCONFDIR) ] || mkdir -p $(DESTDIR)$(SYSCONFDIR)
+-	[ -d $(DESTDIR)$(SBINDIR) ] || mkdir -p $(DESTDIR)$(SBINDIR)
+ 	[ -d $(DESTDIR)$(BINDIR) ] || mkdir -p $(DESTDIR)$(BINDIR)
+-	[ -d $(DESTDIR)$(CHRONYVARDIR) ] || mkdir -p $(DESTDIR)$(CHRONYVARDIR)
+ 	if [ -f $(DESTDIR)$(SBINDIR)/chronyd ]; then rm -f $(DESTDIR)$(SBINDIR)/chronyd ; fi
+ 	if [ -f $(DESTDIR)$(BINDIR)/chronyc ]; then rm -f $(DESTDIR)$(BINDIR)/chronyc ; fi
+ 	cp chronyd $(DESTDIR)$(SBINDIR)/chronyd
diff --git a/nixpkgs/pkgs/tools/networking/cjdns/Cargo.lock b/nixpkgs/pkgs/tools/networking/cjdns/Cargo.lock
new file mode 100644
index 000000000000..396dde612905
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cjdns/Cargo.lock
@@ -0,0 +1,714 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b602bfe940d21c130f3895acd65221e8a61270debe89d628b9cb4e3ccb8569b"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
+name = "bindgen"
+version = "0.55.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75b13ce559e6433d360c26305643803cb52cfbabbc2b9c47ce04a58493dfb443"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "cfg-if 0.1.10",
+ "clang-sys",
+ "clap",
+ "env_logger",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "which",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "cbindgen"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df6a11bba1d7cab86c166cecf4cf8acd7d02b7b65924d81b33d27197f22ee35"
+dependencies = [
+ "clap",
+ "heck",
+ "indexmap",
+ "log",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "syn",
+ "tempfile",
+ "toml",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef611cc68ff783f18535d77ddd080185275713d852c4f5cbb6122c462a7a825c"
+
+[[package]]
+name = "cexpr"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cjdns_sys"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "bindgen",
+ "cbindgen",
+ "cc",
+ "sodiumoxide",
+ "thiserror",
+]
+
+[[package]]
+name = "cjdroute"
+version = "0.1.0"
+dependencies = [
+ "cjdns_sys",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0659001ab56b791be01d4b729c44376edc6718cf389a502e579b77b758f3296c"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "hashbrown"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
+
+[[package]]
+name = "heck"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "humantime"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
+dependencies = [
+ "quick-error",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743"
+
+[[package]]
+name = "libloading"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1090080fe06ec2648d0da3881d9453d97e71a45f00eb179af7fdd7e3f686fdb0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi",
+]
+
+[[package]]
+name = "libsodium-sys"
+version = "0.2.6"
+source = "git+https://github.com/cjdelisle/sodiumoxide?branch=cjdns#3aa7e8e21b9cd61ad64f4a0ed125d5b1af2cf38d"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "walkdir",
+]
+
+[[package]]
+name = "log"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
+dependencies = [
+ "cfg-if 0.1.10",
+]
+
+[[package]]
+name = "makekeys"
+version = "0.1.0"
+dependencies = [
+ "cjdns_sys",
+]
+
+[[package]]
+name = "memchr"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+
+[[package]]
+name = "mkpasswd"
+version = "0.1.0"
+dependencies = [
+ "cjdns_sys",
+]
+
+[[package]]
+name = "nom"
+version = "5.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
+dependencies = [
+ "memchr",
+ "version_check",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "privatetopublic"
+version = "0.1.0"
+dependencies = [
+ "cjdns_sys",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "publictoip6"
+version = "0.1.0"
+dependencies = [
+ "cjdns_sys",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "randombytes"
+version = "0.1.0"
+dependencies = [
+ "cjdns_sys",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "regex"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+ "thread_local",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "shlex"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
+
+[[package]]
+name = "sodiumoxide"
+version = "0.2.6"
+source = "git+https://github.com/cjdelisle/sodiumoxide?branch=cjdns#3aa7e8e21b9cd61ad64f4a0ed125d5b1af2cf38d"
+dependencies = [
+ "libc",
+ "libsodium-sys",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "sybilsim"
+version = "0.1.0"
+dependencies = [
+ "cjdns_sys",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c1e438504729046a5cfae47f97c30d6d083c7d91d94603efdae3477fc070d4c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "rand",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "testcjdroute"
+version = "0.1.0"
+dependencies = [
+ "cjdns_sys",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed"
+
+[[package]]
+name = "walkdir"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "which"
+version = "3.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/nixpkgs/pkgs/tools/networking/cjdns/default.nix b/nixpkgs/pkgs/tools/networking/cjdns/default.nix
new file mode 100644
index 000000000000..85705a27231f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cjdns/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, nodejs
+, which
+, python39
+, libuv
+, util-linux
+, nixosTests
+, libsodium
+, pkg-config
+, substituteAll
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cjdns";
+  version = "21.4";
+
+  src = fetchFromGitHub {
+    owner = "cjdelisle";
+    repo = "cjdns";
+    rev = "cjdns-v${version}";
+    sha256 = "sha256-vI3uHZwmbFqxGasKqgCl0PLEEO8RNEhwkn5ZA8K7bxU=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./system-libsodium.patch;
+      libsodium_include_dir = "${libsodium.dev}/include";
+    })
+  ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "libsodium-sys-0.2.6" = "sha256-yr6wh0njbCFZViLROcqSSoRFj7ZAMYG5lo1g0j75SN0=";
+    };
+  };
+
+  nativeBuildInputs = [
+    which
+    python39
+    nodejs
+    pkg-config
+  ] ++
+    # for flock
+    lib.optional stdenv.isLinux util-linux;
+
+  buildInputs = [
+    libuv
+    libsodium
+  ];
+
+  env.SODIUM_USE_PKG_CONFIG = 1;
+  env.NIX_CFLAGS_COMPILE = toString ([
+    "-O2"
+    "-Wno-error=array-bounds"
+    "-Wno-error=stringop-overflow"
+    "-Wno-error=stringop-truncation"
+  ] ++ lib.optionals (stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.version "11") [
+    "-Wno-error=stringop-overread"
+  ]);
+
+  passthru.tests.basic = nixosTests.cjdns;
+
+  meta = with lib; {
+    homepage = "https://github.com/cjdelisle/cjdns";
+    description = "Encrypted networking for regular people";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = platforms.linux;
+    broken = stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cjdns/system-libsodium.patch b/nixpkgs/pkgs/tools/networking/cjdns/system-libsodium.patch
new file mode 100644
index 000000000000..8b7b535b6a21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cjdns/system-libsodium.patch
@@ -0,0 +1,28 @@
+diff --git a/node_build/make.js b/node_build/make.js
+index 1d0b0fa..b640f31 100644
+--- a/node_build/make.js
++++ b/node_build/make.js
+@@ -254,21 +254,8 @@ Builder.configure({
+ 
+     }).nThen(function (waitFor) {
+ 
+-        const dir = `${builder.config.buildDir}/../..`;
+-        Fs.readdir(dir, waitFor((err, ret) => {
+-            if (err) { throw err; }
+-            ret.forEach((f) => {
+-                if (!/^libsodium-sys-/.test(f)) { return; }
+-                const inclPath = `${dir}/${f}/out/source/libsodium/src/libsodium/include`;
+-                Fs.readdir(inclPath, waitFor((err, ret) => {
+-                    if (foundSodium) { return; }
+-                    if (err && err.code === 'ENOENT') { return; }
+-                    if (err) { throw err; }
+-                    builder.config.includeDirs.push(inclPath);
+-                    foundSodium = true;
+-                }));
+-            });
+-        }));
++        builder.config.includeDirs.push("@libsodium_include_dir@");
++        foundSodium = true;
+ 
+     }).nThen(function (waitFor) {
+ 
diff --git a/nixpkgs/pkgs/tools/networking/cksfv/default.nix b/nixpkgs/pkgs/tools/networking/cksfv/default.nix
new file mode 100644
index 000000000000..2d5a2b533a61
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cksfv/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "cksfv";
+  version = "1.3.15";
+
+  src = fetchurl {
+    url = "https://zakalwe.fi/~shd/foss/cksfv/files/cksfv-${version}.tar.bz2";
+    sha256 = "0k06aq94cn5xp4knjw0p7gz06hzh622ql2xvnrlr3q8rcmdvwwx1";
+  };
+
+  meta = with lib; {
+    homepage = "https://zakalwe.fi/~shd/foss/cksfv/";
+    description = "A tool for verifying files against a SFV checksum file";
+    maintainers = with maintainers; [ ];
+    platforms = platforms.all;
+    license = licenses.gpl2;
+    mainProgram = "cksfv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/clash-meta/default.nix b/nixpkgs/pkgs/tools/networking/clash-meta/default.nix
new file mode 100644
index 000000000000..2ec32960d7fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/clash-meta/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+buildGoModule rec {
+  pname = "clash-meta";
+  version = "1.16.0";
+
+  src = fetchFromGitHub {
+    owner = "MetaCubeX";
+    repo = "Clash.Meta";
+    rev = "v${version}";
+    hash = "sha256-ORyjCYf2OPrSt/juiBk0Gf2Az4XoZipKBWWFXf8nIqE=";
+  };
+
+  vendorHash = "sha256-ySCmHLuMTCxBcAYo7YD8zOpUAa90PQmeLLt+uOn40Pk=";
+
+  # Do not build testing suit
+  excludedPackages = [ "./test" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/Dreamacro/clash/constant.Version=${version}"
+  ];
+
+  tags = [
+    "with_gvisor"
+  ];
+
+  # network required
+  doCheck = false;
+
+  postInstall = ''
+    mv $out/bin/clash $out/bin/clash-meta
+  '';
+
+  meta = with lib; {
+    description = "Another Clash Kernel";
+    homepage = "https://github.com/MetaCubeX/Clash.Meta";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ oluceps ];
+    mainProgram = "clash-meta";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cloud-custodian/default.nix b/nixpkgs/pkgs/tools/networking/cloud-custodian/default.nix
new file mode 100644
index 000000000000..c5e1f7527dac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cloud-custodian/default.nix
@@ -0,0 +1,48 @@
+{ lib, buildPythonApplication, fetchPypi
+, argcomplete
+, boto3
+, botocore
+, certifi
+, python-dateutil
+, jsonpatch
+, jsonschema
+, pyyaml
+, tabulate
+, urllib3
+}:
+
+buildPythonApplication rec {
+  pname = "cloud-custodian";
+  version = "0.8.45.1";
+
+  src = fetchPypi {
+    pname = "c7n";
+    inherit version;
+    sha256 = "0c199gdmpm83xfghrbzp02xliyxiygsnx2fvb35j9qpf37wzzp3z";
+  };
+
+  propagatedBuildInputs = [
+    argcomplete
+    boto3
+    botocore
+    certifi
+    python-dateutil
+    jsonpatch
+    jsonschema
+    pyyaml
+    tabulate
+    urllib3
+  ];
+
+  # Requires tox, many packages, and network access
+  checkPhase = ''
+    $out/bin/custodian --help
+  '';
+
+  meta = with lib; {
+    description = "Rules engine for cloud security, cost optimization, and governance";
+    homepage = "https://cloudcustodian.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bhipple ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cloudflare-warp/default.nix b/nixpkgs/pkgs/tools/networking/cloudflare-warp/default.nix
new file mode 100644
index 000000000000..ee7070d06dda
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cloudflare-warp/default.nix
@@ -0,0 +1,77 @@
+{ stdenv
+, lib
+, fetchurl
+, dpkg
+, autoPatchelfHook
+, makeWrapper
+, copyDesktopItems
+, makeDesktopItem
+, dbus
+, nftables
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cloudflare-warp";
+  version = "2023.3.470";
+
+  src = fetchurl {
+    url = "https://pkg.cloudflareclient.com/pool/jammy/main/c/cloudflare-warp/cloudflare-warp_2023.3.470-1_amd64.deb";
+    hash = "sha256-AYnmisEQKFiEB2iRJifEqRbdzAyBcfrU0ITeUokKLag=";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    autoPatchelfHook
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    dbus
+    stdenv.cc.cc.lib
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "com.cloudflare.WarpCli";
+      desktopName = "Cloudflare Zero Trust Team Enrollment";
+      categories = [ "Utility" "Security" "ConsoleOnly" ];
+      noDisplay = true;
+      mimeTypes = [ "x-scheme-handler/com.cloudflare.warp" ];
+      exec = "warp-cli teams-enroll-token %u";
+      startupNotify = false;
+      terminal = true;
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mv usr $out
+    mv bin $out
+    mv etc $out
+    mv lib/systemd/system $out/lib/systemd/
+    substituteInPlace $out/lib/systemd/system/warp-svc.service \
+      --replace "ExecStart=" "ExecStart=$out"
+    substituteInPlace $out/lib/systemd/user/warp-taskbar.service \
+      --replace "ExecStart=" "ExecStart=$out"
+
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/warp-svc --prefix PATH : ${lib.makeBinPath [ nftables ]}
+  '';
+
+  meta = with lib; {
+    description = "Replaces the connection between your device and the Internet with a modern, optimized, protocol";
+    homepage = "https://pkg.cloudflareclient.com/packages/cloudflare-warp";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [
+      wolfangaukang
+      devpikachu
+    ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cmst/default.nix b/nixpkgs/pkgs/tools/networking/cmst/default.nix
new file mode 100644
index 000000000000..e86ffeed9576
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cmst/default.nix
@@ -0,0 +1,35 @@
+{ mkDerivation, lib, fetchFromGitHub, qmake, qtbase, qttools, gitUpdater }:
+
+mkDerivation rec {
+  pname = "cmst";
+  version = "2023.03.14";
+
+  src = fetchFromGitHub {
+    repo = "cmst";
+    owner = "andrew-bibb";
+    rev = "${pname}-${version}";
+    sha256 = "sha256-yTqPxywPbtxTy1PPG+Mq64u8MrB27fEdmt1B0pn0BVk=";
+  };
+
+  nativeBuildInputs = [ qmake qttools ];
+
+  buildInputs = [ qtbase ];
+
+  postPatch = ''
+    for f in $(find . -name \*.cpp -o -name \*.pri -o -name \*.pro); do
+      substituteInPlace $f --replace /etc $out/etc --replace /usr $out
+    done
+  '';
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "${pname}-";
+  };
+
+  meta = with lib; {
+    description = "QT GUI for Connman with system tray icon";
+    homepage = "https://github.com/andrew-bibb/cmst";
+    maintainers = with maintainers; [ matejc romildo ];
+    platforms = platforms.linux;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cnping/default.nix b/nixpkgs/pkgs/tools/networking/cnping/default.nix
new file mode 100644
index 000000000000..ec3a0e03c288
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cnping/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, libglvnd, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "cnping";
+  version = "unstable-2021-04-04";
+
+  src = fetchFromGitHub {
+    owner = "cntools";
+    repo = "cnping";
+    rev = "6b89363e6b79ecbf612306d42a8ef94a5a2f756a";
+    sha256 = "sha256-E3Wm5or6C4bHq7YoyaEbtDwyd+tDVYUOMeQrprlmL4A=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ libglvnd xorg.libXinerama xorg.libXext xorg.libX11 ];
+
+  # The "linuxinstall" target won't work for us:
+  # it tries to setcap and copy to a FHS directory
+  installPhase = ''
+    mkdir -p $out/{bin,share/man/man1}
+    cp cnping $out/bin/cnping
+    cp cnping.1 $out/share/man/man1/cnping.1
+  '';
+
+  meta = with lib; {
+    description = "Minimal Graphical IPV4 Ping Tool";
+    homepage = "https://github.com/cntools/cnping";
+    license = with licenses; [ mit bsd3 ]; # dual licensed, MIT-x11 & BSD-3-Clause
+    maintainers = with maintainers; [ ckie ];
+    platforms = platforms.linux;
+    mainProgram = "cnping";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cntlm/default.nix b/nixpkgs/pkgs/tools/networking/cntlm/default.nix
new file mode 100644
index 000000000000..45fc56f3ba2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cntlm/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, which}:
+
+stdenv.mkDerivation rec {
+  pname = "cntlm";
+  version = "0.92.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cntlm/${pname}-${version}.tar.gz";
+    sha256 = "1632szz849wasvh5sm6rm1zbvbrkq35k7kcyvx474gyl4h4x2flw";
+  };
+
+  buildInputs = [ which ];
+
+  preConfigure = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace configure --replace "xlc_r gcc" "xlc_r gcc $CC"
+    substitute Makefile Makefile.$CC --replace "CC=gcc" "CC=$CC"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin; cp cntlm $out/bin/;
+    mkdir -p $out/share/; cp COPYRIGHT README VERSION doc/cntlm.conf $out/share/;
+    mkdir -p $out/man/; cp doc/cntlm.1 $out/man/;
+  '';
+
+  meta = with lib; {
+    description = "NTLM/NTLMv2 authenticating HTTP proxy";
+    homepage = "https://cntlm.sourceforge.net/";
+    license = licenses.gpl2;
+    maintainers =
+      [
+        maintainers.qknight
+        maintainers.carlosdagos
+      ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "cntlm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cocom/default.nix b/nixpkgs/pkgs/tools/networking/cocom/default.nix
new file mode 100644
index 000000000000..6ae004de9b3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cocom/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cocom";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "LamdaLamdaLamda";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0sl4ivn95sr5pgw2z877gmhyfc4mk9xr457i5g2i4wqnf2jmy14j";
+  };
+
+  cargoSha256 = "04kj1yj6hhnis3ss0xs4zq8rl71rzn577g8i0wmapkjqzqwg37yb";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "NTP client";
+    homepage = "https://github.com/LamdaLamdaLamda/cocom";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "cocom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/configurable-http-proxy/default.nix b/nixpkgs/pkgs/tools/networking/configurable-http-proxy/default.nix
new file mode 100644
index 000000000000..74d009d3ed1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/configurable-http-proxy/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "configurable-http-proxy";
+  version = "4.5.6";
+
+  src = fetchFromGitHub {
+    owner = "jupyterhub";
+    repo = "configurable-http-proxy";
+    rev = version;
+    hash = "sha256-nj6+GmBw5YSQs23rWVh3qU4jdzRdbPyx43QmZ3LRwn4=";
+  };
+
+  npmDepsHash = "sha256-3HzVI7L1BH9PEBcb7CWWRQqWdSlWiCTo0qqnlSHGn7Y=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/jupyterhub/configurable-http-proxy/blob/${src.rev}/CHANGELOG.md";
+    description = "A configurable-on-the-fly HTTP Proxy";
+    homepage = "https://github.com/jupyterhub/configurable-http-proxy";
+    license = lib.licenses.bsd3;
+    mainProgram = "configurable-http-proxy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/connect/default.nix b/nixpkgs/pkgs/tools/networking/connect/default.nix
new file mode 100644
index 000000000000..408bbbf66708
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/connect/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "connect";
+  version ="1.105";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/gotoh/connect/get/${version}.tar.bz2";
+    sha256 = "00yld6yinc8s4xv3b8kbvzn2f4rja5dmp6ysv3n4847qn4k60dh7";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];      # gcc and/or clang compat
+
+  installPhase = ''
+    install -D -m ugo=rx connect $out/bin/connect
+  '';
+
+  meta = {
+    description = "Make network connection via SOCKS and https proxy";
+    longDescription = ''
+      This proxy traversal tool is intended to assist OpenSSH (via ProxyCommand
+      in ~/.ssh/config) and GIT (via $GIT_PROXY_COMMAND) utilize SOCKS and https proxies.
+      '';
+    homepage = "https://bitbucket.org/gotoh/connect/wiki/Home";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.gnu ++ lib.platforms.linux ++ lib.platforms.darwin;
+    maintainers = with lib.maintainers; [ jcumming ];
+    mainProgram = "connect";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/containerlab/default.nix b/nixpkgs/pkgs/tools/networking/containerlab/default.nix
new file mode 100644
index 000000000000..a2fb4d8b59d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/containerlab/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "containerlab";
+  version = "0.49.0";
+
+  src = fetchFromGitHub {
+    owner = "srl-labs";
+    repo = "containerlab";
+    rev = "v${version}";
+    hash = "sha256-dSy+4hsuigBSULDfsUW/kArcQByrtUeF3InMRuqFtu4=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  vendorHash = "sha256-mm3D8WQtgWT9LCWlTZIV5GJ9rIyd3iX8b6zWIpqEwnk=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X" "github.com/srl-labs/containerlab/cmd.version=${version}"
+    "-X" "github.com/srl-labs/containerlab/cmd.commit=${src.rev}"
+    "-X" "github.com/srl-labs/containerlab/cmd.date=1970-01-01T00:00:00Z"
+  ];
+
+  postInstall = ''
+    local INSTALL="$out/bin/containerlab"
+    installShellCompletion --cmd containerlab \
+      --bash <($out/bin/containerlab completion bash) \
+      --fish <($out/bin/containerlab completion fish) \
+      --zsh <($out/bin/containerlab completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Container-based networking lab";
+    homepage = "https://containerlab.dev/";
+    changelog = "https://github.com/srl-labs/containerlab/releases/tag/${src.rev}";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ aaronjheng ];
+    mainProgram = "containerlab";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/corerad/default.nix b/nixpkgs/pkgs/tools/networking/corerad/default.nix
new file mode 100644
index 000000000000..1a3340fcdb14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/corerad/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub, nixosTests }:
+
+buildGoModule rec {
+  pname = "corerad";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "mdlayher";
+    repo = "corerad";
+    rev = "v${version}";
+    sha256 = "sha256-cBP4jJhnIx+UwcbuQ3xbpImkLX4jSnsyvwfOEs31On4=";
+  };
+
+  vendorHash = "sha256-RkwfHjWu40AW+7zLc+sY5p2nyy3YPHk5sjt6foC103k=";
+
+  # Since the tarball pulled from GitHub doesn't contain git tag information,
+  # we fetch the expected tag's timestamp from a file in the root of the
+  # repository.
+  preBuild = ''
+    buildFlagsArray=(
+      -ldflags="
+        -X github.com/mdlayher/corerad/internal/build.linkTimestamp=$(<.gittagtime)
+        -X github.com/mdlayher/corerad/internal/build.linkVersion=v${version}
+      "
+    )
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) corerad;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/mdlayher/corerad";
+    description = "Extensible and observable IPv6 NDP RA daemon";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mdlayher ];
+    platforms = platforms.linux;
+    mainProgram = "corerad";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/corkscrew/default.nix b/nixpkgs/pkgs/tools/networking/corkscrew/default.nix
new file mode 100644
index 000000000000..882b742ebc76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/corkscrew/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "corkscrew";
+  version = "2.0";
+  src = fetchFromGitHub {
+    owner = "bryanpkc";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-JiddvTbuOysenrVWGUEyKSzpCF1PJaYWQUdz3FuLCdw=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bryanpkc/corkscrew";
+    description = "A tool for tunneling SSH through HTTP proxies";
+    license = lib.licenses.gpl2;
+    platforms = platforms.unix;
+    mainProgram = "corkscrew";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/crackle/default.nix b/nixpkgs/pkgs/tools/networking/crackle/default.nix
new file mode 100644
index 000000000000..f84d44ca0917
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/crackle/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, libpcap, coreutils }:
+
+stdenv.mkDerivation {
+  pname = "crackle";
+  version = "unstable-2020-12-13";
+
+  src = fetchFromGitHub {
+    owner = "mikeryan";
+    repo = "crackle";
+    rev = "d83b4b6f4145ca53c46c36bbd7ccad751af76b75";
+    sha256 = "sha256-Dy4s/hr9ySrogltyk2GVsuAvwNF5+b6CDjaD+2FaPHA=";
+  };
+
+  buildInputs = [ libpcap ];
+
+  installFlags = [ "DESTDIR=$(out)" "PREFIX=" "INSTALL=${coreutils}/bin/install" ];
+
+  meta = with lib; {
+    description = "Crack and decrypt BLE encryption";
+    homepage = "https://github.com/mikeryan/crackle";
+    maintainers = with maintainers; [ moni ];
+    license = licenses.bsd2;
+    mainProgram = "crackle";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/croc/default.nix b/nixpkgs/pkgs/tools/networking/croc/default.nix
new file mode 100644
index 000000000000..5efbd8651836
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/croc/default.nix
@@ -0,0 +1,42 @@
+{ lib, buildGoModule, fetchFromGitHub, callPackage }:
+
+buildGoModule rec {
+  pname = "croc";
+  version = "9.6.10";
+
+  src = fetchFromGitHub {
+    owner = "schollz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-SRSFbqwcMvzXVwwCxjIGnk/TisL3zGP2lQzy14HQrlU=";
+  };
+
+  vendorHash = "sha256-mxEDatG1VIPhnk7RUuobGGbUUi7HmeJvyBJFEEx4NMg=";
+
+  subPackages = [ "." ];
+
+  passthru = {
+    tests = {
+      local-relay = callPackage ./test-local-relay.nix { };
+    };
+  };
+  meta = with lib; {
+    description = "Easily and securely send things from one computer to another";
+    longDescription = ''
+      Croc is a command line tool written in Go that allows any two computers to
+      simply and securely transfer files and folders.
+
+      Croc does all of the following:
+      - Allows any two computers to transfer data (using a relay)
+      - Provides end-to-end encryption (using PAKE)
+      - Enables easy cross-platform transfers (Windows, Linux, Mac)
+      - Allows multiple file transfers
+      - Allows resuming transfers that are interrupted
+      - Does not require a server or port-forwarding
+    '';
+    homepage = "https://github.com/schollz/croc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hugoreeves equirosa SuperSandro2000 ];
+    mainProgram = "croc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/croc/test-local-relay.nix b/nixpkgs/pkgs/tools/networking/croc/test-local-relay.nix
new file mode 100644
index 000000000000..a3aa0f3c966d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/croc/test-local-relay.nix
@@ -0,0 +1,28 @@
+{ stdenv, croc }:
+
+stdenv.mkDerivation {
+  name = "croc-test-local-relay";
+
+  nativeBuildInputs = [ croc ];
+
+  buildCommand = ''
+    HOME=$(mktemp -d)
+    # start a local relay
+    croc relay --ports 11111,11112 &
+    # start sender in background
+    MSG="See you later, alligator!"
+    croc --relay localhost:11111 send --code correct-horse-battery-staple --text "$MSG" &
+    # wait for things to settle
+    sleep 1
+    MSG2=$(croc --relay localhost:11111 --yes correct-horse-battery-staple)
+    # compare
+    [ "$MSG" = "$MSG2" ] && touch $out
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = {
+    timeout = 300;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/curl-impersonate/curl-impersonate-0.5.2-fix-shebangs.patch b/nixpkgs/pkgs/tools/networking/curl-impersonate/curl-impersonate-0.5.2-fix-shebangs.patch
new file mode 100644
index 000000000000..7082c25ac148
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/curl-impersonate/curl-impersonate-0.5.2-fix-shebangs.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.in b/Makefile.in
+index 877c54f..3e39ed1 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -209,6 +209,8 @@ $(NSS_VERSION).tar.gz:
+ 
+ $(nss_static_libs): $(NSS_VERSION).tar.gz
+ 	tar xf $(NSS_VERSION).tar.gz
++	sed -i -e "1s@#!/usr/bin/env bash@#!$$(type -p bash)@" $(NSS_VERSION)/nss/build.sh
++	sed -i -e "s@/usr/bin/env grep@$$(type -p grep)@" $(NSS_VERSION)/nss/coreconf/config.gypi
+ 
+ ifeq ($(host),$(build))
+ 	# Native build, use NSS' build script.
diff --git a/nixpkgs/pkgs/tools/networking/curl-impersonate/default.nix b/nixpkgs/pkgs/tools/networking/curl-impersonate/default.nix
new file mode 100644
index 000000000000..070aab8d53f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/curl-impersonate/default.nix
@@ -0,0 +1,186 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, callPackage
+, buildGoModule
+, installShellFiles
+, symlinkJoin
+, zlib
+, sqlite
+, cmake
+, python3
+, ninja
+, perl
+, autoconf
+, automake
+, libtool
+, darwin
+, cacert
+, unzip
+, go
+, p11-kit
+, nixosTests
+}:
+
+let
+  makeCurlImpersonate = { name, target }: stdenv.mkDerivation rec {
+    pname = "curl-impersonate-${name}";
+    version = "0.5.4";
+
+    src = fetchFromGitHub {
+      owner = "lwthiker";
+      repo = "curl-impersonate";
+      rev = "v${version}";
+      hash = "sha256-LBGWFal2szqgURIBCLB84kHWpdpt5quvBBZu6buGj2A=";
+    };
+
+    patches = [
+      # Fix shebangs in the NSS build script
+      # (can't just patchShebangs since makefile unpacks it)
+      ./curl-impersonate-0.5.2-fix-shebangs.patch
+    ];
+
+    strictDeps = true;
+
+    nativeBuildInputs = lib.optionals stdenv.isDarwin [
+      # Must come first so that it shadows the 'libtool' command but leaves 'libtoolize'
+      darwin.cctools
+    ] ++ [
+      installShellFiles
+      cmake
+      python3
+      python3.pkgs.gyp
+      ninja
+      perl
+      autoconf
+      automake
+      libtool
+      unzip
+      go
+    ];
+
+    buildInputs = [
+      zlib
+      sqlite
+    ];
+
+    configureFlags = [
+      "--with-ca-bundle=${if stdenv.isDarwin then "/etc/ssl/cert.pem" else "/etc/ssl/certs/ca-certificates.crt"}"
+      "--with-ca-path=${cacert}/etc/ssl/certs"
+    ];
+
+    buildFlags = [ "${target}-build" ];
+    checkTarget = "${target}-checkbuild";
+    installTargets = [ "${target}-install" ];
+
+    doCheck = true;
+
+    dontUseCmakeConfigure = true;
+    dontUseNinjaBuild = true;
+    dontUseNinjaInstall = true;
+    dontUseNinjaCheck = true;
+
+    postUnpack = lib.concatStringsSep "\n" (lib.mapAttrsToList (name: dep: "ln -sT ${dep.outPath} source/${name}") (lib.filterAttrs (n: v: v ? outPath) passthru.deps));
+
+    preConfigure = ''
+      export GOCACHE=$TMPDIR/go-cache
+      export GOPATH=$TMPDIR/go
+      export GOPROXY=file://${passthru.boringssl-go-modules}
+      export GOSUMDB=off
+
+      # Need to get value of $out for this flag
+      configureFlagsArray+=("--with-libnssckbi=$out/lib")
+    '';
+
+    postInstall = ''
+      # Remove vestigial *-config script
+      rm $out/bin/curl-impersonate-${name}-config
+
+      # Patch all shebangs of installed scripts
+      patchShebangs $out/bin
+
+      # Build and install completions for each curl binary
+
+      # Patch in correct binary name and alias it to all scripts
+      perl curl-*/scripts/completion.pl --curl $out/bin/curl-impersonate-${name} --shell zsh >$TMPDIR/curl-impersonate-${name}.zsh
+      substituteInPlace $TMPDIR/curl-impersonate-${name}.zsh \
+        --replace \
+          '#compdef curl' \
+          "#compdef curl-impersonate-${name}$(find $out/bin -name 'curl_*' -printf ' %f=curl-impersonate-${name}')"
+
+      perl curl-*/scripts/completion.pl --curl $out/bin/curl-impersonate-${name} --shell fish >$TMPDIR/curl-impersonate-${name}.fish
+      substituteInPlace $TMPDIR/curl-impersonate-${name}.fish \
+        --replace \
+          '--command curl' \
+          "--command curl-impersonate-${name}$(find $out/bin -name 'curl_*' -printf ' --command %f')"
+
+      # Install zsh and fish completions
+      installShellCompletion $TMPDIR/curl-impersonate-${name}.{zsh,fish}
+    '';
+
+    preFixup = let
+      libext = stdenv.hostPlatform.extensions.sharedLibrary;
+    in ''
+      # If libnssckbi.so is needed, link libnssckbi.so without needing nss in closure
+      if grep -F nssckbi $out/lib/libcurl-impersonate-*${libext} &>/dev/null; then
+        # NOTE: "p11-kit-trust" always ends in ".so" even when on darwin
+        ln -s ${p11-kit}/lib/pkcs11/p11-kit-trust.so $out/lib/libnssckbi${libext}
+        ${lib.optionalString stdenv.isLinux "patchelf --add-needed libnssckbi${libext} $out/lib/libcurl-impersonate-*${libext}"}
+      fi
+    '';
+
+    disallowedReferences = [ go ];
+
+    passthru = {
+      deps = callPackage ./deps.nix {};
+
+      boringssl-go-modules = (buildGoModule {
+        inherit (passthru.deps."boringssl.zip") name;
+
+        src = passthru.deps."boringssl.zip";
+        vendorHash = "sha256-ISmRdumckvSu7hBXrjvs5ZApShDiGLdD3T5B0fJ1x2Q=";
+
+        nativeBuildInputs = [ unzip ];
+
+        proxyVendor = true;
+      }).goModules;
+    };
+
+    meta = with lib; {
+      description = "A special build of curl that can impersonate Chrome & Firefox";
+      homepage = "https://github.com/lwthiker/curl-impersonate";
+      license = with licenses; [ curl mit ];
+      maintainers = with maintainers; [ deliciouslytyped lilyinstarlight ];
+      platforms = platforms.unix;
+      knownVulnerabilities = [
+        "CVE-2023-38545"  # SOCKS5 heap buffer overflow - https://curl.se/docs/CVE-2023-38545.html
+        "CVE-2023-32001"  # fopen TOCTOU race condition - https://curl.se/docs/CVE-2023-32001.html
+        "CVE-2022-43551"  # HSTS bypass - https://curl.se/docs/CVE-2022-43551.html
+        "CVE-2022-42916"  # HSTS bypass - https://curl.se/docs/CVE-2022-42916.html
+      ];
+    };
+  };
+in
+
+symlinkJoin rec {
+  pname = "curl-impersonate";
+  inherit (passthru.curl-impersonate-ff) version meta;
+
+  name = "${pname}-${version}";
+
+  paths = [
+    passthru.curl-impersonate-ff
+    passthru.curl-impersonate-chrome
+  ];
+
+  passthru = {
+    curl-impersonate-ff = makeCurlImpersonate { name = "ff"; target = "firefox"; };
+    curl-impersonate-chrome = makeCurlImpersonate { name = "chrome"; target = "chrome"; };
+
+    updateScript = ./update.sh;
+
+    inherit (passthru.curl-impersonate-ff) src;
+
+    tests = { inherit (nixosTests) curl-impersonate; };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/curl-impersonate/deps.nix b/nixpkgs/pkgs/tools/networking/curl-impersonate/deps.nix
new file mode 100644
index 000000000000..498616247dce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/curl-impersonate/deps.nix
@@ -0,0 +1,29 @@
+# Generated by update.sh
+{ fetchurl }:
+
+{
+  "curl-7.84.0.tar.xz" = fetchurl {
+    url = "https://curl.se/download/curl-7.84.0.tar.xz";
+    hash = "sha256-LRGLQ/VHv+W66AbY1HtOWW6lslpsHwgK70n7zYF8Xbg=";
+  };
+
+  "brotli-1.0.9.tar.gz" = fetchurl {
+    url = "https://github.com/google/brotli/archive/refs/tags/v1.0.9.tar.gz";
+    hash = "sha256-+ejYHQQFumbRgVKa9CozVPg4yTkJX/mZMNpqqc32/kY=";
+  };
+
+  "nss-3.87.tar.gz" = fetchurl {
+    url = "https://ftp.mozilla.org/pub/security/nss/releases/NSS_3_87_RTM/src/nss-3.87-with-nspr-4.35.tar.gz";
+    hash = "sha256-63DqC1jc5pqkkOnp/s0TKn1kTh2j1jHhYzdqDcwRoCI=";
+  };
+
+  "boringssl.zip" = fetchurl {
+    url = "https://github.com/google/boringssl/archive/3a667d10e94186fd503966f5638e134fe9fb4080.zip";
+    hash = "sha256-HsDIkd1x5IH49fUF07dJaabMIMsQygW+NI7GneULpA8=";
+  };
+
+  "nghttp2-1.46.0.tar.bz2" = fetchurl {
+    url = "https://github.com/nghttp2/nghttp2/releases/download/v1.46.0/nghttp2-1.46.0.tar.bz2";
+    hash = "sha256-moKXjIcAcbdp8n0riBkct3/clFpRwdaFx/YafhP8Ryk=";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/curl-impersonate/update.sh b/nixpkgs/pkgs/tools/networking/curl-impersonate/update.sh
new file mode 100755
index 000000000000..3930c0768478
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/curl-impersonate/update.sh
@@ -0,0 +1,91 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p git nix jq coreutils gnugrep gnused curl common-updater-scripts
+set -euo pipefail
+
+nixpkgs="$(git rev-parse --show-toplevel || (printf 'Could not find root of nixpkgs repo\nAre we running from within the nixpkgs git repo?\n' >&2; exit 1))"
+
+stripwhitespace() {
+    sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
+}
+
+narhash() {
+    nix --extra-experimental-features nix-command store prefetch-file --json "$1" | jq -r .hash
+}
+
+nixeval() {
+    nix --extra-experimental-features nix-command eval --json --impure -f "$nixpkgs" "$1" | jq -r .
+}
+
+vendorhash() {
+    (nix --extra-experimental-features nix-command build --no-link -f "$nixpkgs" --no-link "$1" 2>&1 >/dev/null | tail -n3 | grep -F got: | cut -d: -f2- | stripwhitespace) 2>/dev/null || true
+}
+
+findpath() {
+    path="$(nix --extra-experimental-features nix-command eval --json --impure -f "$nixpkgs" "$1.meta.position" | jq -r . | cut -d: -f1)"
+    outpath="$(nix --extra-experimental-features nix-command eval --json --impure --expr "builtins.fetchGit \"$nixpkgs\"")"
+
+    if [ -n "$outpath" ]; then
+        path="${path/$(echo "$outpath" | jq -r .)/$nixpkgs}"
+    fi
+
+    echo "$path"
+}
+
+getvar() {
+    echo "$2" | grep -F "$1" | sed -e 's/:=/:/g' | cut -d: -f2- | stripwhitespace
+}
+
+attr="${UPDATE_NIX_ATTR_PATH:-curl-impersonate}"
+version="$(curl -sSL "https://api.github.com/repos/lwthiker/curl-impersonate/releases/latest" | jq -r .tag_name | sed -e 's/^v//')"
+
+pkgpath="$(findpath "$attr")"
+
+updated="$(cd "$nixpkgs" && update-source-version "$attr" "$version" --file="$pkgpath" --print-changes | jq -r length)"
+
+if [ "$updated" -eq 0 ]; then
+    echo 'update.sh: Package version not updated, nothing to do.'
+    exit 0
+fi
+
+vars="$(curl -sSL "https://github.com/lwthiker/curl-impersonate/raw/v$version/Makefile.in" | grep '^ *[^ ]*_\(VERSION\|URL\|COMMIT\) *:=')"
+
+cat >"$(dirname "$pkgpath")"/deps.nix <<EOF
+# Generated by update.sh
+{ fetchurl }:
+
+{
+  "$(getvar CURL_VERSION "$vars").tar.xz" = fetchurl {
+    url = "https://curl.se/download/$(getvar CURL_VERSION "$vars").tar.xz";
+    hash = "$(narhash "https://curl.se/download/$(getvar CURL_VERSION "$vars").tar.xz")";
+  };
+
+  "brotli-$(getvar BROTLI_VERSION "$vars").tar.gz" = fetchurl {
+    url = "https://github.com/google/brotli/archive/refs/tags/v$(getvar BROTLI_VERSION "$vars").tar.gz";
+    hash = "$(narhash "https://github.com/google/brotli/archive/refs/tags/v$(getvar BROTLI_VERSION "$vars").tar.gz")";
+  };
+
+  "$(getvar NSS_VERSION "$vars").tar.gz" = fetchurl {
+    url = "$(getvar NSS_URL "$vars")";
+    hash = "$(narhash "$(getvar NSS_URL "$vars")")";
+  };
+
+  "boringssl.zip" = fetchurl {
+    url = "https://github.com/google/boringssl/archive/$(getvar BORING_SSL_COMMIT "$vars").zip";
+    hash = "$(narhash "https://github.com/google/boringssl/archive/$(getvar BORING_SSL_COMMIT "$vars").zip")";
+  };
+
+  "$(getvar NGHTTP2_VERSION "$vars").tar.bz2" = fetchurl {
+    url = "$(getvar NGHTTP2_URL "$vars")";
+    hash = "$(narhash "$(getvar NGHTTP2_URL "$vars")")";
+  };
+}
+EOF
+
+curhash="$(nixeval "$attr.curl-impersonate-chrome.boringssl-go-modules.outputHash")"
+newhash="$(vendorhash "$attr.curl-impersonate-chrome.boringssl-go-modules")"
+
+if [ -n "$newhash" ] && [ "$curhash" != "$newhash" ]; then
+    sed -i -e "s|\"$curhash\"|\"$newhash\"|" "$pkgpath"
+else
+    echo 'update.sh: New vendorHash same as old vendorHash, nothing to do.'
+fi
diff --git a/nixpkgs/pkgs/tools/networking/curl/default.nix b/nixpkgs/pkgs/tools/networking/curl/default.nix
new file mode 100644
index 000000000000..c2438f1b5777
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/curl/default.nix
@@ -0,0 +1,217 @@
+{ lib, stdenv, fetchurl, darwin, pkg-config, perl, nixosTests
+, brotliSupport ? false, brotli
+, c-aresSupport ? false, c-aresMinimal
+, gnutlsSupport ? false, gnutls
+, gsaslSupport ? false, gsasl
+, gssSupport ? with stdenv.hostPlatform; (
+    !isWindows &&
+    # disable gss because of: undefined reference to `k5_bcmp'
+    # a very sad story re static: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=439039
+    !isStatic &&
+    # the "mig" tool does not configure its compiler correctly. This could be
+    # fixed in mig, but losing gss support on cross compilation to darwin is
+    # not worth the effort.
+    !(isDarwin && (stdenv.buildPlatform != stdenv.hostPlatform))
+  ), libkrb5
+, http2Support ? true, nghttp2
+, http3Support ? false, nghttp3, ngtcp2
+, websocketSupport ? false
+, idnSupport ? false, libidn2
+, ldapSupport ? false, openldap
+, opensslSupport ? zlibSupport, openssl
+, pslSupport ? false, libpsl
+, rtmpSupport ? false, rtmpdump
+, scpSupport ? zlibSupport && !stdenv.isSunOS && !stdenv.isCygwin, libssh2
+, wolfsslSupport ? false, wolfssl
+, rustlsSupport ? false, rustls-ffi
+, zlibSupport ? true, zlib
+, zstdSupport ? false, zstd
+
+# for passthru.tests
+, coeurl
+, curlpp
+, haskellPackages
+, ocamlPackages
+, phpExtensions
+, pkgsStatic
+, python3
+, tests
+, testers
+, fetchpatch
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+assert !((lib.count (x: x) [ gnutlsSupport opensslSupport wolfsslSupport rustlsSupport ]) > 1);
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "curl";
+  version = "8.6.0";
+
+  src = fetchurl {
+    urls = [
+      "https://curl.haxx.se/download/curl-${finalAttrs.version}.tar.xz"
+      "https://github.com/curl/curl/releases/download/curl-${builtins.replaceStrings [ "." ] [ "_" ] finalAttrs.version}/curl-${finalAttrs.version}.tar.xz"
+    ];
+    hash = "sha256-PM1V2Rr5UWU534BiX4GMc03G8uz5utozx2dl6ZEh2xU=";
+  };
+
+  postPatch = ''
+    patchShebangs scripts
+  '';
+
+  outputs = [ "bin" "dev" "out" "man" "devdoc" ];
+  separateDebugInfo = stdenv.isLinux;
+
+  enableParallelBuilding = true;
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ pkg-config perl ];
+
+  # Zlib and OpenSSL must be propagated because `libcurl.la' contains
+  # "-lz -lssl", which aren't necessary direct build inputs of
+  # applications that use Curl.
+  propagatedBuildInputs = with lib;
+    optional brotliSupport brotli ++
+    optional c-aresSupport c-aresMinimal ++
+    optional gnutlsSupport gnutls ++
+    optional gsaslSupport gsasl ++
+    optional gssSupport libkrb5 ++
+    optional http2Support nghttp2 ++
+    optionals http3Support [ nghttp3 ngtcp2 ] ++
+    optional idnSupport libidn2 ++
+    optional ldapSupport openldap ++
+    optional opensslSupport openssl ++
+    optional pslSupport libpsl ++
+    optional rtmpSupport rtmpdump ++
+    optional scpSupport libssh2 ++
+    optional wolfsslSupport wolfssl ++
+    optional rustlsSupport rustls-ffi ++
+    optional zlibSupport zlib ++
+    optional zstdSupport zstd ++
+    optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+      CoreFoundation
+      CoreServices
+      SystemConfiguration
+    ]);
+
+  # for the second line see https://curl.haxx.se/mail/tracker-2014-03/0087.html
+  preConfigure = ''
+    sed -e 's|/usr/bin|/no-such-path|g' -i.bak configure
+    rm src/tool_hugehelp.c
+  '' + lib.optionalString (pslSupport && stdenv.hostPlatform.isStatic) ''
+    # curl doesn't understand that libpsl2 has deps because it doesn't use
+    # pkg-config.
+    # https://github.com/curl/curl/pull/12919
+    configureFlagsArray+=("LIBS=-lidn2 -lunistring")
+  '';
+
+  configureFlags = [
+      # Build without manual
+      "--disable-manual"
+      (lib.enableFeature c-aresSupport "ares")
+      (lib.enableFeature ldapSupport "ldap")
+      (lib.enableFeature ldapSupport "ldaps")
+      (lib.enableFeature websocketSupport "websockets")
+      # --with-ca-fallback is only supported for openssl and gnutls https://github.com/curl/curl/blame/curl-8_0_1/acinclude.m4#L1640
+      (lib.withFeature (opensslSupport || gnutlsSupport) "ca-fallback")
+      (lib.withFeature http3Support "nghttp3")
+      (lib.withFeature http3Support "ngtcp2")
+      (lib.withFeature rtmpSupport "librtmp")
+      (lib.withFeature rustlsSupport "rustls")
+      (lib.withFeature zstdSupport "zstd")
+      (lib.withFeature pslSupport "libpsl")
+      (lib.withFeatureAs brotliSupport "brotli" (lib.getDev brotli))
+      (lib.withFeatureAs gnutlsSupport "gnutls" (lib.getDev gnutls))
+      (lib.withFeatureAs idnSupport "libidn2" (lib.getDev libidn2))
+      (lib.withFeatureAs opensslSupport "openssl" (lib.getDev openssl))
+      (lib.withFeatureAs scpSupport "libssh2" (lib.getDev libssh2))
+      (lib.withFeatureAs wolfsslSupport "wolfssl" (lib.getDev wolfssl))
+    ]
+    ++ lib.optional gssSupport "--with-gssapi=${lib.getDev libkrb5}"
+       # For the 'urandom', maybe it should be a cross-system option
+    ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
+       "--with-random=/dev/urandom"
+    ++ lib.optionals stdenv.hostPlatform.isWindows [
+      "--disable-shared"
+      "--enable-static"
+    ] ++ lib.optionals stdenv.isDarwin [
+      # Disable default CA bundle, use NIX_SSL_CERT_FILE or fallback to nss-cacert from the default profile.
+      # Without this curl might detect /etc/ssl/cert.pem at build time on macOS, causing curl to ignore NIX_SSL_CERT_FILE.
+      "--without-ca-bundle"
+      "--without-ca-path"
+    ] ++ lib.optionals (!gnutlsSupport && !opensslSupport && !wolfsslSupport && !rustlsSupport) [
+      "--without-ssl"
+    ];
+
+  CXX = "${stdenv.cc.targetPrefix}c++";
+  CXXCPP = "${stdenv.cc.targetPrefix}c++ -E";
+
+  # takes 14 minutes on a 24 core and because many other packages depend on curl
+  # they cannot be run concurrently and are a bottleneck
+  # tests are available in passthru.tests.withCheck
+  doCheck = false;
+  preCheck = ''
+    patchShebangs tests/
+  '' + lib.optionalString stdenv.isDarwin ''
+    # bad interaction with sandbox if enabled?
+    rm tests/data/test1453
+    rm tests/data/test1086
+  '' + lib.optionalString stdenv.hostPlatform.isMusl ''
+    # different resolving behaviour?
+    rm tests/data/test1592
+  '';
+
+  postInstall = ''
+    moveToOutput bin/curl-config "$dev"
+
+    # Install completions
+    make -C scripts install
+  '' + lib.optionalString scpSupport ''
+    sed '/^dependency_libs/s|${lib.getDev libssh2}|${lib.getLib libssh2}|' -i "$out"/lib/*.la
+  '' + lib.optionalString gnutlsSupport ''
+    ln $out/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/libcurl-gnutls${stdenv.hostPlatform.extensions.sharedLibrary}
+    ln $out/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/libcurl-gnutls${stdenv.hostPlatform.extensions.sharedLibrary}.4
+    ln $out/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/libcurl-gnutls${stdenv.hostPlatform.extensions.sharedLibrary}.4.4.0
+  '';
+
+  passthru = let
+    useThisCurl = attr: attr.override { curl = finalAttrs.finalPackage; };
+  in {
+    inherit opensslSupport openssl;
+    tests = {
+      withCheck = finalAttrs.finalPackage.overrideAttrs (_: { doCheck = true; });
+      curlpp = useThisCurl curlpp;
+      coeurl = useThisCurl coeurl;
+      haskell-curl = useThisCurl haskellPackages.curl;
+      ocaml-curly = useThisCurl ocamlPackages.curly;
+      pycurl = useThisCurl python3.pkgs.pycurl;
+      php-curl = useThisCurl phpExtensions.curl;
+      # error: attribute 'override' missing
+      # Additional checking with support http3 protocol.
+      # nginx-http3 = useThisCurl nixosTests.nginx-http3;
+      nginx-http3 = nixosTests.nginx-http3;
+      pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
+      static = pkgsStatic.curl;
+    } // lib.optionalAttrs (!stdenv.isDarwin) {
+      fetchpatch = tests.fetchpatch.simple.override { fetchpatch = (fetchpatch.override { fetchurl = useThisCurl fetchurl; }) // { version = 1; }; };
+    };
+  };
+
+  meta = with lib; {
+    changelog = "https://curl.se/changes.html#${lib.replaceStrings [ "." ] [ "_" ] finalAttrs.version}";
+    description = "A command line tool for transferring files with URL syntax";
+    homepage    = "https://curl.se/";
+    license = licenses.curl;
+    maintainers = with maintainers; [ lovek323 ];
+    platforms = platforms.all;
+    # Fails to link against static brotli or gss
+    broken = stdenv.hostPlatform.isStatic && (brotliSupport || gssSupport);
+    pkgConfigModules = [ "libcurl" ];
+    mainProgram = "curl";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/curlie/bump-golang-x-sys.patch b/nixpkgs/pkgs/tools/networking/curlie/bump-golang-x-sys.patch
new file mode 100644
index 000000000000..0de9769d2216
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/curlie/bump-golang-x-sys.patch
@@ -0,0 +1,37 @@
+diff --git a/go.mod b/go.mod
+index bebd23f..2ad575f 100644
+--- a/go.mod
++++ b/go.mod
+@@ -1,8 +1,8 @@
+ module github.com/rs/curlie
+
+ require (
+-	golang.org/x/crypto v0.1.0
+-	golang.org/x/sys v0.1.0
++	golang.org/x/crypto v0.0.0-20180524125353-159ae71589f3
++	golang.org/x/sys v0.0.0-20211110154304-99a53858aa08
+ )
+
+ go 1.13
+diff --git a/go.sum b/go.sum
+index 6b2e5c3..452bcf9 100644
+--- a/go.sum
++++ b/go.sum
+@@ -1,4 +1,6 @@
+ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
++golang.org/x/crypto v0.0.0-20180524125353-159ae71589f3 h1:mPCVkWhSH1DSDQg4ZwAFYMo/+evpqK1WzBt33b9TXRE=
++golang.org/x/crypto v0.0.0-20180524125353-159ae71589f3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+ golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
+@@ -10,6 +12,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
+ golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
+ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
++golang.org/x/sys v0.0.0-20211110154304-99a53858aa08 h1:WecRHqgE09JBkh/584XIE6PMz5KKE/vER4izNUi30AQ=
++golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+--
+2.40.1
diff --git a/nixpkgs/pkgs/tools/networking/curlie/default.nix b/nixpkgs/pkgs/tools/networking/curlie/default.nix
new file mode 100644
index 000000000000..db70b9a51f0e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/curlie/default.nix
@@ -0,0 +1,34 @@
+{ buildGoModule, fetchFromGitHub, lib, curlie, testers }:
+
+buildGoModule rec {
+  pname = "curlie";
+  version = "1.7.2";
+
+  src = fetchFromGitHub {
+    owner = "rs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-YOsq3cB+Pn2eC1Dky3fobBRR7GMxcf/tvWr6i3Vq/BE=";
+  };
+
+  patches = [
+    ./bump-golang-x-sys.patch
+  ];
+
+  vendorHash = "sha256-VsPdMUfS4UVem6uJgFISfFHQEKtIumDQktHQFPC1muc=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = curlie;
+    command = "curlie version";
+  };
+
+  meta = with lib; {
+    description = "Frontend to curl that adds the ease of use of httpie, without compromising on features and performance";
+    homepage = "https://curlie.io/";
+    maintainers = with maintainers; [ ma27 ];
+    license = licenses.mit;
+    mainProgram = "curlie";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dae/default.nix b/nixpkgs/pkgs/tools/networking/dae/default.nix
new file mode 100644
index 000000000000..18856ca5f0e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dae/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, clang
+, fetchFromGitHub
+, buildGoModule
+}:
+buildGoModule rec {
+  pname = "dae";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "daeuniverse";
+    repo = "dae";
+    rev = "v${version}";
+    hash = "sha256-hvAuWCacaWxXwxx5ktj57hnWt8fcnwD6rUuRj1+ZtFA=";
+    fetchSubmodules = true;
+  };
+
+  vendorHash = "sha256-qK+x6ciAebwIWHRjRpNXCAqsfnmEx37evS4+7kwcFIs=";
+
+  proxyVendor = true;
+
+  nativeBuildInputs = [ clang ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/daeuniverse/dae/cmd.Version=${version}"
+    "-X github.com/daeuniverse/dae/common/consts.MaxMatchSetLen_=64"
+  ];
+
+  preBuild = ''
+    make CFLAGS="-D__REMOVE_BPF_PRINTK -fno-stack-protector -Wno-unused-command-line-argument" \
+    NOSTRIP=y \
+    ebpf
+  '';
+
+  # network required
+  doCheck = false;
+
+  postInstall = ''
+    install -Dm444 install/dae.service $out/lib/systemd/system/dae.service
+    substituteInPlace $out/lib/systemd/system/dae.service \
+      --replace /usr/bin/dae $out/bin/dae
+  '';
+
+  meta = with lib; {
+    description = "A Linux high-performance transparent proxy solution based on eBPF";
+    homepage = "https://github.com/daeuniverse/dae";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ oluceps pokon548 ];
+    platforms = platforms.linux;
+    mainProgram = "dae";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/darkstat/default.nix b/nixpkgs/pkgs/tools/networking/darkstat/default.nix
new file mode 100644
index 000000000000..0dc03b0c0db6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/darkstat/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, autoreconfHook
+, fetchFromGitHub
+, fetchpatch
+, libpcap
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "darkstat";
+  version = "3.0.721";
+
+  src = fetchFromGitHub {
+    owner = "emikulic";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-kKj4fCgphoe3lojJfARwpITxQh7E6ehUew9FVEW63uQ=";
+  };
+
+  patches = [
+    # Avoid multiple definitions of CLOCK_REALTIME on macOS 11,
+    # see https://github.com/emikulic/darkstat/pull/2
+    (fetchpatch {
+       url = "https://github.com/emikulic/darkstat/commit/d2fd232e1167dee6e7a2d88b9ab7acf2a129f697.diff";
+       sha256 = "0z5mpyc0q65qb6cn4xcrxl0vx21d8ibzaam5kjyrcw4icd8yg4jb";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    libpcap
+    zlib
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Network statistics web interface";
+    longDescription = ''
+      Captures network traffic, calculates statistics about usage, and serves
+      reports over HTTP. Features:
+      - Traffic graphs, reports per host, shows ports for each host.
+      - Embedded web-server with deflate compression.
+      - Asynchronous reverse DNS resolution using a child process.
+      - Small. Portable. Single-threaded. Efficient.
+      - Supports IPv6.
+    '';
+    homepage = "http://unix4lyfe.org/darkstat";
+    changelog = "https://github.com/emikulic/darkstat/releases/tag/${version}";
+    license = licenses.gpl2Only;
+    platforms = with platforms; unix;
+    mainProgram = "darkstat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/davix/default.nix b/nixpkgs/pkgs/tools/networking/davix/default.nix
new file mode 100644
index 000000000000..159fd0f15410
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/davix/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, pkg-config
+, openssl
+, libxml2
+, boost
+, python3
+, libuuid
+, curl
+, gsoap
+, Security
+, enableTools ? true
+  # Use libcurl instead of libneon
+  # Note that the libneon used is bundled in the project
+  # See https://github.com/cern-fts/davix/issues/23
+, defaultToLibcurl ? false
+, enableIpv6 ? true
+, enableTcpNodelay ? true
+  # Build davix_copy.so
+, enableThirdPartyCopy ? false
+}:
+
+let
+  boolToUpper = b: lib.toUpper (lib.boolToString b);
+in
+stdenv.mkDerivation rec {
+  version = "0.8.5";
+  pname = "davix" + lib.optionalString enableThirdPartyCopy "-copy";
+  nativeBuildInputs = [ cmake pkg-config python3 ];
+  buildInputs = [
+    openssl
+    libxml2
+    boost
+    curl
+  ]
+  ++ lib.optional stdenv.isDarwin Security
+  ++ lib.optional (!stdenv.isDarwin) libuuid
+  ++ lib.optional (enableThirdPartyCopy) gsoap;
+
+  # using the url below since the github release page states
+  # "please ignore the GitHub-generated tarballs, as they are incomplete"
+  # https://github.com/cern-fts/davix/releases/tag/R_0_8_0
+  src = fetchurl {
+    url = "https://github.com/cern-fts/davix/releases/download/R_${lib.replaceStrings ["."] ["_"] version}/davix-${version}.tar.gz";
+    sha256 = "sha256-+c4hvMLtJI94JQWdF1d4dmFiWMNRd9dPrY+FSoGKh/k=";
+  };
+
+  preConfigure = ''
+    find . -mindepth 1 -maxdepth 1 -type f -name "patch*.sh" -print0 | while IFS= read -r -d ''' file; do
+      patchShebangs "$file"
+    done
+  '';
+
+  cmakeFlags = [
+    "-DENABLE_TOOLS=${boolToUpper enableTools}"
+    "-DEMBEDDED_LIBCURL=OFF"
+    "-DLIBCURL_BACKEND_BY_DEFAULT=${boolToUpper defaultToLibcurl}"
+    "-DENABLE_IPV6=${boolToUpper enableIpv6}"
+    "-DENABLE_TCP_NODELAY=${boolToUpper enableTcpNodelay}"
+    "-DENABLE_THIRD_PARTY_COPY=${boolToUpper enableThirdPartyCopy}"
+  ];
+
+  meta = with lib; {
+    description = "Toolkit for Http-based file management";
+
+    longDescription = "Davix is a toolkit designed for file
+    operations with Http based protocols (WebDav, Amazon S3, ...).
+    Davix provides an API and a set of command line tools";
+
+    license = licenses.lgpl2Plus;
+    homepage = "https://github.com/cern-fts/davix";
+    changelog = "https://github.com/cern-fts/davix/blob/R_${lib.replaceStrings ["."] ["_"] version}/RELEASE-NOTES.md";
+    maintainers = with maintainers; [ adev ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dcap/default.nix b/nixpkgs/pkgs/tools/networking/dcap/default.nix
new file mode 100644
index 000000000000..4045748fc447
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dcap/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoconf
+, automake
+, libtool
+, zlib
+, cunit
+, libxcrypt
+}:
+stdenv.mkDerivation rec {
+  pname = "dcap";
+  version = "2.47.14";
+
+  src = fetchFromGitHub {
+    owner = "dCache";
+    repo = "dcap";
+    rev = version;
+    sha256 = "sha256-hn4nkFTIbSUUhvf9UfsEqVhphAdNWmATaCrv8jOuC0Y=";
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool ];
+  buildInputs = [ zlib libxcrypt ];
+
+  preConfigure = ''
+    patchShebangs bootstrap.sh
+    ./bootstrap.sh
+  '';
+
+  doCheck = true;
+
+  nativeCheckInputs = [ cunit ];
+
+  outputs = [ "bin" "dev" "out" "man" "doc" ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "dCache access protocol client library";
+    homepage = "https://github.com/dCache/dcap";
+    changelog = "https://github.com/dCache/dcap/blob/master/ChangeLog";
+    license = licenses.lgpl2Only;
+    platforms = platforms.all;
+    mainProgram = "dccp";
+    maintainers = with maintainers; [ ShamrockLee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent.nix b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent.nix
new file mode 100644
index 000000000000..4116e28858ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent.nix
@@ -0,0 +1,125 @@
+{ lib
+, stdenv
+, cmake
+, buildGoModule
+, makeWrapper
+, fetchFromGitHub
+, pythonPackages
+, pkg-config
+, systemd
+, hostname
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, extraTags ? [ ]
+, testers
+, datadog-agent
+}:
+
+let
+  # keep this in sync with github.com/DataDog/agent-payload dependency
+  payloadVersion = "5.0.97";
+  python = pythonPackages.python;
+  owner   = "DataDog";
+  repo    = "datadog-agent";
+  goPackagePath = "github.com/${owner}/${repo}";
+  version = "7.50.3";
+
+  src = fetchFromGitHub {
+    inherit owner repo;
+    rev = version;
+    hash = "sha256-AN5BruLPyrpIGSUkcYkZC0VgItk9NHiZTXstv6j9TlY=";
+  };
+  rtloader = stdenv.mkDerivation {
+    pname = "datadog-agent-rtloader";
+    src = "${src}/rtloader";
+    inherit version;
+    nativeBuildInputs = [ cmake ];
+    buildInputs = [ python ];
+    cmakeFlags = ["-DBUILD_DEMO=OFF" "-DDISABLE_PYTHON2=ON"];
+  };
+
+in buildGoModule rec {
+  pname = "datadog-agent";
+  inherit src version;
+
+  doCheck = false;
+
+  vendorHash = "sha256-Rn8EB/6FHQk9COlOaxm4TQXjGCIPZHJV2QQnPDcbRnM=";
+
+  subPackages = [
+    "cmd/agent"
+    "cmd/cluster-agent"
+    "cmd/dogstatsd"
+    "cmd/py-launcher"
+    "cmd/trace-agent"
+  ];
+
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [rtloader] ++ lib.optionals withSystemd [ systemd ];
+  PKG_CONFIG_PATH = "${python}/lib/pkgconfig";
+
+  tags = [
+    "ec2"
+    "python"
+    "process"
+    "log"
+    "secrets"
+    "zlib"
+  ]
+  ++ lib.optionals withSystemd [ "systemd" ]
+  ++ extraTags;
+
+  ldflags = [
+    "-X ${goPackagePath}/pkg/version.Commit=${src.rev}"
+    "-X ${goPackagePath}/pkg/version.AgentVersion=${version}"
+    "-X ${goPackagePath}/pkg/serializer.AgentPayloadVersion=${payloadVersion}"
+    "-X ${goPackagePath}/pkg/collector/python.pythonHome3=${python}"
+    "-X ${goPackagePath}/pkg/config.DefaultPython=3"
+    "-r ${python}/lib"
+  ];
+
+  preBuild = ''
+    # Keep directories to generate in sync with tasks/go.py
+    go generate ./pkg/status ./cmd/agent/gui
+  '';
+
+  # DataDog use paths relative to the agent binary, so fix these.
+  postPatch = ''
+    sed -e "s|PyChecksPath =.*|PyChecksPath = \"$out/${python.sitePackages}\"|" \
+        -e "s|distPath =.*|distPath = \"$out/share/datadog-agent\"|" \
+        -i cmd/agent/common/path/path_nix.go
+    sed -e "s|/bin/hostname|${lib.getBin hostname}/bin/hostname|" \
+        -i pkg/util/hostname/fqdn_nix.go
+  '';
+
+  # Install the config files and python modules from the "dist" dir
+  # into standard paths.
+  postInstall = ''
+    mkdir -p $out/${python.sitePackages} $out/share/datadog-agent
+    cp -R --no-preserve=mode $src/cmd/agent/dist/conf.d $out/share/datadog-agent
+    rm -rf $out/share/datadog-agent/conf.d/{apm.yaml.default,process_agent.yaml.default,winproc.d}
+    cp -R $src/cmd/agent/dist/{checks,utils,config.py} $out/${python.sitePackages}
+
+    cp -R $src/pkg/status/templates $out/share/datadog-agent
+
+    wrapProgram "$out/bin/agent" \
+      --set PYTHONPATH "$out/${python.sitePackages}"'' + lib.optionalString withSystemd '' \
+      --prefix LD_LIBRARY_PATH : '' + lib.makeLibraryPath [ (lib.getLib systemd) rtloader ];
+
+  passthru.tests.version = testers.testVersion {
+    package = datadog-agent;
+    command = "agent version";
+  };
+
+  meta = with lib; {
+    description = ''
+      Event collector for the DataDog analysis service
+      -- v6 new golang implementation.
+    '';
+    homepage    = "https://www.datadoghq.com";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ thoughtpolice domenkozar ];
+    # never built on aarch64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent.nix b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent.nix
new file mode 100644
index 000000000000..4d1334505f32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent.nix
@@ -0,0 +1,11 @@
+{ lib, datadog-agent }:
+datadog-agent.overrideAttrs (attrs: {
+  pname = "datadog-process-agent";
+  meta = with lib;
+    attrs.meta // {
+      description = "Live process collector for the DataDog Agent v7";
+      maintainers = with maintainers; [ domenkozar ];
+    };
+  subPackages = [ "cmd/process-agent" ];
+  postInstall = null;
+})
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/integrations-core.nix b/nixpkgs/pkgs/tools/networking/dd-agent/integrations-core.nix
new file mode 100644
index 000000000000..e4ecdd2ad850
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/integrations-core.nix
@@ -0,0 +1,116 @@
+# The declarations in this file build the Datadog agent's core
+# integrations. These integrations are tracked in a separate
+# repository[1] outside of the agent's primary repository and provide
+# checks for various kinds of services.
+#
+# Not all services are relevant for all users, however. As some of
+# them depend on various tools and Python packages it is nonsensical
+# to build *all* integrations by default.
+#
+# A set of default integrations is defined and built either way.
+# Additional integrations can be specified by overriding
+# `extraIntegrations` in datadog-integrations-core.
+#
+# In practice the syntax for using this with additional integrations
+# is not the most beautiful, but it works. For example to use
+# datadog-agent from the top-level with the `ntp`-integration
+# included, one could say:
+#
+# let
+#   integrationsWithNtp = datadog-integrations-core {
+#     # Extra integrations map from the integration name (as in the
+#     # integrations-core repository) to a function that receives the
+#     # Python package set and returns the required dependencies.g
+#     ntp = (ps: [ ps.ntplib ]);
+#   };
+#
+# in ddAgentWithNtp = datadog-agent.overrideAttrs(_ : {
+#   python = integrationsWithNtp.python;
+# });
+#
+# The NixOS module 'datadog-agent' provides a simplified interface to
+# this. Please see the module itself for more information.
+#
+# [1]: https://github.com/DataDog/integrations-core
+
+{ pkgs, python, extraIntegrations ? {} }:
+
+with pkgs.lib;
+
+let
+  src = pkgs.fetchFromGitHub {
+    owner = "DataDog";
+    repo = "integrations-core";
+    rev = version;
+    sha256 = "sha256-CIzuJ97KwsG1k65Y+8IUSka/3JX1pmQKN3hPHzZnGhQ=";
+  };
+  version = "7.38.0";
+
+  # Build helper to build a single datadog integration package.
+  buildIntegration = { pname, ... }@args: python.pkgs.buildPythonPackage (args // {
+    inherit src version;
+    name = "datadog-integration-${pname}-${version}";
+
+    sourceRoot = "${src.name}/${args.sourceRoot or pname}";
+    doCheck = false;
+  });
+
+  # Base package depended on by all other integrations.
+  datadog_checks_base = buildIntegration {
+    pname = "checks-base";
+    sourceRoot = "datadog_checks_base";
+
+    # Make setuptools build the 'base' and 'checks' modules.
+    postPatch = ''
+      substituteInPlace setup.py \
+        --replace "from setuptools import setup" "from setuptools import find_packages, setup" \
+        --replace "packages=['datadog_checks']" "packages=find_packages()"
+    '';
+
+    propagatedBuildInputs = with python.pkgs; [
+      binary
+      cachetools
+      cryptography
+      immutables
+      jellyfish
+      prometheus-client
+      protobuf
+      pydantic
+      python-dateutil
+      pyyaml
+      requests
+      requests-toolbelt
+      requests-unixsocket
+      simplejson
+      uptime
+      wrapt
+    ];
+
+    pythonImportsCheck = [
+      "datadog_checks.base"
+      "datadog_checks.base.checks"
+      "datadog_checks.checks"
+    ];
+  };
+
+  # Default integrations that should be built:
+  defaultIntegrations = {
+    disk     = (ps: [ ps.psutil ]);
+    mongo    = (ps: [ ps.pymongo ]);
+    network  = (ps: [ ps.psutil ]);
+    nginx    = (ps: []);
+    postgres = (ps: with ps; [ pg8000 psycopg2 semver ]);
+    process  = (ps: [ ps.psutil]);
+  };
+
+  # All integrations (default + extra):
+  integrations = defaultIntegrations // extraIntegrations;
+  builtIntegrations = mapAttrs (pname: fdeps: buildIntegration {
+    inherit pname;
+    propagatedBuildInputs = (fdeps python.pkgs) ++ [ datadog_checks_base ];
+  }) integrations;
+
+in builtIntegrations // {
+  inherit datadog_checks_base;
+  python = python.withPackages (_: (attrValues builtIntegrations));
+}
diff --git a/nixpkgs/pkgs/tools/networking/ddclient/default.nix b/nixpkgs/pkgs/tools/networking/ddclient/default.nix
new file mode 100644
index 000000000000..ec84c7c526cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ddclient/default.nix
@@ -0,0 +1,53 @@
+{ lib, fetchFromGitHub, perlPackages, autoreconfHook, perl, curl }:
+
+let
+  myPerl = perl.withPackages (ps: [ ps.JSONPP ]);
+in
+perlPackages.buildPerlPackage rec {
+  pname = "ddclient";
+  version = "3.11.2";
+
+  outputs = [ "out" ];
+
+  src = fetchFromGitHub {
+    owner = "ddclient";
+    repo = "ddclient";
+    rev = "v${version}";
+    sha256 = "sha256-d1G+AM28nBpMWh1QBjm78KKeOL5b5arxERYRCXohwBg=";
+  };
+
+  postPatch = ''
+    touch Makefile.PL
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ curl myPerl ];
+
+  # Prevent ddclient from picking up build time perl which is implicitly added
+  # by buildPerlPackage.
+  configureFlags = [
+    "--with-perl=${lib.getExe myPerl}"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 ddclient $out/bin/ddclient
+    install -Dm644 -t $out/share/doc/ddclient COP* README.* ChangeLog.md
+
+    runHook postInstall
+  '';
+
+  # TODO: run upstream tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Client for updating dynamic DNS service entries";
+    homepage = "https://ddclient.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bjornfor ];
+    mainProgram = "ddclient";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ddns-go/default.nix b/nixpkgs/pkgs/tools/networking/ddns-go/default.nix
new file mode 100644
index 000000000000..0c5882a1c392
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ddns-go/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ddns-go";
+  version = "6.0.3";
+
+  src = fetchFromGitHub {
+    owner = "jeessy2";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-hfL4heW2p1JdNEAQqsRMmvXSeBkw/zWfXk0YPXyqLXk=";
+  };
+
+  vendorHash = "sha256-UsMeYI/YogTbwyaJjVZbGMbxa434BDRBF+5VoSk6G9k=";
+
+  ldflags = [
+    "-X main.version=${version}"
+  ];
+
+  # network required
+  doCheck = false;
+
+  meta = with lib;{
+    homepage = "https://github.com/jeessy2/ddns-go";
+    description = "Simple and easy to use DDNS";
+    license = licenses.mit;
+    maintainers = with maintainers; [ oluceps ];
+    mainProgram = "ddns-go";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dhcpcd/default.nix b/nixpkgs/pkgs/tools/networking/dhcpcd/default.nix
new file mode 100644
index 000000000000..158097d7c166
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dhcpcd/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, udev
+, runtimeShellPackage
+, runtimeShell
+, nixosTests
+, enablePrivSep ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dhcpcd";
+  version = "10.0.6";
+
+  src = fetchFromGitHub {
+    owner = "NetworkConfiguration";
+    repo = "dhcpcd";
+    rev = "v${version}";
+    sha256 = "sha256-tNC5XCA8dShaTIff15mQz8v+YK9sZkRNLCX5qnlpxx4=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    udev
+    runtimeShellPackage # So patchShebangs finds a bash suitable for the installed scripts
+  ];
+
+  postPatch = ''
+    substituteInPlace hooks/dhcpcd-run-hooks.in --replace /bin/sh ${runtimeShell}
+  '';
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ]
+  ++ (
+    if ! enablePrivSep
+    then [ "--disable-privsep" ]
+    else [
+      "--enable-privsep"
+      # dhcpcd disables privsep if it can't find the default user,
+      # so we explicitly specify a user.
+      "--privsepuser=dhcpcd"
+    ]
+  );
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  # Hack to make installation succeed.  dhcpcd will still use /var/db
+  # at runtime.
+  installFlags = [ "DBDIR=$(TMPDIR)/db" "SYSCONFDIR=${placeholder "out"}/etc" ];
+
+  # Check that the udev plugin got built.
+  postInstall = lib.optionalString (udev != null) "[ -e ${placeholder "out"}/lib/dhcpcd/dev/udev.so ]";
+
+  passthru = {
+    inherit enablePrivSep;
+    tests = { inherit (nixosTests.networking.scripted) macvlan dhcpSimple dhcpOneIf; };
+  };
+
+  meta = with lib; {
+    description = "A client for the Dynamic Host Configuration Protocol (DHCP)";
+    homepage = "https://roy.marples.name/projects/dhcpcd";
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ eelco ];
+    mainProgram = "dhcpcd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dhcpdump/default.nix b/nixpkgs/pkgs/tools/networking/dhcpdump/default.nix
new file mode 100644
index 000000000000..e0e95f26d3d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dhcpdump/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, perl
+, installShellFiles
+, libpcap
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dhcpdump";
+  version = "1.9";
+
+  src = fetchFromGitHub {
+    owner = "bbonev";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ck6DLsLQ00unNqPLBKkxaJLDCaPFjTFJcQjTbKSq0U8=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    perl # pod2man
+    installShellFiles
+  ];
+
+  buildInputs = [
+    libpcap
+  ];
+
+  installPhase = ''
+    runHook preBuild
+
+    install -Dm555 dhcpdump "$out/bin/dhcpdump"
+    installManPage dhcpdump.8
+
+    runHook postBuild
+  '';
+
+  meta = with lib; {
+    description = "A tool for visualization of DHCP packets as recorded and output by tcpdump to analyze DHCP server responses";
+    homepage = "https://github.com/bbonev/dhcpdump";
+    changelog = "https://github.com/bbonev/dhcpdump/releases/tag/v${version}";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nickcao ];
+    license = licenses.bsd2;
+    mainProgram = "dhcpdump";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dhcping/default.nix b/nixpkgs/pkgs/tools/networking/dhcping/default.nix
new file mode 100644
index 000000000000..87c84c5795af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dhcping/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dhcping";
+  version = "1.2";
+
+  src = fetchurl {
+    sha256 = "0sk4sg3hn88n44dxikipf3ggfj3ixrp22asb7nry9p0bkfaqdvrj";
+    url = "https://www.mavetju.org/download/dhcping-${version}.tar.gz";
+  };
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Send DHCP request to find out if a DHCP server is running";
+    longDescription = ''
+      dhcping sends either a DHCPREQUEST or DHCPINFORM packet to the server
+      and waits for an answer. Then, if a DHCPREQUEST was send, it will send
+      a DHCPRELEASE back to the server.
+
+      This program should be installed setuid root or ran by root only, as it
+      requires the privileges to bind itself to port 68 (bootpc). Root
+      privileges are dropped as soon as the program has bound itself to that
+      port.
+    '';
+    homepage = "http://www.mavetju.org/unix/general.php";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    mainProgram = "dhcping";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dibbler/default.nix b/nixpkgs/pkgs/tools/networking/dibbler/default.nix
new file mode 100644
index 000000000000..92254231bf7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dibbler/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dibbler";
+  version = "1.0.1";
+
+  src = fetchurl {
+    url = "http://www.klub.com.pl/dhcpv6/dibbler/${pname}-${version}.tar.gz";
+    sha256 = "18bnwkvax02scjdg5z8gvrkvy1lhssfnlpsaqb5kkh30w1vri1i7";
+  };
+
+  configureFlags = [
+    "--enable-resolvconf"
+  ];
+
+  # -fcommon: Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: ./Port-linux/libLowLevel.a(libLowLevel_a-interface.o):(.bss+0x4): multiple definition of `interface_auto_up';
+  #     ./Port-linux/libLowLevel.a(libLowLevel_a-lowlevel-linux-link-state.o):(.bss+0x74): first defined here
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-D__APPLE_USE_RFC_2292=1" + " -fcommon";
+
+  meta = with lib; {
+    description = "Portable DHCPv6 implementation";
+    homepage = "https://klub.com.pl/dhcpv6/";
+    license = licenses.gpl2Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dirb/default.nix b/nixpkgs/pkgs/tools/networking/dirb/default.nix
new file mode 100644
index 000000000000..17a518bdea21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dirb/default.nix
@@ -0,0 +1,47 @@
+{ fetchurl, lib, stdenv, autoreconfHook, curl }:
+
+let
+  major = "2";
+  minor = "22";
+in stdenv.mkDerivation rec {
+  pname = "dirb";
+  version = "${major}.${minor}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dirb/${version}/dirb${major}${minor}.tar.gz";
+    sha256 = "0b7wc2gvgnyp54rxf1n9arn6ymrvdb633v6b3ah138hw4gg8lx7k";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ curl ];
+
+  unpackPhase = ''
+    tar -xf $src
+    find . -exec chmod +x "{}" ";"
+    export sourceRoot="dirb222"
+  '';
+
+  postPatch = ''
+    sed -i "s#/usr#$out#" src/dirb.c
+  '';
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: resume.o:/build/dirb222/src/variables.h:15: multiple definition of `curl';
+  #     crea_wordlist.o:/build/dirb222/src/variables.h:15: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  postInstall = ''
+    mkdir -p $out/share/{dirb,wordlists}
+    cp -r wordlists/ $out/share/dirb/
+    ln -s $out/share/dirb/wordlists/ $out/share/wordlists/dirb
+  '';
+
+  meta = {
+    description = "A web content scanner";
+    homepage = "https://dirb.sourceforge.net/";
+    maintainers = with lib.maintainers; [ bennofs ];
+    license = with lib.licenses; [ gpl2 ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/discord-sh/default.nix b/nixpkgs/pkgs/tools/networking/discord-sh/default.nix
new file mode 100644
index 000000000000..50e84034428d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/discord-sh/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenvNoCC, fetchFromGitHub, makeWrapper, curl, jq, coreutils, file }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "discord-sh";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "ChaoticWeg";
+    repo = "discord.sh";
+    rev = "v${version}";
+    sha256 = "sha256-ZOGhwR9xFzkm+q0Gm8mSXZ9toXG4xGPNwBQMCVanCbY=";
+  };
+
+  # ignore Makefile by disabling buildPhase. Upstream Makefile tries to download
+  # binaries from the internet for linting
+  dontBuild = true;
+
+  # discord.sh looks for the .webhook file in the source code directory, which
+  # isn't mutable on Nix
+  postPatch = ''
+    substituteInPlace discord.sh \
+      --replace 'thisdir="$(cd "$(dirname "$(readlink -f "''${BASH_SOURCE[0]}")")" && pwd)"' 'thisdir="$(pwd)"'
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preCheck
+    $out/bin/discord.sh --help
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 discord.sh $out/bin/discord.sh
+    wrapProgram $out/bin/discord.sh \
+      --set PATH "${lib.makeBinPath [ curl jq coreutils file ]}"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Write-only command-line Discord webhook integration written in 100% Bash script";
+    homepage = "https://github.com/ChaoticWeg/discord.sh";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ matthewcroughan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/djbdns/default.nix b/nixpkgs/pkgs/tools/networking/djbdns/default.nix
new file mode 100644
index 000000000000..52f7e9a0fb55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/djbdns/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchurl, glibc, dns-root-data, nixosTests } :
+
+let
+  version = "1.05";
+
+  manSrc = fetchurl {
+    url = "http://smarden.org/pape/djb/manpages/djbdns-${version}-man-20031023.tar.gz";
+    sha256 = "0sg51gjy6j1hnrra406q1qhf5kvk1m00y8qqhs6r0a699gqmh75s";
+  };
+
+in
+
+stdenv.mkDerivation {
+  pname = "djbdns";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://cr.yp.to/djbdns/djbdns-${version}.tar.gz";
+    sha256 = "0j3baf92vkczr5fxww7rp1b7gmczxmmgrqc8w2dy7kgk09m85k9w";
+  };
+
+  patches = [
+    ./hier.patch
+    ./fix-nix-usernamespace-build.patch
+
+    # To fix https://github.com/NixOS/nixpkgs/issues/119066.
+    # Note that the NixOS test <nixpkgs/nixos/tests/tinydns.nix> tests for this.
+    ./softlimit.patch
+  ];
+
+  postPatch = ''
+    echo gcc -O2 -include ${glibc.dev}/include/errno.h > conf-cc
+    echo $out > conf-home
+    # djbdns ships with an outdated list of root servers
+    awk '/^.?.ROOT-SERVERS.NET/ { print $4 }' ${dns-root-data}/root.hints > dnsroots.global
+    sed -i "s|/etc/dnsroots.global|$out/etc/dnsroots.global|" dnscache-conf.c
+  '';
+
+  installPhase = ''
+    mkdir -pv $out/etc;
+    make setup
+    cd $out;
+    tar xzvf ${manSrc};
+    for n in 1 5 8; do
+      mkdir -p man/man$n;
+      mv -iv djbdns-man/*.$n man/man$n;
+    done;
+    rm -rv djbdns-man;
+  '';
+
+  passthru.tests = {
+    tinydns = nixosTests.tinydns;
+  };
+
+  meta = with lib; {
+    description = "A collection of Domain Name System tools";
+    longDescription = "Includes software for all the fundamental DNS operations: DNS cache: finding addresses of Internet hosts; DNS server: publishing addresses of Internet hosts; and DNS client: talking to a DNS cache.";
+    homepage = "https://cr.yp.to/djbdns.html";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ jerith666 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/djbdns/fix-nix-usernamespace-build.patch b/nixpkgs/pkgs/tools/networking/djbdns/fix-nix-usernamespace-build.patch
new file mode 100644
index 000000000000..abd9e756a21f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/djbdns/fix-nix-usernamespace-build.patch
@@ -0,0 +1,10 @@
+--- djbdns-1.05.org/chkshsgr.c	2001-02-11 21:11:45.000000000 +0000
++++ djbdns-1.05/chkshsgr.c	2017-10-13 10:06:09.392578927 +0100
+@@ -2,6 +2,7 @@
+ 
+ int main()
+ {
++  return 0;
+   short x[4];
+ 
+   x[0] = x[1] = 0;
diff --git a/nixpkgs/pkgs/tools/networking/djbdns/hier.patch b/nixpkgs/pkgs/tools/networking/djbdns/hier.patch
new file mode 100644
index 000000000000..7fddd1213834
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/djbdns/hier.patch
@@ -0,0 +1,15 @@
+--- a/hier.c	2016-04-19 21:22:21.992192405 -0400
++++ b/hier.c	2016-04-19 21:22:33.160229778 -0400
+@@ -2,9 +2,9 @@
+ 
+ void hier()
+ {
+-  c("/","etc","dnsroots.global",-1,-1,0644);
++  c(auto_home,"etc","dnsroots.global",-1,-1,0644);
+ 
+-  h(auto_home,-1,-1,02755);
+-  d(auto_home,"bin",-1,-1,02755);
++  h(auto_home,-1,-1,0755);
++  d(auto_home,"bin",-1,-1,0755);
+ 
+   c(auto_home,"bin","dnscache-conf",-1,-1,0755);
diff --git a/nixpkgs/pkgs/tools/networking/djbdns/softlimit.patch b/nixpkgs/pkgs/tools/networking/djbdns/softlimit.patch
new file mode 100644
index 000000000000..68598703ef43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/djbdns/softlimit.patch
@@ -0,0 +1,12 @@
+diff -Naur a/tinydns-conf.c b/tinydns-conf.c
+--- a/tinydns-conf.c	2001-02-11 21:11:45.000000000 +0000
++++ b/tinydns-conf.c	2021-11-08 17:23:06.181385437 +0000
+@@ -46,7 +46,7 @@
+
+   start("run");
+   outs("#!/bin/sh\nexec 2>&1\nexec envuidgid "); outs(user);
+-  outs(" envdir ./env softlimit -d300000 ");
++  outs(" envdir ./env softlimit -d4500000 ");
+   outs(auto_home); outs("/bin/tinydns\n");
+   finish();
+   perm(0755);
diff --git a/nixpkgs/pkgs/tools/networking/dnschef/default.nix b/nixpkgs/pkgs/tools/networking/dnschef/default.nix
new file mode 100644
index 000000000000..5dbb8980f063
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnschef/default.nix
@@ -0,0 +1,27 @@
+{ buildPythonApplication, fetchFromGitHub, dnslib, lib }:
+
+buildPythonApplication rec {
+  pname = "dnschef";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "iphelix";
+    repo = "dnschef";
+    rev = "a395411ae1f5c262d0b80d06a45a445f696f3243";
+    sha256 = "0ll3hw6w5zhzyqc2p3c9443gcp12sx6ddybg5rjpl01dh3svrk1q";
+  };
+
+  format = "other";
+  installPhase = ''
+    install -D ./dnschef.py $out/bin/dnschef
+  '';
+
+  propagatedBuildInputs = [ dnslib ];
+
+  meta = with lib; {
+    homepage = "https://github.com/iphelix/dnschef";
+    description = "Highly configurable DNS proxy for penetration testers and malware analysts";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.gfrascadorio ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnscrypt-proxy/default.nix b/nixpkgs/pkgs/tools/networking/dnscrypt-proxy/default.nix
new file mode 100644
index 000000000000..319e8d9f822a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnscrypt-proxy/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "dnscrypt-proxy";
+  version = "2.1.5";
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    owner = "DNSCrypt";
+    repo = "dnscrypt-proxy";
+    rev = version;
+    sha256 = "sha256-A9Cu4wcJxrptd9CpgXw4eyMX2nmNAogYBRDeeAjpEZY=";
+  };
+
+  meta = with lib; {
+    description = "A tool that provides secure DNS resolution";
+
+    license = licenses.isc;
+    homepage = "https://dnscrypt.info/";
+    maintainers = with maintainers; [ atemu waynr ];
+    mainProgram = "dnscrypt-proxy";
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnscrypt-wrapper/default.nix b/nixpkgs/pkgs/tools/networking/dnscrypt-wrapper/default.nix
new file mode 100644
index 000000000000..49647153b666
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnscrypt-wrapper/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libsodium, libevent, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "dnscrypt-wrapper";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "Cofyc";
+    repo = "dnscrypt-wrapper";
+    rev = "v${version}";
+    sha256 = "055vxpcfg80b1456p6p0p236pwykknph9x3c9psg8ya3i8qqywkl";
+  };
+
+  enableParallelBuilding = true;
+
+  # causes `dnscrypt-wrapper --gen-provider-keypair` to crash
+  hardeningDisable = [ "fortify3" ];
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ libsodium libevent ];
+
+  passthru.tests = {
+    inherit (nixosTests) dnscrypt-wrapper;
+  };
+
+  meta = with lib; {
+    description = "A tool for adding dnscrypt support to any name resolver";
+    homepage = "https://dnscrypt.info/";
+    license = licenses.isc;
+    maintainers = with maintainers; [ joachifm ];
+    platforms = platforms.linux;
+    mainProgram = "dnscrypt-wrapper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnsmasq/default.nix b/nixpkgs/pkgs/tools/networking/dnsmasq/default.nix
new file mode 100644
index 000000000000..43d2124d682b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnsmasq/default.nix
@@ -0,0 +1,98 @@
+{ lib, stdenv, fetchurl, pkg-config, nettle
+, libidn, libnetfilter_conntrack, nftables, buildPackages
+, dbusSupport ? stdenv.isLinux
+, dbus
+, nixosTests
+}:
+
+let
+  copts = lib.concatStringsSep " " ([
+    "-DHAVE_IDN"
+    "-DHAVE_DNSSEC"
+  ] ++ lib.optionals dbusSupport [
+    "-DHAVE_DBUS"
+  ] ++ lib.optionals stdenv.isLinux [
+    "-DHAVE_CONNTRACK"
+    "-DHAVE_NFTSET"
+  ]);
+in
+stdenv.mkDerivation rec {
+  pname = "dnsmasq";
+  version = "2.89";
+
+  src = fetchurl {
+    url = "https://www.thekelleys.org.uk/dnsmasq/${pname}-${version}.tar.xz";
+    sha256 = "sha256-Ar0jA0bPC51ZCfXhUd8WiycHEDeF62FrVmhYVa3rtgk=";
+  };
+
+  postPatch = lib.optionalString stdenv.hostPlatform.isLinux ''
+    sed '1i#include <linux/sockios.h>' -i src/dhcp.c
+  '';
+
+  preBuild = ''
+    makeFlagsArray=("COPTS=${copts}")
+  '';
+
+  makeFlags = [
+    "DESTDIR="
+    "BINDIR=$(out)/bin"
+    "MANDIR=$(out)/man"
+    "LOCALEDIR=$(out)/share/locale"
+    "PKG_CONFIG=${buildPackages.pkg-config}/bin/${buildPackages.pkg-config.targetPrefix}pkg-config"
+  ];
+
+  hardeningEnable = [ "pie" ];
+
+  postBuild = lib.optionalString stdenv.isLinux ''
+    make -C contrib/lease-tools
+  '';
+
+  # XXX: Does the systemd service definition really belong here when our NixOS
+  # module can create it in Nix-land?
+  postInstall = ''
+    install -Dm644 trust-anchors.conf $out/share/dnsmasq/trust-anchors.conf
+  '' + lib.optionalString stdenv.isDarwin ''
+    install -Dm644 contrib/MacOSX-launchd/uk.org.thekelleys.dnsmasq.plist \
+      $out/Library/LaunchDaemons/uk.org.thekelleys.dnsmasq.plist
+    substituteInPlace $out/Library/LaunchDaemons/uk.org.thekelleys.dnsmasq.plist \
+      --replace "/usr/local/sbin" "$out/bin"
+  '' + lib.optionalString stdenv.isLinux ''
+    install -Dm755 contrib/lease-tools/dhcp_lease_time $out/bin/dhcp_lease_time
+    install -Dm755 contrib/lease-tools/dhcp_release $out/bin/dhcp_release
+    install -Dm755 contrib/lease-tools/dhcp_release6 $out/bin/dhcp_release6
+
+  '' + lib.optionalString dbusSupport ''
+    install -Dm644 dbus/dnsmasq.conf $out/share/dbus-1/system.d/dnsmasq.conf
+    mkdir -p $out/share/dbus-1/system-services
+    cat <<END > $out/share/dbus-1/system-services/uk.org.thekelleys.dnsmasq.service
+    [D-BUS Service]
+    Name=uk.org.thekelleys.dnsmasq
+    Exec=$out/bin/dnsmasq -k -1
+    User=root
+    SystemdService=dnsmasq.service
+    END
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ nettle libidn ]
+    ++ lib.optionals dbusSupport [ dbus ]
+    ++ lib.optionals stdenv.isLinux [ libnetfilter_conntrack nftables ];
+
+  passthru.tests = {
+    prometheus-exporter = nixosTests.prometheus-exporters.dnsmasq;
+
+    # these tests use dnsmasq incidentally
+    inherit (nixosTests) dnscrypt-proxy2;
+    kubernetes-dns-single = nixosTests.kubernetes.dns-single-node;
+    kubernetes-dns-multi = nixosTests.kubernetes.dns-multi-node;
+  };
+
+  meta = with lib; {
+    description = "An integrated DNS, DHCP and TFTP server for small networks";
+    homepage = "https://www.thekelleys.org.uk/dnsmasq/doc.html";
+    license = licenses.gpl2;
+    mainProgram = "dnsmasq";
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ eelco fpletz globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnsmon-go/default.nix b/nixpkgs/pkgs/tools/networking/dnsmon-go/default.nix
new file mode 100644
index 000000000000..2a0dea59c7f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnsmon-go/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, libpcap
+}:
+
+buildGoModule rec {
+  pname = "dnsmon-go";
+  version = "unstable-2022-05-13";
+
+  src = fetchFromGitHub {
+    owner = "jonpulsifer";
+    repo = pname;
+    rev = "ec1d59f1f1314ce310ad4c04d2924e0ebd857f1d";
+    hash = "sha256-lAJ2bjs5VLzrHd09eFK4X0V/cCee2QsgdgiKq+y2c10=";
+  };
+
+  vendorHash = "sha256-aiX+NGUsFK0N9vC5baAHHMr28CbF5Xa4WgYLFFLBYTs=";
+
+  buildInputs = [
+    libpcap
+  ];
+
+  meta = with lib; {
+    description = "Tool to collect DNS traffic";
+    homepage = "https://github.com/jonpulsifer/dnsmon-go";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "dnsmon-go";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnsmonster/default.nix b/nixpkgs/pkgs/tools/networking/dnsmonster/default.nix
new file mode 100644
index 000000000000..e4a5d097f04a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnsmonster/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, libpcap
+}:
+
+buildGoModule rec {
+  pname = "dnsmonster";
+  version = "0.9.9";
+
+  src = fetchFromGitHub {
+    owner = "mosajjal";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-2k/WyAM8h2P2gCLt2J9m/ZekrzCyf/LULGOQYy5bsZs=";
+  };
+
+  vendorHash = "sha256-gAjR1MoudBAx1dxGObIVPqJdfehWkKckKtwM7sTP0w4=";
+
+  buildInputs = [
+    libpcap
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/mosajjal/dnsmonster/util.releaseVersion=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Passive DNS Capture and Monitoring Toolkit";
+    homepage = "https://github.com/mosajjal/dnsmonster";
+    changelog = "https://github.com/mosajjal/dnsmonster/releases/tag/v${version}";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ fab ];
+    broken = stdenv.isDarwin;
+    mainProgram = "dnsmonster";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnsperf/default.nix b/nixpkgs/pkgs/tools/networking/dnsperf/default.nix
new file mode 100644
index 000000000000..5be21155feea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnsperf/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, autoreconfHook
+, fetchFromGitHub
+, ldns
+, libck
+, nghttp2
+, openssl
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dnsperf";
+  version = "2.14.0";
+
+  src = fetchFromGitHub {
+    owner = "DNS-OARC";
+    repo = "dnsperf";
+    rev = "v${version}";
+    hash = "sha256-eDDVNFMjj+0wEBe1qO6r4Bai554Sp+EmP86reJ/VXGk=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    ldns # optional for DDNS (but cheap anyway)
+    libck
+    nghttp2
+    openssl
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Tools for DNS benchmaring";
+    homepage = "https://www.dns-oarc.net/tools/dnsperf";
+    changelog = "https://github.com/DNS-OARC/dnsperf/releases/tag/v${version}";
+    license = licenses.isc;
+    platforms = platforms.unix;
+    mainProgram = "dnsperf";
+    maintainers = with maintainers; [ vcunat mfrw ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnsproxy/default.nix b/nixpkgs/pkgs/tools/networking/dnsproxy/default.nix
new file mode 100644
index 000000000000..7ebc14fc81e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnsproxy/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "dnsproxy";
+  version = "0.54.0";
+
+  src = fetchFromGitHub {
+    owner = "AdguardTeam";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-wA88v8zF5sq3NQwKh8g4k/COviuaegGn6bBTzBMcdGM=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" "-X" "main.VersionString=${version}" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Simple DNS proxy with DoH, DoT, and DNSCrypt support";
+    homepage = "https://github.com/AdguardTeam/dnsproxy";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ contrun ];
+    mainProgram = "dnsproxy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnstake/default.nix b/nixpkgs/pkgs/tools/networking/dnstake/default.nix
new file mode 100644
index 000000000000..37e5e0c38af7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnstake/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+}:
+
+buildGoModule rec {
+  pname = "dnstake";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "pwnesia";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-k6j7DIwK8YAKmEjn8JJO7XBcap9ui6cgUSJG7CeHAAM=";
+  };
+
+  patches = [
+    # https://github.com/pwnesia/dnstake/pull/36
+    (fetchpatch {
+      name = "update-x-sys-fix-darwin.patch";
+      url = "https://github.com/pwnesia/dnstake/commit/974efbbff4ce26d2f2646ca2ceb1316c131cefbe.patch";
+      sha256 = "sha256-fLOGF8damdLROd8T0fH/FGSVX23dtc+yHhSvVCwVeuY=";
+    })
+  ];
+
+  vendorHash = "sha256-lV6dUl+OMUQfhlgNL38k0Re1Mr3VP9b8SI3vTJ8CP18=";
+
+  meta = with lib; {
+    description = "Tool to check missing hosted DNS zones";
+    homepage = "https://github.com/pwnesia/dnstake";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "dnstake";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnstop/default.nix b/nixpkgs/pkgs/tools/networking/dnstop/default.nix
new file mode 100644
index 000000000000..05cd8f67d869
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnstop/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, libpcap, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "dnstop";
+  version = "2014-09-15";
+
+  src = fetchurl {
+    url = "http://dns.measurement-factory.com/tools/dnstop/src/dnstop-${lib.replaceStrings ["-"] [""] version}.tar.gz";
+    sha256 = "0yn5s2825l826506gclbcfk3lzllx9brk9rzja6yj5jv0013vc5l";
+  };
+
+  buildInputs = [ libpcap ncurses ];
+
+  preInstall = ''
+    mkdir -p $out/share/man/man8 $out/bin
+  '';
+
+  meta = {
+    description = "libpcap application that displays DNS traffic on your network";
+    homepage = "http://dns.measurement-factory.com/tools/dnstop";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.unix;
+    mainProgram = "dnstop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnstracer/default.nix b/nixpkgs/pkgs/tools/networking/dnstracer/default.nix
new file mode 100644
index 000000000000..c4e5fc18e6e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnstracer/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libresolv, perl }:
+
+stdenv.mkDerivation rec {
+  version = "1.10";
+  pname = "dnstracer";
+
+  src = fetchurl {
+    url = "https://www.mavetju.org/download/${pname}-${version}.tar.bz2";
+    sha256 = "089bmrjnmsga2n0r4xgw4bwbf41xdqsnmabjxhw8lngg2pns1kb4";
+  };
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ perl /* for pod2man */ ];
+
+  setOutputFlags = false;
+
+  installPhase = ''
+    install -Dm755 -t $out/bin dnstracer
+    install -Dm755 -t $man/share/man/man8 dnstracer.8
+  '';
+
+  buildInputs = [] ++ lib.optionals stdenv.isDarwin [ libresolv ];
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-lresolv";
+
+  meta = with lib; {
+    description = "Determines where a given Domain Name Server (DNS) gets its information from, and follows the chain of DNS servers back to the servers which know the data";
+    homepage = "http://www.mavetju.org/unix/general.php";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.all;
+    mainProgram = "dnstracer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnstwist/default.nix b/nixpkgs/pkgs/tools/networking/dnstwist/default.nix
new file mode 100644
index 000000000000..1d075a75de24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnstwist/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "dnstwist";
+  version = "20240116";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "elceef";
+    repo = "dnstwist";
+    rev = "refs/tags/${version}";
+    hash = "sha256-areFRDi728SedArhUy/rbPzhoFabNoT/WdyyN+6OQK0=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dnspython
+    geoip
+    ppdeep
+    requests
+    tld
+    whois
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "dnstwist"
+  ];
+
+  meta = with lib; {
+    description = "Domain name permutation engine for detecting homograph phishing attacks";
+    homepage = "https://github.com/elceef/dnstwist";
+    changelog = "https://github.com/elceef/dnstwist/releases/tag/${version}";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnsviz/default.nix b/nixpkgs/pkgs/tools/networking/dnsviz/default.nix
new file mode 100644
index 000000000000..aebf7e3cd14f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnsviz/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, dnspython
+, m2crypto
+, pygraphviz
+}:
+
+buildPythonApplication rec {
+  pname = "dnsviz";
+  version = "0.9.4";
+
+  src = fetchFromGitHub {
+    owner = "dnsviz";
+    repo = "dnsviz";
+    rev = "v${version}";
+    sha256 = "sha256-x6LdPVQFfsJIuKde1+LbFKz5bBEi+Mri9sVH0nGsbCU=";
+  };
+
+  patches = [
+    # override DNSVIZ_INSTALL_PREFIX with $out
+    ./fix-path.patch
+  ];
+
+  propagatedBuildInputs = [
+    dnspython
+    m2crypto
+    pygraphviz
+  ];
+
+  postPatch = ''
+    substituteInPlace dnsviz/config.py.in --replace '@out@' $out
+  '';
+
+  # Tests require network connection and /etc/resolv.conf
+  doCheck = false;
+
+  pythonImportsCheck = [ "dnsviz" ];
+
+  meta = with lib; {
+    description = "Tool suite for analyzing and visualizing DNS and DNSSEC behavior";
+    longDescription = ''
+      DNSViz is a tool suite for analysis and visualization of Domain Name System (DNS) behavior,
+      including its security extensions (DNSSEC).
+
+      This tool suite powers the Web-based analysis available at https://dnsviz.net/
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnsviz/fix-path.patch b/nixpkgs/pkgs/tools/networking/dnsviz/fix-path.patch
new file mode 100644
index 000000000000..7906058cd98e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnsviz/fix-path.patch
@@ -0,0 +1,18 @@
+diff --git a/dnsviz/config.py.in b/dnsviz/config.py.in
+index 373fde2..007f0f1 100644
+--- a/dnsviz/config.py.in
++++ b/dnsviz/config.py.in
+@@ -26,12 +26,7 @@ from __future__ import unicode_literals
+ import os
+ import sys
+ 
+-_prefix = '__DNSVIZ_INSTALL_PREFIX__'
+-if (hasattr(sys, 'real_prefix') or hasattr(sys, 'base_prefix')) and \
+-        not _prefix:
+-    DNSVIZ_INSTALL_PREFIX = sys.prefix
+-else:
+-    DNSVIZ_INSTALL_PREFIX = _prefix
++DNSVIZ_INSTALL_PREFIX = "@out@"
+ DNSVIZ_SHARE_PATH = os.path.join(DNSVIZ_INSTALL_PREFIX, 'share', 'dnsviz')
+ JQUERY_PATH = __JQUERY_PATH__
+ JQUERY_UI_PATH = __JQUERY_UI_PATH__
diff --git a/nixpkgs/pkgs/tools/networking/dogdns/Cargo.lock b/nixpkgs/pkgs/tools/networking/dogdns/Cargo.lock
new file mode 100644
index 000000000000..6087b99f00ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dogdns/Cargo.lock
@@ -0,0 +1,1103 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "datetime"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c3f7a77f3e57fedf80e09136f2d8777ebf621207306f6d96d610af048354bc"
+dependencies = [
+ "libc",
+ "redox_syscall 0.1.57",
+ "winapi",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "dns"
+version = "0.2.0-pre"
+dependencies = [
+ "base64",
+ "byteorder",
+ "log",
+ "mutagen",
+ "pretty_assertions",
+ "unic-idna",
+]
+
+[[package]]
+name = "dns-transport"
+version = "0.2.0-pre"
+dependencies = [
+ "cfg-if",
+ "dns",
+ "httparse",
+ "log",
+ "native-tls",
+ "rustls",
+ "webpki",
+ "webpki-roots",
+]
+
+[[package]]
+name = "dog"
+version = "0.2.0-pre"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "datetime",
+ "dns",
+ "dns-transport",
+ "getopts",
+ "ipconfig",
+ "json",
+ "log",
+ "pretty_assertions",
+ "rand",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7"
+dependencies = [
+ "socket2",
+ "widestring",
+ "winapi",
+ "winreg",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "js-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "mutagen"
+version = "0.2.0"
+source = "git+https://github.com/llogiq/mutagen#a6377c4c3f360afeb7a287c1c17e4b69456d5f53"
+dependencies = [
+ "mutagen-core",
+ "mutagen-transform",
+]
+
+[[package]]
+name = "mutagen-core"
+version = "0.2.0"
+source = "git+https://github.com/llogiq/mutagen#a6377c4c3f360afeb7a287c1c17e4b69456d5f53"
+dependencies = [
+ "anyhow",
+ "json",
+ "lazy_static",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "mutagen-transform"
+version = "0.2.0"
+source = "git+https://github.com/llogiq/mutagen#a6377c4c3f360afeb7a287c1c17e4b69456d5f53"
+dependencies = [
+ "mutagen-core",
+ "proc-macro2",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.25.3+1.1.1t"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "924757a6a226bf60da5f7dd0311a34d2b52283dd82ddeb103208ddc66362f80c"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "output_vt100"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "pretty_assertions"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cab0e7c02cf376875e9335e0ba1da535775beb5450d21e1dffca068818ed98b"
+dependencies = [
+ "ansi_term",
+ "ctor",
+ "diff",
+ "output_vt100",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+dependencies = [
+ "base64",
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "sct"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "socket2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-idna"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "621e9cf526f2094d2c2ced579766458a92f8f422d6bb934c503ba1a95823a62d"
+dependencies = [
+ "matches",
+ "unic-idna-mapping",
+ "unic-idna-punycode",
+ "unic-normal",
+ "unic-ucd-bidi",
+ "unic-ucd-normal",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-idna-mapping"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4de70fd4e5331537347a50a0dbc938efb1f127c9f6e5efec980fc90585aa1343"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-idna-punycode"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06feaedcbf9f1fc259144d833c0d630b8b15207b0486ab817d29258bc89f2f8a"
+
+[[package]]
+name = "unic-normal"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f09d64d33589a94628bc2aeb037f35c2e25f3f049c7348b5aa5580b48e6bba62"
+dependencies = [
+ "unic-ucd-normal",
+]
+
+[[package]]
+name = "unic-ucd-bidi"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1d568b51222484e1f8209ce48caa6b430bf352962b877d592c29ab31fb53d8c"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-hangul"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1dc690e19010e1523edb9713224cba5ef55b54894fe33424439ec9a40c0054"
+dependencies = [
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-normal"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86aed873b8202d22b13859dda5fe7c001d271412c31d411fd9b827e030569410"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-hangul",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb"
+
+[[package]]
+name = "web-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "widestring"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winreg"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
+dependencies = [
+ "winapi",
+]
diff --git a/nixpkgs/pkgs/tools/networking/dogdns/default.nix b/nixpkgs/pkgs/tools/networking/dogdns/default.nix
new file mode 100644
index 000000000000..e368e10715e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dogdns/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, pkg-config
+, openssl
+, just
+, pandoc
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dogdns";
+  version = "unstable-2021-10-07";
+
+  src = fetchFromGitHub {
+    owner = "ogham";
+    repo = "dog";
+    rev = "721440b12ef01a812abe5dc6ced69af6e221fad5";
+    sha256 = "sha256-y3T0vXg7631FZ4bzcbQjz3Buui/DFxh9LG8BZWwynp0=";
+  };
+
+  patches = [
+    # remove date info to make the build reproducible
+    # remove commit hash to avoid dependency on git and the need to keep `.git`
+    ./remove-date-info.patch
+  ];
+
+  nativeBuildInputs = [ installShellFiles just pandoc ]
+    ++ lib.optionals stdenv.isLinux [ pkg-config ];
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  outputs = [ "out" "man" ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "mutagen-0.2.0" = "sha256-FnSeNI9lAcxonRFTu7wnP/M/d5UbMzSZ97w+mUqoEg8=";
+    };
+  };
+
+  dontUseJustBuild = true;
+  dontUseJustCheck = true;
+  dontUseJustInstall = true;
+
+  postPatch = ''
+    # update Cargo.lock to work with openssl 3
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  postBuild = ''
+    just man
+  '';
+
+  postInstall = ''
+    installShellCompletion completions/dog.{bash,fish,zsh}
+    installManPage ./target/man/*.1
+  '';
+
+  meta = with lib; {
+    description = "Command-line DNS client";
+    homepage = "https://dns.lookup.dog";
+    license = licenses.eupl12;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "dog";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dogdns/remove-date-info.patch b/nixpkgs/pkgs/tools/networking/dogdns/remove-date-info.patch
new file mode 100644
index 000000000000..539559a3911e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dogdns/remove-date-info.patch
@@ -0,0 +1,11 @@
+--- a/build.rs
++++ b/build.rs
+@@ -34,7 +34,7 @@ fn main() -> io::Result<()> {
+             format!("{}\nv{} \\1;31m(pre-release debug build!)\\0m\n\\1;4;34m{}\\0m", tagline, version_string(), url)
+         }
+         else if is_development_version() {
+-            format!("{}\nv{} [{}] built on {} \\1;31m(pre-release!)\\0m\n\\1;4;34m{}\\0m", tagline, version_string(), git_hash(), build_date(), url)
++            format!("{}\nv{} [nixpkgs] \\1;31m(pre-release!)\\0m\n\\1;4;34m{}\\0m", tagline, version_string(), url)
+         }
+         else {
+             format!("{}\nv{}\n\\1;4;34m{}\\0m", tagline, version_string(), url)
diff --git a/nixpkgs/pkgs/tools/networking/dq/default.nix b/nixpkgs/pkgs/tools/networking/dq/default.nix
new file mode 100644
index 000000000000..94bf2cd5c3b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dq/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "dq";
+  version = "20240101";
+
+  src = fetchFromGitHub {
+    owner = "janmojzis";
+    repo = "dq";
+    rev = "refs/tags/${version}";
+    hash = "sha256-dN2QpQU2jRkSVzaYh2MKbJvx0J1XACHHjsM/ePvZAp8=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 dq dqcache dqcache-makekey dqcache-start -t $out/bin
+    installManPage man/*
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Recursive DNS/DNSCurve server and comandline tool";
+    homepage = "https://github.com/janmojzis/dq";
+    changelog = "https://github.com/janmojzis/dq/releases/tag/${version}";
+    license = licenses.cc0;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/driftnet/default.nix b/nixpkgs/pkgs/tools/networking/driftnet/default.nix
new file mode 100644
index 000000000000..7957d90f05d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/driftnet/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, autoreconfHook
+, cairo
+, fetchFromGitHub
+, giflib
+, glib
+, gtk2-x11
+, libjpeg
+, libpcap
+, libpng
+, libuv
+, libwebsockets
+, libwebp
+, openssl
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "driftnet";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "deiv";
+    repo = "driftnet";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-lMn60vtOMPs1Tr+SnAOUZDrNIO7gEXdHpizjXiEkkoM=";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [
+    pkg-config
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    cairo
+    giflib
+    glib
+    gtk2-x11
+    libjpeg
+    libpcap
+    libpng
+    libuv
+    libwebsockets
+    libwebp
+    openssl
+  ];
+
+  meta = with lib; {
+    description = "Watches network traffic, and picks out and displays JPEG and GIF images for display";
+    homepage = "https://github.com/deiv/driftnet";
+    changelog = "https://github.com/deiv/driftnet/releases/tag/v${version}";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "driftnet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/drill/default.nix b/nixpkgs/pkgs/tools/networking/drill/default.nix
new file mode 100644
index 000000000000..005d24ac323f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/drill/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "drill";
+  version = "0.8.3";
+
+  src = fetchFromGitHub {
+    owner = "fcsonline";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-4y5gpkQB0U6Yq92O6DDD5eq/i/36l/VfeyiE//pcZOk=";
+  };
+
+  cargoHash = "sha256-96eUCg0mzgUFLOKxpwRfzj1jH2Z+aDohBTztvRVWln0=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [
+    pkg-config
+  ];
+
+  OPENSSL_LIB_DIR = "${lib.getLib openssl}/lib";
+  OPENSSL_DIR="${lib.getDev openssl}";
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "HTTP load testing application inspired by Ansible syntax";
+    homepage = "https://github.com/fcsonline/drill";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "drill";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dropbear/default.nix b/nixpkgs/pkgs/tools/networking/dropbear/default.nix
new file mode 100644
index 000000000000..023639d3910d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dropbear/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchurl, glibc, zlib, libxcrypt
+, enableStatic ? stdenv.hostPlatform.isStatic
+, enableSCP ? false
+, sftpPath ? "/run/current-system/sw/libexec/sftp-server"
+}:
+
+let
+  # NOTE: DROPBEAR_PATH_SSH_PROGRAM is only necessary when enableSCP is true,
+  # but it is enabled here always anyways for consistency
+  dflags = {
+    SFTPSERVER_PATH = sftpPath;
+    DROPBEAR_PATH_SSH_PROGRAM = "${placeholder "out"}/bin/dbclient";
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "dropbear";
+  version = "2022.83";
+
+  src = fetchurl {
+    url = "https://matt.ucc.asn.au/dropbear/releases/dropbear-${version}.tar.bz2";
+    sha256 = "sha256-vFoSH/vJS1FxrV6+Ab5CdG1Qqnl8lUmkY5iUoWdJRDs=";
+  };
+
+  dontDisableStatic = enableStatic;
+  configureFlags = lib.optional enableStatic "LDFLAGS=-static";
+
+  CFLAGS = lib.pipe (lib.attrNames dflags) [
+    (builtins.map (name: "-D${name}=\\\"${dflags.${name}}\\\""))
+    (lib.concatStringsSep " ")
+  ];
+
+  # https://www.gnu.org/software/make/manual/html_node/Libraries_002fSearch.html
+  preConfigure = ''
+    makeFlagsArray=(
+      VPATH=$(cat $NIX_CC/nix-support/orig-libc)/lib
+      PROGRAMS="${lib.concatStringsSep " " ([ "dropbear" "dbclient" "dropbearkey" "dropbearconvert" ] ++ lib.optionals enableSCP ["scp"])}"
+    )
+  '';
+
+  postInstall = lib.optionalString enableSCP ''
+    ln -rs $out/bin/scp $out/bin/dbscp
+  '';
+
+  patches = [
+    # Allow sessions to inherit the PATH from the parent dropbear.
+    # Otherwise they only get the usual /bin:/usr/bin kind of PATH
+    ./pass-path.patch
+  ];
+
+  buildInputs = [ zlib libxcrypt ] ++ lib.optionals enableStatic [ glibc.static zlib.static ];
+
+  meta = with lib; {
+    description = "A small footprint implementation of the SSH 2 protocol";
+    homepage = "https://matt.ucc.asn.au/dropbear/dropbear.html";
+    changelog = "https://github.com/mkj/dropbear/raw/DROPBEAR_${version}/CHANGES";
+    license = licenses.mit;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dropbear/pass-path.patch b/nixpkgs/pkgs/tools/networking/dropbear/pass-path.patch
new file mode 100644
index 000000000000..6f37d0155744
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dropbear/pass-path.patch
@@ -0,0 +1,39 @@
+diff --git a/svr-chansession.c b/svr-chansession.c
+index 9ae2e60..2db7598 100644
+--- a/svr-chansession.c
++++ b/svr-chansession.c
+@@ -948,6 +948,8 @@ static void addchildpid(struct ChanSess *chansess, pid_t pid) {
+ static void execchild(const void *user_data) {
+ 	const struct ChanSess *chansess = user_data;
+ 	char *usershell = NULL;
++	const char *path = (getuid() == 0) ? DEFAULT_ROOT_PATH : DEFAULT_PATH;
++	const char *ldpath = NULL;
+ 	char *cp = NULL;
+ 	char *envcp = getenv("LANG");
+ 	if (envcp != NULL) {
+@@ -965,6 +967,11 @@ static void execchild(const void *user_data) {
+ 	seedrandom();
+ #endif
+ 
++	if (getenv("PATH")) {
++		path = getenv("PATH");
++	}
++	ldpath = getenv("LD_LIBRARY_PATH");
++
+ 	/* clear environment if -e was not set */
+ 	/* if we're debugging using valgrind etc, we need to keep the LD_PRELOAD
+ 	 * etc. This is hazardous, so should only be used for debugging. */
+@@ -1012,10 +1019,9 @@ static void execchild(const void *user_data) {
+ 	addnewvar("LOGNAME", ses.authstate.pw_name);
+ 	addnewvar("HOME", ses.authstate.pw_dir);
+ 	addnewvar("SHELL", get_user_shell());
+-	if (getuid() == 0) {
+-		addnewvar("PATH", DEFAULT_ROOT_PATH);
+-	} else {
+-		addnewvar("PATH", DEFAULT_PATH);
++	addnewvar("PATH", path);
++	if (ldpath != NULL) {
++		addnewvar("LD_LIBRARY_PATH", ldpath);
+ 	}
+ 	if (cp != NULL) {
+ 		addnewvar("LANG", cp);
diff --git a/nixpkgs/pkgs/tools/networking/dsniff/default.nix b/nixpkgs/pkgs/tools/networking/dsniff/default.nix
new file mode 100644
index 000000000000..ae663abb08dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dsniff/default.nix
@@ -0,0 +1,89 @@
+{ gcc9Stdenv, lib, fetchFromGitLab, autoreconfHook, libpcap, db, glib, libnet, libnids, symlinkJoin, openssl
+, rpcsvc-proto, libtirpc, libnsl, libnl
+}:
+
+# We compile with GCC 9 since GCC 10 segfaults on the code
+# (see https://bugzilla.redhat.com/show_bug.cgi?id=1862809).
+
+let
+  /*
+  dsniff's build system unconditionnaly wants static libraries and does not
+  support multi output derivations. We do some overriding to give it
+  satisfaction.
+  */
+  staticdb = symlinkJoin {
+    inherit (db) name;
+    paths = with db.overrideAttrs { dontDisableStatic = true; }; [ out dev ];
+    postBuild = ''
+      rm $out/lib/*.so*
+    '';
+  };
+  pcap = symlinkJoin {
+    inherit (libpcap) name;
+    paths = [ (libpcap.overrideAttrs { dontDisableStatic = true; }) ];
+    postBuild = ''
+      cp -rs $out/include/pcap $out/include/net
+      # prevent references to libpcap
+      rm $out/lib/*.so*
+    '';
+  };
+  net = symlinkJoin {
+    inherit (libnet) name;
+    paths = [ (libnet.overrideAttrs { dontDisableStatic = true; }) ];
+    postBuild = ''
+      # prevent dynamic linking, now that we have a static library
+      rm $out/lib/*.so*
+    '';
+  };
+  nids = libnids.overrideAttrs {
+    dontDisableStatic = true;
+  };
+  ssl = symlinkJoin {
+    inherit (openssl) name;
+    paths = with openssl.override { static = true; }; [ out dev ];
+  };
+in gcc9Stdenv.mkDerivation rec {
+  pname = "dsniff";
+  version = "2.4b1";
+  # upstream is so old that nearly every distribution packages the beta version.
+  # Also, upstream only serves the latest version, so we use debian's sources.
+  # this way we can benefit the numerous debian patches to be able to build
+  # dsniff with recent libraries.
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "pkg-security-team";
+    repo = "dsniff";
+    rev = "debian/${version}+debian-30";
+    sha256 = "1fk2k0sfdp5g27i11g0sbzm7al52raz5yr1aibzssnysv7l9xgzh";
+    name = "dsniff.tar.gz";
+  };
+
+  nativeBuildInputs = [ autoreconfHook rpcsvc-proto ];
+  buildInputs = [ glib pcap libtirpc libnsl libnl ];
+  NIX_CFLAGS_LINK = "-lglib-2.0 -lpthread -ltirpc -lnl-3 -lnl-genl-3";
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${libtirpc.dev}/include/tirpc" ];
+  postPatch = ''
+    for patch in debian/patches/*.patch; do
+      patch < $patch
+    done;
+  '';
+  configureFlags = [
+    "--with-db=${staticdb}"
+    "--with-libpcap=${pcap}"
+    "--with-libnet=${net}"
+    "--with-libnids=${nids}"
+    "--with-openssl=${ssl}"
+  ];
+
+  meta = with lib; {
+    description = "collection of tools for network auditing and penetration testing";
+    longDescription = ''
+      dsniff, filesnarf, mailsnarf, msgsnarf, urlsnarf, and webspy passively monitor a network for interesting data (passwords, e-mail, files, etc.). arpspoof, dnsspoof, and macof facilitate the interception of network traffic normally unavailable to an attacker (e.g, due to layer-2 switching). sshmitm and webmitm implement active monkey-in-the-middle attacks against redirected SSH and HTTPS sessions by exploiting weak bindings in ad-hoc PKI.
+    '';
+    homepage = "https://www.monkey.org/~dugsong/dsniff/";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.symphorien ];
+    # bsd and solaris should work as well
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/easyrsa/default.nix b/nixpkgs/pkgs/tools/networking/easyrsa/default.nix
new file mode 100644
index 000000000000..740a9935ca35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/easyrsa/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, openssl, makeWrapper, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "easyrsa";
+  version = "3.1.7";
+
+  src = fetchFromGitHub {
+    owner = "OpenVPN";
+    repo = "easy-rsa";
+    rev = "v${version}";
+    sha256 = "sha256-zdVcT04nj7eE1a6M7WHeWpwG/TVTwyK+WgD70XwPXfY=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/share/easy-rsa
+    cp -r easyrsa3/{*.cnf,x509-types,vars.example} $out/share/easy-rsa
+    install -D -m755 easyrsa3/easyrsa $out/bin/easyrsa
+
+    substituteInPlace $out/bin/easyrsa \
+      --replace /usr/ $out/ \
+      --replace '~VER~' '${version}' \
+      --replace '~GITHEAD~' 'v${version}' \
+      --replace '~DATE~' '1970-01-01'
+
+    # Wrap it with the correct OpenSSL binary.
+    wrapProgram $out/bin/easyrsa \
+      --set EASYRSA_OPENSSL ${openssl.bin}/bin/openssl
+
+    # Helper utility
+    cat > $out/bin/easyrsa-init <<EOF
+    #!${runtimeShell} -e
+    cp -r $out/share/easy-rsa/* .
+    EOF
+    chmod +x $out/bin/easyrsa-init
+  '';
+
+  meta = with lib; {
+    description = "Simple shell based CA utility";
+    homepage = "https://openvpn.net/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.offline maintainers.numinit ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ebpf-verifier/default.nix b/nixpkgs/pkgs/tools/networking/ebpf-verifier/default.nix
new file mode 100644
index 000000000000..79a29cee8be3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ebpf-verifier/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, boost
+, cmake
+, catch2
+, pkg-config
+, substituteAll
+, yaml-cpp
+}:
+
+stdenv.mkDerivation {
+  pname = "ebpf-verifier";
+  version = "unstable-2023-07-15";
+
+  src = fetchFromGitHub {
+    owner = "vbpf";
+    repo = "ebpf-verifier";
+    rev = "de14d3aa3cd2845b621faf32b599766a66e158cf";
+    fetchSubmodules = true;
+    hash = "sha256-gnxB8ZLbTyIYpd61T57LPKFm1MHufeVEq/qN9pu2Vpk=";
+  };
+
+  patches = [
+    (substituteAll {
+      # We will download them instead of cmake's fetchContent
+      src = ./remove-fetchcontent-usage.patch;
+      catch2Src = catch2.src;
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+  ];
+
+  buildInputs = [
+    boost
+    yaml-cpp
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp ../check $out/bin/ebpf-verifier
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "eBPF verifier based on abstract interpretation";
+    homepage = "https://github.com/vbpf/ebpf-verifier";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ gaelreyrol ];
+    mainProgram = "ebpf-verifier";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ebpf-verifier/remove-fetchcontent-usage.patch b/nixpkgs/pkgs/tools/networking/ebpf-verifier/remove-fetchcontent-usage.patch
new file mode 100644
index 000000000000..8a4af1bee19a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ebpf-verifier/remove-fetchcontent-usage.patch
@@ -0,0 +1,14 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index d7cf256..cb94e5a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -6,8 +6,7 @@ project(ebpf_verifier)
+ include(FetchContent)
+ FetchContent_Declare(
+   Catch2
+-  GIT_REPOSITORY https://github.com/catchorg/Catch2.git
+-  GIT_TAG        ac93f1943762f6fc92f0dc5bac0d720a33a27530
++  SOURCE_DIR @catch2Src@
+ )
+ FetchContent_MakeAvailable(Catch2)
+ 
diff --git a/nixpkgs/pkgs/tools/networking/edgedb/0001-dynamically-patchelf-binaries.patch b/nixpkgs/pkgs/tools/networking/edgedb/0001-dynamically-patchelf-binaries.patch
new file mode 100644
index 000000000000..ec2dccfc359a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/edgedb/0001-dynamically-patchelf-binaries.patch
@@ -0,0 +1,34 @@
+diff --git a/src/portable/install.rs b/src/portable/install.rs
+index dc0d932..5394fc1 100644
+--- a/src/portable/install.rs
++++ b/src/portable/install.rs
+@@ -133,8 +133,16 @@ fn unpack_package(cache_file: &Path, target_dir: &Path)
+     for entry in arch.entries()? {
+         let mut entry = entry?;
+         let path = entry.path()?;
++        let is_inside_bin = {
++            let mut path_iter = path.iter();
++            path_iter.next(); // discards first folder
++            path_iter.as_path().starts_with("bin")
++        };
+         if let Some(path) = build_path(&target_dir, &*path)? {
+-            entry.unpack(path)?;
++            entry.unpack(&path)?;
++            if is_inside_bin {
++                nix_patchelf_if_needed(&path);
++            }
+         }
+     }
+     bar.finish_and_clear();
+@@ -203,3 +211,11 @@ pub fn package(pkg_info: &PackageInfo) -> anyhow::Result<InstallInfo> {
+ 
+     Ok(info)
+ }
++
++fn nix_patchelf_if_needed(dest_path: &Path) {
++    let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++        .arg("--set-interpreter")
++        .arg("@dynamicLinker@")
++        .arg(dest_path)
++        .output();
++}
diff --git a/nixpkgs/pkgs/tools/networking/edgedb/Cargo.lock b/nixpkgs/pkgs/tools/networking/edgedb/Cargo.lock
new file mode 100644
index 000000000000..5372163a7ee7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/edgedb/Cargo.lock
@@ -0,0 +1,4276 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aes"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "ansi-escapes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e3c0daaaae24df5995734b689627f8fa02101bc5bbc768be3055b66a010d7af"
+
+[[package]]
+name = "anstream"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "append-only-vec"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5608767d94038891df4c7bb82f6b1beb55fe3d204735985e20de329bc35d5fee"
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "arrayref"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d6b683edf8d1119fe420a94f8a7e389239666aa72e65495d91c00462510151"
+dependencies = [
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "predicates 3.0.3",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "concurrent-queue",
+ "futures-lite",
+ "libc",
+ "log",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "async-listen"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0eff11d7d3dbf808fb25952cc54a0bcf50b501ae6d6ea98a817009b330d0a2a"
+dependencies = [
+ "async-std",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524"
+
+[[package]]
+name = "async-trait"
+version = "0.1.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base16ct"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+[[package]]
+name = "base32"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "base64ct"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a32fd6af2b5827bce66c29053ba0e7c42b9dcab01835835058558c10851a46b"
+
+[[package]]
+name = "basic-toml"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bigdecimal"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa"
+dependencies = [
+ "num-bigint 0.4.3",
+ "num-integer",
+ "num-traits",
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "blake2b_simd"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "constant_time_eq 0.2.4",
+]
+
+[[package]]
+name = "blake3"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729b71f35bd3fa1a4c86b85d32c8b9069ea7fe14f7a53cfabb65f62d4265b888"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "cc",
+ "cfg-if",
+ "constant_time_eq 0.2.4",
+ "digest",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+]
+
+[[package]]
+name = "bstr"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1"
+dependencies = [
+ "memchr",
+ "once_cell",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "bzip2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "num-traits",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "bitflags 1.3.2",
+ "clap_lex 0.2.4",
+ "indexmap 1.9.3",
+ "textwrap",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex 0.5.1",
+ "strsim",
+ "terminal_size 0.3.0",
+]
+
+[[package]]
+name = "clap_complete"
+version = "3.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f7a2e0a962c45ce25afce14220bc24f9dade0a1787f185cecf96bfba7847cd8"
+dependencies = [
+ "clap 3.2.25",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ae8ba90b9d8b007efe66e55e48fb936272f5ca00349b5b0e89877520d35ea7"
+dependencies = [
+ "clap 4.4.6",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "clap_generate"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e1b28c4a802ac3628604fd267cac62aaea74dc61af3410db6b1c44c03b42599"
+dependencies = [
+ "clap 3.2.25",
+ "clap_complete 3.2.5",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
+
+[[package]]
+name = "clicolors-control"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color-print"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a858372ff14bab9b1b30ea504f2a4bc534582aee3e42ba2d41d2a7baba63d5d"
+dependencies = [
+ "color-print-proc-macro",
+]
+
+[[package]]
+name = "color-print-proc-macro"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57e37866456a721d0a404439a1adae37a31be4e0055590d053dfe6981e05003f"
+dependencies = [
+ "nom",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colorful"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97af0562545a7d7f3d9222fcf909963bec36dcb502afaacab98c6ffac8da47ce"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "comma"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55b672471b4e9f9e95499ea597ff64941a309b2cdbffcc46f2cc5e2d971fd335"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "console"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
+dependencies = [
+ "encode_unicode 0.3.6",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "constant_time_eq"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279"
+
+[[package]]
+name = "coolor"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af4d7a805ca0d92f8c61a31c809d4323fdaa939b0b440e544d21db7797c5aaad"
+dependencies = [
+ "crossterm",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc16"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.8.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2102ea4f781910f8a5b98dd061f4c2023f479ce7bb1236330099ceb5a93cf17"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e"
+dependencies = [
+ "nix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys 0.3.7",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys 0.4.1",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dissimilar"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "210ec60ae7d710bed8683e333e9d2855a8a56a3e9892b38bad3bb0d4d29b0d5e"
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "edgedb-cli"
+version = "4.0.2"
+dependencies = [
+ "ansi-escapes",
+ "anyhow",
+ "arc-swap",
+ "assert_cmd",
+ "async-listen",
+ "backtrace",
+ "base32",
+ "base64 0.13.1",
+ "bigdecimal",
+ "bitvec",
+ "blake2b_simd",
+ "blake3",
+ "bytes",
+ "chrono",
+ "clap 4.4.6",
+ "clap_complete 4.4.3",
+ "clicolors-control",
+ "codespan-reporting",
+ "color-print",
+ "colorful",
+ "combine",
+ "crossbeam-utils",
+ "crossterm",
+ "ctrlc",
+ "dirs 4.0.0",
+ "dissimilar",
+ "downcast-rs",
+ "edgedb-cli-derive",
+ "edgedb-derive",
+ "edgedb-errors",
+ "edgedb-protocol",
+ "edgedb-tokio",
+ "edgeql-parser",
+ "env_logger 0.10.0",
+ "fd-lock 3.0.12",
+ "fn-error-context",
+ "fs-err",
+ "futures-util",
+ "gethostname",
+ "hex",
+ "humantime 2.1.0",
+ "humantime-serde",
+ "immutable-chunkmap",
+ "indexmap 2.0.0-pre",
+ "indicatif",
+ "is-terminal",
+ "libc",
+ "libflate",
+ "log",
+ "minimad",
+ "native-tls",
+ "nix",
+ "notify",
+ "num-bigint 0.4.3",
+ "once_cell",
+ "open",
+ "openssl",
+ "os-release",
+ "pem 1.1.1",
+ "predicates 2.1.5",
+ "pretty_assertions",
+ "prettytable-rs",
+ "rand",
+ "regex",
+ "reqwest",
+ "rexpect",
+ "ring",
+ "rpassword",
+ "rustls",
+ "rustyline",
+ "scram",
+ "semver",
+ "serde",
+ "serde_json",
+ "serde_millis",
+ "serde_path_to_error",
+ "serde_str",
+ "sha1",
+ "sha2",
+ "shell-escape",
+ "shutdown_hooks",
+ "signal-hook",
+ "snafu",
+ "strsim",
+ "tar",
+ "tempfile",
+ "term",
+ "termcolor",
+ "termimad",
+ "terminal_size 0.2.6",
+ "test-case",
+ "textwrap",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "toml",
+ "unicode-segmentation",
+ "unicode-width",
+ "url",
+ "urlencoding",
+ "uuid",
+ "wait-timeout",
+ "warp",
+ "webpki",
+ "which",
+ "whoami",
+ "winapi",
+ "winreg",
+ "wslapi",
+ "zip",
+ "zstd 0.12.3+zstd.1.5.2",
+]
+
+[[package]]
+name = "edgedb-cli-derive"
+version = "0.4.0"
+dependencies = [
+ "clap 4.4.6",
+ "clap_generate",
+ "heck",
+ "indexmap 1.9.3",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "termimad",
+ "trybuild",
+]
+
+[[package]]
+name = "edgedb-derive"
+version = "0.5.1"
+source = "git+https://github.com/edgedb/edgedb-rust/#a1094916fe28d090156c006722ca660cc29e06ad"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+ "trybuild",
+]
+
+[[package]]
+name = "edgedb-errors"
+version = "0.4.1"
+source = "git+https://github.com/edgedb/edgedb-rust/#a1094916fe28d090156c006722ca660cc29e06ad"
+dependencies = [
+ "bytes",
+]
+
+[[package]]
+name = "edgedb-protocol"
+version = "0.6.0"
+source = "git+https://github.com/edgedb/edgedb-rust/#a1094916fe28d090156c006722ca660cc29e06ad"
+dependencies = [
+ "bigdecimal",
+ "bitflags 2.4.0",
+ "bytes",
+ "chrono",
+ "edgedb-errors",
+ "num-bigint 0.4.3",
+ "num-traits",
+ "snafu",
+ "uuid",
+]
+
+[[package]]
+name = "edgedb-tokio"
+version = "0.5.0"
+source = "git+https://github.com/edgedb/edgedb-rust/#a1094916fe28d090156c006722ca660cc29e06ad"
+dependencies = [
+ "anyhow",
+ "arc-swap",
+ "async-trait",
+ "base16ct",
+ "base64 0.21.2",
+ "bytes",
+ "crc16",
+ "dirs 5.0.1",
+ "edgedb-derive",
+ "edgedb-errors",
+ "edgedb-protocol",
+ "log",
+ "once_cell",
+ "rand",
+ "rustls",
+ "rustls-native-certs",
+ "rustls-pemfile",
+ "scram",
+ "serde",
+ "serde_json",
+ "sha1",
+ "tls-api",
+ "tls-api-not-tls",
+ "tls-api-rustls",
+ "tokio",
+ "tokio-stream",
+ "url",
+ "webpki",
+ "webpki-roots",
+]
+
+[[package]]
+name = "edgeql-parser"
+version = "0.1.0"
+source = "git+https://github.com/edgedb/edgedb#6f6b4cd1174daff8a1c1a7065659bb7837599b3e"
+dependencies = [
+ "append-only-vec",
+ "base32",
+ "bigdecimal",
+ "bumpalo",
+ "indexmap 1.9.3",
+ "memchr",
+ "num-bigint 0.3.3",
+ "phf",
+ "serde_json",
+ "sha2",
+ "snafu",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encode_unicode"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
+[[package]]
+name = "env_logger"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38"
+dependencies = [
+ "atty",
+ "humantime 1.3.0",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime 2.1.0",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fd-lock"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0010f02effd88c702318c5dde0463206be67495d0b4d906ba7c0a8f166cc7f06"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "fd-lock"
+version = "3.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ae6b3d9530211fb3b12a95374b8b0823be812f53d09e18c5675c0146b09642"
+dependencies = [
+ "cfg-if",
+ "rustix 0.37.7",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "fn-error-context"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cd66269887534af4b0c3e3337404591daa8dc8b9b2b3db71f9523beb4bafb41"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs-err"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541"
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608"
+
+[[package]]
+name = "futures-io"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364"
+
+[[package]]
+name = "futures-task"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366"
+
+[[package]]
+name = "futures-util"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1"
+dependencies = [
+ "futures-core",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818"
+dependencies = [
+ "libc",
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+
+[[package]]
+name = "headers"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584"
+dependencies = [
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "bytes",
+ "headers-core",
+ "http",
+ "httpdate",
+ "mime",
+ "sha1",
+]
+
+[[package]]
+name = "headers-core"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
+dependencies = [
+ "http",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
+dependencies = [
+ "quick-error",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+dependencies = [
+ "humantime 2.1.0",
+ "serde",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "immutable-chunkmap"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7617eb072b88069788fa9d5cadae34faebca64e5325ec5deaa2b4c96510f9e8c"
+dependencies = [
+ "arrayvec",
+ "packed_struct",
+ "packed_struct_codegen",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0-pre"
+source = "git+https://github.com/bluss/indexmap?rev=11ac52c#11ac52c3c828a42d69c5fb3248198511836bfd2f"
+dependencies = [
+ "hashbrown 0.13.2",
+ "serde",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ff8cc23a7393a397ed1d7f56e6365cba772aba9f9912ab968b03043c395d057"
+dependencies = [
+ "console",
+ "instant",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
+]
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix 0.37.7",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kqueue"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78cb0d916e8e396dcad98"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.146"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+[[package]]
+name = "libflate"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ff4ae71b685bbad2f2f391fe74f6b7659a34871c08b210fdc039e43bee07d18"
+dependencies = [
+ "adler32",
+ "crc32fast",
+ "libflate_lz77",
+]
+
+[[package]]
+name = "libflate_lz77"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a52d3a8bfc85f250440e4424db7d857e241a3aebbbe301f3eb606ab15c39acbf"
+dependencies = [
+ "rle-decode-fast",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+dependencies = [
+ "value-bag",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minidl"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87d3d8666e5ed22230c0096edcccf7097905b1e2975869e1b9fe5df40d26d801"
+
+[[package]]
+name = "minimad"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "277639f0198568f70f8fe4ab88a52a67c96bca12f27ba5c17a76acdcb8b45834"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "notify"
+version = "5.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossbeam-channel",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "mio",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+ "serde",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "open"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8"
+dependencies = [
+ "pathdiff",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69b3f656a17a6cbc115b5c7a40c616947d213ba182135b014d6051b73ab6f019"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.25.1+1.1.1t"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ef9a9cc6ea7d9d5e7c4a913dc4b48d0e359eddf01af1dfec96ba7064b4aba10"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "os-release"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82f29ae2f71b53ec19cc23385f8e4f3d90975195aa3d09171ba3bef7159bec27"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+
+[[package]]
+name = "output_vt100"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "packed_struct"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36b29691432cc9eff8b282278473b63df73bea49bc3ec5e67f31a3ae9c3ec190"
+dependencies = [
+ "bitvec",
+ "packed_struct_codegen",
+]
+
+[[package]]
+name = "packed_struct_codegen"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cd6706dfe50d53e0f6aa09e12c034c44faacd23e966ae5a209e8bdb8f179f98"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "pem"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb"
+dependencies = [
+ "base64 0.13.1",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "pem"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_macros",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "polling"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "767eb9f07d4a5ebcb39bbf2d452058a93c011373abf6832e24194a1c3f004794"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "predicates"
+version = "2.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd"
+dependencies = [
+ "difflib",
+ "float-cmp",
+ "itertools",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "itertools",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755"
+dependencies = [
+ "ctor",
+ "diff",
+ "output_vt100",
+ "yansi",
+]
+
+[[package]]
+name = "prettytable-rs"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a"
+dependencies = [
+ "encode_unicode 1.0.0",
+ "is-terminal",
+ "lazy_static",
+ "term",
+ "unicode-width",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "radix_trie"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
+dependencies = [
+ "endian-type",
+ "nibble_vec",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "base64 0.21.2",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rexpect"
+version = "0.5.0"
+source = "git+https://github.com/tailhook/rexpect?branch=default_terminal_size#7643379e581e8019b49070782e5b6df34d762178"
+dependencies = [
+ "comma",
+ "nix",
+ "regex",
+ "tempfile",
+ "thiserror",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted 0.7.1",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rle-decode-fast"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
+
+[[package]]
+name = "rpassword"
+version = "6.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf099a1888612545b683d2661a1940089f6c2e5a8e38979b2159da876bfd956"
+dependencies = [
+ "libc",
+ "serde",
+ "serde_json",
+ "winapi",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "rustix"
+version = "0.37.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac5ffa1efe7548069688cd7028f32591853cd7b5b756d41bcffd2353e4fc75b4"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.10",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "rustyline"
+version = "8.0.0"
+source = "git+https://github.com/tailhook/rustyline?branch=edgedb_20210403#8c0afd236b4869f9fbf41a6a322149feacbe49bd"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "dirs-next",
+ "fd-lock 2.0.0",
+ "libc",
+ "log",
+ "memchr",
+ "nix",
+ "radix_trie",
+ "scopeguard",
+ "smallvec",
+ "unicode-segmentation",
+ "unicode-width",
+ "utf8parse",
+ "winapi",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scram"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7679a5e6b97bac99b2c208894ba0d34b17d9657f0b728c1cd3bf1c5f7f6ebe88"
+dependencies = [
+ "base64 0.13.1",
+ "rand",
+ "ring",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted 0.7.1",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "indexmap 1.9.3",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_millis"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6e2dc780ca5ee2c369d1d01d100270203c4ff923d2a4264812d723766434d00"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_str"
+version = "1.0.0"
+source = "git+https://github.com/tailhook/serde-str#d48076ec69a86e82abeca5f44c0b73ada1fda848"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shell-escape"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
+
+[[package]]
+name = "shutdown_hooks"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6057adedbec913419c92996f395ba69931acbd50b7d56955394cd3f7bedbfa45"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "smawk"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
+
+[[package]]
+name = "snafu"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0656e7e3ffb70f6c39b3c2a86332bb74aa3c679da781642590f3c1118c5045"
+dependencies = [
+ "backtrace",
+ "doc-comment",
+ "snafu-derive",
+]
+
+[[package]]
+name = "snafu-derive"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "475b3bbe5245c26f2d8a6f62d67c1f30eb9fffeccee721c45d162c3ebbdf81b2"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix 0.37.7",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "termimad"
+version = "0.20.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfab44b4bc17601cf226cce31c87462a4a5bd5d325948c8ebbc9e715660a1287"
+dependencies = [
+ "coolor",
+ "crossbeam",
+ "crossterm",
+ "minimad",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+dependencies = [
+ "rustix 0.37.7",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix 0.38.3",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8"
+
+[[package]]
+name = "test-case"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21d6cf5a7dffb3f9dceec8e6b8ca528d9bd71d36c9f074defb548ce161f598c0"
+dependencies = [
+ "test-case-macros",
+]
+
+[[package]]
+name = "test-case-macros"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e45b7bf6e19353ddd832745c8fcf77a17a93171df7151187f26623f2b75b5b26"
+dependencies = [
+ "cfg-if",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "test-cert-gen"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345f92b7cac59507cdaba298c5493f7c40e2063d31f6fc621105183344d5d50a"
+dependencies = [
+ "once_cell",
+ "pem 0.8.3",
+ "tempfile",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+dependencies = [
+ "smawk",
+ "terminal_size 0.2.6",
+ "unicode-linebreak",
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "serde",
+ "time-core",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tls-api"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d1b3dfb0a60da3e8a130c9f2432063d9979928a05c2b2cdcfc9fd05e4f53a3"
+dependencies = [
+ "anyhow",
+ "log",
+ "pem 0.8.3",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "void",
+ "webpki",
+]
+
+[[package]]
+name = "tls-api-not-tls"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "529dda0254aa61462ebe3937ecf877b6b1d7e745d25b74c18ba98593aefd7086"
+dependencies = [
+ "anyhow",
+ "thiserror",
+ "tls-api",
+ "tls-api-test",
+ "tokio",
+]
+
+[[package]]
+name = "tls-api-rustls"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afcd7905a7d9603bc4c1bcf4710141d463cde70f027ab7900bc1d0012712444d"
+dependencies = [
+ "anyhow",
+ "rustls",
+ "thiserror",
+ "tls-api",
+ "tls-api-test",
+ "tokio",
+ "webpki",
+ "webpki-roots",
+]
+
+[[package]]
+name = "tls-api-test"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9df107843d725428d76bb159040fbae6d1524dcf25d5b24c56daa6b37ce9dbb5"
+dependencies = [
+ "anyhow",
+ "env_logger 0.5.13",
+ "log",
+ "pem 0.8.3",
+ "test-cert-gen",
+ "tls-api",
+ "tokio",
+ "untrusted 0.6.2",
+ "webpki",
+]
+
+[[package]]
+name = "tokio"
+version = "1.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "trybuild"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db3115bddce1b5f52dd4b5e0ec8298a66ce733e4cc6759247dc2d1c11508ec38"
+dependencies = [
+ "basic-toml",
+ "glob",
+ "once_cell",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "termcolor",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5faade31a542b8b35855fff6e8def199853b2da8da256da52f52f1316ee3137"
+dependencies = [
+ "hashbrown 0.12.3",
+ "regex",
+]
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "untrusted"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55cd1f4b4e96b46aeb8d4855db4a7a9bd96eeeb5c6a1ab54593328761642ce2f"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa2982af2eec27de306107c027578ff7f423d65f7250e40ce0fea8f45248b81"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "value-bag"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4d330786735ea358f3bc09eea4caa098569c1c93f342d9aca0514915022fe7e"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "warp"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba431ef570df1287f7f8b07e376491ad54f84d26ac473489427231e1718e1f69"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-util",
+ "headers",
+ "http",
+ "hyper",
+ "log",
+ "mime",
+ "mime_guess",
+ "percent-encoding",
+ "pin-project",
+ "rustls-pemfile",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-rustls",
+ "tokio-stream",
+ "tokio-util",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "wchar"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c74d010bf16569f942b0b7d3c777dd674f8ee539b48d809dc548b3453039c2df"
+dependencies = [
+ "proc-macro-hack",
+ "wchar-impl",
+]
+
+[[package]]
+name = "wchar-impl"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f135922b9303f899bfa446fce1eb149f43462f1e9ac7f50e24ea6b913416dd84"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted 0.7.1",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "whoami"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c70234412ca409cc04e864e89523cb0fc37f5e1344ebed5a3ebf4192b6b9f68"
+dependencies = [
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.1",
+ "windows_aarch64_msvc 0.42.1",
+ "windows_i686_gnu 0.42.1",
+ "windows_i686_msvc 0.42.1",
+ "windows_x86_64_gnu 0.42.1",
+ "windows_x86_64_gnullvm 0.42.1",
+ "windows_x86_64_msvc 0.42.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.1",
+ "windows_aarch64_msvc 0.42.1",
+ "windows_i686_gnu 0.42.1",
+ "windows_i686_msvc 0.42.1",
+ "windows_x86_64_gnu 0.42.1",
+ "windows_x86_64_gnullvm 0.42.1",
+ "windows_x86_64_msvc 0.42.1",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "wslapi"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc9c51137636a37c388bb01765a0eae1362915d82a5e238e1a356c400f9f619"
+dependencies = [
+ "minidl",
+ "wchar",
+ "winapi",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
+dependencies = [
+ "aes",
+ "byteorder",
+ "bzip2",
+ "constant_time_eq 0.1.5",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "hmac",
+ "pbkdf2",
+ "sha1",
+ "time",
+ "zstd 0.11.2+zstd.1.5.2",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe 5.0.2+zstd.1.5.2",
+]
+
+[[package]]
+name = "zstd"
+version = "0.12.3+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
+dependencies = [
+ "zstd-safe 6.0.5+zstd.1.5.4",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.5+zstd.1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.8+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/tools/networking/edgedb/default.nix b/nixpkgs/pkgs/tools/networking/edgedb/default.nix
new file mode 100644
index 000000000000..c78548833754
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/edgedb/default.nix
@@ -0,0 +1,74 @@
+{ stdenv
+, lib
+, patchelf
+, fetchFromGitHub
+, rustPlatform
+, makeBinaryWrapper
+, pkg-config
+, curl
+, Security
+, CoreServices
+, libiconv
+, xz
+, perl
+, substituteAll
+# for passthru.tests:
+, edgedb
+, testers
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "edgedb";
+  version = "4.0.2";
+
+  src = fetchFromGitHub {
+    owner = "edgedb";
+    repo = "edgedb-cli";
+    rev = "v${version}";
+    hash = "sha256-uilotat61U6jW1NLh7fVHOujkzUSFRdpeOx+ECGsByY=";
+    fetchSubmodules = true;
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "edgedb-derive-0.5.1" = "sha256-1tbWg3bLab3xlVQxb4G+kpXriO+zQpnrwAESy5Tqsu4=";
+      "edgeql-parser-0.1.0" = "sha256-c5xBuW47xXgy8VLR/P7DvVhLBd0rvI6P9w82IPPsTwo=";
+      "indexmap-2.0.0-pre" = "sha256-QMOmoUHE1F/sp+NeDpgRGqqacWLHWG02YgZc5vAdXZY=";
+      "rexpect-0.5.0" = "sha256-vstAL/fJWWx7WbmRxNItKpzvgGF3SvJDs5isq9ym/OA=";
+      "rustyline-8.0.0" = "sha256-CrICwQbHPzS4QdVIEHxt2euX+g+0pFYe84NfMp1daEc=";
+      "serde_str-1.0.0" = "sha256-CMBh5lxdQb2085y0jc/DrV6B8iiXvVO2aoZH/lFFjak=";
+    };
+  };
+
+  nativeBuildInputs = [ makeBinaryWrapper pkg-config perl ];
+
+  buildInputs = [
+    curl
+  ] ++ lib.optionals stdenv.isDarwin [ CoreServices Security libiconv xz ];
+
+  checkFeatures = [ ];
+
+  patches = [
+    (substituteAll {
+      src = ./0001-dynamically-patchelf-binaries.patch;
+      inherit patchelf;
+      dynamicLinker = stdenv.cc.bintools.dynamicLinker;
+    })
+  ];
+
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = edgedb;
+    command = "edgedb --version";
+  };
+
+  meta = with lib; {
+    description = "EdgeDB cli";
+    homepage = "https://www.edgedb.com/docs/cli/index";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ ahirner kirillrdy ];
+    mainProgram = "edgedb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/eggdrop/default.nix b/nixpkgs/pkgs/tools/networking/eggdrop/default.nix
new file mode 100644
index 000000000000..788a2df8cf10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/eggdrop/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, tcl }:
+
+stdenv.mkDerivation rec {
+  pname = "eggdrop";
+  version = "1.9.5";
+
+  src = fetchurl {
+    url = "https://ftp.eggheads.org/pub/eggdrop/source/${lib.versions.majorMinor version}/eggdrop-${version}.tar.gz";
+    hash = "sha256-4mkY6opk2YV1ecW2DGYaM38gdz7dgwhrNWUlvrWBc2o=";
+  };
+
+  buildInputs = [ tcl ];
+
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    prefix=$out/eggdrop
+    mkdir -p $prefix
+  '';
+
+  postConfigure = ''
+    make config
+  '';
+
+  configureFlags = [
+    "--with-tcllib=${tcl}/lib/lib${tcl.libPrefix}${stdenv.hostPlatform.extensions.sharedLibrary}"
+    "--with-tclinc=${tcl}/include/tcl.h"
+  ];
+
+  meta = with lib; {
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    homepage = "https://www.eggheads.org";
+    description = "An Internet Relay Chat (IRC) bot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/email/default.nix b/nixpkgs/pkgs/tools/networking/email/default.nix
new file mode 100644
index 000000000000..c4ef390e6b81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/email/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, openssl }:
+
+let
+  eMailSrc = fetchFromGitHub {
+    owner = "deanproxy";
+    repo = "eMail";
+    rev = "7d23c8f508a52bd8809e2af4290417829b6bb5ae";
+    sha256 = "1cxxzhm36civ6vjdgrk7mfmlzkih44kdii6l2xgy4r434s8rzcpn";
+  };
+
+  srcRoot = eMailSrc.name;
+
+  dlibSrc = fetchFromGitHub {
+    owner = "deanproxy";
+    repo = "dlib";
+    rev = "f62f29e918748b7cea476220f7492672be81c9de";
+    sha256 = "0h34cikch98sb7nsqjnb9wl384c8ndln3m6yb1172l4y89qjg9rr";
+  };
+
+in
+
+stdenv.mkDerivation {
+  pname = "email-git";
+  version = "unstable-2016-01-31";
+  src = eMailSrc;
+
+  patches = [
+    # Pul patch pending upstream inclusion for -fno-common toolchain support:
+    #   https://github.com/deanproxy/eMail/pull/61
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/deanproxy/eMail/commit/c3c1e52132832be0e51daa6e0037d5bb79a17751.patch";
+      sha256 = "17ndrb65g0v4y521333h4244419s8nncm0yx2jwv12sf0dl6gy8i";
+    })
+  ];
+
+  buildInputs = [ openssl ];
+
+  unpackPhase = ''
+    unpackPhase;
+    cp -Rp ${dlibSrc}/* ${srcRoot}/dlib;
+    chmod -R +w ${srcRoot}/dlib;
+  '';
+
+  meta = {
+    description = "Command line SMTP client";
+    license = with lib.licenses; [ gpl2 ];
+    homepage = "https://deanproxy.com/code";
+    platforms = lib.platforms.unix;
+    mainProgram = "email";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/eternal-terminal/default.nix b/nixpkgs/pkgs/tools/networking/eternal-terminal/default.nix
new file mode 100644
index 000000000000..22ed2dcb80e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/eternal-terminal/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, gflags
+, libsodium
+, openssl
+, protobuf
+, zlib
+, catch2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "eternal-terminal";
+  version = "6.2.4";
+
+  src = fetchFromGitHub {
+    owner = "MisterTea";
+    repo = "EternalTerminal";
+    rev = "refs/tags/et-v${version}";
+    hash = "sha256-9W9Pz0VrFU+HNpf98I3CLrn8+kpjjNLOUK8gGcDJcI8=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    gflags
+    libsodium
+    openssl
+    protobuf
+    zlib
+  ];
+
+  preBuild = ''
+    cp ${catch2}/include/catch2/catch.hpp ../external_imported/Catch2/single_include/catch2/catch.hpp
+  '';
+
+  cmakeFlags = [
+    "-DDISABLE_VCPKG=TRUE"
+    "-DDISABLE_SENTRY=TRUE"
+    "-DDISABLE_CRASH_LOG=TRUE"
+  ];
+
+  CXXFLAGS = lib.optionals stdenv.cc.isClang [
+    "-std=c++17"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Remote shell that automatically reconnects without interrupting the session";
+    homepage = "https://eternalterminal.dev/";
+    changelog = "https://github.com/MisterTea/EternalTerminal/releases/tag/et-v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dezgeg ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/evillimiter/default.nix b/nixpkgs/pkgs/tools/networking/evillimiter/default.nix
new file mode 100644
index 000000000000..20cc10728d60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/evillimiter/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, colorama
+, iproute2
+, iptables
+, netaddr
+, netifaces
+, scapy
+, terminaltables
+, tqdm
+}:
+
+buildPythonApplication rec {
+  pname = "evillimiter";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "bitbrute";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1l0acd4a36wzz1gyc6mcw3zpagyi2mc425c6d4c6anq3jxwm3847";
+  };
+
+  propagatedBuildInputs = [
+    colorama
+    iproute2
+    iptables
+    netaddr
+    netifaces
+    scapy
+    terminaltables
+    tqdm
+  ];
+
+  # no tests present
+  doCheck = false;
+
+  pythonImportsCheck = [ "evillimiter.evillimiter" ];
+
+  meta = with lib; {
+    description = "Tool that monitors, analyzes and limits the bandwidth";
+    longDescription = ''
+      A tool to monitor, analyze and limit the bandwidth (upload/download) of
+      devices on your local network without physical or administrative access.
+      evillimiter employs ARP spoofing and traffic shaping to throttle the
+      bandwidth of hosts on the network.
+    '';
+    homepage = "https://github.com/bitbrute/evillimiter";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/fakeroute/default.nix b/nixpkgs/pkgs/tools/networking/fakeroute/default.nix
new file mode 100644
index 000000000000..533f21e0f5f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/fakeroute/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "fakeroute";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "https://maxwell.ydns.eu/git/rnhmjoj/fakeroute/releases/download/v${version}/fakeroute-${version}.tar.gz";
+    hash = "sha256-DoXGJm8vOlAD6ZuvVAt6bkgfahc8WgyYIXCrgqzfiWg=";
+  };
+
+  passthru.tests.fakeroute = nixosTests.fakeroute;
+
+  meta = with lib; {
+    description = ''
+      Make your machine appears to be anywhere on the internet in a traceroute
+    '';
+    homepage = "https://maxwell.ydns.eu/git/rnhmjoj/fakeroute";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    mainProgram = "fakeroute";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/fast-ssh/default.nix b/nixpkgs/pkgs/tools/networking/fast-ssh/default.nix
new file mode 100644
index 000000000000..3fb812a38ee7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/fast-ssh/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fast-ssh";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "julien-r44";
+    repo = "fast-ssh";
+    rev = "v${version}";
+    sha256 = "sha256-eHJdMe8RU6Meg/9+NCfIneD5BqNUc2yIiQ8Z5UqUBUI=";
+  };
+
+  cargoSha256 = "sha256-sIQNoH3UWX3SwCFCPZEREIFR7C28ml4oGsrq6wuOAT0=";
+
+  patches = [
+    # Can be removed as soon as this is is merged: https://github.com/Julien-R44/fast-ssh/pull/22
+    (fetchpatch {
+      name = "fix-ambiguous-as_ref.patch";
+      url = "https://github.com/Julien-R44/fast-ssh/commit/c082a64a4b412380b2ab145c24161fdaa26175db.patch";
+      hash = "sha256-egkoJF+rQiuClNL8ltzmB7oHngbpOxO29rlwZ3nELOE=";
+    })
+  ];
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "TUI tool to use the SSH config for connections";
+    homepage = "https://github.com/julien-r44/fast-ssh";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "fast-ssh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/fastd/default.nix b/nixpkgs/pkgs/tools/networking/fastd/default.nix
new file mode 100644
index 000000000000..20f8adf71cf8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/fastd/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bison
+, meson
+, ninja
+, pkg-config
+, libmnl
+, libuecc
+, libsodium
+, libcap
+, json_c
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fastd";
+  version = "22";
+
+  src = fetchFromGitHub {
+    owner  = "Neoraider";
+    repo = "fastd";
+    rev = "v${version}";
+    sha256 = "0qni32j7d3za9f87m68wq8zgalvfxdrx1zxi6l4x7vvmpcw5nhpq";
+  };
+
+  nativeBuildInputs = [
+    bison
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    json_c
+    libcap
+    libsodium
+    libuecc
+    openssl
+  ] ++ lib.optionals (stdenv.isLinux) [
+    libmnl
+  ];
+
+  # some options are only available on x86
+  mesonFlags = lib.optionals (!stdenv.hostPlatform.isx86) [
+    "-Dcipher_salsa20_xmm=disabled"
+    "-Dcipher_salsa2012_xmm=disabled"
+    "-Dmac_ghash_pclmulqdq=disabled"
+  ];
+
+  meta = with lib; {
+    description = "Fast and Secure Tunneling Daemon";
+    homepage = "https://projects.universe-factory.net/projects/fastd/wiki";
+    license = with licenses; [ bsd2 bsd3 ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fpletz ];
+    mainProgram = "fastd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/fdm/default.nix b/nixpkgs/pkgs/tools/networking/fdm/default.nix
new file mode 100644
index 000000000000..f0d65a03d895
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/fdm/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, openssl, tdb, zlib, flex, bison }:
+
+stdenv.mkDerivation rec {
+  pname = "fdm";
+  version = "2.2";
+
+  src = fetchFromGitHub {
+    owner = "nicm";
+    repo = pname;
+    rev = version;
+    hash = "sha256-Gqpz+N1ELU5jQpPJAG9s8J9UHWOJNhkT+s7+xuQazd0=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ openssl tdb zlib flex bison ];
+
+  postInstall = ''
+    install fdm-sanitize $out/bin
+    mkdir -p $out/share/doc/${pname}
+    install -m644 MANUAL $out/share/doc/${pname}
+    cp -R examples $out/share/doc/${pname}
+  '';
+
+  meta = with lib; {
+    description = "Mail fetching and delivery tool - should do the job of getmail and procmail";
+    maintainers = with maintainers; [ raskin ];
+    platforms = with platforms; linux ++ darwin;
+    homepage = "https://github.com/nicm/fdm";
+    downloadPage = "https://github.com/nicm/fdm/releases";
+    license = licenses.isc;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ferm/default.nix b/nixpkgs/pkgs/tools/networking/ferm/default.nix
new file mode 100644
index 000000000000..518bb5c26daa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ferm/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, makeWrapper, perl, iptables, nixosTests }:
+
+let
+  inherit (lib.versions) majorMinor;
+in stdenv.mkDerivation rec {
+  version = "2.7";
+  pname = "ferm";
+
+  src = fetchurl {
+    url = "http://ferm.foo-projects.org/download/${majorMinor version}/ferm-${version}.tar.xz";
+    sha256 = "sha256-wA2RDVOU5pZ1YI617g9QTVz9pB6ZCi2akbqsbfk+P5I=";
+  };
+
+  # perl is used at build time to gather the ferm version.
+  nativeBuildInputs = [ makeWrapper perl ];
+  buildInputs = [ perl ];
+
+  makeFlags = [
+    "PERL=perl"
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  postInstall = ''
+    rm -r $out/lib/systemd
+    for i in "$out/sbin/"*; do
+      wrapProgram "$i" --prefix PATH : "${lib.makeBinPath [ iptables ]}"
+    done
+  '';
+
+  passthru.tests.ferm = nixosTests.ferm;
+
+  meta = {
+    homepage = "http://ferm.foo-projects.org/";
+    description = "Tool to maintain complex firewalls";
+    longDescription = ''
+      ferm is a tool to maintain complex firewalls, without having the trouble to
+      rewrite the complex rules over and over again. ferm allows the entire
+      firewall rule set to be stored in a separate file, and to be loaded with one
+      command. The firewall configuration resembles structured programming-like
+      language, which can contain levels and lists.
+    '';
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [mic92];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/filegive/default.nix b/nixpkgs/pkgs/tools/networking/filegive/default.nix
new file mode 100644
index 000000000000..9d85c168c5ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/filegive/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, lib, fetchurl }:
+
+buildGoModule rec {
+  pname = "filegive";
+  version = "unstable-2022-05-29";
+  rev = "5b28e7087a";
+
+  src = fetchurl {
+    url = "https://viric.name/cgi-bin/filegive/tarball/${rev}/filegive-${rev}.tar.gz";
+    hash = "sha256-A69oys59GEysZvQLaYsfoX/X2ENMMH2BGfJqXohQjpc=";
+  };
+
+  vendorHash = "sha256-l7FRl58NWGBynMlGu1SCxeVBEzTdxREvUWzmJDiliZM=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://viric.name/cgi-bin/filegive";
+    description = "Easy p2p file sending program";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ viric ];
+    mainProgram = "filegive";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/findomain/Cargo.lock b/nixpkgs/pkgs/tools/networking/findomain/Cargo.lock
new file mode 100644
index 000000000000..81f9d4667a65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/findomain/Cargo.lock
@@ -0,0 +1,3259 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef"
+dependencies = [
+ "psl",
+ "psl-types",
+]
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "async-compression"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f658e2baef915ba0f26f1f7c42bfb8e12f532a01f449a090ded75ae7a07e9ba2"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "auto_generate_cdp"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5d28b09e3111f54450e21499dea9e488afe002b584b5f0b4816c62b909ba93e"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "reqwest",
+ "serde 1.0.189",
+ "serde_json",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
+dependencies = [
+ "byteorder",
+ "safemem",
+]
+
+[[package]]
+name = "base64"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags 1.3.2",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+ "yaml-rust 0.3.5",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "config"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1b9d958c2b1368a663f05538fc1b5975adce1e19f435acceae987aceeeb369"
+dependencies = [
+ "lazy_static",
+ "nom",
+ "rust-ini",
+ "serde 1.0.189",
+ "serde-hjson",
+ "serde_json",
+ "toml",
+ "yaml-rust 0.4.5",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "cssparser"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa 0.4.8",
+ "matches",
+ "phf 0.8.0",
+ "proc-macro2",
+ "quote",
+ "smallvec",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cssparser-macros"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
+dependencies = [
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "darling"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.9.3",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+
+[[package]]
+name = "derive_builder"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a71d29c78eaaf1534fc79955d500f7f7799ed350c97bceb6cfd908a2241eba7"
+dependencies = [
+ "darling",
+ "derive_builder_core",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cecb1f2c698fd8faf108b53ad47f1fc4cd0c2a16691fe2db2d371f52f71421"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dtoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
+
+[[package]]
+name = "dtoa-short"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74"
+dependencies = [
+ "dtoa",
+]
+
+[[package]]
+name = "ego-tree"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591"
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "failure"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "fhc"
+version = "0.7.1"
+source = "git+https://github.com/Edu4rdSHL/fhc?rev=513ce142003190a54acd5fff05c557fd1574edb6#513ce142003190a54acd5fff05c557fd1574edb6"
+dependencies = [
+ "async-recursion",
+ "clap",
+ "futures",
+ "openssl",
+ "rand 0.8.5",
+ "reqwest",
+ "scraper",
+ "tokio",
+]
+
+[[package]]
+name = "findomain"
+version = "9.0.3"
+dependencies = [
+ "addr",
+ "anyhow",
+ "clap",
+ "config",
+ "crossbeam",
+ "fhc",
+ "futures",
+ "headless_chrome",
+ "lazy_static",
+ "native-tls",
+ "openssl",
+ "postgres",
+ "postgres-native-tls",
+ "rand 0.8.5",
+ "rayon",
+ "reqwest",
+ "rusolver",
+ "serde 1.0.189",
+ "serde_derive",
+ "serde_json",
+ "tokio",
+ "trust-dns-resolver 0.20.4",
+]
+
+[[package]]
+name = "finl_unicode"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding 2.3.0",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "h2"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "headless_chrome"
+version = "0.9.0"
+source = "git+https://github.com/atroche/rust-headless-chrome?rev=61ce783806e5d75a03f731330edae6156bb0a2e0#61ce783806e5d75a03f731330edae6156bb0a2e0"
+dependencies = [
+ "anyhow",
+ "auto_generate_cdp",
+ "base64 0.10.1",
+ "derive_builder",
+ "log 0.4.20",
+ "rand 0.7.3",
+ "regex",
+ "serde 1.0.189",
+ "serde_json",
+ "tempfile",
+ "thiserror",
+ "websocket",
+ "which",
+ "winreg 0.6.2",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
+dependencies = [
+ "log 0.4.20",
+ "mac",
+ "markup5ever",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 1.0.9",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "hyper"
+version = "0.10.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273"
+dependencies = [
+ "base64 0.9.3",
+ "httparse",
+ "language-tags",
+ "log 0.3.9",
+ "mime 0.2.6",
+ "num_cpus",
+ "time",
+ "traitobject",
+ "typeable",
+ "unicase",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.9",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97"
+dependencies = [
+ "futures-util",
+ "http",
+ "hyper 0.14.27",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper 0.14.27",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg 1.1.0",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7"
+dependencies = [
+ "socket2 0.3.19",
+ "widestring 0.4.3",
+ "winapi",
+ "winreg 0.6.2",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
+dependencies = [
+ "socket2 0.5.4",
+ "widestring 1.0.2",
+ "windows-sys",
+ "winreg 0.50.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "language-tags"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lexical-core"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
+dependencies = [
+ "arrayvec",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg 1.1.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+dependencies = [
+ "log 0.4.20",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "markup5ever"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
+dependencies = [
+ "log 0.4.20",
+ "phf 0.10.1",
+ "phf_codegen 0.10.0",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "md-5"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if",
+ "digest",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "mime"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0"
+dependencies = [
+ "log 0.3.9",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log 0.4.20",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nodrop"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
+
+[[package]]
+name = "nom"
+version = "5.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08959a387a676302eebf4ddbcbc611da04285579f76f88ee0506c63b1a61dd4b"
+dependencies = [
+ "lexical-core",
+ "memchr",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
+dependencies = [
+ "num-traits 0.2.17",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "openssl"
+version = "0.10.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "300.1.5+3.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "559068e4c12950d7dcaa1857a61725c0d38d4fc03ff8e070ab31a75d6e316491"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.6",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.8",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_macros",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "postgres"
+version = "0.19.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7915b33ed60abc46040cbcaa25ffa1c7ec240668e0477c4f3070786f5916d451"
+dependencies = [
+ "bytes",
+ "fallible-iterator",
+ "futures-util",
+ "log 0.4.20",
+ "tokio",
+ "tokio-postgres",
+]
+
+[[package]]
+name = "postgres-native-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d442770e2b1e244bb5eb03b31c79b65bb2568f413b899eaba850fa945a65954"
+dependencies = [
+ "futures",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-postgres",
+]
+
+[[package]]
+name = "postgres-protocol"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520"
+dependencies = [
+ "base64 0.21.4",
+ "byteorder",
+ "bytes",
+ "fallible-iterator",
+ "hmac",
+ "md-5",
+ "memchr",
+ "rand 0.8.5",
+ "sha2",
+ "stringprep",
+]
+
+[[package]]
+name = "postgres-types"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c"
+dependencies = [
+ "bytes",
+ "fallible-iterator",
+ "postgres-protocol",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "psl"
+version = "2.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a1be0afcd844b15cfce18bf8cccf2dfa887a00a6454a9ea135f122b948cee91"
+dependencies = [
+ "psl-types",
+]
+
+[[package]]
+name = "psl-types"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac"
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+dependencies = [
+ "autocfg 0.1.8",
+ "libc",
+ "rand_chacha 0.1.1",
+ "rand_core 0.4.2",
+ "rand_hc 0.1.0",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg 0.1.2",
+ "rand_xorshift",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc 0.2.0",
+ "rand_pcg 0.2.1",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.10",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+dependencies = [
+ "libc",
+ "rand_core 0.4.2",
+ "winapi",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "reqwest"
+version = "0.11.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+dependencies = [
+ "async-compression",
+ "base64 0.21.4",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper 0.14.27",
+ "hyper-rustls",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log 0.4.20",
+ "mime 0.3.17",
+ "native-tls",
+ "once_cell",
+ "percent-encoding 2.3.0",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde 1.0.189",
+ "serde_json",
+ "serde_urlencoded",
+ "system-configuration",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls",
+ "tokio-util",
+ "tower-service",
+ "trust-dns-resolver 0.23.1",
+ "url 2.4.1",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg 0.50.0",
+]
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rusolver"
+version = "0.9.1"
+source = "git+https://github.com/Edu4rdSHL/rusolver?rev=cf75cafee7c9d0c257c0b5a361441efc4e247e9c#cf75cafee7c9d0c257c0b5a361441efc4e247e9c"
+dependencies = [
+ "clap",
+ "futures",
+ "rand 0.8.5",
+ "tokio",
+ "trust-dns-resolver 0.20.4",
+]
+
+[[package]]
+name = "rust-ini"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e52c148ef37f8c375d49d5a73aa70713125b7f19095948a923f80afdeb22ec2"
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
+dependencies = [
+ "log 0.4.20",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.4",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[package]]
+name = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "scraper"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5684396b456f3eb69ceeb34d1b5cb1a2f6acf7ca4452131efa3ba0ee2c2d0a70"
+dependencies = [
+ "cssparser",
+ "ego-tree",
+ "getopts",
+ "html5ever",
+ "matches",
+ "selectors",
+ "smallvec",
+ "tendril",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "selectors"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
+dependencies = [
+ "bitflags 1.3.2",
+ "cssparser",
+ "derive_more",
+ "fxhash",
+ "log 0.4.20",
+ "matches",
+ "phf 0.8.0",
+ "phf_codegen 0.8.0",
+ "precomputed-hash",
+ "servo_arc",
+ "smallvec",
+ "thin-slice",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+
+[[package]]
+name = "serde"
+version = "0.8.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8"
+
+[[package]]
+name = "serde"
+version = "1.0.189"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-hjson"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a3a4e0ea8a88553209f6cc6cfe8724ecad22e1acf372793c27d995290fe74f8"
+dependencies = [
+ "lazy_static",
+ "num-traits 0.1.43",
+ "regex",
+ "serde 0.8.23",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.189"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
+dependencies = [
+ "itoa 1.0.9",
+ "ryu",
+ "serde 1.0.189",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.9",
+ "ryu",
+ "serde 1.0.189",
+]
+
+[[package]]
+name = "servo_arc"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
+dependencies = [
+ "nodrop",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+dependencies = [
+ "sha1_smol",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
+
+[[package]]
+name = "socket2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+ "serde 1.0.189",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "stringprep"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6"
+dependencies = [
+ "finl_unicode",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thin-slice"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
+
+[[package]]
+name = "thiserror"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.4",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-postgres"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8"
+dependencies = [
+ "async-trait",
+ "byteorder",
+ "bytes",
+ "fallible-iterator",
+ "futures-channel",
+ "futures-util",
+ "log 0.4.20",
+ "parking_lot 0.12.1",
+ "percent-encoding 2.3.0",
+ "phf 0.11.2",
+ "pin-project-lite",
+ "postgres-protocol",
+ "postgres-types",
+ "rand 0.8.5",
+ "socket2 0.5.4",
+ "tokio",
+ "tokio-util",
+ "whoami",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde 1.0.189",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "traitobject"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.20.4"
+source = "git+https://github.com/Findomain/trust-dns?branch=custombranch#f339a5e806bed9109ad205d2143d8b18701d2ab0"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner 0.3.4",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.2.3",
+ "ipnet",
+ "lazy_static",
+ "log 0.4.20",
+ "rand 0.8.5",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "559ac980345f7f5020883dd3bcacf176355225e01916f8c2efecad7534f682c6"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner 0.6.0",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.4.0",
+ "ipnet",
+ "once_cell",
+ "rand 0.8.5",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "tracing",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.20.4"
+source = "git+https://github.com/Findomain/trust-dns?branch=custombranch#f339a5e806bed9109ad205d2143d8b18701d2ab0"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig 0.2.2",
+ "lazy_static",
+ "log 0.4.20",
+ "lru-cache",
+ "parking_lot 0.11.2",
+ "rand 0.8.5",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "trust-dns-proto 0.20.4",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c723b0e608b24ad04c73b2607e0241b2c98fd79795a95e98b068b6966138a29d"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig 0.3.2",
+ "lru-cache",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "rand 0.8.5",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "trust-dns-proto 0.23.1",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typeable"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887"
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicase"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33"
+dependencies = [
+ "version_check 0.1.5",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+dependencies = [
+ "idna 0.1.5",
+ "matches",
+ "percent-encoding 1.0.1",
+]
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.4.0",
+ "percent-encoding 2.3.0",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log 0.4.20",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[package]]
+name = "websocket"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b255b190f412e45000c35be7fe9b48b39a2ac5eb90d093d421694e5dae8b335c"
+dependencies = [
+ "base64 0.10.1",
+ "bitflags 1.3.2",
+ "byteorder",
+ "hyper 0.10.16",
+ "rand 0.6.5",
+ "sha1",
+ "unicase",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "which"
+version = "3.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
+dependencies = [
+ "failure",
+ "libc",
+]
+
+[[package]]
+name = "whoami"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50"
+dependencies = [
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "widestring"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winreg"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e66366e18dc58b46801afbf2ca7661a9f59cc8c5962c29892b6039b4f86fa992"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
diff --git a/nixpkgs/pkgs/tools/networking/findomain/default.nix b/nixpkgs/pkgs/tools/networking/findomain/default.nix
new file mode 100644
index 000000000000..deb9bb32fe0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/findomain/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "findomain";
+  version = "9.0.3";
+
+  src = fetchFromGitHub {
+    owner = "findomain";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-M6i62JI4HjaM0C2rSK8P5O19JeugFP5xIy1E6vE8KP4=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "fhc-0.7.1" = "sha256-gSAwpuVL+5vLkHTsh60qyza7IoxgUWBQcWl2N7md51s=";
+      "headless_chrome-0.9.0" = "sha256-0BMm0tmCbUL1BSdD6rJLG735FYJsmkSrPQBs2zWx414=";
+      "rusolver-0.9.1" = "sha256-84qe/A+FN8Q+r8tk0waOq+sBgnDpG9bwoQI+K5pE4Wc=";
+      "trust-dns-proto-0.20.4" = "sha256-+oAjyyTXbKir8e5kn8CUmQy5qmzQ47ryvBBdZtzj1TY=";
+    };
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  env = {
+    OPENSSL_NO_VENDOR = true;
+  };
+
+  postInstall = ''
+    installManPage findomain.1
+  '';
+
+  meta = with lib; {
+    description = "The fastest and cross-platform subdomain enumerator";
+    homepage = "https://github.com/Findomain/Findomain";
+    changelog = "https://github.com/Findomain/Findomain/releases/tag/${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ Br1ght0ne figsoda ];
+    mainProgram = "findomain";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/flannel/default.nix b/nixpkgs/pkgs/tools/networking/flannel/default.nix
new file mode 100644
index 000000000000..9bd20bb090f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/flannel/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, nixosTests }:
+
+buildGoModule rec {
+  pname = "flannel";
+  version = "0.24.2";
+  rev = "v${version}";
+
+  vendorHash = "sha256-vxzcFVFbbXeBb9kAJaAkvk26ptGo8CdnPJdcuC9qdF0=";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "flannel-io";
+    repo = "flannel";
+    sha256 = "sha256-pCgrIVB29OhegUuSuWVUaDWcLVI54FH5YlLjDcRf3j8=";
+  };
+
+  ldflags = [ "-X github.com/flannel-io/flannel/pkg/version.Version=${rev}" ];
+
+  # TestRouteCache/TestV6RouteCache fail with "Failed to create newns: operation not permitted"
+  doCheck = false;
+
+  passthru.tests = { inherit (nixosTests) flannel; };
+
+  meta = with lib; {
+    description = "Network fabric for containers, designed for Kubernetes";
+    license = licenses.asl20;
+    homepage = "https://github.com/flannel-io/flannel";
+    maintainers = with maintainers; [ johanot offline ];
+    platforms = with platforms; linux;
+    mainProgram = "flannel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/flannel/plugin.nix b/nixpkgs/pkgs/tools/networking/flannel/plugin.nix
new file mode 100644
index 000000000000..db8b89fa0bfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/flannel/plugin.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "cni-plugin-flannel";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "flannel-io";
+    repo = "cni-plugin";
+    rev = "v${version}";
+    sha256 = "sha256-9AVXm3+VJFLQwe7EHwI8LmWKxfX1r0yjmKeaReQvxR4=";
+  };
+
+  vendorHash = "sha256-DhvaXC/n4yiVDibB8kymzltNhEIxKdTsEDN9Sfc/wxU=";
+
+  ldflags = [
+    "-s" "-w"
+    "-X main.Version=${version}"
+    "-X main.Commit=${version}"
+    "-X main.Program=flannel"
+  ];
+
+  postInstall = ''
+    mv $out/bin/cni-plugin $out/bin/flannel
+  '';
+
+  doCheck = false;
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/flannel 2>&1 | fgrep -q $version
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "flannel CNI plugin";
+    homepage = "https://github.com/flannel-io/cni-plugin/";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbe ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/flvstreamer/default.nix b/nixpkgs/pkgs/tools/networking/flvstreamer/default.nix
new file mode 100644
index 000000000000..2829b3967f91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/flvstreamer/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "flvstreamer";
+  version = "2.1c1";
+
+  src = fetchurl {
+    url = "mirror://savannah/flvstreamer/source/flvstreamer-${version}.tar.gz";
+    sha256 = "e90e24e13a48c57b1be01e41c9a7ec41f59953cdb862b50cf3e667429394d1ee";
+  };
+
+  buildPhase = ''
+    make CC=${stdenv.cc.targetPrefix}cc posix
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp flvstreamer $out/bin
+    cp streams $out/bin
+    cp rtmpsrv $out/bin
+    cp rtmpsuck $out/bin
+  '';
+
+  meta = {
+    description = "Command-line RTMP client";
+
+    longDescription =
+      '' flvstreamer is an open source command-line RTMP client intended to
+         stream audio or video content from all types of flash or rtmp servers.
+      '';
+
+    license = lib.licenses.gpl2Plus;
+
+    homepage = "https://savannah.nongnu.org/projects/flvstreamer";
+
+    maintainers = [ lib.maintainers.thammers ];
+    platforms = with lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/fping/default.nix b/nixpkgs/pkgs/tools/networking/fping/default.nix
new file mode 100644
index 000000000000..df36d8092579
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/fping/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "fping";
+  version = "5.1";
+
+  src = fetchurl {
+    url = "https://www.fping.org/dist/fping-${version}.tar.gz";
+    sha256 = "sha256-HuUmjAY9dmRq8rRCYFLn2BpCtlfmp32OfT0uYP10Cf4=";
+  };
+
+  configureFlags = [ "--enable-ipv6" "--enable-ipv4" ];
+
+  meta = with lib; {
+    homepage = "http://fping.org/";
+    description = "Send ICMP echo probes to network hosts";
+    license = licenses.bsd0;
+    platforms = platforms.all;
+    mainProgram = "fping";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/freebind/default.nix b/nixpkgs/pkgs/tools/networking/freebind/default.nix
new file mode 100644
index 000000000000..57d5f1136a3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/freebind/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, libnetfilter_queue, libnfnetlink }:
+
+stdenv.mkDerivation {
+  pname = "freebind";
+  version = "2017-12-27";
+
+  src = fetchFromGitHub {
+    owner = "blechschmidt";
+    repo = "freebind";
+    rev = "9a13d6f9c12aeea4f6d3513ba2461d34f841f278";
+    sha256 = "1iv2xiz9w8hbz684caw50fn4a9vc8ninfgaqafkh9sa8mzpfzcqr";
+  };
+
+  buildInputs = [ libnetfilter_queue libnfnetlink ];
+
+  postPatch = ''
+    substituteInPlace preloader.c --replace /usr/local/ $out/
+    substituteInPlace Makefile    --replace /usr/local/ $out/
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $out/lib
+  '';
+
+  meta = with lib; {
+    description = "IPv4 and IPv6 address rate limiting evasion tool";
+    homepage = "https://github.com/blechschmidt/freebind";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/frp/default.nix b/nixpkgs/pkgs/tools/networking/frp/default.nix
new file mode 100644
index 000000000000..3f81a7283170
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/frp/default.nix
@@ -0,0 +1,36 @@
+{ buildGoModule, lib, fetchFromGitHub, nixosTests }:
+
+buildGoModule rec {
+  pname = "frp";
+  version = "0.53.2";
+
+  src = fetchFromGitHub {
+    owner = "fatedier";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/z/pZgB4PepJXXjOBuuq1wHXI2pn/KCxY9cdfANdWGQ=";
+  };
+
+  vendorHash = "sha256-mcgHbwdqcIu4BceuQg+Es0dsIpWG0bsIpd056IOxuiY=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/frpc" "cmd/frps" ];
+
+  passthru.tests = {
+    frp = nixosTests.frp;
+  };
+
+  meta = with lib; {
+    description = "Fast reverse proxy";
+    longDescription = ''
+      frp is a fast reverse proxy to help you expose a local server behind a
+      NAT or firewall to the Internet. As of now, it supports TCP and UDP, as
+      well as HTTP and HTTPS protocols, where requests can be forwarded to
+      internal services by domain name. frp also has a P2P connect mode.
+    '';
+    homepage = "https://github.com/fatedier/frp";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gandi-cli/default.nix b/nixpkgs/pkgs/tools/networking/gandi-cli/default.nix
new file mode 100644
index 000000000000..d7394ac94d88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gandi-cli/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonApplication
+, click
+, fetchFromGitHub
+, ipy
+, pyyaml
+, requests
+}:
+
+buildPythonApplication rec {
+  pname = "gandi-cli";
+  version = "1.6";
+
+  src = fetchFromGitHub {
+    owner = "Gandi";
+    repo = "gandi.cli";
+    rev = version;
+    sha256 = "sha256-KLeEbbzgqpmBjeTc5RYsFScym8xtMqVjU+H0lyDM0+o=";
+  };
+
+  propagatedBuildInputs = [
+    click
+    ipy
+    pyyaml
+    requests
+  ];
+
+  # Tests try to contact the actual remote API
+  doCheck = false;
+  pythonImportsCheck = [ "gandi" ];
+
+  meta = with lib; {
+    description = "Command-line interface to the public Gandi.net API";
+    homepage = "https://cli.gandi.net/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gemget/default.nix b/nixpkgs/pkgs/tools/networking/gemget/default.nix
new file mode 100644
index 000000000000..b31d4491b599
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gemget/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gemget";
+  version = "1.9.0";
+
+  src = fetchFromGitHub {
+    owner = "makeworld-the-better-one";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-P5+yRaf2HioKOclJMMm8bJ8/BtBbNEeYU57TceZVqQ8=";
+  };
+
+  vendorHash = "sha256-l8UwkFCCNUB5zyhlyu8YC++MhmcR6midnElCgdj50OU=";
+
+  meta = with lib; {
+    description = "Command line downloader for the Gemini protocol";
+    homepage = "https://github.com/makeworld-the-better-one/gemget";
+    license = licenses.mit;
+    maintainers = with maintainers; [ amfl ];
+    mainProgram = "gemget";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gen6dns/default.nix b/nixpkgs/pkgs/tools/networking/gen6dns/default.nix
new file mode 100644
index 000000000000..92d33d55da98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gen6dns/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "gen6dns";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "https://www.hznet.de/tools/gen6dns-${version}.tar.gz";
+    hash = "sha256-MhYfgzbGPmrhPx89EpObrEkxaII7uz4TbWXeEGF7Xws=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  postInstall = ''
+    installManPage gen6dns.1
+  '';
+
+  configureFlags = lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
+    "ac_cv_func_malloc_0_nonnull=yes"
+  ];
+
+  makeFlags = [ "INSTALL_DIR=$(out)/bin" ];
+
+  meta = with lib; {
+    description = "Tool to generate static DNS records (AAAA and PTR) for hosts using Stateless Address Autoconfig (SLAAC)";
+    homepage = "https://www.hznet.de/tools.html#gen6dns";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ majiir ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/getmail6/default.nix b/nixpkgs/pkgs/tools/networking/getmail6/default.nix
new file mode 100644
index 000000000000..cf3d5402898e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/getmail6/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "getmail6";
+  version = "6.18.13";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-cyX+3LsXqBpAvaOPVpT4EuPzqJm9kki1uNTG+7k3Q28=";
+  };
+
+  # needs a Docker setup
+  doCheck = false;
+
+  pythonImportsCheck = [ "getmailcore" ];
+
+  postPatch = ''
+    # getmail spends a lot of effort to build an absolute path for
+    # documentation installation; too bad it is counterproductive now
+    sed -e '/datadir or prefix,/d' -i setup.py
+    sed -e 's,/usr/bin/getmail,$(dirname $0)/getmail,' -i getmails
+  '';
+
+  meta = with lib; {
+    description = "A program for retrieving mail";
+    homepage = "https://getmail6.org";
+    changelog = "https://github.com/getmail6/getmail6/blob/${src.rev}/docs/CHANGELOG";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ abbe dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ghostunnel/default.nix b/nixpkgs/pkgs/tools/networking/ghostunnel/default.nix
new file mode 100644
index 000000000000..85ffdefb7424
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ghostunnel/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, buildGoModule
+, fetchFromGitHub
+, lib
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "ghostunnel";
+  version = "1.7.3";
+
+  src = fetchFromGitHub {
+    owner = "ghostunnel";
+    repo = "ghostunnel";
+    rev = "v${version}";
+    hash = "sha256-6yGAXJOyXNj0xf+1vKxVcU6w3VMpSLh+6PC+yKzFbrs=";
+  };
+
+  vendorHash = null;
+
+  deleteVendor = true;
+
+  # The certstore directory isn't recognized as a subpackage, but is when moved
+  # into the vendor directory.
+  postUnpack = ''
+    mkdir -p $sourceRoot/vendor/ghostunnel
+    mv $sourceRoot/certstore $sourceRoot/vendor/ghostunnel/
+  '';
+
+  passthru.tests = {
+    nixos = nixosTests.ghostunnel;
+    podman = nixosTests.podman-tls-ghostunnel;
+  };
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "TLS proxy with mutual authentication support for securing non-TLS backend applications";
+    homepage = "https://github.com/ghostunnel/ghostunnel#readme";
+    changelog = "https://github.com/ghostunnel/ghostunnel/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ roberth ];
+    mainProgram = "ghostunnel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ghz/default.nix b/nixpkgs/pkgs/tools/networking/ghz/default.nix
new file mode 100644
index 000000000000..89253f3fe489
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ghz/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, ghz }:
+
+buildGoModule rec {
+  pname = "ghz";
+  version = "0.117.0";
+
+  src = fetchFromGitHub {
+    owner = "bojand";
+    repo = "ghz";
+    rev = "v${version}";
+    sha256 = "sha256-aAqbSPcz7qQID4H0Vu3VTnbECvlj+We9K5F656k9jTw=";
+  };
+
+  vendorHash = "sha256-jtzCOF5TAHv3PiGxBx65IR/3x6JpqMzsWW8amab8hqQ=";
+
+  subPackages = [ "cmd/ghz" "cmd/ghz-web" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = ghz;
+    };
+    web-version = testers.testVersion {
+      package = ghz;
+      command = "ghz-web -v";
+    };
+  };
+
+  meta = with lib; {
+    description = "Simple gRPC benchmarking and load testing tool";
+    homepage = "https://ghz.sh";
+    license = licenses.asl20;
+    maintainers = [ maintainers.zombiezen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/girsh/default.nix b/nixpkgs/pkgs/tools/networking/girsh/default.nix
new file mode 100644
index 000000000000..ebec6f968df8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/girsh/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "girsh";
+  version = "0.41";
+
+  src = fetchFromGitHub {
+    owner = "nodauf";
+    repo = "Girsh";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-MgzIBag0Exoh0TXW/AD0lbSOj7PVkMeVYQ8v5jdCgAs=";
+  };
+
+  vendorHash = "sha256-8NPFohguMX/X1khEPF+noLBNe/MUoPpXS2PN6SiotL8=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  postInstall = ''
+    mv $out/bin/src $out/bin/$pname
+  '';
+
+  meta = with lib; {
+    description = "Automatically spawn a reverse shell fully interactive for Linux or Windows victim";
+    homepage = "https://github.com/nodauf/Girsh";
+    changelog = "https://github.com/nodauf/Girsh/releases/tag/v${version}";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/globalping-cli/default.nix b/nixpkgs/pkgs/tools/networking/globalping-cli/default.nix
new file mode 100644
index 000000000000..8c77a942d663
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/globalping-cli/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, nix-update-script }:
+
+buildGoModule rec {
+  pname = "globalping-cli";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "jsdelivr";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-bPHS980iByWEBiqs4CEoI8SdlI4vaqGhyIRrXUUtVOo=";
+  };
+
+  vendorHash = "sha256-PiSFDA6mZNDe6BhmKxAGuXsBZ+3aBFJ/gBwY/a6Z5gE=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  CGO_ENABLED = 0;
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  postInstall = ''
+    mv $out/bin/${pname} $out/bin/globalping
+    installShellCompletion --cmd globalping \
+      --bash <($out/bin/globalping completion bash) \
+      --fish <($out/bin/globalping completion fish) \
+      --zsh <($out/bin/globalping completion zsh)
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A simple CLI tool to run networking commands remotely from hundreds of globally distributed servers";
+    homepage = "https://www.jsdelivr.com/globalping/cli";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ xyenon ];
+    mainProgram = "globalping";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/globalprotect-openconnect/default.nix b/nixpkgs/pkgs/tools/networking/globalprotect-openconnect/default.nix
new file mode 100644
index 000000000000..5b00de2fda85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/globalprotect-openconnect/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchurl
+, cmake, qtwebsockets, qtwebengine, qtkeychain, wrapQtAppsHook, openconnect
+}:
+
+stdenv.mkDerivation rec {
+  pname = "globalprotect-openconnect";
+  version = "1.4.9";
+
+  src = fetchurl {
+    url = "https://github.com/yuezk/GlobalProtect-openconnect/releases/download/v${version}/globalprotect-openconnect-${version}.tar.gz";
+    hash = "sha256-vhvVKESLbqHx3XumxbIWOXIreDkW3yONDMXMHxhjsvk=";
+  };
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  buildInputs = [ openconnect qtwebsockets qtwebengine qtkeychain ];
+
+  patchPhase = ''
+    substituteInPlace GPService/gpservice.h \
+      --replace /usr/local/bin/openconnect ${openconnect}/bin/openconnect;
+    substituteInPlace GPService/CMakeLists.txt \
+      --replace /etc/gpservice $out/etc/gpservice;
+  '';
+
+  meta = with lib; {
+    description = "GlobalProtect VPN client (GUI) for Linux based on OpenConnect that supports SAML auth mode";
+    homepage = "https://github.com/yuezk/GlobalProtect-openconnect";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.jerith666 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gmrender-resurrect/default.nix b/nixpkgs/pkgs/tools/networking/gmrender-resurrect/default.nix
new file mode 100644
index 000000000000..70ad352a6aad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gmrender-resurrect/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, makeWrapper, gstreamer
+, gst-plugins-base, gst-plugins-good, gst-plugins-bad, gst-plugins-ugly, gst-libav, libupnp }:
+
+let
+  version = "0.1";
+
+  pluginPath = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" [ gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav ];
+in
+  stdenv.mkDerivation {
+    pname = "gmrender-resurrect";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "hzeller";
+      repo = "gmrender-resurrect";
+      rev = "v${version}";
+      sha256 = "sha256-FR5bMjwPnY1/PNdPRiaxoY1keogq40M06YOaoks4zVY=";
+    };
+
+    buildInputs = [ gstreamer libupnp ];
+    nativeBuildInputs = [ autoreconfHook pkg-config makeWrapper ];
+
+    postInstall = ''
+      for prog in "$out/bin/"*; do
+          wrapProgram "$prog" --suffix GST_PLUGIN_SYSTEM_PATH_1_0 : "${pluginPath}"
+      done
+    '';
+
+    meta = with lib; {
+      description = "Resource efficient UPnP/DLNA renderer, optimal for Raspberry Pi, CuBox or a general MediaServer";
+      homepage = "https://github.com/hzeller/gmrender-resurrect";
+      license = licenses.gpl2Plus;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ koral hzeller ];
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/networking/gnirehtet/default.nix b/nixpkgs/pkgs/tools/networking/gnirehtet/default.nix
new file mode 100644
index 000000000000..be511c756587
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gnirehtet/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, fetchzip
+, androidenv
+, makeWrapper
+}:
+let
+version = "2.5.1";
+apk = stdenv.mkDerivation {
+  pname = "gnirehtet.apk";
+  inherit version;
+  src = fetchzip {
+    url = "https://github.com/Genymobile/gnirehtet/releases/download/v${version}/gnirehtet-rust-linux64-v${version}.zip";
+    hash = "sha256-e1wwMhcco9VNoBUzbEq1ESbkX2bqTOkCbPmnV9CpvGo=";
+  };
+  installPhase = ''
+    mkdir $out
+    mv gnirehtet.apk $out
+  '';
+};
+in
+rustPlatform.buildRustPackage rec {
+  pname = "gnirehtet";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "Genymobile";
+    repo = "gnirehtet";
+    rev = "v${version}";
+    hash = "sha256-ewLYCZgkjbh6lR9e4iTddCIrB+5dxyviIXhOqlZsLqc=";
+  };
+  passthru = {
+    inherit apk;
+  };
+
+  sourceRoot = "${src.name}/relay-rust";
+
+  cargoHash = "sha256-3oVWFMFzYsuCec1wxZiHXW6O45qbdL1npqYrg/m4SPc=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/gnirehtet \
+    --set GNIREHTET_APK ${apk}/gnirehtet.apk \
+    --set ADB ${androidenv.androidPkgs_9_0.platform-tools}/bin/adb
+  '';
+
+  meta = with lib; {
+    description = "Reverse tethering over adb for Android";
+    longDescription = ''
+      This project provides reverse tethering over adb for Android: it allows devices to use the internet connection of the computer they are plugged on. It does not require any root access (neither on the device nor on the computer).
+
+      This relies on adb, make sure you have the required permissions/udev rules.
+    '';
+    homepage = "https://github.com/Genymobile/gnirehtet";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # gnirehtet.apk
+    ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ symphorien ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/go-shadowsocks2/default.nix b/nixpkgs/pkgs/tools/networking/go-shadowsocks2/default.nix
new file mode 100644
index 000000000000..ac6bbc1663aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/go-shadowsocks2/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-shadowsocks2";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "shadowsocks";
+    repo = "go-shadowsocks2";
+    rev = "v${version}";
+    sha256 = "sha256-z2+5q8XlxMN7x86IOMJ0qbrW4Wrm1gp8GWew51yBRFg=";
+  };
+
+  vendorHash = "sha256-RrHksWET5kicbdQ5HRDWhNxx4rTi2zaVeaPoLdg4uQw=";
+
+  meta = with lib; {
+    description = "Fresh implementation of Shadowsocks in Go";
+    homepage = "https://github.com/shadowsocks/go-shadowsocks2/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ oxzi ];
+    mainProgram = "go-shadowsocks2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gobgp/default.nix b/nixpkgs/pkgs/tools/networking/gobgp/default.nix
new file mode 100644
index 000000000000..ab2ae59950cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gobgp/default.nix
@@ -0,0 +1,33 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "gobgp";
+  version = "3.23.0";
+
+  src = fetchFromGitHub {
+    owner = "osrg";
+    repo = "gobgp";
+    rev = "v${version}";
+    sha256 = "sha256-PUwYcwWgaV/DQl565fugppc+I/y7z7Ns3P4SspS88ts=";
+  };
+
+  vendorHash = "sha256-5eB3vFOo3LCsjMnWYFH0yq5+IunwKXp5C34x6NvpFZ8=";
+
+  postConfigure = ''
+    export CGO_ENABLED=0
+  '';
+
+  ldflags = [
+    "-s" "-w" "-extldflags '-static'"
+  ];
+
+  subPackages = [ "cmd/gobgp" ];
+
+  meta = with lib; {
+    description = "A CLI tool for GoBGP";
+    homepage = "https://osrg.github.io/gobgp/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ higebu ];
+    mainProgram = "gobgp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/godns/default.nix b/nixpkgs/pkgs/tools/networking/godns/default.nix
new file mode 100644
index 000000000000..a41d1993270b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/godns/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+}:
+
+buildGoModule rec {
+  pname = "godns";
+  version = "3.0.7";
+
+  src = fetchFromGitHub {
+    owner = "TimothyYe";
+    repo = "godns";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-7zgvrEVt8xg54NijcqnXoZcXetzOu9h3Ucw7w03YagU=";
+  };
+
+  vendorHash = "sha256-veDrGB6gjUa8G/UyKzEgH2ItGGEPlXDePahq2XP2nAo=";
+
+  # Some tests require internet access, broken in sandbox
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A dynamic DNS client tool supports AliDNS, Cloudflare, Google Domains, DNSPod, HE.net & DuckDNS & DreamHost, etc";
+    homepage = "https://github.com/TimothyYe/godns";
+    changelog = "https://github.com/TimothyYe/godns/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ yinfeng ];
+    mainProgram = "godns";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/godspeed/default.nix b/nixpkgs/pkgs/tools/networking/godspeed/default.nix
new file mode 100644
index 000000000000..64441c1674dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/godspeed/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, libpcap
+}:
+
+buildGoModule rec {
+  pname = "godspeed";
+  version = "unstable-2021-08-27";
+
+  src = fetchFromGitHub {
+    owner = "redcode-labs";
+    repo = "GodSpeed";
+    rev = "c02b184ab0fd304d1bd8cbe1566a3d3de727975e";
+    sha256 = "sha256-y/mCfNWe5ShdxEz8IUQ8zUzgVkUy/+5lX6rcJ3r6KoI=";
+  };
+
+  vendorHash = "sha256-DCDAuKvov4tkf77nJNo9mQU/bAeQasp4VBQRtLX+U6c=";
+
+  buildInputs = [
+    libpcap
+  ];
+
+  postFixup = ''
+    mv $out/bin/GodSpeed $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Manager for reverse shells";
+    homepage = "https://github.com/redcode-labs/GodSpeed";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ] ++ teams.redcodelabs.members;
+    mainProgram = "godspeed";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gof5/default.nix b/nixpkgs/pkgs/tools/networking/gof5/default.nix
new file mode 100644
index 000000000000..ead38427816c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gof5/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "gof5";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "kayrus";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "10qh7rj8s540ghjdvymly53vny3n0qd0z0ixy24n026jjhgjvnpl";
+  };
+
+  vendorHash = null;
+
+  # The tests are broken and apparently you need to uncomment some lines in the
+  # code in order for it to work.
+  # See: https://github.com/kayrus/gof5/blob/674485bdf5a0eb2ab57879a32a2cb4bab8d5d44c/pkg/client/http.go#L172-L174
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Open Source F5 BIG-IP VPN client";
+    homepage = "https://github.com/kayrus/gof5";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ leixb ];
+    mainProgram = "gof5";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/goflow/default.nix b/nixpkgs/pkgs/tools/networking/goflow/default.nix
new file mode 100644
index 000000000000..a057fcf6130e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/goflow/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "goflow";
+  version = "3.4.4";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-nMWAvvJj1S5W4ItOT212bn9CPG5Lpdd+k8ciwGmeu0w=";
+  };
+
+  vendorHash = "sha256-fOlfVI8v7KqNSRhAPlZBSHKfZRlCbCgjnMV/6bsqDhg=";
+
+  meta = with lib; {
+    description = "A NetFlow/IPFIX/sFlow collector in Go";
+    homepage = "https://github.com/cloudflare/goflow";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ heph2 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/goflow2/default.nix b/nixpkgs/pkgs/tools/networking/goflow2/default.nix
new file mode 100644
index 000000000000..9ec8c5105724
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/goflow2/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "goflow2";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "netsampler";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-eI5Czx721aty1b+rs8uHrx0IBM/DK7bkPck1QIYPcNI=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  vendorHash = "sha256-9Ebrkizt/r60Kxh291CLzwKIkpdQqJuVYQ2umxih9lo=";
+
+  meta = with lib; {
+    description = "High performance sFlow/IPFIX/NetFlow Collector";
+    homepage = "https://github.com/netsampler/goflow2";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ yuka ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/goimapnotify/default.nix b/nixpkgs/pkgs/tools/networking/goimapnotify/default.nix
new file mode 100644
index 000000000000..34de361d46b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/goimapnotify/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule, fetchFromGitLab, lib, runtimeShell }:
+
+buildGoModule rec {
+  pname = "goimapnotify";
+  version = "2.3.11";
+
+  src = fetchFromGitLab {
+    owner = "shackra";
+    repo = "goimapnotify";
+    rev = version;
+    sha256 = "sha256-b3w+SqmxRY/24qgFUSM4RQswObAH5jy3yEfGXY298Ko=";
+  };
+
+  vendorHash = "sha256-DphGe9jbKo1aIfpF5kRYNSn/uIYHaRMrygda5t46svw=";
+
+  postPatch = ''
+    for f in command.go command_test.go; do
+      substituteInPlace $f --replace '"sh"' '"${runtimeShell}"'
+    done
+  '';
+
+  meta = with lib; {
+    description =
+      "Execute scripts on IMAP mailbox changes (new/deleted/updated messages) using IDLE";
+    homepage = "https://gitlab.com/shackra/goimapnotify";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wohanley rafaelrc ];
+    mainProgram = "goimapnotify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/goodhosts/default.nix b/nixpkgs/pkgs/tools/networking/goodhosts/default.nix
new file mode 100644
index 000000000000..2604d751d8e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/goodhosts/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+}:
+
+buildGoModule rec {
+  pname = "goodhosts";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "goodhosts";
+    repo = "cli";
+    rev = "v${version}";
+    hash = "sha256-ZasS7AYGYPV+nzp9JbJC5pD0yQ+ik+QnuL+3qC1uqFk=";
+  };
+
+  ldflags = [
+    "-s -w -X main.version=${version}"
+  ];
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/goodhosts
+  '';
+
+  vendorHash = "sha256-t/pdJWz6rLnBbH8iq9Nqy+E+DD2770UCEcowwStPdqM=";
+
+  meta = with lib; {
+    description = "A CLI tool for managing hostfiles";
+    license = licenses.mit;
+    homepage = "https://github.com/goodhosts/cli/tree/main";
+    maintainers = with maintainers; [ schinmai-akamai ];
+    mainProgram = "goodhosts";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/goreplay/default.nix b/nixpkgs/pkgs/tools/networking/goreplay/default.nix
new file mode 100644
index 000000000000..71081713c70d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/goreplay/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, libpcap }:
+
+buildGoModule rec {
+  pname = "goreplay";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "buger";
+    repo = "goreplay";
+    rev = version;
+    sha256 = "sha256-FiY9e5FgpPu+K8eoO8TsU3xSaSoPPDxYEu0oi/S8Q1w=";
+  };
+
+  patches = [
+    # Fix build on arm64-linux, see https://github.com/buger/goreplay/pull/1140
+    (fetchpatch {
+      url = "https://github.com/buger/goreplay/commit/a01afa1e322ef06f36995abc3fda3297bdaf0140.patch";
+      sha256 = "sha256-w3aVe/Fucwd2OuK5Fu2jJTbmMci8ilWaIjYjsWuLRlo=";
+    })
+  ];
+
+  vendorHash = "sha256-jDMAtcq3ZowFdky5BdTkVNxq4ltkhklr76nXYJgGALg=";
+
+  ldflags = [ "-s" "-w" ];
+
+  buildInputs = [ libpcap ];
+
+  doCheck = false;
+
+  meta = {
+    homepage = "https://github.com/buger/goreplay";
+    license = lib.licenses.lgpl3Only;
+    description = "Open-source tool for capturing and replaying live HTTP traffic";
+    maintainers = with lib.maintainers; [ lovek323 ];
+    mainProgram = "goreplay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gost/default.nix b/nixpkgs/pkgs/tools/networking/gost/default.nix
new file mode 100644
index 000000000000..4c31ce88cbf5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gost/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, lib, fetchFromGitHub, buildGoModule, fetchpatch }:
+
+buildGoModule rec {
+  pname = "gost";
+  version = "2.11.5";
+
+  src = fetchFromGitHub {
+    owner = "ginuerzh";
+    repo = "gost";
+    rev = "v${version}";
+    sha256 = "sha256-UBjrWeBw9+qKQ/+1T1W/3e0vrigp540URIyM2d9iCE8=";
+  };
+
+  patches = [
+    # Add go1.20 support. Remove with the next release.
+    (fetchpatch {
+      url = "https://github.com/ginuerzh/gost/commit/0f7376bd10c913c7e6b1e7e02dd5fd7769975d78.patch";
+      hash = "sha256-pQNCvl7/huNrkM3+XHkGnvLYCzdjbMV6nef1KcMnKEw=";
+    })
+  ];
+
+  vendorHash = "sha256-wAdNfhSPj9JUcI6Gcja6nRy68bVhV8B4PARR0WS9rjQ=";
+
+  postPatch = ''
+    substituteInPlace http2_test.go \
+      --replace "TestH2CForwardTunnel" "SkipH2CForwardTunnel" \
+      --replace "TestH2ForwardTunnel" "SkipH2ForwardTunnel"
+
+    substituteInPlace resolver_test.go \
+      --replace '{NameServer{Addr: "1.1.1.1"}, "github", true},' "" \
+      --replace '{NameServer{Addr: "1.1.1.1"}, "github.com", true},' "" \
+      --replace '{NameServer{Addr: "1.1.1.1:53"}, "github.com", true},' "" \
+      --replace '{NameServer{Addr: "1.1.1.1:53", Protocol: "tcp"}, "github.com", true},' "" \
+      --replace '{NameServer{Addr: "1.1.1.1:853", Protocol: "tls"}, "github.com", true},' "" \
+      --replace '{NameServer{Addr: "1.1.1.1:853", Protocol: "tls", Hostname: "cloudflare-dns.com"}, "github.com", true},' "" \
+      --replace '{NameServer{Addr: "https://cloudflare-dns.com/dns-query", Protocol: "https"}, "github.com", true},' "" \
+      --replace '{NameServer{Addr: "https://1.0.0.1/dns-query", Protocol: "https"}, "github.com", true},' ""
+
+    # Skip TestShadowTCP, TestShadowUDP: #70 #71 #72 #78 #83 #85 #86 #87 #93
+    substituteInPlace ss_test.go \
+      --replace '{url.User("xchacha20"), url.UserPassword("xchacha20", "123456"), false},' "" \
+      --replace '{url.UserPassword("xchacha20", "123456"), url.User("xchacha20"), false},' "" \
+      --replace '{url.UserPassword("xchacha20", "123456"), url.UserPassword("xchacha20", "abc"), false},' "" \
+      --replace '{url.UserPassword("CHACHA20-IETF-POLY1305", "123456"), url.UserPassword("CHACHA20-IETF-POLY1305", "123456"), true},' "" \
+      --replace '{url.UserPassword("AES-128-GCM", "123456"), url.UserPassword("AES-128-GCM", "123456"), true},' "" \
+      --replace '{url.User("AES-192-GCM"), url.UserPassword("AES-192-GCM", "123456"), false},' "" \
+      --replace '{url.UserPassword("AES-192-GCM", "123456"), url.User("AES-192-GCM"), false},' "" \
+      --replace '{url.UserPassword("AES-192-GCM", "123456"), url.UserPassword("AES-192-GCM", "abc"), false},' "" \
+      --replace '{url.UserPassword("AES-256-GCM", "123456"), url.UserPassword("AES-256-GCM", "123456"), true},' ""
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "A simple tunnel written in golang";
+    homepage = "https://github.com/ginuerzh/gost";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pmy ];
+    mainProgram = "gost";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gp-saml-gui/default.nix b/nixpkgs/pkgs/tools/networking/gp-saml-gui/default.nix
new file mode 100644
index 000000000000..8a7ad11a2fe7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gp-saml-gui/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildPythonPackage
+, webkitgtk
+, wrapGAppsHook
+, glib-networking
+, gobject-introspection
+, openconnect
+, pygobject3
+, requests
+}:
+buildPythonPackage rec {
+  pname = "gp-saml-gui";
+  version = "0.1+20230507-${lib.strings.substring 0 7 src.rev}";
+
+  src = fetchFromGitHub {
+    owner = "dlenski";
+    repo = "gp-saml-gui";
+    rev = "258f47cdc4a8ed57a1eef16667f6cad0d1cb49b1";
+    sha256 = "sha256-g10S8C32mnOymCmGNdM8gmGpYn5/ObMJK3g6amKtQmI=";
+  };
+
+  buildInputs = lib.optional stdenv.isLinux glib-networking;
+
+  nativeBuildInputs = [ wrapGAppsHook gobject-introspection glib-networking ];
+
+  propagatedBuildInputs = [
+    requests
+    pygobject3
+    openconnect
+  ] ++ lib.optional stdenv.isLinux webkitgtk;
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --set WEBKIT_DISABLE_COMPOSITING_MODE "1"
+    )
+  '';
+
+  meta = with lib; {
+    description = "Interactively authenticate to GlobalProtect VPNs that require SAML";
+    homepage = "https://github.com/dlenski/gp-saml-gui";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.pallix ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gping/default.nix b/nixpkgs/pkgs/tools/networking/gping/default.nix
new file mode 100644
index 000000000000..80e6898630d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gping/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, libiconv
+, Security
+, iputils
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gping";
+  version = "1.16.1";
+
+  src = fetchFromGitHub {
+    owner = "orf";
+    repo = "gping";
+    rev = "gping-v${version}";
+    hash = "sha256-hCqjbJt0dHuvFsWEF/WgLEPY2xws71wFGdhzThYOOvA=";
+  };
+
+  cargoHash = "sha256-3jpQ8ANg9WYK1Q5Hph6fK442e5f9dsLQbTMBEwTaENc=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  nativeCheckInputs = lib.optionals stdenv.isLinux [ iputils ];
+
+  postInstall = ''
+    installManPage gping.1
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/gping --version | grep "${version}"
+  '';
+
+  meta = with lib; {
+    description = "Ping, but with a graph";
+    homepage = "https://github.com/orf/gping";
+    changelog = "https://github.com/orf/gping/releases/tag/gping-v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ andrew-d ];
+    mainProgram = "gping";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/graphqurl/default.nix b/nixpkgs/pkgs/tools/networking/graphqurl/default.nix
new file mode 100644
index 000000000000..e0b6fa9de9c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/graphqurl/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "graphqurl";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "hasura";
+    repo = "graphqurl";
+    rev = "v${version}";
+    hash = "sha256-0dR8lLD0yatAvE3kA90cNOzVRTFpQmzN1l13hdFr3TM=";
+  };
+
+  npmDepsHash = "sha256-2kLmhNFO/ySa6S9rBNYCePmsYXWz006IxiOJ7ZUkgPw=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "CLI and JS library for making GraphQL queries";
+    homepage = "https://github.com/hasura/graphqurl";
+    license = lib.licenses.asl20;
+    mainProgram = "gq";
+    maintainers = with lib.maintainers; [ bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/grpc_cli/default.nix b/nixpkgs/pkgs/tools/networking/grpc_cli/default.nix
new file mode 100644
index 000000000000..1f7f33d7f874
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/grpc_cli/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, automake, cmake, autoconf, curl, numactl }:
+
+stdenv.mkDerivation rec {
+  pname = "grpc_cli";
+  version = "1.61.1";
+  src = fetchFromGitHub {
+    owner = "grpc";
+    repo = "grpc";
+    rev = "v${version}";
+    hash = "sha256-vrLkiNnsW6IpZNGhs6iZgEhdlV9Qpg8PLMDG2BKY2wo=";
+    fetchSubmodules = true;
+  };
+  nativeBuildInputs = [ automake cmake autoconf ];
+  buildInputs = [ curl numactl ];
+  cmakeFlags = [ "-DgRPC_BUILD_TESTS=ON" ];
+  makeFlags = [ "grpc_cli" ];
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isAarch64 "-Wno-error=format-security";
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 grpc_cli "$out/bin/grpc_cli"
+
+    runHook postInstall
+  '';
+  meta = with lib; {
+    description = "The command line tool for interacting with grpc services";
+    homepage = "https://github.com/grpc/grpc";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ doriath ];
+    platforms = platforms.linux;
+    mainProgram = "grpc_cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/grpcui/default.nix b/nixpkgs/pkgs/tools/networking/grpcui/default.nix
new file mode 100644
index 000000000000..f4bca5a29911
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/grpcui/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "grpcui";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "fullstorydev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-G4lVYwx8fYxuyHI2CzAfBQHQV/G4lf7zBwL8JTpnscA=";
+  };
+
+  vendorHash = "sha256-lw8HildV1RFTGLOf6FaitbXPxr4FtVGg7GxdzBVFiTM=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/grpcui" ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "An interactive web UI for gRPC, along the lines of postman";
+    homepage = "https://github.com/fullstorydev/grpcui";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pradyuman ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "grpcui";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/grpcurl/default.nix b/nixpkgs/pkgs/tools/networking/grpcurl/default.nix
new file mode 100644
index 000000000000..252a148f6fc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/grpcurl/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "grpcurl";
+  version = "1.8.9";
+
+  src = fetchFromGitHub {
+    owner = "fullstorydev";
+    repo = "grpcurl";
+    rev = "v${version}";
+    sha256 = "sha256-zN/vleCph919HXZZ9wsXoJBXRT6y7gjyuQxnjRMzq00=";
+  };
+
+  subPackages = [ "cmd/grpcurl" ];
+
+  vendorHash = "sha256-g5G966CuaVILGAgWunHAPrrkLjSv8pBj9R4bcLzyI+A=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers";
+    homepage = "https://github.com/fullstorydev/grpcurl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ knl ];
+    mainProgram = "grpcurl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gsocket/default.nix b/nixpkgs/pkgs/tools/networking/gsocket/default.nix
new file mode 100644
index 000000000000..4bf445fe8532
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gsocket/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "gsocket";
+  version = "1.4.41";
+
+  src = fetchFromGitHub {
+    owner = "hackerschoice";
+    repo = "gsocket";
+    rev = "v${version}";
+    hash = "sha256-N/dGvEjCkCQvTTWApN0iQi2W3c5ZsaHXnZpjRxSfByY=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ openssl ];
+  dontDisableStatic = true;
+
+  meta = with lib; {
+    description = "Connect like there is no firewall, securely";
+    homepage = "https://www.gsocket.io";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.msm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/guardian-agent/default.nix b/nixpkgs/pkgs/tools/networking/guardian-agent/default.nix
new file mode 100644
index 000000000000..46fcdb8dd47b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/guardian-agent/default.nix
@@ -0,0 +1,47 @@
+{ buildGoPackage
+, fetchFromGitHub
+, lib
+, autossh
+, makeWrapper
+, stdenv
+}:
+
+buildGoPackage rec {
+  pname = "guardian-agent";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "StanfordSNR";
+    repo = pname;
+    rev = "v${version}-beta";
+    sha256 = "05269y944hcabn6dqa66387rdhx81vcqcyjv6m1hdbz5ba8j7mqn";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  goPackagePath = "github.com/StanfordSNR/guardian-agent";
+
+  deleteVendor = true;
+  goDeps = ./deps.nix;
+
+  postInstall = ''
+    mkdir -p $out/bin $out/share/doc/${pname}
+    cp -v ./go/src/github.com/StanfordSNR/${pname}/scripts/* $out/bin/
+    cp -vr ./go/src/github.com/StanfordSNR/${pname}/{AUTHORS,doc,LICENSE,README.md} $out/share/doc/guardian-agent
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/sga-guard \
+      --prefix PATH : "$out/bin" \
+      --prefix PATH : "${autossh}/bin"
+  '';
+
+  meta = with lib; {
+    description = "Secure ssh-agent forwarding for Mosh and SSH";
+    homepage = "https://github.com/StanfordSNR/guardian-agent";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ mmahut ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin; # x/sys/unix needs an update, but software is unmaintained
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/guardian-agent/deps.nix b/nixpkgs/pkgs/tools/networking/guardian-agent/deps.nix
new file mode 100644
index 000000000000..950a346ce8be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/guardian-agent/deps.nix
@@ -0,0 +1,58 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/hashicorp/yamux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/yamux";
+      rev = "2f1d1f20f75d5404f53b9edf6b53ed5505508675";
+      sha256 = "1fga3p6j2g24ip9qjfwn3nqjr00m4nnjz92app7ms3sz7vgq2a7s";
+    };
+  }
+  {
+    goPackagePath = "github.com/howeyc/gopass";
+    fetch = {
+      type = "git";
+      url = "https://github.com/howeyc/gopass";
+      rev = "bf9dde6d0d2c004a008c27aaee91170c786f6db8";
+      sha256 = "1jxzyfnqi0h1fzlsvlkn10bncic803bfhslyijcxk55mgh297g45";
+    };
+  }
+  {
+    goPackagePath = "github.com/sternhenri/interact";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sternhenri/interact";
+      rev = "dfeb9ef2030483f98cee2c86f5775fe6c729f10b";
+      sha256 = "00b09fyy9zhv11mbzm18ngg765g0gyb23bmr4fc83i09w912if7j";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "04f50cda93cbb67f2afa353c52f342100e80e625";
+      sha256 = "0hmfsz9y1ingwsn482hlzzmzs7kr3cklm0ana0mbdk70isw2bxnw";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/StanfordSNR/crypto";
+      rev = "e451cabda2acd7a416728ee89b75975b8b0c90d7";
+      sha256 = "0aj6fc0i1dm6rdgr1mlv2pl4s0i6sj821k2p4gig45h5mn06mhpz";
+    };
+  }
+  {
+    goPackagePath = "github.com/jessevdk/go-flags";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jessevdk/go-flags";
+      rev = "c0795c8afcf41dd1d786bebce68636c199b3bb45";
+      sha256 = "0xsmr17mrpm9kx34zfzzirwy0n459h975x49p41fs2f6ly6lk9vp";
+    };
+  }
+
+]
diff --git a/nixpkgs/pkgs/tools/networking/gupnp-tools/default.nix b/nixpkgs/pkgs/tools/networking/gupnp-tools/default.nix
new file mode 100644
index 000000000000..a54ea88b1ce9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gupnp-tools/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, lib
+, fetchurl
+, meson
+, ninja
+, gupnp_1_6
+, libsoup_3
+, gssdp_1_6
+, pkg-config
+, gtk3
+, gettext
+, gupnp-av
+, gtksourceview4
+, gnome
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gupnp-tools";
+  version = "0.12.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "U8+TEj85fo+PC46eQ2TIanUCpTNPTAvi4FSoJEeL1bo=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gupnp_1_6
+    libsoup_3
+    gssdp_1_6
+    gtk3
+    gupnp-av
+    gtksourceview4
+  ];
+
+  # new libxml2 version
+  # TODO: can be dropped on next update
+  NIX_CFLAGS_COMPILE = [ "-Wno-error=deprecated-declarations" ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with lib; {
+    description = "Set of utilities and demos to work with UPnP";
+    homepage = "https://wiki.gnome.org/Projects/GUPnP";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gvpe/default.nix b/nixpkgs/pkgs/tools/networking/gvpe/default.nix
new file mode 100644
index 000000000000..5170df24b91c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gvpe/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, openssl, gmp, zlib, iproute2, nettools, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "gvpe";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "https://ftp.gnu.org/gnu/gvpe/gvpe-${version}.tar.gz";
+    sha256 = "sha256-8evVctclu5QOCAdxocEIZ8NQnc2DFvYRSBRQPcux6LM=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl gmp zlib ];
+
+  configureFlags = [
+    "--enable-tcp"
+    "--enable-http-proxy"
+    "--enable-dns"
+  ];
+
+  postPatch = ''
+    sed -e 's@"/sbin/ifconfig.*"@"${iproute2}/sbin/ip link set dev $IFNAME address $MAC mtu $MTU"@' -i src/device-linux.C
+    sed -e 's@/sbin/ifconfig@${nettools}/sbin/ifconfig@g' -i src/device-*.C
+  '';
+
+  meta = with lib; {
+    description = "A protected multinode virtual network";
+    homepage = "http://software.schmorp.de/pkg/gvpe.html";
+    maintainers = [ maintainers.raskin ];
+    platforms = with platforms; linux ++ freebsd;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gvproxy/default.nix b/nixpkgs/pkgs/tools/networking/gvproxy/default.nix
new file mode 100644
index 000000000000..78c45563540f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gvproxy/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "gvproxy";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "containers";
+    repo = "gvisor-tap-vsock";
+    rev = "v${version}";
+    hash = "sha256-7j/0VuiHjazsPnyQ4NbmvXX1O/NbeB9l6HfmTRZyAW8=";
+  };
+
+  vendorHash = null;
+
+  buildPhase = ''
+    runHook preBuild
+    make build
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install bin/* -Dt $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/containers/gvisor-tap-vsock/releases/tag/${src.rev}";
+    description = "Network stack based on gVisor";
+    homepage = "https://github.com/containers/gvisor-tap-vsock";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ] ++ teams.podman.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/haguichi/default.nix b/nixpkgs/pkgs/tools/networking/haguichi/default.nix
new file mode 100644
index 000000000000..fd228c141b5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/haguichi/default.nix
@@ -0,0 +1,56 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, python3
+, vala
+, wrapGAppsHook
+, desktop-file-utils
+, glib
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "haguichi";
+  version = "1.4.6";
+
+  src = fetchFromGitHub {
+    owner = "ztefn";
+    repo = "haguichi";
+    rev = version;
+    hash = "sha256-H/Aw8zJOioOLWxiM/pMb+QSIoEp3zIkLb26S6QN3hv0=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+    desktop-file-utils # for update-desktop-database
+    glib # for glib-compile-resources
+    gtk3 # for gtk-update-icon-cache
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+  ];
+
+  postPatch = ''
+    patchShebangs meson_post_install.py
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Graphical frontend for Hamachi on Linux";
+    homepage = "https://haguichi.net/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ OPNA2608 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/haguichi/update.sh b/nixpkgs/pkgs/tools/networking/haguichi/update.sh
new file mode 100755
index 000000000000..49a76a79d7ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/haguichi/update.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq common-updater-scripts
+
+set -euo pipefail
+
+version="$(
+    curl -s https://api.github.com/repos/ztefn/haguichi/releases |
+    jq '.[] | select(.target_commitish!="elementary") | .tag_name' --raw-output |
+    sort --version-sort --reverse |
+    head -n1
+)"
+
+update-source-version haguichi "$version"
diff --git a/nixpkgs/pkgs/tools/networking/hans/default.nix b/nixpkgs/pkgs/tools/networking/hans/default.nix
new file mode 100644
index 000000000000..ac591c200fe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hans/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, nettools }:
+
+stdenv.mkDerivation rec {
+  pname = "hans";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    sha256 = "sha256-r6IDs8Seys94LBNnedcfVX5aW8x//ZN0Yh/DGTg8niA=";
+    rev = "v${version}";
+    repo = "hans";
+    owner = "friedrich";
+  };
+
+  buildInputs = [ nettools ];
+
+  postPatch = ''
+    substituteInPlace src/tun.cpp --replace "/sbin/" "${nettools}/bin/"
+  '';
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    install -D -m0755 hans $out/bin/hans
+  '';
+
+  meta = with lib; {
+    description = "Tunnel IPv4 over ICMP";
+    longDescription = ''
+      Hans makes it possible to tunnel IPv4 through ICMP echo packets, so you
+      could call it a ping tunnel. This can be useful when you find yourself in
+      the situation that your Internet access is firewalled, but pings are
+      allowed.
+    '';
+    homepage = "https://code.gerade.org/hans/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "hans";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/haproxy/default.nix b/nixpkgs/pkgs/tools/networking/haproxy/default.nix
new file mode 100644
index 000000000000..675c7d19b65a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/haproxy/default.nix
@@ -0,0 +1,99 @@
+{ useLua ? true
+, usePcre ? true
+, withPrometheusExporter ? true
+, sslLibrary ? "quictls"
+, stdenv
+, lib
+, fetchurl
+, nixosTests
+, zlib
+, libxcrypt
+, wolfssl
+, libressl
+, quictls
+, openssl
+, lua5_4
+, pcre2
+, systemd
+}:
+
+assert lib.assertOneOf "sslLibrary" sslLibrary [ "quictls" "openssl" "libressl" "wolfssl" ];
+let
+  sslPkgs = {
+    inherit quictls openssl libressl;
+    wolfssl = wolfssl.override {
+      variant = "haproxy";
+      extraConfigureFlags = [ "--enable-quic" ];
+    };
+  };
+  sslPkg = sslPkgs.${sslLibrary};
+in stdenv.mkDerivation (finalAttrs: {
+  pname = "haproxy";
+  version = "2.9.5";
+
+  src = fetchurl {
+    url = "https://www.haproxy.org/download/${lib.versions.majorMinor finalAttrs.version}/src/haproxy-${finalAttrs.version}.tar.gz";
+    hash = "sha256-MreFsSiDj0IYuNVGkMhsSHlNA/gXy7Yn+0h2n3nv1Zs=";
+  };
+
+  buildInputs = [ sslPkg zlib libxcrypt ]
+    ++ lib.optional useLua lua5_4
+    ++ lib.optional usePcre pcre2
+    ++ lib.optional stdenv.isLinux systemd;
+
+  # TODO: make it work on bsd as well
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    ("TARGET=" + (if stdenv.isSunOS then "solaris"
+    else if stdenv.isLinux then "linux-glibc"
+    else if stdenv.isDarwin then "osx"
+    else "generic"))
+  ];
+
+  buildFlags = [
+    "USE_ZLIB=yes"
+    "USE_OPENSSL=yes"
+    "SSL_INC=${lib.getDev sslPkg}/include"
+    "SSL_LIB=${lib.getDev sslPkg}/lib"
+    "USE_QUIC=yes"
+  ] ++ lib.optionals (sslLibrary == "openssl") [
+    "USE_QUIC_OPENSSL_COMPAT=yes"
+  ] ++ lib.optionals (sslLibrary == "wolfssl") [
+    "USE_OPENSSL_WOLFSSL=yes"
+  ] ++ lib.optionals usePcre [
+    "USE_PCRE2=yes"
+    "USE_PCRE2_JIT=yes"
+  ] ++ lib.optionals useLua [
+    "USE_LUA=yes"
+    "LUA_LIB_NAME=lua"
+    "LUA_LIB=${lua5_4}/lib"
+    "LUA_INC=${lua5_4}/include"
+  ] ++ lib.optionals stdenv.isLinux [
+    "USE_SYSTEMD=yes"
+    "USE_GETADDRINFO=1"
+  ] ++ lib.optionals withPrometheusExporter [
+    "USE_PROMEX=yes"
+  ] ++ [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  enableParallelBuilding = true;
+
+  passthru.tests.haproxy = nixosTests.haproxy;
+
+  meta = {
+    changelog = "https://www.haproxy.org/download/${lib.versions.majorMinor finalAttrs.version}/src/CHANGELOG";
+    description = "Reliable, high performance TCP/HTTP load balancer";
+    homepage = "https://haproxy.org";
+    license = with lib.licenses; [ gpl2Plus lgpl21Only ];
+    longDescription = ''
+      HAProxy is a free, very fast and reliable solution offering high
+      availability, load balancing, and proxying for TCP and HTTP-based
+      applications. It is particularly suited for web sites crawling under very
+      high loads while needing persistence or Layer7 processing. Supporting
+      tens of thousands of connections is clearly realistic with todays
+      hardware.
+    '';
+    maintainers = with lib.maintainers; [ vifino ];
+    platforms = with lib.platforms; linux ++ darwin;
+    mainProgram = "haproxy";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/hblock/default.nix b/nixpkgs/pkgs/tools/networking/hblock/default.nix
new file mode 100644
index 000000000000..19e7dde77c85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hblock/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, gawk
+, curl
+, gnugrep
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hblock";
+  version = "3.4.4";
+
+  src = fetchFromGitHub {
+    owner = "hectorm";
+    repo = "hblock";
+    rev = "v${version}";
+    hash = "sha256-cYLpK5zUOzgbcBVrJT/N6Y9kMpg6KD1EthrstoF4sF8=";
+  };
+
+  buildInputs = [ coreutils curl gnugrep gawk ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installFlags = [
+    "prefix=$(out)"
+  ];
+  postInstall = ''
+    wrapProgram "$out/bin/hblock" \
+      --prefix PATH : ${lib.makeBinPath [ coreutils curl gnugrep gawk ]}
+  '';
+
+  meta = with lib; {
+    description = "Improve your security and privacy by blocking ads, tracking and malware domains";
+    homepage = "https://github.com/hectorm/hblock";
+    license = licenses.mit;
+    maintainers = with maintainers; [ alanpearce ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hey/default.nix b/nixpkgs/pkgs/tools/networking/hey/default.nix
new file mode 100644
index 000000000000..b5d565d84743
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hey/default.nix
@@ -0,0 +1,23 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "hey";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "rakyll";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0gsdksrzlwpba14a43ayyy41l1hxpw4ayjpvqyd4ycakddlkvgzb";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "HTTP load generator, ApacheBench (ab) replacement";
+    homepage = "https://github.com/rakyll/hey";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "hey";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/horst/default.nix b/nixpkgs/pkgs/tools/networking/horst/default.nix
new file mode 100644
index 000000000000..2e220a171cc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/horst/default.nix
@@ -0,0 +1,43 @@
+{lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, ncurses, libnl }:
+
+stdenv.mkDerivation rec {
+  pname = "horst";
+  version = "5.1";
+
+  src = fetchFromGitHub {
+    owner = "br101";
+    repo = "horst";
+    rev = "v${version}";
+    sha256 = "140pyv6rlsh4c745w4b59pz3hrarr39qq3mz9z1lsd3avc12nx1a";
+  };
+
+  patches = [
+    # Fix pending upstream inclusion for ncurses-6.3:
+    #  https://github.com/br101/horst/pull/110
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/br101/horst/commit/c9e9b6cc1f97edb9c53f3a67b43f3588f3ac6ea7.patch";
+      sha256 = "15pahbnql44d5zzxmkd5ky8bl3c3hh3lh5190wynd90jrrhf1a26";
+      # collides for context change, well apply this part in postPatch
+      excludes = [ "display-main.c" ];
+    })
+  ];
+  postPatch = ''
+    # Apply second part of ncurses-6.3.patch:
+    substituteInPlace display-main.c --replace 'wprintw(dump_win, str);' 'wprintw(dump_win, "%s", str);'
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ ncurses libnl ];
+
+  installFlags = [ "DESTDIR=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Small and lightweight IEEE802.11 wireless LAN analyzer with a text interface";
+    homepage = "https://github.com/br101/horst";
+    maintainers = [ maintainers.fpletz ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    mainProgram = "horst";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hostapd-mana/default.nix b/nixpkgs/pkgs/tools/networking/hostapd-mana/default.nix
new file mode 100644
index 000000000000..2ca826314c57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hostapd-mana/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, libnl
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hostapd-mana";
+  version = "2.6.5";
+
+  src = fetchFromGitHub {
+    owner = "sensepost";
+    repo = pname;
+    rev = version;
+    hash = "sha256-co5LMJAUYSdcvhLv1gfjDvdVqdSXgjtFoiQ7+KxR07M=";
+  };
+
+  patches = [
+    # Fix compile errors with GCC 10 on newer Kali
+    (fetchpatch {
+      url = "https://github.com/sensepost/hostapd-mana/commit/8581994d8d19646da63e1e37cde27dd4c966e526.patch";
+      hash = "sha256-UBkhuqvX1nFiceECAIC9B13ReKbrAAUtPKjqD17mQgg=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libnl openssl ];
+
+  extraConfig = ''
+    CONFIG_DRIVER_WIRED=y
+    CONFIG_LIBNL32=y
+    CONFIG_EAP_SIM=y
+    CONFIG_EAP_AKA=y
+    CONFIG_EAP_AKA_PRIME=y
+    CONFIG_EAP_PAX=y
+    CONFIG_EAP_PWD=y
+    CONFIG_EAP_SAKE=y
+    CONFIG_EAP_GPSK=y
+    CONFIG_EAP_GPSK_SHA256=y
+    CONFIG_EAP_FAST=y
+    CONFIG_EAP_IKEV2=y
+    CONFIG_EAP_TNC=y
+    CONFIG_EAP_EKE=y
+    CONFIG_RADIUS_SERVER=y
+    CONFIG_IEEE80211R=y
+    CONFIG_IEEE80211N=y
+    CONFIG_IEEE80211AC=y
+    CONFIG_FULL_DYNAMIC_VLAN=y
+    CONFIG_VLAN_NETLINK=y
+    CONFIG_TLS=openssl
+    CONFIG_TLSV11=y
+    CONFIG_TLSV12=y
+    CONFIG_INTERNETWORKING=y
+    CONFIG_HS20=y
+    CONFIG_ACS=y
+    CONFIG_GETRANDOM=y
+    CONFIG_SAE=y
+  '';
+
+  postPatch = ''
+    substituteInPlace hostapd/Makefile --replace /usr/local $out
+  '';
+
+  configurePhase = ''
+    runHook preConfigure
+    cd hostapd
+    cp -v defconfig .config
+    echo "$extraConfig" >> .config
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config --cflags libnl-${lib.versions.major libnl.version}.0)"
+    runHook postConfigure
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/sensepost/hostapd-mana";
+    description = "A featureful rogue wifi access point tool";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ bbjubjub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hostname-debian/default.nix b/nixpkgs/pkgs/tools/networking/hostname-debian/default.nix
new file mode 100644
index 000000000000..07135b35cc53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hostname-debian/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "hostname-debian";
+  version = "3.23";
+
+  src = fetchurl {
+    url = "https://deb.debian.org/debian/pool/main/h/hostname/hostname_${version}.tar.gz";
+    sha256 = "sha256-vG0ZVLIoSYaf+LKmAuOfCLFwL2htS1jdeSfN61tIdu8=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace 'install -o root -g root' 'install'
+  '';
+  makeFlags = [ "BINDIR=$(out)/bin" "MANDIR=$(out)/share/man" ];
+
+  meta = with lib; {
+    description = "Utility to set/show the host name or domain name";
+    longDescription = ''
+      This package provides commands which can be used to display the system's
+      DNS name, and to display or set its hostname or NIS domain name.
+    '';
+    homepage = "https://tracker.debian.org/pkg/hostname";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ posch ];
+    platforms = platforms.gnu;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hp2p/default.nix b/nixpkgs/pkgs/tools/networking/hp2p/default.nix
new file mode 100644
index 000000000000..9e2b5d639049
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hp2p/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, mpi, python3Packages, autoconf, automake } :
+
+stdenv.mkDerivation rec {
+  pname = "hp2p";
+  version = "unstable-2023-10-25";
+
+  src = fetchFromGitHub {
+    owner = "cea-hpc";
+    repo = "hp2p";
+    rev = "711f6cc5b4e552d969c2436ad77afd35d31bfd05";
+    sha256 = "sha256-mBTJZb3DPmIlL7N+PfjlWmBw0WfFF2DesImVZlbDQKc=";
+  };
+
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ autoconf automake python3Packages.wrapPython ];
+  buildInputs = [ mpi ] ++ (with python3Packages; [ python plotly ]) ;
+  pythonPath = (with python3Packages; [ plotly ]) ;
+
+  preConfigure = ''
+    patchShebangs autogen.sh
+    ./autogen.sh
+    export CC=mpicc
+    export CXX=mpic++
+  '';
+
+  postInstall = ''
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    description = "A MPI based benchmark for network diagnostics";
+    homepage = "https://github.com/cea-hpc/hp2p";
+    platforms = platforms.unix;
+    license = licenses.cecill-c;
+    maintainers = [ maintainers.bzizou ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hping/default.nix b/nixpkgs/pkgs/tools/networking/hping/default.nix
new file mode 100644
index 000000000000..11a8cad05b9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hping/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, libpcap, withTcl ? true, tcl }:
+
+stdenv.mkDerivation rec {
+  pname = "hping";
+  version = "2014-12-26";
+
+  src = fetchFromGitHub {
+    owner = "antirez";
+    repo = pname;
+    rev = "3547c7691742c6eaa31f8402e0ccbb81387c1b99"; # there are no tags/releases
+    sha256 = "0y0n1ybij3yg9lfgzcwfmjz1sjg913zcqrv391xx83dm0j80sdpb";
+  };
+  patches = [
+    # Pull patch pending upstream inclusion for -fno-common toolchain
+    # support: https://github.com/antirez/hping/pull/64
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/antirez/hping/pull/64/commits/d057b9309aec3a5a53aaee1ac3451a8a5b71b4e8.patch";
+      sha256 = "0bqr7kdlziijja588ipj8g5hv2109wq01c6x2qadbhjfnsps1b6l";
+    })
+  ];
+
+  buildInputs = [ libpcap ] ++ lib.optional withTcl tcl;
+
+  postPatch = ''
+    substituteInPlace Makefile.in --replace "gcc" "$CC"
+    substituteInPlace version.c --replace "RELEASE_DATE" "\"$version\""
+  '' + lib.optionalString stdenv.isLinux ''
+    sed -i -e 's|#include <net/bpf.h>|#include <pcap/bpf.h>|' \
+      libpcap_stuff.c script.c
+  '' + lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    substituteInPlace configure --replace 'BYTEORDER=`./byteorder -m`' BYTEORDER=${
+      {
+        littleEndian = "__LITTLE_ENDIAN_BITFIELD";
+        bigEndian = "__BIG_ENDIAN_BITFIELD";
+      }.${stdenv.hostPlatform.parsed.cpu.significantByte.name}}
+    substituteInPlace Makefile.in --replace './hping3 -v' ""
+  '';
+
+  configureFlags = [ (if withTcl then "TCLSH=${tcl}/bin/tclsh" else "--no-tcl") ];
+
+  installPhase = ''
+    install -Dm755 hping3 -t $out/sbin
+    ln -s $out/sbin/hping3 $out/sbin/hping
+    ln -s $out/sbin/hping3 $out/sbin/hping2
+    install -Dm644 docs/hping3.8 -t $out/share/man/man8
+    ln -s hping3.8.gz $out/share/man/man8/hping.8.gz
+    ln -s hping3.8.gz $out/share/man/man8/hping2.8.gz
+  '';
+
+  meta = with lib; {
+    description = "A command-line oriented TCP/IP packet assembler/analyzer";
+    homepage = "http://www.hping.org/";
+    license = licenses.gpl2Only;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hss/default.nix b/nixpkgs/pkgs/tools/networking/hss/default.nix
new file mode 100644
index 000000000000..e2535395971a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hss/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildRubyGem, ruby, openssh }:
+
+# Example ~/.hss.yml
+#---
+#patterns:
+#  - note: Basic test
+#    example: g -> github
+#    short: '^g$'
+#    long: 'git@github.com'
+
+buildRubyGem rec {
+  name = "hss-${version}";
+  inherit ruby;
+  gemName = "hss";
+  version = "1.0.1";
+  source.sha256 = "0hdfpxxqsh6gisn8mm0knsl1aig9fir0h2x9sirk3gr36qbz5xa4";
+
+  postInstall = ''
+   substituteInPlace $GEM_HOME/gems/${gemName}-${version}/bin/hss \
+     --replace \
+       "'ssh'" \
+       "'${openssh}/bin/ssh'"
+  '';
+
+  meta = with lib; {
+    description = ''
+      A SSH helper that uses regex and fancy expansion to dynamically manage SSH shortcuts.
+    '';
+    homepage    = "https://github.com/akerl/hss";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ nixy ];
+    platforms   = platforms.unix;
+    mainProgram = "hss";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/htpdate/default.nix b/nixpkgs/pkgs/tools/networking/htpdate/default.nix
new file mode 100644
index 000000000000..60934216a2ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/htpdate/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "1.3.7";
+  pname = "htpdate";
+
+  src = fetchFromGitHub {
+    owner = "twekkel";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XdqQQw87gvWvdx150fQhnCio478PNCQBMw/g/l/T1ZA=";
+  };
+
+  makeFlags = [
+    "prefix=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "Utility to fetch time and set the system clock over HTTP";
+    homepage = "https://github.com/twekkel/htpdate";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ julienmalka ];
+    mainProgram = "htpdate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/http-prompt/default.nix b/nixpkgs/pkgs/tools/networking/http-prompt/default.nix
new file mode 100644
index 000000000000..8fce232cdb17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/http-prompt/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, python3Packages, httpie }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "http-prompt";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    repo = "http-prompt";
+    owner = "httpie";
+    sha256 = "sha256-e4GyuxCeXYNsnBXyjIJz1HqSrqTGan0N3wxUFS+Hvkw=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    click
+    httpie
+    parsimonious
+    (python.pkgs.callPackage ../../../development/python-modules/prompt-toolkit/1.nix {})
+    pygments
+    six
+    pyyaml
+  ];
+
+  checkPhase = ''
+    $out/bin/${pname} --version | grep -q "${version}"
+  '';
+
+  meta = with lib; {
+    description = "An interactive command-line HTTP client featuring autocomplete and syntax highlighting";
+    homepage = "https://github.com/eliangcs/http-prompt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/http2tcp/default.nix b/nixpkgs/pkgs/tools/networking/http2tcp/default.nix
new file mode 100644
index 000000000000..b1f3c704b1fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/http2tcp/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, python3
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "http2tcp";
+  version = "0.5";
+
+  src = fetchurl {
+    url = "https://www.linta.de/~aehlig/http2tcp/${pname}-${version}.tar.gz";
+    sha256 = "34fb83c091689dee398ca80db76487e0c39abb17cef390d845ffd888009a5caa";
+  };
+
+  buildInputs = [
+    (python3.withPackages (ps: [
+      ps.wsgitools
+    ]))
+  ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/${pname}}
+    cp http2tcp* $out/bin
+    cp Protocol $out/share/${pname}/
+  '';
+
+  meta = with lib; {
+    maintainers = with maintainers; [ clkamp ];
+    description = "A tool for tunneling TCP connections via HTTP GET requests";
+    longDescription = ''
+      The http2tcp tools allow to tunnel tcp connections (presumably
+      ssh) via syntactically correct http requests. It is designed to
+      work in the presence of so-called "transparent"
+      store-and-forward proxies disallowing POST requests.
+
+      It also turned out to be useful to stabilise connections where
+      the client's internet connection is unreliable (frequent long
+      network outages, rapidly changing IP address, etc).
+    '';
+    homepage = "https://www.linta.de/~aehlig/http2tcp/";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httperf/default.nix b/nixpkgs/pkgs/tools/networking/httperf/default.nix
new file mode 100644
index 000000000000..dca67e7c39a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httperf/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "httperf";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = pname;
+    rev = "3209c7f9b15069d4b79079e03bafba5b444569ff";
+    sha256 = "0p48z9bcpdjq3nsarl26f0xbxmqgw42k5qmfy8wv5bcrz6b3na42";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  propagatedBuildInputs = [ openssl ];
+
+  configurePhase = ''
+    autoreconf -i
+    mkdir -pv build
+    cd build
+    ../configure
+  '';
+
+  installPhase = ''
+    mkdir -vp $out/bin
+    mv -v src/httperf $out/bin
+  '';
+
+  meta = with lib; {
+    description = "The httperf HTTP load generator";
+    homepage = "https://github.com/httperf/httperf";
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    mainProgram = "httperf";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/httping/default.nix b/nixpkgs/pkgs/tools/networking/httping/default.nix
new file mode 100644
index 000000000000..1933dc41de0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httping/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, fftw ? null
+, gettext
+, libintl
+, ncurses
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "httping";
+  version = "2.9";
+
+  src = fetchFromGitHub {
+    owner = "folkertvanheusden";
+    repo = "HTTPing";
+    rev = "v${version}";
+    hash = "sha256-aExTXXtW03UKMuMjTMx1k/MUpcRMh1PdSPkDGH+Od70=";
+  };
+
+  patches = [
+    # Pull upstream fix for missing <unistd.h>
+    #   https://github.com/folkertvanheusden/HTTPing/pull/8
+    (fetchpatch {
+      name = "add-unistd.patch";
+      url = "https://github.com/folkertvanheusden/HTTPing/commit/aad3c275686344fe9a235faeac4ee3832f3aa8d5.patch";
+      hash = "sha256-bz3AMQTSfSTwUyf9WbkAFWVmFo06ei+Qd55x+RRDREY=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    gettext
+  ];
+
+  buildInputs = [
+    fftw
+    libintl
+    ncurses
+    openssl
+  ];
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
+
+  meta = with lib; {
+    homepage = "https://vanheusden.com/httping";
+    description = "ping with HTTP requests";
+    longDescription = ''
+      Give httping an url, and it'll show you how long it takes to connect,
+      send a request and retrieve the reply (only the headers). Be aware that
+      the transmission across the network also takes time! So it measures the
+      latency of the webserver + network. It supports IPv6.
+    '';
+    license = licenses.agpl3Only;
+    maintainers = [];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "httping";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httplab/default.nix b/nixpkgs/pkgs/tools/networking/httplab/default.nix
new file mode 100644
index 000000000000..6e1be43ac5f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httplab/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "httplab";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "qustavo";
+    repo = "httplab";
+    rev = "v${version}";
+    hash = "sha256-+qcECfQo9Wa4JQ09ujhKjQndmcFn03hTfII636+1ghA=";
+  };
+
+  vendorHash = null;
+
+  patches = [
+    # Add Go Modules support
+    (fetchpatch {
+      url = "https://github.com/qustavo/httplab/commit/80680bebc83f1ed19216f60339c62cd9213d736b.patch";
+      hash = "sha256-y4KO3FGwKNAfM+4uR3KDbV90d/4JeBGvWtfirDJrWZk=";
+    })
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/qustavo/httplab";
+    description = "Interactive WebServer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pradeepchhetri ];
+    mainProgram = "httplab";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httplz/default.nix b/nixpkgs/pkgs/tools/networking/httplz/default.nix
new file mode 100644
index 000000000000..2a0f665f863a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httplz/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, installShellFiles
+, makeWrapper
+, pkg-config
+, ronn
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "httplz";
+  version = "1.13.2";
+
+  src = fetchCrate {
+    inherit version;
+    pname = "https";
+    hash = "sha256-uxEMgSrcxMZD/3GQuH9S/oYtMUPzgMR61ZzLcb65zXU=";
+  };
+
+  cargoHash = "sha256-8cH8QrnkfPF0Di7+Ns/P/8cFe0jej/v7m4fkkfTFdvs=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    pkg-config
+    ronn
+  ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  cargoBuildFlags = [ "--bin" "httplz" ];
+
+  postInstall = ''
+    sed -E 's/http(`| |\(|$)/httplz\1/g' http.md > httplz.1.ronn
+    RUBYOPT=-Eutf-8:utf-8 ronn --organization "http developers" -r httplz.1.ronn
+    installManPage httplz.1
+    wrapProgram $out/bin/httplz \
+      --prefix PATH : "${openssl}/bin"
+  '';
+
+  meta = with lib; {
+    description = "A basic http server for hosting a folder fast and simply";
+    homepage = "https://github.com/thecoshman/http";
+    changelog = "https://github.com/thecoshman/http/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httprobe/default.nix b/nixpkgs/pkgs/tools/networking/httprobe/default.nix
new file mode 100644
index 000000000000..b1a03ed6b488
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httprobe/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "httprobe";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "tomnomnom";
+    repo = "httprobe";
+    rev = "v${version}";
+    hash = "sha256-k/Ev+zpYF+DcnQvMbbRzoJ4co83q3pi/D9T4DhtGR/I=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Take a list of domains and probe for working HTTP and HTTPS servers";
+    homepage = "https://github.com/tomnomnom/httprobe";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "httprobe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httpstat/default.nix b/nixpkgs/pkgs/tools/networking/httpstat/default.nix
new file mode 100644
index 000000000000..be4a8f2a168d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httpstat/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, curl, python3Packages, glibcLocales }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "httpstat";
+  version = "1.3.1";
+  src = fetchFromGitHub {
+    owner = "reorx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-zUdis41sQpJ1E3LdNwaCVj6gexi/Rk21IBUgoFISiDM=";
+  };
+  doCheck = false; # No tests
+  buildInputs = [ glibcLocales ];
+  runtimeDeps = [ curl ];
+
+  LC_ALL = "en_US.UTF-8";
+
+  meta = {
+    description = "curl statistics made simple";
+    homepage = "https://github.com/reorx/httpstat";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ nequissimus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httptunnel/default.nix b/nixpkgs/pkgs/tools/networking/httptunnel/default.nix
new file mode 100644
index 000000000000..c8ff4fa7719d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httptunnel/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  version = "3.3-unstable-2023-05-08";
+  pname = "httptunnel";
+
+  src = fetchFromGitHub {
+    owner = "larsbrinkhoff";
+    repo = "httptunnel";
+    rev = "d8f91af976c97a6006a5bd1ad7149380c39ba454";
+    hash = "sha256-fUaVHE3nxq3fU7DYCvaQTOoMzax/qFH8cMegFLLybNk=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  meta = with lib; {
+    description = "Creates a bidirectional virtual data connection tunnelled in HTTP requests";
+    homepage    = "http://www.gnu.org/software/httptunnel/httptunnel.html";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ koral ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile b/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile
new file mode 100644
index 000000000000..7049659d503d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'hue-cli'
diff --git a/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile.lock b/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile.lock
new file mode 100644
index 000000000000..0600d6b7eca6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile.lock
@@ -0,0 +1,18 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    hue-cli (0.1.4)
+      hue-lib (>= 0.7.4)
+      json
+    hue-lib (0.7.4)
+      json
+    json (2.2.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  hue-cli
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/networking/hue-cli/default.nix b/nixpkgs/pkgs/tools/networking/hue-cli/default.nix
new file mode 100644
index 000000000000..76f7dc8e25c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hue-cli/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "hue-cli";
+  gemdir = ./.;
+  exes = [ "hue" ];
+
+  passthru.updateScript = bundlerUpdateScript "hue-cli";
+
+  meta = with lib; {
+    description = "Command line interface for controlling Philips Hue system's lights and bridge";
+    homepage =  "https://github.com/birkirb/hue-cli";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    mainProgram = "hue";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hue-cli/gemset.nix b/nixpkgs/pkgs/tools/networking/hue-cli/gemset.nix
new file mode 100644
index 000000000000..08fd67c38856
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hue-cli/gemset.nix
@@ -0,0 +1,34 @@
+{
+  hue-cli = {
+    dependencies = ["hue-lib" "json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10gjf59pamfy2m17fs271d9ffrg1194b1m6vxzn6p7smzry52h9z";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  hue-lib = {
+    dependencies = ["json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pyl8g8gisdhl79gbzvnddqrsbq0lmflzg7n6yi6xrp5b5290shz";
+      type = "gem";
+    };
+    version = "0.7.4";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hurl/default.nix b/nixpkgs/pkgs/tools/networking/hurl/default.nix
new file mode 100644
index 000000000000..669814c5fb39
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hurl/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, installShellFiles
+, libxml2
+, openssl
+, stdenv
+, curl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hurl";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Orange-OpenSource";
+    repo = pname;
+    rev = version;
+    hash = "sha256-77RGS4B5Jwb/J5eOG2A7sdfAU7PnRaxqz5nogpOnj70=";
+  };
+
+  cargoHash = "sha256-3D8jyHFrhb3y4yeYtO1GqSyb5wlqUydf/4clsbLjJVE=";
+
+  nativeBuildInputs = [
+    pkg-config
+    installShellFiles
+  ];
+
+  buildInputs = [
+    libxml2
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    curl
+  ];
+
+  # Tests require network access to a test server
+  doCheck = false;
+
+  postInstall = ''
+    installManPage docs/manual/hurl.1 docs/manual/hurlfmt.1
+  '';
+
+  meta = with lib; {
+    description = "Command line tool that performs HTTP requests defined in a simple plain text format";
+    homepage = "https://hurl.dev/";
+    changelog = "https://github.com/Orange-OpenSource/hurl/blob/${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ eonpatapon figsoda ];
+    license = licenses.asl20;
+    mainProgram = "hurl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hyenae/default.nix b/nixpkgs/pkgs/tools/networking/hyenae/default.nix
new file mode 100644
index 000000000000..b0e579de2209
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hyenae/default.nix
@@ -0,0 +1,24 @@
+{lib, stdenv, fetchurl, libdnet, pkg-config, libpcap}:
+
+stdenv.mkDerivation rec {
+  pname = "hyenae";
+  version = "0.36-1";
+
+  enableParallelBuilding = true;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/hyenae/${version}/hyenae-${version}.tar.gz";
+    sha256 = "1f3x4yn9a9p4f4wk4l8pv7hxfjc8q7cv20xzf7ky735sq1hj0xcg";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [libdnet libpcap];
+
+  meta = {
+    description = "";
+    homepage = "https://sourceforge.net/projects/hyenae/";
+    license = lib.licenses.gpl3;
+    maintainers = [lib.maintainers.marcweber];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hysteria/default.nix b/nixpkgs/pkgs/tools/networking/hysteria/default.nix
new file mode 100644
index 000000000000..705d8025742b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hysteria/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+buildGoModule rec {
+  pname = "hysteria";
+  version = "2.2.4";
+
+  src = fetchFromGitHub {
+    owner = "apernet";
+    repo = pname;
+    rev = "app/v${version}";
+    hash = "sha256-A8UTnvH5BYRETsjte65+M+HHO6MrqCiPthNEYwBkBYs=";
+  };
+
+  vendorHash = "sha256-uh/qYQBWsyazSbJIz1ykf5bap18fGSIfjVDL8zus2l0=";
+  proxyVendor = true;
+
+  ldflags =
+    let cmd = "github.com/apernet/hysteria/app/cmd";
+    in [
+      "-s"
+      "-w"
+      "-X ${cmd}.appVersion=${version}"
+      "-X ${cmd}.appType=release"
+    ];
+
+  postInstall = ''
+    mv $out/bin/app $out/bin/hysteria
+  '';
+
+  # Network required
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A feature-packed proxy & relay utility optimized for lossy, unstable connections";
+    homepage = "https://github.com/apernet/hysteria";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ oluceps ];
+    mainProgram = "hysteria";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/i2p/default.nix b/nixpkgs/pkgs/tools/networking/i2p/default.nix
new file mode 100644
index 000000000000..6958a12cdf3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/i2p/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, stdenv
+, ps
+, coreutils
+, fetchurl
+, jdk
+, jre
+, ant
+, gettext
+, which
+, java-service-wrapper
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "i2p";
+  version = "2.4.0";
+
+  src = fetchurl {
+    urls = map (mirror: "${mirror}/${finalAttrs.version}/i2psource_${finalAttrs.version}.tar.bz2") [
+      "https://download.i2p2.de/releases"
+      "https://files.i2p-projekt.de"
+      "https://download.i2p2.no/releases"
+    ];
+    sha256 = "sha256-MO+K/K0P/6/ZTTCsMH+GtaazGOLB9EoCMAWEGh/NB3w=";
+  };
+
+  buildInputs = [ jdk ant gettext which ];
+  patches = [ ./i2p.patch ];
+
+  buildPhase = ''
+    export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
+    ant preppkg-linux-only
+  '';
+
+  installPhase = ''
+    set -B
+    mkdir -p $out/{bin,share}
+    cp -r pkg-temp/* $out
+
+    cp ${java-service-wrapper}/bin/wrapper $out/i2psvc
+    cp ${java-service-wrapper}/lib/wrapper.jar $out/lib
+    cp ${java-service-wrapper}/lib/libwrapper.so $out/lib
+
+    sed -i $out/i2prouter -i $out/runplain.sh \
+      -e "s#uname#${coreutils}/bin/uname#" \
+      -e "s#which#${which}/bin/which#" \
+      -e "s#%gettext%#${gettext}/bin/gettext#" \
+      -e "s#/usr/ucb/ps#${ps}/bin/ps#" \
+      -e "s#/usr/bin/tr#${coreutils}/bin/tr#" \
+      -e "s#%INSTALL_PATH#$out#" \
+      -e 's#%USER_HOME#$HOME#' \
+      -e "s#%SYSTEM_java_io_tmpdir#/tmp#" \
+      -e "s#%JAVA%#${jre}/bin/java#"
+    mv $out/runplain.sh $out/bin/i2prouter-plain
+    mv $out/man $out/share/
+    chmod +x $out/bin/* $out/i2psvc
+    rm $out/{osid,postinstall.sh,INSTALL-headless.txt}
+  '';
+
+  meta = with lib; {
+    description = "Applications and router for I2P, anonymity over the Internet";
+    homepage = "https://geti2p.net";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode # source bundles dependencies as jars
+    ];
+    license = with licenses; [
+      asl20
+      boost
+      bsd2
+      bsd3
+      cc-by-30
+      cc0
+      epl10
+      gpl2
+      gpl3
+      lgpl21Only
+      lgpl3Only
+      mit
+      publicDomain
+    ];
+    platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ joelmo ];
+    mainProgram = "i2prouter-plain";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/i2p/i2p.patch b/nixpkgs/pkgs/tools/networking/i2p/i2p.patch
new file mode 100644
index 000000000000..3bb4da729173
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/i2p/i2p.patch
@@ -0,0 +1,43 @@
+diff --git a/installer/resources/i2prouter b/installer/resources/i2prouter
+index 365737d89..2ea14db3e 100644
+--- a/installer/resources/i2prouter
++++ b/installer/resources/i2prouter
+@@ -49,7 +49,7 @@ APP_LONG_NAME="I2P Service"
+ 
+ # gettext - we look for it in the path
+ # fallback to echo is below, we can't set it to echo here.
+-GETTEXT=$(which gettext > /dev/null 2>&1)
++GETTEXT=%gettext%
+ 
+ # Where to install the systemd service
+ SYSTEMD_SERVICE="/etc/systemd/system/${APP_NAME}.service"
+diff --git a/installer/resources/runplain.sh b/installer/resources/runplain.sh
+index eb4995dfe..0186cede3 100644
+--- a/installer/resources/runplain.sh
++++ b/installer/resources/runplain.sh
+@@ -25,7 +25,7 @@ CP=
+ 
+ # Try using the Java binary that I2P was installed with.
+ # If it's not found, try looking in the system PATH.
+-JAVA=$(which "%JAVA_HOME"/bin/java || which java)
++JAVA=%JAVA%
+ 
+ if [ -z $JAVA ] || [ ! -x $JAVA ]; then
+     echo "Error: Cannot find java." >&2
+@@ -44,15 +44,4 @@ if [ $(uname -s) = "Darwin" ]; then
+     export JAVA_TOOL_OPTIONS="-Djava.awt.headless=true"
+ fi
+ JAVAOPTS="${MAXMEMOPT} -Djava.net.preferIPv4Stack=${PREFERv4} -Djava.library.path=${I2P}:${I2P}/lib -Di2p.dir.base=${I2P} -DloggerFilenameOverride=logs/log-router-@.txt"
+-(
+-    nohup ${JAVA} -cp \"${CP}\" ${JAVAOPTS} net.i2p.router.RouterLaunch > /dev/null 2>&1
+-) &
+-PID=$!
+-
+-if [ ! -z $PID ] && kill -0 $PID > /dev/null 2>&1 ; then
+-    echo "I2P started [$PID]" >&2
+-    echo $PID > "${I2PTEMP}/router.pid"
+-else
+-    echo "I2P failed to start." >&2
+-    exit 1
+-fi
++exec ${JAVA} -cp \"${CP}\" ${JAVAOPTS} net.i2p.router.RouterLaunch
diff --git a/nixpkgs/pkgs/tools/networking/i2pd/default.nix b/nixpkgs/pkgs/tools/networking/i2pd/default.nix
new file mode 100644
index 000000000000..01c07c0436a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/i2pd/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub
+, installShellFiles
+, boost, zlib, openssl
+, upnpSupport ? true, miniupnpc
+, aesniSupport ? stdenv.hostPlatform.aesSupport
+, avxSupport   ? stdenv.hostPlatform.avxSupport
+}:
+
+stdenv.mkDerivation rec {
+  pname = "i2pd";
+  version = "2.50.2";
+
+  src = fetchFromGitHub {
+    owner = "PurpleI2P";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-6BzY7t+bFYYwKnj+uuX+vWHg0w0BOuMGwgMg1yIF578=";
+  };
+
+  buildInputs = [ boost zlib openssl ]
+    ++ lib.optional upnpSupport miniupnpc;
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  makeFlags =
+    let ynf = a: b: a + "=" + (if b then "yes" else "no"); in
+    [ (ynf "USE_AESNI" aesniSupport)
+      (ynf "USE_AVX"   avxSupport)
+      (ynf "USE_UPNP"  upnpSupport)
+    ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    install -D i2pd $out/bin/i2pd
+    install --mode=444 -D 'contrib/i2pd.service' "$out/etc/systemd/system/i2pd.service"
+    installManPage 'debian/i2pd.1'
+  '';
+
+  meta = with lib; {
+    homepage = "https://i2pd.website";
+    description = "Minimal I2P router written in C++";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = platforms.unix;
+    mainProgram = "i2pd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ifstat-legacy/default.nix b/nixpkgs/pkgs/tools/networking/ifstat-legacy/default.nix
new file mode 100644
index 000000000000..ff36f83ef8dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ifstat-legacy/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, autoreconfHook, net-snmp }:
+
+stdenv.mkDerivation rec {
+  pname = "ifstat-legacy";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "http://gael.roualland.free.fr/ifstat/ifstat-${version}.tar.gz";
+    sha256 = "01zmv6vk5kh5xmd563xws8a1qnxjb6b6kv59yzz9r3rrghxhd6c5";
+  };
+
+  buildInputs = lib.optional stdenv.isLinux net-snmp;
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mv $out/bin/ifstat $out/bin/ifstat-legacy
+    mv $out/share/man/man1/ifstat.1 $out/share/man/man1/ifstat-legacy.1
+  '';
+
+  meta = with lib; {
+    description = "Report network interfaces bandwith just like vmstat/iostat do for other system counters - legacy version";
+    homepage    = "http://gael.roualland.free.fr/ifstat/";
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.unix;
+    license     = licenses.gpl2;
+    mainProgram = "ifstat-legacy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/iftop/default.nix b/nixpkgs/pkgs/tools/networking/iftop/default.nix
new file mode 100644
index 000000000000..c40a8ee51238
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iftop/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, ncurses, libpcap, automake, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "iftop";
+  version = "1.0pre4";
+
+  src = fetchurl {
+    url = "http://ex-parrot.com/pdw/iftop/download/iftop-${version}.tar.gz";
+    sha256 = "15sgkdyijb7vbxpxjavh5qm5nvyii3fqcg9mzvw7fx8s6zmfwczp";
+  };
+
+  # Explicitly link against libgcc_s, to work around the infamous
+  # "libgcc_s.so.1 must be installed for pthread_cancel to work".
+  LDFLAGS = lib.optionalString stdenv.isLinux "-lgcc_s";
+
+  preConfigure = ''
+    cp ${automake}/share/automake*/config.{sub,guess} config
+  '';
+
+  buildInputs = [ncurses libpcap];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: tui.o:/build/iftop-1.0pre4/ui_common.h:41: multiple definition of `service_hash';
+  #     iftop.o:/build/iftop-1.0pre4/ui_common.h:41: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  passthru.tests = { inherit (nixosTests) iftop; };
+
+  meta = with lib; {
+    description = "Display bandwidth usage on a network interface";
+    longDescription = ''
+      iftop does for network usage what top(1) does for CPU usage. It listens
+      to network traffic on a named interface and displays a table of current
+      bandwidth usage by pairs of hosts.
+    '';
+    license = licenses.gpl2Plus;
+    homepage = "http://ex-parrot.com/pdw/iftop/";
+    platforms = platforms.unix;
+    maintainers = [ ];
+    mainProgram = "iftop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ifwifi/default.nix b/nixpkgs/pkgs/tools/networking/ifwifi/default.nix
new file mode 100644
index 000000000000..f04c3369bacf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ifwifi/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, makeWrapper, networkmanager, iw, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ifwifi";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "araujobsd";
+    repo = "ifwifi";
+    rev = version;
+    sha256 = "sha256-DPMCwyKqGJrav0wASBky9bS1bvJ3xaGsDzsk1bKaH1U=";
+  };
+
+  cargoHash = "sha256-TL7ZsRbpRdYymJHuoCUCqe/U3Vacb9mtKFh85IOl+PA=";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    wrapProgram "$out/bin/ifwifi" \
+      --prefix PATH : "${lib.makeBinPath (
+        # `ifwifi` runtime dep
+        [ networkmanager ]
+        # `wifiscanner` crate's runtime deps
+        ++ (lib.optional stdenv.isLinux iw)
+        # ++ (lib.optional stdenv.isDarwin airport) # airport isn't packaged
+      )}"
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A simple wrapper over nmcli using wifiscanner made in rust";
+    longDescription = ''
+      In the author's words:
+
+      I felt bothered because I never remember the long and tedious command
+      line to setup my wifi interface. So, I wanted to develop something
+      using rust to simplify the usage of nmcli, and I met the wifiscanner
+      project that gave me almost everything I wanted to create this tool.
+    '';
+    homepage = "https://github.com/araujobsd/ifwifi";
+    license = with licenses; [ bsd2 ];
+    maintainers = with maintainers; [ blaggacao ];
+    # networkmanager doesn't work on darwin
+    # even though the `wifiscanner` crate would work
+    platforms = with platforms; linux; # ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/igmpproxy/default.nix b/nixpkgs/pkgs/tools/networking/igmpproxy/default.nix
new file mode 100644
index 000000000000..252f9dd05609
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/igmpproxy/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "igmpproxy";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "pali";
+    repo = "igmpproxy";
+    rev = version;
+    sha256 = "sha256-kv8XtZ/z8zPHYSZ4k4arn2Y+L2xegr2DwhvlguJV820=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "A daemon that routes multicast using IGMP forwarding";
+    homepage = "https://github.com/pali/igmpproxy/";
+    changelog = "https://github.com/pali/igmpproxy/releases/tag/${version}";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.sdier ];
+    # The maintainer is using this on linux, but if you test it on other platforms
+    # please add them here!
+    platforms = platforms.linux;
+    mainProgram = "igmpproxy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/imapsync/default.nix b/nixpkgs/pkgs/tools/networking/imapsync/default.nix
new file mode 100644
index 000000000000..0fb519ad5af7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/imapsync/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, fetchFromGitHub
+, makeWrapper
+, perl
+, perlPackages
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "imapsync";
+  version = "2.229";
+
+  src = fetchFromGitHub {
+    owner = "imapsync";
+    repo = "imapsync";
+    rev = "imapsync-${version}";
+    sha256 = "sha256-nlNePOV3Y0atEPSRByRo3dHj/WjIaefEDeWdMKTo4gc=";
+  };
+
+  postPatch = ''
+    sed -i -e s@/usr@$out@ Makefile
+    substituteInPlace INSTALL.d/prerequisites_imapsync --replace "PAR::Packer" ""
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/imapsync --set PERL5LIB $PERL5LIB
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = with perlPackages; [
+    Appcpanminus
+    CGI
+    CryptOpenSSLRSA
+    DataUniqid
+    DistCheckConflicts
+    EncodeIMAPUTF7
+    FileCopyRecursive
+    FileTail
+    IOSocketINET6
+    IOTee
+    JSONWebToken
+    LWP
+    MailIMAPClient
+    ModuleImplementation
+    ModuleScanDeps
+    NTLM
+    PackageStash
+    PackageStashXS
+    ProcProcessTable
+    Readonly
+    RegexpCommon
+    SysMemInfo
+    TermReadKey
+    TestDeep
+    TestFatal
+    TestMockGuard
+    TestMockObject
+    TestPod
+    TestRequires
+    UnicodeString
+    perl
+  ];
+
+  meta = with lib; {
+    description = "Mail folder synchronizer between IMAP servers";
+    homepage = "https://imapsync.lamiral.info/";
+    license = licenses.nlpl;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/inadyn/default.nix b/nixpkgs/pkgs/tools/networking/inadyn/default.nix
new file mode 100644
index 000000000000..68e1483e7a92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/inadyn/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, gnutls, libite, libconfuse }:
+
+stdenv.mkDerivation rec {
+  pname = "inadyn";
+  version = "2.12.0";
+
+  src = fetchFromGitHub {
+    owner = "troglobit";
+    repo = "inadyn";
+    rev = "v${version}";
+    sha256 = "sha256-aQHJtnMDaHF1XY9lwQVR6f78Zk2UI7OC3Oxt1r1KMak=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ gnutls libite libconfuse ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://troglobit.com/projects/inadyn/";
+    description = "Free dynamic DNS client";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    mainProgram = "inadyn";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/inetutils/default.nix b/nixpkgs/pkgs/tools/networking/inetutils/default.nix
new file mode 100644
index 000000000000..cbd327b07297
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/inetutils/default.nix
@@ -0,0 +1,102 @@
+{ stdenv
+, lib
+, fetchurl
+, ncurses
+, perl
+, help2man
+, apparmorRulesFromClosure
+, libxcrypt
+, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "inetutils";
+  version = "2.5";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
+    hash = "sha256-h2l9YKMeELXLhqnwZR4ex77pgyDQSMBzlDGqw9V2T7Y=";
+  };
+
+  outputs = ["out" "apparmor"];
+
+  patches = [
+    # https://git.congatec.com/yocto/meta-openembedded/commit/3402bfac6b595c622e4590a8ff5eaaa854e2a2a3
+    ./inetutils-1_9-PATH_PROCNET_DEV.patch
+  ];
+
+  strictDeps = true;
+  nativeBuildInputs = [ help2man perl /* for `whois' */ ];
+  buildInputs = [ ncurses /* for `talk' */ libxcrypt ];
+
+  env = lib.optionalAttrs stdenv.isDarwin {
+    # This is a temporary workaround for missing headers in the 10.12 SDK to avoid a mass rebuild.
+    # A commit to revert this change will be included in the fix PR targeting staging.
+    NIX_CFLAGS_COMPILE = "-Wno-error=implicit-function-declaration";
+  };
+
+  # Don't use help2man if cross-compiling
+  # https://lists.gnu.org/archive/html/bug-sed/2017-01/msg00001.html
+  # https://git.congatec.com/yocto/meta-openembedded/blob/3402bfac6b595c622e4590a8ff5eaaa854e2a2a3/meta-networking/recipes-connectivity/inetutils/inetutils_1.9.1.bb#L44
+  preConfigure = let
+    isCross = stdenv.hostPlatform != stdenv.buildPlatform;
+  in lib.optionalString isCross ''
+    export HELP2MAN=true
+  '';
+
+  configureFlags = [ "--with-ncurses-include-dir=${ncurses.dev}/include" ]
+  ++ lib.optionals stdenv.hostPlatform.isMusl [ # Musl doesn't define rcmd
+    "--disable-rcp"
+    "--disable-rsh"
+    "--disable-rlogin"
+    "--disable-rexec"
+  ] ++ lib.optional stdenv.isDarwin  "--disable-servers";
+
+  doCheck = true;
+
+  installFlags = [ "SUIDMODE=" ];
+
+  postInstall = ''
+    mkdir $apparmor
+    cat >$apparmor/bin.ping <<EOF
+    $out/bin/ping {
+      include <abstractions/base>
+      include <abstractions/consoles>
+      include <abstractions/nameservice>
+      include "${apparmorRulesFromClosure { name = "ping"; } [stdenv.cc.libc]}"
+      include <local/bin.ping>
+      capability net_raw,
+      network inet raw,
+      network inet6 raw,
+      mr $out/bin/ping,
+    }
+    EOF
+  '';
+
+  meta = with lib; {
+    description = "Collection of common network programs";
+
+    longDescription =
+      '' The GNU network utilities suite provides the
+         following tools: ftp(d), hostname, ifconfig, inetd, logger, ping, rcp,
+         rexec(d), rlogin(d), rsh(d), syslogd, talk(d), telnet(d), tftp(d),
+         traceroute, uucpd, and whois.
+      '';
+
+    homepage = "https://www.gnu.org/software/inetutils/";
+    license = licenses.gpl3Plus;
+
+    maintainers = with maintainers; [ matthewbauer ];
+    platforms = platforms.unix;
+
+    /**
+      The `logger` binary from `util-linux` is preferred over `inetutils`.
+      To instead prioritize this package, set a _lower_ `meta.priority`, or
+      use e.g. `lib.setPrio 5 inetutils`.
+
+      Note that the default `meta.priority` is defined in `buildEnv` and is
+      currently 5.
+    */
+    priority = (util-linux.meta.priority or 5) + 1;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/inetutils/inetutils-1_9-PATH_PROCNET_DEV.patch b/nixpkgs/pkgs/tools/networking/inetutils/inetutils-1_9-PATH_PROCNET_DEV.patch
new file mode 100644
index 000000000000..2592989a90a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/inetutils/inetutils-1_9-PATH_PROCNET_DEV.patch
@@ -0,0 +1,26 @@
+inetutils: define PATH_PROCNET_DEV if not already defined
+
+this prevents the following compilation error :
+system/linux.c:401:15: error: 'PATH_PROCNET_DEV' undeclared (first use in this function)
+
+this patch comes from :
+ http://repository.timesys.com/buildsources/i/inetutils/inetutils-1.9/
+
+Upstream-Status: Inappropriate [not author]
+
+Signed-of-by: Eric Bénard <eric@eukrea.com>
+---
+diff -Naur inetutils-1.9.orig/ifconfig/system/linux.c inetutils-1.9/ifconfig/system/linux.c
+--- inetutils-1.9.orig/ifconfig/system/linux.c	2012-01-04 16:31:36.000000000 -0500
++++ inetutils-1.9/ifconfig/system/linux.c	2012-01-04 16:40:53.000000000 -0500
+@@ -49,6 +49,10 @@
+ #include "../ifconfig.h"
+ 
+ 
++#ifndef PATH_PROCNET_DEV
++  #define PATH_PROCNET_DEV "/proc/net/dev"
++#endif
++
+ /* ARPHRD stuff.  */
+ 
+ static void
diff --git a/nixpkgs/pkgs/tools/networking/innernet/default.nix b/nixpkgs/pkgs/tools/networking/innernet/default.nix
new file mode 100644
index 000000000000..f4523e0ec201
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/innernet/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, sqlite
+, installShellFiles
+, Security
+, libiconv
+, innernet
+, testers
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "innernet";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "tonarino";
+    repo = "innernet";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-dFMAzLvPO5xAfJqUXdiLf13uh5H5ay+CI9aop7Fhprk=";
+  };
+
+  cargoHash = "sha256-39LryfisVtNMX2XLPh/AEQ1KzVtwdE3wuTaTbxGMaBI=";
+
+  nativeBuildInputs = [
+    rustPlatform.bindgenHook
+    installShellFiles
+  ];
+
+  buildInputs = [
+    sqlite
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+    libiconv
+  ];
+
+  postInstall = ''
+    installManPage doc/innernet-server.8.gz
+    installManPage doc/innernet.8.gz
+    installShellCompletion doc/innernet.completions.{bash,fish,zsh}
+    installShellCompletion doc/innernet-server.completions.{bash,fish,zsh}
+  '' + (lib.optionalString stdenv.isLinux ''
+    find . -regex '.*\.\(target\|service\)' | xargs install -Dt $out/lib/systemd/system
+    find $out/lib/systemd/system -type f | xargs sed -i "s|/usr/bin/innernet|$out/bin/innernet|"
+  '');
+
+  passthru.tests = {
+    serverVersion = testers.testVersion { package = innernet; command = "innernet-server --version"; };
+    version = testers.testVersion { package = innernet; command = "innernet --version"; };
+  };
+
+  meta = with lib; {
+    description = "A private network system that uses WireGuard under the hood";
+    homepage = "https://github.com/tonarino/innernet";
+    changelog = "https://github.com/tonarino/innernet/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tomberek _0x4A6F ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/iodine/default.nix b/nixpkgs/pkgs/tools/networking/iodine/default.nix
new file mode 100644
index 000000000000..a684f3a580f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iodine/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, zlib, nettools, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "iodine";
+  version = "unstable-2019-09-27";
+
+  src = fetchFromGitHub {
+    owner = "yarrick";
+    repo = "iodine";
+    rev = "8e14f18";
+    sha256 = "0k8m99qfjd5n6n56jnq85y7q8h2i2b8yw6ba0kxsz4jyx97lavg3";
+  };
+
+  buildInputs = [ zlib ];
+
+  patchPhase = ''sed -i "s,/sbin/route,${nettools}/bin/route," src/tun.c'';
+
+  env.NIX_CFLAGS_COMPILE = "-DIFCONFIGPATH=\"${nettools}/bin/\"";
+
+  installFlags = [ "prefix=\${out}" ];
+
+  passthru.tests = {
+    inherit (nixosTests) iodine;
+  };
+
+  meta = {
+    homepage = "http://code.kryo.se/iodine/";
+    description = "Tool to tunnel IPv4 data through a DNS server";
+    license = lib.licenses.isc;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ip2location/default.nix b/nixpkgs/pkgs/tools/networking/ip2location/default.nix
new file mode 100644
index 000000000000..6fa9345b3f01
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ip2location/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ip2location";
+  version = "7.0.0";
+
+  src = fetchurl {
+    sha256 = "05zbc02z7vm19byafi05i1rnkxc6yrfkhnm30ly68zzyipkmzx1l";
+    url = "https://www.ip2location.com/downloads/ip2location-${version}.tar.gz";
+  };
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Look up locations of host names and IP addresses";
+    longDescription = ''
+      A command-line tool to find the country, region, city,coordinates,
+      zip code, time zone, ISP, domain name, connection type, area code,
+      weather, MCC, MNC, mobile brand name, elevation and usage type of
+      any IP address or host name in the IP2Location databases.
+    '';
+    homepage = "https://www.ip2location.com/free/applications";
+    license = with licenses; [ gpl3Plus lgpl3Plus ];
+    platforms = platforms.linux;
+    mainProgram = "ip2location";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ip2unix/default.nix b/nixpkgs/pkgs/tools/networking/ip2unix/default.nix
new file mode 100644
index 000000000000..b37d5b1272c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ip2unix/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, yaml-cpp, systemd
+, python3Packages, asciidoc, libxslt, docbook_xml_dtd_45, docbook_xsl
+, libxml2, docbook5
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ip2unix";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner = "nixcloud";
+    repo = "ip2unix";
+    rev = "v${version}";
+    hash = "sha256-+p5wQbX35LAjZ4vIE4AhI4M6gQ7gVviqf9jJDAr9xg8";
+  };
+
+  nativeBuildInputs = [
+    meson ninja pkg-config asciidoc libxslt.bin docbook_xml_dtd_45 docbook_xsl
+    libxml2.bin docbook5 python3Packages.pytest python3Packages.pytest-timeout
+    systemd
+  ];
+
+  buildInputs = [ yaml-cpp ];
+
+  doCheck = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    found=0
+    for man in "$out/share/man/man1"/ip2unix.1*; do
+      test -s "$man" && found=1
+    done
+    if [ $found -ne 1 ]; then
+      echo "ERROR: Manual page hasn't been generated." >&2
+      exit 1
+    fi
+  '';
+
+  meta = {
+    homepage = "https://github.com/nixcloud/ip2unix";
+    description = "Turn IP sockets into Unix domain sockets";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.lgpl3;
+    maintainers = [ lib.maintainers.aszlig ];
+    mainProgram = "ip2unix";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ipcalc/default.nix b/nixpkgs/pkgs/tools/networking/ipcalc/default.nix
new file mode 100644
index 000000000000..e45a2162dd3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ipcalc/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, ronn
+, withGeo ? true
+, geoip
+}:
+
+# In order for the geoip part to work, you need to set up a link from
+# geoip.dataDir to a directory containing the data files This would typically be
+# /var/lib/geoip-databases pointing to geoip-legacy/share/GeoIP
+
+stdenv.mkDerivation rec {
+  pname = "ipcalc";
+  version = "1.0.3";
+
+  src = fetchFromGitLab {
+    owner = "ipcalc";
+    repo = "ipcalc";
+    rev = version;
+    hash = "sha256-9eaR1zG8tjSGlkpyY1zTHAVgN5ypuyRfeRq6ct6zsLU=";
+  };
+
+  patches = [
+    # disable tests which fail in NixOS sandbox (trying to access the network)
+    ./sandbox_tests.patch
+  ];
+
+  # technically not needed as we do not support the paid maxmind databases, but
+  # keep it around if someone wants to add support and /usr/share/GeoIP is
+  # broken anyway
+  postPatch = ''
+    substituteInPlace ipcalc-maxmind.c \
+      --replace /usr/share/GeoIP /var/lib/GeoIP
+  '';
+
+  nativeBuildInputs = [ meson ninja pkg-config ronn ];
+
+  buildInputs = [ geoip ];
+
+  mesonFlags = [
+    "-Duse_geoip=${if withGeo then "en" else "dis"}abled"
+    "-Duse_maxminddb=disabled"
+    # runtime linking doesn't work on NixOS anyway
+    "-Duse_runtime_linking=disabled"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Simple IP network calculator";
+    homepage = "https://gitlab.com/ipcalc/ipcalc";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+    mainProgram = "ipcalc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ipcalc/sandbox_tests.patch b/nixpkgs/pkgs/tools/networking/ipcalc/sandbox_tests.patch
new file mode 100644
index 000000000000..d0a246843589
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ipcalc/sandbox_tests.patch
@@ -0,0 +1,59 @@
+diff --git a/tests/meson.build b/tests/meson.build
+index 536c169..0ce23f1 100644
+--- a/tests/meson.build
++++ b/tests/meson.build
+@@ -64,54 +64,6 @@ test('RandomIPv6Explicit',
+ 		ipcalc.full_path() + ' -6 -r 24' + '|grep Address'
+ 	]
+ )
+-test('HostnameIPv6Localhost',
+-	testrunner,
+-	args : [
+-		'--test-outfile',
+-		ipcalc.full_path() + ' -6 -o localhost',
+-		files('hostname-localhost-ipv6')
+-	]
+-)
+-test('HostnameIPv4Localhost',
+-	testrunner,
+-	args : [
+-		'--test-outfile',
+-		ipcalc.full_path() + ' -4 -o localhost',
+-		files('hostname-localhost-ipv4')
+-	]
+-)
+-test('HostnameIPv4LocalhostJson',
+-	testrunner,
+-	args : [
+-		'--test-outfile',
+-		ipcalc.full_path() + ' -j -4 -o localhost',
+-		files('hostname-localhost-ipv4-json')
+-	]
+-)
+-test('IPIPv6Localhost',
+-	testrunner,
+-	args : [
+-		'--test-outfile',
+-		ipcalc.full_path() + ' -h ::1',
+-		files('ip-localhost-ipv6')
+-	]
+-)
+-test('IPIPv4Localhost',
+-	testrunner,
+-	args : [
+-		'--test-outfile',
+-		ipcalc.full_path() + ' -h 127.0.0.1',
+-		files('ip-localhost-ipv4')
+-	]
+-)
+-test('IPIPv4LocalhostJson',
+-	testrunner,
+-	args : [
+-		'--test-outfile',
+-		ipcalc.full_path() + ' -j -h 127.0.0.1',
+-		files('ip-localhost-ipv4-json')
+-	]
+-)
+ # --class-prefix tests
+ test('AssignClassPrefix12',
+ 	testrunner,
diff --git a/nixpkgs/pkgs/tools/networking/iperf/2.nix b/nixpkgs/pkgs/tools/networking/iperf/2.nix
new file mode 100644
index 000000000000..9831a4f4f7d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iperf/2.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "iperf";
+  version = "2.1.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/iperf2/files/${pname}-${version}.tar.gz";
+    sha256 = "1yflnj2ni988nm0p158q8lnkiq2gn2chmvsglyn2gqmqhwp3jaq6";
+  };
+
+  hardeningDisable = [ "format" ];
+  configureFlags = [ "--enable-fastsampling" ];
+
+  makeFlags = [ "AR:=$(AR)" ];
+
+  postInstall = ''
+    mv $out/bin/iperf $out/bin/iperf2
+    ln -s $out/bin/iperf2 $out/bin/iperf
+  '';
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/iperf/";
+    description = "Tool to measure IP bandwidth using UDP or TCP";
+    platforms = platforms.unix;
+    license = licenses.mit;
+
+    # prioritize iperf3
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/iperf/3.nix b/nixpkgs/pkgs/tools/networking/iperf/3.nix
new file mode 100644
index 000000000000..ffb1d5c4627a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iperf/3.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, openssl, fetchpatch, lksctp-tools }:
+
+stdenv.mkDerivation rec {
+  pname = "iperf";
+  version = "3.16";
+
+  src = fetchurl {
+    url = "https://downloads.es.net/pub/iperf/iperf-${version}.tar.gz";
+    hash = "sha256-zHQMa76hBDmMw+RmvvxRWiWJbsheRKZi1fSnZ7nPcT4=";
+  };
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isLinux [ lksctp-tools ];
+  configureFlags = [
+    "--with-openssl=${openssl.dev}"
+  ];
+
+  outputs = [ "out" "man" ];
+
+  patches = lib.optionals stdenv.hostPlatform.isMusl [
+    (fetchpatch {
+      url = "https://git.alpinelinux.org/aports/plain/main/iperf3/remove-pg-flags.patch?id=7f979fc51ae31d5c695d8481ba84a4afc5080efb";
+      name = "remove-pg-flags.patch";
+      sha256 = "0z3zsmf7ln08rg1mmzl8s8jm5gp8x62f5cxiqcmi8dcs2nsxwgbi";
+    })
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/iperf3 $out/bin/iperf
+    ln -s $man/share/man/man1/iperf3.1 $man/share/man/man1/iperf.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://software.es.net/iperf/";
+    description = "Tool to measure IP bandwidth using UDP or TCP";
+    platforms = platforms.unix;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/iperf3d/default.nix b/nixpkgs/pkgs/tools/networking/iperf3d/default.nix
new file mode 100644
index 000000000000..1edcaf86ed2e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iperf3d/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, rustPlatform, makeWrapper, iperf3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "iperf3d";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "wobcom";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-pMwGoBgFRVY+H51k+YCamzHgBoaJVwEVqY0CvMPvE0w=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/iperf3d --prefix PATH : ${iperf3}/bin
+  '';
+
+  cargoHash = "sha256-3mJBn70sSoDL9GNxgEZqA8S4GrY+DjnYY9Cc5Xe1GFQ=";
+
+  meta = with lib; {
+    description = "A iperf3 client and server wrapper for dynamic server ports";
+    homepage = "https://github.com/wobcom/iperf3d";
+    license = licenses.mit;
+    maintainers = with maintainers; [ netali ] ++ teams.wdz.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ipfetch/default.nix b/nixpkgs/pkgs/tools/networking/ipfetch/default.nix
new file mode 100644
index 000000000000..f264deaa8a35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ipfetch/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchFromGitHub, bash, wget, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "ipfetch";
+  version = "unstable-2022-03-24";
+
+  src = fetchFromGitHub {
+    owner = "trakBan";
+    repo = "ipfetch";
+    rev = "fc295bfda4f9fea6eee9f6f3f2dabc26b6f25be4";
+    sha256 = "sha256-YKQ9pRBj2hgPg2ShCqWGxzHs/n7kNhKRNyElRDwHDBU=";
+  };
+
+  strictDeps = true;
+  buildInputs = [ bash wget ];
+  nativeBuildInputs = [ makeWrapper ];
+  postPatch = ''
+    patchShebangs --host ipfetch
+    # Not only does `/usr` have to be replaced but also `/flags` needs to be added because with Nix the script is broken without this. The `/flags` is somehow not needed if you install via the install script in the source repository.
+    substituteInPlace ./ipfetch --replace /usr/share/ipfetch $out/usr/share/ipfetch/flags
+  '';
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/usr/share/ipfetch/
+    cp -r flags $out/usr/share/ipfetch/
+    cp ipfetch $out/bin/ipfetch
+    wrapProgram $out/bin/ipfetch --prefix PATH : ${
+      lib.makeBinPath [ bash wget ]
+    }
+  '';
+
+  meta = with lib; {
+    description = "Neofetch but for ip addresses";
+    homepage = "https://github.com/trakBan/ipfetch";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ annaaurora ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ipgrep/default.nix b/nixpkgs/pkgs/tools/networking/ipgrep/default.nix
new file mode 100644
index 000000000000..d1f5316c27b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ipgrep/default.nix
@@ -0,0 +1,38 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  version = "1.0.1";
+  pname = "ipgrep";
+
+  disabled = python3Packages.isPy27;
+
+  src = fetchFromGitHub {
+    owner = "jedisct1";
+    repo = pname;
+    rev = version;
+    hash = "sha256-NrhcUFQM+L66KaDRRpAoC+z5s54a+1fqEepTRXVZ5Qs=";
+  };
+
+  patchPhase = ''
+    mkdir -p ${pname}
+    substituteInPlace setup.py \
+      --replace "'scripts': []" "'scripts': { '${pname}.py' }"
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    pycares
+    urllib3
+    requests
+  ];
+
+  meta = with lib; {
+    description = "Extract, defang, resolve names and IPs from text";
+    longDescription = ''
+      ipgrep extracts possibly obfuscated host names and IP addresses
+      from text, resolves host names, and prints them, sorted by ASN.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ipinfo/default.nix b/nixpkgs/pkgs/tools/networking/ipinfo/default.nix
new file mode 100644
index 000000000000..e9db76d73f56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ipinfo/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ipinfo";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = "cli";
+    rev = "refs/tags/${pname}-${version}";
+    hash = "sha256-B0Qb6RFBAUBpE1o8GqKQtxpndeHermMlwlWlfIa7rmM=";
+  };
+
+  vendorHash = null;
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command Line Interface for the IPinfo API";
+    homepage = "https://github.com/ipinfo/cli";
+    changelog = "https://github.com/ipinfo/cli/releases/tag/ipinfo-${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ipv6calc/default.nix b/nixpkgs/pkgs/tools/networking/ipv6calc/default.nix
new file mode 100644
index 000000000000..9bc655943e0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ipv6calc/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, getopt
+, ip2location-c
+, openssl
+, perl
+, libmaxminddb ? null
+, geolite-legacy ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ipv6calc";
+  version = "4.1.0";
+
+  src = fetchFromGitHub {
+    owner = "pbiering";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-zpV3RpFPYICntNLVTC4FpkrxJ7nDh/KEzmNpg0ORWZQ=";
+  };
+
+  buildInputs = [
+    libmaxminddb
+    geolite-legacy
+    getopt
+    ip2location-c
+    openssl
+    perl
+  ];
+
+  postPatch = ''
+    patchShebangs *.sh */*.sh
+    for i in {,databases/}lib/Makefile.in; do
+      substituteInPlace $i --replace "/sbin/ldconfig" "ldconfig"
+    done
+  '';
+
+  configureFlags = [
+    "--prefix=${placeholder "out"}"
+    "--libdir=${placeholder "out"}/lib"
+    "--disable-bundled-getopt"
+    "--disable-bundled-md5"
+    "--disable-dynamic-load"
+    "--enable-shared"
+  ] ++ lib.optionals (libmaxminddb != null) [
+    "--enable-mmdb"
+  ] ++ lib.optionals (geolite-legacy != null) [
+    "--with-geoip-db=${geolite-legacy}/share/GeoIP"
+  ] ++ lib.optionals (ip2location-c != null) [
+    "--enable-ip2location"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Calculate/manipulate (not only) IPv6 addresses";
+    longDescription = ''
+      ipv6calc is a small utility to manipulate (not only) IPv6 addresses and
+      is able to do other tricky things. Intentions were convering a given
+      IPv6 address into compressed format, convering a given IPv6 address into
+      the same format like shown in /proc/net/if_inet6 and (because it was not
+      difficult) migrating the Perl program ip6_int into.
+      Now only one utiltity is needed to do a lot.
+    '';
+    homepage = "http://www.deepspace6.net/projects/ipv6calc.html";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/isync/0001-Increase-imap_vprintf-buffer-size.patch b/nixpkgs/pkgs/tools/networking/isync/0001-Increase-imap_vprintf-buffer-size.patch
new file mode 100644
index 000000000000..8fefb2d6f73a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/isync/0001-Increase-imap_vprintf-buffer-size.patch
@@ -0,0 +1,34 @@
+From e8a3a20aed135272a9ec0103f4055411c075f043 Mon Sep 17 00:00:00 2001
+From: Michal Sojka <michal.sojka@cvut.cz>
+Date: Mon, 7 Nov 2022 00:07:22 +0100
+Subject: [PATCH] Increase imap_vprintf buffer size
+
+This fixes "Fatal: buffer too small. Please report a bug." error. See
+https://sourceforge.net/p/isync/mailman/isync-devel/thread/87fsevvebj.fsf%40steelpick.2x.cz/#msg37731590
+for related discussion.
+
+When using mbsync with XOAUTH2 authentication (needed for Office365
+mailboxes), the access token used for the LOGIN command may not fit
+into the currently used buffer of 1000 characters. In my case, I need
+the buffer to be at least 2000 characters long. To make this more
+future-proof, I increase the buffer size to 4000 characters.
+---
+ src/drv_imap.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/drv_imap.c b/src/drv_imap.c
+index c5a7aed..7847192 100644
+--- a/src/drv_imap.c
++++ b/src/drv_imap.c
+@@ -528,7 +528,7 @@ imap_vprintf( const char *fmt, va_list ap )
+ 	uint totlen = 0;
+ 	const char *segs[MAX_SEGS];
+ 	uint segls[MAX_SEGS];
+-	char buf[1000];
++	char buf[4000];
+ 
+ 	d = buf;
+ 	ed = d + sizeof(buf);
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/tools/networking/isync/default.nix b/nixpkgs/pkgs/tools/networking/isync/default.nix
new file mode 100644
index 000000000000..89b200e8e563
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/isync/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, pkg-config, perl
+, openssl, db, cyrus_sasl, zlib
+, Security
+# Disabled by default as XOAUTH2 is an "OBSOLETE" SASL mechanism and this relies
+# on a package that isn't really maintained anymore:
+, withCyrusSaslXoauth2 ? false, cyrus-sasl-xoauth2, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "isync";
+  version = "1.4.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/isync/${pname}-${version}.tar.gz";
+    sha256 = "1zq0wwvmqsl9y71546dr0aygzn9gjjfiw19hlcq87s929y4p6ckw";
+  };
+
+  patches = [
+    # Fixes "Fatal: buffer too small" error
+    ./0001-Increase-imap_vprintf-buffer-size.patch
+    # Fix #202595: SSL error "Socket error: ... unexpected eof while reading"
+    # Source: https://sourceforge.net/p/isync/isync/ci/b6c36624f04cd388873785c0631df3f2f9ac4bf0/
+    ./work-around-unexpected-EOF-error-messages-at-end-of-SSL-connections.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config perl ]
+    ++ lib.optionals withCyrusSaslXoauth2 [ makeWrapper ];
+  buildInputs = [ openssl db cyrus_sasl zlib ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  postInstall = lib.optionalString withCyrusSaslXoauth2 ''
+    wrapProgram "$out/bin/mbsync" \
+        --prefix SASL_PATH : "${lib.makeSearchPath "lib/sasl2" [ cyrus-sasl-xoauth2 ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "http://isync.sourceforge.net/";
+    # https://sourceforge.net/projects/isync/
+    changelog = "https://sourceforge.net/p/isync/isync/ci/v${version}/tree/NEWS";
+    description = "Free IMAP and MailDir mailbox synchronizer";
+    longDescription = ''
+      mbsync (formerly isync) is a command line application which synchronizes
+      mailboxes. Currently Maildir and IMAP4 mailboxes are supported. New
+      messages, message deletions and flag changes can be propagated both ways.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos lheckemann ];
+    mainProgram = "mbsync";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/isync/work-around-unexpected-EOF-error-messages-at-end-of-SSL-connections.patch b/nixpkgs/pkgs/tools/networking/isync/work-around-unexpected-EOF-error-messages-at-end-of-SSL-connections.patch
new file mode 100644
index 000000000000..9177085ecad7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/isync/work-around-unexpected-EOF-error-messages-at-end-of-SSL-connections.patch
@@ -0,0 +1,76 @@
+From b6c36624f04cd388873785c0631df3f2f9ac4bf0 Mon Sep 17 00:00:00 2001
+From: Oswald Buddenhagen <ossi@users.sf.net>
+Date: Mon, 6 Jun 2022 11:55:37 +0200
+Subject: [PATCH] work around "unexpected EOF" error messages at end of SSL
+ connections
+
+gmail apparently doesn't send a close notification (SSL_shutdown())
+before closing the TCP socket.
+---
+ src/drv_imap.c | 7 +++++--
+ src/socket.c   | 9 +++++++++
+ src/socket.h   | 1 +
+ 3 files changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/src/drv_imap.c b/src/drv_imap.c
+index fb8d165..6286045 100644
+--- a/src/drv_imap.c
++++ b/src/drv_imap.c
+@@ -1620,6 +1620,7 @@ imap_socket_read( void *aux )
+ 					error( "IMAP error: unexpected BYE response: %s\n", cmd );
+ 					/* We just wait for the server to close the connection now. */
+ 					ctx->expectEOF = 1;
++					socket_expect_eof( &ctx->conn );
+ 				} else {
+ 					/* We still need to wait for the LOGOUT's tagged OK. */
+ 				}
+@@ -1882,10 +1883,12 @@ static void
+ imap_cleanup_p2( imap_store_t *ctx,
+                  imap_cmd_t *cmd ATTR_UNUSED, int response )
+ {
+-	if (response == RESP_NO)
++	if (response == RESP_NO) {
+ 		imap_cancel_store( &ctx->gen );
+-	else if (response == RESP_OK)
++	} else if (response == RESP_OK) {
+ 		ctx->expectEOF = 1;
++		socket_expect_eof( &ctx->conn );
++	}
+ }
+ 
+ /******************* imap_open_store *******************/
+diff --git a/src/socket.c b/src/socket.c
+index ac3c847..892cece 100644
+--- a/src/socket.c
++++ b/src/socket.c
+@@ -810,6 +810,15 @@ socket_expect_activity( conn_t *conn, int expect )
+ 		conf_wakeup( &conn->fd_timeout, expect ? conn->conf->timeout : -1 );
+ }
+ 
++void
++socket_expect_eof( conn_t *sock )
++{
++#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF  // implies HAVE_LIBSSL
++	if (sock->ssl)
++		SSL_set_options( sock->ssl, SSL_OP_IGNORE_UNEXPECTED_EOF );
++#endif
++}
++
+ int
+ socket_read( conn_t *conn, char *buf, uint len )
+ {
+diff --git a/src/socket.h b/src/socket.h
+index 5b1edd0..af679aa 100644
+--- a/src/socket.h
++++ b/src/socket.h
+@@ -142,6 +142,7 @@ void socket_start_tls(conn_t *conn, void (*cb)( int ok, void *aux ) );
+ void socket_start_deflate( conn_t *conn );
+ void socket_close( conn_t *sock );
+ void socket_expect_activity( conn_t *sock, int expect );
++void socket_expect_eof( conn_t *sock );
+ int socket_read( conn_t *sock, char *buf, uint len ); /* never waits */
+ char *socket_read_line( conn_t *sock ); /* don't free return value; never waits */
+ typedef enum { KeepOwn = 0, GiveOwn } ownership_t;
+-- 
+2.38.0
+
diff --git a/nixpkgs/pkgs/tools/networking/ivpn/default.nix b/nixpkgs/pkgs/tools/networking/ivpn/default.nix
new file mode 100644
index 000000000000..62ac14812aad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ivpn/default.nix
@@ -0,0 +1,92 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, wirelesstools
+, makeWrapper
+, wireguard-tools
+, openvpn
+, obfs4
+, iproute2
+, dnscrypt-proxy
+, iptables
+, gawk
+, util-linux
+}:
+
+builtins.mapAttrs (pname: attrs: buildGoModule (attrs // rec {
+  inherit pname;
+  version = "3.10.15";
+
+  src = fetchFromGitHub {
+    owner = "ivpn";
+    repo = "desktop-app";
+    rev = "v${version}";
+    hash = "sha256-3yVRVM98tVjot3gIkUb/CDwmwKdOOBjBjzGL6htDtpk=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/ivpn/desktop-app/daemon/version._version=${version}"
+    "-X github.com/ivpn/desktop-app/daemon/version._time=1970-01-01"
+  ];
+
+  postInstall = ''
+    mv $out/bin/{${attrs.modRoot},${pname}}
+  '';
+
+  meta = with lib; {
+    description = "Official IVPN Desktop app";
+    homepage = "https://www.ivpn.net/apps";
+    changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ urandom ataraxiasjel ];
+    mainProgram = "ivpn";
+  };
+})) {
+  ivpn = {
+    modRoot = "cli";
+    vendorHash = "sha256-T49AE3SUmdP3Tu9Sp5C/QryKDto/NzEqRuUQ3+aJFL0=";
+  };
+  ivpn-service = {
+    modRoot = "daemon";
+    vendorHash = "sha256-9Rk6ruMpyWtQe+90kw4F8OLq7/JcDSrG6ufkfcrS4W8=";
+    nativeBuildInputs = [ makeWrapper ];
+    buildInputs = [ wirelesstools ];
+
+    patches = [ ./permissions.patch ];
+    postPatch = ''
+      substituteInPlace daemon/service/platform/platform_linux.go \
+        --replace 'openVpnBinaryPath = "/usr/sbin/openvpn"' \
+        'openVpnBinaryPath = "${openvpn}/bin/openvpn"' \
+        --replace 'routeCommand = "/sbin/ip route"' \
+        'routeCommand = "${iproute2}/bin/ip route"'
+
+      substituteInPlace daemon/netinfo/netinfo_linux.go \
+        --replace 'retErr := shell.ExecAndProcessOutput(log, outParse, "", "/sbin/ip", "route")' \
+        'retErr := shell.ExecAndProcessOutput(log, outParse, "", "${iproute2}/bin/ip", "route")'
+
+      substituteInPlace daemon/service/platform/platform_linux_release.go \
+        --replace 'installDir := "/opt/ivpn"' "installDir := \"$out\"" \
+        --replace 'obfsproxyStartScript = path.Join(installDir, "obfsproxy/obfs4proxy")' \
+        'obfsproxyStartScript = "${obfs4}/bin/obfs4proxy"' \
+        --replace 'wgBinaryPath = path.Join(installDir, "wireguard-tools/wg-quick")' \
+        'wgBinaryPath = "${wireguard-tools}/bin/wg-quick"' \
+        --replace 'wgToolBinaryPath = path.Join(installDir, "wireguard-tools/wg")' \
+        'wgToolBinaryPath = "${wireguard-tools}/bin/wg"' \
+        --replace 'dnscryptproxyBinPath = path.Join(installDir, "dnscrypt-proxy/dnscrypt-proxy")' \
+        'dnscryptproxyBinPath = "${dnscrypt-proxy}/bin/dnscrypt-proxy"'
+    '';
+
+    postFixup = ''
+      mkdir -p $out/etc
+      cp -r $src/daemon/References/Linux/etc/* $out/etc/
+      cp -r $src/daemon/References/common/etc/* $out/etc/
+
+      patchShebangs --build $out/etc/firewall.sh $out/etc/splittun.sh $out/etc/client.down $out/etc/client.up
+
+      wrapProgram "$out/bin/ivpn-service" \
+        --suffix PATH : ${lib.makeBinPath [ iptables gawk util-linux ]}
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ivpn/permissions.patch b/nixpkgs/pkgs/tools/networking/ivpn/permissions.patch
new file mode 100644
index 000000000000..72fdc4a591e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ivpn/permissions.patch
@@ -0,0 +1,27 @@
+diff --git a/daemon/service/platform/platform.go b/daemon/service/platform/platform.go
+index 941a99a7..df821c4d 100644
+--- a/daemon/service/platform/platform.go
++++ b/daemon/service/platform/platform.go
+@@ -111,12 +111,6 @@ func Init() (warnings []string, errors []error, logInfo []string) {
+ 	}
+
+ 	// checking file permissions
+-	if err := checkFileAccessRightsStaticConfig("openvpnCaKeyFile", openvpnCaKeyFile); err != nil {
+-		errors = append(errors, err)
+-	}
+-	if err := checkFileAccessRightsStaticConfig("openvpnTaKeyFile", openvpnTaKeyFile); err != nil {
+-		errors = append(errors, err)
+-	}
+
+ 	if len(openvpnUpScript) > 0 {
+ 		if err := checkFileAccessRightsExecutable("openvpnUpScript", openvpnUpScript); err != nil {
+@@ -149,9 +143,6 @@ func Init() (warnings []string, errors []error, logInfo []string) {
+ 	if err := checkFileAccessRightsExecutable("dnscryptproxyBinPath", dnscryptproxyBinPath); err != nil {
+ 		errors = append(errors, err)
+ 	}
+-	if err := checkFileAccessRightsStaticConfig("dnscryptproxyConfigTemplate", dnscryptproxyConfigTemplate); err != nil {
+-		errors = append(errors, err)
+-	}
+
+ 	if len(routeCommand) > 0 {
+ 		routeBinary := strings.Split(routeCommand, " ")[0]
diff --git a/nixpkgs/pkgs/tools/networking/iwgtk/default.nix b/nixpkgs/pkgs/tools/networking/iwgtk/default.nix
new file mode 100644
index 000000000000..8a2c9b54fbb4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iwgtk/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, scdoc
+, wrapGAppsHook4
+, gtk4
+, qrencode
+}:
+
+stdenv.mkDerivation rec {
+  pname = "iwgtk";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "j-lentz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/Nxti4PfYVLnIiBgtAuR3KGI8dULszuSdTp+2DzBfbs=";
+  };
+
+  # patch systemd service to pass necessary environments and use absolute paths
+  patches = [ ./systemd-service.patch ];
+
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wrapGAppsHook4 ];
+
+  buildInputs = [ gtk4 qrencode ];
+
+  postInstall = ''
+    substituteInPlace $out/lib/systemd/user/iwgtk.service --subst-var out
+  '';
+
+  meta = with lib; {
+    description = "Lightweight, graphical wifi management utility for Linux";
+    homepage = "https://github.com/j-lentz/iwgtk";
+    changelog = "https://github.com/j-lentz/iwgtk/blob/v${version}/CHANGELOG";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    platforms = platforms.linux;
+    mainProgram = "iwgtk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/iwgtk/systemd-service.patch b/nixpkgs/pkgs/tools/networking/iwgtk/systemd-service.patch
new file mode 100644
index 000000000000..fbe9abe0a217
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iwgtk/systemd-service.patch
@@ -0,0 +1,12 @@
+--- a/misc/iwgtk.service
++++ b/misc/iwgtk.service
+@@ -6,7 +6,8 @@ PartOf=graphical-session.target
+ After=graphical-session.target
+ 
+ [Service]
+-ExecStart=iwgtk -i
++ExecStart=@out@/bin/iwgtk -i
++PassEnvironment=DISPLAY XAUTHORITY
+ Restart=on-failure
+ 
+ [Install]
diff --git a/nixpkgs/pkgs/tools/networking/jnettop/default.nix b/nixpkgs/pkgs/tools/networking/jnettop/default.nix
new file mode 100644
index 000000000000..0be765028635
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/jnettop/default.nix
@@ -0,0 +1,47 @@
+{ fetchurl, fetchpatch, lib, stdenv, autoconf, libpcap, ncurses, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "jnettop";
+  version = "0.13.0";
+
+  src = fetchurl {
+    url = "http://jnettop.kubs.info/dist/jnettop-${version}.tar.gz";
+    sha256 = "1855np7c4b0bqzhf1l1dyzxb90fpnvrirdisajhci5am6als31z9";
+  };
+
+  nativeBuildInputs = [ pkg-config autoconf ];
+  buildInputs = [ libpcap ncurses glib ];
+
+  patches = [
+    ./no-dns-resolution.patch
+    (fetchpatch {
+      url = "https://sources.debian.net/data/main/j/jnettop/0.13.0-1/debian/patches/0001-Use-64-bit-integers-for-byte-totals-support-bigger-u.patch";
+      sha256 = "1b0alc12sj8pzcb66f8xslbqlbsvq28kz34v6jfhbb1q25hyr7jg";
+    })
+
+    # Fix pending upstream inclusion for ncurses-6.3:
+    #  https://sourceforge.net/p/jnettop/patches/5/
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://sourceforge.net/p/jnettop/patches/5/attachment/jnettop-0.13.0-ncurses-6.3.patch";
+      sha256 = "1a0g3bal6f2fh1sq9q5kfwljrnskfvrhdzhjadcds34gzsr26v7x";
+    })
+  ];
+
+  preConfigure = "autoconf ";
+
+  meta = {
+    description = "Network traffic visualizer";
+
+    longDescription = ''
+      Jnettop is a traffic visualiser, which captures traffic going
+      through the host it is running from and displays streams sorted
+      by bandwidth they use.
+    '';
+
+    homepage = "https://sourceforge.net/projects/jnettop/";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+    mainProgram = "jnettop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/jnettop/no-dns-resolution.patch b/nixpkgs/pkgs/tools/networking/jnettop/no-dns-resolution.patch
new file mode 100644
index 000000000000..65928a373009
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/jnettop/no-dns-resolution.patch
@@ -0,0 +1,13 @@
+When built in a chroot, `configure' fails to resolve `localhost'.
+Furthermore that test appears to be useless.
+
+--- jnettop-0.13.0/configure.ac	2006-04-29 15:34:09.000000000 +0200
++++ jnettop-0.13.0/configure.ac	2008-12-03 15:11:28.000000000 +0100
+@@ -63,7 +63,6 @@ AC_NETTOP_CHECK_IN6_ADDR
+ 
+ LDFLAGS="$LDFLAGS $NSL_LIBS $SOCKET_LIBS"
+ 
+-AC_NETTOP_CHECK_WORKING_RESOLVER
+ AC_NETTOP_CHECK_GETHOSTBYADDR_R
+ 
+ AM_PATH_GLIB_2_0(2.0.1,, AC_MSG_ERROR("glib >= 2.0.1 library required"), gthread)
diff --git a/nixpkgs/pkgs/tools/networking/juicity/default.nix b/nixpkgs/pkgs/tools/networking/juicity/default.nix
new file mode 100644
index 000000000000..8b655e7eb3de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/juicity/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+buildGoModule rec {
+  pname = "juicity";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "juicity";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-SUZ5E2GRLyUI/Z5ekJPNypVJXfJFzIz3qr9kCeXN7Gk=";
+  };
+
+  vendorHash = "sha256-Gj4uM9EL6QjlrCFGq3u1+TkIxzIU2mthFRK00pOAaJg=";
+
+  proxyVendor = true;
+
+  ldflags = [
+    "-X=github.com/juicity/juicity/config.Version=${version}"
+  ];
+
+  subPackages = [
+    "cmd/server"
+    "cmd/client"
+  ];
+
+  postInstall = ''
+    mv $out/bin/client $out/bin/juicity-client
+    mv $out/bin/server $out/bin/juicity-server
+    install -Dm444 install/juicity-server.service $out/lib/systemd/system/juicity-server.service
+    install -Dm444 install/juicity-client.service $out/lib/systemd/system/juicity-client.service
+    substituteInPlace $out/lib/systemd/system/juicity-server.service \
+      --replace /usr/bin/juicity-server $out/bin/juicity-server
+    substituteInPlace $out/lib/systemd/system/juicity-client.service \
+      --replace /usr/bin/juicity-client $out/bin/juicity-client
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/juicity/juicity";
+    description = "A quic-based proxy protocol";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ oluceps ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/junkie/default.nix b/nixpkgs/pkgs/tools/networking/junkie/default.nix
new file mode 100644
index 000000000000..ac20577b5f35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/junkie/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config, libpcap, guile_2_2, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "junkie";
+  version = "2.8.0";
+
+  src = fetchFromGitHub {
+    owner = "rixed";
+    repo = "junkie";
+    rev = "v${version}";
+    sha256 = "0kfdjgch667gfb3qpiadd2dj3fxc7r19nr620gffb1ahca02wq31";
+  };
+
+  patches = [
+    # Pull upstream patch for -fno-common toolchains:
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/rixed/junkie/commit/52209c5b0c9a09981739ede9701cd73e82a88ea5.patch";
+      sha256 = "1qg01jinqn5wr2mz77rzaidnrli35di0k7lnx6kfm7dh7v8kxbrr";
+    })
+  ];
+
+  # IP_DONTFRAG is defined on macOS from Big Sur
+  postPatch = lib.optionalString (lib.versionAtLeast stdenv.hostPlatform.darwinMinVersion "11") ''
+    sed -i '10i#undef IP_DONTFRAG' include/junkie/proto/ip.h
+  '';
+
+  buildInputs = [ libpcap guile_2_2 openssl ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  configureFlags = [
+    "GUILELIBDIR=\${out}/${guile_2_2.siteDir}"
+    "GUILECACHEDIR=\${out}/${guile_2_2.siteCcacheDir}"
+  ];
+
+  meta = {
+    description = "Deep packet inspection swiss-army knife";
+    homepage = "https://github.com/rixed/junkie";
+    license = lib.licenses.agpl3Plus;
+    maintainers = [ lib.maintainers.rixed ];
+    platforms = lib.platforms.unix;
+    longDescription = ''
+      Junkie is a network sniffer like Tcpdump or Wireshark, but designed to
+      be easy to program and extend.
+
+      It comes with several command line tools to demonstrate this:
+      - a packet dumper;
+      - a nettop tool;
+      - a tool listing TLS certificates...
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/jwhois/connect.patch b/nixpkgs/pkgs/tools/networking/jwhois/connect.patch
new file mode 100644
index 000000000000..c26025a82392
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/jwhois/connect.patch
@@ -0,0 +1,60 @@
+https://bugzilla.redhat.com/attachment.cgi?id=265091
+
+This fixes somewhat reversed logic of trying to connect to WHOIS server.
+Tue Nov 20 2007, Lubomir Kundrak <lkundrak@redhat.com>
+
+--- jwhois-4.0/src/utils.c.connect	2007-06-26 09:00:20.000000000 +0200
++++ jwhois-4.0/src/utils.c	2007-11-20 17:05:33.000000000 +0100
+@@ -247,7 +247,7 @@ make_connect(const char *host, int port)
+     {
+       return -1;
+     }
+-  while (res)
++  for (; res; res = res->ai_next)
+     {
+       sa = res->ai_addr;
+       sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+@@ -266,15 +266,15 @@ make_connect(const char *host, int port)
+       flags = fcntl(sockfd, F_GETFL, 0);
+       if (fcntl(sockfd, F_SETFL, flags|O_NONBLOCK) == -1)
+ 	{
++	  close (sockfd);
+ 	  return -1;
+ 	}
+ 
+-
+       error = connect(sockfd, res->ai_addr, res->ai_addrlen);
+-
+       if (error < 0 && errno != EINPROGRESS)
+ 	{
+-	  break;
++	  close (sockfd);
++	  continue;
+ 	}
+ 
+       FD_ZERO(&fdset);
+@@ -283,18 +283,20 @@ make_connect(const char *host, int port)
+       error = select(FD_SETSIZE, NULL, &fdset, NULL, &timeout);
+       if (error == 0)
+ 	{
+-	  break;
++	  close (sockfd);
++	  return -1;
+ 	}
+ 
+       retlen = sizeof(retval);
+       error = getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &retval, &retlen);
+       if (error < 0 || retval)
+ 	{
+-	  break;
++	  close (sockfd);
++	  return -1;
+ 	}
+-      res = res->ai_next;
++
++      break;
+     }
+-  if (error < 0 || retval) return -1;
+ #endif
+ 
+   return sockfd;
diff --git a/nixpkgs/pkgs/tools/networking/jwhois/default.nix b/nixpkgs/pkgs/tools/networking/jwhois/default.nix
new file mode 100644
index 000000000000..9026a60e2f3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/jwhois/default.nix
@@ -0,0 +1,32 @@
+{lib, stdenv, lynx, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "jwhois";
+  version = "4.0";
+
+  src = fetchurl {
+    url = "mirror://gnu/jwhois/jwhois-${version}.tar.gz";
+    sha256 = "0knn7iaj5v0n6jpmldyv2yk4bcy9dn3kywmv63bwc5drh9kvi6zs";
+  };
+
+  postInstall = ''
+    ln -s jwhois $out/bin/whois
+    sed -i -e "s|/usr/bin/lynx|${lynx}/bin/lynx|g" $out/etc/jwhois.conf
+  '';
+
+  patches = [ ./connect.patch ./service-name.patch ];
+
+  makeFlags = [ "AR=${stdenv.cc.bintools.targetPrefix}ar" ];
+
+  # Work around error from <stdio.h> on aarch64-darwin:
+  #     error: 'TARGET_OS_IPHONE' is not defined, evaluates to 0 [-Werror,-Wundef-prefix=TARGET_OS_]
+  # TODO: this should probably be fixed at a lower level than this?
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-Wno-undef-prefix";
+
+  meta = {
+    description = "A client for the WHOIS protocol allowing you to query the owner of a domain name";
+    homepage = "https://www.gnu.org/software/jwhois/";
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/jwhois/service-name.patch b/nixpkgs/pkgs/tools/networking/jwhois/service-name.patch
new file mode 100644
index 000000000000..170eddbad794
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/jwhois/service-name.patch
@@ -0,0 +1,17 @@
+--- a/src/dns.c   2007-06-25 23:58:38.000000000 -0700
++++ b/src/dns.c   2016-06-04 16:20:19.644865127 -0700
+@@ -113,12 +113,13 @@
+ lookup_host_addrinfo(struct addrinfo **res, const char *host, int port)
+ {
+   struct addrinfo hints;
+-  char ascport[10] = "whois";
++  char ascport[10] = "nicname";
+   int error;
+
+   memset(&hints, 0, sizeof(hints));
+   hints.ai_family = PF_UNSPEC;
+
++  hints.ai_flags = AI_ADDRCONFIG;
+   hints.ai_socktype = SOCK_STREAM;
+   if (port)
+     sprintf(ascport, "%9.9d", port);
diff --git a/nixpkgs/pkgs/tools/networking/kail/default.nix b/nixpkgs/pkgs/tools/networking/kail/default.nix
new file mode 100644
index 000000000000..809aa6a757b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/kail/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kail";
+  version = "0.17.4";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  src = fetchFromGitHub {
+    owner = "boz";
+    repo = "kail";
+    rev = "v${version}";
+    sha256 = "sha256-G8U7UEYhgkcFbKeHOjbpf9AY6NW0hBgv6aARuzapE3M=";
+  };
+
+  vendorHash = "sha256-u6/LsLphaqYswJkAuqgrgknnm+7MnaeH+kf9BPcdtrc=";
+
+  meta = with lib; {
+    description = "Kubernetes log viewer";
+    homepage = "https://github.com/boz/kail";
+    license = licenses.mit;
+    maintainers = with maintainers; [ offline vdemeester ];
+    mainProgram = "kail";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/kapp/default.nix b/nixpkgs/pkgs/tools/networking/kapp/default.nix
new file mode 100644
index 000000000000..c74a0a8cd47b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/kapp/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, kapp }:
+
+buildGoModule rec {
+  pname = "kapp";
+  version = "0.60.0";
+
+  src = fetchFromGitHub {
+    owner = "carvel-dev";
+    repo = "kapp";
+    rev = "v${version}";
+    sha256 = "sha256-o1MFbyjgOvhgcrlkbYGn0+nHENL2STFiD9CUkCdB56E=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/kapp" ];
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-X github.com/vmware-tanzu/carvel-kapp/pkg/kapp/version.Version=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/kapp completion $shell > kapp.$shell
+      installShellCompletion kapp.$shell
+    done
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = kapp;
+  };
+
+  meta = with lib; {
+    description = "CLI tool that encourages Kubernetes users to manage bulk resources with an application abstraction for grouping";
+    homepage = "https://carvel.dev/kapp/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ brodes ];
+    mainProgram = "kapp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/kea/default.nix b/nixpkgs/pkgs/tools/networking/kea/default.nix
new file mode 100644
index 000000000000..574afb68e237
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/kea/default.nix
@@ -0,0 +1,110 @@
+{ stdenv
+, lib
+, fetchurl
+
+# build time
+, autoreconfHook
+, pkg-config
+, python3Packages
+
+# runtime
+, withMysql ? stdenv.buildPlatform.system == stdenv.hostPlatform.system
+, withPostgres ? stdenv.buildPlatform.system == stdenv.hostPlatform.system
+, boost
+, libmysqlclient
+, log4cplus
+, openssl
+, postgresql
+, python3
+
+# tests
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "kea";
+  version = "2.4.1"; # only even minor versions are stable
+
+  src = fetchurl {
+    url = "https://ftp.isc.org/isc/${pname}/${version}/${pname}-${version}.tar.gz";
+    hash = "sha256-gVxh9cJxyqSh2zHdZW61Cn9uqXPaNpD3yFgUCOGAExo=";
+  };
+
+  patches = [
+    ./dont-create-var.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace ./src/bin/keactrl/Makefile.am --replace '@sysconfdir@' "$out/etc"
+    # darwin special-casing just causes trouble
+    substituteInPlace ./m4macros/ax_crypto.m4 --replace 'apple-darwin' 'nope'
+  '';
+
+  outputs = [
+    "out"
+    "doc"
+    "man"
+  ];
+
+  configureFlags = [
+    "--enable-perfdhcp"
+    "--enable-shell"
+    "--localstatedir=/var"
+    "--with-openssl=${lib.getDev openssl}"
+  ]
+  ++ lib.optional withPostgres "--with-pgsql=${postgresql}/bin/pg_config"
+  ++ lib.optional withMysql "--with-mysql=${lib.getDev libmysqlclient}/bin/mysql_config";
+
+  postConfigure = ''
+    # Mangle embedded paths to dev-only inputs.
+    sed -e "s|$NIX_STORE/[a-z0-9]\{32\}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" -i config.report
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ] ++ (with python3Packages; [
+    sphinxHook
+    sphinx-rtd-theme
+  ]);
+
+  sphinxBuilders = [
+    "html"
+    "man"
+  ];
+  sphinxRoot = "doc/sphinx";
+
+  buildInputs = [
+    boost
+    libmysqlclient
+    log4cplus
+    openssl
+    python3
+  ];
+
+  enableParallelBuilding = true;
+
+  passthru.tests = {
+    kea = nixosTests.kea;
+    prefix-delegation = nixosTests.systemd-networkd-ipv6-prefix-delegation;
+    prometheus-exporter = nixosTests.prometheus-exporters.kea;
+    networking-scripted = lib.recurseIntoAttrs { inherit (nixosTests.networking.scripted) dhcpDefault dhcpSimple dhcpOneIf; };
+    networking-networkd = lib.recurseIntoAttrs { inherit (nixosTests.networking.networkd) dhcpDefault dhcpSimple dhcpOneIf; };
+  };
+
+  meta = with lib; {
+    changelog = "https://downloads.isc.org/isc/kea/${version}/Kea-${version}-ReleaseNotes.txt";
+    homepage = "https://kea.isc.org/";
+    description = "High-performance, extensible DHCP server by ISC";
+    longDescription = ''
+      Kea is a new open source DHCPv4/DHCPv6 server being developed by
+      Internet Systems Consortium. The objective of this project is to
+      provide a very high-performance, extensible DHCP server engine for
+      use by enterprises and service providers, either as is or with
+      extensions and modifications.
+    '';
+    license = licenses.mpl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fpletz hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/kea/dont-create-var.patch b/nixpkgs/pkgs/tools/networking/kea/dont-create-var.patch
new file mode 100644
index 000000000000..53e05b5b62b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/kea/dont-create-var.patch
@@ -0,0 +1,28 @@
+diff --git a/Makefile.am b/Makefile.am
+index 10708e7..d4efd73 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -150,13 +150,6 @@ cppcheck:
+ docs:
+ 	$(MAKE) -C doc/sphinx
+ 
+-
+-# These steps are necessary during installation
+-install-exec-hook:
+-	mkdir -p $(DESTDIR)${localstatedir}/log/
+-	mkdir -p $(DESTDIR)${localstatedir}/lib/${PACKAGE_NAME}
+-	mkdir -p $(DESTDIR)${runstatedir}/${PACKAGE_NAME}
+-
+ EXTRA_DIST  = tools/path_replacer.sh
+ EXTRA_DIST += tools/mk_cfgrpt.sh
+ 
+diff --git a/src/lib/dhcpsrv/Makefile.am b/src/lib/dhcpsrv/Makefile.am
+index a0a0289..ba42f8a 100644
+--- a/src/lib/dhcpsrv/Makefile.am
++++ b/src/lib/dhcpsrv/Makefile.am
+@@ -408,5 +408,3 @@ libkea_dhcpsrv_parsers_include_HEADERS = \
+ 	parsers/simple_parser4.h \
+ 	parsers/simple_parser6.h
+ 
+-install-data-local:
+-	$(mkinstalldirs) $(DESTDIR)$(dhcp_data_dir)
diff --git a/nixpkgs/pkgs/tools/networking/keama/default.nix b/nixpkgs/pkgs/tools/networking/keama/default.nix
new file mode 100644
index 000000000000..c00f7d63f1f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/keama/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "keama";
+  version = "4.4.3-P1";
+
+  src = fetchurl {
+    url = "https://ftp.isc.org/isc/dhcp/${version}/dhcp-${version}.tar.gz";
+    sha256 = "sha256-CsQWu1WZfKhjIXT9EHN/1hzbjbonUhYKM1d1vCHcc8c=";
+  };
+
+  enableParallelBuilding = true;
+
+  # The Kea Migration Assistant lives as a subdirectory of the
+  # original ISC DHCP server source code.
+  makeFlags = [ "-C" "keama" ];
+
+  meta = with lib; {
+    description = "Kea Migration Assistent";
+
+    longDescription = ''
+      Kea migration assistant is an experimental tool that reads a ISC DHCP server
+      configuration and produces a JSON configuration in Kea format.
+    '';
+
+    homepage = "https://gitlab.isc.org/isc-projects/dhcp/-/wikis/kea-migration-assistant";
+    license = licenses.mpl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ blitz ];
+    mainProgram = "keama";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/keepalived/default.nix b/nixpkgs/pkgs/tools/networking/keepalived/default.nix
new file mode 100644
index 000000000000..80059a664549
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/keepalived/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nixosTests
+, file
+, libmnl
+, libnftnl
+, libnl
+, net-snmp
+, openssl
+, pkg-config
+, autoreconfHook
+, withNetSnmp ? stdenv.buildPlatform.canExecute stdenv.hostPlatform
+}:
+
+stdenv.mkDerivation rec {
+  pname = "keepalived";
+  version = "2.2.8";
+
+  src = fetchFromGitHub {
+    owner = "acassen";
+    repo = "keepalived";
+    rev = "v${version}";
+    sha256 = "sha256-QkebGQCYE4ccUvcxKG3qQ4wqC+RzxGHim8kgHQbIr5Q=";
+  };
+
+  buildInputs = [
+    file
+    libmnl
+    libnftnl
+    libnl
+    openssl
+  ] ++ lib.optionals withNetSnmp [
+    net-snmp
+  ];
+
+  enableParallelBuilding = true;
+
+  passthru.tests.keepalived = nixosTests.keepalived;
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+
+  configureFlags = [
+    "--enable-sha1"
+  ] ++ lib.optionals withNetSnmp [
+    "--enable-snmp"
+  ];
+
+  meta = with lib; {
+    homepage = "https://keepalived.org";
+    description = "Routing software written in C";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.raitobezarius ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/labctl/default.nix b/nixpkgs/pkgs/tools/networking/labctl/default.nix
new file mode 100644
index 000000000000..00cb63b31d1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/labctl/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "labctl";
+  version = "0.0.22";
+
+  src = fetchFromGitHub {
+    owner = "labctl";
+    repo = "labctl";
+    rev = "v${version}";
+    hash = "sha256-84t7qhLafNyPLgHmFQUsizEn6Us44dDTercGEm9lup4=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  vendorHash = "sha256-vJ9aTMVwKrqjckdfCMvheTSG+gEtMLLQuBCz8Wc5blE=";
+
+  ldflags = [
+    "-X=github.com/labctl/labctl/app.version=${version}"
+    "-X=github.com/labctl/labctl/app.commit=${src.rev}"
+    "-X=github.com/labctl/labctl/app.date=1970-01-01T00:00:00Z"
+  ];
+
+  postInstall = ''
+    local INSTALL="$out/bin/labctl"
+    installShellCompletion --cmd labctl \
+      --bash <(echo "complete -C $INSTALL labctl") \
+      --zsh <(echo "complete -o nospace -C $INSTALL labctl")
+  '';
+
+  meta = with lib; {
+    description = "collection of helper tools for network engineers, while configuring and experimenting with their own network labs";
+    homepage = "https://labctl.net";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ janik ];
+    mainProgram = "labctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/lftp/default.nix b/nixpkgs/pkgs/tools/networking/lftp/default.nix
new file mode 100644
index 000000000000..637214809d41
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lftp/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, openssl, pkg-config, readline, zlib, libidn2, gmp, libiconv, libunistring, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "lftp";
+  version = "4.9.2";
+
+  src = fetchurl {
+    urls = [
+      "https://lftp.yar.ru/ftp/${pname}-${version}.tar.xz"
+      "https://ftp.st.ryukoku.ac.jp/pub/network/ftp/lftp/${pname}-${version}.tar.xz"
+      ];
+    sha256 = "03b7y0h3mf4jfq5y8zw6hv9v44z3n6i8hc1iswax96y3z7sc85y5";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl readline zlib libidn2 gmp libiconv libunistring gettext ];
+
+  hardeningDisable = lib.optional stdenv.isDarwin "format";
+
+  env = lib.optionalAttrs stdenv.isDarwin {
+    # Required to build with clang 16 or `configure` will fail to detect several standard functions.
+    NIX_CFLAGS_COMPILE = "-Wno-error=implicit-function-declaration";
+  };
+
+  configureFlags = [
+    "--with-openssl"
+    "--with-readline=${readline.dev}"
+    "--with-zlib=${zlib.dev}"
+    "--without-expat"
+  ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A file transfer program supporting a number of network protocols";
+    homepage = "https://lftp.yar.ru/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/libnids/default.nix b/nixpkgs/pkgs/tools/networking/libnids/default.nix
new file mode 100644
index 000000000000..e6df2850a1c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/libnids/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchzip, libpcap, glib, pkg-config, libnet }:
+stdenv.mkDerivation {
+  pname = "libnids";
+  version = "1.24";
+  src = fetchzip {
+    url = "mirror://sourceforge/libnids/libnids-1.24.tar.gz";
+    sha256 = "1cblklfdfxcmy0an6xyyzx4l877xdawhjd28daqfsvrh81mb07k1";
+  };
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libpcap glib libnet ];
+
+  /*
+  Quoting the documentation of glib: g_thread_init has been deprecated since
+  version 2.32 and should not be used in newly-written code.  This function is
+  no longer necessary. The GLib threading system is automatically initialized
+  at the start of your program.
+
+  this is necessary for dsniff to compile; otherwise g_thread_init is a missing
+  symbol when linking (?!?)
+  */
+  env.NIX_CFLAGS_COMPILE = "-Dg_thread_init= ";
+
+  meta = with lib; {
+    description = "An E-component of Network Intrusion Detection System which emulates the IP stack of Linux 2.0.x";
+    homepage = "https://libnids.sourceforge.net/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.symphorien ];
+    # probably also bsd and solaris
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/libreswan/default.nix b/nixpkgs/pkgs/tools/networking/libreswan/default.nix
new file mode 100644
index 000000000000..12bd432c7329
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/libreswan/default.nix
@@ -0,0 +1,162 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, nixosTests
+, pkg-config
+, systemd
+, gmp
+, unbound
+, bison
+, flex
+, pam
+, libevent
+, libcap_ng
+, libxcrypt
+, curl
+, nspr
+, bash
+, runtimeShell
+, iproute2
+, iptables
+, procps
+, coreutils
+, gnused
+, gawk
+, nss
+, which
+, python3
+, libselinux
+, ldns
+, xmlto
+, docbook_xml_dtd_412
+, docbook_xsl
+, findXMLCatalogs
+, dns-root-data
+}:
+
+let
+  # Tools needed by ipsec scripts
+  binPath = lib.makeBinPath [
+    iproute2 iptables procps
+    coreutils gnused gawk
+    nss.tools which
+  ];
+in
+
+stdenv.mkDerivation rec {
+  pname = "libreswan";
+  version = "4.12";
+
+  src = fetchurl {
+    url = "https://download.libreswan.org/${pname}-${version}.tar.gz";
+    hash = "sha256-roWr5BX3vs9LaiuYl+FxLyflqsnDXfvd28zgrX39mfc=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    bison
+    flex
+    pkg-config
+    xmlto
+    docbook_xml_dtd_412
+    docbook_xsl
+    findXMLCatalogs
+  ];
+
+  buildInputs = [
+    systemd coreutils
+    gnused gawk gmp unbound pam libevent
+    libcap_ng libxcrypt curl nspr nss ldns
+    # needed to patch shebangs
+    python3 bash
+  ] ++ lib.optional stdenv.isLinux libselinux;
+
+  prePatch = ''
+    # Correct iproute2 and iptables path
+    sed -e 's|/sbin/ip|${iproute2}/bin/ip|g' \
+        -e 's|/sbin/\(ip6\?tables\)|${iptables}/bin/\1|' \
+        -e 's|/bin/bash|${runtimeShell}|g' \
+        -i initsystems/systemd/ipsec.service.in \
+           programs/barf/barf.in \
+           programs/verify.linux/verify.in
+    sed -e 's|\([[:blank:]]\)\(ip6\?tables\(-save\)\? -\)|\1${iptables}/bin/\2|' \
+        -i programs/verify.linux/verify.in
+
+    # Prevent the makefile from trying to
+    # reload the systemd daemon or create tmpfiles
+    sed -e 's|systemctl|true|g' \
+        -e 's|systemd-tmpfiles|true|g' \
+        -i initsystems/systemd/Makefile
+
+    # Fix systemd detection on NixOS
+    sed -e 's|\(-a ! -x /bin/journalctl\)|\1 -a ! -x /run/current-system/sw/bin/journalctl|g' \
+        -e 's|\(-o ! -x /bin/journalctl\)|\1 -o ! -x /run/current-system/sw/bin/journalctl|g' \
+        -i programs/barf/barf.in
+
+    # Fix the ipsec program from crushing the PATH
+    sed -e 's|\(PATH=".*"\):.*$|\1:$PATH|' -i programs/ipsec/ipsec.in
+
+    # Fix python script to use the correct python
+    sed -e 's/^\(\W*\)installstartcheck()/\1sscmd = "ss"\n\0/' \
+        -i programs/verify.linux/verify.in
+
+    # Replace wget with curl to save a dependency
+    curlArgs='-s --remote-name-all --output-dir'
+    sed -e "s|wget -q -P|${curl}/bin/curl $curlArgs|g" \
+        -i programs/letsencrypt/letsencrypt.in
+
+    # Patch the Makefile:
+    # 1. correct the pam.d directory install path
+    # 2. do not create the /var/lib/ directory
+    sed -e 's|$(DESTDIR)/etc/pam.d|$(out)/etc/pam.d|' \
+        -e '/test ! -d $(NSSDIR)/,+3d' \
+        -i configs/Makefile
+  '';
+
+  patches = [
+    (fetchpatch {
+      name = "ignoring-return-value.patch";
+      url = "https://github.com/libreswan/libreswan/commit/ba5bad09f55959872022fa506d5ac06eafe3a314.diff";
+      hash = "sha256-xJ8rZWoRtJixamGY8sjOS+63Lw3RX7620HlRWYfvSxc=";
+    })
+  ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "INITSYSTEM=systemd"
+    "UNITDIR=$(out)/etc/systemd/system/"
+    "TMPFILESDIR=$(out)/lib/tmpfiles.d/"
+    "LINUX_VARIANT=nixos"
+    "DEFAULT_DNSSEC_ROOTKEY_FILE=${dns-root-data}/root.key"
+  ];
+
+  # Hack to make install work
+  installFlags = [
+    "FINALVARDIR=\${out}/var"
+    "FINALSYSCONFDIR=\${out}/etc"
+  ];
+
+  postInstall = ''
+    # Install examples directory (needed for letsencrypt)
+    cp -r docs/examples $out/share/doc/libreswan/examples
+  '';
+
+  postFixup = ''
+    # Add a PATH to the main "ipsec" script
+    sed -e '0,/^$/{s||export PATH=${binPath}:$PATH|}' \
+        -i $out/bin/ipsec
+  '';
+
+  passthru.tests.libreswan = nixosTests.libreswan;
+
+  meta = with lib; {
+    homepage = "https://libreswan.org";
+    description = "A free software implementation of the VPN protocol based on IPSec and the Internet Key Exchange";
+    platforms = platforms.linux ++ platforms.freebsd;
+    license = with licenses; [ gpl2Plus mpl20 ] ;
+    maintainers = with maintainers; [ afranchuk rnhmjoj ];
+    mainProgram = "ipsec";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ligolo-ng/default.nix b/nixpkgs/pkgs/tools/networking/ligolo-ng/default.nix
new file mode 100644
index 000000000000..7eee1ccb047d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ligolo-ng/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ligolo-ng";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "tnpitsecurity";
+    repo = "ligolo-ng";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-pFk/9AFtnMBNi5hdVWDzfxCTFe9wSkFydHciTpMRxQw=";
+  };
+
+  vendorHash = "sha256-QEGF12yJ+CQjIHx6kOwsykVhelp5npnglk7mIbOeIpI=";
+
+  postConfigure = ''
+    export CGO_ENABLED=0
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-extldflags '-static'"
+  ];
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tunneling/pivoting tool that uses a TUN interface";
+    homepage = "https://github.com/tnpitsecurity/ligolo-ng";
+    changelog = "https://github.com/nicocha30/ligolo-ng/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ elohmeier ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/linkchecker/default.nix b/nixpkgs/pkgs/tools/networking/linkchecker/default.nix
new file mode 100644
index 000000000000..018da51f7701
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/linkchecker/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+, gettext
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "linkchecker";
+  version = "10.2.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-z7Qp74cai8GfsxB4n9dSCWQepp0/4PimFiRJQBaVSoo=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    argcomplete
+    beautifulsoup4
+    configargparse
+    dnspython
+    hatch-vcs
+    hatchling
+    pyopenssl
+    requests
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    parameterized
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # test_timeit2 is flakey, and depends sleep being precise to the milisecond
+    "TestLoginUrl"
+    "test_timeit2"
+  ];
+
+  disabledTestPaths = [
+    "tests/checker/telnetserver.py"
+    "tests/checker/test_telnet.py"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "tests/checker/test_content_allows_robots.py"
+    "tests/checker/test_http*.py"
+    "tests/test_network.py"
+  ];
+
+  meta = with lib; {
+    description = "Check websites for broken links";
+    homepage = "https://linkcheck.github.io/linkchecker/";
+    changelog = "https://github.com/linkchecker/linkchecker/releases/tag/v${version}";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ peterhoeg tweber ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/linux-router/default.nix b/nixpkgs/pkgs/tools/networking/linux-router/default.nix
new file mode 100644
index 000000000000..b5cc9ef6f5dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/linux-router/default.nix
@@ -0,0 +1,99 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+
+# --- Runtime Dependencies ---
+, bash
+, procps
+, iproute2
+, dnsmasq
+, iptables
+, coreutils
+, flock
+, gawk
+, getopt
+, gnugrep
+, gnused
+, which
+# `nmcli` is not required for create_ap.
+# Use NetworkManager by default because it is very likely already present
+, useNetworkManager ? true
+, networkmanager
+
+# --- WiFi Hotspot Dependencies ---
+, useWifiDependencies ? true
+, hostapd
+, iw
+# You only need this if 'iw' can not recognize your adapter.
+, useWirelessTools ? true
+, wirelesstools # for iwconfig
+# To fall back to haveged if entropy is low.
+# Defaulting to false because not having it does not break things.
+# If it is really needed, warnings will be logged to journal.
+, useHaveged ? false
+, haveged
+# You only need this if you wish to show WiFi QR codes in terminal
+, useQrencode ? true
+, qrencode
+}:
+
+stdenv.mkDerivation rec {
+  pname = "linux-router";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "garywill";
+    repo = "linux-router";
+    rev = "refs/tags/${version}";
+    hash = "sha256-iIHi434S7+Q9S1EU7Bpa7iYB7MJDTuyMdB/bbTrbl5Q=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  dontBuild = true;
+
+  installPhase = with lib; let
+      binPath = makeBinPath ([ procps iproute2 getopt bash dnsmasq
+        iptables coreutils which flock gnugrep gnused gawk ]
+        ++ optional useNetworkManager                          networkmanager
+        ++ optional useWifiDependencies                        hostapd
+        ++ optional useWifiDependencies                        iw
+        ++ optional (useWifiDependencies && useWirelessTools)  wirelesstools
+        ++ optional (useWifiDependencies && useHaveged)        haveged
+        ++ optional (useWifiDependencies && useQrencode)       qrencode);
+    in
+    ''
+      mkdir -p $out/bin/ $out/.bin-wrapped
+      mv lnxrouter $out/.bin-wrapped/lnxrouter
+      makeWrapper $out/.bin-wrapped/lnxrouter $out/bin/lnxrouter --prefix PATH : ${binPath}
+    '';
+
+  meta = with lib; {
+    homepage = "https://github.com/garywill/linux-router";
+    description = "Set Linux as router / Wifi hotspot / proxy in one command";
+    longDescription = ''
+      Features:
+
+      - Create a NATed sub-network
+      - Provide Internet
+      - DHCP server and RA
+      - DNS server
+      - IPv6 (behind NATed LAN, like IPv4)
+      - Creating Wifi hotspot:
+        - Channel selecting
+        - Choose encryptions: WPA2/WPA, WPA2, WPA, No encryption
+        - Create AP on the same interface you are getting Internet (require same channel)
+      - Transparent proxy (redsocks)
+      - DNS proxy
+      - Compatible with NetworkManager (automatically set interface as unmanaged)
+    '';
+    changelog = "https://github.com/garywill/linux-router/releases/tag/${version}";
+    license = licenses.lgpl21Only;
+    maintainers = with maintainers; [ x3ro ];
+    platforms = platforms.linux;
+    mainProgram = "lnxrouter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/lldpd/default.nix b/nixpkgs/pkgs/tools/networking/lldpd/default.nix
new file mode 100644
index 000000000000..d9f9ae45ad13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lldpd/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchurl, pkg-config, removeReferencesTo
+, libevent, readline, net-snmp, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lldpd";
+  version = "1.0.18";
+
+  src = fetchurl {
+    url = "https://media.luffy.cx/files/lldpd/${pname}-${version}.tar.gz";
+    hash = "sha256-SzIGddYIkBpKDU/v+PlruEbUkT2RSwz3W30K6ASQ8vc=";
+  };
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--enable-pie"
+    "--with-snmp"
+    "--with-systemdsystemunitdir=\${out}/lib/systemd/system"
+  ];
+
+  nativeBuildInputs = [ pkg-config removeReferencesTo ];
+  buildInputs = [ libevent readline net-snmp openssl ];
+
+  enableParallelBuilding = true;
+
+  outputs = [ "out" "dev" "man" "doc" ];
+
+  preFixup = ''
+    find $out -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
+  '';
+
+  meta = with lib; {
+    description = "802.1ab implementation (LLDP) to help you locate neighbors of all your equipments";
+    homepage = "https://lldpd.github.io/";
+    license = licenses.isc;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/logmein-hamachi/default.nix b/nixpkgs/pkgs/tools/networking/logmein-hamachi/default.nix
new file mode 100644
index 000000000000..aef393c91937
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/logmein-hamachi/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl }:
+
+let
+  arch =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "x64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "x86"
+    else throwSystem;
+  throwSystem = throw "Unsupported system: ${stdenv.hostPlatform.system}";
+  sha256 =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "0zy0jzvdqccfsg42m2lq1rj8r2c4iypd1h9vxl9824cbl92yim37"
+    else if stdenv.hostPlatform.system == "i686-linux" then "03ml9xv19km99f0z7fpr21b1zkxvw7q39kjzd8wpb2pds51wnc62"
+    else throwSystem;
+  libraries = lib.makeLibraryPath [ stdenv.cc.cc ];
+
+in stdenv.mkDerivation rec {
+  pname = "logmein-hamachi";
+  version = "2.1.0.203";
+
+  src = fetchurl {
+    url = "https://vpn.net/installers/${pname}-${version}-${arch}.tgz";
+    inherit sha256;
+  };
+
+  installPhase = ''
+    patchelf \
+      --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
+      --set-rpath ${libraries} \
+      hamachid
+    install -D -m755 hamachid $out/bin/hamachid
+    ln -s $out/bin/hamachid $out/bin/hamachi
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "A hosted VPN service that lets you securely extend LAN-like networks to distributed teams";
+    homepage = "https://secure.logmein.com/products/hamachi/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/lsh/default.nix b/nixpkgs/pkgs/tools/networking/lsh/default.nix
new file mode 100644
index 000000000000..f5fc34487aa1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lsh/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, gperf, guile, gmp, zlib, liboop, readline, gnum4, pam
+, nettools, lsof, procps, libxcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "lsh";
+  version = "2.0.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/lsh/lsh-${version}.tar.gz";
+    sha256 = "614b9d63e13ad3e162c82b6405d1f67713fc622a8bc11337e72949d613713091";
+  };
+
+  patches = [ ./pam-service-name.patch ./lshd-no-root-login.patch ];
+
+  preConfigure = ''
+    # Patch `lsh-make-seed' so that it can gather enough entropy.
+    sed -i "src/lsh-make-seed.c" \
+        -e "s|/usr/sbin/arp|${nettools}/sbin/arp|g ;
+            s|/usr/bin/netstat|${nettools}/bin/netstat|g ;
+            s|/usr/local/bin/lsof|${lsof}/bin/lsof|g ;
+            s|/bin/vmstat|${procps}/bin/vmstat|g ;
+            s|/bin/ps|${procps}/bin/sp|g ;
+            s|/usr/bin/w|${procps}/bin/w|g ;
+            s|/usr/bin/df|$(type -P df)|g ;
+            s|/usr/bin/ipcs|$(type -P ipcs)|g ;
+            s|/usr/bin/uptime|$(type -P uptime)|g"
+
+    # Skip the `configure' script that checks whether /dev/ptmx & co. work as
+    # expected, because it relies on impurities (for instance, /dev/pts may
+    # be unavailable in chroots.)
+    export lsh_cv_sys_unix98_ptys=yes
+  '';
+
+  # -fcommon: workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: liblsh.a(unix_user.o):/build/lsh-2.0.4/src/server_userauth.h:108: multiple definition of
+  #     `server_userauth_none_preauth'; lshd.o:/build/lsh-2.0.4/src/server_userauth.h:108: first defined here
+  # Should be present in upcoming 2.1 release.
+  env.NIX_CFLAGS_COMPILE = "-std=gnu90 -fcommon";
+
+  buildInputs = [ gperf guile gmp zlib liboop readline gnum4 pam libxcrypt ];
+
+  meta = {
+    description = "GPL'd implementation of the SSH protocol";
+
+    longDescription = ''
+      lsh is a free implementation (in the GNU sense) of the ssh
+      version 2 protocol, currently being standardised by the IETF
+      SECSH working group.
+    '';
+
+    homepage = "http://www.lysator.liu.se/~nisse/lsh/";
+    license = lib.licenses.gpl2Plus;
+
+    maintainers = [ ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/lsh/lshd-no-root-login.patch b/nixpkgs/pkgs/tools/networking/lsh/lshd-no-root-login.patch
new file mode 100644
index 000000000000..9dd81de3fbc1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lsh/lshd-no-root-login.patch
@@ -0,0 +1,16 @@
+Correctly handle the `--no-root-login' option.
+
+--- lsh-2.0.4/src/lshd.c	2006-05-01 13:47:44.000000000 +0200
++++ lsh-2.0.4/src/lshd.c	2009-09-08 12:20:36.000000000 +0200
+@@ -758,6 +758,10 @@ main_argp_parser(int key, char *arg, str
+       self->allow_root = 1;
+       break;
+ 
++    case OPT_NO_ROOT_LOGIN:
++      self->allow_root = 0;
++      break;
++
+     case OPT_KERBEROS_PASSWD:
+       self->pw_helper = PATH_KERBEROS_HELPER;
+       break;
+
diff --git a/nixpkgs/pkgs/tools/networking/lsh/pam-service-name.patch b/nixpkgs/pkgs/tools/networking/lsh/pam-service-name.patch
new file mode 100644
index 000000000000..6a6156855c51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lsh/pam-service-name.patch
@@ -0,0 +1,14 @@
+Tell `lsh-pam-checkpw', the PAM password helper program, to use a more
+descriptive service name.
+
+--- lsh-2.0.4/src/lsh-pam-checkpw.c	2003-02-16 22:30:10.000000000 +0100
++++ lsh-2.0.4/src/lsh-pam-checkpw.c	2008-11-28 16:16:58.000000000 +0100
+@@ -38,7 +38,7 @@
+ #include <security/pam_appl.h>
+ 
+ #define PWD_MAXLEN 1024
+-#define SERVICE_NAME "other"
++#define SERVICE_NAME "lshd"
+ #define TIMEOUT 600 
+ 
+ static int
diff --git a/nixpkgs/pkgs/tools/networking/lxi-tools/default.nix b/nixpkgs/pkgs/tools/networking/lxi-tools/default.nix
new file mode 100644
index 000000000000..5a5db2a97094
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lxi-tools/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub
+, meson, ninja, cmake, pkg-config
+, liblxi, readline, lua, bash-completion
+, wrapGAppsHook
+, glib, gtk4, gtksourceview5, libadwaita, json-glib
+, desktop-file-utils, appstream-glib
+, gsettings-desktop-schemas
+, withGui ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lxi-tools";
+  version = "2.7";
+
+  src = fetchFromGitHub {
+    owner = "lxi-tools";
+    repo = "lxi-tools";
+    rev = "v${version}";
+    sha256 = "sha256-69B3wW4lg6GxSpEKhuFYKTuAyd+QYb4WNbNVdZnRUt8=";
+  };
+
+  nativeBuildInputs = [
+    meson ninja cmake pkg-config
+  ] ++ lib.optional withGui wrapGAppsHook;
+
+  buildInputs = [
+    liblxi readline lua bash-completion
+  ] ++ lib.optionals withGui [
+    glib gtk4 gtksourceview5 libadwaita json-glib
+    desktop-file-utils appstream-glib
+    gsettings-desktop-schemas
+  ];
+
+  postUnpack = "sed -i '/meson.add_install.*$/d' source/meson.build";
+
+  mesonFlags = lib.optional (!withGui) "-Dgui=false";
+
+  postInstall = lib.optionalString withGui
+    "glib-compile-schemas $out/share/glib-2.0/schemas";
+
+  meta = with lib; {
+    description = "Tool for communicating with LXI compatible instruments";
+    longDescription = ''
+      lxi-tools is a collection of open source software tools
+      that enables control of LXI compatible instruments such
+      as modern oscilloscopes, power supplies,
+      spectrum analyzers etc.
+    '';
+    homepage = "https://lxi-tools.github.io/";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.vq ];
+    mainProgram = "lxi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/lychee/default.nix b/nixpkgs/pkgs/tools/networking/lychee/default.nix
new file mode 100644
index 000000000000..91620663e604
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lychee/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lychee";
+  version = "0.14.3";
+
+  src = fetchFromGitHub {
+    owner = "lycheeverse";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Ogbfzb57HaWJD2AR9fequty9SyXJ8aqbQ6Tlt82EP/c=";
+  };
+
+  cargoHash = "sha256-EmSM8lRCjX9XZVr34SpMhTIKWxRsaJ+g4EphV8bahsU=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+
+  checkFlags = [
+    #  Network errors for all of these tests
+    # "error reading DNS system conf: No such file or directory (os error 2)" } }
+    "--skip=archive::wayback::tests::wayback_suggestion"
+    "--skip=archive::wayback::tests::wayback_suggestion_unknown_url"
+    "--skip=cli::test_dont_dump_data_uris_by_default"
+    "--skip=cli::test_dump_data_uris_in_verbose_mode"
+    "--skip=cli::test_exclude_example_domains"
+    "--skip=cli::test_local_dir"
+    "--skip=cli::test_local_file"
+    "--skip=client::tests"
+    "--skip=collector::tests"
+    "--skip=src/lib.rs"
+  ];
+
+  meta = with lib; {
+    description = "A fast, async, stream-based link checker written in Rust";
+    homepage = "https://github.com/lycheeverse/lychee";
+    downloadPage = "https://github.com/lycheeverse/lychee/releases/tag/v${version}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ totoroot tuxinaut ];
+    mainProgram = "lychee";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/magic-wormhole-rs/default.nix b/nixpkgs/pkgs/tools/networking/magic-wormhole-rs/default.nix
new file mode 100644
index 000000000000..5cdf5150b683
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/magic-wormhole-rs/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, libxcb
+, installShellFiles
+, Security
+, AppKit
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "magic-wormhole-rs";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "magic-wormhole";
+    repo = "magic-wormhole.rs";
+    rev = version;
+    sha256 = "sha256-6dRnOAclHcPayY0e5guhWR5CLaKzp5TlEU5esLvYQg8=";
+  };
+
+  cargoHash = "sha256-SPhTvj2DYNzuAtWamDhsgtCTUpQXtnhoRRSE745tB/k=";
+
+  buildInputs = [ libxcb ]
+    ++ lib.optionals stdenv.isDarwin [ Security AppKit ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # all tests involve networking and are bound fail
+  doCheck = false;
+
+  postInstall = ''
+    installShellCompletion --cmd wormhole-rs \
+      --bash <($out/bin/wormhole-rs completion bash) \
+      --fish <($out/bin/wormhole-rs completion fish) \
+      --zsh <($out/bin/wormhole-rs completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Rust implementation of Magic Wormhole, with new features and enhancements";
+    homepage = "https://github.com/magic-wormhole/magic-wormhole.rs";
+    changelog = "https://github.com/magic-wormhole/magic-wormhole.rs/raw/${version}/changelog.md";
+    license = licenses.eupl12;
+    maintainers = with maintainers; [ zeri piegames ];
+    mainProgram = "wormhole-rs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mailctl/default.nix b/nixpkgs/pkgs/tools/networking/mailctl/default.nix
new file mode 100644
index 000000000000..2e6233269280
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailctl/default.nix
@@ -0,0 +1,97 @@
+{ mkDerivation
+, fetchFromGitHub
+, aeson
+, base
+, base64
+, bytestring
+, containers
+, directory
+, hsyslog
+, http-conduit
+, lib
+, network-uri
+, optparse-applicative
+, pretty-simple
+, process
+, random
+, strings
+, template-haskell
+, text
+, time
+, twain
+, unix
+, utf8-string
+, warp
+, yaml
+}:
+mkDerivation rec {
+  pname = "mailctl";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner = "pdobsan";
+    repo = "mailctl";
+    rev = version;
+    hash = "sha256-frT+fRJpixSvpb2+C34Z47zbMqvmDHdESItXb9YVbfU=";
+  };
+
+  isLibrary = true;
+  isExecutable = true;
+
+  libraryHaskellDepends = [
+    aeson
+    base
+    base64
+    bytestring
+    containers
+    directory
+    hsyslog
+    http-conduit
+    network-uri
+    optparse-applicative
+    pretty-simple
+    process
+    random
+    strings
+    template-haskell
+    text
+    time
+    twain
+    unix
+    utf8-string
+    warp
+    yaml
+  ];
+
+  executableHaskellDepends = [
+    aeson
+    base
+    base64
+    bytestring
+    containers
+    directory
+    hsyslog
+    http-conduit
+    network-uri
+    optparse-applicative
+    pretty-simple
+    process
+    random
+    strings
+    template-haskell
+    text
+    time
+    twain
+    unix
+    utf8-string
+    warp
+    yaml
+  ];
+
+  description = "OAuth2 tool for mail clients";
+  homepage = "https://github.com/pdobsan/mailctl";
+  changelog = "https://github.com/pdobsan/mailctl/releases/tag/${version}";
+  license = lib.licenses.bsd3;
+  maintainers = with lib.maintainers; [ aidalgol ];
+  mainProgram = "mailctl";
+}
diff --git a/nixpkgs/pkgs/tools/networking/maildrop/default.nix b/nixpkgs/pkgs/tools/networking/maildrop/default.nix
new file mode 100644
index 000000000000..143172735919
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maildrop/default.nix
@@ -0,0 +1,25 @@
+{ fetchurl, lib, stdenv, pkg-config, pcre, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "maildrop";
+  version = "2.6.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/courier/maildrop/${version}/maildrop-${version}.tar.bz2";
+    sha256 = "1a94p2b41iy334cwfwmzi19557dn5j61abh0cp2rfc9dkc8ibhdg";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pcre perl ];
+
+  patches = [ ./maildrop.configure.hack.patch ]; # for building in chroot
+
+  doCheck = false; # fails with "setlocale: LC_ALL: cannot change locale (en_US.UTF-8)"
+
+  meta = with lib; {
+    homepage = "http://www.courier-mta.org/maildrop/";
+    description = "Mail filter/mail delivery agent that is used by the Courier Mail Server";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch b/nixpkgs/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch
new file mode 100644
index 000000000000..08988f6cde50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch
@@ -0,0 +1,13 @@
+--- a/maildrop/configure	2012-09-06 01:52:13.000000000 +0100
++++ b/maildrop/configure	2013-01-04 03:00:57.095628327 +0000
+@@ -17562,8 +17562,8 @@
+ check_spooldir() {
+   if test "$CHECKED_SPOOLDIR" != 1
+   then
+-     get_spooldir
+-     MBOX_DIR="$SPOOLDIR"
++     MBOX_DIR="/var/spool/mail"
++     MBOX_RESET_GID=0
+      CHECKED_SPOOLDIR=1
+   fi
+ }
diff --git a/nixpkgs/pkgs/tools/networking/mailsend/default.nix b/nixpkgs/pkgs/tools/networking/mailsend/default.nix
new file mode 100644
index 000000000000..d009e09ac366
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailsend/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mailsend";
+  version = "1.19";
+
+  src = fetchurl {
+    url = "https://github.com/muquit/mailsend/archive/${version}.tar.gz";
+    sha256 = "sha256-Vl72vibFjvdQZcVRnq6N1VuuMUKShhlpayjSQrc0k/c=";
+  };
+
+  buildInputs = [
+    openssl
+  ];
+  configureFlags = [
+    "--with-openssl=${openssl.dev}"
+  ];
+
+  patches = [
+    (fetchurl {
+      url = "https://github.com/muquit/mailsend/commit/960df6d7a11eef90128dc2ae660866b27f0e4336.patch";
+      sha256 = "0vz373zcfl19inflybfjwshcq06rvhx0i5g0f4b021cxfhyb1sm0";
+    })
+    # Pull fix pending upstream inclusion for parallel build failures:
+    #   https://github.com/muquit/mailsend/pull/165
+    (fetchpatch {
+      name = "parallel-install.patch";
+      url = "https://github.com/muquit/mailsend/commit/acd4ebedbce0e4af3c7b6632f905f73e642ca38c.patch";
+      hash = "sha256-p8tNnkU6cMopuP63kVtRbD9aenhzL1EAXlvvFh4fucE=";
+    })
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "CLI email sending tool";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    homepage = "https://github.com/muquit/mailsend";
+    downloadPage = "https://github.com/muquit/mailsend/releases";
+    mainProgram = "mailsend";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mailutils/default.nix b/nixpkgs/pkgs/tools/networking/mailutils/default.nix
new file mode 100644
index 000000000000..f13cd8e07794
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailutils/default.nix
@@ -0,0 +1,154 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, autoreconfHook
+, dejagnu
+, gettext
+, gnum4
+, pkg-config
+, texinfo
+, fribidi
+, gdbm
+, gnutls
+, gss
+, guile_2_2
+, libmysqlclient
+, mailcap
+, nettools
+, pam
+, readline
+, ncurses
+, python3
+, sasl
+, system-sendmail
+, libxcrypt
+, mkpasswd
+
+, pythonSupport ? true
+, guileSupport ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mailutils";
+  version = "3.17";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
+    hash = "sha256-+km6zsN1Zv5S+IIh04cWc6Yzru4M2SPMOo5lu+8rhOk=";
+  };
+
+  separateDebugInfo = true;
+
+  postPatch = ''
+    sed -i -e '/chown root:mail/d' \
+           -e 's/chmod [24]755/chmod 0755/' \
+      */Makefile{.in,.am}
+    sed -i 's:/usr/lib/mysql:${libmysqlclient}/lib/mysql:' configure.ac
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gettext
+    gnum4
+    pkg-config
+    texinfo
+  ];
+
+  buildInputs = [
+    fribidi
+    gdbm
+    gnutls
+    gss
+    libmysqlclient
+    mailcap
+    ncurses
+    pam
+    readline
+    sasl
+    libxcrypt
+  ] ++ lib.optionals stdenv.isLinux [ nettools ]
+  ++ lib.optionals pythonSupport [ python3 ]
+  ++ lib.optionals guileSupport [ guile_2_2 ];
+
+  patches = [
+    ./fix-build-mb-len-max.patch
+    ./path-to-cat.patch
+    # Fix cross-compilation
+    # https://lists.gnu.org/archive/html/bug-mailutils/2020-11/msg00038.html
+    (fetchpatch {
+      url = "https://lists.gnu.org/archive/html/bug-mailutils/2020-11/txtiNjqcNpqOk.txt";
+      sha256 = "0ghzqb8qx2q8cffbvqzw19mivv7r5f16whplzhm7hdj0j2i6xf6s";
+    })
+    # https://github.com/NixOS/nixpkgs/issues/223967
+    # https://lists.gnu.org/archive/html/bug-mailutils/2023-04/msg00000.html
+    ./don-t-use-descrypt-password-in-the-test-suite.patch
+  ];
+
+  enableParallelBuilding = true;
+  hardeningDisable = [ "format" ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--with-gssapi"
+    "--with-gsasl"
+    "--with-mysql"
+    "--with-path-sendmail=${system-sendmail}/bin/sendmail"
+    "--with-mail-rc=/etc/mail.rc"
+    "DEFAULT_CUPS_CONFDIR=${mailcap}/etc" # provides mime.types to mimeview
+  ] ++ lib.optional (!pythonSupport) "--without-python"
+    ++ lib.optional (!guileSupport) "--without-guile";
+
+  nativeCheckInputs = [ dejagnu mkpasswd ];
+  doCheck = !stdenv.isDarwin; # ERROR: All 46 tests were run, 46 failed unexpectedly.
+  doInstallCheck = false; # fails
+
+  preCheck = ''
+    # Disable comsat tests that fail without tty in the sandbox.
+    tty -s || echo > comsat/tests/testsuite.at
+    # Remove broken macro
+    sed -i '/AT_TESTED/d' libmu_scm/tests/testsuite.at
+    # Provide libraries for mhn.
+    export LD_LIBRARY_PATH=$(pwd)/lib/.libs
+  '';
+
+  postCheck = ''
+    unset LD_LIBRARY_PATH
+  '';
+
+  meta = with lib; {
+    description = "Rich and powerful protocol-independent mail framework";
+
+    longDescription = ''
+      GNU Mailutils is a rich and powerful protocol-independent mail
+      framework.  It contains a series of useful mail libraries, clients, and
+      servers.  These are the primary mail utilities for the GNU system.  The
+      central library is capable of handling electronic mail in various
+      mailbox formats and protocols, both local and remote.  Specifically,
+      this project contains a POP3 server, an IMAP4 server, and a Sieve mail
+      filter.  It also provides a POSIX `mailx' client, and a collection of
+      other handy tools.
+
+      The GNU Mailutils libraries supply an ample set of primitives for
+      handling electronic mail in programs written in C, C++, Python or
+      Scheme.
+
+      The utilities provided by Mailutils include imap4d and pop3d mail
+      servers, mail reporting utility comsatd, mail filtering program sieve,
+      and an implementation of MH message handling system.
+    '';
+
+    license = with licenses; [
+      lgpl3Plus /* libraries */
+      gpl3Plus /* tools */
+    ];
+
+    maintainers = with maintainers; [ orivej vrthra ];
+
+    homepage = "https://www.gnu.org/software/mailutils/";
+    changelog = "https://git.savannah.gnu.org/cgit/mailutils.git/tree/NEWS";
+
+    # Some of the dependencies fail to build on {cyg,dar}win.
+    platforms = platforms.gnu ++ platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mailutils/don-t-use-descrypt-password-in-the-test-suite.patch b/nixpkgs/pkgs/tools/networking/mailutils/don-t-use-descrypt-password-in-the-test-suite.patch
new file mode 100644
index 000000000000..ac85496018ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailutils/don-t-use-descrypt-password-in-the-test-suite.patch
@@ -0,0 +1,59 @@
+From 59a1abfa7b339bccfc228f38cc791cdacf4010d4 Mon Sep 17 00:00:00 2001
+From: Michal Sojka <michal.sojka@cvut.cz>
+Date: Sat, 1 Apr 2023 10:59:00 +0200
+Subject: [PATCH] Don't use descrypt password in the test suite
+
+The descrypt method is not considered strong and some
+distributions (like NixOS) start compiling libxcrypt without it [1].
+
+To start using different hash methods, it is not sufficient to replace
+the password hash in testsuite/etc/passwd.in, because differently
+hashed passwords contain '$' characters (e.g.
+$y$j9T$lP8UWS9GZ4zfeTVDpmtbr1$dVozXOvWQXLQyhWGX7YyW8TIQTg8EfQLUzYPp3WCWo9)
+and the test suite replaces '$'-starting strings with values of the
+corresponding variables. Since I've not found a way to escape dollars
+for TCL's subst function, we do not hardcode the passwd hash directly
+to the file, but generate it dynamically and replace it in the file
+via a variable.
+
+[1]: https://github.com/NixOS/nixpkgs/pull/220557
+---
+ pop3d/testsuite/lib/pop3d.exp | 1 +
+ testsuite/etc/passwd.in       | 2 +-
+ testsuite/lib/mailutils.exp   | 1 +
+ 3 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/pop3d/testsuite/lib/pop3d.exp b/pop3d/testsuite/lib/pop3d.exp
+index 930861d8a..3b67844d2 100644
+--- a/pop3d/testsuite/lib/pop3d.exp
++++ b/pop3d/testsuite/lib/pop3d.exp
+@@ -26,6 +26,7 @@ if ![mu_check_capability ENABLE_VIRTUAL_DOMAINS] {
+ }
+ 
+ set POP3D_ETC_DIR "$MU_DATA_DIR/etc"
++set MU_PASSWD_HASH [exec mkpasswd --method=yescrypt guessme]
+ mu_makespool "$MU_RC_DIR" "$POP3D_ETC_DIR"
+ mu_create_config pop3d
+ 
+diff --git a/testsuite/etc/passwd.in b/testsuite/etc/passwd.in
+index c4e471b09..b13a75238 100644
+--- a/testsuite/etc/passwd.in
++++ b/testsuite/etc/passwd.in
+@@ -1 +1 @@
+-user:abld/G2Q2Le2w:1000:1000:Test User:$MU_SPOOL_DIR:/bin/sh
++user:$MU_PASSWD_HASH:1000:1000:Test User:$MU_SPOOL_DIR:/bin/sh
+diff --git a/testsuite/lib/mailutils.exp b/testsuite/lib/mailutils.exp
+index e4d45c85b..725ccf259 100644
+--- a/testsuite/lib/mailutils.exp
++++ b/testsuite/lib/mailutils.exp
+@@ -39,6 +39,7 @@ proc mu_copy_file {src dst} {
+     global MU_FOLDER_DIR
+     global MU_RC_DIR 
+     global MU_DATA_DIR
++    global MU_PASSWD_HASH
+     
+     set input [open $src r]
+     set output [open $dst w]
+-- 
+2.39.2
+
diff --git a/nixpkgs/pkgs/tools/networking/mailutils/fix-build-mb-len-max.patch b/nixpkgs/pkgs/tools/networking/mailutils/fix-build-mb-len-max.patch
new file mode 100644
index 000000000000..b28dfc5d99ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailutils/fix-build-mb-len-max.patch
@@ -0,0 +1,14 @@
+diff --git a/frm/frm.h b/frm/frm.h
+index 178b87d54..7931faada 100644
+--- a/frm/frm.h
++++ b/frm/frm.h
+@@ -34,6 +34,9 @@
+ #ifdef HAVE_ICONV_H
+ # include <iconv.h>
+ #endif
++#ifdef HAVE_LIMITS_H
++# include <limits.h>
++#endif
+ #ifndef MB_LEN_MAX
+ # define MB_LEN_MAX 4
+ #endif
diff --git a/nixpkgs/pkgs/tools/networking/mailutils/path-to-cat.patch b/nixpkgs/pkgs/tools/networking/mailutils/path-to-cat.patch
new file mode 100644
index 000000000000..698ee08f340f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailutils/path-to-cat.patch
@@ -0,0 +1,52 @@
+diff --git a/mh/show.c b/mh/show.c
+index a43afe10c..6985386ec 100644
+--- a/mh/show.c
++++ b/mh/show.c
+@@ -254,7 +254,7 @@ main (int argc, char **argv)
+   */
+ 
+   if (!use_showproc)
+-    showproc = "/bin/cat";
++    showproc = "cat";
+   else
+     showproc = mh_global_profile_get ("showproc", NULL);
+ 
+diff --git a/mh/tests/mhparam.at b/mh/tests/mhparam.at
+index 54b7fc06a..3abd5bf9b 100644
+--- a/mh/tests/mhparam.at
++++ b/mh/tests/mhparam.at
+@@ -28,7 +28,7 @@ mhparam -all | tr '\t' ' ' | sed 's/^Path:.*/Path: Mail/;s/^mhetcdir:.*/mhetcdir
+ [0],
+ [Path: Mail
+ mhetcdir: dir
+-moreproc: /bin/cat
++moreproc: cat
+ Sequence-Negation: not
+ Draft-Folder: Mail/drafts
+ Aliasfile: .mh_aliases
+diff --git a/mh/tests/testsuite.at b/mh/tests/testsuite.at
+index c6820843c..6675a4a9c 100644
+--- a/mh/tests/testsuite.at
++++ b/mh/tests/testsuite.at
+@@ -25,7 +25,7 @@ export MH
+ cat > $MH <<EOT
+ Path: $HOME/Mail
+ mhetcdir: $abs_top_srcdir/mh/etc
+-moreproc: /bin/cat
++moreproc: cat
+ EOT
+ MTSTAILOR=$HOME/mtstailor
+ export MTSTAILOR
+diff --git a/testsuite/lib/mailutils.exp b/testsuite/lib/mailutils.exp
+index d4691d922..c1b056933 100644
+--- a/testsuite/lib/mailutils.exp
++++ b/testsuite/lib/mailutils.exp
+@@ -728,7 +728,7 @@ proc mu_test_file {args} {
+         set pattern [lrange $args 1 end]
+     }
+     
+-    set res [remote_spawn host "/bin/cat $filename"]
++    set res [remote_spawn host "cat $filename"]
+     if { $res < 0 || $res == "" } {
+ 	perror "Reading $filename failed."
+ 	return 1;
diff --git a/nixpkgs/pkgs/tools/networking/maphosts/Gemfile b/nixpkgs/pkgs/tools/networking/maphosts/Gemfile
new file mode 100644
index 000000000000..cf3ea24c436f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maphosts/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'maphosts'
diff --git a/nixpkgs/pkgs/tools/networking/maphosts/Gemfile.lock b/nixpkgs/pkgs/tools/networking/maphosts/Gemfile.lock
new file mode 100644
index 000000000000..3e2332f75ccf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maphosts/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    colorize (0.8.0)
+    hosts (0.1.1)
+      linebreak (~> 2.0.1)
+    linebreak (2.0.1)
+    maphosts (1.1.1)
+      colorize (~> 0.7)
+      hosts (~> 0.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  maphosts
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/networking/maphosts/default.nix b/nixpkgs/pkgs/tools/networking/maphosts/default.nix
new file mode 100644
index 000000000000..9b0aa5cb899b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maphosts/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+let
+  env = bundlerEnv {
+    name = "maphosts-gems";
+    inherit ruby;
+    gemdir = ./.;
+  };
+in stdenv.mkDerivation {
+  pname = "maphosts";
+  version = env.gems.maphosts.version;
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    ln -s "${env}/bin/maphosts" "$out/bin/maphosts"
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "maphosts";
+
+  meta = with lib; {
+    description = "Small command line application for keeping your project hostnames in sync with /etc/hosts";
+    homepage    = "https://github.com/mpscholten/maphosts";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ mpscholten nicknovitski ];
+    platforms   = platforms.all;
+    mainProgram = "maphosts";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/maphosts/gemset.nix b/nixpkgs/pkgs/tools/networking/maphosts/gemset.nix
new file mode 100644
index 000000000000..b50653bc96d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maphosts/gemset.nix
@@ -0,0 +1,34 @@
+{
+  colorize = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mmi9wr55gb84jfpyhpx975d2c8dhdsjjys88kc6f2r66brxmh23";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  hosts = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s1mbn73ig5dy69dr8461574kq1ig6rdz89r1w5f8i7gvx9g9z9v";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  linebreak = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0362jhjhjcf0yr3k7bfqk4ai9yybm4985x7h1rwq4b7kvzk77pqj";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  maphosts = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bb7wa4vr3lkaywh4hvl74j2w5n52870zh4ypwl9cr43fdrj4nkw";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/maubot/default.nix b/nixpkgs/pkgs/tools/networking/maubot/default.nix
new file mode 100644
index 000000000000..acee6f1dedb3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maubot/default.nix
@@ -0,0 +1,140 @@
+{ lib
+, fetchPypi
+, fetchpatch
+, callPackage
+, runCommand
+, python3
+, encryptionSupport ? true
+}:
+
+let
+  python = python3.override {
+    packageOverrides = final: prev: {
+      # aiosqlite>=0.16,<0.19
+      aiosqlite = prev.aiosqlite.overridePythonAttrs (old: rec {
+        version = "0.18.0";
+        src = old.src.override {
+          rev = "refs/tags/v${version}";
+          hash = "sha256-yPGSKqjOz1EY5/V0oKz2EiZ90q2O4TINoXdxHuB7Gqk=";
+        };
+      });
+      # SQLAlchemy>=1,<1.4
+      # SQLAlchemy 2.0's derivation is very different, so don't override, just write it from scratch
+      # (see https://github.com/NixOS/nixpkgs/blob/65dbed73949e4c0207e75dcc7271b29f9e457670/pkgs/development/python-modules/sqlalchemy/default.nix)
+      sqlalchemy = final.buildPythonPackage rec {
+        pname = "SQLAlchemy";
+        version = "1.3.24";
+
+        src = fetchPypi {
+          inherit pname version;
+          sha256 = "sha256-67t3fL+TEjWbiXv4G6ANrg9ctp+6KhgmXcwYpvXvdRk=";
+        };
+
+        postInstall = ''
+          sed -e 's:--max-worker-restart=5::g' -i setup.cfg
+        '';
+
+        # tests are pretty annoying to set up for this version, and these dependency overrides are already long enough
+        doCheck = false;
+      };
+    };
+  };
+
+  maubot = python.pkgs.buildPythonPackage rec {
+    pname = "maubot";
+    version = "0.4.2";
+    disabled = python.pythonOlder "3.9";
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-svdg7KpCy/+T9Hu+FbsgLNU8nVuIn0flPg7qyn7I+30=";
+    };
+
+    patches = [
+      # add entry point - https://github.com/maubot/maubot/pull/146
+      (fetchpatch {
+        url = "https://github.com/maubot/maubot/commit/283f0a3ed5dfae13062b6f0fd153fbdc477f4381.patch";
+        sha256 = "0yn5357z346qzy5v5g124mgiah1xsi9yyfq42zg028c8paiw8s8x";
+      })
+    ];
+
+    propagatedBuildInputs = with python.pkgs; [
+      # requirements.txt
+      mautrix
+      aiohttp
+      yarl
+      sqlalchemy
+      asyncpg
+      aiosqlite
+      commonmark
+      ruamel-yaml
+      attrs
+      bcrypt
+      packaging
+      click
+      colorama
+      questionary
+      jinja2
+    ]
+    # optional-requirements.txt
+    ++ lib.optionals encryptionSupport [
+      python-olm
+      pycryptodome
+      unpaddedbase64
+    ];
+
+    postInstall = ''
+      rm $out/example-config.yaml
+    '';
+
+    # Setuptools is trying to do python -m maubot test
+    dontUseSetuptoolsCheck = true;
+
+    pythonImportsCheck = [
+      "maubot"
+    ];
+
+    passthru = let
+      wrapper = callPackage ./wrapper.nix {
+        unwrapped = maubot;
+        python3 = python;
+      };
+    in
+    {
+      tests = {
+        simple = runCommand "${pname}-tests" { } ''
+          ${maubot}/bin/mbc --help > $out
+        '';
+      };
+
+      inherit python;
+
+      plugins = callPackage ./plugins {
+        maubot = maubot;
+        python3 = python;
+      };
+
+      withPythonPackages = pythonPackages: wrapper { inherit pythonPackages; };
+
+      # This adds the plugins to lib/maubot-plugins
+      withPlugins = plugins: wrapper { inherit plugins; };
+
+      # This changes example-config.yaml in module directory
+      withBaseConfig = baseConfig: wrapper { inherit baseConfig; };
+    };
+
+    meta = with lib; {
+      description = "A plugin-based Matrix bot system written in Python";
+      homepage = "https://maubot.xyz/";
+      changelog = "https://github.com/maubot/maubot/blob/v${version}/CHANGELOG.md";
+      license = licenses.agpl3Plus;
+      # Presumably, people running "nix run nixpkgs#maubot" will want to run the tool
+      # for interacting with Maubot rather than Maubot itself, which should be used as
+      # a NixOS module.
+      mainProgram = "mbc";
+      maintainers = with maintainers; [ chayleaf ];
+    };
+  };
+
+in
+maubot
diff --git a/nixpkgs/pkgs/tools/networking/maubot/plugins/default.nix b/nixpkgs/pkgs/tools/networking/maubot/plugins/default.nix
new file mode 100644
index 000000000000..b60589b9df7e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maubot/plugins/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, fetchgit
+, fetchFromGitHub
+, fetchFromGitLab
+, fetchFromGitea
+, stdenvNoCC
+, callPackage
+, ensureNewerSourcesForZipFilesHook
+, maubot
+, python3
+, poetry
+, formats
+}:
+
+let
+  # pname: plugin id (example: xyz.maubot.echo)
+  # version: plugin version
+  # other attributes are passed directly to stdenv.mkDerivation (you at least need src)
+  buildMaubotPlugin = attrs@{ version, pname, base_config ? null, ... }:
+    stdenvNoCC.mkDerivation (builtins.removeAttrs attrs [ "base_config" ] // {
+      pluginName = "${pname}-v${version}.mbp";
+      nativeBuildInputs = (attrs.nativeBuildInputs or [ ]) ++ [
+        ensureNewerSourcesForZipFilesHook
+        maubot
+      ];
+      buildPhase = ''
+        runHook preBuild
+
+        mbc build
+
+        runHook postBuild
+      '';
+
+      postPatch = lib.optionalString (base_config != null) ''
+        [ -e base-config.yaml ] || (echo "base-config.yaml doesn't exist, can't override it" && exit 1)
+        cp "${if builtins.isPath base_config || lib.isDerivation base_config then base_config
+          else if builtins.isString base_config then builtins.toFile "base-config.yaml" base_config
+          else (formats.yaml { }).generate "base-config.yaml" base_config}" base-config.yaml
+      '' + attrs.postPatch or "";
+
+      installPhase = ''
+        runHook preInstall
+
+        mkdir -p $out/lib/maubot-plugins
+        install -m 444 $pluginName $out/lib/maubot-plugins
+
+        runHook postInstall
+      '';
+    });
+
+  generated = import ./generated.nix {
+    inherit lib fetchgit fetchFromGitHub fetchFromGitLab
+      fetchFromGitea python3 poetry buildMaubotPlugin;
+  };
+in
+generated // {
+  inherit buildMaubotPlugin;
+
+  allOfficialPlugins =
+    builtins.filter
+      (x: x.isOfficial && !x.meta.broken)
+      (builtins.attrValues generated);
+
+  allPlugins =
+    builtins.filter
+      (x: !x.meta.broken)
+      (builtins.attrValues generated);
+}
diff --git a/nixpkgs/pkgs/tools/networking/maubot/plugins/generated.json b/nixpkgs/pkgs/tools/networking/maubot/plugins/generated.json
new file mode 100644
index 000000000000..555de6c05821
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maubot/plugins/generated.json
@@ -0,0 +1,2225 @@
+{
+  "URLDownload": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://codeberg.org/LukeLR/matrix-url-download/releases",
+        "description": "A plugin for the maubot bot framework implementing URL downloads in matrix rooms.",
+        "downloadPage": "https://codeberg.org/LukeLR/matrix-url-download/releases",
+        "homepage": "https://codeberg.org/LukeLR/matrix-url-download"
+      }
+    },
+    "gitea": {
+      "domain": "codeberg.org",
+      "hash": "sha256-JLYhoQKxsYO46mqRJZEcWTHck6bli6itYGu8ZPbxyjg=",
+      "owner": "LukeLR",
+      "repo": "matrix-url-download",
+      "rev": "3a006d98faa6950edab1a45b7a8c6a6d7d908bff"
+    },
+    "manifest": {
+      "config": true,
+      "database": true,
+      "database_type": "asyncpg",
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "de.lukelr.urldownload",
+      "license": "LGPL-3.0-only",
+      "main_class": "URLDownloadBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "urldownload"
+      ],
+      "version": "0.0.3"
+    }
+  },
+  "activity-tracker": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/williamkray/maubot-kickbot/releases",
+        "description": "A plugin that minimally tracks user activity within a space. Useful for kicking inactive users from a private community.",
+        "downloadPage": "https://github.com/williamkray/maubot-kickbot/releases",
+        "homepage": "https://github.com/williamkray/maubot-kickbot"
+      }
+    },
+    "github": {
+      "hash": "sha256-TLaGpLrTR4TLR0TjY3v9FFST8JxEP4swJ7kzt0fDwJI=",
+      "owner": "williamkray",
+      "repo": "maubot-kickbot",
+      "rev": "a4c31c7a1492585f2155705be8cab7e3f73f6b69"
+    },
+    "manifest": {
+      "database": true,
+      "database_type": "asyncpg",
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.jobmachine.kickbot",
+      "license": "MIT",
+      "main_class": "KickBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "kickbot"
+      ],
+      "version": "0.0.10"
+    }
+  },
+  "alertbot": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/moan0s/alertbot/blob/v1.1.1/CHANGELOG.md",
+        "description": "A bot that recives monitoring alerts via alertmanager and forwards them to a matrix room.",
+        "downloadPage": "https://github.com/moan0s/alertbot/releases",
+        "homepage": "https://github.com/moan0s/alertbot"
+      }
+    },
+    "github": {
+      "hash": "sha256-hA4Wl1mrIuThQVHTPhMAVsvdbhhx/rHqpOResWO8xiI=",
+      "owner": "moan0s",
+      "repo": "alertbot",
+      "rev": "v1.1.1"
+    },
+    "manifest": {
+      "id": "de.hyteck.alertbot",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "AlertBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "alertbot"
+      ],
+      "version": "1.1.1",
+      "webapp": true
+    }
+  },
+  "altalias": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/altalias/releases",
+        "description": "A bot that lets users publish alternate aliases in rooms.",
+        "downloadPage": "https://github.com/maubot/altalias/releases",
+        "homepage": "https://github.com/maubot/altalias"
+      }
+    },
+    "github": {
+      "hash": "sha256-+qW3CX2ae86jc5l/7poyLs2cQycLjft9l3rul9eYby4=",
+      "owner": "maubot",
+      "repo": "altalias",
+      "rev": "b07b7866c9647612bfe784700b37087855432028"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.altalias",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "AltAliasBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "altalias"
+      ],
+      "version": "1.0.0"
+    }
+  },
+  "alternatingcaps": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/rom4nik/maubot-alternatingcaps/releases",
+        "description": "A bot repeating last message using aLtErNaTiNg cApS.",
+        "downloadPage": "https://github.com/rom4nik/maubot-alternatingcaps/releases",
+        "homepage": "https://github.com/rom4nik/maubot-alternatingcaps"
+      }
+    },
+    "github": {
+      "hash": "sha256-O3FhZ6US4iACEzEKdHLjBZfOJlHNGEeLSrHdqWULFvk=",
+      "owner": "rom4nik",
+      "repo": "maubot-alternatingcaps",
+      "rev": "v0.1.2"
+    },
+    "manifest": {
+      "id": "pl.rom4nik.maubot.alternatingcaps",
+      "license": "MIT",
+      "main_class": "AlternatingCaps",
+      "modules": [
+        "alternatingcaps"
+      ],
+      "version": "0.1.2"
+    }
+  },
+  "animemanga": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/coffeebank/coffee-maubot/releases",
+        "description": "An anime/manga bot for Matrix. Search anime, manga (manhwa/manhua), and light novels from Anilist. See series info, status, and episodes/chapters.",
+        "downloadPage": "https://github.com/coffeebank/coffee-maubot/releases",
+        "homepage": "https://github.com/coffeebank/coffee-maubot/tree/master/animemanga"
+      },
+      "postPatch": "cd animemanga"
+    },
+    "github": {
+      "hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
+      "owner": "coffeebank",
+      "repo": "coffee-maubot",
+      "rev": "b25112508d65f7560910e67d3074dd60f4048821"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "coffee.maubot.animemanga",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "AnimeMangaBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "animemanga"
+      ],
+      "version": "0.1.1.216"
+    }
+  },
+  "antithread": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/antithread/releases",
+        "description": "A bot that redacts all messages in threads.",
+        "downloadPage": "https://github.com/maubot/antithread/releases",
+        "homepage": "https://github.com/maubot/antithread"
+      }
+    },
+    "github": {
+      "hash": "sha256-O6rxvxR62DboRGaNevJRCZynGl3xthRICaxRCvLScdM=",
+      "owner": "maubot",
+      "repo": "antithread",
+      "rev": "0577b8eefcf01925452678b9fe380aac4270c672"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "id": "xyz.maubot.antithread",
+      "license": "MIT",
+      "main_class": "AntiThreadBot",
+      "modules": [
+        "antithread"
+      ],
+      "version": "1.0.0"
+    }
+  },
+  "autoreply": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/babolivier/maubot-autoreply/releases",
+        "description": "A bot that sends automated replies when you're away, and shows you a summary of missed messages when you come back.",
+        "downloadPage": "https://github.com/babolivier/maubot-autoreply/releases",
+        "homepage": "https://github.com/babolivier/maubot-autoreply"
+      }
+    },
+    "github": {
+      "hash": "sha256-ULOL5C1tzH4g0IWu+GmMdl3+aCZK0n/G4I8wIvd7f6U=",
+      "owner": "babolivier",
+      "repo": "maubot-autoreply",
+      "rev": "v1.0.0"
+    },
+    "manifest": {
+      "config": true,
+      "database": true,
+      "database_type": "asyncpg",
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "bzh.abolivier.autoreply",
+      "license": "Apache-2.0",
+      "main_class": "AutoReplyBot",
+      "maubot": "v0.1.0",
+      "modules": [
+        "autoreply"
+      ],
+      "version": "1.0.0"
+    }
+  },
+  "bard": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/ser/maubot-bard/releases",
+        "description": "Allow your maubot instance to return queries from Google(TM) Bard(TM) pseudoAI",
+        "downloadPage": "https://github.com/ser/maubot-bard/releases",
+        "homepage": "https://github.com/ser/maubot-bard/",
+        "license": "MIT"
+      }
+    },
+    "github": {
+      "hash": "sha256-E8pz71wfH+SmFNzBcPUrnqK0xs7wlyB6SaRXH/PDqKw=",
+      "owner": "ser",
+      "repo": "maubot-bard",
+      "rev": "4ff3ce8d86ed19c973dee89228779fed74811341"
+    },
+    "manifest": {
+      "config": true,
+      "dependencies": [
+        "bardapi"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "sergevictor.eu.maubot.bard",
+      "main_class": "BardPlugin",
+      "modules": [
+        "bard"
+      ],
+      "version": "0.99.100"
+    }
+  },
+  "characterai": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/Matthieu-LAURENT39/maubot-characterai/releases",
+        "description": "Chat with characters from [character.ai](https://character.ai/) in your Matrix rooms! Very customizable.",
+        "downloadPage": "https://github.com/Matthieu-LAURENT39/maubot-characterai/releases",
+        "homepage": "https://github.com/Matthieu-LAURENT39/maubot-characterai"
+      }
+    },
+    "github": {
+      "hash": "sha256-nyVz0PDyNGAIFCxakWzEe8AG/PU+HlZJQQ85SL1bEvs=",
+      "owner": "Matthieu-LAURENT39",
+      "repo": "maubot-characterai",
+      "rev": "v0.2.1"
+    },
+    "manifest": {
+      "config": true,
+      "database": true,
+      "database_type": "asyncpg",
+      "dependencies": [
+        "characterai"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "com.github.Matthieu-LAURENT39.maubot-characterai",
+      "license": "MIT",
+      "main_class": "CAIBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "cai"
+      ],
+      "version": "0.2.1"
+    }
+  },
+  "chatgpt": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/williamkray/maubot-chatgpt/releases",
+        "description": "ChatGPT plugin for maubot. Multi-user aware for use in group rooms! Customize your prompts to \"train\" your assistant contextually.",
+        "downloadPage": "https://github.com/williamkray/maubot-chatgpt/releases",
+        "homepage": "https://github.com/williamkray/maubot-chatgpt",
+        "license": "MIT"
+      }
+    },
+    "github": {
+      "hash": "sha256-iRo4oFOOXgISALFskPZUonV4cBn7HmBACdi5uhgQq8o=",
+      "owner": "williamkray",
+      "repo": "maubot-chatgpt",
+      "rev": "f3974dc3818da170a3f1e091359d31f3140245e0"
+    },
+    "manifest": {
+      "config": true,
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.jobmachine.chatgpt",
+      "main_class": "GPTPlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "gpt"
+      ],
+      "version": "0.0.9"
+    }
+  },
+  "choose": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/coffeebank/coffee-maubot/releases",
+        "description": "Have the bot choose for you ( item1 | item2 | item3 ) with a divider",
+        "downloadPage": "https://github.com/coffeebank/coffee-maubot/releases",
+        "homepage": "https://github.com/coffeebank/coffee-maubot/tree/master/choose"
+      },
+      "postPatch": "cd choose"
+    },
+    "github": {
+      "hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
+      "owner": "coffeebank",
+      "repo": "coffee-maubot",
+      "rev": "b25112508d65f7560910e67d3074dd60f4048821"
+    },
+    "manifest": {
+      "database": false,
+      "id": "coffee.maubot.choose",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "ChooseBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "choose"
+      ],
+      "version": "0.1.0.3"
+    }
+  },
+  "commitstrip": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/commitstrip/releases",
+        "description": "A bot to view CommitStrips.",
+        "downloadPage": "https://github.com/maubot/commitstrip/releases",
+        "homepage": "https://github.com/maubot/commitstrip"
+      }
+    },
+    "github": {
+      "hash": "sha256-P5u4oDmsMj4r48JZIZ1Cg8cX11aimv9dGI+J0lJrY34=",
+      "owner": "maubot",
+      "repo": "commitstrip",
+      "rev": "28ab63c2725aa989a151f5659cb37a674b002a80"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "database": true,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.commitstrip",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "CommitBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "commitstrip"
+      ],
+      "version": "1.0.0"
+    }
+  },
+  "create-room": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/williamkray/maubot-createroom/releases",
+        "description": "A plugin that creates new rooms and automatically sets them to be part of a private Matrix Space.",
+        "downloadPage": "https://github.com/williamkray/maubot-createroom/releases",
+        "homepage": "https://github.com/williamkray/maubot-createroom"
+      }
+    },
+    "github": {
+      "hash": "sha256-x1eoUX8u1IR/hLgS8YcpSoTByl+m3GoTW3fnFMDs1XA=",
+      "owner": "williamkray",
+      "repo": "maubot-createroom",
+      "rev": "4eecdcffa6c06276287c2a3d4e65905a72ad18ad"
+    },
+    "manifest": {
+      "config": true,
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.jobmachine.createspaceroom",
+      "license": "MIT",
+      "main_class": "CreateSpaceRoom",
+      "maubot": "0.1.0",
+      "modules": [
+        "createspaceroom"
+      ],
+      "version": "0.1.2"
+    }
+  },
+  "dice": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/dice/releases",
+        "description": "A combined dice rolling and calculator bot.",
+        "downloadPage": "https://github.com/maubot/dice/releases",
+        "homepage": "https://github.com/maubot/dice"
+      }
+    },
+    "github": {
+      "hash": "sha256-xnqcxOXHhsHR9RjLaOa6QZOx87V6kLQJW+mRWF/S5eM=",
+      "owner": "maubot",
+      "repo": "dice",
+      "rev": "v1.1.0"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.dice",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "DiceBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "dice"
+      ],
+      "version": "1.1.0"
+    }
+  },
+  "disruptor": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/disruptor/releases",
+        "description": "A bot that disrupts monologues with cat pictures.",
+        "downloadPage": "https://github.com/maubot/disruptor/releases",
+        "homepage": "https://github.com/maubot/disruptor"
+      }
+    },
+    "github": {
+      "hash": "sha256-/wm/CNl4XzRBClhW+jOp9S7P/nIz65aOtt+E9AnIPNA=",
+      "owner": "maubot",
+      "repo": "disruptor",
+      "rev": "v0.2.0"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.disruptor",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "DisruptorBot",
+      "maubot": "0.4.1",
+      "modules": [
+        "disruptor"
+      ],
+      "version": "0.2.0"
+    }
+  },
+  "echo": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/echo/releases",
+        "description": "A bot that echoes pings and other stuff.\n\nSee [#ping:maunium.net](https://matrix.to/#/#ping:maunium.net) for a room\nwith lots of echo bots.\n",
+        "downloadPage": "https://github.com/maubot/echo/releases",
+        "homepage": "https://github.com/maubot/echo"
+      }
+    },
+    "github": {
+      "hash": "sha256-/ajDs2vpWqejxDF7naXtKi1nYRs2lJpuc0R0dV7oVHI=",
+      "owner": "maubot",
+      "repo": "echo",
+      "rev": "v1.4.0"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "id": "xyz.maubot.echo",
+      "license": "MIT",
+      "main_class": "EchoBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "echo"
+      ],
+      "version": "1.4.0"
+    }
+  },
+  "exec": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/exec/releases",
+        "description": "A bot that executes code.",
+        "downloadPage": "https://github.com/maubot/exec/releases",
+        "homepage": "https://github.com/maubot/exec"
+      }
+    },
+    "github": {
+      "hash": "sha256-bwy3eB7ULYTGeJXtTNFMfry9dWQmnTjcU6HWdRznWxc=",
+      "owner": "maubot",
+      "repo": "exec",
+      "rev": "475d0fe70dc30e1c14e29028694fd4ac38690932"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.exec",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "ExecBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "exec"
+      ],
+      "version": "0.1.0"
+    }
+  },
+  "factorial": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/factorial/releases",
+        "description": "A bot to calculate unexpected factorials.",
+        "downloadPage": "https://github.com/maubot/factorial/releases",
+        "homepage": "https://github.com/maubot/factorial"
+      }
+    },
+    "github": {
+      "hash": "sha256-XHAwAloJZpFdY0kRrUjkEGJoryHK4PSQgBf2QH9C/6o=",
+      "owner": "maubot",
+      "repo": "factorial",
+      "rev": "v3.0.0"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "id": "xyz.maubot.factorial",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "FactorialBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "factorial"
+      ],
+      "version": "3.0.0"
+    }
+  },
+  "gifme": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/williamkray/maubot-gifme/releases",
+        "description": "Superior gif responses. Save your own library of image or video responses.\nAllows fallback behavior to Giphy or Tenor, optionally saves quotes from\nusers for comedic effect or to be used as an FAQ bot!\n",
+        "downloadPage": "https://github.com/williamkray/maubot-gifme/releases",
+        "homepage": "https://github.com/williamkray/maubot-gifme"
+      }
+    },
+    "github": {
+      "hash": "sha256-5MHLtm3qktUyvWyuwQEUQWL8fxszZ6h/hHClLLr0Uvs=",
+      "owner": "williamkray",
+      "repo": "maubot-gifme",
+      "rev": "6dbbb9ebce903887b62f95b04f4640779762e57a"
+    },
+    "manifest": {
+      "database": true,
+      "database_type": "asyncpg",
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.jobmachine.gifme",
+      "license": "MIT",
+      "main_class": "GifMe",
+      "maubot": "0.4.0",
+      "modules": [
+        "gifme"
+      ],
+      "version": "0.1.0"
+    }
+  },
+  "giphy": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/TomCasavant/GiphyMaubot/releases",
+        "description": "A bot that generates a gif (from giphy) given search terms.",
+        "downloadPage": "https://github.com/TomCasavant/GiphyMaubot/releases",
+        "homepage": "https://github.com/TomCasavant/GiphyMaubot"
+      }
+    },
+    "github": {
+      "hash": "sha256-bY9jCHwI2UZwn+W02hSEAD0aRRsM7cAeeYpnk3jTTBY=",
+      "owner": "TomCasavant",
+      "repo": "GiphyMaubot",
+      "rev": "3.3.0"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "casavant.tom.giphy",
+      "license": "MIT",
+      "main_class": "GiphyPlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "giphy"
+      ],
+      "version": "3.3.0"
+    }
+  },
+  "github": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/github/releases",
+        "description": "A GitHub client and webhook receiver.",
+        "downloadPage": "https://github.com/maubot/github/releases",
+        "homepage": "https://github.com/maubot/github"
+      }
+    },
+    "github": {
+      "hash": "sha256-Qc0KH8iGqMDa+1BXaB5fHtRIcsZRpTF2IufGMEXqV6Q=",
+      "owner": "maubot",
+      "repo": "github",
+      "rev": "v0.1.2"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "config": true,
+      "database": true,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.github",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "GitHubBot",
+      "maubot": "0.3.0",
+      "modules": [
+        "github"
+      ],
+      "version": "0.1.2",
+      "webapp": true
+    }
+  },
+  "gitlab": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/gitlab/releases",
+        "description": "A GitLab client and webhook receiver.",
+        "downloadPage": "https://github.com/maubot/gitlab/releases",
+        "homepage": "https://github.com/maubot/gitlab"
+      }
+    },
+    "github": {
+      "hash": "sha256-lkHGR+uLnT3f7prWDAbJplwzwAyOfMCwf8B2LeiJzIo=",
+      "owner": "maubot",
+      "repo": "gitlab",
+      "rev": "v0.2.1"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "config": true,
+      "database": true,
+      "extra_files": [
+        "base-config.yaml",
+        "templates/macros.html",
+        "templates/messages/*.html",
+        "templates/mixins/*.html"
+      ],
+      "id": "xyz.maubot.gitlab",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "GitlabBot",
+      "maubot": "0.1.2",
+      "modules": [
+        "gitlab_matrix"
+      ],
+      "soft_dependencies": [
+        "python-gitlab"
+      ],
+      "version": "0.2.1",
+      "webapp": true
+    }
+  },
+  "hasswebhookbot": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/v411e/hasswebhookbot/releases",
+        "description": "A bot receiving webhooks from [Home Assistant](https://github.com/home-assistant).",
+        "downloadPage": "https://github.com/v411e/hasswebhookbot/releases",
+        "homepage": "https://github.com/v411e/hasswebhookbot"
+      }
+    },
+    "github": {
+      "hash": "sha256-Tjr2sbFMpasBy4dR1Lqxt/jnO3ay26XY2d263JkFyKg=",
+      "owner": "v411e",
+      "repo": "hasswebhookbot",
+      "rev": "v0.0.15"
+    },
+    "manifest": {
+      "config": true,
+      "database": true,
+      "dependencies": [
+        "Markdown",
+        "pytz"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "com.valentinriess.hasswebhook",
+      "license": "MIT",
+      "main_class": "HassWebhook",
+      "maubot": "0.1.0",
+      "modules": [
+        "hasswebhook"
+      ],
+      "soft_dependencies": [
+        "Pillow"
+      ],
+      "version": "0.0.15",
+      "webapp": true
+    }
+  },
+  "hateheif": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/ser/maubot-hateheif/releases",
+        "description": "A bot which sends converted HEIF into JPEG. Works in encrypted and unencrypted rooms.",
+        "downloadPage": "https://github.com/ser/maubot-hateheif/releases",
+        "homepage": "https://github.com/ser/maubot-hateheif/"
+      }
+    },
+    "github": {
+      "hash": "sha256-twvVeMD2nRwpazc21inbdr6mUjMXJ4T6v5ieNrwB+O4=",
+      "owner": "ser",
+      "repo": "maubot-hateheif",
+      "rev": "52cf166960ac3fb71d291e13d5f3621caa9d7af1"
+    },
+    "manifest": {
+      "config": true,
+      "dependencies": [
+        "pillow-heif"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "eu.sergevictor.hateheif",
+      "license": "MIT",
+      "main_class": "HateHeifBot",
+      "modules": [
+        "hateheif"
+      ],
+      "version": "0.99.100"
+    }
+  },
+  "help": {
+    "attrs": {
+      "meta": {
+        "description": "A plugin to add a `!help` command to maubot. Returns all built-in help commands for all plugins loaded in the client instance.",
+        "homepage": "https://git.skeg1.se/vondassendorf/maubot_mauhelp"
+      }
+    },
+    "gitlab": {
+      "domain": "git.skeg1.se",
+      "hash": "sha256-xQ0GzdWPHstMSEOXwmW/DFxClK/oEwfyTrm752S5iFQ=",
+      "owner": "vondassendorf",
+      "repo": "maubot_mauhelp",
+      "rev": "v0.2.0"
+    },
+    "manifest": {
+      "database": false,
+      "id": "se.skeg1.mauhelp",
+      "license": "MIT",
+      "main_class": "MauHelp",
+      "maubot": "0.3.1",
+      "modules": [
+        "mauhelp"
+      ],
+      "version": "0.2.0"
+    }
+  },
+  "holopin": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/itrich/HolopinMaubot/releases",
+        "description": "A plugin to issue [Holopin](https://holopin.io) badges to users.",
+        "downloadPage": "https://github.com/itrich/HolopinMaubot/releases",
+        "homepage": "https://github.com/itrich/HolopinMaubot"
+      }
+    },
+    "github": {
+      "hash": "sha256-fQDa4e2hN5WFXwPVqefCU9YBzXHxvtXntAta0oZxp5M=",
+      "owner": "itrich",
+      "repo": "HolopinMaubot",
+      "rev": "v0.0.1"
+    },
+    "manifest": {
+      "config": true,
+      "database": false,
+      "dependencies": null,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "net.itrich.maubot.holopin",
+      "license": "MIT",
+      "main_class": "HolopinPlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "holopin"
+      ],
+      "soft_dependencies": null,
+      "version": "0.0.1",
+      "webapp": false
+    }
+  },
+  "invite": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/williamkray/maubot-invite/releases",
+        "description": "A bot to generate invitation tokens from [matrix-registration](https://github.com/ZerataX/matrix-registration).",
+        "downloadPage": "https://github.com/williamkray/maubot-invite/releases",
+        "homepage": "https://github.com/williamkray/maubot-invite"
+      }
+    },
+    "github": {
+      "hash": "sha256-VQufveYgxVOoMWtfNJ8LYWvjbFtboSNZzdRn7MA7DLA=",
+      "owner": "williamkray",
+      "repo": "maubot-invite",
+      "rev": "v0.3.1"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.jobmachine.invitebot",
+      "license": "MIT",
+      "main_class": "Invite",
+      "maubot": "0.1.0",
+      "modules": [
+        "invite"
+      ],
+      "version": "0.3.1"
+    }
+  },
+  "jadict": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/coffeebank/coffee-maubot/releases",
+        "description": "A Japanese dictionary Matrix bot for searching and translating Japanese vocabulary (Hiragana, Katakana, Kanji, Romaji). Searches Jisho using Jisho API.",
+        "downloadPage": "https://github.com/coffeebank/coffee-maubot/releases",
+        "homepage": "https://github.com/coffeebank/coffee-maubot/tree/master/jadict"
+      },
+      "postPatch": "cd jadict"
+    },
+    "github": {
+      "hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
+      "owner": "coffeebank",
+      "repo": "coffee-maubot",
+      "rev": "b25112508d65f7560910e67d3074dd60f4048821"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "coffee.maubot.jadict",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "JadictBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "jadict"
+      ],
+      "version": "0.1.0.10"
+    }
+  },
+  "join": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/williamkray/maubot-join/releases",
+        "description": "A plugin that restricts who can convince your bot to join new rooms to certain users.",
+        "downloadPage": "https://github.com/williamkray/maubot-join/releases",
+        "homepage": "https://github.com/williamkray/maubot-join"
+      }
+    },
+    "github": {
+      "hash": "sha256-aqpL+KO5p0hre7RCUZrM270Ah+cR4cQxZn7LTXLT79k=",
+      "owner": "williamkray",
+      "repo": "maubot-join",
+      "rev": "1b57758dfe3a2191588bb903ea546328146e69d8"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.jobmachine.join",
+      "license": "MIT",
+      "main_class": "Join",
+      "maubot": "0.1.0",
+      "modules": [
+        "join"
+      ],
+      "version": "0.3.0"
+    }
+  },
+  "karma": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/karma/releases",
+        "description": "A user karma tracker bot.",
+        "downloadPage": "https://github.com/maubot/karma/releases",
+        "homepage": "https://github.com/maubot/karma"
+      }
+    },
+    "github": {
+      "hash": "sha256-7CK4NReLhU/d0FXTWj9eM7C5yL9nXkM+vpPExv4VPfE=",
+      "owner": "maubot",
+      "repo": "karma",
+      "rev": "v1.0.1"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "database": true,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.karma",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "KarmaBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "karma"
+      ],
+      "version": "1.0.1"
+    }
+  },
+  "ldap-ad-inviterbot": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/SAPUCC/inviterbot/blob/v0.1.5/CHANGELOG.md",
+        "description": "A plugin to sync users from Microsoft Azure AD and LDAP into matrix rooms. (Membership, Power-Levels)",
+        "downloadPage": "https://github.com/SAPUCC/inviterbot/releases",
+        "homepage": "https://github.com/SAPUCC/inviterbot",
+        "license": "GPL-3.0-or-later"
+      }
+    },
+    "github": {
+      "hash": "sha256-Ve420Mfa+Ikxp0P/8b6rZIu54VOfKhH3sWDNNMClj9E=",
+      "owner": "SAPUCC",
+      "repo": "inviterbot",
+      "rev": "v0.1.5"
+    },
+    "manifest": {
+      "config": true,
+      "database": false,
+      "dependencies": [
+        null
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "de.in4md-service.inviterbot",
+      "license": "GPLv3",
+      "main_class": "InviterBot",
+      "maubot": "0.2.0",
+      "modules": [
+        "inviter"
+      ],
+      "version": "0.1.5"
+    }
+  },
+  "local-stt": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/ElishaAz/mau_local_stt/releases",
+        "description": "A Maubot to transcribe audio messages in matrix rooms using local open-source libraries",
+        "downloadPage": "https://github.com/ElishaAz/mau_local_stt/releases",
+        "homepage": "https://github.com/ElishaAz/mau_local_stt",
+        "license": "GPL-3.0-only"
+      }
+    },
+    "github": {
+      "hash": "sha256-EyDJ4RtQjBl7BQ7Y/0LWfX4zkVVqBOqjnhb9tXhFxio=",
+      "owner": "ElishaAz",
+      "repo": "mau_local_stt",
+      "rev": "v1.0.2"
+    },
+    "manifest": {
+      "config": true,
+      "dependencies": [
+        "whispercpp",
+        "numpy",
+        "vosk"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "com.elishaaz.maulocalstt",
+      "license": "GPLv3",
+      "main_class": "MauLocalSTT",
+      "maubot": "0.1.0",
+      "modules": [
+        "maulocalstt"
+      ],
+      "version": "1.0.2"
+    }
+  },
+  "manhole": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/manhole/releases",
+        "description": "A plugin that lets you access a Python shell inside maubot.",
+        "downloadPage": "https://github.com/maubot/manhole/releases",
+        "homepage": "https://github.com/maubot/manhole"
+      }
+    },
+    "github": {
+      "hash": "sha256-F3Nrl6NOUmwDuBsCxIfopRnLU9rltdaCJL/OcNGzw1Q=",
+      "owner": "maubot",
+      "repo": "manhole",
+      "rev": "47f1f7501b5b353a0fa74bf5929cead559496174"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.manhole",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "ManholeBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "manhole"
+      ],
+      "version": "1.0.0"
+    }
+  },
+  "media": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/media/releases",
+        "description": "A bot that replies with the MXC URI of images you send it.",
+        "downloadPage": "https://github.com/maubot/media/releases",
+        "homepage": "https://github.com/maubot/media"
+      }
+    },
+    "github": {
+      "hash": "sha256-00zESMN2WxKYPAQbpyvDpkyJIFkILLOP+m256k0Avzk=",
+      "owner": "maubot",
+      "repo": "media",
+      "rev": "v1.0.0"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "id": "xyz.maubot.media",
+      "license": "MIT",
+      "main_class": "MediaBot",
+      "modules": [
+        "media"
+      ],
+      "version": "1.0.0"
+    }
+  },
+  "metric": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/edwardsdean/maubot_metric_bot/releases",
+        "description": "A bot that will reply to a message that contains imperial units and replace them with metric units.",
+        "downloadPage": "https://github.com/edwardsdean/maubot_metric_bot/releases",
+        "homepage": "https://github.com/edwardsdean/maubot_metric_bot"
+      }
+    },
+    "github": {
+      "hash": "sha256-qtGGCaATIzJMRhLWzFN0kSa6P/tlckCkxatKEfXyi0E=",
+      "owner": "edwardsdean",
+      "repo": "maubot_metric_bot",
+      "rev": "0.0.4"
+    },
+    "manifest": {
+      "database": false,
+      "id": "me.edwardsdean.maubot.metric",
+      "license": "MIT",
+      "main_class": "MetricPlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "metric"
+      ],
+      "version": "0.0.4"
+    }
+  },
+  "ntfy": {
+    "attrs": {
+      "meta": {
+        "description": "A bot for subscribing to [ntfy](https://ntfy.sh) topics and posting messages to Matrix.",
+        "homepage": "https://gitlab.com/999eagle/maubot-ntfy"
+      }
+    },
+    "gitlab": {
+      "hash": "sha256-6522dVqhGoPc/qjz65D3kXHks5LLb3yVe0K5abqdXrw=",
+      "owner": "999eagle",
+      "repo": "maubot-ntfy",
+      "rev": "256aa8f315cbb184eba0256c2ec818abbdd2d408"
+    },
+    "manifest": {
+      "config": true,
+      "database": true,
+      "database_type": "asyncpg",
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "cloud.catgirl.ntfy",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "NtfyBot",
+      "maubot": "0.3.0",
+      "modules": [
+        "ntfy"
+      ],
+      "soft_dependencies": [
+        "emoji>=2.0"
+      ],
+      "version": "0.1.0"
+    }
+  },
+  "ovgumensabot": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/v411e/ovgumensabot/releases",
+        "description": "A bot that automatically sends meals from OvGU canteen every day.",
+        "downloadPage": "https://github.com/v411e/ovgumensabot/releases",
+        "homepage": "https://github.com/v411e/ovgumensabot"
+      }
+    },
+    "github": {
+      "hash": "sha256-nuOLUPwE0F15FgOtbq3+qmNNd2eHRrRNJPMM+v1Ksy0=",
+      "owner": "v411e",
+      "repo": "ovgumensabot",
+      "rev": "v0.0.8"
+    },
+    "manifest": {
+      "database": true,
+      "dependencies": [
+        "requests",
+        "beautifulsoup4"
+      ],
+      "extra_files": [
+        "LICENSE.txt"
+      ],
+      "id": "com.valentinriess.mensa",
+      "license": "MIT",
+      "main_class": "MensaBot",
+      "maubot": "0.2.0",
+      "modules": [
+        "ovgumensabot"
+      ],
+      "version": "0.0.8"
+    }
+  },
+  "pingcheck": {
+    "attrs": {
+      "meta": {
+        "description": "A bot to ping the echo bot and send rtt to Icinga passive check.",
+        "homepage": "https://edugit.org/nik/maubot-pingcheck"
+      }
+    },
+    "gitlab": {
+      "domain": "edugit.org",
+      "hash": "sha256-ljNi4si7ZkcCidO5l9jJcgdrj4P8RESB1wznxJvzPNQ=",
+      "owner": "nik",
+      "repo": "maubot-pingcheck",
+      "rev": "0.1.0"
+    },
+    "manifest": {
+      "dependencie": [
+        "requests"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.pingcheck",
+      "license": "MIT",
+      "main_class": "PingcheckBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "pingcheck"
+      ],
+      "version": "0.1.0"
+    }
+  },
+  "pocket": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/jaywink/maubot-pocket/blob/v0.2.5/CHANGELOG.md",
+        "description": "A bot integrating with Pocket to fetch articles and archive them.",
+        "downloadPage": "https://github.com/jaywink/maubot-pocket/releases",
+        "homepage": "https://github.com/jaywink/maubot-pocket"
+      }
+    },
+    "github": {
+      "hash": "sha256-I3+nfdkW9WkscsAYN2E1jEyoVujaN/zOTJ8HLReqq44=",
+      "owner": "jaywink",
+      "repo": "maubot-pocket",
+      "rev": "v0.2.5"
+    },
+    "manifest": {
+      "database": true,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "me.jasonrobinson.pocket",
+      "license": "MIT",
+      "main_class": "PocketPlugin",
+      "maubot": "0.3.1",
+      "modules": [
+        "pocket"
+      ],
+      "version": "0.2.5",
+      "webapp": true
+    }
+  },
+  "poll": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/TomCasavant/PollMaubot/releases",
+        "description": "A bot that will create a simple poll for users in a room.",
+        "downloadPage": "https://github.com/TomCasavant/PollMaubot/releases",
+        "homepage": "https://github.com/TomCasavant/PollMaubot"
+      }
+    },
+    "github": {
+      "hash": "sha256-o+9DP9QHZEibmAhy13/fJn72r8hLPY1uuOrTXchjRmw=",
+      "owner": "TomCasavant",
+      "repo": "PollMaubot",
+      "rev": "3.0.1"
+    },
+    "manifest": {
+      "database": false,
+      "id": "casavant.tom.poll",
+      "license": "MIT",
+      "main_class": "PollPlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "poll"
+      ],
+      "version": "3.0.1"
+    }
+  },
+  "random-quote": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/itrich/QuoteMaubot/releases",
+        "description": "A plugin to answer with a random quote from a configurable list.",
+        "downloadPage": "https://github.com/itrich/QuoteMaubot/releases",
+        "homepage": "https://github.com/itrich/QuoteMaubot"
+      }
+    },
+    "github": {
+      "hash": "sha256-NJ6sUC7L4f7ERDAKNcs2RD8q4mGzW0d4rhxh+wqzhVw=",
+      "owner": "itrich",
+      "repo": "QuoteMaubot",
+      "rev": "v0.0.1"
+    },
+    "manifest": {
+      "config": true,
+      "database": false,
+      "dependencies": null,
+      "extra_files": null,
+      "id": "net.itrich.maubot.quote",
+      "license": "MIT",
+      "main_class": "QuotePlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "quote"
+      ],
+      "soft_dependencies": null,
+      "version": "0.0.1",
+      "webapp": false
+    }
+  },
+  "random-subreddit-post": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/williamkray/maubot-reddit/releases",
+        "description": "A plugin that returns a random post from a given subreddit.",
+        "downloadPage": "https://github.com/williamkray/maubot-reddit/releases",
+        "homepage": "https://github.com/williamkray/maubot-reddit"
+      }
+    },
+    "github": {
+      "hash": "sha256-xinkSNTWTdKSNE0YFLS3yy26HbqD+I11Z8dGVh/tHNw=",
+      "owner": "williamkray",
+      "repo": "maubot-reddit",
+      "rev": "v0.3.6"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.jobmachine.reddit",
+      "license": "MIT",
+      "main_class": "Post",
+      "maubot": "0.1.0",
+      "modules": [
+        "reddit"
+      ],
+      "version": "0.3.6"
+    }
+  },
+  "reactbot": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/reactbot/releases",
+        "description": "A bot that responds to messages that match predefined rules.",
+        "downloadPage": "https://github.com/maubot/reactbot/releases",
+        "homepage": "https://github.com/maubot/reactbot"
+      }
+    },
+    "github": {
+      "hash": "sha256-ARN9zbOFJCVoqz6ooLRm9DDKUZpbQf7KcfsfoOxeeLE=",
+      "owner": "maubot",
+      "repo": "reactbot",
+      "rev": "v2.2.0"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.reactbot",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "ReactBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "reactbot"
+      ],
+      "version": "2.2.0"
+    }
+  },
+  "redactbot": {
+    "attrs": {
+      "meta": {
+        "description": "A bot that immediately redacts any posted file (except for whitelisted types).",
+        "homepage": "https://gitlab.com/sspaeth/redactbot"
+      }
+    },
+    "gitlab": {
+      "hash": "sha256-uIcXnD3nXVT7mA9SgdyrXGIZuW4CgnCVbCP7TxxnziM=",
+      "owner": "sspaeth",
+      "repo": "redactbot",
+      "rev": "2bca49b14024844c0aa53b9c4802ef6f8702d99d"
+    },
+    "manifest": {
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.redactbot",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "RedactBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "redactbot"
+      ],
+      "version": "2.2.0"
+    }
+  },
+  "reminder": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/reminder/releases",
+        "description": "A bot to remind you about things.",
+        "downloadPage": "https://github.com/maubot/reminder/releases",
+        "homepage": "https://github.com/maubot/reminder"
+      }
+    },
+    "github": {
+      "hash": "sha256-BCyeWl5xPKvUGWkrnuGh498gKxfhfNZ7oBrsZzpKxkg=",
+      "owner": "maubot",
+      "repo": "reminder",
+      "rev": "v0.2.2"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "database": true,
+      "dependencies": [
+        "python-dateutil",
+        "pytz"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.reminder",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "ReminderBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "reminder"
+      ],
+      "version": "0.2.2"
+    }
+  },
+  "reminder-agenda": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/MxMarx/reminder/releases",
+        "description": "Create reminders, recurring reminders, and agenda items. A maubot port of [matrix-reminder-bot](https://github.com/anoadragon453/matrix-reminder-bot/tree/master) combined with [maubot/reminder](https://github.com/maubot/reminder)",
+        "downloadPage": "https://github.com/MxMarx/reminder/releases",
+        "homepage": "https://github.com/MxMarx/reminder"
+      }
+    },
+    "github": {
+      "hash": "sha256-3I2EIbyGgtj1NblLAEKCVLSDFnT25YRAp5RXvFHdu2w=",
+      "owner": "MxMarx",
+      "repo": "reminder",
+      "rev": "v0.1.1"
+    },
+    "manifest": {
+      "database": true,
+      "database_type": "asyncpg",
+      "dependencies": [
+        "pytz",
+        "dateparser",
+        "apscheduler"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.bytemarx.reminder",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "ReminderBot",
+      "maubot": "0.4.1",
+      "modules": [
+        "reminder"
+      ],
+      "soft_dependencies": [
+        "cron_descriptor"
+      ],
+      "version": "0.1.1"
+    }
+  },
+  "rss": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/rss/releases",
+        "description": "A bot that posts RSS feed updates to Matrix.",
+        "downloadPage": "https://github.com/maubot/rss/releases",
+        "homepage": "https://github.com/maubot/rss"
+      }
+    },
+    "github": {
+      "hash": "sha256-p/xJpJbzsOeQGcowvOhJSclPtmZyNyBaZBz+mexVqIY=",
+      "owner": "maubot",
+      "repo": "rss",
+      "rev": "v0.3.2"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "database": true,
+      "database_type": "asyncpg",
+      "dependencies": [
+        "feedparser>=5.1"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.rss",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "RSSBot",
+      "maubot": "0.3.0",
+      "modules": [
+        "rss"
+      ],
+      "version": "0.3.2"
+    }
+  },
+  "satwcomic": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/satwcomic/releases",
+        "description": "A bot to view SatWComics.",
+        "downloadPage": "https://github.com/maubot/satwcomic/releases",
+        "homepage": "https://github.com/maubot/satwcomic"
+      }
+    },
+    "github": {
+      "hash": "sha256-TyXrPUUQdLC0IXbpQquA9eegzDoBm1g2WaeQuqhYPco=",
+      "owner": "maubot",
+      "repo": "satwcomic",
+      "rev": "0241bce4807ce860578e2f4fde76bb043bcebe95"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "database": true,
+      "dependencies": [
+        "pyquery"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.satwcomic",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "SatWBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "satwcomic"
+      ],
+      "soft_dependencies": [
+        "Pillow"
+      ],
+      "version": "1.0.0"
+    }
+  },
+  "sed": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/sed/releases",
+        "description": "A bot to do sed-like replacements.",
+        "downloadPage": "https://github.com/maubot/sed/releases",
+        "homepage": "https://github.com/maubot/sed"
+      }
+    },
+    "github": {
+      "hash": "sha256-raVUYEEuNHDFEE+b/yb8DyokFOrbVn0miul+2tJbR+s=",
+      "owner": "maubot",
+      "repo": "sed",
+      "rev": "v1.1.0"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "id": "xyz.maubot.sed",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "SedBot",
+      "modules": [
+        "sed"
+      ],
+      "version": "1.1.0"
+    }
+  },
+  "send-custom-html": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/coffeebank/coffee-maubot/releases",
+        "description": "Have the bot send a message as custom HTML. Test and preview formatted HTML body in Matrix.",
+        "downloadPage": "https://github.com/coffeebank/coffee-maubot/releases",
+        "homepage": "https://github.com/coffeebank/coffee-maubot/tree/master/send-custom-html"
+      },
+      "postPatch": "cd send-custom-html"
+    },
+    "github": {
+      "hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
+      "owner": "coffeebank",
+      "repo": "coffee-maubot",
+      "rev": "b25112508d65f7560910e67d3074dd60f4048821"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "coffee.maubot.sendcustomhtml",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "SendCustomHtmlBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "sendcustomhtml"
+      ],
+      "version": "0.1.0.6"
+    }
+  },
+  "social-media-download": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/ggogel/SocialMediaDownloadMaubot/releases",
+        "description": "A bot that that downloads content from various social media websites given a link.",
+        "downloadPage": "https://github.com/ggogel/SocialMediaDownloadMaubot/releases",
+        "homepage": "https://github.com/ggogel/SocialMediaDownloadMaubot"
+      }
+    },
+    "github": {
+      "hash": "sha256-RMyQzGz2Z4m9FN0Nt5E6Tj0yZarysygCtvEZDfG143M=",
+      "owner": "ggogel",
+      "repo": "SocialMediaDownloadMaubot",
+      "rev": "1.2.0"
+    },
+    "manifest": {
+      "config": true,
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "me.gogel.maubot.socialmediadownload",
+      "license": "MIT",
+      "main_class": "socialmediadownload/SocialMediaDownloadPlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "instaloader",
+        "socialmediadownload"
+      ],
+      "version": "1.2.0"
+    }
+  },
+  "songwhip": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/songwhip/releases",
+        "description": "A bot to post Songwhip links.",
+        "downloadPage": "https://github.com/maubot/songwhip/releases",
+        "homepage": "https://github.com/maubot/songwhip"
+      }
+    },
+    "github": {
+      "hash": "sha256-oghM1IECN88KhwRhGZCTJo4uMwc495sWNHeK9KaK4FU=",
+      "owner": "maubot",
+      "repo": "songwhip",
+      "rev": "c8d00999ab77a77d0036ee6c71b2cf11583f8edd"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "id": "xyz.maubot.songwhip",
+      "license": "MIT",
+      "main_class": "SongwhipBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "songwhip"
+      ],
+      "version": "0.1.0"
+    }
+  },
+  "subreddit-linkifier": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/TomCasavant/RedditMaubot/releases",
+        "description": "A bot that condescendingly corrects a user when they enter an r/subreddit without providing a link to that subreddit.",
+        "downloadPage": "https://github.com/TomCasavant/RedditMaubot/releases",
+        "homepage": "https://github.com/TomCasavant/RedditMaubot"
+      }
+    },
+    "github": {
+      "hash": "sha256-4F59gCmSl7FNWTys5c9r4Ha0gschDyiYjsX7emhRwuU=",
+      "owner": "TomCasavant",
+      "repo": "RedditMaubot",
+      "rev": "1.5.0"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "casavant.tom.reddit",
+      "license": "MIT",
+      "main_class": "RedditPlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "reddit"
+      ],
+      "version": "1.5.0"
+    }
+  },
+  "supportportal": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/supportportal/releases",
+        "description": "A bot to manage customer support on Matrix.",
+        "downloadPage": "https://github.com/maubot/supportportal/releases",
+        "homepage": "https://github.com/maubot/supportportal"
+      }
+    },
+    "github": {
+      "hash": "sha256-9CmA9KfkOkzqTycAGE8jaZuDwS7IvFwWGUer3iR8ooM=",
+      "owner": "maubot",
+      "repo": "supportportal",
+      "rev": "v0.1.0"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "config": true,
+      "database": true,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.supportportal",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "SupportPortalBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "supportportal"
+      ],
+      "version": "0.1.0"
+    }
+  },
+  "tex": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/tex/releases",
+        "description": "A bot that renders LaTeX.",
+        "downloadPage": "https://github.com/maubot/tex/releases",
+        "homepage": "https://github.com/maubot/tex"
+      }
+    },
+    "github": {
+      "hash": "sha256-6Iq/rOiMQiFtKvAYeYuF+2xXVcR7VIxQTejbpYBpy2A=",
+      "owner": "maubot",
+      "repo": "tex",
+      "rev": "a6617da41409b5fc5960dc8de06046bbac091318"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "dependencies": [
+        "matplotlib",
+        "Pillow"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.tex",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "TexBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "tex"
+      ],
+      "version": "0.1.0"
+    }
+  },
+  "ticker": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/williamkray/maubot-ticker/releases",
+        "description": "A bot to return financial data about a stock or cryptocurrency.",
+        "downloadPage": "https://github.com/williamkray/maubot-ticker/releases",
+        "homepage": "https://github.com/williamkray/maubot-ticker"
+      }
+    },
+    "github": {
+      "hash": "sha256-o/AjzuNaVzHKnpV10p19vDJthEUZ75nAg3KT0Ff3LEg=",
+      "owner": "williamkray",
+      "repo": "maubot-ticker",
+      "rev": "v0.0.6"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.jobmachine.tickerbot",
+      "license": "MIT",
+      "main_class": "TickerBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "tickerbot"
+      ],
+      "version": "0.0.6"
+    }
+  },
+  "timein": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/coffeebank/coffee-maubot/releases",
+        "description": "Get the time in specific cities. Check timezones.  !timein New York  (Python 3.9+) (Python <3.9 requires pytz, fuzzywuzzy)",
+        "downloadPage": "https://github.com/coffeebank/coffee-maubot/releases",
+        "homepage": "https://github.com/coffeebank/coffee-maubot/tree/master/timein"
+      },
+      "postPatch": "cd timein"
+    },
+    "github": {
+      "hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
+      "owner": "coffeebank",
+      "repo": "coffee-maubot",
+      "rev": "b25112508d65f7560910e67d3074dd60f4048821"
+    },
+    "manifest": {
+      "database": false,
+      "dependencies": [
+        "pytz",
+        "fuzzywuzzy"
+      ],
+      "id": "coffee.maubot.timein",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "TimeinBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "timein"
+      ],
+      "version": "0.1.0.6"
+    }
+  },
+  "tmdb": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://codeberg.org/lomion/tmdb-bot/releases",
+        "description": "A bot that posts information about movies fetched from TheMovieDB.org.",
+        "downloadPage": "https://codeberg.org/lomion/tmdb-bot/releases",
+        "homepage": "https://codeberg.org/lomion/tmdb-bot",
+        "license": "AGPL-3.0-only"
+      }
+    },
+    "gitea": {
+      "domain": "codeberg.org",
+      "hash": "sha256-QeKpIukLCeJOxi/+H+Hukf7mA38gvf8q37o4FOuigAU=",
+      "owner": "lomion",
+      "repo": "tmdb-bot",
+      "rev": "rel.1.3.0"
+    },
+    "manifest": {
+      "database": true,
+      "id": "lomion.tmdb",
+      "license": "AGPL 3.0",
+      "main_class": "TmdbBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "tmdb"
+      ],
+      "version": "1.3.0"
+    }
+  },
+  "token": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/yoxcu/maubot-token/releases",
+        "description": "A maubot to create and manage your synapse user registration tokens.",
+        "downloadPage": "https://github.com/yoxcu/maubot-token/releases",
+        "homepage": "https://github.com/yoxcu/maubot-token"
+      }
+    },
+    "github": {
+      "hash": "sha256-8ZAH9Kn0EQYY9gLx48gF+aEsFOdlZlrbUIvLMP0uwi4=",
+      "owner": "yoxcu",
+      "repo": "maubot-token",
+      "rev": "v1.1.0"
+    },
+    "manifest": {
+      "config": true,
+      "database": false,
+      "extra_files": [
+        "base-config.yaml",
+        "LICENSE"
+      ],
+      "id": "de.yoxcu.token",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "TokenBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "tokenbot"
+      ],
+      "version": "1.1.0"
+    }
+  },
+  "translate": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/translate/releases",
+        "description": "A bot to translate words.",
+        "downloadPage": "https://github.com/maubot/translate/releases",
+        "homepage": "https://github.com/maubot/translate"
+      }
+    },
+    "github": {
+      "hash": "sha256-eaiTNjnBa0r2zeCzYZH/k04dGftBSGuGaDvwOGKKZDA=",
+      "owner": "maubot",
+      "repo": "translate",
+      "rev": "v0.1.0"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.translate",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "TranslatorBot",
+      "modules": [
+        "translate"
+      ],
+      "version": "0.1.0"
+    }
+  },
+  "trump": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/jeffcasavant/MaubotTrumpTweet/releases",
+        "description": "A bot that generates a Trump tweet with the given content.",
+        "downloadPage": "https://github.com/jeffcasavant/MaubotTrumpTweet/releases",
+        "homepage": "https://github.com/jeffcasavant/MaubotTrumpTweet"
+      }
+    },
+    "github": {
+      "hash": "sha256-WlrFt+uj6E7Ecg+3KW6fjrMXSUP5YFA5ZyitvBON3pA=",
+      "owner": "jeffcasavant",
+      "repo": "MaubotTrumpTweet",
+      "rev": "v1.1.2"
+    },
+    "isPoetry": true,
+    "manifest": {
+      "database": false,
+      "dependencies": [
+        "Pillow>=9.0.1, <10.0.0"
+      ],
+      "extra_files": [
+        "res/font/Roboto-Black.ttf",
+        "res/font/Roboto-Regular.ttf",
+        "res/img/avatars/cartoon0.jpg",
+        "res/img/avatars/cartoon1.jpg",
+        "res/img/avatars/cartoon2.jpg",
+        "res/img/avatars/cartoon3.jpg",
+        "res/img/avatars/cartoon4.jpg",
+        "res/img/avatars/cartoon5.jpg",
+        "res/img/avatars/cartoon6.jpg",
+        "res/img/avatars/cartoon7.jpg",
+        "res/img/avatars/cartoon8.jpg",
+        "res/img/avatars/cartoon9.jpg",
+        "res/img/avatars/default.png",
+        "res/img/avatars/real0.jpg",
+        "res/img/avatars/real1.jpg",
+        "res/img/avatars/real10.jpg",
+        "res/img/avatars/real11.jpg",
+        "res/img/avatars/real12.jpg",
+        "res/img/avatars/real13.jpg",
+        "res/img/avatars/real14.jpg",
+        "res/img/avatars/real15.jpeg",
+        "res/img/avatars/real16.jpg",
+        "res/img/avatars/real17.jpg",
+        "res/img/avatars/real18.jpg",
+        "res/img/avatars/real19.jpeg",
+        "res/img/avatars/real2.jpg",
+        "res/img/avatars/real20.jpg",
+        "res/img/avatars/real21.jpg",
+        "res/img/avatars/real22.jpg",
+        "res/img/avatars/real23.jpg",
+        "res/img/avatars/real24.jpg",
+        "res/img/avatars/real25.jpg",
+        "res/img/avatars/real26.jpg",
+        "res/img/avatars/real27.jpg",
+        "res/img/avatars/real28.jpeg",
+        "res/img/avatars/real29.jpg",
+        "res/img/avatars/real3.jpeg",
+        "res/img/avatars/real4.jpg",
+        "res/img/avatars/real5.jpg",
+        "res/img/avatars/real6.jpeg",
+        "res/img/avatars/real7.jpg",
+        "res/img/avatars/real8.jpeg",
+        "res/img/avatars/real9.jpg",
+        "res/img/like.png",
+        "res/img/reply.png",
+        "res/img/retweet.png",
+        "res/img/trump.jpg",
+        "res/img/verified.png"
+      ],
+      "id": "casavant.jeff.trumptweet",
+      "license": "MIT",
+      "main_class": "TrumpTweetPlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "trumptweet"
+      ],
+      "version": "1.1.2"
+    }
+  },
+  "twilio": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/jeffcasavant/MaubotTwilio/releases",
+        "description": "Maubot-based SMS bridge.",
+        "downloadPage": "https://github.com/jeffcasavant/MaubotTwilio/releases",
+        "homepage": "https://github.com/jeffcasavant/MaubotTwilio"
+      }
+    },
+    "github": {
+      "hash": "sha256-b1M9+uXVq3yb4IgcoL/5YqRZ8a13HfyqMw6QFBuBLAM=",
+      "owner": "jeffcasavant",
+      "repo": "MaubotTwilio",
+      "rev": "0.1.0"
+    },
+    "manifest": {
+      "database": true,
+      "dependencies": [
+        "maubot==0.1.0b1",
+        "mautrix==0.5.0b2"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.casavant.jeff.twilio",
+      "license": "MIT",
+      "main_class": "TwilioPlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "twilio_plugin"
+      ],
+      "version": "0.1.0",
+      "webapp": true
+    }
+  },
+  "urban": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/dvdgsng/UrbanMaubot/releases",
+        "description": "A bot that fetches definitions from [Urban Dictionary](https://www.urbandictionary.com/).",
+        "downloadPage": "https://github.com/dvdgsng/UrbanMaubot/releases",
+        "homepage": "https://github.com/dvdgsng/UrbanMaubot"
+      }
+    },
+    "github": {
+      "hash": "sha256-JQ2PpsH/Nno7XqcF1HpZHM/Qv/gta/xGPjfIKtY+pxM=",
+      "owner": "dvdgsng",
+      "repo": "UrbanMaubot",
+      "rev": "1.0.2"
+    },
+    "manifest": {
+      "id": "com.dvdgsng.maubot.urban",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "UrbanDictBot",
+      "modules": [
+        "urban"
+      ],
+      "version": "1.0.2"
+    }
+  },
+  "urlpreview": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/coffeebank/coffee-maubot/releases",
+        "description": "Add URL preview embeds to Matrix! A bot that responds to links with a link preview embed, using Matrix API to fetch meta tags. Supports fetching JSON previews.",
+        "downloadPage": "https://github.com/coffeebank/coffee-maubot/releases",
+        "homepage": "https://github.com/coffeebank/coffee-maubot/tree/master/urlpreview"
+      },
+      "postPatch": "cd urlpreview"
+    },
+    "github": {
+      "hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
+      "owner": "coffeebank",
+      "repo": "coffee-maubot",
+      "rev": "b25112508d65f7560910e67d3074dd60f4048821"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "coffee.maubot.urlpreview",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "UrlPreviewBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "urlpreview"
+      ],
+      "version": "0.3.4.26"
+    }
+  },
+  "weather": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/kellya/maubot-weather/blob/v0.4.1/CHANGELOG.md",
+        "description": "A bot to get the weather from wttr.in and return a single line of text for the location specified.",
+        "downloadPage": "https://github.com/kellya/maubot-weather/releases",
+        "homepage": "https://github.com/kellya/maubot-weather"
+      }
+    },
+    "github": {
+      "hash": "sha256-DHMsemVbiXONeg45IpeaP477fbgkftz5mZdI6OhRHOI=",
+      "owner": "kellya",
+      "repo": "maubot-weather",
+      "rev": "v0.4.1"
+    },
+    "manifest": {
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "com.arachnitech.weather",
+      "license": "MIT",
+      "main_class": "WeatherBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "weather"
+      ],
+      "version": "0.4.1"
+    }
+  },
+  "webhook": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/jkhsjdhjs/maubot-webhook/releases",
+        "description": "Send messages to rooms via user-defined webhooks.",
+        "downloadPage": "https://github.com/jkhsjdhjs/maubot-webhook/releases",
+        "homepage": "https://github.com/jkhsjdhjs/maubot-webhook"
+      }
+    },
+    "github": {
+      "hash": "sha256-GGbd7PvW2P0u1h7Cp1GMuEg3uQ0osZBWWHzSW524aBc=",
+      "owner": "jkhsjdhjs",
+      "repo": "maubot-webhook",
+      "rev": "v0.2.0"
+    },
+    "manifest": {
+      "config": true,
+      "dependencies": [
+        "Jinja2~=3.1"
+      ],
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "me.jkhsjdhjs.maubot.webhook",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "WebhookPlugin",
+      "maubot": "0.3.1",
+      "modules": [
+        "plugin"
+      ],
+      "version": "0.2.0",
+      "webapp": true
+    }
+  },
+  "welcome": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/williamkray/maubot-welcome/releases",
+        "description": "A plugin that greets new people with a configurable message when they join a room.",
+        "downloadPage": "https://github.com/williamkray/maubot-welcome/releases",
+        "homepage": "https://github.com/williamkray/maubot-welcome"
+      }
+    },
+    "github": {
+      "hash": "sha256-8BIDj/kHys/Pw1n1lLtxjYOstI/UG5UAlxD+3rpKj0Q=",
+      "owner": "williamkray",
+      "repo": "maubot-welcome",
+      "rev": "a6d3e6cbea87056a1d4694f5379c9ae9d9cdf1c5"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "org.jobmachine.welcome",
+      "license": "MIT",
+      "main_class": "Greeter",
+      "maubot": "0.1.0",
+      "modules": [
+        "welcome"
+      ],
+      "version": "0.0.4"
+    }
+  },
+  "wolframalpha": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/ggogel/WolframAlphaMaubot/releases",
+        "description": "A bot that allows requesting information from [WolframAlpha](https://www.wolframalpha.com/).",
+        "downloadPage": "https://github.com/ggogel/WolframAlphaMaubot/releases",
+        "homepage": "https://github.com/ggogel/WolframAlphaMaubot"
+      }
+    },
+    "github": {
+      "hash": "sha256-2GJPAHc9xY7uznALpjzxkpAX16PBxMMSl3QMzjudA+w=",
+      "owner": "ggogel",
+      "repo": "WolframAlphaMaubot",
+      "rev": "v0.0.4"
+    },
+    "manifest": {
+      "database": false,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "me.gogel.maubot.wolframalpha",
+      "license": "MIT",
+      "main_class": "WolframAlphaPlugin",
+      "maubot": "0.1.0",
+      "modules": [
+        "wolframalpha"
+      ],
+      "version": "0.0.4"
+    }
+  },
+  "xkcd": {
+    "attrs": {
+      "meta": {
+        "changelog": "https://github.com/maubot/xkcd/releases",
+        "description": "A bot to view xkcd comics.",
+        "downloadPage": "https://github.com/maubot/xkcd/releases",
+        "homepage": "https://github.com/maubot/xkcd"
+      }
+    },
+    "github": {
+      "hash": "sha256-dtst/QuIZrMjk5RdbXjTksCbGwf8HCBsECDWtp70W1U=",
+      "owner": "maubot",
+      "repo": "xkcd",
+      "rev": "v1.2.0"
+    },
+    "isOfficial": true,
+    "manifest": {
+      "config": true,
+      "database": true,
+      "extra_files": [
+        "base-config.yaml"
+      ],
+      "id": "xyz.maubot.xkcd",
+      "license": "AGPL-3.0-or-later",
+      "main_class": "XKCDBot",
+      "maubot": "0.1.0",
+      "modules": [
+        "xkcd"
+      ],
+      "soft_dependencies": [
+        "python-magic>=0.4",
+        "Pillow>=5.1"
+      ],
+      "version": "1.2.0"
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/tools/networking/maubot/plugins/generated.nix b/nixpkgs/pkgs/tools/networking/maubot/plugins/generated.nix
new file mode 100644
index 000000000000..241151eb6ca0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maubot/plugins/generated.nix
@@ -0,0 +1,74 @@
+{ lib
+, fetchgit
+, fetchFromGitHub
+, fetchFromGitLab
+, fetchFromGitea
+, python3
+, poetry
+, buildMaubotPlugin
+}:
+
+let
+  json = builtins.fromJSON (builtins.readFile ./generated.json);
+in
+
+lib.flip builtins.mapAttrs json (name: entry:
+let
+  inherit (entry) manifest;
+
+  resolveDeps = deps: map
+    (name:
+      let
+        packageName = builtins.head (builtins.match "([^~=<>]*).*" name);
+        lower = lib.toLower packageName;
+        dash = builtins.replaceStrings ["_"] ["-"] packageName;
+        lowerDash = builtins.replaceStrings ["_"] ["-"] lower;
+      in
+        python3.pkgs.${packageName}
+        or python3.pkgs.${lower}
+        or python3.pkgs.${dash}
+        or python3.pkgs.${lowerDash}
+        or null)
+    (builtins.filter (x: x != "maubot" && x != null) deps);
+
+  reqDeps = resolveDeps (lib.toList (manifest.dependencies or null));
+  optDeps = resolveDeps (lib.toList (manifest.soft_dependencies or null));
+in
+
+lib.makeOverridable buildMaubotPlugin (entry.attrs // {
+  pname = manifest.id;
+  inherit (manifest) version;
+
+  src =
+    if entry?github then fetchFromGitHub entry.github
+    else if entry?git then fetchgit entry.git
+    else if entry?gitlab then fetchFromGitLab entry.gitlab
+    else if entry?gitea then fetchFromGitea entry.gitea
+    else throw "Invalid generated entry for ${manifest.id}: missing source";
+
+  propagatedBuildInputs = builtins.filter (x: x != null) (reqDeps ++ optDeps);
+
+  passthru.isOfficial = entry.isOfficial or false;
+
+  meta = entry.attrs.meta // {
+    license =
+      let
+        spdx = entry.attrs.meta.license or manifest.license or "unfree";
+        spdxLicenses = builtins.listToAttrs
+          (map (x: lib.nameValuePair x.spdxId x) (builtins.filter (x: x?spdxId) (builtins.attrValues lib.licenses)));
+      in
+      spdxLicenses.${spdx};
+    broken = builtins.any (x: x == null) reqDeps;
+  };
+} // lib.optionalAttrs (entry.isPoetry or false) {
+  nativeBuildInputs = [
+    poetry
+    (python3.withPackages (p: with p; [ toml ruamel-yaml isort ]))
+  ];
+
+  preBuild = lib.optionalString (entry?attrs.preBuild) (entry.attrs.preBuild + "\n") + ''
+    export HOME=$(mktemp -d)
+    [[ ! -d scripts ]] || patchShebangs --build scripts
+    make maubot.yaml
+  '';
+}))
diff --git a/nixpkgs/pkgs/tools/networking/maubot/plugins/update.py b/nixpkgs/pkgs/tools/networking/maubot/plugins/update.py
new file mode 100755
index 000000000000..a430753870fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maubot/plugins/update.py
@@ -0,0 +1,200 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p git nurl "(python3.withPackages (ps: with ps; [ toml gitpython requests ruamel-yaml ]))"
+
+import git
+import json
+import os
+import subprocess
+import ruamel.yaml
+import sys
+import toml
+import zipfile
+
+from typing import Dict, List
+
+HOSTNAMES = {
+    'git.skeg1.se': 'gitlab',
+    'edugit.org': 'gitlab',
+    'codeberg.org': 'gitea',
+}
+PLUGINS: Dict[str, dict] = {}
+
+yaml = ruamel.yaml.YAML(typ='safe')
+
+TMP = os.environ.get('TEMPDIR', '/tmp')
+
+def process_repo(path: str, official: bool):
+    global PLUGINS
+    with open(path, 'rt') as f:
+        data = yaml.load(f)
+    name, repourl, license, desc = data['name'], data['repo'], data['license'], data['description']
+    origurl = repourl
+    if '/' in name or ' ' in name:
+        name = os.path.split(path)[-1].removesuffix('.yaml')
+    name = name.replace('_', '-')
+    if name in PLUGINS.keys():
+        raise ValueError(f'Duplicate plugin {name}, refusing to continue')
+    repodir = os.path.join(TMP, 'maubot-plugins', name)
+    plugindir = repodir
+    if '/tree/' in repourl:
+        repourl, rev_path = repourl.split('/tree/')
+        rev, subdir = rev_path.strip('/').split('/')
+        plugindir = os.path.join(plugindir, subdir)
+    else:
+        rev = None
+        subdir = None
+
+    if repourl.startswith('http:'):
+        repourl = 'https' + repourl[4:]
+    repourl = repourl.rstrip('/')
+    if not os.path.exists(repodir):
+        print('Fetching', name)
+        repo = git.Repo.clone_from(repourl + '.git', repodir)
+    else:
+        repo = git.Repo(repodir)
+    tags = sorted(repo.tags, key=lambda t: t.commit.committed_datetime)
+    tags = list(filter(lambda x: 'rc' not in str(x), tags))
+    if tags:
+        repo.git.checkout(tags[-1])
+        rev = str(tags[-1])
+    else:
+        rev = str(repo.commit('HEAD'))
+    ret: dict = {'attrs':{}}
+    if subdir:
+        ret['attrs']['postPatch'] = f'cd {subdir}'
+    domain, query = repourl.removeprefix('https://').split('/', 1)
+    hash = subprocess.run([
+        'nurl',
+        '--hash',
+        f'file://{repodir}',
+        rev
+    ], capture_output=True, check=True).stdout.decode('utf-8')
+    ret['attrs']['meta'] = {
+        'description': desc,
+        'homepage': origurl,
+    }
+    if domain.endswith('github.com'):
+        owner, repo = query.split('/')
+        ret['github'] = {
+            'owner': owner,
+            'repo': repo,
+            'rev': rev,
+            'hash': hash,
+        }
+        ret['attrs']['meta']['downloadPage'] = f'{repourl}/releases'
+        ret['attrs']['meta']['changelog'] = f'{repourl}/releases'
+        repobase = f'{repourl}/blob/{rev}'
+    elif HOSTNAMES.get(domain, 'gitea' if 'gitea.' in domain or 'forgejo.' in domain else None) == 'gitea':
+        owner, repo = query.split('/')
+        ret['gitea'] = {
+            'domain': domain,
+            'owner': owner,
+            'repo': repo,
+            'rev': rev,
+            'hash': hash,
+        }
+        repobase = f'{repourl}/src/commit/{rev}'
+        ret['attrs']['meta']['downloadPage'] = f'{repourl}/releases'
+        ret['attrs']['meta']['changelog'] = f'{repourl}/releases'
+    elif HOSTNAMES.get(domain, 'gitlab' if 'gitlab.' in domain else None) == 'gitlab':
+        owner, repo = query.split('/')
+        ret['gitlab'] = {
+            'owner': owner,
+            'repo': repo,
+            'rev': rev,
+            'hash': hash,
+        }
+        if domain != 'gitlab.com':
+            ret['gitlab']['domain'] = domain
+        repobase = f'{repourl}/-/blob/{rev}'
+    else:
+        raise ValueError(f'Is {domain} Gitea or Gitlab, or something else? Please specify in the Python script!')
+    if os.path.exists(os.path.join(plugindir, 'CHANGELOG.md')):
+        ret['attrs']['meta']['changelog'] = f'{repobase}/CHANGELOG.md'
+    if os.path.exists(os.path.join(plugindir, 'maubot.yaml')):
+        with open(os.path.join(plugindir, 'maubot.yaml'), 'rt') as f:
+            ret['manifest'] = yaml.load(f)
+    elif os.path.exists(os.path.join(plugindir, 'pyproject.toml')):
+        ret['isPoetry'] = True
+        with open(os.path.join(plugindir, 'pyproject.toml'), 'rt') as f:
+            data = toml.load(f)
+        deps = []
+        for key, val in data['tool']['poetry'].get('dependencies', {}).items():
+            if key in ['maubot', 'mautrix', 'python']:
+                continue
+            reqs = []
+            for req in val.split(','):
+                reqs.extend(poetry_to_pep(req))
+            deps.append(key + ', '.join(reqs))
+        ret['manifest'] = data['tool']['maubot']
+        ret['manifest']['id'] = data['tool']['poetry']['name']
+        ret['manifest']['version'] = data['tool']['poetry']['version']
+        ret['manifest']['license'] = data['tool']['poetry']['license']
+        if deps:
+            ret['manifest']['dependencies'] = deps
+    else:
+        raise ValueError(f'No maubot.yaml or pyproject.toml found in {repodir}')
+    # normalize non-spdx-conformant licenses this way
+    # (and fill out missing license info)
+    if 'license' not in ret['manifest'] or ret['manifest']['license'] in ['GPLv3', 'AGPL 3.0']:
+        ret['attrs']['meta']['license'] = license
+    elif ret['manifest']['license'] != license:
+        print(f"Warning: licenses for {repourl} don't match! {ret['manifest']['license']} != {license}")
+    if official:
+        ret['isOfficial'] = official
+    PLUGINS[name] = ret
+
+def next_incomp(ver_s: str) -> str:
+    ver = ver_s.split('.')
+    zero = False
+    for i in range(len(ver)):
+        try:
+            seg = int(ver[i])
+        except ValueError:
+            if zero:
+                ver = ver[:i]
+                break
+            continue
+        if zero:
+            ver[i] = '0'
+        elif seg:
+            ver[i] = str(seg + 1)
+            zero = True
+    return '.'.join(ver)
+
+def poetry_to_pep(ver_req: str) -> List[str]:
+    if '*' in ver_req:
+        raise NotImplementedError('Wildcard poetry versions not implemented!')
+    if ver_req.startswith('^'):
+        return ['>=' + ver_req[1:], '<' + next_incomp(ver_req[1:])]
+    if ver_req.startswith('~'):
+        return ['~=' + ver_req[1:]]
+    return [ver_req]
+
+def main():
+    cache_path = os.path.join(TMP, 'maubot-plugins')
+    if not os.path.exists(cache_path):
+        os.makedirs(cache_path)
+        git.Repo.clone_from('https://github.com/maubot/plugins.maubot.xyz', os.path.join(cache_path, '_repo'))
+    else:
+        pass
+
+    repodir = os.path.join(cache_path, '_repo')
+
+    for suffix, official in (('official', True), ('thirdparty', False)):
+        directory = os.path.join(repodir, 'data', 'plugins', suffix)
+        for plugin_name in os.listdir(directory):
+            process_repo(os.path.join(directory, plugin_name), official)
+
+    if os.path.isdir('pkgs/tools/networking/maubot/plugins'):
+        generated = 'pkgs/tools/networking/maubot/plugins/generated.json'
+    else:
+        script_dir = os.path.dirname(os.path.realpath(__file__))
+        generated = os.path.join(script_dir, 'generated.json')
+
+    with open(generated, 'wt') as file:
+        json.dump(PLUGINS, file, indent='  ', separators=(',', ': '), sort_keys=True)
+        file.write('\n')
+
+if __name__ == '__main__':
+    main()
diff --git a/nixpkgs/pkgs/tools/networking/maubot/wrapper.nix b/nixpkgs/pkgs/tools/networking/maubot/wrapper.nix
new file mode 100644
index 000000000000..6f4c577110be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maubot/wrapper.nix
@@ -0,0 +1,70 @@
+{ lib
+, symlinkJoin
+, runCommand
+, unwrapped
+, python3
+, formats
+}:
+
+let wrapper = { pythonPackages ? (_: [ ]), plugins ? (_: [ ]), baseConfig ? null }:
+  let
+    plugins' = plugins unwrapped.plugins;
+    extraPythonPackages = builtins.concatLists (map (p: p.propagatedBuildInputs or [ ]) plugins');
+  in
+  symlinkJoin {
+    name = "${unwrapped.pname}-with-plugins-${unwrapped.version}";
+
+    inherit unwrapped;
+    paths = lib.optional (baseConfig != null) unwrapped ++ plugins';
+    pythonPath = lib.optional (baseConfig == null) unwrapped ++ pythonPackages python3.pkgs ++ extraPythonPackages;
+
+    nativeBuildInputs = [ python3.pkgs.wrapPython ];
+
+    postBuild = ''
+      rm -f $out/nix-support/propagated-build-inputs
+      rmdir $out/nix-support || true
+      ${lib.optionalString (baseConfig != null) ''
+        rm $out/${python3.sitePackages}/maubot/example-config.yaml
+        substituteAll ${(formats.yaml { }).generate "example-config.yaml" (lib.recursiveUpdate baseConfig {
+          plugin_directories = lib.optionalAttrs (plugins' != []) {
+            load = [ "@out@/lib/maubot-plugins" ] ++ (baseConfig.plugin_directories.load or []);
+          };
+          # Normally it should be set to false by default to take it from package
+          # root, but aiohttp doesn't follow symlinks when serving static files
+          # unless follow_symlinks=True is passed. Instead of patching maubot, use
+          # this non-invasive approach
+          # XXX: would patching maubot be better? See:
+          # https://github.com/maubot/maubot/blob/75879cfb9370aade6fa0e84e1dde47222625139a/maubot/server.py#L106
+          server.override_resource_path =
+            if builtins.isNull (baseConfig.server.override_resource_path or null)
+            then "${unwrapped}/${python3.sitePackages}/maubot/management/frontend/build"
+            else baseConfig.server.override_resource_path;
+        })} $out/${python3.sitePackages}/maubot/example-config.yaml
+        rm -rf $out/bin
+      ''}
+      mkdir -p $out/bin
+      cp $unwrapped/bin/.mbc-wrapped $out/bin/mbc
+      cp $unwrapped/bin/.maubot-wrapped $out/bin/maubot
+      wrapPythonProgramsIn "$out/bin" "${lib.optionalString (baseConfig != null) "$out "}$pythonPath"
+    '';
+
+    passthru = {
+      inherit unwrapped;
+      python = python3;
+      withPythonPackages = filter: wrapper {
+        pythonPackages = pkgs: pythonPackages pkgs ++ filter pkgs;
+        inherit plugins baseConfig;
+      };
+      withPlugins = filter: wrapper {
+        plugins = pkgs: plugins pkgs ++ filter pkgs;
+        inherit pythonPackages baseConfig;
+      };
+      withBaseConfig = baseConfig: wrapper {
+        inherit baseConfig pythonPackages plugins;
+      };
+    };
+
+    meta.priority = (unwrapped.meta.priority or 0) - 1;
+  };
+in
+wrapper
diff --git a/nixpkgs/pkgs/tools/networking/mbidled/default.nix b/nixpkgs/pkgs/tools/networking/mbidled/default.nix
new file mode 100644
index 000000000000..9e07d1afbe21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mbidled/default.nix
@@ -0,0 +1,40 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, meson
+, ninja
+, libev
+, openssl
+}:
+stdenv.mkDerivation {
+  pname = "mbidled";
+  version = "unstable-2022-10-30";
+
+  src = fetchFromGitHub {
+    owner = "zsugabubus";
+    repo = "mbidled";
+    rev = "b06152f015a470876b042e538804ebb1ac247c09";
+    sha256 = "sha256-eHm10onJ7v6fhvJiGXZhuN3c9cj+NoVIW2XQb2fdmuA=";
+  };
+
+  preConfigure = ''
+    export LIBRARY_PATH=${libev}/lib
+  '';
+
+  nativeBuildInputs = [
+    meson ninja
+  ];
+
+  buildInputs = [
+    libev openssl
+  ];
+
+  meta = with lib; {
+    description = "run command on mailbox change";
+    homepage = "https://github.com/zsugabubus/mbidled";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ laalsaas ];
+    platforms = platforms.linux;
+    mainProgram = "mbidled";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mcrcon/default.nix b/nixpkgs/pkgs/tools/networking/mcrcon/default.nix
new file mode 100644
index 000000000000..c9f9f81a3ddf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mcrcon/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "mcrcon";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "Tiiffi";
+    repo = "mcrcon";
+    rev = "v${version}";
+    sha256 = "sha256-cedeKsZgEyu0jqN4kBSgMJzFNUfCVXCEwH3M54miSG4=";
+  };
+
+  buildPhase = ''
+    $CC mcrcon.c -o mcrcon
+  '';
+
+  installPhase = ''
+    install -Dm 755 mcrcon $out/bin/mcrcon
+  '';
+
+  meta = {
+    homepage = "https://bukkit.org/threads/admin-rcon-mcrcon-remote-connection-client-for-minecraft-servers.70910/";
+    description = "Minecraft console client with Bukkit coloring support";
+    longDescription = ''
+      Mcrcon is a powerful Minecraft RCON terminal client with Bukkit coloring support.
+      It is well suited for remote administration and to be used as part of automated server maintenance scripts.
+      It does not trigger "IO: Broken pipe" or "IO: Connection reset" spam bugs on the server side.
+    '';
+    maintainers = with lib.maintainers; [ dermetfan ];
+    license = with lib.licenses; [ zlib libpng ];
+    mainProgram = "mcrcon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mdk4/default.nix b/nixpkgs/pkgs/tools/networking/mdk4/default.nix
new file mode 100644
index 000000000000..53713f473a16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mdk4/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, libnl, libpcap, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "mdk4";
+  version = "unstable-2021-04-27";
+
+  src = fetchFromGitHub {
+    owner = "aircrack-ng";
+    repo = "mdk4";
+    rev = "e94422ce8e4b8dcd132d658345814df7e63bfa41";
+    sha256 = "sha256-pZS7HQBKlSZJGqoZlSyBUzXC3osswcB56cBzgm+Sbwg=";
+  };
+
+  preBuild = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man
+
+    substituteInPlace src/Makefile --replace '/usr/local/src/mdk4' '$out'
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libnl libpcap ];
+
+  makeFlags = [ "PREFIX=$(out)" "SBINDIR=$(PREFIX)/bin" ];
+
+  meta = with lib; {
+    description = "A tool that injects data into wireless networks";
+    homepage = "https://github.com/aircrack-ng/mdk4";
+    maintainers = with maintainers; [ moni ];
+    license = licenses.gpl2Plus;
+    mainProgram = "mdk4";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/meek/default.nix b/nixpkgs/pkgs/tools/networking/meek/default.nix
new file mode 100644
index 000000000000..bb6209827883
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/meek/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildGoModule
+, fetchFromGitLab
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "meek";
+  version = "0.38.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.torproject.org";
+    group = "tpo";
+    owner = "anti-censorship/pluggable-transports";
+    repo = "meek";
+    rev = "v${version}";
+    sha256 = "sha256-zmIRXrHWrEzR+RcX/gkuqw2oBmyGoXDQ45ZjA4vwGSs=";
+  };
+
+  vendorHash = "sha256-eAO6vEPKqWWZkmJXmOCeTa7TE8opynYvvxzPDSe9p+I=";
+
+  subPackages = [
+    "meek-client"
+    "meek-server"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage doc/meek-client.1
+    installManPage doc/meek-server.1
+  '';
+
+  meta = with lib; {
+    description = "Blocking-resistant pluggable transport for Tor";
+    longDescription = ''
+      meek is a blocking-resistant pluggable transport for Tor. It encodes a
+      data stream as a sequence of HTTPS requests and responses. Requests are
+      reflected through a hard-to-block third-party web server in order to
+      avoid talking directly to a Tor bridge. HTTPS encryption hides
+      fingerprintable byte patterns in Tor traffic.
+    '';
+    homepage = "https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/meek";
+    maintainers = with maintainers; [ doronbehar ];
+    license = licenses.cc0;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/megatools/default.nix b/nixpkgs/pkgs/tools/networking/megatools/default.nix
new file mode 100644
index 000000000000..2fbd7e88466b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/megatools/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchgit
+, asciidoc
+, docbook_xml_dtd_45
+, docbook2x
+, libxml2
+, meson
+, ninja
+, pkg-config
+, curl
+, glib
+, fuse
+}:
+
+stdenv.mkDerivation rec {
+  pname = "megatools";
+  version = "1.11.0";
+
+  src = fetchgit {
+    url = "https://megous.com/git/megatools";
+    rev = version;
+    sha256 = "sha256-Q9hMJBQBenufubbmeAw8Q8w+Oo+UcZLWathKNDwTv3s=";
+  };
+
+  nativeBuildInputs = [
+    asciidoc
+    docbook_xml_dtd_45
+    docbook2x
+    libxml2
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    glib
+  ] ++ lib.optionals stdenv.isLinux [ fuse ];
+
+  enableParallelBuilding = true;
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "Command line client for Mega.co.nz";
+    homepage = "https://megatools.megous.com/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ viric AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/memtier-benchmark/default.nix b/nixpkgs/pkgs/tools/networking/memtier-benchmark/default.nix
new file mode 100644
index 000000000000..d77ef2d417d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/memtier-benchmark/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, pkg-config, libevent, pcre, zlib, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "memtier-benchmark";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner  = "redislabs";
+    repo   = "memtier_benchmark";
+    rev    = "refs/tags/${version}";
+    sha256 = "sha256-3KFBj+Cj5qO5k1hy5oSvtXdtTZIbGPJ1fhmnIeCW2s8=";
+  };
+
+  patchPhase = ''
+    substituteInPlace ./configure.ac \
+      --replace '1.2.8' '${version}'
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libevent pcre zlib openssl ];
+
+  meta = {
+    description = "Redis and Memcached traffic generation and benchmarking tool";
+    homepage    = "https://github.com/redislabs/memtier_benchmark";
+    license     = lib.licenses.gpl2;
+    platforms   = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ thoughtpolice ];
+    mainProgram = "memtier_benchmark";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/minidlna/default.nix b/nixpkgs/pkgs/tools/networking/minidlna/default.nix
new file mode 100644
index 000000000000..6bdea670c13b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/minidlna/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchgit, autoreconfHook, ffmpeg, flac, libvorbis, libogg, libid3tag, libexif, libjpeg, sqlite, gettext, nixosTests, zlib }:
+
+let
+  pname = "minidlna";
+  version = "1.3.3";
+in
+stdenv.mkDerivation {
+  inherit pname version;
+
+  src = fetchgit {
+    url = "https://git.code.sf.net/p/${pname}/git";
+    rev = "v${builtins.replaceStrings [ "." ] [ "_" ] version}";
+    hash = "sha256-InsSguoGi1Gp8R/bd4/c16xqRuk0bRsgw7wvcbokgKo=";
+  };
+
+  preConfigure = ''
+    export makeFlags="INSTALLPREFIX=$out"
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ ffmpeg flac libvorbis libogg libid3tag libexif libjpeg sqlite gettext zlib ];
+
+  postInstall = ''
+    mkdir -p $out/share/man/man{5,8}
+    cp minidlna.conf.5 $out/share/man/man5
+    cp minidlnad.8 $out/share/man/man8
+  '';
+
+  passthru.tests = { inherit (nixosTests) minidlna; };
+
+  meta = with lib; {
+    description = "Media server software";
+    longDescription = ''
+      MiniDLNA (aka ReadyDLNA) is server software with the aim of being fully
+      compliant with DLNA/UPnP-AV clients.
+    '';
+    homepage = "https://sourceforge.net/projects/minidlna/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    mainProgram = "minidlnad";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/minio-client/default.nix b/nixpkgs/pkgs/tools/networking/minio-client/default.nix
new file mode 100644
index 000000000000..f05814f00f0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/minio-client/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub, nixosTests }:
+
+buildGoModule rec {
+  pname = "minio-client";
+  version = "2024-02-16T11-05-48Z";
+
+  src = fetchFromGitHub {
+    owner = "minio";
+    repo = "mc";
+    rev = "RELEASE.${version}";
+    sha256 = "sha256-Kqv48krXiDi/8QtCEpn0uGvuLS2P6BYAtSnY5sNrCQ0=";
+  };
+
+  vendorHash = "sha256-wxFhj+oqj5WV/UkPZlmeJHF2WC4oLlZOql1qgSFs+zU=";
+
+  subPackages = [ "." ];
+
+  patchPhase = ''
+    sed -i "s/Version.*/Version = \"${version}\"/g" cmd/build-constants.go
+    sed -i "s/ReleaseTag.*/ReleaseTag = \"RELEASE.${version}\"/g" cmd/build-constants.go
+    sed -i "s/CommitID.*/CommitID = \"${src.rev}\"/g" cmd/build-constants.go
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/mc --version | grep ${version} > /dev/null
+  '';
+
+  passthru.tests.minio = nixosTests.minio;
+
+  meta = with lib; {
+    homepage = "https://github.com/minio/mc";
+    description = "A replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage";
+    maintainers = with maintainers; [ bachp eelco ];
+    mainProgram = "mc";
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/minissdpd/default.nix b/nixpkgs/pkgs/tools/networking/minissdpd/default.nix
new file mode 100644
index 000000000000..b2a95972613b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/minissdpd/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, libnfnetlink }:
+
+stdenv.mkDerivation rec {
+  pname = "minissdpd";
+  version = "1.6.0";
+
+  src = fetchurl {
+    sha256 = "sha256-9MLepqRy4KXMncotxMH8NrpVOOrPjXk4JSkyUXJVRr0=";
+    url = "http://miniupnp.free.fr/files/download.php?file=${pname}-${version}.tar.gz";
+    name = "${pname}-${version}.tar.gz";
+  };
+
+  patches = [
+    ./makefile-install-dir.patch
+  ];
+
+  buildInputs = [ libnfnetlink ];
+
+  installFlags = [ "PREFIX=$(out)" "INSTALLPREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Small daemon to speed up UPnP device discoveries";
+    longDescription = ''
+      MiniSSDPd receives NOTIFY packets and stores (caches) that information
+      for later use by UPnP Control Points on the machine. MiniSSDPd receives
+      M-SEARCH packets and answers on behalf of the UPnP devices running on
+      the machine. Software must be patched in order to take advantage of
+      MiniSSDPd, and MiniSSDPd must be started before any other UPnP program.
+    '';
+    homepage = "http://miniupnp.free.fr/minissdpd.html";
+    downloadPage = "http://miniupnp.free.fr/files/";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    mainProgram = "minissdpd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/minissdpd/makefile-install-dir.patch b/nixpkgs/pkgs/tools/networking/minissdpd/makefile-install-dir.patch
new file mode 100644
index 000000000000..e887c28878a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/minissdpd/makefile-install-dir.patch
@@ -0,0 +1,15 @@
+diff --git a/Makefile b/Makefile
+index b14e2fa..4472598 100644
+--- a/Makefile
++++ b/Makefile
+@@ -74,8 +74,8 @@ install:	minissdpd
+ 	$(INSTALL) -d $(DESTDIR)$(MANINSTALLDIR)/man1
+ 	$(INSTALL) minissdpd.1 $(DESTDIR)$(MANINSTALLDIR)/man1/minissdpd.1
+ ifeq (, $(findstring darwin, $(OS)))
+-	$(INSTALL) -d $(DESTDIR)/etc/init.d
+-	$(INSTALL) minissdpd.init.d.script $(DESTDIR)/etc/init.d/minissdpd
++	$(INSTALL) -d $(DESTDIR)$(INSTALLPREFIX)/etc/init.d
++	$(INSTALL) minissdpd.init.d.script $(DESTDIR)$(INSTALLPREFIX)/etc/init.d/minissdpd
+ endif
+ 
+ check:	validateminissdpd validatecodelength
diff --git a/nixpkgs/pkgs/tools/networking/miniupnpc/default.nix b/nixpkgs/pkgs/tools/networking/miniupnpc/default.nix
new file mode 100644
index 000000000000..f1a639b72060
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/miniupnpc/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "miniupnpc";
+  version = "2.2.6";
+
+  src = fetchurl {
+    url = "https://miniupnp.tuxfamily.org/files/${pname}-${version}.tar.gz";
+    sha256 = "sha256-N/zZGVNQjD5i1pZLuP+8XUfz4TSB+lTmIU/MaHBMZvE=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  doCheck = !stdenv.isFreeBSD;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    chmod +x $out/lib/libminiupnpc${stdenv.hostPlatform.extensions.sharedLibrary}
+
+    # for some reason cmake does not install binaries and manpages
+    # https://github.com/miniupnp/miniupnp/issues/637
+    mkdir -p $out/bin
+    cp -a upnpc-static $out/bin/upnpc
+    cp -a ../external-ip.sh $out/bin/external-ip
+    mkdir -p $out/share/man
+    cp -a ../man3 $out/share/man
+  '';
+
+  meta = with lib; {
+    homepage = "https://miniupnp.tuxfamily.org/";
+    description = "A client that implements the UPnP Internet Gateway Device (IGD) specification";
+    platforms = with platforms; linux ++ freebsd ++ darwin;
+    license = licenses.bsd3;
+    mainProgram = "upnpc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/miniupnpd/default.nix b/nixpkgs/pkgs/tools/networking/miniupnpd/default.nix
new file mode 100644
index 000000000000..dabf5194f881
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/miniupnpd/default.nix
@@ -0,0 +1,87 @@
+{ stdenv, lib, fetchurl, iptables-legacy, libuuid, openssl, pkg-config
+, which, iproute2, gnused, coreutils, gnugrep, gawk, makeWrapper
+, nixosTests
+, firewall ? "iptables", nftables, libmnl, libnftnl
+}:
+
+let
+  scriptBinEnv = lib.makeBinPath {
+    iptables = [
+      # needed for dirname in ip{,6}tables_*.sh
+      coreutils
+      # used in miniupnpd_functions.sh:
+      which
+      iproute2
+      iptables-legacy
+      gnused
+      gnugrep
+      gawk
+    ];
+    nftables = [
+      # needed for dirname in nft_*.sh & cat in nft_init.sh
+      coreutils
+      # used in miniupnpd_functions.sh:
+      which
+      nftables
+    ];
+  }.${firewall};
+in
+stdenv.mkDerivation rec {
+  pname = "miniupnpd";
+  version = "2.3.4";
+
+  src = fetchurl {
+    url = "https://miniupnp.tuxfamily.org/files/miniupnpd-${version}.tar.gz";
+    sha256 = "sha256-5zAzSPyKxCfefwTw7rdX1J3Mg2cxHuJYJVLDj11toIo=";
+  };
+
+  buildInputs = [ iptables-legacy libuuid openssl ]
+    ++ lib.optionals (firewall == "nftables") [ libmnl libnftnl ];
+  nativeBuildInputs= [ pkg-config makeWrapper ];
+
+  # ./configure is not a standard configure file, errors with:
+  # Option not recognized : --prefix=
+  dontAddPrefix = true;
+  configureFlags = [
+    "--firewall=${firewall}"
+    # allow using various config options
+    "--ipv6"
+    "--leasefile"
+    "--regex"
+    "--vendorcfg"
+    # hardening
+    "--portinuse"
+  ];
+
+  installFlags = [ "PREFIX=$(out)" "INSTALLPREFIX=$(out)" ];
+
+  postFixup = {
+    # Ideally we'd prefer using system's config.firewall.package here for iptables,
+    # however for some reason switching --prefix to --suffix breaks the script
+    iptables = ''
+      for script in $out/etc/miniupnpd/ip{,6}tables_{init,removeall}.sh
+      do
+        wrapProgram $script --prefix PATH : '${scriptBinEnv}:$PATH'
+      done
+    '';
+    nftables = ''
+      for script in $out/etc/miniupnpd/nft_{delete_chain,flush,init,removeall}.sh
+      do
+        wrapProgram $script --suffix PATH : '${scriptBinEnv}:$PATH'
+      done
+    '';
+  }.${firewall};
+
+  passthru.tests = {
+    bittorrent-integration = nixosTests.bittorrent;
+    inherit (nixosTests) upnp;
+  };
+
+  meta = with lib; {
+    homepage = "https://miniupnp.tuxfamily.org/";
+    description = "A daemon that implements the UPnP Internet Gateway Device (IGD) specification";
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+    mainProgram = "miniupnpd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/miredo/default.nix b/nixpkgs/pkgs/tools/networking/miredo/default.nix
new file mode 100644
index 000000000000..d47485f22b1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/miredo/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, nettools, iproute2, judy }:
+
+stdenv.mkDerivation rec {
+  version = "1.2.6";
+  pname = "miredo";
+
+  buildInputs = [ judy ];
+
+  src = fetchurl {
+    url = "https://www.remlab.net/files/miredo/miredo-${version}.tar.xz";
+    sha256 = "0j9ilig570snbmj48230hf7ms8kvcwi2wblycqrmhh85lksd49ps";
+  };
+
+  postPatch = ''
+    substituteInPlace misc/client-hook.bsd \
+      --replace '/sbin/route' '${nettools}/bin/route' \
+      --replace '/sbin/ifconfig' '${nettools}/bin/ifconfig'
+    substituteInPlace misc/client-hook.iproute --replace '/sbin/ip' '${iproute2}/bin/ip'
+  '';
+
+  configureFlags = [ "--with-Judy" ];
+
+  postInstall = ''
+    rm -rf $out/lib/systemd $out/var $out/etc/miredo/miredo.conf
+  '';
+
+  meta = with lib; {
+    description = "Teredo IPv6 Tunneling Daemon";
+    homepage = "https://www.remlab.net/miredo/";
+    license = licenses.gpl2;
+    maintainers = [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mmsd-tng/default.nix b/nixpkgs/pkgs/tools/networking/mmsd-tng/default.nix
new file mode 100644
index 000000000000..8d8286774595
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mmsd-tng/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv
+, fetchFromGitLab
+, c-ares
+, dbus
+, glib
+, libphonenumber
+, libsoup
+, meson
+, mobile-broadband-provider-info
+, modemmanager
+, ninja
+, pkg-config
+, protobuf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mmsd-tng";
+  version = "1.12.1";
+
+  src = fetchFromGitLab {
+    owner = "kop316";
+    repo = "mmsd";
+    rev = version;
+    sha256 = "sha256-fhbiTJWmQwJpuMaVX2qWyWwJ/2Y/Vczo//+0T0b6jhA=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    c-ares
+    dbus
+    glib
+    libphonenumber
+    libsoup
+    mobile-broadband-provider-info
+    modemmanager
+    protobuf
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Multimedia Messaging Service Daemon - The Next Generation";
+    homepage = "https://gitlab.com/kop316/mmsd";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ julm ];
+    platforms = platforms.linux;
+    mainProgram = "mmsdtng";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mmsd/default.nix b/nixpkgs/pkgs/tools/networking/mmsd/default.nix
new file mode 100644
index 000000000000..f7ea7be22c08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mmsd/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv
+, fetchzip
+, autoreconfHook
+, pkg-config
+, glib
+, dbus
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mmsd";
+  version = "unstable-2019-07-15";
+
+  src = fetchzip {
+    url = "https://git.kernel.org/pub/scm/network/ofono/mmsd.git/snapshot/mmsd-f4b8b32477a411180be1823fdc460b4f7e1e3c9c.tar.gz";
+    sha256 = "0hcnpyhsi7b5m825dhnwbp65yi0961wi8mipzdvaw5nc693xv15b";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    glib
+    dbus
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Multimedia Messaging Service Daemon";
+    homepage = "https://01.org/ofono";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mockoon/default.nix b/nixpkgs/pkgs/tools/networking/mockoon/default.nix
new file mode 100644
index 000000000000..0a2670009cce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mockoon/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, appimageTools
+, fetchurl
+}:
+
+let
+  pname = "mockoon";
+  version = "6.1.0";
+
+  src = fetchurl {
+    url = "https://github.com/mockoon/mockoon/releases/download/v${version}/mockoon-${version}.AppImage";
+    hash = "sha256-harZU3TTIzfJoY/jAQI0dm7YSOr24Y9xk9L5ZaBLdD8=";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname version src;
+  };
+in
+
+appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+    install -Dm 444 ${appimageContents}/${pname}.desktop -t $out/share/applications
+    cp -r ${appimageContents}/usr/share/icons $out/share
+
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "The easiest and quickest way to run mock APIs locally";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    homepage = "https://mockoon.com";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "mockoon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/modemmanager/default.nix b/nixpkgs/pkgs/tools/networking/modemmanager/default.nix
new file mode 100644
index 000000000000..dd36f4b7465a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/modemmanager/default.nix
@@ -0,0 +1,103 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, glib
+, udev
+, libgudev
+, polkit
+, ppp
+, gettext
+, pkg-config
+, libxslt
+, python3
+, libmbim
+, libqmi
+, systemd
+, bash-completion
+, meson
+, ninja
+, vala
+, gobject-introspection
+, dbus
+}:
+
+stdenv.mkDerivation rec {
+  pname = "modemmanager";
+  version = "1.22.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "mobile-broadband";
+    repo = "ModemManager";
+    rev = version;
+    hash = "sha256-/D9b2rCCUhpDCUfSNAWR65+3EyUywzFdH1R17eSKRDo=";
+  };
+
+  patches = [
+    # Since /etc is the domain of NixOS, not Nix, we cannot install files there.
+    # But these are just placeholders so we do not need to install them at all.
+    ./no-dummy-dirs-in-sysconfdir.patch
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    gobject-introspection
+    gettext
+    pkg-config
+    libxslt
+  ];
+
+  buildInputs = [
+    glib
+    udev
+    libgudev
+    polkit
+    ppp
+    libmbim
+    libqmi
+    systemd
+    bash-completion
+    dbus
+  ];
+
+  nativeInstallCheckInputs = [
+    python3
+    python3.pkgs.dbus-python
+    python3.pkgs.pygobject3
+  ];
+
+  mesonFlags = [
+    "-Dudevdir=${placeholder "out"}/lib/udev"
+    "-Ddbus_policy_dir=${placeholder "out"}/share/dbus-1/system.d"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "-Dvapi=true"
+  ];
+
+  postPatch = ''
+    patchShebangs \
+      tools/test-modemmanager-service.py
+  '';
+
+  # In Nixpkgs g-ir-scanner is patched to produce absolute paths, and
+  # that interferes with ModemManager's tests, causing them to try to
+  # load libraries from the install path, which doesn't usually exist
+  # when `make check' is run.  So to work around that, we run it as an
+  # install check instead, when those paths will have been created.
+  doInstallCheck = true;
+  preInstallCheck = ''
+    export G_TEST_DBUS_DAEMON="${dbus}/bin/dbus-daemon"
+    patchShebangs tools/tests/test-wrapper.sh
+  '';
+  installCheckTarget = "check";
+
+  meta = with lib; {
+    description = "WWAN modem manager, part of NetworkManager";
+    homepage = "https://www.freedesktop.org/wiki/Software/ModemManager/";
+    license = licenses.gpl2Plus;
+    maintainers = teams.freedesktop.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/modemmanager/no-dummy-dirs-in-sysconfdir.patch b/nixpkgs/pkgs/tools/networking/modemmanager/no-dummy-dirs-in-sysconfdir.patch
new file mode 100644
index 000000000000..d293efa7b245
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/modemmanager/no-dummy-dirs-in-sysconfdir.patch
@@ -0,0 +1,20 @@
+diff --git a/data/dispatcher-connection/meson.build b/data/dispatcher-connection/meson.build
+index 2e7ef8b4..e0f4aa66 100644
+--- a/data/dispatcher-connection/meson.build
++++ b/data/dispatcher-connection/meson.build
+@@ -21,5 +21,4 @@ install_data(
+ )
+ 
+ mkdir_cmd = 'mkdir -p ${DESTDIR}@0@'
+-meson.add_install_script('sh', '-c', mkdir_cmd.format(mm_prefix / mm_connectiondiruser))
+ meson.add_install_script('sh', '-c', mkdir_cmd.format(mm_prefix / mm_connectiondirpackage))
+diff --git a/data/dispatcher-fcc-unlock/meson.build b/data/dispatcher-fcc-unlock/meson.build
+index 5dc3b6a0..25a948a1 100644
+--- a/data/dispatcher-fcc-unlock/meson.build
++++ b/data/dispatcher-fcc-unlock/meson.build
+@@ -39,5 +39,4 @@ foreach output, input: vidpids
+ endforeach
+ 
+ mkdir_cmd = 'mkdir -p ${DESTDIR}@0@'
+-meson.add_install_script('sh', '-c', mkdir_cmd.format(mm_prefix / mm_fccunlockdiruser))
+ meson.add_install_script('sh', '-c', mkdir_cmd.format(mm_prefix / mm_fccunlockdirpackage))
diff --git a/nixpkgs/pkgs/tools/networking/mole/default.nix b/nixpkgs/pkgs/tools/networking/mole/default.nix
new file mode 100644
index 000000000000..e5585be469fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mole/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "mole";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "davrodpin";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-JwLiuw00g2h5uqNmaqAbal0KCY6LwF2fcL2MrB1HBIc=";
+  };
+
+  vendorHash = "sha256-+y9JiQvDSQS5WQD4mVOMH3Oh9C4C/Kx3kC6q2SgSo+I=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/davrodpin/mole/cmd.version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "CLI application to create SSH tunnels";
+    homepage = "https://github.com/davrodpin/mole";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    broken = stdenv.isDarwin; # build fails with go > 1.17
+    mainProgram = "mole";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/moodle-dl/default.nix b/nixpkgs/pkgs/tools/networking/moodle-dl/default.nix
new file mode 100644
index 000000000000..f819fe819284
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/moodle-dl/default.nix
@@ -0,0 +1,31 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "moodle-dl";
+  version = "2.2.2.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-76JU/uYJH7nVWCR+d8vvjYCCSMfe/8R9l756AmzZPHU=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    sentry-sdk
+    colorama
+    yt-dlp
+    certifi
+    html2text
+    requests
+    aioxmpp
+  ];
+
+  # upstream has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/C0D3D3V/Moodle-Downloader-2";
+    maintainers = [ maintainers.kmein ];
+    description = "A Moodle downloader that downloads course content fast from Moodle";
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mosh/bash_completion_datadir.patch b/nixpkgs/pkgs/tools/networking/mosh/bash_completion_datadir.patch
new file mode 100644
index 000000000000..4b71f125d287
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mosh/bash_completion_datadir.patch
@@ -0,0 +1,19 @@
+diff --git a/configure.ac b/configure.ac
+index 3ad983d..ff8ff96 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -476,13 +476,7 @@ AS_IF([echo "$protobuf_LIBS" | grep -q -- -pthread],
+ 
+ # Bash completion needs to ask where it goes if >= 2.0 is installed.
+ AS_IF([test "$install_completion" != no],
+-  [PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0],
+-     [if test "$prefix" = "NONE"; then
+-        completions="`pkg-config --variable=completionsdir bash-completion`"
+-      else
+-        completions="`pkg-config --define-variable=prefix=$prefix --variable=completionsdir bash-completion`"
+-      fi],
+-     [completions="${sysconfdir}/bash_completion.d"])
++   [completions="`pkg-config --define-variable=datadir=$datadir --variable=completionsdir bash-completion`"]
+    AC_SUBST([completions])])
+ 
+ AC_CONFIG_FILES([
diff --git a/nixpkgs/pkgs/tools/networking/mosh/default.nix b/nixpkgs/pkgs/tools/networking/mosh/default.nix
new file mode 100644
index 000000000000..7a19275e4e2a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mosh/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchFromGitHub, zlib, protobuf, ncurses, pkg-config
+, makeWrapper, perl, openssl, autoreconfHook, openssh, bash-completion, fetchpatch
+, withUtempter ? stdenv.isLinux && !stdenv.hostPlatform.isMusl, libutempter }:
+
+stdenv.mkDerivation rec {
+  pname = "mosh";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mobile-shell";
+    repo = pname;
+    rev = "mosh-${version}";
+    hash = "sha256-tlSsHu7JnXO+sorVuWWubNUNdb9X0/pCaiGG5Y0X/g8=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config makeWrapper protobuf perl ];
+  buildInputs = [ protobuf ncurses zlib openssl bash-completion perl ]
+    ++ lib.optional withUtempter libutempter;
+
+  strictDeps = true;
+
+  enableParallelBuilding = true;
+
+  patches = [
+    ./ssh_path.patch
+    ./mosh-client_path.patch
+    # Fix build with bash-completion 2.10
+    ./bash_completion_datadir.patch
+
+    # Fixes build with protobuf3 23.x
+    (fetchpatch {
+      url = "https://github.com/mobile-shell/mosh/commit/eee1a8cf413051c2a9104e8158e699028ff56b26.patch";
+      hash = "sha256-CouLHWSsyfcgK3k7CvTK3FP/xjdb1pfsSXYYQj3NmCQ=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace scripts/mosh.pl \
+      --subst-var-by ssh "${openssh}/bin/ssh" \
+      --subst-var-by mosh-client "$out/bin/mosh-client"
+  '';
+
+  configureFlags = [ "--enable-completion" ]
+    ++ lib.optional withUtempter "--with-utempter";
+
+  postInstall = ''
+      wrapProgram $out/bin/mosh --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = with lib; {
+    homepage = "https://mosh.org/";
+    description = "Mobile shell (ssh replacement)";
+    longDescription = ''
+      Remote terminal application that allows roaming, supports intermittent
+      connectivity, and provides intelligent local echo and line editing of
+      user keystrokes.
+
+      Mosh is a replacement for SSH. It's more robust and responsive,
+      especially over Wi-Fi, cellular, and long-distance links.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mosh/mosh-client_path.patch b/nixpkgs/pkgs/tools/networking/mosh/mosh-client_path.patch
new file mode 100644
index 000000000000..327fb7af9260
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mosh/mosh-client_path.patch
@@ -0,0 +1,22 @@
+diff --git a/scripts/mosh.pl b/scripts/mosh.pl
+index 56e96d7..2a2177e 100755
+--- a/scripts/mosh.pl
++++ b/scripts/mosh.pl
+@@ -61,7 +61,7 @@ my $have_ipv6 = eval {
+ 
+ $|=1;
+ 
+-my $client = 'mosh-client';
++my $client = '@mosh-client@';
+ my $server = 'mosh-server';
+ 
+ my $predict = undef;
+@@ -91,7 +91,7 @@ my @cmdline = @ARGV;
+ my $usage =
+ qq{Usage: $0 [options] [--] [user@]host [command...]
+         --client=PATH        mosh client on local machine
+-                                (default: "mosh-client")
++                                (default: "@mosh-client@")
+         --server=COMMAND     mosh server on remote machine
+                                 (default: "mosh-server")
+ 
diff --git a/nixpkgs/pkgs/tools/networking/mosh/ssh_path.patch b/nixpkgs/pkgs/tools/networking/mosh/ssh_path.patch
new file mode 100644
index 000000000000..cb2a650718ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mosh/ssh_path.patch
@@ -0,0 +1,13 @@
+diff --git i/scripts/mosh.pl w/scripts/mosh.pl
+index c511482..55bf5f3 100755
+--- i/scripts/mosh.pl
++++ w/scripts/mosh.pl
+@@ -66,7 +66,7 @@ my $use_remote_ip = 'proxy';
+ my $family = 'prefer-inet';
+ my $port_request = undef;
+ 
+-my @ssh = ('ssh');
++my @ssh = ('@ssh@');
+ 
+ my $term_init = 1;
+ 
diff --git a/nixpkgs/pkgs/tools/networking/motrix/default.nix b/nixpkgs/pkgs/tools/networking/motrix/default.nix
new file mode 100644
index 000000000000..2270034ce5de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/motrix/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, appimageTools
+, fetchurl
+}:
+let
+  pname = "motrix";
+  version = "1.8.19";
+
+  src = fetchurl {
+    url = "https://github.com/agalwood/Motrix/releases/download/v${version}/Motrix-${version}.AppImage";
+    hash = "sha256-oSO+VH3bZcjnXjECqZgOmsvlOONbfgOq50qVLvHdKfo=";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname version src;
+  };
+in
+appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+    install -Dm 444 ${appimageContents}/${pname}.desktop -t $out/share/applications
+    cp -r ${appimageContents}/usr/share/icons $out/share
+
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "A full-featured download manager";
+    homepage = "https://motrix.app";
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "motrix";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mozillavpn/default.nix b/nixpkgs/pkgs/tools/networking/mozillavpn/default.nix
new file mode 100644
index 000000000000..1812dc690e18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mozillavpn/default.nix
@@ -0,0 +1,155 @@
+{ buildGoModule
+, cargo
+, cmake
+, fetchFromGitHub
+, go
+, lib
+, libcap
+, libgcrypt
+, libgpg-error
+, libsecret
+, pkg-config
+, polkit
+, python3
+, qt5compat
+, qtbase
+, qtnetworkauth
+, qtsvg
+, qttools
+, qtwebsockets
+, rustPlatform
+, rustc
+, stdenv
+, wireguard-tools
+, wrapQtAppsHook
+}:
+
+let
+  pname = "mozillavpn";
+  version = "2.19.0";
+  src = fetchFromGitHub {
+    owner = "mozilla-mobile";
+    repo = "mozilla-vpn-client";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-aXfxUtGm+vq8U3jYTxYhOP7UXL6ukCJgmGQO2Wsqobo=";
+  };
+  patches = [ ];
+
+  netfilterGoModules = (buildGoModule {
+    inherit pname version src patches;
+    modRoot = "linux/netfilter";
+    vendorHash = "sha256-Cmo0wnl0z5r1paaEf1MhCPbInWeoMhGjnxCxGh0cyO8=";
+  }).goModules;
+
+  extensionBridgeDeps = rustPlatform.fetchCargoTarball {
+    inherit src patches;
+    name = "${pname}-${version}-extension-bridge";
+    preBuild = "cd extension/bridge";
+    hash = "sha256-23GTXsbjL8qfGA5NdPlrbdaA8rg8vOZsZCXvevi7Chc=";
+  };
+  signatureDeps = rustPlatform.fetchCargoTarball {
+    inherit src patches;
+    name = "${pname}-${version}-signature";
+    preBuild = "cd signature";
+    hash = "sha256-TB172hVIilDTl+y0shNp55if+FhrXjWSaGNF7K6GSH8=";
+  };
+  qtgleanDeps = rustPlatform.fetchCargoTarball {
+    inherit src patches;
+    name = "${pname}-${version}-qtglean";
+    preBuild = "cd qtglean";
+    hash = "sha256-tfQ2ogSDDXNPeygBy+el+71iwcafSfY78hvYPHurKPE=";
+  };
+
+in
+stdenv.mkDerivation {
+  inherit pname version src patches;
+
+  buildInputs = [
+    libcap
+    libgcrypt
+    libgpg-error
+    libsecret
+    qt5compat
+    qtbase
+    qtnetworkauth
+    qtsvg
+    qtwebsockets
+  ];
+  nativeBuildInputs = [
+    cargo
+    cmake
+    go
+    pkg-config
+    python3
+    python3.pkgs.glean-parser
+    python3.pkgs.pyyaml
+    python3.pkgs.setuptools
+    qttools
+    rustPlatform.cargoSetupHook
+    rustc
+    wrapQtAppsHook
+  ];
+
+  postUnpack = ''
+    pushd source/extension/bridge
+    cargoDeps='${extensionBridgeDeps}' cargoSetupPostUnpackHook
+    extensionBridgeDepsCopy="$cargoDepsCopy"
+    popd
+
+    pushd source/signature
+    cargoDeps='${signatureDeps}' cargoSetupPostUnpackHook
+    signatureDepsCopy="$cargoDepsCopy"
+    popd
+
+    pushd source/qtglean
+    cargoDeps='${qtgleanDeps}' cargoSetupPostUnpackHook
+    qtgleanDepsCopy="$cargoDepsCopy"
+    popd
+  '';
+  dontCargoSetupPostUnpack = true;
+
+  postPatch = ''
+    substituteInPlace src/cmake/linux.cmake \
+      --replace '/etc/xdg/autostart' "$out/etc/xdg/autostart" \
+      --replace '/usr/share/dbus-1' "$out/share/dbus-1" \
+      --replace '${"$"}{SYSTEMD_UNIT_DIR}' "$out/lib/systemd/system"
+
+    substituteInPlace extension/CMakeLists.txt \
+      --replace '/etc' "$out/etc"
+
+    ln -s '${netfilterGoModules}' linux/netfilter/vendor
+
+    pushd extension/bridge
+    cargoDepsCopy="$extensionBridgeDepsCopy" cargoSetupPostPatchHook
+    popd
+
+    pushd signature
+    cargoDepsCopy="$signatureDepsCopy" cargoSetupPostPatchHook
+    popd
+
+    pushd qtglean
+    cargoDepsCopy="$qtgleanDepsCopy" cargoSetupPostPatchHook
+    popd
+
+    cargoSetupPostPatchHook() { true; }
+  '';
+
+  cmakeFlags = [
+    "-DQT_LCONVERT_EXECUTABLE=${qttools.dev}/bin/lconvert"
+    "-DQT_LUPDATE_EXECUTABLE=${qttools.dev}/bin/lupdate"
+    "-DQT_LRELEASE_EXECUTABLE=${qttools.dev}/bin/lrelease"
+  ];
+  dontFixCmake = true;
+
+  qtWrapperArgs =
+    [ "--prefix" "PATH" ":" (lib.makeBinPath [ wireguard-tools ]) ];
+
+  meta = {
+    description = "Client for the Mozilla VPN service";
+    homepage = "https://vpn.mozilla.org/";
+    license = lib.licenses.mpl20;
+    maintainers = with lib.maintainers; [ andersk ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mozwire/default.nix b/nixpkgs/pkgs/tools/networking/mozwire/default.nix
new file mode 100644
index 000000000000..40c6d3ec7827
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mozwire/default.nix
@@ -0,0 +1,34 @@
+{ rustPlatform
+, lib
+, stdenv
+, fetchFromGitHub
+, CoreServices
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "MozWire";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "NilsIrl";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-2i8C1XgfI3MXnwXZzY6n8tIcw45G9h3vZqRlFaVoLH0=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreServices
+    Security
+  ];
+
+  cargoHash = "sha256-YXVH7kx5CiurTeXiphjDgcYxxovKtTF3Q9y/XOyVPUA=";
+
+  meta = with lib; {
+    description = "MozillaVPN configuration manager giving Linux, macOS users (among others), access to MozillaVPN";
+    homepage = "https://github.com/NilsIrl/MozWire";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ siraben nilsirl ];
+    mainProgram = "mozwire";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mpack/build-fix.patch b/nixpkgs/pkgs/tools/networking/mpack/build-fix.patch
new file mode 100644
index 000000000000..0329bedd07f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mpack/build-fix.patch
@@ -0,0 +1,29 @@
+diff -ubr mpack-1.6-orig/unixos.c mpack-1.6/unixos.c
+--- mpack-1.6-orig/unixos.c	2013-08-17 14:32:38.102772775 +0200
++++ mpack-1.6/unixos.c	2013-08-17 14:32:43.180792505 +0200
+@@ -38,10 +38,6 @@
+ #define MAXHOSTNAMELEN 64
+ #endif
+ 
+-extern int errno;
+-extern char *malloc();
+-extern char *getenv();
+-
+ int overwrite_files = 0;
+ int didchat;
+ 
+Only in mpack-1.6: unixos.o
+Only in mpack-1.6: unixunpk.o
+Only in mpack-1.6: uudecode.o
+diff -ubr mpack-1.6-orig/xmalloc.c mpack-1.6/xmalloc.c
+--- mpack-1.6-orig/xmalloc.c	2013-08-17 14:32:38.102772775 +0200
++++ mpack-1.6/xmalloc.c	2013-08-17 14:33:08.900892319 +0200
+@@ -24,7 +24,6 @@
+  */
+ #include <stdio.h>
+ #include <string.h>
+-extern char *malloc(), *realloc();
+ 
+ char *xmalloc (int size)
+ {
+Only in mpack-1.6: xmalloc.o
diff --git a/nixpkgs/pkgs/tools/networking/mpack/default.nix b/nixpkgs/pkgs/tools/networking/mpack/default.nix
new file mode 100644
index 000000000000..2c9bf4ff2d30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mpack/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mpack";
+  version = "1.6";
+
+  src = fetchurl {
+    url = "http://ftp.andrew.cmu.edu/pub/mpack/mpack-${version}.tar.gz";
+    sha256 = "0k590z96509k96zxmhv72gkwhrlf55jkmyqlzi72m61r7axhhh97";
+  };
+
+  patches = [ ./build-fix.patch ./sendmail-via-execvp.diff ];
+
+  postPatch = ''
+    for f in *.{c,man,pl,unix} ; do
+      substituteInPlace $f --replace /usr/tmp /tmp
+    done
+
+    # this just shuts up some warnings
+    for f in {decode,encode,part,unixos,unixpk,unixunpk,xmalloc}.c ; do
+      sed -i 'i#include <stdlib.h>' $f
+    done
+  '';
+
+  postInstall = ''
+    install -Dm644 -t $out/share/doc/mpack INSTALL README.*
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Utilities for encoding and decoding binary files in MIME";
+    license = licenses.free;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mpack/sendmail-via-execvp.diff b/nixpkgs/pkgs/tools/networking/mpack/sendmail-via-execvp.diff
new file mode 100644
index 000000000000..8f10901038d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mpack/sendmail-via-execvp.diff
@@ -0,0 +1,12 @@
+--- mpack-1.6/unixpk.c	2003-07-21 22:50:41.000000000 +0200
++++ mpack-1.6/unixpk.c	2018-09-16 12:57:14.104026964 +0200
+@@ -254,8 +254,9 @@
+ #ifdef SCO
+     execv("/usr/lib/mail/execmail", addr+start);
+ #else
++    execvp("sendmail", addr+start);
+     execv("/usr/lib/sendmail", addr+start);
+     execv("/usr/sbin/sendmail", addr+start);
+ #endif
+     perror("execv");
+     _exit(1);
diff --git a/nixpkgs/pkgs/tools/networking/mqtt-benchmark/default.nix b/nixpkgs/pkgs/tools/networking/mqtt-benchmark/default.nix
new file mode 100644
index 000000000000..bc755247c40c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mqtt-benchmark/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "mqtt-benchmark";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "krylovsk";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-gejLDtJ1geO4eDBapHjXgpc+M2TRGKcv5YzybmIyQSs=";
+  };
+
+  vendorHash = "sha256-ZN5tNDIisbhMMOA2bVJnE96GPdZ54HXTneFQewwJmHI=";
+
+  meta = with lib; {
+    description = "MQTT broker benchmarking tool";
+    homepage = "https://github.com/krylovsk/mqtt-benchmark";
+    changelog = "https://github.com/krylovsk/mqtt-benchmark/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "mqtt-benchmark";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mqttmultimeter/default.nix b/nixpkgs/pkgs/tools/networking/mqttmultimeter/default.nix
new file mode 100644
index 000000000000..1edb48a62cbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mqttmultimeter/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, dotnetCorePackages
+, dotnet-runtime_6
+, dotnet-runtime_7
+, buildDotnetModule
+, fetchFromGitHub
+, autoPatchelfHook
+, fontconfig
+, xorg
+, libglvnd
+, makeDesktopItem
+, copyDesktopItems
+}:
+
+# NOTES:
+# 1. we need autoPatchelfHook for quite a number of things in $out/lib
+
+let
+  version = "1.7.0.211";
+
+  sdk =
+    if lib.versionAtLeast (lib.versions.majorMinor version) "1.7"
+    then dotnetCorePackages.sdk_7_0
+    else dotnetCorePackages.sdk_6_0;
+
+  runtime =
+    if lib.versionAtLeast (lib.versions.majorMinor version) "1.7"
+    then dotnet-runtime_7
+    else dotnet-runtime_6;
+
+in
+buildDotnetModule rec {
+  pname = "mqttmultimeter";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "chkr1011";
+    repo = "mqttMultimeter";
+    rev = "v" + version;
+    hash = "sha256-/XQ5HD0dBfFn3ERlLwHknS9Fyd3YMpKHBXuvMwRXcQ8=";
+  };
+
+  sourceRoot = "${src.name}/Source";
+
+  projectFile = [ "mqttMultimeter.sln" ];
+  nugetDeps = ./deps.nix;
+  dotnet-sdk = sdk;
+  dotnet-runtime = runtime;
+  executables = [ "mqttMultimeter" ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    copyDesktopItems
+  ];
+
+  buildInputs = [ stdenv.cc.cc.lib fontconfig ];
+
+  # don't care about musl and windows versions, as they fail autoPatchelfHook
+  postInstall = ''
+    rm -rf $out/lib/${lib.toLower pname}/runtimes/{*musl*,win*}
+  '';
+
+  runtimeDeps = [
+    libglvnd
+    xorg.libSM
+    xorg.libICE
+    xorg.libX11
+  ];
+
+  desktopItems = makeDesktopItem {
+    name = meta.mainProgram;
+    exec = meta.mainProgram;
+    icon = meta.mainProgram;
+    desktopName = meta.mainProgram;
+    genericName = meta.description;
+    comment = meta.description;
+    type = "Application";
+    categories = [ "Network" ];
+    startupNotify = true;
+  };
+
+  meta = with lib; {
+    mainProgram = builtins.head executables;
+    description = "MQTT traffic monitor";
+    license = licenses.free;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mqttmultimeter/deps.nix b/nixpkgs/pkgs/tools/networking/mqttmultimeter/deps.nix
new file mode 100644
index 000000000000..13ddfb334b60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mqttmultimeter/deps.nix
@@ -0,0 +1,145 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Avalonia"; version = "0.10.19"; sha256 = "1yzrbp0b6kv9h9d4kl96ldr6ln40xj1j2yvbvpm0pgv7ajwr7qhc"; })
+  (fetchNuGet { pname = "Avalonia.Angle.Windows.Natives"; version = "2.1.0.2020091801"; sha256 = "04jm83cz7vkhhr6n2c9hya2k8i2462xbf6np4bidk55as0jdq43a"; })
+  (fetchNuGet { pname = "Avalonia.AvaloniaEdit"; version = "0.10.12.2"; sha256 = "1sn8k71xcfnjxgxfqzdrv1hy7h7pvdk820nyzkmrf02gi77mx7nw"; })
+  (fetchNuGet { pname = "Avalonia.Controls.DataGrid"; version = "0.10.19"; sha256 = "0wlmr4dlz8x3madm7xwhmsf0kgdnwcy6n7zvfd9x6h0bllii1lbn"; })
+  (fetchNuGet { pname = "Avalonia.Desktop"; version = "0.10.19"; sha256 = "0vghwp1wx6l1z0dlvd9aqdaikz6k34q0i9yzaphqlzjp6ms2g2ny"; })
+  (fetchNuGet { pname = "Avalonia.Diagnostics"; version = "0.10.19"; sha256 = "1zlcp8mwn2nscrdsvxlspny22m054gsva9az27pvk7s2s5mrqgfk"; })
+  (fetchNuGet { pname = "Avalonia.FreeDesktop"; version = "0.10.19"; sha256 = "01fin1w9nwa3c9kpvbri26x1r4g59hmayx9r5hxwbhq7s7vm5ghr"; })
+  (fetchNuGet { pname = "Avalonia.Native"; version = "0.10.19"; sha256 = "0c9rw2wckyx9h5yfhm0af5zbs53n9bnhv0mlshl7mn0p92v1wfl3"; })
+  (fetchNuGet { pname = "Avalonia.ReactiveUI"; version = "0.10.19"; sha256 = "0kx4qka2rdmlp54qyn04hh79qc5w796gv3ryv24n82hpplzksqi9"; })
+  (fetchNuGet { pname = "Avalonia.Remote.Protocol"; version = "0.10.19"; sha256 = "0klk9hqas0h3d3lmr0di175nw2kwq5br1xpprkb4y4m83r5lfy0s"; })
+  (fetchNuGet { pname = "Avalonia.Skia"; version = "0.10.19"; sha256 = "16cl9ssmyif2a25fq9kvxs2vr83j589yns53zkfr3wmggl9n6lf2"; })
+  (fetchNuGet { pname = "Avalonia.Win32"; version = "0.10.19"; sha256 = "1pd3jmrdc738j7b4d8rzaj7fxrfq1m2pl3i62z2ym3h0sxl51xy2"; })
+  (fetchNuGet { pname = "Avalonia.X11"; version = "0.10.19"; sha256 = "1h71w73r7r9ci059qwsjqnhp60l8sfd3i3xsw37qfnbhslcna6hh"; })
+  (fetchNuGet { pname = "AvaloniaEdit.TextMate"; version = "0.10.12.2"; sha256 = "0d7i2vrv2lzyjb1xna4dxscl256g062c6b96ayh9aksnrygxxsx9"; })
+  (fetchNuGet { pname = "AvaloniaEdit.TextMate.Grammars"; version = "0.10.12.1"; sha256 = "0s3g1k0sqma5i6lq5qva2zkgghhba8s5iz4s6jy7dh984x6pp38b"; })
+  (fetchNuGet { pname = "DynamicData"; version = "7.1.1"; sha256 = "14xcqkw87zbjljy1pb727kwq5a4dfmsf5vg99fq0xxb71q828nvh"; })
+  (fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2.1-preview.108"; sha256 = "0xs4px4fy5b6glc77rqswzpi5ddhxvbar1md6q9wla7hckabnq0z"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Linux"; version = "2.8.2.1-preview.108"; sha256 = "16wvgvyra2g1b38rxxgkk85wbz89hspixs54zfcm4racgmj1mrj4"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.macOS"; version = "2.8.2.1-preview.108"; sha256 = "16v7lrwwif2f5zfkx08n6y6w3m56mh4hy757biv0w9yffaf200js"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.WebAssembly"; version = "2.8.2.1-preview.108"; sha256 = "15kqb353snwpavz3jja63mq8xjqsrw1f902scm8wxmsqrm5q6x55"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2.1-preview.108"; sha256 = "0n6ymn9jqms3mk5hg0ar4y9jmh96myl6q0jimn7ahb1a8viq55k1"; })
+  (fetchNuGet { pname = "JetBrains.Annotations"; version = "10.3.0"; sha256 = "1grdx28ga9fp4hwwpwv354rizm8anfq4lp045q4ss41gvhggr3z8"; })
+  (fetchNuGet { pname = "MessagePack"; version = "2.5.108"; sha256 = "0cnaz28lhrdmavnxjkakl9q8p2yv8mricvp1b0wxdfnz8v41gwzs"; })
+  (fetchNuGet { pname = "MessagePack.Annotations"; version = "2.5.108"; sha256 = "0nb1fx8dwl7304kw0bc375bvlhb7pg351l4cl3vqqd7d8zqjwx5v"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "2.9.6"; sha256 = "18mr1f0wpq0fir8vjnq0a8pz50zpnblr7sabff0yqx37c975934a"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "3.4.0"; sha256 = "12rn6gl4viycwk3pz5hp5df63g66zvba4hnkwr3f0876jj5ivmsw"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "3.4.0"; sha256 = "0rhylcwa95bxawcgixk64knv7p7xrykdjcabmx3gknk8hvj1ai9y"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "3.4.0"; sha256 = "1h2f0z9xnw987x8bydka1sd42ijqjx973md6v1gvpy1qc6ad244g"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "3.4.0"; sha256 = "195gqnpwqkg2wlvk8x6yzm7byrxfq9bki20xmhf6lzfsdw3z4mf2"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.3.0"; sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "7.0.0"; sha256 = "121zs4jp8iimgbpzm3wsglhjwkc06irg1pxy8c1zcdlsg34cfq1p"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "7.0.0"; sha256 = "181d7mp9307fs17lyy42f8cxnjwysddmpsalky4m0pqxcimnr6g7"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "7.0.0"; sha256 = "1bqd3pqn5dacgnkq0grc17cgb2i0w8z1raw12nwm3p3zhrfcvgxf"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "7.0.0"; sha256 = "1gn7d18i1wfy13vrwhmdv1rmsb4vrk26kqdld4cgvh77yigj90xs"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "7.0.0"; sha256 = "0b90zkrsk5dw3wr749rbynhpxlg4bgqdnd7d5vdlw2g9c7zlhgx6"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "7.0.0"; sha256 = "1b4km9fszid9vp2zb3gya5ni9fn8bq62bzaas2ck2r7gs0sdys80"; })
+  (fetchNuGet { pname = "Microsoft.NET.StringTools"; version = "17.4.0"; sha256 = "1smx30nq22plrn2mw4wb5vfgxk6hyx12b60c4wabmpnr81lq3nzv"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (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.Platforms"; version = "2.1.2"; sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "4.5.0"; sha256 = "0fnkv3ky12227zqg4zshx4kw2mvysq2ppxjibfw02cc3iprv4njq"; })
+  (fetchNuGet { pname = "MQTTnet"; version = "4.2.0.706"; sha256 = "0125d2x62izlkplgyg5dazz2x38amkby6i8vlfvvjvng9zq159m3"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "ReactiveUI"; version = "13.2.10"; sha256 = "0x4pk45wipzsjzkv23as8l0sdds665l9404gaix8c0z2n24s76gg"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (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.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.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.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (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.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.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.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "SkiaSharp"; version = "2.88.1-preview.108"; sha256 = "01sm36hdgmcgkai9m09xn2qfz8v7xhh803n8fng8rlxwnw60rgg6"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Linux"; version = "2.88.1-preview.108"; sha256 = "19jf2jcq2spwbpx3cfdi2a95jf4y8205rh56lmkh8zsxd2k7fjyp"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.macOS"; version = "2.88.1-preview.108"; sha256 = "1vcpqd7slh2b9gsacpd7mk1266r1xfnkm6230k8chl3ng19qlf15"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.WebAssembly"; version = "2.88.1-preview.108"; sha256 = "0a89gqjw8k97arr0kyd0fm3f46k1qamksbnyns9xdlgydjg557dd"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Win32"; version = "2.88.1-preview.108"; sha256 = "05g9blprq5msw3wshrgsk19y0fvhjlqiybs1vdyhfmww330jlypn"; })
+  (fetchNuGet { pname = "Splat"; version = "10.0.1"; sha256 = "18fzrn7xwjzxj4v3drs8djd3yf14bnq5n9n8vdnwfa1zk5jqpsb9"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.5.0"; sha256 = "1d5gjn5afnrf461jlxzawcvihz195gayqpcfbv6dd7pxa9ialn06"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.6.0"; sha256 = "1pbxzdz3pwqyybzv5ff2b7nrc281bhg7hq34w0fn1w3qfgrbwyw2"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.5.0"; sha256 = "1jj6f6g87k0iwsgmg3xmnn67a14mq88np0l1ys5zkxhkvbc8976p"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "4.5.0"; sha256 = "0knqa0zsm91nfr34br8gx5kjqq4v81zdhqkacvs2hzc8nqk0ddhc"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reactive"; version = "5.0.0"; sha256 = "1lafmpnadhiwxyd543kraxa3jfdpm6ipblxrjlibym9b1ykpr5ik"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (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.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (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.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.6.0"; sha256 = "0xmzi2gpbmgyfr75p24rqqsba3cmrqgmcv45lsqp5amgrdwd0f0m"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.3.0"; sha256 = "01vv2p8h4hsz217xxs0rixvb7f2xzbh6wv1gzbfykcbfrza6dvnf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.7.0"; sha256 = "1a56ls5a9sr3ya0nr086sdpa9qv0abv31dd6fp27maqa9zclqq5d"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "7.0.0"; sha256 = "1151hbyrcf8kyg1jz8k9awpbic98lwz9x129rg7zk1wrs6vjlpxl"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "7.0.2"; sha256 = "1i6yinxvbwdk5g5z9y8l4a5hj2gw3h9ijlz2f1c1ngyprnwz2ivf"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.3"; sha256 = "0g7r6hm572ax8v28axrdxz1gnsblg6kszq17g51pj14a5rn2af7i"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.5.0"; sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.1"; sha256 = "15f9vd7r0bxmyv754238bdckfg6sxaa3d4yx71hdzkz9k0mhjcky"; })
+  (fetchNuGet { pname = "TextMateSharp"; version = "1.0.23"; sha256 = "1cx1ybzqp1cvxsip1kwdmk4jj1hg6vscywviv5qqqsyyww56p5xv"; })
+  (fetchNuGet { pname = "TextMateSharp"; version = "1.0.29"; sha256 = "011gqjvc6qmvqcq57jbyi9rv2ifcqsaw1h688xgmvwspsq95hfxg"; })
+  (fetchNuGet { pname = "TextMateSharp.Grammars"; version = "1.0.29"; sha256 = "1y8l2bjc4y151qfh5nx4zpdr0aii64xnsfmyzn4lawzsvl1j1g9s"; })
+  (fetchNuGet { pname = "Tmds.DBus"; version = "0.9.0"; sha256 = "0vvx6sg8lxm23g5jvm5wh2gfs95mv85vd52lkq7d1b89bdczczf3"; })
+]
diff --git a/nixpkgs/pkgs/tools/networking/mqttui/default.nix b/nixpkgs/pkgs/tools/networking/mqttui/default.nix
new file mode 100644
index 000000000000..e457fa7479b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mqttui/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mqttui";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "EdJoPaTo";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-cezG9hdHOeTExX4OJwJ22e/PvfdySPzQGwxumavV++Q=";
+  };
+
+  cargoHash = "sha256-vSlziZtjyzsd346qUBEPEl8I3UlPhWHRu4+FiD1XqOo=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Terminal client for MQTT";
+    homepage = "https://github.com/EdJoPaTo/mqttui";
+    changelog = "https://github.com/EdJoPaTo/mqttui/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "mqttui";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mtr-exporter/default.nix b/nixpkgs/pkgs/tools/networking/mtr-exporter/default.nix
new file mode 100644
index 000000000000..9c7c9bec41ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mtr-exporter/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mtr-exporter";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "mgumz";
+    repo = "mtr-exporter";
+    rev = version;
+    hash = "sha256-vVYdIfogXHixf1/7+uGKSxbqVmr9NeCUuNVYE07HoBw=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = ''
+      Mtr-exporter periodically executes mtr to a given host and
+      provides the measured results as prometheus metrics.
+    '';
+    homepage = "https://github.com/mgumz/mtr-exporter";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jakubgs ];
+    mainProgram = "mtr-exporter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mtr/default.nix b/nixpkgs/pkgs/tools/networking/mtr/default.nix
new file mode 100644
index 000000000000..c586d6a75ef1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mtr/default.nix
@@ -0,0 +1,58 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, pkg-config
+, libcap
+, ncurses
+, jansson
+, withGtk ? false
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mtr${lib.optionalString withGtk "-gui"}";
+  version = "0.95";
+
+  src = fetchFromGitHub {
+    owner = "traviscross";
+    repo = "mtr";
+    rev = "v${version}";
+    sha256 = "sha256-f5bL3IdXibIc1xXCuZHwcEV5vhypRE2mLsS3A8HW2QM=";
+  };
+
+  patches = [ (fetchpatch { # https://github.com/traviscross/mtr/pull/468
+                url = "https://github.com/traviscross/mtr/commit/5908af4c19188cb17b62f23368b6ef462831a0cb.patch";
+                hash = "sha256-rTydtU8+Wc4nGEKh1GOkhcpgME4hwsACy82gKPaIe64=";
+              }) ];
+
+  # we need this before autoreconfHook does its thing
+  postPatch = ''
+    echo ${version} > .tarball-version
+  '';
+
+  # and this after autoreconfHook has generated Makefile.in
+  preConfigure = ''
+    substituteInPlace Makefile.in \
+      --replace ' install-exec-hook' ""
+  '';
+
+  configureFlags = lib.optional (!withGtk) "--without-gtk";
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ ncurses jansson ]
+    ++ lib.optional withGtk gtk3
+    ++ lib.optional stdenv.isLinux libcap;
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A network diagnostics tool";
+    homepage = "https://www.bitwizard.nl/mtr/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ koral orivej raskin globin ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mu/default.nix b/nixpkgs/pkgs/tools/networking/mu/default.nix
new file mode 100644
index 000000000000..6f3f556e2592
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mu/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, coreutils
+, emacs
+, glib
+, gmime3
+, texinfo
+, xapian
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mu";
+  version = "1.10.8";
+
+  outputs = [ "out" "mu4e" ];
+
+  src = fetchFromGitHub {
+    owner = "djcb";
+    repo = "mu";
+    rev = "v${version}";
+    hash = "sha256-cDfW0yXA+0fZY5lv4XCHWu+5B0svpMeVMf8ttX/z4Og=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "add-mu4e-pkg.el";
+      url = "https://github.com/djcb/mu/commit/00f7053d51105eea0c72151f1a8cf0b6d8478e4e.patch";
+      hash = "sha256-21c7djmYTcqyyygqByo9vu/GsH8WMYcq8NOAvJsS5AQ=";
+    })
+  ];
+
+  postPatch = ''
+    # Fix mu4e-builddir (set it to $out)
+    substituteInPlace mu4e/mu4e-config.el.in \
+      --replace "@abs_top_builddir@" "$out"
+    substituteInPlace lib/utils/mu-test-utils.cc \
+      --replace "/bin/rm" "${coreutils}/bin/rm"
+  '';
+
+  postInstall = ''
+    rm --verbose $mu4e/share/emacs/site-lisp/mu4e/*.elc
+  '';
+
+  # move only the mu4e info manual
+  # this has to be after preFixup otherwise the info manual may be moved back by _multioutDocs()
+  # we manually move the mu4e info manual instead of setting
+  # outputInfo to mu4e because we do not want to move the mu-guile
+  # info manual (if it exists)
+  postFixup = ''
+    moveToOutput share/info/mu4e.info.gz $mu4e
+    install-info $mu4e/share/info/mu4e.info.gz $mu4e/share/info/dir
+    if [[ -a ''${!outputInfo}/share/info/mu-guile.info.gz ]]; then
+      install-info --delete $mu4e/share/info/mu4e.info.gz ''${!outputInfo}/share/info/dir
+    else
+      rm --verbose --recursive ''${!outputInfo}/share/info
+    fi
+  '';
+
+  buildInputs = [ emacs glib gmime3 texinfo xapian ];
+
+  mesonFlags = [
+    "-Dguile=disabled"
+    "-Dreadline=disabled"
+    "-Dlispdir=${placeholder "mu4e"}/share/emacs/site-lisp"
+  ];
+
+  nativeBuildInputs = [ pkg-config meson ninja ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A collection of utilities for indexing and searching Maildirs";
+    license = licenses.gpl3Plus;
+    homepage = "https://www.djcbsoftware.nl/code/mu/";
+    changelog = "https://github.com/djcb/mu/releases/tag/v${version}";
+    maintainers = with maintainers; [ antono chvp peterhoeg ];
+    mainProgram = "mu";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mubeng/default.nix b/nixpkgs/pkgs/tools/networking/mubeng/default.nix
new file mode 100644
index 000000000000..ea431c3eea98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mubeng/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "mubeng";
+  version = "0.14.2";
+
+  src = fetchFromGitHub {
+    owner = "kitabisa";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-MdTgYhHjgDFplh+wcb9QTwzwMZSmF2kqMmu1x8WmOyQ=";
+  };
+
+  vendorHash = "sha256-kOLeaEKtpI3l0qLphRTnm27Ms63ID4LJ6VkUHJzGAcc=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X ktbs.dev/mubeng/common.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Proxy checker and IP rotator";
+    homepage = "https://github.com/kitabisa/mubeng";
+    changelog = "https://github.com/kitabisa/mubeng/releases/tag/v${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "mubeng";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/muffet/default.nix b/nixpkgs/pkgs/tools/networking/muffet/default.nix
new file mode 100644
index 000000000000..c363df34e8f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/muffet/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "muffet";
+  version = "2.9.3";
+
+  src = fetchFromGitHub {
+    owner = "raviqqe";
+    repo = "muffet";
+    rev = "v${version}";
+    hash = "sha256-w9PoKGxZdP/sKdlTlnWBMqDPDLUvcYubkCyNHUm3AAc=";
+  };
+
+  vendorHash = "sha256-2an4xj1gqQqj9NrSdTAss7hn6SiWoiq3RQ2xxUlSuaE=";
+
+  meta = with lib; {
+    description = "A website link checker which scrapes and inspects all pages in a website recursively";
+    homepage = "https://github.com/raviqqe/muffet";
+    changelog = "https://github.com/raviqqe/muffet/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "muffet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mutt-ics/default.nix b/nixpkgs/pkgs/tools/networking/mutt-ics/default.nix
new file mode 100644
index 000000000000..f56e688b4110
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mutt-ics/default.nix
@@ -0,0 +1,21 @@
+{ lib, python3, fetchPypi }:
+
+with python3.pkgs; buildPythonApplication rec {
+  pname = "mutt-ics";
+  version = "0.9.2";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "mutt_ics";
+    sha256 = "d44d4bec4e71c7f14df01b90fdb9563cdc784ece4250abfea5b0b675cfe85a50";
+  };
+
+  propagatedBuildInputs = [ icalendar ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dmedvinsky/mutt-ics";
+    description = "A tool to show calendar event details in Mutt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mh182 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/n2n/default.nix b/nixpkgs/pkgs/tools/networking/n2n/default.nix
new file mode 100644
index 000000000000..cde49d1c392d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/n2n/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libcap }:
+
+stdenv.mkDerivation rec {
+  pname = "n2n";
+  version = "3.0";
+
+  src = fetchFromGitHub {
+    owner = "ntop";
+    repo = "n2n";
+    rev = version;
+    hash = "sha256-OXmcc6r+fTHs/tDNF3akSsynB/bVRKB6Fl5oYxmu+E0=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [
+    libcap
+  ];
+
+  postPatch = ''
+    patchShebangs autogen.sh
+  '';
+
+  preAutoreconf = ''
+    ./autogen.sh
+  '';
+
+  PREFIX = placeholder "out";
+
+  meta = with lib; {
+    description = "Peer-to-peer VPN";
+    homepage = "https://www.ntop.org/products/n2n/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ malte-v ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/narrowlink/Cargo.lock.patch b/nixpkgs/pkgs/tools/networking/narrowlink/Cargo.lock.patch
new file mode 100644
index 000000000000..71e87a95c93d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/narrowlink/Cargo.lock.patch
@@ -0,0 +1,170 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index 2d5af9d..920b315 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -952,7 +952,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "narrowlink-agent"
+-version = "0.1.3"
++version = "0.1.4"
+ dependencies = [
+  "clap_lex",
+  "dirs",
+@@ -961,8 +961,8 @@ dependencies = [
+  "futures-util",
+  "hmac",
+  "log",
+- "narrowlink-network",
+- "narrowlink-types",
++ "narrowlink-network 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "narrowlink-types 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+  "serde",
+  "serde_json",
+  "serde_yaml",
+@@ -976,7 +976,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "narrowlink-client"
+-version = "0.1.3"
++version = "0.1.4"
+ dependencies = [
+  "chrono",
+  "clap_lex",
+@@ -988,8 +988,8 @@ dependencies = [
+  "futures-util",
+  "hmac",
+  "log",
+- "narrowlink-network",
+- "narrowlink-types",
++ "narrowlink-network 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "narrowlink-types 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+  "rand",
+  "regex",
+  "serde",
+@@ -1006,7 +1006,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "narrowlink-gateway"
+-version = "0.1.3"
++version = "0.1.4"
+ dependencies = [
+  "askama",
+  "async-trait",
+@@ -1016,8 +1016,8 @@ dependencies = [
+  "futures-util",
+  "hyper",
+  "instant-acme",
+- "narrowlink-network",
+- "narrowlink-types",
++ "narrowlink-network 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "narrowlink-types 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+  "pem 3.0.2",
+  "rcgen",
+  "rustls",
+@@ -1037,7 +1037,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "narrowlink-network"
+-version = "0.1.3"
++version = "0.1.4"
+ dependencies = [
+  "bytes",
+  "chacha20poly1305",
+@@ -1045,7 +1045,30 @@ dependencies = [
+  "futures-util",
+  "hyper",
+  "log",
+- "narrowlink-types",
++ "narrowlink-types 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde",
++ "serde_json",
++ "tokio",
++ "tokio-native-tls",
++ "tokio-rustls",
++ "tokio-tungstenite",
++ "tungstenite",
++ "webpki-roots",
++]
++
++[[package]]
++name = "narrowlink-network"
++version = "0.1.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "53a3e0af078492420b410b56ffeccd77e2c0d5ac31d53cc404e6b2f14ebde31b"
++dependencies = [
++ "bytes",
++ "chacha20poly1305",
++ "env_logger",
++ "futures-util",
++ "hyper",
++ "log",
++ "narrowlink-types 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+  "serde",
+  "serde_json",
+  "tokio",
+@@ -1058,19 +1081,38 @@ dependencies = [
+ 
+ [[package]]
+ name = "narrowlink-token-generator"
+-version = "0.1.3"
++version = "0.1.4"
+ dependencies = [
+  "clap_lex",
+  "dirs",
+  "jsonwebtoken",
+- "narrowlink-types",
++ "narrowlink-types 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+  "serde",
+  "serde_yaml",
+ ]
+ 
+ [[package]]
+ name = "narrowlink-types"
+-version = "0.1.3"
++version = "0.1.4"
++dependencies = [
++ "chrono",
++ "hmac",
++ "ipnet",
++ "jsonwebtoken",
++ "regex",
++ "serde",
++ "serde_json",
++ "sha3",
++ "uuid",
++ "validator",
++ "wildmatch",
++]
++
++[[package]]
++name = "narrowlink-types"
++version = "0.1.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "06a2e4b95bcc18504b455bff0e8d23321c8fa3bd68526f7bf1567f918f36925f"
+ dependencies = [
+  "chrono",
+  "hmac",
+@@ -1661,18 +1703,18 @@ dependencies = [
+ 
+ [[package]]
+ name = "serde"
+-version = "1.0.185"
++version = "1.0.186"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31"
++checksum = "9f5db24220c009de9bd45e69fb2938f4b6d2df856aa9304ce377b3180f83b7c1"
+ dependencies = [
+  "serde_derive",
+ ]
+ 
+ [[package]]
+ name = "serde_derive"
+-version = "1.0.185"
++version = "1.0.186"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec"
++checksum = "5ad697f7e0b65af4983a4ce8f56ed5b357e8d3c36651bf6a7e13639c17b8e670"
+ dependencies = [
+  "proc-macro2",
+  "quote",
diff --git a/nixpkgs/pkgs/tools/networking/narrowlink/default.nix b/nixpkgs/pkgs/tools/networking/narrowlink/default.nix
new file mode 100644
index 000000000000..68732b518ca9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/narrowlink/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "narrowlink";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "narrowlink";
+    repo = "narrowlink";
+    rev = version;
+    hash = "sha256-vef7ctauSl0xfYNqjvl8wLGbqzzkMItz1O7sT1UZ4b0=";
+  };
+
+  # Cargo.lock is outdated
+  cargoPatches = [ ./Cargo.lock.patch ];
+
+  cargoHash = "sha256-craOunscE6o8PXtZFCYpkFH/amkuLOK7SrV+XHbS2GM=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.IOKit
+    darwin.apple_sdk_11_0.frameworks.Security
+  ];
+
+  meta = {
+    description = "Narrowlink securely connects devices and services together, even when both nodes are behind separate NAT";
+    homepage = "https://github.com/narrowlink/narrowlink";
+    license = with lib.licenses; [ agpl3Only mpl20 ]; # the gateway component is AGPLv3, the rest is MPLv2
+    maintainers = with lib.maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nat-traverse/default.nix b/nixpkgs/pkgs/tools/networking/nat-traverse/default.nix
new file mode 100644
index 000000000000..39e74f215159
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nat-traverse/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "nat-traverse";
+  version = "0.7";
+
+  src = fetchurl {
+    url = "https://www.speicherleck.de/iblech/nat-traverse/nat-traverse-${version}.tar.bz2";
+    sha256 = "0knwnqsjwv7sa5wjb863ghabs7s269a73qwkmxpsbngjw9s0j2ih";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp nat-traverse $out/bin
+    gzip -c nat-traverse.1 > $out/share/man/man1/nat-traverse.1.gz
+  '';
+
+  meta = with lib; {
+    description = "NAT gateway traversal utility";
+    longDescription = ''
+      nat-traverse establishes direct connections between nodes which are
+      behind NAT gateways, i.e. hosts which do not have public IP addresses.
+      This is done using an UDP NAT traversal technique. Additionally, it's
+      possible to setup a small VPN by using pppd on top of nat-traverse.
+
+      nat-traverse does not need an external server on the Internet, and it
+      isn't necessary to reconfigure the involved NAT gateways, either.
+      nat-traverse works out-of-the-box.
+    '';
+    homepage = "https://www.speicherleck.de/iblech/nat-traverse/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.iblech ];
+    mainProgram = "nat-traverse";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nbd/default.nix b/nixpkgs/pkgs/tools/networking/nbd/default.nix
new file mode 100644
index 000000000000..ebef277feb21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nbd/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, pkg-config
+, glib
+, which
+, bison
+, nixosTests
+, libnl
+, linuxHeaders
+, gnutls
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nbd";
+  version = "3.25";
+
+  src = fetchurl {
+    url = "https://github.com/NetworkBlockDevice/nbd/releases/download/nbd-${version}/nbd-${version}.tar.xz";
+    hash = "sha256-9cj9D8tXsckmWU0OV/NWQy7ghni+8dQNCI8IMPDL3Qo=";
+  };
+
+  patches = [
+    # fix port setting from nbdtab
+    # https://github.com/NetworkBlockDevice/nbd/pull/154
+    (fetchpatch {
+      url = "https://github.com/NetworkBlockDevice/nbd/commit/915444bc0b8a931d32dfb755542f4bd1d37f1449.patch";
+      hash = "sha256-6z+c2cXhY92WPDqRO6AJ5BBf1N38yTgOE1foduIr5Dg=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    which
+    bison
+  ];
+
+  buildInputs = [
+    glib
+    gnutls
+  ] ++ lib.optionals stdenv.isLinux [
+    libnl
+    linuxHeaders
+  ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+  ];
+
+  # ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=implicit-function-declaration";
+
+  doCheck = !stdenv.isDarwin;
+
+  passthru.tests = {
+    test = nixosTests.nbd;
+  };
+
+  meta = {
+    homepage = "https://nbd.sourceforge.io/";
+    description = "Map arbitrary files as block devices over the network";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ nickcao ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ncftp/default.nix b/nixpkgs/pkgs/tools/networking/ncftp/default.nix
new file mode 100644
index 000000000000..02dd29c0fda5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ncftp/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, ncurses, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "ncftp";
+  version = "3.2.6";
+
+  src = fetchurl {
+    url = "ftp://ftp.ncftp.com/ncftp/ncftp-${version}-src.tar.xz";
+    sha256 = "1389657cwgw5a3kljnqmhvfh4vr2gcr71dwz1mlhf22xq23hc82z";
+  };
+
+  buildInputs = [ ncurses ];
+
+  enableParallelBuilding = true;
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: bookmark.o: (.bss+0x20): multiple definition of `gBm';
+  #     gpshare.o:(.bss+0x0): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  preConfigure = ''
+    find -name Makefile.in | xargs sed -i '/^TMPDIR=/d'
+
+    find . -name '*.sh' -or -name '*.in' -or -name '*.c' -or -name configure | xargs sed -i \
+      -e 's@/bin/ls@${coreutils}/bin/ls@g' \
+      -e 's@/bin/rm@${coreutils}/bin/rm@g'
+  '';
+
+  postInstall = ''
+    rmdir $out/etc
+    mkdir -p $out/share/doc
+    cp -r doc $out/share/doc/ncftp
+  '';
+
+  configureFlags = [
+    "--enable-ssp"
+    "--mandir=$(out)/share/man/"
+  ];
+
+  meta = with lib; {
+    description = "Command line FTP (File Transfer Protocol) client";
+    homepage = "https://www.ncftp.com/ncftp/";
+    maintainers = with maintainers; [ bjornfor ];
+    platforms = platforms.unix;
+    license = licenses.clArtistic;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ndisc6/default.nix b/nixpkgs/pkgs/tools/networking/ndisc6/default.nix
new file mode 100644
index 000000000000..6a728ec30bfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ndisc6/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "ndisc6";
+  version = "1.0.4";
+
+  src = fetchurl {
+    url = "https://www.remlab.net/files/ndisc6/archive/ndisc6-${version}.tar.bz2";
+    sha256 = "07swyar1hl83zxmd7fqwb2q0c0slvrswkcfp3nz5lknrk15dmcdb";
+  };
+
+  buildInputs = [ perl ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--disable-suid-install"
+  ];
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "localstatedir=$(TMPDIR)"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.remlab.net/ndisc6/";
+    description = "A small collection of useful tools for IPv6 networking";
+    maintainers = with maintainers; [ eelco ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ndjbdns/default.nix b/nixpkgs/pkgs/tools/networking/ndjbdns/default.nix
new file mode 100644
index 000000000000..6746f456cfe3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ndjbdns/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, systemd, pkg-config }:
+
+stdenv.mkDerivation {
+  version = "1.06";
+  pname = "ndjbdns";
+
+  src = fetchFromGitHub {
+    owner = "pjps";
+    repo = "ndjbdns";
+    rev = "64d371b6f887621de7bf8bd495be10442b2accd0";
+    sha256 = "0gjyvn8r66kp49gasd6sqfvg2pj0c6v67hnq7cqwl04kj69rfy86";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ ]
+    ++ lib.optional stdenv.isLinux systemd;
+
+  meta = with lib; {
+    description = "A brand new release of the Djbdns";
+    longDescription = ''
+      Djbdns is a fullyâ€fledged Domain Name System(DNS), originally written by the eminent author of qmail, Dr. D J Bernstein.
+    '';
+    homepage = "http://pjp.dgplug.org/ndjbdns/";
+    license = licenses.gpl2;
+    maintainers = [ ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/ndn-tools/default.nix b/nixpkgs/pkgs/tools/networking/ndn-tools/default.nix
new file mode 100644
index 000000000000..1cbc6d403a9d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ndn-tools/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, boost
+, fetchFromGitHub
+, libpcap
+, ndn-cxx
+, openssl
+, pkg-config
+, sphinx
+, wafHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ndn-tools";
+  version = "22.12";
+
+  src = fetchFromGitHub {
+    owner = "named-data";
+    repo = pname;
+    rev = "ndn-tools-${version}";
+    sha256 = "sha256-28sPgo2nq5AhIzZmvDz38echGPzKDzNm2J6iIao4yL8=";
+  };
+
+  # Hacky workaround for new pcap-config.
+  postPatch = ''
+    patch -p1 <<EOF
+      --- a/tools/dump/wscript
+      +++ b/tools/dump/wscript
+      @@ -5 +5 @@
+      -    conf.check_cfg(package='libpcap', uselib_store='PCAP',
+      +    conf.check_cfg(package="", uselib_store='PCAP',
+    EOF
+  '';
+
+  nativeBuildInputs = [ pkg-config sphinx wafHook ];
+  buildInputs = [ libpcap ndn-cxx openssl ];
+
+  wafConfigureFlags = [
+    "--boost-includes=${boost.dev}/include"
+    "--boost-libs=${boost.out}/lib"
+    "--with-tests"
+  ];
+
+  doCheck = false; # some tests fail because of the sandbox environment
+  checkPhase = ''
+    runHook preCheck
+    build/unit-tests
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://named-data.net/";
+    description = "Named Data Networking (NDN) Essential Tools";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bertof ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nebula/default.nix b/nixpkgs/pkgs/tools/networking/nebula/default.nix
new file mode 100644
index 000000000000..5420c5fa35c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nebula/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "nebula";
+  version = "1.8.2";
+
+  src = fetchFromGitHub {
+    owner = "slackhq";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-tbzdbI4QTLQcJ6kyD3c+jQvXn9ERV/9hrzNPXV9XwVM=";
+  };
+
+  vendorHash = "sha256-BL9Tx87pBZIAuoneu6Sm2gjyTTC6yOZv5GVYNNeuhtw=";
+
+  subPackages = [ "cmd/nebula" "cmd/nebula-cert" ];
+
+  ldflags = [ "-X main.Build=${version}" ];
+
+  passthru.tests = {
+    inherit (nixosTests) nebula;
+  };
+
+  meta = with lib; {
+    description = "Overlay networking tool with a focus on performance, simplicity and security";
+    longDescription = ''
+      Nebula is a scalable overlay networking tool with a focus on performance,
+      simplicity and security. It lets you seamlessly connect computers
+      anywhere in the world. Nebula is portable, and runs on Linux, OSX, and
+      Windows. (Also: keep this quiet, but we have an early prototype running
+      on iOS). It can be used to connect a small number of computers, but is
+      also able to connect tens of thousands of computers.
+
+      Nebula incorporates a number of existing concepts like encryption,
+      security groups, certificates, and tunneling, and each of those
+      individual pieces existed before Nebula in various forms. What makes
+      Nebula different to existing offerings is that it brings all of these
+      ideas together, resulting in a sum that is greater than its individual
+      parts.
+    '';
+    homepage = "https://github.com/slackhq/nebula";
+    changelog = "https://github.com/slackhq/nebula/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne numinit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netassert/default.nix b/nixpkgs/pkgs/tools/networking/netassert/default.nix
new file mode 100644
index 000000000000..d226b5345681
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netassert/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "netassert";
+  version = "2.0.3";
+
+  src = fetchFromGitHub {
+    owner = "controlplaneio";
+    repo = "netassert";
+    rev = "v${version}";
+    hash = "sha256-mRKjo0AfnM+XTl7sQoGDyQoquXpD3xPJ6i3/3Dj2rhE=";
+  };
+  vendorHash = "sha256-9mvSfAd1m95eRwljGG68+tjiFObgt1EuakjwFfn9Obo=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${src.rev}"
+  ];
+
+  postBuild = ''
+    mv $GOPATH/bin/{cli,netassert}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/controlplaneio/netassert";
+    changelog = "https://github.com/controlplaneio/netassert/blob/${src.rev}/CHANGELOG.md";
+    description = "A command line utility to test network connectivity between kubernetes objects";
+    longDescription = ''
+      NetAssert is a command line utility to test network connectivity between kubernetes objects.
+      It currently supports Deployment, Pod, Statefulset and Daemonset.
+      You can check the traffic flow between these objects or from these objects to a remote host or an IP address.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+    mainProgram = "netassert";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netavark/default.nix b/nixpkgs/pkgs/tools/networking/netavark/default.nix
new file mode 100644
index 000000000000..f1a0aafe0f2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netavark/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, mandown
+, protobuf
+, nixosTests
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "netavark";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "containers";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-amvy8sR2gpTYU7wcfkFeYyaTvrhZC558zidNdHwxqaI=";
+  };
+
+  cargoHash = "sha256-v8djyU+MvBmg929oFVPZlRPtj7zK8eZg3/KmCsFNWpw=";
+
+  nativeBuildInputs = [ installShellFiles mandown protobuf ];
+
+  postBuild = ''
+    make -C docs netavark.1
+    installManPage docs/netavark.1
+  '';
+
+  passthru.tests = { inherit (nixosTests) podman; };
+
+  meta = with lib; {
+    changelog = "https://github.com/containers/netavark/releases/tag/${src.rev}";
+    description = "Rust based network stack for containers";
+    homepage = "https://github.com/containers/netavark";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ] ++ teams.podman.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netbird/default.nix b/nixpkgs/pkgs/tools/networking/netbird/default.nix
new file mode 100644
index 000000000000..4e1aeb905cf1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netbird/default.nix
@@ -0,0 +1,116 @@
+{ stdenv
+, lib
+, nixosTests
+, nix-update-script
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, gtk3
+, libayatana-appindicator
+, libX11
+, libXcursor
+, libXxf86vm
+, Cocoa
+, IOKit
+, Kernel
+, UserNotifications
+, WebKit
+, ui ? false
+, netbird-ui
+}:
+let
+  modules =
+    if ui then {
+      "client/ui" = "netbird-ui";
+    } else {
+      client = "netbird";
+      management = "netbird-mgmt";
+      signal = "netbird-signal";
+    };
+in
+buildGoModule rec {
+  pname = "netbird";
+  version = "0.25.9";
+
+  src = fetchFromGitHub {
+    owner = "netbirdio";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-asY5/g/RztQqZA5sH2Zoucm6QNUe/8QYoAmMAslnswo=";
+  };
+
+  vendorHash = "sha256-CFLwb5cqsfxTxOwuLOB0IMYkRZUNPgB7grjQ4xm84BM=";
+
+  nativeBuildInputs = [ installShellFiles ] ++ lib.optional ui pkg-config;
+
+  buildInputs = lib.optionals (stdenv.isLinux && ui) [
+    gtk3
+    libayatana-appindicator
+    libX11
+    libXcursor
+    libXxf86vm
+  ] ++ lib.optionals (stdenv.isDarwin && ui) [
+    Cocoa
+    IOKit
+    Kernel
+    UserNotifications
+    WebKit
+  ];
+
+  subPackages = lib.attrNames modules;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/netbirdio/netbird/version.version=${version}"
+    "-X main.builtBy=nix"
+  ];
+
+  # needs network access
+  doCheck = false;
+
+  postPatch = ''
+    # make it compatible with systemd's RuntimeDirectory
+    substituteInPlace client/cmd/root.go \
+      --replace 'unix:///var/run/netbird.sock' 'unix:///var/run/netbird/sock'
+    substituteInPlace client/ui/client_ui.go \
+      --replace 'unix:///var/run/netbird.sock' 'unix:///var/run/netbird/sock'
+  '';
+
+  postInstall = lib.concatStringsSep "\n"
+    (lib.mapAttrsToList
+      (module: binary: ''
+        mv $out/bin/${lib.last (lib.splitString "/" module)} $out/bin/${binary}
+      '' + lib.optionalString (!ui) ''
+        installShellCompletion --cmd ${binary} \
+          --bash <($out/bin/${binary} completion bash) \
+          --fish <($out/bin/${binary} completion fish) \
+          --zsh <($out/bin/${binary} completion zsh)
+      '')
+      modules) + lib.optionalString (stdenv.isLinux && ui) ''
+    mkdir -p $out/share/pixmaps
+    cp $src/client/ui/netbird-systemtray-default.png $out/share/pixmaps/netbird.png
+
+    mkdir -p $out/share/applications
+    cp $src/client/ui/netbird.desktop $out/share/applications/netbird.desktop
+
+    substituteInPlace $out/share/applications/netbird.desktop \
+      --replace "Exec=/usr/bin/netbird-ui" "Exec=$out/bin/netbird-ui"
+  '';
+
+  passthru = {
+    tests.netbird = nixosTests.netbird;
+    tests.netbird-ui = netbird-ui;
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    homepage = "https://netbird.io";
+    changelog = "https://github.com/netbirdio/netbird/releases/tag/v${version}";
+    description = "Connect your devices into a single secure private WireGuard®-based mesh network with SSO/MFA and simple access controls";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ misuzu ];
+    mainProgram = "netbird";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netboot/default.nix b/nixpkgs/pkgs/tools/networking/netboot/default.nix
new file mode 100644
index 000000000000..30dc544fe23b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netboot/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, bison, lzo, db4 }:
+
+stdenv.mkDerivation rec {
+  pname = "netboot";
+  version = "0.10.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/netboot/netboot-${version}.tar.gz";
+    sha256 = "09w09bvwgb0xzn8hjz5rhi3aibysdadbg693ahn8rylnqfq4hwg0";
+  };
+
+  buildInputs = [ bison lzo db4 ];
+
+  hardeningDisable = [ "format" ];
+
+  # Disable parallel build, errors:
+  #  link: `parseopt.lo' is not a valid libtool object
+  enableParallelBuilding = false;
+
+  meta = with lib; {
+    description = "Mini PXE server";
+    maintainers = [ maintainers.raskin ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    license = lib.licenses.free;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netcat-openbsd/default.nix b/nixpkgs/pkgs/tools/networking/netcat-openbsd/default.nix
new file mode 100644
index 000000000000..3f561716ede6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netcat-openbsd/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitLab, pkg-config, libbsd, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "netcat-openbsd";
+  version = "1.219-1";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "debian";
+    repo = "netcat-openbsd";
+    rev = "refs/tags/debian/${version}";
+    sha256 = "sha256-rN8pl3Qf0T8bXGtVH22tBpGY/EcnbgGm1G8Z2patGbo=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+  buildInputs = [ libbsd ];
+
+  postPatch = ''
+    for file in $(cat debian/patches/series); do
+      patch -p1 < debian/patches/$file
+    done
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mv nc $out/bin/nc
+    installManPage nc.1
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/nc -h 2> /dev/null
+  '';
+
+  meta = with lib; {
+    description = "TCP/IP swiss army knife. OpenBSD variant";
+    homepage = "https://salsa.debian.org/debian/netcat-openbsd";
+    maintainers = with maintainers; [ artturin ];
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    mainProgram = "nc";
+    # never built on aarch64-darwin, x86_64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netcat/default.nix b/nixpkgs/pkgs/tools/networking/netcat/default.nix
new file mode 100644
index 000000000000..7d7806f1997e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netcat/default.nix
@@ -0,0 +1,19 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "netcat-gnu";
+  version = "0.7.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/netcat/netcat-${version}.tar.bz2";
+    sha256 = "1frjcdkhkpzk0f84hx6hmw5l0ynpmji8vcbaxg8h5k2svyxz0nmm";
+  };
+
+  meta = with lib; {
+    description = "Utility which reads and writes data across network connections";
+    homepage = "https://netcat.sourceforge.net/";
+    mainProgram = "netcat";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netdiscover/default.nix b/nixpkgs/pkgs/tools/networking/netdiscover/default.nix
new file mode 100644
index 000000000000..3aec143b3a56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netdiscover/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, libpcap, libnet, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "netdiscover";
+  version = "0.10";
+
+  src = fetchFromGitHub {
+    owner = "netdiscover-scanner";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Pd/Rf1G9z8sBZA5i+bzuzYUCiNI0Tv7Bz0lJDJCQU9I=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libpcap libnet ];
+
+  # Running update-oui-database.sh would probably make the build irreproducible
+
+  meta = with lib; {
+    description = "A network address discovering tool, developed mainly for those wireless networks without dhcp server, it also works on hub/switched networks";
+    homepage = "https://github.com/netdiscover-scanner/netdiscover";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ vdot0x23 ];
+    platforms = platforms.unix;
+    mainProgram = "netdiscover";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nethogs/default.nix b/nixpkgs/pkgs/tools/networking/nethogs/default.nix
new file mode 100644
index 000000000000..8c2d4ba84291
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nethogs/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, libpcap }:
+
+stdenv.mkDerivation rec {
+  pname = "nethogs";
+  version = "0.8.7";
+
+  src = fetchFromGitHub {
+    owner = "raboof";
+    repo = "nethogs";
+    rev = "v${version}";
+    sha256 = "10shdwvfj90lp2fxz9260342a1c2n1jbw058qy5pyq5kh3xwr9b8";
+  };
+
+  buildInputs = [ ncurses libpcap ];
+
+  makeFlags = [ "VERSION=${version}" "nethogs" ];
+
+  installFlags = [ "PREFIX=$(out)" "sbin=$(out)/bin" ];
+
+  meta = with lib; {
+    description = "A small 'net top' tool, grouping bandwidth by process";
+    longDescription = ''
+      NetHogs is a small 'net top' tool. Instead of breaking the traffic down
+      per protocol or per subnet, like most tools do, it groups bandwidth by
+      process. NetHogs does not rely on a special kernel module to be loaded.
+      If there's suddenly a lot of network traffic, you can fire up NetHogs
+      and immediately see which PID is causing this. This makes it easy to
+      identify programs that have gone wild and are suddenly taking up your
+      bandwidth.
+    '';
+    license = licenses.gpl2Plus;
+    homepage = "https://github.com/raboof/nethogs#readme";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.rycee ];
+    mainProgram = "nethogs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nethoscope/default.nix b/nixpkgs/pkgs/tools/networking/nethoscope/default.nix
new file mode 100644
index 000000000000..2b450cf7b8aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nethoscope/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, alsa-lib
+, libpcap
+, expect
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nethoscope";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "vvilhonen";
+    repo = "nethoscope";
+    rev = "v${version}";
+    hash = "sha256-v7GO+d4b0N3heN10+WSUJEpcShKmx4BPR1FyZoELWzc=";
+  };
+
+  cargoHash = "sha256-0yLMscmjHeU8dRDzx3kgniCRsekg9ZJWdN13hyqJgDI=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [
+    alsa-lib
+    libpcap
+  ];
+
+  LD_LIBRARY_PATH = lib.makeLibraryPath [
+    libpcap
+    alsa-lib
+  ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    if [[ "$(${expect}/bin/unbuffer "$out/bin/${pname}" --help 2> /dev/null | strings | grep ${version} | tr -d '\n')" == " ${version}" ]]; then
+      echo '${pname} smoke check passed'
+    else
+      echo '${pname} smoke check failed'
+      return 1
+    fi
+  '';
+
+  meta = with lib; {
+    description = "Listen to your network traffic";
+    longDescription = ''
+      Employ your built-in wetware pattern recognition and
+      signal processing facilities to understand your network traffic.
+    '';
+    homepage = "https://github.com/vvilhonen/nethoscope";
+    license = licenses.isc;
+    maintainers = with maintainers; [ _0x4A6F ];
+    platforms = platforms.linux;
+    mainProgram = "nethoscope";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/netifd/default.nix b/nixpkgs/pkgs/tools/networking/netifd/default.nix
new file mode 100644
index 000000000000..6fd90f6082c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netifd/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, cmake
+, fetchgit
+, libnl
+, libubox
+, uci
+, ubus
+, json_c
+, pkg-config
+, udebug
+}:
+
+stdenv.mkDerivation {
+  pname = "netifd";
+  version = "unstable-2023-11-27";
+
+  src = fetchgit {
+    url = "https://git.openwrt.org/project/netifd.git";
+    rev = "02bc2e14d1d37500e888c0c53ac41398a56b5579";
+    hash = "sha256-aMs/Y50+1Yk/j5jGubjBCRcPGw03oIitvEygaxRlr90=";
+  };
+
+  buildInputs = [
+    libnl.dev
+    libubox
+    uci
+    ubus
+    json_c
+    udebug
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  postPatch = ''
+    # by default this assumes the build directory is the source directory
+    # since we let cmake build in it's own build directory, we need to use
+    # $PWD (which at the time of this script being run is the directory with the source code)
+    # to adjust the paths
+    sed "s|./make_ethtool_modes_h.sh|$PWD/make_ethtool_modes_h.sh|g" -i CMakeLists.txt
+    sed "s|./ethtool-modes.h|$PWD/ethtool-modes.h|g" -i CMakeLists.txt
+  '';
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals (stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.version "12") [
+    "-Wno-error=maybe-uninitialized"
+  ]);
+
+  meta = with lib; {
+    description = "OpenWrt Network interface configuration daemon";
+    homepage = "https://git.openwrt.org/?p=project/netifd.git;a=summary";
+    license = licenses.lgpl21Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mkg20001 ];
+    mainProgram = "netifd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netkit/tftp/default.nix b/nixpkgs/pkgs/tools/networking/netkit/tftp/default.nix
new file mode 100644
index 000000000000..3ebfa3b96bc1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netkit/tftp/default.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "netkit-tftp";
+  version = "0.17";
+
+  src = fetchurl {
+    urls = [
+      "mirror://ubuntu/pool/universe/n/netkit-tftp/netkit-tftp_${version}.orig.tar.gz"
+      "ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/netkit-tftp-${version}.tar.gz"
+      "https://ftp.cc.uoc.gr/mirrors/linux/ubuntu/packages/pool/universe/n/netkit-tftp/netkit-tftp_${version}.orig.tar.gz"
+    ];
+    sha256 = "0kfibbjmy85r3k92cdchha78nzb6silkgn1zaq9g8qaf1l0w0hrs";
+  };
+
+  preInstall = "
+    mkdir -p $out/man/man{1,8} $out/sbin $out/bin
+  ";
+
+  meta = {
+    description = "Netkit TFTP client and server";
+    homepage = "ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/";
+    license = lib.licenses.bsdOriginal;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netmask/default.nix b/nixpkgs/pkgs/tools/networking/netmask/default.nix
new file mode 100644
index 000000000000..f564e09ba032
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netmask/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, texinfo }:
+
+stdenv.mkDerivation rec {
+  pname = "netmask";
+  version = "2.4.4";
+
+  src = fetchFromGitHub {
+    owner = "tlby";
+    repo = "netmask";
+    rev = "v${version}";
+    sha256 = "1269bmdvl534wr0bamd7cqbnr76pnb14yn8ly4qsfg29kh7hrds6";
+  };
+
+  buildInputs = [ texinfo ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    homepage = "https://github.com/tlby/netmask";
+    description = "An IP address formatting tool ";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.jensbin ];
+    mainProgram = "netmask";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netrw/default.nix b/nixpkgs/pkgs/tools/networking/netrw/default.nix
new file mode 100644
index 000000000000..c5e54ab8f432
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netrw/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl
+, checksumType ? "built-in"
+, libmhash ? null
+, openssl ? null
+}:
+
+assert checksumType == "mhash" -> libmhash != null;
+assert checksumType == "openssl" -> openssl != null;
+
+stdenv.mkDerivation rec {
+  pname = "netrw";
+  version = "1.3.2";
+
+  configureFlags = [
+    "--with-checksum=${checksumType}"
+  ];
+
+  buildInputs = lib.optional (checksumType == "mhash") libmhash
+             ++ lib.optional (checksumType == "openssl") openssl;
+
+  src = fetchurl {
+    urls = [
+      "https://mamuti.net/files/netrw/netrw-${version}.tar.bz2"
+      "http://www.sourcefiles.org/Networking/FTP/Other/netrw-${version}.tar.bz2"
+    ];
+    sha256 = "1gnl80i5zkyj2lpnb4g0q0r5npba1x6cnafl2jb3i3pzlfz1bndr";
+  };
+
+  meta = {
+    description = "Simple tool for transporting data over the network";
+    license = lib.licenses.gpl2;
+    homepage = "https://mamuti.net/netrw/index.en.html";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netselect/default.nix b/nixpkgs/pkgs/tools/networking/netselect/default.nix
new file mode 100644
index 000000000000..be68e3e2c600
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netselect/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "netselect";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "apenwarr";
+    repo = "netselect";
+    rev = "${pname}-${version}";
+    sha256 = "1zncyvjzllrjbdvz7c50d1xjyhs9mwqfy92ndpfc5b3mxqslw4kx";
+  };
+
+  postPatch = ''
+    substituteInPlace netselect-apt \
+      --replace "/usr/bin/" ""
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 -t $out/bin netselect netselect-apt
+    install -Dm444 -t $out/share/man/man1 *.1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/apenwarr/netselect";
+    description = "An ultrafast intelligent parallelizing binary-search implementation of \"ping\"";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netsniff-ng/default.nix b/nixpkgs/pkgs/tools/networking/netsniff-ng/default.nix
new file mode 100644
index 000000000000..a6bf4383b317
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netsniff-ng/default.nix
@@ -0,0 +1,94 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+, bison
+, flex
+, geoip
+, geolite-legacy
+, libcli
+, libnet
+, libnetfilter_conntrack
+, libnl
+, libpcap
+, libsodium
+, liburcu
+, ncurses
+, pkg-config
+, gnumake42
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "netsniff-ng";
+  version = "0.6.8";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = pname;
+    rev = "v${version}";
+    sha256 = "10ih8amaqspy0zwg7hqvypa1v7ixpjl0n608cyfgyfzffp73lbqf";
+  };
+
+  nativeBuildInputs = [
+    bison
+    flex
+    makeWrapper
+    pkg-config
+    gnumake42 # fails with make 4.4
+  ];
+
+  buildInputs = [
+    geoip
+    geolite-legacy
+    libcli
+    libnet
+    libnl
+    libnetfilter_conntrack
+    libpcap
+    libsodium
+    liburcu
+    ncurses
+    zlib
+  ];
+
+  # ./configure is not autoGNU but some home-brewn magic
+  configurePhase = ''
+    patchShebangs configure
+    substituteInPlace configure --replace "which" "command -v"
+    NACL_INC_DIR=${libsodium.dev}/include/sodium NACL_LIB=sodium ./configure
+  '';
+
+  enableParallelBuilding = true;
+
+  # All files installed to /etc are just static data that can go in the store
+  makeFlags = [ "PREFIX=$(out)" "ETCDIR=$(out)/etc" ];
+
+  postInstall = ''
+    # trafgen and bpfc can call out to cpp to process config files.
+    wrapProgram "$out/sbin/trafgen" --prefix PATH ":" "${stdenv.cc}/bin"
+    wrapProgram "$out/sbin/bpfc" --prefix PATH ":" "${stdenv.cc}/bin"
+
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIP.dat $out/etc/netsniff-ng/country4.dat
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIPv6.dat $out/etc/netsniff-ng/country6.dat
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIPCity.dat $out/etc/netsniff-ng/city4.dat
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIPCityv6.dat $out/etc/netsniff-ng/city6.dat
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIPASNum.dat $out/etc/netsniff-ng/asname4.dat
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIPASNumv6.dat $out/etc/netsniff-ng/asname6.dat
+    rm -v $out/etc/netsniff-ng/geoip.conf # updating databases after installation is impossible
+  '';
+
+  meta = with lib; {
+    description = "Swiss army knife for daily Linux network plumbing";
+    longDescription = ''
+      netsniff-ng is a free Linux networking toolkit. Its gain of performance
+      is reached by zero-copy mechanisms, so that on packet reception and
+      transmission the kernel does not need to copy packets from kernel space
+      to user space and vice versa. The toolkit can be used for network
+      development and analysis, debugging, auditing or network reconnaissance.
+    '';
+    homepage = "http://netsniff-ng.org/";
+    license = with licenses; [ gpl2Only ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nettee/default.nix b/nixpkgs/pkgs/tools/networking/nettee/default.nix
new file mode 100644
index 000000000000..b281d6b29680
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nettee/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, lib, fetchurl, cleanPackaging }:
+
+let
+  version = "0.3.4";
+  sha256 = "00xbkp99x9v07r34w7m2p8gak5hdsdbka36n7a733rdrrkgf5z7r";
+
+in stdenv.mkDerivation {
+  pname = "nettee";
+  inherit version;
+
+  src = fetchurl {
+    url = "http://saf.bio.caltech.edu/pub/software/linux_or_unix_tools/beta-nettee-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  meta = {
+    homepage = "http://saf.bio.caltech.edu/nettee.html";
+    description = ''Network "tee" program'';
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ Profpatsch ];
+    platforms = lib.platforms.linux;
+    mainProgram = "nettee";
+  };
+
+  outputs = [ "bin" "man" "doc" "out" ];
+
+  patchPhase = ''
+    # h_addr field was removed
+    sed -e '1 i #define h_addr h_addr_list[0]' \
+        -i nettee.c
+  '';
+
+  buildPhase = ''
+    cat README.TXT
+    mkdir -p $bin/bin
+    $CC -o $bin/bin/nettee \
+      -Wall -pedantic -std=c99\
+      -D_LARGEFILE64_SOURCE -D_POSIX_SOURCE -D_XOPEN_SOURCE\
+      nettee.c rb.c nio.c
+  '';
+
+  installPhase = ''
+    ${cleanPackaging.commonFileActions {
+        docFiles = [
+          "*.html"
+          "*.TXT"
+          "LICENSE"
+          "*.sh"
+          "topology.txt"
+          "beowulf.master"
+          "topology_info"
+        ];
+        noiseFiles = [
+          "*.c"
+          "*.h"
+          "nettee"
+        ];
+      }} $doc/share/doc/nettee
+
+    mkdir -p $man/share/man/{man1,man3}
+    mv nettee.1 $man/share/man/man1
+    mv nettee_cmd.3 $man/share/man/man3
+  '';
+
+  postFixup = ''
+    ${cleanPackaging.checkForRemainingFiles}
+  '';
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkd-dispatcher/default.nix b/nixpkgs/pkgs/tools/networking/networkd-dispatcher/default.nix
new file mode 100644
index 000000000000..8f9cece27169
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkd-dispatcher/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchpatch
+, python3Packages
+, asciidoc
+, makeWrapper
+, iw
+}:
+
+stdenv.mkDerivation rec {
+  pname = "networkd-dispatcher";
+  version = "2.2.4";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.com";
+    owner = "craftyguy";
+    repo = pname;
+    rev = version;
+    hash = "sha256-yO9/HlUkaQmW/n9N3vboHw//YMzBjxIHA2zAxgZNEv0=";
+  };
+
+  patches = [
+    # Support rule files in NixOS store paths. Required for the networkd-dispatcher
+    # module to work
+    ./support_nix_store_path.patch
+
+    # Fixes: networkd-dispatcher.service: Got notification message from PID XXXX, but reception only permitted for main PID XXXX
+    (fetchpatch {
+      url = "https://gitlab.com/craftyguy/networkd-dispatcher/-/commit/4796368d88da516fafda321d8565ae8ccf465120.patch";
+      hash = "sha256-RAoCSmZCjTXxVKesatWjiePY4xECGn5pwvOOV0clL+Q=";
+    })
+  ];
+
+  postPatch = ''
+    # Fix paths in systemd unit file
+    substituteInPlace networkd-dispatcher.service \
+      --replace "/usr/bin/networkd-dispatcher" "$out/bin/networkd-dispatcher" \
+      --replace "/etc/conf.d" "$out/etc/conf.d"
+    # Remove conditions on existing rules path
+    sed -i '/ConditionPathExistsGlob/g' networkd-dispatcher.service
+  '';
+
+  nativeBuildInputs = [
+    asciidoc
+    makeWrapper
+    python3Packages.wrapPython
+  ];
+
+  checkInputs = with python3Packages; [
+    dbus-python
+    iw
+    mock
+    pygobject3
+    pytestCheckHook
+  ];
+
+  pythonPath = with python3Packages; [
+    configparser
+    dbus-python
+    pygobject3
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D -m755 -t $out/bin networkd-dispatcher
+    install -Dm644 networkd-dispatcher.service $out/lib/systemd/system/networkd-dispatcher.service
+    install -Dm644 networkd-dispatcher.conf $out/etc/conf.d/networkd-dispatcher.conf
+    install -D networkd-dispatcher.8 -t $out/share/man/man8/
+    runHook postInstall
+  '';
+
+  doCheck = true;
+
+  postFixup = ''
+    wrapPythonPrograms
+    wrapProgram $out/bin/networkd-dispatcher --prefix PATH : ${lib.makeBinPath [ iw ]}
+  '';
+
+  meta = with lib; {
+    description = "Dispatcher service for systemd-networkd connection status changes";
+    homepage = "https://gitlab.com/craftyguy/networkd-dispatcher";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkd-dispatcher/support_nix_store_path.patch b/nixpkgs/pkgs/tools/networking/networkd-dispatcher/support_nix_store_path.patch
new file mode 100644
index 000000000000..6d32548f1883
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkd-dispatcher/support_nix_store_path.patch
@@ -0,0 +1,13 @@
+diff --git a/networkd-dispatcher b/networkd-dispatcher
+index ef877ce..8c341f2 100755
+--- a/networkd-dispatcher
++++ b/networkd-dispatcher
+@@ -171,6 +171,8 @@ def check_perms(path, mode=0o755, uid=0, gid=0):
+ 
+     if not os.path.exists(path):
+         raise FileNotFoundError
++    if re.search('^/nix/store/.*', str(path)):
++        return True
+     st = os.stat(path, follow_symlinks=False)
+     st_mode = st.st_mode & 0x00FFF
+     if st.st_uid == uid and st.st_gid == gid and st_mode == mode:
diff --git a/nixpkgs/pkgs/tools/networking/networkd-notify/default.nix b/nixpkgs/pkgs/tools/networking/networkd-notify/default.nix
new file mode 100644
index 000000000000..b80a7d450966
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkd-notify/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, fetchFromGitLab
+, buildPythonApplication
+, dbus-python
+, pygobject3
+, systemd
+, wirelesstools
+}:
+
+buildPythonApplication rec {
+  pname = "networkd-notify";
+  version = "unstable-2022-11-29";
+  # There is no setup.py, just a single Python script.
+  format = "other";
+
+  src = fetchFromGitLab {
+    owner = "wavexx";
+    repo = pname;
+    rev = "c2f3e71076a0f51c097064b1eb2505a361c7cc0e";
+    sha256 = "sha256-fanP1EWERT2Jy4OnMo8OMdR9flginYUgMw+XgmDve3o=";
+  };
+
+  propagatedBuildInputs = [
+    dbus-python
+    pygobject3
+  ];
+
+  patchPhase = ''
+    sed -i \
+      -e '/^NETWORKCTL = /c\NETWORKCTL = ["${systemd}/bin/networkctl"]' \
+      -e '/^IWCONFIG = /c\IWCONFIG = ["${wirelesstools}/bin/iwconfig"]' \
+      networkd-notify
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -D networkd-notify -t "$out/bin/"
+    install -D -m0644 networkd-notify.desktop -t "$out/share/applications/"
+  '';
+
+  meta = with lib; {
+    description = "Desktop notification integration for systemd-networkd";
+    homepage = "https://gitlab.com/wavexx/networkd-notify";
+    maintainers = with maintainers; [ danc86 ];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/applet/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/applet/default.nix
new file mode 100644
index 000000000000..908cb8757e36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/applet/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv
+, fetchurl
+, meson
+, ninja
+, gettext
+, pkg-config
+, networkmanager
+, gnome
+, libsecret
+, polkit
+, modemmanager
+, libnma
+, glib-networking
+, gsettings-desktop-schemas
+, libgudev
+, jansson
+, wrapGAppsHook
+, gobject-introspection
+, python3
+, gtk3
+, libayatana-appindicator
+, glib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "network-manager-applet";
+  version = "1.36.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-qEcESH6jr+FIXEf7KrWYuPd59UCuDcvwocX4XmSn4lM=";
+  };
+
+  mesonFlags = [
+    "-Dselinux=false"
+    "-Dappindicator=yes"
+  ];
+
+  outputs = [ "out" "man" ];
+
+  buildInputs = [
+    libnma
+    gtk3
+    networkmanager
+    libsecret
+    gsettings-desktop-schemas
+    polkit
+    libgudev
+    modemmanager
+    jansson
+    glib
+    glib-networking
+    libayatana-appindicator
+    gnome.adwaita-icon-theme
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    gettext
+    pkg-config
+    wrapGAppsHook
+    gobject-introspection
+    python3
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py # patchShebangs requires executable file
+    patchShebangs meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "networkmanagerapplet";
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/GNOME/network-manager-applet/";
+    description = "NetworkManager control applet for GNOME";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+    mainProgram = "nm-applet";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/default.nix
new file mode 100644
index 000000000000..5490977df12d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/default.nix
@@ -0,0 +1,216 @@
+{ lib
+, stdenv
+, fetchurl
+, substituteAll
+, gettext
+, pkg-config
+, dbus
+, gnome
+, systemd
+, libuuid
+, polkit
+, gnutls
+, ppp
+, dhcpcd
+, iptables
+, nftables
+, python3
+, vala
+, libgcrypt
+, dnsmasq
+, bluez5
+, readline
+, libselinux
+, audit
+, gobject-introspection
+, perl
+, modemmanager
+, openresolv
+, libndp
+, newt
+, libsoup
+, ethtool
+, gnused
+, iputils
+, kmod
+, jansson
+, elfutils
+, gtk-doc
+, libxslt
+, docbook_xsl
+, docbook_xml_dtd_412
+, docbook_xml_dtd_42
+, docbook_xml_dtd_43
+, openconnect
+, curl
+, meson
+, mesonEmulatorHook
+, ninja
+, libpsl
+, mobile-broadband-provider-info
+, runtimeShell
+, buildPackages
+}:
+
+let
+  pythonForDocs = python3.pythonOnBuildForHost.withPackages (pkgs: with pkgs; [ pygobject3 ]);
+in
+stdenv.mkDerivation rec {
+  pname = "networkmanager";
+  version = "1.44.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/NetworkManager/${lib.versions.majorMinor version}/NetworkManager-${version}.tar.xz";
+    sha256 = "sha256-S1i/OsV+LO+1ZS79CUXrC0vDamPZKmGrRx2LssmkIOE=";
+  };
+
+  outputs = [ "out" "dev" "devdoc" "man" "doc" ];
+
+  # Right now we hardcode quite a few paths at build time. Probably we should
+  # patch networkmanager to allow passing these path in config file. This will
+  # remove unneeded build-time dependencies.
+  mesonFlags = [
+    # System paths
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "-Dsystemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+    # to enable link-local connections
+    "-Dudev_dir=${placeholder "out"}/lib/udev"
+    "-Ddbus_conf_dir=${placeholder "out"}/share/dbus-1/system.d"
+    "-Dkernel_firmware_dir=/run/current-system/firmware"
+
+    # Platform
+    "-Dmodprobe=${kmod}/bin/modprobe"
+    "-Dsession_tracking=systemd"
+    "-Dlibaudit=yes-disabled-by-default"
+    "-Dpolkit_agent_helper_1=/run/wrappers/bin/polkit-agent-helper-1"
+
+    # Features
+    # Allow using iwd when configured to do so
+    "-Diwd=true"
+    "-Dpppd=${ppp}/bin/pppd"
+    "-Diptables=${iptables}/bin/iptables"
+    "-Dnft=${nftables}/bin/nft"
+    "-Dmodem_manager=true"
+    "-Dnmtui=true"
+    "-Ddnsmasq=${dnsmasq}/bin/dnsmasq"
+    "-Dqt=false"
+
+    # Handlers
+    "-Dresolvconf=${openresolv}/bin/resolvconf"
+
+    # DHCP clients
+    # ISC DHCP client has reached it's end of life, so stop using it
+    "-Ddhclient=no"
+    "-Ddhcpcd=${dhcpcd}/bin/dhcpcd"
+    "-Ddhcpcanon=no"
+
+    # Miscellaneous
+    # almost cross-compiles, however fails with
+    # ** (process:9234): WARNING **: Failed to load shared library '/nix/store/...-networkmanager-aarch64-unknown-linux-gnu-1.38.2/lib/libnm.so.0' referenced by the typelib: /nix/store/...-networkmanager-aarch64-unknown-linux-gnu-1.38.2/lib/libnm.so.0: cannot open shared object file: No such file or directory
+    "-Ddocs=${lib.boolToString (stdenv.buildPlatform == stdenv.hostPlatform)}"
+    # We don't use firewalld in NixOS
+    "-Dfirewalld_zone=false"
+    "-Dtests=no"
+    "-Dcrypto=gnutls"
+    "-Dmobile_broadband_provider_info_database=${mobile-broadband-provider-info}/share/mobile-broadband-provider-info/serviceproviders.xml"
+  ];
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit iputils openconnect ethtool gnused systemd;
+      inherit runtimeShell;
+    })
+
+    # Meson does not support using different directories during build and
+    # for installation like Autotools did with flags passed to make install.
+    ./fix-install-paths.patch
+  ];
+
+  buildInputs = [
+    systemd
+    libselinux
+    audit
+    libpsl
+    libuuid
+    polkit
+    ppp
+    libndp
+    curl
+    mobile-broadband-provider-info
+    bluez5
+    dnsmasq
+    modemmanager
+    readline
+    newt
+    libsoup
+    jansson
+    dbus # used to get directory paths with pkg-config during configuration
+  ];
+
+  propagatedBuildInputs = [ gnutls libgcrypt ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    gettext
+    pkg-config
+    vala
+    gobject-introspection
+    perl
+    elfutils # used to find jansson soname
+    # Docs
+    gtk-doc
+    libxslt
+    docbook_xsl
+    docbook_xml_dtd_412
+    docbook_xml_dtd_42
+    docbook_xml_dtd_43
+    pythonForDocs
+  ] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
+    mesonEmulatorHook
+  ];
+
+  doCheck = false; # requires /sys, the net
+
+  postPatch = ''
+    patchShebangs ./tools
+    patchShebangs libnm/generate-setting-docs.py
+
+    # TODO: submit upstream
+    substituteInPlace meson.build \
+      --replace "'vala', req" "'vala', native: false, req"
+  '';
+
+  preBuild = ''
+    # Our gobject-introspection patches make the shared library paths absolute
+    # in the GIR files. When building docs, the library is not yet installed,
+    # though, so we need to replace the absolute path with a local one during build.
+    # We are using a symlink that will be overridden during installation.
+    mkdir -p ${placeholder "out"}/lib
+    ln -s $PWD/src/libnm-client-impl/libnm.so.0 ${placeholder "out"}/lib/libnm.so.0
+  '';
+
+  postFixup = lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    cp -r ${buildPackages.networkmanager.devdoc} $devdoc
+    cp -r ${buildPackages.networkmanager.man} $man
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "NetworkManager";
+      attrPath = "networkmanager";
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Projects/NetworkManager";
+    description = "Network configuration and management tool";
+    license = licenses.gpl2Plus;
+    changelog = "https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/raw/${version}/NEWS";
+    maintainers = teams.freedesktop.members ++ (with maintainers; [ domenkozar obadz amaxine ]);
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/dmenu/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/dmenu/default.nix
new file mode 100644
index 000000000000..d64985adbce2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/dmenu/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, glib, fetchFromGitHub, networkmanager, python3Packages
+, gobject-introspection, procps }:
+
+let inherit (python3Packages) python pygobject3;
+in stdenv.mkDerivation rec {
+  pname = "networkmanager_dmenu";
+  version = "2.3.1";
+
+  src = fetchFromGitHub {
+    owner = "firecat53";
+    repo = "networkmanager-dmenu";
+    rev = "v${version}";
+    sha256 = "sha256-RbJE6JCElctBY5HDJa6SIJhm8g9BugncLF5kmambPPc=";
+  };
+
+  nativeBuildInputs = [ gobject-introspection ];
+  buildInputs = [ glib python pygobject3 networkmanager python3Packages.wrapPython procps ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/applications $out/share/doc/$pname
+    cp networkmanager_dmenu $out/bin/
+    cp networkmanager_dmenu.desktop $out/share/applications
+    cp README.md $out/share/doc/$pname/
+    cp config.ini.example $out/share/doc/$pname/
+  '';
+
+  postFixup = ''
+    makeWrapperArgs="\
+      --prefix GI_TYPELIB_PATH : $GI_TYPELIB_PATH \
+      --prefix PYTHONPATH : \"$(toPythonPath $out):$(toPythonPath ${pygobject3})\""
+    wrapPythonPrograms
+  '';
+
+
+  meta = with lib; {
+    description  = "Small script to manage NetworkManager connections with dmenu instead of nm-applet";
+    homepage     = "https://github.com/firecat53/networkmanager-dmenu";
+    license      = lib.licenses.mit;
+    maintainers  = [ lib.maintainers.jensbin ];
+    platforms    = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/fix-install-paths.patch b/nixpkgs/pkgs/tools/networking/networkmanager/fix-install-paths.patch
new file mode 100644
index 000000000000..2b2af0b2ad46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/fix-install-paths.patch
@@ -0,0 +1,16 @@
+diff --git a/meson.build b/meson.build
+index f71c9fd4aa..deddf28816 100644
+--- a/meson.build
++++ b/meson.build
+@@ -1022,9 +1022,9 @@ meson.add_install_script(
+   join_paths('tools', 'meson-post-install.sh'),
+   nm_datadir,
+   nm_bindir,
+-  nm_pkgconfdir,
++  nm_prefix + nm_pkgconfdir,
+   nm_pkglibdir,
+-  nm_pkgstatedir,
++  nm_prefix + nm_pkgstatedir,
+   nm_mandir,
+   nm_sysconfdir,
+   enable_docs ? '1' : '0',
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/fix-paths.patch b/nixpkgs/pkgs/tools/networking/networkmanager/fix-paths.patch
new file mode 100644
index 000000000000..6c97b672e679
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/fix-paths.patch
@@ -0,0 +1,143 @@
+diff --git a/data/84-nm-drivers.rules b/data/84-nm-drivers.rules
+index 148acade5c..6395fbfbe5 100644
+--- a/data/84-nm-drivers.rules
++++ b/data/84-nm-drivers.rules
+@@ -7,6 +7,6 @@ ACTION!="add|change|move", GOTO="nm_drivers_end"
+ # Determine ID_NET_DRIVER if there's no ID_NET_DRIVER or DRIVERS (old udev?)
+ ENV{ID_NET_DRIVER}=="?*", GOTO="nm_drivers_end"
+ DRIVERS=="?*", GOTO="nm_drivers_end"
+-PROGRAM="/bin/sh -c '/usr/sbin/ethtool -i $$1 |/usr/bin/sed -n s/^driver:\ //p' -- $env{INTERFACE}", ENV{ID_NET_DRIVER}="%c"
++PROGRAM="@runtimeShell@ -c '@ethtool@/bin/ethtool -i $$1 |@gnused@/bin/sed -n s/^driver:\ //p' -- $env{INTERFACE}", ENV{ID_NET_DRIVER}="%c"
+ 
+ LABEL="nm_drivers_end"
+diff --git a/data/NetworkManager.service.in b/data/NetworkManager.service.in
+index f09ae86ceb..b2ecb405ef 100644
+--- a/data/NetworkManager.service.in
++++ b/data/NetworkManager.service.in
+@@ -9,7 +9,7 @@ BindsTo=dbus.service
+ [Service]
+ Type=dbus
+ BusName=org.freedesktop.NetworkManager
+-ExecReload=/usr/bin/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 0
++ExecReload=@systemd@/bin/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 0
+ #ExecReload=/bin/kill -HUP $MAINPID
+ ExecStart=@sbindir@/NetworkManager --no-daemon
+ Restart=on-failure
+diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
+index 2038e2f205..90bf9fa28b 100644
+--- a/src/core/devices/nm-device.c
++++ b/src/core/devices/nm-device.c
+@@ -14275,14 +14275,14 @@ nm_device_start_ip_check(NMDevice *self)
+             gw = nm_l3_config_data_get_best_default_route(l3cd, AF_INET);
+             if (gw) {
+                 nm_inet4_ntop(NMP_OBJECT_CAST_IP4_ROUTE(gw)->gateway, buf);
+-                ping_binary = nm_utils_find_helper("ping", "/usr/bin/ping", NULL);
++                ping_binary = "@iputils@/bin/ping";
+                 log_domain  = LOGD_IP4;
+             }
+         } else if (priv->ip_data_6.state == NM_DEVICE_IP_STATE_READY) {
+             gw = nm_l3_config_data_get_best_default_route(l3cd, AF_INET6);
+             if (gw) {
+                 nm_inet6_ntop(&NMP_OBJECT_CAST_IP6_ROUTE(gw)->gateway, buf);
+-                ping_binary = nm_utils_find_helper("ping6", "/usr/bin/ping6", NULL);
++                ping_binary = "@iputils@/bin/ping";
+                 log_domain  = LOGD_IP6;
+             }
+         }
+diff --git a/src/libnm-client-impl/meson.build b/src/libnm-client-impl/meson.build
+index fb879dca47..13cc2867e1 100644
+--- a/src/libnm-client-impl/meson.build
++++ b/src/libnm-client-impl/meson.build
+@@ -173,7 +173,6 @@ if enable_introspection
+       input: libnm_core_settings_sources,
+       output: 'nm-propery-infos-' + info + '.xml',
+       command: [
+-        python.path(),
+         join_paths(meson.source_root(), 'tools', 'generate-docs-nm-property-infos.py'),
+         info,
+         '@OUTPUT@',
+@@ -230,7 +229,6 @@ if enable_introspection
+       'env',
+       'GI_TYPELIB_PATH=' + gi_typelib_path,
+       'LD_LIBRARY_PATH=' + ld_library_path,
+-      python.path(),
+       join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-gir.py'),
+       '--lib-path', meson.current_build_dir(),
+       '--gir', '@INPUT@',
+diff --git a/src/libnmc-base/nm-vpn-helpers.c b/src/libnmc-base/nm-vpn-helpers.c
+index cbe76f5f1c..8515f94994 100644
+--- a/src/libnmc-base/nm-vpn-helpers.c
++++ b/src/libnmc-base/nm-vpn-helpers.c
+@@ -284,15 +284,6 @@ nm_vpn_openconnect_authenticate_helper(NMSettingVpn *s_vpn, GPtrArray *secrets,
+     const char *const   *iter;
+     const char          *path;
+     const char          *opt;
+-    const char *const    DEFAULT_PATHS[] = {
+-        "/sbin/",
+-        "/usr/sbin/",
+-        "/usr/local/sbin/",
+-        "/bin/",
+-        "/usr/bin/",
+-        "/usr/local/bin/",
+-        NULL,
+-    };
+     const char *oc_argv[(12 + 2 * G_N_ELEMENTS(oc_property_args))];
+     const char *gw;
+     int         port;
+@@ -311,15 +302,7 @@ nm_vpn_openconnect_authenticate_helper(NMSettingVpn *s_vpn, GPtrArray *secrets,
+ 
+     port = extract_url_port(gw);
+ 
+-    path = nm_utils_file_search_in_paths("openconnect",
+-                                         "/usr/sbin/openconnect",
+-                                         DEFAULT_PATHS,
+-                                         G_FILE_TEST_IS_EXECUTABLE,
+-                                         NULL,
+-                                         NULL,
+-                                         error);
+-    if (!path)
+-        return FALSE;
++    path = "@openconnect@/bin/openconnect";
+ 
+     oc_argv[oc_argc++] = path;
+     oc_argv[oc_argc++] = "--authenticate";
+diff --git a/src/libnmc-setting/meson.build b/src/libnmc-setting/meson.build
+index cf8a21fc80..61d8e140e2 100644
+--- a/src/libnmc-setting/meson.build
++++ b/src/libnmc-setting/meson.build
+@@ -7,7 +7,6 @@ if enable_docs
+     input: [nm_settings_docs_xml_gir, nm_property_infos_xml['nmcli']],
+     output: 'settings-docs-input.xml',
+     command: [
+-      python.path(),
+       join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-merge.py'),
+       '@OUTPUT@',
+       nm_property_infos_xml['nmcli'],
+@@ -20,7 +19,6 @@ if enable_docs
+     input: settings_docs_input_xml,
+     output: 'settings-docs.h',
+     command: [
+-      python.path(),
+       join_paths(meson.source_root(), 'tools', 'generate-docs-settings-docs.py'),
+       '--output', '@OUTPUT@',
+       '--xml', '@INPUT@'
+diff --git a/src/tests/client/meson.build b/src/tests/client/meson.build
+index 8c36e40559..cfb6649a21 100644
+--- a/src/tests/client/meson.build
++++ b/src/tests/client/meson.build
+@@ -6,7 +6,6 @@ test(
+   args: [
+     build_root,
+     source_root,
+-    python.path(),
+     '--',
+     'TestNmcli',
+   ],
+@@ -23,7 +22,6 @@ if enable_nm_cloud_setup
+     args: [
+       build_root,
+       source_root,
+-      python.path(),
+       '--',
+       'TestNmCloudSetup',
+     ],
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/default.nix
new file mode 100644
index 000000000000..a1ef139008fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/default.nix
@@ -0,0 +1,87 @@
+{ stdenv
+, lib
+, fetchurl
+, substituteAll
+, openfortivpn
+, autoreconfHook
+, gettext
+, pkg-config
+, file
+, glib
+, gtk3
+, gtk4
+, networkmanager
+, ppp
+, libsecret
+, withGnome ? true
+, gnome
+, libnma
+, libnma-gtk4
+}:
+
+stdenv.mkDerivation rec {
+  pname = "NetworkManager-fortisslvpn";
+  version = "1.4.0";
+  name = "${pname}${lib.optionalString withGnome "-gnome"}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "sFXiY0m1FrI1hXmKs+9XtDawFIAOkqiscyz8jnbF2vo=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit openfortivpn;
+    })
+    ./support-ppp-2.5.0.patch
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gettext
+    pkg-config
+    file
+  ];
+
+  buildInputs = [
+    openfortivpn
+    networkmanager
+    ppp
+    glib
+  ] ++ lib.optionals withGnome [
+    gtk3
+    gtk4
+    libsecret
+    libnma
+    libnma-gtk4
+  ];
+
+  configureFlags = [
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--with-gtk4=${if withGnome then "yes" else "no"}"
+    "--localstatedir=/var"
+    "--enable-absolute-paths"
+  ];
+
+  installFlags = [
+    # the installer only creates an empty directory in localstatedir, so
+    # we can drop it
+    "localstatedir=."
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-fortisslvpn";
+      versionPolicy = "odd-unstable";
+    };
+    networkManagerPlugin = "VPN/nm-fortisslvpn-service.name";
+  };
+
+  meta = with lib; {
+    description = "NetworkManager’s FortiSSL plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/fix-paths.patch b/nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/fix-paths.patch
new file mode 100644
index 000000000000..9176a3bf042b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/fix-paths.patch
@@ -0,0 +1,12 @@
+diff --git a/src/nm-fortisslvpn-service.c b/src/nm-fortisslvpn-service.c
+index 6c340d0..995c981 100644
+--- a/src/nm-fortisslvpn-service.c
++++ b/src/nm-fortisslvpn-service.c
+@@ -182,6 +182,7 @@ nm_find_openfortivpn (void)
+ {
+ 	static const char *openfortivpn_binary_paths[] =
+ 		{
++			"@openfortivpn@/bin/openfortivpn",
+ 			"/usr/local/bin/openfortivpn",
+ 			"/usr/bin/openfortivpn",
+ 			NULL
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/support-ppp-2.5.0.patch b/nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/support-ppp-2.5.0.patch
new file mode 100644
index 000000000000..8aeae491e00d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/fortisslvpn/support-ppp-2.5.0.patch
@@ -0,0 +1,340 @@
+From 084ef529c5fb816927ca54866f66b340265aa9f6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Eivind=20N=C3=A6ss?= <eivnaes@yahoo.com>
+Date: Sat, 4 Mar 2023 21:20:43 +0000
+Subject: [PATCH] Adding support for compiling against pppd-2.5.0 (or master
+ branch)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Eivind Næss <eivnaes@yahoo.com>
+---
+ Makefile.am                                   |  5 +-
+ configure.ac                                  | 37 +++++++-
+ src/nm-fortisslvpn-pppd-compat.h              | 93 +++++++++++++++++++
+ src/nm-fortisslvpn-pppd-plugin.c              | 24 ++---
+ ...-status.h => nm-fortisslvpn-pppd-status.h} |  0
+ src/nm-fortisslvpn-service.c                  |  2 +-
+ 6 files changed, 145 insertions(+), 16 deletions(-)
+ create mode 100644 src/nm-fortisslvpn-pppd-compat.h
+ rename src/{nm-ppp-status.h => nm-fortisslvpn-pppd-status.h} (100%)
+
+diff --git a/Makefile.am b/Makefile.am
+index b2e5533..e1e5ec9 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -81,7 +81,7 @@ libexec_PROGRAMS += src/nm-fortisslvpn-service
+ src_nm_fortisslvpn_service_SOURCES = \
+ 	shared/nm-utils/nm-shared-utils.c \
+ 	shared/nm-utils/nm-shared-utils.h \
+-	src/nm-ppp-status.h \
++	src/nm-fortisslvpn-pppd-status.h \
+ 	src/nm-fortisslvpn-service.h \
+ 	src/nm-fortisslvpn-service.c \
+ 	shared/nm-fortissl-properties.c \
+@@ -106,7 +106,8 @@ src_nm_fortisslvpn_pppd_plugin_la_SOURCES = \
+ 	shared/nm-utils/nm-shared-utils.c \
+ 	shared/nm-utils/nm-shared-utils.h \
+ 	src/nm-fortisslvpn-pppd-plugin.c \
+-	src/nm-ppp-status.h
++	src/nm-fortisslvpn-pppd-compat.h \
++	src/nm-fortisslvpn-pppd-status.h
+ nodist_src_nm_fortisslvpn_pppd_plugin_la_SOURCES = \
+ 	src/nm-fortisslvpn-pppd-service-dbus.h
+ src_nm_fortisslvpn_pppd_plugin_la_CPPFLAGS = $(src_cppflags)
+diff --git a/configure.ac b/configure.ac
+index a998707..877493e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -19,7 +19,10 @@ AC_PROG_CC
+ AM_PROG_CC_C_O
+ AC_PROG_INSTALL
+ AC_PROG_LIBTOOL
++AC_PROG_CPP
++AC_PROG_EGREP
+ AC_PATH_PROG(GLIB_COMPILE_RESOURCES, glib-compile-resources)
++PKG_PROG_PKG_CONFIG()
+ 
+ AC_GNU_SOURCE
+ 
+@@ -37,20 +40,50 @@ dnl
+ dnl Required headers
+ dnl
+ AC_HEADER_STDC
+-AC_CHECK_HEADERS(fcntl.h paths.h sys/ioctl.h sys/time.h syslog.h unistd.h)
++AC_CHECK_HEADERS(fcntl.h paths.h stdarg.h stdbool.h sys/ioctl.h sys/time.h syslog.h unistd.h)
+ 
+ AC_CHECK_HEADERS(pppd/pppd.h,,
+   AC_MSG_ERROR(couldn't find pppd.h. pppd development headers are required.))
+ 
++dnl
++dnl Check the presense of other pppd/*.h files
++AC_CHECK_HEADERS([
++    pppd/chap.h
++    pppd/chap-new.h
++    pppd/chap_ms.h
++    ])
++
++dnl
++dnl Versions >= 2.5.0 will have pkg-config support
++PKG_CHECK_EXISTS([pppd],
++    [AS_VAR_SET([pppd_pkgconfig_support],[yes])])
++
++dnl
++dnl Get the version of pppd using pkg-config, assume 2.4.9 if not present
++PPPD_VERSION=2.4.5
++if test x"$pppd_pkgconfig_support" = xyes; then
++    PPPD_VERSION=`$PKG_CONFIG --modversion pppd`
++fi
++
++
+ AC_ARG_WITH([pppd-plugin-dir], AS_HELP_STRING([--with-pppd-plugin-dir=DIR], [path to the pppd plugins directory]))
+ 
+ if test -n "$with_pppd_plugin_dir" ; then
+ 	PPPD_PLUGIN_DIR="$with_pppd_plugin_dir"
+ else
+-	PPPD_PLUGIN_DIR="${libdir}/pppd/2.4.5"
++	PPPD_PLUGIN_DIR="${libdir}/pppd/$PPPD_VERSION"
+ fi
+ AC_SUBST(PPPD_PLUGIN_DIR)
+ 
++dnl The version of pppd dictates what code can be included, i.e. enable use of
++dnl   #if WITH_PPP_VERSION >= PPP_VERSION(2,5,0) in the code
++AC_DEFINE_UNQUOTED([PPP_VERSION(x,y,z)],
++    [((x & 0xFF) << 16 | (y & 0xFF) << 8 | (z & 0xFF) << 0)],
++    [Macro to help determine the particular version of pppd])
++PPP_VERSION=$(echo $PPPD_VERSION | sed -e "s/\./\,/g")
++AC_DEFINE_UNQUOTED(WITH_PPP_VERSION, PPP_VERSION($PPP_VERSION),
++    [The real version of pppd represented as an int])
++
+ dnl
+ dnl Checks for typedefs, structures, and compiler characteristics.
+ dnl
+diff --git a/src/nm-fortisslvpn-pppd-compat.h b/src/nm-fortisslvpn-pppd-compat.h
+new file mode 100644
+index 0000000..9a02908
+--- /dev/null
++++ b/src/nm-fortisslvpn-pppd-compat.h
+@@ -0,0 +1,93 @@
++/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
++/* nm-sstp-service - sstp (and other pppd) integration with NetworkManager
++ *
++ * Copyright (C) Eivind Næss, eivnaes@yahoo.com
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ */
++
++#ifndef __NM_FORTISSLVPN_PPPD_COMPAT_H__
++#define __NM_FORTISSLVPN_PPPD_COMPAT_H__
++
++#define INET6      1
++
++// PPP < 2.5.0 defines and exports VERSION which overlaps with current package VERSION define.
++//   this silly macro magic is to work around that.
++
++#undef VERSION
++#include <pppd/pppd.h>
++
++#ifndef PPPD_VERSION
++#define PPPD_VERSION VERSION
++#endif
++
++#include <pppd/fsm.h>
++#include <pppd/ccp.h>
++#include <pppd/eui64.h>
++#include <pppd/ipcp.h>
++#include <pppd/ipv6cp.h>
++#include <pppd/eap.h>
++#include <pppd/upap.h>
++
++#ifdef HAVE_PPPD_CHAP_H
++ #include <pppd/chap.h>
++#endif
++
++#ifdef HAVE_PPPD_CHAP_NEW_H
++ #include <pppd/chap-new.h>
++#endif
++
++#ifdef HAVE_PPPD_CHAP_MS_H
++ #include <pppd/chap_ms.h>
++#endif
++
++#ifndef PPP_PROTO_CHAP
++#define PPP_PROTO_CHAP              0xc223
++#endif 
++
++#ifndef PPP_PROTO_EAP
++#define PPP_PROTO_EAP               0xc227
++#endif
++
++#if WITH_PPP_VERSION < PPP_VERSION(2,5,0)
++
++static inline bool debug_on(void)
++{
++    return debug;
++}
++
++static inline const char *ppp_ipparam(void)
++{
++    return ipparam;
++}
++
++static inline int ppp_ifunit(void)
++{
++    return ifunit;
++}
++
++static inline const char *ppp_ifname(void)
++{
++    return ifname;
++}
++
++static inline int ppp_get_mtu(int idx)
++{
++    return netif_get_mtu(idx);
++}
++
++#endif // #if WITH_PPP_VERSION < PPP_VERSION(2,5,0)
++#endif // #ifdef __NM_FORTISSLVPN_PPPD_COMPAT_H__
+diff --git a/src/nm-fortisslvpn-pppd-plugin.c b/src/nm-fortisslvpn-pppd-plugin.c
+index f2ad262..c2efb9a 100644
+--- a/src/nm-fortisslvpn-pppd-plugin.c
++++ b/src/nm-fortisslvpn-pppd-plugin.c
+@@ -23,12 +23,6 @@
+ #define ___CONFIG_H__
+ #include <config.h>
+ 
+-#include <pppd/pppd.h>
+-#include <pppd/fsm.h>
+-#include <pppd/ipcp.h>
+-
+-#include "nm-default.h"
+-
+ #include <sys/types.h>
+ #include <string.h>
+ #include <sys/socket.h>
+@@ -42,10 +36,12 @@
+ #include <grp.h>
+ #include <glib/gstdio.h>
+ 
++#include "nm-fortisslvpn-pppd-status.h"
++#include "nm-fortisslvpn-pppd-compat.h"
+ #include "nm-fortisslvpn-pppd-service-dbus.h"
+-#include "nm-fortisslvpn-service.h"
+-#include "nm-ppp-status.h"
+ 
++#include "nm-default.h"
++#include "nm-fortisslvpn-service.h"
+ #include "nm-utils/nm-shared-utils.h"
+ #include "nm-utils/nm-vpn-plugin-macros.h"
+ 
+@@ -80,7 +76,7 @@ static struct {
+ 
+ int plugin_init (void);
+ 
+-char pppd_version[] = VERSION;
++char pppd_version[] = PPPD_VERSION;
+ 
+ static void
+ chroot_sandbox (void)
+@@ -296,7 +292,7 @@ get_ip4_routes (in_addr_t ouraddr)
+ static void
+ nm_ip_up (void *data, int arg)
+ {
+-	guint32 pppd_made_up_address = htonl (0x0a404040 + ifunit);
++	guint32 pppd_made_up_address = htonl (0x0a404040 + ppp_ifunit());
+ 	ipcp_options opts = ipcp_gotoptions[0];
+ 	ipcp_options peer_opts = ipcp_hisoptions[0];
+ 	GVariantBuilder builder;
+@@ -317,7 +313,7 @@ nm_ip_up (void *data, int arg)
+ 
+ 	g_variant_builder_add (&builder, "{sv}",
+ 	                       NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV,
+-	                       g_variant_new_string (ifname));
++	                       g_variant_new_string (ppp_ifname()));
+ 
+ 	str = g_getenv ("VPN_GATEWAY");
+ 	if (str) {
+@@ -442,8 +438,14 @@ plugin_init (void)
+ 		return -1;
+ 	}
+ 
++#if WITH_PPP_VERSION < PPP_VERSION(2,5,0)
+ 	add_notifier (&phasechange, nm_phasechange, NULL);
+ 	add_notifier (&ip_up_notifier, nm_ip_up, NULL);
+ 	add_notifier (&exitnotify, nm_exit_notify, NULL);
++#else
++	ppp_add_notify (NF_PHASE_CHANGE, nm_phasechange, NULL);
++	ppp_add_notify (NF_IP_UP, nm_ip_up, NULL);
++	ppp_add_notify (NF_EXIT, nm_exit_notify, NULL);
++#endif	
+ 	return 0;
+ }
+diff --git a/src/nm-ppp-status.h b/src/nm-fortisslvpn-pppd-status.h
+similarity index 100%
+rename from src/nm-ppp-status.h
+rename to src/nm-fortisslvpn-pppd-status.h
+diff --git a/src/nm-fortisslvpn-service.c b/src/nm-fortisslvpn-service.c
+index 6c340d0..a8483c2 100644
+--- a/src/nm-fortisslvpn-service.c
++++ b/src/nm-fortisslvpn-service.c
+@@ -40,7 +40,7 @@
+ #include <glib/gstdio.h>
+ 
+ #include "nm-fortissl-properties.h"
+-#include "nm-ppp-status.h"
++#include "nm-fortisslvpn-pppd-status.h"
+ #include "nm-fortisslvpn-pppd-service-dbus.h"
+ #include "nm-utils/nm-shared-utils.h"
+ #include "nm-utils/nm-vpn-plugin-macros.h"
+-- 
+GitLab
+
+
+
+From 8773f772d39f8eee6edc1fd2e5437c754ed41e1e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Eivind=20N=C3=A6ss?= <eivnaes@yahoo.com>
+Date: Sat, 4 Mar 2023 21:29:54 +0000
+Subject: [PATCH] Fixing configure.ac from previous change
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Eivind Næss <eivnaes@yahoo.com>
+---
+ configure.ac | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 877493e..a5b4abb 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -47,11 +47,7 @@ AC_CHECK_HEADERS(pppd/pppd.h,,
+ 
+ dnl
+ dnl Check the presense of other pppd/*.h files
+-AC_CHECK_HEADERS([
+-    pppd/chap.h
+-    pppd/chap-new.h
+-    pppd/chap_ms.h
+-    ])
++AC_CHECK_HEADERS(pppd/chap.h pppd/chap-new.h pppd/chap_ms.h)
+ 
+ dnl
+ dnl Versions >= 2.5.0 will have pkg-config support
+-- 
+GitLab
+
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/iodine/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/iodine/default.nix
new file mode 100644
index 000000000000..aff411ea0ed9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/iodine/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchFromGitLab, substituteAll, autoreconfHook, iodine, intltool, pkg-config, networkmanager, libsecret, gtk3
+, withGnome ? true, gnome, fetchpatch, libnma, glib }:
+
+let
+  pname = "NetworkManager-iodine";
+  version = "unstable-2019-11-05";
+in stdenv.mkDerivation {
+  name = "${pname}${lib.optionalString withGnome "-gnome"}-${version}";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "network-manager-iodine";
+    rev = "2ef0abf089b00a0546f214dde0d45e63f2990b79";
+    sha256 = "1ps26fr9b1yyafj7lrzf2kmaxb0ipl0mhagch5kzrjdsc5xkajz7";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit iodine;
+    })
+    # Don't use etc/dbus-1/system.d
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/network-manager-iodine/merge_requests/2.patch";
+      sha256 = "108pkf0mddj32s46k7jkmpwcaq2ylci4dqpp7wck3zm9q2jffff2";
+    })
+  ];
+
+  buildInputs = [ iodine networkmanager glib ]
+    ++ lib.optionals withGnome [ gtk3 libsecret libnma ];
+
+  nativeBuildInputs = [ intltool autoreconfHook pkg-config ];
+
+  # glib-2.62 deprecations
+  env.NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  preConfigure = "intltoolize";
+  configureFlags = [
+    "--without-libnm-glib"
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--localstatedir=/" # needed for the management socket under /run/NetworkManager
+    "--enable-absolute-paths"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-iodine";
+    };
+    networkManagerPlugin = "VPN/nm-iodine-service.name";
+  };
+
+  meta = with lib; {
+    description = "NetworkManager's iodine plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/iodine/fix-paths.patch b/nixpkgs/pkgs/tools/networking/networkmanager/iodine/fix-paths.patch
new file mode 100644
index 000000000000..d32dbfadbafa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/iodine/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/src/nm-iodine-service.c
++++ b/src/nm-iodine-service.c
+@@ -62,7 +62,7 @@
+ 
+ static const char *iodine_binary_paths[] =
+ {
+-	"/usr/bin/iodine",
++	"@iodine@/bin/iodine",
+ 	"/usr/sbin/iodine",
+ 	"/usr/local/bin/iodine",
+ 	"/usr/local/sbin/iodine",
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/l2tp/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/l2tp/default.nix
new file mode 100644
index 000000000000..cf7c1c86d3bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/l2tp/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, lib
+, substituteAll
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, gtk3
+, gtk4
+, networkmanager
+, ppp
+, xl2tpd
+, strongswan
+, libsecret
+, withGnome ? true
+, libnma
+, libnma-gtk4
+, glib
+, openssl
+, nss
+}:
+
+stdenv.mkDerivation rec {
+  name = "${pname}${lib.optionalString withGnome "-gnome"}-${version}";
+  pname = "NetworkManager-l2tp";
+  version = "1.20.10";
+
+  src = fetchFromGitHub {
+    owner = "nm-l2tp";
+    repo = "network-manager-l2tp";
+    rev = version;
+    hash = "sha256-EfWvh4uSzWFadZAHTqsKa3un2FQ6WUbHLoHo9gSS7bE=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit strongswan xl2tpd;
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    networkmanager
+    ppp
+    glib
+    openssl
+    nss
+  ] ++ lib.optionals withGnome [
+    gtk3
+    gtk4
+    libsecret
+    libnma
+    libnma-gtk4
+  ];
+
+  configureFlags = [
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--with-gtk4=${if withGnome then "yes" else "no"}"
+    "--localstatedir=/var"
+    "--enable-absolute-paths"
+  ];
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    networkManagerPlugin = "VPN/nm-l2tp-service.name";
+  };
+
+  meta = with lib; {
+    description = "L2TP plugin for NetworkManager";
+    inherit (networkmanager.meta) platforms;
+    homepage = "https://github.com/nm-l2tp/network-manager-l2tp";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ abbradar obadz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/l2tp/fix-paths.patch b/nixpkgs/pkgs/tools/networking/networkmanager/l2tp/fix-paths.patch
new file mode 100644
index 000000000000..d9ee0dd49975
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/l2tp/fix-paths.patch
@@ -0,0 +1,22 @@
+diff --git a/shared/utils.c b/shared/utils.c
+index 453e277..28716a5 100644
+--- a/shared/utils.c
++++ b/shared/utils.c
+@@ -39,7 +39,7 @@ check_ipsec_daemon(const char *path)
+ const char *
+ nm_find_ipsec(void)
+ {
+-    static const char *ipsec_binary_paths[] = {"/usr/bin/ipsec",
++    static const char *ipsec_binary_paths[] = {"@strongswan@/bin/ipsec",
+                                                "/sbin/ipsec",
+                                                "/usr/sbin/ipsec",
+                                                "/usr/local/sbin/ipsec",
+@@ -70,7 +70,7 @@ nm_find_l2tpd(NML2tpL2tpDaemon *l2tp_daemon)
+                                                "/usr/local/sbin/kl2tpd",
+                                                NULL};
+ 
+-    static const char *xl2tp_binary_paths[] = {"/usr/bin/xl2tpd",
++    static const char *xl2tp_binary_paths[] = {"@xl2tpd@/bin/xl2tpd",
+                                                "/sbin/xl2tpd",
+                                                "/usr/sbin/xl2tpd",
+                                                "/usr/local/sbin/xl2tpd",
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/libnma/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/libnma/default.nix
new file mode 100644
index 000000000000..a47b23e9634c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/libnma/default.nix
@@ -0,0 +1,114 @@
+{ stdenv
+, fetchurl
+, meson
+, mesonEmulatorHook
+, ninja
+, gettext
+, gtk-doc
+, pkg-config
+, vala
+, networkmanager
+, gnome
+, isocodes
+, libxml2
+, docbook_xsl
+, docbook_xml_dtd_43
+, mobile-broadband-provider-info
+, gobject-introspection
+, gtk3
+, withGtk4 ? false
+, gtk4
+, withGnome ? true
+, gcr_4
+, glib
+, lib
+, _experimental-update-script-combinators
+, makeHardcodeGsettingsPatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libnma";
+  version = "1.10.6";
+
+  outputs = [ "out" "dev" "devdoc" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "U6b7KxkK03xZhsrtPpi+3nw8YCOZ7k+TyPwFQwPXbas=";
+  };
+
+  patches = [
+    # Needed for wingpanel-indicator-network and switchboard-plug-network
+    ./hardcode-gsettings.patch
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    gettext
+    pkg-config
+    gobject-introspection
+    gtk-doc
+    docbook_xsl
+    docbook_xml_dtd_43
+    libxml2
+    vala
+  ] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
+    mesonEmulatorHook
+  ];
+
+  buildInputs = [
+    gtk3
+    networkmanager
+    isocodes
+    mobile-broadband-provider-info
+  ] ++ lib.optionals withGtk4 [
+    gtk4
+  ] ++ lib.optionals withGnome [
+    # advanced certificate chooser
+    gcr_4
+  ];
+
+  mesonFlags = [
+    "-Dgcr=${lib.boolToString withGnome}"
+    "-Dlibnma_gtk4=${lib.boolToString withGtk4}"
+  ];
+
+  postPatch = ''
+    substituteInPlace src/nma-ws/nma-eap.c --subst-var-by \
+      NM_APPLET_GSETTINGS ${glib.makeSchemaPath "$out" "$name"}
+  '';
+
+  postInstall = ''
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  passthru = {
+    hardcodeGsettingsPatch = makeHardcodeGsettingsPatch {
+      schemaIdToVariableMapping = {
+        "org.gnome.nm-applet.eap" = "NM_APPLET_GSETTINGS";
+      };
+      inherit src;
+    };
+    updateScript =
+      let
+        updateSource = gnome.updateScript {
+          packageName = "libnma";
+          versionPolicy = "odd-unstable";
+        };
+        updateGsettingsPatch = _experimental-update-script-combinators.copyAttrOutputToFile "libnma.hardcodeGsettingsPatch" ./hardcode-gsettings.patch;
+      in
+      _experimental-update-script-combinators.sequence [
+        updateSource
+        updateGsettingsPatch
+      ];
+  };
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/GNOME/libnma";
+    description = "NetworkManager UI utilities (libnm version)";
+    license = licenses.gpl2Plus; # Mix of GPL and LPGL 2+
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/libnma/hardcode-gsettings.patch b/nixpkgs/pkgs/tools/networking/networkmanager/libnma/hardcode-gsettings.patch
new file mode 100644
index 000000000000..a68f96113d34
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/libnma/hardcode-gsettings.patch
@@ -0,0 +1,24 @@
+diff --git a/src/nma-ws/nma-eap.c b/src/nma-ws/nma-eap.c
+index fa36907..81df821 100644
+--- a/src/nma-ws/nma-eap.c
++++ b/src/nma-ws/nma-eap.c
+@@ -252,7 +252,18 @@ _get_ca_ignore_settings (NMConnection *connection)
+ 	g_return_val_if_fail (uuid && *uuid, NULL);
+ 
+ 	path = g_strdup_printf ("/org/gnome/nm-applet/eap/%s/", uuid);
+-	settings = g_settings_new_with_path ("org.gnome.nm-applet.eap", path);
++	{
++		g_autoptr(GSettingsSchemaSource) schema_source;
++		g_autoptr(GSettingsSchema) schema;
++		schema_source = g_settings_schema_source_new_from_directory("@NM_APPLET_GSETTINGS@",
++									    g_settings_schema_source_get_default(),
++									    TRUE,
++									    NULL);
++		schema = g_settings_schema_source_lookup(schema_source,
++							 "org.gnome.nm-applet.eap",
++							 FALSE);
++		settings = g_settings_new_full(schema, NULL, path);
++	}
+ 	g_free (path);
+ 
+ 	return settings;
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/openconnect/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/openconnect/default.nix
new file mode 100644
index 000000000000..426039b19f60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/openconnect/default.nix
@@ -0,0 +1,81 @@
+{ stdenv
+, lib
+, fetchurl
+, substituteAll
+, glib
+, libxml2
+, openconnect
+, intltool
+, pkg-config
+, networkmanager
+, gcr
+, libsecret
+, file
+, gtk3
+, webkitgtk_4_1
+, libnma
+, libnma-gtk4
+, gtk4
+, withGnome ? true
+, gnome
+, kmod
+}:
+
+stdenv.mkDerivation rec {
+  pname = "NetworkManager-openconnect";
+  version = "1.2.10";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/NetworkManager-openconnect/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "hEtr9k7K25e0pox3bbiapebuflm9JLAYAihAaGMTZGQ=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit kmod openconnect;
+    })
+  ];
+
+  buildInputs = [
+    glib
+    libxml2
+    openconnect
+    networkmanager
+    webkitgtk_4_1 # required, for SSO
+  ] ++ lib.optionals withGnome [
+    gtk3
+    libnma
+    libnma-gtk4
+    gtk4
+    gcr
+    libsecret
+  ];
+
+  nativeBuildInputs = [
+    intltool
+    pkg-config
+    file
+  ];
+
+  configureFlags = [
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--with-gtk4=${if withGnome then "yes" else "no"}"
+    "--enable-absolute-paths"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-openconnect";
+      versionPolicy = "odd-unstable";
+    };
+    networkManagerPlugin = "VPN/nm-openconnect-service.name";
+  };
+
+  meta = with lib; {
+    description = "NetworkManager’s OpenConnect plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/openconnect/fix-paths.patch b/nixpkgs/pkgs/tools/networking/networkmanager/openconnect/fix-paths.patch
new file mode 100644
index 000000000000..9b342f5bd08b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/openconnect/fix-paths.patch
@@ -0,0 +1,20 @@
+--- a/src/nm-openconnect-service.c
++++ b/src/nm-openconnect-service.c
+@@ -60,7 +60,7 @@
+ 
+ static const char *openconnect_binary_paths[] =
+ {
+-	"/usr/bin/openconnect",
++	"@openconnect@/bin/openconnect",
+ 	"/usr/sbin/openconnect",
+ 	"/usr/local/bin/openconnect",
+ 	"/usr/local/sbin/openconnect",
+@@ -734,7 +734,7 @@
+ 
+ 	_LOGD ("nm-openconnect-service (version " DIST_VERSION ") starting...");
+ 
+-	if (system ("/sbin/modprobe tun") == -1)
++	if (system ("@kmod@/bin/modprobe tun") == -1)
+ 		exit (EXIT_FAILURE);
+ 
+ 	if (bus_name)
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/openvpn/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/openvpn/default.nix
new file mode 100644
index 000000000000..aeaf57a137a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/openvpn/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, lib
+, fetchurl
+, substituteAll
+, openvpn
+, gettext
+, libxml2
+, pkg-config
+, file
+, networkmanager
+, libsecret
+, glib
+, gtk3
+, gtk4
+, withGnome ? true
+, gnome
+, kmod
+, libnma
+, libnma-gtk4
+}:
+
+stdenv.mkDerivation rec {
+  pname = "NetworkManager-openvpn";
+  version = "1.10.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/NetworkManager-openvpn/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "YvDyqHgiIbkj8hKsKo67wQAu/WqQ7pRdrUrftW0HbSE=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit kmod openvpn;
+    })
+  ];
+
+  nativeBuildInputs = [
+    gettext
+    pkg-config
+    file
+    libxml2
+  ];
+
+  buildInputs = [
+    openvpn
+    networkmanager
+    glib
+  ] ++ lib.optionals withGnome [
+    gtk3
+    gtk4
+    libsecret
+    libnma
+    libnma-gtk4
+  ];
+
+  configureFlags = [
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--with-gtk4=${if withGnome then "yes" else "no"}"
+    "--localstatedir=/" # needed for the management socket under /run/NetworkManager
+    "--enable-absolute-paths"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-openvpn";
+      versionPolicy = "odd-unstable";
+    };
+    networkManagerPlugin = "VPN/nm-openvpn-service.name";
+  };
+
+  meta = with lib; {
+    description = "NetworkManager's OpenVPN plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/openvpn/fix-paths.patch b/nixpkgs/pkgs/tools/networking/networkmanager/openvpn/fix-paths.patch
new file mode 100644
index 000000000000..b735da28dca1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/openvpn/fix-paths.patch
@@ -0,0 +1,34 @@
+--- a/properties/nm-openvpn-editor.c
++++ b/properties/nm-openvpn-editor.c
+@@ -775,8 +775,7 @@
+ nm_find_openvpn (void)
+ {
+ 	static const char *openvpn_binary_paths[] = {
+-		"/usr/sbin/openvpn",
+-		"/sbin/openvpn",
++		"@openvpn@/bin/openvpn",
+ 		NULL
+ 	};
+ 	const char  **openvpn_binary = openvpn_binary_paths;
+--- a/src/nm-openvpn-service.c
++++ b/src/nm-openvpn-service.c
+@@ -522,9 +522,7 @@
+ openvpn_binary_find_exepath (void)
+ {
+ 	static const char *paths[] = {
+-		"/usr/sbin/openvpn",
+-		"/sbin/openvpn",
+-		"/usr/local/sbin/openvpn",
++		"@openvpn@/bin/openvpn",
+ 	};
+ 	int i;
+ 
+@@ -2326,7 +2324,7 @@
+ 	_LOGD ("nm-openvpn-service (version " DIST_VERSION ") starting...");
+ 
+ 	if (   !g_file_test ("/sys/class/misc/tun", G_FILE_TEST_EXISTS)
+-	    && (system ("/sbin/modprobe tun") == -1))
++	    && (system ("@kmod@/bin/modprobe tun") == -1))
+ 		return EXIT_FAILURE;
+ 
+ 	plugin = nm_openvpn_plugin_new (bus_name);
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/sstp/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/sstp/default.nix
new file mode 100644
index 000000000000..4178454c4292
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/sstp/default.nix
@@ -0,0 +1,79 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, autoreconfHook
+, file
+, glib
+, gnome
+, gtk3
+, gtk4
+, gettext
+, libnma
+, libnma-gtk4
+, libsecret
+, networkmanager
+, pkg-config
+, ppp
+, sstp
+, withGnome ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "NetworkManager-sstp";
+  version = "unstable-2023-03-09";
+  name = "${pname}${lib.optionalString withGnome "-gnome"}-${version}";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "network-manager-sstp";
+    rev = "852db07dc7d19c37e398d831410bd94c8659a210";
+    hash = "sha256-DxgcuTza2G5a7F2mBtDaEuynu7F1Ex9pnAESAjyoRq8=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    file
+    gettext
+    pkg-config
+  ];
+
+  buildInputs = [
+    sstp
+    networkmanager
+    glib
+    ppp
+  ] ++ lib.optionals withGnome [
+    gtk3
+    gtk4
+    libsecret
+    libnma
+    libnma-gtk4
+  ];
+
+  postPatch = ''
+    sed -i 's#/sbin/pppd#${ppp}/bin/pppd#' src/nm-sstp-service.c
+    sed -i 's#/sbin/sstpc#${sstp}/bin/sstpc#' src/nm-sstp-service.c
+  '';
+
+  configureFlags = [
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--with-gtk4=${if withGnome then "yes" else "no"}"
+    "--with-pppd-plugin-dir=$(out)/lib/pppd/2.5.0"
+    "--enable-absolute-paths"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-sstp";
+    };
+    networkManagerPlugin = "VPN/nm-sstp-service.name";
+  };
+
+  meta = with lib; {
+    description = "NetworkManager's sstp plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/strongswan/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/strongswan/default.nix
new file mode 100644
index 000000000000..f46fb1272087
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/strongswan/default.nix
@@ -0,0 +1,58 @@
+{ stdenv
+, lib
+, fetchurl
+, intltool
+, pkg-config
+, networkmanager
+, strongswanNM
+, gtk3
+, gtk4
+, libsecret
+, libnma
+, libnma-gtk4
+}:
+
+stdenv.mkDerivation rec {
+  pname = "NetworkManager-strongswan";
+  version = "1.6.0";
+
+  src = fetchurl {
+    url = "https://download.strongswan.org/NetworkManager/${pname}-${version}.tar.bz2";
+    sha256 = "bbyA9qCboM9hBKMXhJWXgEFN13Fl4pY6zWZXwowlRMI=";
+  };
+
+  nativeBuildInputs = [
+    intltool
+    pkg-config
+  ];
+
+  buildInputs = [
+    networkmanager
+    strongswanNM
+    libsecret
+    gtk3
+    gtk4
+    libnma
+    libnma-gtk4
+  ];
+
+  configureFlags = [
+    "--disable-more-warnings" # disables -Werror
+    "--with-charon=${strongswanNM}/libexec/ipsec/charon-nm"
+    "--with-nm-libexecdir=${placeholder "out"}/libexec"
+    "--with-nm-plugindir=${placeholder "out"}/lib/NetworkManager"
+    "--with-gtk4"
+  ];
+
+  PKG_CONFIG_LIBNM_VPNSERVICEDIR = "${placeholder "out"}/lib/NetworkManager/VPN";
+
+  passthru = {
+    networkManagerPlugin = "VPN/nm-strongswan-service.name";
+  };
+
+  meta = with lib; {
+    description = "NetworkManager's strongswan plugin";
+    inherit (networkmanager.meta) platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/tray.nix b/nixpkgs/pkgs/tools/networking/networkmanager/tray.nix
new file mode 100644
index 000000000000..69b1e3023b04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/tray.nix
@@ -0,0 +1,31 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkg-config, qttools, qtbase, networkmanager-qt, modemmanager-qt }:
+
+mkDerivation rec {
+  pname = "nm-tray";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "palinek";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-JTH1cmkgdW2aRWMYPRvOAvCJz0ClCIpjUtcWcqJQGSU=";
+  };
+
+  postPatch = ''
+    sed -i -e '1i#include <QMetaEnum>' src/nmmodel.cpp
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config qttools ];
+
+  cmakeFlags = [ "-DWITH_MODEMMANAGER_SUPPORT=ON" ];
+
+  buildInputs = [ qtbase networkmanager-qt modemmanager-qt ];
+
+  meta = with lib; {
+    description = "Simple Network Manager frontend written in Qt";
+    homepage = "https://github.com/palinek/nm-tray";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dtzWill ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/vpnc/default.nix b/nixpkgs/pkgs/tools/networking/networkmanager/vpnc/default.nix
new file mode 100644
index 000000000000..a63039b2dea9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/vpnc/default.nix
@@ -0,0 +1,75 @@
+{ stdenv
+, lib
+, fetchurl
+, substituteAll
+, vpnc
+, intltool
+, pkg-config
+, networkmanager
+, libsecret
+, gtk3
+, gtk4
+, withGnome ? true
+, gnome
+, glib
+, kmod
+, file
+, libnma
+, libnma-gtk4
+}:
+
+stdenv.mkDerivation rec {
+  pname = "NetworkManager-vpnc";
+  version = "1.2.8";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/NetworkManager-vpnc/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1l4xqlPI/cP95++EpNqpeaYFwj/THO/2R79+qqma+8w=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit vpnc kmod;
+    })
+  ];
+
+  nativeBuildInputs = [
+    intltool
+    pkg-config
+    file
+  ];
+
+  buildInputs = [
+    vpnc
+    networkmanager
+    glib
+  ] ++ lib.optionals withGnome [
+    gtk3
+    gtk4
+    libsecret
+    libnma
+    libnma-gtk4
+  ];
+
+  configureFlags = [
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--with-gtk4=${if withGnome then "yes" else "no"}"
+    "--enable-absolute-paths"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-vpnc";
+      versionPolicy = "odd-unstable";
+    };
+    networkManagerPlugin = "VPN/nm-vpnc-service.name";
+  };
+
+  meta = with lib; {
+    description = "NetworkManager's VPNC plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/networkmanager/vpnc/fix-paths.patch b/nixpkgs/pkgs/tools/networking/networkmanager/vpnc/fix-paths.patch
new file mode 100644
index 000000000000..98238ac01f76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/networkmanager/vpnc/fix-paths.patch
@@ -0,0 +1,31 @@
+--- a/properties/nm-vpnc-editor-plugin.c
++++ b/properties/nm-vpnc-editor-plugin.c
+@@ -161,7 +161,7 @@
+ 	GError *error = NULL;
+ 
+ 	const char *decrypt_possible_paths[] = {
+-		"/usr/lib/vpnc/cisco-decrypt",
++		"@vpnc@/bin/cisco-decrypt",
+ 		"/usr/bin/cisco-decrypt",
+ 		NULL
+ 	};
+--- a/src/nm-vpnc-service.c
++++ b/src/nm-vpnc-service.c
+@@ -610,7 +610,7 @@
+ find_vpnc (void)
+ {
+ 	static const char *vpnc_paths[] = {
+-		"/usr/sbin/vpnc",
++		"@vpnc@/bin/vpnc",
+ 		"/sbin/vpnc",
+ 		"/usr/local/sbin/vpnc",
+ 		NULL
+@@ -1308,7 +1308,7 @@
+ 	_LOGD ("   vpnc interactive mode is %s", interactive_available ? "enabled" : "disabled");
+ 	_LOGD ("   uses%s --bus-name \"%s\"", bus_name_free ? "" : " default", bus_name);
+ 
+-	if (system ("/sbin/modprobe tun") == -1)
++	if (system ("@kmod@/bin/modprobe tun") == -1)
+ 		exit (EXIT_FAILURE);
+ 
+ 	plugin = nm_vpnc_plugin_new (bus_name);
diff --git a/nixpkgs/pkgs/tools/networking/nexttrace/default.nix b/nixpkgs/pkgs/tools/networking/nexttrace/default.nix
new file mode 100644
index 000000000000..2ad7764b1452
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nexttrace/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "nexttrace";
+  version = "1.2.8";
+
+  src = fetchFromGitHub {
+    owner = "nxtrace";
+    repo = "NTrace-core";
+    rev = "v${version}";
+    sha256 = "sha256-fd6d9wtapztPZpbRn73q35D6LfHpfjF4KRBgokWIWYc=";
+  };
+  vendorHash = "sha256-xGE2iUCWMNfiI18N8dyubuhhaY5JD/sy1uRSDyTSqVA=";
+
+  doCheck = false; # Tests require a network connection.
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/nxtrace/NTrace-core/config.Version=v${version}"
+  ];
+
+  postInstall = ''
+    mv $out/bin/NTrace-core $out/bin/nexttrace
+  '';
+
+  meta = with lib; {
+    description = "An open source visual route tracking CLI tool";
+    homepage = "https://mtr.moe";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ sharzy ];
+    mainProgram = "nexttrace";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/nfdump/default.nix b/nixpkgs/pkgs/tools/networking/nfdump/default.nix
new file mode 100644
index 000000000000..cc0c9d151983
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nfdump/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf
+, automake
+, libtool
+, pkg-config
+, bzip2
+, libpcap
+, flex
+, bison
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nfdump";
+  version = "1.7.3";
+
+  src = fetchFromGitHub {
+    owner = "phaag";
+    repo = "nfdump";
+    rev =  "refs/tags/v${version}";
+    hash = "sha256-etmelBCZQKscuVJt5dBtwQVjiZNUFLTu11Gw0jmYcAg=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    flex
+    libtool
+    pkg-config
+    bison
+  ];
+
+  buildInputs = [
+    bzip2
+    libpcap
+  ];
+
+  preConfigure = ''
+    # The script defaults to glibtoolize on darwin, so we pass the correct
+    # name explicitly.
+    LIBTOOLIZE=libtoolize ./autogen.sh
+  '';
+
+  configureFlags = [
+    "--enable-nsel"
+    "--enable-sflow"
+    "--enable-readpcap"
+    "--enable-nfpcapd"
+  ];
+
+  meta = with lib; {
+    description = "Tools for working with netflow data";
+    longDescription = ''
+      nfdump is a set of tools for working with netflow data.
+    '';
+    homepage = "https://github.com/phaag/nfdump";
+    changelog = "https://github.com/phaag/nfdump/releases/tag/v${version}";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ takikawa ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nfstrace/default.nix b/nixpkgs/pkgs/tools/networking/nfstrace/default.nix
new file mode 100644
index 000000000000..1a0268f960d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nfstrace/default.nix
@@ -0,0 +1,60 @@
+{ cmake, fetchFromGitHub, fetchpatch, json_c, libpcap, ncurses, lib, stdenv, libtirpc }:
+
+stdenv.mkDerivation rec {
+  pname = "nfstrace";
+  version = "0.4.3.2";
+
+  src = fetchFromGitHub {
+    owner = "epam";
+    repo = "nfstrace";
+    rev = version;
+    sha256 = "1djsyn7i3xp969rnmsdaf5vwjiik9wylxxrc5nm7by00i76c1vsg";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/nfstrace/raw/debian/0.4.3.1-3/debian/patches/reproducible_build.patch";
+      sha256 = "0fd96r8xi142kjwibqkd46s6jwsg5kfc5v28bqsj9rdlc2aqmay5";
+    })
+    # Fixes build failure with gcc-10
+    # Related PR https://github.com/epam/nfstrace/pull/42/commits/4562a895ed3ac0e811bdd489068ad3ebe4d7b501
+    (fetchpatch {
+      url = "https://github.com/epam/nfstrace/commit/4562a895ed3ac0e811bdd489068ad3ebe4d7b501.patch";
+      sha256 = "1fbicbllyykjknik7asa81x0ixxmbwqwkiz74cnznagv10jlkj3p";
+    })
+
+    # Fix pending upstream inclusion for ncurses-6.3 support:
+    #  https://github.com/epam/nfstrace/pull/50
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/epam/nfstrace/commit/29c7c415f5412df1aae9b1e6ed3a2760d2c227a0.patch";
+      sha256 = "134709w6bld010jx3xdy9imcjzal904a84n9f8vv0wnas5clxdmx";
+    })
+  ];
+
+  postPatch = ''
+   # -Wall -Wextra -Werror fails on clang and newer gcc
+    substituteInPlace CMakeLists.txt \
+      --replace "-Wno-braced-scalar-init" "" \
+      --replace "-Werror" ""
+  '';
+
+  buildInputs = [ json_c libpcap ncurses libtirpc ];
+  nativeBuildInputs = [ cmake ];
+
+  # To build with GCC 8+ it needs:
+  CXXFLAGS = "-Wno-class-memaccess -Wno-ignored-qualifiers";
+  # CMake can't find json_c without:
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${json_c.dev}/include/json-c" "-Wno-error=address-of-packed-member" "-I${libtirpc.dev}/include/tirpc" ];
+  NIX_LDFLAGS = [ "-ltirpc" ];
+
+  doCheck = false; # requires network access
+
+  meta = with lib; {
+    homepage = "http://epam.github.io/nfstrace/";
+    description = "NFS and CIFS tracing/monitoring/capturing/analyzing tool";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    mainProgram = "nfstrace";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ngrep/default.nix b/nixpkgs/pkgs/tools/networking/ngrep/default.nix
new file mode 100644
index 000000000000..31707ce00d5a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ngrep/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, libpcap, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "ngrep";
+  version = "1.47";
+
+  src = fetchFromGitHub {
+    owner = "jpr5";
+    repo = "ngrep";
+    rev = "V${lib.replaceStrings ["."] ["_"] version}";
+    sha256 = "1x2fyd7wdqlj1r76ilal06cl2wmbz0ws6i3ys204sbjh1cj6dcl7";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/jpr5/ngrep/pull/11.patch";
+      sha256 = "0k5qzvj8j3r1409qwwvzp7m3clgs2g7hs4q68bhrqbrsvvb2h5dh";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libpcap pcre ];
+
+  configureFlags = [
+    "--enable-ipv6"
+    "--enable-pcre"
+    "--disable-pcap-restart"
+    "--with-pcap-includes=${libpcap}/include"
+  ];
+
+  preConfigure = ''
+    sed -i "s|BPF=.*|BPF=${libpcap}/include/pcap/bpf.h|" configure
+  '';
+
+  meta = with lib; {
+    description = "Network packet analyzer";
+    longDescription = ''
+      ngrep strives to provide most of GNU grep's common features, applying
+      them to the network layer. ngrep is a pcap-aware tool that will allow you
+      to specify extended regular or hexadecimal expressions to match against
+      data payloads of packets. It currently recognizes IPv4/6, TCP, UDP,
+      ICMPv4/6, IGMP and Raw across Ethernet, PPP, SLIP, FDDI, Token Ring and
+      null interfaces, and understands BPF filter logic in the same fashion as
+      more common packet sniffing tools, such as tcpdump and snoop.
+    '';
+    homepage = "https://github.com/jpr5/ngrep/";
+    license = {
+      shortName = "ngrep";  # BSD-style, see README.md and LICENSE
+      url = "https://github.com/jpr5/ngrep/blob/master/LICENSE";
+      free = true;
+      redistributable = true;
+    };
+    platforms = with platforms; linux ++ darwin;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "ngrep";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ngrok/default.nix b/nixpkgs/pkgs/tools/networking/ngrok/default.nix
new file mode 100644
index 000000000000..ac5b19ab4c3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ngrok/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl }:
+
+let versions = lib.importJSON ./versions.json;
+    arch = if stdenv.isi686 then "386"
+           else if stdenv.isx86_64 then "amd64"
+           else if stdenv.isAarch32 then "arm"
+           else if stdenv.isAarch64 then "arm64"
+           else throw "Unsupported architecture";
+    os = if stdenv.isLinux then "linux"
+         else if stdenv.isDarwin then "darwin"
+         else throw "Unsupported os";
+    versionInfo = versions."${os}-${arch}";
+    inherit (versionInfo) version sha256 url;
+
+in
+stdenv.mkDerivation {
+  pname = "ngrok";
+  inherit version;
+
+  # run ./update
+  src = fetchurl { inherit sha256 url; };
+
+  sourceRoot = ".";
+
+  unpackPhase = "cp $src ngrok";
+
+  buildPhase = "chmod a+x ngrok";
+
+  installPhase = ''
+    install -D ngrok $out/bin/ngrok
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  # Stripping causes SEGFAULT on x86_64-darwin
+  dontStrip = true;
+
+  meta = with lib; {
+    description = "Allows you to expose a web server running on your local machine to the internet";
+    homepage = "https://ngrok.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    maintainers = with maintainers; [ bobvanderlinden brodes ];
+    mainProgram = "ngrok";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ngrok/update.sh b/nixpkgs/pkgs/tools/networking/ngrok/update.sh
new file mode 100755
index 000000000000..ed2d975bee2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ngrok/update.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -p httpie
+#!nix-shell -p jq
+#!nix-shell -i bash
+
+set -eu -o pipefail
+
+get_download_info() {
+    http --body \
+         https://update.equinox.io/check \
+         'Accept:application/json; q=1; version=1; charset=utf-8' \
+         'Content-Type:application/json; charset=utf-8' \
+         app_id=app_c3U4eZcDbjV \
+         channel=stable \
+         os=$1 \
+         goarm= \
+         arch=$2 \
+    | jq --arg sys "$1-$2" '{
+        sys: $sys,
+        url: .download_url,
+        sha256: .checksum,
+        version: .release.version
+    }'
+}
+
+(
+    get_download_info linux 386
+    get_download_info linux amd64
+    get_download_info linux arm
+    get_download_info linux arm64
+    get_download_info darwin amd64
+    get_download_info darwin arm64
+) | jq --slurp 'map ({ (.sys): . }) | add' \
+    > pkgs/tools/networking/ngrok/versions.json
diff --git a/nixpkgs/pkgs/tools/networking/ngrok/versions.json b/nixpkgs/pkgs/tools/networking/ngrok/versions.json
new file mode 100644
index 000000000000..8d90ae6c00e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ngrok/versions.json
@@ -0,0 +1,38 @@
+{
+  "linux-386": {
+    "sys": "linux-386",
+    "url": "https://bin.equinox.io/a/5FUi7gCzPvi/ngrok-v3-3.6.0-linux-386",
+    "sha256": "2036fc58594c7205aebaa09e9665d5c706391746122a417e57fa9a1bce62a727",
+    "version": "3.6.0"
+  },
+  "linux-amd64": {
+    "sys": "linux-amd64",
+    "url": "https://bin.equinox.io/a/e6rvYmQb6MC/ngrok-v3-3.6.0-linux-amd64",
+    "sha256": "14e6118f1021b5b8421945a13b15ec501bc88aef0089b1dbf31d1fb229115d9e",
+    "version": "3.6.0"
+  },
+  "linux-arm": {
+    "sys": "linux-arm",
+    "url": "https://bin.equinox.io/a/iTLH8EwDQN2/ngrok-v3-3.6.0-linux-arm",
+    "sha256": "0bbc395cc610c0017d12a812496856677f6a653f60a76203d0f031914e4cf7bc",
+    "version": "3.6.0"
+  },
+  "linux-arm64": {
+    "sys": "linux-arm64",
+    "url": "https://bin.equinox.io/a/ibBBjsbrZAm/ngrok-v3-3.6.0-linux-arm64",
+    "sha256": "39575a951352e571f6f96fd4409cbaa675dc4593786c9f198c2fb45360361f02",
+    "version": "3.6.0"
+  },
+  "darwin-amd64": {
+    "sys": "darwin-amd64",
+    "url": "https://bin.equinox.io/a/61nYpJWvYHR/ngrok-v3-3.6.0-darwin-amd64",
+    "sha256": "05ecb8a6e79cfe57663a085d5fc7cfeddd5867b25fc185829c39de4d25e5857d",
+    "version": "3.6.0"
+  },
+  "darwin-arm64": {
+    "sys": "darwin-arm64",
+    "url": "https://bin.equinox.io/a/9Zzu7daqPHA/ngrok-v3-3.6.0-darwin-arm64",
+    "sha256": "812829dac649b27f99eaf361306a014eb7ff28d005c3c9d087171342fce9472e",
+    "version": "3.6.0"
+  }
+}
diff --git a/nixpkgs/pkgs/tools/networking/nikto/default.nix b/nixpkgs/pkgs/tools/networking/nikto/default.nix
new file mode 100644
index 000000000000..df03cc8c3ce7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nikto/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, perlPackages
+, makeWrapper
+, installShellFiles
+}:
+
+let
+  version = "2.5.0";
+in
+stdenv.mkDerivation rec {
+  pname = "nikto";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "sullo";
+    repo = "nikto";
+    rev = version;
+    sha256 = "sha256-lWiDbWc2BWAUgyaIm0tvZytja02WogYRoc7na4sHiNM=";
+  };
+
+  # Nikto searches its configuration file based on its current path
+  # This fixes the current path regex for the wrapped executable.
+  patches = [ ./nix-wrapper-fix.patch ];
+
+  postPatch = ''
+    # EXECDIR needs to be changed to the path where we copy the programs stuff
+    # Forcing SSLeay is needed for SSL support (the auto mode doesn't seem to work otherwise)
+    substituteInPlace program/nikto.conf.default \
+      --replace "# EXECDIR=/opt/nikto" "EXECDIR=$out/share" \
+      --replace "LW_SSL_ENGINE=auto" "LW_SSL_ENGINE=SSLeay"
+  '';
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  buildInputs = [
+    perlPackages.perl
+    perlPackages.NetSSLeay
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -d "$out/share"
+    cp -a program/* "$out/share"
+    install -Dm 755 "program/nikto.pl" "$out/bin/nikto"
+    install -Dm 644 program/nikto.conf.default "$out/etc/nikto.conf"
+    installManPage documentation/nikto.1
+    install -Dm 644 README.md "$out/share/doc/${pname}/README"
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/nikto \
+      --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = with lib; {
+    description = "Web server scanner";
+    license = licenses.gpl2Plus;
+    homepage = "https://cirt.net/Nikto2";
+    changelog = "https://github.com/sullo/nikto/releases/tag/${version}";
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nikto/nix-wrapper-fix.patch b/nixpkgs/pkgs/tools/networking/nikto/nix-wrapper-fix.patch
new file mode 100644
index 000000000000..bc05d774577e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nikto/nix-wrapper-fix.patch
@@ -0,0 +1,26 @@
+diff --git a/program/nikto.pl b/program/nikto.pl
+index 2cb07f9..323e666 100755
+--- a/program/nikto.pl
++++ b/program/nikto.pl
+@@ -243,7 +243,7 @@ sub config_init {
+     # Guess Nikto current directory
+     my $NIKTODIR = abs_path($0);
+     chomp($NIKTODIR);
+-    $NIKTODIR =~ s#[\\/]nikto.pl$##;
++    $NIKTODIR =~ s#[\\/]bin[\\/]\.nikto-wrapped$##;
+ 
+     # Guess user's home directory -- to support Windows
+     foreach my $var (split(/ /, "HOME USERPROFILE")) {
+@@ -251,10 +251,10 @@ sub config_init {
+     }
+ 
+     # Read the conf files in order (previous values are over-written with each, if multiple found)
+-    push(@CF, "$NIKTODIR/nikto.conf.default");
++    push(@CF,"$NIKTODIR/etc/nikto.conf.default");
+     push(@CF, "/etc/nikto.conf");
+     push(@CF, "$home/nikto.conf");
+-    push(@CF, "$NIKTODIR/nikto.conf");
++    push(@CF,"$NIKTODIR/etc/nikto.conf");
+     push(@CF, "nikto.conf");
+     push(@CF, "$VARIABLES{'configfile'}");
+ 
diff --git a/nixpkgs/pkgs/tools/networking/nmh/default.nix b/nixpkgs/pkgs/tools/networking/nmh/default.nix
new file mode 100644
index 000000000000..e32da2708a5b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nmh/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, stdenv
+, autoreconfHook
+, bison
+, coreutils
+, cyrus_sasl
+, db
+, fetchFromSavannah
+, flex
+, gdbm
+, liblockfile
+, ncurses
+, openssl
+, readline
+, runtimeShell
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "nmh";
+  version = "1.7.1";
+  src = fetchFromSavannah {
+    repo = "nmh";
+    rev = finalAttrs.version;
+    hash = "sha256-sBftXl4hWs4bKw5weHkif1KIJBpheU/RCePx0WXuv9o=";
+  };
+
+  postPatch = ''
+    substituteInPlace config/config.c --replace /bin/cat ${coreutils}/bin/cat
+    substituteInPlace \
+      sbr/arglist.c \
+      uip/mhbuildsbr.c \
+      uip/whatnowsbr.c \
+      uip/slocal.c \
+      --replace '"/bin/sh"' '"${runtimeShell}"'
+    # the "cleanup" pseudo-test makes diagnosing test failures a pain
+    ln -s -f ${stdenv}/bin/true test/cleanup
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    flex
+    bison
+  ];
+
+  buildInputs = [
+    cyrus_sasl
+    db
+    gdbm
+    liblockfile
+    ncurses
+    openssl
+    readline
+  ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-stringop-truncation";
+  doCheck = true;
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "New MH Mail Handling System";
+    homepage = "https://nmh.nongnu.org/";
+    downloadPage = "http://download.savannah.nongnu.org/releases/nmh/";
+    changelog = "http://savannah.nongnu.org/news/?group=nmh";
+    license = [ lib.licenses.bsd3 ];
+    longDescription = ''
+      This is the nmh mail user agent (reader/sender), a command-line based
+      mail reader that is powerful and extensible.  nmh is an excellent choice
+      for people who receive and process a lot of mail.
+
+      Unlike most mail user agents, nmh is not a single program, rather it is
+      a set of programs that are run from the shell.  This allows the user to
+      utilize the full power of the Unix shell in coordination with nmh.
+      Various front-ends are available, such as mh-e (an emacs mode), xmh, and
+      exmh (X11 clients).
+
+      nmh was originally based on MH version 6.8.3, and is intended to be a
+      (mostly) compatible drop-in replacement for MH.
+
+      These tools are mainly useful for writing scripts that manipulating
+      claws-mail's mail folders.  Most other mail clients have migrated to
+      maildir.
+    '';
+  };
+
+})
diff --git a/nixpkgs/pkgs/tools/networking/noip/default.nix b/nixpkgs/pkgs/tools/networking/noip/default.nix
new file mode 100644
index 000000000000..85614001342f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/noip/default.nix
@@ -0,0 +1,29 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  pname = "noip";
+  version = "2.1.9-1";
+
+  src = fetchurl {
+    url = "https://www.noip.com/client/linux/noip-duc-linux.tar.gz";
+    sha256 = "82b9bafab96a0c53b21aaef688bf70b3572e26217b5e2072bdb09da3c4a6f593";
+  };
+
+  makeFlags = [ "PREFIX=\${out}" ];
+  installPhase =
+    ''
+      mkdir -p $out/bin
+      cp noip2 $out/bin
+    '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Dynamic DNS daemon for no-ip accounts";
+    homepage = "http://noip.com/download?page=linux";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.iand675 ];
+    platforms = platforms.linux;
+    mainProgram = "noip2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/norouter/default.nix b/nixpkgs/pkgs/tools/networking/norouter/default.nix
new file mode 100644
index 000000000000..3513cb0cdfbc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/norouter/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "norouter";
+  version = "0.6.5";
+
+  src = fetchFromGitHub {
+    owner = "norouter";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-EY/Yfyaz2DeQKHJ4awpQDbrVkse9crIZlLzfviPy3Tk=";
+  };
+
+  vendorHash = "sha256-RxrmYfEm1Maq8byoLXUr5RfXcwgqpCcAq5enMnl9V9E=";
+
+  subPackages = [ "cmd/norouter" ];
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/norouter --version | grep ${version} > /dev/null
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "Tool to handle unprivileged networking by using multiple loopback addresses";
+    homepage = "https://github.com/norouter/norouter";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ blaggacao ];
+    mainProgram = "norouter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/notemap/default.nix b/nixpkgs/pkgs/tools/networking/notemap/default.nix
new file mode 100644
index 000000000000..726b24469ab5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/notemap/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchzip
+, pkg-config
+, libressl
+, memstreamHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "notemap";
+  version = "1.3";
+
+  src = fetchzip {
+    url = "https://git.causal.agency/notemap/snapshot/notemap-${version}.tar.gz";
+    sha256 = "0s9c1xx0iggyzclqw3294bjv7qgvd5l5zgbryks4hvfibr73r6ps";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libressl
+  ] ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [
+    memstreamHook
+  ];
+
+  meta = {
+    description = "Mirror notes to IMAP";
+    longDescription = ''
+      notemap(1) mirrors text files to an IMAP mailbox in a format compatible with the iOS
+      Notes app. It's intended to make notes managed in git(1) easily accessible
+      from the phone.
+    '';
+    license = lib.licenses.gpl3Plus;
+    maintainers = [ lib.maintainers.sternenseemann ];
+    homepage = "https://git.causal.agency/notemap/about/";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nqptp/default.nix b/nixpkgs/pkgs/tools/networking/nqptp/default.nix
new file mode 100644
index 000000000000..26aec487789d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nqptp/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.2.4";
+  pname = "nqptp";
+
+  src = fetchFromGitHub {
+    owner = "mikebrady";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-roTNcr3v2kzE6vQ5plAVtlw1+2yJplltOYsGGibtoZo=";
+  };
+
+  patches = [
+    # this patch should be removed when > 1.2.4
+    ./remove-setcap.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  passthru.updateScript = gitUpdater {
+    ignoredVersions = ".*(-dev|d0)";
+  };
+
+  meta = {
+    homepage = "https://github.com/mikebrady/nqptp";
+    description = "Daemon and companion application to Shairport Sync that monitors timing data from any PTP clocks";
+    license = lib.licenses.gpl2Only;
+    mainProgram = "nqptp";
+    maintainers = with lib.maintainers; [ jordanisaacs adamcstephens ];
+    platforms = lib.platforms.linux ++ lib.platforms.freebsd;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nqptp/remove-setcap.patch b/nixpkgs/pkgs/tools/networking/nqptp/remove-setcap.patch
new file mode 100644
index 000000000000..2fa56ac0150a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nqptp/remove-setcap.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.am b/Makefile.am
+index 78f36d7..8dc4e4f 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -19,8 +19,6 @@ endif
+ 
+ install-exec-hook:
+ if BUILD_FOR_LINUX
+-# NQPTP runs as user/group nqptp/nqptp on Linux and uses setcap to access ports 319 and 320
+-	setcap 'cap_net_bind_service=+ep' $(bindir)/nqptp
+ # no installer for System V
+ if INSTALL_SYSTEMD_STARTUP
+ 	getent group nqptp &>/dev/null || groupadd -r nqptp &>/dev/null
diff --git a/nixpkgs/pkgs/tools/networking/nss-mdns/default.nix b/nixpkgs/pkgs/tools/networking/nss-mdns/default.nix
new file mode 100644
index 000000000000..f0c47fe945e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nss-mdns/default.nix
@@ -0,0 +1,42 @@
+{ lib, autoreconfHook, pkg-config, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "nss-mdns";
+  version = "0.15.1";
+
+  src = fetchFromGitHub {
+    owner = "lathiat";
+    repo = "nss-mdns";
+    rev = "v${version}";
+    hash = "sha256-iRaf9/gu9VkGi1VbGpxvC5q+0M8ivezCz/oAKEg5V1M=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  # Note: Although `nss-mdns' works by talking to `avahi-daemon', it
+  # doesn't depend on the Avahi libraries.  Instead, it contains
+  # hand-written D-Bus code to talk to the Avahi daemon.
+
+  configureFlags = [
+    # Try to use the Avahi daemon before resolving on our own.
+    "--enable-avahi"
+    # Connect to the daemon at `/var/run/avahi-daemon/socket'.
+    "--localstatedir=/var"
+  ];
+
+  meta = {
+    description = "The mDNS Name Service Switch (NSS) plug-in";
+    longDescription = ''
+      `nss-mdns' is a plugin for the GNU Name Service Switch (NSS)
+      functionality of the GNU C Library (glibc) providing host name
+      resolution via Multicast DNS (mDNS), effectively allowing name
+      resolution by common Unix/Linux programs in the ad-hoc mDNS
+      domain `.local'.
+    '';
+    homepage = "http://0pointer.de/lennart/projects/nss-mdns/";
+    license = lib.licenses.lgpl2Plus;
+    # Supports both the GNU and FreeBSD NSS.
+    platforms = lib.platforms.gnu ++ lib.platforms.linux ++ lib.platforms.freebsd;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nss-pam-ldapd/default.nix b/nixpkgs/pkgs/tools/networking/nss-pam-ldapd/default.nix
new file mode 100644
index 000000000000..0cdbd52f6f6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nss-pam-ldapd/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl
+, pkg-config, makeWrapper, autoreconfHook
+, openldap, python3, pam
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nss-pam-ldapd";
+  version = "0.9.12";
+
+  src = fetchurl {
+    url = "https://arthurdejong.org/nss-pam-ldapd/${pname}-${version}.tar.gz";
+    sha256 = "sha256-xtZh50aTy/Uxp5BjHKk7c/KR+yPMOUZbCd642iv7DhQ=";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper autoreconfHook ];
+  buildInputs = [ openldap pam python3 ];
+
+  preConfigure = ''
+    substituteInPlace Makefile.in --replace "install-data-local: " "# install-data-local: "
+  '';
+
+  configureFlags = [
+    "--with-bindpw-file=/run/nslcd/bindpw"
+    "--with-nslcd-socket=/run/nslcd/socket"
+    "--with-nslcd-pidfile=/run/nslcd/nslcd.pid"
+    "--with-pam-seclib-dir=$(out)/lib/security"
+    "--enable-kerberos=no"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/sbin/nslcd --prefix LD_LIBRARY_PATH ":" $out/lib
+  '';
+
+  meta = with lib; {
+    description = "LDAP identity and authentication for NSS/PAM";
+    homepage = "https://arthurdejong.org/nss-pam-ldapd/";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ntopng/default.nix b/nixpkgs/pkgs/tools/networking/ntopng/default.nix
new file mode 100644
index 000000000000..18cb68cba407
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ntopng/default.nix
@@ -0,0 +1,94 @@
+{ lib
+, stdenv
+, autoreconfHook
+, curl
+, expat
+, fetchFromGitHub
+, git
+, json_c
+, libcap
+, libmaxminddb
+, libmysqlclient
+, libpcap
+, libsodium
+, ndpi
+, net-snmp
+, openssl
+, pkg-config
+, rdkafka
+, gtest
+, rrdtool
+, hiredis
+, sqlite
+, which
+, zeromq
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ntopng";
+  version = "6.0";
+
+  src = fetchFromGitHub {
+    owner = "ntop";
+    repo = "ntopng";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-zLtJ4x1eWtvnd60iNuNkMOX8LinZMEJHSt/Y0FVQ8vw=";
+    fetchSubmodules = true;
+  };
+
+  preConfigure = ''
+    substituteInPlace Makefile.in \
+      --replace "/bin/rm" "rm"
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    git
+    pkg-config
+    which
+  ];
+
+  buildInputs = [
+    curl
+    expat
+    json_c
+    libcap
+    libmaxminddb
+    libmysqlclient
+    libpcap
+    gtest
+    hiredis
+    libsodium
+    net-snmp
+    openssl
+    rdkafka
+    rrdtool
+    sqlite
+    zeromq
+  ];
+
+  autoreconfPhase = "bash autogen.sh";
+
+  configureFlags = [
+    "--with-ndpi-includes=${ndpi}/include/ndpi"
+    "--with-ndpi-static-lib=${ndpi}/lib/"
+  ];
+
+  preBuild = ''
+    sed -e "s|\(#define CONST_BIN_DIR \).*|\1\"$out/bin\"|g" \
+        -e "s|\(#define CONST_SHARE_DIR \).*|\1\"$out/share\"|g" \
+        -i include/ntop_defines.h
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "High-speed web-based traffic analysis and flow collection tool";
+    homepage = "https://www.ntop.org/products/traffic-analysis/ntop/";
+    changelog = "https://github.com/ntop/ntopng/blob/${finalAttrs.version}/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ bjornfor ];
+    mainProgram = "ntopng";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/ntp/default.nix b/nixpkgs/pkgs/tools/networking/ntp/default.nix
new file mode 100644
index 000000000000..1a081993bbd6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ntp/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchurl, openssl, perl, pps-tools, libcap }:
+
+stdenv.mkDerivation rec {
+  pname = "ntp";
+  version = "4.2.8p17";
+
+  src = fetchurl {
+    url = "https://archive.ntp.org/ntp4/ntp-${lib.versions.majorMinor version}/ntp-${version}.tar.gz";
+    hash = "sha256-ED3ScuambFuN8H3OXpoCVV/NbxOXvft4IjcyjonTqGY=";
+  };
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-openssl-libdir=${lib.getLib openssl}/lib"
+    "--with-openssl-incdir=${openssl.dev}/include"
+    "--enable-ignore-dns-errors"
+    "--with-yielding-select=yes"
+  ] ++ lib.optional stdenv.isLinux "--enable-linuxcaps";
+
+  buildInputs = [ openssl perl ]
+    ++ lib.optionals stdenv.isLinux [ pps-tools libcap ];
+
+  hardeningEnable = [ "pie" ];
+
+  postInstall = ''
+    rm -rf $out/share/doc
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.ntp.org/";
+    description = "An implementation of the Network Time Protocol";
+    license = {
+      # very close to isc and bsd2
+      url = "https://www.eecis.udel.edu/~mills/ntp/html/copyright.html";
+    };
+    maintainers = with maintainers; [ eelco thoughtpolice ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ntpd-rs/default.nix b/nixpkgs/pkgs/tools/networking/ntpd-rs/default.nix
new file mode 100644
index 000000000000..828110037896
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ntpd-rs/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pandoc
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ntpd-rs";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "pendulum-project";
+    repo = "ntpd-rs";
+    rev = "v${version}";
+    hash = "sha256-IoTuI0M+stZNUVpaVsf7JR7uHcamSSVDMJxJ+7n5ayA=";
+  };
+
+  cargoHash = "sha256-iZuDNFy8c2UZUh3J11lEtfHlDFN+qPl4iZg+ps7AenE=";
+
+  nativeBuildInputs = [ pandoc installShellFiles ];
+
+  postPatch = ''
+    substituteInPlace utils/generate-man.sh \
+      --replace 'utils/pandoc.sh' 'pandoc'
+  '';
+
+  postBuild = ''
+    source utils/generate-man.sh
+  '';
+
+  doCheck = true;
+
+  checkFlags = [
+    # doesn't find the testca
+    "--skip=keyexchange::tests::key_exchange_roundtrip"
+    # seems flaky?
+    "--skip=algorithm::kalman::peer::tests::test_offset_steering_and_measurements"
+    # needs networking
+    "--skip=hwtimestamp::tests::get_hwtimestamp"
+  ];
+
+  postInstall = ''
+    install -Dm444 -t $out/lib/systemd/system docs/examples/conf/{ntpd-rs,ntpd-rs-metrics}.service
+    installManPage docs/precompiled/man/{ntp.toml.5,ntp-ctl.8,ntp-daemon.8,ntp-metrics-exporter.8}
+  '';
+
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
+    description = "A full-featured implementation of the Network Time Protocol";
+    homepage = "https://tweedegolf.nl/en/pendulum";
+    changelog = "https://github.com/pendulum-project/ntpd-rs/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nttcp/default.nix b/nixpkgs/pkgs/tools/networking/nttcp/default.nix
new file mode 100644
index 000000000000..7c7302cf19c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nttcp/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "nttcp";
+  version = "1.47";
+
+  src = fetchurl {
+    url = "https://deb.debian.org/debian/pool/non-free/n/nttcp/nttcp_${version}.orig.tar.gz";
+    sha256 = "1bl17dsd53lbpjdqfmpgpd7dms6d2w3scpg7ki7qgfjhs8sarq50";
+  };
+
+  patches = [
+    # Fix format string compiler error
+    ./format-security.patch
+  ];
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "New test TCP program";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nttcp/format-security.patch b/nixpkgs/pkgs/tools/networking/nttcp/format-security.patch
new file mode 100644
index 000000000000..f0a604577686
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nttcp/format-security.patch
@@ -0,0 +1,12 @@
+diff -Nur -x '*.orig' -x '*~' nttcp-1.47/nttcp.c nttcp-1.47.new/nttcp.c
+--- nttcp-1.47/nttcp.c	2000-12-18 05:16:54.000000000 -0500
++++ nttcp-1.47.new/nttcp.c	2012-01-30 23:44:02.260501225 -0500
+@@ -372,7 +372,7 @@
+ #define Message(x)	fMessage(stdout, x)
+ 
+ void Exit(char *s, int ret) {
+-    syslog(LOG_DEBUG, s);
++    syslog(LOG_DEBUG, "%s", s);
+     fMessage(stderr,s);
+     exit(ret);
+ }
diff --git a/nixpkgs/pkgs/tools/networking/ntttcp/default.nix b/nixpkgs/pkgs/tools/networking/ntttcp/default.nix
new file mode 100644
index 000000000000..cc816b737bdb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ntttcp/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ntttcp";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "microsoft";
+    repo = "ntttcp-for-linux";
+    rev = version;
+    sha256 = "sha256-6O7qSrR6EFr7k9lHQHGs/scZxJJ5DBNDxlSL5hzlRf4=";
+  };
+
+  preBuild = "cd src";
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp ntttcp $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A Linux network throughput multiple-thread benchmark tool";
+    homepage = "https://github.com/microsoft/ntttcp-for-linux";
+    license = licenses.mit;
+    maintainers = with maintainers; [ delroth ];
+    platforms = platforms.linux;
+    mainProgram = "ntttcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nuttcp/default.nix b/nixpkgs/pkgs/tools/networking/nuttcp/default.nix
new file mode 100644
index 000000000000..467159e8c275
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nuttcp/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchurl
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nuttcp";
+  version = "8.2.2";
+
+  src = fetchurl {
+    url = "http://nuttcp.net/nuttcp/nuttcp-${version}.tar.bz2";
+    sha256 = "sha256-fq16ieeqoFnSDjQELFihmMKYHK1ylVDROI3fyQNtOYM=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp nuttcp-${version} $out/bin/nuttcp
+  '';
+
+  postInstall = ''
+    installManPage nuttcp.8
+  '';
+
+  meta = with lib; {
+    description = "Network performance measurement tool";
+    longDescription = ''
+      nuttcp is a network performance measurement tool intended for use by
+      network and system managers. Its most basic usage is to determine the raw
+      TCP (or UDP) network layer throughput by transferring memory buffers from
+      a source system across an interconnecting network to a destination
+      system, either transferring data for a specified time interval, or
+      alternatively transferring a specified number of bytes. In addition to
+      reporting the achieved network throughput in Mbps, nuttcp also provides
+      additional useful information related to the data transfer such as user,
+      system, and wall-clock time, transmitter and receiver CPU utilization,
+      and loss percentage (for UDP transfers).
+    '';
+    license = licenses.gpl2Only;
+    homepage = "http://nuttcp.net/";
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    mainProgram = "nuttcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nxdomain/default.nix b/nixpkgs/pkgs/tools/networking/nxdomain/default.nix
new file mode 100644
index 000000000000..a90c7f0c23ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nxdomain/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildPythonApplication, fetchPypi, dnspython, pytestCheckHook }:
+
+buildPythonApplication rec {
+  pname = "nxdomain";
+  version = "1.0.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0va7nkbdjgzrf7fnbxkh1140pbc62wyj86rdrrh5wmg3phiziqkb";
+  };
+
+  propagatedBuildInputs = [ dnspython ];
+
+  nativeCheckInputs = [ pytestCheckHook ];
+
+  postCheck = ''
+    echo example.org > simple.list
+    python -m nxdomain --format dnsmasq --out dnsmasq.conf --simple ./simple.list
+    grep -q 'address=/example.org/' dnsmasq.conf
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/zopieux/nxdomain";
+    description = "A domain (ad) block list creator";
+    platforms = platforms.all;
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ zopieux ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nylon/configure-use-solib.patch b/nixpkgs/pkgs/tools/networking/nylon/configure-use-solib.patch
new file mode 100644
index 000000000000..02491d7660ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nylon/configure-use-solib.patch
@@ -0,0 +1,33 @@
+--- nylon-1.21/configure	2006-08-20 00:53:31.000000000 +0200
++++ nylon-1.21-patch/configure	2015-01-13 22:23:34.509154220 +0100
+@@ -5174,25 +5174,25 @@
+   *)
+      echo "$as_me:$LINENO: result: $withval" >&5
+ echo "${ECHO_T}$withval" >&6
+-     if test -f $withval/include/event.h -a -f $withval/lib/libevent.a; then
++     if test -f $withval/include/event.h -a -f $withval/lib/libevent.so; then
+         owd=`pwd`
+         if cd $withval; then withval=`pwd`; cd $owd; fi
+         EVENTINC="-I$withval/include"
+         EVENTLIB="-L$withval/lib -levent"
+-     elif test -f $withval/event.h -a -f $withval/libevent.a; then
++     elif test -f $withval/event.h -a -f $withval/libevent.so; then
+         owd=`pwd`
+         if cd $withval; then withval=`pwd`; cd $owd; fi
+         EVENTINC="-I$withval"
+         EVENTLIB="-L$withval -levent"
+      else
+-        { { echo "$as_me:$LINENO: error: event.h or libevent.a not found in $withval" >&5
+-echo "$as_me: error: event.h or libevent.a not found in $withval" >&2;}
++        { { echo "$as_me:$LINENO: error: event.h or libevent.so not found in $withval" >&5
++echo "$as_me: error: event.h or libevent.so not found in $withval" >&2;}
+    { (exit 1); exit 1; }; }
+      fi
+      ;;
+   esac
+ else
+-   if test -f ${prefix}/include/event.h -a -f ${prefix}/lib/libevent.a;
++   if test -f ${prefix}/include/event.h -a -f ${prefix}/lib/libevent.so;
+ then
+      EVENTINC="-I${prefix}/include"
+      EVENTLIB="-L${prefix}/lib -levent"
diff --git a/nixpkgs/pkgs/tools/networking/nylon/default.nix b/nixpkgs/pkgs/tools/networking/nylon/default.nix
new file mode 100644
index 000000000000..37c6d14dfa27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nylon/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, libevent, buildEnv }:
+let
+  # failed to find a better way to make it work
+  libevent-comb = buildEnv {
+    inherit (libevent.out) name;
+    paths = [ libevent.dev libevent.out ];
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "nylon";
+  version = "1.21";
+  src = fetchurl {
+    url = "https://monkey.org/~marius/nylon/nylon-${version}.tar.gz";
+    sha256 = "34c132b005c025c1a5079aae9210855c80f50dc51dde719298e1113ad73408a4";
+  };
+
+  patches = [ ./configure-use-solib.patch ];
+
+  configureFlags = [ "--with-libevent=${libevent-comb}" ];
+
+  buildInputs = [ libevent ];
+
+  meta = with lib; {
+    homepage = "http://monkey.org/~marius/nylon";
+    description = "Proxy server, supporting SOCKS 4 and 5, as well as a mirror mode";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = platforms.linux;
+    mainProgram = "nylon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nyx/default.nix b/nixpkgs/pkgs/tools/networking/nyx/default.nix
new file mode 100644
index 000000000000..844d692425b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nyx/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages, fetchPypi }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "nyx";
+  version = "2.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "02rrlllz2ci6i6cs3iddyfns7ang9a54jrlygd2jw1f9s6418ll8";
+  };
+
+  propagatedBuildInputs = [ stem ];
+
+  # ./run_tests.py returns `TypeError: testFailure() takes exactly 1 argument`
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command-line monitor for Tor";
+    homepage = "https://nyx.torproject.org/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nzbget/default.nix b/nixpkgs/pkgs/tools/networking/nzbget/default.nix
new file mode 100644
index 000000000000..2c698ae6c831
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nzbget/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, gnutls
+, libgcrypt
+, libpar2
+, libcap
+, libsigcxx
+, libxml2
+, ncurses
+, openssl
+, zlib
+, nixosTests
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "nzbget-ng";
+  version = "21.4-rc2";
+
+  src = fetchFromGitHub {
+    owner = "nzbget-ng";
+    repo = "nzbget";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-JJML5mtAog5xC7DkthCtoyn5QeC2Z+fdzSuEa/Te0Ew=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [
+    gnutls
+    libgcrypt
+    libpar2
+    libcap
+    libsigcxx
+    libxml2
+    ncurses
+    openssl
+    zlib
+  ];
+
+  prePatch = ''
+    sed -i 's/AC_INIT.*/AC_INIT( nzbget, m4_esyscmd_s( echo ${finalAttrs.version} ) )/' configure.ac
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = { inherit (nixosTests) nzbget; };
+
+  meta = with lib; {
+    homepage = "https://nzbget-ng.github.io/";
+    changelog = "https://github.com/nzbget-ng/nzbget/releases/tag/v${finalAttrs.version}";
+    license = licenses.gpl2Plus;
+    description = "A command line tool for downloading files from news servers";
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+    mainProgram = "nzbget";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/oapi-codegen/default.nix b/nixpkgs/pkgs/tools/networking/oapi-codegen/default.nix
new file mode 100644
index 000000000000..05098a828a11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/oapi-codegen/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "oapi-codegen";
+  version = "1.13.4";
+
+  src = fetchFromGitHub {
+    owner = "deepmap";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-9uHgc2q3ZNM0hQsAY+1RLAH3NfcV+dQo+WRk4OQ8q4Q=";
+  };
+
+  vendorHash = "sha256-VsZcdbOGRbHfjKPU+Y01xZCBq4fiVi7qoRBY9AqS0PM=";
+
+  # Tests use network
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Go client and server OpenAPI 3 generator";
+    homepage = "https://github.com/deepmap/oapi-codegen";
+    changelog = "https://github.com/deepmap/oapi-codegen/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ j4m3s ];
+    mainProgram = "oapi-codegen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/obfs4/default.nix b/nixpkgs/pkgs/tools/networking/obfs4/default.nix
new file mode 100644
index 000000000000..b2317ef44c2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/obfs4/default.nix
@@ -0,0 +1,48 @@
+{ lib, buildGoModule, fetchFromGitLab, installShellFiles }:
+
+buildGoModule rec {
+  pname = "obfs4";
+  version = "0.1.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.torproject.org";
+    group = "tpo";
+    owner = "anti-censorship/pluggable-transports";
+    # We don't use pname = lyrebird and we use the old obfs4 name as the first
+    # will collide with lyrebird Gtk3 program.
+    repo = "lyrebird";
+    rev = "lyrebird-${version}";
+    hash = "sha256-2qBSmAsaR3hfxuoR5U5UAFQAepUOEUnIGoxc/GZ5LmY=";
+  };
+
+  vendorHash = "sha256-O8CsvpwL9cfipl4M0BquSnG9tBrt/+i+i80OYk2mNiI=";
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage doc/obfs4proxy.1
+    ln -s $out/share/man/man1/{obfs4proxy,lyrebird}.1
+  '';
+
+  meta = with lib; {
+    description = "Circumvents censorship by transforming Tor traffic between clients and bridges";
+    longDescription = ''
+      Obfs4proxy is a tool that attempts to circumvent censorship by
+      transforming the Tor traffic between the client and the bridge.
+      This way censors, who usually monitor traffic between the client
+      and the bridge, will see innocent-looking transformed traffic
+      instead of the actual Tor traffic.  obfs4proxy implements the
+      obfsucation protocols obfs2, obfs3, and obfs4.  It is written in
+      Go and is compliant with the Tor pluggable transports
+      specification, and its modular architecture allows it to support
+      multiple pluggable transports.
+    '';
+    homepage = "https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird";
+    maintainers = with maintainers; [ thoughtpolice ];
+    mainProgram = "lyrebird";
+    changelog = "https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird/-/raw/${src.rev}/ChangeLog";
+    license = with lib.licenses; [ bsd2 bsd3 gpl3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ockam/default.nix b/nixpkgs/pkgs/tools/networking/ockam/default.nix
new file mode 100644
index 000000000000..b50a4ff45245
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ockam/default.nix
@@ -0,0 +1,63 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, git
+, nix-update-script
+, pkg-config
+, openssl
+, dbus
+, Security
+}:
+
+let
+  pname = "ockam";
+  version = "0.116.0";
+in
+rustPlatform.buildRustPackage {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "build-trust";
+    repo = pname;
+    rev = "ockam_v${version}";
+    sha256 = "sha256-dcSH/mO3cUamjOCuvEB/C24n7K5T1KnUMvTn8fVu+YM=";
+  };
+
+  cargoHash = "sha256-9UwPPOKg+Im+vfQFiYKS68tONYkKz1TqX7ukbtmLcRk=";
+  nativeBuildInputs = [ git pkg-config ];
+  buildInputs = [ openssl dbus ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  passthru.updateScript = nix-update-script { };
+
+  # too many tests fail for now
+  doCheck = false;
+  # checkFlags = [
+  #   # tries to make a network access
+  #   "--skip=tests::curl_http_ockam"
+  #   "--skip=medium_file_transfer"
+  #   "--skip=medium_file_transfer_large_chunks"
+  #   "--skip=medium_file_transfer_small_chunks"
+  #   "--skip=tiny_file_transfer"
+  #   "--skip=tiny_file_transfer_small_chunks"
+  #   # tries to do IO
+  #   "--skip=cli_state::tests::integration"
+  #   "--skip=cli_state::tests::test_create_default_identity_state"
+  #   "--skip=cli_state::tests::test_create_named_identity_state"
+  #   "--skip=kafka::integration_test::test::producer__flow_with_mock_kafka__content_encryption_and_decryption"
+  #   "--skip=kafka::portal_worker::test::kafka_portal_worker__metadata_exchange__response_changed"
+  #   "--skip=full_flow"
+  #   "--skip=run::parser::tests::detect_circular_dependency"
+  #   "--skip=run::parser::tests::test_parse_config_with_depends_on"
+  #   "--skip=util::tests::test_process_multi_addr"
+  # ];
+
+  meta = with lib; {
+    description = "Orchestrate end-to-end encryption, cryptographic identities, mutual authentication, and authorization policies between distributed applications – at massive scale";
+    homepage = "https://github.com/build-trust/ockam";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ happysalada ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ocproxy/default.nix b/nixpkgs/pkgs/tools/networking/ocproxy/default.nix
new file mode 100644
index 000000000000..bc21884e6ac8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ocproxy/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libevent }:
+
+stdenv.mkDerivation rec {
+  version = "1.60";
+  pname = "ocproxy";
+
+  src = fetchFromGitHub {
+    owner = "cernekee";
+    repo = "ocproxy";
+    rev = "v${version}";
+    sha256 = "03323nnhb4y9nzwva04mq7xg03dvdrgp689g89f69jqc261skcqx";
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ libevent ];
+
+  preConfigure = ''
+    patchShebangs autogen.sh
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "OpenConnect proxy";
+    longDescription = ''
+      ocproxy is a user-level SOCKS and port forwarding proxy for OpenConnect
+      based on lwIP.
+    '';
+    homepage = "https://github.com/cernekee/ocproxy";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.joko ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ocserv/default.nix b/nixpkgs/pkgs/tools/networking/ocserv/default.nix
new file mode 100644
index 000000000000..bf0caf00c2a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ocserv/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitLab, autoreconfHook, pkg-config, nettle, gnutls
+, libev, protobufc, guile, geoip, libseccomp, gperf, readline
+, lz4, libgssglue, ronn, pam, libxcrypt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ocserv";
+  version = "1.2.4";
+
+  src = fetchFromGitLab {
+    owner = "openconnect";
+    repo = "ocserv";
+    rev = version;
+    sha256 = "sha256-IYiYC9oAw35YjpptUEnhuZQqoDevku25r7qi6SG8xtk=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook gperf pkg-config ronn ];
+  buildInputs = [ nettle gnutls libev protobufc guile geoip libseccomp readline lz4 libgssglue pam libxcrypt ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/openconnect/ocserv";
+    license = licenses.gpl2Plus;
+    description = "OpenConnect VPN server (ocserv), a server for the OpenConnect VPN client";
+    maintainers = with maintainers; [ neverbehave ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/octodns/default.nix b/nixpkgs/pkgs/tools/networking/octodns/default.nix
new file mode 100644
index 000000000000..4eedbaa0dedd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/octodns/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, setuptools
+, pytestCheckHook
+, dnspython
+, fqdn
+, idna
+, natsort
+, python-dateutil
+, pyyaml
+, python
+, runCommand
+}:
+
+buildPythonPackage rec {
+  pname = "octodns";
+  version = "1.4.0";
+  pyproject = true;
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "octodns";
+    repo = "octodns";
+    rev = "v${version}";
+    hash = "sha256-l4JGodbUmFxHFeEaxgClEozHcbyYP0F2yj5gDqV88IA=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    dnspython
+    fqdn
+    idna
+    natsort
+    python-dateutil
+    pyyaml
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "octodns" ];
+
+  passthru.withProviders = ps: let
+    pyEnv = python.withPackages ps;
+  in runCommand "octodns-with-providers" { } ''
+    mkdir -p $out/bin
+    ln -st $out/bin ${pyEnv}/bin/octodns-*
+  '';
+
+  meta = with lib; {
+    description = "Tools for managing DNS across multiple providers";
+    homepage = "https://github.com/octodns/octodns";
+    changelog = "https://github.com/octodns/octodns/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ janik ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/octodns/providers/bind/default.nix b/nixpkgs/pkgs/tools/networking/octodns/providers/bind/default.nix
new file mode 100644
index 000000000000..d89576c75575
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/octodns/providers/bind/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, octodns
+, pytestCheckHook
+, pythonOlder
+, dnspython
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "octodns-bind";
+  version = "0.0.6";
+  pyproject = true;
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "octodns";
+    repo = "octodns-bind";
+    rev = "v${version}";
+    hash = "sha256-IxZr7Wds8wLfJg6rqCtJ59Sg/mCIJ1g9jDJ8CTM7O8w=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    octodns
+    dnspython
+  ];
+
+  env.OCTODNS_RELEASE = 1;
+
+  pythonImportsCheck = [ "octodns_bind" ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = " RFC compliant (Bind9) provider for octoDNS";
+    homepage = "https://github.com/octodns/octodns-bind";
+    changelog = "https://github.com/octodns/octodns-bind/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ janik ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/octodns/providers/gandi/default.nix b/nixpkgs/pkgs/tools/networking/octodns/providers/gandi/default.nix
new file mode 100644
index 000000000000..ced7599c6874
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/octodns/providers/gandi/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, octodns
+, pytestCheckHook
+, pythonOlder
+, requests
+, requests-mock
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "octodns-gandi";
+  version = "0.0.2";
+  pyproject = true;
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "octodns";
+    repo = "octodns-gandi";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-aZUVdCeIbyXBgy8HNf6bZSmjdRzIvQkCEzndKGyuTkw=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    octodns
+    requests
+  ];
+
+  pythonImportsCheck = [ "octodns_gandi" ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    requests-mock
+  ];
+
+  meta = with lib; {
+    description = "Gandi v5 API provider for octoDNS";
+    homepage = "https://github.com/octodns/octodns-gandi";
+    changelog = "https://github.com/octodns/octodns-gandi/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/octodns/providers/hetzner/default.nix b/nixpkgs/pkgs/tools/networking/octodns/providers/hetzner/default.nix
new file mode 100644
index 000000000000..7ce8ceb81476
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/octodns/providers/hetzner/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, octodns
+, pytestCheckHook
+, pythonOlder
+, requests
+, requests-mock
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "octodns-hetzner";
+  # the latest release tag is over a year behind.
+  version = "0.0.2-unstable-2023-09-29";
+  pyproject = true;
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "octodns";
+    repo = "octodns-hetzner";
+    rev = "620840593a520dac9e365240b3ab361ded309c8e";
+    hash = "sha256-WdYy8tc0+PYsKuyp3uqOzbxwhLSZ+06L3JVaTSATEKM=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    octodns
+    requests
+  ];
+
+  pythonImportsCheck = [ "octodns_hetzner" ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    requests-mock
+  ];
+
+  meta = with lib; {
+    description = "Hetzner DNS provider for octoDNS";
+    homepage = "https://github.com/octodns/octodns-hetzner/";
+    changelog = "https://github.com/octodns/octodns-hetzner/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ janik ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/octodns/providers/powerdns/default.nix b/nixpkgs/pkgs/tools/networking/octodns/providers/powerdns/default.nix
new file mode 100644
index 000000000000..deee1d142a31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/octodns/providers/powerdns/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, octodns
+, pytestCheckHook
+, pythonOlder
+, requests
+, requests-mock
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "octodns-powerdns";
+  version = "0.0.5";
+  pyproject = true;
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "octodns";
+    repo = "octodns-powerdns";
+    rev = "v${version}";
+    hash = "sha256-jt0+JnpCgvsoqMcC9mANX7uq2WPTiI2JQjwQi7LGWj0=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    octodns
+    requests
+  ];
+
+  env.OCTODNS_RELEASE = 1;
+
+  pythonImportsCheck = [ "octodns_powerdns" ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    requests-mock
+  ];
+
+  meta = with lib; {
+    description = "PowerDNS API provider for octoDNS";
+    homepage = "https://github.com/octodns/octodns-powerdns/";
+    changelog = "https://github.com/octodns/octodns-powerdns/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ janik ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/offlineimap/default.nix b/nixpkgs/pkgs/tools/networking/offlineimap/default.nix
new file mode 100644
index 000000000000..33fe31b91d6e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/offlineimap/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, fetchFromGitHub
+, python3
+, asciidoc
+, cacert
+, docbook_xsl
+, installShellFiles
+, libxml2
+, libxslt
+, testers
+, offlineimap
+, fetchpatch
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "offlineimap";
+  version = "8.0.0";
+
+  src = fetchFromGitHub {
+    owner = "OfflineIMAP";
+    repo = "offlineimap3";
+    rev = "v${version}";
+    sha256 = "0y3giaz9i8vvczlxkbwymfkn3vi9fv599dy4pc2pn2afxsl4mg2w";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "sqlite-version-aware-threadsafety-check.patch";
+      url = "https://github.com/OfflineIMAP/offlineimap3/pull/139/commits/7cd32cf834b34a3d4675b29bebcd32dc1e5ef128.patch";
+      hash = "sha256-xNq4jFHMf9XZaa9BFF1lOzZrEGa5BEU8Dr+gMOBkJE4=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    asciidoc
+    docbook_xsl
+    installShellFiles
+    libxml2
+    libxslt
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    certifi
+    distro
+    imaplib2
+    pysocks
+    rfc6555
+    urllib3
+  ];
+
+  postPatch = ''
+    # Skip xmllint to stop failures due to no network access
+    sed -i docs/Makefile -e "s|a2x -v -d |a2x -L -v -d |"
+
+    # Provide CA certificates (Used when "sslcacertfile = OS-DEFAULT" is configured")
+    sed -i offlineimap/utils/distro_utils.py -e '/def get_os_sslcertfile():/a\ \ \ \ return "${cacert}/etc/ssl/certs/ca-bundle.crt"'
+  '';
+
+  postInstall = ''
+    make -C docs man
+    installManPage docs/offlineimap.1
+    installManPage docs/offlineimapui.7
+  '';
+
+  # Test requires credentials
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "offlineimap"
+  ];
+
+  passthru.tests.version = testers.testVersion { package = offlineimap; };
+
+  meta = with lib; {
+    description = "Synchronize emails between two repositories, so that you can read the same mailbox from multiple computers";
+    homepage = "http://offlineimap.org";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ endocrimes ];
+    mainProgram = "offlineimap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ofono/0001-Search-connectors-in-OFONO_PLUGIN_PATH.patch b/nixpkgs/pkgs/tools/networking/ofono/0001-Search-connectors-in-OFONO_PLUGIN_PATH.patch
new file mode 100644
index 000000000000..c1174e1093a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ofono/0001-Search-connectors-in-OFONO_PLUGIN_PATH.patch
@@ -0,0 +1,120 @@
+From 0e0994c9716700c9484b3dccb25f98a9a59d1744 Mon Sep 17 00:00:00 2001
+From: Jan Tojnar <jtojnar@gmail.com>
+Date: Fri, 23 Aug 2019 18:42:51 +0200
+Subject: [PATCH] Search connectors in OFONO_PLUGIN_PATH
+
+Previously, the connectors would only be looked for in a single
+directory, specified during compilation. This patch allows to
+traverse a list of directories provided by an environment variable.
+---
+ src/plugin.c | 77 ++++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 50 insertions(+), 27 deletions(-)
+
+diff --git a/src/plugin.c b/src/plugin.c
+index 924a45ec..f05055c3 100644
+--- a/src/plugin.c
++++ b/src/plugin.c
+@@ -99,35 +99,12 @@ static gboolean check_plugin(struct ofono_plugin_desc *desc,
+ 	return TRUE;
+ }
+ 
+-#include "builtin.h"
+-
+-int __ofono_plugin_init(const char *pattern, const char *exclude)
+-{
+-	gchar **patterns = NULL;
+-	gchar **excludes = NULL;
+-	GSList *list;
+-	GDir *dir;
++static handle_dir(const gchar *plugin_path, const gchar **patterns, const gchar **excludes) {
+ 	const gchar *file;
+ 	gchar *filename;
+-	unsigned int i;
+-
+-	DBG("");
+-
+-	if (pattern)
+-		patterns = g_strsplit_set(pattern, ":, ", -1);
+-
+-	if (exclude)
+-		excludes = g_strsplit_set(exclude, ":, ", -1);
+-
+-	for (i = 0; __ofono_builtin[i]; i++) {
+-		if (check_plugin(__ofono_builtin[i],
+-					patterns, excludes) == FALSE)
+-			continue;
+-
+-		add_plugin(NULL, __ofono_builtin[i]);
+-	}
++	GDir *dir;
+ 
+-	dir = g_dir_open(PLUGINDIR, 0, NULL);
++	dir = g_dir_open(plugin_path, 0, NULL);
+ 	if (dir != NULL) {
+ 		while ((file = g_dir_read_name(dir)) != NULL) {
+ 			void *handle;
+@@ -137,7 +114,7 @@ int __ofono_plugin_init(const char *pattern, const char *exclude)
+ 					g_str_has_suffix(file, ".so") == FALSE)
+ 				continue;
+ 
+-			filename = g_build_filename(PLUGINDIR, file, NULL);
++			filename = g_build_filename(plugin_path, file, NULL);
+ 
+ 			handle = dlopen(filename, RTLD_NOW);
+ 			if (handle == NULL) {
+@@ -168,6 +145,52 @@ int __ofono_plugin_init(const char *pattern, const char *exclude)
+ 
+ 		g_dir_close(dir);
+ 	}
++}
++
++#include "builtin.h"
++
++int __ofono_plugin_init(const char *pattern, const char *exclude)
++{
++	gchar **patterns = NULL;
++	gchar **excludes = NULL;
++	GSList *list;
++	unsigned int i;
++
++	DBG("");
++
++	if (pattern)
++		patterns = g_strsplit_set(pattern, ":, ", -1);
++
++	if (exclude)
++		excludes = g_strsplit_set(exclude, ":, ", -1);
++
++	for (i = 0; __ofono_builtin[i]; i++) {
++		if (check_plugin(__ofono_builtin[i],
++					patterns, excludes) == FALSE)
++			continue;
++
++		add_plugin(NULL, __ofono_builtin[i]);
++	}
++
++
++	const gchar *plugin_path;
++
++	plugin_path = g_getenv ("OFONO_PLUGIN_PATH");
++
++	if (plugin_path) {
++		gchar **plugin_path_list;
++		gsize i;
++
++		plugin_path_list = g_strsplit (plugin_path, G_SEARCHPATH_SEPARATOR_S, 0);
++
++		for (i = 0; plugin_path_list[i]; i++) {
++			handle_dir(plugin_path_list, patterns, excludes);
++		}
++
++		g_strfreev(plugin_path_list);
++	}
++
++	handle_dir(PLUGINDIR, patterns, excludes);
+ 
+ 	for (list = plugins; list; list = list->next) {
+ 		struct ofono_plugin *plugin = list->data;
+-- 
+2.22.0
+
diff --git a/nixpkgs/pkgs/tools/networking/ofono/default.nix b/nixpkgs/pkgs/tools/networking/ofono/default.nix
new file mode 100644
index 000000000000..e87f8a707361
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ofono/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv
+, fetchzip
+, autoreconfHook
+, pkg-config
+, glib
+, dbus
+, ell
+, systemd
+, bluez
+, mobile-broadband-provider-info
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ofono";
+  version = "2.3";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchzip {
+    url = "https://git.kernel.org/pub/scm/network/ofono/ofono.git/snapshot/ofono-${version}.tar.gz";
+    sha256 = "sha256-rX3ngXoW7YISyytpRPLX/lGmQa5LPtFxeA2XdtU1gV0=";
+  };
+
+  patches = [
+    ./0001-Search-connectors-in-OFONO_PLUGIN_PATH.patch
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    glib
+    dbus
+    ell
+    systemd
+    bluez
+    mobile-broadband-provider-info
+  ];
+
+  configureFlags = [
+    "--with-dbusconfdir=${placeholder "out"}/share"
+    "--with-systemdunitdir=${placeholder "out"}/lib/systemd/system"
+    "--enable-external-ell"
+    "--sysconfdir=/etc"
+  ];
+
+  installFlags = [
+    "sysconfdir=${placeholder "out"}/etc"
+  ];
+
+  enableParallelBuilding = true;
+  enableParallelChecking = false;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Infrastructure for building mobile telephony (GSM/UMTS) applications";
+    homepage = "https://git.kernel.org/pub/scm/network/ofono/ofono.git";
+    changelog = "https://git.kernel.org/pub/scm/network/ofono/ofono.git/plain/ChangeLog?h=${version}";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    mainProgram = "ofonod";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/oha/default.nix b/nixpkgs/pkgs/tools/networking/oha/default.nix
new file mode 100644
index 000000000000..2ba7a62152db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/oha/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, pkg-config
+, openssl
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "oha";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "hatoo";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-UZPC1Arp7/u8XafBvupAAwVu7lx5/F1Ahp944pfe2gw=";
+  };
+
+  cargoHash = "sha256-6uGJ6cuMXFLJ6vvUNmUwc+r/4jRHEH5jiOTNb6Fkf6Y=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # tests don't work inside the sandbox
+  doCheck = false;
+
+  meta = with lib; {
+    description = "HTTP load generator inspired by rakyll/hey with tui animation";
+    homepage = "https://github.com/hatoo/oha";
+    changelog = "https://github.com/hatoo/oha/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "oha";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/olsrd/default.nix b/nixpkgs/pkgs/tools/networking/olsrd/default.nix
new file mode 100644
index 000000000000..4fb8892ec020
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/olsrd/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "olsrd";
+  version = "0.9.8";
+
+  src = fetchFromGitHub {
+    owner = "OLSR";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1xk355dm5pfjil1j4m724vkdnc178lv6hi6s1g0xgpd59avbx90j";
+  };
+
+  patches = [
+    # remove if there's ever an upstream release that incorporates
+    # https://github.com/OLSR/olsrd/pull/87
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/openwrt-routing/packages/b3897386771890ba1b15f672c2fed58630beedef/olsrd/patches/011-bison.patch";
+      sha256 = "04cl4b8dpr1yjs7wa94jcszmkdzpnrn719a5m9nhm7lvfrn1rzd0";
+    })
+  ];
+
+  buildInputs = [ bison flex ];
+
+  preConfigure = ''
+    makeFlags="prefix=$out ETCDIR=$out/etc"
+  '';
+
+  meta = {
+    description = "An adhoc wireless mesh routing daemon";
+    license = lib.licenses.bsd3;
+    homepage = "http://olsr.org/";
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/oneshot/default.nix b/nixpkgs/pkgs/tools/networking/oneshot/default.nix
new file mode 100644
index 000000000000..3ecca675e18c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/oneshot/default.nix
@@ -0,0 +1,50 @@
+{ lib, fetchFromGitHub, buildGoModule, testers, oneshot }:
+
+buildGoModule rec {
+  pname = "oneshot";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "forestnode-io";
+    repo = "oneshot";
+    rev = "v${version}";
+    hash = "sha256-QReh8wdFeiCAv+XMz4cADNn9QcxlvewFJJuJ+OH7Lgc=";
+  };
+
+  vendorHash = "sha256-z6eOPugSwWEK02lgRu5Oo8LzjXnJlAtQvkzdevjBTVs=";
+
+  subPackages = [ "cmd" ];
+
+  GOWORK = "off";
+
+  modRoot = "v2";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-extldflags=-static"
+    "-X github.com/forestnode-io/oneshot/v2/pkg/version.Version=${version}"
+    "-X github.com/forestnode-io/oneshot/v2/pkg/version.APIVersion=v1.0.0"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -m 555 -T $GOPATH/bin/cmd $out/bin/oneshot
+
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = oneshot;
+    command = "oneshot version";
+  };
+
+  meta = with lib; {
+    description = "A first-come first-served single-fire HTTP server";
+    homepage = "https://www.oneshot.uno/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ milibopp ];
+    mainProgram = "oneshot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/onetun/default.nix b/nixpkgs/pkgs/tools/networking/onetun/default.nix
new file mode 100644
index 000000000000..87a9b0bfc82f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/onetun/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "onetun";
+  version = "0.3.7";
+
+  src = fetchFromGitHub {
+    owner = "aramperes";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-GVIRCMeuuhUA8lqQ1oI/Xcuf90QIlwhqYeU+HhbGWXQ=";
+  };
+
+  cargoHash = "sha256-TRfr4riMzR/MbsV2RiQNlPoPLhHK5EScNBCeyyamfgE=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "A cross-platform, user-space WireGuard port-forwarder that requires no root-access or system network configurations";
+    homepage = "https://github.com/aramperes/onetun";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "onetun";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ookla-speedtest/default.nix b/nixpkgs/pkgs/tools/networking/ookla-speedtest/default.nix
new file mode 100644
index 000000000000..e36d5f7f1777
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ookla-speedtest/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenvNoCC, fetchurl }:
+
+let
+  stdenv = stdenvNoCC;
+
+  pname = "ookla-speedtest";
+  version = "1.2.0";
+
+  srcs = rec {
+    x86_64-linux = fetchurl {
+      url = "https://install.speedtest.net/app/cli/${pname}-${version}-linux-x86_64.tgz";
+      sha256 = "sha256-VpBZbFT/m+1j+jcy+BigXbwtsZrTbtaPIcpfZNXP7rc=";
+    };
+    i686-linux = fetchurl {
+      url = "https://install.speedtest.net/app/cli/${pname}-${version}-linux-i386.tgz";
+      sha256 = "sha256-n/fhjbrn7g4DxmEIRFovts7qbIb2ZILhOS9ViBt3L+g=";
+    };
+    aarch64-linux = fetchurl {
+      url = "https://install.speedtest.net/app/cli/${pname}-${version}-linux-aarch64.tgz";
+      sha256 = "sha256-OVPSMdo3g+K/iQS23XJ2fFxuUz4WPTdC/QQ3r/pDG9M=";
+    };
+    armv7l-linux = fetchurl {
+      url = "https://install.speedtest.net/app/cli/${pname}-${version}-linux-armhf.tgz";
+      sha256 = "sha256-5F/N672KGFVTU1Uz3QMtaxC8jGTu5BObEUe5wJg10I0=";
+    };
+    x86_64-darwin = fetchurl {
+      url = "https://install.speedtest.net/app/cli/${pname}-${version}-macosx-universal.tgz";
+      sha256 = "sha256-yfgZIUnryI+GmZmM7Ksc4UQUQEWQfs5vU89Qh39N5m8=";
+    };
+    aarch64-darwin = x86_64-darwin;
+  };
+in
+
+stdenv.mkDerivation rec {
+  inherit pname version;
+
+  src = srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  sourceRoot = ".";
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  installPhase = ''
+    install -D speedtest $out/bin/speedtest
+    install -D speedtest.5 $out/share/man/man5/speedtest.5
+  '';
+
+  meta = with lib; {
+    description = "Command line internet speedtest tool by Ookla";
+    homepage = "https://www.speedtest.net/apps/cli";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ kranzes ];
+    platforms = lib.attrNames srcs;
+    mainProgram = "speedtest";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/oonf-olsrd2/default.nix b/nixpkgs/pkgs/tools/networking/oonf-olsrd2/default.nix
new file mode 100644
index 000000000000..bc7cbe8d491d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/oonf-olsrd2/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "oonf-olsrd2";
+  version = "0.15.1";
+
+  src = fetchFromGitHub {
+    owner = "OLSR";
+    repo = "OONF";
+    rev = "v${version}";
+    hash = "sha256-7EH2K7gaBGD95WFlG6RRhKEWJm91Xv2GOHYQjZWuzl0=";
+  };
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: CMakeFiles/oonf_dlep_proxy.dir/router/dlep_router_session.c.o:(.bss+0x0):
+  #     multiple definition of `LOG_DLEP_ROUTER'; CMakeFiles/oonf_dlep_proxy.dir/router/dlep_router.c.o:(.bss+0x0): first defined here
+  # Can be removed once release with https://github.com/OLSR/OONF/pull/40 is out.
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  cmakeFlags = [
+    "-DOONF_NO_WERROR=yes"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  meta = with lib; {
+    description = "An adhoc wireless mesh routing daemon";
+    license = licenses.bsd3;
+    homepage = "http://olsr.org/";
+    maintainers = with maintainers; [ mkg20001 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ooniprobe-cli/default.nix b/nixpkgs/pkgs/tools/networking/ooniprobe-cli/default.nix
new file mode 100644
index 000000000000..c7f00061382d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ooniprobe-cli/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ooniprobe-cli";
+  version = "3.20.1";
+
+  src = fetchFromGitHub {
+    owner = "ooni";
+    repo = "probe-cli";
+    rev = "v${version}";
+    hash = "sha256-XjIrae4HPFB1Rv8yIAUh6Xj9UVU55Wx7SuyKJ0BvmXY=";
+  };
+
+  vendorHash = "sha256-HYU+oS+iqdl2jQJc3h9T+MSc/Hq2W6UqP+oPSEyfcOU=";
+
+  subPackages = [ "cmd/ooniprobe" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    changelog = "https://github.com/ooni/probe-cli/releases/tag/${src.rev}";
+    description = "The Open Observatory of Network Interference command line network probe";
+    homepage = "https://ooni.org/install/cli";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+    mainProgram = "ooniprobe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openapi-generator-cli/default.nix b/nixpkgs/pkgs/tools/networking/openapi-generator-cli/default.nix
new file mode 100644
index 000000000000..ec6e4f28ab95
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openapi-generator-cli/default.nix
@@ -0,0 +1,45 @@
+{ callPackage, lib, stdenv, fetchurl, jre, makeWrapper }:
+
+let this = stdenv.mkDerivation (finalAttrs: {
+  version = "7.3.0";
+  pname = "openapi-generator-cli";
+
+  jarfilename = "${finalAttrs.pname}-${finalAttrs.version}.jar";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  src = fetchurl {
+    url = "mirror://maven/org/openapitools/${finalAttrs.pname}/${finalAttrs.version}/${finalAttrs.jarfilename}";
+    sha256 = "sha256-h5wVNAp1oZp+cg78JCwyI+DkIHsGlNbRzqXH3YfPHM4=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D "$src" "$out/share/java/${finalAttrs.jarfilename}"
+
+    makeWrapper ${jre}/bin/java $out/bin/${finalAttrs.pname} \
+      --add-flags "-jar $out/share/java/${finalAttrs.jarfilename}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an OpenAPI Spec";
+    homepage = "https://github.com/OpenAPITools/openapi-generator";
+    changelog = "https://github.com/OpenAPITools/openapi-generator/releases/tag/v${finalAttrs.version}";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ shou ];
+    mainProgram = "openapi-generator-cli";
+  };
+
+  passthru.tests.example = callPackage ./example.nix {
+    openapi-generator-cli = this;
+  };
+});
+in this
diff --git a/nixpkgs/pkgs/tools/networking/openapi-generator-cli/example.nix b/nixpkgs/pkgs/tools/networking/openapi-generator-cli/example.nix
new file mode 100644
index 000000000000..047c02a9a912
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openapi-generator-cli/example.nix
@@ -0,0 +1,31 @@
+{ openapi-generator-cli, fetchurl, runCommand }:
+
+runCommand "openapi-generator-cli-test" {
+  nativeBuildInputs = [ openapi-generator-cli ];
+  petstore = fetchurl {
+    url = "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/14c0908becbccd78252be49bd92be8c53cd2b9e3/examples/v3.0/petstore.yaml";
+    hash = "sha256-q2D1naR41KwxLNn6vMbL0G+Pl1q4oaDCApsqQfZf7dU=";
+  };
+  config = builtins.toJSON {
+    elmVersion = "0.19";
+    elmPrefixCustomTypeVariants = false;
+  };
+  passAsFile = [ "config" ];
+} ''
+  openapi-generator-cli generate \
+    --input-spec $petstore \
+    --enable-post-process-file \
+    --generator-name elm \
+    --config "$config" \
+    --additional-properties elmEnableCustomBasePaths=true \
+    --output "$out" \
+    ;
+  find $out
+  echo >&2 'Looking for some keywords'
+  set -x
+  grep 'module Api.Request.Pets' $out/src/Api/Request/Pets.elm
+  grep 'createPets' $out/src/Api/Request/Pets.elm
+  grep '"limit"' $out/src/Api/Request/Pets.elm
+  set +x
+  echo "Looks OK!"
+''
diff --git a/nixpkgs/pkgs/tools/networking/openconnect/common.nix b/nixpkgs/pkgs/tools/networking/openconnect/common.nix
new file mode 100644
index 000000000000..fa54eecb89e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openconnect/common.nix
@@ -0,0 +1,49 @@
+{ version
+, src
+}:
+
+{ lib
+, stdenv
+, pkg-config
+, gnutls
+, p11-kit
+, openssl
+, useOpenSSL ? false
+, gmp
+, libxml2
+, stoken
+, zlib
+, vpnc-scripts
+, PCSC
+, useDefaultExternalBrowser ? stdenv.isLinux && stdenv.buildPlatform == stdenv.hostPlatform # xdg-utils doesn't cross-compile
+, xdg-utils
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openconnect";
+  inherit version src;
+
+  outputs = [ "out" "dev" ];
+
+  configureFlags = [
+    "--with-vpnc-script=${vpnc-scripts}/bin/vpnc-script"
+    "--disable-nls"
+    "--without-openssl-version-check"
+  ];
+
+  buildInputs = [ gmp libxml2 stoken zlib (if useOpenSSL then openssl else gnutls) ]
+    ++ lib.optional stdenv.isDarwin PCSC
+    ++ lib.optional stdenv.isLinux p11-kit
+    ++ lib.optional useDefaultExternalBrowser xdg-utils;
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+
+  meta = with lib; {
+    description = "VPN Client for Cisco's AnyConnect SSL VPN";
+    homepage = "https://www.infradead.org/openconnect/";
+    license = licenses.lgpl21Only;
+    maintainers = with maintainers; [ pradeepchhetri tricktron alyaeanyx ];
+    platforms = lib.platforms.unix;
+    mainProgram = "openconnect";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openconnect/default.nix b/nixpkgs/pkgs/tools/networking/openconnect/default.nix
new file mode 100644
index 000000000000..778aea8354eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openconnect/default.nix
@@ -0,0 +1,18 @@
+{ callPackage, fetchurl, darwin }:
+let
+  common = opts: callPackage (import ./common.nix opts) {
+    inherit (darwin.apple_sdk.frameworks) PCSC;
+  };
+in rec {
+  openconnect = common rec {
+    version = "9.12";
+    src = fetchurl {
+      url = "ftp://ftp.infradead.org/pub/openconnect/openconnect-${version}.tar.gz";
+      sha256 = "sha256-or7c46pN/nXjbkB+SOjovJHUbe9TNayVZPv5G9SyQT4=";
+    };
+  };
+
+  openconnect_openssl = openconnect.override {
+    useOpenSSL = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/opendrop/default.nix b/nixpkgs/pkgs/tools/networking/opendrop/default.nix
new file mode 100644
index 000000000000..a617eadfc410
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/opendrop/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, fleep
+, ifaddr
+, libarchive-c
+, pillow
+, requests-toolbelt
+, setuptools
+, zeroconf
+, pytestCheckHook
+, openssl
+}:
+
+buildPythonApplication rec {
+  pname = "opendrop";
+  version = "0.13.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "seemoo-lab";
+    repo = "opendrop";
+    rev = "v${version}";
+    hash = "sha256-4FeVQO7Z6t9mjIgesdjKx4Mi+Ro5EVGJpEFjCvB2SlA=";
+  };
+
+  nativeBuildInputs = [
+    # Tests fail if I put it on buildInputs
+    openssl
+  ];
+
+  propagatedBuildInputs = [
+    fleep
+    ifaddr
+    libarchive-c
+    pillow
+    requests-toolbelt
+    setuptools
+    zeroconf
+  ];
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath nativeBuildInputs}"
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    # Solves PermissionError: [Errno 13] Permission denied: '/homeless-shelter'
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "An open Apple AirDrop implementation written in Python";
+    homepage = "https://owlink.org/";
+    changelog = "https://github.com/seemoo-lab/opendrop/releases/tag/${src.rev}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ wolfangaukang ];
+    mainProgram = "opendrop";
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openfortivpn/default.nix b/nixpkgs/pkgs/tools/networking/openfortivpn/default.nix
new file mode 100644
index 000000000000..17c0d1390f31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openfortivpn/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, openssl
+, ppp
+, systemd
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, withPpp ? stdenv.isLinux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openfortivpn";
+  version = "1.21.0";
+
+  src = fetchFromGitHub {
+    owner = "adrienverge";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7Yf22EpOTEGGqPoNGnHFyn5A4n7aYFXoSE1G6zyzT3M=";
+  };
+
+  # we cannot write the config file to /etc and as we don't need the file, so drop it
+  postPatch = ''
+    substituteInPlace Makefile.am \
+      --replace '$(DESTDIR)$(confdir)' /tmp
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [
+    openssl
+  ]
+  ++ lib.optional withSystemd systemd
+  ++ lib.optional withPpp ppp;
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+  ]
+  ++ lib.optional withSystemd "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+  ++ lib.optional withPpp "--with-pppd=${ppp}/bin/pppd";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Client for PPP+SSL VPN tunnel services";
+    homepage = "https://github.com/adrienverge/openfortivpn";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ madjar ];
+    platforms = with platforms; linux ++ darwin;
+    mainProgram = "openfortivpn";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openntpd/default.nix b/nixpkgs/pkgs/tools/networking/openntpd/default.nix
new file mode 100644
index 000000000000..e1497ab08527
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openntpd/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, libressl
+, privsepPath ? "/var/empty"
+, privsepUser ? "ntp"
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openntpd";
+  version = "6.8p1";
+
+  src = fetchurl {
+    url = "mirror://openbsd/OpenNTPD/${pname}-${version}.tar.gz";
+    sha256 = "0ijsylc7a4jlpxsqa0jq1w1c7333id8pcakzl7a5749ria1xp0l5";
+  };
+
+  postPatch = ''
+    sed -i '20i#include <sys/cdefs.h>' src/ntpd.h
+    sed -i '19i#include <sys/cdefs.h>' src/log.c
+  '';
+
+  configureFlags = [
+    "--with-privsep-path=${privsepPath}"
+    "--with-privsep-user=${privsepUser}"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-cacert=/etc/ssl/certs/ca-certificates.crt"
+  ];
+
+  buildInputs = [ libressl ];
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "localstatedir=\${TMPDIR}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.openntpd.org/";
+    license = licenses.bsd3;
+    description = "OpenBSD NTP daemon (Debian port)";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openresolv/default.nix b/nixpkgs/pkgs/tools/networking/openresolv/default.nix
new file mode 100644
index 000000000000..e937c6bcdf60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openresolv/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "openresolv";
+  version = "3.13.2";
+
+  src = fetchFromGitHub {
+    owner = "NetworkConfiguration";
+    repo = "openresolv";
+    rev = "v${version}";
+    sha256 = "sha256-rpfzAIzuiO+QTFhN+tHND+OQOyX/GUPvLLX3CSSwqA4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  configurePhase =
+    ''
+      cat > config.mk <<EOF
+      PREFIX=$out
+      SYSCONFDIR=/etc
+      SBINDIR=$out/sbin
+      LIBEXECDIR=$out/libexec/resolvconf
+      VARDIR=/run/resolvconf
+      MANDIR=$out/share/man
+      RESTARTCMD=false
+      EOF
+    '';
+
+  installFlags = [ "SYSCONFDIR=$(out)/etc" ];
+
+  postInstall = ''
+    wrapProgram "$out/sbin/resolvconf" --set PATH "${coreutils}/bin"
+  '';
+
+  meta = {
+    description = "A program to manage /etc/resolv.conf";
+    homepage = "https://roy.marples.name/projects/openresolv";
+    license = lib.licenses.bsd2;
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/opensm/default.nix b/nixpkgs/pkgs/tools/networking/opensm/default.nix
new file mode 100644
index 000000000000..6026292f386f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/opensm/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, flex, rdma-core }:
+
+stdenv.mkDerivation rec {
+  pname = "opensm";
+  version = "3.3.24";
+
+  src = fetchFromGitHub {
+    owner = "linux-rdma";
+    repo = "opensm";
+    rev = version;
+    sha256 = "sha256-/bqo5r9pVt7vg29xaRRO/9k21AMlmoe2327Ot5gVIwc=";
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool bison flex ];
+
+  buildInputs = [ rdma-core ];
+
+  preConfigure = ''
+    patchShebangs ./autogen.sh
+    ./autogen.sh
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Infiniband subnet manager";
+    homepage = "https://www.openfabrics.org/";
+    license = licenses.gpl2; # dual licensed as 2-clause BSD
+    maintainers = [ maintainers.aij ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openssh/common.nix b/nixpkgs/pkgs/tools/networking/openssh/common.nix
new file mode 100644
index 000000000000..5bae2050fbfc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openssh/common.nix
@@ -0,0 +1,182 @@
+{ pname
+, version
+, extraDesc ? ""
+, src
+, extraPatches ? []
+, extraNativeBuildInputs ? []
+, extraConfigureFlags ? []
+, extraMeta ? {}
+}:
+
+{ lib, stdenv
+# This *is* correct, though unusual. as a way of getting krb5-config from the
+# package without splicing See: https://github.com/NixOS/nixpkgs/pull/107606
+, pkgs
+, fetchurl
+, autoreconfHook
+, zlib
+, openssl
+, libedit
+, ldns
+, pkg-config
+, pam
+, libredirect
+, etcDir ? null
+, withKerberos ? true
+, withLdns ? true
+, libkrb5
+, libfido2
+, hostname
+, nixosTests
+, withFIDO ? stdenv.hostPlatform.isUnix && !stdenv.hostPlatform.isMusl
+, withPAM ? stdenv.hostPlatform.isLinux
+, linkOpenssl ? true
+}:
+
+stdenv.mkDerivation {
+  inherit pname version src;
+
+  patches = [
+    ./locale_archive.patch
+
+    (fetchurl {
+      url = "https://git.alpinelinux.org/aports/plain/main/openssh/gss-serv.c.patch?id=a7509603971ce2f3282486a43bb773b1b522af83";
+      sha256 = "sha256-eFFOd4B2nccRZAQWwdBPBoKWjfEdKEVGJvKZAzLu3HU=";
+    })
+
+    # See discussion in https://github.com/NixOS/nixpkgs/pull/16966
+    ./dont_create_privsep_path.patch
+  ] ++ extraPatches;
+
+  postPatch =
+    # On Hydra this makes installation fail (sometimes?),
+    # and nix store doesn't allow such fancy permission bits anyway.
+    ''
+      substituteInPlace Makefile.in --replace '$(INSTALL) -m 4711' '$(INSTALL) -m 0711'
+    '';
+
+  strictDeps = true;
+  nativeBuildInputs = [ autoreconfHook pkg-config ]
+    # This is not the same as the libkrb5 from the inputs! pkgs.libkrb5 is
+    # needed here to access krb5-config in order to cross compile. See:
+    # https://github.com/NixOS/nixpkgs/pull/107606
+    ++ lib.optional withKerberos pkgs.libkrb5
+    ++ extraNativeBuildInputs;
+  buildInputs = [ zlib openssl libedit ]
+    ++ lib.optional withFIDO libfido2
+    ++ lib.optional withKerberos libkrb5
+    ++ lib.optional withLdns ldns
+    ++ lib.optional withPAM pam;
+
+  preConfigure = ''
+    # Setting LD causes `configure' and `make' to disagree about which linker
+    # to use: `configure' wants `gcc', but `make' wants `ld'.
+    unset LD
+  '';
+
+  # I set --disable-strip because later we strip anyway. And it fails to strip
+  # properly when cross building.
+  configureFlags = [
+    "--sbindir=\${out}/bin"
+    "--localstatedir=/var"
+    "--with-pid-dir=/run"
+    "--with-mantype=man"
+    "--with-libedit=yes"
+    "--disable-strip"
+    (lib.withFeature withPAM "pam")
+  ] ++ lib.optional (etcDir != null) "--sysconfdir=${etcDir}"
+    ++ lib.optional withFIDO "--with-security-key-builtin=yes"
+    ++ lib.optional withKerberos (assert libkrb5 != null; "--with-kerberos5=${libkrb5}")
+    ++ lib.optional stdenv.isDarwin "--disable-libutil"
+    ++ lib.optional (!linkOpenssl) "--without-openssl"
+    ++ lib.optional withLdns "--with-ldns"
+    ++ extraConfigureFlags;
+
+  ${if stdenv.hostPlatform.isStatic then "NIX_LDFLAGS" else null}= [ "-laudit" ] ++ lib.optionals withKerberos [ "-lkeyutils" ];
+
+  buildFlags = [ "SSH_KEYSIGN=ssh-keysign" ];
+
+  enableParallelBuilding = true;
+
+  hardeningEnable = [ "pie" ];
+
+  doCheck = true;
+  enableParallelChecking = false;
+  nativeCheckInputs = [ openssl ] ++ lib.optional (!stdenv.isDarwin) hostname;
+  preCheck = lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
+    # construct a dummy HOME
+    export HOME=$(realpath ../dummy-home)
+    mkdir -p ~/.ssh
+
+    # construct a dummy /etc/passwd file for the sshd under test
+    # to use to look up the connecting user
+    DUMMY_PASSWD=$(realpath ../dummy-passwd)
+    cat > $DUMMY_PASSWD <<EOF
+    $(whoami)::$(id -u):$(id -g)::$HOME:$SHELL
+    EOF
+
+    # we need to NIX_REDIRECTS /etc/passwd both for processes
+    # invoked directly and those invoked by the "remote" session
+    cat > ~/.ssh/environment.base <<EOF
+    NIX_REDIRECTS=/etc/passwd=$DUMMY_PASSWD
+    LD_PRELOAD=${libredirect}/lib/libredirect.so
+    EOF
+
+    # use an ssh environment file to ensure environment is set
+    # up appropriately for build environment even when no shell
+    # is invoked by the ssh session. otherwise the PATH will
+    # only contain default unix paths like /bin which we don't
+    # have in our build environment
+    cat - regress/test-exec.sh > regress/test-exec.sh.new <<EOF
+    cp $HOME/.ssh/environment.base $HOME/.ssh/environment
+    echo "PATH=\$PATH" >> $HOME/.ssh/environment
+    EOF
+    mv regress/test-exec.sh.new regress/test-exec.sh
+
+    # explicitly enable the PermitUserEnvironment feature
+    substituteInPlace regress/test-exec.sh \
+      --replace \
+        'cat << EOF > $OBJ/sshd_config' \
+        $'cat << EOF > $OBJ/sshd_config\n\tPermitUserEnvironment yes'
+
+    # some tests want to use files under /bin as example files
+    for f in regress/sftp-cmds.sh regress/forwarding.sh; do
+      substituteInPlace $f --replace '/bin' "$(dirname $(type -p ls))"
+    done
+
+    # set up NIX_REDIRECTS for direct invocations
+    set -a; source ~/.ssh/environment.base; set +a
+  '';
+  # integration tests hard to get working on darwin with its shaky
+  # sandbox
+  # t-exec tests fail on musl
+  checkTarget = lib.optional (!stdenv.isDarwin && !stdenv.hostPlatform.isMusl) "t-exec"
+    # other tests are less demanding of the environment
+    ++ [ "unit" "file-tests" "interop-tests" ];
+
+  postInstall = ''
+    # Install ssh-copy-id, it's very useful.
+    cp contrib/ssh-copy-id $out/bin/
+    chmod +x $out/bin/ssh-copy-id
+    cp contrib/ssh-copy-id.1 $out/share/man/man1/
+  '';
+
+  installTargets = [ "install-nokeys" ];
+  installFlags = [
+    "sysconfdir=\${out}/etc/ssh"
+  ];
+
+  passthru.tests = {
+    borgbackup-integration = nixosTests.borgbackup;
+  };
+
+  meta = with lib; {
+    description = "An implementation of the SSH protocol${extraDesc}";
+    homepage = "https://www.openssh.com/";
+    changelog = "https://www.openssh.com/releasenotes.html";
+    license = licenses.bsd2;
+    platforms = platforms.unix ++ platforms.windows;
+    maintainers = (extraMeta.maintainers or []) ++ (with maintainers; [ eelco aneeshusa ]);
+    mainProgram = "ssh";
+  } // extraMeta;
+}
diff --git a/nixpkgs/pkgs/tools/networking/openssh/copyid.nix b/nixpkgs/pkgs/tools/networking/openssh/copyid.nix
new file mode 100644
index 000000000000..40707c2a7346
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openssh/copyid.nix
@@ -0,0 +1,11 @@
+{ runCommand, openssh }:
+
+runCommand "ssh-copy-id-${openssh.version}" {
+  meta = openssh.meta // {
+    description = "A tool to copy SSH public keys to a remote machine";
+    priority = (openssh.meta.priority or 0) - 1;
+  };
+} ''
+  install -Dm 755 {${openssh},$out}/bin/ssh-copy-id
+  install -Dm 644 {${openssh},$out}/share/man/man1/ssh-copy-id.1.gz
+''
diff --git a/nixpkgs/pkgs/tools/networking/openssh/default.nix b/nixpkgs/pkgs/tools/networking/openssh/default.nix
new file mode 100644
index 000000000000..e13e9cb92731
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openssh/default.nix
@@ -0,0 +1,81 @@
+{ callPackage, lib, fetchurl, fetchpatch, autoreconfHook }:
+let
+  common = opts: callPackage (import ./common.nix opts) { };
+in
+{
+  openssh = common rec {
+    pname = "openssh";
+    version = "9.6p1";
+
+    src = fetchurl {
+      url = "mirror://openbsd/OpenSSH/portable/openssh-${version}.tar.gz";
+      hash = "sha256-kQIRwHJVqMWtZUORtA7lmABxDdgRndU2LeCThap6d3w=";
+    };
+
+    extraPatches = [ ./ssh-keysign-8.5.patch ];
+    extraMeta.maintainers = lib.teams.helsinki-systems.members;
+  };
+
+  openssh_hpn = common rec {
+    pname = "openssh-with-hpn";
+    version = "9.5p1";
+    extraDesc = " with high performance networking patches";
+
+    src = fetchurl {
+      url = "mirror://openbsd/OpenSSH/portable/openssh-${version}.tar.gz";
+      hash = "sha256-8Cbnt5un+1QPdRgq+W3IqPHbOV+SK7yfbKYDZyaGCGs=";
+    };
+
+    extraPatches = let url = "https://raw.githubusercontent.com/freebsd/freebsd-ports/700625bcd86b74cf3fb9536aeea250d7f8cd1fd5/security/openssh-portable/files/extra-patch-hpn"; in
+    [
+      ./ssh-keysign-8.5.patch
+
+      # HPN Patch from FreeBSD ports
+      (fetchpatch {
+        name = "ssh-hpn-wo-channels.patch";
+        inherit url;
+        stripLen = 1;
+        excludes = [ "channels.c" ];
+        hash = "sha256-hYB3i0ifNOgGLYwElMJFcT+ktczLKciq3qw1tTHZHcc=";
+      })
+
+      (fetchpatch {
+        name = "ssh-hpn-channels.patch";
+        inherit url;
+        extraPrefix = "";
+        includes = [ "channels.c" ];
+        hash = "sha256-pDLUbjv5XIyByEbiRAXC3WMUPKmn15af1stVmcvr7fE=";
+      })
+    ];
+
+    extraNativeBuildInputs = [ autoreconfHook ];
+
+    extraConfigureFlags = [ "--with-hpn" ];
+    extraMeta = {
+      maintainers = with lib.maintainers; [ abbe ];
+    };
+  };
+
+  openssh_gssapi = common rec {
+    pname = "openssh-with-gssapi";
+    version = "9.5p1";
+    extraDesc = " with GSSAPI support";
+
+    src = fetchurl {
+      url = "mirror://openbsd/OpenSSH/portable/openssh-${version}.tar.gz";
+      hash = "sha256-8Cbnt5un+1QPdRgq+W3IqPHbOV+SK7yfbKYDZyaGCGs=";
+    };
+
+    extraPatches = [
+      ./ssh-keysign-8.5.patch
+
+      (fetchpatch {
+        name = "openssh-gssapi.patch";
+        url = "https://salsa.debian.org/ssh-team/openssh/raw/debian/1%25${version}-1/debian/patches/gssapi.patch";
+        sha256 = "sha256-E36jxnPcu6RTyXXb9yVBCoFIVchiOSLX7L74ng1Dmao=";
+      })
+    ];
+
+    extraNativeBuildInputs = [ autoreconfHook ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openssh/dont_create_privsep_path.patch b/nixpkgs/pkgs/tools/networking/openssh/dont_create_privsep_path.patch
new file mode 100644
index 000000000000..23f3ab67a087
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openssh/dont_create_privsep_path.patch
@@ -0,0 +1,12 @@
+diff --git i/Makefile.in w/Makefile.in
+index 04e1c8e5..9bd5d01b 100644
+--- i/Makefile.in
++++ w/Makefile.in
+@@ -329,7 +329,6 @@ install-files:
+ 	$(MKDIR_P) $(DESTDIR)$(mandir)/$(mansubdir)5
+ 	$(MKDIR_P) $(DESTDIR)$(mandir)/$(mansubdir)8
+ 	$(MKDIR_P) $(DESTDIR)$(libexecdir)
+-	$(MKDIR_P) -m 0755 $(DESTDIR)$(PRIVSEP_PATH)
+ 	$(INSTALL) -m 0755 $(STRIP_OPT) ssh$(EXEEXT) $(DESTDIR)$(bindir)/ssh$(EXEEXT)
+ 	$(INSTALL) -m 0755 $(STRIP_OPT) scp$(EXEEXT) $(DESTDIR)$(bindir)/scp$(EXEEXT)
+ 	$(INSTALL) -m 0755 $(STRIP_OPT) ssh-add$(EXEEXT) $(DESTDIR)$(bindir)/ssh-add$(EXEEXT)
diff --git a/nixpkgs/pkgs/tools/networking/openssh/locale_archive.patch b/nixpkgs/pkgs/tools/networking/openssh/locale_archive.patch
new file mode 100644
index 000000000000..3fe4a21ea47e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openssh/locale_archive.patch
@@ -0,0 +1,15 @@
+diff --git i/session.c w/session.c
+index 58826db1..658dd911 100644
+--- i/session.c
++++ w/session.c
+@@ -1053,6 +1053,10 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
+ 	if (getenv("TZ"))
+ 		child_set_env(&env, &envsize, "TZ", getenv("TZ"));
+ 
++	/* NixOS path to the glibc locale archive, to be set in the systemd job */
++	if (getenv("LOCALE_ARCHIVE"))
++		child_set_env(&env, &envsize, "LOCALE_ARCHIVE", getenv("LOCALE_ARCHIVE"));
++
+ 	/* Set custom environment options from pubkey authentication. */
+ 	if (options.permit_user_env) {
+ 		for (n = 0 ; n < auth_opts->nenv; n++) {
diff --git a/nixpkgs/pkgs/tools/networking/openssh/ssh-keysign-8.5.patch b/nixpkgs/pkgs/tools/networking/openssh/ssh-keysign-8.5.patch
new file mode 100644
index 000000000000..67c45b6b7d89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openssh/ssh-keysign-8.5.patch
@@ -0,0 +1,24 @@
+diff --git a/pathnames.h b/pathnames.h
+index cb44caa4..354fdf05 100644
+--- a/pathnames.h
++++ b/pathnames.h
+@@ -124,7 +124,7 @@
+ 
+ /* Location of ssh-keysign for hostbased authentication */
+ #ifndef _PATH_SSH_KEY_SIGN
+-#define _PATH_SSH_KEY_SIGN		"/usr/libexec/ssh-keysign"
++#define _PATH_SSH_KEY_SIGN		"ssh-keysign"
+ #endif
+ 
+ /* Location of ssh-pkcs11-helper to support keys in tokens */
+--- a/sshconnect2.c
++++ b/sshconnect2.c
+@@ -2021,7 +2021,7 @@
+ 
+ 		debug3_f("[child] pid=%ld, exec %s",
+ 		    (long)getpid(), _PATH_SSH_KEY_SIGN);
+-		execl(_PATH_SSH_KEY_SIGN, _PATH_SSH_KEY_SIGN, (char *)NULL);
++		execlp(_PATH_SSH_KEY_SIGN, _PATH_SSH_KEY_SIGN, (char *)NULL);
+ 		fatal_f("exec(%s): %s", _PATH_SSH_KEY_SIGN,
+ 		    strerror(errno));
+ 	}
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/auth-ldap-fix-conftest.patch b/nixpkgs/pkgs/tools/networking/openvpn/auth-ldap-fix-conftest.patch
new file mode 100644
index 000000000000..c571fda5d3c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/auth-ldap-fix-conftest.patch
@@ -0,0 +1,36 @@
+diff --git a/aclocal.m4 b/aclocal.m4
+index e5b7dbf..01cecf1 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -73,6 +73,7 @@ AC_DEFUN([OD_OBJC_RUNTIME],[
+ 				AC_LANG_PROGRAM([
+ 						#include <objc/objc.h>
+ 						#include <objc/Object.h>
++						#include <stdio.h>
+ 					], [
+ 						Object *obj = @<:@Object alloc@:>@;
+ 						puts(@<:@obj name@:>@);
+@@ -94,6 +95,7 @@ AC_DEFUN([OD_OBJC_RUNTIME],[
+ 					AC_LANG_PROGRAM([
+ 							#include <objc/objc.h>
+ 							#include <objc/Object.h>
++							#include <stdio.h>
+ 						], [
+ 							Object *obj = @<:@Object alloc@:>@;
+ 							puts(@<:@obj name@:>@);
+@@ -131,6 +133,7 @@ AC_DEFUN([OD_OBJC_RUNTIME],[
+ 					AC_LANG_PROGRAM([
+ 							#include <objc/objc.h>
+ 							#include <objc/objc-api.h>
++							#include <stdio.h>
+ 						], [
+ 							id class = objc_lookUpClass("Object");
+ 							id obj = @<:@class alloc@:>@;
+@@ -162,6 +165,7 @@ AC_DEFUN([OD_OBJC_RUNTIME],[
+ 							#else
+ 							#include <objc/objc-api.h>
+ 							#endif
++							#include <stdio.h>
+ 						], [
+ 							#ifdef __GNU_LIBOBJC_
+ 							Class class = objc_lookUpClass("Object");
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/default.nix b/nixpkgs/pkgs/tools/networking/openvpn/default.nix
new file mode 100644
index 000000000000..091bec29da08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, libcap_ng
+, libnl
+, lz4
+, lzo
+, openssl
+, pam
+, useSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, systemd
+, update-systemd-resolved
+, pkcs11Support ? false
+, pkcs11helper
+, nixosTests
+}:
+
+let
+  inherit (lib) optional optionals optionalString;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "openvpn";
+  version = "2.6.9";
+
+  src = fetchurl {
+    url = "https://swupdate.openvpn.net/community/releases/openvpn-${finalAttrs.version}.tar.gz";
+    hash = "sha256-4I0UfhW0UI380dZhih8h8UlfmBeo2twe3fBTL6EW1+M=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ lz4 lzo openssl ]
+    ++ optionals stdenv.isLinux [ libcap_ng libnl pam ]
+    ++ optional useSystemd systemd
+    ++ optional pkcs11Support pkcs11helper;
+
+  configureFlags = optional useSystemd "--enable-systemd"
+    ++ optional pkcs11Support "--enable-pkcs11"
+    ++ optional stdenv.isDarwin "--disable-plugin-auth-pam";
+
+  # We used to vendor the update-systemd-resolved script inside libexec,
+  # but a separate package was made, that uses libexec/openvpn. Copy it
+  # into libexec in case any consumers expect it to be there even though
+  # they should use the update-systemd-resolved package instead.
+  postInstall = ''
+    mkdir -p $out/share/doc/openvpn/examples
+    cp -r sample/sample-{config-files,keys,scripts}/ $out/share/doc/openvpn/examples
+  '' + optionalString useSystemd ''
+    install -Dm555 -t $out/libexec ${update-systemd-resolved}/libexec/openvpn/*
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = {
+    inherit (nixosTests) initrd-network-openvpn systemd-initrd-networkd-openvpn;
+  };
+
+  meta = with lib; {
+    description = "A robust and highly flexible tunneling application";
+    downloadPage = "https://openvpn.net/community-downloads/";
+    homepage = "https://openvpn.net/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ viric peterhoeg ];
+    platforms = platforms.unix;
+    mainProgram = "openvpn";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix b/nixpkgs/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix
new file mode 100644
index 000000000000..df93dacb4711
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, gnustep
+, re2c
+, openldap
+, openssl
+, openvpn
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openvpn-auth-ldap";
+  version = "2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "threerings";
+    repo = "openvpn-auth-ldap";
+    rev = "auth-ldap-${version}";
+    sha256 = "1j30sygj8nm8wjqxzpb7pfzr3dxqxggswzxd7z5yk7y04c0yp1hb";
+  };
+
+  patches = [
+    ./auth-ldap-fix-conftest.patch
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gnustep.base
+    gnustep.libobjc
+    gnustep.make
+    re2c
+  ];
+
+  buildInputs = [
+    openldap
+    openssl
+    openvpn
+  ];
+
+  configureFlags = [
+    "--with-objc-runtime=GNU"
+    "--with-openvpn=${openvpn}/include"
+    "--libdir=$(out)/lib/openvpn"
+  ];
+
+  doCheck = true;
+
+  preInstall = ''
+    mkdir -p $out/lib/openvpn $out/share/doc/openvpn/examples
+    cp README.md $out/share/doc/openvpn/
+    cp auth-ldap.conf $out/share/doc/openvpn/examples/
+  '';
+
+  meta = with lib; {
+    description = "LDAP authentication plugin for OpenVPN";
+    homepage = "https://github.com/threerings/openvpn-auth-ldap";
+    license = [
+      licenses.asl20
+      licenses.bsd3
+    ];
+    maintainers = [ maintainers.benley ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix b/nixpkgs/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix
new file mode 100644
index 000000000000..514491c2be21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchgit, makeWrapper, coreutils, gawk, util-linux }:
+
+stdenv.mkDerivation {
+  pname = "openvpn-learnaddress";
+  version = "unstable-2013-10-21";
+
+  src = fetchgit {
+    url = "https://gist.github.com/4058733.git";
+    rev = "19b03c3beb0190df46ea07bf4b68244acb8eae80";
+    sha256 = "16pcyvyhwsx34i0cjkkx906lmrwdd9gvznvqdwlad4ha8l8f8z42";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ coreutils gawk util-linux ];
+
+  installPhase = ''
+    install -Dm555 ovpn-learnaddress $out/libexec/openvpn/openvpn-learnaddress
+
+    wrapProgram $out/libexec/openvpn/openvpn-learnaddress \
+        --prefix PATH : ${lib.makeBinPath [ coreutils gawk util-linux ]}
+  '';
+
+  meta = {
+    description = "Openvpn learn-address script to manage a hosts-like file";
+    homepage = "https://gist.github.com/offlinehacker/4058733/";
+    maintainers = [ lib.maintainers.offline ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/update-resolv-conf.nix b/nixpkgs/pkgs/tools/networking/openvpn/update-resolv-conf.nix
new file mode 100644
index 000000000000..e8533a214af1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/update-resolv-conf.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, openresolv, coreutils, systemd }:
+
+let
+  binPath = lib.makeBinPath [ coreutils openresolv systemd ];
+
+in
+stdenv.mkDerivation {
+  pname = "update-resolv-conf";
+  version = "unstable-2017-06-21";
+
+  src = fetchFromGitHub {
+    owner = "masterkorp";
+    repo = "openvpn-update-resolv-conf";
+    rev = "43093c2f970bf84cd374e18ec05ac6d9cae444b8";
+    sha256 = "1lf66bsgv2w6nzg1iqf25zpjf4ckcr45adkpgdq9gvhkfnvlp8av";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm555 update-resolv-conf.sh $out/libexec/openvpn/update-resolv-conf
+    install -Dm555 update-systemd-network.sh $out/libexec/openvpn/update-systemd-network
+
+    for i in $out/libexec/openvpn/*; do
+      wrapProgram $i --prefix PATH : ${binPath}
+    done
+  '';
+
+  meta = with lib; {
+    description = "Script to update your /etc/resolv.conf with DNS settings that come from the received push dhcp-options";
+    homepage = "https://github.com/masterkorp/openvpn-update-resolv-conf/";
+    maintainers = with maintainers; [ abbradar ];
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.nix b/nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.nix
new file mode 100644
index 000000000000..1b514eae02f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, iproute2
+, runtimeShell
+, systemd
+, coreutils
+, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "update-systemd-resolved";
+  # when updating this, check if additional binaries need injecting into PATH
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "jonathanio";
+    repo = "update-systemd-resolved";
+    rev = "v${version}";
+    hash = "sha256-lYJTR3oBmpENcqNHa9PFXsw7ly6agwjBWf4UXf1d8Kc=";
+  };
+
+  # set SCRIPT_NAME in case we are wrapped and inject PATH
+  patches = [
+    ./update-systemd-resolved.patch
+  ];
+
+  PREFIX = "${placeholder "out"}/libexec/openvpn";
+
+  postInstall = ''
+    substituteInPlace ${PREFIX}/update-systemd-resolved \
+      --subst-var-by PATH ${lib.makeBinPath [ coreutils iproute2 runtimeShell systemd util-linux ]}
+  '';
+
+  meta = with lib; {
+    description = "Helper script for OpenVPN to directly update the DNS settings of a link through systemd-resolved via DBus";
+    homepage = "https://github.com/jonathanio/update-systemd-resolved";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ eadwu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.patch b/nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.patch
new file mode 100644
index 000000000000..e03c476e5090
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.patch
@@ -0,0 +1,26 @@
+diff --git a/Makefile b/Makefile
+index 524b6b7..8a880f1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -9,7 +9,6 @@ all: install info
+ 
+ install:
+ 	@install -Dm750 $(SRC) $(DEST)
+-	@install -Dm644 $(SRC).conf $(DEST).conf
+ 
+ info:
+ 	@printf 'Successfully installed %s to %s.\n' $(SRC) $(DEST)
+diff --git a/update-systemd-resolved b/update-systemd-resolved
+index 1452e1a..39641cb 100755
+--- a/update-systemd-resolved
++++ b/update-systemd-resolved
+@@ -29,7 +29,8 @@
+ DBUS_DEST="org.freedesktop.resolve1"
+ DBUS_NODE="/org/freedesktop/resolve1"
+ 
+-SCRIPT_NAME="${BASH_SOURCE[0]##*/}"
++PATH="@PATH@"
++SCRIPT_NAME="update-systemd-resolved"
+ 
+ log() {
+   logger -s -t "$SCRIPT_NAME" "$@"
diff --git a/nixpkgs/pkgs/tools/networking/openvpn3/default.nix b/nixpkgs/pkgs/tools/networking/openvpn3/default.nix
new file mode 100644
index 000000000000..b6037d67d824
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn3/default.nix
@@ -0,0 +1,123 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, asio
+, autoconf-archive
+, autoreconfHook
+, glib
+, gtest
+, jsoncpp
+, libcap_ng
+, libnl
+, libuuid
+, lz4
+, openssl
+, pkg-config
+, protobuf
+, python3
+, systemd
+, enableSystemdResolved ? false
+, tinyxml-2
+, wrapGAppsHook
+}:
+
+let
+  openvpn3-core = fetchFromGitHub {
+    owner = "OpenVPN";
+    repo = "openvpn3";
+    rev = "7590cb109349809b948e8edaeecabdbfe24e4b17";
+    hash = "sha256-S9D/FQa7HYj0FJnyb5dCrtgTH9Nf2nvtyp/VHiebq7I=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "openvpn3";
+  # also update openvpn3-core
+  version = "20";
+
+  src = fetchFromGitHub {
+    owner = "OpenVPN";
+    repo = "openvpn3-linux";
+    rev = "v${version}";
+    hash = "sha256-Weyb+rcx04mpDdcL7Qt4O+PvPf5MLPAP/Uy+8qoNXbQ=";
+  };
+
+  postPatch = ''
+    rm -r ./vendor/googletest
+    cp -r ${gtest.src} ./vendor/googletest
+    rm -r ./openvpn3-core
+    ln -s ${openvpn3-core} ./openvpn3-core
+
+    chmod -R +w ./vendor/googletest
+    shopt -s globstar
+
+    patchShebangs **/*.py **/*.sh ./src/python/{openvpn2,openvpn3-as,openvpn3-autoload} \
+    ./distro/systemd/openvpn3-systemd ./src/tests/dbus/netcfg-subscription-test
+
+    echo "3.git:v${version}:unknown" > openvpn3-core-version
+  '';
+
+  preAutoreconf = ''
+    substituteInPlace ./update-version-m4.sh --replace 'VERSION="$(git describe --always --tags)"' "VERSION=v${version}"
+    ./update-version-m4.sh
+  '';
+
+  nativeBuildInputs = [
+    autoconf-archive
+    autoreconfHook
+    python3.pkgs.docutils
+    python3.pkgs.jinja2
+    pkg-config
+    wrapGAppsHook
+    python3.pkgs.wrapPython
+  ] ++ pythonPath;
+
+  buildInputs = [
+    asio
+    glib
+    jsoncpp
+    libcap_ng
+    libnl
+    libuuid
+    lz4
+    openssl
+    protobuf
+    tinyxml-2
+  ] ++ lib.optionals enableSystemdResolved [
+    systemd
+  ];
+
+  # runtime deps
+  pythonPath = with python3.pkgs; [
+    dbus-python
+    pygobject3
+  ];
+
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+  postFixup = ''
+    wrapPythonPrograms
+  '';
+
+  configureFlags = [
+    "--enable-bash-completion"
+    "--enable-addons-aws"
+    "--disable-selinux-build"
+    "--disable-build-test-progs"
+  ] ++ lib.optionals enableSystemdResolved [
+    # This defaults to --resolv-conf /etc/resolv.conf. See
+    # https://github.com/OpenVPN/openvpn3-linux/blob/v20/configure.ac#L434
+    "DEFAULT_DNS_RESOLVER=--systemd-resolved"
+  ];
+
+  NIX_LDFLAGS = "-lpthread";
+
+  meta = with lib; {
+    description = "OpenVPN 3 Linux client";
+    license = licenses.agpl3Plus;
+    homepage = "https://github.com/OpenVPN/openvpn3-linux/";
+    maintainers = with maintainers; [ shamilton kfears ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/oui/default.nix b/nixpkgs/pkgs/tools/networking/oui/default.nix
new file mode 100644
index 000000000000..9fd613a295e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/oui/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "oui";
+  version = "0.1.8";
+
+  src = fetchFromGitHub {
+    owner = "thatmattlove";
+    repo = "oui";
+    rev = "v${version}";
+    hash = "sha256-RLm8V2fLFvOwjnnq16ZmhwVdtgXPaehan7JTX3Xz30w=";
+  };
+
+  vendorHash = "sha256-TLVw4tnfvgK2h/Xj5LNNjDG4WQ83Bw8yBhZc16Tjmws=";
+
+  meta = with lib; {
+    description = "MAC Address CLI Toolkit";
+    homepage = "https://github.com/thatmattlove/oui";
+    license = with licenses; [ bsd3 ];
+    maintainers = teams.wdz.members;
+    mainProgram = "oui";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/owl/default.nix b/nixpkgs/pkgs/tools/networking/owl/default.nix
new file mode 100644
index 000000000000..568eeca0afff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/owl/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, fetchFromGitHub, cmake, libev, libnl, libpcap }:
+
+stdenv.mkDerivation rec {
+  pname = "owl";
+  version = "unstable-2022-01-30";
+
+  src = fetchFromGitHub {
+    owner = "seemoo-lab";
+    repo = "owl";
+    rev = "8e4e840b212ae5a09a8a99484be3ab18bad22fa7";
+    sha256 = "sha256-kFk+JFLGWGBu5FPH3qp/Bxa6t04f1kpeHz3H8GNF3fg=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libev libnl libpcap ];
+
+  meta = with lib; {
+    description = "An open Apple Wireless Direct Link (AWDL) implementation written in C";
+    homepage = "https://owlink.org/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "owl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/p2p/amule/default.nix b/nixpkgs/pkgs/tools/networking/p2p/amule/default.nix
new file mode 100644
index 000000000000..6d4950b40fca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/amule/default.nix
@@ -0,0 +1,103 @@
+{ monolithic ? true # build monolithic amule
+, enableDaemon ? false # build amule daemon
+, httpServer ? false # build web interface for the daemon
+, client ? false # build amule remote gui
+, fetchFromGitHub
+, fetchpatch
+, stdenv
+, lib
+, cmake
+, zlib
+, wxGTK32
+, perl
+, cryptopp
+, libupnp
+, boost # Not using boost leads to crashes with gtk3
+, gettext
+, libpng
+, pkg-config
+, makeWrapper
+, libX11
+}:
+
+# daemon and client are not build monolithic
+assert monolithic || (!monolithic && (enableDaemon || client || httpServer));
+
+stdenv.mkDerivation rec {
+  pname = "amule"
+    + lib.optionalString httpServer "-web"
+    + lib.optionalString enableDaemon "-daemon"
+    + lib.optionalString client "-gui";
+  version = "2.3.3";
+
+  src = fetchFromGitHub {
+    owner = "amule-project";
+    repo = "amule";
+    rev = version;
+    sha256 = "1nm4vxgmisn1b6l3drmz0q04x067j2i8lw5rnf0acaapwlp8qwvi";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/amule/1%3A2.3.3-3/debian/patches/wx3.2.patch";
+      hash = "sha256-OX5Ef80bL+dQqHo2OBLZvzMUrU6aOHfsF7AtoE1r7rs=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake gettext makeWrapper pkg-config ];
+
+  buildInputs = [
+    zlib
+    wxGTK32
+    perl
+    cryptopp.dev
+    libupnp
+    boost
+  ] ++ lib.optional httpServer libpng
+  ++ lib.optional client libX11;
+
+  cmakeFlags = [
+    "-DBUILD_MONOLITHIC=${if monolithic then "ON" else "OFF"}"
+    "-DBUILD_DAEMON=${if enableDaemon then "ON" else "OFF"}"
+    "-DBUILD_REMOTEGUI=${if client then "ON" else "OFF"}"
+    "-DBUILD_WEBSERVER=${if httpServer then "ON" else "OFF"}"
+    # building only the daemon fails when these are not set... this is
+    # due to mistakes in the Amule cmake code, but it does not cause
+    # extra code to be built...
+    "-Dwx_NEED_GUI=ON"
+    "-Dwx_NEED_ADV=ON"
+    "-Dwx_NEED_NET=ON"
+  ];
+
+  postPatch = ''
+    echo "find_package(Threads)" >> cmake/options.cmake
+  '';
+
+  # aMule will try to `dlopen' libupnp and libixml, so help it
+  # find them.
+  postInstall = lib.optionalString monolithic ''
+    wrapProgram $out/bin/amule \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libupnp ]}
+  '';
+
+  meta = with lib; {
+    description = "Peer-to-peer client for the eD2K and Kademlia networks";
+    longDescription = ''
+      aMule is an eMule-like client for the eD2k and Kademlia
+      networks, supporting multiple platforms.  Currently aMule
+      (officially) supports a wide variety of platforms and operating
+      systems, being compatible with more than 60 different
+      hardware+OS configurations.  aMule is entirely free, its
+      sourcecode released under the GPL just like eMule, and includes
+      no adware or spyware as is often found in proprietary P2P
+      applications.
+    '';
+
+    homepage = "https://github.com/amule-project/amule";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    # Undefined symbols for architecture arm64: "_FSFindFolder"
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/p2p/gtk-gnutella/default.nix b/nixpkgs/pkgs/tools/networking/p2p/gtk-gnutella/default.nix
new file mode 100644
index 000000000000..a9708dd4713c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/gtk-gnutella/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bison
+, desktop-file-utils
+, gettext
+, pkg-config
+, glib
+, gtk2
+, libxml2
+, libbfd
+, zlib
+, gnutls
+, enableGui ? true
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "gtk-gnutella";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "gtk-gnutella";
+    repo = "gtk-gnutella";
+    rev = "v${finalAttrs.version}";
+    sha256 = "sha256-LbSUdU+a9G8qL7gCZVJQ6UQMATpOMtktY6FeOkUuaYI=";
+  };
+
+  nativeBuildInputs = [
+    bison
+    desktop-file-utils
+    gettext
+    pkg-config
+  ];
+  buildInputs = [
+    glib
+    gnutls
+    libbfd
+    libxml2
+    zlib
+  ] ++ lib.optionals enableGui [
+    gtk2
+  ];
+
+  configureScript = "./build.sh";
+  configureFlags = [
+    "--configure-only"
+    # See https://sourceforge.net/p/gtk-gnutella/bugs/555/
+    "--disable-malloc"
+  ] ++ lib.optionals (!enableGui) [
+    "--topless"
+  ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    install -Dm0444 src/gtk-gnutella.man $out/share/man/man1/gtk-gnutella.1
+  '';
+
+  meta = with lib; {
+    description = "A GTK Gnutella client, optimized for speed and scalability";
+    homepage = "https://gtk-gnutella.sourceforge.net/"; # Code: https://github.com/gtk-gnutella/gtk-gnutella
+    changelog = "https://raw.githubusercontent.com/gtk-gnutella/gtk-gnutella/v${version}/ChangeLog";
+    maintainers = [ maintainers.doronbehar ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/p2p/tahoe-lafs/default.nix b/nixpkgs/pkgs/tools/networking/p2p/tahoe-lafs/default.nix
new file mode 100644
index 000000000000..3d2298e8b70e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/tahoe-lafs/default.nix
@@ -0,0 +1,103 @@
+{ lib, nettools, python3Packages, texinfo, fetchFromGitHub }:
+
+# FAILURES: The "running build_ext" phase fails to compile Twisted
+# plugins, because it tries to write them into Twisted's (immutable)
+# store path. The problem appears to be non-fatal, but there's probably
+# some loss of functionality because of it.
+
+python3Packages.buildPythonApplication rec {
+  pname = "tahoe-lafs";
+  version = "unstable-2021-07-09";
+
+  src = fetchFromGitHub {
+    owner = "tahoe-lafs";
+    repo = "tahoe-lafs";
+    rev = "8e28a9d0e02fde2388aca549da2b5c452ac4337f";
+    sha256 = "sha256-MuD/ZY+die7RCsuVdcePSD0DdwatXRi7CxW2iFt22L0=";
+  };
+
+  outputs = [ "out" "doc" "info" ];
+
+  postPatch = ''
+    sed -i "src/allmydata/util/iputil.py" \
+        -es"|_linux_path = '/sbin/ifconfig'|_linux_path = '${nettools}/bin/ifconfig'|g"
+
+    # Chroots don't have /etc/hosts and /etc/resolv.conf, so work around
+    # that.
+    for i in $(find src/allmydata/test -type f)
+    do
+      sed -i "$i" -e"s/localhost/127.0.0.1/g"
+    done
+
+    sed -i 's/"zope.interface.*"/"zope.interface"/' src/allmydata/_auto_deps.py
+    sed -i 's/"pycrypto.*"/"pycrypto"/' src/allmydata/_auto_deps.py
+
+    # incompatible with latest autobahn
+    rm src/allmydata/test/web/test_logs.py
+  '';
+
+  # Remove broken and expensive tests.
+  preConfigure = ''
+    (
+      cd src/allmydata/test
+
+      # Buggy?
+      rm cli/test_create.py test_client.py
+
+      # These require Tor and I2P.
+      rm test_connections.py test_iputil.py test_hung_server.py test_i2p_provider.py test_tor_provider.py
+
+      # Fails due to the above tests missing
+      rm test_python3.py
+
+      # Expensive
+      rm test_system.py
+    )
+  '';
+
+  nativeBuildInputs = with python3Packages; [ sphinx texinfo ];
+
+  # The `backup' command requires `sqlite3'.
+  propagatedBuildInputs = with python3Packages; [
+    appdirs beautifulsoup4 characteristic distro eliot fixtures foolscap future
+    html5lib magic-wormhole netifaces pyasn1 pycrypto pyutil pyyaml recommonmark
+    service-identity simplejson sphinx-rtd-theme testtools treq twisted zfec
+    zope-interface
+  ] ++ twisted.optional-dependencies.tls
+    ++ twisted.optional-dependencies.conch;
+
+  nativeCheckInputs = with python3Packages; [ mock hypothesis twisted ];
+
+  # Install the documentation.
+  postInstall = ''
+    (
+      cd docs
+
+      make singlehtml
+      mkdir -p "$doc/share/doc/${pname}-${version}"
+      cp -rv _build/singlehtml/* "$doc/share/doc/${pname}-${version}"
+
+      make info
+      mkdir -p "$info/share/info"
+      cp -rv _build/texinfo/*.info "$info/share/info"
+    )
+  '';
+
+  checkPhase = ''
+    trial --rterrors allmydata
+  '';
+
+  meta = with lib; {
+    description = "Tahoe-LAFS, a decentralized, fault-tolerant, distributed storage system";
+    longDescription = ''
+      Tahoe-LAFS is a secure, decentralized, fault-tolerant filesystem.
+      This filesystem is encrypted and spread over multiple peers in
+      such a way that it remains available even when some of the peers
+      are unavailable, malfunctioning, or malicious.
+    '';
+    homepage = "https://tahoe-lafs.org/";
+    license = [ licenses.gpl2Plus /* or */ "TGPPLv1+" ];
+    maintainers = with lib.maintainers; [ MostAwesomeDude ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/packetdrill/default.nix b/nixpkgs/pkgs/tools/networking/packetdrill/default.nix
new file mode 100644
index 000000000000..139078f2f6fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/packetdrill/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, bison, flex, cmake, libpcap }:
+stdenv.mkDerivation rec {
+  pname = "packetdrill";
+  version = "unstable-2020-08-22";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "packetdrill";
+    rev = "68a34fa73cf221e5f52d6fa4f203bcd93062be1b";
+    sha256 = "0djkwb6l2959f44d98vwb092rghf0qmii8391vrpxqb99j6pv4h6";
+  };
+  patches = [
+    # Upstream fix for -fno-common toolchains
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/google/packetdrill/commit/c08292838de81a71ee477d5bf9d95b1130a1292b.patch";
+      sha256 = "1irbar1zkydmgqb12r3xd80dwj2jfxnxayxpb4nmbma8xm7knb10";
+      stripLen = 3;
+    })
+  ];
+
+  setSourceRoot = ''
+    export sourceRoot=$(realpath */gtests/net/packetdrill)
+  '';
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-Wno-error=unused-result"
+    "-Wno-error=stringop-truncation"
+    "-Wno-error=address-of-packed-member"
+  ];
+  nativeBuildInputs = [ bison flex cmake libpcap ];
+  buildInputs = [ libpcap ];
+
+  installPhase = ''
+    install -m 0755 -t $out/bin -D \
+      packetdrill \
+      packet_parser_test \
+      packet_to_string_test \
+      checksum_test
+    mkdir -p $out/share
+    cp -r ../tests $out/share/packetdrill-tests
+  '';
+
+  meta = {
+    description = "Quick, precise tests for entire TCP/UDP/IPv4/IPv6 network stacks";
+    homepage = "https://github.com/google/packetdrill";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ dmjio cleverca22 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pacparser/default.nix b/nixpkgs/pkgs/tools/networking/pacparser/default.nix
new file mode 100644
index 000000000000..dc45aaac58fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pacparser/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "pacparser";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "manugarg";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-qIfzAQ/dJgOZJajNU3XyFudSxu2w4JC0ffHosHXje1o=";
+  };
+
+  makeFlags = [ "NO_INTERNET=1" ];
+
+  preConfigure = ''
+    export makeFlags="$makeFlags PREFIX=$out"
+    patchShebangs tests/runtests.sh
+    cd src
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "A library to parse proxy auto-config (PAC) files";
+    homepage = "https://pacparser.manugarg.com/";
+    license = licenses.lgpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+    mainProgram = "pactester";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/par2cmdline/default.nix b/nixpkgs/pkgs/tools/networking/par2cmdline/default.nix
new file mode 100644
index 000000000000..8ccf5d54ebbf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/par2cmdline/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "par2cmdline";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "Parchive";
+    repo = "par2cmdline";
+    rev = "v${version}";
+    sha256 = "11mx8q29cr0sryd11awab7y4mhqgbamb1ss77rffjj6in8pb4hdk";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Parchive/par2cmdline";
+    description = "PAR 2.0 compatible file verification and repair tool";
+    longDescription = ''
+      par2cmdline is a program for creating and using PAR2 files to detect
+      damage in data files and repair them if necessary. It can be used with
+      any kind of file.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/passh/default.nix b/nixpkgs/pkgs/tools/networking/passh/default.nix
new file mode 100644
index 000000000000..060272c01a2e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/passh/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, stdenv }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "passh";
+  version = "2020-03-18";
+
+  src = fetchFromGitHub {
+    owner = "clarkwang";
+    repo = finalAttrs.pname;
+    rev = "7112e667fc9e65f41c384f89ff6938d23e86826c";
+    sha256 = "1g0rx94vqg36kp46f8v4x6jcmvdk85ds6bkrpayq772hbdm1b5z5";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${finalAttrs.pname} $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/clarkwang/passh";
+    description = "An sshpass alternative for non-interactive ssh auth";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.lovesegfault ];
+    mainProgram = finalAttrs.pname;
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/pathvector/default.nix b/nixpkgs/pkgs/tools/networking/pathvector/default.nix
new file mode 100644
index 000000000000..e9ca6f90e5a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pathvector/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pathvector";
+  version = "6.3.2";
+
+  src = fetchFromGitHub {
+    owner = "natesales";
+    repo = "pathvector";
+    rev = "v${version}";
+    sha256 = "sha256-TqGasguEAcA5ET2E/uFjgIl7IHI2v9m5EaXpIMG3T8c=";
+  };
+
+  vendorHash = "sha256-hgUuntT6jMWI14qDE3Yjm5W8UqQ6CcvoILmSDaVEZac=";
+
+  CGO_ENABLED = 0;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" "-X main.commit=${src.rev}" "-X main.date=unknown" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Declarative edge routing platform that automates route optimization and control plane configuration";
+    homepage = "https://pathvector.io";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ matthewpi ];
+    mainProgram = "pathvector";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pcapc/default.nix b/nixpkgs/pkgs/tools/networking/pcapc/default.nix
new file mode 100644
index 000000000000..35b338a5f63a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pcapc/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitLab, libpcap }:
+
+stdenv.mkDerivation rec {
+  pname = "pcapc";
+  version = "1.0.1";
+
+  src = fetchFromGitLab {
+    owner = "post-factum";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-oDg9OSvi9aQsZ2SQm02NKAcppE0w5SGZaI13gdp7gv4=";
+  };
+
+  buildInputs = [ libpcap ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/post-factum/pcapc";
+    description = "Compile libpcap filter expressions into BPF opcodes";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    mainProgram = "pcapc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pcapfix/default.nix b/nixpkgs/pkgs/tools/networking/pcapfix/default.nix
new file mode 100644
index 000000000000..3f7a5be86ce0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pcapfix/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pcapfix";
+  version = "1.1.7";
+
+  src = fetchurl {
+    url = "https://f00l.de/pcapfix/pcapfix-${version}.tar.gz";
+    sha256 = "sha256-bL6/b5npdrGrdok5JK65DNh8MWUILRUmTBkz8POz4Ow=";
+  };
+
+  postPatch = ''sed -i "s|/usr|$out|" Makefile'';
+
+  meta = with lib; {
+    homepage = "https://f00l.de/pcapfix/";
+    description = "Repair your broken pcap and pcapng files";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ehmry ];
+    platforms = platforms.all;
+    mainProgram = "pcapfix";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pdnsd/default.nix b/nixpkgs/pkgs/tools/networking/pdnsd/default.nix
new file mode 100644
index 000000000000..605168493e6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pdnsd/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "pdnsd";
+  version = "1.2.9a-par";
+
+  src = fetchurl {
+    url = "http://members.home.nl/p.a.rombouts/pdnsd/releases/pdnsd-${version}.tar.gz";
+    sha256 = "0yragv5zk77a1hfkpnsh17vvsw8b14d6mzfng4bb7i58rb83an5v";
+  };
+
+  patches =
+    # fix build with linux headers >= 5.13
+    lib.optional stdenv.isLinux
+      (fetchpatch {
+        name = "fix-build-linux-headers-gte-5.13.patch";
+        url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/net-dns/pdnsd/files/pdnsd-1.2.9a-linux-5.13_build_fix.patch?id=7ce35657f269c3b7016e8940ad36e59cf06e12a4";
+        hash = "sha256-Sh/0ZyiQpDvFZOWE9OCQ9+ocXurjzJvrE4WNWaGwAwk=";
+      });
+
+  postPatch = ''
+    sed -i 's/.*(cachedir).*/:/' Makefile.in
+  '';
+
+  configureFlags = [ "--enable-ipv6" ];
+
+  # fix ipv6 on darwin
+  CPPFLAGS = "-D__APPLE_USE_RFC_3542";
+
+  meta = with lib; {
+    description = "Permanent DNS caching";
+    homepage = "http://members.home.nl/p.a.rombouts/pdnsd";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [viric];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pdsh/default.nix b/nixpkgs/pkgs/tools/networking/pdsh/default.nix
new file mode 100644
index 000000000000..2708f3d95840
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pdsh/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, autoreconfHook, perl, readline, rsh, ssh, slurm, slurmSupport ? false }:
+
+stdenv.mkDerivation rec {
+  pname = "pdsh";
+  version = "2.35";
+
+  src = fetchurl {
+    url = "https://github.com/chaos/pdsh/releases/download/pdsh-${version}/pdsh-${version}.tar.gz";
+    sha256 = "sha256-de8VNHhI//Q/jW/5xEJP4Fx90s26ApE5kB+GGgUJPP4=";
+  };
+
+  buildInputs = [ perl readline ssh ]
+    ++ (lib.optional slurmSupport slurm);
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  # Do not use git to derive a version.
+  postPatch = ''
+    sed -i 's/m4_esyscmd(\[git describe.*/[${version}])/' configure.ac
+  '';
+
+  preConfigure = ''
+    configureFlagsArray=(
+      "--infodir=$out/share/info"
+      "--mandir=$out/share/man"
+      "--with-machines=/etc/pdsh/machines"
+      ${if readline == null then "--without-readline" else "--with-readline"}
+      ${if ssh == null then "--without-ssh" else "--with-ssh"}
+      ${if rsh == false then "--without-rsh" else "--with-rsh"}
+      ${if slurmSupport then "--with-slurm" else "--without-slurm"}
+      "--with-dshgroups"
+      "--with-xcpu"
+      "--disable-debug"
+      '--with-rcmd-rank-list=ssh,krb4,exec,xcpu,rsh'
+    )
+  '';
+
+  meta = {
+    homepage = "https://github.com/chaos/pdsh";
+    description = "High-performance, parallel remote shell utility";
+    license = lib.licenses.gpl2;
+
+    longDescription = ''
+      Pdsh is a high-performance, parallel remote shell utility. It has
+      built-in, thread-safe clients for Berkeley and Kerberos V4 rsh and
+      can call SSH externally (though with reduced performance). Pdsh
+      uses a "sliding window" parallel algorithm to conserve socket
+      resources on the initiating node and to allow progress to continue
+      while timeouts occur on some connections.
+    '';
+
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/persepolis/0001-Allow-building-on-darwin.patch b/nixpkgs/pkgs/tools/networking/persepolis/0001-Allow-building-on-darwin.patch
new file mode 100644
index 000000000000..4ddd18bbd468
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/persepolis/0001-Allow-building-on-darwin.patch
@@ -0,0 +1,45 @@
+---
+ setup.py | 13 +++++--------
+ 1 file changed, 5 insertions(+), 8 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 985d28d..933f3df 100755
+--- a/setup.py
++++ b/setup.py
+@@ -24,13 +24,9 @@ import shutil
+ # finding os platform
+ os_type = platform.system()
+ 
+-if os_type == 'Linux' or os_type == 'FreeBSD' or os_type == 'OpenBSD':
+-    from setuptools import setup, Command, find_packages
+-    setuptools_available = True
+-    print(os_type + " detected!")
+-else:
+-    print('This script is only work for GNU/Linux or BSD!')
+-    sys.exit(1)
++from setuptools import setup, Command, find_packages
++setuptools_available = True
++print(os_type + " detected!")
+ 
+ # Checking dependencies!
+ not_installed = ''
+@@ -100,6 +96,7 @@ else:
+     print('paplay is found!')
+ 
+ # sound-theme-freedesktop
++notifications_path = ''
+ if os_type == 'Linux':
+     notifications_path = '/usr/share/sounds/freedesktop/stereo/'
+ elif os_type == 'FreeBSD' or os_type == 'OpenBSD':
+@@ -139,7 +136,7 @@ if sys.argv[1] == "test":
+ 
+ DESCRIPTION = 'Persepolis Download Manager'
+ 
+-if os_type == 'Linux':
++if os_type in ['Linux', 'Darwin']:
+     DATA_FILES = [
+         ('/usr/share/man/man1/', ['man/persepolis.1.gz']),
+         ('/usr/share/applications/', ['xdg/com.github.persepolisdm.persepolis.desktop']),
+-- 
+2.39.3 (Apple Git-145)
+
diff --git a/nixpkgs/pkgs/tools/networking/persepolis/0002-Fix-startup-crash-on-darwin.patch b/nixpkgs/pkgs/tools/networking/persepolis/0002-Fix-startup-crash-on-darwin.patch
new file mode 100644
index 000000000000..50252c8cd72a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/persepolis/0002-Fix-startup-crash-on-darwin.patch
@@ -0,0 +1,41 @@
+---
+ persepolis/scripts/mac_notification.py | 25 +++++++++----------------
+ 1 file changed, 9 insertions(+), 16 deletions(-)
+
+diff --git a/persepolis/scripts/mac_notification.py b/persepolis/scripts/mac_notification.py
+index 4d69929..9a9a7cf 100644
+--- a/persepolis/scripts/mac_notification.py
++++ b/persepolis/scripts/mac_notification.py
+@@ -15,20 +15,13 @@
+ 
+ # native notification on mac! needs Xcode (latest version) installed and pyobjc
+ # library from pip
+-import Foundation
+-import AppKit
+-import objc
+-
+-NSUserNotification = objc.lookUpClass('NSUserNotification')
+-NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter')
+-
+-
+ def notifyMac(title, subtitle, info_text, delay=0):
+-    notification = NSUserNotification.alloc().init()
+-    notification.setTitle_(title)
+-    notification.setSubtitle_(subtitle)
+-    notification.setInformativeText_(info_text)
+-    notification.setDeliveryDate_(Foundation.NSDate.dateWithTimeInterval_sinceDate_(
+-        delay, Foundation.NSDate.date()))
+-    NSUserNotificationCenter.defaultUserNotificationCenter(
+-    ).scheduleNotification_(notification)
++    print(f"""
++Warning: Persepolis was installed from nixpkgs, which currently breaks notifications
++         on macOS. Until https://github.com/NixOS/nixpkgs/issues/105156 is resolved,
++         this cannot be fixed. The notification that should've been displayed was:
++
++         title: {title}
++         subtitle: {subtitle}
++         info_text: {info_text}
++ """)
+-- 
+2.39.3 (Apple Git-145)
+
diff --git a/nixpkgs/pkgs/tools/networking/persepolis/0003-Search-PATH-for-aria2c-on-darwin.patch b/nixpkgs/pkgs/tools/networking/persepolis/0003-Search-PATH-for-aria2c-on-darwin.patch
new file mode 100644
index 000000000000..ab3c957ef4b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/persepolis/0003-Search-PATH-for-aria2c-on-darwin.patch
@@ -0,0 +1,29 @@
+---
+ persepolis/scripts/download.py | 10 +---------
+ 1 file changed, 1 insertion(+), 9 deletions(-)
+
+diff --git a/persepolis/scripts/download.py b/persepolis/scripts/download.py
+index aaabb35..69676d3 100644
+--- a/persepolis/scripts/download.py
++++ b/persepolis/scripts/download.py
+@@ -72,16 +72,8 @@ def startAria():
+ 
+     # in macintosh
+     elif os_type == 'Darwin':
+-        if aria2_path == "" or aria2_path == None or os.path.isfile(str(aria2_path)) == False:
+-
+-            cwd = sys.argv[0]
+-            current_directory = os.path.dirname(cwd)
+-            aria2d = os.path.join(current_directory, 'aria2c')
+ 
+-        else:
+-            aria2d = aria2_path
+-
+-        subprocess.Popen([aria2d, '--no-conf',
++        subprocess.Popen(['aria2c', '--no-conf',
+                           '--enable-rpc', '--rpc-listen-port=' + str(port),
+                           '--rpc-max-request-size=2M',
+                           '--rpc-listen-all', '--quiet=true'],
+-- 
+2.39.3 (Apple Git-145)
+
diff --git a/nixpkgs/pkgs/tools/networking/persepolis/0004-Search-PATH-for-ffmpeg-on-darwin.patch b/nixpkgs/pkgs/tools/networking/persepolis/0004-Search-PATH-for-ffmpeg-on-darwin.patch
new file mode 100644
index 000000000000..800f7bddd408
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/persepolis/0004-Search-PATH-for-ffmpeg-on-darwin.patch
@@ -0,0 +1,34 @@
+---
+ persepolis/scripts/mainwindow.py   | 2 +-
+ persepolis/scripts/useful_tools.py | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/persepolis/scripts/mainwindow.py b/persepolis/scripts/mainwindow.py
+index d21f3f4..a0e3674 100644
+--- a/persepolis/scripts/mainwindow.py
++++ b/persepolis/scripts/mainwindow.py
+@@ -161,7 +161,7 @@ class CheckVersionsThread(QThread):
+ 
+             else:
+                 pipe = subprocess.Popen(
+-                    [ffmpeg_path, '-version'],
++                    ['ffmpeg', '-version'],
+                     stdout=subprocess.PIPE,
+                     stdin=subprocess.PIPE,
+                     stderr=subprocess.PIPE,
+diff --git a/persepolis/scripts/useful_tools.py b/persepolis/scripts/useful_tools.py
+index b780967..31733eb 100644
+--- a/persepolis/scripts/useful_tools.py
++++ b/persepolis/scripts/useful_tools.py
+@@ -342,7 +342,7 @@ def muxer(parent, video_finder_dictionary):
+                 current_directory = os.path.dirname(cwd)
+                 ffmpeg_path = os.path.join(current_directory, 'ffmpeg')
+ 
+-                pipe = subprocess.Popen([ffmpeg_path, '-i', video_file_path,
++                pipe = subprocess.Popen(['ffmpeg', '-i', video_file_path,
+                                          '-i', audio_file_path,
+                                          '-c', 'copy',
+                                          '-shortest',
+-- 
+2.39.3 (Apple Git-145)
+
diff --git a/nixpkgs/pkgs/tools/networking/persepolis/default.nix b/nixpkgs/pkgs/tools/networking/persepolis/default.nix
new file mode 100644
index 000000000000..35727c13e694
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/persepolis/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, buildPythonApplication
+, fetchFromGitHub
+, aria
+, ffmpeg
+, libnotify
+, pulseaudio
+, psutil
+, pyqt5
+, requests
+, setproctitle
+, setuptools
+, sound-theme-freedesktop
+, wrapQtAppsHook
+, yt-dlp
+}:
+
+buildPythonApplication rec {
+  pname = "persepolis";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "persepolisdm";
+    repo = "persepolis";
+    rev = version;
+    sha256 = "1rh7q432ynbysapsd075nif975ync71icpb71x2mb4j8jx1vzs45";
+  };
+
+  # see: https://github.com/persepolisdm/persepolis/blob/3.2.0/setup.py#L130
+  doCheck = false;
+
+  preBuild=
+  # Make setup automatic
+  ''
+    substituteInPlace setup.py --replace "answer = input(" "answer = 'y'#"
+  '' +
+  # Replace abandoned youtube-dl with maintained fork yt-dlp. Fixes https://github.com/persepolisdm/persepolis/issues/930,
+  # can be removed if that issue is fixed and/or https://github.com/persepolisdm/persepolis/pull/936 is merged
+  ''
+    substituteInPlace setup.py ./persepolis/scripts/video_finder_addlink.py --replace \
+        "import youtube_dl" "import yt_dlp as youtube_dl"
+  '';
+
+  patches = lib.optionals stdenv.isDarwin [
+    # Upstream is abandonware, the last commit to master was on 2021-08-26.
+    # If it is forked or picked up again, consider upstreaming these patches.
+    ./0001-Allow-building-on-darwin.patch
+    ./0002-Fix-startup-crash-on-darwin.patch
+    ./0003-Search-PATH-for-aria2c-on-darwin.patch
+    ./0004-Search-PATH-for-ffmpeg-on-darwin.patch
+  ];
+
+  postPatch = ''
+    sed -i 's|/usr/share/sounds/freedesktop/stereo/|${sound-theme-freedesktop}/share/sounds/freedesktop/stereo/|' setup.py
+    sed -i "s|'persepolis = persepolis.__main__'|'persepolis = persepolis.scripts.persepolis:main'|" setup.py
+  '';
+
+  postInstall = ''
+     mkdir -p $out/share/applications
+     cp $src/xdg/com.github.persepolisdm.persepolis.desktop $out/share/applications
+  '';
+
+  # prevent double wrapping
+  dontWrapQtApps = true;
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  # feed args to wrapPythonApp
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ aria ffmpeg libnotify ]}"
+    "\${qtWrapperArgs[@]}"
+  ];
+
+  propagatedBuildInputs = [
+    pulseaudio
+    psutil
+    pyqt5
+    requests
+    setproctitle
+    setuptools
+    sound-theme-freedesktop
+    yt-dlp
+  ];
+
+  meta = with lib; {
+    description = "Persepolis Download Manager is a GUI for aria2";
+    homepage = "https://persepolisdm.github.io/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ iFreilicht ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pgrok/build-deps/package.json b/nixpkgs/pkgs/tools/networking/pgrok/build-deps/package.json
new file mode 100644
index 000000000000..b40bf794c6de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pgrok/build-deps/package.json
@@ -0,0 +1,38 @@
+{
+  "name": "pgrokd",
+  "scripts": {
+    "dev": "vite",
+    "build": "tsc && vite build --outDir=dist --emptyOutDir",
+    "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0"
+  },
+  "version": "1.4.1",
+  "dependencies": {
+    "axios": "~1.4.0",
+    "react": "~18.2.0",
+    "react-dom": "~18.2.0",
+    "react-router-dom": "~6.15.0",
+    "@headlessui/react": "~1.7.17",
+    "@heroicons/react": "~2.0.18",
+    "@tailwindcss/forms": "~0.5.4",
+    "@trivago/prettier-plugin-sort-imports": "~4.2.0",
+    "@types/node": "~20.5.1",
+    "@types/react": "~18.2.15",
+    "@types/react-dom": "~18.2.7",
+    "@typescript-eslint/eslint-plugin": "~6.0.0",
+    "@typescript-eslint/parser": "~6.0.0",
+    "@vitejs/plugin-react": "~4.0.3",
+    "autoprefixer": "~10.4.15",
+    "code-inspector-plugin": "v0.1.9",
+    "eslint": "~8.45.0",
+    "eslint-plugin-import": "~2.28.0",
+    "eslint-plugin-react": "~7.33.2",
+    "eslint-plugin-react-hooks": "~4.6.0",
+    "eslint-plugin-react-refresh": "~0.4.3",
+    "eslint-plugin-unicorn": "~48.0.1",
+    "postcss": "~8.4.28",
+    "prettier": "~3.0.2",
+    "tailwindcss": "~3.3.3",
+    "typescript": "~5.0.2",
+    "vite": "~4.4.5"
+  }
+}
diff --git a/nixpkgs/pkgs/tools/networking/pgrok/default.nix b/nixpkgs/pkgs/tools/networking/pgrok/default.nix
new file mode 100644
index 000000000000..e5c9610521ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pgrok/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, buildGoModule
+, callPackage
+, fetchFromGitHub
+}:
+buildGoModule rec {
+  pname = "pgrok";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "pgrok";
+    repo = "pgrok";
+    rev = "v${version}";
+    hash = "sha256-P36rpFi5J+dF6FrVaPhqupG00h4kwr0qumt4ehL/7vU=";
+  };
+
+  vendorHash = "sha256-X5FjzliIJdfJnNaUXBjv1uq5tyjMVjBbnLCBH/P0LFM=";
+
+  outputs = [ "out" "server" ];
+
+  web = callPackage ./web.nix { inherit src version; };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+    "-X main.commit=unknown"
+    "-X main.date=unknown"
+  ];
+
+  subPackages = [
+    "pgrok/pgrok"
+    "pgrokd/pgrokd"
+  ];
+
+  postPatch = ''
+    # rename packages due to naming conflict
+    mv pgrok/cli/ pgrok/pgrok/
+    mv pgrokd/cli/ pgrokd/pgrokd/
+    cp -r ${web} pgrokd/pgrokd/dist
+  '';
+
+  postInstall = ''
+    moveToOutput bin/pgrokd $server
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = {
+    description = "Selfhosted TCP/HTTP tunnel, ngrok alternative, written in Go";
+    homepage = "https://github.com/pgrok/pgrok";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ marie ];
+    mainProgram = "pgrok";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pgrok/update.sh b/nixpkgs/pkgs/tools/networking/pgrok/update.sh
new file mode 100755
index 000000000000..5e2e082fd6a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pgrok/update.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix curl nix-update jq
+
+set -euo pipefail
+
+nix-update
+
+cd "$(dirname "$0")"
+
+nixpkgs=../../../..
+node_packages="$nixpkgs/pkgs/development/node-packages"
+pgrok="$nixpkgs/pkgs/tools/networking/pgrok"
+
+TARGET_VERSION_REMOTE=$(curl -s https://api.github.com/repos/pgrok/pgrok/releases/latest | jq -r ".tag_name")
+TARGET_VERSION=${TARGET_VERSION_REMOTE#v}
+
+SRC_FILE_BASE="https://raw.githubusercontent.com/pgrok/pgrok/v$TARGET_VERSION"
+
+# replace ^ versions with ~, replace outdir to dist
+curl https://raw.githubusercontent.com/pgrok/pgrok/main/pgrokd/web/package.json \
+    | jq "{name,scripts,version: \"${TARGET_VERSION}\",dependencies: (.dependencies + .devDependencies) }" \
+    | sed -e 's/"\^/"~/g' -e 's/\.\.\/cli\/dist/dist/g' \
+    > "$pgrok/build-deps/package.json.new"
+
+old_deps="$(jq '.dependencies' "$pgrok/build-deps/package.json")"
+new_deps="$(jq '.dependencies' "$pgrok/build-deps/package.json.new")"
+
+if [[ "$old_deps" == "$new_deps" ]]; then
+    echo "package.json dependencies not changed, do simple version change"
+
+    sed -e '/^  "pgrok-build-deps/,+3 s/version = ".*"/version = "'"$TARGET_VERSION"'"/' \
+        --in-place "$node_packages"/node-packages.nix
+    mv build-deps/package.json{.new,}
+else
+    echo "package.json dependencies changed, updating nodePackages"
+    mv build-deps/package.json{.new,}
+
+    ./"$node_packages"/generate.sh
+fi
+
diff --git a/nixpkgs/pkgs/tools/networking/pgrok/web.nix b/nixpkgs/pkgs/tools/networking/pgrok/web.nix
new file mode 100644
index 000000000000..0cbe45e0e396
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pgrok/web.nix
@@ -0,0 +1,30 @@
+{ src
+, version
+, nodejs
+, nodePackages
+, stdenvNoCC
+}:
+let
+  build-deps = nodePackages."pgrok-build-deps-../../tools/networking/pgrok/build-deps";
+in
+stdenvNoCC.mkDerivation {
+  pname = "pgrok-web";
+  inherit version;
+  src = "${src}/pgrokd/web";
+
+  nativeBuildInputs = [ nodejs ];
+
+  buildPhase = ''
+    runHook preBuild
+    cp ${./build-deps/package.json} package.json
+    ln -s ${build-deps}/lib/node_modules/pgrokd/node_modules node_modules
+    npm run build
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    cp -r dist $out
+    runHook postInstall
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/networking/phantomsocks/default.nix b/nixpkgs/pkgs/tools/networking/phantomsocks/default.nix
new file mode 100644
index 000000000000..7bb053c680f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/phantomsocks/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+, libpcap
+# Cann't be build with both pcap and rawsocket tags
+, withPcap ? (!stdenv.isLinux && !withRawsocket)
+, withRawsocket ? (stdenv.isLinux && !withPcap)
+}:
+
+buildGoModule rec {
+  pname = "phantomsocks";
+  version = "unstable-2023-04-05";
+
+  src = fetchFromGitHub {
+    owner = "macronut";
+    repo = pname;
+    rev = "a54ae9f3611e8623f89e69273f2ded7f7c0a7abf";
+    hash = "sha256-ytTLwKlwbaiSWDRZBkOV7Hrl5ywWzLbv/fJ7nVlD++E=";
+  };
+
+  vendorHash = "sha256-c0NQfZuMMWz1ASwFBcpMNjxZwXLo++gMYBiNgvT8ZLQ=";
+
+  ldflags = [
+    "-s" "-w"
+  ];
+  buildInputs = lib.optional withPcap libpcap;
+  tags = lib.optional withPcap "pcap"
+    ++ lib.optional withRawsocket "rawsocket";
+
+  meta = with lib;{
+    homepage = "https://github.com/macronut/phantomsocks";
+    description = "A cross-platform proxy client/server for Linux/Windows/macOS";
+    longDescription = ''
+      A cross-platform proxy tool that could be used to modify TCP packets
+      to implement TCB desync to bypass detection and censoring.
+    '';
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ oluceps ];
+    mainProgram = "phantomsocks";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/phodav/default.nix b/nixpkgs/pkgs/tools/networking/phodav/default.nix
new file mode 100644
index 000000000000..7a3ce12b55fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/phodav/default.nix
@@ -0,0 +1,61 @@
+{ stdenv
+, lib
+, fetchurl
+, pkg-config
+, libsoup_3
+, libxml2
+, meson
+, ninja
+, gnome
+}:
+
+stdenv.mkDerivation rec {
+  pname = "phodav";
+  version = "3.0";
+
+  outputs = [ "out" "dev" "lib" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/phodav/${version}/phodav-${version}.tar.xz";
+    sha256 = "OS7C0G1QMA3P8e8mmiqYUwTim841IAAvyiny7cHRONE=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+  ];
+
+  buildInputs = [
+    libsoup_3
+    libxml2
+  ];
+
+  mesonFlags = [
+    "-Davahi=disabled"
+    "-Dsystemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "-Dgtk_doc=disabled"
+    "-Dudevrulesdir=${placeholder "out"}/lib/udev/rules.d"
+  ];
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-lintl";
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  # We need to do this in pre-configure before the data/ folder disappears.
+  preConfigure = ''
+    install -vDt $out/lib/udev/rules.d/ data/*-spice-webdavd.rules
+  '';
+
+  meta = with lib; {
+    description = "WebDav server implementation and library using libsoup";
+    homepage = "https://wiki.gnome.org/phodav";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ wegank ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/photon/default.nix b/nixpkgs/pkgs/tools/networking/photon/default.nix
new file mode 100644
index 000000000000..8a69bd70c149
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/photon/default.nix
@@ -0,0 +1,36 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "photon";
+  version = "1.3.0";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "s0md3v";
+    repo = "Photon";
+    rev = "v${version}";
+    sha256 = "02z1xj72bq35dilr4b6njry4kixz6j2a3ag02nla98q0fvgmgnvy";
+  };
+
+  dontBuild = true;
+  doCheck = false;
+
+  propagatedBuildInputs = with python3Packages; [ requests urllib3 tld ];
+
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/photon}
+    cp -R photon.py core plugins $out/share/photon
+
+    makeWrapper ${python3Packages.python.interpreter} $out/bin/photon \
+      --set PYTHONPATH "$PYTHONPATH:$out/share/photon" \
+      --add-flags "-O $out/share/photon/photon.py"
+  '';
+
+  meta = with lib; {
+    description = "a lightning fast web crawler which extracts URLs, files, intel & endpoints from a target";
+    homepage = "https://github.com/s0md3v/Photon";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "photon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/picosnitch/default.nix b/nixpkgs/pkgs/tools/networking/picosnitch/default.nix
new file mode 100644
index 000000000000..6007d3ec227f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/picosnitch/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, python3
+, fetchPypi
+, bcc
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "picosnitch";
+  version = "1.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "78285e91b5c4d8e07529a34a7c3fe606acb6f950ee3cc78bb6c346bc2195b68a";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    setuptools
+    bcc
+    psutil
+    dbus-python
+    requests
+    pandas
+    plotly
+    dash
+    geoip2
+  ];
+
+  postInstall = ''
+    substituteInPlace $out/${python3.sitePackages}/picosnitch.py --replace '/run/picosnitch.pid' '/run/picosnitch/picosnitch.pid'
+  '';
+
+  pythonImportsCheck = [ "picosnitch" ];
+
+  meta = with lib; {
+    description = "Monitor network traffic per executable with hashing";
+    homepage = "https://github.com/elesiuta/picosnitch";
+    changelog = "https://github.com/elesiuta/picosnitch/releases";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.elesiuta ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/piknik/default.nix b/nixpkgs/pkgs/tools/networking/piknik/default.nix
new file mode 100644
index 000000000000..d3b2a8266b88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/piknik/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, piknik
+}:
+
+buildGoModule rec {
+  pname = "piknik";
+  version = "0.10.1";
+
+  src = fetchFromGitHub {
+    owner = "jedisct1";
+    repo = "piknik";
+    rev = version;
+    hash = "sha256-3yvr2H1a9YtgOEEBwn1HlGXIWFzRwQPBw9+KQxW3/jo=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = piknik;
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Copy/paste anything over the network";
+    homepage = "https://github.com/jedisct1/piknik";
+    changelog = "https://github.com/jedisct1/piknik/blob/${src.rev}/ChangeLog";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "piknik";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pingtcp/default.nix b/nixpkgs/pkgs/tools/networking/pingtcp/default.nix
new file mode 100644
index 000000000000..88476ab85686
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pingtcp/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "pingtcp";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "LanetNetwork";
+    repo = "pingtcp";
+    sha256 = "1cv84n30y03s1b83apxxyn2jv5ss1pywsahrfrpkb6zcgzzrcqn8";
+    rev = "refs/tags/v${version}";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  doCheck = false;
+
+  postInstall = ''
+    install -Dm644 {..,$out/share/doc/pingtcp}/README.md
+  '';
+
+  meta = with lib; {
+    description = "Measure TCP handshake time";
+    homepage = "https://github.com/LanetNetwork/pingtcp";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    mainProgram = "pingtcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pingu/default.nix b/nixpkgs/pkgs/tools/networking/pingu/default.nix
new file mode 100644
index 000000000000..5fcaa0af5fef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pingu/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pingu";
+  version = "0.0.5";
+
+  src = fetchFromGitHub {
+    owner = "sheepla";
+    repo = "pingu";
+    rev = "v${version}";
+    sha256 = "sha256-iAHj6/qaZgpTfrUZZ9qdsjiNMJ2zH0CzhR4TVSC9oLE=";
+  };
+
+  vendorHash = "sha256-xn6la6E0C5QASXxNee1Py/rBs4ls9X/ePeg4Q1e2UyU=";
+
+  meta = with lib; {
+    description = "Ping command implementation in Go but with colorful output and pingu ascii art";
+    homepage = "https://github.com/sheepla/pingu/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ CactiChameleon9 ];
+    mainProgram = "pingu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pirate-get/default.nix b/nixpkgs/pkgs/tools/networking/pirate-get/default.nix
new file mode 100644
index 000000000000..c1b43a00f52f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pirate-get/default.nix
@@ -0,0 +1,23 @@
+{ lib, python3Packages, fetchPypi }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "pirate-get";
+  version = "0.4.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-VtnVyJqrdGXTqcyzpHCOMUI9G7/BkXzihDrBrsxl7Eg=";
+  };
+
+  propagatedBuildInputs = [ colorama veryprettytable pyperclip ];
+
+  meta = with lib; {
+    description = "A command line interface for The Pirate Bay";
+    homepage = "https://github.com/vikstrous/pirate-get";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ rnhmjoj ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pixiecore/default.nix b/nixpkgs/pkgs/tools/networking/pixiecore/default.nix
new file mode 100644
index 000000000000..e73999d44689
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pixiecore/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pixiecore";
+  version = "2020-03-25";
+  rev = "68743c67a60c18c06cd21fd75143e3e069ca3cfc";
+
+  src = fetchFromGitHub {
+    owner = "danderson";
+    repo = "netboot";
+    inherit rev;
+    hash = "sha256-SoD871PaL5/oabKeHFE2TLTTj/CFS4dfggjMN3qlupE=";
+  };
+
+  vendorHash = "sha256-hytMhf7fz4XiRJH7MnGLmNH+iIzPDz9/rRJBPp2pwyI=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/pixiecore" ];
+
+  meta = {
+    description = "A tool to manage network booting of machines";
+    homepage = "https://github.com/danderson/netboot/tree/master/pixiecore";
+    license =  lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ bbigras danderson ];
+    mainProgram = "pixiecore";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pixiewps/default.nix b/nixpkgs/pkgs/tools/networking/pixiewps/default.nix
new file mode 100644
index 000000000000..d3a7f0bc69d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pixiewps/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "pixiewps";
+  version = "1.4.2";
+  src = fetchFromGitHub {
+    owner = "wiire-a";
+    repo = "pixiewps";
+    rev = "v${version}";
+    sha256 = "sha256-cJ20Gp6YaSdgUXK/ckK5Yv0rGbGXuFMP5zKZG0c4oOY=";
+  };
+
+  preBuild = ''
+    substituteInPlace Makefile --replace "/usr/local" "$out"
+  '';
+
+  meta = {
+    description = "An offline WPS bruteforce utility";
+    homepage = "https://github.com/wiire-a/pixiewps";
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.nico202 ];
+    platforms = lib.platforms.all;
+    mainProgram = "pixiewps";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pmacct/default.nix b/nixpkgs/pkgs/tools/networking/pmacct/default.nix
new file mode 100644
index 000000000000..dfc31498ddd1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pmacct/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, autoreconfHook
+, libtool
+, libpcap
+, libcdada
+# Optional Dependencies
+, withJansson ? true, jansson
+, withNflog ? true, libnetfilter_log
+, withSQLite ? true, sqlite
+, withPgSQL ? true, postgresql
+, withMysql ? true, libmysqlclient, zlib, numactl
+, gnutlsSupport ? false, gnutls
+, testers
+, pmacct
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.7.8";
+  pname = "pmacct";
+
+  src = fetchFromGitHub {
+    owner = "pmacct";
+    repo = "pmacct";
+    rev = "v${version}";
+    hash = "sha256-AcgZ5/8d1U/zGs4QeOkgkZS7ttCW6gtUv/Xuf4O4VE0=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    libtool
+  ];
+  buildInputs = [
+    libcdada
+    libpcap
+  ] ++ lib.optional withJansson jansson
+  ++ lib.optional withNflog libnetfilter_log
+  ++ lib.optional withSQLite sqlite
+  ++ lib.optional withPgSQL postgresql
+  ++ lib.optionals withMysql [ libmysqlclient zlib numactl ]
+  ++ lib.optional gnutlsSupport gnutls;
+
+  MYSQL_CONFIG = lib.optionalString withMysql "${lib.getDev libmysqlclient}/bin/mysql_config";
+
+  configureFlags = [
+    "--with-pcap-includes=${libpcap}/include"
+  ] ++ lib.optional withJansson "--enable-jansson"
+  ++ lib.optional withNflog "--enable-nflog"
+  ++ lib.optional withSQLite "--enable-sqlite3"
+  ++ lib.optional withPgSQL "--enable-pgsql"
+  ++ lib.optional withMysql "--enable-mysql"
+  ++ lib.optional gnutlsSupport "--enable-gnutls";
+
+  passthru.tests = {
+    version = testers.testVersion { package = pmacct; command = "pmacct -V"; };
+  };
+
+  meta = with lib; {
+    description = "A small set of multi-purpose passive network monitoring tools";
+    longDescription = ''
+      pmacct is a small set of multi-purpose passive network monitoring tools
+      [NetFlow IPFIX sFlow libpcap BGP BMP RPKI IGP Streaming Telemetry]
+    '';
+    homepage = "http://www.pmacct.net/";
+    changelog = "https://github.com/pmacct/pmacct/blob/v${version}/ChangeLog";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ _0x4A6F ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/polygon-cli/default.nix b/nixpkgs/pkgs/tools/networking/polygon-cli/default.nix
new file mode 100644
index 000000000000..75c80bd12b7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/polygon-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "polygon-cli";
+  version = "1.1.11";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-gEz3kcXbXj9dXnMCx0Q8TjCQemXvJne9EwFsPt14xV4=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    setuptools
+    requests
+    prettytable
+    colorama
+    pyyaml
+  ];
+
+  doCheck = false;
+
+  meta = {
+    description = "Command-line tool for polygon.codeforces.com";
+    homepage = "https://github.com/kunyavskiy/polygon-cli";
+    changelog = "https://github.com/kunyavskiy/polygon-cli/releases/tag/${version}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ khaser ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/polygraph/default.nix b/nixpkgs/pkgs/tools/networking/polygraph/default.nix
new file mode 100644
index 000000000000..f4742e660d83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/polygraph/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, openssl, zlib, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "polygraph";
+  version = "4.13.0";
+
+  src = fetchurl {
+    url = "http://www.web-polygraph.org/downloads/srcs/polygraph-${version}-src.tgz";
+    sha256 = "1rwzci3n7q33hw3spd79adnclzwgwlxcisc9szzjmcjqhbkcpj1a";
+  };
+
+  buildInputs = [ openssl zlib ncurses ];
+
+  meta = with lib; {
+    homepage = "http://www.web-polygraph.org";
+    description = "Performance testing tool for caching proxies, origin server accelerators, L4/7 switches, content filters, and other Web intermediaries";
+    platforms = platforms.linux;
+    license = licenses.asl20;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/popura/default.nix b/nixpkgs/pkgs/tools/networking/popura/default.nix
new file mode 100644
index 000000000000..e6e67cafe7a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/popura/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "popura";
+  version = "0.4.6";
+
+  src = fetchFromGitHub {
+    owner = "${pname}-network";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-iCu6/vD4vgn7aGdwK+OB8ib/QwUwoFuxDUs7vqbTZQc=";
+  };
+
+  vendorHash = "sha256-9lQC35yt1S2uch3qgwNfa/1FHy+Qi1D5Jo7DWNMgU9w=";
+
+  ldflags = let pkgSrc = "github.com/yggdrasil-network/yggdrasil-go/src/version"; in [
+    "-s"
+    "-w"
+    "-X=${pkgSrc}.buildName=yggdrasil"
+    "-X=${pkgSrc}.buildVersion=${version}"
+   ];
+
+  meta = with lib; {
+    description = "An alternative Yggdrasil network client";
+    homepage = "https://github.com/popura-network/popura";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ urandom ];
+    mainProgram = "yggdrasil";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ppp/default.nix b/nixpkgs/pkgs/tools/networking/ppp/default.nix
new file mode 100644
index 000000000000..20e59167699b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ppp/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libpcap
+, libxcrypt
+, pkg-config
+, autoreconfHook
+, openssl
+, bash
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  version = "2.5.0";
+  pname = "ppp";
+
+  src = fetchFromGitHub {
+    owner = "ppp-project";
+    repo = pname;
+    rev = "ppp-${version}";
+    sha256 = "sha256-J7udiLiJiJ1PzNxD+XYAUPXZ+ABGXt2U3hSFUWJXe94=";
+  };
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "--with-openssl=${openssl.dev}"
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    libpcap
+    libxcrypt
+    openssl
+    bash
+  ];
+
+  postPatch = ''
+    for file in $(find -name Makefile.linux); do
+      substituteInPlace "$file" --replace '-m 4550' '-m 550'
+    done
+
+    patchShebangs --host \
+      scripts/{pon,poff,plog}
+  '';
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ];
+
+  NIX_LDFLAGS = "-lcrypt";
+
+  installFlags = [
+    "sysconfdir=$(out)/etc"
+  ];
+
+  postInstall = ''
+    install -Dm755 -t $out/bin scripts/{pon,poff,plog}
+  '';
+
+  postFixup = ''
+    substituteInPlace "$out/bin/pon" --replace "/usr/sbin" "$out/bin"
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) pppd;
+  };
+
+  meta = with lib; {
+    homepage = "https://ppp.samba.org";
+    description = "Point-to-point implementation to provide Internet connections over serial lines";
+    license = with licenses; [
+      bsdOriginal
+      publicDomain
+      gpl2
+      lgpl2
+    ];
+    platforms = platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pptp/default.nix b/nixpkgs/pkgs/tools/networking/pptp/default.nix
new file mode 100644
index 000000000000..4bc0ed3219fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pptp/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, perl, ppp, iproute2 }:
+
+stdenv.mkDerivation rec {
+  pname = "pptp";
+  version = "1.10.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pptpclient/${pname}-${version}.tar.gz";
+    sha256 = "1x2szfp96w7cag2rcvkdqbsl836ja5148zzfhaqp7kl7wjw2sjc2";
+  };
+
+  prePatch = ''
+    substituteInPlace Makefile --replace 'install -o root' 'install'
+  '';
+
+  makeFlags = [
+    "CC:=$(CC)"
+    "IP=${iproute2}/bin/ip"
+    "PPPD=${ppp}/bin/pppd"
+    "BINDIR=${placeholder "out"}/sbin"
+    "MANDIR=${placeholder "out"}/share/man/man8"
+    "PPPDIR=${placeholder "out"}/etc/ppp"
+  ];
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    perl # pod2man
+  ];
+
+  buildInputs = [
+    perl # in shebang of pptpsetup
+  ];
+
+  meta = with lib; {
+    description = "PPTP client for Linux";
+    homepage = "https://pptpclient.sourceforge.net/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nickcao ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pptpd/default.nix b/nixpkgs/pkgs/tools/networking/pptpd/default.nix
new file mode 100644
index 000000000000..3c24d2ac0715
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pptpd/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, ppp }:
+
+stdenv.mkDerivation rec {
+  pname   = "pptpd";
+  version = "1.4.0";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/poptop/${pname}/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "1h06gyxj51ba6kbbnf6hyivwjia0i6gsmjz8kyggaany8a58pkcg";
+  };
+
+  patches = [
+    ./ppp-2.5.0-compat.patch
+  ];
+
+  buildInputs = [ ppp ];
+
+  postPatch = ''
+    substituteInPlace plugins/Makefile --replace "install -o root" "install"
+  '';
+
+  meta = with lib; {
+    homepage    = "https://poptop.sourceforge.net/dox/";
+    description = "The PPTP Server for Linux";
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ obadz ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pptpd/ppp-2.5.0-compat.patch b/nixpkgs/pkgs/tools/networking/pptpd/ppp-2.5.0-compat.patch
new file mode 100644
index 000000000000..33c4a828067e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pptpd/ppp-2.5.0-compat.patch
@@ -0,0 +1,59 @@
+diff --git a/plugins/pptpd-logwtmp.c b/plugins/pptpd-logwtmp.c
+index ac5ecc2..9745177 100644
+--- a/plugins/pptpd-logwtmp.c
++++ b/plugins/pptpd-logwtmp.c
+@@ -12,9 +12,18 @@
+ #include <unistd.h>
+ #include <utmp.h>
+ #include <string.h>
++
++#define HAVE_STDARG_H 1
++#define HAVE_STDBOOL_H 1
++#define HAVE_STDDEF_H 1
+ #include <pppd/pppd.h>
++#include <pppd/options.h>
++#include <linux/ppp_defs.h>
++#include <linux/limits.h>
++
++int debug = 0;
+ 
+-char pppd_version[] = VERSION;
++char pppd_version[] = PPPD_VERSION;
+ 
+ static char pptpd_original_ip[PATH_MAX+1];
+ static bool pptpd_logwtmp_strip_domain = 0;
+@@ -42,25 +51,27 @@ static char *reduce(char *user)
+ 
+ static void ip_up(void *opaque, int arg)
+ {
++  char peer_authname[MAXNAMELEN];
++  ppp_peer_authname(peer_authname, MAXNAMELEN);
+   char *user = reduce(peer_authname);
+   if (debug)
+-    notice("pptpd-logwtmp.so ip-up %s %s %s", ifname, user, 
++    notice("pptpd-logwtmp.so ip-up %s %s %s", ppp_ifname(), user, 
+ 	   pptpd_original_ip);
+-  logwtmp(ifname, user, pptpd_original_ip);
++  logwtmp(ppp_ifname(), user, pptpd_original_ip);
+ }
+ 
+ static void ip_down(void *opaque, int arg)
+ {
+   if (debug) 
+-    notice("pptpd-logwtmp.so ip-down %s", ifname);
+-  logwtmp(ifname, "", "");
++    notice("pptpd-logwtmp.so ip-down %s", ppp_ifname());
++  logwtmp(ppp_ifname(), "", "");
+ }
+ 
+ void plugin_init(void)
+ {
+-  add_options(options);
+-  add_notifier(&ip_up_notifier, ip_up, NULL);
+-  add_notifier(&ip_down_notifier, ip_down, NULL);
++  ppp_add_options(options);
++  ppp_add_notify(NF_IP_UP, ip_up, NULL);
++  ppp_add_notify(NF_IP_DOWN, ip_down, NULL);
+   if (debug) 
+     notice("pptpd-logwtmp: $Version$");
+ }
diff --git a/nixpkgs/pkgs/tools/networking/prettyping/default.nix b/nixpkgs/pkgs/tools/networking/prettyping/default.nix
new file mode 100644
index 000000000000..ac5dd3d1d6ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/prettyping/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "prettyping";
+  version = "1.0.1";
+  src = fetchFromGitHub {
+    owner = "denilsonsa";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "05vfaq9y52z40245j47yjk1xaiwrazv15sgjq64w91dfyahjffxf";
+  };
+
+  installPhase = ''
+    install -Dt $out/bin prettyping
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/denilsonsa/prettyping";
+    description = "A wrapper around the standard ping tool with the objective of making the output prettier, more colorful, more compact, and easier to read";
+    mainProgram = "prettyping";
+    license = with licenses; [ mit ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ qoelet ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pritunl-client/default.nix b/nixpkgs/pkgs/tools/networking/pritunl-client/default.nix
new file mode 100644
index 000000000000..3b8b80ffe3cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pritunl-client/default.nix
@@ -0,0 +1,143 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, runtimeShell
+, runCommand
+, makeWrapper
+, installShellFiles
+, buildGoModule
+, coreutils
+, which
+, gnugrep
+, gnused
+, openresolv
+, systemd
+, iproute2
+, openvpn
+, electron
+}: let
+  version = "1.3.3785.81";
+  src = fetchFromGitHub {
+    owner = "pritunl";
+    repo = "pritunl-client-electron";
+    rev = version;
+    sha256 = "sha256-0tlWX9vHiFHewiisI8lwsQdHyEhntu+x415hfbymhIo=";
+  };
+
+  cli = buildGoModule {
+    pname = "pritunl-cli";
+    inherit version src;
+
+    modRoot = "cli";
+    vendorHash = "sha256-1sAJbEZHagG6hnZBkb6EbQpSdNmTyTWfKpbektXSWYU=";
+
+    postInstall = ''
+      mv $out/bin/cli $out/bin/pritunl-client
+    '';
+  };
+
+  service = buildGoModule {
+    pname = "pritunl-client-service";
+    inherit version src;
+
+    modRoot = "service";
+    vendorHash = "sha256-QvuEQX1+sJOGB1AJNhnM3pVPxGmizDu8EN1yRspXjhU=";
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    postPatch = ''
+      sed -Ei service/profile/scripts.go \
+        -e 's|#!\s*(/usr)?/bin/(env )?bash\b|#! ${runtimeShell}|g'
+    '' + lib.optionalString stdenv.isLinux ''
+      sed -Ei service/profile/scripts.go \
+        -e 's|(/usr)?/s?bin/busctl\b|busctl|g' \
+        -e 's|(/usr)?/s?bin/resolvectl\b|resolvectl|g' \
+        -e 's|(/usr)?/s?bin/ip\b|ip|g'
+    '';
+
+    postInstall = ''
+      mv $out/bin/service $out/bin/pritunl-client-service
+    '' + lib.optionalString stdenv.isLinux ''
+      mkdir -p $out/lib/systemd/system/
+      cp $src/resources_linux/pritunl-client.service $out/lib/systemd/system/
+      substituteInPlace $out/lib/systemd/system/pritunl-client.service \
+        --replace "/usr" "$out"
+    '';
+
+    postFixup = let
+      hookScriptsDeps = [
+        coreutils
+        which
+        gnused
+        gnugrep
+      ] ++ lib.optionals stdenv.isLinux [
+        openresolv
+        systemd
+        iproute2
+      ];
+      openvpn-wrapped = runCommand "openvpn-wrapped" {
+        nativeBuildInputs = [ makeWrapper ];
+      } ''
+        mkdir -p $out/bin
+        makeWrapper ${openvpn}/bin/openvpn $out/bin/openvpn \
+          --prefix PATH : ${lib.makeBinPath hookScriptsDeps} \
+          --add-flags "--setenv PATH \$PATH"
+      '';
+    in lib.optionalString stdenv.isLinux ''
+      wrapProgram $out/bin/pritunl-client-service \
+        --prefix PATH : "${lib.makeBinPath ([ openvpn-wrapped ])}"
+    '';
+  };
+in stdenv.mkDerivation {
+  pname = "pritunl-client";
+  inherit version src;
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+    installShellFiles
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin/
+    ln -s ${cli}/bin/pritunl-client $out/bin/
+    ln -s ${service}/bin/pritunl-client-service $out/bin/
+
+    mkdir -p $out/lib/
+    cp -r client $out/lib/pritunl_client_electron
+
+    makeWrapper ${electron}/bin/electron $out/bin/pritunl-client-electron \
+      --add-flags $out/lib/pritunl_client_electron
+
+  '' + lib.optionalString stdenv.isLinux ''
+    mkdir -p $out/lib/systemd/system/
+    ln -s ${service}/lib/systemd/system/pritunl-client.service $out/lib/systemd/system/
+
+    mkdir -p $out/share/icons/
+    cp -r resources_linux/icons $out/share/icons/hicolor
+
+    mkdir -p $out/share/applications/
+    cp resources_linux/pritunl-client-electron.desktop $out/share/applications/
+    substituteInPlace $out/share/applications/pritunl-client-electron.desktop \
+      --replace "/usr/lib/pritunl_client_electron/Pritunl" "$out/bin/pritunl-client-electron"
+  '' + ''
+    # install shell completions for pritunl-client
+    installShellCompletion --cmd pritunl-client \
+      --bash <($out/bin/pritunl-client completion bash) \
+      --fish <($out/bin/pritunl-client completion fish) \
+      --zsh <($out/bin/pritunl-client completion zsh)
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Pritunl OpenVPN client";
+    homepage = "https://client.pritunl.com/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ minizilla andrevmatos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pritunl-ssh/default.nix b/nixpkgs/pkgs/tools/networking/pritunl-ssh/default.nix
new file mode 100644
index 000000000000..06cfc4d1a4ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pritunl-ssh/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  pname   = "pritunl-ssh";
+  version = "1.0.2435.24";
+
+  src = fetchFromGitHub {
+    owner = "pritunl";
+    repo = "pritunl-zero-client";
+    rev = version;
+    sha256 = "sha256-ElnBNVrC4tQLYXhz2d+NMqKdUVx/hgnW3xJ0USKEfVI=";
+  };
+
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install ssh_client.py $out/bin/pritunl-ssh
+    install ssh_host_client.py $out/bin/pritunl-ssh-host
+  '';
+
+  meta = with lib; {
+    description = "Pritunl Zero SSH client";
+    homepage = "https://github.com/pritunl/pritunl-zero-client";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ Thunderbottom ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/privoxy/default.nix b/nixpkgs/pkgs/tools/networking/privoxy/default.nix
new file mode 100644
index 000000000000..5f394db354c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/privoxy/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv
+, nixosTests
+, fetchpatch
+, fetchurl, autoreconfHook
+, zlib, pcre, w3m, man
+, openssl, brotli
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "privoxy";
+  version = "3.0.34";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ijbswa/Sources/${version}%20%28stable%29/${pname}-${version}-stable-src.tar.gz";
+    sha256 = "sha256-5sy8oWVvTmFrRlf4UU4zpw9ml+nXKUNWV3g5Mio8XSw=";
+  };
+
+  # Patch to fix socks4 and socks4a support under glibc's source fortification
+  # (enabled by default since glibc 2.38-0)
+  patches = [
+    (fetchpatch {
+      url = "https://www.privoxy.org/gitweb/?p=privoxy.git;a=commitdiff_plain;h=19d7684ca10f6c1279568aa19e9a9da2276851f1";
+      sha256 = "sha256-bCb0RUVrWeGfqZYFHXDEEx+76xiNyVqehtLvk9C1j+4=";
+    })
+  ];
+
+  hardeningEnable = [ "pie" ];
+
+  nativeBuildInputs = [ autoreconfHook w3m man ];
+  buildInputs = [ zlib pcre openssl brotli ];
+
+  makeFlags = [ "STRIP=" ];
+  configureFlags = [
+    "--with-openssl"
+    "--with-brotli"
+    "--enable-external-filters"
+    "--enable-compression"
+  ];
+
+  postInstall = ''
+    rm -r $out/var
+  '';
+
+  passthru.tests.privoxy = nixosTests.privoxy;
+
+  meta = with lib; {
+    homepage = "https://www.privoxy.org/";
+    description = "Non-caching web proxy with advanced filtering capabilities";
+    # When linked with mbedtls, the license becomes GPLv3 (or later), otherwise
+    # GPLv2 (or later). See https://www.privoxy.org/user-manual/copyright.html
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ ];
+    mainProgram = "privoxy";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/proxify/default.nix b/nixpkgs/pkgs/tools/networking/proxify/default.nix
new file mode 100644
index 000000000000..3702c0dc5a28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/proxify/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "proxify";
+  version = "0.0.13";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "proxify";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-5sicN/Z26nkxtU/6vDkEMBxyRNHIP7hQ+BvzHuQqBhw=";
+  };
+
+  vendorHash = "sha256-90wNln2C5/K1WfX8rv6kKQpHMpxW3hv5zpZpCSHy8ys=";
+
+  meta = with lib; {
+    description = "Proxy tool for HTTP/HTTPS traffic capture";
+    longDescription = ''
+      This tool supports multiple operations such as request/response dump, filtering
+      and manipulation via DSL language, upstream HTTP/Socks5 proxy. Additionally a
+      replay utility allows to import the dumped traffic (request/responses with correct
+      domain name) into other tools by simply setting the upstream proxy to proxify.
+    '';
+    homepage = "https://github.com/projectdiscovery/proxify";
+    changelog = "https://github.com/projectdiscovery/proxify/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/proxychains-ng/default.nix b/nixpkgs/pkgs/tools/networking/proxychains-ng/default.nix
new file mode 100644
index 000000000000..b94dcaf9518c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/proxychains-ng/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "proxychains-ng";
+  version = "4.16";
+
+  src = fetchFromGitHub {
+    owner = "rofl0r";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-uu/zN6W0ue526/3a9QeYg6J4HLaovZJVOYXksjouYok=";
+  };
+
+  patches = [
+    # zsh completion
+    (fetchpatch {
+      url = "https://github.com/rofl0r/proxychains-ng/commit/04023d3811d8ee34b498b429bac7a871045de59c.patch";
+      sha256 = "sha256-Xcg2kmAhj/OJn/RKJAxb9MOJNJQY7FXmxEIzQ5dvabo=";
+    })
+    (fetchpatch {
+      url = "https://github.com/rofl0r/proxychains-ng/commit/9b42da71f4df7b783cf07a58ffa095e293c43380.patch";
+      sha256 = "sha256-tYv9XP51WtsjaoklwQk3D/MQceoOvtdMwBraECt6AXQ=";
+    })
+    # https://github.com/NixOS/nixpkgs/issues/136093
+    ./swap-priority-4-and-5-in-get_config_path.patch
+  ];
+
+  installFlags = [
+    "install-config"
+    # TODO: check on next update if that works and remove postInstall
+    # "install-zsh-completion"
+  ];
+
+  postInstall = ''
+    ./tools/install.sh -D -m 644 completions/_proxychains $out/share/zsh/site_functions/_proxychains4
+  '';
+
+  meta = with lib; {
+    description = "A preloader which hooks calls to sockets in dynamically linked programs and redirects it through one or more socks/http proxies";
+    homepage = "https://github.com/rofl0r/proxychains-ng";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ zenithal ];
+    platforms = platforms.linux ++ [ "aarch64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/proxychains-ng/swap-priority-4-and-5-in-get_config_path.patch b/nixpkgs/pkgs/tools/networking/proxychains-ng/swap-priority-4-and-5-in-get_config_path.patch
new file mode 100644
index 000000000000..05d5546e674e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/proxychains-ng/swap-priority-4-and-5-in-get_config_path.patch
@@ -0,0 +1,25 @@
+diff --git a/src/common.c b/src/common.c
+index 1da1c45..fb68ada 100644
+--- a/src/common.c
++++ b/src/common.c
+@@ -113,13 +113,13 @@ char *get_config_path(char* default_path, char* pbuf, size_t bufsize) {
+ 	if(check_path(path))
+ 		goto have;
+ 
+-	// priority 4: $SYSCONFDIR/proxychains.conf
+-	path = SYSCONFDIR "/" PROXYCHAINS_CONF_FILE;
++	// priority 4: /etc/proxychains.conf
++	path = "/etc/" PROXYCHAINS_CONF_FILE;
+ 	if(check_path(path))
+ 		goto have;
+ 
+-	// priority 5: /etc/proxychains.conf
+-	path = "/etc/" PROXYCHAINS_CONF_FILE;
++	// priority 5: $SYSCONFDIR/proxychains.conf
++	path = SYSCONFDIR "/" PROXYCHAINS_CONF_FILE;
+ 	if(check_path(path))
+ 		goto have;
+ 
+-- 
+2.37.2
+
diff --git a/nixpkgs/pkgs/tools/networking/proxychains/default.nix b/nixpkgs/pkgs/tools/networking/proxychains/default.nix
new file mode 100644
index 000000000000..e78b1b0fcd6c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/proxychains/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "proxychains";
+  version = "4.4.0";
+
+  src = fetchFromGitHub {
+    owner = "haad";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "083xdg6fsn8c2ns93lvy794rixxq8va6jdf99w1z0xi4j7f1nyjw";
+  };
+
+  patches = [
+    # https://github.com/NixOS/nixpkgs/issues/136093
+    ./swap-priority-4-and-5-in-get_config_path.patch
+  ];
+
+  postPatch = ''
+    # Suppress compiler warning. Remove it when upstream fix arrives
+    substituteInPlace Makefile --replace "-Werror" "-Werror -Wno-stringop-truncation"
+  '';
+
+  installFlags = [
+    "install-config"
+  ];
+
+  meta = with lib; {
+    description = "Proxifier for SOCKS proxies";
+    homepage = "https://proxychains.sourceforge.net";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.linux;
+    mainProgram = "proxychains4";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/proxychains/swap-priority-4-and-5-in-get_config_path.patch b/nixpkgs/pkgs/tools/networking/proxychains/swap-priority-4-and-5-in-get_config_path.patch
new file mode 100644
index 000000000000..dd2c3031184c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/proxychains/swap-priority-4-and-5-in-get_config_path.patch
@@ -0,0 +1,25 @@
+diff --git a/src/common.c b/src/common.c
+index 1ca612a..7c21377 100644
+--- a/src/common.c
++++ b/src/common.c
+@@ -37,13 +37,13 @@ char *get_config_path(char* default_path, char* pbuf, size_t bufsize) {
+ 	if(check_path(path))
+ 		return path;
+ 
+-	// priority 4: $SYSCONFDIR/proxychains.conf
+-	path = SYSCONFDIR "/" PROXYCHAINS_CONF_FILE;
++	// priority 4: /etc/proxychains.conf
++	path = "/etc/" PROXYCHAINS_CONF_FILE;
+ 	if(check_path(path))
+ 		return path;
+ 
+-	// priority 5: /etc/proxychains.conf
+-	path = "/etc/" PROXYCHAINS_CONF_FILE;
++	// priority 5: $SYSCONFDIR/proxychains.conf
++	path = SYSCONFDIR "/" PROXYCHAINS_CONF_FILE;
+ 	if(check_path(path))
+ 		return path;
+ 
+-- 
+2.37.2
+
diff --git a/nixpkgs/pkgs/tools/networking/pssh/default.nix b/nixpkgs/pkgs/tools/networking/pssh/default.nix
new file mode 100644
index 000000000000..69236a690968
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pssh/default.nix
@@ -0,0 +1,37 @@
+{ lib, fetchFromGitHub, python3Packages, openssh, rsync }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pssh";
+  version = "2.3.4";
+
+  src = fetchFromGitHub {
+    owner = "lilydjwg";
+    repo = "pssh";
+    rev = "v${version}";
+    hash = "sha256-B1dIa6hNeq4iE8GKVhTp3Gzq7vp+v5Yyzj8uF8X71yg=";
+  };
+
+  postPatch = ''
+    for f in bin/*; do
+      substituteInPlace $f \
+        --replace "'ssh'" "'${openssh}/bin/ssh'" \
+        --replace "'scp'" "'${openssh}/bin/scp'" \
+        --replace "'rsync'" "'${rsync}/bin/rsync'"
+    done
+  '';
+
+  # Tests do not run with python3: https://github.com/lilydjwg/pssh/issues/126
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Parallel SSH Tools";
+    longDescription = ''
+      PSSH provides parallel versions of OpenSSH and related tools,
+      including pssh, pscp, prsync, pnuke and pslurp.
+    '';
+    inherit (src.meta) homepage;
+    license = licenses.bsd3;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ chris-martin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pwnat/default.nix b/nixpkgs/pkgs/tools/networking/pwnat/default.nix
new file mode 100644
index 000000000000..c0ead5468b50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pwnat/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pwnat";
+  # Latest release has an annoying segmentation fault bug, see:
+  # https://github.com/samyk/pwnat/pull/25 . Merging only #25 is impossible due
+  # to major code refactoring.
+  version = "2023-03-31";
+
+  src = fetchFromGitHub {
+    owner  = "samyk";
+    repo   = pname;
+    rev    = "8ec62cdae53a2d573c9f9c906133ca45bbd3360a";
+    sha256 = "sha256-QodNw3ab8/TurKamg6AgMfQ08aalp4j6q663B+sWmRM=";
+  };
+
+  # See https://github.com/samyk/pwnat/issues/28
+  preBuild = ''
+    mkdir obj
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D pwnat $out/bin/pwnat
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage    = "http://samy.pl/pwnat/";
+    description = "ICMP NAT to NAT client-server communication";
+    license     = lib.licenses.gpl3Plus;
+    maintainers = with maintainers; [viric];
+    platforms   = with platforms; linux;
+    mainProgram = "pwnat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pykms/default.nix b/nixpkgs/pkgs/tools/networking/pykms/default.nix
new file mode 100644
index 000000000000..a8dcbbebe141
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pykms/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, fetchFromGitHub
+, python3
+, writeText
+, writeShellScript
+, sqlite
+}:
+let
+  pypkgs = python3.pkgs;
+
+  dbSql = writeText "create_pykms_db.sql" ''
+    CREATE TABLE clients(
+      clientMachineId TEXT,
+      machineName     TEXT,
+      applicationId   TEXT,
+      skuId           TEXT,
+      licenseStatus   TEXT,
+      lastRequestTime INTEGER,
+      kmsEpid         TEXT,
+      requestCount    INTEGER
+    );
+  '';
+
+  dbScript = writeShellScript "create_pykms_db.sh" ''
+    set -eEuo pipefail
+
+    db=''${1:-/var/lib/pykms/clients.db}
+
+    if [ ! -e $db ] ; then
+      ${lib.getBin sqlite}/bin/sqlite3 $db < ${dbSql}
+    fi
+  '';
+
+in
+pypkgs.buildPythonApplication rec {
+  pname = "pykms";
+  version = "unstable-2021-01-25";
+
+  src = fetchFromGitHub {
+    owner = "Py-KMS-Organization";
+    repo = "py-kms";
+    rev = "1435c86fe4f11aa7fd42d77fa61715ca3015eeab";
+    hash = "sha256-9KiMbS0uKTbWSZVIv5ziIeR9c8+EKfKd20yPmjCX7GQ=";
+  };
+
+  sourceRoot = "${src.name}/py-kms";
+
+  propagatedBuildInputs = with pypkgs; [ systemd pytz tzlocal dnspython ];
+
+  postPatch = ''
+    siteDir=$out/${python3.sitePackages}
+
+    substituteInPlace pykms_DB2Dict.py \
+      --replace "'KmsDataBase.xml'" "'$siteDir/KmsDataBase.xml'"
+  '';
+
+  format = "other";
+
+  # there are no tests
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $siteDir
+
+    PYTHONPATH="$PYTHONPATH:$siteDir"
+
+    mv * $siteDir
+    for b in Client Server ; do
+      makeWrapper ${python3.interpreter} $out/bin/''${b,,} \
+        --argv0 pykms-''${b,,} \
+        --add-flags $siteDir/pykms_$b.py \
+        --set PYTHONPATH $PYTHONPATH
+    done
+
+    install -Dm755 ${dbScript} $out/libexec/create_pykms_db.sh
+
+    install -Dm644 ../README.md -t $out/share/doc/pykms
+
+    ${python3.interpreter} -m compileall $siteDir
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Windows KMS (Key Management Service) server written in Python";
+    homepage = "https://github.com/Py-KMS-Organization/py-kms";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ peterhoeg zopieux ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/q/default.nix b/nixpkgs/pkgs/tools/networking/q/default.nix
new file mode 100644
index 000000000000..fdeddef65460
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/q/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "q";
+  version = "0.19.2";
+
+  src = fetchFromGitHub {
+    owner = "natesales";
+    repo = "q";
+    rev = "v${version}";
+    sha256 = "sha256-kfuf0iwRYNxd9TfIIHvAqLxXjesQh7jC0evT9DQrrzQ=";
+  };
+
+  vendorHash = "sha256-6kdf+LwMrIjwC3uZHlMdpEHvonxKfr86PQaMOgzgYOc=";
+
+  doCheck = false; # tries to resolve DNS
+
+  meta = {
+    description = "A tiny and feature-rich command line DNS client with support for UDP, TCP, DoT, DoH, DoQ, and ODoH";
+    homepage = "https://github.com/natesales/q";
+    license = lib.licenses.gpl3Only;
+    maintainers = [ lib.maintainers.das_j ];
+    mainProgram = "q";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/qcal/default.nix b/nixpkgs/pkgs/tools/networking/qcal/default.nix
new file mode 100644
index 000000000000..31e800394954
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/qcal/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromSourcehut
+}:
+
+buildGoModule rec {
+  pname = "qcal";
+  version = "0.9.1";
+  src = fetchFromSourcehut {
+    owner = "~psic4t";
+    repo = "qcal";
+    rev = version;
+    hash = "sha256-Rj806cKCFxWB8X4EiKvyZ5/xACw+VVbo9hv8AJiB0S4=";
+  };
+  vendorHash = "sha256-ntpSj3Ze7n1sMIMojaESi4tQtx+mrA0aiv3+MQetjZI=";
+
+  # Replace "config-sample.json" in error message with the absolute path
+  # to that config file in the nix store
+  preBuild = ''
+    substituteInPlace helpers.go \
+      --replace " config-sample.json " " $out/share/qcal/config-sample.json "
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/qcal
+    cp config-sample.json $out/share/qcal/
+  '';
+
+  meta = with lib; {
+    description = "CLI calendar application for CalDAV servers written in Go";
+    homepage = "https://git.sr.ht/~psic4t/qcal";
+    license = licenses.gpl3;
+    mainProgram = "qcal";
+    maintainers = with maintainers; [ antonmosich ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/qcard/default.nix b/nixpkgs/pkgs/tools/networking/qcard/default.nix
new file mode 100644
index 000000000000..16ffb5d686fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/qcard/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromSourcehut
+}:
+
+buildGoModule rec {
+  pname = "qcard";
+  version = "0.7.1";
+
+  src = fetchFromSourcehut {
+    owner = "~psic4t";
+    repo = "qcard";
+    rev = version;
+    hash = "sha256-OwmJSeAOZTX7jMhoLHSIJa0jR8zCadISQF/PqFqltRY=";
+  };
+
+  vendorHash = null;
+
+  # Replace "config-sample.json" in error message with the absolute path
+  # to that config file in the nix store
+  preBuild = ''
+    substituteInPlace helpers.go \
+      --replace " config-sample.json " " $out/share/qcard/config-sample.json "
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/qcard
+    cp config-sample.json $out/share/qcard/
+  '';
+
+  meta = {
+    description = "CLI addressbook application for CardDAV servers written in Go";
+    homepage = "https://git.sr.ht/~psic4t/qcard";
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "qcard";
+    maintainers = with lib.maintainers; [ antonmosich ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/qodem/default.nix b/nixpkgs/pkgs/tools/networking/qodem/default.nix
new file mode 100644
index 000000000000..6451a7d8d316
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/qodem/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, ncurses, SDL, gpm, miniupnpc }:
+
+stdenv.mkDerivation rec {
+  pname = "qodem";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "klamonte";
+    repo = "qodem";
+    rev = "v${version}";
+    sha256 = "NAdcTVmNrDa3rbsbxJxFoI7sz5NK5Uw+TbP+a1CdB+Q=";
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ ncurses SDL gpm miniupnpc ];
+
+  meta = with lib; {
+    homepage = "https://qodem.sourceforge.net/";
+    description = "Re-implementation of the DOS-era Qmodem serial communications package";
+    longDescription = ''
+      Qodem is a from-scratch clone implementation of the Qmodem
+      communications program made popular in the days when Bulletin Board
+      Systems ruled the night. Qodem emulates the dialing directory and the
+      terminal screen features of Qmodem over both modem and Internet
+      connections.
+    '';
+    maintainers = with maintainers; [ embr ];
+    license = licenses.publicDomain;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/qrcp/default.nix b/nixpkgs/pkgs/tools/networking/qrcp/default.nix
new file mode 100644
index 000000000000..edd2a9b21633
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/qrcp/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "qrcp";
+  version = "0.11.2";
+
+  src = fetchFromGitHub {
+    owner = "claudiodangelis";
+    repo = "qrcp";
+    rev = version;
+    hash = "sha256-BuZn+7gTjsHTUDu33JXTrntb5LUzcq3ZsmgFg+6ivZg=";
+  };
+
+  vendorHash = "sha256-lqGPPyoSO12MyeYIuYcqDVHukj7oR3zmHgsS6SxY3yo=";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd qrcp \
+      --bash <($out/bin/qrcp completion bash) \
+      --fish <($out/bin/qrcp completion fish) \
+      --zsh <($out/bin/qrcp completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://claudiodangelis.com/qrcp/";
+    description = "Transfer files over wifi by scanning a QR code from your terminal";
+    longDescription = ''
+      qrcp binds a web server to the address of your Wi-Fi network
+      interface on a random port and creates a handler for it. The default
+      handler serves the content and exits the program when the transfer is
+      complete.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz ];
+    broken = stdenv.isDarwin; # needs golang.org/x/sys bump
+    mainProgram = "qrcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/quickserve/default.nix b/nixpkgs/pkgs/tools/networking/quickserve/default.nix
new file mode 100644
index 000000000000..ca175f5f2a91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/quickserve/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, makeWrapper, fetchzip, python3, python3Packages }:
+let
+  threaded_servers = python3Packages.buildPythonPackage {
+    name = "threaded_servers";
+    src = fetchzip {
+      url = "https://xyne.archlinux.ca/projects/python3-threaded_servers/src/python3-threaded_servers-2018.6.tar.xz";
+      sha256 = "1irliz90a1dk4lyl7mrfq8qnnrfad9czvbcw1spc13zyai66iyhf";
+    };
+
+    # stuff we don't care about pacserve
+    doCheck = false;
+  };
+  wrappedPython = python3.withPackages (_: [ threaded_servers ]);
+in stdenv.mkDerivation {
+  pname = "quickserve";
+  version = "2018";
+
+  dontUnpack = true;
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    makeWrapper ${wrappedPython}/bin/python $out/bin/quickserve \
+      --add-flags -mThreadedServers.PeeredQuickserve
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A simple HTTP server for quickly sharing files";
+    homepage = "https://xyne.archlinux.ca/projects/quickserve/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ lassulus ];
+    mainProgram = "quickserve";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/quicktun/default.nix b/nixpkgs/pkgs/tools/networking/quicktun/default.nix
new file mode 100644
index 000000000000..2c28e3665698
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/quicktun/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, libsodium, nixosTests }:
+
+stdenv.mkDerivation {
+  pname = "quicktun";
+  version = "2.2.5";
+
+  src = fetchFromGitHub {
+    owner = "UCIS";
+    repo = "QuickTun";
+    rev = "2d0c6a9cda8c21f921a5d1197aeee92e9568ca39";
+    sha256 = "1ydvwasj84qljfbzh6lmhyzjc20yw24a0v2mykp8afsm97zzlqgx";
+  };
+
+  patches = [ ./tar-1.30.diff ]; # quicktun master seems not to need this
+
+  buildInputs = [ libsodium ];
+
+  postPatch = ''
+    substituteInPlace build.sh \
+      --replace "cc=\"cc\"" "cc=\"$CC\""
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    bash build.sh
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    rm out/quicktun*tgz
+    install -vD out/quicktun* -t $out/bin
+    runHook postInstall
+  '';
+
+  passthru.tests.quicktun = nixosTests.quicktun;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Very simple, yet secure VPN software";
+    homepage = "http://wiki.ucis.nl/QuickTun";
+    maintainers = with maintainers; [ h7x4 ];
+    platforms = platforms.unix;
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/quicktun/tar-1.30.diff b/nixpkgs/pkgs/tools/networking/quicktun/tar-1.30.diff
new file mode 100644
index 000000000000..88498e542807
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/quicktun/tar-1.30.diff
@@ -0,0 +1,19 @@
+Fix build with gnutar-1.30
+
+Creating source archive...
+tar: The following options were used after any non-optional arguments in archive create or update mode.  These options are positional and affect only arguments that follow them.  Please, rearrange them properly.
+tar: --exclude 'debian/data' has no effect
+tar: Exiting with failure status due to previous errors
+diff --git a/build.sh b/build.sh
+index 0ea0403..725178c 100755
+--- a/build.sh
++++ b/build.sh
+@@ -25,7 +25,7 @@ rm -rf out/ obj/ tmp/
+ mkdir -p out
+ if [ "$1" != "debian" ]; then
+ 	echo Creating source archive...
+-	$tar --transform "s,^,quicktun-`cat version`/," -czf "out/quicktun-`cat version`.tgz" build.sh clean.sh debian src version --exclude "debian/data"
++	$tar --transform "s,^,quicktun-`cat version`/," -czf "out/quicktun-`cat version`.tgz" --exclude "debian/data" build.sh clean.sh debian src version
+ fi
+ 
+ mkdir -p obj tmp tmp/include tmp/lib
diff --git a/nixpkgs/pkgs/tools/networking/rabtap/default.nix b/nixpkgs/pkgs/tools/networking/rabtap/default.nix
new file mode 100644
index 000000000000..2e9fff0dd1e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rabtap/default.nix
@@ -0,0 +1,22 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "rabtap";
+  version = "1.39.1";
+
+  src = fetchFromGitHub {
+    owner = "jandelgado";
+    repo = "rabtap";
+    rev = "v${version}";
+    sha256 = "sha256-R0OZNmOgklhiljsYTVoqpbMMMaPHICC/qVJNUgkUsfU=";
+  };
+
+  vendorHash = "sha256-BrpDafEFDrH243zDHY9EtkVjPvwrmbJVu5TQMHHOWfA=";
+
+  meta = with lib; {
+    description = "RabbitMQ wire tap and swiss army knife";
+    license = licenses.gpl3Only;
+    homepage = "https://github.com/jandelgado/rabtap";
+    maintainers = with maintainers; [ eigengrau ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/radsecproxy/default.nix b/nixpkgs/pkgs/tools/networking/radsecproxy/default.nix
new file mode 100644
index 000000000000..00e908e51a24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/radsecproxy/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, openssl, autoreconfHook, nettle }:
+
+stdenv.mkDerivation rec {
+  pname = "radsecproxy";
+  version = "1.9.3";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-4w5aQIh3loHrxFGhWt6pW2jgj/JuqQSYmNsnAkEuKoI=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ openssl nettle ];
+
+  configureFlags = [
+     "--with-ssl=${openssl.dev}"
+     "--sysconfdir=/etc"
+     "--localstatedir=/var"
+  ];
+
+  meta = with lib; {
+    homepage = "https://radsecproxy.github.io/";
+    description = "A generic RADIUS proxy that supports both UDP and TLS (RadSec) RADIUS transports";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ sargon ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/radvd/default.nix b/nixpkgs/pkgs/tools/networking/radvd/default.nix
new file mode 100644
index 000000000000..de8b9a0a4f1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/radvd/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, pkg-config, libdaemon, bison, flex, check }:
+
+stdenv.mkDerivation rec {
+  pname = "radvd";
+  version = "2.19";
+
+  src = fetchurl {
+    url = "http://www.litech.org/radvd/dist/${pname}-${version}.tar.xz";
+    sha256 = "0h722f17h7cra1sjgrxhrrvx54mm47fs039909yhbabigxch8kjn";
+  };
+
+  nativeBuildInputs = [ pkg-config bison flex check ];
+  buildInputs = [ libdaemon ];
+
+  # Needed for cross-compilation
+  makeFlags = [
+    "AR=${stdenv.cc.targetPrefix}ar"
+  ];
+
+  meta = with lib; {
+    homepage = "http://www.litech.org/radvd/";
+    description = "IPv6 Router Advertisement Daemon";
+    platforms = platforms.linux;
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rathole/default.nix b/nixpkgs/pkgs/tools/networking/rathole/default.nix
new file mode 100644
index 000000000000..1f12ed46b147
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rathole/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rathole";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "rapiz1";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-YfLzR1lHk+0N3YU1XTNxz+KE1S3xaiKJk0zASm6cr1s=";
+  };
+
+  cargoHash = "sha256-UyQXAUPnp32THZJAs/p3bIXZjcXTvjy207QBVLCfkr8=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreServices
+  ];
+
+  __darwinAllowLocalNetworking = true;
+
+  doCheck = false; # https://github.com/rapiz1/rathole/issues/222
+
+  meta = with lib; {
+    description = "Reverse proxy for NAT traversal";
+    homepage = "https://github.com/rapiz1/rathole";
+    changelog = "https://github.com/rapiz1/rathole/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "rathole";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ratman/default.nix b/nixpkgs/pkgs/tools/networking/ratman/default.nix
new file mode 100644
index 000000000000..a78840095d88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ratman/default.nix
@@ -0,0 +1,93 @@
+{ lib
+, fetchFromGitLab
+, installShellFiles
+, libsodium
+, pkg-config
+, protobuf
+, rustPlatform
+, fetchYarnDeps
+, prefetch-yarn-deps
+, stdenv
+, yarn
+, nodejs
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ratman";
+  version = "0.4.0";
+
+  src = fetchFromGitLab {
+    domain = "git.irde.st";
+    owner = "we";
+    repo = "irdest";
+    rev = "${pname}-${version}";
+    sha256 = "sha256-ZZ7idZ67xvQFmQJqIFU/l77YU+yDQOqNthX5NR/l4k8=";
+  };
+
+  cargoSha256 = "Nsux0QblBtzlhLEgfKYvkQrOz8+oVd2pqT3CL8TnQEc=";
+
+  nativeBuildInputs = [ protobuf pkg-config installShellFiles ];
+
+  cargoBuildFlags = [ "--all-features" "-p" "ratman" ];
+  cargoTestFlags = cargoBuildFlags;
+
+  buildInputs = [ libsodium ];
+
+  postInstall = ''
+    installManPage docs/man/ratmand.1
+  '';
+
+  SODIUM_USE_PKG_CONFIG = 1;
+
+  dashboard = stdenv.mkDerivation rec {
+    pname = "ratman-dashboard";
+    inherit version src;
+    sourceRoot = "${src.name}/ratman/dashboard";
+
+    yarnDeps = fetchYarnDeps {
+      yarnLock = src + "/ratman/dashboard/yarn.lock";
+      sha256 = "sha256-pWjKL41r/bTvWv+5qCgCFVL9+o64BiV2/ISdLeKEOqE=";
+    };
+
+    nativeBuildInputs = [ yarn nodejs prefetch-yarn-deps ];
+
+    outputs = [ "out" "dist" ];
+
+    buildPhase = ''
+      # Yarn writes temporary files to $HOME. Copied from mkYarnModules.
+      export HOME=$NIX_BUILD_TOP/yarn_home
+
+      # Make yarn install packages from our offline cache, not the registry
+      yarn config --offline set yarn-offline-mirror ${yarnDeps}
+
+      # Fixup "resolved"-entries in yarn.lock to match our offline cache
+      fixup-yarn-lock yarn.lock
+
+      yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive
+
+      patchShebangs node_modules/
+
+      # Build into `./dist/`, suppress formatting.
+      yarn --offline build | cat
+    '';
+
+    installPhase = ''
+      cp -R . $out
+
+      mv $out/dist $dist
+      ln -s $dist $out/dist
+    '';
+  };
+
+  prePatch = ''
+    cp -r ${dashboard.dist} ratman/dashboard/dist
+  '';
+
+  meta = with lib; {
+    description = "A modular decentralised peer-to-peer packet router and associated tools";
+    homepage = "https://git.irde.st/we/irdest";
+    platforms = platforms.unix;
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ spacekookie yuka ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ratools/default.nix b/nixpkgs/pkgs/tools/networking/ratools/default.nix
new file mode 100644
index 000000000000..0eea11bb3f58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ratools/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ratools";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "danrl";
+    repo = "ratools";
+    rev = "v${version}";
+    sha256 = "07m45bn9lzgbfihmxic23wqp73nxg5ihrvkigr450jq6gzvgwawq";
+  };
+
+  makeFlags = [ "-C" "src" ];
+
+  installPhase = ''
+    install -vD bin/* -t $out/bin
+    install -vD man/* -t $out/share/man/man8
+  '';
+
+  meta = with lib; {
+    description = "A fast, dynamic, multi-threading framework for IPv6 Router Advertisements";
+    homepage = "https://github.com/danrl/ratools";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rcon/default.nix b/nixpkgs/pkgs/tools/networking/rcon/default.nix
new file mode 100644
index 000000000000..e51dc3fac371
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rcon/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, glib, libbsd, check, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "rcon";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "n0la";
+    repo = "rcon";
+    rev = version;
+    sha256 = "sha256-bHm6JeWmpg42VZQXikHl+BMx9zimRLBQWemTqOxyLhw=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [
+    glib
+    libbsd
+    check
+    pcre
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/n0la/rcon";
+    description = "Source RCON client for command line";
+    maintainers = with maintainers; [ f4814n ];
+    platforms = with platforms; linux ++ darwin;
+    license = licenses.bsd2;
+    mainProgram = "rcon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rconc/default.nix b/nixpkgs/pkgs/tools/networking/rconc/default.nix
new file mode 100644
index 000000000000..5934dd7e8893
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rconc/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  version = "0.1.4";
+  pname = "rconc";
+
+  src = fetchFromGitHub {
+    owner = "klemens";
+    repo = pname;
+    rev = "11def656970b9ccf35c40429b5c599a4de7b28fc";
+    sha256 = "sha256-6Bff9NnG1ZEQhntzH5Iq0XEbJBKdwcb0BOn8nCkeWTY=";
+  };
+
+  cargoSha256 = "sha256-rSN/wm52ZhJ8JUEUC51Xv5eIpwvOR3LvTdFjGl64VVk=";
+
+  meta = with lib; {
+    description = "Simple cross-platform RCON client written in rust";
+    homepage = "https://github.com/klemens/rconc";
+    license = licenses.gpl3Only;
+    mainProgram = "rconc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rdap/default.nix b/nixpkgs/pkgs/tools/networking/rdap/default.nix
new file mode 100644
index 000000000000..3ea80e07dabb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rdap/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "rdap";
+  version = "0.9.1";
+  vendorHash = "sha256-8b1EAnR8PkEAw9yLBqPKFeANJit0OCJG+fssAGR/iTk=";
+
+  src = fetchFromGitHub {
+    owner = "openrdap";
+    repo = "rdap";
+    rev = "v${version}";
+    sha256 = "sha256-FiaUyhiwKXZ3xnFPmdxb8bpbm5eRRFNDL3duOGDnc/A=";
+  };
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X \"github.com/openrdap/rdap.version=OpenRDAP ${version}\"" ];
+
+  meta = with lib; {
+    homepage = "https://www.openrdap.org/";
+    description = "Command line client for the Registration Data Access Protocol (RDAP)";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sebastianblunt ];
+    mainProgram = "rdap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rdrview/default.nix b/nixpkgs/pkgs/tools/networking/rdrview/default.nix
new file mode 100644
index 000000000000..e4d56be3ffb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rdrview/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, libxml2, curl, libseccomp, installShellFiles }:
+
+stdenv.mkDerivation {
+  pname = "rdrview";
+  version = "unstable-2021-05-30";
+
+  src = fetchFromGitHub {
+    owner = "eafer";
+    repo = "rdrview";
+    rev = "444ce3d6efd8989cd6ecfdc0560071b20e622636";
+    sha256 = "02VC8r8PdcAfMYB0/NtbPnhsWatpLQc4mW4TmSE1+zk=";
+  };
+
+  buildInputs = [ libxml2 curl libseccomp ];
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 rdrview -t $out/bin
+    installManPage rdrview.1
+    runHook postInstall
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Command line tool to extract main content from a webpage";
+    homepage = "https://github.com/eafer/rdrview";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ djanatyn ];
+    mainProgram = "rdrview";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/reaver-wps-t6x/default.nix b/nixpkgs/pkgs/tools/networking/reaver-wps-t6x/default.nix
new file mode 100644
index 000000000000..83479a6d88ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/reaver-wps-t6x/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, libpcap, pixiewps, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "reaver-wps-t6x";
+  version = "1.6.6";
+
+  src = fetchFromGitHub {
+    owner = "t6x";
+    repo = "reaver-wps-fork-t6x";
+    rev = "v${version}";
+    sha256 = "sha256-7g4ZRkyu0TIOUw68dSPP4RyIRyeq1GgUMYFVSQB8/1I=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libpcap pixiewps ];
+
+  sourceRoot = "${src.name}/src";
+
+  meta = with lib; {
+    description = "Online and offline brute force attack against WPS";
+    homepage = "https://github.com/t6x/reaver-wps-fork-t6x";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nico202 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/reaver-wps/default.nix b/nixpkgs/pkgs/tools/networking/reaver-wps/default.nix
new file mode 100644
index 000000000000..050cadf3ed64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/reaver-wps/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, libpcap, sqlite, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "1.4";
+  pname = "reaver-wps";
+  confdir = "/var/db/${pname}-${version}"; # the sqlite database is at "${confdir}/reaver/reaver.db"
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/reaver-wps/reaver-${version}.tar.gz";
+    sha256 = "0bdjai4p8xbsw8zdkkk43rgsif79x0nyx4djpyv0mzh59850blxd";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libpcap sqlite ];
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: crypto/dh_groups.o:src/crypto/../globule.h:141: multiple definition of
+  #     `globule'; /build/ccrzO6vA.o:src/globule.h:141: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */src)
+  '';
+
+  configureFlags = [ "--sysconfdir=${confdir}" ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,etc}
+    cp reaver.db $out/etc/
+    cp reaver wash $out/bin/
+
+    wrapProgram $out/bin/reaver --run "[ -s ${confdir}/reaver/reaver.db ] || install -D $out/etc/reaver.db ${confdir}/reaver/reaver.db"
+    wrapProgram $out/bin/wash   --run "[ -s ${confdir}/reaver/reaver.db ] || install -D $out/etc/reaver.db ${confdir}/reaver/reaver.db"
+  '';
+
+  enableParallelBuilding = true;
+
+  patches = [ ./parallel-build.patch ];
+
+  meta = with lib; {
+    description = "Brute force attack against Wifi Protected Setup";
+    homepage = "https://code.google.com/archive/p/reaver-wps/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nico202 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/reaver-wps/parallel-build.patch b/nixpkgs/pkgs/tools/networking/reaver-wps/parallel-build.patch
new file mode 100644
index 000000000000..086298a49d83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/reaver-wps/parallel-build.patch
@@ -0,0 +1,11 @@
+--- src/Makefile.in	2012-01-18 10:02:40.000000000 +0100
++++ src/Makefile.in	2022-01-27 19:29:19.324662149 +0100
+@@ -63,7 +63,7 @@
+ 80211.o: globule.o sql.o builder.o crc.o
+ 	$(CC) $(CFLAGS) $(INC) 80211.c -c
+ 
+-iface.o: globule.o
++iface.o: globule.o libiw
+ 	$(CC) $(CFLAGS) iface.c -c
+ 
+ sigalrm.o: globule.o
diff --git a/nixpkgs/pkgs/tools/networking/redfang/default.nix b/nixpkgs/pkgs/tools/networking/redfang/default.nix
new file mode 100644
index 000000000000..a6447c19576c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/redfang/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitLab, fetchpatch, bluez }:
+
+stdenv.mkDerivation rec {
+  pname = "redfang";
+  version = "2.5";
+
+  src = fetchFromGitLab {
+    group = "kalilinux";
+    owner = "packages";
+    repo = pname;
+    rev = "upstream/${version}";
+    sha256 = "sha256-dF9QmBckyHAZ+JbLr0jTmp0eMu947unJqjrTMsJAfIE=";
+  };
+
+  patches = [
+    # make install rule
+    (fetchpatch {
+      url = "https://gitlab.com/kalilinux/packages/redfang/-/merge_requests/1.diff";
+      sha256 = "sha256-oxIrUAucxsBL4+u9zNNe2XXoAd088AEAHcRB/AN7B1M=";
+    })
+  ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-format-security";
+
+  buildInputs = [ bluez ];
+
+  meta = with lib; {
+    description = "A small proof-of-concept application to find non discoverable bluetooth devices";
+    homepage = "https://gitlab.com/kalilinux/packages/redfang";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ moni ];
+    mainProgram = "fang";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/redir/default.nix b/nixpkgs/pkgs/tools/networking/redir/default.nix
new file mode 100644
index 000000000000..17975521de16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/redir/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "redir";
+  version = "3.3";
+
+  src = fetchFromGitHub {
+    owner = "troglobit";
+    repo = "redir";
+    rev = "v${version}";
+    sha256 = "13n401i3q0xwpfgr21y47kgihi057wbh59xlsna8b8zpm973qny1";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = {
+    description = "A TCP port redirector for UNIX";
+    homepage = "https://github.com/troglobit/redir";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.unix;
+    mainProgram = "redir";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/redli/default.nix b/nixpkgs/pkgs/tools/networking/redli/default.nix
new file mode 100644
index 000000000000..41bc3d9265e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/redli/default.nix
@@ -0,0 +1,23 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "redli";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "IBM-Cloud";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-DKARqhoSaTQEUm+xUwAFFLR65q1L+bab7+50LONwvEQ=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "A humane alternative to the Redis-cli and TLS";
+    homepage = "https://github.com/IBM-Cloud/redli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ tchekda ];
+    mainProgram = "redli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/redsocks/default.nix b/nixpkgs/pkgs/tools/networking/redsocks/default.nix
new file mode 100644
index 000000000000..f97dd01e074d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/redsocks/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, libevent }:
+
+stdenv.mkDerivation rec {
+  pname = "redsocks";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "darkk";
+    repo = "redsocks";
+    rev = "release-${version}";
+    sha256 = "170cpvvivb6y2kwsqj9ppx5brgds9gkn8mixrnvj8z9c15xhvplm";
+  };
+
+  installPhase =
+    ''
+      mkdir -p $out/{bin,share}
+      mv redsocks $out/bin
+      mv doc $out/share
+    '';
+
+  buildInputs = [ libevent ];
+
+  meta = {
+    description = "Transparent redirector of any TCP connection to proxy";
+    homepage = "https://darkk.net.ru/redsocks/";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.ekleog ];
+    platforms = lib.platforms.linux;
+    mainProgram = "redsocks";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/requestly/default.nix b/nixpkgs/pkgs/tools/networking/requestly/default.nix
new file mode 100644
index 000000000000..20e877563afa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/requestly/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, appimageTools
+, fetchurl
+}:
+
+let
+  pname = "requestly";
+  version = "1.6.0";
+
+  src = fetchurl {
+    url = "https://github.com/requestly/requestly-desktop-app/releases/download/v${version}/Requestly-${version}.AppImage";
+    hash = "sha256-aUhgn6QeCHcs3yi1KKzw+yOUucbTOeNqObTYZTkKqrs=";
+  };
+
+  appimageContents = appimageTools.extractType2 { inherit pname version src; };
+in
+appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+    install -Dm 444 ${appimageContents}/${pname}.desktop -t $out/share/applications
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "Intercept & Modify HTTP Requests";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    homepage = "https://requestly.io";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "requestly";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/restish/default.nix b/nixpkgs/pkgs/tools/networking/restish/default.nix
new file mode 100644
index 000000000000..f8a1cfd466ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/restish/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, buildGoModule
+, darwin
+, fetchFromGitHub
+, restish
+, testers
+, xorg
+}:
+
+buildGoModule rec {
+  pname = "restish";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "danielgtaylor";
+    repo = "restish";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-a0ObgFgWEsLYjGmCCi/py2PADAWJ0By+AZ4wh+Yeam4=";
+  };
+
+  vendorHash = "sha256-qeArar0WnMACUnKBlC+PcFeJPzofwbK440A4M/rQ04U=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Cocoa
+    darwin.apple_sdk.frameworks.Kernel
+  ] ++ lib.optionals stdenv.isLinux [
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXi
+    xorg.libXinerama
+    xorg.libXrandr
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = restish;
+  };
+
+  meta = with lib; {
+    description = "CLI tool for interacting with REST-ish HTTP APIs";
+    homepage = "https://rest.sh/";
+    changelog = "https://github.com/danielgtaylor/restish/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "restish";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rewrk/Cargo.lock b/nixpkgs/pkgs/tools/networking/rewrk/Cargo.lock
new file mode 100644
index 000000000000..b477a88c23be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rewrk/Cargo.lock
@@ -0,0 +1,988 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "bytes"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
+
+[[package]]
+name = "cc"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "colored"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
+
+[[package]]
+name = "futures-task"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
+
+[[package]]
+name = "futures-util"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+
+[[package]]
+name = "js-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mio"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "regex"
+version = "1.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "rewrk"
+version = "0.3.2"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "http",
+ "hyper",
+ "rand",
+ "regex",
+ "rustls",
+ "rustls-native-certs",
+ "serde_json",
+ "tokio",
+ "tokio-rustls",
+ "tower",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustls"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+dependencies = [
+ "base64",
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092"
+dependencies = [
+ "openssl-probe",
+ "rustls",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "sct"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+
+[[package]]
+name = "serde_json"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "syn"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "tokio"
+version = "1.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc 0.42.0",
+ "windows_i686_gnu 0.42.0",
+ "windows_i686_msvc 0.42.0",
+ "windows_x86_64_gnu 0.42.0",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc 0.42.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
diff --git a/nixpkgs/pkgs/tools/networking/rewrk/default.nix b/nixpkgs/pkgs/tools/networking/rewrk/default.nix
new file mode 100644
index 000000000000..58aa3f46185b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rewrk/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rewrk";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "lnx-search";
+    repo = "rewrk";
+    rev = version;
+    hash = "sha256-Bqr5kmIIx+12hW4jpINcv0GBJBbMAkd4di/hZSXlT18=";
+  };
+
+  cargoLock.lockFile = ./Cargo.lock;
+
+  postPatch = ''
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "A more modern http framework benchmarker supporting HTTP/1 and HTTP/2 benchmarks";
+    homepage = "https://github.com/lnx-search/rewrk";
+    changelog = "https://github.com/lnx-search/rewrk/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rewrk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ripe-atlas-tools/default.nix b/nixpkgs/pkgs/tools/networking/ripe-atlas-tools/default.nix
new file mode 100644
index 000000000000..0fc3897b8780
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ripe-atlas-tools/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, python3
+, fetchFromGitHub
+, installShellFiles
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ripe-atlas-tools";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    owner = "RIPE-NCC";
+    repo = "ripe-atlas-tools";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-aETSDXCVteTruRKV/8Aw3R/bprB6txOsXrFvoZOxIus=";
+  };
+
+  postPatch = ''
+    # This mapping triggers network access on docs generation: https://github.com/RIPE-NCC/ripe-atlas-tools/issues/235
+    sed -i '/^intersphinx_mapping/d' docs/conf.py
+    # TODO: Ensure user-agent is picked up during build, remove me when https://github.com/RIPE-NCC/ripe-atlas-tools/pull/236
+    echo "include ripe/atlas/tools/user-agent" >> MANIFEST.in
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    sphinx-rtd-theme
+    sphinxHook
+    installShellFiles
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    ipy
+    pyopenssl
+    python-dateutil
+    pyyaml
+    requests
+    ripe-atlas-cousteau
+    ripe-atlas-sagan
+    typing-extensions
+    tzlocal
+    ujson
+  ];
+
+  preBuild = ''
+    echo "RIPE Atlas Tools [NixOS ${version}" > ripe/atlas/tools/user-agent
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd ripe-atlas --bash ./ripe-atlas-bash-completion.sh
+  '';
+
+  pythonImportsCheck = [
+    "ripe.atlas.tools"
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # Network tests: https://github.com/RIPE-NCC/ripe-atlas-tools/issues/234
+    "test_arg_from_file"
+    "test_arg_from_stdin"
+    # We injected our user-agent so the tests will fail
+    "test_user_agent_mac"
+    "test_user_agent_windows"
+    "test_user_agent_xdg_absent"
+    "test_user_agent_xdg_present"
+  ];
+
+  disabledTestPaths = [
+    # Relies on `ripe-atlas` being available in the PATH, installed with autocompletions
+    "tests/test_bash_completion.py"
+    # AS lookups are not mocked up: https://github.com/RIPE-NCC/ripe-atlas-tools/blob/master/tests/renderers/test_traceroute_aspath.py#L26
+    "tests/renderers/test_traceroute_aspath.py"
+    # We already build Sphinx so we do not need to test it
+    "tests/test_docs.py"
+  ];
+
+  HOME = "$TMPDIR"; # for cache generation.
+
+  # Necessary because it confuse the tests when it does "from ripe.atlas.sagan import X"
+  # version.py is used by Sphinx tests.
+  preCheck = ''
+    rm -rf ripe
+    mkdir -p ripe/atlas/tools
+    echo "__version__ = \"${version}\"" > ripe/atlas/tools/version.py
+  '';
+
+  meta = with lib; {
+    description = "RIPE ATLAS project tools";
+    homepage = "https://github.com/RIPE-NCC/ripe-atlas-tools";
+    changelog = "https://github.com/RIPE-NCC/ripe-atlas-tools/blob/v${version}/CHANGES.rst";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ raitobezarius ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ripmime/default.nix b/nixpkgs/pkgs/tools/networking/ripmime/default.nix
new file mode 100644
index 000000000000..70ff2cbe7305
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ripmime/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "ripmime";
+  version = "1.4.0.10";
+  src = fetchurl {
+    url = "https://pldaniels.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0sj06ibmlzy34n8v0mnlq2gwidy7n2aqcwgjh0xssz3vi941aqc9";
+  };
+
+  buildInputs = [ libiconv ];
+  preInstall = ''
+    sed -i Makefile -e "s@LOCATION=.*@LOCATION=$out@" -e "s@man/man1@share/&@"
+    mkdir -p "$out/bin" "$out/share/man/man1"
+  '';
+
+  env.NIX_CFLAGS_COMPILE = " -Wno-error ";
+
+  meta = with lib; {
+    description = "Attachment extractor for MIME messages";
+    maintainers = with maintainers; [ raskin ];
+    homepage = "https://pldaniels.com/ripmime/";
+    platforms = platforms.all;
+    mainProgram = "ripmime";
+  };
+
+  passthru = {
+    updateInfo = {
+      downloadPage = "https://pldaniels.com/ripmime/";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rosenpass/default.nix b/nixpkgs/pkgs/tools/networking/rosenpass/default.nix
new file mode 100644
index 000000000000..afbd1ac7f310
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rosenpass/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, fetchFromGitHub
+, nixosTests
+, rustPlatform
+, hostPlatform
+, installShellFiles
+, cmake
+, libsodium
+, pkg-config
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "rosenpass";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-t5AeJqeV16KCUoBm1GUzj/U6q382CRCR/XG6B2MiBU4=";
+  };
+
+  cargoHash = "sha256-caYJP3SNpZxtV9y3D62CuzJ5RjMoq98D9W0Fms5E3Nc=";
+
+  nativeBuildInputs = [
+    cmake # for oqs build in the oqs-sys crate
+    pkg-config
+    rustPlatform.bindgenHook # for C-bindings in the crypto libs
+    installShellFiles
+  ];
+
+  buildInputs = [ libsodium ];
+
+  # nix defaults to building for aarch64 _without_ the armv8-a
+  # crypto extensions, but liboqs depends on these
+  preBuild = lib.optionalString hostPlatform.isAarch64 ''
+    NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -march=armv8-a+crypto"
+  '';
+
+  postInstall = ''
+    installManPage doc/rosenpass.1
+  '';
+
+  passthru.tests.rosenpass = nixosTests.rosenpass;
+
+  meta = with lib; {
+    description = "Build post-quantum-secure VPNs with WireGuard";
+    homepage = "https://rosenpass.eu/";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ wucke13 ];
+    platforms = [ "aarch64-darwin" "aarch64-linux" "x86_64-darwin" "x86_64-linux" ];
+    mainProgram = "rosenpass";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rosenpass/tools.nix b/nixpkgs/pkgs/tools/networking/rosenpass/tools.nix
new file mode 100644
index 000000000000..86f7359809a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rosenpass/tools.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, makeWrapper
+, installShellFiles
+, coreutils
+, findutils
+, gawk
+, rosenpass
+, wireguard-tools
+}:
+stdenv.mkDerivation {
+  inherit (rosenpass) version src;
+  pname = "rosenpass-tools";
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  postInstall = ''
+    install -D $src/rp $out/bin/rp
+    installManPage $src/doc/rp.1
+    wrapProgram $out/bin/rp \
+      --prefix PATH : ${lib.makeBinPath [
+        coreutils findutils gawk rosenpass wireguard-tools
+      ]}
+  '';
+
+  meta = rosenpass.meta // {
+    description = "The Rosenpass tool `rp`, which is a script that wraps the `rosenpass` binary";
+    mainProgram = "rp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/routedns/default.nix b/nixpkgs/pkgs/tools/networking/routedns/default.nix
new file mode 100644
index 000000000000..0b6f6822bb8d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/routedns/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "routedns";
+  version = "0.1.51";
+
+  src = fetchFromGitHub {
+    owner = "folbricht";
+    repo = "routedns";
+    rev = "v${version}";
+    hash = "sha256-9H/l6EAbrNwD2DnweBqjmcoaJEnTH9BdGn2x/ZC3us4=";
+  };
+
+  vendorHash = "sha256-yOYeMYAXa1jok8QwGtYsvuUGgIXEjZGo6+FiDQkZwUU=";
+
+  subPackages = [ "./cmd/routedns" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/folbricht/routedns";
+    description = "DNS stub resolver, proxy and router";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jsimonetti ];
+    mainProgram = "routedns";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rp-pppoe/default.nix b/nixpkgs/pkgs/tools/networking/rp-pppoe/default.nix
new file mode 100644
index 000000000000..e58c25766810
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rp-pppoe/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, ppp } :
+let
+in
+stdenv.mkDerivation rec {
+  pname = "rp-pppoe";
+  version = "3.12";
+
+  src = fetchurl {
+    url = "https://www.roaringpenguin.com/files/download/rp-pppoe-${version}.tar.gz";
+    sha256 = "1hl6rjvplapgsyrap8xj46kc9kqwdlm6ya6gp3lv0ihm0c24wy80";
+  };
+
+  buildInputs = [ ppp ];
+
+  preConfigure = ''
+    cd src
+    export PPPD=${ppp}/sbin/pppd
+  '';
+
+  configureFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ "rpppoe_cv_pack_bitfields=rev" ];
+
+  postConfigure = ''
+    sed -i Makefile -e 's@DESTDIR)/etc/ppp@out)/etc/ppp@'
+    sed -i Makefile -e 's@PPPOESERVER_PPPD_OPTIONS=@&$(out)@'
+  '';
+
+  makeFlags = [ "AR:=$(AR)" ];
+
+  meta = with lib; {
+    description = "Roaring Penguin Point-to-Point over Ethernet tool";
+    platforms = platforms.linux;
+    homepage = "https://www.roaringpenguin.com/products/pppoe";
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rshijack/default.nix b/nixpkgs/pkgs/tools/networking/rshijack/default.nix
new file mode 100644
index 000000000000..181abdf4b603
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rshijack/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rshijack";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "kpcyrd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UyrHMw+3JE4zR+N7rdcTkLP3m4h6txkYa8uG9r7S9ZE=";
+  };
+
+  cargoHash = "sha256-bGGbZ3JXeo6eytiDHrgHOQN3VgfaqtWssz5hY0RZoZ0=";
+
+  meta = with lib; {
+    description = "TCP connection hijacker";
+    homepage = "https://github.com/kpcyrd/rshijack";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ xrelkd ];
+    platforms = platforms.unix;
+    mainProgram = "rshijack";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rtptools/default.nix b/nixpkgs/pkgs/tools/networking/rtptools/default.nix
new file mode 100644
index 000000000000..5d439f183d2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rtptools/default.nix
@@ -0,0 +1,16 @@
+{ stdenv, lib, fetchurl }:
+stdenv.mkDerivation rec {
+  pname = "rtptools";
+  version = "1.22";
+  src = fetchurl {
+    url = "http://www.cs.columbia.edu/irt/software/rtptools/download/rtptools-${version}.tar.gz";
+    sha256 = "0a4c0vmhxibfc58rrxpbav2bsk546chkg50ir4h3i57v4fjb4xic";
+  };
+  meta = {
+    description = "A number of small applications that can be used for processing RTP data";
+    homepage = "https://www.cs.columbia.edu/irt/software/rtptools/";
+    maintainers = [ lib.maintainers.lheckemann ];
+    platforms = lib.platforms.unix;
+    license = lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rustcat/default.nix b/nixpkgs/pkgs/tools/networking/rustcat/default.nix
new file mode 100644
index 000000000000..4a71aea6df5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rustcat/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustcat";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "robiot";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/6vNFh7n6WvYerrL8m9sgUKsO2KKj7/f8xc4rzHy9Io=";
+  };
+
+  cargoSha256 = "sha256-wqoU9UfXDmf7KIHgFif5rZfZY8Zu0SsaMVfwTtXLzHg=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Port listener and reverse shell";
+    homepage = "https://github.com/robiot/rustcat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "rcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/s3cmd/default.nix b/nixpkgs/pkgs/tools/networking/s3cmd/default.nix
new file mode 100644
index 000000000000..b07ea24abf9d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/s3cmd/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonApplication, fetchFromGitHub, python-magic, python-dateutil }:
+
+buildPythonApplication rec {
+  pname = "s3cmd";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "s3tools";
+    repo = "s3cmd";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-cxwf6+9WFt3U7+JdKRgZxFElD+Dgf2P2VyejHVoiDJk=";
+  };
+
+  propagatedBuildInputs = [ python-magic python-dateutil ];
+
+  dontUseSetuptoolsCheck = true;
+
+  meta = with lib; {
+    homepage = "https://s3tools.org/s3cmd";
+    description = "Command line tool for managing Amazon S3 and CloudFront services";
+    license = licenses.gpl2;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/s3rs/default.nix b/nixpkgs/pkgs/tools/networking/s3rs/default.nix
new file mode 100644
index 000000000000..2e72c7cb45bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/s3rs/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, rustPlatform, python3, perl, openssl, Security, fetchFromGitHub, pkg-config }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "s3rs";
+  version = "0.4.19";
+
+  src = fetchFromGitHub {
+    owner = "yanganto";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-mJ1bMfv/HY74TknpRvu8RIs1d2VlNreEVtHCtQSHQw8=";
+  };
+
+  cargoHash = "sha256-Q1EqEyNxWIx3wD8zuU7/MO3Qz6zsfBZbtT/IIUmJccE=";
+
+  nativeBuildInputs = [ python3 perl pkg-config ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A s3 cli client with multi configs with diffent provider";
+    homepage = "https://github.com/yanganto/s3rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ yanganto ];
+    mainProgram = "s3rs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/s4cmd/default.nix b/nixpkgs/pkgs/tools/networking/s4cmd/default.nix
new file mode 100644
index 000000000000..1f4dc14d27f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/s4cmd/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "s4cmd";
+  version = "2.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0d4mx98i3qhvlmr9x898mjvf827smzx6x5ji6daiwgjdlxc60mj2";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ boto3 pytz ];
+
+  # The upstream package tries to install some bash shell completion scripts in /etc.
+  # Setuptools is bugged and doesn't handle --prefix properly: https://github.com/pypa/setuptools/issues/130
+  patchPhase = ''
+    sed -i '/ data_files=/d' setup.py
+    sed -i 's|os.chmod("/etc.*|pass|' setup.py
+  '';
+
+  # Replace upstream's s4cmd wrapper script with the built-in Nix wrapper
+  postInstall = ''
+    ln -fs $out/bin/s4cmd.py $out/bin/s4cmd
+  '';
+
+  # Test suite requires an S3 bucket
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/bloomreach/s4cmd";
+    description = "Super S3 command line tool";
+    license = licenses.asl20;
+    maintainers = [ maintainers.bhipple ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/s5cmd/default.nix b/nixpkgs/pkgs/tools/networking/s5cmd/default.nix
new file mode 100644
index 000000000000..292169d77f77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/s5cmd/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "s5cmd";
+  version = "2.2.2";
+
+  src = fetchFromGitHub {
+    owner = "peak";
+    repo = "s5cmd";
+    rev = "v${version}";
+    hash = "sha256-5BIyG6P2pfADSPWtz3KouGPVMpQRiY2X4wtotTCX4lo=";
+  };
+
+  vendorHash = null;
+
+  # Skip e2e tests requiring network access
+  excludedPackages = [ "./e2e" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/peak/s5cmd";
+    description = "Parallel S3 and local filesystem execution tool";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tomberek ];
+    mainProgram = "s5cmd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/saldl/default.nix b/nixpkgs/pkgs/tools/networking/saldl/default.nix
new file mode 100644
index 000000000000..b7281d3a20a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/saldl/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, wafHook
+, python3
+, asciidoc
+, docbook_xml_dtd_45
+, docbook_xsl
+, libxml2
+, libxslt
+, curl
+, libevent
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "saldl";
+  version = "41";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PAX2MUyBWWU8kGkaeoCJteidgszh7ipwDJbrLXzVsn0=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "update-waf-to-2-0-24.patch";
+      url = "https://github.com/saldl/saldl/commit/360c29d6c8cee5f7e608af42237928be429c3407.patch";
+      hash = "sha256-RBMnsUtd0BaZe/EXypDCK4gpUU0dgucWmOcJRn5/iTA=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    wafHook
+    python3
+    asciidoc
+    docbook_xml_dtd_45
+    docbook_xsl
+    libxml2
+    libxslt
+  ];
+
+  buildInputs = [ curl libevent ];
+
+  wafConfigureFlags = [ "--saldl-version ${version}" "--no-werror" ];
+
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
+    description = "CLI downloader optimized for speed and early preview";
+    homepage = "https://saldl.github.io";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ zowoq ];
+    platforms = platforms.all;
+    mainProgram = "saldl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/samplicator/default.nix b/nixpkgs/pkgs/tools/networking/samplicator/default.nix
new file mode 100644
index 000000000000..158cac0a734b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/samplicator/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "samplicator";
+  version = "1.3.8rc1";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ];
+
+  src = fetchFromGitHub {
+    owner = "sleinen";
+    repo = "samplicator";
+    rev = version;
+    sha256 = "0fv5vldmwd6qrdv2wkk946dk9rn9nrv3c84ldvvqqn1spxfzgirm";
+  };
+
+  meta = {
+    description = "Send copies of (UDP) datagrams to multiple receivers";
+    homepage = "https://github.com/sleinen/samplicator/";
+    license = lib.licenses.gpl2Plus;
+    mainProgram = "samplicate";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/servefile/default.nix b/nixpkgs/pkgs/tools/networking/servefile/default.nix
new file mode 100644
index 000000000000..a901182635cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/servefile/default.nix
@@ -0,0 +1,23 @@
+{ buildPythonApplication, lib, fetchurl }:
+
+buildPythonApplication {
+  pname = "servefile";
+  version = "0.4.4";
+
+  src = fetchurl {
+    url = "https://seba-geek.de/proj/servefile/servefile-0.4.4.tar.gz";
+    sha256 = "1hibps5w2h922cfblp7jn50lbk3ilbdk9qvpc2h7b9giilaw2hwb";
+  };
+
+  postInstall = ''
+    mkdir -p $out/share/man/man1
+    cp servefile.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    homepage = "https://seba-geek.de/stuff/servefile/";
+    maintainers = with maintainers; [ qyliss ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/shadowfox/default.nix b/nixpkgs/pkgs/tools/networking/shadowfox/default.nix
new file mode 100644
index 000000000000..5b0eae5a595f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shadowfox/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchFromGitHub, buildGoModule, fetchpatch }:
+
+buildGoModule rec {
+  pname = "shadowfox";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "SrKomodo";
+    repo = "shadowfox-updater";
+    rev = "v${version}";
+    sha256 = "125mw70jidbp436arhv77201jdp6mpgqa2dzmrpmk55f9bf29sg6";
+  };
+
+  patches = [
+    # get vendoring to work with go1.20
+    # https://github.com/arguablykomodo/shadowfox-updater/pull/70
+    (fetchpatch {
+      url = "https://github.com/arguablykomodo/shadowfox-updater/commit/c16be00829373e0de7de47d6fb4d4c341fc36f75.patch";
+      hash = "sha256-buijhFLI8Sf9qBDntf689Xcpr6me+aVDoRqwSIcKKEw=";
+    })
+  ];
+
+  vendorHash = "sha256-3pHwyktSGxNM7mt0nPOe6uixS+bBJH9R8xqCyY6tlb0=";
+
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.tag=v${version}"
+  ];
+
+  meta = with lib; {
+    description = "Universal dark theme for Firefox while adhering to the modern design principles set by Mozilla";
+    homepage = "https://overdodactyl.github.io/ShadowFox/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ infinisil ];
+    mainProgram = "shadowfox-updater";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/shadowsocks-libev/default.nix b/nixpkgs/pkgs/tools/networking/shadowsocks-libev/default.nix
new file mode 100644
index 000000000000..4b268213c94c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shadowsocks-libev/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchFromGitHub, cmake
+, libsodium, mbedtls_2, libev, c-ares, pcre
+, asciidoc, xmlto, docbook_xml_dtd_45, docbook_xsl, libxslt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "shadowsocks-libev";
+  version = "3.3.5";
+
+  # Git tag includes CMake build files which are much more convenient.
+  src = fetchFromGitHub {
+    owner = "shadowsocks";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "1iqpmhxk354db1x08axg6wrdy9p9a4mz0h9351i3mf3pqd1v6fdw";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ libsodium mbedtls_2 libev c-ares pcre ];
+  nativeBuildInputs = [ cmake asciidoc xmlto docbook_xml_dtd_45
+                        docbook_xsl libxslt ];
+
+  cmakeFlags = [ "-DWITH_STATIC=OFF"  "-DCMAKE_BUILD_WITH_INSTALL_NAME_DIR=ON"
+    # RPATH of binary /nix/store/.../bin/... contains a forbidden reference to /build/
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+  ];
+
+  postPatch = ''
+    # https://github.com/shadowsocks/shadowsocks-libev/issues/2901
+    substituteInPlace CMakeLists.txt \
+      --replace '# pkg-config' \
+                '# pkg-config
+                 include(GNUInstallDirs)'
+    substituteInPlace cmake/shadowsocks-libev.pc.cmake \
+      --replace @prefix@ @CMAKE_INSTALL_PREFIX@ \
+      --replace '$'{prefix}/@CMAKE_INSTALL_BINDIR@ @CMAKE_INSTALL_FULL_BINDIR@ \
+      --replace '$'{exec_prefix}/@CMAKE_INSTALL_FULL_LIBDIR@ @CMAKE_INSTALL_FULL_LIBDIR@ \
+      --replace '$'{prefix}/@CMAKE_INSTALL_INCLUDEDIR@ @CMAKE_INSTALL_FULL_INCLUDEDIR@ \
+      --replace '$'{prefix}/@CMAKE_INSTALL_DATAROOTDIR@ @CMAKE_INSTALL_FULL_DATAROOTDIR@ \
+      --replace '$'{prefix}/@CMAKE_INSTALL_MANDIR@ @CMAKE_INSTALL_FULL_MANDIR@
+
+    # https://github.com/dcreager/libcork/issues/173 but needs a different patch (yay vendoring)
+    substituteInPlace libcork/src/libcork.pc.in \
+      --replace '$'{exec_prefix}/@CMAKE_INSTALL_LIBDIR@ @CMAKE_INSTALL_FULL_LIBDIR@ \
+      --replace '$'{prefix}/@CMAKE_INSTALL_INCLUDEDIR@ @CMAKE_INSTALL_FULL_INCLUDEDIR@
+  '';
+
+  postInstall = ''
+    cp lib/* $out/lib
+  '';
+
+  meta = with lib; {
+    description = "A lightweight secured SOCKS5 proxy";
+    longDescription = ''
+      Shadowsocks-libev is a lightweight secured SOCKS5 proxy for embedded devices and low-end boxes.
+      It is a port of Shadowsocks created by @clowwindy, which is maintained by @madeye and @linusyang.
+    '';
+    homepage = "https://github.com/shadowsocks/shadowsocks-libev";
+    license = licenses.gpl3Plus;
+    maintainers = [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/shadowsocks-rust/default.nix b/nixpkgs/pkgs/tools/networking/shadowsocks-rust/default.nix
new file mode 100644
index 000000000000..38fb6a60169b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shadowsocks-rust/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, Security, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shadowsocks-rust";
+  version = "1.18.1";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "shadowsocks";
+    repo = pname;
+    hash = "sha256-q7XtYOBruEmjPC4gx+hBO5oRwbxL7wQJenBS8Pl6yRk=";
+  };
+
+  cargoHash = "sha256-av4xUjoUGt53UoEpWULv15JKVWZq1x0YXvF5XFf4meQ=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security CoreServices ];
+
+  buildFeatures = [
+    "trust-dns"
+    "local-http-native-tls"
+    "local-tunnel"
+    "local-socks4"
+    "local-redir"
+    "local-dns"
+    "local-tun"
+    "aead-cipher-extra"
+    "aead-cipher-2022"
+    "aead-cipher-2022-extra"
+  ];
+
+  # all of these rely on connecting to www.example.com:80
+  checkFlags = [
+    "--skip=http_proxy"
+    "--skip=tcp_tunnel"
+    "--skip=tcprelay"
+    "--skip=udp_tunnel"
+    "--skip=udp_relay"
+    "--skip=socks4_relay_connect"
+    "--skip=socks5_relay_aead"
+    "--skip=socks5_relay_stream"
+    "--skip=trust_dns_resolver"
+  ];
+
+  # timeouts in sandbox
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A Rust port of Shadowsocks";
+    homepage = "https://github.com/shadowsocks/shadowsocks-rust";
+    changelog = "https://github.com/shadowsocks/shadowsocks-rust/raw/v${version}/debian/changelog";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/shadowsocks-v2ray-plugin/default.nix b/nixpkgs/pkgs/tools/networking/shadowsocks-v2ray-plugin/default.nix
new file mode 100644
index 000000000000..12117252abf6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shadowsocks-v2ray-plugin/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "shadowsocks-v2ray-plugin";
+  version = "1.3.1";
+  # Version 1.3.2 has runtime failures with Go 1.19
+  # https://github.com/NixOS/nixpkgs/issues/219343
+  # https://github.com/shadowsocks/v2ray-plugin/issues/292
+  # nixpkgs-update: no auto update
+
+  src = fetchFromGitHub {
+    owner = "shadowsocks";
+    repo = "v2ray-plugin";
+    rev = "v${version}";
+    hash = "sha256-iwfjINY/NQP9poAcCHz0ETxu0Nz58AmD7i1NbF8hBCs=";
+  };
+
+  vendorHash = "sha256-3/1te41U4QQTMeoA1y43QMfJyiM5JhaLE0ORO8ZO7W8=";
+
+  meta = with lib; {
+    description = "Yet another SIP003 plugin for shadowsocks, based on v2ray";
+    homepage = "https://github.com/shadowsocks/v2ray-plugin/";
+    license = licenses.mit;
+    maintainers = [ maintainers.ahrzb ];
+    mainProgram = "v2ray-plugin";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/shncpd/default.nix b/nixpkgs/pkgs/tools/networking/shncpd/default.nix
new file mode 100644
index 000000000000..ed724c24cf79
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shncpd/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "shncpd";
+  version = "2016-06-22";
+
+  src = fetchFromGitHub {
+    owner = "jech";
+    repo = "shncpd";
+    rev = "62ef688db7a6535ce11e66c8c93ab64a1bb09484";
+    sha256 = "1sj7a77isc2jmh7gw2naw9l9366kjx6jb909h7spj7daxdwvji8f";
+  };
+
+  hardeningEnable = [ "pie" ];
+
+  preConfigure = ''
+    makeFlags=( "PREFIX=$out" )
+  '';
+
+  meta = with lib; {
+    description = "Simple, stupid and slow HNCP daemon";
+    homepage = "https://www.irif.univ-paris-diderot.fr/~jch/software/homenet/shncpd.html";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.fpletz ];
+    mainProgram = "shncpd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/shorewall/default.nix b/nixpkgs/pkgs/tools/networking/shorewall/default.nix
new file mode 100644
index 000000000000..79fd1c17a492
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shorewall/default.nix
@@ -0,0 +1,123 @@
+{ coreutils
+, fetchurl
+, gnugrep
+, gnused
+, iproute2
+, iptables
+, perl
+, perlPackages
+, lib, stdenv
+, util-linux
+}:
+let
+  PATH = lib.concatStringsSep ":"
+           [ "${coreutils}/bin"
+             "${iproute2}/bin"
+             "${iptables}/bin"
+             "${util-linux}/bin"
+             "${gnugrep}/bin"
+             "${gnused}/bin"
+           ];
+in
+stdenv.mkDerivation rec {
+  pname = "shorewall";
+  version = "5.2.3.3";
+
+  srcs = [
+    (fetchurl {
+      url = "http://www.shorewall.net/pub/shorewall/5.2/shorewall-5.2.3/shorewall-core-${version}.tar.bz2";
+      sha256 = "1gg2yfxzm3y9qqjrrg5nq2ggi1c6yfxx0s7fvwjw70b185mwa5p5";
+    })
+    (fetchurl {
+      url = "http://www.shorewall.net/pub/shorewall/5.2/shorewall-5.2.3/shorewall-${version}.tar.bz2";
+      sha256 = "1ka70pa3s0cnvc83rlm57r05cdv9idnxnq0vmxi6nr7razak5f3b";
+    })
+    (fetchurl {
+      url = "http://www.shorewall.net/pub/shorewall/5.2/shorewall-5.2.3/shorewall6-${version}.tar.bz2";
+      sha256 = "0mhs4m6agwk082h1n69gnyfsjpycdd8215r4r9rzb3czs5xi087n";
+    })
+  ];
+  sourceRoot = ".";
+
+  buildInputs = [
+    coreutils
+    iproute2
+    iptables
+    util-linux
+    gnugrep
+    gnused
+    perl
+  ] ++ (with perlPackages; [
+    DigestSHA1
+  ]);
+  prePatch = ''
+    # Patch configure and install.sh files
+    patchShebangs .
+
+    # Remove hardcoded PATH
+    sed -i shorewall-core-${version}/lib.cli \
+        -e '/^ *PATH=.*/d'
+  '';
+  configurePhase = ''
+    shorewall-core-${version}/configure \
+      HOST=linux \
+      PREFIX=$out \
+      CONFDIR=\$PREFIX/etc-example \
+      SBINDIR=\$PREFIX/sbin \
+      SYSCONFDIR= \
+      SHAREDIR=\$PREFIX/share \
+      LIBEXECDIR=\$SHAREDIR \
+      PERLLIBDIR=\$SHAREDIR/shorewall \
+      MANDIR=$out/man \
+      VARLIB=/var/lib \
+      INITSOURCE= \
+      INITDIR= \
+      INITFILE= \
+      DEFAULT_PAGER=
+  '';
+  installPhase = ''
+    export DESTDIR=/
+    shorewall-core-${version}/install.sh
+
+    ln -s ../shorewall-core-${version}/shorewallrc shorewall-${version}/
+    shorewall-${version}/install.sh
+
+    ln -s ../shorewall-core-${version}/shorewallrc shorewall6-${version}/
+    shorewall6-${version}/install.sh
+
+    # Patch the example shorewall{,6}.conf in case it is included
+    # in services.shorewall{,6}.configs
+    sed -i $out/etc-example/shorewall/shorewall.conf \
+           $out/etc-example/shorewall6/shorewall6.conf \
+        -e 's|^LOGFILE=.*|LOGFILE=/var/log/shorewall.log|' \
+        -e 's|^PATH=.*|PATH=${PATH}|' \
+        -e 's|^PERL=.*|PERL=${perl}/bin/perl|' \
+        -e 's|^SHOREWALL_SHELL=.*|SHOREWALL_SHELL=${stdenv.shell}|'
+    sed -i $out/etc-example/shorewall6/shorewall6.conf \
+        -e 's|^CONFIG_PATH=.*|CONFIG_PATH=:''${CONFDIR}/shorewall6:''${SHAREDIR}/shorewall6:''${SHAREDIR}/shorewall|'
+    # FIXME: the default GEOIPDIR=/usr/share/xt_geoip/LE may require attention.
+
+    # Redirect CONFDIR to /etc where services.shorewall{,6}.configs
+    # will generate the config files.
+    sed -i $out/share/shorewall/shorewallrc \
+        -e 's~^CONFDIR=.*~CONFDIR=/etc~'
+  '';
+
+  meta = {
+    homepage = "http://www.shorewall.net/";
+    description = "An IP gateway/firewall configuration tool for GNU/Linux";
+    longDescription = ''
+      Shorewall is a high-level tool for configuring Netfilter. You describe your
+      firewall/gateway requirements using entries in a set of configuration
+      files. Shorewall reads those configuration files and with the help of the
+      iptables, iptables-restore, ip and tc utilities, Shorewall configures
+      Netfilter and the Linux networking subsystem to match your requirements.
+      Shorewall can be used on a dedicated firewall system, a multi-function
+      gateway/router/server or on a standalone GNU/Linux system. Shorewall does
+      not use Netfilter's ipchains compatibility mode and can thus take
+      advantage of Netfilter's connection state tracking capabilities.
+    '';
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/siege/default.nix b/nixpkgs/pkgs/tools/networking/siege/default.nix
new file mode 100644
index 000000000000..6a1ce2f4a028
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/siege/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchurl
+, openssl
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "siege";
+  version = "4.1.6";
+
+  src = fetchurl {
+    url = "http://download.joedog.org/siege/${pname}-${version}.tar.gz";
+    hash = "sha256-MJ1Ym/yBm28V0uXoWRs8DG9pNiT1Bg7qwGek2ad1fek=";
+  };
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isLinux [
+    "-lgcc_s"
+  ];
+
+  buildInputs = [
+    openssl
+    zlib
+  ];
+
+  prePatch = ''
+    sed -i -e 's/u_int32_t/uint32_t/g' -e '1i#include <stdint.h>' src/hash.c
+  '';
+
+  configureFlags = [
+    "--with-ssl=${openssl.dev}"
+    "--with-zlib=${zlib.dev}"
+  ];
+
+  meta = with lib; {
+    description = "HTTP load tester";
+    homepage = "https://www.joedog.org/siege-home/";
+    changelog = "https://github.com/JoeDog/siege/blob/v${version}/ChangeLog";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/simple-dlna-browser/default.nix b/nixpkgs/pkgs/tools/networking/simple-dlna-browser/default.nix
new file mode 100644
index 000000000000..c59a1e28910a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/simple-dlna-browser/default.nix
@@ -0,0 +1,68 @@
+{
+  # Derivation stuff
+  fetchFromGitHub,
+  lib,
+  makeWrapper,
+  stdenv,
+  # Dependencies
+  # Add these to the wrapper
+  curl,
+  gawk,
+  gnugrep,
+  gnused,
+  socat,
+  wget,
+}:
+stdenv.mkDerivation {
+  pname = "simple-dlna-browser";
+  version = "unstable-2023-01-09";
+
+  src = fetchFromGitHub {
+    owner = "javier-lopez";
+    repo = "learn";
+    sparseCheckout = [
+      "sh/tools/simple-dlna-browser"
+    ];
+    rev = "666e2c402723251ba19ce9d7c11b83b06c15a2c5";
+    sha256 = "sha256-jwPAEgti5DrjNnNVW/61GGTP+QedGAjz9kPwYhMAdTk=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    outputWrapper="$out/bin/simple-dlna-browser"
+    outputWrapped="$out/bin/wrapped-simple-dlna-browser"
+
+    mkdir -p $out/bin
+    cp sh/tools/simple-dlna-browser $outputWrapped
+    makeWrapper $outputWrapped $outputWrapper \
+      --prefix PATH : ${lib.makeBinPath [
+        curl
+        gawk
+        gnugrep
+        gnused
+        socat
+        wget
+      ]}
+
+    # Set the program name to a fixed value
+    # Normally it is guessed by the filename, but we don't want it to be the name of the wrapper
+    sed -i -e 's/PROGNAME=".*"/PROGNAME="simple-dlna-browser"/' $outputWrapped
+  '';
+
+  meta = {
+    description = "Query dlna media servers";
+    longDescription = ''
+      A bash script that allows simple interactions with [DLNA] media servers.
+      It is a light-weight, CLI alternative to [VLC], [Kodi], and other players.
+
+      [DLNA]: https://en.wikipedia.org/wiki/Digital_Living_Network_Alliance
+      [Kodi]: https://kodi.tv/
+      [VLC]: https://www.videolan.org/vlc/
+    '';
+    homepage = "https://github.com/javier-lopez/learn/blob/master/sh/tools/simple-dlna-browser";
+    license = lib.licenses.fair;
+    maintainers = with lib.maintainers; [ loveisgrief ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/simpleproxy/default.nix b/nixpkgs/pkgs/tools/networking/simpleproxy/default.nix
new file mode 100644
index 000000000000..7f9ccd1c9865
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/simpleproxy/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "simpleproxy";
+  version = "3.5";
+  rev = "v.${version}";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "vzaliva";
+    repo = "simpleproxy";
+    sha256 = "1my9g4vp19dikx3fsbii4ichid1bs9b9in46bkg05gbljhj340f6";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/vzaliva/simpleproxy";
+    description = "A simple TCP proxy";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.montag451 ];
+    mainProgram = "simpleproxy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sing-box/default.nix b/nixpkgs/pkgs/tools/networking/sing-box/default.nix
new file mode 100644
index 000000000000..f2c0b85980b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sing-box/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, buildPackages
+, coreutils
+, nix-update-script
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "sing-box";
+  version = "1.8.5";
+
+  src = fetchFromGitHub {
+    owner = "SagerNet";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-fW96Hh0eBK8pKkrQP+uA2uaqnZFvZszX2d+VOxKo5Zk=";
+  };
+
+  vendorHash = "sha256-4PauMcKpjXtXHJds8MJPH9L+UYPu2fFltP2uUEXtb+o=";
+
+  tags = [
+    "with_quic"
+    "with_grpc"
+    "with_dhcp"
+    "with_wireguard"
+    "with_ech"
+    "with_utls"
+    "with_reality_server"
+    "with_acme"
+    "with_clash_api"
+    "with_v2ray_api"
+    "with_gvisor"
+  ];
+
+  subPackages = [
+    "cmd/sing-box"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-X=github.com/sagernet/sing-box/constant.Version=${version}"
+  ];
+
+  postInstall = let emulator = stdenv.hostPlatform.emulator buildPackages; in ''
+    installShellCompletion --cmd sing-box \
+      --bash <(${emulator} $out/bin/sing-box completion bash) \
+      --fish <(${emulator} $out/bin/sing-box completion fish) \
+      --zsh  <(${emulator} $out/bin/sing-box completion zsh )
+
+    substituteInPlace release/config/sing-box{,@}.service \
+      --replace "/usr/bin/sing-box" "$out/bin/sing-box" \
+      --replace "/bin/kill" "${coreutils}/bin/kill"
+    install -Dm444 -t "$out/lib/systemd/system/" release/config/sing-box{,@}.service
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = { inherit (nixosTests) sing-box; };
+  };
+
+  meta = with lib;{
+    homepage = "https://sing-box.sagernet.org";
+    description = "The universal proxy platform";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "sing-box";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sipcalc/default.nix b/nixpkgs/pkgs/tools/networking/sipcalc/default.nix
new file mode 100644
index 000000000000..1ba4db5bc0d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sipcalc/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "sipcalc";
+  version = "1.1.6";
+
+  src = fetchurl {
+    url = "http://www.routemeister.net/projects/sipcalc/files/${pname}-${version}.tar.gz";
+    sha256 = "cfd476c667f7a119e49eb5fe8adcfb9d2339bc2e0d4d01a1d64b7c229be56357";
+  };
+
+  meta = with lib; {
+    description = "Advanced console ip subnet calculator";
+    homepage = "http://www.routemeister.net/projects/sipcalc/";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = [ maintainers.globin ];
+    mainProgram = "sipcalc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sipexer/default.nix b/nixpkgs/pkgs/tools/networking/sipexer/default.nix
new file mode 100644
index 000000000000..d1be5e9f7770
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sipexer/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "sipexer";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "miconda";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-/AVOC8Tx5XMDiKmLBq2xUiJaA3K3TnWVXPE+Vzx862I=";
+  };
+
+  vendorHash = "sha256-q2uNqKZc6Zye7YimPDrg40o68Fo4ux4fygjVjJdhqQU=";
+
+  meta = with lib; {
+    description = "Modern and flexible SIP CLI tool";
+    homepage = "https://github.com/miconda/sipexer";
+    changelog = "https://github.com/miconda/sipexer/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ astro janik ];
+    mainProgram = "sipexer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sipsak/default.nix b/nixpkgs/pkgs/tools/networking/sipsak/default.nix
new file mode 100644
index 000000000000..4d1cf08a11b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sipsak/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, c-ares, openssl ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "sipsak";
+  version = "4.1.2.1";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [
+    openssl
+    c-ares
+  ];
+
+  # -fcommon: workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: transport.o:/build/source/sipsak.h:323: multiple definition of
+  #     `address'; auth.o:/build/source/sipsak.h:323: first defined here
+  env.NIX_CFLAGS_COMPILE = "-std=gnu89 -fcommon";
+
+  src = fetchFromGitHub {
+    owner = "sipwise";
+    repo = "sipsak";
+    rev = "mr${version}";
+    hash = "sha256-y9P6t3xjazRNT6lDZAx+CttdyXruC6Q14b8XF9loeU4=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/sipwise/sipsak";
+    description = "SIP Swiss army knife";
+    license = lib.licenses.gpl2;
+    maintainers = with maintainers; [ sheenobu ];
+    platforms = with platforms; unix;
+    mainProgram = "sipsak";
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/sish/default.nix b/nixpkgs/pkgs/tools/networking/sish/default.nix
new file mode 100644
index 000000000000..afac612d0604
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sish/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, sish
+}:
+
+buildGoModule rec {
+  pname = "sish";
+  version = "2.12.0";
+
+  src = fetchFromGitHub {
+    owner = "antoniomika";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-dn64M/DGnyaoEtbdeytpRsKCXQPvR+dJDI7yFt2IqU0=";
+  };
+
+  vendorHash = "sha256-P5Y5DwF9Tb9j098XiEJZaEGZhT2Ce2emnV2SawElosI=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/antoniomika/sish/cmd.Commit=${src.rev}"
+    "-X=github.com/antoniomika/sish/cmd.Date=1970-01-01"
+    "-X=github.com/antoniomika/sish/cmd.Version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = sish;
+    };
+  };
+
+  meta = with lib; {
+    description = "HTTP(S)/WS(S)/TCP Tunnels to localhost";
+    homepage = "https://github.com/antoniomika/sish";
+    changelog = "https://github.com/antoniomika/sish/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "sish";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sitespeed-io/default.nix b/nixpkgs/pkgs/tools/networking/sitespeed-io/default.nix
new file mode 100644
index 000000000000..846e386ced3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sitespeed-io/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildNpmPackage
+, nodejs_18
+, coreutils
+, ffmpeg-headless
+, imagemagick_light
+, procps
+, python3
+, xorg
+, nix-update-script
+
+# chromedriver is more efficient than geckodriver, but is available on less platforms.
+
+, withChromium ? (lib.elem stdenv.hostPlatform.system chromedriver.meta.platforms)
+, chromedriver
+, chromium
+
+, withFirefox ? (lib.elem stdenv.hostPlatform.system geckodriver.meta.platforms)
+, geckodriver
+, firefox
+}:
+assert (!withFirefox && !withChromium) -> throw "Either `withFirefox` or `withChromium` must be enabled.";
+buildNpmPackage rec {
+  pname = "sitespeed-io";
+  version = "33.0.0";
+
+  src = fetchFromGitHub {
+    owner = "sitespeedio";
+    repo = "sitespeed.io";
+    rev = "v${version}";
+    hash = "sha256-UmviwcxL67fn8B4ruJH9yKdcYVqmxqKSImQszKhDHZ0=";
+  };
+
+  nodejs = nodejs_18;
+
+  postPatch = ''
+    ln -s npm-shrinkwrap.json package-lock.json
+  '';
+
+  # Don't try to download the browser drivers
+  CHROMEDRIVER_SKIP_DOWNLOAD = true;
+  GECKODRIVER_SKIP_DOWNLOAD = true;
+  EDGEDRIVER_SKIP_DOWNLOAD = true;
+
+  dontNpmBuild = true;
+  npmInstallFlags = [ "--omit=dev" ];
+  npmDepsHash = "sha256-FggwOnuQ+azgdLxfc6EUAsbl0+il6/2+p1t7MCrTNgE=";
+
+  postInstall = ''
+    mv $out/bin/sitespeed{.,-}io
+    mv $out/bin/sitespeed{.,-}io-wpr
+  '';
+
+  postFixup =
+    let
+      chromiumArgs = lib.concatStringsSep " " [
+        "--browsertime.chrome.chromedriverPath=${lib.getExe chromedriver}"
+        "--browsertime.chrome.binaryPath=${lib.getExe chromium}"
+      ];
+      firefoxArgs = lib.concatStringsSep " " [
+        "--browsertime.firefox.geckodriverPath=${lib.getExe geckodriver}"
+        "--browsertime.firefox.binaryPath=${lib.getExe firefox}"
+        # Firefox crashes if the profile template dir is not writable
+        "--browsertime.firefox.profileTemplate=$(mktemp -d)"
+      ];
+    in
+    ''
+      wrapProgram $out/bin/sitespeed-io \
+        --set PATH ${lib.makeBinPath ([
+          (python3.withPackages (p: [p.numpy p.opencv4 p.pyssim]))
+          ffmpeg-headless
+          imagemagick_light
+          xorg.xorgserver
+          procps
+          coreutils
+        ])} \
+        ${lib.optionalString withChromium "--add-flags '${chromiumArgs}'"} \
+        ${lib.optionalString withFirefox "--add-flags '${firefoxArgs}'"} \
+        ${lib.optionalString (!withFirefox && withChromium) "--add-flags '-b chrome'"} \
+        ${lib.optionalString (withFirefox && !withChromium) "--add-flags '-b firefox'"}
+    '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "An open source tool that helps you monitor, analyze and optimize your website speed and performance";
+    homepage = "https://sitespeed.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ misterio77 ];
+    platforms = lib.unique (geckodriver.meta.platforms ++ chromedriver.meta.platforms);
+    mainProgram = "sitespeed-io";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/slack-cli/default.nix b/nixpkgs/pkgs/tools/networking/slack-cli/default.nix
new file mode 100644
index 000000000000..56248107115e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/slack-cli/default.nix
@@ -0,0 +1,50 @@
+# slack-cli must be configured using the SLACK_CLI_TOKEN environment variable.
+# Using `slack init` will not work because it tries to write to the Nix store.
+#
+# There is no reason that we couldn't change the file path that slack-cli uses
+# for token storage, except that it would make the Nix package inconsistent with
+# upstream and other distributions.
+
+{ stdenv, lib, fetchFromGitHub, curl, jq, coreutils, gnugrep, gnused
+, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "slack-cli";
+  version = "0.18.0";
+
+  src = fetchFromGitHub {
+    owner = "rockymadden";
+    repo = "slack-cli";
+    rev = "v${version}";
+    sha256 = "022yr3cpfg0v7cxi62zzk08vp0l3w851qpfh6amyfgjiynnfyddl";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp src/slack "$out/bin/.slack-wrapped"
+
+    cat <<-WRAPPER > "$out/bin/slack"
+    #!${runtimeShell}
+    [ "\$1" = "init" -a -z "\$SLACK_CLI_TOKEN" ] && cat <<-'MESSAGE' >&2
+    WARNING: slack-cli must be configured using the SLACK_CLI_TOKEN
+    environment variable. Using \`slack init\` will not work because it tries
+    to write to the Nix store.
+
+    MESSAGE
+
+    export PATH=${lib.makeBinPath [ curl jq coreutils gnugrep gnused ]}:"\$PATH"
+    exec "$out/bin/.slack-wrapped" "\$@"
+    WRAPPER
+
+    chmod +x "$out/bin/slack"
+  '';
+
+  meta = {
+    license = lib.licenses.mit;
+    maintainers = [ ];
+    mainProgram = "slack";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sleep-on-lan/default.nix b/nixpkgs/pkgs/tools/networking/sleep-on-lan/default.nix
new file mode 100644
index 000000000000..bd55711830bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sleep-on-lan/default.nix
@@ -0,0 +1,35 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "sleep-on-lan";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "SR-G";
+    repo = pname;
+    rev = "${version}-RELEASE";
+    sha256 = "sha256-WooFGIdXIIoJPMqmPpnT+bc+P+IARMSxa3CvXY9++mw=";
+  };
+
+  sourceRoot = "${src.name}/src";
+  vendorHash = "sha256-JqDDG53khtDdMLVOscwqi0oGviF+3DMkv5tkHvp1gJc=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.BuildVersion=${version}"
+    "-X main.BuildVersionLabel=nixpkgs"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/SR-G/sleep-on-lan";
+    description = "Multi-platform process allowing to sleep on LAN a Linux or Windows computer, through wake-on-lan (reversed) magic packets or through HTTP REST requests";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ devusb ];
+    mainProgram = "sleep-on-lan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/slirp4netns/default.nix b/nixpkgs/pkgs/tools/networking/slirp4netns/default.nix
new file mode 100644
index 000000000000..2b2091d85b27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/slirp4netns/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, glib
+, libcap
+, libseccomp
+, libslirp
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slirp4netns";
+  version = "1.2.3";
+
+  src = fetchFromGitHub {
+    owner = "rootless-containers";
+    repo = "slirp4netns";
+    rev = "v${version}";
+    sha256 = "sha256-6kfL0ZjXzcyZl3remLi25RMLWCpg+a8EHC1M5LJE4a4=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ glib libcap libseccomp libslirp ];
+
+  enableParallelBuilding = true;
+  strictDeps = true;
+
+  passthru.tests = { inherit (nixosTests) podman; };
+
+  meta = with lib; {
+    homepage = "https://github.com/rootless-containers/slirp4netns";
+    description = "User-mode networking for unprivileged network namespaces";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ orivej ] ++ teams.podman.members;
+    platforms = platforms.linux;
+    mainProgram = "slirp4netns";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/slowlorust/default.nix b/nixpkgs/pkgs/tools/networking/slowlorust/default.nix
new file mode 100644
index 000000000000..c48257130b2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/slowlorust/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "slowlorust";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "MJVL";
+    repo = pname;
+    rev = version;
+    hash = "sha256-c4NWkQ/QvlUo1YoV2s7rWB6wQskAP5Qp1WVM23wvV3c=";
+  };
+
+  cargoHash = "sha256-Wu1mm+yJw2SddddxC5NfnMWLr+dplnRxH3AJ1/mTAKM=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "Lightweight slowloris (HTTP DoS) tool";
+    homepage = "https://github.com/MJVL/slowlorust";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "slowlorust";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/smartdns/default.nix b/nixpkgs/pkgs/tools/networking/smartdns/default.nix
new file mode 100644
index 000000000000..e7355eb07a75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/smartdns/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, openssl, testers, smartdns }:
+
+stdenv.mkDerivation rec {
+  pname = "smartdns";
+  version = "43";
+
+  src = fetchFromGitHub {
+    owner = "pymumu";
+    repo = pname;
+    rev = "Release${version}";
+    hash = "sha256-gwbyP2duUvZafMclPwP4uZh7A7OzAvSyqjl6Eg1N6Gg=";
+  };
+
+  buildInputs = [ openssl ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "SYSTEMDSYSTEMUNITDIR=${placeholder "out"}/lib/systemd/system"
+    "RUNSTATEDIR=/run"
+    # by default it is the build time... weird... https://github.com/pymumu/smartdns/search?q=ver
+    "VER=${version}"
+  ];
+
+  installFlags = [ "SYSCONFDIR=${placeholder "out"}/etc" ];
+
+  passthru.tests = {
+    version = testers.testVersion { package = smartdns; };
+  };
+
+  meta = with lib; {
+    description =
+      "A local DNS server to obtain the fastest website IP for the best Internet experience";
+    longDescription = ''
+      SmartDNS is a local DNS server. SmartDNS accepts DNS query requests from local clients, obtains DNS query results from multiple upstream DNS servers, and returns the fastest access results to clients.
+      Avoiding DNS pollution and improving network access speed, supports high-performance ad filtering.
+      Unlike dnsmasq's all-servers, smartdns returns the fastest access resolution.
+    '';
+    homepage = "https://github.com/pymumu/smartdns";
+    maintainers = [ maintainers.lexuge ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "smartdns";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/smokeping/default.nix b/nixpkgs/pkgs/tools/networking/smokeping/default.nix
new file mode 100644
index 000000000000..29996a1c7243
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/smokeping/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, fetchpatch, fping, rrdtool, perlPackages, autoreconfHook, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "smokeping";
+  version = "2.8.2";
+  src = fetchurl {
+    url = "https://oss.oetiker.ch/smokeping/pub/smokeping-${version}.tar.gz";
+    sha256 = "sha256-KeYRGLRV4juWmtpfjiq0MtPi74fUr+LIbeSgPXGItuo=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/smokeping/raw/4ebf1921706a5a29c758fdce2f59cc35652c944a/f/smokeping-2.8.2-no-3rd-party.patch";
+      hash = "sha256-97rQ4m9HHl3lIpQyjZvu+gZSrNIB2pckxmopCQAQPp0=";
+    })
+  ];
+
+  propagatedBuildInputs = [ rrdtool ] ++
+    (with perlPackages; [ perl FCGI CGI CGIFast ConfigGrammar DigestHMAC NetTelnet
+      NetOpenSSH NetSNMP LWP IOTty fping NetDNS perlldap ]);
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  postInstall = ''
+    mv $out/htdocs/smokeping.fcgi.dist $out/htdocs/smokeping.fcgi
+  '';
+
+  passthru.tests.smokeping = nixosTests.smokeping;
+
+  meta = {
+    description = "Network latency collector";
+    homepage = "https://oss.oetiker.ch/smokeping";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.erictapen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/snabb/default.nix b/nixpkgs/pkgs/tools/networking/snabb/default.nix
new file mode 100644
index 000000000000..16c6a40bb347
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/snabb/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "snabb";
+  version = "2023.10";
+
+  src = fetchFromGitHub {
+    owner = "snabbco";
+    repo = "snabb";
+    rev = "v${version}";
+    sha256 = "sha256-oCHPRqJ1zm2Ple3Ck9nMyRC7PgKaF1RuswzdGBVU2C8=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp src/snabb $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/SnabbCo/snabbswitch";
+    description = "Simple and fast packet networking toolkit";
+    longDescription = ''
+      Snabb Switch is a LuaJIT-based toolkit for writing high-speed
+      packet networking code (such as routing, switching, firewalling,
+      and so on). It includes both a scripting inteface for creating
+      new applications and also some built-in applications that are
+      ready to run.
+      It is especially intended for ISPs and other network operators.
+    '';
+    platforms = [ "x86_64-linux" ];
+    license = licenses.asl20;
+    maintainers = [ maintainers.lukego ];
+    mainProgram = "snabb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/snet/default.nix b/nixpkgs/pkgs/tools/networking/snet/default.nix
new file mode 100644
index 000000000000..47f70a21d33b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/snet/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "snet";
+  version = "unstable-2021-11-26";
+
+  src = fetchFromGitHub {
+    owner = "monsterxx03";
+    repo = "snet";
+    rev = "89089b55277ce3e21e2ed79a9d307f2ecc62c6db";
+    sha256 = "sha256-lTbygQRABv+Dp4i7nDgXYqi4pwU2rtLNfpgtBgsq+7Y=";
+  };
+
+  vendorHash = "sha256-dubmCLeD8Fwe1msfLN+5WzdbFkfTRnZDU3F49gjWTS4=";
+
+  meta = with lib; {
+    description = "Transparent proxy works on linux desktop, MacOS, router";
+    homepage = "https://github.com/monsterxx03/snet";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azuwis ];
+    mainProgram = "snet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/snmpcheck/default.nix b/nixpkgs/pkgs/tools/networking/snmpcheck/default.nix
new file mode 100644
index 000000000000..b365ccc5f191
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/snmpcheck/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchurl, ruby }:
+
+let
+  rubyEnv = ruby.withPackages (ps: [ ps.snmp ]);
+in
+stdenv.mkDerivation rec {
+  pname = "snmpcheck";
+  version = "1.9";
+  src = fetchurl {
+    url = "http://www.nothink.org/codes/snmpcheck/snmpcheck-${version}.rb";
+    sha256 = "sha256-9xkLqbgxU1uykx+M9QsbPAH8OI/Cqn9uw6ALe23Lbq0=";
+    executable = true;
+  };
+
+  dontUnpack = true;
+
+  buildInputs = [ rubyEnv.wrappedRuby ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src $out/bin/snmp-check
+  '';
+
+  meta = with lib; {
+    description = "SNMP enumerator";
+    homepage = "http://www.nothink.org/codes/snmpcheck/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ elohmeier ];
+    mainProgram = "snmp-check";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/snowflake/default.nix b/nixpkgs/pkgs/tools/networking/snowflake/default.nix
new file mode 100644
index 000000000000..cac350ff597a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/snowflake/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitLab }:
+
+buildGoModule rec {
+  pname = "snowflake";
+  version = "2.9.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.torproject.org";
+    group = "tpo";
+    owner = "anti-censorship/pluggable-transports";
+    repo = "snowflake";
+    rev = "v${version}";
+    sha256 = "sha256-h8T8kc7idZcfepVjhpX+0RIypFDp2nMt3ZZ61YmeLQk=";
+  };
+
+  vendorHash = "sha256-TSB0UDVD9ijOFgOmIh7ppnKJn/VWzejeDcb1+30+Mnc=";
+
+  meta = with lib; {
+    description = "System to defeat internet censorship";
+    homepage = "https://snowflake.torproject.org/";
+    changelog = "https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/raw/v${version}/ChangeLog";
+    maintainers = with maintainers; [ bbjubjub yayayayaka ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/socat/default.nix b/nixpkgs/pkgs/tools/networking/socat/default.nix
new file mode 100644
index 000000000000..58d33bc886f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/socat/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchurl
+, nettools
+, openssl
+, readline
+, stdenv
+, which
+, buildPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "socat";
+  version = "1.8.0.0";
+
+  src = fetchurl {
+    url = "http://www.dest-unreach.org/socat/download/${pname}-${version}.tar.bz2";
+    hash = "sha256-4d5oPdIu4OOmxrv/Jpq+GKsMnX62UCBPElFVuQBfrKc=";
+  };
+
+  postPatch = ''
+    patchShebangs test.sh
+    substituteInPlace test.sh \
+      --replace /bin/rm rm \
+      --replace /sbin/ifconfig ifconfig
+  '';
+
+  buildInputs = [ openssl readline ];
+
+  hardeningEnable = [ "pie" ];
+
+  enableParallelBuilding = true;
+
+  nativeCheckInputs = [ which nettools ];
+  doCheck = false; # fails a bunch, hangs
+
+  passthru.tests = lib.optionalAttrs stdenv.buildPlatform.isLinux {
+    musl = buildPackages.pkgsMusl.socat;
+  };
+
+  meta = with lib; {
+    description = "Utility for bidirectional data transfer between two independent data channels";
+    homepage = "http://www.dest-unreach.org/socat/";
+    platforms = platforms.unix;
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ eelco ];
+    mainProgram = "socat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sockdump/default.nix b/nixpkgs/pkgs/tools/networking/sockdump/default.nix
new file mode 100644
index 000000000000..95920a91eef3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sockdump/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, python3, bcc }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "sockdump";
+  version = "unstable-2023-09-16";
+
+  src = fetchFromGitHub {
+    owner = "mechpen";
+    repo = pname;
+    rev = "713759e383366feae76863881e851a6411c73b68";
+    hash = "sha256-q6jdwFhl2G9o2C0BVU6Xz7xizO00yaSQ2KSR/z4fixY=";
+  };
+
+  propagatedBuildInputs = [ bcc ];
+
+  format = "other"; # none
+
+  installPhase = "install -D ${pname}.py $out/bin/${pname}";
+
+  meta = src.meta // {
+    description = "Dump unix domain socket traffic with bpf";
+    license = lib.licenses.unlicense;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sockperf/default.nix b/nixpkgs/pkgs/tools/networking/sockperf/default.nix
new file mode 100644
index 000000000000..ed071322f2f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sockperf/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, doxygen
+, enableTool ? false
+, enableTest ? false }:
+
+stdenv.mkDerivation rec {
+  pname = "sockperf";
+  version = "3.10";
+
+  src = fetchFromGitHub {
+    owner = "Mellanox";
+    repo = "sockperf";
+    rev = version;
+    sha256 = "sha256-VvxL/bcn69uL7CBpDu4qwbKZwlC4N/kNeRX4k3UzxPI=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook doxygen ];
+
+  configureFlags = [ "--enable-doc" ]
+    ++ lib.optional enableTest "--enable-test"
+    ++ lib.optional enableTool "--enable-tool";
+
+  doCheck = true;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Network Benchmarking Utility";
+    homepage = "https://github.com/Mellanox/sockperf";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.all;
+    mainProgram = "sockperf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/softnet/default.nix b/nixpkgs/pkgs/tools/networking/softnet/default.nix
new file mode 100644
index 000000000000..b1a9cb3a97f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/softnet/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "softnet";
+  version = "0.7.1";
+
+  src = fetchurl {
+    url = "https://github.com/cirruslabs/softnet/releases/download/${finalAttrs.version}/softnet.tar.gz";
+    sha256 = "1g274x524xc85hfzxi3vb4xp720bjgk740bp6hc92d1ikmp0b664";
+  };
+  sourceRoot = ".";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D softnet $out/bin/softnet
+    install -Dm444 -t $out/share/softnet README.md LICENSE
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Software networking with isolation for Tart";
+    homepage = "https://github.com/cirruslabs/softnet";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = [ "aarch64-darwin" ];
+    # Source build will be possible after darwin SDK 12.0 bump
+    # https://github.com/NixOS/nixpkgs/pull/229210
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/speedtest-go/default.nix b/nixpkgs/pkgs/tools/networking/speedtest-go/default.nix
new file mode 100644
index 000000000000..9570442345ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/speedtest-go/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "speedtest-go";
+  version = "1.6.10";
+
+  src = fetchFromGitHub {
+    owner = "showwin";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Uk7ZKGxyK4b7P87qN7rGgj4oXJgYhH4NzZa+4fOkh14=";
+  };
+
+  vendorHash = "sha256-wQqAX7YuxxTiMWmV9LRoXunGMMzs12UyHbf4VvbQF1E=";
+
+  excludedPackages = [ "example" ];
+
+  # test suite requires network
+  doCheck = false;
+
+  meta = with lib; {
+    description = "CLI and Go API to Test Internet Speed using speedtest.net";
+    homepage = "https://github.com/showwin/speedtest-go";
+    changelog = "https://github.com/showwin/speedtest-go/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aleksana ];
+    mainProgram = "speedtest-go";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/speedtest-rs/default.nix b/nixpkgs/pkgs/tools/networking/speedtest-rs/default.nix
new file mode 100644
index 000000000000..22f4fba0c01a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/speedtest-rs/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, openssl
+, pkg-config
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "speedtest-rs";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "nelsonjchen";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-JKthXrosqDZh6CWEqT08h3ySPZulitDol7lX3Eo7orM=";
+  };
+
+  buildInputs = [ openssl ] ++
+    lib.optionals stdenv.isDarwin [
+      darwin.apple_sdk.frameworks.Security
+      darwin.apple_sdk.frameworks.SystemConfiguration
+    ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  cargoHash = "sha256-kUXHC/qXgukaUqaBykXB2ZWmfQEjzJuIyemr1ogVX1U=";
+
+  meta = with lib; {
+    description = "Command line internet speedtest tool written in rust";
+    homepage = "https://github.com/nelsonjchen/speedtest-rs";
+    changelog = "https://github.com/nelsonjchen/speedtest-rs/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ GaetanLepage ];
+    mainProgram = "speedtest-rs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/spiped/default.nix b/nixpkgs/pkgs/tools/networking/spiped/default.nix
new file mode 100644
index 000000000000..233da21ec93e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/spiped/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, openssl, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "spiped";
+  version = "1.6.2";
+
+  src = fetchurl {
+    url    = "https://www.tarsnap.com/spiped/${pname}-${version}.tgz";
+    sha256 = "sha256-BdRofRLRHX+YiNQ/PYDFQbdyHJhwONCF9xyRuwYgRWc=";
+  };
+
+  buildInputs = [ openssl ];
+
+  postPatch = ''
+    substituteInPlace libcperciva/cpusupport/Build/cpusupport.sh \
+      --replace "dirname" "${coreutils}/bin/dirname" \
+      --replace "2>/dev/null" "2>stderr.log"
+
+    substituteInPlace libcperciva/POSIX/posix-l.sh       \
+      --replace "rm" "${coreutils}/bin/rm"   \
+      --replace "2>/dev/null" "2>stderr.log"
+   '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin $out/share/man/man1
+    make install BINDIR=$out/bin MAN1DIR=$out/share/man/man1
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Utility for secure encrypted channels between sockets";
+    homepage    = "https://www.tarsnap.com/spiped.html";
+    license     = lib.licenses.bsd2;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/spoof-mac/default.nix b/nixpkgs/pkgs/tools/networking/spoof-mac/default.nix
new file mode 100644
index 000000000000..3b7bbd0d52a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/spoof-mac/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildPythonPackage, fetchFromGitHub, docopt }:
+
+buildPythonPackage rec {
+  pname = "spoof-mac";
+  version = "unstable-2018-01-27";
+
+  src = fetchFromGitHub {
+    owner = "feross";
+    repo = "SpoofMAC";
+    rev = "2cfc796150ef48009e9b765fe733e37d82c901e0";
+    sha256 = "sha256-Qiu0URjUyx8QDVQQUFGxPax0J80e2m4+bPJeqFoKxX8=";
+  };
+
+  propagatedBuildInputs = [ docopt ];
+
+  # No tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "spoofmac" ];
+
+  meta = with lib; {
+    description = "Change your MAC address for debugging purposes";
+    homepage = "https://github.com/feross/SpoofMAC";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/spoofer/default.nix b/nixpkgs/pkgs/tools/networking/spoofer/default.nix
new file mode 100644
index 000000000000..bf969ae5d1f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/spoofer/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, pkg-config, protobuf, openssl, libpcap, traceroute
+, withGUI ? false, qt5 }:
+
+let inherit (lib) optional;
+in
+
+stdenv.mkDerivation rec {
+  pname = "spoofer";
+  version = "1.4.12";
+
+  src = fetchurl {
+    url = "https://www.caida.org/projects/spoofer/downloads/${pname}-${version}.tar.gz";
+    sha256 = "sha256-3ljCPmazKz0fHer2yN6baFLu425Dsr9ppdjr2Iv5YJ8=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl protobuf libpcap traceroute ]
+                ++ optional withGUI qt5.qtbase ;
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    homepage = "https://www.caida.org/projects/spoofer";
+    description = "Assess and report on deployment of source address validation";
+    longDescription = ''
+      Spoofer is a new client-server system for Windows, MacOS, and
+      UNIX-like systems that periodically tests a network's ability to
+      both send and receive packets with forged source IP addresses
+      (spoofed packets). This can be used to produce reports and
+      visualizations to inform operators, response teams, and policy
+      analysts. The system measures different types of forged
+      addresses, including private and neighboring addresses.  The
+      test results allows to analyze characteristics of networks
+      deploying source address validation (e.g., network location,
+      business type).
+    '';
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ leenaars];
+    mainProgram = "spoofer-prober";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/srelay/arm.patch b/nixpkgs/pkgs/tools/networking/srelay/arm.patch
new file mode 100644
index 000000000000..f56f2c0f2f0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/srelay/arm.patch
@@ -0,0 +1,12 @@
+diff -ru srelay-0.4.8b4.orig/configure srelay-0.4.8b4/configure
+--- srelay-0.4.8b4.orig/configure	2010-12-21 01:11:14.000000000 +1100
++++ srelay-0.4.8b4/configure	2016-06-22 09:03:42.250000345 +1000
+@@ -1875,7 +1875,7 @@
+ 	;;
+   linux*)
+ 	case "$host_cpu" in
+-	  i*86|mips*|powerpc*|sparc*|x86_64*)
++	  i*86|mips*|powerpc*|sparc*|x86_64*|arm*)
+ 	    OS=LINUX
+ 	    cat >>confdefs.h <<\_ACEOF
+ #define LINUX 1
diff --git a/nixpkgs/pkgs/tools/networking/srelay/default.nix b/nixpkgs/pkgs/tools/networking/srelay/default.nix
new file mode 100644
index 000000000000..784aca8fe431
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/srelay/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, libxcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "srelay";
+  version = "0.4.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/socks-relay/socks-relay/srelay-${version}/srelay-${version}.tar.gz";
+    sha256 = "1sn6005aqyfvrlkm5445cyyaj6h6wfyskfncfmds55x34hfyxpvl";
+  };
+
+  patches = [ ./arm.patch ];
+
+  buildInputs = [ libxcrypt ];
+
+  installPhase = "install -D srelay $out/bin/srelay";
+
+  meta = {
+    description = "A SOCKS proxy and relay";
+    homepage = "http://socks-relay.sourceforge.net/";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.bsd3;
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isLinux && stdenv.isAarch64;
+    mainProgram = "srelay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ssh-agents/default.nix b/nixpkgs/pkgs/tools/networking/ssh-agents/default.nix
new file mode 100644
index 000000000000..f9414d9835d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ssh-agents/default.nix
@@ -0,0 +1,44 @@
+{ fetchFromGitHub
+, lib
+, stdenvNoCC
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "ssh-agents";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "kalbasit";
+    repo = "ssh-agents";
+    rev = "v${version}";
+    sha256 = "1l09zy87033v7hd17lhkxikwikqz5nj9x6c2w80rqpad4lp9ihwz";
+  };
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "ssh-agents capable of spawning and maintaining multiple ssh-agents across terminals";
+    longDescription = ''
+      The SSH agent is usually spawned by running eval $(ssh-agent), however this
+      spawns a new SSH agent at every invocation. This project provides an
+      ssh-agent wrapper called ssh-agents that is capable of spawning an SSH
+      agent and caching the environment variables for later invocation.
+
+      Features
+      - One SSH agent across all terminals
+      - Add all un-encrypted SSH keys to the agent upon spawning. Please note
+        that encrypted SSH keys can only be added via ssh-add after having
+        started the agent.
+      - Ability to have different keys in different agents for security purposes.
+      - Multiple SSH agents
+      - To use multi-SSH agents, start ssh agent with the --name flag. The
+        given name is expected to be a folder under ~/.ssh/name containing the
+        keys to include in the agent.
+    '';
+    homepage = "https://github.com/kalbasit/ssh-agents";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.unix;
+    mainProgram = "ssh-agents";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ssh-ident/default.nix b/nixpkgs/pkgs/tools/networking/ssh-ident/default.nix
new file mode 100644
index 000000000000..3886828c5221
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ssh-ident/default.nix
@@ -0,0 +1,32 @@
+{ stdenvNoCC, lib, fetchFromGitHub, python3, openssh}:
+
+stdenvNoCC.mkDerivation {
+  pname = "ssh-ident";
+  version = "2016-04-21";
+  src = fetchFromGitHub  {
+    owner = "ccontavalli";
+    repo = "ssh-ident";
+    rev = "ebf8282728211dc4448d50f7e16e546ed03c22d2";
+    sha256 = "1jf19lz1gwn7cyp57j8d4zs5bq13iw3kw31m8nvr8h6sib2pf815";
+  };
+
+  postPatch = ''
+    substituteInPlace ssh-ident \
+      --replace 'ssh-agent >' '${openssh}/bin/ssh-agent >'
+  '';
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 755 ssh-ident $out/bin/ssh-ident
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ccontavalli/ssh-ident";
+    description = "Start and use ssh-agent and load identities as necessary";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ telotortium ];
+    platforms = with platforms; unix;
+    mainProgram = "ssh-ident";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ssh-key-confirmer/default.nix b/nixpkgs/pkgs/tools/networking/ssh-key-confirmer/default.nix
new file mode 100644
index 000000000000..408719f74653
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ssh-key-confirmer/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "ssh-key-confirmer";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "benjojo";
+    repo = "ssh-key-confirmer";
+    rev = "v${version}";
+    hash = "sha256-CXDjm8PMdCTwHnZWa0fYKel7Rmxq0XBWkfLmoVuSkKM=";
+  };
+
+  vendorHash = "sha256-CkfZ9dImjdka98eu4xuWZ6Xed7WX6DnXw81Ih7bhPm0=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Test ssh login key acceptance without having the private key";
+    homepage = "https://github.com/benjojo/ssh-key-confirmer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ oxzi ];
+    mainProgram = "ssh-key-confirmer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sshed/default.nix b/nixpkgs/pkgs/tools/networking/sshed/default.nix
new file mode 100644
index 000000000000..ac221f49ed2b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sshed/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "sshed";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "trntv";
+    repo = pname;
+    rev = version;
+    hash = "sha256-y8IQzOGs78T44jLcNNjPlfopyptX3Mhv2LdawqS1T+U=";
+  };
+
+  vendorHash = "sha256-21Vh5Zaja5rx9RVCTFQquNvMNvaUlUV6kfhkIvXwbVw=";
+
+  postFixup = ''
+    mv $out/bin/cmd $out/bin/sshed
+  '';
+
+  meta = with lib; {
+    description = "ssh config editor and bookmarks manager";
+    homepage = "https://github.com/trntv/sshed";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ocfox ];
+    mainProgram = "sshed";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sshoogr/default.nix b/nixpkgs/pkgs/tools/networking/sshoogr/default.nix
new file mode 100644
index 000000000000..e20978c277d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sshoogr/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchzip, jdk, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "sshoogr";
+  version = "0.9.26";
+
+  src = fetchzip {
+    url = "mirror://maven/com/aestasit/infrastructure/${pname}/${pname}/${version}/${pname}-${version}.zip";
+    sha256 = "134qlx90y82g1rfxhyn12z9r2imm1l3fz09hrrn3pgcdcq5jz2s1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    rm bin/sshoogr.bat
+    cp -r . $out
+    wrapProgram $out/bin/sshoogr \
+      --prefix JAVA_HOME : ${jdk}
+  '';
+
+  meta = with lib; {
+    description = ''
+      A Groovy-based DSL for working with remote SSH servers
+    '';
+    longDescription = ''
+      The sshoogr (pronounced [ʃʊgə]) is a Groovy-based DSL library for working
+      with remote servers through SSH. The DSL allows: connecting, executing
+      remote commands, copying files and directories, creating tunnels in a
+      simple and concise way.
+    '';
+    homepage = "https://github.com/aestasit/sshoogr";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sshpass/default.nix b/nixpkgs/pkgs/tools/networking/sshpass/default.nix
new file mode 100644
index 000000000000..6818fe33a94d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sshpass/default.nix
@@ -0,0 +1,20 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "sshpass";
+  version = "1.10";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sshpass/sshpass-${version}.tar.gz";
+    sha256 = "sha256-rREGwgPLtWGFyjutjGzK/KO0BkaWGU2oefgcjXvf7to=";
+  };
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/sshpass/";
+    description = "Non-interactive ssh password auth";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.madjar ];
+    platforms = platforms.unix;
+    mainProgram = "sshpass";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sshping/default.nix b/nixpkgs/pkgs/tools/networking/sshping/default.nix
new file mode 100644
index 000000000000..608c8125f0d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sshping/default.nix
@@ -0,0 +1,32 @@
+{lib, stdenv, fetchFromGitHub, libssh}:
+
+stdenv.mkDerivation rec {
+  pname = "sshping";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "spook";
+    repo = "sshping";
+    rev = "v${version}";
+    sha256 = "0p1fvpgrsy44yvj44xp9k9nf6z1fh0sqcjvy75pcb9f5icgms815";
+  };
+
+  buildInputs = [ libssh ];
+
+  buildPhase = ''
+      $CXX -Wall -I ext/ -o bin/sshping src/sshping.cxx -lssh
+    '';
+
+  installPhase = ''
+      install -Dm755 bin/sshping $out/bin/sshping
+    '';
+
+  meta = with lib; {
+    homepage = "https://github.com/spook/sshping";
+    description = "Measure character-echo latency and bandwidth for an interactive ssh session";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jqueiroz ];
+    mainProgram = "sshping";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ssl-proxy/default.nix b/nixpkgs/pkgs/tools/networking/ssl-proxy/default.nix
new file mode 100644
index 000000000000..da710379e5fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ssl-proxy/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ssl-proxy";
+  version = "0.2.7-unstable-2024-02-05";
+
+  src = fetchFromGitHub {
+    owner = "suyashkumar";
+    repo = "ssl-proxy";
+    rev = "6b0f364be9bbf0de46520a6b85d30792fcc3cb80";
+    hash = "sha256-tYAsz99YCOOEyxPp8Yp+PTn+q2Edir+xy4Vs0yyHWOQ=";
+  };
+
+  vendorHash = "sha256-PQ465+4AcH0wP4z2GsGdf/yABaGezaPq+eM0U2lu13o=";
+
+  checkTarget = "test";
+
+  meta = with lib; {
+    homepage = "https://github.com/suyashkumar/ssl-proxy";
+    description = "Simple single-command SSL reverse proxy with autogenerated certificates (LetsEncrypt, self-signed)";
+    longDescription = ''
+      A handy and simple way to add SSL to your thing running on a VM--be it your personal jupyter
+      notebook or your team jenkins instance. ssl-proxy autogenerates SSL certs and proxies
+      HTTPS traffic to an existing HTTP server in a single command.
+    '';
+    license = licenses.mit;
+    mainProgram = "ssl-proxy";
+    maintainers = [ maintainers.konst-aa ];
+    platforms = platforms.linux ++ platforms.darwin ++ platforms.windows;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ssldump/default.nix b/nixpkgs/pkgs/tools/networking/ssldump/default.nix
new file mode 100644
index 000000000000..a855315a565c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ssldump/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, autoreconfHook
+, fetchFromGitHub
+, json_c
+, libnet
+, libpcap
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ssldump";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "adulau";
+    repo = "ssldump";
+    rev = "v${version}";
+    sha256 = "sha256-BFE42wWqnGGTTjwej3LkH4XW2M4jP7XNSKHLnF2GFJo=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    json_c
+    libnet
+    libpcap
+    openssl
+  ];
+
+  prePatch = ''
+    sed -i -e 's|#include.*net/bpf.h|#include <pcap/bpf.h>|' \
+      base/pcap-snoop.c
+  '';
+
+  configureFlags = [
+    "--with-pcap-lib=${libpcap}/lib"
+    "--with-pcap-inc=${libpcap}/include"
+    "--with-openssl-lib=${openssl}/lib"
+    "--with-openssl-inc=${openssl}/include"
+  ];
+
+  meta = with lib; {
+    description = "An SSLv3/TLS network protocol analyzer";
+    homepage = "https://ssldump.sourceforge.net";
+    license = "BSD-style";
+    maintainers = with maintainers; [ aycanirican ];
+    platforms = platforms.unix;
+    mainProgram = "ssldump";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sslsplit/default.nix b/nixpkgs/pkgs/tools/networking/sslsplit/default.nix
new file mode 100644
index 000000000000..ca8a96d3321f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sslsplit/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, openssl, libevent, libpcap, libnet, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "sslsplit";
+  version = "0.5.5";
+
+  src = fetchFromGitHub {
+    owner = "droe";
+    repo = pname;
+    rev = version;
+    sha256 = "1p43z9ln5rbc76v0j1k3r4nhvfw71hq8jzsallb54z9hvwfvqp3l";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-openssl-3-build.patch";
+      url = "https://github.com/droe/sslsplit/commit/e17de8454a65d2b9ba432856971405dfcf1e7522.patch";
+      hash = "sha256-sEwP7f2PSqXdMqLub9zrfQgH8I4oe9klVPzNpJjrPJ8=";
+    })
+  ];
+
+  buildInputs = [ openssl libevent libpcap libnet zlib ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "OPENSSL_BASE=${openssl.dev}"
+    "LIBEVENT_BASE=${libevent.dev}"
+    "LIBPCAP_BASE=${libpcap}"
+    "LIBNET_BASE=${libnet}"
+  ];
+
+  meta = with lib; {
+    description = "Transparent SSL/TLS interception";
+    homepage = "https://www.roe.ch/SSLsplit";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ contrun ];
+    license = with licenses; [ bsd2 mit unlicense free ];
+    mainProgram = "sslsplit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sstp/default.nix b/nixpkgs/pkgs/tools/networking/sstp/default.nix
new file mode 100644
index 000000000000..72745114a26e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sstp/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitLab, pkg-config, ppp, libevent, openssl, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "sstp-client";
+  version = "unstable-2023-03-25";
+
+  src = fetchFromGitLab {
+    owner = "sstp-project";
+    repo = pname;
+    rev = "3f7835df9ac5e84729903ca536cf65e4a7b04c6c";
+    hash = "sha256-8VF5thSABqf5SXEDCa+0dyDt7kVrQcs6deWLlYWM8dg=";
+  };
+
+  postPatch = ''
+    sed 's,/usr/sbin/pppd,${ppp}/sbin/pppd,' -i src/sstp-pppd.c
+    sed "s,sstp-pppd-plugin.so,$out/lib/pppd/sstp-pppd-plugin.so," -i src/sstp-pppd.c
+  '';
+
+  configureFlags = [
+    "--with-openssl=${openssl.dev}"
+    "--with-runtime-dir=/run/sstpc"
+    "--with-pppd-plugin-dir=$(out)/lib/pppd"
+  ];
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+
+  buildInputs = [ libevent openssl ppp ];
+
+  meta = with lib; {
+    description = "SSTP client for Linux";
+    homepage = "https://sstp-client.sourceforge.net/";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2Plus;
+    mainProgram = "sstpc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/stevenblack-blocklist/default.nix b/nixpkgs/pkgs/tools/networking/stevenblack-blocklist/default.nix
new file mode 100644
index 000000000000..b95d0537a8dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/stevenblack-blocklist/default.nix
@@ -0,0 +1,20 @@
+{ lib, fetchFromGitHub }:
+
+let
+  version = "3.14.44";
+in
+fetchFromGitHub {
+  name = "stevenblack-blocklist-${version}";
+
+  owner = "StevenBlack";
+  repo = "hosts";
+  rev = version;
+  sha256 = "sha256-LlTyhtx3DbtsQdkl6J7ktj/zLJULFqQWq5sCqKPX71g=";
+
+  meta = with lib; {
+    description = "Unified hosts file with base extensions";
+    homepage = "https://github.com/StevenBlack/hosts";
+    license = licenses.mit;
+    maintainers = with maintainers; [ moni ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/strongswan/default.nix b/nixpkgs/pkgs/tools/networking/strongswan/default.nix
new file mode 100644
index 000000000000..8974e1b152af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/strongswan/default.nix
@@ -0,0 +1,111 @@
+{ lib, stdenv, fetchFromGitHub
+, pkg-config, autoreconfHook, perl, gperf, bison, flex
+, gmp, python3, iptables, ldns, unbound, openssl, pcsclite, glib
+, openresolv
+, systemd, pam
+, curl
+, enableTNC            ? false, trousers, sqlite, libxml2
+, enableNetworkManager ? false, networkmanager
+, darwin
+, nixosTests
+}:
+
+# Note on curl support: If curl is built with gnutls as its backend, the
+# strongswan curl plugin may break.
+# See https://wiki.strongswan.org/projects/strongswan/wiki/Curl for more info.
+
+stdenv.mkDerivation rec {
+  pname = "strongswan";
+  version = "5.9.13"; # Make sure to also update <nixpkgs/nixos/modules/services/networking/strongswan-swanctl/swanctl-params.nix> when upgrading!
+
+  src = fetchFromGitHub {
+    owner = "strongswan";
+    repo = "strongswan";
+    rev = version;
+    hash = "sha256-uI7Ibdx6I+gd83KJ24ERmpJSMNIbsk10PszdLxpcXcQ=";
+  };
+
+  dontPatchELF = true;
+
+  nativeBuildInputs = [ pkg-config autoreconfHook perl gperf bison flex ];
+  buildInputs =
+    [ curl gmp python3 ldns unbound openssl pcsclite ]
+    ++ lib.optionals enableTNC [ trousers sqlite libxml2 ]
+    ++ lib.optionals stdenv.isLinux [ systemd.dev pam iptables ]
+    ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ SystemConfiguration ])
+    ++ lib.optionals enableNetworkManager [ networkmanager glib ];
+
+  patches = [
+    ./ext_auth-path.patch
+    ./firewall_defaults.patch
+    ./updown-path.patch
+  ];
+
+  postPatch = lib.optionalString stdenv.isLinux ''
+    # glibc-2.26 reorganized internal includes
+    sed '1i#include <stdint.h>' -i src/libstrongswan/utils/utils/memory.h
+
+    substituteInPlace src/libcharon/plugins/resolve/resolve_handler.c --replace "/sbin/resolvconf" "${openresolv}/sbin/resolvconf"
+    '';
+
+  configureFlags =
+    [ "--enable-swanctl"
+      "--enable-cmd"
+      "--enable-openssl"
+      "--enable-eap-sim" "--enable-eap-sim-file" "--enable-eap-simaka-pseudonym"
+      "--enable-eap-simaka-reauth" "--enable-eap-identity" "--enable-eap-md5"
+      "--enable-eap-gtc" "--enable-eap-aka" "--enable-eap-aka-3gpp2"
+      "--enable-eap-mschapv2" "--enable-eap-radius" "--enable-xauth-eap" "--enable-ext-auth"
+      "--enable-acert"
+      "--enable-pkcs11" "--enable-eap-sim-pcsc" "--enable-dnscert" "--enable-unbound"
+      "--enable-chapoly"
+      "--enable-curl" ]
+    ++ lib.optionals stdenv.isLinux [
+      "--enable-farp" "--enable-dhcp"
+      "--enable-systemd" "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+      "--enable-xauth-pam"
+      "--enable-forecast"
+      "--enable-connmark"
+      "--enable-af-alg" ]
+    ++ lib.optionals stdenv.isx86_64 [ "--enable-aesni" "--enable-rdrand" ]
+    ++ lib.optional (stdenv.hostPlatform.system == "i686-linux") "--enable-padlock"
+    ++ lib.optionals enableTNC [
+         "--disable-gmp" "--disable-aes" "--disable-md5" "--disable-sha1" "--disable-sha2" "--disable-fips-prf"
+         "--enable-eap-tnc" "--enable-eap-ttls" "--enable-eap-dynamic" "--enable-tnccs-20"
+         "--enable-tnc-imc" "--enable-imc-os" "--enable-imc-attestation"
+         "--enable-tnc-imv" "--enable-imv-attestation"
+         "--enable-tnc-ifmap" "--enable-tnc-imc" "--enable-tnc-imv"
+         "--with-tss=trousers"
+         "--enable-aikgen"
+         "--enable-sqlite" ]
+    ++ lib.optionals enableNetworkManager [
+         "--enable-nm"
+         "--with-nm-ca-dir=/etc/ssl/certs" ]
+    # Taken from: https://wiki.strongswan.org/projects/strongswan/wiki/MacOSX
+    ++ lib.optionals stdenv.isDarwin [
+      "--disable-systemd"
+      "--disable-xauth-pam"
+      "--disable-kernel-netlink"
+      "--enable-kernel-pfkey"
+      "--enable-kernel-pfroute"
+      "--enable-kernel-libipsec"
+      "--enable-osx-attr"
+      "--disable-scripts"
+    ];
+
+  postInstall = ''
+    # this is needed for l2tp
+    echo "include /etc/ipsec.secrets" >> $out/etc/ipsec.secrets
+  '';
+
+  NIX_LDFLAGS = lib.optionalString stdenv.cc.isGNU "-lgcc_s" ;
+
+  passthru.tests = { inherit (nixosTests) strongswan-swanctl; };
+
+  meta = with lib; {
+    description = "OpenSource IPsec-based VPN Solution";
+    homepage = "https://www.strongswan.org";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/strongswan/ext_auth-path.patch b/nixpkgs/pkgs/tools/networking/strongswan/ext_auth-path.patch
new file mode 100644
index 000000000000..397537ad8d84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/strongswan/ext_auth-path.patch
@@ -0,0 +1,13 @@
+Index: strongswan-5.2.1/src/libcharon/plugins/ext_auth/ext_auth_listener.c
+===================================================================
+--- strongswan-5.2.1.orig/src/libcharon/plugins/ext_auth/ext_auth_listener.c
++++ strongswan-5.2.1/src/libcharon/plugins/ext_auth/ext_auth_listener.c
+@@ -101,6 +101,8 @@ METHOD(listener_t, authorize, bool,
+ 
+ 		*success = FALSE;
+ 
++		push_env(envp, countof(envp), "PATH=%s", getenv("PATH"));
++
+ 		push_env(envp, countof(envp), "IKE_UNIQUE_ID=%u",
+ 				 ike_sa->get_unique_id(ike_sa));
+ 		push_env(envp, countof(envp), "IKE_NAME=%s",
diff --git a/nixpkgs/pkgs/tools/networking/strongswan/firewall_defaults.patch b/nixpkgs/pkgs/tools/networking/strongswan/firewall_defaults.patch
new file mode 100644
index 000000000000..12c446c8c9aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/strongswan/firewall_defaults.patch
@@ -0,0 +1,32 @@
+Index: strongswan-5.2.1/src/starter/confread.c
+===================================================================
+--- strongswan-5.2.1.orig/src/starter/confread.c
++++ strongswan-5.2.1/src/starter/confread.c
+@@ -43,7 +43,7 @@
+ static const char ike_defaults[] = "aes128-sha1-modp2048,3des-sha1-modp1536";
+ static const char esp_defaults[] = "aes128-sha1,3des-sha1";
+ 
+-static const char firewall_defaults[] = IPSEC_SCRIPT " _updown iptables";
++static const char firewall_defaults[] = IPSEC_SBINDIR "/" IPSEC_SCRIPT " _updown iptables";
+ 
+ /**
+  * Provided by GPERF
+Index: strongswan-5.2.1/src/starter/Makefile.am
+===================================================================
+--- strongswan-5.2.1.orig/src/starter/Makefile.am
++++ strongswan-5.2.1/src/starter/Makefile.am
+@@ -18,10 +18,12 @@ AM_CPPFLAGS = \
+ 	-I$(top_srcdir)/src/libhydra \
+ 	-I$(top_srcdir)/src/starter \
+ 	-I$(top_srcdir)/src/stroke \
+-	-DIPSEC_DIR=\"${ipsecdir}\" \
++	-DIPSEC_BINDIR=\"${bindir}\" \
+ 	-DIPSEC_CONFDIR=\"${sysconfdir}\" \
+-	-DIPSEC_PIDDIR=\"${piddir}\" \
++	-DIPSEC_DIR=\"${ipsecdir}\" \
+ 	-DIPSEC_EAPDIR=\"${eapdir}\" \
++	-DIPSEC_PIDDIR=\"${piddir}\" \
++	-DIPSEC_SBINDIR=\"${sbindir}\" \
+ 	-DIPSEC_SCRIPT=\"${ipsec_script}\" \
+ 	-DDEV_RANDOM=\"${random_device}\" \
+ 	-DDEV_URANDOM=\"${urandom_device}\" \
diff --git a/nixpkgs/pkgs/tools/networking/strongswan/updown-path.patch b/nixpkgs/pkgs/tools/networking/strongswan/updown-path.patch
new file mode 100644
index 000000000000..f01da7d7bce6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/strongswan/updown-path.patch
@@ -0,0 +1,26 @@
+Index: strongswan-5.2.1/src/_updown/_updown.in
+===================================================================
+--- strongswan-5.2.1.orig/src/_updown/_updown.in
++++ strongswan-5.2.1/src/_updown/_updown.in
+@@ -125,7 +125,7 @@
+ #
+ 
+ # define a minimum PATH environment in case it is not set
+-PATH="/sbin:/bin:/usr/sbin:/usr/bin:@sbindir@"
++PATH="${PATH:-/sbin:/bin:/usr/sbin:/usr/bin}"
+ export PATH
+ 
+ # uncomment to log VPN connections
+Index: strongswan-5.2.1/src/libcharon/plugins/updown/updown_listener.c
+===================================================================
+--- strongswan-5.2.1.orig/src/libcharon/plugins/updown/updown_listener.c
++++ strongswan-5.2.1/src/libcharon/plugins/updown/updown_listener.c
+@@ -240,6 +240,8 @@ static void invoke_once(private_updown_l
+ 	process_t *process;
+ 	char *envp[128] = {};
+ 
++	push_env(envp, countof(envp), "PATH=%s", getenv("PATH"));
++
+ 	me = ike_sa->get_my_host(ike_sa);
+ 	other = ike_sa->get_other_host(ike_sa);
+ 
diff --git a/nixpkgs/pkgs/tools/networking/stun/default.nix b/nixpkgs/pkgs/tools/networking/stun/default.nix
new file mode 100644
index 000000000000..de4787eca63a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/stun/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname   = "stun";
+  version = "0.97";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/${pname}/stund-${version}.tgz";
+    sha256 = "1mxirnnqfqdwb9x8hfjjsscp6lx3468ph6ddx32l94ir46fbzqc3";
+  };
+
+  srcManpages = fetchurl {
+    url    = "mirror://ubuntu/pool/universe/s/stun/stun_0.97~dfsg-2.debian.tar.xz";
+    name   = "stun-debian.tar.xz";
+    sha256 = "1pr6zrdhia0aafsvywl1hrhlgl00vahp63bw1z2mzvdxri7q88f0";
+  };
+
+  outputs = [ "out" "server" ];
+
+  preBuild = ''
+    tar Jxvf ${srcManpages} debian/manpages
+    gzip -9n debian/manpages/stun.1
+    gzip -9n debian/manpages/stund.8
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $server/bin $out/man/man1 $server/man/man8
+    cp -v client $out/bin/stun
+    cp -v server $server/bin/stund
+    cp -v debian/manpages/stun.1.gz  $out/man/man1
+    cp -v debian/manpages/stund.8.gz $server/man/man8
+  '';
+
+  meta = with lib; {
+    description = "Stun server and test client";
+    homepage    = "https://sourceforge.net/projects/stun/";
+    license     = licenses.vsl10;
+    maintainers = with maintainers; [ marcweber obadz ];
+    platforms   = platforms.linux;
+    mainProgram = "stun";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/stunnel/default.nix b/nixpkgs/pkgs/tools/networking/stunnel/default.nix
new file mode 100644
index 000000000000..219b72854616
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/stunnel/default.nix
@@ -0,0 +1,61 @@
+{
+  fetchurl
+, lib
+, nixosTests
+, openssl
+, stdenv
+, systemd
+, systemdSupport ? lib.meta.availableOn stdenv.hostPlatform systemd
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "stunnel";
+  version = "5.72";
+
+  outputs = [ "out" "doc" "man" ];
+
+  src = fetchurl {
+    url = "https://www.stunnel.org/archive/${lib.versions.major finalAttrs.version}.x/stunnel-${finalAttrs.version}.tar.gz";
+    hash = "sha256-PVMpQSga41MxlzUUTkrbmuSJoQt+MJxYpIFX8I9C6Uk=";
+    # please use the contents of "https://www.stunnel.org/downloads/stunnel-${version}.tar.gz.sha256",
+    # not the output of `nix-prefetch-url`
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals systemdSupport [
+    systemd
+  ];
+
+  configureFlags = [
+    "--with-ssl=${openssl.dev}"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    (lib.enableFeature systemdSupport "systemd")
+  ];
+
+  postInstall = ''
+    # remove legacy compatibility-wrapper that would require perl
+    rm $out/bin/stunnel3
+  '';
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "localstatedir=\${TMPDIR}"
+  ];
+
+  passthru.tests = {
+    stunnel = nixosTests.stunnel;
+  };
+
+  meta = {
+    description = "Universal tls/ssl wrapper";
+    homepage = "https://www.stunnel.org/";
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+    platforms = lib.platforms.unix;
+    mainProgram = "stunnel";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/stuntman/default.nix b/nixpkgs/pkgs/tools/networking/stuntman/default.nix
new file mode 100644
index 000000000000..3d2ff6eeb50c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/stuntman/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchFromGitHub, openssl, boost }:
+
+stdenv.mkDerivation {
+  pname = "stuntman";
+  version = "1.2.16";
+
+  src = fetchFromGitHub {
+    owner = "jselbie";
+    repo = "stunserver";
+    rev = "cfadf9c3836d5ae63a682913de24ba085df924f3";
+    sha256 = "1gcx4zj44f0viddnn5klkmq0dgd29av5p06iyf9f1va4a3lk0cbg";
+  };
+
+  buildInputs = [
+    boost
+    openssl
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mv stunserver $out/bin/
+    mv stunclient $out/bin/
+
+    runHook postInstall
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+
+    ./stuntestcode
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "STUNTMAN - an open source STUN server and client";
+    homepage = "https://www.stunprotocol.org/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mattchrist ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/subfinder/default.nix b/nixpkgs/pkgs/tools/networking/subfinder/default.nix
new file mode 100644
index 000000000000..3cc7c51199de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/subfinder/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "subfinder";
+  version = "2.6.5";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-+Xw4fom7lNfVxbGGoeWG7f37Gk1Dic+jzozh6HodplE=";
+  };
+
+  vendorHash = "sha256-n+FKmgluRfzhufia5rPqLKt4owCyWO4bP6Zgi+4Ax9w=";
+
+  modRoot = "./v2";
+
+  subPackages = [
+    "cmd/subfinder/"
+  ];
+
+  meta = with lib; {
+    description = "Subdomain discovery tool";
+    longDescription = ''
+      SubFinder is a subdomain discovery tool that discovers valid
+      subdomains for websites. Designed as a passive framework to be
+      useful for bug bounties and safe for penetration testing.
+    '';
+    homepage = "https://github.com/projectdiscovery/subfinder";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fpletz Br1ght0ne Misaka13514 ];
+    mainProgram = "subfinder";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/subnetcalc/default.nix b/nixpkgs/pkgs/tools/networking/subnetcalc/default.nix
new file mode 100644
index 000000000000..e2d74a586d81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/subnetcalc/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, ninja
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "subnetcalc";
+  version = "2.4.23";
+
+  src = fetchFromGitHub {
+    owner = "dreibh";
+    repo = "subnetcalc";
+    rev = "subnetcalc-${finalAttrs.version}";
+    hash = "sha256-uX/roOWjeuuuEFpBbF+hEPDOo0RTR79WpyNvr9U7wR4=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  meta = {
+    description = "SubNetCalc is an IPv4/IPv6 subnet address calculator";
+    homepage = "https://www.uni-due.de/~be0001/subnetcalc/";
+    license = lib.licenses.gpl3Plus;
+    longDescription = ''
+      SubNetCalc is an IPv4/IPv6 subnet address calculator. For given IPv4 or
+      IPv6 address and netmask or prefix length, it calculates network address,
+      broadcast address, maximum number of hosts and host address range. Also,
+      it prints the addresses in binary format for better understandability.
+      Furthermore, it prints useful information on specific address types (e.g.
+      type, scope, interface ID, etc.).
+    '';
+    mainProgram = "subnetcalc";
+    maintainers = with lib.maintainers; [ atila ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/suckit/default.nix b/nixpkgs/pkgs/tools/networking/suckit/default.nix
new file mode 100644
index 000000000000..3bd9f825469a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/suckit/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "suckit";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "skallwar";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-M4/vD1sVny7hAf4h56Z2xy7yuCqH/H3qHYod6haZOs0=";
+  };
+
+  cargoSha256 = "sha256-JsH7TL9iITawuECm1hzs5oXFtnoUqLT4ug2CafoO2ao=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optional stdenv.isDarwin Security;
+
+  # requires internet access
+  checkFlags = [
+    "--skip=test_download_url"
+    "--skip=test_external_download"
+  ];
+
+  meta = with lib; {
+    description = "Recursively visit and download a website's content to your disk";
+    homepage = "https://github.com/skallwar/suckit";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "suckit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/surfraw/default.nix b/nixpkgs/pkgs/tools/networking/surfraw/default.nix
new file mode 100644
index 000000000000..44e8877eb5d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/surfraw/default.nix
@@ -0,0 +1,25 @@
+{lib, stdenv, fetchurl, perl}:
+
+stdenv.mkDerivation rec {
+  pname = "surfraw";
+  version = "2.3.0";
+
+  src = fetchurl {
+    url = "https://gitlab.com/surfraw/Surfraw/uploads/2de827b2786ef2fe43b6f07913ca7b7f/surfraw-${version}.tar.gz";
+    sha256 = "099nbif0x5cbcf18snc58nx1a3q7z0v9br9p2jiq9pcc7ic2015d";
+  };
+
+  configureFlags = [
+    "--disable-opensearch"
+  ];
+
+  nativeBuildInputs = [ perl ];
+
+  meta = {
+    description = "Provides a fast unix command line interface to a variety of popular WWW search engines and other artifacts of power";
+    homepage = "https://gitlab.com/surfraw/Surfraw";
+    maintainers = [];
+    platforms = lib.platforms.all;
+    license = lib.licenses.publicDomain;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/swagger-cli/default.nix b/nixpkgs/pkgs/tools/networking/swagger-cli/default.nix
new file mode 100644
index 000000000000..8658ad45520a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/swagger-cli/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "swagger-cli";
+  version = "4.0.4";
+
+  src = fetchFromGitHub {
+    owner = "APIDevTools";
+    repo = "swagger-cli";
+    rev = "v${version}";
+    sha256 = "sha256-WgzfSd57vRwa1HrSgNxD0F5ckczBkOaVmrEZ9tMAcRA=";
+  };
+
+  npmDepsHash = "sha256-go9eYGCZmbwRArHVTVa6mxL+kjvBcrLxKw2iVv0a5hY=";
+
+  buildPhase = ''
+    npm run bump
+  '';
+
+  meta = with lib; {
+    description = "Swagger 2.0 and OpenAPI 3.0 command-line tool";
+    homepage = "https://apitools.dev/swagger-cli/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "swagger-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/swagger-codegen/default.nix b/nixpkgs/pkgs/tools/networking/swagger-codegen/default.nix
new file mode 100644
index 000000000000..15e125f64fb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/swagger-codegen/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "2.4.38";
+  pname = "swagger-codegen";
+
+  jarfilename = "${pname}-cli-${version}.jar";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  src = fetchurl {
+    url = "mirror://maven/io/swagger/${pname}-cli/${version}/${jarfilename}";
+    sha256 = "sha256-ECfOEr4JRCv/i/7YuQvj2s5sKBS1Ja0N8C7eTKoGUx4=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    install -D $src $out/share/java/${jarfilename}
+
+    makeWrapper ${jre}/bin/java $out/bin/${pname} \
+      --add-flags "-jar $out/share/java/${jarfilename}"
+  '';
+
+  meta = with lib; {
+    description = "Allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an OpenAPI Spec";
+    homepage = "https://github.com/swagger-api/swagger-codegen";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = [ maintainers.jraygauthier ];
+    mainProgram = "swagger-codegen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/swagger-codegen3/default.nix b/nixpkgs/pkgs/tools/networking/swagger-codegen3/default.nix
new file mode 100644
index 000000000000..da511769a8e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/swagger-codegen3/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper, testers, swagger-codegen3 }:
+
+stdenv.mkDerivation rec {
+  version = "3.0.53";
+  pname = "swagger-codegen";
+
+  jarfilename = "${pname}-cli-${version}.jar";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  src = fetchurl {
+    url = "mirror://maven/io/swagger/codegen/v3/${pname}-cli/${version}/${jarfilename}";
+    sha256 = "sha256-o6z4yL0PadbVRx2YGEyPHAVpF82vandxPfQeKcQaLok=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    install -D $src $out/share/java/${jarfilename}
+
+    makeWrapper ${jre}/bin/java $out/bin/${pname}3 \
+      --add-flags "-jar $out/share/java/${jarfilename}"
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = swagger-codegen3;
+    command = "swagger-codegen3 version";
+  };
+
+  meta = with lib; {
+    description = "Allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an OpenAPI Spec";
+    homepage = "https://github.com/swagger-api/swagger-codegen/tree/3.0.0";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = [ maintainers._1000101 ];
+    mainProgram = "swagger-codegen3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/swaks/default.nix b/nixpkgs/pkgs/tools/networking/swaks/default.nix
new file mode 100644
index 000000000000..471cc74d9d7f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/swaks/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, perl, perlPackages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "swaks";
+  version = "20240103.0";
+
+  src = fetchurl {
+    url = "https://www.jetmore.org/john/code/swaks/files/${pname}-${version}.tar.gz";
+    sha256 = "sha256-DlMbTRZAWIAucmaxT03BiXCZ0Jb5MIIN4vm16wjc2+g=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv swaks $out/bin/
+
+    wrapProgram $out/bin/swaks --set PERL5LIB \
+      "${with perlPackages; makePerlPath [
+        NetSSLeay AuthenSASL NetDNS IOSocketINET6
+      ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.jetmore.org/john/code/swaks/";
+    description = "A featureful, flexible, scriptable, transaction-oriented SMTP test tool";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [];
+    platforms = platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/tayga/default.nix b/nixpkgs/pkgs/tools/networking/tayga/default.nix
new file mode 100644
index 000000000000..1fa1d8dd5610
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tayga/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, nixosTests }:
+
+stdenv.mkDerivation rec {
+  version = "0.9.2";
+  pname = "tayga";
+
+  src = fetchurl {
+    url= "http://www.litech.org/${pname}/${pname}-${version}.tar.bz2";
+    hash = "sha256-Kx95J6nS3P+Qla/zwnGSSwUsz9L6ypWIsndDGkTwAJw=";
+  };
+
+  passthru.tests.tayga = nixosTests.tayga;
+
+  meta = with lib; {
+    description = "Userland stateless NAT64 daemon";
+    longDescription = ''
+      TAYGA is an out-of-kernel stateless NAT64 implementation
+      for Linux that uses the TUN driver to exchange IPv4 and
+      IPv6 packets with the kernel.
+      It is intended to provide production-quality NAT64 service
+      for networks where dedicated NAT64 hardware would be overkill.
+    '';
+    homepage = "http://www.litech.org/tayga";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ _0x4A6F ];
+    platforms = platforms.linux;
+    mainProgram = "tayga";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tcp-cutter/default.nix b/nixpkgs/pkgs/tools/networking/tcp-cutter/default.nix
new file mode 100644
index 000000000000..71075cc5dd1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tcp-cutter/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "tcp-cutter";
+  version = "1.04";
+
+  src = fetchurl {
+    url = "http://www.digitage.co.uk/digitage/files/cutter/${pname}-${version}.tgz";
+    sha256 = "100iy31a3njif6vh9gfsqrm14hac05rrflla275gd4rkxdlnqcqv";
+  };
+
+  installPhase = ''
+    install -D -m 0755 cutter $out/bin/tcp-cutter
+  '';
+
+  meta = with lib; {
+    description = "TCP/IP Connection cutting on Linux Firewalls and Routers";
+    homepage = "http://www.digitage.co.uk/digitage/software/linux-security/cutter";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.offline ];
+    mainProgram = "tcp-cutter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tcpdump/default.nix b/nixpkgs/pkgs/tools/networking/tcpdump/default.nix
new file mode 100644
index 000000000000..996466901201
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tcpdump/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, libpcap, pkg-config, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "tcpdump";
+  version = "4.99.4";
+
+  src = fetchurl {
+    url = "https://www.tcpdump.org/release/tcpdump-${version}.tar.gz";
+    hash = "sha256-AjIjG7LynWvyQm5woIp+DGOg1ZqbRIY7f14jV6bkn+o=";
+  };
+
+  postPatch = ''
+    patchShebangs tests
+  '';
+
+  nativeBuildInputs = lib.optional (stdenv.hostPlatform.isStatic) [ pkg-config ];
+
+  nativeCheckInputs = [ perl ];
+
+  buildInputs = [ libpcap ];
+
+  configureFlags = lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "ac_cv_linux_vers=2";
+
+  meta = with lib; {
+    description = "Network sniffer";
+    homepage = "https://www.tcpdump.org/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ globin ];
+    platforms = platforms.unix;
+    mainProgram = "tcpdump";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tcpflow/default.nix b/nixpkgs/pkgs/tools/networking/tcpflow/default.nix
new file mode 100644
index 000000000000..73de0acef4e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tcpflow/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, fetchFromGitHub, automake, autoconf
+, openssl, zlib, libpcap, boost
+, useCairo ? false, cairo
+}:
+
+stdenv.mkDerivation rec {
+  pname   = "tcpflow";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner  = "simsong";
+    repo   = pname;
+    rev    = "${pname}-${version}";
+    sha256 = "0vbm097jhi5n8pg08ia1yhzc225zv9948blb76f4br739l9l22vq";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ automake autoconf ];
+  buildInputs = [ openssl zlib libpcap boost ]
+    ++ lib.optional useCairo cairo;
+
+  prePatch = ''
+    substituteInPlace bootstrap.sh \
+      --replace ".git" "" \
+      --replace "/bin/rm" "rm"
+    # Temporary fix for a build error:
+    # https://src.fedoraproject.org/rpms/tcpflow/blob/979e250032b90de2d6b9e5b94b5203d98cccedad/f/tcpflow-1.6.1-format.patch
+    substituteInPlace src/datalink.cpp \
+      --replace 'DEBUG(6)(s.c_str());' 'DEBUG(6) ("%s", s.c_str());'
+  '';
+
+  preConfigure = "bash ./bootstrap.sh";
+
+  meta = with lib; {
+    description = "TCP stream extractor";
+    longDescription = ''
+      tcpflow is a program that captures data transmitted as part of TCP
+      connections (flows), and stores the data in a way that is convenient for
+      protocol analysis and debugging.
+    '';
+    inherit (src.meta) homepage;
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ raskin obadz ];
+    platforms   = platforms.unix;
+    mainProgram = "tcpflow";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tcpreplay/default.nix b/nixpkgs/pkgs/tools/networking/tcpreplay/default.nix
new file mode 100644
index 000000000000..8d0c8eb4fc4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tcpreplay/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libpcap, tcpdump, Carbon, CoreServices }:
+
+stdenv.mkDerivation rec {
+  pname = "tcpreplay";
+  version = "4.4.4";
+
+  src = fetchurl {
+    url = "https://github.com/appneta/tcpreplay/releases/download/v${version}/tcpreplay-${version}.tar.gz";
+    sha256 = "sha256-RPGPttNHDsr3elG5AaEZ2uFtpb5NQUD/uyeF43rW1L8=";
+  };
+
+  buildInputs = [ libpcap ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [
+      Carbon CoreServices
+    ];
+
+
+  configureFlags = [
+    "--disable-local-libopts"
+    "--disable-libopts-install"
+    "--enable-dynamic-link"
+    "--enable-shared"
+    "--enable-tcpreplay-edit"
+    "--with-libpcap=${libpcap}"
+    "--with-tcpdump=${tcpdump}/bin/tcpdump"
+  ];
+
+  meta = with lib; {
+    description = "A suite of utilities for editing and replaying network traffic";
+    homepage = "https://tcpreplay.appneta.com/";
+    license = with licenses; [ bsdOriginalUC gpl3Only ];
+    maintainers = with maintainers; [ eleanor ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tcptraceroute/default.nix b/nixpkgs/pkgs/tools/networking/tcptraceroute/default.nix
new file mode 100644
index 000000000000..cc5594afd5a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tcptraceroute/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libpcap
+, libnet
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tcptraceroute";
+  version = "1.5beta7";
+
+  src = fetchFromGitHub {
+    owner = "mct";
+    repo = "tcptraceroute";
+    rev = "${pname}-${version}";
+    hash = "sha256-KU4MLWtOFzzNr+I99fRbhBokhS1JUNL+OgVltkOGav4=";
+  };
+
+
+  # for reasons unknown --disable-static configure flag doesn't disable static
+  # linking.. we instead override CFLAGS with -static omitted
+  preBuild = ''
+    makeFlagsArray=(CFLAGS=" -g -O2 -Wall")
+  '';
+
+  buildInputs = [ libpcap libnet ];
+
+  meta = {
+    description = "A traceroute implementation using TCP packets";
+    homepage = "https://github.com/mct/tcptraceroute";
+    license = lib.licenses.gpl2;
+    maintainers = [ ];
+    mainProgram = "tcptraceroute";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tdns-cli/default.nix b/nixpkgs/pkgs/tools/networking/tdns-cli/default.nix
new file mode 100644
index 000000000000..006e7161b19d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tdns-cli/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tdns-cli";
+  version = "unstable-2021-02-19";
+
+  src = fetchFromGitHub {
+    owner = "rotty";
+    repo = pname;
+    rev = "9a5455fe8a52f3f14dc55ef81511b479c8cd70ea";
+    hash = "sha256-BGxkqlKg81izq4eOBEZFJ/MPb3UCSOo8ZTYTjtjierk=";
+  };
+
+  cargoHash = "sha256-uRny+l/LaQPjF5AnbxgKFLdjuAxcez1BqsL4g54KAwU=";
+
+  meta = with lib; {
+    description = "DNS tool that aims to replace dig and nsupdate";
+    homepage = "https://github.com/rotty/tdns-cli";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ astro ];
+    mainProgram = "tdns";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/teavpn2/default.nix b/nixpkgs/pkgs/tools/networking/teavpn2/default.nix
new file mode 100644
index 000000000000..57016a0302a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/teavpn2/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, substituteAll
+, iproute2
+}:
+stdenv.mkDerivation {
+  pname = "teavpn2";
+  version = "unstable-2023-07-25";
+
+  src = fetchFromGitHub {
+    owner = "TeaInside";
+    repo = "teavpn2";
+    rev = "b21898d001a2e7b821e045162dd18f13561cb04b";
+    hash = "sha256-0/eHK2/+pn6NfawL1xLJv4jDBFvLwELSXNWLUvff1gs=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./nix.patch;
+      inherit iproute2;
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm 0755 teavpn2 $out/bin/teavpn2
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "An open source VPN Software";
+    homepage = "https://github.com/TeaInside/teavpn2";
+    license = licenses.gpl2Plus;
+    mainProgram = "teavpn2";
+    maintainers = with maintainers; [ ludovicopiero ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/teavpn2/nix.patch b/nixpkgs/pkgs/tools/networking/teavpn2/nix.patch
new file mode 100644
index 000000000000..613eede42478
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/teavpn2/nix.patch
@@ -0,0 +1,14 @@
+diff --git a/src/teavpn2/net/linux/iface.c b/src/teavpn2/net/linux/iface.c
+index a77c1c8..e59c901 100644
+--- a/src/teavpn2/net/linux/iface.c
++++ b/src/teavpn2/net/linux/iface.c
+@@ -327,7 +327,8 @@ static __cold __always_inline const char *find_ip_cmd(void)
+ 		"/usr/sbin/ip",
+ 		"/usr/local/bin/ip",
+ 		"/usr/local/sbin/ip",
+-		"/data/data/com.termux/files/usr/bin/ip"
++		"/data/data/com.termux/files/usr/bin/ip",
++		"@iproute2@/bin/ip"
+ 	};
+ 
+ 	for (size_t i = 0; i < (sizeof(ip_bin) / sizeof(*ip_bin)); i++) {
diff --git a/nixpkgs/pkgs/tools/networking/telepresence/default.nix b/nixpkgs/pkgs/tools/networking/telepresence/default.nix
new file mode 100644
index 000000000000..4866cfea41ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/telepresence/default.nix
@@ -0,0 +1,44 @@
+{ lib, pythonPackages, fetchFromGitHub, makeWrapper
+, sshfs-fuse, torsocks, sshuttle, conntrack-tools , openssh, coreutils
+, iptables, bash }:
+
+let
+  sshuttle-telepresence = lib.overrideDerivation sshuttle (p: {
+    postInstall = "mv $out/bin/sshuttle $out/bin/sshuttle-telepresence";
+  });
+in pythonPackages.buildPythonPackage rec {
+  pname = "telepresence";
+  version = "0.109";
+
+  src = fetchFromGitHub {
+    owner = "telepresenceio";
+    repo = "telepresence";
+    rev = version;
+    sha256 = "1ccc8bzcdxp6rh6llk7grcnmyc05fq7dz5w0mifdzjv3a473hsky";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/telepresence \
+      --prefix PATH : ${lib.makeBinPath [
+        sshfs-fuse
+        torsocks
+        conntrack-tools
+        sshuttle-telepresence
+        openssh
+        coreutils
+        iptables
+        bash
+      ]}
+  '';
+
+  doCheck = false;
+
+  meta = {
+    homepage = "https://www.telepresence.io/";
+    description = "Local development against a remote Kubernetes or OpenShift cluster";
+    license = with lib.licenses; [ asl20 ];
+    maintainers = with lib.maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/telepresence2/default.nix b/nixpkgs/pkgs/tools/networking/telepresence2/default.nix
new file mode 100644
index 000000000000..35629c261f1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/telepresence2/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, fuse
+}:
+
+let
+  fuseftp = buildGoModule rec {
+    pname = "go-fuseftp";
+    version = "0.4.2";
+
+    src = fetchFromGitHub {
+      owner = "datawire";
+      repo = "go-fuseftp";
+      rev = "v${version}";
+      hash = "sha256-bkaC+EOqFPQA4fDkVhO6EqgGhOJy31yGwVbbPoRd+70=";
+    };
+
+    vendorHash = "sha256-Dk4wvg2lTGTw8vP42+XuvmMXeMluR0SPwlVHLEB8yCQ=";
+
+    buildInputs = [ fuse ];
+
+    ldflags = [ "-s" "-w" ];
+
+    subPackages = [ "pkg/main" ];
+  };
+in
+buildGoModule rec {
+  pname = "telepresence2";
+  version = "2.18.0";
+
+  src = fetchFromGitHub {
+    owner = "telepresenceio";
+    repo = "telepresence";
+    rev = "v${version}";
+    hash = "sha256-zk6HyZfYeJecJgdMU3qnXIKDYuvnu5yjSZtVvKem4uI=";
+  };
+
+  propagatedBuildInputs = [
+    fuseftp
+  ];
+
+  # telepresence depends on fuseftp existing as a built binary, as it gets embedded
+  # CGO gets disabled to match their build process as that is how it's done upstream
+  preBuild = ''
+    cp ${fuseftp}/bin/main ./pkg/client/remotefs/fuseftp.bits
+    export CGO_ENABLED=0
+  '';
+
+  vendorHash = "sha256-wvzrnwzkV4SXsiZfIrowMF0G7qFdjEVrF77vM81rxLs=";
+
+  ldflags = [
+    "-s" "-w" "-X=github.com/telepresenceio/telepresence/v2/pkg/version.Version=${src.rev}"
+  ];
+
+  subPackages = [ "cmd/telepresence" ];
+
+  meta = with lib; {
+    description = "Local development against a remote Kubernetes or OpenShift cluster";
+    homepage = "https://telepresence.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mausch vilsol ];
+    mainProgram = "telepresence";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tendermint/default.nix b/nixpkgs/pkgs/tools/networking/tendermint/default.nix
new file mode 100644
index 000000000000..858a306e95bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tendermint/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "tendermint";
+  version = "0.35.9";
+
+  src = fetchFromGitHub {
+    owner = "tendermint";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-3tggW+M3vZChDT1g77W5M3hchEN6pTSVvkrZda6ZTCY=";
+  };
+
+  vendorHash = "sha256-/enY0qERFzAIJNcuw1djRGoAcmtz7R5Ikvlts0f7rLc=";
+
+  subPackages = [ "cmd/tendermint" ];
+
+  preBuild = ''
+    makeFlagsArray+=(
+      "-ldflags=-s -w -X github.com/tendermint/tendermint/version.GitCommit=${src.rev}"
+    )
+  '';
+
+  meta = with lib; {
+    description = "Byzantine-Fault Tolerant State Machines. Or Blockchain, for short";
+    homepage = "https://tendermint.com/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ alexfmpe ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "tendermint";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/termscp/Cargo.lock.patch b/nixpkgs/pkgs/tools/networking/termscp/Cargo.lock.patch
new file mode 100644
index 000000000000..76b2d996e25e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/termscp/Cargo.lock.patch
@@ -0,0 +1,13 @@
+diff --git i/Cargo.lock w/Cargo.lock
+index 5cbb602..47046b8 100644
+--- i/Cargo.lock
++++ w/Cargo.lock
+@@ -2949,7 +2949,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "termscp"
+-version = "0.12.2"
++version = "0.12.3"
+ dependencies = [
+  "argh",
+  "bitflags 2.3.3",
diff --git a/nixpkgs/pkgs/tools/networking/termscp/default.nix b/nixpkgs/pkgs/tools/networking/termscp/default.nix
new file mode 100644
index 000000000000..101a38e4f5dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/termscp/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, dbus
+, fetchFromGitHub
+, openssl
+, pkg-config
+, rustPlatform
+, AppKit
+, Cocoa
+, Foundation
+, Security
+, samba
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "termscp";
+  version = "0.12.3";
+
+  src = fetchFromGitHub {
+    owner = "veeso";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-+5s5PskSHZKv1deti5r986qXg8J9APuVXY+Lvq3ki0w=";
+  };
+
+  cargoPatches = [
+    ./Cargo.lock.patch
+  ];
+
+  cargoHash = "sha256-2RmYxtjJm70qbiGl8YHXgebtvNsQvBdgkNDm8td9oNk=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    dbus
+    openssl
+    samba
+  ] ++ lib.optionals stdenv.isDarwin [
+    AppKit
+    Cocoa
+    Foundation
+    Security
+  ];
+
+  # Needed to get openssl-sys to use pkg-config.
+  OPENSSL_NO_VENDOR = 1;
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.isDarwin [
+    "-framework" "AppKit"
+  ]);
+
+  # Requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A feature rich terminal UI file transfer and explorer with support for SCP/SFTP/FTP/S3/SMB";
+    homepage = "https://github.com/veeso/termscp";
+    changelog = "https://github.com/veeso/termscp/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "termscp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/termshark/default.nix b/nixpkgs/pkgs/tools/networking/termshark/default.nix
new file mode 100644
index 000000000000..84dbf7ed3311
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/termshark/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, makeWrapper, buildGoModule, wireshark-cli }:
+
+buildGoModule rec {
+  pname = "termshark";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "gcla";
+    repo = "termshark";
+    rev = "v${version}";
+    sha256 = "sha256-qq7BDGprRkWKRMJiVnqPeTwtHd3tea9dPE8RIPL2YVI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ wireshark-cli ];
+
+  vendorHash = "sha256-C9XOiNjo+TZ+erdnypRhhfpbuBhB3yEqNpbtwjEv14g=";
+
+  doCheck = false;
+
+  postFixup = ''
+    wrapProgram $out/bin/termshark --prefix PATH : ${lib.makeBinPath [ wireshark-cli ]}
+  '';
+
+  ldflags = [
+    "-X github.com/gcla/termshark.Version=${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://termshark.io/";
+    description = "A terminal UI for wireshark-cli, inspired by Wireshark";
+    license = licenses.mit;
+    maintainers = with maintainers; [ winpat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tftp-hpa/default.nix b/nixpkgs/pkgs/tools/networking/tftp-hpa/default.nix
new file mode 100644
index 000000000000..15fd04735327
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tftp-hpa/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "tftp-hpa";
+  version="5.2";
+  src = fetchurl {
+    url = "mirror://kernel/software/network/tftp/tftp-hpa/${pname}-${version}.tar.xz";
+    sha256 = "12vidchglhyc20znq5wdsbhi9mqg90jnl7qr9qs8hbvaz4fkdvmg";
+  };
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: main.o:/build/tftp-hpa-5.2/tftp/main.c:98: multiple definition of
+  #     `toplevel'; tftp.o:/build/tftp-hpa-5.2/tftp/tftp.c:51: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  meta = with lib; {
+    description = "TFTP tools - a lot of fixes on top of BSD TFTP";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+    homepage = "https://www.kernel.org/pub/software/network/tftp/";
+  };
+
+  passthru = {
+    updateInfo = {
+      downloadPage = "https://www.kernel.org/pub/software/network/tftp/";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tgt/default.nix b/nixpkgs/pkgs/tools/networking/tgt/default.nix
new file mode 100644
index 000000000000..734bf10790f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tgt/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, lib, fetchFromGitHub, libxslt, libaio, systemd, perl
+, docbook_xsl, coreutils, lsof, makeWrapper, sg3_utils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tgt";
+  version = "1.0.90";
+
+  src = fetchFromGitHub {
+    owner = "fujita";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-C1xrsL7+S+TyMWULVuw7+ZV5hxfhXorScfqndomefRw=";
+  };
+
+  nativeBuildInputs = [ libxslt docbook_xsl makeWrapper ];
+
+  buildInputs = [ systemd libaio ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "SD_NOTIFY=1"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # Needed with GCC 12
+    "-Wno-error=maybe-uninitialized"
+  ];
+
+  hardeningDisable = lib.optionals stdenv.isAarch64 [
+    # error: 'read' writing 1 byte into a region of size 0 overflows the destination
+    "fortify3"
+  ];
+
+  installFlags = [
+    "sysconfdir=${placeholder "out"}/etc"
+  ];
+
+  preConfigure = ''
+    sed -i 's|/usr/bin/||' doc/Makefile
+    sed -i 's|/usr/include/libaio.h|${libaio}/include/libaio.h|' usr/Makefile
+    sed -i 's|/usr/include/sys/|${stdenv.cc.libc.dev}/include/sys/|' usr/Makefile
+    sed -i 's|/usr/include/linux/|${stdenv.cc.libc.dev}/include/linux/|' usr/Makefile
+  '';
+
+  postInstall = ''
+    substituteInPlace $out/sbin/tgt-admin \
+      --replace "#!/usr/bin/perl" "#! ${perl.withPackages (p: [ p.ConfigGeneral ])}/bin/perl"
+    wrapProgram $out/sbin/tgt-admin --prefix PATH : \
+      ${lib.makeBinPath [ lsof sg3_utils (placeholder "out") ]}
+
+    install -D scripts/tgtd.service $out/etc/systemd/system/tgtd.service
+    substituteInPlace $out/etc/systemd/system/tgtd.service \
+      --replace "/usr/sbin/tgt" "$out/bin/tgt"
+
+    # See https://bugzilla.redhat.com/show_bug.cgi?id=848942
+    sed -i '/ExecStart=/a ExecStartPost=${coreutils}/bin/sleep 5' $out/etc/systemd/system/tgtd.service
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "iSCSI Target daemon with RDMA support";
+    homepage = "https://github.com/fujita/tgt";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ johnazoidberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tinc/default.nix b/nixpkgs/pkgs/tools/networking/tinc/default.nix
new file mode 100644
index 000000000000..2ca679b16c85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tinc/default.nix
@@ -0,0 +1,32 @@
+{lib, stdenv, fetchurl, lzo, openssl, zlib}:
+
+stdenv.mkDerivation rec {
+  version = "1.0.36";
+  pname = "tinc";
+
+  src = fetchurl {
+    url = "https://www.tinc-vpn.org/packages/tinc-${version}.tar.gz";
+    sha256 = "021i2sl2mjscbm8g59d7vs74iw3gf0m48wg7w3zhwj6czarkpxs0";
+  };
+
+  buildInputs = [ lzo openssl zlib ];
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+  ];
+
+  meta = {
+    description = "VPN daemon with full mesh routing";
+    longDescription = ''
+      tinc is a Virtual Private Network (VPN) daemon that uses tunnelling and
+      encryption to create a secure private network between hosts on the
+      Internet.  It features full mesh routing, as well as encryption,
+      authentication, compression and ethernet bridging.
+    '';
+    homepage="http://www.tinc-vpn.org/";
+    license = lib.licenses.gpl2Plus;
+    mainProgram = "tincd";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tinc/pre.nix b/nixpkgs/pkgs/tools/networking/tinc/pre.nix
new file mode 100644
index 000000000000..f15f398dc7db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tinc/pre.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, texinfo, ncurses, readline, zlib, lzo, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "tinc";
+  version = "1.1pre18";
+
+  src = fetchFromGitHub {
+    owner = "gsliepen";
+    repo = "tinc";
+    rev = "release-${version}";
+    hash = "sha256-1anjTUlVLx57FlUqGwBd590lfkZ2MmrM1qRcMl4P7Sg=";
+  };
+
+  outputs = [ "out" "man" "info" ];
+
+  nativeBuildInputs = [ autoreconfHook texinfo ];
+  buildInputs = [ ncurses readline zlib lzo openssl ];
+
+  # needed so the build doesn't need to run git to find out the version.
+  prePatch = ''
+    substituteInPlace configure.ac --replace UNKNOWN ${version}
+    echo "${version}" > configure-version
+    echo "https://tinc-vpn.org/git/browse?p=tinc;a=log;h=refs/tags/release-${version}" > ChangeLog
+    sed -i '/AC_INIT/s/m4_esyscmd_s.*/${version})/' configure.ac
+  '';
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ];
+
+  meta = with lib; {
+    description = "VPN daemon with full mesh routing";
+    longDescription = ''
+      tinc is a Virtual Private Network (VPN) daemon that uses tunnelling and
+      encryption to create a secure private network between hosts on the
+      Internet.  It features full mesh routing, as well as encryption,
+      authentication, compression and ethernet bridging.
+    '';
+    homepage="http://www.tinc-vpn.org/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ lassulus mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tinyfecvpn/default.nix b/nixpkgs/pkgs/tools/networking/tinyfecvpn/default.nix
new file mode 100644
index 000000000000..8e609a886b30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tinyfecvpn/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "tinyfecvpn";
+  version = "20230206.0";
+
+  src = fetchFromGitHub {
+    owner = "wangyu-";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-g4dduREH64TDK3Y2PKc5RZiISW4h2ALRh8vQK7jvCZU=";
+    fetchSubmodules = true;
+  };
+
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ pkg-config ];
+
+  patchPhase = ''
+    runHook prePatch
+    find . -type f -name "makefile" -exec sed "s/ -static/ -g/g" -i \{\} \;
+    runHook postPatch
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 tinyvpn $out/bin/tinyvpn
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/wangyu-/tinyfecVPN";
+    description = "A VPN Designed for Lossy Links, with Build-in Forward Error Correction(FEC) Support";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    mainProgram = "tinyvpn";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tinyproxy/default.nix b/nixpkgs/pkgs/tools/networking/tinyproxy/default.nix
new file mode 100644
index 000000000000..855c559448a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tinyproxy/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, perl
+, nixosTests
+, withDebug ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tinyproxy";
+  version = "1.11.1";
+
+  src = fetchFromGitHub {
+    sha256 = "sha256-tipFXh9VG5auWTI2/IC5rwMQFls7aZr6dkzhYTZZkXM=";
+    rev = version;
+    repo = "tinyproxy";
+    owner = "tinyproxy";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2022-40468.patch";
+      url = "https://github.com/tinyproxy/tinyproxy/commit/3764b8551463b900b5b4e3ec0cd9bb9182191cb7.patch";
+      sha256 = "sha256-P0c4mUK227ld3703ss5MQhi8Vo2QVTCVXhKmc9fcufk=";
+    })
+  ];
+
+  # perl is needed for man page generation.
+  nativeBuildInputs = [ autoreconfHook perl ];
+
+  configureFlags = lib.optionals withDebug [ "--enable-debug" ]; # Enable debugging support code and methods.
+  passthru.tests = { inherit (nixosTests) tinyproxy; };
+
+  meta = with lib; {
+    homepage = "https://tinyproxy.github.io/";
+    description = "A light-weight HTTP/HTTPS proxy daemon for POSIX operating systems";
+    license = licenses.gpl2Only;
+    platforms = platforms.all;
+    maintainers = [ maintainers.carlosdagos ];
+    mainProgram = "tinyproxy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tinyssh/default.nix b/nixpkgs/pkgs/tools/networking/tinyssh/default.nix
new file mode 100644
index 000000000000..47c9ace513e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tinyssh/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tinyssh";
+  version = "20240101";
+
+  src = fetchFromGitHub {
+    owner = "janmojzis";
+    repo = "tinyssh";
+    rev = "refs/tags/${version}";
+    hash = "sha256-wO0fGr+pU+Y5YCZMRGNOZ6pJeCUIc64TzmRAaQCnBxk=";
+  };
+
+  preConfigure = ''
+    echo /bin       > conf-bin
+    echo /share/man > conf-man
+  '';
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=implicit-function-declaration";
+
+  DESTDIR = placeholder "out";
+
+  meta = with lib; {
+    description = "Minimalistic SSH server";
+    homepage = "https://tinyssh.org";
+    changelog = "https://github.com/janmojzis/tinyssh/releases/tag/${version}";
+    license = licenses.cc0;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ kaction ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tinystatus/default.nix b/nixpkgs/pkgs/tools/networking/tinystatus/default.nix
new file mode 100644
index 000000000000..e4e930e799a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tinystatus/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenvNoCC, makeWrapper, netcat, curl, unixtools, coreutils, mktemp
+, findutils, gnugrep, fetchFromGitHub, gawk, gnused }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "tinystatus";
+  version = "unstable-2021-07-09";
+
+  src = fetchFromGitHub {
+    owner = "bderenzo";
+    repo = "tinystatus";
+    rev = "fc128adf240261ac99ea3e3be8d65a92eda52a73";
+    sha256 = "sha256-FvQwibm6F10l9/U3RnNTGu+C2JjHOwbv62VxXAfI7/s=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  runtimeInputs = [
+    curl
+    netcat
+    unixtools.ping
+    coreutils
+    mktemp
+    findutils
+    gnugrep
+    gawk
+    gnused
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 tinystatus $out/bin/tinystatus
+    wrapProgram $out/bin/tinystatus \
+      --set PATH "${lib.makeBinPath runtimeInputs}"
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preCheck
+
+    cat <<EOF >test.csv
+    ping, 0, testing, this.should.fail.example.com
+    EOF
+
+    $out/bin/tinystatus test.csv | grep Disrupted
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "A static HTML status page generator written in pure shell";
+    homepage = "https://github.com/bderenzo/tinystatus";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ matthewcroughan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tnat64/default.nix b/nixpkgs/pkgs/tools/networking/tnat64/default.nix
new file mode 100644
index 000000000000..d22f2b98efd6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tnat64/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "tnat64";
+  version = "0.06";
+
+  src = fetchFromGitHub {
+    owner = "andrewshadura";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "191j1fpr3bw6fk48npl99z7iq6m1g33f15xk5cay1gnk5f46i2j6";
+  };
+
+  configureFlags = [ "--libdir=$(out)/lib" ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "IPv4 to IPv6 interceptor";
+    homepage = "https://github.com/andrewshadura/tnat64";
+    license = licenses.gpl2Plus;
+    longDescription = ''
+      TNAT64 is an interceptor which redirects outgoing TCPv4 connections
+      through NAT64, thus enabling an application running on an IPv6-only host
+      to communicate with the IPv4 world, even if that application does not
+      support IPv6 at all.
+    '';
+    platforms = platforms.unix;
+    badPlatforms = platforms.darwin;
+    maintainers = [ maintainers.rnhmjoj ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/toss/default.nix b/nixpkgs/pkgs/tools/networking/toss/default.nix
new file mode 100644
index 000000000000..3c8f72961812
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/toss/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "toss";
+  version = "1.1";
+  src = fetchFromGitHub {
+    owner = "zerotier";
+    repo = pname;
+    rev = version;
+    sha256 = "05ql0d8wbdhnmh3dw8ch5bi6clfb9h8v21lq2a74iy02slya2y0r";
+  };
+  preInstall = "export DESTDIR=$out/bin";
+  meta = with lib;
+    src.meta // {
+      description = "Dead simple LAN file transfers from the command line";
+      license = with licenses; [ mit ];
+      maintainers = with maintainers; [ ehmry ];
+      platforms = platforms.unix;
+    };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tox-node/default.nix b/nixpkgs/pkgs/tools/networking/tox-node/default.nix
new file mode 100644
index 000000000000..10a823f28736
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tox-node/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub, nix-update-script }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tox-node";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "tox-rs";
+    repo = "tox";
+    rev = "v${version}";
+    sha256 = "sha256-3ZRpri3WxwHjMq88TxRJAaTXMui8N1uLek+q8g5PGD4=";
+  };
+
+  buildAndTestSubdir = "tox_node";
+
+  cargoSha256 = "sha256-L5IvYA32W8cTnuWjeljge5X+LZ912ugtcvEKXLqYZ+k=";
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A server application to run tox node written in pure Rust";
+    homepage = "https://github.com/tox-rs/tox";
+    license = [ licenses.gpl3Plus ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ suhr kurnevsky ];
+    mainProgram = "tox-node";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/toxvpn/default.nix b/nixpkgs/pkgs/tools/networking/toxvpn/default.nix
new file mode 100644
index 000000000000..633ecf654924
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/toxvpn/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, nlohmann_json
+, libtoxcore
+, libsodium
+, libcap
+, zeromq
+, systemd
+}:
+
+stdenv.mkDerivation {
+  pname = "toxvpn";
+  version = "unstable-2019-09-09";
+
+  src = fetchFromGitHub {
+    owner = "cleverca22";
+    repo = "toxvpn";
+    rev = "45083dec172ce167f7ed84d571ec2822ebe4d51a";
+    sha256 = "193crarrx6q0zd2p6dn67pzv8kngwi440zm1y54njgcz0v3fpxmb";
+  };
+
+  buildInputs = [ libtoxcore nlohmann_json libsodium zeromq ]
+    ++ lib.optionals stdenv.isLinux [ libcap systemd ];
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = lib.optionals stdenv.isLinux [ "-DSYSTEMD=1" ];
+
+  postInstall = "$out/bin/toxvpn -h";
+
+  meta = with lib; {
+    description = "A powerful tool that allows one to make tunneled point to point connections over Tox";
+    homepage = "https://github.com/cleverca22/toxvpn";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ cleverca22 obadz toonn ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tracebox/default.nix b/nixpkgs/pkgs/tools/networking/tracebox/default.nix
new file mode 100644
index 000000000000..dce1fc532046
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tracebox/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, libpcap
+, lua5_1
+, json_c
+, testers
+, tracebox
+}:
+stdenv.mkDerivation rec {
+  pname = "tracebox";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "tracebox";
+    repo = "tracebox";
+    rev = "v${version}";
+    hash = "sha256-1KBJ4uXa1XpzEw23IjndZg+aGJXk3PVw8LYKAvxbxCA=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [
+    libpcap
+    lua5_1
+    json_c
+  ];
+
+  postPatch = ''
+    sed -i configure.ac \
+      -e 's,$(git describe .*),${version},'
+  '';
+
+  configureFlags = [
+    "--with-lua=yes"
+    "--with-libpcap=yes"
+  ];
+
+  env = {
+    CXXFLAGS = "-std=c++14";
+    LUA_LIB = "-llua";
+    PCAPLIB = "-lpcap";
+  };
+
+  enableParallelBuilding = true;
+
+  passthru.tests.version = testers.testVersion {
+    package = tracebox;
+    command = "tracebox -V";
+  };
+
+  meta = with lib; {
+    homepage = "http://www.tracebox.org/";
+    description = "A middlebox detection tool";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ck3d ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/traceroute/default.nix b/nixpkgs/pkgs/tools/networking/traceroute/default.nix
new file mode 100644
index 000000000000..e0c7fd61a75a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/traceroute/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "traceroute";
+  version = "2.1.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/traceroute/${pname}-${version}.tar.gz";
+    sha256 = "sha256-nGwmDZbqq1HjzkYbCoT+hxI+vG3WyaWfq4A/lbNahZ4=";
+  };
+
+  makeFlags = [
+    "prefix=$(out)"
+    "LDFLAGS=-lm"
+    "env=yes"
+  ];
+
+  preConfigure = ''
+    sed -i 's@LIBS := \(.*\) -lm \(.*\)@LIBS := \1 \2@' Make.rules
+  '';
+
+  meta = with lib; {
+    description = "Tracks the route taken by packets over an IP network";
+    homepage = "https://traceroute.sourceforge.net/";
+    changelog = "https://sourceforge.net/projects/traceroute/files/traceroute/traceroute-${version}/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ koral ];
+    platforms = platforms.linux;
+    mainProgram = "traceroute";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tran/default.nix b/nixpkgs/pkgs/tools/networking/tran/default.nix
new file mode 100644
index 000000000000..767211a7e532
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tran/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tran";
+  version = "0.1.43";
+
+  src = fetchFromGitHub {
+    owner = "abdfnx";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-qp4g1ZLRIIz0CZ/Zey354g0j9ePE4pGb82IivLezU7s=";
+  };
+
+  vendorHash = "sha256-JmRTI5ZBSFULfI+ki3hI8TPaS6IVP9D14r4DwK/nx1Y=";
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X main.version=v${version}"
+  ];
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Securely transfer and send anything between computers with TUI";
+    homepage = "https://github.com/abdfnx/tran";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "tran";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/transmission-rss/default.nix b/nixpkgs/pkgs/tools/networking/transmission-rss/default.nix
new file mode 100644
index 000000000000..19df133e4028
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/transmission-rss/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, openssl }:
+
+rustPlatform.buildRustPackage rec {
+  version = "0.3.1";
+  pname = "transmission-rss";
+
+  src = fetchFromGitHub {
+    owner = "herlon214";
+    repo = pname;
+    rev = "5bbad7a81621a194b7a8b11a56051308a7ccbf06";
+    sha256 = "sha256-SkEgxinqPA9feOIF68oewVyRKv3SY6fWWZLGJeH+r4M=";
+  };
+
+  cargoPatches = [ ./update-cargo-lock-version.patch ];
+
+  cargoSha256 = "sha256-QNMdqoxxY8ao2O44hJxZNgLrPwzu9+ieweTPc7pfFY4=";
+
+  nativeBuildInputs = [pkg-config];
+  buildInputs = [openssl];
+
+  OPENSSL_NO_VENDOR = 1;
+
+  meta = with lib; {
+    description = "Add torrents to transmission based on RSS list";
+    homepage = "https://github.com/herlon214/transmission-rss";
+    maintainers = with maintainers; [ icewind1991 ];
+    license = licenses.mit;
+    mainProgram = "transmission-rss";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/transmission-rss/update-cargo-lock-version.patch b/nixpkgs/pkgs/tools/networking/transmission-rss/update-cargo-lock-version.patch
new file mode 100644
index 000000000000..cd5e30adb29d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/transmission-rss/update-cargo-lock-version.patch
@@ -0,0 +1,13 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index e75aca4..88321ec 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -2148,7 +2148,7 @@ dependencies = [
+
+ [[package]]
+ name = "transmission-rss"
+-version = "0.3.0"
++version = "0.3.1"
+ dependencies = [
+  "clap",
+  "env_logger",
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/networking/trickle/default.nix b/nixpkgs/pkgs/tools/networking/trickle/default.nix
new file mode 100644
index 000000000000..5d1ca8e4ee7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/trickle/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libevent, libtirpc }:
+
+stdenv.mkDerivation rec {
+  pname = "trickle";
+  version = "1.07";
+
+  src = fetchurl {
+    url = "https://monkey.org/~marius/trickle/trickle-${version}.tar.gz";
+    sha256 = "0s1qq3k5mpcs9i7ng0l9fvr1f75abpbzfi1jaf3zpzbs1dz50dlx";
+  };
+
+  buildInputs = [ libevent libtirpc ];
+
+  preConfigure = ''
+    sed -i 's|libevent.a|libevent.so|' configure
+  '';
+
+  preBuild = ''
+    sed -i '/#define in_addr_t/ s:^://:' config.h
+  '';
+
+  NIX_LDFLAGS = [ "-levent" "-ltirpc" ];
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${libtirpc.dev}/include/tirpc" ];
+
+  configureFlags = [ "--with-libevent" ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "Lightweight userspace bandwidth shaper";
+    license = lib.licenses.bsd3;
+    homepage = "https://monkey.org/~marius/pages/?page=trickle";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/trippy/default.nix b/nixpkgs/pkgs/tools/networking/trippy/default.nix
new file mode 100644
index 000000000000..933150aebb9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/trippy/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "trippy";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "fujiapple852";
+    repo = "trippy";
+    rev = version;
+    hash = "sha256-Q5WPpCm1RNLlNX8G1U160O2wJz+y+KMScApjx6gIBCg=";
+  };
+
+  cargoHash = "sha256-brvfAZZ3L0loZQowcRfkS7o7ZYQB9hr5o1rgMSWaljU=";
+
+  meta = with lib; {
+    description = "A network diagnostic tool";
+    homepage = "https://trippy.cli.rs";
+    changelog = "https://github.com/fujiapple852/trippy/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "trip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/trurl/default.nix b/nixpkgs/pkgs/tools/networking/trurl/default.nix
new file mode 100644
index 000000000000..b709c2a2b105
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/trurl/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, curl, python3, trurl, testers }:
+
+stdenv.mkDerivation rec {
+  pname = "trurl";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "curl";
+    repo = pname;
+    rev = "${pname}-${version}";
+    hash = "sha256-R/7Saea84iqUICAAQz9zcfDLDud4uFedY2752xyg+oE=";
+  };
+
+  # The version number was forgotten to be updated for the release,
+  # so do it manually in the meantime.
+  # See https://github.com/curl/trurl/discussions/244#discussioncomment-7436369
+  postPatch = ''
+    substituteInPlace version.h --replace 0.8 0.9
+  '';
+
+  outputs = [ "out" "dev" "man" ];
+  separateDebugInfo = stdenv.isLinux;
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ curl ];
+  buildInputs = [ curl ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  doCheck = true;
+  nativeCheckInputs = [ python3 ];
+  checkTarget = "test";
+
+  passthru.tests.version = testers.testVersion {
+    package = trurl;
+  };
+
+  meta = with lib; {
+    description = "A command line tool for URL parsing and manipulation";
+    homepage = "https://curl.se/trurl";
+    changelog = "https://github.com/curl/trurl/releases/tag/${pname}-${version}";
+    license = licenses.curl;
+    maintainers = with maintainers; [ christoph-heiss ];
+    platforms = platforms.all;
+    mainProgram = "trurl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tuic/Cargo.lock b/nixpkgs/pkgs/tools/networking/tuic/Cargo.lock
new file mode 100644
index 000000000000..d57b2870b369
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tuic/Cargo.lock
@@ -0,0 +1,1052 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "async-trait"
+version = "0.1.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "log",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lexopt"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baff4b617f7df3d896f97fe922b64817f6cd9a756bb81d40f8883f2f66dcb401"
+
+[[package]]
+name = "libc"
+version = "0.2.146"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+dependencies = [
+ "parking_lot_core",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quinn"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21252f1c0fc131f1b69182db8f34837e8a69737b8251dff75636a9be0518c324"
+dependencies = [
+ "bytes",
+ "futures-io",
+ "pin-project-lite",
+ "quinn-proto",
+ "quinn-udp",
+ "rustc-hash",
+ "rustls",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "quinn-proto"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85af4ed6ee5a89f26a26086e9089a6643650544c025158449a3626ebf72884b3"
+dependencies = [
+ "bytes",
+ "rand",
+ "ring",
+ "rustc-hash",
+ "rustls",
+ "slab",
+ "thiserror",
+ "tinyvec",
+ "tracing",
+]
+
+[[package]]
+name = "quinn-udp"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6df19e284d93757a9fb91d63672f7741b129246a669db09d1c0063071debc0c0"
+dependencies = [
+ "bytes",
+ "libc",
+ "socket2 0.5.3",
+ "tracing",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "register-count"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6d8b2af7d3e6675306d6757f10b4cf0b218a9fa6a0b44d668f2132684ae4893"
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustls"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f"
+dependencies = [
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+dependencies = [
+ "base64",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.97"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdf3bf93142acad5821c99197022e170842cdbc1c30482b98750c688c640842a"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "socks5-proto"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8d1cbdbbffd5e2418d31ae833045a219062f1740f5f0f34baefa8e5bb2053ff"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "tokio",
+]
+
+[[package]]
+name = "socks5-server"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7260a3af0411620eca9c63032069ec9f0d92ef4214e017672c864f573d6a21"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "socks5-proto",
+ "tokio",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "syn"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tuic"
+version = "5.0.0"
+dependencies = [
+ "bytes",
+ "futures-util",
+ "parking_lot",
+ "register-count",
+ "thiserror",
+ "tuic",
+ "uuid",
+]
+
+[[package]]
+name = "tuic-client"
+version = "1.0.0"
+dependencies = [
+ "bytes",
+ "crossbeam-utils",
+ "env_logger",
+ "humantime",
+ "lexopt",
+ "log",
+ "once_cell",
+ "parking_lot",
+ "quinn",
+ "register-count",
+ "rustls",
+ "rustls-native-certs",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "socket2 0.5.3",
+ "socks5-proto",
+ "socks5-server",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tuic",
+ "tuic-quinn",
+ "uuid",
+]
+
+[[package]]
+name = "tuic-quinn"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "futures-util",
+ "quinn",
+ "thiserror",
+ "tuic",
+ "uuid",
+]
+
+[[package]]
+name = "tuic-server"
+version = "1.0.0"
+dependencies = [
+ "bytes",
+ "crossbeam-utils",
+ "env_logger",
+ "humantime",
+ "lexopt",
+ "log",
+ "parking_lot",
+ "quinn",
+ "register-count",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "socket2 0.5.3",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tuic",
+ "tuic-quinn",
+ "uuid",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "uuid"
+version = "1.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa2982af2eec27de306107c027578ff7f423d65f7250e40ce0fea8f45248b81"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/nixpkgs/pkgs/tools/networking/tuic/default.nix b/nixpkgs/pkgs/tools/networking/tuic/default.nix
new file mode 100644
index 000000000000..9750d056a8bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tuic/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec{
+  pname = "tuic";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "EAimTY";
+    repo = pname;
+    rev = "tuic-server-${version}";
+    hash = "sha256-VoNr91vDqBlt9asT/dwCeYk13UNiDexNNiKwD5DSn8k=";
+  };
+
+  postPatch = ''
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  cargoLock.lockFile = ./Cargo.lock;
+
+  # doc test will fail in this version
+  checkFlags = [ "--skip=lib" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/EAimTY/tuic";
+    description = "Delicately-TUICed 0-RTT proxy protocol";
+    license = licenses.gpl3Only;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ oluceps ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tun2socks/default.nix b/nixpkgs/pkgs/tools/networking/tun2socks/default.nix
new file mode 100644
index 000000000000..dc7cdd243fec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tun2socks/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tun2socks";
+  version = "2.5.2";
+
+  src = fetchFromGitHub {
+    owner = "xjasonlyu";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-siAengVJXusQ5o9cTaADeRn5eW4IoCHkMMf6Bx8iWws=";
+  };
+
+  vendorHash = "sha256-zeiOcn33PnyoseYb0wynkn7MfGp3rHEYBStY98C6aR8=";
+
+  ldflags = [
+    "-w" "-s"
+    "-X github.com/xjasonlyu/tun2socks/v2/internal/version.Version=v${version}"
+    "-X github.com/xjasonlyu/tun2socks/v2/internal/version.GitCommit=v${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/xjasonlyu/tun2socks";
+    description = "tun2socks - powered by gVisor TCP/IP stack";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "tun2socks";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tunnelto/Cargo.lock b/nixpkgs/pkgs/tools/networking/tunnelto/Cargo.lock
new file mode 100644
index 000000000000..383bb658ca34
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tunnelto/Cargo.lock
@@ -0,0 +1,2985 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "addr2line"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7a2e47a1fbe209ee101dd6d61285226744c6c8d3c21c8dc878ba6cb9f467f3a"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "askama"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a1fb9e41eb366cbcd267da2094be5b7e62fdbca9f82091e7503e80f885050d"
+dependencies = [
+ "askama_derive",
+ "askama_escape",
+ "askama_shared",
+]
+
+[[package]]
+name = "askama_derive"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1012c270085fa35ece6a48a569544fde85b6d9ee41074c7b706cc912a03f939"
+dependencies = [
+ "askama_shared",
+ "nom",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "askama_escape"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a577aeba5fec1aafb9f195d98cfcc38a78b588e4ebf9b15f62ca1c7aa33795a"
+
+[[package]]
+name = "askama_shared"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ee517f4e33c27b129928e71d8a044d54c513e72e0b72ec5c4f5f1823e9de353"
+dependencies = [
+ "askama_escape",
+ "humansize",
+ "num-traits",
+ "serde",
+ "serde_json",
+ "toml",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
+name = "backtrace"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7815ea54e4d821e791162e078acbebfd6d8c8939cd559c9335dceb1c8ca7282"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base-x"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b"
+
+[[package]]
+name = "base64"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "buf_redux"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f"
+dependencies = [
+ "memchr",
+ "safemem",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytes"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
+
+[[package]]
+name = "cc"
+version = "1.0.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a72c244c1ff497a746a7e1fb3d14bd08420ecda70c8f25c7112f2781652d787"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time 0.1.43",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term 0.11.0",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "cli-table"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84ed8652883003051b558c7f650be7668e68f73c9ef6574ba0be9119a2fec9d3"
+dependencies = [
+ "cli-table-derive",
+ "csv",
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "cli-table-derive"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efe942512e068e15991cbcef4e8182884555febbb21b5b4faf5dd5561850141a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "colored"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "console"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3993e6445baa160675931ec041a5e03ca84b9c6e32a056150d3aa2bdda0a1f45"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "regex",
+ "terminal_size",
+ "unicode-width",
+ "winapi",
+]
+
+[[package]]
+name = "const_fn"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b"
+
+[[package]]
+name = "cpufeatures"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed00c67cb5d0a7d64a44f6ad2668db7e7530311dd53ea79bcd4fb022c64911c8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "csv"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+dependencies = [
+ "bstr",
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ct-logs"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1a816186fa68d9e426e3cb4ae4dff1fcd8e4a2c34b781bf7a822574a0d0aac8"
+dependencies = [
+ "sct",
+]
+
+[[package]]
+name = "dashmap"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "num_cpus",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57"
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "dirs"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
+dependencies = [
+ "cfg-if 0.1.10",
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "discard"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121"
+dependencies = [
+ "autocfg",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282"
+
+[[package]]
+name = "futures-task"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae"
+
+[[package]]
+name = "futures-util"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967"
+dependencies = [
+ "autocfg",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "proc-macro-hack",
+ "proc-macro-nested",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.10.2+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189"
+
+[[package]]
+name = "h2"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726"
+dependencies = [
+ "bytes 1.0.1",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
+
+[[package]]
+name = "headers"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0b7591fb62902706ae8e7aaff416b1b0fa2c0fd0878b46dc13baa3712d8a855"
+dependencies = [
+ "base64 0.13.0",
+ "bitflags",
+ "bytes 1.0.1",
+ "headers-core",
+ "http",
+ "mime",
+ "sha-1",
+ "time 0.1.43",
+]
+
+[[package]]
+name = "headers-core"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
+dependencies = [
+ "http",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"
+dependencies = [
+ "crypto-mac",
+ "digest",
+]
+
+[[package]]
+name = "hmac-sha256"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcdc571e566521512579aab40bf807c5066e1765fb36857f16ed7595c13567c6"
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11"
+dependencies = [
+ "bytes 1.0.1",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"
+dependencies = [
+ "bytes 0.5.6",
+ "http",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60daa14be0e0786db0f03a9e57cb404c9d756eed2b6c62b9ea98ec5743ec75a9"
+dependencies = [
+ "bytes 1.0.1",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68"
+
+[[package]]
+name = "httpdate"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440"
+
+[[package]]
+name = "human-panic"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39f357a500abcbd7c5f967c1d45c8838585b36743823b9d43488f24850534e36"
+dependencies = [
+ "backtrace",
+ "os_type",
+ "serde",
+ "serde_derive",
+ "termcolor",
+ "toml",
+ "uuid",
+]
+
+[[package]]
+name = "humansize"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026"
+
+[[package]]
+name = "humantime"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
+dependencies = [
+ "quick-error",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07d6baa1b441335f3ce5098ac421fb6547c46dda735ca1bc6d0153c838f9dd83"
+dependencies = [
+ "bytes 1.0.1",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body 0.4.2",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.0",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64"
+dependencies = [
+ "ct-logs",
+ "futures-util",
+ "hyper",
+ "log",
+ "rustls",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+ "webpki",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes 1.0.1",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7baab56125e25686df467fe470785512329883aab42696d661247aca2a2896e4"
+dependencies = [
+ "console",
+ "lazy_static",
+ "number_prefix",
+ "regex",
+]
+
+[[package]]
+name = "input_buffer"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413"
+dependencies = [
+ "bytes 1.0.1",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7"
+dependencies = [
+ "socket2 0.3.19",
+ "widestring",
+ "winapi",
+ "winreg 0.6.2",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9"
+
+[[package]]
+name = "itertools"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
+
+[[package]]
+name = "js-sys"
+version = "0.3.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83bdfbace3a0e81a4253f73b49e960b053e396a11012cbd49b9b74d6a2b67062"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.97"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6"
+
+[[package]]
+name = "libhoney-rust"
+version = "0.1.6"
+source = "git+https://github.com/agrinman/libhoney-rust?rev=556a2fe57fb0836a815b7fbe4a2a3a43c54dbbdc#556a2fe57fb0836a815b7fbe4a2a3a43c54dbbdc"
+dependencies = [
+ "chrono",
+ "log",
+ "rand 0.8.4",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tokio",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
+
+[[package]]
+name = "lock_api"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matchers"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "memchr"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
+dependencies = [
+ "adler",
+ "autocfg",
+]
+
+[[package]]
+name = "mio"
+version = "0.7.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16"
+dependencies = [
+ "libc",
+ "log",
+ "miow",
+ "ntapi",
+ "winapi",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "multipart"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d050aeedc89243f5347c3e237e3e13dc76fbe4ae3742a57b94dc14f69acf76d4"
+dependencies = [
+ "buf_redux",
+ "httparse",
+ "log",
+ "mime",
+ "mime_guess",
+ "quick-error",
+ "rand 0.7.3",
+ "safemem",
+ "tempfile",
+ "twoway",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8d96b2e1c8da3957d58100b09f102c6d9cfdfced01b7ec5a8974044bb09dbd4"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nom"
+version = "5.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
+dependencies = [
+ "memchr",
+ "version_check",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a"
+
+[[package]]
+name = "object"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a38f2be3697a57b4060074ff41b44c16870d916ad7877c17696e063257482bc7"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "549430950c79ae24e6d02e0b7404534ecf311d94cc9f861e9e4020187d13d885"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "209efc2fe0e980c8849efacdb567f975a1c80245c4f6980d6f012733bfa851af"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "os_type"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96eaebe22d9f12429b1af6a0b5dd411ccfc5cb5968710abbb8c512046be9df90"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018"
+dependencies = [
+ "cfg-if 1.0.0",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pest"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+dependencies = [
+ "ucd-trie",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "pretty_env_logger"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d"
+dependencies = [
+ "env_logger",
+ "log",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+
+[[package]]
+name = "proc-macro-nested"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc 0.2.0",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.3",
+ "rand_hc 0.3.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom 0.2.3",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
+dependencies = [
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
+dependencies = [
+ "getrandom 0.2.3",
+ "redox_syscall",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2296f2fac53979e8ccbc4a1136b25dcefd37be9ed7e4a1f6b05a6029c84ff124"
+dependencies = [
+ "base64 0.13.0",
+ "bytes 1.0.1",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body 0.4.2",
+ "hyper",
+ "hyper-rustls",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded 0.7.0",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg 0.7.0",
+]
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rusoto_core"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02aff20978970d47630f08de5f0d04799497818d16cafee5aec90c4b4d0806cf"
+dependencies = [
+ "async-trait",
+ "base64 0.13.0",
+ "bytes 1.0.1",
+ "crc32fast",
+ "futures",
+ "http",
+ "hyper",
+ "hyper-tls",
+ "lazy_static",
+ "log",
+ "rusoto_credential",
+ "rusoto_signature",
+ "rustc_version",
+ "serde",
+ "serde_json",
+ "tokio",
+ "xml-rs",
+]
+
+[[package]]
+name = "rusoto_credential"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e91e4c25ea8bfa6247684ff635299015845113baaa93ba8169b9e565701b58e"
+dependencies = [
+ "async-trait",
+ "chrono",
+ "dirs-next",
+ "futures",
+ "hyper",
+ "serde",
+ "serde_json",
+ "shlex",
+ "tokio",
+ "zeroize",
+]
+
+[[package]]
+name = "rusoto_dynamodb"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f26af40f36409cb8fae3069690f78f638f747b55c7b90f338d5ed36016b0cda"
+dependencies = [
+ "async-trait",
+ "bytes 1.0.1",
+ "futures",
+ "rusoto_core",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rusoto_signature"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5486e6b1673ab3e0ba1ded284fb444845fe1b7f41d13989a54dd60f62a7b2baa"
+dependencies = [
+ "base64 0.13.0",
+ "bytes 1.0.1",
+ "futures",
+ "hex",
+ "hmac",
+ "http",
+ "hyper",
+ "log",
+ "md5",
+ "percent-encoding",
+ "pin-project-lite",
+ "rusoto_credential",
+ "rustc_version",
+ "serde",
+ "sha2",
+ "time 0.2.27",
+ "tokio",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dead70b0b5e03e9c814bcb6b01e03e68f7c57a80aa48c72ec92152ab3e818d49"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+dependencies = [
+ "base64 0.13.0",
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092"
+dependencies = [
+ "openssl-probe",
+ "rustls",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[package]]
+name = "schannel"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
+dependencies = [
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23a2ac85147a3a11d77ecf1bc7166ec0b92febfa4461c37944e180f319ece467"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e4effb91b4b8b6fb7732e670b6cee160278ff8e6bf485c7805d9e319d76e284"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser 0.7.0",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser 0.10.2",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97"
+dependencies = [
+ "dtoa",
+ "itoa",
+ "serde",
+ "url",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c4cfa741c5832d0ef7fab46cabed29c2aae926db0b11bb2069edd8db5e64e16"
+dependencies = [
+ "block-buffer",
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
+
+[[package]]
+name = "sha2"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362ae5752fd2137731f9fa25fd4d9058af34666ca1966fb969119cc35719f12"
+dependencies = [
+ "block-buffer",
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79c719719ee05df97490f80a45acfc99e5a30ce98a1e4fb67aee422745ae14e3"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shlex"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527"
+
+[[package]]
+name = "smallvec"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
+
+[[package]]
+name = "socket2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "standback"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "stdweb"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
+dependencies = [
+ "discard",
+ "rustc_version",
+ "stdweb-derive",
+ "stdweb-internal-macros",
+ "stdweb-internal-runtime",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "stdweb-derive"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "syn",
+]
+
+[[package]]
+name = "stdweb-internal-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
+dependencies = [
+ "base-x",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha1",
+ "syn",
+]
+
+[[package]]
+name = "stdweb-internal-runtime"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c"
+dependencies = [
+ "clap",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2"
+
+[[package]]
+name = "syn"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "rand 0.8.4",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa6f76457f59514c7eeb4e59d891395fab0b2fd1d40723ae737d64153392e9c6"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a36768c0fbf1bb15eca10defa29526bda730a2376c2ab4393ccfa16fb1a318d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.2.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242"
+dependencies = [
+ "const_fn",
+ "libc",
+ "standback",
+ "stdweb",
+ "time-macros",
+ "version_check",
+ "winapi",
+]
+
+[[package]]
+name = "time-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
+dependencies = [
+ "proc-macro-hack",
+ "time-macros-impl",
+]
+
+[[package]]
+name = "time-macros-impl"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "standback",
+ "syn",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fb2ed024293bb19f7a5dc54fe83bf86532a44c12a2bb8ba40d64a4509395ca2"
+dependencies = [
+ "autocfg",
+ "bytes 1.0.1",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "once_cell",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "tokio-macros",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c49e3df43841dafb86046472506755d8501c5615673955f6aa17181125d13c37"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8864d706fdb3cc0843a49647ac892720dac98a6eeb818b77190592cf4994066"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1a5f475f1b9d077ea1017ecbc60890fda8e54942d680ca0b1d2b47cfa2d861b"
+dependencies = [
+ "futures-util",
+ "log",
+ "pin-project",
+ "tokio",
+ "tungstenite 0.12.0",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e96bb520beab540ab664bd5a9cfeaa1fcd846fa68c830b42e2c8963071251d2"
+dependencies = [
+ "futures-util",
+ "log",
+ "pin-project",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+ "tungstenite 0.13.0",
+ "webpki",
+ "webpki-roots",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1caa0b0c8d94a049db56b5acf8cba99dc0623aab1b26d5b5f5e2d945846b3592"
+dependencies = [
+ "bytes 1.0.1",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+
+[[package]]
+name = "tracing"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d"
+dependencies = [
+ "cfg-if 1.0.0",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c42e6fa53307c8a17e4ccd4dc81cf5ec38db9209f59b222210375b54ee40d1e2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "tracing-distributed"
+version = "0.3.1"
+source = "git+https://github.com/agrinman/tracing-honeycomb?rev=687bafa722ccd584f45aa470fbb637bc57c999cd#687bafa722ccd584f45aa470fbb637bc57c999cd"
+dependencies = [
+ "itertools",
+ "tracing",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-honeycomb"
+version = "0.3.0"
+source = "git+https://github.com/agrinman/tracing-honeycomb?rev=687bafa722ccd584f45aa470fbb637bc57c999cd#687bafa722ccd584f45aa470fbb637bc57c999cd"
+dependencies = [
+ "chrono",
+ "libhoney-rust",
+ "rand 0.7.3",
+ "sha-1",
+ "tracing",
+ "tracing-core",
+ "tracing-distributed",
+ "uuid",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b"
+dependencies = [
+ "serde",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa5553bf0883ba7c9cbe493b085c29926bd41b66afc31ff72cf17ff4fb60dcd5"
+dependencies = [
+ "ansi_term 0.12.1",
+ "chrono",
+ "lazy_static",
+ "matchers",
+ "regex",
+ "serde",
+ "serde_json",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-serde",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0d7f5db438199a6e2609debe3f69f808d074e0a2888ee0bccb45fe234d03f4"
+dependencies = [
+ "async-trait",
+ "cfg-if 1.0.0",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna",
+ "ipnet",
+ "lazy_static",
+ "log",
+ "rand 0.8.4",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6ad17b608a64bd0735e67bde16b0636f8aa8591f831a25d18443ed00a699770"
+dependencies = [
+ "cfg-if 1.0.0",
+ "futures-util",
+ "ipconfig",
+ "lazy_static",
+ "log",
+ "lru-cache",
+ "parking_lot",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "tungstenite"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ada8297e8d70872fa9a551d93250a9f407beb9f37ef86494eb20012a2ff7c24"
+dependencies = [
+ "base64 0.13.0",
+ "byteorder",
+ "bytes 1.0.1",
+ "http",
+ "httparse",
+ "input_buffer",
+ "log",
+ "rand 0.8.4",
+ "sha-1",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "tungstenite"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe8dada8c1a3aeca77d6b51a4f1314e0f4b8e438b7b1b71e3ddaca8080e4093"
+dependencies = [
+ "base64 0.13.0",
+ "byteorder",
+ "bytes 1.0.1",
+ "http",
+ "httparse",
+ "input_buffer",
+ "log",
+ "rand 0.8.4",
+ "rustls",
+ "sha-1",
+ "thiserror",
+ "url",
+ "utf-8",
+ "webpki",
+ "webpki-roots",
+]
+
+[[package]]
+name = "tunnelto"
+version = "0.1.19"
+dependencies = [
+ "askama",
+ "bytes 1.0.1",
+ "chrono",
+ "cli-table",
+ "colored",
+ "dirs",
+ "futures",
+ "http-body 0.3.1",
+ "httparse",
+ "human-panic",
+ "hyper",
+ "hyper-rustls",
+ "indicatif",
+ "lazy_static",
+ "log",
+ "pretty_env_logger",
+ "reqwest",
+ "semver 0.11.0",
+ "serde",
+ "serde_json",
+ "serde_urlencoded 0.6.1",
+ "structopt",
+ "thiserror",
+ "tokio",
+ "tokio-rustls",
+ "tokio-tungstenite 0.14.0",
+ "tungstenite 0.13.0",
+ "tunnelto_lib",
+ "uuid",
+ "warp",
+ "webpki-roots",
+]
+
+[[package]]
+name = "tunnelto_lib"
+version = "0.1.19"
+dependencies = [
+ "base64 0.11.0",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "sha2",
+]
+
+[[package]]
+name = "tunnelto_server"
+version = "0.1.10"
+dependencies = [
+ "async-trait",
+ "base64 0.11.0",
+ "chrono",
+ "dashmap",
+ "futures",
+ "hex",
+ "hmac-sha256",
+ "httparse",
+ "lazy_static",
+ "pretty_env_logger",
+ "rand 0.7.3",
+ "reqwest",
+ "rusoto_core",
+ "rusoto_credential",
+ "rusoto_dynamodb",
+ "serde",
+ "serde_json",
+ "sha2",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-honeycomb",
+ "tracing-subscriber",
+ "trust-dns-resolver",
+ "tunnelto_lib",
+ "url",
+ "uuid",
+ "warp",
+]
+
+[[package]]
+name = "twoway"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "typenum"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0"
+dependencies = [
+ "matches",
+]
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+dependencies = [
+ "getrandom 0.2.3",
+ "serde",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70455df2fdf4e9bf580a92e443f1eb0303c390d682e2ea817312c9e81f8c3399"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "warp"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "332d47745e9a0c38636dbd454729b147d16bd1ed08ae67b3ab281c4506771054"
+dependencies = [
+ "bytes 1.0.1",
+ "futures",
+ "headers",
+ "http",
+ "hyper",
+ "log",
+ "mime",
+ "mime_guess",
+ "multipart",
+ "percent-encoding",
+ "pin-project",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded 0.7.0",
+ "tokio",
+ "tokio-stream",
+ "tokio-tungstenite 0.13.0",
+ "tokio-util",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd"
+dependencies = [
+ "cfg-if 1.0.0",
+ "serde",
+ "serde_json",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fba7978c679d53ce2d0ac80c8c175840feb849a161664365d1287b41f2e67f1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e828417b379f3df7111d3a2a9e5753706cae29c41f7c4029ee9fd77f3e09e582"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "widestring"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "winreg"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a"
+
+[[package]]
+name = "zeroize"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd"
diff --git a/nixpkgs/pkgs/tools/networking/tunnelto/default.nix b/nixpkgs/pkgs/tools/networking/tunnelto/default.nix
new file mode 100644
index 000000000000..450556808394
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tunnelto/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv
+, rustPlatform
+, fetchFromGitHub
+, openssl
+, pkg-config
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tunnelto";
+  version = "unstable-2022-09-25";
+
+  src = fetchFromGitHub {
+    owner = "agrinman";
+    repo = pname;
+    rev = "06428f13c638180dd349a4c42a17b569ab51a25f";
+    sha256 = "sha256-84jGcR/E1QoqIlbGu67muYUtZU66ZJtj4tdZvmYbII4=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "libhoney-rust-0.1.6" = "sha256-orKQ+MNHF1VSo74XahY9NFf5qMm0Wj95y6nbaG3Ivog=";
+      "tracing-distributed-0.3.1" = "sha256-i+2wqIp1BFmHEnd56Wp49LzEkTR9k5xgru1UIjj3Qys=";
+    };
+  };
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+  buildInputs = [ ]
+    ++ lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "Expose your local web server to the internet with a public URL";
+    homepage = "https://tunnelto.dev";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tuntox/default.nix b/nixpkgs/pkgs/tools/networking/tuntox/default.nix
new file mode 100644
index 000000000000..64a13e99669a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tuntox/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, stdenv
+, cscope
+, fetchFromGitHub
+, fetchpatch
+, git
+, libevent
+, libopus
+, libsodium
+, libtoxcore
+, libvpx
+, msgpack
+, pkg-config
+, python3
+, python3Packages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tuntox";
+  version = "0.0.10";
+
+  src = fetchFromGitHub {
+    owner = "gjedeer";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-c/0OxUH8iw8nRuVg4Fszf6Z/JiEV+m0B2ofzy81uFu8=";
+  };
+
+  nativeBuildInputs = [ cscope git pkg-config ];
+
+  buildInputs = [ libopus libtoxcore libsodium libevent libvpx msgpack python3 ];
+
+  pythonBuildInputs = with python3Packages; [
+    jinja2
+    requests
+  ];
+
+  patches = [
+    # https://github.com/gjedeer/tuntox/pull/67
+    (fetchpatch {
+      url = "https://github.com/gjedeer/tuntox/compare/a646402f42e120c7148d4de29dbdf5b09027a80a..365d2e5cbc0e3655fb64c204db0515f5f4cdf5a4.patch";
+      sha256 = "sha256-P3uIRnV+pBi3s3agGYUMt2PZU4CRxx/DUR8QPVQ+UN8=";
+    })
+  ];
+
+  postPatch = ''
+      substituteInPlace gitversion.h --replace '7d45afdf7d00a95a8c3687175e2b1669fa1f7745' '365d2e5cbc0e3655fb64c204db0515f5f4cdf5a4'
+    '' + lib.optionalString stdenv.isLinux ''
+      substituteInPlace Makefile --replace ' -static ' ' '
+      substituteInPlace Makefile --replace 'CC=gcc' ' '
+    '' + lib.optionalString stdenv.isDarwin ''
+      substituteInPlace Makefile.mac --replace '.git/HEAD .git/index' ' '
+      substituteInPlace Makefile.mac --replace '/usr/local/lib/libtoxcore.a' '${libtoxcore}/lib/libtoxcore.a'
+      substituteInPlace Makefile.mac --replace '/usr/local/lib/libsodium.a' '${libsodium}/lib/libsodium.dylib'
+      substituteInPlace Makefile.mac --replace 'CC=gcc' ' '
+    '';
+
+  buildPhase = ''
+    '' + lib.optionalString stdenv.isLinux ''
+      make
+    '' + lib.optionalString stdenv.isDarwin ''
+      make -f Makefile.mac tuntox
+    '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv tuntox $out/bin/
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tunnel TCP connections over the Tox protocol";
+    homepage = "https://github.com/gjedeer/tuntox";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [
+      willcohen
+    ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tunwg/default.nix b/nixpkgs/pkgs/tools/networking/tunwg/default.nix
new file mode 100644
index 000000000000..1b36709baa48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tunwg/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tunwg";
+  version = "24.01.15+9f04d73";
+
+  src = fetchFromGitHub {
+    owner = "ntnj";
+    repo = "tunwg";
+    rev = "v${version}";
+    hash = "sha256-M7iMl80uxw0hKg4sK8Tv6U5+nMOK8eTfb9SGn+U2+8E=";
+  };
+
+  vendorHash = "sha256-VlH41hOWC5QBCYZxiKCUZRmw2vHRbbPyzToRMU6kDO8=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Secure private tunnel to your local servers";
+    homepage = "https://github.com/ntnj/tunwg";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "tunwg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/twa/default.nix b/nixpkgs/pkgs/tools/networking/twa/default.nix
new file mode 100644
index 000000000000..ab73eae70046
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/twa/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, bash
+, curl
+, dnsutils
+, gawk
+, jq
+, ncurses
+, netcat
+}:
+
+stdenv.mkDerivation rec {
+  pname = "twa";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "trailofbits";
+    repo = "twa";
+    rev = "v${version}";
+    hash = "sha256-8c1o03iwStmhjKHmEXIZGyaSOAJRlOuhu0ERjCO5SHg=";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ bash
+                  curl
+                  dnsutils
+                  gawk
+                  jq
+                  netcat ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm 0755 twa "$out/bin/twa"
+    install -Dm 0755 tscore "$out/bin/tscore"
+    install -Dm 0644 twa.1 "$out/share/man/man1/twa.1"
+    install -Dm 0644 README.md "$out/share/doc/twa/README.md"
+
+    wrapProgram "$out/bin/twa" \
+      --prefix PATH : ${lib.makeBinPath [ curl
+                                          dnsutils
+                                          gawk
+                                          jq
+                                          ncurses
+                                          netcat ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A tiny web auditor with strong opinions";
+    homepage = "https://github.com/trailofbits/twa";
+    license = licenses.mit;
+    maintainers = with maintainers; [ avaq ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ua/default.nix b/nixpkgs/pkgs/tools/networking/ua/default.nix
new file mode 100644
index 000000000000..425d7b61c4a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ua/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub, pkg-config, glib, libxml2 }:
+
+buildGoModule rec {
+  pname = "ua";
+  version = "unstable-2022-10-23";
+
+  src = fetchFromGitHub {
+    owner = "sloonz";
+    repo = "ua";
+    rev = "f636f5eec425754d8a8be8e767c5b3e4f31fe1f9";
+    hash = "sha256-U9fApk/dyz7xSho2W8UT0OGIeOYR/v9lM0LHN2OqTEQ=";
+  };
+
+  vendorHash = "sha256-0O80uhxSVsV9N7Z/FgaLwcjZqeb4MqSCE1YW5Zd32ns=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib libxml2 ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/sloonz/ua";
+    license = licenses.isc;
+    description = "Universal Aggregator";
+    maintainers = with maintainers; [ ttuegel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ubridge/default.nix b/nixpkgs/pkgs/tools/networking/ubridge/default.nix
new file mode 100644
index 000000000000..085ee4f76d0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ubridge/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libpcap
+, testers
+, ubridge
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ubridge";
+  version = "0.9.18";
+
+  src = fetchFromGitHub {
+    owner = "GNS3";
+    repo = "ubridge";
+    rev = "v${version}";
+    sha256 = "0jg66jhhpv4c9340fsdp64hf9h253i8r81fknxa0gq241ripp3jn";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "/usr/local/bin" "$out/bin" \
+      --replace "setcap" "#setcap"
+  '';
+
+  buildInputs = [ libpcap ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install -Dm755 ubridge $out/bin/ubridge
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = ubridge;
+      command = "ubridge -v";
+    };
+  };
+
+  meta = with lib; {
+    description = "Bridge for UDP tunnels, Ethernet, TAP, and VMnet interfaces";
+    longDescription = ''
+      uBridge is a simple application to create user-land bridges between
+      various technologies. Currently bridging between UDP tunnels, Ethernet
+      and TAP interfaces is supported. Packet capture is also supported.
+    '';
+    inherit (src.meta) homepage;
+    changelog = "https://github.com/GNS3/ubridge/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    mainProgram = "ubridge";
+    maintainers = with maintainers; [ primeos ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ucspi-tcp/default.nix b/nixpkgs/pkgs/tools/networking/ucspi-tcp/default.nix
new file mode 100644
index 000000000000..4b307079266b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ucspi-tcp/default.nix
@@ -0,0 +1,87 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ucspi-tcp";
+  version = "0.88";
+
+  src = fetchurl {
+    url = "https://cr.yp.to/ucspi-tcp/ucspi-tcp-${version}.tar.gz";
+    sha256 = "171yl9kfm8w7l17dfxild99mbf877a9k5zg8yysgb1j8nz51a1ja";
+  };
+
+  # Plain upstream tarball doesn't build, get patches from Debian
+  patches = [
+    (fetchurl {
+      url = "http://ftp.de.debian.org/debian/pool/main/u/ucspi-tcp/ucspi-tcp_0.88-3.diff.gz";
+      sha256 = "0mzmhz8hjkrs0khmkzs5i0s1kgmgaqz07h493bd5jj5fm5njxln6";
+    })
+    ./remove-setuid.patch
+  ];
+
+  # Apply Debian patches
+  postPatch = ''
+    for fname in debian/diff/*.diff; do
+        echo "Applying patch $fname"
+        patch < "$fname"
+    done
+  '';
+
+  # The build system is weird; 'make install' doesn't install anything, instead
+  # it builds an executable called ./install (from C code) which installs
+  # binaries to the directory given on line 1 in ./conf-home.
+  #
+  # Also, assume getgroups and setgroups work, instead of doing a build time
+  # test that breaks on NixOS (I think because nixbld users lack CAP_SETGID
+  # capability).
+  preBuild = ''
+    echo "$out" > conf-home
+
+    echo "main() { return 0; }" > chkshsgr.c
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/man/man1"
+
+    # run the newly built installer
+    ./install
+
+    # Install Debian man pages (upstream has none)
+    cp debian/ucspi-tcp-man/*.1 "$out/share/man/man1"
+  '';
+
+  meta = with lib; {
+    description = "Command-line tools for building TCP client-server applications";
+    longDescription = ''
+      tcpserver waits for incoming connections and, for each connection, runs a
+      program of your choice. Your program receives environment variables
+      showing the local and remote host names, IP addresses, and port numbers.
+
+      tcpserver offers a concurrency limit to protect you from running out of
+      processes and memory. When you are handling 40 (by default) simultaneous
+      connections, tcpserver smoothly defers acceptance of new connections.
+
+      tcpserver also provides TCP access control features, similar to
+      tcp-wrappers/tcpd's hosts.allow but much faster. Its access control rules
+      are compiled into a hashed format with cdb, so it can easily deal with
+      thousands of different hosts.
+
+      This package includes a recordio tool that monitors all the input and
+      output of a server.
+
+      tcpclient makes a TCP connection and runs a program of your choice. It
+      sets up the same environment variables as tcpserver.
+
+      This package includes several sample clients built on top of tcpclient:
+      who@, date@, finger@, http@, tcpcat, and mconnect.
+
+      tcpserver and tcpclient conform to UCSPI, the UNIX Client-Server Program
+      Interface, using the TCP protocol. UCSPI tools are available for several
+      different networks.
+    '';
+    homepage = "http://cr.yp.to/ucspi-tcp.html";
+    license = licenses.publicDomain;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ucspi-tcp/remove-setuid.patch b/nixpkgs/pkgs/tools/networking/ucspi-tcp/remove-setuid.patch
new file mode 100644
index 000000000000..dd6933208046
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ucspi-tcp/remove-setuid.patch
@@ -0,0 +1,15 @@
+diff --git a/hier.c b/hier.c
+index 5663ada..1d73b84 100644
+--- a/hier.c
++++ b/hier.c
+@@ -2,8 +2,8 @@
+ 
+ void hier()
+ {
+-  h(auto_home,-1,-1,02755);
+-  d(auto_home,"bin",-1,-1,02755);
++  h(auto_home,-1,-1,0755);
++  d(auto_home,"bin",-1,-1,0755);
+ 
+   c(auto_home,"bin","tcpserver",-1,-1,0755);
+   c(auto_home,"bin","tcprules",-1,-1,0755);
diff --git a/nixpkgs/pkgs/tools/networking/udp2raw/default.nix b/nixpkgs/pkgs/tools/networking/udp2raw/default.nix
new file mode 100644
index 000000000000..b6466ce0be57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/udp2raw/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, makeWrapper
+, iptables
+}:
+
+stdenv.mkDerivation rec {
+  pname = "udp2raw";
+  version = "20230206.0";
+
+  src = fetchFromGitHub {
+    owner = "wangyu-";
+    repo = "udp2raw";
+    rev = version;
+    hash = "sha256-mchSaqw6sOJ7+dydCM8juP7QMOVUrPL4MFA79Rvyjdo=";
+  };
+
+  patches = [
+    # Add install target to CMakeLists.txt
+    # https://github.com/wangyu-/udp2raw/pull/469
+    (fetchpatch {
+      url = "https://github.com/wangyu-/udp2raw/commit/4559e6d47bb69fda0fbd3fb4b7d04ddb1cf5e2ae.patch";
+      hash = "sha256-2csZdXmMW89tjXhN5QIK0rnMSXlFjLvwGnmieeKRX90=";
+    })
+  ];
+
+  postPatch = ''
+    echo 'const char *gitversion = "${version}";' > git_version.h
+    # Adress sanitization crashes the application, reported upstream at https://github.com/wangyu-/udp2raw/issues/474
+    substituteInPlace CMakeLists.txt --replace "sanitize=address," "sanitize="
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/udp2raw" --prefix PATH : "${lib.makeBinPath [ iptables ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/wangyu-/udp2raw";
+    description = "A tunnel which turns UDP traffic into encrypted UDP/FakeTCP/ICMP traffic by using a raw socket";
+    license = licenses.mit;
+    changelog = "https://github.com/wangyu-/udp2raw/releases/tag/${version}";
+    maintainers = with maintainers; [ chvp ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/udpreplay/default.nix b/nixpkgs/pkgs/tools/networking/udpreplay/default.nix
new file mode 100644
index 000000000000..53147a9fe7a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/udpreplay/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, cmake, libpcap, fetchFromGitHub, lib }:
+stdenv.mkDerivation rec {
+  pname = "updreplay";
+  version = "1.1.0";
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libpcap ];
+  src = fetchFromGitHub {
+    owner = "rigtorp";
+    repo = "udpreplay";
+    rev = "v${version}";
+    hash = "sha256-kF9a3pjQbFKf25NKyK7uSq0AAO6JK7QeChLhm9Z3wEA=";
+  };
+
+  meta = with lib; {
+    description = "Replay UDP packets from a pcap file";
+    longDescription = ''
+      udpreplay is a lightweight alternative to tcpreplay for replaying UDP unicast and multicast streams from a pcap file.
+    '';
+    homepage = "https://github.com/rigtorp/udpreplay";
+    license = licenses.mit;
+    maintainers = [ maintainers.considerate ];
+    platforms = platforms.linux;
+    mainProgram = "udpreplay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/udptunnel/default.nix b/nixpkgs/pkgs/tools/networking/udptunnel/default.nix
new file mode 100644
index 000000000000..396d105ca287
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/udptunnel/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "udptunnel";
+  version = "19";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/udptunnel/udptunnel-r${version}.tar.gz";
+    sha256 = "1hkrn153rdyrp9g15z4d5dq44cqlnby2bfplp6z0g3862lnv7m3l";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/udptunnel
+    cp udptunnel $out/bin
+    cp README COPYING* $out/share/udptunnel
+  '';
+
+  meta = {
+    homepage = "https://code.google.com/archive/p/udptunnel/";
+    description = "Tunnels TCP over UDP packets";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+    mainProgram = "udptunnel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/uget-integrator/default.nix b/nixpkgs/pkgs/tools/networking/uget-integrator/default.nix
new file mode 100644
index 000000000000..2d069ea07f02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/uget-integrator/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, uget, python3Packages }:
+
+stdenv.mkDerivation rec {
+  pname = "uget-integrator";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "ugetdm";
+    repo = "uget-integrator";
+    rev = "v${version}";
+    sha256 = "0bfqwbpprxp5sy49p2hqcjdfj7zamnp2hhcnnyccffkn7pghx8pp";
+  };
+
+  nativeBuildInputs = [ python3Packages.wrapPython ];
+
+  buildInputs = [ uget python3Packages.python ];
+
+  installPhase = ''
+    for f in conf/com.ugetdm.{chrome,firefox}.json; do
+      substituteInPlace $f --replace "/usr" "$out"
+    done
+
+    install -D -t $out/bin                                   bin/uget-integrator
+    install -D -t $out/etc/opt/chrome/native-messaging-hosts conf/com.ugetdm.chrome.json
+    install -D -t $out/etc/chromium/native-messaging-hosts   conf/com.ugetdm.chrome.json
+    install -D -t $out/etc/opera/native-messaging-hosts      conf/com.ugetdm.chrome.json
+    install -D -t $out/lib/mozilla/native-messaging-hosts    conf/com.ugetdm.firefox.json
+
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    description = "Native messaging host to integrate uGet Download Manager with web browsers";
+    homepage = "https://github.com/ugetdm/uget-integrator";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/uget/default.nix b/nixpkgs/pkgs/tools/networking/uget/default.nix
new file mode 100644
index 000000000000..5f255ecb80f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/uget/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchurl, pkg-config, intltool, openssl, curl, libnotify,
+  libappindicator-gtk3, gst_all_1, gtk3, dconf, wrapGAppsHook, aria2 ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "uget";
+  version = "2.2.3-1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/urlget/${pname}-${version}.tar.gz";
+    sha256 = "0jchvgkkphhwp2z7vd4axxr9ns8b6vqc22b2z8a906qm8916wd8i";
+  };
+
+  # Apply upstream fix for -fno-common toolchains.
+  postPatch = ''
+    # TODO: remove the replace once upstream fix is released:
+    #   https://sourceforge.net/p/urlget/uget2/ci/14890943c52e0a5cd2a87d8a1c51cbffebee7cf9/
+    substituteInPlace ui-gtk/UgtkBanner.h --replace "} banner;" "};"
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    intltool
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    openssl
+    curl
+    libnotify
+    libappindicator-gtk3
+    gtk3
+    (lib.getLib dconf)
+  ]
+  ++ (with gst_all_1; [ gstreamer gst-plugins-base gst-plugins-good ])
+  ++ (lib.optional (aria2 != null) aria2);
+
+  enableParallelBuilding = true;
+
+  preFixup = lib.optionalString (aria2 != null)
+               ''gappsWrapperArgs+=(--suffix PATH : "${aria2}/bin")'';
+
+  meta = with lib; {
+    description = "Download manager using GTK and libcurl";
+    longDescription = ''
+      uGet is a VERY Powerful download manager application with a large
+      inventory of features but is still very light-weight and low on
+      resources, so don't let the impressive list of features scare you into
+      thinking that it "might be too powerful" because remember power is good
+      and lightweight power is uGet!
+    '';
+    homepage = "http://www.ugetdm.com";
+    license = licenses.lgpl21;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/unbound/default.nix b/nixpkgs/pkgs/tools/networking/unbound/default.nix
new file mode 100644
index 000000000000..d2e657e4e13f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/unbound/default.nix
@@ -0,0 +1,171 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchpatch
+, openssl
+, nettle
+, expat
+, libevent
+, libsodium
+, protobufc
+, hiredis
+, python ? null
+, swig
+, dns-root-data
+, pkg-config
+, makeWrapper
+, symlinkJoin
+, bison
+, nixosTests
+  #
+  # By default unbound will not be built with systemd support. Unbound is a very
+  # common dependency. The transitive dependency closure of systemd also
+  # contains unbound.
+  # Since most (all?) (lib)unbound users outside of the unbound daemon usage do
+  # not need the systemd integration it is likely best to just default to no
+  # systemd integration.
+  # For the daemon use-case, that needs to notify systemd, use `unbound-with-systemd`.
+  #
+, withSystemd ? false
+, systemd ? null
+  # optionally support DNS-over-HTTPS as a server
+, withDoH ? false
+, withECS ? false
+, withDNSCrypt ? false
+, withDNSTAP ? false
+, withTFO ? false
+, withRedis ? false
+# Avoid .lib depending on lib.getLib openssl
+# The build gets a little hacky, so in some cases we disable this approach.
+, withSlimLib ? stdenv.isLinux && !stdenv.hostPlatform.isMusl && !withDNSTAP
+# enable support for python plugins in unbound: note this is distinct from pyunbound
+# see https://unbound.docs.nlnetlabs.nl/en/latest/developer/python-modules.html
+, withPythonModule ? false
+, withLto ? !stdenv.hostPlatform.isStatic && !stdenv.hostPlatform.isMinGW
+, withMakeWrapper ? !stdenv.hostPlatform.isMinGW
+, libnghttp2
+
+# for passthru.tests
+, gnutls
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "unbound";
+  version = "1.19.0";
+
+  src = fetchurl {
+    url = "https://nlnetlabs.nl/downloads/unbound/unbound-${finalAttrs.version}.tar.gz";
+    hash = "sha256-qXUyRohUxhwt5IykFw3oVP07yVyAQ7sM+w/iZgWWZiQ=";
+  };
+
+  outputs = [ "out" "lib" "man" ]; # "dev" would only split ~20 kB
+
+  nativeBuildInputs =
+    lib.optionals withMakeWrapper [ makeWrapper ]
+    ++ [ pkg-config ]
+    ++ lib.optionals withPythonModule [ swig ];
+
+  buildInputs = [ openssl nettle expat libevent ]
+    ++ lib.optionals withSystemd [ systemd ]
+    ++ lib.optionals withDoH [ libnghttp2 ]
+    ++ lib.optionals withPythonModule [ python ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-ssl=${openssl.dev}"
+    "--with-libexpat=${expat.dev}"
+    "--with-libevent=${libevent.dev}"
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "--sbindir=\${out}/bin"
+    "--with-rootkey-file=${dns-root-data}/root.key"
+    "--enable-pie"
+    "--enable-relro-now"
+  ] ++ lib.optionals (!withLto) [
+    "--disable-flto"
+  ] ++ lib.optionals withSystemd [
+    "--enable-systemd"
+  ] ++ lib.optionals withPythonModule [
+    "--with-pythonmodule"
+  ] ++ lib.optionals withDoH [
+    "--with-libnghttp2=${libnghttp2.dev}"
+  ] ++ lib.optionals withECS [
+    "--enable-subnet"
+  ] ++ lib.optionals withDNSCrypt [
+    "--enable-dnscrypt"
+    "--with-libsodium=${symlinkJoin { name = "libsodium-full"; paths = [ libsodium.dev libsodium.out ]; }}"
+  ] ++ lib.optionals withDNSTAP [
+    "--enable-dnstap"
+    "--with-protobuf-c=${protobufc}"
+  ] ++ lib.optionals withTFO [
+    "--enable-tfo-client"
+    "--enable-tfo-server"
+  ] ++ lib.optionals withRedis [
+    "--enable-cachedb"
+    "--with-libhiredis=${hiredis}"
+  ];
+
+  PROTOC_C = lib.optionalString withDNSTAP "${protobufc}/bin/protoc-c";
+
+  # Remove references to compile-time dependencies that are included in the configure flags
+  postConfigure = let
+    inherit (builtins) storeDir;
+  in ''
+    sed -E '/CONFCMDLINE/ s;${storeDir}/[a-z0-9]{32}-;${storeDir}/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-;g' -i config.h
+  '';
+
+  nativeCheckInputs = [ bison ];
+
+  doCheck = true;
+
+  postPatch = lib.optionalString withPythonModule ''
+    substituteInPlace Makefile.in \
+      --replace "\$(DESTDIR)\$(PYTHON_SITE_PKG)" "$out/${python.sitePackages}"
+  '';
+
+  installFlags = [ "configfile=\${out}/etc/unbound/unbound.conf" ];
+
+  postInstall = ''
+    make unbound-event-install
+  '' + lib.optionalString withMakeWrapper ''
+    wrapProgram $out/bin/unbound-control-setup \
+      --prefix PATH : ${lib.makeBinPath [ openssl ]}
+  '' + lib.optionalString (withMakeWrapper && withPythonModule) ''
+    wrapProgram $out/bin/unbound \
+      --prefix PYTHONPATH : "$out/${python.sitePackages}" \
+      --argv0 $out/bin/unbound
+  '';
+
+  preFixup = lib.optionalString withSlimLib
+    # Build libunbound again, but only against nettle instead of openssl.
+    # This avoids gnutls.out -> unbound.lib -> lib.getLib openssl.
+    ''
+      configureFlags="$configureFlags --with-nettle=${nettle.dev} --with-libunbound-only"
+      configurePhase
+      buildPhase
+      if [ -n "$doCheck" ]; then
+          checkPhase
+      fi
+      installPhase
+    ''
+  # get rid of runtime dependencies on $dev outputs
+  + ''substituteInPlace "$lib/lib/libunbound.la" ''
+  + lib.concatMapStrings
+    (pkg: lib.optionalString (pkg ? dev) " --replace '-L${pkg.dev}/lib' '-L${pkg.out}/lib' --replace '-R${pkg.dev}/lib' '-R${pkg.out}/lib'")
+    (builtins.filter (p: p != null) finalAttrs.buildInputs);
+
+  passthru.tests = {
+    inherit gnutls;
+    nixos-test = nixosTests.unbound;
+    nixos-test-exporter = nixosTests.prometheus-exporters.unbound;
+  };
+
+  meta = with lib; {
+    description = "Validating, recursive, and caching DNS resolver";
+    license = licenses.bsd3;
+    homepage = "https://www.unbound.net";
+    maintainers = lib.teams.helsinki-systems.members;
+    platforms = platforms.unix ++ platforms.windows;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/unbound/python.nix b/nixpkgs/pkgs/tools/networking/unbound/python.nix
new file mode 100644
index 000000000000..94f2374d904d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/unbound/python.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, unbound, openssl, expat, libevent, swig, pythonPackages }:
+
+let
+  inherit (pythonPackages) python;
+in
+stdenv.mkDerivation rec {
+  pname = "pyunbound";
+  inherit (unbound) version src;
+  patches = unbound.patches or null;
+
+  nativeBuildInputs = [ swig ];
+
+  buildInputs = [ openssl expat libevent python ];
+
+  postPatch = ''
+    substituteInPlace Makefile.in \
+      --replace "\$(DESTDIR)\$(PYTHON_SITE_PKG)" "$out/${python.sitePackages}" \
+      --replace "\$(LIBTOOL) --mode=install cp _unbound.la" "cp _unbound.la"
+  '';
+
+  preConfigure = "export PYTHON_VERSION=${python.pythonVersion}";
+
+  configureFlags = [
+    "--with-ssl=${openssl.dev}"
+    "--with-libexpat=${expat.dev}"
+    "--with-libevent=${libevent.dev}"
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "--sbindir=\${out}/bin"
+    "--enable-pie"
+    "--enable-relro-now"
+    "--with-pyunbound"
+    "DESTDIR=$out"
+    "PREFIX="
+  ];
+
+  preInstall = ''
+    mkdir -p $out/${python.sitePackages} $out/etc/${pname}
+    cp .libs/_unbound.so .libs/libunbound.so* $out/${python.sitePackages}
+    substituteInPlace _unbound.la \
+      --replace "-L.libs $PWD/libunbound.la" "-L$out/${python.sitePackages}"
+  '';
+
+  installFlags = [
+    "configfile=\${out}/etc/unbound/unbound.conf"
+    "pyunbound-install"
+    "lib"
+  ];
+
+  # All we want is the Unbound Python module
+  postInstall = ''
+    # Generate the built in root anchor and root key and store these in a logical place
+    # to be used by tools depending only on the Python module
+    $out/bin/unbound-anchor -l | head -1 > $out/etc/${pname}/root.anchor
+    $out/bin/unbound-anchor -l | tail --lines=+2 - > $out/etc/${pname}/root.key
+    # We don't need anything else
+    rm -r $out/bin $out/share $out/include $out/etc/unbound
+  ''
+  # patchelf is only available on Linux and no patching is needed on darwin
+  + lib.optionalString stdenv.isLinux ''
+    patchelf --replace-needed libunbound.so.8 $out/${python.sitePackages}/libunbound.so.8 $out/${python.sitePackages}/_unbound.so
+  '';
+
+  meta = with lib; {
+    description = "Python library for Unbound, the validating, recursive, and caching DNS resolver";
+    license = licenses.bsd3;
+    homepage = "https://www.unbound.net";
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/updog/default.nix b/nixpkgs/pkgs/tools/networking/updog/default.nix
new file mode 100644
index 000000000000..7fb8e0bfec37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/updog/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "updog";
+  version = "1.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "7n/ddjF6eJklo+T79+/zBxSHryebc2W9gxwxsb2BbF4=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    colorama flask flask-httpauth werkzeug pyopenssl
+  ];
+
+  checkPhase = ''
+    $out/bin/updog --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Updog is a replacement for Python's SimpleHTTPServer";
+    homepage = "https://github.com/sc0tfree/updog";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ethancedwards8 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/uqmi/default.nix b/nixpkgs/pkgs/tools/networking/uqmi/default.nix
new file mode 100644
index 000000000000..6fd830435aa1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/uqmi/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchgit, cmake, perl, libubox, json_c }:
+
+stdenv.mkDerivation {
+  pname = "uqmi";
+  version = "unstable-2024-01-16";
+
+  src = fetchgit {
+    url = "https://git.openwrt.org/project/uqmi.git";
+    rev = "c3488b831ce6285c8107704156b9b8ed7d59deb3";
+    hash = "sha256-O5CeLk0WYuBs3l5xBUk9kXDRMzFvYSRoqP28KJ5Ztos=";
+  };
+
+  postPatch = ''
+    substituteInPlace data/gen-header.pl --replace /usr/bin/env ""
+    patchShebangs .
+  '';
+
+  nativeBuildInputs = [ cmake perl ];
+  buildInputs = [ libubox json_c ];
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals (stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.version "12") [
+    # Needed with GCC 12 but breaks on darwin (with clang) or older gcc
+    "-Wno-error=dangling-pointer"
+    "-Wno-error=maybe-uninitialized"
+  ]);
+
+  meta = with lib; {
+    description = "Tiny QMI command line utility";
+    homepage = "https://git.openwrt.org/?p=project/uqmi.git;a=summary";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ fpletz mkg20001 ];
+    mainProgram = "uqmi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/urlwatch/default.nix b/nixpkgs/pkgs/tools/networking/urlwatch/default.nix
new file mode 100644
index 000000000000..a17b4b88da3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/urlwatch/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "urlwatch";
+  version = "2.28";
+
+  src = fetchFromGitHub {
+    owner = "thp";
+    repo = "urlwatch";
+    rev = version;
+    hash = "sha256-dGohG2+HrsuKegPAn1fmpLYPpovEEUsx+C/0sp2/cX0=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    appdirs
+    cssselect
+    jq
+    keyring
+    lxml
+    markdown2
+    matrix-client
+    minidb
+    playwright
+    pushbullet-py
+    pycodestyle
+    pyyaml
+    requests
+  ];
+
+  # no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool for monitoring webpages for updates";
+    homepage = "https://thp.io/2008/urlwatch/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kmein tv ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/userhosts/default.nix b/nixpkgs/pkgs/tools/networking/userhosts/default.nix
new file mode 100644
index 000000000000..10bfbd650aa7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/userhosts/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "userhosts";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "figiel";
+    repo = "hosts";
+    rev = "v${version}";
+    hash = "sha256-9uF0fYl4Zz/Ia2UKx7CBi8ZU8jfWoBfy2QSgTSwXo5A";
+  };
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A libc wrapper providing per-user hosts file";
+    homepage = "https://github.com/figiel/hosts";
+    maintainers = [ maintainers.bobvanderlinden ];
+    license = licenses.cc0;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/uwimap/clang-fix.patch b/nixpkgs/pkgs/tools/networking/uwimap/clang-fix.patch
new file mode 100644
index 000000000000..7c10a212922f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/uwimap/clang-fix.patch
@@ -0,0 +1,306 @@
+diff -ur a/src/c-client/netmsg.c b/src/c-client/netmsg.c
+--- a/src/c-client/netmsg.c	2011-07-22 20:20:18.000000000 -0400
++++ b/src/c-client/netmsg.c	2023-10-17 22:23:29.026638315 -0400
+@@ -29,6 +29,7 @@
+ 
+ #include <stdio.h>
+ #include <errno.h>
++#include <time.h>
+ extern int errno;		/* just in case */
+ #include "c-client.h"
+ #include "netmsg.h"
+diff -ur a/src/c-client/nntp.c b/src/c-client/nntp.c
+--- a/src/c-client/nntp.c	2011-07-22 20:20:18.000000000 -0400
++++ b/src/c-client/nntp.c	2023-10-17 22:23:05.195194961 -0400
+@@ -29,6 +29,7 @@
+ 
+ #include <ctype.h>
+ #include <stdio.h>
++#include <time.h>
+ #include "c-client.h"
+ #include "newsrc.h"
+ #include "netmsg.h"
+diff -ur a/src/dmail/dmail.c b/src/dmail/dmail.c
+--- a/src/dmail/dmail.c	2011-07-22 20:19:57.000000000 -0400
++++ b/src/dmail/dmail.c	2023-10-17 22:44:23.049223758 -0400
+@@ -27,6 +27,7 @@
+  */
+ 
+ #include <stdio.h>
++#include <ctype.h>
+ #include <pwd.h>
+ #include <errno.h>
+ extern int errno;		/* just in case */
+diff -ur a/src/mlock/mlock.c b/src/mlock/mlock.c
+--- a/src/mlock/mlock.c	2011-07-22 20:19:57.000000000 -0400
++++ b/src/mlock/mlock.c	2023-10-17 22:44:44.533985203 -0400
+@@ -31,6 +31,9 @@
+ #include <stdio.h>
+ #include <sysexits.h>
+ #include <syslog.h>
++#include <ctype.h>
++#include <time.h>
++#include <unistd.h>
+ #include <grp.h>
+ #include <sys/types.h>
+ #include <sys/file.h>
+diff -ur a/src/osdep/unix/dummy.c b/src/osdep/unix/dummy.c
+--- a/src/osdep/unix/dummy.c	2011-07-22 20:20:10.000000000 -0400
++++ b/src/osdep/unix/dummy.c	2023-10-17 22:23:17.123963204 -0400
+@@ -30,6 +30,7 @@
+ #include <stdio.h>
+ #include <ctype.h>
+ #include <errno.h>
++#include <time.h>
+ extern int errno;		/* just in case */
+ #include "mail.h"
+ #include "osdep.h"
+diff -ur a/src/osdep/unix/mbx.c b/src/osdep/unix/mbx.c
+--- a/src/osdep/unix/mbx.c	2011-07-22 20:20:11.000000000 -0400
++++ b/src/osdep/unix/mbx.c	2023-10-17 22:25:13.189158845 -0400
+@@ -41,6 +41,7 @@
+ #include "mail.h"
+ #include "osdep.h"
+ #include <pwd.h>
++#include <utime.h>
+ #include <sys/stat.h>
+ #include <sys/time.h>
+ #include "misc.h"
+diff -ur a/src/osdep/unix/mh.c b/src/osdep/unix/mh.c
+--- a/src/osdep/unix/mh.c	2011-07-22 20:20:09.000000000 -0400
++++ b/src/osdep/unix/mh.c	2023-10-17 22:31:50.240740603 -0400
+@@ -30,6 +30,7 @@
+ #include <stdio.h>
+ #include <ctype.h>
+ #include <errno.h>
++#include <utime.h>
+ extern int errno;		/* just in case */
+ #include "mail.h"
+ #include "osdep.h"
+@@ -103,8 +104,8 @@
+ 	      long options);
+ long mh_append (MAILSTREAM *stream,char *mailbox,append_t af,void *data);
+ 
+-int mh_select (struct direct *name);
+-int mh_numsort (const void *d1,const void *d2);
++int mh_select (const struct direct *name);
++int mh_numsort (const struct dirent **d1,const struct dirent **d2);
+ char *mh_file (char *dst,char *name);
+ long mh_canonicalize (char *pattern,char *ref,char *pat);
+ void mh_setdate (char *file,MESSAGECACHE *elt);
+@@ -1194,7 +1195,7 @@
+  * Returns: T to use file name, NIL to skip it
+  */
+ 
+-int mh_select (struct direct *name)
++int mh_select (const struct direct *name)
+ {
+   char c;
+   char *s = name->d_name;
+@@ -1209,10 +1210,10 @@
+  * Returns: negative if d1 < d2, 0 if d1 == d2, postive if d1 > d2
+  */
+ 
+-int mh_numsort (const void *d1,const void *d2)
++int mh_numsort (const struct dirent **d1,const struct dirent **d2)
+ {
+-  return atoi ((*(struct direct **) d1)->d_name) -
+-    atoi ((*(struct direct **) d2)->d_name);
++  return atoi ((*d1)->d_name) -
++    atoi ((*d2)->d_name);
+ }
+ 
+ 
+diff -ur a/src/osdep/unix/mix.c b/src/osdep/unix/mix.c
+--- a/src/osdep/unix/mix.c	2011-07-22 20:20:10.000000000 -0400
++++ b/src/osdep/unix/mix.c	2023-10-17 22:35:22.368131654 -0400
+@@ -125,7 +125,7 @@
+ long mix_create (MAILSTREAM *stream,char *mailbox);
+ long mix_delete (MAILSTREAM *stream,char *mailbox);
+ long mix_rename (MAILSTREAM *stream,char *old,char *newname);
+-int mix_rselect (struct direct *name);
++int mix_rselect (const struct direct *name);
+ MAILSTREAM *mix_open (MAILSTREAM *stream);
+ void mix_close (MAILSTREAM *stream,long options);
+ void mix_abort (MAILSTREAM *stream);
+@@ -140,8 +140,8 @@
+ long mix_ping (MAILSTREAM *stream);
+ void mix_check (MAILSTREAM *stream);
+ long mix_expunge (MAILSTREAM *stream,char *sequence,long options);
+-int mix_select (struct direct *name);
+-int mix_msgfsort (const void *d1,const void *d2);
++int mix_select (const struct direct *name);
++int mix_msgfsort (const struct dirent **d1,const struct dirent **d2);
+ long mix_addset (SEARCHSET **set,unsigned long start,unsigned long size);
+ long mix_burp (MAILSTREAM *stream,MIXBURP *burp,unsigned long *reclaimed);
+ long mix_burp_check (SEARCHSET *set,size_t size,char *file);
+@@ -587,7 +587,7 @@
+  * Returns: T if mix file name, NIL otherwise
+  */
+ 
+-int mix_rselect (struct direct *name)
++int mix_rselect (const struct direct *name)
+ {
+   return mix_dirfmttest (name->d_name);
+ }
+@@ -1146,7 +1146,7 @@
+  * ".mix" with no suffix was used by experimental versions
+  */
+ 
+-int mix_select (struct direct *name)
++int mix_select (const struct direct *name)
+ {
+   char c,*s;
+ 				/* make sure name has prefix */
+@@ -1165,10 +1165,10 @@
+  * Returns: -1 if d1 < d2, 0 if d1 == d2, 1 d1 > d2
+  */
+ 
+-int mix_msgfsort (const void *d1,const void *d2)
++int mix_msgfsort (const struct dirent **d1,const struct dirent **d2)
+ {
+-  char *n1 = (*(struct direct **) d1)->d_name + sizeof (MIXNAME) - 1;
+-  char *n2 = (*(struct direct **) d2)->d_name + sizeof (MIXNAME) - 1;
++  char *n1 = (*d1)->d_name + sizeof (MIXNAME) - 1;
++  char *n2 = (*d2)->d_name + sizeof (MIXNAME) - 1;
+   return compare_ulong (*n1 ? strtoul (n1,NIL,16) : 0,
+ 			*n2 ? strtoul (n2,NIL,16) : 0);
+ }
+diff -ur a/src/osdep/unix/mmdf.c b/src/osdep/unix/mmdf.c
+--- a/src/osdep/unix/mmdf.c	2011-07-22 20:20:10.000000000 -0400
++++ b/src/osdep/unix/mmdf.c	2023-10-17 22:25:37.095313031 -0400
+@@ -33,6 +33,7 @@
+ #include "mail.h"
+ #include "osdep.h"
+ #include <time.h>
++#include <utime.h>
+ #include <sys/stat.h>
+ #include "pseudo.h"
+ #include "fdstring.h"
+diff -ur a/src/osdep/unix/mtx.c b/src/osdep/unix/mtx.c
+--- a/src/osdep/unix/mtx.c	2011-07-22 20:20:10.000000000 -0400
++++ b/src/osdep/unix/mtx.c	2023-10-17 22:26:48.973160400 -0400
+@@ -37,6 +37,7 @@
+ #include <stdio.h>
+ #include <ctype.h>
+ #include <errno.h>
++#include <utime.h>
+ extern int errno;		/* just in case */
+ #include "mail.h"
+ #include "osdep.h"
+diff -ur a/src/osdep/unix/mx.c b/src/osdep/unix/mx.c
+--- a/src/osdep/unix/mx.c	2011-07-22 20:20:09.000000000 -0400
++++ b/src/osdep/unix/mx.c	2023-10-17 22:33:25.621907970 -0400
+@@ -30,6 +30,7 @@
+ #include <stdio.h>
+ #include <ctype.h>
+ #include <errno.h>
++#include <utime.h>
+ extern int errno;		/* just in case */
+ #include "mail.h"
+ #include "osdep.h"
+@@ -98,8 +99,8 @@
+ long mx_append_msg (MAILSTREAM *stream,char *flags,MESSAGECACHE *elt,
+ 		    STRING *st,SEARCHSET *set);
+ 
+-int mx_select (struct direct *name);
+-int mx_numsort (const void *d1,const void *d2);
++int mx_select (const struct direct *name);
++int mx_numsort (const struct dirent **d1,const struct dirent **d2);
+ char *mx_file (char *dst,char *name);
+ long mx_lockindex (MAILSTREAM *stream);
+ void mx_unlockindex (MAILSTREAM *stream);
+@@ -1110,7 +1111,7 @@
+  * Returns: T to use file name, NIL to skip it
+  */
+ 
+-int mx_select (struct direct *name)
++int mx_select (const struct direct *name)
+ {
+   char c;
+   char *s = name->d_name;
+@@ -1125,10 +1126,10 @@
+  * Returns: negative if d1 < d2, 0 if d1 == d2, postive if d1 > d2
+  */
+ 
+-int mx_numsort (const void *d1,const void *d2)
++int mx_numsort (const struct dirent **d1,const struct dirent **d2)
+ {
+-  return atoi ((*(struct direct **) d1)->d_name) -
+-    atoi ((*(struct direct **) d2)->d_name);
++  return atoi ((*d1)->d_name) -
++    atoi ((*d2)->d_name);
+ }
+ 
+ 
+diff -ur a/src/osdep/unix/news.c b/src/osdep/unix/news.c
+--- a/src/osdep/unix/news.c	2011-07-22 20:20:10.000000000 -0400
++++ b/src/osdep/unix/news.c	2023-10-17 22:29:32.461013229 -0400
+@@ -76,8 +76,8 @@
+ long news_delete (MAILSTREAM *stream,char *mailbox);
+ long news_rename (MAILSTREAM *stream,char *old,char *newname);
+ MAILSTREAM *news_open (MAILSTREAM *stream);
+-int news_select (struct direct *name);
+-int news_numsort (const void *d1,const void *d2);
++int news_select (const struct direct *name);
++int news_numsort (const struct dirent **d1,const struct dirent **d2);
+ void news_close (MAILSTREAM *stream,long options);
+ void news_fast (MAILSTREAM *stream,char *sequence,long flags);
+ void news_flags (MAILSTREAM *stream,char *sequence,long flags);
+@@ -402,7 +402,7 @@
+  * Returns: T to use file name, NIL to skip it
+  */
+ 
+-int news_select (struct direct *name)
++int news_select (const struct direct *name)
+ {
+   char c;
+   char *s = name->d_name;
+@@ -417,10 +417,10 @@
+  * Returns: negative if d1 < d2, 0 if d1 == d2, postive if d1 > d2
+  */
+ 
+-int news_numsort (const void *d1,const void *d2)
++int news_numsort (const struct dirent **d1,const struct dirent **d2)
+ {
+-  return atoi ((*(struct direct **) d1)->d_name) -
+-    atoi ((*(struct direct **) d2)->d_name);
++  return atoi ((*d1)->d_name) -
++    atoi ((*d2)->d_name);
+ }
+ 
+ 
+diff -ur a/src/osdep/unix/tenex.c b/src/osdep/unix/tenex.c
+--- a/src/osdep/unix/tenex.c	2011-07-22 20:20:10.000000000 -0400
++++ b/src/osdep/unix/tenex.c	2023-10-17 22:26:15.349497223 -0400
+@@ -42,6 +42,8 @@
+ #include <stdio.h>
+ #include <ctype.h>
+ #include <errno.h>
++#include <time.h>
++#include <utime.h>
+ extern int errno;		/* just in case */
+ #include "mail.h"
+ #include "osdep.h"
+diff -ur a/src/osdep/unix/unix.c b/src/osdep/unix/unix.c
+--- a/src/osdep/unix/unix.c	2011-07-22 20:20:10.000000000 -0400
++++ b/src/osdep/unix/unix.c	2023-10-17 22:24:46.358134773 -0400
+@@ -45,6 +45,7 @@
+ #include "mail.h"
+ #include "osdep.h"
+ #include <time.h>
++#include <utime.h>
+ #include <sys/stat.h>
+ #include "unix.h"
+ #include "pseudo.h"
+diff -ur a/src/tmail/tmail.c b/src/tmail/tmail.c
+--- a/src/tmail/tmail.c	2011-07-22 20:19:58.000000000 -0400
++++ b/src/tmail/tmail.c	2023-10-17 22:36:32.723585260 -0400
+@@ -27,6 +27,7 @@
+  */
+ 
+ #include <stdio.h>
++#include <ctype.h>
+ #include <pwd.h>
+ #include <errno.h>
+ extern int errno;		/* just in case */
diff --git a/nixpkgs/pkgs/tools/networking/uwimap/default.nix b/nixpkgs/pkgs/tools/networking/uwimap/default.nix
new file mode 100644
index 000000000000..a39f0d4660fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/uwimap/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchurl, fetchpatch, pam, openssl, libkrb5 }:
+
+stdenv.mkDerivation rec {
+  pname = "uw-imap";
+  version = "2007f";
+
+  src = fetchurl {
+    url = "ftp://ftp.cac.washington.edu/imap/imap-${version}.tar.gz";
+    sha256 = "0a2a00hbakh0640r2wdpnwr8789z59wnk7rfsihh3j0vbhmmmqak";
+  };
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "RANLIB=${stdenv.cc.targetPrefix}ranlib"
+    (if stdenv.isDarwin
+    then "osx"
+    else "lnp") # Linux with PAM modules;
+  ] ++ lib.optional stdenv.isx86_64 "EXTRACFLAGS=-fPIC"; # -fPIC is required to compile php with imap on x86_64 systems
+
+
+  hardeningDisable = [ "format" ];
+
+  buildInputs = [
+    openssl
+    (if stdenv.isDarwin then libkrb5 else pam)  # Matches the make target.
+  ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://salsa.debian.org/holmgren/uw-imap/raw/dcb42981201ea14c2d71c01ebb4a61691b6f68b3/debian/patches/1006_openssl1.1_autoverify.patch";
+      sha256 = "09xb58awvkhzmmjhrkqgijzgv7ia381ablf0y7i1rvhcqkb5wga7";
+    })
+    # Required to build with newer versions of clang. Fixes call to undeclared functions errors
+    # and incompatible function pointer conversions.
+    ./clang-fix.patch
+  ];
+
+  postPatch = ''
+    sed -i src/osdep/unix/Makefile -e 's,/usr/local/ssl,${openssl.dev},'
+    sed -i src/osdep/unix/Makefile -e 's,^SSLCERTS=.*,SSLCERTS=/etc/ssl/certs,'
+    sed -i src/osdep/unix/Makefile -e 's,^SSLLIB=.*,SSLLIB=${lib.getLib openssl}/lib,'
+  '';
+
+  preConfigure = ''
+    makeFlagsArray+=("ARRC=${stdenv.cc.targetPrefix}ar rc")
+  '';
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin
+    "-I${openssl.dev}/include/openssl";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib $out/include/c-client
+    cp c-client/*.h osdep/unix/*.h c-client/linkage.c c-client/auths.c $out/include/c-client/
+    cp c-client/c-client.a $out/lib/libc-client.a
+    cp mailutil/mailutil imapd/imapd dmail/dmail mlock/mlock mtest/mtest tmail/tmail \
+      tools/{an,ua} $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.washington.edu/imap/";
+    description = "UW IMAP toolkit - IMAP-supporting software developed by the UW";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+  };
+
+  passthru = {
+    withSSL = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/v2ray/default.nix b/nixpkgs/pkgs/tools/networking/v2ray/default.nix
new file mode 100644
index 000000000000..4d783fb47345
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/v2ray/default.nix
@@ -0,0 +1,61 @@
+{ lib, fetchFromGitHub, symlinkJoin, buildGoModule, makeWrapper, nixosTests
+, nix-update-script
+, v2ray-geoip, v2ray-domain-list-community
+, assets ? [ v2ray-geoip v2ray-domain-list-community ]
+}:
+
+buildGoModule rec {
+  pname = "v2ray-core";
+  version = "5.13.0";
+
+  src = fetchFromGitHub {
+    owner = "v2fly";
+    repo = "v2ray-core";
+    rev = "v${version}";
+    hash = "sha256-x7LVBmfm9M0fGBvLTz5Bbf01h8IT1yDJyeO1csKfb3I=";
+  };
+
+  # `nix-update` doesn't support `vendorHash` yet.
+  # https://github.com/Mic92/nix-update/pull/95
+  vendorHash = "sha256-ZBvHu4BEmQi6PQwRHuVwx/6X4gBqlRR44OktKRBGcs4=";
+
+  ldflags = [ "-s" "-w" ];
+
+  subPackages = [ "main" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 "$GOPATH"/bin/main $out/bin/v2ray
+    install -Dm444 release/config/systemd/system/v2ray{,@}.service -t $out/lib/systemd/system
+    install -Dm444 release/config/*.json -t $out/etc/v2ray
+    runHook postInstall
+  '';
+
+  assetsDrv = symlinkJoin {
+    name = "v2ray-assets";
+    paths = assets;
+  };
+
+  postFixup = ''
+    wrapProgram $out/bin/v2ray \
+      --suffix XDG_DATA_DIRS : $assetsDrv/share
+    substituteInPlace $out/lib/systemd/system/*.service \
+      --replace User=nobody DynamicUser=yes \
+      --replace /usr/local/bin/ $out/bin/ \
+      --replace /usr/local/etc/ /etc/
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.simple-vmess-proxy-test = nixosTests.v2ray;
+  };
+
+  meta = {
+    homepage = "https://www.v2fly.org/en_US/";
+    description = "A platform for building proxies to bypass network restrictions";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ servalcatty ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/v2raya/default.nix b/nixpkgs/pkgs/tools/networking/v2raya/default.nix
new file mode 100644
index 000000000000..02f348a2df9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/v2raya/default.nix
@@ -0,0 +1,99 @@
+{ lib
+, fetchFromGitHub
+, mkYarnPackage
+, buildGoModule
+, makeWrapper
+, v2ray
+, v2ray-geoip
+, v2ray-domain-list-community
+, symlinkJoin
+, fetchYarnDeps
+}:
+let
+  pname = "v2raya";
+  version = "2.2.4.3";
+
+  src = fetchFromGitHub {
+    owner = "v2rayA";
+    repo = "v2rayA";
+    rev = "v${version}";
+    hash = "sha256-6643sdKVHOHrGRocTm881GCHoON4tlrKcNfOFMHwnQY=";
+    postFetch = "sed -i -e 's/npmmirror/yarnpkg/g' $out/gui/yarn.lock";
+  };
+  guiSrc = "${src}/gui";
+
+  web = mkYarnPackage {
+    inherit pname version;
+
+    src = guiSrc;
+    packageJSON = ./package.json;
+
+    offlineCache = fetchYarnDeps {
+      yarnLock = "${guiSrc}/yarn.lock";
+      sha256 = "sha256-rZIcVLolTMdtN27W6gCw9uk9m4N5v9SZn2563+aN/gs=";
+    };
+
+    buildPhase = ''
+      runHook preBuild
+      OUTPUT_DIR=$out yarn --offline build
+      runHook postBuild
+    '';
+
+    configurePhase = ''
+      runHook preConfigure
+      cp -r $node_modules node_modules
+      chmod +w node_modules
+      runHook postConfigure
+    '';
+
+    distPhase = "true";
+
+    dontInstall = true;
+    dontFixup = true;
+  };
+
+  assetsDir = symlinkJoin {
+    name = "assets";
+    paths = [ v2ray-geoip v2ray-domain-list-community ];
+  };
+
+in
+buildGoModule {
+  inherit pname version;
+
+  src = "${src}/service";
+  vendorHash = "sha256-wwDv2ThHwtnUpAnQoc0Ms0mGC44jRvABcE4K5MrF8S4=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/v2rayA/v2rayA/conf.Version=${version}"
+  ];
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  preBuild = ''
+    cp -a ${web} server/router/web
+  '';
+
+  postInstall = ''
+    install -Dm 444 ${src}/install/universal/v2raya.desktop -t $out/share/applications
+    install -Dm 444 ${src}/install/universal/v2raya.png -t $out/share/icons/hicolor/512x512/apps
+    substituteInPlace $out/share/applications/v2raya.desktop \
+      --replace 'Icon=/usr/share/icons/hicolor/512x512/apps/v2raya.png' 'Icon=v2raya'
+
+    wrapProgram $out/bin/v2rayA \
+      --prefix PATH ":" "${lib.makeBinPath [ v2ray ]}" \
+      --prefix XDG_DATA_DIRS ":" ${assetsDir}/share
+  '';
+
+  meta = with lib; {
+    description = "A Linux web GUI client of Project V which supports V2Ray, Xray, SS, SSR, Trojan and Pingtunnel";
+    homepage = "https://github.com/v2rayA/v2rayA";
+    mainProgram = "v2rayA";
+    license = licenses.agpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ elliot ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/v2raya/package.json b/nixpkgs/pkgs/tools/networking/v2raya/package.json
new file mode 100644
index 000000000000..531c64b76311
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/v2raya/package.json
@@ -0,0 +1,57 @@
+{
+  "name": "v2raya",
+  "version": "0.1.0",
+  "private": true,
+  "license": "GPL-3.0",
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "lint": "vue-cli-service lint"
+  },
+  "resolutions": {
+    "@achrinza/node-ipc": "^10.1.10"
+  },
+  "dependencies": {
+    "@achrinza/node-ipc": "^10.1.10",
+    "@mdi/font": "^5.8.55",
+    "@nuintun/qrcode": "^3.3.0",
+    "@vue/babel-preset-app": "^4.2.2",
+    "axios": "^0.21.1",
+    "buefy": "^0.9.22",
+    "clipboard": "^2.0.4",
+    "dayjs": "^1.10.6",
+    "js-base64": "^2.5.1",
+    "nanoid": "^3.1.23",
+    "normalize.css": "^8.0.1",
+    "pace-js": "^1.2.4",
+    "qrcode": "^1.4.2",
+    "register-service-worker": "^1.6.2",
+    "vue": "^2.7.14",
+    "vue-i18n": "^8.15.3",
+    "vue-router": "^3.0.6",
+    "vue-virtual-scroller": "^1.0.10",
+    "vuex": "^3.0.1",
+    "webpack-iconfont-plugin-nodejs": "^1.0.16"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.12.16",
+    "@babel/eslint-parser": "^7.12.16",
+    "@vue/cli-plugin-babel": "~5.0.8",
+    "@vue/cli-plugin-eslint": "~5.0.8",
+    "@vue/cli-plugin-router": "~5.0.8",
+    "@vue/cli-plugin-vuex": "~5.0.8",
+    "@vue/cli-service": "~5.0.8",
+    "@vue/eslint-config-prettier": "^5.0.0",
+    "css-loader": "^5.2.0",
+    "eslint": "^7.32.0",
+    "eslint-config-prettier": "^8.3.0",
+    "eslint-plugin-prettier": "^4.0.0",
+    "eslint-plugin-vue": "^8.0.3",
+    "highlight.js": "^11.4.0",
+    "prettier": "^2.4.1",
+    "sass": "^1.19.0",
+    "sass-loader": "^8.0.0",
+    "terser-webpack-plugin": "^5.3.6",
+    "urijs": "^1.19.11"
+  }
+}
diff --git a/nixpkgs/pkgs/tools/networking/vde2/default.nix b/nixpkgs/pkgs/tools/networking/vde2/default.nix
new file mode 100644
index 000000000000..83cee2e466af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vde2/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, libpcap, wolfssl }:
+
+stdenv.mkDerivation rec {
+  pname = "vde2";
+  version = "2.3.3";
+
+  src = fetchFromGitHub {
+    owner = "virtualsquare";
+    repo = "vde-2";
+    rev = "v${version}";
+    sha256 = "sha256-Yf6QB7j5lYld2XtqhYspK4037lTtimoFc7nCavCP+mU=";
+  };
+
+  patches = lib.optionals stdenv.hostPlatform.isMusl [
+    (fetchpatch {
+      url = "https://git.alpinelinux.org/aports/plain/main/vde2/musl-build-fix.patch?id=ddee2f86a48e087867d4a2c12849b2e3baccc238";
+      sha256 = "0b5382v541bkxhqylilcy34bh83ag96g71f39m070jzvi84kx8af";
+    })
+  ];
+
+  preConfigure = lib.optionalString (lib.versionAtLeast stdenv.hostPlatform.darwinMinVersion "11") ''
+    MACOSX_DEPLOYMENT_TARGET=10.16
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ libpcap wolfssl ];
+
+  meta = with lib; {
+    homepage = "https://github.com/virtualsquare/vde-2";
+    description = "Virtual Distributed Ethernet, an Ethernet compliant virtual network";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/vegeta/default.nix b/nixpkgs/pkgs/tools/networking/vegeta/default.nix
new file mode 100644
index 000000000000..a7b71272e9a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vegeta/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "vegeta";
+  version = "12.11.1";
+  rev = "6fbe391628eeeae1adf39522a55078797e6e7f2e";
+
+  src = fetchFromGitHub {
+    owner = "tsenart";
+    repo = "vegeta";
+    rev = "v${version}";
+    sha256 = "sha256-09DowdlbCsBQsAuAqC2QyUYvZHz7QmttO8Q6KHQCqLo=";
+  };
+
+  vendorHash = "sha256-5MvcZLg+NDDsqlpVV2FhTiEhXUJHq7eaP7Pba3iIipo=";
+
+  subPackages = [ "." ];
+
+  ldflags = (lib.mapAttrsToList (n: v: "-X main.${n}=${v}") {
+    Version = version;
+    Commit = rev;
+    Date = "1970-01-01T00:00:00Z";
+  }) ++ [ "-s" "-w" "-extldflags '-static'" ];
+
+  meta = with lib; {
+    description = "Versatile HTTP load testing tool";
+    longDescription = ''
+      Vegeta is a versatile HTTP load testing tool built out of a need to drill
+      HTTP services with a constant request rate. It can be used both as a
+      command line utility and a library.
+    '';
+    homepage = "https://github.com/tsenart/vegeta/";
+    changelog = "https://github.com/tsenart/vegeta/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mmahut ];
+    mainProgram = "vegeta";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/veilid/Cargo.lock b/nixpkgs/pkgs/tools/networking/veilid/Cargo.lock
new file mode 100644
index 000000000000..fbd257e1d69b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/veilid/Cargo.lock
@@ -0,0 +1,6425 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aead"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
+dependencies = [
+ "crypto-common",
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cipher 0.3.0",
+ "cpufeatures",
+ "opaque-debug",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if 1.0.0",
+ "getrandom",
+ "once_cell",
+ "version_check 0.9.4",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allo-isolate"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f56b7997817c178b853573e8bdfb6c3afe02810b43f17d766d6703560074b0c3"
+dependencies = [
+ "atomic",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_log-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e"
+
+[[package]]
+name = "android_log-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937"
+
+[[package]]
+name = "android_logger"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8619b80c242aa7bd638b5c7ddd952addeecb71f69c75e33f1d47b2804f8f883a"
+dependencies = [
+ "android_log-sys 0.2.0",
+ "env_logger 0.10.0",
+ "log",
+ "once_cell",
+]
+
+[[package]]
+name = "android_logger"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c494134f746c14dc653a35a4ea5aca24ac368529da5370ecf41fe0341c35772f"
+dependencies = [
+ "android_log-sys 0.3.1",
+ "env_logger 0.10.0",
+ "log",
+ "once_cell",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi-parser"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcb2392079bf27198570d6af79ecbd9ec7d8f16d3ec6b60933922fdb66287127"
+dependencies = [
+ "heapless",
+ "nom 4.2.3",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "arboard"
+version = "3.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc"
+dependencies = [
+ "clipboard-win",
+ "core-graphics",
+ "image",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "parking_lot 0.12.1",
+ "thiserror",
+ "winapi",
+ "x11rb",
+]
+
+[[package]]
+name = "argon2"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ba4cac0a46bc1d2912652a751c47f2a9f3a7fe89bcae2275d418f5270402f9"
+dependencies = [
+ "base64ct",
+ "blake2",
+ "cpufeatures",
+ "password-hash",
+]
+
+[[package]]
+name = "arraydeque"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0ffd3d69bd89910509a5d31d1f1353f38ccffdd116dd0099bbd6627f7bd8ad8"
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "as-slice"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45403b49e3954a4b8428a0ac21a4b7afadccf92bfd96273f1a58cd4812496ae0"
+dependencies = [
+ "generic-array 0.12.4",
+ "generic-array 0.13.3",
+ "generic-array 0.14.7",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "async-attributes"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 2.5.3",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0"
+dependencies = [
+ "async-lock 2.8.0",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 2.0.1",
+ "futures-lite 1.13.0",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "blocking",
+ "futures-lite 1.13.0",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock 2.8.0",
+ "autocfg",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "futures-lite 1.13.0",
+ "log",
+ "parking",
+ "polling 2.8.0",
+ "rustix 0.37.27",
+ "slab",
+ "socket2 0.4.10",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-io"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ed9d5715c2d329bf1b4da8d60455b99b187f27ba726df2883799af9af60997"
+dependencies = [
+ "async-lock 3.0.0",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "futures-io",
+ "futures-lite 2.0.1",
+ "parking",
+ "polling 3.3.0",
+ "rustix 0.38.21",
+ "slab",
+ "tracing",
+ "waker-fn",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener 2.5.3",
+]
+
+[[package]]
+name = "async-lock"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45e900cdcd39bb94a14487d3f7ef92ca222162e6c7c3fe7cb3550ea75fb486ed"
+dependencies = [
+ "event-listener 3.0.1",
+ "event-listener-strategy",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-process"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
+dependencies = [
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "async-signal",
+ "blocking",
+ "cfg-if 1.0.0",
+ "event-listener 3.0.1",
+ "futures-lite 1.13.0",
+ "rustix 0.38.21",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-signal"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5"
+dependencies = [
+ "async-io 2.2.0",
+ "async-lock 2.8.0",
+ "atomic-waker",
+ "cfg-if 1.0.0",
+ "futures-core",
+ "futures-io",
+ "rustix 0.38.21",
+ "signal-hook-registry",
+ "slab",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-attributes",
+ "async-channel",
+ "async-global-executor",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "async-process",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite 1.13.0",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-std-resolver"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0928198152da571a19145031360f34fc7569ef2dc387681565f330c811a5ba9b"
+dependencies = [
+ "async-std",
+ "async-trait",
+ "futures-io",
+ "futures-util",
+ "pin-utils",
+ "socket2 0.5.5",
+ "trust-dns-resolver",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "async-task"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1"
+
+[[package]]
+name = "async-tls"
+version = "0.12.0"
+source = "git+https://github.com/async-rs/async-tls?rev=c58588a#c58588a276e6180f3ef99f4ec3bf9176c5f0f58c"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "rustls",
+ "rustls-pemfile",
+ "webpki-roots 0.22.6",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "async-tungstenite"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1e9efbe14612da0a19fb983059a0b621e9cf6225d7018ecab4f9988215540dc"
+dependencies = [
+ "async-tls",
+ "futures-io",
+ "futures-util",
+ "log",
+ "pin-project-lite",
+ "tungstenite",
+]
+
+[[package]]
+name = "async_executors"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a982d2f86de6137cc05c9db9a915a19886c97911f9790d04f174cede74be01a5"
+dependencies = [
+ "async-std",
+ "blanket",
+ "futures-core",
+ "futures-task",
+ "futures-timer",
+ "futures-util",
+ "pin-project",
+ "rustc_version",
+ "tokio",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async_io_stream"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c"
+dependencies = [
+ "futures",
+ "pharos",
+ "rustc_version",
+]
+
+[[package]]
+name = "atomic"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "attohttpc"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2"
+dependencies = [
+ "http",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "axum"
+version = "0.6.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags 1.3.2",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bindgen"
+version = "0.59.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "clap 2.34.0",
+ "env_logger 0.9.3",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "which",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "blake2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "blake3"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "cc",
+ "cfg-if 1.0.0",
+ "constant_time_eq",
+]
+
+[[package]]
+name = "blanket"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0b121a9fe0df916e362fb3271088d071159cdf11db0e4182d02152850756eff"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "block-modes"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e"
+dependencies = [
+ "block-padding",
+ "cipher 0.3.0",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
+
+[[package]]
+name = "blocking"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
+dependencies = [
+ "async-channel",
+ "async-lock 2.8.0",
+ "async-task",
+ "fastrand 2.0.1",
+ "futures-io",
+ "futures-lite 1.13.0",
+ "piper",
+ "tracing",
+]
+
+[[package]]
+name = "boringssl-src"
+version = "0.5.2+6195bf8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ab565ccc5e276ea82a2013dd08bf2c999866b06daf1d4f30fee419c4aaec6d5"
+dependencies = [
+ "cmake",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "capnp"
+version = "0.18.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "499cea1db22c19b7a823fa4876330700077b388cc7de2c5477028df00bcb4ae4"
+dependencies = [
+ "embedded-io",
+]
+
+[[package]]
+name = "capnpc"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5067f3c8ee94d993d03150153e9a57a6ff330127b1c1ad76475051e1cef79c2d"
+dependencies = [
+ "capnp",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom 7.1.3",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chacha20"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cipher 0.4.4",
+ "cpufeatures",
+]
+
+[[package]]
+name = "chacha20poly1305"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
+dependencies = [
+ "aead",
+ "chacha20",
+ "cipher 0.4.4",
+ "poly1305",
+ "zeroize",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+ "zeroize",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags 1.3.2",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim 0.10.0",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "color-eyre"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204"
+dependencies = [
+ "backtrace",
+ "eyre",
+ "indenter",
+ "once_cell",
+ "owo-colors",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "config"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7"
+dependencies = [
+ "async-trait",
+ "json5",
+ "lazy_static",
+ "nom 7.1.3",
+ "pathdiff",
+ "ron",
+ "rust-ini",
+ "serde",
+ "serde_json",
+ "toml 0.5.11",
+ "yaml-rust",
+]
+
+[[package]]
+name = "console-api"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd326812b3fd01da5bb1af7d340d0d555fd3d4b641e7f1dfcf5962a902952787"
+dependencies = [
+ "futures-core",
+ "prost 0.12.1",
+ "prost-types",
+ "tonic 0.10.2",
+ "tracing-core",
+]
+
+[[package]]
+name = "console-subscriber"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7481d4c57092cd1c19dd541b92bdce883de840df30aa5d03fd48a3935c01842e"
+dependencies = [
+ "console-api",
+ "crossbeam-channel",
+ "crossbeam-utils",
+ "futures-task",
+ "hdrhistogram",
+ "humantime",
+ "prost-types",
+ "serde",
+ "serde_json",
+ "thread_local",
+ "tokio",
+ "tokio-stream",
+ "tonic 0.10.2",
+ "tracing",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+
+[[package]]
+name = "constant_time_eq"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot 0.12.1",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array 0.14.7",
+ "rand_core",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
+dependencies = [
+ "generic-array 0.14.7",
+ "subtle",
+]
+
+[[package]]
+name = "ctor"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e366bff8cd32dd8754b0991fb66b279dc48f598c3a18914852a6673deef583"
+dependencies = [
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf"
+dependencies = [
+ "nix 0.27.1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "cursive"
+version = "0.20.0"
+source = "git+https://gitlab.com/veilid/cursive.git#a76fc9050f69edf56bc37efc63194050b9f222e4"
+dependencies = [
+ "ahash 0.8.6",
+ "async-std",
+ "cfg-if 1.0.0",
+ "crossbeam-channel",
+ "crossterm",
+ "cursive_core",
+ "lazy_static",
+ "libc",
+ "log",
+ "signal-hook",
+ "tokio",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "cursive-flexi-logger-view"
+version = "0.5.0"
+source = "git+https://gitlab.com/veilid/cursive-flexi-logger-view.git#7c931536b8c57339011bbe2ee604e431c91c0aa8"
+dependencies = [
+ "arraydeque",
+ "cursive_core",
+ "flexi_logger",
+ "lazy_static",
+ "log",
+ "time",
+ "unicode-width",
+]
+
+[[package]]
+name = "cursive-macros"
+version = "0.1.0"
+source = "git+https://gitlab.com/veilid/cursive.git#a76fc9050f69edf56bc37efc63194050b9f222e4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cursive_buffered_backend"
+version = "0.6.1"
+source = "git+https://gitlab.com/veilid/cursive-buffered-backend.git#a0f5242882b0d42a0b18baa68b2d8d6dcaa6dee4"
+dependencies = [
+ "cursive_core",
+ "enumset",
+ "log",
+ "smallvec",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "cursive_core"
+version = "0.3.7"
+source = "git+https://gitlab.com/veilid/cursive.git#a76fc9050f69edf56bc37efc63194050b9f222e4"
+dependencies = [
+ "ahash 0.8.6",
+ "ansi-parser",
+ "async-std",
+ "crossbeam-channel",
+ "cursive-macros",
+ "enum-map",
+ "enumset",
+ "lazy_static",
+ "log",
+ "num",
+ "owning_ref",
+ "serde_json",
+ "serde_yaml",
+ "time",
+ "tokio",
+ "toml 0.7.8",
+ "unicode-segmentation",
+ "unicode-width",
+ "xi-unicode",
+]
+
+[[package]]
+name = "cursive_table_view"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8935dd87d19c54b7506b245bc988a7b4e65b1058e1d0d64c0ad9b3188e48060"
+dependencies = [
+ "cursive_core",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "4.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "curve25519-dalek-derive",
+ "digest 0.10.7",
+ "fiat-crypto",
+ "platforms",
+ "rustc_version",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "curve25519-dalek-derive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "daemonize"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab8bfdaacb3c887a54d41bdf48d3af8873b3f5566469f8ba21b92057509f116e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core 0.13.4",
+ "darling_macro 0.13.4",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e"
+dependencies = [
+ "darling_core 0.20.3",
+ "darling_macro 0.20.3",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.10.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core 0.13.4",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
+dependencies = [
+ "darling_core 0.20.3",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if 1.0.0",
+ "hashbrown 0.14.2",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core 0.9.9",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+
+[[package]]
+name = "der"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
+dependencies = [
+ "const-oid",
+ "zeroize",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer 0.10.4",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "directories"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dlv-list"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d"
+
+[[package]]
+name = "ed25519"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
+dependencies = [
+ "pkcs8",
+ "signature",
+]
+
+[[package]]
+name = "ed25519-dalek"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980"
+dependencies = [
+ "curve25519-dalek",
+ "ed25519",
+ "rand_core",
+ "serde",
+ "sha2 0.10.8",
+ "signature",
+ "zeroize",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "embedded-io"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658bbadc628dc286b9ae02f0cb0f5411c056eb7487b72f0083203f115de94060"
+
+[[package]]
+name = "enum-as-inner"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "enum-map"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53337c2dbf26a3c31eccc73a37b10c1614e8d4ae99b6a50d553e8936423c1f16"
+dependencies = [
+ "enum-map-derive",
+]
+
+[[package]]
+name = "enum-map-derive"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04d0b288e3bb1d861c4403c1774a6f7a798781dfc519b3647df2a3dd4ae95f25"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0"
+dependencies = [
+ "enumflags2_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enumset"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "226c0da7462c13fb57e5cc9e0dc8f0635e7d27f276a3a7fd30054647f669007d"
+dependencies = [
+ "enumset_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumset_derive"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af"
+dependencies = [
+ "darling 0.20.3",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "event-listener"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01cec0252c2afff729ee6f00e903d479fba81784c8e2bd77447673471fdfaea1"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener-strategy"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d96b852f1345da36d551b9473fa1e2b1eb5c5195585c6c018118bc92a8d91160"
+dependencies = [
+ "event-listener 3.0.1",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "eyre"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
+dependencies = [
+ "indenter",
+ "once_cell",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "fdeflate"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "ffi-support"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27838c6815cfe9de2d3aeb145ffd19e565f577414b33f3bdbf42fe040e9e0ff6"
+dependencies = [
+ "lazy_static",
+ "log",
+]
+
+[[package]]
+name = "fiat-crypto"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a481586acf778f1b1455424c343f71124b048ffa5f4fc3f8f6ae9dc432dcb3c7"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "flexi_logger"
+version = "0.23.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4a12e3b5a8775259ee83ac38aea8cdf9c3a1667c02178d207378c0837808fa9"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "chrono",
+ "glob",
+ "lazy_static",
+ "log",
+ "regex",
+ "rustversion",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "flume"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "spin",
+]
+
+[[package]]
+name = "fn_name"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528a0eb35b41b895aef1afed5ab28659084118e730edc72f033e76fb71666dbb"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs4"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47"
+dependencies = [
+ "rustix 0.38.21",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-lite"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+
+[[package]]
+name = "futures-task"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+
+[[package]]
+name = "futures-timer"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+dependencies = [
+ "gloo-timers",
+ "send_wrapper 0.4.0",
+]
+
+[[package]]
+name = "futures-util"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gen_ops"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "304de19db7028420975a296ab0fcbbc8e69438c4ed254a1e41e2a7f37d5f0e0a"
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gloo-utils"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e"
+dependencies = [
+ "js-sys",
+ "serde",
+ "serde_json",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "gloo-utils"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa"
+dependencies = [
+ "js-sys",
+ "serde",
+ "serde_json",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "grpcio"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "609832ca501baeb662dc81932fda9ed83f5d058f4b899a807ba222ce696f430a"
+dependencies = [
+ "futures-executor",
+ "futures-util",
+ "grpcio-sys",
+ "libc",
+ "log",
+ "parking_lot 0.12.1",
+ "protobuf",
+]
+
+[[package]]
+name = "grpcio-sys"
+version = "0.12.1+1.46.5-patched"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf625d1803b6f44203f0428ddace847fb4994def5c803fc8a7a2f18fb3daec62"
+dependencies = [
+ "bindgen",
+ "boringssl-src",
+ "cc",
+ "cmake",
+ "libc",
+ "libz-sys",
+ "pkg-config",
+ "walkdir",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hash32"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4041af86e63ac4298ce40e5cca669066e75b6f1aa3390fe2561ffa5e1d9f4cc"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash 0.7.7",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
+dependencies = [
+ "ahash 0.8.6",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
+dependencies = [
+ "hashbrown 0.14.2",
+]
+
+[[package]]
+name = "hdrhistogram"
+version = "7.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "flate2",
+ "nom 7.1.3",
+ "num-traits",
+]
+
+[[package]]
+name = "heapless"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74911a68a1658cfcfb61bc0ccfbd536e3b6e906f8c2f7883ee50157e3e2184f1"
+dependencies = [
+ "as-slice",
+ "generic-array 0.13.3",
+ "hash32",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b"
+dependencies = [
+ "digest 0.9.0",
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
+dependencies = [
+ "crypto-mac",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.10",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ifstructs"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b24d770f92a5ea876a33851b16553f21985bb83e7fe8e7e1f596ad75545e9581"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+]
+
+[[package]]
+name = "image"
+version = "0.24.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "num-rational",
+ "num-traits",
+ "png",
+ "tiff",
+]
+
+[[package]]
+name = "indent"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f1a0777d972970f204fdf8ef319f1f4f8459131636d7e3c96c5d59570d0fa6"
+
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.2",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
+dependencies = [
+ "socket2 0.5.5",
+ "widestring",
+ "windows-sys 0.48.0",
+ "winreg",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if 1.0.0",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+
+[[package]]
+name = "js-sys"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd"
+
+[[package]]
+name = "json5"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1"
+dependencies = [
+ "pest",
+ "pest_derive",
+ "serde",
+]
+
+[[package]]
+name = "keyring-manager"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c023f807de9a2f26e86c6ec3b5a3e0ea5681301999dcda9e262069ab3efb63e"
+dependencies = [
+ "byteorder",
+ "cfg-if 1.0.0",
+ "core-foundation",
+ "core-foundation-sys",
+ "directories",
+ "fs4",
+ "jni",
+ "lazy_static",
+ "log",
+ "ndk",
+ "ndk-glue",
+ "secret-service",
+ "security-framework",
+ "security-framework-sys",
+ "serde",
+ "serde_cbor",
+ "snailquote",
+ "winapi",
+]
+
+[[package]]
+name = "keyvaluedb"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bdcaabe14fa83eaae1fb92480f619c5a8b413580723153da0334848eb2dff24"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "keyvaluedb-memorydb"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62802173041ed97845bc20f8cf6817e445fe537ed879ddf43fb96166829ec8ff"
+dependencies = [
+ "keyvaluedb",
+ "parking_lot 0.12.1",
+]
+
+[[package]]
+name = "keyvaluedb-sqlite"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "144f474a27a7dadc5c179c08ef9a4662acaca8047f4e5c30d5b77582243c7538"
+dependencies = [
+ "hex",
+ "keyvaluedb",
+ "log",
+ "parking_lot 0.12.1",
+ "rusqlite",
+]
+
+[[package]]
+name = "keyvaluedb-web"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d93d243dfa1643389f8b981ddc07b2a7c533f0fae38b3f5831b004b2cc7f6353"
+dependencies = [
+ "async-lock 2.8.0",
+ "flume",
+ "futures",
+ "js-sys",
+ "keyvaluedb",
+ "keyvaluedb-memorydb",
+ "log",
+ "parking_lot 0.12.1",
+ "send_wrapper 0.6.0",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "libc-print"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17f111e2175c779daaf5e89fe3a3b0776b0adec218bc1159c56e4d3f58032f5"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi",
+]
+
+[[package]]
+name = "libredox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "redox_syscall 0.4.1",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+dependencies = [
+ "value-bag",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "lz4_flex"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ea9b256699eda7b0387ffbc776dd625e28bde3918446381781245b7a50349d8"
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matchit"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memory_units"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "nb-connect"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1bb540dc6ef51cfe1916ec038ce7a620daf3a111e2502d745197cd53d6bca15"
+dependencies = [
+ "libc",
+ "socket2 0.4.10",
+]
+
+[[package]]
+name = "ndk"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
+dependencies = [
+ "bitflags 1.3.2",
+ "jni-sys",
+ "ndk-sys 0.4.1+23.1.7779620",
+ "num_enum",
+ "raw-window-handle",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-glue"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0434fabdd2c15e0aab768ca31d5b7b333717f03cf02037d5a0a3ff3c278ed67f"
+dependencies = [
+ "android_logger 0.11.3",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-macro",
+ "ndk-sys 0.4.1+23.1.7779620",
+ "once_cell",
+ "parking_lot 0.12.1",
+]
+
+[[package]]
+name = "ndk-macro"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c"
+dependencies = [
+ "darling 0.13.4",
+ "proc-macro-crate 1.3.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ndk-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "ndk-sys"
+version = "0.4.1+23.1.7779620"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "netlink-packet-core"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4"
+dependencies = [
+ "anyhow",
+ "byteorder",
+ "netlink-packet-utils",
+]
+
+[[package]]
+name = "netlink-packet-route"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66"
+dependencies = [
+ "anyhow",
+ "bitflags 1.3.2",
+ "byteorder",
+ "libc",
+ "netlink-packet-core",
+ "netlink-packet-utils",
+]
+
+[[package]]
+name = "netlink-packet-utils"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34"
+dependencies = [
+ "anyhow",
+ "byteorder",
+ "paste",
+ "thiserror",
+]
+
+[[package]]
+name = "netlink-proto"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "842c6770fc4bb33dd902f41829c61ef872b8e38de1405aa0b938b27b8fba12c3"
+dependencies = [
+ "bytes",
+ "futures",
+ "log",
+ "netlink-packet-core",
+ "netlink-sys",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "netlink-sys"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411"
+dependencies = [
+ "async-io 1.13.0",
+ "bytes",
+ "futures",
+ "libc",
+ "log",
+ "tokio",
+]
+
+[[package]]
+name = "nix"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf"
+dependencies = [
+ "bitflags 1.3.2",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "libc",
+]
+
+[[package]]
+name = "nix"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if 1.0.0",
+ "libc",
+]
+
+[[package]]
+name = "nom"
+version = "4.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
+dependencies = [
+ "memchr",
+ "version_check 0.1.5",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "opentelemetry"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9591d937bc0e6d2feb6f71a559540ab300ea49955229c347a517a28d27784c54"
+dependencies = [
+ "opentelemetry_api",
+ "opentelemetry_sdk",
+]
+
+[[package]]
+name = "opentelemetry-otlp"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e5e5a5c4135864099f3faafbe939eb4d7f9b80ebf68a8448da961b32a7c1275"
+dependencies = [
+ "async-trait",
+ "futures-core",
+ "grpcio",
+ "http",
+ "opentelemetry-proto",
+ "opentelemetry-semantic-conventions",
+ "opentelemetry_api",
+ "opentelemetry_sdk",
+ "prost 0.11.9",
+ "protobuf",
+ "thiserror",
+ "tokio",
+ "tonic 0.9.2",
+]
+
+[[package]]
+name = "opentelemetry-proto"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1e3f814aa9f8c905d0ee4bde026afd3b2577a97c10e1699912e3e44f0c4cbeb"
+dependencies = [
+ "futures",
+ "grpcio",
+ "opentelemetry_api",
+ "opentelemetry_sdk",
+ "prost 0.11.9",
+ "protobuf",
+ "tonic 0.9.2",
+]
+
+[[package]]
+name = "opentelemetry-semantic-conventions"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73c9f9340ad135068800e7f1b24e9e09ed9e7143f5bf8518ded3d3ec69789269"
+dependencies = [
+ "opentelemetry",
+]
+
+[[package]]
+name = "opentelemetry_api"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a81f725323db1b1206ca3da8bb19874bbd3f57c3bcd59471bfb04525b265b9b"
+dependencies = [
+ "futures-channel",
+ "futures-util",
+ "indexmap 1.9.3",
+ "js-sys",
+ "once_cell",
+ "pin-project-lite",
+ "thiserror",
+ "urlencoding",
+]
+
+[[package]]
+name = "opentelemetry_sdk"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa8e705a0612d48139799fcbaba0d4a90f06277153e43dd2bdc16c6f0edd8026"
+dependencies = [
+ "async-std",
+ "async-trait",
+ "crossbeam-channel",
+ "futures-channel",
+ "futures-executor",
+ "futures-util",
+ "once_cell",
+ "opentelemetry_api",
+ "ordered-float",
+ "percent-encoding",
+ "rand",
+ "regex",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "ordered-float"
+version = "3.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordered-multimap"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
+dependencies = [
+ "dlv-list",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "oslog"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d2043d1f61d77cb2f4b1f7b7b2295f40507f5f8e9d1c8bf10a1ca5f97a3969"
+dependencies = [
+ "cc",
+ "dashmap",
+ "log",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owning_ref"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "paranoid-android"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e736c9fbaf42b43459cd1fded3dd272968daadfcbc5660ee231a12899f092289"
+dependencies = [
+ "lazy_static",
+ "ndk-sys 0.3.0",
+ "sharded-slab",
+ "smallvec",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "parking"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.6",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.9",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.4.1",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pest"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2 0.10.8",
+]
+
+[[package]]
+name = "pharos"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414"
+dependencies = [
+ "futures",
+ "rustc_version",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "piper"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+dependencies = [
+ "atomic-waker",
+ "fastrand 2.0.1",
+ "futures-io",
+]
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "platforms"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0"
+
+[[package]]
+name = "png"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "polling"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e53b6af1f60f36f8c2ac2aad5459d75a5a9b4be1e8cdd40264f315d78193e531"
+dependencies = [
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "pin-project-lite",
+ "rustix 0.38.21",
+ "tracing",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "poly1305"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf"
+dependencies = [
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prost"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
+dependencies = [
+ "bytes",
+ "prost-derive 0.11.9",
+]
+
+[[package]]
+name = "prost"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fdd22f3b9c31b53c060df4a0613a1c7f062d4115a2b984dd15b1858f7e340d"
+dependencies = [
+ "bytes",
+ "prost-derive 0.12.1",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
+dependencies = [
+ "anyhow",
+ "itertools 0.10.5",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32"
+dependencies = [
+ "anyhow",
+ "itertools 0.11.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e081b29f63d83a4bc75cfc9f3fe424f9156cf92d8a4f0c9407cce9a1b67327cf"
+dependencies = [
+ "prost 0.12.1",
+]
+
+[[package]]
+name = "protobuf"
+version = "2.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94"
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "range-set-blaze"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf36131a8443d1cda3cd66eeac16d60ce46aa7c415f71e12c28d95c195e3ff23"
+dependencies = [
+ "gen_ops",
+ "itertools 0.10.5",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+dependencies = [
+ "getrandom",
+ "libredox",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.3",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc",
+ "spin",
+ "untrusted",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ron"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"
+dependencies = [
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "serde",
+]
+
+[[package]]
+name = "rpassword"
+version = "7.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322"
+dependencies = [
+ "libc",
+ "rtoolbox",
+ "winapi",
+]
+
+[[package]]
+name = "rtnetlink"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0"
+dependencies = [
+ "async-global-executor",
+ "futures",
+ "log",
+ "netlink-packet-core",
+ "netlink-packet-route",
+ "netlink-packet-utils",
+ "netlink-proto",
+ "netlink-sys",
+ "nix 0.26.4",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "rtoolbox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "rusqlite"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2"
+dependencies = [
+ "bitflags 2.4.1",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "smallvec",
+]
+
+[[package]]
+name = "rust-ini"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
+dependencies = [
+ "cfg-if 1.0.0",
+ "ordered-multimap",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.10",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.5",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schemars"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f7b0ce13155372a76ee2e1c5ffba1fe61ede73fbea5630d61eee6fac4929c0c"
+dependencies = [
+ "dyn-clone",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars_derive"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals 0.26.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "secret-service"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1da5c423b8783185fd3fecd1c8796c267d2c089d894ce5a93c280a5d3f780a2"
+dependencies = [
+ "aes",
+ "block-modes",
+ "hkdf",
+ "lazy_static",
+ "num",
+ "rand",
+ "serde",
+ "sha2 0.9.9",
+ "zbus",
+ "zbus_macros",
+ "zvariant",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+
+[[package]]
+name = "send_wrapper"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0"
+
+[[package]]
+name = "send_wrapper"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.191"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a834c4821019838224821468552240d4d95d14e751986442c816572d39a080c9"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-big-array"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ba92964781421b6cef36bf0d7da26d201e96d84e1b10e7ae6ed416e516906d"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_cbor"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
+dependencies = [
+ "half",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.191"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46fa52d5646bce91b680189fe5b1c049d2ea38dabb4e2e7c8d00ca12cfbfbcfd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c"
+dependencies = [
+ "indexmap 2.1.0",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "serial_test"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d"
+dependencies = [
+ "dashmap",
+ "futures",
+ "lazy_static",
+ "log",
+ "parking_lot 0.12.1",
+ "serial_test_derive",
+]
+
+[[package]]
+name = "serial_test_derive"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-async-std"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4aa94397e2023af5b7cff5b8d4785e935cfb77f0e4aab0cae3b26258ace556"
+dependencies = [
+ "async-io 1.13.0",
+ "futures-lite 1.13.0",
+ "libc",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signature"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fe458c98333f9c8152221191a77e2a44e8325d0193484af2e9421a53019e57d"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+
+[[package]]
+name = "simplelog"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acee08041c5de3d5048c8b3f6f13fafb3026b24ba43c6a695a0c76179b844369"
+dependencies = [
+ "log",
+ "termcolor",
+ "time",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
+
+[[package]]
+name = "snailquote"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec62a949bda7f15800481a711909f946e1204f2460f89210eaf7f57730f88f86"
+dependencies = [
+ "thiserror",
+ "unicode_categories",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "stop-token"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af91f480ee899ab2d9f8435bfdfc14d08a5754bd9d3fef1f1a1c23336aad6c8b"
+dependencies = [
+ "async-channel",
+ "cfg-if 1.0.0",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "sysinfo"
+version = "0.29.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5"
+dependencies = [
+ "cfg-if 1.0.0",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix 0.38.21",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if 1.0.0",
+ "once_cell",
+]
+
+[[package]]
+name = "tiff"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211"
+dependencies = [
+ "flate2",
+ "jpeg-decoder",
+ "weezl",
+]
+
+[[package]]
+name = "time"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+dependencies = [
+ "deranged",
+ "itoa",
+ "libc",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.5",
+ "tokio-macros",
+ "tracing",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap 2.1.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tonic"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a"
+dependencies = [
+ "async-trait",
+ "axum",
+ "base64 0.21.5",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost 0.11.9",
+ "tokio",
+ "tokio-stream",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tonic"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "axum",
+ "base64 0.21.5",
+ "bytes",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost 0.12.1",
+ "tokio",
+ "tokio-stream",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap 1.9.3",
+ "pin-project",
+ "pin-project-lite",
+ "rand",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-appender"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e"
+dependencies = [
+ "crossbeam-channel",
+ "time",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-error"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e"
+dependencies = [
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-journald"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba316a74e8fc3c3896a850dba2375928a9fa171b085ecddfc7c054d39970f3fd"
+dependencies = [
+ "libc",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-opentelemetry"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75327c6b667828ddc28f5e3f169036cb793c3f588d83bf0f262a7f062ffed3c8"
+dependencies = [
+ "once_cell",
+ "opentelemetry",
+ "opentelemetry_sdk",
+ "smallvec",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-oslog"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bc58223383423483e4bc056c7e7b3f77bdee924a9d33834112c69ead06dc847"
+dependencies = [
+ "bindgen",
+ "cc",
+ "cfg-if 1.0.0",
+ "fnv",
+ "once_cell",
+ "parking_lot 0.11.2",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "tracing-wasm"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07"
+dependencies = [
+ "tracing",
+ "tracing-subscriber",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "triomphe"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee8098afad3fb0c54a9007aab6804558410503ad676d4633f9c2559a00ac0f"
+dependencies = [
+ "serde",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374"
+dependencies = [
+ "async-trait",
+ "cfg-if 1.0.0",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna",
+ "ipnet",
+ "once_cell",
+ "rand",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6"
+dependencies = [
+ "cfg-if 1.0.0",
+ "futures-util",
+ "ipconfig",
+ "lru-cache",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "rand",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "tsify"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0"
+dependencies = [
+ "gloo-utils 0.1.7",
+ "serde",
+ "serde-wasm-bindgen 0.5.0",
+ "serde_json",
+ "tsify-macros",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "tsify-macros"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals 0.28.0",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tungstenite"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "data-encoding",
+ "http",
+ "httparse",
+ "log",
+ "rand",
+ "sha1",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "unicode_categories"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
+
+[[package]]
+name = "universal-hash"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
+dependencies = [
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "value-bag"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a72e1902dde2bd6441347de2b70b7f5d59bf157c6c62f0c44572607a1d55bbe"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "veilid-bugsalot"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9ee584edf237fac328b891dd06c21e7914a1db3762907edc366a13803451fe3"
+
+[[package]]
+name = "veilid-cli"
+version = "0.2.5"
+dependencies = [
+ "arboard",
+ "async-std",
+ "async-tungstenite",
+ "cfg-if 1.0.0",
+ "chrono",
+ "clap 4.4.7",
+ "config",
+ "crossbeam-channel",
+ "cursive",
+ "cursive-flexi-logger-view",
+ "cursive_buffered_backend",
+ "cursive_table_view",
+ "data-encoding",
+ "directories",
+ "flexi_logger",
+ "flume",
+ "futures",
+ "hex",
+ "indent",
+ "json",
+ "log",
+ "parking_lot 0.12.1",
+ "serde",
+ "serde_derive",
+ "serial_test",
+ "stop-token",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "veilid-bugsalot",
+ "veilid-tools",
+]
+
+[[package]]
+name = "veilid-core"
+version = "0.2.5"
+dependencies = [
+ "argon2",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "async-std",
+ "async-std-resolver",
+ "async-tls",
+ "async-tungstenite",
+ "async_executors",
+ "backtrace",
+ "blake3",
+ "capnp",
+ "capnpc",
+ "cfg-if 1.0.0",
+ "chacha20",
+ "chacha20poly1305",
+ "chrono",
+ "config",
+ "console_error_panic_hook",
+ "curve25519-dalek",
+ "data-encoding",
+ "directories",
+ "ed25519-dalek",
+ "enum-as-inner",
+ "enumset",
+ "eyre",
+ "flume",
+ "futures-util",
+ "getrandom",
+ "glob",
+ "hex",
+ "jni",
+ "jni-sys",
+ "js-sys",
+ "json",
+ "keyring-manager",
+ "keyvaluedb",
+ "keyvaluedb-sqlite",
+ "keyvaluedb-web",
+ "lazy_static",
+ "libc",
+ "lock_api",
+ "lz4_flex",
+ "ndk",
+ "ndk-glue",
+ "nix 0.27.1",
+ "num-traits",
+ "once_cell",
+ "owning_ref",
+ "paranoid-android",
+ "parking_lot 0.12.1",
+ "paste",
+ "range-set-blaze",
+ "rustls",
+ "rustls-pemfile",
+ "schemars",
+ "send_wrapper 0.6.0",
+ "serde",
+ "serde-big-array",
+ "serde-wasm-bindgen 0.6.1",
+ "serde_bytes",
+ "serde_json",
+ "serial_test",
+ "shell-words",
+ "simplelog",
+ "socket2 0.5.5",
+ "static_assertions",
+ "stop-token",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tracing",
+ "tracing-error",
+ "tracing-oslog",
+ "tracing-subscriber",
+ "tracing-wasm",
+ "trust-dns-resolver",
+ "tsify",
+ "veilid-bugsalot",
+ "veilid-hashlink",
+ "veilid-igd",
+ "veilid-tools",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-bindgen-test",
+ "wasm-logger",
+ "weak-table",
+ "web-sys",
+ "webpki",
+ "webpki-roots 0.25.2",
+ "wee_alloc",
+ "winapi",
+ "windows",
+ "windows-permissions",
+ "ws_stream_wasm",
+ "x25519-dalek",
+]
+
+[[package]]
+name = "veilid-flutter"
+version = "0.2.5"
+dependencies = [
+ "allo-isolate",
+ "android_log-sys 0.3.1",
+ "async-std",
+ "backtrace",
+ "cfg-if 1.0.0",
+ "ctor",
+ "data-encoding",
+ "ffi-support",
+ "futures-util",
+ "hostname",
+ "jni",
+ "lazy_static",
+ "libc-print",
+ "opentelemetry",
+ "opentelemetry-otlp",
+ "opentelemetry-semantic-conventions",
+ "oslog",
+ "paranoid-android",
+ "parking_lot 0.12.1",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tracing",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "veilid-core",
+]
+
+[[package]]
+name = "veilid-hashlink"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a3dabbda02cfe176635dcaa18a021416ff2eb4d0b47a913e3fdc7f62049d7b1"
+dependencies = [
+ "hashbrown 0.14.2",
+ "serde",
+]
+
+[[package]]
+name = "veilid-igd"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce2b3c073da0025538ff4cf5bea61a7a7a046c1bf060e2d0981c71800747551d"
+dependencies = [
+ "attohttpc",
+ "log",
+ "rand",
+ "url",
+ "xmltree",
+]
+
+[[package]]
+name = "veilid-server"
+version = "0.2.5"
+dependencies = [
+ "ansi_term",
+ "async-std",
+ "async-tungstenite",
+ "backtrace",
+ "cfg-if 1.0.0",
+ "clap 4.4.7",
+ "color-eyre",
+ "config",
+ "console-subscriber",
+ "ctrlc",
+ "daemonize",
+ "directories",
+ "flume",
+ "futures-util",
+ "hostname",
+ "json",
+ "lazy_static",
+ "nix 0.27.1",
+ "opentelemetry",
+ "opentelemetry-otlp",
+ "opentelemetry-semantic-conventions",
+ "parking_lot 0.12.1",
+ "rpassword",
+ "serde",
+ "serde_derive",
+ "serde_yaml",
+ "serial_test",
+ "signal-hook",
+ "signal-hook-async-std",
+ "stop-token",
+ "sysinfo",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tracing",
+ "tracing-appender",
+ "tracing-journald",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "url",
+ "veilid-bugsalot",
+ "veilid-core",
+ "wg",
+ "windows-service",
+]
+
+[[package]]
+name = "veilid-tools"
+version = "0.2.5"
+dependencies = [
+ "android_logger 0.13.3",
+ "async-lock 2.8.0",
+ "async-std",
+ "async_executors",
+ "backtrace",
+ "cfg-if 1.0.0",
+ "chrono",
+ "console_error_panic_hook",
+ "eyre",
+ "flume",
+ "fn_name",
+ "futures-util",
+ "getrandom",
+ "ifstructs",
+ "jni",
+ "jni-sys",
+ "js-sys",
+ "lazy_static",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-glue",
+ "netlink-packet-route",
+ "netlink-sys",
+ "nix 0.27.1",
+ "once_cell",
+ "oslog",
+ "paranoid-android",
+ "parking_lot 0.12.1",
+ "rand",
+ "rand_core",
+ "range-set-blaze",
+ "rtnetlink",
+ "send_wrapper 0.6.0",
+ "serial_test",
+ "simplelog",
+ "static_assertions",
+ "stop-token",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tracing",
+ "tracing-oslog",
+ "tracing-subscriber",
+ "tracing-wasm",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-bindgen-test",
+ "wasm-logger",
+ "wee_alloc",
+ "winapi",
+]
+
+[[package]]
+name = "veilid-wasm"
+version = "0.2.5"
+dependencies = [
+ "cfg-if 1.0.0",
+ "console_error_panic_hook",
+ "data-encoding",
+ "futures-util",
+ "gloo-utils 0.2.0",
+ "js-sys",
+ "lazy_static",
+ "parking_lot 0.12.1",
+ "send_wrapper 0.6.0",
+ "serde",
+ "serde-wasm-bindgen 0.6.1",
+ "serde_bytes",
+ "serde_json",
+ "tracing",
+ "tracing-subscriber",
+ "tracing-wasm",
+ "tsify",
+ "veilid-core",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-bindgen-test",
+ "wee_alloc",
+]
+
+[[package]]
+name = "version_check"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "serde",
+ "serde_json",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b"
+
+[[package]]
+name = "wasm-bindgen-test"
+version = "0.3.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6433b7c56db97397842c46b67e11873eda263170afeb3a2dc74a7cb370fee0d"
+dependencies = [
+ "console_error_panic_hook",
+ "js-sys",
+ "scoped-tls",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-bindgen-test-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-test-macro"
+version = "0.3.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "493fcbab756bb764fa37e6bee8cec2dd709eb4273d06d0c282a5e74275ded735"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "wasm-logger"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "074649a66bb306c8f2068c9016395fa65d8e08d2affcbf95acf3c24c3ab19718"
+dependencies = [
+ "log",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "weak-table"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "323f4da9523e9a669e1eaf9c6e763892769b1d38c623913647bfdc1532fe4549"
+
+[[package]]
+name = "web-sys"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[package]]
+name = "wee_alloc"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "memory_units",
+ "winapi",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "wg"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f390449c16e0679435fc97a6b49d24e67f09dd05fea1de54db1b60902896d273"
+dependencies = [
+ "atomic-waker",
+ "parking_lot 0.12.1",
+ "triomphe",
+]
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix 0.38.21",
+]
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9"
+dependencies = [
+ "windows-core",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-permissions"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e2ccdc3c6bf4d4a094e031b63fadd08d8e42abd259940eb8aa5fdc09d4bf9be"
+dependencies = [
+ "bitflags 1.3.2",
+ "winapi",
+]
+
+[[package]]
+name = "windows-service"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd9db37ecb5b13762d95468a2fc6009d4b2c62801243223aabd44fca13ad13c8"
+dependencies = [
+ "bitflags 1.3.2",
+ "widestring",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winnow"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ws_stream_wasm"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5"
+dependencies = [
+ "async_io_stream",
+ "futures",
+ "js-sys",
+ "log",
+ "pharos",
+ "rustc_version",
+ "send_wrapper 0.6.0",
+ "thiserror",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507"
+dependencies = [
+ "gethostname",
+ "nix 0.24.3",
+ "winapi",
+ "winapi-wsapoll",
+ "x11rb-protocol",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67"
+dependencies = [
+ "nix 0.24.3",
+]
+
+[[package]]
+name = "x25519-dalek"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb66477291e7e8d2b0ff1bcb900bf29489a9692816d79874bea351e7a8b6de96"
+dependencies = [
+ "curve25519-dalek",
+ "rand_core",
+ "serde",
+ "zeroize",
+]
+
+[[package]]
+name = "xi-unicode"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a"
+
+[[package]]
+name = "xmltree"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb"
+dependencies = [
+ "xml-rs",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zbus"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cbeb2291cd7267a94489b71376eda33496c1b9881adf6b36f26cc2779f3fc49"
+dependencies = [
+ "async-io 1.13.0",
+ "byteorder",
+ "derivative",
+ "enumflags2",
+ "fastrand 1.9.0",
+ "futures",
+ "nb-connect",
+ "nix 0.22.3",
+ "once_cell",
+ "polling 2.8.0",
+ "scoped-tls",
+ "serde",
+ "serde_repr",
+ "zbus_macros",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa3959a7847cf95e3d51e312856617c5b1b77191176c65a79a5f14d778bbe0a6"
+dependencies = [
+ "proc-macro-crate 0.1.5",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+dependencies = [
+ "zeroize_derive",
+]
+
+[[package]]
+name = "zeroize_derive"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "zvariant"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a68c7b55f2074489b7e8e07d2d0a6ee6b4f233867a653c664d8020ba53692525"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ca5e22593eb4212382d60d26350065bf2a02c34b85bc850474a74b589a3de9"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
diff --git a/nixpkgs/pkgs/tools/networking/veilid/default.nix b/nixpkgs/pkgs/tools/networking/veilid/default.nix
new file mode 100644
index 000000000000..a787bb64517f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/veilid/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, AppKit
+, Security
+, fetchFromGitLab
+, rustPlatform
+, protobuf
+, capnproto
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "veilid";
+  version = "0.2.5";
+
+  src = fetchFromGitLab {
+    owner = "veilid";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jcSoZhAAoiKn3Jsov4Q0vunPRC+JwX8O0vYZDT5uO0I=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "async-tls-0.12.0" = "sha256-SAirarvQKsYLftr3u29czQFBwVZgl2cSCUqC0/Qgye0=";
+      "cursive-0.20.0" = "sha256-jETyRRnzt7OMkTo4LRfeRr37oPJpn9R2soxkH7tzGy8=";
+      "cursive-flexi-logger-view-0.5.0" = "sha256-zFpfVFNZNNdNMdpJbaT4O2pMYccGEAGnvYzpRziMwfQ=";
+      "cursive_buffered_backend-0.6.1" = "sha256-+sTJnp570HupwaJxV2x+oKyLwNmqQ4HqOH2P1s9Hhw8=";
+    };
+  };
+
+  nativeBuildInputs = [
+    capnproto
+    protobuf
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ AppKit Security ];
+
+  cargoBuildFlags = [
+    "--workspace"
+  ];
+
+  doCheck = false;
+
+  outputs = [ "out" "lib" "dev" ];
+
+  postInstall = ''
+    moveToOutput "lib" "$lib"
+  '';
+
+  meta = with lib; {
+    description = "An open-source, peer-to-peer, mobile-first, networked application framework";
+    homepage = "https://veilid.com";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ bbigras qbit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/vlan/default.nix b/nixpkgs/pkgs/tools/networking/vlan/default.nix
new file mode 100644
index 000000000000..d93c61bda547
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vlan/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "vlan";
+  version = "1.9";
+
+  src = fetchurl {
+    url = "https://www.candelatech.com/~greear/${pname}/${pname}.${version}.tar.gz";
+    sha256 = "1jjc5f26hj7bk8nkjxsa8znfxcf8pgry2ipnwmj2fr6ky0dhm3rv";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  preBuild =
+    ''
+      # Ouch, the tarball contains pre-compiled binaries.
+      make clean
+    '';
+
+  installPhase =
+    ''
+      mkdir -p $out/sbin
+      cp vconfig $out/sbin/
+
+      mkdir -p $out/share/man/man8
+      cp vconfig.8 $out/share/man/man8/
+    '';
+
+  meta = with lib; {
+    description = "User mode programs to enable VLANs on Ethernet devices";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    mainProgram = "vconfig";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/voms/default.nix b/nixpkgs/pkgs/tools/networking/voms/default.nix
new file mode 100644
index 000000000000..cafc812032b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/voms/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+  # Native build inputs
+, autoreconfHook
+, bison
+, flex
+, pkg-config
+  # Build inputs
+, expat
+, gsoap
+, openssl
+, zlib
+  # Configuration overridable with .override
+  # If not null, the builder will
+  # create a new output "etc", move "$out/etc" to "$etc/etc"
+  # and symlink "$out/etc" to externalEtc.
+, externalEtc ? "/etc"
+}:
+
+stdenv.mkDerivation rec{
+  pname = "voms-unstable";
+  version = "2022-06-14";
+
+  src = fetchFromGitHub {
+    owner = "italiangrid";
+    repo = "voms";
+    rev = "8e99bb96baaf197f0f557836e2829084bb1bb00e"; # develop branch
+    hash = "sha256-FG4fHO2lsQ3t/ZaKT9xY+xqdQHfdtzi5ULtxLhdPnss=";
+  };
+
+  passthru = {
+    inherit externalEtc;
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    bison
+    flex
+    pkg-config
+  ];
+
+  buildInputs = [
+    expat
+    gsoap
+    openssl
+    zlib
+  ];
+
+  outputs = [ "bin" "out" "dev" "man" ]
+    ++ lib.optional (externalEtc != null) "etc";
+
+  preAutoreconf = ''
+    mkdir -p aux src/autogen
+  '';
+
+  postAutoreconf = ''
+    # FHS patching
+    substituteInPlace configure \
+      --replace "/usr/bin/soapcpp2" "${gsoap}/bin/soapcpp2"
+
+    # Tell gcc about the location of zlib
+    # See https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=voms
+    export GSOAP_SSL_PP_CFLAGS="$(pkg-config --cflags gsoapssl++ zlib)"
+    export GSOAP_SSL_PP_LIBS="$(pkg-config --libs gsoapssl++ zlib)"
+  '';
+
+  configureFlags = [
+    "--with-gsoap-wsdl2h=${gsoap}/bin/wsdl2h"
+    "--sysconfdir=${placeholder "out"}/etc"
+  ];
+
+  postFixup = lib.optionalString (externalEtc != null) ''
+    moveToOutput etc "$etc"
+    ln -s ${lib.escapeShellArg externalEtc} "$out/etc"
+  '';
+
+  meta = with lib; {
+    description = "The C/C++ VOMS server, client and APIs v2.x";
+    homepage = "https://italiangrid.github.io/voms/";
+    changelog = "https://github.com/italiangrid/voms/blob/master/ChangeLog";
+    license = licenses.asl20;
+    platforms = platforms.linux; # gsoap is currently Linux-only in Nixpkgs
+    maintainers = with maintainers; [ ShamrockLee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/vopono/default.nix b/nixpkgs/pkgs/tools/networking/vopono/default.nix
new file mode 100644
index 000000000000..f540d59d9a01
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vopono/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchCrate
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vopono";
+  version = "0.10.8";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-D+yROQidu+a3qzCNrVxn0RNutIHNcIjMSNqPLHwA+zA=";
+  };
+
+  cargoHash = "sha256-oKoSHjABtaJYGyJ/G0zXC42XpXiUXwdPsOhyL1+D3GI=";
+
+  meta = with lib; {
+    description = "Run applications through VPN connections in network namespaces";
+    homepage = "https://github.com/jamesmcm/vopono";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+    mainProgram = "vopono";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/vpn-slice/default.nix b/nixpkgs/pkgs/tools/networking/vpn-slice/default.nix
new file mode 100644
index 000000000000..75cfe2bba0e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vpn-slice/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, buildPythonApplication
+, nix-update-script
+, python3Packages
+, fetchFromGitHub
+, iproute2
+, iptables
+, unixtools
+}:
+
+buildPythonApplication rec {
+  pname = "vpn-slice";
+  version = "0.16.1";
+
+  src = fetchFromGitHub {
+    owner = "dlenski";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-T6VULLNRLWO4OcAsuTmhty6H4EhinyxQSg0dfv2DUJs=";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace vpn_slice/mac.py \
+      --replace "'/sbin/route'" "'${unixtools.route}/bin/route'"
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace vpn_slice/linux.py \
+      --replace "'/sbin/ip'" "'${iproute2}/bin/ip'" \
+      --replace "'/sbin/iptables'" "'${iptables}/bin/iptables'"
+  '';
+
+  propagatedBuildInputs = with python3Packages; [ setproctitle dnspython ];
+
+  doCheck = false;
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/dlenski/vpn-slice";
+    description =
+      "vpnc-script replacement for easy and secure split-tunnel VPN setup";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ liketechnik ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/vpnc-scripts/default.nix b/nixpkgs/pkgs/tools/networking/vpnc-scripts/default.nix
new file mode 100644
index 000000000000..7b6a760f5f00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vpnc-scripts/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchgit
+, coreutils
+, gawk
+, gnugrep
+, iproute2
+, makeWrapper
+, nettools
+, openresolv
+, systemd
+}:
+
+stdenv.mkDerivation {
+  pname = "vpnc-scripts";
+  version = "unstable-2023-01-03";
+
+  src = fetchgit {
+    url = "https://gitlab.com/openconnect/vpnc-scripts.git";
+    rev = "22756827315bc875303190abb3756b5b1dd147ce";
+    hash = "sha256-EWrDyXg47Ur9mFutaG8+oYOCAW9AZowzwwJp3YbogIY=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp vpnc-script $out/bin
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/bin/vpnc-script \
+      --replace "which" "type -P"
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace $out/bin/vpnc-script \
+      --replace "/sbin/resolvconf" "${openresolv}/bin/resolvconf" \
+      --replace "/usr/bin/resolvectl" "${systemd}/bin/resolvectl"
+  '' + ''
+    wrapProgram $out/bin/vpnc-script \
+      --prefix PATH : "${lib.makeBinPath ([ nettools gawk coreutils gnugrep ] ++ lib.optionals stdenv.isLinux [ openresolv iproute2 ])}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.infradead.org/openconnect/";
+    description = "Script for vpnc to configure the network routing and name service";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ jerith666 ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/vpnc/default.nix b/nixpkgs/pkgs/tools/networking/vpnc/default.nix
new file mode 100644
index 000000000000..d5fd324719b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vpnc/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub
+, makeWrapper, pkg-config, perl
+, gnutls, libgcrypt, vpnc-scripts
+, opensslSupport ? false, openssl # Distributing this is a GPL violation.
+}:
+
+stdenv.mkDerivation {
+  pname = "vpnc";
+  version = "unstable-2021-11-04";
+
+  src = fetchFromGitHub {
+    owner = "streambinder";
+    repo = "vpnc";
+    rev = "c8bb5371b881f8853f191c495e762f834c9def5d";
+    sha256 = "1j1p83nfc2fpwczjcggsby0b44hk97ky0s6vns6md3awlbpgdn57";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ makeWrapper ]
+    ++ lib.optional (!opensslSupport) pkg-config;
+  buildInputs = [ libgcrypt perl ]
+    ++ (if opensslSupport then [ openssl ] else [ gnutls ]);
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "ETCDIR=$(out)/etc/vpnc"
+    "SCRIPT_PATH=${vpnc-scripts}/bin/vpnc-script"
+  ] ++ lib.optional opensslSupport "OPENSSL_GPL_VIOLATION=yes";
+
+  postPatch = ''
+    patchShebangs src/makeman.pl
+  '';
+
+  enableParallelBuilding = true;
+  # Missing install depends:
+  #   install: target '...-vpnc-unstable-2021-11-04/share/doc/vpnc': No such file or directory
+  #   make: *** [Makefile:149: install-doc] Error 1
+  enableParallelInstalling = false;
+
+  meta = with lib; {
+    homepage = "https://davidepucci.it/doc/vpnc/";
+    description = "Virtual private network (VPN) client for Cisco's VPN concentrators";
+    license = if opensslSupport then licenses.unfree else licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/waitron/default.nix b/nixpkgs/pkgs/tools/networking/waitron/default.nix
new file mode 100644
index 000000000000..7ad9ed77a7d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/waitron/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "waitron";
+  version = "unstable-2020-08-04";
+  rev = "2315857d94e3d1a1e79ac48f8f6a68d59d0ce300";
+
+  src = fetchFromGitHub {
+    owner = "ns1";
+    repo = "waitron";
+    inherit rev;
+    sha256 = "sha256-ZkGhEOckIOYGb6Yjr4I4e9cjAHDfksRwHW+zgOMZ/FE=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "." ];
+
+  patches = [
+    ./staticfiles-directory.patch
+  ];
+
+  meta = with lib; {
+    description = "A tool to manage network booting of machines";
+    longDescription = ''
+      Waitron is used to build machines (primarily bare-metal, but anything that
+      understands PXE booting will work) based on definitions from any number of
+      specified inventory sources.
+    '';
+    homepage = "https://github.com/ns1/waitron";
+    license =  licenses.asl20;
+    maintainers = with maintainers; [ guibert ];
+    platforms = platforms.linux;
+    broken = true; # vendor isn't reproducible with go > 1.17: nix-build -A $name.goModules --check
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/waitron/staticfiles-directory.patch b/nixpkgs/pkgs/tools/networking/waitron/staticfiles-directory.patch
new file mode 100644
index 000000000000..b1096487fac1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/waitron/staticfiles-directory.patch
@@ -0,0 +1,13 @@
+diff --git a/main.go b/main.go
+index 4046911..a126bae 100644
+--- a/main.go
++++ b/main.go
+@@ -411,7 +411,7 @@ func main() {
+ 
+ 	if configuration.StaticFilesPath != "" {
+ 		fs := http.FileServer(http.Dir(configuration.StaticFilesPath))
+-		r.Handler("GET", "/files/:filename", http.StripPrefix("/files/", fs))
++		r.Handler("GET", "/files/*filepath", http.StripPrefix("/files/", fs))
+ 		log.Println("Serving static files from " + configuration.StaticFilesPath)
+ 	}
+ 
diff --git a/nixpkgs/pkgs/tools/networking/wakelan/default.nix b/nixpkgs/pkgs/tools/networking/wakelan/default.nix
new file mode 100644
index 000000000000..2b18d5fd60ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wakelan/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "wakelan";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "mirror://ibiblioPubLinux/system/network/misc/${pname}-${version}.tar.gz";
+    hash = "sha256-PfXrj4d2SHmatiPPFxjsxvhusML1HTRNjoYEQtzFzW8=";
+  };
+
+  # code predates c99
+  env.CFLAGS = "-std=c89";
+
+  preInstall = ''
+    mkdir -p $out/man/man1 $out/bin
+  '';
+
+  meta = {
+    description = "Send a wake-on-lan packet";
+    longDescription = ''
+      WakeLan sends a properly formatted UDP packet across the
+      network which will cause a wake-on-lan enabled computer to
+      power on.
+   '';
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.viric ];
+    platforms = lib.platforms.unix;
+    mainProgram = "wakelan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wakeonlan/default.nix b/nixpkgs/pkgs/tools/networking/wakeonlan/default.nix
new file mode 100644
index 000000000000..4a9f0936f940
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wakeonlan/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, perlPackages, fetchFromGitHub, installShellFiles, shortenPerlShebang }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "wakeonlan";
+  version = "0.42";
+
+  src = fetchFromGitHub {
+    owner = "jpoliv";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-zCOpp5iNrWwh2knBGWhiEyG9IPAnFRwH5jJLEVLBISM=";
+  };
+
+  outputs = [ "out" ];
+
+  nativeBuildInputs = [ installShellFiles ] ++ lib.optional stdenv.isDarwin shortenPerlShebang;
+
+  nativeCheckInputs = [ perlPackages.TestPerlCritic perlPackages.TestPod perlPackages.TestPodCoverage ];
+  # Linting and formatting checks are of no interest for us.
+  preCheck = ''
+    rm -f t/93_pod_spell.t
+  '';
+
+  installPhase = ''
+    install -Dt $out/bin wakeonlan
+    installManPage blib/man1/wakeonlan.1
+  '' + lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/wakeonlan
+  '';
+
+  meta = with lib; {
+    description = "Perl script for waking up computers via Wake-On-LAN magic packets";
+    homepage = "https://github.com/jpoliv/wakeonlan";
+    license = licenses.artistic1;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "wakeonlan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wavemon/default.nix b/nixpkgs/pkgs/tools/networking/wavemon/default.nix
new file mode 100644
index 000000000000..259996d93540
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wavemon/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libnl
+, ncurses
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wavemon";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "uoaerg";
+    repo = "wavemon";
+    rev = "v${version}";
+    sha256 = "sha256-MvIFuPATI0Y7aIYZkb2Yr+iCco4gILHhDU5FWeMCk5Q=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libnl
+    ncurses
+  ];
+
+  meta = with lib; {
+    description = "Ncurses-based monitoring application for wireless network devices";
+    homepage = "https://github.com/uoaerg/wavemon";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ raskin fpletz ];
+    platforms = platforms.linux;
+    mainProgram = "wavemon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wbox/default.nix b/nixpkgs/pkgs/tools/networking/wbox/default.nix
new file mode 100644
index 000000000000..16f0883cd1d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wbox/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "wbox";
+  version = "5";
+
+  installPhase = ''
+    install -vD wbox "$out/bin/wbox"
+  '';
+
+  src = fetchurl {
+    url = "http://www.hping.org/wbox/${pname}-${version}.tar.gz";
+    sha256 = "06daxwbysppvbh1mwprw8fgsp6mbd3kqj7a978w7ivn8hdgdi28m";
+  };
+
+  meta = {
+    description = "A simple HTTP benchmarking tool";
+    homepage = "http://www.hping.org/wbox/";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.unix;
+    mainProgram = "wbox";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/webalizer/default.nix b/nixpkgs/pkgs/tools/networking/webalizer/default.nix
new file mode 100644
index 000000000000..c8945fa454aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/webalizer/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, zlib, libpng, gd, geoip, db }:
+
+stdenv.mkDerivation rec {
+  pname = "webalizer";
+  version = "2.23.08";
+
+  src = fetchurl {
+    url = "https://ftp.debian.org/debian/pool/main/w/webalizer/webalizer_${version}.orig.tar.gz";
+    sha256 = "sha256-7a3bWqQcxKCBoVAOP6lmFdS0G8Eghrzt+ZOAGM557Y0=";
+  };
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: dns_resolv.o:(.bss+0x20): multiple definition of `system_info'; webalizer.o:(.bss+0x76e0): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  installFlags = [ "MANDIR=\${out}/share/man/man1" ];
+
+  preConfigure =
+    ''
+      substituteInPlace ./configure \
+        --replace "--static" ""
+    '';
+
+  buildInputs = [ zlib libpng gd geoip db ];
+
+  configureFlags = [
+    "--enable-dns"
+    "--enable-geoip"
+    "--enable-shared"
+  ];
+
+  meta = with lib; {
+    description = "Web server log file analysis program";
+    homepage = "https://webalizer.net/";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/webwormhole/default.nix b/nixpkgs/pkgs/tools/networking/webwormhole/default.nix
new file mode 100644
index 000000000000..6752c862fb24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/webwormhole/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "webwormhole";
+  version = "unstable-2023-02-25";
+
+  src = fetchFromGitHub {
+    owner = "saljam";
+    repo = pname;
+    rev = "25b68f4f4c1aaa0c6c1949b60bd4ef52ec972ebb";
+    hash = "sha256-JFmfwHBa/lNGTOIIgnMFc4VMlsXtjX9v9Tn2XpdVMfA=";
+  };
+
+  vendorHash = "sha256-+7ctAm2wnjmfMd6CHXlcAUwiUMS7cH4koDAvlEUAXEg=";
+
+  meta = with lib; {
+    description = "Send files using peer authenticated WebRTC";
+    homepage = "https://github.com/saljam/webwormhole";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ bbigras ];
+    mainProgram = "ww";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wg-friendly-peer-names/default.nix b/nixpkgs/pkgs/tools/networking/wg-friendly-peer-names/default.nix
new file mode 100644
index 000000000000..ebbd898576d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wg-friendly-peer-names/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, wireguard-tools
+}:
+
+stdenv.mkDerivation {
+  pname = "wg-friendly-peer-names";
+  version = "unstable-2021-12-10";
+
+  src = fetchFromGitHub {
+    owner = "FlyveHest";
+    repo = "wg-friendly-peer-names";
+    rev = "b0c3e1a95c843dc9c6432895105b839ef9b362fc";
+    hash = "sha256-aGxrABmR+aQO35RYo/zI2037clnGOW0Tr16p7M1fQqc=";
+  };
+
+  installPhase = ''
+    install -D wgg.sh $out/bin/wgg
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/FlyveHest/wg-friendly-peer-names";
+    description = "Small shellscript that makes it possible to give peers a friendlier and more readable name in the `wg` peer list";
+    license = licenses.mit;
+    platforms = wireguard-tools.meta.platforms;
+    maintainers = with maintainers; [ mkg20001 ];
+    mainProgram = "wgg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wg-netmanager/default.nix b/nixpkgs/pkgs/tools/networking/wg-netmanager/default.nix
new file mode 100644
index 000000000000..ed8681315365
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wg-netmanager/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wg-netmanager";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "gin66";
+    repo = "wg_netmanager";
+    rev = "wg_netmanager-v${version}";
+    sha256 = "sha256-Mr4+TW1yOePEHa7puz6mTRJ514LGQeiEwPW3NKupV/M=";
+  };
+
+  cargoSha256 = "sha256-cOxkWMFPVmi+/BQWIvExzX5LDyC7C8kaTf5dGwfXj+s=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # Test 01 tries to create a wireguard interface, which requires sudo.
+  doCheck = true;
+  checkFlags = [ "--skip" "device" ];
+
+  meta = with lib; {
+    description = "Wireguard network manager";
+    longDescription = ''
+      Wireguard network manager, written in rust, simplifies the setup of wireguard nodes,
+      identifies short connections between nodes residing in the same subnet,
+      identifies unreachable aka dead nodes and maintains the routes between all nodes automatically.
+      To achieve this, wireguard network manager needs to be running on each node.
+    '';
+    homepage = "https://github.com/gin66/wg_netmanager";
+    license = with licenses; [ mit asl20 bsd3 mpl20 ];
+    maintainers = with maintainers; [ gin66 ];
+    platforms = platforms.linux;
+    mainProgram = "wg_netmanager";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wgautomesh/default.nix b/nixpkgs/pkgs/tools/networking/wgautomesh/default.nix
new file mode 100644
index 000000000000..a9843e2efa17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wgautomesh/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, fetchFromGitea
+, rustPlatform
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "wgautomesh";
+  version = "0.1.0";
+
+  src = fetchFromGitea {
+    domain = "git.deuxfleurs.fr";
+    owner = "Deuxfleurs";
+    repo = "wgautomesh";
+    rev = "v${version}";
+    sha256 = "FiFEpYLSJg52EtBXaZ685ICbaIyY9URrDt0bS0HPi0Q=";
+  };
+
+  cargoHash = "sha256-DGDVjQ4fr4/F1RE0qVc5CWcXrrCEswCF7rQQwlKzMPA=";
+
+  meta = with lib; {
+    description = "A simple utility to help connect wireguard nodes together in a full mesh topology";
+    homepage = "https://git.deuxfleurs.fr/Deuxfleurs/wgautomesh";
+    license = licenses.agpl3Only;
+    maintainers = [ maintainers.lx ];
+    mainProgram = "wgautomesh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wget/default.nix b/nixpkgs/pkgs/tools/networking/wget/default.nix
new file mode 100644
index 000000000000..d5cec9284550
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wget/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchurl, gettext, pkg-config, perlPackages
+, libidn2, zlib, pcre, libuuid, libiconv, libintl
+, python3, lzip
+, withLibpsl ? false, libpsl
+, withOpenssl ? true, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wget";
+  version = "1.21.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/wget/${pname}-${version}.tar.lz";
+    hash = "sha256-NoNhml9Q7cvMsXIKeQBvo3v5uaJVqMW0gEi8PHqHS9k=";
+  };
+
+  patches = [
+    ./remove-runtime-dep-on-openssl-headers.patch
+  ];
+
+  preConfigure = ''
+    patchShebangs doc
+
+  '' + lib.optionalString doCheck ''
+    # Work around lack of DNS resolution in chroots.
+    for i in "tests/"*.pm "tests/"*.px
+    do
+      sed -i "$i" -e's/localhost/127.0.0.1/g'
+    done
+  '';
+
+  nativeBuildInputs = [ gettext pkg-config perlPackages.perl lzip libiconv libintl ];
+  buildInputs = [ libidn2 zlib pcre libuuid ]
+    ++ lib.optionals doCheck [ perlPackages.IOSocketSSL perlPackages.LWP python3 ]
+    ++ lib.optional withOpenssl openssl
+    ++ lib.optional withLibpsl libpsl
+    ++ lib.optional stdenv.isDarwin perlPackages.perl;
+
+  configureFlags = [
+    (lib.withFeatureAs withOpenssl "ssl" "openssl")
+  ] ++ lib.optionals stdenv.isDarwin [
+    # https://lists.gnu.org/archive/html/bug-wget/2021-01/msg00076.html
+    "--without-included-regex"
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for retrieving files using HTTP, HTTPS, and FTP";
+    homepage = "https://www.gnu.org/software/wget/";
+    license = licenses.gpl3Plus;
+    longDescription =
+      '' GNU Wget is a free software package for retrieving files using HTTP,
+         HTTPS and FTP, the most widely-used Internet protocols.  It is a
+         non-interactive commandline tool, so it may easily be called from
+         scripts, cron jobs, terminals without X-Windows support, etc.
+      '';
+    mainProgram = "wget";
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wget/remove-runtime-dep-on-openssl-headers.patch b/nixpkgs/pkgs/tools/networking/wget/remove-runtime-dep-on-openssl-headers.patch
new file mode 100644
index 000000000000..a6a1fcfcb37b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wget/remove-runtime-dep-on-openssl-headers.patch
@@ -0,0 +1,17 @@
+diff --git a/src/Makefile.in b/src/Makefile.in
+index 1a36a9b..e279c84 100644
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -2211,10 +2211,9 @@ version.c:  $(wget_SOURCES) ../lib/libgnu.a
+ 	echo '' >> $@
+ 	echo '#include "version.h"' >> $@
+ 	echo 'const char *version_string = "@VERSION@";' >> $@
+-	echo 'const char *compilation_string = "'$(COMPILE)'";' \
++	echo 'const char *compilation_string = 0;' \
+ 	    | $(ESCAPEQUOTE) >> $@
+-	echo 'const char *link_string = "'$(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+-	$(AM_LDFLAGS) $(LDFLAGS) $(LIBS) $(wget_LDADD)'";' \
++	echo 'const char *link_string = 0;' \
+ 	    | $(ESCAPEQUOTE) >> $@
+ 
+ css.c: $(srcdir)/css.l
diff --git a/nixpkgs/pkgs/tools/networking/wget2/default.nix b/nixpkgs/pkgs/tools/networking/wget2/default.nix
new file mode 100644
index 000000000000..017e6303ab2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wget2/default.nix
@@ -0,0 +1,107 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+  # build support
+, autoreconfHook
+, flex
+, gnulib
+, pkg-config
+, texinfo
+  # libraries
+, brotli
+, bzip2
+, darwin
+, gpgme
+, libhsts
+, libidn2
+, libpsl
+, lzip
+, nghttp2
+, openssl
+, pcre2
+, sslSupport ? true
+, xz
+, zlib
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wget2";
+  version = "2.1.0";
+
+  outputs = [ "out" "lib" "dev" ];
+
+  src = fetchFromGitLab {
+    owner = "gnuwget";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+xw1nQMBs0m9RlunyrAYaSDPnLY1yRX8zt8hKOMXQT8=";
+  };
+
+  # wget2_noinstall contains forbidden reference to /build/
+  postPatch = ''
+    substituteInPlace src/Makefile.am \
+      --replace "bin_PROGRAMS = wget2 wget2_noinstall" "bin_PROGRAMS = wget2"
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    autoreconfHook
+    flex
+    lzip
+    pkg-config
+    texinfo
+  ];
+
+  buildInputs = [
+    brotli
+    bzip2
+    gpgme
+    libhsts
+    libidn2
+    libpsl
+    nghttp2
+    pcre2
+    xz
+    zlib
+    zstd
+  ] ++ lib.optionals sslSupport [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  # TODO: include translation files
+  autoreconfPhase = ''
+    # copy gnulib into build dir and make writable.
+    # Otherwise ./bootstrap copies the non-writable files from nix store and fails to modify them
+    rmdir gnulib
+    cp -r ${gnulib} gnulib
+    chmod -R u+w gnulib/{build-aux,lib}
+
+    ./bootstrap --no-git --gnulib-srcdir=gnulib --skip-po
+  '';
+
+  configureFlags = [
+    (lib.enableFeature false "shared")
+    # TODO: https://gitlab.com/gnuwget/wget2/-/issues/537
+    (lib.withFeatureAs sslSupport "ssl" "openssl")
+  ];
+
+  meta = with lib; {
+    description = "Successor of GNU Wget, a file and recursive website downloader";
+    longDescription = ''
+      Designed and written from scratch it wraps around libwget, that provides the basic
+      functions needed by a web client.
+      Wget2 works multi-threaded and uses many features to allow fast operation.
+      In many cases Wget2 downloads much faster than Wget1.x due to HTTP2, HTTP compression,
+      parallel connections and use of If-Modified-Since HTTP header.
+    '';
+    homepage = "https://gitlab.com/gnuwget/wget2";
+    # wget2 GPLv3+; libwget LGPLv3+
+    license = with licenses; [ gpl3Plus lgpl3Plus ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "wget2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/whatip/default.nix b/nixpkgs/pkgs/tools/networking/whatip/default.nix
new file mode 100644
index 000000000000..08979e71e35e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/whatip/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, fetchFromGitLab
+, python3
+, meson
+, ninja
+, pkg-config
+, glib
+, gtk4
+, libadwaita
+, librsvg
+, blueprint-compiler
+, gobject-introspection
+, wrapGAppsHook4
+, appstream-glib
+, desktop-file-utils
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "whatip";
+  version = "1.2";
+
+  format = "other";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GabMus";
+    repo = pname;
+    rev = version;
+    hash = "sha256-gt/NKgnCpRoVmLvEJJq2geng4miM2g+YhXYEOm5pPTA=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    blueprint-compiler
+    wrapGAppsHook4
+    appstream-glib
+    desktop-file-utils
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    librsvg
+    libadwaita
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    netaddr
+    requests
+    pygobject3
+  ];
+
+  meta = with lib; {
+    description = "Info on your IP";
+    homepage = "https://gitlab.gnome.org/GabMus/whatip";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ zendo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/whois/default.nix b/nixpkgs/pkgs/tools/networking/whois/default.nix
new file mode 100644
index 000000000000..1fd5cb97383e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/whois/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, perl, gettext, pkg-config, libidn2, libiconv }:
+
+stdenv.mkDerivation rec {
+  version = "5.5.20";
+  pname = "whois";
+
+  src = fetchFromGitHub {
+    owner = "rfc1036";
+    repo = "whois";
+    rev = "v${version}";
+    hash = "sha256-0vQ6GBBtNA6Phlqhl3NZvEJqoyZ1um7VdkpsIRKhsm4=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/macports/macports-ports/raw/93de4e9fc1e5e8427bf98f48209e783a5e8fab57/net/whois/files/implicit.patch";
+      extraPrefix = "";
+      hash = "sha256-ogVylQz//tpXxPNIWIHkhghvToU1z1D1FfnUBdZLyRY=";
+    })
+  ];
+
+  nativeBuildInputs = [ perl gettext pkg-config ];
+  buildInputs = [ libidn2 libiconv ];
+
+  preConfigure = ''
+    for i in Makefile po/Makefile; do
+      substituteInPlace $i --replace "prefix = /usr" "prefix = $out"
+    done
+  '';
+
+  makeFlags = [ "HAVE_ICONV=1" ];
+  buildFlags = [ "whois" ];
+
+  installTargets = [ "install-whois" ];
+
+  meta = with lib; {
+    description = "Intelligent WHOIS client from Debian";
+    longDescription = ''
+      This package provides a commandline client for the WHOIS (RFC 3912)
+      protocol, which queries online servers for information such as contact
+      details for domains and IP address assignments. It can intelligently
+      select the appropriate WHOIS server for most queries.
+    '';
+
+    homepage = "https://packages.qa.debian.org/w/whois.html";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.unix;
+    mainProgram = "whois";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wifish/default.nix b/nixpkgs/pkgs/tools/networking/wifish/default.nix
new file mode 100644
index 000000000000..a9e30710c1a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wifish/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub
+, dialog
+, gawk
+, wpa_supplicant
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wifish";
+  version = "1.1.4";
+
+  src = fetchFromGitHub{
+    owner = "bougyman";
+    repo = "wifish";
+    rev = version;
+    sha256 = "sha256-eTErN6CfKDey/wV+9o9cBVaG5FzCRBiA9UicrMz3KBc=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postPatch = ''
+    sed -ie 's|/var/lib/wifish|${placeholder "out"}/var/lib/wifish|' wifish
+  '';
+
+  dontConfigure = true;
+
+  installPhase = ''
+    install -D -m0644 awk/wscanparse.awk ${placeholder "out"}/var/lib/wifish/wscanparse.awk
+    install -D -m0644 awk/wlistparse.awk ${placeholder "out"}/var/lib/wifish/wlistparse.awk
+    install -D -m0644 awk/wscan2menu.awk ${placeholder "out"}/var/lib/wifish/wscan2menu.awk
+    install -D -m0644 awk/iwparse.awk ${placeholder "out"}/var/lib/wifish/iwparse.awk
+    install -D -m0755 wifish ${placeholder "out"}/bin/wifish
+  '';
+
+  postFixup = ''
+    wrapProgram ${placeholder "out"}/bin/wifish \
+      --prefix PATH ":" ${lib.makeBinPath [ dialog gawk wpa_supplicant ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/bougyman/wifish";
+    description = "Simple wifi shell script for linux";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wireguard-go/default.nix b/nixpkgs/pkgs/tools/networking/wireguard-go/default.nix
new file mode 100644
index 000000000000..867de41d4816
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireguard-go/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildGoModule, fetchzip, testers, wireguard-go }:
+
+buildGoModule rec {
+  pname = "wireguard-go";
+  version = "0.0.20230223";
+
+  src = fetchzip {
+    url = "https://git.zx2c4.com/wireguard-go/snapshot/wireguard-go-${version}.tar.xz";
+    sha256 = "sha256-ZVWbZwSpxQvxwySS3cfzdRReFtHWk6LT2AuIe10hyz0=";
+  };
+
+  postPatch = ''
+    # Skip formatting tests
+    rm -f format_test.go
+  '';
+
+  vendorHash = "sha256-i6ncA71R0hi1SzqCLphhtF3yRAHDmOdYJQ6pf3UDBg8=";
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    mv $out/bin/wireguard $out/bin/wireguard-go
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = wireguard-go;
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "Userspace Go implementation of WireGuard";
+    homepage = "https://git.zx2c4.com/wireguard-go/about/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kirelagin yana zx2c4 ];
+    mainProgram = "wireguard-go";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wireguard-tools/default.nix b/nixpkgs/pkgs/tools/networking/wireguard-tools/default.nix
new file mode 100644
index 000000000000..effba4adce05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireguard-tools/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, fetchzip
+, nixosTests
+, iptables
+, iproute2
+, makeWrapper
+, openresolv
+, procps
+, bash
+, wireguard-go
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wireguard-tools";
+  version = "1.0.20210914";
+
+  src = fetchzip {
+    url = "https://git.zx2c4.com/wireguard-tools/snapshot/wireguard-tools-${version}.tar.xz";
+    sha256 = "sha256-eGGkTVdPPTWK6iEyowW11F4ywRhd+0IXJTZCqY3OZws=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  sourceRoot = "${src.name}/src";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ bash ];
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX=/"
+    "WITH_BASHCOMPLETION=yes"
+    "WITH_SYSTEMDUNITS=yes"
+    "WITH_WGQUICK=yes"
+  ];
+
+  postFixup = ''
+    substituteInPlace $out/lib/systemd/system/wg-quick@.service \
+      --replace /usr/bin $out/bin
+  '' + lib.optionalString stdenv.isLinux ''
+    for f in $out/bin/*; do
+      # Which firewall and resolvconf implementations to use should be determined by the
+      # environment, we provide the "default" ones as fallback.
+      wrapProgram $f \
+        --prefix PATH : ${lib.makeBinPath [ procps iproute2 ]} \
+        --suffix PATH : ${lib.makeBinPath [ iptables openresolv ]}
+    done
+  '' + lib.optionalString stdenv.isDarwin ''
+    for f in $out/bin/*; do
+      wrapProgram $f \
+        --prefix PATH : ${lib.makeBinPath [ wireguard-go ]}
+    done
+  '';
+
+  passthru = {
+    updateScript = ./update.sh;
+    tests = nixosTests.wireguard;
+  };
+
+  meta = with lib; {
+    description = "Tools for the WireGuard secure network tunnel";
+    longDescription = ''
+      Supplies the main userspace tooling for using and configuring WireGuard tunnels, including the wg(8) and wg-quick(8) utilities.
+      - wg : the configuration utility for getting and setting the configuration of WireGuard tunnel interfaces. The interfaces
+        themselves can be added and removed using ip-link(8) and their IP addresses and routing tables can be set using ip-address(8)
+        and ip-route(8). The wg utility provides a series of sub-commands for changing WireGuard-specific aspects of WireGuard interfaces.
+      - wg-quick : an extremely simple script for easily bringing up a WireGuard interface, suitable for a few common use cases.
+    '';
+    downloadPage = "https://git.zx2c4.com/wireguard-tools/refs/";
+    homepage = "https://www.wireguard.com/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ericsagnes zx2c4 globin ma27 d-xo ];
+    mainProgram = "wg";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wireguard-tools/update.sh b/nixpkgs/pkgs/tools/networking/wireguard-tools/update.sh
new file mode 100755
index 000000000000..e549228e8f1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireguard-tools/update.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused common-updater-scripts
+
+set -eu -o pipefail
+
+version="$(curl -sL https://build.wireguard.com/distros.txt | sed -n 's/^upstream\tkmodtools\t\([^\t]\+\)\t.*/\1/p')"
+update-source-version wireguard-tools "$version"
diff --git a/nixpkgs/pkgs/tools/networking/wireguard-vanity-address/default.nix b/nixpkgs/pkgs/tools/networking/wireguard-vanity-address/default.nix
new file mode 100644
index 000000000000..cc7ebc557faf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireguard-vanity-address/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wireguard-vanity-address";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "warner";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-SjzcVIQ9HwhP6Y/uCwXGSdZgrYcUQ9kE/Bow8pyOKNo=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoHash = "sha256-0bkyopkssqH0vfaWkFC3dV2o7Q3EuDEOM8JvRB9ekLU=";
+
+  meta = with lib; {
+    description = "Find Wireguard VPN keypairs with a specific readable string";
+    homepage = "https://github.com/warner/wireguard-vanity-address";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bcc32 ];
+    mainProgram = "wireguard-vanity-address";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wireproxy/default.nix b/nixpkgs/pkgs/tools/networking/wireproxy/default.nix
new file mode 100644
index 000000000000..1ce31211f5b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireproxy/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, wireproxy
+}:
+
+buildGoModule rec {
+  pname = "wireproxy";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "pufferffish";
+    repo = "wireproxy";
+    rev = "v${version}";
+    hash = "sha256-lMTlocKtOg82dH8XU+bIgPhico3mueLAuTspAY88GFI=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=v${version}"
+  ];
+
+  vendorHash = "sha256-V9W7Z8vgPdudNivfmGzJe1f6ebrZEqlG4AdIf2NNGrY=";
+
+  passthru.tests.version = testers.testVersion {
+    package = wireproxy;
+    command = "wireproxy --version";
+    version = src.rev;
+  };
+
+  meta = with lib; {
+    description = "Wireguard client that exposes itself as a socks5 proxy";
+    homepage = "https://github.com/octeep/wireproxy";
+    license = licenses.isc;
+    maintainers = with maintainers; [ _3JlOy-PYCCKUi ];
+    mainProgram = "wireproxy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wol/default.nix b/nixpkgs/pkgs/tools/networking/wol/default.nix
new file mode 100644
index 000000000000..14cf48ae0dbd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wol/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "wol";
+  version = "0.7.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/wake-on-lan/${pname}-${version}.tar.gz";
+    sha256 = "08i6l5lr14mh4n3qbmx6kyx7vjqvzdnh3j9yfvgjppqik2dnq270";
+  };
+
+  # for pod2man in order to get a manpage
+  nativeBuildInputs = [ perl ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Implements Wake On LAN functionality in a small program";
+    homepage = "https://sourceforge.net/projects/wake-on-lan/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ makefu ];
+    mainProgram = "wol";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wolfebin/default.nix b/nixpkgs/pkgs/tools/networking/wolfebin/default.nix
new file mode 100644
index 000000000000..47babc4ceb9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wolfebin/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "wolfebin";
+  version = "5.6";
+
+  src = fetchFromGitHub {
+    owner = "thejoshwolfe";
+    repo = "wolfebin";
+    rev = version;
+    sha256 = "sha256-tsI71/UdLaGZ3O2lNTd1c8S5OS2imquLovh0n0ez8Ts=";
+  };
+
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    install -m 755 -d $out/bin
+    install -m 755 wolfebin $out/bin
+    install -m 755 wolfebin_server.py $out/bin/wolfebin_server
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thejoshwolfe/wolfebin";
+    description = "Quick and easy file sharing";
+    license = licenses.mit;
+    maintainers = with maintainers; [ andrewrk ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wormhole-william/default.nix b/nixpkgs/pkgs/tools/networking/wormhole-william/default.nix
new file mode 100644
index 000000000000..e08c0e51a58a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wormhole-william/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "wormhole-william";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "psanford";
+    repo = "wormhole-william";
+    rev = "v${version}";
+    sha256 = "sha256-KLj9ZeLcIOWA4VeuxfoOr99kUCDb7OARX/h9DSG1WHw=";
+  };
+
+  vendorHash = "sha256-oJz7HgtjuP4ooXdpofIKaDndGg4WqVZgbT8Yb1AyaMs=";
+
+  preCheck = ''
+    # wormhole_test.go:692: failed to establish connection
+    substituteInPlace wormhole/wormhole_test.go \
+      --replace "TestWormholeDirectoryTransportSendRecvDirect" \
+                "SkipWormholeDirectoryTransportSendRecvDirect"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/psanford/wormhole-william";
+    description = "End-to-end encrypted file transfers";
+    changelog = "https://github.com/psanford/wormhole-william/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ psanford ];
+    mainProgram = "wormhole-william";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wrk/default.nix b/nixpkgs/pkgs/tools/networking/wrk/default.nix
new file mode 100644
index 000000000000..082497ad7d28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wrk/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, luajit, openssl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "wrk";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "wg";
+    repo = "wrk";
+    rev = version;
+    sha256 = "sha256-nCfA444p7krXOB3qRtDKWxWj9tsrDZsGf03ThtE1dXM=";
+  };
+
+  buildInputs = [ luajit openssl perl ];
+
+  makeFlags = [ "WITH_LUAJIT=${luajit}" "WITH_OPENSSL=${openssl.dev}" "VER=${version}" ];
+
+  preBuild = ''
+    for f in src/*.h; do
+      substituteInPlace $f \
+        --replace "#include <luajit-2.0/" "#include <"
+    done
+  '';
+
+  env.NIX_CFLAGS_COMPILE = "-DluaL_reg=luaL_Reg"; # needed since luajit-2.1.0-beta3
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp wrk $out/bin
+  '';
+
+  meta = with lib; {
+    description = "HTTP benchmarking tool";
+    homepage = "https://github.com/wg/wrk";
+    longDescription = ''
+      wrk is a modern HTTP benchmarking tool capable of generating
+      significant load when run on a single multi-core CPU. It
+      combines a multithreaded design with scalable event notification
+      systems such as epoll and kqueue.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ragge ];
+    platforms = platforms.unix;
+    mainProgram = "wrk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wrk2/default.nix b/nixpkgs/pkgs/tools/networking/wrk2/default.nix
new file mode 100644
index 000000000000..6d2988705129
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wrk2/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, luajit, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "wrk2";
+  version = "4.0.0-${builtins.substring 0 7 src.rev}";
+
+  src = fetchFromGitHub {
+    owner  = "giltene";
+    repo   = "wrk2";
+    rev    = "e0109df5b9de09251adb5f5848f223fbee2aa9f5";
+    sha256 = "1aqdwmgdd74wq73f1zp28yqj91gd6p6nf9nbdfibl7mlklbzvak8";
+  };
+
+  buildInputs = [ luajit openssl zlib ];
+
+  patchPhase = ''
+    rm -rf deps/luajit && mkdir deps/luajit
+
+    substituteInPlace ./Makefile \
+      --replace '-lluajit' '-lluajit-5.1' \
+      --replace '_BSD_SOURCE' '_DEFAULT_SOURCE' \
+      --replace 'cd $(LDIR) && ./luajit' '${luajit}/bin/luajit' \
+      --replace 'config.h Makefile $(LDIR)/libluajit.a' 'config.h Makefile'
+
+    substituteInPlace ./src/script.c \
+      --replace 'struct luaL_reg ' 'struct luaL_Reg '
+  '';
+
+  dontConfigure = true;
+  installPhase = ''
+    mkdir -p $out/bin
+    mv ./wrk $out/bin/wrk2
+  '';
+
+  meta = {
+    description = "Constant throughput, correct latency recording variant of wrk";
+    homepage    = "https://github.com/giltene/wrk2";
+    license     = lib.licenses.bsd3;
+    platforms   = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ thoughtpolice ];
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isLinux && stdenv.isAarch64;
+    mainProgram = "wrk2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wsl-vpnkit/default.nix b/nixpkgs/pkgs/tools/networking/wsl-vpnkit/default.nix
new file mode 100644
index 000000000000..b9b25747a50f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wsl-vpnkit/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, resholve
+, fetchFromGitHub
+
+  # Runtime dependencies
+, coreutils
+, dnsutils
+, gawk
+, gnugrep
+, gvproxy
+, iproute2
+, iptables
+, iputils
+, wget
+}:
+
+let
+  version = "0.4.1";
+  gvproxyWin = gvproxy.overrideAttrs (_: {
+    buildPhase = ''
+      GOARCH=amd64 GOOS=windows go build -ldflags '-s -w' -o bin/gvproxy-windows.exe ./cmd/gvproxy
+    '';
+  });
+in
+resholve.mkDerivation {
+  pname = "wsl-vpnkit";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "sakai135";
+    repo = "wsl-vpnkit";
+    rev = "v${version}";
+    hash = "sha256-Igbr3L2W32s4uBepllSz07bkbI3qwAKMZkBrXLqGrGA=";
+  };
+
+  postPatch = ''
+    substituteInPlace wsl-vpnkit \
+      --replace "/app/wsl-vm" "${gvproxy}/bin/gvforwarder" \
+      --replace "/app/wsl-gvproxy.exe" "${gvproxyWin}/bin/gvproxy-windows.exe"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp wsl-vpnkit $out/bin
+  '';
+
+  solutions.wsl-vpnkit = {
+    scripts = [ "bin/wsl-vpnkit" ];
+    interpreter = "none";
+    inputs = [
+      coreutils
+      dnsutils
+      gawk
+      gnugrep
+      iproute2
+      iptables
+      iputils
+      wget
+    ];
+
+    keep = {
+      "$VMEXEC_PATH" = true;
+      "$GVPROXY_PATH" = true;
+    };
+
+    execer = [
+      "cannot:${iproute2}/bin/ip"
+      "cannot:${wget}/bin/wget"
+    ];
+
+    fix = {
+      aliases = true;
+      ping = "${iputils}/bin/ping";
+    };
+  };
+
+  meta = with lib; {
+    description = "Provides network connectivity to Windows Subsystem for Linux (WSL) when blocked by VPN";
+    homepage = "https://github.com/sakai135/wsl-vpnkit";
+    changelog = "https://github.com/sakai135/wsl-vpnkit/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ terlar ];
+    mainProgram = "wsl-vpnkit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wuzz/default.nix b/nixpkgs/pkgs/tools/networking/wuzz/default.nix
new file mode 100644
index 000000000000..0ee71eb1e651
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wuzz/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "wuzz";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "asciimoo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-H0soiKOytchfcFx17az0pGoFbA+hhXLxGJVdaARvnDc=";
+  };
+
+  patches = [
+    # go 1.19 support
+    # https://github.com/asciimoo/wuzz/pull/146
+    (fetchpatch {
+      url = "https://github.com/asciimoo/wuzz/commit/bb4c4fff794f160920df1d3b87541b28f071862c.patch";
+      hash = "sha256-nbgwmST36nB5ia3mgZvkwAVqJfznvFnNyzdoyo51kLg=";
+    })
+  ];
+
+  vendorHash = "sha256-oIm6DWSs6ZDKi6joxydguSXxqtGyKP21cmWtz8MkeIQ=";
+
+  meta = with lib; {
+    homepage = "https://github.com/asciimoo/wuzz";
+    description = "Interactive cli tool for HTTP inspection";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ pradeepchhetri ];
+    mainProgram = "wuzz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/x11-ssh-askpass/default.nix b/nixpkgs/pkgs/tools/networking/x11-ssh-askpass/default.nix
new file mode 100644
index 000000000000..049154d64413
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/x11-ssh-askpass/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, xorg, imake, gccmakedep }:
+
+stdenv.mkDerivation rec {
+  pname = "x11-ssh-askpass";
+  version = "1.2.4.1";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchurl {
+    url = "http://pkgs.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-${version}.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-${version}.tar.gz";
+    sha256 = "620de3c32ae72185a2c9aeaec03af24242b9621964e38eb625afb6cdb30b8c88";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ xorg.libX11 xorg.libXt xorg.libICE xorg.libSM ];
+
+  configureFlags = [
+    "--with-app-defaults-dir=$out/etc/X11/app-defaults"
+  ];
+
+  dontUseImakeConfigure = true;
+  postConfigure = ''
+    xmkmf -a
+  '';
+
+  installTargets = [ "install" "install.man" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/sigmavirus24/x11-ssh-askpass";
+    description = "Lightweight passphrase dialog for OpenSSH or other open variants of SSH";
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/xdp-tools/default.nix b/nixpkgs/pkgs/tools/networking/xdp-tools/default.nix
new file mode 100644
index 000000000000..f1bcb4dfd115
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xdp-tools/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libbpf
+, elfutils
+, zlib
+, libpcap
+, bpftools
+, llvmPackages
+, pkg-config
+, m4
+, emacs-nox
+, wireshark-cli
+, nukeReferences
+}:
+stdenv.mkDerivation rec {
+  pname = "xdp-tools";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "xdp-project";
+    repo = "xdp-tools";
+    rev = "v${version}";
+    hash = "sha256-kWgjt7mYwHtf8I4sXPzzrQJkWQyC8AC85ulGOWmQNZI=";
+  };
+
+  outputs = [ "out" "lib" ];
+
+  buildInputs = [
+    libbpf
+    elfutils
+    libpcap
+    zlib
+  ];
+
+  depsBuildBuild = [
+    emacs-nox # to generate man pages from .org
+  ];
+  nativeBuildInputs = [
+    bpftools
+    llvmPackages.clang
+    llvmPackages.llvm
+    pkg-config
+    m4
+    nukeReferences
+  ];
+  nativeCheckInputs = [
+    wireshark-cli # for tshark
+  ];
+
+  # When building BPF, the default CC wrapper is interfering a bit too much.
+  BPF_CFLAGS = "-fno-stack-protector -Wno-error=unused-command-line-argument";
+
+  PRODUCTION = 1;
+  DYNAMIC_LIBXDP = 1;
+  FORCE_SYSTEM_LIBBPF = 1;
+  FORCE_EMACS = 1;
+
+  makeFlags = [ "PREFIX=$(out)" "LIBDIR=$(lib)/lib" ];
+
+  postInstall = ''
+    # Note that even the static libxdp would refer to BPF_OBJECT_DIR ?=$(LIBDIR)/bpf
+    rm "$lib"/lib/*.a
+    # Drop unfortunate references to glibc.dev/include at least from $lib
+    nuke-refs "$lib"/lib/bpf/*.o
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/xdp-project/xdp-tools";
+    description = "Library and utilities for use with XDP";
+    license = with licenses; [ gpl2 lgpl21 bsd2 ];
+    maintainers = with maintainers; [ tirex vcunat vifino ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/xh/default.nix b/nixpkgs/pkgs/tools/networking/xh/default.nix
new file mode 100644
index 000000000000..a2cbf816fab7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xh/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, withNativeTls ? true
+, stdenv
+, darwin
+, openssl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xh";
+  version = "0.21.0";
+
+  src = fetchFromGitHub {
+    owner = "ducaale";
+    repo = "xh";
+    rev = "v${version}";
+    sha256 = "sha256-nsxXNlDycn7W7X+AthYCFQu8i2bEPQv7r2LCbc3gFrE=";
+  };
+
+  cargoHash = "sha256-THj8tE12P/K+t/R1xUxo042FIX6JP3riCvm2a8zVEzw=";
+
+  buildFeatures = lib.optional withNativeTls "native-tls";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = lib.optionals withNativeTls
+    (if stdenv.isDarwin then [ darwin.apple_sdk.frameworks.SystemConfiguration ] else [ openssl ]);
+
+  # Get openssl-sys to use pkg-config
+  OPENSSL_NO_VENDOR = 1;
+
+  postInstall = ''
+    installShellCompletion \
+      completions/xh.{bash,fish} \
+      --zsh completions/_xh
+
+    installManPage doc/xh.1
+    ln -s $out/share/man/man1/xh.1 $out/share/man/man1/xhs.1
+
+    install -m444 -Dt $out/share/doc/xh README.md CHANGELOG.md
+
+    ln -s $out/bin/xh $out/bin/xhs
+  '';
+
+  # Nix build happens in sandbox without internet connectivity
+  # disable tests as some of them require internet due to nature of application
+  doCheck = false;
+  doInstallCheck = true;
+  postInstallCheck = ''
+    $out/bin/xh --help > /dev/null
+    $out/bin/xhs --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Friendly and fast tool for sending HTTP requests";
+    homepage = "https://github.com/ducaale/xh";
+    changelog = "https://github.com/ducaale/xh/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda payas ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/xl2tpd/default.nix b/nixpkgs/pkgs/tools/networking/xl2tpd/default.nix
new file mode 100644
index 000000000000..2f84a4d330fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xl2tpd/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, libpcap, ppp }:
+
+stdenv.mkDerivation rec {
+  pname = "xl2tpd";
+  version = "1.3.18";
+
+  src = fetchFromGitHub {
+    owner = "xelerance";
+    repo = "xl2tpd";
+    rev = "v${version}";
+    sha256 = "sha256-Uc3PeTf/ow9p8noPcMLdT6S5dks9igDU6CC9koy+ff4=";
+  };
+
+  buildInputs = [ libpcap ];
+
+  postPatch = ''
+    substituteInPlace l2tp.h --replace /usr/sbin/pppd ${ppp}/sbin/pppd
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = src.meta.homepage;
+    description = "Layer 2 Tunnelling Protocol Daemon (RFC 2661)";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/xnbd/0001-Fix-build-for-glibc-2.28.patch b/nixpkgs/pkgs/tools/networking/xnbd/0001-Fix-build-for-glibc-2.28.patch
new file mode 100644
index 000000000000..712183e56c74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xnbd/0001-Fix-build-for-glibc-2.28.patch
@@ -0,0 +1,25 @@
+From e799a7e0a64696e4ef6c088d36e4db09f8323581 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Sun, 19 Jan 2020 22:37:04 +0100
+Subject: [PATCH] Fix build for glibc>=2.28
+
+The major/minor macros are defined in <sys/sysmacros.h> now.
+---
+ lib/io.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/lib/io.h b/lib/io.h
+index 8703cc8..e3d0d10 100644
+--- a/lib/io.h
++++ b/lib/io.h
+@@ -33,6 +33,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/mman.h>
++#include <sys/sysmacros.h>
+ 
+ 
+ void read_all(int fd, void *buf, size_t len);
+-- 
+2.23.1
+
diff --git a/nixpkgs/pkgs/tools/networking/xnbd/default.nix b/nixpkgs/pkgs/tools/networking/xnbd/default.nix
new file mode 100644
index 000000000000..52f332a0e8f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xnbd/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, pkg-config, autoreconfHook, glib, jansson }:
+
+stdenv.mkDerivation rec {
+  pname = "xnbd";
+  version = "0.4.0";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/hirofuchi/xnbd/downloads/xnbd-${version}.tgz";
+    sha256 = "00wkvsa0yaq4mabczcbfpj6rjvp02yahw8vdrq8hgb3wpm80x913";
+  };
+
+  sourceRoot = "xnbd-${version}/trunk";
+
+  patches = [ ./0001-Fix-build-for-glibc-2.28.patch ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ glib jansson ];
+
+  # do not build docs, it is slow and it fails on Hydra
+  prePatch = ''
+    rm -rf doc
+    substituteInPlace configure.ac --replace "doc/Makefile" ""
+    substituteInPlace Makefile.am --replace "lib doc ." "lib ."
+  '';
+
+  meta = {
+    homepage = "https://bitbucket.org/hirofuchi/xnbd";
+    description = "Yet another NBD (Network Block Device) server program";
+    license = lib.licenses.gpl2;
+    maintainers = [ ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/xray/default.nix b/nixpkgs/pkgs/tools/networking/xray/default.nix
new file mode 100644
index 000000000000..2c2fce54e608
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xray/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitHub
+, symlinkJoin
+, buildGoModule
+, makeWrapper
+, nix-update-script
+, v2ray-geoip
+, v2ray-domain-list-community
+, assets ? [ v2ray-geoip v2ray-domain-list-community ]
+}:
+
+buildGoModule rec {
+  pname = "xray";
+  version = "1.8.7";
+
+  src = fetchFromGitHub {
+    owner = "XTLS";
+    repo = "Xray-core";
+    rev = "v${version}";
+    hash = "sha256-yS2DsM9RVAHStoqWVns9GkoYuFS69v7S3uTbRaV9Aog=";
+  };
+
+  vendorHash = "sha256-HRUUZjc0TcZ/fXTneG/h/m3QyesHL+/Nu1pFqZ3LUDI=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" ];
+  subPackages = [ "main" ];
+
+   installPhase = ''
+    runHook preInstall
+    install -Dm555 "$GOPATH"/bin/main $out/bin/xray
+    runHook postInstall
+  '';
+
+  assetsDrv = symlinkJoin {
+    name = "v2ray-assets";
+    paths = assets;
+  };
+
+  postFixup = ''
+    wrapProgram $out/bin/xray \
+      --suffix V2RAY_LOCATION_ASSET : $assetsDrv/share/v2ray \
+      --suffix XRAY_LOCATION_ASSET : $assetsDrv/share/v2ray
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = {
+    description = "A platform for building proxies to bypass network restrictions. A replacement for v2ray-core, with XTLS support and fully compatible configuration";
+    homepage = "https://github.com/XTLS/Xray-core";
+    license = with lib.licenses; [ mpl20 ];
+    maintainers = with lib.maintainers; [ iopq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/xrootd/default.nix b/nixpkgs/pkgs/tools/networking/xrootd/default.nix
new file mode 100644
index 000000000000..1ceb6380aaa1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xrootd/default.nix
@@ -0,0 +1,152 @@
+{ lib
+, stdenv
+, callPackage
+, fetchFromGitHub
+, davix
+, cmake
+, cppunit
+, gtest
+, makeWrapper
+, pkg-config
+, curl
+, fuse
+, libkrb5
+, libuuid
+, libxcrypt
+, libxml2
+, openssl
+, readline
+, scitokens-cpp
+, systemd
+, voms
+, zlib
+  # Build bin/test-runner
+, enableTestRunner ? true
+  # If not null, the builder will
+  # move "$out/etc" to "$out/etc.orig" and symlink "$out/etc" to externalEtc.
+, externalEtc ? "/etc"
+, removeReferencesTo
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xrootd";
+  version = "5.6.6";
+
+  src = fetchFromGitHub {
+    owner = "xrootd";
+    repo = "xrootd";
+    rev = "v${finalAttrs.version}";
+    fetchSubmodules = true;
+    hash = "sha256-vSZKTsDMY5bhfniFOQ11VA30gjfb4Y8tCC7JNjNw8Y0=";
+  };
+
+  outputs = [ "bin" "out" "dev" "man" ]
+  ++ lib.optional (externalEtc != null) "etc";
+
+  passthru.fetchxrd = callPackage ./fetchxrd.nix { xrootd = finalAttrs.finalPackage; };
+  passthru.tests =
+    lib.optionalAttrs stdenv.hostPlatform.isLinux {
+      test-runner = callPackage ./test-runner.nix { xrootd = finalAttrs.finalPackage; };
+    } // {
+    test-xrdcp = finalAttrs.passthru.fetchxrd {
+      pname = "xrootd-test-xrdcp";
+      # Use the the bin output hash of xrootd as version to ensure that
+      # the test gets rebuild everytime xrootd gets rebuild
+      version = finalAttrs.version + "-" + builtins.substring (builtins.stringLength builtins.storeDir + 1) 32 "${finalAttrs.finalPackage}";
+      url = "root://eospublic.cern.ch//eos/opendata/alice/2010/LHC10h/000138275/ESD/0000/AliESDs.root";
+      hash = "sha256-tIcs2oi+8u/Qr+P7AAaPTbQT+DEt26gEdc4VNerlEHY=";
+    };
+  }
+  ;
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    pkg-config
+    removeReferencesTo
+  ];
+
+  buildInputs = [
+    davix
+    curl
+    libkrb5
+    libuuid
+    libxcrypt
+    libxml2
+    openssl
+    readline
+    scitokens-cpp
+    zlib
+  ]
+  ++ lib.optionals (!stdenv.isDarwin) [
+    # https://github.com/xrootd/xrootd/blob/5b5a1f6957def2816b77ec773c7e1bfb3f1cfc5b/cmake/XRootDFindLibs.cmake#L58
+    fuse
+  ]
+  ++ lib.optionals stdenv.isLinux [
+    systemd
+    voms
+  ]
+  ++ lib.optionals enableTestRunner [
+    gtest
+    cppunit
+  ];
+
+  preConfigure = ''
+    patchShebangs genversion.sh
+    substituteInPlace cmake/XRootDConfig.cmake.in \
+      --replace-fail "@PACKAGE_CMAKE_INSTALL_" "@CMAKE_INSTALL_FULL_"
+  '' + lib.optionalString stdenv.isDarwin ''
+    sed -i cmake/XRootDOSDefs.cmake -e '/set( MacOSX TRUE )/ainclude( GNUInstallDirs )'
+  '';
+
+  # https://github.com/xrootd/xrootd/blob/master/packaging/rhel/xrootd.spec.in#L665-L675=
+  postInstall = ''
+    mkdir -p "$out/lib/tmpfiles.d"
+    install -m 644 -T ../packaging/rhel/xrootd.tmpfiles "$out/lib/tmpfiles.d/xrootd.conf"
+    mkdir -p "$out/etc/xrootd"
+    install -m 644 -t "$out/etc/xrootd" ../packaging/common/*.cfg
+    install -m 644 -t "$out/etc/xrootd" ../packaging/common/client.conf
+    mkdir -p "$out/etc/xrootd/client.plugins.d"
+    install -m 644 -t "$out/etc/xrootd/client.plugins.d" ../packaging/common/client-plugin.conf.example
+    mkdir -p "$out/etc/logrotate.d"
+    install -m 644 -T ../packaging/common/xrootd.logrotate "$out/etc/logrotate.d/xrootd"
+  ''
+  # Leaving those in bin/ leads to a cyclic reference between $dev and $bin
+  # This happens since https://github.com/xrootd/xrootd/commit/fe268eb622e2192d54a4230cea54c41660bd5788
+  # So far, this xrootd-config script does not seem necessary in $bin
+  + ''
+    moveToOutput "bin/xrootd-config" "$dev"
+    moveToOutput "bin/.xrootd-config-wrapped" "$dev"
+  '' + lib.optionalString stdenv.isLinux ''
+    mkdir -p "$out/lib/systemd/system"
+    install -m 644 -t "$out/lib/systemd/system" ../packaging/common/*.service ../packaging/common/*.socket
+  '';
+
+  cmakeFlags = [
+    "-DXRootD_VERSION_STRING=${finalAttrs.version}"
+  ] ++ lib.optionals enableTestRunner [
+    "-DFORCE_ENABLED=TRUE"
+    "-DENABLE_DAVIX=TRUE"
+    "-DENABLE_FUSE=${if (!stdenv.isDarwin) then "TRUE" else "FALSE"}" # not supported
+    "-DENABLE_MACAROONS=OFF"
+    "-DENABLE_PYTHON=FALSE" # built separately
+    "-DENABLE_SCITOKENS=TRUE"
+    "-DENABLE_TESTS=TRUE"
+    "-DENABLE_VOMS=${if stdenv.isLinux then "TRUE" else "FALSE"}"
+  ];
+
+  postFixup = lib.optionalString (externalEtc != null) ''
+    moveToOutput etc "$etc"
+    ln -s ${lib.escapeShellArg externalEtc} "$out/etc"
+  '';
+
+  dontPatchELF = true; # shrinking rpath will cause runtime failures in dlopen
+
+  meta = with lib; {
+    description = "High performance, scalable fault tolerant data access";
+    homepage = "https://xrootd.slac.stanford.edu";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ShamrockLee ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/xrootd/fetchxrd.nix b/nixpkgs/pkgs/tools/networking/xrootd/fetchxrd.nix
new file mode 100644
index 000000000000..21d7a2a0386d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xrootd/fetchxrd.nix
@@ -0,0 +1,40 @@
+{ lib
+, runCommandLocal
+, buildPlatform
+, xrootd
+}:
+
+{ name ? ""
+, pname ? ""
+, version ? ""
+, urls ? [ ]
+, url ? if urls == [ ] then abort "Expect either non-empty `urls` or `url`" else builtins.head urls
+, hash ? lib.fakeHash
+}:
+
+(runCommandLocal name
+  {
+    nativeBuildInputs = [ xrootd ];
+    outputHashAlgo = null;
+    outputHashMode = "flat";
+    outputHash = hash;
+    inherit url;
+    urls = if urls == [ ] then lib.singleton url else urls;
+  }
+  ''
+    for u in $urls; do
+      xrdcp --verbose --force "$u" "$out"
+      ret=$?
+      (( ret != 0 )) || break
+    done
+    if (( ret )); then
+      echo "xrdcp failed trying to download any of the urls" >&2
+      exit $ret
+    fi
+  '').overrideAttrs (finalAttrs:
+if (pname != "" && version != "") then {
+  inherit pname version;
+  name = "${pname}-${version}";
+} else {
+  name = if (name != "") then name else (baseNameOf finalAttrs.url);
+})
diff --git a/nixpkgs/pkgs/tools/networking/xrootd/test-runner.nix b/nixpkgs/pkgs/tools/networking/xrootd/test-runner.nix
new file mode 100644
index 000000000000..5bcf1ae86759
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xrootd/test-runner.nix
@@ -0,0 +1,27 @@
+{ lib
+, runCommand
+, xrootd
+}:
+
+# These tests are specified in the test procedure of the upstream CD:
+# https://github.com/xrootd/xrootd/blob/master/.github/workflows/build.yml#L90-L98
+runCommand "${xrootd.pname}-run-tests-${xrootd.version}" {
+  testRunnerPath = "${xrootd}/bin/test-runner";
+  testLibraries = [ "XrdClTests" ];
+  XrdClTestsSuites = [ "UtilsTest" "SocketTest" "PollerTest" ];
+  pname = "${xrootd.pname}-run-tests";
+  inherit (xrootd) version;
+  meta.mainProgram = "test-runner";
+} ''
+  for testLibrary in $testLibraries; do
+    echo "Testing $testLibrary"
+    testLibraryPath="${xrootd.out}/lib/lib''${testLibrary}.so"
+    testsuiteVarname="''${testLibrary}Suites"
+    for testsuite in ''${!testsuiteVarname}; do
+      echo "Doing test $testsuite"
+      "$testRunnerPath" "$testLibraryPath" "All Tests/$testsuite/"
+    done
+  done
+  mkdir -p "$out/bin"
+  ln -s "$testRunnerPath" "$out/bin/test-runner"
+''
diff --git a/nixpkgs/pkgs/tools/networking/xxh/default.nix b/nixpkgs/pkgs/tools/networking/xxh/default.nix
new file mode 100644
index 000000000000..eba8abbf7905
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xxh/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, python3
+, openssh
+, nixosTests
+}:
+
+python3.pkgs.buildPythonApplication rec{
+  pname = "xxh";
+  version = "0.8.12";
+  format = "setuptools";
+
+  disabled = python3.pkgs.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-3/AU2o72X7FE11NSXC6m9fFhmjzEDZ+OpTXg8yvv62A=";
+  };
+
+  propagatedBuildInputs = [
+    python3.pkgs.pexpect
+    python3.pkgs.pyyaml
+    openssh
+  ];
+
+  passthru.tests = {
+    inherit (nixosTests) xxh;
+  };
+
+  meta = with lib; {
+    description = "Bring your favorite shell wherever you go through SSH";
+    homepage = "https://github.com/xxh/xxh";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ pasqui23 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/yrd/default.nix b/nixpkgs/pkgs/tools/networking/yrd/default.nix
new file mode 100644
index 000000000000..04fee4daf541
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/yrd/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "yrd";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "kpcyrd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1yx1hr8z4cvlb3yi24dwafs0nxq41k4q477jc9q24w61a0g662ps";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    argh
+    requests
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    nose
+  ];
+
+  checkPhase = ''
+    nosetests -v yrd
+  '';
+
+  meta = with lib; {
+    description = "Cjdns swiss army knife";
+    maintainers = with maintainers; [ akru ];
+    platforms = platforms.linux;
+    license = licenses.gpl3Only;
+    homepage = "https://github.com/kpcyrd/yrd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ytcc/default.nix b/nixpkgs/pkgs/tools/networking/ytcc/default.nix
new file mode 100644
index 000000000000..d771db21d494
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ytcc/default.nix
@@ -0,0 +1,60 @@
+{ lib, python3Packages, fetchFromGitHub, gettext, installShellFiles }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ytcc";
+  version = "2.6.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "woefe";
+    repo = "ytcc";
+    rev = "v${version}";
+    hash = "sha256-pC2uoog+nev/Xa6UbXX4vX00VQQLHtZzbVkxrxO/Pg8=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    installShellFiles
+  ] ++ (with python3Packages; [
+    setuptools
+  ]);
+
+  propagatedBuildInputs = with python3Packages; [
+    yt-dlp
+    click
+    wcwidth
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+  ];
+
+  # Disable tests that touch network or shell out to commands
+  disabledTests = [
+    "get_channels"
+    "play_video"
+    "download_videos"
+    "update_all"
+    "add_channel_duplicate"
+    "test_subscribe"
+    "test_import"
+    "test_import_duplicate"
+    "test_update"
+    "test_download"
+  ];
+
+  postInstall = ''
+    installManPage doc/ytcc.1
+    installShellCompletion --cmd ytcc \
+      --bash scripts/completions/bash/ytcc.completion.sh \
+      --fish scripts/completions/fish/ytcc.fish \
+      --zsh scripts/completions/zsh/_ytcc
+  '';
+
+  meta = {
+    description = "Command Line tool to keep track of your favourite YouTube channels without signing up for a Google account";
+    homepage = "https://github.com/woefe/ytcc";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ marius851000 marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/zap/default.nix b/nixpkgs/pkgs/tools/networking/zap/default.nix
new file mode 100644
index 000000000000..9bb63cf37e7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zap/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, jre, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "zap";
+  version = "2.14.0";
+  src = fetchurl {
+    url = "https://github.com/zaproxy/zaproxy/releases/download/v${version}/ZAP_${version}_Linux.tar.gz";
+    sha256 = "sha256-IZ1/JbviUkdxOAWrAswSJ5iYyHB0PBquPCsLGIIZGWA=";
+  };
+
+  buildInputs = [ jre ];
+
+  # From https://github.com/zaproxy/zaproxy/blob/master/zap/src/main/java/org/parosproxy/paros/Constant.java
+  version_tag = "20012000";
+
+  # Copying config and adding version tag before first use to avoid permission
+  # issues if zap tries to copy config on it's own.
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/share"
+    cp -pR . "$out/share/${pname}/"
+
+    cat >> "$out/bin/${pname}" << EOF
+    #!${runtimeShell}
+    export PATH="${lib.makeBinPath [ jre ]}:\$PATH"
+    export JAVA_HOME='${jre}'
+    if ! [ -f "\$HOME/.ZAP/config.xml" ];then
+      mkdir -p "\$HOME/.ZAP"
+      head -n 2 $out/share/${pname}/xml/config.xml > "\$HOME/.ZAP/config.xml"
+      echo "<version>${version_tag}</version>" >> "\$HOME/.ZAP/config.xml"
+      tail -n +3 $out/share/${pname}/xml/config.xml >> "\$HOME/.ZAP/config.xml"
+    fi
+    exec "$out/share/${pname}/zap.sh"  "\$@"
+    EOF
+
+    chmod u+x  "$out/bin/${pname}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.owasp.org/index.php/ZAP";
+    description = "Java application for web penetration testing";
+    maintainers = with maintainers; [ mog rafael ];
+    platforms = platforms.linux;
+    license = licenses.asl20;
+    mainProgram = "zap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/zerotierone/Cargo.lock b/nixpkgs/pkgs/tools/networking/zerotierone/Cargo.lock
new file mode 100644
index 000000000000..b01e68e2d084
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zerotierone/Cargo.lock
@@ -0,0 +1,1699 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cbindgen"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51e3973b165dc0f435831a9e426de67e894de532754ff7a3f307c03ee5dec7dc"
+dependencies = [
+ "clap",
+ "heck",
+ "indexmap",
+ "log",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "syn 1.0.109",
+ "tempfile",
+ "toml",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "serde",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags 1.3.2",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.10.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7684a49fb1af197853ef7b2ee694bc1f5b4179556f1e5710e1760c5db6f5e929"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+
+[[package]]
+name = "h2"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "jwt"
+version = "0.16.0"
+source = "git+https://github.com/glimberg/rust-jwt#61a9291fdeec747c6edf14f4fa0caf235136c168"
+dependencies = [
+ "base64 0.13.1",
+ "crypto-common",
+ "digest",
+ "hmac",
+ "serde",
+ "serde_json",
+ "sha2",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "oauth2"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09a6e2a2b13a56ebeabba9142f911745be6456163fd6c3d361274ebcd891a80c"
+dependencies = [
+ "base64 0.13.1",
+ "chrono",
+ "getrandom",
+ "http",
+ "rand",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "sha2",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "object"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "openidconnect"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98dd5b7049bac4fdd2233b8c9767d42c05da8006fdb79cc903258556d2b18009"
+dependencies = [
+ "base64 0.13.1",
+ "chrono",
+ "http",
+ "itertools",
+ "log",
+ "num-bigint",
+ "oauth2",
+ "rand",
+ "ring",
+ "serde",
+ "serde-value",
+ "serde_derive",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_plain",
+ "serde_with",
+ "subtle",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729b745ad4a5575dd06a3e1af1414bd330ee561c01b3899eb584baeaa8def17e"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "866b5f16f90776b9bb8dc1e1802ac6f0513de3a7a7465867bfbc563dc737faac"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-float"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "base64 0.21.2",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustix"
+version = "0.38.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.183"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+ "ordered-float",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.183"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
+dependencies = [
+ "itoa",
+ "serde",
+]
+
+[[package]]
+name = "serde_plain"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6018081315db179d0ce57b1fe4b62a12a0028c9cf9bbef868c9cf477b3c34ae"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc02fddf48964c42031a0b3fe0428320ecf3a73c401040fc0096f97794310651"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "time"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fdd63d58b18d663fbdf70e049f00a22c8e42be082203be7f26589213cd75ea"
+dependencies = [
+ "deranged",
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb71511c991639bb078fd5bf97757e03914361c48100d52878b8e52b46fb92cd"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2 0.5.3",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "zeroidc"
+version = "0.1.0"
+dependencies = [
+ "base64 0.21.2",
+ "bytes",
+ "cbindgen",
+ "jwt",
+ "openidconnect",
+ "reqwest",
+ "serde",
+ "thiserror",
+ "time",
+ "tokio",
+ "url",
+]
diff --git a/nixpkgs/pkgs/tools/networking/zerotierone/default.nix b/nixpkgs/pkgs/tools/networking/zerotierone/default.nix
new file mode 100644
index 000000000000..1bf10ce2c408
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zerotierone/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, buildPackages
+, cargo
+, lzo
+, openssl
+, pkg-config
+, ronn
+, rustc
+, zlib
+}:
+
+let
+  pname = "zerotierone";
+  version = "1.12.2";
+
+  src = fetchFromGitHub {
+    owner = "zerotier";
+    repo = "ZeroTierOne";
+    rev = version;
+    sha256 = "sha256-p0zrYgbHTLefj5GTrMnYLytCXZ/nRuqTL+6dEeC+uVw=";
+  };
+
+in stdenv.mkDerivation {
+  inherit pname version src;
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "jwt-0.16.0" = "sha256-P5aJnNlcLe9sBtXZzfqHdRvxNfm6DPBcfcKOVeLZxcM=";
+    };
+  };
+  postPatch = "cp ${./Cargo.lock} Cargo.lock";
+
+  preConfigure = ''
+    cmp ./Cargo.lock ./zeroidc/Cargo.lock || {
+      echo 1>&2 "Please make sure that the derivation's Cargo.lock is identical to ./zeroidc/Cargo.lock!"
+      exit 1
+    }
+
+    patchShebangs ./doc/build.sh
+    substituteInPlace ./doc/build.sh \
+      --replace '/usr/bin/ronn' '${buildPackages.ronn}/bin/ronn' \
+
+    substituteInPlace ./make-linux.mk \
+      --replace '-march=armv6zk' "" \
+      --replace '-mcpu=arm1176jzf-s' ""
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    ronn
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+  ];
+  buildInputs = [
+    lzo
+    openssl
+    zlib
+  ];
+
+  enableParallelBuilding = true;
+
+  buildFlags = [ "all" "selftest" ];
+
+  doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
+  checkPhase = ''
+    runHook preCheck
+    ./zerotier-selftest
+    runHook postCheck
+  '';
+
+  installFlags = [ "DESTDIR=$$out/upstream" ];
+
+  postInstall = ''
+    mv $out/upstream/usr/sbin $out/bin
+
+    mkdir -p $man/share
+    mv $out/upstream/usr/share/man $man/share/man
+
+    rm -rf $out/upstream
+  '';
+
+  outputs = [ "out" "man" ];
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Create flat virtual Ethernet networks of almost unlimited size";
+    homepage = "https://www.zerotier.com";
+    license = licenses.bsl11;
+    maintainers = with maintainers; [ sjmackenzie zimbatm ehmry obadz danielfullmer ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/zerotierone/update.sh b/nixpkgs/pkgs/tools/networking/zerotierone/update.sh
new file mode 100755
index 000000000000..24b0d91d37cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zerotierone/update.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq common-updater-scripts
+
+version=$(curl --silent "https://api.github.com/repos/zerotier/ZeroTierOne/releases" | jq '.[0].tag_name' --raw-output)
+
+curl --silent "https://raw.githubusercontent.com/zerotier/ZeroTierOne/$version/zeroidc/Cargo.lock" > "$(dirname "$0")/Cargo.lock"
+update-source-version zerotierone "$version"
diff --git a/nixpkgs/pkgs/tools/networking/zrok/default.nix b/nixpkgs/pkgs/tools/networking/zrok/default.nix
new file mode 100644
index 000000000000..68d4ad3ba125
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zrok/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchzip
+}:
+
+let
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "Unsupported system: ${system}";
+
+  plat = {
+    x86_64-linux = "linux_amd64";
+    aarch64-linux = "linux_arm64";
+    armv7l-linux = "linux_armv7";
+  }.${system} or throwSystem;
+
+  hash = {
+    x86_64-linux = "sha256-17RtPUuFmIwxh+9mEsR9vwUHQHnXLIHEEhpV05Q9Ssw=";
+    aarch64-linux = "sha256-bJjhKf8dkOsVaaPikDrPLe+zF5CFvxvEALuzmiQuINY=";
+    armv7l-linux = "sha256-m/Ncr/+5kkC4p1/DhEfWermdsOAuekVECzR7SI1KpIQ=";
+  }.${system} or throwSystem;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "zrok";
+  version = "0.4.24";
+
+  src = fetchzip {
+    url = "https://github.com/openziti/zrok/releases/download/v${finalAttrs.version}/zrok_${finalAttrs.version}_${plat}.tar.gz";
+    stripRoot = false;
+    inherit hash;
+  };
+
+  updateScript = ./update.sh;
+
+  installPhase = let
+    interpreter = "$(< \"$NIX_CC/nix-support/dynamic-linker\")";
+  in ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp zrok $out/bin/
+    chmod +x $out/bin/zrok
+    patchelf --set-interpreter "${interpreter}" "$out/bin/zrok"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Geo-scale, next-generation sharing platform built on top of OpenZiti";
+    homepage = "https://zrok.io";
+    license = lib.licenses.asl20;
+    mainProgram = "zrok";
+    maintainers = [ lib.maintainers.bandresen ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "armv7l-linux" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/networking/zrok/update.sh b/nixpkgs/pkgs/tools/networking/zrok/update.sh
new file mode 100755
index 000000000000..71a09919a850
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zrok/update.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused gawk nix-prefetch
+
+set -euo pipefail
+
+ROOT="$(dirname "$(readlink -f "$0")")"
+NIX_DRV="$ROOT/default.nix"
+if [ ! -f "$NIX_DRV" ]; then
+  echo "ERROR: cannot find default.nix in $ROOT"
+  exit 1
+fi
+
+fetch_arch() {
+  VER="$1"; ARCH="$2"
+  URL="https://github.com/openziti/zrok/releases/download/v${VER}/zrok_${VER}_${ARCH}.tar.gz"
+  nix-prefetch "{ stdenv, fetchzip }:
+stdenv.mkDerivation rec {
+  pname = \"zrok\"; version = \"${VER}\";
+  src = fetchzip { url = \"$URL\"; stripRoot = false; };
+}
+"
+}
+
+replace_sha() {
+  sed -i "s#$1 = \"sha256-.\{44\}\"#$1 = \"$2\"#" "$NIX_DRV"
+}
+
+ZROK_VER=$(curl -Ls -w "%{url_effective}" -o /dev/null https://github.com/openziti/zrok/releases/latest | awk -F'/' '{print $NF}' | sed 's/v//')
+
+ZROK_LINUX_X64_SHA256=$(fetch_arch "$ZROK_VER" "linux_amd64")
+ZROK_LINUX_AARCH64_SHA256=$(fetch_arch "$ZROK_VER" "linux_arm64")
+ZROK_LINUX_ARMV7L_SHA256=$(fetch_arch "$ZROK_VER" "linux_armv7")
+
+sed -i "s/version = \".*\"/version = \"$ZROK_VER\"/" "$NIX_DRV"
+
+replace_sha "x86_64-linux" "$ZROK_LINUX_X64_SHA256"
+replace_sha "aarch64-linux" "$ZROK_LINUX_AARCH64_SHA256"
+replace_sha "armv7l-linux" "$ZROK_LINUX_ARMV7L_SHA256"
diff --git a/nixpkgs/pkgs/tools/networking/zs-apc-spdu-ctl/default.nix b/nixpkgs/pkgs/tools/networking/zs-apc-spdu-ctl/default.nix
new file mode 100644
index 000000000000..d832a102f33b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zs-apc-spdu-ctl/default.nix
@@ -0,0 +1,37 @@
+{ cmake
+, fetchFromGitHub
+, fping
+, lib
+, libowlevelzs
+, net-snmp
+, stdenv
+}:
+
+# TODO: add a services entry for the /etc/zs-apc-spdu.conf file
+stdenv.mkDerivation rec {
+  pname = "zs-apc-spdu-ctl";
+  version = "0.0.2";
+
+  src = fetchFromGitHub {
+    owner = "fogti";
+    repo = "zs-apc-spdu-ctl";
+    rev = "v${version}";
+    sha256 = "TMV9ETWBVeXq6tZ2e0CrvHBXoyKfOLCQurjBdf/iw/M=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libowlevelzs net-snmp ];
+
+  postPatch = ''
+    substituteInPlace src/confent.cxx \
+      --replace /usr/sbin/fping "${fping}/bin/fping"
+  '';
+
+  meta = with lib; {
+    description = "APC SPDU control utility";
+    license = licenses.mit;
+    maintainers = [ maintainers.fogti ];
+    platforms = platforms.linux;
+    mainProgram = "zs-apc-spdu-ctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/zs-wait4host/default.nix b/nixpkgs/pkgs/tools/networking/zs-wait4host/default.nix
new file mode 100644
index 000000000000..a33d25561e2e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zs-wait4host/default.nix
@@ -0,0 +1,34 @@
+{ coreutils, fetchurl, fping, lib, stdenvNoCC }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "zs-wait4host";
+  version = "0.3.2";
+
+  src = fetchurl {
+    url = "https://ytrizja.de/distfiles/${pname}-${version}.tar.gz";
+    sha256 = "9F1264BDoGlRR7bWlRXhfyvxWio4ydShKmabUQEIz9I=";
+  };
+
+  postPatch = ''
+    for i in zs-wait4host zs-wait4host-inf; do
+      substituteInPlace "$i" \
+        --replace '$(zs-guess-fping)' '${fping}/bin/fping' \
+        --replace ' sleep ' ' ${coreutils}/bin/sleep ' \
+        --replace '[ "$FPING" ] || exit 1' ""
+    done
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D -t $out/bin zs-wait4host zs-wait4host-inf
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Wait for a host to come up/go down";
+    homepage = "https://ytrizja.de/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.fogti ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/zssh/default.nix b/nixpkgs/pkgs/tools/networking/zssh/default.nix
new file mode 100644
index 000000000000..3c4be71998e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zssh/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, readline }:
+
+let
+  version = "1.5c";
+in stdenv.mkDerivation rec {
+  pname = "zssh";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/zssh/${pname}-${version}.tgz";
+    sha256 = "06z73iq59lz8ibjrgs7d3xl39vh9yld1988yx8khssch4pw41s52";
+  };
+
+  buildInputs = [ readline ];
+
+  patches = [
+    # Cargo-culted from Arch, returns “out of pty's†without it
+    (fetchurl {
+      name = "fix_use_ptmx_on_arch.patch";
+      url = "https://raw.githubusercontent.com/archlinux/svntogit-community/0a7c92543f9309856d02e31196f06d7c3eaa8b67/trunk/fix_use_ptmx_on_arch.patch";
+      sha256 = "12daw9wpy58ql882zww945wk9cg2adwp8qsr5rvazx0xq0qawgbr";
+    })
+  ];
+
+  patchFlags = [ "-p0" ];
+
+  # The makefile does not create the directories
+  postBuild = ''
+    install -dm755 "$out"/{bin,man/man1}
+  '';
+
+  meta = {
+    description = "SSH and Telnet client with ZMODEM file transfer capability";
+    homepage = "https://zssh.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    maintainers = [ ]; # required by deepin-terminal
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/alejandra/default.nix b/nixpkgs/pkgs/tools/nix/alejandra/default.nix
new file mode 100644
index 000000000000..2dc35be81106
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/alejandra/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, testers
+, alejandra
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "alejandra";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "kamadorueda";
+    repo = "alejandra";
+    rev = version;
+    hash = "sha256-xFumnivtVwu5fFBOrTxrv6fv3geHKF04RGP23EsDVaI=";
+  };
+
+  cargoHash = "sha256-tF8E9mnvkTXoViVss9cNjpU4UkEsARp4RtlxKWq55hc=";
+
+  passthru.tests = {
+    version = testers.testVersion { package = alejandra; };
+  };
+
+  meta = with lib; {
+    description = "The Uncompromising Nix Code Formatter";
+    homepage = "https://github.com/kamadorueda/alejandra";
+    changelog = "https://github.com/kamadorueda/alejandra/blob/${version}/CHANGELOG.md";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ _0x4A6F kamadorueda sciencentistguy ];
+    mainProgram = "alejandra";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/cached-nix-shell/default.nix b/nixpkgs/pkgs/tools/nix/cached-nix-shell/default.nix
new file mode 100644
index 000000000000..0cbf0f6b106d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/cached-nix-shell/default.nix
@@ -0,0 +1,46 @@
+{ lib, fetchFromGitHub, nix, ronn, rustPlatform }:
+
+let
+  blake3-src = fetchFromGitHub {
+    owner = "BLAKE3-team";
+    repo = "BLAKE3";
+    rev = "0.3.3";
+    sha256 = "0av41ld0gqf3g60gcllpz59nqlr7r62v99mgfq9gs0p8diw5gi7x";
+  };
+
+in rustPlatform.buildRustPackage rec {
+  pname = "cached-nix-shell";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "xzfc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "17v38llx83mp05a0axjxcd2zyafd57syh7xhx5cq6qibcbha0by9";
+  };
+
+  cargoSha256 = "1jkkwsn3k2anmzf99x99r9zfnf0gpcjbi5pyakh4agiryqcdyg0j";
+
+  # The BLAKE3 C library is intended to be built by the project depending on it
+  # rather than as a standalone library.
+  # https://github.com/BLAKE3-team/BLAKE3/blob/0.3.1/c/README.md#building
+  BLAKE3_CSRC = "${blake3-src}/c";
+
+  nativeBuildInputs = [ nix ronn ];
+
+  postBuild = ''
+    make -f nix/Makefile post-build
+  '';
+
+  postInstall = ''
+    make -f nix/Makefile post-install
+  '';
+
+  meta = with lib; {
+    description = "Instant startup time for nix-shell";
+    homepage = "https://github.com/xzfc/cached-nix-shell";
+    license = with licenses; [ unlicense /* or */ mit ];
+    maintainers = with maintainers; [ xzfc ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/dnadd/default.nix b/nixpkgs/pkgs/tools/nix/dnadd/default.nix
new file mode 100644
index 000000000000..59a0516629e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/dnadd/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "dnadd";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "JoeLancaster";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1vzbgz8y9gj4lszsx4iczfbrj373sl4wi43j7rp46zfcbw323d4r";
+  };
+
+  strictDeps = true;
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/joelancaster/dnadd";
+    description = "Adds packages declaratively on the command line";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ joelancaster ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/fh/default.nix b/nixpkgs/pkgs/tools/nix/fh/default.nix
new file mode 100644
index 000000000000..16df9471e694
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/fh/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+, gcc
+, libcxx
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fh";
+  version = "0.1.9";
+
+  src = fetchFromGitHub {
+    owner = "DeterminateSystems";
+    repo = "fh";
+    rev = "v${version}";
+    hash = "sha256-G2bLYand61E/s652Q+5XSfXdM6XUWixiXRRMd3HvfM4=";
+  };
+
+  cargoHash = "sha256-c3XxJQf2uHvj1X/djKyQg2AtrXdROyIVwLeYxFgHDNI=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+    gcc.cc.lib
+  ];
+
+  env = lib.optionalAttrs stdenv.isDarwin {
+    NIX_CFLAGS_COMPILE = "-I${lib.getDev libcxx}/include/c++/v1";
+  };
+
+  postInstall = ''
+    installShellCompletion --cmd fh \
+      --bash <($out/bin/fh completion bash) \
+      --fish <($out/bin/fh completion fish) \
+      --zsh <($out/bin/fh completion zsh)
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "The official FlakeHub CLI";
+    homepage = "https://github.com/DeterminateSystems/fh";
+    changelog = "https://github.com/DeterminateSystems/fh/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "fh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/gridlock/default.nix b/nixpkgs/pkgs/tools/nix/gridlock/default.nix
new file mode 100644
index 000000000000..e49750eba5ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/gridlock/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "gridlock";
+  version = "unstable-2023-08-29";
+
+  outputs = [ "out" "nyarr" ];
+
+  src = fetchFromGitHub {
+    owner = "lf-";
+    repo = "gridlock";
+    rev = "a98abfa554e5f8e2b7242662c0c714b7f1d7ec29";
+    hash = "sha256-I4NGfgNX79ZhWXDeUDJyDzP2GxcNhHhazVmmmPlz5js=";
+  };
+
+  cargoHash = "sha256-qz77c2IZGaWsinfkVTWqfEeBEtHng6W738jBwJAkrl4=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  postInstall = ''
+    moveToOutput bin/nyarr $nyarr
+  '';
+
+  meta = with lib; {
+    description = "Nix compatible lockfile manager, without Nix";
+    homepage = "https://github.com/lf-/gridlock";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/info/default.nix b/nixpkgs/pkgs/tools/nix/info/default.nix
new file mode 100644
index 000000000000..73c336afe045
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/info/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, coreutils, findutils, gnugrep, darwin, bash
+# Avoid having GHC in the build-time closure of all NixOS configurations
+, doCheck ? false, shellcheck
+}:
+
+stdenv.mkDerivation {
+  name = "nix-info";
+  src = ./info.sh;
+
+  path = lib.makeBinPath ([
+    coreutils findutils gnugrep
+  ] ++ (lib.optionals stdenv.isDarwin [ darwin.DarwinTools ]));
+  is_darwin = if stdenv.isDarwin then "yes" else "no";
+
+  sandboxtest = ./sandbox.nix;
+  relaxedsandboxtest = ./relaxedsandbox.nix;
+  multiusertest = ./multiuser.nix;
+
+  unpackCmd = ''
+    mkdir nix-info
+    cp $src ./nix-info/nix-info
+  '';
+
+  buildPhase  = ''
+    substituteAllInPlace ./nix-info
+  '';
+
+  inherit doCheck;
+  strictDeps = true;
+  nativeCheckInputs = [ shellcheck ];
+  buildInputs = [ bash ];
+
+  checkPhase = ''
+    shellcheck ./nix-info
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./nix-info $out/bin/nix-info
+  '';
+
+  preferLocalBuild = true;
+
+  meta = {
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/info/info.sh b/nixpkgs/pkgs/tools/nix/info/info.sh
new file mode 100755
index 000000000000..15bed4af74d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/info/info.sh
@@ -0,0 +1,174 @@
+#!/bin/bash
+
+PATH="@path@:$PATH"
+IS_DARWIN="@is_darwin@"
+
+set -eu
+set -o pipefail
+
+DEBUG=0
+MARKDOWN=0
+HOST_OS=0
+SANDBOX=0
+while true; do
+    case "${1:-}" in
+        "")
+            break
+            ;;
+        -d | --debug)
+            set -x
+            DEBUG=1
+            shift
+            ;;
+        -m | --markdown)
+            MARKDOWN=1
+            HOST_OS=1
+            SANDBOX=1
+            shift
+            ;;
+        --host-os)
+            HOST_OS=1
+            shift
+            ;;
+        --sandbox)
+            SANDBOX=1
+            shift
+            ;;
+
+        * )
+            cat <<EOF
+nix-info - get high level info to help with debugging
+
+Options:
+
+ -m, --markdown   formatting for a GitHub issue
+                  implies: --host-os, --sandbox
+
+     --sandbox    include sandbox configuration
+     --host-os    include host OS details
+
+ -h, --help       show this message
+ -d, --debug      debug mode
+
+EOF
+            case "${1:-}" in
+                -h|--help)
+                    exit 0
+                    ;;
+                *)
+                    exit 1
+                    ;;
+            esac
+    esac
+done
+
+debuglog() {
+    if [ $DEBUG -eq 1 ]; then
+        cat >&2
+    else
+        cat > /dev/null
+    fi
+}
+
+nixev() {
+    nix-instantiate --eval --strict -E "$1"
+}
+
+desc_system() {
+    nixev 'builtins.currentSystem'
+}
+
+desc_host_os() {
+    printf "%s" "$(uname -sr)"
+
+    if [ "$IS_DARWIN" = "yes" ]; then
+        printf ", macOS %s" "$(sw_vers -productVersion)"
+    fi
+
+    if [ -f /etc/os-release ]; then
+        (
+            # shellcheck disable=SC1091
+            . /etc/os-release
+            printf ", %s, %s, %s" "${NAME:-$(uname -v)}" "${VERSION:-noversion}" "${BUILD_ID:-nobuild}"
+        )
+    fi
+}
+
+desc_multi_user() {
+    if nix-build --no-out-link  @multiusertest@ 2>&1 | debuglog; then
+        printf "yes"
+    else
+        printf "no"
+    fi
+}
+
+desc_nixpkgs_path() {
+    nixev '<nixpkgs>' 2>/dev/null || echo "not found"
+}
+
+channel_facts() {
+    find /nix/var/nix/profiles/per-user \
+         -mindepth 2 \
+         -maxdepth 2 \
+         -name channels \
+         -print0 \
+    |\
+    while  IFS= read -r -d '' userchannelset; do
+        manifest="$userchannelset/manifest.nix"
+
+        if [ -e "$manifest" ]; then
+            userchannels=$(nixev \
+                           "builtins.concatStringsSep \", \"
+                             (map (ch: ch.name)
+                               (import \"$manifest\"))")
+
+            fact "channels($(echo "$manifest" | cut -d/ -f7))" \
+                 "$userchannels"
+        fi
+    done
+}
+
+desc_sandbox() {
+    if nix-build --no-out-link @sandboxtest@ 2>&1 | debuglog; then
+        printf "no"
+    elif nix-build --no-out-link @relaxedsandboxtest@ 2>&1 | debuglog; then
+        printf "relaxed"
+    else
+        printf "yes"
+    fi
+}
+
+fact() {
+    name="${1:-0}"
+    value="${2:-0}"
+    last="${3:-1}"
+    if [ $MARKDOWN -eq 0 ]; then
+        printf "%s: %s" "$name" "$value"
+        if [ "$last" -eq 1 ]; then
+            printf ", "
+        fi
+    else
+        printf " - %s: \`%s\`\\n" "$name" "$value"
+    fi
+
+    if [ "$last" -eq 0 ]; then
+        echo ""
+    fi
+}
+
+last_fact() {
+    fact "$1" "$2" 0
+}
+
+fact "system" "$(desc_system)"
+if [ $HOST_OS -eq 1 ]; then
+    fact "host os" "$(desc_host_os)"
+fi
+fact "multi-user?" "$(desc_multi_user)"
+if [ $SANDBOX -eq 1 ]; then
+    fact "sandbox" "$(desc_sandbox)"
+fi
+
+fact "version" "$(nix-env --version)"
+channel_facts
+last_fact "nixpkgs" "$(desc_nixpkgs_path)"
diff --git a/nixpkgs/pkgs/tools/nix/info/multiuser.nix b/nixpkgs/pkgs/tools/nix/info/multiuser.nix
new file mode 100644
index 000000000000..827d52987673
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/info/multiuser.nix
@@ -0,0 +1,12 @@
+let
+  pkgs = import <nixpkgs> {};
+in pkgs.runCommand "diagnostics-multiuser"
+  {  }
+  ''
+    set -x
+    # no cache: ${toString builtins.currentTime}
+    # For reproducibility, nix always uses nixbld group:
+    # https://github.com/NixOS/nix/blob/1dd29d7aebae706f3e90a18bbfae727f2ed03c70/src/libstore/build.cc#L1896-L1908
+    test "$(groups)" == "nixbld"
+    touch $out
+  ''
diff --git a/nixpkgs/pkgs/tools/nix/info/relaxedsandbox.nix b/nixpkgs/pkgs/tools/nix/info/relaxedsandbox.nix
new file mode 100644
index 000000000000..625a6ecc39e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/info/relaxedsandbox.nix
@@ -0,0 +1,12 @@
+let
+  pkgs = import <nixpkgs> {};
+in pkgs.runCommand "diagnostics-sandbox"
+  {
+    __noChroot = true;
+  }
+  ''
+    set -x
+    # no cache: ${toString builtins.currentTime}
+    test -d "$(dirname "$out")/../var/nix"
+    touch $out
+  ''
diff --git a/nixpkgs/pkgs/tools/nix/info/sandbox.nix b/nixpkgs/pkgs/tools/nix/info/sandbox.nix
new file mode 100644
index 000000000000..fa4288c2f944
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/info/sandbox.nix
@@ -0,0 +1,10 @@
+let
+  pkgs = import <nixpkgs> {};
+in pkgs.runCommand "diagnostics-sandbox"
+  { }
+  ''
+    set -x
+    # no cache: ${toString builtins.currentTime}
+    test -d "$(dirname "$out")/../var/nix"
+    touch $out
+  ''
diff --git a/nixpkgs/pkgs/tools/nix/nar-serve/default.nix b/nixpkgs/pkgs/tools/nix/nar-serve/default.nix
new file mode 100644
index 000000000000..f2c709a2e312
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nar-serve/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+buildGoModule rec {
+  pname = "nar-serve";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "numtide";
+    repo = "nar-serve";
+    rev = "v${version}";
+    hash = "sha256-cSOYHYJJEGzFtkD4mjTmYBiM9CaWKt64xgV/JeNHpfM=";
+  };
+
+  vendorHash = "sha256-RpjLs4+9abbbysYAlPDUXBLe1cz4Lp+QmR1yv+LpYwQ=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Serve NAR file contents via HTTP";
+    homepage = "https://github.com/numtide/nar-serve";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rizary zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nix-init/default.nix b/nixpkgs/pkgs/tools/nix/nix-init/default.nix
new file mode 100644
index 000000000000..a50a7fc1a0d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-init/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, writeText
+, rustPlatform
+, fetchFromGitHub
+, curl
+, installShellFiles
+, pkg-config
+, bzip2
+, libgit2_1_6
+, openssl
+, zlib
+, zstd
+, stdenv
+, darwin
+, spdx-license-list-data
+, nix
+, nurl
+}:
+
+let
+  get-nix-license = import ./get_nix_license.nix {
+    inherit lib writeText;
+  };
+in
+
+rustPlatform.buildRustPackage rec {
+  pname = "nix-init";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nix-init";
+    rev = "v${version}";
+    hash = "sha256-YUstBO+iznr0eJYVJdNQ2BjDhvviRQuojhT9IlTuR0k=";
+  };
+
+  cargoHash = "sha256-OAgEzf+EyrwjNa40BwPwSNZ4lhEH93YxCbPJJ3r7oSQ=";
+
+  nativeBuildInputs = [
+    curl
+    installShellFiles
+    pkg-config
+  ];
+
+  buildInputs = [
+    bzip2
+    curl
+    libgit2_1_6
+    openssl
+    zlib
+    zstd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ] ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [
+    darwin.apple_sdk.frameworks.CoreFoundation
+  ];
+
+  buildNoDefaultFeatures = true;
+
+  checkFlags = [
+    # requires internet access
+    "--skip=lang::rust::tests"
+  ];
+
+  postPatch = ''
+    mkdir -p data
+    ln -s ${get-nix-license} data/get_nix_license.rs
+  '';
+
+  preBuild = ''
+    cargo run -p license-store-cache \
+      -j $NIX_BUILD_CORES --frozen \
+      data/license-store-cache.zstd ${spdx-license-list-data.json}/json/details
+  '';
+
+  postInstall = ''
+    installManPage artifacts/nix-init.1
+    installShellCompletion artifacts/nix-init.{bash,fish} --zsh artifacts/_nix-init
+  '';
+
+  env = {
+    GEN_ARTIFACTS = "artifacts";
+    NIX = lib.getExe nix;
+    NURL = lib.getExe nurl;
+    ZSTD_SYS_USE_PKG_CONFIG = true;
+  };
+
+  meta = with lib; {
+    description = "Command line tool to generate Nix packages from URLs";
+    homepage = "https://github.com/nix-community/nix-init";
+    changelog = "https://github.com/nix-community/nix-init/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nix-init/get_nix_license.nix b/nixpkgs/pkgs/tools/nix/nix-init/get_nix_license.nix
new file mode 100644
index 000000000000..0e67fb5e044c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-init/get_nix_license.nix
@@ -0,0 +1,75 @@
+# vendored from src/get-nix-license.nix
+
+{ lib, writeText }:
+
+let
+  inherit (lib)
+    attrNames
+    concatMapAttrs
+    concatStringsSep
+    filterAttrs
+    flip
+    id
+    intersectLists
+    licenses
+    mapAttrsToList
+    optionalAttrs
+    pipe
+    warn
+    ;
+
+  licenseMap = flip concatMapAttrs licenses
+    (k: v: optionalAttrs (v ? spdxId && !v.deprecated) { ${v.spdxId} = k; });
+
+  deprecatedAliases = {
+    "AGPL-3.0" = "agpl3Only";
+    "BSD-2-Clause-FreeBSD" = "bsd2WithViews";
+    "BSD-2-Clause-NetBSD" = "bsd2";
+    "GFDL-1.1" = "fdl11Only";
+    "GFDL-1.2" = "fdl12Only";
+    "GFDL-1.3" = "fdl13Only";
+    "GPL-1.0" = "gpl1Only";
+    "GPL-1.0+" = "gpl1Plus";
+    "GPL-2.0" = "gpl2Only";
+    "GPL-2.0+" = "gpl2Plus";
+    "GPL-3.0" = "gpl3Only";
+    "GPL-3.0+" = "gpl3Plus";
+    "LGPL-2.0" = "lgpl2Only";
+    "LGPL-2.0+" = "lgpl2Plus";
+    "LGPL-2.1" = "lgpl21Only";
+    "LGPL-2.1+" = "lgpl21Plus";
+    "LGPL-3.0" = "lgpl3Only";
+    "LGPL-3.0+" = "lgpl3Plus";
+  };
+
+  lints = {
+    "deprecated licenses" = intersectLists
+      (attrNames licenseMap)
+      (attrNames deprecatedAliases);
+
+    "invalid aliases" = attrNames (filterAttrs
+      (_: v: licenses.${v}.deprecated or true)
+      deprecatedAliases);
+  };
+
+  lint = flip pipe
+    (flip mapAttrsToList lints (k: v:
+      if v == [ ] then
+        id
+      else
+        warn "${k}: ${concatStringsSep ", " v}"));
+
+  arms = lint (concatStringsSep "\n        "
+    (mapAttrsToList
+      (k: v: ''"${k}" => Some("${v}"),'')
+      (deprecatedAliases // licenseMap)));
+in
+
+writeText "get-nix-license.rs" ''
+  pub fn get_nix_license(license: &str) -> Option<&'static str> {
+      match license {
+          ${arms}
+          _ => None,
+      }
+  }
+''
diff --git a/nixpkgs/pkgs/tools/nix/nix-melt/default.nix b/nixpkgs/pkgs/tools/nix/nix-melt/default.nix
new file mode 100644
index 000000000000..3a0b15c8c97f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-melt/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nix-melt";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nix-melt";
+    rev = "v${version}";
+    hash = "sha256-5V9sPbBb9t4B6yiLrYF+hx6YokGDH6+UsVQBhgqxMbY=";
+  };
+
+  cargoHash = "sha256-yBoaLqynvYC9ebC0zjd2FmSSd53xzn4ralihtCFubAw=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  env = {
+    GEN_ARTIFACTS = "artifacts";
+  };
+
+  postInstall = ''
+    installManPage artifacts/nix-melt.1
+    installShellCompletion artifacts/nix-melt.{bash,fish} --zsh artifacts/_nix-melt
+  '';
+
+  meta = with lib; {
+    description = "A ranger-like flake.lock viewer";
+    homepage = "https://github.com/nix-community/nix-melt";
+    changelog = "https://github.com/nix-community/nix-melt/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nix-output-monitor/default.nix b/nixpkgs/pkgs/tools/nix/nix-output-monitor/default.nix
new file mode 100644
index 000000000000..2eb15ebcfb7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-output-monitor/default.nix
@@ -0,0 +1,31 @@
+{
+  haskell,
+  haskellPackages,
+  installShellFiles,
+  lib,
+}: let
+  inherit (haskell.lib.compose) justStaticExecutables overrideCabal;
+
+  overrides = {
+    passthru.updateScript = ./update.sh;
+
+    # nom has unit-tests and golden-tests
+    # golden-tests call nix and thus can’t be run in a nix build.
+    testTarget = "unit-tests";
+
+    buildTools = [installShellFiles];
+    postInstall = ''
+      ln -s nom "$out/bin/nom-build"
+      ln -s nom "$out/bin/nom-shell"
+      chmod a+x $out/bin/nom-build
+      installShellCompletion --zsh --name _nom-build completions/completion.zsh
+    '';
+  };
+  raw-pkg = haskellPackages.callPackage ./generated-package.nix {};
+in
+  lib.pipe
+  raw-pkg
+  [
+    (overrideCabal overrides)
+    justStaticExecutables
+  ]
diff --git a/nixpkgs/pkgs/tools/nix/nix-output-monitor/generated-package.nix b/nixpkgs/pkgs/tools/nix/nix-output-monitor/generated-package.nix
new file mode 100644
index 000000000000..7c41b6e1b6af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-output-monitor/generated-package.nix
@@ -0,0 +1,44 @@
+# This file has been autogenerate with cabal2nix.
+# Update via ./update.sh"
+{ mkDerivation, ansi-terminal, async, attoparsec, base, bytestring
+, cassava, containers, data-default, directory, extra, fetchzip
+, filepath, hermes-json, HUnit, lib, lock-file, MemoTrie
+, nix-derivation, optics, random, relude, safe, stm, streamly-core
+, strict, strict-types, terminal-size, text, time, transformers
+, typed-process, unix, word8
+}:
+mkDerivation {
+  pname = "nix-output-monitor";
+  version = "2.1.1";
+  src = fetchzip {
+    url = "https://code.maralorn.de/maralorn/nix-output-monitor/archive/v2.1.1.tar.gz";
+    sha256 = "1k1gdx7yczz7xm096i8lk09zq6yw1yj8izx6czymfd4qqwj2y49l";
+  };
+  isLibrary = true;
+  isExecutable = true;
+  libraryHaskellDepends = [
+    ansi-terminal async attoparsec base bytestring cassava containers
+    data-default directory extra filepath hermes-json lock-file
+    MemoTrie nix-derivation optics relude safe stm streamly-core strict
+    strict-types terminal-size text time transformers word8
+  ];
+  executableHaskellDepends = [
+    ansi-terminal async attoparsec base bytestring cassava containers
+    data-default directory extra filepath hermes-json lock-file
+    MemoTrie nix-derivation optics relude safe stm streamly-core strict
+    strict-types terminal-size text time transformers typed-process
+    unix word8
+  ];
+  testHaskellDepends = [
+    ansi-terminal async attoparsec base bytestring cassava containers
+    data-default directory extra filepath hermes-json HUnit lock-file
+    MemoTrie nix-derivation optics random relude safe stm streamly-core
+    strict strict-types terminal-size text time transformers
+    typed-process word8
+  ];
+  homepage = "https://github.com/maralorn/nix-output-monitor";
+  description = "Processes output of Nix commands to show helpful and pretty information";
+  license = lib.licenses.agpl3Plus;
+  mainProgram = "nom";
+  maintainers = [ lib.maintainers.maralorn ];
+}
diff --git a/nixpkgs/pkgs/tools/nix/nix-output-monitor/update.sh b/nixpkgs/pkgs/tools/nix/nix-output-monitor/update.sh
new file mode 100755
index 000000000000..a83043df66ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-output-monitor/update.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p cabal2nix curl jq
+#
+# This script will update the nix-output-monitor derivation to the latest version using
+# cabal2nix.
+
+set -eo pipefail
+
+# This is the directory of this update.sh script.
+script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+
+derivation_file="${script_dir}/generated-package.nix"
+
+# This is the latest released version of nix-output-monitor on GitHub.
+new_version=$(curl --silent "https://code.maralorn.de/api/v1/repos/maralorn/nix-output-monitor/releases" | jq '.[0].tag_name' --raw-output)
+
+echo "Updating nix-output-monitor to version $new_version."
+echo "Running cabal2nix and outputting to ${derivation_file}..."
+
+cat > "$derivation_file" << EOF
+# This file has been autogenerate with cabal2nix.
+# Update via ./update.sh"
+EOF
+
+cabal2nix \
+  --maintainer maralorn \
+  "https://code.maralorn.de/maralorn/nix-output-monitor/archive/${new_version}.tar.gz" \
+  >> "$derivation_file"
+
+echo "Finished."
diff --git a/nixpkgs/pkgs/tools/nix/nix-query-tree-viewer/default.nix b/nixpkgs/pkgs/tools/nix/nix-query-tree-viewer/default.nix
new file mode 100644
index 000000000000..a27aa8d3c3bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-query-tree-viewer/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, rustPlatform, glib, gtk3, wrapGAppsHook }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nix-query-tree-viewer";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "cdepillabout";
+    repo  = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Lc9hfjybnRrkd7PZMa2ojxOM04bP4GJyagkZUX2nVwY=";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+  ];
+
+  cargoSha256 = "sha256-NSLBIvgo5EdCvZq52d+UbAa7K4uOST++2zbhO9DW38E=";
+
+  meta = with lib; {
+    description = "GTK viewer for the output of `nix store --query --tree`";
+    homepage    = "https://github.com/cdepillabout/nix-query-tree-viewer";
+    license     = with licenses; [ mit ];
+    maintainers = with maintainers; [ cdepillabout ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nix-script/default.nix b/nixpkgs/pkgs/tools/nix/nix-script/default.nix
new file mode 100644
index 000000000000..c83bfbc7a226
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-script/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, haskellPackages, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "nix-script";
+  version = "2020-03-23";
+
+  src  = fetchFromGitHub {
+    owner  = "bennofs";
+    repo   = "nix-script";
+    rev    = "7706b45429ff22c35bab575734feb2926bf8840b";
+    sha256 = "0yiqljamcj9x8z801bwj7r30sskrwv4rm6sdf39j83jqql1fyq7y";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs  = [
+    (haskellPackages.ghcWithPackages (hs: with hs; [ posix-escape ]))
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    mkdir -p $out/bin
+    ghc -O2 $src/nix-script.hs -o $out/bin/nix-script -odir . -hidir .
+
+    runHook postBuild
+  '';
+  installPhase = ''
+    runHook preInstall
+
+    ln -s $out/bin/nix-script $out/bin/nix-scripti
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A shebang for running inside nix-shell";
+    homepage    = "https://github.com/bennofs/nix-script";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ bennofs rnhmjoj ];
+    platforms   = haskellPackages.ghc.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/default.nix b/nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/default.nix
new file mode 100644
index 000000000000..166fe75766de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+buildGoModule rec {
+  pname = "nix-store-gcs-proxy";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "tweag";
+    repo = "nix-store-gcs-proxy";
+    rev = "v${version}";
+    sha256 = "0804p65px4wd7gzxggpdxsazkd1hbz1p15zzaxf9ygc6sh26ncln";
+  };
+
+  vendorHash = "sha256-Bm3yFzm2LXOPYWQDk/UBusV0lPfc/BCKIb3pPlWgDFo=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = {
+    description = "A HTTP nix store that proxies requests to Google Storage";
+    homepage = "https://github.com/tweag/nix-store-gcs-proxy";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ zimbatm ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/nix/nixci/default.nix b/nixpkgs/pkgs/tools/nix/nixci/default.nix
new file mode 100644
index 000000000000..bc78b3aab59a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixci/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv
+, rustPlatform
+, fetchCrate
+, fetchFromGitHub
+, libiconv
+, openssl
+, pkg-config
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nixci";
+  version = "0.2.0";
+
+  src = fetchCrate {
+    inherit version;
+    pname = "nixci";
+    hash = "sha256-Q3V/JL64xkIj0X0NSMRTjRAP3PJC9ouj3CmEscVWdns=";
+  };
+
+  cargoHash = "sha256-tjk91AaPsMLfXYB2o1HTTxb6Qr3l8BABPStrKEGvbtM=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libiconv openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  # The rust program expects an environment (at build time) that points to the
+  # devour-flake flake.
+  env.DEVOUR_FLAKE = fetchFromGitHub {
+    owner = "srid";
+    repo = "devour-flake";
+    rev = "v3";
+    hash = "sha256-O51F4YFOzlaQAc9b6xjkAqpvrvCtw/Os2M7TU0y4SKQ=";
+  };
+
+  meta = with lib; {
+    description = "Define and build CI for Nix projects anywhere";
+    homepage = "https://github.com/srid/nixci";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ srid ];
+    mainProgram = "nixci";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixdoc/default.nix b/nixpkgs/pkgs/tools/nix/nixdoc/default.nix
new file mode 100644
index 000000000000..e757e79f4684
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixdoc/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nixdoc";
+  version = "2.7.0";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixdoc";
+    rev = "v${version}";
+    sha256 = "sha256-0cyKI8KHFsMXYca3hzbqxmBpxGdhl4/i183kfUQr8pg=";
+  };
+
+  cargoHash = "sha256-9dqjNExxLDgVsu14yDQOJP1qxKy2ACiUH+pbX77iT70=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.Security ];
+
+  meta = with lib; {
+    description = "Generate documentation for Nix functions";
+    homepage    = "https://github.com/nix-community/nixdoc";
+    license     = [ licenses.gpl3 ];
+    maintainers = with maintainers; [
+      infinisil
+      asymmetric
+    ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixel/default.nix b/nixpkgs/pkgs/tools/nix/nixel/default.nix
new file mode 100644
index 000000000000..5ce14a8d312f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixel/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, testers
+, nixel
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nixel";
+  version = "4.1.0";
+
+  src = fetchFromGitHub {
+    owner = "kamadorueda";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-dQ3wzBTjteqk9rju+FMAO+ydimnGu24Y2DEDLX/P+1A=";
+  };
+
+  cargoSha256 = "sha256-1OsHs0W3ji9Kgpv7nGY9XyGxJ4c0faN2VuFLsdwkgKY=";
+
+  # Package requires a non reproducible submodule
+  # https://github.com/kamadorueda/nixel/blob/2873bd84bf4fc540d0ae8af062e109cc9ad40454/.gitmodules#L7
+  doCheck = false;
+  #
+  # Let's test it runs
+  passthru.tests = {
+    version = testers.testVersion { package = nixel; };
+  };
+
+  meta = with lib; {
+    description = "Lexer, Parser, Abstract Syntax Tree and Concrete Syntax Tree for the Nix Expressions Language";
+    homepage = "https://github.com/kamadorueda/nixel";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ kamadorueda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixos-generators/default.nix b/nixpkgs/pkgs/tools/nix/nixos-generators/default.nix
new file mode 100644
index 000000000000..b4d3581a0ebc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-generators/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, coreutils, jq, findutils, nix, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "nixos-generators";
+  version = "1.8.0";
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixos-generators";
+    rev = version;
+    sha256 = "sha256-wHmtB5H8AJTUaeGHw+0hsQ6nU4VyvVrP2P4NeCocRzY=";
+  };
+  strictDeps = true;
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ bash ];
+  installFlags = [ "PREFIX=$(out)" ];
+  postFixup = ''
+    wrapProgram $out/bin/nixos-generate \
+      --prefix PATH : ${lib.makeBinPath [ jq coreutils findutils nix ] }
+  '';
+
+  meta = with lib; {
+    description = "Collection of image builders";
+    homepage    = "https://github.com/nix-community/nixos-generators";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ lassulus ];
+    mainProgram = "nixos-generate";
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixos-install-tools/default.nix b/nixpkgs/pkgs/tools/nix/nixos-install-tools/default.nix
new file mode 100644
index 000000000000..e0b24a4e70dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-install-tools/default.nix
@@ -0,0 +1,68 @@
+{
+  buildEnv,
+  lib,
+  man,
+  nixos,
+  # TODO: replace indirect self-reference by proper self-reference
+  #       https://github.com/NixOS/nixpkgs/pull/119942
+  nixos-install-tools,
+  runCommand,
+  nixosTests,
+}:
+let
+  inherit (nixos {}) config;
+  version = config.system.nixos.version;
+in
+(buildEnv {
+  name = "nixos-install-tools-${version}";
+  paths = lib.attrValues {
+    # See nixos/modules/installer/tools/tools.nix
+    inherit (config.system.build)
+      nixos-install nixos-generate-config nixos-enter;
+
+    inherit (config.system.build.manual) nixos-configuration-reference-manpage;
+  };
+
+  extraOutputsToInstall = ["man"];
+
+  meta = {
+    description = "The essential commands from the NixOS installer as a package";
+    longDescription = ''
+      With this package, you get the commands like nixos-generate-config and
+      nixos-install that you would otherwise only find on a NixOS system, such
+      as an installer image.
+
+      This way, you can install NixOS using a machine that only has Nix.
+    '';
+    license = lib.licenses.mit;
+    homepage = "https://nixos.org";
+    platforms = lib.platforms.linux;
+  };
+
+  passthru.tests = {
+    nixos-tests = lib.recurseIntoAttrs nixosTests.installer;
+    nixos-install-help = runCommand "test-nixos-install-help" {
+      nativeBuildInputs = [
+        man
+        nixos-install-tools
+      ];
+      meta.description = ''
+        Make sure that --help works. It's somewhat non-trivial because it
+        requires man.
+      '';
+    } ''
+      nixos-install --help | grep -F 'NixOS Reference Pages'
+      nixos-install --help | grep -F 'configuration.nix'
+      nixos-generate-config --help | grep -F 'NixOS Reference Pages'
+      nixos-generate-config --help | grep -F 'hardware-configuration.nix'
+
+      # FIXME: Tries to call unshare, which it must not do for --help
+      # nixos-enter --help | grep -F 'NixOS Reference Pages'
+
+      touch $out
+    '';
+  };
+}).overrideAttrs {
+  inherit version;
+  pname = "nixos-install-tools";
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixos-option/CMakeLists.txt b/nixpkgs/pkgs/tools/nix/nixos-option/CMakeLists.txt
new file mode 100644
index 000000000000..9aee9e6ccada
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-option/CMakeLists.txt
@@ -0,0 +1,11 @@
+cmake_minimum_required (VERSION 2.6)
+project (nixos-option)
+
+set(NIX_DEV_INCLUDEPATH "" CACHE STRING "path to nix include directory")
+
+add_executable(nixos-option nixos-option.cc libnix-copy-paste.cc)
+target_include_directories(nixos-option PUBLIC "${NIX_DEV_INCLUDEPATH}")
+target_link_libraries(nixos-option PRIVATE -lnixmain -lnixexpr -lnixstore -lnixutil -lnixcmd)
+target_compile_features(nixos-option PRIVATE cxx_std_20)
+
+install (TARGETS nixos-option DESTINATION bin)
diff --git a/nixpkgs/pkgs/tools/nix/nixos-option/default.nix b/nixpkgs/pkgs/tools/nix/nixos-option/default.nix
new file mode 100644
index 000000000000..37018ac25a0b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-option/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, boost
+, cmake
+, pkg-config
+, installShellFiles
+, nix
+}:
+
+stdenv.mkDerivation {
+  name = "nixos-option";
+
+  src = ./.;
+  postInstall = ''
+    installManPage ${./nixos-option.8}
+  '';
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    installShellFiles
+  ];
+  buildInputs = [
+    boost
+    nix
+  ];
+  cmakeFlags = [
+    "-DNIX_DEV_INCLUDEPATH=${nix.dev}/include/nix"
+  ];
+
+  meta = with lib; {
+    license = licenses.lgpl2Plus;
+    mainProgram = "nixos-option";
+    maintainers = with maintainers; [ ];
+    inherit (nix.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixos-option/libnix-copy-paste.cc b/nixpkgs/pkgs/tools/nix/nixos-option/libnix-copy-paste.cc
new file mode 100644
index 000000000000..ad6084844e57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-option/libnix-copy-paste.cc
@@ -0,0 +1,80 @@
+// These are useful methods inside the nix library that ought to be exported.
+// Since they are not, copy/paste them here.
+// TODO: Delete these and use the ones in the library as they become available.
+
+#include <nix/config.h> // for nix/globals.hh's reference to SYSTEM
+
+#include "libnix-copy-paste.hh"
+#include <boost/format/alt_sstream.hpp>           // for basic_altstringbuf...
+#include <boost/format/alt_sstream_impl.hpp>      // for basic_altstringbuf...
+#include <boost/optional/optional.hpp>            // for get_pointer
+#include <iostream>                               // for operator<<, basic_...
+#include <nix/types.hh>                           // for Strings
+#include <nix/error.hh>                           // for Error
+#include <string>                                 // for string, basic_string
+
+using nix::Error;
+using nix::Strings;
+using std::string;
+
+// From nix/src/libexpr/attr-path.cc
+Strings parseAttrPath(const string & s)
+{
+    Strings res;
+    string cur;
+    string::const_iterator i = s.begin();
+    while (i != s.end()) {
+        if (*i == '.') {
+            res.push_back(cur);
+            cur.clear();
+        } else if (*i == '"') {
+            ++i;
+            while (1) {
+                if (i == s.end())
+                    throw Error("missing closing quote in selection path '%1%'", s);
+                if (*i == '"')
+                    break;
+                cur.push_back(*i++);
+            }
+        } else
+            cur.push_back(*i);
+        ++i;
+    }
+    if (!cur.empty())
+        res.push_back(cur);
+    return res;
+}
+
+// From nix/src/nix/repl.cc
+bool isVarName(const string & s)
+{
+    if (s.size() == 0)
+        return false;
+    char c = s[0];
+    if ((c >= '0' && c <= '9') || c == '-' || c == '\'')
+        return false;
+    for (auto & i : s)
+        if (!((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || (i >= '0' && i <= '9') || i == '_' || i == '-' ||
+              i == '\''))
+            return false;
+    return true;
+}
+
+// From nix/src/nix/repl.cc
+std::ostream & printStringValue(std::ostream & str, const char * string)
+{
+    str << "\"";
+    for (const char * i = string; *i; i++)
+        if (*i == '\"' || *i == '\\')
+            str << "\\" << *i;
+        else if (*i == '\n')
+            str << "\\n";
+        else if (*i == '\r')
+            str << "\\r";
+        else if (*i == '\t')
+            str << "\\t";
+        else
+            str << *i;
+    str << "\"";
+    return str;
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixos-option/libnix-copy-paste.hh b/nixpkgs/pkgs/tools/nix/nixos-option/libnix-copy-paste.hh
new file mode 100644
index 000000000000..2274e9a0f853
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-option/libnix-copy-paste.hh
@@ -0,0 +1,9 @@
+#pragma once
+
+#include <iostream>
+#include <nix/types.hh>
+#include <string>
+
+nix::Strings parseAttrPath(const std::string & s);
+bool isVarName(const std::string & s);
+std::ostream & printStringValue(std::ostream & str, const char * string);
diff --git a/nixpkgs/pkgs/tools/nix/nixos-option/nixos-option.8 b/nixpkgs/pkgs/tools/nix/nixos-option/nixos-option.8
new file mode 100644
index 000000000000..28438b03580b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-option/nixos-option.8
@@ -0,0 +1,89 @@
+.Dd January 1, 1980
+.Dt nixos-option 8
+.Os
+.Sh NAME
+.Nm nixos-option
+.Nd inspect a NixOS configuration
+.
+.
+.
+.Sh SYNOPSIS
+.Nm
+.Op Fl r | -recursive
+.Op Fl I Ar path
+.Ar option.name
+.
+.
+.
+.Sh DESCRIPTION
+This command evaluates the configuration specified in
+.Pa /etc/nixos/configuration.nix
+and returns the properties of the option name given as argument.
+.
+.Pp
+When the option name is not an option, the command prints the list of attributes
+contained in the attribute set.
+.
+.
+.
+.Sh OPTIONS
+.Bl -tag -width indent
+.It Fl r , -recursive
+Print all the values at or below the specified path recursively.
+.
+.It Fl I Ar path
+This option is passed to the underlying
+.Xr nix-instantiate 1
+invocation.
+.El
+.
+.
+.
+.Sh ENVIRONMENT
+.Bl -tag -width indent
+.It Ev NIXOS_CONFIG
+Path to the main NixOS configuration module. Defaults to
+.Pa /etc/nixos/configuration.nix Ns
+\&.
+.El
+.
+.
+.
+.Sh EXAMPLES
+Investigate option values:
+.Bd -literal -offset indent
+$ nixos-option boot.loader
+This attribute set contains:
+generationsDir
+grub
+initScript
+
+$ nixos-option boot.loader.grub.enable
+Value:
+true
+
+Default:
+true
+
+Description:
+Whether to enable the GNU GRUB boot loader.
+
+Declared by:
+  "/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/system/boot/loader/grub/grub.nix"
+
+Defined by:
+  "/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/system/boot/loader/grub/grub.nix"
+.Ed
+.
+.
+.
+.Sh SEE ALSO
+.Xr configuration.nix 5
+.
+.
+.
+.Sh AUTHORS
+.An -nosplit
+.An Nicolas Pierron
+and
+.An the Nixpkgs/NixOS contributors
diff --git a/nixpkgs/pkgs/tools/nix/nixos-option/nixos-option.cc b/nixpkgs/pkgs/tools/nix/nixos-option/nixos-option.cc
new file mode 100644
index 000000000000..e2a73866d0ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-option/nixos-option.cc
@@ -0,0 +1,652 @@
+#include <nix/config.h> // for nix/globals.hh's reference to SYSTEM
+
+#include <exception>               // for exception_ptr, current_exception
+#include <functional>              // for function
+#include <iostream>                // for operator<<, basic_ostream, ostrin...
+#include <iterator>                // for next
+#include <list>                    // for _List_iterator
+#include <memory>                  // for allocator, unique_ptr, make_unique
+#include <new>                     // for operator new
+#include <nix/args.hh>             // for argvToStrings, UsageError
+#include <nix/attr-path.hh>        // for findAlongAttrPath
+#include <nix/attr-set.hh>         // for Attr, Bindings, Bindings::iterator
+#include <nix/common-eval-args.hh> // for MixEvalArgs
+#include <nix/eval-inline.hh>      // for EvalState::forceValue
+#include <nix/eval.hh>             // for EvalState, initGC, operator<<
+#include <nix/globals.hh>          // for initPlugins, Settings, settings
+#include <nix/nixexpr.hh>          // for Pos
+#include <nix/shared.hh>           // for getArg, LegacyArgs, printVersion
+#include <nix/store-api.hh>        // for openStore
+#include <nix/symbol-table.hh>     // for Symbol, SymbolTable
+#include <nix/types.hh>            // for Error, Path, Strings, PathSet
+#include <nix/util.hh>             // for absPath, baseNameOf
+#include <nix/value.hh>            // for Value, Value::(anonymous), Value:...
+#include <string>                  // for string, operator+, operator==
+#include <utility>                 // for move
+#include <variant>                 // for get, holds_alternative, variant
+#include <vector>                  // for vector<>::iterator, vector
+
+#include "libnix-copy-paste.hh"
+
+using nix::absPath;
+using nix::Bindings;
+using nix::Error;
+using nix::EvalError;
+using nix::EvalState;
+using nix::Path;
+using nix::PathSet;
+using nix::Strings;
+using nix::Symbol;
+using nix::nAttrs;
+using nix::ThrownError;
+using nix::tLambda;
+using nix::nString;
+using nix::UsageError;
+using nix::Value;
+
+struct Context
+{
+    Context(EvalState & state, Bindings & autoArgs, Value optionsRoot, Value configRoot)
+        : state(state), autoArgs(autoArgs), optionsRoot(optionsRoot), configRoot(configRoot),
+          underscoreType(state.symbols.create("_type"))
+    {}
+    EvalState & state;
+    Bindings & autoArgs;
+    Value optionsRoot;
+    Value configRoot;
+    Symbol underscoreType;
+};
+
+// An ostream wrapper to handle nested indentation
+class Out
+{
+  public:
+    class Separator
+    {};
+    const static Separator sep;
+    enum LinePolicy
+    {
+        ONE_LINE,
+        MULTI_LINE
+    };
+    explicit Out(std::ostream & ostream) : ostream(ostream), policy(ONE_LINE), writeSinceSep(true) {}
+    Out(Out & o, const std::string & start, const std::string & end, LinePolicy policy);
+    Out(Out & o, const std::string & start, const std::string & end, int count)
+        : Out(o, start, end, count < 2 ? ONE_LINE : MULTI_LINE)
+    {}
+    Out(const Out &) = delete;
+    Out(Out &&) = default;
+    Out & operator=(const Out &) = delete;
+    Out & operator=(Out &&) = delete;
+    ~Out() { ostream << end; }
+
+  private:
+    std::ostream & ostream;
+    std::string indentation;
+    std::string end;
+    LinePolicy policy;
+    bool writeSinceSep;
+    template <typename T> friend Out & operator<<(Out & o, T thing);
+
+    friend void printValue(Context & ctx, Out & out, std::variant<Value, std::exception_ptr> maybeValue, const std::string & path);
+};
+
+template <typename T> Out & operator<<(Out & o, T thing)
+{
+    if (!o.writeSinceSep && o.policy == Out::MULTI_LINE) {
+        o.ostream << o.indentation;
+    }
+    o.writeSinceSep = true;
+    o.ostream << thing;
+    return o;
+}
+
+template <> Out & operator<<<Out::Separator>(Out & o, Out::Separator /* thing */)
+{
+    o.ostream << (o.policy == Out::ONE_LINE ? " " : "\n");
+    o.writeSinceSep = false;
+    return o;
+}
+
+Out::Out(Out & o, const std::string & start, const std::string & end, LinePolicy policy)
+    : ostream(o.ostream), indentation(policy == ONE_LINE ? o.indentation : o.indentation + "  "),
+      end(policy == ONE_LINE ? end : o.indentation + end), policy(policy), writeSinceSep(true)
+{
+    o << start;
+    *this << Out::sep;
+}
+
+
+Value evaluateValue(Context & ctx, Value & v)
+{
+    ctx.state.forceValue(v, [&]() { return v.determinePos(nix::noPos); });
+    if (ctx.autoArgs.empty()) {
+        return v;
+    }
+    Value called{};
+    ctx.state.autoCallFunction(ctx.autoArgs, v, called);
+    return called;
+}
+
+bool isOption(Context & ctx, const Value & v)
+{
+    if (v.type() != nAttrs) {
+        return false;
+    }
+    const auto & actualType = v.attrs->find(ctx.underscoreType);
+    if (actualType == v.attrs->end()) {
+        return false;
+    }
+    try {
+        Value evaluatedType = evaluateValue(ctx, *actualType->value);
+        if (evaluatedType.type() != nString) {
+            return false;
+        }
+        return static_cast<std::string>(evaluatedType.string.s) == "option";
+    } catch (Error &) {
+        return false;
+    }
+}
+
+// Add quotes to a component of a path.
+// These are needed for paths like:
+//    fileSystems."/".fsType
+//    systemd.units."dbus.service".text
+std::string quoteAttribute(const std::string & attribute)
+{
+    if (isVarName(attribute)) {
+        return attribute;
+    }
+    std::ostringstream buf;
+    printStringValue(buf, attribute.c_str());
+    return buf.str();
+}
+
+const std::string appendPath(const std::string & prefix, const std::string & suffix)
+{
+    if (prefix.empty()) {
+        return quoteAttribute(suffix);
+    }
+    return prefix + "." + quoteAttribute(suffix);
+}
+
+bool forbiddenRecursionName(const nix::Symbol symbol, const nix::SymbolTable & symbolTable) {
+    // note: this is created from a pointer
+    // According to standard, it may never point to null, and hence attempts to check against nullptr are not allowed.
+    // However, at the time of writing, I am not certain about the full implications of the omission of a nullptr check here.
+    const std::string & name = symbolTable[symbol];
+    // TODO: figure out why haskellPackages is not recursed here
+    return (!name.empty() && name[0] == '_') || name == "haskellPackages";
+}
+
+void recurse(const std::function<bool(const std::string & path, std::variant<Value, std::exception_ptr>)> & f,
+             Context & ctx, Value v, const std::string & path)
+{
+    std::variant<Value, std::exception_ptr> evaluated;
+    try {
+        evaluated = evaluateValue(ctx, v);
+    } catch (Error &) {
+        evaluated = std::current_exception();
+    }
+    if (!f(path, evaluated)) {
+        return;
+    }
+    if (std::holds_alternative<std::exception_ptr>(evaluated)) {
+        return;
+    }
+    const Value & evaluated_value = std::get<Value>(evaluated);
+    if (evaluated_value.type() != nAttrs) {
+        return;
+    }
+    for (const auto & child : evaluated_value.attrs->lexicographicOrder(ctx.state.symbols)) {
+        if (forbiddenRecursionName(child->name, ctx.state.symbols)) {
+            continue;
+        }
+        recurse(f, ctx, *child->value, appendPath(path, ctx.state.symbols[child->name]));
+    }
+}
+
+bool optionTypeIs(Context & ctx, Value & v, const std::string & soughtType)
+{
+    try {
+        const auto & typeLookup = v.attrs->find(ctx.state.sType);
+        if (typeLookup == v.attrs->end()) {
+            return false;
+        }
+        Value type = evaluateValue(ctx, *typeLookup->value);
+        if (type.type() != nAttrs) {
+            return false;
+        }
+        const auto & nameLookup = type.attrs->find(ctx.state.sName);
+        if (nameLookup == type.attrs->end()) {
+            return false;
+        }
+        Value name = evaluateValue(ctx, *nameLookup->value);
+        if (name.type() != nString) {
+            return false;
+        }
+        return name.string.s == soughtType;
+    } catch (Error &) {
+        return false;
+    }
+}
+
+bool isAggregateOptionType(Context & ctx, Value & v)
+{
+    return optionTypeIs(ctx, v, "attrsOf") || optionTypeIs(ctx, v, "listOf");
+}
+
+MakeError(OptionPathError, EvalError);
+
+Value getSubOptions(Context & ctx, Value & option)
+{
+    Value getSubOptions = evaluateValue(ctx, *findAlongAttrPath(ctx.state, "type.getSubOptions", ctx.autoArgs, option).first);
+    if (getSubOptions.isLambda()) {
+        throw OptionPathError("Option's type.getSubOptions isn't a function");
+    }
+    Value emptyString{};
+    emptyString.mkString("");
+    Value v;
+    ctx.state.callFunction(getSubOptions, emptyString, v, nix::PosIdx{});
+    return v;
+}
+
+// Carefully walk an option path, looking for sub-options when a path walks past
+// an option value.
+struct FindAlongOptionPathRet
+{
+    Value option;
+    std::string path;
+};
+FindAlongOptionPathRet findAlongOptionPath(Context & ctx, const std::string & path)
+{
+    Strings tokens = parseAttrPath(path);
+    Value v = ctx.optionsRoot;
+    std::string processedPath;
+    for (auto i = tokens.begin(); i != tokens.end(); i++) {
+        const auto & attr = *i;
+        try {
+            bool lastAttribute = std::next(i) == tokens.end();
+            v = evaluateValue(ctx, v);
+            if (attr.empty()) {
+                throw OptionPathError("empty attribute name");
+            }
+            if (isOption(ctx, v) && optionTypeIs(ctx, v, "submodule")) {
+                v = getSubOptions(ctx, v);
+            }
+            if (isOption(ctx, v) && isAggregateOptionType(ctx, v)) {
+                auto subOptions = getSubOptions(ctx, v);
+                if (lastAttribute && subOptions.attrs->empty()) {
+                    break;
+                }
+                v = subOptions;
+                // Note that we've consumed attr, but didn't actually use it.  This is the path component that's looked
+                // up in the list or attribute set that doesn't name an option -- the "root" in "users.users.root.name".
+            } else if (v.type() != nAttrs) {
+                throw OptionPathError("Value is %s while a set was expected", showType(v));
+            } else {
+                const auto & next = v.attrs->find(ctx.state.symbols.create(attr));
+                if (next == v.attrs->end()) {
+                    throw OptionPathError("Attribute not found", attr, path);
+                }
+                v = *next->value;
+            }
+            processedPath = appendPath(processedPath, attr);
+        } catch (OptionPathError & e) {
+            throw OptionPathError("At '%s' in path '%s': %s", attr, path, e.msg());
+        }
+    }
+    return {v, processedPath};
+}
+
+// Calls f on all the option names at or below the option described by `path`.
+// Note that "the option described by `path`" is not trivial -- if path describes a value inside an aggregate
+// option (such as users.users.root), the *option* described by that path is one path component shorter
+// (eg: users.users), which results in f being called on sibling-paths (eg: users.users.nixbld1).  If f
+// doesn't want these, it must do its own filtering.
+void mapOptions(const std::function<void(const std::string & path)> & f, Context & ctx, const std::string & path)
+{
+    auto root = findAlongOptionPath(ctx, path);
+    recurse(
+        [f, &ctx](const std::string & path, std::variant<Value, std::exception_ptr> v) {
+            bool isOpt = std::holds_alternative<std::exception_ptr>(v) || isOption(ctx, std::get<Value>(v));
+            if (isOpt) {
+                f(path);
+            }
+            return !isOpt;
+        },
+        ctx, root.option, root.path);
+}
+
+// Calls f on all the config values inside one option.
+// Simple options have one config value inside, like sound.enable = true.
+// Compound options have multiple config values.  For example, the option
+// "users.users" has about 1000 config values inside it:
+//   users.users.avahi.createHome = false;
+//   users.users.avahi.cryptHomeLuks = null;
+//   users.users.avahi.description = "`avahi-daemon' privilege separation user";
+//   ...
+//   users.users.avahi.openssh.authorizedKeys.keyFiles = [ ];
+//   users.users.avahi.openssh.authorizedKeys.keys = [ ];
+//   ...
+//   users.users.avahi.uid = 10;
+//   users.users.avahi.useDefaultShell = false;
+//   users.users.cups.createHome = false;
+//   ...
+//   users.users.cups.useDefaultShell = false;
+//   users.users.gdm = ... ... ...
+//   users.users.messagebus = ... .. ...
+//   users.users.nixbld1 = ... .. ...
+//   ...
+//   users.users.systemd-timesync = ... .. ...
+void mapConfigValuesInOption(
+    const std::function<void(const std::string & path, std::variant<Value, std::exception_ptr> v)> & f,
+    const std::string & path, Context & ctx)
+{
+    Value * option;
+    try {
+        option = findAlongAttrPath(ctx.state, path, ctx.autoArgs, ctx.configRoot).first;
+    } catch (Error &) {
+        f(path, std::current_exception());
+        return;
+    }
+    recurse(
+        [f, ctx](const std::string & path, std::variant<Value, std::exception_ptr> v) {
+            bool leaf = std::holds_alternative<std::exception_ptr>(v) || std::get<Value>(v).type() != nAttrs ||
+                        ctx.state.isDerivation(std::get<Value>(v));
+            if (!leaf) {
+                return true; // Keep digging
+            }
+            f(path, v);
+            return false;
+        },
+        ctx, *option, path);
+}
+
+std::string describeError(const Error & e) { return "«error: " + e.msg() + "»"; }
+
+void describeDerivation(Context & ctx, Out & out, Value v)
+{
+    // Copy-pasted from nix/src/nix/repl.cc  :(
+    Bindings::iterator i = v.attrs->find(ctx.state.sDrvPath);
+    PathSet pathset;
+    try {
+        Path drvPath = i != v.attrs->end() ? ctx.state.coerceToPath(i->pos, *i->value, pathset, "while evaluating the drvPath of a derivation") : "???";
+        out << "«derivation " << drvPath << "»";
+    } catch (Error & e) {
+        out << describeError(e);
+    }
+}
+
+Value parseAndEval(EvalState & state, const std::string & expression, const std::string & path)
+{
+    Value v{};
+    state.eval(state.parseExprFromString(expression, absPath(path)), v);
+    return v;
+}
+
+void printValue(Context & ctx, Out & out, std::variant<Value, std::exception_ptr> maybeValue, const std::string & path);
+
+void printList(Context & ctx, Out & out, Value & v)
+{
+    Out listOut(out, "[", "]", v.listSize());
+    for (unsigned int n = 0; n < v.listSize(); ++n) {
+        printValue(ctx, listOut, *v.listElems()[n], "");
+        listOut << Out::sep;
+    }
+}
+
+void printAttrs(Context & ctx, Out & out, Value & v, const std::string & path)
+{
+    Out attrsOut(out, "{", "}", v.attrs->size());
+    for (const auto & a : v.attrs->lexicographicOrder(ctx.state.symbols)) {
+        if (!forbiddenRecursionName(a->name, ctx.state.symbols)) {
+            const std::string name = ctx.state.symbols[a->name];
+            attrsOut << name << " = ";
+            printValue(ctx, attrsOut, *a->value, appendPath(path, name));
+            attrsOut << ";" << Out::sep;
+        }
+    }
+}
+
+void multiLineStringEscape(Out & out, const std::string & s)
+{
+    int i;
+    for (i = 1; i < s.size(); i++) {
+        if (s[i - 1] == '$' && s[i] == '{') {
+            out << "''${";
+            i++;
+        } else if (s[i - 1] == '\'' && s[i] == '\'') {
+            out << "'''";
+            i++;
+        } else {
+            out << s[i - 1];
+        }
+    }
+    if (i == s.size()) {
+        out << s[i - 1];
+    }
+}
+
+void printMultiLineString(Out & out, const Value & v)
+{
+    std::string s = v.string.s;
+    Out strOut(out, "''", "''", Out::MULTI_LINE);
+    std::string::size_type begin = 0;
+    while (begin < s.size()) {
+        std::string::size_type end = s.find('\n', begin);
+        if (end == std::string::npos) {
+            multiLineStringEscape(strOut, s.substr(begin, s.size() - begin));
+            break;
+        }
+        multiLineStringEscape(strOut, s.substr(begin, end - begin));
+        strOut << Out::sep;
+        begin = end + 1;
+    }
+}
+
+void printValue(Context & ctx, Out & out, std::variant<Value, std::exception_ptr> maybeValue, const std::string & path)
+{
+    try {
+        if (auto ex = std::get_if<std::exception_ptr>(&maybeValue)) {
+            std::rethrow_exception(*ex);
+        }
+        Value v = evaluateValue(ctx, std::get<Value>(maybeValue));
+        if (ctx.state.isDerivation(v)) {
+            describeDerivation(ctx, out, v);
+        } else if (v.isList()) {
+            printList(ctx, out, v);
+        } else if (v.type() == nAttrs) {
+            printAttrs(ctx, out, v, path);
+        } else if (v.type() == nString && std::string(v.string.s).find('\n') != std::string::npos) {
+            printMultiLineString(out, v);
+        } else {
+            ctx.state.forceValueDeep(v);
+            v.print(ctx.state.symbols, out.ostream);
+        }
+    } catch (ThrownError & e) {
+        if (e.msg() == "The option `" + path + "' is used but not defined.") {
+            // 93% of errors are this, and just letting this message through would be
+            // misleading.  These values may or may not actually be "used" in the
+            // config.  The thing throwing the error message assumes that if anything
+            // ever looks at this value, it is a "use" of this value.  But here in
+            // nixos-option, we are looking at this value only to print it.
+            // In order to avoid implying that this undefined value is actually
+            // referenced, eat the underlying error message and emit "«not defined»".
+            out << "«not defined»";
+        } else {
+            out << describeError(e);
+        }
+    } catch (Error & e) {
+        out << describeError(e);
+    }
+}
+
+void printConfigValue(Context & ctx, Out & out, const std::string & path, std::variant<Value, std::exception_ptr> v)
+{
+    out << path << " = ";
+    printValue(ctx, out, std::move(v), path);
+    out << ";\n";
+}
+
+// Replace with std::starts_with when C++20 is available
+bool starts_with(const std::string & s, const std::string & prefix)
+{
+    return s.size() >= prefix.size() &&
+           std::equal(s.begin(), std::next(s.begin(), prefix.size()), prefix.begin(), prefix.end());
+}
+
+void printRecursive(Context & ctx, Out & out, const std::string & path)
+{
+    mapOptions(
+        [&ctx, &out, &path](const std::string & optionPath) {
+            mapConfigValuesInOption(
+                [&ctx, &out, &path](const std::string & configPath, std::variant<Value, std::exception_ptr> v) {
+                    if (starts_with(configPath, path)) {
+                        printConfigValue(ctx, out, configPath, v);
+                    }
+                },
+                optionPath, ctx);
+        },
+        ctx, path);
+}
+
+void printAttr(Context & ctx, Out & out, const std::string & path, Value & root)
+{
+    try {
+        printValue(ctx, out, *findAlongAttrPath(ctx.state, path, ctx.autoArgs, root).first, path);
+    } catch (Error & e) {
+        out << describeError(e);
+    }
+}
+
+bool hasExample(Context & ctx, Value & option)
+{
+    try {
+        findAlongAttrPath(ctx.state, "example", ctx.autoArgs, option);
+        return true;
+    } catch (Error &) {
+        return false;
+    }
+}
+
+void printOption(Context & ctx, Out & out, const std::string & path, Value & option)
+{
+    out << "Value:\n";
+    printAttr(ctx, out, path, ctx.configRoot);
+
+    out << "\n\nDefault:\n";
+    printAttr(ctx, out, "default", option);
+
+    out << "\n\nType:\n";
+    printAttr(ctx, out, "type.description", option);
+
+    if (hasExample(ctx, option)) {
+        out << "\n\nExample:\n";
+        printAttr(ctx, out, "example", option);
+    }
+
+    out << "\n\nDescription:\n";
+    printAttr(ctx, out, "description", option);
+
+    out << "\n\nDeclared by:\n";
+    printAttr(ctx, out, "declarations", option);
+
+    out << "\n\nDefined by:\n";
+    printAttr(ctx, out, "files", option);
+    out << "\n";
+}
+
+void printListing(Context & ctx, Out & out, Value & v)
+{
+    out << "This attribute set contains:\n";
+    for (const auto & a : v.attrs->lexicographicOrder(ctx.state.symbols)) {
+        const std::string & name = ctx.state.symbols[a->name];
+        if (!name.empty() && name[0] != '_') {
+            out << name << "\n";
+        }
+    }
+}
+
+void printOne(Context & ctx, Out & out, const std::string & path)
+{
+    try {
+        auto result = findAlongOptionPath(ctx, path);
+        Value & option = result.option;
+        option = evaluateValue(ctx, option);
+        if (path != result.path) {
+            out << "Note: showing " << result.path << " instead of " << path << "\n";
+        }
+        if (isOption(ctx, option)) {
+            printOption(ctx, out, result.path, option);
+        } else {
+            printListing(ctx, out, option);
+        }
+    } catch (Error & e) {
+        std::cerr << "error: " << e.msg()
+                  << "\nAn error occurred while looking for attribute names. Are "
+                     "you sure that '"
+                  << path << "' exists?\n";
+    }
+}
+
+int main(int argc, char ** argv)
+{
+    bool recursive = false;
+    std::string path = ".";
+    std::string optionsExpr = "(import <nixpkgs/nixos> {}).options";
+    std::string configExpr = "(import <nixpkgs/nixos> {}).config";
+    std::vector<std::string> args;
+
+    struct MyArgs : nix::LegacyArgs, nix::MixEvalArgs
+    {
+        using nix::LegacyArgs::LegacyArgs;
+    };
+
+    MyArgs myArgs(std::string(nix::baseNameOf(argv[0])), [&](Strings::iterator & arg, const Strings::iterator & end) {
+        if (*arg == "--help") {
+            nix::showManPage("nixos-option");
+        } else if (*arg == "--version") {
+            nix::printVersion("nixos-option");
+        } else if (*arg == "-r" || *arg == "--recursive") {
+            recursive = true;
+        } else if (*arg == "--path") {
+            path = nix::getArg(*arg, arg, end);
+        } else if (*arg == "--options_expr") {
+            optionsExpr = nix::getArg(*arg, arg, end);
+        } else if (*arg == "--config_expr") {
+            configExpr = nix::getArg(*arg, arg, end);
+        } else if (!arg->empty() && arg->at(0) == '-') {
+            return false;
+        } else {
+            args.push_back(*arg);
+        }
+        return true;
+    });
+
+    myArgs.parseCmdline(nix::argvToStrings(argc, argv));
+
+    nix::initNix();
+    nix::initGC();
+    nix::settings.readOnlyMode = true;
+    auto store = nix::openStore();
+    auto state = std::make_unique<EvalState>(myArgs.searchPath, store);
+
+    Value optionsRoot = parseAndEval(*state, optionsExpr, path);
+    Value configRoot = parseAndEval(*state, configExpr, path);
+
+    Context ctx{*state, *myArgs.getAutoArgs(*state), optionsRoot, configRoot};
+    Out out(std::cout);
+
+    auto print = recursive ? printRecursive : printOne;
+    if (args.empty()) {
+        print(ctx, out, "");
+    }
+    for (const auto & arg : args) {
+        print(ctx, out, arg);
+    }
+
+    ctx.state.printStats();
+
+    return 0;
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/default.nix b/nixpkgs/pkgs/tools/nix/nixos-render-docs/default.nix
new file mode 100644
index 000000000000..b08abfe069f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, python3
+, runCommand
+}:
+
+let
+  python = python3.override {
+    packageOverrides = final: prev: {
+      markdown-it-py = prev.markdown-it-py.overridePythonAttrs (_: {
+        doCheck = false;
+      });
+      mdit-py-plugins = prev.mdit-py-plugins.overridePythonAttrs (_: {
+        doCheck = false;
+      });
+    };
+  };
+in
+
+python.pkgs.buildPythonApplication rec {
+  pname = "nixos-render-docs";
+  version = "0.0";
+  format = "pyproject";
+
+  src = lib.cleanSourceWith {
+    filter = name: type:
+      lib.cleanSourceFilter name type
+      && ! (type == "directory"
+            && builtins.elem
+              (baseNameOf name)
+              [
+                ".pytest_cache"
+                ".mypy_cache"
+                "__pycache__"
+              ]);
+    src = ./src;
+  };
+
+  nativeBuildInputs = with python.pkgs; [
+    setuptools
+    pytestCheckHook
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    markdown-it-py
+    mdit-py-plugins
+  ];
+
+  pytestFlagsArray = [ "-vvrP" "tests/" ];
+
+  # NOTE this is a CI test rather than a build-time test because we want to keep the
+  # build closures small. mypy has an unreasonably large build closure for docs builds.
+  passthru.tests.typing = runCommand "${pname}-mypy" {
+    nativeBuildInputs = [
+      (python3.withPackages (ps: with ps; [ mypy pytest markdown-it-py mdit-py-plugins ]))
+    ];
+  } ''
+    mypy --strict ${src}
+    touch $out
+  '';
+
+  meta = with lib; {
+    description = "Renderer for NixOS manual and option docs";
+    license = licenses.mit;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py
new file mode 100644
index 000000000000..19bf705795a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py
@@ -0,0 +1,55 @@
+import argparse
+import sys
+import textwrap
+import traceback
+from io import StringIO
+from pprint import pprint
+
+from . import manual
+from . import options
+from . import parallel
+
+def pretty_print_exc(e: BaseException, *, _desc_text: str = "error") -> None:
+    print(f"\x1b[1;31m{_desc_text}:\x1b[0m", file=sys.stderr)
+    # destructure Exception and RuntimeError specifically so we can show nice
+    # messages for errors that weren't given their own exception type with
+    # a good pretty-printer.
+    if type(e) is Exception or type(e) is RuntimeError:
+        args = e.args
+        if len(args) and isinstance(args[0], str):
+            print("\t", args[0], file=sys.stderr, sep="")
+            args = args[1:]
+        buf = StringIO()
+        for arg in args:
+            pprint(arg, stream=buf)
+        if extra_info := buf.getvalue():
+            print("\x1b[1;34mextra info:\x1b[0m", file=sys.stderr)
+            print(textwrap.indent(extra_info, "\t"), file=sys.stderr, end="")
+    else:
+        print(e)
+    if e.__cause__ is not None:
+        print("", file=sys.stderr)
+        pretty_print_exc(e.__cause__, _desc_text="caused by")
+
+def main() -> None:
+    parser = argparse.ArgumentParser(description='render nixos manual bits')
+    parser.add_argument('-j', '--jobs', type=int, default=None)
+
+    commands = parser.add_subparsers(dest='command', required=True)
+
+    options.build_cli(commands.add_parser('options'))
+    manual.build_cli(commands.add_parser('manual'))
+
+    args = parser.parse_args()
+    try:
+        parallel.pool_processes = args.jobs
+        if args.command == 'options':
+            options.run_cli(args)
+        elif args.command == 'manual':
+            manual.run_cli(args)
+        else:
+            raise RuntimeError('command not hooked up', args)
+    except Exception as e:
+        traceback.print_exc()
+        pretty_print_exc(e)
+        sys.exit(1)
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/asciidoc.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/asciidoc.py
new file mode 100644
index 000000000000..0c2531209876
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/asciidoc.py
@@ -0,0 +1,216 @@
+from collections.abc import Mapping, Sequence
+from dataclasses import dataclass
+from typing import cast
+from urllib.parse import quote
+
+from .md import Renderer
+
+from markdown_it.token import Token
+
+_asciidoc_escapes = {
+    # escape all dots, just in case one is pasted at SOL
+    ord('.'): "{zwsp}.",
+    # may be replaced by typographic variants
+    ord("'"): "{apos}",
+    ord('"'): "{quot}",
+    # passthrough character
+    ord('+'): "{plus}",
+    # table marker
+    ord('|'): "{vbar}",
+    # xml entity reference
+    ord('&'): "{amp}",
+    # crossrefs. < needs extra escaping because links break in odd ways if they start with it
+    ord('<'): "{zwsp}+<+{zwsp}",
+    ord('>'): "{gt}",
+    # anchors, links, block attributes
+    ord('['): "{startsb}",
+    ord(']'): "{endsb}",
+    # superscript, subscript
+    ord('^'): "{caret}",
+    ord('~'): "{tilde}",
+    # bold
+    ord('*'): "{asterisk}",
+    # backslash
+    ord('\\'): "{backslash}",
+    # inline code
+    ord('`'): "{backtick}",
+}
+def asciidoc_escape(s: str) -> str:
+    s = s.translate(_asciidoc_escapes)
+    # :: is deflist item, ;; is has a replacement but no idea why
+    return s.replace("::", "{two-colons}").replace(";;", "{two-semicolons}")
+
+@dataclass(kw_only=True)
+class List:
+    head: str
+
+@dataclass()
+class Par:
+    sep: str
+    block_delim: str
+    continuing: bool = False
+
+class AsciiDocRenderer(Renderer):
+    __output__ = "asciidoc"
+
+    _parstack: list[Par]
+    _list_stack: list[List]
+    _attrspans: list[str]
+
+    def __init__(self, manpage_urls: Mapping[str, str]):
+        super().__init__(manpage_urls)
+        self._parstack = [ Par("\n\n", "====") ]
+        self._list_stack = []
+        self._attrspans = []
+
+    def _enter_block(self, is_list: bool) -> None:
+        self._parstack.append(Par("\n+\n" if is_list else "\n\n", self._parstack[-1].block_delim + "="))
+    def _leave_block(self) -> None:
+        self._parstack.pop()
+    def _break(self, force: bool = False) -> str:
+        result = self._parstack[-1].sep if force or self._parstack[-1].continuing else ""
+        self._parstack[-1].continuing = True
+        return result
+
+    def _admonition_open(self, kind: str) -> str:
+        pbreak = self._break()
+        self._enter_block(False)
+        return f"{pbreak}[{kind}]\n{self._parstack[-2].block_delim}\n"
+    def _admonition_close(self) -> str:
+        self._leave_block()
+        return f"\n{self._parstack[-1].block_delim}\n"
+
+    def _list_open(self, token: Token, head: str) -> str:
+        attrs = []
+        if (idx := token.attrs.get('start')) is not None:
+            attrs.append(f"start={idx}")
+        if token.meta['compact']:
+            attrs.append('options="compact"')
+        if self._list_stack:
+            head *= len(self._list_stack[0].head) + 1
+        self._list_stack.append(List(head=head))
+        return f"{self._break()}[{','.join(attrs)}]"
+    def _list_close(self) -> str:
+        self._list_stack.pop()
+        return ""
+
+    def text(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        return asciidoc_escape(token.content)
+    def paragraph_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._break()
+    def paragraph_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ""
+    def hardbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return " +\n"
+    def softbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return " "
+    def code_inline(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        return f"``{asciidoc_escape(token.content)}``"
+    def code_block(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self.fence(token, tokens, i)
+    def link_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        return f"link:{quote(cast(str, token.attrs['href']), safe='/:')}["
+    def link_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "]"
+    def list_item_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._enter_block(True)
+        # allow the next token to be a block or an inline.
+        return f'\n{self._list_stack[-1].head} {{empty}}'
+    def list_item_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._leave_block()
+        return "\n"
+    def bullet_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._list_open(token, '*')
+    def bullet_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._list_close()
+    def em_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "__"
+    def em_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "__"
+    def strong_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "**"
+    def strong_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "**"
+    def fence(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        attrs = f"[source,{token.info}]\n" if token.info else ""
+        code = token.content
+        if code.endswith('\n'):
+            code = code[:-1]
+        return f"{self._break(True)}{attrs}----\n{code}\n----"
+    def blockquote_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        pbreak = self._break(True)
+        self._enter_block(False)
+        return f"{pbreak}[quote]\n{self._parstack[-2].block_delim}\n"
+    def blockquote_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._leave_block()
+        return f"\n{self._parstack[-1].block_delim}"
+    def note_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("NOTE")
+    def note_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def caution_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("CAUTION")
+    def caution_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def important_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("IMPORTANT")
+    def important_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def tip_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("TIP")
+    def tip_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def warning_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("WARNING")
+    def warning_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def dl_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f"{self._break()}[]"
+    def dl_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ""
+    def dt_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._break()
+    def dt_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._enter_block(True)
+        return ":: {empty}"
+    def dd_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ""
+    def dd_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._leave_block()
+        return "\n"
+    def myst_role(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        content = asciidoc_escape(token.content)
+        if token.meta['name'] == 'manpage' and (url := self._manpage_urls.get(token.content)):
+            return f"link:{quote(url, safe='/:')}[{content}]"
+        return f"[.{token.meta['name']}]``{asciidoc_escape(token.content)}``"
+    def inline_anchor(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        return f"[[{token.attrs['id']}]]"
+    def attr_span_begin(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        (id_part, class_part) = ("", "")
+        if id := token.attrs.get('id'):
+            id_part = f"[[{id}]]"
+        if s := token.attrs.get('class'):
+            if s == 'keycap':
+                class_part = "kbd:["
+                self._attrspans.append("]")
+            else:
+                return super().attr_span_begin(token, tokens, i)
+        else:
+            self._attrspans.append("")
+        return id_part + class_part
+    def attr_span_end(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._attrspans.pop()
+    def heading_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return token.markup.replace("#", "=") + " "
+    def heading_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "\n"
+    def ordered_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._list_open(token, '.')
+    def ordered_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._list_close()
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/commonmark.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/commonmark.py
new file mode 100644
index 000000000000..6287b60f0a51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/commonmark.py
@@ -0,0 +1,190 @@
+from collections.abc import Mapping, Sequence
+from dataclasses import dataclass
+from typing import cast, Optional
+
+from .md import md_escape, md_make_code, Renderer
+
+from markdown_it.token import Token
+
+@dataclass(kw_only=True)
+class List:
+    next_idx: Optional[int] = None
+    compact: bool
+    first_item_seen: bool = False
+
+@dataclass
+class Par:
+    indent: str
+    continuing: bool = False
+
+class CommonMarkRenderer(Renderer):
+    __output__ = "commonmark"
+
+    _parstack: list[Par]
+    _link_stack: list[str]
+    _list_stack: list[List]
+
+    def __init__(self, manpage_urls: Mapping[str, str]):
+        super().__init__(manpage_urls)
+        self._parstack = [ Par("") ]
+        self._link_stack = []
+        self._list_stack = []
+
+    def _enter_block(self, extra_indent: str) -> None:
+        self._parstack.append(Par(self._parstack[-1].indent + extra_indent))
+    def _leave_block(self) -> None:
+        self._parstack.pop()
+        self._parstack[-1].continuing = True
+    def _break(self) -> str:
+        self._parstack[-1].continuing = True
+        return f"\n{self._parstack[-1].indent}"
+    def _maybe_parbreak(self) -> str:
+        result = f"\n{self._parstack[-1].indent}" * 2 if self._parstack[-1].continuing else ""
+        self._parstack[-1].continuing = True
+        return result
+
+    def _admonition_open(self, kind: str) -> str:
+        pbreak = self._maybe_parbreak()
+        self._enter_block("")
+        return f"{pbreak}**{kind}:** "
+    def _admonition_close(self) -> str:
+        self._leave_block()
+        return ""
+
+    def _indent_raw(self, s: str) -> str:
+        if '\n' not in s:
+            return s
+        return f"\n{self._parstack[-1].indent}".join(s.splitlines())
+
+    def text(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        return self._indent_raw(md_escape(token.content))
+    def paragraph_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._maybe_parbreak()
+    def paragraph_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ""
+    def hardbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f"  {self._break()}"
+    def softbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._break()
+    def code_inline(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        return md_make_code(token.content)
+    def code_block(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self.fence(token, tokens, i)
+    def link_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        self._link_stack.append(cast(str, token.attrs['href']))
+        return "["
+    def link_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f"]({md_escape(self._link_stack.pop())})"
+    def list_item_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        lst = self._list_stack[-1]
+        lbreak = "" if not lst.first_item_seen else self._break() * (1 if lst.compact else 2)
+        lst.first_item_seen = True
+        head = " -"
+        if lst.next_idx is not None:
+            head = f" {lst.next_idx}."
+            lst.next_idx += 1
+        self._enter_block(" " * (len(head) + 1))
+        return f'{lbreak}{head} '
+    def list_item_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._leave_block()
+        return ""
+    def bullet_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._list_stack.append(List(compact=bool(token.meta['compact'])))
+        return self._maybe_parbreak()
+    def bullet_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._list_stack.pop()
+        return ""
+    def em_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "*"
+    def em_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "*"
+    def strong_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "**"
+    def strong_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "**"
+    def fence(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        code = token.content
+        if code.endswith('\n'):
+            code = code[:-1]
+        pbreak = self._maybe_parbreak()
+        return pbreak + self._indent_raw(md_make_code(code, info=token.info, multiline=True))
+    def blockquote_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        pbreak = self._maybe_parbreak()
+        self._enter_block("> ")
+        return pbreak + "> "
+    def blockquote_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._leave_block()
+        return ""
+    def note_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("Note")
+    def note_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def caution_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("Caution")
+    def caution_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def important_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("Important")
+    def important_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def tip_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("Tip")
+    def tip_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def warning_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("Warning")
+    def warning_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def dl_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._list_stack.append(List(compact=False))
+        return ""
+    def dl_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._list_stack.pop()
+        return ""
+    def dt_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        pbreak = self._maybe_parbreak()
+        self._enter_block("   ")
+        # add an opening zero-width non-joiner to separate *our* emphasis from possible
+        # emphasis in the provided term
+        return f'{pbreak} - *{chr(0x200C)}'
+    def dt_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f"{chr(0x200C)}*"
+    def dd_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        return ""
+    def dd_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._leave_block()
+        return ""
+    def myst_role(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._parstack[-1].continuing = True
+        content = md_make_code(token.content)
+        if token.meta['name'] == 'manpage' and (url := self._manpage_urls.get(token.content)):
+            return f"[{content}]({url})"
+        return content # no roles in regular commonmark
+    def attr_span_begin(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        # there's no way we can emit attrspans correctly in all cases. we could use inline
+        # html for ids, but that would not round-trip. same holds for classes. since this
+        # renderer is only used for approximate options export and all of these things are
+        # not allowed in options we can ignore them for now.
+        return ""
+    def attr_span_end(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ""
+    def heading_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return token.markup + " "
+    def heading_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "\n"
+    def ordered_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._list_stack.append(
+            List(next_idx = cast(int, token.attrs.get('start', 1)),
+                 compact  = bool(token.meta['compact'])))
+        return self._maybe_parbreak()
+    def ordered_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._list_stack.pop()
+        return ""
+    def image(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        if title := cast(str, token.attrs.get('title', '')):
+            title = ' "' + title.replace('"', '\\"') + '"'
+        return f'![{token.content}]({token.attrs["src"]}{title})'
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/docbook.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/docbook.py
new file mode 100644
index 000000000000..d54392cca553
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/docbook.py
@@ -0,0 +1,247 @@
+from collections.abc import Mapping, Sequence
+from typing import cast, Optional, NamedTuple
+
+from markdown_it.token import Token
+from xml.sax.saxutils import escape, quoteattr
+
+from .md import Renderer
+
+_xml_id_translate_table = {
+    ord('*'): ord('_'),
+    ord('<'): ord('_'),
+    ord(' '): ord('_'),
+    ord('>'): ord('_'),
+    ord('['): ord('_'),
+    ord(']'): ord('_'),
+    ord(':'): ord('_'),
+    ord('"'): ord('_'),
+}
+def make_xml_id(s: str) -> str:
+    return s.translate(_xml_id_translate_table)
+
+class Deflist:
+    has_dd = False
+
+class Heading(NamedTuple):
+    container_tag: str
+    level: int
+    # special handling for <part> titles: whether partinfo was already closed from elsewhere
+    # or still needs closing.
+    partintro_closed: bool = False
+
+class DocBookRenderer(Renderer):
+    _link_tags: list[str]
+    _deflists: list[Deflist]
+    _headings: list[Heading]
+    _attrspans: list[str]
+
+    def __init__(self, manpage_urls: Mapping[str, str]):
+        super().__init__(manpage_urls)
+        self._link_tags = []
+        self._deflists = []
+        self._headings = []
+        self._attrspans = []
+
+    def render(self, tokens: Sequence[Token]) -> str:
+        result = super().render(tokens)
+        result += self._close_headings(None)
+        return result
+    def renderInline(self, tokens: Sequence[Token]) -> str:
+        # HACK to support docbook links and xrefs. link handling is only necessary because the docbook
+        # manpage stylesheet converts - in urls to a mathematical minus, which may be somewhat incorrect.
+        for i, token in enumerate(tokens):
+            if token.type != 'link_open':
+                continue
+            token.tag = 'link'
+            # turn [](#foo) into xrefs
+            if token.attrs['href'][0:1] == '#' and tokens[i + 1].type == 'link_close': # type: ignore[index]
+                token.tag = "xref"
+            # turn <x> into links without contents
+            if tokens[i + 1].type == 'text' and tokens[i + 1].content == token.attrs['href']:
+                tokens[i + 1].content = ''
+
+        return super().renderInline(tokens)
+
+    def text(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return escape(token.content)
+    def paragraph_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<para>"
+    def paragraph_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</para>"
+    def hardbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<literallayout>\n</literallayout>"
+    def softbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        # should check options.breaks() and emit hard break if so
+        return "\n"
+    def code_inline(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f"<literal>{escape(token.content)}</literal>"
+    def code_block(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f"<programlisting>{escape(token.content)}</programlisting>"
+    def link_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._link_tags.append(token.tag)
+        href = cast(str, token.attrs['href'])
+        (attr, start) = ('linkend', 1) if href[0] == '#' else ('xlink:href', 0)
+        return f"<{token.tag} {attr}={quoteattr(href[start:])}>"
+    def link_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f"</{self._link_tags.pop()}>"
+    def list_item_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<listitem>"
+    def list_item_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</listitem>\n"
+    # HACK open and close para for docbook change size. remove soon.
+    def bullet_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        spacing = ' spacing="compact"' if token.meta.get('compact', False) else ''
+        return f"<para><itemizedlist{spacing}>\n"
+    def bullet_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "\n</itemizedlist></para>"
+    def em_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<emphasis>"
+    def em_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</emphasis>"
+    def strong_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<emphasis role=\"strong\">"
+    def strong_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</emphasis>"
+    def fence(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        info = f" language={quoteattr(token.info)}" if token.info != "" else ""
+        return f"<programlisting{info}>{escape(token.content)}</programlisting>"
+    def blockquote_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<para><blockquote>"
+    def blockquote_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</blockquote></para>"
+    def note_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<para><note>"
+    def note_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</note></para>"
+    def caution_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<para><caution>"
+    def caution_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</caution></para>"
+    def important_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<para><important>"
+    def important_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</important></para>"
+    def tip_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<para><tip>"
+    def tip_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</tip></para>"
+    def warning_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<para><warning>"
+    def warning_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</warning></para>"
+    # markdown-it emits tokens based on the html syntax tree, but docbook is
+    # slightly different. html has <dl>{<dt/>{<dd/>}}</dl>,
+    # docbook has <variablelist>{<varlistentry><term/><listitem/></varlistentry>}<variablelist>
+    # we have to reject multiple definitions for the same term for time being.
+    def dl_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._deflists.append(Deflist())
+        return "<para><variablelist>"
+    def dl_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._deflists.pop()
+        return "</variablelist></para>"
+    def dt_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._deflists[-1].has_dd = False
+        return "<varlistentry><term>"
+    def dt_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</term>"
+    def dd_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        if self._deflists[-1].has_dd:
+            raise Exception("multiple definitions per term not supported")
+        self._deflists[-1].has_dd = True
+        return "<listitem>"
+    def dd_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</listitem></varlistentry>"
+    def myst_role(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        if token.meta['name'] == 'command':
+            return f"<command>{escape(token.content)}</command>"
+        if token.meta['name'] == 'file':
+            return f"<filename>{escape(token.content)}</filename>"
+        if token.meta['name'] == 'var':
+            return f"<varname>{escape(token.content)}</varname>"
+        if token.meta['name'] == 'env':
+            return f"<envar>{escape(token.content)}</envar>"
+        if token.meta['name'] == 'option':
+            return f"<option>{escape(token.content)}</option>"
+        if token.meta['name'] == 'manpage':
+            [page, section] = [ s.strip() for s in token.content.rsplit('(', 1) ]
+            section = section[:-1]
+            man = f"{page}({section})"
+            title = f"<refentrytitle>{escape(page)}</refentrytitle>"
+            vol = f"<manvolnum>{escape(section)}</manvolnum>"
+            ref = f"<citerefentry>{title}{vol}</citerefentry>"
+            if man in self._manpage_urls:
+                return f"<link xlink:href={quoteattr(self._manpage_urls[man])}>{ref}</link>"
+            else:
+                return ref
+        raise NotImplementedError("md node not supported yet", token)
+    def attr_span_begin(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        # we currently support *only* inline anchors and the special .keycap class to produce
+        # <keycap> docbook elements.
+        (id_part, class_part) = ("", "")
+        if s := token.attrs.get('id'):
+            id_part = f'<anchor xml:id={quoteattr(cast(str, s))} />'
+        if s := token.attrs.get('class'):
+            if s == 'keycap':
+                class_part = "<keycap>"
+                self._attrspans.append("</keycap>")
+            else:
+                return super().attr_span_begin(token, tokens, i)
+        else:
+            self._attrspans.append("")
+        return id_part + class_part
+    def attr_span_end(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._attrspans.pop()
+    def ordered_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        start = f' startingnumber="{token.attrs["start"]}"' if 'start' in token.attrs else ""
+        spacing = ' spacing="compact"' if token.meta.get('compact', False) else ''
+        return f"<orderedlist{start}{spacing}>"
+    def ordered_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</orderedlist>"
+    def heading_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        hlevel = int(token.tag[1:])
+        result = self._close_headings(hlevel)
+        (tag, attrs) = self._heading_tag(token, tokens, i)
+        self._headings.append(Heading(tag, hlevel))
+        attrs_str = "".join([ f" {k}={quoteattr(v)}" for k, v in attrs.items() ])
+        return result + f'<{tag}{attrs_str}>\n<title>'
+    def heading_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        heading = self._headings[-1]
+        result = '</title>'
+        if heading.container_tag == 'part':
+            # generate the same ids as were previously assigned manually. if this collides we
+            # rely on outside schema validation to catch it!
+            maybe_id = ""
+            assert tokens[i - 2].type == 'heading_open'
+            if id := cast(str, tokens[i - 2].attrs.get('id', "")):
+                maybe_id = " xml:id=" + quoteattr(id + "-intro")
+            result += f"<partintro{maybe_id}>"
+        return result
+    def example_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        if id := cast(str, token.attrs.get('id', '')):
+            id = f'xml:id={quoteattr(id)}' if id else ''
+        return f'<example {id}>'
+    def example_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</example>"
+    def example_title_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<title>"
+    def example_title_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</title>"
+
+    def _close_headings(self, level: Optional[int]) -> str:
+        # we rely on markdown-it producing h{1..6} tags in token.tag for this to work
+        result = []
+        while len(self._headings):
+            if level is None or self._headings[-1].level >= level:
+                heading = self._headings.pop()
+                if heading.container_tag == 'part' and not heading.partintro_closed:
+                    result.append("</partintro>")
+                result.append(f"</{heading.container_tag}>")
+            else:
+                break
+        return "\n".join(result)
+
+    def _heading_tag(self, token: Token, tokens: Sequence[Token], i: int) -> tuple[str, dict[str, str]]:
+        attrs = {}
+        if id := token.attrs.get('id'):
+            attrs['xml:id'] = cast(str, id)
+        return ("section", attrs)
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/html.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/html.py
new file mode 100644
index 000000000000..b9227814dea2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/html.py
@@ -0,0 +1,353 @@
+from collections.abc import Mapping, Sequence
+from typing import cast, Optional, NamedTuple
+
+from html import escape
+from markdown_it.token import Token
+
+from .manual_structure import XrefTarget
+from .md import Renderer
+
+class UnresolvedXrefError(Exception):
+    pass
+
+class Heading(NamedTuple):
+    container_tag: str
+    level: int
+    html_tag: str
+    # special handling for part content: whether partinfo div was already closed from
+    # elsewhere or still needs closing.
+    partintro_closed: bool
+    # tocs are generated when the heading opens, but have to be emitted into the file
+    # after the heading titlepage (and maybe partinfo) has been closed.
+    toc_fragment: str
+
+_bullet_list_styles = [ 'disc', 'circle', 'square' ]
+_ordered_list_styles = [ '1', 'a', 'i', 'A', 'I' ]
+
+class HTMLRenderer(Renderer):
+    _xref_targets: Mapping[str, XrefTarget]
+
+    _headings: list[Heading]
+    _attrspans: list[str]
+    _hlevel_offset: int = 0
+    _bullet_list_nesting: int = 0
+    _ordered_list_nesting: int = 0
+
+    def __init__(self, manpage_urls: Mapping[str, str], xref_targets: Mapping[str, XrefTarget]):
+        super().__init__(manpage_urls)
+        self._headings = []
+        self._attrspans = []
+        self._xref_targets = xref_targets
+
+    def render(self, tokens: Sequence[Token]) -> str:
+        result = super().render(tokens)
+        result += self._close_headings(None)
+        return result
+
+    def _pull_image(self, path: str) -> str:
+        raise NotImplementedError()
+
+    def text(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return escape(token.content)
+    def paragraph_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<p>"
+    def paragraph_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</p>"
+    def hardbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<br />"
+    def softbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "\n"
+    def code_inline(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f'<code class="literal">{escape(token.content)}</code>'
+    def code_block(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self.fence(token, tokens, i)
+    def link_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        href = escape(cast(str, token.attrs['href']), True)
+        tag, title, target, text = "link", "", 'target="_top"', ""
+        if href.startswith('#'):
+            if not (xref := self._xref_targets.get(href[1:])):
+                raise UnresolvedXrefError(f"bad local reference, id {href} not known")
+            if tokens[i + 1].type == 'link_close':
+                tag, text = "xref", xref.title_html
+            if xref.title:
+                # titles are not attribute-safe on their own, so we need to replace quotes.
+                title = 'title="{}"'.format(xref.title.replace('"', '&quot;'))
+            target, href = "", xref.href()
+        return f'<a class="{tag}" href="{href}" {title} {target}>{text}'
+    def link_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</a>"
+    def list_item_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<li class="listitem">'
+    def list_item_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</li>"
+    def bullet_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        extra = 'compact' if token.meta.get('compact', False) else ''
+        style = _bullet_list_styles[self._bullet_list_nesting % len(_bullet_list_styles)]
+        self._bullet_list_nesting += 1
+        return f'<div class="itemizedlist"><ul class="itemizedlist {extra}" style="list-style-type: {style};">'
+    def bullet_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._bullet_list_nesting -= 1
+        return "</ul></div>"
+    def em_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<span class="emphasis"><em>'
+    def em_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</em></span>"
+    def strong_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<span class="strong"><strong>'
+    def strong_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</strong></span>"
+    def fence(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        info = f" {escape(token.info, True)}" if token.info != "" else ""
+        return f'<pre><code class="programlisting{info}">{escape(token.content)}</code></pre>'
+    def blockquote_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<div class="blockquote"><blockquote class="blockquote">'
+    def blockquote_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</blockquote></div>"
+    def note_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<div class="note"><h3 class="title">Note</h3>'
+    def note_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</div>"
+    def caution_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<div class="caution"><h3 class="title">Caution</h3>'
+    def caution_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</div>"
+    def important_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<div class="important"><h3 class="title">Important</h3>'
+    def important_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</div>"
+    def tip_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<div class="tip"><h3 class="title">Tip</h3>'
+    def tip_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</div>"
+    def warning_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<div class="warning"><h3 class="title">Warning</h3>'
+    def warning_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</div>"
+    def dl_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<div class="variablelist"><dl class="variablelist">'
+    def dl_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</dl></div>"
+    def dt_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<dt><span class="term">'
+    def dt_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</span></dt>"
+    def dd_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<dd>"
+    def dd_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</dd>"
+    def myst_role(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        if token.meta['name'] == 'command':
+            return f'<span class="command"><strong>{escape(token.content)}</strong></span>'
+        if token.meta['name'] == 'file':
+            return f'<code class="filename">{escape(token.content)}</code>'
+        if token.meta['name'] == 'var':
+            return f'<code class="varname">{escape(token.content)}</code>'
+        if token.meta['name'] == 'env':
+            return f'<code class="envar">{escape(token.content)}</code>'
+        if token.meta['name'] == 'option':
+            return f'<code class="option">{escape(token.content)}</code>'
+        if token.meta['name'] == 'manpage':
+            [page, section] = [ s.strip() for s in token.content.rsplit('(', 1) ]
+            section = section[:-1]
+            man = f"{page}({section})"
+            title = f'<span class="refentrytitle">{escape(page)}</span>'
+            vol = f"({escape(section)})"
+            ref = f'<span class="citerefentry">{title}{vol}</span>'
+            if man in self._manpage_urls:
+                return f'<a class="link" href="{escape(self._manpage_urls[man], True)}" target="_top">{ref}</a>'
+            else:
+                return ref
+        return super().myst_role(token, tokens, i)
+    def attr_span_begin(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        # we currently support *only* inline anchors and the special .keycap class to produce
+        # keycap-styled spans.
+        (id_part, class_part) = ("", "")
+        if s := token.attrs.get('id'):
+            id_part = f'<a id="{escape(cast(str, s), True)}" />'
+        if s := token.attrs.get('class'):
+            if s == 'keycap':
+                class_part = '<span class="keycap"><strong>'
+                self._attrspans.append("</strong></span>")
+            else:
+                return super().attr_span_begin(token, tokens, i)
+        else:
+            self._attrspans.append("")
+        return id_part + class_part
+    def attr_span_end(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._attrspans.pop()
+    def heading_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        hlevel = int(token.tag[1:])
+        htag, hstyle = self._make_hN(hlevel)
+        if hstyle:
+            hstyle = f'style="{escape(hstyle, True)}"'
+        if anchor := cast(str, token.attrs.get('id', '')):
+            anchor = f'<a id="{escape(anchor, True)}"></a>'
+        result = self._close_headings(hlevel)
+        tag = self._heading_tag(token, tokens, i)
+        toc_fragment = self._build_toc(tokens, i)
+        self._headings.append(Heading(tag, hlevel, htag, tag != 'part', toc_fragment))
+        return (
+            f'{result}'
+            f'<div class="{tag}">'
+            f' <div class="titlepage">'
+            f'  <div>'
+            f'   <div>'
+            f'    <{htag} class="title" {hstyle}>'
+            f'     {anchor}'
+        )
+    def heading_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        heading = self._headings[-1]
+        result = (
+            f'   </{heading.html_tag}>'
+            f'  </div>'
+            f' </div>'
+            f'</div>'
+        )
+        if heading.container_tag == 'part':
+            result += '<div class="partintro">'
+        else:
+            result += heading.toc_fragment
+        return result
+    def ordered_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        extra = 'compact' if token.meta.get('compact', False) else ''
+        start = f'start="{token.attrs["start"]}"' if 'start' in token.attrs else ""
+        style = _ordered_list_styles[self._ordered_list_nesting % len(_ordered_list_styles)]
+        self._ordered_list_nesting += 1
+        return f'<div class="orderedlist"><ol class="orderedlist {extra}" {start} type="{style}">'
+    def ordered_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._ordered_list_nesting -= 1
+        return "</ol></div>"
+    def example_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        if id := cast(str, token.attrs.get('id', '')):
+            id = f'id="{escape(id, True)}"' if id else ''
+        return f'<div class="example"><a {id} />'
+    def example_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '</div></div><br class="example-break" />'
+    def example_title_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '<p class="title"><strong>'
+    def example_title_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return '</strong></p><div class="example-contents">'
+    def image(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        src = self._pull_image(cast(str, token.attrs['src']))
+        alt = f'alt="{escape(token.content, True)}"' if token.content else ""
+        if title := cast(str, token.attrs.get('title', '')):
+            title = f'title="{escape(title, True)}"'
+        return (
+            '<div class="mediaobject">'
+            f'<img src="{escape(src, True)}" {alt} {title} />'
+            '</div>'
+        )
+    def figure_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        if anchor := cast(str, token.attrs.get('id', '')):
+            anchor = f'<a id="{escape(anchor, True)}"></a>'
+        return f'<div class="figure">{anchor}'
+    def figure_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return (
+            ' </div>'
+            '</div><br class="figure-break" />'
+        )
+    def figure_title_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return (
+            '<p class="title">'
+            ' <strong>'
+        )
+    def figure_title_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return (
+            ' </strong>'
+            '</p>'
+            '<div class="figure-contents">'
+        )
+    def table_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return (
+            '<div class="informaltable">'
+            '<table class="informaltable" border="1">'
+        )
+    def table_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return (
+            '</table>'
+            '</div>'
+        )
+    def thead_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        cols = []
+        for j in range(i + 1, len(tokens)):
+            if tokens[j].type == 'thead_close':
+                break
+            elif tokens[j].type == 'th_open':
+                cols.append(cast(str, tokens[j].attrs.get('style', 'left')).removeprefix('text-align:'))
+        return "".join([
+            "<colgroup>",
+            "".join([ f'<col align="{col}" />' for col in cols ]),
+            "</colgroup>",
+            "<thead>",
+        ])
+    def thead_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</thead>"
+    def tr_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<tr>"
+    def tr_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</tr>"
+    def th_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f'<th align="{cast(str, token.attrs.get("style", "left")).removeprefix("text-align:")}">'
+    def th_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</th>"
+    def tbody_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "<tbody>"
+    def tbody_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</tbody>"
+    def td_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f'<td align="{cast(str, token.attrs.get("style", "left")).removeprefix("text-align:")}">'
+    def td_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</td>"
+    def footnote_ref(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        href = self._xref_targets[token.meta['target']].href()
+        id = escape(cast(str, token.attrs["id"]), True)
+        return (
+            f'<a href="{href}" class="footnote" id="{id}">'
+            f'<sup class="footnote">[{token.meta["id"] + 1}]</sup>'
+            '</a>'
+        )
+    def footnote_block_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return (
+            '<div class="footnotes">'
+            '<br />'
+            '<hr style="width:100; text-align:left;margin-left: 0" />'
+        )
+    def footnote_block_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</div>"
+    def footnote_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        # meta id,label
+        id = escape(self._xref_targets[token.meta["label"]].id, True)
+        return f'<div id="{id}" class="footnote">'
+    def footnote_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "</div>"
+    def footnote_anchor(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        href = self._xref_targets[token.meta['target']].href()
+        return (
+            f'<a href="{href}" class="para">'
+            f'<sup class="para">[{token.meta["id"] + 1}]</sup>'
+            '</a>'
+        )
+
+    def _make_hN(self, level: int) -> tuple[str, str]:
+        return f"h{min(6, max(1, level + self._hlevel_offset))}", ""
+
+    def _maybe_close_partintro(self) -> str:
+        if self._headings:
+            heading = self._headings[-1]
+            if heading.container_tag == 'part' and not heading.partintro_closed:
+                self._headings[-1] = heading._replace(partintro_closed=True)
+                return heading.toc_fragment + "</div>"
+        return ""
+
+    def _close_headings(self, level: Optional[int]) -> str:
+        result = []
+        while len(self._headings) and (level is None or self._headings[-1].level >= level):
+            result.append(self._maybe_close_partintro())
+            result.append("</div>")
+            self._headings.pop()
+        return "\n".join(result)
+
+    def _heading_tag(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "section"
+    def _build_toc(self, tokens: Sequence[Token], i: int) -> str:
+        return ""
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manpage.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manpage.py
new file mode 100644
index 000000000000..024ec8d134dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manpage.py
@@ -0,0 +1,287 @@
+from collections.abc import Mapping, Sequence
+from dataclasses import dataclass
+from typing import cast, Iterable, Optional
+
+import re
+
+from markdown_it.token import Token
+
+from .md import Renderer
+
+# roff(7) says:
+#
+# > roff documents may contain only graphable 7-bit ASCII characters, the space character,
+# > and, in certain circumstances, the tab character. The backslash character ‘\’ indicates
+# > the start of an escape sequence […]
+#
+# mandoc_char(7) says about the `'~^ characters:
+#
+# > In prose, this automatic substitution is often desirable; but when these characters have
+# > to be displayed as plain ASCII characters, for example in source code samples, they require
+# > escaping to render as follows:
+#
+# since we don't want these to be touched anywhere (because markdown will do all substituations
+# we want to have) we'll escape those as well. we also escape " (macro metacharacter), - (might
+# turn into a typographic hyphen), and . (roff request marker at SOL, changes spacing semantics
+# at EOL). groff additionally does not allow unicode escapes for codepoints below U+0080, so
+# those need "proper" roff escapes/replacements instead.
+_roff_unicode = re.compile(r'''[^\n !#$%&()*+,\-./0-9:;<=>?@A-Z[\\\]_a-z{|}]''', re.ASCII)
+_roff_escapes = {
+    ord('"'): "\\(dq",
+    ord("'"): "\\(aq",
+    ord('-'): "\\-",
+    ord('.'): "\\&.",
+    ord('\\'): "\\e",
+    ord('^'): "\\(ha",
+    ord('`'): "\\(ga",
+    ord('~'): "\\(ti",
+}
+def man_escape(s: str) -> str:
+    s = s.translate(_roff_escapes)
+    return _roff_unicode.sub(lambda m: f"\\[u{ord(m[0]):04X}]", s)
+
+# remove leading and trailing spaces from links and condense multiple consecutive spaces
+# into a single space for presentation parity with html. this is currently easiest with
+# regex postprocessing and some marker characters. since we don't want to drop spaces
+# from code blocks we will have to specially protect *inline* code (luckily not block code)
+# so normalization can turn the spaces inside it into regular spaces again.
+_normalize_space_re = re.compile(r'''\u0000 < *| *>\u0000 |(?<= ) +''')
+def _normalize_space(s: str) -> str:
+    return _normalize_space_re.sub("", s).replace("\0p", " ")
+
+def _protect_spaces(s: str) -> str:
+    return s.replace(" ", "\0p")
+
+@dataclass(kw_only=True)
+class List:
+    width: int
+    next_idx: Optional[int] = None
+    compact: bool
+    first_item_seen: bool = False
+
+# this renderer assumed that it produces a set of lines as output, and that those lines will
+# be pasted as-is into a larger output. no prefixing or suffixing is allowed for correctness.
+#
+# NOTE that we output exclusively physical markup. this is because we have to use the older
+# mandoc(7) format instead of the newer mdoc(7) format due to limitations in groff: while
+# using mdoc in groff works fine it is not a native format and thus very slow to render on
+# manpages as large as configuration.nix.5. mandoc(1) renders both really quickly, but with
+# groff being our predominant manpage viewer we have to optimize for groff instead.
+#
+# while we do use only physical markup (adjusting indentation with .RS and .RE, adding
+# vertical spacing with .sp, \f[BIRP] escapes for bold/italic/roman/$previous font, \h for
+# horizontal motion in a line) we do attempt to copy the style of mdoc(7) semantic requests
+# as appropriate for each markup element.
+class ManpageRenderer(Renderer):
+    # whether to emit mdoc .Ql equivalents for inline code or just the contents. this is
+    # mainly used by the options manpage converter to not emit extra quotes in defaults
+    # and examples where it's already clear from context that the following text is code.
+    inline_code_is_quoted: bool = True
+    link_footnotes: Optional[list[str]] = None
+
+    _href_targets: dict[str, str]
+
+    _link_stack: list[str]
+    _do_parbreak_stack: list[bool]
+    _list_stack: list[List]
+    _font_stack: list[str]
+
+    def __init__(self, manpage_urls: Mapping[str, str], href_targets: dict[str, str]):
+        super().__init__(manpage_urls)
+        self._href_targets = href_targets
+        self._link_stack = []
+        self._do_parbreak_stack = []
+        self._list_stack = []
+        self._font_stack = []
+
+    def _join_block(self, ls: Iterable[str]) -> str:
+        return "\n".join([ l for l in ls if len(l) ])
+    def _join_inline(self, ls: Iterable[str]) -> str:
+        return _normalize_space(super()._join_inline(ls))
+
+    def _enter_block(self) -> None:
+        self._do_parbreak_stack.append(False)
+    def _leave_block(self) -> None:
+        self._do_parbreak_stack.pop()
+        self._do_parbreak_stack[-1] = True
+    def _maybe_parbreak(self, suffix: str = "") -> str:
+        result = f".sp{suffix}" if self._do_parbreak_stack[-1] else ""
+        self._do_parbreak_stack[-1] = True
+        return result
+
+    def _admonition_open(self, kind: str) -> str:
+        self._enter_block()
+        return (
+            '.sp\n'
+            '.RS 4\n'
+            f'\\fB{kind}\\fP\n'
+            '.br'
+        )
+    def _admonition_close(self) -> str:
+        self._leave_block()
+        return ".RE"
+
+    def render(self, tokens: Sequence[Token]) -> str:
+        self._do_parbreak_stack = [ False ]
+        self._font_stack = [ "\\fR" ]
+        return super().render(tokens)
+
+    def text(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return man_escape(token.content)
+    def paragraph_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._maybe_parbreak()
+    def paragraph_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ""
+    def hardbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ".br"
+    def softbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return " "
+    def code_inline(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        s = _protect_spaces(man_escape(token.content))
+        return f"\\fR\\(oq{s}\\(cq\\fP" if self.inline_code_is_quoted else s
+    def code_block(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self.fence(token, tokens, i)
+    def link_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        href = cast(str, token.attrs['href'])
+        self._link_stack.append(href)
+        text = ""
+        if tokens[i + 1].type == 'link_close' and href in self._href_targets:
+            # TODO error or warning if the target can't be resolved
+            text = self._href_targets[href]
+        self._font_stack.append("\\fB")
+        return f"\\fB{text}\0 <"
+    def link_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        href = self._link_stack.pop()
+        text = ""
+        if self.link_footnotes is not None:
+            try:
+                idx = self.link_footnotes.index(href) + 1
+            except ValueError:
+                self.link_footnotes.append(href)
+                idx = len(self.link_footnotes)
+            text = "\\fR" + man_escape(f"[{idx}]")
+        self._font_stack.pop()
+        return f">\0 {text}{self._font_stack[-1]}"
+    def list_item_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._enter_block()
+        lst = self._list_stack[-1]
+        maybe_space = '' if lst.compact or not lst.first_item_seen else '.sp\n'
+        lst.first_item_seen = True
+        head = "•"
+        if lst.next_idx is not None:
+            head = f"{lst.next_idx}."
+            lst.next_idx += 1
+        return (
+            f'{maybe_space}'
+            f'.RS {lst.width}\n'
+            f"\\h'-{len(head) + 1}'\\fB{man_escape(head)}\\fP\\h'1'\\c"
+        )
+    def list_item_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._leave_block()
+        return ".RE"
+    def bullet_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._list_stack.append(List(width=4, compact=bool(token.meta['compact'])))
+        return self._maybe_parbreak()
+    def bullet_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._list_stack.pop()
+        return ""
+    def em_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._font_stack.append("\\fI")
+        return "\\fI"
+    def em_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._font_stack.pop()
+        return self._font_stack[-1]
+    def strong_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._font_stack.append("\\fB")
+        return "\\fB"
+    def strong_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._font_stack.pop()
+        return self._font_stack[-1]
+    def fence(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        s = man_escape(token.content).rstrip('\n')
+        return (
+            '.sp\n'
+            '.RS 4\n'
+            '.nf\n'
+            f'{s}\n'
+            '.fi\n'
+            '.RE'
+        )
+    def blockquote_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        maybe_par = self._maybe_parbreak("\n")
+        self._enter_block()
+        return (
+            f"{maybe_par}"
+            ".RS 4\n"
+            f"\\h'-3'\\fI\\(lq\\(rq\\fP\\h'1'\\c"
+        )
+    def blockquote_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._leave_block()
+        return ".RE"
+    def note_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open("Note")
+    def note_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def caution_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open( "Caution")
+    def caution_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def important_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open( "Important")
+    def important_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def tip_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open( "Tip")
+    def tip_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def warning_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_open( "Warning")
+    def warning_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonition_close()
+    def dl_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ".RS 4"
+    def dl_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ".RE"
+    def dt_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ".PP"
+    def dt_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ""
+    def dd_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._enter_block()
+        return ".RS 4"
+    def dd_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._leave_block()
+        return ".RE"
+    def myst_role(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        if token.meta['name'] in [ 'command', 'env', 'option' ]:
+            return f'\\fB{man_escape(token.content)}\\fP'
+        elif token.meta['name'] in [ 'file', 'var' ]:
+            return f'\\fI{man_escape(token.content)}\\fP'
+        elif token.meta['name'] == 'manpage':
+            [page, section] = [ s.strip() for s in token.content.rsplit('(', 1) ]
+            section = section[:-1]
+            return f'\\fB{man_escape(page)}\\fP\\fR({man_escape(section)})\\fP'
+        else:
+            raise NotImplementedError("md node not supported yet", token)
+    def attr_span_begin(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        # mdoc knows no anchors so we can drop those, but classes must be rejected.
+        if 'class' in token.attrs:
+            return super().attr_span_begin(token, tokens, i)
+        return ""
+    def attr_span_end(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return ""
+    def heading_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported in manpages", token)
+    def heading_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported in manpages", token)
+    def ordered_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        # max item head width for a number, a dot, and one leading space and one trailing space
+        width = 3 + len(str(cast(int, token.meta['end'])))
+        self._list_stack.append(
+            List(width    = width,
+                 next_idx = cast(int, token.attrs.get('start', 1)),
+                 compact  = bool(token.meta['compact'])))
+        return self._maybe_parbreak()
+    def ordered_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        self._list_stack.pop()
+        return ""
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual.py
new file mode 100644
index 000000000000..c72a9d53cd18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual.py
@@ -0,0 +1,789 @@
+import argparse
+import hashlib
+import html
+import json
+import re
+import xml.sax.saxutils as xml
+
+from abc import abstractmethod
+from collections.abc import Mapping, Sequence
+from pathlib import Path
+from typing import Any, Callable, cast, ClassVar, Generic, get_args, NamedTuple
+
+from markdown_it.token import Token
+
+from . import md, options
+from .docbook import DocBookRenderer, Heading, make_xml_id
+from .html import HTMLRenderer, UnresolvedXrefError
+from .manual_structure import check_structure, FragmentType, is_include, TocEntry, TocEntryType, XrefTarget
+from .md import Converter, Renderer
+
+class BaseConverter(Converter[md.TR], Generic[md.TR]):
+    # per-converter configuration for ns:arg=value arguments to include blocks, following
+    # the include type. html converters need something like this to support chunking, or
+    # another external method like the chunktocs docbook uses (but block options seem like
+    # a much nicer of doing this).
+    INCLUDE_ARGS_NS: ClassVar[str]
+    INCLUDE_FRAGMENT_ALLOWED_ARGS: ClassVar[set[str]] = set()
+    INCLUDE_OPTIONS_ALLOWED_ARGS: ClassVar[set[str]] = set()
+
+    _base_paths: list[Path]
+    _current_type: list[TocEntryType]
+
+    def convert(self, infile: Path, outfile: Path) -> None:
+        self._base_paths = [ infile ]
+        self._current_type = ['book']
+        try:
+            tokens = self._parse(infile.read_text())
+            self._postprocess(infile, outfile, tokens)
+            converted = self._renderer.render(tokens)
+            outfile.write_text(converted)
+        except Exception as e:
+            raise RuntimeError(f"failed to render manual {infile}") from e
+
+    def _postprocess(self, infile: Path, outfile: Path, tokens: Sequence[Token]) -> None:
+        pass
+
+    def _handle_headings(self, tokens: list[Token], *, on_heading: Callable[[Token,str],None]) -> None:
+        # Headings in a globally numbered order
+        # h1 to h6
+        curr_heading_pos: list[int] = []
+        for token in tokens:
+            if token.type == "heading_open":
+                if token.tag not in ["h1", "h2", "h3", "h4", "h5", "h6"]:
+                    raise RuntimeError(f"Got invalid heading tag {token.tag} in line {token.map[0] + 1 if token.map else 'NOT FOUND'}. Only h1 to h6 headings are allowed.")
+
+                idx = int(token.tag[1:]) - 1
+
+                if idx >= len(curr_heading_pos):
+                    # extend the list if necessary
+                    curr_heading_pos.extend([0 for _i in range(idx+1 - len(curr_heading_pos))])
+
+                curr_heading_pos = curr_heading_pos[:idx+1]
+                curr_heading_pos[-1] += 1
+
+
+                ident = ".".join(f"{a}" for a in curr_heading_pos)
+                on_heading(token,ident)
+
+
+
+    def _parse(self, src: str, *, auto_id_prefix: None | str = None) -> list[Token]:
+        tokens = super()._parse(src)
+        if auto_id_prefix:
+            def set_token_ident(token: Token, ident: str) -> None:
+                if "id" not in token.attrs:
+                    token.attrs["id"] = f"{auto_id_prefix}-{ident}"
+
+            self._handle_headings(tokens, on_heading=set_token_ident)
+
+
+        check_structure(self._current_type[-1], tokens)
+        for token in tokens:
+            if not is_include(token):
+                continue
+            directive = token.info[12:].split()
+            if not directive:
+                continue
+            args = { k: v for k, _sep, v in map(lambda s: s.partition('='), directive[1:]) }
+            typ = directive[0]
+            if typ == 'options':
+                token.type = 'included_options'
+                self._process_include_args(token, args, self.INCLUDE_OPTIONS_ALLOWED_ARGS)
+                self._parse_options(token, args)
+            else:
+                fragment_type = typ.removesuffix('s')
+                if fragment_type not in get_args(FragmentType):
+                    raise RuntimeError(f"unsupported structural include type '{typ}'")
+                self._current_type.append(cast(FragmentType, fragment_type))
+                token.type = 'included_' + typ
+                self._process_include_args(token, args, self.INCLUDE_FRAGMENT_ALLOWED_ARGS)
+                self._parse_included_blocks(token, args)
+                self._current_type.pop()
+        return tokens
+
+    def _process_include_args(self, token: Token, args: dict[str, str], allowed: set[str]) -> None:
+        ns = self.INCLUDE_ARGS_NS + ":"
+        args = { k[len(ns):]: v for k, v in args.items() if k.startswith(ns) }
+        if unknown := set(args.keys()) - allowed:
+            assert token.map
+            raise RuntimeError(f"unrecognized include argument in line {token.map[0] + 1}", unknown)
+        token.meta['include-args'] = args
+
+    def _parse_included_blocks(self, token: Token, block_args: dict[str, str]) -> None:
+        assert token.map
+        included = token.meta['included'] = []
+        for (lnum, line) in enumerate(token.content.splitlines(), token.map[0] + 2):
+            line = line.strip()
+            path = self._base_paths[-1].parent / line
+            if path in self._base_paths:
+                raise RuntimeError(f"circular include found in line {lnum}")
+            try:
+                self._base_paths.append(path)
+                with open(path, 'r') as f:
+                    prefix = None
+                    if "auto-id-prefix" in block_args:
+                        # include the current file number to prevent duplicate ids within include blocks
+                        prefix = f"{block_args.get('auto-id-prefix')}-{lnum}"
+
+                    tokens = self._parse(f.read(), auto_id_prefix=prefix)
+                    included.append((tokens, path))
+                self._base_paths.pop()
+            except Exception as e:
+                raise RuntimeError(f"processing included file {path} from line {lnum}") from e
+
+    def _parse_options(self, token: Token, block_args: dict[str, str]) -> None:
+        assert token.map
+
+        items = {}
+        for (lnum, line) in enumerate(token.content.splitlines(), token.map[0] + 2):
+            if len(args := line.split(":", 1)) != 2:
+                raise RuntimeError(f"options directive with no argument in line {lnum}")
+            (k, v) = (args[0].strip(), args[1].strip())
+            if k in items:
+                raise RuntimeError(f"duplicate options directive {k} in line {lnum}")
+            items[k] = v
+        try:
+            id_prefix = items.pop('id-prefix')
+            varlist_id = items.pop('list-id')
+            source = items.pop('source')
+        except KeyError as e:
+            raise RuntimeError(f"options directive {e} missing in block at line {token.map[0] + 1}")
+        if items.keys():
+            raise RuntimeError(
+                f"unsupported options directives in block at line {token.map[0] + 1}",
+                " ".join(items.keys()))
+
+        try:
+            with open(self._base_paths[-1].parent / source, 'r') as f:
+                token.meta['id-prefix'] = id_prefix
+                token.meta['list-id'] = varlist_id
+                token.meta['source'] = json.load(f)
+        except Exception as e:
+            raise RuntimeError(f"processing options block in line {token.map[0] + 1}") from e
+
+class RendererMixin(Renderer):
+    _toplevel_tag: str
+    _revision: str
+
+    def __init__(self, toplevel_tag: str, revision: str, *args: Any, **kwargs: Any):
+        super().__init__(*args, **kwargs)
+        self._toplevel_tag = toplevel_tag
+        self._revision = revision
+        self.rules |= {
+            'included_sections': lambda *args: self._included_thing("section", *args),
+            'included_chapters': lambda *args: self._included_thing("chapter", *args),
+            'included_preface': lambda *args: self._included_thing("preface", *args),
+            'included_parts': lambda *args: self._included_thing("part", *args),
+            'included_appendix': lambda *args: self._included_thing("appendix", *args),
+            'included_options': self.included_options,
+        }
+
+    def render(self, tokens: Sequence[Token]) -> str:
+        # books get special handling because they have *two* title tags. doing this with
+        # generic code is more complicated than it's worth. the checks above have verified
+        # that both titles actually exist.
+        if self._toplevel_tag == 'book':
+            return self._render_book(tokens)
+
+        return super().render(tokens)
+
+    @abstractmethod
+    def _render_book(self, tokens: Sequence[Token]) -> str:
+        raise NotImplementedError()
+
+    @abstractmethod
+    def _included_thing(self, tag: str, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise NotImplementedError()
+
+    @abstractmethod
+    def included_options(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise NotImplementedError()
+
+class ManualDocBookRenderer(RendererMixin, DocBookRenderer):
+    def __init__(self, toplevel_tag: str, revision: str, manpage_urls: Mapping[str, str]):
+        super().__init__(toplevel_tag, revision, manpage_urls)
+
+    def _render_book(self, tokens: Sequence[Token]) -> str:
+        assert tokens[1].children
+        assert tokens[4].children
+        if (maybe_id := cast(str, tokens[0].attrs.get('id', ""))):
+            maybe_id = "xml:id=" + xml.quoteattr(maybe_id)
+        return (f'<book xmlns="http://docbook.org/ns/docbook"'
+                f'      xmlns:xlink="http://www.w3.org/1999/xlink"'
+                f'      {maybe_id} version="5.0">'
+                f'  <title>{self.renderInline(tokens[1].children)}</title>'
+                f'  <subtitle>{self.renderInline(tokens[4].children)}</subtitle>'
+                f'  {super(DocBookRenderer, self).render(tokens[6:])}'
+                f'</book>')
+
+    def _heading_tag(self, token: Token, tokens: Sequence[Token], i: int) -> tuple[str, dict[str, str]]:
+        (tag, attrs) = super()._heading_tag(token, tokens, i)
+        # render() has already verified that we don't have supernumerary headings and since the
+        # book tag is handled specially we can leave the check this simple
+        if token.tag != 'h1':
+            return (tag, attrs)
+        return (self._toplevel_tag, attrs | {
+            'xmlns': "http://docbook.org/ns/docbook",
+            'xmlns:xlink': "http://www.w3.org/1999/xlink",
+        })
+
+    def _included_thing(self, tag: str, token: Token, tokens: Sequence[Token], i: int) -> str:
+        result = []
+        # close existing partintro. the generic render doesn't really need this because
+        # it doesn't have a concept of structure in the way the manual does.
+        if self._headings and self._headings[-1] == Heading('part', 1):
+            result.append("</partintro>")
+            self._headings[-1] = self._headings[-1]._replace(partintro_closed=True)
+        # must nest properly for structural includes. this requires saving at least
+        # the headings stack, but creating new renderers is cheap and much easier.
+        r = ManualDocBookRenderer(tag, self._revision, self._manpage_urls)
+        for (included, path) in token.meta['included']:
+            try:
+                result.append(r.render(included))
+            except Exception as e:
+                raise RuntimeError(f"rendering {path}") from e
+        return "".join(result)
+    def included_options(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        conv = options.DocBookConverter(self._manpage_urls, self._revision, 'fragment',
+                                        token.meta['list-id'], token.meta['id-prefix'])
+        conv.add_options(token.meta['source'])
+        return conv.finalize(fragment=True)
+
+    # TODO minimize docbook diffs with existing conversions. remove soon.
+    def paragraph_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return super().paragraph_open(token, tokens, i) + "\n "
+    def paragraph_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return "\n" + super().paragraph_close(token, tokens, i)
+    def code_block(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return f"<programlisting>\n{xml.escape(token.content)}</programlisting>"
+    def fence(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        info = f" language={xml.quoteattr(token.info)}" if token.info != "" else ""
+        return f"<programlisting{info}>\n{xml.escape(token.content)}</programlisting>"
+
+class DocBookConverter(BaseConverter[ManualDocBookRenderer]):
+    INCLUDE_ARGS_NS = "docbook"
+
+    def __init__(self, manpage_urls: Mapping[str, str], revision: str):
+        super().__init__()
+        self._renderer = ManualDocBookRenderer('book', revision, manpage_urls)
+
+
+class HTMLParameters(NamedTuple):
+    generator: str
+    stylesheets: Sequence[str]
+    scripts: Sequence[str]
+    # number of levels in the rendered table of contents. tables are prepended to
+    # the content they apply to (entire document / document chunk / top-level section
+    # of a chapter), setting a depth of 0 omits the respective table.
+    toc_depth: int
+    chunk_toc_depth: int
+    section_toc_depth: int
+    media_dir: Path
+
+class ManualHTMLRenderer(RendererMixin, HTMLRenderer):
+    _base_path: Path
+    _in_dir: Path
+    _html_params: HTMLParameters
+
+    def __init__(self, toplevel_tag: str, revision: str, html_params: HTMLParameters,
+                 manpage_urls: Mapping[str, str], xref_targets: dict[str, XrefTarget],
+                 in_dir: Path, base_path: Path):
+        super().__init__(toplevel_tag, revision, manpage_urls, xref_targets)
+        self._in_dir = in_dir
+        self._base_path = base_path.absolute()
+        self._html_params = html_params
+
+    def _pull_image(self, src: str) -> str:
+        src_path = Path(src)
+        content = (self._in_dir / src_path).read_bytes()
+        # images may be used more than once, but we want to store them only once and
+        # in an easily accessible (ie, not input-file-path-dependent) location without
+        # having to maintain a mapping structure. hashing the file and using the hash
+        # as both the path of the final image provides both.
+        content_hash = hashlib.sha3_256(content).hexdigest()
+        target_name = f"{content_hash}{src_path.suffix}"
+        target_path = self._base_path / self._html_params.media_dir / target_name
+        target_path.write_bytes(content)
+        return f"./{self._html_params.media_dir}/{target_name}"
+
+    def _push(self, tag: str, hlevel_offset: int) -> Any:
+        result = (self._toplevel_tag, self._headings, self._attrspans, self._hlevel_offset, self._in_dir)
+        self._hlevel_offset += hlevel_offset
+        self._toplevel_tag, self._headings, self._attrspans = tag, [], []
+        return result
+
+    def _pop(self, state: Any) -> None:
+        (self._toplevel_tag, self._headings, self._attrspans, self._hlevel_offset, self._in_dir) = state
+
+    def _render_book(self, tokens: Sequence[Token]) -> str:
+        assert tokens[4].children
+        title_id = cast(str, tokens[0].attrs.get('id', ""))
+        title = self._xref_targets[title_id].title
+        # subtitles don't have IDs, so we can't use xrefs to get them
+        subtitle = self.renderInline(tokens[4].children)
+
+        toc = TocEntry.of(tokens[0])
+        return "\n".join([
+            self._file_header(toc),
+            ' <div class="book">',
+            '  <div class="titlepage">',
+            '   <div>',
+            f'   <div><h1 class="title"><a id="{html.escape(title_id, True)}"></a>{title}</h1></div>',
+            f'   <div><h2 class="subtitle">{subtitle}</h2></div>',
+            '   </div>',
+            "   <hr />",
+            '  </div>',
+            self._build_toc(tokens, 0),
+            super(HTMLRenderer, self).render(tokens[6:]),
+            ' </div>',
+            self._file_footer(toc),
+        ])
+
+    def _file_header(self, toc: TocEntry) -> str:
+        prev_link, up_link, next_link = "", "", ""
+        prev_a, next_a, parent_title = "", "", "&nbsp;"
+        nav_html = ""
+        home = toc.root
+        if toc.prev:
+            prev_link = f'<link rel="prev" href="{toc.prev.target.href()}" title="{toc.prev.target.title}" />'
+            prev_a = f'<a accesskey="p" href="{toc.prev.target.href()}">Prev</a>'
+        if toc.parent:
+            up_link = (
+                f'<link rel="up" href="{toc.parent.target.href()}" '
+                f'title="{toc.parent.target.title}" />'
+            )
+            if (part := toc.parent) and part.kind != 'book':
+                assert part.target.title
+                parent_title = part.target.title
+        if toc.next:
+            next_link = f'<link rel="next" href="{toc.next.target.href()}" title="{toc.next.target.title}" />'
+            next_a = f'<a accesskey="n" href="{toc.next.target.href()}">Next</a>'
+        if toc.prev or toc.parent or toc.next:
+            nav_html = "\n".join([
+                '  <div class="navheader">',
+                '   <table width="100%" summary="Navigation header">',
+                '    <tr>',
+                f'    <th colspan="3" align="center">{toc.target.title}</th>',
+                '    </tr>',
+                '    <tr>',
+                f'    <td width="20%" align="left">{prev_a}&nbsp;</td>',
+                f'    <th width="60%" align="center">{parent_title}</th>',
+                f'    <td width="20%" align="right">&nbsp;{next_a}</td>',
+                '    </tr>',
+                '   </table>',
+                '   <hr />',
+                '  </div>',
+            ])
+        return "\n".join([
+            '<?xml version="1.0" encoding="utf-8" standalone="no"?>',
+            '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"',
+            '  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
+            '<html xmlns="http://www.w3.org/1999/xhtml">',
+            ' <head>',
+            '  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />',
+            f' <title>{toc.target.title}</title>',
+            "".join((f'<link rel="stylesheet" type="text/css" href="{html.escape(style, True)}" />'
+                     for style in self._html_params.stylesheets)),
+            "".join((f'<script src="{html.escape(script, True)}" type="text/javascript"></script>'
+                     for script in self._html_params.scripts)),
+            f' <meta name="generator" content="{html.escape(self._html_params.generator, True)}" />',
+            f' <link rel="home" href="{home.target.href()}" title="{home.target.title}" />' if home.target.href() else "",
+            f' {up_link}{prev_link}{next_link}',
+            ' </head>',
+            ' <body>',
+            nav_html,
+        ])
+
+    def _file_footer(self, toc: TocEntry) -> str:
+        # prev, next = self._get_prev_and_next()
+        prev_a, up_a, home_a, next_a = "", "&nbsp;", "&nbsp;", ""
+        prev_text, up_text, next_text = "", "", ""
+        nav_html = ""
+        home = toc.root
+        if toc.prev:
+            prev_a = f'<a accesskey="p" href="{toc.prev.target.href()}">Prev</a>'
+            assert toc.prev.target.title
+            prev_text = toc.prev.target.title
+        if toc.parent:
+            home_a = f'<a accesskey="h" href="{home.target.href()}">Home</a>'
+            if toc.parent != home:
+                up_a = f'<a accesskey="u" href="{toc.parent.target.href()}">Up</a>'
+        if toc.next:
+            next_a = f'<a accesskey="n" href="{toc.next.target.href()}">Next</a>'
+            assert toc.next.target.title
+            next_text = toc.next.target.title
+        if toc.prev or toc.parent or toc.next:
+            nav_html = "\n".join([
+                '  <div class="navfooter">',
+                '   <hr />',
+                '   <table width="100%" summary="Navigation footer">',
+                '    <tr>',
+                f'    <td width="40%" align="left">{prev_a}&nbsp;</td>',
+                f'    <td width="20%" align="center">{up_a}</td>',
+                f'    <td width="40%" align="right">&nbsp;{next_a}</td>',
+                '    </tr>',
+                '    <tr>',
+                f'     <td width="40%" align="left" valign="top">{prev_text}&nbsp;</td>',
+                f'     <td width="20%" align="center">{home_a}</td>',
+                f'     <td width="40%" align="right" valign="top">&nbsp;{next_text}</td>',
+                '    </tr>',
+                '   </table>',
+                '  </div>',
+            ])
+        return "\n".join([
+            nav_html,
+            ' </body>',
+            '</html>',
+        ])
+
+    def _heading_tag(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        if token.tag == 'h1':
+            return self._toplevel_tag
+        return super()._heading_tag(token, tokens, i)
+    def _build_toc(self, tokens: Sequence[Token], i: int) -> str:
+        toc = TocEntry.of(tokens[i])
+        if toc.kind == 'section' and self._html_params.section_toc_depth < 1:
+            return ""
+        def walk_and_emit(toc: TocEntry, depth: int) -> list[str]:
+            if depth <= 0:
+                return []
+            result = []
+            for child in toc.children:
+                result.append(
+                    f'<dt>'
+                    f' <span class="{html.escape(child.kind, True)}">'
+                    f'  <a href="{child.target.href()}">{child.target.toc_html}</a>'
+                    f' </span>'
+                    f'</dt>'
+                )
+                # we want to look straight through parts because docbook-xsl does too, but it
+                # also makes for more uesful top-level tocs.
+                next_level = walk_and_emit(child, depth - (0 if child.kind == 'part' else 1))
+                if next_level:
+                    result.append(f'<dd><dl>{"".join(next_level)}</dl></dd>')
+            return result
+        def build_list(kind: str, id: str, lst: Sequence[TocEntry]) -> str:
+            if not lst:
+                return ""
+            entries = [
+                f'<dt>{i}. <a href="{e.target.href()}">{e.target.toc_html}</a></dt>'
+                for i, e in enumerate(lst, start=1)
+            ]
+            return (
+                f'<div class="{id}">'
+                f'<p><strong>List of {kind}</strong></p>'
+                f'<dl>{"".join(entries)}</dl>'
+                '</div>'
+            )
+        # we don't want to generate the "Title of Contents" header for sections,
+        # docbook doesn't and it's only distracting clutter unless it's the main table.
+        # we also want to generate tocs only for a top-level section (ie, one that is
+        # not itself contained in another section)
+        print_title = toc.kind != 'section'
+        if toc.kind == 'section':
+            if toc.parent and toc.parent.kind == 'section':
+                toc_depth = 0
+            else:
+                toc_depth = self._html_params.section_toc_depth
+        elif toc.starts_new_chunk and toc.kind != 'book':
+            toc_depth = self._html_params.chunk_toc_depth
+        else:
+            toc_depth = self._html_params.toc_depth
+        if not (items := walk_and_emit(toc, toc_depth)):
+            return ""
+        figures = build_list("Figures", "list-of-figures", toc.figures)
+        examples = build_list("Examples", "list-of-examples", toc.examples)
+        return "".join([
+            f'<div class="toc">',
+            ' <p><strong>Table of Contents</strong></p>' if print_title else "",
+            f' <dl class="toc">'
+            f'  {"".join(items)}'
+            f' </dl>'
+            f'</div>'
+            f'{figures}'
+            f'{examples}'
+        ])
+
+    def _make_hN(self, level: int) -> tuple[str, str]:
+        # for some reason chapters don't increase the hN nesting count in docbook xslts. duplicate
+        # this for consistency.
+        if self._toplevel_tag == 'chapter':
+            level -= 1
+        # TODO docbook compat. these are never useful for us, but not having them breaks manual
+        # compare workflows while docbook is still allowed.
+        style = ""
+        if level + self._hlevel_offset < 3 \
+           and (self._toplevel_tag == 'section' or (self._toplevel_tag == 'chapter' and level > 0)):
+            style = "clear: both"
+        tag, hstyle = super()._make_hN(max(1, level))
+        return tag, style
+
+    def _included_thing(self, tag: str, token: Token, tokens: Sequence[Token], i: int) -> str:
+        outer, inner = [], []
+        # since books have no non-include content the toplevel book wrapper will not count
+        # towards nesting depth. other types will have at least a title+id heading which
+        # *does* count towards the nesting depth. chapters give a -1 to included sections
+        # mirroring the special handing in _make_hN. sigh.
+        hoffset = (
+            0 if not self._headings
+            else self._headings[-1].level - 1 if self._toplevel_tag == 'chapter'
+            else self._headings[-1].level
+        )
+        outer.append(self._maybe_close_partintro())
+        into = token.meta['include-args'].get('into-file')
+        fragments = token.meta['included']
+        state = self._push(tag, hoffset)
+        if into:
+            toc = TocEntry.of(fragments[0][0][0])
+            inner.append(self._file_header(toc))
+            # we do not set _hlevel_offset=0 because docbook doesn't either.
+        else:
+            inner = outer
+        in_dir = self._in_dir
+        for included, path in fragments:
+            try:
+                self._in_dir = (in_dir / path).parent
+                inner.append(self.render(included))
+            except Exception as e:
+                raise RuntimeError(f"rendering {path}") from e
+        if into:
+            inner.append(self._file_footer(toc))
+            (self._base_path / into).write_text("".join(inner))
+        self._pop(state)
+        return "".join(outer)
+
+    def included_options(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        conv = options.HTMLConverter(self._manpage_urls, self._revision,
+                                     token.meta['list-id'], token.meta['id-prefix'],
+                                     self._xref_targets)
+        conv.add_options(token.meta['source'])
+        return conv.finalize()
+
+def _to_base26(n: int) -> str:
+    return (_to_base26(n // 26) if n > 26 else "") + chr(ord("A") + n % 26)
+
+class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
+    INCLUDE_ARGS_NS = "html"
+    INCLUDE_FRAGMENT_ALLOWED_ARGS = { 'into-file' }
+
+    _revision: str
+    _html_params: HTMLParameters
+    _manpage_urls: Mapping[str, str]
+    _xref_targets: dict[str, XrefTarget]
+    _redirection_targets: set[str]
+    _appendix_count: int = 0
+
+    def _next_appendix_id(self) -> str:
+        self._appendix_count += 1
+        return _to_base26(self._appendix_count - 1)
+
+    def __init__(self, revision: str, html_params: HTMLParameters, manpage_urls: Mapping[str, str]):
+        super().__init__()
+        self._revision, self._html_params, self._manpage_urls = revision, html_params, manpage_urls
+        self._xref_targets = {}
+        self._redirection_targets = set()
+        # renderer not set on purpose since it has a dependency on the output path!
+
+    def convert(self, infile: Path, outfile: Path) -> None:
+        self._renderer = ManualHTMLRenderer(
+            'book', self._revision, self._html_params, self._manpage_urls, self._xref_targets,
+            infile.parent, outfile.parent)
+        super().convert(infile, outfile)
+
+    def _parse(self, src: str, *, auto_id_prefix: None | str = None) -> list[Token]:
+        tokens = super()._parse(src,auto_id_prefix=auto_id_prefix)
+        for token in tokens:
+            if not token.type.startswith('included_') \
+               or not (into := token.meta['include-args'].get('into-file')):
+                continue
+            assert token.map
+            if len(token.meta['included']) == 0:
+                raise RuntimeError(f"redirection target {into} in line {token.map[0] + 1} is empty!")
+            # we use blender-style //path to denote paths relative to the origin file
+            # (usually index.html). this makes everything a lot easier and clearer.
+            if not into.startswith("//") or '/' in into[2:]:
+                raise RuntimeError("html:into-file must be a relative-to-origin //filename", into)
+            into = token.meta['include-args']['into-file'] = into[2:]
+            if into in self._redirection_targets:
+                raise RuntimeError(f"redirection target {into} in line {token.map[0] + 1} is already in use")
+            self._redirection_targets.add(into)
+        return tokens
+
+    def _number_block(self, block: str, prefix: str, tokens: Sequence[Token], start: int = 1) -> int:
+        title_open, title_close = f'{block}_title_open', f'{block}_title_close'
+        for (i, token) in enumerate(tokens):
+            if token.type == title_open:
+                title = tokens[i + 1]
+                assert title.type == 'inline' and title.children
+                # the prefix is split into two tokens because the xref title_html will want
+                # only the first of the two, but both must be rendered into the example itself.
+                title.children = (
+                    [
+                        Token('text', '', 0, content=f'{prefix} {start}'),
+                        Token('text', '', 0, content='. ')
+                    ] + title.children
+                )
+                start += 1
+            elif token.type.startswith('included_') and token.type != 'included_options':
+                for sub, _path in token.meta['included']:
+                    start = self._number_block(block, prefix, sub, start)
+        return start
+
+    # xref | (id, type, heading inlines, file, starts new file)
+    def _collect_ids(self, tokens: Sequence[Token], target_file: str, typ: str, file_changed: bool
+                     ) -> list[XrefTarget | tuple[str, str, Token, str, bool]]:
+        result: list[XrefTarget | tuple[str, str, Token, str, bool]] = []
+        # collect all IDs and their xref substitutions. headings are deferred until everything
+        # has been parsed so we can resolve links in headings. if that's even used anywhere.
+        for (i, bt) in enumerate(tokens):
+            if bt.type == 'heading_open' and (id := cast(str, bt.attrs.get('id', ''))):
+                result.append((id, typ if bt.tag == 'h1' else 'section', tokens[i + 1], target_file,
+                               i == 0 and file_changed))
+            elif bt.type == 'included_options':
+                id_prefix = bt.meta['id-prefix']
+                for opt in bt.meta['source'].keys():
+                    id = make_xml_id(f"{id_prefix}{opt}")
+                    name = html.escape(opt)
+                    result.append(XrefTarget(id, f'<code class="option">{name}</code>', name, None, target_file))
+            elif bt.type.startswith('included_'):
+                sub_file = bt.meta['include-args'].get('into-file', target_file)
+                subtyp = bt.type.removeprefix('included_').removesuffix('s')
+                for si, (sub, _path) in enumerate(bt.meta['included']):
+                    result += self._collect_ids(sub, sub_file, subtyp, si == 0 and sub_file != target_file)
+            elif bt.type == 'example_open' and (id := cast(str, bt.attrs.get('id', ''))):
+                result.append((id, 'example', tokens[i + 2], target_file, False))
+            elif bt.type == 'figure_open' and (id := cast(str, bt.attrs.get('id', ''))):
+                result.append((id, 'figure', tokens[i + 2], target_file, False))
+            elif bt.type == 'footnote_open' and (id := cast(str, bt.attrs.get('id', ''))):
+                result.append(XrefTarget(id, "???", None, None, target_file))
+            elif bt.type == 'footnote_ref' and (id := cast(str, bt.attrs.get('id', ''))):
+                result.append(XrefTarget(id, "???", None, None, target_file))
+            elif bt.type == 'inline':
+                assert bt.children is not None
+                result += self._collect_ids(bt.children, target_file, typ, False)
+            elif id := cast(str, bt.attrs.get('id', '')):
+                # anchors and examples have no titles we could use, but we'll have to put
+                # *something* here to communicate that there's no title.
+                result.append(XrefTarget(id, "???", None, None, target_file))
+        return result
+
+    def _render_xref(self, id: str, typ: str, inlines: Token, path: str, drop_fragment: bool) -> XrefTarget:
+        assert inlines.children
+        title_html = self._renderer.renderInline(inlines.children)
+        if typ == 'appendix':
+            # NOTE the docbook compat is strong here
+            n = self._next_appendix_id()
+            prefix = f"Appendix\u00A0{n}.\u00A0"
+            # HACK for docbook compat: prefix the title inlines with appendix id if
+            # necessary. the alternative is to mess with titlepage rendering in headings,
+            # which seems just a lot worse than this
+            prefix_tokens = [Token(type='text', tag='', nesting=0, content=prefix)]
+            inlines.children = prefix_tokens + list(inlines.children)
+            title = prefix + title_html
+            toc_html = f"{n}. {title_html}"
+            title_html = f"Appendix&nbsp;{n}"
+        elif typ in ['example', 'figure']:
+            # skip the prepended `{Example,Figure} N. ` from numbering
+            toc_html, title = self._renderer.renderInline(inlines.children[2:]), title_html
+            # xref title wants only the prepended text, sans the trailing colon and space
+            title_html = self._renderer.renderInline(inlines.children[0:1])
+        else:
+            toc_html, title = title_html, title_html
+            title_html = (
+                f"<em>{title_html}</em>"
+                if typ == 'chapter'
+                else title_html if typ in [ 'book', 'part' ]
+                else f'the section called “{title_html}â€'
+            )
+        return XrefTarget(id, title_html, toc_html, re.sub('<.*?>', '', title), path, drop_fragment)
+
+    def _postprocess(self, infile: Path, outfile: Path, tokens: Sequence[Token]) -> None:
+        self._number_block('example', "Example", tokens)
+        self._number_block('figure', "Figure", tokens)
+        xref_queue = self._collect_ids(tokens, outfile.name, 'book', True)
+
+        failed = False
+        deferred = []
+        while xref_queue:
+            for item in xref_queue:
+                try:
+                    target = item if isinstance(item, XrefTarget) else self._render_xref(*item)
+                except UnresolvedXrefError:
+                    if failed:
+                        raise
+                    deferred.append(item)
+                    continue
+
+                if target.id in self._xref_targets:
+                    raise RuntimeError(f"found duplicate id #{target.id}")
+                self._xref_targets[target.id] = target
+            if len(deferred) == len(xref_queue):
+                failed = True # do another round and report the first error
+            xref_queue = deferred
+
+        paths_seen = set()
+        for t in self._xref_targets.values():
+            paths_seen.add(t.path)
+
+        if len(paths_seen) == 1:
+            for (k, t) in self._xref_targets.items():
+                self._xref_targets[k] = XrefTarget(
+                    t.id,
+                    t.title_html,
+                    t.toc_html,
+                    t.title,
+                    t.path,
+                    t.drop_fragment,
+                    drop_target=True
+                )
+
+        TocEntry.collect_and_link(self._xref_targets, tokens)
+
+
+
+def _build_cli_db(p: argparse.ArgumentParser) -> None:
+    p.add_argument('--manpage-urls', required=True)
+    p.add_argument('--revision', required=True)
+    p.add_argument('infile', type=Path)
+    p.add_argument('outfile', type=Path)
+
+def _build_cli_html(p: argparse.ArgumentParser) -> None:
+    p.add_argument('--manpage-urls', required=True)
+    p.add_argument('--revision', required=True)
+    p.add_argument('--generator', default='nixos-render-docs')
+    p.add_argument('--stylesheet', default=[], action='append')
+    p.add_argument('--script', default=[], action='append')
+    p.add_argument('--toc-depth', default=1, type=int)
+    p.add_argument('--chunk-toc-depth', default=1, type=int)
+    p.add_argument('--section-toc-depth', default=0, type=int)
+    p.add_argument('--media-dir', default="media", type=Path)
+    p.add_argument('infile', type=Path)
+    p.add_argument('outfile', type=Path)
+
+def _run_cli_db(args: argparse.Namespace) -> None:
+    with open(args.manpage_urls, 'r') as manpage_urls:
+        md = DocBookConverter(json.load(manpage_urls), args.revision)
+        md.convert(args.infile, args.outfile)
+
+def _run_cli_html(args: argparse.Namespace) -> None:
+    with open(args.manpage_urls, 'r') as manpage_urls:
+        md = HTMLConverter(
+            args.revision,
+            HTMLParameters(args.generator, args.stylesheet, args.script, args.toc_depth,
+                           args.chunk_toc_depth, args.section_toc_depth, args.media_dir),
+            json.load(manpage_urls))
+        md.convert(args.infile, args.outfile)
+
+def build_cli(p: argparse.ArgumentParser) -> None:
+    formats = p.add_subparsers(dest='format', required=True)
+    _build_cli_db(formats.add_parser('docbook'))
+    _build_cli_html(formats.add_parser('html'))
+
+def run_cli(args: argparse.Namespace) -> None:
+    if args.format == 'docbook':
+        _run_cli_db(args)
+    elif args.format == 'html':
+        _run_cli_html(args)
+    else:
+        raise RuntimeError('format not hooked up', args)
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py
new file mode 100644
index 000000000000..c6e6bf429370
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py
@@ -0,0 +1,203 @@
+from __future__ import annotations
+
+import dataclasses as dc
+import html
+import itertools
+
+from typing import cast, get_args, Iterable, Literal, Sequence
+
+from markdown_it.token import Token
+
+from .utils import Freezeable
+
+# FragmentType is used to restrict structural include blocks.
+FragmentType = Literal['preface', 'part', 'chapter', 'section', 'appendix']
+
+# in the TOC all fragments are allowed, plus the all-encompassing book.
+TocEntryType = Literal['book', 'preface', 'part', 'chapter', 'section', 'appendix', 'example', 'figure']
+
+def is_include(token: Token) -> bool:
+    return token.type == "fence" and token.info.startswith("{=include=} ")
+
+# toplevel file must contain only the title headings and includes, anything else
+# would cause strange rendering.
+def _check_book_structure(tokens: Sequence[Token]) -> None:
+    for token in tokens[6:]:
+        if not is_include(token):
+            assert token.map
+            raise RuntimeError(f"unexpected content in line {token.map[0] + 1}, "
+                               "expected structural include")
+
+# much like books, parts may not contain headings other than their title heading.
+# this is a limitation of the current renderers and TOC generators that do not handle
+# this case well even though it is supported in docbook (and probably supportable
+# anywhere else).
+def _check_part_structure(tokens: Sequence[Token]) -> None:
+    _check_fragment_structure(tokens)
+    for token in tokens[3:]:
+        if token.type == 'heading_open':
+            assert token.map
+            raise RuntimeError(f"unexpected heading in line {token.map[0] + 1}")
+
+# two include blocks must either be adjacent or separated by a heading, otherwise
+# we cannot generate a correct TOC (since there'd be nothing to link to between
+# the two includes).
+def _check_fragment_structure(tokens: Sequence[Token]) -> None:
+    for i, token in enumerate(tokens):
+        if is_include(token) \
+           and i + 1 < len(tokens) \
+           and not (is_include(tokens[i + 1]) or tokens[i + 1].type == 'heading_open'):
+            assert token.map
+            raise RuntimeError(f"unexpected content in line {token.map[0] + 1}, "
+                               "expected heading or structural include")
+
+def check_structure(kind: TocEntryType, tokens: Sequence[Token]) -> None:
+    wanted = { 'h1': 'title' }
+    wanted |= { 'h2': 'subtitle' } if kind == 'book' else {}
+    for (i, (tag, role)) in enumerate(wanted.items()):
+        if len(tokens) < 3 * (i + 1):
+            raise RuntimeError(f"missing {role} ({tag}) heading")
+        token = tokens[3 * i]
+        if token.type != 'heading_open' or token.tag != tag:
+            assert token.map
+            raise RuntimeError(f"expected {role} ({tag}) heading in line {token.map[0] + 1}", token)
+    for t in tokens[3 * len(wanted):]:
+        if t.type != 'heading_open' or not (role := wanted.get(t.tag, '')):
+            continue
+        assert t.map
+        raise RuntimeError(
+            f"only one {role} heading ({t.markup} [text...]) allowed per "
+            f"{kind}, but found a second in line {t.map[0] + 1}. "
+            "please remove all such headings except the first or demote the subsequent headings.",
+            t)
+
+    last_heading_level = 0
+    for token in tokens:
+        if token.type != 'heading_open':
+            continue
+
+        # book subtitle headings do not need an id, only book title headings do.
+        # every other headings needs one too. we need this to build a TOC and to
+        # provide stable links if the manual changes shape.
+        if 'id' not in token.attrs and (kind != 'book' or token.tag != 'h2'):
+            assert token.map
+            raise RuntimeError(f"heading in line {token.map[0] + 1} does not have an id")
+
+        level = int(token.tag[1:]) # because tag = h1..h6
+        if level > last_heading_level + 1:
+            assert token.map
+            raise RuntimeError(f"heading in line {token.map[0] + 1} skips one or more heading levels, "
+                               "which is currently not allowed")
+        last_heading_level = level
+
+    if kind == 'book':
+        _check_book_structure(tokens)
+    elif kind == 'part':
+        _check_part_structure(tokens)
+    else:
+        _check_fragment_structure(tokens)
+
+@dc.dataclass(frozen=True)
+class XrefTarget:
+    id: str
+    """link label for `[](#local-references)`"""
+    title_html: str
+    """toc label"""
+    toc_html: str | None
+    """text for `<title>` tags and `title="..."` attributes"""
+    title: str | None
+    """path to file that contains the anchor"""
+    path: str
+    """whether to drop the `#anchor` from links when expanding xrefs"""
+    drop_fragment: bool = False
+    """whether to drop the `path.html` from links when expanding xrefs.
+       mostly useful for docbook compatibility"""
+    drop_target: bool = False
+
+    def href(self) -> str:
+        path = "" if self.drop_target else html.escape(self.path, True)
+        return path if self.drop_fragment else f"{path}#{html.escape(self.id, True)}"
+
+@dc.dataclass
+class TocEntry(Freezeable):
+    kind: TocEntryType
+    target: XrefTarget
+    parent: TocEntry | None = None
+    prev: TocEntry | None = None
+    next: TocEntry | None = None
+    children: list[TocEntry] = dc.field(default_factory=list)
+    starts_new_chunk: bool = False
+    examples: list[TocEntry] = dc.field(default_factory=list)
+    figures: list[TocEntry] = dc.field(default_factory=list)
+
+    @property
+    def root(self) -> TocEntry:
+        return self.parent.root if self.parent else self
+
+    @classmethod
+    def of(cls, token: Token) -> TocEntry:
+        entry = token.meta.get('TocEntry')
+        if not isinstance(entry, TocEntry):
+            raise RuntimeError('requested toc entry, none found', token)
+        return entry
+
+    @classmethod
+    def collect_and_link(cls, xrefs: dict[str, XrefTarget], tokens: Sequence[Token]) -> TocEntry:
+        entries, examples, figures = cls._collect_entries(xrefs, tokens, 'book')
+
+        def flatten_with_parent(this: TocEntry, parent: TocEntry | None) -> Iterable[TocEntry]:
+            this.parent = parent
+            return itertools.chain([this], *[ flatten_with_parent(c, this) for c in this.children ])
+
+        flat = list(flatten_with_parent(entries, None))
+        prev = flat[0]
+        prev.starts_new_chunk = True
+        paths_seen = set([prev.target.path])
+        for c in flat[1:]:
+            if prev.target.path != c.target.path and c.target.path not in paths_seen:
+                c.starts_new_chunk = True
+                c.prev, prev.next = prev, c
+                prev = c
+            paths_seen.add(c.target.path)
+
+        flat[0].examples = examples
+        flat[0].figures = figures
+
+        for c in flat:
+            c.freeze()
+
+        return entries
+
+    @classmethod
+    def _collect_entries(cls, xrefs: dict[str, XrefTarget], tokens: Sequence[Token],
+                         kind: TocEntryType) -> tuple[TocEntry, list[TocEntry], list[TocEntry]]:
+        # we assume that check_structure has been run recursively over the entire input.
+        # list contains (tag, entry) pairs that will collapse to a single entry for
+        # the full sequence.
+        entries: list[tuple[str, TocEntry]] = []
+        examples: list[TocEntry] = []
+        figures: list[TocEntry] = []
+        for token in tokens:
+            if token.type.startswith('included_') and (included := token.meta.get('included')):
+                fragment_type_str = token.type[9:].removesuffix('s')
+                assert fragment_type_str in get_args(TocEntryType)
+                fragment_type = cast(TocEntryType, fragment_type_str)
+                for fragment, _path in included:
+                    subentries, subexamples, subfigures = cls._collect_entries(xrefs, fragment, fragment_type)
+                    entries[-1][1].children.append(subentries)
+                    examples += subexamples
+                    figures += subfigures
+            elif token.type == 'heading_open' and (id := cast(str, token.attrs.get('id', ''))):
+                while len(entries) > 1 and entries[-1][0] >= token.tag:
+                    entries[-2][1].children.append(entries.pop()[1])
+                entries.append((token.tag,
+                                TocEntry(kind if token.tag == 'h1' else 'section', xrefs[id])))
+                token.meta['TocEntry'] = entries[-1][1]
+            elif token.type == 'example_open' and (id := cast(str, token.attrs.get('id', ''))):
+                examples.append(TocEntry('example', xrefs[id]))
+            elif token.type == 'figure_open' and (id := cast(str, token.attrs.get('id', ''))):
+                figures.append(TocEntry('figure', xrefs[id]))
+
+        while len(entries) > 1:
+            entries[-2][1].children.append(entries.pop()[1])
+        return (entries[0][1], examples, figures)
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/md.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/md.py
new file mode 100644
index 000000000000..894daf9ca9c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/md.py
@@ -0,0 +1,615 @@
+from abc import ABC
+from collections.abc import Mapping, MutableMapping, Sequence
+from typing import Any, Callable, cast, Generic, get_args, Iterable, Literal, NoReturn, Optional, TypeVar
+
+import dataclasses
+import re
+
+from .types import RenderFn
+
+import markdown_it
+from markdown_it.token import Token
+from markdown_it.utils import OptionsDict
+from mdit_py_plugins.container import container_plugin # type: ignore[attr-defined]
+from mdit_py_plugins.deflist import deflist_plugin # type: ignore[attr-defined]
+from mdit_py_plugins.footnote import footnote_plugin # type: ignore[attr-defined]
+from mdit_py_plugins.myst_role import myst_role_plugin # type: ignore[attr-defined]
+
+_md_escape_table = {
+    ord('*'): '\\*',
+    ord('<'): '\\<',
+    ord('['): '\\[',
+    ord('`'): '\\`',
+    ord('.'): '\\.',
+    ord('#'): '\\#',
+    ord('&'): '\\&',
+    ord('\\'): '\\\\',
+}
+def md_escape(s: str) -> str:
+    return s.translate(_md_escape_table)
+
+def md_make_code(code: str, info: str = "", multiline: Optional[bool] = None) -> str:
+    # for multi-line code blocks we only have to count ` runs at the beginning
+    # of a line, but this is much easier.
+    multiline = multiline or info != "" or '\n' in code
+    longest, current = (0, 0)
+    for c in code:
+        current = current + 1 if c == '`' else 0
+        longest = max(current, longest)
+    # inline literals need a space to separate ticks from content, code blocks
+    # need newlines. inline literals need one extra tick, code blocks need three.
+    ticks, sep = ('`' * (longest + (3 if multiline else 1)), '\n' if multiline else ' ')
+    return f"{ticks}{info}{sep}{code}{sep}{ticks}"
+
+AttrBlockKind = Literal['admonition', 'example', 'figure']
+
+AdmonitionKind = Literal["note", "caution", "tip", "important", "warning"]
+
+class Renderer:
+    _admonitions: dict[AdmonitionKind, tuple[RenderFn, RenderFn]]
+    _admonition_stack: list[AdmonitionKind]
+
+    def __init__(self, manpage_urls: Mapping[str, str]):
+        self._manpage_urls = manpage_urls
+        self.rules = {
+            'text': self.text,
+            'paragraph_open': self.paragraph_open,
+            'paragraph_close': self.paragraph_close,
+            'hardbreak': self.hardbreak,
+            'softbreak': self.softbreak,
+            'code_inline': self.code_inline,
+            'code_block': self.code_block,
+            'link_open': self.link_open,
+            'link_close': self.link_close,
+            'list_item_open': self.list_item_open,
+            'list_item_close': self.list_item_close,
+            'bullet_list_open': self.bullet_list_open,
+            'bullet_list_close': self.bullet_list_close,
+            'em_open': self.em_open,
+            'em_close': self.em_close,
+            'strong_open': self.strong_open,
+            'strong_close': self.strong_close,
+            'fence': self.fence,
+            'blockquote_open': self.blockquote_open,
+            'blockquote_close': self.blockquote_close,
+            'dl_open': self.dl_open,
+            'dl_close': self.dl_close,
+            'dt_open': self.dt_open,
+            'dt_close': self.dt_close,
+            'dd_open': self.dd_open,
+            'dd_close': self.dd_close,
+            'myst_role': self.myst_role,
+            "admonition_open": self.admonition_open,
+            "admonition_close": self.admonition_close,
+            "attr_span_begin": self.attr_span_begin,
+            "attr_span_end": self.attr_span_end,
+            "heading_open": self.heading_open,
+            "heading_close": self.heading_close,
+            "ordered_list_open": self.ordered_list_open,
+            "ordered_list_close": self.ordered_list_close,
+            "example_open": self.example_open,
+            "example_close": self.example_close,
+            "example_title_open": self.example_title_open,
+            "example_title_close": self.example_title_close,
+            "image": self.image,
+            "figure_open": self.figure_open,
+            "figure_close": self.figure_close,
+            "figure_title_open": self.figure_title_open,
+            "figure_title_close": self.figure_title_close,
+            "table_open": self.table_open,
+            "table_close": self.table_close,
+            "thead_open": self.thead_open,
+            "thead_close": self.thead_close,
+            "tr_open": self.tr_open,
+            "tr_close": self.tr_close,
+            "th_open": self.th_open,
+            "th_close": self.th_close,
+            "tbody_open": self.tbody_open,
+            "tbody_close": self.tbody_close,
+            "td_open": self.td_open,
+            "td_close": self.td_close,
+            "footnote_ref": self.footnote_ref,
+            "footnote_block_open": self.footnote_block_open,
+            "footnote_block_close": self.footnote_block_close,
+            "footnote_open": self.footnote_open,
+            "footnote_close": self.footnote_close,
+            "footnote_anchor": self.footnote_anchor,
+        }
+
+        self._admonitions = {
+            "note": (self.note_open, self.note_close),
+            "caution": (self.caution_open,self.caution_close),
+            "tip": (self.tip_open, self.tip_close),
+            "important": (self.important_open, self.important_close),
+            "warning": (self.warning_open, self.warning_close),
+        }
+        self._admonition_stack = []
+
+    def _join_block(self, ls: Iterable[str]) -> str:
+        return "".join(ls)
+    def _join_inline(self, ls: Iterable[str]) -> str:
+        return "".join(ls)
+
+    def admonition_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        tag = token.meta['kind']
+        self._admonition_stack.append(tag)
+        return self._admonitions[tag][0](token, tokens, i)
+    def admonition_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        return self._admonitions[self._admonition_stack.pop()][1](token, tokens, i)
+
+    def render(self, tokens: Sequence[Token]) -> str:
+        def do_one(i: int, token: Token) -> str:
+            if token.type == "inline":
+                assert token.children is not None
+                return self.renderInline(token.children)
+            elif token.type in self.rules:
+                return self.rules[token.type](tokens[i], tokens, i)
+            else:
+                raise NotImplementedError("md token not supported yet", token)
+        return self._join_block(map(lambda arg: do_one(*arg), enumerate(tokens)))
+    def renderInline(self, tokens: Sequence[Token]) -> str:
+        def do_one(i: int, token: Token) -> str:
+            if token.type in self.rules:
+                return self.rules[token.type](tokens[i], tokens, i)
+            else:
+                raise NotImplementedError("md token not supported yet", token)
+        return self._join_inline(map(lambda arg: do_one(*arg), enumerate(tokens)))
+
+    def text(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def paragraph_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def paragraph_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def hardbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def softbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def code_inline(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def code_block(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def link_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def link_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def list_item_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def list_item_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def bullet_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def bullet_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def em_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def em_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def strong_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def strong_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def fence(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def blockquote_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def blockquote_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def note_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def note_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def caution_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def caution_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def important_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def important_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def tip_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def tip_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def warning_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def warning_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def dl_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def dl_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def dt_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def dt_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def dd_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def dd_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def myst_role(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def attr_span_begin(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def attr_span_end(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def heading_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def heading_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def ordered_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def ordered_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def example_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def example_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def example_title_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def example_title_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def image(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def figure_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def figure_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def figure_title_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def figure_title_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def table_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def table_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def thead_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def thead_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def tr_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def tr_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def th_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def th_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def tbody_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def tbody_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def td_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def td_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def footnote_ref(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def footnote_block_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def footnote_block_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def footnote_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def footnote_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+    def footnote_anchor(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported", token)
+
+def _is_escaped(src: str, pos: int) -> bool:
+    found = 0
+    while pos >= 0 and src[pos] == '\\':
+        found += 1
+        pos -= 1
+    return found % 2 == 1
+
+# the contents won't be split apart in the regex because spacing rules get messy here
+_ATTR_SPAN_PATTERN = re.compile(r"\{([^}]*)\}")
+# this one is for blocks with attrs. we want to use it with fullmatch() to deconstruct an info.
+_ATTR_BLOCK_PATTERN = re.compile(r"\s*\{([^}]*)\}\s*")
+
+def _parse_attrs(s: str) -> Optional[tuple[Optional[str], list[str]]]:
+    (id, classes) = (None, [])
+    for part in s.split():
+        if part.startswith('#'):
+            if id is not None:
+                return None # just bail on multiple ids instead of trying to recover
+            id = part[1:]
+        elif part.startswith('.'):
+            classes.append(part[1:])
+        else:
+            return None # no support for key=value attrs like in pandoc
+
+    return (id, classes)
+
+def _parse_blockattrs(info: str) -> Optional[tuple[AttrBlockKind, Optional[str], list[str]]]:
+    if (m := _ATTR_BLOCK_PATTERN.fullmatch(info)) is None:
+        return None
+    if (parsed_attrs := _parse_attrs(m[1])) is None:
+        return None
+    id, classes = parsed_attrs
+    # check that we actually support this kind of block, and that is adheres to
+    # whetever restrictions we want to enforce for that kind of block.
+    if len(classes) == 1 and classes[0] in get_args(AdmonitionKind):
+        # don't want to support ids for admonitions just yet
+        if id is not None:
+            return None
+        return ('admonition', id, classes)
+    if classes == ['example']:
+        return ('example', id, classes)
+    elif classes == ['figure']:
+        return ('figure', id, classes)
+    return None
+
+def _attr_span_plugin(md: markdown_it.MarkdownIt) -> None:
+    def attr_span(state: markdown_it.rules_inline.StateInline, silent: bool) -> bool:
+        if state.src[state.pos] != '[':
+            return False
+        if _is_escaped(state.src, state.pos - 1):
+            return False
+
+        # treat the inline span like a link label for simplicity.
+        label_begin = state.pos + 1
+        label_end = markdown_it.helpers.parseLinkLabel(state, state.pos)
+        input_end = state.posMax
+        if label_end < 0:
+            return False
+
+        # match id and classes in any combination
+        match = _ATTR_SPAN_PATTERN.match(state.src[label_end + 1 : ])
+        if not match:
+            return False
+
+        if not silent:
+            if (parsed_attrs := _parse_attrs(match[1])) is None:
+                return False
+            id, classes = parsed_attrs
+
+            token = state.push("attr_span_begin", "span", 1)
+            if id:
+                token.attrs['id'] = id
+            if classes:
+                token.attrs['class'] = " ".join(classes)
+
+            state.pos = label_begin
+            state.posMax = label_end
+            state.md.inline.tokenize(state)
+
+            state.push("attr_span_end", "span", -1)
+
+        state.pos = label_end + match.end() + 1
+        state.posMax = input_end
+        return True
+
+    md.inline.ruler.before("link", "attr_span", attr_span)
+
+def _inline_comment_plugin(md: markdown_it.MarkdownIt) -> None:
+    def inline_comment(state: markdown_it.rules_inline.StateInline, silent: bool) -> bool:
+        if state.src[state.pos : state.pos + 4] != '<!--':
+            return False
+        if _is_escaped(state.src, state.pos - 1):
+            return False
+        for i in range(state.pos + 4, state.posMax - 2):
+            if state.src[i : i + 3] == '-->': # -->
+                state.pos = i + 3
+                return True
+
+        return False
+
+    md.inline.ruler.after("autolink", "inline_comment", inline_comment)
+
+def _block_comment_plugin(md: markdown_it.MarkdownIt) -> None:
+    def block_comment(state: markdown_it.rules_block.StateBlock, startLine: int, endLine: int,
+                      silent: bool) -> bool:
+        pos = state.bMarks[startLine] + state.tShift[startLine]
+        posMax = state.eMarks[startLine]
+
+        if state.src[pos : pos + 4] != '<!--':
+            return False
+
+        nextLine = startLine
+        while nextLine < endLine:
+            pos = state.bMarks[nextLine] + state.tShift[nextLine]
+            posMax = state.eMarks[nextLine]
+
+            if state.src[posMax - 3 : posMax] == '-->':
+                state.line = nextLine + 1
+                return True
+
+            nextLine += 1
+
+        return False
+
+    md.block.ruler.after("code", "block_comment", block_comment)
+
+_HEADER_ID_RE = re.compile(r"\s*\{\s*\#([\w.-]+)\s*\}\s*$")
+
+def _heading_ids(md: markdown_it.MarkdownIt) -> None:
+    def heading_ids(state: markdown_it.rules_core.StateCore) -> None:
+        tokens = state.tokens
+        # this is purposely simple and doesn't support classes or other kinds of attributes.
+        for (i, token) in enumerate(tokens):
+            if token.type == 'heading_open':
+                children = tokens[i + 1].children
+                assert children is not None
+                if len(children) == 0 or children[-1].type != 'text':
+                    continue
+                if m := _HEADER_ID_RE.search(children[-1].content):
+                    tokens[i].attrs['id'] = m[1]
+                    children[-1].content = children[-1].content[:-len(m[0])].rstrip()
+
+    md.core.ruler.before("replacements", "heading_ids", heading_ids)
+
+def _footnote_ids(md: markdown_it.MarkdownIt) -> None:
+    """generate ids for footnotes, their refs, and their backlinks. the ids we
+       generate here are derived from the footnote label, making numeric footnote
+       labels invalid.
+    """
+    def generate_ids(tokens: Sequence[Token]) -> None:
+        for token in tokens:
+            if token.type == 'footnote_open':
+                if token.meta["label"][:1].isdigit():
+                    assert token.map
+                    raise RuntimeError(f"invalid footnote label in line {token.map[0] + 1}")
+                token.attrs['id'] = token.meta["label"]
+            elif token.type == 'footnote_anchor':
+                token.meta['target'] = f'{token.meta["label"]}.__back.{token.meta["subId"]}'
+            elif token.type == 'footnote_ref':
+                token.attrs['id'] = f'{token.meta["label"]}.__back.{token.meta["subId"]}'
+                token.meta['target'] = token.meta["label"]
+            elif token.type == 'inline':
+                assert token.children is not None
+                generate_ids(token.children)
+
+    def footnote_ids(state: markdown_it.rules_core.StateCore) -> None:
+        generate_ids(state.tokens)
+
+    md.core.ruler.after("footnote_tail", "footnote_ids", footnote_ids)
+
+def _compact_list_attr(md: markdown_it.MarkdownIt) -> None:
+    @dataclasses.dataclass
+    class Entry:
+        head: Token
+        end: int
+        compact: bool = True
+
+    def compact_list_attr(state: markdown_it.rules_core.StateCore) -> None:
+        # markdown-it signifies wide lists by setting the wrapper paragraphs
+        # of each item to hidden. this is not useful for our stylesheets, which
+        # signify this with a special css class on list elements instead.
+        stack = []
+        for token in state.tokens:
+            if token.type in [ 'bullet_list_open', 'ordered_list_open' ]:
+                stack.append(Entry(token, cast(int, token.attrs.get('start', 1))))
+            elif token.type in [ 'bullet_list_close', 'ordered_list_close' ]:
+                lst = stack.pop()
+                lst.head.meta['compact'] = lst.compact
+                if token.type == 'ordered_list_close':
+                    lst.head.meta['end'] = lst.end - 1
+            elif len(stack) > 0 and token.type == 'paragraph_open' and not token.hidden:
+                stack[-1].compact = False
+            elif token.type == 'list_item_open':
+                stack[-1].end += 1
+
+    md.core.ruler.push("compact_list_attr", compact_list_attr)
+
+def _block_attr(md: markdown_it.MarkdownIt) -> None:
+    def assert_never(value: NoReturn) -> NoReturn:
+        assert False
+
+    def block_attr(state: markdown_it.rules_core.StateCore) -> None:
+        stack = []
+        for token in state.tokens:
+            if token.type == 'container_blockattr_open':
+                if (parsed_attrs := _parse_blockattrs(token.info)) is None:
+                    # if we get here we've missed a possible case in the plugin validate function
+                    raise RuntimeError("this should be unreachable")
+                kind, id, classes = parsed_attrs
+                if kind == 'admonition':
+                    token.type = 'admonition_open'
+                    token.meta['kind'] = classes[0]
+                    stack.append('admonition_close')
+                elif kind == 'example':
+                    token.type = 'example_open'
+                    if id is not None:
+                        token.attrs['id'] = id
+                    stack.append('example_close')
+                elif kind == 'figure':
+                    token.type = 'figure_open'
+                    if id is not None:
+                        token.attrs['id'] = id
+                    stack.append('figure_close')
+                else:
+                    assert_never(kind)
+            elif token.type == 'container_blockattr_close':
+                token.type = stack.pop()
+
+    md.core.ruler.push("block_attr", block_attr)
+
+def _block_titles(block: str) -> Callable[[markdown_it.MarkdownIt], None]:
+    open, close = f'{block}_open', f'{block}_close'
+    title_open, title_close = f'{block}_title_open', f'{block}_title_close'
+
+    """
+    find title headings of blocks and stick them into meta for renderers, then
+    remove them from the token stream. also checks whether any block contains a
+    non-title heading since those would make toc generation extremely complicated.
+    """
+    def block_titles(state: markdown_it.rules_core.StateCore) -> None:
+        in_example = [False]
+        for i, token in enumerate(state.tokens):
+            if token.type == open:
+                if state.tokens[i + 1].type == 'heading_open':
+                    assert state.tokens[i + 3].type == 'heading_close'
+                    state.tokens[i + 1].type = title_open
+                    state.tokens[i + 3].type = title_close
+                else:
+                    assert token.map
+                    raise RuntimeError(f"found {block} without title in line {token.map[0] + 1}")
+                in_example.append(True)
+            elif token.type == close:
+                in_example.pop()
+            elif token.type == 'heading_open' and in_example[-1]:
+                assert token.map
+                raise RuntimeError(f"unexpected non-title heading in {block} in line {token.map[0] + 1}")
+
+    def do_add(md: markdown_it.MarkdownIt) -> None:
+        md.core.ruler.push(f"{block}_titles", block_titles)
+
+    return do_add
+
+TR = TypeVar('TR', bound='Renderer')
+
+class Converter(ABC, Generic[TR]):
+    # we explicitly disable markdown-it rendering support and use our own entirely.
+    # rendering is well separated from parsing and our renderers carry much more state than
+    # markdown-it easily acknowledges as 'good' (unless we used the untyped env args to
+    # shuttle that state around, which is very fragile)
+    class ForbiddenRenderer(markdown_it.renderer.RendererProtocol):
+        __output__ = "none"
+
+        def __init__(self, parser: Optional[markdown_it.MarkdownIt]):
+            pass
+
+        def render(self, tokens: Sequence[Token], options: OptionsDict,
+                   env: MutableMapping[str, Any]) -> str:
+            raise NotImplementedError("do not use Converter._md.renderer. 'tis a silly place")
+
+    _renderer: TR
+
+    def __init__(self) -> None:
+        self._md = markdown_it.MarkdownIt(
+            "commonmark",
+            {
+                'maxNesting': 100,   # default is 20
+                'html': False,       # not useful since we target many formats
+                'typographer': True, # required for smartquotes
+            },
+            renderer_cls=self.ForbiddenRenderer
+        )
+        self._md.enable('table')
+        self._md.use(
+            container_plugin,
+            name="blockattr",
+            validate=lambda name, *args: _parse_blockattrs(name),
+        )
+        self._md.use(deflist_plugin)
+        self._md.use(footnote_plugin)
+        self._md.use(myst_role_plugin)
+        self._md.use(_attr_span_plugin)
+        self._md.use(_inline_comment_plugin)
+        self._md.use(_block_comment_plugin)
+        self._md.use(_heading_ids)
+        self._md.use(_footnote_ids)
+        self._md.use(_compact_list_attr)
+        self._md.use(_block_attr)
+        self._md.use(_block_titles("example"))
+        self._md.use(_block_titles("figure"))
+        self._md.enable(["smartquotes", "replacements"])
+
+    def _parse(self, src: str) -> list[Token]:
+        return self._md.parse(src, {})
+
+    def _render(self, src: str) -> str:
+        tokens = self._parse(src)
+        return self._renderer.render(tokens)
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py
new file mode 100644
index 000000000000..9a00da567fa9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py
@@ -0,0 +1,681 @@
+from __future__ import annotations
+
+import argparse
+import html
+import json
+import xml.sax.saxutils as xml
+
+from abc import abstractmethod
+from collections.abc import Mapping, Sequence
+from markdown_it.token import Token
+from pathlib import Path
+from typing import Any, Generic, Optional
+from urllib.parse import quote
+
+
+from . import md
+from . import parallel
+from .asciidoc import AsciiDocRenderer, asciidoc_escape
+from .commonmark import CommonMarkRenderer
+from .docbook import DocBookRenderer, make_xml_id
+from .html import HTMLRenderer
+from .manpage import ManpageRenderer, man_escape
+from .manual_structure import XrefTarget
+from .md import Converter, md_escape, md_make_code
+from .types import OptionLoc, Option, RenderedOption
+
+def option_is(option: Option, key: str, typ: str) -> Optional[dict[str, str]]:
+    if key not in option:
+        return None
+    if type(option[key]) != dict:
+        return None
+    if option[key].get('_type') != typ: # type: ignore[union-attr]
+        return None
+    return option[key] # type: ignore[return-value]
+
+class BaseConverter(Converter[md.TR], Generic[md.TR]):
+    __option_block_separator__: str
+
+    _options: dict[str, RenderedOption]
+
+    def __init__(self, revision: str):
+        super().__init__()
+        self._options = {}
+        self._revision = revision
+
+    def _sorted_options(self) -> list[tuple[str, RenderedOption]]:
+        keys = list(self._options.keys())
+        keys.sort(key=lambda opt: [ (0 if p.startswith("enable") else 1 if p.startswith("package") else 2, p)
+                                    for p in self._options[opt].loc ])
+        return [ (k, self._options[k]) for k in keys ]
+
+    def _format_decl_def_loc(self, loc: OptionLoc) -> tuple[Optional[str], str]:
+        # locations can be either plain strings (specific to nixpkgs), or attrsets
+        # { name = "foo/bar.nix"; url = "https://github.com/....."; }
+        if isinstance(loc, str):
+            # Hyperlink the filename either to the NixOS github
+            # repository (if it’s a module and we have a revision number),
+            # or to the local filesystem.
+            if not loc.startswith('/'):
+                if self._revision == 'local':
+                    href = f"https://github.com/NixOS/nixpkgs/blob/master/{loc}"
+                else:
+                    href = f"https://github.com/NixOS/nixpkgs/blob/{self._revision}/{loc}"
+            else:
+                href = f"file://{loc}"
+            # Print the filename and make it user-friendly by replacing the
+            # /nix/store/<hash> prefix by the default location of nixos
+            # sources.
+            if not loc.startswith('/'):
+                name = f"<nixpkgs/{loc}>"
+            elif 'nixops' in loc and '/nix/' in loc:
+                name = f"<nixops/{loc[loc.find('/nix/') + 5:]}>"
+            else:
+                name = loc
+            return (href, name)
+        else:
+            return (loc['url'] if 'url' in loc else None, loc['name'])
+
+    @abstractmethod
+    def _decl_def_header(self, header: str) -> list[str]: raise NotImplementedError()
+
+    @abstractmethod
+    def _decl_def_entry(self, href: Optional[str], name: str) -> list[str]: raise NotImplementedError()
+
+    @abstractmethod
+    def _decl_def_footer(self) -> list[str]: raise NotImplementedError()
+
+    def _render_decl_def(self, header: str, locs: list[OptionLoc]) -> list[str]:
+        result = []
+        result += self._decl_def_header(header)
+        for loc in locs:
+            href, name = self._format_decl_def_loc(loc)
+            result += self._decl_def_entry(href, name)
+        result += self._decl_def_footer()
+        return result
+
+    def _render_code(self, option: Option, key: str) -> list[str]:
+        if lit := option_is(option, key, 'literalMD'):
+            return [ self._render(f"*{key.capitalize()}:*\n{lit['text']}") ]
+        elif lit := option_is(option, key, 'literalExpression'):
+            code = md_make_code(lit['text'])
+            return [ self._render(f"*{key.capitalize()}:*\n{code}") ]
+        elif key in option:
+            raise Exception(f"{key} has unrecognized type", option[key])
+        else:
+            return []
+
+    def _render_description(self, desc: str | dict[str, str]) -> list[str]:
+        if isinstance(desc, str):
+            return [ self._render(desc) ] if desc else []
+        elif isinstance(desc, dict) and desc.get('_type') == 'mdDoc':
+            return [ self._render(desc['text']) ] if desc['text'] else []
+        else:
+            raise Exception("description has unrecognized type", desc)
+
+    @abstractmethod
+    def _related_packages_header(self) -> list[str]: raise NotImplementedError()
+
+    def _convert_one(self, option: dict[str, Any]) -> list[str]:
+        blocks: list[list[str]] = []
+
+        if desc := option.get('description'):
+            blocks.append(self._render_description(desc))
+        if typ := option.get('type'):
+            ro = " *(read only)*" if option.get('readOnly', False) else ""
+            blocks.append([ self._render(f"*Type:*\n{md_escape(typ)}{ro}") ])
+
+        if option.get('default'):
+            blocks.append(self._render_code(option, 'default'))
+        if option.get('example'):
+            blocks.append(self._render_code(option, 'example'))
+
+        if related := option.get('relatedPackages'):
+            blocks.append(self._related_packages_header())
+            blocks[-1].append(self._render(related))
+        if decl := option.get('declarations'):
+            blocks.append(self._render_decl_def("Declared by", decl))
+        if defs := option.get('definitions'):
+            blocks.append(self._render_decl_def("Defined by", defs))
+
+        for part in [ p for p in blocks[0:-1] if p ]:
+            part.append(self.__option_block_separator__)
+
+        return [ l for part in blocks for l in part ]
+
+    # this could return a TState parameter, but that does not allow dependent types and
+    # will cause headaches when using BaseConverter as a type bound anywhere. Any is the
+    # next best thing we can use, and since this is internal it will be mostly safe.
+    @abstractmethod
+    def _parallel_render_prepare(self) -> Any: raise NotImplementedError()
+    # this should return python 3.11's Self instead to ensure that a prepare+finish
+    # round-trip ends up with an object of the same type. for now we'll use BaseConverter
+    # since it's good enough so far.
+    @classmethod
+    @abstractmethod
+    def _parallel_render_init_worker(cls, a: Any) -> BaseConverter[md.TR]: raise NotImplementedError()
+
+    def _render_option(self, name: str, option: dict[str, Any]) -> RenderedOption:
+        try:
+            return RenderedOption(option['loc'], self._convert_one(option))
+        except Exception as e:
+            raise Exception(f"Failed to render option {name}") from e
+
+    @classmethod
+    def _parallel_render_step(cls, s: BaseConverter[md.TR], a: Any) -> RenderedOption:
+        return s._render_option(*a)
+
+    def add_options(self, options: dict[str, Any]) -> None:
+        mapped = parallel.map(self._parallel_render_step, options.items(), 100,
+                              self._parallel_render_init_worker, self._parallel_render_prepare())
+        for (name, option) in zip(options.keys(), mapped):
+            self._options[name] = option
+
+    @abstractmethod
+    def finalize(self) -> str: raise NotImplementedError()
+
+class OptionDocsRestrictions:
+    def heading_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported in options doc", token)
+    def heading_close(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported in options doc", token)
+    def attr_span_begin(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported in options doc", token)
+    def example_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        raise RuntimeError("md token not supported in options doc", token)
+
+class OptionsDocBookRenderer(OptionDocsRestrictions, DocBookRenderer):
+    # TODO keep optionsDocBook diff small. remove soon if rendering is still good.
+    def ordered_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        token.meta['compact'] = False
+        return super().ordered_list_open(token, tokens, i)
+    def bullet_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        token.meta['compact'] = False
+        return super().bullet_list_open(token, tokens, i)
+
+class DocBookConverter(BaseConverter[OptionsDocBookRenderer]):
+    __option_block_separator__ = ""
+
+    def __init__(self, manpage_urls: Mapping[str, str],
+                 revision: str,
+                 document_type: str,
+                 varlist_id: str,
+                 id_prefix: str):
+        super().__init__(revision)
+        self._renderer = OptionsDocBookRenderer(manpage_urls)
+        self._document_type = document_type
+        self._varlist_id = varlist_id
+        self._id_prefix = id_prefix
+
+    def _parallel_render_prepare(self) -> Any:
+        return (self._renderer._manpage_urls, self._revision, self._document_type,
+                self._varlist_id, self._id_prefix)
+    @classmethod
+    def _parallel_render_init_worker(cls, a: Any) -> DocBookConverter:
+        return cls(*a)
+
+    def _related_packages_header(self) -> list[str]:
+        return [
+            "<para>",
+            "  <emphasis>Related packages:</emphasis>",
+            "</para>",
+        ]
+
+    def _decl_def_header(self, header: str) -> list[str]:
+        return [
+            f"<para><emphasis>{header}:</emphasis></para>",
+            "<simplelist>"
+        ]
+
+    def _decl_def_entry(self, href: Optional[str], name: str) -> list[str]:
+        if href is not None:
+            href = " xlink:href=" + xml.quoteattr(href)
+        return [
+            f"<member><filename{href}>",
+            xml.escape(name),
+            "</filename></member>"
+        ]
+
+    def _decl_def_footer(self) -> list[str]:
+        return [ "</simplelist>" ]
+
+    def finalize(self, *, fragment: bool = False) -> str:
+        result = []
+
+        if not fragment:
+            result.append('<?xml version="1.0" encoding="UTF-8"?>')
+        if self._document_type == 'appendix':
+            result += [
+                '<appendix xmlns="http://docbook.org/ns/docbook"',
+                '          xml:id="appendix-configuration-options">',
+                '  <title>Configuration Options</title>',
+            ]
+        result += [
+            '<variablelist xmlns:xlink="http://www.w3.org/1999/xlink"',
+            '               xmlns:nixos="tag:nixos.org"',
+            '               xmlns="http://docbook.org/ns/docbook"',
+            f'              xml:id="{self._varlist_id}">',
+        ]
+
+        for (name, opt) in self._sorted_options():
+            id = make_xml_id(self._id_prefix + name)
+            result += [
+                "<varlistentry>",
+                # NOTE adding extra spaces here introduces spaces into xref link expansions
+                (f"<term xlink:href={xml.quoteattr('#' + id)} xml:id={xml.quoteattr(id)}>" +
+                 f"<option>{xml.escape(name)}</option></term>"),
+                "<listitem>"
+            ]
+            result += opt.lines
+            result += [
+                "</listitem>",
+                "</varlistentry>"
+            ]
+
+        result.append("</variablelist>")
+        if self._document_type == 'appendix':
+            result.append("</appendix>")
+
+        return "\n".join(result)
+
+class OptionsManpageRenderer(OptionDocsRestrictions, ManpageRenderer):
+    pass
+
+class ManpageConverter(BaseConverter[OptionsManpageRenderer]):
+    __option_block_separator__ = ".sp"
+
+    _options_by_id: dict[str, str]
+    _links_in_last_description: Optional[list[str]] = None
+
+    def __init__(self, revision: str,
+                 header: list[str] | None,
+                 footer: list[str] | None,
+                 *,
+                 # only for parallel rendering
+                 _options_by_id: Optional[dict[str, str]] = None):
+        super().__init__(revision)
+        self._options_by_id = _options_by_id or {}
+        self._renderer = OptionsManpageRenderer({}, self._options_by_id)
+        self._header = header
+        self._footer = footer
+
+    def _parallel_render_prepare(self) -> Any:
+        return (
+            self._revision,
+            self._header,
+            self._footer,
+            { '_options_by_id': self._options_by_id },
+        )
+    @classmethod
+    def _parallel_render_init_worker(cls, a: Any) -> ManpageConverter:
+        return cls(a[0], a[1], a[2], **a[3])
+
+    def _render_option(self, name: str, option: dict[str, Any]) -> RenderedOption:
+        links = self._renderer.link_footnotes = []
+        result = super()._render_option(name, option)
+        self._renderer.link_footnotes = None
+        return result._replace(links=links)
+
+    def add_options(self, options: dict[str, Any]) -> None:
+        for (k, v) in options.items():
+            self._options_by_id[f'#{make_xml_id(f"opt-{k}")}'] = k
+        return super().add_options(options)
+
+    def _render_code(self, option: dict[str, Any], key: str) -> list[str]:
+        try:
+            self._renderer.inline_code_is_quoted = False
+            return super()._render_code(option, key)
+        finally:
+            self._renderer.inline_code_is_quoted = True
+
+    def _related_packages_header(self) -> list[str]:
+        return [
+            '\\fIRelated packages:\\fP',
+            '.sp',
+        ]
+
+    def _decl_def_header(self, header: str) -> list[str]:
+        return [
+            f'\\fI{man_escape(header)}:\\fP',
+        ]
+
+    def _decl_def_entry(self, href: Optional[str], name: str) -> list[str]:
+        return [
+            '.RS 4',
+            f'\\fB{man_escape(name)}\\fP',
+            '.RE'
+        ]
+
+    def _decl_def_footer(self) -> list[str]:
+        return []
+
+    def finalize(self) -> str:
+        result = []
+
+        if self._header is not None:
+            result += self._header
+        else:
+            result += [
+                r'''.TH "CONFIGURATION\&.NIX" "5" "01/01/1980" "NixOS" "NixOS Reference Pages"''',
+                r'''.\" disable hyphenation''',
+                r'''.nh''',
+                r'''.\" disable justification (adjust text to left margin only)''',
+                r'''.ad l''',
+                r'''.\" enable line breaks after slashes''',
+                r'''.cflags 4 /''',
+                r'''.SH "NAME"''',
+                self._render('{file}`configuration.nix` - NixOS system configuration specification'),
+                r'''.SH "DESCRIPTION"''',
+                r'''.PP''',
+                self._render('The file {file}`/etc/nixos/configuration.nix` contains the '
+                            'declarative specification of your NixOS system configuration. '
+                            'The command {command}`nixos-rebuild` takes this file and '
+                            'realises the system configuration specified therein.'),
+                r'''.SH "OPTIONS"''',
+                r'''.PP''',
+                self._render('You can use the following options in {file}`configuration.nix`.'),
+            ]
+
+        for (name, opt) in self._sorted_options():
+            result += [
+                ".PP",
+                f"\\fB{man_escape(name)}\\fR",
+                ".RS 4",
+            ]
+            result += opt.lines
+            if links := opt.links:
+                result.append(self.__option_block_separator__)
+                md_links = ""
+                for i in range(0, len(links)):
+                    md_links += "\n" if i > 0 else ""
+                    if links[i].startswith('#opt-'):
+                        md_links += f"{i+1}. see the {{option}}`{self._options_by_id[links[i]]}` option"
+                    else:
+                        md_links += f"{i+1}. " + md_escape(links[i])
+                result.append(self._render(md_links))
+
+            result.append(".RE")
+
+        if self._footer is not None:
+            result += self._footer
+        else:
+            result += [
+                r'''.SH "AUTHORS"''',
+                r'''.PP''',
+                r'''Eelco Dolstra and the Nixpkgs/NixOS contributors''',
+            ]
+
+        return "\n".join(result)
+
+class OptionsCommonMarkRenderer(OptionDocsRestrictions, CommonMarkRenderer):
+    pass
+
+class CommonMarkConverter(BaseConverter[OptionsCommonMarkRenderer]):
+    __option_block_separator__ = ""
+
+    def __init__(self, manpage_urls: Mapping[str, str], revision: str):
+        super().__init__(revision)
+        self._renderer = OptionsCommonMarkRenderer(manpage_urls)
+
+    def _parallel_render_prepare(self) -> Any:
+        return (self._renderer._manpage_urls, self._revision)
+    @classmethod
+    def _parallel_render_init_worker(cls, a: Any) -> CommonMarkConverter:
+        return cls(*a)
+
+    def _related_packages_header(self) -> list[str]:
+        return [ "*Related packages:*" ]
+
+    def _decl_def_header(self, header: str) -> list[str]:
+        return [ f"*{header}:*" ]
+
+    def _decl_def_entry(self, href: Optional[str], name: str) -> list[str]:
+        if href is not None:
+            return [ f" - [{md_escape(name)}]({href})" ]
+        return [ f" - {md_escape(name)}" ]
+
+    def _decl_def_footer(self) -> list[str]:
+        return []
+
+    def finalize(self) -> str:
+        result = []
+
+        for (name, opt) in self._sorted_options():
+            result.append(f"## {md_escape(name)}\n")
+            result += opt.lines
+            result.append("\n\n")
+
+        return "\n".join(result)
+
+class OptionsAsciiDocRenderer(OptionDocsRestrictions, AsciiDocRenderer):
+    pass
+
+class AsciiDocConverter(BaseConverter[OptionsAsciiDocRenderer]):
+    __option_block_separator__ = ""
+
+    def __init__(self, manpage_urls: Mapping[str, str], revision: str):
+        super().__init__(revision)
+        self._renderer = OptionsAsciiDocRenderer(manpage_urls)
+
+    def _parallel_render_prepare(self) -> Any:
+        return (self._renderer._manpage_urls, self._revision)
+    @classmethod
+    def _parallel_render_init_worker(cls, a: Any) -> AsciiDocConverter:
+        return cls(*a)
+
+    def _related_packages_header(self) -> list[str]:
+        return [ "__Related packages:__" ]
+
+    def _decl_def_header(self, header: str) -> list[str]:
+        return [ f"__{header}:__\n" ]
+
+    def _decl_def_entry(self, href: Optional[str], name: str) -> list[str]:
+        if href is not None:
+            return [ f"* link:{quote(href, safe='/:')}[{asciidoc_escape(name)}]" ]
+        return [ f"* {asciidoc_escape(name)}" ]
+
+    def _decl_def_footer(self) -> list[str]:
+        return []
+
+    def finalize(self) -> str:
+        result = []
+
+        for (name, opt) in self._sorted_options():
+            result.append(f"== {asciidoc_escape(name)}\n")
+            result += opt.lines
+            result.append("\n\n")
+
+        return "\n".join(result)
+
+class OptionsHTMLRenderer(OptionDocsRestrictions, HTMLRenderer):
+    # TODO docbook compat. must be removed together with the matching docbook handlers.
+    def ordered_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        token.meta['compact'] = False
+        return super().ordered_list_open(token, tokens, i)
+    def bullet_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        token.meta['compact'] = False
+        return super().bullet_list_open(token, tokens, i)
+    def fence(self, token: Token, tokens: Sequence[Token], i: int) -> str:
+        info = f" {html.escape(token.info, True)}" if token.info != "" else ""
+        return f'<pre><code class="programlisting{info}">{html.escape(token.content)}</code></pre>'
+
+class HTMLConverter(BaseConverter[OptionsHTMLRenderer]):
+    __option_block_separator__ = ""
+
+    def __init__(self, manpage_urls: Mapping[str, str], revision: str,
+                 varlist_id: str, id_prefix: str, xref_targets: Mapping[str, XrefTarget]):
+        super().__init__(revision)
+        self._xref_targets = xref_targets
+        self._varlist_id = varlist_id
+        self._id_prefix = id_prefix
+        self._renderer = OptionsHTMLRenderer(manpage_urls, self._xref_targets)
+
+    def _parallel_render_prepare(self) -> Any:
+        return (self._renderer._manpage_urls, self._revision,
+                self._varlist_id, self._id_prefix, self._xref_targets)
+    @classmethod
+    def _parallel_render_init_worker(cls, a: Any) -> HTMLConverter:
+        return cls(*a)
+
+    def _related_packages_header(self) -> list[str]:
+        return [
+            '<p><span class="emphasis"><em>Related packages:</em></span></p>',
+        ]
+
+    def _decl_def_header(self, header: str) -> list[str]:
+        return [
+            f'<p><span class="emphasis"><em>{header}:</em></span></p>',
+            '<table border="0" summary="Simple list" class="simplelist">'
+        ]
+
+    def _decl_def_entry(self, href: Optional[str], name: str) -> list[str]:
+        if href is not None:
+            href = f' href="{html.escape(href, True)}"'
+        return [
+            "<tr><td>",
+            f'<code class="filename"><a class="filename" {href} target="_top">',
+            f'{html.escape(name)}',
+            '</a></code>',
+            "</td></tr>"
+        ]
+
+    def _decl_def_footer(self) -> list[str]:
+        return [ "</table>" ]
+
+    def finalize(self) -> str:
+        result = []
+
+        result += [
+            '<div class="variablelist">',
+            f'<a id="{html.escape(self._varlist_id, True)}"></a>',
+            ' <dl class="variablelist">',
+        ]
+
+        for (name, opt) in self._sorted_options():
+            id = make_xml_id(self._id_prefix + name)
+            target = self._xref_targets[id]
+            result += [
+                '<dt>',
+                ' <span class="term">',
+                # docbook compat, these could be one tag
+                f' <a id="{html.escape(id, True)}"></a><a class="term" href="{target.href()}">'
+                # no spaces here (and string merging) for docbook output compat
+                f'<code class="option">{html.escape(name)}</code>',
+                '  </a>',
+                ' </span>',
+                '</dt>',
+                '<dd>',
+            ]
+            result += opt.lines
+            result += [
+                "</dd>",
+            ]
+
+        result += [
+            " </dl>",
+            "</div>"
+        ]
+
+        return "\n".join(result)
+
+def _build_cli_db(p: argparse.ArgumentParser) -> None:
+    p.add_argument('--manpage-urls', required=True)
+    p.add_argument('--revision', required=True)
+    p.add_argument('--document-type', required=True)
+    p.add_argument('--varlist-id', required=True)
+    p.add_argument('--id-prefix', required=True)
+    p.add_argument("infile")
+    p.add_argument("outfile")
+
+def _build_cli_manpage(p: argparse.ArgumentParser) -> None:
+    p.add_argument('--revision', required=True)
+    p.add_argument("--header", type=Path)
+    p.add_argument("--footer", type=Path)
+    p.add_argument("infile")
+    p.add_argument("outfile")
+
+def _build_cli_commonmark(p: argparse.ArgumentParser) -> None:
+    p.add_argument('--manpage-urls', required=True)
+    p.add_argument('--revision', required=True)
+    p.add_argument("infile")
+    p.add_argument("outfile")
+
+def _build_cli_asciidoc(p: argparse.ArgumentParser) -> None:
+    p.add_argument('--manpage-urls', required=True)
+    p.add_argument('--revision', required=True)
+    p.add_argument("infile")
+    p.add_argument("outfile")
+
+def _run_cli_db(args: argparse.Namespace) -> None:
+    with open(args.manpage_urls, 'r') as manpage_urls:
+        md = DocBookConverter(
+            json.load(manpage_urls),
+            revision = args.revision,
+            document_type = args.document_type,
+            varlist_id = args.varlist_id,
+            id_prefix = args.id_prefix)
+
+        with open(args.infile, 'r') as f:
+            md.add_options(json.load(f))
+        with open(args.outfile, 'w') as f:
+            f.write(md.finalize())
+
+def _run_cli_manpage(args: argparse.Namespace) -> None:
+    header = None
+    footer = None
+
+    if args.header is not None:
+        with args.header.open() as f:
+            header = f.read().splitlines()
+
+    if args.footer is not None:
+        with args.footer.open() as f:
+            footer = f.read().splitlines()
+
+    md = ManpageConverter(
+        revision = args.revision,
+        header = header,
+        footer = footer,
+    )
+
+    with open(args.infile, 'r') as f:
+        md.add_options(json.load(f))
+    with open(args.outfile, 'w') as f:
+        f.write(md.finalize())
+
+def _run_cli_commonmark(args: argparse.Namespace) -> None:
+    with open(args.manpage_urls, 'r') as manpage_urls:
+        md = CommonMarkConverter(json.load(manpage_urls), revision = args.revision)
+
+        with open(args.infile, 'r') as f:
+            md.add_options(json.load(f))
+        with open(args.outfile, 'w') as f:
+            f.write(md.finalize())
+
+def _run_cli_asciidoc(args: argparse.Namespace) -> None:
+    with open(args.manpage_urls, 'r') as manpage_urls:
+        md = AsciiDocConverter(json.load(manpage_urls), revision = args.revision)
+
+        with open(args.infile, 'r') as f:
+            md.add_options(json.load(f))
+        with open(args.outfile, 'w') as f:
+            f.write(md.finalize())
+
+def build_cli(p: argparse.ArgumentParser) -> None:
+    formats = p.add_subparsers(dest='format', required=True)
+    _build_cli_db(formats.add_parser('docbook'))
+    _build_cli_manpage(formats.add_parser('manpage'))
+    _build_cli_commonmark(formats.add_parser('commonmark'))
+    _build_cli_asciidoc(formats.add_parser('asciidoc'))
+
+def run_cli(args: argparse.Namespace) -> None:
+    if args.format == 'docbook':
+        _run_cli_db(args)
+    elif args.format == 'manpage':
+        _run_cli_manpage(args)
+    elif args.format == 'commonmark':
+        _run_cli_commonmark(args)
+    elif args.format == 'asciidoc':
+        _run_cli_asciidoc(args)
+    else:
+        raise RuntimeError('format not hooked up', args)
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/parallel.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/parallel.py
new file mode 100644
index 000000000000..ad58bf026406
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/parallel.py
@@ -0,0 +1,58 @@
+# this module only has to exist because cpython has a global interpreter lock
+# and markdown-it is pure python code. ideally we'd just use thread pools, but
+# the GIL prohibits this.
+
+import multiprocessing
+
+from typing import Any, Callable, Iterable, Optional, TypeVar
+
+R = TypeVar('R')
+S = TypeVar('S')
+T = TypeVar('T')
+A = TypeVar('A')
+
+pool_processes: Optional[int] = None
+
+# this thing is impossible to type because there's so much global state involved.
+# wrapping in a class to get access to Generic[] parameters is not sufficient
+# because mypy is too weak, and unnecessarily obscures how much global state is
+# needed in each worker to make this whole brouhaha work.
+_map_worker_fn: Any = None
+_map_worker_state_fn: Any = None
+_map_worker_state_arg: Any = None
+
+def _map_worker_init(*args: Any) -> None:
+    global _map_worker_fn, _map_worker_state_fn, _map_worker_state_arg
+    (_map_worker_fn, _map_worker_state_fn, _map_worker_state_arg) = args
+
+# NOTE: the state argument is never passed by any caller, we only use it as a localized
+# cache for the created state in lieu of another global. it is effectively a global though.
+def _map_worker_step(arg: Any, state: Any = []) -> Any:
+    global _map_worker_fn, _map_worker_state_fn, _map_worker_state_arg
+    # if a Pool initializer throws it'll just be retried, leading to endless loops.
+    # doing the proper initialization only on first use avoids this.
+    if not state:
+        state.append(_map_worker_state_fn(_map_worker_state_arg))
+    return _map_worker_fn(state[0], arg)
+
+def map(fn: Callable[[S, T], R], d: Iterable[T], chunk_size: int,
+        state_fn: Callable[[A], S], state_arg: A) -> list[R]:
+    """
+    `[ fn(state, i) for i in d ]`  where `state = state_fn(state_arg)`, but using multiprocessing
+    if `pool_processes` is not `None`. when using multiprocessing is used the state function will
+    be run once in ever worker process and `multiprocessing.Pool.imap` will be used.
+
+    **NOTE:** neither `state_fn` nor `fn` are allowed to mutate global state! doing so will cause
+    discrepancies if `pool_processes` is not None, since each worker will have its own copy.
+
+    **NOTE**: all data types that potentially cross a process boundary (so, all of them) must be
+    pickle-able. this excludes lambdas, bound functions, local functions, and a number of other
+    types depending on their exact internal structure. *theoretically* the pool constructor
+    can transfer non-pickleable data to worker processes, but this only works when using the
+    `fork` spawn method (and is thus not available on darwin or windows).
+    """
+    if pool_processes is None:
+        state = state_fn(state_arg)
+        return [ fn(state, i) for i in d ]
+    with multiprocessing.Pool(pool_processes, _map_worker_init, (fn, state_fn, state_arg)) as p:
+        return list(p.imap(_map_worker_step, d, chunk_size))
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/types.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/types.py
new file mode 100644
index 000000000000..1d586ca240f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/types.py
@@ -0,0 +1,14 @@
+from collections.abc import Sequence
+from typing import Callable, Optional, NamedTuple
+
+from markdown_it.token import Token
+
+OptionLoc = str | dict[str, str]
+Option = dict[str, str | dict[str, str] | list[OptionLoc]]
+
+class RenderedOption(NamedTuple):
+    loc: list[str]
+    lines: list[str]
+    links: Optional[list[str]] = None
+
+RenderFn = Callable[[Token, Sequence[Token], int], str]
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/utils.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/utils.py
new file mode 100644
index 000000000000..3377d1fa4fe1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/utils.py
@@ -0,0 +1,21 @@
+from typing import Any
+
+_frozen_classes: dict[type, type] = {}
+
+# make a derived class freezable (ie, disallow modifications).
+# we do this by changing the class of an instance at runtime when freeze()
+# is called, providing a derived class that is exactly the same except
+# for a __setattr__ that raises an error when called. this beats having
+# a field for frozenness and an unconditional __setattr__ that checks this
+# field because it does not insert anything into the class dict.
+class Freezeable:
+    def freeze(self) -> None:
+        cls = type(self)
+        if not (frozen := _frozen_classes.get(cls)):
+            def __setattr__(instance: Any, n: str, v: Any) -> None:
+                raise TypeError(f'{cls.__name__} is frozen')
+            frozen = type(cls.__name__, (cls,), {
+                '__setattr__': __setattr__,
+            })
+            _frozen_classes[cls] = frozen
+        self.__class__ = frozen
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/pyproject.toml b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/pyproject.toml
new file mode 100644
index 000000000000..d66643ef8421
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/pyproject.toml
@@ -0,0 +1,15 @@
+[project]
+name = "nixos-render-docs"
+version = "0.0"
+description = "Renderer for NixOS manual and option docs"
+classifiers = [
+    "Programming Language :: Python :: 3",
+    "License :: OSI Approved :: MIT License",
+    "Operating System :: OS Independent",
+]
+
+[project.scripts]
+nixos-render-docs = "nixos_render_docs:main"
+
+[build-system]
+requires = ["setuptools"]
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/sample_md.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/sample_md.py
new file mode 100644
index 000000000000..73a64fde8364
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/sample_md.py
@@ -0,0 +1,62 @@
+sample1 = """\
+:::: {.warning}
+foo
+::: {.note}
+nested
+:::
+::::
+
+[
+  multiline
+](link)
+
+{manpage}`man(1)` reference
+
+[some [nested]{#a} anchors]{#b}
+
+*emph* **strong** *nesting emph **and strong** and `code`*
+
+- wide bullet
+
+- list
+
+1. wide ordered
+
+2. list
+
+- narrow bullet
+- list
+
+1. narrow ordered
+2. list
+
+> quotes
+>> with *nesting*
+>>
+>>     nested code block
+>
+> - and lists
+> - ```
+>   containing code
+>   ```
+>
+> and more quote
+
+100. list starting at 100
+1. goes on
+
+deflist
+: > with a quote
+  > and stuff
+
+      code block
+
+  ```
+  fenced block
+  ```
+
+  text
+
+more stuff in same deflist
+: foo
+"""
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_asciidoc.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_asciidoc.py
new file mode 100644
index 000000000000..3cf5b208f392
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_asciidoc.py
@@ -0,0 +1,145 @@
+import nixos_render_docs as nrd
+
+from sample_md import sample1
+
+class Converter(nrd.md.Converter[nrd.asciidoc.AsciiDocRenderer]):
+    def __init__(self, manpage_urls: dict[str, str]):
+        super().__init__()
+        self._renderer = nrd.asciidoc.AsciiDocRenderer(manpage_urls)
+
+def test_lists() -> None:
+    c = Converter({})
+    # attaching to the nth ancestor list requires n newlines before the +
+    assert c._render("""\
+- a
+
+  b
+- c
+  - d
+    - e
+
+      1
+
+  f
+""") == """\
+[]
+* {empty}a
++
+b
+
+* {empty}c
++
+[options="compact"]
+** {empty}d
++
+[]
+** {empty}e
++
+1
+
+
++
+f
+"""
+
+def test_full() -> None:
+    c = Converter({ 'man(1)': 'http://example.org' })
+    assert c._render(sample1) == """\
+[WARNING]
+====
+foo
+
+[NOTE]
+=====
+nested
+=====
+
+====
+
+
+link:link[ multiline ]
+
+link:http://example.org[man(1)] reference
+
+[[b]]some [[a]]nested anchors
+
+__emph__ **strong** __nesting emph **and strong** and ``code``__
+
+[]
+* {empty}wide bullet
+
+* {empty}list
+
+
+[]
+. {empty}wide ordered
+
+. {empty}list
+
+
+[options="compact"]
+* {empty}narrow bullet
+
+* {empty}list
+
+
+[options="compact"]
+. {empty}narrow ordered
+
+. {empty}list
+
+
+[quote]
+====
+quotes
+
+[quote]
+=====
+with __nesting__
+
+----
+nested code block
+----
+=====
+
+[options="compact"]
+* {empty}and lists
+
+* {empty}
++
+----
+containing code
+----
+
+
+and more quote
+====
+
+[start=100,options="compact"]
+. {empty}list starting at 100
+
+. {empty}goes on
+
+
+[]
+
+deflist:: {empty}
++
+[quote]
+=====
+with a quote and stuff
+=====
++
+----
+code block
+----
++
+----
+fenced block
+----
++
+text
+
+
+more stuff in same deflist:: {empty}foo
+"""
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_auto_id_prefix.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_auto_id_prefix.py
new file mode 100644
index 000000000000..ab917a106443
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_auto_id_prefix.py
@@ -0,0 +1,92 @@
+from pathlib import Path
+
+from markdown_it.token import Token
+from nixos_render_docs.manual import HTMLConverter, HTMLParameters
+from nixos_render_docs.md import Converter
+
+auto_id_prefix="TEST_PREFIX"
+def set_prefix(token: Token, ident: str) -> None:
+    token.attrs["id"] = f"{auto_id_prefix}-{ident}"
+
+
+def test_auto_id_prefix_simple() -> None:
+    md = HTMLConverter("1.0.0", HTMLParameters("", [], [], 2, 2, 2, Path("")), {})
+
+    src = f"""
+# title
+
+## subtitle
+    """
+    tokens = Converter()._parse(src)
+    md._handle_headings(tokens, on_heading=set_prefix)
+
+    assert [
+        {**token.attrs, "tag": token.tag}
+        for token in tokens
+        if token.type == "heading_open"
+    ] == [
+        {"id": "TEST_PREFIX-1", "tag": "h1"},
+        {"id": "TEST_PREFIX-1.1", "tag": "h2"}
+    ]
+
+
+def test_auto_id_prefix_repeated() -> None:
+    md = HTMLConverter("1.0.0", HTMLParameters("", [], [], 2, 2, 2, Path("")), {})
+
+    src = f"""
+# title
+
+## subtitle
+
+# title2
+
+## subtitle2
+    """
+    tokens = Converter()._parse(src)
+    md._handle_headings(tokens, on_heading=set_prefix)
+
+    assert [
+        {**token.attrs, "tag": token.tag}
+        for token in tokens
+        if token.type == "heading_open"
+    ] == [
+        {"id": "TEST_PREFIX-1", "tag": "h1"},
+        {"id": "TEST_PREFIX-1.1", "tag": "h2"},
+        {"id": "TEST_PREFIX-2", "tag": "h1"},
+        {"id": "TEST_PREFIX-2.1", "tag": "h2"},
+    ]
+
+def test_auto_id_prefix_maximum_nested() -> None:
+    md = HTMLConverter("1.0.0", HTMLParameters("", [], [], 2, 2, 2, Path("")), {})
+
+    src = f"""
+# h1
+
+## h2
+
+### h3
+
+#### h4
+
+##### h5
+
+###### h6
+
+## h2.2
+    """
+    tokens = Converter()._parse(src)
+    md._handle_headings(tokens, on_heading=set_prefix)
+
+    assert [
+        {**token.attrs, "tag": token.tag}
+        for token in tokens
+        if token.type == "heading_open"
+    ] == [
+        {"id": "TEST_PREFIX-1", "tag": "h1"},
+        {"id": "TEST_PREFIX-1.1", "tag": "h2"},
+        {"id": "TEST_PREFIX-1.1.1", "tag": "h3"},
+        {"id": "TEST_PREFIX-1.1.1.1", "tag": "h4"},
+        {"id": "TEST_PREFIX-1.1.1.1.1", "tag": "h5"},
+        {"id": "TEST_PREFIX-1.1.1.1.1.1", "tag": "h6"},
+        {"id": "TEST_PREFIX-1.2", "tag": "h2"},
+    ]
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_commonmark.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_commonmark.py
new file mode 100644
index 000000000000..4ff0bc3095c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_commonmark.py
@@ -0,0 +1,99 @@
+import nixos_render_docs as nrd
+
+from sample_md import sample1
+
+from typing import Mapping
+
+
+class Converter(nrd.md.Converter[nrd.commonmark.CommonMarkRenderer]):
+    def __init__(self, manpage_urls: Mapping[str, str]):
+        super().__init__()
+        self._renderer = nrd.commonmark.CommonMarkRenderer(manpage_urls)
+
+# NOTE: in these tests we represent trailing spaces by ` ` and replace them with real space later,
+# since a number of editors will strip trailing whitespace on save and that would break the tests.
+
+def test_indented_fence() -> None:
+    c = Converter({})
+    s = """\
+>  - ```foo
+>    thing
+>      
+>    rest
+>    ```\
+""".replace(' ', ' ')
+    assert c._render(s) == s
+
+def test_full() -> None:
+    c = Converter({ 'man(1)': 'http://example.org' })
+    assert c._render(sample1) == """\
+**Warning:** foo
+
+**Note:** nested
+
+[
+multiline
+](link)
+
+[` man(1) `](http://example.org) reference
+
+some nested anchors
+
+*emph* **strong** *nesting emph **and strong** and ` code `*
+
+ - wide bullet
+
+ - list
+
+ 1. wide ordered
+
+ 2. list
+
+ - narrow bullet
+ - list
+
+ 1. narrow ordered
+ 2. list
+
+> quotes
+> 
+> > with *nesting*
+> > 
+> > ```
+> > nested code block
+> > ```
+> 
+>  - and lists
+>  - ```
+>    containing code
+>    ```
+> 
+> and more quote
+
+ 100. list starting at 100
+ 101. goes on
+
+ - *‌deflist‌*
+   
+   > with a quote
+   > and stuff
+   
+   ```
+   code block
+   ```
+   
+   ```
+   fenced block
+   ```
+   
+   text
+
+ - *‌more stuff in same deflist‌*
+   
+   foo""".replace(' ', ' ')
+
+def test_images() -> None:
+    c = Converter({})
+    assert c._render("![*alt text*](foo \"title \\\"quoted\\\" text\")") == (
+        "![*alt text*](foo \"title \\\"quoted\\\" text\")"
+    )
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_headings.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_headings.py
new file mode 100644
index 000000000000..8cbf3dabcea2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_headings.py
@@ -0,0 +1,104 @@
+import nixos_render_docs as nrd
+
+from markdown_it.token import Token
+
+class Converter(nrd.md.Converter[nrd.docbook.DocBookRenderer]):
+    # actual renderer doesn't matter, we're just parsing.
+    def __init__(self, manpage_urls: dict[str, str]) -> None:
+        super().__init__()
+        self._renderer = nrd.docbook.DocBookRenderer(manpage_urls)
+
+def test_heading_id_absent() -> None:
+    c = Converter({})
+    assert c._parse("# foo") == [
+        Token(type='heading_open', tag='h1', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='foo', markup='', info='', meta={}, block=False, hidden=False)
+              ],
+              content='foo', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='heading_close', tag='h1', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_heading_id_present() -> None:
+    c = Converter({})
+    assert c._parse("# foo {#foo}\n## bar { #bar}\n### bal { #bal}  ") == [
+        Token(type='heading_open', tag='h1', nesting=1, attrs={'id': 'foo'}, map=[0, 1], level=0,
+              children=None, content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='foo {#foo}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='foo', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='heading_close', tag='h1', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='heading_open', tag='h2', nesting=1, attrs={'id': 'bar'}, map=[1, 2], level=0,
+              children=None, content='', markup='##', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[1, 2], level=1,
+              content='bar { #bar}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='bar', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='heading_close', tag='h2', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='##', info='', meta={}, block=True, hidden=False),
+        Token(type='heading_open', tag='h3', nesting=1, attrs={'id': 'bal'}, map=[2, 3], level=0,
+              children=None, content='', markup='###', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[2, 3], level=1,
+              content='bal { #bal}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='bal', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='heading_close', tag='h3', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='###', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_heading_id_incomplete() -> None:
+    c = Converter({})
+    assert c._parse("# foo {#}") == [
+        Token(type='heading_open', tag='h1', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='foo {#}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='foo {#}', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='heading_close', tag='h1', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_heading_id_double() -> None:
+    c = Converter({})
+    assert c._parse("# foo {#a} {#b}") == [
+        Token(type='heading_open', tag='h1', nesting=1, attrs={'id': 'b'}, map=[0, 1], level=0,
+              children=None, content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='foo {#a} {#b}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='foo {#a}', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='heading_close', tag='h1', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_heading_id_suffixed() -> None:
+    c = Converter({})
+    assert c._parse("# foo {#a} s") == [
+        Token(type='heading_open', tag='h1', nesting=1, attrs={}, map=[0, 1], level=0,
+              children=None, content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='foo {#a} s', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='foo {#a} s', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='heading_close', tag='h1', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False)
+    ]
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_html.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_html.py
new file mode 100644
index 000000000000..fba0ce2679a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_html.py
@@ -0,0 +1,264 @@
+import nixos_render_docs as nrd
+import pytest
+import textwrap
+
+from sample_md import sample1
+
+class Renderer(nrd.html.HTMLRenderer):
+    def _pull_image(self, src: str) -> str:
+        return src
+
+class Converter(nrd.md.Converter[nrd.html.HTMLRenderer]):
+    def __init__(self, manpage_urls: dict[str, str], xrefs: dict[str, nrd.manual_structure.XrefTarget]):
+        super().__init__()
+        self._renderer = Renderer(manpage_urls, xrefs)
+
+def unpretty(s: str) -> str:
+    return "".join(map(str.strip, s.splitlines())).replace('â£', ' ').replace('↵', '\n')
+
+def test_lists_styles() -> None:
+    # nested lists rotate through a number of list style
+    c = Converter({}, {})
+    assert c._render("- - - - foo") == unpretty("""
+      <div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;">
+       <li class="listitem">
+        <div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;">
+         <li class="listitem">
+          <div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: square;">
+           <li class="listitem">
+            <div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;">
+             <li class="listitem"><p>foo</p></li>
+            </ul></div>
+           </li>
+          </ul></div>
+         </li>
+        </ul></div>
+       </li>
+      </ul></div>
+    """)
+    assert c._render("1. 1. 1. 1. 1. 1. foo") == unpretty("""
+      <div class="orderedlist"><ol class="orderedlist compact"  type="1">
+       <li class="listitem">
+        <div class="orderedlist"><ol class="orderedlist compact"  type="a">
+         <li class="listitem">
+          <div class="orderedlist"><ol class="orderedlist compact"  type="i">
+           <li class="listitem">
+            <div class="orderedlist"><ol class="orderedlist compact"  type="A">
+             <li class="listitem">
+              <div class="orderedlist"><ol class="orderedlist compact"  type="I">
+               <li class="listitem">
+                <div class="orderedlist"><ol class="orderedlist compact"  type="1">
+                 <li class="listitem"><p>foo</p></li>
+                </ol></div>
+               </li>
+              </ol></div>
+             </li>
+            </ol></div>
+           </li>
+          </ol></div>
+         </li>
+        </ol></div>
+       </li>
+      </ol></div>
+    """)
+
+def test_xrefs() -> None:
+    # nested lists rotate through a number of list style
+    c = Converter({}, {
+        'foo': nrd.manual_structure.XrefTarget('foo', '<hr/>', 'toc1', 'title1', 'index.html'),
+        'bar': nrd.manual_structure.XrefTarget('bar', '<br/>', 'toc2', 'title2', 'index.html', True),
+    })
+    assert c._render("[](#foo)") == '<p><a class="xref" href="index.html#foo" title="title1" ><hr/></a></p>'
+    assert c._render("[](#bar)") == '<p><a class="xref" href="index.html" title="title2" ><br/></a></p>'
+    with pytest.raises(nrd.html.UnresolvedXrefError) as exc:
+        c._render("[](#baz)")
+    assert exc.value.args[0] == 'bad local reference, id #baz not known'
+
+def test_images() -> None:
+    c = Converter({}, {})
+    assert c._render("![*alt text*](foo \"title text\")") == unpretty("""
+      <p>
+       <div class="mediaobject">
+        <img src="foo" alt="*alt text*" title="title text" />
+       </div>
+      </p>
+    """)
+
+def test_tables() -> None:
+    c = Converter({}, {})
+    assert c._render(textwrap.dedent("""
+      | d | l | m | r |
+      |---|:--|:-:|--:|
+      | a | b | c | d |
+    """)) == unpretty("""
+      <div class="informaltable">
+       <table class="informaltable" border="1">
+        <colgroup>
+         <col align="left" />
+         <col align="left" />
+         <col align="center" />
+         <col align="right" />
+        </colgroup>
+        <thead>
+         <tr>
+          <th align="left">d</th>
+          <th align="left">l</th>
+          <th align="center">m</th>
+          <th align="right">r</th>
+         </tr>
+        </thead>
+        <tbody>
+         <tr>
+          <td align="left">a</td>
+          <td align="left">b</td>
+          <td align="center">c</td>
+          <td align="right">d</td>
+         </tr>
+        </tbody>
+       </table>
+      </div>
+    """)
+
+def test_footnotes() -> None:
+    c = Converter({}, {
+        "bar": nrd.manual_structure.XrefTarget("bar", "", None, None, ""),
+        "bar.__back.0": nrd.manual_structure.XrefTarget("bar.__back.0", "", None, None, ""),
+        "bar.__back.1": nrd.manual_structure.XrefTarget("bar.__back.1", "", None, None, ""),
+    })
+    assert c._render(textwrap.dedent("""
+      foo [^bar] baz [^bar]
+
+      [^bar]: note
+    """)) == unpretty("""
+      <p>
+       foo <a href="#bar" class="footnote" id="bar.__back.0"><sup class="footnote">[1]</sup></a>â£
+       baz <a href="#bar" class="footnote" id="bar.__back.1"><sup class="footnote">[1]</sup></a>
+      </p>
+      <div class="footnotes">
+       <br />
+       <hr style="width:100; text-align:left;margin-left: 0" />
+       <div id="bar" class="footnote">
+         <p>
+          note<a href="#bar.__back.0" class="para"><sup class="para">[1]</sup></a>
+          <a href="#bar.__back.1" class="para"><sup class="para">[1]</sup></a>
+         </p>
+        </div>
+       </div>
+    """)
+
+def test_full() -> None:
+    c = Converter({ 'man(1)': 'http://example.org' }, {})
+    assert c._render(sample1) == unpretty("""
+        <div class="warning">
+         <h3 class="title">Warning</h3>
+         <p>foo</p>
+         <div class="note">
+          <h3 class="title">Note</h3>
+          <p>nested</p>
+         </div>
+        </div>
+        <p>
+         <a class="link" href="link"  target="_top">↵
+          multiline↵
+         </a>
+        </p>
+        <p>
+         <a class="link" href="http://example.org" target="_top">
+          <span class="citerefentry"><span class="refentrytitle">man</span>(1)</span>
+         </a> reference
+        </p>
+        <p><a id="b" />some <a id="a" />nested anchors</p>
+        <p>
+         <span class="emphasis"><em>emph</em></span>â£
+         <span class="strong"><strong>strong</strong></span>â£
+         <span class="emphasis"><em>nesting emph <span class="strong"><strong>and strong</strong></span>â£
+         and <code class="literal">code</code></em></span>
+        </p>
+        <div class="itemizedlist">
+         <ul class="itemizedlist " style="list-style-type: disc;">
+          <li class="listitem"><p>wide bullet</p></li>
+          <li class="listitem"><p>list</p></li>
+         </ul>
+        </div>
+        <div class="orderedlist">
+         <ol class="orderedlist "  type="1">
+          <li class="listitem"><p>wide ordered</p></li>
+          <li class="listitem"><p>list</p></li>
+         </ol>
+        </div>
+        <div class="itemizedlist">
+         <ul class="itemizedlist compact" style="list-style-type: disc;">
+          <li class="listitem"><p>narrow bullet</p></li>
+          <li class="listitem"><p>list</p></li>
+         </ul>
+        </div>
+        <div class="orderedlist">
+         <ol class="orderedlist compact"  type="1">
+          <li class="listitem"><p>narrow ordered</p></li>
+          <li class="listitem"><p>list</p></li>
+         </ol>
+        </div>
+        <div class="blockquote">
+         <blockquote class="blockquote">
+          <p>quotes</p>
+          <div class="blockquote">
+           <blockquote class="blockquote">
+            <p>with <span class="emphasis"><em>nesting</em></span></p>
+            <pre>
+             <code class="programlisting">
+              nested code block↵
+             </code>
+            </pre>
+           </blockquote>
+          </div>
+          <div class="itemizedlist">
+           <ul class="itemizedlist compact" style="list-style-type: disc;">
+            <li class="listitem"><p>and lists</p></li>
+            <li class="listitem">
+             <pre>
+              <code class="programlisting">
+               containing code↵
+              </code>
+             </pre>
+            </li>
+           </ul>
+          </div>
+          <p>and more quote</p>
+         </blockquote>
+        </div>
+        <div class="orderedlist">
+         <ol class="orderedlist compact" start="100" type="1">
+          <li class="listitem"><p>list starting at 100</p></li>
+          <li class="listitem"><p>goes on</p></li>
+         </ol>
+        </div>
+        <div class="variablelist">
+         <dl class="variablelist">
+          <dt><span class="term">deflist</span></dt>
+          <dd>
+           <div class="blockquote">
+            <blockquote class="blockquote">
+             <p>
+              with a quote↵
+              and stuff
+             </p>
+            </blockquote>
+           </div>
+           <pre>
+            <code class="programlisting">
+             code block↵
+            </code>
+           </pre>
+           <pre>
+            <code class="programlisting">
+             fenced block↵
+            </code>
+           </pre>
+           <p>text</p>
+          </dd>
+          <dt><span class="term">more stuff in same deflist</span></dt>
+          <dd>
+           <p>foo</p>
+          </dd>
+         </dl>
+        </div>""")
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_lists.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_lists.py
new file mode 100644
index 000000000000..f53442a96d4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_lists.py
@@ -0,0 +1,188 @@
+import nixos_render_docs as nrd
+import pytest
+
+from markdown_it.token import Token
+
+class Converter(nrd.md.Converter[nrd.docbook.DocBookRenderer]):
+    # actual renderer doesn't matter, we're just parsing.
+    def __init__(self, manpage_urls: dict[str, str]) -> None:
+        super().__init__()
+        self._renderer = nrd.docbook.DocBookRenderer(manpage_urls)
+
+@pytest.mark.parametrize("ordered", [True, False])
+def test_list_wide(ordered: bool) -> None:
+    t, tag, m, e1, e2, i1, i2 = (
+        ("ordered", "ol", ".", "1.", "2.", "1", "2") if ordered else ("bullet", "ul", "-", "-", "-", "", "")
+    )
+    c = Converter({})
+    meta = { 'end': int(e2[:-1]) } if ordered else {}
+    meta['compact'] = False
+    assert c._parse(f"{e1} a\n\n{e2} b") == [
+        Token(type=f'{t}_list_open', tag=tag, nesting=1, attrs={}, map=[0, 3], level=0,
+              children=None, content='', markup=m, info='', meta=meta, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[0, 2], level=1, children=None,
+              content='', markup=m, info=i1, meta={}, block=True, hidden=False),
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=2, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=3,
+              content='a', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='a', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=2, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=1, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[2, 3], level=1, children=None,
+              content='', markup=m, info=i2, meta={}, block=True, hidden=False),
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[2, 3], level=2, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[2, 3], level=3,
+              content='b', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='b', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=2, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=1, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False),
+        Token(type=f'{t}_list_close', tag=tag, nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False)
+    ]
+
+@pytest.mark.parametrize("ordered", [True, False])
+def test_list_narrow(ordered: bool) -> None:
+    t, tag, m, e1, e2, i1, i2 = (
+        ("ordered", "ol", ".", "1.", "2.", "1", "2") if ordered else ("bullet", "ul", "-", "-", "-", "", "")
+    )
+    c = Converter({})
+    meta = { 'end': int(e2[:-1]) } if ordered else {}
+    meta['compact'] = True
+    assert c._parse(f"{e1} a\n{e2} b") == [
+        Token(type=f'{t}_list_open', tag=tag, nesting=1, attrs={}, map=[0, 2], level=0,
+              children=None, content='', markup=m, info='', meta=meta, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[0, 1], level=1, children=None,
+              content='', markup=m, info=i1, meta={}, block=True, hidden=False),
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=2, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=3,
+              content='a', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='a', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=2, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=1, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[1, 2], level=1, children=None,
+              content='', markup=m, info=i2, meta={}, block=True, hidden=False),
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[1, 2], level=2, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[1, 2], level=3,
+              content='b', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='b', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=2, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=1, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False),
+        Token(type=f'{t}_list_close', tag=tag, nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse(f"{e1} - a\n{e2} b") == [
+        Token(type=f'{t}_list_open', tag=tag, nesting=1, attrs={}, map=[0, 2], level=0,
+              children=None, content='', markup=m, info='', meta=meta, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[0, 1], level=1, children=None,
+              content='', markup=m, info=i1, meta={}, block=True, hidden=False),
+        Token(type='bullet_list_open', tag='ul', nesting=1, attrs={}, map=[0, 1], level=2,
+              children=None, content='', markup='-', info='', meta={'compact': True}, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[0, 1], level=3, children=None,
+              content='', markup='-', info='', meta={}, block=True, hidden=False),
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=4, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=5,
+              content='a', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='a', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=4, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=3, children=None,
+              content='', markup='-', info='', meta={}, block=True, hidden=False),
+        Token(type='bullet_list_close', tag='ul', nesting=-1, attrs={}, map=None, level=2, children=None,
+              content='', markup='-', info='', meta={}, block=True, hidden=False),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=1, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[1, 2], level=1, children=None,
+              content='', markup=m, info=i2, meta={}, block=True, hidden=False),
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[1, 2], level=2, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[1, 2], level=3,
+              content='b', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='b', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=2, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=1, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False),
+        Token(type=f'{t}_list_close', tag=tag, nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse(f"{e1} - a\n{e2} - b") == [
+        Token(type=f'{t}_list_open', tag=tag, nesting=1, attrs={}, map=[0, 2], level=0,
+              children=None, content='', markup=m, info='', meta=meta, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[0, 1], level=1, children=None,
+              content='', markup=m, info=i1, meta={}, block=True, hidden=False),
+        Token(type='bullet_list_open', tag='ul', nesting=1, attrs={}, map=[0, 1], level=2,
+              children=None, content='', markup='-', info='', meta={'compact': True}, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[0, 1], level=3, children=None,
+              content='', markup='-', info='', meta={}, block=True, hidden=False),
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=4, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=5,
+              content='a', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='a', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=4, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=3, children=None,
+              content='', markup='-', info='', meta={}, block=True, hidden=False),
+        Token(type='bullet_list_close', tag='ul', nesting=-1, attrs={}, map=None, level=2, children=None,
+              content='', markup='-', info='', meta={}, block=True, hidden=False),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=1, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[1, 2], level=1, children=None,
+              content='', markup=m, info=i2, meta={}, block=True, hidden=False),
+        Token(type='bullet_list_open', tag='ul', nesting=1, attrs={}, map=[1, 2], level=2,
+              children=None, content='', markup='-', info='', meta={'compact': True}, block=True, hidden=False),
+        Token(type='list_item_open', tag='li', nesting=1, attrs={}, map=[1, 2], level=3, children=None,
+              content='', markup='-', info='', meta={}, block=True, hidden=False),
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[1, 2], level=4, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[1, 2], level=5,
+              content='b', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='b', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=4, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=True),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=3, children=None,
+              content='', markup='-', info='', meta={}, block=True, hidden=False),
+        Token(type='bullet_list_close', tag='ul', nesting=-1, attrs={}, map=None, level=2, children=None,
+              content='', markup='-', info='', meta={}, block=True, hidden=False),
+        Token(type='list_item_close', tag='li', nesting=-1, attrs={}, map=None, level=1, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False),
+        Token(type=f'{t}_list_close', tag=tag, nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup=m, info='', meta={}, block=True, hidden=False)
+    ]
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_manpage.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_manpage.py
new file mode 100644
index 000000000000..b6e4a94ef1c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_manpage.py
@@ -0,0 +1,169 @@
+import nixos_render_docs as nrd
+
+from sample_md import sample1
+
+from typing import Mapping
+
+
+class Converter(nrd.md.Converter[nrd.manpage.ManpageRenderer]):
+    def __init__(self, manpage_urls: Mapping[str, str], options_by_id: dict[str, str] = {}):
+        super().__init__()
+        self._renderer = nrd.manpage.ManpageRenderer(manpage_urls, options_by_id)
+
+def test_inline_code() -> None:
+    c = Converter({})
+    assert c._render("1  `x  a  x`  2") == "1 \\fR\\(oqx  a  x\\(cq\\fP 2"
+
+def test_fonts() -> None:
+    c = Converter({})
+    assert c._render("*a **b** c*") == "\\fIa \\fBb\\fI c\\fR"
+    assert c._render("*a [1 `2`](3) c*") == "\\fIa \\fB1 \\fR\\(oq2\\(cq\\fP\\fI c\\fR"
+
+def test_expand_link_targets() -> None:
+    c = Converter({}, { '#foo1': "bar", "#foo2": "bar" })
+    assert (c._render("[a](#foo1) [](#foo2) [b](#bar1) [](#bar2)") ==
+            "\\fBa\\fR \\fBbar\\fR \\fBb\\fR \\fB\\fR")
+
+def test_collect_links() -> None:
+    c = Converter({}, { '#foo': "bar" })
+    c._renderer.link_footnotes = []
+    assert c._render("[a](link1) [b](link2)") == "\\fBa\\fR[1]\\fR \\fBb\\fR[2]\\fR"
+    assert c._renderer.link_footnotes == ['link1', 'link2']
+
+def test_dedup_links() -> None:
+    c = Converter({}, { '#foo': "bar" })
+    c._renderer.link_footnotes = []
+    assert c._render("[a](link) [b](link)") == "\\fBa\\fR[1]\\fR \\fBb\\fR[1]\\fR"
+    assert c._renderer.link_footnotes == ['link']
+
+def test_full() -> None:
+    c = Converter({ 'man(1)': 'http://example.org' })
+    assert c._render(sample1) == """\
+.sp
+.RS 4
+\\fBWarning\\fP
+.br
+foo
+.sp
+.RS 4
+\\fBNote\\fP
+.br
+nested
+.RE
+.RE
+.sp
+\\fBmultiline\\fR
+.sp
+\\fBman\\fP\\fR(1)\\fP reference
+.sp
+some nested anchors
+.sp
+\\fIemph\\fR \\fBstrong\\fR \\fInesting emph \\fBand strong\\fI and \\fR\\(oqcode\\(cq\\fP\\fR
+.sp
+.RS 4
+\\h'-2'\\fB\\[u2022]\\fP\\h'1'\\c
+wide bullet
+.RE
+.sp
+.RS 4
+\\h'-2'\\fB\\[u2022]\\fP\\h'1'\\c
+list
+.RE
+.sp
+.RS 4
+\\h'-3'\\fB1\\&.\\fP\\h'1'\\c
+wide ordered
+.RE
+.sp
+.RS 4
+\\h'-3'\\fB2\\&.\\fP\\h'1'\\c
+list
+.RE
+.sp
+.RS 4
+\\h'-2'\\fB\\[u2022]\\fP\\h'1'\\c
+narrow bullet
+.RE
+.RS 4
+\\h'-2'\\fB\\[u2022]\\fP\\h'1'\\c
+list
+.RE
+.sp
+.RS 4
+\\h'-3'\\fB1\\&.\\fP\\h'1'\\c
+narrow ordered
+.RE
+.RS 4
+\\h'-3'\\fB2\\&.\\fP\\h'1'\\c
+list
+.RE
+.sp
+.RS 4
+\\h'-3'\\fI\\(lq\\(rq\\fP\\h'1'\\c
+quotes
+.sp
+.RS 4
+\\h'-3'\\fI\\(lq\\(rq\\fP\\h'1'\\c
+with \\fInesting\\fR
+.sp
+.RS 4
+.nf
+nested code block
+.fi
+.RE
+.RE
+.sp
+.RS 4
+\\h'-2'\\fB\\[u2022]\\fP\\h'1'\\c
+and lists
+.RE
+.RS 4
+\\h'-2'\\fB\\[u2022]\\fP\\h'1'\\c
+.sp
+.RS 4
+.nf
+containing code
+.fi
+.RE
+.RE
+.sp
+and more quote
+.RE
+.sp
+.RS 6
+\\h'-5'\\fB100\\&.\\fP\\h'1'\\c
+list starting at 100
+.RE
+.RS 6
+\\h'-5'\\fB101\\&.\\fP\\h'1'\\c
+goes on
+.RE
+.RS 4
+.PP
+deflist
+.RS 4
+.RS 4
+\\h'-3'\\fI\\(lq\\(rq\\fP\\h'1'\\c
+with a quote and stuff
+.RE
+.sp
+.RS 4
+.nf
+code block
+.fi
+.RE
+.sp
+.RS 4
+.nf
+fenced block
+.fi
+.RE
+.sp
+text
+.RE
+.PP
+more stuff in same deflist
+.RS 4
+foo
+.RE
+.RE"""
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_options.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_options.py
new file mode 100644
index 000000000000..fed0b1a17ac1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_options.py
@@ -0,0 +1,14 @@
+import nixos_render_docs
+
+from markdown_it.token import Token
+import pytest
+
+def test_option_headings() -> None:
+    c = nixos_render_docs.options.DocBookConverter({}, 'local', 'none', 'vars', 'opt-')
+    with pytest.raises(RuntimeError) as exc:
+        c._render("# foo")
+    assert exc.value.args[0] == 'md token not supported in options doc'
+    assert exc.value.args[1] == Token(
+        type='heading_open', tag='h1', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+        content='', markup='#', info='', meta={}, block=True, hidden=False
+    )
diff --git a/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_plugins.py b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_plugins.py
new file mode 100644
index 000000000000..26fdcea907dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-render-docs/src/tests/test_plugins.py
@@ -0,0 +1,528 @@
+import nixos_render_docs as nrd
+import pytest
+
+from markdown_it.token import Token
+
+class Converter(nrd.md.Converter[nrd.docbook.DocBookRenderer]):
+    # actual renderer doesn't matter, we're just parsing.
+    def __init__(self, manpage_urls: dict[str, str]) -> None:
+        super().__init__()
+        self._renderer = nrd.docbook.DocBookRenderer(manpage_urls)
+
+def test_attr_span_parsing() -> None:
+    c = Converter({})
+    assert c._parse("[]{#test}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1, content='[]{#test}',
+              markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='attr_span_begin', tag='span', nesting=1, attrs={'id': 'test'}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_end', tag='span', nesting=-1, attrs={}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0,
+              children=None, content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("[]{.test}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1, content='[]{.test}',
+              markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='attr_span_begin', tag='span', nesting=1, attrs={'class': 'test'}, map=None,
+                        level=0, children=None, content='', markup='', info='', meta={}, block=False,
+                        hidden=False),
+                  Token(type='attr_span_end', tag='span', nesting=-1, attrs={}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0,
+              children=None, content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("[]{.test1 .test2 #foo .test3 .test4}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='[]{.test1 .test2 #foo .test3 .test4}',
+              markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='attr_span_begin', tag='span', nesting=1,
+                        attrs={'class': 'test1 test2 test3 test4', 'id': 'foo'}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_end', tag='span', nesting=-1, attrs={}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0,
+              children=None, content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("[]{#a #a}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='[]{#a #a}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='[]{#a #a}', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("[]{foo}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='[]{foo}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='[]{foo}', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_attr_span_formatted() -> None:
+    c = Converter({})
+    assert c._parse("a[b c `d` ***e***]{#test}f") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0,
+              children=None, content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='a[b c `d` ***e***]{#test}f', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0,
+                        children=None, content='a', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_begin', tag='span', nesting=1, attrs={'id': 'test'}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=1, children=None,
+                        content='b c ', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='code_inline', tag='code', nesting=0, attrs={}, map=None, level=1,
+                        children=None, content='d', markup='`', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=1, children=None,
+                        content=' ', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='em_open', tag='em', nesting=1, attrs={}, map=None, level=1, children=None,
+                        content='', markup='*', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=2, children=None,
+                        content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='strong_open', tag='strong', nesting=1, attrs={}, map=None, level=2,
+                        children=None, content='', markup='**', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=3, children=None,
+                        content='e', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='strong_close', tag='strong', nesting=-1, attrs={}, map=None, level=2,
+                        children=None, content='', markup='**', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=2, children=None,
+                        content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='em_close', tag='em', nesting=-1, attrs={}, map=None, level=1, children=None,
+                        content='', markup='*', info='', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_end', tag='span', nesting=-1, attrs={}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='f', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_attr_span_in_heading() -> None:
+    c = Converter({})
+    # inline anchors in headers are allowed, but header attributes should be preferred
+    assert c._parse("# foo []{#bar} baz") == [
+        Token(type='heading_open', tag='h1', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='foo []{#bar} baz', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='foo ', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_begin', tag='span', nesting=1, attrs={'id': 'bar'}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                   Token(type='attr_span_end', tag='span', nesting=-1, attrs={}, map=None, level=0,
+                         children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content=' baz', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='heading_close', tag='h1', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_attr_span_on_links() -> None:
+    c = Converter({})
+    assert c._parse("[ [a](#bar) ]{#foo}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1, content='[ [a](#bar) ]{#foo}',
+              markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='attr_span_begin', tag='span', nesting=1, attrs={'id': 'foo'}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=1, children=None,
+                        content=' ', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='link_open', tag='a', nesting=1, attrs={'href': '#bar'}, map=None, level=1,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=2, children=None,
+                        content='a', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='link_close', tag='a', nesting=-1, attrs={}, map=None, level=1, children=None,
+                        content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=1, children=None,
+                        content=' ', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_end', tag='span', nesting=-1, attrs={}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_attr_span_nested() -> None:
+    # inline anchors may contain more anchors (even though this is a bit pointless)
+    c = Converter({})
+    assert c._parse("[ [a]{#bar} ]{#foo}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='[ [a]{#bar} ]{#foo}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='attr_span_begin', tag='span', nesting=1, attrs={'id': 'foo'}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=1, children=None,
+                        content=' ', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_begin', tag='span', nesting=1, attrs={'id': 'bar'}, map=None, level=1,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=2, children=None,
+                        content='a', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_end', tag='span', nesting=-1, attrs={}, map=None, level=1,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=1, children=None,
+                        content=' ', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_end', tag='span', nesting=-1, attrs={}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_attr_span_escaping() -> None:
+    c = Converter({})
+    assert c._parse("\\[a]{#bar}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='\\[a]{#bar}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='[a]{#bar}', markup='\\[', info='escape', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("\\\\[a]{#bar}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='\\\\[a]{#bar}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='\\', markup='\\\\', info='escape', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_begin', tag='span', nesting=1, attrs={'id': 'bar'}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=1, children=None,
+                        content='a', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='attr_span_end', tag='span', nesting=-1, attrs={}, map=None, level=0,
+                        children=None, content='', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("\\\\\\[a]{#bar}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='\\[a]{#bar}', markup='\\\\', info='escape', meta={}, block=False, hidden=False)
+              ],
+              content='\\\\\\[a]{#bar}', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_inline_comment_basic() -> None:
+    c = Converter({})
+    assert c._parse("a <!-- foo --><!----> b") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='a <!-- foo --><!----> b', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='a  b', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("a<!-- b -->") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='a<!-- b -->', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='a', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_inline_comment_does_not_nest_in_code() -> None:
+    c = Converter({})
+    assert c._parse("`a<!-- b -->c`") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='`a<!-- b -->c`', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='code_inline', tag='code', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='a<!-- b -->c', markup='`', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_inline_comment_does_not_nest_elsewhere() -> None:
+    c = Converter({})
+    assert c._parse("*a<!-- b -->c*") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='*a<!-- b -->c*', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='em_open', tag='em', nesting=1, attrs={}, map=None, level=0, children=None,
+                        content='', markup='*', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=1, children=None,
+                        content='ac', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='em_close', tag='em', nesting=-1, attrs={}, map=None, level=0, children=None,
+                        content='', markup='*', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_inline_comment_can_be_escaped() -> None:
+    c = Converter({})
+    assert c._parse("a\\<!-- b -->c") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='a\\<!-- b -->c', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='a<!-- b -->c', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("a\\\\<!-- b -->c") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='a\\c', markup='', info='', meta={}, block=False, hidden=False)
+              ],
+              content='a\\\\<!-- b -->c', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("a\\\\\\<!-- b -->c") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='a\\<!-- b -->c', markup='', info='', meta={}, block=False, hidden=False)
+              ],
+              content='a\\\\\\<!-- b -->c', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_block_comment() -> None:
+    c = Converter({})
+    assert c._parse("<!-- a -->") == []
+    assert c._parse("<!-- a\n-->") == []
+    assert c._parse("<!--\na\n-->") == []
+    assert c._parse("<!--\n\na\n\n-->") == []
+    assert c._parse("<!--\n\n```\n\n\n```\n\n-->") == []
+
+def test_heading_attributes() -> None:
+    c = Converter({})
+    assert c._parse("# foo *bar* {#hid}") == [
+        Token(type='heading_open', tag='h1', nesting=1, attrs={'id': 'hid'}, map=[0, 1], level=0,
+              children=None, content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='foo *bar* {#hid}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='foo ', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='em_open', tag='em', nesting=1, attrs={}, map=None, level=0, children=None,
+                        content='', markup='*', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=1, children=None,
+                        content='bar', markup='', info='', meta={}, block=False, hidden=False),
+                  Token(type='em_close', tag='em', nesting=-1, attrs={}, map=None, level=0, children=None,
+                        content='', markup='*', info='', meta={}, block=False, hidden=False),
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='heading_close', tag='h1', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("# foo--bar {#id-with--double-dashes}") == [
+        Token(type='heading_open', tag='h1', nesting=1, attrs={'id': 'id-with--double-dashes'}, map=[0, 1],
+              level=0, children=None, content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='foo--bar {#id-with--double-dashes}', markup='', info='', meta={}, block=True,
+              hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='foo–bar', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='heading_close', tag='h1', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_admonitions() -> None:
+    c = Converter({})
+    assert c._parse("::: {.note}") == [
+        Token(type='admonition_open', tag='div', nesting=1, attrs={}, map=[0, 1], level=0,
+              children=None, content='', markup=':::', info=' {.note}', meta={'kind': 'note'}, block=True,
+              hidden=False),
+        Token(type='admonition_close', tag='div', nesting=-1, attrs={}, map=None, level=0,
+              children=None, content='', markup=':::', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("::: {.caution}") == [
+        Token(type='admonition_open', tag='div', nesting=1, attrs={}, map=[0, 1], level=0,
+              children=None, content='', markup=':::', info=' {.caution}', meta={'kind': 'caution'},
+              block=True, hidden=False),
+        Token(type='admonition_close', tag='div', nesting=-1, attrs={}, map=None, level=0,
+              children=None, content='', markup=':::', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("::: {.tip}") == [
+        Token(type='admonition_open', tag='div', nesting=1, attrs={}, map=[0, 1], level=0,
+              children=None, content='', markup=':::', info=' {.tip}', meta={'kind': 'tip'}, block=True,
+              hidden=False),
+        Token(type='admonition_close', tag='div', nesting=-1, attrs={}, map=None, level=0,
+              children=None, content='', markup=':::', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("::: {.important}") == [
+        Token(type='admonition_open', tag='div', nesting=1, attrs={}, map=[0, 1], level=0,
+              children=None, content='', markup=':::', info=' {.important}', meta={'kind': 'important'},
+              block=True, hidden=False),
+        Token(type='admonition_close', tag='div', nesting=-1, attrs={}, map=None, level=0,
+              children=None, content='', markup=':::', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("::: {.warning}") == [
+        Token(type='admonition_open', tag='div', nesting=1, attrs={}, map=[0, 1], level=0,
+              children=None, content='', markup=':::', info=' {.warning}', meta={'kind': 'warning'},
+              block=True, hidden=False),
+        Token(type='admonition_close', tag='div', nesting=-1, attrs={}, map=None, level=0,
+              children=None, content='', markup=':::', info='', meta={}, block=True, hidden=False)
+    ]
+
+def test_example() -> None:
+    c = Converter({})
+    assert c._parse("::: {.example}\n# foo") == [
+        Token(type='example_open', tag='div', nesting=1, attrs={}, map=[0, 2], level=0, children=None,
+              content='', markup=':::', info=' {.example}', meta={}, block=True, hidden=False),
+        Token(type='example_title_open', tag='h1', nesting=1, attrs={}, map=[1, 2], level=1, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[1, 2], level=2,
+              content='foo', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='foo', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='example_title_close', tag='h1', nesting=-1, attrs={}, map=None, level=1, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='example_close', tag='div', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("::: {#eid .example}\n# foo") == [
+        Token(type='example_open', tag='div', nesting=1, attrs={'id': 'eid'}, map=[0, 2], level=0,
+              children=None, content='', markup=':::', info=' {#eid .example}', meta={}, block=True,
+              hidden=False),
+        Token(type='example_title_open', tag='h1', nesting=1, attrs={}, map=[1, 2], level=1, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[1, 2], level=2,
+              content='foo', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='foo', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='example_title_close', tag='h1', nesting=-1, attrs={}, map=None, level=1, children=None,
+              content='', markup='#', info='', meta={}, block=True, hidden=False),
+        Token(type='example_close', tag='div', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("::: {.example .note}") == [
+        Token(type='paragraph_open', tag='p', nesting=1, attrs={}, map=[0, 1], level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, attrs={}, map=[0, 1], level=1,
+              content='::: {.example .note}', markup='', info='', meta={}, block=True, hidden=False,
+              children=[
+                  Token(type='text', tag='', nesting=0, attrs={}, map=None, level=0, children=None,
+                        content='::: {.example .note}', markup='', info='', meta={}, block=False, hidden=False)
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, attrs={}, map=None, level=0, children=None,
+              content='', markup='', info='', meta={}, block=True, hidden=False)
+    ]
+    assert c._parse("::: {.example}\n### foo: `code`\nbar\n:::\nbaz") == [
+        Token(type='example_open', tag='div', nesting=1, map=[0, 3], markup=':::', info=' {.example}',
+              block=True),
+        Token(type='example_title_open', tag='h3', nesting=1, map=[1, 2], level=1, markup='###', block=True),
+        Token(type='inline', tag='', nesting=0, map=[1, 2], level=2, content='foo: `code`', block=True,
+              children=[
+                  Token(type='text', tag='', nesting=0, content='foo: '),
+                  Token(type='code_inline', tag='code', nesting=0, content='code', markup='`')
+              ]),
+        Token(type='example_title_close', tag='h3', nesting=-1, level=1, markup='###', block=True),
+        Token(type='paragraph_open', tag='p', nesting=1, map=[2, 3], level=1, block=True),
+        Token(type='inline', tag='', nesting=0, map=[2, 3], level=2, content='bar', block=True,
+              children=[
+                  Token(type='text', tag='', nesting=0, content='bar')
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, level=1, block=True),
+        Token(type='example_close', tag='div', nesting=-1, markup=':::', block=True),
+        Token(type='paragraph_open', tag='p', nesting=1, map=[4, 5], block=True),
+        Token(type='inline', tag='', nesting=0, map=[4, 5], level=1, content='baz', block=True,
+              children=[
+                  Token(type='text', tag='', nesting=0, content='baz')
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, block=True)
+    ]
+
+    with pytest.raises(RuntimeError) as exc:
+        c._parse("::: {.example}\n### foo\n### bar\n:::")
+    assert exc.value.args[0] == 'unexpected non-title heading in example in line 3'
+
+def test_footnotes() -> None:
+    c = Converter({})
+    assert c._parse("text [^foo]\n\n[^foo]: bar") == [
+        Token(type='paragraph_open', tag='p', nesting=1, map=[0, 1], block=True),
+        Token(type='inline', tag='', nesting=0, map=[0, 1], level=1, content='text [^foo]', block=True,
+              children=[
+                  Token(type='text', tag='', nesting=0, content='text '),
+                  Token(type='footnote_ref', tag='', nesting=0, attrs={'id': 'foo.__back.0'},
+                        meta={'id': 0, 'subId': 0, 'label': 'foo', 'target': 'foo'})
+              ]),
+        Token(type='paragraph_close', tag='p', nesting=-1, block=True),
+        Token(type='footnote_block_open', tag='', nesting=1),
+        Token(type='footnote_open', tag='', nesting=1, attrs={'id': 'foo'}, meta={'id': 0, 'label': 'foo'}),
+        Token(type='paragraph_open', tag='p', nesting=1, map=[2, 3], level=1, block=True, hidden=False),
+        Token(type='inline', tag='', nesting=0, map=[2, 3], level=2, content='bar', block=True,
+              children=[
+                  Token(type='text', tag='', nesting=0, content='bar')
+              ]),
+        Token(type='footnote_anchor', tag='', nesting=0,
+              meta={'id': 0, 'label': 'foo', 'subId': 0, 'target': 'foo.__back.0'}),
+        Token(type='paragraph_close', tag='p', nesting=-1, level=1, block=True),
+        Token(type='footnote_close', tag='', nesting=-1),
+        Token(type='footnote_block_close', tag='', nesting=-1),
+    ]
diff --git a/nixpkgs/pkgs/tools/nix/nixpkgs-fmt/default.nix b/nixpkgs/pkgs/tools/nix/nixpkgs-fmt/default.nix
new file mode 100644
index 000000000000..b7f73c7eb795
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixpkgs-fmt/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+rustPlatform.buildRustPackage rec {
+  pname = "nixpkgs-fmt";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-6Ut4/ix915EoaPCewoG3KhKBA+OaggpDqnx2nvKxEpQ=";
+  };
+
+  cargoSha256 = "sha256-yIwCBm46sgrpTt45uCyyS7M6V0ReGUXVu7tyrjdNqeQ=";
+
+  meta = with lib; {
+    description = "Nix code formatter for nixpkgs";
+    homepage = "https://nix-community.github.io/nixpkgs-fmt";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zimbatm ];
+    mainProgram = "nixpkgs-fmt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixpkgs-hammering/default.nix b/nixpkgs/pkgs/tools/nix/nixpkgs-hammering/default.nix
new file mode 100644
index 000000000000..b5f1e51dd232
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixpkgs-hammering/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+, makeWrapper
+, python3
+, nix
+}:
+
+let
+  version = "unstable-2023-11-06";
+
+  src = fetchFromGitHub {
+    owner = "jtojnar";
+    repo = "nixpkgs-hammering";
+    rev = "8e33fc1e7b3b311ce3ba9c5c8c9e7cf89041b893";
+    hash = "sha256-D9c6EZMHy0aldzMxj4Ivw1YXNuG6MzyoEQlehEcxMBI=";
+  };
+
+  meta = with lib; {
+    description = "A set of nit-picky rules that aim to point out and explain common mistakes in nixpkgs package pull requests";
+    homepage = "https://github.com/jtojnar/nixpkgs-hammering";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+
+  rust-checks = rustPlatform.buildRustPackage {
+    pname = "nixpkgs-hammering-rust-checks";
+    inherit version src meta;
+    sourceRoot = "${src.name}/rust-checks";
+    cargoHash = "sha256-GIheha/AYH0uD61ck6TcpDz1gh1o5UxL/ojeZ/kHI8E=";
+  };
+in
+
+stdenv.mkDerivation {
+  pname = "nixpkgs-hammering";
+
+  inherit version src;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    runHook preInstall
+
+    AST_CHECK_NAMES=$(find ${rust-checks}/bin -maxdepth 1 -type f -printf "%f:")
+
+    install -Dt $out/bin tools/nixpkgs-hammer
+    wrapProgram $out/bin/nixpkgs-hammer \
+      --prefix PATH : ${lib.makeBinPath [ nix rust-checks ]} \
+      --set AST_CHECK_NAMES ''${AST_CHECK_NAMES%:}
+
+    cp -r lib overlays $out
+
+    runHook postInstall
+  '';
+
+  meta = meta // {
+    mainProgram = "nixpkgs-hammer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixpkgs-lint/default.nix b/nixpkgs/pkgs/tools/nix/nixpkgs-lint/default.nix
new file mode 100644
index 000000000000..16e7582d3a92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixpkgs-lint/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nixpkgs-lint";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixpkgs-lint";
+    rev = "v${version}";
+    hash = "sha256-o1VWM46lEJ9m49s/ekZWf8DkCeeWm4J3PQtt8tVXHbg=";
+  };
+
+  cargoHash = "sha256-LWtBO0Ai5cOtnfZElBrHZ7sDdp3ddfcCRdTA/EEDPfE=";
+
+  meta = with lib; {
+    description = "A fast semantic linter for Nix using tree-sitter";
+    homepage = "https://github.com/nix-community/nixpkgs-lint";
+    changelog = "https://github.com/nix-community/nixpkgs-lint/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ artturin figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/npins/default.nix b/nixpkgs/pkgs/tools/nix/npins/default.nix
new file mode 100644
index 000000000000..e83617da91e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/npins/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, makeWrapper
+, stdenv
+, darwin
+, callPackage
+
+  # runtime dependencies
+, nix # for nix-prefetch-url
+, nix-prefetch-git
+, git # for git ls-remote
+}:
+
+let
+  runtimePath = lib.makeBinPath [ nix nix-prefetch-git git ];
+  sources = (lib.importJSON ./sources.json).pins;
+in rustPlatform.buildRustPackage rec {
+  pname = "npins";
+  version = src.version;
+  src = passthru.mkSource sources.npins;
+
+  cargoSha256 = "sha256-eySVpmCVWBJfyAkTQv+LqojWMO/3r6kBYP1a4z+FYHY=";
+
+  buildInputs = lib.optional stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Security ]);
+  nativeBuildInputs = [ makeWrapper ];
+
+  # (Almost) all tests require internet
+  doCheck = false;
+
+  postFixup = ''
+    wrapProgram $out/bin/npins --prefix PATH : "${runtimePath}"
+  '';
+
+  meta = with lib; {
+    description = "Simple and convenient dependency pinning for Nix";
+    homepage = "https://github.com/andir/npins";
+    license = licenses.eupl12;
+    maintainers = with maintainers; [ piegames ];
+  };
+
+  passthru.mkSource = callPackage ./source.nix {};
+}
diff --git a/nixpkgs/pkgs/tools/nix/npins/source.nix b/nixpkgs/pkgs/tools/nix/npins/source.nix
new file mode 100644
index 000000000000..49046d8dd3c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/npins/source.nix
@@ -0,0 +1,57 @@
+# Not part of the public API – for use within nixpkgs only
+#
+# Usage:
+# ```nix
+# let
+#   sources = lib.importJSON ./sources.json;
+# in mkMyDerivation rec {
+#   version = src.version; # This obviously only works for releases
+#   src = pkgs.npins.mkSource sources.mySource;
+# }
+# ```
+
+{ fetchgit
+, fetchzip
+, fetchurl
+}:
+let
+  mkSource = spec:
+    assert spec ? type; let
+      path =
+        if spec.type == "Git" then mkGitSource spec
+        else if spec.type == "GitRelease" then mkGitSource spec
+        else if spec.type == "PyPi" then mkPyPiSource spec
+        else if spec.type == "Channel" then mkChannelSource spec
+        else throw "Unknown source type ${spec.type}";
+    in
+    spec // { outPath = path; };
+
+  mkGitSource = { repository, revision, url ? null, hash, ... }:
+    assert repository ? type;
+    # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository
+    # In the latter case, there we will always be an url to the tarball
+    if url != null then
+      (fetchzip {
+        inherit url;
+        sha256 = hash;
+        extension = "tar";
+      })
+    else assert repository.type == "Git"; fetchgit {
+      url = repository.url;
+      rev = revision;
+    };
+
+  mkPyPiSource = { url, hash, ... }:
+    fetchurl {
+      inherit url;
+      sha256 = hash;
+    };
+
+  mkChannelSource = { url, hash, ... }:
+    fetchzip {
+      inherit url;
+      sha256 = hash;
+      extension = "tar";
+    };
+in
+  mkSource
diff --git a/nixpkgs/pkgs/tools/nix/npins/sources.json b/nixpkgs/pkgs/tools/nix/npins/sources.json
new file mode 100644
index 000000000000..fbeb040fa74c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/npins/sources.json
@@ -0,0 +1,19 @@
+{
+  "pins": {
+    "npins": {
+      "type": "GitRelease",
+      "repository": {
+        "type": "GitHub",
+        "owner": "andir",
+        "repo": "npins"
+      },
+      "pre_releases": false,
+      "version_upper_bound": null,
+      "version": "0.2.2",
+      "revision": "a443c58d9c7b818aaea3c47821d7c561faef66ec",
+      "url": "https://api.github.com/repos/andir/npins/tarball/0.2.2",
+      "hash": "0rv6m8c9lmzkb76b682w7ax6jy8ls4l4y17wjx98jk64b74qspca"
+    }
+  },
+  "version": 3
+}
diff --git a/nixpkgs/pkgs/tools/nix/rnix-hashes/default.nix b/nixpkgs/pkgs/tools/nix/rnix-hashes/default.nix
new file mode 100644
index 000000000000..4aebb35bc935
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/rnix-hashes/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchFromGitHub, fetchpatch }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rnix-hashes";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "numtide";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "SzHyG5cEjaaPjTkn8puht6snjHMl8DtorOGDjxakJfA=";
+  };
+
+  patches = [
+    # fix test failure
+    (fetchpatch {
+      url = "https://github.com/numtide/rnix-hashes/commit/62ab96cfd1efeade7d98efd9829eae8677bac9cc.patch";
+      sha256 = "sha256-oE2fBt20FmO2cEUGivu2mKo3z6rbhVLXSF8SRvhibFs=";
+    })
+  ];
+
+  cargoSha256 = "sha256-p6W9NtOKzVViyFq5SQvnIsik7S3mqUqxI/05OiC+P+Q=";
+
+  meta = with lib; {
+    description = "Nix Hash Converter";
+    homepage = "https://github.com/numtide/rnix-hashes";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ rizary SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/statix/default.nix b/nixpkgs/pkgs/tools/nix/statix/default.nix
new file mode 100644
index 000000000000..8b2b26420ecc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/statix/default.nix
@@ -0,0 +1,31 @@
+{ lib, rustPlatform, fetchFromGitHub, withJson ? true, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "statix";
+  # also update version of the vim plugin in
+  # pkgs/applications/editors/vim/plugins/overrides.nix
+  # the version can be found in flake.nix of the source code
+  version = "0.5.8";
+
+  src = fetchFromGitHub {
+    owner = "nerdypepper";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-bMs3XMiGP6sXCqdjna4xoV6CANOIWuISSzCaL5LYY4c=";
+  };
+
+  cargoSha256 = "sha256-QF7P0CWlKfBzVQC//eKhf/u1qV9AfLIJDxWDDWzMG8g=";
+
+  buildFeatures = lib.optional withJson "json";
+
+  # tests are failing on darwin
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Lints and suggestions for the nix programming language";
+    homepage = "https://github.com/nerdypepper/statix";
+    license = licenses.mit;
+    mainProgram = "statix";
+    maintainers = with maintainers; [ figsoda nerdypepper ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/web-devmode.nix b/nixpkgs/pkgs/tools/nix/web-devmode.nix
new file mode 100644
index 000000000000..6ebdc31118f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/web-devmode.nix
@@ -0,0 +1,117 @@
+{
+  pkgs,
+  # arguments to `nix-build`, e.g. `"foo.nix -A bar"`
+  buildArgs,
+  # what path to open a browser at
+  open,
+}: let
+  inherit (pkgs) lib;
+
+  error_page = pkgs.writeShellScriptBin "error_page" ''
+    echo "<!DOCTYPE html>
+    <html>
+    <head>
+      <style>
+        @media (prefers-color-scheme: dark) {
+          :root { filter: invert(100%); }
+        }
+      </style>
+    </head>
+    <body><pre>$1</pre></body>
+    </html>"
+  '';
+
+  # The following would have been simpler:
+  # 1. serve from `$serve`
+  # 2. pass each build a `--out-link $serve/result`
+  # But that way live-server does not seem to detect changes and therefore no
+  # auto-reloads occur.
+  # Instead, we copy the contents of each build to the `$serve` directory.
+  # Using rsync here, instead of `cp`, to get as close to an atomic
+  # directory copy operation as possible. `--delay-updates` should
+  # also go towards that.
+  build_and_copy = pkgs.writeShellScriptBin "build_and_copy" ''
+    set -euxo pipefail
+
+    set +e
+    stderr=$(2>&1 nix-build --out-link $out_link ${buildArgs})
+    exit_status=$?
+    set -e
+
+    if [ $exit_status -eq 0 ];
+    then
+      # setting permissions to be able to clean up
+      ${lib.getBin pkgs.rsync}/bin/rsync \
+        --recursive \
+        --chmod=u=rwX \
+        --delete-before \
+        --delay-updates \
+        $out_link/ \
+        $serve/
+    else
+      set +x
+      ${lib.getBin error_page}/bin/error_page "$stderr" > $error_page_absolute
+      set -x
+
+      ${lib.getBin pkgs.findutils}/bin/find $serve \
+        -type f \
+        ! -name $error_page_relative \
+        -delete
+    fi
+  '';
+
+  # https://watchexec.github.io/
+  watcher = pkgs.writeShellScriptBin "watcher" ''
+    set -euxo pipefail
+
+    ${lib.getBin pkgs.watchexec}/bin/watchexec \
+      --shell=none \
+      --restart \
+      --print-events \
+      ${lib.getBin build_and_copy}/bin/build_and_copy
+  '';
+
+  # A Rust alternative to live-server exists, but it was not in nixpkgs.
+  # `--no-css-inject`: without this it seems that only CSS is auto-reloaded.
+  # https://www.npmjs.com/package/live-server
+  server = pkgs.writeShellScriptBin "server" ''
+    set -euxo pipefail
+
+    ${lib.getBin pkgs.nodePackages_latest.live-server}/bin/live-server \
+      --host=127.0.0.1 \
+      --verbose \
+      --no-css-inject \
+      --entry-file=$error_page_relative \
+      --open=${open} \
+      $serve
+  '';
+
+  devmode =
+    pkgs.writeShellScriptBin "devmode"
+    ''
+      set -euxo pipefail
+
+      function handle_exit {
+        rm -rf "$tmpdir"
+      }
+
+      tmpdir=$(mktemp -d)
+      trap handle_exit EXIT
+
+      export out_link="$tmpdir/result"
+      export serve="$tmpdir/serve"
+      mkdir $serve
+      export error_page_relative=error.html
+      export error_page_absolute=$serve/$error_page_relative
+      ${lib.getBin error_page}/bin/error_page "building …" > $error_page_absolute
+
+      ${lib.getBin pkgs.parallel}/bin/parallel \
+        --will-cite \
+        --line-buffer \
+        --tagstr '{/}' \
+        ::: \
+        "${lib.getBin watcher}/bin/watcher" \
+        "${lib.getBin server}/bin/server"
+    '';
+in
+  devmode
diff --git a/nixpkgs/pkgs/tools/nix/zon2nix/default.nix b/nixpkgs/pkgs/tools/nix/zon2nix/default.nix
new file mode 100644
index 000000000000..78b7d601906c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/zon2nix/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, zig_0_11
+, nix
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zon2nix";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "zon2nix";
+    rev = "v${version}";
+    hash = "sha256-pS0D+wdebtpNaGpDee9aBwEKTDvNU56VXer9uzULXcM=";
+  };
+
+  nativeBuildInputs = [
+    zig_0_11.hook
+  ];
+
+  zigBuildFlags = [
+    "-Dnix=${lib.getExe nix}"
+  ];
+
+  zigCheckFlags = [
+    "-Dnix=${lib.getExe nix}"
+  ];
+
+  meta = with lib; {
+    description = "Convert the dependencies in `build.zig.zon` to a Nix expression";
+    homepage = "https://github.com/nix-community/zon2nix";
+    changelog = "https://github.com/nix-community/zon2nix/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+    inherit (zig_0_11.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/akku/default.nix b/nixpkgs/pkgs/tools/package-management/akku/default.nix
new file mode 100644
index 000000000000..68ee94d3f94e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/akku/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitLab, autoreconfHook, pkg-config, guile, curl, substituteAll }:
+
+stdenv.mkDerivation rec {
+  pname = "akku";
+  version = "1.1.0";
+
+  src = fetchFromGitLab {
+    owner = "akkuscm";
+    repo = "akku";
+    rev = "v${version}";
+    sha256 = "1pi18aamg1fd6f9ynfl7zx92052xzf0zwmhi2pwcwjs1kbah19f5";
+  };
+
+  patches = [
+    # substitute libcurl path
+    (substituteAll {
+      src = ./hardcode-libcurl.patch;
+      libcurl = "${curl.out}/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary}";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ guile ];
+
+  # Use a dummy package index to boostrap Akku
+  preBuild = ''
+    touch bootstrap.db
+  '';
+
+  makeFlags = [ "GUILE_AUTO_COMPILE=0" ];
+
+  meta = with lib; {
+    homepage = "https://akkuscm.org/";
+    description = "Language package manager for Scheme";
+    changelog = "https://gitlab.com/akkuscm/akku/-/raw/v${version}/NEWS.md";
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ marsam ];
+    mainProgram = "akku";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/akku/hardcode-libcurl.patch b/nixpkgs/pkgs/tools/package-management/akku/hardcode-libcurl.patch
new file mode 100644
index 000000000000..7c5b8b50c320
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/akku/hardcode-libcurl.patch
@@ -0,0 +1,18 @@
+--- old/private/http.scm
++++ new/private/http.scm
+@@ -101,14 +101,7 @@
+                  ;; shouldn't, but it's an old issue.
+                  (log/error "Could not load libcurl. Please install the curl development(!) package.")
+                  (exit 1)))
+-          (case (os-name)
+-            ((darwin) (set! libcurl (open-shared-object "libcurl.dylib")))
+-            ((msys) (set! libcurl (open-shared-object "msys-curl-4")))
+-            (else
+-             (guard (exn
+-                     (else
+-                      (set! libcurl (open-shared-object "libcurl.so.3"))))
+-               (set! libcurl (open-shared-object "libcurl.so.4"))))))
++          (set! libcurl (open-shared-object "@libcurl@")))
+         (letrec ()
+           (define %curl_global_init (foreign-procedure libcurl int curl_global_init (long)))
+           (call %curl_global_init #b11)))
diff --git a/nixpkgs/pkgs/tools/package-management/apk-tools/default.nix b/nixpkgs/pkgs/tools/package-management/apk-tools/default.nix
new file mode 100644
index 000000000000..4a460adfd0ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/apk-tools/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitLab, pkg-config, scdoc, openssl, zlib
+, luaSupport ? stdenv.hostPlatform == stdenv.buildPlatform, lua
+}:
+
+stdenv.mkDerivation rec {
+  pname = "apk-tools";
+  version = "2.14.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.alpinelinux.org";
+    owner = "alpine";
+    repo = "apk-tools";
+    rev = "v${version}";
+    sha256 = "sha256-NbADp017wL6h+Owg/GISidoXEq0seWaa98/Hyyq6pYc=";
+  };
+
+  nativeBuildInputs = [ pkg-config scdoc ]
+    ++ lib.optionals luaSupport [ lua lua.pkgs.lua-zlib ];
+  buildInputs = [ openssl zlib ] ++ lib.optional luaSupport lua;
+  strictDeps = true;
+
+  makeFlags = [
+    "CROSS_COMPILE=${stdenv.cc.targetPrefix}"
+    "SBINDIR=$(out)/bin"
+    "LIBDIR=$(out)/lib"
+    "LUA=${if luaSupport then "lua" else "no"}"
+    "LUA_LIBDIR=$(out)/lib/lua/${lib.versions.majorMinor lua.version}"
+    "MANDIR=$(out)/share/man"
+    "DOCDIR=$(out)/share/doc/apk"
+    "INCLUDEDIR=$(out)/include"
+    "PKGCONFIGDIR=$(out)/lib/pkgconfig"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-Wno-error=unused-result"
+    "-Wno-error=deprecated-declarations"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://gitlab.alpinelinux.org/alpine/apk-tools";
+    description = "Alpine Package Keeper";
+    maintainers = with maintainers; [ qyliss ];
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    mainProgram = "apk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/apkg/default.nix b/nixpkgs/pkgs/tools/package-management/apkg/default.nix
new file mode 100644
index 000000000000..18b52f0bcdb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/apkg/default.nix
@@ -0,0 +1,52 @@
+{ lib, fetchFromGitLab, python3Packages
+, gitMinimal, rpm, dpkg, fakeroot
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "apkg";
+  version = "0.4.1";
+  format = "pyproject";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.nic.cz";
+    owner = "packaging";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "x7UYkqkF1XJ3OMfQpIQ4+27KI0dLvL42Wms5xQTY/H4=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    # copy&pasted requirements.txt (almost exactly)
+    beautifulsoup4   # upstream version detection
+    blessed          # terminal colors
+    build            # apkg distribution
+    cached-property  # for python <= 3.7; but pip complains even with 3.8
+    click            # nice CLI framework
+    distro           # current distro detection
+    jinja2           # templating
+    packaging        # version parsing
+    requests         # HTTP for humansâ„¢
+    toml             # config files
+  ];
+
+  nativeBuildInputs = with python3Packages; [ hatchling ];
+
+  makeWrapperArgs = [ # deps for `srcpkg` operation for other distros; could be optional
+    "--prefix" "PATH" ":" (lib.makeBinPath [ gitMinimal rpm dpkg fakeroot ])
+  ];
+
+  nativeCheckInputs = with python3Packages; [ pytest dunamai ];
+  checkPhase = ''
+    runHook preCheck
+    py.test # inspiration: .gitlab-ci.yml
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Upstream packaging automation tool";
+    homepage = "https://pkg.labs.nic.cz/pages/apkg";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.vcunat /* close to upstream */ ];
+    mainProgram = "apkg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/appimage-run/default.nix b/nixpkgs/pkgs/tools/package-management/appimage-run/default.nix
new file mode 100644
index 000000000000..286fd9d7ff68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/appimage-run/default.nix
@@ -0,0 +1,29 @@
+{ appimageTools, buildFHSEnv, makeDesktopItem, extraPkgs ? pkgs: [], appimage-run-tests ? null }:
+
+let
+  name = "appimage-run";
+
+  fhsArgs = appimageTools.defaultFhsEnvArgs;
+
+  desktopItem = makeDesktopItem {
+    inherit name;
+    exec = name;
+    desktopName = name;
+    genericName = "AppImage runner";
+    noDisplay = true;
+    mimeTypes = ["application/vnd.appimage" "application/x-iso9660-appimage"];
+    categories = ["PackageManager" "Utility"];
+  };
+in buildFHSEnv (fhsArgs // {
+  inherit name;
+
+  targetPkgs = pkgs: [ appimageTools.appimage-exec ]
+    ++ fhsArgs.targetPkgs pkgs ++ extraPkgs pkgs;
+  runScript = "appimage-exec.sh";
+
+  extraInstallCommands = ''
+    cp --recursive "${desktopItem}/share" "$out/"
+  '';
+
+  passthru.tests.appimage-run = appimage-run-tests;
+})
diff --git a/nixpkgs/pkgs/tools/package-management/appimage-run/test.nix b/nixpkgs/pkgs/tools/package-management/appimage-run/test.nix
new file mode 100644
index 000000000000..8a6e27095123
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/appimage-run/test.nix
@@ -0,0 +1,37 @@
+{ runCommand, fetchurl, appimage-run, glibcLocales, file, xdg-utils }:
+let
+  # any AppImage usable on cli, really
+  sample-appImage = fetchurl {
+    url = "https://github.com/AppImage/AppImageKit/releases/download/12/appimagetool-x86_64.AppImage";
+    sha256 =  "04ws94q71bwskmhizhwmaf41ma4wabvfgjgkagr8wf3vakgv866r";
+  };
+  owdtest = fetchurl {
+    url = "https://github.com/NixOS/nixpkgs/files/10099048/owdtest.AppImage.gz";
+    sha256 = "sha256-EEp9dxz/+l5XkNaVBFgv5v64sizQILnljRAzwXv/yV8=";
+  };
+in
+  runCommand "appimage-run-tests" {
+    buildInputs = [ appimage-run glibcLocales file xdg-utils ];
+    meta.platforms = [ "x86_64-linux" ];
+  }
+  ''
+    export HOME=$(mktemp -d)
+    set -x
+
+    # regression test for #101137, must come first
+    LANG=fr_FR appimage-run ${sample-appImage} --list ${sample-appImage}
+
+    # regression test for #108426
+    cp ${sample-appImage} foo.appImage
+    LANG=fr_FR appimage-run ${sample-appImage} --list foo.appImage
+    cp ${owdtest} owdtest.AppImage.gz
+    gunzip owdtest.AppImage.gz
+    appimage-run owdtest.AppImage
+
+    # Verify desktop entry
+    XDG_DATA_DIRS="${appimage-run}/share"
+    [[ "$(xdg-mime query default application/vnd.appimage)" == '${appimage-run.name}.desktop' ]]
+
+    set +x
+    touch $out
+  ''
diff --git a/nixpkgs/pkgs/tools/package-management/appimagekit/default.nix b/nixpkgs/pkgs/tools/package-management/appimagekit/default.nix
new file mode 100644
index 000000000000..d11cd1612758
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/appimagekit/default.nix
@@ -0,0 +1,131 @@
+{ lib, stdenv, fetchFromGitHub
+, pkg-config, cmake, autoconf, automake, libtool, makeWrapper
+, wget, xxd, desktop-file-utils, file
+, gnupg, glib, zlib, cairo, openssl, fuse, xz, squashfuse, inotify-tools, libarchive
+, squashfsTools
+, gtest
+}:
+
+let
+
+  appimagekit_src = fetchFromGitHub {
+    owner = "AppImage";
+    repo = "AppImageKit";
+    rev = "8bbf694455d00f48d835f56afaa1dabcd9178ba6";
+    sha256 = "sha256-pqg+joomC5CI9WdKP/h/XKPsruMgZEaIOjPLOqnNPZw=";
+    fetchSubmodules = true;
+  };
+
+  # squashfuse adapted to nix from cmake experession in "${appimagekit_src}/lib/libappimage/cmake/dependencies.cmake"
+  appimagekit_squashfuse = squashfuse.overrideAttrs rec {
+    pname = "squashfuse";
+    version = "unstable-2016-10-09";
+
+    src = fetchFromGitHub {
+      owner = "vasi";
+      repo  = pname;
+      rev = "1f980303b89c779eabfd0a0fdd36d6a7a311bf92";
+      sha256 = "sha256-BZd1+7sRYZHthULKk3RlgMIy4uCUei45GbSEiZxLPFM=";
+    };
+
+    patches = [
+      "${appimagekit_src}/lib/libappimage/src/patches/squashfuse.patch"
+      "${appimagekit_src}/lib/libappimage/src/patches/squashfuse_dlopen.patch"
+    ];
+
+    postPatch = ''
+      cp -v ${appimagekit_src}/lib/libappimage/src/patches/squashfuse_dlopen.[hc] .
+    '';
+
+    # Workaround build failure on -fno-common toolchains:
+    #   ld: libsquashfuse_ll.a(libfuseprivate_la-fuseprivate.o):(.bss+0x8):
+    #     multiple definition of `have_libloaded'; runtime.4.o:(.bss.have_libloaded+0x0): first defined here
+    env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+    preConfigure = ''
+      sed -i "/PKG_CHECK_MODULES.*/,/,:./d" configure
+      sed -i "s/typedef off_t sqfs_off_t/typedef int64_t sqfs_off_t/g" common.h
+    '';
+
+    configureFlags = [
+      "--disable-demo" "--disable-high-level" "--without-lzo" "--without-lz4"
+    ];
+
+    postConfigure = ''
+      sed -i "s|XZ_LIBS = -llzma |XZ_LIBS = -Bstatic -llzma/|g" Makefile
+    '';
+
+    # only static libs and header files
+    installPhase = ''
+      mkdir -p $out/lib $out/include
+      cp -v ./.libs/*.a $out/lib
+      cp -v ./*.h $out/include
+    '';
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "appimagekit";
+  version = "unstable-2020-12-31";
+
+  src = appimagekit_src;
+
+  patches = [ ./nix.patch ];
+
+  postPatch = ''
+    patchShebangs src/embed-magic-bytes-in-file.sh
+  '';
+
+  nativeBuildInputs = [
+    pkg-config cmake autoconf automake libtool wget xxd
+    desktop-file-utils makeWrapper
+  ];
+
+  buildInputs = [
+    glib zlib cairo openssl fuse xz inotify-tools
+    libarchive squashfsTools appimagekit_squashfuse
+  ];
+
+  preConfigure = ''
+    export HOME=$(pwd)
+  '';
+
+  cmakeFlags = [
+    "-DUSE_SYSTEM_XZ=ON"
+    "-DUSE_SYSTEM_SQUASHFUSE=ON"
+    "-DSQUASHFUSE=${appimagekit_squashfuse}"
+    "-DUSE_SYSTEM_LIBARCHIVE=ON"
+    "-DUSE_SYSTEM_GTEST=ON"
+    "-DUSE_SYSTEM_MKSQUASHFS=ON"
+    "-DTOOLS_PREFIX=${stdenv.cc.targetPrefix}"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/lib/appimagekit
+    cp "${squashfsTools}/bin/mksquashfs" "$out/lib/appimagekit/"
+    cp "${desktop-file-utils}/bin/desktop-file-validate" "$out/bin"
+
+    wrapProgram "$out/bin/appimagetool" \
+      --prefix PATH : "${lib.makeBinPath [ file gnupg ]}" \
+      --unset SOURCE_DATE_EPOCH
+  '';
+
+  nativeCheckInputs = [ gtest ];
+
+  # for debugging
+  passthru = {
+    squashfuse = appimagekit_squashfuse;
+  };
+
+  meta = with lib; {
+    description = "A tool to package desktop applications as AppImages";
+    longDescription = ''
+      AppImageKit is an implementation of the AppImage format that
+      provides tools such as appimagetool and appimaged for handling
+      AppImages.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ taeer ];
+    homepage = src.meta.homepage;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/appimagekit/nix.patch b/nixpkgs/pkgs/tools/package-management/appimagekit/nix.patch
new file mode 100644
index 000000000000..f03922cb5ca4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/appimagekit/nix.patch
@@ -0,0 +1,82 @@
+Submodule lib/libappimage contains modified content
+diff --git a/lib/libappimage/cmake/dependencies.cmake b/lib/libappimage/cmake/dependencies.cmake
+index 8d96484..c7b17a1 100644
+--- a/lib/libappimage/cmake/dependencies.cmake
++++ b/lib/libappimage/cmake/dependencies.cmake
+@@ -91,9 +91,18 @@ if(NOT USE_SYSTEM_SQUASHFUSE)
+         INCLUDE_DIRS "<SOURCE_DIR>"
+     )
+ else()
+-    message(STATUS "Using system squashfuse")
++    message(STATUS "Using system squashfsfuse from ${SQUASHFUSE}")
+
+-    import_pkgconfig_target(TARGET_NAME libsquashfuse PKGCONFIG_TARGET squashfuse)
++    add_library(libsquashfuse INTERFACE IMPORTED GLOBAL)
++
++    set(squashfuse_INCLUDE_DIRS "${SQUASHFUSE}/include")
++    set(squashfuse_LIBRARIES "${SQUASHFUSE}/lib/libsquashfuse.a;${SQUASHFUSE}/lib/libsquashfuse_ll.a;${SQUASHFUSE}/lib/libfuseprivate.a")
++
++    set_property(
++      TARGET libsquashfuse
++      PROPERTY INTERFACE_LINK_LIBRARIES ${squashfuse_LIBRARIES}
++    )
++    include_directories(${squashfuse_INCLUDE_DIRS})
+ endif()
+
+
+diff --git a/src/appimagetool.c b/src/appimagetool.c
+index 6b37419..23425e7 100644
+--- a/src/appimagetool.c
++++ b/src/appimagetool.c
+@@ -38,7 +38,7 @@
+ #include <argp.h>
+
+ #include <fcntl.h>
+-#include "squashfuse.h"
++#include <squashfuse.h>
+
+ #include <sys/types.h>
+ #include <sys/stat.h>
+@@ -96,7 +96,7 @@ static void die(const char *msg) {
+ }
+
+ /* Function that prints the contents of a squashfs file
+-* using libsquashfuse (#include "squashfuse.h") */
++* using libsquashfuse (#include <squashfuse.h>) */
+ int sfs_ls(char* image) {
+     sqfs_err err = SQFS_OK;
+     sqfs_traverse trv;
+diff --git a/src/appimagetoolnoglib.c b/src/appimagetoolnoglib.c
+index f900e76..ffa87f8 100644
+--- a/src/appimagetoolnoglib.c
++++ b/src/appimagetoolnoglib.c
+@@ -3,7 +3,7 @@
+
+ #include <stdlib.h>
+ #include <fcntl.h>
+-#include "squashfuse.h"
++#include <squashfuse.h>
+
+ #include <sys/types.h>
+ #include <sys/stat.h>
+@@ -118,7 +118,7 @@ int is_regular_file(const char *path)
+ }
+
+ /* Function that prints the contents of a squashfs file
+- * using libsquashfuse (#include "squashfuse.h") */
++ * using libsquashfuse (#include <squashfuse.h>) */
+ int sfs_ls(char* image) {
+ 	sqfs_err err = SQFS_OK;
+ 	sqfs_traverse trv;
+diff --git a/src/runtime.c b/src/runtime.c
+index bada3af..70a642b 100644
+--- a/src/runtime.c
++++ b/src/runtime.c
+@@ -29,7 +29,7 @@
+
+ #define _GNU_SOURCE
+
+-#include "squashfuse.h"
++#include <squashfuse.h>
+ #include <squashfs_fs.h>
+ #include <nonstd.h>
diff --git a/nixpkgs/pkgs/tools/package-management/apt-dater/default.nix b/nixpkgs/pkgs/tools/package-management/apt-dater/default.nix
new file mode 100644
index 000000000000..ec9c53f7d78c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/apt-dater/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, pkg-config, gettext
+, xxd, glib, libxml2, ncurses, popt, screen
+}:
+
+stdenv.mkDerivation rec {
+  pname = "apt-dater";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "DE-IBH";
+    repo = "apt-dater";
+    rev = "v${version}";
+    sha256 = "1r6gz9jkh1wxi11mcq5p9mqg0szclsaq8ic79vnfnbjdrmmdfi4y";
+  };
+
+  nativeBuildInputs = [
+    pkg-config autoreconfHook gettext xxd
+  ];
+
+  buildInputs = [
+    libxml2 ncurses glib popt screen
+  ];
+
+  configureFlags = [ "--disable-history" ];
+
+  prePatch = ''
+    substituteInPlace etc/Makefile.am \
+      --replace 02770 0770
+  '';
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace "/usr/bin/screen" "${screen}/bin/screen"
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/DE-IBH/apt-dater";
+    description = "Terminal-based remote package update manager";
+    longDescription = ''
+      Provides an ncurses frontend for managing package updates on a large
+      number of remote hosts using SSH. It supports Debian-based managed hosts
+      as well as rug (e.g. openSUSE) and yum (e.g. CentOS) based systems.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ c0bw3b ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/apx/default.nix b/nixpkgs/pkgs/tools/package-management/apx/default.nix
new file mode 100644
index 000000000000..26bece879f00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/apx/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, distrobox
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "apx";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "Vanilla-OS";
+    repo = "apx";
+    rev = "v${version}";
+    hash = "sha256-OLJrwibw9uX5ty7FRZ0q8zx0i1vQXRKK8reQsJFFxAI=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postPatch = ''
+    substituteInPlace config/apx.json \
+      --replace "/usr/share/apx/distrobox/distrobox" "${distrobox}/bin/distrobox" \
+      --replace "/usr/share/apx" "$out/bin/apx"
+    substituteInPlace settings/config.go \
+      --replace "/usr/share/apx/" "$out/share/apx/"
+  '';
+
+  postInstall = ''
+    install -Dm444 config/apx.json -t $out/share/apx/
+    installManPage man/man1/*
+    install -Dm444 README.md -t $out/share/docs/apx
+    install -Dm444 COPYING.md $out/share/licenses/apx/LICENSE
+  '';
+
+  meta = with lib; {
+    description = "The Vanilla OS package manager";
+    homepage = "https://github.com/Vanilla-OS/apx";
+    changelog = "https://github.com/Vanilla-OS/apx/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dit7ya chewblacka ];
+    mainProgram = "apx";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cde/default.nix b/nixpkgs/pkgs/tools/package-management/cde/default.nix
new file mode 100644
index 000000000000..2e0ceb53e4f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cde/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, libxcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "cde";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "usnistgov";
+    repo = "corr-CDE";
+    rev = "v${version}";
+    sha256 = "sha256-s375gtqBWx0GGXALXR+fN4bb3tmpvPNu/3bNz+75UWU=";
+  };
+
+  # The build is small, so there should be no problem
+  # running this locally. There is also a use case for
+  # older systems, where modern binaries might not be
+  # useful.
+  preferLocalBuild = true;
+
+  buildInputs = [ libxcrypt ];
+
+  patchBuild = ''
+    sed -i -e '/install/d' $src/Makefile
+  '';
+
+  preBuild = ''
+    patchShebangs .
+  '';
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: ../readelf-mini/libreadelf-mini.a(dwarf.o):/build/source/readelf-mini/dwarf.c:64:
+  #     multiple definition of `do_wide'; ../readelf-mini/libreadelf-mini.a(readelf-mini.o):/build/source/readelf-mini/readelf-mini.c:170: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  installPhase = ''
+    install -d $out/bin
+    install -t $out/bin cde cde-exec
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/usnistgov/corr-CDE";
+    description = "A packaging tool for building portable packages";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.rlupton20 ];
+    platforms = platforms.linux;
+    # error: architecture aarch64 is not supported by bundled strace
+    badPlatforms = [ "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/default.nix b/nixpkgs/pkgs/tools/package-management/checkinstall/default.nix
new file mode 100644
index 000000000000..323464847b60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/default.nix
@@ -0,0 +1,81 @@
+{lib, stdenv, fetchurl, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "checkinstall";
+  version = "1.6.2";
+
+  src = fetchurl {
+    url = "https://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-${version}.tar.gz";
+    sha256 = "1x4kslyvfd6lm6zd1ylbq2pjxrafb77ydfjaqi16sa5qywn1jqfw";
+  };
+
+  patches = [
+    # Include empty directories created by the installation script in
+    # generated packages.  (E.g., if a `make install' does `mkdir
+    # /var/lib/mystuff', then /var/lib/mystuff should be included in
+    # the package.)
+    ./empty-dirs.patch
+
+    # Implement the getxattr(), lgetxattr(), __open_2() and
+    # __open64_2() functions.  Needed for doing builds on Ubuntu 8.10.
+    ./missing-functions.patch
+
+    # Don't include directories in the Debian `conffiles' file.
+    ./etc-dirs.patch
+
+    # Support Glibc >= 2.8.
+    ./glibc-check.patch
+
+    # Fix a `conflicting types for 'scandir'' error on Glibc 2.11.
+    ./scandir.patch
+
+    # Fix a `conflicting types for 'readlink'' error since Glibc 2.19
+    ./readlink-types.patch
+
+    # Fix BuildRoot handling in RPM builds.
+    ./set-buildroot.patch
+
+    (fetchurl {
+      url = "https://salsa.debian.org/debian/checkinstall/-/raw/7175ae9de0e45f42fdd7f185ab9a12043d5efeeb/debian/patches/0016-Define-_STAT_VER-_MKNOD_VER-locally-dropped-in-glibc.patch";
+      hash = "sha256-InodEfvVMuN708yjXPrVXb+q8aUcyFhCLx35PHls0Eo=";
+    })
+  ]
+
+  ++ lib.optional (stdenv.hostPlatform.system == "x86_64-linux")
+    # Force use of old memcpy so that installwatch works on Glibc <
+    # 2.14.
+    ./use-old-memcpy.patch;
+
+  buildInputs = [gettext];
+
+  hardeningDisable = [ "fortify" ];
+
+  preBuild = ''
+    makeFlagsArray=(PREFIX=$out)
+
+    substituteInPlace checkinstall --replace /usr/local/lib/checkinstall $out/lib/checkinstall
+    substituteInPlace checkinstallrc-dist --replace /usr/local $out
+
+    substituteInPlace installwatch/create-localdecls \
+      --replace /usr/include/unistd.h ${stdenv.cc.libc.dev}/include/unistd.h
+  '';
+
+  postInstall =
+    # Clear the RPATH, otherwise installwatch.so won't work properly
+    # as an LD_PRELOADed library on applications that load against a
+    # different Glibc.
+    ''
+       patchelf --set-rpath "" $out/lib/installwatch.so
+    '';
+
+  meta = {
+    homepage = "http://checkinstall.izto.org/";
+    description = "A tool for automatically generating Slackware, RPM or Debian packages when doing `make install'";
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    knownVulnerabilities = [
+      "CVE-2020-25031"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/empty-dirs.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/empty-dirs.patch
new file mode 100644
index 000000000000..9a3e29c84c12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/empty-dirs.patch
@@ -0,0 +1,49 @@
+diff -rc checkinstall-orig/checkinstall checkinstall/checkinstall
+*** checkinstall-orig/checkinstall	2009-03-12 13:40:24.000000000 +0100
+--- checkinstall/checkinstall	2009-03-27 14:51:55.000000000 +0100
+***************
+*** 1635,1644 ****
+  
+  	# Find regular files first
+  	[ $DEBUG -gt 0 ] && echo "debug: BASE_TMP_DIR: $BASE_TMP_DIR"
+! 	cat /${TMP_DIR}/newfiles.tmp | egrep -v '^[-0-9][0-9]*[[:space:]]*(unlink|access)' | cut -f 3 | egrep -v "^(/dev|$BASE_TMP_DIR|/tmp)" | sort -u > /${TMP_DIR}/newfiles
+  
+  	# symlinks are next
+! 	cat /${TMP_DIR}/newfiles.tmp | egrep -v '^[-0-9][0-9]*[[:space:]]*(unlink|access)' | cut -f 4 | egrep -v "^(/dev|$BASE_TMP_DIR|/tmp)" | grep -v "#success" | sort -u  >> /${TMP_DIR}/newfiles
+          # Create another list of modified files that exclude all files the
+          # install script wanted to create but did not, e.g because they already
+          # existed.
+--- 1635,1648 ----
+  
+  	# Find regular files first
+  	[ $DEBUG -gt 0 ] && echo "debug: BASE_TMP_DIR: $BASE_TMP_DIR"
+! 	cat /${TMP_DIR}/newfiles.tmp | egrep -v '^[-0-9][0-9]*[[:space:]]*(unlink|access|mkdir)' | cut -f 3 | egrep -v "^(/dev|$BASE_TMP_DIR|/tmp)" | sort -u > /${TMP_DIR}/newfiles
+  
+  	# symlinks are next
+! 	cat /${TMP_DIR}/newfiles.tmp | egrep -v '^[-0-9][0-9]*[[:space:]]*(unlink|access|mkdir)' | cut -f 4 | egrep -v "^(/dev|$BASE_TMP_DIR|/tmp)" | grep -v "#success" | sort -u  >> /${TMP_DIR}/newfiles
+!         
+! 	# And finally newly created directories.
+! 	cat /${TMP_DIR}/newfiles.tmp | egrep '^0[[:space:]]+mkdir[[:space:]]+' | cut -f 3 | egrep -v "^(/dev|$BASE_TMP_DIR|/tmp)" | sort -u >> /${TMP_DIR}/newfiles
+!         
+          # Create another list of modified files that exclude all files the
+          # install script wanted to create but did not, e.g because they already
+          # existed.
+***************
+*** 1738,1746 ****
+  	cd /
+  
+  	( cat /${TMP_DIR}/newfiles | while read i; do 
+! 	      if [ ! -d "${TRANSLROOT}${i}" -o -L "${TRANSLROOT}${i}" ]; then
+! 	      echo ".${i}"
+! 	   fi
+  	done ) > /${TMP_DIR}/newfiles-tar
+  
+          # Here it gets tricky: we need to copy all new files to our build dir,
+--- 1742,1748 ----
+  	cd /
+  
+  	( cat /${TMP_DIR}/newfiles | while read i; do 
+! 	    echo ".${i}"
+  	done ) > /${TMP_DIR}/newfiles-tar
+  
+          # Here it gets tricky: we need to copy all new files to our build dir,
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/etc-dirs.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/etc-dirs.patch
new file mode 100644
index 000000000000..a811e4afbb97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/etc-dirs.patch
@@ -0,0 +1,25 @@
+diff -rc checkinstall-orig/checkinstall checkinstall/checkinstall
+*** checkinstall-orig/checkinstall	2009-03-27 17:07:26.000000000 +0100
+--- checkinstall/checkinstall	2009-04-14 16:34:08.000000000 +0200
+***************
+*** 2607,2615 ****
+     chmod 755 $BUILD_DIR/DEBIAN/postrm
+  fi
+  
+! # Tag files in /etc to be conffiles
+  find $BUILD_DIR/etc 2> /dev/null | sed -e "s,$BUILD_DIR,," | \
+! 	grep -v '^/etc$' > $BUILD_DIR/DEBIAN/conffiles
+  
+  # The package will be saved here (ignores <epoch>: prefix):
+  DEBPKG="${DIRECTORIO_FUENTE}/${NAME}_`echo ${VERSION} | sed -e 's/^[0123456789]*://'`-${RELEASE}_${ARCHITECTURE}.deb"
+--- 2607,2616 ----
+     chmod 755 $BUILD_DIR/DEBIAN/postrm
+  fi
+  
+! # Tag non-directory files in /etc to be conffiles
+  find $BUILD_DIR/etc 2> /dev/null | sed -e "s,$BUILD_DIR,," | \
+!         (while read fn; do test ! -d "$BUILD_DIR/$fn" && echo "$fn"; done) \
+!         > $BUILD_DIR/DEBIAN/conffiles
+  
+  # The package will be saved here (ignores <epoch>: prefix):
+  DEBPKG="${DIRECTORIO_FUENTE}/${NAME}_`echo ${VERSION} | sed -e 's/^[0123456789]*://'`-${RELEASE}_${ARCHITECTURE}.deb"
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/glibc-check.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/glibc-check.patch
new file mode 100644
index 000000000000..7f8cbccae8e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/glibc-check.patch
@@ -0,0 +1,71 @@
+diff -x '*~' -rc checkinstall-1.6.2pre20081116-orig/installwatch/create-localdecls checkinstall-1.6.2pre20081116/installwatch/create-localdecls
+*** checkinstall-1.6.2pre20081116-orig/installwatch/create-localdecls	2008-11-16 17:18:58.000000000 +0100
+--- checkinstall-1.6.2pre20081116/installwatch/create-localdecls	2009-09-18 17:01:13.000000000 +0200
+***************
+*** 46,52 ****
+  echo -n 'Checking libc version... '
+  gcc -Wall -o libctest libctest.c
+  VERSION=`ldd libctest | grep libc\\.so | awk '{print $1}'`
+- rm libctest
+  echo $VERSION
+  echo "#define LIBC_VERSION \"$VERSION\"" >> $OUTFILE
+  if test "$VERSION" = 'libc.so.5' ; then
+--- 46,51 ----
+***************
+*** 56,62 ****
+  
+  if test "$VERSION" = 'libc.so.6' ; then
+  	echo -n 'Checking glibc subversion... '
+! 	tmp="`ldd /bin/sh | grep libc.so 2> /dev/null`"
+  	LibcPath=`expr "$tmp" : '[^/]*\(/[^ ]*\)'`
+  	tmp="`strings $LibcPath | grep -i 'c library'`"
+  	OsLibcMajor=`expr "$tmp" : '.* \([0-9][0-9]*\)'`
+--- 55,61 ----
+  
+  if test "$VERSION" = 'libc.so.6' ; then
+  	echo -n 'Checking glibc subversion... '
+! 	tmp="`ldd libctest | grep libc.so 2> /dev/null`"
+  	LibcPath=`expr "$tmp" : '[^/]*\(/[^ ]*\)'`
+  	tmp="`strings $LibcPath | grep -i 'c library'`"
+  	OsLibcMajor=`expr "$tmp" : '.* \([0-9][0-9]*\)'`
+***************
+*** 86,103 ****
+  		6)
+  			echo '#define GLIBC_MINOR 6' >> $OUTFILE
+  			SUBVERSION='glibc-2.6' ;;
+! 		7)
+  			echo '#define GLIBC_MINOR 7' >> $OUTFILE
+  			SUBVERSION='glibc-2.7' ;;
+  		*)
+- 			echo 'Treated as glibc >= 2.1 (finger crossed)'
+  			echo '#define GLIBC_MINOR 1' >> $OUTFILE
+  			SUBVERSION='glibc-2.1' ;;
+  	        esac
+  		;;
+  	esac
+  fi
+  
+  echo >> $OUTFILE
+  echo '#endif' >> $OUTFILE
+  
+--- 85,104 ----
+  		6)
+  			echo '#define GLIBC_MINOR 6' >> $OUTFILE
+  			SUBVERSION='glibc-2.6' ;;
+! 		7|8|9|10|11|12|13|14|15|16|17|18)
+  			echo '#define GLIBC_MINOR 7' >> $OUTFILE
+  			SUBVERSION='glibc-2.7' ;;
+  		*)
+  			echo '#define GLIBC_MINOR 1' >> $OUTFILE
+  			SUBVERSION='glibc-2.1' ;;
+  	        esac
+  		;;
+  	esac
++         echo $SUBVERSION
+  fi
+  
++ rm libctest
++ 
+  echo >> $OUTFILE
+  echo '#endif' >> $OUTFILE
+  
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/missing-functions.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/missing-functions.patch
new file mode 100644
index 000000000000..02066134b2ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/missing-functions.patch
@@ -0,0 +1,162 @@
+diff -rc checkinstall-orig/installwatch/installwatch.c checkinstall/installwatch/installwatch.c
+*** checkinstall-orig/installwatch/installwatch.c	2009-03-12 13:40:24.000000000 +0100
+--- checkinstall/installwatch/installwatch.c	2009-03-27 22:42:19.000000000 +0100
+***************
+*** 110,115 ****
+--- 110,117 ----
+  static int (*true_setxattr)(const char *,const char *,const void *,
+                              size_t, int);
+  static int (*true_removexattr)(const char *,const char *);
++ static ssize_t (*true_getxattr)(const char *,const char *,const void *,size_t);
++ static ssize_t (*true_lgetxattr)(const char *,const char *,const void *,size_t);
+  
+  #if(GLIBC_MINOR >= 1)
+  
+***************
+*** 369,374 ****
+--- 371,378 ----
+  	true_unlink      = dlsym(libc_handle, "unlink");
+  	true_utime       = dlsym(libc_handle, "utime");
+  	true_setxattr    = dlsym(libc_handle, "setxattr");
++ 	true_getxattr    = dlsym(libc_handle, "getxattr");
++ 	true_lgetxattr   = dlsym(libc_handle, "lgetxattr");
+          true_utimes      = dlsym(libc_handle, "utimes");
+          true_access      = dlsym(libc_handle, "access");
+  
+***************
+*** 3494,3499 ****
+--- 3498,3587 ----
+          return result;
+  }
+  
++ int getxattr (const char *pathname, const char *name,
++               const void *value, size_t size)
++ {
++         int result;
++         instw_t instw;
++ 	int status;
++ 
++         REFCOUNT;
++ 
++         if (!libc_handle)
++                initialize();
++ 
++ #if DEBUG
++         debug(2,"getxattr(%s,%s)\n",pathname,name);
++ #endif
++ 
++          /* We were asked to work in "real" mode */
++         if( !(__instw.gstatus & INSTW_INITIALIZED) ||
++            !(__instw.gstatus & INSTW_OKWRAP) ) {
++                result=true_getxattr(pathname,name,value,size);
++                return result;
++         }
++ 
++         instw_new(&instw);
++         instw_setpath(&instw,pathname);
++ 	instw_getstatus(&instw,&status);
++ 
++ #if DEBUG
++         instw_print(&instw);
++ #endif
++ 
++ 	if(status&INSTW_TRANSLATED) {
++             result=true_getxattr(instw.translpath,name,value,size);
++         } else {
++             result=true_getxattr(instw.path,name,value,size);
++         }
++ 
++         instw_delete(&instw);
++ 
++         return result;
++ }
++ 
++ int lgetxattr (const char *pathname, const char *name,
++               const void *value, size_t size)
++ {
++         int result;
++         instw_t instw;
++ 	int status;
++ 
++         REFCOUNT;
++ 
++         if (!libc_handle)
++                initialize();
++ 
++ #if DEBUG
++         debug(2,"lgetxattr(%s,%s)\n",pathname,name);
++ #endif
++ 
++          /* We were asked to work in "real" mode */
++         if( !(__instw.gstatus & INSTW_INITIALIZED) ||
++            !(__instw.gstatus & INSTW_OKWRAP) ) {
++                result=true_lgetxattr(pathname,name,value,size);
++                return result;
++         }
++ 
++         instw_new(&instw);
++         instw_setpath(&instw,pathname);
++ 	instw_getstatus(&instw,&status);
++ 
++ #if DEBUG
++         instw_print(&instw);
++ #endif
++ 
++ 	if(status&INSTW_TRANSLATED) {
++             result=true_lgetxattr(instw.translpath,name,value,size);
++         } else {
++             result=true_lgetxattr(instw.path,name,value,size);
++         }
++ 
++         instw_delete(&instw);
++ 
++         return result;
++ }
++ 
+  #if(GLIBC_MINOR >= 1)
+  
+  int creat64(const char *pathname, __mode_t mode) {
+***************
+*** 3663,3668 ****
+--- 3751,3791 ----
+  	return result;
+  }
+  
++ int __open_2(const char *pathname, int flags, ...) {
++ 	va_list ap;
++ 	mode_t mode;
++         
++ #if DEBUG
++ 	debug(2,"__open_2(%s,%d,mode)\n",pathname,flags);
++ #endif
++ 
++ 	va_start(ap, flags);
++ 	mode = va_arg(ap, mode_t);
++ 	va_end(ap);
++         
++         /* The open() function in Glibc 2.9 is an always-inline
++            function that may call __open_2(), so it's important that
++            we handle it.  I don't know what __open_2() is supposed to
++            do, but redirecting it to open() seems to work fine.  */
++         
++         return open(pathname,flags,mode);
++ }
++ 
++ int __open64_2(const char *pathname, int flags, ...) {
++ 	va_list ap;
++ 	mode_t mode;
++         
++ #if DEBUG
++ 	debug(2,"__open64_2(%s,%d,mode)\n",pathname,flags);
++ #endif
++ 
++ 	va_start(ap, flags);
++ 	mode = va_arg(ap, mode_t);
++ 	va_end(ap);
++         
++         return open64(pathname,flags,mode);
++ }
++ 
+  struct dirent64 *readdir64(DIR *dir) {
+  	struct dirent64 *result;
+  
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/readlink-types.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/readlink-types.patch
new file mode 100644
index 000000000000..a860607fcf66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/readlink-types.patch
@@ -0,0 +1,19 @@
+Extracted from Arch's patch
+https://projects.archlinux.org/svntogit/community.git/tree/trunk/build-fix.patch?h=packages/checkinstall
+diff -wbBur checkinstall-1.6.2/installwatch/installwatch.c checkinstall-1.6.2.my/installwatch/installwatch.c
+--- checkinstall-1.6.2/installwatch/installwatch.c	2008-11-16 19:20:53.000000000 +0300
++++ checkinstall-1.6.2.my/installwatch/installwatch.c	2010-01-15 18:55:50.112716628 +0300
+@@ -2938,13 +2938,8 @@
+ 	return result;
+ }
+ 
+-#if (GLIBC_MINOR <= 4)
+-int readlink(const char *path,char *buf,size_t bufsiz) {
+-	int result;
+-#else
+ ssize_t readlink(const char *path,char *buf,size_t bufsiz) {
+ 	ssize_t result;
+-#endif
+ 	instw_t instw;
+ 	int status;
+ 
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/scandir.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/scandir.patch
new file mode 100644
index 000000000000..ae40100a9804
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/scandir.patch
@@ -0,0 +1,75 @@
+diff -rc -x '*~' checkinstall-1.6.2-orig/installwatch/installwatch.c checkinstall-1.6.2/installwatch/installwatch.c
+*** checkinstall-1.6.2-orig/installwatch/installwatch.c	2008-11-16 17:20:53.000000000 +0100
+--- checkinstall-1.6.2/installwatch/installwatch.c	2010-02-08 16:35:17.000000000 +0100
+***************
+*** 100,106 ****
+  static int (*true_lxstat)(int,const char *,struct stat *);
+  static int (*true_scandir)(	const char *,struct dirent ***,
+  				int (*)(const struct dirent *),
+! 				int (*)(const void *,const void *));
+  static int (*true_symlink)(const char *, const char *);
+  static int (*true_truncate)(const char *, TRUNCATE_T);
+  static int (*true_unlink)(const char *);
+--- 100,106 ----
+  static int (*true_lxstat)(int,const char *,struct stat *);
+  static int (*true_scandir)(	const char *,struct dirent ***,
+  				int (*)(const struct dirent *),
+! 				int (*)(const struct dirent **,const struct dirent **));
+  static int (*true_symlink)(const char *, const char *);
+  static int (*true_truncate)(const char *, TRUNCATE_T);
+  static int (*true_unlink)(const char *);
+***************
+*** 120,126 ****
+  static struct dirent64 *(*true_readdir64)(DIR *dir);
+  static int (*true_scandir64)(	const char *,struct dirent64 ***,
+  				int (*)(const struct dirent64 *),
+! 				int (*)(const void *,const void *));
+  static int (*true_xstat64)(int,const char *, struct stat64 *);
+  static int (*true_lxstat64)(int,const char *, struct stat64 *);
+  static int (*true_truncate64)(const char *, __off64_t);
+--- 120,126 ----
+  static struct dirent64 *(*true_readdir64)(DIR *dir);
+  static int (*true_scandir64)(	const char *,struct dirent64 ***,
+  				int (*)(const struct dirent64 *),
+! 				int (*)(const struct dirent64 **,const struct dirent64 **));
+  static int (*true_xstat64)(int,const char *, struct stat64 *);
+  static int (*true_lxstat64)(int,const char *, struct stat64 *);
+  static int (*true_truncate64)(const char *, __off64_t);
+***************
+*** 3077,3085 ****
+  	return result;
+  }
+  
+! int scandir(	const char *dir,struct dirent ***namelist,
+  		int (*select)(const struct dirent *),
+! 		int (*compar)(const void *,const void *)	) {
+  	int result;
+  
+  	if (!libc_handle)
+--- 3077,3085 ----
+  	return result;
+  }
+  
+! int scandir(	const char * dir,struct dirent ***namelist,
+  		int (*select)(const struct dirent *),
+! 		int (*compar)(const struct dirent **,const struct dirent **)	) {
+  	int result;
+  
+  	if (!libc_handle)
+***************
+*** 3691,3697 ****
+  
+  int scandir64(	const char *dir,struct dirent64 ***namelist,
+  		int (*select)(const struct dirent64 *),
+! 		int (*compar)(const void *,const void *)	) {
+  	int result;
+  
+  	if (!libc_handle)
+--- 3691,3697 ----
+  
+  int scandir64(	const char *dir,struct dirent64 ***namelist,
+  		int (*select)(const struct dirent64 *),
+! 		int (*compar)(const struct dirent64 **,const struct dirent64 **)	) {
+  	int result;
+  
+  	if (!libc_handle)
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/set-buildroot.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/set-buildroot.patch
new file mode 100644
index 000000000000..58840f491ecf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/set-buildroot.patch
@@ -0,0 +1,15 @@
+https://build.opensuse.org/package/view_file/openSUSE:13.1/checkinstall/checkinstall-set_buildroot.patch
+
+Index: checkinstall
+===================================================================
+--- a/checkinstall	2009-12-26 20:17:24.000000000 +0100
++++ b/checkinstall	2011-01-31 18:17:56.171593541 +0100
+@@ -2463,7 +2463,7 @@ cd "$DIRECTORIO_FUENTE"
+ 
+ echo
+ echogn "Building RPM package..."
+-$RPMBUILD -bb ${RPM_TARGET_FLAG}${ARCHITECTURE} "$SPEC_PATH" &> ${TMP_DIR}/rpmbuild.log
++$RPMBUILD --buildroot ${BUILDROOT} -bb ${RPM_TARGET_FLAG}${ARCHITECTURE} "$SPEC_PATH" &> ${TMP_DIR}/rpmbuild.log
+ okfail
+ 
+ if [ $? -gt 0 ]; then
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/use-old-memcpy.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/use-old-memcpy.patch
new file mode 100644
index 000000000000..c8be7f0b5e26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/use-old-memcpy.patch
@@ -0,0 +1,12 @@
+diff -ru -x '*~' checkinstall-1.6.2-orig/installwatch/installwatch.c checkinstall-1.6.2/installwatch/installwatch.c
+--- checkinstall-1.6.2-orig/installwatch/installwatch.c	2008-11-16 17:20:53.000000000 +0100
++++ checkinstall-1.6.2/installwatch/installwatch.c	2013-03-15 13:50:12.717646381 +0100
+@@ -28,6 +28,8 @@
+  *                                  <mail@fredemmott.co.uk>
+  */
+ 
++asm (".symver memcpy, memcpy@GLIBC_2.2.5");
++
+ #include <sys/param.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
diff --git a/nixpkgs/pkgs/tools/package-management/ciel/Cargo.lock b/nixpkgs/pkgs/tools/package-management/ciel/Cargo.lock
new file mode 100644
index 000000000000..3fce9253591d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/ciel/Cargo.lock
@@ -0,0 +1,2342 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
+
+[[package]]
+name = "ar"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d67af77d68a931ecd5cbd8a3b5987d63a1d1d1278f7f6a60ae33db485cdebb69"
+
+[[package]]
+name = "async-broadcast"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
+dependencies = [
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-fs"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-io"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "concurrent-queue",
+ "futures-lite",
+ "libc",
+ "log",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.2",
+]
+
+[[package]]
+name = "async-task"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524"
+
+[[package]]
+name = "async-trait"
+version = "0.1.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.2",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5dd14596c0e5b954530d0e6f1fd99b89c03e313aa2086e8da4303701a09e1cf"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+]
+
+[[package]]
+name = "build-env"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1522ac6ee801a11bf9ef3f80403f4ede6eb41291fac3dde3de09989679305f25"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "ciel-rs"
+version = "3.1.4"
+dependencies = [
+ "adler32",
+ "anyhow",
+ "ar",
+ "bincode",
+ "clap",
+ "clap_complete",
+ "console",
+ "dialoguer",
+ "dotenv",
+ "faster-hex",
+ "flate2",
+ "fs3",
+ "git2",
+ "indicatif",
+ "lazy_static",
+ "libc",
+ "libmount",
+ "libsystemd-sys",
+ "nix",
+ "rand",
+ "rayon",
+ "reqwest",
+ "serde",
+ "sha2",
+ "tabwriter",
+ "tar",
+ "tempfile",
+ "time",
+ "toml",
+ "walkdir",
+ "which",
+ "xattr 1.0.0",
+ "xz2",
+ "zbus",
+]
+
+[[package]]
+name = "clap"
+version = "4.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098"
+dependencies = [
+ "bitflags 2.0.1",
+ "clap_lex",
+ "is-terminal",
+ "strsim",
+ "termcolor",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "console"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.8.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dialoguer"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af3c796f3b0b408d9fd581611b47fa850821fcb84aa640b83a3c1a5be2d691f2"
+dependencies = [
+ "console",
+ "shell-words",
+ "tempfile",
+ "zeroize",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dotenv"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb"
+dependencies = [
+ "enumflags2_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "faster-hex"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51e2ce894d53b295cf97b05685aa077950ff3e8541af83217fc720a6437169f8"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs3"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb17cf6ed704f72485332f6ab65257460c4f9f3083934cf402bf9f5b3b600a90"
+dependencies = [
+ "libc",
+ "rustc_version",
+ "winapi",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd"
+
+[[package]]
+name = "futures-io"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2"
+
+[[package]]
+name = "futures-task"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879"
+
+[[package]]
+name = "futures-util"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "git2"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729"
+dependencies = [
+ "console",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dd6da19f25979c7270e70fa95ab371ec3b701cd0eefc47667a09785b3c59155"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.14.2+1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4"
+dependencies = [
+ "cc",
+ "libc",
+ "libssh2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libmount"
+version = "0.1.15"
+source = "git+https://github.com/liushuyu/libmount?rev=163b2a70d10a4b38c1653c7283c8de28aad6bd54#163b2a70d10a4b38c1653c7283c8de28aad6bd54"
+dependencies = [
+ "libc",
+ "nix",
+ "quick-error",
+]
+
+[[package]]
+name = "libssh2-sys"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libsystemd-sys"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed080163caa59cc29b34bce2209b737149a4bac148cd9a8b04e4c12822798119"
+dependencies = [
+ "build-env",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "lzma-sys"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.46"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd2523381e46256e40930512c7fd25562b9eae4812cb52078f155e87217c9d1e"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "176be2629957c157240f68f61f2d0053ad3a4ecfdd9ebf1e6521d18d9635cf67"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-stream"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "polling"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "reqwest"
+version = "0.11.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fe885c3a125aa45213b68cc1472a49880cb5923dc23f522ad2791b882228778"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.157"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.157"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.2",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.2",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59d3276aee1fa0c33612917969b5172b5be2db051232a6e4826f1a1a9191b045"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tabwriter"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36205cfc997faadcc4b0b87aaef3fbedafe20d38d4959a7ca6ff803564051111"
+dependencies = [
+ "lazy_static",
+ "regex",
+ "unicode-width",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr 0.2.3",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c9afddd2cec1c0909f06b00ef33f94ab2cc0578c4a610aa208ddfec8aa2b43a"
+dependencies = [
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.2",
+]
+
+[[package]]
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "uds_windows"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+dependencies = [
+ "tempfile",
+ "winapi",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "winnow"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xattr"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea263437ca03c1522846a4ddafbca2542d0ad5ed9b784909d4b27b76f62bc34a"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xz2"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
+dependencies = [
+ "lzma-sys",
+]
+
+[[package]]
+name = "zbus"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dc29e76f558b2cb94190e8605ecfe77dd40f5df8c072951714b4b71a97f5848"
+dependencies = [
+ "async-broadcast",
+ "async-executor",
+ "async-fs",
+ "async-io",
+ "async-lock",
+ "async-recursion",
+ "async-task",
+ "async-trait",
+ "byteorder",
+ "derivative",
+ "dirs",
+ "enumflags2",
+ "event-listener",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hex",
+ "nix",
+ "once_cell",
+ "ordered-stream",
+ "rand",
+ "serde",
+ "serde_repr",
+ "sha1",
+ "static_assertions",
+ "tracing",
+ "uds_windows",
+ "winapi",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62a80fd82c011cd08459eaaf1fd83d3090c1b61e6d5284360074a7475af3a85d"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zbus_names"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f34f314916bd89bdb9934154627fab152f4f28acdda03e7c4c68181b214fe7e3"
+dependencies = [
+ "serde",
+ "static_assertions",
+ "zvariant",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
+
+[[package]]
+name = "zvariant"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46fe4914a985446d6fd287019b5fceccce38303d71407d9e6e711d44954a05d8"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34c20260af4b28b3275d6676c7e2a6be0d4332e8e0aba4616d34007fd84e462a"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zvariant_utils"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
diff --git a/nixpkgs/pkgs/tools/package-management/ciel/default.nix b/nixpkgs/pkgs/tools/package-management/ciel/default.nix
new file mode 100644
index 000000000000..c5809fdca944
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/ciel/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, bash
+, dbus
+, fetchFromGitHub
+, fetchpatch
+, installShellFiles
+, libgit2
+, libssh2
+, openssl
+, pkg-config
+, rustPlatform
+, systemd
+, xz
+, zlib
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ciel";
+  version = "3.1.4";
+
+  src = fetchFromGitHub {
+    owner = "AOSC-Dev";
+    repo = "ciel-rs";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-b8oTVtDcxrV41OtfuthIxjbgZTANCfYHQLRJnnEc93c=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "libmount-0.1.15" = "sha256-t7CGGqJC85od8lOng9+Cn0+WDef6aciLLgxnQn1MrBk=";
+    };
+  };
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+
+  # ciel has plugins which is actually bash scripts.
+  # Therefore, bash is required for plugins to work.
+  buildInputs = [ bash systemd dbus openssl libssh2 libgit2 xz zlib ];
+
+  patches = [
+    # cli,completions: use canonicalize path to find libexec location
+    # FIXME: remove this patch after https://github.com/AOSC-Dev/ciel-rs/pull/16 is merged
+    (fetchpatch {
+      name = "use-canonicalize-path-to-find-libexec.patch";
+      url = "https://github.com/AOSC-Dev/ciel-rs/commit/17f41538ed1057e855540f5abef7faf6ea4abf5c.patch";
+      sha256 = "sha256-ELK2KpOuoBS774apomUIo8q1eXYs/FX895G7eBdgOQg=";
+    })
+  ];
+
+  postInstall = ''
+    mv -v "$out/bin/ciel-rs" "$out/bin/ciel"
+
+    # From install-assets.sh
+    install -Dm555 -t "$out/libexec/ciel-plugin" plugins/*
+
+    # Install completions
+    installShellCompletion --cmd ciel \
+      --bash completions/ciel.bash \
+      --fish completions/ciel.fish \
+      --zsh completions/_ciel
+  '';
+
+  meta = with lib; {
+    description = "A tool for controlling AOSC OS packaging environments using multi-layer filesystems and containers";
+    homepage = "https://github.com/AOSC-Dev/ciel-rs";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ yisuidenghua ];
+    mainProgram = "ciel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/clib/default.nix b/nixpkgs/pkgs/tools/package-management/clib/default.nix
new file mode 100644
index 000000000000..4ecd812ddc2a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/clib/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, curl  }:
+
+stdenv.mkDerivation rec {
+  version = "2.8.5";
+  pname = "clib";
+
+  src = fetchFromGitHub {
+    rev    = version;
+    owner  = "clibs";
+    repo   = "clib";
+    sha256 = "sha256-znvqxZWkQndxE6s36c77whUPc1UokrofTApFSIKFOtM=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  buildInputs = [ curl ];
+
+  meta = with lib; {
+    description = "C micro-package manager";
+    homepage = "https://github.com/clibs/clib";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jb55 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/comma/default.nix b/nixpkgs/pkgs/tools/package-management/comma/default.nix
new file mode 100644
index 000000000000..b73e64924a6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/comma/default.nix
@@ -0,0 +1,43 @@
+{ comma
+, fetchFromGitHub
+, fzy
+, lib
+, makeBinaryWrapper
+, nix-index-unwrapped
+, rustPlatform
+, testers
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "comma";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "comma";
+    rev = "v${version}";
+    hash = "sha256-x2HVm2vcEFHDrCQLIp5QzNsDARcbBfPdaIMLWVNfi4c=";
+  };
+
+  cargoHash = "sha256-N6Bc0+m0Qz1c/80oLvQTj8gvMusPXIriegNlRYWWStU=";
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/comma \
+      --prefix PATH : ${lib.makeBinPath [ fzy nix-index-unwrapped ]}
+    ln -s $out/bin/comma $out/bin/,
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion { package = comma; };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/nix-community/comma";
+    description = "Runs programs without installing them";
+    license = licenses.mit;
+    mainProgram = "comma";
+    maintainers = with maintainers; [ Enzime artturin marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/conda/default.nix b/nixpkgs/pkgs/tools/package-management/conda/default.nix
new file mode 100644
index 000000000000..5638676838f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/conda/default.nix
@@ -0,0 +1,96 @@
+{ lib
+, stdenv
+, fetchurl
+, runCommand
+, makeWrapper
+, buildFHSEnv
+, libselinux
+, libarchive
+, libGL
+, xorg
+, zlib
+# Conda installs its packages and environments under this directory
+, installationPath ? "~/.conda"
+# Conda manages most pkgs itself, but expects a few to be on the system.
+, condaDeps ? [ stdenv.cc xorg.libSM xorg.libICE xorg.libX11 xorg.libXau xorg.libXi xorg.libXrender libselinux libGL zlib]
+# Any extra nixpkgs you'd like available in the FHS env for Conda to use
+, extraPkgs ? [ ]
+}:
+
+# How to use this package?
+#
+# First-time setup: this nixpkg downloads the conda installer and provides a FHS
+# env in which it can run. On first use, the user will need to install conda to
+# the installPath using the installer:
+# $ nix-env -iA conda
+# $ conda-shell
+# $ conda-install
+#
+# Under normal usage, simply call `conda-shell` to activate the FHS env,
+# and then use conda commands as normal:
+# $ conda-shell
+# $ conda install spyder
+let
+  version = "4.11.0";
+  src = fetchurl {
+      url = "https://repo.continuum.io/miniconda/Miniconda3-py39_${version}-Linux-x86_64.sh";
+      sha256 = "sha256-TunDqlMynNemO0mHfAurtJsZt+WvKYB7eTp2vbHTYrQ=";
+  };
+  conda = (
+    let
+      libPath = lib.makeLibraryPath [
+        zlib # libz.so.1
+      ];
+    in
+      runCommand "conda-install" { nativeBuildInputs = [ makeWrapper ]; buildInputs = [ zlib]; }
+        # on line 10, we have 'unset LD_LIBRARY_PATH'
+        # we have to comment it out however in a way that the number of bytes in the
+        # file does not change. So we replace the 'u' in the line with a '#'
+        # The reason is that the binary payload is encoded as number
+        # of bytes from the top of the installer script
+        # and unsetting the library path prevents the zlib library from being discovered
+        ''
+          mkdir -p $out/bin
+
+          sed 's/unset LD_LIBRARY_PATH/#nset LD_LIBRARY_PATH/' ${src} > $out/bin/miniconda-installer.sh
+          chmod +x $out/bin/miniconda-installer.sh
+
+          makeWrapper                            \
+            $out/bin/miniconda-installer.sh      \
+            $out/bin/conda-install               \
+            --add-flags "-p ${installationPath}" \
+            --add-flags "-b"                     \
+            --prefix "LD_LIBRARY_PATH" : "${libPath}"
+        '');
+in
+  buildFHSEnv {
+    name = "conda-shell";
+    targetPkgs = pkgs: (builtins.concatLists [ [ conda ] condaDeps extraPkgs]);
+    profile = ''
+      # Add conda to PATH
+      export PATH=${installationPath}/bin:$PATH
+      # Paths for gcc if compiling some C sources with pip
+      export NIX_CFLAGS_COMPILE="-I${installationPath}/include"
+      export NIX_CFLAGS_LINK="-L${installationPath}lib"
+      # Some other required environment variables
+      export FONTCONFIG_FILE=/etc/fonts/fonts.conf
+      export QTCOMPOSE=${xorg.libX11}/share/X11/locale
+      export LIBARCHIVE=${libarchive.lib}/lib/libarchive.so
+      # Allows `conda activate` to work properly
+      condaSh=${installationPath}/etc/profile.d/conda.sh
+      if [ ! -f $condaSh ]; then
+        conda-install
+      fi
+      source $condaSh
+    '';
+
+    runScript = "bash -l";
+
+    meta = {
+      description = "Conda is a package manager for Python";
+      homepage = "https://conda.io/";
+      platforms = lib.platforms.linux;
+      license = lib.licenses.bsd3;
+      maintainers = with lib.maintainers; [ jluttine bhipple ];
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/package-management/createrepo_c/default.nix b/nixpkgs/pkgs/tools/package-management/createrepo_c/default.nix
new file mode 100644
index 000000000000..fc0628e09088
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/createrepo_c/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, bzip2, expat, glib, curl, libxml2, python3, rpm
+, openssl, sqlite, file, xz, pcre, bash-completion, zstd, zchunk, libmodulemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "createrepo_c";
+  version = "0.17.2";
+
+  src = fetchFromGitHub {
+    owner  = "rpm-software-management";
+    repo   = "createrepo_c";
+    rev    = version;
+    sha256 = "sha256-rcrJjcWj+cTAE3k11Ynr7CQCOWD+rb60lcar0G2w06A=";
+  };
+
+  patches = [
+    # Use the output directory to install the bash completions.
+    ./fix-bash-completion-path.patch
+    # Use the output directory to install the python modules.
+    ./fix-python-install-path.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace '@BASHCOMP_DIR@' "$out/share/bash-completion/completions"
+    substituteInPlace src/python/CMakeLists.txt \
+      --replace "@PYTHON_INSTALL_DIR@" "$out/${python3.sitePackages}"
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config rpm ];
+
+  buildInputs = [ bzip2 expat glib curl libxml2 python3 openssl sqlite file xz pcre bash-completion zstd zchunk libmodulemd ];
+
+  meta = with lib; {
+    description = "C implementation of createrepo";
+    homepage    = "https://rpm-software-management.github.io/createrepo_c/";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ copumpkin ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch b/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch
new file mode 100644
index 000000000000..2539ec5d338d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -117,7 +117,7 @@ OPTION(ENABLE_BASHCOMP "Install Bash autocompletions?" ON)
+ IF (ENABLE_BASHCOMP)
+     pkg_check_modules(BASHCOMP bash-completion)
+     IF (BASHCOMP_FOUND)
+-        execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=completionsdir bash-completion OUTPUT_VARIABLE BASHCOMP_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++        SET(BASHCOMP_DIR "@BASHCOMP_DIR@")
+         message("Bash completion directory: ${BASHCOMP_DIR}")
+         INSTALL(FILES createrepo_c.bash DESTINATION ${BASHCOMP_DIR} RENAME createrepo_c)
+         INSTALL(CODE "
diff --git a/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch b/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch
new file mode 100644
index 000000000000..b8739622e3c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch
@@ -0,0 +1,11 @@
+--- a/src/python/CMakeLists.txt
++++ b/src/python/CMakeLists.txt
+@@ -14,7 +14,7 @@ if (NOT SKBUILD)
+     FIND_PACKAGE(PythonLibs 3 REQUIRED)
+ endif (NOT SKBUILD)
+
+-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib(True))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++SET(PYTHON_INSTALL_DIR "@PYTHON_INSTALL_DIR@")
+ INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
+
+ MESSAGE(STATUS "Python install dir is ${PYTHON_INSTALL_DIR}")
diff --git a/nixpkgs/pkgs/tools/package-management/deploy-rs/default.nix b/nixpkgs/pkgs/tools/package-management/deploy-rs/default.nix
new file mode 100644
index 000000000000..72eacb558bb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/deploy-rs/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, CoreServices
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "deploy-rs";
+  version = "unstable-2023-12-20";
+
+  src = fetchFromGitHub {
+    owner = "serokell";
+    repo = "deploy-rs";
+    rev = "b709d63debafce9f5645a5ba550c9e0983b3d1f7";
+    hash = "sha256-0VUbWBW8VyiDRuimMuLsEO4elGuUw/nc2WDeuO1eN1M=";
+  };
+
+  cargoHash = "sha256-PVeCB1g3JSYE6PKWHyE3hfN/CKlb9XErt8uaD/ZyxIs=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreServices
+    SystemConfiguration
+  ];
+
+  meta = with lib; {
+    description = "Multi-profile Nix-flake deploy tool";
+    homepage = "https://github.com/serokell/deploy-rs";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ teutat3s ];
+    mainProgram = "deploy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/disnix/DisnixWebService/default.nix b/nixpkgs/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
new file mode 100644
index 000000000000..461c0cacc06a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
@@ -0,0 +1,44 @@
+{lib, stdenv, fetchFromGitHub, fetchpatch, apacheAnt, jdk, axis2, dbus_java }:
+
+stdenv.mkDerivation rec {
+  pname = "DisnixWebService";
+  version = "0.10.1";
+
+  src = fetchFromGitHub {
+    owner = "svanderburg";
+    repo = "DisnixWebService";
+    rev = "refs/tags/DisnixWebService-${version}";
+    hash = "sha256-zcYr2Ytx4pevSthTQLpnQ330wDxN9dWsZA20jbO6PxQ=";
+  };
+
+  patches = [
+    # Correct the DisnixWebService build for compatibility with Axis2 1.8.1
+    # See https://github.com/svanderburg/DisnixWebService/pull/2
+    (fetchpatch {
+      url = "https://github.com/svanderburg/DisnixWebService/commit/cee99c6af744b5dda16728a70ebd2800f61871a0.patch";
+      hash = "sha256-4rSEN8AwivUXUCIUYFBRIoE19jVDv+Vpgakmy8fR06A=";
+    })
+  ];
+
+  buildInputs = [ apacheAnt jdk ];
+  PREFIX = "\${env.out}";
+  AXIS2_LIB = "${axis2}/lib";
+  AXIS2_WEBAPP = "${axis2}/webapps/axis2";
+  DBUS_JAVA_LIB = "${dbus_java}/share/java";
+  prePatch = ''
+    sed -i -e "s|#JAVA_HOME=|JAVA_HOME=${jdk}|" \
+       -e "s|#AXIS2_LIB=|AXIS2_LIB=${axis2}/lib|" \
+        scripts/disnix-soap-client
+  '';
+  buildPhase = "ant";
+  installPhase = "ant install";
+
+  meta = {
+    description = "A SOAP interface and client for Disnix";
+    homepage = "https://github.com/svanderburg/DisnixWebService";
+    changelog = "https://github.com/svanderburg/DisnixWebService/blob/DisnixWebService-${version}/NEWS.txt";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.sander ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/disnix/default.nix b/nixpkgs/pkgs/tools/package-management/disnix/default.nix
new file mode 100644
index 000000000000..27f055c089cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/disnix/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, libxml2, libxslt, getopt, dysnomia, libintl, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "disnix";
+  version = "0.10.2";
+
+  src = fetchurl {
+    url = "https://github.com/svanderburg/disnix/releases/download/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "0mc0wy8fca60w0d56cljq2cw1xigbp2dklb43fxa5xph94j3i49a";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib libxml2 libxslt getopt libintl libiconv dysnomia ];
+
+  meta = {
+    description = "A Nix-based distributed service deployment tool";
+    license = lib.licenses.lgpl21Plus;
+    maintainers = with lib.maintainers; [ sander tomberek ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/disnix/disnixos/default.nix b/nixpkgs/pkgs/tools/package-management/disnix/disnixos/default.nix
new file mode 100644
index 000000000000..15e5f3e0e947
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/disnix/disnixos/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, dysnomia, disnix, socat, pkg-config, getopt }:
+
+stdenv.mkDerivation rec {
+  pname = "disnixos";
+  version = "0.9.4";
+
+  src = fetchurl {
+    url = "https://github.com/svanderburg/disnixos/releases/download/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "0adv6dm6hszjhzkfkw48pmi37zj32plcibk80r6bm907mm7n50lj";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ socat dysnomia disnix getopt ];
+
+  meta = {
+    description = "Provides complementary NixOS infrastructure deployment to Disnix";
+    license = lib.licenses.lgpl21Plus;
+    maintainers = [ lib.maintainers.sander ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/disnix/dydisnix/default.nix b/nixpkgs/pkgs/tools/package-management/disnix/dydisnix/default.nix
new file mode 100644
index 000000000000..0c95e41f8c9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/disnix/dydisnix/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, pkg-config, glib
+, libxml2, libxslt, getopt, libiconv, gettext, nix, disnix
+}:
+
+stdenv.mkDerivation rec {
+  version = "unstable-2020-11-02";
+  pname = "dydisnix";
+
+  src = fetchFromGitHub {
+    owner = "svanderburg";
+    repo = "dydisnix";
+    rev = "12ca1516bc1e5d161ac68f5d8252a0a2f353c8cf";
+    sha256 = "00f341274hwwil8mlgcgq331vfca9sscvpdbgkxsjvbhcqd8qa52";
+  };
+
+  nativeBuildInputs = [ pkg-config autoconf automake libtool ];
+  buildInputs = [ glib libxml2 libxslt getopt nix disnix libiconv gettext ];
+
+  preConfigure = ''
+    ./bootstrap
+  '';
+
+  meta = {
+    description = "A toolset enabling self-adaptive redeployment on top of Disnix";
+    longDescription = ''
+      Dynamic Disnix is a (very experimental!) prototype extension framework for Disnix supporting dynamic (re)deployment of service-oriented systems.
+    '';
+    license = lib.licenses.lgpl21Plus;
+    maintainers = [ lib.maintainers.tomberek ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/disnix/dysnomia/default.nix b/nixpkgs/pkgs/tools/package-management/disnix/dysnomia/default.nix
new file mode 100644
index 000000000000..48d1b7965112
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/disnix/dysnomia/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv, fetchurl, netcat
+
+# Optional packages
+, systemd ? null, ejabberd ? null, mariadb ? null, postgresql ? null, subversion ? null
+, mongodb ? null, mongodb-tools ? null, influxdb ? null, supervisor ? null, docker ? null
+, nginx ? null, s6-rc ? null, xinetd ? null
+
+# Configuration flags
+, enableApacheWebApplication ? false
+, enableAxis2WebService ? false
+, enableEjabberdDump ? false
+, enableMySQLDatabase ? false
+, enablePostgreSQLDatabase ? false
+, enableSubversionRepository ? false
+, enableTomcatWebApplication ? false
+, enableMongoDatabase ? false
+, enableInfluxDatabase ? false
+, enableSupervisordProgram ? false
+, enableDockerContainer ? false
+, enableNginxWebApplication ? false
+, enableXinetdService ? false
+, enableS6RCService ? false
+, enableLegacy ? false
+, catalinaBaseDir ? "/var/tomcat"
+, jobTemplate ? "systemd"
+, getopt
+}:
+
+assert enableMySQLDatabase -> mariadb != null;
+assert enablePostgreSQLDatabase -> postgresql != null;
+assert enableSubversionRepository -> subversion != null;
+assert enableEjabberdDump -> ejabberd != null;
+assert enableMongoDatabase -> (mongodb != null && mongodb-tools != null);
+assert enableInfluxDatabase -> influxdb != null;
+assert enableSupervisordProgram -> supervisor != null;
+assert enableDockerContainer -> docker != null;
+assert enableNginxWebApplication -> nginx != null;
+assert enableS6RCService -> s6-rc != null;
+assert enableXinetdService -> xinetd != null;
+
+stdenv.mkDerivation rec {
+  pname = "dysnomia";
+  version = "0.10.2";
+  src = fetchurl {
+    url = "https://github.com/svanderburg/dysnomia/releases/download/dysnomia-${version}/dysnomia-${version}.tar.gz";
+    sha256 = "08ijqbijs2h584dvsb3z858ha385fqd5jfxc51lks9lxxv0sfkr4";
+  };
+
+  configureFlags = [
+     (if enableApacheWebApplication then "--with-apache" else "--without-apache")
+     (if enableAxis2WebService then "--with-axis2" else "--without-axis2")
+     (if enableEjabberdDump then "--with-ejabberd" else "--without-ejabberd")
+     (if enableMySQLDatabase then "--with-mysql" else "--without-mysql")
+     (if enablePostgreSQLDatabase then "--with-postgresql" else "--without-postgresql")
+     (if enableSubversionRepository then "--with-subversion" else "--without-subversion")
+     (if enableTomcatWebApplication then "--with-tomcat=${catalinaBaseDir}" else "--without-tomcat")
+     (if enableMongoDatabase then "--with-mongodb" else "--without-mongodb")
+     (if enableInfluxDatabase then "--with-influxdb" else "--without-influxdb")
+     (if enableSupervisordProgram then "--with-supervisord" else "--without-supervisord")
+     (if enableDockerContainer then "--with-docker" else "--without-docker")
+     (if enableNginxWebApplication then "--with-nginx" else "--without-nginx")
+     (if enableXinetdService then "--with-xinetd" else "--without-xinetd")
+     (if enableS6RCService then "--with-s6-rc" else "--without-s6-rc")
+     (if stdenv.isDarwin then "--with-launchd" else "--without-launchd")
+     "--with-job-template=${jobTemplate}"
+   ] ++ lib.optional enableLegacy "--enable-legacy";
+
+  buildInputs = [ getopt netcat ]
+    ++ lib.optional stdenv.isLinux systemd
+    ++ lib.optional enableEjabberdDump ejabberd
+    ++ lib.optional enableMySQLDatabase mariadb.out
+    ++ lib.optional enablePostgreSQLDatabase postgresql
+    ++ lib.optional enableSubversionRepository subversion
+    ++ lib.optionals enableMongoDatabase [ mongodb mongodb-tools ]
+    ++ lib.optional enableInfluxDatabase influxdb
+    ++ lib.optional enableSupervisordProgram supervisor
+    ++ lib.optional enableDockerContainer docker
+    ++ lib.optional enableNginxWebApplication nginx
+    ++ lib.optional enableS6RCService s6-rc
+    ++ lib.optional enableXinetdService xinetd;
+
+  meta = {
+    description = "Automated deployment of mutable components and services for Disnix";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.sander ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/dnf5/default.nix b/nixpkgs/pkgs/tools/package-management/dnf5/default.nix
new file mode 100644
index 000000000000..a5b7e8f4f813
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/dnf5/default.nix
@@ -0,0 +1,121 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, createrepo_c
+, doxygen
+, gettext
+, help2man
+, pkg-config
+, python3Packages
+, cppunit
+, fmt
+, json_c
+, libmodulemd
+, librepo
+, libsmartcols
+, libsolv
+, libxml2
+, libyaml
+, pcre2
+, rpm
+, sdbus-cpp
+, sphinx
+, sqlite
+, systemd
+, testers
+, toml11
+, zchunk
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "dnf5";
+  version = "5.1.12";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "rpm-software-management";
+    repo = "dnf5";
+    rev = finalAttrs.version;
+    hash = "sha256-AzyFc+fBQyyCNzr8ulMEtFEotdUzStsyYOv9ppcIBw4=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    createrepo_c
+    doxygen
+    gettext
+    help2man
+    pkg-config
+    sphinx
+  ] ++ (with python3Packages; [
+    breathe
+    sphinx-autoapi
+    sphinx-rtd-theme
+  ]);
+
+  buildInputs = [
+    cppunit
+    fmt
+    json_c
+    libmodulemd
+    librepo
+    libsmartcols
+    libsolv
+    libxml2
+    libyaml
+    pcre2.dev
+    rpm
+    sdbus-cpp
+    sqlite
+    systemd
+    toml11
+    zchunk
+  ];
+
+  # workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105329
+  NIX_CFLAGS_COMPILE = "-Wno-restrict -Wno-maybe-uninitialized";
+
+  cmakeFlags = [
+    "-DWITH_PERL5=OFF"
+    "-DWITH_PYTHON3=OFF"
+    "-DWITH_RUBY=OFF"
+    "-DWITH_PLUGIN_RHSM=OFF" # Red Hat Subscription Manager plugin
+    # the cmake package does not handle absolute CMAKE_INSTALL_INCLUDEDIR correctly
+    # (setting it to an absolute path causes include files to go to $out/$out/include,
+    #  because the absolute path is interpreted with root at $out).
+    "-DCMAKE_INSTALL_INCLUDEDIR=include"
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+  ];
+
+  postBuild = ''
+    make doc
+  '';
+
+  prePatch = ''
+    substituteInPlace dnf5daemon-server/dbus/CMakeLists.txt \
+      --replace '/etc' "$out/etc" \
+      --replace '/usr' "$out"
+    substituteInPlace dnf5daemon-server/polkit/CMakeLists.txt \
+      --replace '/usr' "$out"
+    substituteInPlace dnf5/CMakeLists.txt \
+      --replace '/etc/bash_completion.d' "$out/etc/bash_completion.d"
+  '';
+
+  dontFixCmake = true;
+
+  passthru.tests = {
+    version = testers.testVersion { package = finalAttrs.finalPackage; };
+  };
+
+  meta = with lib; {
+    description = "Next-generation RPM package management system";
+    homepage = "https://github.com/rpm-software-management/dnf5";
+    changelog = "https://github.com/rpm-software-management/dnf5/releases/tag/${version}";
+    license = licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ malt3 katexochen ];
+    mainProgram = "dnf5";
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/package-management/dpkg/default.nix b/nixpkgs/pkgs/tools/package-management/dpkg/default.nix
new file mode 100644
index 000000000000..59e259541992
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/dpkg/default.nix
@@ -0,0 +1,99 @@
+{ lib
+, stdenv
+, fetchgit
+, perl
+, gnutar
+, zlib
+, bzip2
+, xz
+, zstd
+, libmd
+, makeWrapper
+, coreutils
+, autoreconfHook
+, pkg-config
+, diffutils
+, glibc ? !stdenv.isDarwin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dpkg";
+  version = "1.22.1";
+
+  src = fetchgit {
+    url = "https://git.launchpad.net/ubuntu/+source/dpkg";
+    rev = "applied/${version}";
+    hash = "sha256-63XRO3Img+XS2F5Krb5DAw0LMhtxB+eJi754O03Lx8Q=";
+  };
+
+  configureFlags = [
+    "--disable-dselect"
+    "--disable-start-stop-daemon"
+    "--with-admindir=/var/lib/dpkg"
+    "PERL_LIBDIR=$(out)/${perl.libPrefix}"
+    "TAR=${gnutar}/bin/tar"
+  ] ++ lib.optional stdenv.isDarwin "--disable-linker-optimisations";
+
+  enableParallelBuilding = true;
+
+  preConfigure = ''
+    # Nice: dpkg has a circular dependency on itself. Its configure
+    # script calls scripts/dpkg-architecture, which calls "dpkg" in
+    # $PATH. It doesn't actually use its result, but fails if it
+    # isn't present, so make a dummy available.
+    touch $TMPDIR/dpkg
+    chmod +x $TMPDIR/dpkg
+    PATH=$TMPDIR:$PATH
+
+    for i in $(find . -name Makefile.in); do
+      substituteInPlace $i --replace "install-data-local:" "disabled:" ;
+    done
+  '';
+
+  postPatch = ''
+    patchShebangs .
+
+    # Dpkg commands sometimes calls out to shell commands
+    substituteInPlace lib/dpkg/dpkg.h \
+       --replace '"dpkg-deb"' \"$out/bin/dpkg-deb\" \
+       --replace '"dpkg-split"' \"$out/bin/dpkg-split\" \
+       --replace '"dpkg-query"' \"$out/bin/dpkg-query\" \
+       --replace '"dpkg-divert"' \"$out/bin/dpkg-divert\" \
+       --replace '"dpkg-statoverride"' \"$out/bin/dpkg-statoverride\" \
+       --replace '"dpkg-trigger"' \"$out/bin/dpkg-trigger\" \
+       --replace '"dpkg"' \"$out/bin/dpkg\" \
+       --replace '"debsig-verify"' \"$out/bin/debsig-verify\" \
+       --replace '"rm"' \"${coreutils}/bin/rm\" \
+       --replace '"cat"' \"${coreutils}/bin/cat\" \
+       --replace '"diff"' \"${diffutils}/bin/diff\"
+  '' + lib.optionalString (!stdenv.isDarwin) ''
+    substituteInPlace src/main/help.c \
+       --replace '"ldconfig"' \"${glibc.bin}/bin/ldconfig\"
+  '';
+
+  buildInputs = [ perl zlib bzip2 xz zstd libmd ];
+  nativeBuildInputs = [ makeWrapper perl autoreconfHook pkg-config ];
+
+  postInstall =
+    ''
+      for i in $out/bin/*; do
+        if head -n 1 $i | grep -q perl; then
+          substituteInPlace $i --replace \
+            "${perl}/bin/perl" "${perl}/bin/perl -I $out/${perl.libPrefix}"
+        fi
+      done
+
+      mkdir -p $out/etc/dpkg
+      cp -r scripts/t/origins $out/etc/dpkg
+    '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    description = "The Debian package manager";
+    homepage = "https://wiki.debian.org/Teams/Dpkg";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ siriobalmelli ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/dpkg/setup-hook.sh b/nixpkgs/pkgs/tools/package-management/dpkg/setup-hook.sh
new file mode 100644
index 000000000000..326f06eff318
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/dpkg/setup-hook.sh
@@ -0,0 +1,12 @@
+unpackCmdHooks+=(_tryDpkgDeb)
+_tryDpkgDeb() {
+    if ! [[ "$curSrc" =~ \.deb$ ]]; then return 1; fi
+    # Don't use dpkg-deb -x as that will error if the archive contains a file
+    # or directory with a setuid bit in its permissions. This is because dpkg
+    # calls tar internally with the -p flag, preserving file permissions.
+    #
+    # We instead only use dpkg-deb to extract the tarfile containing the files
+    # we want from the .deb, then finish extracting with tar directly.
+    mkdir root
+    dpkg-deb --fsys-tarfile "$curSrc" | tar --extract --directory=root
+}
diff --git a/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile b/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile
new file mode 100644
index 000000000000..b97eab9777d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'elm_install'
diff --git a/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile.lock b/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile.lock
new file mode 100644
index 000000000000..5b586256278b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile.lock
@@ -0,0 +1,39 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    adts (0.1.2)
+    commander (4.4.3)
+      highline (~> 1.7.2)
+    contracts (0.16.0)
+    elm_install (1.0.1)
+      adts (~> 0.1.2)
+      commander (~> 4.4, >= 4.4.2)
+      contracts (~> 0.16.0)
+      git (~> 1.3)
+      git_clone_url (~> 2.0)
+      hashdiff (~> 0.3.1)
+      indentation (~> 0.1.1)
+      smart_colored (~> 1.1, >= 1.1.1)
+      solve (~> 3.1)
+    git (1.3.0)
+    git_clone_url (2.0.0)
+      uri-ssh_git (>= 2.0)
+    hashdiff (0.3.4)
+    highline (1.7.8)
+    indentation (0.1.1)
+    molinillo (0.5.7)
+    semverse (2.0.0)
+    smart_colored (1.1.1)
+    solve (3.1.0)
+      molinillo (>= 0.5)
+      semverse (>= 1.1, < 3.0)
+    uri-ssh_git (2.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  elm_install
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/package-management/elm-github-install/default.nix b/nixpkgs/pkgs/tools/package-management/elm-github-install/default.nix
new file mode 100644
index 000000000000..3c77af2b82bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/elm-github-install/default.nix
@@ -0,0 +1,22 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv rec {
+  pname = "elm_install";
+  name = "elm-github-install-${version}";
+
+  version = (import ./gemset.nix).elm_install.version;
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "elm-github-install";
+
+  meta = with lib; {
+    description = "Install Elm packages from git repositories";
+    homepage    = "https://github.com/gdotdesign/elm-github-install";
+    license     = licenses.unfree;
+    maintainers = with maintainers; [ roberth nicknovitski ];
+    platforms   = platforms.all;
+    mainProgram = "elm-install";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/elm-github-install/gemset.nix b/nixpkgs/pkgs/tools/package-management/elm-github-install/gemset.nix
new file mode 100644
index 000000000000..de7f8e20b648
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/elm-github-install/gemset.nix
@@ -0,0 +1,114 @@
+{
+  adts = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1793bfsgg8ca58b70xas9rglnspig41ih0iwqcad62s0grxzrjwz";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  commander = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01qx76y05v29kgyjsfkai73gwfnqhypp1k8v024m9w7qzpv4mpxf";
+      type = "gem";
+    };
+    version = "4.4.3";
+  };
+  contracts = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "119f5p1n6r5svbx8h09za6a4vrsnj5i1pzr9cqdn9hj3wrxvyl3a";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  elm_install = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d3fwhj54madabmzamss865kj8czicgaq5fbdll9kpapqvy6a2j5";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  git = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1waikaggw7a1d24nw0sh8fd419gbf7awh000qhsf411valycj6q3";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  git_clone_url = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qgq7pjl461si3m2gr28vwbx47dcbpyy682mcwra5y1klpkbcvr5";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  hashdiff = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n6hj7k7b9hazac0j48ypbak2nqi5wy4nh5cjra6xl3a92r8db0a";
+      type = "gem";
+    };
+    version = "0.3.4";
+  };
+  highline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nf5lgdn6ni2lpfdn4gk3gi47fmnca2bdirabbjbz1fk9w4p8lkr";
+      type = "gem";
+    };
+    version = "1.7.8";
+  };
+  indentation = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ix64qgmm91xm1yiqxdcn9bqb1l6gwvkv7322yni34b3bd16lgvc";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  molinillo = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19h1nks0x2ljwyijs2rd1f9sh05j8xqvjaqk1rslp5nyy6h4a758";
+      type = "gem";
+    };
+    version = "0.5.7";
+  };
+  semverse = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cf6iv5wgwb7b8jf7il751223k9yahz9aym06s9r0prda5mwddyy";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  smart_colored = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hccah5iwsvn9rf7zdgl7mdbh0h63vfwy1c6d280cb9qkfj8rdny";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  solve = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bbzny2bl94mv1xwcfrxbi3fjhxxawlz6la7mip2wwz9kkaf376h";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  uri-ssh_git = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0klyyvivbjll2ry18d8fhm1rbxbzd4kqa9lskxyiha4ndlb22cqj";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/emplace/default.nix b/nixpkgs/pkgs/tools/package-management/emplace/default.nix
new file mode 100644
index 000000000000..6dd2445d6cef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/emplace/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "emplace";
+  version = "1.5.3";
+
+  src = fetchFromGitHub {
+    owner = "tversteeg";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-KwA0GlZatY1DvtqSR4rwq/nODSa9n+S0gPVqS6agSzM=";
+  };
+
+  cargoHash = "sha256-eQ+T6YiYYeWaUezXB59+Ki05PXtJd7ISwnRw/x/YTZA=";
+
+  meta = with lib; {
+    description = "Mirror installed software on multiple machines";
+    homepage = "https://github.com/tversteeg/emplace";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "emplace";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/fortran-fpm/default.nix b/nixpkgs/pkgs/tools/package-management/fortran-fpm/default.nix
new file mode 100644
index 000000000000..0945b0c67e32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/fortran-fpm/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, fetchurl
+, pkgs
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fortran-fpm";
+
+  version = "0.10.0";
+
+  src = fetchurl {
+    url = "https://github.com/fortran-lang/fpm/releases/download/v${version}/fpm-${version}.F90";
+    sha256 = "sha256-SOVj23Sva5OW6+Sme9NxIQ4uqMbis8wjDmgYPOdQlCI=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = with pkgs; [ gfortran ];
+
+  buildPath = "build/bootstrap";
+
+  buildPhase = ''
+    runHook preBuild
+
+    mkdir -p ${buildPath}
+    gfortran -J ${buildPath} -o ${buildPath}/${pname} $src
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp ${buildPath}/${pname} $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Fortran Package Manager (fpm)";
+    homepage = "https://fpm.fortran-lang.org";
+    maintainers = [ maintainers.proofconstruction ];
+    license = licenses.mit;
+    platforms = platforms.all;
+    mainProgram = "fortran-fpm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/fpm/Gemfile b/nixpkgs/pkgs/tools/package-management/fpm/Gemfile
new file mode 100644
index 000000000000..17ed0a0cb2af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/fpm/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'fpm'
diff --git a/nixpkgs/pkgs/tools/package-management/fpm/Gemfile.lock b/nixpkgs/pkgs/tools/package-management/fpm/Gemfile.lock
new file mode 100644
index 000000000000..b3e8b9d221a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/fpm/Gemfile.lock
@@ -0,0 +1,43 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    arr-pm (0.0.11)
+      cabin (> 0)
+    backports (3.21.0)
+    cabin (0.9.0)
+    clamp (1.0.1)
+    dotenv (2.7.6)
+    fpm (1.13.0)
+      arr-pm (~> 0.0.11)
+      backports (>= 2.6.2)
+      cabin (>= 0.6.0)
+      clamp (~> 1.0.0)
+      git (>= 1.3.0, < 2.0)
+      json (>= 1.7.7, < 3.0)
+      pleaserun (~> 0.0.29)
+      rexml
+      stud
+    git (1.8.1)
+      rchardet (~> 1.8)
+    insist (1.0.0)
+    json (2.5.1)
+    mustache (0.99.8)
+    pleaserun (0.0.32)
+      cabin (> 0)
+      clamp
+      dotenv
+      insist
+      mustache (= 0.99.8)
+      stud
+    rchardet (1.8.0)
+    rexml (3.2.5)
+    stud (0.0.23)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fpm
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/package-management/fpm/default.nix b/nixpkgs/pkgs/tools/package-management/fpm/default.nix
new file mode 100644
index 000000000000..6be2687d67ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/fpm/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "fpm";
+  gemdir = ./.;
+  exes = [ "fpm" ];
+
+  passthru.updateScript = bundlerUpdateScript "fpm";
+
+  meta = with lib; {
+    description = "Tool to build packages for multiple platforms with ease";
+    homepage    = "https://github.com/jordansissel/fpm";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    platforms   = platforms.unix;
+    mainProgram = "fpm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/fpm/gemset.nix b/nixpkgs/pkgs/tools/package-management/fpm/gemset.nix
new file mode 100644
index 000000000000..dca13598e8cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/fpm/gemset.nix
@@ -0,0 +1,146 @@
+{
+  arr-pm = {
+    dependencies = ["cabin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17qssricshzs2ml1jvn4bs2h85gxvrqm074pl5nl8vr74620iazi";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  backports = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xqvwj3mm28g1z4npya51zjcvxaniyyzn3fwgcdwmm8xrdbl8fgr";
+      type = "gem";
+    };
+    version = "3.21.0";
+  };
+  cabin = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b3b8j3iqnagjfn1261b9ncaac9g44zrx1kcg81yg4z9i513kici";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  clamp = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jb6l4scp69xifhicb5sffdixqkw8wgkk9k2q57kh2y36x1px9az";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iym172c5337sm1x2ykc2i3f961vj3wdclbyg1x6sxs3irgfsl94";
+      type = "gem";
+    };
+    version = "2.7.6";
+  };
+  fpm = {
+    dependencies = ["arr-pm" "backports" "cabin" "clamp" "git" "json" "pleaserun" "rexml" "stud"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03ss7yh628f0m6by23q3sniq660gm07mkz6wqjpvr118gc0h53sa";
+      type = "gem";
+    };
+    version = "1.13.0";
+  };
+  git = {
+    dependencies = ["rchardet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vdcv93s33d9914a9nxrn2y2qv15xk7jx94007cmalp159l08cnl";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  insist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bw3bdwns14mapbgb8cbjmr0amvwz8y72gyclq04xp43wpp5jrvg";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  mustache = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g5hplm0k06vwxwqzwn1mq5bd02yp0h3rym4zwzw26aqi7drcsl2";
+      type = "gem";
+    };
+    version = "0.99.8";
+  };
+  pleaserun = {
+    dependencies = ["cabin" "clamp" "dotenv" "insist" "mustache" "stud"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aykf0l8327bqkkf5xd9jcglsib973zpy37cfnlf4j0vp0cdpn2d";
+      type = "gem";
+    };
+    version = "0.0.32";
+  };
+  rchardet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1isj1b3ywgg2m1vdlnr41lpvpm3dbyarf1lla4dfibfmad9csfk9";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  stud = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qpb57cbpm9rwgsygqxifca0zma87drnlacv49cqs2n5iyi6z8kb";
+      type = "gem";
+    };
+    version = "0.0.23";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/fusesoc/default.nix b/nixpkgs/pkgs/tools/package-management/fusesoc/default.nix
new file mode 100644
index 000000000000..680cbc020945
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/fusesoc/default.nix
@@ -0,0 +1,39 @@
+{ buildPythonPackage
+, fetchPypi
+, lib
+, verilog
+, verilator
+, gnumake
+, edalize
+, fastjsonschema
+, pyparsing
+, pyyaml
+, simplesat
+, ipyxact
+, setuptools-scm
+}:
+buildPythonPackage rec {
+  pname = "fusesoc";
+  version = "2.2.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-M36bXBgY8hR33AVDlHoH8PZJG2Bi0KOEI07IMns7R4w=";
+  };
+
+  nativeBuildInputs = [ setuptools-scm ];
+
+  propagatedBuildInputs = [ edalize fastjsonschema pyparsing pyyaml simplesat ipyxact ];
+
+  pythonImportsCheck = [ "fusesoc" ];
+
+  makeWrapperArgs = [ "--suffix PATH : ${lib.makeBinPath [ verilog verilator gnumake ]}"];
+
+  meta = with lib; {
+    homepage = "https://github.com/olofk/fusesoc";
+    description = "A package manager and build tools for HDL code";
+    maintainers = with maintainers; [ genericnerdyusername ];
+    license = licenses.bsd3;
+    mainProgram = "fusesoc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/gx/default.nix b/nixpkgs/pkgs/tools/package-management/gx/default.nix
new file mode 100644
index 000000000000..3f757dde448c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/gx/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gx";
+  version = "0.14.3";
+
+  src = fetchFromGitHub {
+    owner = "whyrusleeping";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jGtUsb2gm8dN45wniD+PYoUlk8m1ssrfj1a7PPYEYuo=";
+  };
+
+  vendorHash = "sha256-6tdVpMztaBjoQRVG2vaUWuvnPq05zjbNAX9HBiC50t0=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A packaging tool built around IPFS";
+    homepage = "https://github.com/whyrusleeping/gx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+    mainProgram = "gx";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/gx/go/default.nix b/nixpkgs/pkgs/tools/package-management/gx/go/default.nix
new file mode 100644
index 000000000000..22f7d07537a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/gx/go/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gx-go";
+  version = "unstable-2020-03-03";
+
+  src = fetchFromGitHub {
+    owner = "whyrusleeping";
+    repo = pname;
+    rev = "9c30fadeac4aee8346d28c36d6bd5063da3d189a";
+    hash = "sha256-lrfAyqAyRnhyw9dPURM1NeFIJW/Zug53ThZiwa89z2M=";
+  };
+
+  vendorHash = "sha256-A3jZYu7+LGCukzlrxgIPmnkcxSoWm5YJZmFG3hliMm4=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A tool for importing go packages into gx";
+    homepage = "https://github.com/whyrusleeping/gx-go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/harmonia/default.nix b/nixpkgs/pkgs/tools/package-management/harmonia/default.nix
new file mode 100644
index 000000000000..9830570a07fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/harmonia/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, boost
+, fetchFromGitHub
+, libsodium
+, nixVersions
+, pkg-config
+, rustPlatform
+, stdenv
+, nix-update-script
+, nixosTests
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "harmonia";
+  version = "0.7.4";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = pname;
+    rev = "refs/tags/${pname}-v${version}";
+    hash = "sha256-72JMrXmxw/FuGjqXXxMIGiAbUUOqXEERdQwch+s3iwU=";
+  };
+
+  cargoHash = "sha256-Q5Y5v7mmJpfZFGRgurTcRBRtbApFRrwqOBHdZTJbyzc=";
+
+  nativeBuildInputs = [
+    pkg-config nixVersions.nix_2_19
+  ];
+
+  buildInputs = [
+    boost
+    libsodium
+    nixVersions.nix_2_19
+  ];
+
+  # Workaround for https://github.com/NixOS/nixpkgs/issues/166205
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  passthru = {
+    updateScript = nix-update-script {
+      extraArgs = [ "--version-regex" "harmonia-v(.*)" ];
+    };
+    tests = { inherit (nixosTests) harmonia; };
+  };
+
+  meta = with lib; {
+    description = "Nix binary cache";
+    homepage = "https://github.com/nix-community/harmonia";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mic92 ];
+    mainProgram = "harmonia";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/holo-build/default.nix b/nixpkgs/pkgs/tools/package-management/holo-build/default.nix
new file mode 100644
index 000000000000..41444e8533d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/holo-build/default.nix
@@ -0,0 +1,60 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, perl, file }:
+
+buildGoModule rec {
+  pname = "holo-build";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "holocm";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0lypbgf96bcc4m3968xa4il1zwprsdyc0pw6pl9mqq7djxabikd0";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace 'VERSION :=' 'VERSION ?='
+    substituteInPlace src/holo-build.sh \
+      --replace '/usr/lib/holo/holo-build' '${placeholder "out"}/lib/holo/holo-build'
+  '';
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles perl ];
+
+  subPackages = [ "src/holo-build" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/holocm/holo-build/src/holo-build/common.version=${version}" ];
+
+  postBuild = ''
+    make build/man/holo-build.8 VERSION=${version}
+  '';
+
+  nativeCheckInputs = [ file ];
+
+  checkPhase = ''
+    ln -s ../../go/bin/holo-build build/holo-build
+    go build -ldflags "-s -w -X github.com/holocm/holo-build/src/holo-build/common.version=${version}" -o build/dump-package ./src/dump-package
+    bash test/compiler/run_tests.sh
+    bash test/interface/run_tests.sh
+  '';
+
+  postInstall = ''
+    installManPage build/man/*
+    installShellCompletion --bash --name holo-build util/autocomplete.bash
+    installShellCompletion --zsh --name _holo-build util/autocomplete.zsh
+
+    # install wrapper script
+    mkdir -p $out/lib/holo
+    mv $out/bin/holo-build $out/lib/holo/holo-build
+    cp src/holo-build.sh $out/bin/holo-build
+  '';
+
+  meta = with lib; {
+    description = "Cross-distribution system package compiler";
+    homepage = "https://holocm.org/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+    mainProgram = "holo-build";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/home-manager/default.nix b/nixpkgs/pkgs/tools/package-management/home-manager/default.nix
new file mode 100644
index 000000000000..77498f9538a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/home-manager/default.nix
@@ -0,0 +1,93 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, bash
+, coreutils
+, findutils
+, gettext
+, gnused
+, less
+, ncurses
+, nixos-option
+, unixtools
+, installShellFiles
+, unstableGitUpdater
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "home-manager";
+  version = "unstable-2024-02-15";
+
+  src = fetchFromGitHub {
+    name = "home-manager-source";
+    owner = "nix-community";
+    repo = "home-manager";
+    rev = "3d6791b3897b526c82920a2ab5f61d71985b3cf8";
+    hash = "sha256-EH20hJfNnc1/ODdDVat9B7aKm0B95L3YtkIRwKLvQG8=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    installShellFiles
+  ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -m755 home-manager/home-manager $out/bin/home-manager
+    install -D -m755 lib/bash/home-manager.sh $out/share/bash/home-manager.sh
+
+    substituteInPlace $out/bin/home-manager \
+      --subst-var-by bash "${bash}" \
+      --subst-var-by DEP_PATH "${
+        lib.makeBinPath [
+          coreutils
+          findutils
+          gettext
+          gnused
+          less
+          ncurses
+          nixos-option
+          unixtools.hostname
+        ]
+      }" \
+      --subst-var-by HOME_MANAGER_LIB '${placeholder "out"}/share/bash/home-manager.sh' \
+      --subst-var-by HOME_MANAGER_PATH "${finalAttrs.src}" \
+      --subst-var-by OUT '${placeholder "out"}'
+
+    installShellCompletion --bash --name home-manager.bash home-manager/completion.bash
+    installShellCompletion --fish --name home-manager.fish home-manager/completion.fish
+    installShellCompletion --zsh --name _home-manager home-manager/completion.zsh
+
+    for pofile in home-manager/po/*.po; do
+      lang="''${pofile##*/}"
+      lang="''${lang%%.*}"
+      mkdir -p "$out/share/locale/$lang/LC_MESSAGES"
+      msgfmt -o "$out/share/locale/$lang/LC_MESSAGES/home-manager.mo" "$pofile"
+    done
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/nix-community/home-manager/";
+  };
+
+  meta = {
+    homepage = "https://nix-community.github.io/home-manager/";
+    description = "A Nix-based user environment configurator";
+    longDescription = ''
+      The Home-Manager project provides a basic system for managing a user
+      environment using the Nix package manager together with the Nix libraries
+      found in Nixpkgs. It allows declarative configuration of user specific
+      (non global) packages and dotfiles.
+    '';
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    platforms = lib.platforms.unix;
+    mainProgram = "home-manager";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/package-management/libcomps/default.nix b/nixpkgs/pkgs/tools/package-management/libcomps/default.nix
new file mode 100644
index 000000000000..89c2982497df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/libcomps/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, check
+, cmake
+, doxygen
+, expat
+, fetchFromGitHub
+, libxml2
+, python
+, sphinx
+, stdenv
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libcomps";
+  version = "0.1.20";
+
+  outputs = [ "out" "dev" "py" ];
+
+  src = fetchFromGitHub {
+    owner = "rpm-software-management";
+    repo = "libcomps";
+    rev = version;
+    hash = "sha256-IX4du1+G7lwWrGnllydnBDap2aqK5pzos1Mdyu4MzOU=";
+  };
+
+  patches = [
+    ./fix-python-install-dir.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace libcomps/src/python/src/CMakeLists.txt \
+      --replace "@PYTHON_INSTALL_DIR@" "$out/${python.sitePackages}"
+  '';
+
+  nativeBuildInputs = [
+    check
+    cmake
+    doxygen
+    python
+    sphinx
+  ];
+
+  buildInputs = [
+    expat
+    libxml2
+    zlib
+  ];
+
+  dontUseCmakeBuildDir = true;
+  cmakeDir = "libcomps";
+
+  postFixup = ''
+    ls $out/lib
+    moveToOutput "lib/${python.libPrefix}" "$py"
+  '';
+
+  meta = with lib; {
+    description = "Comps XML file manipulation library";
+    homepage = "https://github.com/rpm-software-management/libcomps";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ katexochen ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/libcomps/fix-python-install-dir.patch b/nixpkgs/pkgs/tools/package-management/libcomps/fix-python-install-dir.patch
new file mode 100644
index 000000000000..958b4c80843c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/libcomps/fix-python-install-dir.patch
@@ -0,0 +1,13 @@
+diff --git a/libcomps/src/python/src/CMakeLists.txt b/libcomps/src/python/src/CMakeLists.txt
+index d22b84e..57bd1c2 100644
+--- a/libcomps/src/python/src/CMakeLists.txt
++++ b/libcomps/src/python/src/CMakeLists.txt
+@@ -85,7 +85,7 @@ IF (SKBUILD)
+     INSTALL(FILES libcomps/__init__.py DESTINATION libcomps/src/python/src/libcomps)
+     INSTALL(TARGETS pycomps LIBRARY DESTINATION libcomps/src/python/src/libcomps)
+ ELSE ()
+-    EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from sysconfig import get_path; stdout.write(get_path('platlib'))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++    SET(PYTHON_INSTALL_DIR "@PYTHON_INSTALL_DIR@")
+
+     INSTALL(FILES ${pycomps_SRCDIR}/libcomps/__init__.py DESTINATION ${PYTHON_INSTALL_DIR}/libcomps)
+     #INSTALL(FILES ${pycomps_SRCDIR}/tests/__test.py DESTINATION
diff --git a/nixpkgs/pkgs/tools/package-management/libdnf/default.nix b/nixpkgs/pkgs/tools/package-management/libdnf/default.nix
new file mode 100644
index 000000000000..9bce8a919db4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/libdnf/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, gettext
+, pkg-config
+, libsolv
+, openssl
+, check
+, json_c
+, libmodulemd
+, libsmartcols
+, sqlite
+, librepo
+, libyaml
+, rpm
+, zchunk
+, cppunit
+, python
+, swig
+, glib
+, sphinx
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libdnf";
+  version = "0.73.0";
+
+  outputs = [ "out" "dev" "py" ];
+
+  src = fetchFromGitHub {
+    owner = "rpm-software-management";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-zduxlroqo7aeQYhiTWmEK47YG/ll8hLH/d3xtXdcYhk=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    gettext
+    pkg-config
+  ];
+
+  buildInputs = [
+    check
+    cppunit
+    openssl
+    json_c
+    libsmartcols
+    libyaml
+    libmodulemd
+    zchunk
+    python
+    swig
+    sphinx
+  ];
+
+  propagatedBuildInputs = [
+    sqlite
+    libsolv
+    librepo
+    rpm
+  ];
+
+  # See https://github.com/NixOS/nixpkgs/issues/107430
+  prePatch = ''
+    cp ${libsolv}/share/cmake/Modules/FindLibSolv.cmake cmake/modules/
+  '';
+
+  patches = [
+    ./fix-python-install-dir.patch
+  ];
+
+  postPatch = ''
+    # https://github.com/rpm-software-management/libdnf/issues/1518
+    substituteInPlace libdnf/libdnf.pc.in \
+      --replace '$'{prefix}/@CMAKE_INSTALL_LIBDIR@ @CMAKE_INSTALL_FULL_LIBDIR@
+    substituteInPlace cmake/modules/FindPythonInstDir.cmake \
+      --replace "@PYTHON_INSTALL_DIR@" "$out/${python.sitePackages}"
+  '';
+
+  cmakeFlags = [
+    "-DWITH_GTKDOC=OFF"
+    "-DWITH_HTML=OFF"
+    "-DPYTHON_DESIRED=${lib.head (lib.splitString ["."] python.version)}"
+  ];
+
+  postInstall = ''
+    rm -r $out/${python.sitePackages}/hawkey/test
+  '';
+
+  postFixup = ''
+    moveToOutput "lib/${python.libPrefix}" "$py"
+  '';
+
+  meta = with lib; {
+    description = "Package management library";
+    homepage = "https://github.com/rpm-software-management/libdnf";
+    changelog = "https://github.com/rpm-software-management/libdnf/releases/tag/${version}";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ rb2k katexochen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/libdnf/fix-python-install-dir.patch b/nixpkgs/pkgs/tools/package-management/libdnf/fix-python-install-dir.patch
new file mode 100644
index 000000000000..d08ec9deec02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/libdnf/fix-python-install-dir.patch
@@ -0,0 +1,12 @@
+diff --git a/cmake/modules/FindPythonInstDir.cmake b/cmake/modules/FindPythonInstDir.cmake
+index ed098ded..2a2e1543 100644
+--- a/cmake/modules/FindPythonInstDir.cmake
++++ b/cmake/modules/FindPythonInstDir.cmake
+@@ -1,6 +1 @@
+-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "
+-from sys import stdout
+-from sysconfig import get_path
+-path=get_path(name='platlib', vars={'platbase':'${CMAKE_INSTALL_PREFIX}'})
+-stdout.write(path)"
+-OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++SET(PYTHON_INSTALL_DIR "@PYTHON_INSTALL_DIR@")
diff --git a/nixpkgs/pkgs/tools/package-management/librepo/default.nix b/nixpkgs/pkgs/tools/package-management/librepo/default.nix
new file mode 100644
index 000000000000..1d43efe3f8af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/librepo/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, python
+, pkg-config
+, libxml2
+, glib
+, openssl
+, zchunk
+, curl
+, check
+, gpgme
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.15.1";
+  pname = "librepo";
+
+  outputs = [ "out" "dev" "py" ];
+
+  src = fetchFromGitHub {
+    owner = "rpm-software-management";
+    repo = "librepo";
+    rev = version;
+    sha256 = "sha256-XVjVu+UTIDbrKHmfJ2zZBLp/h0cLCZFxv/XZ0Iy8VPI=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    python
+    libxml2
+    glib
+    openssl
+    curl
+    check
+    gpgme
+    zchunk
+  ];
+
+  # librepo/fastestmirror.h includes curl/curl.h, and pkg-config specfile refers to others in here
+  propagatedBuildInputs = [
+    curl
+    gpgme
+    libxml2
+  ];
+
+  cmakeFlags = [ "-DPYTHON_DESIRED=${lib.substring 0 1 python.pythonVersion}" ];
+
+  postFixup = ''
+    moveToOutput "lib/${python.libPrefix}" "$py"
+  '';
+
+  meta = with lib; {
+    description = "Library providing C and Python (libcURL like) API for downloading linux repository metadata and packages";
+    homepage = "https://rpm-software-management.github.io/librepo/";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ copumpkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/licensee/Gemfile b/nixpkgs/pkgs/tools/package-management/licensee/Gemfile
new file mode 100644
index 000000000000..a5d0dacfcfae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/licensee/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'licensee'
diff --git a/nixpkgs/pkgs/tools/package-management/licensee/Gemfile.lock b/nixpkgs/pkgs/tools/package-management/licensee/Gemfile.lock
new file mode 100644
index 000000000000..6bfe70664bd1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/licensee/Gemfile.lock
@@ -0,0 +1,44 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.8.6)
+      public_suffix (>= 2.0.2, < 6.0)
+    base64 (0.2.0)
+    dotenv (2.8.1)
+    faraday (2.8.1)
+      base64
+      faraday-net_http (>= 2.0, < 3.1)
+      ruby2_keywords (>= 0.0.4)
+    faraday-net_http (3.0.2)
+    licensee (9.16.1)
+      dotenv (~> 2.0)
+      octokit (>= 4.20, < 9.0)
+      reverse_markdown (>= 1, < 3)
+      rugged (>= 0.24, < 2.0)
+      thor (>= 0.19, < 2.0)
+    mini_portile2 (2.8.5)
+    nokogiri (1.16.0)
+      mini_portile2 (~> 2.8.2)
+      racc (~> 1.4)
+    octokit (8.0.0)
+      faraday (>= 1, < 3)
+      sawyer (~> 0.9)
+    public_suffix (5.0.4)
+    racc (1.7.3)
+    reverse_markdown (2.1.1)
+      nokogiri
+    ruby2_keywords (0.0.5)
+    rugged (1.7.1)
+    sawyer (0.9.2)
+      addressable (>= 2.3.5)
+      faraday (>= 0.17.3, < 3)
+    thor (1.3.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  licensee
+
+BUNDLED WITH
+   2.4.22
diff --git a/nixpkgs/pkgs/tools/package-management/licensee/default.nix b/nixpkgs/pkgs/tools/package-management/licensee/default.nix
new file mode 100644
index 000000000000..b72c218cd16a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/licensee/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "licensee";
+  gemdir = ./.;
+  exes = [ "licensee" ];
+
+  passthru.updateScript = bundlerUpdateScript "licensee";
+
+  meta = with lib; {
+    description = "A Ruby Gem to detect under what license a project is distributed";
+    homepage    = "https://licensee.github.io/licensee/";
+    license     = licenses.mit;
+    maintainers = [ maintainers.sternenseemann ];
+    platforms   = platforms.unix;
+    mainProgram = "licensee";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/licensee/gemset.nix b/nixpkgs/pkgs/tools/package-management/licensee/gemset.nix
new file mode 100644
index 000000000000..0a850ba8758b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/licensee/gemset.nix
@@ -0,0 +1,169 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0irbdwkkjwzajq1ip6ba46q49sxnrl2cw7ddkdhsfhb6aprnm3vr";
+      type = "gem";
+    };
+    version = "2.8.6";
+  };
+  base64 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n0pi8x8ql5h1mijvm8lgn6bhq4xjb5a500p5r1krq4s6j9lg565";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  faraday = {
+    dependencies = ["base64" "faraday-net_http" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19p45ryrvxff6ggdj4fq76dk7wlkfgrh474c3kwzdsjx3xpdq8x8";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13byv3mp1gsjyv8k0ih4612y6vw5kqva6i03wcg4w2fqpsd950k8";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  licensee = {
+    dependencies = ["dotenv" "octokit" "reverse_markdown" "rugged" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05g5w9c4jlfhwn0hfz117s1c7hfdm5yn7cywr4mah7xr41yvbh04";
+      type = "gem";
+    };
+    version = "9.16.1";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kl9c3kdchjabrihdqfmcplk3lq4cw1rr9f378y6q22qwy5dndvs";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l8b0i24h4irivyhwy9xmkjbggw86cxkzkiqdqg0jpcp9qc8h4rl";
+      type = "gem";
+    };
+    version = "1.16.0";
+  };
+  octokit = {
+    dependencies = ["faraday" "sawyer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11fhv1a43c51jkgmqf62aypf9yw74lc6ph4qmzsh2bydwwzbwqn3";
+      type = "gem";
+    };
+    version = "8.0.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bni4qjrsh2q49pnmmd6if4iv3ak36bd2cckrs6npl111n769k9m";
+      type = "gem";
+    };
+    version = "5.0.4";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01b9662zd2x9bp4rdjfid07h09zxj7kvn7f5fghbqhzc625ap1dp";
+      type = "gem";
+    };
+    version = "1.7.3";
+  };
+  reverse_markdown = {
+    dependencies = ["nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0087vhw5ik50lxvddicns01clkx800fk5v5qnrvi3b42nrk6885j";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  rugged = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02m9zksfy3dwzhbv56xq2wwmlghca5209hdg895pi2x2d2sbkahi";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  sawyer = {
+    dependencies = ["addressable" "faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jks1qjbmqm8f9kvwa81vqj39avaj9wdnzc531xm29a55bb74fps";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hx77jxkrwi66yvs10wfxqa8s25ds25ywgrrf66acm9nbfg7zp0s";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/microdnf/default.nix b/nixpkgs/pkgs/tools/package-management/microdnf/default.nix
new file mode 100644
index 000000000000..79fcdf0300c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/microdnf/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, gettext, libdnf, pkg-config, glib, libpeas, libsmartcols, help2man }:
+
+stdenv.mkDerivation rec {
+  pname = "microdnf";
+  version = "3.10.0";
+
+  src = fetchFromGitHub {
+    owner = "rpm-software-management";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-R7jOeH6pw/THLXxLezp2AmE8lUBagKMRJ0XfXgdLi2E=";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake gettext help2man ];
+  buildInputs = [ libdnf glib libpeas libsmartcols ];
+
+  meta = with lib; {
+    description = "Lightweight implementation of dnf in C";
+    homepage = "https://github.com/rpm-software-management/microdnf";
+    license = licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ rb2k ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "microdnf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/micromamba/default.nix b/nixpkgs/pkgs/tools/package-management/micromamba/default.nix
new file mode 100644
index 000000000000..5ff23ec7188d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/micromamba/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, bzip2
+, cli11
+, cmake
+, curl
+, ghc_filesystem
+, libarchive
+, libsolv
+, yaml-cpp
+, nlohmann_json
+, python3
+, reproc
+, spdlog
+, tl-expected
+}:
+
+let
+  libsolv' = libsolv.overrideAttrs (oldAttrs: {
+    cmakeFlags = oldAttrs.cmakeFlags ++ [
+      "-DENABLE_CONDA=true"
+    ];
+
+    patches = [
+      # Apply the same patch as in the "official" boa-forge build:
+      # https://github.com/mamba-org/boa-forge/tree/master/libsolv
+      (fetchpatch {
+        url = "https://raw.githubusercontent.com/mamba-org/boa-forge/20530f80e2e15012078d058803b6e2c75ed54224/libsolv/conda_variant_priorization.patch";
+        sha256 = "1iic0yx7h8s662hi2jqx68w5kpyrab4fr017vxd4wyxb6wyk35dd";
+      })
+    ];
+  });
+in
+stdenv.mkDerivation rec {
+  pname = "micromamba";
+  version = "1.5.4";
+
+  src = fetchFromGitHub {
+    owner = "mamba-org";
+    repo = "mamba";
+    rev = "micromamba-" + version;
+    hash = "sha256-29SuR4RDW0+yNR1RHlm3I4avy0CjBTGxv1FKxMDZxO0=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    bzip2
+    cli11
+    nlohmann_json
+    curl
+    libarchive
+    yaml-cpp
+    libsolv'
+    reproc
+    spdlog
+    ghc_filesystem
+    python3
+    tl-expected
+  ];
+
+  cmakeFlags = [
+    "-DBUILD_LIBMAMBA=ON"
+    "-DBUILD_SHARED=ON"
+    "-DBUILD_MICROMAMBA=ON"
+    # "-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON"
+  ];
+
+  meta = with lib; {
+    description = "Reimplementation of the conda package manager";
+    homepage = "https://github.com/mamba-org/mamba";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ mausch ];
+    mainProgram = "micromamba";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/morph/default.nix b/nixpkgs/pkgs/tools/package-management/morph/default.nix
new file mode 100644
index 000000000000..71c9c285f308
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/morph/default.nix
@@ -0,0 +1,38 @@
+{ buildGoModule, fetchFromGitHub, lib, makeWrapper, openssh }:
+
+buildGoModule rec {
+  pname = "morph";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "dbcdk";
+    repo = "morph";
+    rev = "v${version}";
+    hash = "sha256-0CHmjqPxBgALGZYjfJFLoLBnoI0U7oZ8WyCtu1bkzZg=";
+  };
+
+  vendorHash = "sha256-KV+djwUYNfD7NqmYkanRVeKj2lAGfMjJhCUSRiC4/yM=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  ldflags = [
+    "-X main.version=${version}"
+    "-X main.assetRoot=${placeholder "lib"}"
+  ];
+
+  postInstall = ''
+    mkdir -p $lib
+    cp -v ./data/*.nix $lib
+    wrapProgram $out/bin/morph --prefix PATH : ${lib.makeBinPath [ openssh ]};
+  '';
+
+  outputs = [ "out" "lib" ];
+
+  meta = with lib; {
+    description = "A NixOS host manager written in Golang";
+    license = licenses.mit;
+    homepage = "https://github.com/dbcdk/morph";
+    maintainers = with maintainers; [adamt johanot];
+    mainProgram = "morph";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/mynewt-newt/default.nix b/nixpkgs/pkgs/tools/package-management/mynewt-newt/default.nix
new file mode 100644
index 000000000000..789a48655436
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/mynewt-newt/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "mynewt-newt";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "apache";
+    repo = "mynewt-newt";
+    rev = "mynewt_${builtins.replaceStrings ["."] ["_"] version}_tag";
+    sha256 = "sha256-HWZDs4kYWveEqzPRNGNbghc1Yg6hy/Pq3eU5jW8WdHc=";
+  };
+
+  vendorHash = "sha256-/LK+NSs7YZkw6TRvBQcn6/SszIwAfXN0rt2AKSBV7CE=";
+
+  doCheck = false;
+
+  # CGO_ENABLED=0 required for mac - "error: 'TARGET_OS_MAC' is not defined, evaluates to 0"
+  # https://github.com/shirou/gopsutil/issues/976
+  CGO_ENABLED = if stdenv.isLinux then 1 else 0;
+
+  meta = with lib; {
+    homepage = "https://mynewt.apache.org/";
+    description = "Build and package management tool for embedded development";
+    longDescription = ''
+      Apache Newt is a smart build and package management tool,
+      designed for C and C++ applications in embedded contexts. Newt
+      was developed as a part of the Apache Mynewt Operating System.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ pjones ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nfpm/default.nix b/nixpkgs/pkgs/tools/package-management/nfpm/default.nix
new file mode 100644
index 000000000000..e37393e41b85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nfpm/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, buildPackages
+}:
+
+buildGoModule rec {
+  pname = "nfpm";
+  version = "2.35.3";
+
+  src = fetchFromGitHub {
+    owner = "goreleaser";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-QoZiI9rMOdQZbMENVcBfUYPAvN9IqfeR0EK11l8+Hzo=";
+  };
+
+  vendorHash = "sha256-WYuhHLq0/OD/JtOEkZsyPEJyjPqEoh9RSfBG0G3E/2w=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall =
+    let emulator = stdenv.hostPlatform.emulator buildPackages;
+    in ''
+      ${emulator} $out/bin/nfpm man > nfpm.1
+      installManPage ./nfpm.1
+      installShellCompletion --cmd nfpm \
+        --bash <(${emulator} $out/bin/nfpm completion bash) \
+        --fish <(${emulator} $out/bin/nfpm completion fish) \
+        --zsh  <(${emulator} $out/bin/nfpm completion zsh)
+    '';
+
+  meta = with lib; {
+    description = "A simple deb and rpm packager written in Go";
+    homepage = "https://github.com/goreleaser/nfpm";
+    changelog = "https://github.com/goreleaser/nfpm/releases/tag/v${version}";
+    maintainers = with maintainers; [ marsam techknowlogick caarlos0 ];
+    license = with licenses; [ mit ];
+    mainProgram = "nfpm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/niff/default.nix b/nixpkgs/pkgs/tools/package-management/niff/default.nix
new file mode 100644
index 000000000000..827d4353f283
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/niff/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, python3
+, fetchFromGitHub
+}:
+
+let
+  pname = "niff";
+  version = "0.1";
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "FRidh";
+    repo = "niff";
+    rev = "v${version}";
+    sha256 = "1ziv5r57jzg2qg61izvkkyq1bz4p5nb6652dzwykfj3l2r3db4bi";
+  };
+
+  buildInputs = [ python3 ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp niff $out/bin/niff
+  '';
+
+  meta = {
+    description = "A program that compares two Nix expressions and determines which attributes changed";
+    homepage = "https://github.com/FRidh/niff";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.fridh ];
+    mainProgram = "niff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-bundle/default.nix b/nixpkgs/pkgs/tools/package-management/nix-bundle/default.nix
new file mode 100644
index 000000000000..a32f788bf4dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-bundle/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bzip2
+, coreutils
+, gnutar
+, gzip
+, makeWrapper
+, nix
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nix-bundle";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "matthewbauer";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0js8spwjvw6kjxz1i072scd035fhiyazixvn84ibdnw8dx087gjv";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # coreutils, gnutar are needed by nix for bootstrap
+  buildInputs = [
+    bzip2
+    coreutils
+    gnutar
+    gzip
+    nix
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    makeWrapper $out/share/nix-bundle/nix-bundle.sh $out/bin/nix-bundle \
+      --prefix PATH : ${lib.makeBinPath buildInputs}
+    ln -s $out/share/nix-bundle/nix-run.sh $out/bin/nix-run
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/matthewbauer/nix-bundle";
+    description = "Create bundles from Nixpkgs attributes";
+    longDescription = ''
+      nix-bundle is a way to package Nix attributes into single-file
+      executables.
+
+      Benefits:
+      - Single-file output
+      - Can be run by non-root users
+      - No runtime
+      - Distro agnostic
+      - No installation
+    '';
+    license = licenses.mit;
+    maintainers = [ maintainers.matthewbauer ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-doc/default.nix b/nixpkgs/pkgs/tools/package-management/nix-doc/default.nix
new file mode 100644
index 000000000000..2c7940b8d87d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-doc/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, boost, nix, pkg-config }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nix-doc";
+  version = "0.6.5";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "lf-";
+    repo = "nix-doc";
+    sha256 = "sha256-9cuNzq+CBA2jz0LkZb7lh/WISIlKklfovGBAbSo1Mgk=";
+  };
+
+  doCheck = true;
+  buildInputs = [ boost nix ];
+
+  nativeBuildInputs = [ pkg-config nix ];
+
+  # Packaging support for making the nix-doc plugin load cleanly as a no-op on
+  # the wrong Nix version (disabling bindnow permits loading libraries
+  # requiring unavailable symbols if they are unreached)
+  hardeningDisable = [ "bindnow" ];
+  # Due to a Rust bug, setting -Z relro-level to anything including "off" on
+  # macOS will cause link errors
+  env = lib.optionalAttrs stdenv.isLinux {
+    # nix-doc does not use nightly features, however, there is no other way to
+    # set relro-level
+    RUSTC_BOOTSTRAP = 1;
+    RUSTFLAGS = "-Z relro-level=partial";
+  };
+
+  cargoSha256 = "sha256-CHagzXTG9AfrFd3WmHanQ+YddMgmVxSuB8vK98A1Mlw=";
+
+  meta = with lib; {
+    description = "An interactive Nix documentation tool";
+    longDescription = "An interactive Nix documentation tool providing a CLI for function search, a Nix plugin for docs in the REPL, and a ctags implementation for Nix script";
+    homepage = "https://github.com/lf-/nix-doc";
+    license = licenses.lgpl3Plus;
+    maintainers = [ maintainers.lf- ];
+    platforms = platforms.unix;
+    mainProgram = "nix-doc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-du/default.nix b/nixpkgs/pkgs/tools/package-management/nix-du/default.nix
new file mode 100644
index 000000000000..a3a1f0d97108
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-du/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, nix
+, nlohmann_json
+, boost
+, graphviz
+, Security
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nix-du";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "symphorien";
+    repo = "nix-du";
+    rev = "v${version}";
+    sha256 = "sha256-HfmMZVlsdg9hTWGUihl6OlQAp/n1XRvPLfAKJ8as8Ew=";
+  };
+
+  cargoSha256 = "sha256-oUxxuBqec4aI2h8BAn1WSA44UU7f5APkv0DIwuSun0M=";
+
+  doCheck = true;
+  nativeCheckInputs = [ nix graphviz ];
+
+  buildInputs = [
+    boost
+    nix
+    nlohmann_json
+  ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  nativeBuildInputs = [ pkg-config rustPlatform.bindgenHook ];
+
+  # Workaround for https://github.com/NixOS/nixpkgs/issues/166205
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  meta = with lib; {
+    description = "A tool to determine which gc-roots take space in your nix store";
+    homepage = "https://github.com/symphorien/nix-du";
+    license = licenses.lgpl3Only;
+    maintainers = [ maintainers.symphorien ];
+    platforms = platforms.unix;
+    mainProgram = "nix-du";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-eval-jobs/default.nix b/nixpkgs/pkgs/tools/package-management/nix-eval-jobs/default.nix
new file mode 100644
index 000000000000..bf2d48e4adfb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-eval-jobs/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, boost
+, cmake
+, fetchFromGitHub
+, meson
+, ninja
+, nix
+, nlohmann_json
+, pkg-config
+, stdenv
+}:
+stdenv.mkDerivation rec {
+  pname = "nix-eval-jobs";
+  version = "2.19.4";
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-97ZqhTMqnAr1rzEy96faceWzFyWexnYbH1aTfc1y0JE=";
+  };
+  buildInputs = [
+    boost
+    nix
+    nlohmann_json
+  ];
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    # nlohmann_json can be only discovered via cmake files
+    cmake
+  ];
+
+  # Since this package is intimately tied to a specific Nix release, we
+  # propagate the Nix used for building it to make it easier for users
+  # downstream to reference it.
+  passthru = { inherit nix; };
+
+  meta = {
+    description = "Hydra's builtin hydra-eval-jobs as a standalone";
+    homepage = "https://github.com/nix-community/nix-eval-jobs";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ adisbladis mic92 ];
+    platforms = lib.platforms.unix;
+    mainProgram = "nix-eval-jobs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-index/default.nix b/nixpkgs/pkgs/tools/package-management/nix-index/default.nix
new file mode 100644
index 000000000000..35df4f9674d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-index/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, pkg-config, openssl, curl, sqlite
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nix-index";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nix-index";
+    rev = "v${version}";
+    hash = "sha256-WPWd2aMuP4L17UDFz7SI6lqyrCzrPV8c88vGyO6r6jk=";
+  };
+
+  cargoHash = "sha256-zZhQ3pOid7BCGzcyCrl6sDm0q6IEVKF7K+d6nVs9flk=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl curl sqlite ]
+    ++ lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    substituteInPlace command-not-found.sh \
+      --subst-var out
+    install -Dm555 command-not-found.sh -t $out/etc/profile.d
+  '';
+
+  meta = with lib; {
+    description = "A files database for nixpkgs";
+    homepage = "https://github.com/nix-community/nix-index";
+    changelog = "https://github.com/nix-community/nix-index/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ bennofs figsoda ncfavier ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-index/wrapper.nix b/nixpkgs/pkgs/tools/package-management/nix-index/wrapper.nix
new file mode 100644
index 000000000000..94611e74c2a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-index/wrapper.nix
@@ -0,0 +1,14 @@
+{ lib, symlinkJoin, nix-index-unwrapped, makeWrapper, nix }:
+
+symlinkJoin {
+  inherit (nix-index-unwrapped) name meta;
+
+  paths = [ nix-index-unwrapped ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/nix-index \
+      --prefix PATH : ${lib.makeBinPath [ nix ]}
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-pin/default.nix b/nixpkgs/pkgs/tools/package-management/nix-pin/default.nix
new file mode 100644
index 000000000000..59422ff22cc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-pin/default.nix
@@ -0,0 +1,51 @@
+{ lib, pkgs, stdenv, fetchFromGitHub, python3, nix, git, makeWrapper
+, runtimeShell }:
+let self = stdenv.mkDerivation rec {
+  pname = "nix-pin";
+  version = "0.4.0";
+  src = fetchFromGitHub {
+    owner = "timbertson";
+    repo = "nix-pin";
+    rev = "version-${version}";
+    sha256 = "1pccvc0iqapms7kidrh09g5fdx44x622r5l9k7bkmssp3v4c68vy";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 ];
+  installPhase = ''
+    mkdir "$out"
+    cp -r bin share "$out"
+    wrapProgram $out/bin/nix-pin \
+      --prefix PATH : "${lib.makeBinPath [ nix git ]}"
+  '';
+  passthru =
+    let
+      defaults = import "${self}/share/nix/defaults.nix";
+    in {
+      api = { pinConfig ? defaults.pinConfig }:
+        let impl = import "${self}/share/nix/api.nix" { inherit pkgs pinConfig; }; in
+        { inherit (impl) augmentedPkgs pins callPackage; };
+      updateScript = ''
+        #!${runtimeShell}
+        set -e
+        echo
+        cd ${toString ./.}
+        ${pkgs.nix-update-source}/bin/nix-update-source \
+          --prompt version \
+          --replace-attr version \
+          --set owner timbertson \
+          --set repo nix-pin \
+          --set type fetchFromGitHub \
+          --set rev 'version-{version}' \
+          --substitute rev 'version-''${{version}}' \
+          --modify-nix default.nix
+      '';
+    };
+  meta = with lib; {
+    homepage = "https://github.com/timbertson/nix-pin";
+    description = "nixpkgs development utility";
+    license = licenses.mit;
+    maintainers = [ maintainers.timbertson ];
+    platforms = platforms.all;
+    mainProgram = "nix-pin";
+  };
+}; in self
diff --git a/nixpkgs/pkgs/tools/package-management/nix-prefetch-scripts/default.nix b/nixpkgs/pkgs/tools/package-management/nix-prefetch-scripts/default.nix
new file mode 100644
index 000000000000..aca8c2fbb4de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-prefetch-scripts/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, makeWrapper, buildEnv
+, breezy, coreutils, cvs, findutils, gawk, git, git-lfs, gnused, mercurial, nix, subversion
+}:
+
+let mkPrefetchScript = tool: src: deps:
+  stdenv.mkDerivation {
+    name = "nix-prefetch-${tool}";
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    dontUnpack = true;
+
+    installPhase = ''
+      install -vD ${src} $out/bin/$name;
+      wrapProgram $out/bin/$name \
+        --prefix PATH : ${lib.makeBinPath (deps ++ [ gnused nix ])} \
+        --set HOME /homeless-shelter
+    '';
+
+    preferLocalBuild = true;
+
+    meta = with lib; {
+      description = "Script used to obtain source hashes for fetch${tool}";
+      maintainers = with maintainers; [ bennofs ];
+      platforms = platforms.unix;
+    };
+  };
+in rec {
+  nix-prefetch-bzr = mkPrefetchScript "bzr" ../../../build-support/fetchbzr/nix-prefetch-bzr [ breezy ];
+  nix-prefetch-cvs = mkPrefetchScript "cvs" ../../../build-support/fetchcvs/nix-prefetch-cvs [ cvs ];
+  nix-prefetch-git = mkPrefetchScript "git" ../../../build-support/fetchgit/nix-prefetch-git [ coreutils findutils gawk git git-lfs ];
+  nix-prefetch-hg  = mkPrefetchScript "hg"  ../../../build-support/fetchhg/nix-prefetch-hg   [ mercurial ];
+  nix-prefetch-svn = mkPrefetchScript "svn" ../../../build-support/fetchsvn/nix-prefetch-svn [ subversion ];
+
+  nix-prefetch-scripts = buildEnv {
+    name = "nix-prefetch-scripts";
+
+    paths = [ nix-prefetch-bzr nix-prefetch-cvs nix-prefetch-git nix-prefetch-hg nix-prefetch-svn ];
+
+    meta = with lib; {
+      description = "Collection of all the nix-prefetch-* scripts which may be used to obtain source hashes";
+      maintainers = with maintainers; [ bennofs ];
+      platforms = platforms.unix;
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-prefetch/default.nix b/nixpkgs/pkgs/tools/package-management/nix-prefetch/default.nix
new file mode 100644
index 000000000000..8ed71d078b78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-prefetch/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, installShellFiles, makeWrapper, asciidoc
+, docbook_xml_dtd_45, git, docbook_xsl, libxml2, libxslt, coreutils, gawk
+, gnugrep, gnused, jq, nix }:
+
+stdenv.mkDerivation rec {
+  pname = "nix-prefetch";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "msteen";
+    repo = "nix-prefetch";
+    rev = version;
+    sha256 = "0bwv6x651gyq703pywrhb7lfby6xwnd1iwnrzzjihipn7x3v2hz9";
+    # the stat call has to be in a subshell or we get the current date
+    postFetch = ''
+      echo $(stat -c %Y $out) > $out/.timestamp
+    '';
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-prefetching-hash-key.patch";
+      url = "https://github.com/msteen/nix-prefetch/commit/508237f48f7e2d8496ce54f38abbe57f44d0cbca.patch";
+      hash = "sha256-9SYPcRFZaVyNjMUVdXbef5eGvLp/kr379eU9lG5GgE0=";
+    })
+  ];
+
+  postPatch = ''
+    lib=$out/lib/${pname}
+
+    substituteInPlace doc/nix-prefetch.1.asciidoc \
+      --subst-var-by version $version
+
+    substituteInPlace src/main.sh \
+      --subst-var-by lib $lib \
+      --subst-var-by version $version
+
+    substituteInPlace src/tests.sh \
+      --subst-var-by bin $out/bin
+  '';
+
+  nativeBuildInputs = [
+    asciidoc
+    docbook_xml_dtd_45
+    docbook_xsl
+    installShellFiles
+    libxml2
+    libxslt
+    makeWrapper
+  ];
+
+  dontConfigure = true;
+
+  buildPhase = ''
+    a2x -a revdate=$(date --utc --date=@$(cat $src/.timestamp) +%d/%m/%Y) \
+      -f manpage doc/nix-prefetch.1.asciidoc
+  '';
+
+  installPhase = ''
+    install -Dm555 -t $lib src/*.sh
+    install -Dm444 -t $lib lib/*
+    makeWrapper $lib/main.sh $out/bin/${pname} \
+      --prefix PATH : ${lib.makeBinPath [ coreutils gawk git gnugrep gnused jq nix ]}
+
+    installManPage doc/nix-prefetch.?
+
+    installShellCompletion --name ${pname} contrib/nix-prefetch-completion.{bash,zsh}
+
+    mkdir -p $out/share/doc/${pname}/contrib
+    cp -r contrib/hello_rs $out/share/doc/${pname}/contrib
+  '';
+
+  meta = with lib; {
+    description = "Prefetch any fetcher function call, e.g. package sources";
+    license = licenses.mit;
+    maintainers = with maintainers; [ msteen ];
+    homepage = "https://github.com/msteen/nix-prefetch";
+    platforms = platforms.all;
+    mainProgram = "nix-prefetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-serve/default.nix b/nixpkgs/pkgs/tools/package-management/nix-serve/default.nix
new file mode 100644
index 000000000000..a149b490f5aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-serve/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bzip2
+, nix
+, perl
+, makeWrapper
+, nixosTests
+}:
+
+let
+  rev = "e4675e38ab54942e351c7686e40fabec822120b9";
+  sha256 = "1wm24p6pkxl1d7hrvf4ph6mwzawvqi22c60z9xzndn5xfyr4v0yr";
+in
+
+stdenv.mkDerivation {
+  pname = "nix-serve";
+  version = "0.2-${lib.substring 0 7 rev}";
+
+  src = fetchFromGitHub {
+    owner = "edolstra";
+    repo = "nix-serve";
+    inherit rev sha256;
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm0755 nix-serve.psgi $out/libexec/nix-serve/nix-serve.psgi
+
+    makeWrapper ${perl.withPackages(p: [ p.DBDSQLite p.Plack p.Starman nix.perl-bindings ])}/bin/starman $out/bin/nix-serve \
+                --prefix PATH : "${lib.makeBinPath [ bzip2 nix ]}" \
+                --add-flags $out/libexec/nix-serve/nix-serve.psgi
+  '';
+
+  passthru.tests = {
+    nix-serve = nixosTests.nix-serve;
+    nix-serve-ssh = nixosTests.nix-serve-ssh;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/edolstra/nix-serve";
+    description = "A utility for sharing a Nix store as a binary cache";
+    maintainers = [ maintainers.eelco ];
+    license = licenses.lgpl21;
+    platforms = nix.meta.platforms;
+    mainProgram = "nix-serve";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-simple-deploy/default.nix b/nixpkgs/pkgs/tools/package-management/nix-simple-deploy/default.nix
new file mode 100644
index 000000000000..647a11b01fdc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-simple-deploy/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, rustPlatform, makeWrapper, openssh, nix-serve }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nix-simple-deploy";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "misuzu";
+    repo = pname;
+    rev = version;
+    sha256 = "1qq4fbsd2mvxblsggwbnh88mj18f3vrfzv1kgc7a92pfiwxznq8r";
+  };
+
+  cargoSha256 = "1r6dl7qipbyyvjcd3l9ynawjln1g1qzvw5za6nyjcf41dzv48m8x";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/nix-simple-deploy" \
+      --prefix PATH : "${lib.makeBinPath [ openssh nix-serve ]}"
+  '';
+
+  meta = with lib; {
+    description = "Deploy software or an entire NixOS system configuration to another NixOS system";
+    homepage = "https://github.com/misuzu/nix-simple-deploy";
+    platforms = platforms.unix;
+    license = with licenses; [ asl20 /* OR */ mit ];
+    maintainers = with maintainers; [ misuzu ];
+    mainProgram = "nix-simple-deploy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-template/default.nix b/nixpkgs/pkgs/tools/package-management/nix-template/default.nix
new file mode 100644
index 000000000000..e1431532f857
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-template/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub
+, installShellFiles
+, makeWrapper
+, nix
+, openssl
+, pkg-config
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nix-template";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    name = "${pname}-${version}-src";
+    owner = "jonringer";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-42u5FmTIKHpfQ2zZQXIrFkAN2/XvU0wWnCRrQkQzcNI=";
+  };
+
+  cargoSha256 = "sha256-f8Th6SbV66Uukqh1Cb5uQVa844qw1PmBB9W7EMXMU4E=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
+
+  # needed for nix-prefetch-url
+  postInstall = ''
+    wrapProgram $out/bin/nix-template \
+      --prefix PATH : ${lib.makeBinPath [ nix ]}
+
+    installShellCompletion --cmd nix-template \
+      --bash <($out/bin/nix-template completions bash) \
+      --fish <($out/bin/nix-template completions fish) \
+      --zsh <($out/bin/nix-template completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "Make creating nix expressions easy";
+    homepage = "https://github.com/jonringer/nix-template/";
+    changelog = "https://github.com/jonringer/nix-template/releases/tag/v${version}";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ jonringer ];
+    mainProgram = "nix-template";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-top/default.nix b/nixpkgs/pkgs/tools/package-management/nix-top/default.nix
new file mode 100644
index 000000000000..dc49f2a739e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-top/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, ruby
+, makeWrapper
+, getent               # /etc/passwd
+, ncurses              # tput
+, binutils-unwrapped   # strings
+, coreutils
+, findutils
+}:
+
+# No gems used, so mkDerivation is fine.
+let
+  additionalPath = lib.makeBinPath [ getent ncurses binutils-unwrapped coreutils findutils ];
+in
+stdenv.mkDerivation rec {
+  pname = "nix-top";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "samueldr";
+    repo = "nix-top";
+    rev = "v${version}";
+    sha256 = "sha256-w/TKzbZmMt4CX2KnLwPvR1ydp5NNlp9nNx78jJvhp54=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    ruby
+  ];
+
+  installPhase = ''
+    mkdir -p $out/libexec/nix-top
+    install -D -m755 ./nix-top $out/bin/nix-top
+    wrapProgram $out/bin/nix-top \
+      --prefix PATH : "$out/libexec/nix-top:${additionalPath}"
+  '' + lib.optionalString stdenv.isDarwin ''
+    ln -s /bin/stty $out/libexec/nix-top
+  '';
+
+  meta = with lib; {
+    description = "Tracks what nix is building";
+    homepage = "https://github.com/samueldr/nix-top";
+    license = licenses.mit;
+    maintainers = with maintainers; [ samueldr ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "nix-top";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-universal-prefetch/default.nix b/nixpkgs/pkgs/tools/package-management/nix-universal-prefetch/default.nix
new file mode 100644
index 000000000000..be31ca34ad60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-universal-prefetch/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv
+, fetchFromGitHub
+, ruby
+}:
+
+# No gems used, so mkDerivation is fine.
+stdenv.mkDerivation rec {
+  pname = "nix-universal-prefetch";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "samueldr";
+    repo = "nix-universal-prefetch";
+    rev = "v${version}";
+    sha256 = "sha256-HGn4qHWqpUwlS3yQrD3j5oH0yOlphsoSPD2vkyyRv+0=";
+  };
+
+  installPhase = ''
+    mkdir -pv $out/bin
+    cp nix-universal-prefetch $out/bin/nix-universal-prefetch
+    substituteInPlace "$out/bin/nix-universal-prefetch" \
+      --replace "/usr/bin/env nix-shell" "${ruby}/bin/ruby"
+  '';
+
+  meta = with lib; {
+    description = "Uses nixpkgs fetchers to figure out hashes";
+    homepage = "https://github.com/samueldr/nix-universal-prefetch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ samueldr ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "nix-universal-prefetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-update-source/default.nix b/nixpkgs/pkgs/tools/package-management/nix-update-source/default.nix
new file mode 100644
index 000000000000..533f487e3974
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-update-source/default.nix
@@ -0,0 +1,59 @@
+{ lib, pkgs, fetchFromGitHub, python3Packages, nix-prefetch-scripts, runtimeShell }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "nix-update-source";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "timbertson";
+    repo = "nix-update-source";
+    rev = "version-${version}";
+    sha256 = "157wvv9vnaszzwbj68jpdc0imcm1hdab3z760bx2axbsgfpqqilz";
+  };
+
+  propagatedBuildInputs = [ nix-prefetch-scripts ];
+
+  doCheck = false;
+
+  passthru = {
+    # NOTE: `fetch` should not be used within nixpkgs because it
+    # uses a non-idiomatic structure. It is provided for use by
+    # out-of-tree nix derivations.
+    fetch = path:
+      let
+        fetchers = {
+          # whitelist of allowed fetchers
+          inherit (pkgs) fetchgit fetchurl fetchFromGitHub;
+        };
+        json = lib.importJSON path;
+        fetchFn = builtins.getAttr json.fetch.fn fetchers;
+        src = fetchFn json.fetch.args;
+      in
+      json // json.fetch // {
+        inherit src;
+        overrideSrc = drv: lib.overrideDerivation drv (orig: { inherit src; });
+      };
+
+    updateScript = ''
+      #!${runtimeShell}
+      set -e
+      echo
+      cd ${toString ./.}
+      ${pkgs.nix-update-source}/bin/nix-update-source \
+        --prompt version \
+        --replace-attr version \
+        --set owner timbertson \
+        --set repo nix-update-source \
+        --set type fetchFromGitHub \
+        --set rev 'version-{version}' \
+        --modify-nix default.nix
+    '';
+  };
+
+  meta = {
+    description = "Utility to automate updating of nix derivation sources";
+    maintainers = with lib.maintainers; [ timbertson ];
+    license = lib.licenses.mit;
+    mainProgram = "nix-update-source";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-update/default.nix b/nixpkgs/pkgs/tools/package-management/nix-update/default.nix
new file mode 100644
index 000000000000..8ccdd08a25e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-update/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, python3
+, fetchFromGitHub
+, nix
+, nix-prefetch-git
+, nixpkgs-fmt
+, nixpkgs-review
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "nix-update";
+  version = "1.2.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "Mic92";
+    repo = pname;
+    rev = version;
+    hash = "sha256-/Lv4wO4mCOwk8lNdfiQq2U+PhgeEeSnh89I2N7fxEpE=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.setuptools
+  ];
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ nix nix-prefetch-git nixpkgs-fmt nixpkgs-review ])
+  ];
+
+  checkPhase = ''
+    $out/bin/nix-update --help >/dev/null
+  '';
+
+  meta = with lib; {
+    description = "Swiss-knife for updating nix packages";
+    inherit (src.meta) homepage;
+    changelog = "https://github.com/Mic92/nix-update/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda mic92 zowoq ];
+    mainProgram = "nix-update";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix/common.nix b/nixpkgs/pkgs/tools/package-management/nix/common.nix
new file mode 100644
index 000000000000..f53adfa8a085
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix/common.nix
@@ -0,0 +1,260 @@
+{ lib
+, fetchFromGitHub
+, version
+, suffix ? ""
+, hash ? null
+, src ? fetchFromGitHub { owner = "NixOS"; repo = "nix"; rev = version; inherit hash; }
+, patches ? [ ]
+, maintainers ? with lib.maintainers; [ eelco lovesegfault artturin ma27 ]
+}@args:
+assert (hash == null) -> (src != null);
+let
+  atLeast24 = lib.versionAtLeast version "2.4pre";
+  atLeast25 = lib.versionAtLeast version "2.5pre";
+  atLeast27 = lib.versionAtLeast version "2.7pre";
+  atLeast210 = lib.versionAtLeast version "2.10pre";
+  atLeast213 = lib.versionAtLeast version "2.13pre";
+  atLeast214 = lib.versionAtLeast version "2.14pre";
+in
+{ stdenv
+, autoconf-archive
+, autoreconfHook
+, bash
+, bison
+, boehmgc
+, boost
+, brotli
+, busybox-sandbox-shell
+, bzip2
+, callPackage
+, coreutils
+, curl
+, docbook_xsl_ns
+, docbook5
+, editline
+, flex
+, gnutar
+, gtest
+, gzip
+, jq
+, lib
+, libarchive
+, libcpuid
+, libsodium
+, libxml2
+, libxslt
+, lowdown
+, mdbook
+, mdbook-linkcheck
+, nlohmann_json
+, openssl
+, perl
+, pkg-config
+, rapidcheck
+, Security
+, sqlite
+, util-linuxMinimal
+, xz
+
+, enableDocumentation ? !atLeast24 || (
+    (stdenv.hostPlatform == stdenv.buildPlatform) &&
+    # mdbook errors out on risc-v due to a rustc bug
+    # https://github.com/NixOS/nixpkgs/pull/242019
+    # https://github.com/rust-lang/rust/issues/114473
+    !stdenv.buildPlatform.isRiscV
+  )
+, enableStatic ? stdenv.hostPlatform.isStatic
+, withAWS ? !enableStatic && (stdenv.isLinux || stdenv.isDarwin), aws-sdk-cpp
+, withLibseccomp ? lib.meta.availableOn stdenv.hostPlatform libseccomp, libseccomp
+
+, confDir
+, stateDir
+, storeDir
+
+  # passthru tests
+, pkgsi686Linux
+}: let
+self = stdenv.mkDerivation {
+  pname = "nix";
+
+  version = "${version}${suffix}";
+  VERSION_SUFFIX = suffix;
+
+  inherit src patches;
+
+  outputs =
+    [ "out" "dev" ]
+    ++ lib.optionals enableDocumentation [ "man" "doc" ];
+
+  hardeningEnable = lib.optionals (!stdenv.isDarwin) [ "pie" ];
+
+  hardeningDisable = lib.optional stdenv.hostPlatform.isMusl "fortify";
+
+  nativeBuildInputs = [
+    pkg-config
+    autoconf-archive
+    autoreconfHook
+    bison
+    flex
+    jq
+  ] ++ lib.optionals (enableDocumentation && !atLeast24) [
+    libxslt
+    libxml2
+    docbook_xsl_ns
+    docbook5
+  ] ++ lib.optionals (enableDocumentation && atLeast24) [
+    (lib.getBin lowdown)
+    mdbook
+  ] ++ lib.optionals (atLeast213 && enableDocumentation) [
+    mdbook-linkcheck
+  ] ++ lib.optionals stdenv.isLinux [
+    util-linuxMinimal
+  ];
+
+  buildInputs = [
+    boost
+    brotli
+    bzip2
+    curl
+    editline
+    libsodium
+    openssl
+    sqlite
+    xz
+    gtest
+    libarchive
+    lowdown
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ] ++ lib.optionals (stdenv.isx86_64) [
+    libcpuid
+  ] ++ lib.optionals atLeast214 [
+    rapidcheck
+  ] ++ lib.optionals withLibseccomp [
+    libseccomp
+  ] ++ lib.optionals withAWS [
+    aws-sdk-cpp
+  ];
+
+  propagatedBuildInputs = [
+    boehmgc
+  ] ++ lib.optionals (atLeast27) [
+    nlohmann_json
+  ];
+
+  postPatch = ''
+    patchShebangs --build tests
+  '';
+
+  preConfigure =
+    # Copy libboost_context so we don't get all of Boost in our closure.
+    # https://github.com/NixOS/nixpkgs/issues/45462
+    lib.optionalString (!enableStatic) ''
+      mkdir -p $out/lib
+      cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
+      rm -f $out/lib/*.a
+      ${lib.optionalString stdenv.isLinux ''
+        chmod u+w $out/lib/*.so.*
+        patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
+      ''}
+    '' +
+    # On all versions before c9f51e87057652db0013289a95deffba495b35e7, which
+    # removes config.nix entirely and is not present in 2.3.x, we need to
+    # patch around an issue where the Nix configure step pulls in the build
+    # system's bash and other utilities when cross-compiling.
+    lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform && !atLeast24) ''
+      mkdir tmp/
+      substitute corepkgs/config.nix.in tmp/config.nix.in \
+        --subst-var-by bash ${bash}/bin/bash \
+        --subst-var-by coreutils ${coreutils}/bin \
+        --subst-var-by bzip2 ${bzip2}/bin/bzip2 \
+        --subst-var-by gzip ${gzip}/bin/gzip \
+        --subst-var-by xz ${xz}/bin/xz \
+        --subst-var-by tar ${gnutar}/bin/tar \
+        --subst-var-by tr ${coreutils}/bin/tr
+      mv tmp/config.nix.in corepkgs/config.nix.in
+    '';
+
+  configureFlags = [
+    "--with-store-dir=${storeDir}"
+    "--localstatedir=${stateDir}"
+    "--sysconfdir=${confDir}"
+    "--enable-gc"
+  ] ++ lib.optionals (!enableDocumentation) [
+    "--disable-doc-gen"
+  ] ++ lib.optionals stdenv.isLinux [
+    "--with-sandbox-shell=${busybox-sandbox-shell}/bin/busybox"
+  ] ++ lib.optionals (atLeast210 && stdenv.isLinux && stdenv.hostPlatform.isStatic) [
+    "--enable-embedded-sandbox-shell"
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform ? nix && stdenv.hostPlatform.nix ? system) [
+    "--with-system=${stdenv.hostPlatform.nix.system}"
+  ] ++ lib.optionals (!withLibseccomp) [
+    # RISC-V support in progress https://github.com/seccomp/libseccomp/pull/50
+    "--disable-seccomp-sandboxing"
+  ] ++ lib.optionals (atLeast210 && stdenv.cc.isGNU && !enableStatic) [
+    "--enable-lto"
+  ];
+
+  makeFlags = [
+    # gcc runs multi-threaded LTO using make and does not yet detect the new fifo:/path style
+    # of make jobserver. until gcc adds support for this we have to instruct make to use this
+    # old style or LTO builds will run their linking on only one thread, which takes forever.
+    "--jobserver-style=pipe"
+    "profiledir=$(out)/etc/profile.d"
+  ] ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "PRECOMPILE_HEADERS=0"
+    ++ lib.optional (stdenv.hostPlatform.isDarwin) "PRECOMPILE_HEADERS=1";
+
+  installFlags = [ "sysconfdir=$(out)/etc" ];
+
+  doInstallCheck = true;
+  installCheckTarget = if atLeast210 then "installcheck" else null;
+
+  # socket path becomes too long otherwise
+  preInstallCheck = lib.optionalString stdenv.isDarwin ''
+    export TMPDIR=$NIX_BUILD_TOP
+  ''
+  # Prevent crashes in libcurl due to invoking Objective-C `+initialize` methods after `fork`.
+  # See http://sealiesoftware.com/blog/archive/2017/6/5/Objective-C_and_fork_in_macOS_1013.html.
+  + lib.optionalString stdenv.isDarwin ''
+    export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
+  ''
+  # See https://github.com/NixOS/nix/issues/5687
+  + lib.optionalString (atLeast25 && stdenv.isDarwin) ''
+    echo "exit 99" > tests/gc-non-blocking.sh
+  '';
+
+  separateDebugInfo = stdenv.isLinux && (atLeast24 -> !enableStatic);
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    inherit aws-sdk-cpp boehmgc;
+
+    perl-bindings = perl.pkgs.toPerlModule (callPackage ./nix-perl.nix { nix = self; inherit Security; });
+
+    tests = {
+      nixi686 = pkgsi686Linux.nixVersions.${"nix_${lib.versions.major version}_${lib.versions.minor version}"};
+    };
+  };
+
+  # point 'nix edit' and ofborg at the file that defines the attribute,
+  # not this common file.
+  pos = builtins.unsafeGetAttrPos "version" args;
+  meta = with lib; {
+    description = "Powerful package manager that makes package management reliable and reproducible";
+    longDescription = ''
+      Nix is a powerful package manager for Linux and other Unix systems that
+      makes package management reliable and reproducible. It provides atomic
+      upgrades and rollbacks, side-by-side installation of multiple versions of
+      a package, multi-user package management and easy setup of build
+      environments.
+    '';
+    homepage = "https://nixos.org/";
+    license = licenses.lgpl2Plus;
+    inherit maintainers;
+    platforms = platforms.unix;
+    outputsToInstall = [ "out" ] ++ optional enableDocumentation "man";
+    mainProgram = "nix";
+  };
+};
+in self
diff --git a/nixpkgs/pkgs/tools/package-management/nix/default.nix b/nixpkgs/pkgs/tools/package-management/nix/default.nix
new file mode 100644
index 000000000000..c3f970f78fb3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix/default.nix
@@ -0,0 +1,277 @@
+{ lib
+, config
+, aws-sdk-cpp
+, boehmgc
+, callPackage
+, fetchFromGitHub
+, fetchpatch
+, fetchpatch2
+, runCommand
+, Security
+
+, storeDir ? "/nix/store"
+, stateDir ? "/nix/var"
+, confDir ? "/etc"
+}:
+let
+  boehmgc-nix_2_3 = boehmgc.override { enableLargeConfig = true; };
+
+  boehmgc-nix = boehmgc-nix_2_3.overrideAttrs (drv: {
+    # Part of the GC solution in https://github.com/NixOS/nix/pull/4944
+    patches = (drv.patches or [ ]) ++ [ ./patches/boehmgc-coroutine-sp-fallback.patch ];
+  });
+
+  # old nix fails to build with newer aws-sdk-cpp and the patch doesn't apply
+  aws-sdk-cpp-old-nix = (aws-sdk-cpp.override {
+    apis = [ "s3" "transfer" ];
+    customMemoryManagement = false;
+  }).overrideAttrs (args: rec {
+    # intentionally overriding postPatch
+    version = "1.9.294";
+
+    src = fetchFromGitHub {
+      owner = "aws";
+      repo = "aws-sdk-cpp";
+      rev = version;
+      hash = "sha256-Z1eRKW+8nVD53GkNyYlZjCcT74MqFqqRMeMc33eIQ9g=";
+    };
+    postPatch = ''
+      # Avoid blanket -Werror to evade build failures on less
+      # tested compilers.
+      substituteInPlace cmake/compiler_settings.cmake \
+        --replace '"-Werror"' ' '
+
+      # Missing includes for GCC11
+      sed '5i#include <thread>' -i \
+        aws-cpp-sdk-cloudfront-integration-tests/CloudfrontOperationTest.cpp \
+        aws-cpp-sdk-cognitoidentity-integration-tests/IdentityPoolOperationTest.cpp \
+        aws-cpp-sdk-dynamodb-integration-tests/TableOperationTest.cpp \
+        aws-cpp-sdk-elasticfilesystem-integration-tests/ElasticFileSystemTest.cpp \
+        aws-cpp-sdk-lambda-integration-tests/FunctionTest.cpp \
+        aws-cpp-sdk-mediastore-data-integration-tests/MediaStoreDataTest.cpp \
+        aws-cpp-sdk-queues/source/sqs/SQSQueue.cpp \
+        aws-cpp-sdk-redshift-integration-tests/RedshiftClientTest.cpp \
+        aws-cpp-sdk-s3-crt-integration-tests/BucketAndObjectOperationTest.cpp \
+        aws-cpp-sdk-s3-integration-tests/BucketAndObjectOperationTest.cpp \
+        aws-cpp-sdk-s3control-integration-tests/S3ControlTest.cpp \
+        aws-cpp-sdk-sqs-integration-tests/QueueOperationTest.cpp \
+        aws-cpp-sdk-transfer-tests/TransferTests.cpp
+      # Flaky on Hydra
+      rm aws-cpp-sdk-core-tests/aws/auth/AWSCredentialsProviderTest.cpp
+      # Includes aws-c-auth private headers, so only works with submodule build
+      rm aws-cpp-sdk-core-tests/aws/auth/AWSAuthSignerTest.cpp
+      # TestRandomURLMultiThreaded fails
+      rm aws-cpp-sdk-core-tests/http/HttpClientTest.cpp
+    '' + lib.optionalString aws-sdk-cpp.stdenv.isi686 ''
+      # EPSILON is exceeded
+      rm aws-cpp-sdk-core-tests/aws/client/AdaptiveRetryStrategyTest.cpp
+    '';
+
+    patches = (args.patches or [ ]) ++ [ ./patches/aws-sdk-cpp-TransferManager-ContentEncoding.patch ];
+
+    # only a stripped down version is build which takes a lot less resources to build
+    requiredSystemFeatures = [ ];
+  });
+
+  aws-sdk-cpp-nix = (aws-sdk-cpp.override {
+    apis = [ "s3" "transfer" ];
+    customMemoryManagement = false;
+  }).overrideAttrs {
+    # only a stripped down version is build which takes a lot less resources to build
+    requiredSystemFeatures = [ ];
+  };
+
+
+  common = args:
+    callPackage
+      (import ./common.nix ({ inherit lib fetchFromGitHub; } // args))
+      {
+        inherit Security storeDir stateDir confDir;
+        boehmgc = boehmgc-nix;
+        aws-sdk-cpp = if lib.versionAtLeast args.version "2.12pre" then aws-sdk-cpp-nix else aws-sdk-cpp-old-nix;
+      };
+
+  # https://github.com/NixOS/nix/pull/7585
+  patch-monitorfdhup = fetchpatch2 {
+    name = "nix-7585-monitor-fd-hup.patch";
+    url = "https://github.com/NixOS/nix/commit/1df3d62c769dc68c279e89f68fdd3723ed3bcb5a.patch";
+    hash = "sha256-f+F0fUO+bqyPXjt+IXJtISVr589hdc3y+Cdrxznb+Nk=";
+  };
+
+  # https://github.com/NixOS/nix/pull/7473
+  patch-sqlite-exception = fetchpatch2 {
+    name = "nix-7473-sqlite-exception-add-message.patch";
+    url = "https://github.com/hercules-ci/nix/commit/c965f35de71cc9d88f912f6b90fd7213601e6eb8.patch";
+    hash = "sha256-tI5nKU7SZgsJrxiskJ5nHZyfrWf5aZyKYExM0792N80=";
+  };
+
+  patch-non-existing-output = fetchpatch {
+    # https://github.com/NixOS/nix/pull/7283
+    name = "fix-requires-non-existing-output.patch";
+    url = "https://github.com/NixOS/nix/commit/3ade5f5d6026b825a80bdcc221058c4f14e10a27.patch";
+    hash = "sha256-s1ybRFCjQaSGj7LKu0Z5g7UiHqdJGeD+iPoQL0vaiS0=";
+  };
+
+  patch-rapidcheck-shared = fetchpatch2 {
+    # https://github.com/NixOS/nix/pull/9431
+    name = "fix-missing-librapidcheck.patch";
+    url = "https://github.com/NixOS/nix/commit/46131567da96ffac298b9ec54016b37114b0dfd5.patch";
+    hash = "sha256-lShYxYKRDWwBqCysAFmFBudhhAL1eendWcL8sEFLCGg=";
+  };
+
+  # Intentionally does not support overrideAttrs etc
+  # Use only for tests that are about the package relation to `pkgs` and/or NixOS.
+  addTestsShallowly = tests: pkg: pkg // {
+    tests = pkg.tests // tests;
+    # In case someone reads the wrong attribute
+    passthru.tests = pkg.tests // tests;
+  };
+
+  addFallbackPathsCheck = pkg: addTestsShallowly
+    { nix-fallback-paths =
+        runCommand "test-nix-fallback-paths-version-equals-nix-stable" {
+          paths = lib.concatStringsSep "\n" (builtins.attrValues (import ../../../../nixos/modules/installer/tools/nix-fallback-paths.nix));
+        } ''
+          if [[ "" != $(grep -v 'nix-${pkg.version}$' <<< "$paths") ]]; then
+            echo "nix-fallback-paths not up to date with nixVersions.stable (nix-${pkg.version})"
+            echo "The following paths are not up to date:"
+            grep -v 'nix-${pkg.version}$' <<< "$paths"
+            echo
+            echo "Fix it by running in nixpkgs:"
+            echo
+            echo "curl https://releases.nixos.org/nix/nix-${pkg.version}/fallback-paths.nix >nixos/modules/installer/tools/nix-fallback-paths.nix"
+            echo
+            exit 1
+          else
+            echo "nix-fallback-paths versions up to date"
+            touch $out
+          fi
+        '';
+    }
+    pkg;
+
+in lib.makeExtensible (self: ({
+  nix_2_3 = (common {
+    version = "2.3.17";
+    hash = "sha256-EK0pgHDekJFqr0oMj+8ANIjq96WPjICe2s0m4xkUdH4=";
+    patches = [
+      patch-monitorfdhup
+    ];
+    maintainers = with lib.maintainers; [ flokli raitobezarius ];
+  }).override { boehmgc = boehmgc-nix_2_3; };
+
+  nix_2_10 = common {
+    version = "2.10.3";
+    hash = "sha256-B9EyDUz/9tlcWwf24lwxCFmkxuPTVW7HFYvp0C4xGbc=";
+    patches = [
+      ./patches/flaky-tests.patch
+      patch-non-existing-output
+      patch-monitorfdhup
+      patch-sqlite-exception
+    ];
+  };
+
+  nix_2_11 = common {
+    version = "2.11.1";
+    hash = "sha256-qCV65kw09AG+EkdchDPq7RoeBznX0Q6Qa4yzPqobdOk=";
+    patches = [
+      ./patches/flaky-tests.patch
+      patch-non-existing-output
+      patch-monitorfdhup
+      patch-sqlite-exception
+    ];
+  };
+
+  nix_2_12 = common {
+    version = "2.12.1";
+    hash = "sha256-GmHKhq0uFtdOiJnuBwj2YwlZjvh6YTkfQZgeu4e0dLU=";
+    patches = [
+      ./patches/flaky-tests.patch
+      patch-monitorfdhup
+      patch-sqlite-exception
+    ];
+  };
+
+  nix_2_13 = common {
+    version = "2.13.6";
+    hash = "sha256-pd2yGmHWn4njfbrSP6cMJx8qL+yeGieqcbLNICzcRFs=";
+  };
+
+  nix_2_14 = common {
+    version = "2.14.1";
+    hash = "sha256-5aCmGZbsFcLIckCDfvnPD4clGPQI7qYAqHYlttN/Wkg=";
+    patches = [
+      patch-rapidcheck-shared
+    ];
+  };
+
+  nix_2_15 = common {
+    version = "2.15.3";
+    hash = "sha256-sfFXbjC5iIdSAbctZIuFozxX0uux/KFBNr9oh33xINs=";
+    patches = [
+      patch-rapidcheck-shared
+    ];
+  };
+
+  nix_2_16 = common {
+    version = "2.16.2";
+    hash = "sha256-VXIYCDkvAWeMoU0W2ZI0TeOszCZA1o8trz6YCPFD5ac=";
+    patches = [
+      patch-rapidcheck-shared
+    ];
+  };
+
+  nix_2_17 = common {
+    version = "2.17.1";
+    hash = "sha256-Q5L+rHzjp0bYuR2ogg+YPCn6isjmlQ4CJVT0zpn/hFc=";
+    patches = [
+      patch-rapidcheck-shared
+    ];
+  };
+
+  nix_2_18 = common {
+    version = "2.18.1";
+    hash = "sha256-WNmifcTsN9aG1ONkv+l2BC4sHZZxtNKy0keqBHXXQ7w=";
+    patches = [
+      patch-rapidcheck-shared
+    ];
+  };
+
+  nix_2_19 = common {
+    version = "2.19.3";
+    hash = "sha256-EtL6M0H5+0mFbFh+teVjm+0B+xmHoKwtBvigS5NMWoo=";
+  };
+
+  # The minimum Nix version supported by Nixpkgs
+  # Note that some functionality *might* have been backported into this Nix version,
+  # making this package an inaccurate representation of what features are available
+  # in the actual lowest minver.nix *patch* version.
+  minimum =
+    let
+      minver = import ../../../../lib/minver.nix;
+      major = lib.versions.major minver;
+      minor = lib.versions.minor minver;
+      attribute = "nix_${major}_${minor}";
+      nix = self.${attribute};
+    in
+    if ! self ? ${attribute} then
+      throw "The minimum supported Nix version is ${minver} (declared in lib/minver.nix), but pkgs.nixVersions.${attribute} does not exist."
+    else
+      nix;
+
+  stable = addFallbackPathsCheck self.nix_2_18;
+
+  unstable = self.nix_2_19;
+} // lib.optionalAttrs config.allowAliases {
+  nix_2_4 = throw "nixVersions.nix_2_4 has been removed";
+
+  nix_2_5 = throw "nixVersions.nix_2_5 has been removed";
+
+  nix_2_6 = throw "nixVersions.nix_2_6 has been removed";
+
+  nix_2_7 = throw "nixVersions.nix_2_7 has been removed";
+
+  nix_2_8 = throw "nixVersions.nix_2_8 has been removed";
+
+  nix_2_9 = throw "nixVersions.nix_2_9 has been removed";
+}))
diff --git a/nixpkgs/pkgs/tools/package-management/nix/nix-perl.nix b/nixpkgs/pkgs/tools/package-management/nix/nix-perl.nix
new file mode 100644
index 000000000000..0796a0914f1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix/nix-perl.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, lib
+, perl
+, pkg-config
+, curl
+, nix
+, libsodium
+, boost
+, autoreconfHook
+, autoconf-archive
+, nlohmann_json
+, Security
+}:
+
+stdenv.mkDerivation {
+  pname = "nix-perl";
+  inherit (nix) version src;
+
+  postUnpack = "sourceRoot=$sourceRoot/perl";
+
+  buildInputs = lib.optional (stdenv.isDarwin) Security;
+
+  # This is not cross-compile safe, don't have time to fix right now
+  # but noting for future travellers.
+  nativeBuildInputs = [
+    autoconf-archive
+    autoreconfHook
+    boost
+    curl
+    libsodium
+    nix
+    nlohmann_json
+    perl
+    pkg-config
+  ];
+
+  configureFlags = [
+    "--with-dbi=${perl.pkgs.DBI}/${perl.libPrefix}"
+    "--with-dbd-sqlite=${perl.pkgs.DBDSQLite}/${perl.libPrefix}"
+  ];
+
+  preConfigure = "export NIX_STATE_DIR=$TMPDIR";
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix/patches/aws-sdk-cpp-TransferManager-ContentEncoding.patch b/nixpkgs/pkgs/tools/package-management/nix/patches/aws-sdk-cpp-TransferManager-ContentEncoding.patch
new file mode 100644
index 000000000000..59cc305a60bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix/patches/aws-sdk-cpp-TransferManager-ContentEncoding.patch
@@ -0,0 +1,127 @@
+From 7d58e303159b2fb343af9a1ec4512238efa147c7 Mon Sep 17 00:00:00 2001
+From: Eelco Dolstra <edolstra@gmail.com>
+Date: Mon, 6 Aug 2018 17:15:04 +0200
+Subject: [PATCH] TransferManager: Allow setting a content-encoding for S3 uploads
+
+--- a/aws-cpp-sdk-transfer/include/aws/transfer/TransferHandle.h
++++ b/aws-cpp-sdk-transfer/include/aws/transfer/TransferHandle.h
+@@ -297,6 +297,14 @@ namespace Aws
+              * Content type of the object being transferred
+              */
+             inline void SetContentType(const Aws::String& value) { std::lock_guard<std::mutex> locker(m_getterSetterLock); m_contentType = value; }
++            /**
++             * Content encoding of the object being transferred
++             */
++            inline const Aws::String GetContentEncoding() const { std::lock_guard<std::mutex> locker(m_getterSetterLock); return m_contentEncoding; }
++            /**
++             * Content type of the object being transferred
++             */
++            inline void SetContentEncoding(const Aws::String& value) { std::lock_guard<std::mutex> locker(m_getterSetterLock); m_contentEncoding = value; }
+             /**
+              * In case of an upload, this is the metadata that was placed on the object when it was uploaded.
+              * In the case of a download, this is the object metadata from the GetObject operation.
+@@ -383,6 +391,7 @@ namespace Aws
+             Aws::String m_key;
+             Aws::String m_fileName;
+             Aws::String m_contentType;
++            Aws::String m_contentEncoding;
+             Aws::String m_versionId;
+             Aws::Map<Aws::String, Aws::String> m_metadata;
+             TransferStatus m_status;
+--- a/aws-cpp-sdk-transfer/include/aws/transfer/TransferManager.h
++++ b/aws-cpp-sdk-transfer/include/aws/transfer/TransferManager.h
+@@ -154,7 +154,8 @@ namespace Aws
+                                                        const Aws::String& keyName,
+                                                        const Aws::String& contentType, 
+                                                        const Aws::Map<Aws::String, Aws::String>& metadata,
+-                                                       const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr);
++                                                       const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr,
++                                                       const Aws::String& contentEncoding = "");
+ 
+             /**
+              * Downloads the contents of bucketName/keyName in S3 to the file specified by writeToFile. This will perform a GetObject operation.
+@@ -246,7 +247,8 @@ namespace Aws
+                                                                    const Aws::Map<Aws::String,
+                                                                    Aws::String>& metadata,
+                                                                    const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
+-                                                                   const Aws::String& fileName = "");
++                                                                   const Aws::String& fileName = "",
++                                                                   const Aws::String& contentEncoding = "");
+ 
+             /**
+              * Submits the actual task to task schecduler
+@@ -262,7 +264,8 @@ namespace Aws
+                                                          const Aws::String& keyName,
+                                                          const Aws::String& contentType,
+                                                          const Aws::Map<Aws::String, Aws::String>& metadata,
+-                                                         const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context);
++                                                         const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
++                                                         const Aws::String& contentEncoding);
+ 
+             /**
+              * Uploads the contents of file, to bucketName/keyName in S3. contentType and metadata will be added to the object. If the object is larger than the configured bufferSize,
+--- a/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp
++++ b/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp
+@@ -87,9 +87,10 @@ namespace Aws
+                                                                     const Aws::String& bucketName,
+                                                                     const Aws::String& keyName, const Aws::String& contentType,
+                                                                     const Aws::Map<Aws::String, Aws::String>& metadata,
+-                                                                    const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context)
++                                                                    const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
++                                                                    const Aws::String& contentEncoding)
+         {
+-            return this->DoUploadFile(fileStream, bucketName, keyName, contentType, metadata, context);
++            return this->DoUploadFile(fileStream, bucketName, keyName, contentType, metadata, context, contentEncoding);
+         }
+ 
+         std::shared_ptr<TransferHandle> TransferManager::DownloadFile(const Aws::String& bucketName,
+@@ -286,6 +287,9 @@ namespace Aws
+                 createMultipartRequest.WithKey(handle->GetKey());
+                 createMultipartRequest.WithMetadata(handle->GetMetadata());
+ 
++                if (handle->GetContentEncoding() != "")
++                    createMultipartRequest.WithContentEncoding(handle->GetContentEncoding());
++
+                 auto createMultipartResponse = m_transferConfig.s3Client->CreateMultipartUpload(createMultipartRequest);
+                 if (createMultipartResponse.IsSuccess())
+                 {
+@@ -441,6 +445,9 @@ namespace Aws
+ 
+             putObjectRequest.SetContentType(handle->GetContentType());
+ 
++            if (handle->GetContentEncoding() != "")
++                putObjectRequest.SetContentEncoding(handle->GetContentEncoding());
++
+             auto buffer = m_bufferManager.Acquire();
+ 
+             auto lengthToWrite = (std::min)(m_transferConfig.bufferSize, handle->GetBytesTotalSize());
+@@ -1140,12 +1147,15 @@ namespace Aws
+                                                                                 const Aws::String& contentType,
+                                                                                 const Aws::Map<Aws::String, Aws::String>& metadata,
+                                                                                 const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
+-                                                                                const Aws::String& fileName)
++                                                                                const Aws::String& fileName,
++                                                                                const Aws::String& contentEncoding)
+         {
+             auto handle = Aws::MakeShared<TransferHandle>(CLASS_TAG, bucketName, keyName, 0, fileName);
+             handle->SetContentType(contentType);
+             handle->SetMetadata(metadata);
+             handle->SetContext(context);
++            if (contentEncoding != "")
++                handle->SetContentEncoding(contentEncoding);
+ 
+             if (!fileStream->good())
+             {
+@@ -1213,9 +1223,10 @@ namespace Aws
+                                                                       const Aws::String& keyName,
+                                                                       const Aws::String& contentType,
+                                                                       const Aws::Map<Aws::String, Aws::String>& metadata,
+-                                                                      const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context)
++                                                                      const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
++                                                                      const Aws::String& contentEncoding)
+         {
+-            auto handle = CreateUploadFileHandle(fileStream.get(), bucketName, keyName, contentType, metadata, context);
++            auto handle = CreateUploadFileHandle(fileStream.get(), bucketName, keyName, contentType, metadata, context, "", contentEncoding);
+             return SubmitUpload(handle, fileStream);
+         }
+ 
diff --git a/nixpkgs/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch b/nixpkgs/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch
new file mode 100644
index 000000000000..578bd325d56b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch
@@ -0,0 +1,45 @@
+diff --git a/pthread_stop_world.c b/pthread_stop_world.c
+index 2b45489..0e6d8ef 100644
+--- a/pthread_stop_world.c
++++ b/pthread_stop_world.c
+@@ -776,6 +776,8 @@ STATIC void GC_restart_handler(int sig)
+ /* world is stopped.  Should not fail if it isn't.                      */
+ GC_INNER void GC_push_all_stacks(void)
+ {
++    size_t stack_limit;
++    pthread_attr_t pattr;
+     GC_bool found_me = FALSE;
+     size_t nthreads = 0;
+     int i;
+@@ -868,6 +870,31 @@ GC_INNER void GC_push_all_stacks(void)
+             hi = p->altstack + p->altstack_size;
+ #         endif
+           /* FIXME: Need to scan the normal stack too, but how ? */
++        } else {
++          if (pthread_getattr_np(p->id, &pattr)) {
++            ABORT("GC_push_all_stacks: pthread_getattr_np failed!");
++          }
++          if (pthread_attr_getstacksize(&pattr, &stack_limit)) {
++            ABORT("GC_push_all_stacks: pthread_attr_getstacksize failed!");
++          }
++          if (pthread_attr_destroy(&pattr)) {
++            ABORT("GC_push_all_stacks: pthread_attr_destroy failed!");
++          }
++          // When a thread goes into a coroutine, we lose its original sp until
++          // control flow returns to the thread.
++          // While in the coroutine, the sp points outside the thread stack,
++          // so we can detect this and push the entire thread stack instead,
++          // as an approximation.
++          // We assume that the coroutine has similarly added its entire stack.
++          // This could be made accurate by cooperating with the application
++          // via new functions and/or callbacks.
++          #ifndef STACK_GROWS_UP
++            if (lo >= hi || lo < hi - stack_limit) { // sp outside stack
++              lo = hi - stack_limit;
++            }
++          #else
++          #error "STACK_GROWS_UP not supported in boost_coroutine2 (as of june 2021), so we don't support it in Nix."
++          #endif
+         }
+ #       ifdef STACKPTR_CORRECTOR_AVAILABLE
+           if (GC_sp_corrector != 0)
diff --git a/nixpkgs/pkgs/tools/package-management/nix/patches/flaky-tests.patch b/nixpkgs/pkgs/tools/package-management/nix/patches/flaky-tests.patch
new file mode 100644
index 000000000000..3684b09f6ffa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix/patches/flaky-tests.patch
@@ -0,0 +1,12 @@
+diff --git a/mk/run_test.sh b/mk/run_test.sh
+index 7e95df2ac..58420c317 100755
+--- a/mk/run_test.sh
++++ b/mk/run_test.sh
+@@ -27,7 +27,6 @@ run_test "$1"
+ # appear randomly without anyone knowing why.
+ # See https://github.com/NixOS/nix/issues/3605 for more info
+ if [[ $status -ne 0 && $status -ne 99 && \
+-    "$(uname)" == "Darwin" && \
+     "$log" =~ "unexpected EOF reading a line" \
+ ]]; then
+     echo "$post_run_msg [${yellow}FAIL$normal] (possibly flaky, so will be retried)"
diff --git a/nixpkgs/pkgs/tools/package-management/nixpkgs-review/default.nix b/nixpkgs/pkgs/tools/package-management/nixpkgs-review/default.nix
new file mode 100644
index 000000000000..5e57c6964238
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixpkgs-review/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, python3
+, fetchFromGitHub
+
+, installShellFiles
+, bubblewrap
+, nix-output-monitor
+, cacert
+, git
+, nix
+
+, withAutocomplete ? true
+, withSandboxSupport ? false
+, withNom ? false
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "nixpkgs-review";
+  version = "2.10.3";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Mic92";
+    repo = "nixpkgs-review";
+    rev = version;
+    hash = "sha256-iO+B/4UsMi+vf85oyLwZTigZ+mmt7Sk3qGba20/0XBs=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    python3.pkgs.setuptools
+  ] ++ lib.optionals withAutocomplete [
+    python3.pkgs.argcomplete
+  ];
+
+  propagatedBuildInputs = [ python3.pkgs.argcomplete ];
+
+  makeWrapperArgs =
+    let
+      binPath = [ nix git ]
+        ++ lib.optional withSandboxSupport bubblewrap
+        ++ lib.optional withNom nix-output-monitor;
+    in
+    [
+      "--prefix PATH : ${lib.makeBinPath binPath}"
+      "--set-default NIX_SSL_CERT_FILE ${cacert}/etc/ssl/certs/ca-bundle.crt"
+      # we don't have any runtime deps but nix-review shells might inject unwanted dependencies
+      "--unset PYTHONPATH"
+    ];
+
+  doCheck = false;
+
+  postInstall = lib.optionalString withAutocomplete ''
+    for cmd in nix-review nixpkgs-review; do
+      installShellCompletion --cmd $cmd \
+        --bash <(register-python-argcomplete $out/bin/$cmd) \
+        --fish <(register-python-argcomplete $out/bin/$cmd -s fish) \
+        --zsh <(register-python-argcomplete $out/bin/$cmd -s zsh)
+    done
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/Mic92/nixpkgs-review/releases/tag/${version}";
+    description = "Review pull-requests on https://github.com/NixOS/nixpkgs";
+    homepage = "https://github.com/Mic92/nixpkgs-review";
+    license = licenses.mit;
+    mainProgram = "nixpkgs-review";
+    maintainers = with maintainers; [ figsoda mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nox/default.nix b/nixpkgs/pkgs/tools/package-management/nox/default.nix
new file mode 100644
index 000000000000..b215a8e1d285
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nox/default.nix
@@ -0,0 +1,32 @@
+{ lib, python3Packages, fetchurl, git }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "nox";
+  version = "0.0.6";
+  namePrefix = "";
+
+  src = fetchurl {
+    url = "mirror://pypi/n/nix-nox/nix-nox-${version}.tar.gz";
+    sha256 = "1qcbhdnhdhhv7q6cqdgv0q55ic8fk18526zn2yb12x9r1s0lfp9z";
+  };
+
+  patches = [ ./nox-review-wip.patch ];
+
+  buildInputs = [ python3Packages.pbr git ];
+
+  propagatedBuildInputs = with python3Packages; [
+      dogpile-cache
+      click
+      requests
+      characteristic
+      setuptools
+    ];
+
+  meta = {
+    homepage = "https://github.com/madjar/nox";
+    description = "Tools to make nix nicer to use";
+    maintainers = [ lib.maintainers.madjar ];
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nox/nox-review-wip.patch b/nixpkgs/pkgs/tools/package-management/nox/nox-review-wip.patch
new file mode 100644
index 000000000000..e82dc7a2c266
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nox/nox-review-wip.patch
@@ -0,0 +1,11 @@
+--- a/nox/review.py	2017-09-23 04:04:37.322484753 +0200
++++ a/nox/review.py	2017-09-23 04:18:31.582692181 +0200
+@@ -84,7 +84,7 @@
+     ctx.obj['dry_run'] = dry_run
+ 
+ 
+-@cli.command(short_help='difference between working tree and a commit')
++@cli.command('wip', short_help='difference between working tree and a commit')
+ @click.option('--against', default='HEAD')
+ @click.pass_context
+ @setup_nixpkgs_config
diff --git a/nixpkgs/pkgs/tools/package-management/npm-check-updates/default.nix b/nixpkgs/pkgs/tools/package-management/npm-check-updates/default.nix
new file mode 100644
index 000000000000..7f88dc4e4e00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/npm-check-updates/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "npm-check-updates";
+  version = "16.14.12";
+
+  src = fetchFromGitHub {
+    owner = "raineorshine";
+    repo = "npm-check-updates";
+    rev = "v${version}";
+    hash = "sha256-3/DaEgPF9+wofYqA1XrJul4/cNGuGeXAeRg0HW0O+Ok=";
+  };
+
+  npmDepsHash = "sha256-zUJKuiMycVCuXMh6caMzmi6qpgknVsvmqV3XykhlSBI=";
+
+  meta = {
+    changelog = "https://github.com/raineorshine/npm-check-updates/blob/${src.rev}/CHANGELOG.md";
+    description = "Find newer versions of package dependencies than what your package.json allows";
+    homepage = "https://github.com/raineorshine/npm-check-updates";
+    license = lib.licenses.asl20;
+    mainProgram = "ncu";
+    maintainers = with lib.maintainers; [ flosse ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nvd/default.nix b/nixpkgs/pkgs/tools/package-management/nvd/default.nix
new file mode 100644
index 000000000000..8f33b4a5fbfa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nvd/default.nix
@@ -0,0 +1,42 @@
+{ fetchFromGitLab
+, installShellFiles
+, lib
+, python3
+, stdenv
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "nvd";
+  version = "0.2.3";
+
+  src = fetchFromGitLab {
+    owner = "khumba";
+    repo = "nvd";
+    rev = "refs/tags/v${finalAttrs.version}";
+    hash = "sha256-TmaXsyJLRkmIN9D77jOXd8fLj7kYPCBLg0AHIImAtgA=";
+  };
+
+  buildInputs = [
+    python3
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -m555 -Dt $out/bin src/nvd
+    installManPage src/nvd.1
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Nix/NixOS package version diff tool";
+    homepage = "https://gitlab.com/khumba/nvd";
+    license = lib.licenses.asl20;
+    mainProgram = "nvd";
+    maintainers = with lib.maintainers; [ khumba ];
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/package-management/opkg-utils/default.nix b/nixpkgs/pkgs/tools/package-management/opkg-utils/default.nix
new file mode 100644
index 000000000000..922fa4c93e1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/opkg-utils/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchgit }:
+
+stdenv.mkDerivation {
+  pname = "opkg-utils";
+  version = "unstable-2014-10-30";
+
+  # No releases, only a git tree
+  src = fetchgit {
+    url = "git://git.yoctoproject.org/opkg-utils";
+    rev = "762d9dadce548108d4204c2113461a7dd6f57e60";
+    sha256 = "09jfkq2p5wv0ifxkw62f4m7pkvpaalh74j2skymi8lh4268krfwz";
+  };
+
+  preBuild = ''
+    makeFlagsArray+=(PREFIX="$out")
+  '';
+
+  meta = with lib; {
+    description = "Helper scripts for use with the opkg package manager";
+    homepage = "http://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils/";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/opkg/default.nix b/nixpkgs/pkgs/tools/package-management/opkg/default.nix
new file mode 100644
index 000000000000..ba45cb0835b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/opkg/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, curl
+, gpgme
+, libarchive
+, bzip2
+, xz
+, attr
+, acl
+, libxml2
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "opkg";
+  version = "0.6.3";
+
+  src = fetchurl {
+    url = "https://downloads.yoctoproject.org/releases/opkg/opkg-${version}.tar.gz";
+    hash = "sha256-85OONZZGtAbEDV1EKhRnx+cjV/kauCLkQml1KWQeBt4=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    curl
+    gpgme
+    libarchive
+    bzip2
+    xz
+    attr
+    acl
+    libxml2
+  ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ];
+
+  meta = with lib; {
+    description = "A lightweight package management system based upon ipkg";
+    homepage = "https://git.yoctoproject.org/cgit/cgit.cgi/opkg/";
+    changelog = "https://git.yoctoproject.org/opkg/tree/NEWS?h=v${version}";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/packagekit/default.nix b/nixpkgs/pkgs/tools/package-management/packagekit/default.nix
new file mode 100644
index 000000000000..2e150f692ae9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/packagekit/default.nix
@@ -0,0 +1,117 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, gettext
+, glib
+, pkg-config
+, polkit
+, python3
+, sqlite
+, gobject-introspection
+, vala
+, gtk-doc
+, boost
+, meson
+, ninja
+, libxslt
+, docbook-xsl-nons
+, docbook_xml_dtd_42
+, libxml2
+, gst_all_1
+, gtk3
+, enableCommandNotFound ? false
+, enableBashCompletion ? false
+, bash-completion ? null
+, enableSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, systemd
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "packagekit";
+  version = "1.2.8";
+
+  outputs = [ "out" "dev" "devdoc" ];
+
+  src = fetchFromGitHub {
+    owner = "PackageKit";
+    repo = "PackageKit";
+    rev = "v${version}";
+    hash = "sha256-k51uQHar/uvdTDj/Ud60Oh6H7rfjEc9bfQnH5cvg8hc=";
+  };
+
+  buildInputs = [
+    glib
+    polkit
+    python3
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gtk3
+    sqlite
+    boost
+  ] ++ lib.optional enableSystemd systemd
+  ++ lib.optional enableBashCompletion bash-completion;
+  nativeBuildInputs = [
+    gobject-introspection
+    glib
+    vala
+    gettext
+    pkg-config
+    gtk-doc
+    meson
+    libxslt
+    docbook-xsl-nons
+    docbook_xml_dtd_42
+    libxml2
+    ninja
+  ];
+
+  mesonFlags = [
+    (if enableSystemd then "-Dsystemd=true" else "-Dsystem=false")
+    # often fails to build with nix updates
+    # and remounts /nix/store as rw
+    # https://github.com/NixOS/nixpkgs/issues/177946
+    #"-Dpackaging_backend=nix"
+    "-Ddbus_sys=${placeholder "out"}/share/dbus-1/system.d"
+    "-Ddbus_services=${placeholder "out"}/share/dbus-1/system-services"
+    "-Dsystemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "-Dcron=false"
+    "-Dgtk_doc=true"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ]
+  ++ lib.optional (!enableBashCompletion) "-Dbash_completion=false"
+  ++ lib.optional (!enableCommandNotFound) "-Dbash_command_not_found=false";
+
+  postPatch = ''
+    # HACK: we want packagekit to look in /etc for configs but install
+    # those files in $out/etc ; we just override the runtime paths here
+    # same for /var & $out/var
+    substituteInPlace etc/meson.build \
+      --replace "install_dir: join_paths(get_option('sysconfdir'), 'PackageKit')" "install_dir: join_paths('$out', 'etc', 'PackageKit')"
+    substituteInPlace data/meson.build \
+      --replace "install_dir: join_paths(get_option('localstatedir'), 'lib', 'PackageKit')," "install_dir: join_paths('$out', 'var', 'lib', 'PackageKit'),"
+  '';
+
+  passthru.tests = {
+    nixos-test = nixosTests.packagekit;
+  };
+
+  meta = with lib; {
+    description = "System to facilitate installing and updating packages";
+    longDescription = ''
+      PackageKit is a system designed to make installing and updating software
+      on your computer easier. The primary design goal is to unify all the
+      software graphical tools used in different distributions, and use some of
+      the latest technology like PolicyKit. The actual nuts-and-bolts distro
+      tool (dnf, apt, etc) is used by PackageKit using compiled and scripted
+      helpers. PackageKit isn't meant to replace these tools, instead providing
+      a common set of abstractions that can be used by standard GUI and text
+      mode package managers.
+    '';
+    homepage = "https://github.com/PackageKit/PackageKit";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/packagekit/qt.nix b/nixpkgs/pkgs/tools/package-management/packagekit/qt.nix
new file mode 100644
index 000000000000..897f8d9e7b4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/packagekit/qt.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, cmake, pkg-config
+, qttools, packagekit }:
+
+let
+  isQt6 = lib.versions.major qttools.version == "6";
+in stdenv.mkDerivation rec {
+  pname = "packagekit-qt";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner  = "hughsie";
+    repo   = "PackageKit-Qt";
+    rev    = "v${version}";
+    sha256 = "sha256-pwDMLd+Gpl0P2ImPjGeZpKAOJ4dH5+P1se0l1qm5Ui0=";
+  };
+
+  buildInputs = [ packagekit ];
+
+  nativeBuildInputs = [ cmake pkg-config qttools ];
+
+  cmakeFlags = [ (lib.cmakeBool "BUILD_WITH_QT6" isQt6) ];
+
+  dontWrapQtApps = true;
+
+  meta = packagekit.meta // {
+    description = "System to facilitate installing and updating packages - Qt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/pacman/default.nix b/nixpkgs/pkgs/tools/package-management/pacman/default.nix
new file mode 100644
index 000000000000..800e392f0f24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/pacman/default.nix
@@ -0,0 +1,137 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchurl
+, asciidoc
+, binutils
+, coreutils
+, curl
+, gpgme
+, installShellFiles
+, libarchive
+, makeWrapper
+, meson
+, ninja
+, openssl
+, perl
+, pkg-config
+, zlib
+
+# Compression tools in scripts/libmakepkg/util/compress.sh.in
+, gzip
+, bzip2
+, xz
+, zstd
+, lrzip
+, lzop
+, ncompress
+, lz4
+, lzip
+
+# pacman-key runtime dependencies
+, gawk
+, gettext
+, gnugrep
+, gnupg
+
+# Tells pacman where to find ALPM hooks provided by packages.
+# This path is very likely to be used in an Arch-like root.
+, sysHookDir ? "/usr/share/libalpm/hooks/"
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pacman";
+  version = "6.0.2";
+
+  src = fetchurl {
+    url = "https://sources.archlinux.org/other/${pname}/${pname}-${version}.tar.xz";
+    hash = "sha256-fY4+jFEhrsCWXfcfWb7fRgUsbPFPljZcRBHsPeCkwaU=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    asciidoc
+    installShellFiles
+    libarchive
+    makeWrapper
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    gpgme
+    libarchive
+    openssl
+    perl
+    zlib
+  ];
+
+  patches = [
+    ./dont-create-empty-dirs.patch
+    # Add keyringdir meson option to configure the keyring directory
+    (fetchpatch {
+      url = "https://gitlab.archlinux.org/pacman/pacman/-/commit/79bd512181af12ec80fd8f79486fc9508fa4a1b3.patch";
+      hash = "sha256-ivTPwWe06Q5shn++R6EY0x3GC0P4X0SuC+F5sndfAtM=";
+    })
+  ];
+
+  postPatch = let compressionTools = [
+    gzip
+    bzip2
+    xz
+    zstd
+    lrzip
+    lzop
+    ncompress
+    lz4
+    lzip
+  ]; in ''
+    echo 'export PATH=${lib.makeBinPath compressionTools}:$PATH' >> scripts/libmakepkg/util/compress.sh.in
+    substituteInPlace meson.build \
+      --replace "install_dir : SYSCONFDIR" "install_dir : '$out/etc'" \
+      --replace "join_paths(DATAROOTDIR, 'libalpm/hooks/')" "'${sysHookDir}'" \
+      --replace "join_paths(PREFIX, DATAROOTDIR, get_option('keyringdir'))" "'\$KEYRING_IMPORT_DIR'"
+    substituteInPlace doc/meson.build \
+      --replace "/bin/true" "${coreutils}/bin/true"
+    substituteInPlace scripts/repo-add.sh.in \
+      --replace bsdtar "${libarchive}/bin/bsdtar"
+    substituteInPlace scripts/pacman-key.sh.in \
+      --replace "local KEYRING_IMPORT_DIR='@keyringdir@'" "" \
+      --subst-var-by keyringdir '\$KEYRING_IMPORT_DIR' \
+      --replace "--batch --check-trustdb" "--batch --check-trustdb --allow-weak-key-signatures"
+  ''; # the line above should be removed once Arch migrates to gnupg 2.3.x
+
+  mesonFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ];
+
+  hardeningDisable = [ "fortify3" ];
+
+  postInstall = ''
+    installShellCompletion --bash scripts/pacman --zsh scripts/_pacman
+    wrapProgram $out/bin/makepkg \
+      --prefix PATH : ${lib.makeBinPath [ binutils ]}
+    wrapProgram $out/bin/pacman-key \
+      --prefix PATH : ${lib.makeBinPath [
+        "${placeholder "out"}"
+        coreutils
+        gawk
+        gettext
+        gnugrep
+        gnupg
+      ]}
+  '';
+
+  meta = with lib; {
+    description = "A simple library-based package manager";
+    homepage = "https://archlinux.org/pacman/";
+    changelog = "https://gitlab.archlinux.org/pacman/pacman/-/raw/v${version}/NEWS";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ samlukeyes123 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/pacman/dont-create-empty-dirs.patch b/nixpkgs/pkgs/tools/package-management/pacman/dont-create-empty-dirs.patch
new file mode 100644
index 000000000000..59deb947bb5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/pacman/dont-create-empty-dirs.patch
@@ -0,0 +1,20 @@
+diff --git a/meson.build b/meson.build
+index c8ee42fd..610401ca 100644
+--- a/meson.build
++++ b/meson.build
+@@ -414,15 +414,6 @@ install_data(
+   'proto/proto.install',
+   install_dir : join_paths(DATAROOTDIR, 'pacman'))
+ 
+-foreach path : [
+-	join_paths(LOCALSTATEDIR, 'lib/pacman/'),
+-	join_paths(LOCALSTATEDIR, 'cache/pacman/pkg/'),
+-	join_paths(DATAROOTDIR, 'makepkg-template/'),
+-	join_paths(DATAROOTDIR, 'libalpm/hooks/'),
+-	]
+-	meson.add_install_script('sh', '-c', 'mkdir -p "$DESTDIR/@0@"'.format(path))
+-endforeach
+-
+ TEST_ENV = environment()
+ TEST_ENV.set('PMTEST_SCRIPTLIB_DIR', join_paths(meson.project_source_root(), 'scripts/library/'))
+ TEST_ENV.set('PMTEST_LIBMAKEPKG_DIR', join_paths(meson.project_build_root(), 'scripts/libmakepkg/'))
diff --git a/nixpkgs/pkgs/tools/package-management/pacup/default.nix b/nixpkgs/pkgs/tools/package-management/pacup/default.nix
new file mode 100644
index 000000000000..7afd4eb815d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/pacup/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  name = "pacup";
+  version = "2.0.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "pacstall";
+    repo = name;
+    rev = "refs/tags/${version}";
+    hash = "sha256-ItO38QyxNHftKPQZAPO7596ddBfX0a1nfVVqgx7BfwI=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'httpx = ">=0.24,<0.25"' 'httpx = "*"'
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    httpx
+    rich
+    typer
+    packaging
+  ];
+
+  meta = with lib; {
+    description = "Help maintainers update pacscripts";
+    longDescription = ''
+      Pacup (Pacscript Updater) is a maintainer helper tool to help maintainers update their pacscripts.
+      It semi-automates the tedious task of updating pacscripts, and aims to make it a fun process for the maintainer!
+    '';
+    homepage = "https://github.com/pacstall/pacup";
+    changelog = "https://github.com/pacstall/pacup/releases/tag/${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ zahrun ];
+    mainProgram = "pacup";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/pdm/default.nix b/nixpkgs/pkgs/tools/package-management/pdm/default.nix
new file mode 100644
index 000000000000..d94aaeae69d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/pdm/default.nix
@@ -0,0 +1,117 @@
+{ lib
+, stdenv
+, python3
+, fetchFromGitHub
+, fetchpatch
+, fetchPypi
+, nix-update-script
+, runtimeShell
+}:
+let
+  python = python3.override {
+    # override resolvelib due to
+    # 1. pdm requiring a later version of resolvelib
+    # 2. Ansible being packaged as a library
+    # 3. Ansible being unable to upgrade to a later version of resolvelib
+    # see here for more details: https://github.com/NixOS/nixpkgs/pull/155380/files#r786255738
+    packageOverrides = self: super: {
+      resolvelib = super.resolvelib.overridePythonAttrs rec {
+        version = "1.0.1";
+        src = fetchFromGitHub {
+          owner = "sarugaku";
+          repo = "resolvelib";
+          rev = "/refs/tags/${version}";
+          hash = "sha256-oxyPn3aFPOyx/2aP7Eg2ThtPbyzrFT1JzWqy6GqNbzM=";
+        };
+      };
+    };
+    self = python;
+  };
+in
+
+with python.pkgs;
+buildPythonApplication rec {
+  pname = "pdm";
+  version = "2.12.3";
+  pyproject = true;
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-U82rcnwUaf3Blu/Y1/+EBKPKke5DwKVxRzbyAg0KXd8=";
+  };
+
+  nativeBuildInputs = [
+    pdm-backend
+  ];
+
+  propagatedBuildInputs = [
+    blinker
+    certifi
+    cachecontrol
+    dep-logic
+    findpython
+    installer
+    packaging
+    platformdirs
+    pyproject-hooks
+    python-dotenv
+    requests-toolbelt
+    resolvelib
+    rich
+    shellingham
+    tomlkit
+    unearth
+    virtualenv
+  ]
+  ++ cachecontrol.optional-dependencies.filecache
+  ++ lib.optionals (pythonOlder "3.11") [
+    tomli
+  ]
+  ++ lib.optionals (pythonOlder "3.10") [
+    importlib-metadata
+  ]
+  ++ lib.optionals (pythonAtLeast "3.10") [
+    truststore
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    pytest-mock
+    pytest-rerunfailures
+    pytest-xdist
+    pytest-httpserver
+  ] ++ lib.optional stdenv.isLinux first;
+
+  pytestFlagsArray = [
+    "-m 'not network'"
+  ];
+
+  preCheck = ''
+    export HOME=$TMPDIR
+    substituteInPlace tests/cli/test_run.py \
+      --replace "/bin/bash" "${runtimeShell}"
+  '';
+
+  disabledTests = [
+    # fails to locate setuptools (maybe upstream bug)
+    "test_convert_setup_py_project"
+    # pythonfinder isn't aware of nix's python infrastructure
+    "test_use_wrapper_python"
+    "test_use_invalid_wrapper_python"
+  ];
+
+  __darwinAllowLocalNetworking = true;
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://pdm-project.org";
+    changelog = "https://github.com/pdm-project/pdm/releases/tag/${version}";
+    description = "A modern Python package manager with PEP 582 support";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cpcloud ];
+    mainProgram = "pdm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/pkg/default.nix b/nixpkgs/pkgs/tools/package-management/pkg/default.nix
new file mode 100644
index 000000000000..b100b9984915
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/pkg/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, m4, pkg-config, tcl
+, bzip2, elfutils, libarchive, libbsd, xz, openssl, zlib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pkg";
+  version = "1.20.8";
+
+  src = fetchFromGitHub {
+    owner = "freebsd";
+    repo = "pkg";
+    rev = finalAttrs.version;
+    sha256 = "sha256-pQgZMCd4PEjNZKm9V35Rca7Miblv1EgkH+CxaiKvhpY=";
+  };
+
+  setOutputFlags = false;
+  separateDebugInfo = true;
+
+  nativeBuildInputs = [ m4 pkg-config tcl ];
+  buildInputs = [ bzip2 elfutils libarchive openssl xz zlib ]
+    ++ lib.optional stdenv.isLinux libbsd;
+
+  enableParallelBuilding = true;
+
+  preInstall = ''
+    mkdir -p $out/etc
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/freebsd/pkg";
+    description = "Package management tool for FreeBSD";
+    maintainers = with maintainers; [ qyliss ];
+    platforms = with platforms; darwin ++ freebsd ++ linux ++ netbsd ++ openbsd;
+    license = licenses.bsd2;
+    mainProgram = "pkg";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/package-management/poetry/default.nix b/nixpkgs/pkgs/tools/package-management/poetry/default.nix
new file mode 100644
index 000000000000..75cede5df7d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/poetry/default.nix
@@ -0,0 +1,56 @@
+{ lib, python3, fetchFromGitHub }:
+
+let
+  newPackageOverrides =
+    self: super: {
+      poetry = self.callPackage ./unwrapped.nix { };
+
+      # The versions of Poetry and poetry-core need to match exactly,
+      # and poetry-core in nixpkgs requires a staging cycle to be updated,
+      # so apply an override here.
+      #
+      # We keep the override around even when the versions match, as
+      # it's likely to become relevant again after the next Poetry update.
+      poetry-core = super.poetry-core.overridePythonAttrs (old: rec {
+        version = "1.8.1";
+        src = fetchFromGitHub {
+          owner = "python-poetry";
+          repo = "poetry-core";
+          rev = version;
+          hash = "sha256-RnCJ67jaL2knwv+Uo7p0zOejHAT73f40weaJnfqOYoM=";
+        };
+      });
+    } // (plugins self);
+  python = python3.override (old: {
+    packageOverrides = lib.composeManyExtensions
+      ((if old ? packageOverrides then [ old.packageOverrides ] else [ ]) ++ [ newPackageOverrides ]);
+  });
+
+  plugins = ps: with ps; {
+    poetry-audit-plugin = callPackage ./plugins/poetry-audit-plugin.nix { };
+    poetry-plugin-export = callPackage ./plugins/poetry-plugin-export.nix { };
+    poetry-plugin-up = callPackage ./plugins/poetry-plugin-up.nix { };
+  };
+
+  # selector is a function mapping pythonPackages to a list of plugins
+  # e.g. poetry.withPlugins (ps: with ps; [ poetry-plugin-up ])
+  withPlugins = selector: let
+    selected = selector (plugins python.pkgs);
+  in python.pkgs.toPythonApplication (python.pkgs.poetry.overridePythonAttrs (old: {
+    propagatedBuildInputs = old.propagatedBuildInputs ++ selected;
+
+    # save some build time when adding plugins by disabling tests
+    doCheck = selected == [ ];
+
+    # Propagating dependencies leaks them through $PYTHONPATH which causes issues
+    # when used in nix-shell.
+    postFixup = ''
+      rm $out/nix-support/propagated-build-inputs
+    '';
+
+    passthru = {
+      plugins = plugins python.pkgs;
+      inherit withPlugins python;
+    };
+  }));
+in withPlugins (ps: [ ])
diff --git a/nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-audit-plugin.nix b/nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-audit-plugin.nix
new file mode 100644
index 000000000000..85eb0b5d19b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-audit-plugin.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, poetry-core
+, poetry
+, safety
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "poetry-audit-plugin";
+  version = "0.3.0";
+
+  disabled = pythonOlder "3.7";
+
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "opeco17";
+    repo = "poetry-audit-plugin";
+    rev = "refs/tags/${version}";
+    hash = "sha256-49OnYz3EFiqOe+cLgfynjy14Ve4Ga6OUrLdM8HhZuKQ=";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    poetry
+  ];
+
+  propagatedBuildInputs = [
+    safety
+  ];
+
+  pythonImportsCheck = [ "poetry_audit_plugin" ];
+
+  nativeCheckInputs = [
+    poetry  # for the executable
+    pytestCheckHook
+  ];
+
+  # requires networking
+  doCheck = false;
+
+  meta = {
+    description = "Poetry plugin for checking security vulnerabilities in dependencies";
+    homepage = "https://github.com/opeco17/poetry-audit-plugin";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-plugin-export.nix b/nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-plugin-export.nix
new file mode 100644
index 000000000000..b4ede0bdedaa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-plugin-export.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+}:
+
+buildPythonPackage rec {
+  pname = "poetry-plugin-export";
+  version = "1.6.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "python-poetry";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-6U96O0mCQpviBr4I67ZfHytsooXG4oCNTx8YqrrIzYo=";
+  };
+
+  postPatch = ''
+    sed -i '/poetry =/d' pyproject.toml
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  # infinite recursion with poetry
+  doCheck = false;
+  pythonImportsCheck = [];
+
+  meta = with lib; {
+    changelog = "https://github.com/python-poetry/poetry-plugin-export/blob/${src.rev}/CHANGELOG.md";
+    description = "Poetry plugin to export the dependencies to various formats";
+    license = licenses.mit;
+    homepage = "https://github.com/python-poetry/poetry-plugin-export";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix b/nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix
new file mode 100644
index 000000000000..77b6e44c9273
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, buildPythonPackage
+, poetry-core
+, pytestCheckHook
+, pytest-mock
+, poetry
+}:
+
+buildPythonPackage rec {
+  pname = "poetry-plugin-up";
+  version = "0.7.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "MousaZeidBaker";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-ProwMnkg8LaPvb4aYyO1PR30iMSNE9oyKgCIX4O5j+E=";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    pytest-mock
+    poetry
+  ];
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  meta = with lib; {
+    description = "Poetry plugin to simplify package updates";
+    homepage = "https://github.com/MousaZeidBaker/poetry-plugin-up";
+    changelog = "https://github.com/MousaZeidBaker/poetry-plugin-up/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = [ maintainers.k900 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/poetry/unwrapped.nix b/nixpkgs/pkgs/tools/package-management/poetry/unwrapped.nix
new file mode 100644
index 000000000000..f13a7715464b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/poetry/unwrapped.nix
@@ -0,0 +1,176 @@
+{ lib
+, stdenv
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, installShellFiles
+, pythonRelaxDepsHook
+, build
+, cachecontrol
+, cleo
+, crashtest
+, dulwich
+, fastjsonschema
+, installer
+, keyring
+, packaging
+, pexpect
+, pkginfo
+, platformdirs
+, poetry-core
+, poetry-plugin-export
+, pyproject-hooks
+, requests
+, requests-toolbelt
+, shellingham
+, tomlkit
+, trove-classifiers
+, virtualenv
+, xattr
+, tomli
+, importlib-metadata
+, cachy
+, deepdiff
+, flatdict
+, pytestCheckHook
+, httpretty
+, pytest-mock
+, pytest-xdist
+, pythonAtLeast
+, darwin
+}:
+
+buildPythonPackage rec {
+  pname = "poetry";
+  version = "1.7.1";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "python-poetry";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-PM3FIZYso7p0Oe0RpiPuxHrQrgnMlkT5SVeaJPK/J94=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    # platformdirs 4.x is backwards compatible; https://github.com/python-poetry/poetry/commit/eb80d10846f7336b0b2a66ce2964e72dffee9a1c
+    "platformdirs"
+    # xattr 1.0 is backwards compatible modulo dropping Python 2 support: https://github.com/xattr/xattr/compare/v0.10.0...v1.0.0
+    "xattr"
+  ];
+
+  propagatedBuildInputs = [
+    build
+    cachecontrol
+    cleo
+    crashtest
+    dulwich
+    fastjsonschema
+    installer
+    keyring
+    packaging
+    pexpect
+    pkginfo
+    platformdirs
+    poetry-core
+    poetry-plugin-export
+    pyproject-hooks
+    requests
+    requests-toolbelt
+    shellingham
+    tomlkit
+    trove-classifiers
+    virtualenv
+  ] ++ lib.optionals (stdenv.isDarwin) [
+    xattr
+  ] ++ lib.optionals (pythonOlder "3.11") [
+    tomli
+  ] ++ lib.optionals (pythonOlder "3.10") [
+    importlib-metadata
+  ] ++ cachecontrol.optional-dependencies.filecache;
+
+  postInstall = ''
+    installShellCompletion --cmd poetry \
+      --bash <($out/bin/poetry completions bash) \
+      --fish <($out/bin/poetry completions fish) \
+      --zsh <($out/bin/poetry completions zsh) \
+  '';
+
+  nativeCheckInputs = [
+    cachy
+    deepdiff
+    flatdict
+    pytestCheckHook
+    httpretty
+    pytest-mock
+    pytest-xdist
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.ps
+  ];
+
+  preCheck = (''
+    export HOME=$TMPDIR
+  '' + lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    # https://github.com/python/cpython/issues/74570#issuecomment-1093748531
+    export no_proxy='*';
+  '');
+
+  postCheck = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    unset no_proxy
+  '';
+
+  disabledTests = [
+    "test_env_system_packages_are_relative_to_lib"
+    "test_install_warning_corrupt_root"
+    "test_installer_with_pypi_repository"
+    # touches network
+    "git"
+    "solver"
+    "load"
+    "vcs"
+    "prereleases_if_they_are_compatible"
+    "test_builder_setup_generation_runs_with_pip_editable"
+    "test_executor"
+    # requires git history to work correctly
+    "default_with_excluded_data"
+    # toml ordering has changed
+    "lock"
+    # fs permission errors
+    "test_builder_should_execute_build_scripts"
+    # poetry.installation.chef.ChefBuildError: Backend 'poetry.core.masonry.api' is not available.
+    "test_isolated_env_install_success"
+    "test_prepare_sdist"
+    "test_prepare_directory"
+    "test_prepare_directory_with_extensions"
+    "test_prepare_directory_editable"
+  ] ++ lib.optionals (pythonAtLeast "3.10") [
+    # RuntimeError: 'auto_spec' might be a typo; use unsafe=True if this is intended
+    "test_info_setup_complex_pep517_error"
+  ];
+
+  # Allow for package to use pep420's native namespaces
+  pythonNamespaces = [
+    "poetry"
+  ];
+
+  # Unset ambient PYTHONPATH in the wrapper, so Poetry only ever runs with its own,
+  # isolated set of dependencies. This works because the correct PYTHONPATH is set
+  # in the Python script, which runs after the wrapper.
+  makeWrapperArgs = ["--unset PYTHONPATH"];
+
+  meta = with lib; {
+    changelog = "https://github.com/python-poetry/poetry/blob/${src.rev}/CHANGELOG.md";
+    homepage = "https://python-poetry.org/";
+    description = "Python dependency management and packaging made easy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jakewaksbaum dotlambda ];
+    mainProgram = "poetry";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/poetry2conda/default.nix b/nixpkgs/pkgs/tools/package-management/poetry2conda/default.nix
new file mode 100644
index 000000000000..7aa821d678ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/poetry2conda/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3
+}:
+
+with python3.pkgs; buildPythonApplication rec {
+  pname = "poetry2conda";
+  version = "0.3.0";
+
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "dojeda";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UqNoEGgStvqtxhYwExk7wO4SvATaM2kGaFbB5ViJa7U=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "use-poetry-core.patch";
+      url = "https://github.com/dojeda/poetry2conda/commit/b127090498c89fbd8bbcbac45d03178a1e1c4219.patch";
+      hash = "sha256-J26NhVPG1vD/QNXi5irtGW05CYsIYvZNQIi8YvHwCLc=";
+    })
+  ];
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    poetry-semver
+    toml
+  ];
+
+  nativeCheckInputs = [
+    pytest-mock
+    pytestCheckHook
+    pyyaml
+  ];
+
+  meta = with lib; {
+    description = "A script to convert a Python project declared on a pyproject.toml to a conda environment";
+    homepage = "https://github.com/dojeda/poetry2conda";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cpcloud ];
+    mainProgram = "poetry2conda";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/protontricks/default.nix b/nixpkgs/pkgs/tools/package-management/protontricks/default.nix
new file mode 100644
index 000000000000..462a2546ff5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/protontricks/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, setuptools-scm
+, setuptools
+, vdf
+, pillow
+, substituteAll
+, writeShellScript
+, steam-run
+, winetricks
+, yad
+, pytestCheckHook
+, nix-update-script
+}:
+
+buildPythonApplication rec {
+  pname = "protontricks";
+  version = "1.11.0";
+
+  src = fetchFromGitHub {
+    owner = "Matoking";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-5FpcIaQodvNjdqUfD9hvXlrdhszr98j0zm3MCCpZFoc=";
+  };
+
+  patches = [
+    # Use steam-run to run Proton binaries
+    (substituteAll {
+      src = ./steam-run.patch;
+      steamRun = lib.getExe steam-run;
+      bash = writeShellScript "steam-run-bash" ''
+        exec ${lib.getExe steam-run} bash "$@"
+      '';
+    })
+  ];
+
+  nativeBuildInputs = [ setuptools-scm ];
+
+  propagatedBuildInputs = [
+    setuptools # implicit dependency, used to find data/icon_placeholder.png
+    vdf
+    pillow
+  ];
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [
+      winetricks
+      yad
+    ]}"
+    # Steam Runtime does not work outside of steam-run, so don't use it
+    "--set STEAM_RUNTIME 0"
+  ];
+
+  nativeCheckInputs = [ pytestCheckHook ];
+
+  # From 1.6.0 release notes (https://github.com/Matoking/protontricks/releases/tag/1.6.0):
+  # In most cases the script is unnecessary and should be removed as part of the packaging process.
+  postInstall = ''
+    rm "$out/bin/protontricks-desktop-install"
+  '';
+
+  pythonImportsCheck = [ "protontricks" ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A simple wrapper for running Winetricks commands for Proton-enabled games";
+    homepage = "https://github.com/Matoking/protontricks";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/protontricks/steam-run.patch b/nixpkgs/pkgs/tools/package-management/protontricks/steam-run.patch
new file mode 100644
index 000000000000..3c865746377a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/protontricks/steam-run.patch
@@ -0,0 +1,65 @@
+diff --git a/src/protontricks/data/scripts/bwrap_launcher.sh b/src/protontricks/data/scripts/bwrap_launcher.sh
+index 922c59d..54742a4 100644
+--- a/src/protontricks/data/scripts/bwrap_launcher.sh
++++ b/src/protontricks/data/scripts/bwrap_launcher.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!@bash@
+ # Helper script
+ set -o errexit
+ 
+diff --git a/src/protontricks/data/scripts/wine_launch.sh b/src/protontricks/data/scripts/wine_launch.sh
+index 1b0a0ce..127f13e 100644
+--- a/src/protontricks/data/scripts/wine_launch.sh
++++ b/src/protontricks/data/scripts/wine_launch.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!@bash@
+ # Helper script created by Protontricks to run Wine binaries using Steam Runtime
+ set -o errexit
+ 
+diff --git a/src/protontricks/data/scripts/wineserver_keepalive.sh b/src/protontricks/data/scripts/wineserver_keepalive.sh
+index 8168dae..cb3e7d9 100644
+--- a/src/protontricks/data/scripts/wineserver_keepalive.sh
++++ b/src/protontricks/data/scripts/wineserver_keepalive.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!@bash@
+ # A simple keepalive script that will ensure a wineserver process is kept alive
+ # for the duration of the Protontricks session.
+ # This is accomplished by launching a simple Windows batch script that will
+diff --git a/src/protontricks/util.py b/src/protontricks/util.py
+index 9262cd0..00b2b2f 100644
+--- a/src/protontricks/util.py
++++ b/src/protontricks/util.py
+@@ -99,7 +99,7 @@ def get_host_library_paths():
+     # Since that command is unavailable with newer Steam Runtime releases,
+     # do it ourselves here.
+     result = run(
+-        ["/sbin/ldconfig", "-XNv"],
++        ["@steamRun@", "/sbin/ldconfig", "-XNv"],
+         check=True, stdout=PIPE, stderr=PIPE
+     )
+     lines = result.stdout.decode("utf-8").split("\n")
+diff --git a/tests/conftest.py b/tests/conftest.py
+index a516437..88bf804 100644
+--- a/tests/conftest.py
++++ b/tests/conftest.py
+@@ -170,7 +170,7 @@ def steam_runtime_dir(steam_dir):
+     """
+     (steam_dir.parent / "root" / "ubuntu12_32" / "steam-runtime").mkdir(parents=True)
+     (steam_dir.parent / "root" / "ubuntu12_32" / "steam-runtime" / "run.sh").write_text(
+-        "#!/bin/bash\n"
++        "#!/bin/sh\n"
+         """if [ "$1" = "--print-steam-runtime-library-paths" ]; then\n"""
+         "    echo 'fake_steam_runtime/lib:fake_steam_runtime/lib64'\n"
+         "fi"
+@@ -764,7 +764,7 @@ def xdg_user_dir_bin(home_dir):
+     # Only mock PICTURES and DOWNLOAD; mocking everything isn't necessary
+     # for the tests.
+     (home_dir / ".local" / "bin" / "xdg-user-dir").write_text(
+-        '#!/bin/bash\n'
++        '#!/bin/sh\n'
+         'if [[ "$1" == "PICTURES" ]]; then\n'
+         '    echo "$HOME/Pictures"\n'
+         'elif [[ "$1" == "DOWNLOAD" ]]; then\n'
diff --git a/nixpkgs/pkgs/tools/package-management/repro-get/default.nix b/nixpkgs/pkgs/tools/package-management/repro-get/default.nix
new file mode 100644
index 000000000000..95d5902be006
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/repro-get/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, repro-get
+, cacert
+}:
+
+buildGoModule rec {
+  pname = "repro-get";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "reproducible-containers";
+    repo = "repro-get";
+    rev = "v${version}";
+    sha256 = "sha256-qLu9SZuHCkKAOhzrBPEEev1iD5mcIBvrbXspHtifsq4=";
+  };
+
+  vendorHash = "sha256-clpQLRozXFeUGrItL2pfNft2hUNyuyeCP9oMQxagAWs=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # The pkg/version test requires internet access, so disable it here and run it
+  # in passthru.pkg-version
+  preCheck = ''
+    rm -rf pkg/version
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/reproducible-containers/${pname}/pkg/version.Version=v${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd repro-get \
+      --bash <($out/bin/repro-get completion bash) \
+      --fish <($out/bin/repro-get completion fish) \
+      --zsh <($out/bin/repro-get completion zsh)
+  '';
+
+  passthru.tests = {
+    "pkg-version" = repro-get.overrideAttrs (old: {
+      # see invalidateFetcherByDrvHash
+      name = "${repro-get.pname}-${builtins.unsafeDiscardStringContext (lib.substring 0 12 (baseNameOf repro-get.drvPath))}";
+      subPackages = [ "pkg/version" ];
+      installPhase = ''
+        rm -rf $out
+        touch $out
+      '';
+      preCheck = "";
+      outputHash = "sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=";
+      outputHashAlgo = "sha256";
+      outputHashMode = "flat";
+      outputs = [ "out" ];
+      nativeBuildInputs = old.nativeBuildInputs ++ [ cacert ];
+    });
+    version = testers.testVersion {
+      package = repro-get;
+      command = "HOME=$(mktemp -d) repro-get -v";
+      inherit version;
+    };
+  };
+
+  meta = with lib; {
+    description = "Reproducible apt/dnf/apk/pacman, with content-addressing";
+    homepage = "https://github.com/reproducible-containers/repro-get";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ matthewcroughan ];
+    mainProgram = "repro-get";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/rpm/default.nix b/nixpkgs/pkgs/tools/package-management/rpm/default.nix
new file mode 100644
index 000000000000..541787942a0e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/rpm/default.nix
@@ -0,0 +1,100 @@
+{ stdenv
+, lib
+, pkg-config
+, autoreconfHook
+, pandoc
+, fetchurl
+, cpio
+, zlib
+, bzip2
+, file
+, elfutils
+, libbfd
+, libgcrypt
+, libarchive
+, nspr
+, nss
+, popt
+, db
+, xz
+, python
+, lua
+, llvmPackages
+, sqlite
+, zstd
+, libcap
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rpm";
+  version = "4.18.1";
+
+  src = fetchurl {
+    url = "https://ftp.osuosl.org/pub/rpm/releases/rpm-${lib.versions.majorMinor version}.x/rpm-${version}.tar.bz2";
+    hash = "sha256-N/O0LAlmlB4q0/EP3jY5gkplkdBxl7qP0IacoHeeH1Y=";
+  };
+
+  outputs = [ "out" "dev" "man" ];
+  separateDebugInfo = true;
+
+  nativeBuildInputs = [ autoreconfHook pkg-config pandoc ];
+  buildInputs = [ cpio zlib zstd bzip2 file libarchive libgcrypt nspr nss db xz python lua sqlite ]
+    ++ lib.optional stdenv.cc.isClang llvmPackages.openmp
+    ++ lib.optional stdenv.isLinux libcap;
+
+  # rpm/rpmlib.h includes popt.h, and then the pkg-config file mentions these as linkage requirements
+  propagatedBuildInputs = [ popt nss db bzip2 libarchive libbfd ]
+    ++ lib.optional stdenv.isLinux elfutils;
+
+  env.NIX_CFLAGS_COMPILE = "-I${nspr.dev}/include/nspr -I${nss.dev}/include/nss";
+
+  configureFlags = [
+    "--with-external-db"
+    "--with-lua"
+    "--enable-python"
+    "--enable-ndb"
+    "--enable-sqlite"
+    "--enable-zstd"
+    "--localstatedir=/var"
+    "--sharedstatedir=/com"
+  ] ++ lib.optional stdenv.isLinux "--with-cap";
+
+  postPatch = ''
+    substituteInPlace Makefile.am --replace '@$(MKDIR_P) $(DESTDIR)$(localstatedir)/tmp' ""
+  '';
+
+  preFixup = ''
+    # Don't keep a reference to RPM headers or manpages
+    for f in $out/lib/rpm/platform/*/macros; do
+      substituteInPlace $f --replace "$dev" "/rpm-dev-path-was-here"
+      substituteInPlace $f --replace "$man" "/rpm-man-path-was-here"
+    done
+
+    # Avoid macros like '%__ld' pointing to absolute paths
+    for tool in ld nm objcopy objdump strip; do
+      sed -i $out/lib/rpm/macros -e "s/^%__$tool.*/%__$tool $tool/"
+    done
+
+    # Avoid helper scripts pointing to absolute paths
+    for tool in find-provides find-requires; do
+      sed -i $out/lib/rpm/$tool -e "s#/usr/lib/rpm/#$out/lib/rpm/#"
+    done
+
+    # symlinks produced by build are incorrect
+    ln -sf $out/bin/{rpm,rpmquery}
+    ln -sf $out/bin/{rpm,rpmverify}
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://www.rpm.org/";
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
+    description = "The RPM Package Manager";
+    maintainers = with maintainers; [ copumpkin ];
+    platforms = platforms.linux;
+    # Support for darwin was removed in https://github.com/NixOS/nixpkgs/pull/196350.
+    # This can be re-enables for apple_sdk.version >= 13.0.
+    badPlatforms = platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/smlpkg/default.nix b/nixpkgs/pkgs/tools/package-management/smlpkg/default.nix
new file mode 100644
index 000000000000..be7592c1c6d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/smlpkg/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, mlton, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "smlpkg";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "diku-dk";
+    repo = "smlpkg";
+    rev = "v${version}";
+    sha256 = "1xmbdnfc34ia0a78dhkfv5jyadxndinhw8c47l1mjd4l7n8vqnph";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ mlton ];
+
+  # Set as an environment variable in all the phase scripts.
+  MLCOMP = "mlton";
+
+  buildFlags = ["all"];
+  installFlags = ["prefix=$(out)"];
+
+  doCheck = true;
+
+  nativeCheckInputs = [ unzip ];
+
+  # We cannot run the pkgtests, as Nix does not allow network
+  # connections.
+  checkPhase = ''
+    runHook preCheck
+    make -C src test
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Generic package manager for Standard ML libraries and programs";
+    homepage = "https://github.com/diku-dk/smlpkg";
+    license = licenses.mit;
+    platforms = mlton.meta.platforms;
+    maintainers = with maintainers; [ athas ];
+    mainProgram = "smlpkg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/wapm/cli/default.nix b/nixpkgs/pkgs/tools/package-management/wapm/cli/default.nix
new file mode 100644
index 000000000000..f1feebdbb0c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/wapm/cli/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, perl
+, libiconv
+, openssl
+, rustPlatform
+, Security
+, stdenv
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wapm-cli";
+  version = "0.5.9";
+
+  src = fetchFromGitHub {
+    owner = "wasmerio";
+    repo = "wapm-cli";
+    rev = "v${version}";
+    sha256 = "sha256-T7YEe8xg5iwI/npisW0m+6FLi+eaAQVgYNe6TvMlhAs=";
+  };
+
+  cargoSha256 = "sha256-r4123NJ+nxNOVIg6svWr636xbxOJQ7tp76JoAi2m9p8=";
+
+  nativeBuildInputs = [ perl ];
+
+  buildInputs = [ libiconv openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A package manager for WebAssembly modules";
+    homepage = "https://docs.wasmer.io/ecosystem/wapm";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/xbps/cert-paths.patch b/nixpkgs/pkgs/tools/package-management/xbps/cert-paths.patch
new file mode 100644
index 000000000000..569161d9f2e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/xbps/cert-paths.patch
@@ -0,0 +1,25 @@
+From d13a550dbc8876c35b912fe3e0eadd45b278be27 Mon Sep 17 00:00:00 2001
+From: Will Dietz <w@wdtz.org>
+Date: Fri, 18 May 2018 09:51:48 -0500
+Subject: [PATCH] add certificate path fallbacks
+
+---
+ lib/fetch/common.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/lib/fetch/common.c b/lib/fetch/common.c
+index 94fb2651..79b50115 100644
+--- a/lib/fetch/common.c
++++ b/lib/fetch/common.c
+@@ -1012,6 +1012,8 @@ fetch_ssl_setup_peer_verification(SSL_CTX *ctx, int verbose)
+ 
+ 	if (getenv("SSL_NO_VERIFY_PEER") == NULL) {
+ 		ca_cert_file = getenv("SSL_CA_CERT_FILE");
++		ca_cert_file = ca_cert_file ? ca_cert_file : getenv("NIX_SSL_CERT_FILE");
++		ca_cert_file = ca_cert_file ? ca_cert_file : "/etc/ssl/certs/ca-certificates.crt";
+ 		ca_cert_path = getenv("SSL_CA_CERT_PATH") != NULL ?
+ 		    getenv("SSL_CA_CERT_PATH") : X509_get_default_cert_dir();
+ 		if (verbose) {
+-- 
+2.17.0
+
diff --git a/nixpkgs/pkgs/tools/package-management/xbps/default.nix b/nixpkgs/pkgs/tools/package-management/xbps/default.nix
new file mode 100644
index 000000000000..07aa1a7accc1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/xbps/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, which, zlib, openssl, libarchive }:
+
+stdenv.mkDerivation rec {
+  pname = "xbps";
+  version = "0.59.2";
+
+  src = fetchFromGitHub {
+    owner = "void-linux";
+    repo = "xbps";
+    rev = version;
+    hash = "sha256-3+LzFLDZ1zfRPBETMlpEn66zsfHRHQLlgeZPdMtmA14=";
+  };
+
+  nativeBuildInputs = [ pkg-config which ];
+
+  buildInputs = [ zlib openssl libarchive ];
+
+  patches = [
+    ./cert-paths.patch
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=unused-result -Wno-error=deprecated-declarations";
+
+  postPatch = ''
+    # _BSD_SOURCE causes cpp warning
+    # https://github.com/void-linux/xbps/issues/576
+    substituteInPlace bin/xbps-fbulk/main.c lib/util.c lib/external/dewey.c lib/external/fexec.c \
+      --replace 'define _BSD_SOURCE' 'define _DEFAULT_SOURCE' \
+      --replace '# define _BSD_SOURCE' '#define _DEFAULT_SOURCE'
+
+    # fix unprefixed ranlib (needed on cross)
+    substituteInPlace lib/Makefile \
+      --replace 'SILENT}ranlib ' 'SILENT}$(RANLIB) '
+
+    # Don't try to install keys to /var/db/xbps, put in $out/share for now
+    substituteInPlace data/Makefile \
+      --replace '$(DESTDIR)/$(DBDIR)' '$(DESTDIR)/$(SHAREDIR)'
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/void-linux/xbps";
+    description = "The X Binary Package System";
+    platforms = platforms.linux; # known to not work on Darwin, at least
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/default.nix b/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/default.nix
new file mode 100644
index 000000000000..70f5b143ebe8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildNpmPackage
+, fetchurl
+, nodejs
+, testers
+, yarn-lock-converter
+}:
+
+let
+  source = lib.importJSON ./source.json;
+in
+buildNpmPackage rec {
+  pname = "yarn-lock-converter";
+  inherit (source) version;
+
+  src = fetchurl {
+    url = "https://registry.npmjs.org/@vht/yarn-lock-converter/-/yarn-lock-converter-${version}.tgz";
+    hash = "sha256-CP1wI33fgtp4GSjasktbfWuUjGzCuK3XR+p64aPAryQ=";
+  };
+
+  npmDepsHash = source.deps;
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ nodejs ];
+
+  postPatch = ''
+    # Use generated package-lock.json as upstream does not provide one
+    ln -s ${./package-lock.json} package-lock.json
+  '';
+
+  postInstall = ''
+    mv $out/bin/@vht/yarn-lock-converter $out/bin/yarn-lock-converter
+    rmdir $out/bin/@vht
+  '';
+  passthru = {
+    tests.version = testers.testVersion {
+      package = yarn-lock-converter;
+    };
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    description = "Converts modern Yarn v2+ yarn.lock files into a Yarn v1 format";
+    homepage = "https://github.com/VHT/yarn-lock-converter";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gador ];
+    mainProgram = "yarn-lock-converter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/package-lock.json b/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/package-lock.json
new file mode 100644
index 000000000000..aa50ffec8d5b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/package-lock.json
@@ -0,0 +1,592 @@
+{
+  "name": "@vht/yarn-lock-converter",
+  "version": "0.0.2",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "@vht/yarn-lock-converter",
+      "version": "0.0.2",
+      "license": "MIT",
+      "dependencies": {
+        "@yarnpkg/lockfile": "^1.1.0",
+        "cacache": "^15.3.0",
+        "js-yaml": "^4.1.0",
+        "yargs": "^17.3.1"
+      },
+      "bin": {
+        "yarn-lock-converter": "index.js"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/@gar/promisify": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
+      "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="
+    },
+    "node_modules/@npmcli/fs": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
+      "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+      "dependencies": {
+        "@gar/promisify": "^1.0.1",
+        "semver": "^7.3.5"
+      }
+    },
+    "node_modules/@npmcli/move-file": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+      "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+      "deprecated": "This functionality has been moved to @npmcli/fs",
+      "dependencies": {
+        "mkdirp": "^1.0.4",
+        "rimraf": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@yarnpkg/lockfile": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
+      "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="
+    },
+    "node_modules/aggregate-error": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+      "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+      "dependencies": {
+        "clean-stack": "^2.0.0",
+        "indent-string": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "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"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+    },
+    "node_modules/brace-expansion": {
+      "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.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/cacache": {
+      "version": "15.3.0",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
+      "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
+      "dependencies": {
+        "@npmcli/fs": "^1.0.0",
+        "@npmcli/move-file": "^1.0.1",
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "glob": "^7.1.4",
+        "infer-owner": "^1.0.4",
+        "lru-cache": "^6.0.0",
+        "minipass": "^3.1.1",
+        "minipass-collect": "^1.0.2",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.2",
+        "mkdirp": "^1.0.3",
+        "p-map": "^4.0.0",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^3.0.2",
+        "ssri": "^8.0.1",
+        "tar": "^6.0.2",
+        "unique-filename": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/chownr": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/clean-stack": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+      "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/cliui": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+    },
+    "node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+    },
+    "node_modules/escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+    },
+    "node_modules/get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
+    },
+    "node_modules/glob": {
+      "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.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+      "engines": {
+        "node": ">=0.8.19"
+      }
+    },
+    "node_modules/indent-string": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/infer-owner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+      "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
+    },
+    "node_modules/inflight": {
+      "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.3.0",
+        "wrappy": "1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/js-yaml": {
+      "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"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/minimatch": {
+      "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.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-collect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+      "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minipass-flush": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+      "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minipass-pipeline": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+      "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dependencies": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/once": {
+      "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"
+      }
+    },
+    "node_modules/p-map": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+      "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+      "dependencies": {
+        "aggregate-error": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+      "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="
+    },
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/semver": {
+      "version": "7.5.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
+      "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/ssri": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+      "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+      "dependencies": {
+        "minipass": "^3.1.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "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"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/tar": {
+      "version": "6.1.14",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.14.tgz",
+      "integrity": "sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw==",
+      "dependencies": {
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^5.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/tar/node_modules/minipass": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+      "dependencies": {
+        "unique-slug": "^2.0.0"
+      }
+    },
+    "node_modules/unique-slug": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+      "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+      "dependencies": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+    },
+    "node_modules/y18n": {
+      "version": "5.0.8",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    },
+    "node_modules/yargs": {
+      "version": "17.7.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "21.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+      "engines": {
+        "node": ">=12"
+      }
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/source.json b/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/source.json
new file mode 100644
index 000000000000..a897b7c9fb67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/source.json
@@ -0,0 +1,6 @@
+{
+  "version": "0.0.2",
+  "integrity": "sha512-58Oy9qP081Jr+h9EOYB0ItCQ7IfU0RBbkHN4AQR3h6aPDjIOPYTiEyczmTfsLQcAyCFl0MV1kU8QL1xBALKkYw==",
+  "filename": "vht-yarn-lock-converter-0.0.2.tgz",
+  "deps": "sha256-GCTjZ3x+ZgE762yUWQZzEOOwfAr7W0z/cySlehRILf4="
+}
diff --git a/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/update.sh b/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/update.sh
new file mode 100755
index 000000000000..72d46b470f28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/yarn-lock-converter/update.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p nodejs libarchive prefetch-npm-deps moreutils
+# shellcheck shell=bash
+
+set -exuo pipefail
+
+cd -- "$(dirname -- "${BASH_SOURCE[0]}")"
+
+TMPDIR="$(mktemp -d)"
+trap 'rm -r -- "$TMPDIR"' EXIT
+
+pushd -- "$TMPDIR"
+npm pack "@vht/yarn-lock-converter" --json | jq '.[0] | { version, integrity, filename }' > source.json
+bsdtar -x -f "$(jq -r .filename source.json)"
+
+pushd package
+npm install --package-lock-only
+popd
+
+DEPS="$(prefetch-npm-deps package/package-lock.json)"
+jq ".deps = \"$DEPS\"" source.json | sponge source.json
+
+popd
+
+cp -t . -- "$TMPDIR/source.json" "$TMPDIR/package/package-lock.json"
diff --git a/nixpkgs/pkgs/tools/security/2fa/default.nix b/nixpkgs/pkgs/tools/security/2fa/default.nix
new file mode 100644
index 000000000000..d1d4cc42a1ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/2fa/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "2fa";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "rsc";
+    repo = "2fa";
+    rev = "v${version}";
+    sha256 = "sha256-cB5iADZwvJQwwK1GockE2uicFlqFMEAY6xyeXF5lnUY=";
+  };
+
+  deleteVendor = true;
+  vendorHash = "sha256-4h/+ZNxlJPYY0Kyu2vDE1pDXxC/kGE5JdnagWVOGzAE=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://rsc.io/2fa";
+    description = "Two-factor authentication on the command line";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/acltoolkit/default.nix b/nixpkgs/pkgs/tools/security/acltoolkit/default.nix
new file mode 100644
index 000000000000..14b19e3cd7b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/acltoolkit/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "acltoolkit";
+  version = "unstable-2023-02-03";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "zblurx";
+    repo = "acltoolkit";
+    rev = "a5219946aa445c0a3b4a406baea67b33f78bca7c";
+    hash = "sha256-97cbkGyIkq2Pk1hydMcViXWoh+Ipi3m0YvEYiaV4zcM=";
+  };
+
+  postPatch = ''
+    # Ignore pinned versions
+    sed -i -e "s/==[0-9.]*//" setup.py
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    asn1crypto
+    dnspython
+    impacket
+    ldap3
+    pyasn1
+    pycryptodome
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "acltoolkit"
+  ];
+
+  meta = with lib; {
+    description = "ACL abuse swiss-knife";
+    homepage = "https://github.com/zblurx/acltoolkit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/acsccid/default.nix b/nixpkgs/pkgs/tools/security/acsccid/default.nix
new file mode 100644
index 000000000000..f471393b2cfc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/acsccid/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf
+, automake
+, libtool
+, gettext
+, flex
+, perl
+, pkg-config
+, pcsclite
+, libusb1
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.1.8";
+  pname = "acsccid";
+
+  src = fetchFromGitHub {
+    owner = "acshk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "12aahrvsk21qgpjwcrr01s742ixs44nmjkvcvqyzhqb307x1rrn3";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    autoconf
+    automake
+    libtool
+    gettext
+    flex
+    perl
+  ];
+
+  buildInputs = [
+    pcsclite
+    libusb1
+  ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+  ];
+
+  configureFlags = [
+    "--enable-usbdropdir=${placeholder "out"}/pcsc/drivers"
+  ];
+
+  doCheck = true;
+
+  postPatch = ''
+    sed -e s_/bin/echo_echo_g -i src/Makefile.am
+    patchShebangs src/convert_version.pl
+    patchShebangs src/create_Info_plist.pl
+  '';
+
+  preConfigure = ''
+    libtoolize --force
+    aclocal
+    autoheader
+    automake --force-missing --add-missing
+    autoconf
+  '';
+
+  meta = with lib; {
+    description = "A PC/SC driver for Linux/Mac OS X and it supports ACS CCID smart card readers";
+    longDescription = ''
+      acsccid is a PC/SC driver for Linux/Mac OS X and it supports ACS CCID smart card
+      readers. This library provides a PC/SC IFD handler implementation and
+      communicates with the readers through the PC/SC Lite resource manager (pcscd).
+
+      acsccid is based on ccid. See CCID free software driver for more
+      information:
+      https://ccid.apdu.fr/
+
+      It can be enabled in /etc/nixos/configuration.nix by adding:
+        services.pcscd.enable = true;
+        services.pcscd.plugins = [ pkgs.acsccid ];
+    '';
+    homepage = src.meta.homepage;
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/adenum/default.nix b/nixpkgs/pkgs/tools/security/adenum/default.nix
new file mode 100644
index 000000000000..018fd0e263fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/adenum/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, john
+, python3
+}:
+
+python3.pkgs.buildPythonApplication {
+  pname = "adenum";
+  version = "unstable-2022-04-01";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "SecuProject";
+    repo = "ADenum";
+    rev = "0e3576eca1d987d3ef22d53fc725189bb301e804";
+    hash = "sha256-8s4Kmt4ZjYbQGGVDWKfuRZ6kthcL8FiQytoq9Koy7Kc=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    impacket
+    pwntools
+    python-ldap
+  ] ++ [
+    john
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    # Add shebang so we can patch it
+    sed -i -e '1i#!/usr/bin/python' ADenum.py
+    patchShebangs ADenum.py
+    install -vD ADenum.py $out/bin/adenum
+
+    runHook postInstall
+  '';
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to find misconfiguration through LDAP";
+    homepage = "https://github.com/SecuProject/ADenum";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/adreaper/default.nix b/nixpkgs/pkgs/tools/security/adreaper/default.nix
new file mode 100644
index 000000000000..873760250618
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/adreaper/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "adreaper";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "AidenPearce369";
+    repo = "ADReaper";
+    rev = "ADReaperv${version}";
+    sha256 = "sha256-+FCb5TV9MUcRyex2M4rn2RhcIsXQFbtm1T4r7MpcRQs=";
+  };
+
+  vendorHash = "sha256-lU39kj/uz0l7Rodsu6+UMv2o579eu1KUbutUNZni7bM=";
+
+  postInstall = lib.optionalString (!stdenv.isDarwin) ''
+    mv $out/bin/ADReaper $out/bin/$pname
+  '';
+
+  meta = with lib; {
+    description = "Enumeration tool for Windows Active Directories";
+    homepage = "https://github.com/AidenPearce369/ADReaper";
+    # Upstream doesn't have a license yet
+    # https://github.com/AidenPearce369/ADReaper/issues/2
+    license = with licenses; [ unfree ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "ADReaper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aesfix/default.nix b/nixpkgs/pkgs/tools/security/aesfix/default.nix
new file mode 100644
index 000000000000..b2eb2e0e96ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aesfix/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "aesfix";
+  version = "1.0.1";
+
+  src = fetchurl {
+    url = "https://citpsite.s3.amazonaws.com/memory-content/src/aesfix-${version}.tar.gz";
+    sha256 = "sha256-exd+h2yu5qrkjwEjEC8R32WUpzhIP5pH8sdv6BzARdQ=";
+  };
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp aesfix $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Correct bit errors in an AES key schedules";
+    homepage = "https://citp.princeton.edu/our-work/memory/";
+    maintainers = with maintainers; [ fedx-sudo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aeskeyfind/default.nix b/nixpkgs/pkgs/tools/security/aeskeyfind/default.nix
new file mode 100644
index 000000000000..08b2481ff00d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aeskeyfind/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "aeskeyfind";
+  version = "1.0";
+
+  src = fetchurl {
+    url = "https://citpsite.s3.amazonaws.com/memory-content/src/aeskeyfind-${version}.tar.gz";
+    sha256 = "sha256-FBflwbYehruVJ9sfW+4ZlaDuqCR12zy8iA4Ev3Bgg+Q=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp aeskeyfind $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Locates 128-bit and 256-bit AES keys in a captured memory image";
+    homepage = "https://citp.princeton.edu/our-work/memory/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fedx-sudo ];
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/tools/security/aespipe/default.nix b/nixpkgs/pkgs/tools/security/aespipe/default.nix
new file mode 100644
index 000000000000..9ab8e089f30b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aespipe/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, sharutils, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "aespipe";
+  version = "2.4g";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/loop-aes/aespipe/aespipe-v${version}.tar.bz2";
+    sha256 = "sha256-v7l+feFh6NfOETsWO9odGo7HfSwa+rVtzIFT16kBh/w=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  configureFlags = [ "--enable-padlock" "--enable-intelaes" ];
+
+  postInstall = ''
+    cp bz2aespipe $out/bin
+    wrapProgram $out/bin/bz2aespipe \
+     --prefix PATH : $out/bin:${lib.makeBinPath [ sharutils ]}
+  '';
+
+  meta = with lib; {
+    description = "AES encrypting or decrypting pipe";
+    homepage = "https://loop-aes.sourceforge.net/aespipe.README";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.goibhniu ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/afl/README.md b/nixpkgs/pkgs/tools/security/afl/README.md
new file mode 100644
index 000000000000..180cad6bc4ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/README.md
@@ -0,0 +1,19 @@
+Updating the QEMU patches
+=========================
+
+When updating to the latest American Fuzzy Lop, make sure to check for
+any new patches to qemu for binary fuzzing support:
+
+https://github.com/google/AFL/tree/master/qemu_mode
+
+Be sure to check the build script and make sure it's also using the
+right QEMU version and options in `qemu.nix`:
+
+https://github.com/google/AFL/blob/master/qemu_mode/build_qemu_support.sh
+
+`afl-config.h`, `afl-types.h`, and `afl-qemu-cpu-inl.h` are part of
+the afl source code, and copied from `config.h`, `types.h` and
+`afl-qemu-cpu-inl.h` appropriately. These files and the QEMU patches
+need to be slightly adjusted to fix their `#include`s (the patches
+try to otherwise include files like `../../config.h` which causes the
+build to fail).
diff --git a/nixpkgs/pkgs/tools/security/afl/default.nix b/nixpkgs/pkgs/tools/security/afl/default.nix
new file mode 100644
index 000000000000..ccdbd78716d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/default.nix
@@ -0,0 +1,82 @@
+{ lib, stdenv, fetchFromGitHub, callPackage, makeWrapper
+, clang, llvm, which, libcgroup
+}:
+
+let
+  afl-qemu = callPackage ./qemu.nix { inherit afl; };
+  qemu-exe-name = if stdenv.hostPlatform.system == "x86_64-linux" then "qemu-x86_64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "qemu-i386"
+    else throw "afl: no support for ${stdenv.hostPlatform.system}!";
+  afl = stdenv.mkDerivation rec {
+    pname = "afl";
+    version = "2.57b";
+
+    src = fetchFromGitHub {
+      owner = "google";
+      repo = pname;
+      rev = "v${version}";
+      sha256 = "0fqj3g6ds1f21kxz7m9mc1fspi9r4jg9jcmi60inwxijrc5ncvr6";
+    };
+    enableParallelBuilding = true;
+
+    # Note: libcgroup isn't needed for building, just for the afl-cgroup
+    # script.
+    nativeBuildInputs = [ makeWrapper which llvm.dev ];
+    buildInputs = [ llvm ];
+
+    makeFlags = [ "PREFIX=$(out)" ];
+    postBuild = ''
+      make -C llvm_mode $makeFlags -j$NIX_BUILD_CORES
+    '';
+    postInstall = ''
+      # Install the custom QEMU emulator for binary blob fuzzing.
+      cp ${afl-qemu}/bin/${qemu-exe-name} $out/bin/afl-qemu-trace
+
+      # Install the cgroups wrapper for asan-based fuzzing.
+      cp experimental/asan_cgroups/limit_memory.sh $out/bin/afl-cgroup
+      chmod +x $out/bin/afl-cgroup
+      substituteInPlace $out/bin/afl-cgroup \
+        --replace "cgcreate" "${libcgroup}/bin/cgcreate" \
+        --replace "cgexec"   "${libcgroup}/bin/cgexec" \
+        --replace "cgdelete" "${libcgroup}/bin/cgdelete"
+
+      # Patch shebangs before wrapping
+      patchShebangs $out/bin
+
+      # Wrap afl-clang-fast(++) with a *different* AFL_PATH, because it
+      # has totally different semantics in that case(?) - and also set a
+      # proper AFL_CC and AFL_CXX so we don't pick up the wrong one out
+      # of $PATH.
+      # first though we need to replace the afl-clang-fast++ symlink with
+      # a real copy to prevent wrapProgram skipping the symlink and confusing
+      # nix's cc wrapper
+      rm $out/bin/afl-clang-fast++
+      cp $out/bin/afl-clang-fast $out/bin/afl-clang-fast++
+      for x in $out/bin/afl-clang-fast $out/bin/afl-clang-fast++; do
+        wrapProgram $x \
+          --prefix AFL_PATH : "$out/lib/afl" \
+          --run 'export AFL_CC=''${AFL_CC:-${clang}/bin/clang} AFL_CXX=''${AFL_CXX:-${clang}/bin/clang++}'
+      done
+    '';
+
+    passthru.qemu = afl-qemu;
+
+    meta = {
+      description = "Powerful fuzzer via genetic algorithms and instrumentation";
+      longDescription = ''
+        American fuzzy lop is a fuzzer that employs a novel type of
+        compile-time instrumentation and genetic algorithms to
+        automatically discover clean, interesting test cases that
+        trigger new internal states in the targeted binary. This
+        substantially improves the functional coverage for the fuzzed
+        code. The compact synthesized corpora produced by the tool are
+        also useful for seeding other, more labor or resource-intensive
+        testing regimes down the road.
+      '';
+      homepage    = "https://lcamtuf.coredump.cx/afl/";
+      license     = lib.licenses.asl20;
+      platforms   = ["x86_64-linux" "i686-linux"];
+      maintainers = with lib.maintainers; [ thoughtpolice ris ];
+    };
+  };
+in afl
diff --git a/nixpkgs/pkgs/tools/security/afl/libdislocator.nix b/nixpkgs/pkgs/tools/security/afl/libdislocator.nix
new file mode 100644
index 000000000000..400464c00567
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/libdislocator.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, afl}:
+
+stdenv.mkDerivation {
+  version = lib.getVersion afl;
+  pname = "libdislocator";
+
+  src = afl.src;
+  sourceRoot = "${afl.src.name}/libdislocator";
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  preInstall = ''
+    mkdir -p $out/lib/afl
+  '';
+  postInstall = ''
+    mkdir $out/bin
+    cat > $out/bin/get-libdislocator-so <<END
+    #!${stdenv.shell}
+    echo $out/lib/afl/libdislocator.so
+    END
+    chmod +x $out/bin/get-libdislocator-so
+  '';
+
+  meta = with lib; {
+    homepage = "https://lcamtuf.coredump.cx/afl/";
+    description = ''
+      Drop-in replacement for the libc allocator which improves
+      the odds of bumping into heap-related security bugs in
+      several ways.
+    '';
+    license = lib.licenses.asl20;
+    maintainers = with maintainers; [ ris ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/afl/qemu-patches/no-etc-install.patch b/nixpkgs/pkgs/tools/security/afl/qemu-patches/no-etc-install.patch
new file mode 100644
index 000000000000..5dfbfd780f1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/qemu-patches/no-etc-install.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index d6b9dc1..ce7c493 100644
+--- a/Makefile
++++ b/Makefile
+@@ -601,7 +601,7 @@ install-localstatedir:
+ endif
+ 
+ 
+-install: all $(if $(BUILD_DOCS),install-doc) install-datadir install-localstatedir
++install: all $(if $(BUILD_DOCS),install-doc) install-datadir
+ ifneq ($(TOOLS),)
+ 	$(call install-prog,$(subst qemu-ga,qemu-ga$(EXESUF),$(TOOLS)),$(DESTDIR)$(bindir))
+ endif
diff --git a/nixpkgs/pkgs/tools/security/afl/qemu-patches/syscall-glibc2_30.diff b/nixpkgs/pkgs/tools/security/afl/qemu-patches/syscall-glibc2_30.diff
new file mode 100644
index 000000000000..aa2950bf157c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/qemu-patches/syscall-glibc2_30.diff
@@ -0,0 +1,51 @@
+--- qemu-2.10.0-clean/linux-user/syscall.c	2020-03-12 18:47:47.898592169 +0100
++++ qemu-2.10.0/linux-user/syscall.c	2020-03-13 09:13:42.461809699 +0100
+@@ -34,6 +34,7 @@
+ #include <sys/resource.h>
+ #include <sys/swap.h>
+ #include <linux/capability.h>
++#include <linux/sockios.h> // https://lkml.org/lkml/2019/6/3/988
+ #include <sched.h>
+ #include <sys/timex.h>
+ #ifdef __ia64__
+@@ -256,7 +257,9 @@ static type name (type1 arg1,type2 arg2,
+ #endif
+ 
+ #ifdef __NR_gettid
+-_syscall0(int, gettid)
++// taken from https://patchwork.kernel.org/patch/10862231/
++#define __NR_sys_gettid __NR_gettid
++_syscall0(int, sys_gettid)
+ #else
+ /* This is a replacement for the host gettid() and must return a host
+    errno. */
+@@ -6219,7 +6222,7 @@ static void *clone_func(void *arg)
+     cpu = ENV_GET_CPU(env);
+     thread_cpu = cpu;
+     ts = (TaskState *)cpu->opaque;
+-    info->tid = gettid();
++    info->tid = sys_gettid();
+     task_settid(ts);
+     if (info->child_tidptr)
+         put_user_u32(info->tid, info->child_tidptr);
+@@ -6363,9 +6366,9 @@ static int do_fork(CPUArchState *env, un
+                mapping.  We can't repeat the spinlock hack used above because
+                the child process gets its own copy of the lock.  */
+             if (flags & CLONE_CHILD_SETTID)
+-                put_user_u32(gettid(), child_tidptr);
++                put_user_u32(sys_gettid(), child_tidptr);
+             if (flags & CLONE_PARENT_SETTID)
+-                put_user_u32(gettid(), parent_tidptr);
++                put_user_u32(sys_gettid(), parent_tidptr);
+             ts = (TaskState *)cpu->opaque;
+             if (flags & CLONE_SETTLS)
+                 cpu_set_tls (env, newtls);
+@@ -11402,7 +11405,7 @@ abi_long do_syscall(void *cpu_env, int n
+         break;
+ #endif
+     case TARGET_NR_gettid:
+-        ret = get_errno(gettid());
++        ret = get_errno(sys_gettid());
+         break;
+ #ifdef TARGET_NR_readahead
+     case TARGET_NR_readahead:
diff --git a/nixpkgs/pkgs/tools/security/afl/qemu.nix b/nixpkgs/pkgs/tools/security/afl/qemu.nix
new file mode 100644
index 000000000000..845d9fa3e6f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/qemu.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, fetchurl, afl, python2, zlib, pkg-config, glib, perl
+, texinfo, libuuid, flex, bison, pixman, autoconf
+}:
+
+let
+  cpuTarget = if stdenv.hostPlatform.system == "x86_64-linux" then "x86_64-linux-user"
+    else if stdenv.hostPlatform.system == "i686-linux" then "i386-linux-user"
+    else throw "afl: no support for ${stdenv.hostPlatform.system}!";
+in
+stdenv.mkDerivation rec {
+  pname = "afl-qemu";
+  version = "2.10.0";
+
+  srcs = [
+    (fetchurl {
+      url = "https://download.qemu.org/qemu-${version}.tar.bz2";
+      sha256 = "0j3dfxzrzdp1w21k21fjvmakzc6lcha1rsclaicwqvbf63hkk7vy";
+    })
+    afl.src
+  ];
+
+  sourceRoot = "qemu-${version}";
+
+  postUnpack = ''
+    cp ${afl.src.name}/types.h $sourceRoot/afl-types.h
+    substitute ${afl.src.name}/config.h $sourceRoot/afl-config.h \
+      --replace "types.h" "afl-types.h"
+    substitute ${afl.src.name}/qemu_mode/patches/afl-qemu-cpu-inl.h $sourceRoot/afl-qemu-cpu-inl.h \
+      --replace "../../config.h" "afl-config.h"
+    substituteInPlace ${afl.src.name}/qemu_mode/patches/cpu-exec.diff \
+      --replace "../patches/afl-qemu-cpu-inl.h" "afl-qemu-cpu-inl.h"
+  '';
+
+  nativeBuildInputs = [
+    python2 perl pkg-config flex bison autoconf texinfo
+  ];
+
+  buildInputs = [
+    zlib glib pixman libuuid
+  ];
+
+  enableParallelBuilding = true;
+
+  patches = [
+    # patches extracted from afl source
+    "../${afl.src.name}/qemu_mode/patches/cpu-exec.diff"
+    "../${afl.src.name}/qemu_mode/patches/elfload.diff"
+    "../${afl.src.name}/qemu_mode/patches/syscall.diff"
+    "../${afl.src.name}/qemu_mode/patches/configure.diff"
+    "../${afl.src.name}/qemu_mode/patches/memfd.diff"
+    # nix-specific patches to make installation more well-behaved
+    ./qemu-patches/no-etc-install.patch
+    # patch for fixing qemu build on glibc >= 2.30
+    ./qemu-patches/syscall-glibc2_30.diff
+  ];
+
+  configureFlags =
+    [ "--disable-system"
+      "--enable-linux-user"
+      "--disable-gtk"
+      "--disable-sdl"
+      "--disable-vnc"
+      "--disable-kvm"
+      "--target-list=${cpuTarget}"
+      "--enable-pie"
+      "--sysconfdir=/etc"
+      "--localstatedir=/var"
+    ];
+
+  meta = with lib; {
+    homepage = "https://www.qemu.org/";
+    description = "Fork of QEMU with AFL instrumentation support";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aflplusplus/default.nix b/nixpkgs/pkgs/tools/security/aflplusplus/default.nix
new file mode 100644
index 000000000000..5d4b761df334
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aflplusplus/default.nix
@@ -0,0 +1,173 @@
+{ lib, stdenv, stdenvNoCC, fetchFromGitHub, callPackage, makeWrapper
+, clang, llvm, gcc, which, libcgroup, python3, perl, gmp
+, file, wine ? null
+, cmocka
+, llvmPackages
+}:
+
+# wine fuzzing is only known to work for win32 binaries, and using a mixture of
+# 32 and 64-bit libraries ... complicates things, so it's recommended to build
+# a full 32bit version of this package if you want to do wine fuzzing
+assert (wine != null) -> (stdenv.targetPlatform.system == "i686-linux");
+
+let
+  aflplusplus-qemu = callPackage ./qemu.nix { };
+  qemu-exe-name = if stdenv.targetPlatform.system == "x86_64-linux" then "qemu-x86_64"
+    else if stdenv.targetPlatform.system == "i686-linux" then "qemu-i386"
+    else throw "aflplusplus: no support for ${stdenv.targetPlatform.system}!";
+  libdislocator = callPackage ./libdislocator.nix { inherit aflplusplus; };
+  libtokencap = callPackage ./libtokencap.nix { inherit aflplusplus; };
+  aflplusplus = stdenvNoCC.mkDerivation rec {
+    pname = "aflplusplus";
+    version = "4.10c";
+
+    src = fetchFromGitHub {
+      owner = "AFLplusplus";
+      repo = "AFLplusplus";
+      rev = "v${version}";
+      sha256 = "sha256-elghcBw2tIttQo7bkMFRCx8iNqxwY0NCz0343wc8hWA=";
+    };
+    enableParallelBuilding = true;
+
+    # Note: libcgroup isn't needed for building, just for the afl-cgroup
+    # script.
+    nativeBuildInputs = [ makeWrapper which clang gcc ];
+    buildInputs = [ llvm python3 gmp llvmPackages.bintools ]
+      ++ lib.optional (wine != null) python3.pkgs.wrapPython;
+
+    # Flag is already set by package and causes some compiler warnings.
+    # warning: "_FORTIFY_SOURCE" redefined
+    hardeningDisable = [ "fortify" ];
+
+    postPatch = ''
+      # Don't care about this.
+      rm Android.bp
+
+      # Replace the CLANG_BIN variables with the correct path.
+      # Replace "gcc" and friends with full paths in afl-gcc.
+      # Prevents afl-gcc picking up any (possibly incorrect) gcc from the path.
+      # Replace LLVM_BINDIR with a non-existing path to give a hard error when it's used.
+      substituteInPlace src/afl-cc.c \
+        --replace "CLANGPP_BIN" '"${clang}/bin/clang++"' \
+        --replace "CLANG_BIN" '"${clang}/bin/clang"' \
+        --replace '"gcc"' '"${gcc}/bin/gcc"' \
+        --replace '"g++"' '"${gcc}/bin/g++"' \
+        --replace 'getenv("AFL_PATH")' "(getenv(\"AFL_PATH\") ? getenv(\"AFL_PATH\") : \"$out/lib/afl\")"
+
+      substituteInPlace src/afl-ld-lto.c \
+        --replace 'LLVM_BINDIR' '"/nixpkgs-patched-does-not-exist"'
+
+      # Remove the rest of the line
+      sed -i 's|LLVM_BINDIR = .*|LLVM_BINDIR = |' utils/aflpp_driver/GNUmakefile
+      substituteInPlace utils/aflpp_driver/GNUmakefile \
+        --replace 'LLVM_BINDIR = ' 'LLVM_BINDIR = ${clang}/bin/'
+
+      substituteInPlace GNUmakefile.llvm \
+        --replace "\$(LLVM_BINDIR)/clang" "${clang}/bin/clang"
+    '';
+
+    env.NIX_CFLAGS_COMPILE = toString [
+      # Needed with GCC 12
+      "-Wno-error=use-after-free"
+    ];
+
+    makeFlags = [
+      "PREFIX=$(out)"
+      "USE_BINDIR=0"
+    ];
+    buildPhase = ''
+      runHook preBuild
+
+      common="$makeFlags -j$NIX_BUILD_CORES"
+      make distrib $common
+      make -C qemu_mode/libcompcov $common
+      make -C qemu_mode/unsigaction $common
+
+      runHook postBuild
+    '';
+
+    postInstall = ''
+      # remove afl-clang(++) which are just symlinks to afl-clang-fast
+      rm $out/bin/afl-clang $out/bin/afl-clang++
+
+      # the makefile neglects to install unsigaction
+      cp qemu_mode/unsigaction/unsigaction*.so $out/lib/afl/
+
+      # Install the custom QEMU emulator for binary blob fuzzing.
+      ln -s ${aflplusplus-qemu}/bin/${qemu-exe-name} $out/bin/afl-qemu-trace
+
+      # give user a convenient way of accessing libcompconv.so, libdislocator.so, libtokencap.so
+      cat > $out/bin/get-afl-qemu-libcompcov-so <<END
+      #!${stdenv.shell}
+      echo $out/lib/afl/libcompcov.so
+      END
+      chmod +x $out/bin/get-afl-qemu-libcompcov-so
+      ln -s ${libdislocator}/bin/get-libdislocator-so $out/bin/
+      ln -s ${libtokencap}/bin/get-libtokencap-so $out/bin/
+
+      # Install the cgroups wrapper for asan-based fuzzing.
+      cp utils/asan_cgroups/limit_memory.sh $out/bin/afl-cgroup
+      chmod +x $out/bin/afl-cgroup
+      substituteInPlace $out/bin/afl-cgroup \
+        --replace "cgcreate" "${libcgroup}/bin/cgcreate" \
+        --replace "cgexec"   "${libcgroup}/bin/cgexec" \
+        --replace "cgdelete" "${libcgroup}/bin/cgdelete"
+
+      patchShebangs $out/bin
+
+    '' + lib.optionalString (wine != null) ''
+      substitute afl-wine-trace $out/bin/afl-wine-trace \
+        --replace "qemu_mode/unsigaction" "$out/lib/afl"
+      chmod +x $out/bin/afl-wine-trace
+
+      # qemu needs to be fed ELFs, not wrapper scripts, so we have to cheat a bit if we
+      # detect a wrapped wine
+      for winePath in ${wine}/bin/.wine ${wine}/bin/wine; do
+        if [ -x $winePath ]; then break; fi
+      done
+      makeWrapperArgs="--set-default 'AFL_WINE_PATH' '$winePath'" \
+        wrapPythonProgramsIn $out/bin ${python3.pkgs.pefile}
+    '';
+
+    nativeInstallCheckInputs = [ perl file cmocka ];
+    doInstallCheck = true;
+    installCheckPhase = ''
+      runHook preInstallCheck
+
+      # replace references to tools in build directory with references to installed locations
+      substituteInPlace test/test-qemu-mode.sh \
+        --replace '../libcompcov.so' '`$out/bin/get-afl-qemu-libcompcov-so`' \
+        --replace '../afl-qemu-trace' '$out/bin/afl-qemu-trace' \
+        --replace '../afl-fuzz' '$out/bin/afl-fuzz' \
+        --replace '../qemu_mode/unsigaction/unsigaction32.so' '$out/lib/afl/unsigaction32.so' \
+        --replace '../qemu_mode/unsigaction/unsigaction64.so' '$out/lib/afl/unsigaction64.so'
+
+      substituteInPlace test/test-libextensions.sh \
+        --replace '../libdislocator.so' '`$out/bin/get-libdislocator-so`' \
+        --replace '../libtokencap.so' '`$out/bin/get-libtokencap-so`'
+      substituteInPlace test/test-llvm.sh \
+        --replace '../afl-cmin.bash' '`$out/bin/afl-cmin.bash`'
+      # perl -pi -e 's|(?<!\.)(?<!-I)(\.\./)([^\s\/]+?)(?<!\.c)(?<!\.s?o)(?=\s)|\$out/bin/\2|g' test/test.sh
+      patchShebangs .
+      cd test && ./test-all.sh
+
+      runHook postInstallCheck
+    '';
+
+    passthru = {
+      inherit libdislocator libtokencap;
+      qemu = aflplusplus-qemu;
+    };
+
+    meta = {
+      description = ''
+        A heavily enhanced version of AFL, incorporating many features
+        and improvements from the community
+      '';
+      homepage    = "https://aflplus.plus";
+      license     = lib.licenses.asl20;
+      platforms   = ["x86_64-linux" "i686-linux"];
+      maintainers = with lib.maintainers; [ ris mindavi ];
+    };
+  };
+in aflplusplus
diff --git a/nixpkgs/pkgs/tools/security/aflplusplus/libdislocator.nix b/nixpkgs/pkgs/tools/security/aflplusplus/libdislocator.nix
new file mode 100644
index 000000000000..6a17ff9703b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aflplusplus/libdislocator.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, aflplusplus}:
+
+stdenv.mkDerivation {
+  version = lib.getVersion aflplusplus;
+  pname = "libdislocator";
+
+  src = aflplusplus.src;
+  postUnpack = "chmod -R +w ${aflplusplus.src.name}";
+  sourceRoot = "${aflplusplus.src.name}/utils/libdislocator";
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  preInstall = ''
+    mkdir -p $out/lib/afl
+  '';
+
+  postInstall = ''
+    mkdir $out/bin
+    cat > $out/bin/get-libdislocator-so <<END
+    #!${stdenv.shell}
+    echo $out/lib/afl/libdislocator.so
+    END
+    chmod +x $out/bin/get-libdislocator-so
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/vanhauser-thc/AFLplusplus";
+    description = ''
+      Drop-in replacement for the libc allocator which improves
+      the odds of bumping into heap-related security bugs in
+      several ways.
+    '';
+    license = lib.licenses.asl20;
+    maintainers = with maintainers; [ ris ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aflplusplus/libtokencap.nix b/nixpkgs/pkgs/tools/security/aflplusplus/libtokencap.nix
new file mode 100644
index 000000000000..8bad6c607c2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aflplusplus/libtokencap.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, aflplusplus}:
+
+stdenv.mkDerivation {
+  version = lib.getVersion aflplusplus;
+  pname = "libtokencap";
+
+  src = aflplusplus.src;
+  postUnpack = "chmod -R +w ${aflplusplus.src.name}";
+  sourceRoot = "${aflplusplus.src.name}/utils/libtokencap";
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  preInstall = ''
+    mkdir -p $out/lib/afl
+    mkdir -p $out/share/doc/afl
+  '';
+  postInstall = ''
+    mkdir $out/bin
+    cat > $out/bin/get-libtokencap-so <<END
+    #!${stdenv.shell}
+    echo $out/lib/afl/libtokencap.so
+    END
+    chmod +x $out/bin/get-libtokencap-so
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/AFLplusplus/AFLplusplus";
+    description = "strcmp & memcmp token capture library";
+    license = lib.licenses.asl20;
+    maintainers = with maintainers; [ ris ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aflplusplus/qemu.nix b/nixpkgs/pkgs/tools/security/aflplusplus/qemu.nix
new file mode 100644
index 000000000000..f412b8e40499
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aflplusplus/qemu.nix
@@ -0,0 +1,144 @@
+{ lib
+, stdenv
+, python3
+, zlib
+, pkg-config
+, glib
+, perl
+, texinfo
+, libuuid
+, flex
+, bison
+, pixman
+, meson
+, fetchFromGitHub
+, ninja
+}:
+
+let
+  qemuName = "qemu-5.2.50";
+in
+stdenv.mkDerivation {
+  name = "aflplusplus-${qemuName}";
+
+  src = fetchFromGitHub {
+    owner = "AFLplusplus";
+    repo = "qemuafl";
+    rev = "a1321713c7502c152dd7527555e0f8a800d55225";
+    sha256 = "sha256-HLlOHqT2vrHjHyu4n83IzVzKv9ErinephLLev1E10nM=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    python3
+    perl
+    pkg-config
+    flex
+    bison
+    meson
+    texinfo
+    ninja
+  ];
+
+  buildInputs = [
+    zlib
+    glib
+    pixman
+    libuuid
+  ];
+
+  enableParallelBuilding = true;
+
+  dontUseMesonConfigure = true; # meson's configurePhase isn't compatible with qemu build
+  preBuild = "cd build";
+  preConfigure = ''
+    # this script isn't marked as executable b/c it's indirectly used by meson. Needed to patch its shebang
+    chmod +x ./scripts/shaderinclude.pl
+    patchShebangs .
+  '';
+
+  configureFlags =
+    [
+      "--target-list=${stdenv.hostPlatform.uname.processor}-linux-user"
+      "--sysconfdir=/etc"
+      "--localstatedir=/var"
+      "--meson=meson"
+      "--disable-system"
+      "--enable-linux-user"
+      "--enable-pie"
+      "--audio-drv-list="
+      "--disable-blobs"
+      "--disable-bochs"
+      "--disable-brlapi"
+      "--disable-bsd-user"
+      "--disable-bzip2"
+      "--disable-cap-ng"
+      "--disable-cloop"
+      "--disable-curl"
+      "--disable-curses"
+      "--disable-dmg"
+      "--disable-fdt"
+      "--disable-gcrypt"
+      "--disable-glusterfs"
+      "--disable-gnutls"
+      "--disable-gtk"
+      "--disable-guest-agent"
+      "--disable-iconv"
+      "--disable-libiscsi"
+      "--disable-libnfs"
+      "--disable-libssh"
+      "--disable-libusb"
+      "--disable-linux-aio"
+      "--disable-live-block-migration"
+      "--disable-lzo"
+      "--disable-nettle"
+      "--disable-numa"
+      "--disable-opengl"
+      "--disable-parallels"
+      "--disable-plugins"
+      "--disable-qcow1"
+      "--disable-qed"
+      "--disable-rbd"
+      "--disable-rdma"
+      "--disable-replication"
+      "--disable-sdl"
+      "--disable-seccomp"
+      "--disable-sheepdog"
+      "--disable-smartcard"
+      "--disable-snappy"
+      "--disable-spice"
+      "--disable-system"
+      "--disable-tools"
+      "--disable-tpm"
+      "--disable-usb-redir"
+      "--disable-vde"
+      "--disable-vdi"
+      "--disable-vhost-crypto"
+      "--disable-vhost-kernel"
+      "--disable-vhost-net"
+      "--disable-vhost-scsi"
+      "--disable-vhost-user"
+      "--disable-vhost-vdpa"
+      "--disable-vhost-vsock"
+      "--disable-virglrenderer"
+      "--disable-virtfs"
+      "--disable-vnc"
+      "--disable-vnc-jpeg"
+      "--disable-vnc-png"
+      "--disable-vnc-sasl"
+      "--disable-vte"
+      "--disable-vvfat"
+      "--disable-xen"
+      "--disable-xen-pci-passthrough"
+      "--disable-xfsctl"
+      "--without-default-devices"
+    ];
+
+  meta = with lib; {
+    homepage = "https://github.com/AFLplusplus/qemuafl";
+    description = "Fork of QEMU with AFL++ instrumentation support";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ris ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/age-plugin-ledger/default.nix b/nixpkgs/pkgs/tools/security/age-plugin-ledger/default.nix
new file mode 100644
index 000000000000..6ed6b526b65d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/age-plugin-ledger/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libusb1
+, openssl
+, rage
+, AppKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "age-plugin-ledger";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "Ledger-Donjon";
+    repo = "age-plugin-ledger";
+    rev = "v${version}";
+    hash = "sha256-g5GbWXhaGEafiM3qkGlRXHcOzPZl2pbDWEBPg4gQWcg=";
+  };
+
+  cargoHash = "sha256-SbgH67XuxBa7WFirSdOIUxfJGlIYezISCEA3LJGN3ys=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libusb1
+    openssl
+  ] ++ lib.optional stdenv.isDarwin AppKit;
+
+  nativeCheckInputs = [
+    rage
+  ];
+
+  meta = with lib; {
+    description = "A Ledger Nano plugin for age";
+    homepage = "https://github.com/Ledger-Donjon/age-plugin-ledger";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ erdnaxe ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/age-plugin-tpm/default.nix b/nixpkgs/pkgs/tools/security/age-plugin-tpm/default.nix
new file mode 100644
index 000000000000..4885aa326dda
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/age-plugin-tpm/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, swtpm
+, openssl
+}:
+
+buildGoModule rec {
+  pname = "age-plugin-tpm";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Foxboron";
+    repo = "age-plugin-tpm";
+    rev = "v${version}";
+    hash = "sha256-oTvK8U5j+llHgoChhGb+vcUrUf9doVYxd3d5MEuCNz8=";
+  };
+
+  proxyVendor = true;
+
+  vendorHash = "sha256-BSb+8p5+RJMfcYc2+BuT4YbhCWCbcYOt9upesD11Ytw=";
+
+  nativeCheckInputs = [
+    swtpm
+  ];
+
+  buildInputs = [
+    openssl
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "TPM 2.0 plugin for age (This software is experimental, use it at your own risk)";
+    homepage = "https://github.com/Foxboron/age-plugin-tpm";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kranzes sgo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/age-plugin-yubikey/default.nix b/nixpkgs/pkgs/tools/security/age-plugin-yubikey/default.nix
new file mode 100644
index 000000000000..7a3364c8420b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/age-plugin-yubikey/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, pcsclite
+, PCSC
+, Foundation
+, IOKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "age-plugin-yubikey";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "str4d";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-V3NzZyCfslUBsARO5UC8N+cuptLxg2euM87DGqtLpPk=";
+  };
+
+  cargoHash = "sha256-5qmwCcrhDkJlyeTS+waMiTxro1HjMHiQE5Ds/4sVpx4=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ]
+  ++ lib.optional stdenv.isLinux pcsclite
+  ++ lib.optionals stdenv.isDarwin [
+    IOKit
+    Foundation
+    PCSC
+  ];
+
+  meta = with lib; {
+    description = "YubiKey plugin for age";
+    homepage = "https://github.com/str4d/age-plugin-yubikey";
+    changelog = "https://github.com/str4d/age-plugin-yubikey/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ kranzes vtuan10 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/age/default.nix b/nixpkgs/pkgs/tools/security/age/default.nix
new file mode 100644
index 000000000000..ea8108fde301
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/age/default.nix
@@ -0,0 +1,68 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, installShellFiles }:
+
+buildGoModule rec {
+  pname = "age";
+  version = "1.1.1";
+  vendorHash = "sha256-MumPdRTz840+hoisJ7ADgBhyK3n8P6URobbRJYDFkDY=";
+
+  src = fetchFromGitHub {
+    owner = "FiloSottile";
+    repo = "age";
+    rev = "v${version}";
+    sha256 = "sha256-LRxxJQLQkzoCNYGS/XBixVmYXoZ1mPHKvFicPGXYLcw=";
+  };
+
+  # Worked with the upstream to change the way test vectors were sourced from
+  # another repo at test run time, so we can run test without network access.
+  # https://github.com/FiloSottile/age/pull/476
+  #
+  # Changes landed after v1.1.1, so we'll patch this one until next release.
+  patches = [
+    # Revert "all: temporarily disable testscript tests"
+    (fetchpatch {
+      name = "0001-revert-temporarily-disabled-testscript-tests.patch";
+      url = "https://github.com/FiloSottile/age/commit/5471e05672de168766f5f11453fd324c53c264e5.patch";
+      sha256 = "sha256-F3oDhRWJqqcF9MDDWPeO9V/wUGXkmUXY87wgokUIoOk=";
+    })
+
+    # age: depend on c2sp.org/CCTV/age for TestVectors
+    (fetchpatch {
+      name = "0002-depend-on-c2sp_cctv_age__TestVectors.patch";
+      url = "https://github.com/FiloSottile/age/commit/edf7388f7731b274b055dcab3ec4006cc4961b68.patch";
+      sha256 = "sha256-CloCj/uF3cqTeCfRkV6TeYiovuDQXm1ZIklREWAot1E=";
+    })
+  ];
+
+  ldflags = [
+    "-s" "-w" "-X main.Version=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preInstall = ''
+    installManPage doc/*.1
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    if [[ "$("$out/bin/${pname}" --version)" == "${version}" ]]; then
+      echo '${pname} smoke check passed'
+    else
+      echo '${pname} smoke check failed'
+      return 1
+    fi
+  '';
+
+  # plugin test is flaky, see https://github.com/FiloSottile/age/issues/517
+  checkFlags = [
+    "-skip" "TestScript/plugin"
+  ];
+
+  meta = with lib; {
+    homepage = "https://age-encryption.org/";
+    description = "Modern encryption tool with small explicit keys";
+    license = licenses.bsd3;
+    mainProgram = "age";
+    maintainers = with maintainers; [ tazjin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/agebox/default.nix b/nixpkgs/pkgs/tools/security/agebox/default.nix
new file mode 100644
index 000000000000..b87cb2b8ca2a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/agebox/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "agebox";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "slok";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-W6/v5BIl+k6tMan/Wdua7mHKMsq23QZN13Cy24akJr4=";
+  };
+
+  vendorHash = "sha256-PLeNTlQ0OMcupfbVN/KGb0iJYf3Jbcevg8gTcKHpn8s=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/slok/agebox";
+    changelog = "https://github.com/slok/agebox/releases/tag/v${version}";
+    description = "Age based repository file encryption gitops tool";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lesuisse ];
+    mainProgram = "agebox";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aide/default.nix b/nixpkgs/pkgs/tools/security/aide/default.nix
new file mode 100644
index 000000000000..0168ddc4cc90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aide/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, flex, bison, libmhash, zlib, acl, attr, libselinux, pcre2, pkg-config, libgcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "aide";
+  version = "0.18.6";
+
+  src = fetchurl {
+    url = "https://github.com/aide/aide/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-j/Ns5H030MyYd2LV2WE0bUdd50u6ihgy/QBttu3TwQ4=";
+  };
+
+  buildInputs = [ flex bison libmhash zlib acl attr libselinux pcre2 libgcrypt ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  configureFlags = [
+    "--with-posix-acl"
+    "--with-selinux"
+    "--with-xattr"
+    ];
+
+  meta = with lib; {
+    homepage = "https://aide.github.io/";
+    description = "A file and directory integrity checker";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ happysalada ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aiodnsbrute/default.nix b/nixpkgs/pkgs/tools/security/aiodnsbrute/default.nix
new file mode 100644
index 000000000000..c11255e6ab80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aiodnsbrute/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "aiodnsbrute";
+  version = "0.3.3";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "blark";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-cEpk71VoQJZfKeAZummkk7yjtXKSMndgo0VleYiMlWE=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiodns
+    click
+    tqdm
+    uvloop
+  ];
+
+  # Project no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "aiodnsbrute.cli"
+  ];
+
+  meta = with lib; {
+    description = "DNS brute force utility";
+    homepage = "https://github.com/blark/aiodnsbrute";
+    changelog = "https://github.com/blark/aiodnsbrute/releases/tag/v${version}";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/alterx/default.nix b/nixpkgs/pkgs/tools/security/alterx/default.nix
new file mode 100644
index 000000000000..9fcdb7378b70
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/alterx/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "alterx";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "alterx";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-A01XROFB2NkArfFtRMv/r9Nu5QoKMTOVzVIUnFoVe78=";
+  };
+
+  vendorHash = "sha256-efwU41kFR8QYa2cevvj4pYAXgCisJ4OHaRIhWVnETvc=";
+
+  meta = with lib; {
+    description = "Fast and customizable subdomain wordlist generator using DSL";
+    homepage = "https://github.com/projectdiscovery/alterx";
+    changelog = "https://github.com/projectdiscovery/alterx/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/amber/default.nix b/nixpkgs/pkgs/tools/security/amber/default.nix
new file mode 100644
index 000000000000..2b64480c4a00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/amber/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Security }:
+
+rustPlatform.buildRustPackage rec {
+  # Renaming it to amber-secret because another package named amber exists
+  pname = "amber-secret";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "fpco";
+    repo = "amber";
+    rev = "v${version}";
+    sha256 = "sha256-11dqfOi/DdfFrFTeboPyFkixXG+fCJ2jpHM55qsQ1jw=";
+  };
+
+  cargoHash = "sha256-u0vceIurenYnKfF3gWNw304hX4vVFoszZD7AMwffOmc=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "Manage secret values in-repo via public key cryptography";
+    homepage = "https://github.com/fpco/amber";
+    license = licenses.mit;
+    maintainers = with maintainers; [ psibi ];
+    mainProgram = "amber";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/amoco/default.nix b/nixpkgs/pkgs/tools/security/amoco/default.nix
new file mode 100644
index 000000000000..fe16ad9596dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/amoco/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "amoco";
+  version = "2.9.8";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "bdcht";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-3+1ssFyU7SKFJgDYBQY0kVjmTHOD71D2AjnH+4bfLXo=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    blessed
+    click
+    crysp
+    grandalf
+    pyparsing
+    tqdm
+    traitlets
+  ];
+
+  passthru.optional-dependencies = {
+    app = with python3.pkgs; [
+      # ccrawl
+      ipython
+      prompt-toolkit
+      pygments
+      # pyside6
+      z3-solver
+    ];
+  };
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "'pytest-runner'," ""
+  '';
+
+  pythonRelaxDeps = [
+    "grandalf"
+    "crysp"
+  ];
+
+  pythonImportsCheck = [
+    "amoco"
+  ];
+
+  disabledTests = [
+    # AttributeError: 'str' object has no attribute '__dict__'
+    "test_func"
+  ];
+
+  meta = with lib; {
+    description = "Tool for analysing binaries";
+    homepage = "https://github.com/bdcht/amoco";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/apachetomcatscanner/default.nix b/nixpkgs/pkgs/tools/security/apachetomcatscanner/default.nix
new file mode 100644
index 000000000000..41c68aa79792
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/apachetomcatscanner/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "apachetomcatscanner";
+  version = "3.5";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "p0dalirius";
+    repo = "ApacheTomcatScanner";
+    rev = "refs/tags/${version}";
+    hash = "sha256-ChVVXUjm6y71iRs64Kv63oiOG1GSqmx6J0YiGtEI0ao=";
+  };
+
+  # Posted a PR for discussion upstream that can be followed:
+  # https://github.com/p0dalirius/ApacheTomcatScanner/pull/32
+  postPatch = ''
+    sed -i '/apachetomcatscanner=apachetomcatscanner\.__main__:main/d' setup.py
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+    sectools
+    xlsxwriter
+  ];
+
+  # Project has no test
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "apachetomcatscanner"
+  ];
+
+  meta = with lib; {
+    description = "Tool to scan for Apache Tomcat server vulnerabilities";
+    homepage = "https://github.com/p0dalirius/ApacheTomcatScanner";
+    changelog = "https://github.com/p0dalirius/ApacheTomcatScanner/releases/tag/${version}";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/apg/default.nix b/nixpkgs/pkgs/tools/security/apg/default.nix
new file mode 100644
index 000000000000..a283678e0a16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/apg/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchFromGitHub, openssl, autoreconfHook }:
+stdenv.mkDerivation rec {
+  pname = "apg";
+  version = "unstable-2015-01-29";
+
+  src = fetchFromGitHub {
+    owner = "wilx";
+    repo = "apg";
+    rev = "7ecdbac79156c8864fa3ff8d61e9f1eb264e56c2";
+    sha256 = "sha256-+7TrJACdm/i/pc0dsp8edEIOjx8cip+x0Qc2gONajSE=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ openssl ];
+
+  meta = {
+    description = "Tools for random password generation";
+    longDescription = ''
+      APG (Automated Password Generator) is the tool set for random
+      password generation.
+
+      Standalone version
+
+        Generates some random words of required type and prints them
+        to standard output.
+
+      Network version
+
+        APG server: When client's request is arrived generates some
+        random words of predefined type and send them to client over
+        the network (according to RFC0972).
+
+        APG client: Sends the password generation request to the APG
+        server, wait for generated Passwords arrival and then prints
+        them to the standard output.
+
+     Advantages
+
+       * Built-in ANSI X9.17 RNG (Random Number Generator) (CAST/SHA1)
+       * Built-in password quality checking system (it has support for
+         Bloom filter for faster access)
+       * Two Password Generation Algorithms:
+           1. Pronounceable Password Generation Algorithm (according to
+              NIST FIPS 181)
+           2. Random Character Password Generation Algorithm with 35
+              configurable modes of operation
+       * Configurable password length parameters
+       * Configurable amount of generated passwords
+       * Ability to initialize RNG with user string
+       * Support for /dev/random
+       * Ability to crypt() generated passwords and print them as
+         additional output
+       * Special parameters to use APG in script
+       * Ability to log password generation requests for network version
+       * Ability to control APG service access using tcpd
+       * Ability to use password generation service from any type of box
+         (Mac, WinXX, etc.) that connected to network
+       * Ability to enforce remote users to use only allowed type of
+         password generation
+    '';
+    homepage = "https://github.com/wilx/apg";
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ astsmtl ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/apkleaks/default.nix b/nixpkgs/pkgs/tools/security/apkleaks/default.nix
new file mode 100644
index 000000000000..29a0b17ccb32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/apkleaks/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, jadx
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "apkleaks";
+  version = "2.6.1";
+
+  disabled = python3.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "dwisiswant0";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ysciv643p8gkqw2wp7zy4n07hihdcyil8d20lj86cpgga71rd64";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    jadx
+    pyaxmlparser
+    setuptools
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "apkleaks" ];
+
+  meta = with lib; {
+    description = "Scanning APK file for URIs, endpoints and secrets";
+    homepage = "https://github.com/dwisiswant0/apkleaks";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "apkleaks";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ares-rs/default.nix b/nixpkgs/pkgs/tools/security/ares-rs/default.nix
new file mode 100644
index 000000000000..433cdaa5792a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ares-rs/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ares-rs";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "bee-san";
+    repo = "ares";
+    rev = "refs/tags/${version}";
+    hash = "sha256-F+uBGRL1G8kiNZUCsiPbISBfId5BPwShenusqkcsHug=";
+  };
+
+  cargoHash = "sha256-7zDq66oWT+j6t9LEBUoeby8MQ1Ihhvk3KLwWPQAThyc=";
+
+  meta = with lib; {
+    description = "Automated decoding of encrypted text without knowing the key or ciphers used";
+    homepage = "https://github.com/bee-san/ares";
+    changelog = "https://github.com/bee-san/Ares/releases/tag${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "ares";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/argocd-vault-plugin/default.nix b/nixpkgs/pkgs/tools/security/argocd-vault-plugin/default.nix
new file mode 100644
index 000000000000..934be7d09942
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/argocd-vault-plugin/default.nix
@@ -0,0 +1,45 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, testers
+, argocd-vault-plugin
+}:
+
+buildGoModule rec {
+  pname = "argocd-vault-plugin";
+  version = "1.17.0";
+
+  src = fetchFromGitHub {
+    owner = "argoproj-labs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-YH7yNRaKdYzasaxYSManuiImyxglmIwgLvDKjUg3MR8=";
+  };
+
+  vendorHash = "sha256-0PrGrcS8Gx0cVImGrlmXlycFgWCTLjg2ISi0OhYoPpw=";
+
+  ldflags = [
+    "-X=github.com/argoproj-labs/argocd-vault-plugin/version.Version=v${version}"
+    "-X=github.com/argoproj-labs/argocd-vault-plugin/version.BuildDate=1970-01-01T00:00:00Z"
+    "-X=github.com/argoproj-labs/argocd-vault-plugin/version.CommitSHA=unknown"
+  ];
+
+  # integration tests require filesystem and network access for credentials
+  doCheck = false;
+
+  doInstallCheck = true;
+
+  passthru.tests.version = testers.testVersion {
+    package = argocd-vault-plugin;
+    command = "argocd-vault-plugin version";
+    version = "argocd-vault-plugin v${version} (unknown) BuildDate: 1970-01-01T00:00:00Z";
+  };
+
+  meta = with lib; {
+    homepage = "https://argocd-vault-plugin.readthedocs.io";
+    changelog = "https://github.com/argoproj-labs/argocd-vault-plugin/releases/tag/v${version}";
+    description = "An Argo CD plugin to retrieve secrets from Secret Management tools and inject them into Kubernetes secrets";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/arsenal/default.nix b/nixpkgs/pkgs/tools/security/arsenal/default.nix
new file mode 100644
index 000000000000..62dd9a598668
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/arsenal/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "arsenal";
+  version = "1.1.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "Orange-Cyberdefense";
+    repo = "arsenal";
+    rev = version;
+    sha256 = "sha256-NbNXyR5aNKvRJU9JWGk/ndwU1bhNgDOdcRqBkAY9nPA=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    libtmux
+    docutils
+    pyfzf
+    pyperclip
+    pyyaml
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "arsenal"
+  ];
+
+  meta = with lib; {
+    description = "Tool to generate commands for security and network tools";
+    homepage = "https://github.com/Orange-Cyberdefense/arsenal";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "arsenal";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/arti/default.nix b/nixpkgs/pkgs/tools/security/arti/default.nix
new file mode 100644
index 000000000000..d7368463ffd7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/arti/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitLab
+, pkg-config
+, sqlite
+, openssl
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "arti";
+  version = "1.1.13";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.torproject.org";
+    group = "tpo";
+    owner = "core";
+    repo = "arti";
+    rev = "arti-v${version}";
+    hash = "sha256-Afbys0ChT1640PfKnAH/0Knl2IfKcrsCqqoxryFDPo0=";
+  };
+
+  cargoHash = "sha256-Y4JpVQU1wVwCWWaE5HMT+SaoRpmqzzhZjefbOOwPPRg=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+
+  buildInputs = [ sqlite ]
+    ++ lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  cargoBuildFlags = [ "--package" "arti" ];
+
+  cargoTestFlags = [ "--package" "arti" ];
+
+  meta = with lib; {
+    description = "An implementation of Tor in Rust";
+    homepage = "https://gitlab.torproject.org/tpo/core/arti";
+    changelog = "https://gitlab.torproject.org/tpo/core/arti/-/raw/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/arubaotp-seed-extractor/default.nix b/nixpkgs/pkgs/tools/security/arubaotp-seed-extractor/default.nix
new file mode 100644
index 000000000000..c2ffef83635d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/arubaotp-seed-extractor/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication {
+  pname = "arubaotp-seed-extractor";
+  version = "unstable-22-12-2022";
+
+  src = fetchFromGitHub {
+    owner = "andry08";
+    repo = "ArubaOTP-seed-extractor";
+    rev = "534f78bb71594d5806fd2d7a8eade109b0e1d402";
+    hash = "sha256-1pv88OClskQOPtJaP7g0duXMe/X3M6Tk+ituZ9UxoIE=";
+  };
+
+  format = "other";
+
+  nativeBuildInputs = [
+    python3Packages.wrapPython
+  ];
+
+  pythonPath = with python3Packages; [
+    pycryptodome
+    pyotp
+    qrcode
+    requests
+  ];
+
+  installPhase = ''
+    libdir="$out/${python3Packages.python.sitePackages}/arubaotp-seed-extractor"
+    mkdir -p "$libdir"
+    cp scripts/* "$libdir"
+    chmod +x "$libdir/main.py"
+    wrapPythonProgramsIn "$libdir" "$pythonPath"
+    mkdir -p $out/bin
+    ln -s "$libdir/main.py" $out/bin/arubaotp-seed-extractor
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/andry08/ArubaOTP-seed-extractor";
+    description = "Extract TOTP seed instead of using ArubaOTP app";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix b/nixpkgs/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix
new file mode 100644
index 000000000000..28913c685778
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, imagemagick, qrencode
+, testQR ? false, zbar ? null
+}:
+
+assert testQR -> zbar != false;
+
+stdenv.mkDerivation {
+  pname = "asc-key-to-qr-code-gif";
+  version = "20180613";
+
+  src = fetchFromGitHub {
+    owner = "yishilin14";
+    repo = "asc-key-to-qr-code-gif";
+    rev = "5b7b239a0089a5269444cbe8a651c99dd43dce3f";
+    sha256 = "0yrc302a2fhbzryb10718ky4fymfcps3lk67ivis1qab5kbp6z8r";
+  };
+
+  dontBuild = true;
+  dontStrip = true;
+  dontPatchELF = true;
+
+  preInstall = let
+    substitutions = [
+      ''--replace "convert" "${imagemagick}/bin/convert"''
+      ''--replace "qrencode" "${qrencode.bin}/bin/qrencode"''
+    ] ++ lib.optionals testQR [
+      ''--replace "hash zbarimg" "true"'' # hash does not work on NixOS
+      ''--replace "$(zbarimg --raw" "$(${zbar.out}/bin/zbarimg --raw"''
+    ];
+  in ''
+    substituteInPlace asc-to-gif.sh ${lib.concatStringsSep " " substitutions}
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp * $out/bin/
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/yishilin14/asc-key-to-qr-code-gif";
+    description = "Convert ASCII-armored PGP keys to animated QR code";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ asymmetric ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/asnmap/default.nix b/nixpkgs/pkgs/tools/security/asnmap/default.nix
new file mode 100644
index 000000000000..44f2e09fc1a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/asnmap/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "asnmap";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-uX7mf1y30JngRI4UJYzghk2F4DZh9OQAjgkkNRbAgwc=";
+  };
+
+  vendorHash = "sha256-co18Q8nfRjJyDfpmJ1YSJ275DJRJHn2AR3jF8WionNY=";
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to gather network ranges using ASN information";
+    homepage = "https://github.com/projectdiscovery/asnmap";
+    changelog = "https://github.com/projectdiscovery/asnmap/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/atomic-operator/default.nix b/nixpkgs/pkgs/tools/security/atomic-operator/default.nix
new file mode 100644
index 000000000000..6db7f0ecdd08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/atomic-operator/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "atomic-operator";
+  version = "0.8.5";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "swimlane";
+    repo = pname;
+    rev = version;
+    hash = "sha256-DyNqu3vndyLkmfybCfTbgxk3t/ALg7IAkAMg4kBkH7Q=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "charset_normalizer~=2.0.0" "charset_normalizer"
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    attrs
+    certifi
+    chardet
+    charset-normalizer
+    fire
+    idna
+    paramiko
+    pick
+    pypsrp
+    pyyaml
+    requests
+    urllib3
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "atomic_operator"
+  ];
+
+  disabledTests = [
+    # Tests require network access
+    "test_download_of_atomic_red_team_repo"
+    "test_setting_input_arguments"
+    "test_config_parser"
+  ];
+
+  meta = with lib; {
+    description = "Tool to execute Atomic Red Team tests (Atomics)";
+    homepage = "https://www.atomic-operator.com/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/authoscope/default.nix b/nixpkgs/pkgs/tools/security/authoscope/default.nix
new file mode 100644
index 000000000000..f21df67035e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/authoscope/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, libcap
+, openssl
+, pkg-config
+, rustPlatform
+, Security
+, zlib
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "authoscope";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "kpcyrd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-SKgb/N249s0+Rb59moBT/MeFb4zAAElCMQJto0diyUk=";
+  };
+
+  cargoSha256 = "sha256-rSHuKy86iJNLAKSVcb7fn7A/cc75EOc97jGI14EaC6k=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+  ];
+
+  buildInputs = [
+    libcap
+    zlib
+    openssl
+  ] ++ lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    installManPage docs/${pname}.1
+  '';
+
+  # Tests requires access to httpin.org
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Scriptable network authentication cracker";
+    homepage = "https://github.com/kpcyrd/authoscope";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/authz0/default.nix b/nixpkgs/pkgs/tools/security/authz0/default.nix
new file mode 100644
index 000000000000..04d2598fd521
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/authz0/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "authz0";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "hahwul";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-NrArxuhzd57NIdM4d9p/wfCB1e6l83pV+cjjCgZ9YtM=";
+  };
+
+  vendorHash = "sha256-ARPrArvCgxLdCaiUdJyjB/9GbbldnMXwFbyYubbsqxc=";
+
+  meta = with lib; {
+    description = "Automated authorization test tool";
+    homepage = "https://github.com/hahwul/authz0";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aws-iam-authenticator/default.nix b/nixpkgs/pkgs/tools/security/aws-iam-authenticator/default.nix
new file mode 100644
index 000000000000..6badf451368e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aws-iam-authenticator/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "aws-iam-authenticator";
+  version = "0.6.17";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-CsurRQDPWJ/P/Q4aZhtUW8Z60+hgzw46+98N/QbFcTU=";
+  };
+
+  vendorHash = "sha256-TDsY05jnutNIKx0z6/8vGvsgYCIKBkTxh9mXqk4IR38=";
+
+  ldflags = let PKG = "sigs.k8s.io/aws-iam-authenticator"; in [
+    "-s"
+    "-w"
+    "-X=${PKG}/pkg.Version=${version}"
+    "-X=${PKG}/pkg.BuildDate=1970-01-01T01:01:01Z"
+    "-X ?${PKG}/pkg.CommitID=${version}"
+  ];
+
+  subPackages = [ "cmd/aws-iam-authenticator" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/kubernetes-sigs/aws-iam-authenticator";
+    description = "AWS IAM credentials for Kubernetes authentication";
+    changelog = "https://github.com/kubernetes-sigs/aws-iam-authenticator/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ srhb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/b2sum/default.nix b/nixpkgs/pkgs/tools/security/b2sum/default.nix
new file mode 100644
index 000000000000..581feb28ce08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/b2sum/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, openmp ? null }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "b2sum";
+  version = "20190724";
+
+  src = fetchFromGitHub {
+    owner = "BLAKE2";
+    repo = "BLAKE2";
+    rev = finalAttrs.version;
+    sha256 = "sha256-6BVl3Rh+CRPQq3QxcUlk5ArvjIj/IcPCA2/Ok0Zu7UI=";
+  };
+
+  # Use the generic C implementation rather than the SSE optimised version on non-x86 platforms
+  postPatch = lib.optionalString (!stdenv.hostPlatform.isx86) ''
+    substituteInPlace makefile \
+      --replace "#FILES=b2sum.c ../ref/" "FILES=b2sum.c ../ref/" \
+      --replace "FILES=b2sum.c ../sse/" "#FILES=b2sum.c ../sse/"
+  '';
+
+  sourceRoot = "${finalAttrs.src.name}/b2sum";
+
+  buildInputs = [ openmp ];
+
+  buildFlags = [ (lib.optional (openmp == null) "NO_OPENMP=1") ];
+
+  # clang builds require at least C99 or the build fails with:
+  # error: unknown type name 'inline'
+  env.NIX_CFLAGS_COMPILE = "-std=c99";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "The b2sum utility is similar to the md5sum or shasum utilities but for BLAKE2";
+    homepage = "https://blake2.net";
+    license = with licenses; [ asl20 cc0 openssl ];
+    maintainers = with maintainers; [ kirelagin ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/b3sum/default.nix b/nixpkgs/pkgs/tools/security/b3sum/default.nix
new file mode 100644
index 000000000000..858226fb569b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/b3sum/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchCrate, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "b3sum";
+  version = "1.5.0";
+
+  src = fetchCrate {
+    inherit version pname;
+    sha256 = "sha256-yjMuXL0eW+6mm26LgIjD22WyTjb+KMjKRI68mpGGAZA=";
+  };
+
+  cargoHash = "sha256-Ka+5RKRSVQYoLFXE1bEc6fGFQcbrFTVgi6yAoGIDdUI=";
+
+  meta = {
+    description = "BLAKE3 cryptographic hash function";
+    homepage = "https://github.com/BLAKE3-team/BLAKE3/";
+    maintainers = with lib.maintainers; [ fpletz ivan ];
+    license = with lib.licenses; [ cc0 asl20 ];
+    changelog = "https://github.com/BLAKE3-team/BLAKE3/releases/tag/${version}";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/baboossh/default.nix b/nixpkgs/pkgs/tools/security/baboossh/default.nix
new file mode 100644
index 000000000000..66712eb99b2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/baboossh/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "baboossh";
+  version = "1.2.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "cybiere";
+    repo = "baboossh";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-E/a6dL6BpQ6D8v010d8/qav/fkxpCYNvSvoPAZsm0Hk=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    cmd2
+    tabulate
+    paramiko
+    python-libnmap
+  ];
+
+  # No tests available
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "baboossh"
+  ];
+
+  meta = with lib; {
+    description = "Tool to do SSH spreading";
+    homepage = "https://github.com/cybiere/baboossh";
+    changelog = "https://github.com/cybiere/baboossh/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    mainProgram = "baboossh";
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/badchars/default.nix b/nixpkgs/pkgs/tools/security/badchars/default.nix
new file mode 100644
index 000000000000..3125ff0c28c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/badchars/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+}:
+
+buildPythonApplication rec {
+  pname = "badchars";
+  version = "0.4.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1xqki8qnfwl97d60xj69alyzwa1mnfbwki25j0vhvhb05varaxz2";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py --replace "argparse" ""
+  '';
+
+  # no tests are available and it can't be imported (it's only a script, not a module)
+  doCheck = false;
+
+  meta = with lib; {
+    description = "HEX badchar generator for different programming languages";
+    longDescription = ''
+      A HEX bad char generator to instruct encoders such as shikata-ga-nai to
+      transform those to other chars.
+    '';
+    homepage = "https://github.com/cytopia/badchars";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/badrobot/default.nix b/nixpkgs/pkgs/tools/security/badrobot/default.nix
new file mode 100644
index 000000000000..e25e18b5ead2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/badrobot/default.nix
@@ -0,0 +1,45 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "badrobot";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "controlplaneio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-mLBJLeB85QeC4PYH4FyOI8lHz1OxIJlJbqgDfXTNnhM=";
+  };
+  vendorHash = "sha256-SB7gGgm7BwMSo4ocKX4UGB+OdjVY92S5YZfOmTl4VEk=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/controlplaneio/badrobot/cmd.version=v${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd badrobot \
+      --bash <($out/bin/badrobot completion bash) \
+      --fish <($out/bin/badrobot completion fish) \
+      --zsh <($out/bin/badrobot completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/controlplaneio/badrobot";
+    changelog = "https://github.com/controlplaneio/badrobot/blob/v${version}/CHANGELOG.md";
+    description = "Operator Security Audit Tool";
+    longDescription = ''
+      Badrobot is a Kubernetes Operator audit tool. It statically analyses
+      manifests for high risk configurations such as lack of security
+      restrictions on the deployed controller and the permissions of an
+      associated clusterole. The risk analysis is primarily focussed on the
+      likelihood that a compromised Operator would be able to obtain full
+      cluster permissions.
+    '';
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bao/default.nix b/nixpkgs/pkgs/tools/security/bao/default.nix
new file mode 100644
index 000000000000..503896885c13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bao/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bao";
+  version = "0.12.1";
+
+  src = fetchCrate {
+    inherit version;
+    pname = "${pname}_bin";
+    sha256 = "sha256-+MjfqIg/aKPWhzxbPJ0dnS4egCj50Ib7ob3zXUSBXRg=";
+  };
+
+  cargoHash = "sha256-SNsRN5XgchZq6/BZnMeahIqnkP4Jq6bZxbE5cDVpsQA=";
+
+  meta = {
+    description = "An implementation of BLAKE3 verified streaming";
+    homepage = "https://github.com/oconnor663/bao";
+    maintainers = with lib.maintainers; [ amarshall ];
+    license = with lib.licenses; [ cc0 asl20 ];
+    mainProgram = "bao";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bash-supergenpass/default.nix b/nixpkgs/pkgs/tools/security/bash-supergenpass/default.nix
new file mode 100644
index 000000000000..ae831bf86753
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bash-supergenpass/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv
+, fetchFromGitHub
+, unstableGitUpdater
+, makeWrapper
+, openssl
+, coreutils
+, gnugrep }:
+
+stdenv.mkDerivation {
+  pname = "bash-supergenpass";
+  version = "unstable-2020-02-03";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchFromGitHub {
+    owner = "lanzz";
+    repo = "bash-supergenpass";
+    rev = "e5d96599b65d65a37148996f00f9d057e522e4d8";
+    sha256 = "1d8csp94l2p5y5ln53aza5qf246rwmd10043x0x1yrswqrrya40f";
+  };
+
+  installPhase = ''
+    install -m755 -D supergenpass.sh "$out/bin/supergenpass"
+    wrapProgram "$out/bin/supergenpass" --prefix PATH : "${lib.makeBinPath [ openssl coreutils gnugrep ]}"
+  '';
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/lanzz/bash-supergenpass.git";
+  };
+
+  meta = with lib; {
+    description = "Bash shell-script implementation of SuperGenPass password generation";
+    longDescription = ''
+      Bash shell-script implementation of SuperGenPass password generation
+      Usage: ./supergenpass.sh <domain> [ <length> ]
+
+      Default <length> is 10, which is also the original SuperGenPass default length.
+
+      The <domain> parameter is also optional, but it does not make much sense to omit it.
+
+      supergenpass will ask for your master password interactively, and it will not be displayed on your terminal.
+    '';
+    homepage = "https://github.com/lanzz/bash-supergenpass";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz ];
+    mainProgram = "supergenpass";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bettercap/default.nix b/nixpkgs/pkgs/tools/security/bettercap/default.nix
new file mode 100644
index 000000000000..2ece9ee6e4c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bettercap/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, libpcap
+, libnfnetlink
+, libnetfilter_queue
+, libusb1
+}:
+
+buildGoModule rec {
+  pname = "bettercap";
+  version = "2.32.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-OND8WPqU/95rKykqMAPWmDsJ+AjsjGjrncZ2/m3mpt0=";
+  };
+
+  vendorHash = "sha256-QKv8F9QLRi+1Bqj9KywJsTErjs7o6gFM4tJLA8y52MY=";
+
+  doCheck = false;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libpcap libusb1 ]
+    ++ lib.optionals stdenv.isLinux [ libnfnetlink libnetfilter_queue ];
+
+  meta = with lib; {
+    description = "A man in the middle tool";
+    longDescription = ''
+      BetterCAP is a powerful, flexible and portable tool created to perform various
+      types of MITM attacks against a network, manipulate HTTP, HTTPS and TCP traffic
+      in realtime, sniff for credentials and much more.
+    '';
+    homepage = "https://www.bettercap.org/";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ y0no ];
+    mainProgram = "bettercap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/beyond-identity/default.nix b/nixpkgs/pkgs/tools/security/beyond-identity/default.nix
new file mode 100644
index 000000000000..31b3439f0e87
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/beyond-identity/default.nix
@@ -0,0 +1,90 @@
+{ lib, stdenv, fetchurl, dpkg, buildFHSEnv
+, glibc, glib, openssl, tpm2-tss
+, gtk3, gnome, polkit, polkit_gnome
+}:
+
+let
+  pname = "beyond-identity";
+  version = "2.60.0-0";
+  libPath = lib.makeLibraryPath ([ glib glibc openssl tpm2-tss gtk3 gnome.gnome-keyring polkit polkit_gnome ]);
+  meta = with lib; {
+    description = "Passwordless MFA identities for workforces, customers, and developers";
+    homepage = "https://www.beyondidentity.com";
+    downloadPage = "https://app.byndid.com/downloads";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ klden ];
+    platforms = [ "x86_64-linux" ];
+  };
+
+  beyond-identity = stdenv.mkDerivation {
+    inherit pname version meta;
+
+    src = fetchurl {
+      url = "https://packages.beyondidentity.com/public/linux-authenticator/deb/ubuntu/pool/focal/main/b/be/${pname}_${version}/${pname}_${version}_amd64.deb";
+      hash = "sha512-JrHLf7KkJVbJLxx54OTvOSaIzY3+hjX+bpkeBHKX23YriCJssUUvEP6vlbI4r6gjMMFMhW92k0iikAgD1Tr4ug==";
+    };
+
+    nativeBuildInputs = [
+      dpkg
+    ];
+
+    unpackPhase = ''
+      dpkg -x $src .
+    '';
+
+    installPhase = ''
+      mkdir -p $out/opt/beyond-identity
+
+      rm -rf usr/share/doc
+
+      # https://github.com/NixOS/nixpkgs/issues/42117
+      sed -i -e 's/auth_self/yes/g' usr/share/polkit-1/actions/com.beyondidentity.endpoint.stepup.policy
+
+      cp -ar usr/{bin,share} $out
+      cp -ar opt/beyond-identity/bin $out/opt/beyond-identity
+
+      ln -s $out/opt/beyond-identity/bin/* $out/bin/
+    '';
+
+    postFixup = ''
+      substituteInPlace \
+        $out/share/applications/com.beyondidentity.endpoint.BeyondIdentity.desktop \
+        --replace /usr/bin/ $out/bin/
+      substituteInPlace \
+        $out/share/applications/com.beyondidentity.endpoint.webserver.BeyondIdentity.desktop \
+        --replace /opt/ $out/opt/
+      substituteInPlace \
+        $out/opt/beyond-identity/bin/byndid-web \
+        --replace /opt/ $out/opt/
+      substituteInPlace \
+        $out/bin/beyond-identity \
+        --replace /opt/ $out/opt/ \
+        --replace /usr/bin/gtk-launch ${gtk3}/bin/gtk-launch
+
+      patchelf \
+        --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "${libPath}" \
+        --force-rpath \
+        $out/bin/byndid
+    '';
+  };
+# /usr/bin/pkcheck is hardcoded in binary - we need FHS
+in buildFHSEnv {
+   inherit meta;
+   name = pname;
+
+   targetPkgs = pkgs: [
+     beyond-identity
+     glib glibc openssl tpm2-tss
+     gtk3 gnome.gnome-keyring
+     polkit polkit_gnome
+   ];
+
+   extraInstallCommands = ''
+     ln -s ${beyond-identity}/share $out
+   '';
+
+   runScript = "beyond-identity";
+}
+
diff --git a/nixpkgs/pkgs/tools/security/binbloom/default.nix b/nixpkgs/pkgs/tools/security/binbloom/default.nix
new file mode 100644
index 000000000000..0805e7b988d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/binbloom/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "binbloom";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "quarkslab";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-UiKiDey/pHtJDr4UYqt+T/TneKig5tT8YU2u98Ttjmo=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Raw binary firmware analysis software";
+    homepage = "https://github.com/quarkslab/binbloom";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ erdnaxe ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/biscuit-cli/default.nix b/nixpkgs/pkgs/tools/security/biscuit-cli/default.nix
new file mode 100644
index 000000000000..74dac8b56586
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/biscuit-cli/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, testers
+, nix-update-script
+, biscuit-cli
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "biscuit-cli";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "biscuit-auth";
+    repo = "biscuit-cli";
+    rev = version;
+    sha256 = "sha256-Mvrv3BU0Pw85fs8IbjMKSQLIhtU6SKoLC0cuGdhfAYs=";
+  };
+
+  cargoHash = "sha256-tgmM0rswIFrpFyupaASTXYvIyhVu0fXJJN+hg0p+vrQ=";
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      inherit version;
+      package = biscuit-cli;
+      command = "biscuit --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "CLI to generate and inspect biscuit tokens";
+    homepage = "https://www.biscuitsec.org/";
+    maintainers = with maintainers; [ shlevy gaelreyrol ];
+    license = licenses.bsd3;
+    mainProgram = "biscuit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bitwarden-directory-connector/default.nix b/nixpkgs/pkgs/tools/security/bitwarden-directory-connector/default.nix
new file mode 100644
index 000000000000..7f46b444b2e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bitwarden-directory-connector/default.nix
@@ -0,0 +1,103 @@
+{
+  lib,
+  buildNpmPackage,
+  electron,
+  fetchFromGitHub,
+  buildPackages,
+  python3,
+  pkg-config,
+  libsecret,
+  nodejs_18,
+}:
+
+let
+  common = { name, npmBuildScript, installPhase }: buildNpmPackage rec {
+    pname = name;
+    version = "2023.10.0";
+    nodejs = nodejs_18;
+
+    src = fetchFromGitHub {
+      owner = "bitwarden";
+      repo = "directory-connector";
+      rev = "v${version}";
+      hash = "sha256-PlOtTh+rpTxAv8ajHBDHZuL7yeeLVpbAfKEDPQlejIg=";
+    };
+
+    postPatch = ''
+      ${lib.getExe buildPackages.jq} 'del(.scripts.preinstall)' package.json > package.json.tmp
+      mv -f package.json{.tmp,}
+
+      substituteInPlace electron-builder.json \
+        --replace-fail '"afterSign": "scripts/notarize.js",' "" \
+        --replace-fail "AppImage" "dir"
+    '';
+
+    npmDepsHash = "sha256-jBAWWY12qeX2EDhUvT3TQpnQvYXRsIilRrXGpVzxYvw=";
+
+    env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
+
+    makeCacheWritable = true;
+    inherit npmBuildScript installPhase;
+
+    buildInputs = [
+      libsecret
+    ];
+
+    nativeBuildInputs = [
+      python3
+      pkg-config
+    ];
+
+    meta = with lib; {
+      description = "LDAP connector for Bitwarden";
+      homepage = "https://github.com/bitwarden/directory-connector";
+      license = licenses.gpl3Only;
+      maintainers = with maintainers; [ Silver-Golden SuperSandro2000 ];
+      platforms = platforms.linux;
+      mainProgram = name;
+    };
+  };
+in {
+  bitwarden-directory-connector = common {
+    name = "bitwarden-directory-connector";
+    npmBuildScript = "build:dist";
+    installPhase = ''
+      runHook preInstall
+
+      npm exec electron-builder -- \
+        --dir \
+        -c.electronDist=${electron}/libexec/electron \
+        -c.electronVersion=${electron.version} \
+        -c.npmRebuild=false
+
+      mkdir -p $out/share/bitwarden-directory-connector $out/bin
+      cp -r dist/*-unpacked/{locales,resources{,.pak}} $out/share/bitwarden-directory-connector
+
+      makeWrapper ${lib.getExe electron} $out/bin/bitwarden-directory-connector \
+        --add-flags $out/share/bitwarden-directory-connector/resources/app.asar \
+        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+        --set-default ELECTRON_IS_DEV 0 \
+        --inherit-argv0
+
+      runHook postInstall
+    '';
+  };
+
+  bitwarden-directory-connector-cli = common {
+    name = "bitwarden-directory-connector-cli";
+    npmBuildScript = "build:cli:prod";
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/libexec/bitwarden-directory-connector
+      cp -R build-cli node_modules $out/libexec/bitwarden-directory-connector
+
+      # needs to be wrapped with nodejs so that it can be executed
+      chmod +x $out/libexec/bitwarden-directory-connector/build-cli/bwdc.js
+      mkdir -p $out/bin
+      ln -s $out/libexec/bitwarden-directory-connector/build-cli/bwdc.js $out/bin/bitwarden-directory-connector-cli
+
+      runHook postInstall
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bitwarden/cli.nix b/nixpkgs/pkgs/tools/security/bitwarden/cli.nix
new file mode 100644
index 000000000000..68abb6385319
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bitwarden/cli.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, buildNpmPackage
+, nodejs_18
+, fetchFromGitHub
+, python3
+, darwin
+, nixosTests
+}:
+
+buildNpmPackage rec {
+  pname = "bitwarden-cli";
+  version = "2024.2.0";
+
+  src = fetchFromGitHub {
+    owner = "bitwarden";
+    repo = "clients";
+    rev = "cli-v${version}";
+    hash = "sha256-nCjcwe+7Riml/J0hAVv/t6/oHIDPhwFD5A3iQ/LNR5Y=";
+  };
+
+  nodejs = nodejs_18;
+
+  npmDepsHash = "sha256-GJl9pVwFWEg9yku9IXLcu2XMJZz+ZoQOxCf1TrW715Y=";
+
+  nativeBuildInputs = [
+    python3
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.cctools
+  ];
+
+  makeCacheWritable = true;
+
+  env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
+
+  npmBuildScript = "build:prod";
+
+  npmWorkspace = "apps/cli";
+
+  npmFlags = [ "--legacy-peer-deps" ];
+
+  passthru.tests = {
+    vaultwarden = nixosTests.vaultwarden.sqlite;
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/bitwarden/clients/releases/tag/${src.rev}";
+    description = "A secure and free password manager for all of your devices";
+    homepage = "https://bitwarden.com";
+    license = lib.licenses.gpl3Only;
+    mainProgram = "bw";
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bitwarden/default.nix b/nixpkgs/pkgs/tools/security/bitwarden/default.nix
new file mode 100644
index 000000000000..5ed43dc6b3b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bitwarden/default.nix
@@ -0,0 +1,191 @@
+{ lib
+, buildNpmPackage
+, cargo
+, copyDesktopItems
+, dbus
+, electron_28
+, fetchFromGitHub
+, fetchpatch2
+, glib
+, gnome
+, gtk3
+, jq
+, libsecret
+, makeDesktopItem
+, makeWrapper
+, moreutils
+, napi-rs-cli
+, nodejs_18
+, patchutils_0_4_2
+, pkg-config
+, python3
+, runCommand
+, rustc
+, rustPlatform
+}:
+
+let
+  description = "A secure and free password manager for all of your devices";
+  icon = "bitwarden";
+  electron = electron_28;
+in buildNpmPackage rec {
+  pname = "bitwarden";
+  version = "2024.2.0";
+
+  src = fetchFromGitHub {
+    owner = "bitwarden";
+    repo = "clients";
+    rev = "desktop-v${version}";
+    hash = "sha256-nCjcwe+7Riml/J0hAVv/t6/oHIDPhwFD5A3iQ/LNR5Y=";
+  };
+
+  patches = [
+    (fetchpatch2 {
+      # https://github.com/bitwarden/clients/pull/7508
+      url = "https://github.com/amarshall/bitwarden-clients/commit/e85fa4ef610d9dd05bd22a9b93d54b0c7901776d.patch";
+      hash = "sha256-P9MTsiNbAb2kKo/PasIm9kGm0lQjuVUxAJ3Fh1DfpzY=";
+    })
+  ];
+
+  nodejs = nodejs_18;
+
+  makeCacheWritable = true;
+  npmFlags = [ "--legacy-peer-deps" ];
+  npmWorkspace = "apps/desktop";
+  npmDepsHash = "sha256-GJl9pVwFWEg9yku9IXLcu2XMJZz+ZoQOxCf1TrW715Y=";
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    name = "${pname}-${version}";
+    inherit src;
+    patches = map
+      (patch: runCommand
+        (builtins.baseNameOf patch)
+        { nativeBuildInputs = [ patchutils_0_4_2 ]; }
+        ''
+          < ${patch} filterdiff -p1 --include=${lib.escapeShellArg cargoRoot}'/*' > $out
+        ''
+      )
+      patches;
+    patchFlags = [ "-p4" ];
+    sourceRoot = "${src.name}/${cargoRoot}";
+    hash = "sha256-KJUz5hvdsurnohUWRZedXvuWMnLtR0dcdTeHtJGrZBs=";
+  };
+  cargoRoot = "apps/desktop/desktop_native";
+
+  env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
+
+  nativeBuildInputs = [
+    cargo
+    copyDesktopItems
+    jq
+    makeWrapper
+    moreutils
+    napi-rs-cli
+    pkg-config
+    python3
+    rustc
+    rustPlatform.cargoCheckHook
+    rustPlatform.cargoSetupHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    libsecret
+  ];
+
+  preBuild = ''
+    if [[ $(jq --raw-output '.devDependencies.electron' < package.json | grep -E --only-matching '^[0-9]+') != ${lib.escapeShellArg (lib.versions.major electron.version)} ]]; then
+      echo 'ERROR: electron version mismatch'
+      exit 1
+    fi
+  '';
+
+  postBuild = ''
+    pushd apps/desktop
+
+    # desktop_native/index.js loads a file of that name regarldess of the libc being used
+    mv desktop_native/desktop_native.* desktop_native/desktop_native.linux-x64-musl.node
+
+    npm exec electron-builder -- \
+      --dir \
+      -c.electronDist=${electron}/libexec/electron \
+      -c.electronVersion=${electron.version}
+
+    popd
+  '';
+
+  doCheck = true;
+
+  nativeCheckInputs = [
+    dbus
+    (gnome.gnome-keyring.override { useWrappedDaemon = false; })
+  ];
+
+  checkFlags = [
+    "--skip=password::password::tests::test"
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    pushd ${cargoRoot}
+    export HOME=$(mktemp -d)
+    export -f cargoCheckHook runHook _eval _callImplicitHook
+    export cargoCheckType=release
+    dbus-run-session \
+      --config-file=${dbus}/share/dbus-1/session.conf \
+      -- bash -e -c cargoCheckHook
+    popd
+
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+
+    pushd apps/desktop/dist/linux-unpacked
+    mkdir -p $out/opt/Bitwarden
+    cp -r locales resources{,.pak} $out/opt/Bitwarden
+    popd
+
+    makeWrapper '${electron}/bin/electron' "$out/bin/bitwarden" \
+      --add-flags $out/opt/Bitwarden/resources/app.asar \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+      --set-default ELECTRON_IS_DEV 0 \
+      --inherit-argv0
+
+    pushd apps/desktop/resources/icons
+    for icon in *.png; do
+      dir=$out/share/icons/hicolor/"''${icon%.png}"/apps
+      mkdir -p "$dir"
+      cp "$icon" "$dir"/${icon}.png
+    done
+    popd
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "bitwarden";
+      exec = "bitwarden %U";
+      inherit icon;
+      comment = description;
+      desktopName = "Bitwarden";
+      categories = [ "Utility" ];
+    })
+  ];
+
+  meta = {
+    changelog = "https://github.com/bitwarden/clients/releases/tag/${src.rev}";
+    inherit description;
+    homepage = "https://bitwarden.com";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ amarshall kiwi ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "bitwarden";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bitwarden/electron-27.patch b/nixpkgs/pkgs/tools/security/bitwarden/electron-27.patch
new file mode 100644
index 000000000000..5b2af2ce30f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bitwarden/electron-27.patch
@@ -0,0 +1,69 @@
+From e2c15e826fe9d4d2d12868ef5409e423e3191b58 Mon Sep 17 00:00:00 2001
+From: Daniel James Smith <2670567+djsmith85@users.noreply.github.com>
+Date: Fri, 8 Dec 2023 13:07:46 +0100
+Subject: [PATCH] Bump electron to v27.1.3 (#7134)
+
+Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
+
+(cherry picked from commit d76602343f36d8e17a9b0204e0290488456c96d5)
+---
+ apps/desktop/electron-builder.json | 2 +-
+ package-lock.json                  | 8 ++++----
+ package.json                       | 2 +-
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/apps/desktop/electron-builder.json b/apps/desktop/electron-builder.json
+index 69d1c0074f..a12870bd96 100644
+--- a/apps/desktop/electron-builder.json
++++ b/apps/desktop/electron-builder.json
+@@ -19,7 +19,7 @@
+     "**/node_modules/@bitwarden/desktop-native/index.js",
+     "**/node_modules/@bitwarden/desktop-native/desktop_native.${platform}-${arch}*.node"
+   ],
+-  "electronVersion": "25.9.1",
++  "electronVersion": "27.1.3",
+   "generateUpdatesFilesForAllChannels": true,
+   "publish": {
+     "provider": "generic",
+diff --git a/package-lock.json b/package-lock.json
+index 3f0afde95b..9b7b2dbcd9 100644
+--- a/package-lock.json
++++ b/package-lock.json
+@@ -125,7 +125,7 @@
+         "cross-env": "7.0.3",
+         "css-loader": "6.8.1",
+         "del": "6.1.1",
+-        "electron": "25.9.1",
++        "electron": "27.1.3",
+         "electron-builder": "23.6.0",
+         "electron-log": "5.0.0",
+         "electron-reload": "2.0.0-alpha.1",
+@@ -20173,9 +20173,9 @@
+       }
+     },
+     "node_modules/electron": {
+-      "version": "25.9.1",
+-      "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.1.tgz",
+-      "integrity": "sha512-Uo/Fh7igjoUXA/f90iTATZJesQEArVL1uLA672JefNWTLymdKSZkJKiCciu/Xnd0TS6qvdIOUGuJFSTQnKskXQ==",
++      "version": "27.1.3",
++      "resolved": "https://registry.npmjs.org/electron/-/electron-27.1.3.tgz",
++      "integrity": "sha512-7eD8VMhhlL5J531OOawn00eMthUkX1e3qN5Nqd7eMK8bg5HxQBrn8bdPlvUEnCano9KhrVwaDnGeuzWoDOGpjQ==",
+       "dev": true,
+       "hasInstallScript": true,
+       "dependencies": {
+diff --git a/package.json b/package.json
+index 9ee884b31d..4a5c3513fd 100644
+--- a/package.json
++++ b/package.json
+@@ -88,7 +88,7 @@
+     "cross-env": "7.0.3",
+     "css-loader": "6.8.1",
+     "del": "6.1.1",
+-    "electron": "25.9.1",
++    "electron": "27.1.3",
+     "electron-builder": "23.6.0",
+     "electron-log": "5.0.0",
+     "electron-reload": "2.0.0-alpha.1",
+-- 
+2.42.0
+
diff --git a/nixpkgs/pkgs/tools/security/bkcrack/default.nix b/nixpkgs/pkgs/tools/security/bkcrack/default.nix
new file mode 100644
index 000000000000..afc18759c78d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bkcrack/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, nix-update-script
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "bkcrack";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "kimci86";
+    repo = "bkcrack";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-x7JK7+DcD2uSWZRTJQPGCcF2mHBlu6FwYUbuYzbvD+s=";
+  };
+
+  passthru.updateScript = nix-update-script { };
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [
+    "-DBKCRACK_BUILD_TESTING=${if finalAttrs.doCheck then "ON" else "OFF"}"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/bin $out/share/doc/bkcrack $out/share/licenses/bkcrack
+    mv $out/bkcrack $out/bin/
+    mv $out/license.txt $out/share/licenses/bkcrack
+    mv $out/example $out/tools $out/readme.md $out/share/doc/bkcrack
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Crack legacy zip encryption with Biham and Kocher's known plaintext attack";
+    homepage = "https://github.com/kimci86/bkcrack";
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ erdnaxe ];
+    mainProgram = "bkcrack";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/bmrsa/11.nix b/nixpkgs/pkgs/tools/security/bmrsa/11.nix
new file mode 100644
index 000000000000..932566c65060
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bmrsa/11.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "bmrsa";
+  version = "11";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bmrsa/bmrsa${version}.zip";
+    sha256 = "0ksd9xkvm9lkvj4yl5sl0zmydp1wn3xhc55b28gj70gi4k75kcl4";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  unpackPhase = ''
+    mkdir bmrsa
+    cd bmrsa
+    unzip ${src}
+    sed -e 's/gcc/g++/' -i Makefile
+    mkdir -p $out/bin
+    echo -e 'install:\n\tcp bmrsa '$out'/bin' >> Makefile
+  '';
+
+  meta = with lib; {
+    description = "RSA utility";
+    homepage = "http://bmrsa.sourceforge.net/";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/boofuzz/default.nix b/nixpkgs/pkgs/tools/security/boofuzz/default.nix
new file mode 100644
index 000000000000..39b35d6944de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/boofuzz/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "boofuzz";
+  version = "0.4.2";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "jtpereyda";
+    repo = "boofuzz";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ffZVFmfDAJ+Qn3hbeHY/CvYgpDLxB+jaYOiYyZqZ7mo=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    attrs
+    click
+    colorama
+    flask
+    funcy
+    future
+    psutil
+    pyserial
+    pydot
+    six
+    tornado
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    mock
+    netifaces
+    pytest-bdd
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    "TestNetworkMonitor"
+    "TestNoResponseFailure"
+    "TestProcessMonitor"
+    "TestSocketConnection"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "test_time_repeater"
+  ];
+
+  pythonImportsCheck = [
+    "boofuzz"
+  ];
+
+  meta = with lib; {
+    description = "Network protocol fuzzing tool";
+    homepage = "https://github.com/jtpereyda/boofuzz";
+    changelog = "https://github.com/jtpereyda/boofuzz/blob/v${version}/CHANGELOG.rst";
+    license = with licenses; [ gpl2Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bpb/default.nix b/nixpkgs/pkgs/tools/security/bpb/default.nix
new file mode 100644
index 000000000000..88eeb7c254d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bpb/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, lib
+, rustPlatform
+, fetchFromGitHub
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bpb";
+  version = "unstable-2018-07-27";
+
+  src = fetchFromGitHub {
+    owner = "withoutboats";
+    repo = "bpb";
+    rev = "b1ef5ca1d2dea0e2ec0b1616f087f110ea17adfa";
+    sha256 = "sVfM8tlAsF4uKLxl3g/nSYgOx+znHIdPalSIiCd18o4=";
+  };
+
+  cargoSha256 = "7cARRJWRxF1kMySX6KcB6nrVf8k1p/nr3OyAwNLmztc=";
+
+  # a nightly compiler is required unless we use this cheat code.
+  RUSTC_BOOTSTRAP = 1;
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Tool to automatically sign git commits, replacing gpg for that purpose";
+    homepage = "https://github.com/withoutboats/bpb";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/browserpass/default.nix b/nixpkgs/pkgs/tools/security/browserpass/default.nix
new file mode 100644
index 000000000000..1dd2a27f1ec3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/browserpass/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, gnupg
+, makeWrapper
+, autoPatchelfHook
+, testers
+, browserpass
+}:
+
+buildGoModule rec {
+  pname = "browserpass";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    owner = "browserpass";
+    repo = "browserpass-native";
+    rev = version;
+    sha256 = "sha256-UZzOPRRiCUIG7uSSp9AEPMDN/+4cgyK47RhrI8oUx8U=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ] ++ lib.optionals stdenv.isLinux [ autoPatchelfHook ];
+
+  vendorHash = "sha256-CjuH4ANP2bJDeA+o+1j+obbtk5/NVLet/OFS3Rms4r0=";
+
+  doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
+
+  postPatch = ''
+    # Because this Makefile will be installed to be used by the user, patch
+    # variables to be valid by default
+    substituteInPlace Makefile \
+      --replace "PREFIX ?= /usr" ""
+    sed -i -e 's/SED =.*/SED = sed/' Makefile
+    sed -i -e 's/INSTALL =.*/INSTALL = install/' Makefile
+  '';
+
+  DESTDIR = placeholder "out";
+
+  postConfigure = ''
+    make configure
+  '';
+
+  buildPhase = ''
+    make browserpass
+  '';
+
+  checkTarget = "test";
+
+  installPhase = ''
+    make install
+
+    wrapProgram $out/bin/browserpass \
+      --suffix PATH : ${lib.makeBinPath [ gnupg ]}
+
+    # This path is used by our firefox wrapper for finding native messaging hosts
+    mkdir -p $out/lib/mozilla/native-messaging-hosts
+    # Copy ff manifests rather than linking to allow link-farming to work recursively in dependants
+    cp $out/lib/browserpass/hosts/firefox/*.json $out/lib/mozilla/native-messaging-hosts/
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = browserpass;
+    command = "browserpass --version";
+  };
+
+  meta = with lib; {
+    description = "Browserpass native client app";
+    homepage = "https://github.com/browserpass/browserpass-native";
+    license = licenses.isc;
+    maintainers = with maintainers; [ rvolosatovs infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bruteforce-luks/default.nix b/nixpkgs/pkgs/tools/security/bruteforce-luks/default.nix
new file mode 100644
index 000000000000..084368c105b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bruteforce-luks/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, cryptsetup }:
+
+stdenv.mkDerivation rec {
+  pname = "bruteforce-luks";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    sha256 = "0yyrda077avdapq1mvavgv5mvj2r94d6p01q56bbnaq4a3h5kfd6";
+    rev = version;
+    repo = "bruteforce-luks";
+    owner = "glv2";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ cryptsetup ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Cracks passwords of LUKS encrypted volumes";
+    longDescription = ''
+      The program tries to decrypt at least one of the key slots by trying
+      all the possible passwords. It is especially useful if you know
+      something about the password (i.e. you forgot a part of your password but
+      still remember most of it). Finding the password of a volume without
+      knowing anything about it would take way too much time (unless the
+      password is really short and/or weak). It can also use a dictionary.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/brutespray/default.nix b/nixpkgs/pkgs/tools/security/brutespray/default.nix
new file mode 100644
index 000000000000..9b7ad8c1a666
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/brutespray/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, python3
+, fetchFromGitHub
+, makeWrapper
+, medusa
+}:
+
+stdenv.mkDerivation rec {
+  pname = "brutespray";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "x90skysn3k";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "sha256-O9HOsj0R6oHI7jjG4FBqbrSAQSVomgeD7tyPDNCNmIo=";
+  };
+
+  postPatch = ''
+    substituteInPlace brutespray.py \
+      --replace "/usr/share/brutespray" "$out/share/brutespray"
+  '';
+
+  dontBuild = true;
+  nativeBuildInputs = [ python3.pkgs.wrapPython makeWrapper ];
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    install -Dm0755 brutespray.py $out/bin/brutespray
+    patchShebangs $out/bin
+    patchPythonScript $out/bin/brutespray
+    wrapProgram $out/bin/brutespray \
+      --prefix PATH : ${lib.makeBinPath [ medusa ]}
+
+    mkdir -p $out/share/brutespray
+    cp -r wordlist/ $out/share/brutespray/wordlist
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/x90skysn3k/brutespray";
+    description = "Tool to do brute-forcing from Nmap output";
+    longDescription = ''
+      This tool automatically attempts default credentials on found services
+      directly from Nmap output.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile b/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile
new file mode 100644
index 000000000000..f9fb0e329bd4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'bundler-audit'
diff --git a/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile.lock b/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile.lock
new file mode 100644
index 000000000000..5d51735440d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile.lock
@@ -0,0 +1,16 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    bundler-audit (0.9.1)
+      bundler (>= 1.2.0, < 3)
+      thor (~> 1.0)
+    thor (1.2.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  bundler-audit
+
+BUNDLED WITH
+   2.3.9
diff --git a/nixpkgs/pkgs/tools/security/bundler-audit/default.nix b/nixpkgs/pkgs/tools/security/bundler-audit/default.nix
new file mode 100644
index 000000000000..c24831f26b06
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bundler-audit/default.nix
@@ -0,0 +1,29 @@
+{ bundlerEnv, ruby, lib, bundlerUpdateScript }:
+
+bundlerEnv rec {
+  name = "${pname}-${version}";
+  pname = "bundler-audit";
+  version = (import ./gemset.nix).bundler-audit.version;
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "bundler-audit";
+
+  meta = with lib; {
+    description = "Patch-level verification for Bundler";
+    longDescription = ''
+      Features:
+      - Checks for vulnerable versions of gems in Gemfile.lock.
+      - Checks for insecure gem sources (http://).
+      - Allows ignoring certain advisories that have been manually worked around.
+      - Prints advisory information.
+      - Does not require a network connection.
+    '';
+    homepage    = "https://github.com/rubysec/bundler-audit";
+    changelog   = "https://github.com/rubysec/bundler-audit/blob/v${version}/ChangeLog.md";
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ primeos nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bundler-audit/gemset.nix b/nixpkgs/pkgs/tools/security/bundler-audit/gemset.nix
new file mode 100644
index 000000000000..bbe7a0e8274b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bundler-audit/gemset.nix
@@ -0,0 +1,23 @@
+{
+  bundler-audit = {
+    dependencies = ["thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gdx0019vj04n1512shhdx7hwphzqmdpw4vva2k551nd47y1dixx";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/buttercup-desktop/default.nix b/nixpkgs/pkgs/tools/security/buttercup-desktop/default.nix
new file mode 100644
index 000000000000..a3eb00d3fe45
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/buttercup-desktop/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "buttercup-desktop";
+  version = "2.24.4";
+  src = fetchurl {
+    url = "https://github.com/buttercup/buttercup-desktop/releases/download/v${version}/Buttercup-linux-x86_64.AppImage";
+    sha256 = "sha256-c5MLj/1OSjGsySCENeJqEhubxl2y7uDhnOBAtLGy92I=";
+  };
+  appimageContents = appimageTools.extractType2 { inherit pname src version; };
+
+in appimageTools.wrapType2 {
+  inherit pname src version;
+
+  extraPkgs = pkgs: (appimageTools.defaultFhsEnvArgs.multiPkgs pkgs) ++ [ pkgs.libsecret ];
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/buttercup.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/buttercup.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "Cross-Platform Passwords & Secrets Vault";
+    homepage = "https://buttercup.pw";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bws/default.nix b/nixpkgs/pkgs/tools/security/bws/default.nix
new file mode 100644
index 000000000000..5c3987319109
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bws/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, oniguruma
+, openssl
+, stdenv
+, darwin
+, python3
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bws";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "bitwarden";
+    repo = "sdk";
+    rev = "bws-v${version}";
+    hash = "sha256-o+tmO9E881futhA/fN6+EX2yEBKnKUmKk/KilIt5vYY=";
+  };
+
+  cargoHash = "sha256-nmsAfXNn1nqmqHzGD7jl2JNrif/nJycCJZWZYjv7G4c=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs =
+    [
+      oniguruma
+      openssl
+    ]
+    ++ lib.optionals stdenv.isDarwin [
+      darwin.apple_sdk.frameworks.Security
+    ];
+
+  env = {
+    PYO3_PYTHON = "${python3}/bin/python3";
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
+
+  buildAndTestSubdir = "crates/bws";
+
+  meta = {
+    changelog = "https://github.com/bitwarden/sdk/blob/${src.rev}/CHANGELOG.md";
+    description = "Bitwarden Secrets Manager CLI";
+    homepage = "https://github.com/bitwarden/sdk";
+    license = lib.licenses.unfree; # BITWARDEN SOFTWARE DEVELOPMENT KIT LICENSE AGREEMENT
+    mainProgram = "bws";
+    maintainers = with lib.maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cameradar/default.nix b/nixpkgs/pkgs/tools/security/cameradar/default.nix
new file mode 100644
index 000000000000..2182fe3b0b7b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cameradar/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildGoModule
+, curl
+, fetchFromGitHub
+, pkg-config
+}:
+
+buildGoModule rec {
+  pname = "cameradar";
+  version = "5.0.2";
+
+  src = fetchFromGitHub {
+    owner = "Ullaakut";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-GOqmz/aiOLGMfs9rQBIEQSgBycPzhu8BohcAc2U+gBw=";
+  };
+
+  vendorHash = "sha256-AIi57DWMvAKl0PhuwHO/0cHoDKk5e0bJsqHYBka4NiU=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+  ];
+
+  subPackages = [
+    "cmd/cameradar"
+  ];
+  # At least one test is outdated
+  #doCheck = false;
+
+  meta = with lib; {
+    description = "RTSP stream access tool";
+    homepage = "https://github.com/Ullaakut/cameradar";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    # Upstream issue, doesn't build with latest curl, see
+    # https://github.com/Ullaakut/cameradar/issues/320
+    # https://github.com/andelf/go-curl/issues/84
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cariddi/default.nix b/nixpkgs/pkgs/tools/security/cariddi/default.nix
new file mode 100644
index 000000000000..6a41ce214d1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cariddi/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "cariddi";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "edoardottt";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-oM4A4chSBTiCMr3bW0AvjAFlyuqvKKKY2Ji4PYRsUqA=";
+  };
+
+  vendorHash = "sha256-EeoJssX/OkIJKltANfvMirvDVmVVIe9hDj+rThKpd10=";
+
+  meta = with lib; {
+    description = "Crawler for URLs and endpoints";
+    homepage = "https://github.com/edoardottt/cariddi";
+    changelog = "https://github.com/edoardottt/cariddi/releases/tag/v${version}";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ccid/default.nix b/nixpkgs/pkgs/tools/security/ccid/default.nix
new file mode 100644
index 000000000000..12f65546e92e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ccid/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchurl
+, flex
+, pcsclite
+, pkg-config
+, libusb1
+, perl
+, zlib
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ccid";
+  version = "1.5.5";
+
+  src = fetchurl {
+    url = "https://ccid.apdu.fr/files/${pname}-${version}.tar.bz2";
+    hash = "sha256-GUcI91/jadRd18Feiz6Kfbi0nPxVV1dMoqLnbvEsoMo=";
+  };
+
+  postPatch = ''
+    patchShebangs .
+    substituteInPlace src/Makefile.in --replace /bin/echo echo
+  '';
+
+  configureFlags = [
+    "--enable-twinserial"
+    "--enable-serialconfdir=${placeholder "out"}/etc/reader.conf.d"
+    "--enable-ccidtwindir=${placeholder "out"}/pcsc/drivers/serial"
+    "--enable-usbdropdir=${placeholder "out"}/pcsc/drivers"
+  ];
+
+  # error: call to undeclared function 'InterruptRead';
+  # ISO C99 and later do not support implicit function declarations
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_CFLAGS_COMPILE = "-Wno-error=implicit-function-declaration";
+  };
+
+  nativeBuildInputs = [
+    flex
+    pkg-config
+    perl
+  ];
+
+  buildInputs = [
+    pcsclite
+    libusb1
+    zlib
+  ];
+
+  postInstall = ''
+    install -Dm 0444 -t $out/lib/udev/rules.d src/92_pcscd_ccid.rules
+    substituteInPlace $out/lib/udev/rules.d/92_pcscd_ccid.rules \
+      --replace "/usr/sbin/pcscd" "${pcsclite}/bin/pcscd"
+  '';
+
+  # The resulting shared object ends up outside of the default paths which are
+  # usually getting stripped.
+  stripDebugList = ["pcsc"];
+
+  passthru.updateScript = gitUpdater {
+    url = "https://salsa.debian.org/rousseau/CCID.git";
+  };
+
+  meta = with lib; {
+    description = "PC/SC driver for USB CCID smart card readers";
+    homepage = "https://ccid.apdu.fr/";
+    license = licenses.lgpl21Plus;
+    maintainers = [ maintainers.anthonyroussel ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ccrypt/default.nix b/nixpkgs/pkgs/tools/security/ccrypt/default.nix
new file mode 100644
index 000000000000..9da5a6d42c55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ccrypt/default.nix
@@ -0,0 +1,23 @@
+{lib, stdenv, fetchurl, perl}:
+
+stdenv.mkDerivation rec {
+  pname = "ccrypt";
+  version = "1.11";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ccrypt/ccrypt-${version}.tar.gz";
+    sha256 = "0kx4a5mhmp73ljknl2lcccmw9z3f5y8lqw0ghaymzvln1984g75i";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = "https://ccrypt.sourceforge.net/";
+    description = "Utility for encrypting and decrypting files and streams with AES-256";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cdk-go/default.nix b/nixpkgs/pkgs/tools/security/cdk-go/default.nix
new file mode 100644
index 000000000000..79040fb2749d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cdk-go/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "cdk-go";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    owner = "cdk-team";
+    repo = "CDK";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-jgGOSlhlLO1MU1mHWZgw+ov4IrZwMo2GdG6L25ah9Z8=";
+  };
+
+  vendorHash = "sha256-aJN/d/BxmleRXKw6++k6e0Vb0Gs5zg1QfakviABYTog=";
+
+  # At least one test is outdated
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Container penetration toolkit";
+    homepage = "https://github.com/cdk-team/CDK";
+    changelog = "https://github.com/cdk-team/CDK/releases/tag/v${version}";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "cdk";
+    broken = stdenv.isDarwin; # needs to update gopsutil to at least v3.21.3 to include https://github.com/shirou/gopsutil/pull/1042
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cdxgen/default.nix b/nixpkgs/pkgs/tools/security/cdxgen/default.nix
new file mode 100644
index 000000000000..3b437a70633c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cdxgen/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, fetchFromGitHub
+, buildNpmPackage
+}:
+
+buildNpmPackage rec {
+  pname = "cdxgen";
+  version = "10.0.5";
+
+  src = fetchFromGitHub {
+    owner = "AppThreat";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-0cRJdhP0OtzaV2NqRfoYz+Gkl+N3/REbPiOh0jQySK8=";
+  };
+
+  npmDepsHash = "sha256-AlO3AC03JVTbgqdFSJb2L/QYuMQxjqzGGZYapte0uxc=";
+
+  dontNpmBuild = true;
+
+  meta = with lib; {
+    description = "Creates CycloneDX Software Bill-of-Materials (SBOM) for your projects from source and container images";
+    homepage = "https://github.com/AppThreat/cdxgen";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/certdump/default.nix b/nixpkgs/pkgs/tools/security/certdump/default.nix
new file mode 100644
index 000000000000..7b5b6744b345
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/certdump/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildDotnetModule
+, fetchFromGitHub
+, dotnetCorePackages
+, callPackage
+}:
+
+buildDotnetModule rec {
+  pname = "certdump";
+  version = "unstable-2023-07-12";
+
+  src = fetchFromGitHub {
+    owner = "secana";
+    repo = "CertDump";
+    rev = "1300005115786b3c214d73fa506de2de06a62cbb";
+    sha256 = "sha256-VqKOoW4fAXr0MtY5rgWvRqay1dazF+ZpzJUHkDeXpPs=";
+  };
+
+  projectFile = [ "CertDump.sln" ];
+  nugetDeps = ./deps.nix;
+
+  selfContainedBuild = true;
+  executables = [ "CertDump" ];
+  xBuildFiles = [ "CertDump/CertDump.csproj" ];
+
+  dotnet-runtime = dotnetCorePackages.aspnetcore_7_0;
+  dotnet-sdk = dotnetCorePackages.sdk_7_0;
+
+  dotnetFlags = [
+    "-property:ImportByWildcardBeforeSolution=false"
+    "-property:GenerateAssemblyInfo=false"
+  ];
+
+  meta = with lib; {
+    description = "Dump certificates from PE files in different formats";
+    homepage = "https://github.com/secana/CertDump";
+    longDescription = ''
+      Cross-Platform tool to dump the signing certificate from a Portable Executable (PE) file.
+    '';
+    license = licenses.asl20;
+    maintainers = [ maintainers.baloo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/certdump/deps.nix b/nixpkgs/pkgs/tools/security/certdump/deps.nix
new file mode 100644
index 000000000000..cd7641823629
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/certdump/deps.nix
@@ -0,0 +1,28 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "CommandLineParser"; version = "2.9.1"; sha256 = "1sldkj8lakggn4hnyabjj1fppqh50fkdrr1k99d4gswpbk5kv582"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Ref"; version = "5.0.0"; sha256 = "0d7sjr89zwq0wxirf8la05hfalv9nhvlczg1c7a508k8aw79jvfg"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-arm64"; version = "5.0.17"; sha256 = "183xgqzlwd5lhacxdwcjl8vcq7r7xypv0hddps9k32mmmwf83d8h"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; version = "5.0.17"; sha256 = "066fwdlssbv556zd9w1x87x1j8j4kafj9rxyy0692bssdb4gcyc8"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-x64"; version = "5.0.17"; sha256 = "1qvvqf8mmzzc7a7fhx324dprnbxhknr3qxspb2xhsn3yyg44xn2d"; })
+  (fetchNuGet { pname = "Microsoft.DotNet.ILCompiler"; version = "7.0.9"; sha256 = "06hg5q1nbbqcz2s2pl8g941jmjzfl3x06hcpi8km4ikzvp25l5bd"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-arm64"; version = "5.0.17"; sha256 = "07v7vyqm556xr1ypkazfp6gh6drgf20zkwbhkpja8bwdcr6lphbb"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-x64"; version = "5.0.17"; sha256 = "1lc2jhr4ikffi5ylyf8f6ya6k0hdj0wp1l0017grrwd4m5ajj4vv"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-x64"; version = "5.0.17"; sha256 = "02g5w41ivrw3n6cy3l3ixhcl8bw1fsv4bzs2m34k9h5fqmliaf3c"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Ref"; version = "5.0.0"; sha256 = "1p62khf9zk23lh91lvz7plv3g1nzmm3b5szqrcm6mb8w3sjk03wi"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-arm64"; version = "5.0.17"; sha256 = "16whaq82pj6fqa0vam3a0va9ly843aa1z12hza040vn6252kk9fq"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; version = "5.0.17"; sha256 = "0jgcfs3jc98jfyaaamssznckbpnaygplk8pjsp6dswpansz5bnnq"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-x64"; version = "5.0.17"; sha256 = "1ph5kx18syinp8bpzw80bgq3njl65gwzws727xcmxnysgm7snmjp"; })
+  (fetchNuGet { pname = "PeNet"; version = "3.0.0"; sha256 = "1qbb970b4f6ymic1l7cy3kdkgy0605wpm0nyqa50mkzdq03c192j"; })
+  (fetchNuGet { pname = "PeNet.Asn1"; version = "2.0.1"; sha256 = "14nzz1w69bcxnc2yhfca4g5ahl53czfpbmbv32w0cf2mpssjk4na"; })
+  (fetchNuGet { pname = "runtime.linux-arm64.Microsoft.DotNet.ILCompiler"; version = "7.0.9"; sha256 = "0hpbb13459izw1c5qw7lh1sy5fbnmg7n8977jci5far584zbf3im"; })
+  (fetchNuGet { pname = "runtime.linux-x64.Microsoft.DotNet.ILCompiler"; version = "7.0.9"; sha256 = "0crf80nb3pw4wr83bvsx7f48i63f2l1b2zc18sny4xhqlvbcfick"; })
+  (fetchNuGet { pname = "runtime.osx-x64.Microsoft.DotNet.ILCompiler"; version = "7.0.9"; sha256 = "1370mahfnshdy63vlxbyqpbhmv5rby5azfbnyc72xb7zglf9aqcb"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Formats.Asn1"; version = "7.0.0"; sha256 = "1a14kgpqz4k7jhi7bs2gpgf67ym5wpj99203zxgwjypj7x47xhbq"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "5.0.0"; sha256 = "06hkx2za8jifpslkh491dfwzm5dxrsyxzj5lsc0achb6yzg4zqlw"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "7.0.0"; sha256 = "0834gh4k84xbv73mk6s9djkksq3bd6m2k1ixincjnaawv0pyz7fw"; })
+]
diff --git a/nixpkgs/pkgs/tools/security/certgraph/default.nix b/nixpkgs/pkgs/tools/security/certgraph/default.nix
new file mode 100644
index 000000000000..da8f8358d799
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/certgraph/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "certgraph";
+  version = "20220513";
+
+  src = fetchFromGitHub {
+    owner = "lanrat";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-7tvPiJHZE9X7I79DFNF1ZAQiaAkrtrXiD2fY7AkbWMk=";
+  };
+
+  vendorHash = "sha256-ErTn7pUCtz6ip2kL8FCe+3Rhs876xtqto+z5nZqQ6cI=";
+
+  meta = with lib; {
+    description = "Intelligence tool to crawl the graph of certificate alternate names";
+    homepage = "https://github.com/lanrat/certgraph";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/certinfo/default.nix b/nixpkgs/pkgs/tools/security/certinfo/default.nix
new file mode 100644
index 000000000000..e0d2a3998a25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/certinfo/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub, libX11, darwin }:
+
+buildGoModule rec {
+  pname = "certinfo";
+  version = "1.0.21";
+
+  src = fetchFromGitHub {
+    owner = "pete911";
+    repo = "certinfo";
+    rev = "v${version}";
+    sha256 = "acAjX4M/egAhGVOeEKw5r2wteA/UsWf9fGR/HnhUr/w=";
+  };
+
+  # clipboard functionality not working on Darwin
+  doCheck = !(stdenv.isDarwin && stdenv.isAarch64);
+
+  buildInputs = [ ]
+    ++ lib.optionals stdenv.isLinux [ libX11 ]
+    ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Cocoa ];
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Print x509 certificate info";
+    homepage = "https://github.com/pete911/certinfo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jakuzure ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/certstrap/default.nix b/nixpkgs/pkgs/tools/security/certstrap/default.nix
new file mode 100644
index 000000000000..8808b98985f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/certstrap/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "certstrap";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "square";
+    repo = "certstrap";
+    rev = "v${version}";
+    sha256 = "sha256-mbZtomR8nnawXr3nGVSEuVObe79M1CqTlYN/aEpKmcU=";
+  };
+
+  vendorHash = "sha256-r7iYhTmFKTjfv11fEerC72M7JBp64rWfbkoTKzObNqM=";
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-X main.release=${version}" ];
+
+  meta = with lib; {
+    description = "Tools to bootstrap CAs, certificate requests, and signed certificates";
+    longDescription = ''
+      A simple certificate manager written in Go, to bootstrap your own
+      certificate authority and public key infrastructure. Adapted from etcd-ca.
+    '';
+    homepage = "https://github.com/square/certstrap";
+    changelog = "https://github.com/square/certstrap/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/certsync/default.nix b/nixpkgs/pkgs/tools/security/certsync/default.nix
new file mode 100644
index 000000000000..15878c7826fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/certsync/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "certsync";
+  version = "unstable-2023-04-14";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "zblurx";
+    repo = "certsync";
+    rev = "f3c8b61f0967a6403d4c592dcbfa8921682452a6";
+    hash = "sha256-7Pzss83jf3zKmgQZki18R47OWn5VniZZ/d4N8JgZs+0=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    certipy-ad
+    tqdm
+  ];
+
+  pythonImportsCheck = [
+    "certsync"
+  ];
+
+  meta = with lib; {
+    description = "Dump NTDS with golden certificates and UnPAC the hash";
+    homepage = "https://github.com/zblurx/certsync";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cewl/Gemfile b/nixpkgs/pkgs/tools/security/cewl/Gemfile
new file mode 100644
index 000000000000..97d9ae757acc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cewl/Gemfile
@@ -0,0 +1,8 @@
+source 'https://rubygems.org'
+gem 'mime'
+gem 'mime-types', ">=3.3.1"
+gem 'mini_exiftool'
+gem 'nokogiri'
+gem 'rexml'
+gem 'rubyzip'
+gem 'spider'
diff --git a/nixpkgs/pkgs/tools/security/cewl/Gemfile.lock b/nixpkgs/pkgs/tools/security/cewl/Gemfile.lock
new file mode 100644
index 000000000000..85bb2eb4b822
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cewl/Gemfile.lock
@@ -0,0 +1,31 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    mime (0.4.4)
+    mime-types (3.3.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2021.0704)
+    mini_exiftool (2.10.2)
+    mini_portile2 (2.5.3)
+    nokogiri (1.11.7)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    racc (1.5.2)
+    rexml (3.2.5)
+    rubyzip (2.3.2)
+    spider (0.5.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  mime
+  mime-types (>= 3.3.1)
+  mini_exiftool
+  nokogiri
+  rexml
+  rubyzip
+  spider
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/security/cewl/default.nix b/nixpkgs/pkgs/tools/security/cewl/default.nix
new file mode 100644
index 000000000000..06d983c14e36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cewl/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchFromGitHub, bundlerEnv }:
+
+let
+  rubyEnv = bundlerEnv {
+    name = "cewl-ruby-env";
+    gemdir = ./.;
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "cewl";
+  version = "5.5.2";
+  src = fetchFromGitHub {
+    owner = "digininja";
+    repo = "CeWL";
+    rev = version;
+    sha256 = "sha256-5LTZUr3OMeu1NODhIgBiVqtQnUWYfZTm73q61vT3rXc=";
+  };
+
+  buildInputs = [ rubyEnv.wrappedRuby ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp *.rb $out/bin/
+    mv $out/bin/cewl.rb $out/bin/cewl
+  '';
+
+  meta = with lib; {
+    description = "Custom wordlist generator";
+    homepage = "https://digi.ninja/projects/cewl.php/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ elohmeier ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cewl/gemset.nix b/nixpkgs/pkgs/tools/security/cewl/gemset.nix
new file mode 100644
index 000000000000..851a6d2442d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cewl/gemset.nix
@@ -0,0 +1,104 @@
+{
+  mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nskys7brz2bylhxiknl0z9i19w3wb1knf0h93in6mjq70jdw5cr";
+      type = "gem";
+    };
+    version = "0.4.4";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh";
+      type = "gem";
+    };
+    version = "3.3.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dlxwc75iy0dj23x824cxpvpa7c8aqcpskksrmb32j6m66h5mkcy";
+      type = "gem";
+    };
+    version = "3.2021.0704";
+  };
+  mini_exiftool = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ir4wigpm6nkd3f40wcjdqrhjx3l60w1hwcg143is1a95ypnvqhr";
+      type = "gem";
+    };
+    version = "2.10.2";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ad0mli9rc0f17zw4ibp24dbj1y39zkykijsjmnzl4gwpg5s0j6k";
+      type = "gem";
+    };
+    version = "2.5.3";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrn31385ix5k9b0yalnlzv360isv6dincbcvi8psllnwz4sjxj9";
+      type = "gem";
+    };
+    version = "1.11.7";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  spider = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fix7zhnvlfqg66bxwdpbsffbynzdnaifnxpakn07bjh3rdj75cx";
+      type = "gem";
+    };
+    version = "0.5.4";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cfripper/default.nix b/nixpkgs/pkgs/tools/security/cfripper/default.nix
new file mode 100644
index 000000000000..aac55cf46b74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cfripper/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      pydantic = self.pydantic_1;
+    };
+  };
+in python.pkgs.buildPythonApplication rec {
+  pname = "cfripper";
+  version = "1.15.4";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "Skyscanner";
+    repo = "cfripper";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-heVFum+Eaofd9L0dNHqD9GgHP+ckGwJi+NfeFci+ESc=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "pluggy~=0.13.1" "pluggy" \
+  '';
+
+  nativeBuildInputs = with python.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    boto3
+    cfn-flip
+    click
+    pluggy
+    pycfmodel
+    pydash
+    pyyaml
+    setuptools
+  ];
+
+  nativeCheckInputs = with python.pkgs; [
+    moto
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # Tests are failing
+    "tests/test_boto3_client.py"
+    "tests/config/test_pluggy.py"
+  ];
+
+  disabledTests = [
+    # Assertion fails
+    "test_multiple_resources_with_wildcard_resources_are_detected"
+  ];
+
+  pythonImportsCheck = [
+    "cfripper"
+  ];
+
+  meta = with lib; {
+    description = "Tool for analysing CloudFormation templates";
+    homepage = "https://github.com/Skyscanner/cfripper";
+    changelog = "https://github.com/Skyscanner/cfripper/releases/tag/v${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cfssl/default.nix b/nixpkgs/pkgs/tools/security/cfssl/default.nix
new file mode 100644
index 000000000000..903b52f8bd0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cfssl/default.nix
@@ -0,0 +1,42 @@
+{ lib, buildGoModule, fetchFromGitHub, nixosTests }:
+
+buildGoModule rec {
+  pname = "cfssl";
+  version = "1.6.4";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = "cfssl";
+    rev = "v${version}";
+    sha256 = "sha256-QVKgfwyHzN6n8CnvGT9gg2ncfaDo+Pe4IAQhm4gNiz4=";
+  };
+
+  subPackages = [
+    "cmd/cfssl"
+    "cmd/cfssljson"
+    "cmd/cfssl-bundle"
+    "cmd/cfssl-certinfo"
+    "cmd/cfssl-newkey"
+    "cmd/cfssl-scan"
+    "cmd/multirootca"
+    "cmd/mkbundle"
+  ];
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/cloudflare/cfssl/cli/version.version=v${version}"
+  ];
+
+  passthru.tests = { inherit (nixosTests) cfssl; };
+
+  meta = with lib; {
+    homepage = "https://cfssl.org/";
+    description = "Cloudflare's PKI and TLS toolkit";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ mbrgm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chain-bench/default.nix b/nixpkgs/pkgs/tools/security/chain-bench/default.nix
new file mode 100644
index 000000000000..9705440dfdf8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chain-bench/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "chain-bench";
+  version = "0.1.10";
+
+  src = fetchFromGitHub {
+    owner = "aquasecurity";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-5+jSbXbT1UwHMVeZ07qcY8Is88ddHdr7QlgcbQK+8FA=";
+  };
+  vendorHash = "sha256-uN4TSAxb229NhcWmiQmWBajla9XKnpiZrXOWJxt/mic=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=v${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd chain-bench \
+      --bash <($out/bin/chain-bench completion bash) \
+      --fish <($out/bin/chain-bench completion fish) \
+      --zsh <($out/bin/chain-bench completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/chain-bench --help
+    $out/bin/chain-bench --version | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/aquasecurity/chain-bench";
+    changelog = "https://github.com/aquasecurity/chain-bench/releases/tag/v${version}";
+    description = "An open-source tool for auditing your software supply chain stack for security compliance based on a new CIS Software Supply Chain benchmark";
+    longDescription = ''
+      Chain-bench is an open-source tool for auditing your software supply chain
+      stack for security compliance based on a new CIS Software Supply Chain
+      benchmark. The auditing focuses on the entire SDLC process, where it can
+      reveal risks from code time into deploy time. To win the race against
+      hackers and protect your sensitive data and customer trust, you need to
+      ensure your code is compliant with your organization's policies.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chainsaw/default.nix b/nixpkgs/pkgs/tools/security/chainsaw/default.nix
new file mode 100644
index 000000000000..b939e15263da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chainsaw/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "chainsaw";
+  version = "2.8.1";
+
+  src = fetchFromGitHub {
+    owner = "WithSecureLabs";
+    repo = "chainsaw";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-YEw/rN7X+npc9M8XdPGAZyYXSQOGiR0w9Wb3W63g8VU=";
+  };
+
+  cargoHash = "sha256-cXvXvSipZFfanmn9QFtYZYEudZ6lyvsu2EMGD0lZEtw=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+  ];
+
+  meta = with lib; {
+    description = "Rapidly Search and Hunt through Windows Forensic Artefacts";
+    homepage = "https://github.com/WithSecureLabs/chainsaw";
+    changelog = "https://github.com/WithSecureLabs/chainsaw/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cherrybomb/default.nix b/nixpkgs/pkgs/tools/security/cherrybomb/default.nix
new file mode 100644
index 000000000000..4bb975d3394c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cherrybomb/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cherrybomb";
+  version = "1.0.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-MHKBP102U1Ug9wZm9x4+opZgG8f6Hx03FvoLV4qaDgY=";
+  };
+
+  cargoHash = "sha256-pj4+rG8XbrxVuNgnTVUTPmgrPBRSnoBnqFhOO/JGGWI=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "A CLI tool that helps you avoid undefined user behavior by validating your API specifications";
+    homepage = "https://github.com/blst-security/cherrybomb";
+    changelog = "https://github.com/blst-security/cherrybomb/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chipsec/compile-ko.diff b/nixpkgs/pkgs/tools/security/chipsec/compile-ko.diff
new file mode 100644
index 000000000000..2ac6f69b4f64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chipsec/compile-ko.diff
@@ -0,0 +1,13 @@
+diff --git a/setup.py b/setup.py
+index 3465765c..ae128922 100755
+--- a/setup.py
++++ b/setup.py
+@@ -137,7 +137,7 @@ class build_ext(_build_ext):
+         elif platform.system().lower() == "windows":
+             driver_build_function = self._build_win_driver
+ 
+-        if not self.skip_driver:
++        if True:
+             driver_build_function()
+ 
+     def get_source_files(self):
diff --git a/nixpkgs/pkgs/tools/security/chipsec/default.nix b/nixpkgs/pkgs/tools/security/chipsec/default.nix
new file mode 100644
index 000000000000..8842cbab248c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chipsec/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, kernel ? null
+, libelf
+, nasm
+, python3
+, withDriver ? false
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "chipsec";
+  version = "1.10.6";
+
+  disabled = !stdenv.isLinux;
+
+  src = fetchFromGitHub {
+    owner = "chipsec";
+    repo = "chipsec";
+    rev = version;
+    hash = "sha256-+pbFG1SmSO/cnt1e+kel7ereC0I1OCJKKsS0KaJDWdc=";
+  };
+
+  patches = lib.optionals withDriver [ ./ko-path.diff ./compile-ko.diff ];
+
+  KSRC = lib.optionalString withDriver "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build";
+
+  nativeBuildInputs = [
+    libelf
+    nasm
+  ] ++ lib.optionals withDriver kernel.moduleBuildDependencies;
+
+  nativeCheckInputs = with python3.pkgs; [
+    distro
+    pytestCheckHook
+  ];
+
+  preBuild = lib.optionalString withDriver ''
+    export CHIPSEC_BUILD_LIB=$(mktemp -d)
+    mkdir -p $CHIPSEC_BUILD_LIB/chipsec/helper/linux
+  '';
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # Needed with GCC 12
+    "-Wno-error=dangling-pointer"
+  ];
+
+  preInstall = lib.optionalString withDriver ''
+    mkdir -p $out/${python3.pkgs.python.sitePackages}/drivers/linux
+    mv $CHIPSEC_BUILD_LIB/chipsec/helper/linux/chipsec.ko \
+      $out/${python3.pkgs.python.sitePackages}/drivers/linux/chipsec.ko
+  '';
+
+  setupPyBuildFlags = [
+    "--build-lib=$CHIPSEC_BUILD_LIB"
+  ] ++ lib.optionals (!withDriver) [
+    "--skip-driver"
+  ];
+
+  pythonImportsCheck = [
+    "chipsec"
+  ];
+
+  meta = with lib; {
+    description = "Platform Security Assessment Framework";
+    longDescription = ''
+      CHIPSEC is a framework for analyzing the security of PC platforms
+      including hardware, system firmware (BIOS/UEFI), and platform components.
+      It includes a security test suite, tools for accessing various low level
+      interfaces, and forensic capabilities. It can be run on Windows, Linux,
+      Mac OS X and UEFI shell.
+    '';
+    license = licenses.gpl2Only;
+    homepage = "https://github.com/chipsec/chipsec";
+    maintainers = with maintainers; [ johnazoidberg erdnaxe ];
+    platforms = [ "x86_64-linux" ] ++ lib.optional (!withDriver) "x86_64-darwin";
+    # https://github.com/chipsec/chipsec/issues/1793
+    broken = withDriver && kernel.kernelOlder "5.4" && kernel.isHardened;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chipsec/ko-path.diff b/nixpkgs/pkgs/tools/security/chipsec/ko-path.diff
new file mode 100644
index 000000000000..f7359600a8e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chipsec/ko-path.diff
@@ -0,0 +1,13 @@
+diff --git a/chipsec/helper/linux/linuxhelper.py b/chipsec/helper/linux/linuxhelper.py
+index 2fd65140..f3f26bcb 100644
+--- a/chipsec/helper/linux/linuxhelper.py
++++ b/chipsec/helper/linux/linuxhelper.py
+@@ -153,7 +153,7 @@ class LinuxHelper(Helper):
+             else:
+                 a2 = f'a2=0x{phys_mem_access_prot}'
+ 
+-        driver_path = os.path.join(chipsec.file.get_main_dir(), "chipsec", "helper", "linux", "chipsec.ko")
++        driver_path = os.path.join(chipsec.file.get_main_dir(), "drivers", "linux", "chipsec.ko")
+         if not os.path.exists(driver_path):
+             driver_path += ".xz"
+             if not os.path.exists(driver_path):
diff --git a/nixpkgs/pkgs/tools/security/chkrootkit/default.nix b/nixpkgs/pkgs/tools/security/chkrootkit/default.nix
new file mode 100644
index 000000000000..ad14c1cd3997
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chkrootkit/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, makeWrapper, binutils-unwrapped }:
+
+stdenv.mkDerivation rec {
+  pname = "chkrootkit";
+  version = "0.58b";
+
+  src = fetchurl {
+    url = "ftp://ftp.chkrootkit.org/pub/seg/pac/${pname}-${version}.tar.gz";
+    sha256 = "sha256-de0qzoHw+j6cP7ZNqw6IV+1ZJH6nVfWJhBb+ssZoB7k=";
+  };
+
+  # TODO: a lazy work-around for linux build failure ...
+  makeFlags = [ "STATIC=" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postPatch = ''
+    substituteInPlace chkrootkit \
+      --replace " ./" " $out/bin/"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/sbin
+    cp check_wtmpx chkdirs chklastlog chkproc chkrootkit chkutmp chkwtmp ifpromisc strings-static $out/sbin
+
+    wrapProgram $out/sbin/chkrootkit \
+      --prefix PATH : "${lib.makeBinPath [ binutils-unwrapped ]}"
+  '';
+
+  meta = with lib; {
+    description = "Locally checks for signs of a rootkit";
+    homepage = "https://www.chkrootkit.org/";
+    license = licenses.bsd2;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chntpw/00-chntpw-build-arch-autodetect.patch b/nixpkgs/pkgs/tools/security/chntpw/00-chntpw-build-arch-autodetect.patch
new file mode 100644
index 000000000000..cd130affa6c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chntpw/00-chntpw-build-arch-autodetect.patch
@@ -0,0 +1,28 @@
+--- chntpw-140201.orig/Makefile	2014-02-01 17:54:37.000000000 +0100
++++ chntpw-140201/Makefile	2022-04-21 00:14:45.000000000 +0200
+@@ -6,24 +6,7 @@
+ # See INSTALL for more info.
+ #
+ 
+-#SSLPATH=/usr/local/ssl
+-OSSLPATH=/usr
+-OSSLINC=$(OSSLPATH)/include
+-
+-CC=gcc
+-
+-# Force 32 bit
+-CFLAGS= -DUSEOPENSSL -g -I. -I$(OSSLINC) -Wall -m32 
+-OSSLLIB=$(OSSLPATH)/lib
+-
+-# 64 bit if default for compiler setup
+-#CFLAGS= -DUSEOPENSSL -g -I. -I$(OSSLINC) -Wall
+-#OSSLLIB=$(OSSLPATH)/lib64
+-
+-
+-# This is to link with whatever we have, SSL crypto lib we put in static
+-#LIBS=-L$(OSSLLIB) $(OSSLLIB)/libcrypto.a
+-LIBS=-L$(OSSLLIB)
++CFLAGS= -DUSEOPENSSL -g -I. -Wall
+ 
+ 
+ all: chntpw chntpw.static cpnt reged reged.static samusrgrp samusrgrp.static sampasswd sampasswd.static
diff --git a/nixpkgs/pkgs/tools/security/chntpw/01-chntpw-install-target.patch b/nixpkgs/pkgs/tools/security/chntpw/01-chntpw-install-target.patch
new file mode 100644
index 000000000000..67c62273aeb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chntpw/01-chntpw-install-target.patch
@@ -0,0 +1,20 @@
+--- chntpw-140201/Makefile	2022-04-21 00:14:45.000000000 +0200
++++ chntpw-140201.new/Makefile	2022-04-21 09:15:42.000000000 +0200
+@@ -6,10 +6,16 @@
+ # See INSTALL for more info.
+ #
+ 
++PREFIX ?= /usr
++
+ CFLAGS= -DUSEOPENSSL -g -I. -Wall
+ 
++BINARIES := chntpw cpnt reged samusrgrp sampasswd
+ 
+-all: chntpw chntpw.static cpnt reged reged.static samusrgrp samusrgrp.static sampasswd sampasswd.static
++all: $(BINARIES)
++install: $(BINARIES)
++	mkdir -p $(PREFIX)/bin
++	cp $^ $(PREFIX)/bin
+ 
+ chntpw: chntpw.o ntreg.o edlib.o libsam.o
+ 	$(CC) $(CFLAGS) -o chntpw chntpw.o ntreg.o edlib.o libsam.o $(LIBS)
diff --git a/nixpkgs/pkgs/tools/security/chntpw/default.nix b/nixpkgs/pkgs/tools/security/chntpw/default.nix
new file mode 100644
index 000000000000..c4463d16d348
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chntpw/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchurl, unzip, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "chntpw";
+
+  version = "140201";
+
+  src = fetchurl {
+    url = "http://pogostick.net/~pnh/ntpasswd/chntpw-source-${version}.zip";
+    sha256 = "1k1cxsj0221dpsqi5yibq2hr7n8xywnicl8yyaicn91y8h2hkqln";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  patches = [
+    ./00-chntpw-build-arch-autodetect.patch
+    ./01-chntpw-install-target.patch
+    # Import various bug fixes from debian
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/chntpw/140201-1/debian/patches/04_get_abs_path";
+      sha256 = "17h0gaczqd5b792481synr1ny72frwslb779lm417pyrz6kh9q8n";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/chntpw/140201-1/debian/patches/06_correct_test_open_syscall";
+      sha256 = "00lg83bimbki988n71w54mmhjp9529r0ngm40d7fdmnc2dlpj3hd";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/chntpw/140201-1/debian/patches/07_detect_failure_to_write_key";
+      sha256 = "0pk6xnprh2pqyx4n4lw3836z6fqsw3mclkzppl5rhjaahriwxw4l";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/chntpw/140201-1/debian/patches/08_no_deref_null";
+      sha256 = "1g7pfmjaj0c2sm64s3api2kglj7jbgddjjd3r4drw6phwdkah0zs";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/chntpw/140201-1/debian/patches/09_improve_robustness";
+      sha256 = "1nszkdy01ixnain7cwdmfbhjngphw1300ifagc1wgl9wvghzviaa";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/chntpw/140201-1/debian/patches/11_improve_documentation";
+      sha256 = "0yql6hj72q7cq69rrspsjkpiipdhcwb0b9w5j8nhq40cnx9mgqgg";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/chntpw/140201-1/debian/patches/12_readonly_filesystem";
+      sha256 = "1kxcy7f2pl6fqgmjg8bnl3pl5wgiw5xnbyx12arinmqkkggp4fa4";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/chntpw/140201-1/debian/patches/13_write_to_hive";
+      sha256 = "1638lcyxjkrkmbr3n28byixny0qrxvkciw1xd97x48mj6bnwqrkv";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/chntpw/140201-1/debian/patches/14_improve_description";
+      sha256 = "11y5kc4dh4zv24nkb0jw2zwlifx6nzsd4jbizn63l6dbpqgb25rs";
+    })
+  ];
+
+  installPhase = ''
+    make install PREFIX=$out
+  '';
+
+  meta = with lib; {
+    homepage = "http://pogostick.net/~pnh/ntpasswd/";
+    description = "An utility to reset the password of any user that has a valid local account on a Windows system";
+    maintainers = with lib.maintainers; [ deepfire ];
+    license = licenses.gpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chopchop/default.nix b/nixpkgs/pkgs/tools/security/chopchop/default.nix
new file mode 100644
index 000000000000..fc7bd0326fd4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chopchop/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "chopchop";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "michelin";
+    repo = "ChopChop";
+    rev = "v${version}";
+    hash = "sha256-qSBQdcS6d0tctSHRbkY4T7s6Zj7xI2abaPUvNKh1M2E=";
+  };
+
+  vendorHash = "sha256-UxWARWOFp8AYKEdiJwRZNwFrphgMTJSZjnvktTNOsgU=";
+
+  meta = with lib; {
+    description = "CLI to search for sensitive services/files/folders";
+    homepage = "https://github.com/michelin/ChopChop";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chrome-token-signing/default.nix b/nixpkgs/pkgs/tools/security/chrome-token-signing/default.nix
new file mode 100644
index 000000000000..8081c7ef6eb5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chrome-token-signing/default.nix
@@ -0,0 +1,39 @@
+{ lib, mkDerivation, fetchFromGitHub, qmake, pcsclite, pkg-config, opensc }:
+
+mkDerivation rec {
+  pname = "chrome-token-signing";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "open-eid";
+    repo = "chrome-token-signing";
+    rev = "v${version}";
+    sha256 = "sha256-wKy/RVR7jx5AkMJgHXsuV+jlzyfH5nDRggcIUgh2ML4=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ qmake pcsclite ];
+  dontUseQmakeConfigure = true;
+
+  patchPhase = ''
+    substituteInPlace host-linux/ee.ria.esteid.json --replace /usr $out
+    # TODO: macos
+    substituteInPlace host-shared/PKCS11Path.cpp \
+      --replace opensc-pkcs11.so ${opensc}/lib/pkcs11/opensc-pkcs11.so
+  '';
+
+  installPhase = ''
+    install -D -t $out/bin host-linux/chrome-token-signing
+    # TODO: wire these up
+    install -D -t $out/etc/chromium/native-messaging-hosts host-linux/ee.ria.esteid.json
+    install -D -t $out/lib/mozilla/native-messaging-hosts host-linux/ff/ee.ria.esteid.json
+  '';
+
+  meta = with lib; {
+    description = "Chrome and Firefox extension for signing with your eID on the web";
+    homepage = "https://github.com/open-eid/chrome-token-signing/wiki";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.mmahut ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cie-middleware-linux/default.nix b/nixpkgs/pkgs/tools/security/cie-middleware-linux/default.nix
new file mode 100644
index 000000000000..9982da5ae896
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cie-middleware-linux/default.nix
@@ -0,0 +1,189 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, makeWrapper
+, strip-nondeterminism
+, meson
+, ninja
+, pkg-config
+, gradle_7
+, curl
+, cryptopp
+, fontconfig
+, jre
+, libxml2
+, openssl
+, pcsclite
+, podofo
+, ghostscript
+}:
+
+let
+  pname = "cie-middleware-linux";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "M0rf30";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Z8K2Ibg5bBfSql5HEapKgdfiCf/EIKTTD15oVeysQGk=";
+  };
+
+  gradle = gradle_7;
+
+  # Shared libraries needed by the Java application
+  libraries = lib.makeLibraryPath [ ghostscript ];
+
+  # Fixed-output derivation that fetches the Java dependencies
+  javaDeps = stdenv.mkDerivation {
+    pname = "cie-java-deps";
+    inherit src version;
+
+    nativeBuildInputs = [ gradle ];
+
+    buildPhase = ''
+      # Run the fetchDeps task
+      export GRADLE_USER_HOME=$(mktemp -d)
+      ls -l
+      gradle --no-daemon -b cie-java/build.gradle fetchDeps
+    '';
+
+    installPhase = ''
+      # Build a tree compatible with the maven repository format
+      pushd "$GRADLE_USER_HOME/caches/modules-2/files-2.1"
+      find -type f | awk -F/ -v OFS=/ -v out="$out" '{
+        infile = $0
+        gsub(/\./, "/", $2)
+        system("install -m644 -D "infile" "out"/"$2"/"$3"/"$4"/"$6)
+      }'
+      popd
+    '';
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "sha256-jtaH8dBpnx8KMJe+jzJfkvcx1NO4nL5jsRO4+GI+d0c=";
+  };
+
+in
+
+stdenv.mkDerivation {
+  inherit pname src version;
+
+  hardeningDisable = [ "format" ];
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    meson
+    ninja
+    pkg-config
+    gradle
+    strip-nondeterminism
+  ];
+
+  buildInputs = [
+    cryptopp
+    fontconfig
+    podofo.dev
+    openssl
+    pcsclite
+    curl
+    libxml2
+  ];
+
+  patches = [
+    # Fix gcc-13 build by adding missing include.
+    (fetchpatch {
+      name = "gcc-13.patch";
+      url = "https://github.com/M0Rf30/cie-middleware-linux/commit/1da1196152f7a3bbe92ba3ce993ebb6785ff049e.patch";
+      hash = "sha256-aM23A1ZX8kebgX6RXVS78SEa+to93glUmIYO+lfUzfg=";
+    })
+  ];
+
+  postPatch = ''
+    # substitute the cieid command with this $out/bin/cieid
+    substituteInPlace libs/pkcs11/src/CSP/AbilitaCIE.cpp \
+      --replace 'file = "cieid"' 'file = "'$out'/bin/cieid"'
+
+    # revert https://github.com/M0Rf30/cie-middleware-linux/commit/1a389d8
+    sed -i libs/meson.build \
+        -e "s@podofo_dep = .\+@podofo_dep = dependency('libpodofo')@g"
+  '';
+
+  # Note: we use pushd/popd to juggle between the
+  # libraries and the Java application builds.
+  preConfigure = "pushd libs";
+
+  postBuild = ''
+    popd
+
+    # Use the packages in javaDeps for both plugins and dependencies
+    localRepo="maven { url uri('${javaDeps}') }"
+    sed -i cie-java/settings.gradle -e "1i \
+      pluginManagement { repositories { $localRepo } }"
+    substituteInPlace cie-java/build.gradle \
+      --replace 'mavenCentral()' "$localRepo"
+
+    # Build the Java application
+    export GRADLE_USER_HOME=$(mktemp -d)
+    gradle standalone \
+      --no-daemon \
+      --offline \
+      --parallel \
+      --info -Dorg.gradle.java.home=${jre} \
+      --build-file cie-java/build.gradle
+
+    pushd libs/build
+  '';
+
+  postInstall = ''
+    popd
+
+    # Install the Java application
+    install -Dm755 cie-java/build/libs/CIEID-standalone.jar \
+                   "$out/share/cieid/cieid.jar"
+
+    # Create a wrapper
+    mkdir -p "$out/bin"
+    makeWrapper "${jre}/bin/java" "$out/bin/cieid" \
+      --add-flags "-Djna.library.path='$out/lib:${libraries}'" \
+      --add-flags '-Dawt.useSystemAAFontSettings=on' \
+      --add-flags "-cp $out/share/cieid/cieid.jar" \
+      --add-flags "it.ipzs.cieid.MainApplication"
+
+    # Install other files
+    install -Dm644 data/cieid.desktop "$out/share/applications/cieid.desktop"
+    install -Dm755 data/logo.png "$out/share/pixmaps/cieid.png"
+    install -Dm644 LICENSE "$out/share/licenses/cieid/LICENSE"
+  '';
+
+  postFixup = ''
+    # Move static libraries to the dev output
+    mv -t "$dev/lib" "$out/lib/"*.a
+
+    # Make the jar deterministic (mainly, sorting its files)
+    strip-nondeterminism "$out/share/cieid/cieid.jar"
+  '';
+
+  passthru = { inherit javaDeps; };
+
+  meta = with lib; {
+    homepage = "https://github.com/M0Rf30/cie-middleware-linux";
+    description = "Middleware for the Italian Electronic Identity Card (CIE)";
+    longDescription = ''
+      Software for the usage of the Italian Electronic Identity Card (CIE).
+      Access to PA services, signing and verification of documents
+
+      Warning: this is an unofficial fork because the original software, as
+      distributed by the Italian government, is essentially lacking a build
+      system and is in violation of the license of the PoDoFo library.
+    '';
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    # Note: fails due to a lot of broken type conversions
+    badPlatforms = platforms.darwin;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cirrusgo/default.nix b/nixpkgs/pkgs/tools/security/cirrusgo/default.nix
new file mode 100644
index 000000000000..61c8e6b8b28f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cirrusgo/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "cirrusgo";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "Ph33rr";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-FYI/Ldu91YB/4wCiVADeYxYQOeBGro1msY5VXsnixw4=";
+  };
+
+  vendorHash = "sha256-KCf2KQ8u+nX/+zMGZ6unWb/Vz6zPNkKtMioFo1FlnVI=";
+
+  meta = with lib; {
+    description = "Tool to scan SAAS and PAAS applications";
+    homepage = "https://github.com/Ph33rr/cirrusgo";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/clairvoyance/default.nix b/nixpkgs/pkgs/tools/security/clairvoyance/default.nix
new file mode 100644
index 000000000000..ba88338347fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/clairvoyance/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "clairvoyance";
+  version = "2.5.3";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "nikitastupin";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-CVXa2HvX7M0cwqnTeZVETg07j324ATQuMNreEgAC2QA=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiohttp
+    rich
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    aiounittest
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'asyncio = "^3.4.3"' ""
+  '';
+
+  pythonImportsCheck = [
+    "clairvoyance"
+  ];
+
+  disabledTests = [
+    # KeyError
+    "test_probe_typename"
+  ];
+
+  meta = with lib; {
+    description = "Tool to obtain GraphQL API schemas";
+    homepage = "https://github.com/nikitastupin/clairvoyance";
+    changelog = "https://github.com/nikitastupin/clairvoyance/releases/tag/v${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/clamav/default.nix b/nixpkgs/pkgs/tools/security/clamav/default.nix
new file mode 100644
index 000000000000..c9d15351da4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/clamav/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, pkg-config, cmake
+, zlib, bzip2, libiconv, libxml2, openssl, ncurses, curl, libmilter, pcre2
+, libmspack, systemd, Foundation, json_c, check
+, rustc, rust-bindgen, rustfmt, cargo, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clamav";
+  version = "1.3.0";
+
+  src = fetchurl {
+    url = "https://www.clamav.net/downloads/production/${pname}-${version}.tar.gz";
+    hash = "sha256-CoamSWMg2RV2A3szEBEZr2/Y1bkQYM0xajqcIp6WBKo=";
+  };
+
+  patches = [
+    # Flaky test, remove this when https://github.com/Cisco-Talos/clamav/issues/343 is fixed
+    ./remove-freshclam-test.patch
+    ./sample-cofiguration-file-install-location.patch
+  ];
+
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ cmake pkg-config rustc rust-bindgen rustfmt cargo python3 ];
+  buildInputs = [
+    zlib bzip2 libxml2 openssl ncurses curl libiconv libmilter pcre2 libmspack json_c check
+  ] ++ lib.optional stdenv.isLinux systemd
+    ++ lib.optional stdenv.isDarwin Foundation;
+
+  cmakeFlags = [
+    "-DSYSTEMD_UNIT_DIR=${placeholder "out"}/lib/systemd"
+    "-DAPP_CONFIG_DIRECTORY=/etc/clamav"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://www.clamav.net";
+    description = "Antivirus engine designed for detecting Trojans, viruses, malware and other malicious threats";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ robberer qknight globin ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/clamav/remove-freshclam-test.patch b/nixpkgs/pkgs/tools/security/clamav/remove-freshclam-test.patch
new file mode 100644
index 000000000000..93078b52aaad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/clamav/remove-freshclam-test.patch
@@ -0,0 +1,20 @@
+diff --git a/unit_tests/CMakeLists.txt b/unit_tests/CMakeLists.txt
+index 1460357ba..1194abc9d 100644
+--- a/unit_tests/CMakeLists.txt
++++ b/unit_tests/CMakeLists.txt
+@@ -371,15 +371,6 @@ if(ENABLE_APP)
+         set_property(TEST clamd_valgrind PROPERTY ENVIRONMENT ${ENVIRONMENT} VALGRIND=${Valgrind_EXECUTABLE})
+     endif()
+ 
+-    add_test(NAME freshclam COMMAND ${PythonTest_COMMAND};freshclam_test.py
+-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+-    set_property(TEST freshclam PROPERTY ENVIRONMENT ${ENVIRONMENT})
+-    if(Valgrind_FOUND)
+-        add_test(NAME freshclam_valgrind COMMAND ${PythonTest_COMMAND};freshclam_test.py
+-            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+-        set_property(TEST freshclam_valgrind PROPERTY ENVIRONMENT ${ENVIRONMENT} VALGRIND=${Valgrind_EXECUTABLE})
+-    endif()
+-
+     add_test(NAME sigtool COMMAND ${PythonTest_COMMAND};sigtool_test.py
+         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+     set_property(TEST sigtool PROPERTY ENVIRONMENT ${ENVIRONMENT})
diff --git a/nixpkgs/pkgs/tools/security/clamav/sample-cofiguration-file-install-location.patch b/nixpkgs/pkgs/tools/security/clamav/sample-cofiguration-file-install-location.patch
new file mode 100644
index 000000000000..46444627dd38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/clamav/sample-cofiguration-file-install-location.patch
@@ -0,0 +1,29 @@
+diff --git a/etc/CMakeLists.txt b/etc/CMakeLists.txt
+index 826fff1..3cefc34 100644
+--- a/etc/CMakeLists.txt
++++ b/etc/CMakeLists.txt
+@@ -6,14 +6,14 @@ install(
+     FILES
+         ${CMAKE_CURRENT_SOURCE_DIR}/clamd.conf.sample
+     DESTINATION
+-        ${APP_CONFIG_DIRECTORY}
++        ${CMAKE_INSTALL_PREFIX}/${APP_CONFIG_DIRECTORY}
+     COMPONENT programs)
+ 
+ install(
+     FILES
+         ${CMAKE_CURRENT_SOURCE_DIR}/freshclam.conf.sample
+     DESTINATION
+-        ${APP_CONFIG_DIRECTORY}
++        ${CMAKE_INSTALL_PREFIX}/${APP_CONFIG_DIRECTORY}
+     COMPONENT programs)
+ 
+ if(ENABLE_MILTER)
+@@ -21,6 +21,6 @@ if(ENABLE_MILTER)
+         FILES
+             ${CMAKE_CURRENT_SOURCE_DIR}/clamav-milter.conf.sample
+         DESTINATION
+-            ${APP_CONFIG_DIRECTORY}
++            ${CMAKE_INSTALL_PREFIX}/${APP_CONFIG_DIRECTORY}
+         COMPONENT programs)
+ endif()
diff --git a/nixpkgs/pkgs/tools/security/clevis/default.nix b/nixpkgs/pkgs/tools/security/clevis/default.nix
new file mode 100644
index 000000000000..fa1be45a5b99
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/clevis/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, asciidoc
+, coreutils
+, cryptsetup
+, curl
+, fetchFromGitHub
+, gnugrep
+, gnused
+, jansson
+, jose
+, libpwquality
+, luksmeta
+, makeWrapper
+, meson
+, ninja
+, pkg-config
+, tpm2-tools
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clevis";
+  version = "19";
+
+  src = fetchFromGitHub {
+    owner = "latchset";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-3J3ti/jRiv+p3eVvJD7u0ko28rPd8Gte0mCJaVaqyOs=";
+  };
+
+  patches = [
+    # Replaces the clevis-decrypt 300s timeout to a 10s timeout
+    # https://github.com/latchset/clevis/issues/289
+    ./tang-timeout.patch
+  ];
+
+  postPatch = ''
+    for f in $(find src/ -type f); do
+      grep -q "/bin/cat" "$f" && substituteInPlace "$f" \
+        --replace '/bin/cat' '${coreutils}/bin/cat' || true
+    done
+  '';
+
+  postInstall = ''
+    # We wrap the main clevis binary entrypoint but not the sub-binaries.
+    wrapProgram $out/bin/clevis \
+      --prefix PATH ':' "${lib.makeBinPath [tpm2-tools jose cryptsetup libpwquality luksmeta gnugrep gnused coreutils]}:${placeholder "out"}/bin"
+  '';
+
+  nativeBuildInputs = [
+    asciidoc
+    makeWrapper
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    cryptsetup
+    curl
+    jansson
+    jose
+    libpwquality
+    luksmeta
+    tpm2-tools
+  ];
+
+  outputs = [
+    "out"
+    "man"
+  ];
+
+  passthru.tests = {
+    inherit (nixosTests.installer) clevisBcachefs clevisBcachefsFallback clevisLuks clevisLuksFallback clevisZfs clevisZfsFallback;
+    clevisLuksSystemdStage1 = nixosTests.installer-systemd-stage-1.clevisLuks;
+    clevisLuksFallbackSystemdStage1 = nixosTests.installer-systemd-stage-1.clevisLuksFallback;
+    clevisZfsSystemdStage1 = nixosTests.installer-systemd-stage-1.clevisZfs;
+    clevisZfsFallbackSystemdStage1 = nixosTests.installer-systemd-stage-1.clevisZfsFallback;
+  };
+
+  meta = with lib; {
+    description = "Automated Encryption Framework";
+    homepage = "https://github.com/latchset/clevis";
+    changelog = "https://github.com/latchset/clevis/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/clevis/tang-timeout.patch b/nixpkgs/pkgs/tools/security/clevis/tang-timeout.patch
new file mode 100644
index 000000000000..454541d5e77c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/clevis/tang-timeout.patch
@@ -0,0 +1,13 @@
+diff --git a/src/pins/tang/clevis-decrypt-tang b/src/pins/tang/clevis-decrypt-tang
+index 72393b4..40b660f 100755
+--- a/src/pins/tang/clevis-decrypt-tang
++++ b/src/pins/tang/clevis-decrypt-tang
+@@ -101,7 +101,7 @@ xfr="$(jose jwk exc -i '{"alg":"ECMR"}' -l- -r- <<< "$clt$eph")"
+ 
+ rec_url="$url/rec/$kid"
+ ct="Content-Type: application/jwk+json"
+-if ! rep="$(curl -sfg -X POST -H "$ct" --data-binary @- "$rec_url" <<< "$xfr")"; then
++if ! rep="$(curl --connect-timeout 10 -sfg -X POST -H "$ct" --data-binary @- "$rec_url" <<< "$xfr")"; then
+     echo "Error communicating with server $url" >&2
+     exit 1
+ fi
diff --git a/nixpkgs/pkgs/tools/security/cliam/default.nix b/nixpkgs/pkgs/tools/security/cliam/default.nix
new file mode 100644
index 000000000000..400cf8b7e7c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cliam/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "cliam";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "securisec";
+    repo = pname;
+    rev = version;
+    hash = "sha256-59nPoH0+k1umMwFg95hQHOr/SRGKqr1URFG7xtVRiTs=";
+  };
+
+  vendorHash = "sha256-Tcz8W/PX+9WE+0iFVhqHuElJI7qWD+AdwOKdTc7FQTE=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/securisec/cliam/cli/version.Version=${version}"
+  ];
+
+  postBuild = ''
+    # should be called cliam
+    mv $GOPATH/bin/{cli,cliam}
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd cliam \
+      --bash <($out/bin/cliam completion bash) \
+      --fish <($out/bin/cliam completion fish) \
+      --zsh <($out/bin/cliam completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Cloud agnostic IAM permissions enumerator";
+    homepage = "https://github.com/securisec/cliam";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cloudbrute/default.nix b/nixpkgs/pkgs/tools/security/cloudbrute/default.nix
new file mode 100644
index 000000000000..677c14021509
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cloudbrute/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "cloudbrute";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "0xsha";
+    repo = "CloudBrute";
+    rev = "v${version}";
+    hash = "sha256-L233VdQolSPDPDXQALLvF5seb3peHiLRiZuj2RqdaRU=";
+  };
+
+  vendorHash = "sha256-SRk5kEUVmY3IJSB/XwchqWGnaXLQUoisx6KlVzMHdjg=";
+
+  meta = with lib; {
+    description = "Cloud enumeration tool";
+    longDescription = ''
+      A tool to find a company (target) infrastructure, files, and apps on
+      the top cloud providers (Amazon, Google, Microsoft, DigitalOcean,
+      Alibaba, Vultr, Linode).
+    '';
+    homepage = "https://github.com/0xsha/CloudBrute";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cloudfox/default.nix b/nixpkgs/pkgs/tools/security/cloudfox/default.nix
new file mode 100644
index 000000000000..48d28257d9f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cloudfox/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "cloudfox";
+  version = "1.13.3";
+
+  src = fetchFromGitHub {
+    owner = "BishopFox";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Sq3ARcAK1EFbK6Y+pSCg8ayhVmnEmVQWF0eAiVhJNPs=";
+  };
+
+  vendorHash = "sha256-qPIMmyKTmZEmxlLLftRMnBXvo22WFROYlCAAsAb7jDg=";
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  # Some tests are failing because of wrong filename/path
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for situational awareness of cloud penetration tests";
+    homepage = "https://github.com/BishopFox/cloudfox";
+    changelog = "https://github.com/BishopFox/cloudfox/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cloudhunter/default.nix b/nixpkgs/pkgs/tools/security/cloudhunter/default.nix
new file mode 100644
index 000000000000..206879d53759
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cloudhunter/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cloudhunter";
+  version = "0.7.1";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "belane";
+    repo = "CloudHunter";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-7iT4vr0kcNXEyJJdBbJsllIcbZRGY3T5t/FjEONkuq0=";
+  };
+
+  postPatch = ''
+    substituteInPlace cloudhunter.py \
+      --replace "'permutations.txt'" "'$out/share/permutations.txt'" \
+      --replace "'resolvers.txt'" "'$out/share/resolvers.txt'"
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    dnspython
+    requests
+    tldextract
+    urllib3
+    xmltodict
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -vD cloudhunter.py $out/bin/cloudhunter
+    install -vD  permutations-big.txt permutations.txt resolvers.txt -t $out/share
+    install -vd $out/${python3.sitePackages}/
+    runHook postInstall
+  '';
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Cloud bucket scanner";
+    homepage = "https://github.com/belane/CloudHunter";
+    changelog = "https://github.com/belane/CloudHunter/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cloudlist/default.nix b/nixpkgs/pkgs/tools/security/cloudlist/default.nix
new file mode 100644
index 000000000000..64f6a23bde7e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cloudlist/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "cloudlist";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "cloudlist";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-oq+JmcENFcB4AoVEhxoYIKZArgzVm6QFsPF8ybtNMak=";
+  };
+
+  vendorHash = "sha256-4eGmfPXqohdRHT0xExF1Z5jE8GscQGlVEmS3cHMX4x8=";
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  meta = with lib; {
+    description = "Tool for listing assets from multiple cloud providers";
+    homepage = "https://github.com/projectdiscovery/cloudlist";
+    changelog = "https://github.com/projectdiscovery/cloudlist/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cmospwd/default.nix b/nixpkgs/pkgs/tools/security/cmospwd/default.nix
new file mode 100644
index 000000000000..e80b7256e50c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cmospwd/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchurl
+, stdenv
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "cmospwd";
+  version = "5.1";
+
+  src = fetchurl {
+    url = "https://www.cgsecurity.org/cmospwd-${finalAttrs.version}.tar.bz2";
+    hash = "sha256-8pbSl5eUsKa3JrgK/JLk0FnGXcJhKksJN3wWiDPYYvQ=";
+  };
+
+  makeFlags = [ "CC:=$(CC)" ];
+
+  preConfigure = ''
+    cd src
+
+    # It already contains compiled executable (that doesn't work), so make
+    # will refuse to build if it's still there
+    rm cmospwd
+  '';
+
+  # There is no install make target
+  installPhase = ''
+    runHook preInstall
+    install -Dm0755 cmospwd -t "$out/bin"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Decrypt password stored in cmos used to access BIOS SETUP";
+    homepage = "https://www.cgsecurity.org/wiki/CmosPwd";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ t4ccer ];
+    platforms = [ "x86_64-linux" ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/cnquery/default.nix b/nixpkgs/pkgs/tools/security/cnquery/default.nix
new file mode 100644
index 000000000000..b418d4a79a04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cnquery/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "cnquery";
+  version = "10.2.0";
+
+  src = fetchFromGitHub {
+    owner = "mondoohq";
+    repo = "cnquery";
+    rev = "v${version}";
+    hash = "sha256-bz4a4+mgssrRBthkN87aYxlZV6as2uocFvBKrKLmy8A=";
+  };
+
+  subPackages = [ "apps/cnquery" ];
+
+  vendorHash = "sha256-vq6R2FgvoET8SLTpktGLoFzZHqnmizDp0fWU7kqlLgU=";
+
+  meta = with lib; {
+    description = "cloud-native, graph-based asset inventory";
+    longDescription = ''
+    cnquery is a cloud-native tool for querying your entire fleet. It answers thousands of questions about your infrastructure and integrates with over 300 resources across cloud accounts, Kubernetes, containers, services, VMs, APIs, and more.
+      '';
+    homepage = "https://mondoo.com/cnquery";
+    changelog = "https://github.com/mondoohq/cnquery/releases/tag/v${version}";
+    license = licenses.bsl11;
+    maintainers = with maintainers; [ mariuskimmina ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cnspec/default.nix b/nixpkgs/pkgs/tools/security/cnspec/default.nix
new file mode 100644
index 000000000000..8e63a0dde771
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cnspec/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "cnspec";
+  version = "10.2.0";
+
+  src = fetchFromGitHub {
+    owner = "mondoohq";
+    repo = "cnspec";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-llX9MXlc0uMz60BjI1QFd6r/xqHBO2KCek2Q8F+TV04=";
+  };
+
+  proxyVendor = true;
+  vendorHash = "sha256-pdf9q+bvR0kbT17ZQmUcdc2AdEUt12+2iIx+aRmtTYg=";
+
+  subPackages = [
+    "apps/cnspec"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=go.mondoo.com/cnspec.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "An open source, cloud-native security and policy project";
+    homepage = "https://github.com/mondoohq/cnspec";
+    changelog = "https://github.com/mondoohq/cnspec/releases/tag/v${version}";
+    license = licenses.bsl11;
+    maintainers = with maintainers; [ fab mariuskimmina ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/coercer/default.nix b/nixpkgs/pkgs/tools/security/coercer/default.nix
new file mode 100644
index 000000000000..f380d130bb07
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/coercer/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "coercer";
+  version = "2.4.3";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "p0dalirius";
+    repo = "Coercer";
+    rev = "refs/tags/${version}";
+    hash = "sha256-WeaKToKYIB+jjTNIQvAUQQNb25TsNWALYZwIZuBjkPE=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "impacket"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    impacket
+    xlsxwriter
+  ];
+
+  pythonImportsCheck = [
+    "coercer"
+  ];
+
+  # this file runs into issues on case-insensitive filesystems
+  # ValueError: Both <...>/coercer and <...>/coercer.py exist
+  postPatch = ''
+    rm Coercer.py
+  '';
+
+  meta = with lib; {
+    description = "Tool to automatically coerce a Windows server";
+    homepage = "https://github.com/p0dalirius/Coercer";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/commix/default.nix b/nixpkgs/pkgs/tools/security/commix/default.nix
new file mode 100644
index 000000000000..b4c16376d8da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/commix/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "commix";
+  version = "3.9";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "commixproject";
+    repo = "commix";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-HX+gEL9nmq9R1GFw8xQaa7kBmW7R0IepitM08bIf3vY=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace-warn "-stable" ""
+  '';
+
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  postInstall = ''
+    # Helper files are not handled by setup.py
+    mkdir -p $out/${python3.sitePackages}/src/txt
+    install -vD src/txt/* $out/${python3.sitePackages}/src/txt/
+  '';
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automated Command Injection Exploitation Tool";
+    homepage = "https://github.com/commixproject/commix";
+    changelog = "https://github.com/commixproject/commix/releases/tag/v${version}";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cosign/default.nix b/nixpkgs/pkgs/tools/security/cosign/default.nix
new file mode 100644
index 000000000000..072b8e4ffb52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cosign/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, pcsclite
+, pkg-config
+, installShellFiles
+, PCSC
+, pivKeySupport ? true
+, pkcs11Support ? true
+, testers
+, cosign
+}:
+buildGoModule rec {
+  pname = "cosign";
+  version = "2.2.3";
+
+  src = fetchFromGitHub {
+    owner = "sigstore";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-+y79Uml1TvKypbwcWkZZF415qUPPfieP5pKHO+APjPE=";
+  };
+
+  buildInputs =
+    lib.optional (stdenv.isLinux && pivKeySupport) (lib.getDev pcsclite)
+    ++ lib.optionals (stdenv.isDarwin && pivKeySupport) [ PCSC ];
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+
+  vendorHash = "sha256-udMnSdXBjlDQlQRzhhLBDBcHwREkEev0uLIVjT8BbuU=";
+
+  subPackages = [
+    "cmd/cosign"
+  ];
+
+  tags = [ ] ++ lib.optionals pivKeySupport [ "pivkey" ] ++ lib.optionals pkcs11Support [ "pkcs11key" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X sigs.k8s.io/release-utils/version.gitVersion=v${version}"
+    "-X sigs.k8s.io/release-utils/version.gitTreeState=clean"
+  ];
+
+  __darwinAllowLocalNetworking = true;
+
+  preCheck = ''
+    # test all paths
+    unset subPackages
+
+    rm pkg/cosign/ctlog_test.go # Require network access
+    rm pkg/cosign/tlog_test.go # Require network access
+    rm cmd/cosign/cli/verify/verify_blob_attestation_test.go # Require network access
+    rm cmd/cosign/cli/verify/verify_blob_test.go # Require network access
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd cosign \
+      --bash <($out/bin/cosign completion bash) \
+      --fish <($out/bin/cosign completion fish) \
+      --zsh <($out/bin/cosign completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = cosign;
+    command = "cosign version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/sigstore/cosign";
+    changelog = "https://github.com/sigstore/cosign/releases/tag/v${version}";
+    description = "Container Signing CLI with support for ephemeral keys and Sigstore signing";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lesuisse jk developer-guy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cowpatty/default.nix b/nixpkgs/pkgs/tools/security/cowpatty/default.nix
new file mode 100644
index 000000000000..2c6e0cfa414f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cowpatty/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, clang
+, fetchFromGitHub
+, fetchpatch
+, installShellFiles
+, openssl
+, libpcap
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cowpatty";
+  version = "4.8";
+
+  src = fetchFromGitHub {
+    owner = "joswr1ght";
+    repo = pname;
+    rev = version;
+    sha256 = "0fvwwghhd7wsx0lw2dj9rdsjnirawnq3c6silzvhi0yfnzn5fs0s";
+  };
+
+  patches = [
+    # Pull upstream fix for parallel builds:
+    #   https://github.com/joswr1ght/cowpatty/pull/5
+    (fetchpatch {
+      name = "fix-parallel.patch";
+      url = "https://github.com/joswr1ght/cowpatty/commit/9c8cc09c4fa90aebee44afcd0ad6a35539178478.patch";
+      hash = "sha256-k0Qht80HcjvPoxVPF6wAXwxN3d2mxBrEyeFGuU7w9eA=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    clang
+    installShellFiles
+  ];
+
+  buildInputs = [
+    openssl
+    libpcap
+  ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "BINDIR=/bin"
+  ];
+
+  postInstall = ''
+    installManPage cowpatty.1
+    installManPage genpmk.1
+  '';
+
+  meta = with lib; {
+    description = "Offline dictionary attack against WPA/WPA2 networks";
+    homepage = "https://github.com/joswr1ght/cowpatty";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ nico202 fab ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/coze/default.nix b/nixpkgs/pkgs/tools/security/coze/default.nix
new file mode 100644
index 000000000000..5fbd906fd87e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/coze/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, buildGoModule  }:
+
+buildGoModule rec {
+  pname = "coze";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "Cyphrme";
+    repo = "Coze_cli";
+    rev = "v${version}";
+    hash = "sha256-/Cznx5Q0a9vVrC4oAoBmAkejT1505AQzzCW/wi3itv4=";
+  };
+
+  vendorHash = "sha256-MdU6fls9jQ51uCa+nB8RF8XDoZ3XgGowUGcSOAK/k+4=";
+
+  postInstall = ''
+    mv $out/bin/coze_cli $out/bin/coze
+  '';
+
+  meta = with lib; {
+    description = "CLI client for Coze, a cryptographic JSON messaging specification";
+    homepage = "https://github.com/Cyphrme/coze_cli";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ qbit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/crackmapexec/default.nix b/nixpkgs/pkgs/tools/security/crackmapexec/default.nix
new file mode 100644
index 000000000000..7db3c804f911
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/crackmapexec/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "crackmapexec";
+  version = "5.4.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Porchetta-Industries";
+    repo = "CrackMapExec";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-V2n840QyLofTfQE4vtFYGfQwl65sklp+KfNS9RCLvI8=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aioconsole
+    aardwolf
+    beautifulsoup4
+    dsinternals
+    impacket
+    lsassy
+    masky
+    msgpack
+    neo4j
+    paramiko
+    pylnk3
+    pypsrp
+    pywerview
+    requests
+    requests-ntlm
+    termcolor
+    terminaltables
+    xmltodict
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace '{ git = "https://github.com/mpgn/impacket.git", branch = "master" }' '"x"'
+  '';
+
+  pythonRelaxDeps = true;
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "cme"
+  ];
+
+  meta = with lib; {
+    description = "Tool for pentesting networks";
+    homepage = "https://github.com/Porchetta-Industries/CrackMapExec";
+    changelog = "https://github.com/Porchetta-Industries/CrackMapExec/releases/tag/v${version}";
+    license = with licenses; [ bsd2 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "cme";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/crackql/default.nix b/nixpkgs/pkgs/tools/security/crackql/default.nix
new file mode 100644
index 000000000000..6a8e95ec57f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/crackql/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "crackql";
+  version = "unstable-20230818";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "nicholasaleks";
+    repo = "CrackQL";
+    # rev = "refs/tags/${version}";
+    # Switch to tag with the next update
+    rev = "ac26a44c2dd201f65da0d1c3f95eaf776ed1b2dd";
+    hash = "sha256-XlHbGkwdOV1nobjtQP/M3IIEuzXHBuwf52EsXf3MWoM=";
+  };
+
+  pythonRelaxDeps = [
+    "graphql-core"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+    graphql-core
+    jinja2
+    typing-extensions
+  ];
+
+  meta = with lib; {
+    description = "GraphQL password brute-force and fuzzing utility";
+    homepage = "https://github.com/nicholasaleks/CrackQL";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/crackxls/default.nix b/nixpkgs/pkgs/tools/security/crackxls/default.nix
new file mode 100644
index 000000000000..f3c1745321eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/crackxls/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, autoconf, automake, openssl, libgsf, gmp }:
+
+stdenv.mkDerivation rec {
+
+  pname = "crackxls";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "GavinSmith0123";
+    repo = "crackxls2003";
+    rev = "v${version}";
+    sha256 = "0q5jl7hcds3f0rhly3iy4fhhbyh9cdrfaw7zdrazzf1wswwhyssz";
+  };
+
+  patches = [
+    # Pull patch pending upstream inclusion for -fno-common support:
+    #   https://github.com/GavinSmith0123/crackxls2003/pull/3
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/GavinSmith0123/crackxls2003/commit/613d6c1844f76c7b67671aaa265375fed56c2a56.patch";
+      sha256 = "1pk67x67d9wji576mc57z5bzqlf9ygvn9m1z47w12mad7qmj9h1n";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config autoconf automake ];
+  buildInputs = [ openssl libgsf gmp ];
+
+  # Avoid "-O5 -march=native"
+  makeFlags = [ "OPTIM_FLAGS=" ];
+
+  installPhase =
+  ''
+    mkdir -p $out/bin
+    cp crackxls2003 $out/bin/
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/GavinSmith0123/crackxls2003/";
+    description = "Used to break the encryption on old Microsoft Excel and Microsoft Word files";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/credential-detector/default.nix b/nixpkgs/pkgs/tools/security/credential-detector/default.nix
new file mode 100644
index 000000000000..fd3e40b6536c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/credential-detector/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "credential-detector";
+  version = "1.14.3";
+
+  src = fetchFromGitHub {
+    owner = "ynori7";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-20ySTLpjTc1X0iJsbzbeLmWF0xYzzREGOqEWrB2X1GQ=";
+  };
+
+  vendorHash = "sha256-VWmfATUbfnI3eJbFTUp6MR1wGESuI15PHZWuon5M5rg=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Tool to detect potentially hard-coded credentials";
+    homepage = "https://github.com/ynori7/credential-detector";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/creds/default.nix b/nixpkgs/pkgs/tools/security/creds/default.nix
new file mode 100644
index 000000000000..2f2962616d7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/creds/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "creds";
+  version = "0.5.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ihebski";
+    repo = "DefaultCreds-cheat-sheet";
+    rev = "refs/tags/creds-v${version}";
+    hash = "sha256-CtwGSF3EGcPqL49paNRCsB2qxYjKpCLqyRsC67nAyVk=";
+  };
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace "tinydb==4.3" "tinydb" \
+      --replace "pathlib" ""
+    substituteInPlace creds \
+      --replace "pathlib.Path(__file__).parent" "pathlib.Path.home()"
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    fire
+    prettytable
+    requests
+    tinydb
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to search a collection of default credentials";
+    homepage = "https://github.com/ihebski/DefaultCreds-cheat-sheet";
+    changelog = "https://github.com/ihebski/DefaultCreds-cheat-sheet/releases/tag/creds-${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/credslayer/default.nix b/nixpkgs/pkgs/tools/security/credslayer/default.nix
new file mode 100644
index 000000000000..7d9d67577930
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/credslayer/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, fetchFromGitHub
+, python3
+, wireshark-cli
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "credslayer";
+  version = "0.1.3";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ShellCode33";
+    repo = "CredSLayer";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-gryV9MHULY6ZHy6YDFQDIkZsfIX8La0tHT0vrrQJNDQ=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pyshark
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    py
+    pytestCheckHook
+    wireshark-cli
+  ];
+
+  pytestFlagsArray = [
+    "tests/tests.py"
+  ];
+
+  disabledTests = [
+    # Requires a telnet setup
+    "test_telnet"
+    # stdout has all the correct data, but the underlying test code fails
+    # functionally everything seems to be intact
+    "http_get_auth"
+    "test_http_post_auth"
+    "test_ntlmssp"
+  ];
+
+  pythonImportsCheck = [
+    "credslayer"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/credslayer \
+       --prefix PATH : "${lib.makeBinPath [ wireshark-cli ]}"
+  '';
+
+  meta = with lib; {
+    description = "Extract credentials and other useful info from network captures";
+    homepage = "https://github.com/ShellCode33/CredSLayer";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/crlfsuite/default.nix b/nixpkgs/pkgs/tools/security/crlfsuite/default.nix
new file mode 100644
index 000000000000..bc375f03c0c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/crlfsuite/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "crlfsuite";
+  version = "2.5.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "Nefcore";
+    repo = "CRLFsuite";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-mK20PbVGhTEjhY5L6coCzSMIrG/PHHmNq30ZoJEs6uI=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    requests
+  ];
+
+  # No tests present
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "crlfsuite"
+  ];
+
+  meta = with lib; {
+    description = "CRLF injection (HTTP Response Splitting) scanner";
+    homepage = "https://github.com/Nefcore/CRLFsuite";
+    license = licenses.mit;
+    maintainers = with maintainers; [ c0bw3b fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/crlfuzz/default.nix b/nixpkgs/pkgs/tools/security/crlfuzz/default.nix
new file mode 100644
index 000000000000..f28f96e5f4cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/crlfuzz/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "crlfuzz";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "dwisiswant0";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-rqhdxOQmZCRtq+IZygKLleb5GoKP2akyEc3rbGcnZmw=";
+  };
+
+  vendorHash = "sha256-yLtISEJWIKqCuZtQxReu/Vykw5etqgLpuXqOdtwBkqU=";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Tool to scan for CRLF vulnerability";
+    homepage = "https://github.com/dwisiswant0/crlfuzz";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/crowbar/default.nix b/nixpkgs/pkgs/tools/security/crowbar/default.nix
new file mode 100644
index 000000000000..e58f77457de2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/crowbar/default.nix
@@ -0,0 +1,42 @@
+{ fetchFromGitHub
+, freerdp
+, nmap
+, openvpn
+, python3Packages
+, lib
+, tigervnc
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "crowbar";
+  version = "unstable-2020-04-23";
+
+  src = fetchFromGitHub {
+    owner = "galkan";
+    repo = pname;
+    rev = "500d633ff5ddfcbc70eb6d0b4d2181e5b8d3c535";
+    sha256 = "05m9vywr9976pc7il0ak8nl26mklzxlcqx0p8rlfyx1q766myqzf";
+  };
+
+  propagatedBuildInputs = [ python3Packages.paramiko ];
+
+  patchPhase = ''
+    sed -i 's,/usr/bin/xfreerdp,${freerdp}/bin/xfreerdp,g' lib/main.py
+    sed -i 's,/usr/bin/vncviewer,${tigervnc}/bin/vncviewer,g' lib/main.py
+    sed -i 's,/usr/sbin/openvpn,${openvpn}/bin/openvpn,g' lib/main.py
+
+    sed -i 's,/usr/bin/nmap,${nmap}/bin/nmap,g' lib/nmap.py
+  '';
+
+  # Sanity check
+  checkPhase = ''
+    $out/bin/crowbar --help > /dev/null
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/galkan/crowbar";
+    description = "A brute forcing tool that can be used during penetration tests";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pamplemousse ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/crowdsec/default.nix b/nixpkgs/pkgs/tools/security/crowdsec/default.nix
new file mode 100644
index 000000000000..f9428bdd3170
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/crowdsec/default.nix
@@ -0,0 +1,64 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "crowdsec";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "crowdsecurity";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-5jK+f6IFPhGit+jxkSLTcWN1+nJRQaCZKpWZYId+2bk=";
+  };
+
+  vendorHash = "sha256-tUvFT+rE58yxNJGhqqwSG0GlGushkUpngxLkmyjjFFY=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [
+    "cmd/crowdsec"
+    "cmd/crowdsec-cli"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/crowdsecurity/go-cs-lib/pkg/version.Version=v${version}"
+    "-X github.com/crowdsecurity/go-cs-lib/pkg/version.BuildDate=1970-01-01_00:00:00"
+    "-X github.com/crowdsecurity/go-cs-lib/pkg/version.Tag=${src.rev}"
+    "-X github.com/crowdsecurity/crowdsec/pkg/cwversion.Codename=alphaga"
+    "-X github.com/crowdsecurity/crowdsec/pkg/csconfig.defaultConfigDir=/etc/crowdsec"
+    "-X github.com/crowdsecurity/crowdsec/pkg/csconfig.defaultDataDir=/var/lib/crowdsec/data"
+  ];
+
+  postBuild = "mv $GOPATH/bin/{crowdsec-cli,cscli}";
+
+  postInstall = ''
+    mkdir -p $out/share/crowdsec
+    cp -r ./config $out/share/crowdsec/
+
+    installShellCompletion --cmd cscli \
+      --bash <($out/bin/cscli completion bash) \
+      --fish <($out/bin/cscli completion fish) \
+      --zsh <($out/bin/cscli completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://crowdsec.net/";
+    changelog = "https://github.com/crowdsecurity/crowdsec/releases/tag/v${version}";
+    description = "CrowdSec is a free, open-source and collaborative IPS";
+    longDescription = ''
+      CrowdSec is a free, modern & collaborative behavior detection engine,
+      coupled with a global IP reputation network. It stacks on fail2ban's
+      philosophy but is IPV6 compatible and 60x faster (Go vs Python), uses Grok
+      patterns to parse logs and YAML scenario to identify behaviors. CrowdSec
+      is engineered for modern Cloud/Containers/VM based infrastructures (by
+      decoupling detection and remediation). Once detected you can remedy
+      threats with various bouncers (firewall block, nginx http 403, Captchas,
+      etc.) while the aggressive IP can be sent to CrowdSec for curation before
+      being shared among all users to further improve everyone's security.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ jk urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/crunch/default.nix b/nixpkgs/pkgs/tools/security/crunch/default.nix
new file mode 100644
index 000000000000..d287fb32fb67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/crunch/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, which }:
+
+stdenv.mkDerivation rec {
+  pname = "crunch";
+  version = "3.6";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/crunch-wordlist/${pname}-${version}.tgz";
+    sha256 = "0mgy6ghjvzr26yrhj1bn73qzw6v9qsniskc5wqq1kk0hfhy6r3va";
+  };
+
+  nativeBuildInputs = [ which ];
+
+  preBuild = ''
+    substituteInPlace Makefile \
+      --replace '-g root -o root' "" \
+      --replace '-g wheel -o root' "" \
+      --replace 'sudo ' ""
+  '';
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "PREFIX=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "Wordlist generator";
+    homepage = "https://sourceforge.net/projects/crunch-wordlist/";
+    platforms = platforms.unix;
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ lnl7 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cryptomator/default.nix b/nixpkgs/pkgs/tools/security/cryptomator/default.nix
new file mode 100644
index 000000000000..bf6f5c3c0587
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cryptomator/default.nix
@@ -0,0 +1,97 @@
+{ lib, stdenv, fetchFromGitHub
+, autoPatchelfHook
+, fuse3
+, maven, jdk, makeShellWrapper, glib, wrapGAppsHook
+, libayatana-appindicator
+}:
+
+
+let
+  mavenJdk = maven.override {
+    jdk = jdk;
+  };
+in
+assert stdenv.isLinux; # better than `called with unexpected argument 'enableJavaFX'`
+mavenJdk.buildMavenPackage rec {
+  pname = "cryptomator";
+  version = "1.11.1";
+
+  src = fetchFromGitHub {
+    owner = "cryptomator";
+    repo = "cryptomator";
+    rev = version;
+    hash = "sha256-Y+oG2NF4Vsklp1W22Xv+XrkY6vwn23FkzAXG/5828Og=";
+  };
+
+  mvnParameters = "-Dmaven.test.skip=true -Plinux";
+  mvnHash = "sha256-cXmnJHgKW6SGnhHFuFJP/DKNmFacfHbC3nQ2uVdIvUE=";
+
+  preBuild = ''
+    VERSION=${version}
+    SEMVER_STR=${version}
+  '';
+
+  # This is based on the instructins in https://github.com/cryptomator/cryptomator/blob/develop/dist/linux/appimage/build.sh
+  installPhase = ''
+    mkdir -p $out/bin/ $out/share/cryptomator/libs/ $out/share/cryptomator/mods/
+
+    cp target/libs/* $out/share/cryptomator/libs/
+    cp target/mods/* target/cryptomator-*.jar $out/share/cryptomator/mods/
+
+    makeShellWrapper ${jdk}/bin/java $out/bin/${pname} \
+      --add-flags "--enable-preview" \
+      --add-flags "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.purejava.appindicator" \
+      --add-flags "--class-path '$out/share/cryptomator/libs/*'" \
+      --add-flags "--module-path '$out/share/cryptomator/mods'" \
+      --add-flags "-Dfile.encoding='utf-8'" \
+      --add-flags "-Dcryptomator.logDir='@{userhome}/.local/share/Cryptomator/logs'" \
+      --add-flags "-Dcryptomator.pluginDir='@{userhome}/.local/share/Cryptomator/plugins'" \
+      --add-flags "-Dcryptomator.settingsPath='@{userhome}/.config/Cryptomator/settings.json'" \
+      --add-flags "-Dcryptomator.p12Path='@{userhome}/.config/Cryptomator/key.p12'" \
+      --add-flags "-Dcryptomator.ipcSocketPath='@{userhome}/.config/Cryptomator/ipc.socket'" \
+      --add-flags "-Dcryptomator.mountPointsDir='@{userhome}/.local/share/Cryptomator/mnt'" \
+      --add-flags "-Dcryptomator.showTrayIcon=true" \
+      --add-flags "-Dcryptomator.buildNumber='nix-${src.rev}'" \
+      --add-flags "-Dcryptomator.appVersion='${version}'" \
+      --add-flags "-Djava.net.useSystemProxies=true" \
+      --add-flags "-Xss20m" \
+      --add-flags "-Xmx512m" \
+      --add-flags "-Dcryptomator.disableUpdateCheck=true" \
+      --add-flags "-Dcryptomator.integrationsLinux.trayIconsDir='$out/share/icons/hicolor/symbolic/apps'" \
+      --add-flags "--module org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator" \
+      --prefix PATH : "$out/share/cryptomator/libs/:${lib.makeBinPath [ jdk glib ]}" \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ fuse3 libayatana-appindicator ]}" \
+      --set JAVA_HOME "${jdk.home}"
+
+    # install desktop entry and icons
+    cp -r ${src}/dist/linux/appimage/resources/AppDir/usr/* $out/
+    # The directory is read only when copied, enable read to install additional files
+    chmod +w -R $out/
+    cp ${src}/dist/linux/common/org.cryptomator.Cryptomator256.png $out/share/icons/hicolor/256x256/apps/org.cryptomator.Cryptomator.png
+    cp ${src}/dist/linux/common/org.cryptomator.Cryptomator512.png $out/share/icons/hicolor/512x512/apps/org.cryptomator.Cryptomator.png
+    cp ${src}/dist/linux/common/org.cryptomator.Cryptomator.svg $out/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg
+    cp ${src}/dist/linux/common/org.cryptomator.Cryptomator.desktop $out/share/applications/org.cryptomator.Cryptomator.desktop
+    cp ${src}/dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml $out/share/metainfo/org.cryptomator.Cryptomator.metainfo.xml
+    cp ${src}/dist/linux/common/application-vnd.cryptomator.vault.xml $out/share/mime/packages/application-vnd.cryptomator.vault.xml
+  '';
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeShellWrapper
+    wrapGAppsHook
+    jdk
+  ];
+  buildInputs = [ fuse3 jdk glib libayatana-appindicator ];
+
+  meta = with lib; {
+    description = "Free client-side encryption for your cloud files";
+    homepage = "https://cryptomator.org";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bachp ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ctmg/default.nix b/nixpkgs/pkgs/tools/security/ctmg/default.nix
new file mode 100644
index 000000000000..81d57513aac3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ctmg/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "ctmg";
+  version = "1.2";
+
+  src = fetchzip {
+    url = "https://git.zx2c4.com/ctmg/snapshot/ctmg-${version}.tar.xz";
+    sha256 = "1i4v8sriwjrmj3yizbl1ysckb711yl9qsn9x45jq0ij1apsydhyc";
+  };
+
+  installPhase = "install -D ctmg.sh $out/bin/ctmg";
+
+  meta = with lib; {
+    description = "An encrypted container manager for Linux using cryptsetup";
+    homepage = "https://git.zx2c4.com/ctmg/about/";
+    license = licenses.isc;
+    maintainers = with maintainers; [ mrVanDalo ];
+    platforms = platforms.linux;
+    mainProgram = "ctmg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cve-bin-tool/default.nix b/nixpkgs/pkgs/tools/security/cve-bin-tool/default.nix
new file mode 100644
index 000000000000..88b52da21eb3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cve-bin-tool/default.nix
@@ -0,0 +1,145 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, fetchpatch
+, jsonschema
+, plotly
+, beautifulsoup4
+, pyyaml
+, isort
+, py
+, jinja2
+, rpmfile
+, reportlab
+, zstandard
+, rich
+, aiohttp
+, toml
+, distro
+  # aiohttp[speedups]
+, aiodns
+, brotlipy
+, faust-cchardet
+, pillow
+, pytestCheckHook
+, xmlschema
+, setuptools
+, packaging
+, cvss
+, google-cloud-sdk
+, pip
+, testers
+, cve-bin-tool
+# pinned packaging
+, pyparsing
+, fetchPypi
+, buildPythonPackage
+, pretend
+, pythonOlder
+, wheel
+}:
+
+let
+  # pin packaging to < 22 until issue related to https://github.com/intel/cve-bin-tool/pull/2436 are resolved by upstream (post-3.2)
+  packaging_21_3 = buildPythonPackage rec {
+    inherit (packaging) pname passthru meta;
+    version = "21.3";
+    format = "pyproject";
+    disabled = pythonOlder "3.6";
+
+    src = fetchPypi {
+      inherit pname version;
+      sha256 = "sha256-3UfEKSfYmrkR5gZRiQfMLTofOLvQJjhZcGQ/nFuOz+s=";
+    };
+    nativeBuildInputs = [
+      setuptools
+      wheel
+    ];
+    propagatedBuildInputs = [
+      pyparsing
+    ];
+
+    nativeCheckInputs = [
+      pytestCheckHook
+      pretend
+    ];
+
+    doCheck = false;
+  };
+in
+buildPythonApplication rec {
+  pname = "cve-bin-tool";
+  version = "3.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "intel";
+    repo = "cve-bin-tool";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-QOnWt6iit0/F6d/MfZ8qJqDuT3IHh0Qjs6BcJkI/CBw=";
+  };
+
+  patches = [
+    # Not needed as python dependency, should just be on the PATH
+    ./no-gsutil-python-dependency.patch
+    # Already merged upstream, to be removed post-3.2
+    # https://github.com/intel/cve-bin-tool/pull/2524
+    (fetchpatch {
+      name = "cve-bin-tool-version-success.patch";
+      url = "https://github.com/intel/cve-bin-tool/commit/6f9bd565219932c565c1443ac467fe4163408dd8.patch";
+      hash = "sha256-Glj6qiOvmvsuetXn4tysyiN/vrcOPFLORh+u3BoGzCI=";
+    })
+  ];
+
+  # Wants to open a sqlite database, access the internet, etc
+  doCheck = false;
+
+  propagatedNativeBuildInputs = [
+    pip
+  ];
+
+  propagatedBuildInputs = [
+    google-cloud-sdk
+    jsonschema
+    plotly
+    beautifulsoup4
+    pyyaml
+    isort
+    py
+    jinja2
+    rpmfile
+    reportlab
+    zstandard
+    rich
+    aiohttp
+    toml
+    distro
+    # aiohttp[speedups]
+    aiodns
+    brotlipy
+    faust-cchardet
+    # needed by brotlipy
+    pillow
+    setuptools
+    xmlschema
+    cvss
+    packaging_21_3
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "cve_bin_tool"
+  ];
+
+  passthru.tests.version = testers.testVersion { package = cve-bin-tool; };
+
+  meta = with lib; {
+    description = "CVE Binary Checker Tool";
+    homepage = "https://github.com/intel/cve-bin-tool";
+    license = licenses.gpl3Plus;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cve-bin-tool/no-gsutil-python-dependency.patch b/nixpkgs/pkgs/tools/security/cve-bin-tool/no-gsutil-python-dependency.patch
new file mode 100644
index 000000000000..9bbac57b5fb4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cve-bin-tool/no-gsutil-python-dependency.patch
@@ -0,0 +1,12 @@
+diff --git a/requirements.txt b/requirements.txt
+index 1d4aa9a..c9e9171 100644
+--- a/requirements.txt
++++ b/requirements.txt
+@@ -14,6 +14,6 @@ xmlschema
+ importlib_metadata; python_version < "3.8"
+ requests
+ urllib3>=1.26.5 # dependency of requests added explictly to avoid CVEs
+-gsutil
++#gsutil
+ cvss
+ packaging
diff --git a/nixpkgs/pkgs/tools/security/cyclonedx-gomod/default.nix b/nixpkgs/pkgs/tools/security/cyclonedx-gomod/default.nix
new file mode 100644
index 000000000000..1a00303ac96f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cyclonedx-gomod/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "cyclonedx-gomod";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "CycloneDX";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-3YHlh7edRWU8plAJh96RDkrC9YUQjvV4vNGOxmbS0sA=";
+  };
+
+  vendorHash = "sha256-0Fx9pOofcY5rpX6DU2xPeg7xEZ8ows/DWwyV5B7LHGY=";
+
+  # Tests require network access and cyclonedx executable
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to create CycloneDX Software Bill of Materials (SBOM) from Go modules";
+    homepage = "https://github.com/CycloneDX/cyclonedx-gomod";
+    changelog = "https://github.com/CycloneDX/cyclonedx-gomod/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "cyclonedx-gomod";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dalfox/default.nix b/nixpkgs/pkgs/tools/security/dalfox/default.nix
new file mode 100644
index 000000000000..b41ca04f7798
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dalfox/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dalfox";
+  version = "2.9.2";
+
+  src = fetchFromGitHub {
+    owner = "hahwul";
+    repo = "dalfox";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-sKW6UYSPgXkZbLiOeYru/XpG/Cpvvhwos6Z5J/WxjXo=";
+  };
+
+  vendorHash = "sha256-0eNaH82iCmxaie+nA9qxEWb8Uq6LaEQoU9wRFJ+GFv0=";
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for analysing parameter and XSS scanning";
+    homepage = "https://github.com/hahwul/dalfox";
+    changelog = "https://github.com/hahwul/dalfox/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "dalfox";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/das/default.nix b/nixpkgs/pkgs/tools/security/das/default.nix
new file mode 100644
index 000000000000..2f7cd2fa98f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/das/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "das";
+  version = "0.3.8";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "snovvcrash";
+    repo = "DivideAndScan";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-a9gnEBTvZshw42M/GrpCgjZh6FOzL45aZqGRyeHO0ec=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'networkx = "^2.8.4"' 'networkx = "*"' \
+      --replace 'pandas = "^1.4.2"' 'pandas = "*"'
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dash
+    defusedxml
+    dnspython
+    netaddr
+    networkx
+    pandas
+    plotly
+    python-nmap
+    scipy
+    tinydb
+  ];
+
+  pythonImportsCheck = [
+    "das"
+  ];
+
+  meta = with lib; {
+    description = "Divide full port scan results and use it for targeted Nmap runs";
+    homepage = "https://github.com/snovvcrash/DivideAndScan";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/davtest/default.nix b/nixpkgs/pkgs/tools/security/davtest/default.nix
new file mode 100644
index 000000000000..226ead57ffde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/davtest/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, perl, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "davtest";
+  version = "1.0";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/davtest/davtest-${version}.tar.bz2";
+    sha256 = "0kigcgv1bbnan9yr5481s4b9islmvzl2arpg1ig1i39sxrna06y7";
+  };
+
+  postPatch = ''
+    substituteInPlace davtest.pl \
+      --replace "backdoors/" "$out/share/davtest/backdoors/" \
+      --replace "tests/" "$out/share/davtest/tests/"
+  '';
+
+  buildInputs = [
+    (perl.withPackages (p: with p; [ HTTPDAV ]))
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 davtest.pl $out/bin/davtest.pl
+    mkdir -p $out/share/davtest
+    cp -r backdoors/ tests/ $out/share/davtest/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tests WebDAV servers by uploading test files, and then optionally testing for command execution or other actions directly on the target";
+    homepage = "https://code.google.com/p/davtest/";
+    mainProgram = "davtest.pl";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dbmonster/default.nix b/nixpkgs/pkgs/tools/security/dbmonster/default.nix
new file mode 100644
index 000000000000..13d0cded0a3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dbmonster/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, aircrack-ng
+, fetchFromGitHub
+, iproute2
+, networkmanager
+, python3
+, tshark
+, wirelesstools
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "dbmonster";
+  version = "unstable-2022-09-17";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "90N45-d3v";
+    repo = "dBmonster";
+    rev = "4c79549079782a2991309120a55c8158701a9b70";
+    hash = "sha256-9RP3LmZF7P2c0+Jt/kMSVPb4cBtyH6P3FZ5UrQpBP0I=";
+  };
+
+  propagatedBuildInputs = [
+    aircrack-ng
+    iproute2
+    networkmanager
+    tshark
+    wirelesstools
+  ] ++ (with python3.pkgs; [
+    matplotlib
+  ]);
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD dBmonster.py $out/bin/$pname.py
+
+    makeWrapper ${python3.interpreter} $out/bin/$pname \
+      --set PYTHONPATH "$PYTHONPATH:$out/bin/$pname" \
+      --add-flags "-O $out/bin/$pname.py"
+
+    runHook postInstall
+  '';
+
+  # Only script available
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to track WiFi devices by signal strength";
+    homepage = "https://github.com/90N45-d3v/dBmonster";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/decoder/default.nix b/nixpkgs/pkgs/tools/security/decoder/default.nix
new file mode 100644
index 000000000000..76dd3003d500
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/decoder/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "decoder";
+  version = "unstable-2021-11-20";
+
+  src = fetchFromGitHub {
+    owner = "PeterPawn";
+    repo = "decoder";
+    rev = "da0f826629d4e7b873f9d1a39f24c50ff0a68cd2";
+    sha256 = "sha256-1sT1/iwtc2ievmLuNuooy9b14pTs1ZC5noDwzFelk7w=";
+  };
+
+  patches = [
+    # Pull fix pending upstream inclusion for -fno-common toolchains:
+    #   https://github.com/PeterPawn/decoder/pull/29
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/PeterPawn/decoder/commit/843ac477c31108023d8008581bf91c5a3acc1859.patch";
+      sha256 = "sha256-rRylz8cxgNyPSqL/THdgEBpzcVx1K+xbjUn4PwP9Jn4=";
+    })
+  ];
+
+  buildInputs = [
+    openssl
+  ];
+
+  makeFlags = [ "OPENSSL=y" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 src/decoder "$out/bin/decoder"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/PeterPawn/decoder";
+    description = ''"secrets" decoding for FRITZ!OS devices'';
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ Luflosi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/deepsea/default.nix b/nixpkgs/pkgs/tools/security/deepsea/default.nix
new file mode 100644
index 000000000000..2f0a9f175f39
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/deepsea/default.nix
@@ -0,0 +1,31 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "deepsea";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "dsnezhkov";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02s03sha8vwp7dsaw3z446pskhb6wmy0hyj0mhpbx58sf147rkig";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Phishing tool for red teams and pentesters";
+    longDescription = ''
+      DeepSea phishing gear aims to help RTOs and pentesters with the
+      delivery of opsec-tight, flexible email phishing campaigns carried
+      out on the outside as well as on the inside of a perimeter.
+    '';
+    homepage = "https://github.com/dsnezhkov/deepsea";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    broken = true; # vendor isn't reproducible with go > 1.17: nix-build -A $name.goModules --check
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/deepsecrets/default.nix b/nixpkgs/pkgs/tools/security/deepsecrets/default.nix
new file mode 100644
index 000000000000..c509311f3a6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/deepsecrets/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "deepsecrets";
+  version = "1.0.6";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "avito-tech";
+    repo = "deepsecrets";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-VfIsPgStHcIYGbfrOs1mvgoq0ZoVSZwILFVBeMt/5Jc=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace-warn 'pyyaml = "^5.4.1"' 'pyyaml = "*"' \
+      --replace-warn 'regex = "^2023.3.23"' 'regex = "*"' \
+      --replace-warn 'mmh3 = "^3.0.0"' 'mmh3 = "*"'
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dotwiz
+    mmh3
+    ordered-set
+    pydantic_1
+    pygments
+    pyyaml
+    regex
+  ];
+
+  pythonImportsCheck = [
+    "deepsecrets"
+  ];
+
+  meta = with lib; {
+    description = "Secrets scanner that understands code";
+    homepage = "https://github.com/avito-tech/deepsecrets";
+    changelog = "https://github.com/avito-tech/deepsecrets/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/der-ascii/default.nix b/nixpkgs/pkgs/tools/security/der-ascii/default.nix
new file mode 100644
index 000000000000..28cab27731b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/der-ascii/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "der-ascii";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-LgxGSZQNxwx08mK9G8mSuBFTOd3pC1mvz3Wz7Y+6XR4=";
+  };
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = ''
+      A small human-editable language to emit DER or BER encodings of ASN.1
+      structures and malformed variants of them
+    '';
+    homepage = "https://github.com/google/der-ascii";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ alexshpilkin cpu hawkw ];
+    mainProgram = "ascii2der"; # has stable output, unlike its inverse
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dieharder/default.nix b/nixpkgs/pkgs/tools/security/dieharder/default.nix
new file mode 100644
index 000000000000..51370ad8dcc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dieharder/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, gsl
+, dieharder, testers }:
+
+stdenv.mkDerivation rec {
+  pname = "dieharder";
+  version = "3.31.1";
+
+  src = fetchurl {
+    url = "http://webhome.phy.duke.edu/~rgb/General/dieharder/dieharder-${version}.tgz";
+    hash = "sha256-bP8P+DlMVTVJrHQzNZzPyVX7JnlCYDFGIN+l5M1Lcn8=";
+  };
+
+  patches = [
+    # Include missing stdint.h header
+    ./stdint.patch
+  ];
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: include/dieharder/parse.h:21: multiple definition of `splitbuf';
+  #     include/dieharder/parse.h:21: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  buildInputs = [ gsl ];
+
+  passthru = {
+    tests.version = testers.testVersion { package = dieharder; };
+  };
+
+  meta = with lib; {
+    description = "A Random Number Generator test suite";
+    homepage = "https://webhome.phy.duke.edu/~rgb/General/dieharder.php";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ zhaofengli ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dieharder/stdint.patch b/nixpkgs/pkgs/tools/security/dieharder/stdint.patch
new file mode 100644
index 000000000000..91dccfafd665
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dieharder/stdint.patch
@@ -0,0 +1,10 @@
+--- a/include/dieharder/libdieharder.h	2011-10-14 15:41:37.000000000 +0200
++++ b/include/dieharder/libdieharder.h	2015-03-27 16:34:40.978860858 +0100
+@@ -13,6 +13,7 @@
+ #include <stdlib.h>
+ #include <stdarg.h>
+ #include <string.h>
++#include <stdint.h>
+ #include <sys/time.h>
+ 
+ /* This turns on uint macro in c99 */
diff --git a/nixpkgs/pkgs/tools/security/dirstalk/default.nix b/nixpkgs/pkgs/tools/security/dirstalk/default.nix
new file mode 100644
index 000000000000..1397a0b8aa9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dirstalk/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+}:
+
+buildGoModule rec {
+  pname = "dirstalk";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "stefanoj3";
+    repo = pname;
+    rev = version;
+    hash = "sha256-gSMkTGzMDI+scG3FQ0u0liUDL4qOPPW2UWLlAQcmmaA=";
+  };
+
+  patches = [
+    # update dependencies to fix darwin build - remove in next release
+    (fetchpatch {
+      url = "https://github.com/stefanoj3/dirstalk/commit/79aef14c5c048f3a3a8374f42c7a0d52fc9f7b50.patch";
+      sha256 = "sha256-2rSrMowfYdKV69Yg2QBzam3WOwGrSHQB+3uVi1Z2oJ8=";
+    })
+  ];
+
+  vendorHash = "sha256-XY4vIh5de0tp4KPXTpzTm7/2bDisTjCsojLzxVDf4Jw=";
+
+  subPackages = "cmd/dirstalk";
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/stefanoj3/dirstalk/pkg/cmd.Version=${version}"
+  ];
+
+  # Tests want to write to the root directory
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to brute force paths on web servers";
+    homepage = "https://github.com/stefanoj3/dirstalk";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dismap/default.nix b/nixpkgs/pkgs/tools/security/dismap/default.nix
new file mode 100644
index 000000000000..52e046aa80c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dismap/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dismap";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "zhzyker";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YjjiS6iLIQvrPS378v2nyrgwWBJ9YtDeNTPz0ze05mU=";
+  };
+
+  vendorHash = "sha256-GnchyE2TswvjYlehhMYesZruTTwyTorfR+17K0RXXFY=";
+
+  meta = with lib; {
+    description = "Asset discovery and identification tools";
+    homepage = "https://github.com/zhzyker/dismap";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dismember/default.nix b/nixpkgs/pkgs/tools/security/dismember/default.nix
new file mode 100644
index 000000000000..cb2dd99b45c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dismember/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dismember";
+  version = "0.0.1";
+
+  src = fetchFromGitHub {
+    owner = "liamg";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-myoBXoi7VqHOLmu/XrvnlfBDlEnXm+0fp8WQec+3EJY=";
+  };
+
+  vendorHash = "sha256-xxZQz94sr7aSNhmvFWdRtVnS0yk2KQIkAHjwZeJPBwY=";
+
+  meta = with lib; {
+    description = "Tool to scan memory for secrets";
+    homepage = "https://github.com/liamg/dismember";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "dismember";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dnsenum/default.nix b/nixpkgs/pkgs/tools/security/dnsenum/default.nix
new file mode 100644
index 000000000000..a24fc96621f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dnsenum/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perl, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "dnsenum";
+  version = "1.2.4.2";
+
+  src = fetchFromGitHub {
+    owner = "fwaeytens";
+    repo = pname;
+    rev = version;
+    sha256 = "1bg1ljv6klic13wq4r53bg6inhc74kqwm3w210865b1v1n8wj60v";
+  };
+
+  propagatedBuildInputs = with perlPackages; [
+    perl NetDNS NetIP NetNetmask StringRandom XMLWriter NetWhoisIP WWWMechanize
+  ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -vD dnsenum.pl $out/bin/dnsenum
+    install -vD dns.txt -t $out/share
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/fwaeytens/dnsenum";
+    description = "A tool to enumerate DNS information";
+    maintainers = with maintainers; [ c0bw3b ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dnspeep/Cargo.lock b/nixpkgs/pkgs/tools/security/dnspeep/Cargo.lock
new file mode 100644
index 000000000000..a4966f07a5ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dnspeep/Cargo.lock
@@ -0,0 +1,669 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "time",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dns-message-parser"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b393503f9263e08ba3efe0a3578cdde90d6da5ae1af232cc338640670451c992"
+dependencies = [
+ "base64",
+ "bytes 1.1.0",
+ "hex",
+ "thiserror",
+]
+
+[[package]]
+name = "dnspeep"
+version = "0.1.3"
+dependencies = [
+ "bytes 1.1.0",
+ "chrono",
+ "dns-message-parser",
+ "etherparse",
+ "eyre",
+ "futures",
+ "getopts",
+ "hex",
+ "libc",
+ "pcap",
+ "tokio",
+]
+
+[[package]]
+name = "etherparse"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fa20922281f9ee5ffcda45e80d56085829279f1270f79fbabc39809a4354807"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "eyre"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "221239d1d5ea86bf5d6f91c9d6bc3646ffe471b08ff9b0f91c44f115ac969d2b"
+dependencies = [
+ "indenter",
+ "once_cell",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futures"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f55667319111d593ba876406af7c409c0ebb44dc4be6132a783ccf163ea14c1"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2dd2df839b57db9ab69c2c9d8f3e8c81984781937fe2807dc6dcf3b2ad2939"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15496a72fabf0e62bdc3df11a59a3787429221dd0710ba8ef163d6f7a9112c94"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "891a4b7b96d84d5940084b2a37632dd65deeae662c114ceaa2c879629c9c0ad1"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71c2c65c57704c32f5241c1223167c2c3294fd34ac020c807ddbe6db287ba59"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea405816a5139fb39af82c2beb921d52143f556038378d6db21183a5c37fbfb7"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85754d98985841b7d4f5e8e6fbfa4a4ac847916893ec511a2917ccd8525b8bb3"
+
+[[package]]
+name = "futures-task"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa189ef211c15ee602667a6fcfe1c1fd9e07d42250d2156382820fba33c9df80"
+
+[[package]]
+name = "futures-util"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1812c7ab8aedf8d6f2701a43e1243acdbcc2b36ab26e2ad421eb99ac963d96d1"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite 0.2.6",
+ "pin-utils",
+ "proc-macro-hack",
+ "proc-macro-nested",
+ "slab",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8916b1f6ca17130ec6568feccee27c156ad12037880833a3b842a823236502e7"
+
+[[package]]
+name = "libloading"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "memchr"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow 0.2.2",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "mio-named-pipes"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656"
+dependencies = [
+ "log",
+ "mio",
+ "miow 0.3.7",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "mio-uds"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0"
+dependencies = [
+ "iovec",
+ "libc",
+ "mio",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
+
+[[package]]
+name = "pcap"
+version = "0.8.1"
+source = "git+https://github.com/jvns/pcap#ae2aa7f501ae5bb7069155cf7c5c700b7482681d"
+dependencies = [
+ "futures",
+ "libc",
+ "libloading",
+ "mio",
+ "regex",
+ "tokio",
+ "widestring",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+
+[[package]]
+name = "proc-macro-nested"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "regex"
+version = "1.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
+
+[[package]]
+name = "syn"
+version = "1.0.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1d708c221c5a612956ef9f75b37e454e88d1f7b899fbd3a18d4252012d663"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "time"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+dependencies = [
+ "libc",
+ "wasi",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "tokio"
+version = "0.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "iovec",
+ "lazy_static",
+ "libc",
+ "memchr",
+ "mio",
+ "mio-named-pipes",
+ "mio-uds",
+ "num_cpus",
+ "pin-project-lite 0.1.12",
+ "signal-hook-registry",
+ "slab",
+ "tokio-macros",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "widestring"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7157704c2e12e3d2189c507b7482c52820a16dfa4465ba91add92f266667cadb"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
diff --git a/nixpkgs/pkgs/tools/security/dnspeep/default.nix b/nixpkgs/pkgs/tools/security/dnspeep/default.nix
new file mode 100644
index 000000000000..978ec5ed2f8b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dnspeep/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchFromGitHub, libpcap }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dnspeep";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "jvns";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QpUbHiMDQFRCTVyjrO9lfQQ62Z3qanv0j+8eEXjE3n4=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "pcap-0.8.1" = "sha256-baoHK3Q+5Qp9ccGqDGd5K5q87c5JufpNJHRdBin0zto=";
+    };
+  };
+
+  LIBPCAP_LIBDIR = lib.makeLibraryPath [ libpcap ];
+  LIBPCAP_VER = libpcap.version;
+
+  meta = with lib; {
+    description = "Spy on the DNS queries your computer is making";
+    homepage = "https://github.com/jvns/dnspeep";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dnsrecon/default.nix b/nixpkgs/pkgs/tools/security/dnsrecon/default.nix
new file mode 100644
index 000000000000..65fae4928c6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dnsrecon/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "dnsrecon";
+  version = "1.1.5";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "darkoperator";
+    repo = pname;
+    rev = version;
+    hash = "sha256-W7ZFc+kF00ANoYVTlsY+lJ9FjMEGbqYfNojoZFiRHU8=";
+  };
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace "flake8" "" \
+      --replace "pytest" ""
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dnspython
+    netaddr
+    lxml
+    setuptools
+  ];
+
+  preFixup = ''
+    # Install wordlists, etc.
+    install -vD namelist.txt subdomains-*.txt snoop.txt -t $out/share/wordlists
+  '';
+
+  # Tests require access to /etc/resolv.conf
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "dnsrecon"
+  ];
+
+  meta = with lib; {
+    description = "DNS Enumeration script";
+    homepage = "https://github.com/darkoperator/dnsrecon";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ c0bw3b fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dnsx/default.nix b/nixpkgs/pkgs/tools/security/dnsx/default.nix
new file mode 100644
index 000000000000..648f7883788e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dnsx/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dnsx";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "dnsx";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-dyqZXc5k76BwF2Kh2vm9d+dpvgpXK/8VQeGjx1UzA6k=";
+  };
+
+  vendorHash = "sha256-S1mJMVfQSy49Lm4q3v05kjbXBlBgBt/AAzLOoQkk75A=";
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Fast and multi-purpose DNS toolkit";
+    longDescription = ''
+      dnsx is a fast and multi-purpose DNS toolkit allow to run multiple
+      probers using retryabledns library, that allows you to perform
+      multiple DNS queries of your choice with a list of user supplied
+      resolvers.
+    '';
+    homepage = "https://github.com/projectdiscovery/dnsx";
+    changelog = "https://github.com/projectdiscovery/dnsx/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/doas-sudo-shim/default.nix b/nixpkgs/pkgs/tools/security/doas-sudo-shim/default.nix
new file mode 100644
index 000000000000..80b913d4cc9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/doas-sudo-shim/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, runCommand
+, asciidoctor
+, coreutils
+, gawk
+, glibc
+, util-linux
+, bash
+, makeBinaryWrapper
+, doas-sudo-shim
+}:
+
+stdenv.mkDerivation rec {
+  pname = "doas-sudo-shim";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "jirutka";
+    repo = "doas-sudo-shim";
+    rev = "v${version}";
+    sha256 = "QYVqGxeWC7Tiz8aNY/LukwG4EW0km/RunGEfkzY/A38=";
+  };
+
+  nativeBuildInputs = [ asciidoctor makeBinaryWrapper ];
+  buildInputs = [ bash coreutils gawk glibc util-linux ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installFlags = [ "DESTDIR=$(out)" "PREFIX=\"\"" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/sudo \
+      --prefix PATH : ${lib.makeBinPath [ bash coreutils gawk glibc util-linux ]}
+  '';
+
+  passthru.tests = {
+    helpTest = runCommand "${pname}-helpTest" {} ''
+      ${doas-sudo-shim}/bin/sudo -h > $out
+      grep -q "Execute a command as another user using doas(1)" $out
+    '';
+  };
+
+  meta = with lib; {
+    description = "A shim for the sudo command that utilizes doas";
+    homepage = "https://github.com/jirutka/doas-sudo-shim";
+    license = licenses.isc;
+    mainProgram = "sudo";
+    maintainers = with maintainers; [ dsuetin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/doas/0001-add-NixOS-specific-dirs-to-safe-PATH.patch b/nixpkgs/pkgs/tools/security/doas/0001-add-NixOS-specific-dirs-to-safe-PATH.patch
new file mode 100644
index 000000000000..a22781269d8b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/doas/0001-add-NixOS-specific-dirs-to-safe-PATH.patch
@@ -0,0 +1,24 @@
+From 9218347b8f833ab05d016dfba5617dcdeb59eb7b Mon Sep 17 00:00:00 2001
+From: Cole Helbling <cole.e.helbling@outlook.com>
+Date: Wed, 27 May 2020 08:02:57 -0700
+Subject: [PATCH] add NixOS-specific dirs to safe PATH
+
+---
+ doas.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/doas.c b/doas.c
+index e253905..2fdb20f 100644
+--- a/doas.c
++++ b/doas.c
+@@ -234,6 +234,7 @@ int
+ main(int argc, char **argv)
+ {
+ 	const char *safepath = "/bin:/sbin:/usr/bin:/usr/sbin:"
++	    "/run/wrappers/bin:/run/current-system/sw/bin:/run/current-system/sw/sbin:"
+ 	    "/usr/local/bin:/usr/local/sbin";
+ 	const char *confpath = NULL;
+ 	char *shargv[] = { NULL, NULL };
+-- 
+2.26.2
+
diff --git a/nixpkgs/pkgs/tools/security/doas/default.nix b/nixpkgs/pkgs/tools/security/doas/default.nix
new file mode 100644
index 000000000000..03268bc98479
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/doas/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bison
+, pam
+, libxcrypt
+
+, withPAM ? true
+, withTimestamp ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "doas";
+  version = "6.8.2";
+
+  src = fetchFromGitHub {
+    owner = "Duncaen";
+    repo = "OpenDoas";
+    rev = "v${version}";
+    sha256 = "9uOQ2Ta5HzEpbCz2vbqZEEksPuIjL8lvmfmynfqxMeM=";
+  };
+
+  # otherwise confuses ./configure
+  dontDisableStatic = true;
+
+  configureFlags = [
+    (lib.optionalString withTimestamp "--with-timestamp") # to allow the "persist" setting
+    (lib.optionalString (!withPAM) "--without-pam")
+  ];
+
+  patches = [
+    # Allow doas to discover binaries in /run/current-system/sw/{s,}bin and
+    # /run/wrappers/bin
+    ./0001-add-NixOS-specific-dirs-to-safe-PATH.patch
+  ];
+
+  # ./configure script does not understand `--disable-shared`
+  dontAddStaticConfigureFlags = true;
+
+  postPatch = ''
+    sed -i '/\(chown\|chmod\)/d' GNUmakefile
+  '' + lib.optionalString (withPAM && stdenv.hostPlatform.isStatic) ''
+    sed -i 's/-lpam/-lpam -laudit/' configure
+  '';
+
+  nativeBuildInputs = [ bison ];
+  buildInputs = [ ]
+    ++ lib.optional withPAM pam
+    ++ lib.optional (!withPAM) libxcrypt;
+
+  meta = with lib; {
+    description = "Executes the given command as another user";
+    homepage = "https://github.com/Duncaen/OpenDoas";
+    license = licenses.isc;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cole-h ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/donkey/default.nix b/nixpkgs/pkgs/tools/security/donkey/default.nix
new file mode 100644
index 000000000000..ec95715853ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/donkey/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, fetchFromGitLab
+, libmd
+, coreutils
+, lib
+, testers
+, donkey
+}:
+
+stdenv.mkDerivation rec {
+  pname = "donkey";
+  version = "1.2.0";
+
+  src = fetchFromGitLab {
+    owner = "donkey";
+    repo = "donkey";
+    rev = "tags/release/${version}";
+    hash = "sha256-2xgb9l0Eko39HJVROAWEIP3qLg5t/5h/rm2MoXoKnJI=";
+  };
+  sourceRoot = "${src.name}/src";
+
+  buildInputs = [ libmd ];
+
+  preInstall = ''
+    # don't change the owner, use global permissions:
+    export INSTALL_PROGRAM="${coreutils}/bin/install -m 555"
+    export INSTALL_DATA="${coreutils}/bin/install -m 444"
+  '';
+
+  passthru.tests.version = testers.testVersion { package = donkey; };
+
+  meta = with lib; {
+    description = "An alternative for S/KEY's 'key' command";
+    longDescription = ''
+Donkey is an alternative for S/KEY's "key" command.  The new feature that
+the original key doesn't have is print an entry for skeykeys as
+follows;
+
+    kazu 0099 al02004          115d83956f1089b6  Apr 26,1995 22:13:27
+
+This means that donkey is also an alternative for "keyinit".  Since the
+entry is printed to stdout (not to /etc/skeykeys), you can easily send
+it to a remote operator by e-mail (with a PGP signature or something).
+So, it is possible to initiate S/KEY without logging in from the console of
+the host.
+
+The name "Donkey" is an acronym of "Don't Key".
+    '';
+    homepage = "https://devel.ringlet.net/security/donkey";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ raboof ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dontgo403/default.nix b/nixpkgs/pkgs/tools/security/dontgo403/default.nix
new file mode 100644
index 000000000000..79002c1cfc89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dontgo403/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dontgo403";
+  version = "0.9.4";
+
+  src = fetchFromGitHub {
+    owner = "devploit";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-PKI/DqMihhMaIa9OzDKtLIs34TRUtewAbBkx89IXLU4=";
+  };
+
+  vendorHash = "sha256-IGnTbuaQH8A6aKyahHMd2RyFRh4WxZ3Vx/A9V3uelRg=";
+
+  meta = with lib; {
+    description = "Tool to bypass 40X response codes";
+    homepage = "https://github.com/devploit/dontgo403";
+    changelog = "https://github.com/devploit/dontgo403/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/doona/default.nix b/nixpkgs/pkgs/tools/security/doona/default.nix
new file mode 100644
index 000000000000..e0f459ad7453
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/doona/default.nix
@@ -0,0 +1,36 @@
+{ fetchFromGitHub
+, lib, stdenv
+, perl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "doona";
+  version = "unstable-2019-03-08";
+
+  src = fetchFromGitHub {
+    owner = "wireghoul";
+    repo = pname;
+    rev = "master";
+    sha256 = "0x9irwrw5x2ia6ch6gshadrlqrgdi1ivkadmr7j4m75k04a7nvz1";
+  };
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r ${src}/bedmod $out/bin/bedmod
+    cp ${src}/doona.pl $out/bin/doona
+    chmod +x $out/bin/doona
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/wireghoul/doona";
+    description = "A fork of the Bruteforce Exploit Detector Tool (BED)";
+    longDescription = ''
+      A fork of the Bruteforce Exploit Detector Tool (BED).
+      BED is a program which is designed to check daemons for potential buffer overflows, format string bugs etc.
+    '';
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pamplemousse ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/doppler/default.nix b/nixpkgs/pkgs/tools/security/doppler/default.nix
new file mode 100644
index 000000000000..c90cf8c2725e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/doppler/default.nix
@@ -0,0 +1,48 @@
+{ buildGoModule
+, doppler
+, fetchFromGitHub
+, installShellFiles
+, lib
+, testers
+}:
+
+buildGoModule rec {
+  pname = "doppler";
+  version = "3.67.0";
+
+  src = fetchFromGitHub {
+    owner = "dopplerhq";
+    repo = "cli";
+    rev = version;
+    sha256 = "sha256-aBdpcmKv8EwUu8MKsC/aoSkiXf+JuTmhpGrPauWpThc=";
+  };
+
+  vendorHash = "sha256-NUHWKPszQH/pvnA+j65+bJ6t+C0FDRRbTviqkYztpE4=";
+
+  ldflags = [
+    "-s -w"
+    "-X github.com/DopplerHQ/cli/pkg/version.ProgramVersion=v${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/doppler
+    installShellCompletion --cmd doppler \
+      --bash <($out/bin/doppler completion bash) \
+      --fish <($out/bin/doppler completion fish) \
+      --zsh <($out/bin/doppler completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = doppler;
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "The official CLI for interacting with your Doppler Enclave secrets and configuration";
+    homepage = "https://doppler.com";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dorkscout/default.nix b/nixpkgs/pkgs/tools/security/dorkscout/default.nix
new file mode 100644
index 000000000000..e5b5057c6089
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dorkscout/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dorkscout";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "R4yGM";
+    repo = pname;
+    rev = version;
+    hash = "sha256-v0OgEfl6L92ux+2GbSPHEgkmA/ZobQHB66O2LlEhVUA=";
+  };
+
+  vendorHash = "sha256-8Nrg90p/5hQBpuyh2NBE4KKxT4BM9jhWIZ6hXBpMdhc=";
+
+  meta = with lib; {
+    description = "Tool to automate the work with Google dorks";
+    homepage = "https://github.com/R4yGM/dorkscout";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dumpasn1/configpath.patch b/nixpkgs/pkgs/tools/security/dumpasn1/configpath.patch
new file mode 100644
index 000000000000..4578faafc350
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dumpasn1/configpath.patch
@@ -0,0 +1,28 @@
+From ab8bd63b32b963ddc7346a2dabfd39fba8bfba72 Mon Sep 17 00:00:00 2001
+From: Paul Meyer <49727155+katexochen@users.noreply.github.com>
+Date: Sun, 13 Aug 2023 14:13:21 +0200
+Subject: [PATCH] make config path injectable during build
+
+This way a config path can be added to the list during build by
+defining the makro.
+
+Signed-off-by: Paul Meyer <49727155+katexochen@users.noreply.github.com>
+---
+ dumpasn1.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/dumpasn1.c b/dumpasn1.c
+index e7bf268..94f1582 100644
+--- a/dumpasn1.c
++++ b/dumpasn1.c
+@@ -451,6 +451,10 @@ static const char *configPaths[] = {
+ 	/* General environment-based paths */
+ 	"$DUMPASN1_PATH/",
+ 
++  #ifdef DUMPASN1_CONFIG_PATH
++	DUMPASN1_CONFIG_PATH,
++  #endif /* DUMPASN1_CONFIG_PATH */
++
+ 	NULL
+ 	};
+ #endif /* OS-specific search paths */
diff --git a/nixpkgs/pkgs/tools/security/dumpasn1/default.nix b/nixpkgs/pkgs/tools/security/dumpasn1/default.nix
new file mode 100644
index 000000000000..030d73a447be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dumpasn1/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+stdenv.mkDerivation (finalAttrs: {
+  pname = "dumpasn1";
+  version = "20230207.0.0";
+
+  src = fetchFromGitHub {
+    owner = "katexochen";
+    repo = "dumpasn1";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-r40czSLdjCYbt73zK7exCoP/kMq6+pyJfz9LKJLLaXM=";
+  };
+
+  CFLAGS = ''-DDUMPASN1_CONFIG_PATH='"$(out)/etc/"' '';
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  patches = [
+    # Allow adding a config file path during build via makro.
+    # Used to add the store path of the included config file through CFLAGS.
+    # This won't be merged upstream.
+    ./configpath.patch
+  ];
+
+  meta = with lib; {
+    description = "Display and debug ASN.1 data";
+    homepage = "https://github.com/katexochen/dumpasn1";
+    license = licenses.bsd2;
+    mainProgram = "dumpasn1";
+    maintainers = with maintainers; [ katexochen ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/duo-unix/default.nix b/nixpkgs/pkgs/tools/security/duo-unix/default.nix
new file mode 100644
index 000000000000..f0ddb1c0c2aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/duo-unix/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, pam, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "duo-unix";
+  version = "2.0.2";
+
+  src = fetchurl {
+    url    = "https://dl.duosecurity.com/duo_unix-${version}.tar.gz";
+    sha256 = "sha256-7huWd71SdnTe1ef8OoHgQKjYQKVpE8k/oNT7bA+OJR0=";
+  };
+
+  buildInputs = [ pam openssl zlib ];
+  configureFlags =
+    [ "--with-pam=$(out)/lib/security"
+      "--prefix=$(out)"
+      "--sysconfdir=$(out)/etc/duo"
+      "--with-openssl=${openssl.dev}"
+      "--enable-lib64=no"
+    ];
+
+  meta = {
+    description = "Duo Security Unix login integration";
+    homepage    = "https://duosecurity.com";
+    license     = lib.licenses.gpl2;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/earlybird/default.nix b/nixpkgs/pkgs/tools/security/earlybird/default.nix
new file mode 100644
index 000000000000..c7cb35fe335c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/earlybird/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "earlybird";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = "americanexpress";
+    repo = "earlybird";
+    rev = "v${version}";
+    hash = "sha256-guSm/ha4ICaOcoynvAwFeojE6ikaCykMcdfskD/ehTw=";
+  };
+
+  vendorHash = "sha256-39jXqCXAwg/C+9gEXiS1X58OD61nMNQifnhgVGEF6ck=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A sensitive data detection tool capable of scanning source code repositories for passwords, key files, and more";
+    homepage = "https://github.com/americanexpress/earlybird";
+    changelog = "https://github.com/americanexpress/earlybird/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ec2stepshell/default.nix b/nixpkgs/pkgs/tools/security/ec2stepshell/default.nix
new file mode 100644
index 000000000000..ff6ee22b08eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ec2stepshell/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ec2stepshell";
+  version = "unstable-2023-04-07";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "saw-your-packet";
+    repo = "EC2StepShell";
+    rev = "ab1298fa7f2650de711e86e870a693dcce0e1935";
+    hash = "sha256-zy33CgGwa2pBYouqaJ1LM6uRIh3Q1uxi2zNXpDNPsuQ=";
+  };
+
+  postPatch = ''
+    # https://github.com/saw-your-packet/EC2StepShell/pull/1
+    substituteInPlace pyproject.toml \
+      --replace "realpython" "ec2stepshell"
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    boto3
+    colorama
+    pyfiglet
+    termcolor
+  ];
+
+  pythonImportsCheck = [
+    "ec2stepshell"
+  ];
+
+  meta = with lib; {
+    description = "AWS post-exploitation tool";
+    homepage = "https://github.com/saw-your-packet/EC2StepShell";
+    changelog = "https://github.com/saw-your-packet/EC2StepShell/blob/${version}/CHANGELOG.txt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ecdsatool/default.nix b/nixpkgs/pkgs/tools/security/ecdsatool/default.nix
new file mode 100644
index 000000000000..0498b758c1d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ecdsatool/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, pkgs }:
+
+stdenv.mkDerivation {
+  version = "0.0.1";
+  pname = "ecdsatool";
+
+  src = pkgs.fetchFromGitHub {
+    owner = "kaniini";
+    repo = "ecdsatool";
+    rev = "7c0b2c51e2e64d1986ab1dc2c57c2d895cc00ed1";
+    sha256 = "08z9309znkhrjpwqd4ygvm7cd1ha1qbrnlzw64fr8704jrmx762k";
+  };
+
+  configurePhase = ''
+    ./autogen.sh
+    ./configure --prefix=$out
+  '';
+
+  nativeBuildInputs = with pkgs; [openssl autoconf automake];
+  buildInputs = with pkgs; [libuecc];
+
+  meta = with lib; {
+    description = "Create and manipulate ECC NISTP256 keypairs";
+    homepage = "https://github.com/kaniini/ecdsatool/";
+    license = with licenses; [free];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ecdsautils/default.nix b/nixpkgs/pkgs/tools/security/ecdsautils/default.nix
new file mode 100644
index 000000000000..0a43260eb831
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ecdsautils/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, pkgs }:
+
+let
+  pname = "ecdsautils";
+  version = "0.4.1";
+in
+stdenv.mkDerivation {
+  inherit pname version;
+
+  src = pkgs.fetchFromGitHub {
+    owner = "freifunk-gluon";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-dv0guQTmot5UO1GkMgzvD6uJFyum5kV89LI3xWS1DZA=";
+  };
+
+  nativeBuildInputs = with pkgs; [ cmake pkg-config doxygen ];
+  buildInputs = with pkgs; [ libuecc  ];
+
+  meta = with lib; {
+    description = "Tiny collection of programs used for ECDSA (keygen, sign, verify)";
+    homepage = "https://github.com/freifunk-gluon/ecdsautils/";
+    license = with licenses; [ mit bsd2 ];
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/echidna/default.nix b/nixpkgs/pkgs/tools/security/echidna/default.nix
new file mode 100644
index 000000000000..7f503acd6f0b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/echidna/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, fetchpatch
+, haskellPackages
+, haskell
+, slither-analyzer
+}:
+
+mkDerivation rec {
+  pname = "echidna";
+  version = "2.2.2";
+
+  src = fetchFromGitHub {
+    owner = "crytic";
+    repo = "echidna";
+    rev = "v${version}";
+    sha256 = "sha256-l1ILdO+xb0zx/TFM6Am9j5hq1RnIMNf2HU6YvslAj0w=";
+  };
+
+  isLibrary = true;
+  isExecutable = true;
+
+  libraryToolDepends = with haskellPackages; [
+    haskellPackages.hpack
+  ];
+
+  executableHaskellDepends = with haskellPackages; [ aeson base base16-bytestring binary bytestring code-page
+  containers data-bword data-dword deepseq directory exceptions extra filepath hashable hevm html-conduit html-entities
+  http-conduit ListLike MonadRandom mtl optics optics-core optparse-applicative process random rosezipper semver split
+  strip-ansi-escape text time transformers unliftio utf8-string vector wai-extra warp with-utf8 word-wrap xml-conduit
+  yaml ];
+
+  # Note: there is also a runtime dependency of slither-analyzer, let's include it also.
+  executableSystemDepends = [ slither-analyzer ];
+
+  testHaskellDepends = with haskellPackages; [ tasty tasty-hunit tasty-quickcheck ];
+
+  preConfigure = ''
+    hpack
+    # re-enable dynamic build for Linux
+    sed -i -e 's/os(linux)/false/' echidna.cabal
+  '';
+  shellHook = "hpack";
+  doHaddock = false;
+  # tests depend on a specific version of solc
+  doCheck = false;
+
+  description = "Ethereum smart contract fuzzer";
+  homepage = "https://github.com/crytic/echidna";
+  license = lib.licenses.agpl3Plus;
+  maintainers = with lib.maintainers; [ arturcygan hellwolf ];
+  platforms = lib.platforms.unix;
+  mainProgram = "echidna-test";
+}
diff --git a/nixpkgs/pkgs/tools/security/ecryptfs/default.nix b/nixpkgs/pkgs/tools/security/ecryptfs/default.nix
new file mode 100644
index 000000000000..777aaea41ec2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ecryptfs/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchurl, pkg-config, perl, util-linux, keyutils, nss, nspr, python2, pam, enablePython ? false
+, intltool, makeWrapper, coreutils, bash, gettext, cryptsetup, lvm2, rsync, which, lsof }:
+
+stdenv.mkDerivation rec {
+  pname = "ecryptfs";
+  version = "111";
+
+  src = fetchurl {
+    url = "https://launchpad.net/ecryptfs/trunk/${version}/+download/ecryptfs-utils_${version}.orig.tar.gz";
+    sha256 = "0zwq19siiwf09h7lwa7n7mgmrr8cxifp45lmwgcfr8c1gviv6b0i";
+  };
+
+  # TODO: replace wrapperDir below with from <nixos> config.security.wrapperDir;
+  wrapperDir = "/run/wrappers/bin";
+
+  postPatch = ''
+    FILES="$(grep -r '/bin/sh' src/utils -l; find src -name \*.c)"
+    for file in $FILES; do
+      substituteInPlace "$file" \
+        --replace /bin/mount ${util-linux}/bin/mount \
+        --replace /bin/umount ${util-linux}/bin/umount \
+        --replace /sbin/mount.ecryptfs_private ${wrapperDir}/mount.ecryptfs_private \
+        --replace /sbin/umount.ecryptfs_private ${wrapperDir}/umount.ecryptfs_private \
+        --replace /sbin/mount.ecryptfs $out/sbin/mount.ecryptfs \
+        --replace /sbin/umount.ecryptfs $out/sbin/umount.ecryptfs \
+        --replace /usr/bin/ecryptfs-rewrite-file $out/bin/ecryptfs-rewrite-file \
+        --replace /usr/bin/ecryptfs-mount-private $out/bin/ecryptfs-mount-private \
+        --replace /usr/bin/ecryptfs-setup-private $out/bin/ecryptfs-setup-private \
+        --replace /sbin/cryptsetup ${cryptsetup}/sbin/cryptsetup \
+        --replace /sbin/dmsetup ${lvm2}/sbin/dmsetup \
+        --replace /sbin/unix_chkpwd ${wrapperDir}/unix_chkpwd \
+        --replace /bin/bash ${bash}/bin/bash
+    done
+  '';
+
+  configureFlags = lib.optionals (!enablePython) [ "--disable-pywrap" ];
+
+  nativeBuildInputs = [ pkg-config makeWrapper intltool ]
+  # if python2 support is requested, it is needed at builtime as well as runtime.
+  ++ lib.optionals (enablePython) [ python2 ]
+  ;
+  buildInputs = [ perl nss nspr pam ]
+  ++ lib.optionals (enablePython) [ python2 ]
+  ;
+  propagatedBuildInputs = [ coreutils gettext cryptsetup lvm2 rsync keyutils which ];
+
+  postInstall = ''
+    FILES="$(grep -r '/bin/sh' $out/bin -l)"
+    for file in $FILES; do
+      wrapProgram $file \
+        --prefix PATH ":" "${coreutils}/bin" \
+        --prefix PATH ":" "${gettext}/bin" \
+        --prefix PATH ":" "${rsync}/bin" \
+        --prefix PATH ":" "${keyutils}/bin" \
+        --prefix PATH ":" "${which}/bin" \
+        --prefix PATH ":" "${lsof}/bin" \
+        --prefix PATH ":" "$out/bin"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Enterprise-class stacked cryptographic filesystem";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ obadz ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ecryptfs/helper.nix b/nixpkgs/pkgs/tools/security/ecryptfs/helper.nix
new file mode 100644
index 000000000000..e0252dac820a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ecryptfs/helper.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv
+, fetchurl
+, makeWrapper
+, python2
+}:
+
+stdenv.mkDerivation {
+  pname   = "ecryptfs-helper";
+  version = "20160722";
+
+  src = fetchurl {
+    url    = "https://gist.githubusercontent.com/obadz/ec053fdb00dcb48441d8313169874e30/raw/4b657a4b7c3dc684e4d5e3ffaf46ced1b7675163/ecryptfs-helper.py";
+    sha256 = "0gp4m22zc80814ng80s38hp930aa8r4zqihr7jr23m0m2iq4pdpg";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # Do not hardcode PATH to ${ecryptfs} as we need the script to invoke executables from /run/wrappers/bin
+  installPhase = ''
+    mkdir -p $out/bin $out/libexec
+    cp $src $out/libexec/ecryptfs-helper.py
+    makeWrapper "${python2.interpreter}" "$out/bin/ecryptfs-helper" --add-flags "$out/libexec/ecryptfs-helper.py"
+  '';
+
+  meta = with lib; {
+    description    = "Helper script to create/mount/unemount encrypted directories using eCryptfs without needing root permissions";
+    license        = licenses.gpl2Plus;
+    maintainers    = with maintainers; [ obadz ];
+    platforms      = platforms.linux;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/efitools/default.nix b/nixpkgs/pkgs/tools/security/efitools/default.nix
new file mode 100644
index 000000000000..70032504f475
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/efitools/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, gnu-efi, openssl, sbsigntool, perl, perlPackages,
+help2man, fetchzip }:
+stdenv.mkDerivation rec {
+  pname = "efitools";
+  version = "1.9.2";
+
+  buildInputs = [
+    gnu-efi
+    openssl
+    sbsigntool
+  ];
+
+  nativeBuildInputs = [
+    perl
+    perlPackages.FileSlurp
+    help2man
+  ];
+
+  src = fetchzip {
+    url = "https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/snapshot/efitools-v${version}.tar.gz";
+    sha256 = "0jabgl2pxvfl780yvghq131ylpf82k7banjz0ksjhlm66ik8gb1i";
+  };
+
+  postPatch = ''
+    sed -i -e 's#/usr/include/efi#${gnu-efi}/include/efi/#g' Make.rules
+    sed -i -e 's#/usr/lib64/gnuefi#${gnu-efi}/lib/#g' Make.rules
+    sed -i -e 's#$(DESTDIR)/usr#$(out)#g' Make.rules
+    substituteInPlace lib/console.c --replace "EFI_WARN_UNKOWN_GLYPH" "EFI_WARN_UNKNOWN_GLYPH"
+    patchShebangs .
+  '';
+
+  meta = with lib; {
+    description = "Tools for manipulating UEFI secure boot platforms";
+    homepage = "https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.grahamc ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/eid-mw/default.nix b/nixpkgs/pkgs/tools/security/eid-mw/default.nix
new file mode 100644
index 000000000000..b7cae61ad2c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/eid-mw/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf-archive
+, autoreconfHook
+, makeWrapper
+, pkg-config
+, substituteAll
+, curl
+, gtk3
+, libassuan
+, libbsd
+, libproxy
+, libxml2
+, nssTools
+, openssl
+, p11-kit
+, pcsclite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "eid-mw";
+  # NOTE: Don't just blindly update to the latest version/tag. Releases are always for a specific OS.
+  version = "5.1.15";
+
+  src = fetchFromGitHub {
+    owner = "Fedict";
+    repo = "eid-mw";
+    rev = "v${version}";
+    hash = "sha256-balyAdQO8aZ9wGYerPUDxgBWGG7Ya2eIyo6UX62M4SI=";
+  };
+
+  postPatch = ''
+    sed 's@m4_esyscmd_s(.*,@[${version}],@' -i configure.ac
+    substituteInPlace configure.ac --replace 'p11kitcfdir=""' 'p11kitcfdir="'$out/share/p11-kit/modules'"'
+  '';
+
+
+  nativeBuildInputs = [ autoreconfHook autoconf-archive pkg-config makeWrapper ];
+  buildInputs = [ curl gtk3 libassuan libbsd libproxy libxml2 openssl p11-kit pcsclite ];
+
+  preConfigure = ''
+    mkdir openssl
+    ln -s ${lib.getLib openssl}/lib openssl
+    ln -s ${openssl.bin}/bin openssl
+    ln -s ${openssl.dev}/include openssl
+    export SSL_PREFIX=$(realpath openssl)
+    substituteInPlace plugins_tools/eid-viewer/Makefile.in \
+      --replace "c_rehash" "openssl rehash"
+  '';
+  # pinentry uses hardcoded `/usr/bin/pinentry`, so use the built-in (uglier) dialogs for pinentry.
+  configureFlags = [ "--disable-pinentry" ];
+
+  postInstall =
+    let
+      eid-nssdb-in = substituteAll {
+        inherit (stdenv) shell;
+        isExecutable = true;
+        src = ./eid-nssdb.in;
+      };
+    in
+    ''
+      install -D ${eid-nssdb-in} $out/bin/eid-nssdb
+      substituteInPlace $out/bin/eid-nssdb \
+        --replace "modutil" "${nssTools}/bin/modutil"
+
+      rm $out/bin/about-eid-mw
+      wrapProgram $out/bin/eid-viewer --prefix XDG_DATA_DIRS : "$out/share/gsettings-schemas/$name"
+    '';
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Belgian electronic identity card (eID) middleware";
+    homepage = "https://eid.belgium.be/en";
+    license = licenses.lgpl3Only;
+    longDescription = ''
+      Allows user authentication and digital signatures with Belgian ID cards.
+      Also requires a running pcscd service and compatible card reader.
+
+      eid-viewer is also installed.
+
+      This package only installs the libraries. To use eIDs in Firefox or
+      Chromium, the eID Belgium add-on must be installed.
+      This package only installs the libraries. To use eIDs in NSS-compatible
+      browsers like Chrom{e,ium} or Firefox, each user must first execute:
+        ~$ eid-nssdb add
+      (Running the script once as root with the --system option enables eID
+      support for all users, but will *not* work when using Chrom{e,ium}!)
+      Before uninstalling this package, it is a very good idea to run
+        ~$ eid-nssdb [--system] remove
+      and remove all ~/.pki and/or /etc/pki directories no longer needed.
+
+      The above procedure doesn't seem to work in Firefox. You can override the
+      firefox wrapper to add this derivation to the PKCS#11 modules, like so:
+
+          firefox.override { pkcs11Modules = [ pkgs.eid-mw ]; }
+    '';
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bfortz chvp ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/eid-mw/eid-nssdb.in b/nixpkgs/pkgs/tools/security/eid-mw/eid-nssdb.in
new file mode 100644
index 000000000000..636b4c1ee118
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/eid-mw/eid-nssdb.in
@@ -0,0 +1,83 @@
+#!@shell@
+
+rootdb="/etc/pki/nssdb"
+userdb="$HOME/.pki/nssdb"
+dbentry="Belgium eID"
+libfile="/run/current-system/sw/lib/libbeidpkcs11.so"
+
+dbdir="$userdb"
+
+while true; do
+	case "$1" in
+	--help|"")	cat << EOF
+(Un)register $dbentry with NSS-compatible browsers.
+
+Usage: `basename "$0"` [OPTION] ACTION [LIBRARY]
+
+Options:
+  --db PATH	use custom NSS database directory PATH
+  --user	use user NSS database $userdb (default)
+  --system	use global NSS database $rootdb
+  --help	show this message
+
+Actions:
+  add		add $dbentry to NSS database
+  remove	remove $dbentry from NSS database
+  show		show $dbentry NSS database entry
+
+Default arguments if unspecified:
+  LIBRARY	$libfile
+EOF
+		exit ;;
+	--db)	dbdir="$2"
+		shift 2 ;;
+	--user)	dbdir="$userdb"
+		shift ;;
+	--system)
+		dbdir="$rootdb"
+		shift ;;
+	-*)	echo "$0: unknown option: '$1'" >&2
+		echo "Try --help for usage information."
+		exit 1 ;;
+	*)	break ;;
+	esac
+done
+
+if [ "$2" ]; then
+	libfile="$2"
+	if ! [ -f "$libfile" ]; then
+		echo "$0: error: '$libfile' not found" >&2
+		exit 1
+	fi
+fi
+
+mkdir -p "$dbdir"
+if ! [ -d "$dbdir" ]; then
+	echo "$0: error: '$dbdir' must be a writable directory" >&2
+	exit 1
+fi
+
+dbdir="sql:$dbdir"
+
+echo "NSS database: $dbdir"
+echo "BEID library: $libfile"
+
+case "$1" in
+add)	echo "Adding $dbentry to database:"
+	modutil -dbdir "$dbdir" -add "$dbentry" -libfile "$libfile" ||
+		echo "Tip: try removing the module before adding it again." ;;
+remove) echo "Removing $dbentry from database:"
+	modutil -dbdir "$dbdir" -delete "$dbentry" ;;
+show)	echo "Displaying $dbentry database entry, if any:"
+	echo "Note: this may fail if you don't have the correct permissions." ;;
+'')	exec "$0" --help ;;
+*)	echo "$0: unknown action: '$1'" >&2
+	echo "Try --help for usage information."
+	exit 1 ;;
+esac
+
+ret=$?
+
+modutil -dbdir "$dbdir" -list "$dbentry" 2>/dev/null
+
+exit $ret
diff --git a/nixpkgs/pkgs/tools/security/enc/default.nix b/nixpkgs/pkgs/tools/security/enc/default.nix
new file mode 100644
index 000000000000..ffacccf6a311
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enc/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "enc";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "life4";
+    repo = "enc";
+    rev = version;
+    hash = "sha256-G6x17CDAKpmqvl7FTycSQ5bF0JndNP+SlUoBVUk76IQ=";
+  };
+
+  vendorHash = "sha256-lB4DoHB+hGKjIcrAjeCd8a5prTn8XFIWhzNakA7utHI=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = ".";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/life4/enc/version.GitCommit=${version}"
+  ];
+
+  nativeCheckInputs = [ git ];
+
+  postInstall = ''
+    installShellCompletion --cmd enc \
+      --bash <($out/bin/enc completion bash) \
+      --fish <($out/bin/enc completion fish) \
+      --zsh <($out/bin/enc completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/life4/enc";
+    changelog = "https://github.com/life4/enc/releases/tag/v${version}";
+    description = "A modern and friendly alternative to GnuPG";
+    longDescription = ''
+      Enc is a CLI tool for encryption, a modern and friendly alternative to GnuPG.
+      It is easy to use, secure by default and can encrypt and decrypt files using password or encryption keys,
+      manage and download keys, and sign data.
+      Our goal was to make encryption available to all engineers without the need to learn a lot of new words, concepts,
+      and commands. It is the most beginner-friendly CLI tool for encryption, and keeping it that way is our top priority.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ rvnstn ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/enchive/default.nix b/nixpkgs/pkgs/tools/security/enchive/default.nix
new file mode 100644
index 000000000000..960ef251b1cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enchive/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "enchive";
+  version = "3.5";
+  src = fetchFromGitHub {
+    owner = "skeeto";
+    repo = "enchive";
+    rev = version;
+    sha256 = "0fdrfc5l42lj2bvmv9dmkmhmm7qiszwk7cmdvnqad3fs7652g0qa";
+  };
+
+  makeFlags = ["PREFIX=$(out)"];
+
+  postInstall = ''
+    mkdir -p $out/share/emacs/site-lisp/
+    cp -v "$src/enchive-mode.el" "$out/share/emacs/site-lisp/"
+  '';
+
+  meta = {
+    description = "Encrypted personal archives";
+    homepage = "https://github.com/skeeto/enchive";
+    license = lib.licenses.unlicense;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.nico202 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/enpass/data.json b/nixpkgs/pkgs/tools/security/enpass/data.json
new file mode 100644
index 000000000000..bcb086410723
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enpass/data.json
@@ -0,0 +1,12 @@
+{
+  "amd64": {
+    "path": "pool/main/e/enpass/enpass_6.9.2.1563_amd64.deb",
+    "sha256": "013a6ecab29ad6b1a91203fea3cd771d039d777ea24c03d0a74ec5aa86b720ff",
+    "version": "6.9.2.1563"
+  },
+  "i386": {
+    "path": "pool/main/e/enpass/enpass_5.6.9_i386.deb",
+    "sha256": "3f699ac3e2ecfd4afee1505d8d364d4f6b6b94c55ba989d0a80bd678ff66cb2c",
+    "version": "5.6.9"
+  }
+}
diff --git a/nixpkgs/pkgs/tools/security/enpass/default.nix b/nixpkgs/pkgs/tools/security/enpass/default.nix
new file mode 100644
index 000000000000..d95ba0baa9be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enpass/default.nix
@@ -0,0 +1,105 @@
+{ stdenv, fetchurl, dpkg, xorg
+, glib, libGLU, libGL, libpulseaudio, zlib, dbus, fontconfig, freetype
+, gtk3, pango
+, makeWrapper , python3Packages, lib, libcap
+, lsof, curl, libuuid, cups, mesa, xz, libxkbcommon
+}:
+
+let
+  all_data = lib.importJSON ./data.json;
+  system_map = {
+    # i686-linux = "i386"; Uncomment if enpass 6 becomes available on i386
+    x86_64-linux = "amd64";
+  };
+
+  data = all_data.${system_map.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}")};
+
+  baseUrl = "https://apt.enpass.io";
+
+  # used of both wrappers and libpath
+  libPath = lib.makeLibraryPath (with xorg; [
+    mesa.drivers
+    libGLU libGL
+    fontconfig
+    freetype
+    libpulseaudio
+    zlib
+    dbus
+    libX11
+    libXi
+    libSM
+    libICE
+    libXrender
+    libXScrnSaver
+    libxcb
+    libcap
+    glib
+    gtk3
+    pango
+    curl
+    libuuid
+    cups
+    xcbutilwm         # libxcb-icccm.so.4
+    xcbutilimage      # libxcb-image.so.0
+    xcbutilkeysyms    # libxcb-keysyms.so.1
+    xcbutilrenderutil # libxcb-render-util.so.0
+    xz
+    libxkbcommon
+  ]);
+  package = stdenv.mkDerivation {
+
+    inherit (data) version;
+    pname = "enpass";
+
+    src = fetchurl {
+      inherit (data) sha256;
+      url = "${baseUrl}/${data.path}";
+    };
+
+    meta = with lib; {
+      description = "A well known password manager";
+      homepage = "https://www.enpass.io/";
+      sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+      license = licenses.unfree;
+      platforms = [ "x86_64-linux" "i686-linux"];
+      maintainers = with maintainers; [ ewok dritter ];
+    };
+
+    nativeBuildInputs = [ makeWrapper ];
+    buildInputs = [dpkg];
+
+    unpackPhase = "dpkg -X $src .";
+    installPhase=''
+      mkdir -p $out/bin
+      cp -r opt/enpass/*  $out/bin
+      cp -r usr/* $out
+
+      sed \
+        -i s@/opt/enpass/Enpass@$out/bin/Enpass@ \
+        $out/share/applications/enpass.desktop
+
+      for i in $out/bin/{Enpass,importer_enpass}; do
+        patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) $i
+      done
+
+      # lsof must be in PATH for proper operation
+      wrapProgram $out/bin/Enpass \
+        --set LD_LIBRARY_PATH "${libPath}" \
+        --prefix PATH : ${lsof}/bin \
+        --unset QML2_IMPORT_PATH \
+        --unset QT_PLUGIN_PATH
+    '';
+  };
+  updater = {
+    update = stdenv.mkDerivation {
+      name = "enpass-update-script";
+      SCRIPT =./update_script.py;
+
+      buildInputs = with python3Packages; [python requests pathlib2 six attrs ];
+      shellHook = ''
+        exec python $SCRIPT --target pkgs/tools/security/enpass/data.json --repo ${baseUrl}
+      '';
+
+    };
+  };
+in (package // {refresh = updater;})
diff --git a/nixpkgs/pkgs/tools/security/enpass/update_script.py b/nixpkgs/pkgs/tools/security/enpass/update_script.py
new file mode 100755
index 000000000000..ab0b6ce3f48e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enpass/update_script.py
@@ -0,0 +1,74 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i python3 -p python3 python3.pkgs.packaging python3.pkgs.requests
+import gzip
+import json
+import logging
+import pathlib
+import re
+import subprocess
+import sys
+
+from packaging import version
+import requests
+
+logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
+
+current_path = pathlib.Path(__file__).parent
+DATA_JSON = current_path.joinpath("data.json").resolve()
+logging.debug(f"Path to version file: {DATA_JSON}")
+last_new_version = None
+
+with open(DATA_JSON, "r") as versions_file:
+    versions = json.load(versions_file)
+
+def find_latest_version(arch):
+    CHECK_URL = f'https://apt.enpass.io/dists/stable/main/binary-{arch}/Packages.gz'
+    packages = gzip.decompress(requests.get(CHECK_URL).content).decode()
+
+    # Loop every package to find the newest one!
+    version_selector = re.compile("Version: (?P<version>.+)")
+    path_selector = re.compile("Filename: (?P<path>.+)")
+    hash_selector = re.compile("SHA256: (?P<sha256>.+)")
+    last_version = version.parse("0")
+    for package in packages.split("\n\n"):
+        matches = version_selector.search(package)
+        matched_version = matches.group('version') if matches and matches.group('version') else "0"
+        parsed_version = version.parse(matched_version)
+        if parsed_version > last_version:
+            path = path_selector.search(package).group('path')
+            sha256 = hash_selector.search(package).group('sha256')
+            last_version = parsed_version
+            return {"path": path, "sha256": sha256, "version": matched_version}
+
+for arch in versions.keys():
+    current_version = versions[arch]['version']
+    logging.info(f"Current Version for {arch} is {current_version}")
+    new_version = find_latest_version(arch)
+
+    if not new_version or new_version['version'] == current_version:
+        continue
+
+    last_current_version = current_version
+    last_new_version = new_version
+    logging.info(f"Update found ({arch}): enpass: {current_version} -> {new_version['version']}")
+    versions[arch]['path'] = new_version['path']
+    versions[arch]['sha256'] = new_version['sha256']
+    versions[arch]['version'] = new_version['version']
+
+
+if not last_new_version:
+    logging.info('#### No update found ####')
+    sys.exit(0)
+
+# write new versions back
+with open(DATA_JSON, "w") as versions_file:
+    json.dump(versions, versions_file, indent=2)
+    versions_file.write("\n")
+
+# Commit the result:
+logging.info("Committing changes...")
+commit_message = f"enpass: {last_current_version} -> {last_new_version['version']}"
+subprocess.run(['git', 'add', DATA_JSON], check=True)
+subprocess.run(['git', 'commit', '--file=-'], input=commit_message.encode(), check=True)
+
+logging.info("Done.")
diff --git a/nixpkgs/pkgs/tools/security/enum4linux-ng/default.nix b/nixpkgs/pkgs/tools/security/enum4linux-ng/default.nix
new file mode 100644
index 000000000000..d30bcbf665d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enum4linux-ng/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, impacket
+, ldap3
+, pyyaml
+, samba
+}:
+
+buildPythonApplication rec {
+  pname = "enum4linux-ng";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "cddmp";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-O3TZcCn2kRLrMjQPVg8F5Q2ri968xRbXrdnfytfMkYM=";
+  };
+
+  propagatedBuildInputs = [
+    impacket
+    ldap3
+    pyyaml
+    samba
+  ];
+
+  # It's only a script and not a Python module. Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Windows/Samba enumeration tool";
+    longDescription = ''
+      enum4linux-ng.py is a rewrite of Mark Lowe's enum4linux.pl, a tool for
+      enumerating information from Windows and Samba systems.
+    '';
+    homepage = "https://github.com/cddmp/enum4linux-ng";
+    changelog = "https://github.com/cddmp/enum4linux-ng/releases/tag/v${version}";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/enum4linux/default.nix b/nixpkgs/pkgs/tools/security/enum4linux/default.nix
new file mode 100644
index 000000000000..b6da742dc6fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enum4linux/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, samba
+, perl
+, openldap
+}:
+
+stdenv.mkDerivation rec {
+  pname = "enum4linux";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "CiscoCXSecurity";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/R0P4Ft9Y0LZwKwhDGAe36UKviih6CNbJbj1lcNKEkM=";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    openldap
+    perl
+    samba
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp enum4linux.pl $out/bin/enum4linux
+
+    wrapProgram $out/bin/enum4linux \
+      --prefix PATH : ${lib.makeBinPath [ samba openldap ]}
+  '';
+
+  meta = with lib; {
+    description = "A tool for enumerating information from Windows and Samba systems";
+    homepage = "https://labs.portcullis.co.uk/tools/enum4linux/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ fishi0x01 ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/enumerepo/default.nix b/nixpkgs/pkgs/tools/security/enumerepo/default.nix
new file mode 100644
index 000000000000..31ff035950bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enumerepo/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "enumerepo";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "trickest";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-PWWx6b+fttxKxMtuHAYPTeEsta0E6+IQ1DSKO6c7Jdc=";
+  };
+
+  vendorHash = "sha256-Dt3QS1Rm/20Yitgg4zbBcWQXV8mTlpNbzc/k4DaTuQc=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Tool to list all public repositories for (valid) GitHub usernames";
+    homepage = "https://github.com/trickest/enumerepo";
+    changelog = "https://github.com/trickest/enumerepo/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/erosmb/default.nix b/nixpkgs/pkgs/tools/security/erosmb/default.nix
new file mode 100644
index 000000000000..f03e9a958de2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/erosmb/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "erosmb";
+  version = "0.1.5";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "viktor02";
+    repo = "EroSmb";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-9Zs5Z+3JiBiJkV9Ixl5pPmLv0dUT59CT0UkQDsmneWc=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    chardet
+    colorama
+    cryptography
+    impacket
+    ldap3
+    ldapdomaindump
+    pyasn1
+    setuptools
+    six
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/erosmb --help
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "SMB network scanner";
+    homepage = "https://github.com/viktor02/EroSmb";
+    changelog = "https://github.com/viktor02/EroSmb/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "erosmb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/eschalot/default.nix b/nixpkgs/pkgs/tools/security/eschalot/default.nix
new file mode 100644
index 000000000000..0c984c5d35e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/eschalot/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "eschalot";
+  version = "1.2.0.20191006";
+
+  src = fetchFromGitHub {
+    owner = "ReclaimYourPrivacy";
+    repo = pname;
+    rev = "a45bad5b9a3e4939340ddd8a751ceffa3c0db76a";
+    sha256 = "1wbi0azc2b57nmmx6c1wmvng70d9ph1s83yhnl5lxaaqaj85h22g";
+  };
+
+  buildInputs = [ openssl ];
+
+  installPhase = ''
+    install -D -t $out/bin eschalot worgen
+  '';
+
+  meta = with lib; {
+    description = "Tor hidden service name generator";
+    homepage = src.meta.homepage;
+    license = licenses.isc;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/evil-winrm/Gemfile b/nixpkgs/pkgs/tools/security/evil-winrm/Gemfile
new file mode 100644
index 000000000000..ebdf6f575a05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/evil-winrm/Gemfile
@@ -0,0 +1,7 @@
+source 'https://rubygems.org'
+
+gem 'winrm'
+gem 'winrm-fs'
+gem 'stringio'
+gem 'logger'
+gem 'fileutils'
diff --git a/nixpkgs/pkgs/tools/security/evil-winrm/Gemfile.lock b/nixpkgs/pkgs/tools/security/evil-winrm/Gemfile.lock
new file mode 100644
index 000000000000..8b442f035590
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/evil-winrm/Gemfile.lock
@@ -0,0 +1,51 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    builder (3.2.3)
+    erubis (2.7.0)
+    ffi (1.11.1)
+    fileutils (0.7.2)
+    gssapi (1.3.0)
+      ffi (>= 1.0.1)
+    gyoku (1.3.1)
+      builder (>= 2.1.2)
+    httpclient (2.8.3)
+    little-plugger (1.1.4)
+    logger (1.4.3)
+    logging (2.2.2)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.10)
+    multi_json (1.14.1)
+    nori (2.6.0)
+    rexml (3.2.5)
+    rubyntlm (0.6.2)
+    rubyzip (1.3.0)
+    stringio (0.0.2)
+    winrm (2.3.2)
+      builder (>= 2.1.2)
+      erubis (~> 2.7)
+      gssapi (~> 1.2)
+      gyoku (~> 1.0)
+      httpclient (~> 2.2, >= 2.2.0.2)
+      logging (>= 1.6.1, < 3.0)
+      nori (~> 2.0)
+      rexml (>= 3.2.3.1)
+      rubyntlm (~> 0.6.0, >= 0.6.1)
+    winrm-fs (1.3.2)
+      erubis (~> 2.7)
+      logging (>= 1.6.1, < 3.0)
+      rubyzip (~> 1.1)
+      winrm (~> 2.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fileutils
+  logger
+  stringio
+  winrm
+  winrm-fs
+
+BUNDLED WITH
+   2.2.24
diff --git a/nixpkgs/pkgs/tools/security/evil-winrm/default.nix b/nixpkgs/pkgs/tools/security/evil-winrm/default.nix
new file mode 100644
index 000000000000..30420c7aad68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/evil-winrm/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, bundlerEnv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "evil-winrm";
+  version = "3.5";
+
+  src = fetchFromGitHub {
+    owner = "Hackplayers";
+    repo = "evil-winrm";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-8Lyo7BgypzrHMEcbYlxo/XWwOtBqs2tczYnc3+XEbeA=";
+  };
+
+  env = bundlerEnv {
+    name = pname;
+    gemfile = ./Gemfile;
+    lockfile = ./Gemfile.lock;
+    gemset = ./gemset.nix;
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    env.wrappedRuby
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp evil-winrm.rb $out/bin/evil-winrm
+  '';
+
+  meta = with lib; {
+    description = "WinRM shell for hacking/pentesting";
+    homepage = "https://github.com/Hackplayers/evil-winrm";
+    changelog = "https://github.com/Hackplayers/evil-winrm/blob/v${version}/CHANGELOG.md";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ elohmeier ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/evil-winrm/gemset.nix b/nixpkgs/pkgs/tools/security/evil-winrm/gemset.nix
new file mode 100644
index 000000000000..19e4e1cc862e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/evil-winrm/gemset.nix
@@ -0,0 +1,187 @@
+{
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1";
+      type = "gem";
+    };
+    version = "3.2.3";
+  };
+  erubis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06mvxpjply8qh4j3fj9wh08kdzwkbnvsiysh0vrhlk5cwxzjmblh";
+      type = "gem";
+    };
+    version = "1.11.1";
+  };
+  fileutils = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "173z4dsqp9khcsl7x93dq1qj9d7rd378a7yfg53b1s6mczlkvh2k";
+      type = "gem";
+    };
+    version = "0.7.2";
+  };
+  gssapi = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13l6pqbfrx3vv7cw26nq9p8rnyp9br31gaz85q32wx6hnzfcriwh";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  gyoku = {
+    dependencies = ["builder"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wn0sl14396g5lyvp8sjmcb1hw9rbyi89gxng91r7w4df4jwiidh";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  little-plugger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  logger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ihvvl2im9qii31d42c9kfscdg2flfqajs6ycbpslznclmfc71gc";
+      type = "gem";
+    };
+    version = "1.4.3";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xy54mjf7xg41l8qrg1bqri75agdqmxap9z466fjismc1rn2jwfr";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p6bxsklkbcqni4bcq6jajc2n57g0w5rzn4r49c3lb04wz5xg0dy";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qxc2zxwwipm6kviiar4gfhcakpx1jdcs89v6lvzivn5hq1xk78l";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  stringio = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hj8awh547kf6a7vgs565xh8hicffd0brb2a96jna5lr3a2fvmj8";
+      type = "gem";
+    };
+    version = "0.0.2";
+  };
+  winrm = {
+    dependencies = ["builder" "erubis" "gssapi" "gyoku" "httpclient" "logging" "nori" "rexml" "rubyntlm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19vxrclxc5l8n2agwvv291740s6gna2phg3lkybjb0ldkmpi3sj2";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  winrm-fs = {
+    dependencies = ["erubis" "logging" "rubyzip" "winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fy4yj52kssrm5hchq7l2mbry6w6yvi736p1wjpyv8m19rx7k0c3";
+      type = "gem";
+    };
+    version = "1.3.2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/evtx/default.nix b/nixpkgs/pkgs/tools/security/evtx/default.nix
new file mode 100644
index 000000000000..e12408d22752
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/evtx/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "evtx";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "omerbenamram";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-aa04Ia11+Ae1amc3JAtYdSWf+f/fenTt0Bny/AauaHo=";
+  };
+
+  cargoHash = "sha256-4pQP+cvKfOvRgWRFa4+/dEpBq+gfcOuEENC5aP4Cp7U=";
+
+  postPatch = ''
+    # CLI tests will fail in the sandbox
+    rm tests/test_cli_interactive.rs
+  '';
+
+  meta = with lib; {
+    description = "Parser for the Windows XML Event Log (EVTX) format";
+    homepage = "https://github.com/omerbenamram/evtx";
+    changelog = "https://github.com/omerbenamram/evtx/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/expliot/default.nix b/nixpkgs/pkgs/tools/security/expliot/default.nix
new file mode 100644
index 000000000000..1414d7c36afd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/expliot/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, fetchFromGitLab
+, python3
+}:
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+
+      cmd2 = super.cmd2.overridePythonAttrs (oldAttrs: rec {
+        version = "1.5.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          hash = "sha256-cBqMmXXEq8ReXROQarFJ+Vn4EoaRBjRzI6P4msDoKmI=";
+        };
+        doCheck = false;
+      });
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "expliot";
+  version = "0.9.8";
+
+  src = fetchFromGitLab {
+    owner = "expliot_framework";
+    repo = pname;
+    rev = version;
+    hash = "sha256-7Cuj3YKKwDxP2KKueJR9ZO5Bduv+lw0Y87Rw4b0jbGY=";
+  };
+
+  pythonRelaxDeps = [
+    "pymodbus"
+    "pynetdicom"
+    "cryptography"
+    "python-can"
+    "pyparsing"
+    "zeroconf"
+  ];
+
+  nativeBuildInputs = [
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = [
+    aiocoap
+    awsiotpythonsdk
+    bluepy
+    can
+    cmd2
+    cryptography
+    paho-mqtt
+    pyi2cflash
+    pymodbus
+    pynetdicom
+    pyparsing
+    pyserial
+    pyspiflash
+    upnpy
+    xmltodict
+    zeroconf
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "expliot"
+  ];
+
+  meta = with lib; {
+    description = "IoT security testing and exploitation framework";
+    longDescription = ''
+      EXPLIoT is a Framework for security testing and exploiting IoT
+      products and IoT infrastructure. It provides a set of plugins
+      (test cases) which are used to perform the assessment and can
+      be extended easily with new ones. The name EXPLIoT (pronounced
+      expl-aa-yo-tee) is a pun on the word exploit and explains the
+      purpose of the framework i.e. IoT exploitation.
+    '';
+    homepage = "https://expliot.readthedocs.io/";
+    license = with licenses; [ agpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/exploitdb/default.nix b/nixpkgs/pkgs/tools/security/exploitdb/default.nix
new file mode 100644
index 000000000000..2b416ae08cad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/exploitdb/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "exploitdb";
+  version = "2024-02-17";
+
+  src = fetchFromGitLab {
+    owner = "exploit-database";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-rOhNN/kdwAtSq27P1vpTG/nLSyID/OKrPbDQOxdbgIw=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin $out/share
+    cp --recursive . $out/share/exploitdb
+    makeWrapper $out/share/exploitdb/searchsploit $out/bin/searchsploit
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/exploit-database/exploitdb";
+    description = "Archive of public exploits and corresponding vulnerable software";
+    license = with licenses; [ gpl2Plus gpl3Plus mit ];
+    maintainers = with maintainers; [ applePrincess fab ];
+    mainProgram = "searchsploit";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/extrude/default.nix b/nixpkgs/pkgs/tools/security/extrude/default.nix
new file mode 100644
index 000000000000..7145314fbd41
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/extrude/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "extrude";
+  version = "0.0.12";
+
+  src = fetchFromGitHub {
+    owner = "liamg";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7gCEBhnNU5CqC5n0KP4Dd/fmddPRwNqyMFXTrRrJjfU=";
+  };
+
+  vendorHash = "sha256-8qjIYPkWtYTvl7wAnefpZAjbNSQLQFqRnGGccYZ8ZmU=";
+
+  meta = with lib; {
+    description = "Tool to analyse binaries for missing security features";
+    homepage = "https://github.com/liamg/extrude";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fail2ban/default.nix b/nixpkgs/pkgs/tools/security/fail2ban/default.nix
new file mode 100644
index 000000000000..0ed0af4e0698
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fail2ban/default.nix
@@ -0,0 +1,80 @@
+{ lib, stdenv, fetchFromGitHub
+, python3
+, installShellFiles
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "fail2ban";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "fail2ban";
+    repo = "fail2ban";
+    rev = version;
+    hash = "sha256-Zd8zLkFlvXTbeInEkNFyHgcAiOsX4WwF6hf5juSQvbY=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  pythonPath = with python3.pkgs;
+    lib.optionals stdenv.isLinux [
+      systemd
+      pyinotify
+    ];
+
+  preConfigure = ''
+    patchShebangs fail2ban-2to3
+    ./fail2ban-2to3
+
+    for i in config/action.d/sendmail*.conf; do
+      substituteInPlace $i \
+        --replace /usr/sbin/sendmail sendmail
+    done
+
+    substituteInPlace config/filter.d/dovecot.conf \
+      --replace dovecot.service dovecot2.service
+  '';
+
+  doCheck = false;
+
+  preInstall = ''
+    substituteInPlace setup.py --replace /usr/share/doc/ share/doc/
+
+    # see https://github.com/NixOS/nixpkgs/issues/4968
+    ${python3.pythonOnBuildForHost.interpreter} setup.py install_data --install-dir=$out --root=$out
+  '';
+
+  postInstall =
+    let
+      sitePackages = "$out/${python3.sitePackages}";
+    in
+    ''
+      install -m 644 -D -t "$out/lib/systemd/system" build/fail2ban.service
+      # Replace binary paths
+      sed -i "s#build/bdist.*/wheel/fail2ban.*/scripts/#$out/bin/#g" $out/lib/systemd/system/fail2ban.service
+      # Delete creating the runtime directory, systemd does that
+      sed -i "/ExecStartPre/d" $out/lib/systemd/system/fail2ban.service
+
+      # see https://github.com/NixOS/nixpkgs/issues/4968
+      rm -r "${sitePackages}/etc"
+
+      installManPage man/*.[1-9]
+
+      # This is a symlink to the build python version created by `updatePyExec`, seemingly to assure the same python version is used?
+      rm $out/bin/fail2ban-python
+      ln -s ${python3.interpreter} $out/bin/fail2ban-python
+
+    '' + lib.optionalString stdenv.isLinux ''
+      # see https://github.com/NixOS/nixpkgs/issues/4968
+      rm -r "${sitePackages}/usr"
+    '';
+
+  meta = with lib; {
+    homepage = "https://www.fail2ban.org/";
+    description = "A program that scans log files for repeated failing login attempts and bans IP addresses";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ eelco lovek323 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/faraday-agent-dispatcher/default.nix b/nixpkgs/pkgs/tools/security/faraday-agent-dispatcher/default.nix
new file mode 100644
index 000000000000..510cdd99167c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/faraday-agent-dispatcher/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "faraday-agent-dispatcher";
+  version = "3.2.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "infobyte";
+    repo = "faraday_agent_dispatcher";
+    rev = "refs/tags/${version}";
+    hash = "sha256-OO9Rxm7jMfQAyyO5plLDWXbfYmPR2egewOMlrhHQTEw=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace '"pytest-runner",' ""
+  '';
+
+  pythonRelaxDeps = [
+    "python-socketio"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    pythonRelaxDepsHook
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiohttp
+    click
+    faraday-agent-parameters-types
+    faraday-plugins
+    itsdangerous
+    psutil
+    pytenable
+    python-gvm
+    python-owasp-zap-v2-4
+    python-socketio
+    pyyaml
+    requests
+    syslog-rfc5424-formatter
+    websockets
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  disabledTests = [
+    "test_execute_agent"
+    "SSL"
+  ];
+
+  disabledTestPaths = [
+    # Tests require a running Docker instance
+    "tests/plugins-docker/test_executors.py"
+  ];
+
+  pythonImportsCheck = [
+    "faraday_agent_dispatcher"
+  ];
+
+  meta = with lib; {
+    description = "Tool to send result from tools to the Faraday Platform";
+    homepage = "https://github.com/infobyte/faraday_agent_dispatcher";
+    changelog = "https://github.com/infobyte/faraday_agent_dispatcher/releases/tag/${version}";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/faraday-cli/default.nix b/nixpkgs/pkgs/tools/security/faraday-cli/default.nix
new file mode 100644
index 000000000000..b0ee2015555c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/faraday-cli/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "faraday-cli";
+  version = "2.1.10";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "infobyte";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-7Yg2m0xHpBPZ58gJodSYO8vXaxSlr4GK1Lin63WozOE=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    arrow
+    click
+    cmd2
+    colorama
+    faraday-plugins
+    jsonschema
+    log-symbols
+    luddite
+    packaging
+    pyyaml
+    py-sneakers
+    simple-rest-client
+    spinners
+    tabulate
+    termcolor
+    validators
+  ];
+
+  # Tests requires credentials
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "faraday_cli"
+  ];
+
+  meta = with lib; {
+    description = "Command Line Interface for Faraday";
+    homepage = "https://github.com/infobyte/faraday-cli";
+    changelog = "https://github.com/infobyte/faraday-cli/releases/tag/${version}";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fcrackzip/default.nix b/nixpkgs/pkgs/tools/security/fcrackzip/default.nix
new file mode 100644
index 000000000000..31d0b44fb710
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fcrackzip/default.nix
@@ -0,0 +1,26 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "fcrackzip";
+  version = "1.0";
+  src = fetchurl {
+    url = "http://oldhome.schmorp.de/marc/data/${pname}-${version}.tar.gz";
+    sha256 = "0l1qsk949vnz18k4vjf3ppq8p497966x4c7f2yx18x8pk35whn2a";
+  };
+
+  # 'fcrackzip --use-unzip' cannot deal with file names containing a single quote
+  # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=430387
+  patches = [ ./fcrackzip_forkexec.patch ];
+
+  # Do not clash with unizp/zipinfo
+  postInstall = "mv $out/bin/zipinfo $out/bin/fcrackzip-zipinfo";
+
+  meta = with lib; {
+    description = "zip password cracker, similar to fzc, zipcrack and others";
+    homepage = "http://oldhome.schmorp.de/marc/fcrackzip.html";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ nico202 ];
+    platforms = with platforms; unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/fcrackzip/fcrackzip_forkexec.patch b/nixpkgs/pkgs/tools/security/fcrackzip/fcrackzip_forkexec.patch
new file mode 100644
index 000000000000..8e508ec1f596
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fcrackzip/fcrackzip_forkexec.patch
@@ -0,0 +1,105 @@
+--- origin/main.c	2016-12-12 12:53:38.344285376 +0100
++++ main.c	2016-12-12 13:01:41.134548824 +0100
+@@ -26,11 +26,13 @@
+ #include <string.h>
+ 
+ #ifdef USE_UNIX_REDIRECTION
+-#define DEVNULL ">/dev/null 2>&1"
++#define DEVNULL "/dev/null"
+ #else
+-#define DEVNULL ">NUL 2>&1"
++#define DEVNULL "NUL"
+ #endif
+ 
++#include <errno.h>
++
+ #include "crack.h"
+ 
+ int use_unzip;
+@@ -47,21 +49,77 @@
+ int REGPARAM
+ check_unzip (const char *pw)
+ {
+-  char buff[1024];
+-  int status;
++pid_t cpid;
++cpid = fork ();
++if (cpid == -1)
++  {
++    perror ("fork");
++    exit (EXIT_FAILURE);
++  }
++
++if (cpid == 0)
++  {
++    // Redirect STDERR/STDOUT to /dev/null
++    int oldfd_stderr, oldfd_stdout;
++    oldfd_stdout = dup (fileno (stdout));
++    if (oldfd_stdout == -1)
++      {
++        perror ("dup for stdout");
++        _exit (127);
++      }
++    oldfd_stderr = dup (fileno (stderr));
++    if (oldfd_stderr == -1)
++      {
++        perror ("dup for stderr");
++        _exit (127);
++      }
++    if (freopen (DEVNULL, "w", stdout) == NULL)
++      {
++        perror ("freopen " DEVNULL " for stdout");
++        _exit (127);
++      }
++    if (freopen (DEVNULL, "w", stderr) == NULL)
++      {
++        perror ("freopen " DEVNULL " for stderr");
++        _exit (127);
++      }
++    execlp ("unzip", "unzip", "-qqtP", pw, file_path[0], NULL);
++
++    // When execlp failed.
++    // Restores the stderr/stdout redirection to print an error.
++    int errno_saved = errno;
++    dup2 (oldfd_stderr, fileno (stderr));
++    dup2 (oldfd_stdout, fileno (stdout));
++    close (oldfd_stderr);
++    close (oldfd_stdout);
++    errno = errno_saved;
++    perror ("execlp for unzip");
++    _exit (127); // Returns 127 on error as system(3) does
++  }
+ 
+-  sprintf (buff, "unzip -qqtP \"%s\" %s " DEVNULL, pw, file_path[0]);
+-  status = system (buff);
+-
+-#undef REDIR
++  int status;
+ 
+-  if (status == EXIT_SUCCESS)
++  if (waitpid (cpid, &status, 0) == -1)
+     {
+-      printf("\n\nPASSWORD FOUND!!!!: pw == %s\n", pw);
++    perror ("waitpid");
++    exit (EXIT_FAILURE);
++  }
++
++  // The child process does not terminated normally, OR returns the exit status 127.
++  if (!WIFEXITED (status)
++    || (WIFEXITED (status) && (WEXITSTATUS (status) == 127)))
++  {
++    fprintf (stderr, "Executing unzip failed.\n");
++    exit (EXIT_FAILURE);
++  }
++// unzip exited normally with the exit status 0 then...
++ if (WIFEXITED (status) && (WEXITSTATUS (status) == EXIT_SUCCESS))
++  {
++    printf ("\n\nPASSWORD FOUND!!!!: pw == %s\n", pw);
+       exit (EXIT_SUCCESS);
+     }
+ 
+-  return !status;
++  return 0;
+ }
+ 
+ /* misc. callbacks.  */
diff --git a/nixpkgs/pkgs/tools/security/feroxbuster/default.nix b/nixpkgs/pkgs/tools/security/feroxbuster/default.nix
new file mode 100644
index 000000000000..18af1a0f1c48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/feroxbuster/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+, pkg-config
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "feroxbuster";
+  version = "2.10.1";
+
+  src = fetchFromGitHub {
+    owner = "epi052";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-AFh/IeB88NYPsyUqzaN92GoDbAgl+HG87cIy+Ni06Q8=";
+  };
+
+  # disable linker overrides on aarch64-linux
+  postPatch = ''
+    rm .cargo/config
+  '';
+
+  cargoHash = "sha256-Fu3qw3qRK3TZlzK1WcmI/GQ5TM1j+gbGoedwp18SolY=";
+
+  OPENSSL_NO_VENDOR = true;
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Fast, simple, recursive content discovery tool";
+    homepage = "https://github.com/epi052/feroxbuster";
+    changelog = "https://github.com/epi052/feroxbuster/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.unix;
+    mainProgram = "feroxbuster";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/ffuf/default.nix b/nixpkgs/pkgs/tools/security/ffuf/default.nix
new file mode 100644
index 000000000000..e0e5976c7510
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ffuf/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+}:
+
+buildGoModule rec {
+  pname = "ffuf";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "ffuf";
+    repo = "ffuf";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-+wcNqQHtB8yCLiJXMBxolCWsYZbBAsBGS1hs7j1lzUU=";
+  };
+
+  vendorHash = "sha256-SrC6Q7RKf+gwjJbxSZkWARw+kRtkwVv1UJshc/TkNdc=";
+
+  patches = [
+    # Fix CSV test, https://github.com/ffuf/ffuf/pull/731
+    (fetchpatch {
+      name = "fix-csv-test.patch";
+      url = "https://github.com/ffuf/ffuf/commit/7f2aae005ad73988a1fa13c1c33dab71f4ae5bbd.patch";
+      hash = "sha256-/v9shGICmsbFfEJe4qBkBHB9PVbBlrjY3uFmODxHu9M=";
+    })
+  ];
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  meta = with lib; {
+    description = "Tool for web fuzzing";
+    longDescription = ''
+      FFUF, or “Fuzz Faster you Fool†is an open source web fuzzing tool,
+      intended for discovering elements and content within web applications
+      or web servers.
+    '';
+    homepage = "https://github.com/ffuf/ffuf";
+    changelog = "https://github.com/ffuf/ffuf/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fido2luks/default.nix b/nixpkgs/pkgs/tools/security/fido2luks/default.nix
new file mode 100644
index 000000000000..123b73819bdc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fido2luks/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cryptsetup
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fido2luks";
+  version = "0.2.21";
+
+  src = fetchFromGitHub {
+    owner = "shimunn";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-bXwaFiRHURvS5KtTqIj+3GlGNbEulDgMDP51ZiO1w9o=";
+  };
+
+  nativeBuildInputs = [ pkg-config rustPlatform.bindgenHook ];
+
+  buildInputs = [ cryptsetup ];
+
+  cargoSha256 = "sha256-MPji87jYJjYtDAXO+v/Z4XRtCKo+ftsNvmlBrM9iMTk=";
+
+  meta = with lib; {
+    description = "Decrypt your LUKS partition using a FIDO2 compatible authenticator";
+    homepage = "https://github.com/shimunn/fido2luks";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ prusnak mmahut ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fierce/default.nix b/nixpkgs/pkgs/tools/security/fierce/default.nix
new file mode 100644
index 000000000000..9b8d8735b079
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fierce/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "fierce";
+  version = "1.5.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "mschwager";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-9VTPD5i203BTl2nADjq131W9elgnaHNIWGIUuCiYlHg=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dnspython
+  ];
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace 'dnspython==1.16.0' 'dnspython'
+  '';
+
+  # tests require network access
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "fierce"
+  ];
+
+  meta = with lib; {
+    description = "DNS reconnaissance tool for locating non-contiguous IP space";
+    homepage = "https://github.com/mschwager/fierce";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ c0bw3b ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fingerprintx/default.nix b/nixpkgs/pkgs/tools/security/fingerprintx/default.nix
new file mode 100644
index 000000000000..940195b4e2b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fingerprintx/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "fingerprintx";
+  version = "1.1.13";
+
+  src = fetchFromGitHub {
+    owner = "praetorian-inc";
+    repo = "fingerprintx";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-kWMwadE3ZJTqwEgtrXvXlyc/2+cf1NGhubwZuYpDMBQ=";
+  };
+
+  vendorHash = "sha256-TMy6FwAFlo+ARvm+RiRqly0xIk4lBCXuZrtdnNSMSxw=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone utility for service discovery on open ports";
+    homepage = "https://github.com/praetorian-inc/fingerprintx";
+    changelog = "https://github.com/praetorian-inc/fingerprintx/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/firefox_decrypt/default.nix b/nixpkgs/pkgs/tools/security/firefox_decrypt/default.nix
new file mode 100644
index 000000000000..57f1215ed817
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/firefox_decrypt/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, buildPythonApplication
+, setuptools
+, setuptools-scm
+, wheel
+, nss
+, nix-update-script
+}:
+
+buildPythonApplication rec {
+  pname = "firefox_decrypt";
+  version = "1.1.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "unode";
+    repo = pname;
+    rev = "0931c0484d7429f7d4de3a2f5b62b01b7924b49f";
+    hash = "sha256-9HbH8DvHzmlem0XnDbcrIsMQRBuf82cHObqpLzQxNZM=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+    setuptools-scm
+    wheel
+  ];
+
+  makeWrapperArgs = [ "--prefix" "LD_LIBRARY_PATH" ":" (lib.makeLibraryPath [ nss ]) ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://github.com/unode/firefox_decrypt";
+    description = "A tool to extract passwords from profiles of Mozilla Firefox and derivates";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ schnusch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/flare-floss/default.nix b/nixpkgs/pkgs/tools/security/flare-floss/default.nix
new file mode 100644
index 000000000000..c9a9c8cd1380
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/flare-floss/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "flare-floss";
+  version = "3.0.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "mandiant";
+    repo = "flare-floss";
+    rev = "refs/tags/v${version}";
+    fetchSubmodules = true; # for tests
+    hash = "sha256-bmOWOFqyvOvSrNTbwLqo0WMq4IAZxZ0YYaWCdCrpziU=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "==" ">="
+
+    substituteInPlace floss/main.py \
+      --replace 'sigs_path = os.path.join(get_default_root(), "sigs")' 'sigs_path = "'"$out"'/share/flare-floss/sigs"'
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    binary2strings
+    halo
+    networkx
+    pefile
+    pydantic_1
+    rich
+    tabulate
+    tqdm
+    viv-utils
+    vivisect
+  ] ++ viv-utils.optional-dependencies.flirt;
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytest-sugar
+    pytestCheckHook
+    pyyaml
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/flare-floss/
+    cp -r floss/sigs $out/share/flare-floss/
+  '';
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "Automatically extract obfuscated strings from malware";
+    homepage = "https://github.com/mandiant/flare-floss";
+    changelog = "https://github.com/mandiant/flare-floss/releases/tag/v${version}";
+    license = licenses.asl20;
+    mainProgram = "floss";
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fpm2/default.nix b/nixpkgs/pkgs/tools/security/fpm2/default.nix
new file mode 100644
index 000000000000..69e6c7f02817
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fpm2/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, pkg-config, gnupg, gtk3
+, libxml2, intltool, nettle
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fpm2";
+  version = "0.90";
+
+  src = fetchurl {
+    url = "https://als.regnet.cz/fpm2/download/fpm2-${version}.tar.xz";
+    sha256 = "1lfzja3vzd6l6hfvw8gvg4qkl5iy6gra5pa8gjlps9l63k2bjfhz";
+  };
+
+  nativeBuildInputs = [ pkg-config intltool ];
+  buildInputs = [ gnupg gtk3 libxml2 nettle ];
+
+  meta = with lib; {
+    description = "GTK2 port from Figaro's Password Manager originally developed by John Conneely, with some new enhancements";
+    homepage    = "https://als.regnet.cz/fpm2/";
+    license     = licenses.gpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ hce ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fprintd/default.nix b/nixpkgs/pkgs/tools/security/fprintd/default.nix
new file mode 100644
index 000000000000..27425b1a1491
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fprintd/default.nix
@@ -0,0 +1,115 @@
+{ lib, stdenv
+, fetchFromGitLab
+, fetchpatch
+, pkg-config
+, gobject-introspection
+, meson
+, ninja
+, perl
+, gettext
+, gtk-doc
+, libxslt
+, docbook-xsl-nons
+, docbook_xml_dtd_412
+, glib
+, gusb
+, dbus
+, polkit
+, nss
+, pam
+, systemd
+, libfprint
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fprintd";
+  version = "1.94.2";
+  outputs = [ "out" "devdoc" ];
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "libfprint";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ePhcIZyXoGr8XlBuzKjpibU9D/44iCXYBlpVR9gcswQ=";
+  };
+
+  patches = [
+    # backport upstream patch fixing tests
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/libfprint/fprintd/-/commit/ae04fa989720279e5558c3b8ff9ebe1959b1cf36.patch";
+      sha256 = "sha256-jW5vlzrbZQ1gUDLBf7G50GnZfZxhlnL2Eu+9Bghdwdw=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    perl # for pod2man
+    gettext
+    gtk-doc
+    libxslt
+    dbus
+    docbook-xsl-nons
+    docbook_xml_dtd_412
+  ];
+
+  buildInputs = [
+    glib
+    polkit
+    nss
+    pam
+    systemd
+    libfprint
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    gobject-introspection # for setup hook
+    python-dbusmock
+    dbus-python
+    pygobject3
+    pycairo
+    pypamtest
+    gusb # Required by libfprint’s typelib
+  ];
+
+  mesonFlags = [
+    "-Dgtk_doc=true"
+    "-Dpam_modules_dir=${placeholder "out"}/lib/security"
+    "-Dsysconfdir=${placeholder "out"}/etc"
+    "-Ddbus_service_dir=${placeholder "out"}/share/dbus-1/system-services"
+    "-Dsystemd_system_unit_dir=${placeholder "out"}/lib/systemd/system"
+  ];
+
+  PKG_CONFIG_DBUS_1_INTERFACES_DIR = "${placeholder "out"}/share/dbus-1/interfaces";
+  PKG_CONFIG_POLKIT_GOBJECT_1_POLICYDIR = "${placeholder "out"}/share/polkit-1/actions";
+  PKG_CONFIG_DBUS_1_DATADIR = "${placeholder "out"}/share";
+
+  # FIXME: Ugly hack for tests to find libpam_wrapper.so
+  LIBRARY_PATH = lib.makeLibraryPath [ python3.pkgs.pypamtest ];
+
+  doCheck = true;
+
+  postPatch = ''
+    patchShebangs \
+      po/check-translations.sh \
+      tests/unittest_inspector.py
+
+    # Stop tests from failing due to unhandled GTasks uncovered by GLib 2.76 bump.
+    # https://gitlab.freedesktop.org/libfprint/fprintd/-/issues/151
+    substituteInPlace tests/fprintd.py \
+      --replace "env['G_DEBUG'] = 'fatal-criticals'" ""
+    substituteInPlace tests/meson.build \
+      --replace "'G_DEBUG=fatal-criticals'," ""
+  '';
+
+  meta = with lib; {
+    homepage = "https://fprint.freedesktop.org/";
+    description = "D-Bus daemon that offers libfprint functionality over the D-Bus interprocess communication bus";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fprintd/tod.nix b/nixpkgs/pkgs/tools/security/fprintd/tod.nix
new file mode 100644
index 000000000000..e1c836e76b25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fprintd/tod.nix
@@ -0,0 +1,51 @@
+{ lib
+, fetchFromGitLab
+, fetchpatch
+, fprintd
+, libfprint-tod
+}:
+
+(fprintd.override { libfprint = libfprint-tod; }).overrideAttrs (oldAttrs: rec {
+    pname = "fprintd-tod";
+    version = "1.90.9";
+
+    src = fetchFromGitLab {
+      domain = "gitlab.freedesktop.org";
+      owner = "libfprint";
+      repo = "fprintd";
+      rev = "v${version}";
+      sha256 = "sha256-rOTVThHOY/Q2IIu2RGiv26UE2V/JFfWWnfKZQfKl5Mg=";
+    };
+
+    patches = oldAttrs.patches or [] ++ [
+      (fetchpatch {
+        name = "use-more-idiomatic-correct-embedded-shell-scripting";
+        url = "https://gitlab.freedesktop.org/libfprint/fprintd/-/commit/f4256533d1ffdc203c3f8c6ee42e8dcde470a93f.patch";
+        sha256 = "sha256-4uPrYEgJyXU4zx2V3gwKKLaD6ty0wylSriHlvKvOhek=";
+      })
+      (fetchpatch {
+        name = "remove-pointless-copying-of-files-into-build-directory";
+        url = "https://gitlab.freedesktop.org/libfprint/fprintd/-/commit/2c34cef5ef2004d8479475db5523c572eb409a6b.patch";
+        sha256 = "sha256-2pZBbMF1xjoDKn/jCAIldbeR2JNEVduXB8bqUrj2Ih4=";
+      })
+      (fetchpatch {
+        name = "build-Do-not-use-positional-arguments-in-i18n.merge_file";
+        url = "https://gitlab.freedesktop.org/libfprint/fprintd/-/commit/50943b1bd4f18d103c35233f0446ce7a31d1817e.patch";
+        sha256 = "sha256-ANkAq6fr0VRjkS0ckvf/ddVB2mH4b2uJRTI4H8vPPes=";
+      })
+    ];
+
+    postPatch = oldAttrs.postPatch or "" + ''
+      # part of "remove-pointless-copying-of-files-into-build-directory" but git-apply doesn't handle renaming
+      mv src/device.xml src/net.reactivated.Fprint.Device.xml
+      mv src/manager.xml src/net.reactivated.Fprint.Manager.xml
+    '';
+
+    meta = {
+      homepage = "https://fprint.freedesktop.org/";
+      description = "fprintd built with libfprint-tod to support Touch OEM Drivers";
+      license = lib.licenses.gpl2Plus;
+      platforms = lib.platforms.linux;
+      maintainers = with lib.maintainers; [ hmenke ];
+    };
+  })
diff --git a/nixpkgs/pkgs/tools/security/freeze/default.nix b/nixpkgs/pkgs/tools/security/freeze/default.nix
new file mode 100644
index 000000000000..a8a8dbb59346
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/freeze/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "freeze";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "optiv";
+    repo = "Freeze";
+    rev = "v${version}";
+    hash = "sha256-BE5MvCU+NfEccauOdWNty/FwMiWwLttPh7eE9+UzEMY=";
+  };
+
+  vendorHash = "sha256-R8kdFweMhAUjJ8zJ7HdF5+/vllbNmARdhU4hOw4etZo=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  postInstall = lib.optionalString (!stdenv.isDarwin) ''
+    mv $out/bin/Freeze $out/bin/freeze
+  '';
+
+  meta = with lib; {
+    description = "Payload toolkit for bypassing EDRs";
+    homepage = "https://github.com/optiv/Freeze";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/frida-tools/default.nix b/nixpkgs/pkgs/tools/security/frida-tools/default.nix
new file mode 100644
index 000000000000..9a3bdee5dae2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/frida-tools/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchPypi, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "frida-tools";
+  version = "12.3.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-jtxn0a43kv9bLcY1CM3k0kf5K30Ne/FT10ohptWNwEU=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    pygments
+    prompt-toolkit
+    colorama
+    frida-python
+  ];
+
+  meta = {
+    description = "Dynamic instrumentation toolkit for developers, reverse-engineers, and security researchers (client tools)";
+    homepage = "https://www.frida.re/";
+    maintainers = with lib.maintainers; [ s1341 ];
+    license = lib.licenses.wxWindows;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fscan/default.nix b/nixpkgs/pkgs/tools/security/fscan/default.nix
new file mode 100644
index 000000000000..00ce9d8ec78e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fscan/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "fscan";
+  version = "1.8.3-build3";
+
+  src = fetchFromGitHub {
+    owner = "shadow1ng";
+    repo = "fscan";
+    rev = version;
+    hash = "sha256-GtOCd8JaR6tx8hoB+P9QXrEnN7Wvmv7jddhc2/8hjvQ=";
+  };
+
+  vendorHash = "sha256-hvb2IfypwYauF3ubE36u0bTU+l/FWP/CZt6dFd9zc6s=";
+
+  meta = with lib; {
+    description = "An intranet comprehensive scanning tool";
+    homepage = "https://github.com/shadow1ng/fscan";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Misaka13514 ];
+    mainProgram = "fscan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fulcio/default.nix b/nixpkgs/pkgs/tools/security/fulcio/default.nix
new file mode 100644
index 000000000000..9c40c051bebc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fulcio/default.nix
@@ -0,0 +1,83 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "fulcio";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "sigstore";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-LT8J9s008XQtDtNdH1ungQREqQUrlTsoxnlRLKimqLY=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse HEAD > $out/COMMIT
+      # 0000-00-00T00:00:00Z
+      date -u -d "@$(git log -1 --pretty=%ct)" "+%Y-%m-%dT%H:%M:%SZ" > $out/SOURCE_DATE_EPOCH
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+  vendorHash = "sha256-ImZJXdOfMepMFU1z47XyNU39NGGdiCzQji2/tKVfibQ=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X sigs.k8s.io/release-utils/version.gitVersion=v${version}"
+    "-X sigs.k8s.io/release-utils/version.gitTreeState=clean"
+  ];
+
+  # ldflags based on metadata from git and source
+  preBuild = ''
+    ldflags+=" -X sigs.k8s.io/release-utils/version.gitCommit=$(cat COMMIT)"
+    ldflags+=" -X sigs.k8s.io/release-utils/version.buildDate=$(cat SOURCE_DATE_EPOCH)"
+  '';
+
+  preCheck = ''
+    # test all paths
+    unset subPackages
+
+    # skip test that requires networking
+    substituteInPlace pkg/config/config_network_test.go \
+      --replace "TestLoad" "SkipLoad"
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd fulcio \
+      --bash <($out/bin/fulcio completion bash) \
+      --fish <($out/bin/fulcio completion fish) \
+      --zsh <($out/bin/fulcio completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/fulcio --help
+    $out/bin/fulcio version 2>&1 | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/sigstore/fulcio";
+    changelog = "https://github.com/sigstore/fulcio/releases/tag/v${version}";
+    description = "A Root-CA for code signing certs - issuing certificates based on an OIDC email address";
+    longDescription = ''
+      Fulcio is a free code signing Certificate Authority, built to make
+      short-lived certificates available to anyone. Based on an Open ID Connect
+      email address, Fulcio signs x509 certificates valid for under 20 minutes.
+
+      Fulcio was designed to run as a centralized, public-good instance backed
+      up by other transparency logs. Development is now underway to support
+      different delegation models, and to deploy and run Fulcio as a
+      disconnected instance.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lesuisse jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fwbuilder/default.nix b/nixpkgs/pkgs/tools/security/fwbuilder/default.nix
new file mode 100644
index 000000000000..6787e2f923b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fwbuilder/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, ninja
+, wrapQtAppsHook
+, wayland
+, wayland-protocols
+, qtwayland
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fwbuilder";
+  version = "6.0.0-rc1";
+
+  src = fetchFromGitHub {
+    owner = "fwbuilder";
+    repo = "fwbuilder";
+    rev = "v${version}";
+    hash = "sha256-j5HjGcIqq93Ca9OBqEgSotoSXyw+q6Fqxa3hKk1ctwQ=";
+  };
+
+  postPatch = ''
+    # Avoid blanket -Werror as it triggers on any minor compiler
+    # warnings like deprecated functions or invalid indentat8ion.
+    # Leave fixing these problems to upstream.
+    substituteInPlace CMakeLists.txt --replace ';-Werror;' ';'
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    wayland
+    wayland-protocols
+    qtwayland
+  ];
+
+  meta = with lib; {
+    description = "GUI Firewall Management Application";
+    longDescription = ''
+      Firewall Builder is a GUI firewall management application for iptables,
+      PF, Cisco ASA/PIX/FWSM, Cisco router ACL and more. Firewall configuration
+      data is stored in a central file that can scale to hundreds of firewalls
+      managed from a single UI.
+    '';
+    homepage = "https://github.com/fwbuilder/fwbuilder";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.elatov ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fwknop/default.nix b/nixpkgs/pkgs/tools/security/fwknop/default.nix
new file mode 100644
index 000000000000..6c4ce6507657
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fwknop/default.nix
@@ -0,0 +1,80 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook
+, libpcap, texinfo
+, iptables
+, gnupgSupport ? true, gnupg, gpgme # Increases dependencies!
+, wgetSupport ? true, wget
+, buildServer ? true
+, buildClient ? true }:
+
+stdenv.mkDerivation rec {
+  pname = "fwknop";
+  version = "2.6.10";
+
+  src = fetchFromGitHub {
+    owner = "mrash";
+    repo = pname;
+    rev = version;
+    sha256 = "05kvqhmxj9p2y835w75f3jvhr38bb96cd58mvfd7xil9dhmhn9ra";
+  };
+
+  patches = [
+    # Pull patch pending upstream inclusion for -fno-common tollchains:
+    #   https://github.com/mrash/fwknop/pull/319
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/mrash/fwknop/commit/a8214fd58bc46d23b64b3a55db023c7f5a5ea6af.patch";
+      sha256 = "0cp1350q66n455hpd3rdydb9anx66bcirza5gyyyy5232zgg58bi";
+    })
+
+    # Pull patch pending upstream inclusion for `autoconf-2.72` support:
+    #   https://github.com/mrash/fwknop/pull/357
+    (fetchpatch {
+      name = "autoconf-2.72.patch";
+      url = "https://github.com/mrash/fwknop/commit/bee7958532338499e35c19e75937891c8113f7de.patch";
+      hash = "sha256-lrro5dSDR0Zz9aO3bV5vFFADNJjoDR9z6P5lFYWyLW8=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libpcap texinfo ]
+    ++ lib.optionals gnupgSupport [ gnupg gpgme.dev ]
+    ++ lib.optionals wgetSupport [ wget ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/run"
+    "--with-iptables=${iptables}/sbin/iptables"
+    (lib.enableFeature buildServer "server")
+    (lib.enableFeature buildClient "client")
+    (lib.withFeatureAs wgetSupport "wget" "${wget}/bin/wget")
+  ] ++ lib.optionalString gnupgSupport [
+    "--with-gpgme"
+    "--with-gpgme-prefix=${gpgme.dev}"
+    "--with-gpg=${gnupg}"
+  ];
+
+  # Temporary hack to copy the example configuration files into the nix-store,
+  # this'll probably be helpful until there's a NixOS module for that (feel free
+  # to ping me (@primeos) if you want to help).
+  preInstall = ''
+    substituteInPlace Makefile --replace\
+      "sysconfdir = /etc"\
+      "sysconfdir = $out/etc"
+    substituteInPlace server/Makefile --replace\
+      "wknopddir = /etc/fwknop"\
+      "wknopddir = $out/etc/fwknop"
+  '';
+
+  meta = with lib; {
+    description =
+      "Single Packet Authorization (and Port Knocking) server/client";
+    longDescription = ''
+      fwknop stands for the "FireWall KNock OPerator", and implements an
+      authorization scheme called Single Packet Authorization (SPA).
+    '';
+    homepage = "https://www.cipherdyne.org/fwknop/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/galer/default.nix b/nixpkgs/pkgs/tools/security/galer/default.nix
new file mode 100644
index 000000000000..bfe7cb18d1eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/galer/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "galer";
+  version = "0.0.2";
+
+  src = fetchFromGitHub {
+    owner = "dwisiswant0";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-i3rrXpKnUV9REnn4lQWIFpWc2SzkxVomruiAmcMBQ6Q=";
+  };
+
+  vendorHash = "sha256-2nJgQfSeo9GrK6Kor29esnMEFmd5pTd8lGwzRi4zq1w=";
+
+  meta = with lib; {
+    description = "Tool to fetch URLs from HTML attributes";
+    homepage = "https://github.com/dwisiswant0/galer";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gallia/default.nix b/nixpkgs/pkgs/tools/security/gallia/default.nix
new file mode 100644
index 000000000000..5d0cc05ec46d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gallia/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, fetchFromGitHub
+, python3
+, cacert
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gallia";
+  version = "1.5.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "Fraunhofer-AISEC";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-JeEJ4xTIOFeMADnuPMLNGxB/qEPKMnaIhQ6FCUaNa7E=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiofiles
+    aiohttp
+    aiosqlite
+    argcomplete
+    can
+    exitcode
+    platformdirs
+    psutil
+    construct
+    msgspec
+    pydantic
+    pygit2
+    tabulate
+    tomli
+    zstandard
+  ];
+
+  SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+    pytest-asyncio
+  ];
+
+  pythonImportsCheck = [
+    "gallia"
+  ];
+
+  preCheck = ''
+    export PATH=$out/bin:$PATH
+  '';
+
+  meta = with lib; {
+    description = "Extendable Pentesting Framework for the Automotive Domain";
+    homepage = "https://github.com/Fraunhofer-AISEC/gallia";
+    changelog = "https://github.com/Fraunhofer-AISEC/gallia/releases/tag/v${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab rumpelsepp ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gau/default.nix b/nixpkgs/pkgs/tools/security/gau/default.nix
new file mode 100644
index 000000000000..eea5df85162c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gau/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "gau";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner = "lc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-AtKakeQnxRbFAbK/aQ4OQoEowN753jm4P4M57Oo3x1Y=";
+  };
+
+  vendorHash = "sha256-nhsGhuX5AJMHg+zQUt1G1TwVgMCxnuJ2T3uBrx7bJNs=";
+
+  meta = with lib; {
+    description = "Tool to fetch known URLs";
+    longDescription = ''
+      getallurls (gau) fetches known URLs from various sources for any
+      given domain.
+    '';
+    homepage = "https://github.com/lc/gau";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gen-oath-safe/default.nix b/nixpkgs/pkgs/tools/security/gen-oath-safe/default.nix
new file mode 100644
index 000000000000..9ce87ac3bdd1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gen-oath-safe/default.nix
@@ -0,0 +1,44 @@
+{ coreutils, fetchFromGitHub, file, libcaca, makeWrapper, python3, openssl, qrencode, lib, stdenv, yubikey-manager }:
+
+stdenv.mkDerivation rec {
+  pname = "gen-oath-safe";
+  version = "0.11.0";
+  src = fetchFromGitHub {
+    owner = "mcepl";
+    repo = "gen-oath-safe";
+    rev = version;
+    sha256 = "1914z0jgj7lni0nf3hslkjgkv87mhxdr92cmhmbzhpjgjgr23ydp";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase =
+    let
+      path = lib.makeBinPath [
+        coreutils
+        file
+        libcaca.bin
+        openssl.bin
+        python3
+        qrencode
+        yubikey-manager
+      ];
+    in
+    ''
+      mkdir -p $out/bin
+      cp gen-oath-safe $out/bin/
+      wrapProgram $out/bin/gen-oath-safe \
+        --prefix PATH : ${path}
+    '';
+  meta = with lib; {
+    homepage = "https://github.com/mcepl/gen-oath-safe";
+    description = "Script for generating HOTP/TOTP keys (and QR code)";
+    platforms =  platforms.unix;
+    license = licenses.mit;
+    maintainers = [ maintainers.makefu ];
+    mainProgram = "gen-oath-safe";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/security/gencfsm/default.nix b/nixpkgs/pkgs/tools/security/gencfsm/default.nix
new file mode 100644
index 000000000000..33f6297905ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gencfsm/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchurl, autoconf, automake, intltool, libtool, pkg-config
+, encfs, libsecret , glib , libgee, gtk3, vala, wrapGAppsHook, xorg
+, gobject-introspection
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.9";
+  pname = "gnome-encfs-manager";
+
+  src = fetchurl {
+    url = with lib.versions;
+      "https://launchpad.net/gencfsm/trunk/${major version}.${minor version}/+download/gnome-encfs-manager_${version}.tar.xz";
+    sha256 = "RXVwg/xhfAQv3pWp3UylOhMKDh9ZACTuKM4lPrn1dk8=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    intltool
+    libtool
+    pkg-config
+    vala
+    wrapGAppsHook
+    gobject-introspection
+  ];
+  buildInputs = [
+    glib
+    encfs
+    gtk3
+    libgee
+    xorg.libSM
+    xorg.libICE
+    libsecret
+  ];
+
+  # Fix hardcoded paths to /bin/mkdir
+  patches = [ ./makefile-mkdir.patch ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = [ "--disable-appindicator" ];
+
+  preFixup = "gappsWrapperArgs+=(--prefix PATH : ${encfs}/bin)";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "http://www.libertyzero.com/GEncfsM/";
+    downloadPage = "https://launchpad.net/gencfsm/";
+    description = "EncFS manager and mounter with GNOME3 integration";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.spacefrogg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gencfsm/makefile-mkdir.patch b/nixpkgs/pkgs/tools/security/gencfsm/makefile-mkdir.patch
new file mode 100644
index 000000000000..49c7b0b4d9d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gencfsm/makefile-mkdir.patch
@@ -0,0 +1,14 @@
+--- a/dist/Makefile.am
++++ b/dist/Makefile.am
+@@ -10,9 +10,9 @@ install-data-hook:
+ 	chmod 0755 $(shell find $(dist) -type d)
+ 	chmod 0644 $(shell find $(dist) -type f)
+ 	chmod 0755 $(shell find "scripts" -type f)
+-	test -z "$(DESTDIR)$(datadir)/dbus-1/services/" || /bin/mkdir -p "$(DESTDIR)$(datadir)/dbus-1/services/"
++	test -z "$(DESTDIR)$(datadir)/dbus-1/services/" || $(MKDIR_P) "$(DESTDIR)$(datadir)/dbus-1/services/"
+ 	cp "extra/com.libertyzero.gnome-encfs-manager.service" "$(DESTDIR)$(datadir)/dbus-1/services/"
+-	test -z "$(gencfsmdir)" || /bin/mkdir -p "$(gencfsmdir)"
++	test -z "$(gencfsmdir)" || $(MKDIR_P) "$(gencfsmdir)"
+ 	cp --parent -rf $(dist) "$(gencfsmdir)"
+ 	cp --parent -rf $(icons) $(DESTDIR)$(datadir)
+ 
diff --git a/nixpkgs/pkgs/tools/security/genpass/default.nix b/nixpkgs/pkgs/tools/security/genpass/default.nix
new file mode 100644
index 000000000000..9565bf80c950
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/genpass/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv
+, fetchgit
+, rustPlatform
+, CoreFoundation
+, libiconv
+, Security
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "genpass";
+  version = "0.5.1";
+
+  src = fetchgit {
+    url = "https://git.sr.ht/~cyplo/genpass";
+    rev = "v${version}";
+    sha256 = "UyEgOlKtDyneRteN3jHA2BJlu5U1HFL8HA2MTQz5rns=";
+  };
+
+  cargoSha256 = "ls3tzZ+gtZQlObmbtwJDq6N/f5nY+Ps7RL5R/fR5Vgg=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreFoundation libiconv Security ];
+
+  meta = with lib; {
+    description = "A simple yet robust commandline random password generator";
+    homepage = "https://sr.ht/~cyplo/genpass/";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ cyplo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gfshare/default.nix b/nixpkgs/pkgs/tools/security/gfshare/default.nix
new file mode 100644
index 000000000000..e0da2fdaf35b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gfshare/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchgit, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gfshare";
+  version = "2.0.0";
+
+  src = fetchgit {
+    url = "git://git.gitano.org.uk/libgfshare.git";
+    rev = version;
+    sha256 = "0s37xn9pr5p820hd40489xwra7kg3gzqrxhc2j9rnxnd489hl0pr";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  doCheck = true;
+
+  outputs = [ "bin" "lib" "dev" "out" ];
+
+  meta = with lib; {
+    # Not the most descriptive homepage but it's what Debian and Ubuntu use
+    # https://packages.debian.org/sid/libgfshare2
+    # https://launchpad.net/ubuntu/impish/+source/libgfshare/+copyright
+    homepage = "https://git.gitano.org.uk/libgfshare.git/";
+    description = "Shamir's secret-sharing method in the Galois Field GF(2**8)";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rraval ];
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/gfshare.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ggshield/default.nix b/nixpkgs/pkgs/tools/security/ggshield/default.nix
new file mode 100644
index 000000000000..6b93977558c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ggshield/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, fetchFromGitHub
+, git
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ggshield";
+  version = "1.24.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "GitGuardian";
+    repo = "ggshield";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-N0yokLsp6jRELIPu8w6gvD7V97xiKJl+kLQQB9h2mMY=";
+  };
+
+  pythonRelaxDeps = true;
+
+  nativeBuildInputs = with python3.pkgs; [
+    pythonRelaxDepsHook
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    charset-normalizer
+    click
+    cryptography
+    marshmallow
+    marshmallow-dataclass
+    oauthlib
+    platformdirs
+    pygitguardian
+    pyjwt
+    python-dotenv
+    pyyaml
+    requests
+    rich
+  ];
+
+  nativeCheckInputs = [
+    git
+  ] ++ (with python3.pkgs; [
+    jsonschema
+    pyfakefs
+    pytest-mock
+    pytest-voluptuous
+    pytestCheckHook
+    snapshottest
+    vcrpy
+  ]);
+
+  pythonImportsCheck = [
+    "ggshield"
+  ];
+
+  disabledTestPaths = [
+    # Don't run functional tests
+    "tests/functional/"
+  ];
+
+  disabledTests = [
+    # No TLS certificate, no .git folder, etc.
+    "test_cache_catches"
+    "test_is_git_dir"
+    "test_is_valid_git_commit_ref"
+    "test_check_git_dir"
+    "test_does_not_fail_if_cache"
+    # Encoding issues
+    "test_file_decode_content"
+    "test_file_is_longer_than_does_not_read_utf8_file"
+    "test_file_is_longer_using_8bit_codec"
+    "test_generate_files_from_paths"
+  ];
+
+  meta = with lib; {
+    description = "Tool to find and fix various types of hardcoded secrets and infrastructure-as-code misconfigurations";
+    homepage = "https://github.com/GitGuardian/ggshield";
+    changelog = "https://github.com/GitGuardian/ggshield/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ghauri/default.nix b/nixpkgs/pkgs/tools/security/ghauri/default.nix
new file mode 100644
index 000000000000..6e7ddeb3cd96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ghauri/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ghauri";
+  version = "1.3";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "r0oth3x49";
+    repo = "ghauri";
+    rev = "refs/tags/${version}";
+    hash = "sha256-CZhkb8GmXXSA5QqhW7IAirwsxQg6YNFT3RHrGsyqAbk=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    chardet
+    colorama
+    requests
+    tldextract
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "ghauri"
+  ];
+
+  meta = with lib; {
+    description = "Tool for detecting and exploiting SQL injection security flaws";
+    homepage = "https://github.com/r0oth3x49/ghauri";
+    changelog = "https://github.com/r0oth3x49/ghauri/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ghdorker/default.nix b/nixpkgs/pkgs/tools/security/ghdorker/default.nix
new file mode 100644
index 000000000000..28336c30ea15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ghdorker/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ghdorker";
+  version = "0.3.2";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-wF4QoXxH55SpdYgKLHf4sCwUk1rkCpSdnIX5FvFi/BU=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    ghapi
+    glom
+    python-dotenv
+    pyyaml
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "GHDorker"
+  ];
+
+  meta = with lib; {
+    description = "Extensible GitHub dorking tool";
+    homepage = "https://github.com/dtaivpp/ghdorker";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ghidra/0001-Use-protobuf-gradle-plugin.patch b/nixpkgs/pkgs/tools/security/ghidra/0001-Use-protobuf-gradle-plugin.patch
new file mode 100644
index 000000000000..7fb7d53e352f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ghidra/0001-Use-protobuf-gradle-plugin.patch
@@ -0,0 +1,193 @@
+diff --git a/Ghidra/Debug/Debugger-gadp/build.gradle b/Ghidra/Debug/Debugger-gadp/build.gradle
+index 9e1c57faf..3a3242eb5 100644
+--- a/Ghidra/Debug/Debugger-gadp/build.gradle
++++ b/Ghidra/Debug/Debugger-gadp/build.gradle
+@@ -18,11 +18,16 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
+-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
++apply plugin: 'com.google.protobuf'
+ 
+ apply plugin: 'eclipse'
+ eclipse.project.name = 'Debug Debugger-gadp'
+ 
++buildscript {
++	dependencies {
++		classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
++	}
++}
+ dependencies {
+ 	api project(':Framework-AsyncComm')
+ 	api project(':Framework-Debugging')
+diff --git a/Ghidra/Debug/Debugger-isf/build.gradle b/Ghidra/Debug/Debugger-isf/build.gradle
+index d135294a0..785681ca2 100644
+--- a/Ghidra/Debug/Debugger-isf/build.gradle
++++ b/Ghidra/Debug/Debugger-isf/build.gradle
+@@ -18,11 +18,15 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
+-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
+-
++apply plugin: 'com.google.protobuf'
+ apply plugin: 'eclipse'
+ eclipse.project.name = 'Debug Debugger-isf'
+ 
++buildscript {
++	dependencies {
++		classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
++	}
++}
+ dependencies {
+ 	api project(':Framework-AsyncComm')
+ 	api project(':Framework-Debugging')
+diff --git a/Ghidra/Debug/Debugger-rmi-trace/build.gradle b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
+index eec00786e..666cccafc 100644
+--- a/Ghidra/Debug/Debugger-rmi-trace/build.gradle
++++ b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
+@@ -18,12 +18,17 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
+-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
++apply plugin: 'com.google.protobuf'
+ apply from: "${rootProject.projectDir}/gradle/debugger/hasPythonPackage.gradle"
+ 
+ apply plugin: 'eclipse'
+ eclipse.project.name = 'Debug Debugger-rmi-trace'
+ 
++buildscript {
++	dependencies {
++		classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
++	}
++}
+ dependencies {
+ 	api project(':Debugger')
+ }
+@@ -36,7 +41,7 @@ task generateProtoPy {
+ 	ext.outdir = file("build/generated/source/proto/main/py")
+ 	outputs.dir(outdir)
+ 	inputs.files(src)
+-	dependsOn(configurations.protocArtifact)
++	dependsOn(protobuf.generateProtoTasks.all())
+ 	doLast {
+ 		def exe = configurations.protocArtifact.first()
+ 		if (!isCurrentWindows()) {
+diff --git a/build.gradle b/build.gradle
+index b0c717fb1..5f56506a5 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -74,6 +74,12 @@ if (flatRepo.isDirectory()) {
+ 			jcenter()
+ 			flatDir name: "flat", dirs:["$flatRepo"]
+ 		}
++		buildscript {
++			repositories {
++				mavenLocal()
++				mavenCentral()
++			}
++		}
+ 	}
+ }
+ else {	
+diff --git a/gradle/debugger/hasProtobuf.gradle b/gradle/debugger/hasProtobuf.gradle
+deleted file mode 100644
+index 23b4ce74b..000000000
+--- a/gradle/debugger/hasProtobuf.gradle
++++ /dev/null
+@@ -1,94 +0,0 @@
+-/* ###
+- * IP: GHIDRA
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *      http://www.apache.org/licenses/LICENSE-2.0
+- * 
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-/*plugins {
+-	id 'com.google.protobuf' version '0.8.10'
+-}*/
+-
+-configurations {
+-	allProtocArtifacts
+-	protocArtifact
+-}
+-
+-def platform = getCurrentPlatformName()
+-
+-
+-dependencies {
+-	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:windows-x86_64@exe'
+-	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:linux-x86_64@exe'
+-	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:linux-aarch_64@exe'
+-	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:osx-x86_64@exe'
+-	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:osx-aarch_64@exe'
+-
+-	if (isCurrentWindows()) {
+-		protocArtifact 'com.google.protobuf:protoc:3.21.8:windows-x86_64@exe'
+-	}
+-	if (isCurrentLinux()) {
+-		if (platform.endsWith("x86_64")) {
+-			protocArtifact 'com.google.protobuf:protoc:3.21.8:linux-x86_64@exe'
+-		}
+-		else {
+-			protocArtifact 'com.google.protobuf:protoc:3.21.8:linux-aarch_64@exe'
+-		}
+-	}
+-	if (isCurrentMac()) {
+-		if (platform.endsWith("x86_64")) {
+-			protocArtifact 'com.google.protobuf:protoc:3.21.8:osx-x86_64@exe'
+-		}
+-		else {
+-			protocArtifact 'com.google.protobuf:protoc:3.21.8:osx-aarch_64@exe'
+-		}
+-	}
+-}
+-
+-/*protobuf {
+-	protoc {
+-		artifact = 'com.google.protobuf:protoc:3.21.8'
+-	}
+-}*/
+-
+-task generateProto {
+-	ext.srcdir = file("src/main/proto")
+-	ext.src = fileTree(srcdir) {
+-		include "**/*.proto"
+-	}
+-	ext.outdir = file("build/generated/source/proto/main/java")
+-	outputs.dir(outdir)
+-	inputs.files(src)
+-	dependsOn(configurations.protocArtifact)
+-	doLast {
+-		def exe = configurations.protocArtifact.first()
+-		if (!isCurrentWindows()) {
+-			exe.setExecutable(true)
+-		}
+-		exec {
+-			commandLine exe, "--java_out=$outdir", "-I$srcdir"
+-			args src
+-		}
+-	}
+-}
+-
+-tasks.compileJava.dependsOn(tasks.generateProto)
+-tasks.eclipse.dependsOn(tasks.generateProto)
+-rootProject.tasks.prepDev.dependsOn(tasks.generateProto)
+-
+-sourceSets {
+-	main {
+-		java {
+-			srcDir tasks.generateProto.outdir
+-		}
+-	}
+-}
+-zipSourceSubproject.dependsOn generateProto
diff --git a/nixpkgs/pkgs/tools/security/ghidra/build.nix b/nixpkgs/pkgs/tools/security/ghidra/build.nix
new file mode 100644
index 000000000000..da164c94b0b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ghidra/build.nix
@@ -0,0 +1,173 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, gradle_7
+, perl
+, makeWrapper
+, openjdk17
+, unzip
+, makeDesktopItem
+, icoutils
+, xcbuild
+, protobuf
+, fetchurl
+}:
+
+let
+  pkg_path = "$out/lib/ghidra";
+  pname = "ghidra";
+  version = "11.0";
+
+  src = fetchFromGitHub {
+    owner = "NationalSecurityAgency";
+    repo = "Ghidra";
+    rev = "Ghidra_${version}_build";
+    hash = "sha256-LVtDqgceZUrMriNy6+yK/ruBrTI8yx6hzTaPa1BTGlc=";
+  };
+
+  gradle = gradle_7;
+
+  desktopItem = makeDesktopItem {
+    name = "ghidra";
+    exec = "ghidra";
+    icon = "ghidra";
+    desktopName = "Ghidra";
+    genericName = "Ghidra Software Reverse Engineering Suite";
+    categories = [ "Development" ];
+  };
+
+  # postPatch scripts.
+  # Adds a gradle step that downloads all the dependencies to the gradle cache.
+  addResolveStep = ''
+    cat >>build.gradle <<HERE
+task resolveDependencies {
+  doLast {
+    project.rootProject.allprojects.each { subProject ->
+      subProject.buildscript.configurations.each { configuration ->
+        resolveConfiguration(subProject, configuration, "buildscript config \''${configuration.name}")
+      }
+      subProject.configurations.each { configuration ->
+        resolveConfiguration(subProject, configuration, "config \''${configuration.name}")
+      }
+    }
+  }
+}
+void resolveConfiguration(subProject, configuration, name) {
+  if (configuration.canBeResolved) {
+    logger.info("Resolving project {} {}", subProject.name, name)
+    configuration.resolve()
+  }
+}
+HERE
+  '';
+
+  # fake build to pre-download deps into fixed-output derivation
+  # Taken from mindustry derivation.
+  deps = stdenv.mkDerivation {
+    pname = "${pname}-deps";
+    inherit version src;
+
+    patches = [ ./0001-Use-protobuf-gradle-plugin.patch ];
+    postPatch = addResolveStep;
+
+    nativeBuildInputs = [ gradle perl ] ++ lib.optional stdenv.isDarwin xcbuild;
+    buildPhase = ''
+      export HOME="$NIX_BUILD_TOP/home"
+      mkdir -p "$HOME"
+      export JAVA_TOOL_OPTIONS="-Duser.home='$HOME'"
+      export GRADLE_USER_HOME="$HOME/.gradle"
+
+      # First, fetch the static dependencies.
+      gradle --no-daemon --info -Dorg.gradle.java.home=${openjdk17} -I gradle/support/fetchDependencies.gradle init
+
+      # Then, fetch the maven dependencies.
+      gradle --no-daemon --info -Dorg.gradle.java.home=${openjdk17} resolveDependencies
+    '';
+    # perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/maven/$x/$3/$4/$5" #e' \
+        | sh
+      cp -r dependencies $out/dependencies
+    '';
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "sha256-KT+XXowCNaNfOiPzYLwbPMaF84omKFobHkkNqZ6oyUA=";
+  };
+
+in stdenv.mkDerivation {
+  inherit pname version src;
+
+  nativeBuildInputs = [
+    gradle unzip makeWrapper icoutils protobuf
+  ] ++ lib.optional stdenv.isDarwin xcbuild;
+
+  dontStrip = true;
+
+  patches = [
+    ./0001-Use-protobuf-gradle-plugin.patch
+    # we use fetchurl since the fetchpatch normalization strips the whole diff
+    # https://github.com/NixOS/nixpkgs/issues/266556
+    (fetchurl {
+      name = "0002-remove-executable-bit.patch";
+      url = "https://github.com/NationalSecurityAgency/ghidra/commit/e2a945624b74e5d42dc85e9c1f992315dd154db1.diff";
+      sha256 = "07mjfl7hvag2akk65g4cknp330qlk07dgbmh20dyg9qxzmk91fyq";
+    })
+  ];
+
+  buildPhase = ''
+    export HOME="$NIX_BUILD_TOP/home"
+    mkdir -p "$HOME"
+    export JAVA_TOOL_OPTIONS="-Duser.home='$HOME'"
+
+    ln -s ${deps}/dependencies dependencies
+
+    sed -i "s#mavenLocal()#mavenLocal(); maven { url '${deps}/maven' }#g" build.gradle
+
+    rm -v Ghidra/Debug/Debugger-rmi-trace/build.gradle.orig
+
+    gradle --offline --no-daemon --info -Dorg.gradle.java.home=${openjdk17} buildGhidra
+  '';
+
+  installPhase = ''
+    mkdir -p "${pkg_path}" "$out/share/applications"
+
+    ZIP=build/dist/$(ls build/dist)
+    echo $ZIP
+    unzip $ZIP -d ${pkg_path}
+    f=("${pkg_path}"/*)
+    mv "${pkg_path}"/*/* "${pkg_path}"
+    rmdir "''${f[@]}"
+
+    ln -s ${desktopItem}/share/applications/* $out/share/applications
+
+    icotool -x "Ghidra/RuntimeScripts/Windows/support/ghidra.ico"
+    rm ghidra_4_40x40x32.png
+    for f in ghidra_*.png; do
+      res=$(basename "$f" ".png" | cut -d"_" -f3 | cut -d"x" -f1-2)
+      mkdir -pv "$out/share/icons/hicolor/$res/apps"
+      mv "$f" "$out/share/icons/hicolor/$res/apps/ghidra.png"
+    done;
+  '';
+
+  postFixup = ''
+    mkdir -p "$out/bin"
+    ln -s "${pkg_path}/ghidraRun" "$out/bin/ghidra"
+    wrapProgram "${pkg_path}/support/launch.sh" \
+      --prefix PATH : ${lib.makeBinPath [ openjdk17 ]}
+  '';
+
+  meta = with lib; {
+    description = "A software reverse engineering (SRE) suite of tools developed by NSA's Research Directorate in support of the Cybersecurity mission";
+    homepage = "https://ghidra-sre.org/";
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ roblabla ];
+    broken = stdenv.isDarwin && stdenv.isx86_64;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/security/ghidra/default.nix b/nixpkgs/pkgs/tools/security/ghidra/default.nix
new file mode 100644
index 000000000000..5f9346937b36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ghidra/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, fetchzip
+, lib
+, makeWrapper
+, autoPatchelfHook
+, openjdk17
+, pam
+, makeDesktopItem
+, icoutils
+}:
+
+let
+
+  pkg_path = "$out/lib/ghidra";
+
+  desktopItem = makeDesktopItem {
+    name = "ghidra";
+    exec = "ghidra";
+    icon = "ghidra";
+    desktopName = "Ghidra";
+    genericName = "Ghidra Software Reverse Engineering Suite";
+    categories = [ "Development" ];
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "ghidra";
+  version = "10.4";
+  versiondate = "20230928";
+
+  src = fetchzip {
+    url = "https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_${version}_build/ghidra_${version}_PUBLIC_${versiondate}.zip";
+    hash = "sha256-IiAQ9OKmr8ZgqmGftuW0ITdG06fb9Lr30n2H9GArctk=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    icoutils
+  ]
+  ++ lib.optionals stdenv.isLinux [ autoPatchelfHook ];
+
+  buildInputs = [
+    stdenv.cc.cc.lib
+    pam
+  ];
+
+  dontStrip = true;
+
+  installPhase = ''
+    mkdir -p "${pkg_path}"
+    mkdir -p "${pkg_path}" "$out/share/applications"
+    cp -a * "${pkg_path}"
+    ln -s ${desktopItem}/share/applications/* $out/share/applications
+
+    icotool -x "${pkg_path}/support/ghidra.ico"
+    rm ghidra_4_40x40x32.png
+    for f in ghidra_*.png; do
+      res=$(basename "$f" ".png" | cut -d"_" -f3 | cut -d"x" -f1-2)
+      mkdir -pv "$out/share/icons/hicolor/$res/apps"
+      mv "$f" "$out/share/icons/hicolor/$res/apps/ghidra.png"
+    done;
+  '';
+
+  postFixup = ''
+    mkdir -p "$out/bin"
+    ln -s "${pkg_path}/ghidraRun" "$out/bin/ghidra"
+
+    wrapProgram "${pkg_path}/support/launch.sh" \
+      --prefix PATH : ${lib.makeBinPath [ openjdk17 ]}
+  '';
+
+  meta = with lib; {
+    description = "A software reverse engineering (SRE) suite of tools developed by NSA's Research Directorate in support of the Cybersecurity mission";
+    homepage = "https://github.com/NationalSecurityAgency/ghidra";
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ck3d govanify mic92 ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/security/ghost/default.nix b/nixpkgs/pkgs/tools/security/ghost/default.nix
new file mode 100644
index 000000000000..124caef45c20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ghost/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ghost";
+  version = "8.0.0";
+
+  disabled = python3.pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "EntySec";
+    repo = "Ghost";
+    rev = version;
+    sha256 = "13p3inw7v55na8438awr692v9vb7zgf5ggxpha9r3m8vfm3sb4iz";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    adb-shell
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "ghost" ];
+
+  meta = with lib; {
+    description = "Android post-exploitation framework";
+    homepage = "https://github.com/EntySec/ghost";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gitjacker/default.nix b/nixpkgs/pkgs/tools/security/gitjacker/default.nix
new file mode 100644
index 000000000000..c233032d9359
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gitjacker/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "gitjacker";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "liamg";
+    repo = "gitjacker";
+    rev = "v${version}";
+    sha256 = "sha256-rEn9FpcRfEt2yGepIPEAO9m8JeVb+nMhYMBWhC/barc=";
+  };
+
+  vendorHash = null;
+
+  propagatedBuildInputs = [ git ];
+
+  nativeCheckInputs = [ git ];
+
+  doCheck = !stdenv.isDarwin;
+
+  preCheck = ''
+    export PATH=$TMPDIR/usr/bin:$PATH
+  '';
+
+  meta = with lib; {
+    description = "Leak git repositories from misconfigured websites";
+    longDescription = ''
+      Gitjacker downloads git repositories and extracts their contents
+      from sites where the .git directory has been mistakenly uploaded.
+      It will still manage to recover a significant portion of a repository
+      even where directory listings are disabled.
+    '';
+    homepage = "https://github.com/liamg/gitjacker";
+    license = with licenses; [ unlicense ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gitleaks/default.nix b/nixpkgs/pkgs/tools/security/gitleaks/default.nix
new file mode 100644
index 000000000000..f1702e4468b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gitleaks/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, gitleaks
+, installShellFiles
+, testers
+}:
+
+buildGoModule rec {
+  pname = "gitleaks";
+  version = "8.18.2";
+
+  src = fetchFromGitHub {
+    owner = "zricethezav";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-+UPlknAwmIeXlosHBXl3qPREV186lfDZGZG/Zx1rxYs=";
+  };
+
+  vendorHash = "sha256-30IJNP4XuV2YNy1TumPUju+GrHFBYi76coy0bJBqDI4=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/zricethezav/gitleaks/v${lib.versions.major version}/cmd.Version=${version}"
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  # With v8 the config tests are are blocking
+  doCheck = false;
+
+  postInstall = ''
+    installShellCompletion --cmd ${pname} \
+      --bash <($out/bin/${pname} completion bash) \
+      --fish <($out/bin/${pname} completion fish) \
+      --zsh <($out/bin/${pname} completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = gitleaks;
+    command = "${pname} version";
+  };
+
+  meta = with lib; {
+    description = "Scan git repos (or files) for secrets";
+    longDescription = ''
+      Gitleaks is a SAST tool for detecting hardcoded secrets like passwords,
+      API keys and tokens in git repos.
+    '';
+    homepage = "https://github.com/zricethezav/gitleaks";
+    changelog = "https://github.com/zricethezav/gitleaks/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnome-keysign/default.nix b/nixpkgs/pkgs/tools/security/gnome-keysign/default.nix
new file mode 100644
index 000000000000..56ea016eda93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnome-keysign/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, fetchFromGitLab
+, python3
+, wrapGAppsHook
+, gobject-introspection
+, gtk3
+, glib
+, gst_all_1
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gnome-keysign";
+  version = "1.3.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "gnome-keysign";
+    rev = version;
+    hash = "sha256-k77z8Yligzs4rHpPckRGcC5qnCHynHQRjdDkzxwt1Ss=";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gobject-introspection
+  ] ++ (with python3.pkgs; [
+    babel
+    babelgladeextractor
+  ]);
+
+  buildInputs = [
+    # TODO: add avahi support
+    gtk3
+    glib
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    (gst_all_1.gst-plugins-good.override { gtkSupport = true; })
+    (gst_all_1.gst-plugins-bad.override { enableZbar = true; }) # for zbar plug-in
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dbus-python
+    future
+    gpgme
+    magic-wormhole
+    pygobject3
+    pybluez
+    qrcode
+    requests
+    twisted
+  ];
+
+  # bunch of linting
+  doCheck = false;
+
+  meta = with lib; {
+    description = "GTK/GNOME application to use GnuPG for signing other peoples’ keys";
+    homepage = "https://wiki.gnome.org/Apps/Keysign";
+    license = licenses.gpl3Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnu-pw-mgr/default.nix b/nixpkgs/pkgs/tools/security/gnu-pw-mgr/default.nix
new file mode 100644
index 000000000000..8478c3748366
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnu-pw-mgr/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, lib, fetchurl, gnulib }:
+
+stdenv.mkDerivation rec {
+  pname = "gnu-pw-mgr";
+  version = "2.7.4";
+  src = fetchurl {
+    url = "https://ftp.gnu.org/gnu/gnu-pw-mgr/${pname}-${version}.tar.xz";
+    sha256 = "0fhwvsmsqpw0vnivarfg63l8pgwqfv7d5wi6l80jpb41dj6qpjz8";
+  };
+
+  buildInputs = [ gnulib ];
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/gnu-pw-mgr/";
+    description = "A password manager designed to make it easy to reconstruct difficult passwords";
+    license = with licenses; [ gpl3Plus lgpl3Plus ];
+    platforms = lib.platforms.linux;
+    maintainers = with maintainers; [ qoelet ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnupg-pkcs11-scd/default.nix b/nixpkgs/pkgs/tools/security/gnupg-pkcs11-scd/default.nix
new file mode 100644
index 000000000000..f7c22cddb5cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg-pkcs11-scd/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, libgpg-error, libassuan, libgcrypt, pkcs11helper,
+  pkg-config, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "gnupg-pkcs11-scd";
+  version = "0.10.0";
+
+  src = fetchurl {
+    url = "https://github.com/alonbl/${pname}/releases/download/${pname}-${version}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-Kb8p53gPkhxtOhH2COKwSDwbtRDFr6hHMJAkndV8Ukk=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pkcs11helper openssl ];
+
+  configureFlags = [
+    "--with-libgpg-error-prefix=${libgpg-error.dev}"
+    "--with-libassuan-prefix=${libassuan.dev}"
+    "--with-libgcrypt-prefix=${libgcrypt.dev}"
+  ];
+
+  meta = with lib; {
+    description = "A smart-card daemon to enable the use of PKCS#11 tokens with GnuPG";
+    longDescription = ''
+    gnupg-pkcs11 is a project to implement a BSD-licensed smart-card
+    daemon to enable the use of PKCS#11 tokens with GnuPG.
+    '';
+    homepage = "https://gnupg-pkcs11.sourceforge.net/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ matthiasbeyer philandstuff ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/gnupg/1.nix b/nixpkgs/pkgs/tools/security/gnupg/1.nix
new file mode 100644
index 000000000000..390665fe44fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/1.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, readline, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnupg";
+  version = "1.4.23";
+
+  src = fetchurl {
+    url = "mirror://gnupg/gnupg/gnupg-${version}.tar.bz2";
+    sha256 = "1fkq4sqldvf6a25mm2qz95swv1qjg464736091w51djiwqbjyin9";
+  };
+
+  buildInputs = [ readline bzip2 ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: ../util/libutil.a(estream-printf.o):/build/gnupg-1.4.23/util/../include/memory.h:100: multiple definition of
+  #     `memory_debug_mode'; gpgsplit.o:/build/gnupg-1.4.23/tools/../include/memory.h:100: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://gnupg.org";
+    description = "Classic (1.4) release of the GNU Privacy Guard, a GPL OpenPGP implementation";
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      The GNU Privacy Guard is the GNU project's complete and free
+      implementation of the OpenPGP standard as defined by RFC4880.  GnuPG
+      "classic" (1.4) is the old standalone version which is most suitable for
+      older or embedded platforms.  GnuPG allows to encrypt and sign your data
+      and communication, features a versatile key management system as well as
+      access modules for all kind of public key directories.  GnuPG, also known
+      as GPG, is a command line tool with features for easy integration with
+      other applications.  A wealth of frontend applications and libraries are
+      available.
+    '';
+    platforms = platforms.all;
+    mainProgram = "gpg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnupg/1compat.nix b/nixpkgs/pkgs/tools/security/gnupg/1compat.nix
new file mode 100644
index 000000000000..6625a4567954
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/1compat.nix
@@ -0,0 +1,31 @@
+{ stdenv, gnupg, coreutils, writeScript }:
+
+stdenv.mkDerivation {
+  pname = "gnupg1compat";
+  version = gnupg.version;
+
+  builder = writeScript "gnupg1compat-builder" ''
+    PATH=${coreutils}/bin
+    # First symlink all top-level dirs
+    mkdir -p $out
+    ln -s "${gnupg}/"* $out
+
+    # Replace bin with directory and symlink it contents
+    rm $out/bin
+    mkdir -p $out/bin
+    ln -s "${gnupg}/bin/"* $out/bin
+
+    # Add symlinks for any executables that end in 2 and lack any non-*2 version
+    for f in $out/bin/*2; do
+      [[ -x $f ]] || continue # ignore failed globs and non-executable files
+      [[ -e ''${f%2} ]] && continue # ignore commands that already have non-*2 versions
+      ln -s -- "''${f##*/}" "''${f%2}"
+    done
+  '';
+
+  meta = gnupg.meta // {
+    description = gnupg.meta.description +
+      " with symbolic links for gpg and gpgv";
+    priority = -1;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnupg/22-allow-import-of-previously-known-keys-even-without-UI.patch b/nixpkgs/pkgs/tools/security/gnupg/22-allow-import-of-previously-known-keys-even-without-UI.patch
new file mode 100644
index 000000000000..e8fbe1688402
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/22-allow-import-of-previously-known-keys-even-without-UI.patch
@@ -0,0 +1,107 @@
+From: Vincent Breitmoser <look@my.amazin.horse>
+Date: Thu, 13 Jun 2019 21:27:42 +0200
+Subject: gpg: allow import of previously known keys, even without UIDs
+
+* g10/import.c (import_one): Accept an incoming OpenPGP certificate that
+has no user id, as long as we already have a local variant of the cert
+that matches the primary key.
+
+--
+
+This fixes two of the three broken tests in import-incomplete.scm.
+
+GnuPG-Bug-id: 4393
+Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+---
+ g10/import.c | 44 +++++++++++---------------------------------
+ 1 file changed, 11 insertions(+), 33 deletions(-)
+
+
+diff --git a/g10/import.c b/g10/import.c
+index cd3363fc7..8f10771db 100644
+--- a/g10/import.c
++++ b/g10/import.c
+@@ -1858,7 +1858,6 @@ import_one_real (ctrl_t ctrl,
+   size_t an;
+   char pkstrbuf[PUBKEY_STRING_SIZE];
+   int merge_keys_done = 0;
+-  int any_filter = 0;
+   KEYDB_HANDLE hd = NULL;
+ 
+   if (r_valid)
+@@ -1896,13 +1895,6 @@ import_one_real (ctrl_t ctrl,
+     }
+ 
+ 
+-  if (!uidnode )
+-    {
+-      if (!silent)
+-        log_error( _("key %s: no user ID\n"), keystr_from_pk(pk));
+-      return 0;
+-    }
+-
+   if (screener && screener (keyblock, screener_arg))
+     {
+       log_error (_("key %s: %s\n"), keystr_from_pk (pk),
+@@ -1977,18 +1969,10 @@ import_one_real (ctrl_t ctrl,
+ 	  }
+     }
+ 
+-  /* Delete invalid parts and bail out if there are no user ids left.  */
+-  if (!delete_inv_parts (ctrl, keyblock, keyid, options, otherrevsigs))
+-    {
+-      if (!silent)
+-        {
+-          log_error( _("key %s: no valid user IDs\n"), keystr_from_pk(pk));
+-          if (!opt.quiet )
+-            log_info(_("this may be caused by a missing self-signature\n"));
+-        }
+-      stats->no_user_id++;
+-      return 0;
+-    }
++  /* Delete invalid parts, and note if we have any valid ones left.
++   * We will later abort import if this key is new but contains
++   * no valid uids.  */
++  delete_inv_parts (ctrl, keyblock, keyid, options, otherrevsigs);
+ 
+   /* Get rid of deleted nodes.  */
+   commit_kbnode (&keyblock);
+@@ -1998,24 +1982,11 @@ import_one_real (ctrl_t ctrl,
+     {
+       apply_keep_uid_filter (ctrl, keyblock, import_filter.keep_uid);
+       commit_kbnode (&keyblock);
+-      any_filter = 1;
+     }
+   if (import_filter.drop_sig)
+     {
+       apply_drop_sig_filter (ctrl, keyblock, import_filter.drop_sig);
+       commit_kbnode (&keyblock);
+-      any_filter = 1;
+-    }
+-
+-  /* If we ran any filter we need to check that at least one user id
+-   * is left in the keyring.  Note that we do not use log_error in
+-   * this case. */
+-  if (any_filter && !any_uid_left (keyblock))
+-    {
+-      if (!opt.quiet )
+-        log_info ( _("key %s: no valid user IDs\n"), keystr_from_pk (pk));
+-      stats->no_user_id++;
+-      return 0;
+     }
+ 
+   /* The keyblock is valid and ready for real import.  */
+@@ -2073,6 +2044,13 @@ import_one_real (ctrl_t ctrl,
+       err = 0;
+       stats->skipped_new_keys++;
+     }
++  else if (err && !any_uid_left (keyblock))
++    {
++      if (!silent)
++        log_info( _("key %s: new key but contains no user ID - skipped\n"), keystr(keyid));
++      err = 0;
++      stats->no_user_id++;
++    }
+   else if (err)  /* Insert this key. */
+     {
+       /* Note: ERR can only be NO_PUBKEY or UNUSABLE_PUBKEY.  */
diff --git a/nixpkgs/pkgs/tools/security/gnupg/22.nix b/nixpkgs/pkgs/tools/security/gnupg/22.nix
new file mode 100644
index 000000000000..59e7bcc13d66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/22.nix
@@ -0,0 +1,106 @@
+{ lib, stdenv, fetchurl, buildPackages
+, pkg-config, texinfo
+, gettext, libassuan, libgcrypt, libgpg-error, libiconv, libksba, npth
+, adns, bzip2, gnutls, libusb1, openldap, readline, sqlite, zlib
+, enableMinimal ? false
+, withPcsc ? !enableMinimal, pcsclite
+, guiSupport ? stdenv.isDarwin, pinentry
+, nixosTests
+}:
+
+assert guiSupport -> enableMinimal == false;
+
+stdenv.mkDerivation rec {
+  pname = "gnupg";
+  version = "2.2.41";
+
+  src = fetchurl {
+    url = "mirror://gnupg/gnupg/${pname}-${version}.tar.bz2";
+    hash = "sha256-E/MpEAel6FRvy3vAxmEM5EqqmzmVBZ1PgUW6Cf1b4+E=";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ pkg-config texinfo ];
+  buildInputs = [
+    gettext libassuan libgcrypt libgpg-error libiconv libksba npth
+  ] ++ lib.optionals (!enableMinimal) [
+    adns bzip2 gnutls libusb1 openldap readline sqlite zlib
+  ];
+
+  patches = [
+    ./fix-libusb-include-path.patch
+    ./tests-add-test-cases-for-import-without-uid.patch
+    ./accept-subkeys-with-a-good-revocation-but-no-self-sig.patch
+    ./22-allow-import-of-previously-known-keys-even-without-UI.patch
+  ];
+
+  postPatch = ''
+    sed -i 's,hkps://hkps.pool.sks-keyservers.net,hkps://keys.openpgp.org,g' configure doc/dirmngr.texi doc/gnupg.info-1
+    # Fix broken SOURCE_DATE_EPOCH usage - remove on the next upstream update
+    sed -i 's/$SOURCE_DATE_EPOCH/''${SOURCE_DATE_EPOCH}/' doc/Makefile.am
+    sed -i 's/$SOURCE_DATE_EPOCH/''${SOURCE_DATE_EPOCH}/' doc/Makefile.in
+    '' + lib.optionalString (stdenv.isLinux && withPcsc) ''
+      sed -i 's,"libpcsclite\.so[^"]*","${lib.getLib pcsclite}/lib/libpcsclite.so",g' scd/scdaemon.c
+    '';
+
+  configureFlags = [
+    "--with-libgpg-error-prefix=${libgpg-error.dev}"
+    "--with-libgcrypt-prefix=${libgcrypt.dev}"
+    "--with-libassuan-prefix=${libassuan.dev}"
+    "--with-ksba-prefix=${libksba.dev}"
+    "--with-npth-prefix=${npth}"
+  ]
+  ++ lib.optional guiSupport "--with-pinentry-pgm=${pinentry}/${pinentry.binaryPath or "bin/pinentry"}"
+  ++ lib.optional stdenv.isDarwin "--disable-ccid-driver";
+
+  postInstall = if enableMinimal
+  then ''
+    rm -r $out/{libexec,sbin,share}
+    for f in $(find $out/bin -type f -not -name gpg)
+    do
+      rm $f
+    done
+  '' else ''
+    mkdir -p $out/lib/systemd/user
+    for f in doc/examples/systemd-user/*.{service,socket} ; do
+      substitute $f $out/lib/systemd/user/$(basename $f) \
+        --replace /usr/bin $out/bin
+    done
+
+    # add gpg2 symlink to make sure git does not break when signing commits
+    ln -s $out/bin/gpg $out/bin/gpg2
+
+    # Make libexec tools available in PATH
+    for f in $out/libexec/; do
+      if [[ "$(basename $f)" == "gpg-wks-client" ]]; then continue; fi
+      ln -s $f $out/bin/$(basename $f)
+    done
+
+    ln -s -t $out/bin $out/libexec/*
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = nixosTests.gnupg;
+
+  meta = with lib; {
+    homepage = "https://gnupg.org";
+    changelog = "https://git.gnupg.org/cgi-bin/gitweb.cgi?p=${pname}.git;a=blob;f=NEWS;hb=refs/tags/${pname}-${version}";
+    description = "LTS release of the GNU Privacy Guard, a GPL OpenPGP implementation";
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      The GNU Privacy Guard is the GNU project's complete and free
+      implementation of the OpenPGP standard as defined by RFC4880.  GnuPG
+      "modern" (2.1) is the latest development with a lot of new features.
+      GnuPG allows to encrypt and sign your data and communication, features a
+      versatile key management system as well as access modules for all kind of
+      public key directories.  GnuPG, also known as GPG, is a command line tool
+      with features for easy integration with other applications.  A wealth of
+      frontend applications and libraries are available.  Version 2 of GnuPG
+      also provides support for S/MIME.
+    '';
+    maintainers = with maintainers; [ fpletz vrthra ];
+    platforms = platforms.all;
+    mainProgram = "gpg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnupg/24-allow-import-of-previously-known-keys-even-without-UI.patch b/nixpkgs/pkgs/tools/security/gnupg/24-allow-import-of-previously-known-keys-even-without-UI.patch
new file mode 100644
index 000000000000..8d4f703a3dd1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/24-allow-import-of-previously-known-keys-even-without-UI.patch
@@ -0,0 +1,107 @@
+From: Vincent Breitmoser <look@my.amazin.horse>
+Date: Thu, 13 Jun 2019 21:27:42 +0200
+Subject: gpg: allow import of previously known keys, even without UIDs
+
+* g10/import.c (import_one): Accept an incoming OpenPGP certificate that
+has no user id, as long as we already have a local variant of the cert
+that matches the primary key.
+
+--
+
+This fixes two of the three broken tests in import-incomplete.scm.
+
+GnuPG-Bug-id: 4393
+Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+---
+ g10/import.c | 44 +++++++++++---------------------------------
+ 1 file changed, 11 insertions(+), 33 deletions(-)
+
+
+diff --git a/g10/import.c b/g10/import.c
+index 9fab46ca6..61896a6bf 100644
+--- a/g10/import.c
++++ b/g10/import.c
+@@ -1954,7 +1954,6 @@ import_one_real (ctrl_t ctrl,
+   size_t an;
+   char pkstrbuf[PUBKEY_STRING_SIZE];
+   int merge_keys_done = 0;
+-  int any_filter = 0;
+   KEYDB_HANDLE hd = NULL;
+ 
+   if (r_valid)
+@@ -1992,13 +1991,6 @@ import_one_real (ctrl_t ctrl,
+     }
+ 
+ 
+-  if (!uidnode)
+-    {
+-      if (!silent)
+-        log_error( _("key %s: no user ID\n"), keystr_from_pk(pk));
+-      return 0;
+-    }
+-
+   if (screener && screener (keyblock, screener_arg))
+     {
+       log_error (_("key %s: %s\n"), keystr_from_pk (pk),
+@@ -2078,18 +2070,10 @@ import_one_real (ctrl_t ctrl,
+ 	  }
+     }
+ 
+-  /* Delete invalid parts and bail out if there are no user ids left.  */
+-  if (!delete_inv_parts (ctrl, keyblock, keyid, options, otherrevsigs))
+-    {
+-      if (!silent)
+-        {
+-          log_error ( _("key %s: no valid user IDs\n"), keystr_from_pk(pk));
+-          if (!opt.quiet)
+-            log_info(_("this may be caused by a missing self-signature\n"));
+-        }
+-      stats->no_user_id++;
+-      return 0;
+-    }
++ /* Delete invalid parts, and note if we have any valid ones left.
++  * We will later abort import if this key is new but contains
++  * no valid uids.  */
++  delete_inv_parts (ctrl, keyblock, keyid, options, otherrevsigs);
+ 
+   /* Get rid of deleted nodes.  */
+   commit_kbnode (&keyblock);
+@@ -2099,24 +2083,11 @@ import_one_real (ctrl_t ctrl,
+     {
+       apply_keep_uid_filter (ctrl, keyblock, import_filter.keep_uid);
+       commit_kbnode (&keyblock);
+-      any_filter = 1;
+     }
+   if (import_filter.drop_sig)
+     {
+       apply_drop_sig_filter (ctrl, keyblock, import_filter.drop_sig);
+       commit_kbnode (&keyblock);
+-      any_filter = 1;
+-    }
+-
+-  /* If we ran any filter we need to check that at least one user id
+-   * is left in the keyring.  Note that we do not use log_error in
+-   * this case. */
+-  if (any_filter && !any_uid_left (keyblock))
+-    {
+-      if (!opt.quiet )
+-        log_info ( _("key %s: no valid user IDs\n"), keystr_from_pk (pk));
+-      stats->no_user_id++;
+-      return 0;
+     }
+ 
+   /* The keyblock is valid and ready for real import.  */
+@@ -2174,6 +2145,13 @@ import_one_real (ctrl_t ctrl,
+       err = 0;
+       stats->skipped_new_keys++;
+     }
++  else if (err && !any_uid_left (keyblock))
++    {
++      if (!silent)
++        log_info( _("key %s: new key but contains no user ID - skipped\n"), keystr(keyid));
++      err = 0;
++      stats->no_user_id++;
++    }
+   else if (err)  /* Insert this key. */
+     {
+       /* Note: ERR can only be NO_PUBKEY or UNUSABLE_PUBKEY.  */
diff --git a/nixpkgs/pkgs/tools/security/gnupg/24-revert-rfc4880bis-defaults.patch b/nixpkgs/pkgs/tools/security/gnupg/24-revert-rfc4880bis-defaults.patch
new file mode 100644
index 000000000000..8bc65ede79c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/24-revert-rfc4880bis-defaults.patch
@@ -0,0 +1,200 @@
+From 1e4f1550996334d2a631a5d769e937d29ace47bb Mon Sep 17 00:00:00 2001
+From: Jakub Jelen <jjelen@redhat.com>
+Date: Thu, 9 Feb 2023 16:38:58 +0100
+Subject: [PATCH gnupg] Revert the introduction of the RFC4880bis draft into
+ defaults
+
+This reverts commit 4583f4fe2 (gpg: Merge --rfc4880bis features into
+--gnupg, 2022-10-31).
+---
+ g10/gpg.c    | 35 ++++++++++++++++++++++++++++++++---
+ g10/keygen.c | 30 ++++++++++++++++++------------
+ 2 files changed, 50 insertions(+), 15 deletions(-)
+
+diff --git a/g10/gpg.c b/g10/gpg.c
+index dcab0a11a..796888013 100644
+--- a/g10/gpg.c
++++ b/g10/gpg.c
+@@ -247,6 +247,7 @@ enum cmd_and_opt_values
+     oGnuPG,
+     oRFC2440,
+     oRFC4880,
++    oRFC4880bis,
+     oOpenPGP,
+     oPGP7,
+     oPGP8,
+@@ -636,6 +637,7 @@ static gpgrt_opt_t opts[] = {
+   ARGPARSE_s_n (oGnuPG, "no-pgp8", "@"),
+   ARGPARSE_s_n (oRFC2440, "rfc2440", "@"),
+   ARGPARSE_s_n (oRFC4880, "rfc4880", "@"),
++  ARGPARSE_s_n (oRFC4880bis, "rfc4880bis", "@"),
+   ARGPARSE_s_n (oOpenPGP, "openpgp", N_("use strict OpenPGP behavior")),
+   ARGPARSE_s_n (oPGP7, "pgp6", "@"),
+   ARGPARSE_s_n (oPGP7, "pgp7", "@"),
+@@ -978,7 +980,6 @@ static gpgrt_opt_t opts[] = {
+   ARGPARSE_s_n (oNoop, "no-allow-multiple-messages", "@"),
+   ARGPARSE_s_s (oNoop, "aead-algo", "@"),
+   ARGPARSE_s_s (oNoop, "personal-aead-preferences","@"),
+-  ARGPARSE_s_n (oNoop, "rfc4880bis", "@"),
+   ARGPARSE_s_n (oNoop, "override-compliance-check", "@"),
+ 
+ 
+@@ -2227,7 +2228,7 @@ static struct gnupg_compliance_option compliance_options[] =
+   {
+     { "gnupg",      oGnuPG },
+     { "openpgp",    oOpenPGP },
+-    { "rfc4880bis", oGnuPG },
++    { "rfc4880bis", oRFC4880bis },
+     { "rfc4880",    oRFC4880 },
+     { "rfc2440",    oRFC2440 },
+     { "pgp6",       oPGP7 },
+@@ -2243,8 +2244,28 @@ static struct gnupg_compliance_option compliance_options[] =
+ static void
+ set_compliance_option (enum cmd_and_opt_values option)
+ {
++  opt.flags.rfc4880bis = 0;  /* Clear because it is initially set.  */
++
+   switch (option)
+     {
++    case oRFC4880bis:
++      opt.flags.rfc4880bis = 1;
++      opt.compliance = CO_RFC4880;
++      opt.flags.dsa2 = 1;
++      opt.flags.require_cross_cert = 1;
++      opt.rfc2440_text = 0;
++      opt.allow_non_selfsigned_uid = 1;
++      opt.allow_freeform_uid = 1;
++      opt.escape_from = 1;
++      opt.not_dash_escaped = 0;
++      opt.def_cipher_algo = 0;
++      opt.def_digest_algo = 0;
++      opt.cert_digest_algo = 0;
++      opt.compress_algo = -1;
++      opt.s2k_mode = 3; /* iterated+salted */
++      opt.s2k_digest_algo = DIGEST_ALGO_SHA256;
++      opt.s2k_cipher_algo = CIPHER_ALGO_AES256;
++      break;
+     case oOpenPGP:
+     case oRFC4880:
+       /* This is effectively the same as RFC2440, but with
+@@ -2288,6 +2309,7 @@ set_compliance_option (enum cmd_and_opt_values option)
+     case oPGP8:  opt.compliance = CO_PGP8;  break;
+     case oGnuPG:
+       opt.compliance = CO_GNUPG;
++      opt.flags.rfc4880bis = 1;
+       break;
+ 
+     case oDE_VS:
+@@ -2491,6 +2513,7 @@ main (int argc, char **argv)
+     opt.emit_version = 0;
+     opt.weak_digests = NULL;
+     opt.compliance = CO_GNUPG;
++    opt.flags.rfc4880bis = 1;
+ 
+     /* Check special options given on the command line.  */
+     orig_argc = argc;
+@@ -3033,6 +3056,7 @@ main (int argc, char **argv)
+           case oOpenPGP:
+           case oRFC2440:
+           case oRFC4880:
++          case oRFC4880bis:
+           case oPGP7:
+           case oPGP8:
+           case oGnuPG:
+@@ -3862,6 +3886,11 @@ main (int argc, char **argv)
+     if( may_coredump && !opt.quiet )
+ 	log_info(_("WARNING: program may create a core file!\n"));
+ 
++    if (!opt.flags.rfc4880bis)
++      {
++        opt.mimemode = 0; /* This will use text mode instead.  */
++      }
++
+     if (eyes_only) {
+       if (opt.set_filename)
+ 	  log_info(_("WARNING: %s overrides %s\n"),
+@@ -4078,7 +4107,7 @@ main (int argc, char **argv)
+     /* Check our chosen algorithms against the list of legal
+        algorithms. */
+ 
+-    if(!GNUPG)
++    if(!GNUPG && !opt.flags.rfc4880bis)
+       {
+ 	const char *badalg=NULL;
+ 	preftype_t badtype=PREFTYPE_NONE;
+diff --git a/g10/keygen.c b/g10/keygen.c
+index a2cfe3ccf..2a1dd1f81 100644
+--- a/g10/keygen.c
++++ b/g10/keygen.c
+@@ -404,7 +404,7 @@ keygen_set_std_prefs (const char *string,int personal)
+ 	      strcat(dummy_string,"S7 ");
+ 	    strcat(dummy_string,"S2 "); /* 3DES */
+ 
+-            if (!openpgp_aead_test_algo (AEAD_ALGO_OCB))
++            if (opt.flags.rfc4880bis && !openpgp_aead_test_algo (AEAD_ALGO_OCB))
+ 	      strcat(dummy_string,"A2 ");
+ 
+             if (personal)
+@@ -889,7 +889,7 @@ keygen_upd_std_prefs (PKT_signature *sig, void *opaque)
+   /* Make sure that the MDC feature flag is set if needed.  */
+   add_feature_mdc (sig,mdc_available);
+   add_feature_aead (sig, aead_available);
+-  add_feature_v5 (sig, 1);
++  add_feature_v5 (sig, opt.flags.rfc4880bis);
+   add_keyserver_modify (sig,ks_modify);
+   keygen_add_keyserver_url(sig,NULL);
+ 
+@@ -3382,7 +3382,10 @@ parse_key_parameter_part (ctrl_t ctrl,
+                 }
+             }
+           else if (!ascii_strcasecmp (s, "v5"))
+-            keyversion = 5;
++            {
++              if (opt.flags.rfc4880bis)
++                keyversion = 5;
++            }
+           else if (!ascii_strcasecmp (s, "v4"))
+             keyversion = 4;
+           else
+@@ -3641,7 +3644,7 @@ parse_key_parameter_part (ctrl_t ctrl,
+  *   ecdsa := Use algorithm ECDSA.
+  *   eddsa := Use algorithm EdDSA.
+  *   ecdh  := Use algorithm ECDH.
+- *   v5    := Create version 5 key
++ *   v5    := Create version 5 key (requires option --rfc4880bis)
+  *
+  * There are several defaults and fallbacks depending on the
+  * algorithm.  PART can be used to select which part of STRING is
+@@ -4513,9 +4516,9 @@ read_parameter_file (ctrl_t ctrl, const char *fname )
+ 	    }
+ 	}
+ 
+-        if ((keywords[i].key == pVERSION
+-             || keywords[i].key == pSUBVERSION))
+-          ; /* Ignore version.  */
++        if (!opt.flags.rfc4880bis && (keywords[i].key == pVERSION
++                                      || keywords[i].key == pSUBVERSION))
++          ; /* Ignore version unless --rfc4880bis is active.  */
+         else
+           {
+             r = xmalloc_clear( sizeof *r + strlen( value ) );
+@@ -4610,11 +4613,14 @@ quickgen_set_para (struct para_data_s *para, int for_subkey,
+       para = r;
+     }
+ 
+-  r = xmalloc_clear (sizeof *r + 20);
+-  r->key = for_subkey? pSUBVERSION : pVERSION;
+-  snprintf (r->u.value, 20, "%d", version);
+-  r->next = para;
+-  para = r;
++  if (opt.flags.rfc4880bis)
++    {
++      r = xmalloc_clear (sizeof *r + 20);
++      r->key = for_subkey? pSUBVERSION : pVERSION;
++      snprintf (r->u.value, 20, "%d", version);
++      r->next = para;
++      para = r;
++    }
+ 
+   if (keytime)
+     {
diff --git a/nixpkgs/pkgs/tools/security/gnupg/24.nix b/nixpkgs/pkgs/tools/security/gnupg/24.nix
new file mode 100644
index 000000000000..95a6d9c0fa5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/24.nix
@@ -0,0 +1,106 @@
+{ lib, stdenv, fetchurl, buildPackages
+, pkg-config, texinfo
+, gettext, libassuan, libgcrypt, libgpg-error, libiconv, libksba, npth
+, adns, bzip2, gnutls, libusb1, openldap, readline, sqlite, zlib
+, enableMinimal ? false
+, withPcsc ? !enableMinimal, pcsclite
+, guiSupport ? stdenv.isDarwin, pinentry
+, withTpm2Tss ? !stdenv.isDarwin && !enableMinimal, tpm2-tss
+, nixosTests
+}:
+
+assert guiSupport -> enableMinimal == false;
+
+stdenv.mkDerivation rec {
+  pname = "gnupg";
+  version = "2.4.4";
+
+  src = fetchurl {
+    url = "mirror://gnupg/gnupg/${pname}-${version}.tar.bz2";
+    hash = "sha256-Z+vgFsqQ+naIzmejh+vYLGJh6ViX23sj3yT/M1voW8Y=";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ pkg-config texinfo ];
+  buildInputs = [
+    gettext libassuan libgcrypt libgpg-error libiconv libksba npth
+  ] ++ lib.optionals (!enableMinimal) [
+    adns bzip2 gnutls libusb1 openldap readline sqlite zlib
+  ] ++ lib.optionals withTpm2Tss [ tpm2-tss ];
+
+  patches = [
+    ./fix-libusb-include-path.patch
+    ./tests-add-test-cases-for-import-without-uid.patch
+    ./accept-subkeys-with-a-good-revocation-but-no-self-sig.patch
+    ./24-allow-import-of-previously-known-keys-even-without-UI.patch
+    ./24-revert-rfc4880bis-defaults.patch
+    # Patch for DoS vuln from https://seclists.org/oss-sec/2022/q3/27
+    ./v3-0001-Disallow-compressed-signatures-and-certificates.patch
+  ];
+
+  postPatch = ''
+    sed -i 's,\(hkps\|https\)://keyserver.ubuntu.com,hkps://keys.openpgp.org,g' configure configure.ac doc/dirmngr.texi doc/gnupg.info-1
+    '' + lib.optionalString (stdenv.isLinux && withPcsc) ''
+      sed -i 's,"libpcsclite\.so[^"]*","${lib.getLib pcsclite}/lib/libpcsclite.so",g' scd/scdaemon.c
+    '';
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--with-libgpg-error-prefix=${libgpg-error.dev}"
+    "--with-libgcrypt-prefix=${libgcrypt.dev}"
+    "--with-libassuan-prefix=${libassuan.dev}"
+    "--with-ksba-prefix=${libksba.dev}"
+    "--with-npth-prefix=${npth}"
+  ]
+  ++ lib.optional guiSupport "--with-pinentry-pgm=${pinentry}/${pinentry.binaryPath or "bin/pinentry"}"
+  ++ lib.optional withTpm2Tss "--with-tss=intel"
+  ++ lib.optional stdenv.isDarwin "--disable-ccid-driver";
+
+  postInstall = if enableMinimal
+  then ''
+    rm -r $out/{libexec,sbin,share}
+    for f in $(find $out/bin -type f -not -name gpg)
+    do
+      rm $f
+    done
+  '' else ''
+    # add gpg2 symlink to make sure git does not break when signing commits
+    ln -s $out/bin/gpg $out/bin/gpg2
+
+    # Make libexec tools available in PATH
+    for f in $out/libexec/; do
+      if [[ "$(basename $f)" == "gpg-wks-client" ]]; then continue; fi
+      ln -s $f $out/bin/$(basename $f)
+    done
+
+    for f in $out/libexec/; do
+      if [[ "$(basename $f)" == "gpg-wks-client" ]]; then continue; fi
+      ln -s $f $out/bin/$(basename $f)
+    done
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = nixosTests.gnupg;
+
+  meta = with lib; {
+    homepage = "https://gnupg.org";
+    changelog = "https://git.gnupg.org/cgi-bin/gitweb.cgi?p=${pname}.git;a=blob;f=NEWS;hb=refs/tags/${pname}-${version}";
+    description = "Modern release of the GNU Privacy Guard, a GPL OpenPGP implementation";
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      The GNU Privacy Guard is the GNU project's complete and free
+      implementation of the OpenPGP standard as defined by RFC4880.  GnuPG
+      "modern" (2.1) is the latest development with a lot of new features.
+      GnuPG allows to encrypt and sign your data and communication, features a
+      versatile key management system as well as access modules for all kind of
+      public key directories.  GnuPG, also known as GPG, is a command line tool
+      with features for easy integration with other applications.  A wealth of
+      frontend applications and libraries are available.  Version 2 of GnuPG
+      also provides support for S/MIME.
+    '';
+    maintainers = with maintainers; [ fpletz vrthra ];
+    platforms = platforms.all;
+    mainProgram = "gpg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnupg/accept-subkeys-with-a-good-revocation-but-no-self-sig.patch b/nixpkgs/pkgs/tools/security/gnupg/accept-subkeys-with-a-good-revocation-but-no-self-sig.patch
new file mode 100644
index 000000000000..5cbec92ae683
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/accept-subkeys-with-a-good-revocation-but-no-self-sig.patch
@@ -0,0 +1,32 @@
+From: Vincent Breitmoser <look@my.amazin.horse>
+Date: Thu, 13 Jun 2019 21:27:43 +0200
+Subject: gpg: accept subkeys with a good revocation but no self-sig during
+ import
+
+* g10/import.c (chk_self_sigs): Set the NODE_GOOD_SELFSIG flag when we
+encounter a valid revocation signature. This allows import of subkey
+revocation signatures, even in the absence of a corresponding subkey
+binding signature.
+
+--
+
+This fixes the remaining test in import-incomplete.scm.
+
+GnuPG-Bug-id: 4393
+Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+---
+ g10/import.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/g10/import.c b/g10/import.c
+index 4fdf248..ee2fed8 100644
+--- a/g10/import.c
++++ b/g10/import.c
+@@ -3613,6 +3613,7 @@ chk_self_sigs (ctrl_t ctrl, kbnode_t keyblock, u32 *keyid, int *non_self)
+                   /* It's valid, so is it newer? */
+                   if (sig->timestamp >= rsdate)
+                     {
++                      knode->flag |= NODE_GOOD_SELFSIG; /* Subkey is valid.  */
+                       if (rsnode)
+                         {
+                           /* Delete the last revocation sig since
diff --git a/nixpkgs/pkgs/tools/security/gnupg/clang.patch b/nixpkgs/pkgs/tools/security/gnupg/clang.patch
new file mode 100644
index 000000000000..842785e5c932
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/clang.patch
@@ -0,0 +1,13 @@
+diff --git a/gl/stdint_.h b/gl/stdint_.h
+index bc27595..303e81a 100644
+--- a/gl/stdint_.h
++++ b/gl/stdint_.h
+@@ -62,7 +62,7 @@
+      int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
+      <inttypes.h> also defines intptr_t and uintptr_t.  */
+ # define _GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H
+-# include <inttypes.h>
++// # include <inttypes.h>
+ # undef _GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H
+ #elif @HAVE_SYS_INTTYPES_H@
+   /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
diff --git a/nixpkgs/pkgs/tools/security/gnupg/fix-libusb-include-path.patch b/nixpkgs/pkgs/tools/security/gnupg/fix-libusb-include-path.patch
new file mode 100644
index 000000000000..f20249b1cad1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/fix-libusb-include-path.patch
@@ -0,0 +1,12 @@
+--- a/configure
++++ b/configure
+@@ -9281,8 +9281,7 @@ fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking libusb include dir" >&5
+ $as_echo_n "checking libusb include dir... " >&6; }
+    usb_incdir_found="no"
+-   for _incdir in "" "/usr/include/libusb-1.0" \
+-       "/usr/local/include/libusb-1.0" "/usr/pkg/include/libusb-1.0"; do
++   for _incdir in "$($PKG_CONFIG --variable=includedir libusb-1.0)/libusb-1.0"; do
+      _libusb_save_cppflags=$CPPFLAGS
+      if test -n "${_incdir}"; then
+        CPPFLAGS="-I${_incdir} ${CPPFLAGS}"
diff --git a/nixpkgs/pkgs/tools/security/gnupg/tests-add-test-cases-for-import-without-uid.patch b/nixpkgs/pkgs/tools/security/gnupg/tests-add-test-cases-for-import-without-uid.patch
new file mode 100644
index 000000000000..37ddeea22495
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/tests-add-test-cases-for-import-without-uid.patch
@@ -0,0 +1,201 @@
+From: Vincent Breitmoser <look@my.amazin.horse>
+Date: Thu, 13 Jun 2019 21:27:41 +0200
+Subject: tests: add test cases for import without uid
+
+This commit adds a test case that does the following, in order:
+- Import of a primary key plus user id
+- Check that import of a subkey works, without a user id present in the
+imported key
+- Check that import of a subkey revocation works, without a user id or
+subkey binding signature present in the imported key
+- Check that import of a primary key revocation works, without a user id
+present in the imported key
+
+--
+
+Note that this test currently fails.  The following changesets will
+fix gpg so that the tests pass.
+
+GnuPG-Bug-id: 4393
+Signed-Off-By: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+---
+ tests/openpgp/Makefile.am                          |  1 +
+ tests/openpgp/import-incomplete.scm                | 68 ++++++++++++++++++++++
+ .../import-incomplete/primary+revocation.asc       |  9 +++
+ .../primary+subkey+sub-revocation.asc              | 10 ++++
+ .../import-incomplete/primary+subkey+sub-sig.asc   | 10 ++++
+ .../openpgp/import-incomplete/primary+uid-sig.asc  | 10 ++++
+ tests/openpgp/import-incomplete/primary+uid.asc    | 10 ++++
+ 7 files changed, 118 insertions(+)
+ create mode 100755 tests/openpgp/import-incomplete.scm
+ create mode 100644 tests/openpgp/import-incomplete/primary+revocation.asc
+ create mode 100644 tests/openpgp/import-incomplete/primary+subkey+sub-revocation.asc
+ create mode 100644 tests/openpgp/import-incomplete/primary+subkey+sub-sig.asc
+ create mode 100644 tests/openpgp/import-incomplete/primary+uid-sig.asc
+ create mode 100644 tests/openpgp/import-incomplete/primary+uid.asc
+
+diff --git a/tests/openpgp/Makefile.am b/tests/openpgp/Makefile.am
+index f6014c9..6423da1 100644
+--- a/tests/openpgp/Makefile.am
++++ b/tests/openpgp/Makefile.am
+@@ -78,6 +78,7 @@ XTESTS = \
+ 	gpgv-forged-keyring.scm \
+ 	armor.scm \
+ 	import.scm \
++	import-incomplete.scm \
+ 	import-revocation-certificate.scm \
+ 	ecc.scm \
+ 	4gb-packet.scm \
+diff --git a/tests/openpgp/import-incomplete.scm b/tests/openpgp/import-incomplete.scm
+new file mode 100755
+index 0000000..727a027
+--- /dev/null
++++ b/tests/openpgp/import-incomplete.scm
+@@ -0,0 +1,68 @@
++#!/usr/bin/env gpgscm
++
++;; Copyright (C) 2016 g10 Code GmbH
++;;
++;; This file is part of GnuPG.
++;;
++;; GnuPG is free software; you can redistribute it and/or modify
++;; it under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 3 of the License, or
++;; (at your option) any later version.
++;;
++;; GnuPG is distributed in the hope that it will be useful,
++;; but WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++;; GNU General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with this program; if not, see <http://www.gnu.org/licenses/>.
++
++(load (in-srcdir "tests" "openpgp" "defs.scm"))
++(setup-environment)
++
++(call-check `(,(tool 'gpg) --import ,(in-srcdir "tests" "openpgp" "import-incomplete" "primary+uid.asc")))
++
++(info "Test import of new subkey, from a certificate without uid")
++(define keyid "573EA710367356BB")
++(call-check `(,(tool 'gpg) --import ,(in-srcdir "tests" "openpgp" "import-incomplete" "primary+subkey+sub-sig.asc")))
++(tr:do
++ (tr:pipe-do
++  (pipe:gpg `(--list-keys --with-colons ,keyid)))
++ (tr:call-with-content
++  (lambda (c)
++    ;; XXX we do not have a regexp library
++    (unless (any (lambda (line)
++		   (and (string-prefix? line "sub:")
++			(string-contains? line "573EA710367356BB")))
++		 (string-split-newlines c))
++	    (exit 1)))))
++
++(info "Test import of a subkey revocation, from a certificate without uid")
++(define keyid "573EA710367356BB")
++(call-check `(,(tool 'gpg) --import ,(in-srcdir "tests" "openpgp" "import-incomplete" "primary+subkey+sub-revocation.asc")))
++(tr:do
++ (tr:pipe-do
++  (pipe:gpg `(--list-keys --with-colons ,keyid)))
++ (tr:call-with-content
++  (lambda (c)
++    ;; XXX we do not have a regexp library
++    (unless (any (lambda (line)
++		   (and (string-prefix? line "sub:r:")
++			(string-contains? line "573EA710367356BB")))
++		 (string-split-newlines c))
++	    (exit 1)))))
++
++(info "Test import of revocation, from a certificate without uid")
++(call-check `(,(tool 'gpg) --import ,(in-srcdir "tests" "openpgp" "import-incomplete" "primary+revocation.asc")))
++(tr:do
++ (tr:pipe-do
++  (pipe:gpg `(--list-keys --with-colons ,keyid)))
++ (tr:call-with-content
++  (lambda (c)
++    ;; XXX we do not have a regexp library
++    (unless (any (lambda (line)
++		   (and (string-prefix? line "pub:r:")
++			(string-contains? line "0843DA969AA8DAFB")))
++		 (string-split-newlines c))
++	    (exit 1)))))
++
+diff --git a/tests/openpgp/import-incomplete/primary+revocation.asc b/tests/openpgp/import-incomplete/primary+revocation.asc
+new file mode 100644
+index 0000000..6b7b608
+--- /dev/null
++++ b/tests/openpgp/import-incomplete/primary+revocation.asc
+@@ -0,0 +1,9 @@
++-----BEGIN PGP PUBLIC KEY BLOCK-----
++Comment: [E] primary key, revocation signature over primary (no user ID)
++
++mDMEXNmUGRYJKwYBBAHaRw8BAQdA75R8VlchvmEd2Iz/8l07RoKUaUPDB71Ao1zZ
++631VAN2IeAQgFggAIBYhBLRpj5W82H/gSMzKKQhD2paaqNr7BQJc2ZQZAh0AAAoJ
++EAhD2paaqNr7qAwA/2jBUpnN0BxwRO/4CrxvrLIsL+C9aSXJUOTv8XkP4lvtAQD3
++XsDFfFNgEueiTfF7HtOGt5LPmRqVvUpQSMVgJJW6CQ==
++=tM90
++-----END PGP PUBLIC KEY BLOCK-----
+diff --git a/tests/openpgp/import-incomplete/primary+subkey+sub-revocation.asc b/tests/openpgp/import-incomplete/primary+subkey+sub-revocation.asc
+new file mode 100644
+index 0000000..83a51a5
+--- /dev/null
++++ b/tests/openpgp/import-incomplete/primary+subkey+sub-revocation.asc
+@@ -0,0 +1,10 @@
++-----BEGIN PGP PUBLIC KEY BLOCK-----
++Comment: [D] primary key, subkey, subkey revocation (no user ID)
++
++mDMEXNmUGRYJKwYBBAHaRw8BAQdA75R8VlchvmEd2Iz/8l07RoKUaUPDB71Ao1zZ
++631VAN24OARc2ZQhEgorBgEEAZdVAQUBAQdABsd5ha0AWXdXcSmfeiWIfrNcGqQK
++j++lwwWDAOlkVicDAQgHiHgEKBYIACAWIQS0aY+VvNh/4EjMyikIQ9qWmqja+wUC
++XNmnkAIdAgAKCRAIQ9qWmqja+ylaAQDmIKf86BJEq4OpDqU+V9D+wn2cyuxbyWVQ
++3r9LiL9qNwD/QAjyrhSN8L3Mfq+wdTHo5i0yB9ZCCpHLXSbhCqfWZwQ=
++=dwx2
++-----END PGP PUBLIC KEY BLOCK-----
+diff --git a/tests/openpgp/import-incomplete/primary+subkey+sub-sig.asc b/tests/openpgp/import-incomplete/primary+subkey+sub-sig.asc
+new file mode 100644
+index 0000000..dc47a02
+--- /dev/null
++++ b/tests/openpgp/import-incomplete/primary+subkey+sub-sig.asc
+@@ -0,0 +1,10 @@
++-----BEGIN PGP PUBLIC KEY BLOCK-----
++Comment: [B] primary key, subkey, subkey binding sig (no user ID)
++
++mDMEXNmUGRYJKwYBBAHaRw8BAQdA75R8VlchvmEd2Iz/8l07RoKUaUPDB71Ao1zZ
++631VAN24OARc2ZQhEgorBgEEAZdVAQUBAQdABsd5ha0AWXdXcSmfeiWIfrNcGqQK
++j++lwwWDAOlkVicDAQgHiHgEGBYIACAWIQS0aY+VvNh/4EjMyikIQ9qWmqja+wUC
++XNmUIQIbDAAKCRAIQ9qWmqja++vFAP98G1L+1/rWTGbsnxOAV2RocBYIroAvsbkR
++Ly6FdP8YNwEA7jOgT05CoKIe37MstpOz23mM80AK369Ca3JMmKKCQgg=
++=xuDu
++-----END PGP PUBLIC KEY BLOCK-----
+diff --git a/tests/openpgp/import-incomplete/primary+uid-sig.asc b/tests/openpgp/import-incomplete/primary+uid-sig.asc
+new file mode 100644
+index 0000000..134607d
+--- /dev/null
++++ b/tests/openpgp/import-incomplete/primary+uid-sig.asc
+@@ -0,0 +1,10 @@
++-----BEGIN PGP PUBLIC KEY BLOCK-----
++Comment: [C] primary key and self-sig expiring in 2024 (no user ID)
++
++mDMEXNmUGRYJKwYBBAHaRw8BAQdA75R8VlchvmEd2Iz/8l07RoKUaUPDB71Ao1zZ
++631VAN2IlgQTFggAPgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBLRpj5W8
++2H/gSMzKKQhD2paaqNr7BQJc2ZR1BQkJZgHcAAoJEAhD2paaqNr79soA/0lWkUsu
++3NLwgbni6EzJxnTzgeNMpljqNpipHAwfix9hAP93AVtFdC8g7hdUZxawobl9lnSN
++9ohXOEBWvdJgVv2YAg==
++=KWIK
++-----END PGP PUBLIC KEY BLOCK-----
+diff --git a/tests/openpgp/import-incomplete/primary+uid.asc b/tests/openpgp/import-incomplete/primary+uid.asc
+new file mode 100644
+index 0000000..055f300
+--- /dev/null
++++ b/tests/openpgp/import-incomplete/primary+uid.asc
+@@ -0,0 +1,10 @@
++-----BEGIN PGP PUBLIC KEY BLOCK-----
++Comment: [A] primary key, user ID, and self-sig expiring in 2021
++
++mDMEXNmUGRYJKwYBBAHaRw8BAQdA75R8VlchvmEd2Iz/8l07RoKUaUPDB71Ao1zZ
++631VAN20CHRlc3Qga2V5iJYEExYIAD4WIQS0aY+VvNh/4EjMyikIQ9qWmqja+wUC
++XNmUGQIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRAIQ9qWmqja
+++0G1AQDdQiwhXxjXLMqoth+D4SigVHTJK8ORwifzsy3UE7mPGwD/aZ67XbAF/lgI
++kv2O1Jo0u9BL9RNNF+L0DM7rAFbfMAs=
++=1eII
++-----END PGP PUBLIC KEY BLOCK-----
diff --git a/nixpkgs/pkgs/tools/security/gnupg/v3-0001-Disallow-compressed-signatures-and-certificates.patch b/nixpkgs/pkgs/tools/security/gnupg/v3-0001-Disallow-compressed-signatures-and-certificates.patch
new file mode 100644
index 000000000000..267085dff4c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/v3-0001-Disallow-compressed-signatures-and-certificates.patch
@@ -0,0 +1,216 @@
+From 459b61fa21db755d6c879c3ef9ab85b3d1786c9f Mon Sep 17 00:00:00 2001
+From: Demi Marie Obenour <demi () invisiblethingslab com>
+Date: Fri, 27 May 2022 19:51:19 -0400
+Subject: [PATCH GnuPG v3] Disallow compressed signatures and certificates
+
+Compressed packets have significant attack surface, due to the potential
+for both denial of service (zip bombs and the like) and for code
+execution via memory corruption vulnerabilities in the decompressor.
+Furthermore, I am not aware of any implementation that uses them in keys
+or detached signatures.  Therefore, disallow their use in such contexts
+entirely.  This includes signatures that are part of a cleartext-signed
+message.
+
+When parsing detached signatures, forbid any packet that is not a
+signature or marker packet.  When parsing keys, return an error when
+encountering a compressed packet, instead of decompressing the packet.
+
+Furthermore, certificates, keys, and signatures are not allowed to
+contain partial-length or indeterminate-length packets.  Reject those in
+parse_packet, rather than activating the partial-length filter code.
+This is not (yet) implemented for cleartext-signed messages, as these
+messages are internally represented as inline-signed messages.
+
+GnuPG-bug-id: T5993
+Signed-off-by: Demi Marie Obenour <demiobenour () gmail com>
+---
+ g10/import.c       | 18 ++----------------
+ g10/mainproc.c     | 24 +++++++++++++++++++++---
+ g10/packet.h       |  2 ++
+ g10/parse-packet.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
+ 4 files changed, 68 insertions(+), 20 deletions(-)
+
+diff --git a/g10/import.c b/g10/import.c
+index bb0bf67934a8316130cde182cd43d56353e0171d..a8136351f6f7dae8c65634ed8e1c242d323e2009 100644
+--- a/g10/import.c
++++ b/g10/import.c
+@@ -1042,22 +1042,8 @@ read_block( IOBUF a, unsigned int options,
+       switch (pkt->pkttype)
+         {
+         case PKT_COMPRESSED:
+-          if (check_compress_algo (pkt->pkt.compressed->algorithm))
+-            {
+-              rc = GPG_ERR_COMPR_ALGO;
+-              goto ready;
+-            }
+-          else
+-            {
+-              compress_filter_context_t *cfx = xmalloc_clear( sizeof *cfx );
+-              pkt->pkt.compressed->buf = NULL;
+-              if (push_compress_filter2 (a, cfx,
+-                                         pkt->pkt.compressed->algorithm, 1))
+-                xfree (cfx); /* e.g. in case of compression_algo NONE.  */
+-            }
+-          free_packet (pkt, &parsectx);
+-          init_packet(pkt);
+-          break;
++          rc = GPG_ERR_UNEXPECTED;
++          goto ready;
+ 
+         case PKT_RING_TRUST:
+           /* Skip those packets unless we are in restore mode.  */
+diff --git a/g10/mainproc.c b/g10/mainproc.c
+index af11877aa257e46662c42b6ff573ee01c3ad1547..3629fc921b742afd131e8d8e2664b201095990f0 100644
+--- a/g10/mainproc.c
++++ b/g10/mainproc.c
+@@ -152,6 +152,7 @@ add_onepass_sig (CTX c, PACKET *pkt)
+ {
+   kbnode_t node;
+ 
++  log_assert(!(c->sigs_only && c->signed_data.used));
+   if (c->list) /* Add another packet. */
+     add_kbnode (c->list, new_kbnode (pkt));
+   else /* Insert the first one.  */
+@@ -1076,8 +1077,16 @@ proc_compressed (CTX c, PACKET *pkt)
+   int rc;
+ 
+   /*printf("zip: compressed data packet\n");*/
+-  if (c->sigs_only)
+-    rc = handle_compressed (c->ctrl, c, zd, proc_compressed_cb, c);
++  if ( literals_seen )
++    {
++      log_error ("Compressed packet follows literal data packet\n");
++      rc = GPG_ERR_UNEXPECTED;
++    }
++  else if ( c->sigs_only )
++    {
++      log_assert(!c->signed_data.used);
++      rc = handle_compressed (c->ctrl, c, zd, proc_compressed_cb, c);
++    }
+   else if( c->encrypt_only )
+     rc = handle_compressed (c->ctrl, c, zd, proc_encrypt_cb, c);
+   else
+@@ -1596,6 +1605,7 @@ do_proc_packets (CTX c, iobuf_t a)
+   c->iobuf = a;
+   init_packet(pkt);
+   init_parse_packet (&parsectx, a);
++  parsectx.sigs_only = c->sigs_only && c->signed_data.used;
+   while ((rc=parse_packet (&parsectx, pkt)) != -1)
+     {
+       any_data = 1;
+@@ -1607,6 +1617,12 @@ do_proc_packets (CTX c, iobuf_t a)
+           if (gpg_err_code (rc) == GPG_ERR_INV_PACKET
+               && opt.list_packets == 0)
+             break;
++
++          if (gpg_err_code (rc) == GPG_ERR_UNEXPECTED)
++            {
++              write_status_text( STATUS_UNEXPECTED, "0" );
++              goto leave;
++            }
+           continue;
+ 	}
+       newpkt = -1;
+@@ -1644,7 +1660,9 @@ do_proc_packets (CTX c, iobuf_t a)
+             case PKT_COMPRESSED:  rc = proc_compressed (c, pkt); break;
+             case PKT_ONEPASS_SIG: newpkt = add_onepass_sig (c, pkt); break;
+             case PKT_GPG_CONTROL: newpkt = add_gpg_control (c, pkt); break;
+-            default: newpkt = 0; break;
++            default:
++	      log_assert(!c->signed_data.used);
++	      newpkt = 0; break;
+ 	    }
+ 	}
+       else if (c->encrypt_only)
+diff --git a/g10/packet.h b/g10/packet.h
+index 5a14015a16c872fe7b0b15468598daf7a05ffc02..82dfe786b46051491e7015e64441678140defa9e 100644
+--- a/g10/packet.h
++++ b/g10/packet.h
+@@ -657,6 +657,7 @@ struct parse_packet_ctx_s
+   int free_last_pkt; /* Indicates that LAST_PKT must be freed.  */
+   int skip_meta;     /* Skip ring trust packets.  */
+   unsigned int n_parsed_packets;	/* Number of parsed packets.  */
++  int sigs_only;     /* Only accept detached signature packets */
+ };
+ typedef struct parse_packet_ctx_s *parse_packet_ctx_t;
+ 
+@@ -667,6 +668,7 @@ typedef struct parse_packet_ctx_s *parse_packet_ctx_t;
+     (a)->free_last_pkt = 0;         \
+     (a)->skip_meta = 0;             \
+     (a)->n_parsed_packets = 0;      \
++    (a)->sigs_only = 0;             \
+   } while (0)
+ 
+ #define deinit_parse_packet(a) do { \
+diff --git a/g10/parse-packet.c b/g10/parse-packet.c
+index cea1f7ebc5daec3863ae963c1ab25500f86796fe..dca66ff427ea6778e536782ec6bda83584877342 100644
+--- a/g10/parse-packet.c
++++ b/g10/parse-packet.c
+@@ -738,6 +738,20 @@ parse (parse_packet_ctx_t ctx, PACKET *pkt, int onlykeypkts, off_t * retpos,
+             case PKT_ENCRYPTED_MDC:
+             case PKT_ENCRYPTED_AEAD:
+             case PKT_COMPRESSED:
++              if (ctx->sigs_only)
++                {
++                  log_error (_("partial length packet of type %d in detached"
++                               " signature\n"), pkttype);
++                  rc = gpg_error (GPG_ERR_UNEXPECTED);
++                  goto leave;
++                }
++              if (onlykeypkts)
++                {
++                  log_error (_("partial length packet of type %d in keyring\n"),
++                             pkttype);
++                  rc = gpg_error (GPG_ERR_UNEXPECTED);
++                  goto leave;
++                }
+               iobuf_set_partial_body_length_mode (inp, c & 0xff);
+               pktlen = 0;	/* To indicate partial length.  */
+               partial = 1;
+@@ -775,6 +789,20 @@ parse (parse_packet_ctx_t ctx, PACKET *pkt, int onlykeypkts, off_t * retpos,
+ 	      rc = gpg_error (GPG_ERR_INV_PACKET);
+ 	      goto leave;
+ 	    }
++	  else if (ctx->sigs_only)
++	    {
++	      log_error (_("indeterminate length packet of type %d in detached"
++                           " signature\n"), pkttype);
++	      rc = gpg_error (GPG_ERR_UNEXPECTED);
++	      goto leave;
++	    }
++	  else if (onlykeypkts)
++	    {
++	      log_error (_("indeterminate length packet of type %d in"
++                           " keyring\n"), pkttype);
++	      rc = gpg_error (GPG_ERR_UNEXPECTED);
++	      goto leave;
++	    }
+ 	}
+       else
+ 	{
+@@ -828,7 +856,21 @@ parse (parse_packet_ctx_t ctx, PACKET *pkt, int onlykeypkts, off_t * retpos,
+       goto leave;
+     }
+ 
+-  if (with_uid && pkttype == PKT_USER_ID)
++  if (ctx->sigs_only)
++    switch (pkttype)
++      {
++      case PKT_SIGNATURE:
++      case PKT_MARKER:
++	break;
++      default:
++        log_error(_("Packet type %d not allowed in detached signature\n"),
++                  pkttype);
++	iobuf_skip_rest (inp, pktlen, partial);
++	*skip = 1;
++	rc = GPG_ERR_UNEXPECTED;
++	goto leave;
++      }
++  else if (with_uid && pkttype == PKT_USER_ID)
+     /* If ONLYKEYPKTS is set to 2, then we never skip user id packets,
+        even if DO_SKIP is set.  */
+     ;
+-- 
+2.36.1
+
diff --git a/nixpkgs/pkgs/tools/security/go-cve-search/default.nix b/nixpkgs/pkgs/tools/security/go-cve-search/default.nix
new file mode 100644
index 000000000000..d4b231c63a18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/go-cve-search/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "go-cve-search";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "s-index";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ofa6lfA3XKj70YM6AVNKRgGI53teK7OB09luAom8HpQ=";
+  };
+
+  vendorHash = "sha256-QXYjLPrfIPcZE8UTcE1kR9QQIusR/rAJG+e/IQ4P0PU=";
+
+  # Tests requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A lightweight CVE search tool";
+    longDescription = ''
+      go-cve-search is a lightweight tool to search CVE (Common Vulnerabilities
+      and Exposures).
+    '';
+    homepage = "https://github.com/s-index/go-cve-search";
+    changelog = "https://github.com/s-index/go-cve-search/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/go-dork/default.nix b/nixpkgs/pkgs/tools/security/go-dork/default.nix
new file mode 100644
index 000000000000..a92f8957e3ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/go-dork/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "go-dork";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "dwisiswant0";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Q7ECwXH9q6qWba2URh3LjMx8g6vPF1DWfKnmXej7ht4=";
+  };
+
+  vendorHash = "sha256-6V58RRRPamBMDAf0gg4sQMQkoD5dWauCFtPrwf5EasI=";
+
+  meta = with lib; {
+    description = "Dork scanner";
+    homepage = "https://github.com/dwisiswant0/go-dork";
+    changelog = "https://github.com/dwisiswant0/go-dork/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "go-dork";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/go-exploitdb/default.nix b/nixpkgs/pkgs/tools/security/go-exploitdb/default.nix
new file mode 100644
index 000000000000..d400cd22a6f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/go-exploitdb/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "go-exploitdb";
+  version = "0.4.6";
+
+  src = fetchFromGitHub {
+    owner = "vulsio";
+    repo = "go-exploitdb";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-xQQnMlj5dxvvGPqzMyMVloJQe5qY2EPQkYaw3RpgxjI=";
+  };
+
+  vendorHash = "sha256-1HvhphLJH0572au2iSXVjN35JCpZr1hesnMrIpdOBRc=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/vulsio/go-exploitdb/config.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Tool for searching Exploits from Exploit Databases, etc";
+    homepage = "https://github.com/vulsio/go-exploitdb";
+    changelog = "https://github.com/vulsio/go-exploitdb/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/go365/default.nix b/nixpkgs/pkgs/tools/security/go365/default.nix
new file mode 100644
index 000000000000..381df6d74629
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/go365/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "go365";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "optiv";
+    repo = "Go365";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-jmsbZrqc6XogUhuEWcU59v88id2uLqN/68URwylzWZI=";
+  };
+
+  vendorHash = "sha256-Io+69kIW4DV2EkA73pjaTcTRbDSYBf61R7F+141Jojs=";
+
+  postInstall = lib.optionalString (!stdenv.isDarwin) ''
+    mv $out/bin/Go365 $out/bin/$pname
+  '';
+
+  meta = with lib; {
+    description = "Office 365 enumeration tool";
+    homepage = "https://github.com/optiv/Go365";
+    changelog = "https://github.com/optiv/Go365/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "Go365";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/goblob/default.nix b/nixpkgs/pkgs/tools/security/goblob/default.nix
new file mode 100644
index 000000000000..401a655d65ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/goblob/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "goblob";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "Macmod";
+    repo = "goblob";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-FnSlfLi40VwDyQY77PvhV7EbhUDs1uGx0VsgP8HgKTw=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Enumeration tool for publicly exposed Azure Storage blobs";
+    homepage = "https://github.com/Macmod/goblob";
+    changelog = "https://github.com/Macmod/goblob/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gobuster/default.nix b/nixpkgs/pkgs/tools/security/gobuster/default.nix
new file mode 100644
index 000000000000..878fa576b4cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gobuster/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gobuster";
+  version = "3.6.0";
+
+  src = fetchFromGitHub {
+    owner = "OJ";
+    repo = "gobuster";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-LZL9Zje2u0v6iAQinfjflvusV57ys5J5Il6Q7br3Suc=";
+  };
+
+  vendorHash = "sha256-w+G5PsWXhKipjYIHtz633sia+Wg9FSFVpcugEl8fp0E=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Tool used to brute-force URIs, DNS subdomains, Virtual Host names on target web servers";
+    homepage = "https://github.com/OJ/gobuster";
+    changelog = "https://github.com/OJ/gobuster/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab pamplemousse ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gomapenum/default.nix b/nixpkgs/pkgs/tools/security/gomapenum/default.nix
new file mode 100644
index 000000000000..6e1da08d14f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gomapenum/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gomapenum";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "nodauf";
+    repo = "GoMapEnum";
+    rev = "v${version}";
+    sha256 = "sha256-a0JpHk5pUe+MkcmJl871JwkOfFDg3S4yOzFIeXCReLE=";
+  };
+
+  vendorHash = "sha256-5C0dDY/42H8oHNdQaKYiuqpi2QqqgHC7VMO/0kFAofY=";
+
+  postInstall = ''
+    mv $out/bin/src $out/bin/$pname
+  '';
+
+  meta = with lib; {
+    description = "Tools for user enumeration and password bruteforce";
+    homepage = "https://github.com/nodauf/GoMapEnum";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gopass/default.nix b/nixpkgs/pkgs/tools/security/gopass/default.nix
new file mode 100644
index 000000000000..6573c511474a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gopass/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, makeWrapper
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, git
+, gnupg
+, xclip
+, wl-clipboard
+, passAlias ? false
+}:
+
+buildGoModule rec {
+  pname = "gopass";
+  version = "1.15.11";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  src = fetchFromGitHub {
+    owner = "gopasspw";
+    repo = "gopass";
+    rev = "v${version}";
+    hash = "sha256-wgrZkRRMEWA9Lk9eW+iGi+dZNYfDVhRu1phimZC079c=";
+  };
+
+  vendorHash = "sha256-TvohrwSFVv5ylVRd6jPdRDyRRhqqWa0xey9KN9vtyY8=";
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" "-X main.commit=${src.rev}" ];
+
+  wrapperPath = lib.makeBinPath (
+    [
+      git
+      gnupg
+      xclip
+    ] ++ lib.optional stdenv.isLinux wl-clipboard
+  );
+
+  postInstall = ''
+    installManPage gopass.1
+    installShellCompletion --cmd gopass \
+      --zsh zsh.completion \
+      --bash bash.completion \
+      --fish fish.completion
+  '' + lib.optionalString passAlias ''
+    ln -s $out/bin/gopass $out/bin/pass
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/gopass \
+      --prefix PATH : "${wrapperPath}" \
+      --set GOPASS_NO_REMINDER true
+  '';
+  passthru = {
+    inherit wrapperPath;
+  };
+
+  meta = with lib; {
+    description = "The slightly more awesome Standard Unix Password Manager for Teams. Written in Go";
+    homepage = "https://www.gopass.pw/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rvolosatovs sikmir ];
+    changelog = "https://github.com/gopasspw/gopass/blob/v${version}/CHANGELOG.md";
+
+    longDescription = ''
+      gopass is a rewrite of the pass password manager in Go with the aim of
+      making it cross-platform and adding additional features. Our target
+      audience are professional developers and sysadmins (and especially teams
+      of those) who are well versed with a command line interface. One explicit
+      goal for this project is to make it more approachable to non-technical
+      users. We go by the UNIX philosophy and try to do one thing and do it
+      well, providing a stellar user experience and a sane, simple interface.
+    '';
+    mainProgram = "gopass";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gopass/git-credential.nix b/nixpkgs/pkgs/tools/security/gopass/git-credential.nix
new file mode 100644
index 000000000000..8654d05d9d13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gopass/git-credential.nix
@@ -0,0 +1,42 @@
+{ lib
+, makeWrapper
+, buildGoModule
+, fetchFromGitHub
+, gopass
+}:
+
+buildGoModule rec {
+  pname = "git-credential-gopass";
+  version = "1.15.11";
+
+  src = fetchFromGitHub {
+    owner = "gopasspw";
+    repo = "git-credential-gopass";
+    rev = "v${version}";
+    hash = "sha256-qnWgrpcj3DZQu5haP/5xqoO7eogkRjBmc8XpgFFNT6I=";
+  };
+
+  vendorHash = "sha256-bit4+YgQ+Y/TA2q7KdZwYTE3ZKBwL6tUam+tHzBMiQw=";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}" "-X main.commit=${src.rev}"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/git-credential-gopass \
+      --prefix PATH : "${lib.makeBinPath [ gopass ]}"
+  '';
+
+  meta = with lib; {
+    description = "Manage git credentials using gopass";
+    homepage = "https://github.com/gopasspw/git-credential-gopass";
+    changelog = "https://github.com/gopasspw/git-credential-gopass/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ benneti ];
+    mainProgram = "git-credential-gopass";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gopass/hibp.nix b/nixpkgs/pkgs/tools/security/gopass/hibp.nix
new file mode 100644
index 000000000000..11ee0a94dbf9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gopass/hibp.nix
@@ -0,0 +1,42 @@
+{ lib
+, makeWrapper
+, buildGoModule
+, fetchFromGitHub
+, gopass
+}:
+
+buildGoModule rec {
+  pname = "gopass-hibp";
+  version = "1.15.11";
+
+  src = fetchFromGitHub {
+    owner = "gopasspw";
+    repo = "gopass-hibp";
+    rev = "v${version}";
+    hash = "sha256-2XhvUIa8RxQ6CAKPGpL8/rBiJSX/WsSGtIpaHLIBM1E=";
+  };
+
+  vendorHash = "sha256-i9PUqircNf+jz5gcr3rVIR4tD9/bkV2h6LiDFhjiLaw=";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}" "-X main.commit=${src.rev}"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/gopass-hibp \
+      --prefix PATH : "${lib.makeBinPath [ gopass ]}"
+  '';
+
+  meta = with lib; {
+    description = "Gopass haveibeenpwnd.com integration";
+    homepage = "https://github.com/gopasspw/gopass-hibp";
+    changelog = "https://github.com/gopasspw/gopass-hibp/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    mainProgram = "gopass-hibp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gopass/jsonapi.nix b/nixpkgs/pkgs/tools/security/gopass/jsonapi.nix
new file mode 100644
index 000000000000..37ac46356c3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gopass/jsonapi.nix
@@ -0,0 +1,43 @@
+{ lib
+, makeWrapper
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, gopass
+}:
+
+buildGoModule rec {
+  pname = "gopass-jsonapi";
+  version = "1.15.11";
+
+  src = fetchFromGitHub {
+    owner = "gopasspw";
+    repo = "gopass-jsonapi";
+    rev = "v${version}";
+    hash = "sha256-wJlnm+sgFg55LW4RWGjcT538DgNhJtFjwgwgqwLWH50=";
+  };
+
+  vendorHash = "sha256-qRmPO2WM9RD43twl5a47IT3xC1LGFwNF99ojIU2xg6A=";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}" "-X main.commit=${src.rev}"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/gopass-jsonapi \
+      --prefix PATH : "${gopass.wrapperPath}"
+  '';
+
+  meta = with lib; {
+    description = "Enables communication with gopass via JSON messages";
+    homepage = "https://github.com/gopasspw/gopass-jsonapi";
+    changelog = "https://github.com/gopasspw/gopass-jsonapi/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ maxhbr ];
+    mainProgram = "gopass-jsonapi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gopass/summon.nix b/nixpkgs/pkgs/tools/security/gopass/summon.nix
new file mode 100644
index 000000000000..97aed94c05fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gopass/summon.nix
@@ -0,0 +1,42 @@
+{ lib
+, makeWrapper
+, buildGoModule
+, fetchFromGitHub
+, gopass
+}:
+
+buildGoModule rec {
+  pname = "gopass-summon-provider";
+  version = "1.15.11";
+
+  src = fetchFromGitHub {
+    owner = "gopasspw";
+    repo = "gopass-summon-provider";
+    rev = "v${version}";
+    hash = "sha256-rbfzmr6HtGUBCjO9jkocSghTAN+aNXTsSsMC38HqgW0=";
+  };
+
+  vendorHash = "sha256-bit4+YgQ+Y/TA2q7KdZwYTE3ZKBwL6tUam+tHzBMiQw=";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}" "-X main.commit=${src.rev}"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/gopass-summon-provider \
+      --prefix PATH : "${lib.makeBinPath [ gopass ]}"
+  '';
+
+  meta = with lib; {
+    description = "Gopass Summon Provider";
+    homepage = "https://github.com/gopasspw/gopass-summon-provider";
+    changelog = "https://github.com/gopasspw/gopass-summon-provider/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    mainProgram = "gopass-summon-provider";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gorilla-bin/default.nix b/nixpkgs/pkgs/tools/security/gorilla-bin/default.nix
new file mode 100644
index 000000000000..388996c62fb5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gorilla-bin/default.nix
@@ -0,0 +1,41 @@
+{ fetchurl, makeWrapper, patchelf, lib, stdenv, libXft, libX11, freetype, fontconfig, libXrender, libXScrnSaver, libXext }:
+
+stdenv.mkDerivation rec {
+  pname = "gorilla-bin";
+  version = "1.5.3.7";
+
+  src = fetchurl {
+    name = "gorilla1537_64.bin";
+    url = "http://gorilla.dp100.com/downloads/gorilla1537_64.bin";
+    sha256 = "19ir6x4c01825hpx2wbbcxkk70ymwbw4j03v8b2xc13ayylwzx0r";
+  };
+
+  nativeBuildInputs = [ patchelf makeWrapper ];
+
+  unpackCmd = ''
+    mkdir gorilla;
+    cp $curSrc gorilla/gorilla-${version};
+  '';
+
+  installPhase = let
+    interpreter = "$(< \"$NIX_CC/nix-support/dynamic-linker\")";
+    libPath = lib.makeLibraryPath [ libXft libX11 freetype fontconfig libXrender libXScrnSaver libXext ];
+  in ''
+    mkdir -p $out/opt/password-gorilla
+    mkdir -p $out/bin
+    cp gorilla-${version} $out/opt/password-gorilla
+    chmod ugo+x $out/opt/password-gorilla/gorilla-${version}
+    patchelf --set-interpreter "${interpreter}" "$out/opt/password-gorilla/gorilla-${version}"
+    makeWrapper "$out/opt/password-gorilla/gorilla-${version}" "$out/bin/gorilla" \
+      --prefix LD_LIBRARY_PATH : "${libPath}"
+  '';
+
+  meta = {
+    description = "Password Gorilla is a Tk based password manager";
+    homepage = "https://github.com/zdia/gorilla/wiki";
+    maintainers = [ lib.maintainers.namore ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gosh/default.nix b/nixpkgs/pkgs/tools/security/gosh/default.nix
new file mode 100644
index 000000000000..41ef9fa1f540
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gosh/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gosh";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "redcode-labs";
+    repo = "GoSH";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-h4WqaN2okAeaU/+0fs8zLYDtyQLuLkCDdGrkGz8rdhg=";
+  };
+
+  vendorHash = "sha256-ITz6nkhttG6bsIZLsp03rcbEBHUQ7pFl4H6FOHTXIU4=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Reverse/bind shell generator";
+    homepage = "https://github.com/redcode-labs/GoSH";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ] ++ teams.redcodelabs.members;
+    mainProgram = "GoSH";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gospider/default.nix b/nixpkgs/pkgs/tools/security/gospider/default.nix
new file mode 100644
index 000000000000..91e940ec87eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gospider/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gospider";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "jaeles-project";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-1EnKheHaS1kxw0cjxCahT3rUWBXiqxjKefrDBI2xIvY=";
+  };
+
+  vendorHash = "sha256-egjjSEZH8F6UMbnkz3xytIzdW/oITB3RL1ddxrmvSZM=";
+
+  # tests require internet access and API keys
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Fast web spider written in Go";
+    longDescription = ''
+      GoSpider is a fast web crawler that parses sitemap.xml and robots.txt file.
+      It can generate and verify link from JavaScript files, extract URLs from
+      various sources and can detect subdomains from the response source.
+    '';
+    homepage = "https://github.com/jaeles-project/gospider";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gotestwaf/default.nix b/nixpkgs/pkgs/tools/security/gotestwaf/default.nix
new file mode 100644
index 000000000000..69afb96a47e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gotestwaf/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, gotestwaf
+, testers
+}:
+
+buildGoModule rec {
+  pname = "gotestwaf";
+  version = "0.4.12";
+
+  src = fetchFromGitHub {
+    owner = "wallarm";
+    repo = "gotestwaf";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-av6N6RQ+9iW+xG1FpmFjBHL1leU4P0IPiqf7kvJxm6M=";
+  };
+
+  vendorHash = null;
+
+  # Some tests require networking as of v0.4.0
+  doCheck = false;
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X=github.com/wallarm/gotestwaf/internal/version.Version=v${version}"
+  ];
+
+  postFixup = ''
+    # Rename binary
+    mv $out/bin/cmd $out/bin/${pname}
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    command = "gotestwaf --version";
+    package = gotestwaf;
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "Tool for API and OWASP attack simulation";
+    homepage = "https://github.com/wallarm/gotestwaf";
+    changelog = "https://github.com/wallarm/gotestwaf/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gotrue/default.nix b/nixpkgs/pkgs/tools/security/gotrue/default.nix
new file mode 100644
index 000000000000..112e0c4ddc6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gotrue/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gotrue";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "netlify";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-9h6CyCY7741tJR+qWDLwgPkAtE/kmaoTqlXEY+mOW58=";
+  };
+
+  vendorHash = "sha256-x96+l9EBzYplGRFHsfQazSjqZs35bdXQEJv3pBuaJVo=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/netlify/gotrue/cmd.Version=${version}"
+  ];
+
+  # integration tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/netlify/gotrue";
+    description = "An SWT based API for managing users and issuing SWT tokens";
+    changelog = "https://github.com/netlify/gotrue/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gotrue/supabase.nix b/nixpkgs/pkgs/tools/security/gotrue/supabase.nix
new file mode 100644
index 000000000000..36ce6d72ceb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gotrue/supabase.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, gotrue-supabase
+}:
+
+buildGoModule rec {
+  pname = "gotrue";
+  version = "2.105.0";
+
+  src = fetchFromGitHub {
+    owner = "supabase";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-6tFXuVBd7UptoVMSse1Pk9ok6XyGL994pfFkFTyc5I0=";
+  };
+
+  vendorHash = "sha256-cwTwze8WuhL5exaY5HJYDgcxNB9O1QuFpJgZmj6R838=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/supabase/gotrue/internal/utilities.Version=${version}"
+  ];
+
+  # integration tests require network to connect to postgres database
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = gotrue-supabase;
+    command = "gotrue version";
+    inherit version;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/supabase/gotrue";
+    description = "A JWT based API for managing users and issuing JWT tokens";
+    changelog = "https://github.com/supabase/gotrue/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/goverview/default.nix b/nixpkgs/pkgs/tools/security/goverview/default.nix
new file mode 100644
index 000000000000..02038bf27b99
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/goverview/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "goverview";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "j3ssie";
+    repo = "goverview";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-IgvpMuDwMK9IdPs1IRbPbpgr7xZuDX3boVT5d7Lb+3w=";
+  };
+
+  vendorHash = "sha256-i/m2s9e8PDfGmguNihynVI3Y7nAXC4weoWFXOwUVDSE=";
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+  postInstall = ''
+    installShellCompletion --cmd goverview \
+      --bash <($out/bin/goverview completion bash) \
+      --fish <($out/bin/goverview completion fish) \
+      --zsh <($out/bin/goverview completion zsh)
+  '';
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to get an overview of the list of URLs";
+    homepage = "https://github.com/j3ssie/goverview";
+    changelog = "https://github.com/j3ssie/goverview/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/govulncheck/default.nix b/nixpkgs/pkgs/tools/security/govulncheck/default.nix
new file mode 100644
index 000000000000..dd45d054aeeb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/govulncheck/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, substituteAll
+}:
+
+buildGoModule rec {
+  pname = "govulncheck";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "golang";
+    repo = "vuln";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-GLZaJ/hVA1A2Mek1G7QkDGowqa5Bm4sRh0Y7QMhud/w=";
+  };
+
+  patches = [
+    # patch in version information
+    (substituteAll {
+      src = ./version.patch;
+      inherit version;
+    })
+  ];
+
+  vendorHash = "sha256-Jg2Nx63Xak149111jbBP6SgK3hze21Dx5qcDKXCqa48=";
+
+  subPackages = [
+    "cmd/govulncheck"
+  ];
+
+  # Vendoring breaks tests
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    homepage = "https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck";
+    downloadPage = "https://github.com/golang/vuln";
+    description = "The database client and tools for the Go vulnerability database, also known as vuln";
+    longDescription = ''
+      Govulncheck reports known vulnerabilities that affect Go code. It uses
+      static analysis of source code or a binary's symbol table to narrow down
+      reports to only those that could affect the application.
+
+      By default, govulncheck makes requests to the Go vulnerability database at
+      https://vuln.go.dev. Requests to the vulnerability database contain only
+      module paths, not code or other properties of your program. See
+      https://vuln.go.dev/privacy.html for more. Set the GOVULNDB environment
+      variable to specify a different database, which must implement the
+      specification at https://go.dev/security/vuln/database.
+
+      Govulncheck looks for vulnerabilities in Go programs using a specific
+      build configuration. For analyzing source code, that configuration is the
+      operating system, architecture, and Go version specified by GOOS, GOARCH,
+      and the “go†command found on the PATH. For binaries, the build
+      configuration is the one used to build the binary. Note that different
+      build configurations may have different known vulnerabilities. For
+      example, a dependency with a Windows-specific vulnerability will not be
+      reported for a Linux build.
+    '';
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ jk SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/govulncheck/version.patch b/nixpkgs/pkgs/tools/security/govulncheck/version.patch
new file mode 100644
index 000000000000..2a79276fa15a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/govulncheck/version.patch
@@ -0,0 +1,15 @@
+diff --git a/internal/scan/run.go b/internal/scan/run.go
+index fa7fe37..216ca43 100644
+--- a/internal/scan/run.go
++++ b/internal/scan/run.go
+@@ -99,8 +99,8 @@ func scannerVersion(cfg *config, bi *debug.BuildInfo) {
+ 	if bi.Path != "" {
+ 		cfg.ScannerName = path.Base(bi.Path)
+ 	}
+-	if bi.Main.Version != "" && bi.Main.Version != "(devel)" {
+-		cfg.ScannerVersion = bi.Main.Version
++	if true {
++		cfg.ScannerVersion = "@version@"
+ 		return
+ 	}
+ 
diff --git a/nixpkgs/pkgs/tools/security/gowitness/default.nix b/nixpkgs/pkgs/tools/security/gowitness/default.nix
new file mode 100644
index 000000000000..bd9ab97a0f38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gowitness/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gowitness";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "sensepost";
+    repo = "gowitness";
+    rev = "refs/tags/${version}";
+    hash = "sha256-37OorjzxDu27FNAz4LTtQdFjt0tL9jSb9tGZhlq797Q=";
+  };
+
+  vendorHash = "sha256-Exw5NfR3nDYH+hWMPOKuVIRyrVkOJyP7Kwe4jzQwnsI=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Web screenshot utility";
+    homepage = "https://github.com/sensepost/gowitness";
+    changelog = "https://github.com/sensepost/gowitness/releases/tag/${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gpg-tui/default.nix b/nixpkgs/pkgs/tools/security/gpg-tui/default.nix
new file mode 100644
index 000000000000..64a273784540
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gpg-tui/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, gpgme
+, libgpg-error
+, pkg-config
+, python3
+, AppKit
+, Foundation
+, libiconv
+, libobjc
+, libresolv
+, x11Support ? true, libxcb, libxkbcommon
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gpg-tui";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "gpg-tui";
+    rev = "v${version}";
+    hash = "sha256-zTFWIIqIDMI77lg2CB1ug+GeKPVIT1OQ1p80x6tLgGg=";
+  };
+
+  cargoHash = "sha256-5qLrmU/SfUfiQOOpECTEn8K142STnbhqE3XbJFxKPZg=";
+
+  nativeBuildInputs = [
+    gpgme # for gpgme-config
+    libgpg-error # for gpg-error-config
+    pkg-config
+    python3
+  ];
+
+  buildInputs = [
+    gpgme
+    libgpg-error
+  ] ++ lib.optionals x11Support [
+    libxcb
+    libxkbcommon
+  ] ++ lib.optionals stdenv.isDarwin [
+    AppKit
+    Foundation
+    libiconv
+    libobjc
+    libresolv
+  ];
+
+  meta = with lib; {
+    description = "Terminal user interface for GnuPG";
+    homepage = "https://github.com/orhun/gpg-tui";
+    changelog = "https://github.com/orhun/gpg-tui/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/grap/default.nix b/nixpkgs/pkgs/tools/security/grap/default.nix
new file mode 100644
index 000000000000..1d77e9bf99cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/grap/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, boost, libseccomp, flex, swig4, bison, cmake, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "grap";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "QuoSecGmbH";
+    repo = "grap";
+    rev = "v${version}";
+    sha256 = "1fkdi7adfffxg1k4h6r9i69i3wi93s44c1j4cvr69blxsfh0mcnc";
+  };
+
+  nativeBuildInputs = [
+    bison
+    cmake
+    flex
+    python3
+  ];
+
+  buildInputs = [
+    boost.all
+    libseccomp
+    swig4
+  ];
+
+  strictDeps = true;
+
+  cmakeFlags = [
+    "-DPYTHON_SITE_DIR=$out/${python3.sitePackages}"
+    "../src"
+  ];
+
+  postPatch = ''
+    substituteInPlace src/tools/grap-match/CMakeLists.txt --replace "/usr/local/bin" "$out/bin"
+    substituteInPlace src/tools/grap/CMakeLists.txt --replace "/usr/local/bin" "$out/bin"
+  '';
+
+  meta = with lib; {
+    description = "Define and match graph patterns within binaries";
+    longDescription = ''
+      grap takes patterns and binary files, uses a Casptone-based disassembler to obtain the control flow graphs from the binaries, then matches the patterns against them.
+
+      Patterns are user-defined graphs with instruction conditions ("opcode is xor and arg1 is eax") and repetition conditions (3 identical instructions, basic blocks...).
+    '';
+    homepage = "https://github.com/QuoSecGmbH/grap/";
+    license = licenses.mit;
+    maintainers = [ maintainers.s1341 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/graphinder/default.nix b/nixpkgs/pkgs/tools/security/graphinder/default.nix
new file mode 100644
index 000000000000..f0256dff7cbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/graphinder/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "graphinder";
+  version = "1.11.6";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Escape-Technologies";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-TDc6aIFkxShlfC6fLYMKULfrFUAYhQZrIHZNDuMh68g=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiohttp
+    beautifulsoup4
+    requests
+    setuptools
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytest-asyncio
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "graphinder"
+  ];
+
+  disabledTests = [
+    # Tests require network access
+    "test_domain_class"
+    "test_extract_file_zip"
+    "test_fetch_assets"
+    "test_full_run"
+    "test_init_domain_tasks"
+    "test_is_gql_endpoint"
+  ];
+
+  meta = with lib; {
+    description = "Tool to find GraphQL endpoints using subdomain enumeration";
+    homepage = "https://github.com/Escape-Technologies/graphinder";
+    changelog = "https://github.com/Escape-Technologies/graphinder/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/graphqlmap/default.nix b/nixpkgs/pkgs/tools/security/graphqlmap/default.nix
new file mode 100644
index 000000000000..84b72d3b6a16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/graphqlmap/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "graphqlmap";
+  version = "unstable-2022-01-17";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "swisskyrepo";
+    repo = "GraphQLmap";
+    rev = "98997bd7cf647aac7378b72913241060464749b1";
+    hash = "sha256-lGnhNwtDc8KoPlwJ1p2FYq0NQ8PhSR3HgtluU7uxa/c=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+  ];
+
+  # Tests are not available
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "graphqlmap"
+  ];
+
+  meta = with lib; {
+    description = "Tool to interact with a GraphQL endpoint";
+    homepage = "https://github.com/swisskyrepo/GraphQLmap";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/graphw00f/default.nix b/nixpkgs/pkgs/tools/security/graphw00f/default.nix
new file mode 100644
index 000000000000..7f1d5ede3e71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/graphw00f/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "graphw00f";
+  version = "1.1.15";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "dolevf";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-wAymwT2PRyX7m/yh6BAa8YNkH7pE69bKHKZ15phuUJo=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD main.py $out/bin/graphw00f
+    install -vD {conf,version}.py -t $out/${python3.sitePackages}/
+    install -vD graphw00f/* -t $out/${python3.sitePackages}/graphw00f
+
+    runHook postInstall
+  '';
+  meta = with lib; {
+    description = "GraphQL Server Engine Fingerprinting utility";
+    homepage = "https://github.com/dolevf/graphw00f";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/grype/default.nix b/nixpkgs/pkgs/tools/security/grype/default.nix
new file mode 100644
index 000000000000..dcae1af2bed1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/grype/default.nix
@@ -0,0 +1,119 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+, installShellFiles
+, openssl
+}:
+
+buildGoModule rec {
+  pname = "grype";
+  version = "0.74.6";
+
+  src = fetchFromGitHub {
+    owner = "anchore";
+    repo = "grype";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-2KLVIwiSrs+e0srXkfBdk/RxCIvSq/Lixe83th2KvRA=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse HEAD > $out/COMMIT
+      # 0000-00-00T00:00:00Z
+      date -u -d "@$(git log -1 --pretty=%ct)" "+%Y-%m-%dT%H:%M:%SZ" > $out/SOURCE_DATE_EPOCH
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+
+  proxyVendor = true;
+
+  vendorHash = "sha256-wgcbP/VbHOMuc0PxWaOsiYTrr77ztLDVaDMhAD50vuQ=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  nativeCheckInputs = [
+    git
+    openssl
+  ];
+
+  subPackages = [
+    "cmd/grype"
+  ];
+
+  excludedPackages = "test/integration";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+    "-X=main.gitDescription=v${version}"
+    "-X=main.gitTreeState=clean"
+  ];
+
+  preBuild = ''
+    # grype version also displays the version of the syft library used
+    # we need to grab it from the go.sum and add an ldflag for it
+    SYFT_VERSION="$(grep "github.com/anchore/syft" go.sum -m 1 | awk '{print $2}')"
+    ldflags+=" -X main.syftVersion=$SYFT_VERSION"
+    ldflags+=" -X main.gitCommit=$(cat COMMIT)"
+    ldflags+=" -X main.buildDate=$(cat SOURCE_DATE_EPOCH)"
+  '';
+
+  preCheck = ''
+    # test all dirs (except excluded)
+    unset subPackages
+    # test goldenfiles expect no version
+    unset ldflags
+
+    # patch utility script
+    patchShebangs grype/db/test-fixtures/tls/generate-x509-cert-pair.sh
+
+    # remove tests that depend on docker
+    substituteInPlace test/cli/cmd_test.go \
+      --replace-fail "TestCmd" "SkipCmd"
+    substituteInPlace grype/pkg/provider_test.go \
+      --replace-fail "TestSyftLocationExcludes" "SkipSyftLocationExcludes"
+    substituteInPlace test/cli/cmd_test.go \
+      --replace-fail "Test_descriptorNameAndVersionSet" "Skip_descriptorNameAndVersionSet"
+    # remove tests that depend on git
+    substituteInPlace test/cli/db_validations_test.go \
+      --replace-fail "TestDBValidations" "SkipDBValidations"
+    substituteInPlace test/cli/registry_auth_test.go \
+      --replace-fail "TestRegistryAuth" "SkipRegistryAuth"
+    substituteInPlace test/cli/sbom_input_test.go \
+      --replace-fail "TestSBOMInput_FromStdin" "SkipSBOMInput_FromStdin" \
+      --replace-fail "TestSBOMInput_AsArgument" "SkipSBOMInput_AsArgument"
+    substituteInPlace test/cli/subprocess_test.go \
+      --replace-fail "TestSubprocessStdin" "SkipSubprocessStdin"
+    substituteInPlace grype/internal/packagemetadata/names_test.go \
+      --replace-fail "TestAllNames" "SkipAllNames"
+    substituteInPlace test/cli/version_cmd_test.go \
+      --replace-fail "TestVersionCmdPrintsToStdout" "SkipVersionCmdPrintsToStdout"
+
+    # segfault
+    rm grype/db/v5/namespace/cpe/namespace_test.go
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd grype \
+      --bash <($out/bin/grype completion bash) \
+      --fish <($out/bin/grype completion fish) \
+      --zsh <($out/bin/grype completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/anchore/grype";
+    changelog = "https://github.com/anchore/grype/releases/tag/v${version}";
+    description = "Vulnerability scanner for container images and filesystems";
+    longDescription = ''
+      As a vulnerability scanner grype is able to scan the contents of a
+      container image or filesystem to find known vulnerabilities.
+    '';
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab jk kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/haka/default.nix b/nixpkgs/pkgs/tools/security/haka/default.nix
new file mode 100644
index 000000000000..b20abbb8bf20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/haka/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, cmake, swig, wireshark, check, rsync, libpcap, gawk, libedit, pcre, nixosTests }:
+
+let version = "0.3.0"; in
+
+stdenv.mkDerivation {
+  pname = "haka";
+  inherit version;
+
+  src = fetchurl {
+    name = "haka_${version}_source.tar.gz";
+    url = "https://github.com/haka-security/haka/releases/download/v${version}/haka_${version}_source.tar.gz";
+    sha256 = "0dm39g3k77sa70zrjsqadidg27a6iqq61jzfdxazpllnrw4mjy4w";
+  };
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  preConfigure = ''
+    sed -i 's,/etc,'$out'/etc,' src/haka/haka.c
+    sed -i 's,/etc,'$out'/etc,' src/haka/CMakeLists.txt
+    sed -i 's,/opt/haka/etc,$out/opt/haka/etc,' src/haka/haka.1
+    sed -i 's,/etc,'$out'/etc,' doc/user/tool_suite_haka.rst
+  '';
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ swig wireshark check rsync libpcap gawk libedit pcre ];
+
+  passthru.tests = { inherit (nixosTests) haka; };
+
+  meta = {
+    description = "A collection of tools that allows capturing TCP/IP packets and filtering them based on Lua policy files";
+    homepage = "http://www.haka-security.org/";
+    license = lib.licenses.mpl20;
+    maintainers = [ lib.maintainers.tvestelind ];
+    platforms = [ "x86_64-linux" "i686-linux" ]; # fails on aarch64
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hakrawler/default.nix b/nixpkgs/pkgs/tools/security/hakrawler/default.nix
new file mode 100644
index 000000000000..0577ceb8c103
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hakrawler/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "hakrawler";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "hakluke";
+    repo = "hakrawler";
+    rev = version;
+    hash = "sha256-ZJG5KlIlzaztG27NoSlILj0I94cm2xZq28qx1ebrSmc=";
+  };
+
+  vendorHash = "sha256-NzgFwPvuEZ2/Ks5dZNRJjzzCNPRGelQP/A6eZltqkmM=";
+
+  meta = with lib; {
+    description = "Web crawler for the discovery of endpoints and assets";
+    homepage = "https://github.com/hakluke/hakrawler";
+    longDescription =  ''
+      Simple, fast web crawler designed for easy, quick discovery of endpoints
+      and assets within a web application.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hash-identifier/default.nix b/nixpkgs/pkgs/tools/security/hash-identifier/default.nix
new file mode 100644
index 000000000000..0fe78a4a0db5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hash-identifier/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitLab, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "hash-identifier";
+  version = "1.2";
+
+  src = fetchFromGitLab {
+    owner = "kalilinux";
+    repo = "packages/hash-identifier";
+    rev = "kali/${version}+git20180314-0kali1";
+    sha256 = "1amz48ijwjjkccg6gmdn3ffnyp2p52ksagy4m9gy8l2v5wj3j32h";
+  };
+
+  format = "other"; # no setup.py
+
+  installPhase = ''
+    install -Dm0775 hash-id.py $out/bin/hash-identifier
+  '';
+
+  meta = with lib; {
+    description = "Identify the different types of hashes used to encrypt data and especially passwords";
+    homepage = "https://github.com/blackploit/hash-identifier";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ethancedwards8 ];
+    mainProgram = "hash-identifier";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hash-slinger/default.nix b/nixpkgs/pkgs/tools/security/hash-slinger/default.nix
new file mode 100644
index 000000000000..cb02b806a986
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hash-slinger/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+, unbound
+, libreswan
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hash-slinger";
+  version = "3.3";
+
+  src = fetchFromGitHub {
+    owner = "letoams";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-c6IZHUFuhcccUWZYSOUGFbKpTtwMclIvEvDX8gE5d8o=";
+  };
+
+  pythonPath = with python3.pkgs; [
+    dnspython
+    m2crypto
+    python-gnupg
+    pyunbound
+  ];
+
+  buildInputs = [
+    python3.pkgs.wrapPython
+  ];
+
+  propagatedBuildInputs = [
+    unbound
+    libreswan
+  ] ++ pythonPath;
+
+  propagatedUserEnvPkgs = [
+    unbound
+    libreswan
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "$(DESTDIR)/usr" "$out"
+    substituteInPlace ipseckey \
+      --replace "/usr/sbin/ipsec" "${libreswan}/sbin/ipsec"
+    substituteInPlace tlsa \
+      --replace "/var/lib/unbound/root" "${python3.pkgs.pyunbound}/etc/pyunbound/root"
+    patchShebangs *
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/man $out/${python3.sitePackages}
+    make install
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    description = "Various tools to generate special DNS records";
+    homepage = "https://github.com/letoams/hash-slinger";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hash_extender/default.nix b/nixpkgs/pkgs/tools/security/hash_extender/default.nix
new file mode 100644
index 000000000000..b90dff6cd17c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hash_extender/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation {
+  pname = "hash_extender";
+  version = "unstable-2020-03-24";
+
+  src = fetchFromGitHub {
+    owner = "iagox86";
+    repo = "hash_extender";
+    rev = "cb8aaee49f93e9c0d2f03eb3cafb429c9eed723d";
+    sha256 = "1fj118566hr1wv03az2w0iqknazsqqkak0mvlcvwpgr6midjqi9b";
+  };
+
+  buildInputs = [ openssl ];
+
+  doCheck = true;
+  checkPhase = "./hash_extender --test";
+
+  # https://github.com/iagox86/hash_extender/issues/26
+  hardeningDisable = [ "fortify3" ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp hash_extender $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Tool to automate hash length extension attacks";
+    homepage = "https://github.com/iagox86/hash_extender";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hashcash/default.nix b/nixpkgs/pkgs/tools/security/hashcash/default.nix
new file mode 100644
index 000000000000..f86684178fcb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hashcash/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "hashcash";
+  version = "1.22";
+
+  buildInputs = [ openssl ];
+
+  src = fetchurl {
+    url = "http://www.hashcash.org/source/hashcash-${version}.tgz";
+    sha256 = "15kqaimwb2y8wvzpn73021bvay9mz1gqqfc40gk4hj6f84nz34h1";
+  };
+
+  makeFlags = [
+    "generic-openssl"
+    "LIBCRYPTO=-lcrypto"
+  ];
+
+  installFlags = [
+    "INSTALL_PATH=${placeholder "out"}/bin"
+    "MAN_INSTALL_PATH=${placeholder "out"}/share/man/man1"
+    "DOC_INSTALL_PATH=${placeholder "out"}/share/doc/hashcash-$(version)"
+  ];
+
+  meta = with lib; {
+    description = "Proof-of-work algorithm used as spam and denial-of-service counter measure";
+    homepage = "http://hashcash.org";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ kisonecat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hashcat-utils/default.nix b/nixpkgs/pkgs/tools/security/hashcat-utils/default.nix
new file mode 100644
index 000000000000..f252c7eedce7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hashcat-utils/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "hashcat-utils";
+  version = "1.9";
+
+  src = fetchFromGitHub {
+    owner = "hashcat";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0wgc6wv7i6cs95rgzzx3zqm14xxbjyajvcqylz8w97d8kk4x4wjr";
+  };
+
+  sourceRoot = "${src.name}/src";
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm0555 *.bin -t $out/bin
+    install -Dm0555 *.pl -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Small utilities that are useful in advanced password cracking";
+    homepage = "https://github.com/hashcat/hashcat-utils";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fadenb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hashcat/default.nix b/nixpkgs/pkgs/tools/security/hashcat/default.nix
new file mode 100644
index 000000000000..2e8370be85fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hashcat/default.nix
@@ -0,0 +1,89 @@
+{ lib, stdenv
+, addOpenGLRunpath
+, config
+, cudaPackages ? {}
+, cudaSupport ? config.cudaSupport
+, fetchurl
+, makeWrapper
+, opencl-headers
+, ocl-icd
+, xxHash
+, Foundation, IOKit, Metal, OpenCL, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname   = "hashcat";
+  version = "6.2.6";
+
+  src = fetchurl {
+    url = "https://hashcat.net/files/hashcat-${version}.tar.gz";
+    sha256 = "sha256-sl4Qd7zzSQjMjxjBppouyYsEeyy88PURRNzzuh4Leyo=";
+  };
+
+  postPatch = ''
+     # Select libstdc++ or libc++ based on stdenv
+     # MACOSX_DEPLOYMENT_TARGET is defined by the enviroment
+     # Remove hardcoded paths on darwin
+    substituteInPlace src/Makefile \
+  '' + lib.optionalString (stdenv.cc.libcxx != null) ''
+      --replace "-lstdc++" "-lc++ -l${stdenv.cc.libcxx.cxxabi.libName}" \
+  '' + ''
+      --replace "export MACOSX_DEPLOYMENT_TARGET" "#export MACOSX_DEPLOYMENT_TARGET" \
+      --replace "/usr/bin/ar" "ar" \
+      --replace "/usr/bin/sed" "sed" \
+      --replace '-i ""' '-i'
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+  ] ++ lib.optionals cudaSupport [
+    addOpenGLRunpath
+  ];
+
+  buildInputs = [ opencl-headers xxHash ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ Foundation IOKit Metal OpenCL libiconv ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "COMPTIME=1337"
+    "VERSION_TAG=${version}"
+    "USE_SYSTEM_OPENCL=1"
+    "USE_SYSTEM_XXHASH=1"
+  ] ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform == stdenv.buildPlatform) [
+    "IS_APPLE_SILICON='${if stdenv.hostPlatform.isAarch64 then "1" else "0"}'"
+  ];
+
+  enableParallelBuilding = true;
+
+  preFixup = ''
+    for f in $out/share/hashcat/OpenCL/*.cl; do
+      # Rewrite files to be included for compilation at runtime for opencl offload
+      sed "s|#include \"\(.*\)\"|#include \"$out/share/hashcat/OpenCL/\1\"|g" -i "$f"
+      sed "s|#define COMPARE_\([SM]\) \"\(.*\.cl\)\"|#define COMPARE_\1 \"$out/share/hashcat/OpenCL/\2\"|g" -i "$f"
+    done
+  '';
+
+  postFixup = let
+    LD_LIBRARY_PATH = builtins.concatStringsSep ":" ([
+      "${ocl-icd}/lib"
+    ] ++ lib.optionals cudaSupport [
+      "${cudaPackages.cudatoolkit}/lib"
+    ]);
+  in ''
+    wrapProgram $out/bin/hashcat \
+      --prefix LD_LIBRARY_PATH : ${lib.escapeShellArg LD_LIBRARY_PATH}
+  '' + lib.optionalString cudaSupport ''
+    for program in $out/bin/hashcat $out/bin/.hashcat-wrapped; do
+      isELF "$program" || continue
+      addOpenGLRunpath "$program"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Fast password cracker";
+    homepage    = "https://hashcat.net/hashcat/";
+    license     = licenses.mit;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ felixalbrigtsen kierdavis zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hashdeep/default.nix b/nixpkgs/pkgs/tools/security/hashdeep/default.nix
new file mode 100644
index 000000000000..5bc752eb3611
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hashdeep/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "hashdeep";
+  version = "4.4";
+
+  src = fetchFromGitHub {
+    owner = "jessek";
+    repo = "hashdeep";
+    rev = "release-${version}";
+    sha256 = "0m2b042ndikavmplv3qjdhfj44hl1h8car83c192xi9nv5ahi7mf";
+  };
+
+  patches = [
+    (fetchpatch {
+      # Relevant link: <https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1512>
+      # Defect report fixed in GCC 11
+      # Search for "DR 1512" in <https://gcc.gnu.org/gcc-11/changes.html>
+      name = "fix-cpp-defect-report-1512.patch";
+      url = "https://github.com/jessek/hashdeep/commit/6ef69a26126ee4e69a25392fd456b8a66c51dffd.patch";
+      sha256 = "sha256-IrqcnrKINeoh56FR25FzSM1YJMkM2yFd/GwOeWGRLFo=";
+    })
+    (fetchpatch {
+      # Fix the spacing between the string literals and macros, see https://github.com/jessek/hashdeep/pull/385
+      name = "string-literal-spacing.patch";
+      url = "https://github.com/jessek/hashdeep/commit/18a6b5d57f7a648d2b7dcc6e50ff00a1e4b05fcc.patch";
+      sha256 = "sha256-S6hzC8jPtG3ozsvVq5JfAUMwqKxytLGwBAtNYNr6RJ0=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "A set of cross-platform tools to compute hashes";
+    homepage = "https://github.com/jessek/hashdeep";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.karantan ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hashrat/default.nix b/nixpkgs/pkgs/tools/security/hashrat/default.nix
new file mode 100644
index 000000000000..7923021f8355
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hashrat/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hashrat";
+  version = "1.15";
+
+  src = fetchFromGitHub {
+    owner = "ColumPaget";
+    repo = "Hashrat";
+    rev = "v${version}";
+    hash = "sha256-+3IPCJS++7CE0ZrJb62LCRrAn2J4uCF3a1oOzDoOW0w=";
+  };
+
+  configureFlags = [ "--enable-xattr" ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Command-line hash-generation utility";
+    longDescription = ''
+      Hashing tool supporting md5,sha1,sha256,sha512,whirlpool,jh and hmac versions of these.
+      Includes recursive file hashing and other features.
+    '';
+    homepage = "http://www.cjpaget.co.uk/Code/Hashrat";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ zendo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/haveged/default.nix b/nixpkgs/pkgs/tools/security/haveged/default.nix
new file mode 100644
index 000000000000..c28ae465e0eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/haveged/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "haveged";
+  version = "1.9.18";
+
+  src = fetchFromGitHub {
+    owner = "jirka-h";
+    repo = "haveged";
+    rev = "v${version}";
+    hash = "sha256-fyL/J2A13ap582j4gdC8u63Ah67Old+BaO/CLyEeN/g=";
+  };
+
+  strictDeps = true;
+
+  postPatch = ''
+    patchShebangs ent # test shebang
+  '';
+
+  installFlags = [
+    "sbindir=$(out)/bin" # no reason for us to have a $out/sbin, its just a symlink to $out/bin
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A simple entropy daemon";
+    longDescription = ''
+      The haveged project is an attempt to provide an easy-to-use, unpredictable
+      random number generator based upon an adaptation of the HAVEGE algorithm.
+      Haveged was created to remedy low-entropy conditions in the Linux random device
+      that can occur under some workloads, especially on headless servers. Current development
+      of haveged is directed towards improving overall reliability and adaptability while minimizing
+      the barriers to using haveged for other tasks.
+    '';
+    homepage = "https://github.com/jirka-h/haveged";
+    changelog = "https://raw.githubusercontent.com/jirka-h/haveged/v${version}/ChangeLog";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = platforms.unix;
+    badPlatforms = platforms.darwin; # fails to build since v1.9.15
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hcxdumptool/default.nix b/nixpkgs/pkgs/tools/security/hcxdumptool/default.nix
new file mode 100644
index 000000000000..c718ec0b5a0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hcxdumptool/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "hcxdumptool";
+  version = "6.3.2";
+
+  src = fetchFromGitHub {
+    owner = "ZerBea";
+    repo = "hcxdumptool";
+    rev = version;
+    sha256 = "sha256-InMyDUEH135Y1RYJ3z1+RQxPMi7+QMf670S/S2ZL9vg=";
+  };
+
+  buildInputs = [ openssl ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ZerBea/hcxdumptool";
+    description = "Small tool to capture packets from wlan devices";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ danielfullmer ];
+    mainProgram = "hcxdumptool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hcxtools/default.nix b/nixpkgs/pkgs/tools/security/hcxtools/default.nix
new file mode 100644
index 000000000000..df7695276c2a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hcxtools/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, curl, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "hcxtools";
+  version = "6.3.2";
+
+  src = fetchFromGitHub {
+    owner = "ZerBea";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ZEkuWGt2PGkFW1RXCyrUiew92N4ov35mMObHk1xD6uM=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ curl openssl zlib ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "Tools for capturing wlan traffic and conversion to hashcat and John the Ripper formats";
+    homepage = "https://github.com/ZerBea/hcxtools";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dywedir ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hfinger/default.nix b/nixpkgs/pkgs/tools/security/hfinger/default.nix
new file mode 100644
index 000000000000..8d3d7e25d33f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hfinger/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, python3
+, wireshark-cli
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "hfinger";
+  version = "0.2.2";
+  disabled = python3.pythonOlder "3.3";
+
+  src = fetchFromGitHub {
+    owner = "CERT-Polska";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-gxwirAqtY4R3KDHyNmDIknABO+SFuoDua9nm1UyXbxA=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    fnvhash
+    python-magic
+  ] ++ [
+    wireshark-cli
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "hfinger" ];
+
+  meta = with lib; {
+    description = "Fingerprinting tool for HTTP requests";
+    homepage = "https://github.com/CERT-Polska/hfinger";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/himitsu-firefox/default.nix b/nixpkgs/pkgs/tools/security/himitsu-firefox/default.nix
new file mode 100644
index 000000000000..46a014ce4053
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/himitsu-firefox/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, hare
+, himitsu
+, zip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "himitsu-firefox";
+  version = "0.3";
+
+  src = fetchFromSourcehut {
+    name = pname + "-src";
+    owner = "~sircmpwn";
+    repo = pname;
+    rev = "d6d0fdb30aefc93f6ff7d48e5737557051f1ffea";
+    hash = "sha256-5RbNdEGPnfDt1KDeU2LnuRsqqqMRyV/Dh2cgEWkz4vQ=";
+  };
+
+  nativeBuildInputs = [
+    hare
+    zip
+  ];
+
+  buildInputs = [
+    himitsu
+  ];
+
+  preConfigure = ''
+    export HARECACHE=$(mktemp -d)
+  '';
+
+  buildFlags = [ "LIBEXECDIR=$(out)/libexec" ];
+
+  # Only install the native component; per the docs:
+  # > To install the add-on for Firefox ESR, run make install-xpi. Be advised
+  # > that this will probably not work. The recommended installation procedure
+  # > for the native extension is to install it from addons.mozilla.org instead.
+  installTargets = [ "install-native" ];
+  installFlags = [ "PREFIX=" "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~sircmpwn/himitsu-firefox";
+    description = "Himitsu integration for Firefox";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ auchter ];
+    inherit (hare.meta) platforms badPlatforms;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/himitsu/default.nix b/nixpkgs/pkgs/tools/security/himitsu/default.nix
new file mode 100644
index 000000000000..ae647768c7f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/himitsu/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, hare
+, scdoc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "himitsu";
+  version = "0.5";
+
+  src = fetchFromSourcehut {
+    name = pname + "-src";
+    owner = "~sircmpwn";
+    repo = pname;
+    rev = version;
+    hash = "sha256-rZ3gzVz7V3psHAMxTCaJXZh4uP4gIeyb9Bf23kzCBWg=";
+  };
+
+  nativeBuildInputs = [
+    hare
+    scdoc
+  ];
+
+  preConfigure = ''
+    export HARECACHE=$(mktemp -d)
+  '';
+
+  installFlags = [ "PREFIX=" "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://himitsustore.org/";
+    description = "A secret storage manager";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ auchter ];
+    inherit (hare.meta) platforms badPlatforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/holehe/default.nix b/nixpkgs/pkgs/tools/security/holehe/default.nix
new file mode 100644
index 000000000000..ed8146fec688
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/holehe/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "holehe";
+  version = "unstable-2023-05-18";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "megadose";
+    repo = "holehe";
+    rev = "bec2f582c286a4e32de4dfc1f241297f60bd8713";
+    hash = "sha256-dLfuQew6cqb32r9AMubuo51A7TeaIafEdZs0OrQF7Gg=";
+  };
+
+  postPatch = ''
+    # https://github.com/megadose/holehe/pull/178
+    substituteInPlace setup.py \
+      --replace "bs4" "beautifulsoup4"
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    colorama
+    httpx
+    termcolor
+    tqdm
+    trio
+  ];
+
+  # Project has no test
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "holehe"
+  ];
+
+  meta = with lib; {
+    description = "CLI to check if the mail is used on different sites";
+    homepage = "https://github.com/megadose/holehe";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hologram/default.nix b/nixpkgs/pkgs/tools/security/hologram/default.nix
new file mode 100644
index 000000000000..86bc4293747c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hologram/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "hologram";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "AdRoll";
+    repo = "hologram";
+    rev = version;
+    hash = "sha256-b65mplfDuwk8lEfJLKBY7BF0yGRksxHjwbEW6A7moo4=";
+  };
+
+  postPatch = ''
+    sed -i 's|cacheTimeout != 3600|cacheTimeout != 0|' cmd/hologram-server/main.go
+
+    rm -f agent/metadata_service_test.go server/persistent_ldap_test.go server/server_test.go
+  '';
+
+  vendorHash = "sha256-HI5+02qSQVLy6ZKaFjy1bWtvVk5bqMBg1umu2ic5HuY=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/AdRoll/hologram/";
+    description = "Easy, painless AWS credentials on developer laptops";
+    maintainers = with maintainers; [ ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/honeytrap/default.nix b/nixpkgs/pkgs/tools/security/honeytrap/default.nix
new file mode 100644
index 000000000000..e0252d06f154
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/honeytrap/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+buildGoModule {
+  pname = "honeytrap";
+  version = "unstable-2021-12-20";
+
+  src = fetchFromGitHub {
+    owner = "honeytrap";
+    repo = "honeytrap";
+    rev = "05965fc67deab17b48e43873abc5f509067ef098";
+    hash = "sha256-KSVqjHlXl85JaqKiW5R86HCMdtFBwTMJkxFoySOcahs=";
+  };
+
+  vendorHash = "sha256-W8w66weYzCpZ+hmFyK2F6wdFz6aAZ9UxMhccNy1X1R8=";
+
+  # Otherwise, will try to install a "scripts" binary; it's only used in
+  # dockerize.sh, which we don't care about.
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Advanced Honeypot framework";
+    homepage = "https://github.com/honeytrap/honeytrap";
+    license = licenses.asl20;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/honggfuzz/default.nix b/nixpkgs/pkgs/tools/security/honggfuzz/default.nix
new file mode 100644
index 000000000000..7bb89718baca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/honggfuzz/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, clang
+, llvm
+, libbfd
+, libopcodes
+, libunwind
+, libblocksruntime }:
+
+stdenv.mkDerivation rec {
+  pname = "honggfuzz";
+  version = "2.6";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-/ra6g0qjjC8Lo8/n2XEbwnZ95yDHcGhYd5+TTvQ6FAc=";
+  };
+
+  postPatch = ''
+    substituteInPlace hfuzz_cc/hfuzz-cc.c \
+      --replace '"clang' '"${clang}/bin/clang'
+  '';
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ llvm ];
+  propagatedBuildInputs = [ libbfd libopcodes libunwind libblocksruntime ];
+
+  # Fortify causes build failures: 'str*' defined both normally and as 'alias' attribute
+  hardeningDisable = [ "fortify" ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    mkdir -p $out/lib
+    cp libhfuzz/libhfuzz.a $out/lib
+    cp libhfuzz/libhfuzz.so $out/lib
+    cp libhfcommon/libhfcommon.a $out/lib
+    cp libhfnetdriver/libhfnetdriver.a $out/lib
+  '';
+
+  meta = {
+    description =
+      "A security oriented, feedback-driven, evolutionary, easy-to-use fuzzer";
+    longDescription = ''
+      Honggfuzz is a security oriented, feedback-driven, evolutionary,
+      easy-to-use fuzzer with interesting analysis options. It is
+      multi-process and multi-threaded, blazingly fast when the persistent
+      fuzzing mode is used and has a solid track record of uncovered security
+      bugs.
+
+      Honggfuzz uses low-level interfaces to monitor processes and it will
+      discover and report hijacked/ignored signals from crashes. Feed it
+      a simple corpus directory (can even be empty for the feedback-driven
+      fuzzing), and it will work its way up, expanding it by utilizing
+      feedback-based coverage metrics.
+    '';
+    homepage = "https://honggfuzz.dev/";
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ cpu chivay ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hstsparser/default.nix b/nixpkgs/pkgs/tools/security/hstsparser/default.nix
new file mode 100644
index 000000000000..8b4e4882f556
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hstsparser/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "hstsparser";
+  version = "1.2.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "thebeanogamer";
+    repo = "hstsparser";
+    rev = "refs/tags/${version}";
+    hash = "sha256-9ZNBzPa4mFXbao73QukEL56sM/3dg4ElOMXgNGTVh1g=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    prettytable
+  ];
+
+  pythonImportsCheck = [
+    "hstsparser"
+  ];
+
+  meta = with lib; {
+    description = "Tool to parse Firefox and Chrome HSTS databases into forensic artifacts";
+    homepage = "https://github.com/thebeanogamer/hstsparser";
+    changelog = "https://github.com/thebeanogamer/hstsparser/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/httpdump/default.nix b/nixpkgs/pkgs/tools/security/httpdump/default.nix
new file mode 100644
index 000000000000..d745adc50d5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/httpdump/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, libpcap
+}:
+
+buildGoModule rec {
+  pname = "httpdump";
+  version = "unstable-2023-05-07";
+
+  src = fetchFromGitHub {
+    owner = "hsiafan";
+    repo = pname;
+    rev = "e971e00e0136d5c770c4fdddb1c2095327d419d8";
+    hash = "sha256-3BzvIaZKBr/HHplJe5hM7u8kigmMHxCvkiVXFZopUCQ=";
+  };
+
+  vendorHash = "sha256-NKCAzx1+BkqZGeAORl7gCA7f9PSsyKxP2eggZyBB2l8=";
+
+  propagatedBuildInputs = [ libpcap ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Parse and display HTTP traffic from network device or pcap file";
+    homepage = "https://github.com/hsiafan/httpdump";
+    license = with licenses; [ bsd2 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/httpx/default.nix b/nixpkgs/pkgs/tools/security/httpx/default.nix
new file mode 100644
index 000000000000..98f41b9c599f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/httpx/default.nix
@@ -0,0 +1,43 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "httpx";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "httpx";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-G+N9Zo8MbXbCRB21SvxSNftvn5v8Ss+I0v7Lj30CgJo=";
+  };
+
+  vendorHash = "sha256-fy4yJkwBlVNRn8FWHtZHCMcCF7LQXsDhEYVSv4RVcBM=";
+
+  subPackages = [
+    "cmd/httpx"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Fast and multi-purpose HTTP toolkit";
+    longDescription = ''
+      httpx is a fast and multi-purpose HTTP toolkit allow to run multiple
+      probers using retryablehttp library, it is designed to maintain the
+      result reliability with increased threads.
+    '';
+    homepage = "https://github.com/projectdiscovery/httpx";
+    changelog = "https://github.com/projectdiscovery/httpx/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/iaito/default.nix b/nixpkgs/pkgs/tools/security/iaito/default.nix
new file mode 100644
index 000000000000..5812b1e6cfea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/iaito/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, python3
+, qtbase
+, qttools
+, radare2
+, wrapQtAppsHook
+}:
+
+let
+  pname = "iaito";
+  version = "5.8.8";
+
+  main_src = fetchFromGitHub rec {
+    owner = "radareorg";
+    repo = pname;
+    rev = version;
+    hash = "sha256-/sXdp6QpDxltesg5i2CD0K2r18CrbGZmmI7HqULvFfA=";
+    name = repo;
+  };
+
+  translations_src = fetchFromGitHub rec {
+    owner = "radareorg";
+    repo = "iaito-translations";
+    rev = "e66b3a962a7fc7dfd730764180011ecffbb206bf";
+    hash = "sha256-6NRTZ/ydypsB5TwbivvwOH9TEMAff/LH69hCXTvMPp8=";
+    name = repo;
+  };
+in
+
+stdenv.mkDerivation rec {
+  inherit pname version;
+
+  srcs = [ main_src translations_src ];
+  sourceRoot = "${main_src.name}/src";
+
+  postUnpack = ''
+    chmod -R u+w ${translations_src.name}
+  '';
+
+  postPatch = ''
+    substituteInPlace common/ResourcePaths.cpp \
+      --replace "/app/share/iaito/translations" "$out/share/iaito/translations"
+  '';
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    python3
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    radare2
+  ];
+
+  # the radare2 binary package seems to not install all necessary headers.
+  env.NIX_CFLAGS_COMPILE = toString [ "-I" "${radare2.src}/shlr/sdb/include/sdb" ];
+
+  postBuild = ''
+    pushd ../../../${translations_src.name}
+    make build -j$NIX_BUILD_CORES PREFIX=$out
+    popd
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -m755 -Dt $out/bin iaito
+    install -m644 -Dt $out/share/metainfo ../org.radare.iaito.appdata.xml
+    install -m644 -Dt $out/share/applications ../org.radare.iaito.desktop
+    install -m644 -Dt $out/share/pixmaps ../img/org.radare.iaito.svg
+
+    pushd ../../../${translations_src.name}
+    make install -j$NIX_BUILD_CORES PREFIX=$out
+    popd
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "An official graphical interface of radare2";
+    longDescription = ''
+      iaito is the official graphical interface of radare2. It's the
+      continuation of Cutter for radare2 after the Rizin fork.
+    '';
+    homepage = "https://radare.org/n/iaito.html";
+    changelog = "https://github.com/radareorg/iaito/releases/tag/${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ibm-sw-tpm2/default.nix b/nixpkgs/pkgs/tools/security/ibm-sw-tpm2/default.nix
new file mode 100644
index 000000000000..9a13c2103016
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ibm-sw-tpm2/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, openssl
+}:
+let
+  makefile =
+    if stdenv.isDarwin
+    then "makefile.mac"
+    else "makefile";
+in
+stdenv.mkDerivation rec {
+  pname = "ibm-sw-tpm2";
+  version = "1682";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ibmswtpm2/ibmtpm${version}.tar.gz";
+    hash = "sha256-PLZC+HGheyPVCwRuX5X0ScIodBX8HnrrS9u4kg28s48=";
+  };
+
+  patches = [
+    # Backport openssl-3.1 from development branch.
+    # Can be removed with next release.
+    (fetchpatch {
+      name = "openssl-3.1.patch";
+      url = "https://github.com/kgoldman/ibmswtpm2/commit/15501bf4973d334ca9420fa2fb0f0fe1800871e0.patch";
+      includes = [ "TpmToOsslMath.h" ];
+      stripLen = 1;
+      hash = "sha256-8TwyZVy8pQwq5Fl8cy9xJWtdckwL+QK0+DL5EHDLYUY=";
+    })
+  ];
+
+  buildInputs = [ openssl ];
+
+  sourceRoot = "src";
+
+  inherit makefile;
+
+  prePatch = ''
+    # Fix hardcoded path to GCC.
+    substituteInPlace ${makefile} --replace /usr/bin/gcc "${stdenv.cc}/bin/cc"
+
+    # Remove problematic default CFLAGS.
+    substituteInPlace ${makefile} \
+      --replace -Werror "" \
+      --replace -O0 "" \
+      --replace -ggdb ""
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tpm_server $out/bin
+  '';
+
+  meta = with lib; {
+    description = "IBM's Software TPM 2.0, an implementation of the TCG TPM 2.0 specification";
+    homepage = "https://sourceforge.net/projects/ibmswtpm2/";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ delroth ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ic-keysmith/default.nix b/nixpkgs/pkgs/tools/security/ic-keysmith/default.nix
new file mode 100644
index 000000000000..30ca2a467576
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ic-keysmith/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "keysmith";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "dfinity";
+    repo = "keysmith";
+    rev = "v${version}";
+    sha256 = "sha256-+wYWIoPYc7qpTRS4Zlxp50Up8obZOmfQpiT0SWwVJE0=";
+  };
+
+  vendorHash = "sha256-rIH10TRWOgmJM8bnKXYTsmmAtlrMMxHc8rnaCmMJGdw=";
+
+  meta = with lib; {
+    description = "Hierarchical Deterministic Key Derivation for the Internet Computer";
+    homepage = "https://github.com/dfinity/keysmith";
+    license = licenses.mit;
+    maintainers = with maintainers; [ imalison ];
+    mainProgram = "keysmith";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ifdnfc/default.nix b/nixpkgs/pkgs/tools/security/ifdnfc/default.nix
new file mode 100644
index 000000000000..34c140023ac2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ifdnfc/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub , pkg-config
+, pcsclite
+, autoreconfHook
+, libnfc
+}:
+
+stdenv.mkDerivation {
+  pname = "ifdnfc";
+  version = "2016-03-01";
+
+  src = fetchFromGitHub {
+    owner = "nfc-tools";
+    repo = "ifdnfc";
+    rev = "0e48e8e";
+    sha256 = "1cxnvhhlcbm8h49rlw5racspb85fmwqqhd3gzzpzy68vrs0b37vg";
+  };
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ pcsclite libnfc ];
+
+  configureFlags = [ "--prefix=$(out)" ];
+  makeFlags = [ "DESTDIR=/" "usbdropdir=$(out)/pcsc/drivers" ];
+
+  meta = with lib; {
+    description = "PC/SC IFD Handler based on libnfc";
+    longDescription =
+    '' libnfc Interface Plugin to be used in <code>services.pcscd.plugins</code>.
+       It provides support for all readers which are not supported by ccid but by libnfc.
+
+       For activating your reader you need to run
+       <code>ifdnfc-activate yes<code> with this package in your
+       <code>environment.systemPackages</code>
+
+       To use your reader you may need to blacklist your reader kernel modules:
+       <code>boot.blacklistedKernelModules = [ "pn533" "pn533_usb" "nfc" ];</code>
+
+       Supports the pn533 smart-card reader chip which is for example used in
+       the SCM SCL3711.
+    '';
+    homepage = "https://github.com/nfc-tools/ifdnfc";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ makefu ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/ike-scan/default.nix b/nixpkgs/pkgs/tools/security/ike-scan/default.nix
new file mode 100644
index 000000000000..3c6374cab9a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ike-scan/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, autoreconfHook
+, fetchFromGitHub
+, fetchpatch
+, openssl
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ike-scan";
+  version = "1.9.5";
+
+  src = fetchFromGitHub {
+    owner = "royhills";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-mbfg8p3y4aKoXpmLuF9GXAMPEqV5CsvetwGCRDJ9UNY=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    openssl
+  ];
+
+  configureFlags = [ "--with-openssl=${openssl.dev}" ];
+
+  patches = [
+    # Using the same patches as for the Fedora RPM
+    (fetchpatch {
+      # Memory leaks, https://github.com/royhills/ike-scan/pull/15
+      url = "https://github.com/royhills/ike-scan/pull/15/commits/d864811de08dcddd65ac9b8d0f2acf5d7ddb9dea.patch";
+      sha256 = "0wbrq89dl8js7cdivd0c45hckmflan33cpgc3qm5s3az6r4mjljm";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Tool to discover, fingerprint and test IPsec VPN servers";
+    longDescription = ''
+      ike-scan is a command-line tool that uses the IKE protocol to discover,
+      fingerprint and test IPsec VPN servers.
+    '';
+    homepage = "https://github.com/royhills/ike-scan";
+    license = with licenses; [ gpl3Plus ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/imdshift/default.nix b/nixpkgs/pkgs/tools/security/imdshift/default.nix
new file mode 100644
index 000000000000..c33e0878cd4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/imdshift/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "imdshift";
+  version = "1.0.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ayushpriya10";
+    repo = "IMDShift";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Uoa0uNOhCkT622Yy8GEg8jz9k5zmtXwGmvdb3MVTLX8=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    boto3
+    click
+    prettytable
+    tqdm
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "IMDShift"
+  ];
+
+  meta = with lib; {
+    description = "Tool to migrate workloads to IMDSv2";
+    homepage = "https://github.com/ayushpriya10/IMDShift";
+    changelog = "https://github.com/ayushpriya10/IMDShift/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/inql/default.nix b/nixpkgs/pkgs/tools/security/inql/default.nix
new file mode 100644
index 000000000000..272e28292ac8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/inql/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "inql";
+  version = "4.0.6";
+
+  src = fetchFromGitHub {
+    owner = "doyensec";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-DFGJHqdrCmOZn8GdY5SZ1PrOhuIsMLoK+2Fry9WkRiY=";
+  };
+
+  postPatch = ''
+    # To set the version a full git checkout would be needed
+    substituteInPlace setup.py \
+      --replace "version=version()," "version='${version}',"
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    stickytape
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "inql"
+  ];
+
+  meta = with lib; {
+    description = "Security testing tool for GraphQL";
+    homepage = "https://github.com/doyensec/inql";
+    changelog = "https://github.com/doyensec/inql/releases/tag/v${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ioc-scan/default.nix b/nixpkgs/pkgs/tools/security/ioc-scan/default.nix
new file mode 100644
index 000000000000..e080426162a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ioc-scan/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ioc-scan";
+  version = "1.5.4";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "cisagov";
+    repo = "ioc-scanner";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-LQljpIlTDy1uxuwj1WyygwrB5hQ7dib1ViB+SEhRJ6Y=";
+  };
+
+  postPatch = ''
+    substituteInPlace pytest.ini \
+      --replace " --cov" ""
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    docopt
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pyfakefs
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "ioc_scan"
+  ];
+
+  meta = with lib; {
+    description = "Tool to search a filesystem for indicators of compromise (IoC)";
+    homepage = "https://github.com/cisagov/ioc-scanner";
+    changelog = "https://github.com/cisagov/ioc-scanner/releases/tag/v${version}";
+    license = with licenses; [ cc0 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ioccheck/default.nix b/nixpkgs/pkgs/tools/security/ioccheck/default.nix
new file mode 100644
index 000000000000..2f25aa4ea897
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ioccheck/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+      emoji = super.emoji.overridePythonAttrs rec {
+        version = "1.7.0";
+
+        src = fetchFromGitHub {
+          owner = "carpedm20";
+          repo = "emoji";
+          rev = "v${version}";
+          hash = "sha256-vKQ51RP7uy57vP3dOnHZRSp/Wz+YDzeLUR8JnIELE/I=";
+        };
+      };
+
+      # Support for later tweepy releases is missing
+      # https://github.com/ranguli/ioccheck/issues/70
+      tweepy = super.tweepy.overridePythonAttrs rec {
+        version = "3.10.0";
+
+        src = fetchFromGitHub {
+          owner = "tweepy";
+          repo = "tweepy";
+          rev = "v${version}";
+          hash = "sha256-3BbQeCaAhlz9h5GnhficNubJHu4kTpnCDM4oKzlti0w=";
+        };
+        doCheck = false;
+      };
+    };
+  };
+in py.pkgs.buildPythonApplication rec {
+  pname = "ioccheck";
+  version = "unstable-2021-09-29";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "ranguli";
+    repo = "ioccheck";
+    rev = "db02d921e2519b77523a200ca2d78417802463db";
+    hash = "sha256-qf5tHIpbj/BfrzUST+EzohKh1hUg09KwF+vT0tj1+FE=";
+  };
+
+  nativeBuildInputs = with py.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "backoff"
+    "pyfiglet"
+    "tabulate"
+    "termcolor"
+    "vt-py"
+  ];
+
+  propagatedBuildInputs = with py.pkgs; [
+    backoff
+    click
+    emoji
+    jinja2
+    pyfiglet
+    ratelimit
+    requests
+    shodan
+    tabulate
+    termcolor
+    tweepy
+    vt-py
+  ];
+
+  nativeCheckInputs = with py.pkgs; [
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    # Can be removed with the next release
+    substituteInPlace pyproject.toml \
+      --replace '"hurry.filesize" = "^0.9"' ""
+  '';
+
+  pythonImportsCheck = [
+    "ioccheck"
+  ];
+
+  meta = with lib; {
+    description = "Tool for researching IOCs";
+    homepage = "https://github.com/ranguli/ioccheck";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ipscan/default.nix b/nixpkgs/pkgs/tools/security/ipscan/default.nix
new file mode 100644
index 000000000000..72a44a4ab8a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ipscan/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchurl
+, jdk
+, jre
+, swt
+, makeWrapper
+, xorg
+, dpkg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ipscan";
+  version = "3.9.1";
+
+  src = fetchurl {
+    url = "https://github.com/angryip/ipscan/releases/download/${version}/ipscan_${version}_amd64.deb";
+    hash = "sha256-UPkUwZV3NIeVfL3yYvqOhm4X5xW+40GOlZGy8WGhYmk=";
+  };
+
+  sourceRoot = ".";
+  unpackCmd = "${dpkg}/bin/dpkg-deb -x $src .";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ jdk ];
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp usr/lib/ipscan/ipscan-linux64-${version}.jar $out/share/${pname}-${version}.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/ipscan \
+      --prefix LD_LIBRARY_PATH : "$out/lib/:${lib.makeLibraryPath [ swt xorg.libXtst ]}" \
+      --add-flags "-Xmx256m -cp $out/share/${pname}-${version}.jar:${swt}/jars/swt.jar net.azib.ipscan.Main"
+
+    mkdir -p $out/share/applications
+    cp usr/share/applications/ipscan.desktop $out/share/applications/ipscan.desktop
+    substituteInPlace $out/share/applications/ipscan.desktop --replace "/usr/bin" "$out/bin"
+
+    mkdir -p $out/share/pixmaps
+    cp usr/share/pixmaps/ipscan.png $out/share/pixmaps/ipscan.png
+  '';
+
+  meta = with lib; {
+    description = "Angry IP Scanner - fast and friendly network scanner";
+    homepage = "https://angryip.org";
+    downloadPage = "https://github.com/angryip/ipscan/releases/tag/${version}";
+    changelog = "https://github.com/angryip/ipscan/blob/${version}/CHANGELOG";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl2Only;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ kylesferrazza totoroot ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/isolate/default.nix b/nixpkgs/pkgs/tools/security/isolate/default.nix
new file mode 100644
index 000000000000..4aa592029600
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/isolate/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, asciidoc
+, libcap
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "isolate";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "ioi";
+    repo = "isolate";
+    rev = "v${version}";
+    hash = "sha256-xY2omzqIJYElLtzj4byy/QG4pW4erCxc+cD2X9nA2jM=";
+  };
+
+  nativeBuildInputs = [
+    asciidoc
+    installShellFiles
+  ];
+
+  buildInputs = [
+    libcap.dev
+  ];
+
+  buildFlags = [
+    "isolate"
+    "isolate.1"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 ./isolate $out/bin/isolate
+    installManPage isolate.1
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Sandbox for securely executing untrusted programs";
+    homepage = "https://github.com/ioi/isolate";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ virchau13 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/jadx/default.nix b/nixpkgs/pkgs/tools/security/jadx/default.nix
new file mode 100644
index 000000000000..a1fbd44b0232
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jadx/default.nix
@@ -0,0 +1,161 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gradle
+, jdk
+, quark-engine
+, makeWrapper
+, perl
+, imagemagick
+, makeDesktopItem
+, copyDesktopItems
+, desktopToDarwinBundle
+}:
+
+let
+  pname = "jadx";
+  version = "1.4.7";
+
+  src = fetchFromGitHub {
+    owner = "skylot";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-3t2e3WfH/ohkdGWlfV3t9oHJ1Q6YM6nSLOgmzgJEkls=";
+  };
+
+  deps = stdenv.mkDerivation {
+    name = "${pname}-deps";
+    inherit src;
+
+    nativeBuildInputs = [ gradle jdk perl ];
+
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d)
+      export JADX_VERSION=${version}
+      gradle --no-daemon jar
+
+      # Apparently, Gradle won't cache the `compileOnlyApi` dependency
+      # `org.jetbrains:annotations:22.0.0` which is defined in
+      # `io.github.skylot:raung-common`. To make it available in the
+      # output, we patch `build.gradle` and run Gradle again.
+      substituteInPlace build.gradle \
+        --replace 'org.jetbrains:annotations:23.0.0' 'org.jetbrains:annotations:22.0.0'
+      gradle --no-daemon jar
+    '';
+
+    # Mavenize dependency paths
+    # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+
+      # Work around okio-2.10.0 bug, fixed in 3.0. Remove "-jvm" from filename.
+      # https://github.com/square/okio/issues/954
+      mv $out/com/squareup/okio/okio/2.10.0/okio{-jvm,}-2.10.0.jar
+    '';
+
+    outputHashMode = "recursive";
+    outputHash = "sha256-QebPRmfLtXy4ZlyKeGC5XNzhMTsYI0X36My+nTFvQpM=";
+  };
+in stdenv.mkDerivation (finalAttrs: {
+  inherit pname version src;
+
+  nativeBuildInputs = [ gradle jdk imagemagick makeWrapper copyDesktopItems ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ desktopToDarwinBundle ];
+
+  # Otherwise, Gradle fails with `java.net.SocketException: Operation not permitted`
+  __darwinAllowLocalNetworking = true;
+
+  buildPhase = ''
+    # The installDist Gradle build phase tries to copy some dependency .jar
+    # files multiple times into the build directory. This ends up failing when
+    # the dependencies are read directly from the Nix store since they are not
+    # marked as chmod +w. To work around this, get a local copy of the
+    # dependency store, and give write permissions.
+    depsDir=$(mktemp -d)
+    cp -R ${deps}/* $depsDir
+    chmod -R u+w $depsDir
+
+    gradleInit=$(mktemp)
+    cat >$gradleInit <<EOF
+      gradle.projectsLoaded {
+        rootProject.allprojects {
+          buildscript {
+            repositories {
+              clear()
+              maven { url '$depsDir' }
+            }
+          }
+          repositories {
+            clear()
+            maven { url '$depsDir' }
+          }
+        }
+      }
+
+      settingsEvaluated { settings ->
+        settings.pluginManagement {
+          repositories {
+            maven { url '$depsDir' }
+          }
+        }
+      }
+    EOF
+
+    export GRADLE_USER_HOME=$(mktemp -d)
+    export JADX_VERSION=${version}
+    gradle --offline --no-daemon --info --init-script $gradleInit pack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out $out/bin
+    cp -R build/jadx/lib $out
+    for prog in jadx jadx-gui; do
+      cp build/jadx/bin/$prog $out/bin
+      wrapProgram $out/bin/$prog \
+        --set JAVA_HOME ${jdk.home} \
+        --prefix PATH : "${lib.makeBinPath [ quark-engine ]}"
+    done
+
+    for size in 16 32 48; do
+      install -Dm444 \
+        jadx-gui/src/main/resources/logos/jadx-logo-"$size"px.png \
+        $out/share/icons/hicolor/"$size"x"$size"/apps/jadx.png
+    done
+    for size in 64 128 256; do
+      mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+      convert -resize "$size"x"$size" jadx-gui/src/main/resources/logos/jadx-logo.png $out/share/icons/hicolor/"$size"x"$size"/apps/jadx.png
+    done
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "jadx";
+      desktopName = "JADX";
+      exec = "jadx-gui";
+      icon = "jadx";
+      comment = finalAttrs.meta.description;
+      categories = [ "Development" "Utility" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "Dex to Java decompiler";
+    longDescription = ''
+      Command line and GUI tools for produce Java source code from Android Dex
+      and Apk files.
+    '';
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ delroth emilytrau ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/jaeles/default.nix b/nixpkgs/pkgs/tools/security/jaeles/default.nix
new file mode 100644
index 000000000000..5ab635b35ac2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jaeles/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "jaeles";
+  version = "0.17.1";
+
+  src = fetchFromGitHub {
+    owner = "jaeles-project";
+    repo = pname;
+    rev = "beta-v${version}";
+    hash = "sha256-IGvIjO1nCilg2sPyScGTH5Zmv0rORlGwRv3NRxQk+aM=";
+  };
+
+  vendorHash = "sha256-/Ow2qdcFduZ2ZyUUfCqpZxSh9yy3+tI/2N9Wl1fKXVI=";
+
+  # Tests want to download signatures
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for automated Web application testing";
+    homepage = "https://github.com/jaeles-project/jaeles";
+    changelog = "https://github.com/jaeles-project/jaeles/releases/tag/beta-v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/jd-cli/default.nix b/nixpkgs/pkgs/tools/security/jd-cli/default.nix
new file mode 100644
index 000000000000..10fa31a706c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jd-cli/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, jre, makeWrapper, maven }:
+
+maven.buildMavenPackage rec {
+  pname = "jd-cli";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "intoolswetrust";
+    repo = pname;
+    rev = "${pname}-${version}";
+    hash = "sha256-rRttA5H0A0c44loBzbKH7Waoted3IsOgxGCD2VM0U/Q=";
+  };
+
+  mvnHash = "sha256-yqMAEjaNHxm/c/cbApiMjkN7V6Gx/crs1LPbD0k0cgk=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/jd-cli
+    install -Dm644 jd-cli/target/jd-cli.jar $out/share/jd-cli
+
+    makeWrapper ${jre}/bin/java $out/bin/jd-cli \
+      --add-flags "-jar $out/share/jd-cli/jd-cli.jar"
+  '';
+
+  meta = with lib; {
+    description = "Simple command line wrapper around JD Core Java Decompiler project";
+    homepage = "https://github.com/intoolswetrust/jd-cli";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ majiir ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/jd-gui/default.nix b/nixpkgs/pkgs/tools/security/jd-gui/default.nix
new file mode 100644
index 000000000000..2663af4ed620
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jd-gui/default.nix
@@ -0,0 +1,134 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, jre
+, jdk
+, gradle_6
+, makeDesktopItem
+, copyDesktopItems
+, perl
+, writeText
+, runtimeShell
+}:
+
+let
+  pname = "jd-gui";
+  version = "1.6.6";
+
+  src = fetchFromGitHub {
+    owner = "java-decompiler";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-QHiZPYFwDQzbXVSuhwzQqBRXlkG9QVU+Jl6SKvBoCwQ=";
+  };
+
+  patches = [
+    # https://github.com/java-decompiler/jd-gui/pull/362
+    (fetchpatch {
+      name = "nebula-plugin-gradle-6-compatibility.patch";
+      url = "https://github.com/java-decompiler/jd-gui/commit/91f805f9dc8ce0097460e63c8095ccea870687e6.patch";
+      hash = "sha256-9eaM9Mx2FaKIhGSOHjATKN/CrtvJeXyrH8Mdx8LNtpE=";
+    })
+  ];
+
+  deps = stdenv.mkDerivation {
+    name = "${pname}-deps";
+    inherit src patches;
+
+    nativeBuildInputs = [ jdk perl gradle_6 ];
+
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d);
+      gradle --no-daemon jar
+    '';
+
+    # Mavenize dependency paths
+    # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+    '';
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "sha256-gqUyZE+MoZRYCcJx95Qc4dZIC3DZvxee6UQhpfveDI4=";
+  };
+
+  # Point to our local deps repo
+  gradleInit = writeText "init.gradle" ''
+    logger.lifecycle 'Replacing Maven repositories with ${deps}...'
+
+    gradle.projectsLoaded {
+      rootProject.allprojects {
+        buildscript {
+          repositories {
+            clear()
+            maven { url '${deps}' }
+          }
+        }
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "jd-gui";
+    exec = "jd-gui %F";
+    icon = "jd-gui";
+    comment = "Java Decompiler JD-GUI";
+    desktopName = "JD-GUI";
+    genericName = "Java Decompiler";
+    mimeTypes = [ "application/java" "application/java-vm" "application/java-archive" ];
+    categories = [ "Development" "Debugger" ];
+    startupWMClass = "org-jd-gui-App";
+  };
+
+in stdenv.mkDerivation rec {
+  inherit pname version src patches;
+  name = "${pname}-${version}";
+
+  nativeBuildInputs = [ jdk gradle_6 copyDesktopItems ];
+
+  buildPhase = ''
+    export GRADLE_USER_HOME=$(mktemp -d)
+    gradle --offline --no-daemon --info --init-script ${gradleInit} jar
+  '';
+
+  installPhase = let
+    jar = "$out/share/jd-gui/${name}.jar";
+  in ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/{jd-gui,icons/hicolor/128x128/apps}
+    cp build/libs/${name}.jar ${jar}
+    cp src/linux/resources/jd_icon_128.png $out/share/icons/hicolor/128x128/apps/jd-gui.png
+
+    cat > $out/bin/jd-gui <<EOF
+    #!${runtimeShell}
+    export JAVA_HOME=${jre}
+    exec ${jre}/bin/java -jar ${jar} "\$@"
+    EOF
+    chmod +x $out/bin/jd-gui
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    description = "Fast Java Decompiler with powerful GUI";
+    homepage    = "https://java-decompiler.github.io/";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license     = licenses.gpl3;
+    platforms   = platforms.unix;
+    maintainers = [ maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/john/default.nix b/nixpkgs/pkgs/tools/security/john/default.nix
new file mode 100644
index 000000000000..745b027a057e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/john/default.nix
@@ -0,0 +1,91 @@
+{ lib, stdenv, fetchFromGitHub, openssl, nss, nspr, libkrb5, gmp, zlib, libpcap, re2
+, gcc, python3Packages, perl, perlPackages, makeWrapper, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "john";
+  version = "1.9.0-jumbo-1";
+
+  src = fetchFromGitHub {
+    owner = "openwall";
+    repo = pname;
+    rev = "1.9.0-Jumbo-1";
+    sha256 = "sha256-O1iPh5QTMjZ78sKvGbvSpaHFbBuVc1z49UKTbMa24Rs=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-gcc-11-struct-allignment-incompatibility.patch";
+      url = "https://github.com/openwall/john/commit/154ee1156d62dd207aff0052b04c61796a1fde3b.patch";
+      sha256 = "sha256-3rfS2tu/TF+KW2MQiR+bh4w/FVECciTooDQNTHNw31A=";
+    })
+    (fetchpatch {
+      name = "improve-apple-clang-pseudo-intrinsics-portability.patch";
+      url = "https://github.com/openwall/john/commit/c9825e688d1fb9fdd8942ceb0a6b4457b0f9f9b4.patch";
+      excludes = [ "doc/*" ];
+      sha256 = "sha256-hgoiz7IgR4f66fMP7bV1F8knJttY8g2Hxyk3QfkTu+g=";
+    })
+  ];
+
+  postPatch = ''
+    sed -ri -e '
+      s!^(#define\s+CFG_[A-Z]+_NAME\s+).*/!\1"'"$out"'/etc/john/!
+      /^#define\s+JOHN_SYSTEMWIDE/s!/usr!'"$out"'!
+    ' src/params.h
+    sed -ri -e '/^\.include/ {
+      s!\$JOHN!'"$out"'/etc/john!
+      s!^(\.include\s*)<([^./]+\.conf)>!\1"'"$out"'/etc/john/\2"!
+    }' run/*.conf
+  '';
+
+  preConfigure = ''
+    cd src
+    # Makefile.in depends on AS and LD being set to CC, which is set by default in configure.ac.
+    # This ensures we override the environment variables set in cc-wrapper/setup-hook.sh
+    export AS=$CC
+    export LD=$CC
+  '';
+  configureFlags = [
+    "--disable-native-tests"
+    "--with-systemwide"
+  ];
+
+  buildInputs = [ openssl nss nspr libkrb5 gmp zlib libpcap re2 ];
+  nativeBuildInputs = [ gcc python3Packages.wrapPython perl makeWrapper ];
+  propagatedBuildInputs = (with python3Packages; [ dpkt scapy lxml ]) ++ # For pcap2john.py
+                          (with perlPackages; [ DigestMD4 DigestSHA1 GetoptLong # For pass_gen.pl
+                                                CompressRawLzma # For 7z2john.pl
+                                                perlldap ]); # For sha-dump.pl
+                          # TODO: Get dependencies for radius2john.pl and lion2john-alt.pl
+
+  # gcc -DAC_BUILT -Wall vncpcap2john.o memdbg.o -g    -lpcap -fopenmp -o ../run/vncpcap2john
+  # gcc: error: memdbg.o: No such file or directory
+  enableParallelBuilding = false;
+
+  postInstall = ''
+    mkdir -p "$out/bin" "$out/etc/john" "$out/share/john" "$out/share/doc/john" "$out/share/john/rules" "$out/${perlPackages.perl.libPrefix}"
+    find -L ../run -mindepth 1 -maxdepth 1 -type f -executable \
+      -exec cp -d {} "$out/bin" \;
+    cp -vt "$out/etc/john" ../run/*.conf
+    cp -vt "$out/share/john" ../run/*.chr ../run/password.lst
+    cp -vt "$out/share/john/rules" ../run/rules/*.rule
+    cp -vrt "$out/share/doc/john" ../doc/*
+    cp -vt "$out/${perlPackages.perl.libPrefix}" ../run/lib/*
+  '';
+
+  postFixup = ''
+    wrapPythonPrograms
+
+    for i in $out/bin/*.pl; do
+      wrapProgram "$i" --prefix PERL5LIB : "$PERL5LIB:$out/${perlPackages.perl.libPrefix}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "John the Ripper password cracker";
+    license = licenses.gpl2Plus;
+    homepage = "https://github.com/openwall/john/";
+    maintainers = with maintainers; [ offline matthewbauer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/joincap/default.nix b/nixpkgs/pkgs/tools/security/joincap/default.nix
new file mode 100644
index 000000000000..1589602ac062
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/joincap/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, libpcap
+}:
+
+buildGoModule rec {
+  pname = "joincap";
+  version = "0.10.2";
+
+  src = fetchFromGitHub {
+    owner = "assafmo";
+    repo = "joincap";
+    rev = "v${version}";
+    hash = "sha256-Xli9G/VkDWKkc+7mldmLfvigvPPcdcToc4e15uoadDQ=";
+  };
+
+  vendorHash = "sha256-YsLIbt3uiA1d08yIEhSRdep1+52AxRvbIzDHlhc5s7Y=";
+
+  buildInputs = [
+    libpcap
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Merge multiple pcap files together, gracefully";
+    homepage = "https://github.com/assafmo/joincap";
+    changelog = "https://github.com/assafmo/joincap/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/joomscan/default.nix b/nixpkgs/pkgs/tools/security/joomscan/default.nix
new file mode 100644
index 000000000000..665df74b10bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/joomscan/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, perl, makeWrapper }:
+
+let
+  p = perl.withPackages (ps: with ps; [ LWP LWPProtocolHttps ]);
+in
+stdenv.mkDerivation rec {
+  pname = "joomscan";
+  version = "unstable-2021-06-08";
+
+  src = fetchFromGitHub {
+    owner = "owasp";
+    repo = pname;
+    rev = "79315393509caa39895e553c489667636ac31b85";
+    sha256 = "Yg91iUhqbKZyPghiX0UZ7S1ql0DZLtPHOk9VEY1ZZOg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share
+    cp -r . $out/share/joomscan
+    makeWrapper ${p}/bin/perl $out/bin/joomscan.pl \
+      --add-flags $out/share/joomscan/joomscan.pl
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Joomla Vulnerability Scanner";
+    homepage = "https://wiki.owasp.org/index.php/Category:OWASP_Joomla_Vulnerability_Scanner_Project";
+    mainProgram = "joomscan.pl";
+    maintainers = with maintainers; [ emilytrau ];
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/jsluice/default.nix b/nixpkgs/pkgs/tools/security/jsluice/default.nix
new file mode 100644
index 000000000000..18a386c94b0d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jsluice/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "jsluice";
+  version = "unstable-2023-06-23";
+
+  src = fetchFromGitHub {
+    owner = "BishopFox";
+    repo = "jsluice";
+    rev = "f10429e1016a9573da0157eacde8f7feb9deb8c7";
+    hash = "sha256-l9rwC1ljtt7Q+FYKdQFhtnLJDS8OwMJXIIpZgya0zwU=";
+  };
+
+  vendorHash = "sha256-u4E+b/vChXArovtaZ4LODaINWit86i5K4GyHLR0JSyU=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Tool for extracting URLs, paths, secrets, and other data from JavaScript source code";
+    homepage = "https://github.com/BishopFox/jsluice";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/jsubfinder/default.nix b/nixpkgs/pkgs/tools/security/jsubfinder/default.nix
new file mode 100644
index 000000000000..328c81143d1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jsubfinder/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "jsubfinder";
+  version = "unstable-2022-05-31";
+
+  src = fetchFromGitHub {
+    owner = "ThreatUnkown";
+    repo = pname;
+    rev = "e21de1ebc174bb69485f1c224e8063c77d87e4ad";
+    hash = "sha256-QjRYJyk0uFGa6FCCYK9SIJhoyam4ALsQJ26DsmbNk8s=";
+  };
+
+  vendorHash = "sha256-pr4KkszyzEl+yLJousx29tr7UZDJf0arEfXBb7eumww=";
+
+  meta = with lib; {
+    description = "Tool to search for in Javascript hidden subdomains and secrets";
+    homepage = "https://github.com/ThreatUnkown/jsubfinder";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/jwt-cli/default.nix b/nixpkgs/pkgs/tools/security/jwt-cli/default.nix
new file mode 100644
index 000000000000..6d970dca9519
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jwt-cli/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jwt-cli";
+  version = "6.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mike-engel";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-EzXpiJGTAlTDHJwl7FwIsDHMqStj2PLD1PHmv0flBKc=";
+  };
+
+  cargoHash = "sha256-l1W+eYuKnMPN2wPhYPXo5ixUz2bX+FZnDazk+FbxquU=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/jwt --version > /dev/null
+    $out/bin/jwt decode eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c \
+      | grep -q 'John Doe'
+  '';
+
+  meta = with lib; {
+    description = "Super fast CLI tool to decode and encode JWTs";
+    homepage = "https://github.com/mike-engel/jwt-cli";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ rycee ];
+    mainProgram = "jwt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/jwt-hack/default.nix b/nixpkgs/pkgs/tools/security/jwt-hack/default.nix
new file mode 100644
index 000000000000..4922f67fe576
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jwt-hack/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "jwt-hack";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "hahwul";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-K0ZtEi0zAKRlIGvorrXmtmkcMvyLIXWPnVMQANZbClk=";
+  };
+
+  vendorHash = "sha256-VYh3oRy8bmtXf6AnLNi/M2kA6t+crW3AXBiGovpdt8U=";
+
+  meta = with lib; {
+    description = "Tool for attacking JWT";
+    homepage = "https://github.com/hahwul/jwt-hack";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "jwt-hack";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/jwx/default.nix b/nixpkgs/pkgs/tools/security/jwx/default.nix
new file mode 100644
index 000000000000..6841cfe573ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jwx/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "jwx";
+  version = "2.0.19";
+
+  src = fetchFromGitHub {
+    owner = "lestrrat-go";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-JR2Z1XOcTfocaXHA+q6INcIZFeuMjB+G16fRmYjOhzU=";
+  };
+
+  vendorHash = "sha256-g97cSHGo0nw7Ker+S/qG0awUf1/UdcSkF55BjMyTfAY=";
+
+  sourceRoot = "${src.name}/cmd/jwx";
+
+  meta = with lib; {
+    description = " Implementation of various JWx (Javascript Object Signing and Encryption/JOSE) technologies";
+    homepage = "https://github.com/lestrrat-go/jwx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ arianvp flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/katana/default.nix b/nixpkgs/pkgs/tools/security/katana/default.nix
new file mode 100644
index 000000000000..1f4a7300e228
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/katana/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "katana";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "katana";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-phxJhrZaJ+gw7gZWwQK0pvWWxkS4UDi77s+qgTvS/fo=";
+  };
+
+  vendorHash = "sha256-go+6NOQOnmds7EuA5k076Qdib2CqGthH9BHOm0YYKaA=";
+
+  subPackages = [
+    "cmd/katana"
+  ];
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  meta = with lib; {
+    description = "A next-generation crawling and spidering framework";
+    homepage = "https://github.com/projectdiscovery/katana";
+    changelog = "https://github.com/projectdiscovery/katana/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kbs2/default.nix b/nixpkgs/pkgs/tools/security/kbs2/default.nix
new file mode 100644
index 000000000000..3e9a726651a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kbs2/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, python3
+, libxcb
+, AppKit
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kbs2";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "woodruffw";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-o8/ENAWzVqs7rokST6xnyu9Q/pKqq/UnKWOFRuIuGes=";
+  };
+
+  cargoHash = "sha256-LcnvCWGVdBxhDgQDoGHXRppGeEpfjOv/F0dZMN2bOF8=";
+
+  nativeBuildInputs = [ installShellFiles ]
+    ++ lib.optionals stdenv.isLinux [ python3 ];
+
+  buildInputs = [ ]
+    ++ lib.optionals stdenv.isLinux [ libxcb ]
+    ++ lib.optionals stdenv.isDarwin [ SystemConfiguration AppKit ];
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  checkFlags = [ "--skip=kbs2::config::tests::test_find_config_dir" ]
+    ++ lib.optionals stdenv.isDarwin [ "--skip=test_ragelib_rewrap_keyfile" ];
+
+  postInstall = ''
+    mkdir -p $out/share/kbs2
+    cp -r contrib/ $out/share/kbs2
+    installShellCompletion --cmd kbs2 \
+      --bash <($out/bin/kbs2 --completions bash) \
+      --fish <($out/bin/kbs2 --completions fish) \
+      --zsh <($out/bin/kbs2 --completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "A secret manager backed by age";
+    homepage = "https://github.com/woodruffw/kbs2";
+    changelog = "https://github.com/woodruffw/kbs2/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kdigger/default.nix b/nixpkgs/pkgs/tools/security/kdigger/default.nix
new file mode 100644
index 000000000000..82070c89447a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kdigger/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "kdigger";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "quarkslab";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/F1wmP1hfhrAmx2jJtAn02LkTabi0RJu36T/oW3tyZw=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse HEAD > $out/COMMIT
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+  vendorHash = "sha256-rDJFowbOj77n/sBoDgFEF+2PgghxufvIgzbMqrHehws=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # static to be easily copied into containers since it's an in-pod pen-testing tool
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/quarkslab/kdigger/commands.VERSION=v${version}"
+    "-X github.com/quarkslab/kdigger/commands.BUILDERARCH=${stdenv.hostPlatform.linuxArch}"
+  ];
+
+  preBuild = ''
+    ldflags+=" -X github.com/quarkslab/kdigger/commands.GITCOMMIT=$(cat COMMIT)"
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd kdigger \
+      --bash <($out/bin/kdigger completion bash) \
+      --fish <($out/bin/kdigger completion fish) \
+      --zsh <($out/bin/kdigger completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/kdigger --help
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/quarkslab/kdigger";
+    changelog = "https://github.com/quarkslab/kdigger/releases/tag/v${version}";
+    description = "An in-pod context discovery tool for Kubernetes penetration testing";
+    longDescription = ''
+      kdigger, short for "Kubernetes digger", is a context discovery tool for
+      Kubernetes penetration testing. This tool is a compilation of various
+      plugins called buckets to facilitate pentesting Kubernetes from inside a
+      pod.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/keepwn/default.nix b/nixpkgs/pkgs/tools/security/keepwn/default.nix
new file mode 100644
index 000000000000..bb856c80710b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keepwn/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "keepwn";
+  version = "0.3";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "Orange-Cyberdefense";
+    repo = "KeePwn";
+    rev = "refs/tags/${version}";
+    hash = "sha256-haKWuoTtyC9vIise+gznruHEwMIDz1W6euihLLKnSdc=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    chardet
+    impacket
+    lxml
+    pefile
+    pykeepass
+    python-magic
+    termcolor
+  ];
+
+  postInstall = lib.optionalString (!stdenv.isDarwin) ''
+    mv $out/bin/KeePwn $out/bin/$pname
+  '';
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "keepwn"
+  ];
+
+  meta = with lib; {
+    description = "Tool to automate KeePass discovery and secret extraction";
+    homepage = "https://github.com/Orange-Cyberdefense/KeePwn";
+    changelog = "https://github.com/Orange-Cyberdefense/KeePwn/releases/tag/${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kepler/default.nix b/nixpkgs/pkgs/tools/security/kepler/default.nix
new file mode 100644
index 000000000000..e4d2fc914cf9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kepler/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, darwin
+, fetchFromGitHub
+, openssl
+, pkg-config
+, postgresql
+, rustPlatform
+, zstd
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kepler";
+  version = "unstable-2023-07-19";
+
+  src = fetchFromGitHub {
+    owner = "Exein-io";
+    repo = "kepler";
+    rev = "9f4f9c617f2477850ed70f1b1d7387807c35d26c";
+    hash = "sha256-jmQ88flSMrS0CB7GNj1Ee60HZgroDKTwLk0i/kg6gVM=";
+  };
+
+  cargoHash = "sha256-+WLb4DsAW6tnO0KdtD9zMnYCEb1t0onZqFhnqhbIStU=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+    postgresql
+    zstd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  env = {
+    ZSTD_SYS_USE_PKG_CONFIG = true;
+  };
+
+  meta = with lib; {
+    description = "NIST-based CVE lookup store and API powered by Rust";
+    homepage = "https://github.com/Exein-io/kepler";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "kepler";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kerbrute/default.nix b/nixpkgs/pkgs/tools/security/kerbrute/default.nix
new file mode 100644
index 000000000000..dbadde6129d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kerbrute/default.nix
@@ -0,0 +1,29 @@
+{ lib, python3, fetchPypi }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "kerbrute";
+  version = "0.0.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-ok/yttRSkCaEdV4aM2670qERjgDBll6Oi3L5TV5YEEA=";
+  };
+
+  # This package does not have any tests
+  doCheck = false;
+
+  propagatedBuildInputs = with python3.pkgs; [
+    impacket
+  ];
+
+  installChechPhase = ''
+    $out/bin/kerbrute --version
+  '';
+
+  meta = {
+    homepage = "https://github.com/TarlogicSecurity/kerbrute";
+    description = "Kerberos bruteforce utility";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ applePrincess ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kestrel/default.nix b/nixpkgs/pkgs/tools/security/kestrel/default.nix
new file mode 100644
index 000000000000..f3d40b5ade0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kestrel/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kestrel";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "finfet";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-n0XIFBCwpc6QTj3PjGp+fYtU4U+RAfA4PRcettFlxVA=";
+  };
+
+  cargoHash = "sha256-GZK4IaAolU1up2bYd/2tBahcCP70hO5/shDODUD+aRE=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installManPage docs/man/kestrel.1
+    installShellCompletion --bash --name ${pname} completion/kestrel.bash-completion
+  '';
+
+  meta = with lib; {
+    description = "File encryption done right";
+    longDescription = "
+      Kestrel is a data-at-rest file encryption program
+      that lets you encrypt files to anyone with a public key.
+    ";
+    homepage = "https://getkestrel.com";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ zendo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/keybase/default.nix b/nixpkgs/pkgs/tools/security/keybase/default.nix
new file mode 100644
index 000000000000..3d990468109b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keybase/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, substituteAll, lib, buildGoModule, fetchFromGitHub
+, AVFoundation, AudioToolbox, ImageIO, CoreMedia
+, Foundation, CoreGraphics, MediaToolbox, gnupg
+}:
+
+buildGoModule rec {
+  pname = "keybase";
+  version = "6.2.4";
+
+  modRoot = "go";
+  subPackages = [ "kbnm" "keybase" ];
+
+  dontRenameImports = true;
+
+  src = fetchFromGitHub {
+    owner = "keybase";
+    repo = "client";
+    rev = "v${version}";
+    hash = "sha256-z7vpCUK+NU7xU9sNBlQnSy9sjXD7/m8jSRKfJAgyyN8=";
+  };
+  vendorHash = "sha256-tXEEVEfjoKub2A4m7F3hDc5ABJ+R+axwX1+1j7e3BAM=";
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths-keybase.patch;
+      gpg = "${gnupg}/bin/gpg";
+      gpg2 = "${gnupg}/bin/gpg2";
+    })
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ AVFoundation AudioToolbox ImageIO CoreMedia Foundation CoreGraphics MediaToolbox ];
+  tags = [ "production" ];
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://www.keybase.io/";
+    description = "The Keybase official command-line utility and service";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ avaq np rvolosatovs Br1ght0ne shofius ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/keybase/fix-paths-keybase.patch b/nixpkgs/pkgs/tools/security/keybase/fix-paths-keybase.patch
new file mode 100644
index 000000000000..b3de7bbb530d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keybase/fix-paths-keybase.patch
@@ -0,0 +1,16 @@
+diff --git a/go/libkb/gpg_cli.go b/go/libkb/gpg_cli.go
+index 3c7c6257..ae8f7e2f 100644
+--- a/go/libkb/gpg_cli.go
++++ b/go/libkb/gpg_cli.go
+@@ -54,9 +54,9 @@ func (g *GpgCLI) Configure(mctx MetaContext) (err error) {
+ 	if len(prog) > 0 {
+ 		err = canExec(prog)
+ 	} else {
+-		prog, err = exec.LookPath("gpg2")
++		prog, err = exec.LookPath("@gpg2@")
+ 		if err != nil {
+-			prog, err = exec.LookPath("gpg")
++			prog, err = exec.LookPath("@gpg@")
+ 		}
+ 	}
+ 	if err != nil {
diff --git a/nixpkgs/pkgs/tools/security/keybase/gui.nix b/nixpkgs/pkgs/tools/security/keybase/gui.nix
new file mode 100644
index 000000000000..8541b02d583e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keybase/gui.nix
@@ -0,0 +1,117 @@
+{ stdenv, lib, fetchurl, alsa-lib, atk, cairo, cups, udev, libdrm, mesa
+, dbus, expat, fontconfig, freetype, gdk-pixbuf, glib, gtk3, libappindicator-gtk3
+, libnotify, nspr, nss, pango, systemd, xorg, autoPatchelfHook, wrapGAppsHook
+, runtimeShell, gsettings-desktop-schemas }:
+
+let
+  versionSuffix = "20240101011938.ae7e4a1c15";
+in
+
+stdenv.mkDerivation rec {
+  pname = "keybase-gui";
+  version = "6.2.4"; # Find latest version and versionSuffix from https://prerelease.keybase.io/deb/dists/stable/main/binary-amd64/Packages
+
+  src = fetchurl {
+    url = "https://s3.amazonaws.com/prerelease.keybase.io/linux_binaries/deb/keybase_${version + "-" + versionSuffix}_amd64.deb";
+    hash = "sha256-XyGb9F83z8+OSjxOaO5k+h2qIY78ofS/ZfTXki54E5Q=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gsettings-desktop-schemas
+    gtk3
+    libappindicator-gtk3
+    libnotify
+    nspr
+    nss
+    pango
+    systemd
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libxcb
+    libdrm
+    mesa.out
+  ];
+
+  runtimeDependencies = [
+    (lib.getLib udev)
+    libappindicator-gtk3
+  ];
+
+  dontBuild = true;
+  dontConfigure = true;
+  dontPatchELF = true;
+
+  unpackPhase = ''
+    ar xf $src
+    tar xf data.tar.xz
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv usr/share $out/share
+    mv opt/keybase $out/share/
+
+    cat > $out/bin/keybase-gui <<EOF
+    #!${runtimeShell}
+
+    checkFailed() {
+      if [ "\$NIX_SKIP_KEYBASE_CHECKS" = "1" ]; then
+        return
+      fi
+      echo "Set NIX_SKIP_KEYBASE_CHECKS=1 if you want to skip this check." >&2
+      exit 1
+    }
+
+    if [ ! -S "\$XDG_RUNTIME_DIR/keybase/keybased.sock" ]; then
+      echo "Keybase service doesn't seem to be running." >&2
+      echo "You might need to run: keybase service" >&2
+      checkFailed
+    fi
+
+    if [ -z "\$(keybase status | grep kbfsfuse)" ]; then
+      echo "Could not find kbfsfuse client in keybase status." >&2
+      echo "You might need to run: kbfsfuse" >&2
+      checkFailed
+    fi
+
+    exec $out/share/keybase/Keybase "\$@"
+    EOF
+    chmod +x $out/bin/keybase-gui
+
+    substituteInPlace $out/share/applications/keybase.desktop \
+      --replace run_keybase $out/bin/keybase-gui
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.keybase.io/";
+    description = "The Keybase official GUI";
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ avaq rvolosatovs puffnfresh np Br1ght0ne shofius ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/keybase/kbfs.nix b/nixpkgs/pkgs/tools/security/keybase/kbfs.nix
new file mode 100644
index 000000000000..3c508e86f76f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keybase/kbfs.nix
@@ -0,0 +1,20 @@
+{ lib, buildGoModule, keybase }:
+
+buildGoModule {
+  pname = "kbfs";
+
+  inherit (keybase) src version vendorHash;
+
+  modRoot = "go";
+  subPackages = [ "kbfs/kbfsfuse" "kbfs/redirector" "kbfs/kbfsgit/git-remote-keybase" ];
+
+  tags = [ "production" ];
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://keybase.io/docs/kbfs";
+    description = "The Keybase filesystem";
+    maintainers = with maintainers; [ avaq rvolosatovs bennofs np shofius ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/keycard-cli/default.nix b/nixpkgs/pkgs/tools/security/keycard-cli/default.nix
new file mode 100644
index 000000000000..851a0dac9031
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keycard-cli/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, pkg-config, pcsclite }:
+
+buildGoModule rec {
+  pname = "keycard-cli";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "status-im";
+    repo = pname;
+    rev = version;
+    hash = "sha256-K2XxajprpPjfIs8rrnf2coIEQjPnir9/U0fTvqV2++g=";
+  };
+
+  vendorHash = "sha256-3XzWOiZF2WNs2pdumYN9bphvBKY+rrjuT+wWhB2pwT0=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pcsclite ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "A command line tool and shell to manage keycards";
+    homepage = "https://keycard.status.im";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.zimbatm ];
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/keycard-cli.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/keyscope/default.nix b/nixpkgs/pkgs/tools/security/keyscope/default.nix
new file mode 100644
index 000000000000..31d97256f0e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keyscope/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, DiskArbitration
+, Foundation
+, IOKit
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "keyscope";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "spectralops";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-SrBtgirg52q7gM3GZsJsV8ASACvb4sYv5HDbyItpjbk=";
+  };
+
+  cargoSha256 = "sha256-MFP3AqlfaclmZxRwaWFw6hsZwCQMRKJEyFEyUN+QLqo=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    DiskArbitration
+    Foundation
+    IOKit
+    Security
+  ];
+
+  # build script tries to get information from git
+  postPatch = ''
+    echo "fn main() {}" > build.rs
+  '';
+
+  VERGEN_GIT_SEMVER = "v${version}";
+
+  meta = with lib; {
+    description = "A key and secret workflow (validation, invalidation, etc.) tool";
+    homepage = "https://github.com/spectralops/keyscope";
+    changelog = "https://github.com/spectralops/keyscope/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kiterunner/default.nix b/nixpkgs/pkgs/tools/security/kiterunner/default.nix
new file mode 100644
index 000000000000..5f73ba055902
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kiterunner/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "kiterunner";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "assetnote";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-vIYPpkbqyk0zH10DGp2FF0aI4lFpsZavulBIiR/3kiA=";
+  };
+
+  vendorHash = "sha256-fgtDP6X84iPO2Tcwq5jl8700PDKixJlIihgNaPX/n9k=";
+
+  ldflags = [
+    "-s" "-w" "-X github.com/assetnote/kiterunner/cmd/kiterunner/cmd.Version=${version}"
+  ];
+
+  subPackages = [ "./cmd/kiterunner" ];
+
+  # Test data is missing in the repo
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Contextual content discovery tool";
+    longDescription = ''
+      Kiterunner is a tool that is capable of not only performing traditional
+      content discovery at lightning fast speeds, but also bruteforcing routes
+      and endpoints in modern applications.
+    '';
+    homepage = "https://github.com/assetnote/kiterunner";
+    license = with licenses; [ agpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/knockpy/default.nix b/nixpkgs/pkgs/tools/security/knockpy/default.nix
new file mode 100644
index 000000000000..a3342e0b3809
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/knockpy/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "knockpy";
+  version = "6.1.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "guelfoweb";
+    repo = "knock";
+    rev = "refs/tags/${version}";
+    hash = "sha256-O4tXq4pDzuTBEGAls2I9bfBRdHssF4rFBec4OtfUx6A=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    colorama
+    matplotlib
+    networkx
+    pyqt5
+    requests
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "knockpy"
+  ];
+
+  meta = with lib; {
+    description = "Tool to scan subdomains";
+    homepage = "https://github.com/guelfoweb/knock";
+    changelog = "https://github.com/guelfoweb/knock/releases/tag/${version}";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/knowsmore/default.nix b/nixpkgs/pkgs/tools/security/knowsmore/default.nix
new file mode 100644
index 000000000000..d9a806ef2a58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/knowsmore/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "knowsmore";
+  version = "0.1.37";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "helviojunior";
+    repo = "knowsmore";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-UxBoWK3L4u9xSQaGGHpzvs/mRlmhF3EqiS/4BYyTKos=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aioconsole
+    ansi2image
+    beautifulsoup4
+    clint
+    colorama
+    impacket
+    levenshtein
+    minikerberos
+    neo4j
+    numpy
+    pypsrp
+    requests
+    tabulate
+    urllib3
+    xmltodict
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "knowsmore"
+  ];
+
+  pytestFlagsArray = [
+    "tests/tests*"
+  ];
+
+  meta = with lib; {
+    description = "Tool for pentesting Microsoft Active Directory";
+    homepage = "https://github.com/helviojunior/knowsmore";
+    changelog = "https://github.com/helviojunior/knowsmore/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kpcli/default.nix b/nixpkgs/pkgs/tools/security/kpcli/default.nix
new file mode 100644
index 000000000000..3ca03ee3ca10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kpcli/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, makeWrapper, perl, perlPackages }:
+
+stdenv.mkDerivation rec {
+  version = "4.0";
+  pname = "kpcli";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/kpcli/${pname}-${version}.pl";
+    sha256 = "sha256-UYnX2tad3Jg00kdX5WHStI6u2pyts+SZlgj/jv4o/TU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/{bin,share}
+    cp ${src} $out/share/kpcli.pl
+    chmod +x $out/share/kpcli.pl
+
+    makeWrapper $out/share/kpcli.pl $out/bin/kpcli --set PERL5LIB \
+      "${with perlPackages; makePerlPath ([
+         CaptureTiny Clipboard Clone CryptRijndael SortNaturally TermReadKey TermShellUI FileKeePass TermReadLineGnu XMLParser
+      ] ++ lib.optional stdenv.isDarwin MacPasteboard)}"
+  '';
+
+
+  meta = with lib; {
+    description = "KeePass Command Line Interface";
+    longDescription = ''
+      KeePass Command Line Interface (CLI) / interactive shell.
+      Use this program to access and manage your KeePass 1.x or 2.x databases from a Unix-like command line.
+    '';
+    license = licenses.artistic1;
+    homepage = "http://kpcli.sourceforge.net";
+    platforms = platforms.all;
+    maintainers = [ maintainers.j-keck ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/krunner-pass/default.nix b/nixpkgs/pkgs/tools/security/krunner-pass/default.nix
new file mode 100644
index 000000000000..032840b7d33c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/krunner-pass/default.nix
@@ -0,0 +1,59 @@
+{ mkDerivation
+, lib
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, extra-cmake-modules
+, kauth
+, krunner
+, pass
+}:
+
+mkDerivation rec {
+  pname = "krunner-pass";
+  # when upgrading the version, check if cmakeFlags is still needed
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "akermu";
+    repo = "krunner-pass";
+    rev = "v${version}";
+    sha256 = "032fs2174ls545kjixbhzyd65wgxkw4s5vg8b20irc5c9ak3pxm0";
+  };
+
+  buildInputs = [
+    kauth
+    krunner
+    (pass.withExtensions (p: with p; [ pass-otp ]))
+  ];
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/peterhoeg/krunner-pass/commit/be2695f4ae74b0cccec8294defcc92758583d96b.patch";
+      sha256 = "098dqnal57994p51p2srfzg4lgcd6ybp29h037llr9cdv02hdxvl";
+      name = "fix_build.patch";
+    })
+    ./pass-path.patch
+  ];
+
+  CXXFLAGS = [
+    ''-DNIXPKGS_PASS=\"${lib.getBin pass}/bin/pass\"''
+  ];
+
+  cmakeFlags = [
+    # there are *lots* of pointless warnings in v1.3.0
+    "-Wno-dev"
+    # required for kf5auth to work correctly
+    "-DCMAKE_POLICY_DEFAULT_CMP0012=NEW"
+  ];
+
+  meta = with lib; {
+    description = "Integrates krunner with pass the unix standard password manager (https://www.passwordstore.org/)";
+    homepage = "https://github.com/akermu/krunner-pass";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ysndr ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/krunner-pass/pass-path.patch b/nixpkgs/pkgs/tools/security/krunner-pass/pass-path.patch
new file mode 100644
index 000000000000..4ceb3c5d92da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/krunner-pass/pass-path.patch
@@ -0,0 +1,13 @@
+diff --git a/pass.cpp b/pass.cpp
+index c02f9d0..85c5b99 100644
+--- a/pass.cpp
++++ b/pass.cpp
+@@ -193,7 +193,7 @@ void Pass::run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &m
+     } else {
+         args << "show" << match.text();
+     }
+-    pass->start("pass", args);
++    pass->start(NIXPKGS_PASS, args);
+
+     connect(pass, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
+             [=](int exitCode, QProcess::ExitStatus exitStatus) {
diff --git a/nixpkgs/pkgs/tools/security/kstart/default.nix b/nixpkgs/pkgs/tools/security/kstart/default.nix
new file mode 100644
index 000000000000..88ccc960bc9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kstart/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, keyutils
+, libkrb5
+, openafs
+, perl
+, pkg-config
+, enableSetPAG ? false
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "kstart";
+  version = "4.3";
+
+  src = fetchFromGitHub {
+    owner = "rra";
+    repo = "kstart";
+    rev = "release/${finalAttrs.version}";
+    hash = "sha256-MGWL4oNc0MZTGWqBEt2wRTkqoagiUTDrS0kz4ewbZZA=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    perl
+    pkg-config
+  ];
+
+  buildInputs = [
+    keyutils
+    libkrb5
+    openafs
+  ];
+
+  configureFlags = [
+    "--enable-silent-rules"
+  ]
+  ++ (lib.optional enableSetPAG "--enable-setpag");
+
+  preBuild = ''
+    for f in k5start krenew; do
+      pod2man --release="${finalAttrs.version}" --center="kstart" docs/"$f".pod >docs/"$f".1
+    done
+  '';
+
+  doCheck = true;
+  preCheck = ''
+    patchShebangs tests
+  '';
+
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
+    outputsToInstall = [ "out" "man" ];
+    description = "Modified version of kerberos tools that support automatic ticket refresh";
+    license = licenses.mit;
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/kube-bench/default.nix b/nixpkgs/pkgs/tools/security/kube-bench/default.nix
new file mode 100644
index 000000000000..28b90f3d4bae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kube-bench/default.nix
@@ -0,0 +1,49 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "kube-bench";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "aquasecurity";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-EsUjGc7IIu5PK9KaODlQSfmm8jpjuBXvGZPNjSc1824=";
+  };
+
+  vendorHash = "sha256-i4k7eworPUvLUustr5U53qizHqUVw8yqGjdPQT6UIf4=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/aquasecurity/kube-bench/cmd.KubeBenchVersion=v${version}"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/kube-bench/
+    mv ./cfg $out/share/kube-bench/
+
+    installShellCompletion --cmd kube-bench \
+      --bash <($out/bin/kube-bench completion bash) \
+      --fish <($out/bin/kube-bench completion fish) \
+      --zsh <($out/bin/kube-bench completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/kube-bench --help
+    $out/bin/kube-bench version | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/aquasecurity/kube-bench";
+    changelog = "https://github.com/aquasecurity/kube-bench/releases/tag/v${version}";
+    description = "Checks whether Kubernetes is deployed according to security best practices as defined in the CIS Kubernetes Benchmark";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kube-hunter/default.nix b/nixpkgs/pkgs/tools/security/kube-hunter/default.nix
new file mode 100644
index 000000000000..bc23c3845b89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kube-hunter/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "kube-hunter";
+  version = "0.6.8";
+
+  src = fetchFromGitHub {
+    owner = "aquasecurity";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-+M8P/VSF9SKPvq+yNPjokyhggY7hzQ9qLLhkiTNbJls=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    netaddr
+    netifaces
+    requests
+    prettytable
+    urllib3
+    ruamel-yaml
+    future
+    packaging
+    pluggy
+    kubernetes
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+    requests-mock
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.cfg \
+      --replace "dataclasses" "" \
+      --replace "kubernetes==12.0.1" "kubernetes" \
+      --replace "--cov=kube_hunter" ""
+  '';
+
+  pythonImportsCheck = [
+    "kube_hunter"
+  ];
+
+  disabledTests = [
+    # Test is out-dated
+    "test_K8sCveHunter"
+  ];
+
+  meta = with lib; {
+    description = "Tool to search issues in Kubernetes clusters";
+    homepage = "https://github.com/aquasecurity/kube-hunter";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "kube-hunter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kubeaudit/default.nix b/nixpkgs/pkgs/tools/security/kubeaudit/default.nix
new file mode 100644
index 000000000000..135d29c27223
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kubeaudit/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "kubeaudit";
+  version = "0.22.1";
+
+  src = fetchFromGitHub {
+    owner = "Shopify";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ebqOjnr79S1utXaTKa9Jop9GvQsoW/IBMmIeOsGuvuE=";
+  };
+
+  vendorHash = "sha256-IxrAJaltg7vo3SQRC7OokSD5SM8xiX7iG8ZxKYEe9/E=";
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/$pname
+  '';
+
+  # Tests require a running Kubernetes instance
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Audit tool for Kubernetes";
+    homepage = "https://github.com/Shopify/kubeaudit";
+    changelog = "https://github.com/Shopify/kubeaudit/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kubeclarity/default.nix b/nixpkgs/pkgs/tools/security/kubeclarity/default.nix
new file mode 100644
index 000000000000..4aed36bbeaa2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kubeclarity/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, btrfs-progs
+, buildGoModule
+, fetchFromGitHub
+, lvm2
+, pkg-config
+}:
+
+buildGoModule rec {
+  pname = "kubeclarity";
+  version = "2.23.1";
+
+  src = fetchFromGitHub {
+    owner = "openclarity";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-buEahr6lr+C/99ANAgYdexPX76ECW6yGMes8u2GZKh4=";
+  };
+
+  vendorHash = "sha256-eAqF0ohZGryRh4u+j/30BObYP23yyrTecPrt+xmn9Sg=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    btrfs-progs
+    lvm2
+  ];
+
+  sourceRoot = "${src.name}/cli";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/kubeclarity
+  '';
+
+  meta = with lib; {
+    description = "Kubernetes runtime scanner";
+    longDescription = ''
+      KubeClarity is a vulnerabilities scanning and CIS Docker benchmark tool that
+      allows users to get an accurate and immediate risk assessment of their
+      kubernetes clusters. Kubei scans all images that are being used in a
+      Kubernetes cluster, including images of application pods and system pods.
+    '';
+    homepage = "https://github.com/openclarity/kubeclarity";
+    changelog = "https://github.com/openclarity/kubeclarity/releases/tag/v${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kubernetes-polaris/default.nix b/nixpkgs/pkgs/tools/security/kubernetes-polaris/default.nix
new file mode 100644
index 000000000000..b053640d8da9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kubernetes-polaris/default.nix
@@ -0,0 +1,52 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, packr, ... }:
+
+buildGoModule rec {
+  pname = "kubernetes-polaris";
+  version = "8.5.5";
+
+  src = fetchFromGitHub {
+    owner = "FairwindsOps";
+    repo = "polaris";
+    rev = version;
+    sha256 = "sha256-DKfCXtFrZgmR0jiXwCD1iuwx/8aNEjwZ/fCQNeRhSu4=";
+  };
+
+  vendorHash = "sha256-ZWetW+Xar4BXXlR0iG+O/NRqYk41x+PPVCGis2W2Nkk=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+    "-X main.Commit=${version}"
+  ];
+
+  preBuild = ''
+    ${packr}/bin/packr2 -v --ignore-imports
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd polaris \
+      --bash <($out/bin/polaris completion bash) \
+      --fish <($out/bin/polaris completion fish) \
+      --zsh <($out/bin/polaris completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/polaris help
+    $out/bin/polaris version | grep 'Polaris version:${version}'
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "Validate and remediate Kubernetes resources to ensure configuration best practices are followed";
+    homepage = "https://www.fairwinds.com/polaris";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ longer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kubescape/default.nix b/nixpkgs/pkgs/tools/security/kubescape/default.nix
new file mode 100644
index 000000000000..b5661ccbcd3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kubescape/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, kubescape
+, testers
+}:
+
+buildGoModule rec {
+  pname = "kubescape";
+  version = "2.9.1";
+
+  src = fetchFromGitHub {
+    owner = "kubescape";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-FKWR3pxFtJBEa14Mn3RKsLvrliHaj6TuF4F2JLtw2qA=";
+    fetchSubmodules = true;
+  };
+
+  vendorHash = "sha256-zcv8oYm6srwkwT3pUECtTewyqVVpCIcs3i0VRTRft68=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/kubescape/kubescape/v2/core/cautils.BuildNumber=v${version}"
+  ];
+
+  subPackages = [ "." ];
+
+  preCheck = ''
+    # Feed in all but the integration tests for testing
+    # This is because subPackages above limits what is built to just what we
+    # want but also limits the tests
+    # Skip httphandler tests - the checkPhase doesn't care about excludedPackages
+    getGoDirs() {
+      go list ./... | grep -v httphandler
+    }
+
+    # remove tests that use networking
+    rm core/pkg/resourcehandler/urlloader_test.go
+    rm core/pkg/opaprocessor/*_test.go
+    rm core/cautils/getter/downloadreleasedpolicy_test.go
+
+    # remove tests that use networking
+    substituteInPlace core/pkg/resourcehandler/repositoryscanner_test.go \
+      --replace "TestScanRepository" "SkipScanRepository" \
+      --replace "TestGit" "SkipGit"
+
+    # remove test that requires networking
+    substituteInPlace core/cautils/scaninfo_test.go \
+      --replace "TestSetContextMetadata" "SkipSetContextMetadata"
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd kubescape \
+      --bash <($out/bin/kubescape completion bash) \
+      --fish <($out/bin/kubescape completion fish) \
+      --zsh <($out/bin/kubescape completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = kubescape;
+    command = "kubescape version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "Tool for testing if Kubernetes is deployed securely";
+    homepage = "https://github.com/kubescape/kubescape";
+    changelog = "https://github.com/kubescape/kubescape/releases/tag/v${version}";
+    longDescription = ''
+      Kubescape is the first open-source tool for testing if Kubernetes is
+      deployed securely according to multiple frameworks: regulatory, customized
+      company policies and DevSecOps best practices, such as the NSA-CISA and
+      the MITRE ATT&CK®.
+      Kubescape scans K8s clusters, YAML files, and HELM charts, and detect
+      misconfigurations and software vulnerabilities at early stages of the
+      CI/CD pipeline and provides a risk score instantly and risk trends over
+      time. Kubescape integrates natively with other DevOps tools, including
+      Jenkins, CircleCI and Github workflows.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kubesec/default.nix b/nixpkgs/pkgs/tools/security/kubesec/default.nix
new file mode 100644
index 000000000000..4fa9337e1cb5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kubesec/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "kubesec";
+  version = "2.14.0";
+
+  src = fetchFromGitHub {
+    owner = "controlplaneio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-RNLvmoHna5EO0/p24opBagyWzzNbmFkWGzkUXirdWe0=";
+  };
+  vendorHash = "sha256-+Y5k9PRxnBR3lqi4T+3DH4Pw+cyHtt9+9OX4aw0CVl0=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/controlplaneio/kubesec/v${lib.versions.major version}/cmd.version=v${version}"
+  ];
+
+  # Tests wants to download the kubernetes schema for use with kubeval
+  doCheck = false;
+
+  postInstall = ''
+    installShellCompletion --cmd kubesec \
+      --bash <($out/bin/kubesec completion bash) \
+      --fish <($out/bin/kubesec completion fish) \
+      --zsh <($out/bin/kubesec completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/kubesec --help
+    $out/bin/kubesec version | grep "${version}"
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "Security risk analysis tool for Kubernetes resources";
+    homepage = "https://github.com/controlplaneio/kubesec";
+    changelog = "https://github.com/controlplaneio/kubesec/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kubestroyer/default.nix b/nixpkgs/pkgs/tools/security/kubestroyer/default.nix
new file mode 100644
index 000000000000..8e0922e4dfb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kubestroyer/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "kubestroyer";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "Rolix44";
+    repo = "Kubestroyer";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-M/abb2IT0mXwj8lAitr18VtIgC4NvapPywBwcUWr9i8=";
+  };
+
+  vendorHash = "sha256-x0lIi4QUuYn0kv0HV4h8k61kRu10LCyELudisqUdTAg=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Kubernetes exploitation tool";
+    homepage = "https://github.com/Rolix44/Kubestroyer";
+    changelog = "https://github.com/Rolix44/Kubestroyer/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "kubestroyer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/kwalletcli/default.nix b/nixpkgs/pkgs/tools/security/kwalletcli/default.nix
new file mode 100644
index 000000000000..3b01e4a2fb50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kwalletcli/default.nix
@@ -0,0 +1,54 @@
+{ mkDerivation, fetchFromGitHub, lib, makeWrapper, pkg-config
+, kcoreaddons, ki18n, kwallet, mksh, pinentry-qt }:
+
+mkDerivation rec {
+  pname = "kwalletcli";
+  version = "3.03";
+
+  src = fetchFromGitHub {
+    owner = "MirBSD";
+    repo = pname;
+    rev = "${pname}-${lib.replaceStrings [ "." ] [ "_" ] version}";
+    sha256 = "sha256-DUtaQITzHhQrqA9QJd0U/5EDjH0IzY9/kal/7SYQ/Ck=";
+  };
+
+  postPatch = ''
+    substituteInPlace GNUmakefile \
+      --replace -I/usr/include/KF5/KCoreAddons -I${kcoreaddons.dev}/include/KF5/KCoreAddons \
+      --replace -I/usr/include/KF5/KI18n       -I${ki18n.dev}/include/KF5/KI18n \
+      --replace -I/usr/include/KF5/KWallet     -I${kwallet.dev}/include/KF5/KWallet \
+      --replace /usr/bin                       $out/bin \
+      --replace /usr/share/man                 $out/share/man
+
+    substituteInPlace pinentry-kwallet \
+      --replace '/usr/bin/env mksh' ${mksh}/bin/mksh
+
+    substituteInPlace kwalletcli_getpin \
+      --replace '/usr/bin/env mksh' ${mksh}/bin/mksh
+  '';
+
+  makeFlags = [ "KDE_VER=5" ];
+
+  nativeBuildInputs = [ makeWrapper pkg-config ];
+  # if using just kwallet, cmake will be added as a buildInput and fail the build
+  propagatedBuildInputs = [ kcoreaddons ki18n (lib.getLib kwallet) ];
+
+  preInstall = ''
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  postInstall = ''
+    for program in pinentry-kwallet kwalletcli_getpin; do
+      wrapProgram $out/bin/$program \
+        --prefix PATH : $out/bin:${lib.makeBinPath [ pinentry-qt ]} \
+        --set-default PINENTRY pinentry-qt
+    done
+  '';
+
+  meta = with lib; {
+    description = "Command-Line Interface to the KDE Wallet";
+    homepage = "https://www.mirbsd.org/kwalletcli.htm";
+    license = licenses.miros;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/lastpass-cli/default.nix b/nixpkgs/pkgs/tools/security/lastpass-cli/default.nix
new file mode 100644
index 000000000000..c20157cb4194
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/lastpass-cli/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, asciidoc
+, cmake
+, docbook_xsl
+, pkg-config
+, bash-completion
+, openssl
+, curl
+, libxml2
+, libxslt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lastpass-cli";
+  version = "1.3.6";
+
+  src = fetchFromGitHub {
+    owner = "lastpass";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ntUBwZ0bVkkpvWK/jQBkLNpCYEDI14/ki0cLwYpEWXk=";
+  };
+
+  patches = [
+    # Pull fix pending upstream inclusion for -fno-common toolchains:
+    #   https://github.com/lastpass/lastpass-cli/pull/576
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/lastpass/lastpass-cli/commit/e3311cebdb29a3267843cf656a32f01c5062897e.patch";
+      sha256 = "1yjx2p98nb3n8ywc9lhf2zal5fswawb5i6lgnicdin23zngff5l8";
+    })
+  ];
+
+  nativeBuildInputs = [ asciidoc cmake docbook_xsl pkg-config ];
+
+  buildInputs = [
+    bash-completion
+    curl
+    openssl
+    libxml2
+    libxslt
+  ];
+
+  installTargets = [ "install" "install-doc" ];
+
+  postInstall = ''
+    install -Dm644 -T ../contrib/lpass_zsh_completion $out/share/zsh/site-functions/_lpass
+    install -Dm644 -T ../contrib/completions-lpass.fish $out/share/fish/vendor_completions.d/lpass.fish
+    install -Dm755 -T ../contrib/examples/git-credential-lastpass $out/bin/git-credential-lastpass
+  '';
+
+  meta = with lib; {
+    description = "Stores, retrieves, generates, and synchronizes passwords securely";
+    homepage = "https://github.com/lastpass/lastpass-cli";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ldapmonitor/default.nix b/nixpkgs/pkgs/tools/security/ldapmonitor/default.nix
new file mode 100644
index 000000000000..51295d2841a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ldapmonitor/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ldapmonitor";
+  version = "1.4";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "p0dalirius";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-BmTj/6dOUYfia6wO4nvkEW01MIC9TuBk4kYAsVHMsWY=";
+  };
+
+  sourceRoot = "${src.name}/python";
+
+  propagatedBuildInputs = with python3.pkgs; [
+    impacket
+    ldap3
+    python-ldap
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD pyLDAPmonitor.py $out/bin/ldapmonitor
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool to monitor creation, deletion and changes to LDAP objects";
+    homepage = "https://github.com/p0dalirius/LDAPmonitor";
+    changelog = "https://github.com/p0dalirius/LDAPmonitor/releases/tag/${version}";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ldapnomnom/default.nix b/nixpkgs/pkgs/tools/security/ldapnomnom/default.nix
new file mode 100644
index 000000000000..03503c26c803
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ldapnomnom/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ldapnomnom";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "lkarlslund";
+    repo = "ldapnomnom";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-enFTv8RqZpyS6LEqGIi55VMhArJy7Nhv0YhuWAOWyN0=";
+  };
+
+  vendorHash = "sha256-Iry9GoKOiXf83YudpmgHQRaP8GV4zokpX2mRAXoxSDQ=";
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  meta = with lib; {
+    description = "Tool to anonymously bruteforce usernames from Domain controllers";
+    homepage = "https://github.com/lkarlslund/ldapnomnom";
+    changelog = "https://github.com/lkarlslund/ldapnomnom/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "ldapnomnom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ldeep/default.nix b/nixpkgs/pkgs/tools/security/ldeep/default.nix
new file mode 100644
index 000000000000..623acf50f3b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ldeep/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ldeep";
+  version = "1.0.51";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "franc-pentest";
+    repo = "ldeep";
+    rev = "refs/tags/${version}";
+    hash = "sha256-UbZotbq97ehVj8dF0vXM2Z61IG1H+21xk14DXKmWirA=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    cython
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    commandparse
+    cryptography
+    dnspython
+    ldap3
+    pycryptodomex
+    six
+    termcolor
+    tqdm
+  ];
+
+  # no tests are present
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "ldeep"
+  ];
+
+  meta = with lib; {
+    description = "In-depth LDAP enumeration utility";
+    homepage = "https://github.com/franc-pentest/ldeep";
+    changelog = "https://github.com/franc-pentest/ldeep/releases/tag/${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/lesspass-cli/default.nix b/nixpkgs/pkgs/tools/security/lesspass-cli/default.nix
new file mode 100644
index 000000000000..34d36f93b5fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/lesspass-cli/default.nix
@@ -0,0 +1,39 @@
+{ lib, python3, fetchFromGitHub }:
+
+let
+  inherit (python3.pkgs) buildPythonApplication pytest mock pexpect;
+  repo = "lesspass";
+in
+buildPythonApplication rec {
+  pname = "lesspass-cli";
+  version = "9.1.9";
+
+  src = fetchFromGitHub {
+    owner = repo;
+    repo = repo;
+    rev = version;
+    sha256 = "126zk248s9r72qk9b8j27yvb8gglw49kazwz0sd69b5kkxvhz2dh";
+  };
+  sourceRoot = "${src.name}/cli";
+
+  # some tests are designed to run against code in the source directory - adapt to run against
+  # *installed* code
+  postPatch = ''
+    for f in tests/test_functional.py tests/test_interaction.py ; do
+      substituteInPlace $f --replace "lesspass/core.py" "-m lesspass.core"
+    done
+  '';
+
+  nativeCheckInputs = [ pytest mock pexpect ];
+  checkPhase = ''
+    mv lesspass lesspass.hidden  # ensure we're testing against *installed* package
+    pytest tests
+  '';
+
+  meta = with lib; {
+    description = "Stateless password manager";
+    homepage = "https://lesspass.com";
+    maintainers = with maintainers; [ jasoncarr ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/lethe/default.nix b/nixpkgs/pkgs/tools/security/lethe/default.nix
new file mode 100644
index 000000000000..eb3474293814
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/lethe/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lethe";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "kostassoid";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-y2D/80pnpYpTl+q9COTQkvtj9lzBlOWuMcnn5WFnX8E=";
+  };
+
+  cargoSha256 = "sha256-SFNNpbHZdDJvH95f+VWyVKnQp3OJwQmCOqHtLAhhkOk=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Tool to wipe drives in a secure way";
+    homepage = "https://github.com/kostassoid/lethe";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "lethe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/libacr38u/default.nix b/nixpkgs/pkgs/tools/security/libacr38u/default.nix
new file mode 100644
index 000000000000..5211f42b96ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/libacr38u/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, pcsclite , libusb-compat-0_1, IOKit }:
+
+stdenv.mkDerivation {
+  version = "1.7.11";
+  pname = "libacr38u";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/a/acr38/acr38_1.7.11.orig.tar.bz2";
+    sha256 = "0lxbq17y51cablx6bcd89klwnyigvkz0rsf9nps1a97ggnllyzkx";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ pcsclite libusb-compat-0_1 ]
+    ++ lib.optional stdenv.isDarwin IOKit;
+
+  preBuild = ''
+    makeFlagsArray=(usbdropdir="$out/pcsc/drivers");
+  '';
+
+  meta = with lib; {
+    description = "ACR38U smartcard reader driver for pcsclite";
+    longDescription = ''
+      A PC/SC IFD handler implementation for the ACS ACR38U
+      smartcard readers. This driver is for the non-CCID version only.
+
+      This package is needed to communicate with the ACR38U smartcard readers through
+      the PC/SC Lite resource manager (pcscd).
+
+      It can be enabled in /etc/nixos/configuration.nix by adding:
+        services.pcscd.enable = true;
+        services.pcscd.plugins = [ libacr38u ];
+
+      The package is based on the debian package libacr38u.
+    '';
+    homepage = "https://www.acs.com.hk";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ berce ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/libmodsecurity/default.nix b/nixpkgs/pkgs/tools/security/libmodsecurity/default.nix
new file mode 100644
index 000000000000..61669836f792
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/libmodsecurity/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, bison, flex, pkg-config
+, curl, geoip, libmaxminddb, libxml2, lmdb, lua, pcre, pcre2, ssdeep, yajl
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libmodsecurity";
+  version = "3.0.12";
+
+  src = fetchFromGitHub {
+    owner = "SpiderLabs";
+    repo = "ModSecurity";
+    rev = "v${version}";
+    sha256 = "sha256-WIFAg9LvKAC8e3gpcIxtNHT53AIfPtUTyrv30woxP4M=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ autoreconfHook bison flex pkg-config ];
+  buildInputs = [ curl geoip libmaxminddb libxml2 lmdb lua pcre pcre2 ssdeep yajl ];
+
+  outputs = [ "out" "dev" ];
+
+  configureFlags = [
+    "--enable-parser-generation"
+    "--disable-doxygen-doc"
+    "--with-curl=${curl.dev}"
+    "--with-libxml=${libxml2.dev}"
+    "--with-lmdb=${lmdb.out}"
+    "--with-maxmind=${libmaxminddb}"
+    "--with-pcre=${pcre.dev}"
+    "--with-pcre2=${pcre2.out}"
+    "--with-ssdeep=${ssdeep}"
+  ];
+
+  postPatch = ''
+    substituteInPlace build/lmdb.m4 \
+      --replace "\''${path}/include/lmdb.h" "${lmdb.dev}/include/lmdb.h" \
+      --replace "lmdb_inc_path=\"\''${path}/include\"" "lmdb_inc_path=\"${lmdb.dev}/include\""
+    substituteInPlace build/pcre2.m4 \
+      --replace "/usr/local/pcre2" "${pcre2.out}/lib" \
+      --replace "\''${path}/include/pcre2.h" "${pcre2.dev}/include/pcre2.h" \
+      --replace "pcre2_inc_path=\"\''${path}/include\"" "pcre2_inc_path=\"${pcre2.dev}/include\""
+    substituteInPlace build/ssdeep.m4 \
+      --replace "/usr/local/libfuzzy" "${ssdeep}/lib" \
+      --replace "\''${path}/include/fuzzy.h" "${ssdeep}/include/fuzzy.h" \
+      --replace "ssdeep_inc_path=\"\''${path}/include\"" "ssdeep_inc_path=\"${ssdeep}/include\""
+    substituteInPlace modsecurity.conf-recommended \
+      --replace "SecUnicodeMapFile unicode.mapping 20127" "SecUnicodeMapFile $out/share/modsecurity/unicode.mapping 20127"
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/modsecurity
+    cp ${src}/{AUTHORS,CHANGES,LICENSE,README.md,modsecurity.conf-recommended,unicode.mapping} $out/share/modsecurity
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = {
+    nginx-modsecurity = nixosTests.nginx-modsecurity;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/SpiderLabs/ModSecurity";
+    description = ''
+      ModSecurity v3 library component.
+    '';
+    longDescription = ''
+      Libmodsecurity is one component of the ModSecurity v3 project. The
+      library codebase serves as an interface to ModSecurity Connectors taking
+      in web traffic and applying traditional ModSecurity processing. In
+      general, it provides the capability to load/interpret rules written in
+      the ModSecurity SecRules format and apply them to HTTP content provided
+      by your application via Connectors.
+    '';
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ izorkin ];
+    mainProgram = "modsec-rules-check";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/libtpms/default.nix b/nixpkgs/pkgs/tools/security/libtpms/default.nix
new file mode 100644
index 000000000000..a7249481454a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/libtpms/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config, autoreconfHook
+, openssl, perl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libtpms";
+  version = "0.9.6";
+
+  src = fetchFromGitHub {
+    owner = "stefanberger";
+    repo = "libtpms";
+    rev = "v${version}";
+    sha256 = "sha256-I2TYuOLwgEm6ofF2onWI7j2yu9wpXxNt7lJePSpF9VM=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    perl # needed for pod2man
+  ];
+  buildInputs = [ openssl ];
+
+  outputs = [ "out" "man" "dev" ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-openssl"
+    "--with-tpm2"
+  ];
+
+  meta = with lib; {
+    description = "The libtpms library provides software emulation of a Trusted Platform Module (TPM 1.2 and TPM 2.0)";
+    homepage = "https://github.com/stefanberger/libtpms";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.baloo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/lil-pwny/default.nix b/nixpkgs/pkgs/tools/security/lil-pwny/default.nix
new file mode 100644
index 000000000000..c8251dfaa249
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/lil-pwny/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "lil-pwny";
+  version = "2.0.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "PaperMtn";
+    repo = "lil-pwny";
+    rev = "refs/tags/${version}";
+    hash = "sha256-EE6+PQTmvAv5EvxI9QR/dQcPby13BBk66KSc7XDNAZA=";
+  };
+
+  # Project has no test
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "lil_pwny"
+  ];
+
+  meta = with lib; {
+    description = "Offline auditing of Active Directory passwords";
+    homepage = "https://github.com/PaperMtn/lil-pwny";
+    changelog = "https://github.com/PaperMtn/lil-pwny/blob/${version}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/linux-exploit-suggester/default.nix b/nixpkgs/pkgs/tools/security/linux-exploit-suggester/default.nix
new file mode 100644
index 000000000000..9744c416bb74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/linux-exploit-suggester/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenvNoCC, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "linux-exploit-suggester";
+  version = "unstable-2022-04-01";
+
+  src = fetchFromGitHub {
+    owner = "mzet-";
+    repo = pname;
+    rev = "54a5c01497d6655be88f6262ccad5bc5a5e4f4ec";
+    sha256 = "v0Q8O+aaXEqwWAwGP/u5Nkm4DzM6nM11GI4XbK2PeWM=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 linux-exploit-suggester.sh $out/bin/${pname}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool designed to assist in detecting security deficiencies for given Linux kernel/Linux-based machine";
+    homepage = "https://github.com/mzet-/linux-exploit-suggester";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/lmp/default.nix b/nixpkgs/pkgs/tools/security/lmp/default.nix
new file mode 100644
index 000000000000..021b9d33d35a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/lmp/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "lmp";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "0xInfection";
+    repo = "LogMePwn";
+    rev = "v${version}";
+    sha256 = "sha256-VL/Hp7YaXNcV9JPb3kgRHcdhJJ5p3KHUf3hHbT3gKVk=";
+  };
+
+  vendorHash = "sha256-3NTaJ/Y3Tc6UGLfYTKjZxAAI43GJyZQ5wQVYbnXHSYc=";
+
+  meta = with lib; {
+    description = "Scanning and validation toolkit for the Log4J vulnerability";
+    homepage = "https://github.com/0xInfection/LogMePwn";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "lmp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/log4j-detect/default.nix b/nixpkgs/pkgs/tools/security/log4j-detect/default.nix
new file mode 100644
index 000000000000..aaad1fb94efb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/log4j-detect/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "log4j-detect";
+  version = "unstable-2021-12-14";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "takito1812";
+    repo = pname;
+    rev = "2f5b7a598a6d0b4aee8111bb574ea72c6a1c76d6";
+    sha256 = "sha256-fFKW7uPBfrnze0UoPL3Mfwd4sFOuHYuDP7kv6VtdM3o=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+  ];
+
+  postPatch = ''
+    sed -i "1 i #!/usr/bin/python" ${pname}.py
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -vD ${pname}.py $out/bin/${pname}
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool to detect the log4j vulnerability";
+    homepage = "https://github.com/takito1812/log4j-detect";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/log4j-scan/default.nix b/nixpkgs/pkgs/tools/security/log4j-scan/default.nix
new file mode 100644
index 000000000000..bd2772efb416
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/log4j-scan/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "log4j-scan";
+  version = "unstable-2021-12-18";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "fullhunt";
+    repo = pname;
+    rev = "070fbd00f0945645bd5e0daa199a554ef3884b95";
+    sha256 = "sha256-ORSc4KHyAMjuA7QHReDh6SYY5yZRunBBN1+lkCayqL4=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pycryptodome
+    requests
+    termcolor
+  ];
+
+  postPatch = ''
+    substituteInPlace log4j-scan.py \
+      --replace "headers.txt" "../share/headers.txt"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD ${pname}.py $out/bin/${pname}
+    install -vD headers.txt headers-large.txt -t $out/share
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Scanner for finding hosts which are vulnerable for log4j";
+    homepage = "https://github.com/fullhunt/log4j-scan";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/log4j-sniffer/default.nix b/nixpkgs/pkgs/tools/security/log4j-sniffer/default.nix
new file mode 100644
index 000000000000..dec7ce35866a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/log4j-sniffer/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+}:
+
+buildGoModule rec {
+  pname = "log4j-sniffer";
+  version = "1.9.0";
+
+  src = fetchFromGitHub {
+    owner = "palantir";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-pO6difzNvQvKQtRLyksXmExtQHlnnwyF3iNEmSBgUmU=";
+  };
+
+  vendorHash = null;
+
+  nativeCheckInputs = [
+    git
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+    cd $HOME
+    git init
+  '';
+
+  meta = with lib; {
+    description = "Tool that scans archives to check for vulnerable log4j versions";
+    homepage = "https://github.com/palantir/log4j-sniffer";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/log4j-vuln-scanner/default.nix b/nixpkgs/pkgs/tools/security/log4j-vuln-scanner/default.nix
new file mode 100644
index 000000000000..57e884d37fef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/log4j-vuln-scanner/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "log4j-vuln-scanner";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner = "hillu";
+    repo = "local-log4j-vuln-scanner";
+    rev = "v${version}";
+    sha256 = "sha256-YMD2233EdrrF1SLjwiRcNr53b7Rf5Tu8CZC43QhSY7c=";
+  };
+
+  vendorHash = null;
+
+  postInstall = ''
+    mv $out/bin/scanner $out/bin/$pname
+    mv $out/bin/patcher $out/bin/log4j-vuln-patcher
+  '';
+
+  meta = with lib; {
+    description = "Local log4j vulnerability scanner";
+    homepage = "https://github.com/hillu/local-log4j-vuln-scanner";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/log4jcheck/default.nix b/nixpkgs/pkgs/tools/security/log4jcheck/default.nix
new file mode 100644
index 000000000000..1a7608fa73de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/log4jcheck/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "log4jcheck";
+  version = "unstable-2021-12-14";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "NorthwaveSecurity";
+    repo = pname;
+    rev = "736f1f4044e8a9b7bf5db515e2d1b819253f0f6d";
+    sha256 = "sha256-1al7EMYbE/hFXKV4mYZlkEWTUIKYxgXYU3qBLlczYvs=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -vD nw_log4jcheck.py $out/bin/${pname}
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool to check for vulnerable Log4j (CVE-2021-44228) systems";
+    homepage = "https://github.com/NorthwaveSecurity/log4jcheck";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "log4jcheck";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/log4shell-detector/default.nix b/nixpkgs/pkgs/tools/security/log4shell-detector/default.nix
new file mode 100644
index 000000000000..c29a32bea396
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/log4shell-detector/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "log4shell-detector";
+  version = "unstable-2021-12-16";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "Neo23x0";
+    repo = pname;
+    rev = "622b88e7ea36819da23ce6ac090785cd6cca77f9";
+    sha256 = "sha256-N81x9hq473LfM+bQIQLWizCAsVc/pzyB84PV7/N5jk4=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    zstandard
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -vD ${pname}.py $out/bin/${pname}
+    install -vd $out/${python3.sitePackages}/
+    cp -R Log4ShellDetector $out/${python3.sitePackages}
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Detector for Log4Shell exploitation attempts";
+    homepage = "https://github.com/Neo23x0/log4shell-detector";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "log4shell-detector";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/logkeys/default.nix b/nixpkgs/pkgs/tools/security/logkeys/default.nix
new file mode 100644
index 000000000000..1172250f9c48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/logkeys/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, which, procps, kbd }:
+
+stdenv.mkDerivation {
+  pname = "logkeys";
+  version = "2018-01-22";
+
+  src = fetchFromGitHub {
+    owner = "kernc";
+    repo = "logkeys";
+    rev = "7a9f19fb6b152d9f00a0b3fe29ab266ff1f88129";
+    sha256 = "1k6kj0913imwh53lh6hrhqmrpygqg2h462raafjsn7gbd3vkgx8n";
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ which procps kbd ];
+
+  postPatch = ''
+    substituteInPlace src/Makefile.am --replace 'root' '$(id -u)'
+    substituteInPlace configure.ac --replace '/dev/input' '/tmp'
+    sed -i '/chmod u+s/d' src/Makefile.am
+ '';
+
+  preConfigure = "./autogen.sh";
+
+  meta = with lib; {
+    description = "A GNU/Linux keylogger that works";
+    license = licenses.gpl3;
+    homepage = "https://github.com/kernc/logkeys";
+    maintainers = with maintainers; [mikoim offline];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/logmap/default.nix b/nixpkgs/pkgs/tools/security/logmap/default.nix
new file mode 100644
index 000000000000..50f14bc33aff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/logmap/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "logmap";
+  version = "unstable-2021-12-15";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "zhzyker";
+    repo = pname;
+    rev = "5040707b4ae260830072de93ccd6a23615073abf";
+    sha256 = "sha256-LOGjK5l/gaKObWbC9vaLruE8DdDsabztnEW/TjvCdtE=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -vD ${pname}.py $out/bin/${pname}
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tools for fuzzing Log4j2 jndi injection";
+    homepage = "https://github.com/zhzyker/logmap";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "logmap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/lynis/default.nix b/nixpkgs/pkgs/tools/security/lynis/default.nix
new file mode 100644
index 000000000000..2a5030a954a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/lynis/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, makeWrapper, fetchFromGitHub, gawk, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "lynis";
+  version = "3.0.9";
+
+  src = fetchFromGitHub {
+    owner = "CISOfy";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Qf5YVvsw4o2ZS3KjrHPJt8+iPr7G97egdDRN+peL8eU=";
+  };
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  postPatch = ''
+    grep -rl '/usr/local/lynis' ./ | xargs sed -i "s@/usr/local/lynis@$out/share/lynis@g"
+  '';
+
+  installPhase = ''
+    install -d $out/bin $out/share/lynis/plugins
+    cp -r include db default.prf $out/share/lynis/
+    cp -a lynis $out/bin
+    wrapProgram "$out/bin/lynis" --prefix PATH : ${lib.makeBinPath [ gawk ]}
+
+    installManPage lynis.8
+    installShellCompletion --bash --name lynis.bash \
+      extras/bash_completion.d/lynis
+  '';
+
+  meta = with lib; {
+    description = "Security auditing tool for Linux, macOS, and UNIX-based systems";
+    homepage = "https://cisofy.com/lynis/";
+    license = licenses.gpl3Only;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.ryneeverett ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/maigret/default.nix b/nixpkgs/pkgs/tools/security/maigret/default.nix
new file mode 100644
index 000000000000..f2d706bfe510
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/maigret/default.nix
@@ -0,0 +1,112 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "maigret";
+  version = "0.4.4";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "soxoj";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Z8SnA7Z5+oKW0AOaNf+c/zR30lrPFmXaxxKkbnDXNNs=";
+  };
+
+  patches = [
+    # https://github.com/soxoj/maigret/pull/1117
+    (fetchpatch {
+      name = "pytest-7.3-compatibility.patch";
+      url = "https://github.com/soxoj/maigret/commit/ecb33de9e6eec12b6b45a1152199177f32c85be2.patch";
+      hash = "sha256-nFx3j1Q37YLtYhb0QS34UgZFgAc5Z/RVgbO9o1n1ONE=";
+    })
+  ];
+
+  nativeBuildInputs = [ python3.pkgs.pythonRelaxDepsHook ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiodns
+    aiohttp
+    aiohttp-socks
+    arabic-reshaper
+    async-timeout
+    attrs
+    beautifulsoup4
+    certifi
+    chardet
+    cloudscraper
+    colorama
+    future
+    html5lib
+    idna
+    jinja2
+    lxml
+    markupsafe
+    mock
+    multidict
+    networkx
+    pycountry
+    pypdf2
+    pysocks
+    python-bidi
+    pyvis
+    requests
+    requests-futures
+    six
+    socid-extractor
+    soupsieve
+    stem
+    torrequest
+    tqdm
+    typing-extensions
+    webencodings
+    xhtml2pdf
+    xmind
+    yarl
+  ];
+
+  __darwinAllowLocalNetworking = true;
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytest-httpserver
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  pythonRelaxDeps = true;
+  pythonRemoveDeps = [ "future-annotations" ];
+
+  pytestFlagsArray = [
+    # DeprecationWarning: There is no current event loop
+    "-W ignore::DeprecationWarning"
+  ];
+
+  disabledTests = [
+    # Tests require network access
+    "test_extract_ids_from_page"
+    "test_import_aiohttp_cookies"
+    "test_maigret_results"
+    "test_pdf_report"
+    "test_self_check_db_negative_enabled"
+    "test_self_check_db_positive_enable"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # AsyncioProgressbarExecutor is slower on darwin than it should be,
+    # Upstream issue: https://github.com/soxoj/maigret/issues/679
+    "test_asyncio_progressbar_executor"
+  ];
+
+  pythonImportsCheck = [
+    "maigret"
+  ];
+
+  meta = with lib; {
+    description = "Tool to collect details about an username";
+    homepage = "https://maigret.readthedocs.io";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mantra/default.nix b/nixpkgs/pkgs/tools/security/mantra/default.nix
new file mode 100644
index 000000000000..348c0afc3251
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mantra/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "mantra";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "MrEmpy";
+    repo = "Mantra";
+    rev = "refs/tags/v.${version}";
+    hash = "sha256-wIFZgxl6qULDvdUeq4yiuc5dPDudKsYvVUewSL0ITNM=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Tool used to hunt down API key leaks in JS files and pages";
+    homepage = "https://github.com/MrEmpy/Mantra";
+    changelog = "https://github.com/MrEmpy/Mantra/releases/tag/v.${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "mantra";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/masscan/default.nix b/nixpkgs/pkgs/tools/security/masscan/default.nix
new file mode 100644
index 000000000000..107ffe92b2cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/masscan/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, installShellFiles
+, makeWrapper
+, libpcap
+}:
+
+stdenv.mkDerivation rec {
+  pname = "masscan";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "robertdavidgraham";
+    repo = "masscan";
+    rev = version;
+    sha256 = "sha256-mnGC/moQANloR5ODwRjzJzBa55OEZ9QU+9WpAHxQE/g=";
+  };
+
+  patches = [
+    # Patches the missing "--resume" functionality
+    (fetchpatch {
+      name = "resume.patch";
+      url = "https://github.com/robertdavidgraham/masscan/commit/90791550bbdfac8905917a109ed74024161f14b3.patch";
+      sha256 = "sha256-A7Fk3MBNxaad69MrUYg7fdMG77wba5iESDTIRigYslw=";
+    })
+  ];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    # Fix broken install command
+    substituteInPlace Makefile --replace "-pm755" "-pDm755"
+  '';
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "GITVER=${version}"
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    installManPage doc/masscan.?
+
+    install -Dm444 -t $out/etc/masscan            data/exclude.conf
+    install -Dm444 -t $out/share/doc/masscan      doc/*.{html,js,md}
+    install -Dm444 -t $out/share/licenses/masscan LICENSE
+
+    wrapProgram $out/bin/masscan \
+      --prefix LD_LIBRARY_PATH : "${libpcap}/lib"
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/masscan --selftest
+  '';
+
+  meta = with lib; {
+    description = "Fast scan of the Internet";
+    homepage = "https://github.com/robertdavidgraham/masscan";
+    changelog = "https://github.com/robertdavidgraham/masscan/releases/tag/${version}";
+    license = licenses.agpl3Only;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/medusa/default.nix b/nixpkgs/pkgs/tools/security/medusa/default.nix
new file mode 100644
index 000000000000..a5ac8f06d16d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/medusa/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, freerdp, openssl, libssh2 }:
+
+stdenv.mkDerivation rec {
+  pname = "medusa-unstable";
+  version = "2018-12-16";
+
+  src = fetchFromGitHub {
+    owner = "jmk-foofus";
+    repo = "medusa";
+    rev = "292193b3995444aede53ff873899640b08129fc7";
+    sha256 = "0njlz4fqa0165wdmd5y8lfnafayf3c4la0r8pf3hixkdwsss1509";
+  };
+
+  patches = [
+    # Pull upstream fix for -fno-common tollchains like gcc-10:
+    #  https://github.com/jmk-foofus/medusa/pull/36
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/jmk-foofus/medusa/commit/a667656ad085b3eb95309932666c250d97a92767.patch";
+      sha256 = "01marqqhjd3qwar3ymp50y1h2im5ilgpaxk7wrc2kcxgmzvbdfxc";
+    })
+  ];
+
+  outputs = [ "out" "man" ];
+
+  configureFlags = [ "--enable-module-ssh=yes" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ freerdp openssl libssh2 ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jmk-foofus/medusa";
+    description = "A speedy, parallel, and modular, login brute-forcer";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/melt/default.nix b/nixpkgs/pkgs/tools/security/melt/default.nix
new file mode 100644
index 000000000000..01664f2118b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/melt/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "melt";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "charmbracelet";
+    repo = "melt";
+    rev = "v${version}";
+    sha256 = "sha256-LKHAVVzVhHlYRDgQCIQDQ8MLnTzxsKo198BITdHjTDA=";
+  };
+
+  vendorHash = "sha256-xTisSPACxuBrv0R2GYinFGYNXD0zoCD8DFkirdc9gIE=";
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Backup and restore Ed25519 SSH keys with seed words";
+    homepage = "https://github.com/charmbracelet/melt";
+    changelog = "https://github.com/charmbracelet/melt/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ penguwin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/metabigor/default.nix b/nixpkgs/pkgs/tools/security/metabigor/default.nix
new file mode 100644
index 000000000000..84e4d39d6a2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metabigor/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "metabigor";
+  version = "1.12.1";
+
+  src = fetchFromGitHub {
+    owner = "j3ssie";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-T1P+jAAsKObKRaoxH8c/DMEfXtmSrvnDd5Y3ocKcCSc=";
+  };
+
+  vendorHash = "sha256-V+72l2TvhEWgDg7kvn5OOjYcyEgWGLgTGnt58Bu+AEQ=";
+
+  # Disabled for now as there are some failures ("undefined:")
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to perform OSINT tasks";
+    homepage = "https://github.com/j3ssie/metabigor";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/metasploit/Gemfile b/nixpkgs/pkgs/tools/security/metasploit/Gemfile
new file mode 100644
index 000000000000..7475d019a7be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/Gemfile
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+source "https://rubygems.org"
+
+gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/6.3.54"
diff --git a/nixpkgs/pkgs/tools/security/metasploit/Gemfile.lock b/nixpkgs/pkgs/tools/security/metasploit/Gemfile.lock
new file mode 100644
index 000000000000..d25c247fad96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/Gemfile.lock
@@ -0,0 +1,467 @@
+GIT
+  remote: https://github.com/rapid7/metasploit-framework
+  revision: 038a5b20f97601ac1f73edcc4642f1add35ef08f
+  ref: refs/tags/6.3.54
+  specs:
+    metasploit-framework (6.3.54)
+      actionpack (~> 7.0.0)
+      activerecord (~> 7.0.0)
+      activesupport (~> 7.0.0)
+      aws-sdk-ec2
+      aws-sdk-ec2instanceconnect
+      aws-sdk-iam
+      aws-sdk-s3
+      aws-sdk-ssm
+      bcrypt
+      bcrypt_pbkdf
+      bootsnap
+      bson
+      chunky_png
+      dnsruby
+      ed25519
+      em-http-request
+      eventmachine
+      faker
+      faraday
+      faraday-retry
+      faye-websocket
+      filesize
+      hrr_rb_ssh-ed25519
+      http-cookie
+      irb (~> 1.7.4)
+      jsobfu
+      json
+      metasm
+      metasploit-concern
+      metasploit-credential
+      metasploit-model
+      metasploit-payloads (= 2.0.165)
+      metasploit_data_models
+      metasploit_payloads-mettle (= 1.0.26)
+      mqtt
+      msgpack (~> 1.6.0)
+      nessus_rest
+      net-imap
+      net-ldap
+      net-smtp
+      net-ssh
+      network_interface
+      nexpose
+      nokogiri (~> 1.14.0)
+      octokit (~> 4.0)
+      openssl-ccm
+      openvas-omp
+      packetfu
+      patch_finder
+      pcaprub
+      pdf-reader
+      pg
+      puma
+      railties
+      rasn1
+      rb-readline
+      recog
+      redcarpet
+      reline
+      rex-arch
+      rex-bin_tools
+      rex-core
+      rex-encoder
+      rex-exploitation
+      rex-java
+      rex-mime
+      rex-nop
+      rex-ole
+      rex-powershell
+      rex-random_identifier
+      rex-registry
+      rex-rop_builder
+      rex-socket
+      rex-sslscan
+      rex-struct2
+      rex-text
+      rex-zip
+      ruby-macho
+      ruby-mysql
+      ruby_smb (~> 3.3.0)
+      rubyntlm
+      rubyzip
+      sinatra
+      sqlite3
+      sshkey
+      swagger-blocks
+      thin
+      tzinfo
+      tzinfo-data
+      unix-crypt
+      warden
+      win32api
+      windows_error
+      winrm
+      xdr
+      xmlrpc
+      zeitwerk
+
+GEM
+  remote: https://rubygems.org/
+  specs:
+    Ascii85 (1.1.0)
+    actionpack (7.0.8)
+      actionview (= 7.0.8)
+      activesupport (= 7.0.8)
+      rack (~> 2.0, >= 2.2.4)
+      rack-test (>= 0.6.3)
+      rails-dom-testing (~> 2.0)
+      rails-html-sanitizer (~> 1.0, >= 1.2.0)
+    actionview (7.0.8)
+      activesupport (= 7.0.8)
+      builder (~> 3.1)
+      erubi (~> 1.4)
+      rails-dom-testing (~> 2.0)
+      rails-html-sanitizer (~> 1.1, >= 1.2.0)
+    activemodel (7.0.8)
+      activesupport (= 7.0.8)
+    activerecord (7.0.8)
+      activemodel (= 7.0.8)
+      activesupport (= 7.0.8)
+    activesupport (7.0.8)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    addressable (2.8.6)
+      public_suffix (>= 2.0.2, < 6.0)
+    afm (0.2.2)
+    arel-helpers (2.14.0)
+      activerecord (>= 3.1.0, < 8)
+    aws-eventstream (1.3.0)
+    aws-partitions (1.872.0)
+    aws-sdk-core (3.190.1)
+      aws-eventstream (~> 1, >= 1.3.0)
+      aws-partitions (~> 1, >= 1.651.0)
+      aws-sigv4 (~> 1.8)
+      jmespath (~> 1, >= 1.6.1)
+    aws-sdk-ec2 (1.431.0)
+      aws-sdk-core (~> 3, >= 3.188.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ec2instanceconnect (1.36.0)
+      aws-sdk-core (~> 3, >= 3.188.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-iam (1.92.0)
+      aws-sdk-core (~> 3, >= 3.188.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kms (1.75.0)
+      aws-sdk-core (~> 3, >= 3.188.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.141.0)
+      aws-sdk-core (~> 3, >= 3.189.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.8)
+    aws-sdk-ssm (1.162.0)
+      aws-sdk-core (~> 3, >= 3.188.0)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.8.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+    base64 (0.2.0)
+    bcrypt (3.1.20)
+    bcrypt_pbkdf (1.1.0)
+    bindata (2.4.15)
+    bootsnap (1.17.0)
+      msgpack (~> 1.2)
+    bson (4.15.0)
+    builder (3.2.4)
+    chunky_png (1.4.0)
+    concurrent-ruby (1.2.2)
+    cookiejar (0.3.3)
+    crass (1.0.6)
+    daemons (1.4.1)
+    date (3.3.4)
+    dnsruby (1.70.0)
+      simpleidn (~> 0.2.1)
+    domain_name (0.6.20231109)
+    ed25519 (1.3.0)
+    em-http-request (1.1.7)
+      addressable (>= 2.3.4)
+      cookiejar (!= 0.3.1)
+      em-socksify (>= 0.3)
+      eventmachine (>= 1.0.3)
+      http_parser.rb (>= 0.6.0)
+    em-socksify (0.3.2)
+      eventmachine (>= 1.0.0.beta.4)
+    erubi (1.12.0)
+    eventmachine (1.2.7)
+    faker (3.2.2)
+      i18n (>= 1.8.11, < 2)
+    faraday (2.8.1)
+      base64
+      faraday-net_http (>= 2.0, < 3.1)
+      ruby2_keywords (>= 0.0.4)
+    faraday-net_http (3.0.2)
+    faraday-retry (2.2.0)
+      faraday (~> 2.0)
+    faye-websocket (0.11.3)
+      eventmachine (>= 0.12.0)
+      websocket-driver (>= 0.5.1)
+    ffi (1.16.3)
+    filesize (0.2.0)
+    gssapi (1.3.1)
+      ffi (>= 1.0.1)
+    gyoku (1.4.0)
+      builder (>= 2.1.2)
+      rexml (~> 3.0)
+    hashery (2.1.2)
+    hrr_rb_ssh (0.4.2)
+    hrr_rb_ssh-ed25519 (0.4.2)
+      ed25519 (~> 1.2)
+      hrr_rb_ssh (>= 0.4)
+    http-cookie (1.0.5)
+      domain_name (~> 0.5)
+    http_parser.rb (0.8.0)
+    httpclient (2.8.3)
+    i18n (1.14.1)
+      concurrent-ruby (~> 1.0)
+    io-console (0.7.1)
+    irb (1.7.4)
+      reline (>= 0.3.6)
+    jmespath (1.6.2)
+    jsobfu (0.4.2)
+      rkelly-remix
+    json (2.7.1)
+    little-plugger (1.1.4)
+    logging (2.3.1)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.14)
+    loofah (2.22.0)
+      crass (~> 1.0.2)
+      nokogiri (>= 1.12.0)
+    metasm (1.0.5)
+    metasploit-concern (5.0.2)
+      activemodel (~> 7.0)
+      activesupport (~> 7.0)
+      railties (~> 7.0)
+      zeitwerk
+    metasploit-credential (6.0.6)
+      metasploit-concern
+      metasploit-model
+      metasploit_data_models (>= 5.0.0)
+      net-ssh
+      pg
+      railties
+      rex-socket
+      rubyntlm
+      rubyzip
+    metasploit-model (5.0.2)
+      activemodel (~> 7.0)
+      activesupport (~> 7.0)
+      railties (~> 7.0)
+    metasploit-payloads (2.0.165)
+    metasploit_data_models (6.0.3)
+      activerecord (~> 7.0)
+      activesupport (~> 7.0)
+      arel-helpers
+      metasploit-concern
+      metasploit-model (>= 3.1)
+      pg
+      railties (~> 7.0)
+      recog
+      webrick
+    metasploit_payloads-mettle (1.0.26)
+    method_source (1.0.0)
+    mini_portile2 (2.8.5)
+    minitest (5.20.0)
+    mqtt (0.6.0)
+    msgpack (1.6.1)
+    multi_json (1.15.0)
+    mustermann (3.0.0)
+      ruby2_keywords (~> 0.0.1)
+    nessus_rest (0.1.6)
+    net-imap (0.4.8)
+      date
+      net-protocol
+    net-ldap (0.18.0)
+    net-protocol (0.2.2)
+      timeout
+    net-smtp (0.4.0)
+      net-protocol
+    net-ssh (7.2.1)
+    network_interface (0.0.4)
+    nexpose (7.3.0)
+    nio4r (2.7.0)
+    nokogiri (1.14.5)
+      mini_portile2 (~> 2.8.0)
+      racc (~> 1.4)
+    nori (2.6.0)
+    octokit (4.25.1)
+      faraday (>= 1, < 3)
+      sawyer (~> 0.9)
+    openssl-ccm (1.2.3)
+    openssl-cmac (2.0.2)
+    openvas-omp (0.0.4)
+    packetfu (2.0.0)
+      pcaprub (~> 0.13.1)
+    patch_finder (1.0.2)
+    pcaprub (0.13.1)
+    pdf-reader (2.11.0)
+      Ascii85 (~> 1.0)
+      afm (~> 0.2.1)
+      hashery (~> 2.0)
+      ruby-rc4
+      ttfunk
+    pg (1.5.4)
+    public_suffix (5.0.4)
+    puma (6.4.0)
+      nio4r (~> 2.0)
+    racc (1.7.3)
+    rack (2.2.8)
+    rack-protection (3.1.0)
+      rack (~> 2.2, >= 2.2.4)
+    rack-test (2.1.0)
+      rack (>= 1.3)
+    rails-dom-testing (2.2.0)
+      activesupport (>= 5.0.0)
+      minitest
+      nokogiri (>= 1.6)
+    rails-html-sanitizer (1.6.0)
+      loofah (~> 2.21)
+      nokogiri (~> 1.14)
+    railties (7.0.8)
+      actionpack (= 7.0.8)
+      activesupport (= 7.0.8)
+      method_source
+      rake (>= 12.2)
+      thor (~> 1.0)
+      zeitwerk (~> 2.5)
+    rake (13.1.0)
+    rasn1 (0.12.1)
+      strptime (~> 0.2.5)
+    rb-readline (0.5.5)
+    recog (3.1.4)
+      nokogiri
+    redcarpet (3.6.0)
+    reline (0.4.1)
+      io-console (~> 0.5)
+    rex-arch (0.1.15)
+      rex-text
+    rex-bin_tools (0.1.9)
+      metasm
+      rex-arch
+      rex-core
+      rex-struct2
+      rex-text
+    rex-core (0.1.31)
+    rex-encoder (0.1.7)
+      metasm
+      rex-arch
+      rex-text
+    rex-exploitation (0.1.39)
+      jsobfu
+      metasm
+      rex-arch
+      rex-encoder
+      rex-text
+      rexml
+    rex-java (0.1.7)
+    rex-mime (0.1.8)
+      rex-text
+    rex-nop (0.1.3)
+      rex-arch
+    rex-ole (0.1.8)
+      rex-text
+    rex-powershell (0.1.99)
+      rex-random_identifier
+      rex-text
+      ruby-rc4
+    rex-random_identifier (0.1.11)
+      rex-text
+    rex-registry (0.1.5)
+    rex-rop_builder (0.1.5)
+      metasm
+      rex-core
+      rex-text
+    rex-socket (0.1.55)
+      rex-core
+    rex-sslscan (0.1.10)
+      rex-core
+      rex-socket
+      rex-text
+    rex-struct2 (0.1.4)
+    rex-text (0.2.55)
+    rex-zip (0.1.5)
+      rex-text
+    rexml (3.2.6)
+    rkelly-remix (0.0.7)
+    ruby-macho (4.0.0)
+    ruby-mysql (4.1.0)
+    ruby-rc4 (0.1.5)
+    ruby2_keywords (0.0.5)
+    ruby_smb (3.3.1)
+      bindata
+      openssl-ccm
+      openssl-cmac
+      rubyntlm
+      windows_error (>= 0.1.4)
+    rubyntlm (0.6.3)
+    rubyzip (2.3.2)
+    sawyer (0.9.2)
+      addressable (>= 2.3.5)
+      faraday (>= 0.17.3, < 3)
+    simpleidn (0.2.1)
+      unf (~> 0.1.4)
+    sinatra (3.1.0)
+      mustermann (~> 3.0)
+      rack (~> 2.2, >= 2.2.4)
+      rack-protection (= 3.1.0)
+      tilt (~> 2.0)
+    sqlite3 (1.6.9)
+      mini_portile2 (~> 2.8.0)
+    sshkey (3.0.0)
+    strptime (0.2.5)
+    swagger-blocks (3.0.0)
+    thin (1.8.2)
+      daemons (~> 1.0, >= 1.0.9)
+      eventmachine (~> 1.0, >= 1.0.4)
+      rack (>= 1, < 3)
+    thor (1.3.0)
+    tilt (2.3.0)
+    timeout (0.4.1)
+    ttfunk (1.7.0)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    tzinfo-data (1.2023.3)
+      tzinfo (>= 1.0.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.9.1)
+    unix-crypt (1.3.1)
+    warden (1.2.9)
+      rack (>= 2.0.9)
+    webrick (1.8.1)
+    websocket-driver (0.7.6)
+      websocket-extensions (>= 0.1.0)
+    websocket-extensions (0.1.5)
+    win32api (0.1.0)
+    windows_error (0.1.5)
+    winrm (2.3.6)
+      builder (>= 2.1.2)
+      erubi (~> 1.8)
+      gssapi (~> 1.2)
+      gyoku (~> 1.0)
+      httpclient (~> 2.2, >= 2.2.0.2)
+      logging (>= 1.6.1, < 3.0)
+      nori (~> 2.0)
+      rubyntlm (~> 0.6.0, >= 0.6.3)
+    xdr (3.0.3)
+      activemodel (>= 4.2, < 8.0)
+      activesupport (>= 4.2, < 8.0)
+    xmlrpc (0.3.3)
+      webrick
+    zeitwerk (2.6.12)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  metasploit-framework!
+
+BUNDLED WITH
+   2.5.5
diff --git a/nixpkgs/pkgs/tools/security/metasploit/default.nix b/nixpkgs/pkgs/tools/security/metasploit/default.nix
new file mode 100644
index 000000000000..d86b14b46d25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, ruby
+, bundlerEnv
+, python3
+}:
+
+let
+  env = bundlerEnv {
+    inherit ruby;
+    name = "metasploit-bundler-env";
+    gemdir = ./.;
+  };
+in stdenv.mkDerivation rec {
+  pname = "metasploit-framework";
+  version = "6.3.54";
+
+  src = fetchFromGitHub {
+    owner = "rapid7";
+    repo = "metasploit-framework";
+    rev = "refs/tags/${version}";
+    hash = "sha256-LGAvqtmtrEuhC61LohEgFBSSLR52orHVSnJqcl60yjs=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    (python3.withPackages (ps: [ ps.requests ]))
+  ];
+
+  dontPatchELF = true; # stay away from exploit executables
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/msf}
+
+    cp -r * $out/share/msf
+
+    grep -rl "^#\!.*python2$" $out/share/msf | xargs -d '\n' rm
+
+    (
+      cd $out/share/msf/
+      for i in msf*; do
+        makeWrapper ${env}/bin/bundle $out/bin/$i \
+          --add-flags "exec ${ruby}/bin/ruby $out/share/msf/$i"
+      done
+    )
+
+    makeWrapper ${env}/bin/bundle $out/bin/msf-pattern_create \
+      --add-flags "exec ${ruby}/bin/ruby $out/share/msf/tools/exploit/pattern_create.rb"
+
+    makeWrapper ${env}/bin/bundle $out/bin/msf-pattern_offset \
+      --add-flags "exec ${ruby}/bin/ruby $out/share/msf/tools/exploit/pattern_offset.rb"
+  '';
+
+  # run with: nix-shell maintainers/scripts/update.nix --argstr path metasploit
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Metasploit Framework - a collection of exploits";
+    homepage = "https://docs.metasploit.com/";
+    platforms = platforms.unix;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fab makefu ];
+    mainProgram = "msfconsole";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/metasploit/gemset.nix b/nixpkgs/pkgs/tools/security/metasploit/gemset.nix
new file mode 100644
index 000000000000..c614fa81f15c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/gemset.nix
@@ -0,0 +1,1675 @@
+{
+  actionpack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l319p0gipfgq8bp8dvbv97qqb72rad9zcqn5snhgv20cmpqr69b";
+      type = "gem";
+    };
+    version = "7.0.8";
+  };
+  actionview = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xnpdwj1d8m6c2d90jp9cs50ggiz0jj02ls2h9lg68k4k8mnjbd2";
+      type = "gem";
+    };
+    version = "7.0.8";
+  };
+  activemodel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004w8zaz2g3y6lnrsvlcmljll0m3ndqpgwf0wfscgq6iysibiglm";
+      type = "gem";
+    };
+    version = "7.0.8";
+  };
+  activerecord = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04wavps80q3pvhvfbmi4gs102y1p6mxbg8xylzvib35b6m92adpj";
+      type = "gem";
+    };
+    version = "7.0.8";
+  };
+  activesupport = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "188kbwkn1lbhz40ala8ykp20jzqphgc68g3d8flin8cqa2xid0s5";
+      type = "gem";
+    };
+    version = "7.0.8";
+  };
+  addressable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0irbdwkkjwzajq1ip6ba46q49sxnrl2cw7ddkdhsfhb6aprnm3vr";
+      type = "gem";
+    };
+    version = "2.8.6";
+  };
+  afm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  arel-helpers = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b14yqwfjynlvl6x7jclhr4b2imik2cvabwxn9cpylabdnhr7gza";
+      type = "gem";
+    };
+    version = "2.14.0";
+  };
+  Ascii85 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ds4v9xgsyvijnlflak4dzf1qwmda9yd5bv8jwsb56nngd399rlw";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gvdg4yx4p9av2glmp7vsxhs0n8fj1ga9kq2xdb8f95j7b04qhzi";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ddbcz8p3abbw8d8pn796z1ry1mbapl6ayhh37ziwal6bd047kvm";
+      type = "gem";
+    };
+    version = "1.872.0";
+  };
+  aws-sdk-core = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ansagfl5irx1y6b9xf4xpi9j6q6k5pbd2aw80hn0p4m3ycafamh";
+      type = "gem";
+    };
+    version = "3.190.1";
+  };
+  aws-sdk-ec2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04lg4g6aivkf6zvvcc1clw0dqdlpkn3c87kiz5mfc7m2jr0m0ljx";
+      type = "gem";
+    };
+    version = "1.431.0";
+  };
+  aws-sdk-ec2instanceconnect = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iifrmdls17a3hniq43iyj9q4mr8iy0danqmy65xbh05bnqq2ca9";
+      type = "gem";
+    };
+    version = "1.36.0";
+  };
+  aws-sdk-iam = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0whclpcvbdy7gzvqpk8734nxjfxs3362k197xl1wnrpixklkacyz";
+      type = "gem";
+    };
+    version = "1.92.0";
+  };
+  aws-sdk-kms = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qzxqfgrhnl5rdc39a1gl2pgrdxgnsj12zycpxnsx8lg6arfmnr1";
+      type = "gem";
+    };
+    version = "1.75.0";
+  };
+  aws-sdk-s3 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bnhpmi0iiaj88rqc5lhhnp2gyrk4fs8xz51lj36wwzng94qinya";
+      type = "gem";
+    };
+    version = "1.141.0";
+  };
+  aws-sdk-ssm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xz10344dwm4pj8qnl19bnh99arxp7cd9mn2alslrnw7y2gipzz1";
+      type = "gem";
+    };
+    version = "1.162.0";
+  };
+  aws-sigv4 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g3w27wzjy4si6kp49w10as6ml6g6zl3xrfqs5ikpfciidv9kpc4";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  base64 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  bcrypt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16a0g2q40biv93i1hch3gw8rbmhp77qnnifj1k0a6m7dng3zh444";
+      type = "gem";
+    };
+    version = "3.1.20";
+  };
+  bcrypt_pbkdf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ndamfaivnkhc6hy0yqyk2gkwr6f3bz6216lh74hsiiyk3axz445";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  bindata = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04y4zgh4bbcb8wmkxwfqg4saky1d1f3xw8z6yk543q13h8ky8rz5";
+      type = "gem";
+    };
+    version = "2.4.15";
+  };
+  bootsnap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iqkzby0fdgi786m873nm0ckmc847wy9a4ydinb29m7hd3fs83kb";
+      type = "gem";
+    };
+    version = "1.17.0";
+  };
+  bson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19vgs9rzzyvd7jfrzynjnc6518q0ffpfciyicfywbp77zl8nc9hk";
+      type = "gem";
+    };
+    version = "4.15.0";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  chunky_png = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1znw5x86hmm9vfhidwdsijz8m38pqgmv98l9ryilvky0aldv7mc9";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  cookiejar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0q0kmbks9l3hl0wdq744hzy97ssq9dvlzywyqv9k9y1p3qc9va2a";
+      type = "gem";
+    };
+    version = "0.3.3";
+  };
+  crass = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pfl5c0pyqaparxaqxi6s4gfl21bdldwiawrc0aknyvflli60lfw";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+  daemons = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07cszb0zl8mqmwhc8a2yfg36vi6lbgrp4pa5bvmryrpcz9v6viwg";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  date = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "149jknsq999gnhy865n33fkk22s0r447k76x9pmcnnwldfv2q7wp";
+      type = "gem";
+    };
+    version = "3.3.4";
+  };
+  dnsruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17bjlic4ac9980vas3pgnhi5lkisq28vd730bhcg8jdh8xcp6r48";
+      type = "gem";
+    };
+    version = "1.70.0";
+  };
+  domain_name = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gpciaifmxql8h01ci12qq08dnqrdlzkkz6fmia9v9yc3r9a29si";
+      type = "gem";
+    };
+    version = "0.6.20231109";
+  };
+  ed25519 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zb2dr2ihb1qiknn5iaj1ha1w9p7lj9yq5waasndlfadz225ajji";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  em-http-request = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1azx5rgm1zvx7391sfwcxzyccs46x495vb34ql2ch83f58mwgyqn";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  em-socksify = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rk43ywaanfrd8180d98287xv2pxyl7llj291cwy87g1s735d5nk";
+      type = "gem";
+    };
+    version = "0.3.2";
+  };
+  erubi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08s75vs9cxlc4r1q2bjg4br8g9wc5lc5x5vl0vv4zq5ivxsdpgi7";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  faker = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ic47k6f0q6xl9g2yxa3x60gfbwx98wnx75qnbhhgk0zc7a5ijhy";
+      type = "gem";
+    };
+    version = "3.2.2";
+  };
+  faraday = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19p45ryrvxff6ggdj4fq76dk7wlkfgrh474c3kwzdsjx3xpdq8x8";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13byv3mp1gsjyv8k0ih4612y6vw5kqva6i03wcg4w2fqpsd950k8";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  faraday-retry = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ia19zgni6cw96rvsr0s004vjs9m2r6la4s00zcff36xaia4m0l0";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  faye-websocket = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01xkpv5b4fjc5n6n1fq6z1ris991av2fbadvs8r71i9r34b8g48h";
+      type = "gem";
+    };
+    version = "0.11.3";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yvii03hcgqj30maavddqamqy50h7y6xcn2wcyq72wn823zl4ckd";
+      type = "gem";
+    };
+    version = "1.16.3";
+  };
+  filesize = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17p7rf1x7h3ivaznb4n4kmxnnzj25zaviryqgn2n12v2kmibhp8g";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  gssapi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qdfhj12aq8v0y961v4xv96a1y2z80h3xhvzrs9vsfgf884g6765";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  gyoku = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kd2q59xpm39hpvmmvyi6g3f1fr05xjbnxwkrdqz4xy7hirqi79q";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  hashery = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qj8815bf7q6q7llm5rzdz279gzmpqmqqicxnzv066a020iwqffj";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  hrr_rb_ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dr6mv98ll0crdn2wm2yy9ywh130iljcsvnnvs6639k19qbfk7qf";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  hrr_rb_ssh-ed25519 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mfsvjcjmm63fwjf3zqkmg3cf55vx34vmvix0wj0ba4h9dzjq7p8";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  http-cookie = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gj4fmls0mf52dlr928gaq0c0cb0m3aqa9kaa6l0ikl2zbqk42as";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  io-console = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fmwbcapyhla84xhwj3gfws6rb4lw3928ybz6g3lr372dgxakzx5";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  irb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "158ca10kj3qqnql5g8f1g2arsnhgdl79mg74manpf8ldkwjjn3n8";
+      type = "gem";
+    };
+    version = "1.7.4";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  jsobfu = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hchns89cfj0gggm2zbr7ghb630imxm2x2d21ffx2jlasn9xbkyk";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r9jmjhg2ly3l736flk7r2al47b5c8cayh0gqkq0yhjqzc9a6zhq";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  little-plugger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  logging = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zflchpx4g8c110gjdcs540bk5a336nq6nmx379rdg56xw0pjd02";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  loofah = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zkjqf37v2d7s11176cb35cl83wls5gm3adnfkn2zcc61h3nxmqh";
+      type = "gem";
+    };
+    version = "2.22.0";
+  };
+  metasm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dpjbkdvi4h6v0g01db7vlcsg15pfiyslkz3zd7wfk04yrc6g7wi";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  metasploit-concern = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w06rcr3fa4lq4dhq49b5wh6pd3lj6daf3mq3wmx5zzi4gv0mlic";
+      type = "gem";
+    };
+    version = "5.0.2";
+  };
+  metasploit-credential = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nmh37pss5bsxjasl52pi9jxnzv75wacpnhrif5cprg6jxwn8dzl";
+      type = "gem";
+    };
+    version = "6.0.6";
+  };
+  metasploit-framework = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      fetchSubmodules = false;
+      rev = "038a5b20f97601ac1f73edcc4642f1add35ef08f";
+      sha256 = "0fyanig74skj9bav38kn3qnr450l408s4jxd1fhlpb5dv6m2yq1c";
+      type = "git";
+      url = "https://github.com/rapid7/metasploit-framework";
+    };
+    version = "6.3.54";
+  };
+  metasploit-model = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vn50jnvdanmqbjm9xmp0i4xwzc9g3c6g2c4b59i2bz47kwp1pi7";
+      type = "gem";
+    };
+    version = "5.0.2";
+  };
+  metasploit-payloads = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v9vr3iklxm53vfkyiqja8a942n8r0a49w9rmvk9ql4h3r5xcgpw";
+      type = "gem";
+    };
+    version = "2.0.165";
+  };
+  metasploit_data_models = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h22d30aviskjg1jm7a65jy5ynjpw92wg8hzv5mknhlbsv4dhzkm";
+      type = "gem";
+    };
+    version = "6.0.3";
+  };
+  metasploit_payloads-mettle = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qprmbmpw4c8396m0whbp08xzdbjc0s2zd0jkxqnh3aswmx8pj3m";
+      type = "gem";
+    };
+    version = "1.0.26";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kl9c3kdchjabrihdqfmcplk3lq4cw1rr9f378y6q22qwy5dndvs";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bkmfi9mb49m0fkdhl2g38i3xxa02d411gg0m8x0gvbwfmmg5ym3";
+      type = "gem";
+    };
+    version = "5.20.0";
+  };
+  mqtt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14iacsn0l8kl5pw9giaz2p3i06dwwj0mad9m0949bl5g8g35vsb3";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  msgpack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jr9grsdnlb8wgd9by7mhsc9c1wixijh9an4m4yq1ph0jg26x9rk";
+      type = "gem";
+    };
+    version = "1.6.1";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  mustermann = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwbq20s2gdh8dljjsgj5s6wqqfmnbclhvv2c2608brv7jm6jdbd";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  nessus_rest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1allyrd4rll333zbmsi3hcyg6cw1dhc4bg347ibsw191nswnp8ci";
+      type = "gem";
+    };
+    version = "0.1.6";
+  };
+  net-imap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wnmxcrpv7zaf8wli5nvfnz5ybmw7f3r06s05p3d96idc61193mv";
+      type = "gem";
+    };
+    version = "0.4.8";
+  };
+  net-ldap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xqcffn3c1564c4fizp10dzw2v5g2pabdzrcn25hq05bqhsckbar";
+      type = "gem";
+    };
+    version = "0.18.0";
+  };
+  net-protocol = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a32l4x73hz200cm587bc29q8q9az278syw3x6fkc9d1lv5y0wxa";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  net-smtp = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rx3758w0bmbr21s2nsc6llflsrnp50fwdnly3ixra4v53gbhzid";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i01340c4i144vvn3x54lc2rb77ch829qipl1rh6rqwm3yxzml9w";
+      type = "gem";
+    };
+    version = "7.2.1";
+  };
+  network_interface = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hqkas4c809w2gnic1srhq5rd2hpsfnhmrvm1vkix8w775qql74z";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  nexpose = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jz5xiwiwagd663qdlfhmc9fm76x78cqhighmfivy6w5v0n4xyq0";
+      type = "gem";
+    };
+    version = "7.3.0";
+  };
+  nio4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xkjz56qc7hl7zy7i7bhiyw5pl85wwjsa4p70rj6s958xj2sd1lm";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g6wvxab4qwnbny983n9bckc0afy6y6s3g5v3csdbsp8n7g9vxi3";
+      type = "gem";
+    };
+    version = "1.14.5";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  octokit = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15lvy06h276jryxg19258b2yqaykf0567sp0n16yipywhbp94860";
+      type = "gem";
+    };
+    version = "4.25.1";
+  };
+  openssl-ccm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mqr538wcfjc1q9qxsc2pz0s81kw1f3xk7k1qy903n5b3bh9vri3";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  openssl-cmac = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mml6105j6ryd9d019gbwzkdjmvycjlxxld0qzg9vs70f1qdihcc";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  openvas-omp = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14xf614vd76qjdjxjv14mmjar6s64fwp4cwb7bv5g1wc29srg28x";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  packetfu = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0crsc4mcikpc01d19ppryzwgvhk9hg9r73g5bwac32x979zwyks8";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  patch_finder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1md9scls55n1riw26vw1ak0ajq38dfygr36l0h00wqhv51cq745m";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  pcaprub = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0886fcc5bi0kc0rbma5fj3wa3hbg2nl7ivnbi2j995yzg36zq7xy";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+  pdf-reader = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09sx25jpnip2sp6wh5sn5ad7za78rfi95qp5iiczfh43z4jqa8q3";
+      type = "gem";
+    };
+    version = "2.11.0";
+  };
+  pg = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pfj771p5a29yyyw58qacks464sl86d5m3jxjl5rlqqw2m3v5xq4";
+      type = "gem";
+    };
+    version = "1.5.4";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bni4qjrsh2q49pnmmd6if4iv3ak36bd2cckrs6npl111n769k9m";
+      type = "gem";
+    };
+    version = "5.0.4";
+  };
+  puma = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y8jcw80zcxvdq0id329lzmp5pzx7hpac227d7sgjkblc89s3pfm";
+      type = "gem";
+    };
+    version = "6.4.0";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01b9662zd2x9bp4rdjfid07h09zxj7kvn7f5fghbqhzc625ap1dp";
+      type = "gem";
+    };
+    version = "1.7.3";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15rdwbyk71c9nxvd527bvb8jxkcys8r3dj3vqra5b3sa63qs30vv";
+      type = "gem";
+    };
+    version = "2.2.8";
+  };
+  rack-protection = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xsz78hccgza144n37bfisdkzpr2c8m0xl6rnlzgxdbsm1zrkg7r";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  rack-test = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ysx29gk9k14a14zsp5a8czys140wacvp91fja8xcja0j1hzqq8c";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  rails-dom-testing = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fx9dx1ag0s1lr6lfr34lbx5i1bvn3bhyf3w3mx6h7yz90p725g5";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  rails-html-sanitizer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pm4z853nyz1bhhqr7fzl44alnx4bjachcr6rh6qjj375sfz3sc6";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  railties = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sfc16zrcn4jgf5xczb08n6prhmqqgg9f0b4mn73zlzg6cwmqchj";
+      type = "gem";
+    };
+    version = "7.0.8";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ilr853hawi09626axx0mps4rkkmxcs54mapz9jnqvpnlwd3wsmy";
+      type = "gem";
+    };
+    version = "13.1.0";
+  };
+  rasn1 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05n3ki7jlkll0rf6zrqi41a9fc6zmw87f94ai21jgmvsswjfx15i";
+      type = "gem";
+    };
+    version = "0.12.1";
+  };
+  rb-readline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14w79a121czmvk1s953qfzww30mqjb2zc0k9qhi0ivxxk3hxg6wy";
+      type = "gem";
+    };
+    version = "0.5.5";
+  };
+  recog = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a9m9ngmcgvgzg8m8ahdhjvfm65k6hp8r7dqmrsh3zcphim4x71k";
+      type = "gem";
+    };
+    version = "3.1.4";
+  };
+  redcarpet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sg9sbf9pm91l7lac7fs4silabyn0vflxwaa2x3lrzsm0ff8ilca";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  reline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hi6zfj6zqzxcbamhjm9w9cswv62f76l8gsdfcnmhpw35cyxphh8";
+      type = "gem";
+    };
+    version = "0.4.1";
+  };
+  rex-arch = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gxjhiqdbh4ix76rqhaghzy1vsz22gcdfdwj9lqnfifibk7wabpa";
+      type = "gem";
+    };
+    version = "0.1.15";
+  };
+  rex-bin_tools = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hdkjv9g04d9k6mq1j9fxg9l6ifzym5i204majhzb9hqkfgslw5p";
+      type = "gem";
+    };
+    version = "0.1.9";
+  };
+  rex-core = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s5fz1fipk2x9grd8rj7n09wfmq78kdhw9fvrmgr9z52zi640xzs";
+      type = "gem";
+    };
+    version = "0.1.31";
+  };
+  rex-encoder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rlpxmw4amqf04vn14my6aim5iya0wh5gpi1hrvnqq9xnhkpk2qs";
+      type = "gem";
+    };
+    version = "0.1.7";
+  };
+  rex-exploitation = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pdr7zz9hm7bihq6055jjzdrklp7qn1m50ddr63ilr32wlgldjvh";
+      type = "gem";
+    };
+    version = "0.1.39";
+  };
+  rex-java = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ynqlq1xqnw9asqnkszbjds972xm98fz92yq5ywrxz7p3x66ybbp";
+      type = "gem";
+    };
+    version = "0.1.7";
+  };
+  rex-mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gi2xidygk6j7zwml6225d221bc3s7n2if5g1v1w45ksl19499b3";
+      type = "gem";
+    };
+    version = "0.1.8";
+  };
+  rex-nop = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vavmdzv5aw20izhrbf2f180dwvrraw8i9bh4yz5gsapjizcqrhy";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  rex-ole = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vbiqg120gqd0kfa7kw2jg4jy4y2favsm6kqvysxfjfwp6vfycl6";
+      type = "gem";
+    };
+    version = "0.1.8";
+  };
+  rex-powershell = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kvzw1fnj05cwbczajclwnpv60zky48hjc5svckapfgx8c5mi69f";
+      type = "gem";
+    };
+    version = "0.1.99";
+  };
+  rex-random_identifier = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qxc05f0xvradyp50vz8s1h9lzgh9c31nz8yq7r22bph03v71f0c";
+      type = "gem";
+    };
+    version = "0.1.11";
+  };
+  rex-registry = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sbcs0lkl8b57d5xdlfffrpwxpvvwfcfbgzqc9p7xgmqb1xl2s62";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  rex-rop_builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gbc9sssyzbq1s2nk0ajc9y0x4v10cp4za4f4gbssrjw4d3zf9dl";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  rex-socket = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qs8fq14ivhnhssq966ikxdis864gw80pfbxllbs35v0njw46nj3";
+      type = "gem";
+    };
+    version = "0.1.55";
+  };
+  rex-sslscan = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0plcz9jwpg1yw206ljky3mk6dk31j24jdmcpnky5k9m2npsp0jlf";
+      type = "gem";
+    };
+    version = "0.1.10";
+  };
+  rex-struct2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p6afmicm1adlngp196604rrgb1nsly10y8nphva5h5vncismscz";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  rex-text = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1finkvvmxa654mldx1vqpnl9w1xvjp0s7lyb7qjymlphvbj3mi40";
+      type = "gem";
+    };
+    version = "0.2.55";
+  };
+  rex-zip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15jjb3ldndi9p5x7pb3dllkrm4cy3p7dccy4rxz0vh5m4vlqbhsd";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  rkelly-remix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g7hjl9nx7f953y7lncmfgp0xgxfxvgfm367q6da9niik6rp1y3j";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+  ruby-macho = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yf8fq0l5hlqkjklcpxmg6vhzvbyigwd2n441aq42b2wa2f8xj5q";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  ruby-mysql = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g6wcnzqsbqg2q1lfbhlz4z9rq306az2xx8kk8dnr60dziy1a5b5";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  ruby-rc4 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vci475258mmbvsdqkmqadlwn6gj9m01sp7b5a3zd90knil1k00";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  ruby_smb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04m366ldi33h79k7f35dvyhq0jyh762v8360zf8ss5jbax3bzlkk";
+      type = "gem";
+    };
+    version = "3.3.1";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b8hczk8hysv53ncsqzx4q6kma5gy5lqc7s5yx8h64x3vdb18cjv";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  sawyer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jks1qjbmqm8f9kvwa81vqj39avaj9wdnzc531xm29a55bb74fps";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
+  simpleidn = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06f7w6ph3bzzqk212yylfp4jfx275shgp9zg3xszbpv1ny2skp9m";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  sinatra = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00541cnypsh1mnilfxxqlz6va9afrixf9m1asn4wzjp5m59777p8";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  sqlite3 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08irz5llz31im8pmkk5k0kw433jyyji1qa98xkdmpphncdjr38am";
+      type = "gem";
+    };
+    version = "1.6.9";
+  };
+  sshkey = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k8i5pzjhcnyf0bhcyn5iixpfp4pz0556rcxwpglh6p0sr8s6nv5";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  strptime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ycs0xz58kymf7yp4h56f0nid2z7g3s18dj7pa3p790pfzzpgvcq";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  swagger-blocks = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bycg5si4pr69b0qqiqzhwcich90mvmn0v0gs39slvxg5nv3h28k";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  thin = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08g1yq6zzvgndj8fd98ah7pp8g2diw28p8bfjgv7rvjvp8d2am8w";
+      type = "gem";
+    };
+    version = "1.8.2";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hx77jxkrwi66yvs10wfxqa8s25ds25ywgrrf66acm9nbfg7zp0s";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p3l7v619hwfi781l3r7ypyv1l8hivp09r18kmkn6g11c4yr1pc2";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  timeout = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16mvvsmx90023wrhf8dxc1lpqh0m8alk65shb7xcya6a9gflw7vg";
+      type = "gem";
+    };
+    version = "0.4.1";
+  };
+  ttfunk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15iaxz9iak5643bq2bc0jkbjv8w2zn649lxgvh5wg48q9d4blw13";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  tzinfo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  tzinfo-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m2d0gpsgqnv29j5h2d6g57g0rayvd460b8s2vjr8sn46bqf89m5";
+      type = "gem";
+    };
+    version = "1.2023.3";
+  };
+  unf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sf6bxvf6x8gihv6j63iakixmdddgls58cpxpg32chckb2l18qcj";
+      type = "gem";
+    };
+    version = "0.0.9.1";
+  };
+  unix-crypt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11p5ij6iasr46fbzz0z3jibaiwf242bq8xwav33rljwcwh85sy5y";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  warden = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l7gl7vms023w4clg02pm4ky9j12la2vzsixi2xrv9imbn44ys26";
+      type = "gem";
+    };
+    version = "1.2.9";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qm7s0gr2pmfcl7dxrmq38asaza4w0i2n9my4yzs499j731wh8r";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  websocket-driver = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nyh873w4lvahcl8kzbjfca26656d5c6z3md4sbqg5y1gfz0157n";
+      type = "gem";
+    };
+    version = "0.7.6";
+  };
+  websocket-extensions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hc2g9qps8lmhibl5baa91b4qx8wqw872rgwagml78ydj8qacsqw";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  win32api = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1liryy0pz0gpw5sadbb9xwaflay272b8bwv4pclh6wkhldnh7wg7";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  windows_error = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1825v7hvcl0xss6scyfv76i0cs0kvj72wy20kn7xqylw9avjga2r";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  winrm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nxf6a47d1xf1nvi7rbfbzjyyjhz0iakrnrsr2hj6y24a381sd8i";
+      type = "gem";
+    };
+    version = "2.3.6";
+  };
+  xdr = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vsimn1vha6qjh1zbkvma5biwlh3hzc6s24ksw7vsxg0z27m8bmz";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  xmlrpc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fwfnccagsjrbvrav5nbk3zracj9zncr7i375nn20jd4cfy4cggc";
+      type = "gem";
+    };
+    version = "0.3.3";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gir0if4nryl1jhwi28669gjwhxb7gzrm1fcc8xzsch3bnbi47jn";
+      type = "gem";
+    };
+    version = "2.6.12";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/metasploit/shell.nix b/nixpkgs/pkgs/tools/security/metasploit/shell.nix
new file mode 100644
index 000000000000..ccd510f63af2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/shell.nix
@@ -0,0 +1,17 @@
+# Env to update Gemfile.lock / gemset.nix
+with import <nixpkgs> {};
+stdenv.mkDerivation {
+  name = "env";
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    bundix
+    git
+    libiconv
+    libpcap
+    libxml2
+    libxslt
+    postgresql
+    ruby.devEnv
+    sqlite
+  ];
+}
diff --git a/nixpkgs/pkgs/tools/security/metasploit/update.sh b/nixpkgs/pkgs/tools/security/metasploit/update.sh
new file mode 100755
index 000000000000..45f820d7870a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/update.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl bundix git libiconv libpcap libxml2 libxslt pkg-config postgresql ruby.devEnv sqlite xmlstarlet nix-update
+
+set -eu -o pipefail
+cd "$(dirname "$(readlink -f "$0")")"
+
+latest=$(curl https://github.com/rapid7/metasploit-framework/tags.atom | xmlstarlet sel -N atom="http://www.w3.org/2005/Atom" -t -m /atom:feed/atom:entry -v atom:title -n | head -n1)
+echo "Updating metasploit to $latest"
+
+sed -i "s#refs/tags/.*#refs/tags/$latest\"#" Gemfile
+
+bundler install
+bundix
+sed -i '/[ ]*dependencies =/d' gemset.nix
+
+# Hacks
+sed -i 's/nokogiri = {/nokogiri = {\n    dependencies = ["mini_portile2" "racc"];/g' gemset.nix
+
+cd "../../../../"
+nix-update metasploit --version "$latest"
diff --git a/nixpkgs/pkgs/tools/security/mfcuk/default.nix b/nixpkgs/pkgs/tools/security/mfcuk/default.nix
new file mode 100644
index 000000000000..3128a787807a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mfcuk/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, pkg-config, libnfc }:
+
+stdenv.mkDerivation {
+  pname = "mfcuk";
+  version = "0.3.8";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/mfcuk/mfcuk-0.3.8.tar.gz";
+    sha256 = "0m9sy61rsbw63xk05jrrmnyc3xda0c3m1s8pg3sf8ijbbdv9axcp";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libnfc ];
+
+  meta = with lib; {
+    description = "MiFare Classic Universal toolKit";
+    license = licenses.gpl2;
+    homepage = "https://github.com/nfc-tools/mfcuk";
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mfoc/default.nix b/nixpkgs/pkgs/tools/security/mfoc/default.nix
new file mode 100644
index 000000000000..ca1f4a5e4f25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mfoc/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config, libnfc }:
+
+stdenv.mkDerivation rec {
+  pname = "mfoc";
+  version = "0.10.7";
+
+  src = fetchFromGitHub {
+    owner = "nfc-tools";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "0hbg1fn4000qdg1cfc7y8l0vh1mxlxcz7gapkcq54xp2l6kk1z65";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/nfc-tools/mfoc/commit/f13efb0a6deb1d97ba945d555a6a5d6be89b593f.patch";
+      sha256 = "109gqzp8rdsjvj0nra686vy0dpd2bl6q5v9m4v98cpxkbz496450";
+    })
+    (fetchpatch {
+      url = "https://github.com/nfc-tools/mfoc/commit/00eae36f891bc4580103e3b54f0bb5228af2cdef.patch";
+      sha256 = "1w56aj96g776f37j53jmf3hk21x4mqik3l2bmghrdp8drixc8bzk";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libnfc ];
+
+  meta = with lib; {
+    description = "Mifare Classic Offline Cracker";
+    license = licenses.gpl2;
+    homepage = "https://github.com/nfc-tools/mfoc";
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/minica/default.nix b/nixpkgs/pkgs/tools/security/minica/default.nix
new file mode 100644
index 000000000000..6dd6d1fd5ce0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/minica/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "minica";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "jsha";
+    repo = "minica";
+    rev = "v${version}";
+    sha256 = "sha256-3p6rUFFiWXhX9BBbxqWxRoyRceexvNnqcFCyNi5HoaA=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A simple tool for generating self signed certificates";
+    longDescription = ''
+      Minica is a simple CA intended for use in situations where the CA operator
+      also operates each host where a certificate will be used. It automatically
+      generates both a key and a certificate when asked to produce a
+      certificate.
+    '';
+    homepage = "https://github.com/jsha/minica/";
+    changelog = "https://github.com/jsha/minica/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ m1cr0man ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/minio-certgen/default.nix b/nixpkgs/pkgs/tools/security/minio-certgen/default.nix
new file mode 100644
index 000000000000..fed6bdca2c54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/minio-certgen/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "minio-certgen";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "minio";
+    repo = "certgen";
+    rev = "v${version}";
+    sha256 = "sha256-qi+SeNLW/jE2dGar4Lf16TKRT3ZTmWB/j8EsnoyrdxI=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "A simple Minio tool to generate self-signed certificates, and provides SAN certificates with DNS and IP entries";
+    downloadPage = "https://github.com/minio/certgen";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ bryanasdev000 ];
+    mainProgram = "certgen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/minisign/default.nix b/nixpkgs/pkgs/tools/security/minisign/default.nix
new file mode 100644
index 000000000000..aaa280f40e90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/minisign/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, libsodium }:
+
+stdenv.mkDerivation rec {
+  pname = "minisign";
+  version = "0.11";
+
+  src = fetchFromGitHub {
+    repo = "minisign";
+    owner = "jedisct1";
+    rev = version;
+    sha256 = "sha256-sczGs6du797WUkfr3JiTI/bUHp7vKEeZtJdCryFcYu8=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libsodium ];
+
+  meta = with lib; {
+    description = "A simple tool for signing files and verifying signatures";
+    longDescription = ''
+      minisign uses public key cryptography to help facilitate secure (but not
+      necessarily private) file transfer, e.g., of software artefacts. minisign
+      is similar to and compatible with OpenBSD's signify.
+    '';
+    homepage = "https://jedisct1.github.io/minisign/";
+    license = licenses.isc;
+    maintainers = with maintainers; [ joachifm ];
+    platforms = platforms.unix;
+    mainProgram = "minisign";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/minizign/default.nix b/nixpkgs/pkgs/tools/security/minizign/default.nix
new file mode 100644
index 000000000000..a5fd19405a37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/minizign/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, zig_0_11
+}:
+
+stdenv.mkDerivation {
+  pname = "minizign";
+  version = "unstable-2023-08-13";
+
+  src = fetchFromGitHub {
+    owner = "jedisct1";
+    repo = "zig-minisign";
+    rev = "47edc26d0c7bcfb531fe08e3b2411d8dda516d47";
+    hash = "sha256-zyxjUFxg+VufEVycYGCQPdjERE3p5Vz5iIi2UDujEjI=";
+  };
+
+  nativeBuildInputs = [
+    zig_0_11.hook
+  ];
+
+  meta = with lib; {
+    description = "Minisign reimplemented in Zig";
+    homepage = "https://github.com/jedisct1/zig-minisign";
+    license = licenses.isc;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "minizign";
+    inherit (zig_0_11.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mitm6/default.nix b/nixpkgs/pkgs/tools/security/mitm6/default.nix
new file mode 100644
index 000000000000..a7587330e7b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mitm6/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchPypi
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "mitm6";
+  version = "0.3.0";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-g+eFcJdgP7CQ6ntN17guJa4LdkGIb91mr/NKRPIukP8=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    scapy
+    future
+    twisted
+    netifaces
+  ];
+
+  # No tests exist for mitm6.
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "mitm6"
+  ];
+
+  meta = {
+    description = "DHCPv6 network spoofing application";
+    homepage = "https://github.com/dirkjanm/mitm6";
+    license = lib.licenses.gpl2Only;
+    maintainers = with lib.maintainers; [ arcayr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mitmproxy2swagger/default.nix b/nixpkgs/pkgs/tools/security/mitmproxy2swagger/default.nix
new file mode 100644
index 000000000000..56d47973b7e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mitmproxy2swagger/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "mitmproxy2swagger";
+  version = "0.13.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "alufers";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-VHxqxee5sQWRS13V4SfY4LWaN0oxxWsNVDOEqUyKHfg=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "ruamel.yaml"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    json-stream
+    mitmproxy
+    ruamel-yaml
+  ];
+
+  # No tests available
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "mitmproxy2swagger"
+  ];
+
+  meta = with lib; {
+    description = "Tool to automagically reverse-engineer REST APIs";
+    homepage = "https://github.com/alufers/mitmproxy2swagger";
+    changelog = "https://github.com/alufers/mitmproxy2swagger/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mkp224o/default.nix b/nixpkgs/pkgs/tools/security/mkp224o/default.nix
new file mode 100644
index 000000000000..d6ee40e6f5ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mkp224o/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, libsodium }:
+
+stdenv.mkDerivation rec {
+  pname = "mkp224o";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "cathugger";
+    repo = "mkp224o";
+    rev = "v${version}";
+    sha256 = "sha256-OL3xhoxIS1OqfVp0QboENFdNH/e1Aq1R/MFFM9LNFbQ=";
+  };
+
+  buildCommand =
+    let
+      # compile few variants with different implementation of crypto
+      # the fastest depends on a particular cpu
+      variants = [
+        { suffix = "ref10";         configureFlags = ["--enable-ref10"]; }
+        { suffix = "donna";         configureFlags = ["--enable-donna"]; }
+      ] ++ lib.optionals stdenv.hostPlatform.isx86 [
+        { suffix = "donna-sse2";    configureFlags = ["--enable-donna-sse2"]; }
+      ] ++ lib.optionals (!stdenv.isDarwin && stdenv.isx86_64) [
+        { suffix = "amd64-51-30k";  configureFlags = ["--enable-amd64-51-30k"]; }
+        { suffix = "amd64-64-24k";  configureFlags = ["--enable-amd64-64-24k"]; }
+      ];
+    in
+      lib.concatMapStrings ({suffix, configureFlags}: ''
+        install -D ${
+          stdenv.mkDerivation {
+            name = "mkp224o-${suffix}-${version}";
+            inherit version src configureFlags;
+            nativeBuildInputs = [ autoreconfHook ];
+            buildInputs = [ libsodium ];
+            installPhase = "install -D mkp224o $out";
+          }
+        } $out/bin/mkp224o-${suffix}
+      '') variants;
+
+  meta = with lib; {
+    description = "Vanity address generator for tor onion v3 (ed25519) hidden services";
+    homepage = "http://cathug2kyi4ilneggumrenayhuhsvrgn6qv2y47bgeet42iivkpynqad.onion/";
+    license = licenses.cc0;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mkpasswd/default.nix b/nixpkgs/pkgs/tools/security/mkpasswd/default.nix
new file mode 100644
index 000000000000..2ee71b8227eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mkpasswd/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, whois, libxcrypt, perl, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "mkpasswd";
+  inherit (whois) version src patches;
+
+  nativeBuildInputs = [ perl pkg-config ];
+  buildInputs = [ libxcrypt ];
+
+  inherit (whois) preConfigure;
+  buildPhase = "make mkpasswd";
+  installPhase = "make install-mkpasswd";
+
+  meta = with lib; {
+    homepage = "https://packages.qa.debian.org/w/whois.html";
+    description = "Overfeatured front-end to crypt, from the Debian whois package";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mkrand/default.nix b/nixpkgs/pkgs/tools/security/mkrand/default.nix
new file mode 100644
index 000000000000..21c9586cd6c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mkrand/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mkrand";
+  version = "0.1.0";
+
+  src = fetchurl {
+    url = "https://github.com/mknight-tag/MKRAND/releases/download/v${version}/mkrand-${version}.tar.gz";
+    sha256 = "1irwyv2j5c3606k3qbq77yrd65y27rcq3jdlp295rz875q8iq9fs";
+  };
+
+  doCheck = true;
+
+  meta = {
+    description = "A Digital Random Bit Generator";
+    longDescription = "MKRAND is a utility for generating random information.";
+    homepage = "https://github.com/mknight-tag/MKRAND/";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+  };
+  }
diff --git a/nixpkgs/pkgs/tools/security/mktemp/default.nix b/nixpkgs/pkgs/tools/security/mktemp/default.nix
new file mode 100644
index 000000000000..5010780800de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mktemp/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, groff
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mktemp";
+  version = "1.7";
+
+  # Have `configure' avoid `/usr/bin/nroff' in non-chroot builds.
+  NROFF = "${groff}/bin/nroff";
+
+  patches = [
+    # Pull upstream fix for parallel install failures.
+    (fetchpatch {
+      name = "parallel-install.patch";
+      url = "https://www.mktemp.org/repos/mktemp/raw-rev/eb87d96ce8b7";
+      hash = "sha256-cJ/0pFj8tOkByUwhlMwLNSQgTHyAU8svEkjKWWwsNmY=";
+    })
+  ];
+
+  # Don't use "install -s"
+  postPatch = ''
+    substituteInPlace Makefile.in --replace " 0555 -s " " 0555 "
+  '';
+
+  src = fetchurl {
+    url = "ftp://ftp.mktemp.org/pub/mktemp/mktemp-${version}.tar.gz";
+    sha256 = "0x969152znxxjbj7387xb38waslr4yv6bnj5jmhb4rpqxphvk54f";
+  };
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Simple tool to make temporary file handling in shells scripts safe and simple";
+    homepage = "https://www.mktemp.org";
+    license = licenses.isc;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/modsecurity-crs/default.nix b/nixpkgs/pkgs/tools/security/modsecurity-crs/default.nix
new file mode 100644
index 000000000000..16e21577f78e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/modsecurity-crs/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "3.3.4";
+  pname = "modsecurity-crs";
+
+  src = fetchFromGitHub {
+    owner = "coreruleset";
+    repo = "coreruleset";
+    rev = "v${version}";
+    sha256 = "sha256-WDJW4K85YdHrw9cys3LrnZUoTxc0WhiuCW6CiC1cAbk=";
+  };
+
+  installPhase = ''
+    install -D -m444 -t $out/rules ${src}/rules/*.conf
+    install -D -m444 -t $out/rules ${src}/rules/*.data
+    install -D -m444 -t $out/share/doc/modsecurity-crs ${src}/*.md
+    install -D -m444 -t $out/share/doc/modsecurity-crs ${src}/{CHANGES,INSTALL,LICENSE}
+    install -D -m444 -t $out/share/modsecurity-crs ${src}/rules/*.example
+    install -D -m444 -t $out/share/modsecurity-crs ${src}/crs-setup.conf.example
+    cat > $out/share/modsecurity-crs/modsecurity-crs.load.example <<EOF
+    ##
+    ## This is a sample file for loading OWASP CRS's rules.
+    ##
+    Include /etc/modsecurity/crs/crs-setup.conf
+    IncludeOptional /etc/modsecurity/crs/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
+    Include $out/rules/*.conf
+    IncludeOptional /etc/modsecurity/crs/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
+    EOF
+  '';
+
+  meta = with lib; {
+    homepage = "https://coreruleset.org";
+    description = ''
+      The OWASP ModSecurity Core Rule Set is a set of generic attack detection
+      rules for use with ModSecurity or compatible web application firewalls.
+    '';
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/modsecurity/Makefile.am.patch b/nixpkgs/pkgs/tools/security/modsecurity/Makefile.am.patch
new file mode 100644
index 000000000000..6f2e2ed36454
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/modsecurity/Makefile.am.patch
@@ -0,0 +1,17 @@
+--- a/apache2/Makefile.am
++++ b/apache2/Makefile.am
+@@ -179,7 +179,6 @@ install-exec-hook: $(pkglib_LTLIBRARIES)
+ 	for m in $(pkglib_LTLIBRARIES); do \
+ 	  base=`echo $$m | sed 's/\..*//'`; \
+ 	  rm -f $(DESTDIR)$(pkglibdir)/$$base.*a; \
+-	  install -D -m444 $(DESTDIR)$(pkglibdir)/$$base.so $(DESTDIR)$(APXS_MODULES)/$$base.so; \
+ 	done
+ else
+ install-exec-hook: $(pkglib_LTLIBRARIES)
+@@ -187,6 +186,5 @@ install-exec-hook: $(pkglib_LTLIBRARIES)
+ 	for m in $(pkglib_LTLIBRARIES); do \
+ 	  base=`echo $$m | sed 's/\..*//'`; \
+ 	  rm -f $(DESTDIR)$(pkglibdir)/$$base.*a; \
+-	  cp -p $(DESTDIR)$(pkglibdir)/$$base.so $(DESTDIR)$(APXS_MODULES); \
+ 	done
+ endif
diff --git a/nixpkgs/pkgs/tools/security/modsecurity/default.nix b/nixpkgs/pkgs/tools/security/modsecurity/default.nix
new file mode 100644
index 000000000000..f8564bfe00f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/modsecurity/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, fetchFromGitHub, pkg-config, autoreconfHook
+, curl, apacheHttpd, pcre, apr, aprutil, libxml2
+, luaSupport ? false, lua5, perl
+}:
+
+let luaValue = if luaSupport then lua5 else "no";
+    optional = lib.optional;
+in
+
+stdenv.mkDerivation rec {
+  pname = "modsecurity";
+  version = "2.9.7";
+
+  src = fetchFromGitHub {
+    owner = "SpiderLabs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hJ8wYeC83dl85bkUXGZKHpHzw9QRgtusj1/+Coxsx0k=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [  curl apacheHttpd pcre apr aprutil libxml2 ] ++
+    optional luaSupport lua5;
+
+  configureFlags = [
+    "--enable-standalone-module"
+    "--enable-static"
+    "--with-curl=${curl.dev}"
+    "--with-apxs=${apacheHttpd.dev}/bin/apxs"
+    "--with-pcre=${pcre.dev}"
+    "--with-apr=${apr.dev}"
+    "--with-apu=${aprutil.dev}/bin/apu-1-config"
+    "--with-libxml=${libxml2.dev}"
+    "--with-lua=${luaValue}"
+  ];
+
+  outputs = ["out" "nginx"];
+  # by default modsecurity's install script copies compiled output to httpd's modules folder
+  # this patch removes those lines
+  patches = [ ./Makefile.am.patch ];
+
+  doCheck = true;
+  nativeCheckInputs = [ perl ];
+
+  postInstall = ''
+    mkdir -p $nginx
+    cp -R * $nginx
+  '';
+
+  meta = with lib; {
+    description = "Open source, cross-platform web application firewall (WAF)";
+    license = licenses.asl20;
+    homepage = "https://www.modsecurity.org/";
+    maintainers = with maintainers; [offline];
+    platforms   = lib.platforms.linux ++ lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mokutil/default.nix b/nixpkgs/pkgs/tools/security/mokutil/default.nix
new file mode 100644
index 000000000000..bc38be4cd3e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mokutil/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, openssl
+, efivar
+, keyutils
+, libxcrypt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mokutil";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "lcp";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-PB/VwOJD0DxAioPDYfk2ZDzcN+pSXfUC86hGq2kYhts=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+    efivar
+    keyutils
+    libxcrypt
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/lcp/mokutil";
+    description = "Utility to manipulate machines owner keys";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ nickcao ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mongoaudit/default.nix b/nixpkgs/pkgs/tools/security/mongoaudit/default.nix
new file mode 100644
index 000000000000..2f980be5163b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mongoaudit/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "mongoaudit";
+  version = "0.1.1";
+
+  disabled = python3.pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "stampery";
+    repo = pname;
+    rev = version;
+    sha256 = "17k4vw5d3kr961axl49ywid4cf3n7zxvm885c4lv15w7s2al1425";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pymongo
+    setuptools
+    urwid
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "mongoaudit"
+  ];
+
+  meta = with lib; {
+    description = "MongoDB auditing and pentesting tool";
+    homepage = "https://github.com/stampery/mongoaudit";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "mongoaudit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/monkeysphere/default.nix b/nixpkgs/pkgs/tools/security/monkeysphere/default.nix
new file mode 100644
index 000000000000..bc267a9a7703
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/monkeysphere/default.nix
@@ -0,0 +1,103 @@
+{ lib, stdenv, fetchurl, makeWrapper
+, perl, libassuan, libgcrypt
+, perlPackages, lockfileProgs, gnupg, coreutils
+# For the tests:
+, openssh, which, socat, cpio, hexdump, procps, openssl
+}:
+
+let
+  # A patch is needed to run the tests inside the Nix sandbox:
+  # /etc/passwd: "nixbld:x:1000:100:Nix build user:/build:/noshell"
+  # sshd: "User nixbld not allowed because shell /noshell does not exist"
+  opensshUnsafe = openssh.overrideAttrs (oldAttrs: {
+    patches = oldAttrs.patches ++ [ ./openssh-nixos-sandbox.patch ];
+  });
+in stdenv.mkDerivation rec {
+  pname = "monkeysphere";
+  version = "0.44";
+
+  # The patched OpenSSH binary MUST NOT be used (except in the check phase):
+  disallowedRequisites = [ opensshUnsafe ];
+
+  src = fetchurl {
+    url = "http://archive.monkeysphere.info/debian/pool/monkeysphere/m/monkeysphere/monkeysphere_${version}.orig.tar.gz";
+    sha256 = "1ah7hy8r9gj96pni8azzjb85454qky5l17m3pqn37854l6grgika";
+  };
+
+  patches = [ ./monkeysphere.patch ];
+
+  postPatch = ''
+    sed -i "s,/usr/bin/env,${coreutils}/bin/env," src/share/ma/update_users
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl libassuan libgcrypt ]
+    ++ lib.optional doCheck
+      ([ gnupg opensshUnsafe which socat cpio hexdump procps lockfileProgs ] ++
+      (with perlPackages; [ CryptOpenSSLRSA CryptOpenSSLBignum ]));
+
+  makeFlags = [
+    "PREFIX=/"
+    "DESTDIR=$(out)"
+  ];
+
+  # The tests should be run (and succeed) when making changes to this package
+  # but they aren't enabled by default because they "drain" entropy (GnuPG
+  # still uses /dev/random).
+  doCheck = false;
+  preCheck = lib.optionalString doCheck ''
+    patchShebangs tests/
+    patchShebangs src/
+    sed -i \
+      -e "s,/usr/sbin/sshd,${opensshUnsafe}/bin/sshd," \
+      -e "s,/bin/true,${coreutils}/bin/true," \
+      -e "s,/bin/false,${coreutils}/bin/false," \
+      -e "s,openssl\ req,${openssl}/bin/openssl req," \
+      tests/basic
+    sed -i "s/<(hd/<(hexdump/" tests/keytrans
+  '';
+
+  postFixup =
+    let wrapperArgs = runtimeDeps:
+          "--prefix PERL5LIB : "
+          + (with perlPackages; makePerlPath [ # Optional (only required for keytrans)
+              CryptOpenSSLRSA
+              CryptOpenSSLBignum
+            ])
+          + lib.optionalString
+              (builtins.length runtimeDeps > 0)
+              " --prefix PATH : ${lib.makeBinPath runtimeDeps}";
+        wrapMonkeysphere = runtimeDeps: program:
+          "wrapProgram $out/bin/${program} ${wrapperArgs runtimeDeps}\n";
+        wrapPrograms = runtimeDeps: programs: lib.concatMapStrings
+          (wrapMonkeysphere runtimeDeps)
+          programs;
+    in wrapPrograms [ gnupg ] [ "monkeysphere-authentication" "monkeysphere-host" ]
+      + wrapPrograms [ gnupg lockfileProgs ] [ "monkeysphere" ]
+      + ''
+        # These 4 programs depend on the program name ($0):
+        for program in openpgp2pem openpgp2spki openpgp2ssh pem2openpgp; do
+          rm $out/bin/$program
+          ln -sf keytrans $out/share/monkeysphere/$program
+          makeWrapper $out/share/monkeysphere/$program $out/bin/$program \
+            ${wrapperArgs [ ]}
+        done
+      '';
+
+  meta = with lib; {
+    homepage = "http://web.monkeysphere.info/";
+    description = "Leverage the OpenPGP web of trust for SSH and TLS authentication";
+    longDescription = ''
+      The Monkeysphere project's goal is to extend OpenPGP's web of
+      trust to new areas of the Internet to help us securely identify
+      servers we connect to, as well as each other while we work online.
+      The suite of Monkeysphere utilities provides a framework to
+      transparently leverage the web of trust for authentication of
+      TLS/SSL communications through the normal use of tools you are
+      familiar with, such as your web browser0 or secure shell.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/monkeysphere/monkeysphere.patch b/nixpkgs/pkgs/tools/security/monkeysphere/monkeysphere.patch
new file mode 100644
index 000000000000..8cdd85017b93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/monkeysphere/monkeysphere.patch
@@ -0,0 +1,23 @@
+diff --git a/Makefile b/Makefile
+--- a/Makefile
++++ b/Makefile
+@@ -52,7 +52,7 @@ clean:
+ replaced/%: %
+ 	mkdir -p $(dir $@)
+ 	sed < $< > $@ \
+-	-e 's:__SYSSHAREDIR_PREFIX__:$(PREFIX):' \
++	-e 's:__SYSSHAREDIR_PREFIX__:$(DESTDIR):' \
+ 	-e 's:__SYSCONFDIR_PREFIX__:$(ETCPREFIX):' \
+ 	-e 's:__SYSDATADIR_PREFIX__:$(LOCALSTATEDIR):'
+ 
+diff --git a/src/share/keytrans b/src/share/keytrans
+--- a/src/share/keytrans
++++ b/src/share/keytrans
+@@ -1,4 +1,4 @@
+-#!/usr/bin/perl -T
++#!/usr/bin/perl
+ 
+ # keytrans: this is an RSA key translation utility; it is capable of
+ # transforming RSA keys (both public keys and secret keys) between
+-- 
+2.16.3
diff --git a/nixpkgs/pkgs/tools/security/monkeysphere/openssh-nixos-sandbox.patch b/nixpkgs/pkgs/tools/security/monkeysphere/openssh-nixos-sandbox.patch
new file mode 100644
index 000000000000..2a9a1fc8dfa9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/monkeysphere/openssh-nixos-sandbox.patch
@@ -0,0 +1,17 @@
+diff --git a/auth.c b/auth.c
+index d2a8cd65..811a129f 100644
+--- a/auth.c
++++ b/auth.c
+@@ -580,6 +580,12 @@ getpwnamallow(const char *user)
+ #endif
+ 
+ 	pw = getpwnam(user);
++        if (pw != NULL) {
++		// This is only for testing purposes,
++		// DO NOT USE THIS PATCH IN PRODUCTION!
++		char *shell = "/bin/sh";
++		pw->pw_shell = shell;
++        }
+ 
+ #if defined(_AIX) && defined(HAVE_SETAUTHDB)
+ 	aix_restoreauthdb();
diff --git a/nixpkgs/pkgs/tools/security/monsoon/default.nix b/nixpkgs/pkgs/tools/security/monsoon/default.nix
new file mode 100644
index 000000000000..8ac0c834ee03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/monsoon/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "monsoon";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "RedTeamPentesting";
+    repo = "monsoon";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-7cfy8dYhiReFVz10wui3qqxlXOX7wheREkvSnj2KyOw=";
+  };
+
+  vendorHash = "sha256-SZDX61iPwT/mfxJ+n2nlvzgEvUu6h3wVkmeqZtxQ9KE=";
+
+  # Tests fails on darwin
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Fast HTTP enumerator";
+    longDescription = ''
+      A fast HTTP enumerator that allows you to execute a large number of HTTP
+      requests, filter the responses and display them in real-time.
+    '';
+    homepage = "https://github.com/RedTeamPentesting/monsoon";
+    changelog = "https://github.com/RedTeamPentesting/monsoon/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mpw/default.nix b/nixpkgs/pkgs/tools/security/mpw/default.nix
new file mode 100644
index 000000000000..8d6f7f4f3b1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mpw/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv, cmake, fetchFromGitLab
+, json_c, libsodium, libxml2, ncurses }:
+
+let
+  rev = "22796663dcad81684ab24308d9db570f6781ba2c";
+
+in stdenv.mkDerivation rec {
+  name = "mpw-${version}-${builtins.substring 0 8 rev}";
+  version = "2.6";
+
+  src = fetchFromGitLab {
+    owner  = "MasterPassword";
+    repo   = "MasterPassword";
+    sha256 = "1f2vqacgbyam1mazawrfim8zwp38gnwf5v3xkkficsfnv789g6fw";
+    inherit rev;
+  };
+
+  sourceRoot = "${src.name}/platform-independent/c/cli";
+
+  postPatch = ''
+    rm build
+    substituteInPlace mpw-cli-tests \
+      --replace '/usr/bin/env bash' ${stdenv.shell} \
+      --replace ./mpw ./build/mpw
+  '';
+
+  cmakeFlags = [
+    "-Dmpw_version=${version}"
+    "-DBUILD_MPW_TESTS=ON"
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ json_c libxml2 libsodium ncurses ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 mpw                    $out/bin/mpw
+    install -Dm644 ../mpw.completion.bash $out/share/bash-completion/completions/_mpw
+    install -Dm644 ../../../../README.md  $out/share/doc/mpw/README.md
+
+    runHook postInstall
+  '';
+
+  # Some tests are expected to fail on ARM64
+  # See: https://gitlab.com/spectre.app/cli/-/issues/27#note_962950844 (mpw is a predecessor to spectre-cli and this issue is relevant to mpw as well)
+  doCheck = !(stdenv.isLinux && stdenv.isAarch64);
+
+  checkPhase = ''
+    runHook preCheck
+
+    ../mpw-cli-tests
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "A stateless password management solution";
+    homepage = "https://masterpasswordapp.com/";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/msfpc/default.nix b/nixpkgs/pkgs/tools/security/msfpc/default.nix
new file mode 100644
index 000000000000..428611181410
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/msfpc/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, metasploit, curl, inetutils, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "msfpc";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "g0tmi1k";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "UIdE0oSaNu16pf+M96x8AnNju88hdzokv86wm8uBYDQ=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 msfpc.sh $out/bin/msfpc
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/msfpc \
+      --prefix PATH : "${lib.makeBinPath [ metasploit curl inetutils openssl ]}"
+  '';
+
+  meta = with lib; {
+    description = "MSFvenom Payload Creator";
+    homepage = "https://github.com/g0tmi1k/msfpc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/msldapdump/default.nix b/nixpkgs/pkgs/tools/security/msldapdump/default.nix
new file mode 100644
index 000000000000..cf232c3df697
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/msldapdump/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "msldapdump";
+  version = "unstable-2023-06-12";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "dievus";
+    repo = "msLDAPDump";
+    rev = "bdffe66be20ff844f55f69fd6d842d7f75f66f2d";
+    hash = "sha256-qH4AaebrTKYxxjXawllxgiG9fVm03zmTRv/HAyNpewg=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    ldap3
+  ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD msLDAPDump.py $out/bin/msLDAPDump.py
+
+    makeWrapper ${python3.interpreter} $out/bin/msldapdump \
+      --set PYTHONPATH "$PYTHONPATH:$out/bin/msLDAPDump.py" \
+      --add-flags "-O $out/bin/msLDAPDump.py"
+
+    runHook postInstall
+  '';
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "LDAP enumeration tool";
+    homepage = "https://github.com/dievus/msLDAPDump";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/munge/default.nix b/nixpkgs/pkgs/tools/security/munge/default.nix
new file mode 100644
index 000000000000..fcf9026f215c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/munge/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libgcrypt, zlib, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "munge";
+  version = "0.5.15";
+
+  src = fetchFromGitHub {
+    owner = "dun";
+    repo = "munge";
+    rev = "${pname}-${version}";
+    sha256 = "sha256-Ot/oH/RdfPAzoi3P7EYkxS0Fr24KRWfBJxBEWRF0ctI=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    autoreconfHook
+    libgcrypt # provides libgcrypt.m4
+  ];
+  buildInputs = [ libgcrypt zlib bzip2 ];
+
+  preAutoreconf = ''
+    # Remove the install-data stuff, since it tries to write to /var
+    substituteInPlace src/Makefile.am --replace "etc \\" "\\"
+  '';
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--with-libgcrypt-prefix=${libgcrypt.dev}"
+    # workaround for cross compilation: https://github.com/dun/munge/issues/103
+    "ac_cv_file__dev_spx=no"
+    "x_ac_cv_check_fifo_recvfd=no"
+  ];
+
+  meta = with lib; {
+    description = ''
+      An authentication service for creating and validating credentials
+    '';
+    license = licenses.lgpl3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.rickynils ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mx-takeover/default.nix b/nixpkgs/pkgs/tools/security/mx-takeover/default.nix
new file mode 100644
index 000000000000..88ef8fbf3ed0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mx-takeover/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "mx-takeover";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "musana";
+    repo = "mx-takeover";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-yDQd2FEVFFsUu3wKxp26VDhGjnuXmAtxpWoKjV6ZrHA=";
+  };
+
+  vendorHash = "sha256-mJ8pVsgRM6lhEa8jtCxFhavkf7XFlBqEN9l1r0/GTvM=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Tool to work with DNS MX records";
+    homepage = "https://github.com/musana/mx-takeover";
+    changelog = "https://github.com/musana/mx-takeover/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/naabu/default.nix b/nixpkgs/pkgs/tools/security/naabu/default.nix
new file mode 100644
index 000000000000..7d3981222f91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/naabu/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, libpcap
+}:
+
+buildGoModule rec {
+  pname = "naabu";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "naabu";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-z81LL+tx15Zo6OWj4gRSodo7Dk763M+QQ5kYgjrWO3Q=";
+  };
+
+  vendorHash = "sha256-nwrqxlbvr9FZXJpzmcn0IBEtlJfeYCy8DJsBvxEgj6k=";
+
+  buildInputs = [
+    libpcap
+  ];
+
+  modRoot = "./v2";
+
+  subPackages = [
+    "cmd/naabu/"
+  ];
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  meta = with lib; {
+    description = "Fast SYN/CONNECT port scanner";
+    longDescription = ''
+      Naabu is a port scanning tool written in Go that allows you to enumerate
+      valid ports for hosts in a fast and reliable manner. It is a really simple
+      tool that does fast SYN/CONNECT scans on the host/list of hosts and lists
+      all ports that return a reply.
+    '';
+    homepage = "https://github.com/projectdiscovery/naabu";
+    changelog = "https://github.com/projectdiscovery/naabu/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nasty/default.nix b/nixpkgs/pkgs/tools/security/nasty/default.nix
new file mode 100644
index 000000000000..b3b19c9268bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nasty/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, gpgme }:
+
+stdenv.mkDerivation rec {
+  pname = "nasty";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://www.vanheusden.com/nasty/${pname}-${version}.tgz";
+    sha256 = "1dznlxr728k1pgy1kwmlm7ivyl3j3rlvkmq34qpwbwbj8rnja1vn";
+  };
+
+  # does not apply cleanly with patchPhase/fetchpatch
+  # https://sources.debian.net/src/nasty/0.6-3/debian/patches/02_add_largefile_support.patch
+  CFLAGS = "-D_FILE_OFFSET_BITS=64";
+
+  buildInputs = [ gpgme ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp nasty $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Recover the passphrase of your PGP or GPG-key";
+    longDescription = ''
+    Nasty is a program that helps you to recover the passphrase of your PGP or GPG-key
+    in case you forget or lost it. It is mostly a proof-of-concept: with a different implementation
+    this program could be at least 100x faster.
+    '';
+    homepage = "http://www.vanheusden.com/nasty/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ davidak ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/nbtscanner/Cargo.lock.patch b/nixpkgs/pkgs/tools/security/nbtscanner/Cargo.lock.patch
new file mode 100644
index 000000000000..7ca50b7b4a11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nbtscanner/Cargo.lock.patch
@@ -0,0 +1,176 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index 9b32d00..9767c48 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1,39 +1,44 @@
+ # This file is automatically @generated by Cargo.
+ # It is not intended for manual editing.
++version = 3
++
+ [[package]]
+ name = "ansi_term"
+-version = "0.10.2"
++version = "0.12.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "6b3568b48b7cefa6b8ce125f9bb4989e52fbcc29ebea88df04cc7c5f12f70455"
++checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
++dependencies = [
++ "winapi",
++]
+ 
+ [[package]]
+ name = "assert_matches"
+-version = "1.1.0"
++version = "1.5.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "9e772942dccdf11b368c31e044e4fca9189f80a773d2f0808379de65894cbf57"
++checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9"
+ 
+ [[package]]
+ name = "atty"
+-version = "0.2.6"
++version = "0.2.14"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "8352656fd42c30a0c3c89d26dea01e3b77c0ab2af18230835c15e2e13cd51859"
++checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+ dependencies = [
++ "hermit-abi",
+  "libc",
+- "termion",
+  "winapi",
+ ]
+ 
+ [[package]]
+ name = "bitflags"
+-version = "1.0.1"
++version = "1.3.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf"
++checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+ 
+ [[package]]
+ name = "clap"
+-version = "2.29.1"
++version = "2.34.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "8f4a2b3bb7ef3c672d7c13d15613211d5a6976b6892c598b0fcb5d40765f19c2"
++checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+ dependencies = [
+  "ansi_term",
+  "atty",
+@@ -45,77 +50,60 @@ dependencies = [
+ ]
+ 
+ [[package]]
+-name = "libc"
+-version = "0.2.36"
++name = "hermit-abi"
++version = "0.1.19"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "1e5d97d6708edaa407429faa671b942dc0f2727222fb6b6539bf1db936e4b121"
+-
+-[[package]]
+-name = "nbtscanner"
+-version = "0.0.1"
++checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+ dependencies = [
+- "assert_matches",
+- "clap",
++ "libc",
+ ]
+ 
+ [[package]]
+-name = "redox_syscall"
+-version = "0.1.37"
++name = "libc"
++version = "0.2.147"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd"
++checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+ 
+ [[package]]
+-name = "redox_termios"
+-version = "0.1.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
++name = "nbtscanner"
++version = "0.0.2"
+ dependencies = [
+- "redox_syscall",
++ "assert_matches",
++ "clap",
+ ]
+ 
+ [[package]]
+ name = "strsim"
+-version = "0.6.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"
+-
+-[[package]]
+-name = "termion"
+-version = "1.5.1"
++version = "0.8.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
+-dependencies = [
+- "libc",
+- "redox_syscall",
+- "redox_termios",
+-]
++checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+ 
+ [[package]]
+ name = "textwrap"
+-version = "0.9.0"
++version = "0.11.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "c0b59b6b4b44d867f1370ef1bd91bfb262bf07bf0ae65c202ea2fbc16153b693"
++checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+ dependencies = [
+  "unicode-width",
+ ]
+ 
+ [[package]]
+ name = "unicode-width"
+-version = "0.1.4"
++version = "0.1.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "bf3a113775714a22dcb774d8ea3655c53a32debae63a063acc00a91cc586245f"
++checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+ 
+ [[package]]
+ name = "vec_map"
+-version = "0.8.0"
++version = "0.8.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "887b5b631c2ad01628bbbaa7dd4c869f80d3186688f8d0b6f58774fbe324988c"
++checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+ 
+ [[package]]
+ name = "winapi"
+-version = "0.3.3"
++version = "0.3.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "b09fb3b6f248ea4cd42c9a65113a847d612e17505d6ebd1f7357ad68a8bf8693"
++checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+ dependencies = [
+  "winapi-i686-pc-windows-gnu",
+  "winapi-x86_64-pc-windows-gnu",
+@@ -123,12 +111,12 @@ dependencies = [
+ 
+ [[package]]
+ name = "winapi-i686-pc-windows-gnu"
+-version = "0.3.2"
++version = "0.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "ec6667f60c23eca65c561e63a13d81b44234c2e38a6b6c959025ee907ec614cc"
++checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+ 
+ [[package]]
+ name = "winapi-x86_64-pc-windows-gnu"
+-version = "0.3.2"
++version = "0.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "98f12c52b2630cd05d2c3ffd8e008f7f48252c042b4871c72aed9dc733b96668"
++checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/nixpkgs/pkgs/tools/security/nbtscanner/default.nix b/nixpkgs/pkgs/tools/security/nbtscanner/default.nix
new file mode 100644
index 000000000000..51e9f085164b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nbtscanner/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nbtscanner";
+  version = "0.0.2";
+
+  src = fetchFromGitHub {
+    owner = "jonkgrimes";
+    repo = pname;
+    rev = version;
+    hash = "sha256-lnTTutOc829COwfNhBkSK8UpiNnGsm7Da53b+eSBt1Q=";
+  };
+
+  cargoHash = "sha256-NffNQXKJ+b1w7Ar2M6UDev/AxruDEf8IGQ+mNdvU6e4=";
+
+  cargoPatches = [
+    ./Cargo.lock.patch
+  ];
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "NetBIOS scanner written in Rust";
+    homepage = "https://github.com/jonkgrimes/nbtscanner";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nbutools/default.nix b/nixpkgs/pkgs/tools/security/nbutools/default.nix
new file mode 100644
index 000000000000..15401e3db258
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nbutools/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "nbutools";
+  version = "unstable-2023-06-06";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "airbus-seclab";
+    repo = "nbutools";
+    rev = "d82fb96d5623e7d3076cc0a1db06a640f63b9552";
+    hash = "sha256-YOiFlTIDpeTFOHPU37v0pYf8s3HdaE/4pnd9qrsFtSI=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiodns
+    aiohttp
+    beautifulsoup4
+    graphviz
+    jaydebeapi
+    jpype1
+    lxml
+    pycryptodome
+    requests
+    scapy
+    tabulate
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tools for offensive security of NetBackup infrastructures";
+    homepage = "https://github.com/airbus-seclab/nbutools";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ncrack/default.nix b/nixpkgs/pkgs/tools/security/ncrack/default.nix
new file mode 100644
index 000000000000..4b0feccb412a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ncrack/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "ncrack";
+  version = "0.7";
+
+  src = fetchFromGitHub {
+    owner = "nmap";
+    repo = "ncrack";
+    rev = version;
+    sha256 = "1gnv5xdd7n04glcpy7q1mkb6f8gdhdrhlrh8z6k4g2pjdhxlz26g";
+  };
+
+  patches = [
+    # Pull upstream fix for -fno-common toolchains like upstream gcc-10:
+    #   https://github.com/nmap/ncrack/pull/83
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/nmap/ncrack/commit/cc4103267bab6017a4da9d41156d0c1075012eba.patch";
+      sha256 = "06nlfvc7p108f8ppbcgwmj4iwmjy95xhc1sawa8c78lrx22r7gy3";
+    })
+  ];
+
+  # Our version is good; the check is bad.
+  configureFlags = [ "--without-zlib-version-check" ];
+
+  buildInputs = [ openssl zlib ];
+
+  meta = with lib; {
+    description = "Network authentication tool";
+    homepage = "https://nmap.org/ncrack/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ siraben ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/netexec/default.nix b/nixpkgs/pkgs/tools/security/netexec/default.nix
new file mode 100644
index 000000000000..625cd3974252
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/netexec/default.nix
@@ -0,0 +1,106 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+}:
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      impacket = super.impacket.overridePythonAttrs {
+        version = "0.12.0.dev1-unstable-2023-11-30";
+        src = fetchFromGitHub {
+          owner = "Pennyw0rth";
+          repo = "impacket";
+          rev = "d370e6359a410063b2c9c68f6572c3b5fb178a38";
+          hash = "sha256-Jozn4lKAnLQ2I53+bx0mFY++OH5P4KyqVmrS5XJUY3E=";
+        };
+        # Fix version to be compliant with Python packaging rules
+        postPatch = ''
+          substituteInPlace setup.py \
+            --replace 'version="{}.{}.{}.{}{}"' 'version="{}.{}.{}"'
+        '';
+      };
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "netexec";
+  version = "1.1.0-unstable-2024-01-15";
+  pyproject = true;
+  pythonRelaxDeps = true;
+  pythonRemoveDeps = [
+    # Fail to detect dev version requirement
+    "neo4j"
+  ];
+
+  src = fetchFromGitHub {
+    owner = "Pennyw0rth";
+    repo = "NetExec";
+    rev = "9df72e2f68b914dfdbd75b095dd8f577e992615f";
+    hash = "sha256-oQHtTE5hdlxHX4uc412VfNUrN0UHVbwI0Mm9kmJpNW4=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace '{ git = "https://github.com/Pennyw0rth/impacket.git", branch = "gkdi" }' '"*"' \
+      --replace '{ git = "https://github.com/Pennyw0rth/oscrypto" }' '"*"'
+  '';
+
+  nativeBuildInputs = with python.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    aardwolf
+    aioconsole
+    aiosqlite
+    argcomplete
+    asyauth
+    beautifulsoup4
+    bloodhound-py
+    dploot
+    dsinternals
+    impacket
+    lsassy
+    masky
+    minikerberos
+    msgpack
+    neo4j
+    oscrypto
+    paramiko
+    pyasn1-modules
+    pylnk3
+    pypsrp
+    pypykatz
+    python-libnmap
+    pywerview
+    requests
+    rich
+    sqlalchemy
+    termcolor
+    terminaltables
+    xmltodict
+  ];
+
+  nativeCheckInputs = with python.pkgs; [
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "Network service exploitation tool (maintained fork of CrackMapExec)";
+    homepage = "https://github.com/Pennyw0rth/NetExec";
+    changelog = "https://github.com/Pennyw0rth/NetExec/releases/tag/v${version}";
+    license = with licenses; [ bsd2 ];
+    mainProgram = "nxc";
+    maintainers = with maintainers; [ vncsb ];
+    # FIXME: failing fixupPhase:
+    # $ Rewriting #!/nix/store/<hash>-python3-3.11.7/bin/python3.11 to #!/nix/store/<hash>-python3-3.11.7
+    # $ /nix/store/<hash>-wrap-python-hook/nix-support/setup-hook: line 65: 47758 Killed: 9               sed -i "$f" -e "1 s^#!/nix/store/<hash>-python3-3.11.7^#!/nix/store/<hash>-python3-3.11.7^"
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/networkminer/default.nix b/nixpkgs/pkgs/tools/security/networkminer/default.nix
new file mode 100644
index 000000000000..6e762ef543fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/networkminer/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, buildDotnetModule
+, fetchurl
+, unzip
+, dos2unix
+, msbuild
+, mono
+}:
+buildDotnetModule rec {
+  pname = "networkminer";
+  version = "2.8";
+
+  src = fetchurl {
+    # Upstream does not provide versioned releases, a mirror has been uploaded
+    # to archive.org
+    url = "https://archive.org/download/networkminer-${lib.replaceStrings ["."] ["-"] version}/NetworkMiner_${lib.replaceStrings ["."] ["-"] version}_source.zip";
+    sha256 = "1n2312acq5rq0jizlcfk0crslx3wgcsd836p47nk3pnapzw0cqvv";
+  };
+
+  nativeBuildInputs = [ unzip dos2unix msbuild ];
+
+  patches = [
+    # Store application data in XDG_DATA_DIRS instead of trying to write to nix store
+    ./xdg-dirs.patch
+  ];
+
+  postPatch = ''
+    # Not all files have UTF-8 BOM applied consistently
+    find . -type f -exec dos2unix -m {} \+
+
+    # Embedded base64-encoded app icon in resx fails to parse. Delete it
+    sed -zi 's|<data name="$this.Icon".*</data>||g' NetworkMiner/NamedPipeForm.resx
+    sed -zi 's|<data name="$this.Icon".*</data>||g' NetworkMiner/UpdateCheck.resx
+  '';
+
+  nugetDeps = ./deps.nix;
+
+  buildPhase = ''
+    runHook preBuild
+
+    msbuild /p:Configuration=Release NetworkMiner.sln
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share
+    cp -r NetworkMiner/bin/Release $out/share/NetworkMiner
+    makeWrapper ${mono}/bin/mono $out/bin/NetworkMiner \
+      --add-flags "$out/share/NetworkMiner/NetworkMiner.exe" \
+      --add-flags "--noupdatecheck"
+
+    install -D NetworkMiner/NetworkMiner.desktop $out/share/applications/NetworkMiner.desktop
+    substituteInPlace $out/share/applications/NetworkMiner.desktop \
+      --replace "Exec=mono NetworkMiner.exe %f" "Exec=NetworkMiner" \
+      --replace "Icon=./networkminericon-96x96.png" "Icon=NetworkMiner"
+    install -D NetworkMiner/networkminericon-96x96.png $out/share/pixmaps/NetworkMiner.png
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "The Open Source Network Forensic Analysis Tool (NFAT)";
+    homepage = "https://www.netresec.com/?page=NetworkMiner";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.linux;
+    mainProgram = "NetworkMiner";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/networkminer/deps.nix b/nixpkgs/pkgs/tools/security/networkminer/deps.nix
new file mode 100644
index 000000000000..196ca32bf1ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/networkminer/deps.nix
@@ -0,0 +1,8 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.2"; sha256 = "0i42rn8xmvhn08799manpym06kpw89qy9080myyy2ngy565pqh0a"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net461"; version = "1.0.2"; sha256 = "0js3dp26nszx82q0phv7hmsm5z23dva7javbmk6a91lbkm07y8p2"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net472"; version = "1.0.2"; sha256 = "1dny43jksy6dm9zrkdm8j80gb25w6wdvjlxnphj7ngf0fbg3dd2c"; })
+]
diff --git a/nixpkgs/pkgs/tools/security/networkminer/xdg-dirs.patch b/nixpkgs/pkgs/tools/security/networkminer/xdg-dirs.patch
new file mode 100644
index 000000000000..58c0745d338b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/networkminer/xdg-dirs.patch
@@ -0,0 +1,174 @@
+diff --git a/NetworkMiner/NetworkMinerForm.cs b/NetworkMiner/NetworkMinerForm.cs
+index 06c808b..6495b73 100644
+--- a/NetworkMiner/NetworkMinerForm.cs
++++ b/NetworkMiner/NetworkMinerForm.cs
+@@ -1,4 +1,4 @@
+-//  Copyright: Erik Hjelmvik, NETRESEC

++//  Copyright: Erik Hjelmvik, NETRESEC

+ //

+ //  NetworkMiner is free software; you can redistribute it and/or modify it

+ //  under the terms of the GNU General Public License

+@@ -419,7 +419,7 @@ namespace NetworkMiner {
+             }

+             try {

+                 //require FileIOPermission to be PermissionState.Unrestricted

+-                string path = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY;

++                string path = System.IO.Path.GetDirectoryName(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome()) + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY;

+                 System.Security.Permissions.FileIOPermission fileIOPerm = new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.AllAccess, path);

+                 fileIOPerm.Demand();

+             }

+@@ -1023,13 +1023,13 @@ namespace NetworkMiner {
+         public void CreateNewPacketHandlerWrapper(System.IO.DirectoryInfo outputDirectory) {

+             //make sure that folders exists

+             try {

+-                System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(outputDirectory.FullName + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY);

++                System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY);

+                 if (!di.Exists)

+                     di.Create();

+-                di = new System.IO.DirectoryInfo(outputDirectory.FullName + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar + "cache");

++                di = new System.IO.DirectoryInfo(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar + "cache");

+                 if (!di.Exists)

+                     di.Create();

+-                di = new System.IO.DirectoryInfo(outputDirectory.FullName + System.IO.Path.DirectorySeparatorChar + "Captures");

++                di = new System.IO.DirectoryInfo(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + "Captures");

+                 if (!di.Exists)

+                     di.Create();

+             }

+@@ -1962,7 +1962,7 @@ namespace NetworkMiner {
+             string filename = Tools.GenerateCaptureFileName(DateTime.Now);

+             //string filename="NM_"+DateTime.Now.ToString("s", System.Globalization.DateTimeFormatInfo.InvariantInfo).Replace(':','-')+".pcap";

+ 

+-            string fileFullPath = this.OutputDirectory.FullName + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

++            string fileFullPath = SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

+             //string fileFullPath = System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(System.Windows.Forms.Application.ExecutablePath)) + System.IO.Path.DirectorySeparatorChar + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

+ 

+             //make sure to get the right datalink type

+@@ -2534,7 +2534,7 @@ namespace NetworkMiner {
+ 

+             if (removeCapturedFiles) {

+                 PacketParser.FileTransfer.FileStreamAssemblerList.RemoveTempFiles();

+-                string capturesDirectory = System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(System.Windows.Forms.Application.ExecutablePath)) + System.IO.Path.DirectorySeparatorChar + "Captures";

++                string capturesDirectory = System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome())) + System.IO.Path.DirectorySeparatorChar + "Captures";

+                 if (System.IO.Directory.Exists(capturesDirectory)) {

+                     foreach (string pcapFile in System.IO.Directory.GetFiles(capturesDirectory))

+                         try {

+@@ -2545,7 +2545,7 @@ namespace NetworkMiner {
+                             //this.ShowAnomaly("Error deleting file \"" + pcapFile + "\"", DateTime.Now);

+                         }

+                 }

+-                capturesDirectory = this.packetHandlerWrapper.PacketHandler.OutputDirectory + "Captures";

++                capturesDirectory = SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + "Captures";

+                 if (System.IO.Directory.Exists(capturesDirectory)) {

+                     foreach (string pcapFile in System.IO.Directory.GetFiles(capturesDirectory))

+                         try {

+@@ -2635,7 +2635,7 @@ namespace NetworkMiner {
+                     try {

+                         PacketParser.Utils.ByteConverter.ToByteArrayFromHexString(keyword);//to force valid hex

+                         this.keywordListBox.Items.Add(keyword);

+-                        //Lägg till keywordet till PacketHandler.PacketHandler!!!

++                        //L�gg till keywordet till PacketHandler.PacketHandler!!!

+                     }

+                     catch (Exception ex) {

+                         errorMessage = ex.Message;

+@@ -2720,7 +2720,7 @@ namespace NetworkMiner {
+ #endregion

+ 

+         private void hostSortOrderComboBox_SelectedIndexChanged(object sender, EventArgs e) {

+-            //HÄR SKA detailsHeader LIGGA Enabled MASSA OLIKA SORTERINGSORDNINGAR:

++            //H�R SKA detailsHeader LIGGA Enabled MASSA OLIKA SORTERINGSORDNINGAR:

+             //IP, HOTSNAME, SENT PACKETS, RECEIVED PACKETS, MAC ADDRESS

+             this.RebuildHostsTree(sender, e);

+         }

+@@ -2754,7 +2754,7 @@ namespace NetworkMiner {
+             foreach (string p in paths) {

+                 if (!p.Contains(PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY))

+                     return false;

+-                if (!this.IsSubDirectoryOf(new System.IO.DirectoryInfo(p), new System.IO.DirectoryInfo(this.packetHandlerWrapper.PacketHandler.OutputDirectory + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY)))

++                if (!this.IsSubDirectoryOf(new System.IO.DirectoryInfo(p), new System.IO.DirectoryInfo(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY)))

+                     return false;

+             }

+             return true;

+@@ -3976,7 +3976,7 @@ finally {
+         }

+ 

+         private void closeToolStripMenuItem_Click(object sender, EventArgs e) {

+-            DialogResult yesOrNo = MessageBox.Show("Would you like to delete all extracted files from:" + Environment.NewLine + this.OutputDirectory.FullName + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar, "Delete extracted files?", MessageBoxButtons.YesNo);

++            DialogResult yesOrNo = MessageBox.Show("Would you like to delete all extracted files from:" + Environment.NewLine + SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar, "Delete extracted files?", MessageBoxButtons.YesNo);

+             this.ResetCapturedData(false, yesOrNo == DialogResult.Yes, true);

+         }

+ 

+diff --git a/NetworkMiner/PcapOverIP/ReceivePcapOverTcpForm.cs b/NetworkMiner/PcapOverIP/ReceivePcapOverTcpForm.cs
+index 9bae5f0..72586d4 100644
+--- a/NetworkMiner/PcapOverIP/ReceivePcapOverTcpForm.cs
++++ b/NetworkMiner/PcapOverIP/ReceivePcapOverTcpForm.cs
+@@ -162,7 +162,7 @@ namespace NetworkMiner.PcapOverIP {
+             DateTime lastFrameTimestamp = DateTime.MinValue;

+ 

+             string filename = Tools.GenerateCaptureFileName(DateTime.Now);

+-            string fileFullPath = this.packetHandler.OutputDirectory + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

++            string fileFullPath = SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

+             //string fileFullPath = System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(System.Windows.Forms.Application.ExecutablePath)) + System.IO.Path.DirectorySeparatorChar + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

+ 

+             PcapFileWriter pcapFileWriter = new PcapFileWriter(fileFullPath, this.pcapStreamReader.FileDataLinkType[0]);

+diff --git a/PacketParser/FileTransfer/FileStreamAssemblerList.cs b/PacketParser/FileTransfer/FileStreamAssemblerList.cs
+index 4a6a4dd..129d48b 100644
+--- a/PacketParser/FileTransfer/FileStreamAssemblerList.cs
++++ b/PacketParser/FileTransfer/FileStreamAssemblerList.cs
+@@ -191,7 +191,7 @@ namespace PacketParser.FileTransfer {
+             if (removeExtractedFilesFromDisk) {

+                 //remove all files

+                 foreach (string subDirectory in System.IO.Directory.GetDirectories(this.FileOutputDirectory)) {

+-                    if (subDirectory == this.FileOutputDirectory + System.IO.Path.DirectorySeparatorChar + "cache") {

++                    if (subDirectory == SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + "cache") {

+                         foreach (string cacheFile in System.IO.Directory.GetFiles(subDirectory))

+                             try {

+                                 System.IO.File.Delete(cacheFile);

+diff --git a/PacketParser/PacketHandler.cs b/PacketParser/PacketHandler.cs
+index a600200..cb78071 100644
+--- a/PacketParser/PacketHandler.cs
++++ b/PacketParser/PacketHandler.cs
+@@ -1,4 +1,4 @@
+-//  Copyright: Erik Hjelmvik, NETRESEC

++//  Copyright: Erik Hjelmvik, NETRESEC

+ //

+ //  NetworkMiner is free software; you can redistribute it and/or modify it

+ //  under the terms of the GNU General Public License

+@@ -228,7 +228,7 @@ namespace PacketParser {
+             //this.networkTcpSessionDictionary=new Dictionary<int, NetworkTcpSession>();

+             this.networkTcpSessionList=new PopularityList<int, NetworkTcpSession>(200);

+             this.networkTcpSessionList.PopularityLost+=new PopularityList<int, NetworkTcpSession>.PopularityLostEventHandler(networkTcpSessionList_PopularityLost);

+-            this.FileStreamAssemblerList = new FileTransfer.FileStreamAssemblerList(this, 100, this.OutputDirectory + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar);

++            this.FileStreamAssemblerList = new FileTransfer.FileStreamAssemblerList(this, 100, SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar);

+             this.FileStreamAssemblerList.PopularityLost += this.FileStreamAssemblerList_PopularityLost;

+             this.ReconstructedFileList=new List<FileTransfer.ReconstructedFile>();

+             this.credentialList=new SortedList<string, NetworkCredential>();

+@@ -874,7 +874,7 @@ namespace PacketParser {
+ 

+                     //check the frame content for keywords

+                     foreach (byte[] keyword in this.keywordList) {

+-                        //jAG SLUTADE HÄR. FUNKAR EJ VID RELOAD

++                        //jAG SLUTADE H�R. FUNKAR EJ VID RELOAD

+                         int keyIndex = receivedFrame.IndexOf(keyword);

+                         if (keyIndex >= 0) {

+                             if (networkPacket != null)

+diff --git a/SharedUtils/XdgDirectories.cs b/SharedUtils/XdgDirectories.cs
+new file mode 100644
+index 0000000..80c09e3
+--- /dev/null
++++ b/SharedUtils/XdgDirectories.cs
+@@ -0,0 +1,15 @@
++using System;

++using System.IO;

++

++namespace SharedUtils {

++    public class XdgDirectories {

++        public static string GetOrCreateXdgDataHome() {

++            string home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

++            string data = Environment.GetEnvironmentVariable("XDG_DATA_HOME") ?? home + System.IO.Path.DirectorySeparatorChar + ".local" + System.IO.Path.DirectorySeparatorChar + "share";

++            string dir = data + System.IO.Path.DirectorySeparatorChar + "NetworkMiner";

++            // Directory.CreateDirectory(dir);

++            return dir;

++        }

++

++    }

++}

diff --git a/nixpkgs/pkgs/tools/security/nitrokey-app/default.nix b/nixpkgs/pkgs/tools/security/nitrokey-app/default.nix
new file mode 100644
index 000000000000..8e654900e172
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nitrokey-app/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, cmake
+, fetchFromGitHub
+, pkg-config
+, wrapQtAppsHook
+, libnitrokey
+, cppcodec
+, qttools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nitrokey-app";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "Nitrokey";
+    repo = "nitrokey-app";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-c6EC5uuMna07xVHDRFq0UDwuSeopZTmZGZ9ZD5zaq8Y=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapQtAppsHook
+    qttools
+  ];
+
+  cmakeFlags = [
+    "-DADD_GIT_INFO=OFF"
+    "-DBASH_COMPLETION_PATH=share/bash-completion/completions"
+  ];
+
+  buildInputs = [
+    libnitrokey
+    cppcodec
+  ];
+
+  meta = with lib; {
+    description = "Provides extra functionality for the Nitrokey Pro and Storage";
+    longDescription = ''
+      The nitrokey-app provides a QT system tray widget with which you can
+      access the extra functionality of a Nitrokey Storage or Nitrokey Pro.
+      See https://www.nitrokey.com/ for more information.
+    '';
+    homepage = "https://github.com/Nitrokey/nitrokey-app";
+    changelog = "https://github.com/Nitrokey/nitrokey-app/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kaiha panicgh ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nitrokey-app2/default.nix b/nixpkgs/pkgs/tools/security/nitrokey-app2/default.nix
new file mode 100644
index 000000000000..d56e882cb09e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nitrokey-app2/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, pythonOlder
+, pyside6
+, poetry-core
+, pynitrokey
+, pyudev
+, qt-material
+}:
+
+buildPythonApplication rec {
+  pname = "nitrokey-app2";
+  version = "2.1.5";
+  pyproject = true;
+
+  disabled = pythonOlder "3.9";
+
+  src = fetchFromGitHub {
+    owner = "Nitrokey";
+    repo = "nitrokey-app2";
+    rev = "v${version}";
+    hash = "sha256-mR13zUgCdNS09EnpGLrnOnoIn3p6ZM/0fHKg0OUMWj4=";
+  };
+
+  # https://github.com/Nitrokey/nitrokey-app2/issues/152
+  #
+  # pythonRelaxDepsHook does not work here, because it runs in postBuild and
+  # only modifies the dependencies in the built distribution.
+  postPatch = ''
+    substituteInPlace pyproject.toml --replace 'pynitrokey = "' 'pynitrokey = ">='
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    pynitrokey
+    pyudev
+    pyside6
+    qt-material
+  ];
+
+  pythonImportsCheck = [
+    "nitrokeyapp"
+  ];
+
+  meta = with lib; {
+    description = "This application allows to manage Nitrokey 3 devices";
+    homepage = "https://github.com/Nitrokey/nitrokey-app2";
+    changelog = "https://github.com/Nitrokey/nitrokey-app2/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ _999eagle panicgh ];
+    mainProgram = "nitrokeyapp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nmap-formatter/default.nix b/nixpkgs/pkgs/tools/security/nmap-formatter/default.nix
new file mode 100644
index 000000000000..b78cb2e075d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nmap-formatter/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "nmap-formatter";
+  version = "2.1.6";
+
+  src = fetchFromGitHub {
+    owner = "vdjagilev";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-40ix4D/f63Q5cqVmBvpSmbK2KNXiYLdv/xXBNPJXfac=";
+  };
+
+  vendorHash = "sha256-OUhvQwC7EJF7CIM7NHCs0TqRTZHTiDupkfYREPaxpXo=";
+
+  meta = with lib; {
+    description = "Tool that allows you to convert nmap output";
+    homepage = "https://github.com/vdjagilev/nmap-formatter";
+    changelog = "https://github.com/vdjagilev/nmap-formatter/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nmap/default.nix b/nixpkgs/pkgs/tools/security/nmap/default.nix
new file mode 100644
index 000000000000..64dcd4f220bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nmap/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, libpcap, pkg-config, openssl, lua5_4
+, pcre, libssh2
+, withLua ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nmap";
+  version = "7.94";
+
+  src = fetchurl {
+    url = "https://nmap.org/dist/nmap-${version}.tar.bz2";
+    sha256 = "sha256-1xvhie7EPX4Jm6yFcVCdMWxFd8p5SRgyrD4SF7yPksw=";
+  };
+
+  prePatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace libz/configure \
+        --replace /usr/bin/libtool ar \
+        --replace 'AR="libtool"' 'AR="ar"' \
+        --replace 'ARFLAGS="-o"' 'ARFLAGS="-r"'
+  '';
+
+  configureFlags = [
+    (if withLua then "--with-liblua=${lua5_4}" else "--without-liblua")
+    "--with-liblinear=included"
+    "--without-ndiff"
+    "--without-zenmap"
+  ];
+
+  postInstall = ''
+    install -m 444 -D nselib/data/passwords.lst $out/share/wordlists/nmap.lst
+  '';
+
+  makeFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+    "AR=${stdenv.cc.bintools.targetPrefix}ar"
+    "RANLIB=${stdenv.cc.bintools.targetPrefix}ranlib"
+    "CC=${stdenv.cc.targetPrefix}gcc"
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pcre libssh2 libpcap openssl ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # fails 3 tests, probably needs the net
+
+  meta = with lib; {
+    description = "A free and open source utility for network discovery and security auditing";
+    homepage    = "http://www.nmap.org";
+    license     = licenses.gpl2;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nmap/qt.nix b/nixpkgs/pkgs/tools/security/nmap/qt.nix
new file mode 100644
index 000000000000..b4e406a0035b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nmap/qt.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wrapQtAppsHook
+, dnsutils
+, nmap
+, qtbase
+, qtscript
+, qtwebengine
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nmapsi4";
+  version = "0.5-alpha2";
+
+  src = fetchFromGitHub {
+    owner = "nmapsi4";
+    repo = "nmapsi4";
+    rev = "v${version}";
+    sha256 = "sha256-q3XfwJ4TGK4E58haN0Q0xRH4GDpKD8VZzyxHe/VwBqY=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
+
+  buildInputs = [ qtbase qtscript qtwebengine ];
+
+  postPatch = ''
+    substituteInPlace src/platform/digmanager.cpp \
+      --replace '"dig"' '"${dnsutils}/bin/dig"'
+    substituteInPlace src/platform/discover.cpp \
+        --replace '"nping"' '"${nmap}/bin/nping"'
+    for f in \
+      src/platform/monitor/monitor.cpp \
+      src/platform/nsemanager.cpp ; do
+
+      substituteInPlace $f \
+        --replace '"nmap"'  '"${nmap}/bin/nmap"'
+    done
+  '';
+
+  postInstall = ''
+    mv $out/share/applications/kde4/*.desktop $out/share/applications
+    rmdir $out/share/applications/kde4
+
+    for f in $out/share/applications/* ; do
+      substituteInPlace $f \
+        --replace Qt4                   Qt5 \
+        --replace Exec=nmapsi4          Exec=$out/bin/nmapsi4 \
+        --replace "Exec=kdesu nmapsi4" "Exec=kdesu $out/bin/nmapsi4"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Qt frontend for nmap";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/noseyparker/default.nix b/nixpkgs/pkgs/tools/security/noseyparker/default.nix
new file mode 100644
index 000000000000..c6e4056d9fab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/noseyparker/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, pkg-config
+, openssl
+, hyperscan
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "noseyparker";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "praetorian-inc";
+    repo = "noseyparker";
+    rev = "v${version}";
+    hash = "sha256-qop6KjTFPQ5o1kPEVPP0AfDfr8w/JP3YmC+sb5OUbDY=";
+  };
+
+  cargoHash = "sha256-ZtoJO/R11qTFYAE6G7AVCpnYZ3JGrxtVSXvCm0W8DAA=";
+
+  postPatch = ''
+    # disabledTests (network, failing)
+    rm tests/test_noseyparker_github.rs
+    rm tests/test_noseyparker_scan.rs
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+  buildInputs = [
+    openssl
+    hyperscan
+  ];
+
+  OPENSSL_NO_VENDOR = 1;
+
+  meta = with lib; {
+    description = "Find secrets and sensitive information in textual data";
+    homepage = "https://github.com/praetorian-inc/noseyparker";
+    changelog = "https://github.com/praetorian-inc/noseyparker/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ _0x4A6F ];
+    # limited by hyperscan
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nosqli/default.nix b/nixpkgs/pkgs/tools/security/nosqli/default.nix
new file mode 100644
index 000000000000..47095902cea6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nosqli/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "nosqli";
+  version = "0.5.4";
+
+  src = fetchFromGitHub {
+    owner = "Charlie-belmer";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-CgD9b5eHDK/8QhQmrqT09Jf9snn9WItNMtTNbJFT2sI=";
+  };
+
+  vendorHash = "sha256-QnrzEei4Pt4C0vCJu4YN28lWWAqEikmNLrqshd3knx4=";
+
+  meta = with lib; {
+    description = "NoSql Injection tool for finding vulnerable websites using MongoDB";
+    homepage = "https://github.com/Charlie-belmer/nosqli";
+    license = with licenses; [ agpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/notary/default.nix b/nixpkgs/pkgs/tools/security/notary/default.nix
new file mode 100644
index 000000000000..ab6ec0b16818
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/notary/default.nix
@@ -0,0 +1,65 @@
+{ lib, fetchFromGitHub, buildGoPackage, libtool }:
+
+buildGoPackage rec {
+  pname = "notary";
+  version = "0.6.1";
+  gitcommit = "d6e1431f";
+
+  src = fetchFromGitHub {
+    owner = "theupdateframework";
+    repo = "notary";
+    rev = "v${version}";
+    sha256 = "1ak9dk6vjny5069hp3w36dbjawcnaq82l3i2qvf7mn7zfglbsnf9";
+  };
+
+  patches = [ ./no-git-usage.patch ];
+
+  buildInputs = [ libtool ];
+  buildPhase = ''
+    runHook preBuild
+    cd go/src/github.com/theupdateframework/notary
+    SKIPENVCHECK=1 make client GITCOMMIT=${gitcommit}
+    runHook postBuild
+  '';
+
+  goPackagePath = "github.com/theupdateframework/notary";
+
+  installPhase = ''
+    runHook preInstall
+    install -D bin/notary $out/bin/notary
+    runHook postInstall
+  '';
+
+  #doCheck = true; # broken by tzdata: 2018g -> 2019a
+  checkPhase = ''
+    make test PKGS=github.com/theupdateframework/notary/cmd/notary
+  '';
+
+  meta = with lib; {
+    description = "A project that allows anyone to have trust over arbitrary collections of data";
+    longDescription = ''
+      The Notary project comprises a server and a client for running and
+      interacting with trusted collections. See the service architecture
+      documentation for more information.
+
+      Notary aims to make the internet more secure by making it easy for people
+      to publish and verify content. We often rely on TLS to secure our
+      communications with a web server which is inherently flawed, as any
+      compromise of the server enables malicious content to be substituted for
+      the legitimate content.
+
+      With Notary, publishers can sign their content offline using keys kept
+      highly secure. Once the publisher is ready to make the content available,
+      they can push their signed trusted collection to a Notary Server.
+
+      Consumers, having acquired the publisher's public key through a secure
+      channel, can then communicate with any notary server or (insecure) mirror,
+      relying only on the publisher's key to determine the validity and
+      integrity of the received content.
+    '';
+    license = licenses.asl20;
+    homepage = "https://github.com/theupdateframework/notary";
+    maintainers = with maintainers; [ vdemeester ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/notary/no-git-usage.patch b/nixpkgs/pkgs/tools/security/notary/no-git-usage.patch
new file mode 100644
index 000000000000..363eefe36921
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/notary/no-git-usage.patch
@@ -0,0 +1,15 @@
+diff --git a/Makefile b/Makefile
+index ab794165..0cbd047f 100644
+--- a/Makefile
++++ b/Makefile
+@@ -5,8 +5,8 @@ PREFIX?=$(shell pwd)
+ # Add to compile time flags
+ NOTARY_PKG := github.com/theupdateframework/notary
+ NOTARY_VERSION := $(shell cat NOTARY_VERSION)
+-GITCOMMIT := $(shell git rev-parse --short HEAD)
+-GITUNTRACKEDCHANGES := $(shell git status --porcelain --untracked-files=no)
++GITCOMMIT ?= $(shell git rev-parse --short HEAD)
++GITUNTRACKEDCHANGES :=
+ ifneq ($(GITUNTRACKEDCHANGES),)
+ GITCOMMIT := $(GITCOMMIT)-dirty
+ endif
diff --git a/nixpkgs/pkgs/tools/security/notation/default.nix b/nixpkgs/pkgs/tools/security/notation/default.nix
new file mode 100644
index 000000000000..07c9ef499717
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/notation/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, notation }:
+
+buildGoModule rec {
+  pname = "notation";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "notaryproject";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-MJBFdtx+HkPCN1SIohKOy33BW746GNN2fWkr7TIuBmk=";
+  };
+
+  vendorHash = "sha256-USkufc1dG4eyRfRJHSX4mVZHnvOc5onHenF98Aedac4=";
+
+  # This is a Go sub-module and cannot be built directly (e2e tests).
+  excludedPackages = [ "./test" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/notaryproject/notation/internal/version.Version=${version}"
+    "-X github.com/notaryproject/notation/internal/version.BuildMetadata="
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = notation;
+    command = "notation version";
+  };
+
+  meta = with lib; {
+    description = "CLI tool to sign and verify OCI artifacts and container images";
+    homepage = "https://notaryproject.dev/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aaronjheng ];
+    mainProgram = "notation";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nsjail/default.nix b/nixpkgs/pkgs/tools/security/nsjail/default.nix
new file mode 100644
index 000000000000..23b938a83f9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nsjail/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, bison, flex, libtool, pkg-config, which
+, libnl, protobuf, protobufc, shadow, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nsjail";
+  version = "3.4";
+
+  src = fetchFromGitHub {
+    owner           = "google";
+    repo            = "nsjail";
+    rev             = version;
+    fetchSubmodules = true;
+    hash            = "sha256-/K+qJV5Dq+my45Cpw6czdsWLtO9lnJwZTsOIRt4Iijk=";
+  };
+
+  nativeBuildInputs = [ autoconf bison flex installShellFiles libtool pkg-config which ];
+  buildInputs = [ libnl protobuf protobufc ];
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-Wno-error" ];
+
+  preBuild = ''
+    makeFlagsArray+=(USER_DEFINES='-DNEWUIDMAP_PATH=${shadow}/bin/newuidmap -DNEWGIDMAP_PATH=${shadow}/bin/newgidmap')
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 nsjail "$out/bin/nsjail"
+    installManPage nsjail.1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A light-weight process isolation tool, making use of Linux namespaces and seccomp-bpf syscall filters";
+    homepage    = "https://nsjail.dev/";
+    changelog   = "https://github.com/google/nsjail/releases/tag/${version}";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ arturcygan bosu c0bw3b ];
+    platforms   = platforms.linux;
+    mainProgram = "nsjail";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ntlmrecon/default.nix b/nixpkgs/pkgs/tools/security/ntlmrecon/default.nix
new file mode 100644
index 000000000000..648e2d585e09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ntlmrecon/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ntlmrecon";
+  version = "0.4";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "pwnfoo";
+    repo = "NTLMRecon";
+    rev = "refs/tags/v-${version}";
+    sha256 = "0rrx49li2l9xlcax84qxjf60nbzp3fgq77c36yqmsp0pc9i89ah6";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    iptools
+    requests
+    termcolor
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "ntlmrecon"
+  ];
+
+  meta = with lib; {
+    description = "Information enumerator for NTLM authentication enabled web endpoints";
+    homepage = "https://github.com/pwnfoo/NTLMRecon";
+    changelog = "https://github.com/pwnfoo/NTLMRecon/releases/tag/v-${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nuclei/default.nix b/nixpkgs/pkgs/tools/security/nuclei/default.nix
new file mode 100644
index 000000000000..1fb47c7762cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nuclei/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "nuclei";
+  version = "3.1.10";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "nuclei";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-11ORN9h2VsXJKZw5HUljq6Tk0XC81tC7sCPbFgcTd+k=";
+  };
+
+  vendorHash = "sha256-0ERUvPUAxj0H62YcRvsfYX8h0Hp/mA6NdE8E/BjPGzw=";
+
+  subPackages = [
+    "cmd/nuclei/"
+  ];
+
+  ldflags = [
+    "-w"
+    "-s"
+  ];
+
+  # Test files are not part of the release tarball
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for configurable targeted scanning";
+    longDescription = ''
+      Nuclei is used to send requests across targets based on a template
+      leading to zero false positives and providing effective scanning
+      for known paths. Main use cases for nuclei are during initial
+      reconnaissance phase to quickly check for low hanging fruits or
+      CVEs across targets that are known and easily detectable.
+    '';
+    homepage = "https://github.com/projectdiscovery/nuclei";
+    changelog = "https://github.com/projectdiscovery/nuclei/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab Misaka13514 ];
+    mainProgram = "nuclei";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nwipe/default.nix b/nixpkgs/pkgs/tools/security/nwipe/default.nix
new file mode 100644
index 000000000000..35ca1f9b4125
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nwipe/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, autoreconfHook
+, fetchFromGitHub
+, ncurses
+, parted
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nwipe";
+  version = "0.34";
+
+  src = fetchFromGitHub {
+    owner = "martijnvanbrummelen";
+    repo = "nwipe";
+    rev = "v${version}";
+    sha256 = "sha256-7WI8AwWkg9rOjAbOyDgCVOpeMxvJ5Bd1yvzfSv6TPLs=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    ncurses
+    parted
+  ];
+
+  preConfigure = ''
+    sh init.sh || :
+  '';
+
+  meta = with lib; {
+    description = "Securely erase disks";
+    homepage = "https://github.com/martijnvanbrummelen/nwipe";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ woffs ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/oath-toolkit/default.nix b/nixpkgs/pkgs/tools/security/oath-toolkit/default.nix
new file mode 100644
index 000000000000..1e5b418c3f46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/oath-toolkit/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, nix-update-script, pam, xmlsec }:
+
+let
+  # TODO: Switch to OpenPAM once https://gitlab.com/oath-toolkit/oath-toolkit/-/issues/26 is addressed upstream
+  securityDependency =
+    if stdenv.isDarwin then xmlsec
+    else pam;
+
+in stdenv.mkDerivation rec {
+  pname = "oath-toolkit";
+  version = "2.6.11";
+
+  src = fetchurl {
+    url = "mirror://savannah/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-/FEqSltG9MQ6sFhsMYn+zk1U9+ZJOX1voeI0KEMeLLQ=";
+  };
+
+  buildInputs = [ securityDependency ];
+
+  configureFlags = lib.optionals stdenv.isDarwin [ "--disable-pam" ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Components for building one-time password authentication systems";
+    homepage = "https://www.nongnu.org/oath-toolkit/";
+    maintainers = with maintainers; [ schnusch ];
+    platforms = with platforms; linux ++ darwin;
+    mainProgram = "oathtool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/oauth2c/default.nix b/nixpkgs/pkgs/tools/security/oauth2c/default.nix
new file mode 100644
index 000000000000..2cc9a05e3d15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/oauth2c/default.nix
@@ -0,0 +1,34 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "oauth2c";
+  version = "1.13.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudentity";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-NNVHEV8qnPv+xXFzPsh1V+fSOQZxpADCRPIUsak5M5M=";
+  };
+
+  vendorHash = "sha256-x6cb19rKJXm+EIxJeykhpFmUYOPb/VljzCOVjorP5MQ=";
+
+  doCheck = false; # tests want to talk to oauth2c.us.authz.cloudentity.io
+
+  meta = with lib; {
+    homepage = "https://github.com/cloudentity/oauth2c";
+    description = "User-friendly OAuth2 CLI";
+    longDescription = ''
+      oauth2c is a command-line tool for interacting with OAuth 2.0
+      authorization servers. Its goal is to make it easy to fetch access tokens
+      using any grant type or client authentication method. It is compliant with
+      almost all basic and advanced OAuth 2.0, OIDC, OIDF FAPI and JWT profiles.
+    '';
+    license = licenses.asl20;
+    maintainers = [ maintainers.flokli ];
+    platforms = platforms.darwin ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/octosuite/default.nix b/nixpkgs/pkgs/tools/security/octosuite/default.nix
new file mode 100644
index 000000000000..88b29dce721c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/octosuite/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "octosuite";
+  version = "3.1.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "bellingcat";
+    repo = "octosuite";
+    rev = "refs/tags/${version}";
+    hash = "sha256-C73txVtyWTcIrJSApBy4uIKDcuUq0HZrGM6dqDVLkKY=";
+  };
+
+  postPatch = ''
+    # pyreadline3 is Windows-only
+    substituteInPlace setup.py \
+      --replace ', "pyreadline3"' ""
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    psutil
+    requests
+    rich
+  ];
+
+  pythonImportsCheck = [
+    "octosuite"
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Advanced Github OSINT framework";
+    homepage = "https://github.com/bellingcat/octosuite";
+    changelog = "https://github.com/bellingcat/octosuite/releases/tag/${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/offensive-azure/default.nix b/nixpkgs/pkgs/tools/security/offensive-azure/default.nix
new file mode 100644
index 000000000000..fb5dce6798dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/offensive-azure/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "offensive-azure";
+  version = "0.4.10";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "blacklanternsecurity";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-5JHix+/uGGhXM89VLimI81g4evci5ZUtNV1c1xopjuI=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    certifi
+    charset-normalizer
+    colorama
+    dnspython
+    idna
+    pycryptodome
+    python-whois
+    requests
+    requests
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    # Use default Python module
+    substituteInPlace pyproject.toml \
+      --replace 'uuid = "^1.30"' "" \
+      --replace 'python-whois = "^0.7.3"' 'python-whois = "*"'
+  '';
+
+  pythonImportsCheck = [
+    "offensive_azure"
+  ];
+
+  meta = with lib; {
+    description = "Collection of offensive tools targeting Microsoft Azure";
+    homepage = "https://github.com/blacklanternsecurity/offensive-azure";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/onesixtyone/default.nix b/nixpkgs/pkgs/tools/security/onesixtyone/default.nix
new file mode 100644
index 000000000000..1ff1b0266eaf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/onesixtyone/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "onesixtyone";
+  version = "unstable-2019-12-26";
+
+  src = fetchFromGitHub {
+    owner = "trailofbits";
+    repo = "onesixtyone";
+    rev = "9ce1dcdad73d45c8694086a4f90d7713be1cbdd7";
+    sha256 = "111nxn4pcbx6p9j8cjjxv1j1s7dgf7f4dix8acsmahwbpzinzkg3";
+  };
+
+  buildPhase = ''
+    $CC -o onesixtyone onesixtyone.c
+  '';
+
+  installPhase = ''
+    install -D onesixtyone $out/bin/onesixtyone
+  '';
+
+  meta = with lib; {
+    description = "Fast SNMP Scanner";
+    homepage = "https://github.com/trailofbits/onesixtyone";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.fishi0x01 ];
+    mainProgram = "onesixtyone";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/onioncircuits/default.nix b/nixpkgs/pkgs/tools/security/onioncircuits/default.nix
new file mode 100644
index 000000000000..c1468becc262
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/onioncircuits/default.nix
@@ -0,0 +1,58 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, fetchpatch
+, gobject-introspection
+, intltool
+, python3
+, wrapGAppsHook
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "onioncircuits";
+  version = "0.7";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.tails.boum.org";
+    owner = "tails";
+    repo = "onioncircuits";
+    rev = version;
+    sha256 = "sha256-O4tSbKBTmve4u8bXVg128RLyuxvTbU224JV8tQ+aDAQ=";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    intltool
+    wrapGAppsHook
+    python3.pkgs.distutils-extra
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pygobject3
+    stem
+  ];
+
+  patches = [
+    # Fix https://gitlab.tails.boum.org/tails/onioncircuits/-/merge_requests/4
+    (fetchpatch {
+      name = "fix-setuptool-package-discovery.patch";
+      url = "https://gitlab.tails.boum.org/tails/onioncircuits/-/commit/4c620c77f36f540fa27041fcbdeaf05c9f57826c.patch";
+      sha256 = "sha256-WXqyDa2meRMMHkHLO5Xl7x43KUGtlsai+eOVzUGUPpo=";
+    })
+  ];
+
+  postInstall = ''
+    mkdir -p $out/etc/apparmor.d
+
+    cp apparmor/usr.bin.onioncircuits $out/etc/apparmor.d
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://tails.boum.org";
+    description = "GTK application to display Tor circuits and streams";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ milran ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/onlykey-agent/default.nix b/nixpkgs/pkgs/tools/security/onlykey-agent/default.nix
new file mode 100644
index 000000000000..c88e1d2b064d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/onlykey-agent/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, python3Packages
+, fetchPypi
+, onlykey-cli
+}:
+
+let
+  bech32 = with python3Packages; buildPythonPackage rec {
+    pname = "bech32";
+    version = "1.2.0";
+
+    src = fetchPypi {
+      inherit pname version;
+      sha256 = "sha256-fW24IUYDvXhx/PpsCCbvaLhbCr2Q+iHChanF4h0r2Jk=";
+    };
+  };
+
+  # onlykey requires a patched version of libagent
+  lib-agent = with python3Packages; libagent.overridePythonAttrs (oa: rec{
+    version = "1.0.6";
+    src = fetchPypi {
+      inherit version;
+      pname = "lib-agent";
+      sha256 = "sha256-IrJizIHDIPHo4tVduUat7u31zHo3Nt8gcMOyUUqkNu0=";
+    };
+    propagatedBuildInputs = oa.propagatedBuildInputs or [ ] ++ [
+      bech32
+      cryptography
+      docutils
+      pycryptodome
+      pynacl
+      wheel
+    ];
+
+    # turn off testing because I can't get it to work
+    doCheck = false;
+    pythonImportsCheck = [ "libagent" ];
+
+    meta = oa.meta // {
+      description = "Using OnlyKey as hardware SSH and GPG agent";
+      homepage = "https://github.com/trustcrypto/onlykey-agent/tree/ledger";
+      maintainers = with lib.maintainers; [ kalbasit ];
+    };
+  });
+in
+python3Packages.buildPythonApplication rec {
+  pname = "onlykey-agent";
+  version = "1.1.15";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-SbGb7CjcD7cFPvASZtip56B4uxRiFKZBvbsf6sb8fds=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ lib-agent onlykey-cli ];
+
+  # move the python library into the sitePackages.
+  postInstall = ''
+    mkdir $out/${python3Packages.python.sitePackages}/onlykey_agent
+    mv $out/bin/onlykey_agent.py $out/${python3Packages.python.sitePackages}/onlykey_agent/__init__.py
+    chmod a-x $out/${python3Packages.python.sitePackages}/onlykey_agent/__init__.py
+  '';
+
+  # no tests
+  doCheck = false;
+  pythonImportsCheck = [ "onlykey_agent" ];
+
+  meta = with lib; {
+    description = "Middleware that lets you use OnlyKey as a hardware SSH/GPG device";
+    homepage = "https://github.com/trustcrypto/onlykey-agent";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/onlykey-cli/default.nix b/nixpkgs/pkgs/tools/security/onlykey-cli/default.nix
new file mode 100644
index 000000000000..4d0b0a267a38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/onlykey-cli/default.nix
@@ -0,0 +1,34 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "onlykey-cli";
+  version = "1.2.10";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "onlykey";
+    sha256 = "sha256-ZmQnyZx9YlIIxMMdZ0U2zb+QANfcwrtG7iR1LpgzmBQ=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    aenum
+    cython
+    ecdsa
+    hidapi
+    onlykey-solo-python
+    prompt-toolkit
+    pynacl
+    six
+  ];
+
+  # Requires having the physical onlykey (a usb security key)
+  doCheck = false;
+  pythonImportsCheck = [ "onlykey.client" ];
+
+  meta = with lib; {
+    description = "OnlyKey client and command-line tool";
+    homepage = "https://github.com/trustcrypto/python-onlykey";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ranfdev ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/onlykey/default.nix b/nixpkgs/pkgs/tools/security/onlykey/default.nix
new file mode 100644
index 000000000000..c63173d889b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/onlykey/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, node_webkit
+, pkgs
+, copyDesktopItems
+, makeDesktopItem
+, stdenv
+, writeShellScript
+, wrapGAppsHook
+}:
+
+let
+  # parse the version from package.json
+  version =
+    let
+      packageJson = lib.importJSON ./package.json;
+      splits = builtins.split "^.*#v(.*)$" (builtins.getAttr "onlykey" (builtins.head packageJson));
+      matches = builtins.elemAt splits 1;
+      elem = builtins.head matches;
+    in
+    elem;
+
+  # this must be updated anytime this package is updated.
+  onlykeyPkg = "onlykey-git+https://github.com/trustcrypto/OnlyKey-App.git#v${version}";
+
+  # define a shortcut to get to onlykey.
+  onlykey = self."${onlykeyPkg}";
+
+  super = import ./onlykey.nix {
+    inherit pkgs;
+    inherit (stdenv.hostPlatform) system;
+  };
+
+  self = super // {
+    "${onlykeyPkg}" = super."${onlykeyPkg}".override (attrs: {
+      # when installing packages, nw tries to download nwjs in its postInstall
+      # script. There are currently no other postInstall scripts, so this
+      # should not break other things.
+      npmFlags = attrs.npmFlags or "" + " --ignore-scripts";
+
+      # this package requires to be built in order to become runnable.
+      postInstall = ''
+        cd $out/lib/node_modules/${attrs.packageName}
+        npm run build
+      '';
+    });
+  };
+
+  script = writeShellScript "${onlykey.packageName}-starter-${onlykey.version}" ''
+    ${node_webkit}/bin/nw ${onlykey}/lib/node_modules/${onlykey.packageName}/build
+  '';
+in
+stdenv.mkDerivation {
+  pname = "${onlykey.packageName}";
+  inherit (onlykey) version;
+  dontUnpack = true;
+  nativeBuildInputs = [ wrapGAppsHook copyDesktopItems ];
+  desktopItems = [
+    (makeDesktopItem {
+      name = onlykey.packageName;
+      exec = script;
+      icon = "${onlykey}/lib/node_modules/${onlykey.packageName}/resources/onlykey_logo_128.png";
+      desktopName = onlykey.packageName;
+      genericName = onlykey.packageName;
+    })
+  ];
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    ln -s ${script} $out/bin/onlykey
+
+    runHook postInstall
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/security/onlykey/generate.sh b/nixpkgs/pkgs/tools/security/onlykey/generate.sh
new file mode 100755
index 000000000000..b6afb497463e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/onlykey/generate.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p nodePackages.node2nix
+
+# XXX: --development is given here because we need access to gulp in order to build OnlyKey.
+exec node2nix --nodejs-18 --development -i package.json -c onlykey.nix -e ../../../development/node-packages/node-env.nix --no-copy-node-env
diff --git a/nixpkgs/pkgs/tools/security/onlykey/node-packages.nix b/nixpkgs/pkgs/tools/security/onlykey/node-packages.nix
new file mode 100644
index 000000000000..001ff6916708
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/onlykey/node-packages.nix
@@ -0,0 +1,6710 @@
+# This file has been generated by node2nix 1.11.1. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "@eslint-community/eslint-utils-4.4.0" = {
+      name = "_at_eslint-community_slash_eslint-utils";
+      packageName = "@eslint-community/eslint-utils";
+      version = "4.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz";
+        sha512 = "1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==";
+      };
+    };
+    "@eslint-community/regexpp-4.5.1" = {
+      name = "_at_eslint-community_slash_regexpp";
+      packageName = "@eslint-community/regexpp";
+      version = "4.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz";
+        sha512 = "Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==";
+      };
+    };
+    "@eslint/eslintrc-2.0.3" = {
+      name = "_at_eslint_slash_eslintrc";
+      packageName = "@eslint/eslintrc";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz";
+        sha512 = "+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==";
+      };
+    };
+    "@eslint/js-8.42.0" = {
+      name = "_at_eslint_slash_js";
+      packageName = "@eslint/js";
+      version = "8.42.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz";
+        sha512 = "6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==";
+      };
+    };
+    "@gulp-sourcemaps/identity-map-2.0.1" = {
+      name = "_at_gulp-sourcemaps_slash_identity-map";
+      packageName = "@gulp-sourcemaps/identity-map";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz";
+        sha512 = "Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==";
+      };
+    };
+    "@gulp-sourcemaps/map-sources-1.0.0" = {
+      name = "_at_gulp-sourcemaps_slash_map-sources";
+      packageName = "@gulp-sourcemaps/map-sources";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz";
+        sha512 = "o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==";
+      };
+    };
+    "@humanwhocodes/config-array-0.11.10" = {
+      name = "_at_humanwhocodes_slash_config-array";
+      packageName = "@humanwhocodes/config-array";
+      version = "0.11.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz";
+        sha512 = "KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==";
+      };
+    };
+    "@humanwhocodes/module-importer-1.0.1" = {
+      name = "_at_humanwhocodes_slash_module-importer";
+      packageName = "@humanwhocodes/module-importer";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz";
+        sha512 = "bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==";
+      };
+    };
+    "@humanwhocodes/object-schema-1.2.1" = {
+      name = "_at_humanwhocodes_slash_object-schema";
+      packageName = "@humanwhocodes/object-schema";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz";
+        sha512 = "ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==";
+      };
+    };
+    "@nodelib/fs.scandir-2.1.5" = {
+      name = "_at_nodelib_slash_fs.scandir";
+      packageName = "@nodelib/fs.scandir";
+      version = "2.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz";
+        sha512 = "vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==";
+      };
+    };
+    "@nodelib/fs.stat-2.0.5" = {
+      name = "_at_nodelib_slash_fs.stat";
+      packageName = "@nodelib/fs.stat";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz";
+        sha512 = "RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==";
+      };
+    };
+    "@nodelib/fs.walk-1.2.8" = {
+      name = "_at_nodelib_slash_fs.walk";
+      packageName = "@nodelib/fs.walk";
+      version = "1.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz";
+        sha512 = "oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==";
+      };
+    };
+    "abbrev-1.1.1" = {
+      name = "abbrev";
+      packageName = "abbrev";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
+        sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
+      };
+    };
+    "acorn-6.4.2" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "6.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz";
+        sha512 = "XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==";
+      };
+    };
+    "acorn-8.8.2" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "8.8.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz";
+        sha512 = "xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==";
+      };
+    };
+    "acorn-jsx-5.3.2" = {
+      name = "acorn-jsx";
+      packageName = "acorn-jsx";
+      version = "5.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz";
+        sha512 = "rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==";
+      };
+    };
+    "ajv-6.12.6" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "6.12.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";
+        sha512 = "j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==";
+      };
+    };
+    "ansi-colors-1.1.0" = {
+      name = "ansi-colors";
+      packageName = "ansi-colors";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz";
+        sha512 = "SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==";
+      };
+    };
+    "ansi-colors-4.1.1" = {
+      name = "ansi-colors";
+      packageName = "ansi-colors";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz";
+        sha512 = "JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==";
+      };
+    };
+    "ansi-gray-0.1.1" = {
+      name = "ansi-gray";
+      packageName = "ansi-gray";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz";
+        sha512 = "HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==";
+      };
+    };
+    "ansi-regex-2.1.1" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
+        sha512 = "TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==";
+      };
+    };
+    "ansi-regex-5.0.1" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz";
+        sha512 = "quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==";
+      };
+    };
+    "ansi-styles-2.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
+        sha512 = "kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==";
+      };
+    };
+    "ansi-styles-4.3.0" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz";
+        sha512 = "zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==";
+      };
+    };
+    "ansi-wrap-0.1.0" = {
+      name = "ansi-wrap";
+      packageName = "ansi-wrap";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz";
+        sha512 = "ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==";
+      };
+    };
+    "anymatch-1.3.2" = {
+      name = "anymatch";
+      packageName = "anymatch";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz";
+        sha512 = "0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==";
+      };
+    };
+    "anymatch-2.0.0" = {
+      name = "anymatch";
+      packageName = "anymatch";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz";
+        sha512 = "5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==";
+      };
+    };
+    "anymatch-3.1.3" = {
+      name = "anymatch";
+      packageName = "anymatch";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz";
+        sha512 = "KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==";
+      };
+    };
+    "append-buffer-1.0.2" = {
+      name = "append-buffer";
+      packageName = "append-buffer";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz";
+        sha512 = "WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==";
+      };
+    };
+    "applescript-1.0.0" = {
+      name = "applescript";
+      packageName = "applescript";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/applescript/-/applescript-1.0.0.tgz";
+        sha512 = "yvtNHdWvtbYEiIazXAdp/NY+BBb65/DAseqlNiJQjOx9DynuzOYDbVLBJvuc0ve0VL9x6B3OHF6eH52y9hCBtQ==";
+      };
+    };
+    "archy-1.0.0" = {
+      name = "archy";
+      packageName = "archy";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz";
+        sha512 = "Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==";
+      };
+    };
+    "argparse-2.0.1" = {
+      name = "argparse";
+      packageName = "argparse";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz";
+        sha512 = "8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==";
+      };
+    };
+    "arr-diff-2.0.0" = {
+      name = "arr-diff";
+      packageName = "arr-diff";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz";
+        sha512 = "dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==";
+      };
+    };
+    "arr-diff-4.0.0" = {
+      name = "arr-diff";
+      packageName = "arr-diff";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz";
+        sha512 = "YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==";
+      };
+    };
+    "arr-filter-1.1.2" = {
+      name = "arr-filter";
+      packageName = "arr-filter";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz";
+        sha512 = "A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==";
+      };
+    };
+    "arr-flatten-1.1.0" = {
+      name = "arr-flatten";
+      packageName = "arr-flatten";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz";
+        sha512 = "L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==";
+      };
+    };
+    "arr-map-2.0.2" = {
+      name = "arr-map";
+      packageName = "arr-map";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz";
+        sha512 = "tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==";
+      };
+    };
+    "arr-union-3.1.0" = {
+      name = "arr-union";
+      packageName = "arr-union";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz";
+        sha512 = "sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==";
+      };
+    };
+    "array-each-1.0.1" = {
+      name = "array-each";
+      packageName = "array-each";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz";
+        sha512 = "zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==";
+      };
+    };
+    "array-initial-1.1.0" = {
+      name = "array-initial";
+      packageName = "array-initial";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz";
+        sha512 = "BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==";
+      };
+    };
+    "array-last-1.3.0" = {
+      name = "array-last";
+      packageName = "array-last";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz";
+        sha512 = "eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==";
+      };
+    };
+    "array-slice-1.1.0" = {
+      name = "array-slice";
+      packageName = "array-slice";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz";
+        sha512 = "B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==";
+      };
+    };
+    "array-sort-1.0.0" = {
+      name = "array-sort";
+      packageName = "array-sort";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz";
+        sha512 = "ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==";
+      };
+    };
+    "array-unique-0.2.1" = {
+      name = "array-unique";
+      packageName = "array-unique";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz";
+        sha512 = "G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==";
+      };
+    };
+    "array-unique-0.3.2" = {
+      name = "array-unique";
+      packageName = "array-unique";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz";
+        sha512 = "SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==";
+      };
+    };
+    "asn1-0.2.6" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz";
+        sha512 = "ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==";
+      };
+    };
+    "assert-plus-1.0.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha512 = "NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==";
+      };
+    };
+    "assertion-error-1.1.0" = {
+      name = "assertion-error";
+      packageName = "assertion-error";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz";
+        sha512 = "jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==";
+      };
+    };
+    "assign-symbols-1.0.0" = {
+      name = "assign-symbols";
+      packageName = "assign-symbols";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz";
+        sha512 = "Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==";
+      };
+    };
+    "async-done-1.3.2" = {
+      name = "async-done";
+      packageName = "async-done";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz";
+        sha512 = "uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==";
+      };
+    };
+    "async-each-1.0.6" = {
+      name = "async-each";
+      packageName = "async-each";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz";
+        sha512 = "c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==";
+      };
+    };
+    "async-settle-1.0.0" = {
+      name = "async-settle";
+      packageName = "async-settle";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz";
+        sha512 = "VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==";
+      };
+    };
+    "asynckit-0.4.0" = {
+      name = "asynckit";
+      packageName = "asynckit";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+        sha512 = "Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==";
+      };
+    };
+    "atob-2.1.2" = {
+      name = "atob";
+      packageName = "atob";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz";
+        sha512 = "Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==";
+      };
+    };
+    "auto-launch-5.0.6" = {
+      name = "auto-launch";
+      packageName = "auto-launch";
+      version = "5.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/auto-launch/-/auto-launch-5.0.6.tgz";
+        sha512 = "OgxiAm4q9EBf9EeXdPBiVNENaWE3jUZofwrhAkWjHDYGezu1k3FRZHU8V2FBxGuSJOHzKmTJEd0G7L7/0xDGFA==";
+      };
+    };
+    "aws-sign2-0.7.0" = {
+      name = "aws-sign2";
+      packageName = "aws-sign2";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
+        sha512 = "08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==";
+      };
+    };
+    "aws4-1.12.0" = {
+      name = "aws4";
+      packageName = "aws4";
+      version = "1.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz";
+        sha512 = "NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==";
+      };
+    };
+    "bach-1.2.0" = {
+      name = "bach";
+      packageName = "bach";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz";
+        sha512 = "bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==";
+      };
+    };
+    "balanced-match-1.0.2" = {
+      name = "balanced-match";
+      packageName = "balanced-match";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz";
+        sha512 = "3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==";
+      };
+    };
+    "base-0.11.2" = {
+      name = "base";
+      packageName = "base";
+      version = "0.11.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base/-/base-0.11.2.tgz";
+        sha512 = "5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==";
+      };
+    };
+    "base64-js-1.5.1" = {
+      name = "base64-js";
+      packageName = "base64-js";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz";
+        sha512 = "AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==";
+      };
+    };
+    "bcrypt-pbkdf-1.0.2" = {
+      name = "bcrypt-pbkdf";
+      packageName = "bcrypt-pbkdf";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+        sha512 = "qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==";
+      };
+    };
+    "binary-0.3.0" = {
+      name = "binary";
+      packageName = "binary";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz";
+        sha512 = "D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==";
+      };
+    };
+    "binary-extensions-1.13.1" = {
+      name = "binary-extensions";
+      packageName = "binary-extensions";
+      version = "1.13.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz";
+        sha512 = "Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==";
+      };
+    };
+    "binary-extensions-2.2.0" = {
+      name = "binary-extensions";
+      packageName = "binary-extensions";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz";
+        sha512 = "jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==";
+      };
+    };
+    "bindings-1.5.0" = {
+      name = "bindings";
+      packageName = "bindings";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz";
+        sha512 = "p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==";
+      };
+    };
+    "bl-1.2.3" = {
+      name = "bl";
+      packageName = "bl";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz";
+        sha512 = "pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==";
+      };
+    };
+    "brace-expansion-1.1.11" = {
+      name = "brace-expansion";
+      packageName = "brace-expansion";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
+      };
+    };
+    "brace-expansion-2.0.1" = {
+      name = "brace-expansion";
+      packageName = "brace-expansion";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz";
+        sha512 = "XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==";
+      };
+    };
+    "braces-1.8.5" = {
+      name = "braces";
+      packageName = "braces";
+      version = "1.8.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz";
+        sha512 = "xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==";
+      };
+    };
+    "braces-2.3.2" = {
+      name = "braces";
+      packageName = "braces";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz";
+        sha512 = "aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==";
+      };
+    };
+    "braces-3.0.2" = {
+      name = "braces";
+      packageName = "braces";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz";
+        sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==";
+      };
+    };
+    "browser-stdout-1.3.1" = {
+      name = "browser-stdout";
+      packageName = "browser-stdout";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz";
+        sha512 = "qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==";
+      };
+    };
+    "buffer-5.7.1" = {
+      name = "buffer";
+      packageName = "buffer";
+      version = "5.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz";
+        sha512 = "EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==";
+      };
+    };
+    "buffer-alloc-1.2.0" = {
+      name = "buffer-alloc";
+      packageName = "buffer-alloc";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz";
+        sha512 = "CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==";
+      };
+    };
+    "buffer-alloc-unsafe-1.1.0" = {
+      name = "buffer-alloc-unsafe";
+      packageName = "buffer-alloc-unsafe";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz";
+        sha512 = "TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==";
+      };
+    };
+    "buffer-crc32-0.2.13" = {
+      name = "buffer-crc32";
+      packageName = "buffer-crc32";
+      version = "0.2.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz";
+        sha512 = "VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==";
+      };
+    };
+    "buffer-equal-1.0.1" = {
+      name = "buffer-equal";
+      packageName = "buffer-equal";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz";
+        sha512 = "QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==";
+      };
+    };
+    "buffer-fill-1.0.0" = {
+      name = "buffer-fill";
+      packageName = "buffer-fill";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz";
+        sha512 = "T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==";
+      };
+    };
+    "buffer-from-1.1.2" = {
+      name = "buffer-from";
+      packageName = "buffer-from";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz";
+        sha512 = "E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==";
+      };
+    };
+    "buffers-0.1.1" = {
+      name = "buffers";
+      packageName = "buffers";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz";
+        sha512 = "9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==";
+      };
+    };
+    "bufferutil-4.0.7" = {
+      name = "bufferutil";
+      packageName = "bufferutil";
+      version = "4.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz";
+        sha512 = "kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==";
+      };
+    };
+    "cache-base-1.0.1" = {
+      name = "cache-base";
+      packageName = "cache-base";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz";
+        sha512 = "AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==";
+      };
+    };
+    "call-bind-1.0.2" = {
+      name = "call-bind";
+      packageName = "call-bind";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz";
+        sha512 = "7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==";
+      };
+    };
+    "callsites-3.1.0" = {
+      name = "callsites";
+      packageName = "callsites";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz";
+        sha512 = "P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==";
+      };
+    };
+    "camelcase-2.1.1" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz";
+        sha512 = "DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==";
+      };
+    };
+    "camelcase-3.0.0" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz";
+        sha512 = "4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==";
+      };
+    };
+    "camelcase-6.3.0" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "6.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz";
+        sha512 = "Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==";
+      };
+    };
+    "capture-stack-trace-1.0.2" = {
+      name = "capture-stack-trace";
+      packageName = "capture-stack-trace";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz";
+        sha512 = "X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==";
+      };
+    };
+    "caseless-0.12.0" = {
+      name = "caseless";
+      packageName = "caseless";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
+        sha512 = "4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==";
+      };
+    };
+    "caw-2.0.1" = {
+      name = "caw";
+      packageName = "caw";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz";
+        sha512 = "Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==";
+      };
+    };
+    "chai-4.3.7" = {
+      name = "chai";
+      packageName = "chai";
+      version = "4.3.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz";
+        sha512 = "HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==";
+      };
+    };
+    "chai-as-promised-7.1.1" = {
+      name = "chai-as-promised";
+      packageName = "chai-as-promised";
+      version = "7.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz";
+        sha512 = "azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==";
+      };
+    };
+    "chainsaw-0.1.0" = {
+      name = "chainsaw";
+      packageName = "chainsaw";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz";
+        sha512 = "75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==";
+      };
+    };
+    "chalk-1.1.3" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
+        sha512 = "U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==";
+      };
+    };
+    "chalk-4.1.2" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz";
+        sha512 = "oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==";
+      };
+    };
+    "check-error-1.0.2" = {
+      name = "check-error";
+      packageName = "check-error";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz";
+        sha512 = "BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==";
+      };
+    };
+    "chokidar-1.7.0" = {
+      name = "chokidar";
+      packageName = "chokidar";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz";
+        sha512 = "mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==";
+      };
+    };
+    "chokidar-2.1.8" = {
+      name = "chokidar";
+      packageName = "chokidar";
+      version = "2.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz";
+        sha512 = "ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==";
+      };
+    };
+    "chokidar-3.5.3" = {
+      name = "chokidar";
+      packageName = "chokidar";
+      version = "3.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz";
+        sha512 = "Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==";
+      };
+    };
+    "class-utils-0.3.6" = {
+      name = "class-utils";
+      packageName = "class-utils";
+      version = "0.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz";
+        sha512 = "qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==";
+      };
+    };
+    "cliui-3.2.0" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz";
+        sha512 = "0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==";
+      };
+    };
+    "cliui-7.0.4" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "7.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz";
+        sha512 = "OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==";
+      };
+    };
+    "cliui-8.0.1" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "8.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz";
+        sha512 = "BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==";
+      };
+    };
+    "clone-2.1.2" = {
+      name = "clone";
+      packageName = "clone";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz";
+        sha512 = "3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==";
+      };
+    };
+    "clone-buffer-1.0.0" = {
+      name = "clone-buffer";
+      packageName = "clone-buffer";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz";
+        sha512 = "KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==";
+      };
+    };
+    "clone-stats-1.0.0" = {
+      name = "clone-stats";
+      packageName = "clone-stats";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz";
+        sha512 = "au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==";
+      };
+    };
+    "cloneable-readable-1.1.3" = {
+      name = "cloneable-readable";
+      packageName = "cloneable-readable";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz";
+        sha512 = "2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==";
+      };
+    };
+    "code-point-at-1.1.0" = {
+      name = "code-point-at";
+      packageName = "code-point-at";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
+        sha512 = "RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==";
+      };
+    };
+    "collection-map-1.0.0" = {
+      name = "collection-map";
+      packageName = "collection-map";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz";
+        sha512 = "5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==";
+      };
+    };
+    "collection-visit-1.0.0" = {
+      name = "collection-visit";
+      packageName = "collection-visit";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz";
+        sha512 = "lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==";
+      };
+    };
+    "color-convert-2.0.1" = {
+      name = "color-convert";
+      packageName = "color-convert";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";
+        sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==";
+      };
+    };
+    "color-name-1.1.4" = {
+      name = "color-name";
+      packageName = "color-name";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz";
+        sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==";
+      };
+    };
+    "color-support-1.1.3" = {
+      name = "color-support";
+      packageName = "color-support";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz";
+        sha512 = "qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==";
+      };
+    };
+    "combined-stream-1.0.8" = {
+      name = "combined-stream";
+      packageName = "combined-stream";
+      version = "1.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
+        sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
+      };
+    };
+    "commander-2.20.3" = {
+      name = "commander";
+      packageName = "commander";
+      version = "2.20.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz";
+        sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==";
+      };
+    };
+    "component-emitter-1.3.0" = {
+      name = "component-emitter";
+      packageName = "component-emitter";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz";
+        sha512 = "Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==";
+      };
+    };
+    "concat-map-0.0.1" = {
+      name = "concat-map";
+      packageName = "concat-map";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+        sha512 = "/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==";
+      };
+    };
+    "concat-stream-1.6.2" = {
+      name = "concat-stream";
+      packageName = "concat-stream";
+      version = "1.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz";
+        sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==";
+      };
+    };
+    "config-chain-1.1.13" = {
+      name = "config-chain";
+      packageName = "config-chain";
+      version = "1.1.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz";
+        sha512 = "qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==";
+      };
+    };
+    "convert-source-map-1.9.0" = {
+      name = "convert-source-map";
+      packageName = "convert-source-map";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz";
+        sha512 = "ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==";
+      };
+    };
+    "copy-descriptor-0.1.1" = {
+      name = "copy-descriptor";
+      packageName = "copy-descriptor";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz";
+        sha512 = "XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==";
+      };
+    };
+    "copy-props-2.0.5" = {
+      name = "copy-props";
+      packageName = "copy-props";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz";
+        sha512 = "XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==";
+      };
+    };
+    "core-util-is-1.0.2" = {
+      name = "core-util-is";
+      packageName = "core-util-is";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha512 = "3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==";
+      };
+    };
+    "core-util-is-1.0.3" = {
+      name = "core-util-is";
+      packageName = "core-util-is";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz";
+        sha512 = "ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==";
+      };
+    };
+    "create-error-class-3.0.2" = {
+      name = "create-error-class";
+      packageName = "create-error-class";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz";
+        sha512 = "gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==";
+      };
+    };
+    "cross-spawn-7.0.3" = {
+      name = "cross-spawn";
+      packageName = "cross-spawn";
+      version = "7.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz";
+        sha512 = "iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==";
+      };
+    };
+    "css-3.0.0" = {
+      name = "css";
+      packageName = "css";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css/-/css-3.0.0.tgz";
+        sha512 = "DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==";
+      };
+    };
+    "d-1.0.1" = {
+      name = "d";
+      packageName = "d";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/d/-/d-1.0.1.tgz";
+        sha512 = "m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==";
+      };
+    };
+    "dashdash-1.14.1" = {
+      name = "dashdash";
+      packageName = "dashdash";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
+        sha512 = "jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==";
+      };
+    };
+    "debounce-1.2.1" = {
+      name = "debounce";
+      packageName = "debounce";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz";
+        sha512 = "XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==";
+      };
+    };
+    "debug-2.6.9" = {
+      name = "debug";
+      packageName = "debug";
+      version = "2.6.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
+        sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
+      };
+    };
+    "debug-3.2.7" = {
+      name = "debug";
+      packageName = "debug";
+      version = "3.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz";
+        sha512 = "CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==";
+      };
+    };
+    "debug-4.3.4" = {
+      name = "debug";
+      packageName = "debug";
+      version = "4.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz";
+        sha512 = "PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==";
+      };
+    };
+    "debug-fabulous-1.1.0" = {
+      name = "debug-fabulous";
+      packageName = "debug-fabulous";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz";
+        sha512 = "GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==";
+      };
+    };
+    "decamelize-1.2.0" = {
+      name = "decamelize";
+      packageName = "decamelize";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz";
+        sha512 = "z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==";
+      };
+    };
+    "decamelize-4.0.0" = {
+      name = "decamelize";
+      packageName = "decamelize";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz";
+        sha512 = "9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==";
+      };
+    };
+    "decode-uri-component-0.2.2" = {
+      name = "decode-uri-component";
+      packageName = "decode-uri-component";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz";
+        sha512 = "FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==";
+      };
+    };
+    "decompress-4.2.1" = {
+      name = "decompress";
+      packageName = "decompress";
+      version = "4.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz";
+        sha512 = "e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==";
+      };
+    };
+    "decompress-tar-4.1.1" = {
+      name = "decompress-tar";
+      packageName = "decompress-tar";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz";
+        sha512 = "JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==";
+      };
+    };
+    "decompress-tarbz2-4.1.1" = {
+      name = "decompress-tarbz2";
+      packageName = "decompress-tarbz2";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz";
+        sha512 = "s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==";
+      };
+    };
+    "decompress-targz-4.1.1" = {
+      name = "decompress-targz";
+      packageName = "decompress-targz";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz";
+        sha512 = "4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==";
+      };
+    };
+    "decompress-unzip-4.0.1" = {
+      name = "decompress-unzip";
+      packageName = "decompress-unzip";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz";
+        sha512 = "1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==";
+      };
+    };
+    "decompress-zip-0.3.3" = {
+      name = "decompress-zip";
+      packageName = "decompress-zip";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz";
+        sha512 = "/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==";
+      };
+    };
+    "deep-eql-4.1.3" = {
+      name = "deep-eql";
+      packageName = "deep-eql";
+      version = "4.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz";
+        sha512 = "WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==";
+      };
+    };
+    "deep-is-0.1.4" = {
+      name = "deep-is";
+      packageName = "deep-is";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz";
+        sha512 = "oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==";
+      };
+    };
+    "default-compare-1.0.0" = {
+      name = "default-compare";
+      packageName = "default-compare";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz";
+        sha512 = "QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==";
+      };
+    };
+    "default-resolution-2.0.0" = {
+      name = "default-resolution";
+      packageName = "default-resolution";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz";
+        sha512 = "2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==";
+      };
+    };
+    "define-properties-1.2.0" = {
+      name = "define-properties";
+      packageName = "define-properties";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz";
+        sha512 = "xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==";
+      };
+    };
+    "define-property-0.2.5" = {
+      name = "define-property";
+      packageName = "define-property";
+      version = "0.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz";
+        sha512 = "Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==";
+      };
+    };
+    "define-property-1.0.0" = {
+      name = "define-property";
+      packageName = "define-property";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz";
+        sha512 = "cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==";
+      };
+    };
+    "define-property-2.0.2" = {
+      name = "define-property";
+      packageName = "define-property";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz";
+        sha512 = "jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==";
+      };
+    };
+    "delayed-stream-1.0.0" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha512 = "ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==";
+      };
+    };
+    "detect-file-1.0.0" = {
+      name = "detect-file";
+      packageName = "detect-file";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz";
+        sha512 = "DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==";
+      };
+    };
+    "detect-newline-2.1.0" = {
+      name = "detect-newline";
+      packageName = "detect-newline";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz";
+        sha512 = "CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==";
+      };
+    };
+    "diff-5.0.0" = {
+      name = "diff";
+      packageName = "diff";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz";
+        sha512 = "/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==";
+      };
+    };
+    "doctrine-3.0.0" = {
+      name = "doctrine";
+      packageName = "doctrine";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz";
+        sha512 = "yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==";
+      };
+    };
+    "download-5.0.3" = {
+      name = "download";
+      packageName = "download";
+      version = "5.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/download/-/download-5.0.3.tgz";
+        sha512 = "rE0V29BV5FyylK3Uw5hmP90TBuwGHAqPYfaRHW/VHsKe9Xqi7RACVg0k0FokeE+MTWr9mtUy75GyszRACiD3Ow==";
+      };
+    };
+    "duplexer3-0.1.5" = {
+      name = "duplexer3";
+      packageName = "duplexer3";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz";
+        sha512 = "1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==";
+      };
+    };
+    "duplexify-3.7.1" = {
+      name = "duplexify";
+      packageName = "duplexify";
+      version = "3.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz";
+        sha512 = "07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==";
+      };
+    };
+    "each-props-1.3.2" = {
+      name = "each-props";
+      packageName = "each-props";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz";
+        sha512 = "vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==";
+      };
+    };
+    "ecc-jsbn-0.1.2" = {
+      name = "ecc-jsbn";
+      packageName = "ecc-jsbn";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+        sha512 = "eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==";
+      };
+    };
+    "emoji-regex-8.0.0" = {
+      name = "emoji-regex";
+      packageName = "emoji-regex";
+      version = "8.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz";
+        sha512 = "MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==";
+      };
+    };
+    "end-of-stream-1.4.4" = {
+      name = "end-of-stream";
+      packageName = "end-of-stream";
+      version = "1.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz";
+        sha512 = "+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==";
+      };
+    };
+    "error-ex-1.3.2" = {
+      name = "error-ex";
+      packageName = "error-ex";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz";
+        sha512 = "7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==";
+      };
+    };
+    "es5-ext-0.10.62" = {
+      name = "es5-ext";
+      packageName = "es5-ext";
+      version = "0.10.62";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz";
+        sha512 = "BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==";
+      };
+    };
+    "es6-iterator-2.0.3" = {
+      name = "es6-iterator";
+      packageName = "es6-iterator";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz";
+        sha512 = "zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==";
+      };
+    };
+    "es6-symbol-3.1.3" = {
+      name = "es6-symbol";
+      packageName = "es6-symbol";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz";
+        sha512 = "NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==";
+      };
+    };
+    "es6-weak-map-2.0.3" = {
+      name = "es6-weak-map";
+      packageName = "es6-weak-map";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz";
+        sha512 = "p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==";
+      };
+    };
+    "escalade-3.1.1" = {
+      name = "escalade";
+      packageName = "escalade";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz";
+        sha512 = "k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==";
+      };
+    };
+    "escape-string-regexp-1.0.5" = {
+      name = "escape-string-regexp";
+      packageName = "escape-string-regexp";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+        sha512 = "vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==";
+      };
+    };
+    "escape-string-regexp-4.0.0" = {
+      name = "escape-string-regexp";
+      packageName = "escape-string-regexp";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz";
+        sha512 = "TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==";
+      };
+    };
+    "eslint-8.42.0" = {
+      name = "eslint";
+      packageName = "eslint";
+      version = "8.42.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz";
+        sha512 = "ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==";
+      };
+    };
+    "eslint-scope-7.2.0" = {
+      name = "eslint-scope";
+      packageName = "eslint-scope";
+      version = "7.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz";
+        sha512 = "DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==";
+      };
+    };
+    "eslint-visitor-keys-3.4.1" = {
+      name = "eslint-visitor-keys";
+      packageName = "eslint-visitor-keys";
+      version = "3.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz";
+        sha512 = "pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==";
+      };
+    };
+    "espree-9.5.2" = {
+      name = "espree";
+      packageName = "espree";
+      version = "9.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz";
+        sha512 = "7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==";
+      };
+    };
+    "esquery-1.5.0" = {
+      name = "esquery";
+      packageName = "esquery";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz";
+        sha512 = "YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==";
+      };
+    };
+    "esrecurse-4.3.0" = {
+      name = "esrecurse";
+      packageName = "esrecurse";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz";
+        sha512 = "KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==";
+      };
+    };
+    "estraverse-5.3.0" = {
+      name = "estraverse";
+      packageName = "estraverse";
+      version = "5.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz";
+        sha512 = "MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==";
+      };
+    };
+    "esutils-2.0.3" = {
+      name = "esutils";
+      packageName = "esutils";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz";
+        sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
+      };
+    };
+    "event-emitter-0.3.5" = {
+      name = "event-emitter";
+      packageName = "event-emitter";
+      version = "0.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz";
+        sha512 = "D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==";
+      };
+    };
+    "expand-brackets-0.1.5" = {
+      name = "expand-brackets";
+      packageName = "expand-brackets";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz";
+        sha512 = "hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==";
+      };
+    };
+    "expand-brackets-2.1.4" = {
+      name = "expand-brackets";
+      packageName = "expand-brackets";
+      version = "2.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz";
+        sha512 = "w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==";
+      };
+    };
+    "expand-range-1.8.2" = {
+      name = "expand-range";
+      packageName = "expand-range";
+      version = "1.8.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz";
+        sha512 = "AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==";
+      };
+    };
+    "expand-tilde-2.0.2" = {
+      name = "expand-tilde";
+      packageName = "expand-tilde";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz";
+        sha512 = "A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==";
+      };
+    };
+    "ext-1.7.0" = {
+      name = "ext";
+      packageName = "ext";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz";
+        sha512 = "6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==";
+      };
+    };
+    "extend-3.0.2" = {
+      name = "extend";
+      packageName = "extend";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+        sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
+      };
+    };
+    "extend-shallow-2.0.1" = {
+      name = "extend-shallow";
+      packageName = "extend-shallow";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz";
+        sha512 = "zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==";
+      };
+    };
+    "extend-shallow-3.0.2" = {
+      name = "extend-shallow";
+      packageName = "extend-shallow";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz";
+        sha512 = "BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==";
+      };
+    };
+    "extglob-0.3.2" = {
+      name = "extglob";
+      packageName = "extglob";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz";
+        sha512 = "1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==";
+      };
+    };
+    "extglob-2.0.4" = {
+      name = "extglob";
+      packageName = "extglob";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz";
+        sha512 = "Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==";
+      };
+    };
+    "extsprintf-1.3.0" = {
+      name = "extsprintf";
+      packageName = "extsprintf";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
+        sha512 = "11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==";
+      };
+    };
+    "fancy-log-1.3.3" = {
+      name = "fancy-log";
+      packageName = "fancy-log";
+      version = "1.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz";
+        sha512 = "k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==";
+      };
+    };
+    "fast-deep-equal-3.1.3" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
+        sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==";
+      };
+    };
+    "fast-json-stable-stringify-2.1.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+        sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
+      };
+    };
+    "fast-levenshtein-1.1.4" = {
+      name = "fast-levenshtein";
+      packageName = "fast-levenshtein";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz";
+        sha512 = "Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==";
+      };
+    };
+    "fast-levenshtein-2.0.6" = {
+      name = "fast-levenshtein";
+      packageName = "fast-levenshtein";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+        sha512 = "DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==";
+      };
+    };
+    "fastq-1.15.0" = {
+      name = "fastq";
+      packageName = "fastq";
+      version = "1.15.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz";
+        sha512 = "wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==";
+      };
+    };
+    "fd-slicer-1.1.0" = {
+      name = "fd-slicer";
+      packageName = "fd-slicer";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz";
+        sha512 = "cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==";
+      };
+    };
+    "file-entry-cache-6.0.1" = {
+      name = "file-entry-cache";
+      packageName = "file-entry-cache";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz";
+        sha512 = "7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==";
+      };
+    };
+    "file-exists-2.0.0" = {
+      name = "file-exists";
+      packageName = "file-exists";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-exists/-/file-exists-2.0.0.tgz";
+        sha512 = "xiDzGS+oe7RleGLItoPTKVj3DjKHiVANV6dEyWTt3yB08H/AHuyvjh0aZ8jISQ53yhyTWVLsDzhJ5IbvPciBjg==";
+      };
+    };
+    "file-type-3.9.0" = {
+      name = "file-type";
+      packageName = "file-type";
+      version = "3.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz";
+        sha512 = "RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==";
+      };
+    };
+    "file-type-5.2.0" = {
+      name = "file-type";
+      packageName = "file-type";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz";
+        sha512 = "Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==";
+      };
+    };
+    "file-type-6.2.0" = {
+      name = "file-type";
+      packageName = "file-type";
+      version = "6.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz";
+        sha512 = "YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==";
+      };
+    };
+    "file-uri-to-path-1.0.0" = {
+      name = "file-uri-to-path";
+      packageName = "file-uri-to-path";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz";
+        sha512 = "0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==";
+      };
+    };
+    "filename-regex-2.0.1" = {
+      name = "filename-regex";
+      packageName = "filename-regex";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz";
+        sha512 = "BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==";
+      };
+    };
+    "filename-reserved-regex-2.0.0" = {
+      name = "filename-reserved-regex";
+      packageName = "filename-reserved-regex";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz";
+        sha512 = "lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==";
+      };
+    };
+    "filenamify-2.1.0" = {
+      name = "filenamify";
+      packageName = "filenamify";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz";
+        sha512 = "ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==";
+      };
+    };
+    "fill-range-2.2.4" = {
+      name = "fill-range";
+      packageName = "fill-range";
+      version = "2.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz";
+        sha512 = "cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==";
+      };
+    };
+    "fill-range-4.0.0" = {
+      name = "fill-range";
+      packageName = "fill-range";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz";
+        sha512 = "VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==";
+      };
+    };
+    "fill-range-7.0.1" = {
+      name = "fill-range";
+      packageName = "fill-range";
+      version = "7.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz";
+        sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==";
+      };
+    };
+    "find-up-1.1.2" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz";
+        sha512 = "jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==";
+      };
+    };
+    "find-up-5.0.0" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz";
+        sha512 = "78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==";
+      };
+    };
+    "findup-sync-2.0.0" = {
+      name = "findup-sync";
+      packageName = "findup-sync";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz";
+        sha512 = "vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==";
+      };
+    };
+    "findup-sync-3.0.0" = {
+      name = "findup-sync";
+      packageName = "findup-sync";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz";
+        sha512 = "YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==";
+      };
+    };
+    "fined-1.2.0" = {
+      name = "fined";
+      packageName = "fined";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz";
+        sha512 = "ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==";
+      };
+    };
+    "flagged-respawn-1.0.1" = {
+      name = "flagged-respawn";
+      packageName = "flagged-respawn";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz";
+        sha512 = "lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==";
+      };
+    };
+    "flat-5.0.2" = {
+      name = "flat";
+      packageName = "flat";
+      version = "5.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz";
+        sha512 = "b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==";
+      };
+    };
+    "flat-cache-3.0.4" = {
+      name = "flat-cache";
+      packageName = "flat-cache";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz";
+        sha512 = "dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==";
+      };
+    };
+    "flatted-3.2.7" = {
+      name = "flatted";
+      packageName = "flatted";
+      version = "3.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz";
+        sha512 = "5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==";
+      };
+    };
+    "flush-write-stream-1.1.1" = {
+      name = "flush-write-stream";
+      packageName = "flush-write-stream";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz";
+        sha512 = "3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==";
+      };
+    };
+    "for-in-1.0.2" = {
+      name = "for-in";
+      packageName = "for-in";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz";
+        sha512 = "7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==";
+      };
+    };
+    "for-own-0.1.5" = {
+      name = "for-own";
+      packageName = "for-own";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz";
+        sha512 = "SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==";
+      };
+    };
+    "for-own-1.0.0" = {
+      name = "for-own";
+      packageName = "for-own";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz";
+        sha512 = "0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==";
+      };
+    };
+    "forever-agent-0.6.1" = {
+      name = "forever-agent";
+      packageName = "forever-agent";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
+        sha512 = "j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==";
+      };
+    };
+    "form-data-2.3.3" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz";
+        sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==";
+      };
+    };
+    "fragment-cache-0.2.1" = {
+      name = "fragment-cache";
+      packageName = "fragment-cache";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz";
+        sha512 = "GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==";
+      };
+    };
+    "fs-constants-1.0.0" = {
+      name = "fs-constants";
+      packageName = "fs-constants";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz";
+        sha512 = "y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==";
+      };
+    };
+    "fs-extra-7.0.1" = {
+      name = "fs-extra";
+      packageName = "fs-extra";
+      version = "7.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz";
+        sha512 = "YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==";
+      };
+    };
+    "fs-jetpack-5.1.0" = {
+      name = "fs-jetpack";
+      packageName = "fs-jetpack";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-5.1.0.tgz";
+        sha512 = "Xn4fDhLydXkuzepZVsr02jakLlmoARPy+YWIclo4kh0GyNGUHnTqeH/w/qIsVn50dFxtp8otPL2t/HcPJBbxUA==";
+      };
+    };
+    "fs-mkdirp-stream-1.0.0" = {
+      name = "fs-mkdirp-stream";
+      packageName = "fs-mkdirp-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz";
+        sha512 = "+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==";
+      };
+    };
+    "fs.realpath-1.0.0" = {
+      name = "fs.realpath";
+      packageName = "fs.realpath";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
+        sha512 = "OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==";
+      };
+    };
+    "fsevents-1.2.13" = {
+      name = "fsevents";
+      packageName = "fsevents";
+      version = "1.2.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz";
+        sha512 = "oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==";
+      };
+    };
+    "fsevents-2.3.2" = {
+      name = "fsevents";
+      packageName = "fsevents";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz";
+        sha512 = "xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==";
+      };
+    };
+    "function-bind-1.1.1" = {
+      name = "function-bind";
+      packageName = "function-bind";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz";
+        sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
+      };
+    };
+    "get-caller-file-1.0.3" = {
+      name = "get-caller-file";
+      packageName = "get-caller-file";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz";
+        sha512 = "3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==";
+      };
+    };
+    "get-caller-file-2.0.5" = {
+      name = "get-caller-file";
+      packageName = "get-caller-file";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz";
+        sha512 = "DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==";
+      };
+    };
+    "get-func-name-2.0.0" = {
+      name = "get-func-name";
+      packageName = "get-func-name";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz";
+        sha512 = "Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==";
+      };
+    };
+    "get-intrinsic-1.2.1" = {
+      name = "get-intrinsic";
+      packageName = "get-intrinsic";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz";
+        sha512 = "2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==";
+      };
+    };
+    "get-proxy-2.1.0" = {
+      name = "get-proxy";
+      packageName = "get-proxy";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz";
+        sha512 = "zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==";
+      };
+    };
+    "get-stream-2.3.1" = {
+      name = "get-stream";
+      packageName = "get-stream";
+      version = "2.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz";
+        sha512 = "AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==";
+      };
+    };
+    "get-stream-3.0.0" = {
+      name = "get-stream";
+      packageName = "get-stream";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz";
+        sha512 = "GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==";
+      };
+    };
+    "get-value-2.0.6" = {
+      name = "get-value";
+      packageName = "get-value";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz";
+        sha512 = "Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==";
+      };
+    };
+    "getpass-0.1.7" = {
+      name = "getpass";
+      packageName = "getpass";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+        sha512 = "0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==";
+      };
+    };
+    "glob-7.2.0" = {
+      name = "glob";
+      packageName = "glob";
+      version = "7.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz";
+        sha512 = "lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==";
+      };
+    };
+    "glob-7.2.3" = {
+      name = "glob";
+      packageName = "glob";
+      version = "7.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz";
+        sha512 = "nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==";
+      };
+    };
+    "glob-base-0.3.0" = {
+      name = "glob-base";
+      packageName = "glob-base";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz";
+        sha512 = "ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==";
+      };
+    };
+    "glob-parent-2.0.0" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz";
+        sha512 = "JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==";
+      };
+    };
+    "glob-parent-3.1.0" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz";
+        sha512 = "E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==";
+      };
+    };
+    "glob-parent-5.1.2" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz";
+        sha512 = "AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==";
+      };
+    };
+    "glob-parent-6.0.2" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "6.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz";
+        sha512 = "XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==";
+      };
+    };
+    "glob-stream-6.1.0" = {
+      name = "glob-stream";
+      packageName = "glob-stream";
+      version = "6.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz";
+        sha512 = "uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==";
+      };
+    };
+    "glob-watcher-5.0.5" = {
+      name = "glob-watcher";
+      packageName = "glob-watcher";
+      version = "5.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz";
+        sha512 = "zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==";
+      };
+    };
+    "global-modules-1.0.0" = {
+      name = "global-modules";
+      packageName = "global-modules";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz";
+        sha512 = "sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==";
+      };
+    };
+    "global-prefix-1.0.2" = {
+      name = "global-prefix";
+      packageName = "global-prefix";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz";
+        sha512 = "5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==";
+      };
+    };
+    "globals-13.20.0" = {
+      name = "globals";
+      packageName = "globals";
+      version = "13.20.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz";
+        sha512 = "Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==";
+      };
+    };
+    "glogg-1.0.2" = {
+      name = "glogg";
+      packageName = "glogg";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz";
+        sha512 = "5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==";
+      };
+    };
+    "got-6.7.1" = {
+      name = "got";
+      packageName = "got";
+      version = "6.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/got/-/got-6.7.1.tgz";
+        sha512 = "Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==";
+      };
+    };
+    "graceful-fs-4.2.11" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "4.2.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz";
+        sha512 = "RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==";
+      };
+    };
+    "graphemer-1.4.0" = {
+      name = "graphemer";
+      packageName = "graphemer";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz";
+        sha512 = "EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==";
+      };
+    };
+    "gulp-4.0.2" = {
+      name = "gulp";
+      packageName = "gulp";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz";
+        sha512 = "dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==";
+      };
+    };
+    "gulp-cli-2.3.0" = {
+      name = "gulp-cli";
+      packageName = "gulp-cli";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz";
+        sha512 = "zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==";
+      };
+    };
+    "gulp-sourcemaps-3.0.0" = {
+      name = "gulp-sourcemaps";
+      packageName = "gulp-sourcemaps";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz";
+        sha512 = "RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==";
+      };
+    };
+    "gulplog-1.0.0" = {
+      name = "gulplog";
+      packageName = "gulplog";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz";
+        sha512 = "hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==";
+      };
+    };
+    "har-schema-2.0.0" = {
+      name = "har-schema";
+      packageName = "har-schema";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+        sha512 = "Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==";
+      };
+    };
+    "har-validator-5.1.5" = {
+      name = "har-validator";
+      packageName = "har-validator";
+      version = "5.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz";
+        sha512 = "nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==";
+      };
+    };
+    "has-1.0.3" = {
+      name = "has";
+      packageName = "has";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz";
+        sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
+      };
+    };
+    "has-ansi-2.0.0" = {
+      name = "has-ansi";
+      packageName = "has-ansi";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
+        sha512 = "C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==";
+      };
+    };
+    "has-flag-4.0.0" = {
+      name = "has-flag";
+      packageName = "has-flag";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz";
+        sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==";
+      };
+    };
+    "has-property-descriptors-1.0.0" = {
+      name = "has-property-descriptors";
+      packageName = "has-property-descriptors";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz";
+        sha512 = "62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==";
+      };
+    };
+    "has-proto-1.0.1" = {
+      name = "has-proto";
+      packageName = "has-proto";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz";
+        sha512 = "7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==";
+      };
+    };
+    "has-symbol-support-x-1.4.2" = {
+      name = "has-symbol-support-x";
+      packageName = "has-symbol-support-x";
+      version = "1.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz";
+        sha512 = "3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==";
+      };
+    };
+    "has-symbols-1.0.3" = {
+      name = "has-symbols";
+      packageName = "has-symbols";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz";
+        sha512 = "l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==";
+      };
+    };
+    "has-to-string-tag-x-1.4.1" = {
+      name = "has-to-string-tag-x";
+      packageName = "has-to-string-tag-x";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz";
+        sha512 = "vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==";
+      };
+    };
+    "has-value-0.3.1" = {
+      name = "has-value";
+      packageName = "has-value";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz";
+        sha512 = "gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==";
+      };
+    };
+    "has-value-1.0.0" = {
+      name = "has-value";
+      packageName = "has-value";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz";
+        sha512 = "IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==";
+      };
+    };
+    "has-values-0.1.4" = {
+      name = "has-values";
+      packageName = "has-values";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz";
+        sha512 = "J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==";
+      };
+    };
+    "has-values-1.0.0" = {
+      name = "has-values";
+      packageName = "has-values";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz";
+        sha512 = "ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==";
+      };
+    };
+    "he-1.2.0" = {
+      name = "he";
+      packageName = "he";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/he/-/he-1.2.0.tgz";
+        sha512 = "F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==";
+      };
+    };
+    "homedir-polyfill-1.0.3" = {
+      name = "homedir-polyfill";
+      packageName = "homedir-polyfill";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz";
+        sha512 = "eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==";
+      };
+    };
+    "hosted-git-info-2.8.9" = {
+      name = "hosted-git-info";
+      packageName = "hosted-git-info";
+      version = "2.8.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz";
+        sha512 = "mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==";
+      };
+    };
+    "http-signature-1.2.0" = {
+      name = "http-signature";
+      packageName = "http-signature";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
+        sha512 = "CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==";
+      };
+    };
+    "ieee754-1.2.1" = {
+      name = "ieee754";
+      packageName = "ieee754";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz";
+        sha512 = "dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==";
+      };
+    };
+    "ignore-5.2.4" = {
+      name = "ignore";
+      packageName = "ignore";
+      version = "5.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz";
+        sha512 = "MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==";
+      };
+    };
+    "immediate-3.0.6" = {
+      name = "immediate";
+      packageName = "immediate";
+      version = "3.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz";
+        sha512 = "XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==";
+      };
+    };
+    "import-fresh-3.3.0" = {
+      name = "import-fresh";
+      packageName = "import-fresh";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz";
+        sha512 = "veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==";
+      };
+    };
+    "imurmurhash-0.1.4" = {
+      name = "imurmurhash";
+      packageName = "imurmurhash";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
+        sha512 = "JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==";
+      };
+    };
+    "inflight-1.0.6" = {
+      name = "inflight";
+      packageName = "inflight";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
+        sha512 = "k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==";
+      };
+    };
+    "inherits-2.0.4" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+        sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+      };
+    };
+    "ini-1.3.8" = {
+      name = "ini";
+      packageName = "ini";
+      version = "1.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz";
+        sha512 = "JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==";
+      };
+    };
+    "interpret-1.4.0" = {
+      name = "interpret";
+      packageName = "interpret";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz";
+        sha512 = "agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==";
+      };
+    };
+    "invert-kv-1.0.0" = {
+      name = "invert-kv";
+      packageName = "invert-kv";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz";
+        sha512 = "xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==";
+      };
+    };
+    "is-absolute-1.0.0" = {
+      name = "is-absolute";
+      packageName = "is-absolute";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz";
+        sha512 = "dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==";
+      };
+    };
+    "is-accessor-descriptor-0.1.6" = {
+      name = "is-accessor-descriptor";
+      packageName = "is-accessor-descriptor";
+      version = "0.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz";
+        sha512 = "e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==";
+      };
+    };
+    "is-accessor-descriptor-1.0.0" = {
+      name = "is-accessor-descriptor";
+      packageName = "is-accessor-descriptor";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz";
+        sha512 = "m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==";
+      };
+    };
+    "is-arrayish-0.2.1" = {
+      name = "is-arrayish";
+      packageName = "is-arrayish";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";
+        sha512 = "zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==";
+      };
+    };
+    "is-binary-path-1.0.1" = {
+      name = "is-binary-path";
+      packageName = "is-binary-path";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz";
+        sha512 = "9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==";
+      };
+    };
+    "is-binary-path-2.1.0" = {
+      name = "is-binary-path";
+      packageName = "is-binary-path";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz";
+        sha512 = "ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==";
+      };
+    };
+    "is-buffer-1.1.6" = {
+      name = "is-buffer";
+      packageName = "is-buffer";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz";
+        sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==";
+      };
+    };
+    "is-core-module-2.12.1" = {
+      name = "is-core-module";
+      packageName = "is-core-module";
+      version = "2.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz";
+        sha512 = "Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==";
+      };
+    };
+    "is-data-descriptor-0.1.4" = {
+      name = "is-data-descriptor";
+      packageName = "is-data-descriptor";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz";
+        sha512 = "+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==";
+      };
+    };
+    "is-data-descriptor-1.0.0" = {
+      name = "is-data-descriptor";
+      packageName = "is-data-descriptor";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz";
+        sha512 = "jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==";
+      };
+    };
+    "is-descriptor-0.1.6" = {
+      name = "is-descriptor";
+      packageName = "is-descriptor";
+      version = "0.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz";
+        sha512 = "avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==";
+      };
+    };
+    "is-descriptor-1.0.2" = {
+      name = "is-descriptor";
+      packageName = "is-descriptor";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz";
+        sha512 = "2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==";
+      };
+    };
+    "is-dotfile-1.0.3" = {
+      name = "is-dotfile";
+      packageName = "is-dotfile";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz";
+        sha512 = "9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==";
+      };
+    };
+    "is-equal-shallow-0.1.3" = {
+      name = "is-equal-shallow";
+      packageName = "is-equal-shallow";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz";
+        sha512 = "0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==";
+      };
+    };
+    "is-extendable-0.1.1" = {
+      name = "is-extendable";
+      packageName = "is-extendable";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz";
+        sha512 = "5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==";
+      };
+    };
+    "is-extendable-1.0.1" = {
+      name = "is-extendable";
+      packageName = "is-extendable";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz";
+        sha512 = "arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==";
+      };
+    };
+    "is-extglob-1.0.0" = {
+      name = "is-extglob";
+      packageName = "is-extglob";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz";
+        sha512 = "7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==";
+      };
+    };
+    "is-extglob-2.1.1" = {
+      name = "is-extglob";
+      packageName = "is-extglob";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
+        sha512 = "SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==";
+      };
+    };
+    "is-fullwidth-code-point-1.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
+        sha512 = "1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==";
+      };
+    };
+    "is-fullwidth-code-point-3.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz";
+        sha512 = "zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==";
+      };
+    };
+    "is-glob-2.0.1" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz";
+        sha512 = "a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==";
+      };
+    };
+    "is-glob-3.1.0" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz";
+        sha512 = "UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==";
+      };
+    };
+    "is-glob-4.0.3" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz";
+        sha512 = "xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==";
+      };
+    };
+    "is-natural-number-4.0.1" = {
+      name = "is-natural-number";
+      packageName = "is-natural-number";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz";
+        sha512 = "Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==";
+      };
+    };
+    "is-negated-glob-1.0.0" = {
+      name = "is-negated-glob";
+      packageName = "is-negated-glob";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz";
+        sha512 = "czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==";
+      };
+    };
+    "is-number-2.1.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz";
+        sha512 = "QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==";
+      };
+    };
+    "is-number-3.0.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz";
+        sha512 = "4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==";
+      };
+    };
+    "is-number-4.0.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz";
+        sha512 = "rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==";
+      };
+    };
+    "is-number-7.0.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";
+        sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==";
+      };
+    };
+    "is-object-1.0.2" = {
+      name = "is-object";
+      packageName = "is-object";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz";
+        sha512 = "2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==";
+      };
+    };
+    "is-path-inside-3.0.3" = {
+      name = "is-path-inside";
+      packageName = "is-path-inside";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz";
+        sha512 = "Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==";
+      };
+    };
+    "is-plain-obj-2.1.0" = {
+      name = "is-plain-obj";
+      packageName = "is-plain-obj";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz";
+        sha512 = "YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==";
+      };
+    };
+    "is-plain-object-2.0.4" = {
+      name = "is-plain-object";
+      packageName = "is-plain-object";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz";
+        sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==";
+      };
+    };
+    "is-plain-object-5.0.0" = {
+      name = "is-plain-object";
+      packageName = "is-plain-object";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz";
+        sha512 = "VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==";
+      };
+    };
+    "is-posix-bracket-0.1.1" = {
+      name = "is-posix-bracket";
+      packageName = "is-posix-bracket";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz";
+        sha512 = "Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==";
+      };
+    };
+    "is-primitive-2.0.0" = {
+      name = "is-primitive";
+      packageName = "is-primitive";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz";
+        sha512 = "N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==";
+      };
+    };
+    "is-promise-2.2.2" = {
+      name = "is-promise";
+      packageName = "is-promise";
+      version = "2.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz";
+        sha512 = "+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==";
+      };
+    };
+    "is-redirect-1.0.0" = {
+      name = "is-redirect";
+      packageName = "is-redirect";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz";
+        sha512 = "cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==";
+      };
+    };
+    "is-relative-1.0.0" = {
+      name = "is-relative";
+      packageName = "is-relative";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz";
+        sha512 = "Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==";
+      };
+    };
+    "is-retry-allowed-1.2.0" = {
+      name = "is-retry-allowed";
+      packageName = "is-retry-allowed";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz";
+        sha512 = "RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==";
+      };
+    };
+    "is-stream-1.1.0" = {
+      name = "is-stream";
+      packageName = "is-stream";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
+        sha512 = "uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==";
+      };
+    };
+    "is-typedarray-1.0.0" = {
+      name = "is-typedarray";
+      packageName = "is-typedarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+        sha512 = "cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==";
+      };
+    };
+    "is-unc-path-1.0.0" = {
+      name = "is-unc-path";
+      packageName = "is-unc-path";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz";
+        sha512 = "mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==";
+      };
+    };
+    "is-unicode-supported-0.1.0" = {
+      name = "is-unicode-supported";
+      packageName = "is-unicode-supported";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz";
+        sha512 = "knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==";
+      };
+    };
+    "is-utf8-0.2.1" = {
+      name = "is-utf8";
+      packageName = "is-utf8";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz";
+        sha512 = "rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==";
+      };
+    };
+    "is-valid-glob-1.0.0" = {
+      name = "is-valid-glob";
+      packageName = "is-valid-glob";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz";
+        sha512 = "AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==";
+      };
+    };
+    "is-windows-1.0.2" = {
+      name = "is-windows";
+      packageName = "is-windows";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz";
+        sha512 = "eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==";
+      };
+    };
+    "isarray-0.0.1" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
+        sha512 = "D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==";
+      };
+    };
+    "isarray-1.0.0" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+        sha512 = "VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==";
+      };
+    };
+    "isexe-2.0.0" = {
+      name = "isexe";
+      packageName = "isexe";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
+        sha512 = "RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==";
+      };
+    };
+    "isobject-2.1.0" = {
+      name = "isobject";
+      packageName = "isobject";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz";
+        sha512 = "+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==";
+      };
+    };
+    "isobject-3.0.1" = {
+      name = "isobject";
+      packageName = "isobject";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz";
+        sha512 = "WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==";
+      };
+    };
+    "isstream-0.1.2" = {
+      name = "isstream";
+      packageName = "isstream";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+        sha512 = "Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==";
+      };
+    };
+    "isurl-1.0.0" = {
+      name = "isurl";
+      packageName = "isurl";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz";
+        sha512 = "1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==";
+      };
+    };
+    "js-sha256-0.9.0" = {
+      name = "js-sha256";
+      packageName = "js-sha256";
+      version = "0.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz";
+        sha512 = "sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==";
+      };
+    };
+    "js-yaml-4.1.0" = {
+      name = "js-yaml";
+      packageName = "js-yaml";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz";
+        sha512 = "wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==";
+      };
+    };
+    "jsbn-0.1.1" = {
+      name = "jsbn";
+      packageName = "jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+        sha512 = "UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==";
+      };
+    };
+    "json-11.0.0" = {
+      name = "json";
+      packageName = "json";
+      version = "11.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json/-/json-11.0.0.tgz";
+        sha512 = "N/ITv3Yw9Za8cGxuQqSqrq6RHnlaHWZkAFavcfpH/R52522c26EbihMxnY7A1chxfXJ4d+cEFIsyTgfi9GihrA==";
+      };
+    };
+    "json-schema-0.4.0" = {
+      name = "json-schema";
+      packageName = "json-schema";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz";
+        sha512 = "es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==";
+      };
+    };
+    "json-schema-traverse-0.4.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+      };
+    };
+    "json-stable-stringify-without-jsonify-1.0.1" = {
+      name = "json-stable-stringify-without-jsonify";
+      packageName = "json-stable-stringify-without-jsonify";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz";
+        sha512 = "Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==";
+      };
+    };
+    "json-stringify-safe-5.0.1" = {
+      name = "json-stringify-safe";
+      packageName = "json-stringify-safe";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+        sha512 = "ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==";
+      };
+    };
+    "jsonfile-4.0.0" = {
+      name = "jsonfile";
+      packageName = "jsonfile";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz";
+        sha512 = "m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==";
+      };
+    };
+    "jsprim-1.4.2" = {
+      name = "jsprim";
+      packageName = "jsprim";
+      version = "1.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz";
+        sha512 = "P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==";
+      };
+    };
+    "jszip-3.10.1" = {
+      name = "jszip";
+      packageName = "jszip";
+      version = "3.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz";
+        sha512 = "xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==";
+      };
+    };
+    "just-debounce-1.1.0" = {
+      name = "just-debounce";
+      packageName = "just-debounce";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz";
+        sha512 = "qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==";
+      };
+    };
+    "kind-of-3.2.2" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz";
+        sha512 = "NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==";
+      };
+    };
+    "kind-of-4.0.0" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz";
+        sha512 = "24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==";
+      };
+    };
+    "kind-of-5.1.0" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz";
+        sha512 = "NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==";
+      };
+    };
+    "kind-of-6.0.3" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "6.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz";
+        sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==";
+      };
+    };
+    "last-run-1.1.1" = {
+      name = "last-run";
+      packageName = "last-run";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz";
+        sha512 = "U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==";
+      };
+    };
+    "lazystream-1.0.1" = {
+      name = "lazystream";
+      packageName = "lazystream";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz";
+        sha512 = "b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==";
+      };
+    };
+    "lcid-1.0.0" = {
+      name = "lcid";
+      packageName = "lcid";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz";
+        sha512 = "YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==";
+      };
+    };
+    "lead-1.0.0" = {
+      name = "lead";
+      packageName = "lead";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz";
+        sha512 = "IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==";
+      };
+    };
+    "levn-0.4.1" = {
+      name = "levn";
+      packageName = "levn";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz";
+        sha512 = "+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==";
+      };
+    };
+    "lie-3.3.0" = {
+      name = "lie";
+      packageName = "lie";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz";
+        sha512 = "UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==";
+      };
+    };
+    "liftoff-3.1.0" = {
+      name = "liftoff";
+      packageName = "liftoff";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz";
+        sha512 = "DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==";
+      };
+    };
+    "load-json-file-1.1.0" = {
+      name = "load-json-file";
+      packageName = "load-json-file";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz";
+        sha512 = "cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==";
+      };
+    };
+    "locate-path-6.0.0" = {
+      name = "locate-path";
+      packageName = "locate-path";
+      version = "6.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz";
+        sha512 = "iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==";
+      };
+    };
+    "lodash.merge-4.6.2" = {
+      name = "lodash.merge";
+      packageName = "lodash.merge";
+      version = "4.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz";
+        sha512 = "0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==";
+      };
+    };
+    "log-symbols-4.1.0" = {
+      name = "log-symbols";
+      packageName = "log-symbols";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz";
+        sha512 = "8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==";
+      };
+    };
+    "loupe-2.3.6" = {
+      name = "loupe";
+      packageName = "loupe";
+      version = "2.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz";
+        sha512 = "RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==";
+      };
+    };
+    "lowercase-keys-1.0.1" = {
+      name = "lowercase-keys";
+      packageName = "lowercase-keys";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz";
+        sha512 = "G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==";
+      };
+    };
+    "lru-queue-0.1.0" = {
+      name = "lru-queue";
+      packageName = "lru-queue";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz";
+        sha512 = "BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==";
+      };
+    };
+    "make-dir-1.3.0" = {
+      name = "make-dir";
+      packageName = "make-dir";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz";
+        sha512 = "2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==";
+      };
+    };
+    "make-iterator-1.0.1" = {
+      name = "make-iterator";
+      packageName = "make-iterator";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz";
+        sha512 = "pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==";
+      };
+    };
+    "map-cache-0.2.2" = {
+      name = "map-cache";
+      packageName = "map-cache";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz";
+        sha512 = "8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==";
+      };
+    };
+    "map-visit-1.0.0" = {
+      name = "map-visit";
+      packageName = "map-visit";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz";
+        sha512 = "4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==";
+      };
+    };
+    "matchdep-2.0.0" = {
+      name = "matchdep";
+      packageName = "matchdep";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz";
+        sha512 = "LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==";
+      };
+    };
+    "math-random-1.0.4" = {
+      name = "math-random";
+      packageName = "math-random";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz";
+        sha512 = "rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==";
+      };
+    };
+    "memoizee-0.4.15" = {
+      name = "memoizee";
+      packageName = "memoizee";
+      version = "0.4.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz";
+        sha512 = "UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==";
+      };
+    };
+    "merge-1.2.1" = {
+      name = "merge";
+      packageName = "merge";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz";
+        sha512 = "VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==";
+      };
+    };
+    "micromatch-2.3.11" = {
+      name = "micromatch";
+      packageName = "micromatch";
+      version = "2.3.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz";
+        sha512 = "LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==";
+      };
+    };
+    "micromatch-3.1.10" = {
+      name = "micromatch";
+      packageName = "micromatch";
+      version = "3.1.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz";
+        sha512 = "MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==";
+      };
+    };
+    "mime-db-1.52.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.52.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz";
+        sha512 = "sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==";
+      };
+    };
+    "mime-types-2.1.35" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.35";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz";
+        sha512 = "ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==";
+      };
+    };
+    "minimatch-3.1.2" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz";
+        sha512 = "J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==";
+      };
+    };
+    "minimatch-5.0.1" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz";
+        sha512 = "nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==";
+      };
+    };
+    "minimatch-5.1.6" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "5.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz";
+        sha512 = "lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==";
+      };
+    };
+    "minimist-1.2.8" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "1.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz";
+        sha512 = "2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==";
+      };
+    };
+    "mixin-deep-1.3.2" = {
+      name = "mixin-deep";
+      packageName = "mixin-deep";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz";
+        sha512 = "WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==";
+      };
+    };
+    "mkdirp-0.5.6" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz";
+        sha512 = "FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==";
+      };
+    };
+    "mkpath-0.1.0" = {
+      name = "mkpath";
+      packageName = "mkpath";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz";
+        sha512 = "bauHShmaxVQiEvlrAPWxSPn8spSL8gDVRl11r8vLT4r/KdnknLqtqwQbToZ2Oa8sJkExYY1z6/d+X7pNiqo4yg==";
+      };
+    };
+    "mocha-10.2.0" = {
+      name = "mocha";
+      packageName = "mocha";
+      version = "10.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz";
+        sha512 = "IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==";
+      };
+    };
+    "ms-2.0.0" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
+        sha512 = "Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==";
+      };
+    };
+    "ms-2.1.2" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
+        sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
+      };
+    };
+    "ms-2.1.3" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz";
+        sha512 = "6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==";
+      };
+    };
+    "mute-stdout-1.0.1" = {
+      name = "mute-stdout";
+      packageName = "mute-stdout";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz";
+        sha512 = "kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==";
+      };
+    };
+    "nan-2.17.0" = {
+      name = "nan";
+      packageName = "nan";
+      version = "2.17.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz";
+        sha512 = "2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==";
+      };
+    };
+    "nanoid-3.3.3" = {
+      name = "nanoid";
+      packageName = "nanoid";
+      version = "3.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz";
+        sha512 = "p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==";
+      };
+    };
+    "nanomatch-1.2.13" = {
+      name = "nanomatch";
+      packageName = "nanomatch";
+      version = "1.2.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz";
+        sha512 = "fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==";
+      };
+    };
+    "natural-compare-1.4.0" = {
+      name = "natural-compare";
+      packageName = "natural-compare";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz";
+        sha512 = "OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==";
+      };
+    };
+    "next-tick-1.1.0" = {
+      name = "next-tick";
+      packageName = "next-tick";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz";
+        sha512 = "CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==";
+      };
+    };
+    "node-gyp-build-4.6.0" = {
+      name = "node-gyp-build";
+      packageName = "node-gyp-build";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz";
+        sha512 = "NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==";
+      };
+    };
+    "nopt-1.0.10" = {
+      name = "nopt";
+      packageName = "nopt";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz";
+        sha512 = "NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==";
+      };
+    };
+    "nopt-3.0.6" = {
+      name = "nopt";
+      packageName = "nopt";
+      version = "3.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
+        sha512 = "4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==";
+      };
+    };
+    "normalize-package-data-2.5.0" = {
+      name = "normalize-package-data";
+      packageName = "normalize-package-data";
+      version = "2.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz";
+        sha512 = "/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==";
+      };
+    };
+    "normalize-path-2.1.1" = {
+      name = "normalize-path";
+      packageName = "normalize-path";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz";
+        sha512 = "3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==";
+      };
+    };
+    "normalize-path-3.0.0" = {
+      name = "normalize-path";
+      packageName = "normalize-path";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz";
+        sha512 = "6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==";
+      };
+    };
+    "now-and-later-2.0.1" = {
+      name = "now-and-later";
+      packageName = "now-and-later";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz";
+        sha512 = "KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==";
+      };
+    };
+    "npm-conf-1.1.3" = {
+      name = "npm-conf";
+      packageName = "npm-conf";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz";
+        sha512 = "Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==";
+      };
+    };
+    "number-is-nan-1.0.1" = {
+      name = "number-is-nan";
+      packageName = "number-is-nan";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
+        sha512 = "4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==";
+      };
+    };
+    "nw-0.71.1" = {
+      name = "nw";
+      packageName = "nw";
+      version = "0.71.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nw/-/nw-0.71.1.tgz";
+        sha512 = "EQVv20UEY8JHC36iKyJPb9q19mmeKcezT5MnaIUjRhsgMcnZztXz9+Uaj2nOTLB3ZGq4EF/7rYSiZ0wU+Prspg==";
+      };
+    };
+    "nw-autoupdater-1.1.11" = {
+      name = "nw-autoupdater";
+      packageName = "nw-autoupdater";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nw-autoupdater/-/nw-autoupdater-1.1.11.tgz";
+        sha512 = "kCDRDCRayjZSwE8VhIclUyDjkylzHz9JT2WK/45wFNcW/9y6zaR/fy+AG2V266YF4XWFEId9ZuK2M3nIBpm9iw==";
+      };
+    };
+    "nw-dev-3.0.1" = {
+      name = "nw-dev";
+      packageName = "nw-dev";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nw-dev/-/nw-dev-3.0.1.tgz";
+        sha512 = "wlabaoKfO+2ZngERU5L6e7eXf0Hi41eAD01IBvjYh7wrIUdQKe1/wfVaeSMuZ0UYeu9zmOFu2uA2wOLTdY6+pg==";
+      };
+    };
+    "oauth-sign-0.9.0" = {
+      name = "oauth-sign";
+      packageName = "oauth-sign";
+      version = "0.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
+        sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
+      };
+    };
+    "object-assign-4.1.1" = {
+      name = "object-assign";
+      packageName = "object-assign";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
+        sha512 = "rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==";
+      };
+    };
+    "object-copy-0.1.0" = {
+      name = "object-copy";
+      packageName = "object-copy";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz";
+        sha512 = "79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==";
+      };
+    };
+    "object-keys-1.1.1" = {
+      name = "object-keys";
+      packageName = "object-keys";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz";
+        sha512 = "NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==";
+      };
+    };
+    "object-visit-1.0.1" = {
+      name = "object-visit";
+      packageName = "object-visit";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz";
+        sha512 = "GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==";
+      };
+    };
+    "object.assign-4.1.4" = {
+      name = "object.assign";
+      packageName = "object.assign";
+      version = "4.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz";
+        sha512 = "1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==";
+      };
+    };
+    "object.defaults-1.1.0" = {
+      name = "object.defaults";
+      packageName = "object.defaults";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz";
+        sha512 = "c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==";
+      };
+    };
+    "object.map-1.0.1" = {
+      name = "object.map";
+      packageName = "object.map";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz";
+        sha512 = "3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==";
+      };
+    };
+    "object.omit-2.0.1" = {
+      name = "object.omit";
+      packageName = "object.omit";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz";
+        sha512 = "UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==";
+      };
+    };
+    "object.pick-1.3.0" = {
+      name = "object.pick";
+      packageName = "object.pick";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz";
+        sha512 = "tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==";
+      };
+    };
+    "object.reduce-1.0.1" = {
+      name = "object.reduce";
+      packageName = "object.reduce";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz";
+        sha512 = "naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==";
+      };
+    };
+    "once-1.4.0" = {
+      name = "once";
+      packageName = "once";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
+        sha512 = "lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==";
+      };
+    };
+    "optionator-0.9.1" = {
+      name = "optionator";
+      packageName = "optionator";
+      version = "0.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz";
+        sha512 = "74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==";
+      };
+    };
+    "ordered-read-streams-1.0.1" = {
+      name = "ordered-read-streams";
+      packageName = "ordered-read-streams";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz";
+        sha512 = "Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==";
+      };
+    };
+    "os-locale-1.4.0" = {
+      name = "os-locale";
+      packageName = "os-locale";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz";
+        sha512 = "PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==";
+      };
+    };
+    "p-limit-3.1.0" = {
+      name = "p-limit";
+      packageName = "p-limit";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz";
+        sha512 = "TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==";
+      };
+    };
+    "p-locate-5.0.0" = {
+      name = "p-locate";
+      packageName = "p-locate";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz";
+        sha512 = "LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==";
+      };
+    };
+    "pako-1.0.11" = {
+      name = "pako";
+      packageName = "pako";
+      version = "1.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz";
+        sha512 = "4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==";
+      };
+    };
+    "parent-module-1.0.1" = {
+      name = "parent-module";
+      packageName = "parent-module";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz";
+        sha512 = "GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==";
+      };
+    };
+    "parse-filepath-1.0.2" = {
+      name = "parse-filepath";
+      packageName = "parse-filepath";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz";
+        sha512 = "FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==";
+      };
+    };
+    "parse-glob-3.0.4" = {
+      name = "parse-glob";
+      packageName = "parse-glob";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz";
+        sha512 = "FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==";
+      };
+    };
+    "parse-json-2.2.0" = {
+      name = "parse-json";
+      packageName = "parse-json";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz";
+        sha512 = "QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==";
+      };
+    };
+    "parse-node-version-1.0.1" = {
+      name = "parse-node-version";
+      packageName = "parse-node-version";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz";
+        sha512 = "3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==";
+      };
+    };
+    "parse-passwd-1.0.0" = {
+      name = "parse-passwd";
+      packageName = "parse-passwd";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz";
+        sha512 = "1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==";
+      };
+    };
+    "pascalcase-0.1.1" = {
+      name = "pascalcase";
+      packageName = "pascalcase";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz";
+        sha512 = "XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==";
+      };
+    };
+    "path-dirname-1.0.2" = {
+      name = "path-dirname";
+      packageName = "path-dirname";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz";
+        sha512 = "ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==";
+      };
+    };
+    "path-exists-2.1.0" = {
+      name = "path-exists";
+      packageName = "path-exists";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz";
+        sha512 = "yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==";
+      };
+    };
+    "path-exists-4.0.0" = {
+      name = "path-exists";
+      packageName = "path-exists";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz";
+        sha512 = "ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==";
+      };
+    };
+    "path-is-absolute-1.0.1" = {
+      name = "path-is-absolute";
+      packageName = "path-is-absolute";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+        sha512 = "AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==";
+      };
+    };
+    "path-key-3.1.1" = {
+      name = "path-key";
+      packageName = "path-key";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz";
+        sha512 = "ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==";
+      };
+    };
+    "path-parse-1.0.7" = {
+      name = "path-parse";
+      packageName = "path-parse";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz";
+        sha512 = "LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==";
+      };
+    };
+    "path-root-0.1.1" = {
+      name = "path-root";
+      packageName = "path-root";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz";
+        sha512 = "QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==";
+      };
+    };
+    "path-root-regex-0.1.2" = {
+      name = "path-root-regex";
+      packageName = "path-root-regex";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz";
+        sha512 = "4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==";
+      };
+    };
+    "path-type-1.1.0" = {
+      name = "path-type";
+      packageName = "path-type";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz";
+        sha512 = "S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==";
+      };
+    };
+    "pathval-1.1.1" = {
+      name = "pathval";
+      packageName = "pathval";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz";
+        sha512 = "Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==";
+      };
+    };
+    "pend-1.2.0" = {
+      name = "pend";
+      packageName = "pend";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz";
+        sha512 = "F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==";
+      };
+    };
+    "performance-now-2.1.0" = {
+      name = "performance-now";
+      packageName = "performance-now";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+        sha512 = "7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==";
+      };
+    };
+    "picocolors-0.2.1" = {
+      name = "picocolors";
+      packageName = "picocolors";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz";
+        sha512 = "cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==";
+      };
+    };
+    "picomatch-2.3.1" = {
+      name = "picomatch";
+      packageName = "picomatch";
+      version = "2.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz";
+        sha512 = "JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==";
+      };
+    };
+    "pify-2.3.0" = {
+      name = "pify";
+      packageName = "pify";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz";
+        sha512 = "udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==";
+      };
+    };
+    "pify-3.0.0" = {
+      name = "pify";
+      packageName = "pify";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz";
+        sha512 = "C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==";
+      };
+    };
+    "pinkie-2.0.4" = {
+      name = "pinkie";
+      packageName = "pinkie";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
+        sha512 = "MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==";
+      };
+    };
+    "pinkie-promise-2.0.1" = {
+      name = "pinkie-promise";
+      packageName = "pinkie-promise";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
+        sha512 = "0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==";
+      };
+    };
+    "posix-character-classes-0.1.1" = {
+      name = "posix-character-classes";
+      packageName = "posix-character-classes";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz";
+        sha512 = "xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==";
+      };
+    };
+    "postcss-7.0.39" = {
+      name = "postcss";
+      packageName = "postcss";
+      version = "7.0.39";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz";
+        sha512 = "yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==";
+      };
+    };
+    "prelude-ls-1.2.1" = {
+      name = "prelude-ls";
+      packageName = "prelude-ls";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz";
+        sha512 = "vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==";
+      };
+    };
+    "prepend-http-1.0.4" = {
+      name = "prepend-http";
+      packageName = "prepend-http";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz";
+        sha512 = "PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==";
+      };
+    };
+    "preserve-0.2.0" = {
+      name = "preserve";
+      packageName = "preserve";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz";
+        sha512 = "s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==";
+      };
+    };
+    "pretty-hrtime-1.0.3" = {
+      name = "pretty-hrtime";
+      packageName = "pretty-hrtime";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz";
+        sha512 = "66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==";
+      };
+    };
+    "process-nextick-args-2.0.1" = {
+      name = "process-nextick-args";
+      packageName = "process-nextick-args";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+        sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
+      };
+    };
+    "progress-2.0.3" = {
+      name = "progress";
+      packageName = "progress";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz";
+        sha512 = "7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==";
+      };
+    };
+    "proto-list-1.2.4" = {
+      name = "proto-list";
+      packageName = "proto-list";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz";
+        sha512 = "vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==";
+      };
+    };
+    "psl-1.9.0" = {
+      name = "psl";
+      packageName = "psl";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz";
+        sha512 = "E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==";
+      };
+    };
+    "pump-2.0.1" = {
+      name = "pump";
+      packageName = "pump";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz";
+        sha512 = "ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==";
+      };
+    };
+    "pumpify-1.5.1" = {
+      name = "pumpify";
+      packageName = "pumpify";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz";
+        sha512 = "oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==";
+      };
+    };
+    "punycode-2.3.0" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz";
+        sha512 = "rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==";
+      };
+    };
+    "q-1.5.1" = {
+      name = "q";
+      packageName = "q";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/q/-/q-1.5.1.tgz";
+        sha512 = "kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==";
+      };
+    };
+    "qs-6.5.3" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz";
+        sha512 = "qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==";
+      };
+    };
+    "queue-microtask-1.2.3" = {
+      name = "queue-microtask";
+      packageName = "queue-microtask";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz";
+        sha512 = "NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==";
+      };
+    };
+    "randomatic-3.1.1" = {
+      name = "randomatic";
+      packageName = "randomatic";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz";
+        sha512 = "TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==";
+      };
+    };
+    "randombytes-2.1.0" = {
+      name = "randombytes";
+      packageName = "randombytes";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz";
+        sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==";
+      };
+    };
+    "read-pkg-1.1.0" = {
+      name = "read-pkg";
+      packageName = "read-pkg";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz";
+        sha512 = "7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==";
+      };
+    };
+    "read-pkg-up-1.0.1" = {
+      name = "read-pkg-up";
+      packageName = "read-pkg-up";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz";
+        sha512 = "WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==";
+      };
+    };
+    "readable-stream-1.1.14" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "1.1.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";
+        sha512 = "+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==";
+      };
+    };
+    "readable-stream-2.3.8" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "2.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz";
+        sha512 = "8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==";
+      };
+    };
+    "readdirp-2.2.1" = {
+      name = "readdirp";
+      packageName = "readdirp";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz";
+        sha512 = "1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==";
+      };
+    };
+    "readdirp-3.6.0" = {
+      name = "readdirp";
+      packageName = "readdirp";
+      version = "3.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz";
+        sha512 = "hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==";
+      };
+    };
+    "rechoir-0.6.2" = {
+      name = "rechoir";
+      packageName = "rechoir";
+      version = "0.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz";
+        sha512 = "HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==";
+      };
+    };
+    "regex-cache-0.4.4" = {
+      name = "regex-cache";
+      packageName = "regex-cache";
+      version = "0.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz";
+        sha512 = "nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==";
+      };
+    };
+    "regex-not-1.0.2" = {
+      name = "regex-not";
+      packageName = "regex-not";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz";
+        sha512 = "J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==";
+      };
+    };
+    "remove-bom-buffer-3.0.0" = {
+      name = "remove-bom-buffer";
+      packageName = "remove-bom-buffer";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz";
+        sha512 = "8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==";
+      };
+    };
+    "remove-bom-stream-1.2.0" = {
+      name = "remove-bom-stream";
+      packageName = "remove-bom-stream";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz";
+        sha512 = "wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==";
+      };
+    };
+    "remove-trailing-separator-1.1.0" = {
+      name = "remove-trailing-separator";
+      packageName = "remove-trailing-separator";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz";
+        sha512 = "/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==";
+      };
+    };
+    "repeat-element-1.1.4" = {
+      name = "repeat-element";
+      packageName = "repeat-element";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz";
+        sha512 = "LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==";
+      };
+    };
+    "repeat-string-1.6.1" = {
+      name = "repeat-string";
+      packageName = "repeat-string";
+      version = "1.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz";
+        sha512 = "PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==";
+      };
+    };
+    "replace-ext-1.0.1" = {
+      name = "replace-ext";
+      packageName = "replace-ext";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz";
+        sha512 = "yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==";
+      };
+    };
+    "replace-homedir-1.0.0" = {
+      name = "replace-homedir";
+      packageName = "replace-homedir";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz";
+        sha512 = "CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==";
+      };
+    };
+    "request-2.88.2" = {
+      name = "request";
+      packageName = "request";
+      version = "2.88.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz";
+        sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==";
+      };
+    };
+    "require-directory-2.1.1" = {
+      name = "require-directory";
+      packageName = "require-directory";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz";
+        sha512 = "fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==";
+      };
+    };
+    "require-main-filename-1.0.1" = {
+      name = "require-main-filename";
+      packageName = "require-main-filename";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz";
+        sha512 = "IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==";
+      };
+    };
+    "resolve-1.22.3" = {
+      name = "resolve";
+      packageName = "resolve";
+      version = "1.22.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz";
+        sha512 = "P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==";
+      };
+    };
+    "resolve-dir-1.0.1" = {
+      name = "resolve-dir";
+      packageName = "resolve-dir";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz";
+        sha512 = "R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==";
+      };
+    };
+    "resolve-from-4.0.0" = {
+      name = "resolve-from";
+      packageName = "resolve-from";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz";
+        sha512 = "pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==";
+      };
+    };
+    "resolve-options-1.1.0" = {
+      name = "resolve-options";
+      packageName = "resolve-options";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz";
+        sha512 = "NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==";
+      };
+    };
+    "resolve-url-0.2.1" = {
+      name = "resolve-url";
+      packageName = "resolve-url";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz";
+        sha512 = "ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==";
+      };
+    };
+    "ret-0.1.15" = {
+      name = "ret";
+      packageName = "ret";
+      version = "0.1.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz";
+        sha512 = "TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==";
+      };
+    };
+    "reusify-1.0.4" = {
+      name = "reusify";
+      packageName = "reusify";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz";
+        sha512 = "U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==";
+      };
+    };
+    "rimraf-2.7.1" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "2.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz";
+        sha512 = "uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==";
+      };
+    };
+    "rimraf-3.0.2" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz";
+        sha512 = "JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==";
+      };
+    };
+    "run-parallel-1.2.0" = {
+      name = "run-parallel";
+      packageName = "run-parallel";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz";
+        sha512 = "5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==";
+      };
+    };
+    "safe-buffer-5.1.2" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+      };
+    };
+    "safe-buffer-5.2.1" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz";
+        sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==";
+      };
+    };
+    "safe-regex-1.1.0" = {
+      name = "safe-regex";
+      packageName = "safe-regex";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz";
+        sha512 = "aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==";
+      };
+    };
+    "safer-buffer-2.1.2" = {
+      name = "safer-buffer";
+      packageName = "safer-buffer";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+      };
+    };
+    "seek-bzip-1.0.6" = {
+      name = "seek-bzip";
+      packageName = "seek-bzip";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz";
+        sha512 = "e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==";
+      };
+    };
+    "selenium-webdriver-4.9.2" = {
+      name = "selenium-webdriver";
+      packageName = "selenium-webdriver";
+      version = "4.9.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.9.2.tgz";
+        sha512 = "0gDswAgVn6qbCYckZetQQvQK9tWW1r7LaumhiqY1/Wl/7JEWG0JANsTbZKnmGc3+cUU76zAi5/p0P8LUweXlig==";
+      };
+    };
+    "semver-5.7.1" = {
+      name = "semver";
+      packageName = "semver";
+      version = "5.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz";
+        sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==";
+      };
+    };
+    "semver-greatest-satisfied-range-1.1.0" = {
+      name = "semver-greatest-satisfied-range";
+      packageName = "semver-greatest-satisfied-range";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz";
+        sha512 = "Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==";
+      };
+    };
+    "serialize-javascript-6.0.0" = {
+      name = "serialize-javascript";
+      packageName = "serialize-javascript";
+      version = "6.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz";
+        sha512 = "Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==";
+      };
+    };
+    "set-blocking-2.0.0" = {
+      name = "set-blocking";
+      packageName = "set-blocking";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
+        sha512 = "KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==";
+      };
+    };
+    "set-value-2.0.1" = {
+      name = "set-value";
+      packageName = "set-value";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz";
+        sha512 = "JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==";
+      };
+    };
+    "setimmediate-1.0.5" = {
+      name = "setimmediate";
+      packageName = "setimmediate";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz";
+        sha512 = "MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==";
+      };
+    };
+    "shebang-command-2.0.0" = {
+      name = "shebang-command";
+      packageName = "shebang-command";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz";
+        sha512 = "kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==";
+      };
+    };
+    "shebang-regex-3.0.0" = {
+      name = "shebang-regex";
+      packageName = "shebang-regex";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz";
+        sha512 = "7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==";
+      };
+    };
+    "snapdragon-0.8.2" = {
+      name = "snapdragon";
+      packageName = "snapdragon";
+      version = "0.8.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz";
+        sha512 = "FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==";
+      };
+    };
+    "snapdragon-node-2.1.1" = {
+      name = "snapdragon-node";
+      packageName = "snapdragon-node";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz";
+        sha512 = "O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==";
+      };
+    };
+    "snapdragon-util-3.0.1" = {
+      name = "snapdragon-util";
+      packageName = "snapdragon-util";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz";
+        sha512 = "mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==";
+      };
+    };
+    "source-map-0.5.7" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.5.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz";
+        sha512 = "LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==";
+      };
+    };
+    "source-map-0.6.1" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
+        sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
+      };
+    };
+    "source-map-resolve-0.5.3" = {
+      name = "source-map-resolve";
+      packageName = "source-map-resolve";
+      version = "0.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz";
+        sha512 = "Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==";
+      };
+    };
+    "source-map-resolve-0.6.0" = {
+      name = "source-map-resolve";
+      packageName = "source-map-resolve";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz";
+        sha512 = "KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==";
+      };
+    };
+    "source-map-url-0.4.1" = {
+      name = "source-map-url";
+      packageName = "source-map-url";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz";
+        sha512 = "cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==";
+      };
+    };
+    "sparkles-1.0.1" = {
+      name = "sparkles";
+      packageName = "sparkles";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz";
+        sha512 = "dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==";
+      };
+    };
+    "spdx-correct-3.2.0" = {
+      name = "spdx-correct";
+      packageName = "spdx-correct";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz";
+        sha512 = "kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==";
+      };
+    };
+    "spdx-exceptions-2.3.0" = {
+      name = "spdx-exceptions";
+      packageName = "spdx-exceptions";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz";
+        sha512 = "/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==";
+      };
+    };
+    "spdx-expression-parse-3.0.1" = {
+      name = "spdx-expression-parse";
+      packageName = "spdx-expression-parse";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz";
+        sha512 = "cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==";
+      };
+    };
+    "spdx-license-ids-3.0.13" = {
+      name = "spdx-license-ids";
+      packageName = "spdx-license-ids";
+      version = "3.0.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz";
+        sha512 = "XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==";
+      };
+    };
+    "split-string-3.1.0" = {
+      name = "split-string";
+      packageName = "split-string";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz";
+        sha512 = "NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==";
+      };
+    };
+    "sshpk-1.17.0" = {
+      name = "sshpk";
+      packageName = "sshpk";
+      version = "1.17.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz";
+        sha512 = "/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==";
+      };
+    };
+    "stack-trace-0.0.10" = {
+      name = "stack-trace";
+      packageName = "stack-trace";
+      version = "0.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz";
+        sha512 = "KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==";
+      };
+    };
+    "static-extend-0.1.2" = {
+      name = "static-extend";
+      packageName = "static-extend";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz";
+        sha512 = "72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==";
+      };
+    };
+    "stream-exhaust-1.0.2" = {
+      name = "stream-exhaust";
+      packageName = "stream-exhaust";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz";
+        sha512 = "b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==";
+      };
+    };
+    "stream-shift-1.0.1" = {
+      name = "stream-shift";
+      packageName = "stream-shift";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz";
+        sha512 = "AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==";
+      };
+    };
+    "string-width-1.0.2" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
+        sha512 = "0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==";
+      };
+    };
+    "string-width-4.2.3" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "4.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz";
+        sha512 = "wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==";
+      };
+    };
+    "string_decoder-0.10.31" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "0.10.31";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
+        sha512 = "ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==";
+      };
+    };
+    "string_decoder-1.1.1" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+      };
+    };
+    "strip-ansi-3.0.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
+        sha512 = "VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==";
+      };
+    };
+    "strip-ansi-6.0.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz";
+        sha512 = "Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==";
+      };
+    };
+    "strip-bom-2.0.0" = {
+      name = "strip-bom";
+      packageName = "strip-bom";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz";
+        sha512 = "kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==";
+      };
+    };
+    "strip-bom-string-1.0.0" = {
+      name = "strip-bom-string";
+      packageName = "strip-bom-string";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz";
+        sha512 = "uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==";
+      };
+    };
+    "strip-dirs-2.1.0" = {
+      name = "strip-dirs";
+      packageName = "strip-dirs";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz";
+        sha512 = "JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==";
+      };
+    };
+    "strip-json-comments-3.1.1" = {
+      name = "strip-json-comments";
+      packageName = "strip-json-comments";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz";
+        sha512 = "6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==";
+      };
+    };
+    "strip-outer-1.0.1" = {
+      name = "strip-outer";
+      packageName = "strip-outer";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz";
+        sha512 = "k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==";
+      };
+    };
+    "supports-color-2.0.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
+        sha512 = "KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==";
+      };
+    };
+    "supports-color-7.2.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "7.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz";
+        sha512 = "qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==";
+      };
+    };
+    "supports-color-8.1.1" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "8.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz";
+        sha512 = "MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==";
+      };
+    };
+    "supports-preserve-symlinks-flag-1.0.0" = {
+      name = "supports-preserve-symlinks-flag";
+      packageName = "supports-preserve-symlinks-flag";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz";
+        sha512 = "ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==";
+      };
+    };
+    "sver-compat-1.5.0" = {
+      name = "sver-compat";
+      packageName = "sver-compat";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz";
+        sha512 = "aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==";
+      };
+    };
+    "tar-stream-1.6.2" = {
+      name = "tar-stream";
+      packageName = "tar-stream";
+      version = "1.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz";
+        sha512 = "rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==";
+      };
+    };
+    "text-table-0.2.0" = {
+      name = "text-table";
+      packageName = "text-table";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz";
+        sha512 = "N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==";
+      };
+    };
+    "through-2.3.8" = {
+      name = "through";
+      packageName = "through";
+      version = "2.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz";
+        sha512 = "w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==";
+      };
+    };
+    "through2-2.0.5" = {
+      name = "through2";
+      packageName = "through2";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz";
+        sha512 = "/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==";
+      };
+    };
+    "through2-3.0.2" = {
+      name = "through2";
+      packageName = "through2";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz";
+        sha512 = "enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==";
+      };
+    };
+    "through2-filter-3.0.0" = {
+      name = "through2-filter";
+      packageName = "through2-filter";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz";
+        sha512 = "jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==";
+      };
+    };
+    "time-stamp-1.1.0" = {
+      name = "time-stamp";
+      packageName = "time-stamp";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz";
+        sha512 = "gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==";
+      };
+    };
+    "timed-out-4.0.1" = {
+      name = "timed-out";
+      packageName = "timed-out";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz";
+        sha512 = "G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==";
+      };
+    };
+    "timers-ext-0.1.7" = {
+      name = "timers-ext";
+      packageName = "timers-ext";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz";
+        sha512 = "b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==";
+      };
+    };
+    "tmp-0.2.1" = {
+      name = "tmp";
+      packageName = "tmp";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz";
+        sha512 = "76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==";
+      };
+    };
+    "to-absolute-glob-2.0.2" = {
+      name = "to-absolute-glob";
+      packageName = "to-absolute-glob";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz";
+        sha512 = "rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==";
+      };
+    };
+    "to-buffer-1.1.1" = {
+      name = "to-buffer";
+      packageName = "to-buffer";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz";
+        sha512 = "lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==";
+      };
+    };
+    "to-object-path-0.3.0" = {
+      name = "to-object-path";
+      packageName = "to-object-path";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz";
+        sha512 = "9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==";
+      };
+    };
+    "to-regex-3.0.2" = {
+      name = "to-regex";
+      packageName = "to-regex";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz";
+        sha512 = "FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==";
+      };
+    };
+    "to-regex-range-2.1.1" = {
+      name = "to-regex-range";
+      packageName = "to-regex-range";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz";
+        sha512 = "ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==";
+      };
+    };
+    "to-regex-range-5.0.1" = {
+      name = "to-regex-range";
+      packageName = "to-regex-range";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";
+        sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==";
+      };
+    };
+    "to-through-2.0.0" = {
+      name = "to-through";
+      packageName = "to-through";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz";
+        sha512 = "+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==";
+      };
+    };
+    "touch-0.0.3" = {
+      name = "touch";
+      packageName = "touch";
+      version = "0.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz";
+        sha512 = "/LQ54KM9rPf3rGXGo2UPQWx3ol242Zg6Whq27H5DEmZhCJo+pm9N5BzRGepO9vTVhYxpXJdcc1+3uaYt9NyeKg==";
+      };
+    };
+    "tough-cookie-2.5.0" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "2.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz";
+        sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==";
+      };
+    };
+    "traverse-0.3.9" = {
+      name = "traverse";
+      packageName = "traverse";
+      version = "0.3.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz";
+        sha512 = "iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==";
+      };
+    };
+    "tree-kill-1.2.2" = {
+      name = "tree-kill";
+      packageName = "tree-kill";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz";
+        sha512 = "L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==";
+      };
+    };
+    "trim-repeated-1.0.0" = {
+      name = "trim-repeated";
+      packageName = "trim-repeated";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz";
+        sha512 = "pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==";
+      };
+    };
+    "tunnel-agent-0.6.0" = {
+      name = "tunnel-agent";
+      packageName = "tunnel-agent";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+        sha512 = "McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==";
+      };
+    };
+    "tweetnacl-0.14.5" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "0.14.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+        sha512 = "KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==";
+      };
+    };
+    "type-1.2.0" = {
+      name = "type";
+      packageName = "type";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type/-/type-1.2.0.tgz";
+        sha512 = "+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==";
+      };
+    };
+    "type-2.7.2" = {
+      name = "type";
+      packageName = "type";
+      version = "2.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type/-/type-2.7.2.tgz";
+        sha512 = "dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==";
+      };
+    };
+    "type-check-0.4.0" = {
+      name = "type-check";
+      packageName = "type-check";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz";
+        sha512 = "XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==";
+      };
+    };
+    "type-detect-4.0.8" = {
+      name = "type-detect";
+      packageName = "type-detect";
+      version = "4.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz";
+        sha512 = "0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==";
+      };
+    };
+    "type-fest-0.20.2" = {
+      name = "type-fest";
+      packageName = "type-fest";
+      version = "0.20.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz";
+        sha512 = "Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==";
+      };
+    };
+    "typedarray-0.0.6" = {
+      name = "typedarray";
+      packageName = "typedarray";
+      version = "0.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
+        sha512 = "/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==";
+      };
+    };
+    "unbzip2-stream-1.4.3" = {
+      name = "unbzip2-stream";
+      packageName = "unbzip2-stream";
+      version = "1.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz";
+        sha512 = "mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==";
+      };
+    };
+    "unc-path-regex-0.1.2" = {
+      name = "unc-path-regex";
+      packageName = "unc-path-regex";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz";
+        sha512 = "eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==";
+      };
+    };
+    "undertaker-1.3.0" = {
+      name = "undertaker";
+      packageName = "undertaker";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz";
+        sha512 = "/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==";
+      };
+    };
+    "undertaker-registry-1.0.1" = {
+      name = "undertaker-registry";
+      packageName = "undertaker-registry";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz";
+        sha512 = "UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==";
+      };
+    };
+    "union-value-1.0.1" = {
+      name = "union-value";
+      packageName = "union-value";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz";
+        sha512 = "tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==";
+      };
+    };
+    "unique-stream-2.3.1" = {
+      name = "unique-stream";
+      packageName = "unique-stream";
+      version = "2.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz";
+        sha512 = "2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==";
+      };
+    };
+    "universalify-0.1.2" = {
+      name = "universalify";
+      packageName = "universalify";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz";
+        sha512 = "rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==";
+      };
+    };
+    "unset-value-1.0.0" = {
+      name = "unset-value";
+      packageName = "unset-value";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz";
+        sha512 = "PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==";
+      };
+    };
+    "untildify-3.0.3" = {
+      name = "untildify";
+      packageName = "untildify";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz";
+        sha512 = "iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==";
+      };
+    };
+    "unzip-response-2.0.1" = {
+      name = "unzip-response";
+      packageName = "unzip-response";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz";
+        sha512 = "N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==";
+      };
+    };
+    "upath-1.2.0" = {
+      name = "upath";
+      packageName = "upath";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz";
+        sha512 = "aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==";
+      };
+    };
+    "uri-js-4.4.1" = {
+      name = "uri-js";
+      packageName = "uri-js";
+      version = "4.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz";
+        sha512 = "7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==";
+      };
+    };
+    "urix-0.1.0" = {
+      name = "urix";
+      packageName = "urix";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz";
+        sha512 = "Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==";
+      };
+    };
+    "url-parse-lax-1.0.0" = {
+      name = "url-parse-lax";
+      packageName = "url-parse-lax";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz";
+        sha512 = "BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==";
+      };
+    };
+    "url-to-options-1.0.1" = {
+      name = "url-to-options";
+      packageName = "url-to-options";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz";
+        sha512 = "0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==";
+      };
+    };
+    "use-3.1.1" = {
+      name = "use";
+      packageName = "use";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/use/-/use-3.1.1.tgz";
+        sha512 = "cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==";
+      };
+    };
+    "utf-8-validate-6.0.3" = {
+      name = "utf-8-validate";
+      packageName = "utf-8-validate";
+      version = "6.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.3.tgz";
+        sha512 = "uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==";
+      };
+    };
+    "util-deprecate-1.0.2" = {
+      name = "util-deprecate";
+      packageName = "util-deprecate";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha512 = "EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==";
+      };
+    };
+    "uuid-3.4.0" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";
+        sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==";
+      };
+    };
+    "v8flags-3.2.0" = {
+      name = "v8flags";
+      packageName = "v8flags";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz";
+        sha512 = "mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==";
+      };
+    };
+    "validate-npm-package-license-3.0.4" = {
+      name = "validate-npm-package-license";
+      packageName = "validate-npm-package-license";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz";
+        sha512 = "DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==";
+      };
+    };
+    "value-or-function-3.0.0" = {
+      name = "value-or-function";
+      packageName = "value-or-function";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz";
+        sha512 = "jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==";
+      };
+    };
+    "verror-1.10.0" = {
+      name = "verror";
+      packageName = "verror";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
+        sha512 = "ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==";
+      };
+    };
+    "vinyl-2.2.1" = {
+      name = "vinyl";
+      packageName = "vinyl";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz";
+        sha512 = "LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==";
+      };
+    };
+    "vinyl-fs-3.0.3" = {
+      name = "vinyl-fs";
+      packageName = "vinyl-fs";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz";
+        sha512 = "vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==";
+      };
+    };
+    "vinyl-sourcemap-1.1.0" = {
+      name = "vinyl-sourcemap";
+      packageName = "vinyl-sourcemap";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz";
+        sha512 = "NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==";
+      };
+    };
+    "which-1.3.1" = {
+      name = "which";
+      packageName = "which";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
+        sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
+      };
+    };
+    "which-2.0.2" = {
+      name = "which";
+      packageName = "which";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz";
+        sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==";
+      };
+    };
+    "which-module-1.0.0" = {
+      name = "which-module";
+      packageName = "which-module";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz";
+        sha512 = "F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==";
+      };
+    };
+    "window-size-0.1.4" = {
+      name = "window-size";
+      packageName = "window-size";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz";
+        sha512 = "2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==";
+      };
+    };
+    "winreg-1.2.4" = {
+      name = "winreg";
+      packageName = "winreg";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/winreg/-/winreg-1.2.4.tgz";
+        sha512 = "IHpzORub7kYlb8A43Iig3reOvlcBJGX9gZ0WycHhghHtA65X0LYnMRuJs+aH1abVnMJztQkvQNlltnbPi5aGIA==";
+      };
+    };
+    "word-wrap-1.2.3" = {
+      name = "word-wrap";
+      packageName = "word-wrap";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz";
+        sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==";
+      };
+    };
+    "workerpool-6.2.1" = {
+      name = "workerpool";
+      packageName = "workerpool";
+      version = "6.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz";
+        sha512 = "ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==";
+      };
+    };
+    "wrap-ansi-2.1.0" = {
+      name = "wrap-ansi";
+      packageName = "wrap-ansi";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz";
+        sha512 = "vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==";
+      };
+    };
+    "wrap-ansi-7.0.0" = {
+      name = "wrap-ansi";
+      packageName = "wrap-ansi";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz";
+        sha512 = "YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==";
+      };
+    };
+    "wrappy-1.0.2" = {
+      name = "wrappy";
+      packageName = "wrappy";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
+        sha512 = "l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==";
+      };
+    };
+    "ws-8.13.0" = {
+      name = "ws";
+      packageName = "ws";
+      version = "8.13.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz";
+        sha512 = "x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==";
+      };
+    };
+    "xtend-4.0.2" = {
+      name = "xtend";
+      packageName = "xtend";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz";
+        sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==";
+      };
+    };
+    "y18n-3.2.2" = {
+      name = "y18n";
+      packageName = "y18n";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz";
+        sha512 = "uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==";
+      };
+    };
+    "y18n-5.0.8" = {
+      name = "y18n";
+      packageName = "y18n";
+      version = "5.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz";
+        sha512 = "0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==";
+      };
+    };
+    "yargs-16.2.0" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "16.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz";
+        sha512 = "D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==";
+      };
+    };
+    "yargs-17.7.2" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "17.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz";
+        sha512 = "7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==";
+      };
+    };
+    "yargs-3.32.0" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "3.32.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz";
+        sha512 = "ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg==";
+      };
+    };
+    "yargs-7.1.2" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "7.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz";
+        sha512 = "ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==";
+      };
+    };
+    "yargs-parser-20.2.4" = {
+      name = "yargs-parser";
+      packageName = "yargs-parser";
+      version = "20.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz";
+        sha512 = "WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==";
+      };
+    };
+    "yargs-parser-21.1.1" = {
+      name = "yargs-parser";
+      packageName = "yargs-parser";
+      version = "21.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz";
+        sha512 = "tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==";
+      };
+    };
+    "yargs-parser-5.0.1" = {
+      name = "yargs-parser";
+      packageName = "yargs-parser";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz";
+        sha512 = "wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==";
+      };
+    };
+    "yargs-unparser-2.0.0" = {
+      name = "yargs-unparser";
+      packageName = "yargs-unparser";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz";
+        sha512 = "7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==";
+      };
+    };
+    "yauzl-2.10.0" = {
+      name = "yauzl";
+      packageName = "yauzl";
+      version = "2.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz";
+        sha512 = "p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==";
+      };
+    };
+    "yocto-queue-0.1.0" = {
+      name = "yocto-queue";
+      packageName = "yocto-queue";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz";
+        sha512 = "rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==";
+      };
+    };
+  };
+in
+{
+  "onlykey-git+https://github.com/trustcrypto/OnlyKey-App.git#v5.5.0" = nodeEnv.buildNodePackage {
+    name = "OnlyKey";
+    packageName = "OnlyKey";
+    version = "5.5.0";
+    src = fetchgit {
+      url = "https://github.com/trustcrypto/OnlyKey-App.git";
+      rev = "5401c2966638d04c19035fff85e95bfd3bce5511";
+      sha256 = "f0c49dafe8210813de1a9eb7622d53fa0c84c17384516defaa2f42ac29a8cebc";
+    };
+    dependencies = [
+      sources."@eslint-community/eslint-utils-4.4.0"
+      sources."@eslint-community/regexpp-4.5.1"
+      sources."@eslint/eslintrc-2.0.3"
+      sources."@eslint/js-8.42.0"
+      (sources."@gulp-sourcemaps/identity-map-2.0.1" // {
+        dependencies = [
+          sources."acorn-6.4.2"
+          sources."source-map-0.6.1"
+          sources."through2-3.0.2"
+        ];
+      })
+      (sources."@gulp-sourcemaps/map-sources-1.0.0" // {
+        dependencies = [
+          sources."normalize-path-2.1.1"
+        ];
+      })
+      sources."@humanwhocodes/config-array-0.11.10"
+      sources."@humanwhocodes/module-importer-1.0.1"
+      sources."@humanwhocodes/object-schema-1.2.1"
+      sources."@nodelib/fs.scandir-2.1.5"
+      sources."@nodelib/fs.stat-2.0.5"
+      sources."@nodelib/fs.walk-1.2.8"
+      sources."abbrev-1.1.1"
+      sources."acorn-8.8.2"
+      sources."acorn-jsx-5.3.2"
+      sources."ajv-6.12.6"
+      sources."ansi-colors-1.1.0"
+      sources."ansi-gray-0.1.1"
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-2.2.1"
+      sources."ansi-wrap-0.1.0"
+      (sources."anymatch-2.0.0" // {
+        dependencies = [
+          sources."normalize-path-2.1.1"
+        ];
+      })
+      sources."append-buffer-1.0.2"
+      sources."applescript-1.0.0"
+      sources."archy-1.0.0"
+      sources."argparse-2.0.1"
+      sources."arr-diff-4.0.0"
+      sources."arr-filter-1.1.2"
+      sources."arr-flatten-1.1.0"
+      sources."arr-map-2.0.2"
+      sources."arr-union-3.1.0"
+      sources."array-each-1.0.1"
+      (sources."array-initial-1.1.0" // {
+        dependencies = [
+          sources."is-number-4.0.0"
+        ];
+      })
+      (sources."array-last-1.3.0" // {
+        dependencies = [
+          sources."is-number-4.0.0"
+        ];
+      })
+      sources."array-slice-1.1.0"
+      (sources."array-sort-1.0.0" // {
+        dependencies = [
+          sources."kind-of-5.1.0"
+        ];
+      })
+      sources."array-unique-0.3.2"
+      sources."asn1-0.2.6"
+      sources."assert-plus-1.0.0"
+      sources."assertion-error-1.1.0"
+      sources."assign-symbols-1.0.0"
+      sources."async-done-1.3.2"
+      sources."async-each-1.0.6"
+      sources."async-settle-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."atob-2.1.2"
+      sources."auto-launch-5.0.6"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.12.0"
+      sources."bach-1.2.0"
+      sources."balanced-match-1.0.2"
+      (sources."base-0.11.2" // {
+        dependencies = [
+          sources."define-property-1.0.0"
+        ];
+      })
+      sources."base64-js-1.5.1"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."binary-0.3.0"
+      sources."binary-extensions-1.13.1"
+      sources."bindings-1.5.0"
+      sources."bl-1.2.3"
+      sources."brace-expansion-1.1.11"
+      (sources."braces-2.3.2" // {
+        dependencies = [
+          sources."extend-shallow-2.0.1"
+        ];
+      })
+      sources."browser-stdout-1.3.1"
+      sources."buffer-5.7.1"
+      sources."buffer-alloc-1.2.0"
+      sources."buffer-alloc-unsafe-1.1.0"
+      sources."buffer-crc32-0.2.13"
+      sources."buffer-equal-1.0.1"
+      sources."buffer-fill-1.0.0"
+      sources."buffer-from-1.1.2"
+      sources."buffers-0.1.1"
+      sources."bufferutil-4.0.7"
+      sources."cache-base-1.0.1"
+      sources."call-bind-1.0.2"
+      sources."callsites-3.1.0"
+      sources."camelcase-2.1.1"
+      sources."capture-stack-trace-1.0.2"
+      sources."caseless-0.12.0"
+      sources."caw-2.0.1"
+      sources."chai-4.3.7"
+      sources."chai-as-promised-7.1.1"
+      sources."chainsaw-0.1.0"
+      sources."chalk-1.1.3"
+      sources."check-error-1.0.2"
+      (sources."chokidar-2.1.8" // {
+        dependencies = [
+          (sources."glob-parent-3.1.0" // {
+            dependencies = [
+              sources."is-glob-3.1.0"
+            ];
+          })
+        ];
+      })
+      (sources."class-utils-0.3.6" // {
+        dependencies = [
+          sources."define-property-0.2.5"
+          (sources."is-accessor-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          (sources."is-data-descriptor-0.1.4" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          sources."is-descriptor-0.1.6"
+          sources."kind-of-5.1.0"
+        ];
+      })
+      sources."cliui-3.2.0"
+      sources."clone-2.1.2"
+      sources."clone-buffer-1.0.0"
+      sources."clone-stats-1.0.0"
+      sources."cloneable-readable-1.1.3"
+      sources."code-point-at-1.1.0"
+      sources."collection-map-1.0.0"
+      sources."collection-visit-1.0.0"
+      sources."color-convert-2.0.1"
+      sources."color-name-1.1.4"
+      sources."color-support-1.1.3"
+      sources."combined-stream-1.0.8"
+      sources."commander-2.20.3"
+      sources."component-emitter-1.3.0"
+      sources."concat-map-0.0.1"
+      sources."concat-stream-1.6.2"
+      sources."config-chain-1.1.13"
+      sources."convert-source-map-1.9.0"
+      sources."copy-descriptor-0.1.1"
+      (sources."copy-props-2.0.5" // {
+        dependencies = [
+          sources."is-plain-object-5.0.0"
+        ];
+      })
+      sources."core-util-is-1.0.3"
+      sources."create-error-class-3.0.2"
+      sources."cross-spawn-7.0.3"
+      (sources."css-3.0.0" // {
+        dependencies = [
+          sources."source-map-0.6.1"
+          sources."source-map-resolve-0.6.0"
+        ];
+      })
+      sources."d-1.0.1"
+      sources."dashdash-1.14.1"
+      sources."debounce-1.2.1"
+      sources."debug-4.3.4"
+      (sources."debug-fabulous-1.1.0" // {
+        dependencies = [
+          sources."debug-3.2.7"
+        ];
+      })
+      sources."decamelize-1.2.0"
+      sources."decode-uri-component-0.2.2"
+      sources."decompress-4.2.1"
+      sources."decompress-tar-4.1.1"
+      (sources."decompress-tarbz2-4.1.1" // {
+        dependencies = [
+          sources."file-type-6.2.0"
+        ];
+      })
+      sources."decompress-targz-4.1.1"
+      (sources."decompress-unzip-4.0.1" // {
+        dependencies = [
+          sources."file-type-3.9.0"
+        ];
+      })
+      (sources."decompress-zip-0.3.3" // {
+        dependencies = [
+          sources."isarray-0.0.1"
+          sources."readable-stream-1.1.14"
+          sources."string_decoder-0.10.31"
+        ];
+      })
+      sources."deep-eql-4.1.3"
+      sources."deep-is-0.1.4"
+      (sources."default-compare-1.0.0" // {
+        dependencies = [
+          sources."kind-of-5.1.0"
+        ];
+      })
+      sources."default-resolution-2.0.0"
+      sources."define-properties-1.2.0"
+      sources."define-property-2.0.2"
+      sources."delayed-stream-1.0.0"
+      sources."detect-file-1.0.0"
+      sources."detect-newline-2.1.0"
+      sources."diff-5.0.0"
+      sources."doctrine-3.0.0"
+      (sources."download-5.0.3" // {
+        dependencies = [
+          sources."get-stream-3.0.0"
+        ];
+      })
+      sources."duplexer3-0.1.5"
+      sources."duplexify-3.7.1"
+      sources."each-props-1.3.2"
+      sources."ecc-jsbn-0.1.2"
+      sources."emoji-regex-8.0.0"
+      sources."end-of-stream-1.4.4"
+      sources."error-ex-1.3.2"
+      sources."es5-ext-0.10.62"
+      sources."es6-iterator-2.0.3"
+      sources."es6-symbol-3.1.3"
+      sources."es6-weak-map-2.0.3"
+      sources."escalade-3.1.1"
+      sources."escape-string-regexp-1.0.5"
+      (sources."eslint-8.42.0" // {
+        dependencies = [
+          sources."ansi-regex-5.0.1"
+          sources."ansi-styles-4.3.0"
+          sources."chalk-4.1.2"
+          sources."escape-string-regexp-4.0.0"
+          sources."strip-ansi-6.0.1"
+          sources."supports-color-7.2.0"
+        ];
+      })
+      sources."eslint-scope-7.2.0"
+      sources."eslint-visitor-keys-3.4.1"
+      sources."espree-9.5.2"
+      sources."esquery-1.5.0"
+      sources."esrecurse-4.3.0"
+      sources."estraverse-5.3.0"
+      sources."esutils-2.0.3"
+      sources."event-emitter-0.3.5"
+      (sources."expand-brackets-2.1.4" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."define-property-0.2.5"
+          sources."extend-shallow-2.0.1"
+          (sources."is-accessor-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          (sources."is-data-descriptor-0.1.4" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          sources."is-descriptor-0.1.6"
+          sources."kind-of-5.1.0"
+          sources."ms-2.0.0"
+        ];
+      })
+      (sources."expand-range-1.8.2" // {
+        dependencies = [
+          sources."fill-range-2.2.4"
+          sources."is-number-2.1.0"
+          sources."isobject-2.1.0"
+          sources."kind-of-3.2.2"
+        ];
+      })
+      sources."expand-tilde-2.0.2"
+      (sources."ext-1.7.0" // {
+        dependencies = [
+          sources."type-2.7.2"
+        ];
+      })
+      sources."extend-3.0.2"
+      (sources."extend-shallow-3.0.2" // {
+        dependencies = [
+          sources."is-extendable-1.0.1"
+        ];
+      })
+      (sources."extglob-2.0.4" // {
+        dependencies = [
+          sources."define-property-1.0.0"
+          sources."extend-shallow-2.0.1"
+        ];
+      })
+      sources."extsprintf-1.3.0"
+      sources."fancy-log-1.3.3"
+      sources."fast-deep-equal-3.1.3"
+      sources."fast-json-stable-stringify-2.1.0"
+      sources."fast-levenshtein-2.0.6"
+      sources."fastq-1.15.0"
+      sources."fd-slicer-1.1.0"
+      sources."file-entry-cache-6.0.1"
+      sources."file-exists-2.0.0"
+      sources."file-type-5.2.0"
+      sources."file-uri-to-path-1.0.0"
+      sources."filename-regex-2.0.1"
+      sources."filename-reserved-regex-2.0.0"
+      sources."filenamify-2.1.0"
+      (sources."fill-range-4.0.0" // {
+        dependencies = [
+          sources."extend-shallow-2.0.1"
+        ];
+      })
+      sources."find-up-5.0.0"
+      sources."findup-sync-3.0.0"
+      sources."fined-1.2.0"
+      sources."flagged-respawn-1.0.1"
+      sources."flat-5.0.2"
+      (sources."flat-cache-3.0.4" // {
+        dependencies = [
+          sources."rimraf-3.0.2"
+        ];
+      })
+      sources."flatted-3.2.7"
+      sources."flush-write-stream-1.1.1"
+      sources."for-in-1.0.2"
+      sources."for-own-1.0.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.3"
+      sources."fragment-cache-0.2.1"
+      sources."fs-constants-1.0.0"
+      sources."fs-extra-7.0.1"
+      (sources."fs-jetpack-5.1.0" // {
+        dependencies = [
+          sources."brace-expansion-2.0.1"
+          sources."minimatch-5.1.6"
+        ];
+      })
+      sources."fs-mkdirp-stream-1.0.0"
+      sources."fs.realpath-1.0.0"
+      sources."fsevents-1.2.13"
+      sources."function-bind-1.1.1"
+      sources."get-caller-file-1.0.3"
+      sources."get-func-name-2.0.0"
+      sources."get-intrinsic-1.2.1"
+      sources."get-proxy-2.1.0"
+      sources."get-stream-2.3.1"
+      sources."get-value-2.0.6"
+      sources."getpass-0.1.7"
+      sources."glob-7.2.3"
+      (sources."glob-base-0.3.0" // {
+        dependencies = [
+          sources."glob-parent-2.0.0"
+          sources."is-extglob-1.0.0"
+          sources."is-glob-2.0.1"
+        ];
+      })
+      sources."glob-parent-6.0.2"
+      (sources."glob-stream-6.1.0" // {
+        dependencies = [
+          sources."glob-parent-3.1.0"
+          sources."is-glob-3.1.0"
+        ];
+      })
+      sources."glob-watcher-5.0.5"
+      sources."global-modules-1.0.0"
+      (sources."global-prefix-1.0.2" // {
+        dependencies = [
+          sources."which-1.3.1"
+        ];
+      })
+      sources."globals-13.20.0"
+      sources."glogg-1.0.2"
+      (sources."got-6.7.1" // {
+        dependencies = [
+          sources."get-stream-3.0.0"
+        ];
+      })
+      sources."graceful-fs-4.2.11"
+      sources."graphemer-1.4.0"
+      sources."gulp-4.0.2"
+      (sources."gulp-cli-2.3.0" // {
+        dependencies = [
+          sources."camelcase-3.0.0"
+          sources."yargs-7.1.2"
+        ];
+      })
+      (sources."gulp-sourcemaps-3.0.0" // {
+        dependencies = [
+          sources."acorn-6.4.2"
+          sources."source-map-0.6.1"
+        ];
+      })
+      sources."gulplog-1.0.0"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.1.5"
+      sources."has-1.0.3"
+      sources."has-ansi-2.0.0"
+      sources."has-flag-4.0.0"
+      sources."has-property-descriptors-1.0.0"
+      sources."has-proto-1.0.1"
+      sources."has-symbol-support-x-1.4.2"
+      sources."has-symbols-1.0.3"
+      sources."has-to-string-tag-x-1.4.1"
+      sources."has-value-1.0.0"
+      (sources."has-values-1.0.0" // {
+        dependencies = [
+          sources."kind-of-4.0.0"
+        ];
+      })
+      sources."he-1.2.0"
+      sources."homedir-polyfill-1.0.3"
+      sources."hosted-git-info-2.8.9"
+      sources."http-signature-1.2.0"
+      sources."ieee754-1.2.1"
+      sources."ignore-5.2.4"
+      sources."immediate-3.0.6"
+      sources."import-fresh-3.3.0"
+      sources."imurmurhash-0.1.4"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.4"
+      sources."ini-1.3.8"
+      sources."interpret-1.4.0"
+      sources."invert-kv-1.0.0"
+      sources."is-absolute-1.0.0"
+      sources."is-accessor-descriptor-1.0.0"
+      sources."is-arrayish-0.2.1"
+      sources."is-binary-path-1.0.1"
+      sources."is-buffer-1.1.6"
+      sources."is-core-module-2.12.1"
+      sources."is-data-descriptor-1.0.0"
+      sources."is-descriptor-1.0.2"
+      sources."is-dotfile-1.0.3"
+      sources."is-equal-shallow-0.1.3"
+      sources."is-extendable-0.1.1"
+      sources."is-extglob-2.1.1"
+      sources."is-fullwidth-code-point-1.0.0"
+      sources."is-glob-4.0.3"
+      sources."is-natural-number-4.0.1"
+      sources."is-negated-glob-1.0.0"
+      (sources."is-number-3.0.0" // {
+        dependencies = [
+          sources."kind-of-3.2.2"
+        ];
+      })
+      sources."is-object-1.0.2"
+      sources."is-path-inside-3.0.3"
+      sources."is-plain-obj-2.1.0"
+      sources."is-plain-object-2.0.4"
+      sources."is-posix-bracket-0.1.1"
+      sources."is-primitive-2.0.0"
+      sources."is-promise-2.2.2"
+      sources."is-redirect-1.0.0"
+      sources."is-relative-1.0.0"
+      sources."is-retry-allowed-1.2.0"
+      sources."is-stream-1.1.0"
+      sources."is-typedarray-1.0.0"
+      sources."is-unc-path-1.0.0"
+      sources."is-unicode-supported-0.1.0"
+      sources."is-utf8-0.2.1"
+      sources."is-valid-glob-1.0.0"
+      sources."is-windows-1.0.2"
+      sources."isarray-1.0.0"
+      sources."isexe-2.0.0"
+      sources."isobject-3.0.1"
+      sources."isstream-0.1.2"
+      sources."isurl-1.0.0"
+      sources."js-sha256-0.9.0"
+      sources."js-yaml-4.1.0"
+      sources."jsbn-0.1.1"
+      sources."json-11.0.0"
+      sources."json-schema-0.4.0"
+      sources."json-schema-traverse-0.4.1"
+      sources."json-stable-stringify-without-jsonify-1.0.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsonfile-4.0.0"
+      sources."jsprim-1.4.2"
+      sources."jszip-3.10.1"
+      sources."just-debounce-1.1.0"
+      sources."kind-of-6.0.3"
+      sources."last-run-1.1.1"
+      sources."lazystream-1.0.1"
+      sources."lcid-1.0.0"
+      sources."lead-1.0.0"
+      sources."levn-0.4.1"
+      sources."lie-3.3.0"
+      sources."liftoff-3.1.0"
+      sources."load-json-file-1.1.0"
+      sources."locate-path-6.0.0"
+      sources."lodash.merge-4.6.2"
+      (sources."log-symbols-4.1.0" // {
+        dependencies = [
+          sources."ansi-styles-4.3.0"
+          sources."chalk-4.1.2"
+          sources."supports-color-7.2.0"
+        ];
+      })
+      sources."loupe-2.3.6"
+      sources."lowercase-keys-1.0.1"
+      sources."lru-queue-0.1.0"
+      (sources."make-dir-1.3.0" // {
+        dependencies = [
+          sources."pify-3.0.0"
+        ];
+      })
+      sources."make-iterator-1.0.1"
+      sources."map-cache-0.2.2"
+      sources."map-visit-1.0.0"
+      (sources."matchdep-2.0.0" // {
+        dependencies = [
+          sources."findup-sync-2.0.0"
+          sources."is-glob-3.1.0"
+        ];
+      })
+      sources."math-random-1.0.4"
+      sources."memoizee-0.4.15"
+      sources."merge-1.2.1"
+      sources."micromatch-3.1.10"
+      sources."mime-db-1.52.0"
+      sources."mime-types-2.1.35"
+      sources."minimatch-3.1.2"
+      sources."minimist-1.2.8"
+      (sources."mixin-deep-1.3.2" // {
+        dependencies = [
+          sources."is-extendable-1.0.1"
+        ];
+      })
+      sources."mkdirp-0.5.6"
+      sources."mkpath-0.1.0"
+      (sources."mocha-10.2.0" // {
+        dependencies = [
+          sources."ansi-colors-4.1.1"
+          sources."ansi-regex-5.0.1"
+          sources."ansi-styles-4.3.0"
+          sources."anymatch-3.1.3"
+          sources."binary-extensions-2.2.0"
+          sources."brace-expansion-2.0.1"
+          sources."braces-3.0.2"
+          sources."chokidar-3.5.3"
+          sources."cliui-7.0.4"
+          sources."escape-string-regexp-4.0.0"
+          sources."fill-range-7.0.1"
+          sources."fsevents-2.3.2"
+          sources."get-caller-file-2.0.5"
+          (sources."glob-7.2.0" // {
+            dependencies = [
+              sources."minimatch-3.1.2"
+            ];
+          })
+          sources."glob-parent-5.1.2"
+          sources."is-binary-path-2.1.0"
+          sources."is-fullwidth-code-point-3.0.0"
+          sources."is-number-7.0.0"
+          sources."minimatch-5.0.1"
+          sources."ms-2.1.3"
+          sources."readdirp-3.6.0"
+          sources."string-width-4.2.3"
+          sources."strip-ansi-6.0.1"
+          sources."supports-color-8.1.1"
+          sources."to-regex-range-5.0.1"
+          sources."wrap-ansi-7.0.0"
+          sources."y18n-5.0.8"
+          sources."yargs-16.2.0"
+          sources."yargs-parser-20.2.4"
+        ];
+      })
+      sources."ms-2.1.2"
+      sources."mute-stdout-1.0.1"
+      sources."nan-2.17.0"
+      sources."nanoid-3.3.3"
+      sources."nanomatch-1.2.13"
+      sources."natural-compare-1.4.0"
+      sources."next-tick-1.1.0"
+      sources."node-gyp-build-4.6.0"
+      sources."nopt-3.0.6"
+      sources."normalize-package-data-2.5.0"
+      sources."normalize-path-3.0.0"
+      sources."now-and-later-2.0.1"
+      (sources."npm-conf-1.1.3" // {
+        dependencies = [
+          sources."pify-3.0.0"
+        ];
+      })
+      sources."number-is-nan-1.0.1"
+      (sources."nw-0.71.1" // {
+        dependencies = [
+          sources."yargs-3.32.0"
+        ];
+      })
+      sources."nw-autoupdater-1.1.11"
+      (sources."nw-dev-3.0.1" // {
+        dependencies = [
+          sources."anymatch-1.3.2"
+          sources."arr-diff-2.0.0"
+          sources."array-unique-0.2.1"
+          sources."braces-1.8.5"
+          sources."chokidar-1.7.0"
+          sources."expand-brackets-0.1.5"
+          sources."extglob-0.3.2"
+          sources."glob-parent-2.0.0"
+          sources."is-extglob-1.0.0"
+          sources."is-glob-2.0.1"
+          sources."kind-of-3.2.2"
+          sources."micromatch-2.3.11"
+          sources."normalize-path-2.1.1"
+        ];
+      })
+      sources."oauth-sign-0.9.0"
+      sources."object-assign-4.1.1"
+      (sources."object-copy-0.1.0" // {
+        dependencies = [
+          sources."define-property-0.2.5"
+          sources."is-accessor-descriptor-0.1.6"
+          sources."is-data-descriptor-0.1.4"
+          (sources."is-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-5.1.0"
+            ];
+          })
+          sources."kind-of-3.2.2"
+        ];
+      })
+      sources."object-keys-1.1.1"
+      sources."object-visit-1.0.1"
+      sources."object.assign-4.1.4"
+      sources."object.defaults-1.1.0"
+      sources."object.map-1.0.1"
+      (sources."object.omit-2.0.1" // {
+        dependencies = [
+          sources."for-own-0.1.5"
+        ];
+      })
+      sources."object.pick-1.3.0"
+      sources."object.reduce-1.0.1"
+      sources."once-1.4.0"
+      sources."optionator-0.9.1"
+      sources."ordered-read-streams-1.0.1"
+      sources."os-locale-1.4.0"
+      sources."p-limit-3.1.0"
+      sources."p-locate-5.0.0"
+      sources."pako-1.0.11"
+      sources."parent-module-1.0.1"
+      sources."parse-filepath-1.0.2"
+      (sources."parse-glob-3.0.4" // {
+        dependencies = [
+          sources."is-extglob-1.0.0"
+          sources."is-glob-2.0.1"
+        ];
+      })
+      sources."parse-json-2.2.0"
+      sources."parse-node-version-1.0.1"
+      sources."parse-passwd-1.0.0"
+      sources."pascalcase-0.1.1"
+      sources."path-dirname-1.0.2"
+      sources."path-exists-4.0.0"
+      sources."path-is-absolute-1.0.1"
+      sources."path-key-3.1.1"
+      sources."path-parse-1.0.7"
+      sources."path-root-0.1.1"
+      sources."path-root-regex-0.1.2"
+      sources."path-type-1.1.0"
+      sources."pathval-1.1.1"
+      sources."pend-1.2.0"
+      sources."performance-now-2.1.0"
+      sources."picocolors-0.2.1"
+      sources."picomatch-2.3.1"
+      sources."pify-2.3.0"
+      sources."pinkie-2.0.4"
+      sources."pinkie-promise-2.0.1"
+      sources."posix-character-classes-0.1.1"
+      (sources."postcss-7.0.39" // {
+        dependencies = [
+          sources."source-map-0.6.1"
+        ];
+      })
+      sources."prelude-ls-1.2.1"
+      sources."prepend-http-1.0.4"
+      sources."preserve-0.2.0"
+      sources."pretty-hrtime-1.0.3"
+      sources."process-nextick-args-2.0.1"
+      sources."progress-2.0.3"
+      sources."proto-list-1.2.4"
+      sources."psl-1.9.0"
+      sources."pump-2.0.1"
+      sources."pumpify-1.5.1"
+      sources."punycode-2.3.0"
+      sources."q-1.5.1"
+      sources."qs-6.5.3"
+      sources."queue-microtask-1.2.3"
+      (sources."randomatic-3.1.1" // {
+        dependencies = [
+          sources."is-number-4.0.0"
+        ];
+      })
+      sources."randombytes-2.1.0"
+      sources."read-pkg-1.1.0"
+      (sources."read-pkg-up-1.0.1" // {
+        dependencies = [
+          sources."find-up-1.1.2"
+          sources."path-exists-2.1.0"
+        ];
+      })
+      (sources."readable-stream-2.3.8" // {
+        dependencies = [
+          sources."safe-buffer-5.1.2"
+        ];
+      })
+      sources."readdirp-2.2.1"
+      sources."rechoir-0.6.2"
+      sources."regex-cache-0.4.4"
+      sources."regex-not-1.0.2"
+      sources."remove-bom-buffer-3.0.0"
+      sources."remove-bom-stream-1.2.0"
+      sources."remove-trailing-separator-1.1.0"
+      sources."repeat-element-1.1.4"
+      sources."repeat-string-1.6.1"
+      sources."replace-ext-1.0.1"
+      sources."replace-homedir-1.0.0"
+      sources."request-2.88.2"
+      sources."require-directory-2.1.1"
+      sources."require-main-filename-1.0.1"
+      sources."resolve-1.22.3"
+      sources."resolve-dir-1.0.1"
+      sources."resolve-from-4.0.0"
+      sources."resolve-options-1.1.0"
+      sources."resolve-url-0.2.1"
+      sources."ret-0.1.15"
+      sources."reusify-1.0.4"
+      sources."rimraf-2.7.1"
+      sources."run-parallel-1.2.0"
+      sources."safe-buffer-5.2.1"
+      sources."safe-regex-1.1.0"
+      sources."safer-buffer-2.1.2"
+      sources."seek-bzip-1.0.6"
+      sources."selenium-webdriver-4.9.2"
+      sources."semver-5.7.1"
+      sources."semver-greatest-satisfied-range-1.1.0"
+      sources."serialize-javascript-6.0.0"
+      sources."set-blocking-2.0.0"
+      (sources."set-value-2.0.1" // {
+        dependencies = [
+          sources."extend-shallow-2.0.1"
+        ];
+      })
+      sources."setimmediate-1.0.5"
+      sources."shebang-command-2.0.0"
+      sources."shebang-regex-3.0.0"
+      (sources."snapdragon-0.8.2" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."define-property-0.2.5"
+          sources."extend-shallow-2.0.1"
+          (sources."is-accessor-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          (sources."is-data-descriptor-0.1.4" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          sources."is-descriptor-0.1.6"
+          sources."kind-of-5.1.0"
+          sources."ms-2.0.0"
+        ];
+      })
+      (sources."snapdragon-node-2.1.1" // {
+        dependencies = [
+          sources."define-property-1.0.0"
+        ];
+      })
+      (sources."snapdragon-util-3.0.1" // {
+        dependencies = [
+          sources."kind-of-3.2.2"
+        ];
+      })
+      sources."source-map-0.5.7"
+      sources."source-map-resolve-0.5.3"
+      sources."source-map-url-0.4.1"
+      sources."sparkles-1.0.1"
+      sources."spdx-correct-3.2.0"
+      sources."spdx-exceptions-2.3.0"
+      sources."spdx-expression-parse-3.0.1"
+      sources."spdx-license-ids-3.0.13"
+      sources."split-string-3.1.0"
+      sources."sshpk-1.17.0"
+      sources."stack-trace-0.0.10"
+      (sources."static-extend-0.1.2" // {
+        dependencies = [
+          sources."define-property-0.2.5"
+          (sources."is-accessor-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          (sources."is-data-descriptor-0.1.4" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          sources."is-descriptor-0.1.6"
+          sources."kind-of-5.1.0"
+        ];
+      })
+      sources."stream-exhaust-1.0.2"
+      sources."stream-shift-1.0.1"
+      sources."string-width-1.0.2"
+      (sources."string_decoder-1.1.1" // {
+        dependencies = [
+          sources."safe-buffer-5.1.2"
+        ];
+      })
+      sources."strip-ansi-3.0.1"
+      sources."strip-bom-2.0.0"
+      sources."strip-bom-string-1.0.0"
+      sources."strip-dirs-2.1.0"
+      sources."strip-json-comments-3.1.1"
+      sources."strip-outer-1.0.1"
+      sources."supports-color-2.0.0"
+      sources."supports-preserve-symlinks-flag-1.0.0"
+      sources."sver-compat-1.5.0"
+      sources."tar-stream-1.6.2"
+      sources."text-table-0.2.0"
+      sources."through-2.3.8"
+      sources."through2-2.0.5"
+      sources."through2-filter-3.0.0"
+      sources."time-stamp-1.1.0"
+      sources."timed-out-4.0.1"
+      sources."timers-ext-0.1.7"
+      (sources."tmp-0.2.1" // {
+        dependencies = [
+          sources."rimraf-3.0.2"
+        ];
+      })
+      sources."to-absolute-glob-2.0.2"
+      sources."to-buffer-1.1.1"
+      (sources."to-object-path-0.3.0" // {
+        dependencies = [
+          sources."kind-of-3.2.2"
+        ];
+      })
+      sources."to-regex-3.0.2"
+      sources."to-regex-range-2.1.1"
+      sources."to-through-2.0.0"
+      (sources."touch-0.0.3" // {
+        dependencies = [
+          sources."nopt-1.0.10"
+        ];
+      })
+      sources."tough-cookie-2.5.0"
+      sources."traverse-0.3.9"
+      sources."tree-kill-1.2.2"
+      sources."trim-repeated-1.0.0"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."type-1.2.0"
+      sources."type-check-0.4.0"
+      sources."type-detect-4.0.8"
+      sources."type-fest-0.20.2"
+      sources."typedarray-0.0.6"
+      sources."unbzip2-stream-1.4.3"
+      sources."unc-path-regex-0.1.2"
+      (sources."undertaker-1.3.0" // {
+        dependencies = [
+          sources."fast-levenshtein-1.1.4"
+        ];
+      })
+      sources."undertaker-registry-1.0.1"
+      sources."union-value-1.0.1"
+      sources."unique-stream-2.3.1"
+      sources."universalify-0.1.2"
+      (sources."unset-value-1.0.0" // {
+        dependencies = [
+          (sources."has-value-0.3.1" // {
+            dependencies = [
+              sources."isobject-2.1.0"
+            ];
+          })
+          sources."has-values-0.1.4"
+        ];
+      })
+      sources."untildify-3.0.3"
+      sources."unzip-response-2.0.1"
+      sources."upath-1.2.0"
+      sources."uri-js-4.4.1"
+      sources."urix-0.1.0"
+      sources."url-parse-lax-1.0.0"
+      sources."url-to-options-1.0.1"
+      sources."use-3.1.1"
+      sources."utf-8-validate-6.0.3"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.4.0"
+      sources."v8flags-3.2.0"
+      sources."validate-npm-package-license-3.0.4"
+      sources."value-or-function-3.0.0"
+      (sources."verror-1.10.0" // {
+        dependencies = [
+          sources."core-util-is-1.0.2"
+        ];
+      })
+      sources."vinyl-2.2.1"
+      sources."vinyl-fs-3.0.3"
+      (sources."vinyl-sourcemap-1.1.0" // {
+        dependencies = [
+          sources."normalize-path-2.1.1"
+        ];
+      })
+      sources."which-2.0.2"
+      sources."which-module-1.0.0"
+      sources."window-size-0.1.4"
+      sources."winreg-1.2.4"
+      sources."word-wrap-1.2.3"
+      sources."workerpool-6.2.1"
+      sources."wrap-ansi-2.1.0"
+      sources."wrappy-1.0.2"
+      sources."ws-8.13.0"
+      sources."xtend-4.0.2"
+      sources."y18n-3.2.2"
+      (sources."yargs-17.7.2" // {
+        dependencies = [
+          sources."ansi-regex-5.0.1"
+          sources."ansi-styles-4.3.0"
+          sources."cliui-8.0.1"
+          sources."get-caller-file-2.0.5"
+          sources."is-fullwidth-code-point-3.0.0"
+          sources."string-width-4.2.3"
+          sources."strip-ansi-6.0.1"
+          sources."wrap-ansi-7.0.0"
+          sources."y18n-5.0.8"
+          sources."yargs-parser-21.1.1"
+        ];
+      })
+      (sources."yargs-parser-5.0.1" // {
+        dependencies = [
+          sources."camelcase-3.0.0"
+        ];
+      })
+      (sources."yargs-unparser-2.0.0" // {
+        dependencies = [
+          sources."camelcase-6.3.0"
+          sources."decamelize-4.0.0"
+        ];
+      })
+      sources."yauzl-2.10.0"
+      sources."yocto-queue-0.1.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Setup and configure OnlyKey";
+      homepage = "https://github.com/trustcrypto/OnlyKey-App#readme";
+      license = "Apache-2.0";
+    };
+    production = false;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/onlykey/onlykey.nix b/nixpkgs/pkgs/tools/security/onlykey/onlykey.nix
new file mode 100644
index 000000000000..22e8b6260737
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/onlykey/onlykey.nix
@@ -0,0 +1,17 @@
+# This file has been generated by node2nix 1.11.1. Do not edit!
+
+{pkgs ? import <nixpkgs> {
+    inherit system;
+  }, system ? builtins.currentSystem, nodejs ? pkgs.nodejs_18}:
+
+let
+  nodeEnv = import ../../../development/node-packages/node-env.nix {
+    inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript;
+    inherit pkgs nodejs;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+in
+import ./node-packages.nix {
+  inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
+  inherit nodeEnv;
+}
diff --git a/nixpkgs/pkgs/tools/security/onlykey/package.json b/nixpkgs/pkgs/tools/security/onlykey/package.json
new file mode 100644
index 000000000000..a629a4d7d495
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/onlykey/package.json
@@ -0,0 +1,3 @@
+[
+  {"onlykey": "git+https://github.com/trustcrypto/OnlyKey-App.git#v5.5.0"}
+]
diff --git a/nixpkgs/pkgs/tools/security/open-ecard/default.nix b/nixpkgs/pkgs/tools/security/open-ecard/default.nix
new file mode 100644
index 000000000000..e8afdf6bf8c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/open-ecard/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv, fetchurl, jre, pcsclite, makeDesktopItem, makeWrapper }:
+
+let
+  version = "1.2.4";
+  srcs = {
+    richclient = fetchurl {
+      url = "https://jnlp.openecard.org/richclient-${version}-20171212-0958.jar";
+      sha256 = "1ckhyhszp4zhfb5mn67lz603b55z814jh0sz0q5hriqzx017j7nr";
+    };
+    cifs = fetchurl {
+      url = "https://jnlp.openecard.org/cifs-${version}-20171212-0958.jar";
+      sha256 = "0rc862lx3y6sw87r1v5xjmqqpysyr1x6yqhycqmcdrwz0j3wykrr";
+    };
+    logo = fetchurl {
+      url = "https://raw.githubusercontent.com/ecsec/open-ecard/1.2.3/gui/graphics/src/main/ext/oec_logo_bg-transparent.svg";
+      sha256 = "0rpmyv10vjx2yfpm03mqliygcww8af2wnrnrppmsazdplksaxkhs";
+    };
+  };
+in stdenv.mkDerivation rec {
+  pname = "open-ecard";
+  inherit version;
+
+  src = srcs.richclient;
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    desktopName = "Open eCard App";
+    genericName = "eCard App";
+    comment = "Client side implementation of the eCard-API-Framework";
+    icon = "oec_logo_bg-transparent.svg";
+    exec = pname;
+    categories = [ "Utility" "Security" ];
+  };
+
+  installPhase = ''
+    mkdir -p $out/share/java
+    cp ${srcs.richclient} $out/share/java/richclient-${version}.jar
+    cp ${srcs.cifs} $out/share/java/cifs-${version}.jar
+
+    mkdir -p $out/share/applications $out/share/pixmaps
+    cp $desktopItem/share/applications/* $out/share/applications
+    cp ${srcs.logo} $out/share/pixmaps/oec_logo_bg-transparent.svg
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/${pname} \
+      --add-flags "-cp $out/share/java/cifs-${version}.jar" \
+      --add-flags "-jar $out/share/java/richclient-${version}.jar" \
+      --suffix LD_LIBRARY_PATH ':' ${lib.getLib pcsclite}/lib
+  '';
+
+  meta = with lib; {
+    description = "Client side implementation of the eCard-API-Framework (BSI
+      TR-03112) and related international standards, such as ISO/IEC 24727";
+    homepage = "https://www.openecard.org/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ sephalon ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/opencryptoki/default.nix b/nixpkgs/pkgs/tools/security/opencryptoki/default.nix
new file mode 100644
index 000000000000..056c379ac68f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/opencryptoki/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, bison
+, flex
+, openldap
+, openssl
+, trousers
+}:
+
+stdenv.mkDerivation rec {
+  pname = "opencryptoki";
+  version = "3.20.0";
+
+  src = fetchFromGitHub {
+    owner = "opencryptoki";
+    repo = "opencryptoki";
+    rev = "v${version}";
+    hash = "sha256-Z11CDw9ykmJ7MI7I0H4Y/i+8/I+hRgC2frklYPP1di0=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    bison
+    flex
+  ];
+
+  buildInputs = [
+    openldap
+    openssl
+    trousers
+  ];
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace "usermod" "true" \
+      --replace "groupadd" "true" \
+      --replace "chmod" "true" \
+      --replace "chgrp" "true"
+  '';
+
+  configureFlags = [
+    "--prefix="
+    "--disable-ccatok"
+    "--disable-icatok"
+  ];
+
+  enableParallelBuilding = true;
+
+  installFlags = [
+    "DESTDIR=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    changelog   = "https://github.com/opencryptoki/opencryptoki/blob/${src.rev}/ChangeLog";
+    description = "PKCS#11 implementation for Linux";
+    homepage    = "https://github.com/opencryptoki/opencryptoki";
+    license     = licenses.cpl10;
+    maintainers = [ ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/openpgp-card-tools/default.nix b/nixpkgs/pkgs/tools/security/openpgp-card-tools/default.nix
new file mode 100644
index 000000000000..ff1e2958cde5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/openpgp-card-tools/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitea
+, pkg-config
+, pcsclite
+, nettle
+, PCSC
+, testers
+, openpgp-card-tools
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "openpgp-card-tools";
+  version = "0.10.0";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "openpgp-card";
+    repo = "openpgp-card-tools";
+    rev = "v${version}";
+    hash = "sha256-dSGkPAeiQ54hYMJgghlPkbeJP3ZPUXGU7WmE63yIvz0=";
+  };
+
+  cargoHash = "sha256-coFoFWI/Iq7tbkv9RKPCNfAVKWDsJd7KTzOTtQDHXJY=";
+
+  nativeBuildInputs = [ pkg-config rustPlatform.bindgenHook ];
+  buildInputs = [ pcsclite nettle ] ++ lib.optionals stdenv.isDarwin [ PCSC ];
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = openpgp-card-tools;
+    };
+  };
+
+  meta = with lib; {
+    description = "A tool for inspecting and configuring OpenPGP cards";
+    homepage = "https://codeberg.org/openpgp-card/openpgp-card-tools";
+    license = with licenses ;[ asl20 /* OR */ mit ];
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "oct";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/openrisk/default.nix b/nixpkgs/pkgs/tools/security/openrisk/default.nix
new file mode 100644
index 000000000000..fc8475ca71a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/openrisk/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "openrisk";
+  version = "0.0.1";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-8DGwNoucLpdazf9r4PZrN4DEOMpTr5U7tal2Rab92pA=";
+  };
+
+  vendorHash = "sha256-BLowqqlMLDtsthS4uKeycmtG7vASG25CARGpUcuibcw=";
+
+  meta = with lib; {
+    description = "Tool that generates an AI-based risk score";
+    homepage = "https://github.com/projectdiscovery/openrisk";
+    changelog = "https://github.com/projectdiscovery/openrisk/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/opensc/default.nix b/nixpkgs/pkgs/tools/security/opensc/default.nix
new file mode 100644
index 000000000000..856921edbf18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/opensc/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, zlib, readline, openssl
+, libiconv, pcsclite, libassuan, libXt
+, fetchpatch
+, docbook_xsl, libxslt, docbook_xml_dtd_412
+, Carbon, PCSC, buildPackages
+, withApplePCSC ? stdenv.isDarwin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "opensc";
+  version = "0.24.0";
+
+  src = fetchFromGitHub {
+    owner = "OpenSC";
+    repo = "OpenSC";
+    rev = version;
+    sha256 = "sha256-1mm0b4AAtX0AgjShpU1FR6e7pUkea5TOJdIGkNQgjuE=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [
+    zlib readline openssl libassuan
+    libXt libxslt libiconv docbook_xml_dtd_412
+  ]
+  ++ lib.optional stdenv.isDarwin Carbon
+  ++ (if withApplePCSC then [ PCSC ] else [ pcsclite ]);
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  configureFlags = [
+    "--enable-zlib"
+    "--enable-readline"
+    "--enable-openssl"
+    "--enable-pcsc"
+    "--enable-sm"
+    "--enable-man"
+    "--enable-doc"
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "--with-xsl-stylesheetsdir=${docbook_xsl}/xml/xsl/docbook"
+    "--with-pcsc-provider=${
+      if withApplePCSC then
+        "${PCSC}/Library/Frameworks/PCSC.framework/PCSC"
+      else
+        "${lib.getLib pcsclite}/lib/libpcsclite${stdenv.hostPlatform.extensions.sharedLibrary}"
+      }"
+    (lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform)
+      "XSLTPROC=${buildPackages.libxslt}/bin/xsltproc")
+  ];
+
+  PCSC_CFLAGS = lib.optionalString withApplePCSC
+    "-I${PCSC}/Library/Frameworks/PCSC.framework/Headers";
+
+  installFlags = [
+    "sysconfdir=$(out)/etc"
+    "completiondir=$(out)/etc"
+  ];
+
+  meta = with lib; {
+    description = "Set of libraries and utilities to access smart cards";
+    homepage = "https://github.com/OpenSC/OpenSC/wiki";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.michaeladler ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/orjail/default.nix b/nixpkgs/pkgs/tools/security/orjail/default.nix
new file mode 100644
index 000000000000..adcbf5ae4f9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/orjail/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, tor
+, firejail
+, iptables
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "orjail";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "06bwqb3l7syy4c1d8xynxwakmdxvm3qfm8r834nidsknvpdckd9z";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postPatch = ''
+    patchShebangs make-helper.bsh
+    mkdir bin
+    mv usr/sbin/orjail bin/orjail
+    rm -r usr
+  '';
+
+  makeFlags = [
+    "DESTDIR=${placeholder "out"}"
+  ];
+
+  postInstall = ''
+    # Specify binary paths: tor, firejail, iptables
+    # mktemp fails with /tmp path prefix, will work without it anyway
+    # https://github.com/orjail/orjail/issues/78
+    # firejail will fail reading /etc/hosts, therefore remove --hostname arg
+    # https://github.com/netblue30/firejail/issues/2758
+    substituteInPlace $out/bin/orjail \
+      --replace ''$'TORBIN=\n' ''$'TORBIN=${tor}/bin/tor\n' \
+      --replace ''$'FIREJAILBIN=\n' ''$'FIREJAILBIN=${firejail}/bin/firejail\n' \
+      --replace 'iptables -' '${iptables}/bin/iptables -' \
+      --replace 'mktemp /tmp/' 'mktemp ' \
+      --replace '--hostname=host ' ""
+  '';
+
+  meta = with lib; {
+    description = "Force programs to exclusively use tor network";
+    homepage = "https://github.com/orjail/orjail";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ onny ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ospd-openvas/default.nix b/nixpkgs/pkgs/tools/security/ospd-openvas/default.nix
new file mode 100644
index 000000000000..0e4b4b16e752
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ospd-openvas/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ospd-openvas";
+  version = "22.6.2";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "greenbone";
+    repo = "ospd-openvas";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-SO2+PpxjyP+Yba0X81EgNCOAu7ntlG7zOeWA+7XdRIA=";
+  };
+
+  pythonRelaxDeps = [
+    "packaging"
+    "python-gnupg"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    defusedxml
+    deprecated
+    lxml
+    packaging
+    paho-mqtt
+    psutil
+    python-gnupg
+    redis
+    sentry-sdk
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "ospd_openvas"
+  ];
+
+  meta = with lib; {
+    description = "OSP server implementation to allow GVM to remotely control an OpenVAS Scanner";
+    homepage = "https://github.com/greenbone/ospd-openvas";
+    changelog = "https://github.com/greenbone/ospd-openvas/releases/tag/v${version}";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ossec/agent.nix b/nixpkgs/pkgs/tools/security/ossec/agent.nix
new file mode 100644
index 000000000000..003d2141c567
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ossec/agent.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchFromGitHub, which, pcre2, zlib, ncurses, openssl }:
+let
+  version = "unstable-2023-08-09";
+in
+stdenv.mkDerivation {
+  pname = "ossec-agent";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "ossec";
+    repo = "ossec-hids";
+    rev = "c8a36b0af3d4ee5252855b90236407cbfb996eb2";
+    sha256 = "sha256-AZ8iubyhNHXGR/l+hA61ifNDUoan7AQ42l/uRTt5GmE=";
+  };
+
+  # clear is used during the build process
+  nativeBuildInputs = [ ncurses ];
+
+  buildInputs = [ which pcre2 zlib openssl ];
+
+  # patch to remove root manipulation, install phase which tries to add users to the system, and init phase which tries to modify the system to launch files
+  patches = [ ./no-root.patch ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: src/common/mgmt/pint-worker-external.po:(.data.rel.local+0x0): multiple definition of
+  #     `PINT_worker_external_impl'; src/common/mgmt/pint-mgmt.po:(.bss+0x20): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  buildPhase = ''
+    mkdir $out
+    export USER_DIR="$out" # just to satisy the script
+    ./install.sh <<EOF
+en
+
+agent
+127.0.0.1
+yes
+yes
+yes
+EOF
+
+  '';
+
+  installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/share
+      mv $out/active-response/bin/* $out/bin
+      mv $out/etc $out/share
+      mv $out/queue $out/share
+      mv $out/var $out/share
+      mv $out/agentless $out/share
+      mv $out/.ssh $out/share
+      rm -r $out/active-response
+      rm -r $out/tmp
+
+      runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Open source host-based instrusion detection system";
+    homepage = "https://www.ossec.net";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ happysalada ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/ossec/no-root.patch b/nixpkgs/pkgs/tools/security/ossec/no-root.patch
new file mode 100644
index 000000000000..ef2f28560070
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ossec/no-root.patch
@@ -0,0 +1,297 @@
+diff --git a/install.sh b/install.sh
+index 387bde1a..cb6dcbf2 100755
+--- a/install.sh
++++ b/install.sh
+@@ -126,14 +126,14 @@ Install()
+     # Generate the /etc/ossec-init.conf
+     VERSION_FILE="./src/VERSION"
+     VERSION=`cat ${VERSION_FILE}`
+-    chmod 700 ${OSSEC_INIT} > /dev/null 2>&1
+-    echo "DIRECTORY=\"${INSTALLDIR}\"" > ${OSSEC_INIT}
+-    echo "VERSION=\"${VERSION}\"" >> ${OSSEC_INIT}
+-    echo "DATE=\"`date`\"" >> ${OSSEC_INIT}
+-    echo "TYPE=\"${INSTYPE}\"" >> ${OSSEC_INIT}
+-    chmod 600 ${OSSEC_INIT}
+-    cp -pr ${OSSEC_INIT} ${INSTALLDIR}${OSSEC_INIT}
+-    chmod 640 ${INSTALLDIR}${OSSEC_INIT}
++    # chmod 700 ${OSSEC_INIT} > /dev/null 2>&1
++    # echo "DIRECTORY=\"${INSTALLDIR}\"" > ${OSSEC_INIT}
++    # echo "VERSION=\"${VERSION}\"" >> ${OSSEC_INIT}
++    # echo "DATE=\"`date`\"" >> ${OSSEC_INIT}
++    # echo "TYPE=\"${INSTYPE}\"" >> ${OSSEC_INIT}
++    # chmod 600 ${OSSEC_INIT}
++    # cp -pr ${OSSEC_INIT} ${INSTALLDIR}${OSSEC_INIT}
++    # chmod 640 ${INSTALLDIR}${OSSEC_INIT}
+ 
+ 
+     # If update_rules is set, we need to tweak
+@@ -148,12 +148,12 @@ Install()
+     fi
+ 
+     # Calling the init script  to start ossec hids during boot
+-    if [ "X${update_only}" = "X" ]; then
+-        runInit
+-        if [ $? = 1 ]; then
+-            notmodified="yes"
+-        fi
+-    fi
++    # if [ "X${update_only}" = "X" ]; then
++    #     runInit
++    #     if [ $? = 1 ]; then
++    #         notmodified="yes"
++    #     fi
++    # fi
+ 
+ }
+ 
+@@ -965,10 +965,10 @@ main()
+         catError "0x1-location";
+     fi
+ 
+-    # Must be root
+-    if [ ! "X$ME" = "Xroot" ]; then
+-        catError "0x2-beroot";
+-    fi
++    # # Must be root
++    # if [ ! "X$ME" = "Xroot" ]; then
++    #     catError "0x2-beroot";
++    # fi
+ 
+     # Checking dependencies
+     checkDependencies
+diff --git a/src/Makefile b/src/Makefile
+index 7fc04c0b..0eb27a0a 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -144,7 +144,7 @@ endif
+ ifeq (${uname_S},AIX)
+         INSTALL_CMD?=./install-shim-aix.ksh -m $(1) -o $(2) -g $(3)
+ else
+-        INSTALL_CMD?=install -m $(1) -o $(2) -g $(3)
++        INSTALL_CMD?=install
+ endif
+ 
+ ifdef DEBUGAD
+@@ -404,10 +404,10 @@ endif
+ install: install-${TARGET}
+ 
+ install-agent: install-common
+-	$(call INSTALL_CMD,0550,root,0) ossec-agentd ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) agent-auth ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-agentd ${PREFIX}/bin
++	$(call INSTALL_CMD) agent-auth ${PREFIX}/bin
+ 
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/rids
++	$(call INSTALL_CMD) -d ${PREFIX}/queue/rids
+ 
+ install-local: install-server-generic
+ 
+@@ -416,133 +416,126 @@ install-hybrid: install-server-generic
+ install-server: install-server-generic
+ 
+ install-common: build
+-	./init/adduser.sh ${OSSEC_USER} ${OSSEC_USER_MAIL} ${OSSEC_USER_REM} ${OSSEC_GROUP} ${PREFIX}
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs
+-	$(call INSTALL_CMD,0660,${OSSEC_USER},${OSSEC_GROUP}) /dev/null ${PREFIX}/logs/ossec.log
+-
+-	$(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-logcollector ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-syscheckd ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-execd ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) manage_agents ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ../contrib/util.sh ${PREFIX}/bin/
+-	$(call INSTALL_CMD,0550,root,0) ${OSSEC_CONTROL_SRC} ${PREFIX}/bin/ossec-control
++	$(call INSTALL_CMD) -d ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-logcollector ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-syscheckd ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-execd ${PREFIX}/bin
++	$(call INSTALL_CMD) manage_agents ${PREFIX}/bin
++	$(call INSTALL_CMD) ../contrib/util.sh ${PREFIX}/bin/
++	$(call INSTALL_CMD) ${OSSEC_CONTROL_SRC} ${PREFIX}/bin/ossec-control
+ 
+ ifeq (${LUA_ENABLE},yes)
+-	$(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/lua
+-	$(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/lua/native
+-	$(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/lua/compiled
+-	$(call INSTALL_CMD,0550,root,0) ${EXTERNAL_LUA}src/ossec-lua ${PREFIX}/bin/
+-	$(call INSTALL_CMD,0550,root,0) ${EXTERNAL_LUA}src/ossec-luac ${PREFIX}/bin/
++	$(call INSTALL_CMD) -d ${PREFIX}/lua
++	$(call INSTALL_CMD) -d ${PREFIX}/lua/native
++	$(call INSTALL_CMD) -d ${PREFIX}/lua/compiled
++	$(call INSTALL_CMD) ${EXTERNAL_LUA}src/ossec-lua ${PREFIX}/bin/
++	$(call INSTALL_CMD) ${EXTERNAL_LUA}src/ossec-luac ${PREFIX}/bin/
+ endif
+ 
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/queue
+-	$(call INSTALL_CMD,0770,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/alerts
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/ossec
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/syscheck
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/diff
++	$(call INSTALL_CMD) -d ${PREFIX}/queue
++	$(call INSTALL_CMD) -d ${PREFIX}/queue/alerts
++	$(call INSTALL_CMD) -d ${PREFIX}/queue/ossec
++	$(call INSTALL_CMD) -d ${PREFIX}/queue/syscheck
++	$(call INSTALL_CMD) -d ${PREFIX}/queue/diff
+ 
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/etc
++	$(call INSTALL_CMD) -d ${PREFIX}/etc
+ ifeq (${INSTALL_LOCALTIME},yes)
+-	$(call INSTALL_CMD,0440,root,${OSSEC_GROUP}) /etc/localtime ${PREFIX}/etc
++	$(call INSTALL_CMD) /etc/localtime ${PREFIX}/etc
+ endif
+ ifeq (${INSTALL_RESOLVCONF},yes)
+-	$(call INSTALL_CMD,0440,root,${OSSEC_GROUP}) /etc/resolv.conf ${PREFIX}/etc
++	$(call INSTALL_CMD) /etc/resolv.conf ${PREFIX}/etc
+ endif
+ 
+-	$(call INSTALL_CMD,1550,root,${OSSEC_GROUP}) -d ${PREFIX}/tmp
++	$(call INSTALL_CMD) -d ${PREFIX}/tmp
+ 
+ ifneq (,$(wildcard /etc/TIMEZONE))
+-	$(call INSTALL_CMD,440,root,${OSSEC_GROUP}) /etc/TIMEZONE ${PREFIX}/etc/
++	$(call INSTALL_CMD) /etc/TIMEZONE ${PREFIX}/etc/
+ endif
+ # Solaris Needs some extra files
+ ifeq (${uname_S},SunOS)
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/usr/share/lib/zoneinfo/
++	$(call INSTALL_CMD) -d ${PREFIX}/usr/share/lib/zoneinfo/
+ 	cp -r /usr/share/lib/zoneinfo/* ${PREFIX}/usr/share/lib/zoneinfo/
+ endif
+-	$(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) -b ../etc/internal_options.conf ${PREFIX}/etc/
++	$(call INSTALL_CMD) -b ../etc/internal_options.conf ${PREFIX}/etc/
+ ifeq (,$(wildcard ${PREFIX}/etc/local_internal_options.conf))
+-	$(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ../etc/local_internal_options.conf ${PREFIX}/etc/local_internal_options.conf
++	$(call INSTALL_CMD) ../etc/local_internal_options.conf ${PREFIX}/etc/local_internal_options.conf
+ endif
+ ifeq (,$(wildcard ${PREFIX}/etc/client.keys))
+-	$(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) /dev/null ${PREFIX}/etc/client.keys
++	$(call INSTALL_CMD) /dev/null ${PREFIX}/etc/client.keys
+ endif
+ ifeq (,$(wildcard ${PREFIX}/etc/ossec.conf))
+ ifneq (,$(wildcard ../etc/ossec.mc))
+-	$(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ../etc/ossec.mc ${PREFIX}/etc/ossec.conf
++	$(call INSTALL_CMD) ../etc/ossec.mc ${PREFIX}/etc/ossec.conf
+ else
+-	$(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ${OSSEC_CONF_SRC} ${PREFIX}/etc/ossec.conf
++	$(call INSTALL_CMD) ${OSSEC_CONF_SRC} ${PREFIX}/etc/ossec.conf
+ endif
+ endif
+ 
+-	$(call INSTALL_CMD,0770,root,${OSSEC_GROUP}) -d ${PREFIX}/etc/shared
+-	$(call INSTALL_CMD,0640,${OSSEC_USER},${OSSEC_GROUP}) rootcheck/db/*.txt ${PREFIX}/etc/shared/
++	$(call INSTALL_CMD) -d ${PREFIX}/etc/shared
++	$(call INSTALL_CMD) rootcheck/db/*.txt ${PREFIX}/etc/shared/
+ 
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/active-response
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/active-response/bin
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/agentless
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) agentlessd/scripts/* ${PREFIX}/agentless/
++	$(call INSTALL_CMD) -d ${PREFIX}/active-response
++	$(call INSTALL_CMD) -d ${PREFIX}/active-response/bin
++	$(call INSTALL_CMD) -d ${PREFIX}/agentless
++	$(call INSTALL_CMD) agentlessd/scripts/* ${PREFIX}/agentless/
+ 
+-	$(call INSTALL_CMD,0700,root,${OSSEC_GROUP}) -d ${PREFIX}/.ssh
++	$(call INSTALL_CMD) -d ${PREFIX}/.ssh
+ 
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) ../active-response/*.sh ${PREFIX}/active-response/bin/
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) ../active-response/firewalls/*.sh ${PREFIX}/active-response/bin/
++	$(call INSTALL_CMD) ../active-response/*.sh ${PREFIX}/active-response/bin/
++	$(call INSTALL_CMD) ../active-response/firewalls/*.sh ${PREFIX}/active-response/bin/
+ 
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/var
+-	$(call INSTALL_CMD,0770,root,${OSSEC_GROUP}) -d ${PREFIX}/var/run
+-
+-	./init/fw-check.sh execute
++	$(call INSTALL_CMD) -d ${PREFIX}/var
++	$(call INSTALL_CMD) -d ${PREFIX}/var/run
+ 
+ 
+ 
+ install-server-generic: install-common
+-	$(call INSTALL_CMD,0660,${OSSEC_USER},${OSSEC_GROUP}) /dev/null ${PREFIX}/logs/active-responses.log
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs/archives
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs/alerts
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs/firewall
+-
+-	$(call INSTALL_CMD,0550,root,0) ossec-agentlessd ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-analysisd ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-monitord ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-reportd ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-maild ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-remoted ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-logtest ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-csyslogd ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-authd ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-dbd ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) ossec-makelists ${PREFIX}/bin
+-	$(call INSTALL_CMD,0550,root,0) verify-agent-conf ${PREFIX}/bin/
+-	$(call INSTALL_CMD,0550,root,0) clear_stats ${PREFIX}/bin/
+-	$(call INSTALL_CMD,0550,root,0) list_agents ${PREFIX}/bin/
+-	$(call INSTALL_CMD,0550,root,0) ossec-regex ${PREFIX}/bin/
+-	$(call INSTALL_CMD,0550,root,0) syscheck_update ${PREFIX}/bin/
+-	$(call INSTALL_CMD,0550,root,0) agent_control ${PREFIX}/bin/
+-	$(call INSTALL_CMD,0550,root,0) syscheck_control ${PREFIX}/bin/
+-	$(call INSTALL_CMD,0550,root,0) rootcheck_control ${PREFIX}/bin/
+-
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/stats
+-	$(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/rules
++	$(call INSTALL_CMD) /dev/null ${PREFIX}/logs/active-responses.log
++	$(call INSTALL_CMD) -d ${PREFIX}/logs/archives
++	$(call INSTALL_CMD) -d ${PREFIX}/logs/alerts
++	$(call INSTALL_CMD) -d ${PREFIX}/logs/firewall
++
++	$(call INSTALL_CMD) ossec-agentlessd ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-analysisd ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-monitord ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-reportd ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-maild ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-remoted ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-logtest ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-csyslogd ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-authd ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-dbd ${PREFIX}/bin
++	$(call INSTALL_CMD) ossec-makelists ${PREFIX}/bin
++	$(call INSTALL_CMD) verify-agent-conf ${PREFIX}/bin/
++	$(call INSTALL_CMD) clear_stats ${PREFIX}/bin/
++	$(call INSTALL_CMD) list_agents ${PREFIX}/bin/
++	$(call INSTALL_CMD) ossec-regex ${PREFIX}/bin/
++	$(call INSTALL_CMD) syscheck_update ${PREFIX}/bin/
++	$(call INSTALL_CMD) agent_control ${PREFIX}/bin/
++	$(call INSTALL_CMD) syscheck_control ${PREFIX}/bin/
++	$(call INSTALL_CMD) rootcheck_control ${PREFIX}/bin/
++
++	$(call INSTALL_CMD) -d ${PREFIX}/stats
++	$(call INSTALL_CMD) -d ${PREFIX}/rules
+ ifneq (,$(wildcard ${PREFIX}/rules/local_rules.xml))
+ 	cp ${PREFIX}/rules/local_rules.xml ${PREFIX}/rules/local_rules.xml.installbackup
+-	$(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) -b ../etc/rules/*.xml ${PREFIX}/rules
+-	$(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ${PREFIX}/rules/local_rules.xml.installbackup ${PREFIX}/rules/local_rules.xml
++	$(call INSTALL_CMD) -b ../etc/rules/*.xml ${PREFIX}/rules
++	$(call INSTALL_CMD) ${PREFIX}/rules/local_rules.xml.installbackup ${PREFIX}/rules/local_rules.xml
+ 	rm ${PREFIX}/rules/local_rules.xml.installbackup
+ else
+-	$(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) -b ../etc/rules/*.xml ${PREFIX}/rules
++	$(call INSTALL_CMD) -b ../etc/rules/*.xml ${PREFIX}/rules
+ endif
+ 
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/fts
++	$(call INSTALL_CMD) -d ${PREFIX}/queue/fts
+ 
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/rootcheck
++	$(call INSTALL_CMD) -d ${PREFIX}/queue/rootcheck
+ 
+-	$(call INSTALL_CMD,0750,${OSSEC_USER_REM},${OSSEC_GROUP}) -d ${PREFIX}/queue/agent-info
+-	$(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/agentless
++	$(call INSTALL_CMD) -d ${PREFIX}/queue/agent-info
++	$(call INSTALL_CMD) -d ${PREFIX}/queue/agentless
+ 
+-	$(call INSTALL_CMD,0750,${OSSEC_USER_REM},${OSSEC_GROUP}) -d ${PREFIX}/queue/rids
++	$(call INSTALL_CMD) -d ${PREFIX}/queue/rids
+ 
+-	$(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ../etc/decoder.xml ${PREFIX}/etc/
++	$(call INSTALL_CMD) ../etc/decoder.xml ${PREFIX}/etc/
+ 
+ 	rm -f ${PREFIX}/etc/shared/merged.mg
+ 
diff --git a/nixpkgs/pkgs/tools/security/ossec/server.nix b/nixpkgs/pkgs/tools/security/ossec/server.nix
new file mode 100644
index 000000000000..1a7a3e813675
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ossec/server.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv, fetchFromGitHub, which, pcre2, zlib, ncurses, openssl }:
+let
+  version = "unstable-2023-08-09";
+in
+stdenv.mkDerivation {
+  pname = "ossec-server";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "ossec";
+    repo = "ossec-hids";
+    rev = "c8a36b0af3d4ee5252855b90236407cbfb996eb2";
+    sha256 = "sha256-AZ8iubyhNHXGR/l+hA61ifNDUoan7AQ42l/uRTt5GmE=";
+  };
+
+  # clear is used during the build process
+  nativeBuildInputs = [ ncurses ];
+
+  buildInputs = [ which pcre2 zlib openssl ];
+
+  # patch to remove root manipulation, install phase which tries to add users to the system, and init phase which tries to modify the system to launch files
+  patches = [ ./no-root.patch ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: src/common/mgmt/pint-worker-external.po:(.data.rel.local+0x0): multiple definition of
+  #     `PINT_worker_external_impl'; src/common/mgmt/pint-mgmt.po:(.bss+0x20): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  buildPhase = ''
+    mkdir -p $out/logs
+    export USER_DIR="$out" # just to satisy the script
+    ./install.sh <<EOF
+en
+
+server
+n
+n
+EOF
+  '';
+
+  installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/share
+      mv $out/active-response/bin/* $out/bin
+      mv $out/etc $out/share
+      mv $out/queue $out/share
+      mv $out/var $out/share
+      mv $out/agentless $out/share
+      mv $out/.ssh $out/share
+      mv $out/logs $out/share
+      mv $out/rules $out/share
+      mv $out/stats $out/share
+      rm -r $out/active-response
+      rm -r $out/tmp
+      ls -lah $out
+
+      runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Open source host-based instrusion detection system";
+    homepage = "https://www.ossec.net";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ happysalada ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/osv-detector/default.nix b/nixpkgs/pkgs/tools/security/osv-detector/default.nix
new file mode 100644
index 000000000000..58db4504d23d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/osv-detector/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, osv-detector
+, testers
+}:
+
+buildGoModule rec {
+  pname = "osv-detector";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    owner = "G-Rath";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-vIkLrKyDeMfRe/0EPhlKlHAO6XB0/OFY5mTUHeZbcg8=";
+  };
+
+  vendorHash = "sha256-Rrosye8foVntoFDvDmyNuXgnEgjzcOXenOKBMZVCRio=";
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X main.version=${version}"
+  ];
+
+  checkFlags =
+    let
+      skippedTests = [
+        # Disable tests requiring network access
+        "TestRun_ParseAs_CsvFile"
+        "TestRun_ParseAs_CsvRow"
+        "TestRun_DBs"
+        "TestRun_Lockfile"
+        "TestRun_ParseAsGlobal"
+        "TestRun_Ignores"
+        "TestRun_ParseAsSpecific"
+        "TestRun_Configs"
+      ];
+    in
+    [ "-skip" "${builtins.concatStringsSep "|" skippedTests}" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = osv-detector;
+    command = "osv-detector -version";
+    version = "osv-detector ${version} (unknown, commit none)";
+  };
+
+  meta = with lib; {
+    description = "Auditing tool for detecting vulnerabilities";
+    homepage = "https://github.com/G-Rath/osv-detector";
+    changelog = "https://github.com/G-Rath/osv-detector/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/osv-scanner/default.nix b/nixpkgs/pkgs/tools/security/osv-scanner/default.nix
new file mode 100644
index 000000000000..26dfe919c428
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/osv-scanner/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, osv-scanner
+}:
+buildGoModule rec {
+  pname = "osv-scanner";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-/V0zn4Aic6tBJw23YJWkyeCZXf/ehIZlKWd9TZXe40Y=";
+  };
+
+  vendorHash = "sha256-wIXc0YYTdcnUBNbypVwZJ/RNTmaeMteEujmgs5WJ1g0=";
+
+  subPackages = [
+    "cmd/osv-scanner"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/google/osv-scanner/internal/version.OSVVersion=${version}"
+    "-X main.commit=n/a"
+    "-X main.date=1970-01-01T00:00:00Z"
+  ];
+
+  # Tests require network connectivity to query https://api.osv.dev.
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = osv-scanner;
+  };
+
+  meta = with lib; {
+    description = "Vulnerability scanner written in Go which uses the data provided by https://osv.dev";
+    homepage = "https://github.com/google/osv-scanner";
+    changelog = "https://github.com/google/osv-scanner/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ stehessel urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/otpauth/default.nix b/nixpkgs/pkgs/tools/security/otpauth/default.nix
new file mode 100644
index 000000000000..e4ffadef63e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/otpauth/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "otpauth";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "dim13";
+    repo = "otpauth";
+    rev = "v${version}";
+    sha256 = "sha256-1+A1oXY5sKMr9dVa/4vB+ZkfZSDdhag5y5LfM7OJmKo=";
+  };
+
+  vendorHash = "sha256-ZRCwZGlWzlWh+E3KUH83639Tfck7bwE36wXVnG7EQIE=";
+
+  meta = with lib; {
+    description = "Google Authenticator migration decoder";
+    homepage = "https://github.com/dim13/otpauth";
+    license = licenses.isc;
+    maintainers = with maintainers; [ ereslibre ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ots/default.nix b/nixpkgs/pkgs/tools/security/ots/default.nix
new file mode 100644
index 000000000000..bba9e8e6fb89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ots/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ots";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "sniptt-official";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Oxs2ytf0rY9QYzVaLUkqyX15oWjas3ukSkq9D1TYbDE=";
+  };
+
+  vendorHash = "sha256-qYk8T0sYIO0wJ0R0j+0VetCy11w8usIRRdBm/Z6grJE=";
+
+  ldflags = [ "-X main.version=${version}" "-X main.buildSource=nix" ];
+
+  meta = with lib; {
+    description = "Share end-to-end encrypted secrets with others via a one-time URL";
+    homepage = "https://ots.sniptt.com";
+    changelog = "https://github.com/sniptt-official/ots/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ elliot ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/p0f/default.nix b/nixpkgs/pkgs/tools/security/p0f/default.nix
new file mode 100644
index 000000000000..84221fbd566c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/p0f/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, libpcap, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "p0f";
+  version = "3.09b";
+
+  src = fetchurl {
+    url    = "http://lcamtuf.coredump.cx/p0f3/releases/${pname}-${version}.tgz";
+    sha256 = "0zqfq3gdnha29ckvlqmyp36c0jhj7f69bhqqx31yb6vkirinhfsl";
+  };
+
+  buildInputs = [ libpcap ];
+
+  buildPhase = ''
+    substituteInPlace config.h --replace "p0f.fp" "$out/etc/p0f.fp"
+    substituteInPlace build.sh --replace "/bin/bash" "${bash}/bin/bash"
+    ./build.sh
+    cd tools && make && cd ..
+  '';
+
+  installPhase = ''
+    mkdir -p $out/sbin $out/etc
+
+    cp ./p0f                $out/sbin
+    cp ./p0f.fp             $out/etc
+
+    cp ./tools/p0f-client   $out/sbin
+    cp ./tools/p0f-sendsyn  $out/sbin
+    cp ./tools/p0f-sendsyn6 $out/sbin
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "Passive network reconnaissance and fingerprinting tool";
+    homepage    = "https://lcamtuf.coredump.cx/p0f3/";
+    license     = lib.licenses.lgpl21;
+    platforms   = lib.platforms.linux;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/padbuster/default.nix b/nixpkgs/pkgs/tools/security/padbuster/default.nix
new file mode 100644
index 000000000000..de71010ccba5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/padbuster/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "padbuster";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "AonCyberLabs";
+    repo = pname;
+    rev = "50e4a3e2bf5dfff5699440b3ebc61ed1b5c49bbe";
+    sha256 = "VIvZ28MVnTSQru6l8flLVVqIIpxxXD8lCqzH81sPe/U=";
+  };
+
+  buildInputs = [
+    (perl.withPackages (ps: with ps; [ LWP LWPProtocolHttps CryptSSLeay ]))
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 padBuster.pl $out/bin/padBuster.pl
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Automated script for performing Padding Oracle attacks";
+    homepage = "https://www.gdssecurity.com/l/t.php";
+    mainProgram = "padBuster.pl";
+    maintainers = with maintainers; [ emilytrau ];
+    license = licenses.asl20;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pamtester/default.nix b/nixpkgs/pkgs/tools/security/pamtester/default.nix
new file mode 100644
index 000000000000..d9e59290d676
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pamtester/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pam }:
+
+stdenv.mkDerivation rec {
+  pname = "pamtester";
+  version = "0.1.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pamtester/pamtester-${version}.tar.gz";
+    sha256 = "1mdj1wj0adcnx354fs17928yn2xfr1hj5mfraq282dagi873sqw3";
+  };
+
+  buildInputs = [ pam ];
+
+  meta = with lib; {
+    description = "Utility program to test the PAM facility";
+    homepage = "https://pamtester.sourceforge.net/";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/paperkey/default.nix b/nixpkgs/pkgs/tools/security/paperkey/default.nix
new file mode 100644
index 000000000000..8e86415cb9e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/paperkey/default.nix
@@ -0,0 +1,34 @@
+{ fetchurl, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "paperkey";
+  version = "1.6";
+
+  src = fetchurl {
+    url = "https://www.jabberwocky.com/software/paperkey/${pname}-${version}.tar.gz";
+    sha256 = "1xq5gni6gksjkd5avg0zpd73vsr97appksfx0gx2m38s4w9zsid2";
+  };
+
+  postPatch = ''
+    for a in checks/*.sh ; do
+      substituteInPlace $a \
+        --replace /bin/echo echo
+    done
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Store OpenPGP or GnuPG on paper";
+    longDescription = ''
+      A reasonable way to achieve a long term backup of OpenPGP (GnuPG, PGP, etc)
+      keys is to print them out on paper. Paper and ink have amazingly long
+      retention qualities - far longer than the magnetic or optical means that
+      are generally used to back up computer data.
+    '';
+    homepage = "https://www.jabberwocky.com/software/paperkey/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ AndersonTorres peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/parsero/default.nix b/nixpkgs/pkgs/tools/security/parsero/default.nix
new file mode 100644
index 000000000000..2c3323f25e52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/parsero/default.nix
@@ -0,0 +1,29 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "parsero";
+  version = "0.81";
+
+  src = fetchFromGitHub {
+    owner = "behindthefirewalls";
+    repo = pname;
+    rev = "e5b585a19b79426975a825cafa4cc8a353cd267e";
+    sha256 = "rqupeJxslL3AfQ+CzBWRb4ZS32VoYd8hlA+eACMKGPY=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    beautifulsoup4
+    urllib3
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Robots.txt audit tool";
+    homepage = "https://github.com/behindthefirewalls/Parsero";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ emilytrau fab ];
+    mainProgram = "parsero";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/default.nix b/nixpkgs/pkgs/tools/security/pass/default.nix
new file mode 100644
index 000000000000..735d025e2ea6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/default.nix
@@ -0,0 +1,165 @@
+{ stdenv, lib, pkgs, fetchurl, buildEnv
+, coreutils, findutils, gnugrep, gnused, getopt, git, tree, gnupg, openssl
+, which, openssh, procps, qrencode, makeWrapper, pass
+
+, xclip ? null, xdotool ? null, dmenu ? null
+, x11Support ? !stdenv.isDarwin , dmenuSupport ? (x11Support || waylandSupport)
+, waylandSupport ? false, wl-clipboard ? null
+, ydotool ? null, dmenu-wayland ? null
+
+# For backwards-compatibility
+, tombPluginSupport ? false
+}:
+
+assert x11Support -> xclip != null;
+assert waylandSupport -> wl-clipboard != null;
+
+assert dmenuSupport -> x11Support || waylandSupport;
+assert dmenuSupport && x11Support
+  -> dmenu != null && xdotool != null;
+assert dmenuSupport && waylandSupport
+  -> dmenu-wayland != null && ydotool != null;
+
+
+let
+  passExtensions = import ./extensions { inherit pkgs; };
+
+  env = extensions:
+    let
+      selected = [ pass ] ++ extensions passExtensions
+        ++ lib.optional tombPluginSupport passExtensions.tomb;
+    in buildEnv {
+      name = "pass-env";
+      paths = selected;
+      nativeBuildInputs = [ makeWrapper ];
+      buildInputs = lib.concatMap (x: x.buildInputs) selected;
+
+      postBuild = ''
+        files=$(find $out/bin/ -type f -exec readlink -f {} \;)
+        if [ -L $out/bin ]; then
+          rm $out/bin
+          mkdir $out/bin
+        fi
+
+        for i in $files; do
+          if ! [ "$(readlink -f "$out/bin/$(basename $i)")" = "$i" ]; then
+            ln -sf $i $out/bin/$(basename $i)
+          fi
+        done
+
+        wrapProgram $out/bin/pass \
+          --set SYSTEM_EXTENSION_DIR "$out/lib/password-store/extensions"
+      '';
+      meta.mainProgram = "pass";
+    };
+in
+
+stdenv.mkDerivation rec {
+  version = "1.7.4";
+  pname = "password-store";
+
+  src = fetchurl {
+    url    = "https://git.zx2c4.com/password-store/snapshot/${pname}-${version}.tar.xz";
+    sha256 = "1h4k6w7g8pr169p5w9n6mkdhxl3pw51zphx7www6pvgjb7vgmafg";
+  };
+
+  patches = [
+    ./set-correct-program-name-for-sleep.patch
+    ./extension-dir.patch
+  ] ++ lib.optional stdenv.isDarwin ./no-darwin-getopt.patch;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installFlags = [ "PREFIX=$(out)" "WITH_ALLCOMP=yes" ];
+
+  postInstall = lib.optionalString dmenuSupport ''
+    cp "contrib/dmenu/passmenu" "$out/bin/"
+  '';
+
+  wrapperPath = with lib; makeBinPath ([
+    coreutils
+    findutils
+    getopt
+    git
+    gnugrep
+    gnupg
+    gnused
+    tree
+    which
+    openssh
+    procps
+    qrencode
+  ] ++ optional stdenv.isDarwin openssl
+    ++ optional x11Support xclip
+    ++ optional waylandSupport wl-clipboard
+    ++ optionals (waylandSupport && dmenuSupport) [ ydotool dmenu-wayland ]
+    ++ optionals (x11Support && dmenuSupport) [ xdotool dmenu ]
+  );
+
+  postFixup = ''
+    # Fix program name in --help
+    substituteInPlace $out/bin/pass \
+      --replace 'PROGRAM="''${0##*/}"' "PROGRAM=pass"
+
+    # Ensure all dependencies are in PATH
+    wrapProgram $out/bin/pass \
+      --prefix PATH : "${wrapperPath}"
+  '' + lib.optionalString dmenuSupport ''
+    # We just wrap passmenu with the same PATH as pass. It doesn't
+    # need all the tools in there but it doesn't hurt either.
+    wrapProgram $out/bin/passmenu \
+      --prefix PATH : "$out/bin:${wrapperPath}"
+  '';
+
+  # Turn "check" into "installcheck", since we want to test our pass,
+  # not the one before the fixup.
+  postPatch = ''
+    patchShebangs tests
+
+    substituteInPlace src/password-store.sh \
+      --replace "@out@" "$out"
+
+    # the turning
+    sed -i -e 's@^PASS=.*''$@PASS=$out/bin/pass@' \
+           -e 's@^GPGS=.*''$@GPG=${gnupg}/bin/gpg2@' \
+           -e '/which gpg/ d' \
+      tests/setup.sh
+  '' + lib.optionalString stdenv.isDarwin ''
+    # 'pass edit' uses hdid, which is not available from the sandbox.
+    rm -f tests/t0200-edit-tests.sh
+    rm -f tests/t0010-generate-tests.sh
+    rm -f tests/t0020-show-tests.sh
+    rm -f tests/t0050-mv-tests.sh
+    rm -f tests/t0100-insert-tests.sh
+    rm -f tests/t0300-reencryption.sh
+    rm -f tests/t0400-grep.sh
+  '';
+
+  doCheck = false;
+
+  doInstallCheck = true;
+  nativeInstallCheckInputs = [ git ];
+  installCheckTarget = "test";
+
+  passthru = {
+    extensions = passExtensions;
+    withExtensions = env;
+  };
+
+  meta = with lib; {
+    description = "Stores, retrieves, generates, and synchronizes passwords securely";
+    homepage    = "https://www.passwordstore.org/";
+    license     = licenses.gpl2Plus;
+    mainProgram = "pass";
+    maintainers = with maintainers; [ lovek323 fpletz tadfisher globin ma27 ];
+    platforms   = platforms.unix;
+
+    longDescription = ''
+      pass is a very simple password store that keeps passwords inside gpg2
+      encrypted files inside a simple directory tree residing at
+      ~/.password-store. The pass utility provides a series of commands for
+      manipulating the password store, allowing the user to add, remove, edit,
+      synchronize, generate, and manipulate passwords.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extension-dir.patch b/nixpkgs/pkgs/tools/security/pass/extension-dir.patch
new file mode 100644
index 000000000000..028da31c4617
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extension-dir.patch
@@ -0,0 +1,32 @@
+diff --git a/Makefile b/Makefile
+index eac2291..1b1df0a 100644
+--- a/Makefile
++++ b/Makefile
+@@ -46,12 +46,12 @@ install: install-common
+ 	@install -v -d "$(DESTDIR)$(LIBDIR)/password-store" && install -m 0644 -v "$(PLATFORMFILE)" "$(DESTDIR)$(LIBDIR)/password-store/platform.sh"
+ 	@install -v -d "$(DESTDIR)$(LIBDIR)/password-store/extensions"
+ 	@install -v -d "$(DESTDIR)$(BINDIR)/"
+-	@trap 'rm -f src/.pass' EXIT; sed 's:.*PLATFORM_FUNCTION_FILE.*:source "$(LIBDIR)/password-store/platform.sh":;s:^SYSTEM_EXTENSION_DIR=.*:SYSTEM_EXTENSION_DIR="$(LIBDIR)/password-store/extensions":' src/password-store.sh > src/.pass && \
++	@trap 'rm -f src/.pass' EXIT; sed 's:.*PLATFORM_FUNCTION_FILE.*:source "$(LIBDIR)/password-store/platform.sh":;' src/password-store.sh > src/.pass && \
+ 	install -v -d "$(DESTDIR)$(BINDIR)/" && install -m 0755 -v src/.pass "$(DESTDIR)$(BINDIR)/pass"
+ else
+ install: install-common
+ 	@install -v -d "$(DESTDIR)$(LIBDIR)/password-store/extensions"
+-	@trap 'rm -f src/.pass' EXIT; sed '/PLATFORM_FUNCTION_FILE/d;s:^SYSTEM_EXTENSION_DIR=.*:SYSTEM_EXTENSION_DIR="$(LIBDIR)/password-store/extensions":' src/password-store.sh > src/.pass && \
++	@trap 'rm -f src/.pass' EXIT; sed '/PLATFORM_FUNCTION_FILE/d;' src/password-store.sh > src/.pass && \
+ 	install -v -d "$(DESTDIR)$(BINDIR)/" && install -m 0755 -v src/.pass "$(DESTDIR)$(BINDIR)/pass"
+ endif
+ 
+diff --git a/src/password-store.sh b/src/password-store.sh
+index 68551a4..2f3b5b7 100755
+--- a/src/password-store.sh
++++ b/src/password-store.sh
+@@ -656,7 +656,7 @@ cmd_extension_or_show() {
+ 	fi
+ }
+ 
+-SYSTEM_EXTENSION_DIR=""
++SYSTEM_EXTENSION_DIR="${SYSTEM_EXTENSION_DIR:-@out@/lib/password-store/extensions}"
+ cmd_extension() {
+ 	check_sneaky_paths "$1"
+ 	local user_extension system_extension extension
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/audit/0001-Set-base-to-an-empty-value.patch b/nixpkgs/pkgs/tools/security/pass/extensions/audit/0001-Set-base-to-an-empty-value.patch
new file mode 100644
index 000000000000..ce6849d677f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/audit/0001-Set-base-to-an-empty-value.patch
@@ -0,0 +1,43 @@
+From a2d5d973f53efb11bdcaecbd0099df9714bc287f Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Tue, 8 Feb 2022 19:35:35 +0100
+Subject: [PATCH] Set `base` to an empty value
+
+`DESTDIR` ensures that everything lands in the correct location (i.e.
+the target store-path on Nix), within this path, everything should be
+moved into `/lib` and `/share`.
+---
+ setup.py | 17 ++---------------
+ 1 file changed, 2 insertions(+), 15 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 1f0a58b..f7baa41 100644
+--- a/setup.py
++++ b/setup.py
+@@ -8,21 +8,8 @@ from pathlib import Path
+ 
+ from setuptools import setup
+ 
+-share = Path(sys.prefix, 'share')
+-base = '/usr'
+-if os.uname().sysname == 'Darwin':
+-    base = '/usr/local'
+-lib = Path(base, 'lib', 'password-store', 'extensions')
+-
+-if '--user' in sys.argv:
+-    if 'PASSWORD_STORE_EXTENSIONS_DIR' in os.environ:
+-        lib = Path(os.environ['PASSWORD_STORE_EXTENSIONS_DIR'])
+-    else:
+-        lib = Path.home() / '.password-store' / '.extensions'
+-    if 'XDG_DATA_HOME' in os.environ:
+-        share = Path(os.environ['XDG_DATA_HOME'])
+-    else:
+-        share = Path.home() / '.local' / 'share'
++share = Path('share')
++lib = Path('lib', 'password-store', 'extensions')
+ 
+ setup(
+     data_files=[
+-- 
+2.33.1
+
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/audit/0002-Fix-audit.bash-setup.patch b/nixpkgs/pkgs/tools/security/pass/extensions/audit/0002-Fix-audit.bash-setup.patch
new file mode 100644
index 000000000000..5703f3c1f652
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/audit/0002-Fix-audit.bash-setup.patch
@@ -0,0 +1,28 @@
+From 8f76b32946430737f97f2702afd828b09536afd2 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Sun, 15 Mar 2020 20:10:11 +0100
+Subject: [PATCH 2/2] Fix audit.bash setup
+
+This sets PASSWORD_STORE_DIR (needed by the python-code) to
+PASSWORD_STORE_DIR and properly falls back to `~/.password-store` if
+it's not set.
+---
+ audit.bash | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/audit.bash b/audit.bash
+index 7a973dc..c40ff76 100755
+--- a/audit.bash
++++ b/audit.bash
+@@ -17,7 +17,7 @@
+ #
+ 
+ cmd_audit() {
+-	export PASSWORD_STORE_DIR=$PREFIX GIT_DIR PASSWORD_STORE_GPG_OPTS
++	export PASSWORD_STORE_DIR=${PASSWORD_STORE_DIR:-$HOME/.password-store} GIT_DIR PASSWORD_STORE_GPG_OPTS
+ 	export X_SELECTION CLIP_TIME PASSWORD_STORE_UMASK GENERATED_LENGTH
+ 	export CHARACTER_SET CHARACTER_SET_NO_SYMBOLS EXTENSIONS PASSWORD_STORE_KEY
+ 	export PASSWORD_STORE_ENABLE_EXTENSIONS PASSWORD_STORE_SIGNING_KEY
+-- 
+2.25.0
+
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/audit/default.nix b/nixpkgs/pkgs/tools/security/pass/extensions/audit/default.nix
new file mode 100644
index 000000000000..365f81759cce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/audit/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, pass, fetchFromGitHub, pythonPackages, makeWrapper, gnupg }:
+
+let
+  pythonEnv = pythonPackages.python.withPackages (p: [ p.requests p.setuptools p.zxcvbn ]);
+
+in stdenv.mkDerivation rec {
+  pname = "pass-audit";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "roddhjav";
+    repo = "pass-audit";
+    rev = "v${version}";
+    sha256 = "sha256-xigP8LxRXITLF3X21zhWx6ooFNSTKGv46yFSt1dd4vs=";
+  };
+
+  patches = [
+    ./0001-Set-base-to-an-empty-value.patch
+    ./0002-Fix-audit.bash-setup.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace audit.bash \
+      --replace 'python3' "${pythonEnv}/bin/python3"
+    substituteInPlace Makefile \
+      --replace "install --root" "install --prefix ''' --root"
+  '';
+
+  outputs = [ "out" "man" ];
+
+  buildInputs = [ pythonEnv ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  # Tests freeze on darwin with: pass-audit-1.1 (checkPhase): EOFError
+  doCheck = !stdenv.isDarwin;
+  nativeCheckInputs = [ pythonPackages.green pass gnupg ];
+  checkPhase = ''
+    ${pythonEnv}/bin/python3 setup.py green -q
+  '';
+
+  installFlags = [ "DESTDIR=${placeholder "out"}" "PREFIX=" ];
+  postInstall = ''
+    wrapProgram $out/lib/password-store/extensions/audit.bash \
+      --prefix PYTHONPATH : "$out/${pythonEnv.sitePackages}" \
+      --run "export COMMAND"
+  '';
+
+  meta = with lib; {
+    description = "Pass extension for auditing your password repository";
+    homepage = "https://github.com/roddhjav/pass-audit";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/checkup.nix b/nixpkgs/pkgs/tools/security/pass/extensions/checkup.nix
new file mode 100644
index 000000000000..b1cff6a20724
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/checkup.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub
+, curl, findutils, gnugrep, gnused, shellcheck }:
+
+let
+  pname = "pass-checkup";
+  version = "0.2.2";
+in stdenv.mkDerivation {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "etu";
+    repo = pname;
+    rev = version;
+    sha256 = "1p65yxr00k35g4bnagszp8i03pmhnrcmipgrdsawps2ba8faqp6r";
+  };
+
+  nativeBuildInputs = [ shellcheck ];
+
+  postPatch = ''
+    substituteInPlace checkup.bash \
+      --replace curl ${curl}/bin/curl \
+      --replace find ${findutils}/bin/find \
+      --replace grep ${gnugrep}/bin/grep \
+      --replace sed ${gnused}/bin/sed
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -m755 checkup.bash $out/lib/password-store/extensions/checkup.bash
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A pass extension to check against the Have I been pwned API to see if your passwords are publicly leaked or not";
+    homepage = "https://github.com/etu/pass-checkup";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ etu ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/default.nix b/nixpkgs/pkgs/tools/security/pass/extensions/default.nix
new file mode 100644
index 000000000000..f7ac0a3d16ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/default.nix
@@ -0,0 +1,16 @@
+{ pkgs, ... }:
+
+with pkgs;
+
+{
+  pass-audit = callPackage ./audit {
+    pythonPackages = python3Packages;
+  };
+  pass-checkup = callPackage ./checkup.nix {};
+  pass-import = callPackage ./import.nix {};
+  pass-otp = callPackage ./otp.nix {};
+  pass-tomb = callPackage ./tomb.nix {};
+  pass-update = callPackage ./update.nix {};
+  pass-genphrase = callPackage ./genphrase.nix {};
+  pass-file = callPackage ./file.nix {};
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/file.nix b/nixpkgs/pkgs/tools/security/pass/extensions/file.nix
new file mode 100644
index 000000000000..1c07e289ad28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/file.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "pass-file";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "dvogt23";
+    repo = pname;
+    rev = version;
+    hash = "sha256-18KvmcfLwelyk9RV/IMaj6O/nkQEQz84eUEB/mRaKE4=";
+  };
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A pass extension that allows to add files to password-store";
+    homepage = "https://github.com/dvogt23/pass-file";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ taranarmo ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/genphrase.nix b/nixpkgs/pkgs/tools/security/pass/extensions/genphrase.nix
new file mode 100644
index 000000000000..c8a1f730e049
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/genphrase.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "pass-genphrase";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "congma";
+    repo = "pass-genphrase";
+    rev = version;
+    sha256 = "01dff2jlp111y7vlmp1wbgijzphhlzc19m02fs8nzmn5vxyffanx";
+  };
+
+  dontBuild = true;
+
+  buildInputs = [ python3 ];
+
+  installTargets = [ "globalinstall" ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postFixup = ''
+    substituteInPlace $out/lib/password-store/extensions/genphrase.bash \
+      --replace '$EXTENSIONS' "$out/lib/password-store/extensions/"
+  '';
+
+  meta = with lib; {
+    description = "Pass extension that generates memorable passwords";
+    homepage = "https://github.com/congma/pass-genphrase";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ seqizz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/import.nix b/nixpkgs/pkgs/tools/security/pass/extensions/import.nix
new file mode 100644
index 000000000000..8c51356e184b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/import.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3Packages
+, gnupg
+, pass
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pass-import";
+  version = "3.2";
+
+  src = fetchFromGitHub {
+    owner = "roddhjav";
+    repo = "pass-import";
+    rev = "v${version}";
+    sha256 = "0hrpg7yiv50xmbajfy0zdilsyhbj5iv0qnlrgkfv99q1dvd5qy56";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "support-for-pykeepass-4.0.3.patch";
+      url = "https://github.com/roddhjav/pass-import/commit/f1b167578916d971ee4f99be99ba0e86ef49015e.patch";
+      hash = "sha256-u6bJbV3/QTfRaPauKSyCWNodpy6CKsreMXUZWKRbee0=";
+    })
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    cryptography
+    defusedxml
+    pyaml
+    pykeepass
+    python-magic # similar API to "file-magic", but already in nixpkgs.
+    secretstorage
+  ];
+
+  nativeCheckInputs = [
+    gnupg
+    pass
+    python3Packages.pytestCheckHook
+  ];
+
+  disabledTests = [
+    "test_import_gnome_keyring" # requires dbus, which pytest doesn't support
+  ];
+
+  postInstall = ''
+    mkdir -p $out/lib/password-store/extensions
+    cp ${src}/import.bash $out/lib/password-store/extensions/import.bash
+    wrapProgram $out/lib/password-store/extensions/import.bash \
+      --prefix PATH : "${python3Packages.python.withPackages (_: propagatedBuildInputs)}/bin" \
+      --prefix PYTHONPATH : "$out/${python3Packages.python.sitePackages}" \
+      --run "export PREFIX"
+    cp -r ${src}/share $out/
+  '';
+
+  postCheck = ''
+    $out/bin/pimport --list-exporters --list-importers
+  '';
+
+  meta = with lib; {
+    description = "Pass extension for importing data from existing password managers";
+    homepage = "https://github.com/roddhjav/pass-import";
+    changelog = "https://github.com/roddhjav/pass-import/blob/v${version}/CHANGELOG.rst";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lovek323 fpletz tadfisher ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/otp.nix b/nixpkgs/pkgs/tools/security/pass/extensions/otp.nix
new file mode 100644
index 000000000000..15f075ccec40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/otp.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, oath-toolkit }:
+
+stdenv.mkDerivation rec {
+  pname = "pass-otp";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "tadfisher";
+    repo = "pass-otp";
+    rev = "v${version}";
+    sha256 = "0cpqrf3939hcvwg7sd8055ghc8x964ilimlri16czzx188a9jx9v";
+  };
+
+  buildInputs = [ oath-toolkit ];
+
+  dontBuild = true;
+
+  patchPhase = ''
+    sed -i -e 's|OATH=\$(which oathtool)|OATH=${oath-toolkit}/bin/oathtool|' otp.bash
+  '';
+
+  installFlags = [ "PREFIX=$(out)"
+                   "BASHCOMPDIR=$(out)/share/bash-completion/completions"
+                 ];
+
+  meta = with lib; {
+    description = "A pass extension for managing one-time-password (OTP) tokens";
+    homepage = "https://github.com/tadfisher/pass-otp";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jwiegley tadfisher toonn ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/tomb.nix b/nixpkgs/pkgs/tools/security/pass/extensions/tomb.nix
new file mode 100644
index 000000000000..58630c4ec9f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/tomb.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, tomb }:
+
+stdenv.mkDerivation rec {
+  pname = "pass-tomb";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "roddhjav";
+    repo = "pass-tomb";
+    rev = "v${version}";
+    sha256 = "sha256-kbbMHmYmeyt7HM8YiNhknePm1vUaXWWXPWePKGpbU+o=";
+  };
+
+  buildInputs = [ tomb ];
+
+  dontBuild = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postFixup = ''
+    substituteInPlace $out/lib/password-store/extensions/tomb.bash \
+      --replace 'TOMB="''${PASSWORD_STORE_TOMB:-tomb}"' 'TOMB="''${PASSWORD_STORE_TOMB:-${tomb}/bin/tomb}"'
+  '';
+
+  meta = with lib; {
+    description = "Pass extension that keeps the password store encrypted inside a tomb";
+    homepage = "https://github.com/roddhjav/pass-tomb";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lovek323 fpletz tadfisher ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/update.nix b/nixpkgs/pkgs/tools/security/pass/extensions/update.nix
new file mode 100644
index 000000000000..50a4c49b90d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/update.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "pass-update";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "roddhjav";
+    repo = "pass-update";
+    rev = "v${version}";
+    sha256 = "0yx8w97jcp6lv7ad5jxqnj04csbrn2hhc4pskssxknw2sbvg4g6c";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "BASHCOMPDIR ?= /etc/bash_completion.d" "BASHCOMPDIR ?= $out/share/bash-completion/completions"
+  '';
+
+  dontBuild = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Pass extension that provides an easy flow for updating passwords";
+    homepage = "https://github.com/roddhjav/pass-update";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lovek323 fpletz tadfisher ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/no-darwin-getopt.patch b/nixpkgs/pkgs/tools/security/pass/no-darwin-getopt.patch
new file mode 100644
index 000000000000..7e8b66dd7f1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/no-darwin-getopt.patch
@@ -0,0 +1,11 @@
+diff --git a/src/platform/darwin.sh b/src/platform/darwin.sh
+index f6cc471..e2e8bba 100644
+--- a/src/platform/darwin.sh
++++ b/src/platform/darwin.sh
+@@ -39,6 +39,5 @@ qrcode() {
+ 	fi
+ }
+ 
+-GETOPT="$({ test -x /usr/local/opt/gnu-getopt/bin/getopt && echo /usr/local/opt/gnu-getopt; } || brew --prefix gnu-getopt 2>/dev/null || { which port &>/dev/null && echo /opt/local; } || echo /usr/local)/bin/getopt"
+ SHRED="srm -f -z"
+ BASE64="openssl base64"
diff --git a/nixpkgs/pkgs/tools/security/pass/rofi-pass.nix b/nixpkgs/pkgs/tools/security/pass/rofi-pass.nix
new file mode 100644
index 000000000000..b8fd130df24b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/rofi-pass.nix
@@ -0,0 +1,92 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, unstableGitUpdater
+, coreutils
+, util-linux
+, gnugrep
+, libnotify
+, pwgen
+, findutils
+, gawk
+, gnused
+# wayland-only deps
+, rofi-wayland
+, pass-wayland
+, wl-clipboard
+, wtype
+# x11-only deps
+, rofi
+, pass
+, xclip
+, xdotool
+# backend selector
+, backend ? "x11"
+}:
+
+assert lib.assertOneOf "backend" backend [ "x11" "wayland" ];
+
+stdenv.mkDerivation {
+  pname = "rofi-pass";
+  version = "unstable-2024-02-13";
+
+  src = fetchFromGitHub {
+    owner = "carnager";
+    repo = "rofi-pass";
+    rev = "8aa6b9293a8f0af267425326fa966966ca42085e";
+    hash = "sha256-g/AuLYj0yvLCXFR3y9GbMiE6hDCPBeuFM145c2Ukvys=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a rofi-pass $out/bin/rofi-pass
+
+    mkdir -p $out/share/doc/rofi-pass/
+    cp -a config.example $out/share/doc/rofi-pass/config.example
+  '';
+
+  wrapperPath = lib.makeBinPath ([
+    coreutils
+    findutils
+    gawk
+    gnugrep
+    gnused
+    libnotify
+    pwgen
+    util-linux
+  ] ++ lib.optionals (backend == "x11") [
+    rofi
+    (pass.withExtensions (ext: [ ext.pass-otp ]))
+    xclip
+    xdotool
+  ] ++ lib.optionals (backend == "wayland") [
+    rofi-wayland
+    (pass-wayland.withExtensions (ext: [ ext.pass-otp ]))
+    wl-clipboard
+    wtype
+  ]);
+
+  fixupPhase = ''
+    patchShebangs $out/bin
+
+    wrapProgram $out/bin/rofi-pass \
+      --prefix PATH : "$wrapperPath" \
+      --set-default ROFI_PASS_BACKEND ${if backend == "wayland" then "wtype" else "xdotool"} \
+      --set-default ROFI_PASS_CLIPBOARD_BACKEND ${if backend == "wayland" then "wl-clipboard" else "xclip"}
+  '';
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = {
+    description = "A script to make rofi work with password-store";
+    homepage = "https://github.com/carnager/rofi-pass";
+    license = lib.licenses.gpl3;
+    platforms = with lib.platforms; linux;
+    maintainers = with lib.maintainers; [ lilyinstarlight ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch b/nixpkgs/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch
new file mode 100644
index 000000000000..a71a279c1ef7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch
@@ -0,0 +1,50 @@
+From d11261c2ad184daf6e9edd777bc8a3372c277b4b Mon Sep 17 00:00:00 2001
+From: Johannes Frankenau <johannes@frankenau.net>
+Date: Fri, 10 Aug 2018 09:49:57 +0200
+Subject: [PATCH] Patch the clip() function to work even when using
+ single-binary coreutils
+
+---
+ src/platform/cygwin.sh | 4 ++--
+ src/platform/darwin.sh | 4 ++--
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/src/platform/cygwin.sh b/src/platform/cygwin.sh
+index 5a8d5ea..423e0ce 100644
+--- a/src/platform/cygwin.sh
++++ b/src/platform/cygwin.sh
+@@ -3,11 +3,11 @@
+ 
+ clip() {
+ 	local sleep_argv0="password store sleep on display $DISPLAY"
+-	pkill -f "^$sleep_argv0" 2>/dev/null && sleep 0.5
++	pkill -P $(pgrep -f "^$sleep_argv0") 2>/dev/null && sleep 0.5
+ 	local before="$($BASE64 < /dev/clipboard)"
+ 	echo -n "$1" > /dev/clipboard
+ 	(
+-		( exec -a "$sleep_argv0" sleep "$CLIP_TIME" )
++		( exec -a "$sleep_argv0" bash <(echo sleep "$CLIP_TIME") )
+ 		local now="$($BASE64 < /dev/clipboard)"
+ 		[[ $now != $(echo -n "$1" | $BASE64) ]] && before="$now"
+ 		echo "$before" | $BASE64 -d > /dev/clipboard
+diff --git a/src/platform/darwin.sh b/src/platform/darwin.sh
+index 342ecce..9e12837 100644
+--- a/src/platform/darwin.sh
++++ b/src/platform/darwin.sh
+@@ -3,11 +3,11 @@
+ 
+ clip() {
+ 	local sleep_argv0="password store sleep for user $(id -u)"
+-	pkill -f "^$sleep_argv0" 2>/dev/null && sleep 0.5
++	pkill -P $(pgrep -f "^$sleep_argv0") 2>/dev/null && sleep 0.5
+ 	local before="$(pbpaste | $BASE64)"
+ 	echo -n "$1" | pbcopy
+ 	(
+-		( exec -a "$sleep_argv0" sleep "$CLIP_TIME" )
++		( exec -a "$sleep_argv0" bash <(echo sleep "$CLIP_TIME") )
+ 		local now="$(pbpaste | $BASE64)"
+ 		[[ $now != $(echo -n "$1" | $BASE64) ]] && before="$now"
+ 		echo "$before" | $BASE64 -d | pbcopy
+-- 
+2.16.4
+
diff --git a/nixpkgs/pkgs/tools/security/pass/wofi-pass.nix b/nixpkgs/pkgs/tools/security/pass/wofi-pass.nix
new file mode 100644
index 000000000000..b6edce34d20c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/wofi-pass.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pass-wayland
+, coreutils
+, gnugrep
+, libnotify
+, pwgen
+, findutils
+, makeWrapper
+, wl-clipboard
+, wtype
+, wofi
+, extensions ? exts: []
+}:
+
+let
+  wrapperPath = lib.makeBinPath [
+    coreutils
+    findutils
+    gnugrep
+    libnotify
+    pwgen
+    wofi
+    wl-clipboard
+    wtype
+    (pass-wayland.withExtensions extensions)
+  ];
+in
+stdenv.mkDerivation rec {
+  pname = "wofi-pass";
+  version = "23.1.4";
+
+  src = fetchFromGitHub {
+    owner = "schmidtandreas";
+    repo = "wofi-pass";
+    rev = "v${version}";
+    sha256 = "sha256-Ycu1NFHoglJdOzGuJ7yfmDo1+f+FMPkpQXJuz6nvtig=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm755 wofi-pass -t $out/bin
+    install -Dm755 wofi-pass.conf -t $out/share/doc/wofi-pass/wofi-pass.conf
+  '';
+
+  fixupPhase = ''
+    patchShebangs $out/bin
+
+    wrapProgram $out/bin/wofi-pass \
+      --prefix PATH : "${wrapperPath}"
+  '';
+
+  meta = {
+    description = "A script to make wofi work with password-store";
+    homepage = "https://github.com/schmidtandreas/wofi-pass";
+    maintainers = with lib.maintainers; [ akechishiro ];
+    license = lib.licenses.gpl2Plus;
+    platforms = with lib.platforms; linux;
+    mainProgram = "wofi-pass";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass2csv/default.nix b/nixpkgs/pkgs/tools/security/pass2csv/default.nix
new file mode 100644
index 000000000000..aad6338391ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass2csv/default.nix
@@ -0,0 +1,35 @@
+{ buildPythonApplication
+, fetchPypi
+, lib
+, python-gnupg
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pass2csv";
+  version = "1.1.1";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-p7r+zDakKy/N+RbxAfGatvkYCDKRh5T3owoYUrHJ5N0=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    python-gnupg
+  ];
+
+  # Project has no tests.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Export pass(1), \"the standard unix password manager\", to CSV";
+    homepage = "https://github.com/reinefjord/pass2csv";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wolfangaukang ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/passage/darwin-getopt-path.patch b/nixpkgs/pkgs/tools/security/passage/darwin-getopt-path.patch
new file mode 100644
index 000000000000..0225f05c19d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/passage/darwin-getopt-path.patch
@@ -0,0 +1,12 @@
+diff --git a/src/platform/darwin.sh b/src/platform/darwin.sh
+index 9a1fda8..4f7ce3d 100644
+--- a/src/platform/darwin.sh
++++ b/src/platform/darwin.sh
+@@ -39,6 +39,6 @@ qrcode() {
+ 	fi
+ }
+ 
+-GETOPT="$({ test -x /usr/local/opt/gnu-getopt/bin/getopt && echo /usr/local/opt/gnu-getopt; } || brew --prefix gnu-getopt 2>/dev/null || { command -v port &>/dev/null && echo /opt/local; } || echo /usr/local)/bin/getopt"
++GETOPT="@getopt@/bin/getopt"
+ SHRED="srm -f -z"
+ BASE64="openssl base64"
diff --git a/nixpkgs/pkgs/tools/security/passage/default.nix b/nixpkgs/pkgs/tools/security/passage/default.nix
new file mode 100644
index 000000000000..1d6bdfa225aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/passage/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeBinaryWrapper
+, substituteAll
+, age
+, getopt
+, coreutils
+, findutils
+, gnugrep
+, gnused
+, qrencode ? null
+, wl-clipboard ? null
+, git ? null
+, xclip ? null
+# Used to pretty-print list of all stored passwords, but is not needed to fetch
+# or store password by its name. Most users would want this dependency.
+, tree ? null
+}:
+
+stdenv.mkDerivation {
+  pname = "passage";
+  version = "unstable-2022-05-01";
+
+  src = fetchFromGitHub {
+    owner = "FiloSottile";
+    repo = "passage";
+    rev = "1262d308f09db9b243513a428ab4b8fb1c30d31d";
+    sha256 = "1val8wl9kzlxj4i1rrh2iiyf97w9akffvr0idvbkdb09hfzz4lz8";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./darwin-getopt-path.patch;
+      inherit getopt;
+    })
+  ];
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  extraPath = lib.makeBinPath [
+    age
+    coreutils
+    findutils
+    git
+    gnugrep
+    gnused
+    qrencode
+    tree
+    wl-clipboard
+    xclip
+  ];
+
+  # Using $0 is bad, it causes --help to mention ".passage-wrapped".
+  postInstall = ''
+    substituteInPlace $out/bin/passage --replace 'PROGRAM="''${0##*/}"' 'PROGRAM=passage'
+    wrapProgram $out/bin/passage --prefix PATH : $extraPath --argv0 $pname
+  '';
+
+  installFlags = [ "PREFIX=$(out)" "WITH_ALLCOMP=yes" ];
+
+  meta = with lib; {
+    description = "Stores, retrieves, generates, and synchronizes passwords securely";
+    homepage    = "https://github.com/FiloSottile/passage";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ kaction ma27 ];
+    platforms   = platforms.unix;
+    mainProgram = "passage";
+
+    longDescription = ''
+      passage is a fork of password-store (https://www.passwordstore.org) that uses
+      age (https://age-encryption.org) as a backend instead of GnuPG.
+
+      It keeps passwords inside age(1) encrypted files inside a simple
+      directory tree and provides a series of commands for manipulating the
+      password store, allowing the user to add, remove, edit and synchronize
+      passwords.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/passff-host/default.nix b/nixpkgs/pkgs/tools/security/passff-host/default.nix
new file mode 100644
index 000000000000..bc882cb419f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/passff-host/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchFromGitHub, python3, pass }:
+
+stdenv.mkDerivation rec {
+  pname = "passff-host";
+  version = "1.2.4";
+
+  src = fetchFromGitHub {
+    owner = "passff";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-P5h0B5ilwp3OVyDHIOQ23Zv4eLjN4jFkdZF293FQnNE=";
+  };
+
+  buildInputs = [ python3 ];
+  makeFlags = [ "VERSION=${version}" ];
+
+  patchPhase = ''
+    sed -i 's#COMMAND = "pass"#COMMAND = "${pass}/bin/pass"#' src/passff.py
+  '';
+
+  installPhase = ''
+    substituteInPlace bin/${version}/passff.json \
+      --replace PLACEHOLDER $out/share/passff-host/passff.py
+
+    install -Dt $out/share/passff-host \
+      bin/${version}/passff.{py,json}
+
+    nativeMessagingPaths=(
+      /lib/mozilla/native-messaging-hosts
+      /etc/opt/chrome/native-messaging-hosts
+      /etc/chromium/native-messaging-hosts
+      /etc/vivaldi/native-messaging-hosts
+      /lib/librewolf/native-messaging-hosts
+    )
+
+    for manifestDir in "''${nativeMessagingPaths[@]}"; do
+      install -d $out$manifestDir
+      ln -s $out/share/passff-host/passff.json $out$manifestDir/
+    done
+  '';
+
+  meta = with lib; {
+    description = "Host app for the WebExtension PassFF";
+    homepage = "https://github.com/passff/passff-host";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/passphrase2pgp/default.nix b/nixpkgs/pkgs/tools/security/passphrase2pgp/default.nix
new file mode 100644
index 000000000000..0ccbcca06c20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/passphrase2pgp/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, nix-update-script }:
+
+buildGoModule rec {
+  pname = "passphrase2pgp";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "skeeto";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-it1XYzLiteL0oq4SZp5E3s6oSkFKi3ZY0Lt+P0gmNag=";
+  };
+
+  vendorHash = "sha256-2H9YRVCaari47ppSkcQYg/P4Dzb4k5PLjKAtfp39NR8=";
+
+  postInstall = ''
+    mkdir -p $out/share/doc/$name
+    cp README.md $out/share/doc/$name
+  '';
+
+  checkPhase = ''
+    output=$(echo NONE | ../go/bin/passphrase2pgp -a -u NONE -i /dev/stdin | sha256sum)
+    if [[ "$output" != "23f59f4346f35e2feca6ef703ea64973524dec365ea672f23e7afe79be1049dd  -" ]] ; then
+      echo "passphrase2pgp introduced backward-incompatible change"
+      exit 1
+    fi
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Predictable, passphrase-based PGP key generator";
+    homepage = "https://github.com/skeeto/passphrase2pgp";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ kaction ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pcsc-cyberjack/default.nix b/nixpkgs/pkgs/tools/security/pcsc-cyberjack/default.nix
new file mode 100644
index 000000000000..04aad0b27739
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsc-cyberjack/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, libusb1, pcsclite }:
+
+let
+  version = "3.99.5";
+  suffix = "SP15";
+  tarBall = "${version}final.${suffix}";
+
+in
+stdenv.mkDerivation rec {
+  pname = "pcsc-cyberjack";
+  inherit version;
+
+  src = fetchurl {
+    url =
+      "https://support.reiner-sct.de/downloads/LINUX/V${version}_${suffix}/${pname}_${tarBall}.tar.bz2";
+    sha256 = "sha256-rLfCgyRQcYdWcTdnxLPvUAgy1lLtUbNRELkQsR69Rno=";
+  };
+
+  outputs = [ "out" "tools" ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ libusb1 pcsclite ];
+
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=narrowing";
+
+  configureFlags = [
+    "--with-usbdropdir=${placeholder "out"}/pcsc/drivers"
+    "--bindir=${placeholder "tools"}/bin"
+  ];
+
+  postInstall = "make -C tools/cjflash install";
+
+  meta = with lib; {
+    description = "REINER SCT cyberJack USB chipcard reader user space driver";
+    homepage = "https://www.reiner-sct.com/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ aszlig flokli ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pcsc-safenet/default.nix b/nixpkgs/pkgs/tools/security/pcsc-safenet/default.nix
new file mode 100644
index 000000000000..27d3c639ac8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsc-safenet/default.nix
@@ -0,0 +1,103 @@
+{ stdenv
+, lib
+, fetchzip
+, autoPatchelfHook
+, dpkg
+, gtk3
+, openssl_1_1
+, pcsclite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pcsc-safenet";
+  version = "10.8.28";
+
+  debName = "Installation/Standard/Ubuntu-2004/safenetauthenticationclient_${version}_amd64.deb";
+
+  # extract debian package from larger zip file
+  src =
+    let
+      versionWithUnderscores = builtins.replaceStrings ["."] ["_"] version;
+    in fetchzip {
+      url = "https://www.digicert.com/StaticFiles/SAC_${versionWithUnderscores}_GA_Build.zip";
+      hash = "sha256-7XWj3T9/KnmgQ05urOJV6dqgkAS/A2G7efnqjQO2ing=";
+    };
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  unpackPhase = ''
+    dpkg-deb -x "$src/$debName" .
+  '';
+
+  buildInputs = [
+    gtk3
+    openssl_1_1
+    pcsclite
+  ];
+
+  runtimeDependencies = [
+    openssl_1_1
+  ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+  ];
+
+  installPhase = ''
+    mv usr/* .
+
+    mkdir -p pcsc/drivers
+    mv -- lib/pkcs11/* pcsc/drivers/
+    rmdir lib/pkcs11
+
+    mkdir "$out"
+    cp -r ./* "$out/"
+
+    # for each library like libfoo.so.1.2.3, create symlinks to it from libfoo.so, libfoo.so.1, libfoo.so.1.2
+    (
+      cd "$out/lib/" || exit
+      for f in *.so.*.*.*; do                # find library names with three-layer suffixes
+        ln -sf "$f" "''${f%.*}" || exit      # strip only one suffix layer
+        ln -sf "$f" "''${f%.*.*}" || exit    # strip two suffix layers
+        ln -sf "$f" "''${f%.*.*.*}" || exit  # strip all three suffix layers
+      done
+    ) || exit
+
+    # when library links are missing in pcsc/drivers, create them
+    (
+      cd "$out/pcsc/drivers" || exit
+      for f in *; do
+        if [[ ! -e $f && -e ../../lib/$f ]]; then
+          ln -sf ../../lib/"$f" "$f" || exit
+        fi
+      done
+    ) || exit
+
+    ln -sf ${lib.getLib openssl_1_1}/lib/libcrypto.so $out/lib/libcrypto.so.1.1.0
+  '';
+
+  dontAutoPatchelf = true;
+
+  # Patch DYN shared libraries (autoPatchElfHook only patches EXEC | INTERP).
+  postFixup = ''
+    autoPatchelf "$out"
+
+    runtime_rpath="${lib.makeLibraryPath runtimeDependencies}"
+
+    for mod in $(find "$out" -type f -name '*.so.*'); do
+      mod_rpath="$(patchelf --print-rpath "$mod")"
+      patchelf --set-rpath "$runtime_rpath:$mod_rpath" "$mod"
+    done;
+  '';
+
+  meta = with lib; {
+    homepage = "https://safenet.gemalto.com/multi-factor-authentication/security-applications/authentication-client-token-management";
+    description = "Safenet Authentication Client";
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ wldhx ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/default.nix b/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/default.nix
new file mode 100644
index 000000000000..af3a95f0a2aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, unzip, libusb-compat-0_1 }:
+
+let
+  arch = if stdenv.hostPlatform.system == "i686-linux" then "32"
+  else if stdenv.hostPlatform.system == "x86_64-linux" then "64"
+  else throw "Unsupported system: ${stdenv.hostPlatform.system}";
+in
+stdenv.mkDerivation rec {
+  pname = "pcsc-scm-scl";
+  version = "2.09";
+
+  src = fetchurl {
+    url = "http://files.identiv.com/products/smart-card-readers/contactless/scl010-011/Linux_Driver_Ver${version}.zip";
+    sha256 = "0ik26sxgqgsqplksl87z61vwmx51k7plaqmrkdid7xidgfhfxr42";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  unpackPhase = ''
+    unzip $src
+    tar xf "Linux Driver Ver${version}/sclgeneric_${version}_linux_${arch}bit.tar.gz"
+    export sourceRoot=$(readlink -e sclgeneric_${version}_linux_${arch}bit)
+  '';
+
+  # Add support for SCL011 nPA (subsidized model for German eID)
+  patches = [ ./eid.patch ];
+
+  installPhase = ''
+    mkdir -p $out/pcsc/drivers
+    cp -r proprietary/*.bundle $out/pcsc/drivers
+  '';
+
+  libPath = lib.makeLibraryPath [ libusb-compat-0_1 ];
+
+  fixupPhase = ''
+    patchelf --set-rpath $libPath \
+      $out/pcsc/drivers/SCLGENERIC.bundle/Contents/Linux/libSCLGENERIC.so.${version};
+  '';
+
+  meta = with lib; {
+    description = "SCM Microsystems SCL011 chipcard reader user space driver";
+    homepage = "https://www.scm-pc-card.de/index.php?lang=en&page=product&function=show_product&product_id=630";
+    downloadPage = "https://support.identiv.com/scl010-scl011/";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ sephalon ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/eid.patch b/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/eid.patch
new file mode 100644
index 000000000000..6e7ffd60f72f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/eid.patch
@@ -0,0 +1,28 @@
+diff --git a/proprietary/SCLGENERIC.bundle/Contents/Info.plist b/proprietary/SCLGENERIC.bundle/Contents/Info.plist
+index 412d6b9..5d1c6cc 100755
+--- a/proprietary/SCLGENERIC.bundle/Contents/Info.plist
++++ b/proprietary/SCLGENERIC.bundle/Contents/Info.plist
+@@ -34,6 +34,7 @@
+ 		<string>0x04E6</string>		

+ 		<string>0x04E6</string>

+ 		<string>0x04E6</string>

++		<string>0x04E6</string>

+ 	</array>

+ 

+ 	<key>ifdProductID</key>

+@@ -42,6 +43,7 @@
+ 		<string>0x5291</string>

+ 		<string>0x5290</string>

+ 		<string>0x5293</string>

++		<string>0x5292</string>

+ 	</array>

+ 

+ 	<key>ifdFriendlyName</key>

+@@ -50,6 +52,7 @@
+ 		<string>SCL010 Contactless Reader</string>

+ 		<string>SCR331CL-NTTCom</string>

+ 		<string>SCL011G Contactless Reader</string>

++		<string>SCM Microsystems, Inc. SCL011 RFID reader</string>

+ 	</array>

+ 

+ </dict>

diff --git a/nixpkgs/pkgs/tools/security/pcsc-tools/default.nix b/nixpkgs/pkgs/tools/security/pcsc-tools/default.nix
new file mode 100644
index 000000000000..c479caa0a613
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsc-tools/default.nix
@@ -0,0 +1,96 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoconf-archive
+, autoreconfHook
+, gobject-introspection
+, makeWrapper
+, pkg-config
+, wrapGAppsHook
+, systemd
+, dbus
+, pcsclite
+, PCSC
+, wget
+, coreutils
+, perlPackages
+, testers
+, nix-update-script
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pcsc-tools";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "LudovicRousseau";
+    repo = "pcsc-tools";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-+cvgSNlSYSJ2Zr2iWk96AacyQ38ru9/RK8yeK3ceqCo=";
+  };
+
+  configureFlags = [
+    "--datarootdir=${placeholder "out"}/share"
+  ];
+
+  buildInputs = [ dbus perlPackages.perl pcsclite ]
+    ++ lib.optional stdenv.isDarwin PCSC
+    ++ lib.optional stdenv.isLinux systemd;
+
+  nativeBuildInputs = [
+    autoconf-archive
+    autoreconfHook
+    gobject-introspection
+    makeWrapper
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/scriptor \
+      --set PERL5LIB "${with perlPackages; makePerlPath [ ChipcardPCSC libintl-perl ]}"
+
+    wrapProgram $out/bin/gscriptor \
+      ''${makeWrapperArgs[@]} \
+      --set PERL5LIB "${with perlPackages; makePerlPath [
+          ChipcardPCSC
+          libintl-perl
+          GlibObjectIntrospection
+          Glib
+          Gtk3
+          Pango
+          Cairo
+          CairoGObject
+      ]}"
+
+    wrapProgram $out/bin/ATR_analysis \
+      --set PERL5LIB "${with perlPackages; makePerlPath [ ChipcardPCSC libintl-perl ]}"
+
+    wrapProgram $out/bin/pcsc_scan \
+      --prefix PATH : "$out/bin:${lib.makeBinPath [ coreutils wget ]}"
+
+    install -Dm444 -t $out/share/pcsc smartcard_list.txt
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = "pcsc_scan -V";
+    };
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Tools used to test a PC/SC driver, card or reader";
+    homepage = "https://pcsc-tools.apdu.fr/";
+    changelog = "https://github.com/LudovicRousseau/pcsc-tools/releases/tag/${finalAttrs.version}";
+    license = licenses.gpl2Plus;
+    mainProgram = "pcsc_scan";
+    maintainers = with maintainers; [ peterhoeg anthonyroussel ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/pcsclite/default.nix b/nixpkgs/pkgs/tools/security/pcsclite/default.nix
new file mode 100644
index 000000000000..2b55b76b6654
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsclite/default.nix
@@ -0,0 +1,94 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, autoreconfHook
+, autoconf-archive
+, flex
+, pkg-config
+, perl
+, python3
+, dbus
+, polkit
+, systemdLibs
+, IOKit
+, testers
+, nix-update-script
+, pname ? "pcsclite"
+, polkitSupport ? false
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  inherit pname;
+  version = "2.0.1";
+
+  outputs = [ "out" "lib" "dev" "doc" "man" ];
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "rousseau";
+    repo = "PCSC";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-7NGlU4byGxtGBticewg8K4FUiDSQZAiB7Q/y+LaqKPo=";
+  };
+
+  configureFlags = [
+    "--enable-confdir=/etc"
+    # The OS should care on preparing the drivers into this location
+    "--enable-usbdropdir=/var/lib/pcsc/drivers"
+    (lib.enableFeature stdenv.isLinux "libsystemd")
+    (lib.enableFeature polkitSupport "polkit")
+  ] ++ lib.optionals stdenv.isLinux [
+    "--enable-ipcdir=/run/pcscd"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+  ];
+
+  makeFlags = [
+    "POLICY_DIR=$(out)/share/polkit-1/actions"
+  ];
+
+  # disable building pcsc-wirecheck{,-gen} when cross compiling
+  # see also: https://github.com/LudovicRousseau/PCSC/issues/25
+  postPatch = lib.optionalString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    substituteInPlace src/Makefile.am \
+      --replace "noinst_PROGRAMS = testpcsc pcsc-wirecheck pcsc-wirecheck-gen" \
+                "noinst_PROGRAMS = testpcsc"
+  '';
+
+  postInstall = ''
+    # pcsc-spy is a debugging utility and it drags python into the closure
+    moveToOutput bin/pcsc-spy "$dev"
+  '';
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [
+    autoreconfHook
+    autoconf-archive
+    flex
+    pkg-config
+    perl
+  ];
+
+  buildInputs = [ python3 ]
+    ++ lib.optionals stdenv.isLinux [ systemdLibs ]
+    ++ lib.optionals stdenv.isDarwin [ IOKit ]
+    ++ lib.optionals polkitSupport [ dbus polkit ];
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = "pcscd --version";
+    };
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Middleware to access a smart card using SCard API (PC/SC)";
+    homepage = "https://pcsclite.apdu.fr/";
+    changelog = "https://salsa.debian.org/rousseau/PCSC/-/blob/${finalAttrs.version}/ChangeLog";
+    license = licenses.bsd3;
+    mainProgram = "pcscd";
+    maintainers = [ maintainers.anthonyroussel ];
+    platforms = with platforms; unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/pdfcrack/default.nix b/nixpkgs/pkgs/tools/security/pdfcrack/default.nix
new file mode 100644
index 000000000000..d4930b023b6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pdfcrack/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pdfcrack";
+  version = "0.20";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pdfcrack/pdfcrack/pdfcrack-${version}.tar.gz";
+    hash = "sha256-e4spsY/NXLmErrZA7gbt8J/t5HCbWcMv7k8thoYN5bQ=";
+  };
+
+  installPhase = ''
+    install -Dt $out/bin pdfcrack
+  '';
+
+  meta = with lib; {
+    homepage = "https://pdfcrack.sourceforge.net/";
+    description = "Small command line driven tool for recovering passwords and content from PDF files";
+    license = with licenses; [ gpl2Plus ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ qoelet ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pentestgpt/default.nix b/nixpkgs/pkgs/tools/security/pentestgpt/default.nix
new file mode 100644
index 000000000000..328ba0ca9a8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pentestgpt/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pentestgpt";
+  version = "unstable-2023-06-27";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "GreyDGL";
+    repo = "PentestGPT";
+    rev = "e63a91f466a035e036827e8f492bc47c5c1135af";
+    hash = "sha256-m0R/kMmbr5Ixuqvw6ZRoaAGCnI3j86Iwk4+TYqv0WbU=";
+  };
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace "playwright==1.28.0" "playwright" \
+      --replace "beautifulsoup4~=4.11.2" "" \
+      --replace "black" "" \
+      --replace "pytest" ""
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    colorama
+    google
+    langchain
+    loguru
+    openai
+    playwright
+    prompt-toolkit
+    pycookiecheat
+    pyyaml
+    requests
+    rich
+    sqlmap
+    tiktoken
+  ];
+
+  # Tests require network access
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "pentestgpt"
+  ];
+
+  meta = with lib; {
+    description = "GPT-empowered penetration testing tool";
+    homepage = "https://github.com/GreyDGL/PentestGPT";
+    changelog = "https://github.com/GreyDGL/PentestGPT/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pgpdump/default.nix b/nixpkgs/pkgs/tools/security/pgpdump/default.nix
new file mode 100644
index 000000000000..9ebe0d920027
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pgpdump/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub
+, supportCompressedPackets ? true, zlib, bzip2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pgpdump";
+  version = "0.36";
+
+  src = fetchFromGitHub {
+    owner = "kazu-yamamoto";
+    repo = "pgpdump";
+    rev = "v${version}";
+    sha256 = "sha256-JKedgHCTDnvLyLR3nGl4XFAaxXDU1TgHrxPMlRFwtBo=";
+  };
+
+  buildInputs = lib.optionals supportCompressedPackets [ zlib bzip2 ];
+
+  meta = with lib; {
+    description = "A PGP packet visualizer";
+    longDescription = ''
+      pgpdump is a PGP packet visualizer which displays the packet format of
+      OpenPGP (RFC 4880) and PGP version 2 (RFC 1991).
+    '';
+    homepage = "http://www.mew.org/~kazu/proj/pgpdump/en/";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/phrasendrescher/default.nix b/nixpkgs/pkgs/tools/security/phrasendrescher/default.nix
new file mode 100644
index 000000000000..d4f7242b2896
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/phrasendrescher/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, openssl, libssh2, gpgme }:
+
+stdenv.mkDerivation rec {
+  pname = "phrasendrescher";
+  version = "1.2.2c";
+
+  src = fetchurl {
+    url = "http://leidecker.info/projects/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "18vg6h294219v14x5zqm8ddmq5amxlbz7pw81lcmpz8v678kwyph";
+  };
+
+  postPatch = ''
+    substituteInPlace configure \
+      --replace 'SSL_LIB="ssl"' 'SSL_LIB="crypto"'
+  '';
+
+  buildInputs = [ openssl libssh2 gpgme ];
+
+  configureFlags = [ "--with-plugins" ];
+
+  meta = with lib; {
+    description = "A modular and multi processing pass phrase cracking tool";
+    homepage = "https://leidecker.info/projects/phrasendrescher/index.shtml";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bjornfor ];
+    mainProgram = "pd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pinentry-bemenu/default.nix b/nixpkgs/pkgs/tools/security/pinentry-bemenu/default.nix
new file mode 100644
index 000000000000..36fff7d34d5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry-bemenu/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, libassuan
+, libgpg-error, popt, bemenu }:
+
+stdenv.mkDerivation rec {
+  pname = "pinentry-bemenu";
+  version = "0.13.1";
+
+  src = fetchFromGitHub {
+    owner = "t-8ch";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-h+PC8IGwCW5ZroLGpypcmpejOo+JGM7zG4N5fguBWvM=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [ libassuan libgpg-error popt bemenu ];
+
+  meta = with lib; {
+    description = "Pinentry implementation based on bemenu";
+    homepage = "https://github.com/t-8ch/pinentry-bemenu";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jc ];
+    platforms = with platforms; linux;
+    mainProgram = "pinentry-bemenu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pinentry-rofi/default.nix b/nixpkgs/pkgs/tools/security/pinentry-rofi/default.nix
new file mode 100644
index 000000000000..e0fffff7cedf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry-rofi/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, autoreconfHook
+, autoconf-archive
+, guile
+, texinfo
+, rofi
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pinentry-rofi";
+  version = "2.0.5";
+
+  src = fetchFromGitHub {
+    owner = "plattfot";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-6dhzzxjE3GE5JZTirMLeMh91BS2wzDZoubgf4Wefe1o=";
+  };
+
+  nativeBuildInputs = [
+    autoconf-archive
+    autoreconfHook
+    pkg-config
+    texinfo
+  ];
+
+  buildInputs = [ guile ];
+
+  propagatedBuildInputs = [ rofi ];
+
+  meta = with lib; {
+    description = "Rofi frontend to pinentry";
+    homepage = "https://github.com/plattfot/pinentry-rofi";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ seqizz ];
+    mainProgram = "pinentry-rofi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pinentry/autoconf-ar.patch b/nixpkgs/pkgs/tools/security/pinentry/autoconf-ar.patch
new file mode 100644
index 000000000000..6f531cfce325
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry/autoconf-ar.patch
@@ -0,0 +1,35 @@
+diff -ur a/configure.ac b/configure.ac
+--- a/configure.ac	2019-09-14 11:30:11.584847746 +0000
++++ b/configure.ac	2019-09-14 11:31:26.692355265 +0000
+@@ -81,6 +81,7 @@
+ AC_PROG_CPP
+ AC_PROG_INSTALL
+ AC_PROG_RANLIB
++AC_CHECK_TOOL(AR, ar)
+ # We need to check for cplusplus here because we may not do the test
+ # for Qt and autoconf does does not allow that.
+ AC_PROG_CXX
+diff -ur a/pinentry/Makefile.in b/pinentry/Makefile.in
+--- a/pinentry/Makefile.in	2017-12-03 17:43:23.000000000 +0000
++++ b/pinentry/Makefile.in	2019-09-14 11:32:02.532000236 +0000
+@@ -113,7 +113,7 @@
+ CONFIG_CLEAN_FILES =
+ CONFIG_CLEAN_VPATH_FILES =
+ LIBRARIES = $(noinst_LIBRARIES)
+-AR = ar
++AR = @AR@
+ ARFLAGS = cru
+ AM_V_AR = $(am__v_AR_@AM_V@)
+ am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+diff -ur a/secmem/Makefile.in b/secmem/Makefile.in
+--- a/secmem/Makefile.in	2017-12-03 17:43:23.000000000 +0000
++++ b/secmem/Makefile.in	2019-09-14 11:31:58.764934552 +0000
+@@ -113,7 +113,7 @@
+ CONFIG_CLEAN_FILES =
+ CONFIG_CLEAN_VPATH_FILES =
+ LIBRARIES = $(noinst_LIBRARIES)
+-AR = ar
++AR = @AR@
+ ARFLAGS = cru
+ AM_V_AR = $(am__v_AR_@AM_V@)
+ am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
diff --git a/nixpkgs/pkgs/tools/security/pinentry/default.nix b/nixpkgs/pkgs/tools/security/pinentry/default.nix
new file mode 100644
index 000000000000..baa78521f345
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry/default.nix
@@ -0,0 +1,100 @@
+{ fetchurl, mkDerivation, fetchpatch, stdenv, lib, pkg-config, autoreconfHook, wrapGAppsHook
+, libgpg-error, libassuan, qtbase, wrapQtAppsHook
+, ncurses, gtk2, gcr
+, withLibsecret ? true, libsecret
+, enabledFlavors ? [ "curses" "tty" "gtk2" "emacs" ]
+  ++ lib.optionals stdenv.isLinux [ "gnome3" ]
+  ++ lib.optionals (!stdenv.isDarwin) [ "qt" ]
+}:
+
+assert lib.isList enabledFlavors && enabledFlavors != [];
+
+let
+  pinentryMkDerivation =
+    if (builtins.elem "qt" enabledFlavors)
+      then mkDerivation
+      else stdenv.mkDerivation;
+
+  enableFeaturePinentry = f:
+    let
+      flag = flavorInfo.${f}.flag or null;
+    in
+      lib.optionalString (flag != null)
+        (lib.enableFeature (lib.elem f enabledFlavors) ("pinentry-" + flag));
+
+  flavorInfo = {
+    curses = { bin = "curses"; flag = "curses"; buildInputs = [ ncurses ]; };
+    tty = { bin = "tty"; flag = "tty"; };
+    gtk2 = { bin = "gtk-2"; flag = "gtk2"; buildInputs = [ gtk2 ]; };
+    gnome3 = { bin = "gnome3"; flag = "gnome3"; buildInputs = [ gcr ]; nativeBuildInputs = [ wrapGAppsHook ]; };
+    qt = { bin = "qt"; flag = "qt"; buildInputs = [ qtbase ]; nativeBuildInputs = [ wrapQtAppsHook ]; };
+    emacs = { bin = "emacs"; flag = "emacs"; buildInputs = []; };
+  };
+
+in
+
+pinentryMkDerivation rec {
+  pname = "pinentry";
+  version = "1.2.1";
+
+  src = fetchurl {
+    url = "mirror://gnupg/pinentry/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-RXoYXlqFI4+5RalV3GNSq5YtyLSHILYvyfpIx1QKQGc=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ]
+    ++ lib.concatMap(f: flavorInfo.${f}.nativeBuildInputs or []) enabledFlavors;
+
+  buildInputs = [ libgpg-error libassuan ]
+    ++ lib.optional withLibsecret libsecret
+    ++ lib.concatMap(f: flavorInfo.${f}.buildInputs or []) enabledFlavors;
+
+  dontWrapGApps = true;
+  dontWrapQtApps = true;
+
+  patches = [
+    ./autoconf-ar.patch
+  ] ++ lib.optionals (lib.elem "gtk2" enabledFlavors) [
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/pinentry/raw/debian/1.1.0-1/debian/patches/0007-gtk2-When-X11-input-grabbing-fails-try-again-over-0..patch";
+      sha256 = "15r1axby3fdlzz9wg5zx7miv7gqx2jy4immaw4xmmw5skiifnhfd";
+    })
+  ];
+
+  configureFlags = [
+    "--with-libgpg-error-prefix=${libgpg-error.dev}"
+    "--with-libassuan-prefix=${libassuan.dev}"
+    (lib.enableFeature withLibsecret "libsecret")
+  ] ++ (map enableFeaturePinentry (lib.attrNames flavorInfo));
+
+  postInstall =
+    lib.concatStrings (lib.flip map enabledFlavors (f:
+      let
+        binary = "pinentry-" + flavorInfo.${f}.bin;
+      in ''
+        moveToOutput bin/${binary} ${placeholder f}
+        ln -sf ${placeholder f}/bin/${binary} ${placeholder f}/bin/pinentry
+      '' + lib.optionalString (f == "gnome3") ''
+        wrapGApp ${placeholder f}/bin/${binary}
+      '' + lib.optionalString (f == "qt") ''
+        wrapQtApp ${placeholder f}/bin/${binary}
+      '')) + ''
+      ln -sf ${placeholder (lib.head enabledFlavors)}/bin/pinentry-${flavorInfo.${lib.head enabledFlavors}.bin} $out/bin/pinentry
+    '';
+
+  outputs = [ "out" ] ++ enabledFlavors;
+
+  passthru = { flavors = enabledFlavors; };
+
+  meta = with lib; {
+    homepage = "http://gnupg.org/aegypten2/";
+    description = "GnuPG’s interface to passphrase input";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    longDescription = ''
+      Pinentry provides a console and (optional) GTK and Qt GUIs allowing users
+      to enter a passphrase when `gpg' or `gpg2' is run and needs it.
+    '';
+    maintainers = with maintainers; [ ttuegel fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pinentry/mac.nix b/nixpkgs/pkgs/tools/security/pinentry/mac.nix
new file mode 100644
index 000000000000..4620aedecc75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry/mac.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, libassuan
+, libgpg-error
+, libiconv
+, texinfo
+, common-updater-scripts
+, writers
+, Cocoa
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pinentry-mac";
+
+  # NOTE: Don't update manually. Use passthru.updateScript on a Mac with XCode
+  # installed.
+  version = "1.1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "GPGTools";
+    repo = "pinentry";
+    rev = "v${version}";
+    sha256 = "sha256-QnDuqFrI/U7aZ5WcOCp5vLE+w59LVvDGOFNQy9fSy70=";
+  };
+
+  # use pregenerated nib files because generating them requires XCode
+  postPatch = ''
+    cp -r ${./mac/Main.nib} macosx/Main.nib
+    cp -r ${./mac/Pinentry.nib} macosx/Pinentry.nib
+    chmod -R u+w macosx/*.nib
+  '';
+
+  # Unfortunately, PlistBuddy from xcbuild is not compatible enough pinentry-mac’s build process.
+  sandboxProfile = ''
+    (allow process-exec (literal "/usr/libexec/PlistBuddy"))
+  '';
+
+  nativeBuildInputs = [ autoreconfHook texinfo ];
+  buildInputs = [ libassuan libgpg-error libiconv Cocoa ];
+
+  configureFlags = [ "--enable-maintainer-mode" "--disable-ncurses" ];
+
+  installPhase = ''
+    mkdir -p $out/Applications
+    mv macosx/pinentry-mac.app $out/Applications
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    binaryPath = "Applications/pinentry-mac.app/Contents/MacOS/pinentry-mac";
+    updateScript = writers.writeBash "update-pinentry-mac" ''
+      set -euxo pipefail
+
+      main() {
+        tag="$(queryLatestTag)"
+        ver="$(expr "$tag" : 'v\(.*\)')"
+
+        ${common-updater-scripts}/bin/update-source-version pinentry_mac "$ver"
+
+        cd ${lib.escapeShellArg ./.}
+        rm -rf mac
+        mkdir mac
+
+        srcDir="$(nix-build ../../../.. --no-out-link -A pinentry_mac.src)"
+        for path in "$srcDir"/macosx/*.xib; do
+          filename="''${path##*/}"
+          /usr/bin/ibtool --compile "mac/''${filename%.*}.nib" "$path"
+        done
+      }
+
+      queryLatestTag() {
+        curl -sS https://api.github.com/repos/GPGTools/pinentry/tags \
+          | jq -r '.[] | .name' | sort --version-sort | tail -1
+      }
+
+      main
+    '';
+  };
+
+  meta = {
+    description = "Pinentry for GPG on Mac";
+    license = lib.licenses.gpl2Plus;
+    homepage = "https://github.com/GPGTools/pinentry-mac";
+    platforms = lib.platforms.darwin;
+    mainProgram = passthru.binaryPath;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pinentry/mac/Main.nib/keyedobjects-101300.nib b/nixpkgs/pkgs/tools/security/pinentry/mac/Main.nib/keyedobjects-101300.nib
new file mode 100644
index 000000000000..18cc1c8b46f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry/mac/Main.nib/keyedobjects-101300.nib
Binary files differdiff --git a/nixpkgs/pkgs/tools/security/pinentry/mac/Main.nib/keyedobjects.nib b/nixpkgs/pkgs/tools/security/pinentry/mac/Main.nib/keyedobjects.nib
new file mode 100644
index 000000000000..90635122ffdc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry/mac/Main.nib/keyedobjects.nib
Binary files differdiff --git a/nixpkgs/pkgs/tools/security/pinentry/mac/Pinentry.nib/keyedobjects-101300.nib b/nixpkgs/pkgs/tools/security/pinentry/mac/Pinentry.nib/keyedobjects-101300.nib
new file mode 100644
index 000000000000..6df3d5f46227
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry/mac/Pinentry.nib/keyedobjects-101300.nib
Binary files differdiff --git a/nixpkgs/pkgs/tools/security/pinentry/mac/Pinentry.nib/keyedobjects.nib b/nixpkgs/pkgs/tools/security/pinentry/mac/Pinentry.nib/keyedobjects.nib
new file mode 100644
index 000000000000..aa8bca0d085e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry/mac/Pinentry.nib/keyedobjects.nib
Binary files differdiff --git a/nixpkgs/pkgs/tools/security/pius/default.nix b/nixpkgs/pkgs/tools/security/pius/default.nix
new file mode 100644
index 000000000000..3612caa196c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pius/default.nix
@@ -0,0 +1,41 @@
+{ fetchFromGitHub, lib, python3Packages, gnupg, perl }:
+
+let version = "3.0.0"; in
+python3Packages.buildPythonApplication {
+  pname = "pius";
+  namePrefix = "";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "jaymzh";
+    repo = "pius";
+    rev = "v${version}";
+    sha256 = "0l87dx7n6iwy8alxnhvval8h1kl4da6a59hsilbi65c6bpj4dh3y";
+  };
+
+  patchPhase = ''
+    for file in libpius/constants.py pius-keyring-mgr; do
+      sed -i "$file" -E -e's|/usr/bin/gpg2?|${gnupg}/bin/gpg|g'
+    done
+  '';
+
+  buildInputs = [ perl ];
+
+  meta = {
+    homepage = "https://www.phildev.net/pius/";
+
+    description = "PGP Individual UID Signer (PIUS), quickly and easily sign UIDs on a set of PGP keys";
+
+    longDescription =
+      '' This software will allow you to quickly and easily sign each UID on
+         a set of PGP keys.  It is designed to take the pain out of the
+         sign-all-the-keys part of PGP Keysigning Party while adding security
+         to the process.
+      '';
+
+    license = lib.licenses.gpl2;
+
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+    maintainers = with lib.maintainers; [ kierdavis ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/plasma-pass/default.nix b/nixpkgs/pkgs/tools/security/plasma-pass/default.nix
new file mode 100644
index 000000000000..da276aef50da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/plasma-pass/default.nix
@@ -0,0 +1,41 @@
+{ mkDerivation, lib, fetchFromGitLab, cmake, extra-cmake-modules
+, ki18n
+, kitemmodels
+, oath-toolkit
+, qgpgme
+, plasma-framework
+, qt5 }:
+
+mkDerivation rec {
+  pname = "plasma-pass";
+  version = "1.2.1";
+
+  src = fetchFromGitLab {
+    domain = "invent.kde.org";
+    owner = "plasma";
+    repo = "plasma-pass";
+    sha256 = "sha256-lCNskOXkSIcMPcMnTWE37sDCXfmtP0FhyMzxeF6L0iU=";
+    rev = "v${version}";
+  };
+
+  buildInputs  = [
+    ki18n
+    kitemmodels
+    oath-toolkit
+    qgpgme
+    plasma-framework
+    qt5.qtbase
+    qt5.qtdeclarative
+  ];
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  meta = with lib; {
+    description = "A Plasma applet to access passwords from pass, the standard UNIX password manager";
+    homepage = "https://invent.kde.org/plasma/plasma-pass";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/please/default.nix b/nixpkgs/pkgs/tools/security/please/default.nix
new file mode 100644
index 000000000000..2ecbc9ab3035
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/please/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, rustPlatform
+, fetchFromGitLab
+, installShellFiles
+, pam
+, nixosTests
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "please";
+  version = "0.5.4";
+
+  src = fetchFromGitLab {
+    owner = "edneville";
+    repo = "please";
+    rev = "v${version}";
+    hash = "sha256-GW2t3pTX06mqEwFTpiLe3mlzFTmb5Fep5R0yHooRmig=";
+  };
+
+  cargoHash = "sha256-bd3Pc8QPyPjE+xVcwASDILTXvMCioId/n6dXSr/KDOQ=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ pam ];
+
+  patches = [ ./nixos-specific.patch ];
+
+  postInstall = ''
+    installManPage man/*
+  '';
+
+  # Unit tests are broken on NixOS.
+  doCheck = false;
+
+  passthru.tests = { inherit (nixosTests) please; };
+
+  meta = with lib; {
+    description = "A polite regex-first sudo alternative";
+    longDescription = ''
+      Delegate accurate least privilege access with ease. Express easily with a
+      regex and expose only what is needed and nothing more. Or validate file
+      edits with pleaseedit.
+
+      Please is written with memory safe rust. Traditional C memory unsafety is
+      avoided, logic problems may exist but this codebase is relatively small.
+    '';
+    homepage = "https://www.usenix.org.uk/content/please.html";
+    changelog = "https://github.com/edneville/please/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/please/nixos-specific.patch b/nixpkgs/pkgs/tools/security/please/nixos-specific.patch
new file mode 100644
index 000000000000..890434532a5b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/please/nixos-specific.patch
@@ -0,0 +1,13 @@
+diff --git i/src/lib.rs w/src/lib.rs
+index 5e98cfa..539434f 100644
+--- i/src/lib.rs
++++ w/src/lib.rs
+@@ -1755,7 +1755,7 @@ pub fn search_path(ro: &mut RunOptions, item: &EnvOptions) -> Option<String> {
+     let dirs = if item.search_path.is_some() {
+         item.search_path.as_ref().unwrap()
+     } else {
+-        "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
++        "/run/wrappers/bin:/run/current-system/sw/sbin:/run/current-system/sw/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+     };
+ 
+     for dir in dirs.split(':') {
diff --git a/nixpkgs/pkgs/tools/security/plecost/default.nix b/nixpkgs/pkgs/tools/security/plecost/default.nix
new file mode 100644
index 000000000000..23dd8c220cac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/plecost/default.nix
@@ -0,0 +1,40 @@
+{ lib, python3Packages, fetchFromGitHub, fetchpatch }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "plecost";
+  version = "1.1.4";
+
+  src = fetchFromGitHub {
+    owner = "iniqua";
+    repo = pname;
+    # Release is untagged
+    rev = "aa40e504bee95cf731f0cc9f228bcf5fdfbe6194";
+    sha256 = "K8ESI2EOqH9zBDfSKgVcTKjCMdRhBiwltIbXDt1vF+M=";
+  };
+
+  patches = [
+    # Fix compatibility with aiohttp 3.x
+    # Merged - pending next release
+    (fetchpatch {
+      url = "https://github.com/iniqua/plecost/pull/34/commits/c09e7fab934f136f8fbc5f219592cf5fec151cf9.patch";
+      sha256 = "sha256-G7Poo3+d+PQTrg8PCrmsG6nMHt8CXgiuAu+ZNvK8oiw=";
+    })
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    aiohttp
+    async-timeout
+    termcolor
+    lxml
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Vulnerability fingerprinting and vulnerability finder for Wordpress blog engine";
+    homepage = "https://github.com/iniqua/plecost";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ emilytrau ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/polkit-gnome/default.nix b/nixpkgs/pkgs/tools/security/polkit-gnome/default.nix
new file mode 100644
index 000000000000..e0d57d9bde23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/polkit-gnome/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, polkit, gtk3, pkg-config, intltool }:
+stdenv.mkDerivation rec {
+  pname = "polkit-gnome";
+  version = "0.105";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/polkit-gnome/${version}/${pname}-${version}.tar.xz";
+    sha256 = "0sckmcbxyj6sbrnfc5p5lnw27ccghsid6v6wxq09mgxqcd4lk10p";
+  };
+
+  buildInputs = [ polkit gtk3 ];
+  nativeBuildInputs = [ pkg-config intltool ];
+
+  configureFlags = [ "--disable-introspection" ];
+
+  # Desktop file from Debian
+  postInstall = ''
+    mkdir -p $out/etc/xdg/autostart
+    substituteAll ${./polkit-gnome-authentication-agent-1.desktop} $out/etc/xdg/autostart/polkit-gnome-authentication-agent-1.desktop
+  '';
+
+  meta = {
+    homepage = "https://gitlab.gnome.org/Archive/policykit-gnome";
+    description = "A dbus session bus service that is used to bring up authentication dialogs";
+    license = lib.licenses.lgpl2Plus;
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/polkit-gnome/polkit-gnome-authentication-agent-1.desktop b/nixpkgs/pkgs/tools/security/polkit-gnome/polkit-gnome-authentication-agent-1.desktop
new file mode 100644
index 000000000000..5ddda50cb015
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/polkit-gnome/polkit-gnome-authentication-agent-1.desktop
@@ -0,0 +1,88 @@
+[Desktop Entry]
+Name=PolicyKit Authentication Agent
+Name[ar]=مدير الاستيثاق PolicyKit
+Name[be]=PolicyKit - аґент аўтÑнтыфікацыі
+Name[bn_IN]=PolicyKit অনà§à¦®à§‹à¦¦à¦¨à§‡à¦° à¦à¦œà§‡à¦¨à§à¦Ÿ
+Name[ca]=Agent d'autenticació del PolicyKit
+Name[cs]=Ověřovací agent PolicyKit
+Name[da]=Godkendelsesprogrammet PolicyKit
+Name[de]=Legitimationsdienst von PolicyKit
+Name[el]=ΠÏάκτοÏας πιστοποίησης PolicyKit
+Name[en_GB]=PolicyKit Authentication Agent
+Name[es]=Agente de autenticación de PolicyKit
+Name[eu]=PolicyKit autentifikatzeko agentea
+Name[fi]=PolicytKit-tunnistautumisohjelma
+Name[fr]=Agent d'authentification de PolicyKit
+Name[gl]=Axente de autenticación PolicyKit
+Name[gu]=PolicyKit સતà«àª¤àª¾àª§àª¿àª•àª°àª£ àªàªœàª¨à«àªŸ
+Name[hi]=PolicyKit पà¥à¤°à¤®à¤¾à¤£à¥€à¤•à¤°à¤£ पà¥à¤°à¤¤à¤¿à¤¨à¤¿à¤§à¤¿
+Name[hu]=PolicyKit hitelesítési ügynök
+Name[it]=Agente di autenticazione per PolicyKit
+Name[ja]=PolicyKit èªè¨¼ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆ
+Name[kn]=PolicyKit ದೃಢೀಕರಣ ಮಧà³à²¯à²µà²°à³à²¤à²¿
+Name[lt]=PolicyKit tapatybÄ—s nustatymo agentas
+Name[ml]=പോളിസികàµà´•à´¿à´±àµà´±àµ ഓഥനàµà´±à´¿à´•àµà´•àµ‡à´·à´¨àµâ€ à´à´œà´¨àµà´±àµ
+Name[mr]=PolicyKit ऑथेंटीकेशन à¤à¤œà¥‡à¤‚ट
+Name[or]=PolicyKit ବୈଧିକରଣ ସଦସà­à­Ÿ
+Name[pa]=ਪਾਲਸੀਕਿੱਟ ਪਰਮਾਣਕਿਤਾ à¨à¨œà©°à¨Ÿ
+Name[pl]=Agent uwierzytelniania PolicyKit
+Name[pt]=Agente de Autenticação PolicyKit
+Name[pt_BR]=Agente de autenticação PolicyKit
+Name[ro]=Agent de autentificare PolicyKit
+Name[sk]=Agent PolicyKit na overovanie totožnosti
+Name[sl]=PolicyKit program overjanja
+Name[sv]=Autentiseringsagent för PolicyKit
+Name[ta]=PolicyKit à®…à®™à¯à®•à¯€à®•à®¾à®° à®®à¯à®•à®µà®°à¯
+Name[te]=పాలసీకిటౠధృవీకరణ à°ªà±à°°à°¤à°¿à°¨à°¿à°§à°¿
+Name[th]=ตัวà¸à¸¥à¸²à¸‡à¸ªà¸³à¸«à¸£à¸±à¸šà¸¢à¸·à¸™à¸¢à¸±à¸™à¸•à¸±à¸§à¸šà¸¸à¸„คล PolicyKit
+Name[uk]=Ðгент автентифікації PolicyKit
+Name[zh_CN]=PolicyKit 认è¯ä»£ç†
+Name[zh_HK]=PolicyKit 驗證代ç†ç¨‹å¼
+Name[zh_TW]=PolicyKit 驗證代ç†ç¨‹å¼
+Comment=PolicyKit Authentication Agent
+Comment[ar]=مدير الاستيثاق PolicyKit
+Comment[be]=PolicyKit - аґент аўтÑнтыфікацыі
+Comment[bn_IN]=PolicyKit অনà§à¦®à§‹à¦¦à¦¨à§‡à¦° à¦à¦œà§‡à¦¨à§à¦Ÿ
+Comment[ca]=Agent d'autenticació del PolicyKit
+Comment[cs]=Ověřovací agent PolicyKit
+Comment[da]=Godkendelsesprogrammet PolicyKit
+Comment[de]=Legitimationsdienst von PolicyKit
+Comment[el]=ΠÏάκτοÏας πιστοποίησης PolicyKit
+Comment[en_GB]=PolicyKit Authentication Agent
+Comment[es]=Agente de autenticación de PolicyKit
+Comment[eu]=PolicyKit autentifikatzeko agentea
+Comment[fi]=PolicytKit-tunnistautumisohjelma
+Comment[fr]=Agent d'authentification de PolicyKit
+Comment[gl]=Axente de autenticación PolicyKit
+Comment[gu]=PolicyKit સતà«àª¤àª¾àª§àª¿àª•àª°àª£ àªàªœàª¨à«àªŸ
+Comment[hi]=PolicyKit पà¥à¤°à¤®à¤¾à¤£à¥€à¤•à¤°à¤£ पà¥à¤°à¤¤à¤¿à¤¨à¤¿à¤§à¤¿
+Comment[hu]=PolicyKit hitelesítési ügynök
+Comment[it]=Agente di autenticazione per PolicyKit
+Comment[ja]=PolicyKit èªè¨¼ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆ
+Comment[kn]=PolicyKit ದೃಢೀಕರಣ ಮಧà³à²¯à²µà²°à³à²¤à²¿
+Comment[lt]=PolicyKit tapatybÄ—s nustatymo agentas
+Comment[ml]=പോളിസികàµà´•à´¿à´±àµà´±àµ ഓഥനàµà´±à´¿à´•àµà´•àµ‡à´·à´¨àµâ€ à´à´œà´¨àµà´±àµ
+Comment[mr]=PolicyKit ऑथेंटीकेशन à¤à¤œà¥‡à¤‚ट
+Comment[or]=PolicyKit ବୈଧିକରଣ ସଦସà­à­Ÿ
+Comment[pa]=ਪਾਲਸੀਕਿੱਟ ਪਰਮਾਣਕਿਤਾ à¨à¨œà©°à¨Ÿ
+Comment[pl]=Agent uwierzytelniania PolicyKit
+Comment[pt]=Agente de Autenticação PolicyKit
+Comment[pt_BR]=Agente de autenticação PolicyKit
+Comment[ro]=Agent de autentificare PolicyKit
+Comment[sk]=Agent PolicyKit na overovanie totožnosti
+Comment[sl]=PolicyKit program overjanja
+Comment[sv]=Autentiseringsagent för PolicyKit
+Comment[ta]=PolicyKit à®…à®™à¯à®•à¯€à®•à®¾à®° à®®à¯à®•à®µà®°à¯
+Comment[te]=పాలసీకిటౠధృవీకరణ à°ªà±à°°à°¤à°¿à°¨à°¿à°§à°¿
+Comment[th]=ตัวà¸à¸¥à¸²à¸‡à¸ªà¸³à¸«à¸£à¸±à¸šà¸¢à¸·à¸™à¸¢à¸±à¸™à¸•à¸±à¸§à¸šà¸¸à¸„คล PolicyKit
+Comment[uk]=Ðгент автентифікації PolicyKit
+Comment[zh_CN]=PolicyKit 认è¯ä»£ç†
+Comment[zh_HK]=PolicyKit 驗證代ç†ç¨‹å¼
+Comment[zh_TW]=PolicyKit 驗證代ç†ç¨‹å¼
+Exec=@out@/libexec/polkit-gnome-authentication-agent-1
+Terminal=false
+Type=Application
+Categories=
+NoDisplay=true
+OnlyShowIn=GNOME;XFCE;Unity;
+AutostartCondition=GNOME3 unless-session gnome
diff --git a/nixpkgs/pkgs/tools/security/pomerium-cli/default.nix b/nixpkgs/pkgs/tools/security/pomerium-cli/default.nix
new file mode 100644
index 000000000000..67c44930f0da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pomerium-cli/default.nix
@@ -0,0 +1,63 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+let
+  inherit (lib) concatStringsSep concatMap id mapAttrsToList;
+in
+buildGoModule rec {
+  pname = "pomerium-cli";
+  version = "0.22.0";
+
+  src = fetchFromGitHub {
+    owner = "pomerium";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-0vRLjmzW/U/Kssu4VQO6mFqVH4UovmTGEEfxeWI8Nqo=";
+  };
+
+  vendorHash = "sha256-dnfJnndYXR6LQKDruLSsDav4DtyaGu5/rNnk69oMhPU=";
+
+  subPackages = [
+    "cmd/pomerium-cli"
+  ];
+
+  ldflags = let
+    # Set a variety of useful meta variables for stamping the build with.
+    setVars = {
+      "github.com/pomerium/cli/version" = {
+        Version = "v${version}";
+        BuildMeta = "nixpkgs";
+        ProjectName = "pomerium-cli";
+        ProjectURL = "github.com/pomerium/cli";
+      };
+    };
+    concatStringsSpace = list: concatStringsSep " " list;
+    mapAttrsToFlatList = fn: list: concatMap id (mapAttrsToList fn list);
+    varFlags = concatStringsSpace (
+      mapAttrsToFlatList (package: packageVars:
+        mapAttrsToList (variable: value:
+          "-X ${package}.${variable}=${value}"
+        ) packageVars
+      ) setVars);
+  in [
+    "${varFlags}"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm0755 $GOPATH/bin/pomerium-cli $out/bin/pomerium-cli
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://pomerium.io";
+    description = "Client-side helper for Pomerium authenticating reverse proxy";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lukegb ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/posteid-seed-extractor/default.nix b/nixpkgs/pkgs/tools/security/posteid-seed-extractor/default.nix
new file mode 100644
index 000000000000..176b210b3779
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/posteid-seed-extractor/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication {
+  pname = "posteid-seed-extractor";
+  version = "unstable-2022-02-23";
+
+  src = fetchFromGitHub {
+    owner = "simone36050";
+    repo = "PosteID-seed-extractor";
+    rev = "667e2997a98aa3273a6bf6b4b34ca77715120e7f";
+    hash = "sha256-smNwp67HYbZuMrl0uf2X2yox2JqeEV6WzIBp4dALwgw=";
+  };
+
+  format = "other";
+
+  pythonPath = with python3Packages; [
+   certifi
+   cffi
+   charset-normalizer
+   cryptography
+   idna
+   jwcrypto
+   pycparser
+   pycryptodome
+   pyotp
+   qrcode
+   requests
+   urllib3
+   wrapt
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 extractor.py $out/bin/posteid-seed-extractor
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/simone36050/PosteID-seed-extractor";
+    description = "Extract OTP seed instead of using PosteID app";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aciceri ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pretender/default.nix b/nixpkgs/pkgs/tools/security/pretender/default.nix
new file mode 100644
index 000000000000..91452f34d62b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pretender/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "pretender";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "RedTeamPentesting";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-adWdUlsReRptSgRAjNH9bWy9dpwpuAWtVxlbDL2pMmk=";
+  };
+
+  vendorHash = "sha256-kDHRjd3Y90ocBGSJ0B2jAM9tO+iDSXoUOzLEWX2G0J4=";
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for handling machine-in-the-middle tasks";
+    homepage = "https://github.com/RedTeamPentesting/pretender";
+    changelog = "https://github.com/RedTeamPentesting/pretender/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/proxmark3/darwin-always-gui.patch b/nixpkgs/pkgs/tools/security/proxmark3/darwin-always-gui.patch
new file mode 100644
index 000000000000..99c4495e9661
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/proxmark3/darwin-always-gui.patch
@@ -0,0 +1,13 @@
+diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c
+index 6c77bfad3..0d41a2d6b 100644
+--- a/client/src/proxmark3.c
++++ b/client/src/proxmark3.c
+@@ -1098,7 +1098,7 @@ int main(int argc, char *argv[]) {
+ 
+ #ifdef HAVE_GUI
+ 
+-#  if defined(_WIN32)
++#  if defined(_WIN32) || (defined(__MACH__) && defined(__APPLE__))
+     InitGraphics(argc, argv, script_cmds_file, script_cmd, stayInCommandLoop);
+     MainGraphics();
+ #  else
diff --git a/nixpkgs/pkgs/tools/security/proxmark3/default.nix b/nixpkgs/pkgs/tools/security/proxmark3/default.nix
new file mode 100644
index 000000000000..de586e7e9004
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/proxmark3/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, gcc-arm-embedded
+, readline
+, bzip2
+, openssl
+, jansson
+, whereami
+, lua
+, lz4
+, Foundation
+, AppKit
+, withGui ? true, wrapQtAppsHook, qtbase
+, withPython ? true, python3
+, withBlueshark ? false, bluez5
+, withGeneric ? false
+, withSmall ? false
+, withoutFunctions ? []
+, hardwarePlatform ? if withGeneric then "PM3GENERIC" else "PM3RDV4"
+, hardwarePlatformExtras ? lib.optionalString withBlueshark "BTADDON"
+, standalone ? "LF_SAMYRUN"
+}:
+assert withBlueshark -> stdenv.hostPlatform.isLinux;
+stdenv.mkDerivation rec {
+  pname = "proxmark3";
+  version = "4.17768";
+
+  src = fetchFromGitHub {
+    owner = "RfidResearchGroup";
+    repo = "proxmark3";
+    rev = "v${version}";
+    hash = "sha256-4x8GN4Jsk9xqk4MbGu8SpE4Zh0Opb3akCH5NlASzLQo=";
+  };
+
+  patches = [
+    # Don't check for DISPLAY env variable on Darwin. pm3 uses this to test if
+    # XQuartz is installed, however it is not actually required for GUI features
+    ./darwin-always-gui.patch
+  ];
+
+  postPatch = ''
+    # Remove hardcoded paths on Darwin
+    substituteInPlace Makefile.defs \
+      --replace "/usr/bin/ar" "ar" \
+      --replace "/usr/bin/ranlib" "ranlib"
+    # Replace hardcoded path to libwhereami
+    substituteInPlace client/Makefile \
+      --replace "/usr/include/whereami.h" "${whereami}/include/whereami.h"
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    gcc-arm-embedded
+  ] ++ lib.optional withGui wrapQtAppsHook;
+  buildInputs = [
+    readline
+    bzip2
+    openssl
+    jansson
+    lz4
+    whereami
+    lua
+  ] ++ lib.optional withGui qtbase
+    ++ lib.optional withPython python3
+    ++ lib.optional withBlueshark bluez5
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ Foundation AppKit ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "UDEV_PREFIX=${placeholder "out"}/etc/udev/rules.d"
+    "PLATFORM=${hardwarePlatform}"
+    "PLATFORM_EXTRAS=${hardwarePlatformExtras}"
+    "STANDALONE=${standalone}"
+    "USE_BREW=0"
+  ] ++ lib.optional withSmall "PLATFORM_SIZE=256"
+    ++ map (x: "SKIP_${x}=1") withoutFunctions;
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Client for proxmark3, powerful general purpose RFID tool";
+    homepage = "https://github.com/RfidResearchGroup/proxmark3";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ nyanotech emilytrau ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/prs/default.nix b/nixpkgs/pkgs/tools/security/prs/default.nix
new file mode 100644
index 000000000000..cfab2229efee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/prs/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, rustPlatform
+, fetchFromGitLab
+, installShellFiles
+, pkg-config
+, python3
+, dbus
+, glib
+, gpgme
+, gtk3
+, libxcb
+, libxkbcommon
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "prs";
+  version = "0.5.0";
+
+  src = fetchFromGitLab {
+    owner = "timvisee";
+    repo = "prs";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-9/XKz+yOCFEB1VI2EK0xF5ecyBPeGztpGPo/aXQ6v5E=";
+  };
+
+  cargoHash = "sha256-kxIgToqhJhUgJcxnGRGG6I+YqM2diFgQDyn1jBxWAw8=";
+
+  postPatch = ''
+    # The GPGME backend is recommended
+    for f in "gtk3/Cargo.toml" "cli/Cargo.toml"; do
+      substituteInPlace "$f" --replace \
+        'default = ["backend-gnupg-bin"' 'default = ["backend-gpgme"'
+    done
+  '';
+
+  nativeBuildInputs = [ gpgme installShellFiles pkg-config python3 ];
+
+  buildInputs = [
+    dbus
+    glib
+    gpgme
+    gtk3
+    libxcb
+    libxkbcommon
+  ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      installShellCompletion --cmd prs --$shell <($out/bin/prs internal completions $shell --stdout)
+    done
+  '';
+
+  meta = with lib; {
+    description = "Secure, fast & convenient password manager CLI using GPG and git to sync";
+    homepage = "https://gitlab.com/timvisee/prs";
+    changelog = "https://gitlab.com/timvisee/prs/-/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [
+      lgpl3Only # lib
+      gpl3Only  # everything else
+    ];
+    maintainers = with maintainers; [ dotlambda ];
+    mainProgram = "prs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/psudohash/default.nix b/nixpkgs/pkgs/tools/security/psudohash/default.nix
new file mode 100644
index 000000000000..7a42d1900db3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/psudohash/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "psudohash";
+  version = "unstable-2023-05-15";
+
+  src = fetchFromGitHub {
+    owner = "t3l3machus";
+    repo = "psudohash";
+    # https://github.com/t3l3machus/psudohash/issues/8
+    rev = "2d586dec8b5836546ae54b924eb59952a7ee393c";
+    hash = "sha256-l/Rp9405Wf6vh85PFrRTtTLJE7GPODowseNqEw42J18=";
+  };
+
+  buildInputs = [
+    python3
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 psudohash.py $out/bin/psudohash
+
+    install -Dm444 common_padding_values.txt $out/share/psudohash/common_padding_values.txt
+
+    substituteInPlace $out/bin/psudohash \
+      --replace "common_padding_values.txt" "$out/share/${pname}/common_padding_values.txt"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Password list generator for orchestrating brute force attacks and cracking hashes";
+    homepage = "https://github.com/t3l3machus/psudohash";
+    license = licenses.mit;
+    maintainers = with maintainers; [ exploitoverload ];
+    mainProgram = "psudohash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pwdsafety/default.nix b/nixpkgs/pkgs/tools/security/pwdsafety/default.nix
new file mode 100644
index 000000000000..12785154a177
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pwdsafety/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "pwdsafety";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "edoardottt";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ryMLiehJVZhQ3ZQf4/g7ILeJri78A6z5jfell0pD9E8=";
+  };
+
+  vendorHash = "sha256-b+tWTQUyYDzY2O28hwy5vI6b6S889TCiVh7hQhw/KAc=";
+
+  meta = with lib; {
+    description = "Command line tool checking password safety";
+    homepage = "https://github.com/edoardottt/pwdsafety";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pwgen-secure/default.nix b/nixpkgs/pkgs/tools/security/pwgen-secure/default.nix
new file mode 100644
index 000000000000..44ccd79fd39b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pwgen-secure/default.nix
@@ -0,0 +1,47 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+let
+  inherit (python3Packages) buildPythonApplication pythonOlder;
+
+in
+buildPythonApplication rec {
+  pname = "pwgen-secure";
+  version = "0.9.1";
+
+  # it needs `secrets` which was introduced in 3.6
+  disabled = pythonOlder "3.6";
+
+  # GH is newer than Pypi and contains both library *and* the actual program
+  # whereas Pypi only has the library
+  src = fetchFromGitHub {
+    owner = "mjmunger";
+    repo = "pwgen_secure";
+    rev = "v${version}";
+    sha256 = "15md5606hzy1xfhj2lxmc0nvynyrcs4vxa5jdi34kfm31rdklj28";
+  };
+
+  postPatch = ''
+    shareDir=$out/share/${pname}
+
+    substituteInPlace pwgen_secure/rpg.py \
+      --replace "os.path.join(path, 'words.txt')" "os.path.join('$shareDir', 'words.txt')"
+  '';
+
+  propagatedBuildInputs = with python3Packages; [ docopt ];
+
+  postInstall = ''
+    install -Dm555 spwgen.py $out/bin/spwgen
+    install -Dm444 pwgen_secure/words.txt -t $shareDir
+  '';
+
+  # there are no checks
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Secure password generation library to replace pwgen";
+    homepage = "https://github.com/mjmunger/pwgen_secure/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "spwgen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pwgen/default.nix b/nixpkgs/pkgs/tools/security/pwgen/default.nix
new file mode 100644
index 000000000000..3c0ce6b21d50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pwgen/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, autoreconfHook
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pwgen";
+  version = "2.08";
+
+  src = fetchFromGitHub {
+    owner = "tytso";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1j6c6m9fcy24jn8mk989x49yk765xb26lpr8yhpiaqk206wlss2z";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  meta = with lib; {
+    description = "Password generator which creates passwords which can be easily memorized by a human";
+    homepage = "https://github.com/tytso/pwgen";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "pwgen";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pwncat/default.nix b/nixpkgs/pkgs/tools/security/pwncat/default.nix
new file mode 100644
index 000000000000..398132c4cee7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pwncat/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+}:
+
+buildPythonApplication rec {
+  pname = "pwncat";
+  version = "0.1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1230fdn5mx3wwr3a3nn6z2vwh973n248m11hnx9y3fjq7bgpky67";
+  };
+
+  # Tests requires to start containers
+  doCheck = false;
+
+  meta = with lib; {
+    description = "TCP/UDP communication suite";
+    homepage = "https://pwncat.org/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/qdigidoc/default.nix b/nixpkgs/pkgs/tools/security/qdigidoc/default.nix
new file mode 100644
index 000000000000..097ef5023974
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/qdigidoc/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, mkDerivation
+, fetchurl
+, cmake
+, flatbuffers
+, gettext
+, pkg-config
+, libdigidocpp
+, opensc
+, openldap
+, openssl
+, pcsclite
+, qtbase
+, qtsvg
+, qttools
+}:
+
+mkDerivation rec {
+  pname = "qdigidoc";
+  version = "4.4.0";
+
+  src = fetchurl {
+    url =
+      "https://github.com/open-eid/DigiDoc4-Client/releases/download/v${version}/qdigidoc4-${version}.tar.gz";
+    hash = "sha256-5zo0yoY0wufm9DWRIccxJ5g4DXn75nT4fd2h+5QP4oQ=";
+  };
+
+  tsl = fetchurl {
+    url = "https://ec.europa.eu/tools/lotl/eu-lotl-pivot-300.xml";
+    sha256 = "1cikz36w9phgczcqnwk4k3mx3kk919wy2327jksmfa4cjfjq4a8d";
+  };
+
+  nativeBuildInputs = [ cmake gettext pkg-config qttools ];
+
+  postPatch = ''
+    substituteInPlace client/CMakeLists.txt \
+      --replace $\{TSL_URL} file://${tsl}
+  '';
+
+  buildInputs = [
+    flatbuffers
+    libdigidocpp
+    opensc
+    openldap
+    openssl
+    pcsclite
+    qtbase
+    qtsvg
+  ];
+
+  # qdigidoc4's `QPKCS11::reload()` dlopen()s "opensc-pkcs11.so" in QLibrary,
+  # i.e. OpenSC's module is searched for in libQt5Core's DT_RUNPATH and fixing
+  # qdigidoc4's DT_RUNPATH has no effect on Linux (at least OpenBSD's ld.so(1)
+  # searches the program's runtime path as well).
+  # LD_LIBRARY_PATH takes precedence for all calling objects, see dlopen(3).
+  # https://github.com/open-eid/cmake/pull/35 might be an alternative.
+  qtWrapperArgs = [
+    "--prefix LD_LIBRARY_PATH : ${opensc}/lib/pkcs11/"
+  ];
+
+  meta = with lib; {
+    description = "Qt-based UI for signing and verifying DigiDoc documents";
+    homepage = "https://www.id.ee/";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mmahut yana ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/quark-engine/default.nix b/nixpkgs/pkgs/tools/security/quark-engine/default.nix
new file mode 100644
index 000000000000..1e9cf9168aed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/quark-engine/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, fetchFromGitHub
+, gitMinimal
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "quark-engine";
+  version = "24.2.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-77yfysmFEneVOiejoCooi1buqEM/Ljv5xqjKv17DFWE=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    androguard
+    click
+    colorama
+    gitMinimal
+    graphviz
+    pandas
+    plotly
+    prettytable
+    prompt-toolkit
+    r2pipe
+    rzpipe
+    setuptools
+    tqdm
+  ];
+
+  pythonRelaxDeps = [
+    "r2pipe"
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "quark"
+  ];
+
+  meta = with lib; {
+    description = "Android malware (analysis and scoring) system";
+    homepage = "https://quark-engine.readthedocs.io/";
+    changelog = "https://github.com/quark-engine/quark-engine/releases/tag/v${version}";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/quill-qr/default.nix b/nixpkgs/pkgs/tools/security/quill-qr/default.nix
new file mode 100644
index 000000000000..55c2f45cc683
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/quill-qr/default.nix
@@ -0,0 +1,45 @@
+{ coreutils
+, fetchFromGitHub
+, gzip
+, jq
+, lib
+, makeWrapper
+, qrencode
+, stdenvNoCC
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "quill-qr";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "IvanMalison";
+    repo = "quill-qr";
+    rev = "v${version}";
+    sha256 = "1kdsq6csmxfvs2wy31bc9r92l5pkmzlzkyqrangvrf4pbk3sk0r6";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a quill-qr.sh $out/bin/quill-qr.sh
+    patchShebangs $out/bin
+
+    wrapProgram $out/bin/quill-qr.sh --prefix PATH : "${lib.makeBinPath [
+      qrencode
+      coreutils
+      jq
+      gzip
+    ]}"
+  '';
+
+  meta = with lib; {
+    description = "Print QR codes for use with https://p5deo-6aaaa-aaaab-aaaxq-cai.raw.ic0.app/";
+    homepage = "https://github.com/IvanMalison/quill-qr";
+    maintainers = with maintainers; [ imalison ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/quill/Cargo.lock b/nixpkgs/pkgs/tools/security/quill/Cargo.lock
new file mode 100644
index 000000000000..948c1fd45102
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/quill/Cargo.lock
@@ -0,0 +1,3661 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
+
+[[package]]
+name = "arrayref"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base16ct"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+
+[[package]]
+name = "base32"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa"
+
+[[package]]
+name = "base58"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83"
+
+[[package]]
+name = "base64"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "base64ct"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dea908e7347a8c64e378c17e30ef880ad73e3b4498346b055c2c00ea342f3179"
+
+[[package]]
+name = "beef"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "binread"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16598dfc8e6578e9b597d9910ba2e73618385dc9f4b1d43dd92c349d6be6418f"
+dependencies = [
+ "binread_derive",
+ "lazy_static",
+ "rustversion",
+]
+
+[[package]]
+name = "binread_derive"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d9672209df1714ee804b1f4d4f68c8eb2a90b1f7a07acf472f88ce198ef1fed"
+dependencies = [
+ "either",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "bip39"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e89470017230c38e52b82b3ee3f530db1856ba1d434e3a67a3456a8a8dec5f"
+dependencies = [
+ "bitcoin_hashes",
+ "rand_core 0.4.2",
+ "serde",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitcoin_hashes"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ce18265ec2324ad075345d5814fbeed4f41f0a660055dc78840b74d19b874b1"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
+dependencies = [
+ "block-padding",
+ "byte-tools",
+ "byteorder",
+ "generic-array 0.12.4",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array 0.14.5",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+dependencies = [
+ "generic-array 0.14.5",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
+dependencies = [
+ "byte-tools",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3"
+
+[[package]]
+name = "byte-tools"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
+
+[[package]]
+name = "byte-unit"
+version = "3.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "415301c9de11005d4b92193c0eb7ac7adc37e5a49e0ac9bed0a42343512744b8"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "candid"
+version = "0.7.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba9e536514a3c655568e23e36e68cbef20ee6595f641719ade03a849a13ed0ac"
+dependencies = [
+ "anyhow",
+ "binread",
+ "byteorder",
+ "candid_derive",
+ "codespan-reporting",
+ "hex",
+ "ic-types 0.3.0",
+ "lalrpop",
+ "lalrpop-util",
+ "leb128",
+ "logos",
+ "num-bigint 0.4.3",
+ "num-traits",
+ "num_enum",
+ "paste",
+ "pretty",
+ "serde",
+ "serde_bytes",
+ "thiserror",
+]
+
+[[package]]
+name = "candid_derive"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e02c03c4d547674a3f3f3109538fb49871fbe636216daa019f06a62faca9061"
+dependencies = [
+ "lazy_static",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "time 0.1.43",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "3.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "lazy_static",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c"
+dependencies = [
+ "heck 0.4.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78a4e0fb04deabeb711eb20bd1179f1524c06f7e6975ebccc495f678a635887b"
+dependencies = [
+ "generic-array 0.14.5",
+ "rand_core 0.6.3",
+ "subtle 2.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+dependencies = [
+ "generic-array 0.14.5",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5"
+dependencies = [
+ "generic-array 0.12.4",
+ "subtle 1.0.0",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
+dependencies = [
+ "generic-array 0.14.5",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"
+dependencies = [
+ "byteorder",
+ "digest 0.9.0",
+ "rand_core 0.5.1",
+ "subtle 2.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "cvt"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34ac344c7efccb80cd25bc61b2170aec26f2f693fd40e765a539a1243db48c71"
+dependencies = [
+ "cfg-if 0.1.10",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "der"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f"
+dependencies = [
+ "const-oid",
+ "pem-rfc7468",
+ "zeroize",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.8-alpha.0"
+source = "git+https://github.com/dfinity-lab/derive_more?branch=master#9f1b894e6fde640da4e9ea71a8fc0e4dd98d01da"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dfn_candid"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "candid",
+ "dfn_core",
+ "ic-base-types",
+ "on_wire",
+ "serde",
+]
+
+[[package]]
+name = "dfn_core"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "byteorder",
+ "cfg-if 0.1.10",
+ "futures",
+ "hex",
+ "ic-base-types",
+ "on_wire",
+ "rustversion",
+]
+
+[[package]]
+name = "dfn_http"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "candid",
+ "dfn_candid",
+ "dfn_core",
+ "serde",
+ "serde_bytes",
+]
+
+[[package]]
+name = "dfn_protobuf"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "dfn_core",
+ "ic-base-types",
+ "on_wire",
+ "prost",
+ "prost-types",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499"
+
+[[package]]
+name = "digest"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
+dependencies = [
+ "generic-array 0.12.4",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array 0.14.5",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+dependencies = [
+ "block-buffer 0.10.2",
+ "crypto-common",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "ecdsa"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e737f9eebb44576f3ee654141a789464071eb369d02c4397b32b6a79790112"
+dependencies = [
+ "der",
+ "elliptic-curve",
+ "rfc6979",
+ "signature",
+]
+
+[[package]]
+name = "ed25519"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369"
+dependencies = [
+ "signature",
+]
+
+[[package]]
+name = "ed25519-dalek"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"
+dependencies = [
+ "curve25519-dalek",
+ "ed25519",
+ "rand 0.7.3",
+ "serde",
+ "sha2 0.9.9",
+ "zeroize",
+]
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "elliptic-curve"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdd8c93ccd534d6a9790f4455cd71e7adb53a12e9af7dd54d1e258473f100cea"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "der",
+ "digest 0.10.3",
+ "ff",
+ "generic-array 0.14.5",
+ "group",
+ "pem-rfc7468",
+ "pkcs8",
+ "rand_core 0.6.3",
+ "sec1",
+ "subtle 2.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "ena"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7402b94a93c24e742487327a7cd839dc9d36fec9de9fb25b09f2dae459f36c3"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "erased-serde"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad132dd8d0d0b546348d7d86cb3191aad14b34e5f979781fc005c80d4ac67ffd"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "fake-simd"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
+
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "features"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83072b3c84e55f9d0c0ff36a4575d0fd2e543ae4a56e04e7f5a9222188d574e3"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "ff"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df689201f395c6b90dfe87127685f8dbfc083a5e779e613575d8bd7314300c3e"
+dependencies = [
+ "rand_core 0.6.3",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e"
+
+[[package]]
+name = "flate2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "futures"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
+
+[[package]]
+name = "futures-task"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
+
+[[package]]
+name = "futures-util"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "garcon"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e83fb8961dcd3c26123863998521ae4d07e5e5aa8fb50b503380448f2e0ea069"
+dependencies = [
+ "futures-util",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.10.2+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "group"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7391856def869c1c81063a03457c676fbcd419709c3dfb33d8d319de484b154d"
+dependencies = [
+ "ff",
+ "rand_core 0.6.3",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "hmac"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695"
+dependencies = [
+ "crypto-mac 0.7.0",
+ "digest 0.8.1",
+]
+
+[[package]]
+name = "hmac"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840"
+dependencies = [
+ "crypto-mac 0.8.0",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "hmac-drbg"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b"
+dependencies = [
+ "digest 0.8.1",
+ "generic-array 0.12.4",
+ "hmac 0.7.1",
+]
+
+[[package]]
+name = "hmac-drbg"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1"
+dependencies = [
+ "digest 0.9.0",
+ "generic-array 0.14.5",
+ "hmac 0.8.1",
+]
+
+[[package]]
+name = "http"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac"
+dependencies = [
+ "http",
+ "hyper",
+ "log",
+ "rustls",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+ "webpki-roots",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "ic-agent"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a0cabf758d04a2389ffba0700bd7099de9b5cd47a04255063de1b0f9aac1f6e"
+dependencies = [
+ "async-trait",
+ "base32",
+ "base64 0.13.0",
+ "byteorder",
+ "garcon",
+ "hex",
+ "http",
+ "hyper-rustls",
+ "ic-types 0.3.0",
+ "k256",
+ "leb128",
+ "mime",
+ "pem",
+ "pkcs8",
+ "rand 0.8.5",
+ "reqwest",
+ "ring",
+ "rustls",
+ "sec1",
+ "serde",
+ "serde_bytes",
+ "serde_cbor",
+ "sha2 0.10.2",
+ "simple_asn1",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "ic-base-types"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "base32",
+ "byte-unit",
+ "bytes",
+ "candid",
+ "crc32fast",
+ "ic-crypto-sha",
+ "ic-protobuf",
+ "phantom_newtype",
+ "prost",
+ "prost-build",
+ "serde",
+ "strum 0.18.0",
+ "strum_macros 0.18.0",
+]
+
+[[package]]
+name = "ic-crypto-internal-sha2"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "openssl",
+ "sha2 0.9.9",
+]
+
+[[package]]
+name = "ic-crypto-internal-types"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "arrayvec",
+ "base64 0.11.0",
+ "hex",
+ "ic-protobuf",
+ "phantom_newtype",
+ "serde",
+ "serde_cbor",
+ "strum 0.18.0",
+ "strum_macros 0.18.0",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "ic-crypto-sha"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "ic-crypto-internal-sha2",
+]
+
+[[package]]
+name = "ic-crypto-tree-hash"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "ic-crypto-internal-types",
+ "ic-crypto-sha",
+ "ic-protobuf",
+ "serde",
+ "serde_bytes",
+]
+
+[[package]]
+name = "ic-error-types"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "candid",
+ "ic-protobuf",
+ "serde",
+ "strum 0.20.0",
+ "strum_macros 0.20.1",
+]
+
+[[package]]
+name = "ic-ic00-types"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "candid",
+ "ic-base-types",
+ "ic-error-types",
+ "ic-protobuf",
+ "num-traits",
+ "serde",
+ "serde_bytes",
+ "serde_cbor",
+ "strum 0.18.0",
+ "strum_macros 0.18.0",
+]
+
+[[package]]
+name = "ic-identity-hsm"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f23185559fafa2c475db99df789191c7494627184425726080788bd8ff1e6b1"
+dependencies = [
+ "hex",
+ "ic-agent",
+ "num-bigint 0.4.3",
+ "pkcs11",
+ "sha2 0.10.2",
+ "simple_asn1",
+ "thiserror",
+]
+
+[[package]]
+name = "ic-nns-common"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "candid",
+ "dfn_core",
+ "ic-base-types",
+ "ic-crypto-sha",
+ "ic-nns-constants",
+ "ic-protobuf",
+ "ic-registry-keys",
+ "ic-registry-transport",
+ "ic-types 0.8.0",
+ "lazy_static",
+ "on_wire",
+ "prost",
+ "prost-build",
+ "prost-types",
+ "serde",
+ "sha2 0.9.9",
+]
+
+[[package]]
+name = "ic-nns-constants"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "ed25519-dalek",
+ "ic-base-types",
+ "ic-types 0.8.0",
+ "lazy_static",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "ic-protobuf"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "bincode",
+ "erased-serde",
+ "prost",
+ "prost-build",
+ "serde",
+ "serde_json",
+ "slog",
+]
+
+[[package]]
+name = "ic-registry-keys"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "ic-base-types",
+ "ic-types 0.8.0",
+]
+
+[[package]]
+name = "ic-registry-transport"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "bytes",
+ "candid",
+ "ic-protobuf",
+ "prost",
+ "prost-build",
+ "prost-types",
+ "serde",
+]
+
+[[package]]
+name = "ic-types"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e78ec6f58886cdc252d6f912dc794211bd6bbc39ddc9dcda434b2dc16c335b3"
+dependencies = [
+ "base32",
+ "crc32fast",
+ "hex",
+ "serde",
+ "serde_bytes",
+ "sha2 0.9.9",
+ "thiserror",
+]
+
+[[package]]
+name = "ic-types"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "base32",
+ "base64 0.11.0",
+ "bincode",
+ "byte-unit",
+ "candid",
+ "chrono",
+ "derive_more",
+ "hex",
+ "ic-base-types",
+ "ic-crypto-internal-types",
+ "ic-crypto-sha",
+ "ic-crypto-tree-hash",
+ "ic-error-types",
+ "ic-ic00-types",
+ "ic-protobuf",
+ "ic-registry-transport",
+ "ic-utils",
+ "maplit",
+ "num-traits",
+ "once_cell 1.4.0-alpha.0",
+ "phantom_newtype",
+ "prost",
+ "serde",
+ "serde_bytes",
+ "serde_cbor",
+ "serde_json",
+ "serde_with",
+ "strum 0.18.0",
+ "strum_macros 0.18.0",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "ic-utils"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "bitflags",
+ "cvt",
+ "features",
+ "hex",
+ "libc",
+ "prost",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de910d521f7cc3135c4de8db1cb910e0b5ed1dc6f57c381cd07e8e661ce10094"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a"
+dependencies = [
+ "autocfg 1.1.0",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "intmap"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae52f28f45ac2bc96edb7714de995cffc174a395fb0abf5bff453587c980d7b9"
+
+[[package]]
+name = "ipnet"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
+
+[[package]]
+name = "itertools"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+
+[[package]]
+name = "js-sys"
+version = "0.3.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "k256"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b953594f084668b4138b8b2fa63ed9776b476c58aa507d575c5206e8bfe5dc4a"
+dependencies = [
+ "cfg-if 1.0.0",
+ "ecdsa",
+ "elliptic-curve",
+ "sha2 0.10.2",
+]
+
+[[package]]
+name = "lalrpop"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b30455341b0e18f276fa64540aff54deafb54c589de6aca68659c63dd2d5d823"
+dependencies = [
+ "ascii-canvas",
+ "atty",
+ "bit-set",
+ "diff",
+ "ena",
+ "itertools 0.10.3",
+ "lalrpop-util",
+ "petgraph 0.6.2",
+ "pico-args",
+ "regex",
+ "regex-syntax",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcf796c978e9b4d983414f4caedc9273aa33ee214c5b887bd55fde84c85d2dc4"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
+[[package]]
+name = "ledger-canister"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "byteorder",
+ "candid",
+ "crc32fast",
+ "dfn_candid",
+ "dfn_core",
+ "dfn_http",
+ "dfn_protobuf",
+ "digest 0.9.0",
+ "hex",
+ "ic-base-types",
+ "ic-crypto-sha",
+ "ic-nns-constants",
+ "ic-types 0.8.0",
+ "intmap",
+ "lazy_static",
+ "on_wire",
+ "phantom_newtype",
+ "prost",
+ "prost-build",
+ "prost-derive",
+ "serde",
+ "serde_bytes",
+ "serde_cbor",
+ "yansi",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "libloading"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"
+dependencies = [
+ "cc",
+ "winapi",
+]
+
+[[package]]
+name = "libsecp256k1"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962"
+dependencies = [
+ "arrayref",
+ "crunchy",
+ "digest 0.8.1",
+ "hmac-drbg 0.2.0",
+ "rand 0.7.3",
+ "sha2 0.8.2",
+ "subtle 2.4.1",
+ "typenum",
+]
+
+[[package]]
+name = "libsecp256k1"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37"
+dependencies = [
+ "arrayref",
+ "base64 0.13.0",
+ "digest 0.9.0",
+ "hmac-drbg 0.3.0",
+ "libsecp256k1-core",
+ "libsecp256k1-gen-ecmult",
+ "libsecp256k1-gen-genmult",
+ "rand 0.8.5",
+ "serde",
+ "sha2 0.9.9",
+ "typenum",
+]
+
+[[package]]
+name = "libsecp256k1-core"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451"
+dependencies = [
+ "crunchy",
+ "digest 0.9.0",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "libsecp256k1-gen-ecmult"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809"
+dependencies = [
+ "libsecp256k1-core",
+]
+
+[[package]]
+name = "libsecp256k1-gen-genmult"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c"
+dependencies = [
+ "libsecp256k1-core",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
+dependencies = [
+ "autocfg 1.1.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "logos"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427e2abca5be13136da9afdbf874e6b34ad9001dd70f2b103b083a85daa7b345"
+dependencies = [
+ "logos-derive",
+]
+
+[[package]]
+name = "logos-derive"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56a7d287fd2ac3f75b11f19a1c8a874a7d55744bd91f7a1b3e7cf87d4343c36d"
+dependencies = [
+ "beef",
+ "fnv",
+ "proc-macro2",
+ "quote",
+ "regex-syntax",
+ "syn",
+ "utf8-ranges",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memzero"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93c0d11ac30a033511ae414355d80f70d9f29a44a49140face477117a1ee90db"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "native-tls"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "num-bigint"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "on_wire"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+
+[[package]]
+name = "once_cell"
+version = "1.4.0-alpha.0"
+source = "git+https://github.com/dfinity-lab/once_cell?branch=master#854095347d356e006ea29b7750637a14a20a6dae"
+
+[[package]]
+name = "once_cell"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225"
+
+[[package]]
+name = "opaque-debug"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell 1.12.0",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.22.0+1.1.1q"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "835363342df5fba8354c5b453325b110ffd54044e588c539cf2f20a8014e4cb1"
+dependencies = [
+ "autocfg 1.1.0",
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "smallvec 1.8.0",
+ "windows-sys",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc"
+
+[[package]]
+name = "pem"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9a3b09a20e374558580a4914d3b7d89bd61b954a5a5e1dcbea98753addb1947"
+dependencies = [
+ "base64 0.13.0",
+]
+
+[[package]]
+name = "pem-rfc7468"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac"
+dependencies = [
+ "base64ct",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "petgraph"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7"
+dependencies = [
+ "fixedbitset 0.2.0",
+ "indexmap",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
+dependencies = [
+ "fixedbitset 0.4.1",
+ "indexmap",
+]
+
+[[package]]
+name = "phantom_newtype"
+version = "0.8.0"
+source = "git+https://github.com/dfinity/ic?rev=bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab#bd3b73e075aea1cc81b23b38ccfb138ca4ab17ab"
+dependencies = [
+ "candid",
+ "proptest",
+ "serde",
+ "slog",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pico-args"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkcs11"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3aca6d67e4c8613bfe455599d0233d00735f85df2001f6bfd9bb7ac0496b10af"
+dependencies = [
+ "libloading",
+ "num-bigint 0.2.6",
+]
+
+[[package]]
+name = "pkcs8"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "pretty"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad9940b913ee56ddd94aec2d3cd179dd47068236f42a1a6415ccf9d880ce2a61"
+dependencies = [
+ "arrayvec",
+ "typed-arena",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a"
+dependencies = [
+ "thiserror",
+ "toml",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proptest"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01c477819b845fe023d33583ebf10c9f62518c8d79a0960ba5c36d6ac8a55a5b"
+dependencies = [
+ "bit-set",
+ "bitflags",
+ "byteorder",
+ "lazy_static",
+ "num-traits",
+ "quick-error",
+ "rand 0.6.5",
+ "rand_chacha 0.1.1",
+ "rand_xorshift",
+ "regex-syntax",
+ "rusty-fork",
+ "tempfile",
+]
+
+[[package]]
+name = "prost"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e6984d2f1a23009bd270b8bb56d0926810a3d483f59c987d77969e9d8e840b2"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32d3ebd75ac2679c2af3a92246639f9fcc8a442ee420719cc4fe195b98dd5fa3"
+dependencies = [
+ "bytes",
+ "heck 0.3.3",
+ "itertools 0.9.0",
+ "log",
+ "multimap",
+ "petgraph 0.5.1",
+ "prost",
+ "prost-types",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "169a15f3008ecb5160cba7d37bcd690a7601b6d30cfb87a117d45e59d52af5d4"
+dependencies = [
+ "anyhow",
+ "itertools 0.9.0",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b518d7cdd93dab1d1122cf07fa9a60771836c668dde9d9e2a139f957f0d9f1bb"
+dependencies = [
+ "bytes",
+ "prost",
+]
+
+[[package]]
+name = "qrcodegen"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4339fc7a1021c9c1621d87f5e3505f2805c8c105420ba2f2a4df86814590c142"
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quickcheck"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+dependencies = [
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "quill"
+version = "0.2.17"
+dependencies = [
+ "anyhow",
+ "base64 0.13.0",
+ "bip39",
+ "candid",
+ "clap",
+ "flate2",
+ "hex",
+ "ic-agent",
+ "ic-base-types",
+ "ic-identity-hsm",
+ "ic-nns-common",
+ "ic-nns-constants",
+ "ic-types 0.3.0",
+ "ledger-canister",
+ "libsecp256k1 0.7.0",
+ "num-bigint 0.4.3",
+ "openssl",
+ "pem",
+ "qrcodegen",
+ "rand 0.8.5",
+ "reqwest",
+ "rpassword",
+ "serde",
+ "serde_bytes",
+ "serde_cbor",
+ "serde_json",
+ "simple_asn1",
+ "tempfile",
+ "tiny-hderive",
+ "tokio",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+dependencies = [
+ "autocfg 0.1.8",
+ "libc",
+ "rand_chacha 0.1.1",
+ "rand_core 0.4.2",
+ "rand_hc 0.1.0",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg",
+ "rand_xorshift",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc 0.2.0",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom 0.2.6",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+dependencies = [
+ "libc",
+ "rand_core 0.4.2",
+ "winapi",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.6",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb"
+dependencies = [
+ "base64 0.13.0",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile 0.3.0",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "rfc6979"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c0788437d5ee113c49af91d3594ebc4fcdcc962f8b6df5aa1c3eeafd8ad95de"
+dependencies = [
+ "crypto-bigint",
+ "hmac 0.12.1",
+ "zeroize",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell 1.12.0",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rpassword"
+version = "6.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf099a1888612545b683d2661a1940089f6c2e5a8e38979b2159da876bfd956"
+dependencies = [
+ "libc",
+ "serde",
+ "serde_json",
+ "winapi",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile 1.0.0",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360"
+dependencies = [
+ "base64 0.13.0",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9"
+dependencies = [
+ "base64 0.13.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
+
+[[package]]
+name = "rusty-fork"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dd93264e10c577503e926bd1430193eeb5d21b059148910082245309b424fae"
+dependencies = [
+ "fnv",
+ "quick-error",
+ "tempfile",
+ "wait-timeout",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sec1"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+dependencies = [
+ "base16ct",
+ "der",
+ "generic-array 0.14.5",
+ "pkcs8",
+ "subtle 2.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212e73464ebcde48d723aa02eb270ba62eff38a9b732df31f33f1b4e145f3a54"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_cbor"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
+dependencies = [
+ "half",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "sha2"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69"
+dependencies = [
+ "block-buffer 0.7.3",
+ "digest 0.8.1",
+ "fake-simd",
+ "opaque-debug 0.2.3",
+]
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug 0.3.0",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "signature"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4"
+dependencies = [
+ "digest 0.10.3",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "simple_asn1"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a762b1c38b9b990c694b9c2f8abe3372ce6a9ceaae6bca39cfc46e054f45745"
+dependencies = [
+ "num-bigint 0.4.3",
+ "num-traits",
+ "thiserror",
+ "time 0.3.9",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
+
+[[package]]
+name = "slog"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06"
+dependencies = [
+ "erased-serde",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+
+[[package]]
+name = "socket2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spki"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "string_cache"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell 1.12.0",
+ "parking_lot",
+ "phf_shared",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b"
+
+[[package]]
+name = "strum"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7318c509b5ba57f18533982607f24070a55d353e90d4cae30c467cdb2ad5ac5c"
+
+[[package]]
+name = "strum_macros"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "subtle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.95"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+
+[[package]]
+name = "thiserror"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd"
+dependencies = [
+ "itoa",
+ "libc",
+ "num_threads",
+ "quickcheck",
+ "time-macros",
+]
+
+[[package]]
+name = "time-macros"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792"
+
+[[package]]
+name = "tiny-hderive"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b874a4992538d4b2f4fbbac11b9419d685f4b39bdc3fed95b04e07bfd76040"
+dependencies = [
+ "base58",
+ "hmac 0.7.1",
+ "libsecp256k1 0.3.5",
+ "memzero",
+ "sha2 0.8.2",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tokio"
+version = "1.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4903bf0427cf68dddd5aa6a93220756f8be0c34fcfa9f5e6191e103e15a31395"
+dependencies = [
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "once_cell 1.12.0",
+ "pin-project-lite",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f988a1a1adc2fb21f9c12aa96441da33a1728193ae0b95d2be22dbd17fcb4e5c"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+
+[[package]]
+name = "tracing"
+version = "0.1.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09"
+dependencies = [
+ "cfg-if 1.0.0",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "typed-arena"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0685c84d5d54d1c26f7d3eb96cd41550adb97baed141a761cf335d3d33bcd0ae"
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09c8070a9942f5e7cfccd93f490fdebd230ee3c3c9f107cb25bad5351ef671cf"
+dependencies = [
+ "smallvec 0.6.14",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744"
+
+[[package]]
+name = "web-sys"
+version = "0.3.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "which"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae"
+dependencies = [
+ "either",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zeroize"
+version = "1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07"
+dependencies = [
+ "zeroize_derive",
+]
+
+[[package]]
+name = "zeroize_derive"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "synstructure",
+]
diff --git a/nixpkgs/pkgs/tools/security/quill/default.nix b/nixpkgs/pkgs/tools/security/quill/default.nix
new file mode 100644
index 000000000000..5de9e8b8b3fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/quill/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, openssl, Security, libiconv, pkg-config, protobuf, buildPackages }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "quill";
+  version = "0.2.17";
+
+  src = fetchFromGitHub {
+    owner = "dfinity";
+    repo = "quill";
+    rev = "v${version}";
+    sha256 = "sha256-0DHTtnQU26l4DXUVDeHF+hkavlVY7rQykXxgWGSUc/k=";
+  };
+
+  ic = fetchFromGitHub {
+    owner = "dfinity";
+    repo = "ic";
+    rev = "779549eccfcf61ac702dfc2ee6d76ffdc2db1f7f";
+    sha256 = "1r31d5hab7k1n60a7y8fw79fjgfq04cgj9krwa6r9z4isi3919v6";
+  };
+
+  registry = "file://local-registry";
+
+  preBuild = ''
+    export REGISTRY_TRANSPORT_PROTO_INCLUDES=${ic}/rs/registry/transport/proto
+    export IC_BASE_TYPES_PROTO_INCLUDES=${ic}/rs/types/base_types/proto
+    export IC_PROTOBUF_PROTO_INCLUDES=${ic}/rs/protobuf/def
+    export IC_NNS_COMMON_PROTO_INCLUDES=${ic}/rs/nns/common/proto
+    export PROTOC=${buildPackages.protobuf}/bin/protoc
+    export OPENSSL_DIR=${openssl.dev}
+    export OPENSSL_LIB_DIR=${lib.getLib openssl}/lib
+  '';
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "derive_more-0.99.8-alpha.0" = "sha256-tEsfYC9oCAsDjinCsUDgRg3q6ruvayuA1lRmsEP9cys=";
+      "dfn_candid-0.8.0" = "sha256-7LXTwxSA9pTjFynMRzNRXie4x5u8BSLpFaOzpRsgrKA=";
+      "once_cell-1.4.0-alpha.0" = "sha256-5g26ZizSY5egH/4yU5glzBxpWzdvgKtDsckBpAUBatw=";
+    };
+  };
+
+  nativeBuildInputs = [ pkg-config protobuf ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security libiconv ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dfinity/quill";
+    changelog = "https://github.com/dfinity/quill/releases/tag/v${version}";
+    description = "Minimalistic ledger and governance toolkit for cold wallets on the Internet Computer";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ imalison ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/radamsa/default.nix b/nixpkgs/pkgs/tools/security/radamsa/default.nix
new file mode 100644
index 000000000000..ebcd2a42191d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/radamsa/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, fetchFromGitLab, bash }:
+
+let
+  # Fetch explicitly, otherwise build will try to do so
+  owl = fetchurl {
+    name = "ol.c.gz";
+    url = "https://gitlab.com/owl-lisp/owl/uploads/0d0730b500976348d1e66b4a1756cdc3/ol-0.1.19.c.gz";
+    sha256 = "0kdmzf60nbpvdn8j3l51i9lhcwfi4aw1zj4lhbp4adyg8n8pp4c6";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "radamsa";
+  version = "0.6";
+
+  src = fetchFromGitLab {
+    owner = "akihe";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0mi1mwvfnlpblrbmp0rcyf5p74m771z6nrbsly6cajyn4mlpmbaq";
+  };
+
+  patchPhase = ''
+    substituteInPlace ./tests/bd.sh  \
+      --replace "/bin/echo" echo
+
+    ln -s ${owl} ol.c.gz
+
+    patchShebangs tests
+  '';
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" "BINDIR=" ];
+
+  nativeCheckInputs = [ bash ];
+  doCheck = true;
+
+  meta = {
+    description = "A general purpose fuzzer";
+    longDescription = "Radamsa is a general purpose data fuzzer. It reads data from given sample files, or standard input if none are given, and outputs modified data. It is usually used to generate malformed data for testing programs.";
+    homepage =  "https://gitlab.com/akihe/radamsa";
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rarcrack/default.nix b/nixpkgs/pkgs/tools/security/rarcrack/default.nix
new file mode 100644
index 000000000000..3745a9520f1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rarcrack/default.nix
@@ -0,0 +1,40 @@
+{lib, stdenv, fetchFromGitHub, libxml2, file, p7zip, unrar, unzip}:
+
+stdenv.mkDerivation {
+  pname = "rarcrack";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "jaredsburrows";
+    repo = "Rarcrack";
+    rev = "35ead64cd2b967eec3e3e3a4c328b89b11ff32a0";
+    sha256 = "134fq84896w5vp8vg4qg0ybpb466njibigyd7bqqm1xydr07qrgn";
+  };
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ libxml2 file p7zip unrar ];
+  buildFlags = lib.optional stdenv.cc.isClang "CC=clang";
+  installFlags = [ "PREFIX=\${out}" ];
+
+  patchPhase = ''
+   substituteInPlace rarcrack.c --replace "file -i" "${file}/bin/file -i"
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with lib; {
+    description = "This program can crack zip,7z and rar file passwords";
+    longDescription = ''
+    If you forget your password for compressed archive (rar, 7z, zip), this program is the solution.
+    This program uses bruteforce algorithm to find correct password. You can specify wich characters will be used in password generations.
+    Warning: Please don't use this program for any illegal things!
+    '';
+    homepage = "https://github.com/jaredsburrows/Rarcrack";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ davidak ];
+    platforms = with platforms; unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/rblake2sum/default.nix b/nixpkgs/pkgs/tools/security/rblake2sum/default.nix
new file mode 100644
index 000000000000..8f2a86836356
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rblake2sum/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, Security
+}:
+rustPlatform.buildRustPackage {
+  pname = "rblake2sum";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "crev-dev";
+    repo = "rblake2sum";
+    rev = "cdbaba9f198bd28bfad2fbc17011ce5c8c7ad957";
+    hash = "sha256-bzOjJ+/M0YWY4/r8cNARPVqbuLBeTllqFyVXhJz6ZMI=";
+  };
+
+  cargoHash = "sha256-egwL3z7uB4AcRwPT0uPrenyh4FSxhbZKMdkPhRztMbs=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A recursive blake2 digest (hash) of a file-system path";
+    homepage = "https://github.com/crev-dev/rblake2sum";
+    license = [ licenses.mit ];
+    maintainers = with maintainers; [ dpc ];
+    mainProgram = "rblake2sum";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rblake3sum/default.nix b/nixpkgs/pkgs/tools/security/rblake3sum/default.nix
new file mode 100644
index 000000000000..341dcd06fb6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rblake3sum/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, Security
+}:
+rustPlatform.buildRustPackage {
+  pname = "rblake3sum";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "rustshop";
+    repo = "rblake3sum";
+    rev = "6a8e2576ccc05214eacb75b75a9d4cfdf272161c";
+    hash = "sha256-UFk6SJVA58WXhH1CIuT48MEF19yPUe1HD+ekn4LDj8g=";
+  };
+
+  cargoHash = "sha256-SE/Zg/UEV/vhB/VDcn8Y70OUIoxbJBh6H2QgFMkWPc4=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A recursive blake3 digest (hash) of a file-system path";
+    homepage = "https://github.com/rustshop/rblake3sum";
+    license = [ licenses.mit ];
+    maintainers = with maintainers; [ dpc ];
+    mainProgram = "rblake3sum";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rbw/default.nix b/nixpkgs/pkgs/tools/security/rbw/default.nix
new file mode 100644
index 000000000000..22efd33c6abe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rbw/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchzip
+, openssl
+, pkg-config
+, installShellFiles
+, darwin
+, bash
+
+  # rbw-fzf
+, withFzf ? false
+, fzf
+, perl
+
+  # rbw-rofi
+, withRofi ? false
+, rofi
+, xclip
+
+  # pass-import
+, withPass ? false
+, pass
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rbw";
+  version = "1.9.0";
+
+  src = fetchzip {
+    url = "https://git.tozt.net/rbw/snapshot/rbw-${version}.tar.gz";
+    sha256 = "sha256-NjMH99rmJYbCxDdc7e0iOFoslSrIuwIBxuHxADp0Ks4=";
+  };
+
+  cargoHash = "sha256-AH35v61FgUQe9BwDgVnXwoVTSQduxeMbXWy4ga3WU3k=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ] ++ lib.optionals stdenv.isLinux [ pkg-config ];
+
+  buildInputs = [ bash ] # for git-credential-rbw
+  ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.Security
+    darwin.apple_sdk_11_0.frameworks.AppKit
+  ];
+
+  preConfigure = lib.optionalString stdenv.isLinux ''
+    export OPENSSL_INCLUDE_DIR="${openssl.dev}/include"
+    export OPENSSL_LIB_DIR="${lib.getLib openssl}/lib"
+  '';
+
+  postInstall = ''
+    install -Dm755 -t $out/bin bin/git-credential-rbw
+    installShellCompletion --cmd rbw \
+      --bash <($out/bin/rbw gen-completions bash) \
+      --fish <($out/bin/rbw gen-completions fish) \
+      --zsh <($out/bin/rbw gen-completions zsh)
+  '' + lib.optionalString withFzf ''
+    install -Dm755 -t $out/bin bin/rbw-fzf
+    substituteInPlace $out/bin/rbw-fzf \
+      --replace fzf ${fzf}/bin/fzf \
+      --replace perl ${perl}/bin/perl
+  '' + lib.optionalString withRofi ''
+    install -Dm755 -t $out/bin bin/rbw-rofi
+    substituteInPlace $out/bin/rbw-rofi \
+      --replace rofi ${rofi}/bin/rofi \
+      --replace xclip ${xclip}/bin/xclip
+  '' + lib.optionalString withPass ''
+    install -Dm755 -t $out/bin bin/pass-import
+    substituteInPlace $out/bin/pass-import \
+      --replace pass ${pass}/bin/pass
+  '';
+
+  meta = with lib; {
+    description = "Unofficial command line client for Bitwarden";
+    homepage = "https://crates.io/crates/rbw";
+    changelog = "https://git.tozt.net/rbw/plain/CHANGELOG.md?id=${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ albakham luc65r marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/redwax-tool/default.nix b/nixpkgs/pkgs/tools/security/redwax-tool/default.nix
new file mode 100644
index 000000000000..af327cba948b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/redwax-tool/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchsvn
+, autoreconfHook, pkg-config, txt2man, which
+, openssl, apr, aprutil
+}:
+
+stdenv.mkDerivation rec {
+  pname = "redwax-tool";
+  version = "0.9.1";
+
+  src = fetchsvn {
+    url = "https://source.redwax.eu/svn/redwax/rt/redwax-tool/tags/redwax-tool-${version}/";
+    sha256 = "sha256-MWSB1AkkRS18UUHGq8EWv3OIXPSVHpmrdD5Eq1VdbkA=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config txt2man which ];
+  buildInputs = [ openssl apr aprutil ];
+
+  meta = with lib; {
+    homepage = "https://redwax.eu/rt/";
+    description = "Universal certificate conversion tool";
+    longDescription = ''
+      Read certificates and keys from your chosen sources, filter the
+      certificates and keys you're interested in, write those
+      certificates and keys to the destinations of your choice.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ astro ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/regexploit/default.nix b/nixpkgs/pkgs/tools/security/regexploit/default.nix
new file mode 100644
index 000000000000..b921cbcc3b3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/regexploit/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "regexploit";
+  version = "1.0.0";
+
+  disabled = python3.pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "doyensec";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0z3fghsyw0ll36in7ihc0qi3gy7mqi6cw1mi8m8c8xb1nlwpfr0y";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pyyaml
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "regexploit" ];
+
+  meta = with lib; {
+    description = "Tool to find regular expressions which are vulnerable to ReDoS";
+    homepage = "https://github.com/doyensec/regexploit";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/regpg/default.nix b/nixpkgs/pkgs/tools/security/regpg/default.nix
new file mode 100644
index 000000000000..aaefbef227b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/regpg/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, gnupg
+, perl
+}:
+
+let
+  perlEnv = perl.withPackages (p: with p; [ TextMarkdown ]);
+in
+stdenv.mkDerivation rec {
+  pname = "regpg";
+  version = "1.11";
+
+  src = fetchFromGitHub {
+    owner = "fanf2";
+    repo = "regpg";
+    rev = "regpg-${version}";
+    sha256 = "2ea99950804078190e1cc2a76d4740e3fdd5395a9043db3f3fe86bf2477d3a7d";
+  };
+
+  nativeBuildInputs = [ makeWrapper perlEnv ];
+
+  postPatch = ''
+    patchShebangs ./util/insert-here.pl ./util/markdown.pl
+    substituteInPlace ./Makefile \
+      --replace 'util/insert-here.pl' 'perl util/insert-here.pl'
+    substituteInPlace ./Makefile \
+      --replace 'util/markdown.pl' 'perl util/markdown.pl'
+    substituteInPlace util/insert-here.pl \
+      --replace 'qx(git describe)' '"regpg-${version}"'
+  '';
+
+  dontConfigure = true;
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  postFixup = ''
+    patchShebangs $out/bin/regpg
+    wrapProgram $out/bin/regpg --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg ]}"
+  '';
+
+  meta = with lib; {
+    description = "GPG wrapper utility for storing secrets in VCS";
+    homepage = "https://dotat.at/prog/regpg";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ _0xC45 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rekor/default.nix b/nixpkgs/pkgs/tools/security/rekor/default.nix
new file mode 100644
index 000000000000..dc20ca7b7c53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rekor/default.nix
@@ -0,0 +1,71 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+let
+  generic = { pname, packageToBuild, description }:
+    buildGoModule rec {
+      inherit pname;
+      version = "1.3.5";
+
+      src = fetchFromGitHub {
+        owner = "sigstore";
+        repo = "rekor";
+        rev = "v${version}";
+        hash = "sha256-g/APpfvG1MMTYZfPSXKNa9DdWrOrjOk8uQV3QyzCQjY=";
+        # populate values that require us to use git. By doing this in postFetch we
+        # can delete .git afterwards and maintain better reproducibility of the src.
+        leaveDotGit = true;
+        postFetch = ''
+          cd "$out"
+          git rev-parse HEAD > $out/COMMIT
+          # '0000-00-00T00:00:00Z'
+          date -u -d "@$(git log -1 --pretty=%ct)" "+'%Y-%m-%dT%H:%M:%SZ'" > $out/SOURCE_DATE_EPOCH
+          find "$out" -name .git -print0 | xargs -0 rm -rf
+        '';
+      };
+
+      vendorHash = "sha256-6ZJ3IgnzoZSDL1+CMYUDumXf1uO+odZ8Y5IZq3GN4bY=";
+
+      nativeBuildInputs = [ installShellFiles ];
+
+      subPackages = [ packageToBuild ];
+
+      ldflags = [
+        "-s"
+        "-w"
+        "-X sigs.k8s.io/release-utils/version.gitVersion=v${version}"
+        "-X sigs.k8s.io/release-utils/version.gitTreeState=clean"
+      ];
+
+      # ldflags based on metadata from git and source
+      preBuild = ''
+        ldflags+=" -X sigs.k8s.io/release-utils/version.gitCommit=$(cat COMMIT)"
+        ldflags+=" -X sigs.k8s.io/release-utils/version.buildDate=$(cat SOURCE_DATE_EPOCH)"
+      '';
+
+      postInstall = ''
+        installShellCompletion --cmd ${pname} \
+          --bash <($out/bin/${pname} completion bash) \
+          --fish <($out/bin/${pname} completion fish) \
+          --zsh <($out/bin/${pname} completion zsh)
+      '';
+
+      meta = with lib; {
+        inherit description;
+        homepage = "https://github.com/sigstore/rekor";
+        changelog = "https://github.com/sigstore/rekor/releases/tag/v${version}";
+        license = licenses.asl20;
+        maintainers = with maintainers; [ lesuisse jk developer-guy ];
+      };
+    };
+in {
+  rekor-cli = generic {
+    pname = "rekor-cli";
+    packageToBuild = "cmd/rekor-cli";
+    description = "CLI client for Sigstore, the Signature Transparency Log";
+  };
+  rekor-server = generic {
+    pname = "rekor-server";
+    packageToBuild = "cmd/rekor-server";
+    description = "Sigstore server, the Signature Transparency Log";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/responder/default.nix b/nixpkgs/pkgs/tools/security/responder/default.nix
new file mode 100644
index 000000000000..a51bb40ac5fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/responder/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, fetchFromGitHub
+, makeWrapper
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "responder";
+  version = "3.1.4.0";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "lgandx";
+    repo = "Responder";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-BVSA/ZhpGz6UGyDRJUc4nlRJZ1/Y7er1vVOI+IbIqGk=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    netifaces
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share $out/share/Responder
+    cp -R . $out/share/Responder
+
+    makeWrapper ${python3.interpreter} $out/bin/responder \
+      --set PYTHONPATH "$PYTHONPATH:$out/bin/Responder.py" \
+      --add-flags "$out/share/Responder/Responder.py" \
+      --run "mkdir -p /tmp/Responder"
+
+    substituteInPlace $out/share/Responder/Responder.conf \
+      --replace "Responder-Session.log" "/tmp/Responder/Responder-Session.log" \
+      --replace "Poisoners-Session.log" "/tmp/Responder/Poisoners-Session.log" \
+      --replace "Analyzer-Session.log" "/tmp/Responder/Analyzer-Session" \
+      --replace "Config-Responder.log" "/tmp/Responder/Config-Responder.log" \
+      --replace "Responder.db" "/tmp/Responder/Responder.db"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "LLMNR, NBT-NS and MDNS poisoner, with built-in HTTP/SMB/MSSQL/FTP/LDAP rogue authentication server";
+    homepage = "https://github.com/lgandx/Responder";
+    changelog = "https://github.com/lgandx/Responder/blob/master/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rhash/default.nix b/nixpkgs/pkgs/tools/security/rhash/default.nix
new file mode 100644
index 000000000000..e789eeba0539
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rhash/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, which
+, enableStatic ? stdenv.hostPlatform.isStatic
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.4.4";
+  pname = "rhash";
+
+  src = fetchFromGitHub {
+    owner = "rhash";
+    repo = "RHash";
+    rev = "v${version}";
+    sha256 = "sha256-3CW41ULdXoID4cOgrcG2j85tgIJ/sz5hU7A83qpuxf4=";
+  };
+
+  nativeBuildInputs = [ which ];
+
+  # configure script is not autotools-based, doesn't support these options
+  dontAddStaticConfigureFlags = true;
+
+  configurePlatforms = [ ];
+
+  configureFlags = [
+    "--ar=${stdenv.cc.targetPrefix}ar"
+    "--target=${stdenv.hostPlatform.config}"
+    (lib.enableFeature enableStatic "static")
+    (lib.enableFeature enableStatic "lib-static")
+  ];
+
+  doCheck = true;
+
+  checkTarget = "test-full";
+
+  installTargets = [
+    "install"
+    "install-lib-headers"
+  ] ++ lib.optionals (!enableStatic) [
+    "install-lib-so-link"
+  ];
+
+  meta = with lib; {
+    homepage = "https://rhash.sourceforge.net/";
+    description = "Console utility and library for computing and verifying hash sums of files";
+    license = licenses.bsd0;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ andrewrk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ripasso/Cargo.lock b/nixpkgs/pkgs/tools/security/ripasso/Cargo.lock
new file mode 100644
index 000000000000..659e66c0f9d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ripasso/Cargo.lock
@@ -0,0 +1,3989 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "getrandom 0.2.8",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
+[[package]]
+name = "atk"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
+dependencies = [
+ "atk-sys",
+ "bitflags",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base32"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bindgen"
+version = "0.63.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "lazy_static 1.4.0",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "buffered-reader"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0dd286184b392a1ce6b3deecd073f0330df194bf935b87f852147d50d0d2d18"
+dependencies = [
+ "bzip2",
+ "flate2",
+ "lazy_static 1.4.0",
+ "libc",
+]
+
+[[package]]
+name = "build-rs"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b00b8763668c99f8d9101b8a0dd82106f58265464531a79b2cef0d9a30c17dd2"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "bytecount"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "bzip2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cairo-rs"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
+dependencies = [
+ "bitflags",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "capnp"
+version = "0.13.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "458fe65c8ae2c09ebe6658d3b98a1dd672efda0d7ad73ebd69c4a351abd96ef6"
+
+[[package]]
+name = "capnp-futures"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc7bd6f6a6240f4f0a39b89c731916b15eefa26d31f90dffc1d232b7981d09a3"
+dependencies = [
+ "capnp",
+ "futures",
+]
+
+[[package]]
+name = "capnp-rpc"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37998522d42bbe4a1d266f418b1a053b679a338e904e55afd5ff22333df0e09e"
+dependencies = [
+ "capnp",
+ "capnp-futures",
+ "futures",
+]
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom 7.1.3",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "bitflags",
+ "textwrap",
+ "unicode-width",
+]
+
+[[package]]
+name = "cli-clipboard"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04087c1d4a2aa259784a563932aee09cbb0869d490775e051096174b070f3e3d"
+dependencies = [
+ "clipboard-win 4.5.0",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "wl-clipboard-rs",
+ "x11-clipboard 0.7.0",
+]
+
+[[package]]
+name = "clipboard"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a904646c0340239dcf7c51677b33928bf24fdf424b79a57909c0109075b2e7"
+dependencies = [
+ "clipboard-win 2.2.0",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "x11-clipboard 0.3.3",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "config"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1b9d958c2b1368a663f05538fc1b5975adce1e19f435acceae987aceeeb369"
+dependencies = [
+ "lazy_static 1.4.0",
+ "nom 5.1.2",
+ "serde",
+ "toml",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279"
+
+[[package]]
+name = "conv"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299"
+dependencies = [
+ "custom_derive",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f"
+dependencies = [
+ "atty",
+ "cast",
+ "clap",
+ "criterion-plot",
+ "csv",
+ "itertools",
+ "lazy_static 1.4.0",
+ "num-traits",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_cbor",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876"
+dependencies = [
+ "cast",
+ "itertools",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.8.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "cstr-argument"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bd9c8e659a473bce955ae5c35b116af38af11a7acb0b480e01f3ed348aeb40"
+dependencies = [
+ "cfg-if",
+ "memchr",
+]
+
+[[package]]
+name = "csv"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af91f40b7355f82b0a891f50e70399475945bb0b0da4f1700ce60761c9d3e359"
+dependencies = [
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "cursive"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5438eb16bdd8af51b31e74764fef5d0a9260227a5ec82ba75c9d11ce46595839"
+dependencies = [
+ "ahash",
+ "cfg-if",
+ "crossbeam-channel",
+ "crossterm",
+ "cursive_core",
+ "lazy_static 1.4.0",
+ "libc",
+ "log",
+ "signal-hook",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "cursive_core"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4db3b58161228d0dcb45c7968c5e74c3f03ad39e8983e58ad7d57061aa2cd94d"
+dependencies = [
+ "ahash",
+ "crossbeam-channel",
+ "enum-map",
+ "enumset",
+ "lazy_static 1.4.0",
+ "log",
+ "num",
+ "owning_ref",
+ "time 0.3.20",
+ "toml",
+ "unicode-segmentation",
+ "unicode-width",
+ "xi-unicode",
+]
+
+[[package]]
+name = "custom_derive"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9"
+
+[[package]]
+name = "cxx"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "derive-new"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "ena"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2e5d13ca2353ab7d0230988629def93914a8c4015f621f9b13ed2955614731d"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encoding"
+version = "0.2.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
+dependencies = [
+ "encoding-index-japanese",
+ "encoding-index-korean",
+ "encoding-index-simpchinese",
+ "encoding-index-singlebyte",
+ "encoding-index-tradchinese",
+]
+
+[[package]]
+name = "encoding-index-japanese"
+version = "1.20141219.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
+dependencies = [
+ "encoding_index_tests",
+]
+
+[[package]]
+name = "encoding-index-korean"
+version = "1.20141219.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
+dependencies = [
+ "encoding_index_tests",
+]
+
+[[package]]
+name = "encoding-index-simpchinese"
+version = "1.20141219.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7"
+dependencies = [
+ "encoding_index_tests",
+]
+
+[[package]]
+name = "encoding-index-singlebyte"
+version = "1.20141219.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
+dependencies = [
+ "encoding_index_tests",
+]
+
+[[package]]
+name = "encoding-index-tradchinese"
+version = "1.20141219.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
+dependencies = [
+ "encoding_index_tests",
+]
+
+[[package]]
+name = "encoding_index_tests"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum-map"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c25992259941eb7e57b936157961b217a4fc8597829ddef0596d6c3cd86e1a"
+dependencies = [
+ "enum-map-derive",
+]
+
+[[package]]
+name = "enum-map-derive"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a4da76b3b6116d758c7ba93f7ec6a35d2e2cf24feda76c6e38a375f4d5c59f2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "enumset"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19be8061a06ab6f3a6cf21106c873578bf01bd42ad15e0311a9c76161cb1c753"
+dependencies = [
+ "enumset_derive",
+]
+
+[[package]]
+name = "enumset_derive"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03e7b551eba279bf0fa88b83a46330168c1560a52a94f5126f892f0b364ab3e0"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "field-offset"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
+dependencies = [
+ "memoffset 0.6.5",
+ "rustc_version",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364"
+
+[[package]]
+name = "futures-task"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366"
+
+[[package]]
+name = "futures-util"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gdk"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.15.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
+dependencies = [
+ "bitflags",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gettext"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ebb594e753d5997e4be036e5a8cf048ab9414352870fb45c779557bbc9ba971"
+dependencies = [
+ "byteorder",
+ "encoding",
+]
+
+[[package]]
+name = "gio"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "git2"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "glib"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.15.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gobject-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gpg-error"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89aaeddbfb92313378c58e98abadaaa34082b3855f1d455576eeeda08bd592c"
+dependencies = [
+ "libgpg-error-sys",
+]
+
+[[package]]
+name = "gpgme"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57539732fbe58eacdb984734b72b470ed0bca3ab7a49813271878567025ac44f"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "conv",
+ "cstr-argument",
+ "gpg-error",
+ "gpgme-sys",
+ "libc",
+ "memoffset 0.7.1",
+ "once_cell",
+ "smallvec",
+ "static_assertions",
+]
+
+[[package]]
+name = "gpgme-sys"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509223d659c06e4a26229437d6ac917723f02d31917c86c6ecd50e8369741cf7"
+dependencies = [
+ "build-rs",
+ "libc",
+ "libgpg-error-sys",
+ "system-deps",
+ "winreg",
+]
+
+[[package]]
+name = "gtk"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0"
+dependencies = [
+ "atk",
+ "bitflags",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk",
+ "gdk-pixbuf",
+ "gio",
+ "glib",
+ "gtk-sys",
+ "gtk3-macros",
+ "libc",
+ "once_cell",
+ "pango",
+ "pkg-config",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.15.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk3-macros"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util 0.7.7",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lalrpop"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b30455341b0e18f276fa64540aff54deafb54c589de6aca68659c63dd2d5d823"
+dependencies = [
+ "ascii-canvas",
+ "atty",
+ "bit-set",
+ "diff",
+ "ena",
+ "itertools",
+ "lalrpop-util",
+ "petgraph",
+ "pico-args",
+ "regex",
+ "regex-syntax",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcf796c978e9b4d983414f4caedc9273aa33ee214c5b887bd55fde84c85d2dc4"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "lazy_static"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "lexical-core"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
+dependencies = [
+ "arrayvec",
+ "bitflags",
+ "cfg-if",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.14.2+1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4"
+dependencies = [
+ "cc",
+ "libc",
+ "libssh2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libgpg-error-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c97079310f39c835d3bd73578379d040f779614bb331c7ffbb6630fee6420290"
+dependencies = [
+ "build-rs",
+ "system-deps",
+ "winreg",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libssh2-sys"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "locale_config"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934"
+dependencies = [
+ "lazy_static 1.4.0",
+ "objc",
+ "objc-foundation",
+ "regex",
+ "winapi",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "man"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebf5fa795187a80147b1ac10aaedcf5ffd3bbeb1838bda61801a1c9ad700a1c9"
+dependencies = [
+ "roff",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memsec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa0916b001582d253822171bd23f4a0229d32b9507fae236f5da8cad515ba7c"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static 1.4.0",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nettle"
+version = "7.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5d193a809310369c5d16e45bc0a88cb27935edd5d3375bcfc2371b167694035"
+dependencies = [
+ "getrandom 0.2.8",
+ "libc",
+ "nettle-sys",
+ "thiserror",
+]
+
+[[package]]
+name = "nettle-sys"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5df7cd7e8d5d2997055f31318d1ec648c84886e662bbef7b4a60e3cbc899522b"
+dependencies = [
+ "bindgen",
+ "cc",
+ "libc",
+ "pkg-config",
+ "tempfile",
+ "vcpkg",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nom"
+version = "5.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
+dependencies = [
+ "lexical-core",
+ "memchr",
+ "version_check",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606"
+dependencies = [
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "openssl"
+version = "0.10.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "owning_ref"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "pango"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
+dependencies = [
+ "bitflags",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pest"
+version = "2.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pico-args"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "plotters"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "qml"
+version = "0.0.9"
+source = "git+https://github.com/White-Oak/qml-rust#3316f54e29331ac951b5cf083179bb71add002e2"
+dependencies = [
+ "cmake",
+ "lazy_static 0.2.11",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.8",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.8",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "reqwest"
+version = "0.11.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9"
+dependencies = [
+ "base64 0.21.0",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "ripasso"
+version = "0.6.4"
+dependencies = [
+ "anyhow",
+ "base64 0.21.0",
+ "chrono",
+ "config",
+ "criterion",
+ "flate2",
+ "git2",
+ "glob",
+ "gpgme",
+ "hex",
+ "hmac",
+ "rand 0.8.5",
+ "reqwest",
+ "sequoia-ipc",
+ "sequoia-openpgp",
+ "sha1",
+ "sha2",
+ "tar",
+ "tempfile",
+ "toml",
+ "totp-rs",
+ "whoami",
+]
+
+[[package]]
+name = "ripasso-cursive"
+version = "0.6.4"
+dependencies = [
+ "chrono",
+ "cli-clipboard",
+ "clipboard",
+ "config",
+ "cursive",
+ "gettext",
+ "glob",
+ "hex",
+ "lazy_static 1.4.0",
+ "locale_config",
+ "man",
+ "ripasso",
+ "tempfile",
+ "term_size",
+ "toml",
+ "unic-langid",
+ "wl-clipboard-rs",
+]
+
+[[package]]
+name = "ripasso-gtk"
+version = "0.6.4"
+dependencies = [
+ "clipboard",
+ "gdk",
+ "glib",
+ "gtk",
+ "lazy_static 1.4.0",
+ "ripasso",
+]
+
+[[package]]
+name = "ripasso-qt"
+version = "0.6.4"
+dependencies = [
+ "clipboard",
+ "qml",
+ "ripasso",
+]
+
+[[package]]
+name = "roff"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33e4fb37ba46888052c763e4ec2acfedd8f00f62897b630cadb6298b833675e"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70"
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5e082f6ea090deaf0e6dd04b68360fd5cddb152af6ce8927c9d25db299f98c"
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "sequoia-ipc"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0d77ed9e61ea15856bc379246be754c149d40920983a2ca87a8fced24cc9328"
+dependencies = [
+ "anyhow",
+ "buffered-reader",
+ "capnp-rpc",
+ "ctor",
+ "dirs",
+ "fs2",
+ "futures",
+ "lalrpop",
+ "lalrpop-util",
+ "lazy_static 1.4.0",
+ "libc",
+ "memsec",
+ "rand 0.8.5",
+ "sequoia-openpgp",
+ "socket2",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "tokio-util 0.6.10",
+ "winapi",
+]
+
+[[package]]
+name = "sequoia-openpgp"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70af2f594bf5261eb87be5060db1e40d6445686d2bb3ec41c014cf53701130a2"
+dependencies = [
+ "anyhow",
+ "base64 0.13.1",
+ "buffered-reader",
+ "bzip2",
+ "chrono",
+ "dyn-clone",
+ "flate2",
+ "getrandom 0.2.8",
+ "idna",
+ "lalrpop",
+ "lalrpop-util",
+ "lazy_static 1.4.0",
+ "libc",
+ "memsec",
+ "nettle",
+ "rand 0.7.3",
+ "regex",
+ "regex-syntax",
+ "sha1collisiondetection",
+ "thiserror",
+ "xxhash-rust",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+
+[[package]]
+name = "serde_cbor"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
+dependencies = [
+ "half",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "sha1collisiondetection"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c66558a774ef5044cb4a834db5f5c7f95e139d2341d7f502fe6034afa7082461"
+dependencies = [
+ "digest 0.9.0",
+ "generic-array",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "string_cache"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d69e88b23f23030bf4d0e9ca7b07434f70e1c1f4d3ca7e93ce958b373654d9f"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml",
+ "version-compare",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "term_size"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "itoa",
+ "libc",
+ "num_threads",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ac3f5b6856e931e15e07b478e98c8045239829a65f9156d4fa7e7788197a5ef"
+dependencies = [
+ "displaydoc",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+
+[[package]]
+name = "toml_edit"
+version = "0.19.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a1eb0622d28f4b9c90adc4ea4b2b46b47663fde9ac5fafcb14a1369d5508825"
+dependencies = [
+ "indexmap",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "totp-rs"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942a8cf27d3bf8ac090ed75d3887cead18da1c6f3b0d4502edbf639ebbd37057"
+dependencies = [
+ "base32",
+ "constant_time_eq",
+ "hmac",
+ "sha1",
+ "sha2",
+ "url",
+ "urlencoding",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tree_magic_mini"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91adfd0607cacf6e4babdb870e9bec4037c1c4b151cfd279ccefc5e0c7feaa6d"
+dependencies = [
+ "bytecount",
+ "fnv",
+ "lazy_static 1.4.0",
+ "nom 7.1.3",
+ "once_cell",
+ "petgraph",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+
+[[package]]
+name = "unic-langid"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "398f9ad7239db44fd0f80fe068d12ff22d78354080332a5077dc6f52f14dcf2f"
+dependencies = [
+ "unic-langid-impl",
+]
+
+[[package]]
+name = "unic-langid-impl"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e35bfd2f2b8796545b55d7d3fd3e89a0613f68a0d1c8bc28cb7ff96b411a35ff"
+dependencies = [
+ "tinystr",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "775c11906edafc97bc378816b94585fbd9a054eabaf86fdd0ced94af449efab7"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "wayland-client"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
+dependencies = [
+ "bitflags",
+ "downcast-rs",
+ "libc",
+ "nix",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
+dependencies = [
+ "nix",
+ "once_cell",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
+dependencies = [
+ "bitflags",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "whoami"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45dbc71f0cdca27dc261a9bd37ddec174e4a0af2b900b890f378460f745426e3"
+dependencies = [
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "winnow"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "faf09497b8f8b5ac5d3bb4d05c0a99be20f26fd3d5f2db7b0716e946d5103658"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "wl-clipboard-rs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "981a303dfbb75d659f6612d05a14b2e363c103d24f676a2d44a00d18507a1ad9"
+dependencies = [
+ "derive-new",
+ "libc",
+ "log",
+ "nix",
+ "os_pipe",
+ "tempfile",
+ "thiserror",
+ "tree_magic_mini",
+ "wayland-client",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "x11-clipboard"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89bd49c06c9eb5d98e6ba6536cf64ac9f7ee3a009b2f53996d405b3944f6bcea"
+dependencies = [
+ "xcb",
+]
+
+[[package]]
+name = "x11-clipboard"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0827f86aa910c4e73329a4f619deabe88ebb4b042370bf023c2d5d8b4eb54695"
+dependencies = [
+ "x11rb",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507"
+dependencies = [
+ "gethostname",
+ "nix",
+ "winapi",
+ "winapi-wsapoll",
+ "x11rb-protocol",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67"
+dependencies = [
+ "nix",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xcb"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e917a3f24142e9ff8be2414e36c649d47d6cc2ba81f16201cdef96e533e02de"
+dependencies = [
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "xi-unicode"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
+[[package]]
+name = "xxhash-rust"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "735a71d46c4d68d71d4b24d03fdc2b98e38cea81730595801db779c04fe80d70"
diff --git a/nixpkgs/pkgs/tools/security/ripasso/cursive.nix b/nixpkgs/pkgs/tools/security/ripasso/cursive.nix
new file mode 100644
index 000000000000..b3e8274b450c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ripasso/cursive.nix
@@ -0,0 +1,81 @@
+{ stdenv
+, lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, python3
+, openssl
+, libgpg-error
+, gpgme
+, xorg
+, nettle
+, clang
+, AppKit
+, Security
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  version = "0.6.4";
+  pname = "ripasso-cursive";
+
+  src = fetchFromGitHub {
+    owner = "cortex";
+    repo = "ripasso";
+    rev = "release-${version}";
+    hash = "sha256-9wBaFq2KVfLTd1j8ZPoUlmZJDW2UhvGBAaCGX+qg92s=";
+  };
+
+  patches = [
+    ./fix-tests.patch
+  ];
+
+  cargoPatches = [
+    ./fix-build.patch
+  ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "qml-0.0.9" = "sha256-ILqvUaH7nSu2JtEs8ox7KroOzYnU5ai44k1HE4Bz5gg=";
+    };
+  };
+
+  cargoBuildFlags = [ "-p ripasso-cursive" ];
+
+  nativeBuildInputs = [
+    pkg-config
+    gpgme
+    python3
+    installShellFiles
+    clang
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    openssl
+    libgpg-error
+    gpgme
+    xorg.libxcb
+    nettle
+  ] ++ lib.optionals stdenv.isDarwin [
+    AppKit
+    Security
+  ];
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  postInstall = ''
+    installManPage target/man-page/cursive/ripasso-cursive.1
+  '';
+
+  meta = with lib; {
+    description = "A simple password manager written in Rust";
+    homepage = "https://github.com/cortex/ripasso";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ sgo ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ripasso/fix-build.patch b/nixpkgs/pkgs/tools/security/ripasso/fix-build.patch
new file mode 100644
index 000000000000..eeaebd58dae6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ripasso/fix-build.patch
@@ -0,0 +1,40 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index 8464bf70..659e66c0 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -2702,7 +2702,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "ripasso"
+-version = "0.6.3"
++version = "0.6.4"
+ dependencies = [
+  "anyhow",
+  "base64 0.21.0",
+@@ -2730,7 +2730,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "ripasso-cursive"
+-version = "0.6.3"
++version = "0.6.4"
+ dependencies = [
+  "chrono",
+  "cli-clipboard",
+@@ -2753,7 +2753,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "ripasso-gtk"
+-version = "0.6.3"
++version = "0.6.4"
+ dependencies = [
+  "clipboard",
+  "gdk",
+@@ -2765,7 +2765,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "ripasso-qt"
+-version = "0.6.3"
++version = "0.6.4"
+ dependencies = [
+  "clipboard",
+  "qml",
diff --git a/nixpkgs/pkgs/tools/security/ripasso/fix-tests.patch b/nixpkgs/pkgs/tools/security/ripasso/fix-tests.patch
new file mode 100644
index 000000000000..dbb4b2dfd318
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ripasso/fix-tests.patch
@@ -0,0 +1,12 @@
+diff --git a/src/tests/test_helpers.rs b/src/tests/test_helpers.rs
+index 73e4175..d2ed70b 100644
+--- a/src/tests/test_helpers.rs
++++ b/src/tests/test_helpers.rs
+@@ -53,6 +53,7 @@ fn get_testres_path() -> PathBuf {
+     base_path.pop();
+     base_path.pop();
+     base_path.pop();
++    base_path.pop();
+     base_path.push("testres");
+ 
+     base_path
diff --git a/nixpkgs/pkgs/tools/security/rng-tools/default.nix b/nixpkgs/pkgs/tools/security/rng-tools/default.nix
new file mode 100644
index 000000000000..a5470f05613b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rng-tools/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, libtool
+, pkg-config
+, psmisc
+, argp-standalone
+, openssl
+, libcap
+, jitterentropy, withJitterEntropy ? true
+  # WARNING: DO NOT USE BEACON GENERATED VALUES AS SECRET CRYPTOGRAPHIC KEYS
+  # https://www.nist.gov/programs-projects/nist-randomness-beacon
+, curl, jansson, libxml2, withNistBeacon ? false
+, libp11, opensc, withPkcs11 ? true
+, rtl-sdr, withRtlsdr ? true
+, withQrypt ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rng-tools";
+  version = "6.16";
+
+  src = fetchFromGitHub {
+    owner = "nhorman";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-9pXQhG2nbu6bq4BnBgEOyyUBNkQTI5RhWmJIoLtFU+c=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook libtool pkg-config ];
+
+  configureFlags = [
+    (lib.enableFeature (withJitterEntropy) "jitterentropy")
+    (lib.withFeature   (withNistBeacon)    "nistbeacon")
+    (lib.withFeature   (withPkcs11)        "pkcs11")
+    (lib.withFeature   (withRtlsdr)        "rtlsdr")
+    (lib.withFeature   (withQrypt)         "qrypt")
+  ];
+
+  buildInputs = [ openssl libcap ]
+    ++ lib.optionals stdenv.hostPlatform.isMusl [ argp-standalone ]
+    ++ lib.optionals withJitterEntropy [ jitterentropy ]
+    ++ lib.optionals withNistBeacon    [ curl jansson libxml2 ]
+    ++ lib.optionals withPkcs11        [ libp11 libp11.passthru.openssl ]
+    ++ lib.optionals withRtlsdr        [ rtl-sdr ]
+    ++ lib.optionals withQrypt         [ curl jansson ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "AR:=$(AR)" # For cross-compilation
+  ] ++ lib.optionals withPkcs11 [
+    "PKCS11_ENGINE=${opensc}/lib/opensc-pkcs11.so" # Overrides configure script paths
+  ];
+
+  doCheck = true;
+  preCheck = ''
+    patchShebangs tests/*.sh
+    export RNGD_JITTER_TIMEOUT=10
+  '';
+  # After updating to jitterentropy 3.4.1 jitterentropy initialization seams
+  # to have increased. On some system rng-tools fail therefore to initialize the
+  # jitterentropy entropy source. You can increase the init timeout with a command-line
+  # option (-O jitter:timeout:SECONDS). The environment variable above only has effect
+  # for the test cases.
+  # Patching the timeout to a larger value was declined upstream,
+  # see (https://github.com/nhorman/rng-tools/pull/178).
+  nativeCheckInputs = [ psmisc ]; # rngtestjitter.sh needs killall
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    set -o pipefail
+    $out/bin/rngtest --version | grep $version
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "A random number generator daemon";
+    homepage = "https://github.com/nhorman/rng-tools";
+    changelog = "https://github.com/nhorman/rng-tools/releases/tag/v${version}";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ johnazoidberg c0bw3b ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rnp/default.nix b/nixpkgs/pkgs/tools/security/rnp/default.nix
new file mode 100644
index 000000000000..9a3796aeb42e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rnp/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, asciidoctor
+, botan2
+, bzip2
+, cmake
+, fetchFromGitHub
+, gnupg
+, gtest
+, json_c
+, pkg-config
+, python3
+, sexpp
+, zlib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "rnp";
+  version = "0.17.0";
+
+  src = fetchFromGitHub {
+    owner = "rnpgp";
+    repo = "rnp";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-4fB7Sl9+ATrJTRnhbNG5BoW3XLxR7IP167RK96+gxj0=";
+  };
+
+  buildInputs = [ zlib bzip2 json_c botan2 sexpp ];
+
+  patches = [
+    ./unbundle-sexpp.patch
+    ./sexp_sexpp_rename.patch
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
+    "-DBUILD_SHARED_LIBS=on"
+    "-DBUILD_TESTING=on"
+    "-DDOWNLOAD_GTEST=off"
+    "-DDOWNLOAD_RUBYRNP=off"
+  ];
+
+  nativeBuildInputs = [ asciidoctor cmake gnupg gtest pkg-config python3 ];
+
+  # NOTE: check-only inputs should ideally be moved to nativeCheckInputs, but it
+  # would fail during buildPhase.
+  # nativeCheckInputs = [ gtest python3 ];
+
+  outputs = [ "out" "lib" "dev" ];
+
+  preConfigure = ''
+    echo "v${finalAttrs.version}" > version.txt
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/rnpgp/rnp";
+    description = "High performance C++ OpenPGP library, fully compliant to RFC 4880";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ribose-jeffreylau ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/rnp/sexp_sexpp_rename.patch b/nixpkgs/pkgs/tools/security/rnp/sexp_sexpp_rename.patch
new file mode 100644
index 000000000000..a86d205139f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rnp/sexp_sexpp_rename.patch
@@ -0,0 +1,50 @@
+diff --git i/src/lib/CMakeLists.txt w/src/lib/CMakeLists.txt
+index 086ac57d..2ce59ca1 100755
+--- i/src/lib/CMakeLists.txt
++++ w/src/lib/CMakeLists.txt
+@@ -328,7 +328,7 @@ elseif (CRYPTO_BACKEND_OPENSSL)
+   target_link_libraries(librnp-obj PRIVATE OpenSSL::Crypto)
+ endif()
+
+-target_link_libraries(librnp-obj PRIVATE sexp)
++target_link_libraries(librnp-obj PRIVATE sexpp)
+
+ set_target_properties(librnp-obj PROPERTIES CXX_VISIBILITY_PRESET hidden)
+ if (TARGET BZip2::BZip2)
+@@ -384,7 +384,7 @@ foreach (prop LINK_LIBRARIES INTERFACE_LINK_LIBRARIES INCLUDE_DIRECTORIES INTERF
+   get_target_property(val librnp-obj ${prop})
+   if (BUILD_SHARED_LIBS)
+     set_property(TARGET librnp-static PROPERTY ${prop} ${val})
+-    list(REMOVE_ITEM val "$<LINK_ONLY:sexp>")
++    list(REMOVE_ITEM val "$<LINK_ONLY:sexpp>")
+     set_property(TARGET librnp PROPERTY ${prop} ${val})
+   else()
+     set_property(TARGET librnp PROPERTY ${prop} ${val})
+diff --git i/src/librekey/g23_sexp.hpp w/src/librekey/g23_sexp.hpp
+index b888680f..b062c52f 100644
+--- i/src/librekey/g23_sexp.hpp
++++ w/src/librekey/g23_sexp.hpp
+@@ -27,8 +27,8 @@
+ #ifndef RNP_G23_SEXP_HPP
+ #define RNP_G23_SEXP_HPP
+
+-#include "sexp/sexp.h"
+-#include "sexp/ext-key-format.h"
++#include "sexpp/sexp.h"
++#include "sexpp/ext-key-format.h"
+
+ #define SXP_MAX_DEPTH 30
+
+diff --git i/src/tests/CMakeLists.txt w/src/tests/CMakeLists.txt
+index 7d2a6b0c..88aeaf9f 100644
+--- i/src/tests/CMakeLists.txt
++++ w/src/tests/CMakeLists.txt
+@@ -176,7 +176,7 @@ target_link_libraries(rnp_tests
+   PRIVATE
+     librnp-static
+     JSON-C::JSON-C
+-    sexp
++    sexpp
+     ${GTestMain}
+ )
+ if (CRYPTO_BACKEND_LOWERCASE STREQUAL "openssl")
diff --git a/nixpkgs/pkgs/tools/security/rnp/unbundle-sexpp.patch b/nixpkgs/pkgs/tools/security/rnp/unbundle-sexpp.patch
new file mode 100644
index 000000000000..dcbf92948a28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rnp/unbundle-sexpp.patch
@@ -0,0 +1,38 @@
+diff --git i/CMakeLists.txt w/CMakeLists.txt
+index bb6d40cb..30171e7c 100644
+--- i/CMakeLists.txt
++++ w/CMakeLists.txt
+@@ -176,11 +176,6 @@ if (ENABLE_FUZZERS)
+ endif()
+ add_subdirectory(src/common)
+
+-set(WITH_SEXP_CLI OFF)
+-set(WITH_SEXP_TESTS OFF)
+-set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME development)
+-add_subdirectory(src/libsexp EXCLUDE_FROM_ALL)
+-
+ add_subdirectory(src/lib)
+ add_subdirectory(src/rnp)
+ add_subdirectory(src/rnpkeys)
+diff --git i/src/lib/CMakeLists.txt w/src/lib/CMakeLists.txt
+index 086ac57d..b219ef06 100755
+--- i/src/lib/CMakeLists.txt
++++ w/src/lib/CMakeLists.txt
+@@ -433,7 +433,7 @@ install(TARGETS librnp
+       COMPONENT development
+   )
+
+-  install(TARGETS librnp-static sexp
++  install(TARGETS librnp-static
+     EXPORT rnp-targets
+     ARCHIVE
+       DESTINATION  "${CMAKE_INSTALL_LIBDIR}"
+@@ -441,7 +441,7 @@ install(TARGETS librnp
+   )
+ else(BUILD_SHARED_LIBS)
+ # static libraries only
+-install(TARGETS librnp sexp
++install(TARGETS librnp
+     EXPORT rnp-targets
+     ARCHIVE
+       DESTINATION  "${CMAKE_INSTALL_LIBDIR}"
diff --git a/nixpkgs/pkgs/tools/security/ronin/Gemfile b/nixpkgs/pkgs/tools/security/ronin/Gemfile
new file mode 100644
index 000000000000..94dd203e9e08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ronin/Gemfile
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "net-ftp"
+gem "net-imap"
+gem "net-pop"
+gem "net-smtp"
+gem "ronin"
diff --git a/nixpkgs/pkgs/tools/security/ronin/Gemfile.lock b/nixpkgs/pkgs/tools/security/ronin/Gemfile.lock
new file mode 100644
index 000000000000..4157e5994130
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ronin/Gemfile.lock
@@ -0,0 +1,245 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activemodel (7.1.0)
+      activesupport (= 7.1.0)
+    activerecord (7.1.0)
+      activemodel (= 7.1.0)
+      activesupport (= 7.1.0)
+      timeout (>= 0.4.0)
+    activesupport (7.1.0)
+      base64
+      bigdecimal
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      connection_pool (>= 2.2.5)
+      drb
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      mutex_m
+      tzinfo (~> 2.0)
+    addressable (2.8.5)
+      public_suffix (>= 2.0.2, < 6.0)
+    async (2.6.4)
+      console (~> 1.10)
+      fiber-annotation
+      io-event (~> 1.1)
+      timers (~> 4.1)
+    async-io (1.36.0)
+      async
+    base64 (0.1.1)
+    bigdecimal (3.1.4)
+    chars (0.3.2)
+    combinatorics (0.4.4)
+    command_kit (0.4.0)
+    command_mapper (0.3.1)
+    concurrent-ruby (1.2.2)
+    connection_pool (2.4.1)
+    console (1.23.2)
+      fiber-annotation
+      fiber-local
+    date (3.3.3)
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
+    drb (2.1.1)
+      ruby2_keywords
+    fake_io (0.1.0)
+    fiber-annotation (0.2.0)
+    fiber-local (1.0.0)
+    hexdump (1.0.0)
+    http-cookie (1.0.5)
+      domain_name (~> 0.5)
+    i18n (1.14.1)
+      concurrent-ruby (~> 1.0)
+    io-console (0.6.0)
+    io-event (1.3.2)
+    irb (1.8.1)
+      rdoc
+      reline (>= 0.3.8)
+    mechanize (2.9.1)
+      addressable (~> 2.8)
+      domain_name (~> 0.5, >= 0.5.20190701)
+      http-cookie (~> 1.0, >= 1.0.3)
+      mime-types (~> 3.0)
+      net-http-digest_auth (~> 1.4, >= 1.4.1)
+      net-http-persistent (>= 2.5.2, < 5.0.dev)
+      nokogiri (~> 1.11, >= 1.11.2)
+      rubyntlm (~> 0.6, >= 0.6.3)
+      webrick (~> 1.7)
+      webrobots (~> 0.1.2)
+    mime-types (3.5.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2023.1003)
+    mini_portile2 (2.8.4)
+    minitest (5.20.0)
+    mustermann (3.0.0)
+      ruby2_keywords (~> 0.0.1)
+    mutex_m (0.1.2)
+    net-ftp (0.2.0)
+      net-protocol
+      time
+    net-http-digest_auth (1.4.1)
+    net-http-persistent (4.0.2)
+      connection_pool (~> 2.2)
+    net-imap (0.4.1)
+      date
+      net-protocol
+    net-pop (0.1.2)
+      net-protocol
+    net-protocol (0.2.1)
+      timeout
+    net-smtp (0.4.0)
+      net-protocol
+    nokogiri (1.15.4)
+      mini_portile2 (~> 2.8.2)
+      racc (~> 1.4)
+    nokogiri-diff (0.2.0)
+      nokogiri (~> 1.5)
+      tdiff (~> 0.3, >= 0.3.2)
+    nokogiri-ext (0.1.0)
+      nokogiri (~> 1.0)
+    open_namespace (0.4.1)
+    psych (5.1.0)
+      stringio
+    public_suffix (5.0.3)
+    racc (1.7.1)
+    rack (2.2.8)
+    rack-protection (3.1.0)
+      rack (~> 2.2, >= 2.2.4)
+    rack-user_agent (0.5.3)
+      rack (>= 1.5)
+      woothee (>= 1.0.0)
+    rdoc (6.5.0)
+      psych (>= 4.0.0)
+    reline (0.3.9)
+      io-console (~> 0.5)
+    ronin (2.0.5)
+      async-io (~> 1.0)
+      open_namespace (~> 0.4)
+      ronin-code-asm (~> 1.0)
+      ronin-code-sql (~> 2.0)
+      ronin-core (~> 0.1, >= 0.1.2)
+      ronin-db (~> 0.1)
+      ronin-exploits (~> 1.0, >= 1.0.1)
+      ronin-fuzzer (~> 0.1)
+      ronin-payloads (~> 0.1, >= 0.1.1)
+      ronin-repos (~> 0.1)
+      ronin-support (~> 1.0, >= 1.0.3)
+      ronin-vulns (~> 0.1, >= 0.1.2)
+      ronin-web (~> 1.0, >= 1.0.1)
+      rouge (~> 3.0)
+      wordlist (~> 1.0, >= 1.0.3)
+    ronin-code-asm (1.0.0)
+      ruby-yasm (~> 0.3)
+    ronin-code-sql (2.1.0)
+      ronin-support (~> 1.0)
+    ronin-core (0.1.2)
+      command_kit (~> 0.4)
+      irb (~> 1.0)
+      reline (~> 0.1)
+    ronin-db (0.1.2)
+      ronin-core (~> 0.1)
+      ronin-db-activerecord (~> 0.1)
+      ronin-support (~> 1.0)
+      sqlite3 (~> 1.0)
+    ronin-db-activerecord (0.1.2)
+      activerecord (~> 7.0)
+      uri-query_params (~> 0.6)
+    ronin-exploits (1.0.3)
+      ronin-code-sql (~> 2.0)
+      ronin-core (~> 0.1)
+      ronin-payloads (~> 0.1, >= 0.1.1)
+      ronin-post_ex (~> 0.1)
+      ronin-repos (~> 0.1)
+      ronin-support (~> 1.0, >= 1.0.1)
+      ronin-vulns (~> 0.1, >= 0.1.1)
+      uri-query_params (~> 0.6)
+    ronin-fuzzer (0.1.0)
+      combinatorics (~> 0.4)
+      ronin-core (~> 0.1)
+      ronin-support (~> 1.0)
+    ronin-payloads (0.1.4)
+      ronin-code-asm (~> 1.0)
+      ronin-core (~> 0.1)
+      ronin-post_ex (~> 0.1)
+      ronin-repos (~> 0.1)
+      ronin-support (~> 1.0)
+    ronin-post_ex (0.1.0)
+      fake_io (~> 0.1)
+      hexdump (~> 1.0)
+      ronin-core (~> 0.1)
+    ronin-repos (0.1.1)
+      ronin-core (~> 0.1)
+    ronin-support (1.0.3)
+      addressable (~> 2.0)
+      chars (~> 0.3, >= 0.3.2)
+      combinatorics (~> 0.4)
+      hexdump (~> 1.0)
+      uri-query_params (~> 0.8)
+    ronin-vulns (0.1.4)
+      ronin-core (~> 0.1)
+      ronin-support (~> 1.0, >= 1.0.1)
+    ronin-web (1.0.2)
+      mechanize (~> 2.0)
+      nokogiri (~> 1.4)
+      nokogiri-diff (~> 0.2)
+      nokogiri-ext (~> 0.1)
+      open_namespace (~> 0.4)
+      ronin-core (~> 0.1)
+      ronin-support (~> 1.0)
+      ronin-web-server (~> 0.1, >= 0.1.1)
+      ronin-web-spider (~> 0.1)
+      ronin-web-user_agents (~> 0.1)
+    ronin-web-server (0.1.1)
+      rack (~> 2.2)
+      rack-user_agent (~> 0.5)
+      ronin-support (~> 1.0)
+      sinatra (~> 3.0)
+      webrick (~> 1.0)
+    ronin-web-spider (0.1.0)
+      ronin-support (~> 1.0)
+      spidr (~> 0.7)
+    ronin-web-user_agents (0.1.0)
+    rouge (3.30.0)
+    ruby-yasm (0.3.0)
+      command_mapper (~> 0.1)
+    ruby2_keywords (0.0.5)
+    rubyntlm (0.6.3)
+    sinatra (3.1.0)
+      mustermann (~> 3.0)
+      rack (~> 2.2, >= 2.2.4)
+      rack-protection (= 3.1.0)
+      tilt (~> 2.0)
+    spidr (0.7.0)
+      nokogiri (~> 1.3)
+    sqlite3 (1.6.6)
+      mini_portile2 (~> 2.8.0)
+    stringio (3.0.8)
+    tdiff (0.3.4)
+    tilt (2.3.0)
+    time (0.2.2)
+      date
+    timeout (0.4.0)
+    timers (4.3.5)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.8.2)
+    uri-query_params (0.8.1)
+    webrick (1.8.1)
+    webrobots (0.1.2)
+    woothee (1.13.0)
+    wordlist (1.1.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  net-ftp
+  net-imap
+  net-pop
+  net-smtp
+  ronin
+
+BUNDLED WITH
+   2.3.26
diff --git a/nixpkgs/pkgs/tools/security/ronin/default.nix b/nixpkgs/pkgs/tools/security/ronin/default.nix
new file mode 100644
index 000000000000..1bf98ae9eafc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ronin/default.nix
@@ -0,0 +1,31 @@
+{ lib, bundlerEnv, bundlerUpdateScript, defaultGemConfig, yasm }:
+
+bundlerEnv {
+  name = "ronin";
+  gemdir = ./.;
+
+  gemConfig = defaultGemConfig // {
+    ronin-code-asm = attrs: {
+      dontBuild = false;
+      postPatch = ''
+        substituteInPlace lib/ronin/code/asm/program.rb \
+          --replace "YASM::Command.run(" "YASM::Command.run(
+          command_path: '${yasm}/bin/yasm',"
+      '';
+    };
+  };
+
+  postBuild = ''
+    shopt -s extglob
+    rm $out/bin/!(ronin*)
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "ronin";
+
+  meta = with lib; {
+    description = "A free and Open Source Ruby toolkit for security research and development";
+    homepage    = "https://ronin-rb.dev";
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ Ch1keen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ronin/gemset.nix b/nixpkgs/pkgs/tools/security/ronin/gemset.nix
new file mode 100644
index 000000000000..fdb3c9225d0e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ronin/gemset.nix
@@ -0,0 +1,964 @@
+{
+  activemodel = {
+    dependencies = ["activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01jrk2i6vp8jcll65d03mqmp1ibxa0ip7bdg5157fkm5syblzsqw";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  activerecord = {
+    dependencies = ["activemodel" "activesupport" "timeout"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lpcbgqbrb3yfk3i66mnxa5i36r0ig9dwzksjbm15i30rndr27p5";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  activesupport = {
+    dependencies = ["base64" "bigdecimal" "concurrent-ruby" "connection_pool" "drb" "i18n" "minitest" "mutex_m" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xpwx7hw7mgmjk3w3g8bkz5jfapixhgn3ihly0xkpyvgp1shp8h1";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  async = {
+    dependencies = ["console" "fiber-annotation" "io-event" "timers"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02ng89h9s4wwpncyqbkm9n26swp4q45dkvqsb2fpmkan32zn48ji";
+      type = "gem";
+    };
+    version = "2.6.4";
+  };
+  async-io = {
+    dependencies = ["async"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11lgd7276rgy651zwbzvbsz8q0k09ljgngyhsppy7kvkjzj25n58";
+      type = "gem";
+    };
+    version = "1.36.0";
+  };
+  base64 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cydk9p2cv25qysm0sn2pb97fcpz1isa7n3c8xm1gd99li8x6x8c";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  bigdecimal = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07y615s8yldk3k13lmkhpk1k190lcqvmxmnjwgh4bzjan9xrc36y";
+      type = "gem";
+    };
+    version = "3.1.4";
+  };
+  chars = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18lgsszrrh3xnaym2jdz7g5gm7c8hv5faj7zyrm1ws9l107jrhr5";
+      type = "gem";
+    };
+    version = "0.3.2";
+  };
+  combinatorics = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sf0pj29xzriwsqv607iwzs76piac6kygqxpg0i59qwx029100fw";
+      type = "gem";
+    };
+    version = "0.4.4";
+  };
+  command_kit = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "179mlrnzj56ghviyvvwk0kdfyvr050yk4jj4nwb78izlbxw1wl1m";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  command_mapper = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v363y9g7zxfx2y7p50hdvxj6c0a8mfh30wac2rm3ibldspcjmn1";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  connection_pool = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x32mcpm2cl5492kd6lbjbaf17qsssmpx9kdyr7z1wcif2cwyh0g";
+      type = "gem";
+    };
+    version = "2.4.1";
+  };
+  console = {
+    dependencies = ["fiber-annotation" "fiber-local"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "150wdj94qg8c95b9v1g7ak5a9g159wxfanclpihrz9p9qbv1ga0w";
+      type = "gem";
+    };
+    version = "1.23.2";
+  };
+  date = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03skfikihpx37rc27vr3hwrb057gxnmdzxhmzd4bf4jpkl0r55w1";
+      type = "gem";
+    };
+    version = "3.3.3";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  drb = {
+    dependencies = ["ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h9c2qiam82y3caapa2x157j1lkk9954hrjg3p22hxcsk8fli3vb";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  fake_io = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10559cnd2cqllql8ibd0zx0rvq8xk0qll5sqa4khb5963596ldmn";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  fiber-annotation = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vcmynyvhny8n4p799rrhcx0m033hivy0s1gn30ix8rs7qsvgvs";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  fiber-local = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrxxb09fc7aicb9zb0pmn5akggjy21dmxkdl3w949y4q05rldr9";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  hexdump = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1787w456yzmy4c13ray228n89a5wz6p6k3ibssjvy955qlr44b7g";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  io-console = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dikardh14c72gd9ypwh8dim41wvqmzfzf35mincaj5yals9m7ff";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  io-event = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m2x5m2m8fa83p5890byf46qb4s1073vn3z6gan9jmbq2a5w0iy8";
+      type = "gem";
+    };
+    version = "1.3.2";
+  };
+  irb = {
+    dependencies = ["rdoc" "reline"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17p6arsklbzh2hvwwr8i4cfrpa7vhk8q88fhickhwmn7m80lxdw7";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  mechanize = {
+    dependencies = ["addressable" "domain_name" "http-cookie" "mime-types" "net-http-digest_auth" "net-http-persistent" "nokogiri" "rubyntlm" "webrick" "webrobots"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08lcl3qwgi8r3q0hm5ysmj7j5xqb289kqrd15w09anirj36jc80z";
+      type = "gem";
+    };
+    version = "2.9.1";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0q8d881k1b3rbsfcdi3fx0b5vpdr5wcrhn88r2d9j7zjdkxp5mw5";
+      type = "gem";
+    };
+    version = "3.5.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yjv0apysnrhbc70ralinfpcqn9382lxr643swp7a5sdwpa9cyqg";
+      type = "gem";
+    };
+    version = "3.2023.1003";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02mj8mpd6ck5gpcnsimx5brzggw5h5mmmpq2djdypfq16wcw82qq";
+      type = "gem";
+    };
+    version = "2.8.4";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bkmfi9mb49m0fkdhl2g38i3xxa02d411gg0m8x0gvbwfmmg5ym3";
+      type = "gem";
+    };
+    version = "5.20.0";
+  };
+  mustermann = {
+    dependencies = ["ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwbq20s2gdh8dljjsgj5s6wqqfmnbclhvv2c2608brv7jm6jdbd";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  mutex_m = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pkxnp7p44kvs460bbbgjarr7xy1j8kjjmhwkg1kypj9wgmwb6qa";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  net-ftp = {
+    dependencies = ["net-protocol" "time"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bqy9xg5225x102873j1qqq1bvnwfbi8lnf4357mpq6wimnw9pf9";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  net-http-digest_auth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nq859b0gh2vjhvl1qh1zrk09pc7p54r9i6nnn6sb06iv07db2jb";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  net-http-persistent = {
+    dependencies = ["connection_pool"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i1as2lgnw7b4jid0gw5glv5hnxz36nmfsbr9rmxbcap72ijgy03";
+      type = "gem";
+    };
+    version = "4.0.2";
+  };
+  net-imap = {
+    dependencies = ["date" "net-protocol"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d0r31b79appz95dd63wmasly1qjz3hn58ffxw6ix4mqk49jcbq2";
+      type = "gem";
+    };
+    version = "0.4.1";
+  };
+  net-pop = {
+    dependencies = ["net-protocol"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wyz41jd4zpjn0v1xsf9j778qx1vfrl24yc20cpmph8k42c4x2w4";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  net-protocol = {
+    dependencies = ["timeout"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dxckrlw4q1lcn3qg4mimmjazmg9bma5gllv72f8js3p36fb3b91";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  net-smtp = {
+    dependencies = ["net-protocol"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rx3758w0bmbr21s2nsc6llflsrnp50fwdnly3ixra4v53gbhzid";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k9w2z0953mnjrsji74cshqqp08q7m1r6zhadw1w0g34xzjh3a74";
+      type = "gem";
+    };
+    version = "1.15.4";
+  };
+  nokogiri-diff = {
+    dependencies = ["nokogiri" "tdiff"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0njr1s42war0bj1axb2psjvk49l74a8wzr799wckqqdcb6n51lc1";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  nokogiri-ext = {
+    dependencies = ["nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y1yflr1989vfy46lxhvs5njlskwiv08akkjybnh8n0cdqms4lhs";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  open_namespace = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11j392gl62ibhkidjrjfnb3sygmqmvsc7zd5bhmnigd65x5gs310";
+      type = "gem";
+    };
+    version = "0.4.1";
+  };
+  psych = {
+    dependencies = ["stringio"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1msambb54r3d1sg6smyj4k2pj9h9lz8jq4jamip7ivcyv32a85vz";
+      type = "gem";
+    };
+    version = "5.1.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n9j7mczl15r3kwqrah09cxj8hxdfawiqxa60kga2bmxl9flfz9k";
+      type = "gem";
+    };
+    version = "5.0.3";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11v3l46mwnlzlc371wr3x6yylpgafgwdf0q7hc7c1lzx6r414r5g";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15rdwbyk71c9nxvd527bvb8jxkcys8r3dj3vqra5b3sa63qs30vv";
+      type = "gem";
+    };
+    version = "2.2.8";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xsz78hccgza144n37bfisdkzpr2c8m0xl6rnlzgxdbsm1zrkg7r";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  rack-user_agent = {
+    dependencies = ["rack" "woothee"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l1gw8xx1g04kdxc89hsy4aawdz8r2an4b78yzk9cc3y8qmw16v7";
+      type = "gem";
+    };
+    version = "0.5.3";
+  };
+  rdoc = {
+    dependencies = ["psych"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05r2cxscapr9saqjw8dlp89as7jvc2mlz1h5kssrmkbz105qmfcm";
+      type = "gem";
+    };
+    version = "6.5.0";
+  };
+  reline = {
+    dependencies = ["io-console"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0187pj9k7d8kdvzjk6r6mf7z7wy18saxxhn7x7pqc840w6h4s0ja";
+      type = "gem";
+    };
+    version = "0.3.9";
+  };
+  ronin = {
+    dependencies = ["async-io" "open_namespace" "ronin-code-asm" "ronin-code-sql" "ronin-core" "ronin-db" "ronin-exploits" "ronin-fuzzer" "ronin-payloads" "ronin-repos" "ronin-support" "ronin-vulns" "ronin-web" "rouge" "wordlist"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v1v1xb2brgajhh1w38qs4lhnmgygymh1q0q63xpwq32w7a5k7s3";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  ronin-code-asm = {
+    dependencies = ["ruby-yasm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0faic3m95nhr7wrh7visdj45qaah7dvnl0afl4a5gmy6ybij16zl";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  ronin-code-sql = {
+    dependencies = ["ronin-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z6ynbrbzlkab1fbhccghr2xm6dak9xb2djqjlc6nai3fdhid1v8";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  ronin-core = {
+    dependencies = ["command_kit" "irb" "reline"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s2hndkdh4pw6xppq4jqn30fk2b26gk08yym5gavlzkcg5k17vvd";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  ronin-db = {
+    dependencies = ["ronin-core" "ronin-db-activerecord" "ronin-support" "sqlite3"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fiqdk1rnqk86icx27z531yc1qjs2n41nw9p361980wg0j8b4hsj";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  ronin-db-activerecord = {
+    dependencies = ["activerecord" "uri-query_params"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0igw9syk4psdmijji0cx1dhrv76r1abji8fzdndnrn5h819b2fm3";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  ronin-exploits = {
+    dependencies = ["ronin-code-sql" "ronin-core" "ronin-payloads" "ronin-post_ex" "ronin-repos" "ronin-support" "ronin-vulns" "uri-query_params"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g2ilmmn6vccjn1i72wyakvjlh0b1qrgnw2nshl9f50j7yj93xpn";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  ronin-fuzzer = {
+    dependencies = ["combinatorics" "ronin-core" "ronin-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19sc4kk6lwpq6fd23dmji0vf4mjkf1z5pjq4wp0xs2cby2fzld5p";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  ronin-payloads = {
+    dependencies = ["ronin-code-asm" "ronin-core" "ronin-post_ex" "ronin-repos" "ronin-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gsgbw90xmwwnpc8i873wwgia56hcjkhlyjpxl7s4yvd7ml7pj0f";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  ronin-post_ex = {
+    dependencies = ["fake_io" "hexdump" "ronin-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dcpnlz8niqjjm5d9z8khg53acl7xn5dgliv70svsncc3h0hx0w7";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  ronin-repos = {
+    dependencies = ["ronin-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c453qw7xr4vsq2y5dlnihfmzy95q3xjbfl5cm1y0xwzdm7ibbzx";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  ronin-support = {
+    dependencies = ["addressable" "chars" "combinatorics" "hexdump" "uri-query_params"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k2vs6mkcyx0h7k3rjs2bwqimhkfa2m50ll8rgm7zygxz3f6gny3";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  ronin-vulns = {
+    dependencies = ["ronin-core" "ronin-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p00xrj71436g301b0wnq23ps89x4g9mmzvkghw9sqyfazgc829f";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  ronin-web = {
+    dependencies = ["mechanize" "nokogiri" "nokogiri-diff" "nokogiri-ext" "open_namespace" "ronin-core" "ronin-support" "ronin-web-server" "ronin-web-spider" "ronin-web-user_agents"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06rh7hrkj4yl6pn1m3isfim2sk5vb3ap3rba91bw7drcqsra7fmw";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  ronin-web-server = {
+    dependencies = ["rack" "rack-user_agent" "ronin-support" "sinatra" "webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14p1z2s20dkipb6rp2wyjc91dz6bjn5v8nv68m54my7p1vac05zk";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  ronin-web-spider = {
+    dependencies = ["ronin-support" "spidr"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0592llhzm8miy0lj4xsb4h0ppy18wmwqi54rjzzsm7h3d2py7iv9";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  ronin-web-user_agents = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1shca7bsc09hag7ax3js9xszw71mnf1ywrf0l0pk40hfqmnnaxcl";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dnfkrk8xx2m8r3r9m2p5xcq57viznyc09k7r3i4jbm758i57lx3";
+      type = "gem";
+    };
+    version = "3.30.0";
+  };
+  ruby-yasm = {
+    dependencies = ["command_mapper"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vf0kdaaysx9kr7v8rl0hl0j73zkfkg7zqvg0b41sgfg3zfib0ap";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b8hczk8hysv53ncsqzx4q6kma5gy5lqc7s5yx8h64x3vdb18cjv";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  sinatra = {
+    dependencies = ["mustermann" "rack" "rack-protection" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00541cnypsh1mnilfxxqlz6va9afrixf9m1asn4wzjp5m59777p8";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  spidr = {
+    dependencies = ["nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15gjqry61z93f4p84x5b1bi6f65xd4djax0563ljngmsckyg7xg5";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  sqlite3 = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15415lmz69jbzl6nch4q5l2jxv054676nk6y0vgy0g3iklmjrxvc";
+      type = "gem";
+    };
+    version = "1.6.6";
+  };
+  stringio = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ix96dxbjqlpymdigb4diwrifr0bq7qhsrng95fkkp18av326nqk";
+      type = "gem";
+    };
+    version = "3.0.8";
+  };
+  tdiff = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rjvqyyxrybzhaqmgh4zjcdrvmqyqcqqbq4vda39idhrqcd2gy67";
+      type = "gem";
+    };
+    version = "0.3.4";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p3l7v619hwfi781l3r7ypyv1l8hivp09r18kmkn6g11c4yr1pc2";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  time = {
+    dependencies = ["date"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13pzdsgf3v06mymzipcpa7p80shyw328ybn775nzpnhc6n8y9g30";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  timeout = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d9cvm0f4zdpwa795v3zv4973y5zk59j7s1x3yn90jjrhcz1yvfd";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  timers = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pjzipnmzfywvgsr3gxwj6nmg47lz4700g0q71jgcy1z6rb7dn7p";
+      type = "gem";
+    };
+    version = "4.3.5";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch";
+      type = "gem";
+    };
+    version = "0.0.8.2";
+  };
+  uri-query_params = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08i91q1q2fvjq7n21p4f4pryi8b9msknrgwz132spvhm4l55n6l6";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qm7s0gr2pmfcl7dxrmq38asaza4w0i2n9my4yzs499j731wh8r";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  webrobots = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19ndcbba8s8m62hhxxfwn83nax34rg2k5x066awa23wknhnamg7b";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  woothee = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xg31qi09swgsf46b9ba38z2jav2516bg3kg7xf1wfbzw8mpd3fc";
+      type = "gem";
+    };
+    version = "1.13.0";
+  };
+  wordlist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06d4nj2nd172sn5yjw9qmpz7zqnymadbsxph741yx2h9va8q0qgd";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/routersploit/default.nix b/nixpkgs/pkgs/tools/security/routersploit/default.nix
new file mode 100644
index 000000000000..3f656e8e4578
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/routersploit/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "routersploit";
+  version = "unstable-2021-02-06";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "threat9";
+    repo = pname;
+    rev = "3fd394637f5566c4cf6369eecae08c4d27f93cda";
+    hash = "sha256-IET0vL0VVP9ZNn75hKdTCiEmOZRHHYICykhzW2g3LEg=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    future
+    paramiko
+    pycryptodome
+    pysnmp
+    requests
+    setuptools
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytest-xdist
+    pytestCheckHook
+    threat9-test-bed
+  ];
+
+  postInstall = ''
+    mv $out/bin/rsf.py $out/bin/rsf
+  '';
+
+  pythonImportsCheck = [
+    "routersploit"
+  ];
+
+  pytestFlagsArray = [
+    "-n"
+    "$NIX_BUILD_CORES"
+    # Run the same tests as upstream does in the first round
+    "tests/core/"
+    "tests/test_exploit_scenarios.py"
+    "tests/test_module_info.py"
+  ];
+
+  meta = with lib; {
+    description = "Exploitation Framework for Embedded Devices";
+    homepage = "https://github.com/threat9/routersploit";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "rsf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rsign2/default.nix b/nixpkgs/pkgs/tools/security/rsign2/default.nix
new file mode 100644
index 000000000000..86f2d6d84338
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rsign2/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rsign2";
+  version = "0.6.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-bJeM1HTzmC8QZ488PpqQ0qqdFg1/rjPWuTtqo1GXyHM=";
+  };
+
+  cargoHash = "sha256-xqNFJFNV9mIVxzyQvhv5QwHVcXLuH76VYFAsgp5hW+w=";
+
+  meta = with lib; {
+    description = "A command-line tool to sign files and verify signatures";
+    homepage = "https://github.com/jedisct1/rsign2";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rsign";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rucredstash/default.nix b/nixpkgs/pkgs/tools/security/rucredstash/default.nix
new file mode 100644
index 000000000000..972695ad565e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rucredstash/default.nix
@@ -0,0 +1,29 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rucredstash";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner = "psibi";
+    repo = "rucredstash";
+    rev = "v${version}";
+    hash = "sha256-trupBiinULzD8TAy3eh1MYXhQilO08xu2a4yN7wwhwk=";
+  };
+
+  cargoHash = "sha256-TYobVjjzrK3gprZcYyY98EvdASkq4urB+WiLlbJbwmk=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # Disable tests since it requires network access and relies on the
+  # presence of certain AWS infrastructure
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Utility for managing credentials securely in AWS cloud";
+    homepage = "https://github.com/psibi/rucredstash";
+    license = licenses.mit;
+    maintainers = with maintainers; [ psibi ];
+    mainProgram = "rucredstash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ruler/default.nix b/nixpkgs/pkgs/tools/security/ruler/default.nix
new file mode 100644
index 000000000000..6389c0eac041
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ruler/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ruler";
+  version = "2.4.1";
+
+  src = fetchFromGitHub {
+    owner = "sensepost";
+    repo = pname;
+    rev = version;
+    hash = "sha256-cEYpK1LB9b65xr6MCMax1vUtSWefjJdXNs4sPgx65d0=";
+  };
+
+  vendorHash = "sha256-ITd3cvZmRBWK3922dDRvNHNH8KzHoVfIQI6S318ibxA=";
+
+  meta = with lib; {
+    description = "Tool to abuse Exchange services";
+    homepage = "https://github.com/sensepost/ruler";
+    license = with licenses; [ cc-by-nc-40 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rustscan/default.nix b/nixpkgs/pkgs/tools/security/rustscan/default.nix
new file mode 100644
index 000000000000..099e685fec03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rustscan/default.nix
@@ -0,0 +1,36 @@
+{ lib, rustPlatform, fetchCrate, nmap, stdenv, Security, perl, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustscan";
+  version = "2.1.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-yGVhbI1LivTIQEgqOK59T1+8SiTJBPIdftiXkwE4lZM=";
+  };
+
+  cargoSha256 = "sha256-UR3ktV80QU0N3f7qmqdhYpc5uwoPq4UvN40zEuMbp+Q=";
+
+  postPatch = ''
+    substituteInPlace src/scripts/mod.rs \
+      --replace 'call_format = "nmap' 'call_format = "${nmap}/bin/nmap'
+    patchShebangs fixtures/.rustscan_scripts/*
+  '';
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  nativeCheckInputs = [ perl python3 ];
+
+  # these tests require network access
+  checkFlags = [
+    "--skip=parse_correct_host_addresses"
+    "--skip=parse_hosts_file_and_incorrect_hosts"
+  ];
+
+  meta = with lib; {
+    description = "Faster Nmap Scanning with Rust";
+    homepage = "https://github.com/RustScan/RustScan";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/s5/default.nix b/nixpkgs/pkgs/tools/security/s5/default.nix
new file mode 100644
index 000000000000..7d63c4cb8a67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/s5/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "s5";
+  version = "0.1.12";
+
+  src = fetchFromGitHub {
+    owner = "mvisonneau";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-lTbTD5t80+R9hQeytNE2/Cs8dofdiYEP3zkc084mdAA=";
+  };
+
+  vendorHash = "sha256-TrCIUeY0B+BsWNaUkDTEgrEaWfJKnID2mafj3ink+i8=";
+
+  subPackages = [ "cmd/${pname}" ];
+
+  ldflags = [
+    "-X main.version=v${version}"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "cipher/decipher text within a file";
+    homepage = "https://github.com/mvisonneau/s5";
+    license = licenses.asl20;
+    platforms = platforms.unix ++ platforms.darwin;
+    maintainers = with maintainers; [ mvisonneau ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/safe/default.nix b/nixpkgs/pkgs/tools/security/safe/default.nix
new file mode 100644
index 000000000000..2024cd8ff27b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/safe/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "safe";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "starkandwayne";
+    repo = "safe";
+    rev = "v${version}";
+    sha256 = "sha256-sg0RyZ5HpYu7M11bNy17Sjxm7C3pkQX3I17edbALuvU=";
+  };
+
+  vendorHash = "sha256-w8gHCqOfmZg4JZgg1nZBtTJ553Rbp0a0JsoQVDFjehM=";
+
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-X main.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "A Vault CLI";
+    homepage = "https://github.com/starkandwayne/safe";
+    license = licenses.mit;
+    maintainers = with maintainers; [ eonpatapon ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/saml2aws/default.nix b/nixpkgs/pkgs/tools/security/saml2aws/default.nix
new file mode 100644
index 000000000000..a4246f3c4df4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/saml2aws/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, AppKit }:
+
+buildGoModule rec {
+  pname = "saml2aws";
+  version = "2.36.13";
+
+  src = fetchFromGitHub {
+    owner = "Versent";
+    repo = "saml2aws";
+    rev = "v${version}";
+    sha256 = "sha256-cLH1GcMgTPnPJVpHOQkW71hf0MKusL8NRc1YQsNSW2I=";
+  };
+
+  vendorHash = "sha256-E3WYExtV4VsrBZ0uEQZ36CUCK+qf8LTPlNwcdO0eEzA=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ AppKit ];
+
+  subPackages = [ "." "cmd/saml2aws" ];
+
+  ldflags = [
+    "-X main.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "CLI tool which enables you to login and retrieve AWS temporary credentials using a SAML IDP";
+    homepage    = "https://github.com/Versent/saml2aws";
+    license     = licenses.mit;
+    maintainers = [ lib.maintainers.pmyjavec ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sammler/default.nix b/nixpkgs/pkgs/tools/security/sammler/default.nix
new file mode 100644
index 000000000000..edc04d86371e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sammler/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "sammler";
+  version = "20210523-${lib.strings.substring 0 7 rev}";
+  rev = "259b9fc6155f40758e5fa480683467c35df746e7";
+
+  src = fetchFromGitHub {
+    owner = "redcode-labs";
+    repo = "Sammler";
+    inherit rev;
+    sha256 = "1gsv83sbqc9prkigbjvkhh547w12l3ynbajpnbqyf8sz4bd1nj5c";
+  };
+
+  vendorHash = "sha256-0ZBPLONUZyazZ22oLO097hdX5xuHx2G6rZCAsCwqq4s=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Tool to extract useful data from documents";
+    homepage = "https://github.com/redcode-labs/Sammler";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ] ++ teams.redcodelabs.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sbctl/default.nix b/nixpkgs/pkgs/tools/security/sbctl/default.nix
new file mode 100644
index 000000000000..a5fe6cf6548c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sbctl/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, asciidoc
+, databasePath ? "/etc/secureboot"
+}:
+
+buildGoModule rec {
+  pname = "sbctl";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner = "Foxboron";
+    repo = pname;
+    rev = version;
+    hash = "sha256-vxPYWoBU4k2fKWXGaMzIkUdj+EmPWTtCvMwAVmsgKaE=";
+  };
+
+  vendorHash = "sha256-kVXzHTONPCE1UeAnUiULjubJeZFD0DAxIk+w8/Dqs6c=";
+
+  ldflags = [ "-s" "-w" "-X github.com/foxboron/sbctl.DatabasePath=${databasePath}" ];
+
+  nativeBuildInputs = [ installShellFiles asciidoc ];
+
+  postBuild = ''
+    make docs/sbctl.8
+  '';
+
+  postInstall = ''
+    installManPage docs/sbctl.8
+
+    installShellCompletion --cmd sbctl \
+    --bash <($out/bin/sbctl completion bash) \
+    --fish <($out/bin/sbctl completion fish) \
+    --zsh <($out/bin/sbctl completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Secure Boot key manager";
+    homepage = "https://github.com/Foxboron/sbctl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ raitobezarius ];
+    # go-uefi do not support darwin at the moment:
+    # see upstream on https://github.com/Foxboron/go-uefi/issues/13
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sbomnix/default.nix b/nixpkgs/pkgs/tools/security/sbomnix/default.nix
new file mode 100644
index 000000000000..2449573c080a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sbomnix/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, fetchFromGitHub
+, coreutils
+, curl
+, gnugrep
+, gnused
+, gzip
+, nix
+, python
+  # python libs
+, colorlog
+, graphviz
+, numpy
+, packageurl-python
+, pandas
+, requests
+, reuse
+, tabulate
+}:
+
+python.pkgs.buildPythonApplication rec {
+  pname = "sbomnix";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "tiiuae";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-RxDFxVGivVBw2uhtzf231Q2HHTBFKSqGrknr2Es/ygM=";
+  };
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ coreutils curl gnugrep gnused gzip graphviz nix ]}"
+  ];
+
+  propagatedBuildInputs = [
+    colorlog
+    graphviz
+    numpy
+    packageurl-python
+    pandas
+    requests
+    reuse
+    tabulate
+  ];
+
+  pythonImportsCheck = [ "sbomnix" ];
+
+  meta = with lib; {
+    description = "Generate SBOMs for nix targets";
+    homepage = "https://github.com/tiiuae/sbomnix";
+    license = with licenses; [ asl20 bsd3 cc-by-30 ];
+    maintainers = with maintainers; [ henrirosten jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sbsigntool/autoconf.patch b/nixpkgs/pkgs/tools/security/sbsigntool/autoconf.patch
new file mode 100644
index 000000000000..0f41b4327e6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sbsigntool/autoconf.patch
@@ -0,0 +1,31 @@
+diff --git a/configure.ac b/configure.ac
+index 4ffb68f..d8a8265 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -71,15 +71,16 @@ AM_CONDITIONAL(TEST_BINARY_FORMAT, [ test "$EFI_ARCH" = "arm" -o "$EFI_ARCH" = "
+ # no consistent view of where gnu-efi should dump the efi stuff, so find it
+ ##
+ for path in /lib /lib64 /usr/lib /usr/lib64 /usr/lib32 /lib/efi /lib64/efi /usr/lib/efi /usr/lib64/efi /usr/lib/gnuefi /usr/lib64/gnuefi ; do
+-    if test -e $path/crt0-efi-$EFI_ARCH.o; then
+-       CRTPATH=$path
++    if test -e @@NIX_GNUEFI@@/$path/crt0-efi-$EFI_ARCH.o; then
++       CRTPATH=@@NIX_GNUEFI@@/$path
++       break
+     fi
+ done
+ if test -z "$CRTPATH"; then
+    AC_MSG_ERROR([cannot find the gnu-efi crt path])
+ fi
+ 
+-EFI_CPPFLAGS="-I/usr/include/efi -I/usr/include/efi/$EFI_ARCH \
++EFI_CPPFLAGS="-I@@NIX_GNUEFI@@/include/efi -I@@NIX_GNUEFI@@/include/efi/$EFI_ARCH \
+  -DEFI_FUNCTION_WRAPPER"
+ CPPFLAGS_save="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $EFI_CPPFLAGS"
+@@ -90,5 +91,5 @@ AC_SUBST(EFI_ARCH, $EFI_ARCH)
+ AC_SUBST(CRTPATH, $CRTPATH)
+ 
+ AC_CONFIG_FILES([Makefile src/Makefile lib/ccan/Makefile]
+-		[docs/Makefile tests/Makefile])
++		[docs/Makefile])
+ AC_OUTPUT
diff --git a/nixpkgs/pkgs/tools/security/sbsigntool/default.nix b/nixpkgs/pkgs/tools/security/sbsigntool/default.nix
new file mode 100644
index 000000000000..4422dd16b474
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sbsigntool/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv
+, fetchgit, autoconf, automake, pkg-config, help2man
+, openssl, libuuid, gnu-efi, libbfd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sbsigntool";
+  version = "0.9.5";
+
+  src = fetchgit {
+    url = "https://git.kernel.org/pub/scm/linux/kernel/git/jejb/sbsigntools.git";
+    rev = "v${version}";
+    hash = "sha256-5DInWgl1gThjjfGOsts1H1s1GbMCkd0gjbmG3gA3Fhg=";
+  };
+
+  patches = [ ./autoconf.patch ];
+
+  prePatch = "patchShebangs .";
+
+  nativeBuildInputs = [ autoconf automake pkg-config help2man ];
+  buildInputs = [ openssl libuuid libbfd gnu-efi ];
+
+  configurePhase = ''
+    substituteInPlace configure.ac --replace "@@NIX_GNUEFI@@" "${gnu-efi}"
+
+    lib/ccan.git/tools/create-ccan-tree --build-type=automake lib/ccan "talloc read_write_all build_assert array_size endian"
+    touch AUTHORS
+    touch ChangeLog
+
+    echo "SUBDIRS = lib/ccan src docs" >> Makefile.am
+
+    aclocal
+    autoheader
+    autoconf
+    automake --add-missing -Wno-portability
+
+    ./configure --prefix=$out
+  '';
+
+  meta = with lib; {
+    description = "Tools for maintaining UEFI signature databases";
+    homepage    = "http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases";
+    maintainers = with maintainers; [ hmenke raitobezarius ];
+    platforms   = [ "x86_64-linux" "aarch64-linux" ]; # Broken on i686
+    license     = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/schleuder/Gemfile b/nixpkgs/pkgs/tools/security/schleuder/Gemfile
new file mode 100644
index 000000000000..687c293bac91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/schleuder/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org' do
+  gem 'schleuder'
+end
diff --git a/nixpkgs/pkgs/tools/security/schleuder/Gemfile.lock b/nixpkgs/pkgs/tools/security/schleuder/Gemfile.lock
new file mode 100644
index 000000000000..7f15bb7bd717
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/schleuder/Gemfile.lock
@@ -0,0 +1,86 @@
+GEM
+  specs:
+
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activemodel (6.1.6)
+      activesupport (= 6.1.6)
+    activerecord (6.1.6)
+      activemodel (= 6.1.6)
+      activesupport (= 6.1.6)
+    activesupport (6.1.6)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+      zeitwerk (~> 2.3)
+    bcrypt (3.1.18)
+    charlock_holmes (0.7.7)
+    concurrent-ruby (1.1.10)
+    daemons (1.4.1)
+    eventmachine (1.2.7)
+    gpgme (2.0.20)
+      mini_portile2 (~> 2.3)
+    i18n (1.10.0)
+      concurrent-ruby (~> 1.0)
+    mail (2.7.1)
+      mini_mime (>= 0.1.1)
+    mail-gpg (0.4.4)
+      gpgme (~> 2.0, >= 2.0.2)
+      mail (~> 2.5, >= 2.5.3)
+    mini_mime (1.1.2)
+    mini_portile2 (2.8.0)
+    minitest (5.16.1)
+    multi_json (1.15.0)
+    mustermann (1.1.1)
+      ruby2_keywords (~> 0.0.1)
+    rack (2.2.3.1)
+    rack-protection (2.2.0)
+      rack
+    rake (13.0.6)
+    ruby2_keywords (0.0.5)
+    schleuder (4.0.3)
+      activerecord (~> 6.1.3)
+      bcrypt (~> 3.1.2)
+      charlock_holmes (~> 0.7.6)
+      gpgme (~> 2.0, >= 2.0.19)
+      mail (~> 2.7.1)
+      mail-gpg (~> 0.3)
+      rake (>= 10.5.0)
+      sinatra (~> 2)
+      sinatra-contrib (~> 2)
+      sqlite3 (~> 1.4.2)
+      thin (~> 1)
+      thor (~> 0)
+    sinatra (2.2.0)
+      mustermann (~> 1.0)
+      rack (~> 2.2)
+      rack-protection (= 2.2.0)
+      tilt (~> 2.0)
+    sinatra-contrib (2.2.0)
+      multi_json
+      mustermann (~> 1.0)
+      rack-protection (= 2.2.0)
+      sinatra (= 2.2.0)
+      tilt (~> 2.0)
+    sqlite3 (1.4.4)
+    thin (1.8.1)
+      daemons (~> 1.0, >= 1.0.9)
+      eventmachine (~> 1.0, >= 1.0.4)
+      rack (>= 1, < 3)
+    thor (0.20.3)
+    tilt (2.0.10)
+    tzinfo (2.0.4)
+      concurrent-ruby (~> 1.0)
+    zeitwerk (2.6.0)
+
+PLATFORMS
+  aarch64-linux
+  x86_64-linux
+
+DEPENDENCIES
+  schleuder!
+
+BUNDLED WITH
+   2.3.9
diff --git a/nixpkgs/pkgs/tools/security/schleuder/cli/Gemfile b/nixpkgs/pkgs/tools/security/schleuder/cli/Gemfile
new file mode 100644
index 000000000000..428e856aecc6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/schleuder/cli/Gemfile
@@ -0,0 +1,4 @@
+source "https://rubygems.org"
+
+gem "schleuder-cli", git: "https://0xacab.org/schleuder/schleuder-cli", tag: "schleuder-cli-0.1.0"
+
diff --git a/nixpkgs/pkgs/tools/security/schleuder/cli/Gemfile.lock b/nixpkgs/pkgs/tools/security/schleuder/cli/Gemfile.lock
new file mode 100644
index 000000000000..3eead9459e05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/schleuder/cli/Gemfile.lock
@@ -0,0 +1,22 @@
+GIT
+  remote: https://0xacab.org/schleuder/schleuder-cli
+  revision: 1de2548695d9a74f47b7868954561b48cbc966f9
+  tag: schleuder-cli-0.1.0
+  specs:
+    schleuder-cli (0.1.0)
+      thor (~> 0)
+
+GEM
+  remote: https://rubygems.org/
+  specs:
+    thor (0.20.3)
+
+PLATFORMS
+  aarch64-linux
+  x86_64-linux
+
+DEPENDENCIES
+  schleuder-cli!
+
+BUNDLED WITH
+   2.3.9
diff --git a/nixpkgs/pkgs/tools/security/schleuder/cli/default.nix b/nixpkgs/pkgs/tools/security/schleuder/cli/default.nix
new file mode 100644
index 000000000000..e34afa699f04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/schleuder/cli/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, bundlerApp
+, ruby
+, bundlerUpdateScript
+}:
+
+bundlerApp {
+  inherit ruby;
+
+  pname = "schleuder-cli";
+
+  gemdir = ./.;
+
+  installManpages = false;
+
+  exes = [
+    "schleuder-cli"
+  ];
+
+  passthru.updateScript = bundlerUpdateScript "schleuder-cli";
+
+  meta = with lib; {
+    description = "A command line tool to create and manage schleuder-lists";
+    longDescription = ''
+      Schleuder-cli enables creating, configuring, and deleting lists,
+      subscriptions, keys, etc. It uses the Schleuder API, provided by
+      schleuder-api-daemon (part of Schleuder).
+    '';
+    homepage = "https://schleuder.org";
+    changelog = "https://0xacab.org/schleuder/schleuder-cli/-/blob/main/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/schleuder/cli/gemset.nix b/nixpkgs/pkgs/tools/security/schleuder/cli/gemset.nix
new file mode 100644
index 000000000000..45ff62f89137
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/schleuder/cli/gemset.nix
@@ -0,0 +1,25 @@
+{
+  schleuder-cli = {
+    dependencies = ["thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      fetchSubmodules = false;
+      rev = "1de2548695d9a74f47b7868954561b48cbc966f9";
+      sha256 = "0k4i33w9a0bscw4wbs301vxca367g7pa89y6cr24i0014pbmhs9z";
+      type = "git";
+      url = "https://0xacab.org/schleuder/schleuder-cli";
+    };
+    version = "0.1.0";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/schleuder/default.nix b/nixpkgs/pkgs/tools/security/schleuder/default.nix
new file mode 100644
index 000000000000..97173fdc3e19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/schleuder/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, bundlerApp
+, ruby
+, bundlerUpdateScript
+, nixosTests
+}:
+
+bundlerApp {
+  inherit ruby;
+
+  pname = "schleuder";
+
+  gemdir = ./.;
+
+  exes = [
+    "schleuder"
+    "schleuder-api-daemon"
+  ];
+
+  passthru.updateScript = bundlerUpdateScript "schleuder";
+  passthru.tests = {
+    inherit (nixosTests) schleuder;
+  };
+
+  meta = with lib; {
+    description = "Schleuder is an encrypting mailing list manager with remailing-capabilities";
+    longDescription = ''
+      Schleuder is a group's email-gateway: subscribers can exchange
+      encrypted emails among themselves, receive emails from
+      non-subscribers and send emails to non-subscribers via the list.
+    '';
+    homepage = "https://schleuder.org";
+    changelog = "https://0xacab.org/schleuder/schleuder/blob/main/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ hexa lheckemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/schleuder/gemset.nix b/nixpkgs/pkgs/tools/security/schleuder/gemset.nix
new file mode 100644
index 000000000000..63cd6a5db81f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/schleuder/gemset.nix
@@ -0,0 +1,316 @@
+{
+  activemodel = {
+    dependencies = ["activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f0ai51icvvx5q0jd1l89k0dlwzpsrkqlj6x43f8qc4bd1ya9glx";
+      type = "gem";
+    };
+    version = "6.1.6";
+  };
+  activerecord = {
+    dependencies = ["activemodel" "activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0khjnkvmiyap1g3rvw9hp16mzai4smqcg5hxhq28pll25ljzxdbp";
+      type = "gem";
+    };
+    version = "6.1.6";
+  };
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08wzpwgdm03vzb8gqr8bvfdarb89g5ah0skvwqk6qv87p55xqkyw";
+      type = "gem";
+    };
+    version = "6.1.6";
+  };
+  bcrypt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "048z3fvcknqx7ikkhrcrykxlqmf9bzc7l0y5h1cnvrc9n2qf0k8m";
+      type = "gem";
+    };
+    version = "3.1.18";
+  };
+  charlock_holmes = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hybw8jw9ryvz5zrki3gc9r88jqy373m6v46ynxsdzv1ysiyr40p";
+      type = "gem";
+    };
+    version = "0.7.7";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s4fpn3mqiizpmpy2a24k4v365pv75y50292r8ajrv4i1p5b2k14";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  daemons = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07cszb0zl8mqmwhc8a2yfg36vi6lbgrp4pa5bvmryrpcz9v6viwg";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  gpgme = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xbgh9d8nbvsvyzqnd0mzhz0nr9hx4qn025kmz6d837lry4lc6gw";
+      type = "gem";
+    };
+    version = "2.0.20";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b2qyvnk4yynlg17ymkq4g5xgr275637fhl1mjh0valw3cb1fhhg";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  mail = {
+    dependencies = ["mini_mime"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  mail-gpg = {
+    dependencies = ["gpgme" "mail"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rz936m8nacy7agksvpvkf6b37d1h5qvh5xkrjqvv5wbdqs3cyfj";
+      type = "gem";
+    };
+    version = "0.4.4";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rapl1sfmfi3bfr68da4ca16yhc0pp93vjwkj7y3rdqrzy3b41hy";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08z6rgs1jgbc032843mwg3fayvzn4hihz8bl2gp87pf7z02kw5f3";
+      type = "gem";
+    };
+    version = "5.16.1";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  mustermann = {
+    dependencies = ["ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ccm54qgshr1lq3pr1dfh7gphkilc19dp63rw6fcx7460pjwy88a";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b1qsg0yfargdhmpapp2d3mlxj82wyygs9nj74w0r03diyi8swlc";
+      type = "gem";
+    };
+    version = "2.2.3.1";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hz6h6d67r217qi202qmxq2xkn3643ay3iybhl3dq3qd6j8nm3b2";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+      type = "gem";
+    };
+    version = "13.0.6";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  schleuder = {
+    dependencies = ["activerecord" "bcrypt" "charlock_holmes" "gpgme" "mail" "mail-gpg" "rake" "sinatra" "sinatra-contrib" "sqlite3" "thin" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lxmi7402v5qkajx3j5bydarxf3lbm1kzpwgy7zsmc7l28mcv8wx";
+      type = "gem";
+    };
+    version = "4.0.3";
+  };
+  sinatra = {
+    dependencies = ["mustermann" "rack" "rack-protection" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x3rci7k30g96y307hvglpdgm3f7nga3k3n4i8n1v2xxx290800y";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  sinatra-contrib = {
+    dependencies = ["multi_json" "mustermann" "rack-protection" "sinatra" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zzckl2n7r18fk3929hgcv8pby6hxwva0rbxw66yq6r96lnwzryb";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  sqlite3 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z1wa639c278bsipczn6kv8b13fj85pi8gk7x462chqx6k0wm0ax";
+      type = "gem";
+    };
+    version = "1.4.4";
+  };
+  thin = {
+    dependencies = ["daemons" "eventmachine" "rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "123bh7qlv6shk8bg8cjc84ix8bhlfcilwnn3iy6zq3l57yaplm9l";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rn8z8hda4h41a64l0zhkiwz2vxw9b1nb70gl37h1dg2k874yrlv";
+      type = "gem";
+    };
+    version = "2.0.10";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10qp5x7f9hvlc0psv9gsfbxg4a7s0485wsbq1kljkxq94in91l4z";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xjdr2szxvn3zb1sb5l8nfd6k9jr3b4qqbbg1mj9grf68m3fxckc";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/scilla/default.nix b/nixpkgs/pkgs/tools/security/scilla/default.nix
new file mode 100644
index 000000000000..79f743ea0ce8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/scilla/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "scilla";
+  version = "1.2.7";
+
+  src = fetchFromGitHub {
+    owner = "edoardottt";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-gZuNXQaxHJYLsEaOpNYo7ybg3f0GhkpiaLrex5lkDu4=";
+  };
+
+  vendorHash = "sha256-bVGmleuOJzi/Sz7MJlnQuJsDgRWuwieLUx8hcyKkWXI=";
+
+  checkFlags = [
+    # requires network access
+    "-skip=TestIPToHostname"
+  ];
+
+  meta = with lib; {
+    description = "Information gathering tool for DNS, ports and more";
+    homepage = "https://github.com/edoardottt/scilla";
+    changelog = "https://github.com/edoardottt/scilla/releases/tag/v${version}";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/scorecard/default.nix b/nixpkgs/pkgs/tools/security/scorecard/default.nix
new file mode 100644
index 000000000000..b460f52aa292
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/scorecard/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, scorecard
+}:
+
+buildGoModule rec {
+  pname = "scorecard";
+  version = "4.12.0";
+
+  src = fetchFromGitHub {
+    owner = "ossf";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Ys7uO+xMSlcD8OGw7fV+aR0+Q1UXrxPKVLQbphV4rKk=";
+    # populate values otherwise taken care of by goreleaser,
+    # unfortunately these require us to use git. By doing
+    # this in postFetch we can delete .git afterwards and
+    # maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse HEAD > $out/COMMIT
+      # 0000-00-00T00:00:00Z
+      date -u -d "@$(git log -1 --pretty=%ct)" "+%Y-%m-%dT%H:%M:%SZ" > $out/SOURCE_DATE_EPOCH
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+  vendorHash = "sha256-L6HFZryniy3Gp8NKdjM4SK82ZG5eQPM7blkSE3YFhOw=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X sigs.k8s.io/release-utils/version.gitVersion=v${version}"
+    "-X sigs.k8s.io/release-utils/version.gitTreeState=clean"
+  ];
+
+  # ldflags based on metadata from git and source
+  preBuild = ''
+    ldflags+=" -X sigs.k8s.io/release-utils/version.gitCommit=$(cat COMMIT)"
+    ldflags+=" -X sigs.k8s.io/release-utils/version.buildDate=$(cat SOURCE_DATE_EPOCH)"
+  '';
+
+  preCheck = ''
+    # Feed in all but the e2e tests for testing
+    # This is because subPackages above limits what is built to just what we
+    # want but also limits the tests
+    getGoDirs() {
+      go list ./... | grep -v e2e
+    }
+    # Ensure other e2e tests that have escaped the e2e dir dont run
+    export SKIP_GINKGO=1
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd scorecard \
+      --bash <($out/bin/scorecard completion bash) \
+      --fish <($out/bin/scorecard completion fish) \
+      --zsh <($out/bin/scorecard completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/scorecard --help
+    # $out/bin/scorecard version 2>&1 | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = scorecard;
+    command = "scorecard version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/ossf/scorecard";
+    changelog = "https://github.com/ossf/scorecard/releases/tag/v${version}";
+    description = "Security health metrics for Open Source";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk developer-guy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/scrypt/default.nix b/nixpkgs/pkgs/tools/security/scrypt/default.nix
new file mode 100644
index 000000000000..d2b8228f6511
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/scrypt/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchurl
+, openssl
+, getconf
+, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "scrypt";
+  version = "1.3.2";
+
+  src = fetchurl {
+    url = "https://www.tarsnap.com/scrypt/${pname}-${version}.tgz";
+    sha256 = "sha256-1jLBGTQgrG+uv5SC5l4z06VmTszWQ7CaUJ0h0cHym+I=";
+  };
+
+  outputs = [ "out" "lib" "dev" ];
+
+  configureFlags = [ "--enable-libscrypt-kdf" ];
+
+  buildInputs = [ openssl ];
+
+  nativeBuildInputs = [ getconf ];
+
+  patchPhase = ''
+    for f in Makefile.in autotools/Makefile.am libcperciva/cpusupport/Build/cpusupport.sh configure ; do
+      substituteInPlace $f --replace "command -p " ""
+    done
+
+    patchShebangs tests/test_scrypt.sh
+  '';
+
+  doCheck = true;
+  checkTarget = "test";
+  nativeCheckInputs = lib.optionals stdenv.isLinux [ util-linux ];
+
+  meta = with lib; {
+    description = "Encryption utility";
+    homepage    = "https://www.tarsnap.com/scrypt.html";
+    license     = licenses.bsd2;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sdlookup/default.nix b/nixpkgs/pkgs/tools/security/sdlookup/default.nix
new file mode 100644
index 000000000000..62d6dffdaa2b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sdlookup/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "sdlookup";
+  version = "unstable-2022-03-10";
+
+  src = fetchFromGitHub {
+    owner = "j3ssie";
+    repo = pname;
+    rev = "8554bfa27284c4764401dbd8da23800d4ae968a2";
+    hash = "sha256-c6xAgOxle51waiFsSWvwO9eyt1KXuM0dEeepVsRQHkk=";
+  };
+
+  vendorHash = "sha256-j0UzucZ6kDwM+6U0ZyIW9u8XG/Bn+VUCO2vV1BbnQo0=";
+
+  meta = with lib; {
+    description = "IP lookups for open ports and vulnerabilities from internetdb.shodan.io";
+    homepage = "https://github.com/j3ssie/sdlookup";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/seccure/default.nix b/nixpkgs/pkgs/tools/security/seccure/default.nix
new file mode 100644
index 000000000000..07c8d0382ca5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/seccure/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, libgcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "seccure";
+  version = "0.5";
+
+  src = fetchurl {
+    url = "http://point-at-infinity.org/seccure/${pname}-${version}.tar.gz";
+    sha256 = "0nwnk3hfhgvf5xr0xipbh6smfnya22wphc5rj0vgi5d0zr5cwrk5";
+  };
+
+  buildInputs = [ libgcrypt ];
+
+  preConfigure = ''
+    sed -e s@/usr/@$out/@g -i Makefile
+    sed -e 's@ln -f@ln -sf@g' -i Makefile
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  meta = {
+    homepage = "http://point-at-infinity.org/seccure/";
+    description = "Zero-configuration elliptic curve cryptography utility";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.lgpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/secp256k1/default.nix b/nixpkgs/pkgs/tools/security/secp256k1/default.nix
new file mode 100644
index 000000000000..5494f8f26c24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/secp256k1/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "secp256k1";
+
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "bitcoin-core";
+    repo = "secp256k1";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-atq34GnWkSkWTWxZP4PCSF3hIjGFhQ534E+WUtLRkiM=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  configureFlags = [
+    "--enable-benchmark=no"
+    "--enable-module-recovery"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Optimized C library for EC operations on curve secp256k1";
+    longDescription = ''
+      Optimized C library for EC operations on curve secp256k1. Part of
+      Bitcoin Core. This library is a work in progress and is being used
+      to research best practices. Use at your own risk.
+    '';
+    homepage = "https://github.com/bitcoin-core/secp256k1";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ ];
+    platforms = with platforms; all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/secrets-extractor/default.nix b/nixpkgs/pkgs/tools/security/secrets-extractor/default.nix
new file mode 100644
index 000000000000..b8118e6cf95c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/secrets-extractor/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, libpcap
+}:
+
+buildGoModule rec {
+  pname = "secrets-extractor";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "Xenios91";
+    repo = "Secrets-Extractor";
+    rev = "v${version}";
+    hash = "sha256-cwEG0cXlyhrUSQAuZ/5KVqJtez13GvZghabsooXCM/U=";
+  };
+
+  vendorHash = "sha256-KhAaBNSpFu7LAWiHCWD1OssexW9N96ArDb7Oo1AaiWI=";
+
+  buildInputs = [
+    libpcap
+  ];
+
+  meta = with lib; {
+    description = "Tool to check packets for secrets";
+    homepage = "https://github.com/Xenios91/Secrets-Extractor";
+    # https://github.com/Xenios91/Secrets-Extractor/issues/1
+    license = with licenses; [ unfree ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/secretscanner/default.nix b/nixpkgs/pkgs/tools/security/secretscanner/default.nix
new file mode 100644
index 000000000000..794597707994
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/secretscanner/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, hyperscan
+, pkg-config
+, protobuf
+, protoc-gen-go
+, protoc-gen-go-grpc
+}:
+
+buildGoModule rec {
+  pname = "secretscanner";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "deepfence";
+    repo = "SecretScanner";
+    rev = "refs/tags/v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-lTUZLuEiC9xpHYWn3uv4ZtbvHX6ETsjxacjd/O0kU8I=";
+  };
+
+  vendorHash = "sha256-lB+fiSdflIYGw0hMN0a9IOtRcJwYEUPQqaeU7mAfSQs=";
+
+  excludedPackages = [
+    "./agent-plugins-grpc/proto" # No need to build submodules
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    protobuf
+    protoc-gen-go
+    protoc-gen-go-grpc
+  ];
+
+  buildInputs = [
+    hyperscan
+  ];
+
+  preBuild = ''
+    # Compile proto files
+    make -C agent-plugins-grpc go
+  '';
+
+  postInstall = ''
+    mv $out/bin/SecretScanner $out/bin/$pname
+  '';
+
+  meta = with lib; {
+    description = "Tool to find secrets and passwords in container images and file systems";
+    homepage = "https://github.com/deepfence/SecretScanner";
+    changelog = "https://github.com/deepfence/SecretScanner/releases/tag/v${version}";
+    platforms = [ "x86_64-linux" ];
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/sedutil/default.nix b/nixpkgs/pkgs/tools/security/sedutil/default.nix
new file mode 100644
index 000000000000..0e83472da0e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sedutil/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sedutil";
+  version = "1.20.0";
+
+  src = fetchFromGitHub {
+    owner = "Drive-Trust-Alliance";
+    repo = "sedutil";
+    rev = version;
+    sha256 = "sha256-NG/7aqe48ShHWW5hW8axYWV4+zX0dBE7Wy9q58l0S3E=";
+  };
+
+  patches = [
+    # Fix for gcc-13 pending upstream inclusion:
+    #   https://github.com/Drive-Trust-Alliance/sedutil/pull/425
+    (fetchpatch {
+      name = "gcc-13.patch";
+      url = "https://github.com/Drive-Trust-Alliance/sedutil/commit/927cd88cad7bea94c2eebecc18f7881f0defaccb.patch";
+      hash = "sha256-/Lvn3CQd7pzNhLa7sQY8VwbyJK/jEM5FzLijTQnzXx8=";
+    })
+  ];
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "DTA sedutil Self encrypting drive software";
+    homepage = "https://www.drivetrust.com";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/semgrep/common.nix b/nixpkgs/pkgs/tools/security/semgrep/common.nix
new file mode 100644
index 000000000000..e4e51d81e9b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/semgrep/common.nix
@@ -0,0 +1,55 @@
+{ lib }:
+
+rec {
+  version = "1.61.1";
+
+  srcHash = "sha256-muTw6rj9FuSSXvUzdP4QRQogzmUPlrvGARRK/Jqg+Gc=";
+
+  # submodule dependencies
+  # these are fetched so we:
+  #   1. don't fetch the many submodules we don't need
+  #   2. avoid fetchSubmodules since it's prone to impurities
+  submodules = {
+    "cli/src/semgrep/semgrep_interfaces" = {
+      owner = "semgrep";
+      repo = "semgrep-interfaces";
+      rev = "bbfd1c5b91bd411bceffc3de73f5f0b37f04433d";
+      hash = "sha256-wrhV5bBuIpVYehzVTxussiED//ObJXQSfPiiKnIR/DM=";
+    };
+  };
+
+  # fetch pre-built semgrep-core since the ocaml build is complex and relies on
+  # the opam package manager at some point
+  # pulling it out of the python wheel as r2c no longer release a built binary
+  # on github releases
+  core = {
+    x86_64-linux = {
+      platform = "any";
+      hash = "sha256-lX/zRgkEyoln69pf4fWtb8f9wffBOI/KkCegn8kFmj4=";
+    };
+    x86_64-darwin = {
+      platform = "macosx_10_14_x86_64";
+      hash = "sha256-Rk4qP/iKpRUbqdry6V/NmXRQLkA0e9ltIOdYiO5DuTg=";
+    };
+    aarch64-darwin = {
+      platform = "macosx_11_0_arm64";
+      hash = "sha256-Gqq9LGwZ96i8LU8Z8qSN3TxuUUTDYrJiVCY9rm7aNzI=";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://semgrep.dev/";
+    downloadPage = "https://github.com/semgrep/semgrep/";
+    changelog = "https://github.com/semgrep/semgrep/blob/v${version}/CHANGELOG.md";
+    description = "Lightweight static analysis for many languages";
+    longDescription = ''
+      Semgrep is a fast, open-source, static analysis tool for finding bugs and
+      enforcing code standards at editor, commit, and CI time. Semgrep analyzes
+      code locally on your computer or in your build environment: code is never
+      uploaded. Its rules look like the code you already write; no abstract
+      syntax trees, regex wrestling, or painful DSLs.
+    '';
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ jk ambroisie ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/semgrep/default.nix b/nixpkgs/pkgs/tools/security/semgrep/default.nix
new file mode 100644
index 000000000000..70e6b8641ee8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/semgrep/default.nix
@@ -0,0 +1,155 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, semgrep-core
+, buildPythonApplication
+, pythonPackages
+, pythonRelaxDepsHook
+
+, pytestCheckHook
+, git
+}:
+
+# testing locally post build:
+# ./result/bin/semgrep scan --metrics=off --config 'r/generic.unicode.security.bidi.contains-bidirectional-characters'
+
+let
+  common = import ./common.nix { inherit lib; };
+  semgrepBinPath = lib.makeBinPath [ semgrep-core ];
+in
+buildPythonApplication rec {
+  pname = "semgrep";
+  inherit (common) version;
+  src = fetchFromGitHub {
+    owner = "semgrep";
+    repo = "semgrep";
+    rev = "v${version}";
+    hash = common.srcHash;
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-test_dump_engine-test-for-nix-store-path.patch";
+      url = "https://github.com/semgrep/semgrep/commit/c7553c1a61251146773617f80a2d360e6b6ab3f9.patch";
+      hash = "sha256-A3QdL0DDh/pbDpRIBACUie7PEvC17iG4t6qTnmPIwA4=";
+    })
+  ];
+
+  # prepare a subset of the submodules as we only need a handful
+  # and there are many many submodules total
+  postPatch = (lib.concatStringsSep "\n" (lib.mapAttrsToList
+    (
+      path: submodule: ''
+        # substitute ${path}
+        # remove git submodule placeholder
+        rm -r ${path}
+        # link submodule
+        ln -s ${submodule}/ ${path}
+      ''
+    )
+    passthru.submodulesSubset)) + ''
+    cd cli
+  '';
+
+  nativeBuildInputs = [ pythonRelaxDepsHook ];
+  # tell cli/setup.py to not copy semgrep-core into the result
+  # this means we can share a copy of semgrep-core and avoid an issue where it
+  # copies the binary but doesn't retain the executable bit
+  SEMGREP_SKIP_BIN = true;
+
+  pythonRelaxDeps = [
+    "boltons"
+    "glom"
+  ];
+
+  propagatedBuildInputs = with pythonPackages; [
+    attrs
+    boltons
+    colorama
+    click
+    click-option-group
+    glom
+    requests
+    rich
+    ruamel-yaml
+    tqdm
+    packaging
+    jsonschema
+    wcmatch
+    peewee
+    defusedxml
+    urllib3
+    typing-extensions
+    python-lsp-jsonrpc
+    tomli
+  ];
+
+  doCheck = true;
+
+  nativeCheckInputs = [ git pytestCheckHook ] ++ (with pythonPackages; [
+    flaky
+    pytest-snapshot
+    pytest-mock
+    pytest-freezegun
+    types-freezegun
+  ]);
+
+  disabledTests = [
+    # requires networking
+    "test_send"
+    # requires networking
+    "test_parse_exclude_rules_auto"
+    # many child tests require networking to download files
+    "TestConfigLoaderForProducts"
+    # doesn't start flaky plugin correctly
+    "test_debug_performance"
+  ];
+
+  preCheck = ''
+    # tests need a home directory
+    export HOME="$(mktemp -d)"
+
+    # tests need access to `semgrep-core`
+    export OLD_PATH="$PATH"
+    export PATH="$PATH:${semgrepBinPath}"
+
+    # we're in cli
+    # replace old semgrep with wrapped one
+    rm ./bin/semgrep
+    ln -s $out/bin/semgrep ./bin/semgrep
+
+    # disabledTestPaths doesn't manage to avoid the e2e tests
+    # remove them from pyproject.toml
+    # and remove need for pytest-split
+    substituteInPlace pyproject.toml \
+      --replace '"tests/e2e",' "" \
+      --replace '"tests/e2e-pro",' "" \
+      --replace 'addopts = "--splitting-algorithm=least_duration"' ""
+  '';
+
+  postCheck = ''
+    export PATH="$OLD_PATH"
+    unset OLD_PATH
+  '';
+
+  # since we stop cli/setup.py from finding semgrep-core and copying it into
+  # the result we need to provide it on the PATH
+  preFixup = ''
+    makeWrapperArgs+=(--prefix PATH : ${semgrepBinPath})
+  '';
+
+  postInstall = ''
+    chmod +x $out/bin/{,py}semgrep
+  '';
+
+  passthru = {
+    inherit common;
+    submodulesSubset = lib.mapAttrs (k: args: fetchFromGitHub args) common.submodules;
+    updateScript = ./update.sh;
+  };
+
+  meta = common.meta // {
+    description = common.meta.description + " - cli";
+    inherit (semgrep-core.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/semgrep/semgrep-core.nix b/nixpkgs/pkgs/tools/security/semgrep/semgrep-core.nix
new file mode 100644
index 000000000000..33e50837bf75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/semgrep/semgrep-core.nix
@@ -0,0 +1,52 @@
+{ lib, stdenvNoCC, fetchPypi, unzip }:
+
+let
+  common = import ./common.nix { inherit lib; };
+in
+stdenvNoCC.mkDerivation rec {
+  pname = "semgrep-core";
+  inherit (common) version;
+  # fetch pre-built semgrep-core since the ocaml build is complex and relies on
+  # the opam package manager at some point
+  # pulling it out of the python wheel as r2c no longer release a built binary
+  # on github releases
+  src =
+    let
+      inherit (stdenvNoCC.hostPlatform) system;
+      data = common.core.${system} or (throw "Unsupported system: ${system}");
+    in
+    fetchPypi rec {
+      pname = "semgrep";
+      inherit version;
+      format = "wheel";
+      dist = python;
+      python = "cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311";
+      inherit (data) platform hash;
+    };
+
+  nativeBuildInputs = [ unzip ];
+
+  # _tryUnzip from unzip's setup-hook doesn't recognise .whl
+  # "do not know how to unpack source archive"
+  # perform unpack by hand
+  unpackPhase = ''
+    runHook preUnpack
+    LANG=en_US.UTF-8 unzip -qq "$src"
+    runHook postUnpack
+  '';
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm 755 -t $out/bin semgrep-${version}.data/purelib/semgrep/bin/semgrep-core
+    runHook postInstall
+  '';
+
+  meta = common.meta // {
+    description = common.meta.description + " - core binary";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    platforms = lib.attrNames common.core;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/semgrep/update.sh b/nixpkgs/pkgs/tools/security/semgrep/update.sh
new file mode 100755
index 000000000000..67b720154b0b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/semgrep/update.sh
@@ -0,0 +1,146 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused jq nix-prefetch
+
+set -euxo pipefail
+
+# provide a github token so you don't get rate limited
+# if you use gh cli you can use:
+#     `export GITHUB_TOKEN="$(cat ~/.config/gh/config.yml | yq '.hosts."github.com".oauth_token' -r)"`
+# or just set your token by hand:
+#     `read -s -p "Enter your token: " GITHUB_TOKEN; export GITHUB_TOKEN`
+#     (we use read so it doesn't show in our shell history and in secret mode so the token you paste isn't visible)
+if [ -z "${GITHUB_TOKEN:-}" ]; then
+    echo "no GITHUB_TOKEN provided - you could meet API request limiting" >&2
+fi
+
+ROOT="$(dirname "$(readlink -f "$0")")"
+NIXPKGS_ROOT="$ROOT/../../../.."
+
+COMMON_FILE="$ROOT/common.nix"
+
+instantiateClean() {
+    nix-instantiate -A "$1" --eval --strict | cut -d\" -f2
+}
+
+# get latest version
+NEW_VERSION=$(
+  curl -s -L -H \
+    "Accept: application/vnd.github.v3+json" \
+    ${GITHUB_TOKEN:+ -H "Authorization: bearer $GITHUB_TOKEN"} \
+    https://api.github.com/repos/semgrep/semgrep/releases/latest \
+  | jq -r '.tag_name'
+)
+# trim v prefix
+NEW_VERSION="${NEW_VERSION:1}"
+OLD_VERSION="$(instantiateClean semgrep.passthru.common.version)"
+
+if [[ "$OLD_VERSION" == "$NEW_VERSION" ]]; then
+    echo "Already up to date"
+    exit
+fi
+
+replace() {
+    sed -i "s@$1@$2@g" "$3"
+}
+
+fetchgithub() {
+    set +eo pipefail
+    nix-build -A "$1" 2>&1 >/dev/null | grep "got:" | cut -d':' -f2 | sed 's| ||g'
+    set -eo pipefail
+}
+
+fetch_arch() {
+  VERSION=$1
+  PLATFORM=$2
+  nix-prefetch "{ fetchPypi }:
+fetchPypi rec {
+  pname = \"semgrep\";
+  version = \"$VERSION\";
+  format = \"wheel\";
+  dist = python;
+  python = \"cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311\";
+  platform = \"$PLATFORM\";
+}
+"
+}
+
+replace "$OLD_VERSION" "$NEW_VERSION" "$COMMON_FILE"
+
+echo "Updating src"
+
+OLD_HASH="$(instantiateClean semgrep.passthru.common.srcHash)"
+echo "Old hash $OLD_HASH"
+TMP_HASH="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
+replace "$OLD_HASH" "$TMP_HASH" "$COMMON_FILE"
+NEW_HASH="$(fetchgithub semgrep.src)"
+echo "New hash $NEW_HASH"
+replace "$TMP_HASH" "$NEW_HASH" "$COMMON_FILE"
+
+echo "Updated src"
+
+
+update_core_platform() {
+    SYSTEM=$1
+    echo "Updating core src $SYSTEM"
+
+    PLATFORM="$(instantiateClean "semgrep.passthru.common.core.$SYSTEM.platform")"
+
+    OLD_HASH="$(instantiateClean "semgrep.passthru.common.core.$SYSTEM.hash")"
+    echo "Old core hash $OLD_HASH"
+    NEW_HASH="$(fetch_arch "$NEW_VERSION" "$PLATFORM")"
+    echo "New core hash $NEW_HASH"
+    replace "$OLD_HASH" "$NEW_HASH" "$COMMON_FILE"
+
+    echo "Updated core src $SYSTEM"
+}
+
+update_core_platform "x86_64-linux"
+update_core_platform "x86_64-darwin"
+update_core_platform "aarch64-darwin"
+
+OLD_PWD=$PWD
+TMPDIR="$(mktemp -d)"
+# shallow clone to check submodule commits, don't actually need the submodules
+git clone https://github.com/semgrep/semgrep "$TMPDIR/semgrep" --depth 1 --branch "v$NEW_VERSION"
+
+get_submodule_commit() {
+    OLD_PWD=$PWD
+    (
+        cd "$TMPDIR/semgrep"
+        git ls-tree --object-only HEAD "$1"
+        cd "$OLD_PWD"
+    )
+}
+
+# loop through submodules
+nix-instantiate -E "with import $NIXPKGS_ROOT {}; builtins.attrNames semgrep.passthru.common.submodules" --eval --strict --json \
+| jq '.[]' -r \
+| while read -r SUBMODULE; do
+    echo "Updating $SUBMODULE"
+    OLD_REV=$(instantiateClean semgrep.passthru.common.submodules."$SUBMODULE".rev)
+    echo "Old commit $OLD_REV"
+    OLD_HASH=$(instantiateClean semgrep.passthru.common.submodules."$SUBMODULE".hash)
+    echo "Old hash $OLD_HASH"
+
+    NEW_REV=$(get_submodule_commit "$SUBMODULE")
+    echo "New commit $NEW_REV"
+
+    if [[ "$OLD_REV" == "$NEW_REV" ]]; then
+      echo "$SUBMODULE already up to date"
+      continue
+    fi
+
+    TMP_HASH="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
+    replace "$OLD_REV" "$NEW_REV" "$COMMON_FILE"
+    replace "$OLD_HASH" "$TMP_HASH" "$COMMON_FILE"
+    NEW_HASH="$(fetchgithub semgrep.passthru.submodulesSubset."$SUBMODULE")"
+    echo "New hash $NEW_HASH"
+    replace "$TMP_HASH" "$NEW_HASH" "$COMMON_FILE"
+
+    echo "Updated $SUBMODULE"
+done
+
+rm -rf "$TMPDIR"
+
+echo "Finished"
+
diff --git a/nixpkgs/pkgs/tools/security/sequoia-chameleon-gnupg/default.nix b/nixpkgs/pkgs/tools/security/sequoia-chameleon-gnupg/default.nix
new file mode 100644
index 000000000000..96d15250e163
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sequoia-chameleon-gnupg/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitLab
+, pkg-config
+, nettle
+, openssl
+, sqlite
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sequoia-chameleon-gnupg";
+  version = "unstable-2023-11-22";
+
+  src = fetchFromGitLab {
+    owner = "sequoia-pgp";
+    repo = pname;
+    rev = "fd9df5a4e1ec3c3ca986a1a25bacf13f024c934a";
+    hash = "sha256-OxWlkOQxuuCFyLMx+ucervyqIduUpyJ9lCGFQlfEUFc=";
+  };
+
+  cargoHash = "sha256-4+PA1kYJgn8yDAYr88DQYg6sdgSN3MWzKAUATW3VO6I=";
+
+  nativeBuildInputs = [
+    rustPlatform.bindgenHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    nettle
+    openssl
+    sqlite
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  # gpgconf: error creating socket directory
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Sequoia's reimplementation of the GnuPG interface";
+    homepage = "https://gitlab.com/sequoia-pgp/sequoia-chameleon-gnupg";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ nickcao ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sequoia-sq/default.nix b/nixpkgs/pkgs/tools/security/sequoia-sq/default.nix
new file mode 100644
index 000000000000..699a8ee63632
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sequoia-sq/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchFromGitLab
+, lib
+, darwin
+, nettle
+, nix-update-script
+, rustPlatform
+, pkg-config
+, openssl
+, sqlite
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sequoia-sq";
+  version = "0.32.0";
+
+  src = fetchFromGitLab {
+    owner = "sequoia-pgp";
+    repo = "sequoia-sq";
+    rev = "v${version}";
+    hash = "sha256-2a6LIW5ohSi7fbMwk/wmNJ0AOz5JIXiXJI7EoVKv1Sk=";
+  };
+
+  cargoHash = "sha256-beA0viJVDjfANsPegkc/x2syVp8uGKTMnrPcM7jcvG4=";
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    openssl
+    sqlite
+    nettle
+  ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Security SystemConfiguration ]);
+
+  # Sometimes, tests fail on CI (ofborg) & hydra without this
+  checkFlags = [
+    # doctest for sequoia-ipc fail for some reason
+    "--skip=macros::assert_send_and_sync"
+    "--skip=macros::time_it"
+  ];
+
+  # Install manual pages, see https://gitlab.com/sequoia-pgp/sequoia-sq#building
+  postInstall = ''
+    mkdir -p $out/share/man
+    SQ_MAN=$out/share/man/man1 cargo run
+  '';
+
+  doCheck = true;
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A cool new OpenPGP implementation";
+    homepage = "https://sequoia-pgp.org/";
+    changelog = "https://gitlab.com/sequoia-pgp/sequoia-sq/-/blob/v${version}/NEWS";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ minijackson doronbehar ];
+    mainProgram = "sq";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sequoia-sqop/default.nix b/nixpkgs/pkgs/tools/security/sequoia-sqop/default.nix
new file mode 100644
index 000000000000..19dd99b871b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sequoia-sqop/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, fetchFromGitLab
+, nettle
+, nix-update-script
+, installShellFiles
+, rustPlatform
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sequoia-sqop";
+  version = "0.31.0";
+
+  src = fetchFromGitLab {
+    owner = "sequoia-pgp";
+    # From some reason the repository is not sequoia-sqop - like the command
+    # generated etc
+    repo = "sequoia-sop";
+    rev = "v${version}";
+    hash = "sha256-qGSVmjLdx84YphAXt1MRF1cIfk7xLOvtUj+3e7vO+jA=";
+  };
+
+  cargoHash = "sha256-y4n6UPAYwI9P+jw59TOf98xSdNvzEgJp5n/GtiixsIU=";
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+    installShellFiles
+  ];
+
+  buildInputs = [
+    nettle
+  ];
+  buildFeatures = [ "cli" ];
+
+  # Install manual pages
+  postInstall = ''
+    mkdir -p $out/share/man
+    cp -r man-sqop $out/share/man/man1
+    installShellCompletion --cmd sqop \
+      --bash target/*/release/build/sequoia-sop*/out/sqop.bash \
+      --fish target/*/release/build/sequoia-sop*/out/sqop.fish \
+      --zsh target/*/release/build/sequoia-sop*/out/_sqop
+    # Also elv and powershell are generated there
+  '';
+
+  doCheck = true;
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "An implementation of the Stateless OpenPGP Command Line Interface using Sequoia";
+    homepage = "https://docs.sequoia-pgp.org/sqop/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ doronbehar ];
+    mainProgram = "sqop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sequoia-sqv/default.nix b/nixpkgs/pkgs/tools/security/sequoia-sqv/default.nix
new file mode 100644
index 000000000000..b85c5d2cfb18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sequoia-sqv/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitLab
+, nettle
+, nix-update-script
+, rustPlatform
+, pkg-config
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sequoia-sqv";
+  version = "1.1.0";
+
+  src = fetchFromGitLab {
+    owner = "sequoia-pgp";
+    repo = "sequoia-sqv";
+    rev = "v${version}";
+    hash = "sha256-KoB9YnPNE2aB5MW5G9r6Bk+1QnANVSKA2dp3ufSJ44M=";
+  };
+
+  cargoHash = "sha256-uwOU/yyh3eoD10El7Oe9E97F3dvPuXMHQhpnWEJ1gnI=";
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+    installShellFiles
+  ];
+
+  buildInputs = [
+    nettle
+  ];
+  # Otherwise, the shell completion files are not built
+  cargoBuildFlags = [
+    "--package" "sequoia-sqv"
+  ];
+  # Use a predictable target directory, to access it when installing shell
+  # completion files.
+  preBuild = ''
+    export CARGO_TARGET_DIR="$(pwd)/target"
+  '';
+  postInstall = ''
+    installShellCompletion --cmd sqv \
+      --zsh target/_sqv \
+      --bash target/sqv.bash \
+      --fish target/sqv.fish
+  '';
+
+  doCheck = true;
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A command-line OpenPGP signature verification tool";
+    homepage = "https://docs.sequoia-pgp.org/sqv/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ doronbehar ];
+    mainProgram = "sqv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sha1collisiondetection/default.nix b/nixpkgs/pkgs/tools/security/sha1collisiondetection/default.nix
new file mode 100644
index 000000000000..07c9ed9b2408
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sha1collisiondetection/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, libtool, which }:
+
+stdenv.mkDerivation  rec {
+  pname = "sha1collisiondetection";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "cr-marcstevens";
+    repo = "sha1collisiondetection";
+    rev = "stable-v${version}";
+    sha256 = "0xn31hkkqs0kj9203rzx6w4nr0lq8fnrlm5i76g0px3q4v2dzw1s";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  doCheck = true;
+
+  nativeBuildInputs = [ libtool which ];
+
+  meta = with lib; {
+    description = "Library and command line tool to detect SHA-1 collision";
+    longDescription = ''
+      This library and command line tool were designed as near drop-in
+      replacements for common SHA-1 libraries and sha1sum. They will
+      compute the SHA-1 hash of any given file and additionally will
+      detect cryptanalytic collision attacks against SHA-1 present in
+      each file. It is very fast and takes less than twice the amount
+      of time as regular SHA-1.
+      '';
+    platforms = platforms.all;
+    maintainers = with maintainers; [ leenaars ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/shc/default.nix b/nixpkgs/pkgs/tools/security/shc/default.nix
new file mode 100644
index 000000000000..0c1bf93ed1c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/shc/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "shc";
+  version = "4.0.3";
+  rev = version;
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "neurobin";
+    repo = "shc";
+    sha256 = "0bfn404plsssa14q89k9l3s5lxq3df0sny5lis4j2w75qrkqx694";
+  };
+
+  meta = with lib; {
+    homepage = "https://neurobin.org/projects/softwares/unix/shc/";
+    description = "Shell Script Compiler";
+    platforms = lib.platforms.all;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sheesy-cli/default.nix b/nixpkgs/pkgs/tools/security/sheesy-cli/default.nix
new file mode 100644
index 000000000000..c47e5a212858
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sheesy-cli/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, rustPlatform, fetchCrate, installShellFiles
+, libgpg-error, gpgme, gettext, openssl, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sheesy-cli";
+  version = "4.0.11";
+
+  src = fetchCrate {
+    inherit version pname;
+    sha256 = "1l21ji9zqy8x1g2gvqwdhya505max07ibx1hh88s36k0jbvdb7xc";
+  };
+
+  cargoSha256 = "159a5ph1gxwcgahyr8885lq3c1w76nxzfrfdpyqixqrr7jzx2rd3";
+  cargoDepsName = pname;
+
+  nativeBuildInputs = [ libgpg-error gpgme gettext installShellFiles ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  buildFeatures = [ "vault" "extract" "completions" "substitute" "process" ];
+
+  checkFeatures = [ ];
+
+  cargoBuildFlags = [ "--bin" "sy" ];
+
+  postInstall = ''
+    installShellCompletion --cmd sy \
+      --bash <($out/bin/sy completions bash) \
+      --fish <($out/bin/sy completions fish) \
+      --zsh <($out/bin/sy completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "The 'share-secrets-safely' CLI to interact with GPG/pass-like vaults";
+    homepage = "https://share-secrets-safely.github.io/cli/";
+    changelog = "https://github.com/share-secrets-safely/cli/releases/tag/${version}";
+    license = with licenses; [ lgpl21Only ];
+    maintainers = with maintainers; [ devhell ];
+    mainProgram = "sy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/shellclear/default.nix b/nixpkgs/pkgs/tools/security/shellclear/default.nix
new file mode 100644
index 000000000000..32be52bae267
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/shellclear/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shellclear";
+  version = "0.4.8";
+
+  src = fetchFromGitHub {
+    owner = "rusty-ferris-club";
+    repo = "shellclear";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-/0pqegVxrqqxaQ2JiUfkkFK9hp+Vuq7eTap052HEcJs=";
+  };
+
+  cargoHash = "sha256-vPd1cFfoSkOnXH3zKQUB0zWDzEtao50AUrUzhpZIkgI=";
+
+  meta = with lib; {
+    description = "Secure shell history commands by finding sensitive data";
+    homepage = "https://github.com/rusty-ferris-club/shellclear";
+    changelog = "https://github.com/rusty-ferris-club/shellclear/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/shellnoob/default.nix b/nixpkgs/pkgs/tools/security/shellnoob/default.nix
new file mode 100644
index 000000000000..f7814b24384b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/shellnoob/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenvNoCC, fetchFromGitHub, python3 }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "shellnoob";
+  version = "unstable-2022-03-16";
+
+  src = fetchFromGitHub {
+    owner = "reyammer";
+    repo = pname;
+    rev = "72cf49804d8ea3de1faa7fae5794449301987bff";
+    sha256 = "xF9OTFFe8godW4+z9MFaFEkjE9FB42bKWwdl9xRcmEo=";
+  };
+
+  buildInputs = [
+    python3
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 shellnoob.py $out/bin/snoob
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A shellcode writing toolkit";
+    homepage = "https://github.com/reyammer/shellnoob";
+    mainProgram = "snoob";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/shellz/default.nix b/nixpkgs/pkgs/tools/security/shellz/default.nix
new file mode 100644
index 000000000000..e7d44bd21926
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/shellz/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "shellz";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "evilsocket";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-sUYDopSxaUPyrHev8XXobRoX6uxbdf5goJ75KYEPFNY=";
+  };
+
+  vendorHash = "sha256-9uQMimttsNCA//DgDMuukXUROlIz3bJfr04XfVpPLZM=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Utility to manage your SSH, telnet, kubernetes, winrm, web or any custom shell";
+    homepage = "https://github.com/evilsocket/shellz";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "shellz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sherlock/default.nix b/nixpkgs/pkgs/tools/security/sherlock/default.nix
new file mode 100644
index 000000000000..e3d6f658aeaf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sherlock/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, makeWrapper
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "sherlock";
+  version = "unstable-2023-10-06";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "sherlock-project";
+    repo = pname;
+    rev = "7ec56895a37ada47edd6573249c553379254d14a";
+    hash = "sha256-bK5yEdh830vgKcsU3gLH7TybLncnX6eRIiYPUiVWM74=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    certifi
+    colorama
+    pandas
+    pysocks
+    requests
+    requests-futures
+    stem
+    torrequest
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share
+    cp -R ./sherlock $out/share
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper ${python3.interpreter} $out/bin/sherlock \
+      --add-flags $out/share/sherlock/sherlock.py \
+      --prefix PYTHONPATH : "$PYTHONPATH"
+  '';
+
+  checkInputs = with python3.pkgs; [
+    exrex
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    cd $out/share/sherlock
+    for tests in all test_multiple_usernames; do
+      ${python3.interpreter} -m unittest tests.$tests --verbose
+    done
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://sherlock-project.github.io/";
+    description = "Hunt down social media accounts by username across social networks";
+    license = licenses.mit;
+    mainProgram = "sherlock";
+    maintainers = with maintainers; [ applePrincess ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/shisho/default.nix b/nixpkgs/pkgs/tools/security/shisho/default.nix
new file mode 100644
index 000000000000..5a5995f5da3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/shisho/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, rustfmt
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shisho";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "flatt-security";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-G7sHaDq+F5lXNaF1sSLUecdjZbCejJE79P4AQifKdFY=";
+    fetchSubmodules = true;
+  };
+  cargoSha256 = "sha256-xd4andytmDMOIT+3DkmUC9fkxxGJ6yRY2WSdnGB6ZwY=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    # required to build serde-sarif dependency
+    rustfmt
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd shisho \
+      --bash <($out/bin/shisho completion bash) \
+      --fish <($out/bin/shisho completion fish) \
+      --zsh <($out/bin/shisho completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/shisho --help
+    $out/bin/shisho --version | grep "${version}"
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://docs.shisho.dev/shisho/";
+    changelog = "https://docs.shisho.dev/changelog/";
+    description = "Lightweight static analyzer for several programming languages";
+    longDescription = ''
+      Shisho is a lightweight static code analyzer designed for developers and
+      is the core engine for Shisho products. It is, so to speak, like a
+      pluggable and configurable linter; it gives developers a way to codify
+      your domain knowledge over your code as rules. With powerful automation
+      and integration capabilities, the rules will help you find and fix issues
+      semiautomatically.
+    '';
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sigma-cli/default.nix b/nixpkgs/pkgs/tools/security/sigma-cli/default.nix
new file mode 100644
index 000000000000..897fdfcb2f29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sigma-cli/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "sigma-cli";
+  version = "1.0.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "SigmaHQ";
+    repo = "sigma-cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-+6+xTc9XGsPxK3OsiA4dj2ORgC0PQtZsZ5a6STwmfcg=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace '= "^' '= ">='
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    colorama
+    prettytable
+    pysigma
+    pysigma-backend-elasticsearch
+    pysigma-backend-insightidr
+    pysigma-backend-opensearch
+    pysigma-backend-qradar
+    pysigma-backend-splunk
+    pysigma-pipeline-crowdstrike
+    pysigma-pipeline-sysmon
+    pysigma-pipeline-windows
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    "test_plugin_list"
+    "test_plugin_list_filtered"
+    "test_plugin_list_search"
+    "test_plugin_install_notexisting"
+    "test_plugin_install"
+    "test_plugin_uninstall"
+    # Tests require network access
+    "test_check_with_issues"
+    "test_plugin_show_identifier"
+    "test_plugin_show_nonexisting"
+    "test_plugin_show_uuid"
+    # Tests compare STDOUT results
+    "test_check_valid"
+    "test_check_stdin"
+    "test_check_exclude"
+  ];
+
+  pythonImportsCheck = [
+    "sigma.cli"
+  ];
+
+  meta = with lib; {
+    description = "Sigma command line interface";
+    homepage = "https://github.com/SigmaHQ/sigma-cli";
+    changelog = "https://github.com/SigmaHQ/sigma-cli/releases/tag/v${version}";
+    license = with licenses; [ lgpl21Plus ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "sigma";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/signify/default.nix b/nixpkgs/pkgs/tools/security/signify/default.nix
new file mode 100644
index 000000000000..645cb010bdf3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/signify/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, libbsd, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "signify";
+  version = "31";
+
+  src = fetchFromGitHub {
+    owner = "aperezdc";
+    repo = "signify";
+    rev = "v${version}";
+    sha256 = "sha256-y9jWG1JJhYCn6e5E2qjVqK8nmZpktiB7d9e9uP+3DLo=";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libbsd ];
+
+  postPatch = ''
+    substituteInPlace Makefile --replace "shell pkg-config" "shell $PKG_CONFIG"
+  '';
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "OpenBSD signing tool";
+    longDescription = ''
+      OpenBSDs signing tool, which uses the Ed25519 public key signature system
+      for fast signing and verification of messages using small public keys.
+    '';
+    homepage = "https://www.tedunangst.com/flak/post/signify";
+    license = licenses.isc;
+    maintainers = [ maintainers.rlupton20 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/signing-party/default.nix b/nixpkgs/pkgs/tools/security/signing-party/default.nix
new file mode 100644
index 000000000000..e08632154385
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/signing-party/default.nix
@@ -0,0 +1,226 @@
+{ lib, stdenv, fetchFromGitLab, autoconf, automake, makeWrapper
+, python3, perl, perlPackages
+, libmd, gnupg, which, getopt, libpaper, nettools, qprint
+, sendmailPath ? "/run/wrappers/bin/sendmail" }:
+
+let
+  # All runtime dependencies from the CPAN graph:
+  # https://widgets.stratopan.com/wheel?q=GnuPG-Interface-0.52&runtime=1&fs=1
+  GnuPGInterfaceRuntimeDependencies = with perlPackages; [
+    strictures ClassMethodModifiers DataPerl DevelGlobalDestruction ExporterTiny
+    GnuPGInterface ListMoreUtils ModuleRuntime Moo MooXHandlesVia MooXlate
+    RoleTiny SubExporterProgressive SubQuote TypeTiny
+  ];
+in stdenv.mkDerivation rec {
+  pname = "signing-party";
+  version = "2.11";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "signing-party-team";
+    repo = "signing-party";
+    rev = "v${version}";
+    sha256 = "1aig5ssabzbk4mih7xd04vgr931bw0flbi8dz902wlr610gyv5s5";
+  };
+
+  # TODO: Get this patch upstream...
+  patches = [ ./gpgwrap_makefile.patch ];
+
+  postPatch = ''
+    substituteInPlace gpg-mailkeys/gpg-mailkeys --replace \
+      "/usr/sbin/sendmail" "${sendmailPath}"
+  '';
+
+  # One can use the following command to find all relevant Makefiles:
+  # grep -R '$(DESTDIR)/usr' | cut -d: -f1 | sort -u | grep -v 'debian/rules'
+  preBuild = ''
+    substituteInPlace gpgsigs/Makefile --replace '$(DESTDIR)/usr' "$out"
+    substituteInPlace keyanalyze/Makefile --replace '$(DESTDIR)/usr' "$out"
+    substituteInPlace keylookup/Makefile --replace '$(DESTDIR)/usr' "$out"
+    substituteInPlace sig2dot/Makefile --replace '$(DESTDIR)/usr' "$out"
+    substituteInPlace springgraph/Makefile --replace '$(DESTDIR)/usr' "$out"
+  '';
+
+  # Perl is required for it's pod2man.
+  # Python and Perl are required for patching the script interpreter paths.
+  nativeBuildInputs = [ autoconf automake makeWrapper ];
+  buildInputs = [ python3 perl perlPackages.GnuPGInterface libmd gnupg ];
+
+  postInstall = ''
+    # Install all tools which aren't handled by 'make install'.
+    # TODO: Fix upstream...!
+
+    # caff: CA - Fire and Forget signs and mails a key
+    install -D -m555 caff/caff $out/bin/caff;
+    install -D -m444 caff/caff.1 $out/share/man/man1/caff.1;
+
+    # pgp-clean: removes all non-self signatures from key
+    install -D -m555 caff/pgp-clean $out/bin/pgp-clean;
+    install -D -m444 caff/pgp-clean.1 $out/share/man/man1/pgp-clean.1;
+
+    # pgp-fixkey: removes broken packets from keys
+    install -D -m555 caff/pgp-fixkey $out/bin/pgp-fixkey;
+    install -D -m444 caff/pgp-fixkey.1 $out/share/man/man1/pgp-fixkey.1;
+
+    # gpg-mailkeys: simply mail out a signed key to its owner
+    install -D -m555 gpg-mailkeys/gpg-mailkeys $out/bin/gpg-mailkeys;
+    install -D -m444 gpg-mailkeys/gpg-mailkeys.1 $out/share/man/man1/gpg-mailkeys.1;
+
+    # gpg-key2ps: generate PostScript file with fingerprint paper slips
+    install -D -m555 gpg-key2ps/gpg-key2ps $out/bin/gpg-key2ps;
+    install -D -m444 gpg-key2ps/gpg-key2ps.1 $out/share/man/man1/gpg-key2ps.1;
+
+    # gpgdir: recursive directory encryption tool
+    install -D -m555 gpgdir/gpgdir $out/bin/gpgdir;
+    install -D -m444 gpgdir/gpgdir.1 $out/share/man/man1/gpgdir.1;
+
+    # gpglist: show who signed which of your UIDs
+    install -D -m555 gpglist/gpglist $out/bin/gpglist;
+    install -D -m444 gpglist/gpglist.1 $out/share/man/man1/gpglist.1;
+
+    # gpgsigs: annotates list of GnuPG keys with already done signatures
+    # The manual page is not handled by 'make install'
+    install -D -m444 gpgsigs/gpgsigs.1 $out/share/man/man1/gpgsigs.1;
+
+    # gpgparticipants: create list of party participants for the organiser
+    install -D -m555 gpgparticipants/gpgparticipants $out/bin/gpgparticipants;
+    install -D -m444 gpgparticipants/gpgparticipants.1 $out/share/man/man1/gpgparticipants.1;
+    install -D -m555 gpgparticipants/gpgparticipants-prefill $out/bin/gpgparticipants-prefill;
+    install -D -m444 gpgparticipants/gpgparticipants-prefill.1 $out/share/man/man1/gpgparticipants-prefill.1;
+    install -D -m555 gpgparticipants/gpgparticipants-filter $out/bin/gpgparticipants-filter;
+    install -D -m444 gpgparticipants/gpgparticipants-filter.1 $out/share/man/man1/gpgparticipants-filter.1;
+
+    # gpgwrap: a passphrase wrapper
+    install -D -m555 gpgwrap/bin/gpgwrap $out/bin/gpgwrap;
+    install -D -m444 gpgwrap/doc/gpgwrap.1 $out/share/man/man1/gpgwrap.1;
+
+    # keyanalyze: minimum signing distance (MSD) analysis on keyrings
+    # Only the binaries are handled by 'make install'
+    install -D -m444 keyanalyze/keyanalyze.1 $out/share/man/man1/keyanalyze.1;
+    install -D -m444 keyanalyze/pgpring/pgpring.1 $out/share/man/man1/pgpring.1;
+    install -D -m444 keyanalyze/process_keys.1 $out/share/man/man1/process_keys.1;
+
+    # keylookup: ncurses wrapper around gpg --search
+    # Handled by 'make install'
+
+    # sig2dot: converts a list of GnuPG signatures to a .dot file
+    # Handled by 'make install'
+
+    # springgraph: creates a graph from a .dot file
+    # Handled by 'make install'
+
+    # keyart: creates a random ASCII art of a PGP key file
+    install -D -m555 keyart/keyart $out/bin/keyart;
+    install -D -m444 keyart/doc/keyart.1 $out/share/man/man1/keyart.1;
+
+    # gpg-key2latex: generate LaTeX file with fingerprint paper slips
+    install -D -m555 gpg-key2latex/gpg-key2latex $out/bin/gpg-key2latex;
+    install -D -m444 gpg-key2latex/gpg-key2latex.1 $out/share/man/man1/gpg-key2latex.1;
+  '';
+
+  postFixup = ''
+    # Add the runtime dependencies for all programs (but mainly for the Perl
+    # scripts)
+
+    wrapProgram $out/bin/caff --set PERL5LIB \
+      ${with perlPackages; makePerlPath ([
+        TextTemplate MIMETools MailTools TimeDate NetIDNEncode ]
+        ++ GnuPGInterfaceRuntimeDependencies)} \
+      --prefix PATH ":" \
+      "${lib.makeBinPath [ nettools gnupg ]}"
+
+    wrapProgram $out/bin/gpg-key2latex --set PERL5LIB \
+      ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
+      --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg libpaper ]}"
+
+    wrapProgram $out/bin/gpg-key2ps --prefix PATH ":" \
+      "${lib.makeBinPath [ which gnupg libpaper ]}"
+
+    wrapProgram $out/bin/gpg-mailkeys --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg qprint ]}"
+
+    wrapProgram $out/bin/gpgdir --set PERL5LIB \
+      ${with perlPackages; makePerlPath ([
+        TermReadKey ]
+        ++ GnuPGInterfaceRuntimeDependencies)} \
+      --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/gpglist --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/gpgparticipants --prefix PATH ":" \
+      "${lib.makeBinPath [ getopt gnupg ]}"
+
+#    wrapProgram $out/bin/gpgparticipants-prefill
+
+    wrapProgram $out/bin/gpgparticipants-filter --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/gpgsigs --set PERL5LIB \
+      ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
+      --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/gpgwrap --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg ]}"
+
+#    wrapProgram $out/bin/keyanalyze --set PERL5LIB \
+
+    wrapProgram $out/bin/keyart --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/keylookup --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/pgp-clean --set PERL5LIB \
+      ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
+      --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/pgp-fixkey --set PERL5LIB \
+      ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
+      --prefix PATH ":" \
+      "${lib.makeBinPath [ gnupg ]}"
+
+#    wrapProgram $out/bin/pgpring
+
+#    wrapProgram $out/bin/process_keys
+
+     # Upstream-Bug: Seems like sig2dot doesn't work with 2.1 (modern) anymore,
+     # please use 2.0 (stable) instead.
+#    wrapProgram $out/bin/sig2dot
+
+    wrapProgram $out/bin/springgraph --set PERL5LIB \
+      ${with perlPackages; makePerlPath [ GD ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://salsa.debian.org/signing-party-team/signing-party";
+    description = "A collection of several projects relating to OpenPGP";
+    longDescription = ''
+      This is a collection of several projects relating to OpenPGP.
+
+      * caff: CA - Fire and Forget signs and mails a key
+      * pgp-clean: removes all non-self signatures from key
+      * pgp-fixkey: removes broken packets from keys
+      * gpg-mailkeys: simply mail out a signed key to its owner
+      * gpg-key2ps: generate PostScript file with fingerprint paper slips
+      * gpgdir: recursive directory encryption tool
+      * gpglist: show who signed which of your UIDs
+      * gpgsigs: annotates list of GnuPG keys with already done signatures
+      * gpgparticipants: create list of party participants for the organiser
+      * gpgwrap: a passphrase wrapper
+      * keyanalyze: minimum signing distance (MSD) analysis on keyrings
+      * keylookup: ncurses wrapper around gpg --search
+      * sig2dot: converts a list of GnuPG signatures to a .dot file
+      * springgraph: creates a graph from a .dot file
+      * keyart: creates a random ASCII art of a PGP key file
+      * gpg-key2latex: generate LaTeX file with fingerprint paper slips
+    '';
+    license = with licenses; [ bsd2 bsd3 gpl2 gpl2Plus gpl3Plus ];
+    maintainers = with maintainers; [ primeos ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/signing-party/gpgwrap_makefile.patch b/nixpkgs/pkgs/tools/security/signing-party/gpgwrap_makefile.patch
new file mode 100644
index 000000000000..4beaf5b80887
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/signing-party/gpgwrap_makefile.patch
@@ -0,0 +1,16 @@
+--- a/gpgwrap/Makefile	2015-06-03 16:24:48.723129144 +0200
++++ b/gpgwrap/Makefile	2015-06-03 16:24:11.639744346 +0200
+@@ -1,9 +1,12 @@
+ MAKE=make
+ 
+-.PHONY: all clean
++.PHONY: all clean install
+ 
+ all:
+ 	cd src && ${MAKE} all DIET="${DIET}"
+ 
++install:
++
++
+ clean:
+ 	cd src && ${MAKE} clean
diff --git a/nixpkgs/pkgs/tools/security/silenthound/default.nix b/nixpkgs/pkgs/tools/security/silenthound/default.nix
new file mode 100644
index 000000000000..f2915c447675
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/silenthound/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "silenthound";
+  version = "unstable-2022-09-02";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "layer8secure";
+    repo = "SilentHound";
+    rev = "44d361f6c95b79bd848603c8050af86db3d072b0";
+    hash = "sha256-6JcU6FIE+9fsMawI1RSNQyx9ubjxmchEKmeg6/kmI4s=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    python-ldap
+  ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD $pname.py $out/bin/$pname
+
+    runHook postInstall
+  '';
+
+  # Only script available
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to enumerate an Active Directory Domain";
+    homepage = "https://github.com/layer8secure/SilentHound";
+    # Unknown license, https://github.com/layer8secure/SilentHound/issues/1
+    license = licenses.unfree;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "silenthound";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/simple-tpm-pk11/default.nix b/nixpkgs/pkgs/tools/security/simple-tpm-pk11/default.nix
new file mode 100644
index 000000000000..7d879aa497de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/simple-tpm-pk11/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, trousers, openssl, opencryptoki, autoreconfHook, libtool }:
+
+stdenv.mkDerivation rec {
+  pname = "simple-tpm-pk11";
+  version = "0.06";
+
+  src = fetchFromGitHub {
+    owner = "ThomasHabets";
+    repo = "simple-tpm-pk11";
+    rev = version;
+    sha256 = "0vpbaklr4r1a2am0pqcm6m41ph22mkcrq33y8ab5h8qkhkvhd6a6";
+  };
+
+  nativeBuildInputs = [ autoreconfHook libtool ];
+  buildInputs = [ trousers openssl opencryptoki ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Simple PKCS11 provider for TPM chips";
+    longDescription = ''
+      A simple library for using the TPM chip to secure SSH keys.
+    '';
+    homepage    = "https://github.com/ThomasHabets/simple-tpm-pk11";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sipvicious/default.nix b/nixpkgs/pkgs/tools/security/sipvicious/default.nix
new file mode 100644
index 000000000000..1167d40e4327
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sipvicious/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+}:
+
+buildPythonApplication rec {
+  pname = "sipvicious";
+  version = "0.3.4";
+
+  src = fetchFromGitHub {
+    owner = "EnableSecurity";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-O8/9Vz/u8BoF1dfGceOJdzPPYLfkdBp2DkwA5WQ3dgo=";
+  };
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "sipvicious" ];
+
+  meta = with lib; {
+    description = " Set of tools to audit SIP based VoIP systems";
+    homepage = "https://github.com/EnableSecurity/sipvicious";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sirikali/default.nix b/nixpkgs/pkgs/tools/security/sirikali/default.nix
new file mode 100644
index 000000000000..6ae689d95fd4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sirikali/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, qtbase
+, libpwquality
+, hicolor-icon-theme
+, fetchFromGitHub
+, wrapQtAppsHook
+, cmake
+, pkg-config
+, libgcrypt
+, cryfs
+, encfs
+, fscrypt-experimental
+, gocryptfs
+, securefs
+, sshfs
+, libsecret
+, kwallet
+, withKWallet ? true
+, withLibsecret ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sirikali";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "mhogomchungu";
+    repo = "sirikali";
+    rev = version;
+    hash = "sha256-1bY8cCMMK4Jie4+9c7eUEBrPEYDaOqFHZ5252TPSotA=";
+  };
+
+  buildInputs = [
+    qtbase
+    libpwquality
+    hicolor-icon-theme
+    libgcrypt
+    cryfs
+    encfs
+    fscrypt-experimental
+    gocryptfs
+    securefs
+    sshfs
+  ]
+  ++ lib.optionals withKWallet [ libsecret ]
+  ++ lib.optionals withLibsecret [ kwallet ]
+  ;
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    cmake
+    pkg-config
+  ];
+
+  qtWrapperArgs = [
+    ''--prefix PATH : ${lib.makeBinPath [
+      cryfs
+      encfs
+      fscrypt-experimental
+      gocryptfs
+      securefs
+      sshfs
+    ]}''
+  ];
+
+  postPatch = ''
+    substituteInPlace "src/engines.cpp" --replace "/sbin/" "/run/wrappers/bin/"
+  '';
+
+  doCheck = true;
+
+  cmakeFlags = [
+    "-DINTERNAL_LXQT_WALLET=false"
+    "-DNOKDESUPPORT=${if withKWallet then "false" else "true"}"
+    "-DNOSECRETSUPPORT=${if withLibsecret then "false" else "true"}"
+    "-DQT5=true"
+  ];
+
+  meta = with lib; {
+    description = "A Qt/C++ GUI front end to sshfs, ecryptfs-simple, cryfs, gocryptfs, securefs, fscrypt and encfs";
+    homepage = "https://github.com/mhogomchungu/sirikali";
+    changelog = "https://github.com/mhogomchungu/sirikali/blob/${src.rev}/changelog";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ linuxissuper ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/slowhttptest/default.nix b/nixpkgs/pkgs/tools/security/slowhttptest/default.nix
new file mode 100644
index 000000000000..94e60a6a0084
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/slowhttptest/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slowhttptest";
+  version = "1.9.0";
+
+  src = fetchFromGitHub {
+    owner = "shekyan";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-rIvd3LykVAbDXtFWZ1EQ+QKeALzqwK6pq7In0BsCOFo=";
+  };
+
+  buildInputs = [ openssl ];
+
+  meta = with lib; {
+    description = "Application Layer DoS attack simulator";
+    homepage = "https://github.com/shekyan/slowhttptest";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "slowhttptest";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/slsa-verifier/default.nix b/nixpkgs/pkgs/tools/security/slsa-verifier/default.nix
new file mode 100644
index 000000000000..5a6ab18a49ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/slsa-verifier/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "slsa-verifier";
+  version = "2.4.1";
+
+  src = fetchFromGitHub {
+    owner = "slsa-framework";
+    repo = "slsa-verifier";
+    rev = "v${version}";
+    hash = "sha256-swyBDJTv6Sp65Q46QGm/N/kIfGfln+vBTYXVOI9CAOE=";
+  };
+
+  vendorHash = "sha256-rCGj2o59US2t/ckqXirEDgYn9dGvVSzMVcFEZosasBc=";
+
+  CGO_ENABLED = 0;
+  GO111MODULE = "on";
+  GOFLAGS = "-trimpath";
+
+  subPackages = [ "cli/slsa-verifier" ];
+
+  tags = [ "netgo" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X sigs.k8s.io/release-utils/version.gitVersion=${version}"
+  ];
+
+  doCheck = false;
+
+  meta = {
+    homepage = "https://github.com/slsa-framework/slsa-verifier";
+    changelog = "https://github.com/slsa-framework/slsa-verifier/releases/tag/v${version}";
+    description = "Verify provenance from SLSA compliant builders";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ developer-guy mlieberman85 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/smbmap/default.nix b/nixpkgs/pkgs/tools/security/smbmap/default.nix
new file mode 100644
index 000000000000..698fd8b19448
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/smbmap/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "smbmap";
+  version = "1.10.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ShawnDEvans";
+    repo = "smbmap";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-6+kO2Wfz3gGABS4fGxoebCubzvFAaJIGnMPA+k1mckc=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    impacket
+    pyasn1
+    pycrypto
+    configparser
+    termcolor
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "smbmap"
+  ];
+
+  meta = with lib; {
+    description = "SMB enumeration tool";
+    homepage = "https://github.com/ShawnDEvans/smbmap";
+    changelog = "https://github.com/ShawnDEvans/smbmap/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/smbscan/default.nix b/nixpkgs/pkgs/tools/security/smbscan/default.nix
new file mode 100644
index 000000000000..ea2a99b64bb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/smbscan/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "smbscan";
+  version = "unstable-2022-05-26";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "jeffhacks";
+    repo = pname;
+    rev = "1b19d6040cab279b97bf002934bf6f8b34d6a8b4";
+    hash = "sha256-cL1mnyzIbHB/X4c7sZKVv295LNnjqwR8TZBMe9s/peg=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    impacket
+    python-slugify
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD smbscan.py $out/bin/smbscan
+    install -vd $out/${python3.sitePackages}/
+    cp {scan_internals,scan,setup,local_logging,arg_parser}.py $out/${python3.sitePackages}
+    install -vd $out/${python3.sitePackages}/wordlists/
+    cp wordlists/pattern* $out/${python3.sitePackages}/wordlists
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool to enumerate file shares";
+    homepage = "https://github.com/jeffhacks/smbscan";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "smbscan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sn0int/default.nix b/nixpkgs/pkgs/tools/security/sn0int/default.nix
new file mode 100644
index 000000000000..66f89f77e8ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sn0int/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, libseccomp
+, libsodium
+, pkg-config
+, pkgs
+, sqlite
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sn0int";
+  version = "0.26.0";
+
+  src = fetchFromGitHub {
+    owner = "kpcyrd";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ze4OFKUuc/t6tXgmoWFFDjpAQraSY6RIekkcDBctPJo=";
+  };
+
+  cargoHash = "sha256-PAKmoifqB1YC02fVF2SRbXAAGrMcB+Wlvr3FwuqmPVU=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libsodium
+    sqlite
+  ] ++ lib.optionals stdenv.isLinux [
+    libseccomp
+  ] ++ lib.optionals stdenv.isDarwin [
+    pkgs.darwin.apple_sdk.frameworks.Security
+  ];
+
+  # One of the dependencies (chrootable-https) tries to read "/etc/resolv.conf"
+  # in "checkPhase", hence fails in sandbox of "nix".
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Semi-automatic OSINT framework and package manager";
+    homepage = "https://github.com/kpcyrd/sn0int";
+    changelog = "https://github.com/kpcyrd/sn0int/releases/tag/v${version}";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab xrelkd ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/snallygaster/default.nix b/nixpkgs/pkgs/tools/security/snallygaster/default.nix
new file mode 100644
index 000000000000..662b46700c78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/snallygaster/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "snallygaster";
+  version = "0.0.12";
+
+  src = fetchFromGitHub {
+    owner = "hannob";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-JXuRCUWpoGhBbU38XMEQovCiVfbyBMJ+SIrt3iqFuAo=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    urllib3
+    beautifulsoup4
+    dnspython
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+  ];
+
+  pytestFlagsArray = [
+    # we are not interested in linting the project
+    "--ignore=tests/test_codingstyle.py"
+  ];
+
+  meta = with lib; {
+    description = "Tool to scan for secret files on HTTP servers";
+    homepage = "https://github.com/hannob/snallygaster";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/snow/default.nix b/nixpkgs/pkgs/tools/security/snow/default.nix
new file mode 100644
index 000000000000..6dce95f8cf0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/snow/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "snow";
+  version = "20130616";
+
+  src = fetchurl {
+    url = "https://web.archive.org/web/20200304125913if_/http://darkside.com.au/snow/snow-${version}.tar.gz";
+    sha256 = "0r9q45y55z4i0askkxmxrx0jr1620ypd870vz0hx2a6n9skimdy0";
+  };
+
+  makeFlags = [ "CFLAGS=-O2" ];
+
+  installPhase = ''
+    install -Dm755 snow -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Conceal messages in ASCII text by appending whitespace to the end of lines";
+    homepage = "http://www.darkside.com.au/snow/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ siraben ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/snowcat/default.nix b/nixpkgs/pkgs/tools/security/snowcat/default.nix
new file mode 100644
index 000000000000..429564f91f1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/snowcat/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "snowcat";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "praetorian-inc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-EulQYGOMIh952e4Xp13hT/HMW3qP1QXYtt5PEej1VTY=";
+  };
+  vendorHash = "sha256-D6ipwGMxT0B3uYUzg6Oo2TYnsOVBY0mYO5lC7vtVPc0=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/praetorian-inc/snowcat";
+    changelog = "https://github.com/praetorian-inc/snowcat/releases/tag/v${version}";
+    description = "A tool to audit the istio service mesh";
+    longDescription = ''
+      Snowcat gathers and analyzes the configuration of an Istio cluster and
+      audits it for potential violations of security best practices.
+
+      There are two main modes of operation for Snowcat. With no positional
+      argument, Snowcat will assume it is running inside of a cluster enabled
+      with Istio, and begin to enumerate the required data. Optionally, you can
+      point snowcat at a directory containing Kubernets YAML files.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/snowcrash/default.nix b/nixpkgs/pkgs/tools/security/snowcrash/default.nix
new file mode 100644
index 000000000000..69d310afb9f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/snowcrash/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "snowcrash";
+  version = "unstable-2022-08-15";
+
+  src = fetchFromGitHub {
+    owner = "redcode-labs";
+    repo = "SNOWCRASH";
+    rev = "32e62f9ff7d3dda9fac8acfc56176f1f2a70d066";
+    hash = "sha256-mURF/VUqygd5bLJdmbwnZq003IXJKn+k8HtS+CxoQJQ=";
+  };
+
+  vendorHash = "sha256-WTDE+MYL8CjeNvGHRNiMgBFrydDJWIcG8TYvbQTH/6o=";
+
+  subPackages = [ "." ];
+
+  postFixup = lib.optionals (!stdenv.isDarwin) ''
+    mv $out/bin/SNOWCRASH $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    description = "Polyglot payload generator";
+    homepage = "https://github.com/redcode-labs/SNOWCRASH";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ] ++ teams.redcodelabs.members;
+    mainProgram = "SNOWCRASH";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/social-engineer-toolkit/default.nix b/nixpkgs/pkgs/tools/security/social-engineer-toolkit/default.nix
new file mode 100644
index 000000000000..4f2d5895cc78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/social-engineer-toolkit/default.nix
@@ -0,0 +1,70 @@
+{ lib, fetchFromGitHub, python3Packages, makeWrapper, metasploit }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "social-engineer-toolkit";
+  version = "8.0.3";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "trustedsec";
+    repo = pname;
+    rev = version;
+    sha256 = "ePbmUvnzLO0Wfuhym3bNSPV1x8rcCPqKMeWSRcbJGAo=";
+  };
+
+  postPatch = ''
+    substituteInPlace setoolkit \
+      --replace "src/core/config.baseline" "$out/share/social-engineer-toolkit/src/core/config.baseline"
+    substituteInPlace src/core/setcore.py \
+      --replace '"src/core/set.version"' "\"$out/share/social-engineer-toolkit/src/core/set.version\"" \
+      --replace "/opt/metasploit-framework" "${metasploit}/bin"
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pexpect
+    pycrypto
+    requests
+    pyopenssl
+    pefile
+    impacket
+    qrcode
+    pillow
+    # Has been abandoned upstream. Features using this library are broken
+    # pymssql
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dt $out/bin setoolkit seautomate seproxy
+    mkdir -p $out/share/social-engineer-toolkit
+    cp -r modules readme src $out/share/social-engineer-toolkit/
+
+    runHook postInstall
+  '';
+
+  makeWrapperArgs = [
+    "--chdir ${placeholder "out"}/share/social-engineer-toolkit"
+    "--prefix PYTHONPATH : \"${placeholder "out"}/share/social-engineer-toolkit\""
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Open-source penetration testing framework designed for social engineering";
+    longDescription = ''
+      The Social-Engineer Toolkit is an open-source penetration testing framework
+      designed for social engineering. SET has a number of custom attack vectors
+      that allow you to make a believable attack quickly.
+    '';
+    homepage = "https://github.com/trustedsec/social-engineer-toolkit";
+    mainProgram = "setoolkit";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ emilytrau ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/softhsm/default.nix b/nixpkgs/pkgs/tools/security/softhsm/default.nix
new file mode 100644
index 000000000000..648a4bc6515b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/softhsm/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, botan2, libobjc, Security }:
+
+stdenv.mkDerivation rec {
+
+  pname = "softhsm";
+  version = "2.6.1";
+
+  src = fetchurl {
+    url = "https://dist.opendnssec.org/source/${pname}-${version}.tar.gz";
+    hash = "sha256-YSSUcwVLzRgRUZ75qYmogKe9zDbTF8nCVFf8YU30dfI=";
+  };
+
+  configureFlags = [
+    "--with-crypto-backend=botan"
+    "--with-botan=${lib.getDev botan2}"
+    "--sysconfdir=$out/etc"
+    "--localstatedir=$out/var"
+    ];
+
+  propagatedBuildInputs =
+    lib.optionals stdenv.isDarwin [ libobjc Security ];
+
+  buildInputs = [ botan2 ];
+
+  postInstall = "rm -rf $out/var";
+
+  meta = with lib; {
+    homepage = "https://www.opendnssec.org/softhsm";
+    description = "Cryptographic store accessible through a PKCS #11 interface";
+    longDescription = "
+      SoftHSM provides a software implementation of a generic
+      cryptographic device with a PKCS#11 interface, which is of
+      course especially useful in environments where a dedicated hardware
+      implementation of such a device - for instance a Hardware
+      Security Module (HSM) or smartcard - is not available.
+
+      SoftHSM follows the OASIS PKCS#11 standard, meaning it should be
+      able to work with many cryptographic products. SoftHSM is a
+      programme of The Commons Conservancy.
+    ";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.leenaars ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/solo2-cli/default.nix b/nixpkgs/pkgs/tools/security/solo2-cli/default.nix
new file mode 100644
index 000000000000..417afd93a99c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/solo2-cli/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, pcsclite
+, udev
+, PCSC
+, IOKit
+, CoreFoundation
+, AppKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "solo2-cli";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "solokeys";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-7tpO5ir42mIKJXD0NJzEPXi/Xe6LdyEeBQWNfOdgX5I=";
+  };
+
+  cargoHash = "sha256-X+IEeztSL312Yq9Loi3cNJuVfSGk/tRRBCsy0Juji7Y=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = [ ]
+    ++ lib.optionals stdenv.isLinux [ pcsclite udev ]
+    ++ lib.optionals stdenv.isDarwin [ PCSC IOKit CoreFoundation AppKit ];
+
+  postInstall = ''
+    install -D 70-solo2.rules $out/lib/udev/rules.d/70-solo2.rules
+    installShellCompletion target/*/release/solo2.{bash,fish}
+    installShellCompletion --zsh target/*/release/_solo2
+  '';
+
+  doCheck = true;
+
+  buildFeatures = [ "cli" ];
+
+  meta = with lib; {
+    description = "A CLI tool for managing SoloKeys' Solo2 USB security keys";
+    homepage = "https://github.com/solokeys/solo2-cli";
+    license = with licenses; [ asl20 mit ]; # either at your option
+    maintainers = with maintainers; [ lukegb ];
+    mainProgram = "solo2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sonar-scanner-cli/default.nix b/nixpkgs/pkgs/tools/security/sonar-scanner-cli/default.nix
new file mode 100644
index 000000000000..553019299ba7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sonar-scanner-cli/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, fetchurl, unzip, jre }:
+
+let
+
+  version = "4.7.0.2747";
+
+  sonarScannerArchPackage = {
+    "x86_64-linux" = {
+      url = "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${version}-linux.zip";
+      sha256 = "0qy97lcn9nfwg0x32v9x5kh5jswnjyw3wpvxj45z7cddlj2is4iy";
+    };
+    "x86_64-darwin" = {
+      url = "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${version}-macosx.zip";
+      sha256 = "0f8km7wqkw09g01l03kcrjgvq7b6xclzpvb5r64ymsmrc39p0ylp";
+    };
+  };
+
+in stdenv.mkDerivation rec {
+  inherit version;
+  pname = "sonar-scanner-cli";
+
+  src = fetchurl sonarScannerArchPackage.${stdenv.hostPlatform.system};
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p $out/lib
+    cp -r lib/* $out/lib/
+    mkdir -p $out/bin
+    cp bin/* $out/bin/
+    mkdir -p $out/conf
+    cp conf/* $out/conf/
+  '';
+
+  fixupPhase = ''
+    substituteInPlace $out/bin/sonar-scanner \
+      --replace "\$sonar_scanner_home/jre" "${lib.getBin jre}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/SonarSource/sonar-scanner-cli";
+    description = "SonarQube Scanner used to start code analysis";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ peterromfeldhk ];
+    platforms = builtins.attrNames sonarScannerArchPackage;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sops/default.nix b/nixpkgs/pkgs/tools/security/sops/default.nix
new file mode 100644
index 000000000000..1c1b05897360
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sops/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "sops";
+  version = "3.8.1";
+
+  src = fetchFromGitHub {
+    owner = "getsops";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-4K09wLV1+TvYTtvha6YyGhjlhEldWL1eVazNwcEhi3Q=";
+  };
+
+  vendorHash = "sha256-iRgLspYhwSVuL0yarPdjXCKfjK7TGDZeQCOcIYtNvzA=";
+
+  subPackages = [ "cmd/sops" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/getsops/sops/v3/version.Version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/getsops/sops";
+    description = "Simple and flexible tool for managing secrets";
+    changelog = "https://github.com/getsops/sops/blob/v${version}/CHANGELOG.rst";
+    mainProgram = "sops";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mpl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/spectre-cli/default.nix b/nixpkgs/pkgs/tools/security/spectre-cli/default.nix
new file mode 100644
index 000000000000..f06365de90b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/spectre-cli/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, cmake
+, libsodium
+, json_c
+, ncurses
+, libxml2
+, jq
+}:
+
+stdenv.mkDerivation rec {
+  pname = "spectre-cli";
+  version = "unstable-2022-02-05";
+
+  src = fetchFromGitLab {
+    owner = "spectre.app";
+    repo = "cli";
+    rev = "a5e7aab28f44b90e5bd1204126339a81f64942d2";
+    sha256 = "1hp4l1rhg7bzgx0hcai08rvcy6l9645sfngy2cr96l1bpypcld5i";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    libxml2
+    jq
+  ];
+
+  buildInputs = [
+    libsodium
+    json_c
+    ncurses
+  ];
+
+  cmakeFlags = [
+    "-DBUILD_SPECTRE_TESTS=ON"
+  ];
+
+  preConfigure = ''
+   echo "${version}" > VERSION
+
+    # The default buildPhase wants to create a ´build´ dir so we rename the build script to stop conflicts.
+    mv build build.sh
+  '';
+
+  # Some tests are expected to fail on ARM64
+  # See: https://gitlab.com/spectre.app/cli/-/issues/27#note_962950844
+  doCheck = !(stdenv.isLinux && stdenv.isAarch64);
+
+  checkPhase = ''
+    mv ../spectre-cli-tests ../spectre_tests.xml ./
+    patchShebangs spectre-cli-tests
+    export HOME=$(mktemp -d)
+
+    ./spectre-tests
+    ./spectre-cli-tests
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv spectre $out/bin
+  '';
+
+  meta = with lib; {
+    description = "A stateless cryptographic identity algorithm";
+    homepage = "https://spectre.app";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ emmabastas ];
+    mainProgram = "spectre";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/spectre-meltdown-checker/default.nix b/nixpkgs/pkgs/tools/security/spectre-meltdown-checker/default.nix
new file mode 100644
index 000000000000..529da4557915
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/spectre-meltdown-checker/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeBinaryWrapper
+, coreutils
+, binutils-unwrapped
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "spectre-meltdown-checker";
+  version = "0.46";
+
+  src = fetchFromGitHub {
+    owner = "speed47";
+    repo = "spectre-meltdown-checker";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-M4ngdtp2esZ+CSqZAiAeOnKtaK8Ra+TmQfMsr5q5gkg=";
+  };
+
+  prePatch = ''
+    substituteInPlace spectre-meltdown-checker.sh \
+      --replace /bin/echo ${coreutils}/bin/echo
+  '';
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 spectre-meltdown-checker.sh $out/bin/spectre-meltdown-checker
+    wrapProgram $out/bin/spectre-meltdown-checker \
+      --prefix PATH : ${lib.makeBinPath [ binutils-unwrapped ]}
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Spectre & Meltdown vulnerability/mitigation checker for Linux";
+    homepage = "https://github.com/speed47/spectre-meltdown-checker";
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.dotlambda ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/spire/default.nix b/nixpkgs/pkgs/tools/security/spire/default.nix
new file mode 100644
index 000000000000..abebc4e3e124
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/spire/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "spire";
+  version = "1.8.7";
+
+  outputs = [ "out" "agent" "server" ];
+
+  src = fetchFromGitHub {
+    owner = "spiffe";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-D6NNG//1rM7EIzawKdMA/8nloqMNAkF75YyFpHvxUkI=";
+  };
+
+  vendorHash = "sha256-bSQitqXTY1LMnpGkXAmDiDsMd0xZHrcr/Ms1F6avBKM=";
+
+  subPackages = [ "cmd/spire-agent" "cmd/spire-server" ];
+
+  # Usually either the agent or server is needed for a given use case, but not both
+  postInstall = ''
+    mkdir -vp $agent/bin $server/bin
+    mv -v $out/bin/spire-agent $agent/bin/
+    mv -v $out/bin/spire-server $server/bin/
+
+    ln -vs $agent/bin/spire-agent $out/bin/spire-agent
+    ln -vs $server/bin/spire-server $out/bin/spire-server
+  '';
+
+  meta = with lib; {
+    description = "The SPIFFE Runtime Environment";
+    homepage = "https://github.com/spiffe/spire";
+    changelog = "https://github.com/spiffe/spire/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jonringer fkautz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/spyre/default.nix b/nixpkgs/pkgs/tools/security/spyre/default.nix
new file mode 100644
index 000000000000..3ec659373c7b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/spyre/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, yara
+}:
+
+buildGoModule rec {
+  pname = "spyre";
+  version = "1.2.5";
+
+  src = fetchFromGitHub {
+    owner = "spyre-project";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-wlGZTMCJE6Ki5/6R6J9EJP06/S125BNNd/jNPYGwKNw=";
+  };
+
+  patches = [
+    # The following two patches come from https://github.com/spyre-project/spyre/pull/75
+    # and improve Darwin support.
+    (fetchpatch {
+      name = "syscall-to-x-sys-unix.patch";
+      url = "https://github.com/spyre-project/spyre/commit/8f08daf030c847de453613eb2eb1befdb7300921.patch";
+      hash = "sha256-oy8Y85IubJVQrt0kmGA1hidZapgCw2aB6F/gT7uQ6KA=";
+    })
+    (fetchpatch {
+      name = "darwin-skip-dir.patch";
+      url = "https://github.com/spyre-project/spyre/commit/12dea550bc4f3275f8f406c19216ad140733a6af.patch";
+      hash = "sha256-BXLGOshyGnllbkvsbbmdnqvRHwycrjI52oGWBoXXgL0=";
+    })
+  ];
+
+  vendorHash = "sha256-aoeAnyFotKWWaRZQsgQPwwmhih/1zfL9eBV/2r1VPBM=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    yara
+  ];
+
+  meta = with lib; {
+    description = "YARA-based IOC scanner";
+    homepage = "https://github.com/spyre-project/spyre";
+    license = with licenses; [ lgpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/srm/default.nix b/nixpkgs/pkgs/tools/security/srm/default.nix
new file mode 100644
index 000000000000..7cde2be4fbc5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/srm/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchsvn, autoreconfHook }:
+
+stdenv.mkDerivation {
+  pname = "srm";
+  version = "1.2.15-unstable-2017-12-18";
+
+  src = fetchsvn {
+    url = "svn://svn.code.sf.net/p/srm/srm/trunk/";
+    rev = "268";
+    sha256 = "sha256-bY8p6IS5zeByoe/uTmvBAaBN4Wu7J19dVSpbtqx4OeQ=";
+  };
+
+  patches = [ ./fix-output-in-verbose-mode.patch ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Delete files securely";
+    longDescription = ''
+      srm (secure rm) is a command-line compatible rm(1) which
+      overwrites file contents before unlinking. The goal is to
+      provide drop in security for users who wish to prevent recovery
+      of deleted information, even if the machine is compromised.
+    '';
+    homepage = "https://srm.sourceforge.net";
+    license = licenses.mit;
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/srm/fix-output-in-verbose-mode.patch b/nixpkgs/pkgs/tools/security/srm/fix-output-in-verbose-mode.patch
new file mode 100644
index 000000000000..966d7ba4612e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/srm/fix-output-in-verbose-mode.patch
@@ -0,0 +1,57 @@
+diff --git a/src/sunlink.c b/src/sunlink.c
+index 7050713..ffcb8d3 100644
+--- a/src/sunlink.c
++++ b/src/sunlink.c
+@@ -468,6 +468,8 @@ static int overwrite_selector(struct srm_target *srm)
+       if(overwrite_byte(srm, 5, 0x00) < 0) return -1;
+       if(overwrite_byte(srm, 6, 0xFF) < 0) return -1;
+       if(overwrite_random(srm, 7, 1) < 0) return -1;
++      if((srm->options&SRM_OPT_V) > 1)
++	printf("\n");
+     }
+   else if(srm->options & SRM_MODE_DOE)
+     {
+@@ -475,6 +477,8 @@ static int overwrite_selector(struct srm_target *srm)
+ 	error("US DoE mode");
+       if(overwrite_random(srm, 1, 2) < 0) return -1;
+       if(overwrite_bytes(srm, 3, 'D', 'o', 'E') < 0) return -1;
++      if((srm->options&SRM_OPT_V) > 1)
++	printf("\n");
+     }
+   else if(srm->options & SRM_MODE_OPENBSD)
+     {
+@@ -483,12 +487,16 @@ static int overwrite_selector(struct srm_target *srm)
+       if(overwrite_byte(srm, 1, 0xFF) < 0) return -1;
+       if(overwrite_byte(srm, 2, 0x00) < 0) return -1;
+       if(overwrite_byte(srm, 3, 0xFF) < 0) return -1;
++      if((srm->options&SRM_OPT_V) > 1)
++	printf("\n");
+     }
+   else if(srm->options & SRM_MODE_SIMPLE)
+     {
+       if((srm->options&SRM_OPT_V) > 1)
+ 	error("Simple mode");
+       if(overwrite_byte(srm, 1, 0x00) < 0) return -1;
++      if((srm->options&SRM_OPT_V) > 1)
++	printf("\n");
+     }
+   else if(srm->options & SRM_MODE_RCMP)
+     {
+@@ -497,6 +505,8 @@ static int overwrite_selector(struct srm_target *srm)
+       if(overwrite_byte(srm, 1, 0x00) < 0) return -1;
+       if(overwrite_byte(srm, 2, 0xFF) < 0) return -1;
+       if(overwrite_string(srm, 3, "RCMP") < 0) return -1;
++      if((srm->options&SRM_OPT_V) > 1)
++	printf("\n");
+     }
+   else
+     {
+@@ -535,6 +545,8 @@ static int overwrite_selector(struct srm_target *srm)
+       if(overwrite_random(srm, 32, 4) < 0) return -1;
+       /* if you want to backup your partition or shrink your vmware image having the file zero-ed gives best compression results. */
+       if(overwrite_byte(srm, 36, 0x00) < 0) return -1;
++      if((srm->options&SRM_OPT_V) > 1)
++	printf("\n");
+     }
+ #if 0
+   if((srm->options & SRM_OPT_V) > 1)
diff --git a/nixpkgs/pkgs/tools/security/ssdeep/default.nix b/nixpkgs/pkgs/tools/security/ssdeep/default.nix
new file mode 100644
index 000000000000..7647246369ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ssdeep/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "ssdeep";
+  version = "2.14.1";
+
+  src = fetchFromGitHub {
+    owner = "ssdeep-project";
+    repo = "ssdeep";
+    rev = "release-${version}";
+    sha256 = "1yx6yjkggshw5yl89m4kvyzarjdg2l3hs0bbjbrfzwp1lkfd8i0c";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  # remove forbidden references to $TMPDIR
+  preFixup = lib.optionalString stdenv.isLinux ''
+    patchelf --shrink-rpath --allowed-rpath-prefixes "$NIX_STORE" "$out"/bin/*
+  '';
+
+  meta = {
+    description = "A program for calculating fuzzy hashes";
+    homepage    = "http://www.ssdeep.sf.net";
+    license     = lib.licenses.gpl2;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ssh-audit/default.nix b/nixpkgs/pkgs/tools/security/ssh-audit/default.nix
new file mode 100644
index 000000000000..54ec4e8f4ee1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ssh-audit/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, nixosTests
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ssh-audit";
+  version = "3.1.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "jtesta";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-pO6qpY1gqE40bb7q8J/35Dd0XckoFAaIBwWjFsxFO3c=";
+  };
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+  ];
+
+  passthru.tests = {
+    inherit (nixosTests) ssh-audit;
+  };
+
+  meta = with lib; {
+    description = "Tool for ssh server auditing";
+    homepage = "https://github.com/jtesta/ssh-audit";
+    changelog = "https://github.com/jtesta/ssh-audit/releases/tag/v${version}";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ tv SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ssh-mitm/default.nix b/nixpkgs/pkgs/tools/security/ssh-mitm/default.nix
new file mode 100644
index 000000000000..9d40f86354b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ssh-mitm/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+      paramiko = super.paramiko.overridePythonAttrs (oldAttrs: rec {
+        version = "3.1.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          hash = "sha256-aVD6ymgZrNMhnUrmlKI8eofuONCE9wwXJLDA27i3V2k=";
+        };
+        patches = [ ];
+        propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [ python3.pkgs.icecream ];
+      });
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "ssh-mitm";
+  version = "3.0.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-koV7g6ZmrrXk60rrDP8BwrDZk3shiyJigQgNcb4BASE=";
+  };
+
+  propagatedBuildInputs = [
+    argcomplete
+    colored
+    packaging
+    paramiko
+    pytz
+    pyyaml
+    rich
+    setuptools
+    sshpubkeys
+  ];
+
+  # Module has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "sshmitm"
+  ];
+
+  meta = with lib; {
+    description = "Tool for SSH security audits";
+    homepage = "https://github.com/ssh-mitm/ssh-mitm";
+    changelog = "https://github.com/ssh-mitm/ssh-mitm/blob/${version}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ssh-to-age/default.nix b/nixpkgs/pkgs/tools/security/ssh-to-age/default.nix
new file mode 100644
index 000000000000..90ea4c9b7eb5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ssh-to-age/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "ssh-to-age";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "Mic92";
+    repo = "ssh-to-age";
+    rev = version;
+    sha256 = "sha256-cYSrosDFdueEJPQdDYCMObMPwQTvuXUBHXPO0rhehxk=";
+  };
+
+  vendorHash = "sha256-dmxFkoz/2qyUv2/I8bLFTYAfUcYdHjVYQgmg8xleIxA=";
+
+  checkPhase = ''
+    runHook preCheck
+    go test ./...
+    runHook postCheck
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Convert ssh private keys in ed25519 format to age keys";
+    homepage = "https://github.com/Mic92/ssh-to-age";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mic92 ];
+    mainProgram = "ssh-to-age";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ssh-to-pgp/default.nix b/nixpkgs/pkgs/tools/security/ssh-to-pgp/default.nix
new file mode 100644
index 000000000000..c8735cffd5f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ssh-to-pgp/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, buildGoModule, gnupg }:
+
+buildGoModule rec {
+  pname = "ssh-to-pgp";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "Mic92";
+    repo = "ssh-to-pgp";
+    rev = version;
+    sha256 = "sha256-SoHKBuI3ROfWTI45rFdMNkHVYHa5nX1A0/ljgGpF8NY=";
+  };
+
+  vendorHash = "sha256-sHvb6jRSMXIUv1D0dbTJWmETCaFr9BquNmcc8J06m/o=";
+
+  nativeCheckInputs = [ gnupg ];
+  checkPhase = ''
+    HOME=$TMPDIR go test .
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Convert ssh private keys to PGP";
+    homepage = "https://github.com/Mic92/ssh-to-pgp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sshchecker/default.nix b/nixpkgs/pkgs/tools/security/sshchecker/default.nix
new file mode 100644
index 000000000000..6ed76d0dd4e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sshchecker/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "sshchecker";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "lazytools";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-QMc64ynPLHQGsmDOsoChgmqmpRDyMYmmSAPwAEFBK40=";
+  };
+
+  vendorHash = "sha256-U5nZbo2iSKP3BnxT4lkR75QutcxZB5YLzXxT045TDaY=";
+
+  meta = with lib; {
+    description = "Dedicated SSH brute-forcing tool";
+    longDescription = ''
+      sshchecker is a fast dedicated SSH brute-forcing tool to check
+      SSH login on the giving IP list.
+    '';
+    homepage = "https://github.com/lazytools/sshchecker";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sshguard/default.nix b/nixpkgs/pkgs/tools/security/sshguard/default.nix
new file mode 100644
index 000000000000..18e93023d779
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sshguard/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, autoreconfHook, bison, flex}:
+
+stdenv.mkDerivation rec {
+  version = "2.4.3";
+  pname = "sshguard";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sshguard/${pname}-${version}.tar.gz";
+    sha256 = "sha256-ZAKd7/bekP3u+x9JfUFPDkBFB2aTqR2hpw63WV6X7+s=";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ autoreconfHook bison flex ];
+
+  configureFlags = [ "--sysconfdir=/etc" ];
+
+  meta = with lib; {
+    description = "Protects hosts from brute-force attacks";
+    longDescription = ''
+      SSHGuard can read log messages from various input sources. Log messages are parsed, line-by-line, for recognized patterns.
+      If an attack, such as several login failures within a few seconds, is detected, the offending IP is blocked.
+    '';
+    homepage = "https://sshguard.net";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ sargon ];
+    platforms = with platforms; linux ++ darwin ++ freebsd ++ netbsd ++ openbsd;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sshocker/default.nix b/nixpkgs/pkgs/tools/security/sshocker/default.nix
new file mode 100644
index 000000000000..bb8177ea3878
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sshocker/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "sshocker";
+  version = "0.3.4";
+
+  src = fetchFromGitHub {
+    owner = "lima-vm";
+    repo = "sshocker";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-IDbGRQSLQlT4lt2bextGYB4fJfbpLhPx3JF1eYDJ6gw=";
+  };
+
+  vendorHash = "sha256-kee5D80RjCVosts/Jd6WuvtiK/J5+79HsM5ITHs15xc=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/lima-vm/sshocker/pkg/version.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Tool for SSH, reverse sshfs and port forwarder";
+    homepage = "https://github.com/lima-vm/sshocker";
+    changelog = "https://github.com/lima-vm/sshocker/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sshuttle/default.nix b/nixpkgs/pkgs/tools/security/sshuttle/default.nix
new file mode 100644
index 000000000000..8a92dbceb184
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sshuttle/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, python3Packages
+, fetchPypi
+, installShellFiles
+, makeWrapper
+, sphinx
+, coreutils
+, iptables
+, nettools
+, openssh
+, procps
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sshuttle";
+  version = "1.1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-9aPtHlqxITx6bfhgr0HxqQOrLK+/73Hzcazc/yHmnuY=";
+  };
+
+  patches = [ ./sudo.patch ];
+
+  postPatch = ''
+    substituteInPlace setup.cfg \
+      --replace '--cov=sshuttle --cov-branch --cov-report=term-missing' ""
+  '';
+
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    python3Packages.setuptools-scm
+    sphinx
+  ];
+
+  nativeCheckInputs = with python3Packages; [ pytestCheckHook ];
+
+  postBuild = ''
+    make man -C docs
+  '';
+
+  postInstall = ''
+    installManPage docs/_build/man/*
+
+    wrapProgram $out/bin/sshuttle \
+      --prefix PATH : "${lib.makeBinPath ([ coreutils openssh procps ] ++ lib.optionals stdenv.isLinux [ iptables nettools ])}" \
+  '';
+
+  meta = with lib; {
+    description = "Transparent proxy server that works as a poor man's VPN";
+    longDescription = ''
+      Forward connections over SSH, without requiring administrator access to the
+      target network (though it does require Python 2.7, Python 3.5 or later at both ends).
+      Works with Linux and Mac OS and supports DNS tunneling.
+    '';
+    homepage = "https://github.com/sshuttle/sshuttle";
+    changelog = "https://github.com/sshuttle/sshuttle/blob/v${version}/CHANGES.rst";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ domenkozar carlosdagos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sshuttle/sudo.patch b/nixpkgs/pkgs/tools/security/sshuttle/sudo.patch
new file mode 100644
index 000000000000..d00aab087948
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sshuttle/sudo.patch
@@ -0,0 +1,13 @@
+diff --git a/sshuttle/client.py b/sshuttle/client.py
+index cab5b1c..e89f8a6 100644
+--- a/sshuttle/client.py
++++ b/sshuttle/client.py
+@@ -192,7 +192,7 @@ class FirewallClient:
+ 
+         self.auto_nets = []
+
+-        argvbase = ([sys.executable, sys.argv[0]] +
++        argvbase = ([sys.argv[0]] +
+                     ['-v'] * (helpers.verbose or 0) +
+                     ['--method', method_name] +
+                     ['--firewall'])
diff --git a/nixpkgs/pkgs/tools/security/sslscan/default.nix b/nixpkgs/pkgs/tools/security/sslscan/default.nix
new file mode 100644
index 000000000000..529b1bb1683e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sslscan/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sslscan";
+  version = "2.1.3";
+
+  src = fetchFromGitHub {
+    owner = "rbsec";
+    repo = "sslscan";
+    rev = "refs/tags/${version}";
+    hash = "sha256-oLlMeFVicDwr2XjCX/0cBMTXLKB8js50646uAf3tP9k=";
+  };
+
+  buildInputs = [ openssl ];
+
+  makeFlags = [ "PREFIX=$(out)" "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = with lib; {
+    description = "Tests SSL/TLS services and discover supported cipher suites";
+    homepage = "https://github.com/rbsec/sslscan";
+    changelog = "https://github.com/rbsec/sslscan/blob/${version}/Changelog";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fpletz globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sss-cli/default.nix b/nixpkgs/pkgs/tools/security/sss-cli/default.nix
new file mode 100644
index 000000000000..80daa4a6627e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sss-cli/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sss-cli";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "dsprenkels";
+    repo = "sss-cli";
+    rev = "v${version}";
+    hash = "sha256-9Wht+t48SsWpj1z2yY6P7G+h9StmuqfMdODtyPffhak=";
+  };
+
+  cargoPatches = [ ./fix-cargo-lock.patch ];
+
+  cargoHash = "sha256-nKb0J9ym3ZYC80KemwQwT5vVtQUngYD4/091hAIYAiU=";
+
+  meta = with lib; {
+    homepage = "https://github.com/dsprenkels/sss-cli";
+    description = "Command line program for secret-sharing strings";
+    license = licenses.mit;
+    maintainers = with maintainers; [ laalsaas ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sss-cli/fix-cargo-lock.patch b/nixpkgs/pkgs/tools/security/sss-cli/fix-cargo-lock.patch
new file mode 100644
index 000000000000..4af581c4962d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sss-cli/fix-cargo-lock.patch
@@ -0,0 +1,21 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index a57c5d8..27278d9 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1,5 +1,7 @@
+ # This file is automatically @generated by Cargo.
+ # It is not intended for manual editing.
++version = 3
++
+ [[package]]
+ name = "aho-corasick"
+ version = "0.7.15"
+@@ -253,7 +255,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "shamirsecretsharing-cli"
+-version = "0.1.0"
++version = "0.1.1"
+ dependencies = [
+  "atty",
+  "clap",
diff --git a/nixpkgs/pkgs/tools/security/ssss/default.nix b/nixpkgs/pkgs/tools/security/ssss/default.nix
new file mode 100644
index 000000000000..61d10111120e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ssss/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gmp
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ssss";
+  version = "0.5.7";
+
+  src = fetchFromGitHub {
+    owner = "MrJoy";
+    repo = pname;
+    rev = "releases%2Fv${version}";
+    sha256 = "18r1hwch6nq6gjijavr4pvrxz2plrlrvdx8ssqhdj2vmqvlqwbvd";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = [
+    gmp
+  ];
+
+  preBuild = ''
+    sed -e s@/usr/@$out/@g -i Makefile
+    cp ssss.manpage.xml ssss.1
+    mkdir -p $out/bin
+    echo -e 'install:\n\tcp ssss-combine ssss-split '"$out"'/bin' >>Makefile
+  '';
+
+  postInstall = ''
+    installManPage ssss.1
+  '';
+
+  meta = with lib; {
+    description = "Shamir Secret Sharing Scheme";
+    homepage = "http://point-at-infinity.org/ssss/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/stacs/default.nix b/nixpkgs/pkgs/tools/security/stacs/default.nix
new file mode 100644
index 000000000000..205d85f0622e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/stacs/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "stacs";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "stacscan";
+    repo = pname;
+    rev = version;
+    sha256 = "00ZYdpJktqUXdzPcouHyZcOQyFm7jdFNVuDqsufOviE=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setupmeta
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    pydantic_1
+    typing-extensions
+    yara-python
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "stacs"
+  ];
+
+  meta = with lib; {
+    description = "Static token and credential scanner";
+    homepage = "https://github.com/stacscan/stacs";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/stegseek/default.nix b/nixpkgs/pkgs/tools/security/stegseek/default.nix
new file mode 100644
index 000000000000..dd2c10045754
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/stegseek/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv
+, cmake
+, fetchFromGitHub
+, libjpeg
+, libmcrypt
+, libmhash
+, libtool
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stegseek";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "RickdeJager";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-B5oJffYOYfsH0YRq/Bq0ciIlCsCONyScFBjP7a1lIzo=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    libjpeg
+    libmcrypt
+    libmhash
+    libtool
+    zlib
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Tool to crack steganography";
+    longDescription = ''
+      Stegseek is a lightning fast steghide cracker that can be
+      used to extract hidden data from files.
+    '';
+    homepage = "https://github.com/RickdeJager/stegseek";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "stegseek";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/step-ca/default.nix b/nixpkgs/pkgs/tools/security/step-ca/default.nix
new file mode 100644
index 000000000000..6bdbfa02d62a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/step-ca/default.nix
@@ -0,0 +1,67 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, buildGoModule
+, coreutils
+, pcsclite
+, PCSC
+, pkg-config
+, hsmSupport ? true
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "step-ca";
+  version = "0.25.2";
+
+  src = fetchFromGitHub {
+    owner = "smallstep";
+    repo = "certificates";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-cP3QypBNWGbr7R7lJLfaoBh6C37ubGuaxnxWlZ1Z000=";
+  };
+
+  vendorHash = "sha256-AXMMpzXEhdKSGeVg/KK2NEgalxIXP6DUTcoxOQVqow4=";
+
+  nativeBuildInputs = lib.optionals hsmSupport [
+    pkg-config
+  ];
+
+  buildInputs =
+    lib.optionals (hsmSupport && stdenv.isLinux) [ pcsclite ]
+    ++ lib.optionals (hsmSupport && stdenv.isDarwin) [ PCSC ];
+
+  postPatch = ''
+    substituteInPlace systemd/step-ca.service --replace "/bin/kill" "${coreutils}/bin/kill"
+  '';
+
+  preBuild = ''
+    ${lib.optionalString (!hsmSupport) "export CGO_ENABLED=0"}
+  '';
+
+  postInstall = ''
+    install -Dm444 -t $out/lib/systemd/system systemd/step-ca.service
+  '';
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  # Tests start http servers which need to bind to local addresses:
+  # panic: httptest: failed to listen on a port: listen tcp6 [::1]:0: bind: operation not permitted
+  __darwinAllowLocalNetworking = true;
+
+  # Tests need to run in a reproducible order, otherwise they run unreliably on
+  # (at least) x86_64-linux.
+  checkFlags = [ "-p 1" ];
+
+  passthru.tests.step-ca = nixosTests.step-ca;
+
+  meta = with lib; {
+    description = "A private certificate authority (X.509 & SSH) & ACME server for secure automated certificate management, so you can use TLS everywhere & SSO for SSH";
+    homepage = "https://smallstep.com/certificates/";
+    changelog = "https://github.com/smallstep/certificates/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ cmcdragonkai mohe2015 techknowlogick ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/step-cli/default.nix b/nixpkgs/pkgs/tools/security/step-cli/default.nix
new file mode 100644
index 000000000000..4ba73b2ac2e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/step-cli/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "step-cli";
+  version = "0.25.2";
+
+  src = fetchFromGitHub {
+    owner = "smallstep";
+    repo = "cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-umo0f4cXxnxg3xH1aHeJE2brUT9w+Gp+0Qzq4zIQ8oI=";
+  };
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X main.Version=${version}"
+  ];
+
+  preCheck = ''
+    # Tries to connect to smallstep.com
+    rm command/certificate/remote_test.go
+  '';
+
+  vendorHash = "sha256-R9UJHXs35/yvwlqu1iR3lJN/w8DWMqw48Kc+7JKfD7I=";
+
+  meta = with lib; {
+    description = "A zero trust swiss army knife for working with X509, OAuth, JWT, OATH OTP, etc";
+    homepage = "https://smallstep.com/cli/";
+    changelog = "https://github.com/smallstep/cli/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ xfix ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "step";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/step-kms-plugin/default.nix b/nixpkgs/pkgs/tools/security/step-kms-plugin/default.nix
new file mode 100644
index 000000000000..2a141e7012b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/step-kms-plugin/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, pcsclite
+, softhsm
+, opensc
+, yubihsm-shell
+}:
+
+buildGoModule rec {
+  pname = "step-kms-plugin";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "smallstep";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-TmIQjkIESZm6u7CajyJGgf1xm3SvjA6EINUAKehzafs=";
+  };
+
+  vendorHash = "sha256-mwi7ux4pnnotdwW6v0j+q8mx5i7W6fJVuAKOEqVDueY=";
+
+  proxyVendor = true;
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    opensc
+    pcsclite
+    softhsm
+    yubihsm-shell
+  ];
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/smallstep/step-kms-plugin/cmd.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "step plugin to manage keys and certificates on cloud KMSs and HSMs";
+    homepage = "https://smallstep.com/cli/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ qbit ];
+    mainProgram = "step-kms-plugin";
+    # can't find pcsclite header files
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/stoken/default.nix b/nixpkgs/pkgs/tools/security/stoken/default.nix
new file mode 100644
index 000000000000..455310c202b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/stoken/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, libxml2
+, nettle
+, withGTK3 ? !stdenv.hostPlatform.isStatic
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stoken";
+  version = "0.93";
+
+  src = fetchFromGitHub {
+    owner = "cernekee";
+    repo = "stoken";
+    rev = "v${version}";
+    hash = "sha256-8N7TXdBu37eXWIKCBdaXVW0pvN094oRWrdlcy9raddI=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    libxml2
+    nettle
+  ] ++ lib.optionals withGTK3 [
+    gtk3
+  ];
+
+  meta = with lib; {
+    description = "Software Token for Linux/UNIX";
+    homepage = "https://github.com/cernekee/stoken";
+    license = licenses.lgpl21Plus;
+    maintainers = [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/stricat/default.nix b/nixpkgs/pkgs/tools/security/stricat/default.nix
new file mode 100644
index 000000000000..b21498e009f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/stricat/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "stricat";
+  version = "20140609100300";
+
+  src = fetchurl {
+    url    = "http://www.stribob.com/dist/${pname}-${version}.tgz";
+    sha256 = "1axg8r4g5n5kdqj5013pgck80nni3z172xkg506vz4zx1zcmrm4r";
+  };
+
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv stricat $out/bin
+  '';
+
+  meta = {
+    description = "Multi-use cryptographic tool based on the STRIBOB algorithm";
+    homepage    = "https://www.stribob.com/stricat/";
+    license     = lib.licenses.bsd3;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+    mainProgram = "stricat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/su-exec/default.nix b/nixpkgs/pkgs/tools/security/su-exec/default.nix
new file mode 100644
index 000000000000..0e26d2430cb1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/su-exec/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "su-exec";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner  = "ncopa";
+    repo   = "su-exec";
+    rev    = "v${version}";
+    sha256 = "12vqlnpv48cjfh25sn98k1myc7h2wiv5qw2y2awgp6sipzv88abv";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a su-exec $out/bin/su-exec
+  '';
+
+  meta = with lib; {
+    description = "switch user and group id and exec";
+    homepage    = "https://github.com/ncopa/su-exec";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/subjs/default.nix b/nixpkgs/pkgs/tools/security/subjs/default.nix
new file mode 100644
index 000000000000..60ed306145a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/subjs/default.nix
@@ -0,0 +1,32 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "subjs";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "lc";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-csxFn3YUnuYjZ5/4jIi7DfuujB/gFjHogLaV4XK5kQU=";
+  };
+
+  vendorHash = "sha256-Ibsgi2MYvs12E1NJgshAD/S5GTJgLl7C+smfvS+aAfg=";
+
+  ldflags = [ "-s" "-w" "-X main.AppVersion=${version}" ];
+
+  meta = with lib; {
+    description = "Fetcher for Javascript files";
+    longDescription = ''
+      subjs fetches Javascript files from a list of URLs or subdomains.
+      Analyzing Javascript files can help you find undocumented endpoints,
+      secrets and more.
+    '';
+    homepage = "https://github.com/lc/subjs";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sudo-rs/default.nix b/nixpkgs/pkgs/tools/security/sudo-rs/default.nix
new file mode 100644
index 000000000000..a1e46c6ee708
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sudo-rs/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, bash
+, fetchFromGitHub
+, installShellFiles
+, nix-update-script
+, nixosTests
+, pam
+, pandoc
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sudo-rs";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "memorysafety";
+    repo = "sudo-rs";
+    rev = "v${version}";
+    hash = "sha256-Fc9NgKo8Be8AqB1YcH/oH514f3pOjFtqNBIC+3xwagY=";
+  };
+  cargoHash = "sha256-1XhdMHGZZOmSFuVW3Oa1Xwjy3dzkgJOE7h24Ly2F3ps=";
+
+  nativeBuildInputs = [ installShellFiles pandoc ];
+
+  buildInputs = [ pam ];
+
+  # Don't attempt to generate the docs in a (pan)Docker container
+  postPatch = ''
+    substituteInPlace util/generate-docs.sh \
+      --replace "/usr/bin/env bash" ${lib.getExe bash} \
+      --replace util/pandoc.sh pandoc
+  '';
+
+  postInstall = ''
+    ./util/generate-docs.sh
+    installManPage target/docs/man/*
+  '';
+
+  checkFlags = map (t: "--skip=${t}") [
+    # Those tests make path assumptions
+    "common::command::test::test_build_command_and_args"
+    "common::context::tests::test_build_context"
+    "common::resolve::test::canonicalization"
+    "common::resolve::tests::test_resolve_path"
+    "system::tests::kill_test"
+
+    # Assumes $SHELL is an actual shell
+    "su::context::tests::su_to_root"
+
+    # Attempts to access /etc files from the build sandbox
+    "system::audit::test::secure_open_is_predictable"
+
+    # Assume there is a `daemon` user and group
+    "system::interface::test::test_unix_group"
+    "system::interface::test::test_unix_user"
+    "system::tests::test_get_user_and_group_by_id"
+
+    # This expects some PATH_TZINFO environment var
+    "env::environment::tests::test_tzinfo"
+
+    # Unsure why those are failing
+    "env::tests::test_environment_variable_filtering"
+    "su::context::tests::invalid_shell"
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = nixosTests.sudo-rs;
+  };
+
+  meta = with lib; {
+    description = "A memory safe implementation of sudo and su";
+    homepage = "https://github.com/memorysafety/sudo-rs";
+    changelog = "${meta.homepage}/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ nicoo ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sudo/default.nix b/nixpkgs/pkgs/tools/security/sudo/default.nix
new file mode 100644
index 000000000000..996baca2567f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sudo/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, fetchurl
+, buildPackages
+, coreutils
+, pam
+, groff
+, sssd
+, nixosTests
+, sendmailPath ? "/run/wrappers/bin/sendmail"
+, withInsults ? false
+, withSssd ? false
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "sudo";
+  version = "1.9.15p5";
+
+  src = fetchurl {
+    url = "https://www.sudo.ws/dist/sudo-${finalAttrs.version}.tar.gz";
+    hash = "sha256-VY0QuaGZH7O5+n+nsH7EQFt677WzywsIcdvIHjqI5Vg=";
+  };
+
+  prePatch = ''
+    # do not set sticky bit in nix store
+    substituteInPlace src/Makefile.in --replace 04755 0755
+  '';
+
+  configureFlags = [
+    "--with-env-editor"
+    "--with-editor=/run/current-system/sw/bin/nano"
+    "--with-rundir=/run/sudo"
+    "--with-vardir=/var/db/sudo"
+    "--with-logpath=/var/log/sudo.log"
+    "--with-iologdir=/var/log/sudo-io"
+    "--with-sendmail=${sendmailPath}"
+    "--enable-tmpfiles.d=no"
+  ] ++ lib.optionals withInsults [
+    "--with-insults"
+    "--with-all-insults"
+  ] ++ lib.optionals withSssd [
+    "--with-sssd"
+    "--with-sssd-lib=${sssd}/lib"
+  ];
+
+  configureFlagsArray = [
+    "--with-passprompt=[sudo] password for %p: " # intentional trailing space
+  ];
+
+  postConfigure =
+    ''
+      cat >> pathnames.h <<'EOF'
+        #undef _PATH_MV
+        #define _PATH_MV "${coreutils}/bin/mv"
+      EOF
+      makeFlags="install_uid=$(id -u) install_gid=$(id -g)"
+      installFlags="sudoers_uid=$(id -u) sudoers_gid=$(id -g) sysconfdir=$out/etc rundir=$TMPDIR/dummy vardir=$TMPDIR/dummy DESTDIR=/"
+    '';
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ groff ];
+  buildInputs = [ pam ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # needs root
+
+  postInstall = ''
+    rm $out/share/doc/sudo/ChangeLog
+  '';
+
+  passthru.tests = { inherit (nixosTests) sudo; };
+
+  meta = with lib; {
+    description = "A command to run commands as root";
+    longDescription =
+      ''
+        Sudo (su "do") allows a system administrator to delegate
+        authority to give certain users (or groups of users) the ability
+        to run some (or all) commands as root or another user while
+        providing an audit trail of the commands and their arguments.
+      '';
+    homepage = "https://www.sudo.ws/";
+    # From https://www.sudo.ws/about/license/
+    license = with licenses; [ sudo bsd2 bsd3 zlib ];
+    maintainers = with maintainers; [ delroth ];
+    platforms = platforms.linux;
+    mainProgram = "sudo";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/swaggerhole/default.nix b/nixpkgs/pkgs/tools/security/swaggerhole/default.nix
new file mode 100644
index 000000000000..8455867b4be2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/swaggerhole/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "swaggerhole";
+  version = "1.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "Liodeus";
+    repo = pname;
+    # Source is not tagged at the moment, https://github.com/Liodeus/swaggerHole/issues/2
+    rev = "14846406fbd0f145d71ad51c3b87f383e4afbc3b";
+    hash = "sha256-3HmIpn1A86PXZRL+SqMdr84O16hW1mCUWHKnOVolmx8=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+    whispers
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "swaggerhole"
+  ];
+
+  meta = with lib; {
+    description = "Tool to searching for secret on swaggerhub";
+    homepage = "https://github.com/Liodeus/swaggerHole";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/swtpm/default.nix b/nixpkgs/pkgs/tools/security/swtpm/default.nix
new file mode 100644
index 000000000000..8c4785dee62b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/swtpm/default.nix
@@ -0,0 +1,105 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, libtasn1, openssl, fuse, glib, libseccomp, json-glib
+, libtpms
+, unixtools, expect, socat
+, gnutls
+, perl
+
+# Tests
+, python3, which
+, nixosTests
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "swtpm";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "stefanberger";
+    repo = "swtpm";
+    rev = "v${finalAttrs.version}";
+    sha256 = "sha256-QKR5S7FlMFDw4+VpyRdqixMWyzLpQkf3QCUceQvsliU=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config unixtools.netstat expect socat
+    perl # for pod2man
+    python3
+    autoreconfHook
+  ];
+
+  nativeCheckInputs = [
+    which
+  ];
+
+  buildInputs = [
+    libtpms
+    openssl libtasn1
+    glib json-glib
+    gnutls
+  ] ++ lib.optionals stdenv.isLinux [
+    fuse
+    libseccomp
+  ];
+
+  configureFlags = [
+    "--localstatedir=/var"
+  ] ++ lib.optionals stdenv.isLinux [
+    "--with-cuse"
+  ];
+
+  postPatch = ''
+    patchShebangs tests/*
+
+    # Makefile tries to create the directory /var/lib/swtpm-localca, which fails
+    substituteInPlace samples/Makefile.am \
+        --replace 'install-data-local:' 'do-not-execute:'
+
+    # Use the correct path to the certtool binary
+    # instead of relying on it being in the environment
+    substituteInPlace src/swtpm_localca/swtpm_localca.c \
+      --replace \
+        '# define CERTTOOL_NAME "gnutls-certtool"' \
+        '# define CERTTOOL_NAME "${gnutls}/bin/certtool"' \
+      --replace \
+        '# define CERTTOOL_NAME "certtool"' \
+        '# define CERTTOOL_NAME "${gnutls}/bin/certtool"'
+
+    substituteInPlace tests/common --replace \
+        'CERTTOOL=gnutls-certtool;;' \
+        'CERTTOOL=certtool;;'
+
+    # Fix error on macOS:
+    # stat: invalid option -- '%'
+    # This is caused by the stat program not being the BSD version,
+    # as is expected by the test
+    substituteInPlace tests/common --replace \
+        'if [[ "$(uname -s)" =~ (Linux|CYGWIN_NT-) ]]; then' \
+        'if [[ "$(uname -s)" =~ (Linux|Darwin|CYGWIN_NT-) ]]; then'
+
+    # Otherwise certtool seems to pick up the system language on macOS,
+    # which might cause a test to fail
+    substituteInPlace tests/test_swtpm_setup_create_cert --replace \
+        '$CERTTOOL' \
+        'LC_ALL=C.UTF-8 $CERTTOOL'
+  '';
+
+  doCheck = true;
+  enableParallelBuilding = true;
+
+  outputs = [ "out" "man" ];
+
+  passthru.tests = { inherit (nixosTests) systemd-cryptenroll; };
+
+  meta = with lib; {
+    description = "Libtpms-based TPM emulator";
+    homepage = "https://github.com/stefanberger/swtpm";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.baloo ];
+    mainProgram = "swtpm";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/security/sx-go/default.nix b/nixpkgs/pkgs/tools/security/sx-go/default.nix
new file mode 100644
index 000000000000..8c8ceee0fe74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sx-go/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+, libpcap
+}:
+
+buildGoModule rec {
+  pname = "sx-go";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "v-byte-cpu";
+    repo = "sx";
+    rev = "v${version}";
+    sha256 = "sha256-HTIzA1QOVn3V/hGUu7wLIYUNYmcJ/FXi2yr6BGRizZA=";
+  };
+
+  vendorHash = "sha256-TWRMNt6x8zuvhP1nz4R6IVCX+9HityvVpzxRhDiMyO4=";
+
+  patches = [
+    # Fix darwin builds: https://github.com/v-byte-cpu/sx/pull/120
+    (fetchpatch {
+      name = "non-linux-method-signature.patch";
+      url = "https://github.com/v-byte-cpu/sx/commit/56457bfaa49eb6fbb7a33d7092d9c636b9c85895.patch";
+      hash = "sha256-0lCu3tZ0fEiC7qWfk1APLVwwrK9eovbVa/yG7OuXEWQ=";
+    })
+  ];
+
+  buildInputs = [
+    libpcap
+  ];
+
+  postFixup = ''
+    # Rename binary to avoid conflict with sx
+    mv $out/bin/sx $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    description = "Command-line network scanner";
+    homepage = "https://github.com/v-byte-cpu/sx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "sx-go";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tboot/default.nix b/nixpkgs/pkgs/tools/security/tboot/default.nix
new file mode 100644
index 000000000000..e88c8e9aa742
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tboot/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, openssl, perl, trousers, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "tboot";
+  version = "1.11.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/tboot/${pname}-${version}.tar.gz";
+    sha256 = "sha256-1sPCbF/e5tWOEfBHM67lnK/QFyHRFZjRjAKxXAfw6nc=";
+  };
+
+  buildInputs = [ openssl trousers zlib ];
+
+  enableParallelBuilding = true;
+
+  preConfigure = ''
+    substituteInPlace tboot/Makefile --replace /usr/bin/perl ${perl}/bin/perl
+
+    for a in lcptools-v2 tb_polgen utils; do
+      substituteInPlace "$a/Makefile" --replace /usr/sbin /sbin
+    done
+    substituteInPlace docs/Makefile --replace /usr/share /share
+  '';
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    description = "A pre-kernel/VMM module that uses Intel(R) TXT to perform a measured and verified launch of an OS kernel/VMM";
+    homepage    = "https://sourceforge.net/projects/tboot/";
+    changelog   = "https://sourceforge.net/p/tboot/code/ci/v${version}/tree/CHANGELOG";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ ak ];
+    platforms   = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tcb/default.nix b/nixpkgs/pkgs/tools/security/tcb/default.nix
new file mode 100644
index 000000000000..6a1f5b5eb5f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tcb/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config
+, linux-pam, libxcrypt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tcb";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "openwall";
+    repo = pname;
+    rev = "070cf4aa784de13c52788ac22ff611d7cbca0854";
+    sha256 = "sha256-Sp5u7iTEZZnAqKQXoPO8eWpSkZeBzQqZI82wRQmgU9A=";
+  };
+
+  outputs = [ "out" "bin" "dev" "man" ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ linux-pam libxcrypt ];
+
+  patches = [ ./fix-makefiles.patch ];
+
+  postPatch = ''
+    substituteInPlace Make.defs \
+      --replace "PREFIX = /usr" "PREFIX = $out" \
+      --replace "SBINDIR = /sbin" "SBINDIR = $bin/bin" \
+      --replace "INCLUDEDIR = \$(PREFIX)/include" "INCLUDEDIR = $dev/include"
+
+    # Override default 'CC=gcc'
+    makeFlagsArray+=("CC=$CC")
+  '';
+
+  meta = with lib; {
+    description = "Alternative password shadowing scheme";
+    longDescription = ''
+      The tcb package contains core components of our tcb suite implementing the alternative
+      password shadowing scheme on Openwall GNU Linux (Owl). It is being made available
+      separately from Owl primarily for use by other distributions.
+
+      The package consists of three components: pam_tcb, libnss_tcb, and libtcb.
+
+      pam_tcb is a PAM module which supersedes pam_unix. It also implements the tcb password
+      shadowing scheme. The tcb scheme allows many core system utilities (passwd(1) being
+      the primary example) to operate with little privilege. libnss_tcb is the accompanying
+      NSS module. libtcb contains code shared by the PAM and NSS modules and is also used
+      by user management tools on Owl due to our shadow suite patches.
+    '';
+    homepage = "https://www.openwall.com/tcb/";
+    license = licenses.bsd3;
+    platforms = systems.inspect.patterns.isGnu;
+    maintainers = with maintainers; [ izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tcb/fix-makefiles.patch b/nixpkgs/pkgs/tools/security/tcb/fix-makefiles.patch
new file mode 100644
index 000000000000..9ea82605d557
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tcb/fix-makefiles.patch
@@ -0,0 +1,52 @@
+diff --git a/Make.defs b/Make.defs
+index a961f7d..9e8d59b 100644
+--- a/Make.defs
++++ b/Make.defs
+@@ -19,7 +19,7 @@ LDFLAGS += $(DBGFLAG) -L../libs
+
+ PREFIX = /usr
+ SBINDIR = /sbin
+-SLIBDIR = /lib
++SLIBDIR = $(PREFIX)/lib
+ INCLUDEDIR = $(PREFIX)/include
+ LIBDIR = $(PREFIX)/lib
+ LIBEXECDIR = $(PREFIX)/libexec
+diff --git a/libs/Makefile b/libs/Makefile
+index 0083b13..27238f6 100644
+--- a/libs/Makefile
++++ b/libs/Makefile
+@@ -7,7 +7,7 @@ LIBTCB_A = libtcb.a
+ LIB_MAP = libtcb.map
+ NSS_MAP = libnss_tcb.map
+ 
+-all: $(LIBTCB_LONG) $(LIBNSS) $(LIBTCB_A)
++all: $(LIBTCB_LONG) $(LIBNSS)
+ 
+ $(LIBTCB_A): libtcb_a.o
+ 	ar -cr $@ $<
+@@ -36,9 +36,8 @@ install:
+ 	$(MKDIR) -p -m 755 $(DESTDIR)$(LIBDIR)
+ 	$(INSTALL) -m $(SHLIBMODE) $(LIBTCB_LONG) $(DESTDIR)$(SLIBDIR)/
+ 	ln -sf $(LIBTCB_LONG) $(DESTDIR)$(SLIBDIR)/$(LIBTCB)
+-	ln -sf ../..$(SLIBDIR)/$(LIBTCB) $(DESTDIR)$(LIBDIR)/libtcb.so
++	ln -sf $(LIBTCB) $(DESTDIR)$(LIBDIR)/libtcb.so
+ 	$(INSTALL) -m $(SHLIBMODE) $(LIBNSS) $(DESTDIR)$(SLIBDIR)/
+-	$(INSTALL) -m 644 $(LIBTCB_A) $(DESTDIR)$(LIBDIR)/
+ 
+ clean:
+ 	rm -f *.o *~ $(LIBTCB)* libtcb.so $(LIBNSS) *.a
+diff --git a/progs/Makefile b/progs/Makefile
+index c3a6879..e24f74b 100644
+--- a/progs/Makefile
++++ b/progs/Makefile
+@@ -23,8 +23,8 @@ install-non-root: install-common
+ 	$(INSTALL) -m 700 $(CHKPWD) $(DESTDIR)$(LIBEXECDIR)/chkpwd/
+ 
+ install: install-common
+-	$(INSTALL) -d -o root -g chkpwd -m 710 $(DESTDIR)$(LIBEXECDIR)/chkpwd
+-	$(INSTALL) -m 2711 -o root -g shadow $(CHKPWD) \
++	$(INSTALL) -d $(DESTDIR)$(LIBEXECDIR)/chkpwd
++	$(INSTALL) $(CHKPWD) \
+ 		$(DESTDIR)$(LIBEXECDIR)/chkpwd/
+ 
+ install-common:
diff --git a/nixpkgs/pkgs/tools/security/tcpcrypt/default.nix b/nixpkgs/pkgs/tools/security/tcpcrypt/default.nix
new file mode 100644
index 000000000000..8b00431b6cbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tcpcrypt/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, openssl
+, libcap, libpcap, libnfnetlink, libnetfilter_conntrack, libnetfilter_queue
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tcpcrypt";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    repo = "tcpcrypt";
+    owner = "scslab";
+    rev = "v${version}";
+    sha256 = "0a015rlyvagz714pgwr85f8gjq1fkc0il7d7l39qcgxrsp15b96w";
+  };
+
+  postUnpack = "mkdir -vp $sourceRoot/m4";
+
+  outputs = [ "bin" "dev" "out" ];
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ openssl libpcap ]
+    ++ lib.optionals stdenv.isLinux [ libcap libnfnetlink libnetfilter_conntrack libnetfilter_queue ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "http://tcpcrypt.org/";
+    description = "Fast TCP encryption";
+    platforms = platforms.all;
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/teler/default.nix b/nixpkgs/pkgs/tools/security/teler/default.nix
new file mode 100644
index 000000000000..989743fda894
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/teler/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "teler";
+  version = "2.0.0-dev.3";
+
+  src = fetchFromGitHub {
+    owner = "kitabisa";
+    repo = "teler";
+    rev = "v${version}";
+    hash = "sha256-2QrHxToHxHTjSl76q9A8fXCkOZkCwh1fu1h+HDUGsGA=";
+  };
+
+  vendorHash = "sha256-gV/PJFcANeYTYUJG3PYNsApYaeBLx76+vVBvcuKDYO4=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X ktbs.dev/teler/common.Version=${version}"
+  ];
+
+  # test require internet access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Real-time HTTP Intrusion Detection";
+    longDescription = ''
+      teler is an real-time intrusion detection and threat alert
+      based on web log that runs in a terminal with resources that
+      we collect and provide by the community.
+    '';
+    homepage = "https://github.com/kitabisa/teler";
+    changelog = "https://github.com/kitabisa/teler/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tell-me-your-secrets/default.nix b/nixpkgs/pkgs/tools/security/tell-me-your-secrets/default.nix
new file mode 100644
index 000000000000..a85a62fdfcc3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tell-me-your-secrets/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "tell-me-your-secrets";
+  version = "2.4.2";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "valayDave";
+    repo = "tell-me-your-secrets";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-3ZJyL/V1dsW6F+PiEhnWpv/Pz2H9/UKSJWDgw68M/Z8=";
+  };
+
+  pythonRelaxDeps = [
+    "gitignore-parser"
+    "pandas"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    gitignore-parser
+    pandas
+    pyyaml
+    single-source
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "tell_me_your_secrets"
+  ];
+
+  meta = with lib; {
+    description = "Tools to find secrets from various signatures";
+    homepage = "https://github.com/valayDave/tell-me-your-secrets";
+    changelog = "https://github.com/valayDave/tell-me-your-secrets/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/terrascan/default.nix b/nixpkgs/pkgs/tools/security/terrascan/default.nix
new file mode 100644
index 000000000000..91470205666b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/terrascan/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "terrascan";
+  version = "1.18.11";
+
+  src = fetchFromGitHub {
+    owner = "accurics";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-BICXMSkfGDXOqBH+4UlJmqkUSV+oZa1wg7c20EtJ3WI=";
+  };
+
+  vendorHash = "sha256-9zD81p/UjH43B0aeqlItP9vrGMaT/zhVYv60ot153Gc=";
+
+  # Tests want to download a vulnerable Terraform project
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Detect compliance and security violations across Infrastructure";
+    longDescription = ''
+      Detect compliance and security violations across Infrastructure as Code to
+      mitigate risk before provisioning cloud native infrastructure. It contains
+      500+ polices and support for Terraform and Kubernetes.
+    '';
+    homepage = "https://github.com/accurics/terrascan";
+    changelog = "https://github.com/tenable/terrascan/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tessen/default.nix b/nixpkgs/pkgs/tools/security/tessen/default.nix
new file mode 100644
index 000000000000..e8517dda9b4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tessen/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenvNoCC
+, fetchFromSourcehut
+, makeWrapper
+, installShellFiles
+, wtype
+, wl-clipboard
+, pass
+, bemenu
+, scdoc
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "tessen";
+  version = "2.2.1";
+
+  src = fetchFromSourcehut {
+    owner = "~ayushnix";
+    repo  = pname;
+    rev = "v${version}";
+    sha256  = "sha256-8hhYOd5h55kl7ChqdyRzsaxzWLpX41aqG8LfznmbFWw=";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles scdoc ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -D tessen $out/bin/tessen
+    wrapProgram $out/bin/tessen --prefix PATH : ${ lib.makeBinPath [ bemenu pass wtype wl-clipboard ] }
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    scdoc < man/tessen.1.scd > man/tessen.1
+    scdoc < man/tessen.5.scd > man/tessen.5
+    installManPage man/*.{1,5}
+    installShellCompletion --cmd tessen \
+      --bash completion/tessen.bash-completion \
+      --fish completion/tessen.fish-completion
+    install -Dm644 config $out/share/tessen/config
+  '';
+
+  meta = with lib; {
+    homepage = "https://sr.ht/~ayushnix/tessen";
+    description = "An interactive menu to autotype and copy Pass and GoPass data";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ monaaraj ];
+    mainProgram = "tessen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/thc-hydra/default.nix b/nixpkgs/pkgs/tools/security/thc-hydra/default.nix
new file mode 100644
index 000000000000..7222cc81780e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/thc-hydra/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, lib, fetchFromGitHub, zlib, openssl, ncurses, libidn, pcre, libssh, libmysqlclient, postgresql
+, withGUI ? false, makeWrapper, pkg-config, gtk2 }:
+
+stdenv.mkDerivation rec {
+  pname = "thc-hydra";
+  version = "9.5";
+
+  src = fetchFromGitHub {
+    owner = "vanhauser-thc";
+    repo = "thc-hydra";
+    rev = "v${version}";
+    sha256 = "sha256-gdMxdFrBGVHA1ZBNFW89PBXwACnXTGJ/e/Z5+xVV5F0=";
+  };
+
+  postPatch = let
+    makeDirs = output: subDir: lib.concatStringsSep " " (map (path: lib.getOutput output path + "/" + subDir) buildInputs);
+  in ''
+    substituteInPlace configure \
+      --replace '$LIBDIRS' "${makeDirs "lib" "lib"}" \
+      --replace '$INCDIRS' "${makeDirs "dev" "include"}" \
+      --replace "/usr/include/math.h" "${lib.getDev stdenv.cc.libc}/include/math.h" \
+      --replace "libcurses.so" "libncurses.so" \
+      --replace "-lcurses" "-lncurses"
+  '';
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-Wno-undef-prefix";
+
+  nativeBuildInputs = lib.optionals withGUI [ pkg-config makeWrapper ];
+
+  buildInputs = [
+    zlib openssl ncurses libidn pcre libssh libmysqlclient postgresql
+  ] ++ lib.optional withGUI gtk2;
+
+  enableParallelBuilding = true;
+
+  DATADIR = "/share/${pname}";
+
+  postInstall = lib.optionalString withGUI ''
+    wrapProgram $out/bin/xhydra \
+      --add-flags --hydra-path --add-flags "$out/bin/hydra"
+  '';
+
+  meta = with lib; {
+    description = "A very fast network logon cracker which support many different services";
+    homepage = "https://github.com/vanhauser-thc/thc-hydra"; # https://www.thc.org/
+    changelog = "https://github.com/vanhauser-thc/thc-hydra/raw/v${version}/CHANGES";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/thc-ipv6/default.nix b/nixpkgs/pkgs/tools/security/thc-ipv6/default.nix
new file mode 100644
index 000000000000..6e7f4fb2891a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/thc-ipv6/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, libpcap, openssl, libnetfilter_queue, libnfnetlink }:
+stdenv.mkDerivation rec {
+  pname = "thc-ipv6";
+  version = "3.8";
+
+  src = fetchFromGitHub {
+    owner = "vanhauser-thc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "07kwika1zdq62s5p5z94xznm77dxjxdg8k0hrg7wygz50151nzmx";
+  };
+
+  buildInputs = [
+    libpcap
+    openssl
+    libnetfilter_queue
+    libnfnetlink
+  ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "IPv6 attack toolkit";
+    homepage = "https://github.com/vanhauser-thc/thc-ipv6";
+    maintainers = with maintainers; [ ajs124 ];
+    platforms = platforms.linux;
+    license = licenses.agpl3Only;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/theharvester/default.nix b/nixpkgs/pkgs/tools/security/theharvester/default.nix
new file mode 100644
index 000000000000..ad5152e7e1fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/theharvester/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "theharvester";
+  version = "4.5.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "laramies";
+    repo = "theharvester";
+    rev = "refs/tags/${version}";
+    hash = "sha256-yfi1+SCCLCV3SJ28EVmR6V2i3O92iVRBo4EwHbKKcYY=";
+  };
+
+  postPatch = ''
+    # Requirements are pinned
+    sed -i 's/==.*//' requirements/base.txt
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiodns
+    aiofiles
+    aiohttp
+    aiomultiprocess
+    aiosqlite
+    beautifulsoup4
+    censys
+    certifi
+    dnspython
+    fastapi
+    lxml
+    netaddr
+    ujson
+    plotly
+    pyppeteer
+    python-dateutil
+    pyyaml
+    requests
+    retrying
+    shodan
+    slowapi
+    starlette
+    uvicorn
+    uvloop
+  ];
+
+  nativeCheckInputs = with  python3.pkgs; [
+    pytest
+    pytest-asyncio
+  ];
+
+  # We don't run other tests (discovery modules) because they require network access
+  checkPhase = ''
+    runHook preCheck
+    pytest tests/test_myparser.py
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Gather E-mails, subdomains and names from different public sources";
+    longDescription = ''
+      theHarvester is a very simple, yet effective tool designed to be used in the early
+      stages of a penetration test. Use it for open source intelligence gathering and
+      helping to determine an entity's external threat landscape on the internet. The tool
+      gathers emails, names, subdomains, IPs, and URLs using multiple public data sources.
+    '';
+    homepage = "https://github.com/laramies/theHarvester";
+    changelog = "https://github.com/laramies/theHarvester/releases/tag/${version}";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ c0bw3b fab treemo ];
+    mainProgram = "theHarvester";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/threatest/default.nix b/nixpkgs/pkgs/tools/security/threatest/default.nix
new file mode 100644
index 000000000000..faa5977986fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/threatest/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "threatest";
+  version = "1.2.5";
+
+  src = fetchFromGitHub {
+    owner = "DataDog";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-rVRBrf/RTcHvKOLHNASzvij3fV+uQEuIVKb07CZ/cT0=";
+  };
+
+  proxyVendor = true;
+  vendorHash = "sha256-zwHcGy7wjy2yx7nMi88R+z+Is+YcqGRMK0czeBNlcdA=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd threatest \
+      --bash <($out/bin/threatest completion bash) \
+      --fish <($out/bin/threatest completion fish) \
+      --zsh <($out/bin/threatest completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Framework for end-to-end testing threat detection rules";
+    homepage = "https://github.com/DataDog/threatest";
+    changelog = "https://github.com/DataDog/threatest/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tlsx/default.nix b/nixpkgs/pkgs/tools/security/tlsx/default.nix
new file mode 100644
index 000000000000..2ba9be6315b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tlsx/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tlsx";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "tlsx";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-FF5/STjf8joyJM6qPds1wFeRfncSamy/wWfNRZcG5kc=";
+  };
+
+  vendorHash = "sha256-sJravmpvwOSZiVNWFUTLlTA4xk6drItDj4JzR8JNrOo=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "TLS grabber focused on TLS based data collection";
+    longDescription = ''
+      A fast and configurable TLS grabber focused on TLS based data
+      collection and analysis.
+    '';
+    homepage = "https://github.com/projectdiscovery/tlsx";
+    changelog = "https://github.com/projectdiscovery/tlsx/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tor/default.nix b/nixpkgs/pkgs/tools/security/tor/default.nix
new file mode 100644
index 000000000000..5fc68c0a1c29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tor/default.nix
@@ -0,0 +1,127 @@
+{ lib, stdenv, fetchurl, pkg-config, libevent, openssl, zlib, torsocks
+, libseccomp, systemd, libcap, xz, zstd, scrypt, nixosTests
+, writeShellScript
+
+# for update.nix
+, writeScript
+, common-updater-scripts
+, bash
+, coreutils
+, curl
+, gnugrep
+, gnupg
+, gnused
+, nix
+}:
+let
+  tor-client-auth-gen = writeShellScript "tor-client-auth-gen" ''
+    PATH="${lib.makeBinPath [coreutils gnugrep openssl]}"
+    pem="$(openssl genpkey -algorithm x25519)"
+
+    printf private_key=descriptor:x25519:
+    echo "$pem" | grep -v " PRIVATE KEY" |
+    base64 -d | tail --bytes=32 | base32 | tr -d =
+
+    printf public_key=descriptor:x25519:
+    echo "$pem" | openssl pkey -in /dev/stdin -pubout |
+    grep -v " PUBLIC KEY" |
+    base64 -d | tail --bytes=32 | base32 | tr -d =
+  '';
+in
+stdenv.mkDerivation rec {
+  pname = "tor";
+  version = "0.4.8.10";
+
+  src = fetchurl {
+    url = "https://dist.torproject.org/${pname}-${version}.tar.gz";
+    sha256 = "sha256-5ii0+rcO20cncVsjzykxN1qfdoWsCPLFnqSYoXhGOoY=";
+  };
+
+  outputs = [ "out" "geoip" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libevent openssl zlib xz zstd scrypt ] ++
+    lib.optionals stdenv.isLinux [ libseccomp systemd libcap ];
+
+  patches = [ ./disable-monotonic-timer-tests.patch ];
+
+  configureFlags =
+    # allow inclusion of GPL-licensed code (needed for Proof of Work defense for onion services)
+    # for more details see
+    # https://gitlab.torproject.org/tpo/onion-services/onion-support/-/wikis/Documentation/PoW-FAQ#compiling-c-tor-with-the-pow-defense
+    [ "--enable-gpl" ]
+    ++
+    # cross compiles correctly but needs the following
+    lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ "--disable-tool-name-check" ]
+    ++
+    # sandbox is broken on aarch64-linux https://gitlab.torproject.org/tpo/core/tor/-/issues/40599
+    lib.optionals (stdenv.isLinux && stdenv.isAarch64) [ "--disable-seccomp" ]
+  ;
+
+  NIX_CFLAGS_LINK = lib.optionalString stdenv.cc.isGNU "-lgcc_s";
+
+  postPatch = ''
+    substituteInPlace contrib/client-tools/torify \
+      --replace 'pathfind torsocks' true          \
+      --replace 'exec torsocks' 'exec ${torsocks}/bin/torsocks'
+
+    patchShebangs ./scripts/maint/checkShellScripts.sh
+  '';
+
+  enableParallelBuilding = true;
+
+  # disable tests on aarch64-darwin, the following tests fail there:
+  # oom/circbuf: [forking]
+  #   FAIL src/test/test_oom.c:187: assert(c1->marked_for_close)
+  #   [circbuf FAILED]
+  # oom/streambuf: [forking]
+  #   FAIL src/test/test_oom.c:287: assert(x_ OP_GE 500 - 5): 0 vs 495
+  #   [streambuf FAILED]
+  doCheck = !(stdenv.isDarwin && stdenv.isAarch64);
+
+  postInstall = ''
+    mkdir -p $geoip/share/tor
+    mv $out/share/tor/geoip{,6} $geoip/share/tor
+    rm -rf $out/share/tor
+    ln -s ${tor-client-auth-gen} $out/bin/tor-client-auth-gen
+  '';
+
+  passthru = {
+    tests.tor = nixosTests.tor;
+    updateScript = import ./update.nix {
+      inherit lib;
+      inherit
+        writeScript
+        common-updater-scripts
+        bash
+        coreutils
+        curl
+        gnupg
+        gnugrep
+        gnused
+        nix
+      ;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://www.torproject.org/";
+    description = "Anonymizing overlay network";
+
+    longDescription = ''
+      Tor helps improve your privacy by bouncing your communications around a
+      network of relays run by volunteers all around the world: it makes it
+      harder for somebody watching your Internet connection to learn what sites
+      you visit, and makes it harder for the sites you visit to track you. Tor
+      works with many of your existing applications, including web browsers,
+      instant messaging clients, remote login, and other applications based on
+      the TCP protocol.
+    '';
+
+    license = with licenses; [ bsd3 gpl3Only ];
+
+    maintainers = with maintainers;
+      [ thoughtpolice joachifm prusnak ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tor/disable-monotonic-timer-tests.patch b/nixpkgs/pkgs/tools/security/tor/disable-monotonic-timer-tests.patch
new file mode 100644
index 000000000000..bb124c394f25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tor/disable-monotonic-timer-tests.patch
@@ -0,0 +1,48 @@
+diff --git a/src/test/test_util.c b/src/test/test_util.c
+index 0d86a5ab5..e93c6ba89 100644
+--- a/src/test/test_util.c
++++ b/src/test/test_util.c
+@@ -6490,13 +6490,9 @@ test_util_monotonic_time(void *arg)
+   /* We need to be a little careful here since we don't know the system load.
+    */
+   tt_i64_op(monotime_diff_msec(&mt1, &mt2), OP_GE, 175);
+-  tt_i64_op(monotime_diff_msec(&mt1, &mt2), OP_LT, 1000);
+   tt_i64_op(monotime_coarse_diff_msec(&mtc1, &mtc2), OP_GE, 125);
+-  tt_i64_op(monotime_coarse_diff_msec(&mtc1, &mtc2), OP_LT, 1000);
+   tt_u64_op(nsec2-nsec1, OP_GE, 175000000);
+-  tt_u64_op(nsec2-nsec1, OP_LT, 1000000000);
+   tt_u64_op(nsecc2-nsecc1, OP_GE, 125000000);
+-  tt_u64_op(nsecc2-nsecc1, OP_LT, 1000000000);
+ 
+   tt_u64_op(msec1, OP_GE, nsec1 / 1000000);
+   tt_u64_op(usec1, OP_GE, nsec1 / 1000);
+@@ -6509,8 +6509,6 @@ test_util_monotonic_time(void *arg)
+ 
+   uint64_t coarse_stamp_diff =
+     monotime_coarse_stamp_units_to_approx_msec(stamp2-stamp1);
+-  tt_u64_op(coarse_stamp_diff, OP_GE, 120);
+-  tt_u64_op(coarse_stamp_diff, OP_LE, 1200);
+ 
+   {
+     uint64_t units = monotime_msec_to_approx_coarse_stamp_units(5000);
+@@ -6515,8 +6515,8 @@ test_util_monotonic_time(void *arg)
+   {
+     uint64_t units = monotime_msec_to_approx_coarse_stamp_units(5000);
+     uint64_t ms = monotime_coarse_stamp_units_to_approx_msec(units);
+-    tt_u64_op(ms, OP_GE, 4950);
+-    tt_u64_op(ms, OP_LT, 5050);
++    tt_u64_op(ms, OP_GE, 4000);
++    tt_u64_op(ms, OP_LT, 6000);
+   }
+ 
+  done:
+@@ -6640,9 +6640,6 @@ test_util_monotonic_time_add_msec(void *arg)
+   monotime_coarse_add_msec(&ct2, &ct1, 1337);
+   tt_i64_op(monotime_diff_msec(&t1, &t2), OP_EQ, 1337);
+   tt_i64_op(monotime_coarse_diff_msec(&ct1, &ct2), OP_EQ, 1337);
+-  // The 32-bit variant must be within 1% of the regular one.
+-  tt_int_op(monotime_coarse_diff_msec32_(&ct1, &ct2), OP_GT, 1323);
+-  tt_int_op(monotime_coarse_diff_msec32_(&ct1, &ct2), OP_LT, 1350);
+ 
+   /* Add 1337 msec twice more; make sure that any second rollover issues
+    * worked. */
diff --git a/nixpkgs/pkgs/tools/security/tor/torsocks-gethostbyaddr-darwin.patch b/nixpkgs/pkgs/tools/security/tor/torsocks-gethostbyaddr-darwin.patch
new file mode 100644
index 000000000000..d7d834271a94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tor/torsocks-gethostbyaddr-darwin.patch
@@ -0,0 +1,33 @@
+diff --git a/tests/test_dns.c b/tests/test_dns.c
+index 7e07663..acf095c 100644
+--- a/tests/test_dns.c
++++ b/tests/test_dns.c
+@@ -76,6 +76,8 @@ static void test_gethostbyname(const struct test_host *host)
+ 	return;
+ }
+ 
++#ifdef __linux__
++
+ static void test_gethostbyaddr_r_failed(void)
+ {
+ 	int result;
+@@ -129,6 +131,8 @@ static void test_gethostbyaddr_r(const struct test_host *host)
+   ok(1, "Resolved address");
+ }
+ 
++#endif
++
+ static void test_gethostbyaddr(const struct test_host *host)
+ {
+ 	struct hostent *he;
+@@ -199,8 +203,10 @@ int main(int argc, char **argv)
+ 	test_getaddrinfo(&tor_check);
+ 	test_gethostbyname(&tor_dir_auth1);
+ 	test_gethostbyaddr(&tor_dir_auth2);
++#ifdef __linux__
+ 	test_gethostbyaddr_r(&tor_dir_auth2);
+ 	test_gethostbyaddr_r_failed();
++#endif
+ 	test_getaddrinfo(&tor_localhost);
+ 
+ end:
diff --git a/nixpkgs/pkgs/tools/security/tor/torsocks.nix b/nixpkgs/pkgs/tools/security/tor/torsocks.nix
new file mode 100644
index 000000000000..6c5be8fcc7bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tor/torsocks.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchpatch
+, autoreconfHook
+, libcap
+}:
+
+stdenv.mkDerivation rec {
+  pname = "torsocks";
+  version = "2.4.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.torproject.org";
+    group = "tpo";
+    owner = "core";
+    repo = "torsocks";
+    rev = "v${version}";
+    sha256 = "sha256-ocJkoF9LMLC84ukFrm5pzjp/1gaXqDz8lzr9TdG+f88=";
+  };
+
+  patches = [
+    # fix compatibility with C99
+    # https://gitlab.torproject.org/tpo/core/torsocks/-/merge_requests/9
+    (fetchpatch {
+      url = "https://gitlab.torproject.org/tpo/core/torsocks/-/commit/1171bf2fd4e7a0cab02cf5fca59090b65af9cd29.patch";
+      hash = "sha256-qu5/0fy72+02QI0cVE/6YrR1kPuJxsZfG8XeODqVOPY=";
+    })
+    # tsocks_libc_accept4 only exists on Linux, use tsocks_libc_accept on other platforms
+    (fetchpatch {
+      url = "https://gitlab.torproject.org/tpo/core/torsocks/uploads/eeec9833512850306a42a0890d283d77/0001-Fix-macros-for-accept4-2.patch";
+      hash = "sha256-XWi8+UFB8XgBFSl5QDJ+hLu/dH4CvAwYbeZz7KB10Bs=";
+    })
+    # no gethostbyaddr_r on darwin
+    ./torsocks-gethostbyaddr-darwin.patch
+  ];
+
+  postPatch = ''
+    # Patch torify_app()
+    sed -i \
+      -e 's,\(local app_path\)=`which $1`,\1=`type -P $1`,' \
+      src/bin/torsocks.in
+  '' + lib.optionalString stdenv.isLinux ''
+    sed -i \
+      -e 's,\(local getcap\)=.*,\1=${libcap}/bin/getcap,' \
+      src/bin/torsocks.in
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  doInstallCheck = true;
+  installCheckTarget = "check-recursive";
+
+  meta = {
+    description      = "Wrapper to safely torify applications";
+    homepage         = "https://gitlab.torproject.org/tpo/core/torsocks";
+    license          = lib.licenses.gpl2;
+    platforms        = lib.platforms.unix;
+    maintainers      = with lib.maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tor/update.nix b/nixpkgs/pkgs/tools/security/tor/update.nix
new file mode 100644
index 000000000000..f0106aa26ea9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tor/update.nix
@@ -0,0 +1,70 @@
+{ lib
+, writeScript
+, common-updater-scripts
+, bash
+, coreutils
+, curl
+, gnugrep
+, gnupg
+, gnused
+, nix
+}:
+
+let
+  downloadPageUrl = "https://dist.torproject.org";
+
+  # See https://support.torproject.org/little-t-tor/#fetching-the-tor-developers-key
+  signingKeys = [
+    "514102454D0A87DB0767A1EBBE6A0531C18A9179" # Alexander Færøy
+    "B74417EDDF22AC9F9E90F49142E86A2A11F48D36" # David Goulet
+    "2133BC600AB133E1D826D173FE43009C4607B1FB" # Nick Mathewson
+  ];
+in
+
+writeScript "update-tor" ''
+#! ${bash}/bin/bash
+
+set -eu -o pipefail
+
+export PATH=${lib.makeBinPath [
+  common-updater-scripts
+  coreutils
+  curl
+  gnugrep
+  gnupg
+  gnused
+  nix
+]}
+
+srcBase=$(curl -L --list-only -- "${downloadPageUrl}" \
+  | grep -Eo 'tor-([[:digit:]]+\.?)+\.tar\.gz' \
+  | sort -Vu \
+  | tail -n1)
+srcFile=$srcBase
+srcUrl=${downloadPageUrl}/$srcBase
+
+srcName=''${srcBase/.tar.gz/}
+srcVers=(''${srcName//-/ })
+version=''${srcVers[1]}
+
+checksumUrl=$srcUrl.sha256sum
+checksumFile=''${checksumUrl##*/}
+
+sigUrl=$checksumUrl.asc
+sigFile=''${sigUrl##*/}
+
+# upstream does not support byte ranges ...
+[[ -e "$srcFile" ]] || curl -L -o "$srcFile" -- "$srcUrl"
+[[ -e "$checksumFile" ]] || curl -L -o "$checksumFile" -- "$checksumUrl"
+[[ -e "$sigFile" ]] || curl -L -o "$sigFile" -- "$sigUrl"
+
+export GNUPGHOME=$PWD/gnupg
+mkdir -m 700 -p "$GNUPGHOME"
+
+gpg --batch --recv-keys ${lib.concatStringsSep " " (map (x: "'${x}'") signingKeys)}
+gpg --batch --verify "$sigFile" "$checksumFile"
+
+sha256sum -c "$checksumFile"
+
+update-source-version tor "$version" "$(cut -d ' ' "$checksumFile")"
+''
diff --git a/nixpkgs/pkgs/tools/security/tpm-luks/default.nix b/nixpkgs/pkgs/tools/security/tpm-luks/default.nix
new file mode 100644
index 000000000000..16d88c9196b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm-luks/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, gawk, trousers, cryptsetup, openssl }:
+
+stdenv.mkDerivation {
+  pname = "tpm-luks";
+  version = "unstable-2015-07-11";
+
+  src = fetchFromGitHub {
+    owner = "momiji";
+    repo = "tpm-luks";
+    rev = "c9c5b7fdddbcdac1cd4d2ea6baddd0617cc88ffa";
+    sha256 = "sha256-HHyZLZAXfmuimpHV8fOWldZmi4I5uV1NnSmP4E7ZQtc=";
+  };
+
+  patches = [
+    ./openssl-1.1.patch
+    ./signed-ptr.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ gawk trousers cryptsetup openssl ];
+
+  installPhase = ''
+    mkdir -p $out
+    make install DESTDIR=$out
+    mv $out/$out/sbin $out/bin
+    rm -r $out/nix
+  '';
+
+  meta = with lib; {
+    description = "LUKS key storage in TPM NVRAM";
+    homepage = "https://github.com/shpedoikal/tpm-luks/";
+    maintainers = [ ];
+    license = with licenses; [ gpl2Only ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/tpm-luks/openssl-1.1.patch b/nixpkgs/pkgs/tools/security/tpm-luks/openssl-1.1.patch
new file mode 100644
index 000000000000..10132242b345
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm-luks/openssl-1.1.patch
@@ -0,0 +1,63 @@
+diff --git a/swtpm-utils/lib/hmac.c b/swtpm-utils/lib/hmac.c
+index 5545375..f9bedea 100644
+--- a/swtpm-utils/lib/hmac.c
++++ b/swtpm-utils/lib/hmac.c
+@@ -381,15 +381,19 @@ uint32_t TSS_authhmac(unsigned char *digest, unsigned char *key, unsigned int ke
+ /****************************************************************************/
+ uint32_t TSS_rawhmac(unsigned char *digest, const unsigned char *key, unsigned int keylen, ...)
+    {
+-   HMAC_CTX hmac;
++   HMAC_CTX* hmac;
+    unsigned int dlen;
+    unsigned char *data;
+    va_list argp;
+-   
+-#ifdef HAVE_HMAC_CTX_CLEANUP
+-   HMAC_CTX_init(&hmac);
+-#endif
+-   HMAC_Init(&hmac,key,keylen,EVP_sha1());
++
++   hmac = HMAC_CTX_new();
++
++   if (hmac == NULL)
++     {
++     return ERR_MEM_ERR;
++     }
++
++   HMAC_Init_ex(hmac,key,keylen,EVP_sha1(),NULL);
+ 
+    va_start(argp,keylen);
+    for (;;)
+@@ -398,15 +402,11 @@ uint32_t TSS_rawhmac(unsigned char *digest, const unsigned char *key, unsigned i
+       if (dlen == 0) break;
+       data = (unsigned char *)va_arg(argp,unsigned char *);
+       if (data == NULL) return ERR_NULL_ARG;
+-      HMAC_Update(&hmac,data,dlen);
++      HMAC_Update(hmac,data,dlen);
+       }
+-   HMAC_Final(&hmac,digest,&dlen);
++   HMAC_Final(hmac,digest,&dlen);
+ 
+-#ifdef HAVE_HMAC_CTX_CLEANUP
+-   HMAC_CTX_cleanup(&hmac);
+-#else
+-   HMAC_cleanup(&hmac);
+-#endif
++   HMAC_CTX_free(hmac);
+    va_end(argp);
+    return 0;
+    }
+diff --git a/swtpm-utils/lib/keys.c b/swtpm-utils/lib/keys.c
+index 99691b6..6627a1f 100644
+--- a/swtpm-utils/lib/keys.c
++++ b/swtpm-utils/lib/keys.c
+@@ -1249,8 +1249,7 @@ RSA *TSS_convpubkey(pubkeydata *k)
+                 exp);
+    }
+    /* set up the RSA public key structure */
+-   rsa->n = mod;
+-   rsa->e = exp;
++   RSA_set0_key(rsa, mod, exp, NULL);
+    return rsa;
+    }
+ 
diff --git a/nixpkgs/pkgs/tools/security/tpm-luks/signed-ptr.patch b/nixpkgs/pkgs/tools/security/tpm-luks/signed-ptr.patch
new file mode 100644
index 000000000000..83e356a4ef9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm-luks/signed-ptr.patch
@@ -0,0 +1,15 @@
+diff --git a/swtpm-utils/getcapability.c b/swtpm-utils/getcapability.c
+index 7359ba3..17b4324 100644
+--- a/swtpm-utils/getcapability.c
++++ b/swtpm-utils/getcapability.c
+@@ -480,7 +480,8 @@ int main(int argc, char *argv[])
+ 				  }
+ 
+ 				  if (c) {
+-				      char pcrmap[4], *pf;
++				      char pcrmap[4];
++				      unsigned char *pf;
+ 
+ 				      memcpy(pcrmap, ndp.pcrInfoRead.pcrSelection.pcrSelect,
+ 					     ndp.pcrInfoRead.pcrSelection.sizeOfSelect);
+
diff --git a/nixpkgs/pkgs/tools/security/tpm-quote-tools/default.nix b/nixpkgs/pkgs/tools/security/tpm-quote-tools/default.nix
new file mode 100644
index 000000000000..938d0a6f2946
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm-quote-tools/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, trousers, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "tpm-quote-tools";
+  version = "1.0.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/tpmquotetools/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1qjs83xb4np4yn1bhbjfhvkiika410v8icwnjix5ad96w2nlxp0h";
+  };
+
+  buildInputs = [ trousers openssl ];
+
+  postFixup = ''
+    patchelf \
+      --set-rpath "${lib.makeLibraryPath [ openssl ]}:$(patchelf --print-rpath $out/bin/tpm_mkaik)" \
+      $out/bin/tpm_mkaik
+  '';
+
+  meta = with lib; {
+    description = "A collection of programs that provide support for TPM based attestation using the TPM quote mechanism";
+    longDescription = ''
+      The TPM Quote Tools is a collection of programs that provide support
+      for TPM based attestation using the TPM quote mechanism.  The manual
+      page for tpm_quote_tools provides a usage overview.
+    '';
+    homepage    = "http://tpmquotetools.sourceforge.net/";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ ak ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tpm-tools/default.nix b/nixpkgs/pkgs/tools/security/tpm-tools/default.nix
new file mode 100644
index 000000000000..c0e2941323a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm-tools/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, trousers, openssl, opencryptoki, perl }:
+
+let
+  version = "1.3.9.1";
+in
+stdenv.mkDerivation rec {
+  pname = "tpm-tools";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/trousers/tpm-tools/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0s7srgghykxnlb1g4izabzf2gfb1knxc0nzn6bly49h8cpi19dww";
+  };
+
+  sourceRoot = ".";
+
+  patches = [
+    (fetchurl {
+      url = "https://sources.debian.org/data/main/t/tpm-tools/1.3.9.1-0.1/debian/patches/05-openssl1.1_fix_data_mgmt.patch";
+      sha256 = "161yysw4wgy3spsz6p1d0ib0h5pnrqm8bdh1l71c4hz6a6wpcyxj";
+    })
+  ];
+
+  nativeBuildInputs = [ perl ];
+  buildInputs = [ trousers openssl opencryptoki ];
+
+  meta = with lib; {
+    description = "Management tools for TPM hardware";
+    longDescription = ''
+      tpm-tools is an open-source package designed to enable user and
+      application enablement of Trusted Computing using a Trusted Platform
+      Module (TPM), similar to a smart card environment.
+    '';
+    homepage    = "https://sourceforge.net/projects/trousers/files/tpm-tools/";
+    license     = licenses.cpl10;
+    maintainers = [ maintainers.ak ];
+    platforms   = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/tpm2-abrmd/default.nix b/nixpkgs/pkgs/tools/security/tpm2-abrmd/default.nix
new file mode 100644
index 000000000000..718355998794
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm2-abrmd/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, lib, fetchFromGitHub
+, autoreconfHook, pkg-config, autoconf-archive, makeWrapper, which
+, tpm2-tss, glib, dbus
+, cmocka
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tpm2-abrmd";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "tpm2-software";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-l0ncCMsStaeFACRU3Bt6F1zyiOTGY6wOHewA4AD58Ww=";
+  };
+
+  nativeBuildInputs = [
+    autoconf-archive
+    autoreconfHook
+    glib
+    makeWrapper
+    pkg-config
+    which
+  ];
+  buildInputs = [ tpm2-tss glib dbus ];
+  nativeCheckInputs = [ cmocka ];
+
+  enableParallelBuilding = true;
+
+  # Emulate the required behavior of ./bootstrap in the original
+  # package
+  preAutoreconf = ''
+    echo "${version}" > VERSION
+  '';
+
+  # Unit tests are currently broken as the check phase attempts to start a dbus daemon etc.
+  #configureFlags = [ "--enable-unit" ];
+  doCheck = false;
+
+  # Even though tpm2-tss is in the RUNPATH, starting from 2.3.0 abrmd
+  # seems to require the path to the device TCTI (used for accessing
+  # /dev/tpm0) in it's LD_LIBRARY_PATH
+  postFixup = ''
+    wrapProgram $out/bin/tpm2-abrmd \
+      --suffix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ tpm2-tss ]}"
+  '';
+
+  meta = with lib; {
+    description = "TPM2 resource manager, accessible via D-Bus";
+    homepage = "https://github.com/tpm2-software/tpm2-tools";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tpm2-tools/default.nix b/nixpkgs/pkgs/tools/security/tpm2-tools/default.nix
new file mode 100644
index 000000000000..d622ab5b93da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm2-tools/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, lib, fetchpatch
+, pandoc, pkg-config, makeWrapper, curl, openssl, tpm2-tss, libuuid
+, abrmdSupport ? true, tpm2-abrmd ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "tpm2-tools";
+  version = "5.6";
+
+  src = fetchurl {
+    url = "https://github.com/tpm2-software/${pname}/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-Usi8uq3KCCq/5et+5JZ9LWMthLFndnXy8HG20uwizsM=";
+  };
+
+  patches = [
+    # https://github.com/tpm2-software/tpm2-tools/pull/3271
+    (fetchpatch {
+      url = "https://github.com/tpm2-software/tpm2-tools/commit/b98be08f6f88b0cca9e0667760c4e1e5eb417fbd.patch";
+      sha256 = "sha256-2sEam9i4gwscJhLwraX2EAjVM8Dh1vmNnG3zYsOF0fc=";
+    })
+  ];
+
+  nativeBuildInputs = [ pandoc pkg-config makeWrapper ];
+  buildInputs = [
+    curl openssl tpm2-tss libuuid
+  ];
+
+  preFixup = let
+    ldLibraryPath = lib.makeLibraryPath ([
+      tpm2-tss
+    ] ++ (lib.optional abrmdSupport tpm2-abrmd));
+  in ''
+    wrapProgram $out/bin/tpm2 --suffix LD_LIBRARY_PATH : "${ldLibraryPath}"
+    wrapProgram $out/bin/tss2 --suffix LD_LIBRARY_PATH : "${ldLibraryPath}"
+  '';
+
+
+  # Unit tests disabled, as they rely on a dbus session
+  #configureFlags = [ "--enable-unit" ];
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command line tools that provide access to a TPM 2.0 compatible device";
+    homepage = "https://github.com/tpm2-software/tpm2-tools";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ delroth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tracee/default.nix b/nixpkgs/pkgs/tools/security/tracee/default.nix
new file mode 100644
index 000000000000..eb1e8090b286
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tracee/default.nix
@@ -0,0 +1,113 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+
+, clang
+, pkg-config
+
+, zlib
+, elfutils
+, libbpf
+
+, nixosTests
+, testers
+, tracee
+}:
+
+buildGoModule rec {
+  pname = "tracee";
+  version = "0.13.1";
+
+  src = fetchFromGitHub {
+    owner = "aquasecurity";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-YO5u/hE5enoqh8niV4Zi+NFUsU+UXCCxdqvxolZImGk=";
+  };
+  vendorHash = "sha256-swMvJe+Dz/kwPIStPlQ7d6U/UwXSMcJ3eONxjzebXCc=";
+
+  patches = [
+    ./use-our-libbpf.patch
+  ];
+
+  enableParallelBuilding = true;
+  # needed to build bpf libs
+  hardeningDisable = [ "stackprotector" ];
+
+  nativeBuildInputs = [ pkg-config clang ];
+  buildInputs = [ elfutils libbpf zlib ];
+
+  makeFlags = [
+    "VERSION=v${version}"
+    "GO_DEBUG_FLAG=-s -w"
+    # don't actually need git but the Makefile checks for it
+    "CMD_GIT=echo"
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    mkdir -p ./dist
+    make $makeFlags ''${enableParallelBuilding:+-j$NIX_BUILD_CORES} bpf-core all
+    runHook postBuild
+  '';
+
+  # tests require a separate go module
+  # integration tests are ran within a nixos vm
+  # see passthru.tests.integration
+  doCheck = false;
+
+  outputs = [ "out" "lib" "share" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $lib/lib/tracee $share/share/tracee
+
+    mv ./dist/tracee $out/bin/
+    mv ./dist/tracee.bpf.core.o $lib/lib/tracee/
+    mv ./cmd/tracee-rules/templates $share/share/tracee/
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/tracee --help
+    $out/bin/tracee --version | grep "v${version}"
+
+    runHook postInstallCheck
+  '';
+
+  passthru.tests = {
+    integration = nixosTests.tracee;
+    version = testers.testVersion {
+      package = tracee;
+      version = "v${version}";
+      command = "tracee --version";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://aquasecurity.github.io/tracee/latest/";
+    changelog = "https://github.com/aquasecurity/tracee/releases/tag/v${version}";
+    description = "Linux Runtime Security and Forensics using eBPF";
+    longDescription = ''
+      Tracee is a Runtime Security and forensics tool for Linux. It is using
+      Linux eBPF technology to trace your system and applications at runtime,
+      and analyze collected events to detect suspicious behavioral patterns. It
+      is delivered as a Docker image that monitors the OS and detects suspicious
+      behavior based on a pre-defined set of behavioral patterns.
+    '';
+    license = with licenses; [
+      # general license
+      asl20
+      # pkg/ebpf/c/*
+      gpl2Plus
+    ];
+    maintainers = with maintainers; [ jk ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    outputsToInstall = [ "out" "share" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tracee/use-our-libbpf.patch b/nixpkgs/pkgs/tools/security/tracee/use-our-libbpf.patch
new file mode 100644
index 000000000000..00d91ca6e3b3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tracee/use-our-libbpf.patch
@@ -0,0 +1,48 @@
+diff --git a/Makefile b/Makefile
+index d7596a1a..dd7b97b6 100644
+--- a/Makefile
++++ b/Makefile
+@@ -50,6 +50,7 @@ CMD_STATICCHECK ?= staticcheck
+ # libs
+ #
+ 
++LIB_BPF ?= libbpf
+ LIB_ELF ?= libelf
+ LIB_ZLIB ?= zlib
+ 
+@@ -279,8 +280,6 @@ OUTPUT_DIR = ./dist
+ $(OUTPUT_DIR):
+ #
+ 	@$(CMD_MKDIR) -p $@
+-	@$(CMD_MKDIR) -p $@/libbpf
+-	@$(CMD_MKDIR) -p $@/libbpf/obj
+ 
+ #
+ # embedded btfhub
+@@ -418,7 +417,6 @@ TRACEE_EBPF_OBJ_CORE_HEADERS = $(shell find pkg/ebpf/c -name *.h)
+ bpf-core: $(OUTPUT_DIR)/tracee.bpf.core.o
+ 
+ $(OUTPUT_DIR)/tracee.bpf.core.o: \
+-	$(OUTPUT_DIR)/libbpf/libbpf.a \
+ 	$(TRACEE_EBPF_OBJ_SRC) \
+ 	$(TRACEE_EBPF_OBJ_CORE_HEADERS)
+ #
+@@ -453,8 +451,8 @@ ifeq ($(STATIC), 1)
+     GO_TAGS_EBPF := $(GO_TAGS_EBPF),netgo
+ endif
+ 
+-CUSTOM_CGO_CFLAGS = "-I$(abspath $(OUTPUT_DIR)/libbpf)"
+-CUSTOM_CGO_LDFLAGS = "$(shell $(call pkg_config, $(LIB_ELF))) $(shell $(call pkg_config, $(LIB_ZLIB))) $(abspath $(OUTPUT_DIR)/libbpf/libbpf.a)"
++CUSTOM_CGO_CFLAGS = ""
++CUSTOM_CGO_LDFLAGS = "$(shell $(call pkg_config, $(LIB_BPF))) $(shell $(call pkg_config, $(LIB_ELF))) $(shell $(call pkg_config, $(LIB_ZLIB)))"
+ 
+ GO_ENV_EBPF =
+ GO_ENV_EBPF += GOOS=linux
+@@ -474,6 +472,7 @@ $(OUTPUT_DIR)/tracee-ebpf: \
+ 	$(TRACEE_EBPF_SRC) \
+ 	./embedded-ebpf.go \
+ 	| .checkver_$(CMD_GO) \
++	.checklib_$(LIB_BPF) \
+ 	.checklib_$(LIB_ELF) \
+ 	.checklib_$(LIB_ZLIB) \
+ 	btfhub
diff --git a/nixpkgs/pkgs/tools/security/traitor/default.nix b/nixpkgs/pkgs/tools/security/traitor/default.nix
new file mode 100644
index 000000000000..26efa6d68a70
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/traitor/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "traitor";
+  version = "0.0.14";
+
+  src = fetchFromGitHub {
+    owner = "liamg";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-LQfKdjZaTm5z8DUt6He/RJHbOUCUwP3CV3Fyt5rJIfU=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Automatic Linux privilege escalation";
+    longDescription = ''
+      Automatically exploit low-hanging fruit to pop a root shell. Traitor packages
+      up a bunch of methods to exploit local misconfigurations and vulnerabilities
+      (including most of GTFOBins) in order to pop a root shell.
+    '';
+    homepage = "https://github.com/liamg/traitor";
+    platforms = platforms.linux;
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch b/nixpkgs/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch
new file mode 100644
index 000000000000..391eb1ad589d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch
@@ -0,0 +1,19 @@
+diff -ur trousers-0.3.11.2.orig/src/tcsd/tcsd_conf.c trousers-0.3.11.2/src/tcsd/tcsd_conf.c
+--- trousers-0.3.11.2.orig/src/tcsd/tcsd_conf.c	2013-07-12 18:27:37.000000000 +0200
++++ trousers-0.3.11.2/src/tcsd/tcsd_conf.c	2013-08-21 14:29:42.917231648 +0200
+@@ -763,6 +763,7 @@
+ 		return TCSERR(TSS_E_INTERNAL_ERROR);
+ 	}
+ 
++#ifndef ALLOW_NON_TSS_CONFIG_FILE
+ 	/* make sure user/group TSS owns the conf file */
+ 	if (stat_buf.st_uid != 0 || grp->gr_gid != stat_buf.st_gid) {
+ 		LogError("TCSD config file (%s) must be user/group %s/%s", tcsd_config_file,
+@@ -775,6 +776,7 @@
+ 		LogError("TCSD config file (%s) must be mode 0640", tcsd_config_file);
+ 		return TCSERR(TSS_E_INTERNAL_ERROR);
+ 	}
++#endif
+ #endif /* SOLARIS */
+ 
+ 	if ((f = fopen(tcsd_config_file, "r")) == NULL) {
diff --git a/nixpkgs/pkgs/tools/security/trousers/default.nix b/nixpkgs/pkgs/tools/security/trousers/default.nix
new file mode 100644
index 000000000000..5502de2d6272
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/trousers/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, openssl, pkg-config, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "trousers";
+  version = "0.3.15";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/trousers/trousers/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0zy7r9cnr2gvwr2fb1q4fc5xnvx405ymcbrdv7qsqwl3a4zfjnqy";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ openssl ];
+
+  patches = [ ./allow-non-tss-config-file-owner.patch ];
+
+  configureFlags = [ "--disable-usercheck" ];
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-DALLOW_NON_TSS_CONFIG_FILE" ];
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Trusted computing software stack";
+    homepage    = "https://trousers.sourceforge.net/";
+    license     = licenses.bsd3;
+    maintainers = [ maintainers.ak ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/truecrack/default.nix b/nixpkgs/pkgs/tools/security/truecrack/default.nix
new file mode 100644
index 000000000000..19ae85105657
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/truecrack/default.nix
@@ -0,0 +1,50 @@
+{ lib, gccStdenv, fetchFromGitLab, cudatoolkit
+, config
+, cudaSupport ? config.cudaSupport
+, pkg-config }:
+
+gccStdenv.mkDerivation rec {
+  pname = "truecrack";
+  version = "3.6";
+
+  src = fetchFromGitLab {
+    owner = "kalilinux";
+    repo = "packages/truecrack";
+    rev = "debian/${version}+git20150326-0kali1";
+    sha256 = "+Rw9SfaQtO1AJO6UVVDMCo8DT0dYEbv7zX8SI+pHCRQ=";
+  };
+
+  configureFlags = (if cudaSupport then [
+    "--with-cuda=${cudatoolkit}"
+  ] else [
+    "--enable-cpu"
+  ]);
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals cudaSupport [
+    cudatoolkit
+  ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: CpuAes.o:/build/source/src/Crypto/CpuAes.h:1233: multiple definition of
+  #     `t_rc'; CpuCore.o:/build/source/src/Crypto/CpuAes.h:1237: first defined here
+  # TODO: remove on upstream fixes it:
+  #   https://gitlab.com/kalilinux/packages/truecrack/-/issues/1
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  installFlags = [ "prefix=$(out)" ];
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A brute-force password cracker for TrueCrypt volumes, optimized for Nvidia Cuda technology";
+    homepage = "https://gitlab.com/kalilinux/packages/truecrack";
+    broken = cudaSupport;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ethancedwards8 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/trueseeing/default.nix b/nixpkgs/pkgs/tools/security/trueseeing/default.nix
new file mode 100644
index 000000000000..5feccbb2d8be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/trueseeing/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "trueseeing";
+  version = "2.1.10";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "alterakey";
+    repo = "trueseeing";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-q7hUsBmTRPizmNWueFtFDc5t7rd1evMrBj3oX1Q2VfM=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    flit-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = true;
+
+  propagatedBuildInputs = with python3.pkgs; [
+    attrs
+    jinja2
+    lxml
+    pypubsub
+    pyyaml
+    termcolor
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "trueseeing"
+  ];
+
+  meta = with lib; {
+    description = "Non-decompiling Android vulnerability scanner";
+    homepage = "https://github.com/alterakey/trueseeing";
+    changelog = "https://github.com/alterakey/trueseeing/releases/tag/v${version}";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/trufflehog/default.nix b/nixpkgs/pkgs/tools/security/trufflehog/default.nix
new file mode 100644
index 000000000000..c986dbab98cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/trufflehog/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, testers
+, trufflehog
+}:
+
+buildGoModule rec {
+  pname = "trufflehog";
+  version = "3.67.6";
+
+  src = fetchFromGitHub {
+    owner = "trufflesecurity";
+    repo = "trufflehog";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-LKnFlgMbgp47mNkER+gE4PwEpqBY1txmhDpmcPCXH24=";
+  };
+
+  vendorHash = "sha256-/DKly5ZFrySYrjGywjsyQd5Ky1bQ+ZIJll0io6XC5+s=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/trufflesecurity/trufflehog/v3/pkg/version.BuildVersion=${version}"
+  ];
+
+  # Test cases run git clone and require network access
+  doCheck = false;
+
+  postInstall = ''
+    rm $out/bin/{generate,snifftest}
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = trufflehog;
+    };
+  };
+
+  meta = with lib; {
+    description = "Find credentials all over the place";
+    homepage = "https://github.com/trufflesecurity/trufflehog";
+    changelog = "https://github.com/trufflesecurity/trufflehog/releases/tag/v${version}";
+    license = with licenses; [ agpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/trustymail/default.nix b/nixpkgs/pkgs/tools/security/trustymail/default.nix
new file mode 100644
index 000000000000..88d321708886
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/trustymail/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "trustymail";
+  version = "0.8.3";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "cisagov";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-aFXz78Gviki0yIcnn2EgR3mHmt0wMoY5u6RoT6zQc1Y=";
+  };
+
+  postPatch = ''
+    substituteInPlace pytest.ini \
+      --replace " --cov" ""
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dnspython
+    docopt
+    publicsuffixlist
+    pydns
+    pyspf
+    requests
+  ] ++ publicsuffixlist.optional-dependencies.update;
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "trustymail"
+  ];
+
+  meta = with lib; {
+    description = "Tool to scan domains and return data based on trustworthy email best practices";
+    homepage = "https://github.com/cisagov/trustymail";
+    changelog = "https://github.com/cisagov/trustymail/releases/tag/v${version}";
+    license = with licenses; [ cc0 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/uddup/default.nix b/nixpkgs/pkgs/tools/security/uddup/default.nix
new file mode 100644
index 000000000000..3516b4dcff8d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/uddup/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "uddup";
+  version = "0.9.3";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "rotemreiss";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1f5dm3772hiik9irnyvbs7wygcafbwi7czw3b47cwhb90b8fi5hg";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "uddup"
+  ];
+
+  meta = with lib; {
+    description = "Tool for de-duplication URLs";
+    homepage = "https://github.com/rotemreiss/uddup";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/udpx/default.nix b/nixpkgs/pkgs/tools/security/udpx/default.nix
new file mode 100644
index 000000000000..081c002a09e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/udpx/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "udpx";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "nullt3r";
+    repo = "udpx";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-IRnGi3TmCyxmJKAd8ZVRoSHDao+3Xt4F5QfHvNahvGo=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Single-packet UDP scanner";
+    homepage = "https://github.com/nullt3r/udpx";
+    changelog = "https://github.com/nullt3r/udpx/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/uncover/default.nix b/nixpkgs/pkgs/tools/security/uncover/default.nix
new file mode 100644
index 000000000000..f0ee8aa23757
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/uncover/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "uncover";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-CJA+rDLubghaQT+yb0zQY3y8hF0/5ISH9YFvIQHwH2Y=";
+  };
+
+  vendorHash = "sha256-A7XPsl27Q5CaQXQUEvNB05B2M3mFGz/yZ4sOnOHxhw8=";
+
+  meta = with lib; {
+    description = "API wrapper to search for exposed hosts";
+    longDescription = ''
+      uncover is a go wrapper using APIs of well known search engines to quickly
+      discover exposed hosts on the internet. It is built with automation in mind,
+      so you can query it and utilize the results with your current pipeline tools.
+      Currently, it supports shodan,shodan-internetdb, censys, and fofa search API.
+    '';
+    homepage = "https://github.com/projectdiscovery/uncover";
+    changelog = "https://github.com/projectdiscovery/uncover/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/urlhunter/default.nix b/nixpkgs/pkgs/tools/security/urlhunter/default.nix
new file mode 100644
index 000000000000..c70c43027a25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/urlhunter/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "urlhunter";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "utkusen";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-lX5zh+fYVSyWPUOnfRNMGZPsiuxjKBSpluPUMN9mZ+k=";
+  };
+
+  vendorHash = "sha256-JDDxarFROBhdi76mY6udn++lReKLdju/JBpj3JhGdQA=";
+
+  meta = with lib; {
+    description = "Recon tool that allows searching shortened URLs";
+    longDescription = ''
+      urlhunter is a recon tool that allows searching on URLs that are
+      exposed via shortener services such as bit.ly and goo.gl.
+    '';
+    homepage = "https://github.com/utkusen/urlhunter";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/usbrip/default.nix b/nixpkgs/pkgs/tools/security/usbrip/default.nix
new file mode 100644
index 000000000000..aa09d759b8e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/usbrip/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "usbrip";
+  version = "unstable-2021-07-02";
+
+  disabled = python3.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "snovvcrash";
+    repo = pname;
+    rev = "0f3701607ba13212ebefb4bbd9e68ec0e22d76ac";
+    sha256 = "1vws8ybhv7szpqvlbmv0hrkys2fhhaa5bj9dywv3q2y1xmljl0py";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    termcolor
+    terminaltables
+    tqdm
+  ];
+
+  postPatch = ''
+    # Remove install helpers which we don't need
+    substituteInPlace setup.py \
+      --replace "parse_requirements('requirements.txt')," "[]," \
+      --replace "resolve('wheel')" "" \
+      --replace "'install': LocalInstallCommand," ""
+  '';
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "usbrip" ];
+
+  meta = with lib; {
+    description = "Tool to track the history of USB events";
+    homepage = "https://github.com/snovvcrash/usbrip";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vals/default.nix b/nixpkgs/pkgs/tools/security/vals/default.nix
new file mode 100644
index 000000000000..5000615b4eab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vals/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, vals }:
+
+buildGoModule rec {
+  pname = "vals";
+  version = "0.33.1";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "variantdev";
+    repo = pname;
+    sha256 = "sha256-5+yaDcHqOt+bOdQIv4rDJuiR7acbkQvHJEfvc058+b8=";
+  };
+
+  vendorHash = "sha256-Lt6OPA6k+zXIahZR8F36YWruCtUsoQKb/LgzJ5NIcx8=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  # Tests require connectivity to various backends.
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = vals;
+    command = "vals version";
+  };
+
+  meta = with lib; {
+    description = "Helm-like configuration values loader with support for various sources";
+    license = licenses.asl20;
+    homepage = "https://github.com/variantdev/vals";
+    changelog = "https://github.com/variantdev/vals/releases/v${version}";
+    maintainers = with maintainers; [ stehessel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vault-medusa/default.nix b/nixpkgs/pkgs/tools/security/vault-medusa/default.nix
new file mode 100644
index 000000000000..382a732cf6b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vault-medusa/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "vault-medusa";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "jonasvinther";
+    repo = "medusa";
+    rev = "v${version}";
+    sha256 = "sha256-8lbaXcu+o+grbFPJxZ6p/LezxDFCUvOQyX49zX4V/v0=";
+  };
+
+  vendorHash = "sha256-/8wusZt0BQ//HCokjiSpsgsGb19FggrGrEuhCrwm9L0=";
+
+  meta = with lib; {
+    description = "A cli tool for importing and exporting Hashicorp Vault secrets";
+    homepage = "https://github.com/jonasvinther/medusa";
+    license = licenses.mit;
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vault-ssh-plus/default.nix b/nixpkgs/pkgs/tools/security/vault-ssh-plus/default.nix
new file mode 100644
index 000000000000..a1c77e5d0a29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vault-ssh-plus/default.nix
@@ -0,0 +1,48 @@
+{ buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, lib
+, openssh
+, testers
+, vault-ssh-plus
+}:
+buildGoModule rec {
+  pname = "vault-ssh-plus";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "isometry";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-IRmFC5WsLmHfPjS/jW5V7dNF5rNvmsh3YKwW7rGII24=";
+  };
+
+  vendorHash = "sha256-cuU7rEpJrwrbiXLajdv4h6GePbpZclweyB9qZ3SIjP0=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  postInstall = ''
+    mv $out/bin/vault-ssh-plus $out/bin/vssh
+    wrapProgram $out/bin/vssh --prefix PATH : ${lib.makeBinPath [ openssh ]};
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = vault-ssh-plus;
+    command = "vssh --version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/isometry/vault-ssh-plus";
+    changelog = "https://github.com/isometry/vault-ssh-plus/releases/tag/v${version}";
+    description = "Automatically use HashiCorp Vault SSH Client Key Signing with ssh(1)";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lesuisse ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vault/default.nix b/nixpkgs/pkgs/tools/security/vault/default.nix
new file mode 100644
index 000000000000..0db950ddca54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vault/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, lib, fetchFromGitHub, buildGoModule, installShellFiles, nixosTests
+, makeWrapper
+, gawk
+, glibc
+}:
+
+buildGoModule rec {
+  pname = "vault";
+  version = "1.15.5";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "vault";
+    rev = "v${version}";
+    sha256 = "sha256-KDQgiG+HSkLjiJfej9VqTcPZxOMMTh9n9yTDGfiGF3g=";
+  };
+
+  vendorHash = "sha256-fNUoeyBVci/S4LCpAPYjVbf8r+ROB5uL1TaUKJZsNes=";
+
+  proxyVendor = true;
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  tags = [ "vault" ];
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/hashicorp/vault/sdk/version.GitCommit=${src.rev}"
+    "-X github.com/hashicorp/vault/sdk/version.Version=${version}"
+    "-X github.com/hashicorp/vault/sdk/version.VersionPrerelease="
+  ];
+
+  postInstall = ''
+    echo "complete -C $out/bin/vault vault" > vault.bash
+    installShellCompletion vault.bash
+  '' + lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/bin/vault \
+      --prefix PATH ${lib.makeBinPath [ gawk glibc ]}
+  '';
+
+  passthru.tests = { inherit (nixosTests) vault vault-postgresql vault-dev vault-agent; };
+
+  meta = with lib; {
+    homepage = "https://www.vaultproject.io/";
+    description = "A tool for managing secrets";
+    changelog = "https://github.com/hashicorp/vault/blob/v${version}/CHANGELOG.md";
+    license = licenses.bsl11;
+    mainProgram = "vault";
+    maintainers = with maintainers; [ rushmorem lnl7 offline pradeepchhetri Chili-Man techknowlogick ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vault/update-bin.sh b/nixpkgs/pkgs/tools/security/vault/update-bin.sh
new file mode 100755
index 000000000000..25f41e2aad12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vault/update-bin.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused gawk nix-prefetch
+
+set -euo pipefail
+
+ROOT="$(dirname "$(readlink -f "$0")")"
+NIX_DRV="$ROOT/vault-bin.nix"
+if [ ! -f "$NIX_DRV" ]; then
+  echo "ERROR: cannot find vault-bin in $ROOT"
+  exit 1
+fi
+
+fetch_arch() {
+  VER="$1"; ARCH="$2"
+  URL="https://releases.hashicorp.com/vault/${VER}/vault_${VER}_${ARCH}.zip"
+  nix-prefetch "{ stdenv, fetchzip }:
+stdenv.mkDerivation rec {
+  pname = \"vault-bin\"; version = \"${VER}\";
+  src = fetchzip { url = \"$URL\"; };
+}
+"
+}
+
+replace_sha() {
+  sed -i "s#$1 = \"sha256-.\{44\}\"#$1 = \"$2\"#" "$NIX_DRV"
+}
+
+# https://releases.hashicorp.com/vault/1.9.4/vault_1.9.4_linux_arm64.zip
+VAULT_VER=$(curl -Ls -w "%{url_effective}" -o /dev/null https://github.com/hashicorp/vault/releases/latest | awk -F'/' '{print $NF}' | sed 's/v//')
+
+VAULT_LINUX_X86_SHA256=$(fetch_arch "$VAULT_VER" "linux_386")
+VAULT_LINUX_X64_SHA256=$(fetch_arch "$VAULT_VER" "linux_amd64")
+VAULT_DARWIN_X64_SHA256=$(fetch_arch "$VAULT_VER" "darwin_amd64")
+VAULT_LINUX_AARCH64_SHA256=$(fetch_arch "$VAULT_VER" "linux_arm64")
+VAULT_DARWIN_AARCH64_SHA256=$(fetch_arch "$VAULT_VER" "darwin_arm64")
+
+sed -i "s/version = \".*\"/version = \"$VAULT_VER\"/" "$NIX_DRV"
+
+replace_sha "i686-linux" "$VAULT_LINUX_X86_SHA256"
+replace_sha "x86_64-linux" "$VAULT_LINUX_X64_SHA256"
+replace_sha "x86_64-darwin" "$VAULT_DARWIN_X64_SHA256"
+replace_sha "aarch64-linux" "$VAULT_LINUX_AARCH64_SHA256"
+replace_sha "aarch64-darwin" "$VAULT_DARWIN_AARCH64_SHA256"
diff --git a/nixpkgs/pkgs/tools/security/vault/vault-bin.nix b/nixpkgs/pkgs/tools/security/vault/vault-bin.nix
new file mode 100644
index 000000000000..88430d842841
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vault/vault-bin.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "vault-bin";
+  version = "1.15.5";
+
+  src =
+    let
+      inherit (stdenv.hostPlatform) system;
+      selectSystem = attrs: attrs.${system} or (throw "Unsupported system: ${system}");
+      suffix = selectSystem {
+        x86_64-linux = "linux_amd64";
+        aarch64-linux = "linux_arm64";
+        i686-linux = "linux_386";
+        x86_64-darwin = "darwin_amd64";
+        aarch64-darwin = "darwin_arm64";
+      };
+      sha256 = selectSystem {
+        x86_64-linux = "sha256-WchJdMn8PkCu3MydY6ssbXpMCaQBlDbyTQ1kF69KQ+0=";
+        aarch64-linux = "sha256-tjLyPC156q8y4RKB0+QVIxiXbkW6/qTytCC0WhOo8xU=";
+        i686-linux = "sha256-TSAhomxTIKSHE0BE1jiL9a15hpGRmF7clFbTwsrDxuk=";
+        x86_64-darwin = "sha256-vG3S84P7+zvQnIjohPHN3JefN4wM9uDdPqindnwlXpE=";
+        aarch64-darwin = "sha256-nQsKXD+1gGclUoZLlUpA6k9QuNv/NQ+roRa6kvXCIXQ=";
+      };
+    in
+    fetchzip {
+      url = "https://releases.hashicorp.com/vault/${version}/vault_${version}_${suffix}.zip";
+      inherit sha256;
+    };
+
+  dontConfigure = true;
+  dontBuild = true;
+  dontStrip = stdenv.isDarwin;
+
+  installPhase = ''
+    runHook preInstall
+    install -D vault $out/bin/vault
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/vault --help
+    $out/bin/vault version
+    runHook postInstallCheck
+  '';
+
+  dontPatchELF = true;
+  dontPatchShebangs = true;
+
+  passthru.updateScript = ./update-bin.sh;
+
+  meta = with lib; {
+    description = "A tool for managing secrets, this binary includes the UI";
+    homepage = "https://www.vaultproject.io";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.bsl11;
+    maintainers = with maintainers; teams.serokell.members ++ [ offline psyanticy Chili-Man techknowlogick mkaito ];
+    mainProgram = "vault";
+    platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-darwin" "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vaultwarden/default.nix b/nixpkgs/pkgs/tools/security/vaultwarden/default.nix
new file mode 100644
index 000000000000..3261dc5a923c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vaultwarden/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, callPackage, rustPlatform, fetchFromGitHub, nixosTests
+, pkg-config, openssl
+, libiconv, Security, CoreServices, SystemConfiguration
+, dbBackend ? "sqlite", libmysqlclient, postgresql }:
+
+let
+  webvault = callPackage ./webvault.nix {};
+in
+
+rustPlatform.buildRustPackage rec {
+  pname = "vaultwarden";
+  version = "1.30.3";
+
+  src = fetchFromGitHub {
+    owner = "dani-garcia";
+    repo = pname;
+    rev = version;
+    hash = "sha256-vUAgW/kTFO9yzWFIWqM1f6xEZYH8ojIdt2eOhP9ID8g=";
+  };
+
+  cargoHash = "sha256-+FmVkemZTlFOf+fnTJED3u13pXeAuP/wIvEb96Vwa6I=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = with lib; [ openssl ]
+    ++ optionals stdenv.isDarwin [ libiconv Security CoreServices SystemConfiguration ]
+    ++ optional (dbBackend == "mysql") libmysqlclient
+    ++ optional (dbBackend == "postgresql") postgresql;
+
+  buildFeatures = dbBackend;
+
+  passthru = {
+    inherit webvault;
+    tests = nixosTests.vaultwarden;
+    updateScript = callPackage ./update.nix {};
+  };
+
+  meta = with lib; {
+    description = "Unofficial Bitwarden compatible server written in Rust";
+    homepage = "https://github.com/dani-garcia/vaultwarden";
+    changelog = "https://github.com/dani-garcia/vaultwarden/releases/tag/${version}";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ SuperSandro2000 ivan ];
+    mainProgram = "vaultwarden";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vaultwarden/update.nix b/nixpkgs/pkgs/tools/security/vaultwarden/update.nix
new file mode 100644
index 000000000000..4d0c6c4a5047
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vaultwarden/update.nix
@@ -0,0 +1,30 @@
+{ writeShellApplication
+, lib
+, nix
+, nix-prefetch-git
+, nix-update
+, curl
+, git
+, gnugrep
+, gnused
+, jq
+, yq
+}:
+
+lib.getExe (writeShellApplication {
+  name = "update-vaultwarden";
+  runtimeInputs = [ curl git gnugrep gnused jq yq nix nix-prefetch-git nix-update ];
+
+  text = ''
+    VAULTWARDEN_VERSION=$(curl --silent https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest | jq -r '.tag_name')
+    nix-update "vaultwarden" --version "$VAULTWARDEN_VERSION"
+
+    URL="https://raw.githubusercontent.com/dani-garcia/vaultwarden/''${VAULTWARDEN_VERSION}/docker/DockerSettings.yaml"
+    WEBVAULT_VERSION="$(curl --silent "$URL" | yq -r ".vault_version" | sed s/^v//)"
+    old_hash="$(nix --extra-experimental-features nix-command eval -f default.nix --raw vaultwarden.webvault.bw_web_builds.outputHash)"
+    new_hash="$(nix-prefetch-git https://github.com/dani-garcia/bw_web_builds.git --rev "v$WEBVAULT_VERSION" | jq --raw-output ".sha256")"
+    new_hash_sri="$(nix --extra-experimental-features nix-command hash to-sri --type sha256 "$new_hash")"
+    sed -e "s#$old_hash#$new_hash_sri#" -i pkgs/tools/security/vaultwarden/webvault.nix
+    nix-update "vaultwarden.webvault" --version "$WEBVAULT_VERSION"
+  '';
+})
diff --git a/nixpkgs/pkgs/tools/security/vaultwarden/webvault.nix b/nixpkgs/pkgs/tools/security/vaultwarden/webvault.nix
new file mode 100644
index 000000000000..6dae287e869f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vaultwarden/webvault.nix
@@ -0,0 +1,74 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, git
+, nixosTests
+, python3
+}:
+
+let
+  version = "2024.1.2";
+
+  bw_web_builds = fetchFromGitHub {
+    owner = "dani-garcia";
+    repo = "bw_web_builds";
+    rev = "v${version}";
+    hash = "sha256-XpFGLZpX5BeP6cEZfGlNnh94aS6As0eCnllVyHLrOWo=";
+  };
+
+in buildNpmPackage rec {
+  pname = "vaultwarden-webvault";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "bitwarden";
+    repo = "clients";
+    rev = "web-v${lib.removeSuffix "b" version}";
+    hash = "sha256-hzAkVzaCjwoZ/PMnsnSmsqUBWLhqfPWuWVujChy0V38=";
+  };
+
+  npmDepsHash = "sha256-KTqPf8jy8cgGz0+1GssSzEfPVSSQlLenLPgHggNoGfc=";
+
+  postPatch = ''
+    ln -s ${bw_web_builds}/{patches,resources} ..
+    PATH="${git}/bin:$PATH" VAULT_VERSION="${lib.removePrefix "web-" src.rev}" \
+      bash ${bw_web_builds}/scripts/apply_patches.sh
+  '';
+
+  nativeBuildInputs = [
+    python3
+  ];
+
+  makeCacheWritable = true;
+
+  ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
+
+  npmBuildScript = "dist:oss:selfhost";
+
+  npmBuildFlags = [
+    "--workspace" "apps/web"
+  ];
+
+  npmFlags = [ "--legacy-peer-deps" ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/share/vaultwarden
+    mv apps/web/build $out/share/vaultwarden/vault
+    runHook postInstall
+  '';
+
+  passthru = {
+    inherit bw_web_builds;
+    tests = nixosTests.vaultwarden;
+  };
+
+  meta = with lib; {
+    description = "Integrates the web vault into vaultwarden";
+    homepage = "https://github.com/dani-garcia/bw_web_builds";
+    changelog = "https://github.com/dani-garcia/bw_web_builds/releases/tag/v${version}";
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda msteen mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/verifpal/default.nix b/nixpkgs/pkgs/tools/security/verifpal/default.nix
new file mode 100644
index 000000000000..3d47dfa3abc5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/verifpal/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchgit
+, buildGoModule
+, pigeon
+}:
+
+buildGoModule rec {
+  pname = "verifpal";
+  version = "0.27.0";
+
+  src = fetchgit {
+    url = "https://source.symbolic.software/verifpal/verifpal.git";
+    rev = "v${version}";
+    hash = "sha256-rihY5p6nJ1PKjI+gn3NNXy+uzeBG2UNyRYy3UjScf2Q=";
+  };
+
+  vendorHash = "sha256-XOCRwh2nEIC+GjGwqd7nhGWQD7vBMLEZZ2FNxs0NX+E=";
+
+  nativeBuildInputs = [ pigeon ];
+
+  subPackages = [ "cmd/verifpal" ];
+
+  # goversioninfo is for Windows only and can be skipped during go generate
+  preBuild = ''
+    substituteInPlace cmd/verifpal/main.go --replace "go:generate goversioninfo" "(disabled goversioninfo)"
+    go generate verifpal.com/cmd/verifpal
+  '';
+
+  meta = {
+    homepage = "https://verifpal.com/";
+    description = "Cryptographic protocol analysis for students and engineers";
+    maintainers = with lib.maintainers; [ zimbatm ];
+    license = with lib.licenses; [ gpl3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vexctl/default.nix b/nixpkgs/pkgs/tools/security/vexctl/default.nix
new file mode 100644
index 000000000000..335da7f93acf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vexctl/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "vexctl";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "chainguard-dev";
+    repo = "vex";
+    rev = "v${version}";
+    sha256 = "sha256-f5UVX6x4DwjlcgMAv0GuKBH9UUzFhQ8pW8l+9pc7RQ4=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse HEAD > $out/COMMIT
+      # '0000-00-00T00:00:00Z'
+      date -u -d "@$(git log -1 --pretty=%ct)" "+'%Y-%m-%dT%H:%M:%SZ'" > $out/SOURCE_DATE_EPOCH
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+  vendorHash = "sha256-GZIssLLPg2dF7xsvsYn2MKYunMCpGbNA+6qCYBW++vk=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X sigs.k8s.io/release-utils/version.gitVersion=v${version}"
+    "-X sigs.k8s.io/release-utils/version.gitTreeState=clean"
+  ];
+
+  # ldflags based on metadata from git and source
+  preBuild = ''
+    ldflags+=" -X sigs.k8s.io/release-utils/version.gitCommit=$(cat COMMIT)"
+    ldflags+=" -X sigs.k8s.io/release-utils/version.buildDate=$(cat SOURCE_DATE_EPOCH)"
+  '';
+
+  postBuild = ''
+    mv $GOPATH/bin/vex{,ctl}
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd vexctl \
+      --bash <($out/bin/vexctl completion bash) \
+      --fish <($out/bin/vexctl completion fish) \
+      --zsh <($out/bin/vexctl completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/vexctl --help
+    $out/bin/vexctl version 2>&1 | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/chainguard-dev/vex/";
+    description = "A tool to attest VEX impact statements";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/volatility3/default.nix b/nixpkgs/pkgs/tools/security/volatility3/default.nix
new file mode 100644
index 000000000000..7f6307687323
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/volatility3/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "volatility3";
+  version = "2.5.2";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "volatilityfoundation";
+    repo = "volatility3";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-tghwDDfy8TohqTn9WQvmEal3qK0OKKq7GvGnPGTble0=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    capstone
+    jsonschema
+    pefile
+    pycryptodome
+    yara-python
+  ];
+
+  preBuild = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "volatility3"
+  ];
+
+  meta = with lib; {
+    description = "Volatile memory extraction frameworks";
+    homepage = "https://www.volatilityfoundation.org/";
+    changelog = "https://github.com/volatilityfoundation/volatility3/releases/tag/v${version}";
+    license = {
+      # Volatility Software License 1.0
+      free = false;
+      url = "https://www.volatilityfoundation.org/license/vsl-v1.0";
+    };
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vt-cli/default.nix b/nixpkgs/pkgs/tools/security/vt-cli/default.nix
new file mode 100644
index 000000000000..3a549d7e6f1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vt-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "vt-cli";
+  version = "0.10.2";
+
+  src = fetchFromGitHub {
+    owner = "VirusTotal";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-qwfrNm6XfoOtlpAI2aAaoivkp3Xsw9LnVtwnZ1wXGUs=";
+  };
+
+  vendorHash = "sha256-XN6dJpoJe9nJn+Tr9SYD64LE0XFiO2vlpdyI9SrZZjQ=";
+
+  ldflags = [
+    "-X github.com/VirusTotal/vt-cli/cmd.Version=${version}"
+  ];
+
+  subPackages = [ "vt" ];
+
+  meta = with lib; {
+    description = "VirusTotal Command Line Interface";
+    homepage = "https://github.com/VirusTotal/vt-cli";
+    changelog = "https://github.com/VirusTotal/vt-cli/releases/tag/${version}";
+    license = licenses.asl20;
+    mainProgram = "vt";
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vulnix/default.nix b/nixpkgs/pkgs/tools/security/vulnix/default.nix
new file mode 100644
index 000000000000..7f6d29891f0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vulnix/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, python3Packages
+, fetchPypi
+, nix
+, ronn
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "vulnix";
+  version = "1.10.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "07v3ddvvhi3bslwrlin45kz48i3va2lzd6ny0blj5i2z8z40qcfm";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.cfg \
+      --replace "--flake8" ""
+  '';
+
+  outputs = [ "out" "doc" "man" ];
+  nativeBuildInputs = [ ronn ];
+
+  nativeCheckInputs = with python3Packages; [
+    freezegun
+    pytest
+    pytest-cov
+  ];
+
+  propagatedBuildInputs = [
+    nix
+  ] ++ (with python3Packages; [
+    click
+    colorama
+    pyyaml
+    requests
+    setuptools
+    toml
+    zodb
+  ]);
+
+  postBuild = "make -C doc";
+
+  checkPhase = "py.test src/vulnix";
+
+  postInstall = ''
+    install -D -t $doc/share/doc/vulnix README.rst CHANGES.rst
+    gzip $doc/share/doc/vulnix/*.rst
+    install -D -t $man/share/man/man1 doc/vulnix.1
+    install -D -t $man/share/man/man5 doc/vulnix-whitelist.5
+  '';
+
+  dontStrip = true;
+
+  meta = with lib; {
+    description = "NixOS vulnerability scanner";
+    homepage = "https://github.com/flyingcircusio/vulnix";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ckauhaus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wad/default.nix b/nixpkgs/pkgs/tools/security/wad/default.nix
new file mode 100644
index 000000000000..5dc81a7f56df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wad/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "wad";
+  version = "0.4.6";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "CERN-CERT";
+    repo = "WAD";
+    rev = "v${version}";
+    hash = "sha256-/mlmOzFkyKpmK/uk4813Wk0cf/+ynX3Qxafnd1mGR5k=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    six
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "wad"
+  ];
+
+  meta = with lib; {
+    description = "Tool for detecting technologies used by web applications";
+    longDescription = ''
+      WAD lets you analyze given URL(s) and detect technologies used by web
+      application behind that URL, from the OS and web server level, to the
+      programming platform and frameworks, as well as server- and client-side
+      applications, tools and libraries.
+    '';
+    homepage = "https://github.com/CERN-CERT/WAD";
+    # wad is GPLv3+, wappalyzer source is MIT
+    license = with licenses; [ gpl3Plus mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/waf-tester/default.nix b/nixpkgs/pkgs/tools/security/waf-tester/default.nix
new file mode 100644
index 000000000000..b8dd01ed19b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/waf-tester/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, waf-tester
+}:
+
+buildGoModule rec {
+  pname = "waf-tester";
+  version = "0.6.13";
+
+  src = fetchFromGitHub {
+    owner = "jreisinger";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-UPviooQNGRVwf/bTz9ApedJDAGeCvh9iD1HXFOQXPcw=";
+  };
+
+  vendorHash = "sha256-HOYHrR1LtVcXMKFHPaA7PYH4Fp9nhqal2oxYTq/i4/8=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = waf-tester;
+    command = "waf-tester -version";
+    version = "waf-tester ${version}, commit none, built at unknown by unknown";
+  };
+
+  meta = with lib; {
+    description = "Tool to test Web Application Firewalls (WAFs)";
+    homepage = "https://github.com/jreisinger/waf-tester";
+    changelog = "https://github.com/jreisinger/waf-tester/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wafw00f/default.nix b/nixpkgs/pkgs/tools/security/wafw00f/default.nix
new file mode 100644
index 000000000000..55d4b7591e38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wafw00f/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "wafw00f";
+  version = "2.2.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "EnableSecurity";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-wJZ1/aRMFpE6Q5YAtGxXwxe2G9H/de+l3l0C5rwEWA8=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+    pluginbase
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "wafw00f"
+  ];
+
+  meta = with lib; {
+    description = "Tool to identify and fingerprint Web Application Firewalls (WAF)";
+    homepage = "https://github.com/EnableSecurity/wafw00f";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wapiti/default.nix b/nixpkgs/pkgs/tools/security/wapiti/default.nix
new file mode 100644
index 000000000000..13a7e55cc3ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wapiti/default.nix
@@ -0,0 +1,160 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "wapiti";
+  version = "3.1.8";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "wapiti-scanner";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-2ssbczUa4pTA5Fai+sK1hES8skJMIHxa/R2hNIiEVLs=";
+  };
+
+  postPatch = ''
+    # Ignore pinned versions
+    sed -i -e "s/==[0-9.]*//;s/>=[0-9.]*//" pyproject.toml
+
+    # Remove code coverage checking
+    substituteInPlace pyproject.toml \
+      --replace "--cov --cov-report=xml" ""
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    wheel
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiocache
+    aiohttp
+    aiosqlite
+    arsenic
+    beautifulsoup4
+    browser-cookie3
+    dnspython
+    h11
+    httpcore
+    httpx
+    httpx-ntlm
+    loguru
+    mako
+    markupsafe
+    mitmproxy
+    pyasn1
+    six
+    sqlalchemy
+    tld
+    yaswfp
+  ] ++ httpx.optional-dependencies.brotli
+  ++ httpx.optional-dependencies.socks;
+
+  __darwinAllowLocalNetworking = true;
+
+  nativeCheckInputs = with python3.pkgs; [
+    respx
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  disabledTests = [
+    # Tests requires network access
+    "test_attr"
+    "test_bad_separator_used"
+    "test_blind"
+    "test_chunked_timeout"
+    "test_cookies_detection"
+    "test_cookies"
+    "test_csrf_cases"
+    "test_detection"
+    "test_direct"
+    "test_dom_detection"
+    "test_drop_cookies"
+    "test_escape_with_style"
+    "test_explorer_extract_links"
+    "test_explorer_filtering"
+    "test_false"
+    "test_frame"
+    "test_headers_detection"
+    "test_html_detection"
+    "test_implies_detection"
+    "test_inclusion_detection"
+    "test_merge_with_and_without_redirection"
+    "test_meta_detection"
+    "test_multi_detection"
+    "test_no_crash"
+    "test_options"
+    "test_out_of_band"
+    "test_partial_tag_name_escape"
+    "test_prefix_and_suffix_detection"
+    "test_qs_limit"
+    "test_rare_tag_and_event"
+    "test_redirect_detection"
+    "test_request_object"
+    "test_save_and_restore_state"
+    "test_script"
+    "test_ssrf"
+    "test_tag_name_escape"
+    "test_timeout"
+    "test_title_false_positive"
+    "test_title_positive"
+    "test_true_positive_request_count"
+    "test_unregistered_cname"
+    "test_url_detection"
+    "test_verify_dns"
+    "test_vulnerabilities"
+    "test_warning"
+    "test_whole"
+    "test_xss_inside_tag_input"
+    "test_xss_inside_tag_link"
+    "test_xss_uppercase_no_script"
+    "test_xss_with_strong_csp"
+    "test_xss_with_weak_csp"
+    "test_xxe"
+    # Requires a PHP installation
+    "test_cookies"
+    "test_fallback_to_html_injection"
+    "test_loknop_lfi_to_rce"
+    "test_redirect"
+    "test_timesql"
+    "test_xss_inside_href_link"
+    "test_xss_inside_src_iframe"
+    # TypeError: Expected bytes or bytes-like object got: <class 'str'>
+    "test_persister_upload"
+    # Requires creating a socket to an external URL
+    "test_attack_unifi"
+  ];
+
+  disabledTestPaths = [
+    # Requires sslyze which is obsolete and was removed
+    "tests/attack/test_mod_ssl.py"
+  ];
+
+  pythonImportsCheck = [
+    "wapitiCore"
+  ];
+
+  meta = with lib; {
+    description = "Web application vulnerability scanner";
+    longDescription = ''
+      Wapiti allows you to audit the security of your websites or web applications.
+      It performs "black-box" scans (it does not study the source code) of the web
+      application by crawling the webpages of the deployed webapp, looking for
+      scripts and forms where it can inject data. Once it gets the list of URLs,
+      forms and their inputs, Wapiti acts like a fuzzer, injecting payloads to see
+      if a script is vulnerable.
+    '';
+    homepage = "https://wapiti-scanner.github.io/";
+    changelog = "https://github.com/wapiti-scanner/wapiti/blob/${version}/doc/ChangeLog_Wapiti";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/web-eid-app/default.nix b/nixpkgs/pkgs/tools/security/web-eid-app/default.nix
new file mode 100644
index 000000000000..fd9c4cc319e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/web-eid-app/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, gtest
+, pcsclite
+, pkg-config
+, qttools
+}:
+
+mkDerivation rec {
+  pname = "web-eid-app";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "web-eid";
+    repo = "web-eid-app";
+    rev = "v${version}";
+    sha256 = "sha256-xWwguxs/121BFF1zhb/HxS9b1vTwQRemhPKOfHEXVZQ=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+  ];
+
+  buildInputs = [
+    gtest # required during build of lib/libelectronic-id/lib/libpcsc-cpp
+    pcsclite
+  ];
+
+  meta = with lib; {
+    description = "signing and authentication operations with smart cards for the Web eID browser extension";
+    longDescription = ''
+      The Web eID application performs cryptographic digital signing and
+      authentication operations with electronic ID smart cards for the Web eID
+      browser extension (it is the [native messaging host](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging)
+      for the extension). Also works standalone without the extension in command-line
+      mode.
+    '';
+    homepage = "https://github.com/web-eid/web-eid-app";
+    license = licenses.mit;
+    maintainers = [ maintainers.flokli ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/webanalyze/default.nix b/nixpkgs/pkgs/tools/security/webanalyze/default.nix
new file mode 100644
index 000000000000..427d84c5282d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/webanalyze/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "webanalyze";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "rverton";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-rnNbEPlbye0gjUamwq1xjFM/4g0eEHsGOAZWziEqxwM=";
+  };
+
+  vendorHash = "sha256-XPOsC+HoLytgv1fhAaO5HYSvuOP6OhjLyOYTfiD64QI=";
+
+  meta = with lib; {
+    description = "Tool to uncover technologies used on websites";
+    homepage = "https://github.com/rverton/webanalyze";
+    changelog = "https://github.com/rverton/webanalyze/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "webanalyze";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/weggli/default.nix b/nixpkgs/pkgs/tools/security/weggli/default.nix
new file mode 100644
index 000000000000..85083e2cf22b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/weggli/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, testers
+, weggli
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "weggli";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "weggli-rs";
+    repo = "weggli";
+    rev = "v${version}";
+    hash = "sha256-6XSedsTUjcZzFXaNitsXlUBpxC6TYVMCB+AfH3x7c5E=";
+  };
+
+  cargoSha256 = "sha256-Cj/m4GRaqI/lHYFruj047B7FdGoVl/wC8I2o1dzhOTs=";
+
+  passthru.tests.version = testers.testVersion {
+    package = weggli;
+    command = "weggli -V";
+    version = "weggli ${version}";
+  };
+
+  meta = with lib; {
+    description = "Weggli is a fast and robust semantic search tool for C and C++ codebases";
+    homepage = "https://github.com/weggli-rs/weggli";
+    changelog = "https://github.com/weggli-rs/weggli/releases/tag/v${version}";
+    mainProgram = "weggli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ arturcygan mfrw ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/whatweb/Gemfile b/nixpkgs/pkgs/tools/security/whatweb/Gemfile
new file mode 100644
index 000000000000..a376a3baae36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/whatweb/Gemfile
@@ -0,0 +1,6 @@
+source 'https://rubygems.org'
+gem 'ipaddr'
+gem 'addressable'
+gem 'json'
+gem 'mongo'
+gem 'rchardet'
diff --git a/nixpkgs/pkgs/tools/security/whatweb/Gemfile.lock b/nixpkgs/pkgs/tools/security/whatweb/Gemfile.lock
new file mode 100644
index 000000000000..7bfd24112b1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/whatweb/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.8.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    bson (4.14.1)
+    ipaddr (1.2.4)
+    json (2.6.1)
+    mongo (2.17.1)
+      bson (>= 4.8.2, < 5.0.0)
+    public_suffix (4.0.6)
+    rchardet (1.8.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  addressable
+  ipaddr
+  json
+  mongo
+  rchardet
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/security/whatweb/default.nix b/nixpkgs/pkgs/tools/security/whatweb/default.nix
new file mode 100644
index 000000000000..30d866da869a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/whatweb/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, bundlerEnv, ruby }:
+
+let
+  gems = bundlerEnv {
+    name = "whatweb-env";
+    inherit ruby;
+    gemdir = ./.;
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "whatweb";
+  version = "0.5.5";
+
+  src = fetchFromGitHub {
+    owner = "urbanadventurer";
+    repo = "whatweb";
+    rev = "v${version}";
+    sha256 = "sha256-HLF55x4C8n8aPO4SI0d6Z9wZe80krtUaGUFmMaYRBIE=";
+  };
+
+  prePatch = ''
+    substituteInPlace Makefile \
+      --replace "/usr/local" "$out" \
+      --replace "/usr" "$out"
+  '';
+
+  buildInputs = [ gems ];
+
+  installPhase = ''
+    runHook preInstall
+
+    raw=$out/share/whatweb/whatweb
+    rm $out/bin/whatweb
+    cat << EOF >> $out/bin/whatweb
+    #!/bin/sh -e
+    exec ${gems}/bin/bundle exec ${ruby}/bin/ruby "$raw" "\$@"
+    EOF
+    chmod +x $out/bin/whatweb
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Next generation web scanner";
+    homepage = "https://github.com/urbanadventurer/whatweb";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/whatweb/gemset.nix b/nixpkgs/pkgs/tools/security/whatweb/gemset.nix
new file mode 100644
index 000000000000..22d469b53e27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/whatweb/gemset.nix
@@ -0,0 +1,74 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  bson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03n3w96vpblaxvk1qk8hq7sbsmg4nv7qdkdr8f7nfvalgpakp5i5";
+      type = "gem";
+    };
+    version = "4.14.1";
+  };
+  ipaddr = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qd34nzpgp3fxfjbvaqg3dcnfr0cgl5vjvcqy0hfllbvfcklnbq";
+      type = "gem";
+    };
+    version = "1.2.4";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z9grvjyfz16ag55hg522d3q4dh07hf391sf9s96npc0vfi85xkz";
+      type = "gem";
+    };
+    version = "2.6.1";
+  };
+  mongo = {
+    dependencies = ["bson"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19sihy8ihi3hmdg3gxbf4qvzmjnzx8xygg9534012j9z0wmhs7h1";
+      type = "gem";
+    };
+    version = "2.17.1";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  rchardet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1isj1b3ywgg2m1vdlnr41lpvpm3dbyarf1lla4dfibfmad9csfk9";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wipe/default.nix b/nixpkgs/pkgs/tools/security/wipe/default.nix
new file mode 100644
index 000000000000..5ced99060fb7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wipe/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "wipe";
+  version = "2.3.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/wipe/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "180snqvh6k6il6prb19fncflf2jcvkihlb4w84sbndcv1wvicfa6";
+  };
+
+  patches = [ ./fix-install.patch ];
+
+  meta = with lib; {
+    description = "Secure file wiping utility";
+    homepage    = "https://wipe.sourceforge.net/";
+    license     = licenses.gpl2;
+    platforms   = platforms.all;
+    maintainers = [ maintainers.abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wipe/fix-install.patch b/nixpkgs/pkgs/tools/security/wipe/fix-install.patch
new file mode 100644
index 000000000000..2df3a1eec6a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wipe/fix-install.patch
@@ -0,0 +1,18 @@
+diff -ru3 wipe-2.3.1/Makefile.in wipe-2.3.1-new/Makefile.in
+--- wipe-2.3.1/Makefile.in	2009-11-02 00:11:30.000000000 +0300
++++ wipe-2.3.1-new/Makefile.in	2014-10-18 02:51:10.088966232 +0400
+@@ -60,12 +60,12 @@
+ 	$(INSTALL_BIN) -d $(bindir)
+ 	$(INSTALL_BIN) -s $(BIN_OUT) $(bindir)
+ 	$(INSTALL) -d $(mandir)/man1
+-	$(INSTALL) -o root -m 0644 wipe.1 $(mandir)/man1/
++	$(INSTALL) -m 0644 wipe.1 $(mandir)/man1/
+ 	rm -rf $(datadir)/doc/wipe*
+ 	$(INSTALL) -d $(datadir)/doc/wipe
+ 
+ 	for file in $(DOCS); do \
+-		$(INSTALL) -o root -m 0644 $$file $(datadir)/doc/wipe/; \
++		$(INSTALL) -m 0644 $$file $(datadir)/doc/wipe/; \
+ 	done
+ 
+ install_home: $(BIN_OUT)
diff --git a/nixpkgs/pkgs/tools/security/witness/default.nix b/nixpkgs/pkgs/tools/security/witness/default.nix
new file mode 100644
index 000000000000..42e6455ae7dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/witness/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+
+# testing
+, testers
+, witness
+}:
+
+buildGoModule rec {
+  pname = "witness";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "in-toto";
+    repo = "witness";
+    rev = "v${version}";
+    sha256 = "sha256-U+dcaPi9Drg4I2SZlZPaR3Ryb+Dz27nyPI2XJPG/LWc=";
+  };
+  vendorHash = "sha256-pjcyAGdR8TsU9YBy5zd6u575vDKPwy8s85TXUsuxZiU=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # We only want the witness binary, not the helper utilities for generating docs.
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/in-toto/witness/cmd.Version=v${version}"
+  ];
+
+  # Feed in all tests for testing
+  # This is because subPackages above limits what is built to just what we
+  # want but also limits the tests
+  preCheck = ''
+    unset subPackages
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd witness \
+      --bash <($out/bin/witness completion bash) \
+      --fish <($out/bin/witness completion fish) \
+      --zsh <($out/bin/witness completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = witness;
+    command = "witness version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "A pluggable framework for software supply chain security. Witness prevents tampering of build materials and verifies the integrity of the build process from source to target";
+    longDescription = ''
+      Witness prevents tampering of build materials and verifies the integrity
+      of the build process from source to target. It works by wrapping commands
+      executed in a continuous integration process. Its attestation system is
+      pluggable and offers support out of the box for most major CI and
+      infrastructure providers. Verification of Witness metadata and a secure
+      PKI distribution system will mitigate against many software supply chain
+      attack vectors and can be used as a framework for automated governance.
+    '';
+    mainProgram = "witness";
+    homepage = "https://github.com/testifysec/witness";
+    changelog = "https://github.com/testifysec/witness/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fkautz jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wprecon/default.nix b/nixpkgs/pkgs/tools/security/wprecon/default.nix
new file mode 100644
index 000000000000..3cb301d34d30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wprecon/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "wprecon";
+  version = "2.4.5";
+
+  src = fetchFromGitHub {
+    owner = "blackbinn";
+    repo = pname;
+    rev = version;
+    hash = "sha256-23zJD3Nnkeko+J2FjPq5RA5dIjORMXvwt3wtAYiVlQs=";
+  };
+
+  vendorHash = "sha256-FYdsLcW6FYxSgixZ5US9cBPABOAVwidC3ejUNbs1lbA=";
+
+  postFixup = ''
+    # Rename binary
+    mv $out/bin/cli $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    description = "WordPress vulnerability recognition tool";
+    homepage = "https://github.com/blackbinn/wprecon";
+    # License Zero Noncommercial Public License 2.0.1
+    # https://github.com/blackbinn/wprecon/blob/master/LICENSE
+    license = with licenses; [ unfree ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wpscan/Gemfile b/nixpkgs/pkgs/tools/security/wpscan/Gemfile
new file mode 100644
index 000000000000..5d76cd24f3ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wpscan/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'wpscan'
diff --git a/nixpkgs/pkgs/tools/security/wpscan/Gemfile.lock b/nixpkgs/pkgs/tools/security/wpscan/Gemfile.lock
new file mode 100644
index 000000000000..186144a3b1a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wpscan/Gemfile.lock
@@ -0,0 +1,63 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (6.1.7.6)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+      zeitwerk (~> 2.3)
+    addressable (2.8.5)
+      public_suffix (>= 2.0.2, < 6.0)
+    cms_scanner (0.13.9)
+      ethon (>= 0.14, < 0.17)
+      get_process_mem (~> 0.2.5)
+      nokogiri (>= 1.11.4, < 1.16.0)
+      opt_parse_validator (~> 1.9.5)
+      public_suffix (>= 4.0.3, < 5.1.0)
+      ruby-progressbar (>= 1.10, < 1.14)
+      sys-proctable (>= 1.2.2, < 1.4.0)
+      typhoeus (>= 1.3, < 1.5)
+      xmlrpc (~> 0.3)
+      yajl-ruby (~> 1.4.1)
+    concurrent-ruby (1.2.2)
+    ethon (0.16.0)
+      ffi (>= 1.15.0)
+    ffi (1.16.3)
+    get_process_mem (0.2.7)
+      ffi (~> 1.0)
+    i18n (1.14.1)
+      concurrent-ruby (~> 1.0)
+    mini_portile2 (2.8.5)
+    minitest (5.20.0)
+    nokogiri (1.15.5)
+      mini_portile2 (~> 2.8.2)
+      racc (~> 1.4)
+    opt_parse_validator (1.9.5)
+      activesupport (>= 5.2, < 6.2.0)
+      addressable (>= 2.5, < 2.9)
+    public_suffix (5.0.4)
+    racc (1.7.3)
+    ruby-progressbar (1.13.0)
+    sys-proctable (1.3.0)
+      ffi (~> 1.1)
+    typhoeus (1.4.1)
+      ethon (>= 0.9.0)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    webrick (1.8.1)
+    wpscan (3.8.25)
+      cms_scanner (~> 0.13.9)
+    xmlrpc (0.3.3)
+      webrick
+    yajl-ruby (1.4.3)
+    zeitwerk (2.6.12)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  wpscan
+
+BUNDLED WITH
+   2.4.22
diff --git a/nixpkgs/pkgs/tools/security/wpscan/default.nix b/nixpkgs/pkgs/tools/security/wpscan/default.nix
new file mode 100644
index 000000000000..4b3757ae7673
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wpscan/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, bundlerApp
+, makeWrapper
+, curl
+}:
+
+bundlerApp {
+  pname = "wpscan";
+  gemdir = ./.;
+  exes = [ "wpscan" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram "$out/bin/wpscan" \
+      --prefix PATH : ${lib.makeBinPath [ curl ]}
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Black box WordPress vulnerability scanner";
+    homepage = "https://wpscan.org/";
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ nyanloutre manveru ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wpscan/gemset.nix b/nixpkgs/pkgs/tools/security/wpscan/gemset.nix
new file mode 100644
index 000000000000..abe19a29bf8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wpscan/gemset.nix
@@ -0,0 +1,245 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nhrdih0rk46i0s6x7nqhbypmj1hf23zl5gfl9xasb6k4r2a1dxk";
+      type = "gem";
+    };
+    version = "6.1.7.6";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  cms_scanner = {
+    dependencies = ["ethon" "get_process_mem" "nokogiri" "opt_parse_validator" "public_suffix" "ruby-progressbar" "sys-proctable" "typhoeus" "xmlrpc" "yajl-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p3vdkkd04r31d503z5v0480xlq1fhiw77icbk5s17y6dwfacydy";
+      type = "gem";
+    };
+    version = "0.13.9";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17ix0mijpsy3y0c6ywrk5ibarmvqzjsirjyprpsy3hwax8fdm85v";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yvii03hcgqj30maavddqamqy50h7y6xcn2wcyq72wn823zl4ckd";
+      type = "gem";
+    };
+    version = "1.16.3";
+  };
+  get_process_mem = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fkyyyxjcx4iigm8vhraa629k2lxa1npsv4015y82snx84v3rzaa";
+      type = "gem";
+    };
+    version = "0.2.7";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kl9c3kdchjabrihdqfmcplk3lq4cw1rr9f378y6q22qwy5dndvs";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bkmfi9mb49m0fkdhl2g38i3xxa02d411gg0m8x0gvbwfmmg5ym3";
+      type = "gem";
+    };
+    version = "5.20.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004ip9x9281fxhpipwi8di1sb1dnabscq9dy1p3cxgdwbniqqi12";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  opt_parse_validator = {
+    dependencies = ["activesupport" "addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jzmn3h9sr7bhjj1fdfvh4yzvqx7d3vsbwbqrf718dh427ifqs9c";
+      type = "gem";
+    };
+    version = "1.9.5";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bni4qjrsh2q49pnmmd6if4iv3ak36bd2cckrs6npl111n769k9m";
+      type = "gem";
+    };
+    version = "5.0.4";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01b9662zd2x9bp4rdjfid07h09zxj7kvn7f5fghbqhzc625ap1dp";
+      type = "gem";
+    };
+    version = "1.7.3";
+  };
+  ruby-progressbar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cwvyb7j47m7wihpfaq7rc47zwwx9k4v7iqd9s1xch5nm53rrz40";
+      type = "gem";
+    };
+    version = "1.13.0";
+  };
+  sys-proctable = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m3fj6j1qpfszqnsvr6wpak0d9vw5ggylaqkalhl3m50kbbimxii";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z7gamf6s83wy0yqms3bi4srirn3fc0lc7n65lqanidxcj1xn5qw";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qm7s0gr2pmfcl7dxrmq38asaza4w0i2n9my4yzs499j731wh8r";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  wpscan = {
+    dependencies = ["cms_scanner"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x04asq0aznbm6m79jlsv7mjbhq755759s4bi3qbyrv5rwpy7hji";
+      type = "gem";
+    };
+    version = "3.8.25";
+  };
+  xmlrpc = {
+    dependencies = ["webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fwfnccagsjrbvrav5nbk3zracj9zncr7i375nn20jd4cfy4cggc";
+      type = "gem";
+    };
+    version = "0.3.3";
+  };
+  yajl-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lni4jbyrlph7sz8y49q84pb0sbj82lgwvnjnsiv01xf26f4v5wc";
+      type = "gem";
+    };
+    version = "1.4.3";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gir0if4nryl1jhwi28669gjwhxb7gzrm1fcc8xzsch3bnbi47jn";
+      type = "gem";
+    };
+    version = "2.6.12";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wpscan/update.sh b/nixpkgs/pkgs/tools/security/wpscan/update.sh
new file mode 100755
index 000000000000..c30cc62e5296
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wpscan/update.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p bash bundix bundler
+
+set -e
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+rm -f Gemfile.lock Gemfile.lock
+
+# Otherwise nokogiri will fail to build.
+# https://github.com/nix-community/bundix/issues/88
+bundler config set --local force_ruby_platform true
+
+bundler lock
+BUNDLE_GEMFILE=Gemfile bundler lock --lockfile=Gemfile.lock
+bundix --gemfile=Gemfile --lockfile=Gemfile.lock --gemset=gemset.nix
diff --git a/nixpkgs/pkgs/tools/security/xcat/default.nix b/nixpkgs/pkgs/tools/security/xcat/default.nix
new file mode 100644
index 000000000000..ea3390b38c74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/xcat/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "xcat";
+  version = "1.2.0";
+  disabled = python3.pythonOlder "3.7";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "orf";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "01r5998gdvqjdrahpk0ci27lx9yghbddlanqcspr3qp5y5930i0s";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiodns
+    aiohttp
+    appdirs
+    click
+    colorama
+    faust-cchardet
+    prompt-toolkit
+    xpath-expressions
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "xcat" ];
+
+  meta = with lib; {
+    description = "XPath injection tool";
+    longDescription = ''
+      xcat is an advanced tool for exploiting XPath injection vulnerabilities,
+      featuring a comprehensive set of features to read the entire file being
+      queried as well as other files on the filesystem, environment variables
+      and directories.
+    '';
+    homepage = "https://github.com/orf/xcat";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/xcrawl3r/default.nix b/nixpkgs/pkgs/tools/security/xcrawl3r/default.nix
new file mode 100644
index 000000000000..b714d555bafb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/xcrawl3r/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "xcrawl3r";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "hueristiq";
+    repo = "xcrawl3r";
+    rev = "refs/tags/${version}";
+    hash = "sha256-K7UuWsteI8mEAGOF/g/EbT/Ch6sbmKhiiYB3npdDmFk=";
+  };
+
+  vendorHash = "sha256-/yBSrZdlVMZgcKcONBSq7C5IFC30TJL0z6FZRXm+HUs=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "A CLI utility to recursively crawl webpages";
+    homepage = "https://github.com/hueristiq/xcrawl3r";
+    changelog = "https://github.com/hueristiq/xcrawl3r/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "xcrawl3r";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/xorex/default.nix b/nixpkgs/pkgs/tools/security/xorex/default.nix
new file mode 100644
index 000000000000..a1a6e655996a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/xorex/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "xorex";
+  version = "0.3.0";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "Neo23x0";
+    repo = "xorex";
+    rev = version;
+    sha256 = "rBsOSXWnHRhpLmq20XBuGx8gGBM8ouMyOISkbzUcvE4=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    chmod +x xorex.py
+    mv xorex.py $out/bin/xorex
+
+    runHook postInstall
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    pefile
+  ];
+
+  meta = with lib; {
+    description = "XOR Key Extractor";
+    homepage = "https://github.com/Neo23x0/xorex";
+    license = licenses.asl20;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/xortool/default.nix b/nixpkgs/pkgs/tools/security/xortool/default.nix
new file mode 100644
index 000000000000..1e8b6aee5d37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/xortool/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildPythonApplication
+, docopt
+, fetchFromGitHub
+, importlib-metadata
+, poetry-core
+}:
+
+buildPythonApplication rec {
+  pname = "xortool";
+  version = "1.0.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "hellman";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "19lfadi28r89bl5q8fhrxgjgs3nx3kgjd4rdg7wbvzi1cn29c5n7";
+  };
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [ docopt importlib-metadata ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "xortool" ];
+
+  meta = with lib; {
+    description = "Tool to analyze multi-byte XOR cipher";
+    homepage = "https://github.com/hellman/xortool";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/xsser/default.nix b/nixpkgs/pkgs/tools/security/xsser/default.nix
new file mode 100644
index 000000000000..6c75f2e733f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/xsser/default.nix
@@ -0,0 +1,60 @@
+{ lib, buildPythonApplication, fetchFromGitHub, wrapGAppsHook, gobject-introspection, gtk3, pango
+, pillow, pycurl, beautifulsoup4, pygeoip, pygobject3, cairocffi, selenium }:
+
+buildPythonApplication rec {
+  pname = "xsser";
+  version = "1.8.4";
+
+  src = fetchFromGitHub {
+    owner = "epsylon";
+    repo = pname;
+    rev = "478242e6d8e1ca921e0ba8fa59b50106fa2f7312";
+    sha256 = "MsQu/r1C6uXawpuVTuBGhWNqCSZ9S2DIx15Lpo7L4RI=";
+  };
+
+  postPatch = ''
+    # Replace relative path with absolute store path
+    find . -type f -exec sed -i "s|core/fuzzing/user-agents.txt|$out/share/xsser/fuzzing/user-agents.txt|g" {} +
+
+    # Replace absolute path references with store paths
+    substituteInPlace core/main.py --replace /usr $out
+    substituteInPlace gtk/xsser.desktop --replace /usr $out
+    substituteInPlace setup.py --replace /usr/share share
+  '';
+
+  nativeBuildInputs = [ wrapGAppsHook gobject-introspection ];
+
+  buildInputs = [
+    gtk3
+    pango
+  ];
+
+  propagatedBuildInputs = [
+    pillow
+    pycurl
+    beautifulsoup4
+    pygeoip
+    pygobject3
+    cairocffi
+    selenium
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  postInstall = ''
+    install -D core/fuzzing/user-agents.txt $out/share/xsser/fuzzing/user-agents.txt
+  '';
+
+  meta = with lib; {
+    description = "Automatic framework to detect, exploit and report XSS vulnerabilities in web-based applications";
+    homepage = "https://xsser.03c8.net/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ emilytrau ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/xsubfind3r/default.nix b/nixpkgs/pkgs/tools/security/xsubfind3r/default.nix
new file mode 100644
index 000000000000..7c5470a0715a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/xsubfind3r/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "xsubfind3r";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "hueristiq";
+    repo = "xsubfind3r";
+    rev = "refs/tags/${version}";
+    hash = "sha256-tukynKPcIwDwpH0/SFyif6OGVZrmLVdXfhrFaaVd1d8=";
+  };
+
+  vendorHash = "sha256-0tX/s5a6PPQuEw3BTs6uW9c5OHqXryzIfDNPnQH5sS8=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "CLI utility to find subdomains from curated passive online sources";
+    homepage = "https://github.com/hueristiq/xsubfind3r";
+    changelog = "https://github.com/hueristiq/xsubfind3r/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/yarGen/default.nix b/nixpkgs/pkgs/tools/security/yarGen/default.nix
new file mode 100644
index 000000000000..4003c7e996ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/yarGen/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, python3
+, fetchFromGitHub
+, fetchpatch
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "yarGen";
+  version = "0.23.4";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "Neo23x0";
+    repo = "yarGen";
+    rev = version;
+    sha256 = "6PJNAeeLAyUlZcIi0g57sO1Ex6atn7JhbK9kDbNrZ6A=";
+  };
+
+  patches = [
+    # https://github.com/Neo23x0/yarGen/pull/33
+    (fetchpatch {
+      name = "use-built-in-scandir.patch";
+      url = "https://github.com/Neo23x0/yarGen/commit/cae14ac8efeb5536885792cae99d1d0f7fb6fde3.patch";
+      sha256 = "0z6925r7n1iysld5c8li5nkm1dbxg8j7pn0626a4vic525vf8ndl";
+    })
+    # https://github.com/Neo23x0/yarGen/pull/34
+    (fetchpatch {
+      name = "use-cwd-for-abspath.patch";
+      url = "https://github.com/Neo23x0/yarGen/commit/441dafb702149f5728c2c6736fc08741a46deb26.patch";
+      sha256 = "lNp3oC2BM7tBzN4AetvPr+xJLz6KkZxQmsldeZaxJQU=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace yarGen.py \
+      --replace "./3rdparty/strings.xml" "$out/share/yarGen/3rdparty/strings.xml"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dt "$out/bin" yarGen.py
+    install -Dt "$out/share/yarGen/3rdparty" 3rdparty/strings.xml
+
+    runHook postInstall
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pefile
+    lxml
+  ];
+
+  meta = with lib; {
+    description = "A generator for YARA rules";
+    homepage = "https://github.com/Neo23x0/yarGen";
+    license = licenses.bsd3;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/yara/default.nix b/nixpkgs/pkgs/tools/security/yara/default.nix
new file mode 100644
index 000000000000..946a424ca681
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/yara/default.nix
@@ -0,0 +1,74 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, pcre
+, pkg-config
+, protobufc
+, withCrypto ? true, openssl
+, enableCuckoo ? true, jansson
+, enableDex ? true
+, enableDotNet ? true
+, enableMacho ? true
+, enableMagic ? true, file
+, enableStatic ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "yara";
+  version = "4.4.0";
+
+  src = fetchFromGitHub {
+    owner = "VirusTotal";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-axHFy7YwLhhww+lh+ORyW6YG+T385msysIHK5SMyhMk=";
+  };
+
+  # FIXME: make unconditional on staging
+  patches = lib.optionals (!stdenv.hostPlatform.isGnu && !stdenv.hostPlatform.isDarwin) [
+    (fetchpatch {
+      name = "musl.patch";
+      url = "https://github.com/VirusTotal/yara/commit/515ed861cf30e154b14a69ffd46c347fb81df72f.patch";
+      hash = "sha256-2scnUyz0SSkNRlsVQapPgI1ATIPXEogqtxbimYYq4Jo=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    pcre
+    protobufc
+  ] ++ lib.optionals withCrypto [
+    openssl
+  ] ++ lib.optionals enableMagic [
+    file
+  ] ++ lib.optionals enableCuckoo [
+    jansson
+  ];
+
+  preConfigure = "./bootstrap.sh";
+
+  configureFlags = [
+    (lib.withFeature withCrypto "crypto")
+    (lib.enableFeature enableCuckoo "cuckoo")
+    (lib.enableFeature enableDex "dex")
+    (lib.enableFeature enableDotNet "dotnet")
+    (lib.enableFeature enableMacho "macho")
+    (lib.enableFeature enableMagic "magic")
+    (lib.enableFeature enableStatic "static")
+  ];
+
+  doCheck = enableStatic;
+
+  meta = with lib; {
+    description = "The pattern matching swiss knife for malware researchers";
+    homepage = "http://Virustotal.github.io/yara/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/yaralyzer/default.nix b/nixpkgs/pkgs/tools/security/yaralyzer/default.nix
new file mode 100644
index 000000000000..4379bbc5c63c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/yaralyzer/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "yaralyzer";
+  version = "0.9.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "michelcrypt4d4mus";
+    repo = "yaralyzer";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-QsMO/fnHy4puuToUHSS05fWnXHdAVnWFFBVq3cb0Zj4=";
+  };
+
+  pythonRelaxDeps = [
+    "python-dotenv"
+    "rich"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    chardet
+    python-dotenv
+    rich
+    rich-argparse-plus
+    yara-python
+  ];
+
+  pythonImportsCheck = [
+    "yaralyzer"
+  ];
+
+  meta = with lib; {
+    description = "Tool to visually inspect and force decode YARA and regex matches";
+    homepage = "https://github.com/michelcrypt4d4mus/yaralyzer";
+    changelog = "https://github.com/michelcrypt4d4mus/yaralyzer/blob/${version}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/yatas/default.nix b/nixpkgs/pkgs/tools/security/yatas/default.nix
new file mode 100644
index 000000000000..e351ea244f5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/yatas/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "yatas";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "padok-team";
+    repo = "YATAS";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-gw4aZ7SLUz5WLUb1z4zDtI6Ca0tEWhE5wobp5NRvjkg=";
+  };
+
+  vendorHash = "sha256-zp5EVJe5Q6o6C0CZ8u+oEFEOy0NU5SgVN+cSc6A/jZ4=";
+
+  meta = with lib; {
+    description = "Tool to audit AWS infrastructure for misconfiguration or potential security issues";
+    homepage = "https://github.com/padok-team/YATAS";
+    changelog = "https://github.com/padok-team/YATAS/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "yatas";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/yersinia/default.nix b/nixpkgs/pkgs/tools/security/yersinia/default.nix
new file mode 100644
index 000000000000..a913835743aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/yersinia/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, pkg-config, fetchpatch
+, ncurses, libpcap, libnet
+# alpha version of GTK interface
+, withGtk ? false, gtk2
+# enable remote admin interface
+, enableAdmin ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "yersinia";
+  version = "unstable-2022-11-20";
+
+  src = fetchFromGitHub {
+    owner = "tomac";
+    repo = pname;
+    rev = "867b309eced9e02b63412855440cd4f5f7727431";
+    sha256 = "sha256-VShg9Nzd8dzUNiqYnKcDzRgqjwar/8XRGEJCJL25aR0=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libpcap libnet ncurses ]
+    ++ lib.optional withGtk gtk2;
+
+  autoreconfPhase = "./autogen.sh";
+
+  configureFlags = [
+    "--with-pcap-includes=${libpcap}/include"
+    "--with-libnet-includes=${libnet}/include"
+  ]
+  ++ lib.optional (!enableAdmin) "--disable-admin"
+  ++ lib.optional (!withGtk) "--disable-gtk";
+
+  makeFlags = [ "LDFLAGS=-lncurses" ];
+
+  meta = with lib; {
+    description = "A framework for layer 2 attacks";
+    homepage = "https://github.com/tomac/yersinia";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ vdot0x23 ];
+    # INSTALL and FAQ in this package seem a little outdated
+    # so not sure, but it could work on openbsd, illumos, and freebsd
+    # if you have a machine to test with, feel free to add these
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/yubihsm-connector/default.nix b/nixpkgs/pkgs/tools/security/yubihsm-connector/default.nix
new file mode 100644
index 000000000000..aee210beabac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/yubihsm-connector/default.nix
@@ -0,0 +1,37 @@
+{ lib, libusb1, buildGoModule, fetchFromGitHub, pkg-config }:
+
+buildGoModule rec {
+  pname = "yubihsm-connector";
+  version = "3.0.4";
+
+  src = fetchFromGitHub {
+    owner = "Yubico";
+    repo = "yubihsm-connector";
+    rev = version;
+    hash = "sha256-snoQZsmKQPcsB5EpZc4yon02QbxNU5B5TAwRPjs1O5I=";
+  };
+
+  vendorHash = "sha256-XW7rEHY3S+M3b6QjmINgrCak+BqCEV3PJP90jz7J47A=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libusb1
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  preBuild = ''
+    GOOS= GOARCH= go generate
+  '';
+
+  meta = with lib; {
+    description = "yubihsm-connector performs the communication between the YubiHSM 2 and applications that use it";
+    homepage = "https://developers.yubico.com/yubihsm-connector/";
+    maintainers = with maintainers; [ matthewcroughan ];
+    license = licenses.asl20;
+    mainProgram = "yubihsm-connector";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/yubihsm-shell/default.nix b/nixpkgs/pkgs/tools/security/yubihsm-shell/default.nix
new file mode 100644
index 000000000000..24d96f43ba43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/yubihsm-shell/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, openssl
+, libusb1
+, libedit
+, curl
+, gengetopt
+, pkg-config
+, pcsclite
+, help2man
+, darwin
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "yubihsm-shell";
+  version = "2.4.2";
+
+  src = fetchFromGitHub {
+    owner = "Yubico";
+    repo = "yubihsm-shell";
+    rev = version;
+    hash = "sha256-Un3DNmrD9aC9+A3+NNM21yrH1g14THXPHkJ0SUYrL/M=";
+  };
+
+  postPatch = ''
+    # Can't find libyubihsm at runtime because of dlopen() in C code
+    substituteInPlace lib/yubihsm.c \
+      --replace "libyubihsm_usb.so" "$out/lib/libyubihsm_usb.so" \
+      --replace "libyubihsm_http.so" "$out/lib/libyubihsm_http.so"
+    # ld: unknown option: -z
+    substituteInPlace CMakeLists.txt cmake/SecurityFlags.cmake \
+      --replace "AppleClang" "Clang"
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    help2man
+    gengetopt
+  ];
+
+  buildInputs = [
+    libusb1
+    libedit
+    curl
+    openssl
+  ] ++ lib.optionals stdenv.isLinux [
+    pcsclite
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.PCSC
+    libiconv
+  ];
+
+  cmakeFlags = lib.optionals stdenv.isDarwin [
+    "-DDISABLE_LTO=ON"
+  ];
+
+  # causes redefinition of _FORTIFY_SOURCE
+  hardeningDisable = [ "fortify3" ];
+
+  meta = with lib; {
+    description = "yubihsm-shell and libyubihsm";
+    homepage = "https://github.com/Yubico/yubihsm-shell";
+    maintainers = with maintainers; [ matthewcroughan ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/yubikey-agent/default.nix b/nixpkgs/pkgs/tools/security/yubikey-agent/default.nix
new file mode 100644
index 000000000000..01e512e49bdd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/yubikey-agent/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchFromGitHub, buildGoModule, libnotify, pcsclite, pkg-config, darwin }:
+
+buildGoModule rec {
+  pname = "yubikey-agent";
+
+  version = "0.1.6";
+  src = fetchFromGitHub {
+    owner = "FiloSottile";
+    repo = "yubikey-agent";
+    rev = "v${version}";
+    sha256 = "sha256-Knk1ipBOzjmjrS2OFUMuxi1TkyDcSYlVKezDWT//ERY=";
+  };
+
+  buildInputs =
+    lib.optional stdenv.isLinux (lib.getDev pcsclite)
+    ++ lib.optional stdenv.isDarwin (darwin.apple_sdk.frameworks.PCSC);
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+
+  postPatch = lib.optionalString stdenv.isLinux ''
+    substituteInPlace main.go --replace 'notify-send' ${libnotify}/bin/notify-send
+  '';
+
+  vendorHash = "sha256-+IRPs3wm3EvIgfQRpzcVpo2JBaFQlyY/RI1G7XfVS84=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  postInstall = lib.optionalString stdenv.isLinux ''
+    mkdir -p $out/lib/systemd/user
+    substitute contrib/systemd/user/yubikey-agent.service $out/lib/systemd/user/yubikey-agent.service \
+      --replace 'ExecStart=yubikey-agent' "ExecStart=$out/bin/yubikey-agent"
+  '';
+
+  meta = with lib; {
+    description = "A seamless ssh-agent for YubiKeys";
+    license = licenses.bsd3;
+    homepage = "https://filippo.io/yubikey-agent";
+    maintainers = with lib.maintainers; [ philandstuff rawkode ];
+    platforms = platforms.darwin ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/yubikey-touch-detector/default.nix b/nixpkgs/pkgs/tools/security/yubikey-touch-detector/default.nix
new file mode 100644
index 000000000000..a8474a1a5b3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/yubikey-touch-detector/default.nix
@@ -0,0 +1,54 @@
+{ lib, libnotify, buildGoModule, fetchFromGitHub, fetchurl, pkg-config, iconColor ? "#84bd00" }:
+
+buildGoModule rec {
+  pname = "yubikey-touch-detector";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "maximbaz";
+    repo = "yubikey-touch-detector";
+    rev = version;
+    sha256 = "sha256-y/iDmxlhu2Q6Zas0jsv07HQPkNdMrOQaXWy/cuWvpMk=";
+  };
+  vendorHash = "sha256-OitI9Yp4/mRMrNH4yrWSL785+3mykPkvzarrc6ipOeg=";
+
+  iconSrc = fetchurl {
+    url = "https://github.com/Yubico/yubioath-flutter/raw/yubioath-desktop-5.0.0/images/touch.svg";
+    hash = "sha256-+jC9RKjl1uMBaNqLX5WXN+E4CuOcIEx5IGXWxgxzA/k=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libnotify ];
+
+  postPatch = ''
+    cp $iconSrc yubikey-touch-detector.svg
+    substituteInPlace yubikey-touch-detector.svg \
+      --replace '#284c61' ${lib.escapeShellArg iconColor}
+
+    substituteInPlace notifier/libnotify.go \
+      --replace \
+        'AppIcon: "yubikey-touch-detector"' \
+        "AppIcon: \"$out/share/icons/yubikey-touch-detector.svg\""
+  '';
+
+  postInstall = ''
+    install -Dm444 -t $out/share/doc/${pname} *.md
+
+    install -Dm444 -t $out/share/icons yubikey-touch-detector.svg
+
+    install -Dm444 -t $out/lib/systemd/user *.{service,socket}
+
+    substituteInPlace $out/lib/systemd/user/*.service \
+      --replace /usr/bin/yubikey-touch-detector "$out/bin/yubikey-touch-detector --libnotify"
+  '';
+
+  meta = with lib; {
+    description = "A tool to detect when your YubiKey is waiting for a touch";
+    homepage = "https://github.com/maximbaz/yubikey-touch-detector";
+    maintainers = with maintainers; [ sumnerevans ];
+    license = with licenses; [ bsd2 isc ];
+    platforms = platforms.linux;
+    mainProgram = "yubikey-touch-detector";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zdns/default.nix b/nixpkgs/pkgs/tools/security/zdns/default.nix
new file mode 100644
index 000000000000..9b0c33f2802e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zdns/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "zdns";
+  version = "2023-04-09-unstable";
+
+  src = fetchFromGitHub {
+    owner = "zmap";
+    repo = pname;
+    rev = "ac6c7f30a7f5e11f87779f5275adeed117227cd6";
+    hash = "sha256-que2uzIH8GybU6Ekumg/MjgBHSmFCF+T7PWye+25kaY=";
+  };
+
+  vendorHash = "sha256-daMPk1TKrUXXqCb4WVkrUIJsBL7uzXLJnxWNbHQ/Im4=";
+
+  meta = with lib; {
+    description = "CLI DNS lookup tool";
+    homepage = "https://github.com/zmap/zdns";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zeekscript/default.nix b/nixpkgs/pkgs/tools/security/zeekscript/default.nix
new file mode 100644
index 000000000000..eb7d097c5d74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zeekscript/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "zeekscript";
+  version = "1.2.8";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-v0PJY0Ahxa4k011AwtWSIAWBXvt3Aybrd382j1SIT6M=";
+  };
+
+  postPatch = ''
+    sed -i '/name = "zeekscript"/a version = "${version}"' pyproject.toml
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    wheel
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    tree-sitter
+  ];
+
+  pythonImportsCheck = [
+    "zeekscript"
+  ];
+
+  meta = with lib; {
+    description = "A Zeek script formatter and analyzer";
+    homepage = "https://github.com/zeek/zeekscript";
+    changelog = "https://github.com/zeek/zeekscript/blob/v${version}/CHANGES";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fab tobim ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zgrab2/default.nix b/nixpkgs/pkgs/tools/security/zgrab2/default.nix
new file mode 100644
index 000000000000..c91c1b876099
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zgrab2/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "zgrab2";
+  version = "unstable-2023-03-23";
+
+  src = fetchFromGitHub {
+    owner = "zmap";
+    repo = pname;
+    rev = "911c86f13080ceae98f8d63d1ae0e85c4a8f7f61";
+    hash = "sha256-VOWkBM/SziY3jiIaYYWq+LRzG4vKitiscqdIDfRUkYY=";
+  };
+
+  vendorHash = "sha256-Q3FCqvh4vn64QXqcePhVWTyIHJarI6I4YonH3X/7RhI=";
+
+  patches = [
+    # Without this, we get error messages like:
+    # vendor/golang.org/x/sys/unix/syscall.go:83:16: unsafe.Slice requires go1.17 or later (-lang was set to go1.16; check go.mod)
+    # The patch was generated by changing "go 1.12" to "go 1.17" and executing `go mod tidy -compat=1.17`.
+    ./fix-go-version-error.patch
+  ];
+
+  subPackages = [
+    "cmd/zgrab2"
+  ];
+
+  meta = with lib; {
+    description = "Web application scanner";
+    homepage = "https://github.com/zmap/zgrab2";
+    license = with licenses; [ asl20 isc ];
+    maintainers = with maintainers; [ fab juliusrickert ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zgrab2/fix-go-version-error.patch b/nixpkgs/pkgs/tools/security/zgrab2/fix-go-version-error.patch
new file mode 100644
index 000000000000..797bd542be80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zgrab2/fix-go-version-error.patch
@@ -0,0 +1,46 @@
+diff --git a/go.mod b/go.mod
+index 888f10e..5463ef5 100644
+--- a/go.mod
++++ b/go.mod
+@@ -1,25 +1,33 @@
+ module github.com/zmap/zgrab2
+
+-go 1.12
++go 1.17
+
+ require (
+-	github.com/cespare/xxhash/v2 v2.2.0 // indirect
+-	github.com/go-kit/kit v0.10.0 // indirect
+-	github.com/golang/protobuf v1.5.3 // indirect
+ 	github.com/hdm/jarm-go v0.0.7
+ 	github.com/prometheus/client_golang v1.14.0
+-	github.com/prometheus/common v0.42.0 // indirect
+-	github.com/prometheus/procfs v0.9.0 // indirect
+ 	github.com/sirupsen/logrus v1.9.0
+-	github.com/zmap/rc2 v0.0.0-20190804163417-abaa70531248 // indirect
+ 	github.com/zmap/zcrypto v0.0.0-20230310154051-c8b263fd8300
+ 	github.com/zmap/zflags v1.4.0-beta.1.0.20200204220219-9d95409821b6
+ 	golang.org/x/crypto v0.7.0
+ 	golang.org/x/net v0.8.0
+ 	golang.org/x/sys v0.6.0
+ 	golang.org/x/text v0.8.0
+-	google.golang.org/protobuf v1.30.0 // indirect
+ 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
+ 	gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
+ 	gopkg.in/yaml.v2 v2.4.0
+ )
++
++require (
++	github.com/beorn7/perks v1.0.1 // indirect
++	github.com/cespare/xxhash/v2 v2.2.0 // indirect
++	github.com/golang/protobuf v1.5.3 // indirect
++	github.com/kr/pretty v0.2.1 // indirect
++	github.com/kr/text v0.1.0 // indirect
++	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
++	github.com/prometheus/client_model v0.3.0 // indirect
++	github.com/prometheus/common v0.42.0 // indirect
++	github.com/prometheus/procfs v0.9.0 // indirect
++	github.com/weppos/publicsuffix-go v0.30.0 // indirect
++	github.com/zmap/rc2 v0.0.0-20190804163417-abaa70531248 // indirect
++	google.golang.org/protobuf v1.30.0 // indirect
++)
diff --git a/nixpkgs/pkgs/tools/security/zkar/default.nix b/nixpkgs/pkgs/tools/security/zkar/default.nix
new file mode 100644
index 000000000000..85bed59a1fa2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zkar/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "zkar";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "phith0n";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-TGqsiYZLbXvCc30OtvNbX4INlzw3ZfjvXal47rP7NDw=";
+  };
+
+  vendorHash = "sha256-HQ9qclaaDj0H8PL0oQG1WsH19wVQpynijHNcal4gWBE=";
+
+  meta = with lib; {
+    description = "Java serialization protocol analysis tool";
+    homepage = "https://github.com/phith0n/zkar";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zlint/default.nix b/nixpkgs/pkgs/tools/security/zlint/default.nix
new file mode 100644
index 000000000000..838e866de20a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zlint/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, zlint
+}:
+
+buildGoModule rec {
+  pname = "zlint";
+  version = "3.6.1";
+
+  src = fetchFromGitHub {
+    owner = "zmap";
+    repo = "zlint";
+    rev = "v${version}";
+    hash = "sha256-8iZUEUU+HY8cJrBwiGNE4e6hXQvNwAt0cPnBjAVDcHo=";
+  };
+
+  modRoot = "v3";
+
+  vendorHash = "sha256-LP7I7NY/Am6zWfVSvwJanCFwiLfcHKA3Fb9RIMD76a0=";
+
+  postPatch = ''
+    # Remove a package which is not declared in go.mod.
+    rm -rf v3/cmd/genTestCerts
+  '';
+
+  excludedPackages = [
+    "lints"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = zlint;
+    command = "zlint -version";
+  };
+
+  meta = with lib; {
+    description = "X.509 Certificate Linter focused on Web PKI standards and requirements";
+    longDescription = ''
+      ZLint is a X.509 certificate linter written in Go that checks for
+      consistency with standards (e.g. RFC 5280) and other relevant PKI
+      requirements (e.g. CA/Browser Forum Baseline Requirements).
+    '';
+    homepage = "https://github.com/zmap/zlint";
+    changelog = "https://github.com/zmap/zlint/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ baloo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zmap/default.nix b/nixpkgs/pkgs/tools/security/zmap/default.nix
new file mode 100644
index 000000000000..de1bc354cf62
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zmap/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, libjson, json_c, gengetopt, flex, byacc, gmp
+, libpcap, libunistring
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zmap";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "zmap";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-OJZKcnsuBi3z/AI05RMBitgn01bhVTqx2jFYJLuIJk4=";
+  };
+
+  cmakeFlags = [ "-DRESPECT_INSTALL_PREFIX_CONFIG=ON" ];
+
+  nativeBuildInputs = [ cmake pkg-config gengetopt flex byacc ];
+  buildInputs = [ libjson json_c gmp libpcap libunistring ];
+
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
+    homepage = "https://zmap.io/";
+    license = licenses.asl20;
+    description = "Fast single packet network scanner designed for Internet-wide network surveys";
+    maintainers = with maintainers; [ ma27 ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zsteg/Gemfile b/nixpkgs/pkgs/tools/security/zsteg/Gemfile
new file mode 100644
index 000000000000..814e5fe8ad4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zsteg/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'zsteg'
diff --git a/nixpkgs/pkgs/tools/security/zsteg/Gemfile.lock b/nixpkgs/pkgs/tools/security/zsteg/Gemfile.lock
new file mode 100644
index 000000000000..0cd593f60a0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zsteg/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    forwardable (1.3.3)
+    iostruct (0.0.5)
+    prime (0.1.2)
+      forwardable
+      singleton
+    rainbow (3.1.1)
+    singleton (0.2.0)
+    zpng (0.4.5)
+      rainbow (~> 3.1.1)
+    zsteg (0.2.13)
+      iostruct (>= 0.0.5)
+      prime
+      zpng (>= 0.4.5)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  zsteg
+
+BUNDLED WITH
+   2.4.13
diff --git a/nixpkgs/pkgs/tools/security/zsteg/default.nix b/nixpkgs/pkgs/tools/security/zsteg/default.nix
new file mode 100644
index 000000000000..2171a77fce1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zsteg/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "zsteg";
+
+  gemdir = ./.;
+
+  exes = [ "zsteg" ];
+
+  meta = with lib; {
+    description = "Detect stegano-hidden data in PNG & BMP";
+    homepage = "http://zed.0xff.me/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ applePrincess h7x4 ];
+    mainProgram = "zsteg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zsteg/gemset.nix b/nixpkgs/pkgs/tools/security/zsteg/gemset.nix
new file mode 100644
index 000000000000..5cb55829a6ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zsteg/gemset.nix
@@ -0,0 +1,75 @@
+{
+  forwardable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b5g1i3xdvmxxpq4qp0z4v78ivqnazz26w110fh4cvzsdayz8zgi";
+      type = "gem";
+    };
+    version = "1.3.3";
+  };
+  iostruct = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z3vnb8mhzns3ybf78vlj5cy6lq4pyfm8n40kqba2s33xccs3kl0";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  prime = {
+    dependencies = ["forwardable" "singleton"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1973kz8lbck6ga5v42f55jk8b8pnbgwp9p67dl1xw15gvz55dsfl";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  singleton = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qq54imvbksnckzf9hrq9bjzcdb0n8wfv6l5jc0di10n88277jx6";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  zpng = {
+    dependencies = ["rainbow"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xyr7ipgls7wci1gnsz340idm69jls0gind0q4f63ccjwgzsfkqw";
+      type = "gem";
+    };
+    version = "0.4.5";
+  };
+  zsteg = {
+    dependencies = ["iostruct" "prime" "zpng"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "128kbv9vsi288mj17zwvc45ijpzf3p116vk9kcvkz978hz0n6spm";
+      type = "gem";
+    };
+    version = "0.2.13";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zzuf/default.nix b/nixpkgs/pkgs/tools/security/zzuf/default.nix
new file mode 100644
index 000000000000..edf5e846801b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zzuf/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "zzuf";
+  version = "0.15";
+
+  src = fetchFromGitHub {
+    owner = "samhocevar";
+    repo = "zzuf";
+    rev = "v${version}";
+    sha256 = "0li1s11xf32dafxq1jbnc8c63313hy9ry09dja2rymk9mza4x2n9";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+
+  meta = with lib; {
+    description = "Transparent application input fuzzer";
+    homepage = "http://caca.zoy.org/wiki/zzuf";
+    license = licenses.wtfpl;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lihop ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/acct/default.nix b/nixpkgs/pkgs/tools/system/acct/default.nix
new file mode 100644
index 000000000000..9a363eb8706e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/acct/default.nix
@@ -0,0 +1,31 @@
+{ fetchurl, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "acct";
+  version = "6.6.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/acct/acct-${version}.tar.gz";
+    sha256 = "0gv6m8giazshvgpvwbng98chpas09myyfw1zr2y7hqxib0mvy5ac";
+  };
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "GNU Accounting Utilities, login and process accounting utilities";
+
+    longDescription = ''
+      The GNU Accounting Utilities provide login and process accounting
+      utilities for GNU/Linux and other systems.  It is a set of utilities
+      which reports and summarizes data about user connect times and process
+      execution statistics.
+    '';
+
+    license = licenses.gpl3Plus;
+
+    homepage = "https://www.gnu.org/software/acct/";
+
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/acpica-tools/default.nix b/nixpkgs/pkgs/tools/system/acpica-tools/default.nix
new file mode 100644
index 000000000000..7c41e7c8a518
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/acpica-tools/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchurl
+, bison
+, flex
+}:
+
+stdenv.mkDerivation rec {
+  pname = "acpica-tools";
+  version = "20230628";
+
+  src = fetchurl {
+    url = "https://downloadmirror.intel.com/783534/acpica-unix-${version}.tar.gz";
+    hash = "sha256-hodqdF49Ik3P0iLtPeRltHVZ6FgR3y25gg7wmp3/XM4=";
+  };
+
+  nativeBuildInputs = [ bison flex ];
+
+  buildFlags = [
+    "acpibin"
+    "acpidump"
+    "acpiexamples"
+    "acpiexec"
+    "acpihelp"
+    "acpisrc"
+    "acpixtract"
+    "iasl"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString ([
+    "-O3"
+  ] ++ lib.optionals (stdenv.cc.isGNU) [
+    # Needed with GCC 12
+    "-Wno-dangling-pointer"
+  ]);
+
+  enableParallelBuilding = true;
+
+  # i686 builds fail with hardening enabled (due to -Wformat-overflow). Disable
+  # -Werror altogether to make this derivation less fragile to toolchain
+  # updates.
+  NOWERROR = "TRUE";
+
+  # We can handle stripping ourselves.
+  # Unless we are on Darwin. Upstream makefiles degrade coreutils install to cp if _APPLE is detected.
+  INSTALLFLAGS = lib.optionals (!stdenv.isDarwin) "-m 555";
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    homepage = "https://www.acpica.org/";
+    description = "ACPICA Tools";
+    license = with licenses; [ iasl gpl2Only bsd3 ];
+    maintainers = with maintainers; [ delroth tadfisher ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/actkbd/default.nix b/nixpkgs/pkgs/tools/system/actkbd/default.nix
new file mode 100644
index 000000000000..5dd024e573d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/actkbd/default.nix
@@ -0,0 +1,36 @@
+{ fetchurl, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "actkbd";
+  version = "0.2.8";
+
+  src = fetchurl {
+    url = "http://users.softlab.ece.ntua.gr/~thkala/projects/actkbd/files/actkbd-${version}.tar.bz2";
+    sha256 = "1ipb7k5q7k7p54is96ij2n74jfa6xc0llb9lpjwxhsqviqxn9slm";
+  };
+
+  preConfigure = ''
+    substituteInPlace Makefile \
+      --replace /usr/local $out \
+      --replace /etc $out/etc
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/doc/actkbd
+    cp -r README samples $out/share/doc/actkbd
+  '';
+
+  meta = with lib; {
+    description = "A keyboard shortcut daemon";
+    longDescription = ''
+      actkbd is a simple daemon that binds actions to keyboard events
+      directly on evdev interface (that is, no X11 required). It
+      recognises key combinations and can handle press, repeat and
+      release events.
+    '';
+    license = licenses.gpl2;
+    homepage = "http://users.softlab.ece.ntua.gr/~thkala/projects/actkbd/";
+    platforms = platforms.linux;
+    mainProgram = "actkbd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/amdgpu_top/Cargo.lock b/nixpkgs/pkgs/tools/system/amdgpu_top/Cargo.lock
new file mode 100644
index 000000000000..a83006dc179b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/amdgpu_top/Cargo.lock
@@ -0,0 +1,3614 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ab_glyph"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80179d7dd5d7e8c285d67c4a1e652972a92de7475beddfb92028c76463b13225"
+dependencies = [
+ "ab_glyph_rasterizer",
+ "owned_ttf_parser",
+]
+
+[[package]]
+name = "ab_glyph_rasterizer"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
+
+[[package]]
+name = "accesskit"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cb10ed32c63247e4e39a8f42e8e30fb9442fbf7878c8e4a9849e7e381619bea"
+dependencies = [
+ "enumn",
+ "serde",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
+dependencies = [
+ "cfg-if",
+ "getrandom",
+ "once_cell",
+ "serde",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "amdgpu_top"
+version = "0.7.0"
+dependencies = [
+ "amdgpu_top_gui",
+ "amdgpu_top_json",
+ "amdgpu_top_tui",
+ "gix",
+ "libamdgpu_top",
+ "libc",
+]
+
+[[package]]
+name = "amdgpu_top_gui"
+version = "0.7.0"
+dependencies = [
+ "eframe",
+ "egui_plot",
+ "i18n-embed",
+ "i18n-embed-fl",
+ "libamdgpu_top",
+ "once_cell",
+ "rust-embed",
+]
+
+[[package]]
+name = "amdgpu_top_json"
+version = "0.7.0"
+dependencies = [
+ "libamdgpu_top",
+ "serde_json",
+]
+
+[[package]]
+name = "amdgpu_top_tui"
+version = "0.7.0"
+dependencies = [
+ "cursive",
+ "libamdgpu_top",
+]
+
+[[package]]
+name = "android-activity"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289"
+dependencies = [
+ "android-properties",
+ "bitflags 2.4.2",
+ "cc",
+ "cesu8",
+ "jni",
+ "jni-sys",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-sys",
+ "num_enum",
+ "thiserror",
+]
+
+[[package]]
+name = "android-properties"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
+
+[[package]]
+name = "anyhow"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+
+[[package]]
+name = "arboard"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aafb29b107435aa276664c1db8954ac27a6e105cdad3c88287a199eb0e313c08"
+dependencies = [
+ "clipboard-win",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "parking_lot",
+ "thiserror",
+ "winapi",
+ "x11rb 0.12.0",
+]
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "as-raw-xcb-connection"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7"
+dependencies = [
+ "objc-sys",
+]
+
+[[package]]
+name = "block2"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68"
+dependencies = [
+ "block-sys",
+ "objc2",
+]
+
+[[package]]
+name = "bstr"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc"
+dependencies = [
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "btoi"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed2490600f404f2b94c167e31d3ed1d5f3c225a0f3b80230053b3e0b7b962bd9"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "calloop"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298"
+dependencies = [
+ "bitflags 2.4.2",
+ "log",
+ "polling",
+ "rustix",
+ "slab",
+ "thiserror",
+]
+
+[[package]]
+name = "calloop-wayland-source"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02"
+dependencies = [
+ "calloop",
+ "rustix",
+ "wayland-backend",
+ "wayland-client",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
+[[package]]
+name = "cgl"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "clru"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8191fa7302e03607ff0e237d4246cc043ff5b3cb9409d995172ba3bea16b807"
+
+[[package]]
+name = "cocoa"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+
+[[package]]
+name = "core-graphics"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+
+[[package]]
+name = "crossterm"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "cursive"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5438eb16bdd8af51b31e74764fef5d0a9260227a5ec82ba75c9d11ce46595839"
+dependencies = [
+ "ahash",
+ "cfg-if",
+ "crossbeam-channel",
+ "crossterm",
+ "cursive_core",
+ "lazy_static",
+ "libc",
+ "log",
+ "signal-hook",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "cursive_core"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4db3b58161228d0dcb45c7968c5e74c3f03ad39e8983e58ad7d57061aa2cd94d"
+dependencies = [
+ "ahash",
+ "crossbeam-channel",
+ "enum-map",
+ "enumset",
+ "lazy_static",
+ "log",
+ "num",
+ "owning_ref",
+ "time",
+ "unicode-segmentation",
+ "unicode-width",
+ "xi-unicode",
+]
+
+[[package]]
+name = "cursor-icon"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991"
+
+[[package]]
+name = "darling"
+version = "0.20.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc5d6b04b3fd0ba9926f945895de7d806260a2d7431ba82e7edaecb043c4c6b8"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04e48a959bcd5c761246f5d090ebc2fbf7b9cd527a492b07a67510c108f1e7e3"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d1545d67a2149e1d93b7e5c7752dce5a7426eb5d1357ddcfd89336b94444f77"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "directories-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "displaydoc"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "dlib"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "ecolor"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57539aabcdbb733b6806ef421b66dec158dc1582107ad6d51913db3600303354"
+dependencies = [
+ "bytemuck",
+ "serde",
+]
+
+[[package]]
+name = "eframe"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79c00143a1d564cf27570234c9a199cbe75dc3d43a135510fb2b93406a87ee8e"
+dependencies = [
+ "bytemuck",
+ "cocoa",
+ "directories-next",
+ "egui",
+ "egui-winit",
+ "egui_glow",
+ "glow",
+ "glutin",
+ "glutin-winit",
+ "image",
+ "js-sys",
+ "log",
+ "objc",
+ "parking_lot",
+ "percent-encoding",
+ "raw-window-handle",
+ "ron",
+ "serde",
+ "static_assertions",
+ "thiserror",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winapi",
+ "winit",
+]
+
+[[package]]
+name = "egui"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0bf640ed7f3bf3d14ebf00d73bacc09c886443ee84ca6494bde37953012c9e3"
+dependencies = [
+ "accesskit",
+ "ahash",
+ "epaint",
+ "log",
+ "nohash-hasher",
+ "ron",
+ "serde",
+]
+
+[[package]]
+name = "egui-winit"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d95d9762056c541bd2724de02910d8bccf3af8e37689dc114b21730e64f80a0"
+dependencies = [
+ "arboard",
+ "egui",
+ "log",
+ "raw-window-handle",
+ "serde",
+ "smithay-clipboard",
+ "web-time",
+ "webbrowser",
+ "winit",
+]
+
+[[package]]
+name = "egui_glow"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb2ef815e80d117339c7d6b813f7678d23522d699ccd3243e267ef06166009b9"
+dependencies = [
+ "bytemuck",
+ "egui",
+ "glow",
+ "log",
+ "memoffset",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "egui_plot"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a159fffebf052f79d1fd26d48e68906a21fec2fce808f7c0a982ec14ed506be"
+dependencies = [
+ "egui",
+]
+
+[[package]]
+name = "emath"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ee58355767587db7ba3738930d93cad3052cd834c2b48b9ef6ef26fe4823b7e"
+dependencies = [
+ "bytemuck",
+ "serde",
+]
+
+[[package]]
+name = "enum-map"
+version = "2.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9"
+dependencies = [
+ "enum-map-derive",
+]
+
+[[package]]
+name = "enum-map-derive"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "enumn"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "enumset"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "226c0da7462c13fb57e5cc9e0dc8f0635e7d27f276a3a7fd30054647f669007d"
+dependencies = [
+ "enumset_derive",
+]
+
+[[package]]
+name = "enumset_derive"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "epaint"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e638cb066bff0903bbb6143116cfd134a42279c7d68f19c0352a94f15a402de7"
+dependencies = [
+ "ab_glyph",
+ "ahash",
+ "bytemuck",
+ "ecolor",
+ "emath",
+ "log",
+ "nohash-hasher",
+ "parking_lot",
+ "serde",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "faster-hex"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "fdeflate"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "find-crate"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fluent"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61f69378194459db76abd2ce3952b790db103ceb003008d3d50d97c41ff847a7"
+dependencies = [
+ "fluent-bundle",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-bundle"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd"
+dependencies = [
+ "fluent-langneg",
+ "fluent-syntax",
+ "intl-memoizer",
+ "intl_pluralrules",
+ "rustc-hash",
+ "self_cell 0.10.3",
+ "smallvec",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-langneg"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-syntax"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
+dependencies = [
+ "foreign-types-macros",
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-macros"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb65d4ba3173c56a500b555b532f72c42e8d1fe64962b518897f8959fae2c177"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818"
+dependencies = [
+ "libc",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gix"
+version = "0.55.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "002667cd1ebb789313d0d0afe3d23b2821cf3b0e91605095f0e6d8751f0ceeea"
+dependencies = [
+ "gix-actor",
+ "gix-commitgraph",
+ "gix-config",
+ "gix-date",
+ "gix-diff",
+ "gix-discover",
+ "gix-features",
+ "gix-fs",
+ "gix-glob",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-lock",
+ "gix-macros",
+ "gix-object",
+ "gix-odb",
+ "gix-pack",
+ "gix-path",
+ "gix-ref",
+ "gix-refspec",
+ "gix-revision",
+ "gix-revwalk",
+ "gix-sec",
+ "gix-tempfile",
+ "gix-trace",
+ "gix-traverse",
+ "gix-url",
+ "gix-utils",
+ "gix-validate",
+ "once_cell",
+ "parking_lot",
+ "smallvec",
+ "thiserror",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "gix-actor"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eadca029ef716b4378f7afb19f7ee101fde9e58ba1f1445971315ac866db417"
+dependencies = [
+ "bstr",
+ "btoi",
+ "gix-date",
+ "itoa",
+ "thiserror",
+ "winnow",
+]
+
+[[package]]
+name = "gix-chunk"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "003ec6deacf68076a0c157271a127e0bb2c031c1a41f7168cbe5d248d9b85c78"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "gix-commitgraph"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85a7007ba021f059803afaf6f8a48872422abc20550ac12ede6ddea2936cec36"
+dependencies = [
+ "bstr",
+ "gix-chunk",
+ "gix-features",
+ "gix-hash",
+ "memmap2 0.9.4",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-config"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cae98c6b4c66c09379bc35274b172587d6b0ac369a416c39128ad8c6454f9bb"
+dependencies = [
+ "bstr",
+ "gix-config-value",
+ "gix-features",
+ "gix-glob",
+ "gix-path",
+ "gix-ref",
+ "gix-sec",
+ "memchr",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+ "unicode-bom",
+ "winnow",
+]
+
+[[package]]
+name = "gix-config-value"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e7bfb37a46ed0b8468db37a6d8a0a61d56bdbe4603ae492cb322e5f3958"
+dependencies = [
+ "bitflags 2.4.2",
+ "bstr",
+ "gix-path",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-date"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb7f3dfb72bebe3449b5e642be64e3c6ccbe9821c8b8f19f487cf5bfbbf4067e"
+dependencies = [
+ "bstr",
+ "itoa",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "gix-diff"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "931394f69fb8c9ed6afc0aae3487bd869e936339bcc13ed8884472af072e0554"
+dependencies = [
+ "gix-hash",
+ "gix-object",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-discover"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a45d5cf0321178883e38705ab2b098f625d609a7d4c391b33ac952eff2c490f2"
+dependencies = [
+ "bstr",
+ "dunce",
+ "gix-hash",
+ "gix-path",
+ "gix-ref",
+ "gix-sec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-features"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d46a4a5c6bb5bebec9c0d18b65ada20e6517dbd7cf855b87dd4bbdce3a771b2"
+dependencies = [
+ "crc32fast",
+ "flate2",
+ "gix-hash",
+ "gix-trace",
+ "libc",
+ "once_cell",
+ "prodash",
+ "sha1_smol",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "gix-fs"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20e86eb040f5776a5ade092282e51cdcad398adb77d948b88d17583c2ae4e107"
+dependencies = [
+ "gix-features",
+]
+
+[[package]]
+name = "gix-glob"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5db19298c5eeea2961e5b3bf190767a2d1f09b8802aeb5f258e42276350aff19"
+dependencies = [
+ "bitflags 2.4.2",
+ "bstr",
+ "gix-features",
+ "gix-path",
+]
+
+[[package]]
+name = "gix-hash"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f8cf8c2266f63e582b7eb206799b63aa5fa68ee510ad349f637dfe2d0653de0"
+dependencies = [
+ "faster-hex",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-hashtable"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "feb61880816d7ec4f0b20606b498147d480860ddd9133ba542628df2f548d3ca"
+dependencies = [
+ "gix-hash",
+ "hashbrown",
+ "parking_lot",
+]
+
+[[package]]
+name = "gix-lock"
+version = "11.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e5c65e6a29830a435664891ced3f3c1af010f14900226019590ee0971a22f37"
+dependencies = [
+ "gix-tempfile",
+ "gix-utils",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-macros"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d75e7ab728059f595f6ddc1ad8771b8d6a231971ae493d9d5948ecad366ee8bb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "gix-object"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "740f2a44267f58770a1cb3a3d01d14e67b089c7136c48d4bddbb3cfd2bf86a51"
+dependencies = [
+ "bstr",
+ "btoi",
+ "gix-actor",
+ "gix-date",
+ "gix-features",
+ "gix-hash",
+ "gix-validate",
+ "itoa",
+ "smallvec",
+ "thiserror",
+ "winnow",
+]
+
+[[package]]
+name = "gix-odb"
+version = "0.54.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8630b56cb80d8fa684d383dad006a66401ee8314e12fbf0e566ddad8c115143b"
+dependencies = [
+ "arc-swap",
+ "gix-date",
+ "gix-features",
+ "gix-hash",
+ "gix-object",
+ "gix-pack",
+ "gix-path",
+ "gix-quote",
+ "parking_lot",
+ "tempfile",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-pack"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1431ba2e30deff1405920693d54ab231c88d7c240dd6ccc936ee223d8f8697c3"
+dependencies = [
+ "clru",
+ "gix-chunk",
+ "gix-features",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "gix-path",
+ "gix-tempfile",
+ "memmap2 0.7.1",
+ "parking_lot",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-path"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97e9ad649bf5e109562d6acba657ca428661ec08e77eaf3a755d8fa55485be9c"
+dependencies = [
+ "bstr",
+ "gix-trace",
+ "home",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-quote"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7dc10303d73a960d10fb82f81188b036ac3e6b11b5795b20b1a60b51d1321f"
+dependencies = [
+ "bstr",
+ "btoi",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-ref"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ec2f6d07ac88d2fb8007ee3fa3e801856fb9d82e7366ec0ca332eb2c9d74a52"
+dependencies = [
+ "gix-actor",
+ "gix-date",
+ "gix-features",
+ "gix-fs",
+ "gix-hash",
+ "gix-lock",
+ "gix-object",
+ "gix-path",
+ "gix-tempfile",
+ "gix-validate",
+ "memmap2 0.7.1",
+ "thiserror",
+ "winnow",
+]
+
+[[package]]
+name = "gix-refspec"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccb0974cc41dbdb43a180c7f67aa481e1c1e160fcfa8f4a55291fd1126c1a6e7"
+dependencies = [
+ "bstr",
+ "gix-hash",
+ "gix-revision",
+ "gix-validate",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-revision"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ca97ac73459a7f3766aa4a5638a6e37d56d4c7962bc1986fbaf4883d0772588"
+dependencies = [
+ "bstr",
+ "gix-date",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "gix-revwalk",
+ "gix-trace",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-revwalk"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a16d8c892e4cd676d86f0265bf9d40cefd73d8d94f86b213b8b77d50e77efae0"
+dependencies = [
+ "gix-commitgraph",
+ "gix-date",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-sec"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8d9bf462feaf05f2121cba7399dbc6c34d88a9cad58fc1e95027791d6a3c6d2"
+dependencies = [
+ "bitflags 2.4.2",
+ "gix-path",
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "gix-tempfile"
+version = "11.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388dd29114a86ec69b28d1e26d6d63a662300ecf61ab3f4cc578f7d7dc9e7e23"
+dependencies = [
+ "gix-fs",
+ "libc",
+ "once_cell",
+ "parking_lot",
+ "tempfile",
+]
+
+[[package]]
+name = "gix-trace"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02b202d766a7fefc596e2cc6a89cda8ad8ad733aed82da635ac120691112a9b1"
+
+[[package]]
+name = "gix-traverse"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14d050ec7d4e1bb76abf0636cf4104fb915b70e54e3ced9a4427c999100ff38a"
+dependencies = [
+ "gix-commitgraph",
+ "gix-date",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "gix-revwalk",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-url"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c427a1a11ccfa53a4a2da47d9442c2241deee63a154bc15cc14b8312fbc4005"
+dependencies = [
+ "bstr",
+ "gix-features",
+ "gix-path",
+ "home",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "gix-utils"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56e839f3d0798b296411263da6bee780a176ef8008a5dfc31287f7eda9266ab8"
+dependencies = [
+ "fastrand",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "gix-validate"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac7cc36f496bd5d96cdca0f9289bb684480725d40db60f48194aa7723b883854"
+dependencies = [
+ "bstr",
+ "thiserror",
+]
+
+[[package]]
+name = "gl_generator"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
+dependencies = [
+ "khronos_api",
+ "log",
+ "xml-rs",
+]
+
+[[package]]
+name = "glow"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1"
+dependencies = [
+ "js-sys",
+ "slotmap",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "glutin"
+version = "0.31.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "005459a22af86adc706522d78d360101118e2638ec21df3852fcc626e0dbb212"
+dependencies = [
+ "bitflags 2.4.2",
+ "cfg_aliases",
+ "cgl",
+ "core-foundation",
+ "dispatch",
+ "glutin_egl_sys",
+ "glutin_glx_sys",
+ "glutin_wgl_sys",
+ "icrate",
+ "libloading",
+ "objc2",
+ "once_cell",
+ "raw-window-handle",
+ "wayland-sys",
+ "windows-sys 0.48.0",
+ "x11-dl",
+]
+
+[[package]]
+name = "glutin-winit"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ebcdfba24f73b8412c5181e56f092b5eff16671c514ce896b258a0a64bd7735"
+dependencies = [
+ "cfg_aliases",
+ "glutin",
+ "raw-window-handle",
+ "winit",
+]
+
+[[package]]
+name = "glutin_egl_sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77cc5623f5309ef433c3dd4ca1223195347fe62c413da8e2fdd0eb76db2d9bcd"
+dependencies = [
+ "gl_generator",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "glutin_glx_sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a165fd686c10dcc2d45380b35796e577eacfd43d4660ee741ec8ebe2201b3b4f"
+dependencies = [
+ "gl_generator",
+ "x11-dl",
+]
+
+[[package]]
+name = "glutin_wgl_sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead"
+dependencies = [
+ "gl_generator",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[package]]
+name = "home"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "i18n-config"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c9ce3c48cbc21fd5b22b9331f32b5b51f6ad85d969b99e793427332e76e7640"
+dependencies = [
+ "log",
+ "serde",
+ "serde_derive",
+ "thiserror",
+ "toml 0.8.9",
+ "unic-langid",
+]
+
+[[package]]
+name = "i18n-embed"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94205d95764f5bb9db9ea98fa77f89653365ca748e27161f5bbea2ffd50e459c"
+dependencies = [
+ "arc-swap",
+ "fluent",
+ "fluent-langneg",
+ "fluent-syntax",
+ "i18n-embed-impl",
+ "intl-memoizer",
+ "lazy_static",
+ "locale_config",
+ "log",
+ "parking_lot",
+ "rust-embed",
+ "thiserror",
+ "unic-langid",
+ "walkdir",
+]
+
+[[package]]
+name = "i18n-embed-fl"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc1f8715195dffc4caddcf1cf3128da15fe5d8a137606ea8856c9300047d5a2"
+dependencies = [
+ "dashmap",
+ "find-crate",
+ "fluent",
+ "fluent-syntax",
+ "i18n-config",
+ "i18n-embed",
+ "lazy_static",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.48",
+ "unic-langid",
+]
+
+[[package]]
+name = "i18n-embed-impl"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81093c4701672f59416582fe3145676126fd23ba5db910acad0793c1108aaa58"
+dependencies = [
+ "find-crate",
+ "i18n-config",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "icrate"
+version = "0.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319"
+dependencies = [
+ "block2",
+ "dispatch",
+ "objc2",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.24.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "034bbe799d1909622a74d1193aa50147769440040ff36cb2baa947609b0a4e23"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "num-traits",
+ "png",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "intl-memoizer"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66f"
+dependencies = [
+ "type-map",
+ "unic-langid",
+]
+
+[[package]]
+name = "intl_pluralrules"
+version = "7.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "khronos_api"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libamdgpu_top"
+version = "0.7.0"
+dependencies = [
+ "anyhow",
+ "libdrm_amdgpu_sys",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.153"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+
+[[package]]
+name = "libdrm_amdgpu_sys"
+version = "0.5.0"
+source = "git+https://github.com/Umio-Yasuno/libdrm-amdgpu-sys-rs#6852a973c639385988ce0454b59dddcf40ebcd2f"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "libloading"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "libredox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+dependencies = [
+ "bitflags 2.4.2",
+ "libc",
+ "redox_syscall 0.4.1",
+]
+
+[[package]]
+name = "libredox"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607"
+dependencies = [
+ "bitflags 2.4.2",
+ "libc",
+ "redox_syscall 0.4.1",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
+
+[[package]]
+name = "locale_config"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934"
+dependencies = [
+ "lazy_static",
+ "objc",
+ "objc-foundation",
+ "regex",
+ "winapi",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "memmap2"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f49388d20533534cd19360ad3d6a7dadc885944aa802ba3995040c5ec11288c6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memmap2"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ndk"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7"
+dependencies = [
+ "bitflags 2.4.2",
+ "jni-sys",
+ "log",
+ "ndk-sys",
+ "num_enum",
+ "raw-window-handle",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-sys"
+version = "0.5.0+25.2.9519653"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nohash-hasher"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
+
+[[package]]
+name = "num"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
+dependencies = [
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc-sys"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7c71324e4180d0899963fc83d9d241ac39e699609fc1025a850aadac8257459"
+
+[[package]]
+name = "objc2"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d"
+dependencies = [
+ "objc-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "objc2-encode"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666"
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "orbclient"
+version = "0.3.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166"
+dependencies = [
+ "libredox 0.0.2",
+]
+
+[[package]]
+name = "owned_ttf_parser"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7"
+dependencies = [
+ "ttf-parser",
+]
+
+[[package]]
+name = "owning_ref"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.4.1",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb"
+
+[[package]]
+name = "png"
+version = "0.17.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f6c3c3e617595665b8ea2ff95a86066be38fb121ff920a9c0eb282abcd1da5a"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "polling"
+version = "3.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "545c980a3880efd47b2e262f6a4bb6daad6555cf3367aa9c4e52895f69537a41"
+dependencies = [
+ "cfg-if",
+ "concurrent-queue",
+ "pin-project-lite",
+ "rustix",
+ "tracing",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "proc-macro-crate"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
+dependencies = [
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prodash"
+version = "26.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "794b5bf8e2d19b53dcdcec3e4bba628e20f5b6062503ba89281fa7037dd7bbcf"
+
+[[package]]
+name = "quick-xml"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+dependencies = [
+ "getrandom",
+ "libredox 0.0.1",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "ron"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
+dependencies = [
+ "base64",
+ "bitflags 2.4.2",
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "rust-embed"
+version = "8.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a82c0bbc10308ed323529fd3c1dce8badda635aa319a5ff0e6466f33b8101e3f"
+dependencies = [
+ "rust-embed-impl",
+ "rust-embed-utils",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-impl"
+version = "8.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6227c01b1783cdfee1bcf844eb44594cd16ec71c35305bf1c9fb5aade2735e16"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rust-embed-utils",
+ "syn 2.0.48",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-utils"
+version = "8.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cb0a25bfbb2d4b4402179c2cf030387d9990857ce08a32592c6238db9fa8665"
+dependencies = [
+ "sha2",
+ "walkdir",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.38.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
+dependencies = [
+ "bitflags 2.4.2",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "self_cell"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d"
+dependencies = [
+ "self_cell 1.0.3",
+]
+
+[[package]]
+name = "self_cell"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba"
+
+[[package]]
+name = "serde"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.113"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60e3d9941fa3bacf7c2bf4b065304faa14164151254cd16ce1b1bc8fc381600f"
+dependencies = [
+ "bitflags 2.4.2",
+ "calloop",
+ "calloop-wayland-source",
+ "cursor-icon",
+ "libc",
+ "log",
+ "memmap2 0.9.4",
+ "rustix",
+ "thiserror",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-csd-frame",
+ "wayland-cursor",
+ "wayland-protocols",
+ "wayland-protocols-wlr",
+ "wayland-scanner",
+ "xkeysym",
+]
+
+[[package]]
+name = "smithay-clipboard"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bb62b280ce5a5cba847669933a0948d00904cf83845c944eae96a4738cea1a6"
+dependencies = [
+ "libc",
+ "smithay-client-toolkit",
+ "wayland-backend",
+]
+
+[[package]]
+name = "smol_str"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.4.1",
+ "rustix",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "time"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749"
+dependencies = [
+ "deranged",
+ "itoa",
+ "libc",
+ "num-conv",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83c02bf3c538ab32ba913408224323915f4ef9a6d61c0e85d493f355921c0ece"
+dependencies = [
+ "displaydoc",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6a4b9e8023eb94392d3dca65d717c53abc5dad49c07cb65bb8fcd87115fa325"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+
+[[package]]
+name = "ttf-parser"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4"
+
+[[package]]
+name = "type-map"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46"
+dependencies = [
+ "rustc-hash",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unic-langid"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238722e6d794ed130f91f4ea33e01fcff4f188d92337a21297892521c72df516"
+dependencies = [
+ "unic-langid-impl",
+]
+
+[[package]]
+name = "unic-langid-impl"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bd55a2063fdea4ef1f8633243a7b0524cbeef1905ae04c31a1c9b9775c55bc6"
+dependencies = [
+ "serde",
+ "tinystr",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
+
+[[package]]
+name = "unicode-bom"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b"
+
+[[package]]
+name = "wayland-backend"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40"
+dependencies = [
+ "cc",
+ "downcast-rs",
+ "rustix",
+ "scoped-tls",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-client"
+version = "0.31.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f"
+dependencies = [
+ "bitflags 2.4.2",
+ "rustix",
+ "wayland-backend",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-csd-frame"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
+dependencies = [
+ "bitflags 2.4.2",
+ "cursor-icon",
+ "wayland-backend",
+]
+
+[[package]]
+name = "wayland-cursor"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba"
+dependencies = [
+ "rustix",
+ "wayland-client",
+ "xcursor",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.31.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4"
+dependencies = [
+ "bitflags 2.4.2",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-protocols-plasma"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479"
+dependencies = [
+ "bitflags 2.4.2",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-protocols",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-protocols-wlr"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6"
+dependencies = [
+ "bitflags 2.4.2",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-protocols",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283"
+dependencies = [
+ "proc-macro2",
+ "quick-xml",
+ "quote",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af"
+dependencies = [
+ "dlib",
+ "log",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "web-time"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webbrowser"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71"
+dependencies = [
+ "core-foundation",
+ "home",
+ "jni",
+ "log",
+ "ndk-context",
+ "objc",
+ "raw-window-handle",
+ "url",
+ "web-sys",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winit"
+version = "0.29.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c824f11941eeae66ec71111cc2674373c772f482b58939bb4066b642aa2ffcf"
+dependencies = [
+ "ahash",
+ "android-activity",
+ "atomic-waker",
+ "bitflags 2.4.2",
+ "bytemuck",
+ "calloop",
+ "cfg_aliases",
+ "core-foundation",
+ "core-graphics",
+ "cursor-icon",
+ "icrate",
+ "js-sys",
+ "libc",
+ "log",
+ "memmap2 0.9.4",
+ "ndk",
+ "ndk-sys",
+ "objc2",
+ "once_cell",
+ "orbclient",
+ "percent-encoding",
+ "raw-window-handle",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "smithay-client-toolkit",
+ "smol_str",
+ "unicode-segmentation",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-protocols",
+ "wayland-protocols-plasma",
+ "web-sys",
+ "web-time",
+ "windows-sys 0.48.0",
+ "x11-dl",
+ "x11rb 0.13.0",
+ "xkbcommon-dl",
+]
+
+[[package]]
+name = "winnow"
+version = "0.5.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cad8365489051ae9f054164e459304af2e7e9bb407c958076c8bf4aef52da5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
+dependencies = [
+ "libc",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a"
+dependencies = [
+ "gethostname 0.3.0",
+ "nix",
+ "winapi",
+ "winapi-wsapoll",
+ "x11rb-protocol 0.12.0",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a"
+dependencies = [
+ "as-raw-xcb-connection",
+ "gethostname 0.4.3",
+ "libc",
+ "libloading",
+ "once_cell",
+ "rustix",
+ "x11rb-protocol 0.13.0",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82d6c3f9a0fb6701fab8f6cea9b0c0bd5d6876f1f89f7fada07e558077c344bc"
+dependencies = [
+ "nix",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34"
+
+[[package]]
+name = "xcursor"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911"
+
+[[package]]
+name = "xi-unicode"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a"
+
+[[package]]
+name = "xkbcommon-dl"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6924668544c48c0133152e7eec86d644a056ca3d09275eb8d5cdb9855f9d8699"
+dependencies = [
+ "bitflags 2.4.2",
+ "dlib",
+ "log",
+ "once_cell",
+ "xkeysym",
+]
+
+[[package]]
+name = "xkeysym"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
diff --git a/nixpkgs/pkgs/tools/system/amdgpu_top/default.nix b/nixpkgs/pkgs/tools/system/amdgpu_top/default.nix
new file mode 100644
index 000000000000..8fec618e942a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/amdgpu_top/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, libdrm
+, libX11
+, libGL
+, wayland
+, wayland-protocols
+, libxkbcommon
+, libXrandr
+, libXi
+, libXcursor
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "amdgpu_top";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "Umio-Yasuno";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-8fEYIrBh+O+bL3szKHvAD+wBTY+ScxBZvjpNufmfYYA=";
+  };
+
+  cargoLock = {
+    outputHashes = {
+      "libdrm_amdgpu_sys-0.5.0" = "sha256-Sqq3Qnt6hMUubhVgetFCPMFqRrcJuGDT9V4ZRaNgcpQ=";
+    };
+    lockFile = ./Cargo.lock;
+  };
+
+  buildInputs = [
+    libdrm
+    libX11
+    libGL
+    wayland
+    wayland-protocols
+    libxkbcommon
+    libXrandr
+    libXi
+    libXcursor
+  ];
+
+  postInstall = ''
+    install -D ./assets/${pname}.desktop -t $out/share/applications/
+  '';
+
+  postFixup = ''
+    patchelf --set-rpath "${lib.makeLibraryPath buildInputs}" $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    description = "Tool to display AMDGPU usage";
+    homepage = "https://github.com/Umio-Yasuno/amdgpu_top";
+    changelog = "https://github.com/Umio-Yasuno/amdgpu_top/releases";
+    license = licenses.mit;
+    maintainers = with maintainers; [ geri1701 ];
+    platforms = platforms.linux;
+    mainProgram = "amdgpu_top";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/amtterm/default.nix b/nixpkgs/pkgs/tools/system/amtterm/default.nix
new file mode 100644
index 000000000000..6ec57c253e89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/amtterm/default.nix
@@ -0,0 +1,27 @@
+{ fetchurl, lib, stdenv, makeWrapper, perl, perlPackages }:
+
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "amtterm";
+  version = "1.7-1";
+
+  buildInputs = with perlPackages; [ perl SOAPLite ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchurl {
+    url = "https://www.kraxel.org/cgit/amtterm/snapshot/amtterm-${finalAttrs.version}.tar.gz";
+    sha256 = "sha256-WrYWAXLW74hb/DfSiPyiFIGAUfDQFdNEPx+XevZYcyk=";
+  };
+
+  makeFlags = [ "prefix=$(out)" "STRIP=" ];
+
+  postInstall =
+    "wrapProgram $out/bin/amttool --prefix PERL5LIB : $PERL5LIB";
+
+  meta = with lib;
+    { description = "Intel AMT® SoL client + tools";
+      homepage = "https://www.kraxel.org/cgit/amtterm/";
+      license = licenses.gpl2;
+      platforms = platforms.linux;
+    };
+})
diff --git a/nixpkgs/pkgs/tools/system/at/default.nix b/nixpkgs/pkgs/tools/system/at/default.nix
new file mode 100644
index 000000000000..e5eebb727b54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/at/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, fetchurl, fetchpatch, bison, flex, pam, perl
+, sendmailPath ? "/run/wrappers/bin/sendmail"
+, atWrapperPath ? "/run/wrappers/bin/at"
+}:
+
+stdenv.mkDerivation rec {
+  pname = "at";
+  version = "3.2.5";
+
+  src = fetchurl {
+    # Debian is apparently the last location where it can be found.
+    url = "mirror://debian/pool/main/a/at/at_${version}.orig.tar.gz";
+    hash = "sha256-uwZrOJ18m7nYSjVzgDK4XDDLp9lJ91gZKtxyyUd/07g=";
+  };
+
+  patches = [
+    # Remove glibc assumption
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/riscv/riscv-poky/master/meta/recipes-extended/at/at/0001-remove-glibc-assumption.patch";
+      hash = "sha256-1UobqEZWoaq0S8DUDPuI80kTx0Gut2/VxDIwcKeGZOY=";
+    })
+  ];
+
+  postPatch = ''
+    # Remove chown commands and setuid bit
+    substituteInPlace Makefile.in \
+      --replace ' -o root ' ' ' \
+      --replace ' -g root ' ' ' \
+      --replace ' -o $(DAEMON_USERNAME) ' ' ' \
+      --replace ' -o $(DAEMON_GROUPNAME) ' ' ' \
+      --replace ' -g $(DAEMON_GROUPNAME) ' ' ' \
+      --replace '$(DESTDIR)$(etcdir)' "$out/etc" \
+      --replace '$(DESTDIR)$(ATJOB_DIR)' "$out/var/spool/atjobs" \
+      --replace '$(DESTDIR)$(ATSPOOL_DIR)' "$out/var/spool/atspool" \
+      --replace '$(DESTDIR)$(LFILE)' "$out/var/spool/atjobs/.SEQ" \
+      --replace 'chown' '# skip chown' \
+      --replace '6755' '0755'
+  '';
+
+  nativeBuildInputs = [ bison flex perl /* for `prove` (tests) */ ];
+
+  buildInputs = [ pam ];
+
+  preConfigure =
+    ''
+      export SENDMAIL=${sendmailPath}
+      # Purity: force atd.pid to be placed in /var/run regardless of
+      # whether it exists now.
+      substituteInPlace ./configure --replace "test -d /var/run" "true"
+    '';
+
+  configureFlags = [
+    "--with-etcdir=/etc/at"
+    "--with-jobdir=/var/spool/atjobs"
+    "--with-atspool=/var/spool/atspool"
+    "--with-daemon_username=atd"
+    "--with-daemon_groupname=atd"
+  ];
+
+  doCheck = true;
+
+  # Ensure that "batch" can invoke the setuid "at" wrapper, if it exists, or
+  # else we get permission errors (on NixOS). "batch" is a shell script, so
+  # when the kernel executes it drops setuid perms.
+  postInstall = ''
+    sed -i "6i test -x ${atWrapperPath} && exec ${atWrapperPath} -qb now  # exec doesn't return" "$out/bin/batch"
+  '';
+
+  meta = with lib; {
+    description = "The classical Unix `at' job scheduling command";
+    license = licenses.gpl2Plus;
+    homepage = "https://tracker.debian.org/pkg/at";
+    changelog = "https://salsa.debian.org/debian/at/-/raw/master/ChangeLog";
+    platforms = platforms.linux;
+    mainProgram = "at";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/augeas/bootstrap.diff b/nixpkgs/pkgs/tools/system/augeas/bootstrap.diff
new file mode 100644
index 000000000000..3740134c5478
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/augeas/bootstrap.diff
@@ -0,0 +1,15 @@
+diff --git a/bootstrap b/bootstrap
+index a84eb39..cac656d 100755
+--- a/bootstrap
++++ b/bootstrap
+@@ -53,9 +53,6 @@ case ${GNULIB_SRCDIR--} in
+     echo "$0: getting gnulib files..."
+     git submodule update || exit $?
+     GNULIB_SRCDIR=.gnulib
+-  else
+-    echo >&2 "$0: invalid gnulib srcdir: $GNULIB_SRCDIR"
+-    exit 1
+   fi
+   ;;
+ esac
+
diff --git a/nixpkgs/pkgs/tools/system/augeas/default.nix b/nixpkgs/pkgs/tools/system/augeas/default.nix
new file mode 100644
index 000000000000..e30de64f5ad1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/augeas/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, bison
+, flex
+, perl # for pod2man
+, pkg-config
+, readline
+, libxml2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "augeas";
+  version = "1.14.1";
+
+  src = fetchFromGitHub {
+    owner = "hercules-team";
+    repo = "augeas";
+    rev = "release-${version}";
+    fetchSubmodules = true;
+    hash = "sha256-U5tm3LDUeI/idHtL2Zy33BigkyvHunXPjToDC59G9VE=";
+  };
+
+  patches = [
+    # already have the submodules so don't fail when .git doesn't exist.
+    ./bootstrap.diff
+  ];
+
+  postPatch = ''
+    ./bootstrap --gnulib-srcdir=.gnulib
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    bison
+    flex
+    perl
+    pkg-config
+  ];
+
+  buildInputs = [ readline libxml2 ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+    patchShebangs --build gnulib/tests tests
+    make -j $NIX_BUILD_CORES check
+    runHook postCheck
+  '';
+
+  outputs = [ "out" "dev" ];
+
+  meta = with lib; {
+    description = "Configuration editing tool";
+    license = licenses.lgpl21Only;
+    homepage = "https://augeas.net/";
+    changelog = "https://github.com/hercules-team/augeas/releases/tag/release-${version}";
+    mainProgram = "augtool";
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/auto-cpufreq/default.nix b/nixpkgs/pkgs/tools/system/auto-cpufreq/default.nix
new file mode 100644
index 000000000000..4c15908eab19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/auto-cpufreq/default.nix
@@ -0,0 +1,49 @@
+{ lib, python3Packages, fetchFromGitHub, substituteAll }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "auto-cpufreq";
+  version = "1.9.9";
+
+  src = fetchFromGitHub {
+    owner = "AdnanHodzic";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-D/5pwE2V+yXj92ECOUcl/dajMDbvVdz9YNJrl2Pzvts=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ setuptools-git-versioning click distro psutil ];
+
+  doCheck = false;
+  pythonImportsCheck = [ "auto_cpufreq" ];
+
+  patches = [
+    # hardcodes version output
+    (substituteAll {
+      src = ./fix-version-output.patch;
+      inherit version;
+    })
+
+    # patch to prevent script copying and to disable install
+    ./prevent-install-and-copy.patch
+    # patch to prevent update
+    ./prevent-update.patch
+  ];
+
+  postInstall = ''
+    # copy script manually
+    cp ${src}/scripts/cpufreqctl.sh $out/bin/cpufreqctl.auto-cpufreq
+
+    # systemd service
+    mkdir -p $out/lib/systemd/system
+    cp ${src}/scripts/auto-cpufreq.service $out/lib/systemd/system
+  '';
+
+  meta = with lib; {
+    mainProgram = "${pname}";
+    homepage = "https://github.com/AdnanHodzic/auto-cpufreq";
+    description = "Automatic CPU speed & power optimizer for Linux";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.Technical27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/auto-cpufreq/fix-version-output.patch b/nixpkgs/pkgs/tools/system/auto-cpufreq/fix-version-output.patch
new file mode 100644
index 000000000000..fad9f091da40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/auto-cpufreq/fix-version-output.patch
@@ -0,0 +1,33 @@
+diff --git a/auto_cpufreq/core.py b/auto_cpufreq/core.py
+index 99397a9..f3ef28f 100755
+--- a/auto_cpufreq/core.py
++++ b/auto_cpufreq/core.py
+@@ -144,26 +144,10 @@ except PermissionError:
+ 
+ # display running version of auto-cpufreq
+ def app_version():
++    print("auto-cpufreq version: @version@")
++    print("Git commit: v@version@")
+ 
+-    print("auto-cpufreq version: ", end="")
+ 
+-    # snap package
+-    if os.getenv("PKG_MARKER") == "SNAP":
+-        print(getoutput("echo \(Snap\) $SNAP_VERSION"))
+-    # aur package
+-    elif dist_name in ["arch", "manjaro", "garuda"]:
+-        aur_pkg_check = call("pacman -Qs auto-cpufreq > /dev/null", shell=True)
+-        if aur_pkg_check == 1:
+-            print(get_formatted_version())
+-        else:
+-            print(getoutput("pacman -Qi auto-cpufreq | grep Version"))
+-    else:
+-        # source code (auto-cpufreq-installer)
+-        try:
+-            print(get_formatted_version())
+-        except Exception as e:
+-            print(repr(e))
+-            pass
+ def verify_update():
+     # Specify the repository and package name
+     # IT IS IMPORTANT TO  THAT IF THE REPOSITORY STRUCTURE IS CHANGED, THE FOLLOWING FUNCTION NEEDS TO BE UPDATED ACCORDINGLY
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/system/auto-cpufreq/prevent-install-and-copy.patch b/nixpkgs/pkgs/tools/system/auto-cpufreq/prevent-install-and-copy.patch
new file mode 100644
index 000000000000..9b5bffb5591e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/auto-cpufreq/prevent-install-and-copy.patch
@@ -0,0 +1,163 @@
+diff --git a/auto_cpufreq/core.py b/auto_cpufreq/core.py
+index 99397a9..48a377a 100755
+--- a/auto_cpufreq/core.py
++++ b/auto_cpufreq/core.py
+@@ -350,30 +334,13 @@ def get_current_gov():
+ 
+ 
+ def cpufreqctl():
+-    """
+-    deploy cpufreqctl script
+-    """
+-
+-    # detect if running on a SNAP
+-    if os.getenv("PKG_MARKER") == "SNAP":
+-        pass
+-    else:
+-        # deploy cpufreqctl.auto-cpufreq script
+-        if not os.path.isfile("/usr/local/bin/cpufreqctl.auto-cpufreq"):
+-            shutil.copy(SCRIPTS_DIR / "cpufreqctl.sh", "/usr/local/bin/cpufreqctl.auto-cpufreq")
++    # scripts are already in the correct place
++    pass
+ 
+ 
+ def cpufreqctl_restore():
+-    """
+-    remove cpufreqctl.auto-cpufreq script
+-    """
+-    # detect if running on a SNAP
+-    if os.getenv("PKG_MARKER") == "SNAP":
+-        pass
+-    else:
+-        if os.path.isfile("/usr/local/bin/cpufreqctl.auto-cpufreq"):
+-            os.remove("/usr/local/bin/cpufreqctl.auto-cpufreq")
+-
++    # no need to restore
++    pass
+ 
+ def footer(l=79):
+     print("\n" + "-" * l + "\n")
+@@ -400,30 +367,8 @@ def remove_complete_msg():
+ 
+ 
+ def deploy_daemon():
+-    print("\n" + "-" * 21 + " Deploying auto-cpufreq as a daemon " + "-" * 22 + "\n")
+-
+-    # deploy cpufreqctl script func call
+-    cpufreqctl()
+-
+-    # turn off bluetooth on boot
+-    bluetooth_disable()
+-
+-    auto_cpufreq_stats_path.touch(exist_ok=True)
+-
+-    print("\n* Deploy auto-cpufreq install script")
+-    shutil.copy(SCRIPTS_DIR / "auto-cpufreq-install.sh", "/usr/local/bin/auto-cpufreq-install")
+-
+-    print("\n* Deploy auto-cpufreq remove script")
+-    shutil.copy(SCRIPTS_DIR / "auto-cpufreq-remove.sh", "/usr/local/bin/auto-cpufreq-remove")
+-
+-    # output warning if gnome power profile is running
+-    gnome_power_detect_install()
+-    gnome_power_svc_disable()
+-
+-    # output warning if TLP service is detected
+-    tlp_service_detect()
+-
+-    call("/usr/local/bin/auto-cpufreq-install", shell=True)
++    # prevent needless copying and system changes
++    pass
+ 
+ 
+ def deploy_daemon_performance():
+@@ -463,40 +408,7 @@ def deploy_daemon_performance():
+ 
+ # remove auto-cpufreq daemon
+ def remove_daemon():
+-
+-    # check if auto-cpufreq is installed
+-    if not os.path.exists("/usr/local/bin/auto-cpufreq-remove"):
+-        print("\nauto-cpufreq daemon is not installed.\n")
+-        sys.exit(1)
+-
+-    print("\n" + "-" * 21 + " Removing auto-cpufreq daemon " + "-" * 22 + "\n")
+-
+-    # turn on bluetooth on boot
+-    bluetooth_enable()
+-
+-    # output warning if gnome power profile is stopped
+-    gnome_power_rm_reminder()
+-    gnome_power_svc_enable()
+-
+-    # run auto-cpufreq daemon remove script
+-    call("/usr/local/bin/auto-cpufreq-remove", shell=True)
+-
+-    # remove auto-cpufreq-remove
+-    os.remove("/usr/local/bin/auto-cpufreq-remove")
+-
+-    # delete override pickle if it exists
+-    if os.path.exists(governor_override_state):
+-        os.remove(governor_override_state)
+-
+-    # delete stats file
+-    if auto_cpufreq_stats_path.exists():
+-        if auto_cpufreq_stats_file is not None:
+-            auto_cpufreq_stats_file.close()
+-
+-        auto_cpufreq_stats_path.unlink()
+-
+-    # restore original cpufrectl script
+-    cpufreqctl_restore()
++    pass
+ 
+ 
+ def gov_check():
+
+diff --git a/bin/auto-cpufreq b/bin/auto-cpufreq
+index b89d925..b73974c 100755
+--- a/bin/auto-cpufreq
++++ b/bin/auto-cpufreq
+@@ -189,41 +189,9 @@
+             print("https://github.com/AdnanHodzic/auto-cpufreq/#donate")
+             footer()
+         elif install:
+-            if os.getenv("PKG_MARKER") == "SNAP":
+-                root_check()
+-                running_daemon_check()
+-                gnome_power_detect_snap()
+-                tlp_service_detect_snap()
+-                bluetooth_notif_snap()
+-                gov_check()
+-                run("snapctl set daemon=enabled", shell=True)
+-                run("snapctl start --enable auto-cpufreq", shell=True)
+-                deploy_complete_msg()
+-            else:
+-                root_check()
+-                running_daemon_check()
+-                gov_check()
+-                deploy_daemon()
+-                deploy_complete_msg()
++            print("install is disabled in the nix package")
+         elif remove:
+-            if os.getenv("PKG_MARKER") == "SNAP":
+-                root_check()
+-                run("snapctl set daemon=disabled", shell=True)
+-                run("snapctl stop --disable auto-cpufreq", shell=True)
+-                if auto_cpufreq_stats_path.exists():
+-                    if auto_cpufreq_stats_file is not None:
+-                        auto_cpufreq_stats_file.close()
+-
+-                    auto_cpufreq_stats_path.unlink()
+-                # ToDo: 
+-                # {the following snippet also used in --update, update it there too(if required)}
+-                # * undo bluetooth boot disable
+-                gnome_power_rm_reminder_snap()
+-                remove_complete_msg()
+-            else:
+-                root_check()
+-                remove_daemon()
+-                remove_complete_msg()
++            print("remove is disabled in the nix package")
+         elif update:
+             root_check()
+             if os.getenv("PKG_MARKER") == "SNAP":
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/system/auto-cpufreq/prevent-update.patch b/nixpkgs/pkgs/tools/system/auto-cpufreq/prevent-update.patch
new file mode 100644
index 000000000000..10da9fec9785
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/auto-cpufreq/prevent-update.patch
@@ -0,0 +1,60 @@
+diff --git a/requirements.txt b/requirements.txt
+index f492cac..e61d1a4 100755
+--- a/requirements.txt
++++ b/requirements.txt
+@@ -2,4 +2,3 @@
+ psutil
+ click
+ distro
+-requests
+
+diff --git a/auto_cpufreq/core.py b/auto_cpufreq/core.py
+index 99397a9..697fb68 100755
+--- a/auto_cpufreq/core.py
++++ b/auto_cpufreq/core.py
+@@ -18,7 +18,6 @@ from math import isclose
+ from pathlib import Path
+ from shutil import which
+ from subprocess import getoutput, call, run, check_output, DEVNULL
+-import requests
+ import re
+ 
+ # execution timestamp used in countdown func
+
+diff --git a/bin/auto-cpufreq b/bin/auto-cpufreq
+index b89d925..b73974c 100755
+--- a/bin/auto-cpufreq
++++ b/bin/auto-cpufreq
+@@ -193,31 +193,7 @@
+         elif remove:
+             print("remove is disabled in the nix package")
+         elif update:
+-            root_check()
+-            if os.getenv("PKG_MARKER") == "SNAP":
+-                print("Detected auto-cpufreq was installed using snap")
+-                # refresh snap directly using this command
+-
+-                print("Please update using snap package manager, i.e: `sudo snap refresh auto-cpufreq`.")
+-                #check for AUR 
+-            elif subprocess.run(["bash", "-c", "command -v yay >/dev/null 2>&1"]).returncode == 0 or subprocess.run(["bash", "-c", "command -v pacman >/dev/null 2>&1"]).returncode == 0:
+-                print("Arch-based distribution with AUR support detected. Please refresh auto-cpufreq using your AUR helper.")
+-            else:
+-                verify_update()
+-                ans = input ("Do you want to update auto-cpufreq to the latest release? [y/n]: ")
+-                valid_options = ['y', 'Y', 'yes', 'YES', 'Yes']
+-                if ans.lower() in valid_options:
+-                    remove_daemon()
+-                    remove_complete_msg()
+-                    new_update()
+-                else:
+-                    print("incorrect input\n")
+-                    print("Aborted")
+-                print("enabling daemon")
+-                run(["auto-cpufreq", "--install"])
+-                print("auto-cpufreq is installed with the latest version")
+-                app_version()
+-            
++            print("update is disabled in the nix package")            
+
+
+ if __name__ == "__main__":
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/system/automatic-timezoned/default.nix b/nixpkgs/pkgs/tools/system/automatic-timezoned/default.nix
new file mode 100644
index 000000000000..d0f928f29291
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/automatic-timezoned/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "automatic-timezoned";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "maxbrunet";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-t7AozR3R+msppRnHTPRy3hd2SuCR9NZdg85+FLqSWEc=";
+  };
+
+  cargoHash = "sha256-d+SDI5keZ044LtS/A3K26moFVQngUfNNfr33PipTTg4=";
+
+  meta = with lib; {
+    description = "Automatically update system timezone based on location";
+    homepage = "https://github.com/maxbrunet/automatic-timezoned";
+    changelog = "https://github.com/maxbrunet/automatic-timezoned/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ maxbrunet ];
+    platforms = platforms.linux;
+    mainProgram = "automatic-timezoned";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/awstats/default.nix b/nixpkgs/pkgs/tools/system/awstats/default.nix
new file mode 100644
index 000000000000..e1479e6192cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/awstats/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, fetchurl
+, perlPackages
+, jdk
+}:
+
+perlPackages.buildPerlPackage rec {
+  pname = "awstats";
+  version = "7.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/awstats/${pname}-${version}.tar.gz";
+    sha256 = "sha256-YVF47TE9NDFfFaUi2xpdEsqcOV43hbsGKAq/+V2aBUY=";
+  };
+
+  postPatch = ''
+    substituteInPlace wwwroot/cgi-bin/awstats.pl \
+      --replace /usr/share/awstats/ "$out/wwwroot/cgi-bin/"
+  '';
+
+  outputs = [ "bin" "out" "doc" ]; # bin just links the user-run executable
+
+  propagatedBuildOutputs = [ ]; # otherwise out propagates bin -> cycle
+
+  buildInputs = with perlPackages; [ ]; # plugins will need some
+
+  preConfigure = ''
+    touch Makefile.PL
+    patchShebangs .
+  '';
+
+  # build our own JAR
+  preBuild = ''
+    (
+      cd wwwroot/classes/src
+      rm ../*.jar
+      PATH="${jdk}/bin" "$(type -P perl)" Makefile.pl
+      test -f ../*.jar
+    )
+  '';
+
+  doCheck = false;
+
+  installPhase = ''
+    mkdir "$out"
+    mv wwwroot "$out/wwwroot"
+    rm -r "$out/wwwroot/classes/src/"
+
+    mkdir -p "$out/share/awstats"
+    mv tools "$out/share/awstats/tools"
+
+    mkdir -p "$bin/bin"
+    ln -s "$out/wwwroot/cgi-bin/awstats.pl" "$bin/bin/awstats"
+
+    mkdir -p "$doc/share/doc"
+    mv README.md docs/
+    mv docs "$doc/share/doc/awstats"
+  '';
+
+  meta = with lib; {
+    changelog = "https://www.awstats.org/docs/awstats_changelog.txt";
+    description = "Real-time logfile analyzer to get advanced statistics";
+    homepage = "https://awstats.org";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    mainProgram = "awstats";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/bar/default.nix b/nixpkgs/pkgs/tools/system/bar/default.nix
new file mode 100644
index 000000000000..1109def2bf30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/bar/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "bar";
+  version = "1.11.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/clpbar/clpbar/bar-${version}/bar_${version}.tar.gz";
+    sha256 = "00v5cb6vzizyyhflgr62d3k8dqc0rg6wdgfyyk11c0s0r32mw3zs";
+  };
+
+  meta = {
+    description = "Console progress bar";
+    homepage = "https://clpbar.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.rdnetto ];
+    platforms = lib.platforms.all;
+    mainProgram = "bar";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/bfs/default.nix b/nixpkgs/pkgs/tools/system/bfs/default.nix
new file mode 100644
index 000000000000..db663f46d70e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/bfs/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, libcap, acl, oniguruma, liburing }:
+
+stdenv.mkDerivation rec {
+  pname = "bfs";
+  version = "3.1.1";
+
+  src = fetchFromGitHub {
+    repo = "bfs";
+    owner = "tavianator";
+    rev = version;
+    hash = "sha256-lsVfsNVjFX38YaYVBJWEst3c3RhUCbK2ycteqZZUM3M=";
+  };
+
+  buildInputs = [ oniguruma ] ++ lib.optionals stdenv.isLinux [ libcap acl liburing ];
+
+  # Disable LTO on darwin. See https://github.com/NixOS/nixpkgs/issues/19098
+  preConfigure = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace GNUMakefile --replace "-flto=auto" ""
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  buildFlags = [ "release" ]; # "release" enables compiler optimizations
+
+  meta = with lib; {
+    description = "A breadth-first version of the UNIX find command";
+    longDescription = ''
+      bfs is a variant of the UNIX find command that operates breadth-first rather than
+      depth-first. It is otherwise intended to be compatible with many versions of find.
+    '';
+    homepage = "https://github.com/tavianator/bfs";
+    license = licenses.bsd0;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ yesbox cafkafk ];
+    mainProgram = "bfs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/bottom/default.nix b/nixpkgs/pkgs/tools/system/bottom/default.nix
new file mode 100644
index 000000000000..dfc1ffcd112c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/bottom/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+, bottom
+, testers
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bottom";
+  version = "0.9.6";
+
+  src = fetchFromGitHub {
+    owner = "ClementTsang";
+    repo = pname;
+    rev = version;
+    hash = "sha256-czOYEZevZD7GfExmqwB7vhLXl6+etag1PjZFA2G9aGA=";
+  };
+
+  cargoHash = "sha256-RDOGf1jujZikcRXRtL71BUGgmZyt7vQOTk1LkKpXDuo=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.Foundation
+  ];
+
+  doCheck = false;
+
+  postInstall = ''
+    installManPage target/tmp/bottom/manpage/btm.1
+    installShellCompletion \
+      target/tmp/bottom/completion/btm.{bash,fish} \
+      --zsh target/tmp/bottom/completion/_btm
+  '';
+
+  BTM_GENERATE = true;
+
+  passthru.tests.version = testers.testVersion {
+    package = bottom;
+  };
+
+  meta = with lib; {
+    description = "A cross-platform graphical process/system monitor with a customizable interface";
+    homepage = "https://github.com/ClementTsang/bottom";
+    changelog = "https://github.com/ClementTsang/bottom/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ berbiche figsoda ];
+    mainProgram = "btm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/btop/default.nix b/nixpkgs/pkgs/tools/system/btop/default.nix
new file mode 100644
index 000000000000..e81cc57a514f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/btop/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, config
+, stdenv
+, fetchFromGitHub
+, cmake
+, darwin
+, removeReferencesTo
+, btop
+, testers
+, cudaSupport ? config.cudaSupport
+, cudaPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "btop";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "aristocratos";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Y6agmrqozKiV+GbiY60eOYORRrYLuB1zLNilxzM6oV0=";
+  };
+
+  nativeBuildInputs = [ cmake ] ++ lib.optionals cudaSupport [
+    cudaPackages.autoAddOpenGLRunpathHook
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.CoreFoundation
+    darwin.apple_sdk_11_0.frameworks.IOKit
+  ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    ${removeReferencesTo}/bin/remove-references-to -t ${stdenv.cc.cc} $(readlink -f $out/bin/btop)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = btop;
+  };
+
+  meta = with lib; {
+    description = "A monitor of resources";
+    homepage = "https://github.com/aristocratos/btop";
+    changelog = "https://github.com/aristocratos/btop/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ rmcgibbo ];
+    mainProgram = "btop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/chase/default.nix b/nixpkgs/pkgs/tools/system/chase/default.nix
new file mode 100644
index 000000000000..40f09089fdff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/chase/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl ,pkg-config, libatomic_ops , boehmgc }:
+
+stdenv.mkDerivation rec {
+  pname = "chase";
+  version = "0.5.2";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libatomic_ops boehmgc ] ;
+  src = fetchurl {
+    url = "mirror://debian/pool/main/c/chase/chase_${version}.orig.tar.gz";
+    sha256 = "68d95c2d4dc45553b75790fcea4413b7204a2618dff148116ca9bdb0310d737f";
+  };
+
+  doCheck = true;
+  makeFlags = [ "-e" "LIBS=-lgc" ];
+
+  meta = with lib ; {
+    description = "Follow a symlink and print out its target file";
+    longDescription = ''
+    A commandline program that chases symbolic filesystems links to the original file
+    '';
+    homepage = "https://qa.debian.org/developer.php?login=rotty%40debian.org";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.polyrod ];
+    platforms = platforms.all;
+    mainProgram = "chase";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/clinfo/default.nix b/nixpkgs/pkgs/tools/system/clinfo/default.nix
new file mode 100644
index 000000000000..50e72498bf64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/clinfo/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, ocl-icd, opencl-headers, OpenCL }:
+
+stdenv.mkDerivation rec {
+  pname = "clinfo";
+  version = "3.0.23.01.25";
+
+  src = fetchFromGitHub {
+    owner = "Oblomov";
+    repo = "clinfo";
+    rev = version;
+    sha256 = "sha256-1jZP4SnLIHh3vQJLBp+j/eQ1c8XBGFR2hjYxflhpWAU=";
+  };
+
+  buildInputs = lib.optionals (!stdenv.isDarwin) [
+    ocl-icd
+    opencl-headers
+  ] ++ lib.optionals stdenv.isDarwin [
+    OpenCL
+  ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Print all known information about all available OpenCL platforms and devices in the system";
+    homepage = "https://github.com/Oblomov/clinfo";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ athas r-burns ];
+    platforms = platforms.unix;
+    mainProgram = "clinfo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/cm-rgb/default.nix b/nixpkgs/pkgs/tools/system/cm-rgb/default.nix
new file mode 100644
index 000000000000..adc291d4f85d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/cm-rgb/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, atk
+, gobject-introspection
+, wrapGAppsHook
+, click
+, hidapi
+, psutil
+, pygobject3
+}:
+
+buildPythonApplication rec {
+  pname = "cm-rgb";
+  version = "0.3.6";
+
+  src = fetchFromGitHub {
+    owner = "gfduszynski";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-m0ZAjSLRzcjzygLEbvCiDd7krc1gRqTg1ZV4H/o2c68=";
+  };
+
+  nativeBuildInputs = [
+    atk
+
+    # Populate GI_TYPELIB_PATH
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    click
+    hidapi
+    psutil
+    pygobject3
+  ];
+
+  postInstall = ''
+    mkdir -p $out/etc/udev/rules.d
+    echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0051", TAG+="uaccess"' \
+      > $out/etc/udev/rules.d/60-cm-rgb.rules
+  '';
+
+  meta = with lib; {
+    description = "Control AMD Wraith Prism RGB LEDs";
+    longDescription = ''
+      cm-rgb controls AMD Wraith Prism RGB LEDS.
+
+      To permit non-root accounts to use this utility on
+      NixOS, add this package to <literal>services.udev.packages</literal>
+      in <filename>configuration.nix</filename>.
+    '';
+    homepage = "https://github.com/gfduszynski/cm-rgb";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/collectd/data.nix b/nixpkgs/pkgs/tools/system/collectd/data.nix
new file mode 100644
index 000000000000..52e394db40b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/collectd/data.nix
@@ -0,0 +1,14 @@
+{ stdenv, collectd }:
+
+stdenv.mkDerivation {
+  pname = "collectd-data";
+  inherit (collectd) meta src version;
+
+  dontConfigure = true;
+  dontBuild = true;
+  dontFixup = true;
+
+  installPhase = ''
+    install -Dm444 -t $out/share/collectd/ src/*.{db,conf}
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/system/collectd/default.nix b/nixpkgs/pkgs/tools/system/collectd/default.nix
new file mode 100644
index 000000000000..5dcd85448375
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/collectd/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, fetchurl, fetchpatch, darwin, callPackage
+, autoreconfHook
+, pkg-config
+, libtool
+, nixosTests
+, ...
+}@args:
+let
+  plugins = callPackage ./plugins.nix args;
+in
+stdenv.mkDerivation rec {
+  version = "5.12.0";
+  pname = "collectd";
+
+  src = fetchurl {
+    url = "https://collectd.org/files/${pname}-${version}.tar.bz2";
+    sha256 = "1mh97afgq6qgmpvpr84zngh58m0sl1b4wimqgvvk376188q09bjv";
+  };
+
+  patches = [
+    # fix -t never printing syntax errors
+    # should be included in next release
+    (fetchpatch {
+      url = "https://github.com/collectd/collectd/commit/3f575419e7ccb37a3b10ecc82adb2e83ff2826e1.patch";
+      sha256 = "0jwjdlfl0dp7mlbwygp6h0rsbaqfbgfm5z07lr5l26z6hhng2h2y";
+    })
+    (fetchpatch {
+      name = "no_include_longintrepr.patch";
+      url = "https://github.com/collectd/collectd/commit/623e95394e0e62e7f9ced2104b786d21e9c0bf53.patch";
+      hash = "sha256-0eD7yNW3TWVyNMpLsADhYFDvy6COoCaI0kS1XJrwDgM=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [
+    libtool
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.ApplicationServices
+  ] ++ plugins.buildInputs;
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--disable-werror"
+  ] ++ plugins.configureFlags
+  ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ "--with-fp-layout=nothing" ];
+
+  # do not create directories in /var during installPhase
+  postConfigure = ''
+     substituteInPlace Makefile --replace '$(mkinstalldirs) $(DESTDIR)$(localstatedir)/' '#'
+  '';
+
+  postInstall = ''
+    if [ -d $out/share/collectd/java ]; then
+      mv $out/share/collectd/java $out/share/
+    fi
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = {
+    inherit (nixosTests) collectd;
+  };
+
+  meta = with lib; {
+    description = "Daemon which collects system performance statistics periodically";
+    homepage = "https://collectd.org";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/collectd/plugins.nix b/nixpkgs/pkgs/tools/system/collectd/plugins.nix
new file mode 100644
index 000000000000..9ca18b06203d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/collectd/plugins.nix
@@ -0,0 +1,141 @@
+{ lib, stdenv
+, curl
+, hiredis
+, iptables
+, jdk
+, libatasmart
+, libdbi
+, libesmtp
+, libgcrypt
+, libmemcached, cyrus_sasl
+, libmodbus
+, libmicrohttpd
+, libmnl
+, libmysqlclient
+, libnotify, gdk-pixbuf
+, liboping
+, libpcap
+, libsigrok
+, libvirt
+, libxml2
+, lua
+, lvm2
+, lm_sensors
+, mongoc
+, mosquitto
+, net-snmp
+, openldap
+, openipmi
+, perl
+, postgresql
+, protobufc
+, python3
+, rabbitmq-c
+, rdkafka
+, riemann_c_client
+, rrdtool
+, udev
+, varnish
+, xen
+, yajl
+, IOKit
+# Defaults to `null` for all supported plugins (except xen, which is marked as
+# insecure), otherwise a list of plugin names for a custom build
+, enabledPlugins ? null
+, ...
+}:
+
+let
+  # Plugins that have dependencies.
+  # Please help to extend these!
+  plugins = {
+    amqp.buildInputs = [
+      yajl
+    ] ++ lib.optionals stdenv.isLinux [ rabbitmq-c ];
+    apache.buildInputs = [ curl ];
+    ascent.buildInputs = [ curl libxml2 ];
+    battery.buildInputs = lib.optionals stdenv.isDarwin [
+      IOKit
+    ];
+    bind.buildInputs = [ curl libxml2 ];
+    ceph.buildInputs = [ yajl ];
+    curl.buildInputs = [ curl ];
+    curl_json.buildInputs = [ curl yajl ];
+    curl_xml.buildInputs = [ curl libxml2 ];
+    dbi.buildInputs = [ libdbi ];
+    disk.buildInputs = lib.optionals stdenv.isLinux [
+      udev
+    ] ++ lib.optionals stdenv.isDarwin [
+      IOKit
+    ];
+    dns.buildInputs = [ libpcap ];
+    ipmi.buildInputs = [ openipmi ];
+    iptables.buildInputs = [
+      libpcap
+    ] ++ lib.optionals stdenv.isLinux [
+      iptables libmnl
+    ];
+    java.buildInputs = [ jdk libgcrypt libxml2 ];
+    log_logstash.buildInputs = [ yajl ];
+    lua.buildInputs = [ lua ];
+    memcachec.buildInputs = [ libmemcached cyrus_sasl ];
+    modbus.buildInputs = lib.optionals stdenv.isLinux [ libmodbus ];
+    mqtt.buildInputs = [ mosquitto ];
+    mysql.buildInputs = lib.optionals (libmysqlclient != null) [
+      libmysqlclient
+    ];
+    netlink.buildInputs = [
+      libpcap
+    ] ++ lib.optionals stdenv.isLinux [
+      libmnl
+    ];
+    network.buildInputs = [ libgcrypt ];
+    nginx.buildInputs = [ curl ];
+    notify_desktop.buildInputs = [ libnotify gdk-pixbuf ];
+    notify_email.buildInputs = [ libesmtp ];
+    openldap.buildInputs = [ openldap ];
+    ovs_events.buildInputs = [ yajl ];
+    ovs_stats.buildInputs = [ yajl ];
+    perl.buildInputs = [ perl ];
+    pinba.buildInputs = [ protobufc ];
+    ping.buildInputs = [ liboping ];
+    postgresql.buildInputs = [ postgresql ];
+    python.buildInputs = [ python3 ];
+    redis.buildInputs = [ hiredis ];
+    rrdcached.buildInputs = [ rrdtool libxml2 ];
+    rrdtool.buildInputs = [ rrdtool libxml2 ];
+    sensors.buildInputs = lib.optionals stdenv.isLinux [ lm_sensors ];
+    sigrok.buildInputs = lib.optionals stdenv.isLinux [ libsigrok udev ];
+    smart.buildInputs = lib.optionals stdenv.isLinux [ libatasmart udev ];
+    snmp.buildInputs = lib.optionals stdenv.isLinux [ net-snmp ];
+    snmp_agent.buildInputs = lib.optionals stdenv.isLinux [ net-snmp ];
+    varnish.buildInputs = [ curl varnish ];
+    virt.buildInputs = [
+      libvirt libxml2 yajl
+    ] ++ lib.optionals stdenv.isLinux [ lvm2 udev ];
+    write_http.buildInputs = [ curl yajl ];
+    write_kafka.buildInputs = [ yajl rdkafka ];
+    write_log.buildInputs = [ yajl ];
+    write_mongodb.buildInputs = [ mongoc ];
+    write_prometheus.buildInputs = [ protobufc libmicrohttpd ];
+    write_redis.buildInputs = [ hiredis ];
+    write_riemann.buildInputs = [ protobufc riemann_c_client ];
+    xencpu.buildInputs = [ xen ];
+  };
+
+  configureFlags = lib.optionals (enabledPlugins != null) (
+    [ "--disable-all-plugins" ]
+    ++ (map (plugin: "--enable-${plugin}") enabledPlugins));
+
+  pluginBuildInputs = plugin:
+    lib.optionals (plugins ? ${plugin} && plugins.${plugin} ? buildInputs)
+    plugins.${plugin}.buildInputs;
+
+  buildInputs =
+    if enabledPlugins == null
+    then builtins.concatMap pluginBuildInputs
+      (builtins.attrNames (builtins.removeAttrs plugins ["xencpu"]))
+    else builtins.concatMap pluginBuildInputs enabledPlugins;
+in {
+  inherit configureFlags buildInputs;
+}
diff --git a/nixpkgs/pkgs/tools/system/colorls/Gemfile b/nixpkgs/pkgs/tools/system/colorls/Gemfile
new file mode 100644
index 000000000000..0d41bd279ccb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/colorls/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'colorls'
diff --git a/nixpkgs/pkgs/tools/system/colorls/Gemfile.lock b/nixpkgs/pkgs/tools/system/colorls/Gemfile.lock
new file mode 100644
index 000000000000..29f4e6bd87da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/colorls/Gemfile.lock
@@ -0,0 +1,27 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.8.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    clocale (0.0.4)
+    colorls (1.4.6)
+      addressable (~> 2.7)
+      clocale (~> 0)
+      filesize (~> 0)
+      manpages (~> 0)
+      rainbow (>= 2.2, < 4.0)
+      unicode-display_width (>= 1.7, < 3.0)
+    filesize (0.2.0)
+    manpages (0.6.1)
+    public_suffix (4.0.7)
+    rainbow (3.1.1)
+    unicode-display_width (2.1.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  colorls
+
+BUNDLED WITH
+   2.3.9
diff --git a/nixpkgs/pkgs/tools/system/colorls/default.nix b/nixpkgs/pkgs/tools/system/colorls/default.nix
new file mode 100644
index 000000000000..3dc460140cb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/colorls/default.nix
@@ -0,0 +1,19 @@
+{ lib, bundlerApp, ruby, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "colorls";
+
+  gemdir = ./.;
+  exes = [ "colorls" ];
+
+  passthru.updateScript = bundlerUpdateScript "colorls";
+
+  meta = with lib; {
+    description = "Prettified LS";
+    homepage    = "https://github.com/athityakumar/colorls";
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ lukebfox nicknovitski cbley ];
+    platforms   = ruby.meta.platforms;
+    mainProgram = "colorls";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/colorls/gemset.nix b/nixpkgs/pkgs/tools/system/colorls/gemset.nix
new file mode 100644
index 000000000000..ca9db9cb250d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/colorls/gemset.nix
@@ -0,0 +1,84 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  clocale = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "065pb7hzmd6zndbln4ag94bjpw3hsm71jagsgiqskpxhgrbq03jz";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  colorls = {
+    dependencies = ["addressable" "clocale" "filesize" "manpages" "rainbow" "unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16r9c61lamjiig4rxfx1rs0bagqq8lbz88vf1250zkvq4fdk93p9";
+      type = "gem";
+    };
+    version = "1.4.6";
+  };
+  filesize = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17p7rf1x7h3ivaznb4n4kmxnnzj25zaviryqgn2n12v2kmibhp8g";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  manpages = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11p6ilnfda6af15ks3xiz2pr0hkvdvadnk1xm4ahqlf84dld3fnd";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f3knlwfwm05sfbaihrxm4g772b79032q14c16q4b38z8bi63qcb";
+      type = "gem";
+    };
+    version = "4.0.7";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0csjm9shhfik0ci9mgimb7hf3xgh7nx45rkd9rzgdz6vkwr8rzxn";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/confd/default.nix b/nixpkgs/pkgs/tools/system/confd/default.nix
new file mode 100644
index 000000000000..bdbba9bc9f21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/confd/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "confd";
+  version = "0.16.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/kelseyhightower/confd";
+  subPackages = [ "./" ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "kelseyhightower";
+    repo = "confd";
+    sha256 = "0q7r6dkgirnmqi3rhqdaai88jqzw52l6jdrrwsf2qq0hva09961p";
+  };
+
+  meta = {
+    description = "Manage local application configuration files using templates and data from etcd or consul";
+    homepage = "https://github.com/kelseyhightower/confd";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.zimbatm ];
+    mainProgram = "confd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/consul-template/default.nix b/nixpkgs/pkgs/tools/system/consul-template/default.nix
new file mode 100644
index 000000000000..ea25b0cb1955
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/consul-template/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, nixosTests }:
+
+buildGoModule rec {
+  pname = "consul-template";
+  version = "0.36.0";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "consul-template";
+    rev = "v${version}";
+    hash = "sha256-qhncff3DAJ3fiLJRVVcRZpDmzFEQI5J1cFXnlyUJRRs=";
+  };
+
+  vendorHash = "sha256-nOxdhVEMepZMq51M6MDIyTxBYThrwrT0C0wdwzsjoPI=";
+
+  # consul-template tests depend on vault and consul services running to
+  # execute tests so we skip them here
+  doCheck = false;
+
+  passthru.tests = {
+    inherit (nixosTests) consul-template;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/hashicorp/consul-template/";
+    description = "Generic template rendering and notifications with Consul";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ cpcloud pradeepchhetri ];
+    mainProgram = "consul-template";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/cron/default.nix b/nixpkgs/pkgs/tools/system/cron/default.nix
new file mode 100644
index 000000000000..8f8421781e36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/cron/default.nix
@@ -0,0 +1,49 @@
+{lib, stdenv, fetchurl, vim, sendmailPath ? "/usr/sbin/sendmail"}:
+
+stdenv.mkDerivation rec {
+  pname = "cron";
+  version = "4.1";
+
+  src = fetchurl {
+    url = "ftp://ftp.isc.org/isc/cron/cron_${version}.shar";
+    sha256 = "16n3dras4b1jh7g958nz1k54pl9pg5fwb3fvjln8z67varvq6if4";
+  };
+
+  unpackCmd = "(mkdir cron && cd cron && sh $curSrc)";
+
+  hardeningEnable = [ "pie" ];
+
+  preBuild = ''
+    # do not set sticky bit in /nix/store
+    substituteInPlace Makefile --replace ' -o root' ' ' --replace 111 755 --replace 4755 0755
+    # do not strip during install, broken on cross and we'll do ourselves as needed
+    substituteInPlace Makefile --replace ' -s cron' ' cron'
+    makeFlags="DESTROOT=$out CC=$CC"
+
+    # We want to ignore the $glibc/include/paths.h definition of
+    # sendmail path.
+    # Also set a usable default PATH (#16518).
+    cat >> pathnames.h <<__EOT__
+    #undef _PATH_SENDMAIL
+    #define _PATH_SENDMAIL "${sendmailPath}"
+
+    #undef _PATH_VI
+    #define _PATH_VI "${vim}/bin/vim"
+
+    #undef _PATH_DEFPATH
+    #define _PATH_DEFPATH "/run/wrappers/bin:/nix/var/nix/profiles/default/bin:/run/current-system/sw/bin:/usr/bin:/bin"
+    __EOT__
+
+    # Implicit saved uids do not work here due to way NixOS uses setuid wrappers
+    # (#16518).
+    echo "#undef HAVE_SAVED_UIDS" >> externs.h
+  '';
+
+  preInstall = "mkdir -p $out/bin $out/sbin $out/share/man/man1 $out/share/man/man5 $out/share/man/man8";
+
+  meta = with lib; {
+    description = "Daemon for running commands at specific times (Vixie Cron)";
+    license = licenses.bsd0;
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ctop/default.nix b/nixpkgs/pkgs/tools/system/ctop/default.nix
new file mode 100644
index 000000000000..6cf30afa3fd7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ctop/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ctop";
+  version = "0.7.7";
+
+  src = fetchFromGitHub {
+    owner = "bcicen";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-tojSzgpoGQg6MwV/MVpQpCA5w6bZO+9IOvfkw0Ydr6c=";
+  };
+
+  vendorHash = "sha256-UAja7XuoLqJFNcK1PgHGcuf/HbvSrWyRvW2D3T7Hg0g=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" "-X main.build=v${version}" ];
+
+  meta = with lib; {
+    description = "Top-like interface for container metrics";
+    homepage = "https://ctop.sh/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ apeyroux marsam ];
+    mainProgram = "ctop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/daemon/default.nix b/nixpkgs/pkgs/tools/system/daemon/default.nix
new file mode 100644
index 000000000000..0a7b57934717
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/daemon/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "daemon";
+  version = "0.8.4";
+
+  src = fetchurl {
+    url = "http://libslack.org/daemon/download/daemon-${version}.tar.gz";
+    sha256 = "sha256-+iiFmtNBywoLASwRwnGBT4cEggE7SfcQYAMh03mIfNE=";
+  };
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ];
+
+  buildInputs = [ perl ];
+
+  meta = with lib; {
+    description = "Turns other processes into daemons";
+    longDescription = ''
+      Daemon turns other process into daemons. There are many tasks that need
+      to be performed to correctly set up a daemon process. This can be tedious.
+      Daemon performs these tasks for other processes. This is useful for
+      writing daemons in languages other than C, C++ or Perl (e.g. /bin/sh,
+      Java).
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.sander ];
+    platforms = platforms.unix;
+    mainProgram = "daemon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/daemonize/default.nix b/nixpkgs/pkgs/tools/system/daemonize/default.nix
new file mode 100644
index 000000000000..3a1340e606d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/daemonize/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "daemonize";
+  version = "1.7.8";
+
+  src = fetchFromGitHub {
+    owner = "bmc";
+    repo = "daemonize";
+    rev = "release-${version}";
+    sha256 = "1e6LZXf/lK7sB2CbXwOg7LOi0Q8IBQNAa4d7rX0Ej3A=";
+  };
+
+  meta = with lib; {
+    description = "Runs a command as a Unix daemon";
+    homepage = "http://software.clapper.org/daemonize/";
+    license = licenses.bsd3;
+    platforms = with platforms; linux ++ freebsd ++ darwin;
+    mainProgram = "daemonize";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/das_watchdog/default.nix b/nixpkgs/pkgs/tools/system/das_watchdog/default.nix
new file mode 100644
index 000000000000..ec7eb2b173d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/das_watchdog/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, libgtop, xmessage, which, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "das_watchdog";
+  version = "unstable-2015-09-12";
+
+  src = fetchFromGitHub {
+    owner = "kmatheussen";
+    repo = "das_watchdog";
+    rev = "5ac0db0b98e5b4e690aca0aa7fb6ec60ceddcb06";
+    sha256 = "sha256-eacUn/gYCEHtHdQf3lBPYvY3kfN3Bik7AolAPpbbwQs=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libgtop xmessage which ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp das_watchdog $out/bin/
+    cp test_rt $out/bin/
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/kmatheussen/das_watchdog";
+    description = "A general watchdog for the linux operating system";
+    longDescription = ''
+      It should run in the background at all times to ensure a realtime process
+      won't hang the machine.";
+    '';
+    license = licenses.free;
+    maintainers = [ maintainers.magnetophon ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/datefudge/default.nix b/nixpkgs/pkgs/tools/system/datefudge/default.nix
new file mode 100644
index 000000000000..8c3ca0dc2b40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/datefudge/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchgit, makeWrapper, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "datefudge";
+  version = "1.26";
+
+  src = fetchgit {
+    url = "https://salsa.debian.org/debian/${pname}.git";
+    rev = "debian/${version}";
+    sha256 = "sha256-CVy5mOX3jNM1cNIn8HhVs8Mhh70pkz9pG08muFuPNfk=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ coreutils ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+     --replace "/usr" "/" \
+     --replace "-o root -g root" ""
+    substituteInPlace datefudge.sh \
+     --replace "@LIBDIR@" "$out/lib/"
+  '';
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    chmod +x $out/lib/datefudge/datefudge.so
+    wrapProgram $out/bin/datefudge --prefix PATH : ${coreutils}/bin
+  '';
+
+  meta = with lib; {
+    description = "Fake the system date";
+    longDescription = ''
+      datefudge is a small utility that pretends that the system time is
+      different by pre-loading a small library which modifies the time,
+      gettimeofday and clock_gettime system calls.
+    '';
+    homepage = "https://packages.qa.debian.org/d/datefudge.html";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ leenaars ];
+    mainProgram = "datefudge";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dcfldd/default.nix b/nixpkgs/pkgs/tools/system/dcfldd/default.nix
new file mode 100644
index 000000000000..395b4431acee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dcfldd/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dcfldd";
+  version = "1.3.4-1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dcfldd/dcfldd-${version}.tar.gz";
+    sha256 = "1y6mwsvm75f5jzxsjjk0yhf8xnpmz6y8qvcxfandavx59lc3l57m";
+  };
+
+  buildInputs = [ ];
+
+  meta = with lib; {
+    description = "An enhanced version of GNU dd";
+
+    homepage = "https://dcfldd.sourceforge.net/";
+
+    license = licenses.gpl2;
+
+    platforms = platforms.all;
+    maintainers = with maintainers; [ qknight ];
+    mainProgram = "dcfldd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dd_rescue/default.nix b/nixpkgs/pkgs/tools/system/dd_rescue/default.nix
new file mode 100644
index 000000000000..f7501d768034
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dd_rescue/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, autoconf }:
+
+stdenv.mkDerivation rec {
+  version = "1.99.8";
+  pname = "dd_rescue";
+
+  src = fetchurl {
+    sha256 = "1gbxm8gr9sx5g1q9dycs21hkxikcy97q09lp1lvs59pnd9qpdnwh";
+    url="http://www.garloff.de/kurt/linux/ddrescue/${pname}-${version}.tar.bz2";
+  };
+
+  dd_rhelp_src = fetchurl {
+    url = "http://www.kalysto.org/pkg/dd_rhelp-0.3.0.tar.gz";
+    sha256 = "0br6fs23ybmic3i5s1w4k4l8c2ph85ax94gfp2lzjpxbvl73cz1g";
+  };
+
+  buildInputs = [ autoconf ];
+
+  preBuild = ''
+    substituteInPlace Makefile \
+      --replace "\$(DESTDIR)/usr" "$out" \
+      --replace "-o root" "" \
+      --replace "-g root" ""
+  '';
+  makeFlags = [ "LIBDIR=$out" ];
+
+  postInstall = ''
+    mkdir -p "$out/share/dd_rescue" "$out/bin"
+    tar xf "${dd_rhelp_src}" -C "$out/share/dd_rescue"
+    cp "$out/share/dd_rescue"/dd_rhelp*/dd_rhelp "$out/bin"
+  '';
+
+  meta = with lib; {
+    description = "A tool to copy data from a damaged block device";
+    maintainers = with maintainers; [ raskin domenkozar ];
+    platforms = platforms.linux;
+    homepage = "http://www.garloff.de/kurt/linux/ddrescue/";
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ddh/default.nix b/nixpkgs/pkgs/tools/system/ddh/default.nix
new file mode 100644
index 000000000000..33618da36376
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ddh/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, rustPlatform, ... }:
+rustPlatform.buildRustPackage rec {
+  pname = "ddh";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "darakian";
+    repo = pname;
+    rev = version;
+    sha256 = "XFfTpX4c821pcTAJZFUjdqM940fRoBwkJC6KTknXtCw=";
+  };
+
+  cargoSha256 = "6yPDkbag81TZ4k72rbmGT6HWKdGK4yfKxjGNFKEWXPI=";
+
+  meta = with lib; {
+    description = "A fast duplicate file finder";
+    longDescription = ''
+      DDH traverses input directories and their subdirectories.
+      It also hashes files as needed and reports findings.
+    '';
+    homepage = "https://github.com/darakian/ddh";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ h7x4 ];
+    platforms = platforms.all;
+    mainProgram = "ddh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ddrescue/default.nix b/nixpkgs/pkgs/tools/system/ddrescue/default.nix
new file mode 100644
index 000000000000..2b5e7e7bd33e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ddrescue/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv
+, fetchurl, lzip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ddrescue";
+  version = "1.28";
+
+  src = fetchurl {
+    url = "mirror://gnu/ddrescue/ddrescue-${version}.tar.lz";
+    sha256 = "sha256-ZibAenyhzB0DytCVhSLFJ5sVYiLTLDQugRF8/vrrEME=";
+  };
+
+  nativeBuildInputs = [ lzip ];
+
+  doCheck = true; # not cross;
+  configureFlags = [ "CXX=${stdenv.cc.targetPrefix}c++" ];
+
+  meta = with lib; {
+    description = "GNU ddrescue, a data recovery tool";
+
+    longDescription =
+      '' GNU ddrescue is a data recovery tool.  It copies data from one file
+         or block device (hard disc, cdrom, etc) to another, trying hard to
+         rescue data in case of read errors.
+
+         The basic operation of ddrescue is fully automatic.  That is, you
+         don't have to wait for an error, stop the program, read the log, run
+         it in reverse mode, etc.
+
+         If you use the logfile feature of ddrescue, the data is rescued very
+         efficiently (only the needed blocks are read).  Also you can
+         interrupt the rescue at any time and resume it later at the same
+         point.
+
+         Automatic merging of backups: If you have two or more damaged copies
+         of a file, cdrom, etc, and run ddrescue on all of them, one at a
+         time, with the same output file, you will probably obtain a complete
+         and error-free file.  This is so because the probability of having
+         damaged areas at the same places on different input files is very
+         low.  Using the logfile, only the needed blocks are read from the
+         second and successive copies.
+      '';
+
+    homepage = "https://www.gnu.org/software/ddrescue/ddrescue.html";
+
+    license = licenses.gpl3Plus;
+
+    platforms = platforms.all;
+    maintainers = with maintainers; [ domenkozar fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ddrescueview/default.nix b/nixpkgs/pkgs/tools/system/ddrescueview/default.nix
new file mode 100644
index 000000000000..3576c0eb6537
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ddrescueview/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchurl, fpc, lazarus, atk, cairo, gdk-pixbuf, glib, gtk2, libX11, pango }:
+
+stdenv.mkDerivation rec {
+  pname = "ddrescueview";
+  version = "0.4.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ddrescueview/ddrescueview-source-${version}.tar.xz";
+    sha256 = "sha256-Vzg8OU5iYSzip5lDiwDG48Rlwx+bqUDgd/Yk4ucChGU=";
+  };
+  sourceRoot = "ddrescueview-source-${version}/source";
+
+  nativeBuildInputs = [ fpc lazarus ];
+
+  buildInputs = [ atk cairo gdk-pixbuf glib gtk2 libX11 pango ];
+
+  NIX_LDFLAGS = "--as-needed -rpath ${lib.makeLibraryPath buildInputs}";
+
+  buildPhase = ''
+    lazbuild --lazarusdir=${lazarus}/share/lazarus ddrescueview.lpi
+  '';
+
+  installPhase = ''
+    install -Dt $out/bin ddrescueview
+    cd ../resources/linux
+    mkdir -p "$out/share"
+    cp -ar applications icons man $out/share
+  '';
+
+  meta = with lib; {
+    description = "A tool to graphically examine ddrescue mapfiles";
+    homepage = "https://sourceforge.net/projects/ddrescueview/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+    mainProgram = "ddrescueview";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ddrutility/default.nix b/nixpkgs/pkgs/tools/system/ddrutility/default.nix
new file mode 100644
index 000000000000..fc81c35fa462
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ddrutility/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ddrutility";
+  version = "2.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ddrutility/${pname}-${version}.tar.gz";
+    sha256 = "023g7f2sfv5cqk3iyss4awrw3b913sy5423mn5zvlyrri5hi2cac";
+  };
+
+  postPatch = ''
+    substituteInPlace makefile --replace /usr/local ""
+  '';
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: /build/ccltHly5.o:(.bss+0x119f8): multiple definition of `start_time'; /build/cc9evx3L.o:(.bss+0x10978): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    description = "A set of utilities for hard drive data rescue";
+    homepage = "https://sourceforge.net/projects/ddrutility/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dell-command-configure/default.nix b/nixpkgs/pkgs/tools/system/dell-command-configure/default.nix
new file mode 100644
index 000000000000..c029a9877337
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dell-command-configure/default.nix
@@ -0,0 +1,108 @@
+{
+  stdenv,
+  lib,
+  fetchurl,
+  dpkg,
+  autoPatchelfHook,
+  patchelfUnstable,
+  openssl,
+}:
+
+# Use techniques described in https://web.archive.org/web/20220904051329/https://tapesoftware.net/replace-symbol/
+
+# Adapted from https://github.com/KenMacD/etc-nixos/blob/d3d28085586358a62b2bb4b427eb21aad05b5b23/dcc/default.nix
+
+# Used https://github.com/NixOS/nixpkgs/pull/84926 as a template
+# then converted to use autoPatchelfHook instead, and link with
+# the dependencies from other pkgs.
+
+let
+  version = "4.8.0-494";
+
+  unpacked = stdenv.mkDerivation rec {
+    inherit version;
+    pname = "dell-command-configure-unpacked";
+
+    src = fetchurl {
+      url =
+        "https://dl.dell.com/FOLDER08911312M/1/command-configure_${version}.ubuntu20_amd64.tar.gz";
+      # The CDN blocks the Curl user-agent, so set to blank instead.
+      curlOpts = ''-A=""'';
+      hash = "sha256-l5oHgDkFBF6llNsHufTmuDzjkhGmXHYXlOJ4hvZfRoE=";
+    };
+
+    dontBuild = true;
+
+    nativeBuildInputs = [ dpkg ];
+
+    unpackPhase = ''
+      tar -xzf ${src}
+      dpkg-deb -x command-configure_${version}.ubuntu20_amd64.deb command-configure
+      dpkg-deb -x srvadmin-hapi_9.5.0_amd64.deb srvadmin-hapi
+    '';
+
+    installPhase = ''
+      mkdir $out
+      cp -r . $out
+    '';
+  };
+
+  # Contains a fopen() wrapper for finding the firmware package
+  wrapperLibName = "wrapper-lib.so";
+  wrapperLib = stdenv.mkDerivation {
+    pname = "dell-command-configure-unpacked-wrapper-lib";
+    inherit version;
+
+    src = ./.;
+
+    postPatch = ''
+      ls -al
+      substitute wrapper-lib.c lib.c \
+        --subst-var-by to "${unpacked}/srvadmin-hapi/opt/dell/srvadmin/etc/omreg.d/omreg-hapi.cfg"
+      cc -fPIC -shared lib.c -o ${wrapperLibName}
+    '';
+    installPhase = ''
+      install -D ${wrapperLibName} -t $out/lib
+    '';
+  };
+
+in stdenv.mkDerivation rec {
+  inherit version;
+  pname = "dell-command-configure";
+
+  buildInputs = [ openssl stdenv.cc.cc.lib ];
+  nativeBuildInputs = [ autoPatchelfHook ];
+  dontConfigure = true;
+
+  src = unpacked;
+
+  installPhase = ''
+    install -D -t $out/lib -m644 -v command-configure/opt/dell/dcc/libhapiintf.so
+    install -D -t $out/lib -m644 -v command-configure/opt/dell/dcc/libsmbios_c.so.2
+    install -D -t $out/bin -m755 -v command-configure/opt/dell/dcc/cctk
+    install -D -t $out/bin -m755 -v srvadmin-hapi/opt/dell/srvadmin/sbin/dchcfg
+    for lib in $(find srvadmin-hapi/opt/dell/srvadmin/lib64 -type l); do
+        install -D -t $out/lib -m644 -v $lib
+    done
+  '';
+
+  postFixup = ''
+    echo fopen fopen_wrapper > fopen_name_map
+    echo access access_wrapper > access_name_map
+    ${patchelfUnstable}/bin/patchelf \
+      --rename-dynamic-symbols fopen_name_map \
+      --rename-dynamic-symbols access_name_map \
+      --add-needed ${wrapperLibName} \
+      --set-rpath ${lib.makeLibraryPath [ wrapperLib ]} \
+      $out/lib/*
+  '';
+
+  meta = with lib; {
+    description = "Configure BIOS settings on Dell laptops";
+    homepage =
+      "https://www.dell.com/support/article/us/en/19/sln311302/dell-command-configure";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ ryangibb ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dell-command-configure/wrapper-lib.c b/nixpkgs/pkgs/tools/system/dell-command-configure/wrapper-lib.c
new file mode 100755
index 000000000000..f93bcd58ab75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dell-command-configure/wrapper-lib.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <string.h>
+
+static const char from[] =  "/usr/lib/ext/dell/omreg.cfg";
+static const char to[] = "@to@";
+
+int access_wrapper(const char *fn, int mode)
+{
+	if (!strcmp(fn, from)) {
+		printf("access_wrapper.c: Replacing path '%s' with '%s'\n", from, to);
+		fn = to;
+	}
+	return access(fn, mode);
+}
+
+FILE* fopen_wrapper(const char* fn, const char* mode)
+{
+	if (!strcmp(fn, from)) {
+		printf("fopen_wrapper.c: Replacing path '%s' with '%s'\n", from, to);
+		fn = to;
+	}
+	return fopen(fn, mode);
+}
diff --git a/nixpkgs/pkgs/tools/system/dfc/default.nix b/nixpkgs/pkgs/tools/system/dfc/default.nix
new file mode 100644
index 000000000000..0ad1d745b066
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dfc/default.nix
@@ -0,0 +1,22 @@
+{lib, stdenv, fetchurl, cmake, gettext}:
+
+stdenv.mkDerivation rec {
+  pname = "dfc";
+  version = "3.1.1";
+
+  src = fetchurl {
+    url = "https://projects.gw-computing.net/attachments/download/615/${pname}-${version}.tar.gz";
+    sha256 = "0m1fd7l85ckb7bq4c5c3g257bkjglm8gq7x42pkmpp87fkknc94n";
+  };
+
+  nativeBuildInputs = [ cmake gettext ];
+
+  meta = {
+    homepage = "https://projects.gw-computing.net/projects/dfc";
+    description = "Displays file system space usage using graphs and colors";
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [qknight];
+    platforms = lib.platforms.all;
+    mainProgram = "dfc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dfrs/default.nix b/nixpkgs/pkgs/tools/system/dfrs/default.nix
new file mode 100644
index 000000000000..002e421900b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dfrs/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dfrs";
+  version = "0.0.7";
+
+  src = fetchFromGitHub {
+    owner = "anthraxx";
+    repo = pname;
+    rev = version;
+    sha256 = "01h00328kbw83q11yrsvcly69p0hql3kw49b4jx6gwkrdm8c2amk";
+  };
+
+  cargoSha256 = "1dgmn4g35yc7hwnxznkrpwnikn329nc0z8y7bxlcd308k1v83919";
+
+  meta = with lib; {
+    description = "Display file system space usage using graphs and colors";
+    homepage = "https://github.com/anthraxx/dfrs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wamserma ];
+    mainProgram = "dfrs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/di/default.nix b/nixpkgs/pkgs/tools/system/di/default.nix
new file mode 100644
index 000000000000..06d91305909c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/di/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "di";
+  version = "4.48.0.1";
+
+  src = fetchurl {
+    url = "https://gentoo.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-YFCFRDGeq2h/UXKme/NnnCuFdtw2Vim6Y3SbytaItGc=";
+  };
+
+  makeFlags = [ "INSTALL_DIR=$(out)" ];
+
+  meta = with lib; {
+    description = "Disk information utility; displays everything 'df' does and more";
+    homepage = "https://gentoo.com/di/";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ manveru ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dog/default.nix b/nixpkgs/pkgs/tools/system/dog/default.nix
new file mode 100644
index 000000000000..b8ed50c0c63e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dog/default.nix
@@ -0,0 +1,34 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "dog";
+  version = "1.7";
+
+  src = fetchurl {
+    url = "http://archive.debian.org/debian/pool/main/d/dog/dog_${version}.orig.tar.gz";
+    sha256 = "3ef25907ec5d1dfb0df94c9388c020b593fbe162d7aaa9bd08f35d2a125af056";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "gcc" "$CC"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    mkdir -p $out/man/man1
+    cp dog.1 $out/man/man1
+    cp dog $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://lwn.net/Articles/421072/";
+    description = "cat replacement";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ qknight ];
+    platforms = platforms.all;
+    mainProgram = "dog";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dool/default.nix b/nixpkgs/pkgs/tools/system/dool/default.nix
new file mode 100644
index 000000000000..b312e0a363c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dool/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dool";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "scottchiefbaker";
+    repo = "dool";
+    rev = "v${version}";
+    hash = "sha256-g74XyNtNdYf2qTCFBWIVZ3LhngDln/yu3bRJzO890JU=";
+  };
+
+  buildInputs = [
+    python3
+  ];
+
+  makeFlags = [
+    "prefix=$(out)"
+  ];
+
+  # fix the plugins directory
+  postPatch = ''
+    substituteInPlace dool \
+      --replace \
+        "os.path.abspath(os.path.dirname(sys.argv[0])) + '/plugins/'" \
+        "'$out/share/dool/'"
+  '';
+
+  meta = with lib; {
+    description = "Python3 compatible clone of dstat";
+    homepage = "https://github.com/scottchiefbaker/dool";
+    changelog = "https://github.com/scottchiefbaker/dool/blob/${src.rev}/ChangeLog";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+    platforms = platforms.unix;
+    mainProgram = "dool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/efibootmgr/default.nix b/nixpkgs/pkgs/tools/system/efibootmgr/default.nix
new file mode 100644
index 000000000000..1eda5cbbce55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/efibootmgr/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, efivar, popt }:
+
+stdenv.mkDerivation rec {
+  pname = "efibootmgr";
+  version = "18";
+
+  src = fetchFromGitHub {
+    owner = "rhboot";
+    repo = "efibootmgr";
+    rev = version;
+    hash = "sha256-DYYQGALEn2+mRHgqCJsA7OQCF7xirIgQlWexZ9uoKcg=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ efivar popt ];
+
+  makeFlags = [
+    "EFIDIR=nixos"
+    "PKG_CONFIG=${stdenv.cc.targetPrefix}pkg-config"
+  ];
+
+  installFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "A Linux user-space application to modify the Intel Extensible Firmware Interface (EFI) Boot Manager";
+    homepage = "https://github.com/rhboot/efibootmgr";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/efivar/default.nix b/nixpkgs/pkgs/tools/system/efivar/default.nix
new file mode 100644
index 000000000000..9ddb83ca5e36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/efivar/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, buildPackages, fetchFromGitHub, fetchpatch, pkg-config, popt, mandoc }:
+
+stdenv.mkDerivation rec {
+  pname = "efivar";
+  version = "38";
+
+  outputs = [ "bin" "out" "dev" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "rhinstaller";
+    repo = "efivar";
+    rev = version;
+    hash = "sha256-A38BKGMK3Vo+85wzgxmzTjzZXtpcY9OpbZaONWnMYNk=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/rhboot/efivar/commit/15622b7e5761f3dde3f0e42081380b2b41639a48.patch";
+      sha256 = "sha256-SjZXj0hA2eQu2MfBoNjFPtd2DMYadtL7ZqwjKSf2cmI=";
+    })
+    # src/Makefile: build util.c separately for makeguids
+    # util.c needs to be built twice when cross-compiling
+    (fetchpatch {
+      url = "https://github.com/rhboot/efivar/commit/ca48d3964d26f5e3b38d73655f19b1836b16bd2d.patch";
+      hash = "sha256-DkNFIK4i7Eypyf2UeK7qHW36N2FSVRJ2rnOVLriWi5c=";
+    })
+    (fetchpatch {
+      name = "musl-backport.patch";
+      url = "https://github.com/rhboot/efivar/commit/cece3ffd5be2f8641eb694513f2b73e5eb97ffd3.patch";
+      sha256 = "7/E0gboU0A45/BY6jGPLuvds6qKtNjzpgKgdNTaVaZQ=";
+    })
+
+    # Fix build against gcc-13: https://github.com/rhboot/efivar/pull/242
+    (fetchpatch {
+      name = "gcc-13.patch";
+      url = "https://github.com/rhboot/efivar/commit/52fece47d4f3ebd588bd85598bfc7a0142365f7e.patch";
+      hash = "sha256-tOmxbY7kD6kzbBZ2RhQ5gCCpHtu+2gRNa7VUAWdCKu0=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config mandoc ];
+  buildInputs = [ popt ];
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  makeFlags = [
+    "prefix=$(out)"
+    "libdir=$(out)/lib"
+    "bindir=$(bin)/bin"
+    "mandir=$(man)/share/man"
+    "includedir=$(dev)/include"
+    "PCDIR=$(dev)/lib/pkgconfig"
+  ];
+
+  meta = with lib; {
+    description = "Tools and library to manipulate EFI variables";
+    homepage = "https://github.com/rhboot/efivar";
+    platforms = platforms.linux;
+    license = licenses.lgpl21Only;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/envconsul/default.nix b/nixpkgs/pkgs/tools/system/envconsul/default.nix
new file mode 100644
index 000000000000..f3e5609d9abd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/envconsul/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, envconsul }:
+
+buildGoModule rec {
+  pname = "envconsul";
+  version = "0.13.2";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "envconsul";
+    rev = "v${version}";
+    hash = "sha256-GZU1lEAI3k5EUU/z4gHR8plECudwp+YYyPSk7E0NQtI=";
+  };
+
+  vendorHash = "sha256-ehxeupO8CrKqkqK11ig7Pj4XTh61VOE4rT2T2SsChxw=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/hashicorp/envconsul/version.Name=envconsul"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = envconsul;
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/hashicorp/envconsul/";
+    description = "Read and set environmental variables for processes from Consul";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ pradeepchhetri ];
+    mainProgram = "envconsul";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/epilys-bb/default.nix b/nixpkgs/pkgs/tools/system/epilys-bb/default.nix
new file mode 100644
index 000000000000..44a1e566c5d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/epilys-bb/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "epilys-bb";
+  version = "unstable-2020-12-04";
+
+  src = fetchFromGitHub {
+    owner = "epilys";
+    repo = "bb";
+    rev = "c903d4c2975509299fd3d2600a0c4c2102f445d0";
+    hash = "sha256-KOXK+1arUWtu/QU7dwXhojIM0faMtwNN3AqVbofq1lY=";
+  };
+
+  cargoHash = "sha256-+aCMwKOg+3HDntG14gjJLec8XD51wuTyYyzLjuW6lbY=";
+
+  meta = with lib; {
+    description = "A clean, simple, and fast process viewer";
+    homepage = "https://nessuent.xyz/bb.html";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ cafkafk ];
+    platforms = platforms.linux;
+    mainProgram = "bb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/erdtree/default.nix b/nixpkgs/pkgs/tools/system/erdtree/default.nix
new file mode 100644
index 000000000000..8a761416c94d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/erdtree/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "erdtree";
+  version = "3.1.2";
+
+  src = fetchFromGitHub {
+    owner = "solidiquis";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-rm3j1exvdlJtMXgFeRmzr3YU/sLpQFL3PCa8kLVlinM=";
+  };
+
+  cargoHash = "sha256-rHrdGL/2diBwsWJyg7gaa6UmcUdvGhUPhLNESSBvDDg=";
+
+  meta = with lib; {
+    description = "File-tree visualizer and disk usage analyzer";
+    homepage = "https://github.com/solidiquis/erdtree";
+    changelog = "https://github.com/solidiquis/erdtree/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda zendo ];
+    mainProgram = "erd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/evemu/default.nix b/nixpkgs/pkgs/tools/system/evemu/default.nix
new file mode 100644
index 000000000000..6cb349c546b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/evemu/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchgit, autoreconfHook, pkg-config, python3Packages
+, libevdev
+}:
+
+stdenv.mkDerivation rec {
+  pname = "evemu";
+  version = "2.7.0";
+
+  # We could have downloaded a release tarball from cgit, but it changes hash
+  # each time it is downloaded :/
+  src = fetchgit {
+    url = "git://git.freedesktop.org/git/evemu";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-SQDaARuqBMBVlUz+Nw6mjdxaZfVOukmzTlIqy8U2rus=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook python3Packages.python ];
+
+  buildInputs = [ python3Packages.evdev libevdev ];
+
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "Records and replays device descriptions and events to emulate input devices through the kernel's input system";
+    homepage = "https://www.freedesktop.org/wiki/Evemu/";
+    license = with licenses; [ lgpl3Only gpl3Only ];
+    maintainers = [ maintainers.amorsillo ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/facter/default.nix b/nixpkgs/pkgs/tools/system/facter/default.nix
new file mode 100644
index 000000000000..02c48d302ac3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/facter/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, boost, cmake, cpp-hocon, curl, leatherman, libwhereami, yaml-cpp, openssl, ruby, util-linux }:
+
+stdenv.mkDerivation rec {
+  pname = "facter";
+  version = "3.14.17";
+
+  src = fetchFromGitHub {
+    sha256 = "sha256-RvsUt1DyN8Xr+Xtz84mbKlDwxLewgK6qklYVdQHu6q0=";
+    rev = version;
+    repo = pname;
+    owner = "puppetlabs";
+  };
+
+  postPatch = ''
+    sed '1i#include <array>' -i lib/src/facts/glib/load_average_resolver.cc # gcc12
+  '';
+
+  CXXFLAGS = lib.optionalString stdenv.cc.isGNU "-fpermissive -Wno-error=catch-value";
+  NIX_LDFLAGS = lib.optionalString stdenv.isLinux "-lblkid";
+
+  cmakeFlags = [
+    "-DFACTER_RUBY=${ruby}/lib/libruby${stdenv.hostPlatform.extensions.sharedLibrary}"
+    "-DRUBY_LIB_INSTALL=${placeholder "out"}/lib/ruby"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost cpp-hocon curl leatherman libwhereami yaml-cpp openssl ruby util-linux ];
+
+  meta = with lib; {
+    homepage = "https://github.com/puppetlabs/facter";
+    description = "A system inventory tool";
+    license = licenses.asl20;
+    maintainers = [ maintainers.womfoo ];
+    platforms = platforms.unix;
+    mainProgram = "facter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/fakechroot/default.nix b/nixpkgs/pkgs/tools/system/fakechroot/default.nix
new file mode 100644
index 000000000000..2357d87cc153
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fakechroot/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, nixosTests, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "fakechroot";
+  version = "2.20.1";
+
+  src = fetchFromGitHub {
+    owner  = "dex4er";
+    repo   = pname;
+    rev    = version;
+    sha256 = "0xgnwazrmrg4gm30xjxdn6sx3lhqvxahrh6gmy3yfswxc30pmg86";
+  };
+
+  # Use patch from https://github.com/dex4er/fakechroot/pull/46 , remove once merged!
+  # Courtesy of one of our own, @copumpkin!
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/pull/46/commits/dcc0cfe3941e328538f9e62b2c0b15430d393ec1.patch";
+      sha256 = "1mk8j2njd94s7vf2wggi08xxxzx8dxrvdricl9cbspvkyp715w2m";
+      # Don't bother trying to reconcile conflicts for NEWS entries, as they will continue to occur
+      # and are uninteresting as well as unimportant for our purposes (since NEWS never leaves the build env).
+      excludes = [ "NEWS.md" ];
+    })
+
+    # glibc 2.33 compat (https://github.com/dex4er/fakechroot/pull/85/)
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/commit/534e6d555736b97211523970d378dfb0db2608e9.patch";
+      sha256 = "sha256-bUlGJZvOSrATPt8bxGqU1UETTUD9V/HhJyA5ZxsOLQU=";
+    })
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/commit/75d7e6fa191c11a791faff06a0de86eaa7801d05.patch";
+      sha256 = "sha256-vWN7zFkKlBd/F+h/66z21RiZqkSCn3UIzy9NHV7TYDg=";
+    })
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/commit/693a3597ea7fccfb62f357503ff177bd3e3d5a89.patch";
+      sha256 = "sha256-bFXsT0hWocJFbtS1cpzo7oIy/x66iUw6QE1/cEoZ+3k=";
+    })
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/commit/e7c1f3a446e594a4d0cce5f5d499c9439ce1d5c5.patch";
+      sha256 = "sha256-eX6kB4U1ZlXoRtkSVEIBTRjO/cTS/7z5a9S366DiRMg=";
+    })
+    # pass __readlinkat_chk buffer length
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/pull/115/commits/15479d9436b534cee0115064bd8deb8d4ece9b8c.patch";
+      hash = "sha256-wMIZ3hW5XkRXQYBMADlN6kxhDSiEr84PGWBW+f4b4Ko=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ perl ];
+
+  passthru = {
+    tests = {
+      # A lightweight *unit* test that exercises fakeroot and fakechroot together:
+      nixos-etc = nixosTests.etc.test-etc-fakeroot;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/dex4er/fakechroot";
+    description = "Give a fake chroot environment through LD_PRELOAD";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [offline];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/system/fakeroot/default.nix b/nixpkgs/pkgs/tools/system/fakeroot/default.nix
new file mode 100644
index 000000000000..9a24f5909909
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fakeroot/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, coreutils
+, stdenv
+, fetchurl
+, fetchpatch
+, getopt
+, libcap
+, gnused
+, nixosTests
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  version = "1.29";
+  pname = "fakeroot";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/f/fakeroot/fakeroot_${finalAttrs.version}.orig.tar.gz";
+    sha256 = "sha256-j7uvt4DJFz46zkoEr7wdkA8zfzIWiDk59cfbNDG+fCA=";
+  };
+
+  patches = lib.optionals stdenv.isLinux [
+    ./einval.patch
+    (fetchpatch {
+      name = "also-wrap-stat-library-call.patch";
+      url = "https://sources.debian.org/data/main/f/fakeroot/1.29-1/debian/patches/also-wrap-stat-library-call.patch";
+      sha256 = "0p7lq6m31k3rqsnjbi06a8ykdqa3cp4y5ngsjyk3q1269gx59x8b";
+    })
+
+    # patches needed for musl libc, borrowed from alpine packaging.
+    # it is applied regardless of the environment to prevent patchrot
+    (fetchpatch {
+      name = "do-not-redefine-id_t.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/fakeroot/do-not-redefine-id_t.patch?id=f68c541324ad07cc5b7f5228501b5f2ce4b36158";
+      sha256 = "sha256-i9PoWriSrQ7kLZzbvZT3Kq1oXzK9mTyBqq808BGepOw=";
+    })
+    (fetchpatch {
+      name = "fakeroot-no64.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/fakeroot/fakeroot-no64.patch?id=f68c541324ad07cc5b7f5228501b5f2ce4b36158";
+      sha256 = "sha256-NCDaB4nK71gvz8iQxlfaQTazsG0SBUQ/RAnN+FqwKkY=";
+    })
+  ];
+
+  buildInputs = lib.optional (!stdenv.isDarwin) libcap;
+
+  postUnpack = ''
+    sed -i \
+      -e 's@getopt@${getopt}/bin/getopt@g' \
+      -e 's@sed@${gnused}/bin/sed@g' \
+      -e 's@kill@${coreutils}/bin/kill@g' \
+      -e 's@/bin/ls@${coreutils}/bin/ls@g' \
+      -e 's@cut@${coreutils}/bin/cut@g' \
+      fakeroot-${finalAttrs.version}/scripts/fakeroot.in
+  '';
+
+  passthru = {
+    tests = {
+      version = testers.testVersion {
+        package = finalAttrs.finalPackage;
+      };
+      # A lightweight *unit* test that exercises fakeroot and fakechroot together:
+      nixos-etc = nixosTests.etc.test-etc-fakeroot;
+    };
+  };
+
+  meta = {
+    homepage = "https://salsa.debian.org/clint/fakeroot";
+    description = "Give a fake root environment through LD_PRELOAD";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/system/fakeroot/einval.patch b/nixpkgs/pkgs/tools/system/fakeroot/einval.patch
new file mode 100644
index 000000000000..f8d4fb83d137
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fakeroot/einval.patch
@@ -0,0 +1,47 @@
+Ignore EINVAL errors.  This matters within user namespaces.
+
+See:
+https://github.com/NixOS/nixpkgs/issues/25901
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=802612
+https://github.com/NixOS/nixpkgs/issues/10496
+
+diff --git a/libfakeroot.c b/libfakeroot.c
+index 68a95fb..70da8bc 100644
+--- a/libfakeroot.c
++++ b/libfakeroot.c
+@@ -792,7 +792,7 @@ int chown(const char *path, uid_t owner, gid_t group){
+     r=next_lchown(path,owner,group);
+   else
+     r=0;
+-  if(r&&(errno==EPERM))
++  if(r&&(errno==EPERM||errno==EINVAL))
+     r=0;
+
+   return r;
+@@ -819,7 +819,7 @@ int lchown(const char *path, uid_t owner, gid_t group){
+     r=next_lchown(path,owner,group);
+   else
+     r=0;
+-  if(r&&(errno==EPERM))
++  if(r&&(errno==EPERM||errno==EINVAL))
+     r=0;
+
+   return r;
+@@ -843,7 +843,7 @@ int fchown(int fd, uid_t owner, gid_t group){
+   else
+     r=0;
+
+-  if(r&&(errno==EPERM))
++  if(r&&(errno==EPERM||errno==EINVAL))
+     r=0;
+
+   return r;
+@@ -870,7 +870,7 @@ int fchownat(int dir_fd, const char *path, uid_t owner, gid_t group, int flags)
+   else
+     r=0;
+
+-  if(r&&(errno==EPERM))
++  if(r&&(errno==EPERM||errno==EINVAL))
+     r=0;
+
+   return r;
diff --git a/nixpkgs/pkgs/tools/system/fancy-motd/default.nix b/nixpkgs/pkgs/tools/system/fancy-motd/default.nix
new file mode 100644
index 000000000000..f05ea8adceb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fancy-motd/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, fetchFromGitHub, bc, curl, figlet, fortune, gawk, iproute2, procps }:
+
+stdenv.mkDerivation rec {
+  pname = "fancy-motd";
+  version = "unstable-2022-06-06";
+
+  src = fetchFromGitHub {
+    owner = "bcyran";
+    repo = pname;
+    rev = "812c58f04f65053271f866f3797baa2eba7324f5";
+    sha256 = "sha256-O/euB63Dyj+NyfZK42egSEYwZhL8B0jCxSSDYoT4cpo=";
+  };
+
+  buildInputs = [ bc curl figlet fortune gawk iproute2 ];
+
+  postPatch = ''
+    substituteInPlace motd.sh \
+      --replace 'BASE_DIR="$(dirname "$(readlink -f "$0")")"' "BASE_DIR=\"$out/lib\""
+
+    substituteInPlace modules/20-uptime \
+      --replace "uptime -p" "${procps}/bin/uptime -p"
+
+    # does not work on nixos
+    rm modules/41-updates
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D motd.sh $out/bin/motd
+
+    install -D framework.sh $out/lib/framework.sh
+    install -D config.sh.example $out/lib/config.sh
+    find modules -type f -exec install -D {} $out/lib/{} \;
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Fancy, colorful MOTD written in bash. Server status at a glance";
+    homepage = "https://github.com/bcyran/fancy-motd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rhoriguchi ];
+    platforms = platforms.linux;
+    mainProgram = "motd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/fcron/default.nix b/nixpkgs/pkgs/tools/system/fcron/default.nix
new file mode 100644
index 000000000000..8b54b77e8a2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fcron/default.nix
@@ -0,0 +1,61 @@
+# restart using 'killall -TERM fcron; fcron -b
+# use convert-fcrontab to update fcrontab files
+
+{ lib, stdenv, fetchurl, perl, busybox, vim }:
+
+stdenv.mkDerivation rec {
+  pname = "fcron";
+  version = "3.3.1";
+
+  src = fetchurl {
+    url = "http://fcron.free.fr/archives/${pname}-${version}.src.tar.gz";
+    sha256 = "sha256-81naoIpj3ft/4vlkuz9cUiRMJao2+SJaPMVNNvRoEQY=";
+  };
+
+  buildInputs = [ perl ];
+
+  patches = [ ./relative-fcronsighup.patch ];
+
+  configureFlags =
+    [ "--with-sendmail=${busybox}/sbin/sendmail"
+      "--with-editor=${vim}/bin/vi"  # TODO customizable
+      "--with-bootinstall=no"
+      "--localstatedir=/var"
+      "--sysconfdir=/etc"
+      "--with-rootname=root"
+      "--with-rootgroup=root"
+      "--disable-checks"
+    ];
+
+  installTargets = [ "install-staged" ]; # install does also try to change permissions of /etc/* files
+
+  # fcron tries to install pid into system directory on install
+  installFlags = [
+    "ETC=."
+    "PIDDIR=."
+    "PIDFILE=fcron.pid"
+    "REBOOT_LOCK=fcron.reboot"
+    "FIFODIR=."
+    "FIFOFILE=fcron.fifo"
+    "FCRONTABS=."
+  ];
+
+  preConfigure = ''
+    sed -i 's@/usr/bin/env perl@${perl}/bin/perl@g' configure script/*
+    # Don't let fcron create the group fcron, nix(os) should do this
+    sed -i '2s@.*@exit 0@' script/user-group
+
+    # --with-bootinstall=no shoud do this, didn't work. So just exit the script before doing anything
+    sed -i '2s@.*@exit 0@' script/boot-install
+
+    # also don't use chown or chgrp for documentation (or whatever) when installing
+    find -type f | xargs sed -i -e 's@^\(\s\)*chown@\1:@' -e 's@^\(\s\)*chgrp@\1:@'
+  '';
+
+  meta = with lib; {
+    description="A command scheduler with extended capabilities over cron and anacron";
+    homepage = "http://fcron.free.fr";
+    license = licenses.gpl2;
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/fcron/relative-fcronsighup.patch b/nixpkgs/pkgs/tools/system/fcron/relative-fcronsighup.patch
new file mode 100644
index 000000000000..c0bbfc1ee3ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fcron/relative-fcronsighup.patch
@@ -0,0 +1,16 @@
+Use relative fcronsighup to prefer setuid executable over package binary.
+--- fcron-3.2.1.orig/fcrontab.c	2016-06-26 17:02:48.000000000 +0200
++++ fcron-3.2.1/fcrontab.c	2017-03-05 21:54:24.676871335 +0100
+@@ -154,10 +154,10 @@
+                         fcrontab_gid);
+                 exit(ERR);
+             }
+-            execl(BINDIREX "/fcronsighup", BINDIREX "/fcronsighup", fcronconf,
++            execlp("fcronsighup",  "fcronsighup", fcronconf,
+                   NULL);
+ 
+-            error_e("Could not exec " BINDIREX " fcronsighup");
++            error_e("Could not exec fcronsighup");
+             exit(ERR);
+             break;
+ 
diff --git a/nixpkgs/pkgs/tools/system/fdisk/default.nix b/nixpkgs/pkgs/tools/system/fdisk/default.nix
new file mode 100644
index 000000000000..b48108ea76c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fdisk/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchurl
+, gettext
+, guile
+, libuuid
+, parted
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnufdisk";
+  version = "2.0.0a1";
+
+  src = fetchurl {
+    url = "mirror://gnu/fdisk/gnufdisk-${version}.tar.gz";
+    hash = "sha256-yWPYTf8RxBIQ//mUdC6fkKct/csEgbzEtTAiPtNRH7U=";
+  };
+
+  postPatch = ''
+    sed -i "s/gnufdisk-common.h .*/\n/g" backend/configure
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    gettext
+    guile
+  ];
+
+  buildInputs = [
+    guile
+    libuuid
+    parted
+  ];
+
+  env.NIX_CFLAGS_COMPILE = lib.concatStringsSep " " [
+    "-I../common/include"
+    "-I../debug/include"
+    "-I../exception/include"
+  ];
+
+  doCheck = true;
+
+  meta = {
+    description = "A command-line disk partitioning tool";
+    longDescription = ''
+      GNU fdisk provides a GNU version of the common disk partitioning tool
+      fdisk.  fdisk is used for the creation and manipulation of disk partition
+      tables, and it understands a variety of different formats.
+    '';
+    homepage = "https://www.gnu.org/software/fdisk/";
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "gnufdisk";
+    maintainers = [ lib.maintainers.wegank ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/fio/default.nix b/nixpkgs/pkgs/tools/system/fio/default.nix
new file mode 100644
index 000000000000..45aed59dee8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fio/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper
+, libaio, python3, zlib
+, withGnuplot ? false, gnuplot ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "fio";
+  version = "3.36";
+
+  src = fetchFromGitHub {
+    owner  = "axboe";
+    repo   = "fio";
+    rev    = "fio-${version}";
+    sha256 = "sha256-w1k1DGgGYL2K/fZ30HMQE2vMcT6ZaaweM+KTcHKVEq4=";
+  };
+
+  buildInputs = [ python3 zlib ]
+    ++ lib.optional (!stdenv.isDarwin) libaio;
+
+  # ./configure does not support autoconf-style --build=/--host=.
+  # We use $CC instead.
+  configurePlatforms = [ ];
+
+  nativeBuildInputs = [ makeWrapper python3.pkgs.wrapPython ];
+
+  strictDeps = true;
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "mandir = /usr/share/man" "mandir = \$(prefix)/man" \
+      --replace "sharedir = /usr/share/fio" "sharedir = \$(prefix)/share/fio"
+    substituteInPlace tools/plot/fio2gnuplot --replace /usr/share/fio $out/share/fio
+  '';
+
+  pythonPath = [ python3.pkgs.six ];
+
+  makeWrapperArgs = lib.optionals withGnuplot [
+    "--prefix PATH : ${lib.makeBinPath [ gnuplot ]}"
+  ];
+
+  postInstall = ''
+    wrapPythonProgramsIn "$out/bin" "$out $pythonPath"
+  '';
+
+  meta = with lib; {
+    description = "Flexible IO Tester - an IO benchmark tool";
+    homepage = "https://git.kernel.dk/cgit/fio/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/foreman/Gemfile b/nixpkgs/pkgs/tools/system/foreman/Gemfile
new file mode 100644
index 000000000000..e25e6d790fc0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foreman/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "foreman"
diff --git a/nixpkgs/pkgs/tools/system/foreman/Gemfile.lock b/nixpkgs/pkgs/tools/system/foreman/Gemfile.lock
new file mode 100644
index 000000000000..dac60786a63f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foreman/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    foreman (0.87.2)
+
+PLATFORMS
+  aarch64-darwin
+  aarch64-linux
+  ruby
+  x86_64-darwin
+  x86_64-linux
+
+DEPENDENCIES
+  foreman
+
+BUNDLED WITH
+   2.2.20
diff --git a/nixpkgs/pkgs/tools/system/foreman/default.nix b/nixpkgs/pkgs/tools/system/foreman/default.nix
new file mode 100644
index 000000000000..8a7cfde32ee0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foreman/default.nix
@@ -0,0 +1,16 @@
+{ bundlerEnv, lib, ruby }:
+
+bundlerEnv {
+  inherit ruby;
+  pname = "foreman";
+  gemdir = ./.;
+
+  meta = with lib; {
+    description = "Process manager for applications with multiple components";
+    homepage = "https://github.com/ddollar/foreman";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = ruby.meta.platforms;
+    mainProgram = "foreman";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/foreman/gemset.nix b/nixpkgs/pkgs/tools/system/foreman/gemset.nix
new file mode 100644
index 000000000000..d5b053daf4c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foreman/gemset.nix
@@ -0,0 +1,12 @@
+{
+  foreman = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0szgxvnzwkzrfbq5dkwa98mig78aqglfy6irdsvq1gq045pbq9r7";
+      type = "gem";
+    };
+    version = "0.87.2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/foremost/default.nix b/nixpkgs/pkgs/tools/system/foremost/default.nix
new file mode 100644
index 000000000000..a1a09826c537
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foremost/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "foremost";
+  version = "1.5.7";
+
+  src = fetchurl {
+    sha256 = "0d2zxw0ijg8cd3ksgm8cf8jg128zr5x7z779jar90g9f47pm882h";
+    url = "https://foremost.sourceforge.net/pkg/${pname}-${version}.tar.gz";
+  };
+
+  patches = [ ./makefile.patch ];
+
+  # -fcommon: Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: api.o:(.bss+0xbdba0): multiple definition of `wildcard'; main.o:(.bss+0xbd760): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  makeFlags = [ "PREFIX=$(out)" ] ++ lib.optionals stdenv.isDarwin [ "mac" ];
+
+  enableParallelBuilding = true;
+
+  hardeningDisable = [ "format" ];
+
+  preInstall = ''
+    mkdir -p $out/{bin,share/man/man8}
+  '';
+
+  meta = with lib; {
+    description = "Recover files based on their contents";
+    longDescription = ''
+      Foremost is a console program to recover files based on their headers,
+      footers, and internal data structures. Foremost can work on image files, such
+      as those generated by dd, Safeback, Encase, etc, or directly on a drive.
+      The headers and footers can be specified by a configuration file or you can
+      use command line switches to specify built-in file types. These built-in types
+      look at the data structures of a given file format allowing for a more
+      reliable and faster recovery.
+    '';
+    homepage = "https://foremost.sourceforge.net/";
+    license = licenses.publicDomain;
+    maintainers = [ maintainers.jiegec ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "foremost";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/foremost/makefile.patch b/nixpkgs/pkgs/tools/system/foremost/makefile.patch
new file mode 100644
index 000000000000..3166fffe73fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foremost/makefile.patch
@@ -0,0 +1,32 @@
+diff --git a/Makefile b/Makefile
+index 1a20f4f..077acdb 100755
+--- a/Makefile
++++ b/Makefile
+@@ -1,5 +1,5 @@
+ 
+-RAW_CC = gcc
++RAW_CC := $(CC)
+ RAW_FLAGS = -Wall -O2
+ LINK_OPT = 
+ VERSION = 1.5.7
+@@ -24,9 +24,9 @@ MAN_PAGES = $(NAME).8.gz
+ RAW_FLAGS += -DVERSION=\"$(VERSION)\"
+ 
+ # Where we get installed
+-BIN = /usr/local/bin
+-MAN = /usr/share/man/man8
+-CONF= /usr/local/etc
++BIN = $(PREFIX)/bin
++MAN = $(PREFIX)/share/man/man8
++CONF= $(PREFIX)/etc
+ # Setup for compiling and cross-compiling for Windows
+ # The CR_ prefix refers to cross compiling from OSX to Windows
+ CR_CC = $(CR_BASE)/gcc
+@@ -120,7 +120,6 @@ foremost: $(OBJ)
+ install: goals
+ 	install -m 755 $(NAME) $(BIN)
+ 	install -m 444 $(MAN_PAGES) $(MAN)
+-	install -m 444 foremost.conf $(CONF)
+ macinstall: BIN = /usr/local/bin/
+ macinstall: MAN = /usr/share/man/man1/
+ macinstall: CONF = /usr/local/etc/
diff --git a/nixpkgs/pkgs/tools/system/freeipmi/default.nix b/nixpkgs/pkgs/tools/system/freeipmi/default.nix
new file mode 100644
index 000000000000..f61e455268b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/freeipmi/default.nix
@@ -0,0 +1,46 @@
+{ buildPackages, fetchurl, lib, stdenv, libgcrypt, readline, libgpg-error }:
+
+stdenv.mkDerivation rec {
+  version = "1.6.11";
+  pname = "freeipmi";
+
+  src = fetchurl {
+    url = "mirror://gnu/freeipmi/${pname}-${version}.tar.gz";
+    sha256 = "sha256-ZfvWkQ/AEEV3SGlUFPJ8V1W06NdXNCISIfOFjGIwqJc=";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  buildInputs = [ libgcrypt readline libgpg-error ];
+
+  configureFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform)
+    [ "ac_cv_file__dev_urandom=true" "ac_cv_file__dev_random=true" ];
+
+  doCheck = true;
+
+  meta = {
+    description = "Implementation of the Intelligent Platform Management Interface";
+
+    longDescription =
+      '' GNU FreeIPMI provides in-band and out-of-band IPMI software based on
+         the IPMI v1.5/2.0 specification.  The IPMI specification defines a
+         set of interfaces for platform management and is implemented by a
+         number vendors for system management.  The features of IPMI that
+         most users will be interested in are sensor monitoring, system event
+         monitoring, power control, and serial-over-LAN (SOL).  The FreeIPMI
+         tools and libraries listed below should provide users with the
+         ability to access and utilize these and many other features.  A
+         number of useful features for large HPC or cluster environments have
+         also been implemented into FreeIPMI. See the README or FAQ for more
+         info.
+      '';
+
+    homepage = "https://www.gnu.org/software/freeipmi/";
+    downloadPage = "https://www.gnu.org/software/freeipmi/download.html";
+
+    license = lib.licenses.gpl3Plus;
+
+    maintainers = with lib.maintainers; [ raskin ];
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;  # arbitrary choice
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gdmap/default.nix b/nixpkgs/pkgs/tools/system/gdmap/default.nix
new file mode 100644
index 000000000000..900dabf834b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gdmap/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, gtk2, pkg-config, libxml2, intltool, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "gdmap";
+  version = "0.8.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gdmap/gdmap-${version}.tar.gz";
+    sha256 = "0nr8l88cg19zj585hczj8v73yh21k7j13xivhlzl8jdk0j0cj052";
+  };
+
+  nativeBuildInputs = [ pkg-config intltool ];
+  buildInputs = [ gtk2 libxml2 gettext ];
+
+  patches = [ ./get_sensitive.patch ./set_flags.patch ];
+
+  hardeningDisable = [ "format" ];
+
+  NIX_LDFLAGS = "-lm";
+
+  meta = with lib; {
+    homepage = "https://gdmap.sourceforge.net";
+    description = "Recursive rectangle map of disk usage";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "gdmap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gdmap/get_sensitive.patch b/nixpkgs/pkgs/tools/system/gdmap/get_sensitive.patch
new file mode 100644
index 000000000000..3cdb6291dfac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gdmap/get_sensitive.patch
@@ -0,0 +1,34 @@
+From 166de50914191303b232ec123cfbaadad521560c Mon Sep 17 00:00:00 2001
+From: Alexander Myltsev <avm@altlinux.ru>
+Date: Wed, 21 Apr 2010 22:43:14 +0400
+Subject: [PATCH] GTK_WIDGET_SENSITIVE -> gtk_widget_get_sensitive
+
+---
+ gdmap/src/gui_support.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/gui_support.c b/src/gui_support.c
+index 3027e29..45272d3 100644
+--- a/src/gui_support.c
++++ b/src/gui_support.c
+@@ -85,7 +85,7 @@ on_ebox_enter(GtkWidget* box, GdkEventCrossing* event, GtkLabel* label) {
+   const char* text;
+ 
+   (void)event;
+-  if (GTK_WIDGET_SENSITIVE(label)) {
++  if (gtk_widget_get_sensitive(GTK_WIDGET(label))) {
+     char* temp;
+ 
+     text = g_object_get_data(G_OBJECT(label), "label");
+@@ -129,7 +129,7 @@ static void on_clear_label(GtkWidget* widget) {
+ void ui_event_label_set_sensitive(GtkWidget* ebox, gboolean set) {
+   gpointer callback = g_object_get_data(G_OBJECT(ebox), "callback");
+   GtkWidget* child = GTK_BIN(ebox)->child;
+-  if (GTK_WIDGET_SENSITIVE(child) == set) return;
++  if (gtk_widget_get_sensitive(child) == set) return;
+ 
+   if (set && !callback) return;
+   gtk_widget_set_sensitive(child, set);
+-- 
+1.7.3.3
+
diff --git a/nixpkgs/pkgs/tools/system/gdmap/set_flags.patch b/nixpkgs/pkgs/tools/system/gdmap/set_flags.patch
new file mode 100644
index 000000000000..388836f6e5f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gdmap/set_flags.patch
@@ -0,0 +1,25 @@
+From 9a5537d2b0aba18438dd77a45354ac2e73eae23d Mon Sep 17 00:00:00 2001
+From: Alexander Myltsev <avm@altlinux.ru>
+Date: Mon, 13 Dec 2010 23:24:30 +0300
+Subject: [PATCH] GTK_WIDGET_SET_FLAGS -> gtk_widget_set_can_focus
+
+---
+ gdmap/src/gui_support.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/src/gui_support.c b/src/gui_support.c
+index 45272d3..ca02d72 100644
+--- a/src/gui_support.c
++++ b/src/gui_support.c
+@@ -164,7 +164,7 @@ GtkWidget* ui_create_event_label(const char* text, GCallback callback,
+                         // GDK_FOCUS_CHANGE_MASK |
+                         GDK_ENTER_NOTIFY_MASK |
+                         GDK_LEAVE_NOTIFY_MASK);
+-  GTK_WIDGET_SET_FLAGS(ebox, GTK_CAN_FOCUS);
++  gtk_widget_set_can_focus(ebox, TRUE);
+ 
+   gtk_widget_show(ebox);
+ 
+-- 
+1.7.3.3
+
diff --git a/nixpkgs/pkgs/tools/system/gdu/default.nix b/nixpkgs/pkgs/tools/system/gdu/default.nix
new file mode 100644
index 000000000000..9e84f2d8edfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gdu/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, gdu
+}:
+
+buildGoModule rec {
+  pname = "gdu";
+  version = "5.27.0";
+
+  src = fetchFromGitHub {
+    owner = "dundee";
+    repo = "gdu";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-hQyvYLegGimYTRz0J/2tmaC6N4LfjB1ivWgN29DwNhA=";
+  };
+
+  vendorHash = "sha256-weNcJjofI7Aoy0Eya0KprXHAn7aTA0rQJYrJ4+t65hI=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/dundee/gdu/v${lib.versions.major version}/build.Version=${version}"
+  ];
+
+  postPatch = ''
+    substituteInPlace cmd/gdu/app/app_test.go \
+      --replace-fail "development" "${version}"
+  '';
+
+  postInstall = ''
+    installManPage gdu.1
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  passthru.tests.version = testers.testVersion {
+    package = gdu;
+  };
+
+  meta = with lib; {
+    description = "Disk usage analyzer with console interface";
+    longDescription = ''
+      Gdu is intended primarily for SSD disks where it can fully
+      utilize parallel processing. However HDDs work as well, but
+      the performance gain is not so huge.
+    '';
+    homepage = "https://github.com/dundee/gdu";
+    changelog = "https://github.com/dundee/gdu/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab zowoq ];
+    mainProgram = "gdu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gkraken/default.nix b/nixpkgs/pkgs/tools/system/gkraken/default.nix
new file mode 100644
index 000000000000..330d9f1129f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gkraken/default.nix
@@ -0,0 +1,87 @@
+{ python3Packages
+, lib
+, fetchFromGitLab
+, meson
+, pkg-config
+, glib
+, ninja
+, desktop-file-utils
+, gobject-introspection
+, gtk3
+, libnotify
+, dbus
+, wrapGAppsHook
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gkraken";
+  version = "1.2.0";
+
+  src = fetchFromGitLab {
+    owner = "leinardi";
+    repo = "gkraken";
+    rev = version;
+    sha256 = "0hxlh0319rl28iba02917z3n6d5cq2qcgpj2ng31bkjjhlvvfm2g";
+  };
+
+  format = "other";
+
+  postPatch = ''
+    patchShebangs scripts/meson_post_install.py
+  '';
+
+  nativeBuildInputs = [
+    meson
+    pkg-config
+    gobject-introspection
+    glib
+    ninja
+    gtk3
+    desktop-file-utils
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    libnotify
+    dbus
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+    peewee
+    rx
+    injector
+    liquidctl
+    pyxdg
+    requests
+    matplotlib
+    dbus-python
+  ];
+
+  dontWrapGApps = true;
+
+  # Extract udev rules from python code
+  postInstall = ''
+    mkdir -p $out/lib/udev/rules.d
+    sed -e '/\s*\(from\|@singleton\|@inject\)/d' $src/gkraken/interactor/udev_interactor.py > udev_interactor.py
+    python -c 'from udev_interactor import _UDEV_RULE; print(_UDEV_RULE)' > $out/lib/udev/rules.d/60-gkraken.rules
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}"
+    )
+  '';
+
+  meta = with lib; {
+    description = "GUI that allows to control the cooling (fan and/or pump profiles) of NZXT Kraken AIO liquid coolers from Linux";
+    homepage = "https://gitlab.com/leinardi/gkraken";
+    changelog = "https://gitlab.com/leinardi/gkraken/-/tags/${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ OPNA2608 ];
+    platforms = platforms.linux;
+    mainProgram = "gkraken";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/go-audit/default.nix b/nixpkgs/pkgs/tools/system/go-audit/default.nix
new file mode 100644
index 000000000000..38fd38897390
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/go-audit/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "go-audit";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "slackhq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Li/bMgl/wj9bHpXW5gwWvb7BvyBPzeLCP979J2kyRCM=";
+  };
+
+  vendorHash = "sha256-JHimXGsUMAQqCutREsmtgDIf6Vda+it0IL3AfS86omU=";
+
+  # Tests need network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "An alternative to the auditd daemon";
+    homepage = "https://github.com/slackhq/go-audit";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.linux;
+    mainProgram = "go-audit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gohai/default.nix b/nixpkgs/pkgs/tools/system/gohai/default.nix
new file mode 100644
index 000000000000..5fa84e873ba3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gohai/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gohai";
+  version = "unstable-2022-04-12";
+
+  src = fetchFromGitHub {
+    owner = "DataDog";
+    repo = "gohai";
+    rev = "c614f513e87f04d3d19b2d4ae853cc5703f3a9bc";
+    sha256 = "sha256-vdzGGTg9SHYS0OQUn3VvrQGpKxzqxBRXDKOm0c7FvYY=";
+  };
+
+  vendorHash = "sha256-aN1fwGbBm45e6qdRu+4wnv2ZI7SOsIPONB4vF9o2vlI=";
+
+  ldflags = [ "-s" "-w" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "System information collector";
+    homepage = "https://github.com/DataDog/gohai";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tazjin ];
+    longDescription = ''
+      Gohai is a tool which collects an inventory of system
+      information. It is used by the Datadog agent to provide detailed
+      system metrics.
+    '';
+    mainProgram = "gohai";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gopsuinfo/default.nix b/nixpkgs/pkgs/tools/system/gopsuinfo/default.nix
new file mode 100644
index 000000000000..b4a1003e40cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gopsuinfo/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gopsuinfo";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = "gopsuinfo";
+    rev = "v${version}";
+    sha256 = "sha256-h+CdiQh7IguCduIMCCI/UPIUAdXlNSHdkz6hrG10h3c=";
+  };
+
+  vendorHash = "sha256-S2ZHfrbEjPDweazwWbMbEMcMl/i+8Nru0G0e7RjOJMk=";
+
+  # Remove installing of binary from the Makefile (already taken care of by
+  # `buildGoModule`)
+  patches = [
+    ./no_bin_install.patch
+  ];
+
+  # Fix absolute path of icons in the code
+  postPatch = ''
+    substituteInPlace gopsuinfo.go \
+      --replace "/usr/share/gopsuinfo" "$out/usr/share/gopsuinfo"
+  '';
+
+  # Install icons
+  postInstall = '' make install DESTDIR=$out '';
+
+  meta = with lib; {
+    description = "A gopsutil-based command to display system usage info";
+    homepage = "https://github.com/nwg-piotr/gopsuinfo";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ otini ];
+    platforms = platforms.linux;
+    mainProgram = "gopsuinfo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gopsuinfo/no_bin_install.patch b/nixpkgs/pkgs/tools/system/gopsuinfo/no_bin_install.patch
new file mode 100644
index 000000000000..ffbc31e34068
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gopsuinfo/no_bin_install.patch
@@ -0,0 +1,12 @@
+diff --git a/Makefile b/Makefile
+index d33866c..e0aafb4 100644
+--- a/Makefile
++++ b/Makefile
+@@ -8,7 +8,6 @@ install:
+ 	mkdir -p "${DESTDIR}/usr/share/gopsuinfo" "${DESTDIR}/usr/bin"
+ 	cp -R icons_light "${DESTDIR}/usr/share/gopsuinfo"
+ 	cp -R icons_dark "${DESTDIR}/usr/share/gopsuinfo"
+-	cp bin/gopsuinfo "${DESTDIR}/usr/bin/"
+ 
+ uninstall:
+ 	rm -r "${DESTDIR}/usr/share/gopsuinfo"
diff --git a/nixpkgs/pkgs/tools/system/goreman/default.nix b/nixpkgs/pkgs/tools/system/goreman/default.nix
new file mode 100644
index 000000000000..57d7b46f54cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/goreman/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, goreman }:
+
+buildGoModule rec {
+  pname = "goreman";
+  version = "0.3.15";
+
+  src = fetchFromGitHub {
+    owner = "mattn";
+    repo = "goreman";
+    rev = "v${version}";
+    sha256 = "sha256-Z6b245tC6UsTaHTTlKEFH0egb5z8HTmv/554nkileng=";
+  };
+
+  vendorHash = "sha256-Qbi2GfBrVLFbH9SMZOd1JqvD/afkrVOjU4ECkFK+dFA=";
+
+  ldflags = [ "-s" "-w" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = goreman;
+    command = "goreman version";
+  };
+
+  meta = with lib; {
+    description = "foreman clone written in go language";
+    homepage = "https://github.com/mattn/goreman";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gotop/default.nix b/nixpkgs/pkgs/tools/system/gotop/default.nix
new file mode 100644
index 000000000000..9681d3286cef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gotop/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, IOKit
+}:
+
+buildGoModule rec {
+  pname = "gotop";
+  version = "4.2.0";
+
+  outputs = [
+    "out"
+    "man"
+  ];
+
+  src = fetchFromGitHub {
+    owner = "xxxserxxx";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-W7a3QnSIR95N88RqU2sr6oEDSqOXVfAwacPvS219+1Y=";
+  };
+
+  proxyVendor = true;
+  vendorHash = "sha256-KLeVSrPDS1lKsKFemRmgxT6Pxack3X3B/btSCOUSUFY=";
+
+  ldflags = [ "-s" "-w" "-X main.Version=v${version}" ];
+
+  # prevent `error: 'TARGET_OS_MAC' is not defined`
+  env.CGO_CFLAGS = "-Wno-undef-prefix";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ IOKit ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  postInstall = ''
+    $out/bin/gotop --create-manpage > gotop.1
+    installManPage gotop.1
+  '';
+
+  meta = with lib; {
+    description = "A terminal based graphical activity monitor inspired by gtop and vtop";
+    homepage = "https://github.com/xxxserxxx/gotop";
+    changelog = "https://github.com/xxxserxxx/gotop/raw/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = [ maintainers.magnetophon ];
+    mainProgram = "gotop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gptfdisk/default.nix b/nixpkgs/pkgs/tools/system/gptfdisk/default.nix
new file mode 100644
index 000000000000..ea6b12ac5eb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gptfdisk/default.nix
@@ -0,0 +1,66 @@
+{ fetchurl, lib, stdenv, libuuid, popt, icu, ncurses, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "gptfdisk";
+  version = "1.0.9";
+
+  src = fetchurl {
+    # https://www.rodsbooks.com/gdisk/${name}.tar.gz also works, but the home
+    # page clearly implies a preference for using SourceForge's bandwidth:
+    url = "mirror://sourceforge/gptfdisk/${pname}-${version}.tar.gz";
+    sha256 = "sha256-2v6tJpP6646Ll4MrI0B/btWzIZvBeE9ILdhVd04tUMI=";
+  };
+
+  patches = [
+    # issues with popt 1.19 (from upstream but not yet released):
+    # https://github.com/rpm-software-management/popt/issues/80
+    ./popt-1-19.patch
+
+    # fix UUID generation (from upstream but not yet released):
+    # https://sourceforge.net/p/gptfdisk/code/ci/6a8416cbd12d55f882bb751993b94f72d338d96f/
+    # https://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1853985.html
+    ./uuid.patch
+  ];
+
+  postPatch = ''
+    patchShebangs gdisk_test.sh
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile.mac --replace \
+      "-mmacosx-version-min=10.4" "-mmacosx-version-min=10.6"
+    substituteInPlace Makefile.mac --replace \
+      " -arch i386" ""
+    substituteInPlace Makefile.mac --replace \
+      "-arch x86_64" ""
+    substituteInPlace Makefile.mac --replace \
+      "-arch arm64" ""
+    substituteInPlace Makefile.mac --replace \
+      " -I/opt/local/include -I /usr/local/include -I/opt/local/include" ""
+    substituteInPlace Makefile.mac --replace \
+      "/usr/local/Cellar/ncurses/6.2/lib/libncurses.dylib" "${ncurses.out}/lib/libncurses.dylib"
+  '';
+
+  buildPhase = lib.optionalString stdenv.isDarwin "make -f Makefile.mac";
+  buildInputs = [ libuuid popt icu ncurses ];
+
+  installPhase = ''
+    mkdir -p $out/sbin
+    mkdir -p $out/share/man/man8
+    for prog in gdisk sgdisk fixparts cgdisk
+    do
+        install -v -m755 $prog $out/sbin
+        install -v -m644 $prog.8 $out/share/man/man8
+    done
+  '';
+
+  passthru.tests = lib.optionalAttrs stdenv.hostPlatform.isx86 {
+    installer-simpleLabels = nixosTests.installer.simpleLabels;
+  };
+
+  meta = with lib; {
+    description = "Set of text-mode partitioning tools for Globally Unique Identifier (GUID) Partition Table (GPT) disks";
+    license = licenses.gpl2;
+    homepage = "https://www.rodsbooks.com/gdisk/";
+    platforms = platforms.all;
+    maintainers = [ maintainers.ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gptfdisk/popt-1-19.patch b/nixpkgs/pkgs/tools/system/gptfdisk/popt-1-19.patch
new file mode 100644
index 000000000000..234c664c962c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gptfdisk/popt-1-19.patch
@@ -0,0 +1,84 @@
+commit 5d5e76d369a412bfb3d2cebb5fc0a7509cef878d
+Author: Rod Smith <rodsmith@rodsbooks.com>
+Date:   Fri Apr 15 18:10:14 2022 -0400
+
+    Fix failure & crash of sgdisk when compiled with latest popt (commit 740; presumably eventually release 1.19)
+
+diff --git a/NEWS b/NEWS
+index c7add56..9e153fd 100644
+--- a/NEWS
++++ b/NEWS
+@@ -1,3 +1,11 @@
++1.0.10 (?/??/2022):
++-------------------
++
++- Fixed problem that caused sgdisk to crash with errors about being unable
++  to read the disk's partition table when compiled with the latest popt
++  (commit 740, which is pre-release as I type; presumably version 1.19 and
++  later once released).
++
+ 1.0.9 (4/14/2022):
+ ------------------
+ 
+diff --git a/gptcl.cc b/gptcl.cc
+index 34c9421..0d578eb 100644
+--- a/gptcl.cc
++++ b/gptcl.cc
+@@ -155,7 +155,7 @@ int GPTDataCL::DoOptions(int argc, char* argv[]) {
+    } // while
+ 
+    // Assume first non-option argument is the device filename....
+-   device = (char*) poptGetArg(poptCon);
++   device = strdup((char*) poptGetArg(poptCon));
+    poptResetContext(poptCon);
+ 
+    if (device != NULL) {
+diff --git a/support.h b/support.h
+index 8ba9ad1..f91f1bc 100644
+--- a/support.h
++++ b/support.h
+@@ -8,7 +8,7 @@
+ #include <stdlib.h>
+ #include <string>
+ 
+-#define GPTFDISK_VERSION "1.0.9"
++#define GPTFDISK_VERSION "1.0.9.1"
+ 
+ #if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__)
+ // Darwin (Mac OS) & FreeBSD: disk IOCTLs are different, and there is no lseek64
+
+commit f5de3401b974ce103ffd93af8f9d43505a04aaf9
+Author: Damian Kurek <starfire24680@gmail.com>
+Date:   Thu Jul 7 03:39:16 2022 +0000
+
+    Fix NULL dereference when duplicating string argument
+    
+    poptGetArg can return NULL if there are no additional arguments, which
+    makes strdup dereference NULL on strlen
+
+diff --git a/gptcl.cc b/gptcl.cc
+index 0d578eb..ab95239 100644
+--- a/gptcl.cc
++++ b/gptcl.cc
+@@ -155,10 +155,11 @@ int GPTDataCL::DoOptions(int argc, char* argv[]) {
+    } // while
+ 
+    // Assume first non-option argument is the device filename....
+-   device = strdup((char*) poptGetArg(poptCon));
+-   poptResetContext(poptCon);
++   device = (char*) poptGetArg(poptCon);
+ 
+    if (device != NULL) {
++      device = strdup(device);
++      poptResetContext(poptCon);
+       JustLooking(); // reset as necessary
+       BeQuiet(); // Tell called functions to be less verbose & interactive
+       if (LoadPartitions((string) device)) {
+@@ -498,6 +499,7 @@ int GPTDataCL::DoOptions(int argc, char* argv[]) {
+          cerr << "Error encountered; not saving changes.\n";
+          retval = 4;
+       } // if
++      free(device);
+    } // if (device != NULL)
+    poptFreeContext(poptCon);
+    return retval;
diff --git a/nixpkgs/pkgs/tools/system/gptfdisk/uuid.patch b/nixpkgs/pkgs/tools/system/gptfdisk/uuid.patch
new file mode 100644
index 000000000000..110c3d106b43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gptfdisk/uuid.patch
@@ -0,0 +1,11 @@
+--- a/guid.cc
++++ b/guid.cc
+@@ -141,7 +141,7 @@ void GUIDData::Zero(void) {
+ void GUIDData::Randomize(void) {
+    int i, uuidGenerated = 0;
+
+-#ifdef _UUID_UUID_H
++#if defined (_UUID_UUID_H) || defined (_UL_LIBUUID_UUID_H)
+    uuid_generate(uuidData);
+    ReverseBytes(&uuidData[0], 4);
+    ReverseBytes(&uuidData[4], 2);
diff --git a/nixpkgs/pkgs/tools/system/gptman/default.nix b/nixpkgs/pkgs/tools/system/gptman/default.nix
new file mode 100644
index 000000000000..533210ee4d8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gptman/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv, testers, gptman }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gptman";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "rust-disk-partition-management";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ebV61EilGggix6JSN/MW4Ka0itkSpvikLDSO005TTYY=";
+  };
+
+  cargoHash = "sha256-P+qez0oVsHBiaBYban2o8MRvF8ElLf5zb+p+tYunWWA=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  buildFeatures = [ "cli" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = gptman;
+  };
+
+  meta = with lib; {
+    description = "A GPT manager that allows you to copy partitions from one disk to another and more";
+    homepage = "https://github.com/rust-disk-partition-management/gptman";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ akshgpt7 ];
+    mainProgram = "gptman";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gt5/default.nix b/nixpkgs/pkgs/tools/system/gt5/default.nix
new file mode 100644
index 000000000000..49d9fe651d49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gt5/default.nix
@@ -0,0 +1,28 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "gt5";
+  version = "1.4.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gt5/gt5-${version}.tar.gz";
+    sha256 = "0gm0gzyp4d9rxqddbaskbz5zvmlhyr4nyb5x9g7x4abyyxqjlnkq";
+  };
+
+  patchPhase = ''
+    sed 's/-o root -g root//' -i Makefile
+  '';
+
+  preConfigure = ''
+    makeFlags="$makeFlags PREFIX=$out"
+  '';
+
+  meta = {
+    description = "A diff-capable 'du' browser";
+    homepage = "https://gt5.sourceforge.net/";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; all;
+    mainProgram = "gt5";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gtop/default.nix b/nixpkgs/pkgs/tools/system/gtop/default.nix
new file mode 100644
index 000000000000..5d882740e1a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gtop/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "gtop";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "aksakalli";
+    repo = "gtop";
+    rev = "v${version}";
+    hash = "sha256-FKbaUV28d0JH9tmTSJBFYQrM5iensnIpcXUFFvXDMe4=";
+  };
+
+  npmDepsHash = "sha256-QKMLFalaOQjhgVkv8lIDnKyH7+GOqOKIl3zoLwrHIF4=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "System monitoring dashboard for the terminal";
+    homepage = "https://github.com/aksakalli/gtop";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ tfc ];
+    mainProgram = "gtop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hardinfo/default.nix b/nixpkgs/pkgs/tools/system/hardinfo/default.nix
new file mode 100644
index 000000000000..99ffe50786ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hardinfo/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, which, pkg-config, gtk2, pcre, glib, libxml2
+, libsoup ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hardinfo";
+  version = "0.5.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/hardinfo.berlios/hardinfo-${version}.tar.bz2";
+    sha256 = "0yhvfc5icam3i4mphlz0m9d9d2irjw8mbsxq203x59wjgh6nrpx0";
+  };
+
+  # Not adding 'hostname' command, the build shouldn't depend on what the build
+  # host is called.
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ which gtk2 pcre glib libxml2 libsoup ];
+
+  # Fixes '#error You must compile this program without "-O"'
+  hardeningDisable = [ "all" ];
+
+  # Ignore undefined references to a bunch of libsoup symbols
+  NIX_LDFLAGS = "--unresolved-symbol=ignore-all";
+
+  preConfigure = ''
+    patchShebangs configure
+
+    # -std=gnu89 fixes build error, copied from
+    # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=757525
+    sed -i -e "s/^CFLAGS = \(.*\)/CFLAGS = \1 -std=gnu89/" Makefile.in
+
+    substituteInPlace ./arch/linux/common/modules.h --replace /sbin/modinfo modinfo
+    substituteInPlace ./arch/linux/common/os.h --replace /lib/libc.so.6 ${stdenv.cc.libc}/lib/libc.so
+  '';
+
+  # Makefile supports DESTDIR but not PREFIX (it hardcodes $DESTDIR/usr/).
+  installFlags = [ "DESTDIR=$(out)" ];
+  postInstall = ''
+    mv "$out/usr/"* "$out"
+    rmdir "$out/usr"
+  '';
+
+  meta = with lib; {
+    homepage = "http://hardinfo.org/";
+    description = "Display information about your hardware and operating system";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ bjornfor ];
+    platforms = [ "x86_64-linux" "i686-linux" ]; # ARMv7 and AArch64 are unsupported
+    mainProgram = "hardinfo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hddfancontrol/default.nix b/nixpkgs/pkgs/tools/system/hddfancontrol/default.nix
new file mode 100644
index 000000000000..64409cbcdba0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hddfancontrol/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3Packages, fetchFromGitHub, hddtemp, hdparm, smartmontools }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "hddfancontrol";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "desbma";
+    repo = pname;
+    rev = version;
+    sha256 = "0b2grf98qnikayn18xll01dkm5pjpcjxdffgx1nyw9s0gqig8dg0";
+  };
+
+  propagatedBuildInputs = [
+    python3Packages.python-daemon
+    hddtemp
+    hdparm
+    smartmontools
+  ];
+
+  postInstall = ''
+    mkdir -p $out/etc/systemd/system
+    substitute systemd/hddfancontrol.service $out/etc/systemd/system/hddfancontrol.service \
+        --replace /usr/bin/hddfancontrol $out/bin/hddfancontrol
+    sed -i -e '/EnvironmentFile=.*/d' $out/etc/systemd/system/hddfancontrol.service
+  '';
+
+  meta = with lib; {
+    description = "Dynamically control fan speed according to hard drive temperature on Linux";
+    homepage = "https://github.com/desbma/hddfancontrol";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ benley ];
+    mainProgram = "hddfancontrol";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile b/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile
new file mode 100644
index 000000000000..2c2e8f27e403
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'hiera-eyaml'
diff --git a/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile.lock b/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile.lock
new file mode 100644
index 000000000000..918df753a382
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    hiera-eyaml (3.0.0)
+      highline (~> 1.6.19)
+      optimist
+    highline (1.6.21)
+    optimist (3.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  hiera-eyaml
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/system/hiera-eyaml/default.nix b/nixpkgs/pkgs/tools/system/hiera-eyaml/default.nix
new file mode 100644
index 000000000000..1f48d37f5847
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hiera-eyaml/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv {
+  inherit ruby;
+  pname = "hiera-eyaml";
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "hiera-eyaml";
+
+  meta = with lib; {
+    description = "Per-value asymmetric encryption of sensitive data for Hiera";
+    homepage = "https://github.com/TomPoulton/hiera-eyaml";
+    license = licenses.mit;
+    maintainers = with maintainers; [ benley nicknovitski ];
+    platforms = platforms.unix;
+    mainProgram = "eyaml";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hiera-eyaml/gemset.nix b/nixpkgs/pkgs/tools/system/hiera-eyaml/gemset.nix
new file mode 100644
index 000000000000..cf7d8d6905d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hiera-eyaml/gemset.nix
@@ -0,0 +1,31 @@
+{
+  hiera-eyaml = {
+    dependencies = ["highline" "optimist"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "049rxnwyivqgyjl0sjg7cb2q44ic0wsml288caspd1ps8v31gl18";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  highline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06bml1fjsnrhd956wqq5k3w8cyd09rv1vixdpa3zzkl6xs72jdn1";
+      type = "gem";
+    };
+    version = "1.6.21";
+  };
+  optimist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05jxrp3nbn5iilc1k7ir90mfnwc5abc9h78s5rpm3qafwqxvcj4j";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/honcho/default.nix b/nixpkgs/pkgs/tools/system/honcho/default.nix
new file mode 100644
index 000000000000..08c0fb3f6b58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/honcho/default.nix
@@ -0,0 +1,39 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+let
+  pname = "honcho";
+in
+
+python3Packages.buildPythonApplication rec {
+  name = "${pname}-${version}";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "nickstenning";
+    repo = "honcho";
+    rev = "v${version}";
+    sha256 = "1y0r8dw4pqcq7r4n58ixjdg1iy60lp0gxsd7d2jmhals16ij71rj";
+  };
+
+  propagatedBuildInputs = [ python3Packages.setuptools ];
+
+  nativeCheckInputs = with python3Packages; [ jinja2 pytest mock coverage ];
+
+  # missing plugins
+  doCheck = false;
+
+  checkPhase = ''
+    runHook preCheck
+    PATH=$out/bin:$PATH coverage run -m pytest
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "A Python clone of Foreman, a tool for managing Procfile-based applications";
+    license = licenses.mit;
+    homepage = "https://github.com/nickstenning/honcho";
+    maintainers = with maintainers; [ benley ];
+    platforms = platforms.unix;
+    mainProgram = "honcho";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hostctl/default.nix b/nixpkgs/pkgs/tools/system/hostctl/default.nix
new file mode 100644
index 000000000000..76c41d85ecdf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hostctl/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "hostctl";
+  version = "1.1.4";
+
+  src = fetchFromGitHub {
+    owner = "guumaster";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-9BbPHqAZKw8Rpjpdd/e9ip3V0Eh06tEFt/skQ97ij4g=";
+  };
+
+  vendorHash = "sha256-+p1gIqklTyd/AU1q0zbQN4BwxOM910fBFmkqvbFAbZA=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/guumaster/hostctl/cmd/hostctl/actions.version=${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd hostctl \
+      --bash <($out/bin/hostctl completion bash) \
+      --zsh <($out/bin/hostctl completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "CLI tool to manage the /etc/hosts file";
+    longDescription = ''
+      This tool gives you more control over the use of your hosts file.
+      You can have multiple profiles and switch them on/off as you need.
+    '';
+    homepage = "https://guumaster.github.io/hostctl/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ blaggacao ];
+    mainProgram = "hostctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/htop/default.nix b/nixpkgs/pkgs/tools/system/htop/default.nix
new file mode 100644
index 000000000000..20274695f8ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/htop/default.nix
@@ -0,0 +1,60 @@
+{ lib, fetchFromGitHub, stdenv, autoreconfHook, pkg-config
+, ncurses
+, IOKit
+, libcap
+, libnl
+, sensorsSupport ? stdenv.isLinux, lm_sensors
+, systemdSupport ? lib.meta.availableOn stdenv.hostPlatform systemd, systemd
+}:
+
+assert systemdSupport -> stdenv.isLinux;
+
+stdenv.mkDerivation rec {
+  pname = "htop";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "htop-dev";
+    repo = pname;
+    rev = version;
+    hash = "sha256-qDhQkzY2zj2yxbgFUXwE0MGEgAFOsAhnapUuetO9WTw=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ]
+    ++ lib.optional stdenv.isLinux pkg-config
+  ;
+
+  buildInputs = [ ncurses ]
+    ++ lib.optional stdenv.isDarwin IOKit
+    ++ lib.optionals stdenv.isLinux [ libcap libnl ]
+    ++ lib.optional sensorsSupport lm_sensors
+    ++ lib.optional systemdSupport systemd
+  ;
+
+  configureFlags = [ "--enable-unicode" "--sysconfdir=/etc" ]
+    ++ lib.optionals stdenv.isLinux [
+      "--enable-affinity"
+      "--enable-capabilities"
+      "--enable-delayacct"
+    ]
+    ++ lib.optional sensorsSupport "--enable-sensors"
+  ;
+
+  postFixup =
+    let
+      optionalPatch = pred: so: lib.optionalString pred "patchelf --add-needed ${so} $out/bin/htop";
+    in lib.optionalString (!stdenv.hostPlatform.isStatic) ''
+      ${optionalPatch sensorsSupport "${lm_sensors}/lib/libsensors.so"}
+      ${optionalPatch systemdSupport "${systemd}/lib/libsystemd.so"}
+    '';
+
+  meta = with lib; {
+    description = "An interactive process viewer";
+    homepage = "https://htop.dev";
+    license = licenses.gpl2Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ rob relrod SuperSandro2000 ];
+    changelog = "https://github.com/htop-dev/htop/blob/${version}/ChangeLog";
+    mainProgram = "htop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/htop/htop-vim.nix b/nixpkgs/pkgs/tools/system/htop/htop-vim.nix
new file mode 100644
index 000000000000..7f020f54f9de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/htop/htop-vim.nix
@@ -0,0 +1,21 @@
+{ lib, htop, fetchFromGitHub }:
+
+htop.overrideAttrs (oldAttrs: rec {
+  pname = "htop-vim";
+  version = "unstable-2023-02-16";
+
+  src = fetchFromGitHub {
+    owner = "KoffeinFlummi";
+    repo = pname;
+    rev = "b2b58f8f152343b70c33b79ba51a298024278621";
+    hash = "sha256-ZfdBAlnjoy8g6xwrR/i2+dGldMOfLlX6DRlNqB8pkGM=";
+  };
+
+  meta = with lib; {
+    inherit (oldAttrs.meta) platforms license;
+    description = "An interactive process viewer for Linux, with vim-style keybindings";
+    homepage = "https://github.com/KoffeinFlummi/htop-vim";
+    maintainers = with maintainers; [ thiagokokada ];
+    mainProgram = "htop";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/system/hw-probe/default.nix b/nixpkgs/pkgs/tools/system/hw-probe/default.nix
new file mode 100644
index 000000000000..8b190087ffd5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hw-probe/default.nix
@@ -0,0 +1,141 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, makePerlPath
+
+# Perl libraries
+, LWP
+, LWPProtocolHttps
+, HTTPMessage
+, HTTPDate
+, URI
+, TryTiny
+
+# Required
+, coreutils
+, curl # Preferred to using the Perl HTTP libs - according to hw-probe.
+, dmidecode
+, edid-decode
+, gnugrep
+, gnutar
+, hwinfo
+, iproute2
+, kmod
+, pciutils
+, perl
+, smartmontools
+, usbutils
+, xz
+
+# Conditionally recommended
+, systemdSupport ? lib.meta.availableOn stdenv.hostPlatform systemd
+, systemd
+
+# Recommended
+, withRecommended ? true # Install recommended tools
+, mcelog
+, hdparm
+, acpica-tools
+, drm_info
+, mesa-demos
+, memtester
+, sysstat
+, cpuid
+, util-linuxMinimal
+, xinput
+, libva-utils
+, inxi
+, vulkan-tools
+, i2c-tools
+, opensc
+
+# Suggested
+, withSuggested ? false # Install (most) suggested tools
+, hplip
+, sane-backends
+# , pnputils # pnputils (lspnp) isn't currently in nixpkgs and appears to be poorly maintained
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hw-probe";
+  version = "1.6.5";
+
+  src = fetchFromGitHub {
+    owner = "linuxhw";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-WlLSgjVLqGGtwCyyUn9X3XbE2Yhz6LD245+U2JgGd+k=";
+  };
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ perl ];
+
+  makeWrapperArgs =
+    let
+      requiredPrograms = [
+        hwinfo
+        dmidecode
+        smartmontools
+        pciutils
+        usbutils
+        edid-decode
+        iproute2 # (ip)
+        coreutils # (sort)
+        gnugrep
+        curl
+        gnutar
+        xz
+        kmod # (lsmod)
+      ];
+      recommendedPrograms = [
+        mcelog
+        hdparm
+        acpica-tools
+        drm_info
+        mesa-demos
+        memtester
+        sysstat # (iostat)
+        util-linuxMinimal # (rfkill)
+        xinput
+        libva-utils # (vainfo)
+        inxi
+        vulkan-tools
+        i2c-tools
+        opensc
+      ]
+      # cpuid is only compatible with i686 and x86_64
+      ++ lib.optional (lib.elem stdenv.hostPlatform.system cpuid.meta.platforms) cpuid;
+      conditionallyRecommendedPrograms = lib.optional systemdSupport systemd; # (systemd-analyze)
+      suggestedPrograms = [
+        hplip # (hp-probe)
+        sane-backends # (sane-find-scanner)
+        # pnputils # (lspnp)
+      ];
+      programs =
+        requiredPrograms
+        ++ conditionallyRecommendedPrograms
+        ++ lib.optionals withRecommended recommendedPrograms
+        ++ lib.optionals withSuggested suggestedPrograms;
+    in [
+      "--set" "PERL5LIB" "${makePerlPath [ LWP LWPProtocolHttps HTTPMessage URI HTTPDate TryTiny ]}"
+      "--prefix" "PATH" ":" "${lib.makeBinPath programs}"
+    ];
+
+  postInstall = ''
+    wrapProgram $out/bin/hw-probe \
+      $makeWrapperArgs
+  '';
+
+  meta = with lib; {
+    description = "Probe for hardware, check operability and find drivers";
+    homepage = "https://github.com/linuxhw/hw-probe";
+    platforms = with platforms; (linux ++ freebsd ++ netbsd ++ openbsd);
+    license = with licenses; [ lgpl21 bsdOriginal ];
+    maintainers = with maintainers; [ rehno-lindeque  ];
+    mainProgram = "hw-probe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hwinfo/default.nix b/nixpkgs/pkgs/tools/system/hwinfo/default.nix
new file mode 100644
index 000000000000..610a8ab77606
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hwinfo/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, flex
+, libuuid
+, libx86emu
+, perl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hwinfo";
+  version = "23.2";
+
+  src = fetchFromGitHub {
+    owner = "opensuse";
+    repo = "hwinfo";
+    rev = version;
+    hash = "sha256-YAhsnE1DJ5UlYAuhDxS/5IpfIJB6DrhCT3E0YiKENjU=";
+  };
+
+  nativeBuildInputs = [
+    flex
+  ];
+
+  buildInputs = [
+    libuuid
+    libx86emu
+    perl
+  ];
+
+  postPatch = ''
+    # VERSION and changelog are usually generated using Git
+    # unless HWINFO_VERSION is defined (see Makefile)
+    export HWINFO_VERSION="${version}"
+    sed -i 's|^\(TARGETS\s*=.*\)\<changelog\>\(.*\)$|\1\2|g' Makefile
+
+    substituteInPlace Makefile --replace "/sbin" "/bin" --replace "/usr/" "/"
+    substituteInPlace src/isdn/cdb/Makefile --replace "lex isdn_cdb.lex" "flex isdn_cdb.lex"
+    substituteInPlace hwinfo.pc.in --replace "prefix=/usr" "prefix=$out"
+  '';
+
+  makeFlags = [
+    "LIBDIR=/lib"
+  ];
+
+  installFlags = [
+    "DESTDIR=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "Hardware detection tool from openSUSE";
+    license = licenses.gpl2Only;
+    homepage = "https://github.com/openSUSE/hwinfo";
+    maintainers = with maintainers; [ bobvanderlinden ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/idle3tools/default.nix b/nixpkgs/pkgs/tools/system/idle3tools/default.nix
new file mode 100644
index 000000000000..d66a7f9b66a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/idle3tools/default.nix
@@ -0,0 +1,24 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "idle3-tools";
+  version = "0.9.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/idle3-tools/idle3-tools-${version}.tgz";
+    sha256 = "00ia7xq9yldxyl9gz0mr4xa568nav14p0fnv82f2rbbkg060cy4p";
+  };
+
+  preInstall = ''
+    installFlags=DESTDIR=$out
+  '';
+
+  meta = {
+    homepage = "https://idle3-tools.sourceforge.net/";
+    description = "Tool to get/set the infamous idle3 timer in WD HDDs";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+    mainProgram = "idle3ctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/illum/default.nix b/nixpkgs/pkgs/tools/system/illum/default.nix
new file mode 100644
index 000000000000..3d33be9ed635
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/illum/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, ninja, libevdev, libev, udev }:
+
+stdenv.mkDerivation rec {
+  pname = "illum";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "jmesmon";
+    repo = "illum";
+    rev = "v${version}";
+    sha256 = "S4lUBeRnZlRUpIxFdN/bh979xvdS7roF6/6Dk0ZUrnM=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "prevent-unplug-segfault"; # See https://github.com/jmesmon/illum/issues/19
+      url = "https://github.com/jmesmon/illum/commit/47b7cd60ee892379e5d854f79db343a54ae5a3cc.patch";
+      sha256 = "sha256-hIBBCIJXAt8wnZuyKye1RiEfOCelP3+4kcGrM43vFOE=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ ninja libevdev libev udev ];
+
+  configurePhase = ''
+    bash ./configure
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv illum-d $out/bin
+  '';
+
+  meta = {
+    homepage = "https://github.com/jmesmon/illum";
+    description = "Daemon that wires button presses to screen backlight level";
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.dancek ];
+    license = lib.licenses.agpl3;
+    mainProgram = "illum-d";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/incron/default.nix b/nixpkgs/pkgs/tools/system/incron/default.nix
new file mode 100644
index 000000000000..cc986d453569
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/incron/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "incron";
+  version = "0.5.12";
+  src = fetchFromGitHub {
+    owner = "ar-";
+    repo = "incron";
+    rev = "${pname}-${version}";
+    sha256 = "11d5f98cjafiv9h9zzzrw2s06s2fvdg8gp64km7mdprd2xmy6dih";
+  };
+
+  patches = [ ./default_path.patch ];
+
+  prePatch = ''
+    sed -i "s|/bin/bash|${bash}/bin/bash|g" usertable.cpp
+  '';
+
+  installFlags = [ "PREFIX=$(out)" ];
+  installTargets = [ "install-man" ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+
+    # make install doesn't work because setuid and permissions
+    # just manually install the binaries instead
+    cp incrond incrontab $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "A cron-like daemon which handles filesystem events";
+    homepage = "https://github.com/ar-/incron";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.aanderse ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/incron/default_path.patch b/nixpkgs/pkgs/tools/system/incron/default_path.patch
new file mode 100644
index 000000000000..ae173ea29e62
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/incron/default_path.patch
@@ -0,0 +1,36 @@
+diff --git usertable.cpp usertable.cpp
+index 11fd04b..a8681bd 100644
+--- a/usertable.cpp
++++ b/usertable.cpp
+@@ -43,9 +43,6 @@
+ #define DONT_FOLLOW(mask) (false)
+ #endif // IN_DONT_FOLLOW
+ 
+-// this is not enough, but...
+-#define DEFAULT_PATH "/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin"
+-
+ 
+ PROC_MAP UserTable::s_procMap;
+ 
+@@ -597,12 +594,20 @@ void UserTable::RunAsUser(std::string cmd) const
+     if (clearenv() != 0)
+       goto failed;
+ 
++    // try to recreate the user path as best as possible
++    std::string DEFAULT_PATH;
++    DEFAULT_PATH += "/run/wrappers/bin:";
++    DEFAULT_PATH += pwd->pw_dir;
++    DEFAULT_PATH += "/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/run/current-system/sw/bin:/etc/profiles/per-user/";
++    DEFAULT_PATH += pwd->pw_name;
++    DEFAULT_PATH += "/bin";
++
+     if (    setenv("LOGNAME",   pwd->pw_name,   1) != 0
+         ||  setenv("USER",      pwd->pw_name,   1) != 0
+         ||  setenv("USERNAME",  pwd->pw_name,   1) != 0
+         ||  setenv("HOME",      pwd->pw_dir,    1) != 0
+         ||  setenv("SHELL",     pwd->pw_shell,  1) != 0
+-        ||  setenv("PATH",      DEFAULT_PATH,   1) != 0)
++        ||  setenv("PATH",      DEFAULT_PATH.c_str(),   1) != 0)
+     {
+       goto failed;
+     }
diff --git a/nixpkgs/pkgs/tools/system/inxi/default.nix b/nixpkgs/pkgs/tools/system/inxi/default.nix
new file mode 100644
index 000000000000..a376146032ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/inxi/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchFromGitHub, perl, perlPackages, makeWrapper
+, ps, dnsutils # dig is recommended for multiple categories
+, withRecommends ? false # Install (almost) all recommended tools (see --recommends)
+, withRecommendedSystemPrograms ? withRecommends, util-linuxMinimal, dmidecode
+, file, hddtemp, iproute2, ipmitool, usbutils, kmod, lm_sensors, smartmontools
+, binutils, tree, upower, pciutils
+, withRecommendedDisplayInformationPrograms ? withRecommends, glxinfo, xorg
+}:
+
+let
+  prefixPath = programs:
+    "--prefix PATH ':' '${lib.makeBinPath programs}'";
+  recommendedSystemPrograms = lib.optionals withRecommendedSystemPrograms [
+    util-linuxMinimal dmidecode file hddtemp iproute2 ipmitool usbutils kmod
+    lm_sensors smartmontools binutils tree upower pciutils
+  ];
+  recommendedDisplayInformationPrograms = lib.optionals
+    withRecommendedDisplayInformationPrograms
+    ([ glxinfo ] ++ (with xorg; [ xdpyinfo xprop xrandr ]));
+  programs = [ ps dnsutils ] # Core programs
+    ++ recommendedSystemPrograms
+    ++ recommendedDisplayInformationPrograms;
+in stdenv.mkDerivation rec {
+  pname = "inxi";
+  version = "3.3.04-1";
+
+  src = fetchFromGitHub {
+    owner = "smxi";
+    repo = "inxi";
+    rev = version;
+    sha256 = "sha256-/EutIHQGLiRcRD/r8LJYG7oJBb7EAhR5cn6QiC7zMOc=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp inxi $out/bin/
+    wrapProgram $out/bin/inxi \
+      --set PERL5LIB "${perlPackages.makePerlPath (with perlPackages; [ CpanelJSONXS ])}" \
+      ${prefixPath programs}
+    mkdir -p $out/share/man/man1
+    cp inxi.1 $out/share/man/man1/
+  '';
+
+  meta = with lib; {
+    description = "A full featured CLI system information tool";
+    longDescription = ''
+      inxi is a command line system information script built for console and
+      IRC. It is also used a debugging tool for forum technical support to
+      quickly ascertain users' system configurations and hardware. inxi shows
+      system hardware, CPU, drivers, Xorg, Desktop, Kernel, gcc version(s),
+      Processes, RAM usage, and a wide variety of other useful information.
+    '';
+    homepage = "https://smxi.org/docs/inxi.htm";
+    changelog = "https://github.com/smxi/inxi/blob/${version}/inxi.changelog";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+    mainProgram = "inxi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ioping/default.nix b/nixpkgs/pkgs/tools/system/ioping/default.nix
new file mode 100644
index 000000000000..f610258cf503
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ioping/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "ioping";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "koct9i";
+    repo = "ioping";
+    rev = "v${version}";
+    sha256 = "10bv36bqga8sdifxzywzzpjil7vmy62psirz7jbvlsq1bw71aiid";
+  };
+
+  patches = [
+    # add netdata support: https://github.com/koct9i/ioping/pull/41
+    (fetchpatch {
+      url = "https://github.com/koct9i/ioping/commit/e7b818457ddb952cbcc13ae732ba0328f6eb73b3.patch";
+      sha256 = "122ivp4rqsnjszjfn33z8li6glcjhy7689bgipi8cgs5q55j99gf";
+    })
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Disk I/O latency measuring tool";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+    license = licenses.gpl3Plus;
+    homepage = "https://github.com/koct9i/ioping";
+    mainProgram = "ioping";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ior/default.nix b/nixpkgs/pkgs/tools/system/ior/default.nix
new file mode 100644
index 000000000000..c2616797da38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ior/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, mpi, perl, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "ior";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "hpc";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-pSjptDfiPlaToXe1yHyk9MQMC9PqcVSjqAmWLD11iOM=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ mpi perl ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://ior.readthedocs.io/en/latest/";
+    description = "Parallel file system I/O performance test";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bzizou ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ipmitool/default.nix b/nixpkgs/pkgs/tools/system/ipmitool/default.nix
new file mode 100644
index 000000000000..407a1f91b3bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ipmitool/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, openssl, readline, fetchurl }:
+
+let
+
+  iana-enterprise-numbers = fetchurl {
+    url = "https://web.archive.org/web/20230312103209id_/https://www.iana.org/assignments/enterprise-numbers.txt";
+    sha256 = "sha256-huFWygMEylBKBMLV16UE6xLWP6Aw1FGYk5h1q5CErUs=";
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "ipmitool";
+  version = "1.8.19";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "IPMITOOL_${lib.replaceStrings ["."] ["_"] version}";
+    hash = "sha256-VVYvuldRIHhaIUibed9cLX8Avfy760fdBLNO8MoUKCk=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ openssl readline ];
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace 'AC_MSG_WARN([** Neither wget nor curl could be found.])' 'AM_CONDITIONAL([DOWNLOAD], [true])'
+    cp ${iana-enterprise-numbers} enterprise-numbers
+  '';
+
+  meta = with lib; {
+    description = "Command-line interface to IPMI-enabled devices";
+    license = licenses.bsd3;
+    homepage = "https://github.com/ipmitool/ipmitool";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ipmiutil/default.nix b/nixpkgs/pkgs/tools/system/ipmiutil/default.nix
new file mode 100644
index 000000000000..b08d705cad17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ipmiutil/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "ipmiutil";
+  version = "3.1.6";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/ipmiutil/pmiutil-${version}.tar.gz";
+    sha256 = "0jlfb4firph3hc0854n7cw7yjwlax3wdxn37r2jl0l94dj684548";
+  };
+
+  buildInputs = [ openssl ];
+
+  preBuild = ''
+    sed -e "s@/usr@$out@g" -i Makefile */Makefile */*/Makefile
+    sed -e "s@/etc@$out/etc@g" -i Makefile */Makefile */*/Makefile
+    sed -e "s@/var@$out/var@g" -i Makefile */Makefile */*/Makefile
+  '';
+
+  env.NIX_CFLAGS_COMPILE = "-fno-stack-protector";
+
+  meta = with lib; {
+    description = "An easy-to-use IPMI server management utility";
+    homepage = "https://ipmiutil.sourceforge.net/";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+    downloadPage = "https://sourceforge.net/projects/ipmiutil/files/ipmiutil/";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/java-service-wrapper/default.nix b/nixpkgs/pkgs/tools/system/java-service-wrapper/default.nix
new file mode 100644
index 000000000000..955c0fe62a7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/java-service-wrapper/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchurl
+, jdk
+, ant
+, cunit
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "java-service-wrapper";
+  version = "3.5.54";
+
+  src = fetchurl {
+    url = "https://wrapper.tanukisoftware.com/download/${version}/wrapper_${version}_src.tar.gz";
+    hash = "sha256-t16i1WqvDqr4J5sDldeUk6+DAyN/6oWGV6eME5yj+i4=";
+  };
+
+  strictDeps = true;
+
+  buildInputs = [ cunit ncurses ];
+
+  nativeBuildInputs = [ ant jdk ];
+
+  postConfigure = ''
+    substituteInPlace default.properties \
+      --replace "javac.target.version=1.4" "javac.target.version=8"
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    export JAVA_HOME=${jdk}/lib/openjdk/
+    export JAVA_TOOL_OPTIONS=-Djava.home=$JAVA_HOME
+    export CLASSPATH=${jdk}/lib/openjdk/lib/tools.jar
+
+    ant -f build.xml -Dbits=${if stdenv.isi686 then "32" else "64"}
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,lib}
+    cp bin/wrapper $out/bin/wrapper
+    cp lib/wrapper.jar $out/lib/wrapper.jar
+    cp lib/libwrapper.so $out/lib/libwrapper.so
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Enables a Java Application to be run as a Windows Service or Unix Daemon";
+    homepage = "https://wrapper.tanukisoftware.com/";
+    changelog = "https://wrapper.tanukisoftware.com/doc/english/release-notes.html#${version}";
+    license = licenses.gpl2Only;
+    platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" ];
+    maintainers = [ maintainers.suhr ];
+    mainProgram = "wrapper";
+    # Broken for Musl at 2024-01-17. Errors as:
+    # logger.c:81:12: fatal error: gnu/libc-version.h: No such file or directory
+    # Tracking issue: https://github.com/NixOS/nixpkgs/issues/281557
+    broken = stdenv.hostPlatform.isMusl;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/jobber/default.nix b/nixpkgs/pkgs/tools/system/jobber/default.nix
new file mode 100644
index 000000000000..d9620e49977b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/jobber/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoModule, fetchFromGitHub, gotools }:
+
+buildGoModule rec {
+  pname = "jobber";
+  version = "1.4.4";
+
+  src = fetchFromGitHub {
+    owner = "dshearer";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-mLYyrscvT/VK9ehwkPUq4RbwHb+6Wjvt7ZXk/fI0HT4=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ gotools ];
+
+  postConfigure = "go generate ./...";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/dshearer/jobber/common.jobberVersion=${version}"
+    "-X github.com/dshearer/jobber/common.etcDirPath=${placeholder "out"}/etc"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/etc $out/libexec
+    $out/bin/jobbermaster defprefs --libexec $out/libexec > $out/etc/jobber.conf
+    mv $out/bin/jobber{master,runner} $out/libexec/
+  '';
+
+  meta = with lib; {
+    homepage = "https://dshearer.github.io/jobber";
+    changelog = "https://github.com/dshearer/jobber/releases/tag/v${version}";
+    description = "An alternative to cron, with sophisticated status-reporting and error-handling";
+    license = licenses.mit;
+    maintainers = with maintainers; [ urandom ];
+    mainProgram = "jobber";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/journalwatch/default.nix b/nixpkgs/pkgs/tools/system/journalwatch/default.nix
new file mode 100644
index 000000000000..b732af477169
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/journalwatch/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder, systemd, pytest }:
+
+buildPythonPackage rec {
+  pname = "journalwatch";
+  version = "1.1.0";
+  disabled = pythonOlder "3.3";
+
+  src = fetchFromGitHub {
+    owner = "The-Compiler";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha512-60+ewzOIox2wsQFXMAgD7XN+zvPA1ScPz6V4MB5taVDhqCxUTMVOxodf+4AMhxtNQloXZ3ye7/0bjh1NPDjxQg==";
+  };
+
+  # can be removed post 1.1.0
+  postPatch = ''
+    substituteInPlace test_journalwatch.py \
+      --replace "U Thu Jan  1 00:00:00 1970 prio foo [1337]" "U Thu Jan  1 00:00:00 1970 pprio foo [1337]"
+  '';
+
+
+  doCheck = true;
+  nativeCheckInputs = [ pytest ];
+  checkPhase = ''
+    pytest
+  '';
+
+  propagatedBuildInputs = [
+    systemd
+  ];
+
+
+  meta = with lib; {
+    description = "A tool to find error messages in the systemd journal";
+    homepage = "https://github.com/The-Compiler/journalwatch";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ florianjacob ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/jsvc/default.nix b/nixpkgs/pkgs/tools/system/jsvc/default.nix
new file mode 100644
index 000000000000..f8f67b0f45f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/jsvc/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, commonsDaemon, jdk, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "jsvc";
+  version = "1.3.4";
+
+  src = fetchurl {
+    url = "https://downloads.apache.org//commons/daemon/source/commons-daemon-${version}-src.tar.gz";
+    sha256 = "sha256-30hJ0F5YFmEOZ4IYg/T8HhFySgu4t4uEsh7dUDns674=";
+  };
+
+  buildInputs = [ commonsDaemon ];
+  nativeBuildInputs = [ jdk makeWrapper ];
+
+  preConfigure = ''
+    cd ./src/native/unix/
+    sh ./support/buildconf.sh
+  '';
+
+  preBuild = ''
+    export JAVA_HOME=${jre}
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp jsvc $out/bin/jsvc
+    chmod +x $out/bin/jsvc
+    wrapProgram $out/bin/jsvc --set JAVA_HOME "${jre}"
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage    = "https://commons.apache.org/proper/commons-daemon";
+    description = "A part of the Apache Commons Daemon software, a set of utilities and Java support classes for running Java applications as server processes";
+    maintainers = with lib.maintainers; [ rsynnest ];
+    license     = lib.licenses.asl20;
+    platforms = with lib.platforms; unix;
+    mainProgram = "jsvc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/jump/default.nix b/nixpkgs/pkgs/tools/system/jump/default.nix
new file mode 100644
index 000000000000..483ea356f0e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/jump/default.nix
@@ -0,0 +1,36 @@
+{ buildGoModule, fetchFromGitHub, lib, installShellFiles }:
+
+buildGoModule rec {
+  pname = "jump";
+  version = "0.51.0";
+
+  src = fetchFromGitHub {
+    owner = "gsamokovarov";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-nlCuotEiAX2+xx7T8jWZo2p4LNLhWXDdcU6DxJprgx0=";
+  };
+
+  vendorHash = "sha256-nMUqZWdq//q/DNthvpKiYLq8f95O0QoItyX5w4vHzSA=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installManPage man/j.1 man/jump.1
+  '';
+
+  meta = with lib; {
+    description = "Navigate directories faster by learning your habits";
+    longDescription = ''
+      Jump integrates with the shell and learns about your
+      navigational habits by keeping track of the directories you visit. It
+      strives to give you the best directory for the shortest search term.
+    '';
+    homepage = "https://github.com/gsamokovarov/jump";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "jump";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/kanata/default.nix b/nixpkgs/pkgs/tools/system/kanata/default.nix
new file mode 100644
index 000000000000..eab7fb3d4b17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/kanata/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, lib
+, darwin
+, rustPlatform
+, fetchFromGitHub
+, withCmd ? false
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kanata";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "jtroo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ci/0Ksmi0uNHIvpZlihWvGeNabzmk+k3fUeuMDVpFeE=";
+  };
+
+  cargoHash = "sha256-IzgVF6SHJjOB48VehQ5taD5iWQXFKLcVBWTEl3ArkGQ=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.IOKit ];
+
+  buildFeatures = lib.optional withCmd "cmd";
+
+  # Workaround for https://github.com/nixos/nixpkgs/issues/166205
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  postInstall = ''
+    install -Dm 444 assets/kanata-icon.svg $out/share/icons/hicolor/scalable/apps/kanata.svg
+  '';
+
+  meta = with lib; {
+    description = "A tool to improve keyboard comfort and usability with advanced customization";
+    homepage = "https://github.com/jtroo/kanata";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ bmanuel linj ];
+    platforms = platforms.unix;
+    mainProgram = "kanata";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/kmon/default.nix b/nixpkgs/pkgs/tools/system/kmon/default.nix
new file mode 100644
index 000000000000..df7ccfa4cf25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/kmon/default.nix
@@ -0,0 +1,35 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles, libxcb }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kmon";
+  version = "1.6.4";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-61HLWSGACnonjp/n14sVo8DdVOUbOpIQHpPL0PmKmpI=";
+  };
+
+  cargoSha256 = "sha256-yxpM4aUPVfaMuYwj50C/Uwh/diraJLON1mNjuYJR6Ck=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ libxcb ];
+
+  postInstall = ''
+    installManPage $releaseDir/../man/kmon.8
+    installShellCompletion $releaseDir/../completions/kmon.{bash,fish} \
+      --zsh $releaseDir/../completions/_kmon
+  '';
+
+  meta = with lib; {
+    description = "Linux Kernel Manager and Activity Monitor";
+    homepage = "https://github.com/orhun/kmon";
+    changelog = "https://github.com/orhun/kmon/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ figsoda misuzu matthiasbeyer ];
+    mainProgram = "kmon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/krakenx/default.nix b/nixpkgs/pkgs/tools/system/krakenx/default.nix
new file mode 100644
index 000000000000..a5a2f7e2ef0d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/krakenx/default.nix
@@ -0,0 +1,23 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "krakenx";
+  version = "0.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1khw1rxra5hn7hwp16i6kgj89znq8vjsyly3r2dxx2z2bddil000";
+  };
+
+  propagatedBuildInputs = lib.singleton python3Packages.pyusb;
+
+  doCheck = false; # there are no tests
+
+  meta = with lib; {
+    description = "Python script to control NZXT cooler Kraken X52/X62/X72";
+    homepage = "https://github.com/KsenijaS/krakenx";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.willibutz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/lact/default.nix b/nixpkgs/pkgs/tools/system/lact/default.nix
new file mode 100644
index 000000000000..16ce41007ea7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/lact/default.nix
@@ -0,0 +1,83 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, blueprint-compiler
+, pkg-config
+, wrapGAppsHook
+, gdk-pixbuf
+, gtk4
+, libdrm
+, vulkan-loader
+, coreutils
+, hwdata
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lact";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "ilya-zlobintsev";
+    repo = "LACT";
+    rev = "v${version}";
+    hash = "sha256-B3YAlEKELbHGIQ8AIvortYZsHY6wsuaFxm9lC9Uh+Zg=";
+  };
+
+  cargoHash = "sha256-MbE6OrYJGPoQPQggxa9dssx8Nc6/5w53V58E1yLLeq0=";
+
+  nativeBuildInputs = [
+    blueprint-compiler
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    gtk4
+    libdrm
+    vulkan-loader
+  ];
+
+  checkFlags = [
+    # tries and fails to initialize gtk
+    "--skip=app::root_stack::thermals_page::fan_curve_frame::tests::set_get_curve"
+  ];
+
+  postPatch = ''
+    substituteInPlace lact-daemon/src/server/system.rs \
+      --replace 'Command::new("uname")' 'Command::new("${coreutils}/bin/uname")'
+
+    substituteInPlace res/lactd.service \
+      --replace ExecStart={lact,$out/bin/lact}
+
+    substituteInPlace res/io.github.lact-linux.desktop \
+      --replace Exec={lact,$out/bin/lact}
+
+    pushd $cargoDepsCopy/pciid-parser
+    oldHash=$(sha256sum src/lib.rs | cut -d " " -f 1)
+    substituteInPlace src/lib.rs --subst-var-by hwdata ${hwdata}
+    substituteInPlace .cargo-checksum.json \
+      --replace $oldHash $(sha256sum src/lib.rs | cut -d " " -f 1)
+    popd
+  '';
+
+  postInstall = ''
+    install -Dm444 res/lactd.service -t $out/lib/systemd/system
+    install -Dm444 res/io.github.lact-linux.desktop -t $out/share/applications
+    install -Dm444 res/io.github.lact-linux.png -t $out/share/pixmaps
+  '';
+
+  postFixup = ''
+    patchelf $out/bin/.lact-wrapped \
+      --add-rpath ${lib.makeLibraryPath [ vulkan-loader ]}
+  '';
+
+  meta = with lib; {
+    description = "Linux AMDGPU Controller";
+    homepage = "https://github.com/ilya-zlobintsev/LACT";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    platforms = platforms.linux;
+    mainProgram = "lact";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ledmon/default.nix b/nixpkgs/pkgs/tools/system/ledmon/default.nix
new file mode 100644
index 000000000000..0ca1aa441db7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ledmon/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, perl, udev, sg3_utils }:
+
+stdenv.mkDerivation rec {
+  pname = "ledmon";
+  version = "0.92";
+
+  src = fetchFromGitHub {
+    owner = "intel";
+    repo = "ledmon";
+    rev = "v${version}";
+    sha256 = "1lz59606vf2sws5xwijxyffm8kxcf8p9qbdpczsq1b5mm3dk6lvp";
+  };
+
+  nativeBuildInputs = [
+    perl # for pod2man
+  ];
+  buildInputs = [ udev sg3_utils ];
+
+  installTargets = [ "install" "install-systemd" ];
+
+  makeFlags = [
+    "MAN_INSTDIR=${placeholder "out"}/share/man"
+    "SYSTEMD_SERVICE_INSTDIR=${placeholder "out"}/lib/systemd/system"
+    "LEDCTL_INSTDIR=${placeholder "out"}/sbin"
+    "LEDMON_INSTDIR=${placeholder "out"}/sbin"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/intel/ledmon";
+    description = "Enclosure LED Utilities";
+    platforms = platforms.linux;
+    license = with licenses; [ gpl2 ];
+    maintainers = with lib.maintainers; [ sorki ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/loadwatch/default.nix b/nixpkgs/pkgs/tools/system/loadwatch/default.nix
new file mode 100644
index 000000000000..27e33a22d4b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/loadwatch/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchgit }:
+
+stdenv.mkDerivation {
+  pname = "loadwatch";
+  version = "1.1-1-g6d2544c";
+
+  src = fetchgit {
+    url = "git://woffs.de/git/fd/loadwatch.git";
+    sha256 = "1bhw5ywvhyb6snidsnllfpdi1migy73wg2gchhsfbcpm8aaz9c9b";
+    rev = "6d2544c0caaa8a64bbafc3f851e06b8056c30e6e";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install loadwatch lw-ctl $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Run a program using only idle cycles";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ woffs ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/localtime/default.nix b/nixpkgs/pkgs/tools/system/localtime/default.nix
new file mode 100644
index 000000000000..bdb1fa2e7444
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/localtime/default.nix
@@ -0,0 +1,44 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, m4
+}:
+
+buildGoModule {
+  pname = "localtime";
+  version = "unstable-2022-02-20";
+
+  src = fetchFromGitHub {
+    owner = "Stebalien";
+    repo = "localtime";
+    rev = "c1e10aa4141ed2bb01986b48e0e942e618993c06";
+    hash = "sha256-bPQ1c2KUTkxx2g7IvLmrKgJKfRHTLlTXLR/QQ0O4CrI=";
+  };
+
+  vendorHash = "sha256-12JnEU41sp9qRP07p502EYogveE+aNdfmLwlDRbIdxU=";
+
+  nativeBuildInputs = [ m4 ];
+
+  buildPhase = ''
+    runHook preBuild
+    make PREFIX="$out"
+    runHook postBuild
+  '';
+
+  doCheck = false; # no tests
+
+  installPhase = ''
+    runHook preInstall
+    make PREFIX="$out" install
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A daemon for keeping the system timezone up-to-date based on the current location";
+    homepage = "https://github.com/Stebalien/localtime";
+    maintainers = with maintainers; [ lovesegfault ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    mainProgram = "localtimed";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/logcheck/default.nix b/nixpkgs/pkgs/tools/system/logcheck/default.nix
new file mode 100644
index 000000000000..c878ea906621
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/logcheck/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, lockfileProgs, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "logcheck";
+  version = "1.4.3";
+  _name    = "logcheck_${version}";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/l/logcheck/${_name}.tar.xz";
+    sha256 = "sha256-rYOugL14C9rl7v1ArVmj6XuFrTpJYqp8ANmO073/zdA=";
+  };
+
+  prePatch = ''
+    # do not set sticky bit in nix store.
+    substituteInPlace Makefile --replace 2750 0750
+  '';
+
+  preConfigure = ''
+    substituteInPlace src/logtail --replace "/usr/bin/perl" "${perlPackages.perl}/bin/perl"
+    substituteInPlace src/logtail2 --replace "/usr/bin/perl" "${perlPackages.perl}/bin/perl"
+
+    sed -i -e 's|! -f /usr/bin/lockfile|! -f ${lockfileProgs}/bin/lockfile|' \
+           -e 's|^\([ \t]*\)lockfile-|\1${lockfileProgs}/bin/lockfile-|' \
+           -e "s|/usr/sbin/logtail2|$out/sbin/logtail2|" \
+           -e 's|mime-construct|${perlPackages.mimeConstruct}/bin/mime-construct|' \
+           -e 's|\$(run-parts --list "\$dir")|"$dir"/*|' src/logcheck
+  '';
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "SBINDIR=sbin"
+    "BINDIR=bin"
+    "SHAREDIR=share/logtail/detectrotate"
+  ];
+
+  meta = with lib; {
+    description = "Mails anomalies in the system logfiles to the administrator";
+    longDescription = ''
+      Mails anomalies in the system logfiles to the administrator.
+
+      Logcheck helps spot problems and security violations in your logfiles automatically and will send the results to you by e-mail.
+      Logcheck was part of the Abacus Project of security tools, but this version has been rewritten.
+    '';
+    homepage = "https://salsa.debian.org/debian/logcheck";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.bluescreen303 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/logrotate/default.nix b/nixpkgs/pkgs/tools/system/logrotate/default.nix
new file mode 100644
index 000000000000..e92f34188f4f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/logrotate/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, gzip, popt, autoreconfHook
+, aclSupport ? true, acl
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "logrotate";
+  version = "3.21.0";
+
+  src = fetchFromGitHub {
+    owner = "logrotate";
+    repo = "logrotate";
+    rev = version;
+    sha256 = "sha256-w86y6bz/nvH/0mIbn2XrSs5KdOM/xadnlZMQZp4LdGQ=";
+  };
+
+  # Logrotate wants to access the 'mail' program; to be done.
+  configureFlags = [
+    "--with-compress-command=${gzip}/bin/gzip"
+    "--with-uncompress-command=${gzip}/bin/gunzip"
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ popt ] ++ lib.optionals aclSupport [ acl ];
+
+  passthru.tests = {
+    nixos-logrotate = nixosTests.logrotate;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/logrotate/logrotate";
+    description = "Rotates and compresses system logs";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.viric ];
+    platforms = platforms.all;
+    mainProgram = "logrotate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/lr/default.nix b/nixpkgs/pkgs/tools/system/lr/default.nix
new file mode 100644
index 000000000000..e3f62a79e4c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/lr/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "lr";
+  version = "1.6";
+
+  src = fetchFromGitHub {
+    owner = "chneukirchen";
+    repo = "lr";
+    rev = "v${version}";
+    sha256 = "sha256-TcP0jLFemdmWzGa4/RX7N6xUUTgKsI7IEOD7GfuuPWI=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/chneukirchen/lr";
+    description = "List files recursively";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ vikanezrimaya ];
+    mainProgram = "lr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/mac-fdisk/default.nix b/nixpkgs/pkgs/tools/system/mac-fdisk/default.nix
new file mode 100644
index 000000000000..94e7996c1616
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/mac-fdisk/default.nix
@@ -0,0 +1,112 @@
+{ stdenv
+, lib
+, fetchzip
+, fetchpatch
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mac-fdisk";
+  version = "0.1.16";
+
+  src = fetchzip {
+    url = "https://deb.debian.org/debian/pool/main/m/mac-fdisk/mac-fdisk_0.1.orig.tar.gz";
+    sha256 = "sha256-pYNyhPvRKdIje0Rpay0OzmrkGcl+/JOhMv7r+2LZk/Q=";
+  };
+
+  patches = [
+    # Debian's changeset, extracted into a patch
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/1b708c8a90e3548c4954c6367a9376f76f3746bd/user/mac-fdisk/mac-fdisk-0.1-debian.patch";
+      sha256 = "sha256-a9pGF+UsFeZiXgracmT4anqgpmcGcS/W3jGtFzHZtt4=";
+    })
+    # Include a lot more headers and remove a bunch of braindead __linux__ checks
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/1fa4c88ee21866eeb0feae8f6b0bf609a04711cc/user/mac-fdisk/mac-fdisk-0.1-headers.patch";
+      sha256 = "sha256-FIk9K+lP+3e1pgmNfymTdpdSoTpBDv29kmwYgqYwWQw=";
+    })
+    # Add support for more architectures
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/1b708c8a90e3548c4954c6367a9376f76f3746bd/user/mac-fdisk/mac-fdisk-0.1-more-arches.patch";
+      sha256 = "sha256-HNRmzETUmKfZQFrjg6Y/HPwUnLk0vO5DokfU4umdOm0=";
+    })
+    # From p16 (source?), adjusts some types & fixes PPC64 support
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/1fa4c88ee21866eeb0feae8f6b0bf609a04711cc/user/mac-fdisk/mac-fdisk-0.1_p16-ppc64.patch";
+      sha256 = "sha256-GK0nfga59nOXotkbKI+2ejA9TtyZUwDIxuXWFGGbeFg=";
+    })
+    # From p16 (source?), makes some inlines static
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/1fa4c88ee21866eeb0feae8f6b0bf609a04711cc/user/mac-fdisk/mac-fdisk-0.1_p16-proper-inline.patch";
+      sha256 = "sha256-wr2teKpm0FyqNudKYlTD49pTFDis33Fo+0LULNYIJko=";
+    })
+    # Adds x86_64 support
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/1b708c8a90e3548c4954c6367a9376f76f3746bd/user/mac-fdisk/mac-fdisk-amd64.patch";
+      sha256 = "sha256-iO4/sY5sGKQyymMmAOb/TlCc9id2qgEDw7E8pFZpsHI=";
+    })
+    # Fix missing header in fdisk.c on musl
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/1fa4c88ee21866eeb0feae8f6b0bf609a04711cc/user/mac-fdisk/mac-fdisk-fdisk-header-musl.patch";
+      sha256 = "sha256-mKBVjvLKtxKPADeoPqp17YdJ1QWj2enAYhKKSqTnQ44=";
+    })
+    # Support disks >550GB
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/1fa4c88ee21866eeb0feae8f6b0bf609a04711cc/user/mac-fdisk/mac-fdisk-large-disk-support.patch";
+      sha256 = "sha256-IXZZdozqZKyZEz87ZzB8Jof22GgvHf4GaXBqSKn8su8=";
+    })
+    # Enable Large File Support (>2GiB)
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/1fa4c88ee21866eeb0feae8f6b0bf609a04711cc/user/mac-fdisk/mac-fdisk-largerthan2gb.patch";
+      sha256 = "sha256-ATK7QYXV7BOk8iIFeXY8g+ZHLuuhww9pcrqOMDn/oLM=";
+    })
+    # Fix compilation on non-glibc
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/1fa4c88ee21866eeb0feae8f6b0bf609a04711cc/user/mac-fdisk/mac-fdisk-non-glibc-support.patch";
+      sha256 = "sha256-CBZUKf7dPvvpuG5L+SI1FQ4W7/fDgeKXHUMFkJNu/MY=";
+    })
+    # Flush stdout after printing prompt for better UX
+    (fetchpatch {
+      url = "https://git.adelielinux.org/adelie/packages/-/raw/656ae6bf9f8a64aee95c4797b20bfe713627f1f4/user/mac-fdisk/flush-stdout.patch";
+      sha256 = "sha256-k7+UPiUf/oCQdDhxDcC+FRwkxS89WSsYzFw6fUB/10I=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = "-D_GNU_SOURCE";
+
+  hardeningDisable = [ "format" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 pdisk $out/sbin/mac-fdisk
+    install -Dm755 fdisk $out/sbin/pmac-fdisk
+
+    for manpage in {,p}mac-fdisk.8; do
+      mv "$manpage".in $manpage
+      installManPage $manpage
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "68K and PowerPC Mac disk partitioning utility, Adélie Linux version";
+    # http://ftp.mklinux.apple.com:/pub/Other_Tools/ but that one's looong dead, link goes to the patch compilation we're using
+    homepage = "https://git.adelielinux.org/adelie/packages/-/tree/master/user/mac-fdisk";
+    license = with licenses; [
+      hpnd # original license statements seems to match this (in files that are shared with pdisk)
+      gpl1Plus # fdisk.c
+    ];
+    maintainers = with maintainers; [ OPNA2608 ];
+    # the toolchain that's being expected for Mac support (SCSI.h from Universal Headers 2.0, SIOUX.h from Metrowerks CoreWarrior) is ancient, unsure about BSDs
+    platforms = platforms.linux;
+    badPlatforms = platforms.aarch64; # missing some platform definitions
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/mcron/default.nix b/nixpkgs/pkgs/tools/system/mcron/default.nix
new file mode 100644
index 000000000000..d0bb370396a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/mcron/default.nix
@@ -0,0 +1,38 @@
+{ fetchurl, lib, stdenv, guile, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "mcron";
+  version = "1.2.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/mcron/mcron-${version}.tar.gz";
+    sha256 = "0bkn235g2ia4f7ispr9d55c7bc18282r3qd8ldhh5q2kiin75zi0";
+  };
+
+  # don't attempt to chmod +s files in the nix store
+  postPatch = ''
+    sed -E -i '/chmod u\+s/d' Makefile.in
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ guile ];
+
+  doCheck = true;
+
+  meta = {
+    description = "Flexible implementation of `cron' in Guile";
+
+    longDescription = ''
+      The GNU package mcron (Mellor's cron) is a 100% compatible
+      replacement for Vixie cron.  It is written in pure Guile, and
+      allows configuration files to be written in scheme (as well as
+      Vixie's original format) for infinite flexibility in specifying
+      when jobs should be run.  Mcron was written by Dale Mellor.
+    '';
+
+    homepage = "https://www.gnu.org/software/mcron/";
+
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/mediawriter/default.nix b/nixpkgs/pkgs/tools/system/mediawriter/default.nix
new file mode 100644
index 000000000000..bf2b4ce27ff4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/mediawriter/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, adwaita-qt6
+, appstream-glib
+, cmake
+, fetchFromGitHub
+, qt6
+, udisks2
+, xz
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mediawriter";
+  version = "5.0.9";
+
+  src = fetchFromGitHub {
+    owner = "FedoraQt";
+    repo = "MediaWriter";
+    rev = "refs/tags/${version}";
+    hash = "sha256-FmMiv78r95shCpqN5PV6Oxms/hQY9ycqRn9L61aR8n4=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    qt6.wrapQtAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    adwaita-qt6
+    appstream-glib
+    qt6.qtbase
+    qt6.qtdeclarative
+    qt6.qtsvg
+    udisks2
+    xz
+  ];
+
+  meta = with lib; {
+    description = "Tool to write images files to portable media";
+    homepage = "https://github.com/FedoraQt/MediaWriter";
+    changelog = "https://github.com/FedoraQt/MediaWriter/releases/tag/${version}";
+    license = licenses.lgpl2Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "mediawriter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/memtester/default.nix b/nixpkgs/pkgs/tools/system/memtester/default.nix
new file mode 100644
index 000000000000..7753ed804e16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/memtester/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "memtester";
+  version = "4.6.0";
+
+  preConfigure = ''
+    echo "$CC" > conf-cc
+    echo "$CC" > conf-ld
+  '';
+
+  src = fetchurl {
+    url = "http://pyropus.ca/software/memtester/old-versions/memtester-${version}.tar.gz";
+    sha256 = "sha256-yf5Ot+gMjO9SAvkGXEwGgvVhZkfARV6RalcA+Y49uy4=";
+  };
+
+  installFlags = [ "INSTALLPATH=$(out)" ];
+
+  meta = with lib; {
+    description = "A userspace utility for testing the memory subsystem for faults";
+    homepage = "http://pyropus.ca/software/memtester/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.unix;
+    mainProgram = "memtester";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/minijail/default.nix b/nixpkgs/pkgs/tools/system/minijail/default.nix
new file mode 100644
index 000000000000..87913252ab4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/minijail/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, lib, fetchFromGitiles, libcap }:
+
+stdenv.mkDerivation rec {
+  pname = "minijail";
+  version = "18";
+
+  src = fetchFromGitiles {
+    url = "https://android.googlesource.com/platform/external/minijail";
+    rev = "linux-v${version}";
+    sha256 = "sha256-OpwzISZ5iZNQvJAX7UJJ4gELEaVfcQgY9cqMM0YvBzc=";
+  };
+
+  buildInputs = [ libcap ];
+
+  makeFlags = [ "ECHO=echo" "LIBDIR=$(out)/lib" ];
+
+  postPatch = ''
+    substituteInPlace Makefile --replace /bin/echo echo
+    patchShebangs platform2_preinstall.sh
+  '';
+
+  # causes redefinition of _FORTIFY_SOURCE
+  hardeningDisable = [ "fortify3" ];
+
+  installPhase = ''
+    ./platform2_preinstall.sh ${version} $out/include/chromeos
+
+    mkdir -p $out/lib/pkgconfig $out/include/chromeos $out/bin \
+        $out/share/minijail
+
+    cp -v *.so $out/lib
+    cp -v *.pc $out/lib/pkgconfig
+    cp -v libminijail.h scoped_minijail.h $out/include/chromeos
+    cp -v minijail0 $out/bin
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://android.googlesource.com/platform/external/minijail/";
+    description = "Sandboxing library and application using Linux namespaces and capabilities";
+    changelog = "https://android.googlesource.com/platform/external/minijail/+/refs/tags/linux-v${version}";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pcarrier qyliss ];
+    platforms = platforms.linux;
+    mainProgram = "minijail0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/minijail/tools.nix b/nixpkgs/pkgs/tools/system/minijail/tools.nix
new file mode 100644
index 000000000000..266879a30333
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/minijail/tools.nix
@@ -0,0 +1,40 @@
+{ lib, buildPythonApplication, pkgsBuildTarget, python, minijail }:
+
+let
+  targetClang = pkgsBuildTarget.targetPackages.clangStdenv.cc;
+in
+
+buildPythonApplication {
+  pname = "minijail-tools";
+  inherit (minijail) version src;
+
+  postPatch = ''
+    substituteInPlace Makefile --replace /bin/echo echo
+  '';
+
+  postConfigure = ''
+    substituteInPlace tools/compile_seccomp_policy.py \
+        --replace "'constants.json'" "'$out/share/constants.json'"
+  '';
+
+  preBuild = ''
+    make libconstants.gen.c libsyscalls.gen.c
+    ${targetClang}/bin/${targetClang.targetPrefix}cc -S -emit-llvm \
+        libconstants.gen.c libsyscalls.gen.c
+    ${python.pythonOnBuildForHost.interpreter} tools/generate_constants_json.py \
+        --output constants.json \
+        libconstants.gen.ll libsyscalls.gen.ll
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp -v constants.json $out/share/constants.json
+  '';
+
+  meta = with lib; {
+    homepage = "https://android.googlesource.com/platform/external/minijail/+/refs/heads/master/tools/";
+    description = "A set of tools for minijail";
+    license = licenses.asl20;
+    inherit (minijail.meta) maintainers platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/mlc/default.nix b/nixpkgs/pkgs/tools/system/mlc/default.nix
new file mode 100644
index 000000000000..409738e4a353
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/mlc/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, patchelf }:
+stdenv.mkDerivation rec {
+  pname = "mlc";
+  version = "3.9a";
+
+  src = fetchurl {
+    url = "https://downloadmirror.intel.com/736634/mlc_v${version}.tgz";
+    sha256 = "3vNI/CQwyY4KMFest1wkVYecsxigjXyGIUIKai979W4=";
+  };
+
+  sourceRoot = "Linux";
+
+  installPhase = ''
+    install -Dm755 mlc $out/bin/mlc
+  '';
+
+  nativeBuildInputs = [ patchelf ];
+
+  fixupPhase = ''
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/mlc
+  '';
+
+  meta = with lib; {
+    homepage = "https://software.intel.com/content/www/us/en/develop/articles/intelr-memory-latency-checker.html";
+    description = "Intel Memory Latency Checker";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ basvandijk ];
+    platforms = with platforms; linux;
+    mainProgram = "mlc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/monit/default.nix b/nixpkgs/pkgs/tools/system/monit/default.nix
new file mode 100644
index 000000000000..bd36d6fa400e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/monit/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchurl
+, darwin
+, bison
+, flex
+, zlib
+, libxcrypt
+, usePAM ? stdenv.hostPlatform.isLinux
+, pam
+, useSSL ? true
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "monit";
+  version = "5.33.0";
+
+  src = fetchurl {
+    url = "https://mmonit.com/monit/dist/monit-${version}.tar.gz";
+    sha256 = "sha256-Gs6InAGDRzqdcBYN9lM7tuEzjcE1T1koUHgD4eKoY7U=";
+  };
+
+  nativeBuildInputs = [ bison flex ] ++
+    lib.optionals stdenv.hostPlatform.isDarwin [
+      darwin.apple_sdk.frameworks.DiskArbitration
+      darwin.apple_sdk.frameworks.System
+    ];
+
+  buildInputs = [ zlib.dev libxcrypt ] ++
+    lib.optionals useSSL [ openssl ] ++
+    lib.optionals usePAM [ pam ];
+
+  configureFlags = [
+    (lib.withFeature usePAM "pam")
+  ] ++ (if useSSL then [
+    "--with-ssl-incl-dir=${openssl.dev}/include"
+    "--with-ssl-lib-dir=${lib.getLib openssl}/lib"
+  ] else [
+    "--without-ssl"
+  ]) ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # will need to check both these are true for musl
+    "libmonit_cv_setjmp_available=yes"
+    "libmonit_cv_vsnprintf_c99_conformant=yes"
+  ];
+
+  meta = {
+    homepage = "https://mmonit.com/monit/";
+    description = "Monitoring system";
+    license = lib.licenses.agpl3;
+    maintainers = with lib.maintainers; [ raskin wmertens ryantm ];
+    platforms = with lib; platforms.linux ++ platforms.darwin;
+    mainProgram = "monit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/mq-cli/default.nix b/nixpkgs/pkgs/tools/system/mq-cli/default.nix
new file mode 100644
index 000000000000..81adc7daa272
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/mq-cli/default.nix
@@ -0,0 +1,24 @@
+{ fetchFromGitHub, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mq-cli";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner  = "aprilabank";
+    repo   = "mq-cli";
+    rev    = "v${version}";
+    sha256 = "02z85waj5jc312biv2qhbgplsggxgjmfmyv9v8b1ky0iq1mpxjw7";
+  };
+
+  cargoSha256 = "19mk0hl7cr5qb3r64zi0hcsn4yqbg8c3g2f9jywm0g2c13ak36li";
+
+  meta = with lib; {
+    description      = "CLI tool to manage POSIX message queues";
+    homepage         = "https://github.com/aprilabank/mq-cli";
+    license          = licenses.mit;
+    maintainers      = with maintainers; [ tazjin ];
+    platforms        = platforms.linux;
+    mainProgram      = "mq";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/nats-top/default.nix b/nixpkgs/pkgs/tools/system/nats-top/default.nix
new file mode 100644
index 000000000000..c26c65d48a89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/nats-top/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, nats-top
+}:
+
+buildGoModule rec {
+  pname = "nats-top";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "nats-io";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-YQNIEhs/KNJp7184zBk0NZyXRWLQDaySZBJWe11vI9E=";
+  };
+
+  vendorHash = "sha256-IhaeM/stU9O48reT/mUadSkZDz0JXKCXjSRw8TMesTY=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = nats-top;
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "top-like tool for monitoring NATS servers";
+    homepage = "https://github.com/nats-io/nats-top";
+    changelog = "https://github.com/nats-io/nats-top/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "nats-top";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/natscli/default.nix b/nixpkgs/pkgs/tools/system/natscli/default.nix
new file mode 100644
index 000000000000..97c9884f4e3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/natscli/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "natscli";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "nats-io";
+    repo = "natscli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-40gKG47C8RvgPm3qJ5oNJP82efmCfrCSKVt+35jawlw=";
+  };
+
+  vendorHash = "sha256-d2JijN9OU/hQFU3Q2kEAWU0nRrPacfRWNIhEuLHjoIc=";
+
+  meta = with lib; {
+    description = "NATS Command Line Interface";
+    homepage = "https://github.com/nats-io/natscli";
+    changelog = "https://github.com/nats-io/natscli/releases/tag/v${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "nats";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/netdata/default.nix b/nixpkgs/pkgs/tools/system/netdata/default.nix
new file mode 100644
index 000000000000..b2461760da70
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/netdata/default.nix
@@ -0,0 +1,155 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config, makeWrapper
+, CoreFoundation, IOKit, libossp_uuid
+, nixosTests
+, netdata-go-plugins
+, bash, curl, jemalloc, json_c, libuv, zlib, libyaml
+, libcap, libuuid, lm_sensors, protobuf
+, withCups ? false, cups
+, withDBengine ? true, lz4
+, withIpmi ? (!stdenv.isDarwin), freeipmi
+, withNetfilter ? (!stdenv.isDarwin), libmnl, libnetfilter_acct
+, withCloud ? false
+, withCloudUi ? false
+, withConnPubSub ? false, google-cloud-cpp, grpc
+, withConnPrometheus ? false, snappy
+, withSsl ? true, openssl
+, withSystemdJournal ? (!stdenv.isDarwin), systemd
+, withDebug ? false
+}:
+
+stdenv.mkDerivation rec {
+  # Don't forget to update go.d.plugin.nix as well
+  version = "1.44.3";
+  pname = "netdata";
+
+  src = fetchFromGitHub {
+    owner = "netdata";
+    repo = "netdata";
+    rev = "v${version}";
+    hash = if withCloudUi
+      then "sha256-ahWaq6geEoc6NZ2oU/Dqnb0bjRXd+q1zaRGOSIYVYok="
+      else "sha256-2Kvh2WuoJjJxsFKueMjCAbazqZdzoOTxakbPVsj9PBo=";
+    fetchSubmodules = true;
+
+    # Remove v2 dashboard distributed under NCUL1. Make sure an empty
+    # Makefile.am exists, as autoreconf will get confused otherwise.
+    postFetch = lib.optionalString (!withCloudUi) ''
+      rm -rf $out/web/gui/v2/*
+      touch $out/web/gui/v2/Makefile.am
+    '';
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ autoreconfHook pkg-config makeWrapper protobuf ];
+  # bash is only used to rewrite shebangs
+  buildInputs = [ bash curl jemalloc json_c libuv zlib libyaml ]
+    ++ lib.optionals stdenv.isDarwin [ CoreFoundation IOKit libossp_uuid ]
+    ++ lib.optionals (!stdenv.isDarwin) [ libcap libuuid ]
+    ++ lib.optionals withCups [ cups ]
+    ++ lib.optionals withDBengine [ lz4 ]
+    ++ lib.optionals withIpmi [ freeipmi ]
+    ++ lib.optionals withNetfilter [ libmnl libnetfilter_acct ]
+    ++ lib.optionals withConnPubSub [ google-cloud-cpp grpc ]
+    ++ lib.optionals withConnPrometheus [ snappy ]
+    ++ lib.optionals (withCloud || withConnPrometheus) [ protobuf ]
+    ++ lib.optionals withSystemdJournal [ systemd ]
+    ++ lib.optionals withSsl [ openssl ];
+
+  patches = [
+    # required to prevent plugins from relying on /etc
+    # and /var
+    ./no-files-in-etc-and-var.patch
+
+    # Avoid build-only inputs in closure leaked by configure command:
+    #   https://github.com/NixOS/nixpkgs/issues/175693#issuecomment-1143344162
+    ./skip-CONFIGURE_COMMAND.patch
+
+    # Allow building without non-free v2 dashboard.
+    (fetchpatch {
+      url = "https://github.com/peat-psuwit/netdata/commit/6ccbdd1500db2b205923968688d5f1777430a326.patch";
+      hash = "sha256-jAyk5HlxdjFn5IP6jOKP8/SXOraMQSA6r1krThe+s7g=";
+    })
+  ];
+
+  # Guard against unused buld-time development inputs in closure. Without
+  # the ./skip-CONFIGURE_COMMAND.patch patch the closure retains inputs up
+  # to bootstrap tools:
+  #   https://github.com/NixOS/nixpkgs/pull/175719
+  # We pick zlib.dev as a simple canary package with pkg-config input.
+  disallowedReferences = lib.optional (!withDebug) zlib.dev;
+
+  donStrip = withDebug;
+  env.NIX_CFLAGS_COMPILE = lib.optionalString withDebug "-O1 -ggdb -DNETDATA_INTERNAL_CHECKS=1";
+
+  postInstall = ''
+    ln -s ${netdata-go-plugins}/lib/netdata/conf.d/* $out/lib/netdata/conf.d
+    ln -s ${netdata-go-plugins}/bin/godplugin $out/libexec/netdata/plugins.d/go.d.plugin
+  '' + lib.optionalString (!stdenv.isDarwin) ''
+    # rename this plugin so netdata will look for setuid wrapper
+    mv $out/libexec/netdata/plugins.d/apps.plugin \
+       $out/libexec/netdata/plugins.d/apps.plugin.org
+    mv $out/libexec/netdata/plugins.d/cgroup-network \
+       $out/libexec/netdata/plugins.d/cgroup-network.org
+    mv $out/libexec/netdata/plugins.d/perf.plugin \
+       $out/libexec/netdata/plugins.d/perf.plugin.org
+    mv $out/libexec/netdata/plugins.d/slabinfo.plugin \
+       $out/libexec/netdata/plugins.d/slabinfo.plugin.org
+    ${lib.optionalString withSystemdJournal ''
+      mv $out/libexec/netdata/plugins.d/systemd-journal.plugin \
+         $out/libexec/netdata/plugins.d/systemd-journal.plugin.org
+    ''}
+    ${lib.optionalString withIpmi ''
+      mv $out/libexec/netdata/plugins.d/freeipmi.plugin \
+         $out/libexec/netdata/plugins.d/freeipmi.plugin.org
+    ''}
+  '';
+
+  preConfigure = lib.optionalString (!stdenv.isDarwin) ''
+    substituteInPlace collectors/python.d.plugin/python_modules/third_party/lm_sensors.py \
+      --replace 'ctypes.util.find_library("sensors")' '"${lm_sensors.out}/lib/libsensors${stdenv.hostPlatform.extensions.sharedLibrary}"'
+  '';
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "--disable-ebpf"
+    "--with-jemalloc=${jemalloc}"
+  ] ++ lib.optionals (withSystemdJournal) [
+    "--enable-plugin-systemd-journal"
+  ] ++ lib.optionals (!withDBengine) [
+    "--disable-dbengine"
+  ] ++ lib.optionals (!withCloud) [
+    "--disable-cloud"
+  ] ++ lib.optionals (!withCloudUi) [
+    "--disable-cloud-ui"
+  ];
+
+  postFixup = ''
+    # remove once https://github.com/netdata/netdata/pull/16300 merged
+    substituteInPlace $out/bin/netdata-claim.sh \
+      --replace /bin/echo echo
+
+    wrapProgram $out/bin/netdata-claim.sh --prefix PATH : ${lib.makeBinPath [ openssl ]}
+    wrapProgram $out/libexec/netdata/plugins.d/cgroup-network-helper.sh --prefix PATH : ${lib.makeBinPath [ bash ]}
+    wrapProgram $out/bin/netdatacli --set NETDATA_PIPENAME /run/netdata/ipc
+  '';
+
+  enableParallelBuild = true;
+
+  passthru = {
+    inherit withIpmi;
+    tests.netdata = nixosTests.netdata;
+  };
+
+  meta = with lib; {
+    broken = stdenv.isDarwin || stdenv.buildPlatform != stdenv.hostPlatform;
+    description = "Real-time performance monitoring tool";
+    homepage = "https://www.netdata.cloud/";
+    changelog = "https://github.com/netdata/netdata/releases/tag/v${version}";
+    license = [ licenses.gpl3Plus ]
+      ++ lib.optionals (withCloudUi) [ licenses.ncul1 ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ raitobezarius ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/netdata/go.d.plugin.nix b/nixpkgs/pkgs/tools/system/netdata/go.d.plugin.nix
new file mode 100644
index 000000000000..ce53b278a9bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/netdata/go.d.plugin.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, buildGoModule, nixosTests }:
+
+buildGoModule rec {
+  pname = "netdata-go-plugins";
+  version = "0.58.1";
+
+  src = fetchFromGitHub {
+    owner = "netdata";
+    repo = "go.d.plugin";
+    rev = "v${version}";
+    hash = "sha256-zzHm98jec7MXnzVsrLlYIk+ILA3Ei43853dM1LdFz5c=";
+  };
+
+  vendorHash = "sha256-eb+GRFhfWxDkfH4x2VF3ogyT5z4OcIoqHtEVJ1tGsdA=";
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  postInstall = ''
+    mkdir -p $out/lib/netdata/conf.d
+    cp -r config/* $out/lib/netdata/conf.d
+  '';
+
+  passthru.tests = { inherit (nixosTests) netdata; };
+
+  meta = with lib; {
+    description = "Netdata orchestrator for data collection modules written in go";
+    homepage = "https://github.com/netdata/go.d.plugin";
+    changelog = "https://github.com/netdata/go.d.plugin/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.raitobezarius ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch b/nixpkgs/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch
new file mode 100644
index 000000000000..039376fe4e3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch
@@ -0,0 +1,128 @@
+diff --git c/collectors/Makefile.am i/collectors/Makefile.am
+index 1bbb2e0ef..96c400d33 100644
+--- c/collectors/Makefile.am
++++ i/collectors/Makefile.am
+@@ -33,7 +33,7 @@ usercustompluginsconfigdir=$(configdir)/custom-plugins.d
+ usergoconfigdir=$(configdir)/go.d
+ 
+ # Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
++no-install-exec-local:
+ 	$(INSTALL) -d $(DESTDIR)$(usercustompluginsconfigdir)
+ 	$(INSTALL) -d $(DESTDIR)$(usergoconfigdir)
+ 
+diff --git c/collectors/charts.d.plugin/Makefile.am i/collectors/charts.d.plugin/Makefile.am
+index f82992fd4..4cac1ae4f 100644
+--- c/collectors/charts.d.plugin/Makefile.am
++++ i/collectors/charts.d.plugin/Makefile.am
+@@ -34,7 +34,7 @@ dist_userchartsconfig_DATA = \
+     $(NULL)
+ 
+ # Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
++no-install-exec-local:
+ 	$(INSTALL) -d $(DESTDIR)$(userchartsconfigdir)
+ 
+ chartsconfigdir=$(libconfigdir)/charts.d
+diff --git c/collectors/ebpf.plugin/Makefile.am i/collectors/ebpf.plugin/Makefile.am
+index 2d5f92a6b..8b11c7502 100644
+--- c/collectors/ebpf.plugin/Makefile.am
++++ i/collectors/ebpf.plugin/Makefile.am
+@@ -9,7 +9,7 @@ SUFFIXES = .in
+ userebpfconfigdir=$(configdir)/ebpf.d
+ 
+ # Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
++no-install-exec-local:
+ 	$(INSTALL) -d $(DESTDIR)$(userebpfconfigdir)
+ 
+ dist_noinst_DATA = \
+diff --git c/collectors/python.d.plugin/Makefile.am i/collectors/python.d.plugin/Makefile.am
+index ca49c1c02..1b9bcc446 100644
+--- c/collectors/python.d.plugin/Makefile.am
++++ i/collectors/python.d.plugin/Makefile.am
+@@ -32,7 +32,7 @@ dist_userpythonconfig_DATA = \
+     $(NULL)
+ 
+ # Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
++no-install-exec-local:
+ 	$(INSTALL) -d $(DESTDIR)$(userpythonconfigdir)
+ 
+ pythonconfigdir=$(libconfigdir)/python.d
+diff --git c/collectors/statsd.plugin/Makefile.am i/collectors/statsd.plugin/Makefile.am
+index c8144c137..f8aaa89b6 100644
+--- c/collectors/statsd.plugin/Makefile.am
++++ i/collectors/statsd.plugin/Makefile.am
+@@ -19,5 +19,5 @@ dist_userstatsdconfig_DATA = \
+     $(NULL)
+ 
+ # Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
++no-install-exec-local:
+ 	$(INSTALL) -d $(DESTDIR)$(userstatsdconfigdir)
+diff --git c/health/Makefile.am i/health/Makefile.am
+index 7d7bca4cc..3086876dd 100644
+--- c/health/Makefile.am
++++ i/health/Makefile.am
+@@ -19,7 +19,7 @@ dist_userhealthconfig_DATA = \
+     $(NULL)
+ 
+ # Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
++no-install-exec-local:
+ 	$(INSTALL) -d $(DESTDIR)$(userhealthconfigdir)
+ 
+ healthconfigdir=$(libconfigdir)/health.d
+diff --git c/logsmanagement/Makefile.am i/logsmanagement/Makefile.am
+index 33f08d556..1f08cbae9 100644
+--- c/logsmanagement/Makefile.am
++++ i/logsmanagement/Makefile.am
+@@ -6,7 +6,7 @@ MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
+ userlogsmanagconfigdir=$(configdir)/logsmanagement.d
+ 
+ # Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
++no-install-exec-local:
+ 	$(INSTALL) -d $(DESTDIR)$(userlogsmanagconfigdir)
+ 
+ dist_libconfig_DATA = \
+diff --git c/system/Makefile.am i/system/Makefile.am
+index 1e96f6f4f..98122ecdc 100644
+--- c/system/Makefile.am
++++ i/system/Makefile.am
+@@ -22,12 +22,9 @@ include $(top_srcdir)/build/subst.inc
+ SUFFIXES = .in
+ 
+ dist_config_SCRIPTS = \
+-    edit-config \
+     $(NULL)
+ 
+ dist_config_DATA = \
+-    .install-type \
+-    netdata-updater.conf \
+     $(NULL)
+ 
+ libconfigvnodesdir=$(libconfigdir)/vnodes
+@@ -47,7 +44,7 @@ libsysrunitdir=$(libsysdir)/runit
+ libsyssystemddir=$(libsysdir)/systemd
+ 
+ # Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
++no-install-exec-local:
+ 	$(INSTALL) -d $(DESTDIR)$(configdir)
+ 	$(INSTALL) -d $(DESTDIR)$(libsysdir)
+ 	$(INSTALL) -d $(DESTDIR)$(libsyscrondir)
+diff --git c/web/Makefile.am i/web/Makefile.am
+index be2c545c3..55f373114 100644
+--- c/web/Makefile.am
++++ i/web/Makefile.am
+@@ -13,7 +13,7 @@ SUBDIRS = \
+ usersslconfigdir=$(configdir)/ssl
+ 
+ # Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
++no-install-exec-local:
+ 	$(INSTALL) -d $(DESTDIR)$(usersslconfigdir)
+ 
+ dist_noinst_DATA = \
diff --git a/nixpkgs/pkgs/tools/system/netdata/skip-CONFIGURE_COMMAND.patch b/nixpkgs/pkgs/tools/system/netdata/skip-CONFIGURE_COMMAND.patch
new file mode 100644
index 000000000000..472da270798f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/netdata/skip-CONFIGURE_COMMAND.patch
@@ -0,0 +1,16 @@
+Shrink closure size by avoiding paths embedded from configure call.
+
+https://github.com/NixOS/nixpkgs/issues/175693
+diff --git a/daemon/buildinfo.c b/daemon/buildinfo.c
+index 56cde84fc..011e7579d 100644
+--- a/daemon/buildinfo.c
++++ b/daemon/buildinfo.c
+@@ -1040,7 +1040,7 @@ static void build_info_set_status(BUILD_INFO_SLOT slot, bool status) {
+ 
+ __attribute__((constructor)) void initialize_build_info(void) {
+     build_info_set_value(BIB_PACKAGING_NETDATA_VERSION, program_version);
+-    build_info_set_value(BIB_PACKAGING_CONFIGURE_OPTIONS, CONFIGURE_COMMAND);
++    build_info_set_value(BIB_PACKAGING_CONFIGURE_OPTIONS, "REMOVED FOR CLOSURE SIZE REASONS");
+ 
+ #ifdef COMPILED_FOR_LINUX
+     build_info_set_status(BIB_FEATURE_BUILT_FOR, true);
diff --git a/nixpkgs/pkgs/tools/system/nkeys/default.nix b/nixpkgs/pkgs/tools/system/nkeys/default.nix
new file mode 100644
index 000000000000..54a02a906576
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/nkeys/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "nkeys";
+  version = "0.4.7";
+
+  src = fetchFromGitHub {
+    owner = "nats-io";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ui/vSa2TGe6Pe2aAzitBa1Pd2vKgTMuHoBhYYy2p6Rw=";
+  };
+
+  vendorHash = "sha256-SiSqmj6ktfiGsJOSu/pBY53e3vnN+RBfTkGwUuW52uo=";
+
+  meta = with lib; {
+    description = "Public-key signature system for NATS";
+    homepage = "https://github.com/nats-io/nkeys";
+    changelog = "https://github.com/nats-io/nkeys/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "nk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/nq/default.nix b/nixpkgs/pkgs/tools/system/nq/default.nix
new file mode 100644
index 000000000000..46db1c612ff3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/nq/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "nq";
+  version = "0.5";
+  src = fetchFromGitHub {
+    owner = "chneukirchen";
+    repo = "nq";
+    rev = "v${version}";
+    sha256 = "sha256-g14t2Wy2GwiqnfEDiLAPGehzUgK6mLC+5PAZynez62s=";
+  };
+  makeFlags = [ "PREFIX=$(out)" ];
+  postPatch = ''
+    sed -i tq \
+      -e 's|\bnq\b|'$out'/bin/nq|g' \
+      -e 's|\bfq\b|'$out'/bin/fq|g'
+  '';
+  meta = with lib; {
+    description = "Unix command line queue utility";
+    homepage = "https://github.com/chneukirchen/nq";
+    license = licenses.publicDomain;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/nsc/default.nix b/nixpkgs/pkgs/tools/system/nsc/default.nix
new file mode 100644
index 000000000000..bec4a3114102
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/nsc/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "nsc";
+  version = "2.8.5";
+
+  src = fetchFromGitHub {
+    owner = "nats-io";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-9qsHZTbK2RCDiQ5wlo2D79GeI5dbCvL2LofPnF7f8Cc=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=v${version}"
+    "-X main.builtBy=nixpkgs"
+  ];
+
+  vendorHash = "sha256-B3uIFJaEsj9tpjPBiU+rXVlfcgVwZUQe3VSSoZQqBG8=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd nsc \
+      --bash <($out/bin/nsc completion bash) \
+      --fish <($out/bin/nsc completion fish) \
+      --zsh <($out/bin/nsc completion zsh)
+  '';
+
+  preCheck = ''
+    # Tests attempt to write to the home directory.
+    export HOME=$(mktemp -d)
+  '';
+
+  # Tests currently fail on darwin because of a test in nsc which
+  # expects command output to contain a specific path. However
+  # the test strips table formatting from the command output in a naive way
+  # that removes all the table characters, including '-'.
+  # The nix build directory looks something like:
+  # /private/tmp/nix-build-nsc-2.8.5.drv-0/nsc_test2000598938/keys
+  # Then the `-` are removed from the path unintentionally and the test fails.
+  # This should be fixed upstream to avoid mangling the path when
+  # removing the table decorations from the command output.
+  doCheck = !stdenv.isDarwin;
+
+  meta = {
+    description = "A tool for creating NATS account and user access configurations";
+    homepage = "https://github.com/nats-io/nsc";
+    license = with lib.licenses; [ asl20 ];
+    maintainers = with lib.maintainers; [ cbrewster ];
+    mainProgram = "nsc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/nvidia-system-monitor-qt/default.nix b/nixpkgs/pkgs/tools/system/nvidia-system-monitor-qt/default.nix
new file mode 100644
index 000000000000..e4e1868997be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/nvidia-system-monitor-qt/default.nix
@@ -0,0 +1,66 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, qtbase
+, wrapQtAppsHook
+, makeDesktopItem
+, copyDesktopItems
+}:
+
+let
+  # Based in desktop files from official packages:
+  # https://github.com/congard/nvidia-system-monitor-qt/tree/master/package
+  desktopItem = makeDesktopItem {
+    name = "nvidia-system-monitor-qt";
+    desktopName = "NVIDIA System Monitor";
+    icon = "qnvsm";
+    exec = "qnvsm";
+    categories = [
+      "System"
+      "Utility"
+      "Qt"
+    ];
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "nvidia-system-monitor-qt";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "congard";
+    repo = "nvidia-system-monitor-qt";
+    rev = "v${version}";
+    sha256 = "sha256-VDw5Wp/QFDV1zKF4yz0aR0Hox9KHXZmeAKzKLSlu8Ck=";
+  };
+
+  buildInputs = [ qtbase ];
+  nativeBuildInputs = [ cmake wrapQtAppsHook copyDesktopItems ];
+
+  cmakeFlags = [
+    "-DIconPath=${placeholder "out"}/share/icons/hicolor/512x512/apps/qnvsm.png"
+    "-DVersionPrefix=(Nixpkgs)"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 qnvsm $out/bin/qnvsm
+    install -Dm644 $src/icon.png $out/share/icons/hicolor/512x512/apps/qnvsm.png
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = rec {
+    description = "Task Manager for Linux for NVIDIA graphics cards";
+    homepage = "https://github.com/congard/nvidia-system-monitor-qt";
+    downloadPage = "${homepage}/releases";
+    changelog = "${downloadPage}/tag/v${version}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ hacker1024 ];
+    mainProgram = "qnvsm";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/nvitop/default.nix b/nixpkgs/pkgs/tools/system/nvitop/default.nix
new file mode 100644
index 000000000000..af53911c8862
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/nvitop/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "nvitop";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "XuehaiPan";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-TunGtNe+lgx/hk8kNtB8yaCdbkiJ3d4JJ8NKB+6urJA=";
+  };
+
+  pythonRelaxDeps = [ "nvidia-ml-py" ];
+
+  nativeBuildInputs = with python3Packages; [ pythonRelaxDepsHook ];
+
+  propagatedBuildInputs = with python3Packages; [
+    cachetools
+    psutil
+    termcolor
+    nvidia-ml-py
+  ];
+
+  checkPhase = ''
+    $out/bin/nvitop --help
+  '';
+
+  meta = with lib; {
+    description = "An interactive NVIDIA-GPU process viewer, the one-stop solution for GPU process management";
+    homepage = "https://github.com/XuehaiPan/nvitop";
+    changelog = "https://github.com/XuehaiPan/nvitop/releases/tag/v${version}";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ GaetanLepage ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/nvtop/default.nix b/nixpkgs/pkgs/tools/system/nvtop/default.nix
new file mode 100644
index 000000000000..e47291207f08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/nvtop/default.nix
@@ -0,0 +1,83 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, gtest
+, cudatoolkit
+, libdrm
+, ncurses
+, nvtop
+, testers
+, udev
+, addOpenGLRunpath
+, amd ? true
+, intel ? true
+, msm ? true
+, nvidia ? true
+}:
+
+let
+  nvidia-postFixup = "addOpenGLRunpath $out/bin/nvtop";
+  libPath = lib.makeLibraryPath [ libdrm ncurses udev ];
+  drm-postFixup = ''
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${libPath}" \
+      $out/bin/nvtop
+  '';
+in
+stdenv.mkDerivation rec {
+  pname = "nvtop";
+  version = "3.0.2";
+
+  src = fetchFromGitHub {
+    owner = "Syllo";
+    repo = "nvtop";
+    rev = version;
+    hash = "sha256-SHKdjzbc3ZZfOW2p8RLFRKKBfLnO+Z8/bKVxcdLLqxw=";
+  };
+
+  cmakeFlags = with lib; [
+    "-DBUILD_TESTING=ON"
+    "-DUSE_LIBUDEV_OVER_LIBSYSTEMD=ON"
+  ] ++ optional nvidia "-DNVML_INCLUDE_DIRS=${cudatoolkit}/include"
+  ++ optional nvidia "-DNVML_LIBRARIES=${cudatoolkit}/targets/x86_64-linux/lib/stubs/libnvidia-ml.so"
+  ++ optional (!amd) "-DAMDGPU_SUPPORT=OFF"
+  ++ optional (!intel) "-DINTEL_SUPPORT=OFF"
+  ++ optional (!msm) "-DMSM_SUPPORT=OFF"
+  ++ optional (!nvidia) "-DNVIDIA_SUPPORT=OFF"
+  ++ optional (amd || msm) "-DLibdrm_INCLUDE_DIRS=${libdrm}/lib/stubs/libdrm.so.2"
+  ;
+  nativeBuildInputs = [ cmake gtest ] ++ lib.optional nvidia addOpenGLRunpath;
+  buildInputs = with lib; [ ncurses udev ]
+    ++ optional nvidia cudatoolkit
+    ++ optional (amd || msm) libdrm
+  ;
+
+  # ordering of fixups is important
+  postFixup = (lib.optionalString (amd || msm) drm-postFixup) + (lib.optionalString nvidia nvidia-postFixup);
+
+  doCheck = true;
+
+  passthru = {
+    tests.version = testers.testVersion {
+      inherit version;
+      package = nvtop;
+      command = "nvtop --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "A (h)top like task monitor for AMD, Adreno, Intel and NVIDIA GPUs";
+    longDescription = ''
+      Nvtop stands for Neat Videocard TOP, a (h)top like task monitor for AMD, Adreno, Intel and NVIDIA GPUs.
+      It can handle multiple GPUs and print information about them in a htop familiar way.
+    '';
+    homepage = "https://github.com/Syllo/nvtop";
+    changelog = "https://github.com/Syllo/nvtop/releases/tag/${version}";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ willibutz gbtb anthonyroussel ];
+    mainProgram = "nvtop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/opencl-info/default.nix b/nixpkgs/pkgs/tools/system/opencl-info/default.nix
new file mode 100644
index 000000000000..fc549d2d7961
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/opencl-info/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, opencl-clhpp, ocl-icd }:
+
+stdenv.mkDerivation {
+  pname = "opencl-info";
+  version = "unstable-2014-02-21";
+
+  src = fetchFromGitHub {
+    owner = "marchv";
+    repo = "opencl-info";
+    rev = "3e53d001a98978feb865650cf0e93b045400c0d7";
+    sha256 = "114lxgnjg40ivjjszkv4n3f3yq2lbrvywryvbazf20kqmdz7315l";
+  };
+
+  patches = [
+    # The cl.hpp header was removed from opencl-clhpp. This patch
+    # updates opencl-info to use the new cp2.hpp header.
+    #
+    # Submitted upstream: https://github.com/marchv/opencl-info/pull/2
+    ./opencl-info-clhpp2.diff
+  ];
+
+  buildInputs = [ opencl-clhpp ocl-icd ];
+
+  NIX_LDFLAGS = "-lOpenCL";
+
+  installPhase = ''
+    install -Dm755 opencl-info $out/bin/opencl-info
+  '';
+
+  meta = with lib; {
+    description = "A tool to dump OpenCL platform/device information";
+    homepage = "https://github.com/marchv/opencl-info";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+    mainProgram = "opencl-info";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/opencl-info/opencl-info-clhpp2.diff b/nixpkgs/pkgs/tools/system/opencl-info/opencl-info-clhpp2.diff
new file mode 100644
index 000000000000..013222beebf7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/opencl-info/opencl-info-clhpp2.diff
@@ -0,0 +1,22 @@
+diff --git a/opencl-info.cpp b/opencl-info.cpp
+index a23015d..a6de0c1 100644
+--- a/opencl-info.cpp
++++ b/opencl-info.cpp
+@@ -7,7 +7,7 @@
+ #if defined(__APPLE__) || defined(__MACOSX)
+ #  include <OpenCL/cl.hpp>
+ #else
+-#  include <CL/cl.hpp>
++#  include <CL/cl2.hpp>
+ #endif
+ 
+ #include <iostream>
+@@ -130,7 +130,7 @@ int main() {
+                 PconstEnd;
+                 P(device, CL_DEVICE_LOCAL_MEM_SIZE);
+                 Pbool(device, CL_DEVICE_ERROR_CORRECTION_SUPPORT);
+-                Pbool(device, CL_DEVICE_HOST_UNIFIED_MEMORY);
++                // Pbool(device, CL_DEVICE_HOST_UNIFIED_MEMORY); /* Deprecated in 2.0 */
+                 P(device, CL_DEVICE_PROFILING_TIMER_RESOLUTION);
+                 Pbool(device, CL_DEVICE_ENDIAN_LITTLE);
+                 Pbool(device, CL_DEVICE_AVAILABLE);
diff --git a/nixpkgs/pkgs/tools/system/openipmi/default.nix b/nixpkgs/pkgs/tools/system/openipmi/default.nix
new file mode 100644
index 000000000000..189452c65d63
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/openipmi/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, popt, ncurses, python3, readline, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "OpenIPMI";
+  version = "2.0.34";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openipmi/OpenIPMI-${version}.tar.gz";
+    sha256 = "sha256-kyJ+Q8crXDvVlJMj4GaapVJ9GpcUc6OjZa8D+4KEqV8=";
+  };
+
+  buildInputs = [ ncurses popt python3 readline ];
+
+  outputs = [ "out" "lib" "dev" "man" ];
+
+  meta = with lib; {
+    homepage = "https://openipmi.sourceforge.io/";
+    description = "A user-level library that provides a higher-level abstraction of IPMI and generic services";
+    license = with licenses; [ gpl2Only lgpl2Only ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ arezvov ] ++ teams.c3d2.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/openseachest/default.nix b/nixpkgs/pkgs/tools/system/openseachest/default.nix
new file mode 100644
index 000000000000..ab17c23bc61e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/openseachest/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openseachest";
+  version = "23.12";
+
+  src = fetchFromGitHub {
+    owner = "Seagate";
+    repo = "openSeaChest";
+    rev = "v${version}";
+    sha256 = "sha256-2snxruIC/93+yI7g/9cCXcms8FaoXnoyWq9py8GTwrs=";
+    fetchSubmodules = true;
+  };
+
+  makeFlags = [ "-C Make/gcc" ];
+  buildFlags = [ "release" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,share}
+    cp -r Make/gcc/openseachest_exes/. $out/bin
+    cp -r docs/man $out/share
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A collection of command line diagnostic tools for storage devices";
+    homepage = "https://github.com/Seagate/openSeaChest";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ justinas ];
+    platforms = with platforms; freebsd ++ linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/osquery/Remove-circular-definition-of-AUDIT_FILTER_EXCLUDE.patch b/nixpkgs/pkgs/tools/system/osquery/Remove-circular-definition-of-AUDIT_FILTER_EXCLUDE.patch
new file mode 100644
index 000000000000..d3aeca1c3007
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/osquery/Remove-circular-definition-of-AUDIT_FILTER_EXCLUDE.patch
@@ -0,0 +1,25 @@
+From: Jack Baldry <jack.baldry@grafana.com>
+Date: Tue, 15 Nov 2022 15:40:31 -0400
+Subject: [PATCH] Remove circular definition of AUDIT_FILTER_EXCLUDE
+
+https://github.com/osquery/osquery/issues/6551
+
+Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
+---
+ libraries/cmake/source/libaudit/src/lib/libaudit.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/libraries/cmake/source/libaudit/src/lib/libaudit.h b/libraries/cmake/source/libaudit/src/libaudit.h
+--- a/libraries/cmake/source/libaudit/src/lib/libaudit.h
++++ b/libraries/cmake/source/libaudit/src/lib/libaudit.h
+@@ -260,7 +260,6 @@ extern "C" {
+ #define AUDIT_KEY_SEPARATOR 0x01
+ 
+ /* These are used in filter control */
+-#define AUDIT_FILTER_EXCLUDE	AUDIT_FILTER_TYPE
+ #define AUDIT_FILTER_MASK	0x07	/* Mask to get actual filter */
+ #define AUDIT_FILTER_UNSET	0x80	/* This value means filter is unset */
+ 
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/tools/system/osquery/Remove-git-reset.patch b/nixpkgs/pkgs/tools/system/osquery/Remove-git-reset.patch
new file mode 100644
index 000000000000..af5b165a851e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/osquery/Remove-git-reset.patch
@@ -0,0 +1,37 @@
+From: Jack Baldry <jack.baldry@grafana.com>
+Date: Tue, 15 Nov 2022 13:48:07 -0400
+Subject: [PATCH] Remove git reset
+
+This is not required for nixpkgs builds because we are not working in
+the source repository and therefore do not need to be careful about
+updating submodule content.
+
+Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
+---
+ libraries/cmake/source/modules/utils.cmake | 11 -----------
+ 1 file changed, 11 deletions(-)
+
+diff --git a/libraries/cmake/source/modules/utils.cmake b/libraries/cmake/source/modules/utils.cmake
+--- a/libraries/cmake/source/modules/utils.cmake
++++ b/libraries/cmake/source/modules/utils.cmake
+@@ -102,17 +102,6 @@ function(patchSubmoduleSourceCode library_name patches_dir source_dir apply_to_d
+     file(COPY "${source_dir}" DESTINATION "${parent_dir}")
+   endif()
+ 
+-  # We need to restore the source code to its original state, pre patch
+-  execute_process(
+-    COMMAND "${GIT_EXECUTABLE}" reset --hard HEAD
+-    RESULT_VARIABLE process_exit_code
+-    WORKING_DIRECTORY "${source_dir}"
+-  )
+-
+-  if(NOT ${process_exit_code} EQUAL 0)
+-    message(FATAL_ERROR "Failed to git reset the following submodule: \"${source_dir}\"")
+-  endif()
+-
+   set(patchSubmoduleSourceCode_Patched TRUE PARENT_SCOPE)
+ endfunction()
+ 
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/tools/system/osquery/Remove-system-controls-table.patch b/nixpkgs/pkgs/tools/system/osquery/Remove-system-controls-table.patch
new file mode 100644
index 000000000000..e448f70a3d1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/osquery/Remove-system-controls-table.patch
@@ -0,0 +1,157 @@
+From: Jack Baldry <jack.baldry@grafana.com>
+Date: Wed, 16 Nov 2022 22:00:06 -0400
+Subject: [PATCH] Remove system controls table
+
+Relies on <sys/sysctl.h> which is not present in glibc since 2.32.
+
+Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
+---
+ osquery/tables/system/CMakeLists.txt         |  4 --
+ specs/CMakeLists.txt                         |  1 -
+ specs/posix/system_controls.table            | 21 -------
+ tests/integration/tables/system_controls.cpp | 61 --------------------
+ 4 files changed, 87 deletions(-)
+ delete mode 100644 specs/posix/system_controls.table
+ delete mode 100644 tests/integration/tables/system_controls.cpp
+
+diff --git a/osquery/tables/system/CMakeLists.txt b/osquery/tables/system/CMakeLists.txt
+--- a/osquery/tables/system/CMakeLists.txt
++++ b/osquery/tables/system/CMakeLists.txt
+@@ -43,7 +43,6 @@ function(generateOsqueryTablesSystemSystemtable)
+       posix/smbios_utils.cpp
+       posix/sudoers.cpp
+       posix/suid_bin.cpp
+-      posix/system_controls.cpp
+       posix/ulimit_info.cpp
+     )
+   endif()
+@@ -82,7 +81,6 @@ function(generateOsqueryTablesSystemSystemtable)
+       linux/shared_memory.cpp
+       linux/smbios_tables.cpp
+       linux/startup_items.cpp
+-      linux/sysctl_utils.cpp
+       linux/system_info.cpp
+       linux/usb_devices.cpp
+       linux/user_groups.cpp
+@@ -156,7 +154,6 @@ function(generateOsqueryTablesSystemSystemtable)
+       darwin/smbios_tables.cpp
+       darwin/smc_keys.cpp
+       darwin/startup_items.cpp
+-      darwin/sysctl_utils.cpp
+       darwin/system_extensions.mm
+       darwin/system_info.cpp
+       darwin/time_machine.cpp
+@@ -326,7 +323,6 @@ function(generateOsqueryTablesSystemSystemtable)
+       posix/shell_history.h
+       posix/ssh_keys.h
+       posix/sudoers.h
+-      posix/sysctl_utils.h
+       posix/last.h
+       posix/openssl_utils.h
+       posix/authorized_keys.h
+diff --git a/specs/CMakeLists.txt b/specs/CMakeLists.txt
+--- a/specs/CMakeLists.txt
++++ b/specs/CMakeLists.txt
+@@ -246,7 +246,6 @@ function(generateNativeTables)
+     "posix/socket_events.table:linux,macos"
+     "posix/sudoers.table:linux,macos,freebsd"
+     "posix/suid_bin.table:linux,macos,freebsd"
+-    "posix/system_controls.table:linux,macos,freebsd"
+     "posix/ulimit_info.table:linux,macos,freebsd"
+     "posix/usb_devices.table:linux,macos"
+     "posix/user_events.table:linux,macos,freebsd"
+diff --git a/specs/posix/system_controls.table b/specs/posix/system_controls.table
+deleted file mode 100644
+--- a/specs/posix/system_controls.table
++++ /dev/null
+@@ -1,21 +0,0 @@
+-table_name("system_controls")
+-description("sysctl names, values, and settings information.")
+-schema([
+-    Column("name", TEXT, "Full sysctl MIB name", index=True),
+-    Column("oid", TEXT, "Control MIB", additional=True),
+-    Column("subsystem", TEXT, "Subsystem ID, control type", additional=True),
+-    Column("current_value", TEXT, "Value of setting"),
+-    Column("config_value", TEXT, "The MIB value set in /etc/sysctl.conf"),
+-    Column("type", TEXT, "Data type"),
+-])
+-extended_schema(DARWIN, [
+-    Column("field_name", TEXT, "Specific attribute of opaque type"),
+-])
+-
+-implementation("system_controls@genSystemControls")
+-fuzz_paths([
+-    "/run/sysctl.d/",
+-    "/usr/lib/sysctl.d/",
+-    "/lib/sysctl.d/",
+-    "/sys"
+-])
+diff --git a/tests/integration/tables/system_controls.cpp b/tests/integration/tables/system_controls.cpp
+deleted file mode 100644
+--- a/tests/integration/tables/system_controls.cpp
++++ /dev/null
+@@ -1,61 +0,0 @@
+-/**
+- * Copyright (c) 2014-present, The osquery authors
+- *
+- * This source code is licensed as defined by the LICENSE file found in the
+- * root directory of this source tree.
+- *
+- * SPDX-License-Identifier: (Apache-2.0 OR GPL-2.0-only)
+- */
+-
+-// Sanity check integration test for system_controls
+-// Spec file: specs/posix/system_controls.table
+-
+-#include <osquery/tests/integration/tables/helper.h>
+-
+-namespace osquery {
+-namespace table_tests {
+-namespace {
+-
+-class SystemControlsTest : public testing::Test {
+- protected:
+-  void SetUp() override {
+-    setUpEnvironment();
+-  }
+-};
+-
+-TEST_F(SystemControlsTest, test_sanity) {
+-  auto const rows = execute_query("select * from system_controls");
+-  auto const row_map = ValidationMap{
+-      {"name", NonEmptyString},
+-      {"oid", NormalType},
+-      {"subsystem",
+-       SpecificValuesCheck{"",
+-                           "abi",
+-                           "debug",
+-                           "dev",
+-                           "fs",
+-                           "fscache",
+-                           "hw",
+-                           "kern",
+-                           "kernel",
+-                           "machdep",
+-                           "net",
+-                           "sunrpc",
+-                           "user",
+-                           "vfs",
+-                           "vm"}},
+-      {"current_value", NormalType},
+-      {"config_value", NormalType},
+-      {"type",
+-       SpecificValuesCheck{
+-           "", "node", "int", "string", "quad", "opaque", "struct"}},
+-#ifdef __APPLE__
+-      {"field_name", NormalType},
+-#endif
+-  };
+-  validate_rows(rows, row_map);
+-}
+-
+-} // namespace
+-} // namespace table_tests
+-} // namespace osquery
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/tools/system/osquery/Use-locale.h-instead-of-removed-xlocale.h-header.patch b/nixpkgs/pkgs/tools/system/osquery/Use-locale.h-instead-of-removed-xlocale.h-header.patch
new file mode 100644
index 000000000000..6c6765309053
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/osquery/Use-locale.h-instead-of-removed-xlocale.h-header.patch
@@ -0,0 +1,32 @@
+diff --git a/libraries/cmake/source/augeas/gnulib/generated/linux/aarch64/lib/locale.h b/libraries/cmake/source/augeas/gnulib/generated/linux/aarch64/lib/locale.h
+index 4f9baece2..afe947956 100644
+--- a/libraries/cmake/source/augeas/gnulib/generated/linux/aarch64/lib/locale.h
++++ b/libraries/cmake/source/augeas/gnulib/generated/linux/aarch64/lib/locale.h
+@@ -48,9 +48,9 @@
+ /* NetBSD 5.0 mis-defines NULL.  */
+ #include <stddef.h>
+ 
+-/* Mac OS X 10.5 defines the locale_t type in <xlocale.h>.  */
++/* Mac OS X 10.5 defines the locale_t type in <locale.h>.  */
+ #if 1
+-# include <xlocale.h>
++# include <locale.h>
+ #endif
+ 
+ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+diff --git a/libraries/cmake/source/augeas/gnulib/generated/linux/x86_64/lib/locale.h b/libraries/cmake/source/augeas/gnulib/generated/linux/x86_64/lib/locale.h
+index 4f9baece2..afe947956 100644
+--- a/libraries/cmake/source/augeas/gnulib/generated/linux/x86_64/lib/locale.h
++++ b/libraries/cmake/source/augeas/gnulib/generated/linux/x86_64/lib/locale.h
+@@ -48,9 +48,9 @@
+ /* NetBSD 5.0 mis-defines NULL.  */
+ #include <stddef.h>
+ 
+-/* Mac OS X 10.5 defines the locale_t type in <xlocale.h>.  */
++/* Mac OS X 10.5 defines the locale_t type in <locale.h>.  */
+ #if 1
+-# include <xlocale.h>
++# include <locale.h>
+ #endif
+ 
+ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
diff --git a/nixpkgs/pkgs/tools/system/osquery/default.nix b/nixpkgs/pkgs/tools/system/osquery/default.nix
new file mode 100644
index 000000000000..5138c5374103
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/osquery/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, cmake
+, fetchFromGitHub
+, fetchpatch
+, git
+, llvmPackages
+, nixosTests
+, overrideCC
+, perl
+, python3
+, stdenv
+, openssl_1_1
+}:
+
+let
+  buildStdenv = overrideCC stdenv llvmPackages.clangUseLLVM;
+in
+buildStdenv.mkDerivation rec {
+  pname = "osquery";
+  version = "5.5.1";
+
+  src = fetchFromGitHub {
+    owner = "osquery";
+    repo = "osquery";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "sha256-Q6PQVnBjAjAlR725fyny+RhQFUNwxWGjLDuS5p9JKlU=";
+  };
+
+  patches = [
+    ./Remove-git-reset.patch
+    ./Use-locale.h-instead-of-removed-xlocale.h-header.patch
+    ./Remove-circular-definition-of-AUDIT_FILTER_EXCLUDE.patch
+    # For current state of compilation against glibc in the clangWithLLVM toolchain, refer to the upstream issue in https://github.com/osquery/osquery/issues/7823.
+    ./Remove-system-controls-table.patch
+
+    # osquery uses a vendored boost library that still relies on old standard types (e.g. `std::unary_function`)
+    # which have been removed as of C++17. The patch is already checked in upstream, but there have been no
+    # releases yet. Can likely be removed with versions > 5.10.2.
+    (fetchpatch {
+      name = "fix-build-on-clang-16.patch";
+      url  = "https://github.com/osquery/osquery/commit/222991a15b4ae0a0fb919e4965603616536e1b0a.patch";
+      hash = "sha256-PdzEoeR1LXVri1Cd+7KMhKmDC8yZhAx3f1+9tjLJKyo=";
+    })
+  ];
+
+
+  buildInputs = [
+    llvmPackages.libunwind
+  ];
+  nativeBuildInputs = [
+    cmake
+    git
+    perl
+    python3
+  ];
+
+  postPatch = ''
+    substituteInPlace cmake/install_directives.cmake --replace "/control" "control"
+    # This is required to build libarchive with our glibc version
+    # which provides the ARC4RANDOM_BUF function
+    substituteInPlace libraries/cmake/source/libarchive/CMakeLists.txt --replace "  target_compile_definitions(thirdparty_libarchive PRIVATE" "  target_compile_definitions(thirdparty_libarchive PRIVATE HAVE_ARC4RANDOM_BUF"
+    # We need to override this hash because we use our own openssl 1.1 version
+    substituteInPlace libraries/cmake/formula/openssl/CMakeLists.txt --replace \
+      "d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" \
+      "$(sha256sum ${openssl_1_1.src} | cut -f1 '-d ')"
+    cat libraries/cmake/formula/openssl/CMakeLists.txt
+  '';
+
+  # For explanation of these deletions, refer to the ./Use-locale.h-instead-of-removed-xlocale.h-header.patch file.
+  preConfigure = ''
+    find libraries/cmake/source -name 'config.h' -exec sed -i '/#define HAVE_XLOCALE_H 1/d' {} \;
+  '';
+
+  cmakeFlags = [
+    "-DOSQUERY_VERSION=${version}"
+    "-DOSQUERY_OPENSSL_ARCHIVE_PATH=${openssl_1_1.src}"
+  ];
+
+  postFixup = ''
+    patchelf --set-rpath "${llvmPackages.libunwind}/lib:$(patchelf --print-rpath $out/bin/osqueryd)" "$out/bin/osqueryd"
+  '';
+
+  passthru.tests.osquery = nixosTests.osquery;
+
+  meta = with lib; {
+    description = "SQL powered operating system instrumentation, monitoring, and analytics";
+    longDescription = ''
+      The system controls table is not included as it does not presently compile with glibc >= 2.32.
+      For more information, refer to https://github.com/osquery/osquery/issues/7823
+    '';
+    homepage = "https://osquery.io";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ znewman01 lewo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/pciutils/default.nix b/nixpkgs/pkgs/tools/system/pciutils/default.nix
new file mode 100644
index 000000000000..2dd628f99e94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/pciutils/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, fetchurl, pkg-config, zlib, kmod, which
+, hwdata
+, static ? stdenv.hostPlatform.isStatic
+, IOKit
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pciutils";
+  version = "3.10.0"; # with release-date database
+
+  src = fetchurl {
+    url = "mirror://kernel/software/utils/pciutils/pciutils-${version}.tar.xz";
+    sha256 = "sha256-I4ouJxZnMOU6F/4Hv60ingf6ObYYEX5ZRLbX7an7sOk=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ which zlib ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ IOKit ]
+    ++ lib.optionals stdenv.hostPlatform.isLinux [ kmod ];
+
+  preConfigure = lib.optionalString (!stdenv.cc.isGNU) ''
+    substituteInPlace Makefile --replace 'CC=$(CROSS_COMPILE)gcc' ""
+  '';
+
+  makeFlags = [
+    "SHARED=${if static then "no" else "yes"}"
+    "PREFIX=\${out}"
+    "STRIP="
+    "HOST=${stdenv.hostPlatform.system}"
+    "CROSS_COMPILE=${stdenv.cc.targetPrefix}"
+    "DNS=yes"
+  ];
+
+  installTargets = [ "install" "install-lib" ];
+
+  postInstall = ''
+    # Remove update-pciids as it won't work on nixos
+    rm $out/sbin/update-pciids $out/man/man8/update-pciids.8
+
+    # use database from hwdata instead
+    # (we don't create a symbolic link because we do not want to pull in the
+    # full closure of hwdata)
+    cp --reflink=auto ${hwdata}/share/hwdata/pci.ids $out/share/pci.ids
+  '';
+
+  passthru.updateScript = gitUpdater {
+    # No nicer place to find latest release.
+    url = "https://github.com/pciutils/pciutils.git";
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    homepage = "https://mj.ucw.cz/sw/pciutils/";
+    description = "A collection of programs for inspecting and manipulating configuration of PCI devices";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.vcunat ]; # not really, but someone should watch it
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/pcstat/default.nix b/nixpkgs/pkgs/tools/system/pcstat/default.nix
new file mode 100644
index 000000000000..85e6c791990e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/pcstat/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pcstat";
+  version = "0.0.2";
+
+  src = fetchFromGitHub {
+    owner = "tobert";
+    repo = "pcstat";
+    rev = "v${version}";
+    sha256 = "sha256-e8fQZEfsS5dATPgshJktfKVTdZ9CvN1CttYipMjpGNM=";
+  };
+
+  vendorHash = "sha256-fdfiHTE8lySfyiKKiYJsQNCY6MBfjaVYSIZXtofIz3E=";
+
+  meta = with lib; {
+    description = "Page Cache stat: get page cache stats for files on Linux";
+    homepage = "https://github.com/tobert/pcstat";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aminechikhaoui ];
+    mainProgram = "pcstat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/pdisk/default.nix b/nixpkgs/pkgs/tools/system/pdisk/default.nix
new file mode 100644
index 000000000000..83c3e65e4171
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/pdisk/default.nix
@@ -0,0 +1,90 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, installShellFiles
+, libbsd
+, CoreFoundation
+, IOKit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pdisk";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "apple-oss-distributions";
+    repo = pname;
+    rev = "${pname}-${lib.versions.minor version}";
+    hash = "sha256-+gBgnk/1juEHE0nXaz7laUaH7sxrX5SzsLGr0PHsdHs=";
+  };
+
+  patches = [
+    # Fix makefile for Unix
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/makefile.patch?h=pdisk&id=39dc371712d2f7dbd38f6e8ddc6ba661faa1a7a9";
+      sha256 = "sha256-mLFclu8IlDN/gxNTI7Kei6ARketlAhJRu8ForFUzFU0=";
+    })
+    # Fix lseek usage in file_media.c
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/file_media.c.patch?h=pdisk&id=39dc371712d2f7dbd38f6e8ddc6ba661faa1a7a9";
+      sha256 = "sha256-CCq5fApwx6w1GKDrgP+0nUdQy/5z5ON7/fdp4M63nko=";
+    })
+    # Fix open_partition_map call in cvt_pt.c
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/cvt_pt.c.patch?h=pdisk&id=39dc371712d2f7dbd38f6e8ddc6ba661faa1a7a9";
+      sha256 = "sha256-jScPfzt9/fQHkf2MfHLvYsh/Rw2NZZXkzZiiVo8F5Mc=";
+    })
+    # Replace removed sys_nerr and sys_errlist with strerror
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/linux_strerror.patch?h=pdisk&id=d0c930ea8bcac008bbd0ade1811133a625caea54";
+      sha256 = "sha256-HGJIS+vTn6456KtaETutIgTPPBm2C9OHf1anG8yaJPo=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace makefile \
+      --replace 'cc' '${stdenv.cc.targetPrefix}cc'
+  '' + lib.optionalString stdenv.hostPlatform.isDarwin ''
+    substituteInPlace makefile \
+      --replace '-lbsd' '-framework CoreFoundation -framework IOKit'
+  '';
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = lib.optionals (!stdenv.hostPlatform.isDarwin) [
+    libbsd
+  ] ++ lib.optionals (stdenv.hostPlatform.isDarwin) [
+    CoreFoundation
+    IOKit
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-D_GNU_SOURCE";
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 cvt_pt $out/bin/cvt_pt
+    install -Dm755 pdisk $out/bin/pdisk
+
+    installManPage pdisk.8
+    install -Dm644 pdisk.html $out/share/doc/pdisk/pdisk.html
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A low-level Apple partition table editor for Linux, OSS Apple version";
+    homepage = "https://github.com/apple-oss-distributions/pdisk";
+    license = with licenses; [
+      hpnd # original license statements seems to match this (in files that are shared with mac-fdisk)
+      apsl10 # new files
+    ];
+    maintainers = with maintainers; [ OPNA2608 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/plan9port/default.nix b/nixpkgs/pkgs/tools/system/plan9port/default.nix
new file mode 100644
index 000000000000..56e191232452
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/plan9port/default.nix
@@ -0,0 +1,122 @@
+{ lib, stdenv, fetchFromGitHub
+, fontconfig, freetype, libX11, libXext, libXt, xorgproto
+, perl # For building web manuals
+, which, ed
+, Carbon, Cocoa, IOKit, Metal, QuartzCore, DarwinTools # For building on Darwin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "plan9port";
+  version = "2023-03-31";
+
+  src = fetchFromGitHub {
+    owner = "9fans";
+    repo = pname;
+    rev = "cc4571fec67407652b03d6603ada6580de2194dc";
+    hash = "sha256-PZWjf0DJCNs5mjxtXgK4/BcstaOqG2WBKRo+Bh/9U7w=";
+  };
+
+  postPatch = ''
+    substituteInPlace bin/9c \
+      --replace 'which uniq' '${which}/bin/which uniq'
+
+    ed -sE INSTALL <<EOF
+    # get /bin:/usr/bin out of PATH
+    /^PATH=[^ ]*/s,,PATH=\$PATH:\$PLAN9/bin,
+    # no xcbuild nonsense
+    /^if.* = Darwin/+;/^fi/-c
+    ${"\t"}export NPROC=$NIX_BUILD_CORES
+    .
+    # remove absolute include paths from fontsrv test
+    /cc -o a.out -c -I.*freetype2/;/x11.c/j
+    s/(-Iinclude).*-I[^ ]*/\1/
+    wq
+    EOF
+  '';
+
+  nativeBuildInputs = [ ed ];
+  buildInputs = [ perl which ] ++ (if !stdenv.isDarwin then [
+    fontconfig freetype # fontsrv uses these
+    libX11 libXext libXt xorgproto
+  ] else [
+    Carbon Cocoa IOKit Metal QuartzCore
+    DarwinTools
+  ]);
+
+  configurePhase = ''
+    runHook preConfigure
+    cat >LOCAL.config <<EOF
+    CC9='$(command -v $CC)'
+    CFLAGS='$NIX_CFLAGS_COMPILE'
+    LDFLAGS='$(for f in $NIX_LDFLAGS; do echo "-Wl,$f"; done | xargs echo)'
+    ${lib.optionalString (!stdenv.isDarwin) "X11='${libXt.dev}/include'"}
+    EOF
+
+    # make '9' available in the path so there's some way to find out $PLAN9
+    cat >LOCAL.INSTALL <<EOF
+    #!$out/plan9/bin/rc
+    mkdir $out/bin
+    ln -s $out/plan9/bin/9 $out/bin/
+    EOF
+    chmod +x LOCAL.INSTALL
+
+    # now, not in fixupPhase, so ./INSTALL works
+    patchShebangs .
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    PLAN9_TARGET=$out/plan9 ./INSTALL -b
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir $out
+    cp -r . $out/plan9
+    cd $out/plan9
+
+    ./INSTALL -c
+    runHook postInstall
+  '';
+
+  dontPatchShebangs = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/9 rc -c 'echo rc is working.'
+
+    # 9l can find and use its libs
+    cd $TMP
+    cat >test.c <<EOF
+    #include <u.h>
+    #include <libc.h>
+    #include <thread.h>
+    void
+    threadmain(int argc, char **argv)
+    {
+        threadexitsall(nil);
+    }
+    EOF
+    $out/bin/9 9c -o test.o test.c
+    $out/bin/9 9l -o test test.o
+    ./test
+  '';
+
+  meta = with lib; {
+    homepage = "https://9fans.github.io/plan9port/";
+    description = "Plan 9 from User Space";
+    longDescription = ''
+      Plan 9 from User Space (aka plan9port) is a port of many Plan 9 programs
+      from their native Plan 9 environment to Unix-like operating systems.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [
+      AndersonTorres bbarker ehmry ftrvxmtrx kovirobi ylh
+    ];
+    mainProgram = "9";
+    platforms = platforms.unix;
+  };
+}
+# TODO: investigate the mouse chording support patch
diff --git a/nixpkgs/pkgs/tools/system/procodile/Gemfile b/nixpkgs/pkgs/tools/system/procodile/Gemfile
new file mode 100644
index 000000000000..77e4bb430e96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/procodile/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'procodile'
diff --git a/nixpkgs/pkgs/tools/system/procodile/Gemfile.lock b/nixpkgs/pkgs/tools/system/procodile/Gemfile.lock
new file mode 100644
index 000000000000..f53a07d6657c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/procodile/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    json (2.2.0)
+    procodile (1.0.23)
+      json
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  procodile
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/system/procodile/default.nix b/nixpkgs/pkgs/tools/system/procodile/default.nix
new file mode 100644
index 000000000000..3c4437ea09c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/procodile/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "procodile";
+  gemdir = ./.;
+  exes = [ "procodile" ];
+
+  passthru.updateScript = bundlerUpdateScript "procodile";
+
+  meta = with lib; {
+    description = "Run processes in the background (and foreground) on Mac & Linux from a Procfile (for production and/or development environments)";
+    homepage    = "https://adam.ac/procodile";
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    platforms   = platforms.unix;
+    mainProgram = "procodile";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/procodile/gemset.nix b/nixpkgs/pkgs/tools/system/procodile/gemset.nix
new file mode 100644
index 000000000000..f5b73b617bb5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/procodile/gemset.nix
@@ -0,0 +1,23 @@
+{
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  procodile = {
+    dependencies = ["json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "025pbr1kah7cgs527n5q56m5agaa2smzac4rpmpk619xg4r1rdhs";
+      type = "gem";
+    };
+    version = "1.0.23";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/proot/default.nix b/nixpkgs/pkgs/tools/system/proot/default.nix
new file mode 100644
index 000000000000..a43b2ff7f202
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/proot/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub
+, talloc
+, pkg-config
+, ncurses
+, docutils, swig, python3, coreutils, enablePython ? true }:
+
+stdenv.mkDerivation rec {
+  pname = "proot";
+  version = "5.4.0";
+
+  src = fetchFromGitHub {
+    repo = "proot";
+    owner = "proot-me";
+    rev = "v${version}";
+    sha256 = "sha256-Z9Y7ccWp5KEVuo9xfHcgo58XqYVdFo7ck1jH7cnT2KA=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/GNUmakefile \
+      --replace /bin/echo ${coreutils}/bin/echo
+    # our cross machinery defines $CC and co just right
+    sed -i /CROSS_COMPILE/d src/GNUmakefile
+  '';
+
+  buildInputs = [ ncurses talloc ] ++ lib.optional enablePython python3;
+  nativeBuildInputs = [ pkg-config docutils ] ++ lib.optional enablePython swig;
+
+  enableParallelBuilding = true;
+
+  makeFlags = [ "-C src" ];
+
+  postBuild = ''
+    make -C doc proot/man.1
+  '';
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  postInstall = ''
+    install -Dm644 doc/proot/man.1 $out/share/man/man1/proot.1
+  '';
+
+  # proot provides tests with `make -C test` however they do not run in the sandbox
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://proot-me.github.io";
+    description = "User-space implementation of chroot, mount --bind and binfmt_misc";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ianwookim makefu veprbl dtzWill ];
+    mainProgram = "proot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ps_mem/default.nix b/nixpkgs/pkgs/tools/system/ps_mem/default.nix
new file mode 100644
index 000000000000..96c21e461d4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ps_mem/default.nix
@@ -0,0 +1,22 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ps_mem";
+  version = "3.13";
+
+  src = fetchFromGitHub {
+    owner = "pixelb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0pgi9hvwfbkzvwicqlkwx4rwal1ikza018yxbwpnf7c80zw0zaw9";
+  };
+
+  meta = with lib; {
+    description = "A utility to accurately report the in core memory usage for a program";
+    homepage = "https://github.com/pixelb/ps_mem";
+    license = licenses.lgpl21;
+    maintainers = [ ];
+    platforms = platforms.linux;
+    mainProgram = "ps_mem";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/psensor/default.nix b/nixpkgs/pkgs/tools/system/psensor/default.nix
new file mode 100644
index 000000000000..47456b76f325
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/psensor/default.nix
@@ -0,0 +1,51 @@
+{ stdenv
+, lib
+, fetchurl
+, pkg-config
+, lm_sensors
+, libgtop
+, libatasmart
+, gtk3
+, libnotify
+, udisks2
+, libXNVCtrl
+, wrapGAppsHook
+, libappindicator
+}:
+
+stdenv.mkDerivation rec {
+  pname = "psensor";
+
+  version = "1.2.1";
+
+  src = fetchurl {
+    url = "https://wpitchoune.net/psensor/files/psensor-${version}.tar.gz";
+    sha256 = "1ark901va79gfq5p8h8dqypjgm3f8crmj37520q3slwz2rfphkq8";
+  };
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+
+  buildInputs = [
+    lm_sensors
+    libgtop
+    libatasmart
+    gtk3
+    libnotify
+    udisks2
+    libappindicator
+  ];
+
+  preConfigure = ''
+    NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${libXNVCtrl}/include -Wno-error"
+    NIX_LDFLAGS="$NIX_LDFLAGS -L${libXNVCtrl}/lib"
+  '';
+
+  meta = with lib; {
+    description = "Graphical hardware monitoring application for Linux";
+    homepage = "https://wpitchoune.net/psensor/";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    mainProgram = "psensor";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/psstop/default.nix b/nixpkgs/pkgs/tools/system/psstop/default.nix
new file mode 100644
index 000000000000..1adb6c4e5ed5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/psstop/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "psstop";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "clearlinux";
+    repo = "psstop";
+    rev = "v${version}";
+    sha256 = "03ir3jjpzm7q8n1qc5jr99hqarr9r529w1zb6f7q4wak2vfj7w9h";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ glib ];
+
+  meta = with lib; {
+    homepage = "https://github.com/clearlinux/psstop";
+    description = "Show processes' memory usage by looking into pss"; # upstream summary
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "psstop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/r10k/Gemfile b/nixpkgs/pkgs/tools/system/r10k/Gemfile
new file mode 100644
index 000000000000..c9363ff3dbdf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/r10k/Gemfile
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+# A sample Gemfile
+source "https://rubygems.org"
+
+gem "r10k"
diff --git a/nixpkgs/pkgs/tools/system/r10k/Gemfile.lock b/nixpkgs/pkgs/tools/system/r10k/Gemfile.lock
new file mode 100644
index 000000000000..9f55e273ef25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/r10k/Gemfile.lock
@@ -0,0 +1,48 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    colored2 (3.1.2)
+    cri (2.15.10)
+    faraday (0.17.3)
+      multipart-post (>= 1.2, < 3)
+    faraday_middleware (0.13.1)
+      faraday (>= 0.7.4, < 1.0)
+    fast_gettext (1.1.2)
+    gettext (3.2.9)
+      locale (>= 2.0.5)
+      text (>= 1.3.0)
+    gettext-setup (0.34)
+      fast_gettext (~> 1.1.0)
+      gettext (>= 3.0.2, < 3.3.0)
+      locale
+    locale (2.1.3)
+    log4r (1.1.10)
+    minitar (0.9)
+    multi_json (1.14.1)
+    multipart-post (2.1.1)
+    puppet_forge (2.3.3)
+      faraday (>= 0.9.0, < 0.18.0, != 0.13.1)
+      faraday_middleware (>= 0.9.0, < 0.14.0)
+      gettext-setup (~> 0.11)
+      minitar
+      semantic_puppet (~> 1.0)
+    r10k (3.4.1)
+      colored2 (= 3.1.2)
+      cri (>= 2.15.10, < 3.0.0)
+      fast_gettext (~> 1.1.0)
+      gettext (>= 3.0.2, < 3.3.0)
+      gettext-setup (~> 0.24)
+      log4r (= 1.1.10)
+      multi_json (~> 1.10)
+      puppet_forge (~> 2.3.0)
+    semantic_puppet (1.0.2)
+    text (1.3.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  r10k
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/system/r10k/default.nix b/nixpkgs/pkgs/tools/system/r10k/default.nix
new file mode 100644
index 000000000000..75b75d00253e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/r10k/default.nix
@@ -0,0 +1,24 @@
+{ lib, bundlerApp, bundlerUpdateScript, makeWrapper, git, gnutar, gzip }:
+
+bundlerApp {
+  pname = "r10k";
+  gemdir = ./.;
+  exes = [ "r10k" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/r10k --prefix PATH : ${lib.makeBinPath [ git gnutar gzip ]}
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "r10k";
+
+  meta = with lib; {
+    description = "Puppet environment and module deployment";
+    homepage    = "https://github.com/puppetlabs/r10k";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ zimbatm manveru nicknovitski ];
+    platforms = platforms.unix;
+    mainProgram = "r10k";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/r10k/gemset.nix b/nixpkgs/pkgs/tools/system/r10k/gemset.nix
new file mode 100644
index 000000000000..9b46cce00da9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/r10k/gemset.nix
@@ -0,0 +1,168 @@
+{
+  colored2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  cri = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h45kw2s4bjwgbfsrncs30av0j4zjync3wmcc6lpdnzbcxs7yms2";
+      type = "gem";
+    };
+    version = "2.15.10";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13aghksmni2sl15y7wfpx6k5l3lfd8j9gdyqi6cbw6jgc7bqyyn2";
+      type = "gem";
+    };
+    version = "0.17.3";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a93rs58bakqck7bcihasz66a1riy22h2zpwrpmb13gp8mw3wkmr";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+  fast_gettext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ci71w9jb979c379c7vzm88nc3k6lf68kbrsgw9nlx5g4hng0s78";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  gettext = {
+    dependencies = ["locale" "text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0764vj7gacn0aypm2bf6m46dzjzwzrjlmbyx6qwwwzbmi94r40wr";
+      type = "gem";
+    };
+    version = "3.2.9";
+  };
+  gettext-setup = {
+    dependencies = ["fast_gettext" "gettext" "locale"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vfnayz20xd8q0sz27816kvgia9z2dpj9fy7z15da239wmmnz7ga";
+      type = "gem";
+    };
+    version = "0.34";
+  };
+  locale = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0997465kxvpxm92fiwc2b16l49mngk7b68g5k35ify0m3q0yxpdn";
+      type = "gem";
+    };
+    version = "2.1.3";
+  };
+  log4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ri90q0frfmigkirqv5ihyrj59xm8pq5zcmf156cbdv4r4l2jicv";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  minitar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "126mq86x67d1p63acrfka4zx0cx2r0vc93884jggxnrmmnzbxh13";
+      type = "gem";
+    };
+    version = "0.9";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xy54mjf7xg41l8qrg1bqri75agdqmxap9z466fjismc1rn2jwfr";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  puppet_forge = {
+    dependencies = ["faraday" "faraday_middleware" "gettext-setup" "minitar" "semantic_puppet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lyd10ai27lxylywjxpwyxikx5hblsdchid3chymrrv55x217cny";
+      type = "gem";
+    };
+    version = "2.3.3";
+  };
+  r10k = {
+    dependencies = ["colored2" "cri" "fast_gettext" "gettext" "gettext-setup" "log4r" "multi_json" "puppet_forge"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nlckw4yr2ph14i9h0blsdb5zmrzqh3aknkm0dg3hrcx8ygncai6";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  semantic_puppet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "046m45rdwpvfz77s7bxid27c89w329c1nj593p74wdd8kknf0nv0";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  text = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x6kkmsr49y3rnrin91rv8mpc3dhrf3ql08kbccw8yffq61brfrg";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/retry/default.nix b/nixpkgs/pkgs/tools/system/retry/default.nix
new file mode 100644
index 000000000000..998ba8cb7286
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/retry/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, txt2man
+, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "retry";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "minfrin";
+    repo = "retry";
+    rev = "${pname}-${version}";
+    hash = "sha256-5H2MnnThi4rT/o3oTkGDKXStQwob4G9mMsZewItPub4=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook txt2man which ];
+
+  meta = with lib; {
+    homepage = "https://github.com/minfrin/retry";
+    description = "Retry a command until the command succeeds";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ gfrascadorio ];
+    platforms = platforms.all;
+    mainProgram = "retry";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/system/rex/default.nix b/nixpkgs/pkgs/tools/system/rex/default.nix
new file mode 100644
index 000000000000..980874322bb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/rex/default.nix
@@ -0,0 +1,95 @@
+{ pkgs, lib, fetchurl, fetchpatch, perlPackages, rsync, which, installShellFiles, ... }:
+perlPackages.buildPerlPackage rec {
+  pname = "Rex";
+  version = "1.14.3";
+  src = fetchurl {
+    url = "mirror://cpan/authors/id/F/FE/FERKI/Rex-${version}.tar.gz";
+    hash = "sha256-An0wQu+UC2dZDlmJ6W8irh5nunRIlcXdPbVpwFE3Alw=";
+  };
+
+  buildInputs = with perlPackages; [
+    FileShareDirInstall
+    ParallelForkManager
+    StringEscape
+    TestDeep
+    TestOutput
+    TestWarnings
+    TestUseAllModules
+    TestException
+    SubOverride
+
+    rsync
+    which
+  ];
+
+  # These are part of a greater effort to add better support upstream:
+  # https://github.com/RexOps/Rex/compare/master...nixos
+  patches = [
+    # Fix rex's ability to execute things on NixOS managed hosts
+    (fetchpatch {
+      url = "https://github.com/RexOps/Rex/commit/c71f3b255dac8f929abea46913798f132566af55.patch";
+      hash = "sha256-S2tF3IZ96QrxDN3HfBk7RWDZcEwukQYAkSId51dATiU=";
+    })
+    # Fix explicit calls to /bin/mv and /bin/rm
+    (fetchpatch {
+      url = "https://github.com/RexOps/Rex/commit/2782e80bb9789d3afb42e08904c28a4366a58334.patch";
+      hash = "sha256-htm39fF2tumG5b5E1ZBRX5n3vRaZZZzn2lfSN1omP8s=";
+    })
+    # Fix for PATH assumptions
+    (fetchpatch {
+      url = "https://github.com/RexOps/Rex/commit/ec72c8d1fdddf9116afdb21091100fe7cc20f41a.patch";
+      hash = "sha256-a/Sns2f596dbAWbuIveNldc/V3MwR08/ocXVgx0Tbcw=";
+    })
+    # Fix explicit path in Sudo.pm
+    (fetchpatch {
+      url = "https://github.com/RexOps/Rex/commit/f0b312f42178e7e4271b5b010c00efb5cdba2970.patch";
+      hash = "sha256-n/+huVCM8zpgx2LZgMB41PPIYgNhF6AK8+4FGPQH+FU=";
+    })
+  ];
+
+  nativeBuildInputs = with perlPackages; [ installShellFiles ParallelForkManager ];
+
+  propagatedBuildInputs = with perlPackages; [
+    AWSSignature4
+    DataValidateIP
+    DevelCaller
+    DigestHMAC
+    FileLibMagic
+    HashMerge
+    HTTPMessage
+    IOPty
+    IOString
+    JSONMaybeXS
+    LWP
+    NetOpenSSH
+    NetSFTPForeign
+    SortNaturally
+    TermReadKey
+    TextGlob
+    URI
+    XMLSimple
+    YAML
+  ];
+
+  outputs = [ "out" ];
+
+  postPatch = ''
+    patchShebangs bin
+  '';
+
+  fixupPhase = ''
+    for sh in bash zsh; do
+      substituteInPlace ./share/rex-tab-completion.$sh \
+        --replace 'perl' "${pkgs.perl.withPackages (ps: [ ps.YAML ])}/bin/perl"
+    done
+    installShellCompletion --name _rex --zsh ./share/rex-tab-completion.zsh
+    installShellCompletion --name rex --bash ./share/rex-tab-completion.bash
+  '';
+
+  meta = {
+    homepage = "https://www.rexify.org";
+    description = "The friendly automation framework";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ qbit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/rofi-systemd/default.nix b/nixpkgs/pkgs/tools/system/rofi-systemd/default.nix
new file mode 100644
index 000000000000..b8be1adea984
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/rofi-systemd/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, rofi, systemd, coreutils, util-linux, gawk, makeWrapper, jq
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-systemd";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "IvanMalison";
+    repo = "rofi-systemd";
+    rev = "v${version}";
+    sha256 = "0lgffb6rk1kf91j4j303lzpx8w2g9zy2gk99p8g8pk62a30c5asm";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a rofi-systemd $out/bin/rofi-systemd
+  '';
+
+  wrapperPath = with lib; makeBinPath [
+    coreutils
+    gawk
+    jq
+    rofi
+    systemd
+    util-linux
+  ];
+
+  fixupPhase = ''
+    patchShebangs $out/bin
+
+    wrapProgram $out/bin/rofi-systemd --prefix PATH : "${wrapperPath}"
+  '';
+
+  meta = {
+    description = "Control your systemd units using rofi";
+    homepage = "https://github.com/IvanMalison/rofi-systemd";
+    maintainers = with lib.maintainers; [ imalison ];
+    license = lib.licenses.gpl3;
+    platforms = with lib.platforms; linux;
+    mainProgram = "rofi-systemd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/rowhammer-test/default.nix b/nixpkgs/pkgs/tools/system/rowhammer-test/default.nix
new file mode 100644
index 000000000000..f360697efbd3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/rowhammer-test/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "rowhammer-test";
+  version = "unstable-2015-08-11";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "rowhammer-test";
+    rev = "c1d2bd9f629281402c10bb10e52bc1f1faf59cc4";
+    sha256 = "1fbfcnm5gjish47wdvikcsgzlb5vnlfqlzzm6mwiw2j5qkq0914i";
+  };
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isi686 "-Wno-error=format";
+
+  buildPhase = "sh -e make.sh";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp rowhammer_test double_sided_rowhammer $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Test DRAM for bit flips caused by the rowhammer problem";
+    homepage = "https://github.com/google/rowhammer-test";
+    license = licenses.asl20;
+    maintainers = [ maintainers.viric ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/rsyslog/default.nix b/nixpkgs/pkgs/tools/system/rsyslog/default.nix
new file mode 100644
index 000000000000..b678f5cda2a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/rsyslog/default.nix
@@ -0,0 +1,193 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, autoreconfHook
+, libestr
+, json_c
+, zlib
+, docutils
+, fastJson
+, withKrb5 ? true
+, libkrb5
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, systemd
+, withJemalloc ? true
+, jemalloc
+, withMysql ? true
+, libmysqlclient
+, withPostgres ? true
+, postgresql
+, withDbi ? true
+, libdbi
+, withNetSnmp ? true
+, net-snmp
+, withUuid ? true
+, libuuid
+, withCurl ? true
+, curl
+, withGnutls ? true
+, gnutls
+, withGcrypt ? true
+, libgcrypt
+, withLognorm ? true
+, liblognorm
+, withMaxminddb ? true
+, libmaxminddb
+, withOpenssl ? true
+, openssl
+, withRelp ? true
+, librelp
+, withKsi ? true
+, libksi
+, withLogging ? true
+, liblogging
+, withNet ? true
+, libnet
+, withHadoop ? true
+, hadoop
+, withRdkafka ? true
+, rdkafka
+, withMongo ? true
+, mongoc
+, withCzmq ? true
+, czmq
+, withRabbitmq ? true
+, rabbitmq-c
+, withHiredis ? true
+, hiredis
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rsyslog";
+  version = "8.2312.0";
+
+  src = fetchurl {
+    url = "https://www.rsyslog.com/files/download/rsyslog/${pname}-${version}.tar.gz";
+    hash = "sha256-d0AyAGEoqJZDf1kT4TKqJ9v7k3zYhH5ElSLVoS1j0D4=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    autoreconfHook
+    docutils
+  ];
+
+  buildInputs = [
+    fastJson
+    libestr
+    json_c
+    zlib
+  ] ++ lib.optional withKrb5 libkrb5
+  ++ lib.optional withJemalloc jemalloc
+  ++ lib.optional withPostgres postgresql
+  ++ lib.optional withDbi libdbi
+  ++ lib.optional withNetSnmp net-snmp
+  ++ lib.optional withUuid libuuid
+  ++ lib.optional withCurl curl
+  ++ lib.optional withGnutls gnutls
+  ++ lib.optional withGcrypt libgcrypt
+  ++ lib.optional withLognorm liblognorm
+  ++ lib.optional withOpenssl openssl
+  ++ lib.optional withRelp librelp
+  ++ lib.optional withKsi libksi
+  ++ lib.optional withLogging liblogging
+  ++ lib.optional withNet libnet
+  ++ lib.optional withHadoop hadoop
+  ++ lib.optional withRdkafka rdkafka
+  ++ lib.optionals withMongo [ mongoc ]
+  ++ lib.optional withCzmq czmq
+  ++ lib.optional withRabbitmq rabbitmq-c
+  ++ lib.optional withHiredis hiredis
+  ++ lib.optional withMaxminddb libmaxminddb
+  ++ lib.optional withMysql libmysqlclient
+  ++ lib.optional withSystemd systemd;
+
+  configureFlags = with lib; [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-systemdsystemunitdir=\${out}/etc/systemd/system"
+    (enableFeature true "largefile")
+    (enableFeature true "regexp")
+    (enableFeature withKrb5 "gssapi-krb5")
+    (enableFeature true "klog")
+    (enableFeature true "kmsg")
+    (enableFeature withSystemd "imjournal")
+    (enableFeature true "inet")
+    (enableFeature withJemalloc "jemalloc")
+    (enableFeature true "unlimited-select")
+    (enableFeature withCurl "clickhouse")
+    (enableFeature false "debug")
+    (enableFeature false "debug-symbols")
+    (enableFeature true "debugless")
+    (enableFeature false "valgrind")
+    (enableFeature false "diagtools")
+    (enableFeature withCurl "fmhttp")
+    (enableFeature true "usertools")
+    (enableFeature withMysql "mysql")
+    (enableFeature withPostgres "pgsql")
+    (enableFeature withDbi "libdbi")
+    (enableFeature withNetSnmp "snmp")
+    (enableFeature withUuid "uuid")
+    (enableFeature withCurl "elasticsearch")
+    (enableFeature withGnutls "gnutls")
+    (enableFeature withGcrypt "libgcrypt")
+    (enableFeature true "rsyslogrt")
+    (enableFeature true "rsyslogd")
+    (enableFeature true "mail")
+    (enableFeature withLognorm "mmnormalize")
+    (enableFeature withMaxminddb "mmdblookup")
+    (enableFeature true "mmjsonparse")
+    (enableFeature true "mmaudit")
+    (enableFeature true "mmanon")
+    (enableFeature true "mmutf8fix")
+    (enableFeature true "mmcount")
+    (enableFeature true "mmsequence")
+    (enableFeature true "mmfields")
+    (enableFeature true "mmpstrucdata")
+    (enableFeature withOpenssl "mmrfc5424addhmac")
+    (enableFeature withRelp "relp")
+    (enableFeature withKsi "ksi-ls12")
+    (enableFeature withLogging "liblogging-stdlog")
+    (enableFeature withLogging "rfc3195")
+    (enableFeature true "imfile")
+    (enableFeature false "imsolaris")
+    (enableFeature true "imptcp")
+    (enableFeature true "impstats")
+    (enableFeature true "omprog")
+    (enableFeature withNet "omudpspoof")
+    (enableFeature true "omstdout")
+    (enableFeature withSystemd "omjournal")
+    (enableFeature true "pmlastmsg")
+    (enableFeature true "pmcisconames")
+    (enableFeature true "pmciscoios")
+    (enableFeature true "pmaixforwardedfrom")
+    (enableFeature true "pmsnare")
+    (enableFeature true "omruleset")
+    (enableFeature true "omuxsock")
+    (enableFeature true "mmsnmptrapd")
+    (enableFeature withHadoop "omhdfs")
+    (enableFeature withRdkafka "omkafka")
+    (enableFeature withMongo "ommongodb")
+    (enableFeature withCzmq "imczmq")
+    (enableFeature withCzmq "omczmq")
+    (enableFeature withRabbitmq "omrabbitmq")
+    (enableFeature withHiredis "omhiredis")
+    (enableFeature withCurl "omhttp")
+    (enableFeature true "generate-man-pages")
+  ];
+
+  passthru.tests = {
+    nixos-rsyslogd = nixosTests.rsyslogd;
+  };
+
+  meta = with lib; {
+    homepage = "https://www.rsyslog.com/";
+    description = "Enhanced syslog implementation";
+    changelog = "https://raw.githubusercontent.com/rsyslog/rsyslog/v${version}/ChangeLog";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/runit/default.nix b/nixpkgs/pkgs/tools/system/runit/default.nix
new file mode 100644
index 000000000000..2553c07cd6b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/runit/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchurl, darwin
+
+# Build runit-init as a static binary
+, static ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "runit";
+  version = "2.1.2";
+
+  src = fetchurl {
+    url = "http://smarden.org/runit/${pname}-${version}.tar.gz";
+    sha256 = "065s8w62r6chjjs6m9hapcagy33m75nlnxb69vg0f4ngn061dl3g";
+  };
+
+  patches = [
+    ./fix-ar-ranlib.patch
+  ];
+
+  outputs = [ "out" "man" ];
+
+  sourceRoot = "admin/${pname}-${version}";
+
+  doCheck = true;
+
+  buildInputs = lib.optionals static [ stdenv.cc.libc stdenv.cc.libc.static ] ++
+    lib.optional stdenv.isDarwin darwin.apple_sdk.libs.utmp;
+
+  postPatch = ''
+    sed -i "s,\(#define RUNIT\) .*,\1 \"$out/bin/runit\"," src/runit.h
+    # usernamespace sandbox of nix seems to conflict with runit's assumptions
+    # about unix users. Therefor skip the check
+    sed -i '/.\/chkshsgr/d' src/Makefile
+  '' + lib.optionalString (!static) ''
+    sed -i 's,-static,,g' src/Makefile
+  '';
+
+  preBuild = ''
+    cd src
+
+    # Both of these are originally hard-coded to gcc
+    echo ${stdenv.cc.targetPrefix}cc > conf-cc
+    echo ${stdenv.cc.targetPrefix}cc ${lib.optionalString stdenv.isDarwin "-Xlinker -x "}> conf-ld
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -t $out/bin $(< ../package/commands)
+
+    mkdir -p $man/share/man
+    cp -r ../man $man/share/man/man8
+  '';
+
+  meta = with lib; {
+    description = "UNIX init scheme with service supervision";
+    license = licenses.bsd3;
+    homepage = "http://smarden.org/runit";
+    maintainers = with maintainers; [ joachifm ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/runit/fix-ar-ranlib.patch b/nixpkgs/pkgs/tools/system/runit/fix-ar-ranlib.patch
new file mode 100644
index 000000000000..c65a037d5242
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/runit/fix-ar-ranlib.patch
@@ -0,0 +1,18 @@
+--- runit-2.1.2/src/print-ar.sh
++++ runit-2.1.2/src/print-ar.sh
+@@ -1,7 +1,7 @@
+ cat warn-auto.sh
+ echo 'main="$1"; shift'
+ echo 'rm -f "$main"'
+-echo 'ar cr "$main" ${1+"$@"}'
++echo '$AR cr "$main" ${1+"$@"}'
+ case "`cat systype`" in
+   sunos-5.*) ;;
+   unix_sv*) ;;
+@@ -10,5 +10,5 @@ case "`cat systype`" in
+   dgux-*) ;;
+   hp-ux-*) ;;
+   sco*) ;;
+-  *) echo 'ranlib "$main"' ;;
++  *) echo '$RANLIB "$main"' ;;
+ esac
diff --git a/nixpkgs/pkgs/tools/system/runitor/default.nix b/nixpkgs/pkgs/tools/system/runitor/default.nix
new file mode 100644
index 000000000000..d5d2f50cc0f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/runitor/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, runitor }:
+
+buildGoModule rec {
+  pname = "runitor";
+  version = "1.2.0";
+  vendorHash = null;
+
+  src = fetchFromGitHub {
+    owner = "bdd";
+    repo = "runitor";
+    rev = "v${version}";
+    sha256 = "sha256-lL9yfiqPIIfEvjiWcG6e1NrURHJFdk4x/od/w7/i2DE=";
+  };
+
+  ldflags = [
+    "-s" "-w" "-X main.Version=v${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = runitor;
+    command = "runitor -version";
+    version = "v${version}";
+  };
+
+  # Unit tests require binding to local addresses for listening sockets.
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    homepage = "https://bdd.fi/x/runitor";
+    description = "A command runner with healthchecks.io integration";
+    longDescription = ''
+      Runitor runs the supplied command, captures its output, and based on its exit
+      code reports successful or failed execution to https://healthchecks.io or your
+      private instance.
+
+      Healthchecks.io is a web service for monitoring periodic tasks. It's like a
+      dead man's switch for your cron jobs. You get alerted if they don't run on time
+      or terminate with a failure.
+    '';
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ bdd ];
+    mainProgram = "runitor";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/rwc/default.nix b/nixpkgs/pkgs/tools/system/rwc/default.nix
new file mode 100644
index 000000000000..e283fb4005b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/rwc/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "rwc";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "leahneukirchen";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-rB20XKprd8jPwvXYdjIEr3/8ygPGCDAgLKbHfw0EgPk=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Report when files are changed";
+    license = licenses.publicDomain;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ somasis ];
+    mainProgram = "rwc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/s-tui/default.nix b/nixpkgs/pkgs/tools/system/s-tui/default.nix
new file mode 100644
index 000000000000..8f81ba97a0da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/s-tui/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, python3Packages
+, fetchPypi
+, nix-update-script
+, s-tui
+, testers
+}:
+
+python3Packages.buildPythonPackage rec {
+  pname = "s-tui";
+  version = "1.1.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-soVrmzlVy0zrqvOclR7SfPphp4xAEHv+xdr0NN19ye0=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    urwid
+    psutil
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = testers.testVersion { package = s-tui; };
+  };
+
+  meta = with lib; {
+    homepage = "https://amanusk.github.io/s-tui/";
+    description = "Stress-Terminal UI monitoring tool";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ infinisil ];
+    broken = stdenv.isDarwin; # https://github.com/amanusk/s-tui/issues/49
+    mainProgram = "s-tui";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/s0ix-selftest-tool/default.nix b/nixpkgs/pkgs/tools/system/s0ix-selftest-tool/default.nix
new file mode 100644
index 000000000000..535a68f6ff75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/s0ix-selftest-tool/default.nix
@@ -0,0 +1,81 @@
+{
+  acpica-tools,
+  bash,
+  bc,
+  coreutils,
+  fetchFromGitHub,
+  gawk,
+  gnugrep,
+  gnused,
+  linuxPackages,
+  lib,
+  pciutils,
+  powertop,
+  resholve,
+  util-linux,
+  xorg,
+  xxd,
+}:
+resholve.mkDerivation {
+  pname = "s0ix-selftest-tool";
+  version = "unstable-2022-11-04";
+
+  src = fetchFromGitHub {
+    owner = "intel";
+    repo = "S0ixSelftestTool";
+    rev = "1b6db3c3470a3a74b052cb728a544199661d18ec";
+    hash = "sha256-w97jfdppW8kC8K8XvBntmkfntIctXDQCWmvug+H1hKA=";
+  };
+
+  # don't use the bundled turbostat binary
+  postPatch = ''
+    substituteInPlace s0ix-selftest-tool.sh --replace '"$DIR"/turbostat' 'turbostat'
+    substituteInPlace s0ix-selftest-tool.sh --replace 'sudo ' ""
+
+  '';
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 s0ix-selftest-tool.sh "$out/bin/s0ix-selftest-tool"
+    runHook postInstall
+  '';
+
+  solutions = {
+    default = {
+      scripts = ["bin/s0ix-selftest-tool"];
+      interpreter = lib.getExe bash;
+      inputs = [
+        acpica-tools
+        bc
+        coreutils
+        gawk
+        gnugrep
+        gnused
+        linuxPackages.turbostat
+        pciutils
+        powertop
+        util-linux
+        xorg.xset
+        xxd
+      ];
+      execer = [
+        "cannot:${util-linux}/bin/dmesg"
+        "cannot:${powertop}/bin/powertop"
+        "cannot:${util-linux}/bin/rtcwake"
+        "cannot:${linuxPackages.turbostat}/bin/turbostat"
+      ];
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/intel/S0ixSelftestTool";
+    description = "A tool for testing the S2idle path CPU Package C-state and S0ix failures";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [adamcstephens];
+    mainProgram = "s0ix-selftest-tool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/safe-rm/default.nix b/nixpkgs/pkgs/tools/system/safe-rm/default.nix
new file mode 100644
index 000000000000..26b0aba9889f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/safe-rm/default.nix
@@ -0,0 +1,37 @@
+{ lib, rustPlatform, fetchgit, coreutils, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "safe-rm";
+  version = "1.1.0";
+
+  src = fetchgit {
+    url = "https://git.launchpad.net/safe-rm";
+    rev = "refs/tags/${pname}-${version}";
+    sha256 = "sha256-7+4XwsjzLBCQmHDYNwhlN4Yg3eL43GUEbq8ROtuP2Kw=";
+  };
+
+  cargoSha256 = "sha256-durb4RTzEun7HPeYfvDJpvO+6L7tNFmAxdIwINbwZrg=";
+
+  postPatch = ''
+    substituteInPlace src/main.rs \
+      --replace "/bin/rm" "${coreutils}/bin/rm"
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # uses lots of absolute paths outside of the sandbox
+  doCheck = false;
+
+  postInstall = ''
+    installManPage safe-rm.1
+  '';
+
+  meta = with lib; {
+    description = "Tool intended to prevent the accidental deletion of important files";
+    homepage = "https://launchpad.net/safe-rm";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "safe-rm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/safecopy/default.nix b/nixpkgs/pkgs/tools/system/safecopy/default.nix
new file mode 100644
index 000000000000..2bf454777765
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/safecopy/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "safecopy";
+  version = "1.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/safecopy/safecopy/safecopy-${version}/safecopy-${version}.tar.gz";
+    sha256 = "1zf4kk9r8za9pn4hzy1y3j02vrhl1rxfk5adyfq0w0k48xfyvys2";
+  };
+
+  meta = {
+    description = "Data recovery tool for damaged hardware";
+
+    longDescription =
+      '' Safecopy is a data recovery tool which tries to extract as much data as possible from a
+         problematic (i.e. damaged sectors) source - like floppy drives, hard disk partitions, CDs,
+         tape devices, etc, where other tools like dd would fail due to I/O errors.
+
+         Safecopy includes a low level IO layer to read CDROM disks in raw mode, and issue device
+         resets and other helpful low level operations on a number of other device classes.
+       '';
+
+    homepage = "https://safecopy.sourceforge.net";
+
+    license = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.bluescreen303 ];
+    mainProgram = "safecopy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/setserial/default.nix b/nixpkgs/pkgs/tools/system/setserial/default.nix
new file mode 100644
index 000000000000..d224b96d89dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/setserial/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, groff }:
+
+stdenv.mkDerivation rec {
+  pname = "setserial";
+  version = "2.17";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/setserial/${pname}-${version}.tar.gz";
+    sha256 = "0jkrnn3i8gbsl48k3civjmvxyv9rbm1qjha2cf2macdc439qfi3y";
+  };
+
+  nativeBuildInputs = [ groff ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postConfigure = ''
+    sed -e s@/usr/man/@/share/man/@ -i Makefile
+  '';
+
+  preInstall = ''mkdir -p "$out/bin" "$out/share/man/man8"'';
+
+  meta = {
+    description = "Serial port configuration utility";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    mainProgram = "setserial";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/sg3_utils/default.nix b/nixpkgs/pkgs/tools/system/sg3_utils/default.nix
new file mode 100644
index 000000000000..3975a5927f47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/sg3_utils/default.nix
@@ -0,0 +1,18 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "sg3_utils";
+  version = "1.48";
+
+  src = fetchurl {
+    url = "https://sg.danny.cz/sg/p/sg3_utils-${version}.tgz";
+    sha256 = "sha256-1itsPPIDkPpzVwRDkAhBZtJfHZMqETXEULaf5cKD13M=";
+  };
+
+  meta = with lib; {
+    homepage = "https://sg.danny.cz/sg/";
+    description = "Utilities that send SCSI commands to devices";
+    platforms = platforms.linux;
+    license = with licenses; [ bsd2 gpl2Plus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/skeema/default.nix b/nixpkgs/pkgs/tools/system/skeema/default.nix
new file mode 100644
index 000000000000..38d6c4d1f75a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/skeema/default.nix
@@ -0,0 +1,58 @@
+{ lib, buildGoModule, fetchFromGitHub, coreutils, testers, skeema }:
+
+buildGoModule rec {
+  pname = "skeema";
+  version = "1.11.1";
+
+  src = fetchFromGitHub {
+    owner = "skeema";
+    repo = "skeema";
+    rev = "v${version}";
+    hash = "sha256-S7eMqaz8BZ80AwIrVmX+rnEgIwEdy8q65FIy6Mac4CY=";
+  };
+
+  vendorHash = null;
+
+  CGO_ENABLED = 0;
+
+  ldflags = [ "-s" "-w" ];
+
+  preCheck =
+    let
+      skippedTests = [
+        # Tests requiring network access to gitlab.com
+        "TestDirRelPath"
+        "TestParseDirSymlinks"
+
+        # Flaky tests
+        "TestCommandTimeout"
+        "TestShellOutTimeout"
+      ];
+    in
+    ''
+      buildFlagsArray+=("-run" "[^(${builtins.concatStringsSep "|" skippedTests})]")
+
+      # Fix tests expecting /usr/bin/printf and /bin/echo
+      substituteInPlace skeema_cmd_test.go \
+        --replace /usr/bin/printf "${coreutils}/bin/printf"
+
+      substituteInPlace internal/fs/dir_test.go \
+        --replace /bin/echo "${coreutils}/bin/echo" \
+        --replace /usr/bin/printf "${coreutils}/bin/printf"
+
+      substituteInPlace internal/applier/ddlstatement_test.go \
+        --replace /bin/echo "${coreutils}/bin/echo"
+    '';
+
+  passthru.tests.version = testers.testVersion {
+    package = skeema;
+  };
+
+  meta = with lib; {
+    description = "Declarative pure-SQL schema management for MySQL and MariaDB";
+    homepage = "https://skeema.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aaronjheng ];
+    mainProgram = "skeema";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/sleuthkit/default.nix b/nixpkgs/pkgs/tools/system/sleuthkit/default.nix
new file mode 100644
index 000000000000..175ec98fe220
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/sleuthkit/default.nix
@@ -0,0 +1,120 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, libewf
+, afflib
+, openssl
+, zlib
+, openjdk
+, perl
+, ant
+}:
+
+stdenv.mkDerivation rec {
+  version = "4.12.1";
+  pname = "sleuthkit";
+
+  sleuthsrc = fetchFromGitHub {
+    owner = "sleuthkit";
+    repo = "sleuthkit";
+    rev = "${pname}-${version}";
+    hash = "sha256-q51UY2lIcLijycNaq9oQIwUXpp/1mfc3oPN4syOPF44=";
+  };
+
+  # Fetch libraries using a fixed output derivation
+  rdeps = stdenv.mkDerivation rec {
+
+    version = "1.0";
+    pname = "sleuthkit-deps";
+    nativeBuildInputs = [
+      openjdk
+      ant
+    ];
+
+    src = sleuthsrc;
+
+    # unpack, build, install
+    dontConfigure = true;
+
+    buildPhase = ''
+      export IVY_HOME=$NIX_BUILD_TOP/.ant
+      pushd bindings/java
+      ant retrieve-deps
+      popd
+      pushd case-uco/java
+      ant get-ivy-dependencies
+      popd
+    '';
+
+    installPhase = ''
+      export IVY_HOME=$NIX_BUILD_TOP/.ant
+      mkdir -m 755 -p $out/bindings/java
+      cp -r bindings/java/lib $out/bindings/java
+      mkdir -m 755 -p $out/case-uco/java
+      cp -r case-uco/java/lib $out/case-uco/java
+      cp -r $IVY_HOME/lib $out
+      chmod -R 755 $out/lib
+    '';
+
+    outputHashMode = "recursive";
+    outputHash = "0fq7v6zlgybg4v6k9wqjlk4gaqgjrpihbnr182vaqriihflav2s8";
+    outputHashAlgo = "sha256";
+  };
+
+  src = sleuthsrc;
+
+  postPatch = ''
+    substituteInPlace tsk/img/ewf.cpp --replace libewf_handle_read_random libewf_handle_read_buffer_at_offset
+  '';
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [
+    autoreconfHook
+    openjdk
+    perl
+    ant
+    rdeps
+  ];
+
+  buildInputs = [
+    libewf
+    afflib
+    openssl
+    zlib
+  ];
+
+  # Hack to fix the RPATH
+  preFixup = ''
+    rm -rf */.libs
+  '';
+
+  postUnpack = ''
+    export IVY_HOME="$NIX_BUILD_TOP/.ant"
+    export JAVA_HOME="${openjdk}"
+    export ant_args="-Doffline=true -Ddefault-jar-location=$IVY_HOME/lib"
+
+    # pre-positioning these jar files allows -Doffline=true to work
+    mkdir -p source/{bindings,case-uco}/java $IVY_HOME
+    cp -r ${rdeps}/bindings/java/lib source/bindings/java
+    chmod -R 755 source/bindings/java
+    cp -r ${rdeps}/case-uco/java/lib source/case-uco/java
+    chmod -R 755 source/case-uco/java
+    cp -r ${rdeps}/lib $IVY_HOME
+    chmod -R 755 $IVY_HOME
+  '';
+
+  meta = with lib; {
+    description = "A forensic/data recovery tool";
+    homepage = "https://www.sleuthkit.org/";
+    changelog = "https://github.com/sleuthkit/sleuthkit/releases/tag/sleuthkit-${version}";
+    maintainers = with maintainers; [ raskin gfrascadorio ];
+    platforms = platforms.linux;
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # dependencies
+    ];
+    license = licenses.ipl10;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/smartmontools/default.nix b/nixpkgs/pkgs/tools/system/smartmontools/default.nix
new file mode 100644
index 000000000000..55ec05d2a9a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/smartmontools/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchurl
+, autoreconfHook
+, enableMail ? false
+, gnused
+, hostname
+, mailutils
+, IOKit
+, ApplicationServices
+}:
+
+let
+  dbrev = "5388";
+  drivedbBranch = "RELEASE_7_3_DRIVEDB";
+  driverdb = fetchurl {
+    url = "https://sourceforge.net/p/smartmontools/code/${dbrev}/tree/branches/${drivedbBranch}/smartmontools/drivedb.h?format=raw";
+    sha256 = "sha256-0dtLev4JjeHsS259+qOgg19rz4yjkeX4D3ooUgS4RTI=";
+    name = "smartmontools-drivedb.h";
+  };
+  scriptPath = lib.makeBinPath ([ gnused hostname ] ++ lib.optionals enableMail [ mailutils ]);
+
+in
+stdenv.mkDerivation rec {
+  pname = "smartmontools";
+  version = "7.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/smartmontools/${pname}-${version}.tar.gz";
+    hash = "sha256-6aYfZB/5bKlTGe37F5SM0pfQzTNCc2ssScmdRxb7mT0=";
+  };
+
+  patches = [
+    # fixes darwin build
+    ./smartmontools.patch
+  ];
+  postPatch = ''
+    cp -v ${driverdb} drivedb.h
+  '';
+
+  configureFlags = [
+    "--with-scriptpath=${scriptPath}"
+    # does not work on NixOS
+    "--without-update-smart-drivedb"
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = lib.optionals stdenv.isDarwin [ IOKit ApplicationServices ];
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Tools for monitoring the health of hard drives";
+    homepage = "https://www.smartmontools.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ Frostman ];
+    platforms = with platforms; linux ++ darwin;
+    mainProgram = "smartctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/smartmontools/smartmontools.patch b/nixpkgs/pkgs/tools/system/smartmontools/smartmontools.patch
new file mode 100644
index 000000000000..144b2be2d334
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/smartmontools/smartmontools.patch
@@ -0,0 +1,26 @@
+diff --git a/../smartmontools-6.5/configure b/./configure
+index acb028a..5e2c7a1 100755
+--- a/../smartmontools-6.5/configure
++++ b/./configure
+@@ -6703,7 +6703,7 @@ fi
+     ;;
+   *-*-darwin*)
+     os_deps='os_darwin.o'
+-    os_libs='-framework CoreFoundation -framework IOKit'
++    os_libs='-framework ApplicationServices -framework IOKit'
+     os_darwin=yes
+     os_man_filter=Darwin
+     ;;
+diff --git a/../smartmontools-6.5/configure.ac b/./configure.ac
+index 6bd61d7..32ff50c 100644
+--- a/../smartmontools-6.5/configure.ac
++++ b/./configure.ac
+@@ -508,7 +508,7 @@ case "${host}" in
+     ;;
+   *-*-darwin*)
+     os_deps='os_darwin.o'
+-    os_libs='-framework CoreFoundation -framework IOKit'
++    os_libs='-framework ApplicationServices -framework IOKit'
+     os_darwin=yes
+     os_man_filter=Darwin
+     ;;
diff --git a/nixpkgs/pkgs/tools/system/snooze/default.nix b/nixpkgs/pkgs/tools/system/snooze/default.nix
new file mode 100644
index 000000000000..1a719a494f84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/snooze/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+  pname = "snooze";
+  version = "0.5";
+  src = fetchFromGitHub {
+    owner = "leahneukirchen";
+    repo = "snooze";
+    rev = "v${version}";
+    sha256 = "sha256-K77axli/mapUr3yxpmUfFq4iWwgRmEVUlP6+/0Iezwo=";
+  };
+  makeFlags = [ "DESTDIR=$(out)" "PREFIX=/" ];
+
+  meta = with lib; {
+    description = "Tool for waiting until a particular time and then running a command";
+    maintainers = with maintainers; [ kaction ];
+    license = licenses.cc0;
+    platforms = platforms.unix;
+    mainProgram = "snooze";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/socklog/default.nix b/nixpkgs/pkgs/tools/system/socklog/default.nix
new file mode 100644
index 000000000000..8ba9ab21b13d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/socklog/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "socklog";
+  version = "2.1.0";
+
+  src = fetchurl {
+    url = "http://smarden.org/socklog/socklog-${version}.tar.gz";
+    sha256 = "0mdlmhiq2j2fip7c4l669ams85yc3c1s1d89am7dl170grw9m1ma";
+  };
+
+  sourceRoot = "admin/socklog-${version}";
+
+  outputs = [ "out" "man" "doc" ];
+
+  postPatch = ''
+    # Fails to run as user without supplementary groups
+    echo "int main() { return 0; }" >src/chkshsgr.c
+
+    # Fixup implicit function declarations
+    sed -i src/pathexec_run.c -e '1i#include <unistd.h>'
+    sed -i src/prot.c -e '1i#include <unistd.h>' -e '2i#include <grp.h>'
+    sed -i src/seek_set.c -e '1i#include <unistd.h>'
+  '';
+
+  configurePhase = ''
+    echo "$NIX_CC/bin/cc $NIX_CFLAGS_COMPILE"   >src/conf-cc
+    echo "$NIX_CC/bin/cc -s"                    >src/conf-ld
+  '';
+
+  buildPhase = "package/compile";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv command"/"* $out/bin
+
+    for i in {1,8} ; do
+      mkdir -p $man/share/man/man$i
+      mv man"/"*.$i $man/share/man/man$i
+    done
+
+    mkdir -p $doc/share/doc/socklog/html
+    mv doc/*.html $doc/share/doc/socklog/html/
+  '';
+
+  checkPhase = "package/check";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "System and kernel logging services";
+    homepage = "http://smarden.org/socklog/";
+    license = licenses.publicDomain;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.joachifm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/stacer/default.nix b/nixpkgs/pkgs/tools/system/stacer/default.nix
new file mode 100644
index 000000000000..57d376bea9fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/stacer/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, qtcharts
+, qttools
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stacer";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "oguzhaninan";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0qndzzkbq6abapvwq202kva8j619jdn9977sbqmmfs9zkjz4mbsd";
+  };
+
+  postPatch = ''
+    substituteInPlace stacer/Managers/app_manager.cpp \
+      --replace 'qApp->applicationDirPath() + "/translations"' \
+                'QStandardPaths::locate(QStandardPaths::AppDataLocation, "translations", QStandardPaths::LocateDirectory)'
+  '';
+
+  buildInputs = [
+    qtcharts
+    qttools
+  ];
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  preConfigure = ''
+    lrelease stacer/stacer.pro
+  '';
+
+  postInstall = ''
+    install -Dm644 ../translations/*.qm -t $out/share/stacer/translations
+  '';
+
+  meta = with lib; {
+    description = "Linux System Optimizer and Monitoring";
+    homepage = "https://github.com/oguzhaninan/stacer";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dit7ya ];
+    platforms = platforms.linux;
+    mainProgram = "stacer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/stress-ng/default.nix b/nixpkgs/pkgs/tools/system/stress-ng/default.nix
new file mode 100644
index 000000000000..f37d5f628791
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/stress-ng/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchFromGitHub
+, attr, judy, keyutils, libaio, libapparmor, libbsd, libcap, libgcrypt, lksctp-tools, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stress-ng";
+  version = "0.17.04";
+
+  src = fetchFromGitHub {
+    owner = "ColinIanKing";
+    repo = pname;
+    rev = "V${version}";
+    hash = "sha256-oD2NosZ5lswdSL1sh/nOHdRNyzrNJt+t+8r/dx9Z9/k=";
+  };
+
+  postPatch = ''
+    sed -i '/\#include <bsd\/string.h>/i #undef HAVE_STRLCAT\n#undef HAVE_STRLCPY' stress-ng.h
+  ''; # needed because of Darwin patch on libbsd
+
+  # All platforms inputs then Linux-only ones
+  buildInputs = [ judy libbsd libgcrypt zlib ]
+    ++ lib.optionals stdenv.hostPlatform.isLinux [
+      attr keyutils libaio libapparmor libcap lksctp-tools
+    ];
+
+  makeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "MANDIR=${placeholder "out"}/share/man/man1"
+    "JOBDIR=${placeholder "out"}/share/stress-ng/example-jobs"
+    "BASHDIR=${placeholder "out"}/share/bash-completion/completions"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isMusl "-D_LINUX_SYSINFO_H=1";
+
+  # Won't build on i686 because the binary will be linked again in the
+  # install phase without checking the dependencies. This will prevent
+  # triggering the rebuild. Why this only happens on i686 remains a
+  # mystery, though. :-(
+  enableParallelBuilding = (!stdenv.isi686);
+
+  meta = with lib; {
+    description = "Stress test a computer system";
+    longDescription = ''
+      stress-ng will stress test a computer system in various selectable ways. It
+      was designed to exercise various physical subsystems of a computer as well as
+      the various operating system kernel interfaces. Stress-ng features:
+
+        * over 210 stress tests
+        * over 50 CPU specific stress tests that exercise floating point, integer,
+          bit manipulation and control flow
+        * over 20 virtual memory stress tests
+        * portable: builds on Linux, Solaris, *BSD, Minix, Android, MacOS X,
+          Debian Hurd, Haiku, Windows Subsystem for Linux and SunOs/Dilos with
+          gcc, clang, tcc and pcc.
+
+      stress-ng was originally intended to make a machine work hard and trip hardware
+      issues such as thermal overruns as well as operating system bugs that only
+      occur when a system is being thrashed hard. Use stress-ng with caution as some
+      of the tests can make a system run hot on poorly designed hardware and also can
+      cause excessive system thrashing which may be difficult to stop.
+
+      stress-ng can also measure test throughput rates; this can be useful to observe
+      performance changes across different operating system releases or types of
+      hardware. However, it has never been intended to be used as a precise benchmark
+      test suite, so do NOT use it in this manner.
+    '';
+    homepage = "https://github.com/ColinIanKing/stress-ng";
+    downloadPage = "https://github.com/ColinIanKing/stress-ng/tags";
+    changelog = "https://github.com/ColinIanKing/stress-ng/raw/V${version}/debian/changelog";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ c0bw3b ];
+    platforms = platforms.unix;
+    mainProgram = "stress-ng";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/stress/default.nix b/nixpkgs/pkgs/tools/system/stress/default.nix
new file mode 100644
index 000000000000..0334ed757b36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/stress/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "stress";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "resurrecting-open-source-projects";
+    repo = pname;
+    rev = version;
+    hash = "sha256-1r0n/KE4RpO0txIViGxuc7G+I4Ds9AJYcuMx2/R97jg=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Simple workload generator for POSIX systems. It imposes a configurable amount of CPU, memory, I/O, and disk stress on the system";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    mainProgram = "stress";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/stressapptest/default.nix b/nixpkgs/pkgs/tools/system/stressapptest/default.nix
new file mode 100644
index 000000000000..3243db0d0076
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/stressapptest/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libaio
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stressapptest";
+  version = "1.0.11";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-lZpF7PdUwKnV0ha6xkLvi7XYFZQ4Avy0ltlXxukuWjM=";
+  };
+
+  buildInputs = [
+    libaio
+  ];
+
+  meta = with lib; {
+    description = "Userspace memory and IO stress test tool";
+    homepage = "https://github.com/stressapptest/stressapptest";
+    changelog = "https://github.com/stressapptest/stressapptest/releases/tag/v${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.unix;
+    mainProgram = "stressapptest";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/suid-chroot/default.nix b/nixpkgs/pkgs/tools/system/suid-chroot/default.nix
new file mode 100644
index 000000000000..e12b0d828619
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/suid-chroot/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "suid-chroot";
+  version = "1.0.2";
+
+  src = fetchurl {
+    sha256 = "1a9xqhck0ikn8kfjk338h9v1yjn113gd83q0c50k78xa68xrnxjx";
+    url = "http://myweb.tiscali.co.uk/scottrix/linux/download/${pname}-${version}.tar.bz2";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace /usr $out
+    sed -i -e '/chmod u+s/d' Makefile
+  '';
+
+  meta = with lib; {
+    description = "Setuid-safe wrapper for chroot";
+    license = licenses.gpl2Plus;
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/supercronic/default.nix b/nixpkgs/pkgs/tools/system/supercronic/default.nix
new file mode 100644
index 000000000000..745202ce15c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/supercronic/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, python3
+, bash
+, coreutils
+}:
+
+buildGoModule rec {
+  pname = "supercronic";
+  version = "0.2.29";
+
+  src = fetchFromGitHub {
+    owner = "aptible";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-cYKVeWZEjWV5j68aTpBOE/z+5QcMBh5ovyXoV/u80o4=";
+  };
+
+  vendorHash = "sha256-uQFceysbRdcSaFvdfdFcJX6yzPWE26YYiVzAEISQeCc=";
+
+  excludedPackages = [ "cronexpr/cronexpr" ];
+
+  nativeCheckInputs = [ python3 bash coreutils ];
+
+  postConfigure = ''
+    # There are tests that set the shell to various paths
+    substituteInPlace cron/cron_test.go --replace /bin/sh ${bash}/bin/sh
+    substituteInPlace cron/cron_test.go --replace /bin/false ${coreutils}/bin/false
+  '';
+
+  meta = with lib; {
+    description = "Cron tool designed for use in containers";
+    homepage = "https://github.com/aptible/supercronic";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nasageek ];
+    mainProgram = "supercronic";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/supervise/default.nix b/nixpkgs/pkgs/tools/system/supervise/default.nix
new file mode 100644
index 000000000000..3d69faf7bd4f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/supervise/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+
+  pname = "supervise";
+  version = "1.4.0";
+
+  src = fetchzip {
+    url = "https://github.com/catern/supervise/releases/download/v${version}/supervise-${version}.tar.gz";
+    sha256 = "0jk6q2f67pfs18ah040lmsbvbrnjap7w04jjddsfn1j5bcrvs13x";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/catern/supervise";
+    description = "A minimal unprivileged process supervisor making use of modern Linux features";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with lib.maintainers; [ catern ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/symlinks/default.nix b/nixpkgs/pkgs/tools/system/symlinks/default.nix
new file mode 100644
index 000000000000..3a4029542559
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/symlinks/default.nix
@@ -0,0 +1,30 @@
+{ fetchFromGitHub, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "symlinks";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "brandt";
+    repo = "symlinks";
+    rev = "v${version}";
+    sha256 = "EMWd7T/k4v1uvXe2QxhyPoQKUpKIUANE9AOwX461FgU=";
+  };
+
+  buildFlags = [ "CC=${stdenv.cc}/bin/cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man8
+    cp symlinks $out/bin
+    cp symlinks.8 $out/share/man/man8
+  '';
+
+  meta = with lib; {
+    description = "Find and remedy problematic symbolic links on a system";
+    homepage = "https://github.com/brandt/symlinks";
+    license = licenses.mit;
+    maintainers = with maintainers; [ goibhniu ckauhaus ];
+    platforms = platforms.unix;
+    mainProgram = "symlinks";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/systemd-journal2gelf/default.nix b/nixpkgs/pkgs/tools/system/systemd-journal2gelf/default.nix
new file mode 100644
index 000000000000..cb319fbd52d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/systemd-journal2gelf/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "SystemdJournal2Gelf";
+  version = "unstable-2023-03-10";
+
+  src = fetchFromGitHub {
+    owner = "parse-nl";
+    repo = "SystemdJournal2Gelf";
+    rev = "863a15df5ed2d50365bb9c27424e3b118ce404c0";
+    hash = "sha256-AwJq0xZAoIpBz9kGERfmZZTn28LbAKIl3gUsFKL3yvs=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Export entries from systemd's journal and send them to a graylog server using gelf";
+    homepage = "https://github.com/parse-nl/SystemdJournal2Gelf";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fadenb fpletz ];
+    mainProgram = "SystemdJournal2Gelf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/systeroid/default.nix b/nixpkgs/pkgs/tools/system/systeroid/default.nix
new file mode 100644
index 000000000000..4cedd6db8a17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/systeroid/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, linux-doc
+, xorg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "systeroid";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-FnUXf2Ia/XIu9ESs71p0UrXC7y7n7SYpfU0+Es7KYqM=";
+  };
+
+  postPatch = ''
+    substituteInPlace systeroid-core/src/parsers.rs \
+      --replace '"/usr/share/doc/kernel-doc-*/Documentation/*",' '"${linux-doc}/share/doc/linux-doc/*",'
+  '';
+
+  cargoHash = "sha256-TTxvkRRVPCycEtAmm5BIOVc9bUmdqQBPSORBxHzm9ms=";
+
+  buildInputs = [
+    xorg.libxcb
+  ];
+
+  # tries to access /sys/
+  doCheck = false;
+
+  meta = with lib; {
+    description = "More powerful alternative to sysctl(8) with a terminal user interface";
+    homepage = "https://github.com/orhun/systeroid";
+    changelog = "https://github.com/orhun/systeroid/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/taskspooler/default.nix b/nixpkgs/pkgs/tools/system/taskspooler/default.nix
new file mode 100644
index 000000000000..269259547781
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/taskspooler/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchurl, makeWrapper, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "taskspooler";
+  version = "1.0.1";
+
+  src = fetchurl {
+    url = "https://vicerveza.homeunix.net/%7Eviric/wsgi-bin/hgweb.wsgi/ts/archive/7cf9a8bda6d3.tar.gz";
+    sha256 = "11i21s8sdmjl4gy5f3dyfsxsmg1japgs4r5ym0b3jdyp99xhpbl1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "PREFIX?=/usr/local" "PREFIX=$out"
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/ts \
+      --set-default TS_SLOTS "$(${coreutils}/bin/nproc --all)"
+  '';
+
+  meta = with lib; {
+    description = "Simple single node task scheduler";
+    homepage = "https://vicerveza.homeunix.net/~viric/wsgi-bin/hgweb.wsgi/ts";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.sheepforce ];
+    mainProgram = "ts";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/testdisk/default.nix b/nixpkgs/pkgs/tools/system/testdisk/default.nix
new file mode 100644
index 000000000000..9fe76c59052f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/testdisk/default.nix
@@ -0,0 +1,73 @@
+{ mkDerivation
+, lib, stdenv
+, fetchurl
+, ncurses
+, libuuid
+, pkg-config
+, libjpeg
+, zlib
+, libewf
+, enableNtfs ? !stdenv.isDarwin, ntfs3g ? null
+, enableExtFs ? !stdenv.isDarwin, e2fsprogs ? null
+, enableQt ? false, qtbase ? null, qttools ? null, qwt ? null
+}:
+
+assert enableNtfs -> ntfs3g != null;
+assert enableExtFs -> e2fsprogs != null;
+assert enableQt -> qtbase != null;
+assert enableQt -> qttools != null;
+assert enableQt -> qwt != null;
+
+(if enableQt then mkDerivation else stdenv.mkDerivation) rec {
+  pname = "testdisk";
+  version = "7.1";
+  src = fetchurl {
+    url = "https://www.cgsecurity.org/testdisk-${version}.tar.bz2";
+    sha256 = "1zlh44w67py416hkvw6nrfmjickc2d43v51vcli5p374d5sw84ql";
+  };
+
+  postPatch = ''
+    substituteInPlace linux/qphotorec.desktop \
+      --replace "/usr" "$out"
+  '';
+
+  enableParallelBuilding = true;
+
+  buildInputs = [
+    ncurses
+    libuuid
+    libjpeg
+    zlib
+    libewf
+  ]
+  ++ lib.optional enableNtfs ntfs3g
+  ++ lib.optional enableExtFs e2fsprogs
+  ++ lib.optionals enableQt [ qtbase qttools qwt ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-unused";
+
+  meta = with lib; {
+    homepage = "https://www.cgsecurity.org/wiki/Main_Page";
+    downloadPage = "https://www.cgsecurity.org/wiki/TestDisk_Download";
+    description = "Data recovery utilities";
+    longDescription = ''
+      TestDisk is a powerful free data recovery software. It was primarily
+      designed to help recover lost partitions and/or make non-booting disks
+      bootable again when these symptoms are caused by faulty software: certain
+      types of viruses or human error (such as accidentally deleting a
+      Partition Table).
+
+      PhotoRec is a file data recovery software designed to recover lost files
+      including video, documents and archives from hard disks, CD-ROMs, and
+      lost pictures (thus the Photo Recovery name) from digital camera memory.
+      PhotoRec ignores the file system and goes after the underlying data, so
+      it will still work even if your media's file system has been severely
+      damaged or reformatted.
+    '';
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.all;
+    maintainers = with maintainers; [ fgaz eelco ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/thermald/default.nix b/nixpkgs/pkgs/tools/system/thermald/default.nix
new file mode 100644
index 000000000000..1b96a33cdd33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/thermald/default.nix
@@ -0,0 +1,75 @@
+{ autoconf
+, autoconf-archive
+, automake
+, dbus
+, dbus-glib
+, docbook_xml_dtd_412
+, docbook-xsl-nons
+, fetchFromGitHub
+, gtk-doc
+, libevdev
+, libtool
+, libxml2
+, xz
+, pkg-config
+, lib, stdenv
+, upower
+}:
+
+stdenv.mkDerivation rec {
+  pname = "thermald";
+  version = "2.5.6";
+
+  outputs = [ "out" "devdoc" ];
+
+  src = fetchFromGitHub {
+    owner = "intel";
+    repo = "thermal_daemon";
+    rev = "v${version}";
+    sha256 = "sha256-7QoHq3NtBtGJ/ihiAkGWBng9mP+NAUiNX03Fb4T11cg=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    autoconf-archive
+    automake
+    docbook-xsl-nons
+    docbook_xml_dtd_412
+    gtk-doc
+    libtool
+    pkg-config
+  ];
+
+  buildInputs = [
+    dbus
+    dbus-glib
+    libevdev
+    libxml2
+    xz
+    upower
+  ];
+
+  configureFlags = [
+    "--sysconfdir=${placeholder "out"}/etc"
+    "--localstatedir=/var"
+    "--enable-gtk-doc"
+    "--with-dbus-sys-dir=${placeholder "out"}/share/dbus-1/system.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+  ];
+
+  preConfigure = "NO_CONFIGURE=1 ./autogen.sh";
+
+  postInstall = ''
+    cp ./data/thermal-conf.xml $out/etc/thermald/
+  '';
+
+  meta = with lib; {
+    description = "Thermal Daemon";
+    homepage = "https://github.com/intel/thermal_daemon";
+    changelog = "https://github.com/intel/thermal_daemon/blob/master/README.txt";
+    license = licenses.gpl2Plus;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = with maintainers; [ abbradar ];
+    mainProgram = "thermald";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/thinkfan/default.nix b/nixpkgs/pkgs/tools/system/thinkfan/default.nix
new file mode 100644
index 000000000000..17887cc7bdf5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/thinkfan/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, yaml-cpp
+, pkg-config
+, procps
+, coreutils
+, smartSupport ? false, libatasmart
+}:
+
+stdenv.mkDerivation rec {
+  pname = "thinkfan";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "vmatare";
+    repo = "thinkfan";
+    rev = version;
+    sha256 = "sha256-aREZv+t4QhtfLKOMrneLiRxgnu0fzB8UV8dvr1dnhx4=";
+  };
+
+  postPatch = ''
+    # fix hardcoded install path
+    substituteInPlace CMakeLists.txt --replace /etc $out/etc
+
+    # fix command paths in unit files
+    for unit in rcscripts/systemd/*; do
+      substituteInPlace "$unit" \
+        --replace /bin/kill ${procps}/bin/kill \
+        --replace /usr/bin/pkill ${procps}/bin/pkill \
+        --replace /usr/bin/sleep ${coreutils}/bin/sleep
+    done
+  '';
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_DOCDIR=share/doc/${pname}"
+    "-DUSE_NVML=OFF"
+    # force install unit files
+    "-DSYSTEMD_FOUND=ON"
+  ] ++ lib.optional smartSupport "-DUSE_ATASMART=ON";
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ yaml-cpp ] ++ lib.optional smartSupport libatasmart;
+
+  meta = {
+    description = "A simple, lightweight fan control program";
+    longDescription = ''
+      Thinkfan is a minimalist fan control program. Originally designed
+      specifically for IBM/Lenovo Thinkpads, it now supports any kind of
+      system via the sysfs hwmon interface (/sys/class/hwmon).
+    '';
+    license = lib.licenses.gpl3Plus;
+    homepage = "https://github.com/vmatare/thinkfan";
+    maintainers = with lib.maintainers; [ domenkozar rnhmjoj ];
+    platforms = lib.platforms.linux;
+    mainProgram = "thinkfan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/throttled/default.nix b/nixpkgs/pkgs/tools/system/throttled/default.nix
new file mode 100644
index 000000000000..f09c0480865f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/throttled/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages, pciutils }:
+
+stdenv.mkDerivation rec {
+  pname = "throttled";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "erpalma";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-0MsPp6y4r/uZB2SplKV+SAiJoxIs2jgOQmQoQQ2ZKwI=";
+  };
+
+  nativeBuildInputs = [ python3Packages.wrapPython ];
+
+  pythonPath = with python3Packages; [
+    configparser
+    dbus-python
+    pygobject3
+  ];
+
+  # The upstream unit both assumes the install location, and tries to run in a virtualenv
+  postPatch = ''
+    sed -e 's|ExecStart=.*|ExecStart=${placeholder "out"}/bin/throttled.py|' -i systemd/throttled.service
+
+    substituteInPlace throttled.py --replace "'setpci'" "'${pciutils}/bin/setpci'"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D -m755 -t $out/bin throttled.py
+    install -D -t $out/bin throttled.py mmio.py
+    install -D -m644 -t $out/etc etc/*
+    install -D -m644 -t $out/lib/systemd/system systemd/*
+    runHook postInstall
+  '';
+
+  postFixup = "wrapPythonPrograms";
+
+  meta = with lib; {
+    description = "Fix for Intel CPU throttling issues";
+    homepage = "https://github.com/erpalma/throttled";
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ michaelpj ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/tm/default.nix b/nixpkgs/pkgs/tools/system/tm/default.nix
new file mode 100644
index 000000000000..129630596373
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/tm/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tm";
+  version = "0.4.1";
+
+  src = fetchurl {
+    url = "https://vicerveza.homeunix.net/~viric/soft/tm/tm-${version}.tar.gz";
+    sha256 = "3b389bc03b6964ad5ffa57a344b891fdbcf7c9b2604adda723a863f83657c4a0";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postPatch = ''
+    sed -i 's@/usr/bin/install@install@g ; s/gcc/cc/g' Makefile
+  '';
+
+  meta = with lib; {
+    description = "Terminal mixer - multiplexer for the i/o of terminal applications";
+    homepage = "http://vicerveza.homeunix.net/~viric/soft/tm";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.all;
+    mainProgram = "tm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/tp-auto-kbbl/default.nix b/nixpkgs/pkgs/tools/system/tp-auto-kbbl/default.nix
new file mode 100644
index 000000000000..60bd8dcc6410
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/tp-auto-kbbl/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, dbus
+, pkg-config
+, openssl
+, libevdev
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tp-auto-kbbl";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "saibotd";
+    repo = pname;
+    rev = version;
+    sha256 = "0db9h15zyz2sq5r1qmq41288i54rhdl30qy08snpsh6sx2q4443y";
+  };
+
+  cargoSha256 = "0m1gcvshbd9cfb0v6f86kbcfjxb4p9cxynmxgi4nxkhaszfyf56c";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ dbus libevdev openssl ];
+
+  meta = with lib; {
+    description = "Auto toggle keyboard back-lighting on Thinkpads (and maybe other laptops) for Linux";
+    homepage = "https://github.com/saibotd/tp-auto-kbbl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sebtm ];
+    platforms = platforms.linux;
+    mainProgram = "tp-auto-kbbl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/tre-command/default.nix b/nixpkgs/pkgs/tools/system/tre-command/default.nix
new file mode 100644
index 000000000000..971aa29b9644
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/tre-command/default.nix
@@ -0,0 +1,34 @@
+{ rustPlatform, fetchFromGitHub, lib, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tre-command";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "dduan";
+    repo = "tre";
+    rev = "v${version}";
+    sha256 = "sha256-JlkONhXMWLzxAf3SYoLkSvXw4bFYBnsCyyj0TUsezwg=";
+  };
+
+  cargoSha256 = "sha256-b3fScJMG/CIkMrahbELLQp1otmT5En+p8kQsip05SOc=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preFixup = ''
+    installManPage manual/tre.1
+    installShellCompletion scripts/completion/tre.{bash,fish}
+    installShellCompletion --zsh scripts/completion/_tre
+  '';
+
+  # this test requires package to be in a git repo to succeed
+  checkFlags = [ "--skip" "respect_git_ignore" ];
+
+  meta = with lib; {
+    description = "Tree command, improved";
+    homepage = "https://github.com/dduan/tre";
+    license = licenses.mit;
+    maintainers = [ maintainers.dduan ];
+    mainProgram = "tre";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/tree/default.nix b/nixpkgs/pkgs/tools/system/tree/default.nix
new file mode 100644
index 000000000000..191f9466f339
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/tree/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchFromGitLab }:
+
+let
+  # These settings are found in the Makefile, but there seems to be no
+  # way to select one or the other setting other than editing the file
+  # manually, so we have to duplicate the know how here.
+  systemFlags = lib.optionalString stdenv.isDarwin ''
+    CFLAGS="-O2 -Wall -fomit-frame-pointer -no-cpp-precomp"
+    LDFLAGS=
+  '' + lib.optionalString stdenv.isCygwin ''
+    CFLAGS="-O2 -Wall -fomit-frame-pointer"
+    LDFLAGS=-s
+    TREE_DEST=tree.exe
+  '' + lib.optionalString (stdenv.isFreeBSD || stdenv.isOpenBSD) ''
+    CFLAGS="-O2 -Wall -fomit-frame-pointer"
+    LDFLAGS=-s
+  ''; # use linux flags by default
+in
+stdenv.mkDerivation rec {
+  pname = "tree";
+  version = "2.1.1";
+
+  src = fetchFromGitLab {
+    owner = "OldManProgrammer";
+    repo = "unix-tree";
+    rev = version;
+    sha256 = "sha256-aPz1ROUeAKDmMjEtAaL2AguF54/CbIYWpL4Qovv2ftQ=";
+  };
+
+  preConfigure = ''
+    makeFlagsArray+=(${systemFlags})
+  '';
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://oldmanprogrammer.net/source.php?dir=projects/tree";
+    description = "Command to produce a depth indented directory listing";
+    license = licenses.gpl2;
+    longDescription = ''
+      Tree is a recursive directory listing command that produces a
+      depth indented listing of files, which is colorized ala dircolors if
+      the LS_COLORS environment variable is set and output is to tty.
+    '';
+    platforms = platforms.all;
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "tree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ts/default.nix b/nixpkgs/pkgs/tools/system/ts/default.nix
new file mode 100644
index 000000000000..843249f911e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ts/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl
+, sendmailPath ? "/run/wrappers/bin/sendmail"
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ts";
+  version = "1.0";
+
+  installPhase=''make install "PREFIX=$out"'';
+
+  patchPhase = ''
+    sed -i s,/usr/sbin/sendmail,${sendmailPath}, mail.c ts.1
+  '';
+
+  src = fetchurl {
+    url = "https://viric.name/~viric/soft/ts/ts-${version}.tar.gz";
+    sha256 = "15dkzczx10fhl0zs9bmcgkxfbwq2znc7bpscljm4rchbzx7y6lsg";
+  };
+
+  meta = with lib; {
+    homepage = "http://vicerveza.homeunix.net/~viric/soft/ts";
+    description = "Task spooler - batch queue";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.all;
+    mainProgram = "ts";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/tuptime/default.nix b/nixpkgs/pkgs/tools/system/tuptime/default.nix
new file mode 100644
index 000000000000..d92f65f78ae2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/tuptime/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub
+, makeWrapper, installShellFiles
+, python3, sqlite
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tuptime";
+  version = "5.2.3";
+
+  src = fetchFromGitHub {
+    owner = "rfmoz";
+    repo = "tuptime";
+    rev = version;
+    sha256 = "sha256-kR+Pi7/nsRzmmvibp95wjj8/B/Q6FCDSn2A7vJ3sM94=";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  buildInputs = [ python3 ];
+
+  outputs = [ "out" "man" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 755 $src/src/tuptime $out/bin/
+
+    installManPage $src/src/man/tuptime.1
+
+    install -Dm 0755 $src/misc/scripts/db-tuptime-migrate-4.0-to-5.0.sh \
+      $out/share/tuptime/db-tuptime-migrate-4.0-to-5.0.sh
+  '';
+
+  preFixup = ''
+    wrapProgram $out/share/tuptime/db-tuptime-migrate-4.0-to-5.0.sh \
+      --prefix PATH : "${lib.makeBinPath [ sqlite ]}"
+  '';
+
+  passthru.tests = nixosTests.tuptime;
+
+  meta = with lib; {
+    description = "Total uptime & downtime statistics utility";
+    homepage = "https://github.com/rfrail3/tuptime";
+    changelog = "https://github.com/rfrail3/tuptime/blob/master/CHANGELOG";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.evils ];
+    mainProgram = "tuptime";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/uefitool/common.nix b/nixpkgs/pkgs/tools/system/uefitool/common.nix
new file mode 100644
index 000000000000..43d7480fc757
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/uefitool/common.nix
@@ -0,0 +1,41 @@
+{ version, sha256, installFiles }:
+{ lib, mkDerivation, fetchFromGitHub, qtbase, qmake, cmake, zip }:
+
+mkDerivation rec {
+  passthru = {
+    inherit version;
+    inherit sha256;
+    inherit installFiles;
+  };
+  pname = "uefitool";
+  inherit version;
+
+  src = fetchFromGitHub {
+    inherit sha256;
+    owner = "LongSoft";
+    repo = pname;
+    rev = version;
+  };
+
+  buildInputs = [ qtbase ];
+  nativeBuildInputs = [ qmake cmake zip ];
+
+  dontConfigure = true;
+  buildPhase = ''
+    bash unixbuild.sh
+  '';
+
+  installPhase = ''
+    mkdir -p "$out"/bin
+    cp ${lib.concatStringsSep " " installFiles} "$out"/bin
+  '';
+
+  meta = with lib; {
+    description = "UEFI firmware image viewer and editor";
+    homepage = "https://github.com/LongSoft/uefitool";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ];
+    # uefitool supposedly works on other platforms, but their build script only works on linux in nixpkgs
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/uefitool/variants.nix b/nixpkgs/pkgs/tools/system/uefitool/variants.nix
new file mode 100644
index 000000000000..647922046c66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/uefitool/variants.nix
@@ -0,0 +1,15 @@
+{ libsForQt5 }:
+let
+  common = opts: libsForQt5.callPackage (import ./common.nix opts) {};
+in rec {
+  new-engine = common rec {
+    version = "A62";
+    sha256 = "sha256-U89j0BV57luv1c9hoYJtisKLxFezuaGFokZ29/NJ0xg=";
+    installFiles = [ "build/UEFITool/UEFITool" "build/UEFIFind/UEFIFind" "build/UEFIExtract/UEFIExtract" ];
+  };
+  old-engine = common rec {
+    version = "0.28.0";
+    sha256 = "1n2hd2dysi5bv2iyq40phh1jxc48gdwzs414vfbxvcharcwapnja";
+    installFiles = [ "UEFITool" "UEFIReplace/UEFIReplace" "UEFIPatch/UEFIPatch" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ufiformat/default.nix b/nixpkgs/pkgs/tools/system/ufiformat/default.nix
new file mode 100644
index 000000000000..52204a073ae7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ufiformat/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, e2fsprogs
+, fetchFromGitHub
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ufiformat";
+  version = "0.9.9";
+
+  buildInputs = [
+    e2fsprogs
+  ];
+
+  src = fetchFromGitHub {
+    owner = "tedigh";
+    repo = "ufiformat";
+    rev = "v${version}";
+    sha256 = "heFETZj9migz2s9kvmw0ZQ1ieNpU4V4Lwfp91ek2cS4=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/tedigh/ufiformat";
+    description = "Low-level disk formatting utility for USB floppy drives";
+    maintainers = [ maintainers.amarshall ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    mainProgram = "ufiformat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/undaemonize/default.nix b/nixpkgs/pkgs/tools/system/undaemonize/default.nix
new file mode 100644
index 000000000000..83007db867dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/undaemonize/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "undaemonize";
+  version = "unstable-2017-07-11";
+
+  src = fetchFromGitHub {
+    repo = "undaemonize";
+    owner = "nickstenning";
+    rev = "a181cfd900851543ee1f85fe8f76bc8916b446d4";
+    sha256 = "1fkrgj3xfhj820qagh5p0rabl8z2hpad6yp984v92h9pgbfwxs33";
+  };
+  installPhase = ''
+    install -D undaemonize $out/bin/undaemonize
+  '';
+  meta = {
+    description = "Tiny helper utility to force programs which insist on daemonizing themselves to run in the foreground";
+    homepage = "https://github.com/nickstenning/undaemonize";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.canndrew ];
+    platforms = lib.platforms.linux;
+    mainProgram = "undaemonize";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/system/uptimed/default.nix b/nixpkgs/pkgs/tools/system/uptimed/default.nix
new file mode 100644
index 000000000000..93dcca90a264
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/uptimed/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "uptimed";
+  version = "0.4.6";
+
+  src = fetchFromGitHub {
+    sha256 = "sha256-aYP20O/8QotmnpryiFnFAfrpyk5f+0OkbkGxWf2Ug9w=";
+    rev = "v${version}";
+    repo = "uptimed";
+    owner = "rpodgorny";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  patches = [ ./no-var-spool-install.patch ];
+
+  postPatch = ''
+    substituteInPlace libuptimed/urec.h \
+      --replace /var/spool /var/lib
+  '';
+
+  meta = with lib; {
+    description = "Uptime record daemon";
+    longDescription = ''
+      An uptime record daemon keeping track of the highest uptimes a computer
+      system ever had. It uses the system boot time to keep sessions apart from
+      each other. Uptimed comes with a console front-end to parse the records,
+      which can also easily be used to show your records on a web page.
+    '';
+    homepage = "https://github.com/rpodgorny/uptimed/";
+    license = with licenses; [ gpl2Only lgpl21Plus ];
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/uptimed/no-var-spool-install.patch b/nixpkgs/pkgs/tools/system/uptimed/no-var-spool-install.patch
new file mode 100644
index 000000000000..f591aad4b504
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/uptimed/no-var-spool-install.patch
@@ -0,0 +1,15 @@
+diff -rc uptimed-0.3.16/Makefile.am uptimed-0.3.16-new/Makefile.am
+*** uptimed-0.3.16/Makefile.am	2009-01-02 00:46:00.000000000 +0100
+--- uptimed-0.3.16-new/Makefile.am	2009-09-16 09:24:29.952524967 +0200
+***************
+*** 8,16 ****
+  
+  AM_CFLAGS = @CFLAGS@ -DFILE_CONFIG=\"$(sysconfdir)/uptimed.conf\"
+  
+- install-data-local:
+- 	$(INSTALL) -d $(DESTDIR)/var/spool/uptimed
+- 
+  srpm: dist
+  	@(rpmbuild -ts uptimed-$(PACKAGE_VERSION).tar.gz)
+  
+--- 8,13 ----
diff --git a/nixpkgs/pkgs/tools/system/uroboros/default.nix b/nixpkgs/pkgs/tools/system/uroboros/default.nix
new file mode 100644
index 000000000000..f7d5ec0ac133
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/uroboros/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "uroboros";
+  version = "20210304-${lib.strings.substring 0 7 rev}";
+  rev = "9bed95bb4cc44cfd043e8ac192e788df379c7a44";
+
+  src = fetchFromGitHub {
+    owner = "evilsocket";
+    repo = pname;
+    inherit rev;
+    hash = "sha256-JB4KMjD0ldJkKWKkArA/vfIdeX/TwxWPPOteob5gK6g=";
+  };
+
+  vendorHash = "sha256-FJTmnkPMXolNijRc4ZqCsi/ykReTE2WOC5LP/wHog9Y=";
+
+  meta = with lib; {
+    description = "Tool for monitoring and profiling single processes";
+    homepage = "https://github.com/evilsocket/uroboros";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/vbetool/default.nix b/nixpkgs/pkgs/tools/system/vbetool/default.nix
new file mode 100644
index 000000000000..8cc7b338ca96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/vbetool/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, pciutils, libx86, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "vbetool";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://www.codon.org.uk/~mjg59/vbetool/download/${pname}-${version}.tar.gz";
+    sha256 = "0m7rc9v8nz6w9x4x96maza139kin6lg4hscy6i13fna4672ds9jd";
+  };
+
+  buildInputs = [ pciutils libx86 zlib ];
+
+  patchPhase = ''
+    substituteInPlace Makefile.in --replace '$(libdir)/libpci.a' ""
+  '';
+
+  configureFlags = [ "LDFLAGS=-lpci" ];
+
+  meta = with lib; {
+    description = "Video BIOS execution tool";
+    homepage = "https://www.codon.org.uk/~mjg59/vbetool/";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    mainProgram = "vbetool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/vboot_reference/default.nix b/nixpkgs/pkgs/tools/system/vboot_reference/default.nix
new file mode 100644
index 000000000000..4718173e430d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/vboot_reference/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchFromGitiles, pkg-config, libuuid, openssl, libyaml, xz }:
+
+stdenv.mkDerivation rec {
+  version = "111.15329";
+
+  pname = "vboot_reference";
+
+  src = fetchFromGitiles {
+    url = "https://chromium.googlesource.com/chromiumos/platform/vboot_reference";
+    rev = "1a1cb5c9a38030a5868e2aaad295c68432c680fd"; # refs/heads/release-R111-15329.B
+    sha256 = "sha256-56/hqqFiKHw0/ah0D20U1ueIU2iq8I4Wn5DiEWxB9qA=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libuuid libyaml openssl xz ];
+
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # This apparently doesn't work as expected:
+    #  - https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/refs/heads/release-R111-15329.B/Makefile#439
+    # Let's apply the same flag manually.
+    "-Wno-error=deprecated-declarations"
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "ar qc" '${stdenv.cc.bintools.targetPrefix}ar qc'
+    # Drop flag unrecognized by GCC 9 (for e.g. aarch64-linux)
+    substituteInPlace Makefile \
+      --replace "-Wno-unknown-warning" ""
+  '';
+
+  preBuild = ''
+    patchShebangs scripts
+  '';
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "HOST_ARCH=${stdenv.hostPlatform.parsed.cpu.name}"
+    "USE_FLASHROM=0"
+    # Upstream has weird opinions about DESTDIR
+    # https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/refs/heads/release-R111-15329.B/Makefile#51
+    "UB_DIR=${placeholder "out"}/bin"
+    "UL_DIR=${placeholder "out"}/lib"
+    "UI_DIR=${placeholder "out"}/include/vboot"
+    "US_DIR=${placeholder "out"}/share/vboot"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/vboot
+    cp -r tests/devkeys* $out/share/vboot/
+  '';
+
+  meta = with lib; {
+    description = "Chrome OS partitioning and kernel signing tools";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lheckemann samueldr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/which/default.nix b/nixpkgs/pkgs/tools/system/which/default.nix
new file mode 100644
index 000000000000..831791a2f8be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/which/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "which";
+  version = "2.21";
+
+  src = fetchurl {
+    url = "mirror://gnu/which/which-${version}.tar.gz";
+    hash = "sha256-9KJFuUEks3fYtJZGv0IfkVXTaqdhS26/g3BdP/x26q0=";
+  };
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = toString (
+    # Enable 64-bit file API. Otherwise `which` fails to find tools
+    # on filesystems with 64-bit inodes (like `btrfs`) when running
+    # binaries from 32-bit systems (like `i686-linux`).
+    lib.optional stdenv.hostPlatform.is32bit "-D_FILE_OFFSET_BITS=64"
+  );
+
+  meta = {
+    homepage = "https://www.gnu.org/software/which/";
+    description = "Shows the full path of (shell) commands";
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "which";
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/wslu/default.nix b/nixpkgs/pkgs/tools/system/wslu/default.nix
new file mode 100644
index 000000000000..6337e479bb31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/wslu/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wslu";
+  version = "4.1.1";
+
+  src = fetchFromGitHub {
+    owner = "wslutilities";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-yhugh836BoSISbTu19ubLOrz5X31Opu5QtCR0DXrbWc=";
+  };
+
+  patches = [
+    ./fallback-conf-nix-store.diff
+  ];
+
+  postPatch = ''
+    substituteInPlace src/wslu-header \
+      --subst-var out
+  '';
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
+
+  meta = with lib; {
+    description = "A collection of utilities for Windows Subsystem for Linux";
+    homepage = "https://github.com/wslutilities/wslu";
+    changelog = "https://github.com/wslutilities/wslu/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jamiemagee ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/wslu/fallback-conf-nix-store.diff b/nixpkgs/pkgs/tools/system/wslu/fallback-conf-nix-store.diff
new file mode 100644
index 000000000000..6315e78d7de4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/wslu/fallback-conf-nix-store.diff
@@ -0,0 +1,22 @@
+diff --git a/src/wslu-header b/src/wslu-header
+index 5f33925..159c6af 100644
+--- a/src/wslu-header
++++ b/src/wslu-header
+@@ -169,11 +169,17 @@ if [ -f "$HOME/.config/wslu/conf" ]; then
+ 	debug_echo "$HOME/.config/wslu/conf found, sourcing"
+ 	source "$HOME/.config/wslu/conf"
+ fi
++
+ if [ -f "$HOME/.wslurc" ]; then
+ 	debug_echo "$HOME/.wslurc found, sourcing"
+ 	source "$HOME/.wslurc"
+ fi
+ 
++if [ -f "@out@/share/wslu/conf" ]; then
++	debug_echo "@out@/share/wslu/conf found, sourcing"
++	source "@out@/share/wslu/conf"
++fi
++
+ # functions
+ 
+ function help {
diff --git a/nixpkgs/pkgs/tools/system/wsmancli/default.nix b/nixpkgs/pkgs/tools/system/wsmancli/default.nix
new file mode 100644
index 000000000000..c9c07c81bcae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/wsmancli/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, openssl, openwsman }:
+
+stdenv.mkDerivation rec {
+  pname = "wsmancli";
+  version = "2.6.2";
+
+  src = fetchFromGitHub {
+    owner  = "Openwsman";
+    repo   = "wsmancli";
+    rev    = "v${version}";
+    sha256 = "sha256-A2PVhQuKVTZ/nDKyy+vZVBNLB/3xujBYBzUEWcTIYYg=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ openwsman openssl ];
+
+  postPatch = ''
+    touch AUTHORS NEWS README
+  '';
+
+  meta = with lib; {
+    description = "Openwsman command-line client";
+    longDescription = ''
+      Openwsman provides a command-line tool, wsman, to perform basic
+      operations on the command-line. These operations include Get, Put,
+      Invoke, Identify, Delete, Create, and Enumerate. The command-line tool
+      also has several switches to allow for optional features of the
+      WS-Management specification and Testing.
+    '';
+    downloadPage = "https://github.com/Openwsman/wsmancli/releases";
+    inherit (openwsman.meta) homepage license maintainers platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/wsysmon/default.nix b/nixpkgs/pkgs/tools/system/wsysmon/default.nix
new file mode 100644
index 000000000000..8f03fdf90ccd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/wsysmon/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, substituteAll
+, cmake
+, pkg-config
+, gtkmm3
+, gtk3
+, procps
+, spdlog
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wsysmon";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "slyfabi";
+    repo = "wsysmon";
+    rev = version;
+    sha256 = "sha256-5kfZT+hm064qXoAzi0RdmUqXi8VaXamlbm+FJOrGh3A=";
+  };
+
+  patches = [
+    # Prevent CMake from trying to fetch libraries from GitHub
+    (substituteAll {
+      src = ./dependencies.patch;
+      spdlog_src = spdlog.src;
+    })
+    # Add an installPhase
+    ./install.patch
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    gtkmm3
+    gtk3
+    procps
+    spdlog
+  ];
+
+  meta = with lib; {
+    description = "A windows task manager clone for Linux";
+    homepage = "https://github.com/SlyFabi/WSysMon";
+    license = [ licenses.mit ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ totoroot ];
+    mainProgram = "WSysMon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/wsysmon/dependencies.patch b/nixpkgs/pkgs/tools/system/wsysmon/dependencies.patch
new file mode 100644
index 000000000000..cc0a2fc709eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/wsysmon/dependencies.patch
@@ -0,0 +1,14 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 31e8048..1eec936 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -7,8 +7,7 @@ include(FetchContent)
+ 
+ FetchContent_Declare(
+         spdlog
+-        GIT_REPOSITORY https://github.com/gabime/spdlog.git
+-        GIT_TAG v1.10.0
++        SOURCE_DIR @spdlog_src@
+ )
+ FetchContent_MakeAvailable(spdlog)
+ 
diff --git a/nixpkgs/pkgs/tools/system/wsysmon/install.patch b/nixpkgs/pkgs/tools/system/wsysmon/install.patch
new file mode 100644
index 000000000000..4b5946a7ab74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/wsysmon/install.patch
@@ -0,0 +1,14 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 31e8048..a125b3f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -20,3 +20,9 @@ include_directories(${GTKMM_INCLUDE_DIRS} ${X11_INCLUDE_DIR})
+ 
+ add_executable(WSysMon src/main.cpp src/ui/MainWindow.cpp src/ui/widgets/GraphWidget.cpp src/ui/widgets/PerformanceButton.cpp src/ui/views/ProcessesView.cpp src/ui/views/PerformanceView.cpp src/ui/views/performance/PerformanceCPUView.cpp src/ui/views/performance/PerformanceGPUView.cpp src/ui/views/performance/PerformanceNetworkView.cpp src/ui/views/performance/PerformanceRAMView.cpp src/utils/DispatcherThread.cpp src/utils/UnitConverter.cpp src/utils/X11Utils.cpp src/api/process/ProcessManager.cpp src/api/process/ProcessNode.cpp src/api/linux/ProcessesApi.cpp src/api/linux/GPUApi.cpp src/api/linux/NetworkApi.cpp src/api/linux/SystemInfoApi.cpp src/api/DiskApi.h src/api/linux/DiskApi.cpp src/ui/views/performance/PerformanceDiskView.cpp src/ui/views/performance/PerformanceDiskView.h src/api/linux/gpu/nvml.h src/api/linux/gpu/nvml_hook_funcs.inl src/api/linux/gpu/NvGpuApi.cpp src/api/linux/gpu/NvGpuApi.h src/api/HwMonApi.h src/api/linux/HwMonApi.cpp)
+ target_link_libraries(WSysMon PRIVATE spdlog::spdlog pthread procps ${CMAKE_DL_LIBS} ${GTKMM_LIBRARIES} ${X11_LIBRARIES})
++
++install(
++    TARGETS
++    WSysMon
++    RUNTIME DESTINATION bin
++)
diff --git a/nixpkgs/pkgs/tools/system/xe/default.nix b/nixpkgs/pkgs/tools/system/xe/default.nix
new file mode 100644
index 000000000000..2a8231b7fb03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/xe/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "xe";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "chneukirchen";
+    repo = "xe";
+    rev = "v${version}";
+    sha256 = "sha256-yek6flBhgjSeN3M695BglUfcbnUGp3skzWT2W/BxW8Y=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Simple xargs and apply replacement";
+    homepage = "https://github.com/chneukirchen/xe";
+    license = licenses.publicDomain;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ];
+    mainProgram = "xe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/yeshup/default.nix b/nixpkgs/pkgs/tools/system/yeshup/default.nix
new file mode 100644
index 000000000000..723021d0ee74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/yeshup/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "yeshup";
+  version = "unstable-2013-10-29";
+
+  src = fetchFromGitHub {
+    owner = "RhysU";
+    repo  = "yeshup";
+    rev = "5461a8f957c686ccd0240be3f0fd8124d7381b08";
+    sha256 = "1wwbc158y46jsmdi1lp0m3dlbr9kvzvwxfvzj6646cpy9d6h21v9";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -v yeshup $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/RhysU/yeshup";
+    platforms = platforms.linux;
+    license = licenses.cc-by-sa-30; # From Stackoverflow answer
+    maintainers = with maintainers; [ obadz ];
+    mainProgram = "yeshup";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/zenith/Cargo.lock b/nixpkgs/pkgs/tools/system/zenith/Cargo.lock
new file mode 100644
index 000000000000..0c7828d6a445
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/zenith/Cargo.lock
@@ -0,0 +1,1989 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 2.5.3",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 2.0.1",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-fs"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "futures-lite",
+ "log",
+ "parking",
+ "polling",
+ "rustix 0.37.25",
+ "slab",
+ "socket2",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener 2.5.3",
+]
+
+[[package]]
+name = "async-net"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f"
+dependencies = [
+ "async-io",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-process"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
+dependencies = [
+ "async-io",
+ "async-lock",
+ "async-signal",
+ "blocking",
+ "cfg-if 1.0.0",
+ "event-listener 3.0.0",
+ "futures-lite",
+ "rustix 0.38.19",
+ "windows-sys",
+]
+
+[[package]]
+name = "async-signal"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2a5415b7abcdc9cd7d63d6badba5288b2ca017e3fbd4173b8f405449f1a2399"
+dependencies = [
+ "async-io",
+ "async-lock",
+ "atomic-waker",
+ "cfg-if 1.0.0",
+ "futures-core",
+ "futures-io",
+ "rustix 0.38.19",
+ "signal-hook-registry",
+ "slab",
+ "windows-sys",
+]
+
+[[package]]
+name = "async-task"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921"
+
+[[package]]
+name = "async-trait"
+version = "0.1.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.63.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 1.0.109",
+ "which",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "blocking"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "fastrand 2.0.1",
+ "futures-io",
+ "futures-lite",
+ "piper",
+ "tracing",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "byte-unit"
+version = "4.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c"
+dependencies = [
+ "serde",
+ "utf8-width",
+]
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "windows-targets",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
+dependencies = [
+ "bitflags 2.4.0",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "darling"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darwin-libproc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc629b7cf42586fee31dae31f9ab73fa5ff5f0170016aa61be5fcbc12a90c516"
+dependencies = [
+ "darwin-libproc-sys",
+ "libc",
+ "memchr",
+]
+
+[[package]]
+name = "darwin-libproc-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef0aa083b94c54aa4cfd9bbfd37856714c139d1dc511af80270558c7ba3b4816"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "event-listener"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29e56284f00d94c1bc7fd3c77027b4623c88c1f53d8d2394c6199f2921dea325"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-timer"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gumdrop"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bc700f989d2f6f0248546222d9b4258f5b02a171a431f8285a81c08142629e3"
+dependencies = [
+ "gumdrop_derive",
+]
+
+[[package]]
+name = "gumdrop_derive"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729f9bd3449d77e7831a18abfb7ba2f99ee813dfd15b8c2167c9a54ba20aa99d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "heim"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "heim-common",
+ "heim-cpu",
+ "heim-disk",
+ "heim-host",
+ "heim-memory",
+ "heim-net",
+ "heim-process",
+ "heim-runtime",
+ "heim-sensors",
+ "heim-virt",
+]
+
+[[package]]
+name = "heim-common"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "core-foundation",
+ "futures-core",
+ "futures-util",
+ "lazy_static",
+ "libc",
+ "mach",
+ "nix 0.23.2",
+ "pin-utils",
+ "uom 0.31.1",
+ "winapi",
+]
+
+[[package]]
+name = "heim-cpu"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "futures",
+ "glob",
+ "heim-common",
+ "heim-runtime",
+ "lazy_static",
+ "libc",
+ "mach",
+ "ntapi",
+ "smol",
+ "winapi",
+]
+
+[[package]]
+name = "heim-disk"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "core-foundation",
+ "heim-common",
+ "heim-runtime",
+ "libc",
+ "mach",
+ "widestring",
+ "winapi",
+]
+
+[[package]]
+name = "heim-host"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "heim-common",
+ "heim-runtime",
+ "lazy_static",
+ "libc",
+ "log",
+ "mach",
+ "ntapi",
+ "platforms",
+ "winapi",
+]
+
+[[package]]
+name = "heim-memory"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "heim-common",
+ "heim-runtime",
+ "lazy_static",
+ "libc",
+ "mach",
+ "winapi",
+]
+
+[[package]]
+name = "heim-net"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "heim-common",
+ "heim-runtime",
+ "libc",
+ "macaddr",
+ "nix 0.23.2",
+ "widestring",
+ "winapi",
+]
+
+[[package]]
+name = "heim-process"
+version = "0.1.1-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "async-trait",
+ "cfg-if 1.0.0",
+ "darwin-libproc",
+ "futures",
+ "heim-common",
+ "heim-cpu",
+ "heim-host",
+ "heim-net",
+ "heim-runtime",
+ "lazy_static",
+ "libc",
+ "mach",
+ "memchr",
+ "ntapi",
+ "ordered-float",
+ "smol",
+ "winapi",
+]
+
+[[package]]
+name = "heim-runtime"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "futures",
+ "futures-timer",
+ "once_cell",
+ "smol",
+]
+
+[[package]]
+name = "heim-sensors"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "heim-common",
+ "heim-runtime",
+]
+
+[[package]]
+name = "heim-virt"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/bvaisvil/heim.git?branch=zenith_changes#509c858dce58e2de0b1b772170ee2be21a58149b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "futures",
+ "heim-common",
+ "heim-runtime",
+ "raw-cpuid",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "indoc"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+
+[[package]]
+name = "linux-taskstats"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60fdd14efd42f7d3383f76d5da9cbc1056ac6497be7352eadfabef14a5d699c0"
+dependencies = [
+ "bindgen",
+ "libc",
+ "log",
+ "netlink-sys",
+ "thiserror",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "macaddr"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baee0bbc17ce759db233beb01648088061bf678383130602a298e6998eedb2d8"
+
+[[package]]
+name = "mach"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "mach2"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "netlink-sys"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411"
+dependencies = [
+ "bytes",
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
+dependencies = [
+ "bitflags 1.3.2",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "libc",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "nvml-wrapper"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cd21b9f5a1cce3c3515c9ffa85f5c7443e07162dae0ccf4339bb7ca38ad3454"
+dependencies = [
+ "bitflags 1.3.2",
+ "libloading",
+ "nvml-wrapper-sys",
+ "static_assertions",
+ "thiserror",
+ "wrapcenum-derive",
+]
+
+[[package]]
+name = "nvml-wrapper-sys"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c961a2ea9e91c59a69b78e69090f6f5b867bb46c0c56de9482da232437c4987e"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "ordered-float"
+version = "2.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "parking"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.3.5",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "piper"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+dependencies = [
+ "atomic-waker",
+ "fastrand 2.0.1",
+ "futures-io",
+]
+
+[[package]]
+name = "platforms"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "989d43012e2ca1c4a02507c67282691a0a3207f9dc67cec596b43fe925b3d325"
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "ratatui"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e2e4cd95294a85c3b4446e63ef054eea43e0205b1fd60120c16b74ff7ff96ad"
+dependencies = [
+ "bitflags 2.4.0",
+ "cassowary",
+ "crossterm",
+ "indoc",
+ "itertools",
+ "paste",
+ "strum",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "raw-cpuid"
+version = "9.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1733f6f80c9c24268736a501cd00d41a9849b4faa7a9f9334c096e5d10553206"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.37.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4eb579851244c2c03e7c24f501c3432bed80b8f720af1d6e5b0e0f01555a035"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.10",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "serde"
+version = "1.0.189"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.189"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
+
+[[package]]
+name = "smol"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-fs",
+ "async-io",
+ "async-lock",
+ "async-net",
+ "async-process",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "starship-battery"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36335b5b5ba5328b4ad2024807423010b7f533a7e5315dfd9df0acbc9d2c550e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "core-foundation",
+ "lazycell",
+ "libc",
+ "mach2",
+ "nix 0.26.4",
+ "num-traits",
+ "uom 0.35.0",
+ "winapi",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sysinfo"
+version = "0.15.1"
+source = "git+https://github.com/bvaisvil/sysinfo.git?branch=zenith_changes_15.1#bcff3dc5c5b53320c53984cef5773ed850001fd8"
+dependencies = [
+ "cfg-if 0.1.10",
+ "doc-comment",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9"
+dependencies = [
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "uom"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1ee6bfd0a27bf614353809a035cf6880b74239ec6c5e39a7b2860ca16809137"
+dependencies = [
+ "num-rational",
+ "num-traits",
+ "typenum",
+]
+
+[[package]]
+name = "uom"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8362194c7a9845a7a7f3562173d6e1da3f24f7132018cb78fe77a5b4474187b2"
+dependencies = [
+ "num-traits",
+ "typenum",
+]
+
+[[package]]
+name = "users"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24cc0f6d6f267b73e5a2cadf007ba8f9bc39c6a6f9666f8cf25ea809a153b032"
+dependencies = [
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "utf8-width"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix 0.38.19",
+]
+
+[[package]]
+name = "widestring"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "wrapcenum-derive"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bcc065c85ad2c3bd12aa4118bf164835712e25080c392557801a13292c60aec"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "zenith"
+version = "0.14.0"
+dependencies = [
+ "bincode",
+ "byte-unit",
+ "chrono",
+ "crossterm",
+ "dirs-next",
+ "env_logger",
+ "flate2",
+ "futures",
+ "gumdrop",
+ "heim",
+ "libc",
+ "linux-taskstats",
+ "log",
+ "num-derive",
+ "num-traits",
+ "nvml-wrapper",
+ "ratatui",
+ "serde",
+ "serde_derive",
+ "signal-hook",
+ "starship-battery",
+ "sysinfo",
+ "unicode-width",
+ "users",
+]
diff --git a/nixpkgs/pkgs/tools/system/zenith/default.nix b/nixpkgs/pkgs/tools/system/zenith/default.nix
new file mode 100644
index 000000000000..af8231e96c6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/zenith/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, IOKit
+, nvidiaSupport ? false
+, makeWrapper
+}:
+
+assert nvidiaSupport -> stdenv.isLinux;
+
+rustPlatform.buildRustPackage rec {
+  pname = "zenith";
+  version = "0.14.0-unstable-2023-11-21";
+
+  src = fetchFromGitHub {
+    owner = "bvaisvil";
+    repo = pname;
+    rev = "0ed09e6a68c1517b4d050f5e3163421718226040";
+    hash = "sha256-vw/ar2Qi06HxPfPsfcxtfRhMTqY4FCE+7tCfe9sLEv0=";
+  };
+
+  # remove cargo config so it can find the linker on aarch64-linux
+  postPatch = ''
+    rm .cargo/config
+  '';
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "heim-0.1.0-rc.1" = "sha256-TKEG0YxF44wLz+qxpS/VfRKucqyl97t3PDxjPajbD58=";
+      "sysinfo-0.15.1" = "sha256-faMxXEHL7DFQLYrAJ+yBL6yiepZotofPF2+SizGQj4A=";
+    };
+  };
+
+  nativeBuildInputs = [ rustPlatform.bindgenHook ] ++ lib.optional nvidiaSupport makeWrapper;
+  buildInputs = lib.optionals stdenv.isDarwin [ IOKit ];
+
+  buildFeatures = lib.optional nvidiaSupport "nvidia";
+
+  postInstall = lib.optionalString nvidiaSupport ''
+    wrapProgram $out/bin/zenith \
+      --suffix LD_LIBRARY_PATH : "/run/opengl-driver/lib"
+  '';
+
+  meta = with lib; {
+    description = "Sort of like top or htop but with zoom-able charts, network, and disk usage"
+      + lib.optionalString nvidiaSupport ", and NVIDIA GPU usage";
+    homepage = "https://github.com/bvaisvil/zenith";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wegank ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/zfxtop/default.nix b/nixpkgs/pkgs/tools/system/zfxtop/default.nix
new file mode 100644
index 000000000000..5c216c7ca0cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/zfxtop/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "zfxtop";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "ssleert";
+    repo = "zfxtop";
+    rev = version;
+    hash = "sha256-7qeTC9CIx4K2fLRM/pYrSU1NHv9TFMsl7TT0W5Uph60=";
+  };
+
+  vendorHash = "sha256-VKBRgDu9xVbZrC5fadkdFjd1OETNwaxgraRnA34ETzE=";
+
+  meta = with lib; {
+    description = "fetch top for gen Z with X written by bubbletea enjoyer";
+    homepage = "https://github.com/ssleert/zfxtop";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ wozeparrot ];
+    mainProgram = "zfxtop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/zps/default.nix b/nixpkgs/pkgs/tools/system/zps/default.nix
new file mode 100644
index 000000000000..ab093d9e553b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/zps/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zps";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "zps";
+    rev = version;
+    hash = "sha256-t+y+m9cwngVlX5o7FQTI4FMj10bN0euH51DmAnOAvPc=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/applications
+    substitute ../.application/zps.desktop $out/share/applications/zps.desktop \
+      --replace Exec=zps Exec=$out/zps \
+  '';
+
+  meta = with lib; {
+    description = "A small utility for listing and reaping zombie processes on GNU/Linux";
+    homepage = "https://github.com/orhun/zps";
+    changelog = "https://github.com/orhun/zps/releases/tag/${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    platforms = platforms.linux;
+    mainProgram = "zps";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/zram-generator/Cargo.lock b/nixpkgs/pkgs/tools/system/zram-generator/Cargo.lock
new file mode 100644
index 000000000000..62c506022285
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/zram-generator/Cargo.lock
@@ -0,0 +1,394 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ahash"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0453232ace82dee0dd0b4c87a59bd90f7b53b314f3e0f61fe2ee7c8a16482289"
+
+[[package]]
+name = "anyhow"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "bitflags 1.3.2",
+ "textwrap",
+ "unicode-width",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dlv-list"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68df3f2b690c1b86e65ef7830956aededf3cb0a16f898f79b9a6f421a7b6211b"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "fasteval"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f4cdac9e4065d7c48e30770f8665b8cef9a3a73a63a4056a33a5f395bc7cf75"
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "fs_extra"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
+
+[[package]]
+name = "getrandom"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.153"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+
+[[package]]
+name = "liboverdrop"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a8bcc76c5aad4677420857a8744ec8aef80b1b21c5501e2f8c7ac3fda2e19ba"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
+dependencies = [
+ "bitflags 1.3.2",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "ordered-multimap"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485"
+dependencies = [
+ "dlv-list",
+ "hashbrown",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rust-ini"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63471c4aa97a1cf8332a5f97709a79a4234698de6a1f5087faf66f2dae810e22"
+dependencies = [
+ "cfg-if",
+ "ordered-multimap",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
+dependencies = [
+ "bitflags 2.4.2",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "zram-generator"
+version = "1.1.2"
+dependencies = [
+ "anyhow",
+ "clap",
+ "ctor",
+ "fasteval",
+ "fs_extra",
+ "liboverdrop",
+ "log",
+ "nix",
+ "rust-ini",
+ "tempfile",
+]
diff --git a/nixpkgs/pkgs/tools/system/zram-generator/default.nix b/nixpkgs/pkgs/tools/system/zram-generator/default.nix
new file mode 100644
index 000000000000..3d55d7c19613
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/zram-generator/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, ronn
+, systemd
+, kmod
+, nixosTests
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zram-generator";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "systemd";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-n+ZOWU+sPq9DcHgzQWTxxfMmiz239qdetXypqdy33cM=";
+  };
+
+  # RFE: Include Cargo.lock in sources
+  # https://github.com/systemd/zram-generator/issues/65
+  cargoLock.lockFile = ./Cargo.lock;
+
+  postPatch = ''
+    cp ${./Cargo.lock} Cargo.lock
+    substituteInPlace Makefile \
+      --replace 'target/$(BUILDTYPE)' 'target/${stdenv.hostPlatform.rust.rustcTargetSpec}/$(BUILDTYPE)'
+    substituteInPlace src/generator.rs \
+      --replace 'Command::new("systemd-detect-virt")' 'Command::new("${systemd}/bin/systemd-detect-virt")' \
+      --replace 'Command::new("modprobe")' 'Command::new("${kmod}/bin/modprobe")'
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    ronn
+  ];
+
+  buildInputs = [
+    systemd
+  ];
+
+  preBuild = ''
+    # embedded into the binary at build time
+    # https://github.com/systemd/zram-generator/blob/v1.1.2/Makefile#LL11-L11C56
+    export SYSTEMD_UTIL_DIR=$($PKG_CONFIG --variable=systemdutildir systemd)
+  '';
+
+  dontCargoInstall = true;
+
+  installFlags = [
+    "-o program" # already built by cargoBuildHook
+    "PREFIX=$(out)"
+    "SYSTEMD_SYSTEM_UNIT_DIR=$(out)/lib/systemd/system"
+    "SYSTEMD_SYSTEM_GENERATOR_DIR=$(out)/lib/systemd/system-generators"
+  ];
+
+  passthru = {
+    tests = {
+      inherit (nixosTests) zram-generator;
+    };
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/systemd/zram-generator";
+    license = licenses.mit;
+    description = "Systemd unit generator for zram devices";
+    maintainers = with maintainers; [ nickcao ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/zram-generator/update.sh b/nixpkgs/pkgs/tools/system/zram-generator/update.sh
new file mode 100755
index 000000000000..bd10e19631a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/zram-generator/update.sh
@@ -0,0 +1,15 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p coreutils curl jq common-updater-scripts cargo
+# shellcheck shell=bash
+
+set -euo pipefail
+
+version=$(curl -s https://api.github.com/repos/systemd/zram-generator/releases/latest | jq -r .tag_name)
+update-source-version zram-generator "${version#v}"
+
+tmp=$(mktemp -d)
+trap 'rm -rf -- "${tmp}"' EXIT
+
+git clone --depth 1 --branch "${version}" https://github.com/systemd/zram-generator.git "${tmp}/zram-generator"
+cargo generate-lockfile --manifest-path "${tmp}/zram-generator/Cargo.toml"
+cp "${tmp}/zram-generator/Cargo.lock" "$(dirname "$0")/Cargo.lock"
diff --git a/nixpkgs/pkgs/tools/system/zx/default.nix b/nixpkgs/pkgs/tools/system/zx/default.nix
new file mode 100644
index 000000000000..1dec344ed3aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/zx/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "zx";
+  version = "7.2.3";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "zx";
+    rev = version;
+    hash = "sha256-YMfecNazmL8J+f80FdIRvr2upQ7VgXSkQQnm8z0Swhw=";
+  };
+
+  npmDepsHash = "sha256-ywNd2LGjM35ecW4dnj0oNwdSX2CRy8i9OGKPIdI0UEQ=";
+
+  meta = {
+    description = "Tool for writing scripts using JavaScript";
+    homepage = "https://github.com/google/zx";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ hlolli ];
+    mainProgram = "zx";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/a2ps/default.nix b/nixpkgs/pkgs/tools/text/a2ps/default.nix
new file mode 100644
index 000000000000..dd4b7b2ca979
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/a2ps/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchurl
+, autoconf
+, bison
+, file
+, perl
+, pkg-config
+, boehmgc
+, gperf
+, libpaper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "a2ps";
+  version = "4.15.5";
+
+  src = fetchurl {
+    url = "mirror://gnu/a2ps/a2ps-${version}.tar.gz";
+    hash = "sha256-gbsbQQTnwmOXYkUe3JeG2vPf6ziErfx9xqydII8w2n8=";
+  };
+
+  postPatch = ''
+    substituteInPlace afm/make_fonts_map.sh --replace "/bin/rm" "rm"
+    substituteInPlace tests/defs.in --replace "/bin/rm" "rm"
+  '';
+
+  nativeBuildInputs = [ autoconf bison file perl pkg-config ];
+  buildInputs = [ boehmgc gperf libpaper ];
+
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "An Anything to PostScript converter and pretty-printer";
+    longDescription = ''
+      GNU a2ps converts files into PostScript for printing or viewing. It uses a nice default format,
+      usually two pages on each physical page, borders surrounding pages, headers with useful information
+      (page number, printing date, file name or supplied header), line numbering, symbol substitution as
+      well as pretty printing for a wide range of programming languages.
+    '';
+    homepage = "https://www.gnu.org/software/a2ps/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.bennofs ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/abbreviate/default.nix b/nixpkgs/pkgs/tools/text/abbreviate/default.nix
new file mode 100644
index 000000000000..aedf4d173006
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/abbreviate/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "abbreviate";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "dnnrly";
+    repo = "abbreviate";
+    rev = "v${version}";
+    hash = "sha256-foGg+o+BbPsfpph+XHIfyPaknQD1N1rcZW58kgZ5HYM=";
+  };
+
+  vendorHash = "sha256-9z3M3FEjllNpae+5EcLVkF1rAtOQzUQGebJeU7QsmTA=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installShellCompletion --cmd abbreviate \
+      --bash <($out/bin/abbreviate completion bash) \
+      --fish <($out/bin/abbreviate completion fish) \
+      --zsh <($out/bin/abbreviate completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Shorten your strings using common abbreviations";
+    homepage = "https://github.com/dnnrly/abbreviate";
+    changelog = "https://github.com/dnnrly/abbreviate/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/agrep/default.nix b/nixpkgs/pkgs/tools/text/agrep/default.nix
new file mode 100644
index 000000000000..9fe158b426ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/agrep/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "agrep";
+  version = "3.41.5";
+
+  src = fetchFromGitHub {
+    owner = "Wikinaut";
+    repo = "agrep";
+    # This repository has numbered versions, but not Git tags.
+    rev = "eef20411d605d9d17ead07a0ade75046f2728e21";
+    sha256 = "14addnwspdf2mxpqyrw8b84bb2257y43g5ccy4ipgrr91fmxq2sk";
+  };
+
+  # Related: https://github.com/Wikinaut/agrep/pull/11
+  prePatch = lib.optionalString (stdenv.hostPlatform.isMusl || stdenv.isDarwin) ''
+    sed -i '1i#include <sys/stat.h>' checkfil.c newmgrep.c recursiv.c
+  '';
+  installPhase = ''
+    install -Dm 555 agrep -t "$out/bin"
+    install -Dm 444 docs/* -t "$out/doc"
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = with lib; {
+    description = "Approximate grep for fast fuzzy string searching";
+    homepage = "https://www.tgries.de/agrep/";
+    license = licenses.isc;
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/aha/default.nix b/nixpkgs/pkgs/tools/text/aha/default.nix
new file mode 100644
index 000000000000..4ac07cef7eed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/aha/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "aha";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    sha256 = "1gywad0rvvz3c5balz8cxsnx0562hj2ngzqyr8zsy2mb4pn0lpgv";
+    rev = version;
+    repo = "aha";
+    owner = "theZiz";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "ANSI HTML Adapter";
+    longDescription = ''
+      aha takes ANSI SGR-coloured input and produces W3C-conformant HTML code.
+    '';
+    homepage = "https://github.com/theZiz/aha";
+    license = with licenses; [ lgpl2Plus mpl11 ];
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/align/default.nix b/nixpkgs/pkgs/tools/text/align/default.nix
new file mode 100644
index 000000000000..e3287b762e34
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/align/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "align";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "Guitarbum722";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "17gs3417633z71kc6l5zqg4b3rjhpn2v8qs8rnfrk4nbwzz4nrq3";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    homepage = "https://github.com/Guitarbum722/align";
+    description = "A general purpose application and library for aligning text";
+    maintainers = with maintainers; [ hrhino ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/amber/default.nix b/nixpkgs/pkgs/tools/text/amber/default.nix
new file mode 100644
index 000000000000..e4158b4bfc2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/amber/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform
+, libiconv, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "amber";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "dalance";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-q0o2PQngbDLumck27V0bIiB35zesn55Y+MwK2GjNVWo=";
+  };
+
+  cargoHash = "sha256-nBSgP30Izskq9RbhVIyqWzZgG5ZWHVdiukldw+Q0rco=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  meta = with lib; {
+    description = "A code search-and-replace tool";
+    homepage = "https://github.com/dalance/amber";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.bdesham ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/anew/default.nix b/nixpkgs/pkgs/tools/text/anew/default.nix
new file mode 100644
index 000000000000..2312d1dc69bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/anew/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "anew";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "tomnomnom";
+    repo = "anew";
+    rev = "v${version}";
+    hash = "sha256-NQSs99/2GPOtXkO7k+ar16G4Ecu4CPGMd/CTwEhcyto=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A tool for adding new lines to files, skipping duplicates";
+    homepage = "https://github.com/tomnomnom/anew";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/anewer/default.nix b/nixpkgs/pkgs/tools/text/anewer/default.nix
new file mode 100644
index 000000000000..e41b12cee447
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/anewer/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "anewer";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "ysf";
+    repo = pname;
+    rev = version;
+    sha256 = "181mi674354bddnq894yyq587w7skjh35vn61i41vfi6lqz5dy3d";
+  };
+
+  cargoSha256 = "sha256-LJ0l5CZM5NqdbCZe4ELkYf9EkKyBxL/LrNmFy+JS6gM=";
+
+  meta = with lib; {
+    description = "Append lines from stdin to a file if they don't already exist in the file";
+    homepage = "https://github.com/ysf/anewer";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/angle-grinder/default.nix b/nixpkgs/pkgs/tools/text/angle-grinder/default.nix
new file mode 100644
index 000000000000..dd34316803e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/angle-grinder/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "angle-grinder";
+  version = "0.19.2";
+
+  src = fetchFromGitHub {
+    owner = "rcoh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/OYIG4s0hH/bkAPxt/x5qHopDIoMN9AJLQ8Sx8USgsM=";
+  };
+
+  cargoHash = "sha256-pOW2jFQxaf2zQWL5+URvHVeCAvSI0u8iALPO5fCoqmI=";
+
+  meta = with lib; {
+    description = "Slice and dice logs on the command line";
+    homepage = "https://github.com/rcoh/angle-grinder";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bbigras ];
+    mainProgram = "agrind";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ansifilter/default.nix b/nixpkgs/pkgs/tools/text/ansifilter/default.nix
new file mode 100644
index 000000000000..3a4751c63f9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ansifilter/default.nix
@@ -0,0 +1,36 @@
+{ fetchurl, lib, stdenv, pkg-config, boost, lua }:
+
+stdenv.mkDerivation rec {
+  pname = "ansifilter";
+  version = "2.20";
+
+  src = fetchurl {
+    url = "http://www.andre-simon.de/zip/ansifilter-${version}.tar.bz2";
+    hash = "sha256-Neydcaf05WATN5N8dzSzKm40bA8FT00xY3aCPP5nkGc=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ boost lua ];
+
+  postPatch = ''
+    # avoid timestamp non-determinism with '-n'
+    substituteInPlace makefile --replace 'gzip -9f' 'gzip -9nf'
+  '';
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "conf_dir=/etc/ansifilter"
+  ];
+
+  meta = with lib; {
+    description = "Tool to convert ANSI to other formats";
+    longDescription = ''
+      Tool to remove ANSI or convert them to another format
+      (HTML, TeX, LaTeX, RTF, Pango or BBCode)
+    '';
+    homepage = "http://www.andre-simon.de/doku/ansifilter/en/ansifilter.php";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.Adjective-Object ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ascii/default.nix b/nixpkgs/pkgs/tools/text/ascii/default.nix
new file mode 100644
index 000000000000..613288079d34
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ascii/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ascii";
+  version = "3.20";
+
+  src = fetchurl {
+    url = "http://www.catb.org/~esr/ascii/${pname}-${version}.tar.gz";
+    sha256 = "sha256-nm5X6mDUGagDoCTOY2YlTvtxYma4Tu3VjNmA2rzBFnQ=";
+  };
+
+  prePatch = ''
+    sed -i -e "s|^PREFIX = .*|PREFIX = $out|" Makefile
+  '';
+
+  preInstall = ''
+    mkdir -vp "$out/bin" "$out/share/man/man1"
+  '';
+
+  meta = with lib; {
+    description = "Interactive ASCII name and synonym chart";
+    homepage = "http://www.catb.org/~esr/ascii/";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/asciigraph/default.nix b/nixpkgs/pkgs/tools/text/asciigraph/default.nix
new file mode 100644
index 000000000000..17c25874f54d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/asciigraph/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "asciigraph";
+  version = "0.5.6";
+
+  src = fetchFromGitHub {
+    owner = "guptarohit";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ZmH0+UXPUyO90ZI6YsKiTd6Nf8dgZAgm7Qx8PVUkHAU=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/guptarohit/asciigraph";
+    description = "Lightweight ASCII line graph ╭┈╯ command line app";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ mmahut ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/autocorrect/Cargo.lock b/nixpkgs/pkgs/tools/text/autocorrect/Cargo.lock
new file mode 100644
index 000000000000..5e272adb048d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/autocorrect/Cargo.lock
@@ -0,0 +1,2520 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "anstream"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "autocorrect"
+version = "2.9.0"
+dependencies = [
+ "autocorrect-derive 0.3.0",
+ "criterion",
+ "diff",
+ "ignore",
+ "indoc",
+ "lazy_static",
+ "owo-colors",
+ "pest",
+ "pest_derive",
+ "pretty_assertions",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "serde_yaml",
+]
+
+[[package]]
+name = "autocorrect"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b426e7dbc9997d772eeb5436cbb85e95136fdf7835a8f05085b811e5482ebd49"
+dependencies = [
+ "autocorrect-derive 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "diff",
+ "ignore",
+ "lazy_static",
+ "owo-colors",
+ "pest",
+ "pest_derive",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "serde_yaml",
+]
+
+[[package]]
+name = "autocorrect-cli"
+version = "2.9.0"
+dependencies = [
+ "autocorrect 2.9.0",
+ "clap",
+ "ignore",
+ "lazy_static",
+ "log",
+ "num_cpus",
+ "owo-colors",
+ "reqwest",
+ "self_update",
+ "sudo",
+ "threadpool",
+ "tokio",
+ "walkdir",
+]
+
+[[package]]
+name = "autocorrect-derive"
+version = "0.3.0"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "autocorrect-derive"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b80889323facc446add06be71b9c4c000acd083b12563d9c914b86424bf2f17a"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "autocorrect-java"
+version = "2.9.0"
+dependencies = [
+ "autocorrect 2.9.0",
+ "jni",
+]
+
+[[package]]
+name = "autocorrect-node"
+version = "2.9.0"
+dependencies = [
+ "autocorrect 2.9.0",
+ "autocorrect-cli",
+ "napi",
+ "napi-build",
+ "napi-derive",
+]
+
+[[package]]
+name = "autocorrect-py"
+version = "2.9.0"
+dependencies = [
+ "autocorrect 2.9.0",
+ "pyo3",
+]
+
+[[package]]
+name = "autocorrect-rb"
+version = "2.9.0"
+dependencies = [
+ "autocorrect 2.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "magnus",
+]
+
+[[package]]
+name = "autocorrect-wasm"
+version = "2.9.0"
+dependencies = [
+ "autocorrect 2.9.0",
+ "serde",
+ "serde_json",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "bindgen"
+version = "0.69.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ffcebc3849946a7170a05992aac39da343a90676ab392c51a4280981d6379c2"
+dependencies = [
+ "bitflags 2.4.1",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.40",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "ciborium"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.40",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+dependencies = [
+ "anes",
+ "cast",
+ "ciborium",
+ "clap",
+ "criterion-plot",
+ "is-terminal",
+ "itertools",
+ "num-traits",
+ "once_cell",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ctor"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e366bff8cd32dd8754b0991fb66b279dc48f598c3a18914852a6673deef583"
+dependencies = [
+ "quote",
+ "syn 2.0.40",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "filetime"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+
+[[package]]
+name = "futures-task"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+
+[[package]]
+name = "futures-util"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "http"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.10",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
+dependencies = [
+ "futures-util",
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "747ad1b4ae841a78e8aba0d63adbfbeaea26b517b63705d47856b73015d27060"
+dependencies = [
+ "crossbeam-deque",
+ "globset",
+ "log",
+ "memchr",
+ "regex-automata",
+ "same-file",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b"
+dependencies = [
+ "console",
+ "lazy_static",
+ "number_prefix",
+ "regex",
+]
+
+[[package]]
+name = "indoc"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306"
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+
+[[package]]
+name = "jni"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
+dependencies = [
+ "cesu8",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "js-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.151"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libloading"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "magnus"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc87660cd7daa49fddbfd524c836de54d5c927d520cd163f43700c5087c57d6c"
+dependencies = [
+ "magnus-macros",
+ "rb-sys",
+ "rb-sys-env",
+]
+
+[[package]]
+name = "magnus-macros"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206cb23bfeea05180c97522ef6a3e52a4eb17b0ed2f30ee3ca9c4f994d2378ae"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "napi"
+version = "2.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1133249c46e92da921bafc8aba4912bf84d6c475f7625183772ed2d0844dc3a7"
+dependencies = [
+ "bitflags 2.4.1",
+ "ctor",
+ "napi-derive",
+ "napi-sys",
+ "once_cell",
+ "tokio",
+]
+
+[[package]]
+name = "napi-build"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4b4532cf86bfef556348ac65e561e3123879f0e7566cca6d43a6ff5326f13df"
+
+[[package]]
+name = "napi-derive"
+version = "2.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b0c0743f6a3f29c20851b8377f01d485a837e2bfa57dd56d519ab7ed98ae2af"
+dependencies = [
+ "cfg-if",
+ "convert_case",
+ "napi-derive-backend",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "napi-derive-backend"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4869e4d80615fdab57dffe38c36a5bc62fae37352a00a35ee7aca1cea41b1bb3"
+dependencies = [
+ "convert_case",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "semver",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "napi-sys"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2503fa6af34dc83fb74888df8b22afe933b58d37daf7d80424b1c60c68196b8b"
+dependencies = [
+ "libloading 0.8.1",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pest"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.40",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "plotters"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pyo3"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "268be0c73583c183f2b14052337465768c07726936a260f480f0857cb95ba543"
+dependencies = [
+ "cfg-if",
+ "indoc",
+ "libc",
+ "memoffset 0.6.5",
+ "parking_lot",
+ "pyo3-build-config",
+ "pyo3-ffi",
+ "pyo3-macros",
+ "unindent",
+]
+
+[[package]]
+name = "pyo3-build-config"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28fcd1e73f06ec85bf3280c48c67e731d8290ad3d730f8be9dc07946923005c8"
+dependencies = [
+ "once_cell",
+ "target-lexicon",
+]
+
+[[package]]
+name = "pyo3-ffi"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f6cb136e222e49115b3c51c32792886defbfb0adead26a688142b346a0b9ffc"
+dependencies = [
+ "libc",
+ "pyo3-build-config",
+]
+
+[[package]]
+name = "pyo3-macros"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94144a1266e236b1c932682136dc35a9dee8d3589728f68130c7c3861ef96b28"
+dependencies = [
+ "proc-macro2",
+ "pyo3-macros-backend",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pyo3-macros-backend"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8df9be978a2d2f0cdebabb03206ed73b11314701a5bfe71b0d753b81997777f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8533f14c8382aaad0d592c812ac3b826162128b65662331e1127b45c3d18536b"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "rb-sys"
+version = "0.9.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e5b8d560b60790a3e60e56e73a8c7be88ac14e6af39fc82b5eca72c71753840"
+dependencies = [
+ "rb-sys-build",
+]
+
+[[package]]
+name = "rb-sys-build"
+version = "0.9.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2d2bfd00002007d7e9ad93d0397437933040caf452d260c26dbef5fd95ae1a6"
+dependencies = [
+ "bindgen",
+ "lazy_static",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "shell-words",
+ "syn 2.0.40",
+]
+
+[[package]]
+name = "rb-sys-env"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a35802679f07360454b418a5d1735c89716bde01d35b1560fc953c1415a0b3bb"
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "reqwest"
+version = "0.11.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "system-configuration",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc",
+ "spin",
+ "untrusted",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.38.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
+dependencies = [
+ "base64",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "self_update"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88c865d17fb512577be02a09fd2fd96c31c7e46fe649205d84feefd8b2a332da"
+dependencies = [
+ "either",
+ "flate2",
+ "hyper",
+ "indicatif",
+ "log",
+ "quick-xml",
+ "regex",
+ "reqwest",
+ "semver",
+ "serde_json",
+ "tar",
+ "tempfile",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+
+[[package]]
+name = "serde"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.40",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.40",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "sudo"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a88e74edf206f281aff2820aa2066c781331044c770626dcafe19491f214e05"
+dependencies = [
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13fa70a4ee923979ffb522cacce59d34421ebdea5625e1073c4326ef9d2dd42e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.40",
+]
+
+[[package]]
+name = "threadpool"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
+dependencies = [
+ "num_cpus",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2 0.5.5",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.40",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unindent"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c"
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"
+dependencies = [
+ "cfg-if",
+ "serde",
+ "serde_json",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.40",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.40",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "xattr"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d367426ae76bdfce3d8eaea6e94422afd6def7d46f9c89e2980309115b3c2c41"
+dependencies = [
+ "libc",
+ "linux-raw-sys",
+ "rustix",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
diff --git a/nixpkgs/pkgs/tools/text/autocorrect/default.nix b/nixpkgs/pkgs/tools/text/autocorrect/default.nix
new file mode 100644
index 000000000000..676eec70076c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/autocorrect/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Security, SystemConfiguration }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "autocorrect";
+  version = "2.9.0";
+
+  src = fetchFromGitHub {
+    owner = "huacnlee";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-NCDJoKOH4ZaXtGXZ7bgOXrjgrY8Edui+EOOI8/yfW08=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  postPatch = ''
+    cp ${./Cargo.lock} Cargo.lock
+  '';
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+
+  cargoBuildFlags = [ "-p" "autocorrect-cli" ];
+  cargoTestFlags = [ "-p" "autocorrect-cli" ];
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "A linter and formatter for help you improve copywriting, to correct spaces, punctuations between CJK (Chinese, Japanese, Korean)";
+    homepage = "https://huacnlee.github.io/autocorrect";
+    changelog = "https://github.com/huacnlee/autocorrect/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/autocorrect/update.sh b/nixpkgs/pkgs/tools/text/autocorrect/update.sh
new file mode 100755
index 000000000000..64af26872631
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/autocorrect/update.sh
@@ -0,0 +1,15 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p coreutils curl jq common-updater-scripts cargo
+# shellcheck shell=bash
+
+set -euo pipefail
+
+version=$(curl -s https://api.github.com/repos/huacnlee/autocorrect/releases/latest | jq -r .tag_name)
+update-source-version autocorrect "${version#v}"
+
+tmp=$(mktemp -d)
+trap 'rm -rf -- "${tmp}"' EXIT
+
+git clone --depth 1 --branch "${version}" https://github.com/huacnlee/autocorrect.git "${tmp}/autocorrect"
+cargo generate-lockfile --manifest-path "${tmp}/autocorrect/Cargo.toml"
+cp "${tmp}/autocorrect/Cargo.lock" "$(dirname "$0")/Cargo.lock"
diff --git a/nixpkgs/pkgs/tools/text/base16384/default.nix b/nixpkgs/pkgs/tools/text/base16384/default.nix
new file mode 100644
index 000000000000..c9937fa5cd69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/base16384/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "base16384";
+  version = "2.2.5";
+
+  src = fetchFromGitHub {
+    owner = "fumiama";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-S9DA9C+6OJcSLJTSLRo9rolJO9yVQ0FOE7uwbvmJiGk=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "Encode binary files to printable utf16be";
+    homepage = "https://github.com/fumiama/base16384";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/bashblog/0001-Setting-markdown_bin.patch b/nixpkgs/pkgs/tools/text/bashblog/0001-Setting-markdown_bin.patch
new file mode 100644
index 000000000000..7e6c78dd9dcb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/bashblog/0001-Setting-markdown_bin.patch
@@ -0,0 +1,25 @@
+From 1990ac93c9dbf3ada0eb2f045ef1aa95bbef7018 Mon Sep 17 00:00:00 2001
+From: "P. R. d. O" <d.ol.rod@tutanota.com>
+Date: Thu, 21 Apr 2022 07:40:30 -0600
+Subject: [PATCH] Setting markdown_bin
+
+---
+ bb.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/bb.sh b/bb.sh
+index 9d8e645..40fb54d 100755
+--- a/bb.sh
++++ b/bb.sh
+@@ -160,7 +160,7 @@ global_variables() {
+ 
+     # Markdown location. Trying to autodetect by default.
+     # The invocation must support the signature 'markdown_bin in.md > out.html'
+-    [[ -f Markdown.pl ]] && markdown_bin=./Markdown.pl || markdown_bin=$(which Markdown.pl 2>/dev/null || which markdown 2>/dev/null)
++    markdown_bin=@markdown_path@
+ }
+ 
+ # Check for the validity of some variables
+-- 
+2.35.1
+
diff --git a/nixpkgs/pkgs/tools/text/bashblog/default.nix b/nixpkgs/pkgs/tools/text/bashblog/default.nix
new file mode 100644
index 000000000000..0080ed0f7e1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/bashblog/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+, substituteAll
+, perlPackages
+# Flags to enable processors
+# Currently, Markdown.pl does not work
+, usePandoc ? true
+, pandoc }:
+
+let
+  inherit (perlPackages) TextMarkdown;
+  # As bashblog supports various markdown processors
+  # we can set flags to enable a certain processor
+  markdownpl_path = "${perlPackages.TextMarkdown}/bin/Markdown.pl";
+  pandoc_path = "${pandoc}/bin/pandoc";
+
+in stdenv.mkDerivation {
+  pname = "bashblog";
+  version = "unstable-2022-03-26";
+
+  src = fetchFromGitHub {
+    owner = "cfenollosa";
+    repo = "bashblog";
+    rev = "c3d4cc1d905560ecfefce911c319469f7a7ff8a8";
+    sha256 = "sha256-THlP/JuaZzDq9QctidwLRiUVFxRhGNhRKleWbQiqsgg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ TextMarkdown ]
+    ++ lib.optionals usePandoc [ pandoc ];
+
+  patches = [
+    (substituteAll {
+      src = ./0001-Setting-markdown_bin.patch;
+      markdown_path = if usePandoc then pandoc_path else markdownpl_path;
+    })
+  ];
+
+  postPatch = ''
+    patchShebangs bb.sh
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install -Dm755 bb.sh $out/bin/bashblog
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A single Bash script to create blogs";
+    homepage = "https://github.com/cfenollosa/bashblog";
+    license = licenses.gpl3Only;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ wolfangaukang ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/book-summary/default.nix b/nixpkgs/pkgs/tools/text/book-summary/default.nix
new file mode 100644
index 000000000000..a1bbe710273c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/book-summary/default.nix
@@ -0,0 +1,23 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "book-summary";
+  version = "0.2.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-dxM6bqgHp4IaG03NriHvoT3al2u5Sz/I5ajlgzpjG1c=";
+  };
+
+  cargoHash = "sha256-QwydecdQaxvh6vWZvO30zgvvgUT6T5dvGRSmcuTUJmc=";
+
+  meta = with lib; {
+    description = "Book auto-summary for gitbook and mdBook";
+    homepage = "https://github.com/dvogt23/book-summary";
+    license = licenses.mit;
+    maintainers = with teams; iog.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/boxes/default.nix b/nixpkgs/pkgs/tools/text/boxes/default.nix
new file mode 100644
index 000000000000..5340c5eccff9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/boxes/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "boxes";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "ascii-boxes";
+    repo = "boxes";
+    rev = "v${version}";
+    sha256 = "0b12rsynrmkldlwcb62drk33kk0aqwbj10mq5y5x3hjf626gjwsi";
+  };
+
+  # Building instructions:
+  # https://boxes.thomasjensen.com/build.html#building-on-linux--unix
+  nativeBuildInputs = [ bison flex ];
+
+  dontConfigure = true;
+
+  # Makefile references a system wide config file in '/usr/share'. Instead, we
+  # move it within the store by default.
+  preBuild = ''
+    substituteInPlace Makefile \
+      --replace "GLOBALCONF = /usr/share/boxes" \
+                "GLOBALCONF=${placeholder "out"}/share/boxes/boxes-config"
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    install -Dm755 -t $out/bin src/boxes
+    install -Dm644 -t $out/share/boxes boxes-config
+    install -Dm644 -t $out/share/man/man1 doc/boxes.1
+  '';
+
+  meta = with lib; {
+    description = "A command line program which draws, removes, and repairs ASCII art boxes";
+    homepage = "https://boxes.thomasjensen.com";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ waiting-for-dev ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/catdoc/default.nix b/nixpkgs/pkgs/tools/text/catdoc/default.nix
new file mode 100644
index 000000000000..db57243efdc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/catdoc/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "catdoc";
+  version = "0.95";
+
+  src = fetchurl {
+    url = "http://ftp.wagner.pp.ru/pub/catdoc/${pname}-${version}.tar.gz";
+    sha256 = "514a84180352b6bf367c1d2499819dfa82b60d8c45777432fa643a5ed7d80796";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/catdoc/1:0.95-4.1/debian/patches/05-CVE-2017-11110.patch";
+      sha256 = "1ljnwvssvzig94hwx8843b88p252ww2lbxh8zybcwr3kwwlcymx7";
+    })
+  ];
+
+  # Remove INSTALL file to avoid `make` misinterpreting it as an up-to-date
+  # target on case-insensitive filesystems e.g. Darwin
+  preInstall = ''
+    rm -v INSTALL
+  '';
+
+  configureFlags = [ "--disable-wordview" ];
+
+  meta = with lib; {
+    description = "MS-Word/Excel/PowerPoint to text converter";
+    platforms = platforms.all;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/catdocx/default.nix b/nixpkgs/pkgs/tools/text/catdocx/default.nix
new file mode 100644
index 000000000000..c762e15c80e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/catdocx/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, unzip, catdoc }:
+
+stdenv.mkDerivation {
+  pname = "catdocx";
+  version = "unstable-2017-01-02";
+
+  src = fetchFromGitHub {
+    owner = "jncraton";
+    repo = "catdocx";
+    rev = "04fa0416ec1f116d4996685e219f0856d99767cb";
+    sha256 = "1sxiqhkvdqn300ygfgxdry2dj2cqzjhkzw13c6349gg5vxfypcjh";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/libexec $out/bin
+    cp catdocx.sh $out/libexec
+    chmod +x $out/libexec/catdocx.sh
+    wrapProgram $out/libexec/catdocx.sh --prefix PATH : "${lib.makeBinPath [ unzip catdoc ]}"
+    ln -s $out/libexec/catdocx.sh $out/bin/catdocx
+  '';
+
+  meta = with lib; {
+    description = "Extracts plain text from docx files";
+    homepage = "https://github.com/jncraton/catdocx";
+    license = with licenses; [ bsd3 ];
+    maintainers = [ maintainers.michalrus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/cconv/default.nix b/nixpkgs/pkgs/tools/text/cconv/default.nix
new file mode 100644
index 000000000000..de8405aed43b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/cconv/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "cconv";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "xiaoyjy";
+    repo = "cconv";
+    rev = "v${version}";
+    sha256 = "RAFl/+I+usUfeG/l17F3ltThK7G4+TekyQGwzQIgeH8=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libiconv ];
+
+  meta = with lib; {
+    description = "A iconv based simplified-traditional chinese conversion tool";
+    homepage = "https://github.com/xiaoyjy/cconv";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.redfish64 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/chars/default.nix b/nixpkgs/pkgs/tools/text/chars/default.nix
new file mode 100644
index 000000000000..74083feb68f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/chars/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "chars";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "antifuchs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-mBtwdPzIc6RgEFTyReStFlhS4UhhRWjBTKT6gD3tzpQ=";
+  };
+
+  cargoHash = "sha256-wqyExG4haco6jg1zpbouz3xMR7sjiVIAC16PnDU2tc8=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "Commandline tool to display information about unicode characters";
+    homepage = "https://github.com/antifuchs/chars";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/choose/default.nix b/nixpkgs/pkgs/tools/text/choose/default.nix
new file mode 100644
index 000000000000..f40fcd1e3b6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/choose/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "choose";
+  version = "1.3.4";
+
+  src = fetchFromGitHub {
+    owner = "theryangeary";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-yW1quDyQn2xhrlhhPj9DKq7g8LlYKvEKDFj3xSagRTU=";
+  };
+
+  cargoSha256 = "sha256-0INC0LFzlnFnt5pCiU4xePxU8a6GiU1L8bg7zcuFl2k=";
+
+  meta = with lib; {
+    description = "A human-friendly and fast alternative to cut and (sometimes) awk";
+    homepage = "https://github.com/theryangeary/choose";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ sohalt ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/chroma/default.nix b/nixpkgs/pkgs/tools/text/chroma/default.nix
new file mode 100644
index 000000000000..2b59831529db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/chroma/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+let
+  srcInfo = lib.importJSON ./src.json;
+in
+
+buildGoModule rec {
+  pname = "chroma";
+  version = "2.8.0";
+
+  # To update:
+  # nix-prefetch-git --rev v${version} https://github.com/alecthomas/chroma.git > src.json
+  src = fetchFromGitHub {
+    owner  = "alecthomas";
+    repo   = pname;
+    rev    = "v${version}";
+    inherit (srcInfo) sha256;
+  };
+
+  vendorHash = "sha256-Bol5yMvNYuoVnSjEgf3h6X4CeUooy2Hpdy3SCaNXXOE=";
+
+  modRoot = "./cmd/chroma";
+
+  # substitute version info as done in goreleaser builds
+  ldflags = [
+    "-X" "main.version=${version}"
+    "-X" "main.commit=${srcInfo.rev}"
+    "-X" "main.date=${srcInfo.date}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/alecthomas/chroma";
+    description = "A general purpose syntax highlighter in pure Go";
+    license = licenses.mit;
+    maintainers = [ maintainers.sternenseemann ];
+    mainProgram = "chroma";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/chroma/src.json b/nixpkgs/pkgs/tools/text/chroma/src.json
new file mode 100644
index 000000000000..8bba14faf188
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/chroma/src.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/alecthomas/chroma.git",
+  "rev": "e8acfc274c22a76fd38030d2977a2246cd4322b3",
+  "date": "2023-06-30T08:43:39+10:00",
+  "path": "/nix/store/57y15g11dmdy2s6vxrjzl03s03j509gy-chroma",
+  "sha256": "0fdgpi5r0k42qzdn4lxh81ww1zcn9mwfildwrqf1s7crsqmr9dc5",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/tools/text/cidrgrep/default.nix b/nixpkgs/pkgs/tools/text/cidrgrep/default.nix
new file mode 100644
index 000000000000..0117374dadef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/cidrgrep/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule {
+  pname = "cidrgrep";
+  version = "unstable-2020-11-17";
+
+  src = fetchFromGitHub {
+    owner = "tomdoherty";
+    repo = "cidrgrep";
+    rev = "8ad5af533e8dc33ea18ff19b7c6a41550748fe0e";
+    hash = "sha256-Bp1cST6/8ppvpgNxjUpwL498C9vTJmoWOKLJgmWqfEs=";
+  };
+
+  vendorHash = null;
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/cidrgrep
+  '';
+
+  meta = {
+    description = "Like grep but for IPv4 CIDRs";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/clima/default.nix b/nixpkgs/pkgs/tools/text/clima/default.nix
new file mode 100644
index 000000000000..cfa39590a714
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/clima/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "clima";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "Canop";
+    repo = "clima";
+    rev = "v${version}";
+    hash = "sha256-CRnAxhkuCTyHR4uQofA51Dm3+YKqm3iwBkFNkbLTv1A=";
+  };
+
+  cargoHash = "sha256-jKY+Ta6lqMBUlqSViKk3W0CiO8oU+ucmleKDYRA54HQ=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "A minimal viewer for Termimad";
+    homepage = "https://github.com/Canop/clima";
+    changelog = "https://github.com/Canop/clima/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "clima";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/cmigemo/default.nix b/nixpkgs/pkgs/tools/text/cmigemo/default.nix
new file mode 100644
index 000000000000..179db9c337dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/cmigemo/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub
+, iconv, nkf, perl, which
+, skk-dicts
+}:
+
+stdenv.mkDerivation {
+  pname = "cmigemo";
+  version = "1.3e";
+
+  src = fetchFromGitHub {
+    owner = "koron";
+    repo = "cmigemo";
+    rev = "e0f6145f61e0b7058c3006f344e58571d9fdd83a";
+    sha256 = "00a6kdmxp16b8x0p04ws050y39qspd1bqlfq74bkirc55b77a2m1";
+  };
+
+  nativeBuildInputs = [ iconv nkf perl which ];
+
+  postUnpack = ''
+    cp ${skk-dicts}/share/SKK-JISYO.L source/dict/
+  '';
+
+  patches = [ ./no-http-tool-check.patch ];
+
+  makeFlags = [ "INSTALL=install" ];
+
+  buildFlags = [ (if stdenv.isDarwin then "osx-all" else "gcc-all") ];
+
+  installTargets = [ (if stdenv.isDarwin then "osx-install" else "gcc-install") ];
+
+  meta = with lib; {
+    description = "A tool that supports Japanese incremental search with Romaji";
+    homepage = "https://www.kaoriya.net/software/cmigemo";
+    license = licenses.mit;
+    maintainers = [ maintainers.cohei ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/cmigemo/no-http-tool-check.patch b/nixpkgs/pkgs/tools/text/cmigemo/no-http-tool-check.patch
new file mode 100644
index 000000000000..518bfa0e6171
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/cmigemo/no-http-tool-check.patch
@@ -0,0 +1,23 @@
+diff --git a/configure b/configure
+index 4480261..2fb9b34 100755
+--- a/configure
++++ b/configure
+@@ -28,18 +28,6 @@ do
+   esac
+ done
+ 
+-# Check HTTP access tool
+-if CHECK_COMMAND curl ; then
+-  PROGRAM_HTTP="curl -O"
+-elif CHECK_COMMAND wget ; then
+-  PROGRAM_HTTP="wget"
+-elif CHECK_COMMAND fetch ; then
+-  PROGRAM_HTTP="fetch"
+-else
+-  echo "ERROR: Require one of HTTP access tools (curl, wget or fetch)."
+-  exit 1
+-fi
+-
+ # Check encoding filter
+ if CHECK_COMMAND qkc ; then
+   PROGRAM_ENCODEFILTER="qkc -q -u"
diff --git a/nixpkgs/pkgs/tools/text/codesearch/default.nix b/nixpkgs/pkgs/tools/text/codesearch/default.nix
new file mode 100644
index 000000000000..7a948388e09c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/codesearch/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "codesearch";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "codesearch";
+    rev = "v${version}";
+    sha256 = "sha256-i03w8PZ31j5EutUZaamZsHz+z4qgX4prePbj5DLA78s=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Fast, indexed regexp search over large file trees";
+    homepage = "https://github.com/google/codesearch";
+    license = [ licenses.bsd3 ];
+    maintainers = with maintainers; [ bennofs ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/colordiff/default.nix b/nixpkgs/pkgs/tools/text/colordiff/default.nix
new file mode 100644
index 000000000000..69473bd2c6f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/colordiff/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, docbook_xml_dtd_412, docbook_xsl, perl, w3m-batch, xmlto, diffutils }:
+
+stdenv.mkDerivation rec {
+  pname = "colordiff";
+  version = "1.0.21";
+
+  src = fetchFromGitHub {
+    owner = "daveewart";
+    repo = "colordiff";
+    rev = "v${version}";
+    sha256 = "sha256-TNOw6dqsT0dOIddRoGwEF85CaQF8ICMFUi+GiG5WWpk=";
+  };
+
+  nativeBuildInputs = [ docbook_xml_dtd_412 docbook_xsl perl w3m-batch xmlto ];
+
+  buildInputs = [ perl ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace 'TMPDIR=colordiff-''${VERSION}' ""
+
+    substituteInPlace colordiff.pl \
+      --replace '= "diff";' '= "${diffutils}/bin/diff";'
+  '';
+
+  installFlags = [
+    "INSTALL_DIR=/bin"
+    "MAN_DIR=/share/man/man1"
+    "DESTDIR=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "Wrapper for 'diff' that produces the same output but with pretty 'syntax' highlighting";
+    homepage = "https://www.colordiff.org/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "colordiff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/coloursum/default.nix b/nixpkgs/pkgs/tools/text/coloursum/default.nix
new file mode 100644
index 000000000000..93ebf6c309e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/coloursum/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "coloursum";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "ticky";
+    repo = "coloursum";
+    rev = "v${version}";
+    hash = "sha256-zA2JhSnlFccSY01WMGsgF4AmrF/3BRUCcSMfoEbEPgA=";
+  };
+
+  cargoHash = "sha256-dhcTpff4h37MHNbLoYUZiolSclSGcFrMJ3kKLCZAVAw=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Colourise your checksum output";
+    homepage = "https://github.com/ticky/coloursum";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/comrak/default.nix b/nixpkgs/pkgs/tools/text/comrak/default.nix
new file mode 100644
index 000000000000..3b9af32c2833
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/comrak/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "comrak";
+  version = "0.21.0";
+
+  src = fetchFromGitHub {
+    owner = "kivikakk";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-gYEq2kfSLaGdVQxmHTZ8O55f4Iwj9FKjUmlNq5+QtXI=";
+  };
+
+  cargoHash = "sha256-rkSq18cFSlTJsZ7DvpJbXYUsg5k86Jk6bgpdO5nP6CE=";
+
+  meta = with lib; {
+    description = "A CommonMark-compatible GitHub Flavored Markdown parser and formatter";
+    homepage = "https://github.com/kivikakk/comrak";
+    changelog = "https://github.com/kivikakk/comrak/blob/${version}/changelog.txt";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/convertlit/default.nix b/nixpkgs/pkgs/tools/text/convertlit/default.nix
new file mode 100644
index 000000000000..4225934d2d4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/convertlit/default.nix
@@ -0,0 +1,37 @@
+{lib, stdenv, fetchzip, libtommath}:
+
+stdenv.mkDerivation rec {
+  pname = "convertlit";
+  version = "1.8";
+
+  src = fetchzip {
+    url = "http://www.convertlit.com/convertlit${lib.replaceStrings ["."] [""] version}src.zip";
+    sha256 = "182nsin7qscgbw2h92m0zadh3h8q410h5cza6v486yjfvla3dxjx";
+    stripRoot = false;
+  };
+
+  buildInputs = [libtommath];
+
+  hardeningDisable = [ "format" ];
+
+  buildPhase = ''
+    cd lib
+    make
+    cd ../clit18
+    substituteInPlace Makefile \
+      --replace ../libtommath-0.30/libtommath.a -ltommath
+    make
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp clit $out/bin
+  '';
+
+  meta = {
+    homepage = "http://www.convertlit.com/";
+    description = "A tool for converting Microsoft Reader ebooks to more open formats";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/copyright-update/default.nix b/nixpkgs/pkgs/tools/text/copyright-update/default.nix
new file mode 100644
index 000000000000..e0318c20a0e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/copyright-update/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "copyright-update";
+  version = "2016.1018";
+
+  src = fetchFromGitHub {
+    name = "${pname}-${version}-src";
+    owner = "jaalto";
+    repo = "project--copyright-update";
+    rev = "release/${version}";
+    sha256 = "1kj6jlgyxrgvrpv7fcgbibfqqa83xljp17v6sas42dlb105h6sgd";
+  };
+
+  buildInputs = [ perl ];
+
+  installFlags = [ "INSTALL=install" "prefix=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jaalto/project--copyright-update";
+    description = "Updates the copyright information in a set of files";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/cringify/default.nix b/nixpkgs/pkgs/tools/text/cringify/default.nix
new file mode 100644
index 000000000000..6230f6575c3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/cringify/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cringify";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "sansyrox";
+    repo = "cringify";
+    rev = "dd753818f8dd4b343be9370d2c29a6be070ad791";
+    hash = "sha256-6hSgOk9DzDfGtZX1vt6AQsKSLdPdqy2Mz3UtK6d2AuA=";
+  };
+
+  cargoHash = "sha256-w6lqPyUCaXZBQ1EmMyj0sVnEHugMD6JugIIK0rEa19Y=";
+
+  postPatch = ''
+    # Upstream forgot to update the version value
+    substituteInPlace src/main.rs --replace '0.1.0' ${version}
+  '';
+
+  # No tests are present in the repository
+  doCheck = false;
+
+  meta = {
+    description = "Annoy your friends with the cringified text";
+    homepage = "https://github.com/sansyrox/cringify";
+    license = lib.licenses.mit;
+    mainProgram = "cringify";
+    maintainers = with lib.maintainers; [ tomasajt ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/crowdin-cli/default.nix b/nixpkgs/pkgs/tools/text/crowdin-cli/default.nix
new file mode 100644
index 000000000000..61543001aefd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/crowdin-cli/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchurl
+, gawk
+, git
+, gnugrep
+, installShellFiles
+, jre
+, makeWrapper
+, crowdin-cli
+, testers
+, unzip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "crowdin-cli";
+  version = "3.18.0";
+
+  src = fetchurl {
+    url = "https://github.com/crowdin/${pname}/releases/download/${version}/${pname}.zip";
+    hash = "sha256-wktEg9JPokKeyEOdK9j55XSefj4rleU1ig5exP83j/g=";
+  };
+
+  nativeBuildInputs = [ installShellFiles makeWrapper unzip ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D crowdin-cli.jar $out/lib/crowdin-cli.jar
+
+    installShellCompletion --cmd crowdin --bash ./crowdin_completion
+
+    makeWrapper ${jre}/bin/java $out/bin/crowdin \
+      --argv0 crowdin \
+      --add-flags "-jar $out/lib/crowdin-cli.jar" \
+      --prefix PATH : ${lib.makeBinPath [ gawk gnugrep git ]}
+
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testers.testVersion { package = crowdin-cli; };
+
+  meta = with lib; {
+    mainProgram = "crowdin";
+    homepage = "https://github.com/crowdin/crowdin-cli/";
+    description = "A command-line client for the Crowdin API";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ DamienCassou ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/csvdiff/default.nix b/nixpkgs/pkgs/tools/text/csvdiff/default.nix
new file mode 100644
index 000000000000..236993b2dd25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/csvdiff/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "csvdiff";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "aswinkarthik";
+    repo = "csvdiff";
+    rev = "v${version}";
+    hash = "sha256-66R5XxrNQ1YMMQicw0VCF/XzRo//5Gqdjlher/uMoTE=";
+  };
+
+  vendorHash = "sha256-rhOjBMCyfirEI/apL3ObHfKZeuNPGSt84R9lwCbRIpg=";
+
+  meta = with lib; {
+    homepage = "https://aswinkarthik.github.io/csvdiff/";
+    description = "A fast diff tool for comparing csv files";
+    license = licenses.mit;
+    maintainers = with maintainers; [ turion ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/csview/default.nix b/nixpkgs/pkgs/tools/text/csview/default.nix
new file mode 100644
index 000000000000..0b69465ccfb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/csview/default.nix
@@ -0,0 +1,22 @@
+{ fetchFromGitHub, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "csview";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "wfxr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-pv0zCtVHTjzkXK5EZhu6jviMJF0p9dvAuYcA6khiIos=";
+  };
+
+  cargoSha256 = "sha256-uMBwEbxI8hjoFMlH+oquHvKdyLUC9bnO5uMFHkyZjgY=";
+
+  meta = with lib; {
+    description = "A high performance csv viewer with cjk/emoji support";
+    homepage = "https://github.com/wfxr/csview";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/csvquote/csvquote-path.patch b/nixpkgs/pkgs/tools/text/csvquote/csvquote-path.patch
new file mode 100644
index 000000000000..a3f87055f238
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/csvquote/csvquote-path.patch
@@ -0,0 +1,14 @@
+--- a/csvheader
++++ b/csvheader
+@@ -29,10 +29,6 @@ while getopts "d:tq:r:" arg; do
+     esac
+ done
+ 
+-CSVQUOTE=`which csvquote` || CSVQUOTE="./csvquote"
+-if [ ! -f $CSVQUOTE ]; then
+-    echo "csvquote program not found. exiting"
+-    exit 1
+-fi
++CSVQUOTE=@out@/bin/csvquote
+ 
+ $CSVQUOTE $@ | head -n 1 | tr "$DEL" '\n' | nl -ba | $CSVQUOTE -u -d "$DEL" -q "$QUO" -r "$REC"
diff --git a/nixpkgs/pkgs/tools/text/csvquote/default.nix b/nixpkgs/pkgs/tools/text/csvquote/default.nix
new file mode 100644
index 000000000000..e4bf9b5a3377
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/csvquote/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, patsh
+}:
+
+stdenv.mkDerivation rec {
+  pname = "csvquote";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "dbro";
+    repo = "csvquote";
+    rev = "v${version}";
+    hash = "sha256-847JAoDEfA9K4LB8z9cqSw+GTImqmITBylB/4odLDb0=";
+  };
+
+  patches = [
+    # patch csvheader to use csvquote from the derivation
+    ./csvquote-path.patch
+  ];
+
+  nativeBuildInputs = [
+    patsh
+  ];
+
+  makeFlags = [
+    "BINDIR=$(out)/bin"
+  ];
+
+  preInstall = ''
+    mkdir -p "$out/bin"
+  '';
+
+  postInstall = ''
+    substituteAllInPlace $out/bin/csvheader
+    patsh $out/bin/csvheader -fs ${builtins.storeDir}
+  '';
+
+  meta = with lib; {
+    description = "Enables common unix utilities like cut, awk, wc, head to work correctly with csv data containing delimiters and newlines";
+    homepage = "https://github.com/dbro/csvquote";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/d2/default.nix b/nixpkgs/pkgs/tools/text/d2/default.nix
new file mode 100644
index 000000000000..77c5de696f12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/d2/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, git
+, testers
+, d2
+}:
+
+buildGoModule rec {
+  pname = "d2";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "terrastruct";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-GImv4OJHanj6dKtAJpTaGLrR4AaVTboiYHwRdh/gXaU=";
+  };
+
+  vendorHash = "sha256-T7eki06fQuGvYIJKvBJsIkFS1fQ9Jbv+ieUSr2vupqg=";
+
+  excludedPackages = [ "./e2etests" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X oss.terrastruct.com/d2/lib/version.Version=v${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage ci/release/template/man/d2.1
+  '';
+
+  nativeCheckInputs = [ git ];
+
+  preCheck = ''
+    # See https://github.com/terrastruct/d2/blob/master/docs/CONTRIBUTING.md#running-tests.
+    export TESTDATA_ACCEPT=1
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = d2;
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "A modern diagram scripting language that turns text to diagrams";
+    homepage = "https://d2lang.com";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ dit7ya kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/dadadodo/default.nix b/nixpkgs/pkgs/tools/text/dadadodo/default.nix
new file mode 100644
index 000000000000..a70a7efda72e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/dadadodo/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dadadodo";
+  version = "1.04";
+
+  src = fetchurl {
+    url = "https://www.jwz.org/dadadodo/${pname}-${version}.tar.gz";
+    sha256 = "1pzwp3mim58afjrc92yx65mmgr1c834s1v6z4f4gyihwjn8bn3if";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp dadadodo $out/bin
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "Markov chain-based text generator";
+    homepage = "http://www.jwz.org/dadadodo";
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/dcs/default.nix b/nixpkgs/pkgs/tools/text/dcs/default.nix
new file mode 100644
index 000000000000..0f438e4ff571
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/dcs/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, yuicompressor
+, zopfli
+, stdenv
+}:
+buildGoModule {
+  pname = "dcs";
+  version = "unstable-2021-04-07";
+
+  src = fetchFromGitHub {
+    owner = "Debian";
+    repo = "dcs";
+    rev = "da46accc4d55e9bfde1a6852ac5a9e730fcbbb2c";
+    hash = "sha256-N+6BXlKn1YTlh0ZdPNWa0nuJNcQtlUIc9TocM8cbzQk=";
+  };
+
+  vendorHash = "sha256-l2mziuisx0HzuP88rS5M+Wha6lu8P036wJYZlmzjWfs=";
+
+  # Depends on dcs binaries
+  doCheck = false;
+
+  nativeBuildInputs = [
+    yuicompressor
+    zopfli
+  ];
+
+  postBuild = ''
+    make -C static -j$NIX_BUILD_CORES
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/dcs
+    cp -r cmd/dcs-web/templates $out/share/dcs
+    cp -r static $out/share/dcs
+  '';
+
+  meta = with lib; {
+    description = "Debian Code Search";
+    homepage = "https://github.com/Debian/dcs";
+    license = licenses.bsd3;
+    maintainers = [ ];
+    broken = stdenv.isAarch64
+      || stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/staging-next/dcs.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/dfmt/default.nix b/nixpkgs/pkgs/tools/text/dfmt/default.nix
new file mode 100644
index 000000000000..f09ce0b45256
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/dfmt/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+let
+  inherit (python3.pkgs)
+    buildPythonApplication
+    pythonOlder;
+in
+buildPythonApplication rec {
+  pname = "dfmt";
+  version = "1.2.0";
+  disabled = pythonOlder "3.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "7af6360ca8d556f1cfe82b97f03b8d1ea5a9d6de1fa3018290c844b6566d9d6e";
+  };
+
+  meta = with lib; {
+    description = "Format paragraphs, comments and doc strings";
+    homepage = "https://github.com/dmerejkowsky/dfmt";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ cole-h ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/diction/default.nix b/nixpkgs/pkgs/tools/text/diction/default.nix
new file mode 100644
index 000000000000..be486cccf549
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/diction/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "diction";
+  version = "1.13";
+
+  src = fetchurl {
+    url = "http://www.moria.de/~michael/diction/${pname}-${version}.tar.gz";
+    sha256 = "08fi971b8qa4xycxbgb42i6b5ms3qx9zpp5hwpbxy2vypfs0wph9";
+  };
+
+  meta = {
+    description = "GNU style and diction utilities";
+    longDescription = ''
+      Diction and style are two old standard Unix commands. Diction identifies
+      wordy and commonly misused phrases. Style analyses surface
+      characteristics of a document, including sentence length and other
+      readability measures.
+    '';
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/diffr/default.nix b/nixpkgs/pkgs/tools/text/diffr/default.nix
new file mode 100644
index 000000000000..ee12b39c3ec3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/diffr/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "diffr";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "mookid";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ylZE2NtTXbGqsxE72ylEQCacTyxBO+/WgvEpoXd5OZI=";
+  };
+
+  cargoHash = "sha256-RmQu55OnKfeuDGcJrfjhMKnxDatdowkvh3Kh4N8I8Sg=";
+
+  buildInputs = (lib.optional stdenv.isDarwin Security);
+
+  preCheck = ''
+    export DIFFR_TESTS_BINARY_PATH=$releaseDir/diffr
+  '';
+
+  meta = with lib; {
+    description = "Yet another diff highlighting tool";
+    homepage = "https://github.com/mookid/diffr";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ davidtwco ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/diffsitter/default.nix b/nixpkgs/pkgs/tools/text/diffsitter/default.nix
new file mode 100644
index 000000000000..e3c14df85407
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/diffsitter/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, fetchFromGitHub
+, linkFarm
+, makeWrapper
+, rustPlatform
+, tree-sitter
+}:
+
+let
+  # based on https://github.com/NixOS/nixpkgs/blob/aa07b78b9606daf1145a37f6299c6066939df075/pkgs/development/tools/parsing/tree-sitter/default.nix#L85-L104
+  withPlugins = grammarFn:
+    let
+      grammars = grammarFn tree-sitter.builtGrammars;
+    in
+    linkFarm "grammars"
+      (map
+        (drv:
+          let
+            name = lib.strings.getName drv;
+          in
+          {
+            name =
+              "lib" +
+              (lib.strings.removeSuffix "-grammar" name)
+              + ".so";
+            path = "${drv}/parser";
+          }
+        )
+        grammars);
+
+  libPath = withPlugins (_: tree-sitter.allGrammars);
+in
+rustPlatform.buildRustPackage rec {
+  pname = "diffsitter";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "afnanenayet";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-rB580TlM0/HXYgPvWtm7KMtXrw6i996HyvCrNr3QmNA=";
+    fetchSubmodules = false;
+  };
+
+  cargoHash = "sha256-8ajCXoB+mVhHrstVG+QkWYfXJqDk4+XPcO6yjR4TqpQ=";
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = [
+    "dynamic-grammar-libs"
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  postInstall = ''
+    # completions are not yet implemented
+    # so we can safely remove this without installing the completions
+    rm $out/bin/diffsitter_completions
+
+    wrapProgram "$out/bin/diffsitter" \
+      --prefix LD_LIBRARY_PATH : "${libPath}"
+  '';
+
+  doCheck = false;
+  # failures:
+  #     tests::diff_hunks_snapshot::_medium_cpp_cpp_false_expects
+  #     tests::diff_hunks_snapshot::_medium_cpp_cpp_true_expects
+  #     tests::diff_hunks_snapshot::_medium_rust_rs_false_expects
+  #     tests::diff_hunks_snapshot::_medium_rust_rs_true_expects
+  #     tests::diff_hunks_snapshot::_short_python_py_true_expects
+  #     tests::diff_hunks_snapshot::_short_rust_rs_true_expects
+
+  meta = with lib; {
+    homepage = "https://github.com/afnanenayet/diffsitter";
+    description = "A tree-sitter based AST difftool to get meaningful semantic diffs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/diffstat/default.nix b/nixpkgs/pkgs/tools/text/diffstat/default.nix
new file mode 100644
index 000000000000..0b10014e0e6e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/diffstat/default.nix
@@ -0,0 +1,27 @@
+{ fetchurl, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "diffstat";
+  version = "1.66";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.invisible-island.net/diffstat/diffstat-${version}.tgz"
+      "https://invisible-mirror.net/archives/diffstat/diffstat-${version}.tgz"
+    ];
+    sha256 = "sha256-9UUxu+Mujg+kYfAYtB469Ra2MggBcvNh8F5QNn7Ltp4=";
+  };
+
+  meta = with lib; {
+    description = "Read output of diff and display a histogram of the changes";
+    longDescription = ''
+      diffstat reads the output of diff and displays a histogram of the
+      insertions, deletions, and modifications per-file. It is useful for
+      reviewing large, complex patch files.
+    '';
+    homepage = "https://invisible-island.net/diffstat/";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/difftastic/Cargo.lock b/nixpkgs/pkgs/tools/text/difftastic/Cargo.lock
new file mode 100644
index 000000000000..f0bca647bebb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/difftastic/Cargo.lock
@@ -0,0 +1,1296 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5c2ca00549910ec251e3bd15f87aeeb206c9456b9a77b43ff6c97c54042a472"
+dependencies = [
+ "bstr 0.2.17",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "bstr"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "bytecount"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72feb31ffc86498dacdbd0fcebb56138e7177a8cc5cea4516031d15ae85a742e"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "3.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"
+dependencies = [
+ "atty",
+ "bitflags 1.3.2",
+ "clap_lex",
+ "indexmap",
+ "lazy_static",
+ "strsim",
+ "termcolor",
+ "terminal_size",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "const_format"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0936ffe6d0c8d6a51b3b0a73b2acbe925d786f346cf45bfddc8341d79fb7dc8a"
+dependencies = [
+ "const_format_proc_macros",
+]
+
+[[package]]
+name = "const_format_proc_macros"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef196d5d972878a48da7decb7686eded338b4858fbabeed513d63a7c98b2b82d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
+dependencies = [
+ "cfg-if",
+ "lazy_static",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
+dependencies = [
+ "bitflags 2.4.1",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c"
+dependencies = [
+ "quote",
+ "syn 1.0.95",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "difftastic"
+version = "0.55.0"
+dependencies = [
+ "aho-corasick",
+ "assert_cmd",
+ "bumpalo",
+ "cc",
+ "clap",
+ "const_format",
+ "crossterm",
+ "glob",
+ "hashbrown 0.12.3",
+ "humansize",
+ "ignore",
+ "itertools 0.11.0",
+ "lazy_static",
+ "libc",
+ "libmimalloc-sys",
+ "line-numbers",
+ "log",
+ "memchr",
+ "mimalloc",
+ "owo-colors",
+ "predicates",
+ "pretty_assertions",
+ "pretty_env_logger",
+ "radix-heap",
+ "rayon",
+ "regex",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "strsim",
+ "strum",
+ "tree-sitter",
+ "tree_magic_mini",
+ "typed-arena",
+ "unicode-width",
+ "version_check",
+ "wu-diff",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e"
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d"
+dependencies = [
+ "aho-corasick",
+ "bstr 1.6.0",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "humansize"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "ignore"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
+dependencies = [
+ "crossbeam-utils",
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.11.2",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+
+[[package]]
+name = "libm"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+
+[[package]]
+name = "libmimalloc-sys"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7705fc40f6ed493f73584abbb324e74f96b358ff60dfe5659a0f8fc12c590a69"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "line-numbers"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b25f5068853805faa3c19f44d0c401446e4eb3f47cc808fa331eec30f0ba35c"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mimalloc"
+version = "0.1.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0dfa131390c2f6bdb3242f65ff271fcdaca5ff7b6c08f28398be7f2280e3926"
+dependencies = [
+ "libmimalloc-sys",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "mio"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029d8d0b2f198229de29dca79676f2738ff952edf3fde542eb8bf94d8c21b435"
+
+[[package]]
+name = "output_vt100"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b305cc4569dd4e8765bab46261f67ef5d4d11a4b6e745100ee5dad8948b46c"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "predicates"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c"
+dependencies = [
+ "difflib",
+ "float-cmp",
+ "itertools 0.10.3",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da1c2388b1513e1b605fcec39a95e0a9e8ef088f71443ef37099fa9ae6673fcb"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755"
+dependencies = [
+ "ctor",
+ "diff",
+ "output_vt100",
+ "yansi",
+]
+
+[[package]]
+name = "pretty_env_logger"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c"
+dependencies = [
+ "env_logger",
+ "log",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radix-heap"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ffec9df464013295b499298811e6a3de31bf8128092135826517db12dee601"
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.3.7",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-automata"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.37.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "serde"
+version = "1.0.176"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76dc28c9523c5d70816e393136b86d48909cfb27cecaa902d338c19ed47164dc"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.176"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4e7b8c5dc823e3b90651ff1d3808419cd14e5ad76de04feaf37da114e7a306f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.27",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.104"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6069ca09d878a33f883cc06aaa9718ede171841d3832450354410b718b097232"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.27",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.95"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "termtree"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b"
+
+[[package]]
+name = "textwrap"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+dependencies = [
+ "terminal_size",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tree-sitter"
+version = "0.20.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e747b1f9b7b931ed39a548c1fae149101497de3c1fc8d9e18c62c1a66c683d3d"
+dependencies = [
+ "cc",
+ "regex",
+]
+
+[[package]]
+name = "tree_magic_mini"
+version = "3.0.2"
+source = "git+https://github.com/Wilfred/tree_magic?branch=fix-panic-for-empty-strings#13dd6dda15c7062bd8f7dd5bc9bb5b16ce9ee613"
+dependencies = [
+ "bytecount",
+ "fnv",
+ "lazy_static",
+ "nom",
+ "once_cell",
+ "petgraph",
+]
+
+[[package]]
+name = "typed-arena"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.1",
+ "windows_aarch64_msvc 0.42.1",
+ "windows_i686_gnu 0.42.1",
+ "windows_i686_msvc 0.42.1",
+ "windows_x86_64_gnu 0.42.1",
+ "windows_x86_64_gnullvm 0.42.1",
+ "windows_x86_64_msvc 0.42.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "wu-diff"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e3e6735fcde06432870db8dc9d7e3ab1b93727c14eaef329969426299f28893"
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
diff --git a/nixpkgs/pkgs/tools/text/difftastic/default.nix b/nixpkgs/pkgs/tools/text/difftastic/default.nix
new file mode 100644
index 000000000000..e5c04d1e4cd3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/difftastic/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, fetchpatch
+, rustPlatform
+, fetchFromGitHub
+, testers
+, difftastic
+, stdenv
+}:
+
+let
+  mimallocPatch = fetchpatch {
+    name = "fix-build-on-older-macos-releases.patch";
+    url = "https://github.com/microsoft/mimalloc/commit/40e0507a5959ee218f308d33aec212c3ebeef3bb.patch";
+    sha256 = "sha256-DK0LqsVXXiEVQSQCxZ5jyZMg0UJJx9a/WxzCroYSHZc=";
+  };
+in
+
+rustPlatform.buildRustPackage rec {
+  pname = "difftastic";
+  version = "0.55.0";
+
+  src = fetchFromGitHub {
+    owner = "wilfred";
+    repo = pname;
+    rev = version;
+    hash = "sha256-ltlgZoR94BrF6FOOUnSNZf3Uagu5AZjxE7yxOwWWMzU=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "tree_magic_mini-3.0.2" = "sha256-iIX/DeDbquObDPOx/pctVFN4R8GSkD9bPNkNgOLdUJs=";
+    };
+  };
+
+  # skip flaky tests
+  checkFlags = [
+    "--skip=options::tests::test_detect_display_width"
+  ];
+
+  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  postPatch = ''
+    patch -d $cargoDepsCopy/libmimalloc-sys-0.1.24/c_src/mimalloc \
+      -p1 < ${mimallocPatch}
+  '';
+
+  passthru.tests.version = testers.testVersion { package = difftastic; };
+
+  meta = with lib; {
+    description = "A syntax-aware diff";
+    homepage = "https://github.com/Wilfred/difftastic";
+    changelog = "https://github.com/Wilfred/difftastic/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ethancedwards8 figsoda ];
+    mainProgram = "difft";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/diffutils/default.nix b/nixpkgs/pkgs/tools/text/diffutils/default.nix
new file mode 100644
index 000000000000..040f363fa55d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/diffutils/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, xz, coreutils ? null }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "diffutils";
+  version = "3.10";
+
+  src = fetchurl {
+    url = "mirror://gnu/diffutils/diffutils-${version}.tar.xz";
+    hash = "sha256-kOXpPMck5OvhLt6A3xY0Bjx6hVaSaFkZv+YLVWyb0J4=";
+  };
+
+  outputs = [ "out" "info" ];
+
+  nativeBuildInputs = [ (lib.getBin xz) ];
+  /* If no explicit coreutils is given, use the one from stdenv. */
+  buildInputs = [ coreutils ];
+
+  # Disable stack-related gnulib tests on x86_64-darwin because they have problems running under
+  # Rosetta 2: test-c-stack hangs, test-sigsegv-catch-stackoverflow fails.
+  postPatch = if (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) then ''
+    sed -i -E 's:test-c-stack2?\.sh::g' gnulib-tests/Makefile.in
+    sed -i -E 's:test-sigsegv-catch-stackoverflow[12]::g' gnulib-tests/Makefile.in
+  '' else null;
+
+  configureFlags =
+    # "pr" need not be on the PATH as a run-time dep, so we need to tell
+    # configure where it is. Covers the cross and native case alike.
+    lib.optional (coreutils != null) "PR_PROGRAM=${coreutils}/bin/pr"
+    ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "gl_cv_func_getopt_gnu=yes";
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/diffutils/diffutils.html";
+    description = "Commands for showing the differences between files (diff, cmp, etc.)";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/dirdiff/default.nix b/nixpkgs/pkgs/tools/text/dirdiff/default.nix
new file mode 100644
index 000000000000..437743e66ef6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/dirdiff/default.nix
@@ -0,0 +1,64 @@
+{ copyDesktopItems, fetchurl, lib, makeDesktopItem, stdenv, tcl, tk }:
+
+stdenv.mkDerivation rec {
+  pname = "dirdiff";
+  version = "2.1";
+
+  src = fetchurl {
+    url = "mirror://samba/paulus/${pname}-${version}.tar.gz";
+    sha256 = "0lljd8av68j70733yshzzhxjr1lm0vgmbqsm8f02g03qsma3cdyb";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems ];
+  buildInputs = [ tcl tk ];
+
+  # Some light path patching.
+  patches = [ ./dirdiff-2.1-vars.patch ];
+  postPatch = ''
+    for file in dirdiff Makefile; do
+      substituteInPlace "$file" \
+          --subst-var out \
+          --subst-var-by tcl ${tcl} \
+          --subst-var-by tk ${tk}
+    done
+  '';
+
+  env = {
+    NIX_CFLAGS_COMPILE = "-DUSE_INTERP_RESULT";
+    NIX_LDFLAGS = "-ltcl";
+  };
+
+  # If we don't create the directories ourselves, then 'make install' creates
+  # files named 'bin' and 'lib'.
+  preInstall = ''
+    mkdir -p $out/bin $out/lib
+  '';
+
+  installFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "LIBDIR=${placeholder "out"}/lib"
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "dirdiff";
+      exec = "dirdiff";
+      desktopName = "Dirdiff";
+      genericName = "Directory Diff Viewer";
+      comment = "Diff and merge directory trees";
+      categories = [ "Development" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "Graphical directory tree diff and merge tool";
+    longDescription = ''
+      Dirdiff is a graphical tool for displaying the differences between
+      directory trees and for merging changes from one tree into another.
+    '';
+    homepage = "https://www.samba.org/ftp/paulus/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ khumba ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/dirdiff/dirdiff-2.1-vars.patch b/nixpkgs/pkgs/tools/text/dirdiff/dirdiff-2.1-vars.patch
new file mode 100644
index 000000000000..4e7aa025754a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/dirdiff/dirdiff-2.1-vars.patch
@@ -0,0 +1,32 @@
+diff '--color=auto' -ru dirdiff-2.1/dirdiff dirdiff-2.1-patched/dirdiff
+--- dirdiff-2.1/dirdiff	2005-04-20 03:09:53.000000000 -0700
++++ dirdiff-2.1-patched/dirdiff	2021-02-14 22:54:09.837692023 -0800
+@@ -1,6 +1,6 @@
+ #!/bin/sh
+ # Tcl ignores the next line \
+-exec wish "$0" -- "${1+$@}"
++exec @tk@/bin/wish "$0" -- "${1+$@}"
+ 
+ # Copyright (C) 1999-2004 Paul Mackerras.  All rights reserved.
+ # This program is free software; it may be used, copied, modified
+@@ -17,7 +17,7 @@
+ set TclExe [info nameofexecutable]
+ set compound_ok [expr {$tcl_version >= 8.4}]
+ 
+-set nofilecmp [catch {load libfilecmp.so.0.0}]
++set nofilecmp [catch {load @out@/lib/libfilecmp.so.0.0}]
+ set rcsflag {}
+ set diffbflag {}
+ set diffBflag {}
+diff '--color=auto' -ru dirdiff-2.1/Makefile dirdiff-2.1-patched/Makefile
+--- dirdiff-2.1/Makefile	2005-04-19 03:22:01.000000000 -0700
++++ dirdiff-2.1-patched/Makefile	2021-02-14 22:54:58.575400923 -0800
+@@ -7,7 +7,7 @@
+ INSTALL=install
+ 
+ # You may need to change the -I arguments depending on your system
+-CFLAGS=-O3 -I/usr/include/tcl8.3/ -I/usr/include/tcl
++CFLAGS=-O3 -I@tcl@/include
+ 
+ all:	libfilecmp.so.0.0
+ 
diff --git a/nixpkgs/pkgs/tools/text/discount/default.nix b/nixpkgs/pkgs/tools/text/discount/default.nix
new file mode 100644
index 000000000000..7cfdb018ef75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/discount/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "2.2.7b";
+  pname = "discount";
+
+  src = fetchFromGitHub {
+    owner = "Orc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-S6OVKYulhvEPRqNXBsvZ7m2W4cbdnrpZKPAo3SfD+9s=";
+  };
+
+  patches = [ ./fix-configure-path.patch ];
+  configureScript = "./configure.sh";
+  configureFlags = [
+    "--shared"
+    "--debian-glitch" # use deterministic mangling
+    "--pkg-config"
+    "--h1-title"
+  ];
+
+  enableParallelBuilding = true;
+  installTargets = [ "install.everything" ];
+
+  doCheck = true;
+
+  postFixup = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -id "$out/lib/libmarkdown.dylib" "$out/lib/libmarkdown.dylib"
+    for exe in $out/bin/*; do
+      install_name_tool -change libmarkdown.dylib "$out/lib/libmarkdown.dylib" "$exe"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Implementation of Markdown markup language in C";
+    homepage = "http://www.pell.portland.or.us/~orc/Code/discount/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ shell ];
+    mainProgram = "markdown";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/discount/fix-configure-path.patch b/nixpkgs/pkgs/tools/text/discount/fix-configure-path.patch
new file mode 100644
index 000000000000..045b369b4b69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/discount/fix-configure-path.patch
@@ -0,0 +1,12 @@
+diff -rupN discount-2.1.6-original/configure.inc discount-2.1.6/configure.inc
+--- discount-2.1.6-original/configure.inc	2014-10-10 15:34:24.158325345 +0100
++++ discount-2.1.6/configure.inc	2014-10-10 15:34:33.553325321 +0100
+@@ -32,7 +32,7 @@
+ # this preamble code is executed when this file is sourced and it picks
+ # interesting things off the command line.
+ #
+-ac_default_path="/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin"
++ac_default_path=$PATH
+ 
+ ac_standard="--src=DIR		where the source lives (.)
+ --prefix=DIR		where to install the final product (/usr/local)
diff --git a/nixpkgs/pkgs/tools/text/djot-js/default.nix b/nixpkgs/pkgs/tools/text/djot-js/default.nix
new file mode 100644
index 000000000000..bd8b742cc184
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/djot-js/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, fetchpatch
+, installShellFiles
+}:
+
+buildNpmPackage rec {
+  pname = "djot-js";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "jgm";
+    repo = "djot.js";
+    rev = "@djot/djot@${version}";
+    hash = "sha256-W/ZQXJXvFEIgj5PeI+jvw4nIkNP4qa1NyQCOv0unIuA=";
+  };
+
+  npmDepsHash = "sha256-x/Oc39S6XwZ/ZsS/lmMU9OkHLlKuUxETYmD8pdHAIg8=";
+
+  patches = [
+    # djot.js v0.2.3 doesn't include package-lock.json in the repository
+    # remove at next release
+    (fetchpatch {
+      name = "add-package-lock-json-and-yarn-lock-to-repository.patch";
+      url = "https://github.com/jgm/djot.js/commit/15ed52755b2968932d4a9a80805b9ea6183fe539.patch";
+      hash = "sha256-saNmU7z4IOOG3ptXMFDSNci5uu0d2GiVZ/FAlaNccTc=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installManPage doc/djot.1
+  '';
+
+  meta = with lib; {
+    description = "JavaScript implementation of djot";
+    homepage = "https://github.com/jgm/djot.js";
+    changelog = "https://github.com/jgm/djot.js/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "djot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/dos2unix/default.nix b/nixpkgs/pkgs/tools/text/dos2unix/default.nix
new file mode 100644
index 000000000000..9785b21e0dcb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/dos2unix/default.nix
@@ -0,0 +1,23 @@
+{lib, stdenv, fetchurl, perl, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "dos2unix";
+  version = "7.5.2";
+
+  src = fetchurl {
+    url = "https://waterlan.home.xs4all.nl/dos2unix/${pname}-${version}.tar.gz";
+    sha256 = "sha256-JkdCRGYIRC60j5bCCvbaMDyzqSs2TnLLfiT4gjnEvzo=";
+  };
+
+  nativeBuildInputs = [ perl gettext ];
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Convert text files with DOS or Mac line breaks to Unix line breaks and vice versa";
+    homepage = "https://waterlan.home.xs4all.nl/dos2unix.html";
+    changelog = "https://sourceforge.net/p/dos2unix/dos2unix/ci/dos2unix-${version}/tree/dos2unix/NEWS.txt?format=raw";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ c0bw3b ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/dt/default.nix b/nixpkgs/pkgs/tools/text/dt/default.nix
new file mode 100644
index 000000000000..aa478b16dd69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/dt/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, testers
+, zig_0_11
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "dt";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "so-dang-cool";
+    repo = "dt";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-qHfvHf4T0wWnzqp5FfLg7n7te24xc2aMEdTK3Iia8Q0=";
+  };
+
+  nativeBuildInputs = [ zig_0_11.hook ];
+
+  passthru.tests.version = testers.testVersion { package = finalAttrs.finalPackage; };
+
+  meta = {
+    homepage = "https://dt.plumbing";
+    description = "Duct tape for your unix pipes";
+    longDescription = ''
+      dt is a utility and programming language. The utility is intended for
+      ergonomic in-the-shell execution. The language is straightforward (in
+      the most literal sense) with a minimal syntax that allows for
+      high-level, higher-order programming.
+
+      It's meant to supplement (not replace!) other tools like awk, sed,
+      xargs, and shell built-ins. Something like the Perl one-liners popular
+      yesteryear, but hopefully easier to read and reason through.
+
+      In short, dt is intended to be generally useful, with zero pretense of
+      elegance.
+    '';
+    changelog = "https://github.com/so-dang-cool/dt/releases/tag/v${finalAttrs.version}";
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ booniepepper ];
+    platforms = lib.platforms.unix;
+    mainProgram = "dt";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/text/each/default.nix b/nixpkgs/pkgs/tools/text/each/default.nix
new file mode 100644
index 000000000000..02974030b269
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/each/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "each";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "arraypad";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-5Aa/uHWrU4bpWd28Uddnuhmi6guHy09W9AU8sAfea6I=";
+  };
+
+  cargoSha256 = "sha256-sH9rraPNAIlW2KQVaZfYa10c1HHQpDgedY1+9e94RLE=";
+
+  meta = with lib; {
+    description = " A better way of working with structured data on the command line";
+    homepage = "https://github.com/arraypad/each";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ thiagokokada ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ebook-tools/default.nix b/nixpkgs/pkgs/tools/text/ebook-tools/default.nix
new file mode 100644
index 000000000000..5efdb69fe453
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ebook-tools/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, cmake, pkg-config, libxml2, libzip }:
+
+stdenv.mkDerivation rec {
+  pname = "ebook-tools";
+  version = "0.2.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ebook-tools/ebook-tools-${version}.tar.gz";
+    sha256 = "1bi7wsz3p5slb43kj7lgb3r6lb91lvb6ldi556k4y50ix6b5khyb";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libxml2 libzip ];
+
+  meta = with lib; {
+    homepage = "http://ebook-tools.sourceforge.net";
+    description = "Tools and library for dealing with various ebook file formats";
+    maintainers = [ ];
+    platforms = platforms.all;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/enca/default.nix b/nixpkgs/pkgs/tools/text/enca/default.nix
new file mode 100644
index 000000000000..7015bd4453cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/enca/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, libiconv, recode }:
+
+stdenv.mkDerivation rec {
+  pname = "enca";
+  version = "1.19";
+
+  src = fetchurl {
+    url = "https://dl.cihar.com/enca/${pname}-${version}.tar.xz";
+    sha256 = "1f78jmrggv3jymql8imm5m9yc8nqjw5l99mpwki2245l8357wj1s";
+  };
+
+  buildInputs = [ recode libiconv ];
+
+  meta = with lib; {
+    description = "Detects the encoding of text files and reencodes them";
+
+    longDescription = ''
+        Enca detects the encoding of text files, on the basis of knowledge
+        of their language. It can also convert them to other encodings,
+        allowing you to recode files without knowing their current encoding.
+        It supports most of Central and East European languages, and a few
+        Unicode variants, independently on language.
+    '';
+
+    license = licenses.gpl2;
+
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/enscript/0001-use-system-getopt.patch b/nixpkgs/pkgs/tools/text/enscript/0001-use-system-getopt.patch
new file mode 100644
index 000000000000..0ae8776f361e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/enscript/0001-use-system-getopt.patch
@@ -0,0 +1,68 @@
+From 4c5cbf6db71cf2981fc836ed370c82149748d8ea Mon Sep 17 00:00:00 2001
+From: annalee <150648636+a-n-n-a-l-e-e@users.noreply.github.com>
+Date: Wed, 6 Dec 2023 22:57:19 +0000
+Subject: [PATCH] use system getopt
+
+the file compat/getopt.h also needs to be removed otherwise it will
+create conflicts with the system includes
+---
+ compat/Makefile.am | 4 ++--
+ compat/Makefile.in | 6 +++---
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/compat/Makefile.am b/compat/Makefile.am
+index aefc06f..23aaf81 100644
+--- a/compat/Makefile.am
++++ b/compat/Makefile.am
+@@ -25,7 +25,7 @@
+ AUTOMAKE_OPTIONS = no-dependencies
+ 
+ noinst_LIBRARIES = libcompat.a
+-libcompat_a_SOURCES = getopt.c getopt1.c xalloc.c regex.c
++libcompat_a_SOURCES = xalloc.c regex.c
+ libcompat_a_LIBADD = @LIBOBJS@ @ALLOCA@
+ libcompat_a_DEPENDENCIES = @LIBOBJS@ @ALLOCA@
+ 
+@@ -34,7 +34,7 @@ libcompat_a_SOURCES_windelta =	\
+ 	+../w32/getpwd.c	\
+ 	+../w32/getuid.c
+ 
+-noinst_HEADERS = getopt.h regex.h xalloc.h
++noinst_HEADERS = regex.h xalloc.h
+ 
+ EXTRA_DIST = ChangeLog.old strerror.c memmove.c memcpy.c strtol.c	\
+ 	strtoul.c gettext.h
+diff --git a/compat/Makefile.in b/compat/Makefile.in
+index edfc620..dee05d7 100644
+--- a/compat/Makefile.in
++++ b/compat/Makefile.in
+@@ -137,7 +137,7 @@ am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+ am__v_AR_0 = @echo "  AR      " $@;
+ am__v_AR_1 = 
+ libcompat_a_AR = $(AR) $(ARFLAGS)
+-am_libcompat_a_OBJECTS = getopt.$(OBJEXT) getopt1.$(OBJEXT) \
++am_libcompat_a_OBJECTS = \
+ 	xalloc.$(OBJEXT) regex.$(OBJEXT)
+ libcompat_a_OBJECTS = $(am_libcompat_a_OBJECTS)
+ AM_V_P = $(am__v_P_@AM_V@)
+@@ -326,7 +326,7 @@ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ AUTOMAKE_OPTIONS = no-dependencies
+ noinst_LIBRARIES = libcompat.a
+-libcompat_a_SOURCES = getopt.c getopt1.c xalloc.c regex.c
++libcompat_a_SOURCES = xalloc.c regex.c
+ libcompat_a_LIBADD = @LIBOBJS@ @ALLOCA@
+ libcompat_a_DEPENDENCIES = @LIBOBJS@ @ALLOCA@
+ libcompat_a_SOURCES_windelta = \
+@@ -334,7 +334,7 @@ libcompat_a_SOURCES_windelta = \
+ 	+../w32/getpwd.c	\
+ 	+../w32/getuid.c
+ 
+-noinst_HEADERS = getopt.h regex.h xalloc.h
++noinst_HEADERS = regex.h xalloc.h
+ EXTRA_DIST = ChangeLog.old strerror.c memmove.c memcpy.c strtol.c	\
+ 	strtoul.c gettext.h
+ 
+-- 
+2.42.0
+
diff --git a/nixpkgs/pkgs/tools/text/enscript/default.nix b/nixpkgs/pkgs/tools/text/enscript/default.nix
new file mode 100644
index 000000000000..e5aeb75ca626
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/enscript/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "enscript";
+  version = "1.6.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/enscript/enscript-${version}.tar.gz";
+    sha256 = "1fy0ymvzrrvs889zanxcaxjfcxarm2d3k43c9frmbl1ld7dblmkd";
+  };
+
+  patches = [
+    # fix compile failure on macos. use system getopt like linux
+    # requires that compat/getopt.h is also removed
+    # https://savannah.gnu.org/bugs/?64307
+    ./0001-use-system-getopt.patch
+  ];
+
+  postPatch = ''
+    # the delete component of 0001-use-system-getopt.patch
+    rm compat/getopt.h
+    # Fix building on Darwin with GCC.
+    substituteInPlace compat/regex.c --replace \
+       __private_extern__  '__attribute__ ((visibility ("hidden")))'
+  '';
+
+  buildInputs = [ gettext ];
+
+  doCheck = true;
+
+  meta = {
+    description = "Converter from ASCII to PostScript, HTML, or RTF";
+
+    longDescription =
+      '' GNU Enscript converts ASCII files to PostScript, HTML, or RTF and
+         stores generated output to a file or sends it directly to the
+         printer.  It includes features for `pretty-printing'
+         (language-sensitive code highlighting) in several programming
+         languages.
+
+         Enscript can be easily extended to handle different output media and
+         it has many options that can be used to customize printouts.
+      '';
+
+    license = lib.licenses.gpl3Plus;
+
+    homepage = "https://www.gnu.org/software/enscript/";
+
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/epub2txt2/default.nix b/nixpkgs/pkgs/tools/text/epub2txt2/default.nix
new file mode 100644
index 000000000000..80a3ebde7454
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/epub2txt2/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "epub2txt2";
+  version = "2.06";
+
+  src = fetchFromGitHub {
+    owner = "kevinboone";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-zzcig5XNh9TqUHginsfoC47WrKavqi6k6ezir+OOMJk=";
+  };
+
+  makeFlags = [ "CC:=$(CC)" "PREFIX:=$(out)" ];
+
+  meta = {
+    description = "A simple command-line utility for Linux, for extracting text from EPUB documents";
+    homepage = "https://github.com/kevinboone/epub2txt2";
+    license = lib.licenses.gpl3Only;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.leonid ];
+    mainProgram = "epub2txt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/epubcheck/default.nix b/nixpkgs/pkgs/tools/text/epubcheck/default.nix
new file mode 100644
index 000000000000..fd84abb0ef06
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/epubcheck/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchzip
+, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "epubcheck";
+  version = "5.1.0";
+
+  src = fetchzip {
+    url = "https://github.com/w3c/epubcheck/releases/download/v${version}/epubcheck-${version}.zip";
+    sha256 = "sha256-gskQ02lGka3nBHSDXO3TpKSQzaoaJUQY9AvWG7L+1YM=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/lib
+    cp -r lib/* $out/lib
+
+    mkdir -p $out/libexec/epubcheck
+    cp epubcheck.jar $out/libexec/epubcheck
+
+    classpath=$out/libexec/epubcheck/epubcheck.jar
+    for jar in $out/lib/*.jar; do
+      classpath="$classpath:$jar"
+    done
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/epubcheck \
+      --add-flags "-classpath $classpath com.adobe.epubcheck.tool.Checker"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/w3c/epubcheck";
+    description = "Validation tool for EPUB";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = with licenses; [ asl20 bsd3 mpl10 w3c ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ eadwu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/esh/default.nix b/nixpkgs/pkgs/tools/text/esh/default.nix
new file mode 100644
index 000000000000..a1d6db2a7c2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/esh/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, asciidoctor, gawk, gnused, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "esh";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "jirutka";
+    repo = "esh";
+    rev = "v${version}";
+    sha256 = "1ddaji5nplf1dyvgkrhqjy8m5djaycqcfhjv30yprj1avjymlj6w";
+  };
+
+  nativeBuildInputs = [ asciidoctor ];
+
+  buildInputs = [ gawk gnused ];
+
+  makeFlags = [ "prefix=$(out)" "DESTDIR=" ];
+
+  postPatch = ''
+    patchShebangs .
+    substituteInPlace esh \
+        --replace '"/bin/sh"' '"${runtimeShell}"' \
+        --replace '"awk"' '"${gawk}/bin/awk"' \
+        --replace 'sed' '${gnused}/bin/sed'
+    substituteInPlace tests/test-dump.exp \
+        --replace '#!/bin/sh' '#!${runtimeShell}'
+  '';
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = with lib; {
+    description = "Simple templating engine based on shell";
+    homepage = "https://github.com/jirutka/esh";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mnacamura ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/fanficfare/default.nix b/nixpkgs/pkgs/tools/text/fanficfare/default.nix
new file mode 100644
index 000000000000..ba20910e1b8d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/fanficfare/default.nix
@@ -0,0 +1,38 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "FanFicFare";
+  version = "4.31.0";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-6AdiyL51UzK/f7wGn2UekAglGPIs4vfyYbC/MdD0aEk=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    beautifulsoup4
+    brotli
+    chardet
+    cloudscraper
+    html5lib
+    html2text
+    requests
+    requests-file
+    urllib3
+  ];
+
+  doCheck = false; # no tests exist
+
+  meta = with lib; {
+    description = "Tool for making eBooks from fanfiction web sites";
+    homepage = "https://github.com/JimmXinu/FanFicFare";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ dwarfmaster ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/fastmod/default.nix b/nixpkgs/pkgs/tools/text/fastmod/default.nix
new file mode 100644
index 000000000000..f8317d70d778
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/fastmod/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, libiconv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fastmod";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "facebookincubator";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-A/3vzfwaStoQ9gdNM8yjmL2J/pQjj6yb68WThiTF+1E=";
+  };
+
+  cargoHash = "sha256-sFrABp4oYhel+GONFsTbunq+4We2DicvF9A3FT/ZArc=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  meta = with lib; {
+    description = "A utility that makes sweeping changes to large, shared code bases";
+    homepage = "https://github.com/facebookincubator/fastmod";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jduan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/frangipanni/default.nix b/nixpkgs/pkgs/tools/text/frangipanni/default.nix
new file mode 100644
index 000000000000..bb144b8f43e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/frangipanni/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "frangipanni";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "birchb1024";
+    repo = "frangipanni";
+    rev = "v${version}";
+    sha256 = "sha256-jIXyqwZWfCBSDTTodHTct4V5rjYv7h4Vcw7cXOFk17w=";
+  };
+
+  vendorHash = "sha256-TSN5M/UCTtfoTf1hDCfrJMCFdSwL/NVXssgt4aefom8=";
+
+  meta = with lib; {
+    description = "Convert lines of text into a tree structure";
+    homepage = "https://github.com/birchb1024/frangipanni";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/frawk/default.nix b/nixpkgs/pkgs/tools/text/frawk/default.nix
new file mode 100644
index 000000000000..230d1328d457
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/frawk/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, libxml2
+, ncurses
+, zlib
+, features ? [ "default" ]
+, llvmPackages_12
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "frawk";
+  version = "0.4.8";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-wPnMJDx3aF1Slx5pjLfii366pgNU3FJBdznQLuUboYA=";
+  };
+
+  cargoSha256 = "sha256-Xk+iH90Nb2koCdGmVSiRl8Nq26LlFdJBuKmvcbgnkgs=";
+
+  buildInputs = [ libxml2 ncurses zlib ];
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = features;
+
+  preBuild = lib.optionalString (lib.elem "default" features || lib.elem "llvm_backend" features) ''
+    export LLVM_SYS_120_PREFIX=${llvmPackages_12.llvm.dev}
+  '' + lib.optionalString (lib.elem "default" features || lib.elem "unstable" features) ''
+    export RUSTC_BOOTSTRAP=1
+  '';
+
+  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  # depends on cpu instructions that may not be available on builders
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A small programming language for writing short programs processing textual data";
+    homepage = "https://github.com/ezrosent/frawk";
+    changelog = "https://github.com/ezrosent/frawk/releases/tag/v${version}";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/frogmouth/default.nix b/nixpkgs/pkgs/tools/text/frogmouth/default.nix
new file mode 100644
index 000000000000..68d63dc7aa5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/frogmouth/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "frogmouth";
+  version = "0.9.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Textualize";
+    repo = "frogmouth";
+    rev = "v${version}";
+    hash = "sha256-0fcCON/M9JklE7X9aRfzTkEFG4ckJqLoQlYCSrWHHGQ=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.poetry-core
+    python3.pkgs.pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    httpx
+    textual
+    typing-extensions
+    xdg
+  ];
+
+  pythonRelaxDeps = [
+    "httpx"
+    "textual"
+  ];
+
+  pythonImportsCheck = [ "frogmouth" ];
+
+  meta = with lib; {
+    description = "A Markdown browser for your terminal";
+    homepage = "https://github.com/Textualize/frogmouth";
+    changelog = "https://github.com/Textualize/frogmouth/blob/${src.rev}/ChangeLog.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/fst/default.nix b/nixpkgs/pkgs/tools/text/fst/default.nix
new file mode 100644
index 000000000000..d08d29376b74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/fst/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, stdenv
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fst";
+  version = "0.4.3";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "fst-bin";
+    sha256 = "sha256-x2rvLMOhatMWU2u5GAdpYy2uuwZLi3apoE6aaTF+M1g=";
+  };
+
+  cargoHash = "sha256-yTbEaw+BbjVks3j7/b75kGoUjVftLaVYvYIdI/bbfdk=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    csv="$(mktemp)"
+    fst="$(mktemp)"
+    printf "abc,1\nabcd,1" > "$csv"
+    $out/bin/fst map "$csv" "$fst" --force
+    $out/bin/fst fuzzy "$fst" 'abc'
+    $out/bin/fst --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Represent large sets and maps compactly with finite state transducers";
+    homepage = "https://github.com/BurntSushi/fst";
+    license = with licenses; [ unlicense /* or */ mit ];
+    maintainers = with maintainers; [ rmcgibbo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gawk/default.nix b/nixpkgs/pkgs/tools/text/gawk/default.nix
new file mode 100644
index 000000000000..d85880e82e15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gawk/default.nix
@@ -0,0 +1,87 @@
+{ lib, stdenv, fetchurl
+# TODO: links -lsigsegv but loses the reference for some reason
+, withSigsegv ? (false && stdenv.hostPlatform.system != "x86_64-cygwin"), libsigsegv
+, interactive ? false, readline
+, autoreconfHook # no-pma fix
+
+/* Test suite broke on:
+       stdenv.isCygwin # XXX: `test-dup2' segfaults on Cygwin 6.1
+    || stdenv.isDarwin # XXX: `locale' segfaults
+    || stdenv.isSunOS  # XXX: `_backsmalls1' fails, locale stuff?
+    || stdenv.isFreeBSD
+*/
+, doCheck ? (interactive && stdenv.isLinux), glibcLocales ? null
+, locale ? null
+}:
+
+assert (doCheck && stdenv.isLinux) -> glibcLocales != null;
+
+stdenv.mkDerivation rec {
+  pname = "gawk" + lib.optionalString interactive "-interactive";
+  version = "5.2.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/gawk/gawk-${version}.tar.xz";
+    hash = "sha256-PB/OFEa0y+4c0nO9fsZLyH2J9hU3RxzT4F4zqWWiUOk=";
+  };
+
+  # PIE is incompatible with the "persistent malloc" ("pma") feature.
+  # While build system attempts to pass -no-pie to gcc. nixpkgs' `ld`
+  # wrapped still passes `-pie` flag to linker and breaks linkage.
+  # Let's disable "pie" until `ld` is fixed to do the right thing.
+  hardeningDisable = [ "pie" ];
+
+  # When we do build separate interactive version, it makes sense to always include man.
+  outputs = [ "out" "info" ]
+    ++ lib.optional (!interactive) "man";
+
+  # no-pma fix
+  nativeBuildInputs = [ autoreconfHook ]
+    ++ lib.optional (doCheck && stdenv.isLinux) glibcLocales;
+
+  buildInputs = lib.optional withSigsegv libsigsegv
+    ++ lib.optional interactive readline
+    ++ lib.optional stdenv.isDarwin locale;
+
+  configureFlags = [
+    (if withSigsegv then "--with-libsigsegv-prefix=${libsigsegv}" else "--without-libsigsegv")
+    (if interactive then "--with-readline=${readline.dev}" else "--without-readline")
+  ];
+
+  makeFlags = [
+    "AR=${stdenv.cc.targetPrefix}ar"
+  ];
+
+  inherit doCheck;
+
+  postInstall = ''
+    rm "$out"/bin/gawk-*
+    ln -s gawk.1 "''${!outputMan}"/share/man/man1/awk.1
+  '';
+
+  passthru = {
+    libsigsegv = if withSigsegv then libsigsegv else null; # for stdenv bootstrap
+  };
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/gawk/";
+    description = "GNU implementation of the Awk programming language";
+    longDescription = ''
+      Many computer users need to manipulate text files: extract and then
+      operate on data from parts of certain lines while discarding the rest,
+      make changes in various text files wherever certain patterns appear,
+      and so on.  To write a program to do these things in a language such as
+      C or Pascal is a time-consuming inconvenience that may take many lines
+      of code.  The job is easy with awk, especially the GNU implementation:
+      Gawk.
+
+      The awk utility interprets a special-purpose programming language that
+      makes it possible to handle many data-reformatting jobs with just a few
+      lines of code.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix ++ platforms.windows;
+    maintainers = [ ];
+    mainProgram = "gawk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gawk/fix-typos-corrected-in-libharu-2.4.4.patch b/nixpkgs/pkgs/tools/text/gawk/fix-typos-corrected-in-libharu-2.4.4.patch
new file mode 100644
index 000000000000..6b4a416a718c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gawk/fix-typos-corrected-in-libharu-2.4.4.patch
@@ -0,0 +1,62 @@
+diff --git a/haru/pdf.c b/haru/pdf.c
+index d16f573..3129427 100644
+--- a/haru/pdf.c
++++ b/haru/pdf.c
+@@ -105,7 +105,7 @@ static awk_scalar_t HPDF_CS_PATTERN_node;
+ /*  LineCap */
+ static awk_scalar_t HPDF_BUTT_END_node;
+ static awk_scalar_t HPDF_ROUND_END_node;
+-static awk_scalar_t HPDF_PROJECTING_SCUARE_END_node;
++static awk_scalar_t HPDF_PROJECTING_SQUARE_END_node;
+ 
+ /*  _LineJoin */
+ static awk_scalar_t HPDF_MITER_JOIN_node;
+@@ -248,7 +248,7 @@ static awk_scalar_t HPDF_ENCODER_UNKNOWN_node;
+ /* ByteType */
+ static awk_scalar_t HPDF_BYTE_TYPE_SINGLE_node;
+ static awk_scalar_t HPDF_BYTE_TYPE_LEAD_node;
+-static awk_scalar_t HPDF_BYTE_TYPE_TRIAL_node;
++static awk_scalar_t HPDF_BYTE_TYPE_TRAIL_node;
+ static awk_scalar_t HPDF_BYTE_TYPE_UNKNOWN_node;
+ 
+ /* TextAlignment */
+@@ -308,7 +308,7 @@ static const struct varinit varinit[] = {
+ 	ENTRY(HPDF_CS_PATTERN, 1)
+ 	ENTRY(HPDF_BUTT_END, 1)
+ 	ENTRY(HPDF_ROUND_END, 1)
+-	ENTRY(HPDF_PROJECTING_SCUARE_END, 1)
++	ENTRY(HPDF_PROJECTING_SQUARE_END, 1)
+ 	ENTRY(HPDF_MITER_JOIN, 1)
+ 	ENTRY(HPDF_ROUND_JOIN, 1)
+ 	ENTRY(HPDF_BEVEL_JOIN, 1)
+@@ -417,7 +417,7 @@ static const struct varinit varinit[] = {
+ 	ENTRY(HPDF_ENCODER_UNKNOWN, 1)
+ 	ENTRY(HPDF_BYTE_TYPE_SINGLE, 1)
+ 	ENTRY(HPDF_BYTE_TYPE_LEAD, 1)
+-	ENTRY(HPDF_BYTE_TYPE_TRIAL, 1)
++	ENTRY(HPDF_BYTE_TYPE_TRAIL, 1)
+ 	ENTRY(HPDF_BYTE_TYPE_UNKNOWN, 1)
+ 	ENTRY(HPDF_TALIGN_LEFT, 1)
+ 	ENTRY(HPDF_TALIGN_RIGHT, 1)
+diff --git a/haru/pdf.h b/haru/pdf.h
+index a4ef39a..07cf168 100644
+--- a/haru/pdf.h
++++ b/haru/pdf.h
+@@ -86,7 +86,7 @@
+ 
+ #define DEFAULT_HPDF_BUTT_END HPDF_BUTT_END
+ #define DEFAULT_HPDF_ROUND_END HPDF_ROUND_END
+-#define DEFAULT_HPDF_PROJECTING_SCUARE_END HPDF_PROJECTING_SCUARE_END
++#define DEFAULT_HPDF_PROJECTING_SQUARE_END HPDF_PROJECTING_SQUARE_END
+ 
+ /*  _LineJoin */
+ #define DEFAULT_HPDF_MITER_JOIN HPDF_MITER_JOIN
+@@ -229,7 +229,7 @@
+ /* ByteType */
+ #define DEFAULT_HPDF_BYTE_TYPE_SINGLE HPDF_BYTE_TYPE_SINGLE
+ #define DEFAULT_HPDF_BYTE_TYPE_LEAD HPDF_BYTE_TYPE_LEAD
+-#define DEFAULT_HPDF_BYTE_TYPE_TRIAL HPDF_BYTE_TYPE_TRIAL 
++#define DEFAULT_HPDF_BYTE_TYPE_TRAIL HPDF_BYTE_TYPE_TRAIL
+ #define DEFAULT_HPDF_BYTE_TYPE_UNKNOWN HPDF_BYTE_TYPE_UNKNOWN 
+ 
+ /* TextAlignment */
diff --git a/nixpkgs/pkgs/tools/text/gawk/gawk-with-extensions.nix b/nixpkgs/pkgs/tools/text/gawk/gawk-with-extensions.nix
new file mode 100644
index 000000000000..1b82d798d330
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gawk/gawk-with-extensions.nix
@@ -0,0 +1,13 @@
+{ runCommand, gawk, extensions, makeWrapper }:
+
+runCommand "gawk-with-extensions" {
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ gawk ] ++ extensions;
+} ''
+  mkdir -p $out/bin
+  for i in ${gawk}/bin/*; do
+    name="$(basename "$i")"
+    makeWrapper $i $out/bin/$name \
+      --prefix AWKLIBPATH : "${gawk}/lib/gawk:''${AWKLIBPATH:-}"
+  done
+''
diff --git a/nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix b/nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix
new file mode 100644
index 000000000000..be50b93a7e2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix
@@ -0,0 +1,156 @@
+{ lib, stdenv, recurseIntoAttrs, fetchgit, pkg-config, autoreconfHook
+, autoconf, automake, libiconv, libtool, texinfo, gettext, gawk, rapidjson, gd
+, libharu, lmdb, gmp, glibcLocales, mpfr, more, postgresql, hiredis
+, expat, tre }:
+
+let
+  buildExtension = lib.makeOverridable
+    ({ name, gawkextlib, extraBuildInputs ? [ ], doCheck ? true, patches ? [ ] }:
+      let is_extension = gawkextlib != null;
+      in stdenv.mkDerivation rec {
+        pname = "gawkextlib-${name}";
+        version = "unstable-2022-10-20";
+
+        src = fetchgit {
+          url = "git://git.code.sf.net/p/gawkextlib/code";
+          rev = "f6c75b4ac1e0cd8d70c2f6c7a8d58b4d94cfde97";
+          sha256 = "sha256-0p3CrQ3TBl7UcveZytK/9rkAzn69RRM2GwY2eCeqlkg=";
+        };
+
+        inherit patches;
+
+        postPatch = ''
+          cd ${name}
+        '';
+
+        nativeBuildInputs = [
+          autoconf
+          automake
+          libtool
+          autoreconfHook
+          pkg-config
+          texinfo
+          gettext
+        ];
+
+        buildInputs = [ gawk ] ++ extraBuildInputs;
+        propagatedBuildInputs = lib.optional is_extension gawkextlib;
+
+        setupHook = if is_extension then ./setup-hook.sh else null;
+        inherit gawk;
+
+        inherit doCheck;
+        nativeCheckInputs = [ more ];
+
+        meta = with lib; {
+          homepage = "https://sourceforge.net/projects/gawkextlib/";
+          description = "Dynamically loaded extension libraries for GNU AWK";
+          longDescription = ''
+            The gawkextlib project provides several extension libraries for
+            gawk (GNU AWK), as well as libgawkextlib containing some APIs that
+            are useful for building gawk extension libraries. These libraries
+            enable gawk to process XML data, interact with a PostgreSQL
+            database, use the GD graphics library, and perform unlimited
+            precision MPFR calculations.
+          '';
+          license = licenses.gpl3Plus;
+          platforms = platforms.unix;
+          maintainers = with maintainers; [ tomberek ];
+        };
+      });
+  gawkextlib = buildExtension {
+    gawkextlib = null;
+    name = "lib";
+  };
+  libs = {
+    abort = buildExtension {
+      inherit gawkextlib;
+      name = "abort";
+    };
+    aregex = buildExtension {
+      inherit gawkextlib;
+      name = "aregex";
+      extraBuildInputs = [ tre ];
+    };
+    csv = buildExtension {
+      inherit gawkextlib;
+      name = "csv";
+    };
+    errno = buildExtension {
+      inherit gawkextlib;
+      name = "errno";
+    };
+    gd = buildExtension {
+      inherit gawkextlib;
+      name = "gd";
+      extraBuildInputs = [ gd ];
+    };
+    haru = buildExtension {
+      inherit gawkextlib;
+      name = "haru";
+      extraBuildInputs = [ libharu ];
+      patches = [
+        # Renames references to two identifiers with typos that libharu fixed in 2.4.4
+        # https://github.com/libharu/libharu/commit/88271b73c68c521a49a15e3555ef00395aa40810
+        ./fix-typos-corrected-in-libharu-2.4.4.patch
+      ];
+    };
+    json = buildExtension {
+      inherit gawkextlib;
+      name = "json";
+      extraBuildInputs = [ rapidjson ];
+    };
+    lmdb = buildExtension {
+      inherit gawkextlib;
+      name = "lmdb";
+      extraBuildInputs = [ lmdb ];
+      #  mdb_env_open(env, /dev/null)
+      #! No such device
+      #  mdb_env_open(env, /dev/null)
+      #! Operation not supported by device
+      doCheck = !stdenv.isDarwin;
+    };
+    mbs = buildExtension {
+      inherit gawkextlib;
+      name = "mbs";
+      extraBuildInputs = [ glibcLocales ];
+      #! "spät": length: 5, mbs_length: 6, wcswidth: 4
+      doCheck = !stdenv.isDarwin;
+    };
+    mpfr = buildExtension {
+      inherit gawkextlib;
+      name = "mpfr";
+      extraBuildInputs = [ gmp mpfr ];
+    };
+    nl_langinfo = buildExtension {
+      inherit gawkextlib;
+      name = "nl_langinfo";
+    };
+    pgsql = buildExtension {
+      inherit gawkextlib;
+      name = "pgsql";
+      extraBuildInputs = [ postgresql ];
+    };
+    redis = buildExtension {
+      inherit gawkextlib;
+      name = "redis";
+      extraBuildInputs = [ hiredis ];
+    };
+    select = buildExtension {
+      inherit gawkextlib;
+      name = "select";
+    };
+    timex = buildExtension {
+      inherit gawkextlib;
+      name = "timex";
+    };
+    xml = buildExtension {
+      inherit gawkextlib;
+      name = "xml";
+      extraBuildInputs = [ expat libiconv ];
+    };
+  };
+in recurseIntoAttrs (libs // {
+  inherit gawkextlib buildExtension;
+  full = builtins.attrValues libs;
+})
diff --git a/nixpkgs/pkgs/tools/text/gawk/setup-hook.sh b/nixpkgs/pkgs/tools/text/gawk/setup-hook.sh
new file mode 100644
index 000000000000..d568cb8c7dd9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gawk/setup-hook.sh
@@ -0,0 +1,6 @@
+local oldOpts="-u"
+shopt -qo nounset || oldOpts="+u"
+set +u
+. @gawk@/etc/profile.d/gawk.sh
+gawklibpath_append @out@/lib/gawk
+set "$oldOpts"
diff --git a/nixpkgs/pkgs/tools/text/gist/default.nix b/nixpkgs/pkgs/tools/text/gist/default.nix
new file mode 100644
index 000000000000..d2676b379970
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gist/default.nix
@@ -0,0 +1,17 @@
+{ buildRubyGem, lib, ruby }:
+
+buildRubyGem rec {
+  inherit ruby;
+  name = "${gemName}-${version}";
+  gemName = "gist";
+  version = "6.0.0";
+  source.sha256 = "0qnd1jqd7b04871v4l73grcmi7c0pivm8nsfrqvwivm4n4b3c2hd";
+
+  meta = with lib; {
+    description = "Upload code to https://gist.github.com (or github enterprise)";
+    homepage = "http://defunkt.io/gist/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = ruby.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gjo/default.nix b/nixpkgs/pkgs/tools/text/gjo/default.nix
new file mode 100644
index 000000000000..99d988797bfc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gjo/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gjo";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "skanehira";
+    repo = "gjo";
+    rev = version;
+    hash = "sha256-vEk5MZqwAMgqMLjwRJwnbx8nVyF3U2iUz0S3L0GmCh4=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Small utility to create JSON objects";
+    homepage = "https://github.com/skanehira/gjo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/glogg/default.nix b/nixpkgs/pkgs/tools/text/glogg/default.nix
new file mode 100644
index 000000000000..855490df4ab4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/glogg/default.nix
@@ -0,0 +1,40 @@
+{ mkDerivation, lib, stdenv, fetchFromGitHub, qmake, boost }:
+
+mkDerivation rec {
+  pname = "glogg";
+  version = "1.1.4";
+
+  src = fetchFromGitHub {
+    owner = "nickbnf";
+    repo = "glogg";
+    rev = "v${version}";
+    sha256 = "0hf1c2m8n88frmxmyn0ndr8129p7iky49nq565sw1asaydm5z6pb";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace glogg.pro \
+      --replace "boost_program_options-mt" "boost_program_options"
+  '';
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [ boost ];
+
+  qmakeFlags = [ "VERSION=${version}" ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    mv $out/bin/glogg.app $out/Applications/glogg.app
+    rm -fr $out/{bin,share}
+  '';
+
+  meta = with lib; {
+    description = "The fast, smart log explorer";
+    longDescription = ''
+      A multi-platform GUI application to browse and search through long or complex log files. It is designed with programmers and system administrators in mind. glogg can be seen as a graphical, interactive combination of grep and less.
+    '';
+    homepage = "https://glogg.bonnefon.org/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ c0bw3b ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gnugrep/default.nix b/nixpkgs/pkgs/tools/text/gnugrep/default.nix
new file mode 100644
index 000000000000..7559ef890ad2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnugrep/default.nix
@@ -0,0 +1,79 @@
+{ lib, stdenv, glibcLocales, fetchurl, pcre2, libiconv, perl }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+let version = "3.11"; in
+
+stdenv.mkDerivation {
+  pname = "gnugrep";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://gnu/grep/grep-${version}.tar.xz";
+    hash = "sha256-HbKu3eidDepCsW2VKPiUyNFdrk4ZC1muzHj1qVEnbqs=";
+  };
+
+  # Some gnulib tests fail
+  # - on Musl: https://github.com/NixOS/nixpkgs/pull/228714
+  # - on x86_64-darwin: https://github.com/NixOS/nixpkgs/pull/228714#issuecomment-1576826330
+  postPatch = if stdenv.hostPlatform.isMusl || (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) then ''
+    sed -i 's:gnulib-tests::g' Makefile.in
+  '' else null;
+
+  nativeCheckInputs = [ perl glibcLocales ];
+  outputs = [ "out" "info" ]; # the man pages are rather small
+
+  buildInputs = [ pcre2 libiconv ];
+
+  # cygwin: FAIL: multibyte-white-space
+  # freebsd: FAIL mb-non-UTF8-performance
+  # x86_64-darwin: fails 'stack-overflow' tests on Rosetta 2 emulator
+  doCheck = !stdenv.isCygwin && !stdenv.isFreeBSD && !(stdenv.isDarwin && stdenv.hostPlatform.isx86_64);
+
+  # On macOS, force use of mkdir -p, since Grep's fallback
+  # (./install-sh) is broken.
+  preConfigure = ''
+    export MKDIR_P="mkdir -p"
+  '';
+
+  enableParallelBuilding = true;
+
+  # Fix reference to sh in bootstrap-tools, and invoke grep via
+  # absolute path rather than looking at argv[0].
+  postInstall =
+    ''
+      rm $out/bin/egrep $out/bin/fgrep
+      echo "#! /bin/sh" > $out/bin/egrep
+      echo "exec $out/bin/grep -E \"\$@\"" >> $out/bin/egrep
+      echo "#! /bin/sh" > $out/bin/fgrep
+      echo "exec $out/bin/grep -F \"\$@\"" >> $out/bin/fgrep
+      chmod +x $out/bin/egrep $out/bin/fgrep
+    '';
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/grep/";
+    description = "GNU implementation of the Unix grep command";
+
+    longDescription = ''
+      The grep command searches one or more input files for lines
+      containing a match to a specified pattern.  By default, grep
+      prints the matching lines.
+    '';
+
+    license = licenses.gpl3Plus;
+
+    maintainers = [
+      maintainers.das_j
+      maintainers.m00wl
+    ];
+    platforms = platforms.all;
+    mainProgram = "grep";
+  };
+
+  passthru = {
+    inherit pcre2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/Allow_input_files_to_be_missing_for_ed-style_patches.patch b/nixpkgs/pkgs/tools/text/gnupatch/Allow_input_files_to_be_missing_for_ed-style_patches.patch
new file mode 100644
index 000000000000..98c9aa877a72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/Allow_input_files_to_be_missing_for_ed-style_patches.patch
@@ -0,0 +1,33 @@
+From b5a91a01e5d0897facdd0f49d64b76b0f02b43e1 Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Fri, 6 Apr 2018 11:34:51 +0200
+Subject: Allow input files to be missing for ed-style patches
+
+* src/pch.c (do_ed_script): Allow input files to be missing so that new
+files will be created as with non-ed-style patches.
+---
+ src/pch.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/src/pch.c b/src/pch.c
+index bc6278c..0c5cc26 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -2394,9 +2394,11 @@ do_ed_script (char const *inname, char const *outname,
+ 
+     if (! dry_run && ! skip_rest_of_patch) {
+ 	int exclusive = *outname_needs_removal ? 0 : O_EXCL;
+-	assert (! inerrno);
+-	*outname_needs_removal = true;
+-	copy_file (inname, outname, 0, exclusive, instat.st_mode, true);
++	if (inerrno != ENOENT)
++	  {
++	    *outname_needs_removal = true;
++	    copy_file (inname, outname, 0, exclusive, instat.st_mode, true);
++	  }
+ 	sprintf (buf, "%s %s%s", editor_program,
+ 		 verbosity == VERBOSE ? "" : "- ",
+ 		 outname);
+-- 
+cgit v1.0-41-gc330
+
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-1000156.patch b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-1000156.patch
new file mode 100644
index 000000000000..36f33dea2b90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-1000156.patch
@@ -0,0 +1,211 @@
+From 123eaff0d5d1aebe128295959435b9ca5909c26d Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Fri, 6 Apr 2018 12:14:49 +0200
+Subject: Fix arbitrary command execution in ed-style patches
+ (CVE-2018-1000156)
+
+* src/pch.c (do_ed_script): Write ed script to a temporary file instead
+of piping it to ed: this will cause ed to abort on invalid commands
+instead of rejecting them and carrying on.
+* tests/ed-style: New test case.
+* tests/Makefile.am (TESTS): Add test case.
+---
+ src/pch.c         | 91 ++++++++++++++++++++++++++++++++++++++++---------------
+ tests/Makefile.am |  1 +
+ tests/ed-style    | 41 +++++++++++++++++++++++++
+ 3 files changed, 108 insertions(+), 25 deletions(-)
+ create mode 100644 tests/ed-style
+
+diff --git a/src/pch.c b/src/pch.c
+index 0c5cc26..4fd5a05 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -33,6 +33,7 @@
+ # include <io.h>
+ #endif
+ #include <safe.h>
++#include <sys/wait.h>
+ 
+ #define INITHUNKMAX 125			/* initial dynamic allocation size */
+ 
+@@ -2389,24 +2390,28 @@ do_ed_script (char const *inname, char const *outname,
+     static char const editor_program[] = EDITOR_PROGRAM;
+ 
+     file_offset beginning_of_this_line;
+-    FILE *pipefp = 0;
+     size_t chars_read;
++    FILE *tmpfp = 0;
++    char const *tmpname;
++    int tmpfd;
++    pid_t pid;
++
++    if (! dry_run && ! skip_rest_of_patch)
++      {
++	/* Write ed script to a temporary file.  This causes ed to abort on
++	   invalid commands such as when line numbers or ranges exceed the
++	   number of available lines.  When ed reads from a pipe, it rejects
++	   invalid commands and treats the next line as a new command, which
++	   can lead to arbitrary command execution.  */
++
++	tmpfd = make_tempfile (&tmpname, 'e', NULL, O_RDWR | O_BINARY, 0);
++	if (tmpfd == -1)
++	  pfatal ("Can't create temporary file %s", quotearg (tmpname));
++	tmpfp = fdopen (tmpfd, "w+b");
++	if (! tmpfp)
++	  pfatal ("Can't open stream for file %s", quotearg (tmpname));
++      }
+ 
+-    if (! dry_run && ! skip_rest_of_patch) {
+-	int exclusive = *outname_needs_removal ? 0 : O_EXCL;
+-	if (inerrno != ENOENT)
+-	  {
+-	    *outname_needs_removal = true;
+-	    copy_file (inname, outname, 0, exclusive, instat.st_mode, true);
+-	  }
+-	sprintf (buf, "%s %s%s", editor_program,
+-		 verbosity == VERBOSE ? "" : "- ",
+-		 outname);
+-	fflush (stdout);
+-	pipefp = popen(buf, binary_transput ? "wb" : "w");
+-	if (!pipefp)
+-	  pfatal ("Can't open pipe to %s", quotearg (buf));
+-    }
+     for (;;) {
+ 	char ed_command_letter;
+ 	beginning_of_this_line = file_tell (pfp);
+@@ -2417,14 +2422,14 @@ do_ed_script (char const *inname, char const *outname,
+ 	}
+ 	ed_command_letter = get_ed_command_letter (buf);
+ 	if (ed_command_letter) {
+-	    if (pipefp)
+-		if (! fwrite (buf, sizeof *buf, chars_read, pipefp))
++	    if (tmpfp)
++		if (! fwrite (buf, sizeof *buf, chars_read, tmpfp))
+ 		    write_fatal ();
+ 	    if (ed_command_letter != 'd' && ed_command_letter != 's') {
+ 	        p_pass_comments_through = true;
+ 		while ((chars_read = get_line ()) != 0) {
+-		    if (pipefp)
+-			if (! fwrite (buf, sizeof *buf, chars_read, pipefp))
++		    if (tmpfp)
++			if (! fwrite (buf, sizeof *buf, chars_read, tmpfp))
+ 			    write_fatal ();
+ 		    if (chars_read == 2  &&  strEQ (buf, ".\n"))
+ 			break;
+@@ -2437,13 +2442,49 @@ do_ed_script (char const *inname, char const *outname,
+ 	    break;
+ 	}
+     }
+-    if (!pipefp)
++    if (!tmpfp)
+       return;
+-    if (fwrite ("w\nq\n", sizeof (char), (size_t) 4, pipefp) == 0
+-	|| fflush (pipefp) != 0)
++    if (fwrite ("w\nq\n", sizeof (char), (size_t) 4, tmpfp) == 0
++	|| fflush (tmpfp) != 0)
+       write_fatal ();
+-    if (pclose (pipefp) != 0)
+-      fatal ("%s FAILED", editor_program);
++
++    if (lseek (tmpfd, 0, SEEK_SET) == -1)
++      pfatal ("Can't rewind to the beginning of file %s", quotearg (tmpname));
++
++    if (! dry_run && ! skip_rest_of_patch) {
++	int exclusive = *outname_needs_removal ? 0 : O_EXCL;
++	*outname_needs_removal = true;
++	if (inerrno != ENOENT)
++	  {
++	    *outname_needs_removal = true;
++	    copy_file (inname, outname, 0, exclusive, instat.st_mode, true);
++	  }
++	sprintf (buf, "%s %s%s", editor_program,
++		 verbosity == VERBOSE ? "" : "- ",
++		 outname);
++	fflush (stdout);
++
++	pid = fork();
++	if (pid == -1)
++	  pfatal ("Can't fork");
++	else if (pid == 0)
++	  {
++	    dup2 (tmpfd, 0);
++	    execl ("/bin/sh", "sh", "-c", buf, (char *) 0);
++	    _exit (2);
++	  }
++	else
++	  {
++	    int wstatus;
++	    if (waitpid (pid, &wstatus, 0) == -1
++	        || ! WIFEXITED (wstatus)
++		|| WEXITSTATUS (wstatus) != 0)
++	      fatal ("%s FAILED", editor_program);
++	  }
++    }
++
++    fclose (tmpfp);
++    safe_unlink (tmpname);
+ 
+     if (ofp)
+       {
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 6b6df63..16f8693 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -32,6 +32,7 @@ TESTS = \
+ 	crlf-handling \
+ 	dash-o-append \
+ 	deep-directories \
++	ed-style \
+ 	empty-files \
+ 	false-match \
+ 	fifo \
+diff --git a/tests/ed-style b/tests/ed-style
+new file mode 100644
+index 0000000..d8c0689
+--- /dev/null
++++ b/tests/ed-style
+@@ -0,0 +1,41 @@
++# Copyright (C) 2018 Free Software Foundation, Inc.
++#
++# Copying and distribution of this file, with or without modification,
++# in any medium, are permitted without royalty provided the copyright
++# notice and this notice are preserved.
++
++. $srcdir/test-lib.sh
++
++require cat
++use_local_patch
++use_tmpdir
++
++# ==============================================================
++
++cat > ed1.diff <<EOF
++0a
++foo
++.
++EOF
++
++check 'patch -e foo -i ed1.diff' <<EOF
++EOF
++
++check 'cat foo' <<EOF
++foo
++EOF
++
++cat > ed2.diff <<EOF
++1337a
++r !echo bar
++,p
++EOF
++
++check 'patch -e foo -i ed2.diff 2> /dev/null || echo "Status: $?"' <<EOF
++?
++Status: 2
++EOF
++
++check 'cat foo' <<EOF
++foo
++EOF
+-- 
+cgit v1.0-41-gc330
+
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6951.patch b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6951.patch
new file mode 100644
index 000000000000..22d5f061c332
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6951.patch
@@ -0,0 +1,28 @@
+From f290f48a621867084884bfff87f8093c15195e6a Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Mon, 12 Feb 2018 16:48:24 +0100
+Subject: Fix segfault with mangled rename patch
+
+http://savannah.gnu.org/bugs/?53132
+* src/pch.c (intuit_diff_type): Ensure that two filenames are specified
+for renames and copies (fix the existing check).
+---
+ src/pch.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/pch.c b/src/pch.c
+index ff9ed2c..bc6278c 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -974,7 +974,8 @@ intuit_diff_type (bool need_header, mode_t *p_file_type)
+     if ((pch_rename () || pch_copy ())
+ 	&& ! inname
+ 	&& ! ((i == OLD || i == NEW) &&
+-	      p_name[! reverse] &&
++	      p_name[reverse] && p_name[! reverse] &&
++	      name_is_valid (p_name[reverse]) &&
+ 	      name_is_valid (p_name[! reverse])))
+       {
+ 	say ("Cannot %s file without two valid file names\n", pch_rename () ? "rename" : "copy");
+-- 
+cgit v1.0-41-gc330
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6952.patch b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6952.patch
new file mode 100644
index 000000000000..2da323c69844
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6952.patch
@@ -0,0 +1,28 @@
+From 9c986353e420ead6e706262bf204d6e03322c300 Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Fri, 17 Aug 2018 13:35:40 +0200
+Subject: Fix swapping fake lines in pch_swap
+
+* src/pch.c (pch_swap): Fix swapping p_bfake and p_efake when there is a
+blank line in the middle of a context-diff hunk: that empty line stays
+in the middle of the hunk and isn't swapped.
+
+Fixes: https://savannah.gnu.org/bugs/index.php?53133
+---
+ src/pch.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/pch.c b/src/pch.c
+index e92bc64..a500ad9 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -2122,7 +2122,7 @@ pch_swap (void)
+     }
+     if (p_efake >= 0) {			/* fix non-freeable ptr range */
+ 	if (p_efake <= i)
+-	    n = p_end - i + 1;
++	    n = p_end - p_ptrn_lines;
+ 	else
+ 	    n = -i;
+ 	p_efake += n;
+-- 
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13636.patch b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13636.patch
new file mode 100644
index 000000000000..e62c3d41753c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13636.patch
@@ -0,0 +1,108 @@
+From dce4683cbbe107a95f1f0d45fabc304acfb5d71a Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Mon, 15 Jul 2019 16:21:48 +0200
+Subject: Don't follow symlinks unless --follow-symlinks is given
+
+* src/inp.c (plan_a, plan_b), src/util.c (copy_to_fd, copy_file,
+append_to_file): Unless the --follow-symlinks option is given, open files with
+the O_NOFOLLOW flag to avoid following symlinks.  So far, we were only doing
+that consistently for input files.
+* src/util.c (create_backup): When creating empty backup files, (re)create them
+with O_CREAT | O_EXCL to avoid following symlinks in that case as well.
+---
+ src/inp.c  | 12 ++++++++++--
+ src/util.c | 14 +++++++++++---
+ 2 files changed, 21 insertions(+), 5 deletions(-)
+
+diff --git a/src/inp.c b/src/inp.c
+index 32d0919..22d7473 100644
+--- a/src/inp.c
++++ b/src/inp.c
+@@ -238,8 +238,13 @@ plan_a (char const *filename)
+     {
+       if (S_ISREG (instat.st_mode))
+         {
+-	  int ifd = safe_open (filename, O_RDONLY|binary_transput, 0);
++	  int flags = O_RDONLY | binary_transput;
+ 	  size_t buffered = 0, n;
++	  int ifd;
++
++	  if (! follow_symlinks)
++	    flags |= O_NOFOLLOW;
++	  ifd = safe_open (filename, flags, 0);
+ 	  if (ifd < 0)
+ 	    pfatal ("can't open file %s", quotearg (filename));
+ 
+@@ -340,6 +345,7 @@ plan_a (char const *filename)
+ static void
+ plan_b (char const *filename)
+ {
++  int flags = O_RDONLY | binary_transput;
+   int ifd;
+   FILE *ifp;
+   int c;
+@@ -353,7 +359,9 @@ plan_b (char const *filename)
+ 
+   if (instat.st_size == 0)
+     filename = NULL_DEVICE;
+-  if ((ifd = safe_open (filename, O_RDONLY | binary_transput, 0)) < 0
++  if (! follow_symlinks)
++    flags |= O_NOFOLLOW;
++  if ((ifd = safe_open (filename, flags, 0)) < 0
+       || ! (ifp = fdopen (ifd, binary_transput ? "rb" : "r")))
+     pfatal ("Can't open file %s", quotearg (filename));
+   if (TMPINNAME_needs_removal)
+diff --git a/src/util.c b/src/util.c
+index 1cc08ba..fb38307 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -388,7 +388,7 @@ create_backup (char const *to, const struct stat *to_st, bool leave_original)
+ 
+ 	  try_makedirs_errno = ENOENT;
+ 	  safe_unlink (bakname);
+-	  while ((fd = safe_open (bakname, O_CREAT | O_WRONLY | O_TRUNC, 0666)) < 0)
++	  while ((fd = safe_open (bakname, O_CREAT | O_EXCL | O_WRONLY | O_TRUNC, 0666)) < 0)
+ 	    {
+ 	      if (errno != try_makedirs_errno)
+ 		pfatal ("Can't create file %s", quotearg (bakname));
+@@ -579,10 +579,13 @@ create_file (char const *file, int open_flags, mode_t mode,
+ static void
+ copy_to_fd (const char *from, int tofd)
+ {
++  int from_flags = O_RDONLY | O_BINARY;
+   int fromfd;
+   ssize_t i;
+ 
+-  if ((fromfd = safe_open (from, O_RDONLY | O_BINARY, 0)) < 0)
++  if (! follow_symlinks)
++    from_flags |= O_NOFOLLOW;
++  if ((fromfd = safe_open (from, from_flags, 0)) < 0)
+     pfatal ("Can't reopen file %s", quotearg (from));
+   while ((i = read (fromfd, buf, bufsize)) != 0)
+     {
+@@ -625,6 +628,8 @@ copy_file (char const *from, char const *to, struct stat *tost,
+   else
+     {
+       assert (S_ISREG (mode));
++      if (! follow_symlinks)
++	to_flags |= O_NOFOLLOW;
+       tofd = create_file (to, O_WRONLY | O_BINARY | to_flags, mode,
+ 			  to_dir_known_to_exist);
+       copy_to_fd (from, tofd);
+@@ -640,9 +645,12 @@ copy_file (char const *from, char const *to, struct stat *tost,
+ void
+ append_to_file (char const *from, char const *to)
+ {
++  int to_flags = O_WRONLY | O_APPEND | O_BINARY;
+   int tofd;
+ 
+-  if ((tofd = safe_open (to, O_WRONLY | O_BINARY | O_APPEND, 0)) < 0)
++  if (! follow_symlinks)
++    to_flags |= O_NOFOLLOW;
++  if ((tofd = safe_open (to, to_flags, 0)) < 0)
+     pfatal ("Can't reopen file %s", quotearg (to));
+   copy_to_fd (from, tofd);
+   if (close (tofd) != 0)
+-- 
+cgit v1.0-41-gc330
+
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13638-and-CVE-2018-20969.patch b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13638-and-CVE-2018-20969.patch
new file mode 100644
index 000000000000..38caff628aaf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13638-and-CVE-2018-20969.patch
@@ -0,0 +1,38 @@
+From 3fcd042d26d70856e826a42b5f93dc4854d80bf0 Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Fri, 6 Apr 2018 19:36:15 +0200
+Subject: Invoke ed directly instead of using the shell
+
+* src/pch.c (do_ed_script): Invoke ed directly instead of using a shell
+command to avoid quoting vulnerabilities.
+---
+ src/pch.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/pch.c b/src/pch.c
+index 4fd5a05..16e001a 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -2459,9 +2459,6 @@ do_ed_script (char const *inname, char const *outname,
+ 	    *outname_needs_removal = true;
+ 	    copy_file (inname, outname, 0, exclusive, instat.st_mode, true);
+ 	  }
+-	sprintf (buf, "%s %s%s", editor_program,
+-		 verbosity == VERBOSE ? "" : "- ",
+-		 outname);
+ 	fflush (stdout);
+ 
+ 	pid = fork();
+@@ -2470,7 +2467,8 @@ do_ed_script (char const *inname, char const *outname,
+ 	else if (pid == 0)
+ 	  {
+ 	    dup2 (tmpfd, 0);
+-	    execl ("/bin/sh", "sh", "-c", buf, (char *) 0);
++	    assert (outname[0] != '!' && outname[0] != '-');
++	    execlp (editor_program, editor_program, "-", outname, (char  *) NULL);
+ 	    _exit (2);
+ 	  }
+ 	else
+-- 
+cgit v1.0-41-gc330
+
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/default.nix b/nixpkgs/pkgs/tools/text/gnupatch/default.nix
new file mode 100644
index 000000000000..f4cb20202f0b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchurl
+, ed, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "patch";
+  version = "2.7.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/patch/patch-${version}.tar.xz";
+    sha256 = "1zfqy4rdcy279vwn2z1kbv19dcfw25d2aqy9nzvdkq5bjzd0nqdc";
+  };
+
+  patches = [
+    # https://git.savannah.gnu.org/cgit/patch.git/patch/?id=f290f48a621867084884bfff87f8093c15195e6a
+    ./CVE-2018-6951.patch
+
+    # https://git.savannah.gnu.org/cgit/patch.git/patch/?id=b5a91a01e5d0897facdd0f49d64b76b0f02b43e1
+    ./Allow_input_files_to_be_missing_for_ed-style_patches.patch
+
+    # https://git.savannah.gnu.org/cgit/patch.git/patch/?id=123eaff0d5d1aebe128295959435b9ca5909c26d
+    ./CVE-2018-1000156.patch
+
+    # https://git.savannah.gnu.org/cgit/patch.git/commit/?id=9c986353e420ead6e706262bf204d6e03322c300
+    ./CVE-2018-6952.patch
+
+    # https://git.savannah.gnu.org/cgit/patch.git/patch/?id=dce4683cbbe107a95f1f0d45fabc304acfb5d71a
+    ./CVE-2019-13636.patch
+
+    # https://git.savannah.gnu.org/cgit/patch.git/patch/?id=3fcd042d26d70856e826a42b5f93dc4854d80bf0
+    ./CVE-2019-13638-and-CVE-2018-20969.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  configureFlags = lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    "ac_cv_func_strnlen_working=yes"
+  ];
+
+  doCheck = stdenv.hostPlatform.libc != "musl"; # not cross;
+  nativeCheckInputs = [ed];
+
+  meta = {
+    description = "GNU Patch, a program to apply differences to files";
+
+    longDescription =
+      '' GNU Patch takes a patch file containing a difference listing
+         produced by the diff program and applies those differences to one or
+         more original files, producing patched versions.
+      '';
+
+    homepage = "https://savannah.gnu.org/projects/patch";
+
+    license = lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gnused/default.nix b/nixpkgs/pkgs/tools/text/gnused/default.nix
new file mode 100644
index 000000000000..f493e4f358d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnused/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "gnused";
+  version = "4.9";
+
+  src = fetchurl {
+    url = "mirror://gnu/sed/sed-${version}.tar.xz";
+    sha256 = "sha256-biJrcy4c1zlGStaGK9Ghq6QteYKSLaelNRljHSSXUYE=";
+  };
+
+  outputs = [ "out" "info" ];
+
+  nativeBuildInputs = [ perl ];
+  preConfigure = "patchShebangs ./build-aux/help2man";
+
+  # Prevents attempts of running 'help2man' on cross-built binaries.
+  PERL = if stdenv.hostPlatform == stdenv.buildPlatform then null else "missing";
+
+  meta = {
+    homepage = "https://www.gnu.org/software/sed/";
+    description = "GNU sed, a batch stream editor";
+
+    longDescription = ''
+      Sed (stream editor) isn't really a true text editor or text
+      processor.  Instead, it is used to filter text, i.e., it takes
+      text input and performs some operation (or set of operations) on
+      it and outputs the modified text.  Sed is typically used for
+      extracting part of a file using pattern matching or substituting
+      multiple occurrences of a string within a file.
+    '';
+
+    license = lib.licenses.gpl3Plus;
+
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ mic92 ];
+    mainProgram = "sed";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/goawk/default.nix b/nixpkgs/pkgs/tools/text/goawk/default.nix
new file mode 100644
index 000000000000..fc1a2bab79f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/goawk/default.nix
@@ -0,0 +1,43 @@
+{ buildGoModule, fetchFromGitHub, lib, stdenv, gawk }:
+
+buildGoModule rec {
+  pname = "goawk";
+  version = "1.25.0";
+
+  src = fetchFromGitHub {
+    owner = "benhoyt";
+    repo = "goawk";
+    rev = "v${version}";
+    hash = "sha256-vxDBtYrfSmYE2mCqhepeLr4u+zLfHxCrYSXGq05CEYQ=";
+  };
+
+  vendorHash = null;
+
+  nativeCheckInputs = [ gawk ];
+
+  postPatch = ''
+    substituteInPlace goawk_test.go \
+      --replace "TestCommandLine" "SkipCommandLine" \
+      --replace "TestDevStdout" "SkipDevStdout" \
+      --replace "TestFILENAME" "SkipFILENAME" \
+      --replace "TestWildcards" "SkipWildcards"
+
+    substituteInPlace interp/interp_test.go \
+      --replace "TestShellCommand" "SkipShellCommand"
+  '';
+
+  checkFlags = [
+    "-awk"
+    "${gawk}/bin/gawk"
+  ];
+
+  doCheck = (stdenv.system != "aarch64-darwin");
+
+  meta = with lib; {
+    description = "A POSIX-compliant AWK interpreter written in Go";
+    homepage = "https://benhoyt.com/writings/goawk/";
+    license = licenses.mit;
+    mainProgram = "goawk";
+    maintainers = with maintainers; [ abbe ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gpt2tc/0001-add-python-shebang.patch b/nixpkgs/pkgs/tools/text/gpt2tc/0001-add-python-shebang.patch
new file mode 100644
index 000000000000..b47b444009ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gpt2tc/0001-add-python-shebang.patch
@@ -0,0 +1,10 @@
+diff --git a/gpt2convert.py b/gpt2convert.py
+index 34ca909..6e6cac5 100644
+--- a/gpt2convert.py
++++ b/gpt2convert.py
+@@ -1,3 +1,5 @@
++#!/usr/bin/env python3
++
+ import sys
+ import tensorflow as tf
+ import numpy as np
diff --git a/nixpkgs/pkgs/tools/text/gpt2tc/default.nix b/nixpkgs/pkgs/tools/text/gpt2tc/default.nix
new file mode 100644
index 000000000000..ee78451aae8d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gpt2tc/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, autoPatchelfHook, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gpt2tc";
+  version = "2021-04-24";
+
+  src = fetchurl {
+    url = "https://web.archive.org/web/20220603034455/https://bellard.org/libnc/gpt2tc-2021-04-24.tar.gz";
+    hash = "sha256-6oTxnbBwjHAXVrWMjOQVwdODbqLRoinx00pi29ff5w0=";
+  };
+
+  patches = [
+    # Add a shebang to the python script so that nix detects it as such and
+    # wraps it properly. Otherwise, it runs in shell and freezes the system.
+    ./0001-add-python-shebang.patch
+  ];
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  buildInputs = [
+    (python3.withPackages (p: with p; [ numpy tensorflow ]))
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -m755 -t $out/lib libnc${stdenv.hostPlatform.extensions.sharedLibrary}
+    addAutoPatchelfSearchPath $out/lib
+    install -D -m755 -t $out/bin gpt2tc
+    install -T -m755 download_model.sh $out/bin/gpt2-download-model
+    install -T -m755 gpt2convert.py $out/bin/gpt2-convert
+    install -D -m644 -t $out/share/gpt2tc readme.txt gpt2vocab.txt Changelog
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Text completion and compression using GPT-2";
+    homepage = "https://bellard.org/libnc/gpt2tc.html";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ anna328p ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/grin/default.nix b/nixpkgs/pkgs/tools/text/grin/default.nix
new file mode 100644
index 000000000000..3e3763d9ef71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/grin/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, fetchpatch, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "grin";
+  version = "1.3.0";
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "matthew-brett";
+    repo = pname;
+    rev = "1.3.0";
+    hash = "sha256-exKUy7LaDtpq0rJLSuNYsIcynpB4QLtLIE6T/ncB7RQ=";
+  };
+
+  patches = [
+    # https://github.com/matthew-brett/grin/pull/4
+    (fetchpatch {
+      name = "replace-nose-with-nose3.patch";
+      url = "https://github.com/matthew-brett/grin/commit/ba473fa4f5da1b337ee80d7d31772a4e41ffa62d.patch";
+      hash = "sha256-CnWHynKSsXYjSsTLdPuwpcIndrCdq3cQYS8teg5EM0A=";
+    })
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    nose3
+  ];
+
+  meta = {
+    homepage = "https://github.com/matthew-brett/grin";
+    description = "A grep program configured the way I like it";
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.sjagoe ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/grip-search/default.nix b/nixpkgs/pkgs/tools/text/grip-search/default.nix
new file mode 100644
index 000000000000..dd272af06bf3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/grip-search/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, boost, pkg-config, cmake, catch2 }:
+
+stdenv.mkDerivation rec {
+  pname = "grip-search";
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    owner = "sc0ty";
+    repo = "grip";
+    rev = "v${version}";
+    sha256 = "0bkqarylgzhis6fpj48qbifcd6a26cgnq8784hgnm707rq9kb0rx";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake catch2 ];
+
+  doCheck = true;
+
+  buildInputs = [ boost ];
+
+  patches = [
+    # Can be removed after this upstream PR gets merged: https://github.com/sc0ty/grip/pull/6
+    (fetchpatch {
+      name = "include-cstdint.patch";
+      url = "https://github.com/sc0ty/grip/commit/da37b3c805306ee4ea617ce3f1487b8ee9876e50.patch";
+      hash = "sha256-Xh++oDn5qn5NPgng7gfeCkO5FN9OmW+8fGhDLpAJfR8=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace src/general/config.h --replace-fail "CUSTOM-BUILD" "${version}"
+  '';
+
+  meta = with lib; {
+    description = "Fast, indexed regexp search over large file trees";
+    homepage = "https://github.com/sc0ty/grip";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ tex ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/groff/default.nix b/nixpkgs/pkgs/tools/text/groff/default.nix
new file mode 100644
index 000000000000..df06292c4f3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/groff/default.nix
@@ -0,0 +1,136 @@
+{ lib, stdenv, fetchurl, fetchpatch, perl
+, enableGhostscript ? false
+, ghostscript, gawk, libX11, libXaw, libXt, libXmu # for postscript and html output
+, enableHtml ? false, psutils, netpbm # for html output
+, enableIconv ? false, iconv
+, enableLibuchardet ? false, libuchardet # for detecting input file encoding in preconv(1)
+, buildPackages
+, autoreconfHook
+, pkg-config
+, texinfo
+, bison
+, bash
+}:
+
+stdenv.mkDerivation rec {
+  pname = "groff";
+  version = "1.23.0";
+
+  src = fetchurl {
+    url = "mirror://gnu/groff/${pname}-${version}.tar.gz";
+    hash = "sha256-a5dX9ZK3UYtJAutq9+VFcL3Mujeocf3bLTCuOGNRHBM=";
+  };
+
+  outputs = [ "out" "man" "doc" "info" "perl" ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    # BASH_PROG gets replaced with a path to the build bash which doesn't get automatically patched by patchShebangs
+    substituteInPlace contrib/gdiffmk/gdiffmk.sh \
+      --replace "@BASH_PROG@" "/bin/sh"
+  '' + lib.optionalString enableHtml ''
+    substituteInPlace src/preproc/html/pre-html.cpp \
+      --replace "psselect" "${psutils}/bin/psselect" \
+      --replace "pnmcut" "${lib.getBin netpbm}/bin/pnmcut" \
+      --replace "pnmcrop" "${lib.getBin netpbm}/bin/pnmcrop" \
+      --replace "pnmtopng" "${lib.getBin netpbm}/bin/pnmtopng"
+    substituteInPlace tmac/www.tmac.in \
+      --replace "pnmcrop" "${lib.getBin netpbm}/bin/pnmcrop" \
+      --replace "pngtopnm" "${lib.getBin netpbm}/bin/pngtopnm" \
+      --replace "@PNMTOPS_NOSETPAGE@" "${lib.getBin netpbm}/bin/pnmtops -nosetpage"
+  '' + lib.optionalString (enableGhostscript || enableHtml) ''
+    substituteInPlace contrib/pdfmark/pdfroff.sh \
+      --replace '$GROFF_GHOSTSCRIPT_INTERPRETER' "${lib.getBin ghostscript}/bin/gs" \
+      --replace '$GROFF_AWK_INTERPRETER' "${lib.getBin gawk}/bin/gawk"
+  '';
+
+  strictDeps = true;
+  nativeBuildInputs = [ autoreconfHook pkg-config texinfo ]
+    # Required due to the patch that changes .ypp files.
+    ++ lib.optional (stdenv.cc.isClang && lib.versionAtLeast stdenv.cc.version "9") bison;
+  buildInputs = [ perl bash ]
+    ++ lib.optionals enableGhostscript [ ghostscript gawk libX11 libXaw libXt libXmu ]
+    ++ lib.optionals enableHtml [ psutils netpbm ]
+    ++ lib.optionals enableIconv [ iconv ]
+    ++ lib.optionals enableLibuchardet [ libuchardet ];
+
+  # Builds running without a chroot environment may detect the presence
+  # of /usr/X11 in the host system, leading to an impure build of the
+  # package. To avoid this issue, X11 support is explicitly disabled.
+  configureFlags = lib.optionals (!enableGhostscript) [
+    "--without-x"
+  ] ++ [
+    "ac_cv_path_PERL=${buildPackages.perl}/bin/perl"
+  ] ++ lib.optionals enableGhostscript [
+    "--with-gs=${lib.getBin ghostscript}/bin/gs"
+    "--with-awk=${lib.getBin gawk}/bin/gawk"
+    "--with-appresdir=${placeholder "out"}/lib/X11/app-defaults"
+  ] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+    "gl_cv_func_signbit=yes"
+  ];
+
+  makeFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+    # Trick to get the build system find the proper 'native' groff
+    # http://www.mail-archive.com/bug-groff@gnu.org/msg01335.html
+    "GROFF_BIN_PATH=${buildPackages.groff}/bin"
+    "GROFFBIN=${buildPackages.groff}/bin/groff"
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    for f in 'man.local' 'mdoc.local'; do
+        cat '${./site.tmac}' >>"$out/share/groff/site-tmac/$f"
+    done
+
+    moveToOutput bin/gropdf $perl
+    moveToOutput bin/pdfmom $perl
+    moveToOutput bin/roff2text $perl
+    moveToOutput bin/roff2pdf $perl
+    moveToOutput bin/roff2ps $perl
+    moveToOutput bin/roff2dvi $perl
+    moveToOutput bin/roff2ps $perl
+    moveToOutput bin/roff2html $perl
+    moveToOutput bin/glilypond $perl
+    moveToOutput bin/mmroff $perl
+    moveToOutput bin/roff2x $perl
+    moveToOutput bin/afmtodit $perl
+    moveToOutput bin/gperl $perl
+    moveToOutput bin/chem $perl
+
+    moveToOutput bin/gpinyin $perl
+    moveToOutput lib/groff/gpinyin $perl
+    substituteInPlace $perl/bin/gpinyin \
+      --replace $out/lib/groff/gpinyin $perl/lib/groff/gpinyin
+
+    moveToOutput bin/grog $perl
+    moveToOutput lib/groff/grog $perl
+    substituteInPlace $perl/bin/grog \
+      --replace $out/lib/groff/grog $perl/lib/groff/grog
+
+    find $perl/ -type f -print0 | xargs --null sed -i 's|${buildPackages.perl}|${perl}|'
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/groff/";
+    description = "GNU Troff, a typesetting package that reads plain text and produces formatted output";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+
+    longDescription = ''
+      groff is the GNU implementation of troff, a document formatting
+      system.  Included in this release are implementations of troff,
+      pic, eqn, tbl, grn, refer, -man, -mdoc, -mom, and -ms macros,
+      and drivers for PostScript, TeX dvi format, HP LaserJet 4
+      printers, Canon CAPSL printers, HTML and XHTML format (beta
+      status), and typewriter-like devices.  Also included is a
+      modified version of the Berkeley -me macros, the enhanced
+      version gxditview of the X11 xditview previewer, and an
+      implementation of the -mm macros.
+    '';
+
+    outputsToInstall = [ "out" "perl" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/groff/site.tmac b/nixpkgs/pkgs/tools/text/groff/site.tmac
new file mode 100644
index 000000000000..6f0f18dea6d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/groff/site.tmac
@@ -0,0 +1,26 @@
+.
+.if n \{\
+.  \" With groff 1.23.0 "[t]he 'utf8' output device now maps the input
+.  \" characters '^' (caret, circumflex accent, or 'hat') and '~' (tilde)
+.  \" to U+02C6 (modifier letter circumflex accent) and U+02DC (small tilde),
+.  \" respectively, for consistency with groff's other output devices.
+.  \" This change is expected to expose glyph usage errors in man pages.
+.  \" See [http://git.savannah.gnu.org/cgit/groff.git/tree/PROBLEMS] for
+.  \" a recipe that will conceal these errors"
+.  \" -- https://lists.gnu.org/archive/html/groff/2023-07/msg00051.html
+.  \"
+.  \" Conceal glyph usage errors in man pages with the following
+.  \" character translations for non-keyboard characters to make them searchable.
+.  if '\*[.T]'utf8' \{\
+.    char \- \N'45'
+.    char - \N'45'
+.    char \' \[aq]
+.    char ' \[aq]
+.    char ` \[ga]
+.    char ^ \[ha]
+.    char ~ \[ti]
+.  \}
+.\}
+.
+.ds doc-default-operating-system Nixpkgs
+.ds doc-volume-operating-system Nixpkgs
diff --git a/nixpkgs/pkgs/tools/text/gtranslator/default.nix b/nixpkgs/pkgs/tools/text/gtranslator/default.nix
new file mode 100644
index 000000000000..5c9c7c868738
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gtranslator/default.nix
@@ -0,0 +1,68 @@
+{ stdenv
+, lib
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, itstool
+, gettext
+, wrapGAppsHook4
+, libxml2
+, libadwaita
+, libgda6
+, libsoup_3
+, libspelling
+, json-glib
+, glib
+, gtk4
+, gtksourceview5
+, gnome
+, gsettings-desktop-schemas
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtranslator";
+  version = "45.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "MBAgTfXHpa4Cf1owsVRNaXfUF/Dku53il/CtGoAzGHM=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    itstool
+    gettext
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    libxml2
+    glib
+    gtk4
+    gtksourceview5
+    libadwaita
+    libgda6
+    libsoup_3
+    libspelling
+    json-glib
+    gettext
+    gsettings-desktop-schemas
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "GNOME translation making program";
+    homepage = "https://wiki.gnome.org/Apps/Gtranslator";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gtree/default.nix b/nixpkgs/pkgs/tools/text/gtree/default.nix
new file mode 100644
index 000000000000..d27a2857413c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gtree/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, gtree
+}:
+
+buildGoModule rec {
+  pname = "gtree";
+  version = "1.10.8";
+
+  src = fetchFromGitHub {
+    owner = "ddddddO";
+    repo = "gtree";
+    rev = "v${version}";
+    hash = "sha256-gxX5Cq5SPDNWtwtuo35RW+N/WE0ZximxDlTi9TnTACM=";
+  };
+
+  vendorHash = "sha256-5biKUOzYaVY+52f0ewvHslAnb+BM0BuqGrU8wwA3t+E=";
+
+  subPackages = [
+    "cmd/gtree"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.Version=${version}"
+    "-X=main.Revision=${src.rev}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = gtree;
+    };
+  };
+
+  meta = with lib; {
+    description = "Generate directory trees and directories using Markdown or programmatically";
+    homepage = "https://github.com/ddddddO/gtree";
+    changelog = "https://github.com/ddddddO/gtree/releases/tag/${src.rev}";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gucci/default.nix b/nixpkgs/pkgs/tools/text/gucci/default.nix
new file mode 100644
index 000000000000..f866f74710a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gucci/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, gucci }:
+
+buildGoModule rec {
+  pname = "gucci";
+  version = "1.6.10";
+
+  src = fetchFromGitHub {
+    owner = "noqcks";
+    repo = "gucci";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-bwPQQtaPHby96C5ZHZhBTok+m8GPPS40U1CUPVYqCa4=";
+  };
+
+  vendorHash = "sha256-/4OnbtxxhXQnmSV6UbjgzXdL7szhL9rKiG5BR8FsyqI=";
+
+  ldflags = [ "-s" "-w" "-X main.AppVersion=${version}" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = gucci;
+  };
+
+  checkFlags = [ "-short" ];
+
+  # Integration tests rely on Ginkgo but fail.
+  # Related: https://github.com/onsi/ginkgo/issues/602
+  #
+  # Disable integration tests.
+  preCheck = ''
+    buildFlagsArray+=("-run" "[^(TestIntegration)]")
+  '';
+
+  meta = with lib; {
+    description = "A simple CLI templating tool written in golang";
+    homepage = "https://github.com/noqcks/gucci";
+    license = licenses.mit;
+    maintainers = with maintainers; [ braydenjw ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/hck/default.nix b/nixpkgs/pkgs/tools/text/hck/default.nix
new file mode 100644
index 000000000000..0467894b116a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/hck/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hck";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner = "sstadick";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-KPpvai7+El2JA97EXDCstZ66FeyVCe7w+ERDDNRZ/h8=";
+  };
+
+  cargoSha256 = "sha256-TpwUO0BL8kambnxAUE9+l6YYkNL1WzmkTYn1YxjufdY=";
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "A close to drop in replacement for cut that can use a regex delimiter instead of a fixed string";
+    homepage = "https://github.com/sstadick/hck";
+    changelog = "https://github.com/sstadick/hck/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit /* or */ unlicense ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/hcledit/default.nix b/nixpkgs/pkgs/tools/text/hcledit/default.nix
new file mode 100644
index 000000000000..d5b2fb0cc0a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/hcledit/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "hcledit";
+  version = "0.2.10";
+
+  src = fetchFromGitHub {
+    owner = "minamijoyo";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-rXmbRbM6U1JtV3t8C0LlLAdYpxd4UjxrbrPVHdqiCJ8=";
+  };
+
+  vendorHash = "sha256-9ND/vDPDn3rn213Jn1UPMmYAkMI86gYx9QLcV/oFGh4=";
+
+  meta = with lib; {
+    description = "A command line editor for HCL";
+    homepage = "https://github.com/minamijoyo/hcledit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aleksana ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/highlight/default.nix b/nixpkgs/pkgs/tools/text/highlight/default.nix
new file mode 100644
index 000000000000..7e02f3f60ceb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/highlight/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchFromGitLab, getopt, lua, boost, libxcrypt, pkg-config, swig, perl, gcc }:
+
+let
+  self = stdenv.mkDerivation rec {
+    pname = "highlight";
+    version = "4.10";
+
+    src = fetchFromGitLab {
+      owner = "saalen";
+      repo = "highlight";
+      rev = "v${version}";
+      sha256 = "sha256-WBX5WQXGgB7n7htxHxpBNIE1wFCFht6sMy5lkqeieqM=";
+    };
+
+    enableParallelBuilding = true;
+
+    nativeBuildInputs = [ pkg-config swig perl ]
+      ++ lib.optional stdenv.isDarwin gcc;
+
+    buildInputs = [ getopt lua boost libxcrypt ];
+
+    postPatch = ''
+      substituteInPlace src/makefile \
+        --replace "shell pkg-config" "shell $PKG_CONFIG"
+      substituteInPlace makefile \
+        --replace 'gzip' 'gzip -n'
+    '' + lib.optionalString stdenv.cc.isClang ''
+      substituteInPlace src/makefile \
+          --replace 'CXX=g++' 'CXX=clang++'
+    '';
+
+    preConfigure = ''
+      makeFlags="PREFIX=$out conf_dir=$out/etc/highlight/ CXX=$CXX AR=$AR"
+    '';
+
+    # This has to happen _before_ the main build because it does a
+    # `make clean' for some reason.
+    preBuild = lib.optionalString (!stdenv.isDarwin) ''
+      make -C extras/swig $makeFlags perl
+    '';
+
+    postCheck = lib.optionalString (!stdenv.isDarwin) ''
+      perl -Iextras/swig extras/swig/testmod.pl
+    '';
+
+    preInstall = lib.optionalString (!stdenv.isDarwin) ''
+      mkdir -p $out/${perl.libPrefix}
+      install -m644 extras/swig/highlight.{so,pm} $out/${perl.libPrefix}
+      make -C extras/swig clean # Clean up intermediate files.
+    '';
+
+    meta = with lib; {
+      description = "Source code highlighting tool";
+      homepage = "http://www.andre-simon.de/doku/highlight/en/highlight.php";
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ willibutz ];
+    };
+  };
+
+in
+  if stdenv.isDarwin then self
+  else perl.pkgs.toPerlModule self
diff --git a/nixpkgs/pkgs/tools/text/html-tidy/default.nix b/nixpkgs/pkgs/tools/text/html-tidy/default.nix
new file mode 100644
index 000000000000..1f9c04b7c9db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/html-tidy/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, libxslt, html-tidy }:
+
+stdenv.mkDerivation rec {
+  pname = "html-tidy";
+  version = "5.8.0";
+
+  src = fetchFromGitHub {
+    owner = "htacg";
+    repo = "tidy-html5";
+    rev = version;
+    hash = "sha256-vzVWQodwzi3GvC9IcSQniYBsbkJV20iZanF33A0Gpe0=";
+  };
+
+  # https://github.com/htacg/tidy-html5/pull/1036
+  patches = (fetchpatch {
+    url = "https://github.com/htacg/tidy-html5/commit/e9aa038bd06bd8197a0dc049380bc2945ff55b29.diff";
+    sha256 = "sha256-Q2GjinNBWLL+HXUtslzDJ7CJSTflckbjweiSMCnIVwg=";
+  });
+
+  nativeBuildInputs = [ cmake libxslt/*manpage*/ ]
+    ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) html-tidy;
+
+  cmakeFlags = lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    "-DHOST_TIDY=tidy"
+  ];
+
+  # ATM bin/tidy is statically linked, as upstream provides no other option yet.
+  # https://github.com/htacg/tidy-html5/issues/326#issuecomment-160322107
+
+  meta = with lib; {
+    description = "A HTML validator and `tidier'";
+    longDescription = ''
+      HTML Tidy is a command-line tool and C library that can be
+      used to validate and fix HTML data.
+    '';
+    license = licenses.libpng; # very close to it - the 3 clauses are identical
+    homepage = "http://html-tidy.org";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ edwtjo ];
+    mainProgram = "tidy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/html2text/default.nix b/nixpkgs/pkgs/tools/text/html2text/default.nix
new file mode 100644
index 000000000000..7ef802e925fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/html2text/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "html2text";
+  version = "1.3.2a";
+
+  src = fetchurl {
+    url = "http://www.mbayer.de/html2text/downloads/html2text-${version}.tar.gz";
+    sha256 = "000b39d5d910b867ff7e087177b470a1e26e2819920dcffd5991c33f6d480392";
+  };
+
+  preConfigure = ''
+    substituteInPlace configure \
+        --replace /bin/echo echo \
+        --replace CXX=unknown ':'
+  '' + lib.optionalString stdenv.cc.isClang ''
+    substituteInPlace HTMLParser.C \
+      --replace "register " ""
+  '';
+
+  # the --prefix has no effect
+  installPhase = ''
+    mkdir -p $out/bin $out/man/man{1,5}
+    cp html2text $out/bin
+    cp html2text.1.gz $out/man/man1
+    cp html2textrc.5.gz $out/man/man5
+  '';
+
+  meta = {
+    description = "Convert HTML to plain text";
+    homepage = "http://www.mbayer.de/html2text/";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.eikek ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/huniq/default.nix b/nixpkgs/pkgs/tools/text/huniq/default.nix
new file mode 100644
index 000000000000..a1d30d2fb11d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/huniq/default.nix
@@ -0,0 +1,20 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "huniq";
+  version = "2.7.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-5GvHM05qY/Jj1mPYwn88Zybn6Nn5nJIaw0XP8iCcrwE=";
+  };
+
+  cargoSha256 = "sha256-pwDaLHJbVpZe7dAtd5/ytyHZkUHjCcNjtw3q7HF1qVQ=";
+
+  meta = with lib; {
+    description = "Command line utility to remove duplicates from the given input";
+    homepage = "https://github.com/koraa/huniq";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/hyx/default.nix b/nixpkgs/pkgs/tools/text/hyx/default.nix
new file mode 100644
index 000000000000..28b4765ede4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/hyx/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, memstreamHook }:
+
+stdenv.mkDerivation rec {
+  pname = "hyx";
+  version = "2021.06.09";
+
+  src = fetchurl {
+    url = "https://yx7.cc/code/hyx/hyx-${lib.replaceStrings [ "-" ] [ "." ] version}.tar.xz";
+    sha256 = "sha256-jU8U5YWE1syPBOQ8o4BC7tIYiCo4kknCCwhnMCVtpes=";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile \
+      --replace "-Wl,-z,relro,-z,now -fpic -pie" ""
+  '';
+
+  buildInputs = lib.optional (stdenv.system == "x86_64-darwin") memstreamHook;
+
+  installPhase = ''
+    install -vD hyx $out/bin/hyx
+  '';
+
+  meta = with lib; {
+    description = "minimalistic but powerful Linux console hex editor";
+    homepage = "https://yx7.cc/code/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/icdiff/default.nix b/nixpkgs/pkgs/tools/text/icdiff/default.nix
new file mode 100644
index 000000000000..1ab884b12d4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/icdiff/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, python3Packages, bash, git, less }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "icdiff";
+  version = "1.9.5";
+
+  src = fetchFromGitHub {
+    owner = "jeffkaufman";
+    repo = "icdiff";
+    rev = "release-${version}";
+    sha256 = "080v8h09pv8qwplin4kwfm0kmqjwdqjfxbpcdrv16sv4hwfwl5qd";
+  };
+
+  nativeCheckInputs = [
+    bash
+    git
+    less
+  ];
+
+  # error: could not lock config file /homeless-shelter/.gitconfig: No such file or directory
+  doCheck = false;
+
+  checkPhase = ''
+    patchShebangs test.sh
+    ./test.sh ${python3Packages.python.interpreter}
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.jefftk.com/icdiff";
+    description = "Side-by-side highlighted command line diffs";
+    maintainers = with maintainers; [ ];
+    license = licenses.psfl;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/igrep/default.nix b/nixpkgs/pkgs/tools/text/igrep/default.nix
new file mode 100644
index 000000000000..db947ca2cc38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/igrep/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, Security
+, testers
+, igrep
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "igrep";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "konradsz";
+    repo = "igrep";
+    rev = "v${version}";
+    hash = "sha256-L5mHuglU0CvTi02pbR8xfezBoH8L/DS+7jgvYvb4yro=";
+  };
+
+  cargoHash = "sha256-k63tu5Ffus4z0yd8vQ79q4+tokWAXD05Pvv9JByfnDg=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  passthru.tests = {
+    version = testers.testVersion { package = igrep; command = "ig --version"; };
+  };
+
+  meta = with lib; {
+    description = "Interactive Grep";
+    homepage = "https://github.com/konradsz/igrep";
+    changelog = "https://github.com/konradsz/igrep/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ _0x4A6F ];
+    mainProgram = "ig";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/invoice2data/default.nix b/nixpkgs/pkgs/tools/text/invoice2data/default.nix
new file mode 100644
index 000000000000..aed1bd2afd50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/invoice2data/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, ghostscript
+, imagemagick
+, poppler_utils
+, python3
+, tesseract5
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "invoice2data";
+  version = "0.4.4";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "invoice-x";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-pAvkp8xkHYi/7ymbxaT7/Jhu44j2P8emm8GyXC6IBnI=";
+  };
+
+  patches = [
+    # https://github.com/invoice-x/invoice2data/pull/522
+    (fetchpatch {
+      name = "clean-up-build-dependencies.patch";
+      url = "https://github.com/invoice-x/invoice2data/commit/ccea3857c7c8295ca51dc24de6cde78774ea7e64.patch";
+      hash = "sha256-BhqPW4hWG/EaR3qBv5a68dcvIMrCCT74GdDHr0Mss5Q=";
+    })
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools-git
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dateparser
+    pdfminer-six
+    pillow
+    pyyaml
+    setuptools
+  ];
+
+  makeWrapperArgs = ["--prefix" "PATH" ":" (lib.makeBinPath [
+    ghostscript
+    imagemagick
+    tesseract5
+    poppler_utils
+  ])];
+
+  # Tests fails even when ran manually on my ubuntu machine !!
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "invoice2data"
+  ];
+
+  meta = with lib; {
+    description = "Data extractor for PDF invoices";
+    homepage = "https://github.com/invoice-x/invoice2data";
+    license = licenses.mit;
+    maintainers = with maintainers; [ psyanticy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ispell/default.nix b/nixpkgs/pkgs/tools/text/ispell/default.nix
new file mode 100644
index 000000000000..2f7b25d5fa25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, bison, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "ispell";
+  version = "3.4.06";
+
+  src = fetchurl {
+    url = "https://www.cs.hmc.edu/~geoff/tars/${pname}-${version}.tar.gz";
+    sha256 = "sha256-F8kWM9TIB1rMUDFjoWRj/FSrHHRTKArTnNPbdceD66Y=";
+  };
+
+  buildInputs = [ bison ncurses ];
+
+  postPatch = ''
+    cat >> local.h <<EOF
+    ${lib.optionalString (!stdenv.isDarwin) "#define USG"}
+    #define TERMLIB "-lncurses"
+    #define LANGUAGES "{american,MASTERDICTS=american.med,HASHFILES=americanmed.hash}"
+    #define MASTERHASH "americanmed.hash"
+    #define BINDIR "$out/bin"
+    #define LIBDIR "$out/lib"
+    #define ELISPDIR "{$out}/share/emacs/site-lisp"
+    #define TEXINFODIR "$out/share/info"
+    #define MAN1DIR "$out/share/man/man1"
+    #define MAN4DIR "$out/share/man/man4"
+    #define MAN45DIR "$out/share/man/man5"
+    #define MINIMENU
+    #define HAS_RENAME
+    EOF
+  '';
+
+  meta = with lib; {
+    description = "An interactive spell-checking program for Unix";
+    homepage = "https://www.cs.hmc.edu/~geoff/ispell.html";
+    license = licenses.free;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/jbofihe/default.nix b/nixpkgs/pkgs/tools/text/jbofihe/default.nix
new file mode 100644
index 000000000000..111b019c3b13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/jbofihe/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, bison, flex, perl, }:
+
+stdenv.mkDerivation rec {
+  pname = "jbofihe";
+  version = "0.43";
+
+  src = fetchFromGitHub {
+    owner = "lojban";
+    repo = "jbofihe";
+    rev = "v${version}";
+    sha256 = "1xx7x1256sjncyzx656jl6jl546vn8zz0siymqalz6v9yf341p98";
+  };
+
+  nativeBuildInputs = [ bison flex perl ];
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    (cd tests && ./run *.in)
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Parser & analyser for Lojban";
+    homepage = "https://github.com/lojban/jbofihe";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ chkno ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/jen/default.nix b/nixpkgs/pkgs/tools/text/jen/default.nix
new file mode 100644
index 000000000000..2361c1aafc1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/jen/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jen";
+  version = "1.6.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-fpv/IzU23yAz1cumTbdQP6wHJX2U4acNxq8Zrx+YQVs=";
+  };
+
+  cargoHash = "sha256-LKiPG7k5UgaESP1ShsIWNMnm9resbRje746txOBo+Qs=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "A simple CLI generation tool for creating large datasets";
+    homepage = "https://github.com/whitfin/jen";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/jotdown/default.nix b/nixpkgs/pkgs/tools/text/jotdown/default.nix
new file mode 100644
index 000000000000..e39209cfe106
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/jotdown/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jotdown";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "hellux";
+    repo = "jotdown";
+    rev = version;
+    hash = "sha256-XouI3PHKPtX+3GkhMvdRfwJkCoofMgCY/NXB0tnLyUc=";
+  };
+
+  cargoHash = "sha256-PvKXVP90GOAgz4Sc37B4hli7rbNHVZbksVAo+uy2yEU=";
+
+  meta = with lib; {
+    description = "A minimal Djot CLI";
+    homepage = "https://github.com/hellux/jotdown";
+    changelog = "https://github.com/hellux/jotdown/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/jsawk/default.nix b/nixpkgs/pkgs/tools/text/jsawk/default.nix
new file mode 100644
index 000000000000..2f21900b8d01
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/jsawk/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, spidermonkey_102 }:
+
+stdenv.mkDerivation {
+  pname = "jsawk";
+  version = "1.5-pre";
+  src = fetchFromGitHub {
+    owner = "micha";
+    repo = "jsawk";
+    rev = "5a14c4af3c7b59807701b70a954ecefc6f77e978";
+    sha256 = "0z3vdr3c8nvdrrxkjv9b4xg47mdb2hsknxpimw6shgwbigihapyr";
+  };
+  dontBuild = true;
+  nativeBuildInputs = [ makeWrapper ];
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src/jsawk $out/bin/
+    wrapProgram $out/bin/jsawk \
+      --prefix PATH : "${spidermonkey_102}/bin"
+  '';
+
+  meta = {
+    description = "Like awk, but for JSON";
+    homepage = "https://github.com/micha/jsawk";
+    license = lib.licenses.publicDomain;
+    maintainers = with lib.maintainers; [ puffnfresh ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/jumanpp/0001-Exclude-all-tests-from-the-build.patch b/nixpkgs/pkgs/tools/text/jumanpp/0001-Exclude-all-tests-from-the-build.patch
new file mode 100644
index 000000000000..d41bada82def
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/jumanpp/0001-Exclude-all-tests-from-the-build.patch
@@ -0,0 +1,177 @@
+From c52a5046e19718a43d48c9b3cfdc121d964e8c3b Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Fri, 28 Jan 2022 17:43:35 +0100
+Subject: [PATCH] Exclude all tests from the build
+
+For some reason it isn't sufficient to set `-DJPP_ENABLE_TESTS=OFF`.
+Doing that because the tests on 2.0.0-rc3 don't seem to be working and
+the vendored catch2 doesn't build with glibc 2.34.
+---
+ src/CMakeLists.txt               |  3 +--
+ src/core/CMakeLists.txt          | 11 +----------
+ src/core/analysis/CMakeLists.txt |  2 --
+ src/core/codegen/CMakeLists.txt  |  3 ---
+ src/core/spec/CMakeLists.txt     |  2 --
+ src/core/training/CMakeLists.txt |  2 --
+ src/jumandic/CMakeLists.txt      |  8 +-------
+ src/rnn/CMakeLists.txt           |  5 +----
+ src/util/CMakeLists.txt          |  2 --
+ 9 files changed, 4 insertions(+), 34 deletions(-)
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 169dff5..64b6a07 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -67,7 +67,6 @@ function(jpp_feature_codegen)
+ endfunction(jpp_feature_codegen)
+ 
+ add_subdirectory(util)
+-add_subdirectory(testing)
+ add_subdirectory(core)
+ add_subdirectory(jumandic)
+-add_subdirectory(rnn)
+\ No newline at end of file
++add_subdirectory(rnn)
+diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
+index c63d134..01c825e 100644
+--- a/src/core/CMakeLists.txt
++++ b/src/core/CMakeLists.txt
+@@ -55,20 +55,11 @@ set(core_hdrs
+   ${core_hdrs}
+   )
+ 
+-set(core_test_srcs
+-  ${core_test_srcs}
+-  ${core_tsrcs}
+-  test/test_analyzer_env.h
+-  ../testing/test_analyzer.h
+-  )
+-
+ add_library(jpp_core ${core_srcs} ${core_hdrs} ${libs3p_pegtl_headers})
+-jpp_test_executable(jpp_core_tests ${core_test_srcs})
+ 
+ target_include_directories(jpp_core PUBLIC ${jpp_core_cfg_dir})
+ 
+ target_link_libraries(jpp_core PUBLIC jpp_util jpp_rnn PRIVATE pathie)
+-target_link_libraries(jpp_core_tests jpp_core jpp_core_train)
+ 
+ if (${JPP_USE_PROTOBUF})
+   target_include_directories(jpp_core PUBLIC ${Protobuf_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
+@@ -78,4 +69,4 @@ endif()
+ add_subdirectory(benchmarks)
+ if (${JPP_ENABLE_DEV_TOOLS})
+   add_subdirectory(devtools)
+-endif ()
+\ No newline at end of file
++endif ()
+diff --git a/src/core/analysis/CMakeLists.txt b/src/core/analysis/CMakeLists.txt
+index 526263e..1b32f8d 100644
+--- a/src/core/analysis/CMakeLists.txt
++++ b/src/core/analysis/CMakeLists.txt
+@@ -79,5 +79,3 @@ jpp_core_files(core_hdrs
+   )
+ 
+ 
+-jpp_test_executable(jpp_core_analysis_tests ${core_analysis_tsrc})
+-target_link_libraries(jpp_core_analysis_tests jpp_core)
+diff --git a/src/core/codegen/CMakeLists.txt b/src/core/codegen/CMakeLists.txt
+index a905cee..fa759c7 100644
+--- a/src/core/codegen/CMakeLists.txt
++++ b/src/core/codegen/CMakeLists.txt
+@@ -30,7 +30,4 @@ set(jpp_codegen_tsrcs
+ 
+ add_library(jpp_core_codegen ${jpp_codegen_srcs} ${jpp_codegen_hdrs})
+ 
+-jpp_test_executable(jpp_codegen_tests ${jpp_codegen_tsrcs})
+-target_include_directories(jpp_codegen_tests PRIVATE ${cgtest02_INCLUDE})
+ target_link_libraries(jpp_core_codegen jpp_core)
+-target_link_libraries(jpp_codegen_tests jpp_core_codegen)
+\ No newline at end of file
+diff --git a/src/core/spec/CMakeLists.txt b/src/core/spec/CMakeLists.txt
+index f495d67..da827b9 100644
+--- a/src/core/spec/CMakeLists.txt
++++ b/src/core/spec/CMakeLists.txt
+@@ -33,5 +33,3 @@ jpp_core_files(core_hdrs
+ 
+   )
+ 
+-jpp_test_executable(jpp_core_spec_tests ${core_spec_tsrc} ${libs3p_pegtl_headers})
+-target_link_libraries(jpp_core_spec_tests jpp_core)
+\ No newline at end of file
+diff --git a/src/core/training/CMakeLists.txt b/src/core/training/CMakeLists.txt
+index 960437e..4ede9e1 100644
+--- a/src/core/training/CMakeLists.txt
++++ b/src/core/training/CMakeLists.txt
+@@ -39,7 +39,5 @@ set(core_train_hdrs
+ 
+ 
+ add_library(jpp_core_train ${core_train_src} ${core_train_hdrs})
+-jpp_test_executable(jpp_core_train_tests ${core_train_tsrc})
+ 
+ target_link_libraries(jpp_core_train jpp_core)
+-target_link_libraries(jpp_core_train_tests jpp_core_train)
+\ No newline at end of file
+diff --git a/src/jumandic/CMakeLists.txt b/src/jumandic/CMakeLists.txt
+index bef3149..85a8b5d 100644
+--- a/src/jumandic/CMakeLists.txt
++++ b/src/jumandic/CMakeLists.txt
+@@ -53,10 +53,6 @@ if (${JPP_USE_PROTOBUF})
+ endif ()
+ 
+ 
+-jpp_test_executable(jpp_jumandic_tests ${jumandic_tests})
+-jpp_test_executable(jpp_bug_tests ${bug_test_sources})
+-target_include_directories(jpp_jumandic_tests PRIVATE ${jpp_jumandic_cg_INCLUDE})
+-
+ add_executable(jpp_jumandic_bootstrap main/bootstrap.cc)
+ add_executable(jumanpp_v2 main/jumanpp.cc)
+ add_executable(jumanpp_v2_train main/jumanpp_train.cc main/jumanpp_train.h)
+@@ -64,11 +60,9 @@ add_executable(jpp_jumandic_pathdiff main/path_diff.cc)
+ target_include_directories(jpp_jumandic_pathdiff PRIVATE ${jpp_jumandic_cg_INCLUDE})
+ 
+ target_link_libraries(jpp_jumandic jpp_jumandic_spec)
+-target_link_libraries(jpp_jumandic_tests jpp_jumandic jpp_core_train)
+-target_link_libraries(jpp_bug_tests jpp_jumandic jpp_core_train)
+ target_link_libraries(jpp_jumandic_bootstrap jpp_jumandic)
+ target_link_libraries(jumanpp_v2 jpp_jumandic)
+ target_link_libraries(jumanpp_v2_train jpp_jumandic jpp_core_train)
+ target_link_libraries(jpp_jumandic_pathdiff jpp_jumandic)
+ 
+-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jumanpp_v2 RENAME jumanpp DESTINATION bin)
+\ No newline at end of file
++install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jumanpp_v2 RENAME jumanpp DESTINATION bin)
+diff --git a/src/rnn/CMakeLists.txt b/src/rnn/CMakeLists.txt
+index 448ba51..ca09a00 100644
+--- a/src/rnn/CMakeLists.txt
++++ b/src/rnn/CMakeLists.txt
+@@ -1,12 +1,9 @@
+ set(jpp_rnn_sources mikolov_rnn.cc)
+ set(jpp_rnn_includes mikolov_rnn.h simple_rnn_impl.h mikolov_rnn_impl.h rnn_arg_parse.h)
+-set(jpp_rnn_tests mikolov_rnn_test.cc)
+ 
+ add_library(jpp_rnn ${jpp_rnn_sources} ${jpp_rnn_includes} )
+ add_library(jumanpp_rnn_legacy legacy/rnnlmlib.h legacy/rnnlmlib_static.h legacy/rnnlmlib_static.cpp)
+ 
+-jpp_test_executable(jpp_rnn_tests ${jpp_rnn_tests})
+ target_link_libraries(jpp_rnn jpp_util)
+-target_link_libraries(jpp_rnn_tests jpp_rnn jumanpp_rnn_legacy)
+ 
+-target_link_libraries(jumanpp_rnn_legacy jpp_util)
+\ No newline at end of file
++target_link_libraries(jumanpp_rnn_legacy jpp_util)
+diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt
+index 53b6c57..c4599d5 100644
+--- a/src/util/CMakeLists.txt
++++ b/src/util/CMakeLists.txt
+@@ -25,8 +25,6 @@ endif()
+ 
+ 
+ add_library(jpp_util ${jpp_util_sources} ${jpp_util_headers} ${BACKWARD_headers})
+-jpp_test_executable(jpp_util_test ${jpp_util_test_srcs} ${jpp_util_headers})
+-target_link_libraries(jpp_util_test jpp_util)
+ target_link_libraries(jpp_util ${CMAKE_THREAD_LIBS_INIT})
+ target_include_directories(jpp_util PUBLIC ${JPP_LIBS_DIR} ${JPP_SRC_DIR})
+ target_compile_features(jpp_util PUBLIC
+-- 
+2.33.1
+
diff --git a/nixpkgs/pkgs/tools/text/jumanpp/default.nix b/nixpkgs/pkgs/tools/text/jumanpp/default.nix
new file mode 100644
index 000000000000..348c785ab28d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/jumanpp/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, fetchpatch, cmake, protobuf, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "jumanpp";
+  version = "2.0.0-rc3";
+
+  src = fetchurl {
+    url = "https://github.com/ku-nlp/${pname}/releases/download/v${version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-ASdr6qbkSe71M7QmuuwidCa4xQhDVoXBJ2XqvSY53pQ=";
+  };
+
+  patches = [
+    ./0001-Exclude-all-tests-from-the-build.patch
+    # https://github.com/ku-nlp/jumanpp/pull/132
+    (fetchpatch {
+      name = "fix-unused-warning.patch";
+      url = "https://github.com/ku-nlp/jumanpp/commit/cc0d555287c8b214e9d6f0279c449a4e035deee4.patch";
+      sha256 = "sha256-yRKwuUJ2UPXJcjxBGhSOmcQI/EOijiJDMmmmSRdNpX8=";
+    })
+    (fetchpatch {
+      name = "update-libs.patch";
+      url = "https://github.com/ku-nlp/jumanpp/commit/5e9068f56ae310ed7c1df185b14d49654ffe1ab6.patch";
+      sha256 = "sha256-X49/ZoLT0OGePLZYlgacNxA1dHM4WYdQ8I4LW3sW16E=";
+    })
+    (fetchpatch {
+      name = "fix-mmap-on-apple-m1.patch";
+      url = "https://github.com/ku-nlp/jumanpp/commit/0c22249f12928d0c962f03f229026661bf0c7921.patch";
+      sha256 = "sha256-g6CuruqyoMJxU/hlNoALx1QnFM8BlTsTd0pwlVrco3I=";
+    })
+  ];
+  cmakeFlags = [ "-DJPP_ENABLE_TESTS=OFF" ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ protobuf ]
+    ++ lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "A Japanese morphological analyser using a recurrent neural network language model (RNNLM)";
+    longDescription = ''
+      JUMAN++ is a new morphological analyser that considers semantic
+      plausibility of word sequences by using a recurrent neural network
+      language model (RNNLM).
+    '';
+    homepage = "https://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN++";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mt-caret ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/justify/default.nix b/nixpkgs/pkgs/tools/text/justify/default.nix
new file mode 100644
index 000000000000..86de7365663e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/justify/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitea
+, cmake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "justify";
+  version = "unstable-2022-03-19";
+
+  src = fetchFromGitea {
+    domain = "tildegit.org";
+    owner = "jns";
+    repo = "justify";
+    rev = "0d397c20ed921c8e091bf18e548d174e15810e62";
+    sha256 = "sha256-406OhJt2Ila/LIhfqJXhbFqFxJJiRyMVI4/VK8Y43kc=";
+  };
+
+  postPatch = ''
+    sed '1i#include <algorithm>' -i src/stringHelper.h # gcc12
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  installPhase = ''
+    install -D justify $out/bin/justify
+  '';
+
+  meta = with lib; {
+    homepage = "https://tildegit.org/jns/justify";
+    description = "Simple text alignment tool that supports left/right/center/fill justify alignment";
+    license = licenses.gpl3Only;
+    platforms = platforms.unix;
+    mainProgram = "justify";
+    maintainers = with maintainers; [ xfnw ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/kakasi/default.nix b/nixpkgs/pkgs/tools/text/kakasi/default.nix
new file mode 100644
index 000000000000..fa509f1b4a72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/kakasi/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "kakasi";
+  version = "2.3.6";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  meta = with lib; {
+    description = "Kanji Kana Simple Inverter";
+    longDescription = ''
+      KAKASI is the language processing filter to convert Kanji
+      characters to Hiragana, Katakana or Romaji and may be
+      helpful to read Japanese documents.
+    '';
+    homepage    = "http://kakasi.namazu.org/";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.unix;
+  };
+
+  src = fetchurl {
+    url = "http://kakasi.namazu.org/stable/kakasi-${version}.tar.xz";
+    sha256 = "1qry3xqb83pjgxp3my8b1sy77z4f0893h73ldrvdaky70cdppr9f";
+  };
+
+  postPatch = ''
+    for a in tests/kakasi-* ; do
+      substituteInPlace $a \
+        --replace "/bin/echo" echo
+    done
+  '';
+
+  doCheck = false; # fails 1 of 6 tests
+
+}
diff --git a/nixpkgs/pkgs/tools/text/kdiff3/default.nix b/nixpkgs/pkgs/tools/text/kdiff3/default.nix
new file mode 100644
index 000000000000..f9f55bc28851
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/kdiff3/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, lib
+, fetchurl
+, extra-cmake-modules
+, kdoctools
+, wrapQtAppsHook
+, boost
+, kcrash
+, kconfig
+, kinit
+, kparts
+, kiconthemes
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "kdiff3";
+  version = "1.10.7";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/kdiff3/kdiff3-${finalAttrs.version}.tar.xz";
+    hash = "sha256-uj9Ky/SsdIrr78hfWcr2U9Rf6FmkjDSviZGCJKdnxeM=";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules kdoctools wrapQtAppsHook ];
+
+  buildInputs = [ boost kconfig kcrash kinit kparts kiconthemes ];
+
+  cmakeFlags = [ "-Wno-dev" ];
+
+  meta = with lib; {
+    description = "Compares and merges 2 or 3 files or directories";
+    homepage = "https://invent.kde.org/sdk/kdiff3";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = with platforms; linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/text/kytea/default.nix b/nixpkgs/pkgs/tools/text/kytea/default.nix
new file mode 100644
index 000000000000..322fa77ebad6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/kytea/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+
+  pname = "kytea";
+  version = "0.4.7";
+
+  src = fetchurl {
+    url    = "http://www.phontron.com/kytea/download/${pname}-${version}.tar.gz";
+    sha256 = "0ilzzwn5vpvm65bnbyb9f5rxyxy3jmbafw9w0lgl5iad1ka36jjk";
+  };
+
+  patches = [ ./gcc-O3.patch ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=c++11-narrowing";
+
+  meta = with lib; {
+    homepage = "http://www.phontron.com/kytea/";
+    description = "General toolkit developed for analyzing text";
+
+    longDescription = ''
+      A general toolkit developed for analyzing text, with a focus on Japanese,
+      Chinese and other languages requiring word or morpheme segmentation.
+    '';
+
+    license = licenses.asl20;
+
+    maintainers = with maintainers; [ ericsagnes ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/text/kytea/gcc-O3.patch b/nixpkgs/pkgs/tools/text/kytea/gcc-O3.patch
new file mode 100644
index 000000000000..71b1d0c3b16e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/kytea/gcc-O3.patch
@@ -0,0 +1,13 @@
+diff --git a/src/lib/kytea-util.cpp b/src/lib/kytea-util.cpp
+index 7c8c4c6..4492df1 100644
+--- a/src/lib/kytea-util.cpp
++++ b/src/lib/kytea-util.cpp
+@@ -49,5 +49,8 @@ void checkValueVecEqual(const std::vector<T> * a, const std::vector<T> * b) {
+ 
++template void checkValueVecEqual(const std::vector<unsigned int> & a, const std::vector<unsigned int> & b);
+ template void checkValueVecEqual(const std::vector<unsigned int> * a, const std::vector<unsigned int> * b);
++template void checkValueVecEqual(const std::vector<short> & a, const std::vector<short> & b);
+ template void checkValueVecEqual(const std::vector<short> * a, const std::vector<short> * b);
+ template void checkValueVecEqual(const std::vector<vector<KyteaString> > * a, const std::vector<vector<KyteaString> > * b);
++template void checkValueVecEqual(const std::vector<int> & a, const std::vector<int> & b);
+ template void checkValueVecEqual(const std::vector<int> * a, const std::vector<int> * b);
diff --git a/nixpkgs/pkgs/tools/text/l2md/default.nix b/nixpkgs/pkgs/tools/text/l2md/default.nix
new file mode 100644
index 000000000000..08ec219690f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/l2md/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchzip, libgit2 }:
+
+stdenv.mkDerivation rec {
+  pname = "l2md";
+  version = "unstable-2021-10-27";
+
+  src = fetchzip {
+    url = "https://git.kernel.org/pub/scm/linux/kernel/git/dborkman/l2md.git/snapshot/l2md-9db252bc1716ebaf0abd3a47a59ea78e4e6253d6.tar.gz";
+    sha256 = "sha256-H/leDUwQM55akyXsmTnI2YsnG4i1KQtf4bBt1fizy8E=";
+  };
+
+  buildInputs = [ libgit2 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp l2md $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Convert public-inbox archives to maildir messages";
+    longDescription = ''
+      Quick and dirty hack to import lore.kernel.org list archives via git,
+      to export them in maildir format or through a pipe, and to keep them
+      periodically synced.
+    '';
+    homepage = "https://git.kernel.org/pub/scm/linux/kernel/git/dborkman/l2md.git";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ yoctocell ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/languagetool-rust/default.nix b/nixpkgs/pkgs/tools/text/languagetool-rust/default.nix
new file mode 100644
index 000000000000..eda1060320c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/languagetool-rust/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, pkg-config
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "languagetool-rust";
+  version = "2.1.4";
+
+  src = fetchFromGitHub {
+    owner = "jeertmans";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-YsVK72q+A9T00u9bXIUfGDhwQl5kiLMec6onbp9YKkg=";
+  };
+
+  cargoHash = "sha256-Yit6zWWEcH5LXpcvy9EXUvRNz+JsyW10fauSNBf1BoU=";
+
+  buildFeatures = [ "full" ];
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  checkFlags = [
+    # requires network access
+    "--skip=server::tests::test_server_check_data"
+    "--skip=server::tests::test_server_check_text"
+    "--skip=server::tests::test_server_languages"
+    "--skip=server::tests::test_server_ping"
+    "--skip=test_match_positions_1"
+    "--skip=test_match_positions_2"
+    "--skip=test_match_positions_3"
+    "--skip=test_match_positions_4"
+    "--skip=src/lib/lib.rs"
+    "--skip=test_basic_check_data"
+    "--skip=test_basic_check_file"
+    "--skip=test_basic_check_files"
+    "--skip=test_basic_check_piped"
+    "--skip=test_basic_check_text"
+    "--skip=test_check_with_dict"
+    "--skip=test_check_with_dicts"
+    "--skip=test_check_with_disabled_categories"
+    "--skip=test_check_with_disabled_category"
+    "--skip=test_check_with_disabled_rule"
+    "--skip=test_check_with_disabled_rules"
+    "--skip=test_check_with_enabled_categories"
+    "--skip=test_check_with_enabled_category"
+    "--skip=test_check_with_enabled_only_category"
+    "--skip=test_check_with_enabled_only_rule"
+    "--skip=test_check_with_enabled_only_without_enabled"
+    "--skip=test_check_with_enabled_rule"
+    "--skip=test_check_with_enabled_rules"
+    "--skip=test_check_with_language"
+    "--skip=test_check_with_picky_level"
+    "--skip=test_check_with_preferred_variant"
+    "--skip=test_check_with_preferred_variants"
+    "--skip=test_check_with_unexisting_language"
+    "--skip=test_check_with_username_and_key"
+    "--skip=test_languages"
+    "--skip=test_ping"
+    "--skip=test_words"
+    "--skip=test_words_add"
+    "--skip=test_words_delete"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd ltrs \
+      --bash <($out/bin/ltrs completions bash) \
+      --fish <($out/bin/ltrs completions fish) \
+      --zsh <($out/bin/ltrs completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "LanguageTool API in Rust";
+    homepage = "https://github.com/jeertmans/languagetool-rust";
+    license = licenses.mit;
+    maintainers = with maintainers; [ name-snrl ];
+    mainProgram = "ltrs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/languagetool/default.nix b/nixpkgs/pkgs/tools/text/languagetool/default.nix
new file mode 100644
index 000000000000..ed4543140e86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/languagetool/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchzip, jre, makeWrapper, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "LanguageTool";
+  version = "6.3";
+
+  src = fetchzip {
+    url = "https://www.languagetool.org/download/${pname}-${version}.zip";
+    sha256 = "sha256-S6iBg7nEKCLrFzUnCseTaxFl6/YeRic2tJnBPLuXmWw=";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share
+    mv -- * $out/share/
+
+    for lt in languagetool{,-commandline,-server};do
+      makeWrapper ${jre}/bin/java $out/bin/$lt \
+        --add-flags "-cp $out/share/ -jar $out/share/$lt.jar"
+    done
+
+    makeWrapper ${jre}/bin/java $out/bin/languagetool-http-server \
+      --add-flags "-cp $out/share/languagetool-server.jar org.languagetool.server.HTTPServer"
+
+    runHook postInstall
+  '';
+
+  passthru.tests.languagetool = nixosTests.languagetool;
+
+  meta = with lib; {
+    homepage = "https://languagetool.org";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = jre.meta.platforms;
+    description = "A proofreading program for English, French German, Polish, and more";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ledger2beancount/default.nix b/nixpkgs/pkgs/tools/text/ledger2beancount/default.nix
new file mode 100644
index 000000000000..385222937676
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ledger2beancount/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perlPackages, beancount }:
+
+let
+  perlDeps = with perlPackages; [
+    DateCalc
+    DateTimeFormatStrptime
+    enum
+    FileBaseDir
+    GetoptLongDescriptive
+    ListMoreUtils
+    RegexpCommon
+    StringInterpolate
+    YAMLLibYAML
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "ledger2beancount";
+  version = "2.7";
+
+  src = fetchFromGitHub {
+    owner = "beancount";
+    repo = "ledger2beancount";
+    rev = version;
+    sha256 = "sha256-2LIP3ljK1HMAwjk2ueIf9pFL+UUnGDgx9GYNtRztdFY=";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl beancount ] ++ perlDeps;
+
+  makeFlags = [ "prefix=$(out)" ];
+  installFlags = [ "INSTALL=install" ];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r $src/bin $out/bin
+  '';
+
+  postFixup = ''
+    wrapProgram "$out/bin/ledger2beancount" \
+      --set PERL5LIB "${perlPackages.makeFullPerlPath perlDeps}"
+  '';
+
+  meta = with lib; {
+    description = "Ledger to Beancount text-based converter";
+    longDescription = ''
+      A script to automatically convert Ledger-based textual ledgers to Beancount ones.
+
+      Conversion is based on (concrete) syntax, so that information that is not meaningful for accounting reasons but still valuable (e.g., comments, formatting, etc.) can be preserved.
+    '';
+    homepage = "https://github.com/beancount/ledger2beancount";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pablovsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/link-grammar/default.nix b/nixpkgs/pkgs/tools/text/link-grammar/default.nix
new file mode 100644
index 000000000000..0406c41d1a88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/link-grammar/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, python3
+, flex
+, sqlite
+, libedit
+, runCommand
+, dieHook
+}:
+
+let
+
+link-grammar = stdenv.mkDerivation rec {
+  pname = "link-grammar";
+  version = "5.10.5";
+
+  outputs = [ "bin" "out" "dev" "man" ];
+
+  src = fetchurl {
+    url = "http://www.abisource.com/downloads/${pname}/${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-MkcQzYEyl1/5zLU1CXMvdVhHOxwZ8XiSAAo97bhhiu0=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    python3
+    flex
+  ];
+
+  buildInputs = [
+    sqlite
+    libedit
+  ];
+
+  configureFlags = [
+    "--disable-java-bindings"
+  ];
+
+  doCheck = true;
+
+  passthru.tests = {
+    quick = runCommand "link-grammar-quick-test" {
+      buildInputs = [
+        link-grammar
+        dieHook
+      ];
+    } ''
+      echo "Furiously sleep ideas green colorless." | link-parser en | grep "No complete linkages found." || die "Grammaticaly invalid sentence was parsed."
+      echo "Colorless green ideas sleep furiously." | link-parser en | grep "Found .* linkages." || die "Grammaticaly valid sentence was not parsed."
+      touch $out
+    '';
+  };
+
+  meta = with lib; {
+    description = "A Grammar Checking library";
+    homepage = "https://www.abisource.com/projects/link-grammar/";
+    changelog = "https://github.com/opencog/link-grammar/blob/link-grammar-${version}/ChangeLog";
+    license = licenses.lgpl21Only;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.unix;
+  };
+};
+
+in
+  link-grammar
diff --git a/nixpkgs/pkgs/tools/text/ltex-ls/default.nix b/nixpkgs/pkgs/tools/text/ltex-ls/default.nix
new file mode 100644
index 000000000000..a494ebfe864f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ltex-ls/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenvNoCC, fetchurl, makeBinaryWrapper, jre_headless }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "ltex-ls";
+  version = "16.0.0";
+
+  src = fetchurl {
+    url = "https://github.com/valentjn/ltex-ls/releases/download/${version}/ltex-ls-${version}.tar.gz";
+    sha256 = "sha256-lW1TfTckqhCmhjcvduISY9qAdKPM/0cobxbIrCq5JkQ=";
+  };
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -rfv bin/ lib/ $out
+    rm -fv $out/bin/.lsp-cli.json $out/bin/*.bat
+    for file in $out/bin/{ltex-ls,ltex-cli}; do
+      wrapProgram $file --set JAVA_HOME "${jre_headless}"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://valentjn.github.io/ltex/";
+    description = "LSP language server for LanguageTool";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.marsam ];
+    platforms = jre_headless.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/lv/default.nix b/nixpkgs/pkgs/tools/text/lv/default.nix
new file mode 100644
index 000000000000..48ed867c8e4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/lv/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "lv";
+  version = "4.51";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/l/${pname}/${pname}_${version}.orig.tar.gz";
+    sha256 = "0yf3idz1qspyff1if41xjpqqcaqa8q8icslqlnz0p9dj36gmm5l3";
+  };
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  buildInputs = [ ncurses ];
+
+  configurePhase = ''
+    mkdir -p build
+    cd build
+    ../src/configure
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Powerful multi-lingual file viewer / grep";
+    homepage = "https://web.archive.org/web/20160310122517/www.ff.iij4u.or.jp/~nrt/lv/";
+    license = licenses.gpl2;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ kayhide ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mairix/default.nix b/nixpkgs/pkgs/tools/text/mairix/default.nix
new file mode 100644
index 000000000000..aa58ecdd35a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mairix/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, zlib, bzip2, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "mairix";
+  version = "0.24";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/mairix/mairix-${version}.tar.gz";
+    sha256 = "0msaxz5c5hf7k1ci16i67m4ynrbrpsxbqzk84nz6z2vnkh3jww50";
+  };
+
+  buildInputs = [ zlib bzip2 bison flex ];
+
+  # https://github.com/rc0/mairix/pull/19
+  patches = [ ./mmap.patch ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = "http://www.rc0.org.uk/mairix";
+    license = lib.licenses.gpl2Plus;
+    description = "Program for indexing and searching email messages stored in maildir, MH or mbox";
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mairix/mmap.patch b/nixpkgs/pkgs/tools/text/mairix/mmap.patch
new file mode 100644
index 000000000000..241083f2dde5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mairix/mmap.patch
@@ -0,0 +1,161 @@
+Making mairix work with mbox files over 2GB.
+
+https://github.com/rc0/mairix/pull/19
+
+diff --git a/mairix.h b/mairix.h
+index 2480492..cb25824 100644
+--- a/mairix.h
++++ b/mairix.h
+@@ -327,9 +327,9 @@ enum data_to_rfc822_error {
+   DTR8_BAD_HEADERS, /* corrupt headers */
+   DTR8_BAD_ATTACHMENT /* corrupt attachment (e.g. no body part) */
+ };
+-struct rfc822 *data_to_rfc822(struct msg_src *src, char *data, int length, enum data_to_rfc822_error *error);
+-void create_ro_mapping(const char *filename, unsigned char **data, int *len);
+-void free_ro_mapping(unsigned char *data, int len);
++struct rfc822 *data_to_rfc822(struct msg_src *src, char *data, size_t length, enum data_to_rfc822_error *error);
++void create_ro_mapping(const char *filename, unsigned char **data, size_t *len);
++void free_ro_mapping(unsigned char *data, size_t len);
+ char *format_msg_src(struct msg_src *src);
+ 
+ /* In tok.c */
+diff --git a/mbox.c b/mbox.c
+index ebbfa78..396e27d 100644
+--- a/mbox.c
++++ b/mbox.c
+@@ -816,7 +816,7 @@ void build_mbox_lists(struct database *db, const char *folder_base, /*{{{*/
+         mb->n_old_msgs_valid = mb->n_msgs;
+       } else {
+         unsigned char *va;
+-        int len;
++        size_t len;
+         create_ro_mapping(mb->path, &va, &len);
+         if (va) {
+           rescan_mbox(mb, (char *) va, len);
+@@ -852,7 +852,7 @@ int add_mbox_messages(struct database *db)/*{{{*/
+   int any_new = 0;
+   int N;
+   unsigned char *va;
+-  int valen;
++  size_t valen;
+   enum data_to_rfc822_error error;
+ 
+   for (i=0; i<db->n_mboxen; i++) {
+diff --git a/reader.c b/reader.c
+index 71ac5bd..18f0108 100644
+--- a/reader.c
++++ b/reader.c
+@@ -81,7 +81,8 @@ static void read_toktable2_db(char *data, struct toktable2_db *toktable, int sta
+ /*}}}*/
+ struct read_db *open_db(char *filename)/*{{{*/
+ {
+-  int fd, len;
++  int fd;
++  size_t len;
+   char *data;
+   struct stat sb;
+   struct read_db *result;
+diff --git a/reader.h b/reader.h
+index 9b5dfa3..d709cc4 100644
+--- a/reader.h
++++ b/reader.h
+@@ -138,7 +138,7 @@ struct toktable2_db {/*{{{*/
+ struct read_db {/*{{{*/
+   /* Raw file parameters, needed later for munmap */
+   char *data;
+-  int len;
++  size_t len;
+ 
+   /* Pathname information */
+   int n_msgs;
+diff --git a/rfc822.c b/rfc822.c
+index b411f85..9c8e1a4 100644
+--- a/rfc822.c
++++ b/rfc822.c
+@@ -990,7 +990,7 @@ static void scan_status_flags(const char *s, struct headers *hdrs)/*{{{*/
+ 
+ /*{{{ data_to_rfc822() */
+ struct rfc822 *data_to_rfc822(struct msg_src *src,
+-    char *data, int length,
++    char *data, size_t length,
+     enum data_to_rfc822_error *error)
+ {
+   struct rfc822 *result;
+@@ -1265,7 +1265,7 @@ static struct ro_mapping *add_ro_cache(const char *filename, int fd, size_t len)
+ }
+ #endif /* USE_GZIP_MBOX || USE_BZIP_MBOX */
+ 
+-void create_ro_mapping(const char *filename, unsigned char **data, int *len)/*{{{*/
++void create_ro_mapping(const char *filename, unsigned char **data, size_t *len)/*{{{*/
+ {
+   struct stat sb;
+   int fd;
+@@ -1386,7 +1386,7 @@ comp_error:
+   data_alloc_type = ALLOC_MMAP;
+ }
+ /*}}}*/
+-void free_ro_mapping(unsigned char *data, int len)/*{{{*/
++void free_ro_mapping(unsigned char *data, size_t len)/*{{{*/
+ {
+   int r;
+ 
+@@ -1414,7 +1414,7 @@ static struct msg_src *setup_msg_src(char *filename)/*{{{*/
+ /*}}}*/
+ struct rfc822 *make_rfc822(char *filename)/*{{{*/
+ {
+-  int len;
++  size_t len;
+   unsigned char *data;
+   struct rfc822 *result;
+ 
+diff --git a/search.c b/search.c
+index 18b51ee..97967bc 100644
+--- a/search.c
++++ b/search.c
+@@ -681,7 +681,7 @@ static void mbox_terminate(const unsigned char *data, int len, FILE *out)/*{{{*/
+ static void append_file_to_mbox(const char *path, FILE *out)/*{{{*/
+ {
+   unsigned char *data;
+-  int len;
++  size_t len;
+   create_ro_mapping(path, &data, &len);
+   if (data) {
+     fprintf(out, "From mairix@mairix Mon Jan  1 12:34:56 1970\n");
+@@ -698,8 +698,8 @@ static int had_failed_checksum;
+ 
+ static void get_validated_mbox_msg(struct read_db *db, int msg_index,/*{{{*/
+                                    int *mbox_index,
+-                                   unsigned char **mbox_data, int *mbox_len,
+-                                   unsigned char **msg_data,  int *msg_len)
++                                   unsigned char **mbox_data, size_t *mbox_len,
++                                   unsigned char **msg_data,  size_t *msg_len)
+ {
+   /* msg_data==NULL if checksum mismatches */
+   unsigned char *start;
+@@ -738,7 +738,7 @@ static void append_mboxmsg_to_mbox(struct read_db *db, int msg_index, FILE *out)
+ {
+   /* Need to common up code with try_copy_to_path */
+   unsigned char *mbox_start, *msg_start;
+-  int mbox_len, msg_len;
++  size_t mbox_len, msg_len;
+   int mbox_index;
+ 
+   get_validated_mbox_msg(db, msg_index, &mbox_index, &mbox_start, &mbox_len, &msg_start, &msg_len);
+@@ -759,7 +759,7 @@ static void append_mboxmsg_to_mbox(struct read_db *db, int msg_index, FILE *out)
+ static void try_copy_to_path(struct read_db *db, int msg_index, char *target_path)/*{{{*/
+ {
+   unsigned char *data;
+-  int mbox_len, msg_len;
++  size_t mbox_len, msg_len;
+   int mbi;
+   FILE *out;
+   unsigned char *start;
+@@ -1214,7 +1214,7 @@ static int do_search(struct read_db *db, char **args, char *output_path, int sho
+                 unsigned int mbix, msgix;
+                 int start, len, after_end;
+                 unsigned char *mbox_start, *msg_start;
+-                int mbox_len, msg_len;
++                size_t mbox_len, msg_len;
+                 int mbox_index;
+ 
+                 start = db->mtime_table[i];
diff --git a/nixpkgs/pkgs/tools/text/mark/default.nix b/nixpkgs/pkgs/tools/text/mark/default.nix
new file mode 100644
index 000000000000..33d6072c8c81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mark/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mark";
+  version = "9.1.4";
+
+  src = fetchFromGitHub {
+    owner  = "kovetskiy";
+    repo   = "mark";
+    rev    = version;
+    sha256 = "sha256-nAgEegtRT4c2wJzVOY41JgM/JVW5xQjRnhXUzjwqxLY=";
+  };
+
+  vendorHash = "sha256-2rEwZffM+RK0baz8m+fXN2NGYskv4zO67cWC4rx+hfI=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "A tool for syncing your markdown documentation with Atlassian Confluence pages";
+    homepage = "https://github.com/kovetskiy/mark";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ rguevara84 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/markdownlint-cli/default.nix b/nixpkgs/pkgs/tools/text/markdownlint-cli/default.nix
new file mode 100644
index 000000000000..cfe92cf9e42b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/markdownlint-cli/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "markdownlint-cli";
+  version = "0.39.0";
+
+  src = fetchFromGitHub {
+    owner = "igorshubovych";
+    repo = "markdownlint-cli";
+    rev = "v${version}";
+    hash = "sha256-kNnTSSu55zqOwKCPxXhCmGOseDzAWaB6oToyWDSe0Cc=";
+  };
+
+  npmDepsHash = "sha256-mpqLI9wYxp9g6uO/Peau51KS4KdNmVulb6sVO1uDC6c=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "Command line interface for MarkdownLint";
+    homepage = "https://github.com/igorshubovych/markdownlint-cli";
+    license = lib.licenses.mit;
+    mainProgram = "markdownlint";
+    maintainers = with lib.maintainers; [ ambroisie ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/markdownlint-cli2/default.nix b/nixpkgs/pkgs/tools/text/markdownlint-cli2/default.nix
new file mode 100644
index 000000000000..86e1338a09ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/markdownlint-cli2/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "markdownlint-cli2";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "DavidAnson";
+    repo = "markdownlint-cli2";
+    rev = "v${version}";
+    hash = "sha256-qtdR7Rhz+HLZJX82OrN+twOsvFOv99e4BBDVV1UayPI=";
+  };
+
+  npmDepsHash = "sha256-Fx0lDcvzLRVSAX0apKmu1CBfnGmGQR9FQEdhHUtue/c=";
+
+  postPatch = ''
+    ln -s npm-shrinkwrap.json package-lock.json
+  '';
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/DavidAnson/markdownlint-cli2/blob/${src.rev}/CHANGELOG.md";
+    description = "A fast, flexible, configuration-based command-line interface for linting Markdown/CommonMark files with the markdownlint library";
+    homepage = "https://github.com/DavidAnson/markdownlint-cli2";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ natsukium ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/markscribe/default.nix b/nixpkgs/pkgs/tools/text/markscribe/default.nix
new file mode 100644
index 000000000000..d542fe281107
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/markscribe/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "markscribe";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "muesli";
+    repo = "markscribe";
+    rev = "v${version}";
+    hash = "sha256-I8WSG9rMqgf2QADQetlYTSUIQH1Iv8cMVw/3uIwEDPc=";
+  };
+
+  vendorHash = "sha256-leeP2+W+bnYASls3k0l4jpz1rc1mAkMWUfrY2uBUUdQ=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Your personal markdown scribe with template-engine and Git(Hub) & RSS powers";
+    homepage = "https://github.com/muesli/markscribe";
+    changelog = "https://github.com/muesli/markscribe/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/math-review/default.nix b/nixpkgs/pkgs/tools/text/math-review/default.nix
new file mode 100644
index 000000000000..3592aad8bec7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/math-review/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, nix-update-script
+, fetchFromGitLab
+, buildNpmPackage
+, nodejs
+}:
+
+buildNpmPackage rec {
+  pname = "math-preview";
+  version = "5.1.1";
+
+  src = fetchFromGitLab {
+    owner = "matsievskiysv";
+    repo = "math-preview";
+    rev = "v${version}";
+    hash = "sha256-P3TZ/D6D2PvwPV6alSrDEQujzgI8DhK4VOuCC0BCIFo=";
+  };
+
+  npmDepsHash = "sha256-GAPhG3haM9UNdj6tCz8I4j7v6rvNbatdu7NjCeENj3s=";
+  dontNpmBuild = true;
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Emacs preview math inline";
+    license = licenses.gpl3Plus;
+    homepage = "https://gitlab.com/matsievskiysv/math-preview";
+    maintainers = with maintainers; [ renesat ];
+    inherit (nodejs.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mawk/default.nix b/nixpkgs/pkgs/tools/text/mawk/default.nix
new file mode 100644
index 000000000000..54e1e303fd4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mawk/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, buildPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "mawk";
+  version = "1.3.4-20240123";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.invisible-island.net/mawk/mawk-${version}.tgz"
+      "https://invisible-mirror.net/archives/mawk/mawk-${version}.tgz"
+    ];
+    sha256 = "sha256-qOMZqDdEsfH7aYjfoYnWGIf4ZukUDMmknrADsrBlXog=";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  meta = with lib; {
+    description = "Interpreter for the AWK Programming Language";
+    homepage = "https://invisible-island.net/mawk/mawk.html";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mb2md/default.nix b/nixpkgs/pkgs/tools/text/mb2md/default.nix
new file mode 100644
index 000000000000..78ce7f593974
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mb2md/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, makeWrapper, perlPackages }:
+
+let
+  perlDeps = with perlPackages; [ TimeDate ];
+in
+stdenv.mkDerivation rec {
+  version = "3.20";
+  pname = "mb2md";
+
+  src = fetchurl {
+    url = "http://batleth.sapienti-sat.org/projects/mb2md/mb2md-${version}.pl.gz";
+    sha256 = "0bvkky3c90738h3skd2f1b2yy5xzhl25cbh9w2dy97rs86ssjidg";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ];
+
+  unpackPhase = ''
+    sourceRoot=.
+    gzip -d < $src > mb2md.pl
+  '';
+
+  installPhase = ''
+    install -D $sourceRoot/mb2md.pl $out/bin/mb2md
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/mb2md \
+      --set PERL5LIB "${perlPackages.makePerlPath perlDeps}"
+  '';
+
+  meta = with lib; {
+    description = "mbox to maildir tool";
+    license = licenses.publicDomain;
+    platforms = platforms.all;
+    maintainers = [ maintainers.jb55 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-admonish/default.nix b/nixpkgs/pkgs/tools/text/mdbook-admonish/default.nix
new file mode 100644
index 000000000000..1fc72d16c3ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-admonish/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-admonish";
+  version = "1.15.0";
+
+  src = fetchFromGitHub {
+    owner = "tommilligan";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-31lYwvlpjeg0ZysusMY/PClEPB1tgroE9EvL4yX+2s0=";
+  };
+
+  cargoHash = "sha256-Cqxgwf121waOsXUGqQJ+GgUqVWK+5kYUl8SL8MtuExs=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "A preprocessor for mdbook to add Material Design admonishments";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jmgilman Frostman ];
+    homepage = "https://github.com/tommilligan/mdbook-admonish";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-cmdrun/default.nix b/nixpkgs/pkgs/tools/text/mdbook-cmdrun/default.nix
new file mode 100644
index 000000000000..07252461336c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-cmdrun/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-cmdrun";
+  version = "unstable-2023-01-10";
+
+  src = fetchFromGitHub {
+    owner = "FauconFan";
+    repo = pname;
+    rev = "3f6d243cd9de5659f166a5642eb46b2a6d8384e7";
+    hash = "sha256-JuKMAb3vwGTju9U1vaS9I39gObTz0JQQV4uol9SmsfM=";
+  };
+
+  # Tests are outdated currently, application works fine
+  # See for more info: https://github.com/FauconFan/mdbook-cmdrun/issues/2
+  doCheck = false;
+
+  cargoHash = "sha256-h3xCnx6byToZx83uWNLz05F3VIDR0D1NVtSOKPuYeG4=";
+
+  meta = with lib; {
+    description = "mdbook preprocessor to run arbitrary commands";
+    homepage = "https://github.com/FauconFan/mdbook-cmdrun";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pinpox ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-d2/default.nix b/nixpkgs/pkgs/tools/text/mdbook-d2/default.nix
new file mode 100644
index 000000000000..e8a5f169399e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-d2/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-d2";
+  version = "unstable-2023-03-30";
+
+  src = fetchFromGitHub {
+    owner = "danieleades";
+    repo = "mdbook-d2";
+    rev = "93f3037ad9730d134c929cfc90d9bd592a48a1a9";
+    hash = "sha256-cmmOmJHARIBCQQEsffnBh4nc2XEDPBzLPcCrOwfTKS8=";
+  };
+
+  cargoHash = "sha256-ACwEWK5upeRLo7HU+1kKunecnEeZm0ufUaQjJkXM/4I=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  meta = with lib; {
+    description = "D2 diagram generator plugin for MdBook";
+    homepage = "https://github.com/danieleades/mdbook-d2";
+    changelog = "https://github.com/danieleades/mdbook-d2/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ blaggacao ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-emojicodes/default.nix b/nixpkgs/pkgs/tools/text/mdbook-emojicodes/default.nix
new file mode 100644
index 000000000000..0bbcffd28fe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-emojicodes/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-emojicodes";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "blyxyas";
+    repo = "mdbook-emojicodes";
+    rev = "${version}";
+    hash = "sha256-dlvfY2AMBvTl0j9YaT+u4CeWQGGihFD8AZaAK4/hUWU=";
+  };
+
+  cargoHash = "sha256-SkvAtV613+ARk79dB2zRKoLjPgdzoEKQa3JrRw9qBkA=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+  ];
+
+  meta = with lib; {
+    description = "MDBook preprocessor for converting emojicodes (e.g. `: cat :`) into emojis ðŸ±";
+    homepage = "https://github.com/blyxyas/mdbook-emojicodes";
+    changelog = "https://github.com/blyxyas/mdbook-emojicodes/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ blaggacao ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-epub/default.nix b/nixpkgs/pkgs/tools/text/mdbook-epub/default.nix
new file mode 100644
index 000000000000..47c118afa43a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-epub/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, bzip2
+, CoreServices
+}:
+
+let
+  pname = "mdbook-epub";
+  version = "unstable-2022-12-25";
+in rustPlatform.buildRustPackage {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "michael-f-bryan";
+    repo = pname;
+    rev = "2e1e48d0d1a1b4c1b0f866267e6666b41c598225";
+    hash = "sha256-wjn/7dv/Z2OmwvH/XaEeCz/JOvJWlMJ60q5qozzOEWY=";
+  };
+
+  cargoHash = "sha256-4oSpQUYJDK0srABZMwJ8x8jv6DOnLShXSnjLjf8c9Ac=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    bzip2
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreServices
+  ];
+
+  meta = with lib; {
+    description = "mdbook backend for generating an e-book in the EPUB format";
+    homepage = "https://michael-f-bryan.github.io/mdbook-epub";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ yuu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-footnote/default.nix b/nixpkgs/pkgs/tools/text/mdbook-footnote/default.nix
new file mode 100644
index 000000000000..d69c7e4fdd86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-footnote/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, CoreServices
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-footnote";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "daviddrysdale";
+    repo = "mdbook-footnote";
+    rev = "v${version}";
+    hash = "sha256-WUMgm1hwsU9BeheLfb8Di0AfvVQ6j92kXxH2SyG3ses=";
+  };
+
+  cargoSha256 = "sha256-Ig+uVCO5oHIkkvFsKiBiUFzjUgH/Pydn4MVJHb2wKGc=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "A preprocessor for mdbook to support the inclusion of automatically numbered footnotes";
+    homepage = "https://github.com/daviddrysdale/mdbook-footnote";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ brianmcgillion ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-graphviz/default.nix b/nixpkgs/pkgs/tools/text/mdbook-graphviz/default.nix
new file mode 100644
index 000000000000..ddb4f48fd2f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-graphviz/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, CoreServices, graphviz }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-graphviz";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "dylanowen";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-WkjkQll5oETVADYpA8/CIZOJCBnfenGSy49sZ5nAQ+c=";
+  };
+
+  cargoHash = "sha256-whBTPQGozPPTSdXuRx5wamc1yy/EC3wNShQGhRqdY9Y=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  nativeCheckInputs = [ graphviz ];
+
+  meta = with lib; {
+    description = "A preprocessor for mdbook, rendering Graphviz graphs to HTML at build time";
+    homepage = "https://github.com/dylanowen/mdbook-graphviz";
+    changelog = "https://github.com/dylanowen/mdbook-graphviz/releases/tag/v${version}";
+    license = [ licenses.mpl20 ];
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-i18n-helpers/default.nix b/nixpkgs/pkgs/tools/text/mdbook-i18n-helpers/default.nix
new file mode 100644
index 000000000000..e00103b2c4f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-i18n-helpers/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-i18n-helpers";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "mdbook-i18n-helpers";
+    # TODO fix once upstream uses semver for tags again
+    rev = "refs/tags/mdbook-i18n-helpers-${version}";
+    hash = "sha256-+lXIqq8T6jUkvxzvUnvRDmJg6BnT6rNK67kTm3krR0E=";
+  };
+
+  cargoHash = "sha256-xQwag3mlcLKI2ERhp+Sug8FZ6LMxnG4P1JaZNtrzdk8=";
+
+  meta = with lib; {
+    description = "Helpers for a mdbook i18n workflow based on Gettext";
+    homepage = "https://github.com/google/mdbook-i18n-helpers";
+    changelog = "https://github.com/google/mdbook-i18n-helpers/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ teutat3s ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-katex/default.nix b/nixpkgs/pkgs/tools/text/mdbook-katex/default.nix
new file mode 100644
index 000000000000..dc0c9da3c15e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-katex/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchCrate, stdenv, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-katex";
+  version = "0.5.10";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-yq5cKb9Kzto+vM1/FEZhxB/+sHY7H0S1knSEtVklJvk=";
+  };
+
+  cargoHash = "sha256-GtQoWNOs1SU8yoMyxh81weqMkhhRC09tNuTBNPoPj7U=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "A preprocessor for mdbook, rendering LaTeX equations to HTML at build time";
+    homepage = "https://github.com/lzanini/${pname}";
+    license = [ licenses.mit ];
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix b/nixpkgs/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix
new file mode 100644
index 000000000000..07fd2cd634dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-kroki-preprocessor";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "joelcourtney";
+    repo = "mdbook-kroki-preprocessor";
+    rev = "v${version}";
+    hash = "sha256-3BxIhJK0YWZBEbbNwMKixo1icEn+QKJwoskgIEaZcGQ=";
+  };
+
+  cargoHash = "sha256-9jIB80vtskpR3/QYhaA0JFw6IhIsS9VnCnJtE5RfDRk=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Render Kroki diagrams from files or code blocks in mdbook";
+    homepage = "https://github.com/joelcourtney/mdbook-kroki-preprocessor";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ blaggacao ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-linkcheck/default.nix b/nixpkgs/pkgs/tools/text/mdbook-linkcheck/default.nix
new file mode 100644
index 000000000000..c144ea4be954
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-linkcheck/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, Security
+, testers, mdbook-linkcheck }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-linkcheck";
+  version = "0.7.7";
+
+  src = fetchFromGitHub {
+    owner = "Michael-F-Bryan";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ZbraChBHuKAcUA62EVHZ1RygIotNEEGv24nhSPAEj00=";
+  };
+
+  cargoSha256 = "sha256-AwixlCL5ZcLgj9wYeBvkSy2U6J8alXf488l8DMn73w4=";
+
+  buildInputs = if stdenv.isDarwin then [ Security ] else [ openssl ];
+
+  nativeBuildInputs = lib.optionals (!stdenv.isDarwin) [ pkg-config ];
+
+  OPENSSL_NO_VENDOR = 1;
+
+  doCheck = false; # tries to access network to test broken web link functionality
+
+  passthru.tests.version = testers.testVersion { package = mdbook-linkcheck; };
+
+  meta = with lib; {
+    description = "A backend for `mdbook` which will check your links for you";
+    homepage = "https://github.com/Michael-F-Bryan/mdbook-linkcheck";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zhaofengli ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-man/default.nix b/nixpkgs/pkgs/tools/text/mdbook-man/default.nix
new file mode 100644
index 000000000000..541e27eb7e06
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-man/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-man";
+  version = "unstable-2022-11-05";
+
+  src = fetchFromGitHub {
+    owner = "vv9k";
+    repo = pname;
+    rev = "b9537dfbb241d7456835ed7e9d27ab8c8184e5f6";
+    hash = "sha256-ssAk60jnwYzAjseL26/3FaDv1vBAylgdE+vLhWZ8It4=";
+  };
+
+  cargoHash = "sha256-cR86eFhP9Swh+Ff8FNbAfWpWMkliOAyPwDQ6lRvU+nk=";
+
+  meta = with lib; {
+    description = "Generate manual pages from mdBooks";
+    homepage = "https://github.com/vv9k/mdbook-man";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/text/mdbook-mermaid/default.nix b/nixpkgs/pkgs/tools/text/mdbook-mermaid/default.nix
new file mode 100644
index 000000000000..f5bf827cfd7f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-mermaid/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-mermaid";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "badboy";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Qyt5N6Fito++5lpjDXlzupmguue9kc409IpaDkIRgxw=";
+  };
+
+  cargoHash = "sha256-ji38ZNOZ+SDL7+9dvaRIA38EsqMqYWpSmZntexJqcMU=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreServices
+  ];
+
+  meta = with lib; {
+    description = "A preprocessor for mdbook to add mermaid.js support";
+    homepage = "https://github.com/badboy/mdbook-mermaid";
+    changelog = "https://github.com/badboy/mdbook-mermaid/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-open-on-gh/default.nix b/nixpkgs/pkgs/tools/text/mdbook-open-on-gh/default.nix
new file mode 100644
index 000000000000..8ce422340ed0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-open-on-gh/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-open-on-gh";
+  version = "2.4.2";
+
+  src = fetchFromGitHub {
+    owner = "badboy";
+    repo = pname;
+    rev = version;
+    hash = "sha256-ZExmOHvQApGZaepOuf3yXYe8NV3FpMtCqCR1KE6q4no=";
+  };
+
+  cargoHash = "sha256-WLCcYgkrH5fZvv3LZNEolBQUcTZC2URs6bIgzf4BtWU=";
+
+  meta = with lib; {
+    description = "mdbook preprocessor to add a open-on-github link on every page";
+    homepage = "https://github.com/badboy/mdbook-open-on-gh";
+    license = [ licenses.mpl20 ];
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-pagetoc/default.nix b/nixpkgs/pkgs/tools/text/mdbook-pagetoc/default.nix
new file mode 100644
index 000000000000..acfec960829a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-pagetoc/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-pagetoc";
+  version = "0.1.9";
+
+  src = fetchFromGitHub {
+    owner = "slowsage";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-g7UaQZzIdpv4hZgEtoJ6fyPgA9yQPw3LiATwngjHnWE=";
+  };
+
+  cargoHash = "sha256-qSsZaXneGW6zspgy8wHFZvRyTexy6VdySleZv0ieBsI=";
+
+  meta = with lib; {
+    description = "Table of contents for mdbook (in sidebar)";
+    homepage = "https://github.com/slowsage/mdbook-pagetoc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ blaggacao ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-pdf/default.nix b/nixpkgs/pkgs/tools/text/mdbook-pdf/default.nix
new file mode 100644
index 000000000000..18b234a4ec08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-pdf/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, pkg-config
+, rustfmt
+, openssl
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-pdf";
+  version = "0.1.8";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-UPSh0/8HFaLvnU95Gyd+uQaRvWeXlp+HViVUKX0I1jI=";
+  };
+
+  cargoHash = "sha256-WYG2EkfEqjOOelxwivk5srtTNLxEPGX1ztwntvgft1I=";
+
+  nativeBuildInputs = [
+    pkg-config
+    rustfmt
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreServices
+  ];
+
+  # Stop downloading from the Internet to
+  # generate the Chrome Devtools Protocol
+  DOCS_RS=true;
+
+  # # Stop formating with rustfmt, pending version update for
+  # # https://github.com/mdrokz/auto_generate_cdp/pull/8
+  # # to remove rustfmt dependency
+  # DO_NOT_FORMAT=true;
+
+  # No test.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A backend for mdBook written in Rust for generating PDF";
+    homepage = "https://github.com/HollowMan6/mdbook-pdf";
+    changelog = "https://github.com/HollowMan6/mdbook-pdf/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ hollowman6 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-plantuml/default.nix b/nixpkgs/pkgs/tools/text/mdbook-plantuml/default.nix
new file mode 100644
index 000000000000..3e6d13d24489
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-plantuml/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, stdenv
+, rustPlatform
+, pkg-config
+, openssl
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-plantuml";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "sytsereitsma";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-26epwn6j/ZeMAphiFsrLjS0KIewvElr7V3p/EDr4Uqk=";
+  };
+
+  cargoPatches = [
+    # https://github.com/sytsereitsma/mdbook-plantuml/pull/60
+    (fetchpatch {
+      name = "update-mdbook-for-rust-1.64.patch";
+      url = "https://github.com/sytsereitsma/mdbook-plantuml/commit/a1c7fdaff65fbbcc086006f6d180b27e180739e7.patch";
+      hash = "sha256-KXFQxogR6SaoX8snsSYMA8gn1FrQVKMl5l8khxB09WE=";
+    })
+  ];
+
+  cargoHash = "sha256-3HlnhRexfFcAuk1RoatWORMJvYRrnoEft5ys6j3t9S0=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "mdBook preprocessor to render PlantUML diagrams to png images in the book output directory";
+    homepage = "https://github.com/sytsereitsma/mdbook-plantuml";
+    license = [ licenses.mit ];
+    maintainers = with maintainers; [ jcouyang ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook-toc/default.nix b/nixpkgs/pkgs/tools/text/mdbook-toc/default.nix
new file mode 100644
index 000000000000..b9bf0ca208c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook-toc/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-toc";
+  version = "0.14.2";
+
+  src = fetchFromGitHub {
+    owner = "badboy";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-OFNp+kFDafYbzqb7xfPTO885cAjgWfNeDvUPDKq5GJU=";
+  };
+
+  cargoHash = "sha256-95W0gERjwL9r0+DOgxQu+sjSFSThWeShLAqlDQiGxFw=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "A preprocessor for mdbook to add inline Table of Contents support";
+    homepage = "https://github.com/badboy/mdbook-toc";
+    license = [ licenses.mpl20 ];
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/text/mdbook/default.nix b/nixpkgs/pkgs/tools/text/mdbook/default.nix
new file mode 100644
index 000000000000..aacdf243f997
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, nix, rustPlatform, CoreServices, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook";
+  version = "0.4.36";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = "mdBook";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-QQSGnOWRx5KK9eJP759E1V9zFVzvRol5bdJfD9mDr5g=";
+  };
+
+  cargoHash = "sha256-IlD4YI7jsWZw0Dn1PoljmhuIOqejva8HMhU4ULy32yE=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd mdbook \
+      --bash <($out/bin/mdbook completions bash) \
+      --fish <($out/bin/mdbook completions fish) \
+      --zsh  <($out/bin/mdbook completions zsh )
+  '';
+
+  passthru = {
+    tests = {
+      inherit nix;
+    };
+  };
+
+  meta = with lib; {
+    description = "Create books from MarkDown";
+    homepage = "https://github.com/rust-lang/mdBook";
+    changelog = "https://github.com/rust-lang/mdBook/blob/v${version}/CHANGELOG.md";
+    license = [ licenses.mpl20 ];
+    maintainers = with maintainers; [ havvy Frostman matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdcat/default.nix b/nixpkgs/pkgs/tools/text/mdcat/default.nix
new file mode 100644
index 000000000000..6fa512c39bf3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdcat/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, asciidoctor
+, openssl
+, Security
+, SystemConfiguration
+, ansi2html
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdcat";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "swsnr";
+    repo = "mdcat";
+    rev = "mdcat-${version}";
+    hash = "sha256-2ThjIv77kdjHyOpGcQplYZXPdu+cN4oBnyHRGptN7f4=";
+  };
+
+  nativeBuildInputs = [ pkg-config asciidoctor installShellFiles ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+
+  cargoHash = "sha256-y828L8HHkFeem/76yizQWX7DpCGQP+HzJP+pQnxAn70=";
+
+  nativeCheckInputs = [ ansi2html ];
+  # Skip tests that use the network and that include files.
+  checkFlags = [
+    "--skip magic::tests::detect_mimetype_of_larger_than_magic_param_bytes_max_length"
+    "--skip magic::tests::detect_mimetype_of_magic_param_bytes_max_length"
+    "--skip magic::tests::detect_mimetype_of_png_image"
+    "--skip magic::tests::detect_mimetype_of_svg_image"
+    "--skip resources::tests::read_url_with_http_url_fails_when_size_limit_is_exceeded"
+    "--skip resources::tests::read_url_with_http_url_fails_when_status_404"
+    "--skip resources::tests::read_url_with_http_url_returns_content_when_status_200"
+    "--skip iterm2_tests_render_md_samples_images_md"
+  ];
+
+  postInstall = ''
+    installManPage $releaseDir/build/mdcat-*/out/mdcat.1
+    ln -sr $out/bin/{mdcat,mdless}
+
+    for bin in mdcat mdless; do
+      installShellCompletion \
+        --bash $releaseDir/build/mdcat-*/out/completions/$bin.bash \
+        --fish $releaseDir/build/mdcat-*/out/completions/$bin.fish \
+        --zsh $releaseDir/build/mdcat-*/out/completions/_$bin
+    done
+  '';
+
+  meta = with lib; {
+    description = "cat for markdown";
+    homepage = "https://github.com/swsnr/mdcat";
+    changelog = "https://github.com/swsnr/mdcat/releases/tag/mdcat-${version}";
+    license = with licenses; [ mpl20 ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdhtml/default.nix b/nixpkgs/pkgs/tools/text/mdhtml/default.nix
new file mode 100644
index 000000000000..4c68eb32d9dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdhtml/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitea
+}:
+
+buildGoModule rec {
+  pname = "mdhtml";
+  version = "1.0";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "Tomkoid";
+    repo = pname;
+    rev = version;
+    hash = "sha256-Fv5XpWA2ebqXdA+46gZQouuZ3XxH4WDj/W6xJ0ETg8E=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Really simple CLI Markdown to HTML converter with styling support";
+    homepage = "https://codeberg.org/Tomkoid/mdhtml";
+    license = licenses.mit;
+    changelog = "https://codeberg.org/Tomkoid/mdhtml/releases";
+    maintainers = with maintainers; [ tomkoid ];
+    mainProgram = "mdhtml";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mecab/base.nix b/nixpkgs/pkgs/tools/text/mecab/base.nix
new file mode 100644
index 000000000000..ea572104238c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mecab/base.nix
@@ -0,0 +1,23 @@
+{ fetchurl, libiconv }:
+
+finalAttrs: {
+  version = "0.996";
+
+  src = fetchurl {
+    url = "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE";
+    name = "mecab-${finalAttrs.version}.tar.gz";
+    hash = "sha256-4HMyV4MTW3LmZhRceBu0j62lg9UiT7JJD7bBQDumnFk=";
+  };
+
+  buildInputs = [ libiconv ];
+
+  configureFlags = [
+    "--with-charset=utf8"
+  ];
+
+  # mecab uses several features that have been removed in C++17.
+  # Force the language mode to C++14, so that it can compile with clang 16.
+  makeFlags = [ "CXXFLAGS=-std=c++14" ];
+
+  doCheck = true;
+}
diff --git a/nixpkgs/pkgs/tools/text/mecab/default.nix b/nixpkgs/pkgs/tools/text/mecab/default.nix
new file mode 100644
index 000000000000..f1f9fc6503c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mecab/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, mecab-ipadic, libiconv }:
+
+let
+  mecab-base = import ./base.nix { inherit fetchurl libiconv; };
+in
+stdenv.mkDerivation (finalAttrs: ((mecab-base finalAttrs) // {
+  pname = "mecab";
+
+  postInstall = ''
+    mkdir -p $out/lib/mecab/dic
+    ln -s ${mecab-ipadic} $out/lib/mecab/dic/ipadic
+  '';
+
+  meta = with lib; {
+    description = "Japanese morphological analysis system";
+    homepage = "http://taku910.github.io/mecab";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    mainProgram = "mecab";
+    maintainers = with maintainers; [ auntie ];
+  };
+}))
diff --git a/nixpkgs/pkgs/tools/text/mecab/ipadic.nix b/nixpkgs/pkgs/tools/text/mecab/ipadic.nix
new file mode 100644
index 000000000000..61d23f87a8ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mecab/ipadic.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, mecab-nodic }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "mecab-ipadic";
+  version = "2.7.0-20070801";
+
+  src = fetchurl {
+    url = "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM";
+    name = "mecab-ipadic-${finalAttrs.version}.tar.gz";
+    hash = "sha256-ti9SfYgcUEV2uu2cbvZWFVRlixdc5q4AlqYDB+SeNSM=";
+  };
+
+  buildInputs = [ mecab-nodic ];
+
+  configureFlags = [
+    "--with-charset=utf8"
+    "--with-dicdir=${placeholder "out"}"
+  ];
+})
diff --git a/nixpkgs/pkgs/tools/text/mecab/nodic.nix b/nixpkgs/pkgs/tools/text/mecab/nodic.nix
new file mode 100644
index 000000000000..a40e2a19698d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mecab/nodic.nix
@@ -0,0 +1,8 @@
+{ stdenv, fetchurl, libiconv }:
+
+let
+  mecab-base = import ./base.nix { inherit fetchurl libiconv; };
+in
+stdenv.mkDerivation (finalAttrs: ((mecab-base finalAttrs) // {
+  pname = "mecab-nodic";
+}))
diff --git a/nixpkgs/pkgs/tools/text/miller/default.nix b/nixpkgs/pkgs/tools/text/miller/default.nix
new file mode 100644
index 000000000000..f1fd15b1fb96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/miller/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "miller";
+  version = "6.11.0";
+
+  src = fetchFromGitHub {
+    owner = "johnkerl";
+    repo = "miller";
+    rev = "v${version}";
+    sha256 = "sha256-MmQBj3ANiObyTsAW55Bh9p94Pu+ynySaxHjHjpBacno=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  vendorHash = "sha256-K9B++jinB8iRWb96Lha/gM8/3vPQNd4LoZggGXh7VD4=";
+
+  postInstall = ''
+    mkdir -p $man/share/man/man1
+    mv ./man/mlr.1 $man/share/man/man1
+  '';
+
+  subPackages = [ "cmd/mlr" ];
+
+  meta = with lib; {
+    description = "Like awk, sed, cut, join, and sort for data formats such as CSV, TSV, JSON, JSON Lines, and positionally-indexed";
+    homepage    = "https://github.com/johnkerl/miller";
+    license     = licenses.bsd2;
+    maintainers = with maintainers; [ mstarzyk ];
+    mainProgram = "mlr";
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mir-qualia/default.nix b/nixpkgs/pkgs/tools/text/mir-qualia/default.nix
new file mode 100644
index 000000000000..f532daf8c442
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mir-qualia/default.nix
@@ -0,0 +1,21 @@
+{ lib, pythonPackages, fetchurl }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "mir.qualia";
+  version = "2.0.0";
+  doCheck = false; # 2.0.0-released pytests are broken
+
+  buildInputs = with pythonPackages; [ pytest ];
+
+  src = fetchurl {
+    url = "mirror://pypi/m/mir.qualia/mir.qualia-${version}.tar.gz";
+    sha256 = "1ybq6jb5clh9hw0sp3idp4hjv2gkm9yiaph48gcc208affflc8m9";
+  };
+
+  meta = {
+    description = "Dynamically enable sections of config files";
+    homepage = "https://github.com/darkfeline/mir.qualia";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.srhb ] ;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mmdoc/default.nix b/nixpkgs/pkgs/tools/text/mmdoc/default.nix
new file mode 100644
index 000000000000..50b7f6dcb9df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mmdoc/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmark-gfm
+, xxd
+, fastJson
+, libzip
+, ninja
+, meson
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mmdoc";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "ryantm";
+    repo = "mmdoc";
+    rev = version;
+    hash = "sha256-NS8i5xvCwq0pSdfxnaxnpuwmDAkfH6Tkc4N2F6aGvWY=";
+  };
+
+  nativeBuildInputs = [ ninja meson pkg-config xxd ];
+
+  buildInputs = [ cmark-gfm fastJson libzip ];
+
+  meta = with lib; {
+    description = "Minimal Markdown Documentation";
+    homepage = "https://github.com/ryantm/mmdoc";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ ryantm ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/morsel/default.nix b/nixpkgs/pkgs/tools/text/morsel/default.nix
new file mode 100644
index 000000000000..b761b03e83d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/morsel/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "morsel";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "SamLee514";
+    repo = "morsel";
+    rev = "v${version}";
+    hash = "sha256-bb+88GIyd92kHJAs25mJ9vmq0Ha2q0fdHnpTXhX2BFE=";
+  };
+
+  cargoHash = "sha256-XRl71n+rV6MTQMz957K5/25SX9HvYVW6qAuHTdfRLLs=";
+
+  meta = with lib; {
+    description = "Command line tool to translate morse code input to text in real time";
+    homepage = "https://github.com/SamLee514/morsel";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mpage/default.nix b/nixpkgs/pkgs/tools/text/mpage/default.nix
new file mode 100644
index 000000000000..5033d53fedaa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mpage/default.nix
@@ -0,0 +1,32 @@
+{ fetchurl, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "mpage";
+  version = "2.5.8";
+
+  src = fetchurl {
+    url = "https://www.mesa.nl/pub/mpage/mpage-${version}.tgz";
+    sha256 = "sha256-I1HpHSV5SzWN9mGPF6cBOijTUOwgQI/gb4Ej3EZz/pM=";
+  };
+
+  postPatch = ''
+    sed -i "Makefile" -e "s|^ *PREFIX *=.*$|PREFIX = $out|g"
+    substituteInPlace Makefile --replace 'gcc' '${stdenv.cc.targetPrefix}cc'
+  '';
+
+  meta = {
+    description = "Many-to-one page printing utility";
+
+    longDescription = ''
+      Mpage reads plain text files or PostScript documents and prints
+      them on a PostScript printer with the text reduced in size so
+      that several pages appear on one sheet of paper.  This is useful
+      for viewing large printouts on a small amount of paper.  It uses
+      ISO 8859.1 to print 8-bit characters.
+    '';
+
+    license = "liberal";  # a non-copyleft license, see `Copyright' file
+    homepage = "http://www.mesa.nl/pub/mpage/";
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mrkd/default.nix b/nixpkgs/pkgs/tools/text/mrkd/default.nix
new file mode 100644
index 000000000000..b43b6cfdf6ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mrkd/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      # https://github.com/refi64/mrkd/pull/6
+      mistune = super.mistune.overridePythonAttrs (old: rec {
+        version = "0.8.4";
+        src = fetchPypi {
+          inherit (old) pname;
+          inherit version;
+          hash = "sha256-WaNCnbU8ULXGvMigf4hIywDX3IvbQxpKtBkg0gHUdW4=";
+        };
+        meta = old.meta // {
+          knownVulnerabilities = [
+            "CVE-2022-34749"
+          ];
+        };
+      });
+    };
+  };
+in python.pkgs.buildPythonApplication rec {
+  pname = "mrkd";
+  version = "0.2.0";
+
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "456f8c1be99da268554b29c6b5383532e58119def5a65d85270bc6a0ecc26aaf";
+  };
+
+  propagatedBuildInputs = with python.pkgs; [
+    jinja2
+    mistune
+    pygments
+    setuptools
+  ];
+
+  pythonImportsCheck = [ "mrkd" ];
+
+  meta = with lib; {
+    description = "Write man pages using Markdown, and convert them to Roff or HTML";
+    homepage = "https://github.com/refi64/mrkd";
+    license = licenses.bsd2;
+    mainProgram = "mrkd";
+    maintainers = with maintainers; [ prusnak ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/data/default.nix b/nixpkgs/pkgs/tools/text/multitran/data/default.nix
new file mode 100644
index 000000000000..78b6ee79ea0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/data/default.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchurl} :
+
+# This package requires a locale ru_RU.cp1251 locale entry.
+# Waiting for a better idea, I created it modifying a store file using:
+#   localedef -f CP1251 -i ru_RU ru_RU.CP1251
+# The store file mentioned is in "${glibc.out}/lib/locale/locale-archive"
+
+stdenv.mkDerivation {
+  pname = "multitran-data";
+  version = "0.3";
+
+  src = fetchurl {
+      url = "mirror://sourceforge/multitran/multitran-data.tar.bz2";
+      sha256 = "9c2ff5027c2fe72b0cdf056311cd7543f447feb02b455982f20d4a3966b7828c";
+  };
+
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' Makefile
+  '';
+
+  meta = {
+    homepage = "https://multitran.sourceforge.net/";
+    description = "Multitran data english-russian";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/libbtree/default.nix b/nixpkgs/pkgs/tools/text/multitran/libbtree/default.nix
new file mode 100644
index 000000000000..c10a65c271d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/libbtree/default.nix
@@ -0,0 +1,21 @@
+{lib, stdenv, fetchurl} :
+
+stdenv.mkDerivation rec {
+  pname = "libbtree";
+  version = "0.0.1alpha2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/multitran/libbtree-${version}.tar.bz2";
+    sha256 = "34a584e45058950337ff9342693b6739b52c3ce17e66440526c4bd6f9575802c";
+  };
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' src/Makefile;
+  '';
+
+  meta = {
+    homepage = "https://multitran.sourceforge.net/";
+    description = "Multitran lib: library for reading Multitran's BTREE database format";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/libfacet/default.nix b/nixpkgs/pkgs/tools/text/multitran/libfacet/default.nix
new file mode 100644
index 000000000000..b035ce32cbf1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/libfacet/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, libmtsupport }:
+
+stdenv.mkDerivation rec {
+  pname = "libfacet";
+  version = "0.0.1alpha2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/multitran/libfacet-${version}.tar.bz2";
+    sha256 = "dc53351c4035a3c27dc6c1d0410e808346fbc107e7e7c112ec65c59d0df7a144";
+  };
+
+  buildInputs = [ libmtsupport ];
+
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' \
+      -e 's@/usr/include/mt/support@${libmtsupport}/include/mt/support@' \
+      src/Makefile;
+  '';
+
+  meta = {
+    homepage = "https://multitran.sourceforge.net/";
+    description = "Multitran lib: enchanced locale facets";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/libmtquery/default.nix b/nixpkgs/pkgs/tools/text/multitran/libmtquery/default.nix
new file mode 100644
index 000000000000..41f17560d286
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/libmtquery/default.nix
@@ -0,0 +1,31 @@
+{lib, stdenv, fetchurl, libmtsupport, libfacet, libbtree, multitrandata } :
+
+stdenv.mkDerivation rec {
+  pname = "libmtquery";
+  version = "0.0.1alpha3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/multitran/libmtquery-${version}.tar.bz2";
+    sha256 = "e24c7c15772445f1b14871928d84dd03cf93bd88f9d2b2ed1bf0257c2cf2b15e";
+  };
+
+  buildInputs = [ libmtsupport libfacet libbtree multitrandata ];
+
+  NIX_LDFLAGS = "-lbtree";
+
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' \
+      -e 's@/usr/include/mt/support@${libmtsupport}/include/mt/support@' \
+      -e 's@/usr/include/btree@${libbtree}/include/btree@' \
+      -e 's@/usr/include/facet@${libfacet}/include/facet@' \
+      src/Makefile testsuite/Makefile;
+    sed -i -e 's@/usr/share/multitran@${multitrandata}/share/multitran@' src/config.cc
+  '';
+
+  meta = {
+    homepage = "https://multitran.sourceforge.net/";
+    description = "Multitran lib: main engine to query translations";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/libmtsupport/default.nix b/nixpkgs/pkgs/tools/text/multitran/libmtsupport/default.nix
new file mode 100644
index 000000000000..06317fe3043b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/libmtsupport/default.nix
@@ -0,0 +1,21 @@
+{lib, stdenv, fetchurl} :
+
+stdenv.mkDerivation rec {
+  pname = "libmtsupport";
+  version = "0.0.1alpha2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/multitran/libmtsupport-${version}.tar.bz2";
+    sha256 = "481f0f1ec15d7274f1e4eb93e7d060df10a181efd037eeff5e8056d283a9298b";
+  };
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' src/Makefile;
+  '';
+
+  meta = {
+    homepage = "https://multitran.sourceforge.net/";
+    description = "Multitran lib: basic useful functions";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix b/nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix
new file mode 100644
index 000000000000..625f06734b2e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix
@@ -0,0 +1,34 @@
+{lib, stdenv, fetchurl, libmtsupport, libfacet, libbtree, libmtquery, help2man} :
+
+stdenv.mkDerivation rec {
+  pname = "mt-utils";
+  version = "0.0.1alpha3";
+
+  src = fetchurl {
+      url = "mirror://sourceforge/multitran/mt-utils-${version}.tar.bz2";
+      sha256 = "e407702c90c5272882386914e1eeca5f6c5039393af9a44538536b94867b0a0e";
+  };
+
+  buildInputs = [ libmtsupport libfacet libbtree libmtquery help2man ];
+
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' \
+      -e 's@/usr/include/mt/support@${libmtsupport}/include/mt/support@' \
+      -e 's@/usr/include/btree@${libbtree}/include/btree@' \
+      -e 's@/usr/include/facet@${libfacet}/include/facet@' \
+      -e 's@/usr/include/mt/query@${libmtquery}/include/mt/query@' \
+      -e 's@-lmtquery@-lmtquery -lmtsupport -lfacet@' \
+      src/Makefile;
+    # Fixing multibyte locale output
+    sed -i -e 's@message.length()@message.length()*5@' \
+      src/converter.cc;
+  '';
+
+  meta = {
+    homepage = "https://multitran.sourceforge.net/";
+    description = "Multitran: simple command line utilities for dictionary maintenance";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mw/default.nix b/nixpkgs/pkgs/tools/text/mw/default.nix
new file mode 100644
index 000000000000..c85b01828037
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mw/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildNpmPackage
+}:
+
+buildNpmPackage rec {
+  pname = "mw";
+  version = "unstable-2023-08-04";
+
+  src = fetchFromGitHub {
+    owner = "mark-when";
+    repo = "mw";
+    rev = "a8676da1c7812a051456fabcb980c52a72f6e75e";
+    hash = "sha256-i95WuTH8qY+0PYQA9kOykQL+4d4oB2Hlvg9sfGtDeCo=";
+  };
+
+  npmDepsHash = "sha256-D1hTaoM4j81qrrLMoKJ7OxJTfRoht3/yqgJs95EFxY4=";
+
+  # correctly substitute the usage message
+  postPatch = ''
+    substituteInPlace src/index.ts  --replace \
+    '.usage("$0' '.usage("mw'
+  '';
+
+  meta = {
+    changelog = "https://github.com/mark-when/mw/blob/${src.rev}/CHANGELOG.md";
+    description = "Markwhen CLI";
+    homepage = "https://github.com/mark-when/mw";
+    license = lib.licenses.mit;
+    longDescription = ''
+      Markwhen is an interactive text-to-timeline tool. Write markdown-ish text and it gets converted into a nice looking cascading timeline.
+    '';
+    mainProgram = "mw";
+    maintainers = with lib.maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/namazu/default.nix b/nixpkgs/pkgs/tools/text/namazu/default.nix
new file mode 100644
index 000000000000..e748515b0513
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/namazu/default.nix
@@ -0,0 +1,34 @@
+{ fetchurl, lib, stdenv, perl, perlPackages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "namazu";
+  version = "2.0.21";
+
+  src = fetchurl {
+    url = "http://namazu.org/stable/${pname}-${version}.tar.gz";
+    sha256 = "1xvi7hrprdchdpzhg3fvk4yifaakzgydza5c0m50h1yvg6vay62w";
+  };
+
+  buildInputs = [ perl perlPackages.FileMMagic ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/mknmz --set PERL5LIB ${perlPackages.makeFullPerlPath [ perlPackages.FileMMagic ]}
+  '';
+
+  meta = {
+    description = "Full-text search engine";
+
+    longDescription = ''
+      Namazu is a full-text search engine intended for easy use.  Not
+      only does it work as a small or medium scale Web search engine,
+      but also as a personal search system for email or other files.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+    homepage = "http://namazu.org/";
+
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;  # arbitrary choice
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/nerdfix/default.nix b/nixpkgs/pkgs/tools/text/nerdfix/default.nix
new file mode 100644
index 000000000000..8bb9113f013a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/nerdfix/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nerdfix";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "loichyan";
+    repo = "nerdfix";
+    rev = "v${version}";
+    hash = "sha256-V9f39/9k9kYjngYOSXJYblaKDABPCZbVWxD0p3ZWzlY=";
+  };
+
+  cargoHash = "sha256-PkUQZPLzvVJ7s1D9TkMmgIVQiR/E79BRCYmjZVcHIv8=";
+
+  meta = with lib; {
+    description = "Nerdfix helps you to find/fix obsolete nerd font icons in your project";
+    homepage = "https://github.com/loichyan/nerdfix";
+    changelog = "https://github.com/loichyan/nerdfix/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/nkf/default.nix b/nixpkgs/pkgs/tools/text/nkf/default.nix
new file mode 100644
index 000000000000..9a70ea9461af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/nkf/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "nkf";
+  version = "2.1.5";
+
+  src = fetchurl {
+    url = "mirror://osdn/nkf/70406/${pname}-${version}.tar.gz";
+    sha256 = "0i5dbcb9aipwr8ym4mhvgf1in3frl6y8h8x96cprz9s7b11xz9yi";
+  };
+
+  patches = [
+    # Pull upstream fix for parllel build failures
+    (fetchpatch {
+      name = "parallel-install.patch";
+      url = "http://git.osdn.net/view?p=nkf/nkf.git;a=patch;h=9ccff5975bec7963e591e042e1ab1139252a4dc9";
+      sha256 = "00f0x414gfch650b20w0yj5x2bd67hchmadl7v54lk3vdgkc6jwj";
+    })
+  ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = {
+    description = "Tool for converting encoding of Japanese text";
+    homepage = "https://nkf.osdn.jp/";
+    license = lib.licenses.zlib;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.auntie ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/nltk_data/default.nix b/nixpkgs/pkgs/tools/text/nltk_data/default.nix
new file mode 100644
index 000000000000..6445dd8c06e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/nltk_data/default.nix
@@ -0,0 +1,61 @@
+{ lib, newScope, fetchFromGitHub, unzip, stdenvNoCC }:
+let
+  base = {
+    version = "unstable-2023-02-02";
+    nativeBuildInputs = [ unzip ];
+    dontBuild = true;
+    meta = with lib; {
+      description = "NLTK Data";
+      homepage = "https://github.com/nltk/nltk_data";
+      license = licenses.asl20;
+      platforms = platforms.all;
+      maintainers = with maintainers; [ happysalada ];
+    };
+  };
+  makeNltkDataPackage = {pname, location, hash}:
+    let
+      src = fetchFromGitHub {
+        owner = "nltk";
+        repo = "nltk_data";
+        rev = "5db857e6f7df11eabb5e5665836db9ec8df07e28";
+        inherit hash;
+        sparseCheckout = [ "packages/${location}/${pname}.zip" ];
+      };
+    in
+    stdenvNoCC.mkDerivation (base // {
+      inherit pname src;
+      version = base.version;
+      installPhase = ''
+        runHook preInstall
+
+        mkdir -p $out
+        unzip ${src}/packages/${location}/${pname}.zip
+        mkdir -p $out/${location}
+        cp -R ${pname}/ $out/${location}
+
+        runHook postInstall
+      '';
+    });
+in
+lib.makeScope newScope (self: {
+  punkt = makeNltkDataPackage ({
+    pname = "punkt";
+    location = "tokenizers";
+    hash = "sha256-rMkgn3xzmSJNv8//kqbPF2Xq3Gf16lgA1Wx8FPYbaQo=";
+  });
+  averaged_perceptron_tagger = makeNltkDataPackage ({
+    pname = "averaged_perceptron_tagger";
+    location = "taggers";
+    hash = "sha256-ilTs4HWPUoHxQb4kWEy3wJ6QsE/98+EQya44gtV2inw=";
+  });
+  snowball_data = makeNltkDataPackage ({
+    pname = "snowball_data";
+    location = "stemmers";
+    hash = "sha256-Y6LERPtaRbCtWmJCvMAd2xH02xdrevZBFNYvP9N4+3s=";
+  });
+  stopwords = makeNltkDataPackage ({
+    pname = "stopwords";
+    location = "corpora";
+    hash = "sha256-Rj1jnt6IDEmBbSIHHueyEvPmdE4EZ6/bJ3qehniebbk=";
+  });
+})
diff --git a/nixpkgs/pkgs/tools/text/num-utils/default.nix b/nixpkgs/pkgs/tools/text/num-utils/default.nix
new file mode 100644
index 000000000000..14784a4e8cfc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/num-utils/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "num-utils";
+  version = "0.5";
+
+  src = fetchurl {
+    url = "https://suso.suso.org/programs/num-utils/downloads/num-utils-${version}.tar.gz";
+    sha256 = "0kn6yskjww2agcqvas5l2xp55mp4njdxqkdicchlji3qzih2fn83";
+  };
+
+  buildInputs = [ perl ];
+
+  patchPhase = ''
+    substituteInPlace Makefile --replace "-o 0 -g 0" "" --replace "\$(RPMDIR)" ""
+  '';
+  makeFlags = [
+    "TOPDIR=${placeholder "out"}"
+    "PERL=${perl}/bin/perl"
+  ];
+
+  meta = with lib; {
+    description = "Programs for dealing with numbers from the command line";
+    homepage = "https://suso.suso.org/xulu/Num-utils";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.catern ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/numdiff/default.nix b/nixpkgs/pkgs/tools/text/numdiff/default.nix
new file mode 100644
index 000000000000..317d29003cd3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/numdiff/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, libintl }:
+
+
+stdenv.mkDerivation rec {
+  pname = "numdiff";
+  version = "5.9.0";
+
+  src = fetchurl {
+    url = "mirror://savannah/numdiff/numdiff-${version}.tar.gz";
+    sha256 = "1vzmjh8mhwwysn4x4m2vif7q2k8i19x8azq7pzmkwwj4g48lla47";
+  };
+
+  buildInputs = [ libintl ];
+
+  meta = with lib; {
+    description = ''
+      A little program that can be used to compare putatively similar files
+      line by line and field by field, ignoring small numeric differences
+      or/and different numeric formats
+    '';
+    homepage = "https://www.nongnu.org/numdiff/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/odt2txt/default.nix b/nixpkgs/pkgs/tools/text/odt2txt/default.nix
new file mode 100644
index 000000000000..0eb18e8435d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/odt2txt/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, zlib, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "odt2txt";
+  version = "0.5";
+
+  src = fetchurl {
+    url = "${meta.homepage}/archive/v${version}.tar.gz";
+    sha256 = "23a889109ca9087a719c638758f14cc3b867a5dcf30a6c90bf6a0985073556dd";
+  };
+
+  configurePhase="export makeFlags=\"DESTDIR=$out\"";
+
+  buildInputs = [ zlib libiconv ];
+
+  meta = {
+    description = "Simple .odt to .txt converter";
+    homepage = "https://github.com/dstosberg/odt2txt";
+    platforms = lib.platforms.all;
+    license = lib.licenses.gpl2;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/opencc/default.nix b/nixpkgs/pkgs/tools/text/opencc/default.nix
new file mode 100644
index 000000000000..4093554604f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/opencc/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, cmake, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "opencc";
+  version = "1.1.7";
+
+  src = fetchFromGitHub {
+    owner = "BYVoid";
+    repo = "OpenCC";
+    rev = "ver.${version}";
+    sha256 = "sha256-N7nazA0xoQ2ewOGDiJg1vBBYMdF1/qiCfNjG5CFFbuk=";
+  };
+
+  nativeBuildInputs = [ cmake python3 ];
+
+  meta = with lib; {
+    homepage = "https://github.com/BYVoid/OpenCC";
+    license = licenses.asl20;
+    description = "A project for conversion between Traditional and Simplified Chinese";
+    longDescription = ''
+      Open Chinese Convert (OpenCC) is an opensource project for conversion between
+      Traditional Chinese and Simplified Chinese, supporting character-level conversion,
+      phrase-level conversion, variant conversion and regional idioms among Mainland China,
+      Taiwan and Hong kong.
+    '';
+    maintainers = with maintainers; [ sifmelcara ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ov/default.nix b/nixpkgs/pkgs/tools/text/ov/default.nix
new file mode 100644
index 000000000000..d74d4bc06182
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ov/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, pandoc
+, makeWrapper
+, testers
+, ov
+}:
+
+buildGoModule rec {
+  pname = "ov";
+  version = "0.33.3";
+
+  src = fetchFromGitHub {
+    owner = "noborus";
+    repo = "ov";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-dKAZ8rcm1J3jRfOyLz74YuVv0hZ3iWXR1slBTu5CtYU=";
+  };
+
+  vendorHash = "sha256-6Ik//r6JJ2n9lXr6JZ6BGIIL7yXXray+flEwQ0IKyA4=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.Version=v${version}"
+    "-X=main.Revision=${src.rev}"
+  ];
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [
+    installShellFiles
+    pandoc
+    makeWrapper
+  ];
+
+  outputs = [ "out" "doc" ];
+
+  postInstall = ''
+    installShellCompletion --cmd ov \
+      --bash <($out/bin/ov completion bash) \
+      --fish <($out/bin/ov completion fish) \
+      --zsh <($out/bin/ov completion zsh)
+
+    mkdir -p $out/share/$name
+    cp $src/ov-less.yaml $out/share/$name/less-config.yaml
+    makeWrapper $out/bin/ov $out/bin/ov-less --add-flags "--config $out/share/$name/less-config.yaml"
+
+    mkdir -p $doc/share/doc/$name
+    pandoc -s < $src/README.md > $doc/share/doc/$name/README.html
+    mkdir -p $doc/share/$name
+    cp $src/ov.yaml $doc/share/$name/sample-config.yaml
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = ov;
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Feature-rich terminal-based text viewer";
+    homepage = "https://noborus.github.io/ov";
+    changelog = "https://github.com/noborus/ov/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ farcaller figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/papeer/default.nix b/nixpkgs/pkgs/tools/text/papeer/default.nix
new file mode 100644
index 000000000000..4084d49373fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/papeer/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "papeer";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "lapwat";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-nEt2rxI9slrEkbpMpXQM6+jO0QWQsuLdOswXPCSozJs=";
+  };
+
+  vendorHash = "sha256-3QRSdkx9p0H+zPB//bpWCBKKjKjrx0lHMk5lFm+U7pA=";
+
+  doCheck = false; # uses network
+
+  meta = {
+    description = "Convert websites into ebooks and markdown";
+    homepage = "https://papeer.tech/";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/paperoni/Cargo.lock b/nixpkgs/pkgs/tools/text/paperoni/Cargo.lock
new file mode 100644
index 000000000000..e08a993ea54a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/paperoni/Cargo.lock
@@ -0,0 +1,3014 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aead"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561"
+dependencies = [
+ "aes-soft",
+ "aesni",
+ "cipher",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "ghash",
+ "subtle",
+]
+
+[[package]]
+name = "aes-soft"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072"
+dependencies = [
+ "cipher",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aesni"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce"
+dependencies = [
+ "cipher",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "async-channel"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-lite",
+ "log 0.4.17",
+ "parking",
+ "polling",
+ "rustix",
+ "slab",
+ "socket2",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log 0.4.17",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae"
+
+[[package]]
+name = "async-trait"
+version = "0.1.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base-x"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+ "log 0.4.17",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cipher"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+ "yaml-rust",
+]
+
+[[package]]
+name = "colored"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "comfy-table"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c93d79ba722818d1a6aedfbe2cf4889330c856d0c6772951efbbf3dd283c070a"
+dependencies = [
+ "crossterm",
+ "strum",
+ "strum_macros",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "console"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "const_fn"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "cookie"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951"
+dependencies = [
+ "aes-gcm",
+ "base64",
+ "hkdf",
+ "hmac",
+ "percent-encoding",
+ "rand 0.8.5",
+ "sha2",
+ "time 0.2.27",
+ "version_check",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cpuid-bool"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ebde6a9dd5e331cd6c6f48253254d117642c31653baa475e394657c59c1f7d"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot 0.11.2",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a6966607622438301997d3dac0d2f6e9a90c68bb6bc1785ea98456ab93c0507"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "cssparser"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa 0.4.8",
+ "matches",
+ "phf",
+ "proc-macro2",
+ "quote",
+ "smallvec",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cssparser-macros"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ctr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "curl"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.61+curl-8.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14d05c10f541ae6f3bc5b3d923c20001f47db7d5f0b2bc6ad16490133842db79"
+dependencies = [
+ "cc",
+ "libc",
+ "libnghttp2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi",
+]
+
+[[package]]
+name = "darling"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f2c43f534ea4b0b049015d00269734195e6d3f0f6635cb692251aca6f9f8b3c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e91455b86830a1c21799d94524df0845183fa55bafd9aa137b01c7d1065fa36"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.10.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29b5acf0dea37a7f66f7b25d2c5e93fd46f8f6968b1a5d7a3e02e97768afc95a"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d13202debe11181040ae9063d739fa32cfcaaebe2275fe387703460ae2365b30"
+dependencies = [
+ "derive_builder_macro",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66e616858f6187ed828df7c64a6d71720d83767a7f19740b2d1b6fe6327b36e5"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder_macro"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58a94ace95092c5acb1e97a7e846b310cfbd499652f72297da7493f618a98d73"
+dependencies = [
+ "derive_builder_core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version 0.4.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "directories"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e69600ff1703123957937708eb27f7a564e48885c537782722ed0ba3189ce1d7"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "discard"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "dtoa-short"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6"
+dependencies = [
+ "dtoa",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "epub-builder"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d8b1b5059c4b990da60cb6fee785e49ea09d1ed8249d91e2dddfd92b74b7cbc"
+dependencies = [
+ "chrono",
+ "error-chain",
+ "html-escape",
+ "lazy_static",
+ "mustache",
+ "regex",
+ "tempdir",
+ "uuid",
+ "zip",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-chain"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
+dependencies = [
+ "backtrace",
+ "version_check",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "flexi_logger"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "081e9563bb9600593f0f5d38c24f0e3dc550cd301b4872b986e20f1874104791"
+dependencies = [
+ "atty",
+ "chrono",
+ "glob",
+ "lazy_static",
+ "log 0.4.17",
+ "regex",
+ "thiserror",
+ "yansi",
+]
+
+[[package]]
+name = "flume"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bebadab126f8120d410b677ed95eee4ba6eb7c6dd8e34a5ec88a08050e26132"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "spinning_top",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "ghash"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375"
+dependencies = [
+ "opaque-debug",
+ "polyval",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hkdf"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f"
+dependencies = [
+ "digest",
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"
+dependencies = [
+ "crypto-mac",
+ "digest",
+]
+
+[[package]]
+name = "html-escape"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476"
+dependencies = [
+ "utf8-width",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
+dependencies = [
+ "log 0.4.17",
+ "mac",
+ "markup5ever",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes 1.4.0",
+ "fnv",
+ "itoa 1.0.6",
+]
+
+[[package]]
+name = "http-client"
+version = "6.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1947510dc91e2bf586ea5ffb412caad7673264e14bb39fb9078da114a94ce1a5"
+dependencies = [
+ "async-std",
+ "async-trait",
+ "cfg-if",
+ "http-types",
+ "isahc",
+ "log 0.4.17",
+]
+
+[[package]]
+name = "http-types"
+version = "2.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad"
+dependencies = [
+ "anyhow",
+ "async-channel",
+ "async-std",
+ "base64",
+ "cookie",
+ "futures-lite",
+ "infer",
+ "pin-project-lite",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "serde_urlencoded",
+ "url",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b"
+dependencies = [
+ "console",
+ "lazy_static",
+ "number_prefix",
+ "regex",
+]
+
+[[package]]
+name = "infer"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "isahc"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a"
+dependencies = [
+ "bytes 0.5.6",
+ "crossbeam-utils",
+ "curl",
+ "curl-sys",
+ "flume",
+ "futures-lite",
+ "http",
+ "log 0.4.17",
+ "once_cell",
+ "slab",
+ "sluice",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "waker-fn",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "js-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kuchiki"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
+dependencies = [
+ "cssparser",
+ "html5ever",
+ "matches",
+ "selectors",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log 0.4.17",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "libnghttp2-sys"
+version = "0.1.7+1.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+dependencies = [
+ "log 0.4.17",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+ "value-bag",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "markup5ever"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
+dependencies = [
+ "log 0.4.17",
+ "phf",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.7.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc"
+dependencies = [
+ "libc",
+ "log 0.4.17",
+ "miow",
+ "ntapi",
+ "winapi",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "mustache"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51956ef1c5d20a1384524d91e616fb44dfc7d8f249bf696d49c97dd3289ecab5"
+dependencies = [
+ "log 0.3.9",
+ "serde",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nodrop"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
+
+[[package]]
+name = "ntapi"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "paperoni"
+version = "0.6.1-alpha1"
+dependencies = [
+ "async-std",
+ "base64",
+ "chrono",
+ "clap",
+ "colored",
+ "comfy-table",
+ "derive_builder",
+ "directories",
+ "epub-builder",
+ "flexi_logger",
+ "futures",
+ "html5ever",
+ "indicatif",
+ "itertools",
+ "kuchiki",
+ "lazy_static",
+ "log 0.4.17",
+ "md5",
+ "regex",
+ "surf",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "parking"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.6",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.7",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_macros",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log 0.4.17",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "polyval"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd"
+dependencies = [
+ "cpuid-bool",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+ "rand_pcg",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.9",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.9",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.17",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "selectors"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
+dependencies = [
+ "bitflags",
+ "cssparser",
+ "derive_more",
+ "fxhash",
+ "log 0.4.17",
+ "matches",
+ "phf",
+ "phf_codegen",
+ "precomputed-hash",
+ "servo_arc",
+ "smallvec",
+ "thin-slice",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6"
+dependencies = [
+ "percent-encoding",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "servo_arc"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
+dependencies = [
+ "nodrop",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+dependencies = [
+ "sha1_smol",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer",
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+ "opaque-debug",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "sluice"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5"
+dependencies = [
+ "async-channel",
+ "futures-core",
+ "futures-io",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spinning_top"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "standback"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "stdweb"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
+dependencies = [
+ "discard",
+ "rustc_version 0.2.3",
+ "stdweb-derive",
+ "stdweb-internal-macros",
+ "stdweb-internal-runtime",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "stdweb-derive"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "stdweb-internal-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
+dependencies = [
+ "base-x",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha1",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "stdweb-internal-runtime"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2"
+
+[[package]]
+name = "strum_macros"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "surf"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "718b1ae6b50351982dedff021db0def601677f2120938b070eadb10ba4038dd7"
+dependencies = [
+ "async-std",
+ "async-trait",
+ "cfg-if",
+ "encoding_rs",
+ "futures-util",
+ "getrandom 0.2.9",
+ "http-client",
+ "http-types",
+ "log 0.4.17",
+ "mime_guess",
+ "once_cell",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "web-sys",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempdir"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+dependencies = [
+ "rand 0.4.6",
+ "remove_dir_all",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thin-slice"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.2.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242"
+dependencies = [
+ "const_fn",
+ "libc",
+ "standback",
+ "stdweb",
+ "time-macros",
+ "version_check",
+ "winapi",
+]
+
+[[package]]
+name = "time-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
+dependencies = [
+ "proc-macro-hack",
+ "time-macros-impl",
+]
+
+[[package]]
+name = "time-macros-impl"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "standback",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "log 0.4.17",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "universal-hash"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8-width"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
+
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+dependencies = [
+ "getrandom 0.2.9",
+]
+
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
+dependencies = [
+ "ctor",
+ "version_check",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822"
+dependencies = [
+ "bumpalo",
+ "log 0.4.17",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb"
+
+[[package]]
+name = "web-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "yaml-rust"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e66366e18dc58b46801afbf2ca7661a9f59cc8c5962c29892b6039b4f86fa992"
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zip"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815"
+dependencies = [
+ "byteorder",
+ "crc32fast",
+ "thiserror",
+ "time 0.1.45",
+]
diff --git a/nixpkgs/pkgs/tools/text/paperoni/default.nix b/nixpkgs/pkgs/tools/text/paperoni/default.nix
new file mode 100644
index 000000000000..346ce515b64f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/paperoni/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, curl
+, stdenv
+, pkg-config
+, zlib
+, openssl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "paperoni";
+  version = "0.6.1-alpha1";
+
+  src = fetchFromGitHub {
+    owner = "hipstermojo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vTylnDtoPpiRtk/vew1hLq3g8pepWRVqBEBnvSif4Zw=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = [
+    curl
+  ] ++ lib.optionals stdenv.isLinux [
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    zlib
+  ] ++ lib.optionals stdenv.isLinux [
+    openssl
+  ];
+
+  # update Cargo.lock to work with openssl 3
+  postPatch = ''
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "An article extractor in Rust";
+    homepage = "https://github.com/hipstermojo/paperoni";
+    changelog = "https://github.com/hipstermojo/paperoni/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/papertrail/Gemfile b/nixpkgs/pkgs/tools/text/papertrail/Gemfile
new file mode 100755
index 000000000000..199cd1422aaa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/papertrail/Gemfile
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+source "https://rubygems.org"
+
+gem "papertrail"
diff --git a/nixpkgs/pkgs/tools/text/papertrail/Gemfile.lock b/nixpkgs/pkgs/tools/text/papertrail/Gemfile.lock
new file mode 100644
index 000000000000..37cd23eab6f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/papertrail/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ansi (1.5.0)
+    chronic (0.10.2)
+    papertrail (0.10.1)
+      ansi (~> 1.5)
+      chronic (~> 0.10)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  papertrail
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/text/papertrail/default.nix b/nixpkgs/pkgs/tools/text/papertrail/default.nix
new file mode 100644
index 000000000000..afc9d2d89e7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/papertrail/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, bundlerEnv, ruby, bundlerUpdateScript }:
+
+let
+  papertrail-env = bundlerEnv {
+    name = "papertrail-env";
+    inherit ruby;
+    gemfile = ./Gemfile;
+    lockfile = ./Gemfile.lock;
+    gemset = ./gemset.nix;
+  };
+in stdenv.mkDerivation {
+  pname = "papertrail";
+  version = (import ./gemset.nix).papertrail.version;
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    ln -s ${papertrail-env}/bin/papertrail $out/bin/papertrail
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "papertrail";
+
+  meta = with lib; {
+    description = "Command-line client for Papertrail log management service";
+    homepage    = "https://github.com/papertrail/papertrail-cli/";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ nicknovitski ];
+    platforms   = ruby.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/papertrail/gemset.nix b/nixpkgs/pkgs/tools/text/papertrail/gemset.nix
new file mode 100644
index 000000000000..dcdfcdf7ea58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/papertrail/gemset.nix
@@ -0,0 +1,26 @@
+{
+  ansi = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14ims9zfal4gs2wpx2m5rd8zsrl2k794d359shkrsgg3fhr2a22l";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  chronic = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn";
+      type = "gem";
+    };
+    version = "0.10.2";
+  };
+  papertrail = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vb7bh7qh5hr4v3w711bl0yrr3rlhz5c3h3qx3fq31dr5y4100v7";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/par/default.nix b/nixpkgs/pkgs/tools/text/par/default.nix
new file mode 100644
index 000000000000..e64dbd367be5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/par/default.nix
@@ -0,0 +1,33 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "par";
+  version = "1.53.0";
+
+  src = fetchurl {
+    url = "http://www.nicemice.net/par/Par-${version}.tar.gz";
+    sha256 = "sha256-yAnGIOuCtYlVOsVLmJjI2lUZbSYjOdE8BG8r5ErEeAQ=";
+  };
+
+  makefile = "protoMakefile";
+  preBuild = ''
+    makeFlagsArray+=(CC="${stdenv.cc.targetPrefix}cc -c" LINK1=${stdenv.cc.targetPrefix}cc)
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp par $out/bin
+
+    mkdir -p $out/share/man/man1
+    cp  par.1 $out/share/man/man1
+  '';
+
+
+  meta = with lib; {
+    homepage = "http://www.nicemice.net/par/";
+    description = "Paragraph reflow for email";
+    platforms = platforms.unix;
+    # See https://fedoraproject.org/wiki/Licensing/Par for license details
+    license = licenses.free;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/patchutils/0.3.3.nix b/nixpkgs/pkgs/tools/text/patchutils/0.3.3.nix
new file mode 100644
index 000000000000..f50354199c3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/patchutils/0.3.3.nix
@@ -0,0 +1,7 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "0.3.3";
+  sha256 = "0g5df00cj4nczrmr4k791l7la0sq2wnf8rn981fsrz1f3d2yix4i";
+  patches = [ ./drop-comments.patch ]; # we would get into a cycle when using fetchpatch on this one
+})
diff --git a/nixpkgs/pkgs/tools/text/patchutils/0.4.2.nix b/nixpkgs/pkgs/tools/text/patchutils/0.4.2.nix
new file mode 100644
index 000000000000..1b2c0d6b1f3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/patchutils/0.4.2.nix
@@ -0,0 +1,8 @@
+{ callPackage, python3, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "0.4.2";
+  sha256 = "sha256-iHWwll/jPeYriQ9s15O+f6/kGk5VLtv2QfH+1eu/Re0=";
+  # for gitdiff
+  extraBuildInputs = [ python3 ];
+})
diff --git a/nixpkgs/pkgs/tools/text/patchutils/default.nix b/nixpkgs/pkgs/tools/text/patchutils/default.nix
new file mode 100644
index 000000000000..902773f40fa4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/patchutils/default.nix
@@ -0,0 +1,6 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "0.3.4";
+  sha256 = "0xp8mcfyi5nmb5a2zi5ibmyshxkb1zv1dgmnyn413m7ahgdx8mfg";
+})
diff --git a/nixpkgs/pkgs/tools/text/patchutils/drop-comments.patch b/nixpkgs/pkgs/tools/text/patchutils/drop-comments.patch
new file mode 100644
index 000000000000..e02693a5683d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/patchutils/drop-comments.patch
@@ -0,0 +1,84 @@
+From 58987954647f51dc42fb13b7759923c6170dd905 Mon Sep 17 00:00:00 2001
+From: Tim Waugh <twaugh@redhat.com>
+Date: Fri, 9 May 2014 16:23:27 +0100
+Subject: Make --clean drop comments after '@@' lines as well (trac #29).
+
+
+diff --git a/Makefile.am b/Makefile.am
+index 99ad2a3..f3c6dbc 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -198,6 +198,7 @@ TESTS = tests/newline1/run-test \
+ 	tests/convert1/run-test \
+ 	tests/convert2/run-test \
+ 	tests/clean1/run-test \
++	tests/clean2/run-test \
+ 	tests/stdin/run-test
+ 
+ # These ones don't work yet.
+diff --git a/src/filterdiff.c b/src/filterdiff.c
+index 383e72b..6ca2316 100644
+--- a/src/filterdiff.c
++++ b/src/filterdiff.c
+@@ -2,7 +2,7 @@
+  * filterdiff - extract (or exclude) a diff from a diff file
+  * lsdiff - show which files are modified by a patch
+  * grepdiff - show files modified by a patch containing a regexp
+- * Copyright (C) 2001, 2002, 2003, 2004, 2008, 2009, 2011 Tim Waugh <twaugh@redhat.com>
++ * Copyright (C) 2001, 2002, 2003, 2004, 2008, 2009, 2011, 2013, 2014 Tim Waugh <twaugh@redhat.com>
+  *
+  * This program is free software; you can redistribute it and/or modify
+  * it under the terms of the GNU General Public License as published by
+@@ -408,7 +408,8 @@ do_unified (FILE *f, char *header[2], int match, char **line,
+ 							 " Hunk #%lu, %s",
+ 							 hunknum, bestname);
+ 
+-					fputs (trailing, output_to);
++					fputs (clean_comments ? "\n" : trailing,
++					       output_to);
+ 					break;
+ 				case Before:
+ 					// Note the initial line number
+diff --git a/tests/clean2/run-test b/tests/clean2/run-test
+new file mode 100755
+index 0000000..42320df
+--- /dev/null
++++ b/tests/clean2/run-test
+@@ -0,0 +1,34 @@
++#!/bin/sh
++
++# This is a filterdiff(1) testcase.
++# Test: Make sure --clean removes hunk-level comments.
++
++
++. ${top_srcdir-.}/tests/common.sh
++
++cat << EOF > diff
++non-diff line
++--- a/file1
+++++ b/file1
++@@ -0,0 +1 @@ this is a hunk-level comment
+++a
++EOF
++
++${FILTERDIFF} --clean diff 2>errors >filtered || exit 1
++[ -s errors ] && exit 1
++
++cat << EOF | cmp - filtered || exit 1
++--- a/file1
+++++ b/file1
++@@ -0,0 +1 @@
+++a
++EOF
++
++${FILTERDIFF} --clean -x file1 diff 2>errors >filtered || exit 1
++[ -s errors ] && exit 1
++cat << EOF | cmp - filtered || exit 1
++--- a/file1
+++++ b/file1
++@@ -0,0 +1 @@
+++a
++EOF
+-- 
+cgit v0.10.1
+
diff --git a/nixpkgs/pkgs/tools/text/patchutils/generic.nix b/nixpkgs/pkgs/tools/text/patchutils/generic.nix
new file mode 100644
index 000000000000..d1cd4334e119
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/patchutils/generic.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, perl, makeWrapper
+, version, sha256, patches ? [], extraBuildInputs ? []
+, ...
+}:
+stdenv.mkDerivation rec {
+  pname = "patchutils";
+  inherit version patches;
+
+  src = fetchurl {
+    url = "http://cyberelk.net/tim/data/patchutils/stable/${pname}-${version}.tar.xz";
+    inherit sha256;
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ] ++ extraBuildInputs;
+  hardeningDisable = [ "format" ];
+
+  # tests fail when building in parallel
+  enableParallelBuilding = false;
+
+  postInstall = ''
+    for bin in $out/bin/{splitdiff,rediff,editdiff,dehtmldiff}; do
+      wrapProgram "$bin" \
+        --prefix PATH : "$out/bin"
+    done
+  '';
+
+  doCheck = lib.versionAtLeast version "0.3.4";
+
+  preCheck = ''
+    patchShebangs tests
+    chmod +x scripts/*
+  '' + lib.optionalString (lib.versionOlder version "0.4.2") ''
+    find tests -type f -name 'run-test' \
+      -exec sed -i '{}' -e 's|/bin/echo|echo|g' \;
+  '';
+
+  meta = with lib; {
+    description = "Tools to manipulate patch files";
+    homepage = "http://cyberelk.net/tim/software/patchutils";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ artturin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/pbgopy/default.nix b/nixpkgs/pkgs/tools/text/pbgopy/default.nix
new file mode 100644
index 000000000000..dad688f1dfb5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/pbgopy/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pbgopy";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nakabonne";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-P/MFDFMsqSTVErTM9izJJSMIbiOcbQ9Ya10/w6NRcYw=";
+  };
+
+  vendorHash = "sha256-S2X74My6wyDZOsEYTDilCFaYgV2vQzU0jOAY9cEkJ6A=";
+
+  meta = with lib; {
+    description = "Copy and paste between devices";
+    homepage = "https://github.com/nakabonne/pbgopy";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/peco/default.nix b/nixpkgs/pkgs/tools/text/peco/default.nix
new file mode 100644
index 000000000000..7c026f06292e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/peco/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "peco";
+  version = "0.5.11";
+
+  subPackages = [ "cmd/peco" ];
+
+  src = fetchFromGitHub {
+    owner = "peco";
+    repo = "peco";
+    rev = "v${version}";
+    sha256 = "sha256-OVUfeNpnmuJsgD//JTn6n9n4oOBxep69LhIpHX+ru2w=";
+  };
+
+  vendorHash = "sha256-+HQz7UUgATdgSWlI1dg2DdQRUSke9MyAtXgLikFhF90=";
+
+  meta = with lib; {
+    description = "Simplistic interactive filtering tool";
+    homepage = "https://github.com/peco/peco";
+    changelog = "https://github.com/peco/peco/blob/v${version}/Changes";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/percollate/default.nix b/nixpkgs/pkgs/tools/text/percollate/default.nix
new file mode 100644
index 000000000000..ea55446aac6e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/percollate/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildNpmPackage, fetchFromGitHub, chromium, makeWrapper }:
+
+buildNpmPackage rec {
+  pname = "percollate";
+  version = "4.0.5";
+
+  src = fetchFromGitHub {
+    owner = "danburzo";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-St9a22Af2QV3gOR80LmDMeq0x9tf/ZJz9Z4IgeeM80I=";
+  };
+
+  npmDepsHash = "sha256-WHOv5N893G35bMC03aGb2m7rQz5xIRd9hPldbRku+RY=";
+
+  dontNpmBuild = true;
+
+  # Dev dependencies include an unnecessary Java dependency (epubchecker)
+  # https://github.com/danburzo/percollate/blob/v4.0.5/package.json#L40
+  npmInstallFlags = [ "--omit=dev" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  env = {
+    PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = true;
+  };
+
+  postPatch = ''
+    substituteInPlace package.json --replace "git config core.hooksPath .git-hooks" ""
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/percollate \
+      --set PUPPETEER_EXECUTABLE_PATH ${chromium}/bin/chromium
+  '';
+
+  meta = with lib; {
+    description = "A command-line tool to turn web pages into readable PDF, EPUB, HTML, or Markdown docs";
+    homepage = "https://github.com/danburzo/percollate";
+    license = licenses.mit;
+    maintainers = [ maintainers.austinbutler ];
+    mainProgram = "percollate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/pinyin-tool/default.nix b/nixpkgs/pkgs/tools/text/pinyin-tool/default.nix
new file mode 100644
index 000000000000..9d98385933b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/pinyin-tool/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pinyin-tool";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "briankung";
+    repo = pname;
+    rev = version;
+    sha256 = "1gwqwxlvdrm4sdyqkvpvvfi6jh6qqn6qybn0z66wm06k62f8zj5b";
+  };
+
+  cargoSha256 = "1ixl4bsb8c8dmz9s28a2v5l5f2hi3g9xjy6ribmhybpwmfs4mr4d";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A simple command line tool for converting Chinese characters to space-separate pinyin words";
+    homepage = "https://github.com/briankung/pinyin-tool";
+    license = licenses.mit;
+    maintainers = with maintainers; [ neonfuz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/platinum-searcher/default.nix b/nixpkgs/pkgs/tools/text/platinum-searcher/default.nix
new file mode 100644
index 000000000000..4271fe131dac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/platinum-searcher/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "the_platinum_searcher";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "monochromegane";
+    repo = "the_platinum_searcher";
+    rev = "v${version}";
+    hash = "sha256-FNHlALFwMbajaHWOehdSFeQmvZSuCZLdqGqLZ7DF+pI=";
+  };
+
+  vendorHash = "sha256-GIjPgu0e+duN5MeWcRaF5xUFCkqe2aZJCwGbLUMko08=";
+
+  patches = [
+    # Add Go Modules support. See https://github.com/monochromegane/the_platinum_searcher/pull/217.
+    (fetchpatch {
+      url = "https://github.com/monochromegane/the_platinum_searcher/pull/217/commits/69064d11c57d5fd5f66ddd95f0e789786183d3c6.patch";
+      hash = "sha256-qQ7kZYb2MWSUV6T1frIPT9nMfb20SI7lbG8YhqyQEi8=";
+    })
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/monochromegane/the_platinum_searcher";
+    description = "A code search tool similar to ack and the_silver_searcher(ag)";
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/pn/default.nix b/nixpkgs/pkgs/tools/text/pn/default.nix
new file mode 100644
index 000000000000..d77b36651d62
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/pn/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libphonenumber, icu, protobuf }:
+
+stdenv.mkDerivation rec {
+  pname = "pn";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "Orange-OpenSource";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vRF9MPcw/hCreHVLD6QB7g1r0wQiZv1xrfzIHj1Yf9M=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libphonenumber icu protobuf ];
+
+  meta = with lib; {
+    description = "A libphonenumber command-line wrapper";
+    homepage = "https://github.com/Orange-OpenSource/pn";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.McSinyx ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/podiff/default.nix b/nixpkgs/pkgs/tools/text/podiff/default.nix
new file mode 100644
index 000000000000..eec0eb351636
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/podiff/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "podiff";
+  version = "1.4";
+
+  src = fetchurl {
+    url = "ftp://download.gnu.org.ua/pub/release/podiff/podiff-1.4.tar.gz";
+    sha256 = "sha256-IxUx87CxdhWh8MqdcSo8GWaG358aZBaIx0oldK94sio=";
+  };
+
+  patchPhase = ''
+    sed "s#PREFIX=/usr#PREFIX=$out#g" -i Makefile
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "Finds differences in translations between two PO files, or revisions";
+    homepage = "http://puszcza.gnu.org.ua/software/podiff";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.goibhniu ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/poedit/default.nix b/nixpkgs/pkgs/tools/text/poedit/default.nix
new file mode 100644
index 000000000000..7e8b78fda19f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/poedit/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, gettext, pkg-config, wxGTK32,
+  boost, icu, lucenepp, asciidoc, libxslt, xmlto, gtk3, gtkspell3, pugixml,
+  nlohmann_json, hicolor-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "poedit";
+  version = "3.4.2";
+
+  src = fetchFromGitHub {
+    owner = "vslavik";
+    repo = "poedit";
+    rev = "v${version}-oss";
+    hash = "sha256-CfCWfKRzeGGk8/B0BLauO4Xb88/Si1ezvcGKeURgC9o=";
+  };
+
+  nativeBuildInputs = [ autoconf automake asciidoc wrapGAppsHook
+    libxslt xmlto boost libtool pkg-config ];
+
+  buildInputs = [ lucenepp nlohmann_json wxGTK32 icu pugixml gtk3 gtkspell3 hicolor-icon-theme ];
+
+  propagatedBuildInputs = [ gettext ];
+
+  preConfigure = "
+    patchShebangs bootstrap
+    ./bootstrap
+  ";
+
+  configureFlags = [
+    "--without-cld2"
+    "--without-cpprest"
+    "--with-boost-libdir=${boost.out}/lib"
+    "CPPFLAGS=-I${nlohmann_json}/include/nlohmann/"
+    "LDFLAGS=-llucene++"
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix PATH : "${lib.makeBinPath [ gettext ]}")
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Cross-platform gettext catalogs (.po files) editor";
+    homepage = "https://www.poedit.net/";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ dasj19 ];
+    # configure: error: GTK+ build of wxWidgets is required
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/pomsky/Cargo.lock b/nixpkgs/pkgs/tools/text/pomsky/Cargo.lock
new file mode 100644
index 000000000000..2064e8c6a1ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/pomsky/Cargo.lock
@@ -0,0 +1,1236 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "arbitrary"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2e1373abdaa212b704512ec2bd8b26bd0b7d5c3f70117411a5d9a451383c859"
+dependencies = [
+ "derive_arbitrary",
+]
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
+dependencies = [
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "predicates 3.0.4",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "assert_fs"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f070617a68e5c2ed5d06ee8dd620ee18fb72b99f6c094bed34cf8ab07c875b48"
+dependencies = [
+ "anstyle",
+ "doc-comment",
+ "globwalk",
+ "predicates 3.0.4",
+ "predicates-core",
+ "predicates-tree",
+ "tempfile",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "benchmark"
+version = "0.1.3"
+dependencies = [
+ "divan",
+ "melody_compiler",
+ "pomsky",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.64.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 1.0.109",
+ "which",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c79ad7fb2dd38f3dabd76b09c6a5a20c038fc0213ef1e9afd30eb777f120f019"
+dependencies = [
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956"
+dependencies = [
+ "clap_builder",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45"
+dependencies = [
+ "anstyle",
+ "clap_lex",
+ "terminal_size 0.3.0",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
+
+[[package]]
+name = "condtype"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf0a07a401f374238ab8e2f11a104d2851bf9ce711ec69804834de8af45c7af"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "derive_arbitrary"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53e0efad4403bfc52dc201159c4b842a246a14b98c64b55dfd0f2d89729dfeb8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "divan"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fab20f5802e0b897093184f5dc5d23447fa715604f238dc798f6da188b230019"
+dependencies = [
+ "clap",
+ "condtype",
+ "divan-macros",
+ "linkme",
+ "regex-lite",
+]
+
+[[package]]
+name = "divan-macros"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c5d6354551e0b5c451a948814fc47fe745a14eac7835c087d60162661019db4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "errno"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc"
+dependencies = [
+ "bitflags 1.3.2",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "helptext"
+version = "0.1.0"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+dependencies = [
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "is_ci"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "lexopt"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baff4b617f7df3d896f97fe922b64817f6cd9a756bb81d40f8883f2f66dcb401"
+
+[[package]]
+name = "libc"
+version = "0.2.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "linkme"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ed2ee9464ff9707af8e9ad834cffa4802f072caad90639c583dd3c62e6e608"
+dependencies = [
+ "linkme-impl",
+]
+
+[[package]]
+name = "linkme-impl"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba125974b109d512fccbc6c0244e7580143e460895dfd6ea7f8bbb692fd94396"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "melody_compiler"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7684213d4adcea6264d0fd61379a0eb9968d0866de0f05c75dee3af02a6c6ff8"
+dependencies = [
+ "once_cell",
+ "pest",
+ "pest_derive",
+ "thiserror",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "miette"
+version = "5.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e"
+dependencies = [
+ "is-terminal",
+ "miette-derive",
+ "once_cell",
+ "owo-colors",
+ "supports-color",
+ "supports-hyperlinks",
+ "supports-unicode",
+ "terminal_size 0.1.17",
+ "textwrap",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "miette-derive"
+version = "5.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "onig"
+version = "6.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "once_cell",
+ "onig_sys",
+]
+
+[[package]]
+name = "onig_sys"
+version = "69.8.1"
+source = "git+https://github.com/rust-onig/rust-onig#fa90c0e97e90a056af89f183b23cd417b59ee6a2"
+dependencies = [
+ "bindgen",
+ "cc",
+ "pkg-config",
+]
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "pcre2"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9deb1d02d6a373ee392128ba86087352a986359f32a106e2e3b08cc90cc659c9"
+dependencies = [
+ "libc",
+ "log",
+ "pcre2-sys",
+]
+
+[[package]]
+name = "pcre2-sys"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae234f441970dbd52d4e29bee70f3b56ca83040081cb2b55b7df772b16e0b06e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pest"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c022f1e7b65d6a24c0dbbd5fb344c66881bc01f3e5ae74a1c8100f2f985d98a4"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35513f630d46400a977c4cb58f78e1bfbe01434316e60c37d27b9ad6139c66d8"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc9fc1b9e7057baba189b5c626e2d6f40681ae5b6eb064dc7c7834101ec8123a"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df74e9e7ec4053ceb980e7c0c8bd3594e977fde1af91daba9c928e8e8c6708d"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "pomsky"
+version = "0.11.0"
+dependencies = [
+ "arbitrary",
+ "lexopt",
+ "miette",
+ "pomsky-syntax",
+ "regex",
+ "regex-test",
+]
+
+[[package]]
+name = "pomsky-bin"
+version = "0.11.0"
+dependencies = [
+ "assert_cmd",
+ "assert_fs",
+ "helptext",
+ "lexopt",
+ "miette",
+ "pcre2",
+ "pomsky",
+ "predicates 2.1.5",
+ "serde",
+ "serde_json",
+ "supports-color",
+]
+
+[[package]]
+name = "pomsky-macro"
+version = "0.11.0"
+dependencies = [
+ "pomsky",
+]
+
+[[package]]
+name = "pomsky-syntax"
+version = "0.11.0"
+dependencies = [
+ "arbitrary",
+ "strsim",
+]
+
+[[package]]
+name = "predicates"
+version = "2.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd"
+dependencies = [
+ "difflib",
+ "float-cmp",
+ "itertools 0.10.5",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates"
+version = "3.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dfc28575c2e3f19cb3c73b93af36460ae898d426eba6fc15b9bd2a5220758a0"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "itertools 0.11.0",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-lite"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b661b2f27137bdbc16f00eda72866a92bb28af1753ffbd56744fb6e2e9cd8e"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "regex-test"
+version = "0.1.0"
+dependencies = [
+ "onig",
+ "pcre2",
+ "regex",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.38.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.189"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.189"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "smawk"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "supports-color"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89"
+dependencies = [
+ "is-terminal",
+ "is_ci",
+]
+
+[[package]]
+name = "supports-hyperlinks"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f84231692eb0d4d41e4cdd0cabfdd2e6cd9e255e65f80c9aa7c98dd502b4233d"
+dependencies = [
+ "is-terminal",
+]
+
+[[package]]
+name = "supports-unicode"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b6c2cb240ab5dd21ed4906895ee23fe5a48acdbd15a3ce388e7b62a9b66baf7"
+dependencies = [
+ "is-terminal",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "textwrap"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d"
+dependencies = [
+ "smawk",
+ "unicode-linebreak",
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
diff --git a/nixpkgs/pkgs/tools/text/pomsky/default.nix b/nixpkgs/pkgs/tools/text/pomsky/default.nix
new file mode 100644
index 000000000000..474ea404c937
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/pomsky/default.nix
@@ -0,0 +1,44 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, oniguruma }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pomsky";
+  version = "0.11";
+
+  src = fetchFromGitHub {
+    owner = "pomsky-lang";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-BoA59P0jzV08hlFO7NPB9E+fdpYB9G50dNggFkexc/c=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "onig_sys-69.8.1" = "sha256-NJv/Dooh93yQ9KYyuNBhO1c4U7Gd7X007ECXyRsztrY=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    oniguruma
+  ];
+
+  env = {
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
+
+  # thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: invalid option '--test-threads''
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A portable, modern regular expression language";
+    homepage = "https://pomsky-lang.org";
+    changelog = "https://github.com/pomsky-lang/pomsky/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/popfile/default.nix b/nixpkgs/pkgs/tools/text/popfile/default.nix
new file mode 100644
index 000000000000..7dec478a6342
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/popfile/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, fetchzip, makeWrapper, perlPackages,
+... }:
+
+stdenv.mkDerivation rec {
+  appname = "popfile";
+  version = "1.1.3";
+  name = "${appname}-${version}";
+
+  src = fetchzip {
+    url = "https://getpopfile.org/downloads/${appname}-${version}.zip";
+    sha256 = "0gcib9j7zxk8r2vb5dbdz836djnyfza36vi8215nxcdfx1xc7l63";
+    stripRoot = false;
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = (with perlPackages; [
+    ## These are all taken from the popfile documentation as applicable to Linux
+    ## https://getpopfile.org/docs/howtos:allplatformsrequireperl
+    perl
+    DBI
+    DBDSQLite
+    HTMLTagset
+    TimeDate # == DateParse
+    HTMLTemplate
+    # IO::Socket::Socks is not in nixpkgs
+    # IOSocketSocks
+    IOSocketSSL
+    NetSSLeay
+    SOAPLite
+  ]);
+
+  installPhase = ''
+    mkdir -p $out/bin
+    # I user `cd` rather than `cp $out/* ...` b/c the * breaks syntax
+    # highlighting in emacs for me.
+    cd $src
+    cp -r * $out/bin
+    cd $out/bin
+    chmod +x *.pl
+
+    find $out -name '*.pl' -executable | while read path; do
+      wrapProgram "$path" \
+        --prefix PERL5LIB : $PERL5LIB:$out/bin \
+        --set POPFILE_ROOT $out/bin \
+        --run 'export POPFILE_USER=''${POPFILE_USER:-$HOME/.popfile}' \
+        --run 'test -d "$POPFILE_USER" || mkdir -m 0700 -p "$POPFILE_USER"'
+    done
+  '';
+
+  meta = {
+    description = "An email classification system that automatically sorts messages and fights spam";
+    homepage = "https://getpopfile.org/";
+    license = lib.licenses.gpl2;
+
+    # Should work on macOS, but havent tested it.
+    # Windows support is more complicated.
+    # https://getpopfile.org/docs/faq:systemrequirements
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/proselint/default.nix b/nixpkgs/pkgs/tools/text/proselint/default.nix
new file mode 100644
index 000000000000..3f1b79c3e015
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/proselint/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchurl, buildPythonApplication, click, future, six }:
+
+buildPythonApplication rec {
+  pname = "proselint";
+  version = "0.13.0";
+
+  doCheck = false; # fails to pass because it tries to run in home directory
+
+  src = fetchurl {
+    url = "mirror://pypi/p/proselint/${pname}-${version}.tar.gz";
+    sha256 = "7dd2b63cc2aa390877c4144fcd3c80706817e860b017f04882fbcd2ab0852a58";
+  };
+
+  propagatedBuildInputs = [ click future six ];
+
+  meta = with lib; {
+    description = "A linter for prose";
+    homepage = "http://proselint.com";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ alibabzo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/qprint/default.nix b/nixpkgs/pkgs/tools/text/qprint/default.nix
new file mode 100644
index 000000000000..56f5b5becbd6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/qprint/default.nix
@@ -0,0 +1,29 @@
+{ fetchurl, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "qprint";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://www.fourmilab.ch/webtools/qprint/qprint-${version}.tar.gz";
+    sha256 = "1701cnb1nl84rmcpxzq11w4cyj4385jh3gx4aqxznwf8a4fwmagz";
+  };
+
+  doCheck = true;
+
+  checkTarget = "wringer";
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = {
+    homepage = "https://www.fourmilab.ch/webtools/qprint/";
+    license = lib.licenses.publicDomain;
+    description = "Encode and decode Quoted-Printable files";
+    maintainers = [ lib.maintainers.tv ];
+    platforms = lib.platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/text/rare-regex/default.nix b/nixpkgs/pkgs/tools/text/rare-regex/default.nix
new file mode 100644
index 000000000000..6dbd062ef61c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/rare-regex/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, withPcre2 ? stdenv.isLinux
+, pcre2
+, testers
+, rare-regex
+}:
+
+buildGoModule rec {
+  pname = "rare";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "zix99";
+    repo = "rare";
+    rev = version;
+    hash = "sha256-83iHYWMdLOzWDu/WW2TN8D2gUe2Y74aGBUjfHIa9ki8=";
+  };
+
+  vendorHash = "sha256-wUOtxNjL/4MosACCzPTWKWrnMZhxINfN1ppkRsqDh9M=";
+
+  buildInputs = lib.optionals withPcre2 [
+    pcre2
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+    "-X=main.buildSha=${src.rev}"
+  ];
+
+  tags = lib.optionals withPcre2 [
+    "pcre2"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = rare-regex;
+    };
+  };
+
+  meta = with lib; {
+    description = "A fast text scanner/regex extractor and realtime summarizer";
+    homepage = "https://rare.zdyn.net";
+    changelog = "https://github.com/zix99/rare/releases/tag/${src.rev}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/readability-cli/default.nix b/nixpkgs/pkgs/tools/text/readability-cli/default.nix
new file mode 100644
index 000000000000..5c0fedd752c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/readability-cli/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildNpmPackage, fetchFromGitLab, installShellFiles }:
+
+buildNpmPackage rec {
+  pname = "readability-cli";
+  version = "2.4.4";
+
+  src = fetchFromGitLab {
+    owner = "gardenappl";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-pvAp3ZJ8/FPhrSMC8B4U1m5zuBNRP/HcsXkrW6QYgSQ=";
+  };
+
+  postPatch = ''
+    # Set a script name to avoid yargs using index.js as $0
+    substituteInPlace common.mjs \
+      --replace '.version(false)' '.version(false).scriptName("readable")'
+  '';
+
+  npmDepsHash = "sha256-X1pcgDm8C4G+hIsgx3sAVFQPadWsULvXrdLAIHnpjmE=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  dontNpmBuild = true;
+
+  postInstall = ''
+    installManPage readability-cli.1
+    installShellCompletion --cmd readable \
+      --bash <(SHELL=bash $out/bin/readable --completion) \
+      --zsh <(SHELL=zsh $out/bin/readable --completion)
+  '';
+
+  meta = with lib; {
+    description = "Firefox Reader Mode in your terminal - get useful text from a web page using Mozilla's Readability library";
+    homepage = "https://gitlab.com/gardenappl/readability-cli";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "readable";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/reckon/Gemfile b/nixpkgs/pkgs/tools/text/reckon/Gemfile
new file mode 100644
index 000000000000..f708ddd93664
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/reckon/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'reckon'
diff --git a/nixpkgs/pkgs/tools/text/reckon/Gemfile.lock b/nixpkgs/pkgs/tools/text/reckon/Gemfile.lock
new file mode 100644
index 000000000000..7409a4bae84f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/reckon/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    chronic (0.10.2)
+    highline (2.1.0)
+    matrix (0.4.2)
+    rchardet (1.8.0)
+    reckon (0.9.2)
+      chronic (>= 0.3.0)
+      highline (>= 1.5.2)
+      matrix (>= 0.4.2)
+      rchardet (>= 1.8.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  reckon
+
+BUNDLED WITH
+   2.4.13
diff --git a/nixpkgs/pkgs/tools/text/reckon/default.nix b/nixpkgs/pkgs/tools/text/reckon/default.nix
new file mode 100644
index 000000000000..91233dfe97b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/reckon/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, bundlerEnv, bundlerUpdateScript, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "reckon";
+  version = (import ./gemset.nix).reckon.version;
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "${pname}-${version}-gems";
+
+      gemdir = ./.;
+    };
+  in ''
+    runHook preInstall
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/reckon $out/bin/reckon
+    runHook postInstall
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "reckon";
+
+  meta = with lib; {
+    description = "Flexibly import bank account CSV files into Ledger for command line accounting";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nicknovitski ];
+    platforms = platforms.unix;
+    changelog = "https://github.com/cantino/reckon/blob/v${version}/CHANGELOG.md";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/reckon/gemset.nix b/nixpkgs/pkgs/tools/text/reckon/gemset.nix
new file mode 100644
index 000000000000..508d6da0be3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/reckon/gemset.nix
@@ -0,0 +1,53 @@
+{
+  chronic = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn";
+      type = "gem";
+    };
+    version = "0.10.2";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f8cr014j7mdqpdb9q17fp5vb5b8n1pswqaif91s3ylg5x3pygfn";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  matrix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h2cgkpzkh3dd0flnnwfq6f3nl2b1zff9lvqz8xs853ssv5kq23i";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  rchardet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1isj1b3ywgg2m1vdlnr41lpvpm3dbyarf1lla4dfibfmad9csfk9";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  reckon = {
+    dependencies = ["chronic" "highline" "matrix" "rchardet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0188k41lvz5vnn03qw1hbi6c2i88n5p3183rb0xz9rfjcngh2ly3";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/recode/default.nix b/nixpkgs/pkgs/tools/text/recode/default.nix
new file mode 100644
index 000000000000..9f215f41feaa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/recode/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchurl
+, python3Packages
+, flex
+, texinfo
+, libiconv
+, libintl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "recode";
+  version = "3.7.14";
+
+  # Use official tarball, avoid need to bootstrap/generate build system
+  src = fetchurl {
+    url = "https://github.com/rrthomas/${pname}/releases/download/v${version}/${pname}-${version}.tar.gz";
+    hash = "sha256-eGqv1USFGisTsKN36sFQD4IM5iYVzMLmMLUB53Q7nzM=";
+  };
+
+  nativeBuildInputs = [ python3Packages.python flex texinfo libiconv ];
+
+  buildInputs = [ libintl ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  nativeCheckInputs = with python3Packages; [
+    cython
+    setuptools
+  ];
+
+  meta = {
+    homepage = "https://github.com/rrthomas/recode";
+    description = "Converts files between various character sets and usages";
+    changelog = "https://github.com/rrthomas/recode/raw/v${version}/NEWS";
+    platforms = lib.platforms.unix;
+    license = with lib.licenses; [ lgpl3Plus gpl3Plus ];
+    maintainers = with lib.maintainers; [ jcumming ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/repgrep/default.nix b/nixpkgs/pkgs/tools/text/repgrep/default.nix
new file mode 100644
index 000000000000..607aa230569b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/repgrep/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, asciidoctor
+, installShellFiles
+, makeWrapper
+, ripgrep
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "repgrep";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = "acheronfail";
+    repo = "repgrep";
+    rev = version;
+    hash = "sha256-6ba7EJUts0Ni9EA3ENlK+a2FaPo7JohtCyqwR9DdL1E=";
+  };
+
+  cargoHash = "sha256-XEjKTZ3qaiLWbm2wF+V97u9tGXDq/oTm249ubUE9n94=";
+
+  nativeBuildInputs = [
+    asciidoctor
+    installShellFiles
+    makeWrapper
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/rgr \
+      --prefix PATH : ${lib.makeBinPath [ ripgrep ]}
+
+    pushd "$(dirname "$(find -path '**/repgrep-stamp' | head -n 1)")"
+    installManPage rgr.1
+    popd
+  '' + lib.optionalString (stdenv.hostPlatform.canExecute stdenv.buildPlatform) ''
+    # As it can be seen here: https://github.com/acheronfail/repgrep/blob/0.15.0/.github/workflows/release.yml#L206, the completions are just the same as ripgrep
+    installShellCompletion --cmd rgr \
+      --bash <(${lib.getExe ripgrep} --generate complete-bash | sed 's/-c rg/-c rgr/') \
+      --zsh <(${lib.getExe ripgrep} --generate complete-zsh | sed 's/-c rg/-c rgr/') \
+      --fish <(${lib.getExe ripgrep} --generate complete-fish | sed 's/-c rg/-c rgr/')
+  '';
+
+  meta = with lib; {
+    description = "An interactive replacer for ripgrep that makes it easy to find and replace across files on the command line";
+    homepage = "https://github.com/acheronfail/repgrep";
+    changelog = "https://github.com/acheronfail/repgrep/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ mit asl20 unlicense ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rgr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/replace/default.nix b/nixpkgs/pkgs/tools/text/replace/default.nix
new file mode 100644
index 000000000000..62b83636b37c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/replace/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "replace";
+  version = "2.24";
+
+  src = fetchurl {
+    url = "http://hpux.connect.org.uk/ftp/hpux/Users/replace-${version}/replace-${version}-src-11.31.tar.gz";
+    sha256 = "18hkwhaz25s6209n5mpx9hmkyznlzygqj488p2l7nvp9zrlxb9sf";
+  };
+
+  outputs = [ "out" "man" ];
+
+  makeFlags = [
+    "TREE=\$(out)"
+    "MANTREE=\$(TREE)/share/man"
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ];
+
+  preBuild = ''
+    sed -e "s@/bin/mv@$(type -P mv)@" -i replace.h
+  '';
+
+  preInstall = "mkdir -p \$out/share/man";
+  postInstall = "mv \$out/bin/replace \$out/bin/replace-literal";
+
+  patches = [./malloc.patch];
+
+  meta = {
+    description = "A tool to replace verbatim strings";
+    homepage = "https://replace.richardlloyd.org.uk/";
+    mainProgram = "replace-literal";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/replace/malloc.patch b/nixpkgs/pkgs/tools/text/replace/malloc.patch
new file mode 100644
index 000000000000..1ee95c4bae18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/replace/malloc.patch
@@ -0,0 +1,13 @@
+diff -rc replace-2.24-orig/replace.h replace-2.24/replace.h
+*** replace-2.24-orig/replace.h	2004-10-07 15:15:06.000000000 +0200
+--- replace-2.24/replace.h	2008-02-21 14:57:47.000000000 +0100
+***************
+*** 11,17 ****
+  #include <ctype.h>
+  #include <unistd.h>
+  #include <string.h>
+- #include <malloc.h>
+  #include <sys/stat.h>
+  #include <ftw.h>
+  #include <utime.h>
+--- 11,16 ----
diff --git a/nixpkgs/pkgs/tools/text/reveal-md/default.nix b/nixpkgs/pkgs/tools/text/reveal-md/default.nix
new file mode 100644
index 000000000000..0cddbf34093a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/reveal-md/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "reveal-md";
+  version = "5.5.2";
+
+  src = fetchFromGitHub {
+    owner = "webpro";
+    repo = "reveal-md";
+    rev = version;
+    hash = "sha256-Uge7N6z9O1wc+nW/0k5qz+CPYbYgr7u2mulH75pXvHY=";
+  };
+
+  npmDepsHash = "sha256-+gzur0pAmZe4nrDxNQwjFn/hM9TvZEd6JzLOnJLhNtg=";
+
+  env = {
+    PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = true;
+  };
+
+  dontNpmBuild = true;
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+
+    npm run test
+
+    runHook postCheck
+  '';
+
+  meta = {
+    description = "Get beautiful reveal.js presentations from your Markdown files";
+    homepage = "https://github.com/webpro/reveal-md";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ sagikazarmark ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/rgxg/default.nix b/nixpkgs/pkgs/tools/text/rgxg/default.nix
new file mode 100644
index 000000000000..8e4d991e7bf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/rgxg/default.nix
@@ -0,0 +1,18 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "rgxg";
+  version = "0.1.2";
+
+  src = fetchzip {
+    url = "https://github.com/rgxg/rgxg/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "050jxc3qhfrm9fdbzd67hlsqlp4qk1fa20q1g2v919sh7s6v77si";
+  };
+
+  meta = with lib; {
+    description = "A C library and a command-line tool to generate (extended) regular expressions";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ hloeffler ];
+    homepage = "https://rgxg.github.io/";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/riffdiff/default.nix b/nixpkgs/pkgs/tools/text/riffdiff/default.nix
new file mode 100644
index 000000000000..ebd4a7dc0a7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/riffdiff/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "riffdiff";
+  version = "2.30.1";
+
+  src = fetchFromGitHub {
+    owner = "walles";
+    repo = "riff";
+    rev = version;
+    hash = "sha256-+bYQrZBbMnlDRZBM252i3dvSpLfW/ys4bBe9mDCvHuU=";
+  };
+
+  cargoHash = "sha256-aJc3OcnSE4xo8FdSVt4YYX3i5NZT9GaczlFrbCw+iRo=";
+
+  meta = with lib; {
+    description = "A diff filter highlighting which line parts have changed";
+    homepage = "https://github.com/walles/riff";
+    license = licenses.mit;
+    maintainers = with maintainers; [ johnpyp ];
+    mainProgram = "riff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ripgrep-all/Cargo.lock b/nixpkgs/pkgs/tools/text/ripgrep-all/Cargo.lock
new file mode 100644
index 000000000000..aefe51f87f92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ripgrep-all/Cargo.lock
@@ -0,0 +1,2207 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd2405b3ac1faab2990b74d728624cd9fd115651fcecc7c2d8daf01376275ba"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "bzip2",
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "xz2",
+ "zstd 0.11.2+zstd.1.5.2",
+ "zstd-safe 5.0.2+zstd.1.5.2",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc2d0cfb2a7388d34f590e76686704c494ed7aaceed62ee1ba35cbf363abc2a5"
+dependencies = [
+ "brotli",
+ "bzip2",
+ "deflate64",
+ "flate2",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "xz2",
+ "zstd 0.13.0",
+ "zstd-safe 7.0.0",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "async_zip"
+version = "0.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2105142db9c6203b9dadc83b0553394589a6cb31b1449a3b46b42f47c3434d0"
+dependencies = [
+ "async-compression 0.3.15",
+ "chrono",
+ "crc32fast",
+ "log",
+ "pin-project",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "brotli"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytecount"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "bzip2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "charset"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18e9079d1a12a2cc2bffb5db039c43661836ead4082120d5844f02555aca2d46"
+dependencies = [
+ "base64",
+ "encoding_rs",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags 1.3.2",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80932e03c33999b9235edb8655bc9df3204adc9887c2f95b50cb1deb9fd54253"
+dependencies = [
+ "clap_builder",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6c0db58c659eef1c73e444d298c27322a1b52f6927d2ad470c0c0f96fa7b8fa"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim 0.10.0",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+
+[[package]]
+name = "ctor"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e"
+dependencies = [
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
+
+[[package]]
+name = "deflate64"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61ceff48ed7e0e66d428a569d36485a091c39fe118ee1220217655f6b814fa9"
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "directories-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dyn-clonable"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4"
+dependencies = [
+ "dyn-clonable-impl",
+ "dyn-clone",
+]
+
+[[package]]
+name = "dyn-clonable-impl"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "encoding_rs_io"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cc3c5651fb62ab8aa3103998dade57efdd028544bd300516baa31840c252a83"
+dependencies = [
+ "encoding_rs",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "filetime"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.4.1",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+ "futures-core",
+ "futures-macro",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
+dependencies = [
+ "hashbrown 0.14.3",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.3",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "rustix",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json_comments"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7"
+
+[[package]]
+name = "libredox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "redox_syscall 0.4.1",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "lzma-sys"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "mailparse"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b56570f5f8c0047260d1c8b5b331f62eb9c660b9dd4071a8c46f8c7d3f280aa"
+dependencies = [
+ "charset",
+ "data-encoding",
+ "quoted_printable",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "mime2ext"
+version = "0.1.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a85a5069ebd40e64b1985773cc81addbe9d90d7ecf60e7b5475a57ad584c70"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36"
+dependencies = [
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.4.1",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "path-clean"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef"
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.1.0",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a"
+
+[[package]]
+name = "pretty-bytes"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "009d6edd2c1dbf2e1c0cd48a2f7766e03498d49ada7109a01c6911815c685316"
+dependencies = [
+ "atty",
+ "getopts",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.76"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "quoted_printable"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3866219251662ec3b26fc217e3e05bf9c4f84325234dfb96bf0bf840889e49"
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+dependencies = [
+ "getrandom",
+ "libredox",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "ripgrep_all"
+version = "0.10.6"
+dependencies = [
+ "anyhow",
+ "async-compression 0.4.5",
+ "async-recursion",
+ "async-stream",
+ "async-trait",
+ "async_zip",
+ "bincode",
+ "bytes",
+ "clap 4.4.17",
+ "crossbeam",
+ "crossbeam-channel",
+ "ctor",
+ "derive_more",
+ "directories-next",
+ "dyn-clonable",
+ "dyn-clone",
+ "encoding_rs",
+ "encoding_rs_io",
+ "env_logger",
+ "glob",
+ "json_comments",
+ "lazy_static",
+ "log",
+ "mailparse",
+ "memchr",
+ "mime2ext",
+ "paste",
+ "path-clean",
+ "pretty-bytes",
+ "pretty_assertions",
+ "regex",
+ "rusqlite",
+ "schemars",
+ "serde",
+ "serde_json",
+ "size_format",
+ "structopt",
+ "tempfile",
+ "tokio",
+ "tokio-rusqlite",
+ "tokio-stream",
+ "tokio-tar",
+ "tokio-test",
+ "tokio-util",
+ "tree_magic_mini",
+]
+
+[[package]]
+name = "rusqlite"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d"
+dependencies = [
+ "bitflags 2.4.1",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "smallvec",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+
+[[package]]
+name = "schemars"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29"
+dependencies = [
+ "dyn-clone",
+ "indexmap 1.9.3",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars_derive"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "semver"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
+
+[[package]]
+name = "serde"
+version = "1.0.195"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.195"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.111"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "size_format"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ed5f6ab2122c6dec69dca18c72fa4590a27e581ad20d44960fe74c032a0b23b"
+dependencies = [
+ "generic-array",
+ "num",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e"
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap 2.34.0",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.4.1",
+ "rustix",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "tokio"
+version = "1.35.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "tokio-rusqlite"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc785c98d0c872455381e59be1f33a8f3a6b4e852544212e37601cc2ccb21d39"
+dependencies = [
+ "crossbeam-channel",
+ "rusqlite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-tar"
+version = "0.3.1"
+source = "git+https://github.com/vorot93/tokio-tar#87338a76092330bc6fe60de95d83eae5597332e1"
+dependencies = [
+ "filetime",
+ "futures-core",
+ "libc",
+ "redox_syscall 0.3.5",
+ "tokio",
+ "tokio-stream",
+ "xattr",
+]
+
+[[package]]
+name = "tokio-test"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89b3cbabd3ae862100094ae433e1def582cf86451b4e9bf83aa7ac1d8a7d719"
+dependencies = [
+ "async-stream",
+ "bytes",
+ "futures-core",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "futures-util",
+ "hashbrown 0.14.3",
+ "pin-project-lite",
+ "slab",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tree_magic_mini"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91adfd0607cacf6e4babdb870e9bec4037c1c4b151cfd279ccefc5e0c7feaa6d"
+dependencies = [
+ "bytecount",
+ "fnv",
+ "lazy_static",
+ "nom",
+ "once_cell",
+ "petgraph",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-core"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "xattr"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f"
+dependencies = [
+ "libc",
+ "linux-raw-sys",
+ "rustix",
+]
+
+[[package]]
+name = "xz2"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
+dependencies = [
+ "lzma-sys",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe 5.0.2+zstd.1.5.2",
+]
+
+[[package]]
+name = "zstd"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110"
+dependencies = [
+ "zstd-safe 7.0.0",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "7.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e"
+dependencies = [
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.9+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/tools/text/ripgrep-all/default.nix b/nixpkgs/pkgs/tools/text/ripgrep-all/default.nix
new file mode 100644
index 000000000000..9844a72f9d52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ripgrep-all/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, makeWrapper
+, ffmpeg
+, pandoc
+, poppler_utils
+, ripgrep
+, Security
+, zip
+}:
+
+let
+  path = [
+    ffmpeg
+    pandoc
+    poppler_utils
+    ripgrep
+    zip
+  ];
+in rustPlatform.buildRustPackage rec {
+  pname = "ripgrep-all";
+  version = "0.10.6";
+
+  src = fetchFromGitHub {
+    owner = "phiresky";
+    repo = "ripgrep-all";
+    rev = "v${version}";
+    hash = "sha256-ns7RL7kiG72r07LkF6RzShNg8M2SU6tU5+gXDxzUQHM=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "tokio-tar-0.3.1" = "sha256-oYXcZepnQyZ13zCvECwNqbXUnov3Y6uJlpkHz1zVpRo=";
+    };
+  };
+
+  nativeBuildInputs = [ makeWrapper poppler_utils ];
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  nativeCheckInputs = path;
+
+  postInstall = ''
+    wrapProgram $out/bin/rga \
+      --prefix PATH ":" "${lib.makeBinPath path}"
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/phiresky/ripgrep-all/blob/${src.rev}/CHANGELOG.md";
+    description = "Ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, and more";
+    longDescription = ''
+      Ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
+
+      rga is a line-oriented search tool that allows you to look for a regex in
+      a multitude of file types. rga wraps the awesome ripgrep and enables it
+      to search in pdf, docx, sqlite, jpg, movie subtitles (mkv, mp4), etc.
+    '';
+    homepage = "https://github.com/phiresky/ripgrep-all";
+    license = with licenses; [ agpl3Plus ];
+    maintainers = with maintainers; [ zaninime ma27 ];
+    mainProgram = "rga";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ripgrep/default.nix b/nixpkgs/pkgs/tools/text/ripgrep/default.nix
new file mode 100644
index 000000000000..427625a0000f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ripgrep/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv
+, buildPackages
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, pkg-config
+, Security
+, withPCRE2 ? true
+, pcre2
+}:
+
+let
+  canRunRg = stdenv.hostPlatform.emulatorAvailable buildPackages;
+  rg = "${stdenv.hostPlatform.emulator buildPackages} $out/bin/rg";
+in rustPlatform.buildRustPackage rec {
+  pname = "ripgrep";
+  version = "14.1.0";
+
+  src = fetchFromGitHub {
+    owner = "BurntSushi";
+    repo = pname;
+    rev = version;
+    hash = "sha256-CBU1GzgWMPTVsgaPMy39VRcENw5iWRUrRpjyuGiZpPI=";
+  };
+
+  cargoHash = "sha256-8FxN5MhYduMkzym7Xx4dnVbWaBKv9pgbXMIRGiRRQew=";
+
+  nativeBuildInputs = [ installShellFiles ]
+    ++ lib.optional withPCRE2 pkg-config;
+  buildInputs = lib.optional withPCRE2 pcre2
+    ++ lib.optional stdenv.isDarwin Security;
+
+  buildFeatures = lib.optional withPCRE2 "pcre2";
+
+  preFixup = lib.optionalString canRunRg ''
+    ${rg} --generate man > rg.1
+    installManPage rg.1
+
+    installShellCompletion --cmd rg \
+      --bash <(${rg} --generate complete-bash) \
+      --fish <(${rg} --generate complete-fish) \
+      --zsh <(${rg} --generate complete-zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    file="$(mktemp)"
+    echo "abc\nbcd\ncde" > "$file"
+    ${rg} -N 'bcd' "$file"
+    ${rg} -N 'cd' "$file"
+  '' + lib.optionalString withPCRE2 ''
+    echo '(a(aa)aa)' | ${rg} -P '\((a*|(?R))*\)'
+  '';
+
+  meta = with lib; {
+    description = "A utility that combines the usability of The Silver Searcher with the raw speed of grep";
+    homepage = "https://github.com/BurntSushi/ripgrep";
+    changelog = "https://github.com/BurntSushi/ripgrep/releases/tag/${version}";
+    license = with licenses; [ unlicense /* or */ mit ];
+    maintainers = with maintainers; [ globin ma27 zowoq ];
+    mainProgram = "rg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/rnr/default.nix b/nixpkgs/pkgs/tools/text/rnr/default.nix
new file mode 100644
index 000000000000..834ecfddee77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/rnr/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rnr";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "ismaelgv";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-g/PnvOZzlWzEHf3vvYANeJ2ogQ/6duNzhlKpKMBoBFU=";
+  };
+
+  cargoSha256 = "sha256-+oDRNBQ03MknhcTpZFKt0ipJY43LPOKbGF014rrs6dw=";
+
+  meta = with lib; {
+    description = "A command-line tool to batch rename files and directories";
+    homepage = "https://github.com/ismaelgv/rnr";
+    changelog = "https://github.com/ismaelgv/rnr/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/rosie/default.nix b/nixpkgs/pkgs/tools/text/rosie/default.nix
new file mode 100644
index 000000000000..190fd4944d15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/rosie/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchgit
+, libbsd
+, readline
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rosie";
+  version = "1.3.0";
+
+  src = fetchgit {
+    url = "https://gitlab.com/rosie-pattern-language/rosie";
+    rev = "9303e04ae2cffabdda6ccc4e2a351a47218615ff";
+    sha256 = "1smh760baf43hr56p6rh4khz3shyzda5lqva4ffxwchl7yy7r82j";
+    fetchSubmodules = true;
+  };
+
+  postUnpack = ''
+    # The Makefile calls git to update submodules, unless this file exists
+    touch ${src.name}/submodules/~~present~~
+  '';
+
+  preConfigure = ''
+    patchShebangs src/build_info.sh
+    # rosie is ran as part of `make check`,
+    # and so needs to be patched in preConfigure.
+    patchShebangs rosie
+    # Part of the same Makefile target which calls git to update submodules
+    ln -s src submodules/lua/include
+    # ldconfig is irrelevant, disable it inside `make installforce`.
+    sed -iE 's/ldconfig/echo skippin ldconfig/' Makefile
+    sed -iE '/ld.so.conf.d/d' Makefile
+  '';
+
+  preInstall = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -add_rpath $out/lib build/bin/rosie
+    install_name_tool -id $out/lib/librosie.dylib build/lib/librosie.dylib
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/emacs/site-lisp $out/share/vim-plugins $out/share/nvim
+    mv $out/lib/rosie/extra/emacs/* $out/share/emacs/site-lisp/
+    mv $out/lib/rosie/extra/vim $out/share/vim-plugins/rosie
+    ln -s $out/share/vim-plugins/rosie $out/share/nvim/site
+  '';
+
+  # librosie.so is dlopen'ed , so we disable ELF patching to preserve RUNPATH .
+  dontPatchELF = true;
+
+  makeFlags = [ "DESTDIR=${placeholder "out"}" ];
+
+  buildInputs = [ libbsd readline ];
+
+  meta = with lib; {
+    homepage = "https://rosie-lang.org";
+    description = "Tools for searching using parsing expression grammars";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kovirobi ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/rpl/default.nix b/nixpkgs/pkgs/tools/text/rpl/default.nix
new file mode 100644
index 000000000000..9f37fd260d71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/rpl/default.nix
@@ -0,0 +1,38 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "rpl";
+  version = "1.10";
+
+  # Tests not included in pip package.
+  doCheck = false;
+
+
+  src = fetchFromGitHub {
+    owner = "rrthomas";
+    repo = "rpl";
+    rev = "4467bd46a7a798f738247a7f090c1505176bd597";
+    sha256 = "0yf3pc3fws4nnh4nd8d3jpglmsyi69d17qqgpcnkpqca5l4cd25w";
+  };
+
+  patches = [
+    ./remove-argparse-manpage.diff # quickfix for ImportError: No module named build_manpages.build_manpages
+  ];
+
+  propagatedBuildInputs = [
+    #python3Packages.argparse-manpage # TODO
+    python3Packages.chardet
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv rpl $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Replace strings in files";
+    homepage    = "https://github.com/rrthomas/rpl";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ teto ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/rpl/remove-argparse-manpage.diff b/nixpkgs/pkgs/tools/text/rpl/remove-argparse-manpage.diff
new file mode 100644
index 000000000000..8d3297699682
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/rpl/remove-argparse-manpage.diff
@@ -0,0 +1,27 @@
+diff --git a/setup.cfg b/setup.cfg
+index 12e9198..38e5376 100644
+--- a/setup.cfg
++++ b/setup.cfg
+@@ -15,7 +15,6 @@ classifiers =
+ [options]
+ scripts = rpl
+ python_requires = >=3
+-setup_requires = argparse-manpage
+ install_requires = chardet
+ 
+ [options.extras_require]
+diff --git a/setup.py b/setup.py
+index 96cade6..879fc44 100644
+--- a/setup.py
++++ b/setup.py
+@@ -1,9 +1,8 @@
+-from build_manpages.build_manpages import get_install_cmd
+ from setuptools import setup
+ from setuptools.command.install import install
+ 
+ setup(
+     cmdclass={
+-        'install': get_install_cmd(install),
++        'install': install,
+     }
+ )
diff --git a/nixpkgs/pkgs/tools/text/rsbkb/default.nix b/nixpkgs/pkgs/tools/text/rsbkb/default.nix
new file mode 100644
index 000000000000..32b8f4387b4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/rsbkb/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, enableAppletSymlinks ? true
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rsbkb";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "trou";
+    repo = "rsbkb";
+    rev = "release-${version}";
+    hash = "sha256-SGV7ovaOVnOFlCSyxKrd4Tg8Ak71BzvLgEvCneHhx0w=";
+  };
+
+  cargoHash = "sha256-UC9i1rPdQ4YLQoMQYXyL0j6EUhMwyKuD+vk4z5XLLAk=";
+
+  # Setup symlinks for all the utilities,
+  # busybox style
+  postInstall = lib.optionalString enableAppletSymlinks ''
+    cd $out/bin || exit 1
+    path="$(realpath --canonicalize-missing ./rsbkb)"
+    for i in $(./rsbkb list) ; do ln -s $path $i ; done
+  '';
+
+  meta = with lib; {
+    description = "Command line tools to encode/decode things";
+    homepage = "https://github.com/trou/rsbkb";
+    changelog = "https://github.com/trou/rsbkb/releases/tag/release-${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ProducerMatt ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile b/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile
new file mode 100644
index 000000000000..4bb5d8c175d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'ruby-zoom'
diff --git a/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile.lock b/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile.lock
new file mode 100644
index 000000000000..820a972d106d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile.lock
@@ -0,0 +1,24 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    djinni (2.2.4)
+      fagin (~> 1.2, >= 1.2.1)
+    fagin (1.2.1)
+    hilighter (1.2.3)
+    json_config (1.1.0)
+    ruby-zoom (5.3.0)
+      djinni (~> 2.2, >= 2.2.4)
+      fagin (~> 1.2, >= 1.2.1)
+      hilighter (~> 1.2, >= 1.2.3)
+      json_config (~> 1.0, >= 1.0.0)
+      scoobydoo (~> 1.0, >= 1.0.0)
+    scoobydoo (1.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  ruby-zoom
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/text/ruby-zoom/default.nix b/nixpkgs/pkgs/tools/text/ruby-zoom/default.nix
new file mode 100644
index 000000000000..06e505816648
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ruby-zoom/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv {
+  pname = "ruby-zoom";
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "ruby-zoom";
+
+  meta = with lib; {
+    description = "Quickly open CLI search results in your favorite editor";
+    homepage    = "https://gitlab.com/mjwhitta/zoom";
+    license     = with licenses; gpl3;
+    maintainers = with maintainers; [ vmandela nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ruby-zoom/gemset.nix b/nixpkgs/pkgs/tools/text/ruby-zoom/gemset.nix
new file mode 100644
index 000000000000..19584787d904
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ruby-zoom/gemset.nix
@@ -0,0 +1,64 @@
+{
+  djinni = {
+    dependencies = ["fagin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18zk80jk70xq1bnsvzcgxb13x9fqdb5g4m02b2f6mvqm4cyw26pl";
+      type = "gem";
+    };
+    version = "2.2.4";
+  };
+  fagin = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0psyydh4hf2s1kz0r50aiyjf5v2pqhkbmy0gicxzaj5n17q2ga24";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  hilighter = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03zm49g96dfpan5fhblcjxrzv7ldwan57sn0jcllkcmrqfd0zlyz";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  json_config = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0slb618n1ipn47j6dsxbfv2j9pl06dxn2i651llix09d529m7zwa";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  ruby-zoom = {
+    dependencies = ["djinni" "fagin" "hilighter" "json_config" "scoobydoo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iqxc0rzypsxy4wbxnvgvk98dbcsrcczq3xi9xd4wz4ggwq564l3";
+      type = "gem";
+    };
+    version = "5.3.0";
+  };
+  scoobydoo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "162p75nc9x078kqcpdsrsd7kngs6jc5n4injz3kzpwf0jgbbm8n7";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/runiq/default.nix b/nixpkgs/pkgs/tools/text/runiq/default.nix
new file mode 100644
index 000000000000..42b9e2aef395
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/runiq/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchCrate, stdenv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "runiq";
+  version = "2.0.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-qcgPuJOpK2fCsHAgzoIKF7upb9B3ySIZkpu9xf4JnCc=";
+  };
+
+  cargoHash = "sha256-WSMV0GNKNckN9uSPN647iDloGkNtaKcrZbeyglUappc=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "An efficient way to filter duplicate lines from input, à la uniq";
+    homepage = "https://github.com/whitfin/runiq";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ruplacer/default.nix b/nixpkgs/pkgs/tools/text/ruplacer/default.nix
new file mode 100644
index 000000000000..b44165d6ea88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ruplacer/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ruplacer";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "TankerHQ";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xuq+Scy5MyyGvI51Vs26pk9+NnlghzGEJDHYC3kSXNw=";
+  };
+
+  cargoHash = "sha256-Kevwpkvgq40LhWxhW9ra2Nd1zEiAF372DM1sY9hnQb0=";
+
+  buildInputs = (lib.optional stdenv.isDarwin Security);
+
+  meta = with lib; {
+    description = "Find and replace text in source files";
+    homepage = "https://github.com/TankerHQ/ruplacer";
+    license = [ licenses.bsd3 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/rust-petname/default.nix b/nixpkgs/pkgs/tools/text/rust-petname/default.nix
new file mode 100644
index 000000000000..fda0ebf90404
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/rust-petname/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-petname";
+  version = "1.1.3";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "petname";
+    sha256 = "sha256-C6EJ8awdTV9TecMeYdbmleK8171+hvphjXJrWNJSXxo=";
+  };
+
+  cargoSha256 = "sha256-mB4n1IxhNXrAsCz/jv5jgqyO9OgISZnI5E/vFu80+FE=";
+
+  meta = with lib; {
+    description = "Generate human readable random names";
+    homepage = "https://github.com/allenap/rust-petname";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "petname";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sad/default.nix b/nixpkgs/pkgs/tools/text/sad/default.nix
new file mode 100644
index 000000000000..da4ff0804b11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sad/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, python3
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sad";
+  version = "0.4.23";
+
+  src = fetchFromGitHub {
+    owner = "ms-jpq";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-LNMc+3pXx7VyNq0dws+s13ZA3+f8aJzgbAxzI71NKx0=";
+  };
+
+  cargoHash = "sha256-UjXJmH4UI5Vey2rBy57CI1r13bpGYhIozEoOoyoRDLQ=";
+
+  nativeBuildInputs = [ python3 ];
+
+  # fix for compilation on aarch64
+  # see https://github.com/NixOS/nixpkgs/issues/145726
+  prePatch = ''
+    rm .cargo/config.toml
+  '';
+
+  meta = with lib; {
+    description = "CLI tool to search and replace";
+    homepage = "https://github.com/ms-jpq/sad";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/schema2ldif/default.nix b/nixpkgs/pkgs/tools/text/schema2ldif/default.nix
new file mode 100644
index 000000000000..fc4a2153d662
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/schema2ldif/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenvNoCC, fetchurl, makeWrapper, perlPackages }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "schema2ldif";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "https://repos.fusiondirectory.org/sources/schema2ldif/schema2ldif-${version}.tar.gz";
+    hash = "sha256-KmXdqVuINUnJ6EF5oKgk6BsT3h5ebVqss7aCl3pPjQE=";
+  };
+
+  postPatch = ''
+    # Removes the root check and changes the temporary location
+    # from the nix store to $PWD
+    sed -i \
+      -e '/You have to run this script as root/d' \
+      -e 's|/\^(\.\*)\\\.schema\$/|/.*\\/(.*)\\.schema$/|g' \
+      bin/ldap-schema-manager
+  '';
+
+  buildInputs = [ perlPackages.perl ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+
+    cp bin/{schema2ldif,ldap-schema-manager} $out/bin
+    gzip -c man/schema2ldif.1 > $out/share/man/man1/schema2ldif.1.gz
+    gzip -c man/ldap-schema-manager.1 > $out/share/man/man1/ldap-schema-manager.1.gz
+
+    wrapProgram $out/bin/schema2ldif \
+       --prefix PERL5PATH : "${perlPackages.makePerlPath [ perlPackages.GetoptLong ]}"
+  '';
+
+  meta = with lib; {
+    description = "Utilities to manage schema in .schema and .ldif format";
+    homepage = "https://www.fusiondirectory.org/schema2ldif-project-and-components/";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/scraper/default.nix b/nixpkgs/pkgs/tools/text/scraper/default.nix
new file mode 100644
index 000000000000..05c4957f27dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/scraper/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchCrate, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "scraper";
+  version = "0.18.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-fnX2v7VxVFgn9UT1+qWBvN+oDDI2DbK6UFKmby5aB5c=";
+  };
+
+  cargoHash = "sha256-HeT3U4H/OM/91BdXTvZq+gpmOnt/P4wTlqc2dl4erlQ=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage scraper.1
+  '';
+
+  meta = with lib; {
+    description = "A tool to query HTML files with CSS selectors";
+    homepage = "https://github.com/causal-agent/scraper";
+    changelog = "https://github.com/causal-agent/scraper/releases/tag/v${version}";
+    license = licenses.isc;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sd/default.nix b/nixpkgs/pkgs/tools/text/sd/default.nix
new file mode 100644
index 000000000000..8dc160cd014d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sd/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sd";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "chmln";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-hC4VKEgrAVuqOX7b24XhtrxrnJW5kmlX4E6QbY9H8OA=";
+  };
+
+  cargoHash = "sha256-IhCuWCaSU7c7Tot4uvxE7oabY69wDLstuBN35OzkQcU=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  postInstall = ''
+    installManPage gen/sd.1
+
+    installShellCompletion gen/completions/sd.{bash,fish}
+    installShellCompletion --zsh gen/completions/_sd
+  '';
+
+  meta = with lib; {
+    description = "Intuitive find & replace CLI (sed alternative)";
+    homepage = "https://github.com/chmln/sd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ amar1729 Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/seehecht/default.nix b/nixpkgs/pkgs/tools/text/seehecht/default.nix
new file mode 100644
index 000000000000..55c02a8c90c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/seehecht/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitea }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "seehecht";
+  version = "3.0.3";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = "seehecht";
+    rev = "v${version}";
+    sha256 = "sha256-KIxK0JYfq/1Bn4LOn+LzWPBUvGYMvOEuqS7GMpDRvW0=";
+  };
+
+  cargoSha256 = "sha256-AeVUVF4SBS9FG0iezLBKUm4Uk1PPRXPTON93evgL9IA=";
+
+  postInstall = ''
+    ln -s $out/bin/seh $out/bin/seehecht
+  '';
+
+  meta = with lib; {
+    description = "A tool to quickly open a markdown document with already filled out frontmatter";
+    license = licenses.lgpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ annaaurora ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sgml/jade/default.nix b/nixpkgs/pkgs/tools/text/sgml/jade/default.nix
new file mode 100644
index 000000000000..a744300bfdde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/jade/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, gnum4 }:
+
+stdenv.mkDerivation rec {
+  pname = "jade";
+  version = "1.2.1";
+  debpatch = "47.3";
+
+  src = fetchurl {
+    url = "ftp://ftp.jclark.com/pub/jade/jade-${version}.tar.gz";
+    sha256 = "84e2f8a2a87aab44f86a46b71405d4f919b219e4c73e03a83ab6c746a674b187";
+  };
+
+  patchsrc =  fetchurl {
+    url = "mirror://debian/pool/main/j/jade/jade_${version}-${debpatch}.diff.gz";
+    sha256 = "8e94486898e3503308805f856a65ba5b499a6f21994151270aa743de48305464";
+  };
+
+  patches = [ patchsrc ];
+
+  buildInputs = [ gnum4 ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-deprecated";
+
+  # Makefile is missing intra-library depends, fails build as:
+  # ld: cannot find -lsp
+  # ld: cannot find -lspgrove
+  enableParallelBuilding = false;
+
+  preInstall = ''
+    install -d -m755 "$out"/lib
+  '';
+
+  postInstall = ''
+    mv "$out/bin/sx" "$out/bin/sgml2xml"
+  '';
+
+  meta = {
+    description = "James Clark's DSSSL Engine";
+    license = "custom";
+    homepage = "http://www.jclark.com/jade/";
+    platforms = with lib.platforms; linux;
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sgml/linuxdoc-tools/default.nix b/nixpkgs/pkgs/tools/text/sgml/linuxdoc-tools/default.nix
new file mode 100644
index 000000000000..d2611bec7318
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/linuxdoc-tools/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, lib, makeWrapper, fetchFromGitLab, perl, flex
+, gnused, coreutils, which, opensp, groff, texliveMedium, texinfo, withLatex ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "linuxdoc-tools";
+  version = "0.9.83";
+
+  src = fetchFromGitLab {
+    owner = "agmartin";
+    repo = "linuxdoc-tools";
+    rev = version;
+    sha256 = "sha256-1F3MDYJ9UH7ypgTSfYZV59PfLirlTmw6XBMEnz5Jtyk=";
+  };
+
+  outputs = [ "out" "man" "doc" ];
+
+  configureFlags = [
+    ("--enable-docs=txt info lyx html rtf"
+      + lib.optionalString withLatex " pdf")
+  ];
+
+  LEX = "flex";
+
+  postInstall = ''
+    wrapProgram $out/bin/linuxdoc \
+      --prefix PATH : "${lib.makeBinPath [ groff opensp ]}:$out/bin" \
+      --prefix PERL5LIB : "$out/share/linuxdoc-tools/"
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    pushd doc/example
+    substituteInPlace Makefile \
+      --replace "COMMAND=linuxdoc" "COMMAND=$out/bin/linuxdoc" \
+      ${lib.optionalString (!withLatex) "--replace '.tex .dvi .ps .pdf' ''"}
+    make
+    popd
+  '';
+
+  nativeBuildInputs = [ flex which makeWrapper ];
+
+  buildInputs = [ opensp groff texinfo perl gnused coreutils ]
+    ++ lib.optionals withLatex [ texliveMedium ];
+
+  meta = with lib; {
+    description = "Toolset for processing LinuxDoc DTD SGML files";
+    longDescription = ''
+      A collection of text formatters which understands a LinuxDoc DTD SGML
+      source file. Each formatter (or "back-end") renders the source file into
+      a variety of output formats, including HTML, TeX, DVI, PostScript, plain
+      text, and groff source in manual-page format. The linuxdoc suite is
+      provided for backward compatibility, because there are still many useful
+      documents written in LinuxDoc DTD sgml source.
+    '';
+    homepage = "https://gitlab.com/agmartin/linuxdoc-tools";
+    license = with licenses; [ gpl3Plus mit sgmlug ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ p-h ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sgml/openjade/default.nix b/nixpkgs/pkgs/tools/text/sgml/openjade/default.nix
new file mode 100644
index 000000000000..5e175518b692
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/openjade/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, opensp, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "openjade";
+  version = "1.3.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openjade/openjade-${version}.tar.gz";
+    sha256 = "1l92sfvx1f0wmkbvzv1385y1gb3hh010xksi1iyviyclrjb7jb8x";
+  };
+
+  patches = [ ./msggen.patch ];
+
+  buildInputs = [ opensp perl ];
+
+  configureFlags = [
+    "--enable-spincludedir=${opensp}/include/OpenSP"
+    "--enable-splibdir=${opensp}/lib"
+  ];
+
+  meta = {
+    description = "An implementation of DSSSL, an ISO standard for formatting SGML (and XML) documents";
+    license = lib.licenses.mit;
+    homepage = "https://openjade.sourceforge.net/";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sgml/openjade/msggen.patch b/nixpkgs/pkgs/tools/text/sgml/openjade/msggen.patch
new file mode 100644
index 000000000000..d59573fa49cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/openjade/msggen.patch
@@ -0,0 +1,34 @@
+http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/app-text/openjade/files/openjade-1.3.2-msggen.pl.patch?revision=1.2
+
+Use Getopt::Std in place of getopts.pl.
+https://bugs.gentoo.org/show_bug.cgi?id=420083
+
+--- a/msggen.pl
++++ b/msggen.pl
+@@ -4,6 +4,7 @@
+ # See the file COPYING for copying permission.
+ 
+ use POSIX;
++use Getopt::Std;
+ 
+ # Package and version.
+ $package = 'openjade';
+@@ -18,8 +19,7 @@
+ undef $opt_l;
+ undef $opt_p;
+ undef $opt_t;
+-do 'getopts.pl';
+-&Getopts('l:p:t:');
++getopts('l:p:t:');
+ $module = $opt_l;
+ $pot_file = $opt_p;
+ 
+@@ -72,7 +72,7 @@
+     else {
+ 	$field[0] =~ /^[IWQXE][0-9]$/ || &error("invalid first field");;
+ 	$type[$num] = substr($field[0], 0, 1);
+-	$argc = int(substr($field[0], 1, 1));
++	$argc = substr($field[0], 1, 1);
+     }
+     $nargs[$num] = $argc;
+     $field[1] =~ /^[a-zA-Z_][a-zA-Z0-9_]+$/ || &error("invalid tag");
diff --git a/nixpkgs/pkgs/tools/text/sgml/opensp/default.nix b/nixpkgs/pkgs/tools/text/sgml/opensp/default.nix
new file mode 100644
index 000000000000..27f5dc4e9d9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/opensp/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchurl, fetchpatch, xmlto, docbook_xml_dtd_412
+, docbook_xsl, autoconf, automake, libtool
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "opensp";
+  version = "1.5.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openjade/OpenSP-${version}.tar.gz";
+    sha256 = "1khpasr6l0a8nfz6kcf3s81vgdab8fm2dj291n5r2s53k228kx2p";
+  };
+
+  postPatch = ''
+    sed -i s,/usr/share/sgml/docbook/xml-dtd-4.1.2/,${docbook_xml_dtd_412}/xml/dtd/docbook/, \
+      docsrc/*.xml
+  '';
+
+  patches = [
+    (fetchpatch {
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-text/opensp/files/opensp-1.5.2-c11-using.patch?id=688d9675782dfc162d4e6cff04c668f7516118d0";
+      sha256 = "04q14s8qsad0bkjmj067dn831i0r6v7742rafdlnbfm5y249m2q6";
+    })
+    # Clang 16 defaults to C++17, which does not allow `register` as a storage class specifier.
+    ./fix-register-storage-class.patch
+  ];
+
+  setupHook = ./setup-hook.sh;
+
+  postFixup = ''
+    # Remove random ids in the release notes
+    sed -i -e 's/href="#idm.*"//g' $out/share/doc/OpenSP/releasenotes.html
+    sed -i -e 's/name="idm.*"//g' $out/share/doc/OpenSP/releasenotes.html
+    '';
+
+  preConfigure = lib.optionalString stdenv.isCygwin ''
+    autoreconf -fi
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    xmlto
+    docbook_xml_dtd_412
+    docbook_xsl
+  ]
+  # Clang 16 fails to build due to inappropriate definitions in the `config.h` generated by the
+  # existing configure scripts. Regenerate them to make sure they detect its features correctly.
+  ++ lib.optional stdenv.cc.isClang autoreconfHook
+  ++ lib.optionals stdenv.isCygwin [ autoconf automake libtool ];
+
+  doCheck = false; # fails
+
+  meta = with lib; {
+    description = "A suite of SGML/XML processing tools";
+    license = licenses.mit;
+    homepage = "https://openjade.sourceforge.net/";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sgml/opensp/fix-register-storage-class.patch b/nixpkgs/pkgs/tools/text/sgml/opensp/fix-register-storage-class.patch
new file mode 100644
index 000000000000..ce1aba32437b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/opensp/fix-register-storage-class.patch
@@ -0,0 +1,11 @@
+--- a/lib/Recognizer.cxx	2005-11-05 04:05:20.000000000 -0500
++++ b/lib/Recognizer.cxx	2023-06-03 11:45:04.497116217 -0400
+@@ -39,7 +39,7 @@
+   }
+   else
+     in->startTokenNoMulticode();
+-  register const Trie *pos = trie_.pointer();
++  const Trie *pos = trie_.pointer();
+   do {
+     pos = pos->next(map_[in->tokenChar(mgr)]);
+   } while (pos->hasNext());
diff --git a/nixpkgs/pkgs/tools/text/sgml/opensp/setup-hook.sh b/nixpkgs/pkgs/tools/text/sgml/opensp/setup-hook.sh
new file mode 100644
index 000000000000..5bace3c66889
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/opensp/setup-hook.sh
@@ -0,0 +1,22 @@
+addSGMLCatalogs () {
+      if test -d $1/sgml/dtd; then
+          for i in $(find $1/sgml/dtd -name docbook.cat); do
+              export SGML_CATALOG_FILES="${SGML_CATALOG_FILES:+:}$i"
+          done
+      fi
+}
+
+if test -z "${sgmlHookDone-}"; then
+    sgmlHookDone=1
+
+    # Set http_proxy and ftp_proxy to a invalid host to prevent
+    # xmllint and xsltproc from trying to download DTDs from the
+    # network even when --nonet is not given.  That would be impure.
+    # (Note that .invalid is a reserved domain guaranteed not to
+    # work.)
+    export http_proxy=http://nodtd.invalid/
+    export ftp_proxy=http://nodtd.invalid/
+
+    export SGML_CATALOG_FILES
+    addEnvHooks "$targetOffset" addSGMLCatalogs
+fi
diff --git a/nixpkgs/pkgs/tools/text/sgrep/default.nix b/nixpkgs/pkgs/tools/text/sgrep/default.nix
new file mode 100644
index 000000000000..f3d23d166696
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgrep/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, sgrep, fetchurl, runCommand, lib, m4, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "sgrep";
+  version = "1.94a";
+
+  src = fetchurl {
+    url = "https://www.cs.helsinki.fi/pub/Software/Local/Sgrep/sgrep-${version}.tar.gz";
+    sha256 = "sha256-1bFkeOOrRHNeJCg9LYldLJyAE5yVIo3zvbKsRGOV+vk=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/sgrep \
+      --prefix PATH : ${lib.makeBinPath [ m4 ]}
+  '';
+
+  passthru.tests.smokeTest = runCommand "test-sgrep" { } ''
+    expr='"<foo>" __ "</foo>"'
+    data="<foo>1</foo><bar>2</bar>"
+    ${sgrep}/bin/sgrep "$expr" <<<$data >$out
+    read result <$out
+    [[ $result = 1 ]]
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.cs.helsinki.fi/u/jjaakkol/sgrep.html";
+    description = "A grep for structured text formats such as XML";
+    longDescription = ''
+      sgrep (structured grep) is a tool for searching and indexing text,
+      SGML, XML and HTML files and filtering text streams using
+      structural criteria.
+    '';
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ eigengrau ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/shab/default.nix b/nixpkgs/pkgs/tools/text/shab/default.nix
new file mode 100644
index 000000000000..b5bb98e5f4d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/shab/default.nix
@@ -0,0 +1,73 @@
+{ bash, stdenv, lib, runCommand, writeText, fetchFromGitHub }:
+let
+  version = "1.0.0";
+
+  shab = stdenv.mkDerivation {
+    pname = "shab";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "zimbatm";
+      repo = "shab";
+      rev = "v${version}";
+      sha256 = "02lf1s6plhhcfyj9xha44wij9jbphb1x5q55xj3b5bx2ji2jsvji";
+    };
+
+    postPatch = ''
+      for f in test.sh test/*.sh; do
+        patchShebangs "$f"
+      done
+    '';
+
+    doCheck = true;
+    doInstallCheck = true;
+
+    checkPhase = ''
+      ./test.sh
+    '';
+
+    installPhase = ''
+      mkdir -p $out/bin
+      cp ./shab $out/bin/shab
+    '';
+
+    installCheckPhase = ''
+      [[ "$(echo 'Hello $entity' | entity=world $out/bin/shab)" == 'Hello world' ]]
+    '';
+
+    passthru = {
+      inherit render renderText;
+    };
+
+    meta = with lib; {
+      description = "The bash templating language";
+      homepage = "https://github.com/zimbatm/shab";
+      license = licenses.unlicense;
+      maintainers = with maintainers; [ zimbatm ];
+      platforms = bash.meta.platforms;
+    };
+  };
+
+  /*
+     shabScript:       a path or filename to use as a template
+     parameters.name:  the name to use as part of the store path
+     parameters:       variables to expose to the template
+   */
+  render = shabScript: parameters:
+    let extraParams = {
+          inherit shabScript;
+        };
+    in runCommand "out" (parameters // extraParams) ''
+      ${shab}/bin/shab "$shabScript" >$out
+    '';
+
+  /*
+     shabScriptText:   a string to use as a template
+     parameters.name:  the name to use as part of the store path
+     parameters:       variables to expose to the template
+   */
+  renderText = shabScriptText: parameters:
+    render (writeText "template" shabScriptText) parameters;
+
+in
+  shab
diff --git a/nixpkgs/pkgs/tools/text/shfmt/default.nix b/nixpkgs/pkgs/tools/text/shfmt/default.nix
new file mode 100644
index 000000000000..8c5da3097b4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/shfmt/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, scdoc }:
+
+buildGoModule rec {
+  pname = "shfmt";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "mvdan";
+    repo = "sh";
+    rev = "v${version}";
+    sha256 = "sha256-2AnSmwl4ID7QxF8k1fl50S47KjKs9PwVpxchUIlhVo0=";
+  };
+
+  vendorHash = "sha256-rWAnWohbQZyPlOWqWwcxPMDABxumCo4M8fBUx54q76c=";
+
+  subPackages = [ "cmd/shfmt" ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  nativeBuildInputs = [ installShellFiles scdoc ];
+
+  postBuild = ''
+    scdoc < cmd/shfmt/shfmt.1.scd > shfmt.1
+    installManPage shfmt.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mvdan/sh";
+    description = "A shell parser and formatter";
+    longDescription = ''
+      shfmt formats shell programs. It can use tabs or any number of spaces to indent.
+      You can feed it standard input, any number of files or any number of directories to recurse into.
+    '';
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ zowoq SuperSandro2000 ];
+    mainProgram = "shfmt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/shocco/default.nix b/nixpkgs/pkgs/tools/text/shocco/default.nix
new file mode 100644
index 000000000000..1359db98978c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/shocco/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, perlPackages, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "shocco";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "rtomayko";
+    repo = "shocco";
+    rev = version;
+    sha256 = "1nkwcw9fqf4vyrwidqi6by7nrmainkjqkirkz3yxmzk6kzwr38mi";
+  };
+
+  prePatch = ''
+    # Don't change $PATH
+    substituteInPlace configure --replace PATH= NIRVANA=
+  '';
+
+  buildInputs = [ perlPackages.TextMarkdown python3.pkgs.pygments ];
+
+  meta = with lib; {
+    description = "A quick-and-dirty, literate-programming-style documentation generator for / in POSIX shell";
+    homepage = "https://rtomayko.github.io/shocco/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sift/default.nix b/nixpkgs/pkgs/tools/text/sift/default.nix
new file mode 100644
index 000000000000..25dd61a3e4a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sift/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, installShellFiles }:
+
+buildGoModule rec {
+  pname = "sift";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "svent";
+    repo = "sift";
+    rev = "v${version}";
+    hash = "sha256-IZ4Hwg5NzdSXtrIDNxtkzquuiHQOmLV1HSx8gpwE/i0=";
+  };
+
+  vendorHash = "sha256-y883la4R4jhsS99/ohgBC9SHggybAq9hreda6quG3IY=";
+
+  patches = [
+    # Add Go Modules support
+    (fetchpatch {
+      url = "https://github.com/svent/sift/commit/b56fb3d0fd914c8a6c08b148e15dd8a07c7d8a5a.patch";
+      hash = "sha256-mFCEpkgQ8XDPRQ3yKDZ5qY9tKGSuHs+RnhMeAlx33Ng=";
+    })
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installShellCompletion --cmd sift --bash sift-completion.bash
+  '';
+
+  meta = with lib; {
+    description = "A fast and powerful alternative to grep";
+    homepage = "https://sift-tool.org";
+    maintainers = with maintainers; [ viraptor ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/silver-searcher/bash-completion.patch b/nixpkgs/pkgs/tools/text/silver-searcher/bash-completion.patch
new file mode 100644
index 000000000000..30e8c72389b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/silver-searcher/bash-completion.patch
@@ -0,0 +1,5 @@
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -9 +9 @@
+-bashcompdir = $(pkgdatadir)/completions
++bashcompdir = $(datadir)/bash-completion/completions
diff --git a/nixpkgs/pkgs/tools/text/silver-searcher/default.nix b/nixpkgs/pkgs/tools/text/silver-searcher/default.nix
new file mode 100644
index 000000000000..94c5c8cf02fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/silver-searcher/default.nix
@@ -0,0 +1,35 @@
+{lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, pcre, zlib, xz}:
+
+stdenv.mkDerivation rec {
+  pname = "silver-searcher";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "ggreer";
+    repo = "the_silver_searcher";
+    rev = version;
+    sha256 = "0cyazh7a66pgcabijd27xnk1alhsccywivv6yihw378dqxb22i1p";
+  };
+
+  patches = [ ./bash-completion.patch ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: src/zfile.o:/build/source/src/log.h:12: multiple definition of
+  #     `print_mtx'; src/ignore.o:/build/source/src/log.h:12: first defined here
+  # TODO: remove once next release has https://github.com/ggreer/the_silver_searcher/pull/1377
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+  NIX_LDFLAGS = lib.optionalString stdenv.isLinux "-lgcc_s";
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ pcre zlib xz ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ggreer/the_silver_searcher/";
+    description = "A code-searching tool similar to ack, but faster";
+    maintainers = with maintainers; [ madjar ];
+    mainProgram = "ag";
+    platforms = platforms.all;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/smu/default.nix b/nixpkgs/pkgs/tools/text/smu/default.nix
new file mode 100644
index 000000000000..85e593982e85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/smu/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "smu";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "Gottox";
+    repo = "smu";
+    rev = "v${version}";
+    sha256 = "1jm7lhnzjx4q7gcwlkvsbffcy0zppywyh50d71ami6dnq182vvcc";
+  };
+
+  # _FORTIFY_SOURCE requires compiling with optimization (-O)
+  env.NIX_CFLAGS_COMPILE = "-O";
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "simple markup - markdown like syntax";
+    homepage = "https://github.com/Gottox/smu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/text/snippetpixie/default.nix b/nixpkgs/pkgs/tools/text/snippetpixie/default.nix
new file mode 100644
index 000000000000..0483d8c2c0cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/snippetpixie/default.nix
@@ -0,0 +1,89 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, meson
+, ninja
+, vala
+, pkg-config
+, wrapGAppsHook
+, appstream
+, desktop-file-utils
+, python3
+, libgee
+, glib
+, gtk3
+, sqlite
+, at-spi2-atk
+, at-spi2-core
+, dbus
+, ibus
+, json-glib
+, pantheon
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "snippetpixie";
+  version = "1.5.3";
+
+  src = fetchFromGitHub {
+    owner = "bytepixie";
+    repo = pname;
+    rev = version;
+    sha256 = "0gs3d9hdywg4vcfbp4qfcagfjqalfgw9xpvywg4pw1cm3rzbdqmz";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    pkg-config
+    wrapGAppsHook
+    appstream
+    desktop-file-utils
+    python3
+  ];
+
+  buildInputs = [
+    libgee
+    glib
+    gtk3
+    sqlite
+    at-spi2-atk
+    at-spi2-core
+    dbus
+    ibus
+    json-glib
+    xorg.libXtst
+    pantheon.granite
+  ];
+
+  doCheck = true;
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Your little expandable text snippet helper";
+    longDescription = ''
+      Your little expandable text snippet helper.
+
+      Save your often used text snippets and then expand them whenever you type their abbreviation.
+
+      For example:- "spr`" expands to "Snippet Pixie rules!"
+
+      For non-accessible applications such as browsers and Electron apps, there's a shortcut (default is Ctrl+`) for opening a search window that pastes the selected snippet.
+    '';
+    homepage = "https://www.snippetpixie.com";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ianmjones ] ++ teams.pantheon.members;
+    platforms = platforms.linux;
+    mainProgram = "com.github.bytepixie.snippetpixie";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sorted-grep/default.nix b/nixpkgs/pkgs/tools/text/sorted-grep/default.nix
new file mode 100644
index 000000000000..60bc0bee676f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sorted-grep/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchurl, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "sorted-grep";
+  version = "1.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sgrep/sgrep-${version}.tgz";
+    hash = "sha256-3F7cXrZnB38YwE1sHYm/CIGKmG+1c0QU+Pk3Y53a0T4=";
+  };
+
+  postPatch = ''
+    # Its Makefile is missing compiler flags and an install step
+    rm -f Makefile
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    ${stdenv.cc.targetPrefix}cc -Wall -O2 -o sgrep sgrep.c
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D sgrep "$out/bin/sgrep"
+
+    runHook postInstall
+  '';
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    set +o pipefail
+    $out/bin/sgrep 2>&1 | grep ^Usage:
+
+    runHook postInstallCheck
+  '';
+
+  doInstallCheck = true;
+
+  meta = with lib; {
+    homepage = "https://sgrep.sourceforge.net/";
+    description = "Sgrep (sorted grep) searches sorted input files for lines that match a search key";
+    longDescription = ''
+      Sgrep (sorted grep) searches sorted input files for lines that match a search
+      key and outputs the matching lines. When searching large files sgrep is much
+      faster than traditional Unix grep, but with significant restrictions.
+    '';
+    platforms = platforms.unix;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ivan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/source-highlight/default.nix b/nixpkgs/pkgs/tools/text/source-highlight/default.nix
new file mode 100644
index 000000000000..d20b3692f31c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/source-highlight/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, fetchpatch, fetchurl, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "source-highlight";
+  version = "3.1.9";
+
+  outputs = [ "out" "doc" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnu/src-highlite/${pname}-${version}.tar.gz";
+    sha256 = "148w47k3zswbxvhg83z38ifi85f9dqcpg7icvvw1cm6bg21x4zrs";
+  };
+
+  patches = [
+    # gcc-11 compat upstream patch
+    (fetchpatch {
+      url = "https://git.savannah.gnu.org/cgit/src-highlite.git/patch/?id=904949c9026cb772dc93fbe0947a252ef47127f4";
+      hash = "sha256-h9DyD+pmlQT5dmKjWI9t0gCIYHe7pYkP55LnOqsE0vI=";
+      excludes = [ "ChangeLog" ];
+    })
+
+    # Upstream fix for clang-13 and gcc-12 test support
+    (fetchpatch {
+      name = "gcc-12.patch";
+      url = "https://git.savannah.gnu.org/cgit/src-highlite.git/patch/?id=ab9fe5cb9b85c5afab94f2a7f4b6d7d473c14ee9";
+      hash = "sha256-wmSLgLnLuFE+IC6AjxzZp/HEnaOCS1VfY2cac0T7Y+w=";
+    })
+  ] ++ lib.optionals stdenv.cc.isClang [
+    # Adds compatibility with C++17 by removing the `register` storage class specifier.
+    (fetchpatch {
+      name = "remove-register-keyword";
+      url = "https://git.savannah.gnu.org/cgit/src-highlite.git/patch/?id=416b39758dba2c74515584514a959ad1b0ad50d1";
+      hash = "sha256-R5A7IGHhU82EqceMCsuNBanhRz4dFVqiaH8637dr7jw=";
+      includes = [ "lib/*" ];
+    })
+  ];
+
+  # source-highlight uses it's own binary to generate documentation.
+  # During cross-compilation, that binary was built for the target
+  # platform architecture, so it can't run on the build host.
+  postPatch = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    substituteInPlace Makefile.in --replace "src doc tests" "src tests"
+  '';
+
+  strictDeps = true;
+  buildInputs = [ boost ];
+
+  configureFlags = [
+    "--with-boost=${boost.out}"
+    "--with-bash-completion=${placeholder "out"}/share/bash-completion/completions"
+  ];
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+  # Upstream uses the same intermediate files in multiple tests, running
+  # them in parallel by make will eventually break one or more tests.
+  enableParallelChecking = false;
+
+  meta = with lib; {
+    description = "Source code renderer with syntax highlighting";
+    longDescription = ''
+      GNU Source-highlight, given a source file, produces a document
+      with syntax highlighting.
+    '';
+    homepage = "https://www.gnu.org/software/src-highlite/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/subedit/default.nix b/nixpkgs/pkgs/tools/text/subedit/default.nix
new file mode 100644
index 000000000000..0ae48901cd96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/subedit/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, libuchardet, dos2unix, file }:
+
+stdenv.mkDerivation {
+  pname = "subedit";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "helixarch";
+    repo = "subedit";
+    rev = "74e11816d7b4813064a2434a5abc0f78f66c0e53";
+    sha256 = "sha256-3ywBBCWbwDqNNkxRupNJX6mYKxVFnoCFKav3Hc4E+8A=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ libuchardet dos2unix file ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m555 subedit $out/bin/
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/subedit --prefix PATH : "${lib.makeBinPath [ libuchardet dos2unix file ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/helixarch/subedit";
+    description = "Command-line subtitle editor written in BASH";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ppom ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/tab/default.nix b/nixpkgs/pkgs/tools/text/tab/default.nix
new file mode 100644
index 000000000000..3f8ef799a6bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/tab/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  version = "9.2";
+  pname = "tab";
+
+  src = fetchFromGitHub {
+    owner = "ivan-tkatchev";
+    repo = pname;
+    rev = version;
+    hash = "sha256-UOXfnpzYMKDdp8EeBo2HsVPGn61hkCqHe8olX9KAgOU=";
+  };
+
+  # gcc12; see https://github.com/ivan-tkatchev/tab/commit/673bdac998
+  postPatch = ''
+    sed '1i#include <cstring>' -i deps.h
+  '';
+
+  nativeCheckInputs = [ python3 ];
+
+  doCheck = !stdenv.isDarwin;
+
+  checkTarget = "test";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin tab
+    install -Dm444 -t $out/share/doc/tab docs/*.html
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Programming language/shell calculator";
+    homepage    = "https://tab-lang.xyz";
+    license     = licenses.boost;
+    maintainers = with maintainers; [ mstarzyk ];
+    platforms   = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/teip/default.nix b/nixpkgs/pkgs/tools/text/teip/default.nix
new file mode 100644
index 000000000000..c0ac20a28149
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/teip/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, perl
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "teip";
+  version = "2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "greymd";
+    repo = "teip";
+    rev = "v${version}";
+    hash = "sha256-09IKAM1ha40CvF5hdQIlUab7EBBFourC70LAagrs5+4=";
+  };
+
+  cargoHash = "sha256-cBFczgvLja6upuPnXphG2d9Rf1ZpNAVh16NHAHfXxHg=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  nativeCheckInputs = [ perl ];
+
+  # Cargo.lock is outdated
+  preConfigure = ''
+    cargo update --offline
+  '';
+
+  # tests are locale sensitive
+  preCheck = ''
+    export LANG=${if stdenv.isDarwin then "en_US.UTF-8" else "C.UTF-8"}
+  '';
+
+  postInstall = ''
+    installManPage man/teip.1
+    installShellCompletion \
+      --bash completion/bash/teip \
+      --fish completion/fish/teip.fish \
+      --zsh completion/zsh/_teip
+  '';
+
+  meta = with lib; {
+    description = "A tool to bypass a partial range of standard input to any command";
+    homepage = "https://github.com/greymd/teip";
+    changelog = "https://github.com/greymd/teip/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/termbook/Cargo.lock b/nixpkgs/pkgs/tools/text/termbook/Cargo.lock
new file mode 100644
index 000000000000..1e786d565107
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/termbook/Cargo.lock
@@ -0,0 +1,2900 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ammonia"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e6d1c7838db705c9b756557ee27c384ce695a1c51a6fe528784cb1c6840170"
+dependencies = [
+ "html5ever",
+ "maplit",
+ "once_cell",
+ "tendril",
+ "url 2.3.1",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide 0.6.2",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
+dependencies = [
+ "byteorder",
+ "safemem",
+]
+
+[[package]]
+name = "base64"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "base64"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
+dependencies = [
+ "block-padding",
+ "byte-tools",
+ "byteorder",
+ "generic-array 0.12.4",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
+dependencies = [
+ "byte-tools",
+]
+
+[[package]]
+name = "bstr"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "byte-tools"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+dependencies = [
+ "byteorder",
+ "iovec",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "term_size",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array 0.14.7",
+ "typenum",
+]
+
+[[package]]
+name = "darling"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9158d690bc62a3a57c3e45b85e4d50de2008b39345592c64efd79345c7e24be0"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2a368589465391e127e10c9e3a08efc8df66fd49b87dc8524c764bbe7f2ef82"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "244e8987bd4e174385240cde20a3657f607fb0797563c28255c353b5819a07b1"
+dependencies = [
+ "darling_core",
+ "quote 0.6.13",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "deflate"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
+[[package]]
+name = "digest"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
+dependencies = [
+ "generic-array 0.12.4",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer 0.10.4",
+ "crypto-common",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "elasticlunr-rs"
+version = "2.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60eee99ae400fb1c4521ea3bd678994cb66572754d240449368e8ecd40281569"
+dependencies = [
+ "lazy_static",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "strum",
+ "strum_macros",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log 0.4.17",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
+dependencies = [
+ "atty",
+ "humantime",
+ "log 0.4.17",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-chain"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
+dependencies = [
+ "backtrace",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "failure"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+dependencies = [
+ "backtrace",
+ "failure_derive",
+]
+
+[[package]]
+name = "failure_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "syn 1.0.109",
+ "synstructure",
+]
+
+[[package]]
+name = "fake-simd"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding 2.2.0",
+]
+
+[[package]]
+name = "fsevent"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6"
+dependencies = [
+ "bitflags",
+ "fsevent-sys",
+]
+
+[[package]]
+name = "fsevent-sys"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gif"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "471d90201b3b223f3451cd4ad53e34295f16a1df17b1edf3736d47761c3981af"
+dependencies = [
+ "color_quant",
+ "lzw",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "gitignore"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d051488d9a601181a9b90c9ad8ae7e8251d642ddd2463008f2f5019d255bd89"
+dependencies = [
+ "glob",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
+dependencies = [
+ "aho-corasick 0.7.20",
+ "bstr",
+ "fnv",
+ "log 0.4.17",
+ "regex",
+]
+
+[[package]]
+name = "handlebars"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba758d094d31274eb49d15da6f326b96bf3185239a6359bf684f3d5321148900"
+dependencies = [
+ "log 0.4.17",
+ "pest",
+ "pest_derive",
+ "quick-error",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "html5ever"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
+dependencies = [
+ "log 0.4.17",
+ "mac",
+ "markup5ever",
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "humantime"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
+dependencies = [
+ "quick-error",
+]
+
+[[package]]
+name = "hyper"
+version = "0.10.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273"
+dependencies = [
+ "base64 0.9.3",
+ "httparse",
+ "language-tags",
+ "log 0.3.9",
+ "mime 0.2.6",
+ "num_cpus",
+ "time",
+ "traitobject",
+ "typeable",
+ "unicase 1.4.2",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.22.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08ed2ada878397b045454ac7cfb011d73132c59f31a955d230bd1f1c2e68eb4a"
+dependencies = [
+ "byteorder",
+ "gif",
+ "jpeg-decoder",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+ "png",
+ "scoped_threadpool",
+ "tiff",
+]
+
+[[package]]
+name = "inflate"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff"
+dependencies = [
+ "adler32",
+]
+
+[[package]]
+name = "inotify"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4816c66d2c8ae673df83366c18341538f234a26d65a9ecea5c348b453ac1d02f"
+dependencies = [
+ "bitflags",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "iron"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6d308ca2d884650a8bf9ed2ff4cb13fbb2207b71f64cda11dc9b892067295e8"
+dependencies = [
+ "hyper",
+ "log 0.3.9",
+ "mime_guess",
+ "modifier",
+ "num_cpus",
+ "plugin",
+ "typemap",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "is-match"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e5b386aef33a1c677be65237cb9d32c3f3ef56bd035949710c4bb13083eb053"
+
+[[package]]
+name = "itertools"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "language-tags"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "line-wrap"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
+dependencies = [
+ "safemem",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg 1.1.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+dependencies = [
+ "log 0.4.17",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "lzw"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084"
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "markup5ever"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
+dependencies = [
+ "log 0.4.17",
+ "phf 0.10.1",
+ "phf_codegen 0.10.0",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "mdbook"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ec525f7ebccc2dd935c263717250cd37f9a4b264a77c5dbc950ea2734d8159"
+dependencies = [
+ "ammonia",
+ "chrono",
+ "clap",
+ "elasticlunr-rs",
+ "env_logger 0.6.2",
+ "error-chain",
+ "gitignore",
+ "handlebars",
+ "iron",
+ "itertools",
+ "lazy_static",
+ "log 0.4.17",
+ "memchr",
+ "notify",
+ "open",
+ "pulldown-cmark 0.6.1",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "shlex",
+ "staticfile",
+ "tempfile",
+ "toml",
+ "toml-query",
+ "ws",
+]
+
+[[package]]
+name = "mdcat"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a95a756c025b1c1a2e84a869fd690ee239ca4af65a8209191d04736e19ba9f08"
+dependencies = [
+ "ansi_term",
+ "base64 0.11.0",
+ "clap",
+ "failure",
+ "gethostname",
+ "image",
+ "mime 0.3.17",
+ "pulldown-cmark 0.6.1",
+ "syntect",
+ "term_size",
+ "url 2.3.1",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "mime"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0"
+dependencies = [
+ "log 0.3.9",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "1.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "216929a5ee4dd316b1702eedf5e74548c123d370f47841ceaac38ca154690ca3"
+dependencies = [
+ "mime 0.2.6",
+ "phf 0.7.24",
+ "phf_codegen 0.7.24",
+ "unicase 1.4.2",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log 0.4.17",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "mio-extras"
+version = "2.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19"
+dependencies = [
+ "lazycell",
+ "log 0.4.17",
+ "mio",
+ "slab",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "modifier"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41f5c9112cb662acd3b204077e0de5bc66305fa8df65c8019d5adb10e9ab6e58"
+
+[[package]]
+name = "mount"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e25c06012941aaf8c75f2eaf7ec5c48cf69f9fc489ab3eb3589edc107e386f0b"
+dependencies = [
+ "iron",
+ "sequence_trie",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "notify"
+version = "4.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae03c8c853dba7bfd23e571ff0cff7bc9dceb40a4cd684cd1681824183f45257"
+dependencies = [
+ "bitflags",
+ "filetime",
+ "fsevent",
+ "fsevent-sys",
+ "inotify",
+ "libc",
+ "mio",
+ "mio-extras",
+ "walkdir",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "onig"
+version = "4.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8518fcb2b1b8c2f45f0ad499df4fda6087fc3475ca69a185c173b8315d2fb383"
+dependencies = [
+ "bitflags",
+ "lazy_static",
+ "libc",
+ "onig_sys",
+]
+
+[[package]]
+name = "onig_sys"
+version = "69.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388410bf5fa341f10e58e6db3975f4bea1ac30247dd79d37a9e5ced3cb4cc3b0"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
+
+[[package]]
+name = "opaque-debug"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
+
+[[package]]
+name = "open"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcea7a30d6b81a2423cc59c43554880feff7b57d12916f231a79f8d6d9470201"
+dependencies = [
+ "pathdiff",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "percent-encoding"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pest"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e68e84bfb01f0507134eac1e9b410a12ba379d064eab48c50ba4ce329a527b70"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b79d4c71c865a25a4322296122e3924d30bc8ee0834c8bfc8b95f7f054afbfb"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c435bf1076437b851ebc8edc3a18442796b30f1728ffea6262d59bbe28b077e"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "745a452f8eb71e39ffd8ee32b3c5f51d03845f99786fa9b68db6ff509c505411"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "phf"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"
+dependencies = [
+ "phf_shared 0.7.24",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
+dependencies = [
+ "phf_generator 0.7.24",
+ "phf_shared 0.7.24",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
+dependencies = [
+ "phf_shared 0.7.24",
+ "rand 0.6.5",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
+dependencies = [
+ "siphasher 0.2.3",
+ "unicase 1.4.2",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher 0.3.10",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "plist"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f2a9f075f6394100e7c105ed1af73fb1859d6fd14e49d4290d578120beb167f"
+dependencies = [
+ "base64 0.10.1",
+ "byteorder",
+ "humantime",
+ "line-wrap",
+ "serde",
+ "xml-rs",
+]
+
+[[package]]
+name = "plugin"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a6a0dc3910bc8db877ffed8e457763b317cf880df4ae19109b9f77d277cf6e0"
+dependencies = [
+ "typemap",
+]
+
+[[package]]
+name = "png"
+version = "0.15.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef859a23054bbfee7811284275ae522f0434a3c8e7f4b74bd4a35ae7e1c4a283"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "deflate",
+ "inflate",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+dependencies = [
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c205cc82214f3594e2d50686730314f817c67ffa80fe800cf0db78c3c2b9d9e"
+dependencies = [
+ "bitflags",
+ "getopts",
+ "memchr",
+ "unicase 2.6.0",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca36dea94d187597e104a5c8e4b07576a8a45aa5db48a65e12940d3eb7461f55"
+dependencies = [
+ "bitflags",
+ "memchr",
+ "unicase 2.6.0",
+]
+
+[[package]]
+name = "pulldown-cmark-to-cmark"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf89659b1da0800e093162bc6f9305d896393af721cc88ffdb86a4b20760fe89"
+dependencies = [
+ "pulldown-cmark 0.6.1",
+]
+
+[[package]]
+name = "pulldown-cmark-to-cmark"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cffb594e453d29e238ac190362a4a291daec00396717a8d1670863121ac56958"
+dependencies = [
+ "pulldown-cmark 0.7.2",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+dependencies = [
+ "proc-macro2 0.4.30",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2 1.0.56",
+]
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+dependencies = [
+ "autocfg 0.1.8",
+ "libc",
+ "rand_chacha 0.1.1",
+ "rand_core 0.4.2",
+ "rand_hc 0.1.0",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg",
+ "rand_xorshift",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc 0.2.0",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.9",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+dependencies = [
+ "libc",
+ "rand_core 0.4.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick 1.0.1",
+ "memchr",
+ "regex-syntax 0.7.1",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scoped_threadpool"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sequence_trie"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ee22067b7ccd072eeb64454b9c6e1b33b61cd0d49e895fd48676a184580e0c3"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
+dependencies = [
+ "block-buffer 0.7.3",
+ "digest 0.8.1",
+ "fake-simd",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "shlex"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
+
+[[package]]
+name = "siphasher"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "staticfile"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "babd3fa68bb7e3994ce181c5f21ff3ff5fffef7b18b8a10163b45e4dafc6fb86"
+dependencies = [
+ "iron",
+ "mount",
+ "time",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strum"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2"
+
+[[package]]
+name = "strum_macros"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec"
+dependencies = [
+ "heck",
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "syn"
+version = "0.15.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "syn 1.0.109",
+ "unicode-xid 0.2.4",
+]
+
+[[package]]
+name = "syntect"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72fed41b91655133c9819f68d0b9a194dcbf36aa46e80033b6e9ae169f58b211"
+dependencies = [
+ "bincode",
+ "bitflags",
+ "flate2",
+ "fnv",
+ "lazy_static",
+ "lazycell",
+ "onig",
+ "plist",
+ "regex-syntax 0.6.29",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "walkdir",
+ "yaml-rust",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "term_size"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "termbook"
+version = "1.4.2"
+dependencies = [
+ "atty",
+ "globset",
+ "mdbook",
+ "mdcat",
+ "pulldown-cmark 0.6.1",
+ "pulldown-cmark-to-cmark 2.0.1",
+ "syntect",
+]
+
+[[package]]
+name = "termbook-cli"
+version = "1.4.6"
+dependencies = [
+ "clap",
+ "env_logger 0.7.1",
+ "lazy_static",
+ "pulldown-cmark-to-cmark 4.0.2",
+ "termbook",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "term_size",
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "tiff"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7b7c2cfc4742bd8a32f2e614339dd8ce30dbcf676bb262bd63a2327bc5df57d"
+dependencies = [
+ "byteorder",
+ "lzw",
+ "num-derive",
+ "num-traits",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml-query"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "654d5afba116c445bb5fb6812e7c3177d90d143427af73f12956f33e18a1cedb"
+dependencies = [
+ "failure",
+ "failure_derive",
+ "is-match",
+ "lazy_static",
+ "regex",
+ "toml",
+ "toml-query_derive",
+]
+
+[[package]]
+name = "toml-query_derive"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528baacc7fbc5e12b3fc32f483bea1b1cf531afa71cfaae54838d7095a6add9b"
+dependencies = [
+ "darling",
+ "quote 0.6.13",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "traitobject"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
+
+[[package]]
+name = "typeable"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887"
+
+[[package]]
+name = "typemap"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6"
+dependencies = [
+ "unsafe-any",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+
+[[package]]
+name = "unicase"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33"
+dependencies = [
+ "version_check 0.1.5",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "unsafe-any"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f"
+dependencies = [
+ "traitobject",
+]
+
+[[package]]
+name = "url"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+dependencies = [
+ "idna 0.1.5",
+ "matches",
+ "percent-encoding 1.0.1",
+]
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.3.0",
+ "percent-encoding 2.2.0",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822"
+dependencies = [
+ "bumpalo",
+ "log 0.4.17",
+ "once_cell",
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "syn 2.0.16",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434"
+dependencies = [
+ "quote 1.0.27",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869"
+dependencies = [
+ "proc-macro2 1.0.56",
+ "quote 1.0.27",
+ "syn 2.0.16",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "ws"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25fe90c75f236a0a00247d5900226aea4f2d7b05ccc34da9e7a8880ff59b5848"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "httparse",
+ "log 0.4.17",
+ "mio",
+ "mio-extras",
+ "rand 0.7.3",
+ "sha-1",
+ "slab",
+ "url 2.3.1",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc95a04ea24f543cd9be5aab44f963fa35589c99e18415c38fb2b17e133bf8d2"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
diff --git a/nixpkgs/pkgs/tools/text/termbook/default.nix b/nixpkgs/pkgs/tools/text/termbook/default.nix
new file mode 100644
index 000000000000..ee9367038f63
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/termbook/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, oniguruma
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "termbook-cli";
+  version = "1.4.6";
+
+  src = fetchFromGitHub {
+    owner = "Byron";
+    repo = "termbook";
+    rev = "v${version}";
+    sha256 = "Bo3DI0cMXIfP7ZVr8MAW/Tmv+4mEJBIQyLvRfVBDG8c=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+  ];
+
+  buildInputs = [
+    oniguruma
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  env = {
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
+
+  # update dependencies to fix build failure caused by unaligned packed structs
+  postPatch = ''
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd termbook \
+      --bash <($out/bin/termbook completions bash) \
+      --fish <($out/bin/termbook completions fish) \
+      --zsh <($out/bin/termbook completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "A runner for `mdbooks` to keep your documentation tested";
+    homepage = "https://github.com/Byron/termbook/";
+    changelog = "https://github.com/Byron/termbook/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ phaer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/tesh/default.nix b/nixpkgs/pkgs/tools/text/tesh/default.nix
new file mode 100644
index 000000000000..abff7771add2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/tesh/default.nix
@@ -0,0 +1,21 @@
+{ python3Packages, fetchFromGitHub, fetchpatch }:
+
+let
+  version = "0.3.2";
+in python3Packages.buildPythonPackage rec {
+  pname = "tesh";
+  inherit version;
+
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "OceanSprint";
+    repo = "tesh";
+    rev = version;
+    hash = "sha256-GIwg7Cv7tkLu81dmKT65c34eeVnRR5MIYfNwTE7j2Vs=";
+  };
+
+  checkInputs = [ python3Packages.pytest ];
+  nativeBuildInputs = [ python3Packages.poetry-core ];
+  propagatedBuildInputs = with python3Packages; [ click pexpect ];
+}
diff --git a/nixpkgs/pkgs/tools/text/textpieces/default.nix b/nixpkgs/pkgs/tools/text/textpieces/default.nix
new file mode 100644
index 000000000000..9cea993710a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/textpieces/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+, meson
+, ninja
+, pkg-config
+, vala
+, glib
+, gtk4
+, libgee
+, libadwaita
+, libportal-gtk4
+, json-glib
+, blueprint-compiler
+, gtksourceview5
+, gobject-introspection
+, wrapGAppsHook4
+, appstream-glib
+, desktop-file-utils
+}:
+
+let
+  pythonEnv = python3.withPackages (ps: with ps; [ pyyaml ]);
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "textpieces";
+  version = "3.4.1";
+
+  src = fetchFromGitHub {
+    owner = "liferooter";
+    repo = "textpieces";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-3ZUHzt3oXYgsnJVDf83JUDhcF+0DLgFfOMtpKI/FTcE=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    pythonEnv
+    vala
+    blueprint-compiler
+    wrapGAppsHook4
+    appstream-glib
+    desktop-file-utils
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+    libportal-gtk4
+    libgee
+    json-glib
+    gtksourceview5
+  ];
+
+  runtimeDependencies = [
+    pythonEnv
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/postinstall.py
+    patchShebangs build-aux/meson/postinstall.py
+    patchShebangs scripts/
+  '';
+
+  meta = with lib; {
+    description = "Quick text processing";
+    longDescription = "A small tool for quick text transformations such as checksums, encoding, decoding and so on.";
+    homepage = "https://github.com/liferooter/textpieces";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ zendo ];
+    broken = true; # https://github.com/liferooter/textpieces/issues/130
+  };
+})
diff --git a/nixpkgs/pkgs/tools/text/tidy-viewer/default.nix b/nixpkgs/pkgs/tools/text/tidy-viewer/default.nix
new file mode 100644
index 000000000000..6c38007b3f26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/tidy-viewer/default.nix
@@ -0,0 +1,29 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tidy-viewer";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    owner = "alexhallam";
+    repo = "tv";
+    rev = version;
+    sha256 = "sha256-OnvRiQ5H/Vsmfu+F1i68TowjrDwQLQtV1sC6Jrp4xA4=";
+  };
+
+  cargoSha256 = "sha256-pIGuBP0a4jWFzkQfqvxQUrBmqYjhERVyEbZvL7g5hRM=";
+
+  # this test parses command line arguments
+  # error: Found argument '--test-threads' which wasn't expected, or isn't valid in this context
+  checkFlags = [
+    "--skip=build_reader_can_create_reader_without_file_specified"
+  ];
+
+  meta = with lib; {
+    description = "A cross-platform CLI csv pretty printer that uses column styling to maximize viewer enjoyment";
+    homepage = "https://github.com/alexhallam/tv";
+    changelog = "https://github.com/alexhallam/tv/blob/${version}/CHANGELOG.md";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/tml/default.nix b/nixpkgs/pkgs/tools/text/tml/default.nix
new file mode 100644
index 000000000000..3f1a6477851c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/tml/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tml";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "liamg";
+    repo = "tml";
+    rev = "v${version}";
+    hash = "sha256-y9iv6s+ShKLxd+SOBQxwvPwuEL1kepJL6ukA4aoV9Z8=";
+  };
+
+  vendorHash = "sha256-CHZS1SpPko8u3tZAYbf+Di882W55X9Q/zd4SmFCRgKM=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A tiny markup language for terminal output";
+    homepage = "https://github.com/liamg/tml";
+    changelog = "https://github.com/liamg/tml/releases/tag/v${version}";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/to-html/default.nix b/nixpkgs/pkgs/tools/text/to-html/default.nix
new file mode 100644
index 000000000000..9e176a5ad19c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/to-html/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  version = "0.1.4";
+  pname = "to-html";
+
+  src = fetchFromGitHub {
+    owner = "Aloso";
+    repo = "to-html";
+    rev = "v${version}";
+    hash = "sha256-zkTBjsMFhRz7lVRh8i+XkaJ/qWmTAMPnkH5aDhbHf8U=";
+  };
+
+  cargoHash = "sha256-hXc+lB3DKnRZkp1U5wW/vPKSZ0c1UknQCAxDfE7Eubg=";
+
+  # Requires external resources
+  doCheck = false;
+
+  meta = {
+    description = "Terminal wrapper for rendering a terminal on a website by converting ANSI escape sequences to HTML";
+    homepage = "https://github.com/Aloso/to-html";
+    changelog = "https://github.com/Aloso/to-html/blob/${src.rev}/CHANGELOG.md";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ icewind1991 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/topfew-rs/default.nix b/nixpkgs/pkgs/tools/text/topfew-rs/default.nix
new file mode 100644
index 000000000000..cb3aca7ab53d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/topfew-rs/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "topfew-rs";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "djc";
+    repo = "topfew-rs";
+    rev = version;
+    hash = "sha256-VlSLPcKw3LYGnmKk5YOkcGIizw1tqtKF2BykY+1MtvY=";
+  };
+
+  cargoHash = "sha256-j+afSwDHau7H20siYtid7l8tq+iS24KJBsNZAEdNJlI=";
+
+  meta = with lib; {
+    description = "Rust implementation of Tim Bray's topfew tool";
+    homepage = "https://github.com/djc/topfew-rs";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "tf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/topfew/default.nix b/nixpkgs/pkgs/tools/text/topfew/default.nix
new file mode 100644
index 000000000000..967e4e1403a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/topfew/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "topfew";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "timbray";
+    repo = "topfew";
+    rev = version;
+    hash = "sha256-6ydi/4LyqTLKpR00f4zpcrTnCorlhnsBOxdhzBMNcRI=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installManPage doc/tf.1
+  '';
+
+  meta = with lib; {
+    description = "Finds the fields (or combinations of fields) which appear most often in a stream of records";
+    homepage = "https://github.com/timbray/topfew";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "tf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/tuc/default.nix b/nixpkgs/pkgs/tools/text/tuc/default.nix
new file mode 100644
index 000000000000..b7b5afbdf3a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/tuc/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+rustPlatform.buildRustPackage rec {
+  pname = "tuc";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "riquito";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+QkkwQfp818bKVo1yUkWKLMqbdzRJ+oHpjxB+UFDRsU=";
+  };
+
+  cargoHash = "sha256-NbqmXptLmqLd6QizRB1bIM53Rdj010Hy3JqSuLQ4H24=";
+
+  meta = with lib; {
+    description = "When cut doesn't cut it";
+    homepage = "https://github.com/riquito/tuc";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/tv/default.nix b/nixpkgs/pkgs/tools/text/tv/default.nix
new file mode 100644
index 000000000000..686433ff4290
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/tv/default.nix
@@ -0,0 +1,23 @@
+{ fetchFromGitHub, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tv";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "uzimaru0000";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-qODv45smZ6jHCJBaa6EEvFLG+7g+FWrRf6BiHRFLzqM=";
+  };
+
+  cargoSha256 = "sha256-nI4n4KMPLaIF978b5VvW3mb02vKW+r39nllrhukJilI=";
+
+  meta = with lib; {
+    description = "Format json into table view";
+    homepage = "https://github.com/uzimaru0000/tv";
+    changelog = "https://github.com/uzimaru0000/tv/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/txt2tags/default.nix b/nixpkgs/pkgs/tools/text/txt2tags/default.nix
new file mode 100644
index 000000000000..8ff39ac1ebfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/txt2tags/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "txt2tags";
+  version = "3.9";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "txt2tags";
+    repo = "txt2tags";
+    rev = "refs/tags/${version}";
+    hash = "sha256-PwPGJJg79ny13gEb1WmgIVHcXQppI/j5mhIyOZjR19k=";
+  };
+
+  postPatch = ''
+    substituteInPlace test/lib.py \
+      --replace 'TXT2TAGS = os.path.join(TEST_DIR, "..", "txt2tags.py")' \
+                'TXT2TAGS = "${placeholder "out"}/bin/txt2tags"' \
+      --replace "[PYTHON] + TXT2TAGS" "TXT2TAGS"
+  '';
+
+  checkPhase = ''
+    ${python3.interpreter} test/run.py
+  '';
+
+  meta = {
+    changelog = "https://github.com/txt2tags/txt2tags/blob/${src.rev}/CHANGELOG.md";
+    description = "Convert between markup languages";
+    homepage = "https://txt2tags.org/";
+    license  = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ dotlambda kovirobi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/u2ps/default.nix b/nixpkgs/pkgs/tools/text/u2ps/default.nix
new file mode 100644
index 000000000000..95d46db42ed2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/u2ps/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, ghostscript_headless
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "u2ps";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "arsv";
+    repo = "u2ps";
+    rev = finalAttrs.version;
+    hash = "sha256-sa0CL47PwYVDykxzF8KeWhz7HXAX6jZ0AcfecD+aFyg=";
+  };
+
+  buildInputs = [ ghostscript_headless ];
+
+  meta = with lib; {
+    description = "Unicode text to postscript converter";
+    homepage = "https://github.com/arsv/u2ps";
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      U2ps is a text to postscript converter similar to a2ps,
+      with emphasis on Unicode support.
+    '';
+    mainProgram = "u2ps";
+    maintainers = [ maintainers.athas ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/text/ugrep/default.nix b/nixpkgs/pkgs/tools/text/ugrep/default.nix
new file mode 100644
index 000000000000..8d1288bae8b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ugrep/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, boost
+, brotli
+, bzip2
+, bzip3
+, lz4
+, pcre2
+, xz
+, zlib
+, zstd
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ugrep";
+  version = "5.0.0";
+
+  src = fetchFromGitHub {
+    owner = "Genivia";
+    repo = "ugrep";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-VAfnj/2EdkDpcS30DveUUYLSNj07sy+gvKxyGkg2mvA=";
+  };
+
+  buildInputs = [
+    boost
+    brotli
+    bzip2
+    bzip3
+    lz4
+    pcre2
+    xz
+    zlib
+    zstd
+  ];
+
+  meta = with lib; {
+    description = "Ultra fast grep with interactive query UI";
+    homepage = "https://github.com/Genivia/ugrep";
+    changelog = "https://github.com/Genivia/ugrep/releases/tag/v${finalAttrs.version}";
+    maintainers = with maintainers; [ numkem mikaelfangel ];
+    license = licenses.bsd3;
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/text/unfurl/default.nix b/nixpkgs/pkgs/tools/text/unfurl/default.nix
new file mode 100644
index 000000000000..35a43ea2fdbd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/unfurl/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "unfurl";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "tomnomnom";
+    repo = "unfurl";
+    rev = "v${version}";
+    hash = "sha256-7aLe5d8ku5llfJ2xh8fT56vqj12/CJ1ez3Vte2PF8KQ=";
+  };
+
+  vendorHash = "sha256-Kpd916+jjGvw56N122Ej4CXVcv1/xr1THkjsrhkIy+U=";
+
+  ldflags = [ "-s" "-w" ];
+
+  # tests tries to download a list of tlds from the internet
+  postPatch = ''
+    echo com > /tmp/.tlds
+  '';
+
+  meta = with lib; {
+    description = "Pull out bits of URLs provided on stdin";
+    homepage = "https://github.com/tomnomnom/unfurl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/uni2ascii/default.nix b/nixpkgs/pkgs/tools/text/uni2ascii/default.nix
new file mode 100644
index 000000000000..d83e9393f941
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/uni2ascii/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "uni2ascii";
+  version = "4.18";
+
+  src = fetchurl {
+    url = "https://billposer.org/Software/Downloads/uni2ascii-${version}.tar.gz";
+    sha256 = "03lklnzr6ngs4wqiqa7rifd246f441gfvardbsaa5l6fn9pbn94y";
+  };
+
+  meta = {
+    license = lib.licenses.gpl3;
+    homepage = "http://billposer.org/Software/uni2ascii.html";
+    description = "Converts between UTF-8 and many 7-bit ASCII equivalents and back";
+
+    longDescription = ''
+    This package provides conversion in both directions between UTF-8
+    Unicode and more than thirty 7-bit ASCII equivalents, including
+    RFC 2396 URI format and RFC 2045 Quoted Printable format, the
+    representations used in HTML, SGML, XML, OOXML, the Unicode
+    standard, Rich Text Format, POSIX portable charmaps, POSIX locale
+    specifications, and Apache log files, and the escapes used for
+    including Unicode in Ada, C, Common Lisp, Java, Pascal, Perl,
+    Postscript, Python, Scheme, and Tcl.
+
+    Such ASCII equivalents are useful when including Unicode text in
+    program source, when debugging, and when entering text into web
+    programs that can handle the Unicode character set but are not
+    8-bit safe. For example, MovableType, the blog software, truncates
+    posts as soon as it encounters a byte with the high bit
+    set. However, if Unicode is entered in the form of HTML numeric
+    character entities, Movable Type will not garble the post.
+
+    It also provides ways of converting non-ASCII characters to
+    similar ASCII characters, e.g. by stripping diacritics.
+    '';
+    maintainers = with lib.maintainers; [ goibhniu ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/uniscribe/Gemfile b/nixpkgs/pkgs/tools/text/uniscribe/Gemfile
new file mode 100644
index 000000000000..9bc158c5435e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/uniscribe/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "uniscribe"
diff --git a/nixpkgs/pkgs/tools/text/uniscribe/Gemfile.lock b/nixpkgs/pkgs/tools/text/uniscribe/Gemfile.lock
new file mode 100644
index 000000000000..ee6dc316669c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/uniscribe/Gemfile.lock
@@ -0,0 +1,37 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    characteristics (1.4.0)
+      unicode-categories (~> 1.7)
+    paint (2.2.1)
+    rationalist (2.0.1)
+    symbolify (1.4.0)
+      characteristics (>= 0.8, < 2.0)
+    unicode-categories (1.7.0)
+    unicode-display_width (2.1.0)
+    unicode-emoji (2.9.0)
+      unicode-version (~> 1.0)
+    unicode-name (1.10.0)
+      unicode-types (~> 1.7)
+    unicode-sequence_name (1.10.0)
+    unicode-types (1.7.0)
+    unicode-version (1.1.0)
+    uniscribe (1.7.0)
+      characteristics (~> 1.4)
+      paint (>= 0.9, < 3.0)
+      rationalist (~> 2.0, >= 2.0.1)
+      symbolify (~> 1.4)
+      unicode-display_width (~> 2.1)
+      unicode-emoji (~> 2.9)
+      unicode-name (~> 1.10)
+      unicode-sequence_name (~> 1.10)
+      unicode-version (~> 1.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  uniscribe
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/text/uniscribe/default.nix b/nixpkgs/pkgs/tools/text/uniscribe/default.nix
new file mode 100644
index 000000000000..e7b9cedd2b8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/uniscribe/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, bundlerEnv, bundlerUpdateScript, makeWrapper }:
+
+let
+  rubyEnv = bundlerEnv {
+    name = "uniscribe";
+    gemdir = ./.;
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "uniscribe";
+  version = (import ./gemset.nix).uniscribe.version;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    makeWrapper ${rubyEnv}/bin/uniscribe $out/bin/uniscribe
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "uniscribe";
+
+  meta = with lib; {
+    description = "Explains Unicode characters/code points: Displays their name, category, and shows compositions";
+    homepage = "https://github.com/janlelis/uniscribe";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kjeremy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/uniscribe/gemset.nix b/nixpkgs/pkgs/tools/text/uniscribe/gemset.nix
new file mode 100644
index 000000000000..d61123585c2a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/uniscribe/gemset.nix
@@ -0,0 +1,1766 @@
+{
+  characteristics = {
+    dependencies = ["unicode-categories"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zhgx2h89kfm1xdgfw78vyw6mgwca1nqd67hk13pfz8ffkig2ziq";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  paint = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01fhvxdaqngldqa7r0jgnskr4iv2x2i0n3z28za8j4qszpvlcb7x";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  rationalist = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zydr81pc63m7i5f5s51ryksv3g2qya5pd42s09v9ixk3fddpxgi";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  symbolify = {
+    dependencies = ["characteristics"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cjalbjgw50bwna2gyjczx42nszifslijy43bmiahn4dw76jz653";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  unicode-categories = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0prakys8s56hh56q2r4gm2iigq9wk4ywwpv9ywcyi4xr9k2pliy3";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0csjm9shhfik0ci9mgimb7hf3xgh7nx45rkd9rzgdz6vkwr8rzxn";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  unicode-emoji = {
+    dependencies = ["unicode-version"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fvm7z6s9nipbwsq4xqqz443g3x5lwkcpg7iwqxs9x43dd9r8h77";
+      type = "gem";
+    };
+    version = "2.9.0";
+  };
+  unicode-name = {
+    dependencies = ["unicode-types"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18ly2yy1jbdcvxgfyn2n17c2v54n9llzvr7klbfhy285lz1ylkdd";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  unicode-sequence_name = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fm57j4yplfsdq5pyxdp7pgp5adisdh8hr1dgvr5g1x076bvis16";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  unicode-types = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qrbvx01v1x931czvrng0hvlhyb1bwa3mnq008lq5w75ldrpyiis";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  unicode-version = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0isqdyqix8gh2xkpy9ab7bhwwz4nc7zrv49l0kb0hqd7n3ip9zmg";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  uniscribe = {
+    dependencies = ["characteristics" "paint" "rationalist" "symbolify" "unicode-display_width" "unicode-emoji" "unicode-name" "unicode-sequence_name" "unicode-version"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k66h24waqy51yfqkb1iish0kc3ky85h51dikzdhk6i51q2vrx7i";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/unoconv/default.nix b/nixpkgs/pkgs/tools/text/unoconv/default.nix
new file mode 100644
index 000000000000..ae70bd9f561e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/unoconv/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, python3, libreoffice-unwrapped, asciidoc, makeWrapper
+# whether to install odt2pdf/odt2doc/... symlinks to unoconv
+, installSymlinks ? true
+}:
+
+# IMPORTANT: unoconv must use the same python version as libreoffice (unless it
+# will not be able to load the pyuno module from libreoffice).
+
+stdenv.mkDerivation rec {
+  pname = "unoconv";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "unoconv";
+    repo = "unoconv";
+    rev = version;
+    sha256 = "1akx64686in8j8arl6vsgp2n3bv770q48pfv283c6fz6wf9p8fvr";
+  };
+
+  nativeBuildInputs = [ asciidoc makeWrapper ];
+
+  preBuild = ''
+    makeFlags=prefix="$out"
+  '';
+
+  postInstall = ''
+    sed -i "s|/usr/bin/env python.*|${python3}/bin/${python3.executable}|" "$out/bin/unoconv"
+    wrapProgram "$out/bin/unoconv" \
+        --set-default UNO_PATH "${libreoffice-unwrapped}/lib/libreoffice/program/"
+  '' + lib.optionalString installSymlinks ''
+    make install-links prefix="$out"
+  '';
+
+  meta = with lib; {
+    description = "Convert between any document format supported by LibreOffice/OpenOffice";
+    homepage = "http://dag.wieers.com/home-made/unoconv/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/unrtf/default.nix b/nixpkgs/pkgs/tools/text/unrtf/default.nix
new file mode 100644
index 000000000000..3357404a7d3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/unrtf/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, autoconf, automake, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "unrtf";
+  version = "0.21.10";
+
+  src = fetchurl {
+    url = "https://ftp.gnu.org/gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1bil6z4niydz9gqm2j861dkxmqnpc8m7hvidsjbzz7x63whj17xl";
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+
+  buildInputs = [ libiconv ];
+
+  preConfigure = "./bootstrap";
+
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
+    description = "A converter from Rich Text Format to other formats";
+    longDescription = ''
+      UnRTF converts documents in Rich Text Format to other
+      formats, including HTML, LaTeX, and RTF itself.
+    '';
+    homepage = "https://www.gnu.org/software/unrtf/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ joachifm ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/untex/default.nix b/nixpkgs/pkgs/tools/text/untex/default.nix
new file mode 100644
index 000000000000..63108a923782
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/untex/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "untex";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "ftp://ftp.thp.uni-duisburg.de/pub/source/${pname}-${version}.tar.gz";
+    sha256 = "1jww43pl9qvg6kwh4h8imp966fzd62dk99pb4s93786lmp3kgdjv";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  unpackPhase = "tar xf $src";
+  installTargets = [ "install" "install.man" ];
+  installFlags = [ "BINDIR=$(out)/bin" "MANDIR=$(out)/share/man/man1" ];
+  preBuild = ''
+    sed -i '1i#include <stdlib.h>\n#include <string.h>' untex.c
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "A utility which removes LaTeX commands from input";
+    homepage = "https://www.ctan.org/pkg/untex";
+    license = licenses.gpl1Only;
+    maintainers = with maintainers; [ joachifm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/uwc/default.nix b/nixpkgs/pkgs/tools/text/uwc/default.nix
new file mode 100644
index 000000000000..dc34ecfacff2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/uwc/default.nix
@@ -0,0 +1,24 @@
+{ rustPlatform, lib, fetchFromGitLab }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "uwc";
+  version = "1.0.5";
+
+  src = fetchFromGitLab {
+    owner = "dead10ck";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-x2mijB1GkxdraFroG1+PiBzWKPjsaAeoDt0HFL2v93I=";
+  };
+
+  cargoHash = "sha256-0IvOaQaXfdEz5tlXh5gTbnZG9QZSWDVHGOqYq8aWOIc=";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Like wc, but unicode-aware, and with per-line mode";
+    homepage = "https://gitlab.com/dead10ck/uwc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ShamrockLee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/vale/default.nix b/nixpkgs/pkgs/tools/text/vale/default.nix
new file mode 100644
index 000000000000..a04c4289f5c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/vale/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "vale";
+  version = "3.1.0";
+
+  subPackages = [ "cmd/vale" ];
+  outputs = [ "out" "data" ];
+
+  src = fetchFromGitHub {
+    owner = "errata-ai";
+    repo = "vale";
+    rev = "v${version}";
+    hash = "sha256-BWY/a5XFadyeyjtfBv9vVpT/EPYXoL/DqtUVk9nMkQg=";
+  };
+
+  vendorHash = "sha256-uEuzAMsQHTAbKeAPIWu2yoCLhBrQNEYxdmjfzLLWONQ=";
+
+  postInstall = ''
+    mkdir -p $data/share/vale
+    cp -r testdata/styles $data/share/vale
+  '';
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A syntax-aware linter for prose built with speed and extensibility in mind";
+    homepage = "https://vale.sh/";
+    changelog = "https://github.com/errata-ai/vale/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/validator-nu/default.nix b/nixpkgs/pkgs/tools/text/validator-nu/default.nix
new file mode 100644
index 000000000000..43f20db4a6da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/validator-nu/default.nix
@@ -0,0 +1,68 @@
+{ fetchFromGitHub
+, git
+, jdk_headless
+, jre_headless
+, makeWrapper
+, python3
+, stdenvNoCC
+, lib
+}:
+
+let
+  pname = "validator-nu";
+  version = "22.9.29";
+
+  src = fetchFromGitHub {
+    owner = "validator";
+    repo = "validator";
+    rev = version;
+    fetchSubmodules = true;
+    hash = "sha256-NH/OyaKGITAL2yttB1kmuKVuZuYzhVuS0Oohj1N4icI=";
+  };
+
+  deps = stdenvNoCC.mkDerivation {
+    pname = "${pname}-deps";
+    inherit version src;
+
+    nativeBuildInputs = [ git jdk_headless python3 python3.pkgs.certifi ];
+
+    buildPhase = ''
+      python checker.py dldeps
+    '';
+
+    installPhase = ''
+      mkdir "$out"
+      mv dependencies extras "$out"
+    '';
+
+    outputHashMode = "recursive";
+    outputHash = "sha256-LPtxpUd7LAYZHJL7elgcZOTaTgHqeqquiB9hiuajA6c=";
+  };
+
+in
+stdenvNoCC.mkDerivation rec {
+  inherit pname version src;
+
+  nativeBuildInputs = [ git jdk_headless makeWrapper python3 ];
+
+  buildPhase = ''
+    ln -s '${deps}/dependencies' '${deps}/extras' .
+    JAVA_HOME='${jdk_headless}' python checker.py build
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/share/java"
+    mv build/dist/vnu.jar "$out/share/java/"
+    makeWrapper "${jre_headless}/bin/java" "$out/bin/vnu" \
+      --add-flags "-jar '$out/share/java/vnu.jar'"
+  '';
+
+  meta = with lib; {
+    description = "Helps you catch problems in your HTML/CSS/SVG";
+    homepage = "https://validator.github.io/validator/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ andersk ];
+    mainProgram = "vnu";
+    sourceProvenance = with sourceTypes; [ binaryBytecode fromSource ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/vgrep/default.nix b/nixpkgs/pkgs/tools/text/vgrep/default.nix
new file mode 100644
index 000000000000..9022c5f5c03b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/vgrep/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, go-md2man, installShellFiles }:
+
+buildGoModule rec {
+  pname = "vgrep";
+  version = "2.7.0";
+
+  src = fetchFromGitHub {
+    owner = "vrothberg";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-+KZNNkTuZyF02YDZX3u1KdhOcZ3+Ud6aDGL/sGUN1hI=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  nativeBuildInputs = [ go-md2man installShellFiles ];
+
+  postBuild = ''
+    sed -i '/SHELL= /d' Makefile
+    make docs
+    installManPage docs/*.[1-9]
+  '';
+
+  meta = with lib; {
+    description = "User-friendly pager for grep/git-grep/ripgrep";
+    homepage = "https://github.com/vrothberg/vgrep";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/wdiff/default.nix b/nixpkgs/pkgs/tools/text/wdiff/default.nix
new file mode 100644
index 000000000000..d6ed960cce1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/wdiff/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, texinfo, which }:
+
+stdenv.mkDerivation rec {
+  pname = "wdiff";
+  version = "1.2.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/wdiff/${pname}-${version}.tar.gz";
+    sha256 = "0sxgg0ms5lhi4aqqvz1rj4s77yi9wymfm3l3gbjfd1qchy66kzrl";
+  };
+
+  # for makeinfo
+  nativeBuildInputs = [ texinfo ];
+
+  buildInputs = [ texinfo ];
+
+  nativeCheckInputs = [ which ];
+
+  strictDeps = true;
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/wdiff/";
+    description = "Comparing files on a word by word basis";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ eelco SuperSandro2000 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/wgetpaste/default.nix b/nixpkgs/pkgs/tools/text/wgetpaste/default.nix
new file mode 100644
index 000000000000..9a60b991a7f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/wgetpaste/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, wget, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "wgetpaste";
+  version = "2.33";
+
+  src = fetchurl {
+    url = "https://github.com/zlin/wgetpaste/releases/download/${version}/wgetpaste-${version}.tar.xz";
+    sha256 = "sha256-6TWdhKOmO7vRKGIVNcUwLy46heI6UiAOgej6ubd+lxs=";
+  };
+  # currently zsh-autocompletion support is not installed
+
+  prePatch = ''
+    substituteInPlace wgetpaste --replace "/usr/bin/env bash" "${bash}/bin/bash"
+    substituteInPlace wgetpaste --replace "LC_ALL=C wget" "LC_ALL=C ${wget}/bin/wget"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin;
+    cp wgetpaste $out/bin;
+  '';
+
+  meta = {
+    description = "Command-line interface to various pastebins";
+    homepage = "https://github.com/zlin/wgetpaste";
+    license = lib.licenses.publicDomain;
+    maintainers = with lib.maintainers; [ qknight domenkozar ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/wrap/default.nix b/nixpkgs/pkgs/tools/text/wrap/default.nix
new file mode 100644
index 000000000000..4eebcf60437b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/wrap/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, makeWrapper, courier-prime }:
+
+buildGoModule rec {
+  pname = "wrap";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "Wraparound";
+    repo = "wrap";
+    rev = "v${version}";
+    hash = "sha256-58wsH/e3X72S7tJUObazyvvkI8+B7DLPTBmQO9A+jmk=";
+  };
+
+  vendorHash = "sha256-vg61Vypd+mSF9FyLFVpnS5UCTJDoobkDE1Cneg8O0RM=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  patches = [
+    (fetchpatch {
+      name = "courier-prime-variants.patch";
+      url = "https://github.com/Wraparound/wrap/commit/b72c280b6eddba9ec7b3507c1f143eb28a85c9c1.patch";
+      hash = "sha256-hcUsRyv6XVN+GyMN7LXzXPsp8jYUKTJPaK+e5p4CO7U=";
+    })
+    # Fix build on Go 1.17+
+    (fetchpatch {
+      url = "https://github.com/Wraparound/wrap/commit/a222c18a7e0810486741684781ff6158a359a8ba.patch";
+      hash = "sha256-eIKvA91olfbNJhOhIUu3GOL/rbgX3m6unmU8nRdKbtc=";
+    })
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/wrap --prefix XDG_DATA_DIRS : ${courier-prime}/share/
+  '';
+
+  meta = with lib; {
+    description = "A Fountain export tool with some extras";
+    homepage = "https://github.com/Wraparound/wrap";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.austinbutler ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/write-good/default.nix b/nixpkgs/pkgs/tools/text/write-good/default.nix
new file mode 100644
index 000000000000..db3e16c23deb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/write-good/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "write-good";
+  version = "1.0.8";
+
+  src = fetchFromGitHub {
+    owner = "btford";
+    repo = "write-good";
+    rev = "v${version}";
+    hash = "sha256-cq3cj2BwoQMKqo3iU2l+PR/2bJIFMSTRsDGQJ06GWXk=";
+  };
+
+  npmDepsHash = "sha256-0M9RzyeINmUPYcLy654iI+/ehElKrhIAibpiSqlXD2A=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "Naive linter for English prose";
+    homepage = "https://github.com/btford/write-good";
+    license = lib.licenses.mit;
+    mainProgram = "write-good";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xidel/default.nix b/nixpkgs/pkgs/tools/text/xidel/default.nix
new file mode 100644
index 000000000000..479cc0ff1115
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xidel/default.nix
@@ -0,0 +1,95 @@
+{ lib, stdenv, fetchFromGitHub, fpc, openssl }:
+
+let
+  flreSrc = fetchFromGitHub {
+    owner = "benibela";
+    repo = "flre";
+    rev = "3e926d45d4352f1b7c7cd411ccd625df117dad5c";
+    hash = "sha256-fs7CIjd3fwD/SORYh5pmJxIdrr8F9e36TNmnKUbUxP0=";
+  };
+  synapseSrc = fetchFromGitHub {
+    owner = "benibela";
+    repo = "ararat-synapse";
+    rev = "7a77db926de66809080bada68b54172da7f84c0e";
+    hash = "sha256-bVLQ0ohGJYtuP88Krxy9a7RnHHrW0OWw8H/uxa3PerU=";
+  };
+  rcmdlineSrc = fetchFromGitHub {
+    owner = "benibela";
+    repo = "rcmdline";
+    rev = "ea02b770c4568717dd7b3b72da191a8bbcb4c751";
+    hash = "sha256-6YtvAf0joRvtCKbUAaLwuwABw1GEIzammFLhboq9aG0=";
+  };
+  internettoolsSrc = fetchFromGitHub {
+    owner = "benibela";
+    repo = "internettools";
+    rev = "dd972caaa4415468fa679ea7262976ead3fd3e38";
+    hash = "sha256-09sADxPiE6ky1EX7dTXRBYVT3IarUcLYf5knzi7+CHU=";
+  };
+  pasdblstrutilsSrc = fetchFromGitHub {
+    owner = "BeRo1985";
+    repo = "pasdblstrutils";
+    rev = "1696f0a2b822fef26c8992f96620f1be129cfa99";
+    hash = "sha256-x0AjOTa1g7gJOR2iBO76yBt1kzcRNujHRUsq5QOlfP0=";
+  };
+in stdenv.mkDerivation rec {
+  pname = "xidel";
+  version = "unstable-2022-11-01";
+
+  src = fetchFromGitHub {
+    owner = "benibela";
+    repo = pname;
+    rev = "6d5655c1d73b88ddeb32d2450a35ee36e4762bb8";
+    hash = "sha256-9x2d5AKRBjocRawRHdeI4heIM5nb00/F/EIj+/to7ac=";
+  };
+
+  nativeBuildInputs = [ fpc ];
+  buildInputs = [ openssl ];
+
+  NIX_LDFLAGS = [ "-lcrypto" ];
+
+  patchPhase = ''
+    patchShebangs \
+      build.sh \
+      tests/test.sh \
+      tests/tests-file-module.sh \
+      tests/tests.sh \
+      tests/downloadTest.sh \
+      tests/downloadTests.sh \
+      tests/zorbajsoniq.sh \
+      tests/zorbajsoniq/download.sh
+  '';
+
+  preBuildPhase = ''
+    mkdir -p import/{flre,synapse,pasdblstrutils} rcmdline internettools
+    cp -R ${flreSrc}/. import/flre
+    cp -R ${synapseSrc}/. import/synapse
+    cp -R ${pasdblstrutilsSrc}/. import/pasdblstrutils
+    cp -R ${rcmdlineSrc}/. rcmdline
+    cp -R ${internettoolsSrc}/. internettools
+  '';
+
+  buildPhase = ''
+    runHook preBuildPhase
+    ./build.sh
+    runHook postBuildPhase
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/share/man/man1"
+    cp meta/xidel.1 "$out/share/man/man1/"
+    cp xidel "$out/bin/"
+  '';
+
+  # disabled, because tests require network
+  checkPhase = ''
+    ./tests/tests.sh
+  '';
+
+  meta = with lib; {
+    description = "Command line tool to download and extract data from HTML/XML pages as well as JSON APIs";
+    homepage = "https://www.videlibri.de/xidel.html";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/basex/basex.svg b/nixpkgs/pkgs/tools/text/xml/basex/basex.svg
new file mode 100644
index 000000000000..9d476cec2ca1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/basex/basex.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2178"
+   sodipodi:version="0.32"
+   inkscape:version="0.45"
+   width="1568"
+   height="1164"
+   version="1.0"
+   sodipodi:docbase="F:\Uni\Scholl\Research\Conferences\BTW2007\Poster"
+   sodipodi:docname="Logo.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="true">
+  <metadata
+     id="metadata2183">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs2181" />
+  <sodipodi:namedview
+     inkscape:window-height="1150"
+     inkscape:window-width="1143"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:zoom="0.64948454"
+     inkscape:cx="784"
+     inkscape:cy="584.00852"
+     inkscape:window-x="412"
+     inkscape:window-y="20"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:object-bbox="true"
+     inkscape:object-points="true"
+     gridempspacing="10" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     style="opacity:1">
+    <path
+       style="font-size:1470px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:19.98425102;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;font-family:Clarendo"
+       d="M 628.08008,847.55762 C 613.24569,864.30587 601.88095,879.3791 593.98584,892.77734 C 586.08995,906.17595 582.1422,916.94254 582.14258,925.07715 C 582.1422,937.9972 586.92735,947.08899 596.49805,952.35254 C 606.06796,957.61633 624.49079,960.24816 651.7666,960.24805 L 720.67285,960.24805 L 720.67285,1072.2207 L 207.46484,1072.2207 L 207.46484,960.24805 L 256.27344,960.24805 C 284.9843,960.24816 308.07265,955.94152 325.53857,947.32813 C 343.00426,938.71498 364.89633,919.09586 391.21484,888.4707 L 673.2998,568.34375 L 441.45898,276.92773 C 416.57596,245.82505 393.60723,224.77038 372.55273,213.76367 C 351.4979,202.75868 325.89734,197.25576 295.75098,197.25488 L 245.50684,197.25488 L 245.50684,86 L 767.32813,86 L 767.32813,197.25488 L 699.85742,197.25488 C 685.97999,197.25576 675.45266,199.76796 668.27539,204.7915 C 661.0972,209.81678 657.50834,217.11414 657.50879,226.68359 C 657.50834,233.38365 659.30277,240.20249 662.89209,247.14014 C 666.4805,254.07943 672.58156,262.57308 681.19531,272.62109 L 810.39453,429.81348 L 967.58691,265.44336 C 974.76388,258.26644 980.50606,250.84945 984.81348,243.19238 C 989.11933,235.53697 991.27265,229.07702 991.27344,223.8125 C 991.27265,215.20008 985.88936,208.62049 975.12354,204.07373 C 964.35618,199.5287 948.20629,197.25576 926.67383,197.25488 L 869.25195,197.25488 L 869.25195,86 L 1332.2158,86 L 1332.2158,197.25488 L 1279.1006,197.25488 C 1241.2968,197.25576 1189.8564,233.14439 1124.7793,304.9209 L 1123.3438,306.35645 L 905.8584,544.65723 L 1155.6436,856.1709 C 1194.8808,904.97966 1224.6684,934.52797 1245.0063,944.81592 C 1265.3422,955.10412 1294.412,960.24816 1332.2158,960.24805 L 1376,960.24805 L 1376,1072.2207 L 810.39453,1072.2207 L 810.39453,960.24805 L 877.86523,960.24805 C 901.79032,960.24816 919.25612,958.21447 930.2627,954.14697 C 941.26782,950.07971 946.77074,943.26087 946.77148,933.69043 C 946.77074,926.51284 945.3352,918.97623 942.46484,911.08057 C 939.59302,903.18523 935.28638,895.64861 929.54492,888.4707 L 768.76367,685.34082 L 628.08008,847.55762 z "
+       id="text2175" />
+    <path
+       style="font-size:500px;font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#e00000;fill-opacity:1;stroke:#ffffff;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;font-family:Arial Black"
+       d="M 146.16714,395.52869 L 353.19839,395.52869 C 387.70332,395.52904 414.19255,404.07396 432.66616,421.16345 C 451.13913,438.25361 460.37577,459.41244 460.37612,484.64001 C 460.37577,505.79912 453.78398,523.94688 440.60073,539.08337 C 431.81135,549.17472 418.95329,557.14998 402.02651,563.00916 C 427.74234,569.19424 446.66322,579.81434 458.78921,594.86951 C 470.9145,609.92499 476.97732,628.84587 476.97768,651.6322 C 476.97732,670.18697 472.66417,686.8699 464.03823,701.68103 C 455.41158,716.49227 443.61146,728.211 428.63784,736.83728 C 419.36019,742.20839 405.3628,746.11463 386.64565,748.55603 C 361.74306,751.81124 345.22289,753.43884 337.08511,753.43884 L 146.16714,753.43884 L 146.16714,395.52869 z M 257.7394,535.90955 L 305.83511,535.90955 C 323.0875,535.90976 335.09107,532.93939 341.84585,526.99841 C 348.60017,521.05789 351.97744,512.47229 351.97768,501.24158 C 351.97744,490.82517 348.60017,482.68716 341.84585,476.82751 C 335.09107,470.96842 323.33164,468.03874 306.56753,468.03845 L 257.7394,468.03845 L 257.7394,535.90955 z M 257.7394,676.53455 L 314.13589,676.53455 C 333.17863,676.53462 346.60635,673.15735 354.41909,666.40271 C 362.23134,659.64825 366.13758,650.57436 366.13784,639.18103 C 366.13758,628.60173 362.27203,620.0975 354.54116,613.66833 C 346.8098,607.23944 333.26001,604.02493 313.89175,604.02478 L 257.7394,604.02478 L 257.7394,676.53455 z "
+       id="text2205" />
+    <path
+       style="font-size:500px;font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#e00000;fill-opacity:1;stroke:#ffffff;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;font-family:Arial Black"
+       d="M 703.69272,694.35681 L 577.71616,694.35681 L 560.38217,753.43884 L 447.34506,753.43884 L 581.86655,395.52869 L 702.47202,395.52869 L 836.9935,753.43884 L 721.27084,753.43884 L 703.69272,694.35681 z M 680.49936,616.96423 L 640.94858,488.30212 L 601.64194,616.96423 L 680.49936,616.96423 z "
+       id="text3180" />
+    <path
+       style="font-size:500px;font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#e00000;fill-opacity:1;stroke:#ffffff;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;font-family:Arial Black"
+       d="M 810.90509,641.13416 L 916.1297,634.54236 C 918.40822,651.63231 923.04689,664.65313 930.04572,673.60486 C 941.4388,688.09061 957.71482,695.33344 978.87384,695.33337 C 994.6614,695.33344 1006.8277,691.63064 1015.3729,684.22498 C 1023.9176,676.81946 1028.19,668.23386 1028.1902,658.46814 C 1028.19,649.19091 1024.121,640.89013 1015.9832,633.5658 C 1007.845,626.24171 988.96479,619.3244 959.34259,612.81384 C 910.83987,601.90905 876.25331,587.42339 855.58282,569.35681 C 834.74945,551.29061 824.33279,528.26004 824.33282,500.26501 C 824.33279,481.87337 829.66319,464.49871 840.32404,448.14099 C 850.98479,431.7839 867.01667,418.92584 888.41974,409.56677 C 909.82262,400.20841 939.16015,395.52905 976.43243,395.52869 C 1022.1679,395.52905 1057.0393,404.03327 1081.0467,421.04138 C 1105.0535,438.05017 1119.3358,465.10906 1123.8934,502.21814 L 1019.6453,508.32166 C 1016.8782,492.20864 1011.0595,480.4899 1002.1893,473.16541 C 993.31863,465.84148 981.07092,462.17937 965.44611,462.17908 C 952.58787,462.17937 942.90364,464.90561 936.39337,470.35779 C 929.88282,475.81055 926.62761,482.44303 926.62775,490.25525 C 926.62761,495.95213 929.31316,501.07908 934.68439,505.63611 C 939.89257,510.35641 952.26235,514.75094 971.79376,518.8197 C 1020.1334,529.2366 1054.7606,539.77533 1075.6756,550.43591 C 1096.59,561.09692 1111.8081,574.32119 1121.3299,590.10876 C 1130.851,605.89668 1135.6118,623.55617 1135.6121,643.08728 C 1135.6118,666.03659 1129.2641,687.19543 1116.5692,706.56384 C 1103.8735,725.93237 1086.1327,740.62148 1063.3465,750.63123 C 1040.5598,760.64099 1011.8326,765.64587 977.16486,765.64587 C 916.29234,765.64587 874.13743,753.92713 850.70001,730.48962 C 827.26248,707.05218 813.99752,677.26705 810.90509,641.13416 L 810.90509,641.13416 z "
+       id="text3184" />
+    <path
+       style="font-size:500px;font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#e00000;fill-opacity:1;stroke:#ffffff;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;font-family:Arial Black"
+       d="M 1139.0592,395.52869 L 1435.4459,395.52869 L 1435.4459,471.9447 L 1249.899,471.9447 L 1249.899,528.82947 L 1422.0182,528.82947 L 1422.0182,601.82751 L 1249.899,601.82751 L 1249.899,672.38416 L 1440.817,672.38416 L 1440.817,753.43884 L 1139.0592,753.43884 L 1139.0592,395.52869 z "
+       id="text3188" />
+  </g>
+</svg>
diff --git a/nixpkgs/pkgs/tools/text/xml/basex/default.nix b/nixpkgs/pkgs/tools/text/xml/basex/default.nix
new file mode 100644
index 000000000000..5e9df9f513b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/basex/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchurl, unzip, jre, coreutils, makeDesktopItem, copyDesktopItems }:
+
+stdenv.mkDerivation rec {
+  pname = "basex";
+  version = "10.7";
+
+  src = fetchurl {
+    url = "http://files.basex.org/releases/${version}/BaseX${builtins.replaceStrings ["."] [""] version}.zip";
+    hash = "sha256-Jr73UoyJfhtXLnYgOPh+jqKc3XZs+WMwJaO5nuD+Vmw=";
+  };
+
+  nativeBuildInputs = [ unzip copyDesktopItems ];
+  buildInputs = [ jre ];
+
+  desktopItems = lib.optional (!stdenv.isDarwin) (makeDesktopItem {
+    name = "basex";
+    exec = "basexgui %f";
+    icon = "${./basex.svg}"; # icon copied from Ubuntu basex package
+    comment = "Visually query and analyse your XML data";
+    desktopName = "BaseX XML Database";
+    genericName = "XML database tool";
+    categories = [ "Development" "Utility" "Database" ];
+    mimeTypes = [ "text/xml" ];
+  });
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    # Remove Windows batch files (unclutter $out/bin)
+    rm ./bin/*.bat
+
+    mkdir -p "$out/share/basex"
+
+    cp -R bin etc lib webapp src BaseX.jar "$out"
+    cp -R readme.txt webapp "$out/share/basex"
+
+    # Use substitutions instead of wrapper scripts
+    for file in "$out"/bin/*; do
+        sed -i -e "s|/usr/bin/env bash|${stdenv.shell}|" \
+               -e "s|java|${jre}/bin/java|" \
+               -e "s|readlink|${coreutils}/bin/readlink|" \
+               -e "s|dirname|${coreutils}/bin/dirname|" \
+               -e "s|basename|${coreutils}/bin/basename|" \
+               -e "s|echo|${coreutils}/bin/echo|" \
+            "$file"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "XML database and XPath/XQuery processor";
+    longDescription = ''
+      BaseX is a very fast and light-weight, yet powerful XML database and
+      XPath/XQuery processor, including support for the latest W3C Full Text
+      and Update Recommendations. It supports large XML instances and offers a
+      highly interactive front-end (basexgui). Apart from two local standalone
+      modes, BaseX offers a client/server architecture.
+    '';
+    homepage = "https://basex.org/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/html-xml-utils/default.nix b/nixpkgs/pkgs/tools/text/xml/html-xml-utils/default.nix
new file mode 100644
index 000000000000..df91cbcea566
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/html-xml-utils/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl, curl, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "html-xml-utils";
+  version = "8.6";
+
+  src = fetchurl {
+    url = "https://www.w3.org/Tools/HTML-XML-utils/${pname}-${version}.tar.gz";
+    sha256 = "sha256-XoRynvNszTkk0ocu1O5pVMYzMtylQAuo606u8fLbT7I=";
+  };
+
+  buildInputs = [curl libiconv];
+
+  meta = with lib; {
+    description = "Utilities for manipulating HTML and XML files";
+    homepage = "https://www.w3.org/Tools/HTML-XML-utils/";
+    license = licenses.w3c;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/jing-trang/default.nix b/nixpkgs/pkgs/tools/text/xml/jing-trang/default.nix
new file mode 100644
index 000000000000..f13a82faf295
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/jing-trang/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub, jre_headless, jdk_headless, ant, saxon }:
+
+stdenv.mkDerivation rec {
+  pname = "jing-trang";
+  version = "20181222";
+
+  src = fetchFromGitHub {
+    owner = "relaxng";
+    repo = "jing-trang";
+    rev = "V${version}";
+    sha256 = "sha256-Krupa3MGk5UaaQsaNpPMZuIUzHJytDiksz9ysCPkFS4=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ jdk_headless ant saxon ];
+
+  CLASSPATH = "lib/saxon.jar";
+
+  patches = [
+    ./no-git-during-build.patch
+  ];
+
+  preBuild = "ant";
+
+  installPhase = ''
+    mkdir -p "$out"/{share/java,bin}
+    cp ./build/*.jar ./lib/resolver.jar "$out/share/java/"
+
+    for tool in jing trang; do
+    cat > "$out/bin/$tool" <<EOF
+    #! $SHELL
+    export JAVA_HOME='${jre_headless}'
+    exec '${jre_headless}/bin/java' -jar '$out/share/java/$tool.jar' "\$@"
+    EOF
+    done
+
+    chmod +x "$out"/bin/*
+  '';
+
+  doCheck = true;
+  checkPhase = "ant test";
+
+  meta = with lib; {
+    description = "A RELAX NG validator in Java";
+    # The homepage is www.thaiopensource.com, but it links to googlecode.com
+    # for downloads and call it the "project site".
+    homepage = "https://www.thaiopensource.com/relaxng/trang.html";
+    platforms = platforms.unix;
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # source bundles dependencies as jars
+    ];
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/jing-trang/no-git-during-build.patch b/nixpkgs/pkgs/tools/text/xml/jing-trang/no-git-during-build.patch
new file mode 100644
index 000000000000..3fc9b3f6ef53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/jing-trang/no-git-during-build.patch
@@ -0,0 +1,47 @@
+From db0ed6267f1a85f0785c81b8ee396f74795c77c0 Mon Sep 17 00:00:00 2001
+From: Thomas Gerbet <thomas@gerbet.me>
+Date: Sat, 27 Nov 2021 10:24:07 +0100
+Subject: [PATCH] Do not rely on Git during the build
+
+---
+ build.xml | 6 ------
+ build.xsl | 6 ------
+ 2 files changed, 12 deletions(-)
+
+diff --git a/build.xml b/build.xml
+index e8ebaed8..2d26c72f 100644
+--- a/build.xml
++++ b/build.xml
+@@ -431,12 +431,6 @@
+ <target name="clean" 
+ 	description="Remove almost all files created during the build process">
+   <delete dir="${build.dir}"/>
+-  <exec executable="git">
+-    <arg value="clean"/>
+-    <arg value="-d"/>
+-    <arg value="--force"/>
+-    <arg value="${doc.dir}"/>
+-  </exec>
+ </target>
+ 
+ <target name="realclean" depends="clean"
+diff --git a/build.xsl b/build.xsl
+index fb9f3fef..fa384a27 100644
+--- a/build.xsl
++++ b/build.xsl
+@@ -23,12 +23,6 @@
+     <target name="dummy"/>
+     <target name="init">
+       <mkdir dir="{$build}"/>
+-      <exec executable="git">
+-        <arg value="submodule"/>
+-        <arg value="update"/>
+-        <arg value="--init"/>
+-        <arg value="--recursive"/>
+-      </exec>
+       <copy todir="{$doc}">
+         <fileset dir="relaxng.org/jclark" includes="**"/>
+       </copy>
+-- 
+2.34.1
+
diff --git a/nixpkgs/pkgs/tools/text/xml/rnv/default.nix b/nixpkgs/pkgs/tools/text/xml/rnv/default.nix
new file mode 100644
index 000000000000..1ee3355d1052
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/rnv/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl, expat }:
+
+stdenv.mkDerivation rec {
+  pname = "rnv";
+  version = "1.7.11";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/rnv/rnv-${version}.tar.xz";
+    sha256 = "1rlxrkkkp8b5j6lyvnd9z1d85grmwwmdggkxq6yl226nwkqj1faa";
+  };
+
+  buildInputs = [ expat ];
+
+  meta = with lib; {
+    description = "Relax NG Compact Syntax validator";
+    homepage = "http://www.davidashen.net/rnv.html";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/rxp/default.nix b/nixpkgs/pkgs/tools/text/xml/rxp/default.nix
new file mode 100644
index 000000000000..b45c89af1c03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/rxp/default.nix
@@ -0,0 +1,21 @@
+{lib, stdenv, fetchurl} :
+
+stdenv.mkDerivation rec {
+  pname = "rxp";
+  version = "1.5.0";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/r/rxp/rxp_${version}.orig.tar.gz";
+    sha256 = "0y365r36wzj4xn1dzhb03spxljnrx8vwqbiwnnwz4630129gzpm6";
+  };
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=implicit-function-declaration -Wno-error=int-conversion";
+
+  meta = {
+    license = lib.licenses.gpl2Plus;
+    description = "A validating XML parser written in C";
+    homepage = "https://www.cogsci.ed.ac.uk/~richard/rxp.html";
+    platforms = lib.platforms.unix;
+    mainProgram = "rxp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/xml2/default.nix b/nixpkgs/pkgs/tools/text/xml/xml2/default.nix
new file mode 100644
index 000000000000..d469078c91dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/xml2/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, pkg-config, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "xml2";
+  version = "0.5";
+
+  src = fetchurl {
+    url = "https://web.archive.org/web/20160427221603/http://download.ofb.net/gale/xml2-${version}.tar.gz";
+    sha256 = "01cps980m99y99cnmvydihga9zh3pvdsqag2fi1n6k2x7rfkl873";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libxml2 ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    echo -n 'checking csv2 and 2csv...'
+    $out/bin/csv2 -f <<< $'a,b\n1,2' \
+      | $out/bin/2csv record a b \
+      | grep -qF '1,2'
+    echo ' ok'
+
+    echo -n 'checking xml2 and 2xml...'
+    $out/bin/xml2 <<< $'<a>abc</a>' \
+      | $out/bin/2xml \
+      | grep -qF '<a>abc</a>'
+    echo ' ok'
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://web.archive.org/web/20160515005047/http://dan.egnor.name:80/xml2";
+    description = "Tools for command line processing of XML, HTML, and CSV";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix b/nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix
new file mode 100644
index 000000000000..380baa906c27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, perl }:
+stdenv.mkDerivation rec {
+  pname = "xmlformat";
+  version = "1.04";
+
+  src = fetchurl {
+    url = "http://www.kitebird.com/software/xmlformat/xmlformat-${version}.tar.gz";
+    sha256 = "1vwgzn4ha0az7dx0cyc6dx5nywwrx9gxhyh08mvdcq27wjbh79vi";
+  };
+
+  buildInputs = [ perl ];
+  buildPhase = ''
+    patchShebangs ./xmlformat.pl
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./xmlformat.pl $out/bin/xmlformat
+    cp ./LICENSE $out/
+  '';
+
+  meta = {
+    description = "a configurable formatter (or 'pretty-printer') for XML documents";
+    homepage = "http://www.kitebird.com/software/xmlformat/";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix b/nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix
new file mode 100644
index 000000000000..c915e2c7fc5b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, lib, makeWrapper, dev_only_shellcheck ? null,
+fetchFromGitHub,
+
+fzf, coreutils, libxml2, libxslt, jing, findutils, gnugrep, gnused,
+docbook5
+}:
+stdenv.mkDerivation rec {
+  pname = "xmloscopy";
+  version = "0.1.3";
+
+  nativeBuildInputs = [
+    makeWrapper
+    dev_only_shellcheck
+  ];
+
+  spath = lib.makeBinPath [
+    fzf
+    coreutils
+    libxml2
+    libxslt
+    jing
+    findutils
+    gnugrep
+    gnused
+  ];
+
+  src = fetchFromGitHub {
+    owner = "grahamc";
+    repo = "xmloscopy";
+    rev = "v${version}";
+    sha256 = "06y5bckrmnq7b5ny2hfvlmdws910jw3xbw5nzy3bcpqsccqnjxrc";
+  };
+
+  installPhase = ''
+    sed -i "s/hard to say/v${version}/" ./xmloscopy
+    type -P shellcheck && shellcheck ./xmloscopy
+    chmod +x ./xmloscopy
+    patchShebangs ./xmloscopy
+    mkdir -p $out/bin
+    cp ./xmloscopy $out/bin/
+    wrapProgram $out/bin/xmloscopy \
+      --set RNG "${docbook5}/xml/rng/docbook/docbook.rng" \
+      --set PATH "${spath}"
+  '';
+
+  meta = with lib; {
+    description = "wtf is my docbook broken?";
+    homepage = "https://github.com/grahamc/xmloscopy";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ grahamc ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/xmlstarlet/default.nix b/nixpkgs/pkgs/tools/text/xml/xmlstarlet/default.nix
new file mode 100644
index 000000000000..b5eb08199fc6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/xmlstarlet/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, autoreconfHook
+, pkg-config
+, libxml2
+, libxslt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xmlstarlet";
+  version = "1.6.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/xmlstar/xmlstarlet-${version}.tar.gz";
+    sha256 = "1jp737nvfcf6wyb54fla868yrr39kcbijijmjpyk4lrpyg23in0m";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libxml2 libxslt ];
+
+  patches = [
+    (fetchpatch {
+      name = "0001-Fix-build-with-libxml2-2.12.patch";
+      url = "https://sourceforge.net/p/xmlstar/patches/_discuss/thread/890e29655a/66ca/attachment/0001-Fix-build-with-libxml2-2.12.patch";
+      hash = "sha256-XEk7aFOdrzdec1j2ffERJQbLH0AUNJA52QwA9jf4XWA=";
+    })
+  ];
+
+  preConfigure = ''
+    export LIBXSLT_PREFIX=${libxslt.dev}
+    export LIBXML_PREFIX=${libxml2.dev}
+    export LIBXSLT_LIBS=$($PKG_CONFIG --libs libxslt libexslt)
+    export LIBXML_LIBS=$($PKG_CONFIG --libs libxml-2.0)
+  '';
+
+  postInstall = ''
+    ln -s xml $out/bin/xmlstarlet
+  '';
+
+  meta = {
+    description = "A command line tool for manipulating and querying XML data";
+    homepage = "https://xmlstar.sourceforge.net/";
+    license = lib.licenses.mit;
+    mainProgram = "xmlstarlet";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/xq/default.nix b/nixpkgs/pkgs/tools/text/xml/xq/default.nix
new file mode 100644
index 000000000000..6fae10b25357
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/xq/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, xq-xml
+}:
+
+buildGoModule rec {
+  pname = "xq";
+  version = "1.2.4";
+
+  src = fetchFromGitHub {
+    owner = "sibprogrammer";
+    repo = "xq";
+    rev = "v${version}";
+    hash = "sha256-g1d5sS3tgxP2VRogWG/5OXezDsJuQ6e724te+Oj3r24=";
+  };
+
+  vendorHash = "sha256-Oy/BBE6qCKJQRNDn6UiBr+/Psgi3A9Eaytmbmjt7eq8=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.commit=${src.rev}"
+    "-X=main.version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = xq-xml;
+    };
+  };
+
+  meta = with lib; {
+    description = "Command-line XML and HTML beautifier and content extractor";
+    homepage = "https://github.com/sibprogrammer/xq";
+    changelog = "https://github.com/sibprogrammer/xq/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xpaste/default.nix b/nixpkgs/pkgs/tools/text/xpaste/default.nix
new file mode 100644
index 000000000000..88666fd25adc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xpaste/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "xpaste";
+  version = "1.6";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ossobv";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-eVnoLG+06UTOkvGhzL/XS4JBrEwbXYZ1fuNTIW7YAfE=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    xlib
+  ];
+
+  # no tests, no python module to import, no version output to check
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Paste text into X windows that don't work with selections";
+    homepage = "https://github.com/ossobv/xpaste";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ gador ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xsv/default.nix b/nixpkgs/pkgs/tools/text/xsv/default.nix
new file mode 100644
index 000000000000..303b38d65c2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xsv/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xsv";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "BurntSushi";
+    repo = "xsv";
+    rev = version;
+    sha256 = "17v1nw36mrarrd5yv4xd3mpc1d7lvhd5786mqkzyyraf78pjg045";
+  };
+
+  cargoSha256 = "1bh60zgflaa5n914irkr4bpq3m4h2ngcj6bp5xx1qj112dwgvmyb";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "A fast CSV toolkit written in Rust";
+    homepage = "https://github.com/BurntSushi/xsv";
+    license = with licenses; [ unlicense /* or */ mit ];
+    maintainers = [ maintainers.jgertm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xurls/default.nix b/nixpkgs/pkgs/tools/text/xurls/default.nix
new file mode 100644
index 000000000000..dc0825b88d4f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xurls/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "xurls";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "mvdan";
+    repo = "xurls";
+    rev = "v${version}";
+    sha256 = "sha256-9hPXZ/t15+LG9fji1gyeWhUrYOr6eGyKYg3a1SmHJpQ=";
+  };
+
+  vendorHash = "sha256-eVK7qU+NWsarBsEpg6aGow/urmhIpU3Z9RwoTvSymXo=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Extract urls from text";
+    homepage = "https://github.com/mvdan/xurls";
+    maintainers = with maintainers; [ koral ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/yaml-merge/default.nix b/nixpkgs/pkgs/tools/text/yaml-merge/default.nix
new file mode 100644
index 000000000000..85ea3cd360da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/yaml-merge/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages }:
+
+stdenv.mkDerivation {
+  pname = "yaml-merge";
+  version = "unstable-2022-01-12";
+
+  src = fetchFromGitHub {
+    owner = "abbradar";
+    repo = "yaml-merge";
+    rev = "2f0174fe92fc283dd38063a3a14f7fe71db4d9ec";
+    sha256 = "sha256-S2eZw+FOZvOn0XupZDRNcolUPd4PhvU1ziu+kx2AwnY=";
+  };
+
+  pythonPath = with python3Packages; [ pyyaml ];
+  nativeBuildInputs = with python3Packages;  [ wrapPython ];
+
+  installPhase = ''
+    install -Dm755 yaml-merge.py $out/bin/yaml-merge
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    description = "Merge YAML data files";
+    homepage = "https://github.com/abbradar/yaml-merge";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/yx/default.nix b/nixpkgs/pkgs/tools/text/yx/default.nix
new file mode 100644
index 000000000000..732be1760c9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/yx/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, libyaml
+, testers
+, yx
+}:
+stdenv.mkDerivation rec {
+  pname = "yx";
+  version = "1.0.2";
+
+  src = fetchFromGitLab {
+    owner = "tomalok";
+    repo = "yx";
+    rev = version;
+    hash = "sha256-uuso+hsmdsB7VpIRKob8rfMaWvRMCBHvCFnYrHPC6iw=";
+  };
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  strictDeps = true;
+
+  buildInputs = [ libyaml ];
+
+  doCheck = true;
+
+  passthru.tests.version = testers.testVersion {
+    package = yx;
+    command = "${meta.mainProgram} -v";
+    version = "v${yx.version}";
+  };
+
+  meta = with lib; {
+    description = "YAML Data Extraction Tool";
+    homepage = "https://gitlab.com/tomalok/yx";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ twz123 ];
+    mainProgram = "yx";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/zet/default.nix b/nixpkgs/pkgs/tools/text/zet/default.nix
new file mode 100644
index 000000000000..50d149f4e655
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/zet/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zet";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "yarrow";
+    repo = "zet";
+    rev = "v${version}";
+    hash = "sha256-IjM+jSb+kdML0zZGuz9+9wrFzQCujn/bg9/vaTzMtUs=";
+  };
+
+  cargoHash = "sha256-kHIOsSR7ZxBzp4dtm2hbi8ddtlQ86x5EASk5HFmnhFo=";
+
+  # tests fail with `--release`
+  # https://github.com/yarrow/zet/pull/7
+  checkType = "debug";
+
+  meta = with lib; {
+    description = "CLI utility to find the union, intersection, set difference, etc of files considered as sets of lines";
+    homepage = "https://github.com/yarrow/zet";
+    changelog = "https://github.com/yarrow/zet/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/zim-tools/default.nix b/nixpkgs/pkgs/tools/text/zim-tools/default.nix
new file mode 100644
index 000000000000..e51755dd7e44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/zim-tools/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub
+, meson, ninja, pkg-config
+, docopt_cpp, file, gumbo, mustache-hpp, zimlib, zlib
+, gtest
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zim-tools";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "openzim";
+    repo = "zim-tools";
+    rev = version;
+    sha256 = "sha256-kPUw13GVYZ1GLb4b4ch64GkJZtf6PW1gae8F/cgyG90=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [ docopt_cpp file gumbo mustache-hpp zimlib zlib ];
+
+  nativeCheckInputs = [ gtest ];
+  doCheck = true;
+
+  meta = {
+    description = "Various ZIM command line tools";
+    homepage = "https://github.com/openzim/zim-tools";
+    maintainers = with lib.maintainers; [ robbinch ];
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/zoekt/default.nix b/nixpkgs/pkgs/tools/text/zoekt/default.nix
new file mode 100644
index 000000000000..22059ebbf230
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/zoekt/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+}:
+buildGoModule {
+  pname = "zoekt";
+  version = "unstable-2022-11-09";
+
+  src = fetchFromGitHub {
+    owner = "sourcegraph";
+    repo = "zoekt";
+    rev = "c4b18d3b44da94b3e7c9c94467d68c029666bb86";
+    hash = "sha256-QtwOiBxBeFkhRfH3R2fP72b05Hc4+zt9njqCNVcprZ4=";
+  };
+
+  vendorHash = "sha256-DiAqFJ8E5V0/eHztm92WVrf1XGPXmmOaVXaWHfQMn2k=";
+
+  nativeCheckInputs = [
+    git
+  ];
+
+  preCheck = ''
+    export HOME=`mktemp -d`
+    git config --global --replace-all protocol.file.allow always
+  '';
+
+  meta = with lib; {
+    description = "Fast trigram based code search";
+    homepage = "https://github.com/google/zoekt";
+    license = licenses.asl20;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/zstxtns-utils/default.nix b/nixpkgs/pkgs/tools/text/zstxtns-utils/default.nix
new file mode 100644
index 000000000000..a797f2b8dab5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/zstxtns-utils/default.nix
@@ -0,0 +1,39 @@
+{ coreutils
+, fetchurl
+, gnugrep
+, lib
+, makeWrapper
+, moreutils
+, stdenvNoCC
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "zstxtns-utils";
+  version = "0.0.3";
+
+  src = fetchurl {
+    url = "https://ytrizja.de/distfiles/zstxtns-utils-${version}.tar.gz";
+    sha256 = "I/Gm7vHUr29NClYWQ1kwu8HrNZpdLXfE/nutTNoqcdU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D -t $out/bin zstxtns-merge zstxtns-unmerge
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/zstxtns-merge --set PATH "${lib.makeBinPath [coreutils gnugrep moreutils]}"
+    wrapProgram $out/bin/zstxtns-unmerge --set PATH "${lib.makeBinPath [coreutils gnugrep]}"
+  '';
+
+  meta = with lib; {
+    description = "utilities to deal with text based name service databases";
+    homepage = "https://ytrizja.de/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.fogti ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoc/default.nix b/nixpkgs/pkgs/tools/typesetting/asciidoc/default.nix
new file mode 100644
index 000000000000..69b0ccff68bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoc/default.nix
@@ -0,0 +1,295 @@
+{ fetchurl, lib, stdenv, python3
+, fetchFromGitHub, autoreconfHook
+, installShellFiles
+, enableStandardFeatures ? false
+, sourceHighlight
+, highlight
+, pygments
+, graphviz
+, texliveMinimal
+, dblatexFull
+, libxslt
+, w3m
+, lynx
+, imagemagick
+, lilypond
+, libxml2
+, docbook_xml_dtd_45
+, docbook_xsl_ns
+, docbook_xsl
+, fop
+, epubcheck
+, gnused
+, coreutils
+
+# if true, enable all the below filters and backends
+, enableExtraPlugins ? false
+
+# unzip is needed to extract filter and backend plugins
+, unzip
+# filters
+, enableDitaaFilter ? false, jre
+, enableMscgenFilter ? false, mscgen
+, enableDiagFilter ? false, blockdiag, seqdiag, actdiag, nwdiag
+, enableQrcodeFilter ? false, qrencode
+, enableMatplotlibFilter ? false, matplotlib, numpy
+, enableAafigureFilter ? false, aafigure, recursive-pth-loader
+# backends
+, enableDeckjsBackend ? false
+, enableOdfBackend ? false
+
+# java is problematic on some platforms, where it is unfree
+, enableJava ? true
+
+, buildPackages
+}:
+
+let
+
+  _enableDitaaFilter = (enableExtraPlugins && enableJava) || enableDitaaFilter;
+  _enableMscgenFilter = enableExtraPlugins || enableMscgenFilter;
+  _enableDiagFilter = enableExtraPlugins || enableDiagFilter;
+  _enableQrcodeFilter = enableExtraPlugins || enableQrcodeFilter;
+  _enableMatplotlibFilter = enableExtraPlugins || enableMatplotlibFilter;
+  _enableAafigureFilter = enableExtraPlugins || enableAafigureFilter;
+  _enableDeckjsBackend = enableExtraPlugins || enableDeckjsBackend;
+  _enableOdfBackend = enableExtraPlugins || enableOdfBackend;
+
+  #
+  # texlive environment
+  #
+  texlive = texliveMinimal.withPackages (ps: [ ps.dvipng ]);
+
+  #
+  # filters
+  #
+
+  ditaaFilterSrc = fetchurl {
+    url = "https://asciidoc-ditaa-filter.googlecode.com/files/ditaa-filter-1.1.zip";
+    sha256 = "0p7hm2a1xywx982ia3vg4c0lam5sz0xknsc10i2a5vswy026naf6";
+  };
+
+  mscgenFilterSrc = fetchurl {
+    url = "https://asciidoc-mscgen-filter.googlecode.com/files/mscgen-filter-1.2.zip";
+    sha256 = "1nfwmj375gpv5dn9i770pjv59aihzy2kja0fflsk96xwnlqsqq61";
+  };
+
+  diagFilterSrc = fetchurl {
+    # unfortunately no version number
+    url = "https://asciidoc-diag-filter.googlecode.com/files/diag_filter.zip";
+    sha256 = "1qlqrdbqkdqqgfdhjsgdws1al0sacsyq6jmwxdfy7r8k7bv7n7mm";
+  };
+
+  qrcodeFilterSrc = fetchurl {
+    url = "https://asciidoc-qrencode-filter.googlecode.com/files/qrcode-filter-1.0.zip";
+    sha256 = "0h4bql1nb4y4fmg2yvlpfjhvy22ln8jsaxdr10f8bfcg5lr0zkxs";
+  };
+
+  # there are no archives or tags, using latest commit in master branch as per 2013-09-22
+  matplotlibFilterSrc = let commit = "75f0d009629f93f33fab04b83faca20cc35dd358"; in fetchurl {
+    name = "mplw-${commit}.tar.gz";
+    url = "https://api.github.com/repos/lvv/mplw/tarball/${commit}";
+    sha256 = "0yfhkm2dr8gnp0fcg25x89hwiymkri2m5cyqzmzragzwj0hbmcf1";
+  };
+
+  aafigureFilterSrc = fetchurl {
+    url = "https://asciidoc-aafigure-filter.googlecode.com/files/aafigure-filter-1.1.zip";
+    sha256 = "1hq2s30dvmv5dqvj0xm1qwdwafhgm9w1iyr0lr0c40cyk8h00j8j";
+  };
+
+  #
+  # backends
+  #
+
+  deckjsBackendSrc = fetchurl {
+    url = "https://github.com/downloads/houqp/asciidoc-deckjs/deckjs-1.6.2.zip";
+    sha256 = "1siy1j8naj5irrrrv5bfgl4d8nal6j9pyahy4f50wmrr9wv59s46";
+  };
+
+  # the odf backend is actually two plugins: odt + odp
+  odtBackendSrc = fetchurl {
+    url = "https://github.com/downloads/dagwieers/asciidoc-odf/odt-backend-0.1.zip";
+    sha256 = "1zaa97h9sx6ncxcdkl1x3ggydi7f8kjgvrnpjnkjiizi45k350kw";
+  };
+
+  odpBackendSrc = fetchurl {
+    url = "https://github.com/downloads/dagwieers/asciidoc-odf/odp-backend-0.1.zip";
+    sha256 = "08ya4bskygzqkfqwjllpg31qc5k08xp2k78z9b2480g8y57bfy10";
+  };
+
+in python3.pkgs.buildPythonApplication rec {
+  pname = "asciidoc"
+    + lib.optionalString enableStandardFeatures "-full"
+    + lib.optionalString enableExtraPlugins "-with-plugins";
+  version = "10.2.0";
+
+  src = fetchFromGitHub {
+    owner = "asciidoc-py";
+    repo = "asciidoc-py";
+    rev = version;
+    hash = "sha256-TqC0x9xB6e2d6Wc9bgnlqgZVOmYHmUUKfE/CKAiEtag=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    installShellFiles
+    unzip
+  ];
+
+  # install filters early, so their shebangs are patched too
+  postPatch = with lib; ''
+    mkdir -p "$out/etc/asciidoc/filters"
+    mkdir -p "$out/etc/asciidoc/backends"
+  '' + optionalString _enableDitaaFilter ''
+    echo "Extracting ditaa filter"
+    unzip -d "$out/etc/asciidoc/filters/ditaa" "${ditaaFilterSrc}"
+    sed -i -e "s|java -jar|${jre}/bin/java -jar|" \
+        "$out/etc/asciidoc/filters/ditaa/ditaa2img.py"
+  '' + optionalString _enableMscgenFilter ''
+    echo "Extracting mscgen filter"
+    unzip -d "$out/etc/asciidoc/filters/mscgen" "${mscgenFilterSrc}"
+    sed -i -e "s|filter-wrapper.py mscgen|filter-wrapper.py ${mscgen}/bin/mscgen|" \
+        "$out/etc/asciidoc/filters/mscgen/mscgen-filter.conf"
+  '' + optionalString _enableDiagFilter ''
+    echo "Extracting diag filter"
+    unzip -d "$out/etc/asciidoc/filters/diag" "${diagFilterSrc}"
+    sed -i \
+        -e "s|filter='blockdiag|filter=\'${blockdiag}/bin/blockdiag|" \
+        -e "s|filter='seqdiag|filter=\'${seqdiag}/bin/seqdiag|" \
+        -e "s|filter='actdiag|filter=\'${actdiag}/bin/actdiag|" \
+        -e "s|filter='nwdiag|filter=\'${nwdiag}/bin/nwdiag|" \
+        -e "s|filter='packetdiag|filter=\'${nwdiag}/bin/packetdiag|" \
+        "$out/etc/asciidoc/filters/diag/diag-filter.conf"
+  '' + optionalString _enableQrcodeFilter ''
+    echo "Extracting qrcode filter"
+    unzip -d "$out/etc/asciidoc/filters/qrcode" "${qrcodeFilterSrc}"
+    sed -i -e "s|systemcmd('qrencode|systemcmd('${qrencode}/bin/qrencode|" \
+        "$out/etc/asciidoc/filters/qrcode/qrcode2img.py"
+  '' + optionalString _enableMatplotlibFilter ''
+    echo "Extracting mpl (matplotlib) filter"
+    mkdir -p "$out/etc/asciidoc/filters/mpl"
+    tar xvf "${matplotlibFilterSrc}" -C "$out/etc/asciidoc/filters/mpl" --strip-components=1
+    # Stop asciidoc from loading mpl/.old/chart-filter.conf
+    rm -rf "$out/etc/asciidoc/filters/mpl/.old"
+    # Add matplotlib and numpy to sys.path
+    matplotlib_path="$(toPythonPath ${matplotlib})"
+    numpy_path="$(toPythonPath ${numpy})"
+    sed -i "/^import.*sys/asys.path.append(\"$matplotlib_path\"); sys.path.append(\"$numpy_path\");" \
+        "$out/etc/asciidoc/filters/mpl/mplw.py"
+  '' + optionalString _enableAafigureFilter ''
+    echo "Extracting aafigure filter"
+    unzip -d "$out/etc/asciidoc/filters/aafigure" "${aafigureFilterSrc}"
+    # Add aafigure to sys.path (and it needs recursive-pth-loader)
+    pth_loader_path="$(toPythonPath ${recursive-pth-loader})"
+    aafigure_path="$(toPythonPath ${aafigure})"
+    sed -i "/^import.*sys/asys.path.append(\"$pth_loader_path\"); sys.path.append(\"$aafigure_path\"); import sitecustomize" \
+        "$out/etc/asciidoc/filters/aafigure/aafig2img.py"
+  '' + optionalString _enableDeckjsBackend ''
+    echo "Extracting deckjs backend"
+    unzip -d "$out/etc/asciidoc/backends/deckjs" "${deckjsBackendSrc}"
+  '' + optionalString _enableOdfBackend ''
+    echo "Extracting odf backend (odt + odp)"
+    unzip -d "$out/etc/asciidoc/backends/odt" "${odtBackendSrc}"
+    unzip -d "$out/etc/asciidoc/backends/odp" "${odpBackendSrc}"
+    # The odt backend has a TODO note about removing this hardcoded path, but
+    # the odp backend already has that fix. Copy it here until fixed upstream.
+    sed -i "s|'/etc/asciidoc/backends/odt/asciidoc.ott'|os.path.dirname(__file__),'asciidoc.ott'|" \
+        "$out/etc/asciidoc/backends/odt/a2x-backend.py"
+  '' + (if enableStandardFeatures then ''
+    sed -e "s|dot|${graphviz}/bin/dot|g" \
+        -e "s|neato|${graphviz}/bin/neato|g" \
+        -e "s|twopi|${graphviz}/bin/twopi|g" \
+        -e "s|circo|${graphviz}/bin/circo|g" \
+        -e "s|fdp|${graphviz}/bin/fdp|g" \
+        -i "asciidoc/resources/filters/graphviz/graphviz2png.py"
+
+    sed -e "s|run('latex|run('${texlive}/bin/latex|g" \
+        -e "s|cmd = 'dvipng'|cmd = '${texlive}/bin/dvipng'|g" \
+        -e "s|cmd = 'dvisvgm'|cmd = '${texlive}/bin/dvisvgm'|g" \
+        -i "asciidoc/resources/filters/latex/latex2img.py"
+
+    sed -e "s|run('abc2ly|run('${lilypond}/bin/abc2ly|g" \
+        -e "s|run('lilypond|run('${lilypond}/bin/lilypond|g" \
+        -e "s|run('convert|run('${imagemagick.out}/bin/convert|g" \
+        -i "asciidoc/resources/filters/music/music2png.py"
+
+    sed -e 's|filter="source-highlight|filter="${sourceHighlight}/bin/source-highlight|' \
+        -e 's|filter="highlight|filter="${highlight}/bin/highlight|' \
+        -e 's|filter="pygmentize|filter="${pygments}/bin/pygmentize|' \
+        -i "asciidoc/resources/filters/source/source-highlight-filter.conf"
+
+    # ENV is custom environment passed to programs that a2x invokes. Here we
+    # use it to work around an impurity in the tetex package; tetex tools
+    # cannot find their neighbours (e.g. pdflatex doesn't find mktextfm).
+    # We can remove PATH= when those impurities are fixed.
+    # TODO: Is this still necessary when using texlive?
+    sed -e "s|^ENV =.*|ENV = dict(XML_CATALOG_FILES='${docbook_xml_dtd_45}/xml/dtd/docbook/catalog.xml ${docbook_xsl_ns}/xml/xsl/docbook/catalog.xml ${docbook_xsl}/xml/xsl/docbook/catalog.xml', PATH='${lib.makeBinPath [ texlive coreutils gnused ]}', **(dict(filter(lambda v: v[0] == 'SOURCE_DATE_EPOCH', os.environ.items()))))|" \
+        -e "s|^ASCIIDOC =.*|ASCIIDOC = '$out/bin/asciidoc'|" \
+        -e "s|^XSLTPROC =.*|XSLTPROC = '${libxslt.bin}/bin/xsltproc'|" \
+        -e "s|^DBLATEX =.*|DBLATEX = '${dblatexFull}/bin/dblatex'|" \
+        ${optionalString enableJava ''-e "s|^FOP =.*|FOP = '${fop}/bin/fop'|"''} \
+        -e "s|^W3M =.*|W3M = '${w3m}/bin/w3m'|" \
+        -e "s|^LYNX =.*|LYNX = '${lynx}/bin/lynx'|" \
+        -e "s|^XMLLINT =.*|XMLLINT = '${libxml2.bin}/bin/xmllint'|" \
+        -e "s|^EPUBCHECK =.*|EPUBCHECK = '${epubcheck}/bin/epubcheck'|" \
+        -i asciidoc/a2x.py
+  '' else ''
+    sed -e "s|^ENV =.*|ENV = dict(XML_CATALOG_FILES='${docbook_xml_dtd_45}/xml/dtd/docbook/catalog.xml ${docbook_xsl_ns}/xml/xsl/docbook/catalog.xml ${docbook_xsl}/xml/xsl/docbook/catalog.xml', **(dict(filter(lambda v: v[0] == 'SOURCE_DATE_EPOCH', os.environ.items()))))|" \
+        -e "s|^XSLTPROC =.*|XSLTPROC = '${libxslt.bin}/bin/xsltproc'|" \
+        -e "s|^XMLLINT =.*|XMLLINT = '${libxml2.bin}/bin/xmllint'|" \
+        -i asciidoc/a2x.py
+  '') + ''
+    # Fix tests
+    for f in $(grep -R --files-with-matches "2002-11-25") ; do
+      substituteInPlace $f --replace "2002-11-25" "1980-01-02"
+      substituteInPlace $f --replace "00:37:42" "00:00:00"
+    done
+  '' + lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    # We want to use asciidoc from the build platform to build the documentation.
+    substituteInPlace Makefile.in \
+      --replace "python3 -m asciidoc.a2x" "${buildPackages.asciidoc}/bin/a2x"
+  '';
+
+  postBuild = ''
+    make manpages
+  '';
+
+  postInstall = ''
+    installManPage doc/asciidoc.1 doc/a2x.1 doc/testasciidoc.1
+  '';
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytest
+    pytest-mock
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    make test
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Text-based document generation system";
+    longDescription = ''
+      AsciiDoc is a text document format for writing notes, documentation,
+      articles, books, ebooks, slideshows, web pages, man pages and blogs.
+      AsciiDoc files can be translated to many formats including HTML, PDF,
+      EPUB, man page.
+
+      AsciiDoc is highly configurable: both the AsciiDoc source file syntax and
+      the backend output markups (which can be almost any type of SGML/XML
+      markup) can be customized and extended by the user.
+    '';
+    sourceProvenance = with sourceTypes; [
+      fromSource
+    ] ++ lib.optional _enableDitaaFilter binaryBytecode;
+    homepage = "https://asciidoc-py.github.io/";
+    changelog = "https://github.com/asciidoc-py/asciidoc-py/blob/${version}/CHANGELOG.adoc";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bjornfor dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/Gemfile b/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/Gemfile
new file mode 100644
index 000000000000..12c132a81d1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/Gemfile
@@ -0,0 +1,14 @@
+source 'https://rubygems.org'
+gem 'asciidoctor'
+gem 'asciidoctor-bibtex'
+gem 'asciidoctor-diagram'
+gem 'asciidoctor-epub3'
+gem 'asciidoctor-html5s'
+gem 'asciidoctor-mathematical'
+gem 'asciidoctor-multipage'
+gem 'asciidoctor-pdf'
+gem 'asciidoctor-reducer'
+gem 'asciidoctor-revealjs'
+gem 'coderay'
+gem 'pygments.rb'
+gem 'rouge'
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/Gemfile.lock b/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/Gemfile.lock
new file mode 100644
index 000000000000..da7c2fccb1b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/Gemfile.lock
@@ -0,0 +1,139 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    Ascii85 (1.1.0)
+    addressable (2.8.5)
+      public_suffix (>= 2.0.2, < 6.0)
+    afm (0.2.2)
+    asciidoctor (2.0.20)
+    asciidoctor-bibtex (0.8.0)
+      asciidoctor (~> 2.0)
+      bibtex-ruby (~> 5.1)
+      citeproc-ruby (~> 1)
+      csl-styles (~> 1)
+      latex-decode (~> 0.2)
+    asciidoctor-diagram (2.2.11)
+      asciidoctor (>= 1.5.7, < 3.x)
+      asciidoctor-diagram-ditaamini (~> 1.0)
+      asciidoctor-diagram-plantuml (~> 1.2021)
+      rexml
+    asciidoctor-diagram-ditaamini (1.0.3)
+    asciidoctor-diagram-plantuml (1.2023.10)
+    asciidoctor-epub3 (1.5.1)
+      asciidoctor (>= 1.5.6, < 3.0.0)
+      gepub (~> 1.0.0)
+      mime-types (~> 3.0)
+    asciidoctor-html5s (0.5.1)
+      asciidoctor (>= 1.5.7, < 3.0)
+      thread_safe (~> 0.3.4)
+    asciidoctor-mathematical (0.3.5)
+      asciidoctor (~> 2.0)
+      asciimath (~> 2.0)
+      mathematical (~> 1.6.0)
+    asciidoctor-multipage (0.0.16)
+      asciidoctor (>= 2.0.11, < 2.1)
+    asciidoctor-pdf (2.3.9)
+      asciidoctor (~> 2.0)
+      concurrent-ruby (~> 1.1)
+      matrix (~> 0.4)
+      prawn (~> 2.4.0)
+      prawn-icon (~> 3.0.0)
+      prawn-svg (~> 0.32.0)
+      prawn-table (~> 0.2.0)
+      prawn-templates (~> 0.1.0)
+      treetop (~> 1.6.0)
+    asciidoctor-reducer (1.0.5)
+      asciidoctor (~> 2.0)
+    asciidoctor-revealjs (5.0.1)
+      asciidoctor (>= 2.0.0, < 3.0.0)
+    asciimath (2.0.5)
+    bibtex-ruby (5.1.6)
+      latex-decode (~> 0.0)
+    citeproc (1.0.10)
+      namae (~> 1.0)
+    citeproc-ruby (1.1.14)
+      citeproc (~> 1.0, >= 1.0.9)
+      csl (~> 1.6)
+    coderay (1.1.3)
+    concurrent-ruby (1.2.2)
+    csl (1.6.0)
+      namae (~> 1.0)
+      rexml
+    csl-styles (1.0.1.11)
+      csl (~> 1.0)
+    css_parser (1.14.0)
+      addressable
+    gepub (1.0.15)
+      nokogiri (>= 1.8.2, < 2.0)
+      rubyzip (> 1.1.1, < 2.4)
+    hashery (2.1.2)
+    i18n (1.14.1)
+      concurrent-ruby (~> 1.0)
+    latex-decode (0.4.0)
+    mathematical (1.6.14)
+      ruby-enum (~> 0.4)
+    matrix (0.4.2)
+    mime-types (3.5.0)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2023.0808)
+    mini_portile2 (2.8.4)
+    namae (1.1.1)
+    nokogiri (1.15.4)
+      mini_portile2 (~> 2.8.2)
+      racc (~> 1.4)
+    pdf-core (0.9.0)
+    pdf-reader (2.11.0)
+      Ascii85 (~> 1.0)
+      afm (~> 0.2.1)
+      hashery (~> 2.0)
+      ruby-rc4
+      ttfunk
+    polyglot (0.3.5)
+    prawn (2.4.0)
+      pdf-core (~> 0.9.0)
+      ttfunk (~> 1.7)
+    prawn-icon (3.0.0)
+      prawn (>= 1.1.0, < 3.0.0)
+    prawn-svg (0.32.0)
+      css_parser (~> 1.6)
+      prawn (>= 0.11.1, < 3)
+      rexml (~> 3.2)
+    prawn-table (0.2.2)
+      prawn (>= 1.3.0, < 3.0.0)
+    prawn-templates (0.1.2)
+      pdf-reader (~> 2.0)
+      prawn (~> 2.2)
+    public_suffix (5.0.3)
+    pygments.rb (2.4.0)
+    racc (1.7.1)
+    rexml (3.2.6)
+    rouge (4.1.3)
+    ruby-enum (0.9.0)
+      i18n
+    ruby-rc4 (0.1.5)
+    rubyzip (2.3.2)
+    thread_safe (0.3.6)
+    treetop (1.6.12)
+      polyglot (~> 0.3)
+    ttfunk (1.7.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  asciidoctor
+  asciidoctor-bibtex
+  asciidoctor-diagram
+  asciidoctor-epub3
+  asciidoctor-html5s
+  asciidoctor-mathematical
+  asciidoctor-multipage
+  asciidoctor-pdf
+  asciidoctor-reducer
+  asciidoctor-revealjs
+  coderay
+  pygments.rb
+  rouge
+
+BUNDLED WITH
+   2.4.17
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/default.nix b/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/default.nix
new file mode 100644
index 000000000000..ba9c21631a90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, bundlerApp
+, bundlerUpdateScript
+, makeWrapper
+, withJava ? true, jre # Used by asciidoctor-diagram for ditaa and PlantUML
+}:
+
+let
+  path = lib.makeBinPath (lib.optional withJava jre);
+in
+bundlerApp rec {
+  pname = "asciidoctor";
+  gemdir = ./.;
+
+  exes = [
+    "asciidoctor"
+    "asciidoctor-epub3"
+    "asciidoctor-multipage"
+    "asciidoctor-pdf"
+    "asciidoctor-reducer"
+    "asciidoctor-revealjs"
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = lib.optionalString (path != "") (lib.concatMapStrings (exe: ''
+    wrapProgram $out/bin/${exe} \
+      --prefix PATH : ${path}
+  '') exes);
+
+  passthru = {
+    updateScript = bundlerUpdateScript "asciidoctor-with-extensions";
+  };
+
+  meta = with lib; {
+    description = "A faster Asciidoc processor written in Ruby, with many extensions enabled";
+    homepage = "https://asciidoctor.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/gemset.nix b/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/gemset.nix
new file mode 100644
index 000000000000..ac3fb75898fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor-with-extensions/gemset.nix
@@ -0,0 +1,571 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  afm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  Ascii85 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ds4v9xgsyvijnlflak4dzf1qwmda9yd5bv8jwsb56nngd399rlw";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  asciidoctor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yblqlbix3is5ihiqrpbfazb44in7ichfkjzdbsqibp48paanpl3";
+      type = "gem";
+    };
+    version = "2.0.20";
+  };
+  asciidoctor-bibtex = {
+    dependencies = ["asciidoctor" "bibtex-ruby" "citeproc-ruby" "csl-styles" "latex-decode"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fx80bpykixvnlscyz2c4dnjr1063r5ar7j1zn2977vsr8fi8ial";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  asciidoctor-diagram = {
+    dependencies = ["asciidoctor" "asciidoctor-diagram-ditaamini" "asciidoctor-diagram-plantuml" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j6622x9525xbshvbds4gkavvy72lqjqq1jw9flljr8vvsv7xjcs";
+      type = "gem";
+    };
+    version = "2.2.11";
+  };
+  asciidoctor-diagram-ditaamini = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13h65bfbq7hc7z3kqn0m28w9c6ap7fikpjcvsdga6jg01slb4c56";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  asciidoctor-diagram-plantuml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c1pz97fvc0hwvh0by5i682mxnwngqpxb5hp85fly9k8q9hb2hwg";
+      type = "gem";
+    };
+    version = "1.2023.10";
+  };
+  asciidoctor-epub3 = {
+    dependencies = ["asciidoctor" "gepub" "mime-types"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05lylv2k18vcnf3647n47zdqxpa70bg16znzn252ymp8say25zzg";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+  asciidoctor-html5s = {
+    dependencies = ["asciidoctor" "thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zfbfcqyrsk8bnd526ang3b4j3m5pbns7x3fdxarrm8vv1qplss1";
+      type = "gem";
+    };
+    version = "0.5.1";
+  };
+  asciidoctor-mathematical = {
+    dependencies = ["asciidoctor" "asciimath" "mathematical"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lxfq7qn3ql642pva6jh3h1abm9j9daxg5icfn1h73k6cjsmcisp";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  asciidoctor-multipage = {
+    dependencies = ["asciidoctor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c72ys845dvcfdrgmkzk3zx6d2f1vh8q8fnvyp4rwy6qcvhpjg4d";
+      type = "gem";
+    };
+    version = "0.0.16";
+  };
+  asciidoctor-pdf = {
+    dependencies = ["asciidoctor" "concurrent-ruby" "matrix" "prawn" "prawn-icon" "prawn-svg" "prawn-table" "prawn-templates" "treetop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19c98a6riqhxxlc7kmksjslnyxdjp106ppsqy1vdbkjb39zfign3";
+      type = "gem";
+    };
+    version = "2.3.9";
+  };
+  asciidoctor-reducer = {
+    dependencies = ["asciidoctor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1708fi4bxjpkdszm6a4naa0qcsl0vqnhcklryn2sysl24zaz07h5";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  asciidoctor-revealjs = {
+    dependencies = ["asciidoctor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xh8ax5pv7cc9wa4sx0njpyj20gzfbhramca31qwldgi6hwk4wm8";
+      type = "gem";
+    };
+    version = "5.0.1";
+  };
+  asciimath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ny2qql3lgh7gx54psji2lm4mmbwyiwy00a17w26rjyh6cy55491";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  bibtex-ruby = {
+    dependencies = ["latex-decode"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0adh2x935r69nm8qmns5fjsjw034xlyaqddzza2jr2npvf41g34r";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  citeproc = {
+    dependencies = ["namae"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13vl5sjmksk5a8kjcqnjxh7kn9gn1n4f9p1rvqfgsfhs54p0m6l2";
+      type = "gem";
+    };
+    version = "1.0.10";
+  };
+  citeproc-ruby = {
+    dependencies = ["citeproc" "csl"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8ahyhhmdinl4kcyv51r74ipnclmfyz4zjv366dns8v49n5vkk3";
+      type = "gem";
+    };
+    version = "1.1.14";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  csl = {
+    dependencies = ["namae" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n8iqmzvvqy2b1wfr4c7yj28x4z3zgm36628y8ybl49dgnmjycrk";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  csl-styles = {
+    dependencies = ["csl"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l29qlk7i74088fpba5iqhhgiqkj7glcmc42nbmvgqysx577nag8";
+      type = "gem";
+    };
+    version = "1.0.1.11";
+  };
+  css_parser = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04q1vin8slr3k8mp76qz0wqgap6f9kdsbryvgfq9fljhrm463kpj";
+      type = "gem";
+    };
+    version = "1.14.0";
+  };
+  gepub = {
+    dependencies = ["nokogiri" "rubyzip"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08fny807zd4700f263ckc76bladjipsniyk3clv8a7x76x3fqshx";
+      type = "gem";
+    };
+    version = "1.0.15";
+  };
+  hashery = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qj8815bf7q6q7llm5rzdz279gzmpqmqqicxnzv066a020iwqffj";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  latex-decode = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y5xn3zwghpqr6lvs4s0mn5knms8zw3zk7jb58zkkiagb386nq72";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  mathematical = {
+    dependencies = ["ruby-enum"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05mn68gxhfa37qsnzsmdqaa005hf511j5lga76qsrad2gcnhan1b";
+      type = "gem";
+    };
+    version = "1.6.14";
+  };
+  matrix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h2cgkpzkh3dd0flnnwfq6f3nl2b1zff9lvqz8xs853ssv5kq23i";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s95nyppk5wrpfgqrzf6f00g7nk0662zmxm4mr2vbdbl83q3k72x";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17zdim7kzrh5j8c97vjqp4xp78wbyz7smdp4hi5iyzk0s9imdn5a";
+      type = "gem";
+    };
+    version = "3.2023.0808";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02mj8mpd6ck5gpcnsimx5brzggw5h5mmmpq2djdypfq16wcw82qq";
+      type = "gem";
+    };
+    version = "2.8.4";
+  };
+  namae = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1j3nl1klkx3gymrdxfc1hlq4a8qlvhhl9aj5v1v08b9fz27sky0l";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k9w2z0953mnjrsji74cshqqp08q7m1r6zhadw1w0g34xzjh3a74";
+      type = "gem";
+    };
+    version = "1.15.4";
+  };
+  pdf-core = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fz0yj4zrlii2j08kaw11j769s373ayz8jrdhxwwjzmm28pqndjg";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  pdf-reader = {
+    dependencies = ["Ascii85" "afm" "hashery" "ruby-rc4" "ttfunk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09sx25jpnip2sp6wh5sn5ad7za78rfi95qp5iiczfh43z4jqa8q3";
+      type = "gem";
+    };
+    version = "2.11.0";
+  };
+  polyglot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  prawn = {
+    dependencies = ["pdf-core" "ttfunk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g9avv2rprsjisdk137s9ljr05r7ajhm78hxa1vjsv0jyx22f1l2";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  prawn-icon = {
+    dependencies = ["prawn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xdnjik5zinnkjavmybbh2s52wzcpb8hzaqckiv0mxp0vs0x9j6s";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  prawn-svg = {
+    dependencies = ["css_parser" "prawn" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mbxzw7r7hv43db9422flc24ib9d8bdy1nasbni2h998jc5a5lb6";
+      type = "gem";
+    };
+    version = "0.32.0";
+  };
+  prawn-table = {
+    dependencies = ["prawn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  prawn-templates = {
+    dependencies = ["pdf-reader" "prawn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w9irn3rllm992c6j7fsx81gg539i7yy8zfddyw7q53hnlys0yhi";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n9j7mczl15r3kwqrah09cxj8hxdfawiqxa60kga2bmxl9flfz9k";
+      type = "gem";
+    };
+    version = "5.0.3";
+  };
+  "pygments.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "080kb51l3m0n7xbbzmlcy78wsi03wr995v932v3b6lf6xa6nq8rg";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11v3l46mwnlzlc371wr3x6yylpgafgwdf0q7hc7c1lzx6r414r5g";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19drl3x8fw65v3mpy7fk3cf3dfrywz5alv98n2rm4pp04vdn71lw";
+      type = "gem";
+    };
+    version = "4.1.3";
+  };
+  ruby-enum = {
+    dependencies = ["i18n"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pys90hxylhyg969iw9lz3qai5lblf8xwbdg1g5aj52731a9k83p";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  ruby-rc4 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vci475258mmbvsdqkmqadlwn6gj9m01sp7b5a3zd90knil1k00";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0adc8qblz8ii668r3rksjx83p675iryh52rvdvysimx2hkbasj7d";
+      type = "gem";
+    };
+    version = "1.6.12";
+  };
+  ttfunk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15iaxz9iak5643bq2bc0jkbjv8w2zn649lxgvh5wg48q9d4blw13";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile b/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile
new file mode 100644
index 000000000000..a485cb2e12c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile
@@ -0,0 +1,7 @@
+source 'https://rubygems.org'
+gem 'asciidoctor'
+gem 'asciidoctor-pdf'
+gem 'coderay'
+gem 'pygments.rb'
+gem 'rouge'
+gem 'tilt'
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile.lock b/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile.lock
new file mode 100644
index 000000000000..96da0d8178b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile.lock
@@ -0,0 +1,69 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    Ascii85 (1.1.0)
+    addressable (2.8.5)
+      public_suffix (>= 2.0.2, < 6.0)
+    afm (0.2.2)
+    asciidoctor (2.0.20)
+    asciidoctor-pdf (2.3.9)
+      asciidoctor (~> 2.0)
+      concurrent-ruby (~> 1.1)
+      matrix (~> 0.4)
+      prawn (~> 2.4.0)
+      prawn-icon (~> 3.0.0)
+      prawn-svg (~> 0.32.0)
+      prawn-table (~> 0.2.0)
+      prawn-templates (~> 0.1.0)
+      treetop (~> 1.6.0)
+    coderay (1.1.3)
+    concurrent-ruby (1.2.2)
+    css_parser (1.14.0)
+      addressable
+    hashery (2.1.2)
+    matrix (0.4.2)
+    pdf-core (0.9.0)
+    pdf-reader (2.11.0)
+      Ascii85 (~> 1.0)
+      afm (~> 0.2.1)
+      hashery (~> 2.0)
+      ruby-rc4
+      ttfunk
+    polyglot (0.3.5)
+    prawn (2.4.0)
+      pdf-core (~> 0.9.0)
+      ttfunk (~> 1.7)
+    prawn-icon (3.0.0)
+      prawn (>= 1.1.0, < 3.0.0)
+    prawn-svg (0.32.0)
+      css_parser (~> 1.6)
+      prawn (>= 0.11.1, < 3)
+      rexml (~> 3.2)
+    prawn-table (0.2.2)
+      prawn (>= 1.3.0, < 3.0.0)
+    prawn-templates (0.1.2)
+      pdf-reader (~> 2.0)
+      prawn (~> 2.2)
+    public_suffix (5.0.3)
+    pygments.rb (2.4.0)
+    rexml (3.2.6)
+    rouge (4.1.3)
+    ruby-rc4 (0.1.5)
+    tilt (2.2.0)
+    treetop (1.6.12)
+      polyglot (~> 0.3)
+    ttfunk (1.7.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  asciidoctor
+  asciidoctor-pdf
+  coderay
+  pygments.rb
+  rouge
+  tilt
+
+BUNDLED WITH
+   2.4.17
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor/default.nix b/nixpkgs/pkgs/tools/typesetting/asciidoctor/default.nix
new file mode 100644
index 000000000000..5f78c12508d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, bundlerApp
+, bundlerUpdateScript
+}:
+
+bundlerApp {
+  pname = "asciidoctor";
+  gemdir = ./.;
+
+  exes = [
+    "asciidoctor"
+    "asciidoctor-pdf"
+  ];
+
+  passthru = {
+    updateScript = bundlerUpdateScript "asciidoctor";
+  };
+
+  meta = with lib; {
+    description = "A faster Asciidoc processor written in Ruby";
+    homepage = "https://asciidoctor.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gpyh nicknovitski ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor/gemset.nix b/nixpkgs/pkgs/tools/typesetting/asciidoctor/gemset.nix
new file mode 100644
index 000000000000..9ae8ea567f00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor/gemset.nix
@@ -0,0 +1,272 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  afm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  Ascii85 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ds4v9xgsyvijnlflak4dzf1qwmda9yd5bv8jwsb56nngd399rlw";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  asciidoctor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yblqlbix3is5ihiqrpbfazb44in7ichfkjzdbsqibp48paanpl3";
+      type = "gem";
+    };
+    version = "2.0.20";
+  };
+  asciidoctor-pdf = {
+    dependencies = ["asciidoctor" "concurrent-ruby" "matrix" "prawn" "prawn-icon" "prawn-svg" "prawn-table" "prawn-templates" "treetop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19c98a6riqhxxlc7kmksjslnyxdjp106ppsqy1vdbkjb39zfign3";
+      type = "gem";
+    };
+    version = "2.3.9";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  css_parser = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04q1vin8slr3k8mp76qz0wqgap6f9kdsbryvgfq9fljhrm463kpj";
+      type = "gem";
+    };
+    version = "1.14.0";
+  };
+  hashery = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qj8815bf7q6q7llm5rzdz279gzmpqmqqicxnzv066a020iwqffj";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  matrix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h2cgkpzkh3dd0flnnwfq6f3nl2b1zff9lvqz8xs853ssv5kq23i";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  pdf-core = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fz0yj4zrlii2j08kaw11j769s373ayz8jrdhxwwjzmm28pqndjg";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  pdf-reader = {
+    dependencies = ["Ascii85" "afm" "hashery" "ruby-rc4" "ttfunk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09sx25jpnip2sp6wh5sn5ad7za78rfi95qp5iiczfh43z4jqa8q3";
+      type = "gem";
+    };
+    version = "2.11.0";
+  };
+  polyglot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  prawn = {
+    dependencies = ["pdf-core" "ttfunk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g9avv2rprsjisdk137s9ljr05r7ajhm78hxa1vjsv0jyx22f1l2";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  prawn-icon = {
+    dependencies = ["prawn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xdnjik5zinnkjavmybbh2s52wzcpb8hzaqckiv0mxp0vs0x9j6s";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  prawn-svg = {
+    dependencies = ["css_parser" "prawn" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mbxzw7r7hv43db9422flc24ib9d8bdy1nasbni2h998jc5a5lb6";
+      type = "gem";
+    };
+    version = "0.32.0";
+  };
+  prawn-table = {
+    dependencies = ["prawn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  prawn-templates = {
+    dependencies = ["pdf-reader" "prawn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w9irn3rllm992c6j7fsx81gg539i7yy8zfddyw7q53hnlys0yhi";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n9j7mczl15r3kwqrah09cxj8hxdfawiqxa60kga2bmxl9flfz9k";
+      type = "gem";
+    };
+    version = "5.0.3";
+  };
+  "pygments.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "080kb51l3m0n7xbbzmlcy78wsi03wr995v932v3b6lf6xa6nq8rg";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19drl3x8fw65v3mpy7fk3cf3dfrywz5alv98n2rm4pp04vdn71lw";
+      type = "gem";
+    };
+    version = "4.1.3";
+  };
+  ruby-rc4 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vci475258mmbvsdqkmqadlwn6gj9m01sp7b5a3zd90knil1k00";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bmjgbv8158klwp2r3klxjwaj93nh1sbl4xvj9wsha0ic478avz7";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0adc8qblz8ii668r3rksjx83p675iryh52rvdvysimx2hkbasj7d";
+      type = "gem";
+    };
+    version = "1.6.12";
+  };
+  ttfunk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15iaxz9iak5643bq2bc0jkbjv8w2zn649lxgvh5wg48q9d4blw13";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctorj/default.nix b/nixpkgs/pkgs/tools/typesetting/asciidoctorj/default.nix
new file mode 100644
index 000000000000..fd2bc2eabdb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctorj/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchzip, jdk, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "asciidoctorj";
+  version = "2.5.11";
+
+  src = fetchzip {
+    url = "mirror://maven/org/asciidoctor/${pname}/${version}/${pname}-${version}-bin.zip";
+    sha256 = "sha256-Eagq8a6xTMonaiyhuuHc47pD8gE6jqWx7cZ3xJykmeQ=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    rm bin/asciidoctorj.bat
+    cp -r . $out
+    wrapProgram $out/bin/asciidoctorj \
+      --prefix JAVA_HOME : ${jdk}
+  '';
+
+  meta = with lib; {
+    description = "Official library for running Asciidoctor on the JVM";
+    longDescription = ''
+      AsciidoctorJ is the official library for running Asciidoctor on the JVM.
+      Using AsciidoctorJ, you can convert AsciiDoc content or analyze the
+      structure of a parsed AsciiDoc document from Java and other JVM
+      languages.
+    '';
+    homepage = "https://asciidoctor.org/docs/asciidoctorj/";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moaxcp ];
+    mainProgram = "asciidoctorj";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/bibclean/default.nix b/nixpkgs/pkgs/tools/typesetting/bibclean/default.nix
new file mode 100644
index 000000000000..f51a41e5f343
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/bibclean/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "bibclean";
+  version = "3.07";
+
+  src = fetchurl {
+    url = "http://ftp.math.utah.edu/pub/bibclean/bibclean-${version}.tar.xz";
+    sha256 = "sha256-kZM2eC6ePCBOYPVkhf0fjdZ562IvyP0fSDNZXuEBkaY=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile.in --replace man/man1 share/man/man1
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "Prettyprint and syntax check BibTeX and Scribe bibliography data base files";
+    homepage = "http://ftp.math.utah.edu/pub/bibclean";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/biber-ms/default.nix b/nixpkgs/pkgs/tools/typesetting/biber-ms/default.nix
new file mode 100644
index 000000000000..9cf2bbe014f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/biber-ms/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, perlPackages, shortenPerlShebang, texlive }:
+
+let
+  biberSource = texlive.pkgs.biber-ms.texsource;
+  # missing test file
+  multiscriptBltxml = (fetchFromGitHub {
+    owner = "plk";
+    repo = "biber";
+    rev = "e8d056433063add7800f24589de76f89c4b64c20";
+    hash = "sha256-QnN6Iyw6iOjfTX7DLVptsfAO/QNn9vOIk5IZlI15EvQ=";
+  }) + "/t/tdata/multiscript.bltxml";
+in
+
+perlPackages.buildPerlModule {
+  inherit (biberSource) pname version;
+
+  src = "${biberSource}/source/bibtex/biber-ms/biblatex-biber-ms.tar.gz";
+
+  # from META.json
+  # (aliases in /* */ are replaced by the actual dependencies to prevent
+  # evaluation errors with config.allowAliases = false)
+  buildInputs = with perlPackages; [
+    # build deps
+    ConfigAutoConf ExtUtilsLibBuilder FileWhich TestDifferences
+    /*TestMore=TestSimple=null*/
+    # runtime deps
+    BusinessISBN BusinessISMN BusinessISSN ClassAccessor DataCompare DataDump
+    DataUniqid DateTimeCalendarJulian DateTimeFormatBuilder EncodeEUCJPASCII
+    EncodeHanExtra EncodeJIS2K EncodeLocale FileSlurper IOString IPCRun3
+    LWPProtocolHttps LWP/*LWPUserAgent*/ libwwwperl LinguaTranslit ListAllUtils
+    ListMoreUtils ListMoreUtilsXS LogLog4perl MozillaCA ParseRecDescent
+    PerlIOutf8_strict RegexpCommon SortKey TextBalanced TextBibTeX TextCSV
+    TextCSV_XS TextRoman URI UnicodeLineBreak XMLLibXML XMLLibXMLSimple
+    XMLLibXSLT XMLWriter autovivification
+  ];
+  nativeBuildInputs = lib.optional stdenv.isDarwin shortenPerlShebang;
+
+  preConfigure = ''
+    cp '${multiscriptBltxml}' t/tdata/multiscript.bltxml
+  '';
+
+  postInstall = ''
+    mv "$out"/bin/biber{,-ms}
+  '' + lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang "$out"/bin/biber-ms
+  '';
+
+  meta = with lib; {
+    description = "Backend for BibLaTeX (multiscript version)";
+    license = biberSource.meta.license;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.xworld21 ];
+    mainProgram = "biber-ms";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/biber/default.nix b/nixpkgs/pkgs/tools/typesetting/biber/default.nix
new file mode 100644
index 000000000000..08038c41377f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/biber/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, perlPackages, shortenPerlShebang, texlive }:
+
+let
+  biberSource = texlive.pkgs.biber.texsource;
+in
+
+perlPackages.buildPerlModule {
+  inherit (biberSource) pname version;
+
+  src = "${biberSource}/source/bibtex/biber/biblatex-biber.tar.gz";
+
+  buildInputs = with perlPackages; [
+    autovivification BusinessISBN BusinessISMN BusinessISSN ConfigAutoConf
+    DataCompare DataDump DateSimple EncodeEUCJPASCII EncodeHanExtra EncodeJIS2K
+    DateTime DateTimeFormatBuilder DateTimeCalendarJulian
+    ExtUtilsLibBuilder FileSlurper FileWhich IPCRun3 LogLog4perl LWPProtocolHttps ListAllUtils
+    ListMoreUtils MozillaCA ParseRecDescent IOString ReadonlyXS RegexpCommon TextBibTeX
+    UnicodeLineBreak URI XMLLibXMLSimple XMLLibXSLT XMLWriter
+    ClassAccessor TextCSV TextCSV_XS TextRoman DataUniqid LinguaTranslit SortKey
+    TestDifferences
+    PerlIOutf8_strict
+  ];
+  nativeBuildInputs = lib.optional stdenv.isDarwin shortenPerlShebang;
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/biber
+  '';
+
+  meta = with lib; {
+    description = "Backend for BibLaTeX";
+    license = biberSource.meta.license;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.ttuegel ];
+    mainProgram = "biber";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/biblatex-check/default.nix b/nixpkgs/pkgs/tools/typesetting/biblatex-check/default.nix
new file mode 100644
index 000000000000..beff04156190
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/biblatex-check/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "biblatex-check";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "Pezmc";
+    repo = "BibLatex-Check";
+    rev = "v${version}";
+    sha256 = "sha256-8oHX56+kRWWl8t22DqLAFinjPngRMo3vXxXuVXBwutM=";
+  };
+
+  buildInputs = [ python3 ];
+
+  strictDeps = true;
+
+  installPhase = ''
+    install -Dm755 biblatex_check.py $out/bin/biblatex-check
+  '';
+
+  meta = with lib; {
+    description = "Python2/3 script for checking BibLatex .bib files";
+    homepage = "https://github.com/Pezmc/BibLatex-Check";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "biblatex-check";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/bibtex-tidy/default.nix b/nixpkgs/pkgs/tools/typesetting/bibtex-tidy/default.nix
new file mode 100644
index 000000000000..7aeaf13fb02a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/bibtex-tidy/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "bibtex-tidy";
+  version = "1.11.0";
+
+  src = fetchFromGitHub {
+    owner = "FlamingTempura";
+    repo = "bibtex-tidy";
+    rev = "v${version}";
+    hash = "sha256-VjQuMQr3OJgjgX6FdH/C4mehf8H7XjDZ9Rxs92hyQVo=";
+  };
+
+  patches = [
+    # downloads Google fonts during `npm run build`
+    ./remove-google-font-loader.patch
+  ];
+
+  npmDepsHash = "sha256-u2lyG95F00S/bvsVwu0hIuUw2UZYQWFakCF31LIijSU=";
+
+  env = {
+    PUPPETEER_SKIP_DOWNLOAD = true;
+  };
+
+  meta = {
+    changelog = "https://github.com/FlamingTempura/bibtex-tidy/blob/${src.rev}/CHANGELOG.md";
+    description = "Cleaner and Formatter for BibTeX files";
+    homepage = "https://github.com/FlamingTempura/bibtex-tidy";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ bertof ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/bibtex-tidy/remove-google-font-loader.patch b/nixpkgs/pkgs/tools/typesetting/bibtex-tidy/remove-google-font-loader.patch
new file mode 100644
index 000000000000..79c6850cf6cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/bibtex-tidy/remove-google-font-loader.patch
@@ -0,0 +1,52 @@
+diff --git a/build.ts b/build.ts
+index ae4e350..3498ae7 100644
+--- a/build.ts
++++ b/build.ts
+@@ -312,7 +312,6 @@ async function buildWebBundle() {
+ 		target: ['esnext'],
+ 		plugins: [
+ 			sveltePlugin({ preprocess: autoPreprocess() }),
+-			googleFontPlugin,
+ 			regexpuPlugin,
+ 		],
+ 	});
+@@ -344,7 +343,6 @@ async function serveWeb() {
+ 				preprocess: autoPreprocess(),
+ 				compilerOptions: { enableSourcemap: true },
+ 			}),
+-			googleFontPlugin,
+ 		],
+ 	});
+ 	const server = await ctx.serve({ servedir: WEB_PATH });
+@@ -375,31 +373,6 @@ const regexpuPlugin: Plugin = {
+ 	},
+ };
+ 
+-// Downloads google fonts and injects them as base64 urls into bundle css
+-const googleFontPlugin: Plugin = {
+-	name: 'google-font-loader',
+-	setup(build) {
+-		build.onResolve({ filter: /^https?:\/\/fonts\./ }, (args) => ({
+-			path: args.path,
+-			namespace: 'http-url',
+-		}));
+-		build.onLoad(
+-			{ filter: /.*/, namespace: 'http-url' },
+-			async (args): Promise<OnLoadResult> => {
+-				const res = await fetch(args.path, {
+-					headers: {
+-						// ensures google responds with woff2 fonts
+-						'User-Agent': 'Mozilla/5.0 Firefox/90.0',
+-					},
+-				});
+-				const contents = Buffer.from(await res.arrayBuffer());
+-				const loader = args.path.endsWith('.woff2') ? 'dataurl' : 'css';
+-				return { contents, loader };
+-			}
+-		);
+-	},
+-};
+-
+ /**
+  * swc converts js syntax to support older browsers. ESBuild can kinda do this
+  * but only for more recent browsers. swc is also far easier to configure than
diff --git a/nixpkgs/pkgs/tools/typesetting/carbon-now-cli/default.nix b/nixpkgs/pkgs/tools/typesetting/carbon-now-cli/default.nix
new file mode 100644
index 000000000000..7d35283ab74c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/carbon-now-cli/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "carbon-now-cli";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mixn";
+    repo = "carbon-now-cli";
+    rev = "v${version}";
+    hash = "sha256-2fqZdPkVM3qBZKacBv9dX99Q9WnM5m7OpChG2n1TnXg=";
+  };
+
+  npmDepsHash = "sha256-UgrgnaA+GXRQT3dtAoMq6tsZZ2gV1CQNoYG58IuSZUM=";
+
+  postPatch = ''
+    substituteInPlace package.json \
+      --replace "bundle/cli.js" "dist/cli.js" \
+      --replace "trash " "rm -rf " \
+      --replace "npx playwright install --with-deps" "true"
+  '';
+
+  env = {
+    PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = 1;
+  };
+
+  meta = {
+    description = "Beautiful images of your code — from right inside your terminal";
+    homepage = "https://github.com/mixn/carbon-now-cli";
+    license = lib.licenses.mit;
+    mainProgram = "carbon-now";
+    maintainers = with lib.maintainers; [ rmcgibbo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/coq2html/default.nix b/nixpkgs/pkgs/tools/typesetting/coq2html/default.nix
new file mode 100644
index 000000000000..69b3bc0ff239
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/coq2html/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, ocaml }:
+
+stdenv.mkDerivation  rec {
+  pname = "coq2html";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "xavierleroy";
+    repo = "coq2html";
+    rev = "v${version}";
+    hash = "sha256-2J9uETDt+P+t4E9KhTIypA4MQpTCCxYmR6FYF30RqKk=";
+  };
+
+  nativeBuildInputs = [ ocaml ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp coq2html $out/bin
+  '';
+
+  meta = with lib; {
+    description = "HTML documentation generator for Coq source files";
+    longDescription = ''
+      coq2html is an HTML documentation generator for Coq source files. It is
+      an alternative to the standard coqdoc documentation generator
+      distributed along with Coq. The major feature of coq2html is its ability
+      to fold proof scripts: in the generated HTML, proof scripts are
+      initially hidden, but can be revealed one by one by clicking on the
+      "Proof" keyword.
+    '';
+    homepage = "https://github.com/xavierleroy/coq2html";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jwiegley siraben ];
+    platforms = platforms.unix;
+    mainProgram = "coq2html";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/djvu2pdf/default.nix b/nixpkgs/pkgs/tools/typesetting/djvu2pdf/default.nix
new file mode 100644
index 000000000000..9396d43b3962
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/djvu2pdf/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, makeWrapper, fetchurl, djvulibre, ghostscript, which }:
+
+stdenv.mkDerivation rec {
+  version = "0.9.2";
+  pname = "djvu2pdf";
+
+  src = fetchurl {
+    url = "http://0x2a.at/site/projects/djvu2pdf/djvu2pdf-${version}.tar.gz";
+    sha256 = "0v2ax30m7j1yi4m02nzn9rc4sn4vzqh5vywdh96r64j4pwvn5s5g";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -p djvu2pdf $out/bin
+    wrapProgram $out/bin/djvu2pdf --prefix PATH : ${lib.makeBinPath [ ghostscript djvulibre which ]}
+
+    mkdir -p $out/man/man1
+    cp -p djvu2pdf.1.gz $out/man/man1
+  '';
+
+  meta = {
+    description = "Convert DjVu files to PDF files";
+    homepage = "https://0x2a.at/site/projects/djvu2pdf/";
+    license = lib.licenses.gpl1Only;
+    platforms = lib.platforms.all;
+    mainProgram = "djvu2pdf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/docbook2odf/default.nix b/nixpkgs/pkgs/tools/typesetting/docbook2odf/default.nix
new file mode 100644
index 000000000000..7608fb1228ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/docbook2odf/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, perlPackages, makeWrapper, zip, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "docbook2odf";
+  version = "0.244";
+
+  src = fetchurl {
+    url = "http://open.comsultia.com/docbook2odf/dwn/docbook2odf-${version}.tar.gz";
+    sha256 = "10k44g0qqa37k30pfj8vz95j6zdzz0nmnqjq1lyahfs2h4glzgwb";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ];
+
+  installPhase = ''
+    mkdir -p "$out/bin/"
+    mkdir -p "$out/share/docbook2odf/"
+    mkdir -p "$out/share/doc/docbook2odf/"
+    mkdir -p "$out/share/man/man1/"
+    mkdir -p "$out/share/applications/"
+
+    cp utils/docbook2odf "$out/bin/"
+    cp docs/docbook2odf.1 "$out/share/man/man1/"
+    cp -r examples/ "$out/share/doc/docbook2odf/"
+    cp -r xsl/ "$out/share/docbook2odf/"
+    cp bindings/desktop/docbook2odf.desktop "$out/share/applications/"
+
+    sed -i "s|/usr/share/docbook2odf|$out/share/docbook2odf|" "$out/bin/docbook2odf"
+
+    wrapProgram "$out/bin/docbook2odf" \
+      --prefix PATH : "${lib.makeBinPath [ zip libxslt ]}" \
+      --prefix PERL5PATH : "${perlPackages.makePerlPath [ perlPackages.ImageMagick ]}"
+  '';
+
+  meta = with lib; {
+    description = "Convert DocBook to OpenDocument Format (ODF)";
+    longDescription = ''
+      Docbook2odf is a toolkit that automatically converts DocBook to OASIS
+      OpenDocument (ODF, the ISO standardized format used for texts,
+      spreadsheets and presentations). Conversion is based on a XSLT which
+      makes it easy to convert DocBook->ODF, ODT, ODS and ODP as all these
+      documents are XML based.
+    '';
+    homepage = "http://open.comsultia.com/docbook2odf/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "docbook2odf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/docbook2x/db2x_texixml-to-stdout.patch b/nixpkgs/pkgs/tools/typesetting/docbook2x/db2x_texixml-to-stdout.patch
new file mode 100644
index 000000000000..8daa5c87a661
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/docbook2x/db2x_texixml-to-stdout.patch
@@ -0,0 +1,15 @@
+--- docbook2X-0.8.8/perl/db2x_texixml.pl	2006-04-20 05:02:31.000000000 +0200
++++ docbook2X-0.8.8/perl/db2x_texixml.pl	2008-03-12 15:36:55.000000000 +0100
+@@ -432,8 +432,12 @@ sub texi_openfile {
+                 $openstr = '>-';
+             }
+         } else {
++	    if(not $self->{options}->{'to-stdout'}) {
+             $openstr .= '> ' . shell_quote($filename);
+             print "$filename\n"
+                 if $self->{options}->{'list-files'};
++	    } else {
++		$openstr = '>-';
++	    }
+         }
+     }
diff --git a/nixpkgs/pkgs/tools/typesetting/docbook2x/default.nix b/nixpkgs/pkgs/tools/typesetting/docbook2x/default.nix
new file mode 100644
index 000000000000..3fa76f56d0f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/docbook2x/default.nix
@@ -0,0 +1,59 @@
+{ fetchurl, lib, stdenv, texinfo, perlPackages
+, groff, libxml2, libxslt, gnused, libiconv, opensp
+, docbook_xml_dtd_43, bash
+, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "docbook2X";
+  version = "0.8.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/docbook2x/docbook2X-${version}.tar.gz";
+    sha256 = "0ifwzk99rzjws0ixzimbvs83x6cxqk1xzmg84wa1p7bs6rypaxs0";
+  };
+
+  # This patch makes sure that `docbook2texi --to-stdout' actually
+  # writes its output to stdout instead of creating a file.
+  patches = [ ./db2x_texixml-to-stdout.patch ];
+
+  nativeBuildInputs = [ makeWrapper perlPackages.perl texinfo libxslt ];
+  buildInputs = [ groff libxml2 opensp libiconv bash ]
+    ++ (with perlPackages; [ perl XMLSAX XMLParser XMLNamespaceSupport ]);
+
+  postConfigure = ''
+    # Broken substitution is used for `perl/config.pl', which leaves literal
+    # `$prefix' in it.
+    substituteInPlace "perl/config.pl"       \
+      --replace '${"\$" + "{prefix}"}' "$out"
+  '';
+
+  doCheck = false; # fails a lot of tests
+
+  postInstall = ''
+    perlPrograms="db2x_manxml db2x_texixml db2x_xsltproc
+                  docbook2man docbook2texi";
+    for i in $perlPrograms
+    do
+      # XXX: We work around the fact that `wrapProgram' doesn't support
+      # spaces below by inserting escaped backslashes.
+      wrapProgram $out/bin/$i \
+        --prefix PERL5LIB : ${with perlPackages; makeFullPerlPath [XMLSAX XMLParser XMLNamespaceSupport]} \
+        --prefix XML_CATALOG_FILES "\ " \
+        "$out/share/docbook2X/dtd/catalog.xml\ $out/share/docbook2X/xslt/catalog.xml\ ${docbook_xml_dtd_43}/xml/dtd/docbook/catalog.xml"
+    done
+
+    wrapProgram $out/bin/sgml2xml-isoent --prefix PATH : \
+      "${gnused}/bin"
+  '';
+
+  meta = with lib; {
+    longDescription = ''
+      docbook2X is a software package that converts DocBook documents
+      into the traditional Unix man page format and the GNU Texinfo
+      format.
+    '';
+    license = licenses.mit;
+    homepage = "https://docbook2x.sourceforge.net/";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/fop/default.nix b/nixpkgs/pkgs/tools/typesetting/fop/default.nix
new file mode 100644
index 000000000000..254f29d27a78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/fop/default.nix
@@ -0,0 +1,59 @@
+{ fetchurl, lib, stdenv, ant, jdk, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "fop";
+  version = "2.8";
+
+  src = fetchurl {
+    url = "mirror://apache/xmlgraphics/fop/source/${pname}-${version}-src.tar.gz";
+    sha256 = "sha256-b7Av17wu6Ar/npKOiwYqzlvBFSIuXTpqTacM1sxtBvc=";
+  };
+
+  buildInputs = [ ant jdk ];
+
+  # build only the "package" target, which generates the fop command.
+  buildPhase = ''
+     export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
+     ant -f fop/build.xml package
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib $out/share/doc/fop
+    cp fop/build/*.jar fop/lib/*.jar $out/lib/
+    cp -r README fop/examples/ $out/share/doc/fop/
+
+    # There is a fop script in the source archive, but it has many impurities.
+    # Instead of patching out 90 % of the script, we write our own.
+    cat > "$out/bin/fop" <<EOF
+    #!${runtimeShell}
+    java_exec_args="-Djava.awt.headless=true"
+    exec ${jdk.jre}/bin/java \$java_exec_args -classpath "$out/lib/*" org.apache.fop.cli.Main "\$@"
+    EOF
+    chmod a+x $out/bin/fop
+  '';
+
+  meta = with lib; {
+    description = "XML formatter driven by XSL Formatting Objects (XSL-FO)";
+    longDescription = ''
+      FOP is a Java application that reads a formatting object tree and then
+      turns it into a wide variety of output presentations (including AFP, PCL,
+      PDF, PNG, PostScript, RTF, TIFF, and plain text), or displays the result
+      on-screen.
+
+      The formatting object tree can be in the form of an XML document (output
+      by an XSLT engine like xalan) or can be passed in memory as a DOM
+      Document or (in the case of xalan) SAX events.
+
+      This package contains the fop command line tool.
+    '';
+    homepage = "https://xmlgraphics.apache.org/fop/";
+    license = licenses.asl20;
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # source bundles dependencies as jars
+    ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bjornfor ];
+    mainProgram = "fop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/git-latexdiff/default.nix b/nixpkgs/pkgs/tools/typesetting/git-latexdiff/default.nix
new file mode 100644
index 000000000000..e7e4351a2088
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/git-latexdiff/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitLab, git, bash }:
+
+stdenv.mkDerivation rec {
+  version = "1.6.0";
+  pname = "git-latexdiff";
+
+  src = fetchFromGitLab {
+    hash = "sha256-DMoGEbCBuqUGjbna3yDpD4WNTikPudYRD4Wy1pPG2mw=";
+    rev = version;
+    repo = "git-latexdiff";
+    owner = "git-latexdiff";
+  };
+
+  buildInputs = [ git bash ];
+
+  dontBuild = true;
+
+  patches = [ ./version-test.patch ];
+
+  postPatch = ''
+    substituteInPlace git-latexdiff \
+      --replace "@GIT_LATEXDIFF_VERSION@" "v${version}"
+    patchShebangs git-latexdiff
+  '';
+
+  installPhase = ''
+    mkdir -p $prefix/bin
+    mv git-latexdiff $prefix/bin
+    chmod +x $prefix/bin/git-latexdiff
+  '';
+
+  meta = with lib; {
+    description = "View diff on LaTeX source files on the generated PDF files";
+    homepage = "https://gitlab.com/git-latexdiff/git-latexdiff";
+    maintainers = [ ];
+    license = licenses.bsd3; # https://gitlab.com/git-latexdiff/git-latexdiff/issues/9
+    platforms = platforms.unix;
+    mainProgram = "git-latexdiff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/git-latexdiff/version-test.patch b/nixpkgs/pkgs/tools/typesetting/git-latexdiff/version-test.patch
new file mode 100644
index 000000000000..243bd90f9005
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/git-latexdiff/version-test.patch
@@ -0,0 +1,17 @@
+Fix for https://gitlab.com/git-latexdiff/git-latexdiff/issues/7
+---
+--- src/git-latexdiff	2016-01-26 14:04:54.338568955 +0100
++++ src/git-latexdiff	2016-01-26 14:40:23.700381943 +0100
+@@ -44,11 +44,7 @@
+ git_latexdiff_version='@GIT_LATEXDIFF_VERSION@'
+
+ git_latexdiff_compute_version () {
+-    if [ "$git_latexdiff_version" = '@GIT_LATEXDIFF''_VERSION@' ]; then
+-	(cd "$(dirname "$0")" && git describe --tags HEAD 2>/dev/null || echo 'Unknown version')
+-    else
+-	echo "$git_latexdiff_version"
+-    fi
++    echo "$git_latexdiff_version"
+ }
+
+ usage () {
diff --git a/nixpkgs/pkgs/tools/typesetting/halibut/default.nix b/nixpkgs/pkgs/tools/typesetting/halibut/default.nix
new file mode 100644
index 000000000000..3429df706d2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/halibut/default.nix
@@ -0,0 +1,22 @@
+{lib, stdenv, fetchurl, cmake, perl}:
+
+stdenv.mkDerivation rec {
+  pname = "halibut";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "https://www.chiark.greenend.org.uk/~sgtatham/halibut/halibut-${version}/halibut-${version}.tar.gz";
+    sha256 = "0ciikn878vivs4ayvwvr63nnhpcg12m8023xv514zxqpdxlzg85a";
+  };
+
+  nativeBuildInputs = [ cmake perl ];
+
+  meta = with lib; {
+    description = "Documentation production system for software manuals";
+    homepage = "https://www.chiark.greenend.org.uk/~sgtatham/halibut/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+    mainProgram = "halibut";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/hayagriva/default.nix b/nixpkgs/pkgs/tools/typesetting/hayagriva/default.nix
new file mode 100644
index 000000000000..03aea70ae6cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/hayagriva/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hayagriva";
+  version = "0.5.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-nXfoPAUU8pDUj8MdpiYbN9ToJbWk4CsUTGehgGDvykg=";
+  };
+
+  cargoHash = "sha256-xKCnHqQn4mNvZ9LBgDnD4VDlUBgRO1SYLmvqq11GFsc=";
+
+  buildFeatures = [ "cli" ];
+
+  checkFlags = [
+    # requires internet access
+    "--skip=try_archive"
+    "--skip=always_archive"
+
+    # requires a separate large repository
+    "--skip=csl::tests::test_csl"
+  ];
+
+  meta = with lib; {
+    description = "Work with references: Literature database management, storage, and citation formatting";
+    homepage = "https://github.com/typst/hayagriva";
+    changelog = "https://github.com/typst/hayagriva/releases/tag/v${version}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "hayagriva";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/hevea/default.nix b/nixpkgs/pkgs/tools/typesetting/hevea/default.nix
new file mode 100644
index 000000000000..f03ee980583f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/hevea/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, ocamlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "hevea";
+  version = "2.36";
+
+  src = fetchurl {
+    url = "https://hevea.inria.fr/distri/hevea-${version}.tar.gz";
+    sha256 = "sha256-XWdZ13AqKVx2oSwbKhoWdUqw7B/+1z/J0LE4tB5yBkg=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = with ocamlPackages; [ ocaml ocamlbuild ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A quite complete and fast LATEX to HTML translator";
+    homepage = "https://hevea.inria.fr/";
+    changelog = "https://github.com/maranget/hevea/raw/v${version}/CHANGES";
+    license = licenses.qpl;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/htmldoc/default.nix b/nixpkgs/pkgs/tools/typesetting/htmldoc/default.nix
new file mode 100644
index 000000000000..da54f7c62970
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/htmldoc/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, testers, fetchFromGitHub, zlib, cups, libpng, libjpeg, SystemConfiguration, Foundation, pkg-config, htmldoc }:
+
+stdenv.mkDerivation rec {
+  pname = "htmldoc";
+  version = "1.9.17";
+  src = fetchFromGitHub {
+    owner = "michaelrsweet";
+    repo = "htmldoc";
+    rev = "v${version}";
+    sha256 = "1qq45l1vxxa970cm0wjvgj0w88hd4vsisa85pf5i54yvfzf11sqw";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ zlib cups libpng libjpeg ]
+    ++ lib.optionals stdenv.isDarwin [ Foundation SystemConfiguration ];
+
+  # do not generate universal binary on Darwin
+  # because it is not supported by Nix's clang
+  postPatch = ''
+    substituteInPlace configure --replace "-arch x86_64 -arch arm64" ""
+  '';
+
+  passthru.tests = testers.testVersion {
+    package = htmldoc;
+    command = "htmldoc --version";
+  };
+
+  meta = with lib; {
+    description = "Converts HTML files to PostScript and PDF";
+    homepage    = "https://michaelrsweet.github.io/htmldoc";
+    changelog   = "https://github.com/michaelrsweet/htmldoc/releases/tag/v${version}";
+    license     = licenses.gpl2Only;
+    maintainers = with maintainers; [ ];
+    platforms   = platforms.unix;
+
+    longDescription = ''
+      HTMLDOC is a program that reads HTML source files or web pages and
+      generates corresponding HTML, PostScript, or PDF files with an optional
+      table of contents.
+    '';
+    mainProgram = "htmldoc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/Gemfile b/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/Gemfile
new file mode 100644
index 000000000000..33585ea850ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'kramdown-asciidoc'
diff --git a/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/Gemfile.lock b/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/Gemfile.lock
new file mode 100644
index 000000000000..c975e23f323c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    kramdown (1.17.0)
+    kramdown-asciidoc (1.0.1)
+      kramdown (~> 1.17.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  kramdown-asciidoc
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/default.nix b/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/default.nix
new file mode 100644
index 000000000000..f3058156848e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/default.nix
@@ -0,0 +1,37 @@
+{ lib, bundlerApp, makeWrapper,
+  # Optional dependencies, can be null
+  epubcheck,
+  bundlerUpdateScript
+}:
+
+let
+  app = bundlerApp {
+    pname = "kramdown-asciidoc";
+    gemdir = ./.;
+
+    exes = [
+      "kramdoc"
+    ];
+
+    # nativeBuildInputs = [ makeWrapper ];
+
+    # postBuild = ''
+    #     wrapProgram "$out/bin/asciidoctor-epub3" \
+    #       ${lib.optionalString (epubcheck != null) "--set EPUBCHECK ${epubcheck}/bin/epubcheck"}
+    #   '';
+
+    # passthru = {
+    #   updateScript = bundlerUpdateScript "kramdown-asciidoc";
+    # };
+
+    meta = with lib; {
+      description = "A kramdown extension for converting Markdown documents to AsciiDoc";
+      homepage = "https://asciidoctor.org/";
+      license = licenses.mit;
+      maintainers = with maintainers; [ ];
+      platforms = platforms.unix;
+      mainProgram = "kramdoc";
+    };
+  };
+in
+  app
diff --git a/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/gemset.nix b/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/gemset.nix
new file mode 100644
index 000000000000..0ade973304d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/kramdown-asciidoc/gemset.nix
@@ -0,0 +1,23 @@
+{
+  kramdown = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n1c4jmrh5ig8iv1rw81s4mw4xsp4v97hvf8zkigv4hn5h542qjq";
+      type = "gem";
+    };
+    version = "1.17.0";
+  };
+  kramdown-asciidoc = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nr4hss1byhchwkqy2w0dgc7s83n0s5xm0pjms2cmckc4sbrryxi";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/lout/default.nix b/nixpkgs/pkgs/tools/typesetting/lout/default.nix
new file mode 100644
index 000000000000..d675aceb933f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/lout/default.nix
@@ -0,0 +1,48 @@
+{lib, stdenv, fetchFromGitHub, ghostscript}:
+
+stdenv.mkDerivation rec {
+  pname = "lout";
+  version = "3.43";
+
+  src = fetchFromGitHub {
+    owner = "william8000";
+    repo = pname;
+    rev = version;
+    hash = "sha256-YUFrlM7BnDlG1rUV90yBvWG6lOKW5qKxs/xdq6I/kI0=";
+  };
+
+  buildInputs = [ ghostscript ];
+
+  makeFlags = [ "PREFIX=$(out)/" "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = {
+    description = "Document layout system similar in style to LaTeX";
+
+    longDescription = ''
+      The Lout document formatting system is now reads a high-level
+      description of a document similar in style to LaTeX and produces
+      a PostScript or plain text output file.
+
+      Lout offers an unprecedented range of advanced features,
+      including optimal paragraph and page breaking, automatic
+      hyphenation, PostScript EPS file inclusion and generation,
+      equation formatting, tables, diagrams, rotation and scaling,
+      sorted indexes, bibliographic databases, running headers and
+      odd-even pages, automatic cross referencing, multilingual
+      documents including hyphenation (most European languages are
+      supported), formatting of computer programs, and much more, all
+      ready to use.  Furthermore, Lout is easily extended with
+      definitions which are very much easier to write than troff of
+      TeX macros because Lout is a high-level, purely functional
+      language, the outcome of an eight-year research project that
+      went back to the beginning.
+    '';
+
+    homepage = "https://github.com/william8000/lout";
+
+    license = lib.licenses.gpl3Plus;
+
+    platforms = lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/lowdown/default.nix b/nixpkgs/pkgs/tools/typesetting/lowdown/default.nix
new file mode 100644
index 000000000000..189ba55838b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/lowdown/default.nix
@@ -0,0 +1,93 @@
+{ lib, stdenv, fetchurl, fixDarwinDylibNames, which, dieHook
+, enableShared ? !stdenv.hostPlatform.isStatic
+, enableStatic ? stdenv.hostPlatform.isStatic
+# for passthru.tests
+, nix
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lowdown";
+  version = "1.1.0";
+
+  outputs = [ "out" "lib" "dev" "man" ];
+
+  src = fetchurl {
+    url = "https://kristaps.bsd.lv/lowdown/snapshots/lowdown-${version}.tar.gz";
+    hash = "sha512-EpAWTz7Zy+2qqJGgzLrt0tK7WEZ+hHbdyqzAmMiaqc6uNXscR88git6/UbTjvB9Yanvetvw9huSuyhcORCEIug==";
+  };
+
+  nativeBuildInputs = [ which dieHook ]
+    ++ lib.optionals stdenv.isDarwin [ fixDarwinDylibNames ];
+
+  preConfigure = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    echo 'HAVE_SANDBOX_INIT=0' > configure.local
+  '';
+
+  configurePhase = ''
+    runHook preConfigure
+    ./configure PREFIX=''${!outputDev} \
+                BINDIR=''${!outputBin}/bin \
+                LIBDIR=''${!outputLib}/lib \
+                MANDIR=''${!outputMan}/share/man
+    runHook postConfigure
+  '';
+
+  makeFlags = [
+    "bins" # prevents shared object from being built unnecessarily
+  ];
+
+  installTargets = [
+    "install"
+  ] ++ lib.optionals enableShared [
+    "install_shared"
+  ] ++ lib.optionals enableStatic [
+    "install_static"
+  ];
+
+  postInstall =
+    let
+      soVersion = "1";
+    in
+
+    # Check that soVersion is up to date even if we are not on darwin
+    lib.optionalString (enableShared && !stdenv.isDarwin) ''
+      test -f $lib/lib/liblowdown.so.${soVersion} || \
+        die "postInstall: expected $lib/lib/liblowdown.so.${soVersion} is missing"
+    ''
+    # Fix lib extension so that fixDarwinDylibNames detects it, see
+    # <https://github.com/kristapsdz/lowdown/issues/87#issuecomment-1532243650>.
+    + lib.optionalString (enableShared && stdenv.isDarwin) ''
+      darwinDylib="$lib/lib/liblowdown.${soVersion}.dylib"
+      mv "$lib/lib/liblowdown.so.${soVersion}" "$darwinDylib"
+
+      # Make sure we are re-creating a symbolic link here
+      test -L "$lib/lib/liblowdown.so" || \
+        die "postInstall: expected $lib/lib/liblowdown.so to be a symlink"
+      ln -s "$darwinDylib" "$lib/lib/liblowdown.dylib"
+      rm "$lib/lib/liblowdown.so"
+    '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    echo '# TEST' > test.md
+    $out/bin/lowdown test.md
+    runHook postInstallCheck
+  '';
+
+  doCheck = true;
+  checkTarget = "regress";
+
+  passthru.tests = {
+    # most important consumer in nixpkgs
+    inherit nix;
+  };
+
+  meta = with lib; {
+    homepage = "https://kristaps.bsd.lv/lowdown/";
+    description = "Simple markdown translator";
+    license = licenses.isc;
+    maintainers = [ maintainers.sternenseemann ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/marp/default.nix b/nixpkgs/pkgs/tools/typesetting/marp/default.nix
new file mode 100644
index 000000000000..574159a76fa1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/marp/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchYarnDeps
+, makeWrapper
+, nodejs
+, prefetch-yarn-deps
+, yarn
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "marp-cli";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "marp-team";
+    repo = "marp-cli";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-bx5mq5KI85qUct/9Hr6mby6dWmRkmpVbiIw+M8PZas8=";
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${finalAttrs.src}/yarn.lock";
+    hash = "sha256-BogCt7ezmWxv2YfhljHYoBf47/FHR0qLZosjnoQhqgs=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    nodejs
+    prefetch-yarn-deps
+    yarn
+  ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    fixup-yarn-lock yarn.lock
+    yarn --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive install
+    patchShebangs node_modules
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn --offline build
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    yarn --offline --production install
+
+    mkdir -p $out/lib/node_modules/@marp-team/marp-cli
+    cp -r lib node_modules marp-cli.js $out/lib/node_modules/@marp-team/marp-cli/
+
+    makeWrapper "${nodejs}/bin/node" "$out/bin/marp" \
+      --add-flags "$out/lib/node_modules/@marp-team/marp-cli/marp-cli.js"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "About A CLI interface for Marp and Marpit based converters";
+    homepage = "https://github.com/marp-team/marp-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ GuillaumeDesforges ];
+    platforms = nodejs.meta.platforms;
+    mainProgram = "marp";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/mmark/default.nix b/nixpkgs/pkgs/tools/typesetting/mmark/default.nix
new file mode 100644
index 000000000000..3e1c95ca0241
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/mmark/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, mmark }:
+
+buildGoModule rec {
+  pname = "mmark";
+  version = "2.2.32";
+
+  src = fetchFromGitHub {
+    owner = "mmarkdown";
+    repo = "mmark";
+    # The tag has an outdated version number and fails the versio ntest
+    # The pinned revision includes one extra commit that fixes the issue
+    # rev = "v${version}";
+    rev = "158e9cca0280c58e205cb69b02bf33d7d826915e";
+    hash = "sha256-OzmqtmAAsG3ncrTl2o9rhK75i1WIpDnph0YrY38SlU0=";
+  };
+
+  vendorHash = "sha256-GjR9cOGLB6URHQi+qcyNbP7rm0+y4wypvgUxgJzIgGQ=";
+
+  ldflags = [ "-s" "-w" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = mmark;
+  };
+
+  meta = {
+    description = "A powerful markdown processor in Go geared towards the IETF";
+    homepage = "https://github.com/mmarkdown/mmark";
+    license = with lib.licenses; bsd2;
+    maintainers = with lib.maintainers; [ yrashk ];
+    mainProgram = "mmark";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/multimarkdown/default.nix b/nixpkgs/pkgs/tools/typesetting/multimarkdown/default.nix
new file mode 100644
index 000000000000..65cf5931ac10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/multimarkdown/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, perl
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "multimarkdown";
+  version = "6.6.0";
+
+  src = fetchFromGitHub {
+    owner = "fletcher";
+    repo = "MultiMarkdown-6";
+    rev = version;
+    hash = "sha256-emJbY0wucoc/GdjlILoeqjwuwuPpTjXTqZN0gUKOyLg=";
+  };
+
+  postPatch = ''
+    patchShebangs tools/enumsToPerl.pl
+  '';
+
+  postInstall = ''
+    # Move files from $out/ to sub directories to prevent conflicts
+    # with other packages:
+    mkdir -p $out/share/doc/multimarkdown/
+    mv $out/LICENSE.txt $out/README.txt $out/share/doc/multimarkdown/
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    perl
+    pkg-config
+  ];
+
+  meta = with lib; {
+    homepage = "https://fletcher.github.io/MultiMarkdown-6/introduction.html";
+    description = "A derivative of Markdown that adds new syntax features";
+    longDescription = ''
+      MultiMarkdown is a lightweight markup language created by
+      Fletcher T. Penney and based on Markdown, which supports
+      more export-formats (html, latex, beamer, memoir, odf, opml,
+      lyx, mmd) and implements some added features currently not
+      available with plain Markdown syntax.
+
+      It adds the following features to Markdown:
+
+      - footnotes
+      - tables
+      - citations and bibliography (works best in LaTeX using BibTeX)
+      - math support
+      - automatic cross-referencing ability
+      - smart typography, with support for multiple languages
+      - image attributes
+      - table and image captions
+      - definition lists
+      - glossary entries (LaTeX only)
+      - document metadata (e.g. title, author, date, etc.)
+    '';
+    license = with licenses; [ mit ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdf2djvu/default.nix b/nixpkgs/pkgs/tools/typesetting/pdf2djvu/default.nix
new file mode 100644
index 000000000000..09285cf2843b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdf2djvu/default.nix
@@ -0,0 +1,67 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, gettext
+, libtool
+, pkg-config
+, djvulibre
+, exiv2
+, fontconfig
+, graphicsmagick
+, libjpeg
+, libuuid
+, poppler
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.9.19";
+  pname = "pdf2djvu";
+
+  src = fetchFromGitHub {
+    owner = "jwilk";
+    repo = "pdf2djvu";
+    rev = version;
+    sha256 = "sha256-j4mYdmLZ56qTA1KbWBjBvyTyLaeuIITKYsALRIO7lj0=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [
+    djvulibre
+    exiv2
+    fontconfig
+    graphicsmagick
+    libjpeg
+    libuuid
+    poppler
+  ];
+
+  postPatch = ''
+    substituteInPlace private/autogen \
+      --replace /usr/share/gettext ${gettext}/share/gettext \
+      --replace /usr/share/libtool ${libtool}/share/libtool
+
+    substituteInPlace configure.ac \
+      --replace '$djvulibre_bin_path' ${djvulibre.bin}/bin
+  '';
+
+  preAutoreconf = ''
+    private/autogen
+  '';
+
+  enableParallelBuilding = true;
+
+  # Required by Poppler on darwin
+  # https://github.com/jwilk/pdf2djvu/commit/373e065faf2f0d868a3700788d20a96e9528bb12
+  CXXFLAGS = "-std=c++17";
+
+  meta = with lib; {
+    description = "Creates djvu files from PDF files";
+    homepage = "https://jwilk.net/software/pdf2djvu";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "pdf2djvu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdfchain/default.nix b/nixpkgs/pkgs/tools/typesetting/pdfchain/default.nix
new file mode 100644
index 000000000000..6d772a6fea20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdfchain/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, fetchDebianPatch
+, autoconf, gtkmm3, glib, pdftk, pkg-config, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pdfchain";
+  version = "0.4.4.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}/${pname}-${version}.tar.gz";
+    hash = "sha256-Hu4Pk9voyc75+f5OwKEOCkXKjN5nzWzv+izmyEN1Lz0=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config wrapGAppsHook autoconf
+  ];
+
+  buildInputs = [
+    gtkmm3 pdftk glib
+  ];
+
+  patches = let
+    fetchDebianPatch' = args: fetchDebianPatch ({
+      inherit pname;
+      version = "1:0.4.4.2";
+      debianRevision = "2";
+    } // args);
+  in
+  [
+    (fetchDebianPatch' {
+      patch = "fix_crash_on_startup";
+      hash = "sha256-1UyMHHGrmUIFhY53ILdMMsyocSIbcV6CKQ7sLVNhNQw=";
+    })
+    (fetchDebianPatch' {
+      patch = "fix_desktop_file";
+      hash = "sha256-L6lhUs7GqVN1XOQO6bbz6BT29n4upsJtlHCAIGzk1Bw=";
+    })
+    (fetchDebianPatch' {
+      patch = "fix_spelling";
+      hash = "sha256-sOUUslPfcOo2K3zuaLcux+CNdgfWM0phsfe6g4GUFes=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace src/constant.h \
+        --replace '"pdftk"' '"${pdftk}/bin/pdftk"' \
+        --replace "/usr/share" "$out/share"
+  '';
+
+  meta = with lib; {
+    description = "A graphical user interface for the PDF Toolkit (PDFtk)";
+    homepage = "https://pdfchain.sourceforge.io";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ hqurve ];
+    platforms = platforms.unix;
+    mainProgram = "pdfchain";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdfgrep/default.nix b/nixpkgs/pkgs/tools/typesetting/pdfgrep/default.nix
new file mode 100644
index 000000000000..44854592348b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdfgrep/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, pkg-config, poppler, libgcrypt, pcre, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "pdfgrep";
+  version = "2.1.2";
+
+  src = fetchurl {
+    url = "https://pdfgrep.org/download/${pname}-${version}.tar.gz";
+    sha256 = "1fia10djcxxl7n9jw2prargw4yzbykk6izig2443ycj9syhxrwqf";
+  };
+
+  postPatch = ''
+    for i in ./src/search.h ./src/pdfgrep.cc ./src/search.cc; do
+      substituteInPlace $i --replace '<cpp/' '<'
+    done
+  '';
+
+  configureFlags = [
+    "--with-libgcrypt-prefix=${lib.getDev libgcrypt}"
+  ];
+
+  nativeBuildInputs = [ pkg-config asciidoc ];
+  buildInputs = [ poppler libgcrypt pcre ];
+
+  meta = {
+    description = "Commandline utility to search text in PDF files";
+    homepage = "https://pdfgrep.org/";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ qknight fpletz ];
+    platforms = with lib.platforms; unix;
+    mainProgram = "pdfgrep";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdfsandwich/default.nix b/nixpkgs/pkgs/tools/typesetting/pdfsandwich/default.nix
new file mode 100644
index 000000000000..377a7f7bf432
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdfsandwich/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, ocaml, makeWrapper, fetchsvn, ghostscript, imagemagick, perl, poppler_utils, tesseract, unpaper }:
+
+stdenv.mkDerivation {
+  version = "0.1.7";
+  pname = "pdfsandwich";
+
+  src = fetchsvn {
+    url = "svn://svn.code.sf.net/p/pdfsandwich/code/trunk/src";
+    rev = "75";
+    sha256 = "1420c33divch087xrr61lvyf975bapqkgjqaighl581i69nlzsm6";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ makeWrapper ocaml perl ];
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -p pdfsandwich $out/bin
+    wrapProgram $out/bin/pdfsandwich --prefix PATH : ${lib.makeBinPath [ imagemagick ghostscript poppler_utils unpaper tesseract ]}
+
+    mkdir -p $out/man/man1
+    cp -p pdfsandwich.1.gz $out/man/man1
+  '';
+
+meta = with lib; {
+    description = "OCR tool for scanned PDFs";
+    homepage = "http://www.tobias-elze.de/pdfsandwich/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.rps ];
+    platforms = platforms.linux;
+    mainProgram = "pdfsandwich";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdftk/default.nix b/nixpkgs/pkgs/tools/typesetting/pdftk/default.nix
new file mode 100644
index 000000000000..27d95c00c01b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdftk/default.nix
@@ -0,0 +1,100 @@
+{ lib, stdenv, fetchFromGitLab, gradle, jre, perl, writeText, runtimeShell }:
+
+let
+  pname = "pdftk";
+  version = "3.3.3";
+
+  src = fetchFromGitLab {
+    owner = "pdftk-java";
+    repo = "pdftk";
+    rev = "v${version}";
+    hash = "sha256-ciKotTHSEcITfQYKFZ6sY2LZnXGChBJy0+eno8B3YHY=";
+  };
+
+  deps = stdenv.mkDerivation {
+    pname = "${pname}-deps";
+    inherit src version;
+
+    nativeBuildInputs = [ gradle perl ];
+
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d)
+      gradle -Dfile.encoding=utf-8 shadowJar;
+    '';
+
+    # Mavenize dependency paths
+    # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+    '';
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "sha256-Mx5CdiRxuql22kbLozzr9Rs2E2Svzg2zN1138Xa0pMc=";
+  };
+
+  # Point to our local deps repo
+  gradleInit = writeText "init.gradle" ''
+    logger.lifecycle 'Replacing Maven repositories with ${deps}...'
+    gradle.projectsLoaded {
+      rootProject.allprojects {
+        buildscript {
+          repositories {
+            clear()
+            maven { url '${deps}' }
+          }
+        }
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+
+    settingsEvaluated { settings ->
+      settings.pluginManagement {
+        repositories {
+          maven { url '${deps}' }
+        }
+      }
+  }
+  '';
+
+in stdenv.mkDerivation rec {
+  inherit pname version src;
+
+  nativeBuildInputs = [ gradle ];
+
+  buildPhase = ''
+    export GRADLE_USER_HOME=$(mktemp -d)
+    gradle --offline --no-daemon --info --init-script ${gradleInit} shadowJar
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/pdftk,share/man/man1}
+    cp build/libs/pdftk-all.jar $out/share/pdftk
+
+    cat  << EOF > $out/bin/pdftk
+    #!${runtimeShell}
+    exec ${jre}/bin/java -jar "$out/share/pdftk/pdftk-all.jar" "\$@"
+    EOF
+    chmod a+x "$out/bin/pdftk"
+
+    cp ${src}/pdftk.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool for working with PDFs";
+    homepage = "https://gitlab.com/pdftk-java/pdftk";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin averelld ];
+    platforms = platforms.unix;
+    mainProgram = "pdftk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/ps2eps/default.nix b/nixpkgs/pkgs/tools/typesetting/ps2eps/default.nix
new file mode 100644
index 000000000000..c8f558889c60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/ps2eps/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, fetchFromGitHub
+, perlPackages
+, substituteAll
+, ghostscript
+, installShellFiles
+}:
+
+
+perlPackages.buildPerlPackage rec {
+  pname = "ps2eps";
+  version = "1.70";
+
+  src = fetchFromGitHub {
+    owner = "roland-bless";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-SPLwsGKLVhANoqSQ/GJ938cYjbjMbUOXkNn9so3aJTA=";
+  };
+  patches = [
+    (substituteAll {
+      src = ./hardcode-deps.patch;
+      gs = "${ghostscript}/bin/gs";
+      # bbox cannot be substituted here because substituteAll doesn't know what
+      # will be the $out path of the main derivation
+    })
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  configurePhase = "true";
+
+  buildPhase = ''
+    runHook preBuild
+
+    make -C src/C bbox
+    patchShebangs src/perl/ps2eps
+    substituteInPlace src/perl/ps2eps \
+      --replace @bbox@ $out/bin/bbox
+
+    runHook postBuild
+  '';
+
+  # Override buildPerlPackage's outputs setting
+  outputs = ["out" "man"];
+  installPhase = ''
+    runHook preInstall
+
+    installManPage \
+      doc/ps2eps.1 \
+      doc/bbox.1
+
+    install -D src/perl/ps2eps $out/bin/ps2eps
+    install -D src/C/bbox $out/bin/bbox
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Calculate correct bounding boxes for PostScript and PDF files";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/ps2eps/hardcode-deps.patch b/nixpkgs/pkgs/tools/typesetting/ps2eps/hardcode-deps.patch
new file mode 100644
index 000000000000..b8846ab61d07
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/ps2eps/hardcode-deps.patch
@@ -0,0 +1,26 @@
+diff --git i/src/perl/ps2eps w/src/perl/ps2eps
+index 1122a81..31d6a9a 100755
+--- i/src/perl/ps2eps
++++ w/src/perl/ps2eps
+@@ -43,19 +43,13 @@ Getopt::Long::Configure("no_ignore_case");
+ 
+ $prgname= "ps2eps";
+ 
+-if (! -d "/usr/bin")
+-{ # we assume that we are running under native windows
+-  $ghostscriptname = "gswin32c";
+-  $NULLDEV = "nul";
+-} 
+-else 
+ { # Unix or cygwin
+-  $ghostscriptname = "gs";
++  $ghostscriptname = "@gs@";
+   $NULLDEV = "/dev/null 2>&1";
+ }
+ 
+ $bboxver=`bbox >$NULLDEV -V`;
+-$bboxname= ($?== -1) ? "" : "bbox";
++$bboxname= ($?== -1) ? "" : "@bbox@";
+ $version= '$Id: ps2eps,v 1.70 2018-01-09 18:00:00 bless Exp $'; #'
+ $insertPScode= 1;     # Insert surrounding Postscript code
+ $infhandle = STDIN;   # Standard input is the default input file
diff --git a/nixpkgs/pkgs/tools/typesetting/psutils/default.nix b/nixpkgs/pkgs/tools/typesetting/psutils/default.nix
new file mode 100644
index 000000000000..93c7b9f2a23a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/psutils/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "psutils";
+  version = "17";
+
+  src = fetchurl {
+    url = "http://knackered.knackered.org/angus/download/${pname}/${pname}-p${version}.tar.gz";
+    hash = "sha256-OFPreVhLqPvieoFUJbZan38Vsljg1DoFqFa9t11YiuQ=";
+  };
+
+  postPatch = ''
+    sed -i 's/void main/int main/' *.c
+  '';
+
+  configurePhase = ''
+    sed -e 's,/usr/local/bin/perl,${perl}/bin/perl,' \
+      -e "s,/usr/local,$out," \
+      -e "s,CFLAGS =,CFLAGS = -std=c89," \
+      Makefile.unix > Makefile
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  preInstall = ''
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  meta = {
+    description = "Collection of useful utilities for manipulating PS documents";
+    homepage = "http://knackered.knackered.org/angus/psutils/";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pulldown-cmark/default.nix b/nixpkgs/pkgs/tools/typesetting/pulldown-cmark/default.nix
new file mode 100644
index 000000000000..27b669a0d106
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pulldown-cmark/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pulldown-cmark";
+  version = "0.9.6";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-5rCoFI+QWQVxF4YUzwP7jQytiIzTXtlOr3AJzHMdtR8=";
+  };
+
+  cargoHash = "sha256-it18jXKqUE43A6KAsx+BFc7YwufXjk1FJ0u8D2EolHQ=";
+
+  meta = {
+    description = "A pull parser for CommonMark written in Rust";
+    homepage = "https://github.com/raphlinus/pulldown-cmark";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ CobaltCause ];
+    mainProgram = "pulldown-cmark";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/rfc-bibtex/default.nix b/nixpkgs/pkgs/tools/typesetting/rfc-bibtex/default.nix
new file mode 100644
index 000000000000..d9bed6946697
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/rfc-bibtex/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+with python3.pkgs; buildPythonApplication rec {
+  pname = "rfc-bibtex";
+  version = "0.3.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "iluxonchik";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-bPCNQqiG50vWVFA6J2kyxftwsXunHTNBdSkoIRYkb0s=";
+  };
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    vcrpy
+  ];
+
+  pythonImportsCheck = [
+    "rfc_bibtex"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/iluxonchik/rfc-bibtex/";
+    description = "Generate Bibtex entries for IETF RFCs and Internet-Drafts";
+    license = licenses.mit;
+    maintainers = with maintainers; [ teto ];
+    mainProgram = "rfcbibtex";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/rubber/default.nix b/nixpkgs/pkgs/tools/typesetting/rubber/default.nix
new file mode 100644
index 000000000000..2ccee0bae005
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/rubber/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitLab, python3Packages, texinfo }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "rubber";
+  version = "1.6.0";
+
+  src = fetchFromGitLab {
+    owner = "latex-rubber";
+    repo = "rubber";
+    rev = version;
+    hash = "sha256-7sv9N3PES5N41yYyXNWfaZ6IhLW6SqMiCHdamsSPQzg=";
+  };
+
+  # I'm sure there is a better way to pass these parameters to the build script...
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace 'pdf = True' 'pdf = False' \
+      --replace '$base/info'  'share/info' \
+      --replace '$base/man'   'share/man' \
+      --replace '$base/share' 'share'
+
+    substituteInPlace tests/run.sh \
+      --replace /var/tmp /tmp
+  '';
+
+  nativeBuildInputs = [ texinfo ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    pushd tests >/dev/null
+    ${stdenv.shell} run.sh
+    popd >/dev/null
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Wrapper for LaTeX and friends";
+    longDescription = ''
+      Rubber is a program whose purpose is to handle all tasks related
+      to the compilation of LaTeX documents.  This includes compiling
+      the document itself, of course, enough times so that all
+      references are defined, and running BibTeX to manage
+      bibliographic references.  Automatic execution of dvips to
+      produce PostScript documents is also included, as well as usage
+      of pdfLaTeX to produce PDF documents.
+    '';
+    license = licenses.gpl2Plus;
+    homepage = "https://gitlab.com/latex-rubber/rubber";
+    maintainers = with maintainers; [ ttuegel peterhoeg ];
+    platforms = platforms.unix;
+    mainProgram = "rubber";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/satysfi/default.nix b/nixpkgs/pkgs/tools/typesetting/satysfi/default.nix
new file mode 100644
index 000000000000..1478da2d7675
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/satysfi/default.nix
@@ -0,0 +1,74 @@
+{ lib, fetchFromGitHub, ocamlPackages
+, ipaexfont, junicode, lmodern, lmmath
+}:
+let
+  camlpdf = ocamlPackages.camlpdf.overrideAttrs {
+    src = fetchFromGitHub {
+      owner = "gfngfn";
+      repo = "camlpdf";
+      rev = "v2.3.1+satysfi";
+      sha256 = "1s8wcqdkl1alvfcj67lhn3qdz8ikvd1v64f4q6bi4c0qj9lmp30k";
+    };
+  };
+  yojson-with-position = ocamlPackages.buildDunePackage {
+    pname = "yojson-with-position";
+    version = "1.4.2";
+    src = fetchFromGitHub {
+      owner = "gfngfn";
+      repo = "yojson-with-position";
+      rev = "v1.4.2+satysfi";
+      sha256 = "17s5xrnpim54d1apy972b5l08bph4c0m5kzbndk600fl0vnlirnl";
+    };
+    nativeBuildInputs = [ ocamlPackages.cppo ];
+    propagatedBuildInputs = [ ocamlPackages.biniou ];
+    inherit (ocamlPackages.yojson) meta;
+  };
+in
+  ocamlPackages.buildDunePackage rec {
+    pname = "satysfi";
+    version = "0.0.10";
+    src = fetchFromGitHub {
+      owner = "gfngfn";
+      repo = "SATySFi";
+      rev = "v${version}";
+      hash = "sha256-qgVM7ExsKtzNQkZO+I+rcWLj4LSvKL5uyitH7Jg+ns0=";
+      fetchSubmodules = true;
+    };
+
+    preConfigure = ''
+      substituteInPlace src/frontend/main.ml --replace \
+      '/usr/local/share/satysfi"; "/usr/share/satysfi' \
+      $out/share/satysfi
+    '';
+
+    nativeBuildInputs = with ocamlPackages; [ menhir cppo ];
+
+    buildInputs = [ camlpdf yojson-with-position ] ++ (with ocamlPackages; [
+      menhirLib
+      batteries camlimages core_kernel ppx_deriving uutf omd re
+      otfed
+    ]);
+
+    postInstall = ''
+      mkdir -p $out/share/satysfi/dist/fonts
+      cp -r lib-satysfi/dist/ $out/share/satysfi/
+      cp -r \
+        ${ipaexfont}/share/fonts/opentype/* \
+        ${lmodern}/share/fonts/opentype/public/lm/* \
+        ${lmmath}/share/fonts/opentype/latinmodern-math.otf \
+        ${junicode}/share/fonts/truetype/Junicode-{Bold,BoldItalic,Italic}.ttf \
+        $out/share/satysfi/dist/fonts/
+      cp ${junicode}/share/fonts/truetype/Junicode-Regular.ttf \
+        $out/share/satysfi/dist/fonts/Junicode.ttf
+    '';
+
+    meta = with lib; {
+      homepage = "https://github.com/gfngfn/SATySFi";
+      description = "A statically-typed, functional typesetting system";
+      changelog = "https://github.com/gfngfn/SATySFi/blob/v${version}/CHANGELOG.md";
+      license = licenses.lgpl3Only;
+      maintainers = [ maintainers.mt-caret maintainers.marsam ];
+      platforms = platforms.all;
+      mainProgram = "satysfi";
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/typesetting/sile/default.nix b/nixpkgs/pkgs/tools/typesetting/sile/default.nix
new file mode 100644
index 000000000000..61329037c961
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/sile/default.nix
@@ -0,0 +1,142 @@
+{ lib
+, stdenv
+, darwin
+, fetchurl
+, makeWrapper
+, pkg-config
+, poppler_utils
+, gitMinimal
+, harfbuzz
+, icu
+, fontconfig
+, lua
+, libiconv
+, makeFontsConf
+, gentium
+, runCommand
+, sile
+}:
+
+let
+  luaEnv = lua.withPackages(ps: with ps; [
+    cassowary
+    cldr
+    cosmo
+    fluent
+    linenoise
+    loadkit
+    lpeg
+    lua-zlib
+    lua_cliargs
+    luaepnf
+    luaexpat
+    luafilesystem
+    luarepl
+    luasec
+    luasocket
+    luautf8
+    penlight
+    vstruct
+  ] ++ lib.optionals (lib.versionOlder lua.luaversion "5.2") [
+    bit32
+  ] ++ lib.optionals (lib.versionOlder lua.luaversion "5.3") [
+    compat53
+  ]);
+in
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "sile";
+  version = "0.14.17";
+
+  src = fetchurl {
+    url = "https://github.com/sile-typesetter/sile/releases/download/v${finalAttrs.version}/sile-${finalAttrs.version}.tar.xz";
+    sha256 = "sha256-f4m+3s7au1FoJQrZ3YDAntKJyOiMPQ11bS0dku4GXgQ=";
+  };
+
+  configureFlags = [
+    "--with-system-luarocks"
+    "--with-manual"
+  ];
+
+  nativeBuildInputs = [
+    gitMinimal
+    pkg-config
+    makeWrapper
+  ];
+  buildInputs = [
+    luaEnv
+    harfbuzz
+    icu
+    fontconfig
+    libiconv
+  ]
+  ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.AppKit
+  ;
+  passthru = {
+    # So it will be easier to inspect this environment, in comparison to others
+    inherit luaEnv;
+    # Copied from Makefile.am
+    tests.test = lib.optionalAttrs (!(stdenv.isDarwin && stdenv.isAarch64)) (
+      runCommand "sile-test"
+        {
+          nativeBuildInputs = [ poppler_utils sile ];
+          inherit (finalAttrs) FONTCONFIG_FILE;
+        } ''
+        output=$(mktemp -t selfcheck-XXXXXX.pdf)
+        echo "<sile>foo</sile>" | sile -o $output -
+        pdfinfo $output | grep "SILE v${finalAttrs.version}" > $out
+      '');
+  };
+
+  postPatch = ''
+    patchShebangs build-aux/*.sh
+  '' + lib.optionalString stdenv.isDarwin ''
+    sed -i -e 's|@import AppKit;|#import <AppKit/AppKit.h>|' src/macfonts.m
+  '';
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-framework AppKit";
+
+  FONTCONFIG_FILE = makeFontsConf {
+    fontDirectories = [
+      gentium
+    ];
+  };
+
+  enableParallelBuilding = true;
+
+  preBuild = lib.optionalString stdenv.cc.isClang ''
+    substituteInPlace libtexpdf/dpxutil.c \
+      --replace "ASSERT(ht && ht->table && iter);" "ASSERT(ht && iter);"
+  '';
+
+  # remove forbidden references to $TMPDIR
+  preFixup = lib.optionalString stdenv.isLinux ''
+    for f in "$out"/bin/*; do
+      if isELF "$f"; then
+        patchelf --shrink-rpath --allowed-rpath-prefixes "$NIX_STORE" "$f"
+      fi
+    done
+  '';
+
+  outputs = [ "out" "doc" "man" "dev" ];
+
+  meta = with lib; {
+    description = "A typesetting system";
+    longDescription = ''
+      SILE is a typesetting system; its job is to produce beautiful
+      printed documents. Conceptually, SILE is similar to TeX—from
+      which it borrows some concepts and even syntax and
+      algorithms—but the similarities end there. Rather than being a
+      derivative of the TeX family SILE is a new typesetting and
+      layout engine written from the ground up using modern
+      technologies and borrowing some ideas from graphical systems
+      such as InDesign.
+    '';
+    homepage = "https://sile-typesetter.org";
+    changelog = "https://github.com/sile-typesetter/sile/raw/v${finalAttrs.version}/CHANGELOG.md";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ doronbehar alerque ];
+    license = licenses.mit;
+    mainProgram = "sile";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/skribilo/default.nix b/nixpkgs/pkgs/tools/typesetting/skribilo/default.nix
new file mode 100644
index 000000000000..548b75621c3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/skribilo/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, fetchurl
+, fig2dev
+, gettext
+, ghostscript
+, guile
+, guile-lib
+, guile-reader
+, imagemagick
+, makeWrapper
+, pkg-config
+, enableEmacs ? false, emacs
+, enableLout ? stdenv.isLinux, lout
+, enablePloticus ? stdenv.isLinux, ploticus
+, enableTex ? true, texliveSmall
+}:
+
+let
+  inherit (lib) optional;
+in stdenv.mkDerivation (finalAttrs: {
+  pname = "skribilo";
+  version = "0.10.0";
+
+  src = fetchurl {
+    url = "http://download.savannah.nongnu.org/releases/skribilo/skribilo-${finalAttrs.version}.tar.gz";
+    hash = "sha256-jP9I7hds7f1QMmSaNJpGlSvqUOwGcg+CnBzMopIS9Q4=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [
+    fig2dev
+    gettext
+    ghostscript
+    guile
+    guile-lib
+    guile-reader
+    imagemagick
+  ]
+  ++ optional enableEmacs emacs
+  ++ optional enableLout lout
+  ++ optional enablePloticus ploticus
+  ++ optional enableTex texliveSmall;
+
+  postInstall = ''
+    wrapProgram $out/bin/skribilo \
+      --prefix GUILE_LOAD_PATH : "$out/${guile.siteDir}:$GUILE_LOAD_PATH" \
+      --prefix GUILE_LOAD_COMPILED_PATH : "$out/${guile.siteCcacheDir}:$GUILE_LOAD_COMPILED_PATH"
+  '';
+
+  meta = {
+    homepage = "https://www.nongnu.org/skribilo/";
+    description = "The Ultimate Document Programming Framework";
+    longDescription = ''
+      Skribilo is a free document production tool that takes a structured
+      document representation as its input and renders that document in a
+      variety of output formats: HTML and Info for on-line browsing, and Lout
+      and LaTeX for high-quality hard copies.
+
+      The input document can use Skribilo's markup language to provide
+      information about the document's structure, which is similar to HTML or
+      LaTeX and does not require expertise. Alternatively, it can use a simpler,
+      "markup-less" format that borrows from Emacs' outline mode and from other
+      conventions used in emails, Usenet and text.
+    '';
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/soupault/default.nix b/nixpkgs/pkgs/tools/typesetting/soupault/default.nix
new file mode 100644
index 000000000000..82ea1e6f5979
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/soupault/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, fetchFromGitea
+, ocamlPackages
+, soupault
+, testers
+}:
+
+let
+  pname = "soupault";
+
+  version = "4.8.0";
+in
+ocamlPackages.buildDunePackage {
+  inherit pname version;
+
+  minimalOCamlVersion = "4.13";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "PataphysicalSociety";
+    repo = pname;
+    rev = version;
+    hash = "sha256-/QpT0zgrfMgRKjHyLHugaAlICpPkqaQ7f8fFAL0P02Y=";
+  };
+
+  buildInputs = with ocamlPackages; [
+    base64
+    camomile
+    containers
+    csv
+    digestif
+    ezjsonm
+    fileutils
+    fmt
+    jingoo
+    lambdasoup
+    lua-ml
+    logs
+    markup
+    odate
+    otoml
+    re
+    spelll
+    tsort
+    yaml
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = soupault;
+    command = "soupault --version-number";
+  };
+
+  meta = {
+    description = "A tool that helps you create and manage static websites";
+    homepage = "https://soupault.app/";
+    changelog = "https://codeberg.org/PataphysicalSociety/soupault/src/branch/main/CHANGELOG.md";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ toastal ];
+    mainProgram = "soupault";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/sshlatex/default.nix b/nixpkgs/pkgs/tools/typesetting/sshlatex/default.nix
new file mode 100644
index 000000000000..ed1252928bb3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/sshlatex/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, inotify-tools, openssh, perl, gnutar, bash, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "sshlatex";
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    owner = "iblech";
+    repo = "sshlatex";
+    rev = version;
+    sha256 = "0kaah8is74zba9373xccmsxmnnn6kh0isr4qpg21x3qhdzhlxl7q";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = let
+    binPath = lib.makeBinPath [ openssh perl gnutar bash inotify-tools ];
+  in ''
+    mkdir -p $out/bin
+    cp sshlatex $out/bin
+    wrapProgram $out/bin/sshlatex --prefix PATH : "${binPath}"
+  '';
+
+  meta = with lib; {
+    description = "A collection of hacks to efficiently run LaTeX via ssh";
+    longDescription = ''
+      sshlatex is a tool which uploads LaTeX source files to a remote, runs
+      LaTeX there, and streams the resulting PDF file to the local host.
+      Because sshlatex prestarts LaTeX with the previous run's preamble,
+      thereby preloading the required LaTeX packages, it is also useful in a
+      purely local setting.
+    '';
+    homepage = "https://github.com/iblech/sshlatex";
+    license = lib.licenses.gpl3Plus;  # actually dual-licensed gpl3Plus | lppl13cplus
+    platforms = lib.platforms.all;
+    maintainers = [ maintainers.iblech ];
+    mainProgram = "sshlatex";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tectonic/biber.nix b/nixpkgs/pkgs/tools/typesetting/tectonic/biber.nix
new file mode 100644
index 000000000000..9798c1471667
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tectonic/biber.nix
@@ -0,0 +1,54 @@
+/*
+  This package, `biber-for-tectonic`, provides a compatible version of `biber`
+  as an optional runtime dependency of `tectonic`.
+
+  The development of tectonic is slowing down recently, such that its `biber`
+  dependency has been lagging behind the one in the nixpkgs `texlive` bundle.
+  See:
+
+  https://github.com/tectonic-typesetting/tectonic/discussions/1122
+
+  It is now feasible to track the biber dependency in nixpkgs, as the
+  version bump is not very frequent, and it would provide a more complete
+  user experience of tectonic in nixpkgs.
+*/
+
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, biber
+}:
+
+let version = "2.17"; in (
+  biber.override {
+    /*
+      It is necessary to first override the `version` data here, which is
+      passed to `buildPerlModule`, and then to `mkDerivation`.
+
+      If we simply do `biber.overrideAttrs` the resulting package `name`
+      would be incorrect, since it has already been preprocessed by
+      `buildPerlModule`.
+    */
+    texlive.pkgs.biber.texsource = {
+      inherit version;
+      inherit (biber) pname meta;
+    };
+  }
+).overrideAttrs (prevAttrs: {
+  src = fetchFromGitHub {
+    owner = "plk";
+    repo = "biber";
+    rev = "v${version}";
+    hash = "sha256-Tt2sN2b2NGxcWyZDj5uXNGC8phJwFRiyH72n3yhFCi0=";
+  };
+  patches = [
+    # Perl>=5.36.0 compatibility
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/plk/biber/pull/411.patch";
+      hash = "sha256-osgldRVfe3jnMSOMnAMQSB0Ymc1s7J6KtM2ig3c93SE=";
+    })
+  ];
+  meta = prevAttrs.meta // {
+    maintainers = with lib.maintainers; [ doronbehar bryango ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/tectonic/default.nix b/nixpkgs/pkgs/tools/typesetting/tectonic/default.nix
new file mode 100644
index 000000000000..e7172e608746
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tectonic/default.nix
@@ -0,0 +1,63 @@
+/*
+  This file provides the `tectonic-unwrapped` package. On the other hand,
+  the `tectonic` package is defined in `./wrapper.nix`, by wrapping
+  - [`tectonic-unwrapped`](./default.nix) i.e. this package, and
+  - [`biber-for-tectonic`](./biber.nix),
+    which provides a compatible version of `biber`.
+*/
+
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, darwin
+, fontconfig
+, harfbuzz
+, openssl
+, pkg-config
+, icu
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tectonic";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = "tectonic-typesetting";
+    repo = "tectonic";
+    rev = "tectonic@${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-xZHYiaQ8ASUwu0ieHIXcjRaH06SQoB6OR1y7Ok+FjAs=";
+  };
+
+  cargoHash = "sha256-niMgb4zsTWHw5yaa4kJOZzpOzO5gMG4k3cTHwSV+wmY=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ icu fontconfig harfbuzz openssl ]
+    ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ ApplicationServices Cocoa Foundation ]);
+
+  # workaround for https://github.com/NixOS/nixpkgs/issues/166205
+  NIX_LDFLAGS = lib.optionalString (stdenv.cc.isClang && stdenv.cc.libcxx != null) " -l${stdenv.cc.libcxx.cxxabi.libName}";
+
+  postInstall = ''
+    # Makes it possible to automatically use the V2 CLI API
+    ln -s $out/bin/tectonic $out/bin/nextonic
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace dist/appimage/tectonic.desktop \
+      --replace Exec=tectonic Exec=$out/bin/tectonic
+    install -D dist/appimage/tectonic.desktop -t $out/share/applications/
+    install -D dist/appimage/tectonic.svg -t $out/share/icons/hicolor/scalable/apps/
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Modernized, complete, self-contained TeX/LaTeX engine, powered by XeTeX and TeXLive";
+    homepage = "https://tectonic-typesetting.github.io/";
+    changelog = "https://github.com/tectonic-typesetting/tectonic/blob/tectonic@${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    mainProgram = "tectonic";
+    maintainers = with maintainers; [ lluchs doronbehar bryango ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tectonic/tests.nix b/nixpkgs/pkgs/tools/typesetting/tectonic/tests.nix
new file mode 100644
index 000000000000..da1961c8e42d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tectonic/tests.nix
@@ -0,0 +1,93 @@
+# This package provides `tectonic.passthru.tests`.
+# It requires internet access to fetch tectonic's resource bundle on demand.
+
+{ lib
+, fetchFromGitHub
+, writeText
+, runCommand
+, tectonic
+, curl
+, cacert
+, emptyFile
+}:
+
+let
+  /*
+    Currently, the test files are only fully available from the `dev` branch of
+    `biber`. When https://github.com/plk/biber/pull/467 is eventually released,
+    we can obtain the test files from `texlive.pkgs.biber.texsource`. For now,
+    i.e. biber<=2.19, we fetch the test files directly from GitHub.
+  */
+  biber-dev-source = fetchFromGitHub {
+    owner = "plk";
+    repo = "biber";
+    # curl https://api.github.com/repos/plk/biber/pulls/467 | jq .merge_commit_sha
+    rev = "d43e352586f5c9f98f0331978ca9d0b908986e09";
+    hash = "sha256-Z5BdMteBouiDQasF6GZXkS//YzrZkcX1eLvKIQIBkBs=";
+  };
+  testfiles = "${biber-dev-source}/testfiles";
+
+  noNetNotice = writeText "tectonic-offline-notice" ''
+    # To fetch tectonic's web bundle, the tests require internet access,
+    # which is not available in the current environment.
+  '';
+  # `cacert` is required for tls connections
+  nativeBuildInputs = [ curl cacert tectonic ];
+  checkInternet = ''
+    if curl --head "bing.com"; then
+      set -e # continue to the tests defined below, fail on error
+    else
+      cat "${noNetNotice}"
+      cp "${emptyFile}" "$out"
+      exit # bail out gracefully when there is no internet, do not panic
+    fi
+  '';
+
+  networkRequiringTestPkg = name: script: runCommand
+    /*
+      Introduce dependence on `tectonic` in the test package name. Note that
+      adding `tectonic` to `nativeBuildInputs` is not enough to trigger
+      rebuilds for a fixed-output derivation. One must update its name or
+      output hash to induce a rebuild. This behavior is exactly the same as a
+      standard nixpkgs "fetcher" such as `fetchurl`.
+    */
+    "test-${lib.removePrefix "${builtins.storeDir}/" tectonic.outPath}-${name}"
+    {
+      /*
+        Make a fixed-output derivation, return an `emptyFile` with fixed hash.
+        These derivations are allowed to access the internet from within a
+        sandbox, which allows us to test the automatic download of resource
+        files in tectonic, as a side effect. The `tectonic.outPath` is included
+        in `name` to induce rebuild of this fixed-output derivation whenever
+        the `tectonic` derivation is updated.
+      */
+      inherit (emptyFile)
+        outputHashAlgo
+        outputHashMode
+        outputHash
+        ;
+      allowSubstitutes = false;
+      inherit nativeBuildInputs;
+    }
+    ''
+      ${checkInternet}
+      ${script}
+      cp "${emptyFile}" "$out"
+    '';
+
+in
+lib.mapAttrs networkRequiringTestPkg {
+  biber-compatibility = ''
+    # import the test files
+    cp "${testfiles}"/* .
+
+    # tectonic caches in the $HOME directory, so set it to $PWD
+    export HOME=$PWD
+    tectonic -X compile ./test.tex
+  '';
+
+  workspace = ''
+    tectonic -X new
+    cat Tectonic.toml | grep "${tectonic.bundleUrl}"
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tectonic/wrapper.nix b/nixpkgs/pkgs/tools/typesetting/tectonic/wrapper.nix
new file mode 100644
index 000000000000..42125e7855d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tectonic/wrapper.nix
@@ -0,0 +1,57 @@
+{ lib
+, symlinkJoin
+, tectonic
+, tectonic-unwrapped
+, biber-for-tectonic
+, makeBinaryWrapper
+, callPackage
+}:
+
+symlinkJoin {
+  name = "${tectonic-unwrapped.pname}-wrapped-${tectonic-unwrapped.version}";
+  paths = [ tectonic-unwrapped ];
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  passthru = {
+    unwrapped = tectonic-unwrapped;
+    biber = biber-for-tectonic;
+    tests = callPackage ./tests.nix { };
+
+    # The version locked tectonic web bundle, redirected from:
+    #   https://relay.fullyjustified.net/default_bundle_v33.tar
+    # To check for updates, see:
+    #   https://github.com/tectonic-typesetting/tectonic/blob/master/crates/bundles/src/lib.rs
+    # ... and look up `get_fallback_bundle_url`.
+    bundleUrl = "https://data1.fullyjustified.net/tlextras-2022.0r0.tar";
+  };
+
+  # Replace the unwrapped tectonic with the one wrapping it with biber
+  postBuild = ''
+    rm $out/bin/{tectonic,nextonic}
+  ''
+    # Pin the version of the online TeX bundle that Tectonic's developer
+    # distribute, so that the `biber` version and the `biblatex` version
+    # distributed from there are compatible.
+    #
+    # Upstream is updating it's online TeX bundle slower then
+    # https://github.com/plk/biber. That's why we match here the `bundleURL`
+    # version with that of `biber-for-tectonic`. See also upstream discussion:
+    #
+    # https://github.com/tectonic-typesetting/tectonic/discussions/1122
+    #
+    # Hence, we can be rather confident that for the near future, the online
+    # TeX bundle won't be updated and hence the biblatex distributed there
+    # won't require a higher version of biber.
+  + ''
+    makeWrapper ${lib.getBin tectonic-unwrapped}/bin/tectonic $out/bin/tectonic \
+      --prefix PATH : "${lib.getBin biber-for-tectonic}/bin" \
+      --add-flags "--web-bundle ${tectonic.passthru.bundleUrl}"
+    ln -s $out/bin/tectonic $out/bin/nextonic
+  '';
+
+  meta = tectonic-unwrapped.meta // {
+    description = "Tectonic TeX/LaTeX engine, wrapped with a compatible biber";
+    maintainers = with lib.maintainers; [ doronbehar bryango ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/ted/default.nix b/nixpkgs/pkgs/tools/typesetting/ted/default.nix
new file mode 100644
index 000000000000..eb9178c33b83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/ted/default.nix
@@ -0,0 +1,84 @@
+{ lib, stdenv, fetchurl, pkg-config, zlib, pcre, xorg, libjpeg, libtiff, libpng, gtk2, libpaper, makeWrapper, ghostscript }:
+
+stdenv.mkDerivation rec {
+  pname = "ted";
+  version = "2.23";
+
+  src = fetchurl {
+    url = "http://ftp.nluug.nl/pub/editors/${pname}/${pname}-${version}.src.tar.gz";
+    sha256 = "0v1ipynyjklb3chd1vq26a21sjjg66sir57gi2kkrbwnpk195a9z";
+  };
+
+  preConfigure = ''
+    mkdir pkgconfig-append
+    pushd pkgconfig-append
+
+    # ted looks for libtiff, not libtiff-4 in its pkg-config invokations
+    cp ${libtiff.dev}/lib/pkgconfig/libtiff-4.pc libtiff.pc
+
+    # ted needs a libpaper pkg-config file
+    cat > libpaper.pc << EOF
+    prefix=${libpaper}
+    libdir=${libpaper}/lib
+    includedir=${libpaper}/include
+    exec_prefix=\''${prefix}
+
+    Name: libpaper
+    Version: ${libpaper.version}
+    Description: ${libpaper.meta.description}
+    Libs: -L\''${libdir} -lpaper
+    Cflags: -I\''${includedir}
+    EOF
+
+    export PKG_CONFIG_PATH="$PWD:$PKG_CONFIG_PATH"
+
+    popd
+  '';
+
+  makeFlags = [ "CONFIGURE_OPTIONS=--with-GTK" "CONFIGURE_OPTIONS+=--prefix=$(out)" "compile.shared" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    make tedPackage/makefile
+    pushd tedPackage
+    substituteInPlace makefile --replace /usr ""
+    make PKGDESTDIR=$out datadir
+    popd
+
+    pushd $out/share/Ted/examples
+    for f in rtf2*.sh
+    do
+        makeWrapper "$PWD/$f" "$out/bin/$f" --prefix PATH : $out/bin:${lib.makeBinPath [ ghostscript ]}
+    done
+    popd
+
+    cp -v Ted/Ted $out/bin
+
+    runHook postInstall
+  '';
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ zlib pcre xorg.libX11 xorg.libICE xorg.libSM xorg.libXpm libjpeg libtiff libpng gtk2 libpaper ];
+
+  meta = with lib; {
+    description = "An easy rich text processor";
+    longDescription = ''
+      Ted is a text processor running under X Windows on Unix/Linux systems.
+      Ted was developed as a standard easy light weight word processor, having
+      the role of Wordpad on MS-Windows. Since then, Ted has evolved to a real
+      word processor. It still has the same easy appearance and the same speed
+      as the original. The possibility to type a letter, a note or a report
+      with a simple light weight program on a Unix/Linux machine is clearly
+      missing. Ted was made to make it possible to edit rich text documents on
+      Unix/Linux in a wysiwyg way. RTF files from Ted are fully compatible with
+      MS-Word. Additionally, Ted also is an RTF to PostScript and an RTF to
+      Acrobat PDF converter.
+    '';
+    homepage    = "https://nllgg.nl/Ted/";
+    license     = licenses.gpl2;
+    platforms   = platforms.all;
+    broken      = stdenv.isDarwin;
+    maintainers = with maintainers; [ obadz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/advi/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/advi/default.nix
new file mode 100644
index 000000000000..ff20a10c5cf4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/advi/default.nix
@@ -0,0 +1,71 @@
+{ fetchurl
+, lib
+, makeWrapper
+, writeShellScriptBin
+, ghostscriptX
+, ocamlPackages
+, texliveMedium
+, which
+}:
+
+let
+  # simplified fake-opam edited from tweag's opam-nix
+  fake-opam = writeShellScriptBin "opam" ''
+    case "$1 $2" in
+      "config var")
+        case "$3" in
+          man) echo "$out/share/man";;
+          etc) echo "$out/etc";;
+          doc) echo "$out/share/doc";;
+          share) echo "$out/share";;
+          prefix) echo "$out";;
+          *) echo "fake-opam does not understand arguments: $@" ; exit 1 ;;
+        esac;;
+      *) echo "fake-opam does not understand arguments: $@" ; exit 1 ;;
+    esac
+  '';
+
+  # texlive currently does not symlink kpsexpand
+  kpsexpand = writeShellScriptBin "kpsexpand" ''
+    exec kpsetool -v
+  '';
+in
+ocamlPackages.buildDunePackage rec {
+  pname = "advi";
+  version = "2.0.0";
+
+  minimalOCamlVersion = "4.11";
+
+  src = fetchurl {
+    url = "http://advi.inria.fr/advi-${version}.tar.gz";
+    hash = "sha256-c0DQHlvdekJyXCxmR4+Ut/njtoCzmqX6hNazNv8PpBQ=";
+  };
+
+  postPatch = ''
+    substituteInPlace ./Makefile \
+      --replace "\$(DUNE) install \$(DUNEROOT) --display=short" \
+      "\$(DUNE) install \$(DUNEROOT) --prefix $out --docdir $out/share/doc --mandir $out/share/man"
+    substituteInPlace ./src/discover.sh \
+      --replace 'gs_path=$(which gs)' 'gs_path=${ghostscriptX}/bin/gs'
+  '';
+
+  duneVersion = "3";
+
+  nativeBuildInputs = [ fake-opam kpsexpand makeWrapper texliveMedium which ];
+  buildInputs = with ocamlPackages; [ camlimages ghostscriptX graphics ];
+
+  # install additional files (such as man pages)
+  preInstall = ''
+    make install
+  '';
+
+  # TODO: redirect /share/advi/tex/latex to tex output compatible with texlive.combine
+  # (requires patching check() in advi-latex-files)
+
+  meta = with lib; {
+    homepage = "http://advi.inria.fr/";
+    description = "A Unix-platform DVI previewer and a programmable presenter for slides written in LaTeX";
+    license = licenses.lgpl21Only;
+    maintainers = [ maintainers.xworld21 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/auctex/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/auctex/default.nix
new file mode 100644
index 000000000000..dc027b5c470e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/auctex/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, emacs, texliveBasic, ghostscript }:
+
+let auctex = stdenv.mkDerivation ( rec {
+  # Make this a valid tex(live-new) package;
+  # the pkgs attribute is provided with a hack below.
+  pname = "auctex";
+  version = "13.2";
+  tlType = "run";
+
+  outputs = [ "out" "tex" ];
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    hash = "sha256-Hn5AKrz4RmlOuncZklvwlcI+8zpeZgIgHHS2ymCUQDU=";
+  };
+
+  buildInputs = [
+    emacs
+    ghostscript
+    (texliveBasic.withPackages (ps: [ ps.etoolbox ps.hypdoc ]))
+  ];
+
+  preConfigure = ''
+    mkdir -p "$tex"
+    export HOME=$(mktemp -d)
+  '';
+
+  configureFlags = [
+    "--with-lispdir=\${out}/share/emacs/site-lisp"
+    "--with-texmf-dir=\${tex}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/auctex";
+    description = "Extensible package for writing and formatting TeX files in GNU Emacs and XEmacs";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+  };
+});
+
+in auctex // { pkgs = [ auctex.tex ]; }
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/blahtexml/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/blahtexml/default.nix
new file mode 100644
index 000000000000..fb7605924023
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/blahtexml/default.nix
@@ -0,0 +1,58 @@
+{ fetchFromGitHub, lib, stdenv, libiconv, texliveFull, xercesc }:
+
+stdenv.mkDerivation rec {
+  pname = "blahtexml";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "gvanas";
+    repo = "blahtexml";
+    rev = "v${version}";
+    hash = "sha256-DL5DyfARHHbwWBVHSa/VwHzNaAx/v7EDdnw1GLOk+y0=";
+  };
+
+  postPatch = lib.optionalString stdenv.cc.isClang ''
+    substituteInPlace makefile \
+      --replace "\$(CXX)" "\$(CXX) -std=c++98"
+  '' +
+  # fix the doc build on TeX Live 2023
+  ''
+    substituteInPlace Documentation/manual.tex \
+      --replace '\usepackage[utf8x]{inputenc}' '\usepackage[utf8]{inputenc}'
+  '';
+
+  outputs = [ "out" "doc" ];
+
+  nativeBuildInputs = [ texliveFull ]; # scheme-full needed for ucs package
+  buildInputs = [ xercesc ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
+
+  buildFlags =
+    [ "doc" ] ++
+    (if stdenv.isDarwin
+     then [ "blahtex-mac" "blahtexml-mac" ]
+     else [ "blahtex-linux" "blahtexml-linux" ]);
+
+  installPhase = ''
+    install -D -t "$out/bin" blahtex blahtexml
+    install -m644 -D -t "$doc/share/doc/blahtexml" Documentation/manual.pdf
+  '';
+
+  meta = with lib; {
+    homepage = "http://gva.noekeon.org/blahtexml/";
+    description = "A TeX to MathML converter";
+    longDescription = ''
+      Blahtex is a program written in C++, which converts an equation given in
+      a syntax close to TeX into MathML. It is designed by David Harvey and is
+      aimed at supporting equations in MediaWiki.
+
+      Blahtexml is a simple extension of blahtex, written by Gilles Van Assche.
+      In addition to the functionality of blahtex, blahtexml has XML processing
+      in mind and is able to process a whole XML document into another XML
+      document. Instead of converting only one formula at a time, blahtexml can
+      convert all the formulas of the given XML file into MathML.
+    '';
+    license = licenses.bsd3;
+    maintainers = [ maintainers.xworld21 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/catdvi/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/catdvi/default.nix
new file mode 100644
index 000000000000..1958a2f4c073
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/catdvi/default.nix
@@ -0,0 +1,91 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchpatch
+, texlive
+, texliveInfraOnly
+, buildPackages
+}:
+
+let
+  buildPlatformTools = [ "pse2unic" "adobe2h" ];
+  tex = texliveInfraOnly.withPackages (ps: [ ps.collection-fontsrecommended ]);
+in
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "catdvi";
+  version = "0.14";
+  src = fetchurl {
+    url = with finalAttrs; "http://downloads.sourceforge.net/${pname}/${pname}-${version}.tar.bz2";
+    hash = "sha256-orVQVdQuRXp//OGkA7xRidNi4+J+tkw398LPZ+HX+k8=";
+  };
+
+  patches = [
+    # fix error: conflicting types for 'kpathsea_version_string'; have 'char *'
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/catdvi/0.14-14/debian/patches/03_kpathsea_version_string_declaration.diff";
+      hash = "sha256-d3CPDxXdVVLNtKkN0rC2G02dh/bJrRll/nVzQNggwkk=";
+    })
+  ];
+
+  # fix implicit-int compile error in test code used in configure script
+  postPatch = ''
+    sed -i 's/^main()/int main()/' configure
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  outputs = [ "out" ] ++ lib.optional (with stdenv; buildPlatform.canExecute hostPlatform) "dev";
+
+  setOutputFlags = false;
+
+  enableParallelBuilding = true;
+
+  preBuild = lib.optionalString (with stdenv; !buildPlatform.canExecute hostPlatform)
+    (lib.concatMapStringsSep "\n" (tool: ''
+      cp ${lib.getDev buildPackages.catdvi}/bin/${tool} .
+    '') buildPlatformTools);
+
+  nativeBuildInputs = [
+    texlive.bin.core
+    texlive.bin.core.dev
+  ];
+
+  buildInputs = [
+    tex
+  ];
+
+  makeFlags = [
+    "catdvi"  # to avoid running tests until checkPhase
+  ] ++ lib.optionals (with stdenv; !buildPlatform.canExecute hostPlatform)
+    (map (tool: "--assume-old=${tool}") buildPlatformTools);
+
+  nativeCheckInputs = [
+    texlive
+  ];
+
+  testFlags = [
+    "all1"
+  ];
+
+  preInstall = ''
+    mkdir -p $out/{bin,man/man1}
+  '';
+
+  postInstall = lib.optionalString (with stdenv; buildPlatform.canExecute hostPlatform) ''
+    mkdir -p $dev/bin
+    ${lib.concatMapStringsSep "\n" (tool: ''
+      cp ${tool} $dev/bin/
+    '') buildPlatformTools}
+  '' + ''
+    mkdir -p $out/share
+    ln -s ${tex}/share/texmf-var $out/share/texmf
+  '';
+
+  meta = with lib; {
+    homepage = "http://catdvi.sourceforge.net";
+    description = "A DVI to plain text translator";
+    license = licenses.gpl2;
+    maintainers = [ ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/dblatex/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/dblatex/default.nix
new file mode 100644
index 000000000000..1f3fd13d2863
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/dblatex/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv, fetchurl, python3, libxslt, texliveBasic
+, enableAllFeatures ? false, imagemagick, fig2dev, inkscape, fontconfig, ghostscript
+
+, tex ? texliveBasic.withPackages (ps: with ps; [ # satisfy all packages that ./configure mentions
+    epstopdf anysize appendix changebar
+    fancybox fancyvrb float footmisc listings jknapltx/*for mathrsfs.sty*/
+    multirow overpic pdfpages pdflscape graphics stmaryrd subfigure titlesec wasysym
+    # pkgs below don't seem requested by dblatex, but our manual fails without them
+    ec zapfding symbol eepic times rsfs cs tex4ht courier helvetic ly1
+  ])
+}:
+
+# NOTE: enableAllFeatures just purifies the expression, it doesn't actually
+# enable any extra features.
+
+stdenv.mkDerivation rec {
+  pname = "dblatex${lib.optionalString enableAllFeatures "-full"}";
+  version = "0.3.12";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dblatex/${pname}3-${version}.tar.bz2";
+    sha256 = "0yd09nypswy3q4scri1dg7dr99d7gd6r2dwx0xm81l9f4y32gs0n";
+  };
+
+  buildInputs = [ python3 libxslt tex ]
+    ++ lib.optionals enableAllFeatures [ imagemagick fig2dev ];
+
+  # TODO: dblatex tries to execute texindy command, but nixpkgs doesn't have
+  # that yet. In Ubuntu, texindy is a part of the xindy package.
+  preConfigure = ''
+    sed -i 's|self.install_layout == "deb"|False|' setup.py
+  '' + lib.optionalString enableAllFeatures ''
+    for file in $(find -name "*.py"); do
+        sed -e 's|cmd = \["xsltproc|cmd = \["${libxslt.bin}/bin/xsltproc|g' \
+            -e 's|Popen(\["xsltproc|Popen(\["${libxslt.bin}/bin/xsltproc|g' \
+            -e 's|cmd = \["texindy|cmd = ["nixpkgs_is_missing_texindy|g' \
+            -e 's|cmd = "epstopdf|cmd = "${tex}/bin/epstopdf|g' \
+            -e 's|cmd = \["makeindex|cmd = ["${tex}/bin/makeindex|g' \
+            -e 's|doc.program = "pdflatex"|doc.program = "${tex}/bin/pdflatex"|g' \
+            -e 's|self.program = "latex"|self.program = "${tex}/bin/latex"|g' \
+            -e 's|Popen("pdflatex|Popen("${tex}/bin/pdflatex|g' \
+            -e 's|"fc-match"|"${fontconfig.bin}/bin/fc-match"|g' \
+            -e 's|"fc-list"|"${fontconfig.bin}/bin/fc-list"|g' \
+            -e 's|cmd = "inkscape|cmd = "${inkscape}/bin/inkscape|g' \
+            -e 's|cmd = "fig2dev|cmd = "${fig2dev}/bin/fig2dev|g' \
+            -e 's|cmd = \["ps2pdf|cmd = ["${ghostscript}/bin/ps2pdf|g' \
+            -e 's|cmd = "convert|cmd = "${imagemagick.out}/bin/convert|g' \
+            -i "$file"
+    done
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    ${python3.interpreter} ./setup.py install --prefix="$out" --use-python-path --verbose
+  '';
+
+  passthru = { inherit tex; };
+
+  meta = {
+    description = "A program to convert DocBook to DVI, PostScript or PDF via LaTeX or ConTeXt";
+    homepage = "https://dblatex.sourceforge.net/";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/gladtex/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/gladtex/default.nix
new file mode 100644
index 000000000000..2d2cd37442f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/gladtex/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
+
+python3Packages.buildPythonPackage rec {
+  pname = "gladtex";
+  version = "unstable-2023-01-22";
+
+  src = fetchFromGitHub {
+    owner = "humenda";
+    repo = "GladTeX";
+    rev = "f84e63836622ff1325dfddc7c5649f11a795afa0";
+    sha256 = "sha256-B5sNEmLO4iIJRDgcPhr9LFKV77dPJws8ITNz4R+FE08=";
+  };
+
+  meta = with lib; {
+    description = "Embed LaTeX formulas into HTML documents as SVG images";
+    homepage = "https://humenda.github.io/GladTeX";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ alyaeanyx ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/latexrun/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/latexrun/default.nix
new file mode 100644
index 000000000000..3a163a5682d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/latexrun/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenvNoCC, fetchFromGitHub, python3 }:
+
+stdenvNoCC.mkDerivation {
+  pname = "latexrun";
+  version = "unstable-2015-11-18";
+  src = fetchFromGitHub {
+    owner = "aclements";
+    repo = "latexrun";
+    rev = "38ff6ec2815654513c91f64bdf2a5760c85da26e";
+    sha256 = "0xdl94kn0dbp6r7jk82cwxybglm9wp5qwrjqjxmvadrqix11a48w";
+  };
+
+  buildInputs = [ python3 ];
+
+  dontBuild = true;
+  installPhase = ''
+    mkdir -p $out/bin
+    cp latexrun $out/bin/latexrun
+    chmod +x $out/bin/latexrun
+  '';
+
+  meta = with lib; {
+    description = "A 21st century LaTeX wrapper";
+    homepage = "https://github.com/aclements/latexrun";
+    license = licenses.mit;
+    maintainers = [ maintainers.lucus16 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/lkproof/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/lkproof/default.nix
new file mode 100644
index 000000000000..6b866b43d1b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/lkproof/default.nix
@@ -0,0 +1,23 @@
+{lib, stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation {
+  pname = "lkproof";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://mirror.ctan.org/macros/latex/contrib/lkproof.zip";
+    sha256 = "1qjkjhpc4rm62qxn18r83zdlwnj1wvnkcpdiqlv7w4bakh0gvjly";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = "
+    mkdir -p $out/share/texmf-nix/tex/generic/lkproof
+    cp -prd *.sty $out/share/texmf-nix/tex/generic/lkproof
+  ";
+
+  meta = with lib; {
+    platforms = platforms.unix;
+    license = licenses.gpl1Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/mftrace/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/mftrace/default.nix
new file mode 100644
index 000000000000..7acc7c81b28f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/mftrace/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, makeWrapper
+, autoreconfHook
+, python3
+, fontforge
+, potrace
+, texlive
+}:
+
+/*
+  To use with a texlive distribution, ensure that the desired fonts and
+  the packages kpathsea, t1utils, metafont are available at runtime.
+
+  Possible overrides:
+  - potrace = autotrace
+  - fontforge = ghostscript (limited functionality)
+  - fontforge = null (limited functionality)
+*/
+
+stdenv.mkDerivation (finalAttrs: rec {
+  pname = "mftrace";
+  version = "1.2.20";
+
+  # https://lilypond.org/download/sources/mftrace/mftrace-1.2.20.tar.gz
+  # is incomplete, fetch repo and use autoconf instead
+  # see https://github.com/hanwen/mftrace/issues/13
+  src = fetchFromGitHub {
+    owner = "hanwen";
+    repo = "mftrace";
+    rev = "release/${version}";
+    sha256 = "02ik25aczkbi10jrjlnxby3fmixxrwm2k5r4fkfif3bjfym7nqbc";
+  };
+
+  nativeBuildInputs = [ makeWrapper autoreconfHook python3 potrace ];
+
+  buildInputs = [ fontforge potrace ];
+
+  postInstall = ''
+    wrapProgram $out/bin/mftrace --prefix PATH : ${lib.makeBinPath finalAttrs.buildInputs}
+  '';
+
+  # experimental texlive.combine support
+  # (note that only the bin/ folder will be combined into texlive)
+  passthru.tlDeps = with texlive; [ kpathsea t1utils metafont ];
+
+  meta = with lib; {
+    description = "Scalable PostScript Fonts for MetaFont";
+    longDescription = ''
+      mftrace is a small Python program that lets you trace a TeX bitmap
+      font into a PFA or PFB font (A PostScript Type1 Scalable Font) or
+      TTF (TrueType) font.
+    '';
+    homepage = "https://lilypond.org/mftrace/";
+    license = with licenses; [ gpl2Only mit ];
+    maintainers = with maintainers; [ xworld21 ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/animatedot.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/animatedot.sh
new file mode 100644
index 000000000000..f038b83ff7ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/animatedot.sh
@@ -0,0 +1,9 @@
+source $stdenv/setup
+
+mkdir -p $out
+
+for ((i = 1; i <= $nrFrames; i++)); do
+    echo "producing frame $i...";
+    targetName=$out/$(basename $(stripHash $dotGraph) .dot)-f-$i.dot
+    cpp -DFRAME=$i < $dotGraph > $targetName
+done
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl b/nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl
new file mode 100644
index 000000000000..2cec62fc7cb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl
@@ -0,0 +1,43 @@
+use strict;
+use File::Basename;
+
+sub createDirs;
+sub createDirs {
+    my $path = shift;
+    return unless $path =~ /^(.*)\/([^\/]*)$/;
+    my $dir = $1;
+    return if -d $dir;
+    return if -e $dir;
+    createDirs $dir;
+    mkdir $dir or die "cannot create directory `$dir'";
+}
+
+my $maxParents = 0;
+for (my $n = 0; $n < @ARGV; $n += 2) {
+    my $fullPath = $ARGV[$n];
+    my $relPath = $ARGV[$n + 1];
+    my $parents = 0;
+    foreach my $comp (split /\//, $relPath) {
+        $parents++ if ($comp eq "..") 
+    }
+    $maxParents = $parents if $parents > $maxParents;
+}
+
+my $startDir = "./";
+for (my $n = 0; $n < $maxParents; $n++) {
+    $startDir .= "dotdot/";
+    mkdir "$startDir" or die "cannot create directory `$startDir': $!";
+}
+
+chdir $startDir or die;
+
+for (my $n = 0; $n < @ARGV; $n += 2) {
+    my $fullPath = $ARGV[$n];
+    my $relPath = $ARGV[$n + 1];
+
+    createDirs $relPath;
+        
+    symlink $fullPath, $relPath or die "cannot create symlink `$relPath'";
+}
+
+print "$startDir\n";
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/nix/default.nix
new file mode 100644
index 000000000000..e9017333c943
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/default.nix
@@ -0,0 +1,250 @@
+pkgs:
+
+rec {
+
+
+  runLaTeX =
+    { rootFile
+    , generatePDF ? true # generate PDF, not DVI
+    , generatePS ? false # generate PS in addition to DVI
+    , extraFiles ? []
+    , compressBlanksInIndex ? true
+    , packages ? []
+    , texPackages ? {}
+    , copySources ? false
+    }:
+
+    assert generatePDF -> !generatePS;
+
+    let
+      tex = pkgs.texlive.combine
+        # always include basic stuff you need for LaTeX
+        ({inherit (pkgs.texlive) scheme-basic;} // texPackages);
+    in
+
+    pkgs.stdenv.mkDerivation {
+      name = "doc";
+
+      builder = ./run-latex.sh;
+      copyIncludes = ./copy-includes.pl;
+
+      inherit rootFile generatePDF generatePS extraFiles
+        compressBlanksInIndex copySources;
+
+      includes = map (x: [x.key (baseNameOf (toString x.key))])
+        (findLaTeXIncludes {inherit rootFile;});
+
+      buildInputs = [ tex pkgs.perl ] ++ packages;
+    };
+
+
+  # Returns the closure of the "dependencies" of a LaTeX source file.
+  # Dependencies are other LaTeX source files (e.g. included using
+  # \input{}), images (e.g. \includegraphics{}), bibliographies, and
+  # so on.
+  findLaTeXIncludes =
+    { rootFile
+    }:
+
+    builtins.genericClosure {
+      startSet = [{key = rootFile;}];
+
+      operator =
+        {key, ...}:
+
+        let
+
+          # `find-includes.pl' returns the dependencies of the current
+          # source file (`key') as a list, e.g. [{type = "tex"; name =
+          # "introduction.tex";} {type = "img"; name = "example"}].
+          # The type denotes the kind of dependency, which determines
+          # what extensions we use to look for it.
+          deps = import (pkgs.runCommand "latex-includes"
+            { rootFile = baseNameOf (toString rootFile); src = key; }
+            "${pkgs.perl}/bin/perl ${./find-includes.pl}");
+
+          # Look for the dependencies of `key', trying various
+          # extensions determined by the type of each dependency.
+          # TODO: support a search path.
+          foundDeps = dep: xs:
+            let
+              exts =
+                if dep.type == "img" then [".pdf" ".png" ".ps" ".jpg"]
+                else if dep.type == "tex" then [".tex" ""]
+                else [""];
+              fn = pkgs.lib.findFirst (fn: builtins.pathExists fn) null
+                (map (ext: dirOf key + ("/" + dep.name + ext)) exts);
+            in if fn != null then [{key = fn;}] ++ xs
+               else xs;
+
+        in pkgs.lib.foldr foundDeps [] deps;
+    };
+
+
+  findLhs2TeXIncludes =
+    { lib
+    , rootFile
+    }:
+
+    builtins.genericClosure {
+      startSet = [{key = rootFile;}];
+
+      operator =
+        {key, ...}:
+
+        let
+
+          deps = import (pkgs.runCommand "lhs2tex-includes"
+            { src = key; }
+            "${pkgs.stdenv.bash}/bin/bash ${./find-lhs2tex-includes.sh}");
+
+        in pkgs.lib.concatMap (x: lib.optionals (builtins.pathExists x) [{key = x;}])
+                              (map (x: dirOf key + ("/" + x)) deps);
+    };
+
+  dot2pdf =
+    { dotGraph
+    }:
+
+    pkgs.stdenv.mkDerivation {
+      name = "pdf";
+      builder = ./dot2pdf.sh;
+      inherit dotGraph fontsConf;
+      buildInputs = [
+        pkgs.perl pkgs.graphviz
+      ];
+    };
+
+
+  dot2ps =
+    { dotGraph
+    }:
+
+    pkgs.stdenv.mkDerivation {
+      name = "ps";
+      builder = ./dot2ps.sh;
+      inherit dotGraph;
+      buildInputs = [
+        pkgs.perl pkgs.graphviz pkgs.ghostscript
+      ];
+    };
+
+  lhs2tex =
+    { source, flags ? null } :
+    pkgs.stdenv.mkDerivation {
+      name = "tex";
+      builder = ./lhs2tex.sh;
+      inherit source flags;
+      buildInputs = [ pkgs.lhs2tex pkgs.perl ];
+      copyIncludes = ./copy-includes.pl;
+      includes = map (x: [x.key (baseNameOf (toString x.key))])
+        (findLhs2TeXIncludes {rootFile = source;});
+    };
+
+  animateDot = dotGraph: nrFrames: pkgs.stdenv.mkDerivation {
+    name = "dot-frames";
+    builder = ./animatedot.sh;
+    inherit dotGraph nrFrames;
+  };
+
+
+  # Wrap a piece of TeX code in a document.  Useful when generating
+  # inline images from TeX code.
+  wrapSimpleTeX =
+    { preamble ? null
+    , body
+    , name ? baseNameOf (toString body)
+    }:
+
+    pkgs.stdenv.mkDerivation {
+      inherit name preamble body;
+      buildCommand = ''
+        touch $out
+        echo '\documentclass{article}' >> $out
+        echo '\pagestyle{empty}' >> $out
+        if test -n "$preamble"; then cat $preamble >> $out; fi
+        echo '\begin{document}' >> $out
+        cat $body >> $out
+        echo '\end{document}' >> $out
+      '';
+    };
+
+
+  # Convert a Postscript file to a PNG image, trimming it so that
+  # there is no unnecessary surrounding whitespace.
+  postscriptToPNG =
+    { postscript
+    }:
+
+    pkgs.stdenv.mkDerivation {
+      name = "png";
+      inherit postscript;
+
+      buildInputs = [pkgs.imagemagick pkgs.ghostscript];
+
+      buildCommand = ''
+        if test -d $postscript; then
+          input=$(ls $postscript/*.ps)
+        else
+          input=$(stripHash $postscript)
+          ln -s $postscript $input
+        fi
+
+        mkdir -p $out
+        convert -units PixelsPerInch \
+          -density 600 \
+          -trim \
+          -matte \
+          -transparent '#ffffff' \
+          -type PaletteMatte \
+          +repage \
+          $input \
+          "$out/$(basename $input .ps).png"
+      ''; # */
+    };
+
+
+  # Convert a piece of TeX code to a PNG image.
+  simpleTeXToPNG =
+    { preamble ? null
+    , body
+    , packages ? []
+    }:
+
+    postscriptToPNG {
+      postscript = runLaTeX {
+        rootFile = wrapSimpleTeX {
+          inherit body preamble;
+        };
+        inherit packages;
+        generatePDF = false;
+        generatePS = true;
+      };
+    };
+
+
+  # Convert a piece of TeX code to a PDF.
+  simpleTeXToPDF =
+    { preamble ? null
+    , body
+    , packages ? []
+    }:
+
+    runLaTeX {
+      rootFile = wrapSimpleTeX {
+        inherit body preamble;
+      };
+      inherit packages;
+    };
+
+
+  # Some tools (like dot) need a fontconfig configuration file.
+  # This should be extended to allow the called to add additional
+  # fonts.
+  fontsConf = pkgs.makeFontsConf {
+    fontDirectories = [
+      "${pkgs.ghostscript}/share/ghostscript/fonts"
+    ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2pdf.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2pdf.sh
new file mode 100644
index 000000000000..71cf601dfac0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2pdf.sh
@@ -0,0 +1,20 @@
+source $stdenv/setup
+
+mkdir -p $out
+
+dot2pdf() {
+    sourceFile=$1
+    targetName=$out/$(basename $(stripHash $sourceFile) .dot).pdf
+    echo "converting $sourceFile to $targetName..."
+    export FONTCONFIG_FILE=$fontsConf
+    dot -Tpdf $sourceFile > $targetName
+}
+
+for i in $dotGraph; do
+    if test -d $i; then
+        for j in $i/*; do dot2pdf $j; done
+    else
+        dot2pdf $i
+    fi
+done
+
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2ps.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2ps.sh
new file mode 100644
index 000000000000..dd8de4a23dbc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2ps.sh
@@ -0,0 +1,19 @@
+source $stdenv/setup
+
+mkdir -p $out
+
+dot2ps() {
+    sourceFile=$1
+    targetName=$out/$(basename $(stripHash $sourceFile) .dot).ps
+    echo "converting $sourceFile to $targetName..."
+    dot -Tps $sourceFile > $targetName
+}
+
+for i in $dotGraph; do
+    if test -d $i; then
+        for j in $i/*; do dot2ps $j; done
+    else
+        dot2ps $i
+    fi
+done
+
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/find-includes.pl b/nixpkgs/pkgs/tools/typesetting/tex/nix/find-includes.pl
new file mode 100644
index 000000000000..41675e939f60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/find-includes.pl
@@ -0,0 +1,69 @@
+use strict;
+use File::Basename;
+
+my $src = $ENV{"src"};
+my $out = $ENV{"out"};
+my $path = $ENV{"searchRelativeTo"};
+
+open OUT, ">$out" or die;
+print OUT "[\n";
+
+open FILE, "< $src" or die;
+
+sub addName {
+    my ($type, $name) = @_;
+    print OUT "{ type = \"$type\"; name = \"$name\"; }\n";
+}
+    
+while (<FILE>) {
+    if (/\\input\{(.*)\}/) {
+        my $fn2 = $1;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "tex", "$fn2";
+    } elsif (/\\input (.*)$/) {
+        my $fn2 = $1;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "tex", "$fn2";
+    } elsif (/\\RequirePackage(\[.*\])?\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "misc", "$fn2.sty";
+    } elsif (/\\usepackage(\[.*\])?\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "misc", "$fn2.sty";
+    } elsif (/\\documentclass(\[.*\])?\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "misc", "$fn2.cls";
+    } elsif (/\\bibliographystyle\{(.*)\}/) {
+        my $fn2 = $1;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "misc", "$fn2.bst";
+    } elsif (/\\bibliography\{(.*)\}/) {
+        foreach my $bib (split /,/, $1) {
+            $bib =~ s/^\s+//; # remove leading / trailing whitespace
+            $bib =~ s/\s+$//;
+            addName "misc", "$bib.bib";
+            addName "misc", (basename($ENV{"rootFile"}, ".tex", ".ltx") . ".bbl");
+        }
+    } elsif (/\\includegraphics(\[.*\])?\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "img", "$fn2";
+    } elsif (/\\pgfdeclareimage(\[.*\])?\{.*\}\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "img", "$fn2";
+    } elsif (/\\pgfimage(\[.*\])?\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "img", "$fn2";
+    }
+    # !!! also support \usepackage
+}
+
+close FILE;
+
+print OUT "]\n";
+close OUT;
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/find-lhs2tex-includes.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/find-lhs2tex-includes.sh
new file mode 100644
index 000000000000..2dc12aa517a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/find-lhs2tex-includes.sh
@@ -0,0 +1,3 @@
+echo '[' > $out
+grep '^%include ' $src | cut -d ' ' -f 2 | sed 's/^\(.*\)$/"\1"/' >> $out
+echo ']' >> $out
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/lhs2tex.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/lhs2tex.sh
new file mode 100644
index 000000000000..bfef3df6b0e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/lhs2tex.sh
@@ -0,0 +1,19 @@
+source $stdenv/setup
+
+mkdir -p $out
+
+mkdir root
+cd root
+
+startDir=$(perl $copyIncludes $includes)
+cd $startDir
+
+lhstex() {
+    sourceFile=$1
+    targetName=$out/$(basename $(stripHash $sourceFile) .lhs).tex
+    echo "converting $sourceFile to $targetName..."
+    lhs2TeX -o "$targetName" $flags "$sourceFile"
+}
+
+lhstex $source
+
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/run-latex.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/run-latex.sh
new file mode 100644
index 000000000000..3f8a16580ea5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/run-latex.sh
@@ -0,0 +1,164 @@
+source $stdenv/setup
+
+mkdir -p $out
+
+export VARTEXFONTS=$TMPDIR/texfonts
+export TEXMFCNF=$TMPDIR:
+echo 'max_print_line = 8192' >> $TMPDIR/texmf.cnf
+
+mkdir root
+cd root
+
+startDir=$(perl $copyIncludes $includes)
+cd $startDir
+
+for i in $extraFiles; do
+    if test -d $i; then
+        ln -s $i/* .
+    else
+        ln -s $i $(stripHash $i)
+    fi
+done
+
+rootName=$(basename $(stripHash "$rootFile"))
+
+rootNameBase=$(echo "$rootName" | sed 's/\..*//')
+
+if test -n "$generatePDF"; then
+    latex=pdflatex
+else
+    latex=latex
+fi
+
+latexFlags="-file-line-error"
+tmpFile=$out/log
+
+showError() {
+    echo
+    echo "LATEX ERROR (LAST LOG LINES SHOWN):"
+    tail -n 20 $tmpFile
+    bzip2 $tmpFile
+    exit 1
+}
+
+pass=0
+
+runLaTeX() {
+    ((pass=pass+1))
+    echo "PASS $pass..."
+    if ! $latex $latexFlags $rootName >$tmpFile 2>&1; then showError; fi
+    runNeeded=
+    if fgrep -q \
+        -e "LaTeX Warning: Label(s) may have changed." \
+        -e "Rerun to get citations correct." \
+        -e "Please rerun LaTeX." \
+        "$tmpFile"; then
+        runNeeded=1
+    fi
+    echo
+}
+
+echo
+
+
+if test -n "$copySources"; then
+    cp -prd $TMPDIR/root $out/tex-srcs
+fi
+
+
+runLaTeX
+
+for auxFile in $(find . -name "*.aux"); do
+    # Run bibtex to process all bibliographies.  There may be several
+    # when we're using the multibib package.
+    if grep -q '\\citation' $auxFile; then
+        auxBase=$(basename $auxFile .aux)
+        if [ -e $auxBase.bbl ]; then
+            echo "SKIPPING BIBTEX ON $auxFile!"
+        else
+            echo "RUNNING BIBTEX ON $auxFile..."
+            bibtex --terse $auxBase
+            cp $auxBase.bbl $out
+            runNeeded=1
+        fi
+        echo
+    fi
+
+    # "\pgfsyspdfmark" in the aux file seems to indicate that PGF/TikZ
+    # requires a second run (e.g. to resolve arrows between pictures).
+    if grep -q pgfsyspdfmark $auxFile; then
+        runNeeded=1
+    fi
+done
+
+if test "$runNeeded"; then
+    runLaTeX
+fi
+
+
+if test -f $rootNameBase.idx; then
+    echo "MAKING INDEX..."
+    if test -n "$compressBlanksInIndex"; then
+        makeindexFlags="$makeindexFlags -c"
+    fi
+    makeindex $makeindexFlags $rootNameBase.idx
+    runNeeded=1
+    echo
+fi
+
+# We check that pass is less than 2 to catch situations where the document is
+# simple enough (no bibtex, etc.) so that it would otherwise require only one
+# pass but also contains a ToC.
+# In essence this check ensures that we do at least two passes on all documents.
+if test "$runNeeded" = 1 -o "$pass" -lt 2 ; then
+    runLaTeX
+fi
+
+if test "$runNeeded"; then
+    runLaTeX
+fi
+
+
+if test "$runNeeded"; then
+    echo "Hm, still not done :-("
+    echo
+fi
+
+
+if test -n "$generatePDF"; then
+    cp $rootNameBase.pdf $out
+else
+    cp $rootNameBase.dvi $out
+    if test -n "$generatePS"; then
+        echo "CONVERTING TO POSTSCRIPT..."
+        dvips $rootNameBase.dvi -o $out/$rootNameBase.ps
+        echo
+    fi
+fi
+
+
+echo "WARNINGS:"
+cat $tmpFile | grep "Warning:" | grep -v "Citation.*undefined" || true
+
+echo
+echo "OVERFULL/UNDERFULL:"
+cat $tmpFile | egrep "Overfull|Underfull" || true
+
+echo
+echo "UNDEFINED REFERENCES:"
+cat $tmpFile | grep "Reference.*undefined" || true
+
+echo
+echo "UNDEFINED CITATIONS:"
+cat $tmpFile | grep "Citation.*undefined" || true
+
+echo
+echo "STATS:"
+printf "%5d overfull/underfull h/vboxes\n" $(cat $tmpFile | egrep -c "Overfull|Underfull" || true)
+printf "%5d undefined references\n" $(cat $tmpFile | grep -c "Reference.*undefined" || true)
+printf "%5d undefined citations\n" $(cat $tmpFile | grep -c "Citation.*undefined" || true)
+printf "%5d pages\n" \
+    $(cat $tmpFile | grep "Output written.*(.*pages" | sed "s/.*(\([0-9]*\) pages.*/\1/" || true)
+echo
+
+bzip2 $tmpFile
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-1.x.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-1.x.nix
new file mode 100644
index 000000000000..25c65d081911
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-1.x.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "pgf";
+  version = "1.18";
+
+  src = fetchFromGitHub {
+    owner = "pgf-tikz";
+    repo = "pgf";
+    rev = "refs/tags/version-${lib.replaceStrings ["."] ["-"] finalAttrs.version}";
+    hash = "sha256-WZ/191iEDd5VK1bnV9JZx2BZfACUeAUhAqrlyx+ZvA4=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/texmf-nix
+    cp -prd context doc generic latex plain $out/share/texmf-nix/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/pgf-tikz/pgf";
+    description = "A Portable Graphic Format for TeX - version ${finalAttrs.version}";
+    branch = lib.versions.major version;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-2.x.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-2.x.nix
new file mode 100644
index 000000000000..e823d0a4c4d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-2.x.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "pgf";
+  version = "2.10";
+
+  src = fetchFromGitHub {
+    owner = "pgf-tikz";
+    repo = "pgf";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-AA+XFhEkJifODJb6SppnxhR4lMlMNaH+k10UF6QisJ8=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/texmf-nix
+    cp -prd context doc generic latex plain $out/share/texmf-nix/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/pgf-tikz/pgf";
+    description = "A Portable Graphic Format for TeX - version ${version}";
+    branch = lib.versions.major version;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-3.x.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-3.x.nix
new file mode 100644
index 000000000000..6fabce3d7316
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-3.x.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "pgf";
+  version = "3.1.10";
+
+  src = fetchFromGitHub {
+    owner = "pgf-tikz";
+    repo = "pgf";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-/zU2aTV39XpQhSpHVi8pBNsaAshcIhl6s+vOL1SO3Vw=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/texmf-nix
+    cp -prd doc source tex/{context,generic,latex,plain} $out/share/texmf-nix/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/pgf-tikz/pgf";
+    description = "A Portable Graphic Format for TeX - version ${finalAttrs.version}";
+    branch = lib.versions.major version;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-pie.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-pie.nix
new file mode 100644
index 000000000000..4c8bf800e462
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-pie.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "pgf-pie";
+  version = "0.7";
+
+  src = fetchFromGitHub {
+    owner = "pgf-tikz";
+    repo = "pgf-pie";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-tAUv35AMgJW5JI2KIXxxXFihqdB7qbMmNpAYhpDbAxs=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/texmf-nix
+    cp -prd doc tex/latex $out/share/texmf-nix/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/pgf-tikz/pgf-pie";
+    description = "Some LaTeX macros for pie charts using the PGF/TikZ package";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-umlcd.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-umlcd.nix
new file mode 100644
index 000000000000..293fa6b52e37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-umlcd.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "pgf-umlcd";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "pgf-tikz";
+    repo = "pgf-umlcd";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-92bfBcQfnalYoVxlVRjbRXhWt+CbS8PtiMmFIqbgo7A=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/texmf-nix
+    cp -prd doc tex/latex $out/share/texmf-nix/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/pgf-tikz/pgf-umlcd";
+    description = "Some LaTeX macros for UML Class Diagrams";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-umlsd.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-umlsd.nix
new file mode 100644
index 000000000000..4fd32aadf8ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgf-umlsd.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation {
+  pname = "pgf-umlcd";
+  version = "unstable-2020-05-28";
+
+  src = fetchFromGitHub {
+    owner = "pgf-tikz";
+    repo = "pgf-umlsd";
+    rev = "8766cc18596dbfa66202ceca01c62cab1c3ed6a2";
+    hash = "sha256-gSBO7uDPMer9XyHfs0rr+2lricN5Nb4cOlShCsk0cPc=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/texmf-nix
+    cp -prd doc tex/latex $out/share/texmf-nix/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/pgf-tikz/pgf-umlsd";
+    description = "Some LaTeX macros for UML Sequence Diagrams";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgfplots.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgfplots.nix
new file mode 100644
index 000000000000..559b34f34ad0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgf-tikz/pgfplots.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "pgfplots";
+  version = "1.18.1";
+
+  src = fetchFromGitHub {
+    owner = "pgf-tikz";
+    repo = "pgfplots";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-cTfOMasBptm0lydKeNHPnjdEyFjEb88awYPn8S2m73c=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/texmf-nix
+    cp -prd doc tex/{context,generic,latex,plain} $out/share/texmf-nix/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://pgfplots.sourceforge.net";
+    description = "TeX package to draw plots directly in TeX in two and three dimensions";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pplatex/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/pplatex/default.nix
new file mode 100644
index 000000000000..89d08b43e845
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pplatex/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, pcre
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pplatex";
+  version = "unstable-2023-04-18";
+
+  src = fetchFromGitHub {
+    owner = "stefanhepp";
+    repo = "pplatex";
+    rev = "8487b00b25127d9a4883e878000f4be6f89d56d5";
+    sha256 = "sha256-wPPJBn/UfmTWsD5JOg6po83Qn4qlpwgsPUV3iJzw5KU=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    pcre
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 src/pplatex "$out"/bin/pplatex
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description =
+      "A tool to reformat the output of latex and friends into readable messages";
+    homepage = "https://github.com/stefanhepp/pplatex";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.srgom maintainers.doronbehar ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/clang.patch b/nixpkgs/pkgs/tools/typesetting/tex/tetex/clang.patch
new file mode 100644
index 000000000000..50d83f624437
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/clang.patch
@@ -0,0 +1,13 @@
+diff --git a/texk/ps2pkm/type1.c b/texk/ps2pkm/type1.c
+index 027bf1f..4dcbad0 100644
+--- a/texk/ps2pkm/type1.c
++++ b/texk/ps2pkm/type1.c
+@@ -800,7 +800,7 @@ static void PSFakePush(Num)
+ static DOUBLE PSFakePop ()
+ {
+   if (PSFakeTop >= 0) return(PSFakeStack[PSFakeTop--]);
+-  else Error0("PSFakePop : Stack empty\n");
++  else { CC; IfTrace0(TRUE, "PSFakePop : Stack empty\n"); errflag = TRUE; return 0; }
+   /*NOTREACHED*/
+ }
+  
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/tetex/default.nix
new file mode 100644
index 000000000000..d15386417218
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchurl, flex, bison, zlib, libpng, ncurses, ed, automake }:
+
+stdenv.mkDerivation rec {
+  pname = "tetex";
+  version = "3.0";
+
+  src = fetchurl {
+    url = "http://mirrors.ctan.org/obsolete/systems/unix/teTeX/${version}/distrib/tetex-src-${version}.tar.gz";
+    sha256 = "16v44465ipd9yyqri9rgxp6rbgs194k4sh1kckvccvdsnnp7w3ww";
+  };
+
+  texmf = fetchurl {
+    url = "http://mirrors.ctan.org/obsolete/systems/unix/teTeX/${version}/distrib/tetex-texmf-${version}.tar.gz";
+    sha256 = "1hj06qvm02a2hx1a67igp45kxlbkczjlg20gr8lbp73l36k8yfvc";
+  };
+
+  buildInputs = [ flex bison zlib libpng ncurses ed ];
+
+  hardeningDisable = [ "format" ];
+
+  # fixes "error: conflicting types for 'calloc'", etc.
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    sed -i 57d texk/kpathsea/c-std.h
+  '';
+
+  preConfigure = if stdenv.isCygwin then ''
+    find ./ -name "config.guess" -exec rm {} \; -exec ln -s ${automake}/share/automake-*/config.guess {} \;
+  '' else null;
+
+  patches = [ ./environment.patch ./getline.patch ./clang.patch ./extramembot.patch ];
+
+  setupHook = ./setup-hook.sh;
+
+  configureFlags =
+    [ "--disable-multiplatform" "--without-x11" "--without-xdvik"
+      "--without-oxdvik" "--without-texinfo" "--without-texi2html"
+      "--with-system-zlib" "--with-system-pnglib" "--with-system-ncurses" ]
+    # couldn't get gsftopk working on darwin
+    ++ lib.optional stdenv.isDarwin "--without-gsftopk";
+
+  postUnpack = ''
+    mkdir -p $out/share/texmf
+    mkdir -p $out/share/texmf-dist
+    gunzip < $texmf | (cd $out/share/texmf-dist && tar xvf -)
+
+    substituteInPlace ./tetex-src-3.0/configure --replace /usr/bin/install $(type -P install)
+  '';
+
+  meta = with lib; {
+    description  = "A full-featured (La)TeX distribution";
+    homepage     = "http://www.tug.org/tetex/";
+    maintainers  = with maintainers; [ lovek323 ];
+    platforms    = platforms.unix;
+    hydraPlatforms = [];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/environment.patch b/nixpkgs/pkgs/tools/typesetting/tex/tetex/environment.patch
new file mode 100644
index 000000000000..6e652849b773
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/environment.patch
@@ -0,0 +1,35 @@
+diff -rc --exclude=texmf.in tetex-src-3.0.orig/texk/kpathsea/texmf.in-teTeX tetex-src-3.0/texk/kpathsea/texmf.in-teTeX
+*** tetex-src-3.0.orig/texk/kpathsea/texmf.in-teTeX	2006-01-27 17:33:11.000000000 +0100
+--- tetex-src-3.0/texk/kpathsea/texmf.in-teTeX	2006-01-27 17:38:35.000000000 +0100
+***************
+*** 104,109 ****
+--- 104,115 ----
+  %   TEXMFCONFIG = @texmf@-config
+  TEXMFCONFIG = $HOME/.texmf-config
+  
++ % TEXMFNIX is supposed to be unset. It's used by the Nix
++ % system to add trees during the build of nix-expressions.
++ 
++ % TEXMFNIXHOME, for packages in the user environment.
++ TEXMFNIXHOME = $HOME/.nix-profile/share/texmf-nix
++ 
+  % Now, list all the texmf trees. If you have multiple trees you can
+  % use shell brace notation, like this:
+  %   TEXMF = {$TEXMFHOME,!!$TEXMFLOCAL,!!$TEXMFMAIN}
+***************
+*** 111,117 ****
+  %
+  % For texconfig to work properly, TEXMFCONGIG and TEXMFVAR should be named
+  % explicitly and before all other trees.
+! TEXMF = {!!$TEXMFCONFIG,!!$TEXMFVAR,$TEXMFHOME,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}
+  
+  % The system trees.  These are the trees that are shared by all the users.
+  SYSTEXMF = $TEXMFLOCAL;$TEXMFMAIN;$TEXMFDIST
+--- 117,123 ----
+  %
+  % For texconfig to work properly, TEXMFCONGIG and TEXMFVAR should be named
+  % explicitly and before all other trees.
+! TEXMF = {!!$TEXMFCONFIG,!!$TEXMFVAR,$TEXMFNIX,$TEXMFHOME,$TEXMFNIXHOME,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}
+  
+  % The system trees.  These are the trees that are shared by all the users.
+  SYSTEXMF = $TEXMFLOCAL;$TEXMFMAIN;$TEXMFDIST
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/extramembot.patch b/nixpkgs/pkgs/tools/typesetting/tex/tetex/extramembot.patch
new file mode 100644
index 000000000000..f6c954fcfa5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/extramembot.patch
@@ -0,0 +1,12 @@
+diff -up texlive-2007/texk/web2c/tex.ch.extramembot texlive-2007/texk/web2c/tex.ch
+--- texlive-2007/texk/web2c/tex.ch.extramembot	2006-12-19 02:11:11.000000000 +0100
++++ texlive-2007/texk/web2c/tex.ch	2011-11-30 12:03:32.052795763 +0100
+@@ -365,7 +365,7 @@ for i:=@'177 to @'377 do xchr[i]:=i;
+ {Initialize enc\TeX\ data.}
+ for i:=0 to 255 do mubyte_read[i]:=null;
+ for i:=0 to 255 do mubyte_write[i]:=0;
+-for i:=0 to 128 do mubyte_cswrite[i]:=null;
++for i:=0 to 127 do mubyte_cswrite[i]:=null;
+ mubyte_keep := 0; mubyte_start := false; 
+ write_noexpanding := false; cs_converting := false;
+ special_printing := false; message_printing := false;
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/getline.patch b/nixpkgs/pkgs/tools/typesetting/tex/tetex/getline.patch
new file mode 100644
index 000000000000..c82c1b3ac360
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/getline.patch
@@ -0,0 +1,96 @@
+Glibc 2.10 has a `getline' symbol that clashes with teTeX's.
+Taken from http://lists.ibiblio.org/pipermail/sm-commit/2009-July/024831.html
+
+diff -rc -x '*~' tetex-src-3.0-orig/texk/dvipsk/afm2tfm.c tetex-src-3.0/texk/dvipsk/afm2tfm.c
+*** tetex-src-3.0-orig/texk/dvipsk/afm2tfm.c	2005-01-30 14:17:09.000000000 +0100
+--- tetex-src-3.0/texk/dvipsk/afm2tfm.c	2010-02-03 13:50:21.000000000 +0100
+***************
+*** 257,263 ****
+  }
+  
+  int
+! getline P1H(void) {
+     register char *p ;
+     register int c ;
+  
+--- 257,263 ----
+  }
+  
+  int
+! tetex_getline P1H(void) {
+     register char *p ;
+     register int c ;
+  
+***************
+*** 606,612 ****
+     ai = newchar() ;
+     ai->adobenum = -1 ;
+     ai->adobename = "||" ; /* boundary character name */
+!    while (getline()) {
+        switch(interest(paramstring())) {
+  case FontName:
+           fontname = paramnewstring() ;
+--- 606,612 ----
+     ai = newchar() ;
+     ai->adobenum = -1 ;
+     ai->adobename = "||" ; /* boundary character name */
+!    while (tetex_getline()) {
+        switch(interest(paramstring())) {
+  case FontName:
+           fontname = paramnewstring() ;
+***************
+*** 1882,1888 ****
+  
+     while (1) {
+        while (param == 0 || *param == 0) {
+!          if (getline() == 0)
+              error("! premature end in encoding file") ;
+           for (p=buffer; *p; p++)
+              if (*p == '%') {
+--- 1882,1888 ----
+  
+     while (1) {
+        while (param == 0 || *param == 0) {
+!          if (tetex_getline() == 0)
+              error("! premature end in encoding file") ;
+           for (p=buffer; *p; p++)
+              if (*p == '%') {
+***************
+*** 1973,1979 ****
+        p = gettoken() ;
+        if (strcmp(p, "]"))
+           error("! token 258 in encoding must be make-array (])") ;
+!       while (getline()) {
+           for (p=buffer; *p; p++)
+              if (*p == '%') {
+                 if (ignoreligkern == 0)
+--- 1973,1979 ----
+        p = gettoken() ;
+        if (strcmp(p, "]"))
+           error("! token 258 in encoding must be make-array (])") ;
+!       while (tetex_getline()) {
+           for (p=buffer; *p; p++)
+              if (*p == '%') {
+                 if (ignoreligkern == 0)
+diff -rc -x '*~' tetex-src-3.0-orig/texk/web2c/cpascal.h tetex-src-3.0/texk/web2c/cpascal.h
+*** tetex-src-3.0-orig/texk/web2c/cpascal.h	2004-08-28 22:49:59.000000000 +0200
+--- tetex-src-3.0/texk/web2c/cpascal.h	2010-02-03 13:51:04.000000000 +0100
+***************
+*** 240,245 ****
+--- 240,255 ----
+  #undef getname
+  #define getname vms_getname
+  #endif
++ 
++ /* Apparently POSIX 2008 has getline and glibc 2.9.90 exports it.
++  *    tangle, weave, et al. use that symbol; try to define it away so
++  *       something that a standard won't usurp.
++  * From http://tutimura.ath.cx/ptetex/?%C6%B0%BA%EE%CA%F3%B9%F0%2F134 */
++ #ifdef getline
++ #undef getline
++ #endif
++ #define getline web2c_getline
++ 
+  
+  /* Declarations for the routines we provide ourselves in lib/.  */
+  
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/setup-hook.sh b/nixpkgs/pkgs/tools/typesetting/tex/tetex/setup-hook.sh
new file mode 100644
index 000000000000..5faef7fe5df5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/setup-hook.sh
@@ -0,0 +1,7 @@
+addTeXMFPath () {
+    if test -d "$1/share/texmf-nix"; then
+        export TEXINPUTS="${TEXINPUTS}${TEXINPUTS:+:}$1/share/texmf-nix//:"
+    fi
+}
+
+addEnvHooks "$targetOffset" addTeXMFPath
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tex-match/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/tex-match/default.nix
new file mode 100644
index 000000000000..65bfcd02d78c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tex-match/default.nix
@@ -0,0 +1,27 @@
+{ rustPlatform, fetchFromGitHub, gtk3, pkg-config, glib, lib }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tex-match";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "zoeyfyi";
+    repo = "TeX-Match";
+    rev = "v${version}";
+    sha256 = "1yb81j7mbqqb8jcn78dx4ydp7ncbzvaczkli6cqay5jf5j6dbk1z";
+  };
+
+  nativeBuildInputs = [ pkg-config glib ];
+
+  buildInputs = [ gtk3 ];
+
+  cargoSha256 = "13ihwrckpsb4j1ai923vh151frw0yriwg9yylj9lk0ycps51y1sn";
+
+  meta = with lib; {
+    description = "Search through over 1000 different LaTeX symbols by sketching. A desktop version of detexify";
+    homepage = "https://tex-match.zoey.fyi/";
+    license = licenses.mit;
+    maintainers = [ maintainers.bootstrap-prime ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/UPGRADING.md b/nixpkgs/pkgs/tools/typesetting/tex/texlive/UPGRADING.md
new file mode 100644
index 000000000000..91bc1c6f49fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/UPGRADING.md
@@ -0,0 +1,138 @@
+# Notes on maintaining/upgrading
+
+## Upgrading `texlive.bin`
+
+`texlive` contains a few binaries, defined in `bin.nix` and released once a year.
+
+In order to reduce closure size for users who just need a few of them, we split it into
+packages such as `core`, `core-big`, `xdvi`, etc. This requires making assumptions
+about dependencies between the projects that may change between releases; if
+you upgrade you may have to do some work here.
+
+## Updating the package set
+
+`texlive` contains several thousand packages from CTAN, defined in `tlpdb.nix`.
+
+The CTAN mirrors are not version-controlled and continuously moving,
+with more than 100 updates per month.
+
+To create a consistent and reproducible package set in nixpkgs, we generate nix
+expressions for all packages in TeX Live at a certain day.
+
+To upgrade the package snapshot, follow this process.
+
+### Upgrade package information from texlive package database
+
+Update `version` in `default.nix` with the day of the new snapshot, the new TeX
+Live year, and the final status of the snapshot. Then update
+`texlive.tlpdbxz.hash` to match the new hash of `texlive.tlpdb.xz` and run
+
+```bash
+nix-build ../../../../.. -A texlive.tlpdb.nix --no-out-link
+```
+
+This will download either the daily or the final snapshot of the TeX Live
+package database `texlive.tlpdb.xz` and extract the relevant package info
+(including version numbers and sha512 hashes) for the selected upstream
+distribution.
+
+Finally, replace `tlpdb.nix` with the generated file. Note that if the
+`version` info does not match the metadata of `tlpdb.nix` (as found in the
+`00texlive.config` package), TeX Live packages will not evaluate.
+
+The test `pkgs.tests.texlive.tlpdbNix` verifies that the file `tlpdb.nix`
+in Nixpkgs matches the one that generated from `texlive.tlpdb.xz`.
+
+### Build packages locally and generate fix hashes
+
+To prevent unnecessary rebuilds, texlive packages are built as fixed-output
+derivations whose hashes are contained in `fixed-hashes.nix`.
+
+Updating the list of fixed hashes requires a local build of all new packages,
+which is a resource-intensive process. First build the hashes for the new
+packages. Consider tweaking the `-j` option to maximise core usage.
+
+```bash
+nix-build generate-fixed-hashes.nix -A newHashes -j 8
+```
+
+Then build the Nix expression containing all the hashes, old and new. This step
+cannot be parallelized because it relies on 'import from derivation'.
+
+```bash
+nix-build generate-fixed-hashes.nix -A fixedHashesNix
+```
+
+Finally, copy the result to `fixed-hashes.nix`.
+
+**Warning.** The expression `fixedHashesNix` reuses the *previous* fixed hashes
+when possible. This is based on two assumptions: that `.tar.xz` archives with
+the same names remain identical in time (which is the intended behaviour of
+CTAN and the various mirrors) and that the build recipe continues to produce
+the same output. Should those assumptions not hold, remove the previous fixed
+hashes for the relevant package, or for all packages.
+
+### Upgrading the ConTeXt binaries
+
+The LuaMetaTeX sources required for ConTeXt are distributed separately from the
+TeX Live tarballs and must be updated manually (see `texlive.bin.context`). You
+must use the latest tarball at https://tug.org/svn/texlive/trunk/Master/source/
+whose revision number is less than or equal to that of the package `context`.
+
+### Updating the licensing information
+
+The license of each package in texlive is automatically extracted from texlive's
+texlive.tlpdb into tlpdb.nix. The combined licenses of the schemes is stored
+separately in `default.nix` and must be kept in sync with the licenses of the
+actual contents of these schemes. Whether this is the case can be verified with the
+`pkgs.tests.texlive.licenses` test. In case of a mismatch, copy the “correctâ€
+license lists reported by the test into `default.nix`.
+
+### Running the testsuite
+
+There are a some other useful tests that haven't been mentioned before. Build them with
+```
+nix-build ../../../../.. -A tests.texlive --no-out-link
+```
+
+
+### Commit changes
+
+Commit the updated `tlpdb.nix` and `fixed-hashes.nix` to the repository with
+a message like
+
+> texlive: 2022-final -> 2023.20230401
+
+Please make sure to follow the [CONTRIBUTING](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md)
+guidelines.
+
+## Reviewing the bin containers
+
+Most `tlType == "bin"` containers consist of links to scripts distributed in
+`$TEXMFDIST/scripts` with a number of patches applied within `default.nix`.
+
+At each upgrade, please run the tests `tests.texlive.shebangs` to verify that
+all shebangs have been patched and in case add the relevant interpreters, and
+use `tests.texlive.binaries` to check if basic execution of all binaries works.
+
+Please review manually all binaries in the `broken` and `ignored` lists of
+`tests.texlive.binaries` at least once for major TeX Live release.
+
+Since the tests cannot catch all runtime dependencies, you should grep the
+`$TEXMFDIST/scripts` folder for common cases, for instance (where `$scripts`
+points to the relevant folder of `scheme-full`):
+- Calls to `exec $interpreter`
+  ```
+  grep -IRS 'exec ' "$TEXMFDIST/scripts" | cut -d: -f2 | sort -u | less -S
+  ```
+- Calls to Ghostscripts (see `needsGhostscript` in `combine.nix`)
+  ```
+  grep -IR '\([^a-zA-Z]\|^\)gs\( \|$\|"\)' "$TEXMFDIST"/scripts
+  grep -IR 'rungs' "$TEXMFDIST"
+  ```
+
+As a general rule, if a runtime dependency as above is essential for the core
+functionality of the package, then it should be made available in the bin
+containers (by patching `PATH`), or in `texlive.combine` (as we do for
+Ghostscript). Non-essential runtime dependencies should be ignored if they
+increase the closure substantially.
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/bin.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/bin.nix
new file mode 100644
index 000000000000..df4a2862516e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/bin.nix
@@ -0,0 +1,528 @@
+{ lib, stdenv, fetchurl, fetchpatch, buildPackages
+, texlive
+, zlib, libiconv, libpng, libX11
+, freetype, gd, libXaw, icu, ghostscript, libXpm, libXmu, libXext
+, perl, perlPackages, python3Packages, pkg-config, cmake, ninja
+, libpaper, graphite2, zziplib, harfbuzz, potrace, gmp, mpfr, mupdf
+, brotli, cairo, pixman, xorg, clisp, biber, woff2, xxHash
+, makeWrapper, shortenPerlShebang, useFixedHashes, asymptote
+, biber-ms
+, tlpdb
+}:
+
+# Useful resource covering build options:
+# http://tug.org/texlive/doc/tlbuild.html
+
+let
+  withSystemLibs = map (libname: "--with-system-${libname}");
+
+  year = toString ((import ./tlpdb.nix)."00texlive.config").year;
+  version = year; # keep names simple for now
+
+  # detect and stop redundant rebuilds that may occur when building new fixed hashes
+  assertFixedHash = name: src:
+    if ! useFixedHashes || src ? outputHash then src else throw "The TeX Live package '${src.pname}' must have a fixed hash before building '${name}'.";
+
+  # list of packages whose binaries are built in core, core-big
+  # generated manually by inspecting ${core}/bin
+  corePackages = [ "afm2pl" "aleph" "autosp" "axodraw2" "bibtex" "cjkutils"
+    "ctie" "cweb" "detex" "dtl" "dvi2tty" "dvicopy" "dvidvi" "dviljk"
+    "dviout-util" "dvipdfmx" "dvipos" "dvips" "fontware" "gregoriotex"
+    "gsftopk" "hitex" "kpathsea" "lacheck" "lcdftypetools" "m-tx" "makeindex"
+    "mfware" "musixtnt" "omegaware" "patgen" "pdftex" "pdftosrc" "pmx"
+    "ps2eps" "ps2pk" "psutils"  "ptex" "seetexk" "synctex" "t1utils" "tex"
+    "tex4ht" "texlive-scripts-extra" "texware" "tie" "tpic2pdftex" "ttfutils"
+    "uptex" "velthuis" "vlna" "web" "xml2pmx" ];
+  coreBigPackages = [ "metafont" "mflua" "metapost" "luatex" "luahbtex"
+    "upmendex" "xetex" ] ++ lib.optional withLuaJIT "luajittex";
+  binPackages = lib.getAttrs (corePackages ++ coreBigPackages) tlpdb;
+
+  common = {
+    src = fetchurl {
+      urls = [
+        "http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/${year}/texlive-${year}0313-source.tar.xz"
+              "ftp://tug.ctan.org/pub/tex/historic/systems/texlive/${year}/texlive-${year}0313-source.tar.xz"
+      ];
+      hash = "sha256-OHiqDh7QMBwFOw4u5OmtmZxEE0X0iC55vdHI9M6eebk=";
+    };
+
+    prePatch = ''
+      for i in texk/kpathsea/mktex*; do
+        sed -i '/^mydir=/d' "$i"
+      done
+
+      # ST_NLINK_TRICK causes kpathsea to treat folders with no real subfolders
+      # as leaves, even if they contain symlinks to other folders; must be
+      # disabled to work correctly with the nix store", see section 5.3.6
+      # “Subdirectory expansion†of the kpathsea manual
+      # http://mirrors.ctan.org/systems/doc/kpathsea/kpathsea.pdf for more
+      # details
+      sed -i '/^#define ST_NLINK_TRICK/d' texk/kpathsea/config.h
+    '' +
+    # when cross compiling, we must use himktables from PATH
+    # (i.e. from buildPackages.texlive.bin.core.dev)
+    lib.optionalString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform)  ''
+      sed -i 's|\./himktables|himktables|' texk/web2c/Makefile.in
+    ''
+;
+
+    configureFlags = [
+      "--with-banner-add=/nixos.org"
+      "--disable-missing" # terminate if a requested program or feature must be
+                          # disabled, e.g., due to missing libraries
+      "--disable-native-texlive-build" # do not build for the TeX Live binary distribution
+      "--enable-shared" # "--enable-cxx-runtime-hack" # static runtime
+      "--enable-tex-synctex"
+      "--disable-texlive" # do not build the texlive (TeX Live scripts) package
+      "--disable-linked-scripts" # do not install the linked scripts
+      "-C" # use configure cache to speed up
+    ]
+      ++ withSystemLibs [
+      # see "from TL tree" vs. "Using installed"  in configure output
+      "zziplib" "mpfr" "gmp"
+      "pixman" "potrace" "gd" "freetype2" "libpng" "libpaper" "zlib"
+    ] ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
+      "BUILDCC=${buildPackages.stdenv.cc.targetPrefix}cc";
+
+    # move binaries to corresponding split outputs, based on content of texlive.tlpdb
+    binToOutput = lib.listToAttrs
+      (lib.concatMap
+        (n: map (v: { name = v; value = builtins.replaceStrings [ "-" ] [ "_" ] n; }) binPackages.${n}.binfiles or [ ])
+        (builtins.attrNames binPackages));
+
+    moveBins = ''
+      for bin in "$out/bin"/* ; do
+        bin="''${bin##*/}"
+        package="''${binToOutput[$bin]}"
+        if [[ -n "$package" ]] ; then
+          if [[ -z "''${!package}" ]] ; then
+            echo "WARNING: missing output '$package' for binary '$bin', leaving in 'out'"
+          else
+            mkdir -p "''${!package}"/bin
+            mv "$out/bin/$bin" "''${!package}"/bin/
+          fi
+        else
+          echo "WARNING: no output known for binary '$bin', leaving in 'out'"
+        fi
+      done
+    '';
+  };
+
+  # RISC-V: https://github.com/LuaJIT/LuaJIT/issues/628
+  withLuaJIT = !(stdenv.hostPlatform.isPower && stdenv.hostPlatform.is64bit) && !stdenv.hostPlatform.isRiscV;
+in rec { # un-indented
+
+texliveYear = year;
+
+
+core = stdenv.mkDerivation rec {
+  pname = "texlive-bin";
+  inherit version;
+
+  __structuredAttrs = true;
+
+  inherit (common) binToOutput src prePatch;
+
+  outputs = [ "out" "dev" "man" "info" ]
+    ++ (builtins.map (builtins.replaceStrings [ "-" ] [ "_" ]) corePackages);
+
+  nativeBuildInputs = [
+    pkg-config
+  ] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) (with texlive.bin.core; [
+    # configure: error: tangle was not found but is required when cross-compiling.
+    # dev (himktables) is used when building hitex to generate the additional source file hitables.c
+    web/*tangle*/ cweb/*ctangle*/ omegaware/*otangle*/ tie/*tie*/ # see "Building TeX Live" 6.4.2 Cross problems
+    dev/*himktables*/
+  ]);
+
+  buildInputs = [
+    /*teckit*/ zziplib mpfr gmp
+    pixman gd freetype libpng libpaper zlib
+    perl
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    rm -r libs/{cairo,freetype2,gd,gmp,graphite2,harfbuzz,icu,libpaper,libpng} \
+      libs/{lua53,luajit,mpfr,pixman,pplib,teckit,zlib,zziplib} \
+      texk/{bibtex-x,chktex,dvipng,dvisvgm,upmendex,xdvik} \
+      utils/{asymptote,texdoctk,xindy,xpdfopen}
+    mkdir WorkDir
+    cd WorkDir
+  '';
+  configureScript = "../configure";
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  configureFlags = common.configureFlags
+    ++ [ "--without-x" ] # disable xdvik and xpdfopen
+    ++ map (what: "--disable-${what}") [
+      "chktex"
+      "dvisvgm" "dvipng" # ghostscript dependency
+      "luatex" "luajittex" "luahbtex" "luajithbtex"
+      "mp" "pmp" "upmp" "mf" "mflua" "mfluajit" # cairo would bring in X and more
+      "xetex" "bibtexu" "bibtex8" "bibtex-x" "upmendex" # ICU isn't small
+    ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # triptest fails, likely due to missing TEXMF tree
+  preCheck = "patchShebangs ../texk/web2c";
+
+  installTargets = [ "install" ];
+
+  # TODO: perhaps improve texmf.cnf search locations
+  postInstall =
+       /* remove redundant texmf-dist (content provided by TeX Live packages) */
+  ''
+    rm -fr "$out"/share/texmf-dist
+  '' + /* install himktables in separate output for use in cross compilation */ ''
+     mkdir -p $dev/bin
+     cp texk/web2c/.libs/himktables $dev/bin/himktables
+  '' + common.moveBins;
+
+  passthru = { inherit version buildInputs; };
+
+  meta = with lib; {
+    description = "Basic binaries for TeX Live";
+    homepage    = "http://www.tug.org/texlive";
+    license     = lib.licenses.gpl2;
+    maintainers = with maintainers; [ veprbl lovek323 raskin jwiegley ];
+    platforms   = platforms.all;
+  };
+};
+
+
+inherit (core-big) metafont mflua metapost luatex luahbtex xetex;
+luajittex = core.big.luajittex or null;
+core-big = stdenv.mkDerivation {
+  pname = "texlive-bin-big";
+  inherit version;
+
+  __structuredAttrs = true;
+
+  inherit (common) binToOutput src prePatch;
+
+  patches = [
+    # improves reproducibility of fmt files
+    # see discussion at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1009196
+    (fetchpatch {
+      name = "lua_fixed_hash.patch";
+      url = "https://bugs.debian.org/cgi-bin/bugreport.cgi?att=1;bug=1009196;filename=lua_fixed_hash.patch;msg=45";
+      sha256 = "sha256-FTu1eRd3AUU7IRs2/7e7uwHuvZsrzTBPypbcEZkU7y4=";
+    })
+    # fixes a security-issue in luatex that allows arbitrary code execution even with shell-escape disabled, see https://tug.org/~mseven/luatex.html
+    # fixed in LuaTeX 1.17.0, remove patch when upgrading to TL 2024
+    (fetchpatch {
+      name = "CVE-2023-32700.patch";
+      url = "https://tug.org/~mseven/luatex-files/2023/patch";
+      hash = "sha256-AvMedFkZJAFsCJ51eQqBQM4MpzLzn+GeBrzuTzISVkk=";
+      excludes = [  "build.sh" ];
+      stripLen = 1;
+    })
+    # Fixes texluajitc crashes on aarch64, backport of the upstream fix
+    # https://github.com/LuaJIT/LuaJIT/commit/e9af1abec542e6f9851ff2368e7f196b6382a44c
+    # to the version vendored by texlive (2.1.0-beta3)
+    (fetchpatch {
+      name = "luajit-fix-aarch64-linux.patch";
+      url = "https://raw.githubusercontent.com/void-linux/void-packages/master/srcpkgs/LuaJIT/patches/e9af1abec542e6f9851ff2368e7f196b6382a44c.patch";
+      hash = "sha256-ysSZmfpfCFMukfHmIqwofAZux1e2kEq/37lfqp7HoWo=";
+      stripLen = 1;
+      extraPrefix = "libs/luajit/LuaJIT-src/";
+    })
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  inherit (core) nativeBuildInputs depsBuildBuild;
+  buildInputs = core.buildInputs ++ [ core cairo harfbuzz icu graphite2 libX11 potrace ];
+
+  /* deleting the unused packages speeds up configure by a considerable margin
+     and ensures we do not rebuild existing libraries by mistake */
+  preConfigure = ''
+    rm -r libs/{cairo,freetype2,gd,gmp,graphite2,harfbuzz,icu,libpaper,libpng} \
+      libs/{mpfr,pixman,xpdf,zlib,zziplib} \
+      texk/{afm2pl,bibtex-x,chktex,cjkutils,detex,dtl,dvi2tty,dvidvi,dviljk,dviout-util} \
+      texk/{dvipdfm-x,dvipng,dvipos,dvipsk,dvisvgm,gregorio,gsftopk,kpathsea} \
+      texk/{lcdf-typetools,makeindexk,makejvf,mendexk,musixtnt,ps2pk,psutils,ptexenc} \
+      texk/{seetexk,tex4htk,texlive,ttf2pk2,ttfdump,xdvik} \
+      utils/{asymptote,autosp,axodraw2,devnag,lacheck,m-tx,pmx,ps2eps,t1utils,texdoctk} \
+      utils/{tpic2pdftex,vlna,xindy,xml2pmx,xpdfopen}
+    mkdir WorkDir
+    cd WorkDir
+  '';
+
+  configureFlags = common.configureFlags
+    ++ withSystemLibs [ "kpathsea" "ptexenc" "cairo" "harfbuzz" "icu" "graphite2" ]
+    ++ map (prog: "--disable-${prog}") # don't build things we already have
+      # list from texk/web2c/configure
+      ([ "tex" "ptex" "eptex" "uptex" "euptex" "aleph" "hitex" "pdftex"
+        "web-progs" "synctex"
+      ] ++ lib.optionals (!withLuaJIT) [ "luajittex" "luajithbtex" "mfluajit" ])
+    /* disable all packages, re-enable upmendex, web2c packages */
+    ++ [ "--disable-all-pkgs" "--enable-upmendex" "--enable-web2c" ]
+    /* kpathsea requires specifying the kpathsea location manually */
+    ++ [ "--with-kpathsea-includes=${core.dev}/include" ];
+
+  configureScript = "../configure";
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # fails
+
+  outputs = [ "out" "dev" "man" "info" ]
+    ++ (builtins.map (builtins.replaceStrings [ "-" ] [ "_" ]) coreBigPackages)
+    # some outputs of metapost, omegaware are for ptex/uptex
+    ++ [ "ptex" "uptex" ]
+    # unavoidable duplicates from core
+    ++ [ "ctie" "cweb" "omegaware" "texlive_scripts_extra" "tie" "web" ];
+  postInstall = common.moveBins;
+};
+
+
+chktex = stdenv.mkDerivation {
+  pname = "chktex";
+  inherit (texlive.pkgs.chktex) version;
+
+  inherit (common) src;
+
+  nativeBuildInputs = [ pkg-config ];
+  # perl used in shebang of script bin/deweb
+  buildInputs = [ core/*kpathsea*/ perl ];
+
+  preConfigure = "cd texk/chktex";
+
+  configureFlags = common.configureFlags
+    ++ [ "--with-system-kpathsea" ];
+
+  enableParallelBuilding = true;
+};
+
+# the LuaMetaTeX engine (distributed since TeX Live 2023) must be built separately
+# the sources used by TL are stored in the source TL repo
+# for details see https://wiki.contextgarden.net/Building_LuaMetaTeX_for_TeX_Live
+context = stdenv.mkDerivation rec {
+  pname = "luametatex";
+  version = "2.10.08";
+
+  src = fetchurl {
+    url = "https://tug.org/svn/texlive/trunk/Master/source/luametatex-${version}.tar.xz?revision=67034&view=co";
+    hash = "sha256-3JeOUQ63jJOZWTxFCoyWjfcrspmdmC/yqgS1JaLfTWk=";
+  };
+
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ cmake ninja ];
+
+  meta = with lib; {
+    description = "The LUAMETATEX engine is a follow up on LUATEX and is again part of CONTEXT development";
+    homepage = "https://www.pragma-ade.nl/luametatex-1.htm";
+    license = licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ apfelkuchen6 xworld21 ];
+  };
+};
+
+dvisvgm = stdenv.mkDerivation {
+  pname = "dvisvgm";
+  inherit (texlive.pkgs.dvisvgm) version;
+
+  inherit (common) src;
+
+  patches = [
+    # do not use deprecated NEWPDF option with Ghostscript >= 10.02.0
+    # https://github.com/mgieseki/dvisvgm/issues/245
+    (fetchpatch {
+      name = "dont-use-NEWPDF-with-GS-10.02.0.patch";
+      url = "https://github.com/mgieseki/dvisvgm/commit/f31cdf14d73f586e2b92b4b0891d097a90274a0b.patch";
+      hash = "sha256-Yf/GhmJYM87M0ITZ/+7q2ZvSYnac4N2/NkTkFlJ2VII=";
+      stripLen = 1;
+      extraPrefix = "texk/dvisvgm/dvisvgm-src/";
+    })
+  ];
+
+  # since we are running configure directly in texk/dvisvgm,
+  # the option --with-system-potrace is not picked up properly
+  # and dvisvgm tries to build a vendored copy of potrace
+  postPatch = ''
+    cat > texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile <<EOF
+    all:
+    install:
+    EOF
+  '' +
+    # PDF handling requires mutool (from mupdf) since Ghostscript 10.01
+  ''
+    substituteInPlace texk/dvisvgm/dvisvgm-src/src/PDFHandler.cpp \
+      --replace 'Process("mutool"' "Process(\"$(PATH="$HOST_PATH" command -v mutool)\""
+  '';
+
+  preConfigure = "cd texk/dvisvgm";
+
+  configureFlags = common.configureFlags
+    ++ [ "--with-system-kpathsea" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ core brotli ghostscript zlib freetype woff2 potrace xxHash mupdf ];
+
+  enableParallelBuilding = true;
+};
+
+
+dvipng = stdenv.mkDerivation {
+  pname = "dvipng";
+  inherit (texlive.pkgs.dvipng) version;
+
+  inherit (common) src;
+
+  nativeBuildInputs = [ perl pkg-config makeWrapper ];
+  buildInputs = [ core/*kpathsea*/ zlib libpng freetype gd ghostscript ];
+
+  preConfigure = ''
+    cd texk/dvipng
+    patchShebangs doc/texi2pod.pl
+  '';
+
+  configureFlags = common.configureFlags
+    ++ [ "--with-system-kpathsea" "--with-gs=yes" "--disable-debug" ];
+
+  GS="${ghostscript}/bin/gs";
+
+  enableParallelBuilding = true;
+};
+
+pygmentex = python3Packages.buildPythonApplication rec {
+  pname = "pygmentex";
+  inherit (src) version;
+  format = "other";
+
+  src = assertFixedHash pname texlive.pkgs.pygmentex.tex;
+
+  propagatedBuildInputs = with python3Packages; [ pygments chardet ];
+
+  dontBuild = true;
+
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D ./scripts/pygmentex/pygmentex.py "$out"/bin/pygmentex
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.ctan.org/pkg/pygmentex";
+    description = "Auxiliary tool for typesetting code listings in LaTeX documents using Pygments";
+    longDescription = ''
+      PygmenTeX is a Python-based LaTeX package that can be used for
+      typesetting code listings in a LaTeX document using Pygments.
+
+      Pygments is a generic syntax highlighter for general use in all kinds of
+      software such as forum systems, wikis or other applications that need to
+      prettify source code.
+    '';
+    license = licenses.lppl13c;
+    maintainers = with maintainers; [ romildo ];
+  };
+};
+
+inherit asymptote;
+
+inherit biber;
+inherit biber-ms;
+bibtexu = bibtex8;
+bibtex8 = stdenv.mkDerivation {
+  pname = "bibtex-x";
+  inherit (texlive.pkgs.bibtexu) version;
+
+  inherit (common) src;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ core/*kpathsea*/ icu ];
+
+  preConfigure = "cd texk/bibtex-x";
+
+  configureFlags = common.configureFlags
+    ++ [ "--with-system-kpathsea" "--with-system-icu" ];
+
+  enableParallelBuilding = true;
+};
+
+
+xdvi = stdenv.mkDerivation {
+  pname = "xdvi";
+  inherit (texlive.pkgs.xdvi) version;
+
+  inherit (common) src;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ core/*kpathsea*/ freetype ghostscript ]
+    ++ (with xorg; [ libX11 libXaw libXi libXpm libXmu libXaw libXext libXfixes ]);
+
+  preConfigure = "cd texk/xdvik";
+
+  configureFlags = common.configureFlags
+    ++ [ "--with-system-kpathsea" "--with-system-libgs" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    substituteInPlace "$out/bin/xdvi" \
+      --replace "exec xdvi-xaw" "exec '$out/bin/xdvi-xaw'"
+  '';
+  # TODO: it's suspicious that mktexpk generates fonts into ~/.texlive2014
+};
+
+xpdfopen = stdenv.mkDerivation {
+  pname = "xpdfopen";
+  inherit (texlive.pkgs.xpdfopen) version;
+
+  inherit (common) src;
+
+  buildInputs = [ libX11 ];
+
+  preConfigure = "cd utils/xpdfopen";
+
+  enableParallelBuilding = true;
+};
+
+} # un-indented
+
+// lib.optionalAttrs (!clisp.meta.broken) # broken on aarch64 and darwin (#20062)
+{
+
+xindy = stdenv.mkDerivation {
+  pname = "xindy";
+  inherit (texlive.pkgs.xindy) version;
+
+  inherit (common) src;
+
+  # If unset, xindy will try to mkdir /homeless-shelter
+  HOME = ".";
+
+  prePatch = "cd utils/xindy";
+  # hardcode clisp location
+  postPatch = ''
+    substituteInPlace xindy-*/user-commands/xindy.in \
+      --replace "our \$clisp = ( \$is_windows ? 'clisp.exe' : 'clisp' ) ;" \
+                "our \$clisp = '$(type -P clisp)';"
+  '';
+
+  nativeBuildInputs = [
+    pkg-config perl
+    (texlive.combine { inherit (texlive) scheme-basic cyrillic ec; })
+  ];
+  buildInputs = [ clisp libiconv perl ];
+
+  configureFlags = [ "--with-clisp-runtime=system" "--disable-xindy-docs" ];
+
+  preInstall = ''mkdir -p "$out/bin" '';
+  # fixup various file-location errors of: lib/xindy/{xindy.mem,modules/}
+  postInstall = ''
+    mkdir -p "$out/lib/xindy"
+    mv "$out"/{bin/xindy.mem,lib/xindy/}
+    ln -s ../../share/texmf-dist/xindy/modules "$out/lib/xindy/"
+  '';
+};
+
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/build-tex-env.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/build-tex-env.nix
new file mode 100644
index 000000000000..9a721168591f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/build-tex-env.nix
@@ -0,0 +1,453 @@
+{
+  # texlive package set
+  tl
+, bin
+
+, lib
+, buildEnv
+, libfaketime
+, makeFontsConf
+, makeWrapper
+, runCommand
+, writeShellScript
+, writeText
+, toTLPkgSets
+, bash
+, perl
+
+  # common runtime dependencies
+, coreutils
+, gawk
+, gnugrep
+, gnused
+, ghostscript
+}:
+
+lib.fix (self: {
+  withDocs ? false
+, withSources ? false
+, requiredTeXPackages ? ps: [ ps.scheme-infraonly ]
+
+### texlive.combine backward compatibility
+, __extraName ? "combined"
+, __extraVersion ? ""
+# emulate the old texlive.combine (e.g. add man pages to main output)
+, __combine ? false
+# adjust behavior further if called from the texlive.combine wrapper
+, __fromCombineWrapper ? false
+}@args:
+
+let
+  ### texlive.combine backward compatibility
+  # if necessary, convert old style { pkgs = [ ... ]; } packages to attribute sets
+  isOldPkgList = p: ! p.outputSpecified or false && p ? pkgs && builtins.all (p: p ? tlType) p.pkgs;
+  ensurePkgSets = ps: if ! __fromCombineWrapper && builtins.any isOldPkgList ps
+    then let oldPkgLists = builtins.partition isOldPkgList ps;
+      in oldPkgLists.wrong ++ lib.concatMap toTLPkgSets oldPkgLists.right
+    else ps;
+
+  pkgList = rec {
+    # resolve dependencies of the packages that affect the runtime
+    all =
+      let
+        # order of packages is irrelevant
+        packages = builtins.sort (a: b: a.pname < b.pname) (ensurePkgSets (requiredTeXPackages tl));
+        runtime = builtins.partition
+          (p: p.outputSpecified or false -> builtins.elem (p.tlOutputName or p.outputName) [ "out" "tex" "tlpkg" ])
+          packages;
+        keySet = p: {
+          key = ((p.name or "${p.pname}-${p.version}") + "-" + p.tlOutputName or p.outputName or "");
+          inherit p;
+          tlDeps = if p ? tlDeps then ensurePkgSets p.tlDeps else (p.requiredTeXPackages or (_: [ ]) tl);
+        };
+      in
+      # texlive.combine: the wrapper already resolves all dependencies
+      if __fromCombineWrapper then requiredTeXPackages null else
+        builtins.catAttrs "p" (builtins.genericClosure {
+          startSet = map keySet runtime.right;
+          operator = p: map keySet p.tlDeps;
+        }) ++ runtime.wrong;
+
+    # group the specified outputs
+    specified = builtins.partition (p: p.outputSpecified or false) all;
+    specifiedOutputs = lib.groupBy (p: p.tlOutputName or p.outputName) specified.right;
+    otherOutputNames = builtins.catAttrs "key" (builtins.genericClosure {
+      startSet = map (key: { inherit key; }) (lib.concatLists (builtins.catAttrs "outputs" specified.wrong));
+      operator = _: [ ];
+    });
+    otherOutputs = lib.genAttrs otherOutputNames (n: builtins.catAttrs n specified.wrong);
+    outputsToInstall = builtins.catAttrs "key" (builtins.genericClosure {
+      startSet = map (key: { inherit key; })
+        ([ "out" ] ++ lib.optional (splitOutputs ? man) "man"
+          ++ lib.concatLists (builtins.catAttrs "outputsToInstall" (builtins.catAttrs "meta" specified.wrong)));
+      operator = _: [ ];
+    });
+
+    # split binary and tlpkg from tex, texdoc, texsource
+    bin = if __fromCombineWrapper
+      then builtins.filter (p: p.tlType == "bin") all # texlive.combine: legacy filter
+      else otherOutputs.out or [ ] ++ specifiedOutputs.out or [ ];
+    tlpkg = if __fromCombineWrapper
+      then builtins.filter (p: p.tlType == "tlpkg") all # texlive.combine: legacy filter
+      else otherOutputs.tlpkg or [ ] ++ specifiedOutputs.tlpkg or [ ];
+
+    nonbin = if __fromCombineWrapper then builtins.filter (p: p.tlType != "bin" && p.tlType != "tlpkg") all # texlive.combine: legacy filter
+      else (if __combine then # texlive.combine: emulate old input ordering to avoid rebuilds
+        lib.concatMap (p: lib.optional (p ? tex) p.tex
+          ++ lib.optional ((withDocs || p ? man) && p ? texdoc) p.texdoc
+          ++ lib.optional (withSources && p ? texsource) p.texsource) specified.wrong
+        else otherOutputs.tex or [ ]
+          ++ lib.optionals withDocs (otherOutputs.texdoc or [ ])
+          ++ lib.optionals withSources (otherOutputs.texsource or [ ]))
+        ++ specifiedOutputs.tex or [ ] ++ specifiedOutputs.texdoc or [ ] ++ specifiedOutputs.texsource or [ ];
+
+    # outputs that do not become part of the environment
+    nonEnvOutputs = lib.subtractLists [ "out" "tex" "texdoc" "texsource" "tlpkg" ] otherOutputNames;
+  };
+
+  # list generated by inspecting `grep -IR '\([^a-zA-Z]\|^\)gs\( \|$\|"\)' "$TEXMFDIST"/scripts`
+  # and `grep -IR rungs "$TEXMFDIST"`
+  # and ignoring luatex, perl, and shell scripts (those must be patched using postFixup)
+  needsGhostscript = lib.any (p: lib.elem p.pname [ "context" "dvipdfmx" "latex-papersize" "lyluatex" ]) pkgList.bin;
+
+  name = if __combine then "texlive-${__extraName}-${bin.texliveYear}${__extraVersion}" # texlive.combine: old name name
+    else "texlive-${bin.texliveYear}-env";
+
+  texmfdist = (buildEnv {
+    name = "${name}-texmfdist";
+
+    # remove fake derivations (without 'outPath') to avoid undesired build dependencies
+    paths = builtins.catAttrs "outPath" pkgList.nonbin;
+
+    # mktexlsr
+    nativeBuildInputs = [ tl."texlive.infra" ];
+
+    postBuild = # generate ls-R database
+    ''
+      mktexlsr "$out"
+    '';
+  }).overrideAttrs (_: { allowSubstitutes = true; });
+
+  tlpkg = (buildEnv {
+    name = "${name}-tlpkg";
+
+    # remove fake derivations (without 'outPath') to avoid undesired build dependencies
+    paths = builtins.catAttrs "outPath" pkgList.tlpkg;
+  }).overrideAttrs (_: { allowSubstitutes = true; });
+
+  # the 'non-relocated' packages must live in $TEXMFROOT/texmf-dist
+  # and sometimes look into $TEXMFROOT/tlpkg (notably fmtutil, updmap look for perl modules in both)
+  texmfroot = runCommand "${name}-texmfroot" {
+    inherit texmfdist tlpkg;
+  } ''
+    mkdir -p "$out"
+    ln -s "$texmfdist" "$out"/texmf-dist
+    ln -s "$tlpkg" "$out"/tlpkg
+  '';
+
+  # texlive.combine: expose info and man pages in usual /share/{info,man} location
+  doc = buildEnv {
+    name = "${name}-doc";
+
+    paths = [ (texmfdist.outPath + "/doc") ];
+    extraPrefix = "/share";
+
+    pathsToLink = [
+      "/info"
+      "/man"
+    ];
+  };
+
+  meta = {
+    description = "TeX Live environment"
+      + lib.optionalString withDocs " with documentation"
+      + lib.optionalString (withDocs && withSources) " and"
+      + lib.optionalString withSources " with sources";
+    platforms = lib.platforms.all;
+    longDescription = "Contains the following packages and their transitive dependencies:\n - "
+      + lib.concatMapStringsSep "\n - "
+          (p: p.pname + (lib.optionalString (p.outputSpecified or false) " (${p.tlOutputName or p.outputName})"))
+          (requiredTeXPackages tl);
+  };
+
+  # emulate split output derivation
+  splitOutputs = {
+    out = out // { outputSpecified = true; };
+    texmfdist = texmfdist // { outputSpecified = true; };
+    texmfroot = texmfroot // { outputSpecified = true; };
+  } // (lib.genAttrs pkgList.nonEnvOutputs (outName: (buildEnv {
+    inherit name;
+    paths = builtins.catAttrs "outPath"
+      (pkgList.otherOutputs.${outName} or [ ] ++ pkgList.specifiedOutputs.${outName} or [ ]);
+    # force the output to be ${outName} or nix-env will not work
+    nativeBuildInputs = [ (writeShellScript "force-output.sh" ''
+      export out="''${${outName}-}"
+    '') ];
+    inherit meta passthru;
+  }).overrideAttrs { outputs = [ outName ]; } // { outputSpecified = true; }));
+
+  passthru = lib.optionalAttrs (! __combine) (splitOutputs // {
+    all = builtins.attrValues splitOutputs;
+    outputs = [ "out" ] ++ pkgList.nonEnvOutputs;
+  }) // {
+    # This is set primarily to help find-tarballs.nix to do its job
+    requiredTeXPackages = builtins.filter lib.isDerivation (pkgList.bin ++ pkgList.nonbin
+      ++ lib.optionals (! __fromCombineWrapper)
+        (lib.concatMap (n: (pkgList.otherOutputs.${n} or [ ] ++ pkgList.specifiedOutputs.${n} or [ ]))) pkgList.nonEnvOutputs);
+    # useful for inclusion in the `fonts.packages` nixos option or for use in devshells
+    fonts = "${texmfroot}/texmf-dist/fonts";
+    # support variants attrs, (prev: attrs)
+    __overrideTeXConfig = newArgs:
+      let appliedArgs = if builtins.isFunction newArgs then newArgs args else newArgs; in
+        self (args // { __fromCombineWrapper = false; } // appliedArgs);
+    withPackages = reqs: self (args // { requiredTeXPackages = ps: requiredTeXPackages ps ++ reqs ps; __fromCombineWrapper = false; });
+  };
+
+  out =
+# no indent for git diff purposes
+(buildEnv {
+
+  inherit name;
+
+  ignoreCollisions = false;
+
+  # remove fake derivations (without 'outPath') to avoid undesired build dependencies
+  paths = builtins.catAttrs "outPath" pkgList.bin
+    ++ lib.optional __combine doc;
+  pathsToLink = [
+    "/"
+    "/share/texmf-var/scripts"
+    "/share/texmf-var/tex/generic/config"
+    "/share/texmf-var/web2c"
+    "/share/texmf-config"
+    "/bin" # ensure these are writeable directories
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    libfaketime
+    tl."texlive.infra" # mktexlsr
+    tl.texlive-scripts # fmtutil, updmap
+    tl.texlive-scripts-extra # texlinks
+    perl
+  ];
+
+  inherit meta passthru;
+
+  postBuild =
+    # create outputs
+  lib.optionalString (! __combine) ''
+    for otherOutputName in $outputs ; do
+      if [[ "$otherOutputName" == 'out' ]] ; then continue ; fi
+      otherOutput="otherOutput_$otherOutputName"
+      ln -s "''${!otherOutput}" "''${!otherOutputName}"
+    done
+  '' +
+    # environment variables (note: only export the ones that are used in the wrappers)
+  ''
+    TEXMFROOT="${texmfroot}"
+    TEXMFDIST="${texmfdist}"
+    export PATH="$out/bin:$PATH"
+    TEXMFSYSCONFIG="$out/share/texmf-config"
+    TEXMFSYSVAR="$out/share/texmf-var"
+    export TEXMFCNF="$TEXMFSYSVAR/web2c"
+  '' +
+    # wrap executables with required env vars as early as possible
+    # 1. we use the wrapped binaries in the scripts below, to catch bugs
+    # 2. we do not want to wrap links generated by texlinks
+  ''
+    enable -f '${bash}/lib/bash/realpath' realpath
+    declare -i wrapCount=0
+    for link in "$out"/bin/*; do
+      target="$(realpath "$link")"
+      if [[ "''${target##*/}" != "''${link##*/}" ]] ; then
+        # detected alias with different basename, use immediate target of $link to preserve $0
+        # relevant for mktexfmt, repstopdf, ...
+        target="$(readlink "$link")"
+      fi
+
+      # skip non-executable files (such as context.lua)
+      if [[ ! -x "$target" ]] ; then continue ; fi
+
+      rm "$link"
+      makeWrapper "$target" "$link" \
+        --inherit-argv0 \
+        --prefix PATH : "${
+          # very common dependencies that are not detected by tests.texlive.binaries
+          lib.makeBinPath ([ coreutils gawk gnugrep gnused ] ++ lib.optional needsGhostscript ghostscript)}:$out/bin" \
+        --set-default TEXMFCNF "$TEXMFCNF" \
+        --set-default FONTCONFIG_FILE "${
+          # necessary for XeTeX to find the fonts distributed with texlive
+          makeFontsConf { fontDirectories = [ "${texmfroot}/texmf-dist/fonts" ]; }
+        }"
+      wrapCount=$((wrapCount + 1))
+    done
+    echo "wrapped $wrapCount binaries and scripts"
+  '' +
+    # patch texmf-dist  -> $TEXMFDIST
+    # patch texmf-local -> $out/share/texmf-local
+    # patch texmf.cnf   -> $TEXMFSYSVAR/web2c/texmf.cnf
+    # TODO: perhaps do lua actions?
+    # tried inspiration from install-tl, sub do_texmf_cnf
+  ''
+    mkdir -p "$TEXMFCNF"
+    if [ -e "$TEXMFDIST/web2c/texmfcnf.lua" ]; then
+      sed \
+        -e "s,\(TEXMFOS[ ]*=[ ]*\)[^\,]*,\1\"$TEXMFROOT\",g" \
+        -e "s,\(TEXMFDIST[ ]*=[ ]*\)[^\,]*,\1\"$TEXMFDIST\",g" \
+        -e "s,\(TEXMFSYSVAR[ ]*=[ ]*\)[^\,]*,\1\"$TEXMFSYSVAR\",g" \
+        -e "s,\(TEXMFSYSCONFIG[ ]*=[ ]*\)[^\,]*,\1\"$TEXMFSYSCONFIG\",g" \
+        -e "s,\(TEXMFLOCAL[ ]*=[ ]*\)[^\,]*,\1\"$out/share/texmf-local\",g" \
+        -e "s,\$SELFAUTOLOC,$out,g" \
+        -e "s,selfautodir:/,$out/share/,g" \
+        -e "s,selfautodir:,$out/share/,g" \
+        -e "s,selfautoparent:/,$out/share/,g" \
+        -e "s,selfautoparent:,$out/share/,g" \
+        "$TEXMFDIST/web2c/texmfcnf.lua" > "$TEXMFCNF/texmfcnf.lua"
+    fi
+
+    sed \
+      -e "s,\(TEXMFROOT[ ]*=[ ]*\)[^\,]*,\1$TEXMFROOT,g" \
+      -e "s,\(TEXMFDIST[ ]*=[ ]*\)[^\,]*,\1$TEXMFDIST,g" \
+      -e "s,\(TEXMFSYSVAR[ ]*=[ ]*\)[^\,]*,\1$TEXMFSYSVAR,g" \
+      -e "s,\(TEXMFSYSCONFIG[ ]*=[ ]*\)[^\,]*,\1$TEXMFSYSCONFIG,g" \
+      -e "s,\$SELFAUTOLOC,$out,g" \
+      -e "s,\$SELFAUTODIR,$out/share,g" \
+      -e "s,\$SELFAUTOPARENT,$out/share,g" \
+      -e "s,\$SELFAUTOGRANDPARENT,$out/share,g" \
+      -e "/^mpost,/d" `# CVE-2016-10243` \
+      "$TEXMFDIST/web2c/texmf.cnf" > "$TEXMFCNF/texmf.cnf"
+  '' +
+    # now filter hyphenation patterns and formats
+  (let
+    hyphens = lib.filter (p: p.hasHyphens or false && p.tlOutputName or p.outputName == "tex") pkgList.nonbin;
+    hyphenPNames = map (p: p.pname) hyphens;
+    formats = lib.filter (p: p ? formats && p.tlOutputName or p.outputName == "tex") pkgList.nonbin;
+    formatPNames = map (p: p.pname) formats;
+    # sed expression that prints the lines in /start/,/end/ except for /end/
+    section = start: end: "/${start}/,/${end}/{ /${start}/p; /${end}/!p; };\n";
+    script =
+      writeText "hyphens.sed" (
+        # document how the file was generated (for language.dat)
+        "1{ s/^(% Generated by .*)$/\\1, modified by ${if __combine then "texlive.combine" else "Nixpkgs"}/; p; }\n"
+        # pick up the header
+        + "2,/^% from/{ /^% from/!p; };\n"
+        # pick up all sections matching packages that we combine
+        + lib.concatMapStrings (pname: section "^% from ${pname}:$" "^% from|^%%% No changes may be made beyond this point.$") hyphenPNames
+        # pick up the footer (for language.def)
+        + "/^%%% No changes may be made beyond this point.$/,$p;\n"
+      );
+    scriptLua =
+      writeText "hyphens.lua.sed" (
+        "1{ s/^(-- Generated by .*)$/\\1, modified by ${if __combine then "texlive.combine" else "Nixpkgs"}/; p; }\n"
+        + "2,/^-- END of language.us.lua/p;\n"
+        + lib.concatMapStrings (pname: section "^-- from ${pname}:$" "^}$|^-- from") hyphenPNames
+        + "$p;\n"
+      );
+    # formats not being installed must be disabled by prepending #! (see man fmtutil)
+    # sed expression that enables the formats in /start/,/end/
+    enableFormats = pname: "/^# from ${pname}:$/,/^# from/{ s/^#! //; };\n";
+    fmtutilSed =
+      writeText "fmtutil.sed" (
+        # document how file was generated
+        "1{ s/^(# Generated by .*)$/\\1, modified by ${if __combine then "texlive.combine" else "Nixpkgs"}/; }\n"
+        # disable all formats, even those already disabled
+        + "s/^([^#]|#! )/#! \\1/;\n"
+        # enable the formats from the packages being installed
+        + lib.concatMapStrings enableFormats formatPNames
+        # clean up formats that have been disabled twice
+        + "s/^#! #! /#! /;\n"
+      );
+  in ''
+    mkdir -p "$TEXMFSYSVAR/tex/generic/config"
+    for fname in tex/generic/config/language.{dat,def}; do
+      [[ -e "$TEXMFDIST/$fname" ]] && sed -E -n -f '${script}' "$TEXMFDIST/$fname" > "$TEXMFSYSVAR/$fname"
+    done
+    [[ -e "$TEXMFDIST"/tex/generic/config/language.dat.lua ]] && sed -E -n -f '${scriptLua}' \
+      "$TEXMFDIST"/tex/generic/config/language.dat.lua > "$TEXMFSYSVAR"/tex/generic/config/language.dat.lua
+    [[ -e "$TEXMFDIST"/web2c/fmtutil.cnf ]] && sed -E -f '${fmtutilSed}' "$TEXMFDIST"/web2c/fmtutil.cnf > "$TEXMFCNF"/fmtutil.cnf
+
+    # create $TEXMFSYSCONFIG database, make new $TEXMFSYSVAR files visible to kpathsea
+    mktexlsr "$TEXMFSYSCONFIG" "$TEXMFSYSVAR"
+  '') +
+    # generate format links (reads fmtutil.cnf to know which ones) *after* the wrappers have been generated
+  ''
+    texlinks --quiet "$out/bin"
+  '' +
+    # temporarily patch mtxrun.lua to generate uuid's deterministically from SOURCE_DATE_EPOCH
+  ''
+    if [[ -e "$out/bin/mtxrun" ]]; then
+      mv "$out"/bin/mtxrun.lua{,.orig}
+      substitute "$TEXMFDIST"/scripts/context/lua/mtxrun.lua "$out"/bin/mtxrun.lua \
+        --replace 'randomseed(math.initialseed)' "randomseed($SOURCE_DATE_EPOCH)"
+    fi
+  '' +
+  # texlive postactions (see TeXLive::TLUtils::_do_postaction_script)
+  # this step includes generating the ConTeXt file databases since TL 2023
+  (lib.concatMapStrings (pkg: ''
+    postaction='${pkg.postactionScript}'
+    case "$postaction" in
+      *.pl) postInterp=perl ;;
+      *.texlua) postInterp=texlua ;;
+      *) postInterp= ;;
+    esac
+    echo "postaction install script for ${pkg.pname}: ''${postInterp:+$postInterp }$postaction install $TEXMFROOT"
+    FORCE_SOURCE_DATE=1 TZ= $postInterp "$TEXMFROOT"/$postaction install "$TEXMFROOT"
+  '') (lib.filter (pkg: pkg ? postactionScript) pkgList.tlpkg)) +
+  # restore the original mtxrun.lua
+  ''
+    if [[ -e "$out/bin/mtxrun" ]]; then
+      mv "$out"/bin/mtxrun.lua{.orig,}
+    fi
+  '' +
+    # generate formats
+    # TODO generate ConTeXt formats (based on fmtutil.cnf?)
+  ''
+    # many formats still ignore SOURCE_DATE_EPOCH even when FORCE_SOURCE_DATE=1
+    # libfaketime fixes non-determinism related to timestamps ignoring FORCE_SOURCE_DATE
+    # we cannot fix further randomness caused by luatex; for further details, see
+    # https://salsa.debian.org/live-team/live-build/-/blob/master/examples/hooks/reproducible/2006-reproducible-texlive-binaries-fmt-files.hook.chroot#L52
+    # note that calling faketime and fmtutil is fragile (faketime uses LD_PRELOAD, fmtutil calls /bin/sh, causing potential glibc issues on non-NixOS)
+    # so we patch fmtutil to use faketime, rather than calling faketime fmtutil
+    substitute "$TEXMFDIST"/scripts/texlive/fmtutil.pl fmtutil \
+      --replace 'my $cmdline = "$eng -ini ' 'my $cmdline = "faketime -f '"'"'\@1980-01-01 00:00:00 x0.001'"'"' $eng -ini '
+    FORCE_SOURCE_DATE=1 TZ= perl fmtutil --sys --all | grep '^fmtutil' # too verbose
+
+    # Disable unavailable map files
+    echo y | updmap --sys --syncwithtrees --force 2>&1 | grep '^\(updmap\|  /\)'
+    # Regenerate the map files (this is optional)
+    updmap --sys --force 2>&1 | grep '^\(updmap\|  /\)'
+
+    # sort entries to improve reproducibility
+    [[ -f "$TEXMFSYSCONFIG"/web2c/updmap.cfg ]] && sort -o "$TEXMFSYSCONFIG"/web2c/updmap.cfg "$TEXMFSYSCONFIG"/web2c/updmap.cfg
+
+    mktexlsr "$TEXMFSYSCONFIG" "$TEXMFSYSVAR" # to make sure (of what?)
+  '' +
+    # remove *-sys scripts since /nix/store is readonly
+  ''
+    rm "$out"/bin/*-sys
+  '' +
+  # Get rid of all log files. They are not needed, but take up space
+  # and render the build unreproducible by their embedded timestamps
+  # and other non-deterministic diagnostics.
+  ''
+    find "$TEXMFSYSVAR"/web2c -name '*.log' -delete
+  '' +
+  # link TEXMFDIST in $out/share for backward compatibility
+  ''
+    ln -s "$TEXMFDIST" "$out"/share/texmf
+  ''
+  ;
+}).overrideAttrs (prev:
+  { allowSubstitutes = true; }
+  # the outputsToInstall must be built by the main derivation for nix-profile-install to work
+  // lib.optionalAttrs (! __combine) ({
+    outputs = pkgList.outputsToInstall;
+    meta = prev.meta // { inherit (pkgList) outputsToInstall; };
+  } // (lib.mapAttrs'
+    (out: drv: { name = "otherOutput_" + out; value = drv; })
+    (lib.getAttrs (builtins.tail pkgList.outputsToInstall) splitOutputs)
+    )
+  )
+);
+in out)
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/build-texlive-package.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/build-texlive-package.nix
new file mode 100644
index 000000000000..db2d0f016b05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/build-texlive-package.nix
@@ -0,0 +1,203 @@
+{ lib
+, fetchurl
+, runCommand
+
+  # script interpreters
+, bash
+, jdk
+, perl
+, python3
+, ruby
+, snobol4
+, tk
+
+  # TeX Live prerequisites
+, texliveBinaries
+}:
+
+/* Convert an attribute set extracted from tlpdb.nix (with the deps attribute
+  already processed) to a fake multi-output derivation with possible outputs
+  [ "tex" "texdoc" "texsource" "tlpkg" "out" "man" "info" ]
+*/
+
+# TODO stabilise a generic interface decoupled from the finer details of the
+# translation from texlive.tlpdb to tlpdb.nix
+{ pname
+, revision
+, version ? toString revision
+, extraRevision ? ""
+, extraVersion ? ""
+, sha512
+, mirrors
+, fixedHashes ? { }
+, postUnpack ? ""
+, postFixup ? ""
+, stripPrefix ? 1
+, license ? [ ]
+, hasHyphens ? false
+, hasInfo ? false
+, hasManpages ? false
+, hasRunfiles ? false
+, hasTlpkg ? false
+, extraNativeBuildInputs ? [ ]
+, ...
+}@args:
+
+let
+  # common metadata
+  name = "${pname}-${version}${extraVersion}";
+  meta = {
+    license = map (x: lib.licenses.${x}) license;
+    # TeX Live packages should not be installed directly into the user profile
+    outputsToInstall = [ ];
+  };
+
+  hasBinfiles = args ? binfiles && args.binfiles != [ ];
+  hasDocfiles = sha512 ? doc;
+  hasSource = sha512 ? source;
+
+  # emulate drv.all, drv.outputs lists
+  all = lib.optional hasBinfiles bin ++
+    lib.optional hasRunfiles tex ++
+    lib.optional hasDocfiles texdoc ++
+    lib.optional hasSource texsource ++
+    lib.optional hasTlpkg tlpkg ++
+    lib.optional hasManpages man ++
+    lib.optional hasInfo info;
+  outputs = lib.catAttrs "tlOutputName" all;
+
+  mainDrv = if hasBinfiles then bin
+    else if hasRunfiles then tex
+    else if hasTlpkg then tlpkg
+    else if hasDocfiles then texdoc
+    else if hasSource then texsource
+    else tex; # fall back to attrset tex if there is no derivation
+
+  # emulate multi-output derivation plus additional metadata
+  # (out is handled in mkContainer)
+  passthru = {
+    inherit all outputs pname;
+    revision = toString revision + extraRevision;
+    version = version + extraVersion;
+    outputSpecified = true;
+    inherit tex;
+  } // lib.optionalAttrs (args ? deps) { tlDeps = args.deps; }
+  // lib.optionalAttrs (args ? formats) { inherit (args) formats; }
+  // lib.optionalAttrs hasHyphens { inherit hasHyphens; }
+  // lib.optionalAttrs (args ? postactionScript) { inherit (args) postactionScript; }
+  // lib.optionalAttrs hasDocfiles { texdoc = texdoc; }
+  // lib.optionalAttrs hasSource { texsource = texsource; }
+  // lib.optionalAttrs hasTlpkg { tlpkg = tlpkg; }
+  // lib.optionalAttrs hasManpages { man = man; }
+  // lib.optionalAttrs hasInfo { info = info; };
+
+  # build run, doc, source, tlpkg containers
+  mkContainer = tlType: tlOutputName: sha512:
+    let
+      fixedHash = fixedHashes.${tlType} or null; # be graceful about missing hashes
+      # the basename used by upstream (without ".tar.xz" suffix)
+      # tlpkg is not a true container but a subfolder of the run container
+      urlName = pname + (lib.optionalString (tlType != "run" && tlType != "tlpkg") ".${tlType}");
+      urls = map (up: "${up}/archive/${urlName}.r${toString revision}.tar.xz") mirrors;
+      container = runCommand "${name}-${tlOutputName}"
+        ({
+          src = fetchurl { inherit urls sha512; };
+          inherit passthru;
+          # save outputName, since fixed output derivations cannot change nor override outputName
+          inherit meta stripPrefix tlOutputName;
+        } // lib.optionalAttrs (fixedHash != null) {
+          outputHash = fixedHash;
+          outputHashAlgo = "sha256";
+          outputHashMode = "recursive";
+        })
+        (''
+          mkdir "$out"
+          if [[ "$tlOutputName"  == "tlpkg" ]]; then
+            tar -xf "$src" \
+              --strip-components=1 \
+              -C "$out" --anchored --exclude=tlpkg/tlpobj --keep-old-files \
+              tlpkg
+          else
+            tar -xf "$src" \
+              --strip-components="$stripPrefix" \
+              -C "$out" --anchored --exclude=tlpkg --keep-old-files
+          fi
+        '' + postUnpack);
+    in
+    # remove the standard drv.out, optionally replace it with the bin container
+    builtins.removeAttrs container [ "out" ] // lib.optionalAttrs hasBinfiles { out = bin; };
+
+  tex =
+    if hasRunfiles then mkContainer "run" "tex" sha512.run
+    else passthru
+      // { inherit meta; tlOutputName = "tex"; }
+      // lib.optionalAttrs hasBinfiles { out = bin; };
+
+  texdoc = mkContainer "doc" "texdoc" sha512.doc;
+
+  texsource = mkContainer "source" "texsource" sha512.source;
+
+  tlpkg = mkContainer "tlpkg" "tlpkg" sha512.run;
+
+  # build bin container
+  extToInput = {
+    # find interpreters for the script extensions found in tlpdb
+    jar = jdk;
+    lua = texliveBinaries.luatex;
+    py = python3;
+    rb = ruby;
+    sno = snobol4;
+    tcl = tk;
+    texlua = texliveBinaries.luatex;
+    tlu = texliveBinaries.luatex;
+  };
+
+  bin = runCommand "${name}"
+    {
+      inherit meta;
+      passthru = passthru // { tlOutputName = "out"; };
+      # shebang interpreters
+      buildInputs =let outName = builtins.replaceStrings [ "-" ] [ "_" ] pname; in
+        [ texliveBinaries.core.${outName} or null
+          texliveBinaries.${pname} or null
+          texliveBinaries.core-big.${outName} or null ]
+        ++ (args.extraBuildInputs or [ ]) ++ [ bash perl ]
+        ++ (lib.attrVals (args.scriptExts or [ ]) extToInput);
+      nativeBuildInputs = extraNativeBuildInputs;
+      # absolute scripts folder
+      scriptsFolder = lib.optionals (tex ? outPath) (builtins.map (f: tex.outPath + "/scripts/" + f) (lib.toList args.scriptsFolder or pname));
+      # binaries info
+      inherit (args) binfiles;
+      binlinks = builtins.attrNames (args.binlinks or { });
+      bintargets = builtins.attrValues (args.binlinks or { });
+      # build scripts
+      patchScripts = ./patch-scripts.sed;
+      makeBinContainers = ./make-bin-containers.sh;
+    }
+    ''
+      . "$makeBinContainers"
+      ${args.postFixup or ""}
+    '';
+
+  # build man, info containers
+  man = builtins.removeAttrs (runCommand "${name}-man"
+    {
+      inherit meta texdoc;
+      passthru = passthru // { tlOutputName = "man"; };
+    }
+    ''
+      mkdir -p "$out"/share
+      ln -s {"$texdoc"/doc,"$out"/share}/man
+    '') [ "out" ] // lib.optionalAttrs hasBinfiles { out = bin; };
+
+  info = builtins.removeAttrs (runCommand "${name}-info"
+    {
+      inherit meta texdoc;
+      passthru = passthru // { tlOutputName = "info"; };
+    }
+    ''
+      mkdir -p "$out"/share
+      ln -s {"$texdoc"/doc,"$out"/share}/info
+    '') [ "out" ] // lib.optionalAttrs hasBinfiles { out = bin; };
+in
+builtins.removeAttrs mainDrv [ "outputSpecified" ]
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/combine-wrapper.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/combine-wrapper.nix
new file mode 100644
index 000000000000..165e7a22c661
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/combine-wrapper.nix
@@ -0,0 +1,42 @@
+# legacy texlive.combine wrapper
+{ lib, toTLPkgList, toTLPkgSets, buildTeXEnv }:
+args@{
+  pkgFilter ? (pkg: pkg.tlType == "run" || pkg.tlType == "bin" || pkg.pname == "core"
+                    || pkg.hasManpages or false)
+, extraName ? "combined"
+, extraVersion ? ""
+, ...
+}:
+let
+  pkgSet = removeAttrs args [ "pkgFilter" "extraName" "extraVersion" ];
+
+  # combine a set of TL packages into a single TL meta-package
+  combinePkgs = pkgList: lib.catAttrs "pkg" (
+    let
+      # a TeX package used to be an attribute set { pkgs = [ ... ]; ... } where pkgs is a list of derivations
+      # the derivations make up the TeX package and optionally (for backward compatibility) its dependencies
+      tlPkgToSets = drv: map ({ tlType, version ? "", outputName ? "", ... }@pkg: {
+          # outputName required to distinguish among bin.core-big outputs
+          key = "${pkg.pname or pkg.name}.${tlType}-${version}-${outputName}";
+          inherit pkg;
+        }) (drv.pkgs or (toTLPkgList drv));
+      pkgListToSets = lib.concatMap tlPkgToSets; in
+    builtins.genericClosure {
+      startSet = pkgListToSets pkgList;
+      operator = { pkg, ... }: pkgListToSets (pkg.tlDeps or []);
+    });
+  combined = combinePkgs (lib.attrValues pkgSet);
+
+  # convert to specified outputs
+  tlTypeToOut = { run = "tex"; doc = "texdoc"; source = "texsource"; bin = "out"; tlpkg = "tlpkg"; };
+  toSpecified = { tlType, ... }@drv: drv // { outputSpecified = true; tlOutputName = tlTypeToOut.${tlType}; };
+  all = lib.filter pkgFilter combined ++ lib.filter (pkg: pkg.tlType == "tlpkg") combined;
+  converted = builtins.map toSpecified all;
+in
+buildTeXEnv {
+  __extraName = extraName;
+  __extraVersion = extraVersion;
+  requiredTeXPackages = _: converted;
+  __combine = true;
+  __fromCombineWrapper = true;
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/default.nix
new file mode 100644
index 000000000000..5611760ce66c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/default.nix
@@ -0,0 +1,235 @@
+/* TeX Live user docs
+  - source: ../../../../../doc/languages-frameworks/texlive.xml
+  - current html: https://nixos.org/nixpkgs/manual/#sec-language-texlive
+*/
+{ lib
+#, stdenv
+, gcc12Stdenv
+, fetchurl, runCommand, writeShellScript, writeText, buildEnv
+, callPackage, ghostscript_headless, harfbuzz
+, makeWrapper, installShellFiles
+, python3, ruby, perl, tk, jdk, bash, snobol4
+, coreutils, findutils, gawk, getopt, gnugrep, gnumake, gnupg, gnused, gzip, html-tidy, ncurses, zip
+, libfaketime, asymptote, biber-ms, makeFontsConf
+, useFixedHashes ? true
+, recurseIntoAttrs
+}:
+let stdenv = gcc12Stdenv; in
+let
+  # various binaries (compiled)
+  bin = callPackage ./bin.nix {
+    ghostscript = ghostscript_headless;
+    harfbuzz = harfbuzz.override {
+      withIcu = true; withGraphite2 = true;
+    };
+    inherit useFixedHashes;
+    tlpdb = overriddenTlpdb;
+  };
+
+  tlpdb = import ./tlpdb.nix;
+
+  tlpdbVersion = tlpdb."00texlive.config";
+
+  # the set of TeX Live packages, collections, and schemes; using upstream naming
+  overriddenTlpdb = let
+    overrides = import ./tlpdb-overrides.nix {
+      inherit
+        stdenv lib bin tlpdb tlpdbxz tl
+        installShellFiles
+        coreutils findutils gawk getopt ghostscript_headless gnugrep
+        gnumake gnupg gnused gzip html-tidy ncurses perl python3 ruby zip;
+    };
+  in overrides tlpdb;
+
+  version = {
+    # day of the snapshot being taken
+    year = "2024";
+    month = "01";
+    day = "14";
+    # TeX Live version
+    texliveYear = 2023;
+    # final (historic) release or snapshot
+    final = false;
+  };
+
+  # The tarballs on CTAN mirrors for the current release are constantly
+  # receiving updates, so we can't use those directly. Stable snapshots
+  # need to be used instead. Ideally, for the release branches of NixOS we
+  # should be switching to the tlnet-final versions
+  # (https://tug.org/historic/).
+  mirrors = with version; lib.optionals final  [
+    # tlnet-final snapshot; used when texlive.tlpdb is frozen
+    # the TeX Live yearly freeze typically happens in mid-March
+    "http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/${toString texliveYear}/tlnet-final"
+    "ftp://tug.org/texlive/historic/${toString texliveYear}/tlnet-final"
+  ] ++ [
+    # CTAN mirrors
+    "https://mirror.ctan.org/systems/texlive/tlnet"
+    # daily snapshots hosted by one of the texlive release managers;
+    # used for packages that in the meanwhile have been updated or removed from CTAN
+    # and for packages that have not reached yet the historic mirrors
+    # please note that this server is not meant for large scale deployment
+    # https://tug.org/pipermail/tex-live/2019-November/044456.html
+    # https://texlive.info/ MUST appear last (see tlpdbxz)
+    "https://texlive.info/tlnet-archive/${year}/${month}/${day}/tlnet"
+  ];
+
+  tlpdbxz = fetchurl {
+    urls = map (up: "${up}/tlpkg/texlive.tlpdb.xz")
+      # use last mirror for daily snapshots as texlive.tlpdb.xz changes every day
+      # TODO make this less hacky
+      (if version.final then mirrors else [ (lib.last mirrors) ]);
+    hash = "sha256-eUG0KVfFPkjOczCsu2GAPRQcvcPrEIGqIsJNRc+AHDs=";
+  };
+
+  tlpdbNix = runCommand "tlpdb.nix" {
+    inherit tlpdbxz;
+    tl2nix = ./tl2nix.sed;
+  }
+  ''
+    xzcat "$tlpdbxz" | sed -rn -f "$tl2nix" | uniq > "$out"
+  '';
+
+  # map: name -> fixed-output hash
+  fixedHashes = lib.optionalAttrs useFixedHashes (import ./fixed-hashes.nix);
+
+  buildTeXLivePackage = import ./build-texlive-package.nix {
+    inherit lib fetchurl runCommand bash jdk perl python3 ruby snobol4 tk;
+    texliveBinaries = bin;
+  };
+
+  tl = lib.mapAttrs (pname: { revision, extraRevision ? "", ... }@args:
+    buildTeXLivePackage (args
+      # NOTE: the fixed naming scheme must match generate-fixed-hashes.nix
+      // { inherit mirrors pname; fixedHashes = fixedHashes."${pname}-${toString revision}${extraRevision}" or { }; }
+      // lib.optionalAttrs (args ? deps) { deps = map (n: tl.${n}) (args.deps or [ ]); })
+  ) overriddenTlpdb;
+
+  # function for creating a working environment
+  buildTeXEnv = import ./build-tex-env.nix {
+    inherit bin tl;
+    ghostscript = ghostscript_headless;
+    inherit lib buildEnv libfaketime makeFontsConf makeWrapper runCommand
+      writeShellScript writeText toTLPkgSets bash perl coreutils gawk gnugrep gnused;
+  };
+
+  ### texlive.combine compatibility layer:
+  # convert TeX packages to { pkgs = [ ... ]; } lists
+  # respecting specified outputs
+  toTLPkgList = drv: if drv.outputSpecified or false
+    then let tlType = drv.tlType or tlOutToType.${drv.tlOutputName or drv.outputName} or null; in
+      lib.optional (tlType != null) (drv // { inherit tlType; })
+    else [ (drv.tex // { tlType = "run"; }) ] ++
+      lib.optional (drv ? texdoc) (drv.texdoc // { tlType = "doc"; } // lib.optionalAttrs (drv ? man) { hasManpages = true; }) ++
+      lib.optional (drv ? texsource) (drv.texsource // { tlType = "source"; }) ++
+      lib.optional (drv ? tlpkg) (drv.tlpkg // { tlType = "tlpkg"; }) ++
+      lib.optional (drv ? out) (drv.out // { tlType = "bin"; });
+  tlOutToType = { out = "bin"; tex = "run"; texsource = "source"; texdoc = "doc"; tlpkg = "tlpkg"; };
+
+  # convert { pkgs = [ ... ]; } lists to TeX packages
+  # possibly more than one, if pkgs is also used to specify dependencies
+  tlTypeToOut = { run = "tex"; doc = "texdoc"; source = "texsource"; bin = "out"; tlpkg = "tlpkg"; };
+  toSpecifiedNV = p: rec {
+    name = value.tlOutputName;
+    value = builtins.removeAttrs p [ "pkgs" ]
+      // { outputSpecified = true; tlOutputName = tlTypeToOut.${p.tlType}; };
+  };
+  toTLPkgSet = pname: drvs:
+    let set = lib.listToAttrs (builtins.map toSpecifiedNV drvs);
+        mainDrv = set.out or set.tex or set.tlpkg or set.texdoc or set.texsource; in
+    builtins.removeAttrs mainDrv [ "outputSpecified" ];
+  toTLPkgSets = { pkgs, ... }: lib.mapAttrsToList toTLPkgSet
+    (builtins.groupBy (p: p.pname) pkgs);
+
+  # export TeX packages as { pkgs = [ ... ]; } in the top attribute set
+  allPkgLists = lib.mapAttrs (n: drv: { pkgs = toTLPkgList drv; }) tl;
+
+  # function for creating a working environment from a set of TL packages
+  # now a legacy wrapper around buildTeXEnv
+  combine = import ./combine-wrapper.nix { inherit buildTeXEnv lib toTLPkgList toTLPkgSets; };
+
+  assertions = with lib;
+    assertMsg (tlpdbVersion.year == version.texliveYear) "TeX Live year in texlive does not match tlpdb.nix, refusing to evaluate" &&
+    assertMsg (tlpdbVersion.frozen == version.final) "TeX Live final status in texlive does not match tlpdb.nix, refusing to evaluate";
+
+  # Pre-defined evironment packages for TeX Live schemes,
+  # to make nix-env usage more comfortable and build selected on Hydra.
+
+  # these license lists should be the sorted union of the licenses of the packages the schemes contain.
+  # The correctness of this collation is tested by tests.texlive.licenses
+  licenses = with lib.licenses; {
+    scheme-basic = [ free gfl gpl1Only gpl2 gpl2Plus knuth lgpl21 lppl1 lppl13c mit ofl publicDomain ];
+    scheme-bookpub = [ artistic2 asl20 bsd3 fdl13Only free gfl gpl1Only gpl2 gpl2Plus knuth lgpl21 lppl1 lppl12 lppl13a lppl13c mit ofl publicDomain ];
+    scheme-context = [ bsd2 bsd3 cc-by-sa-40 free gfl gfsl gpl1Only gpl2 gpl2Plus gpl3 gpl3Plus knuth lgpl2 lgpl21
+      lppl1 lppl13c mit ofl publicDomain x11 ];
+    scheme-full = [ artistic1-cl8 artistic2 asl20 bsd2 bsd3 bsdOriginal cc-by-10 cc-by-20 cc-by-30 cc-by-40 cc-by-sa-10 cc-by-sa-20 cc-by-sa-30
+      cc-by-sa-40 cc0 fdl13Only free gfl gfsl gpl1Only gpl2 gpl2Plus gpl3 gpl3Plus isc knuth lgpl2 lgpl21 lgpl3 lppl1 lppl12 lppl13a lppl13c mit
+      ofl publicDomain x11 ];
+    scheme-gust = [ artistic1-cl8 asl20 bsd2 bsd3 cc-by-40 cc-by-sa-40 cc0 fdl13Only free gfl gfsl gpl1Only gpl2
+      gpl2Plus gpl3 gpl3Plus knuth lgpl2 lgpl21 lppl1 lppl12 lppl13a lppl13c mit ofl publicDomain x11 ];
+    scheme-infraonly = [ gpl2 gpl2Plus lgpl21 ];
+    scheme-medium = [ artistic1-cl8 asl20 bsd2 bsd3 cc-by-40 cc-by-sa-20 cc-by-sa-30 cc-by-sa-40 cc0 fdl13Only
+      free gfl gpl1Only gpl2 gpl2Plus gpl3 gpl3Plus isc knuth lgpl2 lgpl21 lgpl3 lppl1 lppl12 lppl13a lppl13c mit ofl
+      publicDomain x11 ];
+    scheme-minimal = [ free gpl1Only gpl2 gpl2Plus knuth lgpl21 lppl1 lppl13c mit ofl publicDomain ];
+    scheme-small = [ asl20 cc-by-40 cc-by-sa-40 cc0 fdl13Only free gfl gpl1Only gpl2 gpl2Plus gpl3 gpl3Plus knuth
+      lgpl2 lgpl21 lppl1 lppl12 lppl13a lppl13c mit ofl publicDomain x11 ];
+    scheme-tetex = [ artistic1-cl8 asl20 bsd2 bsd3 cc-by-30 cc-by-40 cc-by-sa-10 cc-by-sa-20 cc-by-sa-30 cc-by-sa-40 cc0 fdl13Only free gfl gpl1Only
+      gpl2 gpl2Plus gpl3 gpl3Plus isc knuth lgpl2 lgpl21 lgpl3 lppl1 lppl12 lppl13a lppl13c mit ofl publicDomain x11 ];
+  };
+
+  meta = {
+    description = "TeX Live environment";
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers;  [ veprbl ];
+    license = licenses.scheme-infraonly;
+  };
+
+  combined = recurseIntoAttrs (
+    lib.genAttrs [ "scheme-basic" "scheme-bookpub" "scheme-context" "scheme-full" "scheme-gust" "scheme-infraonly"
+      "scheme-medium" "scheme-minimal" "scheme-small" "scheme-tetex" ]
+      (pname:
+        (buildTeXEnv {
+          __extraName = "combined" + lib.removePrefix "scheme" pname;
+          __extraVersion = with version; if final then "-final" else ".${year}${month}${day}";
+          requiredTeXPackages = ps: [ ps.${pname} ];
+          # to maintain full backward compatibility, enable texlive.combine behavior
+          __combine = true;
+        }).overrideAttrs {
+          meta = meta // {
+            description = "TeX Live environment for ${pname}";
+            license = licenses.${pname};
+          };
+        }
+      )
+  );
+
+  schemes = lib.listToAttrs (map (s: {
+    name = "texlive" + s;
+    value = lib.addMetaAttrs { license = licenses.${"scheme-" + (lib.toLower s)}; } (buildTeXEnv { requiredTeXPackages = ps: [ ps.${"scheme-" + (lib.toLower s)} ]; });
+  }) [ "Basic" "BookPub" "ConTeXt" "Full" "GUST" "InfraOnly" "Medium" "Minimal" "Small" "TeTeX" ]);
+
+in
+  allPkgLists // {
+    pkgs = tl;
+
+    tlpdb = {
+      # nested in an attribute set to prevent them from appearing in search
+      nix = tlpdbNix;
+      xz = tlpdbxz;
+    };
+
+    bin = assert assertions; bin // {
+      # for backward compatibility
+      latexindent = tl.latexindent;
+    };
+
+    combine = assert assertions; combine;
+
+    combined = assert assertions; combined;
+
+    inherit schemes;
+
+    # convenience alias
+    withPackages = (buildTeXEnv { }).withPackages;
+  }
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/fixed-hashes.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/fixed-hashes.nix
new file mode 100644
index 000000000000..4e47feed0cd7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/fixed-hashes.nix
@@ -0,0 +1,4363 @@
+{
+"12many-15878"={run="1lh034gihn9gmpzf5sz9anrxqlb7qifaasa98dira5vccizs4axd";doc="10f5f3xf2bmrf794ipj5xjsv73j7gqmhgg2fjrdmmsvqij7ljjk4";source="01nldk50shy8ynkcjz0176rzkrjhxssi7x37bd7x1gbw6pd32m3a";};
+"2up-55076"={run="1phamhfskhhyg5s3ab00mv3wsz3wg18j1dskq3x1mpkc5ys9a022";doc="0ijr2gsi7ywp72ydpyj0cyxwv06vc612cpm1inkx8rhnn6hjxbw6";};
+a0poster-54071={run="026ia95qflhgfbd9c32yagm1f08lnr9iyh1l2sd2b0hf5z27z4g8";doc="029mw747qln0xcnwalw2mw8iz5zzarv9qghcwsx9jzhqijmcspg5";};
+a2ping-52964={run="1h9i49m7v83ppifkcr4cncjfkrpx0hs8b11qyjn9s9y4mi8ra0w0";doc="0yxs2va1v4s6picfqkq2k9l7295np46lc35yx1dcmddy2667k3kl";};
+a4wide-20943={run="0jw1d021vrr4f2sv94mw1jk7ma72m84idmq62imwqy23x8nfccy1";doc="03g0vwfdcczgkpbrri3wfhfbrq6r6iljpz5j9rllr2z5svlrjf4d";};
+a5comb-17020={run="00801lhrnv2qkg6ly949csp4ign89cpsbd70fcyb7r7zkd8lxczi";doc="0bz9x4297mpvv082d0qjfvynflrcgj6rn9jikwikpvq8wlhz0fph";};
+aaai-named-52470={run="1xs2iki0v1mh0kbqjxnv9r24bcfmgj6myfw7h368h8g0s1n8d5v6";};
+aalok-61719={run="0mvfl7llr57ykdv81y4c4h0fflig2msvxka08axsjwp91yn8dpmp";doc="1sz26qrydb5dl3z0g3p824f6yzs473p2a50q1kpk4zqgh4ghwigk";source="1crpql5mypbyycxzkckfy4nwn7shq1dkzlbn44lhnj7jyi4qkg3p";};
+aastex-58057={run="0w077r2lsir646ix8n40wy5vy0lnw8vdlw1nmc6fvw2hmrf3w4vi";doc="1rdpiv6rlcbd06flc3rk7a1y3xi899h53r6binbjd0krvrss48s3";};
+abbr-15878={run="1irhcs2zkam6sdl92wk07v5ckg56r6n10hgcjn5im2jpsinsad5k";doc="1z45fraywqqnc0v28jxk3bzv9cndwgs7nmlgbf3b8frr4x18mza6";};
+abc-41157={run="0fxnxavk76gayahflpa8f61j63x9y6aym7gqnmn6xfgggyab4qmd";doc="0ipxihm9jkb5dvlrk217275p7r6amnkbh352k07s7k7i7rjg9pmd";source="0461ci1zg2wq3f9qypwkxmyi0rciv8p2zk9rcajs0591fwz3drj5";};
+abnt-55471={run="0zw8vdmqcb5qddc0rf8qd67fwprwjagzy8s9ildgisb7arqmbj5w";doc="00m174q9gxsm23j3fla7m7lj5fbr7iqfw02dz9s6481nfsjh1wgy";};
+abntex2-49248={run="1q7r2j7c5p1f0gbrc3sjd5gjq2mhljf1nj5n5760snhwj3qblr66";doc="1id5yj5kh0qgjywbiajaf5hf9ix9jq8178fv2kvp1yslra7r20s2";};
+abntexto-68837={run="1yzmq0rkpmg946zpbcmphn70fpjv8a6n29n66q4x164ay3im089w";doc="03n3b9mk9nyxplaj8vhb43i9fnxvcqr4q30jfbgax50qji7lghdy";};
+aboensis-62977={run="171586kjnfg1qb4wi50mrc9jd8h2ybg6r68kwyhgc5y0gyhyg08c";doc="0qc74wvq6ibxgil36wp0b5s66d7m7axbn0y1qpzy9hyrh8v8jpav";};
+abraces-64967={run="0s1aclk85fcda4nf4i8pl3gvr65vghgcmphpwyi8n7im7kia25y2";doc="0h7nyss6gy8r79ny9klpskbh6bf10rp5f67p1x5wklvpmyaz270i";};
+abspos-64465={run="0qzx59dz7x8pn9jr8g15jsmf4hs27v8qc30phi1g5h39i9c6pmg6";doc="1a3li91yvvw2r62dvp87zzzxni3xllrzp38zg6qxfsn6xbwry9zf";source="10dx92msh53z7sn603vsg740wvbhz8hr6bcn1sjs60snl47f4yf5";};
+abstract-15878={run="173bimxd0923191xfjjk7x29j8xs5kxy7ih55l1k6dbj0iwlb9g7";doc="166lhh2vi36qbhc5gm3xx96sigksslzb17bpzncycf0zgkh7j0gi";source="14f2s393nd8q5kb909rj8r15apf48rg6na8yc45z2hl9ksfwx172";};
+abstyles-15878={run="0v4wwf9w542scqx298gcvvngl0ncal0wds5m8h96x9cz7p9wjlph";doc="0zxygi2wfrwlgv9dj69m3v5ily0av65f3qiy9vfpbjlradak48yy";};
+academicons-62622={run="1x8aahfd4ai0a9wgqz1wrj4casmda07xryci0gnmyspha5r8x151";doc="1a3vlc8cxh35vka08q8qz1hc1l2hfk4lkmkrdlnd040im2h6v3wk";};
+accanthis-64844={run="05194iwavl83dqivxahrsb4a952knr7ih0rbzd4d34a6qqf20w62";doc="0jibkv1gv94xzciidm5h7hrslj8qfikjihw3rfzzk6n42a6xbp5a";};
+accents-51497={run="1xl7fkm5gc36mm0bhx7rm9v4g2d9j22gr5fjxjbzmr6byjfgw71k";doc="0il1ccxa2ndnfxn2caz9d4mv39y21rh360lynra7q2v5j1cyqrw5";};
+accessibility-55777={run="0d7xrsdanx7wnnmc983rfy00r4290rigwx5ils6pfm0br2g5kfsr";doc="17gxz1lm39wh2a235wk0s03jc7jxd4bl0iqj04v02m994gz43y3x";source="14av24zcjqxq8v92yni6aj66cblnfzb1f07hbcd3ljbycw14ii44";};
+accfonts-18835={run="10z7c7cgwm62dyzxfnj0jiy328zj3wccqjick37lz641vqifrd4v";doc="17mbr2ydbkc4md6zd34km3d4s2vjmqzfwb2l01n4y30vjz2lzsn1";};
+accsupp-53052={run="156yax2q84naj394xzr8m7hfyl1j7pziw8d6rzkrjjgxs9p9az1j";doc="1ak7xv0hhghgbwmcviirhh1x5y9pb4is8h0a32kdd4hdxjdm7c92";source="0spz8640bdzmirlnc3rwynzvgy5fi58vfs802jzbqxb0ypdg14s7";};
+achemso-65103={run="1chl9nny4lm75qjhv9pbjbgzsm54vj7dlpfdm0gc5yansb70ghcv";doc="1fhszmzl99l2nvp3m95hf44mgqkg2mvfp2sw2nk12k8a7b2n33a4";source="1kd9dhmjp0n0y0cv7437194yhjdsd0ac6qbvx060sw72mb2dbj6j";};
+acmart-69242={run="1qyzb19sj7s9q05zqb295pl2424ip4w8pspy1hl5d0kja6vcp0kp";doc="0rvi2yz91460ja4r25p2ka79rw3gzji2qplyjrww2sl78k5xa6cy";source="1hcmzbfh7app6w9fvmj29v1qwc7x76w3szjhgx94p9lr9gkja8hk";};
+acmconf-15878={run="17l1kcwv6wk5p752lmanlx0bmh2py4hfxranapgbdrhjpis4jm9i";doc="1vyhkwqg0v3pxjnlwzwnmiffh6b3d9nrwnpaqjm24j9d2sc6cxcx";source="1n8cf6n2fdb88xmnj2m5r3cjz3jlp9n7bn1yr717fsp2ks81pr3f";};
+acro-62925={run="1hzavaicandq6sqz3sy8hj5n3kvkbic34p8id2mslizcw3rmlhhz";doc="05iwf21y45l61fsask04pphxzzjn7h1al8n2wv59jkxyh8vy8dbv";};
+acronym-54758={run="1gq7j83gjzlfbnrnz1cl0lihpdalsn6ww6hqxdfxikm28vynk88g";doc="0zscjwg22s81awq27lhqs14davwbhf5y4zsl9dsq2135rppmmyvv";source="16dds23mj3ha1b64fxz2dnxk7wsrcmhpmpz0zgqda46vaab9qiw9";};
+acroterm-61719={run="0snnpamdf0qqqf3nabl2f4pnabpjxjn949s44lb8wb4lifndyj8d";doc="1ybgfy3x0a3dz5p2gac2w4ai2yc84i28vi6x0bq61ff3v74iqdhc";source="1gja9j0a0v22qqdqy5f3ivrwablrz550gp7nf20054cirjzgr6f2";};
+active-conf-15878={run="1chi30gbr7xjcs7y3p2y8vfg6hany4wbacdm4drha9pa9m5sxqgw";doc="1css89hbdg8zgl7zf2x7vfgbl90x7bjvf0c0m0akjk8fzx936g7k";source="0anxqifjlf96z4vvr031v26s73d1a1sgjp8xv9xxv0kia4l7048n";};
+actuarialangle-67201={run="1cb333pky7vq83gfriza8afy17ag9lm81zr2f3nbjz4vrk7sidqd";doc="0bwyj15r2bf3bqc7y0dbz03bwccwlh9ygcv1frnq6bc758rfksb1";source="169m5msyy0braf61jz721isba94fx5wxinzfsr2yz9hs6ic62dg7";};
+actuarialsymbol-67201={run="0g8vm5wynrlj0764w7l9wfx2zw6ir0hik8nv8djlc96qlp8cm80r";doc="1kqfn2c7rws75yk01962nx2ra94vfh2j8rnfqk7qkip45x7ya172";source="02s6fiv0i0a1jzx4jkbv18rbmnld4gzhv2dfa1gijvzwzr1rpvp2";};
+addfont-58559={run="05a413mb0ksviwbl0y1a14j8y3np5ra5sgjcnbrslrvavf4q2spw";doc="069vk1d1ig38r6a5a87fblq4m429crp79xqccrsk48ixswxafj95";};
+addliga-50912={run="1w9wv0wbv8acc7qvcc5pb5kjxmy2nz95cb990mmgc2lxvvsaw2rl";doc="0q41i3cd16ahpklr1ddmzmfs741x5k30vaz7gz7k8jrf0579nv7w";};
+addlines-49326={run="1rkcpk1c8in0g6dgyc1m6pyz01jbx19gv98jmaiybxgvsa3z11jc";doc="1gaf9ljzkdhwjg460hl79hlwdwi0mrvgs51si8k8gvialng8b1fv";source="1m3l2s1l671n9j7jdsxfljjhrsvh81bayw40v81dm0f68g5hslnf";};
+addtoluatexpath-67821={run="1wzryl229yq1irxpj58qn32l5adhp9sc132y6m46ps283qq6wrin";doc="0xw2bvqdcr761b1i3gh5gg8gfj67sx539hv8jpcdf2scln8zx9bl";};
+adfathesis-26048={run="0j60iq9nzk5kbs12dqx5jk84n14kdlx93mcypwi9b2gn7kyqzn5i";doc="0c6k4xsy0jg95qg45bqk9527kb3k3azyxwpl2zrkw0ld6k47sswz";source="17irbcz9wjnc6rj9f736i2hw4qrjwa1gz5z6w7gvq26b68pkxrw4";};
+adforn-54512={run="1cb6w50xb9wkl6x384dhldrhpjbk5l73x5gzpbm8za4gmh1pc94v";doc="0a1f1rrii1zvd58h2slk2zj032vjqpi480d38rgi2k2j9wlbbyyg";};
+adfsymbols-54512={run="19rr3zdgqlmnrvd61g9bjiqiyn2gpn82fhj4219gqb1l06nqa0ka";doc="059fjvdmd1jgr1flv5181ac3wvby93hyykfshcmr1j06zs8j9kyx";};
+adhocfilelist-29349={run="08fnrvnbrp7534b56hn8w0nm8pbgjli62v34mkalp4qkfb559kh7";doc="1n7nah8vr691k56z0jkgyav4lc8w45rlg8k9shhqhnnpqi8zxv1m";source="1xl0f33yhmbsrnmy9pby092js83vxcdaq2gfny08pjlq57arphr4";};
+adigraph-49862={run="077iqsmfa1fpgmnppb7bcnskpa9ap4wa53ip67b4d21pa1arzszq";doc="11z48jaj6xcwrzv8y2byjcs88mdvqi2fqk0nqw3cy5pq7b5m7rap";};
+adjmulticol-63320={run="0wjqjg46gbf44f2x0xf58b3f9bxfkrh21m85mh1xsd5pxdy116fl";doc="01r00mf8skd54xgzqjicl4djjzgnf5fdw5hcbf9p5ixx1zw1jq7l";source="1zyq1r0y3amkqch1lif0dygif0sgwhypscqdsqml6ik2ziv2alzi";};
+adjustbox-64967={run="03fqxxhpc41zkj8g7dwd4p3vs9c0qg95c6bdwwgvn3xkaqn6amjm";doc="11mldsmmp1mcd5kya8bh2zmkgl01ysswcia1lips3vjfiqjp8vp8";source="0qzjxslq3bni6iancxix471sl6455syp1pglnn7xa5lxlfl43ccs";};
+adobemapping-66552={run="1yvf74mlmxmnq9m0wvda9xcna8xnn382bbrzizzjm5w7bk8c4g98";};
+adrconv-46817={run="1wx9a00jky9v8xmjhrjlhbl3kcdxh1n9yybpsr74g2vw4bwdyr70";doc="1ny594a3dvx3jba0lf72kjny60ix6hnnw8gj479ccfj3gw2wv0mp";source="1cndbrbw5hss1qi7z9mgymqrcmvlhj8hxw16qjjzch85xw1nrwzg";};
+adtrees-51618={run="1j38apxxk3klabxrm9kpdf6zbmiqb17is5yqgg1a4576n8paqg4y";doc="1851rqb9gs1wf8wl8f7pqbnxgpikzxzw1n5mg5w0kcwd889g17yc";};
+advdate-20538={run="0wgr84y3k10g6622sm11c4m4wxj73vpklf5i5gnp14yamwi19cn8";doc="0hyq7kn10ajqabmz2r363wfpdi71a9zkv6yr30s9lda0vy5vz4k8";};
+advice-69283={run="0p76w2fj14908vfajmsjjv4kh7d77vyd7x24zylgil07p2s1i86d";doc="13hngcgkihzmam4fc4clkb49a4mzy0ip6vxx06b4gykzq8pdvkkh";source="06bfcx1pv400zk5lyz9i8pg4i8kax370jby6s9p10p91wym2p67d";};
+ae-15878={run="1nbhlv1qp7z8j9bhfrljmpjlcrl346z1r7f4hdxijdql0wxs6a8z";doc="1qgq32xw5micjri99zmznmq8gsli6y9fqdi2l7sv530ri9i7kgxk";source="1ljkgb4qj0wa6yxddx4w8w15z0nw5vnyh0cpzc4vwkc0m03xbrm4";};
+aeguill-15878={run="1klri7b3isxwa9lpc2j857y8r9n9x1av865jm93ha6nrwlzqk7a3";doc="09lcp9in9v7vxck9kaql008qmcvba3g8glbm6rr5iag7nn2vbvj6";};
+aesupp-58253={run="10yd16v85zbkzkxb17gr4kf4li28ims33i1zrkpygbdf10nclxcm";doc="1dydcjdz57kn3gwb3pfm4yp6hr69pyqhy5lhm9pnlcrycvqsn8qr";source="1s41gd7ansh80z6mmwwha7pypaxwxxvrz3sdfj24pa5b2agprq68";};
+affilauthor-68996={run="0xrnjg386xpa34l3n26myqkx2cjk06hmj4wnm2yz29kyj4n8fjsh";doc="1d0fss9fniwwn1d8cmvwyjj6fvl5s9jvmgclh6da7pywdw5xgi3q";};
+afm2pl-66186={run="1nbb9lcxqxj2aary7a65fai3hgj4nwzm690iy0xv62v580krdbck";doc="0akl6by43kha3rr9dwnr3hhnnfqg4lqnxv5pqf64cnp17ih47wx0";};
+afparticle-35900={run="0516hjm1v88vk70ggagkj0s00n465y08fr2ys3f2gychrax425a5";doc="1ajpc55z02q8wgriwzzm4f96dmn5bpi9n81zad6kay7c7vwfa9g5";source="03cx2ak956rdwdd5ya49fh81vdwrzq9y813r1h8qcp618sr3h14n";};
+afthesis-15878={run="16jyz1skb9l78dwphggq23jm14zwhycmkx3kn0sm13dcfifrkxpd";doc="091f4flclyahjlxwa640l7vmrfiyb4wqgkh19caq8fld96zkbjir";};
+aguplus-17156={run="0z7mgsm9pa33gykhwzlmpa3shg7ragrz3jdp8qfakp5ck2mbjysh";doc="1105vsng0yramk84pfcg9pvzjbm3cbyp84m6sxr9wadw02z5kj8j";};
+aiaa-15878={run="1z91l7lhi5pnh2ignmskd24asaalhyhdywkl9j6a7dp6cplswhy5";doc="1sz6inilvyaqhnj1z88rws7xwkhhpw35il4ppxw9kn9pwvnrn0vf";source="1lsbfp2zvhpyf1vb1ia9hdz1i796dbfqpndcfy8lay48f89n3njg";};
+aichej-15878={run="1pr92pq3yjsrbax6ah01cqg7131fp2rkqqjnxwcrm4119z2ic0gf";};
+ajl-34016={run="1xkrvy06lw4ngj94zybs14ysal2pg7g71h864gq9bjw0zwq2yjzs";};
+akktex-26055={run="1npcfjjg9nwrb392g8pa4yq6i76aq4ys67zil4qgkf4jyzrixln9";doc="10ma4ic5bazlmizxvwks6w3qqxbbir0rrhzj1yw2j68p0600nmvn";};
+akletter-15878={run="0gigzlxkqmiqz4nwpxj98rcrxmi6yfipf5bifg1mywchnw7a1f2h";doc="0ngj7d4vdnvh99inw2vggqdgx6h2hv5z77glxjcpx8kmxf8h47sv";};
+akshar-56277={run="0g1pbihbpl3b7k7c19qiq7lcgx3zrfn15065dyan85bs8h85c2cw";doc="11a18b7a592sx3wha1lpy659hgh1wnka16zf8m0cbc99f867xfln";source="0g8j0015dm3mhphg06ma9dkgc28ywlihr6pcbi254qaxgk7kdn9g";};
+albatross-65647={run="18bcgycdzzhw47ci9lqyrbrahzax9ajfi5w9vjs35j294b0mk963";doc="1bwg2gq1fdpjlgjflfzfijabx8m6nfraak684ak6qdhvjfzx1aha";source="00w3byrzw0lwzjqsq0r7h81daqs2sg3ywwk3nsdbz0q4j6lkpv82";};
+alchemist-66924={run="14gd0gb86p247bz2x2kcqqj2b0r2lz12gpssfz84kgvrwx5nxkvr";doc="0d8kirmkd1shkbckv32i8yxdrpwzss7qgdn2i06b6mwakisy93v1";};
+alegreya-64384={run="06hrvi0dssva2r253k9ma1vd6ij3bi2d0wsrk2n6fnxvxbl5xc02";doc="04wx39xdvhq0rfl4mz8k70kfv74w6kpyhja5879g0hp3pjfzxbcl";};
+aleph-66203={doc="0b7dihilh2v8qcp4m8fblyc10jc5i4fhpj3pspzinag0pk66b7nb";};
+alertmessage-38055={run="1mj3wiz4fff3ry5q4dk3k0kcx4bcqfwdvgaa9x3vczs746q57dcg";doc="1ga46r20zyb1bq7pvhq4348d2prdshy5m3yx6d00v5zzis1dmx1r";source="0n36cfjgh1byik8zn997lmyz2w4wmz48f5bzqrhcps7bg3kmp4zz";};
+alfaslabone-57452={run="11va28ww6qk97wx8fh0iqbm8b5s14vf923ydpglx4gann4w9bkiz";doc="0wfhd5pi1p5xnkq8lgpp3fhqn8y76h5jp3h5qhlaqygal70fw9kw";};
+alg-15878={run="0lrzrij15s989hy2j9wi1fzkpzvqjfhmgj6ryry0gy7nk3azhhrq";doc="1lgi63jx57arpz688i22razcrzarl96id8xf45vznh8iraba3sja";source="0mjrh4mnx8q9x40vr4csj3h3w7wh3hs8hidbklym29d0scd5rkx6";};
+algobox-67201={run="0xplb7wlbizzy95s4pk1nhl2w1b3g80frkd8p4na2rv7awp0da3d";doc="1bp5b0zr6shhaifkqdliw9qa18ym4s68xfk6k2njjnwdqyrxyd01";source="13cwnl7nxxrs0jsvfrvcy7a5pg8a92qnhxjsbarcx3jmg43d4zp5";};
+algolrevived-56864={run="0qsxy2az8d0sr07mz7yxca17gl1y3kaqmvlckjdckvwq1idh7h0v";doc="10m3rgczhnkalf2f945jwrpwvv9szxh3v4wggl1rdxj12ng0svlq";};
+algorithm2e-44846={run="1iw3yhdk9nk1y41hw1qcpqiqaxadjc0nf6cgb23kd75ah2cpd53n";doc="19xsi1dgxfi06wxls70pvnys20i2na2y7m2hq8y6v947pc5kbb1b";};
+algorithmicx-15878={run="111iyi2j8qnzha97r1grxpcbnfkpvcwndczx043c4gw5wqmrknbj";doc="1rb46zi4islfbykhr68rnrkj4q966papin0c5m752gh6kzx5r57p";};
+algorithms-42428={run="1va2ic75nf0dfh0dr576lpgqhzqv5203frr37079q648871zqav5";doc="0fqif0nb9ypd4sw2i9qsxl81h3g4h0gm0yqq67d5n9wrpic8dnjg";source="14jgc7vnww5xhnd76cwix5c599sfdjil2i916cfpmsd5yn5qqdx3";};
+algpseudocodex-66924={run="0mpnwm97q1i40phy61wiisf4pn71hn0hwc0x0gscn0jalvfx9g5l";doc="112p7zg5rdf0y7iqs74xwblfwxfflg22nb87bdgkbizmsmy2gg2f";};
+algxpar-67495={run="16pbjpr8nnm4s2fz2sdnrlx7mn3bnzhwrijk721gzx81qbq27cw3";doc="0l69rr17b7njp3ywf5xcrnxvixmkswgaydj2bwrvkrazam1gnkdk";};
+aligned-overset-47290={run="04gjl08y9wbv5qls9z2plxx5n4abi4nzd8qik88via4xghhqiy7i";doc="0il97kycqgqqimqjvjhnhc2mxy2nja20vlspsqrl9zaah71p1b3d";source="0zbaa3m06kfkj7kkv6iy71d20n0kqq1dwy63dwfj4l49wv427z08";};
+alkalami-44497={run="1llldpmc485zxlw1k996g3gfffb0ixx72afz3zkj83i78dpx180j";doc="1315idl4yricb06bh689hhdf9jkc0ckmdygacsx3ywzxj1zcrcch";};
+allrunes-42221={run="0xgh3y7h57lkzxrhddn5wll339b4zih4nb6a36ymx38a6md7b8ph";doc="0dki14g1607a432549kly1wcy1p6j63lrxfd3m5nyz868kg3hjmc";source="1d49w7lybkn7sfig7i27mfwaccr9vjs7ab2ds27jmhp5wjl7w02w";};
+almendra-64539={run="1zij84q0ml0zf0dig3hqlmznwygcp8vbmwl3xc5qii7hs94hnjr5";doc="19j6vi1z04j2zbab39934mflx5qnqdjl4gz9n8hbjwlhiq0wb82y";};
+almfixed-35065={run="0qrai75pdkf4py7nhggvwzaarv4jlh04dqsy1b593jabq7ngaap1";doc="0arhvv7z8yf8kcikzybhbsgsj6m9zy4is5ryr6hcf6a6incnkp1d";};
+alnumsec-15878={run="08i891g4b3k1qqicbsgd3h3sy98cpk6g1cfn17g9ysws8k20a0sy";doc="0fanq66cm0r2dgpdrblrhqkchxpy2dxykq1g8zrk5ddx27v6r9pd";source="1ssw0pi7hn3s7pqcqkm36jjgmd5g2x5rqyf2khhdscfwrsjh07a7";};
+alpha-persian-66115={run="0673i0l6vq1h37g9jqcp7am5kl4dfbcrfqp42c7cr6a10zhvfqyr";doc="0cfl47cqpwxn1k87h19a0ggayf6c52sl60sdrmpa7sfydhg9w4qg";};
+alphalph-53087={run="10gkh6nnhsrlqx8b6k3dylings3q97ky4qsv03nk7hn41zkqsyq0";doc="0v36l765s4lc5r2xfi8a3i7vxf79yxy29xy52cbhx4ps0av4dxpi";source="08yagdxgqvhvq50cc7rvb2629g4n2qjga86dpa43x2vjnmmz08vm";};
+alterqcm-59265={run="1mffpja47m40875i3vk3ha4vdgkxha6zh7q7fic7jfddxcdmlf11";doc="0nh7861513mpdspnkd6k6kaydplmimkzh0a19svbblqwxwga78c9";};
+altfont-15878={run="1nrcjmf59r672gmqks8spqwz3vn4jrwc272zvx7ncylphsjmip70";doc="0c5hz0zjcar69w489zz2a04rbnc3j2lp8yccw9zv41ninzl94ifv";source="144m2ph835fl9x3ypc7wfc444719rv4clfdar3bk73gvf53rmjr6";};
+altsubsup-62738={run="00yva44w281zlba1c1m1jz0c1j5bwynfxf37k4sw5am7asxzizvs";doc="0nzc10vbf16bk8v60d97nw02ryl7bd5b6dv26g6rjwfpfdic08pn";source="0kdsv62j78ypa6z9098d60rilk9p0n72628cwihzyp8kv1g05049";};
+amiri-65191={run="1r5zic8x2iny7g2qam8wv640hmxdjyb8694zck5xv65mg1aq2ckx";doc="0sfxafi6qvihr70vspyfqqcdzpfjb8i0m43rlfkgnwfwcgschpxc";};
+amiweb2c-guide-56878={doc="0cxwsx49p3c162ysv0ydyxdncfg8ij9sx2x7c4pvzb0yidvad01c";};
+amsaddr-64357={run="1mbbs7r8yf7fnaaizccff12k8valncym1plwik07ajj78vhgfy5h";doc="15abzspjcy683xgmplnr5yxl20phr6176i5hcz0lmnk8d9i5fmza";source="1rcid86j4vjmm54bn6yj09kjyz3v6kfaxv27w0ajndrl60fm826q";};
+amscdx-51532={run="0ncbf7ss4iwyjzp6lgzgzn3azy5iasl03565kgsm1pcbgprqibgy";doc="0nfpbma3cawyy7gw6v0w81maz1jgicb2r4cm5gmlipzxwzl747if";source="0jg2qk0a9y15hl4w753yhjff28w9wc2vbmd564lkikvg60b9yiqi";};
+amscls-55378={run="0k3di45cn0g6v5j7ccgl0nys6ni1h17dkhmkz5b5lsz4zzbi05fi";doc="1lb1q967zwgqn21ix4gxbzw8a8649p9hky4ckd61l0bxxil3mhjd";source="0g1i4nj0y32sihf7hnb8jwyh3d3qmff394xgw8v8x5jp8q0rh2bh";};
+amscls-doc-46110={doc="0allim05cp20zhn480df2mivd3p9gnc069d7hbjlzv660bw7mapx";};
+amsfonts-61937={run="0l3ypclhv5qdpcpy29xwda2m3cjfn5l996agas6yhpdr2m58q211";doc="1v7chx5rvvqmcf7j35qi55wxwxkbfkbv34b15yrgn6bflniziicm";source="064gndy9lnmsq2srw5hh97sbdk8gk0qv9zzki00ms3c6rzhd9sjl";};
+amslatex-primer-28980={doc="1kzayyh1bycmq43s2xn81jf05r18azidbk3gv6igf2vaq37fmxil";};
+amsldoc-it-45662={doc="0d4hwb7hywy56d6934448lcr6fdx7qchkfzs806dr7wfzfy36yix";};
+amsldoc-vn-21855={doc="1iz0zjn1v7izwbsq0zb6cvpnkbvk0nxw1b24j7dzqwk3m9j43i6x";};
+amsmath-68720={run="1igdsg0i32hi2db8ymdgvyd3fk4iiihspvcc5azw11fak9wvh7mi";doc="1kv670h72jl64cjfidk0h82whf24xhcl8vsrpppw6w5rx252zzfz";source="1k3lwg72h4z0gyj9azr2b7b78x1q5h85675mfam2qdl3iljnaryh";};
+amsmath-it-22930={doc="0xcwsk8q9q3nsz8wbklgpbw0vzjw7iw0chffzcbp2zsk6rypqf7w";};
+amsrefs-61937={run="015spycf9ycxav8r046yn7lrc892nhkkrf1say1yy9karsji6dnw";doc="11fc87kbdm440v4qyhxnv654mh0m6rpz42zji38qspcqj19rck71";source="02q2x8zpwxkyrh9v7xqw35vdjx0b4fzz95xcv6vfjmynm8cpklxf";};
+amstex-67930={run="0l078b9fkaai7kn2szn5hblqp3amlafr7ha0hjcn48657wsjq4jb";doc="0j6gfbkx8vfalsxq3c4fyjs0fj43a2n8biwainfdmxrhixapwc0w";};
+amsthdoc-it-45662={doc="0ic88gs89m3d9ys40c4k7sgx6wy82c8isg2qkmd4snw5yms6fpaz";};
+andika-64540={run="1bbqdw8r2l53q9870mnsyaiq0gfy1ac808qqmyrzqqz4ai41zzgg";doc="0ajjaqdfxlvsmpr9bjmdkzwbdbz6ahxfw1sj1sw26r33npy0c5bs";};
+animate-67401={run="19rq0pca3q8kv1f3qf02n75326ngjxjhk4hcllzsl5p1ngh4vw8b";doc="0x991qbaf5n8bv95yc1k67rjas896ci0iki62yl7icfbmcbz5hd2";source="04bblj8wxx9xg8zr6b8jzll5v69vdiz3yzxcdcm93j6zsxvw7bai";};
+annee-scolaire-55988={run="0lwc36v09a4ji5fz3pq9939jm39729k0k7hha4kkk20jc3j4jnds";doc="1f0qc5qvsrnjddp1kyrcigd8is2y9nsxc9x8a215p5xds2z5gc30";source="01mga2nif61mpkf7ifzhsj5pq7wzm2imlljap4c6wcrzb9zlhfx1";};
+annotate-52824={run="12q3xk08ycz57vsrcr2glk7y48w8sbc4n8lrqaicd46cxfd4jdqm";};
+annotate-equations-67044={run="0lqi4b3fkx9bijs2ddq479bkdf147rr7j4zwinygs2k1fh07yjma";doc="10b54pcdjl4ca36wrqc1pcxa7vp02f1v5i05a40iawfc884wpcvq";};
+anonchap-17049={run="0nz53v74sigvlb4dhgk5qcalw7nrc1vafbjx754j3gfyp2ilaf1j";doc="06khbq6p3drxsbjwgkm1sd163f7nl8hc52pjsm55g2vknib5caa9";};
+anonymous-acm-55121={run="0blyv8pj41qa3fvhwsk9kq8qwp8x0b1iz7vyc3lxcpcv626aqr2h";doc="1j0fhwv26ziw6rvg1s2x0ry5yq2sfa8a55xvpyrzl6pjmzrj3czm";};
+anonymouspro-51631={run="1qk10w52722yzlyvk2k733sp1h2vic3rjcswkhx8j21a2g9xgmjh";doc="0ijsn9cbkg1f29x0pj6a4p5d4q14rqrh2mjid57cb9qjhvgvqrm8";source="0fl9sd9adhjx49hja3k4iy9pcx3hal0wjzxg10kjmi4j6qvz829s";};
+answers-35032={run="18s0c7hdk5qnj3svni93m9lpj81dhla9v7nsmcgh0jabhwy8n3v2";doc="02pfg28dz10w21ap4pi2csvy32pcvmp0baiciavp354ky4avjbdd";source="0mcczai8da24jvmakc7glr2c56yhq2jv58y1xqv6ny9hg4ph8v61";};
+antanilipsum-55250={run="0xz42icnw36dvkxlh31g8hvy37mrbafgihm7l3ivh1z4hg6gabrh";doc="1rfx3aqdvl4gvcrpsqzjh9dglk34ll6qc1a889yz0np93psnwmkh";source="02qpjks29b4fmma6qm43p3w1k8h28wv1blpwjnnsfq4ii6xrkn5s";};
+antiqua-24266={run="16pb6v297iqx09lb6w6zfcyzhwidd1cln14rqc3fblbmdaggpays";doc="0pwyp1j02zh51crp46rlhbdnwc2m0blcrg0yk43yfc687q3jx91y";};
+antique-spanish-units-68998={doc="16jk9srxf9ya7h80v77f58xdg7dpxhpcs35lv6hwv4g0yas71ab7";};
+antomega-21933={run="08if5plzpj7g8m1afhq8ci6m4yba4nnsgglngq94ka3ga8czfk6g";doc="1mrr1vqkyic5nyzyxkw7zq67yz4njx9x68cqr3vjd9d77qv85i00";source="0s0dzmb00hqbp71nhl94w0ns1dqj5fmfqw63z789iihqznyxkii0";};
+antt-18651={run="1clzmvpglsirsvm8nsc3m4dkz2va90877gmsrm7jfkhm62xv9mpi";doc="0kpiba7awkrjr2rdgxilni1yi8p4ycmqyy09c1p9j1ld82idsjcm";};
+anufinalexam-26053={doc="1v1k74vxidgxn5zzqz6v9zga468kcf7hwdrnvw44cd318221y396";};
+anyfontsize-17050={run="08dnpzjajn0k6hrf12l1p3ncsqjiwafzssa205k2zgsz61m3sis6";doc="0zmiklc2adbx5klyyjdivicd5j19i35b51ddm3nhfrcqrfvjrxwg";};
+anysize-15878={run="0kkjzsk03bvnap54gdf0i797zqq6bdz39yh4dn810l5hyfqxbhwc";doc="15z3sa1zj1hbi7cy9q9wn4mcrf0pb3n39q2lhkx0ijhzaxn0rmvy";};
+aobs-tikz-32662={run="0fiq64szq6243gy7vg99gi9zhz5c0svrwjwj92qnv131zj71lcg8";doc="0yy2nlq6d6q5cijdswkn3b1f2a3j5sbl3fdv599vxna5pgywsw6s";source="1dj665gs9cbx3mf3nqr0944kg59gwg43ll1dz9ci3jra0nsr8w5q";};
+aomart-63442={run="1x69rs1k0zxkqwqsyjmzkwrxiy1hdsd32dvx7ha668l9wbq7582q";doc="0nhj05cm7fsi6fpp2wq2p119y0wyk2ag070lnjj3ri1zjahx5yj2";source="1d6mpqd07fayx5g8kz8937jyj6c6rbw1g8w1amq5sb32215c7q2r";};
+apa-54080={run="0g7y5l9908l4aikm0mqgwfcdg19dbllcgdp94cl1aha7h4jq0971";doc="0bzicm0x6sf78jbrqp66mgfjmcd7kw0rgkv0c6ah9945b9lh4ly5";};
+apa6-67848={run="1zhm599xqx1j8yqjp20xgafm5xdnsjdh8pz1xndjhlqdxnv60044";doc="01iv078nfv3ilh8yjkf2r9c9kyn7lxxad8vl0lb4gvi706p3npnr";source="1g987ikxqvl0b1zkf5kvwg9dzy7c4k1rv9cl4r8ssdfm9bq7fvwl";};
+apa6e-23350={run="1da46dhvpwmjvm3ma4zbnfgsc2yiqg9d6rdrw3bd5h2ibs3vnlmg";doc="17m97m9v0pcs58i3k7sdj9h1vifv3f0cxxyn4fzi8pxvzljwl5qm";source="1155ic0k6f6gw6zmqq8pv74hcn45skjzyarf9vpkcksj96qr07ba";};
+apa7-63974={run="1y286f7vyvgnyspp0vzagf8xc81b02029zn40ggh5bhhysq06wzf";doc="0z8jfr76r9rvqanljhq0fnx5z2w59lxk2mc9if6z7kkid1m8qx8m";source="0xx3yvjknqsk36mb336hlvvsldhmp21vblgzl2zccp347g5530z1";};
+apacite-54080={run="013769hi9alyizx08a0v1hbl03h5vkwi6a6ar3ghw8m6l445xb8m";doc="0d49bmdiiriklmh99kavvm48zh29bgiw7zr5jbcwk5bw42qarlqa";source="0hsrhw50sb8lphxib4jmjgplfrmy95m56a1phiac4kwxphlj9di2";};
+apalike-ejor-59667={run="1498dg6dcb5d5vndc794427740i6n1s68kwj9vzcpfpgb67khpfz";doc="0x6gm4djf2bfs92zsjzmj41dvv7pa2lawycjlmazsr55dd3assdd";};
+apalike-german-65403={run="0cv9dqn4nrsdx2cl7r6xrg3j8h16ni938q6xdl7s80cpff79m7vg";doc="0pbx2ghz7f67c3cbpk5c11nv9pkx9paq2hgadnlz1j68g71b07fv";};
+apalike2-54080={run="0mn84ahwjg8gvw5lifvcrnch11q79d4bgw3nmhrh4v8slwgip5l7";};
+apnum-47510={run="0qqm8np0jr2q3dyxapd49g35vk6ch3k9ar43yq740cfa7gs23ss7";doc="1jjk8a2aif4f7gmbj5laph0q60xpb0yv26j22z4ay2p6yf6a4fy5";};
+appendix-53718={run="1xcnin7414mb1jvgs7f1x27zkl73sabmqb31i79n88gi245bp5lz";doc="144hblxkrfp8g040yiw1k7nr3anqb80pd9c2g15m88gbb1xzyay7";source="10gnkpwvm08zqwi83s4xiqshp93v5ai0qg22n7zcwgaq86mzs44w";};
+appendixnumberbeamer-46317={run="198sc0fmnx7b31j2mgzjbjyjjfsn0imw2j8pkg8m0r2rlphqx72x";doc="1b1rwcxrs8cm3zfadi9jpxgzcgai36rlnfragc9l5wcbdsaw1qp2";};
+apprendre-a-programmer-en-tex-57179={doc="05779lk9v849k712wfjv0mhyzahwpl4n892ydamfdc5yg05bsnyv";};
+apprends-latex-19306={doc="1xzy7svb2xz6bdfg0f1r3whwda118pl7qdwygx1l7h4d1vqm2rcq";};
+apptools-28400={run="0b6yzpk2d79qg2irgfhns0w05i54z5z22ik5yyx4w6wg45v0j389";doc="1n8ak9cw66780zkk384vpjkxm9j8f9dzlqzshy48q7hhprsg4p9a";source="1ba08rixibjcpi420blw8a0v4c4zi2byll7dqlvwb7azqr6dz720";};
+apxproof-64715={run="1v42g8hr93afz1lr1hbvycgws92vg6pzig1qqjmrpff11irwfa0h";doc="1043sl948r89fzgzxwn6n4sjs1jl7mxr12hq9y4ljgm6264kw0d9";source="0wr9vjn9vmljsx5gyccjzcqwx86hza7idrq84f7b9jl1miwgddbn";};
+arabi-44662={run="0jmx0xsb3hz5i25mmqnxgg3bikyr1w26i3364cqrp50x9sqvkgfm";doc="1yipdaiai9fbmrxkacqwnbibdiaa5vskzj40d1hxv6wnkxvj2qkw";};
+arabi-add-67573={run="1ylvj2w98dly6blpk2aicz206rfg5xzqbcjx00j3jnmw7g847kxh";doc="1d1wngc0179p7ij7ibnyvq3cxb954sqywxyv5k7a3dg5np9zlg7j";};
+arabic-book-59594={run="0s7hnmz67hzfmfzc0mniiqfi6i8c8qzslbm92z1wc3a2hr38ihk2";doc="1j5h788vsmrcag9bighp6kz6zx40ppjzwfa070ic140lqzz2b024";};
+arabicfront-51474={run="16426cyvrk461z9jb728w6glfm0ahss82kkq6fqkhajjc0cflhwi";doc="0ck7nl7v6kvibiahh3szf3nbibwajg2pjwrbcz06frpfwhizsnp4";};
+arabluatex-67201={run="1s66v0qns84vhpwvb9if07b9s7957jmxxd643g1mddg36z6pkqfj";doc="1rfwl55la33ag9plqwssjvgq47mab2h7ljrw5w6l96vq965c2csa";source="1g84xxm5fvp6dzdrkyxcjn4wlih0iydrdyxn93dffx1a9n1c3yyg";};
+arabtex-64260={run="0xd2apd35zn1c4narj2gyla154nzd9ghhgc3fkk6y06d8dzgawv3";doc="1zyyk778384mhma5q7ra75fwykk23i63q4jzamq4zard0y7gp4k0";};
+arabxetex-38299={run="15c8nmmv87x87dbjwm1q0acf7pbbh8w9gpiw77fs2i51gab592xy";doc="1ns1y2lf87gspaablh4lm3kj33ggpfp7hcxbdv4vxf8hhfc4pp7d";source="077r71723zlzfjmc471a8hbxs1v2g6j2xpiim3g2klxsj589bxfn";};
+aramaic-serto-30042={run="0j1i5snrgj579zx3cn7z7dhi9rrq0ssl392r2vxykcxalcc8cmg2";doc="025nkiqh91laaj3yx2qkl5z0jcm2w0qwgqm545dd98i5y1a78lfx";};
+arara-68431={run="13cvwhaxr6a8xbi5kdm6s310zy6q6fmfynbj4hkjlh97ij42scl5";doc="0mnanld6pmgnimylksz34fx9gjmcbm4qwfajkisx6h5f3qg5419g";source="1k2grs77d2pqybvnnkk3xy7rxzm1vk03rcfgzas92v4h8r6f50dn";};
+archaeologie-68476={run="0r2j9n7vbdj7virnmasqi9md81wbc5b53h0xwf4d6azh0isy0505";doc="1xhlp6x1ixqn5xj0k9xz5149jwf9zgp3nlv0ncyjn5nzqkky0jyr";source="13wmghwrc89g8kmsdsqjfcklbindkrc63by2zlgig29rvidzn4lj";};
+archaic-38005={run="030a281kl48ixl4vh378bf0341lrrpvh73ws5pjxyhvs6cvyxp7i";doc="0m64lsmx3sryzdmbsmz7biwmndpn66x9is8apqn7w64y4b1jjcpk";source="1231mqascj96yi4jj11p4zcxgkpzxi3p0zxnjq8x5fpajz386kq5";};
+archivo-57283={run="19hr6vc7x9csjjd3i6mz9z27cyq4pz1qvhmiwbql2xhvmbcd871q";doc="00cs206zp27vpw06wqg7adwj73124zbp8zwfvgqsh9n544npvfmg";};
+arcs-15878={run="0qahab6a041wn6s6isnjn93yrs6zk82g90x5aqpv742b2y8cj5ix";doc="05wgq5pkzxg3vj9anlzjq1jvwj7b6wvsp7a02syca6n4qvy1v5a7";source="0jnvkhhcqv7qgs4knwx1kz38x305a19kh13wn47zqlqn65991bpp";};
+arev-15878={run="1nx33blp0nfqfmv2akj7w79qg1rhds40k7b58v5yvyrkx0hpn0hm";doc="1vscwahxzdcb6879pbrxdlfpgapc0bia2fl3jwilrm1has0ffjz3";source="1k524nfr5zb0nmhhq8dfaha4kv9f2ika192scllnn1bywhbpn2x5";};
+argumentation-69023={run="0pnr7z8by62zi1d8qbjmmddlykrkhhisqx4n8lhwbvi3qcrj48gi";doc="0mms537p669wa0v301g51sgigzxdg49rj3kg8i3rva22hm3b7fj1";};
+arimo-68950={run="0idfg33qcggv0cmh1hzpvzz690yikpmi76xpfh19py168my01mnm";doc="1yx6lp3w6s6zz31cd8hvhk4vdg2whzh62cdlhyglnb90a8hjyis4";};
+armtex-64182={run="1b347npswdail6q3lryxi1y8ac13dxvajzz6xzfglgpy2a10ykc7";doc="0v4wfw869d143idxnb19avak8gpsg0n3cyf70xa7zq6hljpq49vy";};
+around-the-bend-15878={doc="00nc6kx4ylz9g6vmjlgyjvmy1ls86pjblbcpm5z40wh5xl7l184f";};
+arphic-15878={run="04a15kip51zp4bhrbpiv4m5pm587xbia792ckj17gj281ysd4817";doc="1z1z7nnncp4dpb91bajxf3li47k011jn5jbxzgdaspa5mjvw32k8";};
+arphic-ttf-42675={run="1z8fa90baasp8j8539a4kzilah602lik012az7i3pc0dnm4m2w1h";doc="0nfbjnprd71dwp2dxmkmdggfipa36w4qbps82czn506xpzh07lav";};
+arraycols-68277={run="1dgqrznjh5irbcic6dscq1xl3gyfvg3dnrps0ki1ypq24cm2cqyx";doc="122iwnlyci7mkvzglzrbl5xycm8rl9zp8yrhb3ky92hqqv1ywi88";source="18kzw3c2gja12808d4k7vr55p39rjs960fv9mmmpld4azw2f7c0q";};
+arrayjobx-18125={run="1ry1gix4nz11kyrfpbhy160c8dir2y68jbmnds64qcdafhfv4b9m";doc="1hqjhkjh5ryhjpi98hyi92raffmish9n9193ry75mgfx1p2b2w0g";};
+arraysort-31576={run="00wbmciwdnafwknxxrnprxj4xvs24xxwdwmn5y5xh1c8c3q8rn09";doc="1yn9kbq8icd5gxix4kzp0qszhg1xy59s4m8p66a88h3cwcs7fjba";source="08gbn5s8c7a8klg605kalr2mdpijy73pxvfsndaw9jdnr9ipc5my";};
+arsclassica-45656={run="13fql9q89zkdhid841hwxyrdbj6bd692lnc52d0yiibrd9gd9f4a";doc="13cqb49296wzph7msrhpzswlyknvhrjaa81509l4j4mx1snxyk4b";};
+arsenal-68191={run="1pc8k3zslxla2ngz29389l4n9ahcbp2m4blydpg2bz0qhs0zqapb";doc="1y86inslxi4y33qc5p7x3gbx3n4d99n3dpzq0ap9ikrdcxgwd0ds";source="07i8ynjbr0w8kp1f3pm65hnx766kxp2bqdps1ln0qyzhk2iidppg";};
+articleingud-38741={run="1ydj9dysf2qgk36ssp8pdr4c6dh5iw27kcw4ykzkx22ih5an0n01";doc="0mkv9fq0hixkjf40la5na4dh0yqi3adgr8fyi1x74sbyi78gmfhn";source="1h1w0fxa1cyw5d943mg8na7hxwyq2ki40gql9y0f7fdx31faiavv";};
+arvo-57213={run="0i9x668hjr2b6brdysl35rxgjji1zdsn6wbf21ql0xmn53frk4ic";doc="0g4lpx8mra2qk9c1qwijilscq48n5n252m6s0hxfraj5rshrhc1j";};
+arydshln-50084={run="1f2y02l7fkhrc005ib1s94z0yxgql2m515zy3mlx6ba4mqadh9c8";doc="0xw13bdw67n2nsahi85bvh5p1xrd8fpb1aj79vss9zgdslzb6j4s";source="1xhnh7jw0sxy6vkw31gcxyxg06dm7bgw0njsfkailbxgndwcp6zs";};
+asaetr-15878={run="05ff3l9qhk7bc2k2kk0acpyy4fxdfh3crngj7lgnvwbxa5wh8dn2";doc="0whp9d9pas44j775i4vn7zh5ss0yr4q5vbx51kz768zwgs5x8222";};
+asana-math-59629={run="1776yxdxk83540gwr0qxk3qs7yfv4vysxyvcwx1djhd1vrwhkzh6";doc="17bb9m4fsmrhbk1hbqyynkvlzgcq45lkg68kf56zs2c00dxcdhp1";};
+asapsym-40201={run="1m4ky7x5pavf8kpyqrjqa5ara2iwzqc3aglvbsjblny7n2az3dr4";doc="07n000aa7yjvx74vspqq1rrqw444z3f9pkwk3hdmmqm3p1rrw912";source="0cacvd85rh2j0j6d1zjrisffwyzh0pphzsgb5bxfq3dzycsww0iw";};
+ascelike-29129={run="039w1lm3bpfrrb5inrmzklmr9yic7x1fs0lpjl8z49mijvqsv1df";doc="1hb732idc36m86qgss7wwsyqj6zgirh9qvf7ybpmqz6arwsml46j";};
+ascii-chart-20536={doc="1m2x7iwz80plq6hbhp9xia6bp8wbi03iifs0pkr7ji3gn8hqgh1r";};
+ascii-font-29989={run="190ma5qhshn71vhsjzjb2gxb54qjabili5m9v98vwj173sdj9cjv";doc="0nrnfvrcgwmv46x8f9ybk1gv6vgv8jgzhc8480fl7y17dii3jl9a";source="0xcv04inym8230k2ljb16g4ajj73gggg13w6zkxxq8a1fa9lwrw7";};
+asciilist-49060={run="0ni7182xwr3ns1dk8i75kf1cw9wpfagrf1y7w20hk8fpfymx2669";doc="11gyi8mcqvfpn07f4cypv05f77vhzr44zn6y1idlbz4mgzjw3kp6";source="07k13s9y5nvbp7w1ylyj3mlpn80682yhxgf27hz9aayk3hs77d58";};
+ascmac-53411={run="18hw5yyqbr8ji39y39293z7a70czipzw00fzfsqcrhgdlid79sc0";doc="0xzwc7kw7hqpcmisw5wm3n508n4zr4s207pizdhfm2q9mjij0jvr";source="1rd5qmy9miximwv1n96h6djjmd3mdgn4b0955marf2k457bb71d2";};
+askinclude-54725={run="0s1938harm9sgna3cggllpa1g85yl9jv2wy4b4c5v6fksiivxzs1";doc="0gkbk6j2wv05kgfbjd4mqx5k7rc22bmqn47vk7pvr5z60dr4nay5";source="067dpl3v0ipspfm5f2fmcmg5cb6lhqg6n8216id9j1blir1ys3mg";};
+askmaps-56730={run="1r6lk9szs7jm57b4hl9w4ngb9dqcsi6pvp37rcnwnznj5m2daj50";doc="1ryw8yy59mfi13rrwgrfg5y5dy3cafz2a3f8zmq5fbl7zhbylq6p";};
+asmeconf-69228={run="02a0jvq0m73rq2cmmdkcsdbb62ysbx0fjrdrvczh7viml3l0q2z2";doc="0xr99yy8mr4759wfhp4n238v1jx0fggj7y2fsiwmgbqv9s7igi4r";};
+asmejour-68629={run="0svphwvm50pqzr8d4rh3dpsz19y6lmk3dmq4sfyhzm8ph3fh05s6";doc="1qmvcj1m2wv74ywawsz2cs5d4g54zw8caia2675wz4sv6vxc4mjq";};
+aspectratio-25243={run="17y22131b9nzzq1skfdyr7cfcq823nqn3ssqrbc3bglggdfibf2p";doc="0mw7v1m9afyk462rjcimvwwikdpj0f4gjw5pbw2g9c60vbjhz61j";};
+assignment-20431={run="1nxgpadadzf3d30ydc9rndwm4v53s4v10a6sbqf6yfqds7ry13vz";doc="1wyyvay22r68hfspaqv0a43s9icg8a3pj8wii3snn90svbsjfajn";};
+assoccnt-38497={run="0im3x8im6kkjmvibh57hkn8nljcfc4mzp0hpimiqn29ys1yrhj98";doc="11p081b0b6mcigqsmvgf6kc9ik2480c74madjli19rw9i5nzf0vf";};
+association-matrix-64845={run="0pa2js62lrqvh9ghhv5gylaz7jxbh6qwkfymr3z99w1isl2iazlz";doc="00va77pg2xzf59757sdq7ql7lkik3ifhf1l74lljmimqvql6zj0i";};
+asternote-63838={run="0a3a5jjhsbvi7kdkp98kwa0q8j9chrq5azfg9vbb4m9kfkbafafh";doc="1xz9p6g5bl3qa957icsyjknni7bvglfhvxfvxg83x8bd7hvh7ylh";};
+astro-15878={run="0cjf53gbin9z10g63x2kingsclgnwr6idc4x0m473hf4fvakk34x";doc="07kad1fzv7p6inh7nkrq6b34c1792h4v49rxaaxqyldmf4pwjr84";};
+asyfig-17512={run="0zy0vxxmzg7nzwzw8z84sym5wdfbs7kyf06r6vnn05ga06wwn603";doc="03nby6d7cjczj3irqql5wpxs4fx9z77bb03lys5j1kg63ccq5msp";source="1rzicq0w7byrxqvv8pympxkwq575zqs01s02z205azaqdgrzdhss";};
+asymptote-67300={run="0x9zb9jgxc31xj5a5gb3s2ba7348zni3p1pwwd1lp7ldilq76lca";doc="0hcv17l67pv91fc3nrhx06s7z2g0imrljx0lxi4k6lgnj47dmnhg";};
+asymptote-by-example-zh-cn-15878={doc="0854pbh3rm21rzzbhai7xijzw26qawffj4wd3mrwbva1406106ff";};
+asymptote-faq-zh-cn-15878={doc="0z09f5as68dz66dlj370xfx593bv50ihxx10zxmm9lk27ymr52hb";};
+asymptote-manual-zh-cn-15878={doc="047l3bh8vvk185wkazyfw4dm6893xpa2ksn5vfc57r5rv4x16wmb";};
+asypictureb-33490={run="1ls5ryz8c68liyyyqkjvmzyyblh9m8c5b62igz8frrj4m5vhi3aa";doc="03d4l74m9qwjvl71xfkhspf0d2xaafl9d2kcqhmil5yg85hsq069";source="1jzpagmnv21k761r52m2f708275k4pwa9sqlp88l6pgv6s6p4pab";};
+atbegshi-53051={run="00r3ayn5qa2p2j4hyxbp2mm1aqhbkjpwk15gan1b4szmm2wk54h5";doc="1pjfmnrssaw20sdq801x9jb9qh7s8l2mnhcvla4bxglckgwz2na9";source="0b0sxs3jpc6a9pw1z44iv2bwvyxm02yfl8j0mc5qw0asdp773vrg";};
+atenddvi-56922={run="1lw42kgkviwh5gl0fnc4kp8x578bss6fj4d3jqp3jh0iqj53wwf4";doc="1f4210s4llsbgnnf6s91j7gpdajclscnqlkrmrsmiphhvgjihcws";source="11sxy0c5vmbf17w1h46dc033lisp4aa8sjqfi1zdzlp7ha4c6rr3";};
+atendofenv-62164={run="0r5y45wzyhynl6f1bsk11ha50rhzidjgqynpz0qqx55pwj1lvqg8";doc="15s783gvnj5vd7vhgvzvvxpszsy065x20ag5i3kmhd20rdm8sy6y";source="1j1z580b9v2w8b1zqjan8fi5smnyyagnhak262cx5fi212dzivnl";};
+atkinson-64385={run="1gcvnnj9f7vrf96lb6yyv8036xjd52099h4sbs3lhprbdb8gznrf";doc="1k994x0xmc4kl69qabrwh3x5rwipz77c730834bnv98annnbjrwq";};
+attachfile-42099={run="0akvm9al5rz67b81bsl0k92gjqwxjrd6dwxj9qmwrb9c6pd311n8";doc="169kh9zrf5ykal633zn8n3i41dqbyv7jdrm905a7q47icvd4ar03";source="1b9s69vvclpvdm02gi9x7zv5mf77q68xv7zd784cldns8h1a553l";};
+attachfile2-57959={run="17kxgd9f4q7qwciayq465wm1akrc4a5c3lwswhria540lim2sn8c";doc="1p66kvz1k17hvkkh5n1ygj9fcfygipsdqlpi4fpllc2q04w79y4r";source="0k1j5yiz71zzwpnm37pklmr4h8bavyfjay396pkqvjwrmpxbxfkz";};
+atveryend-53108={run="06q5b28q5m9i29yqqx1l1y0vjc20i0n6p2k47z66jf3s6abrqnrj";doc="1nn08cfh3n63xd45rkmzvdmf5580lm7kfd08z9gawgaibh6nii80";source="0fgzxwc6jlijf0mzjh7pm2afd85np1rwy4xziz26s0gi6i5pdmvp";};
+aucklandthesis-51323={run="1zlsa80vbby0jp46jicygq2fn64f1mgppbw6bq4qm9ncsapdz92j";doc="09n2pdviw6xvh9ymka32pyscn16vgcxbij79nq0hxn6b6msxnlq1";};
+augie-61719={run="08m2n7wqqj1pvvrw6q8j514mgr1168brckm1dl44yp78afgm6vra";doc="0ygmvlk1h6n071lq8jnlpdqaxhcxvwrzf1kgvacj78kijaqd0lix";};
+auncial-new-62977={run="0nqz71wdm0w34xdg5p34ph6na12jlvxz7v1bfigjm2v87pbn5lwz";doc="1dw0gbhk3hwfapdzysf12kz5g3dfsr5pxpnga9s1ksqicck26b5w";source="1gyilj1ldx6c5lfn8vrzsbss4gl77grr2mw4v6xhimv2vsyp29a1";};
+aurical-15878={run="1ffl7fji5r74k80hl3d62qj7f0h439jb7zmsv4f21w7b6cfyj74i";doc="0l19hfh5g2dc3digkbjvrh90h3vwx6zsbadjl7zzzlnhsaq44nlf";};
+aurl-41853={run="0dxsldgnijrjrm97a0k33cliqpl09b70xf2dccigyzyyps82h0d9";doc="0rw2vhp4r9sb6pliqc3xxjc5hsznz4j7i2w3qk227ibg92qx4a8z";};
+authoraftertitle-55889={run="1gikfjhxkz21qb32hrhyrdymkn29x7bjcsml5clsw4cgi4b67fcq";doc="105sk016n6sh7llhk3fjcz63hbwms50l7906qxdddjq67qpgrvgn";};
+authorarchive-65777={run="0f9x0nx0n3k3hj33089np465jpikrxn689zgp0rdq54gh9cr5wvm";doc="0w54vg8rfpb8c9cc5aaq0zgz6vs7qahzjfq495bw551b3rm7cia5";};
+authordate-52564={run="0caz9s2ra7qqlzdnahhv50z050iyp62ypyrfpbj1p9ih7zmcdg23";doc="14wxjyrighkhg51m9jpdyjdwz2ipz4zr1rfgmdnxbpg31rbg2x7s";};
+authorindex-51757={run="0dhdd84hdf4iz67acyarzf0asb7c8dmp09s286rq0ylgn7lb9xx6";doc="0hhffkmldhhm46xi8d1bvjp5v15cg5kid383g7s1dbjxqyd9vbvd";};
+auto-pst-pdf-56596={run="0f212m856rdfzflq1bw3vfpy38d8qylaa3vqnfs595h3x5r0dsx3";doc="1f7kj4rga7x14w8v3cjn7lh95inliy2ms0q9vnfnv95jvp5a7kh8";source="10l3ld4jvpg1982f2a80ssl4hkdzi9szxv3y8l1i13pdfdhirv91";};
+auto-pst-pdf-lua-66637={run="0h17431shl7g0hza9vf20v86vfpy7w9wdyc09ir3s0mi5izhh4hq";doc="07bpl01v2f14csvqqvyvjja79z3x34q6mkb6qck44s66ii5dld0h";};
+autoaligne-66655={run="1y4xlxgcj82g3cvy23wyacm91kx1fnc8b9y0r8vhf6pwvj4fk6h1";doc="0srhzzycrh9awp39cgfqzc3z12vxj33qgbnpprx06y6bx94956wv";};
+autoarea-59552={run="07fi6gdnl9srrhmj5v28kfvjs3skf8g693hbdrfzjkyw76iji46x";doc="1nyrgpvkj2bplf0psd66mcrhz5j4bggvdmr93p77ix4vb2fgh239";};
+autobreak-43337={run="0dzr4wbwy018f97kzmfvza9i7m9mbpn97mjzi336sgq440v01hrd";doc="099vqvdh2djk7fm6y4x5m7cma71b2anpqkc3lfzjazpv15kpnlq6";source="03kqdrwznx3k65nf5z3p2z6d80rki7w4v5lhdfk8rin3112gn68r";};
+autofancyhdr-54049={run="091dwnql2fy1zfkr92ww01hjylx6in8ay56gq7ywjlwb84r6sbm2";doc="04fjrbsa9nqf5rj0gqgm96c8wg3dl8cpfzyilqrfqmim26rviskp";};
+automata-19717={run="0jqsvxn561fwz44gd0rwxyjwh1nanpmfsvd3kslw87h54hzlizf0";doc="1w428b0wyxf0v7bf1yr9dfm4x8q3xas9fgv1q9sxbhgri8daj8px";};
+autonum-36084={run="0y1x4j7fyssmhlqf9974yprqxvplxihbs879qiwa13x0zmwhnp55";doc="1a73xg2csfq051lnjnxkplnpfvl9vhfm05qvgxz4i79qmgs7a3b6";source="1q58d514bdm0mbqkmyngxh0nzzg7kxxc0z7bllnlkqb99h3x3xb4";};
+autopdf-32377={run="0fd1dw6h409ffn2prcsmq4rsgjshhs9if0igsz3ibxb6wkngbphv";doc="1rf0l15pp475f41si7qkx9rw7n6938jj2k1wybx4ck7pf6hs7i9l";source="1vw58d9g41ra5j2av1vdkzqhh7g5nrprr27qgdrn8nlirvwzbx9m";};
+autopuncitems-63045={run="0wqvm6yyja51j7yjyavjn0p9i8y2a8aqrywpvrlaybw2g5s2k3gc";doc="16hk972a108wh8qsk9lg3ai4cimwlfadmxy0xi2aa2wq8darhsqn";};
+autosp-58211={doc="16szmbffp9pwzv7zq3l4yvnsfk4m7w57wib7pqpgv1v5fzhlaahs";};
+autotype-69309={run="1mvy4szbj2bms7wsbxk5abaw41zi97lk21k8j59z1dkrrbzzq69z";doc="1s3c3zpl88rlcxrlmbmpgl4f6dyyryfs7gy9pkm3q2ayva3d4bwr";};
+auxhook-53173={run="0c92za082vzi47m5dlwq8bss4jjgfzmbbaaz5j1yb4ngli9qj08y";doc="0l6xga3hr1lvhgli259ma78rq394jplnkn5j8fgrfapvzrhsh2kp";source="18q0lawz00fbv9mgcbp21zk6fm1hsprmrkvhnl34ac1qj1rx6x3p";};
+avantgar-61983={run="1200x40k7wprm4n7srxvgrax2l52vn6d5ri2x0q7zbzzsfxfzkym";};
+avremu-35373={run="1j7mg5in2jhpb07jpky76qriyb4m0qq0rlkacs6amrhh57299prx";doc="1p7z2vj25fnx23rl6m76h82q8kli8nfl2vail4mpkx0brimn4j7l";source="1zz9b5d08i3sjj74q609k5kyi9nr7yyczk00i3dqfz5x3rlyljsm";};
+awesomebox-57349={run="0bjnvgqj4g1i6djzzzdjdrnlvli3dm1v2w2mi59s5s8pyc5pag60";doc="1m1cjic1dqf2zvym1ma83xy66b5irqma2fb6fy0qnl31f9bfg6x2";};
+axessibility-57105={run="001z3ra1zgsrvhlnvg9lmvc56s72b3kip71c1cnpl6qzqcc2y6s1";doc="0s77mr42dli8vfc9h6gslq5g103rp5vk94hx9cw3w3shxazib73r";source="1bh92wig3grw2bkkdd3fxwlky7rrfabzis1rwwdzgk3bmmrl9554";};
+axodraw2-58155={run="0dcls4qqm7pl0iyg7mkflqa2rd86wsafshx41xlg62din6fmybwa";doc="1l1kwxd8zq5xxhw7zyig0b8nna4fwr6615h4jjwpywcaqsnms6if";source="00nq53ahf63lazavijry572yii3jix1df9c604xnqpga9z22bbq2";};
+b1encoding-21271={run="104n1g3qnx2dj91zylj5byz7yaai6dw6v0pl9240mgk1h8i0xr2p";doc="0sdr25vv9svm3r6yqyalqza4awr8k26g7fmh8078bbxkddycchkm";source="0mbzrasvppl17965dmkp2f9cbi03539p83989d40kl5p11ih6dgy";};
+babel-69343={run="1hhidzf5gyjvrb0ws3rfs93gsqjpls9riq6ykxzx4ky984hvpg6f";doc="0wd1c774rirgcs9gn2qm7m2bg3xiiwf7wkvimwh7jlrg19xr5ir7";source="1wfz029f2rwv11rbgc9w64k36q2ifq5hzh9jhlpxz3nn884pvv47";};
+babel-albanian-57005={run="170mxpwnnsc1g9s7qnlhjcryw79cy72d8c4m8bhr36i5c78my0zg";doc="0x5z4gfi6m9h5gml6wxq3531i1k0sfqrd4hxrzbz68ijzyjnzk5j";source="1w8bassqn35bxyhpw6cg65ya64x1dn9h35p4fxclcjjhmv53xgg8";};
+babel-azerbaijani-44197={run="15siklcjg7wmpzgy059d8r6ivg6cib5by9a4l6n31c9pxncj7xka";doc="0dncpgvjqqa41rk80n6wif8nzdqw7vkxp2056l6sblzxgh87fvz0";source="176r483598gd2dfmfc2qhmknj913n3k6rk58mpfq69af72jq5rjw";};
+babel-basque-30256={run="11a26db60bwfhbx6zj42yrzzvf8nn8a96nq5mpw29xhxlpbhrcp0";doc="04jf1brw3ljipdyxv3d001slc0iggjmq6hkr4b5jsa3z8gcivzvw";source="17mz3bqi50ayia4nb2ikf60vgpnwl3i90gfbaq4692y354yvlnfy";};
+babel-belarusian-49022={run="1jad77cas2x8nlkh72rkxi3bqdlqzichqkxd3bdxk9bsqfhvj80s";doc="08lb1909wm2r4psppcbn1sf3zg4a8qp5y4i0b6kksfp0n7v1nckn";source="018jayyq2mzb89l60h7f9vzx2zgy2skklbqqx9zs3krg23xy2i6g";};
+babel-bosnian-38174={run="1q9nplgxfyv877y5q5hm4g6i5dla5c3a9s5cax27pr1riccgh5dh";doc="127g44ww87gaizsak6lbmbr9yhjhy8k32zkah3189yi21w7ncs4q";source="0mlllv7k35vyqpa9r4yz6y23cgfarqbyk47blfc5b3dill1imx6b";};
+babel-breton-30257={run="1qqayklpx89qmva8j6l6rhwinr0jik9lq1sgr6av9w0qzy9y1ifd";doc="1q5xlc5cm91wa5lpg5wysqyhiq71ghf6sb8b3syxsqzxdicqwqrl";source="19rafbvhd4fp6vb1pbgvaxrmiw1miw4j2n0dsi8fnmn1554zb25f";};
+babel-bulgarian-31902={run="1lflnrgn8si78aj9ms8lh9lb07maghvqlnrc7i3lmgn1qjrlvzqx";doc="1lb0kxx7bxrllyb7sqs1gjkqv7414jvs2kl06cnrdwsrfbr1g0kz";source="1wck40na2vczwni0kk1a8c1naczrcwx8sql7j0la1b4c5dcikgxd";};
+babel-catalan-30259={run="0brmmav2iwsw46p9bhbq5nc09w8wxfbsnpb6nrbx7zx76h599fwl";doc="06lb6gkmidlps7vs7ihqg94jqnpxyih2dkypbr0j46whs5nb80cv";source="0l4c6wxszawd0a7dd7fpljkngmmh1p7i7imyhgfsjyli6fpxmah0";};
+babel-croatian-35198={run="1d6xi12v3qr7gsknkfcb77q0wx5hyqpp0cyqq1spq44yf507nnlk";doc="1h15dzgmm5230ypaznk44607naj611n0mrhp9mjabjdqbsb71qdb";source="05zhbrvq0iwg7vbccq59rx2yfbaznixgr5nfh37k3584iwaqipwi";};
+babel-czech-30261={run="1qk6k4y1rkay2fcn39i99pxsip4k68xac4axznl07pbgx46v3h64";doc="1hvp785ly718fd1f0ig092rldcqglpb3mrygarww5bnl6fpp2ffm";source="1274pzgdya7gkvxjmdm3v5rb7hc0sj6mqn9pd8y9418yx5449spg";};
+babel-danish-57642={run="1q5gl9dxl5qky0g263yfa4gwb992ngd7vwsb24cw9fd513j50b9h";doc="1xmp93khcz4my2i1wrnzcb13bnxd9mnjm50s2jhbh8qaiywls7m7";source="00dryb078fqckqjnxa2riq478j6d5i28j5cclv4bw7dn5naa3lz7";};
+babel-dutch-60362={run="195d71rs9raadkqb0c1v3i5pm8aw37gxfnk7c6ic59ib0fvgs9j0";doc="193gln8qydvjwsj8pwayfv87zyg3wja99izbf4l7gvhh3b54jwjg";source="1mvmis59s94j1p98nqp07paxzviq6sgnqjwda7w63j4fnhhsqc3k";};
+babel-english-44495={run="1nb3c0yikcfhlpfsqgx2c6549ra7wcbcjs614d7gvk5fyh0cds8y";doc="0jfjdsiqkg0sfy326nz6rncq9sk1ssjzb0w2frybkp348gif3rv4";source="1q9bgs6mdgjlg3pv2ddrwbnfb628dr6rhdsgkf7rnwm5m6ncxkxh";};
+babel-esperanto-30265={run="0p11qa0d496xb6hpj6qc2lisr3xk3k1rbnj7b88wcivfjwf5ypmp";doc="0ra2iyai9vyjksfsdcv5b9ifvqmhlc4aikyzf3wq073sh9crhxh7";source="0i1hzj701rii0hbp05h25633vs2cbmqgyc113m3g78i24vh2rkbx";};
+babel-estonian-38064={run="0j7z04mcvjk72cad5l3np0x862nvgh7jxha8mll55cf18k9aj64j";doc="1nmjvvms0zijpc15rs0fkzli3pmidc4v4kzfp9sswvh43622p1b1";source="0x2a379m1b1ll16dr62dg5ai353p362dw9js4n0dn3x2wjbndmzg";};
+babel-finnish-57643={run="1z49ix8w96walkq5p915amii7n73ahzhy4ijxa1b2bb0wzz4b1l7";doc="00aij1bdybgcg69995mjrdddzlr3hqbhmg8q9nq86cd29y1gx029";source="1930zxk4l6k5q4wcbvpvijv4s0gxp2mkxvblczn4gcbar10vfd4x";};
+babel-french-69205={run="17k1cnb37qxsmakb5lfr52arfrs9b4skjq2z3b0j4isvg0gag0pq";doc="1x77mw4wbb6s5y44s8lwmzv83ykjxvayz6gdwvhana6a9na4s4h0";source="0l8lx80qfbdn9q44j39ai0b0m0z4cq1r8npihz009rxvqg9c7xfg";};
+babel-friulan-39861={run="0gfq4gyi720kp45vcbial0yrn9i2jyx1lzh39lci0ga77y01j3mp";doc="0hnj5scfsvisf9k6iwh4awzqccm96apxrbwzlknpxn7x3zv93l0k";source="09bzwmc1jnal4ikxciwas8y342rix0xksd7qcp39nwajyg8njdmc";};
+babel-galician-30270={run="0mk67w9lhp4nfbhrzyb1ngm3rmdknvv8nlqb8601hrglj4hzmrda";doc="0pzpk8d8hhvgsjssy67hpgvjb6sh3lfbn6f5cbpqbhxrgllhpgva";source="1awy39dlr086hc807zc57l7xk6zqbkwrayvzfv8ch1mqnl0d3a6c";};
+babel-georgian-45864={run="1mdsi9mq6ka6ahrgnasik0sxkhq97qa223q5iy4fkfccan30kb07";doc="1iw1hbn5i0c7xhvcmap4hgiaar9rznr76h2mrgya8xj0czppxwv0";};
+babel-german-57978={run="120912c0nk3zdvnrxp7pv78vnywbw68d0xc9iv8x2cwdl2hfwzrj";doc="0nkblrxgckb1kxrxvj02v0mx18f3cmv905xpd56i3lsp7rhi2wjm";source="05nwdy9ly2cdl2aayf573hc8v380avxlw568np9kfvf7nag3p7al";};
+babel-greek-68532={run="1gii2nbgnixdysn2li0xw5acsvimq2r04rpkyhy16hnz50cm4shz";doc="07l23ycdm79ci76zkfijpdz5mlcgd8qcbq5s4rl041c8d4nnfi5n";source="17n58ldkgsqadbd1agsaf0bwv0pg73ybfql5bkw3ky9k9ck9z24c";};
+babel-hebrew-68016={run="112c7lk1xihspknd146hgp9nbc7wfxz36d3b887f6q0mq6hf03qq";doc="0w80r70w90szg4rlzzj2132yfx8wbhxranq8zk49far863sn658i";source="1srid6v4s1r5w02148wgfzhs9jmmwzj23fhx9zn606rxxkgakajf";};
+babel-hungarian-49701={run="18hc7z7gki6jyglywmljlf37aff3cndszywa32kmprbn2qlfc87k";doc="1imn8zlk18fcs2nsy4ml20xzkhpmv5lzzh28i2c2zv6klm1kmfba";};
+babel-icelandic-51551={run="12v78k2l9vmc07mx0wy8g0mjwryp1jf6ij06502h7jr55my6y5s5";doc="1mbgan8gv7hld0jym7qks13yph9lz0clkgpb199x3cdxmbvawpb7";source="09wz6pfk3vb4c0az1lgq35vmzf8v49iz9cd1ys7rhdssbcz6flv3";};
+babel-indonesian-43235={run="1nmz2vl80cs7d58hl22y9m2hlf4xzdw2brl2z9k56w2mk6rg510k";doc="1bd7v0wrp85bchni7sbn4b7manybq1by8sb4bhzcmbw4b9dnc3yz";source="0p89lrfyqfhmnvijf9mdhmjsr8wzb4hxr40rf33wn50ak3m8gm7l";};
+babel-interlingua-30276={run="0zbyfhfs222i1wdsfbik33m1asdaa71rg700s9vfbvfdvjcikciv";doc="1z7j47zmp5y3406da831kwxqq30mgxh2wwxsrkdjycnsswsywgv7";source="1y3xsscz9zxaih3752sk6jhh77ljnllmikiwgqb3xsvzj7b5fs8v";};
+babel-irish-30277={run="0ih96jfa66jn1s8c3dpr0631pa17r9sch1lv1qqwpmsridp8dl8q";doc="19k6gps25d8i28vcpbp59k47mxdzjn9d89amccr5si5hvg1c2qnp";source="043ias6pyv22g8ywv5krlzj5ma98wpi0r44lmi4gfpqllkay5g1a";};
+babel-italian-69298={run="1vwps1b50swsx1ww2znwzjizc6gn26j6mx470dws76w1njjfgp83";doc="0d21yk97jakmq0pan6q0cx53bl6945y5mxckzqch285fy8w3s0ba";source="0b15934yvmk7r94c9cqjhlsdpd8c9jp2gyc51cxksh26sw81w5xf";};
+babel-japanese-57733={run="079bhnmpcgaml555dgrmiigack6qfqx20fy85c75p4fsn2c93bmw";doc="0a479m8rq8l02q1w73d6lpfpi0gs5qdqfbl132483f2wwzznvnrl";source="0kjv78h69422dj1jh7s74pkdr3qrdxxbzk3czzfsc5rax71x9jhm";};
+babel-kurmanji-30279={run="0jp1aivn0pzn8yq1q79gvzwdlcz871apjg6yxx9x4wf8yqr8q1g8";doc="054b2pj4iv2mnaffw1a6zqihp18765rdx6d56k6vj9kxf2gqrz1n";source="0v6nh14816ai72rqc7nxd8k16bi75dvx2kbvnaavknxyr53pjwb3";};
+babel-latin-59800={run="0k092q6cdpd5qp7kl0qcaf4idbsfrbyb12flq61k4xk8yyp6ip1f";doc="1p0xrbmknfffm95zmnldcwrrpc3ngrlvlnfzppjql1va8vk04s3i";source="1sa59mvbjspmdc5sc3cdix59y575nx6pgc878lvlcrfl70a7hvw5";};
+babel-latvian-46681={run="127649mzw9jp35mq1yqpavlvkvcvxvp61sn0yl4nvhn30d0dws68";doc="1dvcwyqvx5xw4fl58accykkmd9ksbg5a3yqalb6x86hdv2fgsnq8";source="1w8w1ayk1ixwsixlsar5nmhv70fqahx06ydraiyz543gm3vrk6br";};
+babel-lithuanian-66513={run="1akp69n8i19kyx0x247i4nw66wmlj3d3lkm0pmqz6c4zv34r9fii";doc="1fr3m5b0dcrnrqdb0sm184czgkya8xbx0zbj9wlsnlh5y2pnvyds";source="1dchvyy3zwa18x2dsz4ww9hjnkhca0cg65q85jw09l5cz5v005jy";};
+babel-macedonian-39587={run="11wiv5aw0k77rvqwcgh4xdiwcr67q42rwq0mq5vcpfz2hb0v8i6n";doc="0nsvnmjx8397xb02h2l00nd7ynz11f9qiqrpim2f18r55qmr0hb3";source="08z4ca7kja5kb2azf3whgh0w7fabxs3jcijihm0vnzhb1809napi";};
+babel-malay-43234={run="1h4n9m38s560iw86cr88xzflizkd37nhgyl51xvniyvkz6nkhrxr";doc="0c0jriwwkrll6sknd1c90bhipcjr3inc7vdn6cd2szlbx72ir12a";source="0r1gzyi40yx8ikxkrdqa1hg33vciz1qbvibd8dv3qbia7mm11hqv";};
+babel-norsk-65093={run="0n173mskrn15pz6pnxyysavwc93w5cz57wywdnn2xvb574ka8jhf";doc="0a3ka4hfvjv7w2s90y7rk2vb4jsaqz85sfbnlmkfxlhamr937c0d";source="1d5h7zm7d3d58lmkn3qy8aazx4a93fxmziz68cckrxa7izni7s1f";};
+babel-occitan-39608={run="0s13mw7w48zq91kcx3pk5rzfg7d9dcjr8n8bvqsk5dvs0k4hk1dk";doc="132kk66ya2j6d7cwzd3p21qvjqm96dvb83ny4yj5q7vjqiflkn0z";source="1slny81jf77g32nxkvbwr429yi51gfpia6d1qllni978ivc9lagx";};
+babel-piedmontese-30282={run="0kcb4h1xsm8qcgqmqpgkqqxii5xvzpa2dvx6l41g3025ybbp558w";doc="0c6ql4g2i43zxx2ffnvg2rwac5hshvwngj7999g371fndhfzs31n";source="1xqfd8s659plyijsc13014zjhd9ndpi82jwgd597lw5d9jzwxf6a";};
+babel-polish-62680={run="1n1cz0jixlyw2zbcgz2ik03s5qarsh4bl12krsqjk2knqk1r456n";doc="1yydj18aiaa90n7g7c6widczi5kpslhcy3l1bxnq1dpx0g8wi94p";source="0wjkcbs2ghwg8x6mp6blihfrygc4ssy7nb1adj4vz3wx63li5j04";};
+babel-portuges-59883={run="0n4sz1mdwrwq5864dca367w15mzln7my995sm57pps1b0r8l21jb";doc="1is448ri7d5qgypmphqvvnrgf1q17cqa81j0qqbyqy3zdfqlzi7v";source="0279qlf36ji8qyagkmbrisfw7fz519ybgh2di42iqv2mwkwzrdad";};
+babel-romanian-58776={run="0pmjpy2p30299a10njvnpl954kdazir149b3aggcljaq0j4zdnzz";doc="1wgimmy2vwg66kjm0kx0lcx3zvvhdczxc19nnwqfbwchbpfhflyb";source="1qq1j0hb6vp8cdiigc425m6k8wpf7rxzdcgq14p064xlxnmqrbp1";};
+babel-romansh-30286={run="1hh4ashx2fban828gj37y46rm0q7w2j18785in1fwpir3cjcab8b";doc="0w4x7c9vws6k799ilw2w1p5d4qv2z9wb3bkaixb0p4gxmp6khamb";source="08v3db9g43pviw7fi87gcgj5xb5b2f07sll1slcvy94ffnmwlpww";};
+babel-russian-57376={run="02zvg65m1g15a1fbin635gvx2mxw2ljv4srd0wjjfcpdyfg53sl6";doc="1bs2q9xxqyjvpqxr3zfbmk0lkf58jg1ksi5a9mp07vznzplz01i2";source="12ik2dwkih2g0gqpbg83j0kcfwsb5grccx27grgi0wjazk0nicq6";};
+babel-samin-30288={run="07h531h0n7lyi8jhc3v9clcn66nwg8x50k2absmqzlq4adpgdqmc";doc="0rjzia85w9jz8hj6d6kvapcm1y74gq5wxirrlyqqs7ar7i11yp2l";source="1p6br0ki7xpzrs4cpsak9n4mn39fzxja93dxb6dl00rv8f9snj3f";};
+babel-scottish-30289={run="0qkki9838204xy9ac4rm5v72615iz63wclgpw49srwwzf698z3nj";doc="0vag7zmwsmp6pc6xd4p7i55na39nhmmkcg2mlg4xp81hgladi3rq";source="0k3dj8awj55azynbdbray872pigjs8m9l86imdx5hj7dvl6svdjj";};
+babel-serbian-64571={run="18vr5230h0x8hz9zizpsnaj56v6aciaa34p2jb2ykp59r709iwiz";doc="0daab33jd26smid0m38fh1m5yarl1vnc7qi64am6x3rl9zy55a2h";source="0jqj3bjip522w7swsqnpqls1mgrx304xrz91kz4dlqzvqw72f2l7";};
+babel-serbianc-64588={run="0pqy5s7pgbanlgcw9sgbig57mcs4i2yfydlbwz8xrrd6ysc160by";doc="0pw76idmc004nbzb2ax3shv35fzy44fiw7j1jp4cgaw64adr1a5k";source="1b4yc7y7d6asrx7lsmgg7wsdx6wfw1kvfdnc2xls7q6naja8xcws";};
+babel-slovak-30292={run="0724h8hnc4z0l0kkafjczzc69rh6h825wn0srfpy1zmqimybvaff";doc="15v2hdmpbivcdwrm3mlyb3bb3p1298swq7vwxqb9b5ylv8907sd9";source="1k4w34wq8n06ck9z81wa490fy52a1dcgi98pcvdmfggkalwr7ml2";};
+babel-slovenian-57666={run="1zpw0zp4f5wggaqb5wb9r3hjsxx8b4f892z5w7wirazqwgmxzn2j";doc="1lmjr0cs0j48d0l2qflg8hxcaqfbqfxlqsl5fj4g5icpha4nji96";source="1brwg8sr19048wgn0fdbi2y1rn5ls99kij8i71i789qf32hb1jvh";};
+babel-sorbian-60975={run="1g2m2ydy6rlb6bv1p3myfwnyr8kk1l7jpq60m655x8hqk32119fv";doc="010v5sxqjx15nvgsycacx0lwf4py7frqppr897a89wzmj0fv4svd";source="06vyg6dh3yxqmvy02ps4b5kgxlcg1225llc6mqbrnwm54548xwrr";};
+babel-spanish-59367={run="1d38lmr5wiv03w6hzpfzyq2pdl845mcx0db5wcvwm6132vmnh6dp";doc="1wphssp001lg7blrv6wh11ppv5c18pan2kb49s8s94w2jh4jmwy6";source="0vgyqldgji8fraj5c7na6zplip4c6bc41x346rvzjj3l76q6xzvd";};
+babel-swedish-57647={run="0h6p32rjvsqzy8kdhr0f1zi301xnrsvb8l9k7g6gfwv26fpdcnzr";doc="11kshqcqn2187q8h1hc7ifjnf8cz774wdnd9m2ncfvhf52h2l6mj";source="03rp4n9wkqyckman765r8v8j2pg5fg9frbfxsnhq0i2mr0yhbr6v";};
+babel-thai-30564={run="02n0zl8xa4y7r2n8zb1870b95inclcdmwq0llcspl54vjgds2yig";doc="157r19z20gn3fy9si8mn0c4zhgf1kpkz6jv8ag6y26qjp1c5g4kc";source="04x6d8q4glkb4w8ic5qcywxi009zy0f7dcczp2fibs0prhw1kmi4";};
+babel-turkish-51560={run="013k4sv2xj0ky344frgbkl2h836dzjl72hacgb6rcdlkzwyh5sqa";doc="0qdcg64lykk0g0gr3y4sc9zml58spq2y4yvlhc3md20mp6l3ji8b";source="0xk8c1l61vs547x7586m60x2hfqil8zq3ikpsj9733ykayfclifl";};
+babel-ukrainian-56674={run="0fm0sbr6i1lx2zg90w3mlwlyg0j0f11ya6as2n1w4gbm1inmc62w";doc="1h3ag9pybhzysb65xg3m217jll1h02ks04icrlhkp97sx3gs9wqn";source="1v7w99b86iclp16qxdjfqsxnh2p9zg669pwdlman1467y2z13p8s";};
+babel-vietnamese-39246={run="0xb8w1dm525xrvpsxy6y4n6m8rr6g895hysxbjcvv5x8bjvl2vx6";doc="12cj6335qj5igap6hff1qrfz4ms4s94xv7vlwdcv1hs5gabqylaw";source="1xdkjigwmmkbihczgd0hawszzmnn3j7fypsv3sx634ham8j02zzx";};
+babel-welsh-38372={run="1778pckqmd6fwd3xh3yk1dzhxbaqnffbk9arhm9qy9qxass1nnf4";doc="1p27zrk4dacj67lfim236mpv2s08j1n5w1wdpyziz60hxv5phmaw";source="1gkryz7dng4919w9wn73bvc5cfcly4g7dcwh1ilci0pbr55k1x4b";};
+babelbib-57349={run="1ka976ag8w02yrbbgldzlqa5852ag04i39w9wv9bhprn84xy5cl8";doc="16iznzd8hk1hxxp08zcifn9v5bvh3dy70nyas804z8av306s1h0z";};
+background-42428={run="0rxb5vdfgxxadgd3isbghsmycdh4ia9yjx66mc48n396b4psbrcy";doc="0a1zxpw8wjq1mc87glp7kwdvkrg618ybwyagdkg7xnp8r7wisnjr";source="1mb6radqhhaw7k0ay4i0mrj4bm4n0v4lj6dwbk8h898ypnmdirx1";};
+backnaur-54080={run="1sj9a62s7mqms6i2gv52dls1jncc478ki51wlnp6j5hq34g8sw8s";doc="0mzpammz9ic3d56ylxl40b3m8rc0s0ilhzx25h1y781kya0n6wb5";source="06aw2vvmkl1jprdznc5cwmyaw890csjsbkqmy814ddx6py7pxni8";};
+baekmuk-56915={run="0gfj79zhyg7p300bw27akxzgimvqmagk7y6b4nd7jq5wvrv4g5y0";doc="00y0iglv170b8pz79xjc0kz3yjphbb6a9alk5gg6hsdwvc6gf1by";};
+bagpipe-34393={run="0i3f9f7a38vcsypmf0yv2cdsb1c8n3qin4n8ac73gwdknhhibxjd";doc="0fagwknqzl3k6vc2x9axng5zljhc4jhlqd1x59cjkbrwp8xvf8kf";};
+bangla-65786={run="1fl4ljyh4ypqwvkhq7df1m85hp0vmy0xmdy2km4wwgxva55h0d1i";doc="13iprzx8j84ac6ink12arqw5c5jy82wlc2nymlfr8d226s37nac8";};
+bangorcsthesis-61770={run="1814fspfg988qg7ihx3rwfxk7c79avd2fxwyxcs8pp0pk38lg15f";doc="0lv6iq40wcd9zanvs51c7k251qnxz59470pidr0gy3swwpa8aqwq";source="1q0kdk6m143d9niwa59lcihifgfhl4j603x53dzwaj68hil5h3g2";};
+bangorexam-65140={run="1w44hvqiaibma89s72svgcb48sh2afhycfffj6dynnfzfps2an3i";doc="1xmjcf27x3qaqzavfcaa3b2731zbimq3zl74sbfgp9z93x5xb8m6";source="074136x5ybszfwfsd92cmxbli3b9f62rv6vdf1qb3yb2qnxhqlb5";};
+bangtex-55475={run="0gbjmkkidm8xk6hpkd0i0b778my5xf7hfwq3fdq2v7ca39bii0d5";doc="1xizgjqmwafjvcf0j25xh2gzcqzcipymhmhh0r56lwv02fd34b4b";};
+bankstatement-38857={run="0r9yfjq0m55bd973gqvjpy3qfdhwglwm8zki37ppj1dvca7rzrbc";doc="1qyrb00m7rlqkn77hw6sb3r9b8aap2qj13ni3bwy4qv2s12sfmyy";};
+barcodes-15878={run="12gzzkj2nkkzw4q6jw0nvzil67f83myhwas37s71dnpqm5n1yqdp";doc="0yzqllbvdmymqv61mc740hwjz76m7sncw4mkvpld1i9kv48f0nvn";source="1m9mifdmxc07rmlg9pav8mx856jg1g2jk48hyxkd1zs6b8za6ani";};
+bardiag-22013={run="1lwa55zrl4pqyvl754j4wz076gn9rbl0kfchad5pzhckm27vvp6n";doc="1q3ng4j9g4bp3vvbs9d4md4296vi2xhzxji8nbvq1ibkzbplgd01";};
+barr-38479={run="09pzipw0qmsh0p5y7m63gwvca92g09r8pq6zhq25k62x3s8y6a4z";doc="0w4kvjv2zbsg5jppqky6yx0wr7xq61xj2gk5yqi1mbbagnra72rh";};
+barracuda-63708={run="0qil0n2f1qcz2yrnb6g6w0g6ankwpb76hjybsn12ij75ihbiy9m7";doc="0sknnb78wbiysvz537i8cay2la499y6xnvn5q5xb5my5pxadjwdq";};
+bartel-chess-fonts-20619={run="0xd51ighrn01kwb4n20dsvrjhh7a0y31py2mfl1dq34v8l6yvn9l";doc="1sjwli00iffizzwaiszwyd42aya7c4vz5as8k21lmk054x9afjpc";};
+bashful-25597={run="0cp0lvqb88myspsbp7s3xd0rrkr1jlqcqq846mk8p7r6r4apl1ca";doc="19dbyg9njh2lwckmqnmy52gllsdwv2nvcp20marsjv5hps80946r";};
+basicarith-35460={run="10cjfm3v6b7rkzc0wngg635xbyfmrnzs5y6f3sn0akdfxj0d3x28";doc="0qm4qnxp3n42zvkxyzanl4psiph9z9dxz5b2i32fpn7p3jhn2qh4";source="1my6sp0mvbmpn2bakr93qwasqh7rwmzy8lhl608lssnxk33h8x8j";};
+baskervald-19490={run="1wvdsq2qngbrm2nibvmssk62kqvjkk50cxi2d7lx3nb6jgmj33c0";doc="0zj9xj7y1srb58lr9brmi2m7nw63n798m7mmzibjvn50kfw3qc8i";source="185jgbk6rg6vkdwhwb8i0inb32qr3rgsdi3xhgj4vj0iah9mdkbn";};
+baskervaldx-69273={run="1iwqw0d6wx9zl5p9f92gw6zqshflshw4isk35542wncwm1w8fbzx";doc="1xzprri9n8rmnyj5cxbhix05cs3bfgvia34h5qkql8ykfrfxpk1z";};
+baskervillef-55475={run="108yndp9v2awi5vw29zbin82bcvx2fzkkhypg7f4dcl9lziwdbg1";doc="0divl9d4bgpjvc6yy2yawcrigkvv7pwdnxy1gvf8mypwhkp17anc";};
+basque-book-32924={run="03jh24rrjczpgj9d4w5fy9fv8w29wbqylx5s9n14jwdsf6f588ip";doc="0sza7d2qx89saj6rx591ys15b8gvrnalrbrkk2wcjln1x2cb95jn";source="15lgh24zyqlmqkw7wdigwvvkv6qwlpv4zrm2zqwgxj93bffa4fs6";};
+basque-date-26477={run="1hikrfz1z6y294zg00arnnc6any1iyn0gkhmv9j9wsnlvylcbnxk";doc="0gifh2wlhxl5s2p816w06w5h51pg6gn2mdskhpgkq16shaj4xqcq";source="1vjq5pqkan433wisv0d437m6hbmfqyds27dzwkyd233zq73fpjxb";};
+bath-bst-63398={run="1i3mmivvw3wdqphw14dfhscjrximi8wi0n9q1cqxkf89saqml070";doc="0yn148yhz3as5xzgyhk6j3wckxpzn7vw6r2mzv10ncsf8a7knycw";source="1md11iz13bbbn2i2p0s9pmqkimc8wb6k7d8wz2sgwj48c2rdsd80";};
+bbcard-19440={run="0snfsyslxnz84a6lgwi21rg0f5vbs6h8yfyywih18vmlbjpba3zx";doc="0rbx7mpns7pgidx3g5pi0r7d638lwykjw0inpldb5g3dz1ipnpvc";};
+bbding-17186={run="17na9lw0yaqn7i5dnlvbfg2yn74j8kr4w526z10bzp4kpynnpnlp";doc="0pg135sdbs1zbsyv1cp69akk7kazr5937ysik38dyhhc8f7vj49d";source="1kgz94yy0gm19x59vh24f9zv95gy53ayc1906r28s067mknmc46q";};
+bbm-15878={run="1l1yyiqy3izbzbrpz55dgd46szkj55g8wkjr5xh7g3jc59y5kq13";doc="053jc17hvq8vphm6jqr929hf45xkb3rk7yplq4i55x57vkf8bvdq";};
+bbm-macros-17224={run="0h1qqr82ihqn7i8r6pk2mrxkpf4cnil1dj1a0y4y3ydph174v4l9";doc="0pxrzpbwpfzk9jhb544zmya41vzdzyn0s5dcyynajnf8lii3kivr";source="0wc6wf1qi6kxbd5a30n926gkagyjsk7mji9g9nzv3jwrshqihspw";};
+bbold-17187={run="14dz70qh8kawzlb1h8lrm0a4dpqkn9b03czd51s74z01a3cdmn7z";doc="0pfrhps4yirpg244lcpf10ilz53714ic1fvpk3nkp2ihjbaxbzy1";source="0qhfqg6kynfq6jzx93mili9kpgikq39wmlhgiav3bdzqhp6v0q3a";};
+bbold-type1-33143={run="0zvkzp43awkf5vbnrvhibkw185zg7h1rcfqav38z720cls2vgd7w";doc="1dj0vqnhmk8n383y426ma1y89r8y69y1lc2vkg58gaffjfrpxwxs";};
+bboldx-65424={run="0r6ds8wkf1qrv4mank08pzkwz4qk2pfyb6pvqazbf4jn4a46bjcl";doc="1b79xnpss9s1c7lmqlpznk4vvxzgp7dd248ipkq6n4dlpv0s2y4n";};
+bchart-43928={run="0knv4byfxfalyhmsqiq4wjcin0q0hyj9gs7f167cddjyzcg4z23i";doc="0zyiw3f37i3shf8ihhzxagvzwnsdaymbkpcizdm2ryziglahh1jy";};
+bclogo-39364={run="1lnfpy6fvw51cfy7zc1bpqhgca8mcgnhyvh5l1s3712xl91hsvwq";doc="0vf9fvm607fzw3rvc93crxjg9ilm6d7x7q5n1qrfmkzmkm5mjj89";};
+beamer-69316={run="1igp0jcs2w20k94fr84s1af5q8mw0mrvraslaxsxcnxmh65dk9kz";doc="0y07zc3zvawaph7pwk8z9429463i99y9b6lzv9v8cacnhqk48426";};
+beamer-fuberlin-63161={run="0w4asfzmjrzqqc8dsan461fvmkjn21181lij46rhissz273d9vph";doc="0hw0cp32k2gqv9y1ai733sj8f08hdn3pj60qh2ykmcqg818q4clv";};
+beamer-rl-69254={run="0dq7p1zpgv3sdbncric180slinfxk1vdskzvfzsivxzhh2z1adkz";doc="0qq209gc6ssz3kz180dnd6kl2zv3qj9iwq5nzcbd50ypmm483dg9";};
+beamer-tut-pt-15878={doc="0ayh3kbh11l4nyyzp2kcwzn0phqhzawppy044iyl1wwwc2v3zx5b";};
+beamer-verona-39180={run="018ckad1q7ffkixvf6q9a5d4fzgpkpf9qv06cfv0rjwp80k7psyg";doc="11vv18n971pcmn8lf2cya7jf55x8zw1d9s4sg2l3q76rdj7l53ra";};
+beamer2thesis-27539={run="1rz02mxmvrq0x06xbrdqvfgs21nhkcislcnpdwx9gvrdmwpcyccq";doc="1ialsnm6qc9bwry5575b8l9ifgymidrsvy2dc786ixndc0fzn84h";};
+beamerappendixnote-55732={run="1mqx0wwb38h1aaxc4xzzq6430xhrxb70qcdqs5yj1sa7k9638ags";doc="0nvf6m7d6v8mbpnpz8bdam9bz4h9d84nsf17s1k13zv846rsp34w";source="01lkwbk5vpnpbrmjdarnz137n5sbaxw0xaich2jvcjlin46vfly0";};
+beameraudience-23427={run="1p3bpgkdbm3dlh7pj5w6yvgr0iqjshn6kchdpx86zicywwd2hqpg";doc="1qs882ypjg9cp19mrpr3nl54h1zry3pawjfwx8si2b6bsngz3wk9";};
+beamerauxtheme-56087={run="1a8q3a0z2wckyr3694nnkry0waqzqsgp3cmaf8ijcrfs42khxjcf";doc="19r7vjma15p3vw0nr3w51ghy7hq4pv6x92iway5rxmlx97dw4piw";};
+beamercolorthemeowl-40105={run="0kb2pvj9caszn40njgq99779ynp5kdq8ynqa0q6vhrh9l0r7d1i0";doc="1crml0lvdyk56zf1ylk8d4441237kfpnn7v9sah98w8s7rlk37r1";source="0l171ahdzizwpq8lq4rai2naj0h66q16p69nwhlwabynjkmfhhzv";};
+beamerdarkthemes-55117={run="07zg346brdpckcfr1vnmvqcahjmp87cb2sizvyx4jvxv19qqwpkb";doc="08zkfvjvrjh8wffv7qjqmv6p0997kriz6lxz06dnsp7l5j3p675j";};
+beamerposter-54512={run="19h0zh583chawpzm59xv7243vzkz597df68yy0zmn3r6ha8k0qz7";doc="0xspyywk813ndrd5xps7fxwggkmdl078fmn1cvxfx3cxpnmdf822";};
+beamersubframe-23510={run="06csqdbh272jbh3zpi0f8zblbmi0sp5iiz1r1qa9qc0lw81mdh7m";doc="1g29xay21yr8aap2fzklkg8q3ybz0xmz22xx5cd9md93c8k9kg7l";source="1zb42dsisab4234s79xvva74rlicd1gg4pbh867rxd15ajgy14k5";};
+beamerswitch-64182={run="0hl3c2ircmxp8bywx871w9b7rdblzn28f0mqfr0pdaz3gijbw7ms";doc="00gxw3mdrpdziixnjam8swq1gm01nw5hg6yzs4ijdpxh5d911c49";source="1pnr2hrvz58c5i0848hcdjw85jybz4q7lpb3xwfkmx84wjx99945";};
+beamertheme-arguelles-68659={run="1rg7bp3kvghb8qhsqax73mbh6pahlf16dyiybqbn8jwwapgmy9kb";doc="18f5ww68w9hiq0pkpf0lgmksf5lc2hc2kh0067h9ls3zy91md3xz";};
+beamertheme-cuerna-42161={run="1r6c3ar29s06b0yfn85wssxccayxn2706y9jxdx2pxsr85ndc4js";doc="0a8mmg184chg2lljv1k7ffydg4sgcjpjbnfjzqcg43cqd01v5dmx";source="1avywir51zks1hygqypsfi6lkrba9ld6x5mkr8lln7b2s4ijnysw";};
+beamertheme-detlevcm-39048={run="149ya5raar4xfkb910lk85pqpm6mrc5n5ghh6350knbmaa6bdwg3";doc="1wfq3wc7b3516s81sbp6md6mx9szbzq5ycqvsr50y3s2wfvvj2lv";};
+beamertheme-epyt-41404={run="07pjgzgkjmr4hdf16m7kx2cf1448253jwgc522akfvvnmx9fi26p";doc="1a987h1cg48bw05zjh79ga23qb37s82dkqhhgvp7gsnwz10pax2j";};
+beamertheme-focus-62551={run="0v151kp4fjglck75sykyms8j2i96syb8bn0y8abg3q8hpsfg222c";doc="0q9bcn6k35gwc8g1rscqfmp8vn1psra5hynhy2pxs9xa8ys43fbp";};
+beamertheme-light-49867={run="133mvm4cayp49l8xvh33q0jp4qzhmvd3q2kq2aij3sh6i0bzh5aj";doc="15s2s3b10w0czq513mm2y7qrczm7y91qhghd0zsfvmy129mwfarv";};
+beamertheme-metropolis-43031={run="1pmvcyjn04pgcmvanj369hxqjha0s7lh1z4b6fbhaj2aj32l52r7";doc="195jhmhzr4gbi04zmss5nl0lm9rkg8spynwz5vqlgbci1xc2cw15";source="1smxiqwdvz4bj5rk9cmsqmy3kwa722ab5fhns67jllvzrkzy8zcd";};
+beamertheme-npbt-54512={run="0m1mpavq8p4pswibgfhsbnvg59kn4sxz0m4p2w6zjkmy80s3naq2";doc="15kc24d21d1r34hd07zr65rp1k55fwrxr59h0ayiiwgc9fkjjsd9";};
+beamertheme-phnompenh-39100={run="1smqwy1f7jz012x5hmsknvarykalz58iysnwf3px7kwg83fr8mb3";doc="1pg8242n3z6x1n4kp8my2nfllriijxwmwfn7d9hccfnsvjj25gdl";};
+beamertheme-pure-minimalistic-56934={run="1z283v6ipp7c7h1qhm043g0sdfcq2dwzk9l0lyy5951y1kj965bc";doc="1chzf3lgd4sx26nbmacb7dadpk1m1rm913dj01648vbd2bz9y4zb";};
+beamertheme-rainbow-67542={run="1zv8vrifblbhw6zfbx9mrfk1vklr83rwd6gly42jyg7fh5awag73";doc="0wy5cc1ca6byjw39rhj3xhynifg06ijqab5l1pavpcahyq6abq7w";};
+beamertheme-saintpetersburg-45877={run="1d48158ladllzj6a1np20irl0r0syksb3wnisxbbwv3kwzr7fgj3";doc="1qkzpbc29587lmckjkl3lx08f2j0q3aaidqz22r6bg896j8q8pr4";source="1r4cw99zffqsvppc9l7z9k8l93sfk1nk8pzj50nm2bmkrdbfk32x";};
+beamertheme-simpledarkblue-60061={run="11m8p3n45qf697sjzszjpkdwqfgy92pzxh9k7dx72ikpdah7ba9h";doc="1ifbh5r0sxk8nsf8cd1g0d1w26ypb5hhsylc7pni6wn9n70799jy";};
+beamertheme-simpleplus-64770={run="0ip3imjc2gz4d04k8lx9vpd4an9sqmw3gbb25rmfpyy0qfxbj0ax";doc="00lj81r295zh9lrbffq0ja1skpg8l8l3waj3d34sq6i9sf8rbg40";};
+beamertheme-tcolorbox-67000={run="06yri18aw8bb6l69njavl3mj38rmiy9aabjyfvy3nam2mc7ivhk0";doc="0v1h8smnlfic4r5j8dlixn03ihxy8ciwgc839zy739908g8wix58";};
+beamertheme-trigon-65985={run="1fdray7kncwsb166awwr4jwnk27jxnp3824yf298pp4ikg7iw6b0";doc="1l8iqyq8ib1v0d4k7bd35hb9lpdmpzplnv0fqb1ngzdn0jfx6c6q";source="1s3da6z3sshhndpaxmi3rh7zphh7g1qn4b3cxbzkifx2xqmz8xvv";};
+beamertheme-upenn-bc-29937={run="09a7da5ghgf5q4qp0djp3pya35zsm45wkiy5srz8p9q8pwg04bdx";doc="1m1bc9mxdwfdm0v2lb0i3pfxgf5as1lpm8a05icrm7bdvii0vsiv";};
+beamerthemeamurmaple-65698={run="1amknxp5vladf2slqjn9a6inkcgicha6fb3c6pc36f92q3n62csk";doc="08y0q7qq78fgghfnbxy2vsbqmqrqdnj5p8y682mc285qpqwncj6f";};
+beamerthemejltree-21977={run="02ccd8qqyjkvqqyxr94p1gc6qjryl83vpa72wcm5ywr8gmxci0pi";};
+beamerthemelalic-58777={run="10wv3820avgviic0mcxn38yycyxqfvmf7qhb5ybz1x84jrw8k9hm";doc="1wz984il1z42ck69xn6rnxww3x4xx127syyx37wdy246i1ji75vw";};
+beamerthemenirma-20765={run="0ivhbhybc99hacnrfw1fb9412f6614an1955rglkcbwxwkji6nyn";doc="04155wbw6ix7an8sblw4a8q9hbn7vzwffady4vc23vzccc2i2f4a";};
+beamerthemenord-56180={run="1kb3485dv7kcj04bkgz8cv15kv7jmdjy0jcilvi5zc1vn690cyba";doc="0ls5ivdcgayz9pqm6j1wd5f45s063kfknzxf594rdipz1jnmvj4q";};
+bearwear-54826={run="1xaq0bmv8jv1zss6lwx2ccx8inrmyw1r9bjv3sbqfhp2x4d5xjrl";doc="0vm9lm6389jnmcgzx0ffmay2bw4d0h1wfmsfbj3x1s1vrfl62r8j";source="0dzmlcrc4izb63862dcafshzsaglq5m88z3cxmwivmwpikhh0gb5";};
+beaulivre-68376={run="1iph69jij9ryms2njy2mi0vd81cfb3rq3y78was44lbdw3fdxmhz";doc="0ksjl6rn4s6s301bfac22y91q60mljn96vh90bbgbbbjxs50060r";};
+beautybook-68438={run="1s0snxw87d8f1chj6ghbl2x8byq11piw5s95v5pla9k60559qnvh";doc="1ddqd3k2mdj0psqlbgkjpdy0ayjcxh54bqgih71lwsw73hc6gd6i";};
+beebe-69012={run="009g1m0f5d5vpajjvkhfcjqb98srz5jd5m47fa18y10nfbwrbwl5";};
+begingreek-63255={run="0dl4ap6r3xdwi0kypp6mq171jp4hl9hrjlhfrw9i6pd31qh2bp85";doc="1lmrl3iqgspi6hd86mwssr2bjqg59dykgwl4kzjfrbqa1637df9s";source="0nyd2kqsmkz6rvsfcymbbl2kvs220rk2fi2wajv46w0px81bxch7";};
+begriff-15878={run="1hl6jb8gg3acsj6rs1z0w5v0i6ivvas87hij4n64jdwgf1lf02ja";doc="0bd8gwf3ifqkjpr8wnrp0xx78169b8yc1ppdnyg9v6n4l1b0x0s9";};
+beilstein-56193={run="1xh2955zfnss2n9g8rsa0m1kad4b4xpsdrjj891kj97hhgd9hpdf";doc="0k78mwjqqib6hx7c6lcxkzrbg3gfw64a68fj32g0wpvdyj406ssf";source="120gcmpz53l2pzagh40nsji9g86fq4xvahzhwqqw7p01r03wc0cl";};
+belleek-66115={run="16vq207gnh24axsmh2nnh8lgy1lz2dn2kfn1sx51cbl28qv3wy2b";doc="064l5x679az55jb808yq36n28qhf0gv0xm21iz8rnz4qxymwsx0f";source="1w1jbq0l49qd2wwc0xmravrid4rfba52yw29z5ki7p46j51dw7i8";};
+bengali-55475={run="1rqwjn1vim77r30nmdmw5v50phpsfzdcx8nlxhxlvqsca3yqzsvz";doc="1zxczyil1izzj9pnz9c6my76mggg8maxdign07qn4kzf8c0fq8jp";source="0b4v7jrngga8znbfiafazxq6z333wa98prp7hwzzhpv3nxj6kbl8";};
+bera-20031={run="1i3mahkkb858i6a3wyrilcbswdp8mhclvixdxgc0wpkqvxa6qwya";doc="0llhr464l0akf2dx1avnm3d7adzcz7ml3x95glafpk0nfgb98qgd";};
+berenisadf-32215={run="05ibwmiklbdkffb1d85w9097sv215afgbr63fka2iqzcnm5lzbk4";doc="18awb9xgra9qmrsrm9l090c5lsx14xp7dh034k1fq1g1767w68ms";};
+besjournals-45662={run="1jpp3ayblhwwqzndss91rcns3axr60b8zzxdd6f4qqifhaqczk3l";doc="02s7qd7vvdr6wf00cm7026984s6vphp88iaqhnhk0iiafpr3lk3i";};
+bestpapers-38708={run="00ig29wqb4fn6qw7szmwmv92s19nc2wpapv4pgv8nwsby8nplyrm";doc="08yv29s2cx89nq0lvykx8z6szs72d2ph97g75bqni3l7b4n0wng7";};
+betababel-15878={run="0m2m3m59a2ma30zkyqjc3h076dp74m4igks0dvrlpgx4sfqg90zb";doc="1zi2yxvxhyazjncfjv6dv8c733hb0g5sxr9x7wqqrkxlxgp549wz";};
+beton-15878={run="1rjj64wnd9xvh940rl9scidhv9ridqz38n8ndzs35hyjm8n2lx5f";doc="0i8lg2iyjkzpxjzz9ym61v4zkqczkhvs6qjb7zf5xw557l2i55gw";source="1l82y1fz86qsnv58gjq9rm58zf3ki80xmcqkwlmgfp334j9jqz8y";};
+beuron-46374={run="0zfkx9iiiz7h501ls3z1fxk2ga8kjhi21vpmlng6vvw4v3dd1xhy";doc="0d0mll620s40695kikaykj4w3ngm6rcb4xzrgk3apl43pcf7mss5";};
+bewerbung-61632={run="1grnipw9vjrqy657wkrg656wmh1553wzd1x84jc6zf9gp3v1440p";doc="0ny8ps46wxkbsd5g5yxyrh2jd74b204r35lggy9r7ckk4jab2wj9";source="0y79pmsbjzpykldic1a41l188wmkmn9izhvg5p77i7phx35s9qjz";};
+bez123-15878={run="13l8qvnhfq575pg1nvcpbrwyv5wvq3bhpkmh2306mds784hvcib2";doc="0qrskibmq7sv07g60gzd5cp34p21ragr6yn9g6384gib8vx60nqf";source="0ab153h8i8nmc6v5g9xwvpymjvpp605mbj9dmxdyl3ic49cpnl08";};
+bezierplot-51398={run="0iz8zsifxrwbv35jlgq3qb4hdf2sqgj7smcc3bfll655zq0hqmab";doc="070nxd9n0i9r7h195lkm45zfpdbaqz4lf0k69qg6qj5adwrdqbvr";};
+bfh-ci-68828={run="0z8ymg5d5ifmhp28nm9cn9ascfl8m59bdhjgwq4wp3i4a05c8ais";doc="17pr0ydkh13h7wx15wi9xzmqpg3xdi2m34z6cb6ql1g5fi0dbgqs";};
+bgteubner-54080={run="0a8zhnl1nxzg5r525sn8sz44crjdm5fmy09glp8cjj7nic5xj32g";doc="04nh6c3q2w984x7kmgj023dbpjq9mqciyg4xrypgc4zv8wvcgv1w";source="11g65q55cv4s72cpraxw7yj4qskkhqhc0mz0sfy6c8jrq7255ils";};
+bguq-27401={run="1spl6qnixrb6vcdgaaxx0fk740kkxv7y73xamlkprdnrsmqrswwm";doc="10za9hbwigcbxyjwyy5cd760hqabyyj3g74w355akhfpyd20m55v";source="1vaw8sa12c94ia6fknnpbj7xxng3q3lj3h61akm590riffklw2kv";};
+bhcexam-64093={run="13r8z9wj4v07zjfv7fxy4kq26jflywbvj8p61g7r6rgj5v4pqay4";doc="0gvf2hr60iyymwq8alkyyya4vilsczqc5zhg3j7ydsz9hpvbkdp7";};
+bib-fr-15878={run="0csd9a4j3hvgyczgnfnhp8n49j4baym7nw8sck38m86r3kn8n7ar";doc="1inpqvmf6c5zb091q5fxg0r2w87kacvg1yy1lyai7wq3ll0axvp7";};
+bib2gls-68534={run="0n0wdd4gihv6p004bb4knif4k5mg93hvg2kfhy6326ijdc61nnnh";doc="1abirvm0ifp4f8h28abidbr8wds3mjr8fbml97gaj2qv5qm87nby";source="09f2pfzirhjc5xf0waga3ga9l81cj0nzj45ghi5r68blb3r4d33i";};
+bibarts-67407={run="0yqpdj8fnh5lafc9amvmnam50sgxhwsaw6fr49k2bzxcz5bx1qv6";doc="0di7fqxkaddpq3iqxf9nplz0vy4qzspala5hyh6l8zc9wdcjr0db";source="07664c9cgf85k2c096r2aahkl1ddawhcdqgf7wfrr806qi67mbz1";};
+bibcop-69395={run="1nvmpqv6krjm2g5kfs7fyc7hqywkiwp4l18rw9llyic9kddpvn3y";doc="0hblnmbssn5lz1vsr0ncx6c5i75f7vlsi7wxn7gg7sxfcr0bqbrh";source="1s1zslgccaws2wqlxrr0yd9wijir4a40qx8469lq92349m3rwnzp";};
+biber-68188={doc="1kwhxk6kzfjg62ygsyvxqj12pgw4bippxq7qdlgi2961n61jaj32";source="12jl5fyb802yrfj0fdajksrli1yyi2apf5kckgh6k0cri265bmxa";};
+biber-ms-66478={doc="0h0hxs4a7r8sr5w573d6m002zdpzgs0gghwbasdi9j2hfb2wv6b4";source="1mw39ra48y7gqhh8860544wvzxpciaka5c38873vvnbdnng44mh7";};
+bibexport-50677={run="1zbsilzaz68zvmbf2xw7jqw4l66clcplz3l46ggxw95gns8mgqlg";doc="17a5w095vkpp7j54h8m7f74l7vycsqbv6zzschdb3dd34scq1s5w";source="1pqs7j4xdhx3pqsc8i0wqnz9jkyg891dzl7g3cv19a6wv82k0xjv";};
+bibhtml-31607={run="1sg9x0jrgh2jng9b1pd08i0f8kzhy94sq0mf33as91gr43dzws88";doc="0is3q2m1xg52h5s9n9403c85yfmpjaqqbh8lgyfqfwhl5qqmgrf9";};
+biblatex-66403={run="0zzyi1sclgnrfqvi6bbcymwg8g076br964f40x25l5bvn6r5hx1v";doc="130p4vbg7c86ac7kyb2briwy4v82qbfhpxhplzlxhd4xa2p3j72g";};
+biblatex-abnt-49179={run="1dn2929wlyzwb96iq5lj8x9zr2fi1c4qk1rldc0vrr5s3cxfn3x7";doc="000akwyh992yxzn51jlvnc20g12ypq2zmffvnbwxjy3cyq0aggq8";};
+biblatex-ajc2020unofficial-54401={run="1csx7vad5svflb76ssdkvd8y3r2n9agqqynw88wvzhzj61fkd2cr";doc="03wzlpr5v6y67syy0bx87z123ark524fm6kqjw83v0sa4y4kwq7l";};
+biblatex-anonymous-48548={run="02fssl0l50s94y6x7rv2rm0227ivgr7kfnim435j4k1l0av4gb3n";doc="0dffdxp04shrh7fsl4dilqcsnnxbjpbayy9r87hxmq3yk605lvki";};
+biblatex-apa-66605={run="1hlh14lg9cay5962z9pwzslqs3mbqfd70i055r3xbgd19a8hw5fb";doc="0mqg66qiiqnffiarwi6fs3cmyyssiifv5kbjg9579lsh3f4dag4m";};
+biblatex-apa6-56209={run="1a1kynyy1gdmsfnwlnxws74hwyqc6sq29wv6ybalpipdzn7dg73i";doc="1qvn9bnzvx88qbmbdgds53q08v7ml42mbqbcn7bzzq6mnz9ra2mx";};
+biblatex-archaeology-53281={run="1kf5aqc8mv28k0aiipwm6yc1vkgzyikp0bsmpmgdhy5acz3whfxc";doc="022l37hplzmvkcpnr06n4fz509w8wm24py0c05qljs6jz7smyhh6";source="0shn0bacflcaayajxpdiv9ik994aizpdmlc010shm3fzjdlay79c";};
+biblatex-arthistory-bonn-46637={run="1j0wy272dkzcb96i74qh54ap2hs5wdhmln8akh749fyydsazr43h";doc="094s5c55lfc7ssmz3mzj61zkxpnn1haj2vh582apzffppgd3fd0m";};
+biblatex-bath-63401={run="1v5hbvaxcqc8ccg3ydpzj5979nf7aqm6r6ax82b9v27sf9zmr2cw";doc="1h0ws1gmi9qf5kj4czkva3kqa6fbgq88dw3lrv6rn31fxyjjalcx";source="1haww89x8x5rwb77g7qfdxr9gaw08067pm45nfgpai8kgr9p92a1";};
+biblatex-bookinarticle-40323={run="1gas58hi5ycchbpamm0z9mn5jc2hbry682i4wmba242wm55digyq";doc="1s39gixpryiqf44riq5bk3hnp6nc8pdqbdylh594k9xk3770p77z";};
+biblatex-bookinother-54015={run="1vb9m88z3cck9gi8d41lsv4ckqli4wjdgwkklfds2z189vbncc4k";doc="0zzmlsikzv5zxvd5xh12fzynmkl0bzzvl2s2y2r4kfn6s08xncja";};
+biblatex-bwl-26556={run="1ii8jacddlj15sm45g5rnk7yqbsd7i8c6a1pxy34vpb6bgsfb69m";doc="11cspr9i8q1da0x23bplsy88nfmn1x87zvrqdc28gbk4ybi6fc4s";};
+biblatex-caspervector-64866={run="04s0dghqdj0x4q4yc3q5pima7qpbjf615amzwc22yd0pfw8h5hrc";doc="197ksjjv5nwil7faxd6ahfsxv5r1jii2j4z66qbifsnwxg92fhmj";};
+biblatex-cheatsheet-44685={doc="0y2ry2q1kvpy8dqglqdfq3rc849hmbni0k78wr1xnjbpd102l3k9";};
+biblatex-chem-57904={run="0kv44yng5wff1xkgw8nya64jizfcf1ipxrgnf46pd1dak5vlsiq0";doc="0amx09qlk78kw6iam8b83xx0kw12k5p7q6wn267imr2rsibbs3l7";};
+biblatex-chicago-65037={run="1ik86b38bc59qyj68fajcbskbmlz6vsg6nzwv6pm1fxnmhnnfd0l";doc="19sy3fi70kmvqknbfa0wxvn563l4s3m59f3jx75n29vxrdljscp4";};
+biblatex-claves-43723={run="0saj8s7q9lzjnydjh3x2hcnhj0wfm2p4rvxk5n6hi2ccfw78d3c1";doc="0g4x5jblj664ngppqpbks3d0ahn818ck871q2aqir6jgkrd13cpw";};
+biblatex-cv-59433={run="0k3bbbjvykc52y4557nm7kqna89mjq6g5j5hpblrcdlmvd5anq2l";doc="1xbd71vpm6vfyjaszn7jlxr084mqxw558rqyqr8x848hbyh6f888";};
+biblatex-dw-66579={run="1kjvqx9yqqzhwin4zwkp9qcgh6nk7bad5nlhx63mkwp37izwlcrc";doc="0a91cra76s2134anv2jinwcpp0jkd0pn7vybbin3pgyamhr469lk";};
+biblatex-enc-44627={run="0kvya1xzxpcmvwgacb726jqzmgr944y9ljai45f0gdkw855ylmb8";doc="0mmc5sd1jjnj42aa2q1g1zaps1hla6yayl769i4bya6i1w9r99yf";};
+biblatex-ext-66641={run="15fq6q1rxx8ca8p8g84m21v0l5pnibzsvlrw7abl8v3zs9bbncqv";doc="1pl04di1qmkf03i3l7ccszf1xab5bjpg6vjrfxj4n5gaw71k3jmz";};
+biblatex-fiwi-45876={run="16grb6hqmrhvzryijg6p4q4vf47a0lxa8bw59avlib5j7mqpg0wc";doc="10skq20bmpqymbgxs47z8ac0q5nckyph7s4xwqmpfd7pi2sksb4a";};
+biblatex-gb7714-2015-68240={run="17ri6cmqp478z15bsbnfmmshfbp25ng070irk7i1qwig4fgvmlnc";doc="0k5shfxnw0kdbplw5fsdf3bybd98dgsshmwqrnpllklhnc30zhbf";};
+biblatex-german-legal-66461={run="05wf0z91b7yhw73xz70nfznic6x4iy0ir5savldd1ai67iv6h569";doc="04xrqwnsai24xh1apw4vl5gqhjd06vri33cxp0z96sp806s6hb4z";};
+biblatex-gost-66935={run="0d7fcvjv4100ws9p14qvp4dvv5wzp6xc8qhaqrxnrzkrzd6w7x81";doc="1zzxb2hqi4gc42jcf21pw79h56yxwq0c0wv7z45lq0m6vc45lzic";};
+biblatex-historian-19787={run="14p27qb8rdx479pj7zdvl00ir1zg8f0bzp107zfwv61ypq8zrvbl";doc="0hcghqxbjah4lyjzlrkixs6iqbkjx4d8r3hv16lgnddkndbgq663";};
+biblatex-ieee-61243={run="0iwj8jp5q16g0waci3wqc7hb1qmn35b6gw0x0c2v7444rs2id242";doc="0mnpgdamgf0f3nr0lbzkhl0ncnf5qvd3g3q4qnw45h30y69cpmsq";};
+biblatex-ijsra-41634={run="0gnm3h0918lvbqwnzk9wkdcafpzz5q3cln2z1sjaylr3mgypykdw";doc="0jl8mr3ai1ybc3lmp7x477znv59az94hlbzaqmvix54rxf6k8f4k";};
+biblatex-iso690-62866={run="1nkq6fa443dpxxm1w7fkj04169a50d61zwsvijg2z80ivlfqpn8m";doc="0y139zpq2xzdwj7ak46wdii3jsnjdywdxvnw5qwh58vvwwliz2cc";};
+biblatex-jura2-64762={run="0lq0dllah3drjijlscwy3nvzmimh9zc0in10vld516lmd88i7vdq";doc="14l5sf5xmfi27izkds3cv933397s4fn1ah4k7jgkj7vw424bwh55";};
+biblatex-juradiss-56502={run="0zi9b67y0p9zdz2n4j1lr5qgd54p3l13c132wjz749mlrv6njfx3";doc="0a6d7awx49cy86ndwfkfq280dwh846ssjkkkrgbq4vxlbmbh2zpx";};
+biblatex-license-58437={run="1fg16xc32kbg493y91sjxjnxpi6jb7kki7yvy3d796w7vy86ljfn";doc="0iy8ad7k9j5x5wnnk196dwsyc5hhz8fl88wq56x80cgfdkg20jrh";};
+biblatex-lncs-67053={run="021b8002cdb3h8yvqdfvidmzbdjqpybbgq14vya746hnnnas501a";doc="0fvy4ailfz2pqg09j6cqydsl9s5x36y0cdhhpvvyjfbvzbz2cc19";};
+biblatex-lni-68755={run="1z6zpq15kx0dsq035yqwal9p3q6ph6fvrax9ckjz28c31x668agq";doc="1pkjza70w9lzcn7r3kn8l5pg89dasj66c8wm8ixvahzvwgjfx9ax";};
+biblatex-luh-ipw-32180={run="13hh4x8p8hxnyz6cr22lb3djl5advrl5c9dyx6f491d2mjz7vibs";doc="0xb2wmg5psd0wi21j1vmn1y8sy8gw78350fqbmpgd6l4xw7bb4gn";};
+biblatex-manuscripts-philology-66977={run="1095qakmlkx81frnzanzdszk7isp92k4cgpqlgvwz9r5gk34mx2d";doc="06vg1il1cp3j525jxisdzbbd4v3504h4yyp733prh9s0q5s39yai";};
+biblatex-mla-62138={run="1fdznq1hvym9wgrxd2gsxdi534n5pbx95i8hzkz95zbxfvjpf4rk";doc="0i4716ascvd17l0nlf1wn4vddkjkzc85545wgb4cdzj847azm1yj";};
+biblatex-morenames-43049={run="1imryzaywyvdr67qcspys9r3mhl5k94vhqjsl16pmz86klq1bs1w";doc="03p7154s44ga7rlf8ya69qvbwkb6gsiwz8j2wycgzljj0z3plnjh";};
+biblatex-ms-66480={run="06adhhqd36ahjax1hn0ahpzmdnj5rxrs3yj6h7iyxc46s6d5cx49";doc="1slizjqc40mqai0686q8jghnsbvdy78kc5kpk5v71pc484dk5hg1";};
+biblatex-multiple-dm-37081={run="11rl82yv0bfy69cmij15np3wc15jss82ghf965r0b1py37vsj0s4";doc="1jypgpaid18g09xxryriaj4n1ql0759jfv4jshjbkbk5fgf4c2yi";};
+biblatex-musuos-24097={run="0zs2dwsid3xhcl01a2hqrr0mdfr1q9j0zga4rjlarfzkgznkqrwc";doc="172kvn0rpmk331yvpf3zbyisv1qlykz8icxgr1xkq5z9bxn9qmkc";};
+biblatex-nature-57262={run="0pfpm5am4dwj04fwdjrw30dx8qrmfx56s7gkl9h9qyj2qadsx533";doc="1mga7yx3radxwqhfmxzh2hmsyvx9qmal394cv31mlb3yd5ww1sv4";};
+biblatex-nejm-49839={run="02v8bfdxslcgilfsnw0g516zl2rfqx0d87hjb0dbm4md5qbry0km";doc="1znfnxizc22dgpp3bkl1iim2ksi3w9klw4jam84103bpbl3vwxgr";source="02q97wss9bm6xj9lvr8vx8jvp8bszkxgk4ayxk5zc4lrnjzw2i51";};
+biblatex-nottsclassic-41596={run="00valazq56srfggfw1mq8h7285lrx8iyk44kb8bhqr1q7nhl6pzi";doc="1c5634p7knwv8zrpqh39zlpglbdbx9a5y5gw54gj37x3r1ij769x";};
+biblatex-opcit-booktitle-48983={run="1xciw0zxkp2034lccvhr6irkr333s0qqqacxqx20v51vjjg8ywkg";doc="1rbswdipirzv68ckh69cc29k908ifpkzp3vxgd2j0bjl3qvbwcyq";};
+biblatex-oxref-68950={run="0c5ijpv8r0wwk8pnd8q0zg3xmkfdn1dkqncdzqjzqql8vm0hh8x7";doc="054anh0z6z0yvxxqd4gsy2sk8yqwvsxgclazgpmqvfhr7xvjjl1r";source="083wrmqr3j28756z4f235kjyq739hnkg0qnjnxs9vdw3hzwijry1";};
+biblatex-philosophy-64414={run="1fdqbfia3k8zldsyy7bf6rhkscf97v84m5c0xjnk0s0xb134d7hc";doc="11pxds41wzdsfgikcyx84d98pp3sz5625kzim7bxp58vn5rkrd95";source="0fhp5lh4g7m07cfpr03ca0vrn12lks8lsq3w4vbvkhh2in5w7z43";};
+biblatex-phys-55643={run="1vj1rrhzh7ncvi2dap2cjk88vdj0dmlpakjiz953rvb7szx0h40r";doc="0z3y7gmcmp2p5g25jha6kwkd7ma4pzgqybxra4402p6aid823fws";};
+biblatex-publist-68476={run="15fwzc0splkfpvhrnpwh2yvfb9yy1zrmf5wvzg7knafqjpw8i05p";doc="0rv17kq27n9npagpv2x2fdww1rzvqvcvxq22yv2yqwcy3np1gmfk";};
+biblatex-readbbl-61549={run="0byz95nahaassfx1gpl80p4vgc2bhs9wfw9w7xxwan6b1kkkz9p2";doc="1cp3r5j8b7zrl0k7zzhyjcrw9nypmr6gd7mn1q5whn7n1dn5js5c";};
+biblatex-realauthor-45865={run="1xv65ic8ywf18fdb246sr8pvq60hv4wmg7ris1glr5104g5yhg7p";doc="06nvybm142cd1shgpcabddbrfyvzcc3yxk9zyq9hr3rfhzcqf05q";};
+biblatex-sbl-63639={run="0947b4lszjbhs0k2p6a31mzc4bci9pvh4awq6k6d4qzvpr51yz9g";doc="06rqhkxpmlql5hvw31yx0mwkdjwnrh9jk4xazqq9bxilgx4y7q85";};
+biblatex-science-48945={run="0llhz0jmncjp8c2r255mxh09rvff1s0kx1lacxvy7svwj7fl6qgq";doc="0daq39wcjryhcapsx7n216yr591scjcwg7z4cihpb10igx15kbkb";};
+biblatex-shortfields-45858={run="1766zipaps96ks920y5zggc0zhk8vkclqh2c3zc2y8x7jdbah1vj";doc="1fs56vf86wwpaz1ik846r83zd9bpidrzzwv4l6jhxss8hgww6y0w";};
+biblatex-socialscienceshuberlin-47839={run="0fj2l2wxawps79v81s74jr4d8wz4pf45mmpry1pflm2zcica3ajd";doc="09sf6k9qghwll84bj6m7v0xw6zm040y6n878x0ywiq64jc33h0np";};
+biblatex-software-64030={run="0d2g21gn89dnl6ldxdssg7aj9jigmlh66z8s2q8qvn7jg26gxv6y";doc="1z3izka82kncwx3hqq2rh6482faw7rs11j1pfnj7lncacab2b41m";source="0rzqm6csbmk3xrqnncd58ajhwiv7v881idzvcv5z48169s737j7b";};
+biblatex-source-division-45379={run="09wsi1nj7hcf5nswkd6syn63xhk2ghaxikz5xb5sfyci0lmnqgxc";doc="1mfz2bxfwx24a2652n4jrdw1mhrm1y7i5vq54rs7sp5a1xfg2d9q";};
+biblatex-spbasic-61439={run="1pw2925wakr0wgcm33vbmqgfqnglzn8g04fapnzrd6s0h5155zc1";doc="1p0fbxqyxiw3ihiw69z6zbv2g8pbrpdiad98iwxx5j12sm6g5v1m";};
+biblatex-subseries-43330={run="1c92azsgrp1cmq82ga3cvnca5s4j902hcncp64g9psgl9fm74nwx";doc="0ri6vvzcpcm2hz73dkam0fgbnfm7i650x983qcngkr0jqa43xr41";};
+biblatex-swiss-legal-64491={run="1sqskc93a3vdxvycmdz494kddxvzpf6rgw6l184lizwnrz9mr8v0";doc="1k0xgd5gi421zvh8bvyvq5naapb6v7216k2sn5aqhca93sifgvqm";};
+biblatex-trad-58169={run="1000rdnm9jqk89snffsf4ldl47wry8k5akm75aqhd9r7qbn73car";doc="1m32xykdgms8i4aqny35w0happr6vbkkra9m4nasxp1vzykf0n63";};
+biblatex-true-citepages-omit-44653={run="1lqs1swmdmnhard0589k0r8gz3hp9bd88dz5z0kd0586vl7z2l82";doc="0madnjxwjlz9hs6jzgaady4sv0878v7fyjs3sn1bcnzyw4krfxgx";};
+biblatex-unified-64975={run="06pq753prhncs0sk87dqlapm455jlyfvnx16q2c850cdipi33rdb";doc="1rshsmqfjl3ajaxvcdiqr01hbm4dh5qxpbyp5k0a233s254j4ypa";};
+biblatex-vancouver-55339={run="19ymkk94c4l5sav1lb66f2lxjyfzzi1s78qd2a8drjp9q1c6i0j8";doc="0wn26kl4nli220lfs663rdqmv49xgi76kjgnlwh99yljx7v47n09";};
+biblatex2bibitem-67201={run="1l3j9v225f9g2zmishkfvimd08di89p39g0sqffdwx0psj99dw5k";doc="0bpbsaasi6kq5ggs3cpkmwlakdlymd99rfr028q5xj42ir8cba3h";};
+bibleref-55626={run="0ds1a91dm11y93dy46gflzgdx5rgzzm8j50q2aghbhfiqmb4vx83";doc="18zif1ciynp47z8hbhc2p6r8jiqisj46as052scb5q6p49fc1ibb";source="11brqv3pgzzk3j09z6ps6ggwsqm89y82s3cl6xldnyvx2ngc5ym8";};
+bibleref-french-53138={run="1r12767ayfh073559p6pdrfs9fs9g2dxcliyx06j7r8lyfab8d83";doc="0kiijl5jhd024znr80g3xqdhz3jyg4vm4kyf1rcpa7dis4ffazpn";source="17xih976gi8my8mdr8n1nfvq6hacicdk8a01s23a0sarj4qwxz0q";};
+bibleref-german-21923={run="1vki9hg39xhn8xzbd4wq6vn6zk3x9gl9bm9n3wr214c5n5mpxkq2";doc="0q69vfak1yrv564qcw3nrklhq4sf62hi6l7z8w2hcj3c325kii56";};
+bibleref-lds-25526={run="18x44jyar9dnfmw4a5ijhfipscydqj2hybl79ngw1b88k9iq2wxb";doc="0yr2kwzbfbak1c5x202w8jpgr3y6fq63vkjngb0k2y5ivmjs636p";source="008hvab2f0xw9bg4ry74g19bfsrhp5ync4ilpya2h79smrwp5xra";};
+bibleref-mouth-25527={run="11x3ldyg77xzpx8yl27sxn6x5gb3jdngd5hgm42p8ac0x57x7ymz";doc="0vrpyl0s13sw0hi9s14qamzk69c2vxwjy0zzafzmlfd0pzxhmx28";source="1mdhq4qchr8gvdalf3rgns43b2lhniyp9d5lm3c9dnnlaim59hsv";};
+bibleref-parse-22054={run="0xa6nkbydiczmhphdi3rpipiva94x2pwmqgqcwmr6a66y1gk0d1x";doc="1mn4hyfyialzmzm0syizq1vps07z4zxd853v3aljn6zwqcwfpkxs";};
+bibletext-45196={run="1p2cz95815vkvvc9fsa1qm3sc5grkxzdsyw30qkilff1nivb3cd9";doc="0czz3l0m314a25i242kixy9f9spcj72h3bibfdib55gg05iw102c";};
+biblist-17116={run="0z69a5x3czy0hb59c93jrkmmg6i66vc7rw6szvchsbsj1c6gwjfb";doc="0wp7x8qj7bh1pgcy01jmq35r2i1f8yvrv6bcr8p68d70sr1jqspn";};
+bibtex-66186={run="1w7vpf0kw6vi3hgmlmk0dpzk82kns7a77appx8yg76xcip2xid51";doc="1zsqknlbs7d1zzp1gld8wd2sh0iccwq9vqb15xka9gs9wh30gc6d";};
+bibtex8-66186={run="1hi24b8mmpnz17cfj0p40ipyvzqhgkkhhgh7qkcgr1bz9k82q7sk";doc="0l50jqs0dljlaspb5q6arvimvraf9iv6sch1hr5w5yw1m22qdqs2";};
+bibtexperllibs-68910={run="0wm7lrg1rdhl0b6i8blfs1vkslvsdjksjdhc9bafqrrz3wx9yx27";doc="1r4bwlsggd4wyadclw06sj2akd04cy1v8j41g8wqp2j0x8j1jq7q";source="1i1cavfmgd8kiz0mr1sh75p7rhnrma0gg0b6xypzkxzkgwp1kb8c";};
+bibtexu-66186={doc="19bp8wn0ssz7gczxp0imbpgi1zwz9x3ya67f072rjzg2zmfpphqg";};
+bibtools-67386={run="0s0mz84w97854gwsz843gvlqlgk4bs5bpd195m8xv8g9qljpwfvc";source="0s69lggqnppqlyfc5r2k9jix7zpjy0nvljjimqhks250rjbgg0hi";};
+bibtopic-15878={run="0rzz1c1c6vgjm2r0gv65rwvbcv0asc5049agv75yyvqihvn51018";doc="0hzy6353n1rzirfdjd8dgjhnp496i14b0z0n2x7gnisf3qksr0wx";source="0abpdz3ir7l9dvc6vy5zi9ay103ga7i92vg3z69agd758xnz0v3y";};
+bibtopicprefix-15878={run="0vy9cah5mmr1vf4sm16212h36wz4623s07cagjqnmyprgm44sz66";doc="070shh1cg3hdk097v9jr37f06q0qaaxji3vjdv8v24a1rg3rrpdr";source="1v35hawmsgm12sv80wq2ld0rzz5l4shvky44l8wkxxh7i7vy43sx";};
+bibunits-15878={run="0znv09kqrwvmsjsw3lx9d3mp6fm8444zbn317q5yn5hzg2dyj61f";doc="1zgj4jpl0fpmsrcp3h4qlkilflmy8zqhjamghidwzkkg1i9jsfz1";source="04lswyalfivh01hp1wj3fq1q8960dmsvnbi8k856v3dhz0pv0whz";};
+bidi-67798={run="0iisr0ac3l2hrfja1vmihrf08fnly01dcfg0665x7yfck54qyjxq";doc="11x4y6rkk5g9ah7gmbwhppwk7i6q3j7wydjvbhfdz27wz4azcv1z";source="0nhkwk2r4fj5x94w9fq5db9nh051hxzb1j88q2bfhlf9zfwgiirj";};
+bidi-atbegshi-62009={run="0wpwp2fr233f0pac6llb5gmhz2ca41yjcmkqdil6qhpxscfpqizg";doc="1nzg4cgdhjjsalwml50xl7ac25w0qfd5q18cs8viicj7bbjp13wr";};
+bidicontour-34631={run="1yj7vl5z4xh8i420y1ycz21rw0yy83z0v9nlvi8k3ph2qis7lp8m";doc="085xfi5w350vbp4vnq8kgbilnz3jxwf4g0incvziy5hxh4isqirz";};
+bidihl-37795={run="09wrzqlldxy3lcxp21rdqi9bnjzza9wvdgssqynynjdmfggahd34";doc="1k67d2zd16ash4krnkwvmwx4wl668r0pdg720vr9xq6q3b139y9d";};
+bidipagegrid-34632={run="1nh14lla3xv9zikqqpnw7nb26kshjd186ijlz9snz19nkgddq28x";doc="0jgd9mfwar486gl7imm1m87a167c06cdhxg9qqp8m8nk6xdys8f9";};
+bidipresentation-35267={run="0kpwhs3dvmjhpv2n6kjly5cpj56gnwv3iyhiiwffd4bphzyrnyjb";doc="0hp0zbr5mpwsrd4rh3rc8qmy4srp93838k38phmsm6dwgqkda2z3";};
+bidishadowtext-34633={run="0jpz5a5q9c9c569ssyzk48y77msvfkd5csdvv0cd0r62ivrai5jh";doc="1bcbz6fiydj6dx8xzkrdsrm2vgcvn1jj4fk2jh1333la6rygvvav";};
+bigfoot-38248={run="1md91jivqvgf5kvwizc30wns9y9krk5pzvaihxkn9qs41j907wx8";doc="1lj6lv7iizbsaj00hvrcrdk9w0iak3wmx6mdpfb77jkzgp9dgg1d";source="112kj1669xl7qd2vrpgbi19cw00rkhj64ik6rrr885qr7bq5w79v";};
+bigintcalc-53172={run="01vz3qrhxb28v86np3a0spq9yxxc7faav32m136nax2vkm5ff8f3";doc="1wa6750qyggvx7nlwq9n7s1rfdm1h6i5hv91y1aq6mn26sw68l1s";source="00gnanfnw66bfrd5gk072z9rn6nhmqnjwf2dwnamvy3dpxgg86jn";};
+bigints-29803={run="10lsfqfzg0klg59s9zkrrxv4qjhnk74x90rkk2w5pi8zn83k6xac";doc="0xj6vnqfd5rb8ahxbjaqz7jd5kpvihr4dx88avrfvdfr0qhg3zlm";};
+bilingualpages-59643={run="1yawm29kn5ghjcncvfllv7iaj6a105xg52r3bz1m74xhnxif5z1j";doc="1bha7ixvvw04a3gj5lhpyw4pcarxzf16vkkl0d378bypa3lq5212";};
+binarytree-41777={run="04q8h54dl0fmczrv6fqvvisim1mz9lnvkdmij6b3jcn60z722k84";doc="0j8gn6mqaf1zfi9y5ahfzmywa64kzl9jxpdcdz1fl98ailbzywf3";source="17nc2whi2nh2r17gi9jn0qya8nyfjnn6d5r10klkp42b75jff993";};
+binomexp-15878={run="1mx2g0s4y5y9abmj2b7smz0xc2nzyvnx4x3f4h5v3w1x1kp5y0hz";doc="1yi68q48p39v20rzny1603j20n8k6ddpjqi773955wmh1p4mqsb7";source="00rmdk466a4kc1492b947q1f97d7cwd2svvc9wr6w1agzz8w890r";};
+biochemistry-colors-54512={run="0d4bbm1p3j6q28ckkl7ilkywrjx6iqvmx0qb27rpldw3jabf1lp4";doc="10pa8jwpxr37hs0wcywzsq14x1jgjx1cqg94lpghi505mlrikcg1";};
+biocon-15878={run="0g6r8rh12pbnbhddcv6sz9h8wnv31q6jqs2xbj5fjj7vcb46z694";doc="15wd9arkdxsh8aral3zgl83627yl4f0wdx2r8b6xb5ivvrbwaslj";};
+biolett-bst-66115={run="1ap5arz0s65bqqfllzwxisp3wa327kgivw1jh1gkc4wljq7v4jq1";doc="03hj647j6b7y43djqvb28rkjixpr0y7i02420piskp3cg90hn5dj";};
+bitelist-25779={run="1vbz2c27jjc94i23s1dzl9j0zf0n2935sgxgc5hq3bpaz1qxvm7h";doc="19p9f9bzn60nf5163rdlw166zpk7qlfwhnc51bpkppb0w4rni2ai";source="0r3lccpampra8dardrr7sb0swbx72aasaras43q4nx4jv6z2561k";};
+bithesis-68634={run="1s0hd2af4ab6y8bvkxjhiagj8d52z9knamrj71smfw8b2x3419rb";doc="19zjrhqa8wn6vicaa8yrr4pf4fblacjn69rw4r9ia9r7v7fbvxp3";source="0w74w2g8ccvbsj1apv86aa3fr7ald4vkj9k8gvqdc76yzdfj1vvv";};
+bitpattern-39073={run="1j01vh1jy41714k3hms4nkk8j5c5d4nizgrm5syi20n8pcn3l9pi";doc="0a9120z9rsq8pqi33iv7f4j79gimjgxfqf5jhnrnmz0hgqdpl2mi";source="16bjmxm11kh0ww6ymk82qs947zgavm100nsfnjl60hxwjl3yknzn";};
+bitset-53837={run="0ynyw8fyb5cidlz00f42cf21gakm2ir9ilddaaz12s7qq99lhj65";doc="135dcx0b51br6lf9dxd66jq2xa21bpb1mi4y4kk5z6ngsd1imdag";source="0yds3rhgq52sxvwn5kc32iizapbs5g21cw6avbppiip0s5x0b538";};
+bitter-67598={run="0x3xnz8fvhwhixabr05rmxw8j0l03v2j5ylj7jq4gni519n3g60q";doc="1x8zzl2890c44jqk69ncsgj7xhchysbwkf66nnw0dsk2qfahc6xx";};
+bizcard-15878={run="0s6c3s99hid9pkilskd8ssc4hv5d5yg5lvw6kqz9szyii4rb6a18";doc="0ic6c43nng4lxsznkpj7w86ampdzjrqqcsdsm1f758rfds7wbnf3";source="0ywip83r43a721yfzrfnkfms0saly4p2ihagyp6259h2kji3vdjs";};
+bjfuthesis-59809={run="1gmd1fjwl49h98mh1bqhlxw63bcpy3p6ri33642p49aypj9iyk80";doc="056iczn516aqi3n04qn4q86w06q5xb3cz07sdb9lr4yp35gxmfzh";};
+blacklettert1-15878={run="1gvdw5gwjzgxa332ih2rp4whdcx1rdn5mig5q9cyiy28zvm1zrp2";doc="1m6qp3bkwl77khvanw498bfrydmyvf1qx5a9sp66x7l7xgjnndlc";source="1c38hmva1ffzani4mjg7zad0mr6lphncspn57m55n28hwfq7x8i5";};
+blindtext-25039={run="0nwxq33ffivn2ywxwx2w4y7ny5nv4af9p5cwn6c21jadrdj1rysp";doc="0gg45ayj3bibxvlghnz3vs0yj29zyr50bf6la0m26ma8ff0pw40c";source="09ppqs9mdkmax1s20m43hdi6yfcnpy0ylwdi9h9lw676gr65cn0m";};
+blkarray-36406={run="096mlldfyi6hxsnp3flkr1gfqhvhxm2vzk81zw6dl64xihkvl6aa";doc="1km35jnmh1iwya05s3ilhikzvz5yspxf18jh3f4v6iv5g8rxf9gd";};
+blochsphere-38388={run="0lifkhwl8rigg1w2k915yv1r9xylsj0qnj48cx58likwanvl8s2k";doc="0dbh11c3fjrdypam15gjlqwf3n9wxwhjqdd1h01f2f8yams42xfl";source="17bkqf64qvjhbids04bm3qhghqrrwf4m2bsl3gjxxc4h6sfih259";};
+block-17209={run="146ava8k2z6mlr2aq5vydax1i2sy6spn4avshcblgr5ph49iirp4";doc="1nwb1z6df3y0anzrl6b45fs2k069i42bcmx0i4p9z9fsbgqqfw1j";};
+blockdraw_mp-15878={run="11977c2f4100xfbrs5vcwz3vbijdvybq80zmfansdmxc0w3w6sq6";doc="1qb23f08wxmw3miys4sn89h48imzcqz720xfs3ihnbk2v75q3rd0";};
+blopentype-69080={run="1c87lxkmscs3v89s2pfy4r0cymgcbrdjg0vyhhcjh2ip29dv4kj3";doc="0v0yijfjyf1l2lxpmkg4w1ij7gj0mdmxd51y33qnwgh02g18yrjm";};
+bloques-22490={run="1gr3521mxmabcwvkqxn7f0wcpcmzy5jdpypyafyklmnhc2ij6zqj";doc="1jmvan6ja2zf01lm0dmh3dg4rf1cagfniqjfrmzpxc062khf97w3";};
+blowup-67640={run="0ijgwims5gklp37j8zlc0vdr6y2l0gf3nv2jnjhbbc49yv4n8gim";doc="01an3fbg94bg3wspadjil9npbx108g5x7kg8ga7c1nza0wygsdd9";source="1b53khyhzjy9mww925crpjmfgk9cjsmcz5hxjpl8wghrc4qqahjl";};
+blox-57949={run="0p3ci3xf1vndbdf147r9l1s68x72g7r2np6znizj3qqxd22h3wxx";doc="0hskpi2wnlrrqmv0s8i4g4bh03ka18w3czvnjjvhvmf7im9wq2ha";source="06zimj2liix2y0f6a35kb8q9d9asp48c58mhc3pssa185bcc7bv4";};
+bmstu-65897={run="1x89sc4grkk3b9mhi4y1gkxm9pcbhg54j8v11mq2bx4nyl0bgrll";doc="00950rlqysn7faapvg9z3knb61f8l5hyy9kjxisbs80z99mxh5rn";};
+bmstu-iu8-61937={run="0xvxli6na2nc03qwn4x68sq4jdr2x830yvfb507j1990pni1y01v";doc="0kimc29vl79ib5xmrlb1ipfslq2y4i3hnabxcaisrb54z0y3rp1p";};
+bnumexpr-59244={run="06achk9z1waxr6ndcfplnvhvd7k4z1l9mw9plh92qpj1dn48ncbj";doc="1abhn0hyps7azg4fipnyxihhzmk5fdnklb4gxxsjvnnr1grka38y";source="0arhv81y8993498qkrnlnsa8fiw88s389q6ybvndrmf85js5nwlb";};
+bodegraph-68785={run="11y62cwwjkxpr7xnpc20aw37lwcs83177w2gnxz7f3lr8192b28z";doc="1k428jlknm973v64wj1ljw470q3939kxns7xkxcfn5r3hjnqhmry";};
+bodeplot-69397={run="1s7jccfsd86db9zfrbqi7890jfsznsa0fyj2ks0s99d8hbbzp2pz";doc="193cah3bgy8blxgjaa6gvg62yyv4ccf0zwbiway96xk617c4r9cf";source="1bg8svs2ylxxdd4if9z09lvpwypvp3s8mr8568spdq8k2vcg6lag";};
+bohr-62977={run="1fbrgfp1xnxa5cf5yqk9735wp0qwkjkpf8sv8gdjg6a06mpixn6m";doc="1jbmck8ld3rg0nw5rs9lbnr0i34gi2sxncri2fmcdpl8pp3xnw55";};
+boisik-15878={run="0xqr3sgmzklqsvd26f2800ifs674lf0a4kgr44na2l0lf5msww2c";doc="0l0hi4n5cfm1zdkr68c6ks3gxkda5bgwlnf62y7x96q5jkscdyxg";};
+boites-32235={run="1176j9ikh36s0cgvsflayik1xp0zycbp8m9hg0c7jmzkm5haqw41";doc="0visqy0qg18sa4mxszdl601yy0ilfgglv872dhzy8bnqqs8x7zzp";source="1zirqghkw8kk8fa3xahd27dh60phxg3blp98iavh6bdhj0rm7iar";};
+bold-extra-17076={run="0samckbdgi91y5ay98h6jcaywcqfbmzcdb90kksjxv160nsvf5ca";doc="1101922s78y5d9rjf5immfir46vf0i1ig20wp360zcal571csgjl";};
+boldtensors-15878={run="0nywpj03fzn31fffyfy9plxgq9008hhs2v1d3nsy3ggas5kvrm5c";doc="1vdj6217qwal5005zsmj0jm32s7scii7nmawljqi1j1a7lzlv86b";};
+bondgraph-21670={run="0ryp004w9bbphqwddprw8c3v1vndl0r34gx7ag36hlqipl6r79pm";doc="1hk7lp72x6skzvknhndz6f4lppamd3frl2f4dbs4hlvi4wfwjgc0";};
+bondgraphs-36605={run="0dhm5g508wi8r8hsk753bqflc4rvm4zi8iv0564pfsfz40fh3xnn";doc="1wnjhyr6r7jkmxzry9my2mw8i7q2nwq26zqyfi9mh6cv3x2p8siy";source="0qqs868saap9zsl70bwzfpmq8rnyvq2k45nc31ddzq3563djhfi7";};
+book-of-common-prayer-62240={run="1i6dk9ibp6al8jxhk6f6a8vsgpy40cr7m5k8zl1wq8fnm4wp13nr";doc="0ija5x2rgs8qxz3p4i81c3b9sznj749hasznxnlgn7anlv3s84rq";};
+bookcover-65394={run="0mg4zvi6wc2g80pszcf6a9ahqp2aphw46i59xjda5rjhq1xrnk7p";doc="1gppgwjs303i6f0zl23xa35w6ycfif8f081azbmak19f3vafzqbd";source="1xfn03hcrkidd4nbki6qqvk29gdh1kkd1idjqsdwfx7bb3ydgi7m";};
+bookdb-37536={run="1qky1ccqyni9x3dgjn6s36qyqdqzkj65m2glzzqdc4qs2h1hqr0q";doc="00fr2fid8yg3ww2gmgadxx90y032vrgicjh23ia41r159clg7fqp";};
+bookest-15878={run="1n6n322vb157fz11djcnfz07ykarin7n8mdr7v04wlsj2gfvv5hi";doc="1n94n8pv5s0w12w7yiws7sv8vwg06r245b7lka3g1j74p3xyc5g0";};
+bookhands-46480={run="08nsfgwhlyv9whaipx74hr4w6dhpdlvwcd6kxzcznxc66mlrnpk5";doc="1z0rir98r4fm8vhx26hw7l22p2z7swj5b2i3jdfy3c6cj0pi4g0g";source="17clfn8g2f48v944jlvwl3jsz9ixkw7x1xjxqkpaqnng0wsm6fyj";};
+booklet-15878={run="093kp4ryfp8q1hg8ddmvaxxsw75wplgz4rrmmwmzcj3hcgyynr1f";doc="0cd1mvkv29r2aqdy4bs02m3ck90rdv0nz01cq2x5xvqk0i8j5dhx";source="1c67lj35yh0w9bfgiba9ank6wk9zqq3l3vvgwn8f3v6kygyqha63";};
+bookman-61719={run="12wkjwpzxn1a1k3bb41gpnky1jjsh7gzj4xahsjd087fpmrsj9p9";};
+bookmark-69084={run="0wax84d0wyy1z4a78j62nnmkgn7f9ww6703qmnhyj9x9206dlh31";doc="0adm4hcf92xqxsb4cl01mnf5f6mvpblr3b8phxaz02xwxx3203vk";source="1w48rx66n77l7fpqpqcn8337qylp09v2pnxphhnl36sws5yw6nqq";};
+bookshelf-55475={run="10sjmi94cc4ix3a2c0qpavs1sc0mqfqfbbw4qygf9w1wdivrijfz";doc="0j0lqi7bjlivivvrvswlw89vav6fx8wg95bn18amlwy5l8d7kyiw";source="0jx8dfl4j4k2av1syngad6narkdjksqcr71q92h3090rf58njgj3";};
+booktabs-53402={run="04bfbj0v47hiww6z8xlzphm2yh4vidf9gcp3rvh81j66s7wybffj";doc="1hp3fbvg2v2hk1bns9b28hdjb2bcvn5d83apkr503ahln6rigf8a";source="0p0hym0xn4zcmq8q5v93z1zi8n7hxz9kg58fq53y96hf6isigdb5";};
+booktabs-de-21907={doc="1ld7zdr88xjhnnl2x734rxr7h0fz84awapmv50p1kzn6fczrwyam";};
+booktabs-fr-21948={doc="1xkqh6r2q835xaa92b24fzf61jsm85280570hivvwnch96i4fnh3";};
+boolexpr-17830={run="1jd298qazp3q0r9dwn7m35yrzvkl988c41l0r0vdq4g3nv4ppv79";doc="1cwj9473nazkz0acz4x7j1xp50139xs1ifqck40f2vb1gvhasly1";source="03kaz41353m40rbmars31pkbrrj6zwiajbv6fkabq0gsd9gy7bq0";};
+boondox-54512={run="1x8xd0q0yg1w1y06gx9fq25jakf7s3nz5lf2vryh5zlan2fz0ic9";doc="1sc5bwpvgz28q2ym65vccyr5pdg8fn680kd83zgcbcwd85n8nhrf";};
+bophook-17062={run="02wgw8462aaqknrnfsv1y8l6q7b9qvscnarysg2hw51l9g349idb";doc="1j5xyh11h3wsidfjnpw2wr8pc5xazf5wbbzi04r3wkw3v0haar2p";source="0mansjz0a6g02k9n7ijyami0gppkha80mnyaf9sqqzl6ppqygvn0";};
+borceux-21047={run="0hx755ghdd697fdc48hlvr21la4s9wvsn4v9c0n6sirlansba8ca";doc="0fcsjy8yi8zhrl75zb2wb17v1ilpgipdr85vhi4dsjmw18whp03h";};
+bosisio-16989={run="10dbj6gzv7z1na2bynrdz9971k5fr2vr4njcnsm16nlhyjzypfhh";doc="1a0vyxnhbbdm2hi8gydz0vyasvzzh3k2scyv2kxx4qbwvv4liyk4";source="12f99cgcf4mphvbqi2ffh7nwj627c5cxc9v8xrcg8nwfxr81h7hv";};
+boxedminipage-54827={run="1sn8liypm113jvmxsb0bl07cprrvdgq4rhbnp85lb5671djr63gr";doc="06wan6b11z6g2nbw73z5l27mb42cd417bq2vmmmxla2fyksjqqa3";source="17lk6ns0zl83nhdi8g6sgij4ajghksblqx2aac1gx6fmq60p7pn6";};
+boxhandler-28031={run="0ab7kp5xpsvn0i796xbsvnz8lc1ka1wqayva54sfbsv9bg9n0xg9";doc="0wsl8ivnyxf38rj2xv11jzyiqd5pgcpjnb3nnabl8a3ijdynzsci";source="1l875jplpql2bq0h55nl9ddmia31069chxc4w86pzh4acqn2c60k";};
+bpchem-45120={run="13l29qi6w99d47cv0ky9hsm6356vk7n88xkxjx5v5pb6vrg8zblw";doc="0n8w0dvfqal6k8syw9inaykdj2ndmkjqgg0fi7himam2q5qa36y6";source="1fbbs8lfzr3nih6m623r1wxdm8vgzfli2q97kp5jl998pz0ipwin";};
+bpolynomial-15878={run="16rzvfjwc5lrr6fvxjwp383ayi4pwhqk4x6k9blqzn0c0cakqmvc";doc="08d7was7ly4wgy04np72f9pn4kz20hgfsprvzlpyp2rfxvixphfc";};
+br-lex-44939={run="0pdhzadajg5vx5da6ildn9k2nfvf1ks4pxjgm32ajpcpfxbjpwk3";doc="001822zh0f18zvf6b51qdh4ykkv6ywqa5pm8q2vsmjv8rayjralg";};
+bracketkey-17129={run="03mq7rfgkgv06m25hkvlhaw1mqw3xr0ghfjj2jb4nlpkwn6945nq";doc="0kr9il6ac79kvqdds4rn4g98qxy7nvas62364sv75zv0hb6wl0kw";};
+braids-69398={run="0q4zrqx1ynlv8br0my5cm3j61wrizzq4s2wal010yx0lxlzm1gjg";doc="1yzazlfb6f5xr0s21yavcgw48x011rq1783n1cnhqcl9y7c2qirw";source="0f7a18z19z09jkrxcqr30rvnp7179fcsmc5n8fyp77y0j48kf06q";};
+braille-20655={run="0cy4bxpg284blfpmpgh1v9vyh5bczdyz9zdsc1almc51nv6c6zgf";doc="1ygyzvyz4am70n57hs8xhrkdd8hpn2mvg7hg3rdr5b6dvis2ibj7";};
+braket-17127={run="1ml5xz6pyj66kc2jby0bg02m79vfv9z3r91da808n1zb22mmnjkf";doc="09vqvl0v1qkrhv65bh9ym1zm254iigl21d4c98df8ayvffjf6bx8";};
+brandeis-dissertation-67935={run="0wz3k1yyxi9qdfqkj7h0bag1d1dj2yg63h0p30ydaxid9qbg4viy";doc="1vqzl7fkphkk6rqpg2rjdmd2a88x0dc96ff7hqrmcr085x7vyy7b";source="1rw5qxzc9ksy4v1z8r0xh5sa0s63l1dvr5lh83vjs6qgw7sc2yz4";};
+brandeis-problemset-50991={run="155al8iph3949h9859w32q6v885f0p6wd18m53rkliqvzc6d9f71";doc="168ywrm0cnk1l5fmqzpk9mxf4732mjb488gnqiz128dbsshh37yr";};
+brandeis-thesis-68092={run="0ng8xi2cn146fzafk4p8n651v4n7pqjhmq1y3dl52xphbh03syrc";doc="19acaxmg5r46kjk54z6gm59rf3pcbc7wlgqr7j5rbbp390c7kchj";source="0j85pasvrblbvsi9npnfmx9mc6gnxj9128d3zc6iym9fx3vfcqra";};
+breakcites-21014={run="0f3zhwrk0wapckz83304anlp2ssii7nvzjdakbxfdj51cd6schpg";doc="1f8x16qy5v27asch2jhbgh080vmv7mza4z5w63h31gdglbkwdp11";};
+breakurl-29901={run="0a3np519c1knm8i60z1d6rmmzdhfl340gkf6c4m1yss68didq0cn";doc="0dk4hgl3411q0k9dz9f9p5f7r5a59rpjcicz9h7ynpc4g3nhn019";source="1hx73iw3n5wgvaz2niqargiw36p068pjl8x65cajn081831syzfc";};
+bredzenie-44371={run="1mcl52mlbbw0yxbs53x9a7kh3xlaka9c7nszfajlhpvj4s3jr1pd";doc="1zgmhhyqf2bwlf0mi509nrnzqqa5g4qxr3zj46rsa8jz0giaig44";};
+breqn-60881={run="0dm9r7zjdwcdv8hq0l08k49lq4pvvf78hrlib16rk9s03rz2v4g6";doc="131y7g7hia9dgzf890xd5g4wfw23zr753kk78ajrdyn0jq1ipshs";source="1hja619zcayr2gxsxhsfpv3gp9x0bx8y56mjcpb9ykwlxax4zfpz";};
+bropd-35383={run="0l7ifzaqvqhk2dr31757ias4w4vzpdz15kma0bj2fm7k4sjx7d5y";doc="080g65q0v34rbfl67mpvqfcwfvr5znwv0rys8m3fys1s9d4yyryw";source="1kk38an662s7blxrnk4nhfvr49aymanj3qcm288ca6kfabg84w8a";};
+brushscr-28363={run="04vpb4yvbazm9lb7k2rbv4wr372k3l6brx37fx5283fpzj3wvhxv";doc="0dv19f5hfzwnw6fd32glqc71rbjwi1y66p5fl1r17pxsj16nlyc4";};
+bubblesort-56070={run="1qs3y6vs5z5m988cj6dl9n74m0j5d4hsmnrz6xfbpw2cs9g86jj5";doc="0pcbzg1p1wpw00h7h1va4j6iivz1ky31k8aq1jw4z9s5rwz64p9h";source="11g2brc46977w61sk0q9j2wmn5q9x9s3mv6fcgj8ywql3g4r85pv";};
+buctthesis-67818={run="1z7svjpf73ziy7iyd03x4g17k4y8cbqqdzi2ar0rpg48n2sxpmfa";doc="0lqvvf1bma1r5n8pawqqjb78jjgknf19j0810dmxzzzrl7mvxscw";source="1wspjl3bjpv3dgxakrb78w1kmb8i4hivq3wj2mkrwh84ahzj4hby";};
+bullcntr-15878={run="0djfn002j12nb84svd414zng3rnjp79ssrdhfb6j62mx0p9j2hk7";doc="0c88in90fy65pd9shbf09bl5dm6yd3z7g535ni5js251bqa9wijh";source="00pdz4i2pkn1fbihaz16vbhsnwaybpcavvmndg7nj47jlcfplhfq";};
+bundledoc-64620={run="06haydgwqfhzpwir9qbcc72y0x1xl0jhvyfh4gx37cpfvxz514qq";doc="1yqsh1kz5hm6rfh4vrl658y50ncypwb1mdw2p4qfffvp0w5yk2kq";};
+burmese-25185={run="109492p6k58bdgs4y0nb1hfnk63pdpf0x4b7az8frfff4wg2jvb1";doc="1lwgifmixkyxscy6ichwmc8lv26dwmcvy2nm68z2wq0cz7cihjli";source="1iwnsjnacafq1w3n6asj93n7nfxxyslf69jj0rfrl05fai0iq458";};
+businesscard-qrcode-61719={run="0xv56yqqj8y4270955srbiw7qy8bm9r3ih0zazlkrxnrxyh82jlk";doc="0nfvak5730q4ci88dyqln97ljhjbwxn3gk34rq2b5rk5cy2inabi";};
+bussproofs-54080={run="0d783i6srwanhm806hk0y5igbw99rf5x9anl7ib29pijrqvg8kjx";doc="10mn4g6dap1rksl5jnsp8pv3n0hhfrb9imldjyrmiika2d0prfp9";};
+bussproofs-extra-51299={run="0ndqiz033c8dxkdknf7hy1d42y0g2hgdb091wxrvpla7ryawcb8v";doc="1bg3sh0r7kqkb0hljc5m3x9gn3wkfyjr9b0d8myjwwyf4g9hzi0d";source="0p1imkwz82zwzp0p49a2vj7gdywv7mxr3b6nbmvkpz1n2qxs2hsg";};
+bxbase-66115={run="1ijrq63y54ahv7r5f75ssx2xjb2mfbgxk9pq53sfjk8cww1m9k0l";doc="0b6k87rxc8sxdqgbr61qmkrfdrzllc54svbm5qdxvknimgsbaiv7";};
+bxcalc-56431={run="1lgk3zfraip1jx7hpkkxwzril5sqc1hn00km3ybicsvi53z1q19f";doc="09x2b2cdxgf7lil1vlw4bmmjn2kl84cgxd75w2js2y1znsfgsivz";};
+bxcjkjatype-67705={run="1awhcn56jiwym35gxlhw4m32y4va9qh1skjjhk455plfmbydk71p";doc="1d9v4al9hyimw0bbndd7d8jjc8pngj5xrds1a8j7mgcjhkyyjin7";};
+bxdpx-beamer-41813={run="05zpcwq6syy612w8jw10fqym4w4b4qxrd2i4n4hqwxv2sqgsw4n2";doc="0g0ld901kdq3558ngzy6mf2f2vgjjcngiig2pbjb8xakcq933jj6";};
+bxdvidriver-43219={run="06rw5wwp5ky30s31f23gl4hpyzakn5b3vvgna8iw2iyy6rw5cl7a";doc="1qwxy88fnfsx9na6c8r56n6zhs13d8apkjq7hhydsfs7qy54q4vn";};
+bxeepic-30559={run="18by54j2rg04n19whsb2zjkksrdh6f6i54fq257i2mvcp0qpxwr5";doc="0117dzkqs1sy8si4dbal9p5p6csskcby2swmf2911c0vbpdl51zm";};
+bxenclose-40213={run="1mii9n7x232y5398zl9xysg81hflamrj3dflrngs94mm4akmcv2d";doc="19nmr2ripjifpjw8xrr5dhll392llqbfqjd2vj2zdgkvqj4bar4j";};
+bxghost-66147={run="1dydfivb39ly87sprrqc42s5rmwgpqx10chmxa7p3x3r25dmrnzf";doc="1gi4jj5xrs4wp194r4w8ycjvk3m18a499lckzpqgmb9r2n5ab8a8";};
+bxjaholiday-60636={run="0qxc2s07rqnyi0a8a050h2qri4kaqfcwc26c2dz0x8ypg18s6nhq";doc="09a5q2cra7by0q4zxl9nfa672ryz0cdv3xkw730cq3qyyxgc06ls";};
+bxjalipsum-67620={run="11gg3r67rs7j3f4by1irz3sfnwlz88i8w3kzf0bdxb52sfrh57hr";doc="0wxw7dlm8rwgz321cdfpx14vcx3hf2skg61ngr5bbmcmc389apk3";};
+bxjaprnind-59641={run="16rdpkqlsx301zvrr2nyykpjqf0wj1xhqqk72a5jajyjpcqsvki4";doc="1x3wh73nga2l8f7l24pyabpz0b8g2k6hkszwl5dijrppicl875ym";};
+bxjatoucs-52509={run="19n1wr7i1mfrabmrsgnmvk5wgdqhbc9lfpz3s5qhnsqsz69rzi00";doc="0icd5zj0cabkvwjgncsjmqwx79d2rqsm7ddp54ahczfl6mfg7fwj";};
+bxjscls-67657={run="1gwrylkxz9h0szcy4jvsmyyix6640ncqiflsm9z82nxvm0zglasv";doc="1qy0as1kff7vlwq2vq9zl3sb8wy590ryfh4ax040d52wvz7x3619";source="0gpkk2h4ak6ivdjfjdjq52qj6vn5n49c292i3icx43r0gifhwns0";};
+bxnewfont-44173={run="0mc8akfajlyl6vfh620h8rcyfv02gdg4ycqx18lhb9vfivi3j4py";doc="18na6f8nqlagfszk9miy5bbx2bylgspck3pgglbkqb9cgkdf4qq7";};
+bxorigcapt-64072={run="12bc2pv884wi9z97ih1sm5r8x67vrlqhd19f6m1naz9rs7jcdxxv";doc="13gp6632pn7kvl12rpbz99n5imcsnwf43xx4iq9wq6xj4qnlf7cw";};
+bxpapersize-63174={run="01gv55dv9676m7rkfrmz31aql5xb69drl1wvwh7k1s3xrywik35j";doc="1xsg1nvr7i1smrg94110pz4my0vvi1imqkhksc9daki52iv1jyx2";};
+bxpdfver-63185={run="1hhl848f4m77abkwa3wz7zm3slnp2k9qbmaj2sfdr0hvyx05jwpl";doc="16919nxavpplbzwxl10rsbhhqcx7pdydcmf1v5z7hmkmw29a1d4v";};
+bxtexlogo-63231={run="1g8iy5a2cnfsxggzl49vbjw2fzk16jcy17vx10qp8qdzdzw29gs3";doc="19zq1rssw0sin3gz6a689g2khfc6rxhyckqxg0k0kj3gr32058kd";};
+bxwareki-67594={run="1ax779x1zf3b68a46pa3d65wdna3c3vhbz0r8kj8kavak044p1qv";doc="09q919sqr675q3iklh3yid7z6hn0d6pvk2a2zchi8rd3xdqpv06y";};
+byo-twemojis-58917={run="1c43vgcnkdvag1wdhivl49qm3c9pf29w89xgy0m02jrxryrjy6i5";doc="0bva1q3zxzkkrz2cc2zrin955p4r251hlb0w0gyfm156dss0iqrb";source="1msy8ja579nysqd0rmbw1xsh6hksm44ddi5q3x0i5p68k2pk1i8x";};
+byrne-61943={run="1bzlyhysyiwfxgjzdsz0ax8mkdvf3ln9fnwb33px92p167s1mdx1";doc="1wn4gqvaym5gjdnxa1pjbvnk77xzk6dzvpjil59nagibp0ap48pg";};
+bytefield-68366={run="0ygrxp4il760rrm6zakij3h6v6a61bgwjjbsy2nd816yv5a325ga";doc="0gdz5scdzh64p4pbw8f2vmwvs7hl012d9m3k492718shcfzs1y79";source="034azk9zmy6zpwi7a5jchwnigg2vzcbh998a1izgb79fdlw5hpyb";};
+c-pascal-18337={run="1gbijcvhkfc9jhdjs07l1mz4p8lchrhnrl1yj2gmzkskp4v2pkbw";doc="17ddnb3k2q279xrrsy3y5n8qyk7r8hlrw8vd446a11qiwypjvxy7";};
+c90-60830={run="0h4y0ydp0vx0hk5s46lj4j0vji6yslc0gn02rmpbpgs6ic34cm50";doc="0bwbqi9kg39rm63vzngrswsg7vnibrfxlz8fhsqb947j20mrj6l5";source="1pif2g8ihgxf3qznhhc52gi9bih5ai8a986c6l1zxlmgrh678wxh";};
+cabin-68373={run="0wlhsfhi6f5wvnvi0k0h9j8xiqy5dp7fxks2ipw2ap9yv3r34pfr";doc="0h57p06mh7drx3klgkgj6w6k7x4kc8h2yi0sya1ygi94kwp5x1lr";};
+cachepic-26313={run="1j93lljbpwca363sjk5qmljrfq4f671kg4qrnfyv9zqcxcpyfmmg";doc="00j7j75zq3wa6z1liy0y6wzxjv96sq5r4dh7kp9f9icmxzs0x8xy";};
+cahierprof-68148={run="15cimc5inid5zyb221k75dc42gdkvzdvxzh2n6wdw0gj12m9y2di";doc="0qd8mlngn6p5pzwkhkfhk8p26d9dgac2mn2har0pwvkrppg7vsj0";};
+caladea-64549={run="1xvpf4ly47vn8askincn7wl8k5skhn5ir2wj1nba6mgf84z106v9";doc="13j961b3q42vpa7xlyzlsrl6f7ndnlw1m1zqi39j5qsb7nhpy7cw";};
+calcage-27725={run="18rp330i29cw8pkfv4gzlr4lz5rlcvc4k0l8mvsvs0xa767fd3h3";doc="01xp6i814bnzgbcghdpyzb9f0zx3fwmqd3p97rk4qlf3g378l8y8";source="05lcg7mix6z6cw85bpzcqgxlgb1vzb3irhljlfcvq08lrdfjy71x";};
+calcfrac-68684={run="1rvsgszxg0dj2j3p58m26rqwl2qfinkvfiw54nq6zzzqxqqi03l0";doc="0r4in3rrzhs001bgck0y0h484ziqs90026fmyxnnfv9dhcxdp11c";};
+calctab-15878={run="0rs028w20fcg5jmmnhwhvasb701j763pk4bwv09lj3g78769k25l";doc="07fxrnpnzn23lb3lrlvil6a8624vcvam1lq6sf8nrgs52fzl2grh";};
+calculation-35973={run="0v7f5qx319zrwhy85lvk354a7x2vcainiq90y1jkm5cscs23xqjx";doc="1bk9yqx607vp65ifdawaldcsxm065hmyrgzwyy90wkn4kmyq1snq";source="1y5a2n2asfhwm8jylfg5zm5dy4v5s8gjl5ndizwk1ywwl0am2dxx";};
+calculator-64424={run="0ha62j2mdg6f0h9rc03xaniq3kgfccihwjh8lbf6r6v609kqncwd";doc="0ilnsnlzxh8zd51h7lj0rr6c4fz9yb8dff87yjnm73ndkvia0ky7";source="1k5vbywm427cx1xvvh2fv2g79nikspwrp7sk9qcvaf69g8acs93h";};
+calligra-15878={run="0x3wvp6crh6rg2sxzwil3jr13h73sjgbf7ar4y35na5ksgz1z2j7";doc="0pp4i750ga99x72kzy818062jvldylyfanjaf8nxgkglbyiw3l7r";};
+calligra-type1-24302={run="0liaz2jv1ad3xvmaxdp3vd2b3wvyg0wm1jlrrhxljzazsxzs5d3p";doc="085bcvvz7269v68r8a153cgwgs18bgpqrd40k5xy7k7f5wy7d0c5";};
+callouts-44899={run="19khsdal0siv0vvj56bxgkrj7bk1yyd3lw8iz6zijchp0by6gbbr";doc="18zy2yzjlgn9g2wzlc9i52x8g3dv32hvbybjkm9fmklsgnw8fang";};
+calrsfs-17125={run="12b13dhwdxr5dc37l7imlhn4sparyrnz0d3vagjxlsiinm7hakf9";doc="1295qb7s41y2abs2ip87ipcvq15pzza0bwvj6pwpwxkxq5yrr83q";};
+cals-43003={run="03100nskddcxi7z48iwm7vnwlrdkxj7xh8wgbb8bx3vfcrz731jr";doc="08y10p0i7y0jndknkwrwdws6ja78sz1qf8vxvhhhcpivxc7a5gl5";source="19sh899dbk4z728h9v72xrf54cij8jhnb4k4a035xfb7ijc0jcrq";};
+calxxxx-yyyy-69266={run="0hv01h4j0jc34z42x0j13bd80vkvaqdyp59jds1jf0yv2mshiwpy";doc="037nh1j9q4gspazcmlagqmxjfi45xbmh0pifbpmv9iflyvnzj6hp";};
+cancel-32508={run="18bkqkdf888nd6j187kd39g0vgfhfh118bky8r5wwzy2aq843061";doc="1x6dhr2xyx66i8qwk98li3vp40rlalfrf5lk8ah4gq03ndhmygfk";};
+canoniclayout-64889={run="0x9r0xjdv3vfbm68w0cydnjgfiaydlyg71cil2l3rf1p4awk1kkp";doc="03vn4k8yp4l195k2716a110b8lad3zympsphp3cp8xx0cbfb86ab";source="134arh3nmd39zr1b0ybmz3y0jfyvwzwcrzd59iik6bzbp601nk8k";};
+cantarell-54512={run="1p5idl8vqp84g7vw3q6ybwnddv8q7a0ijy6vny8jfd6583bjx6pb";doc="1r6mlr4qq61cclliz4h86bc86zkb5kr5r9bixwnj88pbvbalayff";};
+capt-of-29803={run="1b89cznanql6vmcn1jyr1nqkva40i61lsgjswsqjgdqnlbmvsm43";doc="091qchrgwikiissyrbb5i14634130vn08rkj2v7cnqzsb9c44f2k";source="0dlgrkl1vcvf8qck0pn20ic7cmsvxqkmvgp04f9hn3dmk0yrzc3r";};
+captcont-15878={run="00zp59ypp753b17wcn9212gxk0w11g2a7rn9gi2mn4k5c3djc10w";doc="02n200ziiq4lbfa3mc8yk7icayl7l5ci3kpl8mlkdyg9r0a14j1d";source="04wilkx7vd5bn05cww36lywb10xq6b2nbhlxnjq5xbmdrdf9ckyv";};
+captdef-17353={run="0gjbxdn70qskb3xl6gmags3gjq4pks44k8c48lxljx3avpvxnfp5";doc="1wl56hjc0204d6xrpvypgra7md18db4bz7657m49893m2pmc2x7x";};
+caption-68425={run="0d7z8vb5d26n6n8yan37820qsq46capr41vasvi4pcb2g2smkzlm";doc="1zkscfajy1biv61vcgh7gka33dm7z6zqf0ypps49kpgx4q01ppwg";source="1k8llr5bm3pi7bd6224a0nzc7d6d63wrwabm8wygdxj2slcixw5p";};
+carbohydrates-39000={run="08fsn3xp2bmkkhhqq0l8808j92vibkc27mi8frhzb7g253fnmbwc";doc="1ygfgsik471prmbnv7cwak72w8daj7zgvdw50hjn4c6mqsi6g3xa";};
+carlisle-59577={run="149m5a5mb0c2r3rk87yvsiw50mp3armc0mw3jfrca8p82cyjwkaj";doc="04l137nyh94qrli4qzsan6i1ag4j5j1s0qp8mb1m8a8aj0bw0i7i";source="1b1ikyj585mpg7wkijlb2ppai4shcz6xad9ks52lnkdjd0h7r9lm";};
+carlito-64624={run="1xcq8y0psxyh2dw9wqybb67q9ihqp2p0klf98rni24x0xn7c2l8q";doc="0sv5kmnkvpj60xnrldkp3gnhhslk9ksf6qpnzj12v00gcyxfs7gi";};
+carolmin-ps-15878={run="1wq22k55696jbawhlcqxj839vx1kla2xsik32pv5i2371dsn7211";doc="1kai31i0pvrvp44y06hl3mj20hwjzj2mav6zs36afz81b491aw79";};
+cartonaugh-59938={run="1s10sc37kg3m9hvjcicgc9i3wkk40wxi4ncswspn9a599kkhf829";doc="1y287gshxvdy4chshpwa328gfh36i3cs1g0giwga12afmkaif63h";source="16clmcddxp9a7ybvgpx7w6mf45lcqq1vzjb4r4ndggbpwawkhvlh";};
+cascade-65757={run="13xf7135hjf363d9n1gx41m7awbr62pp6y1j77qmc7x6xi7vg85g";doc="0d2fkdrrbh5lj6jmvixgj7v4g3adg6s6rrrj8wxilr65vd1d8p6k";source="1vh912sp0ngr4mq391m8cdggxwpjdm42d2qwv5m4mlqhsadald7w";};
+cascadia-code-68485={run="1gdy5rx4dk2722xhnl1f8p0y5xhvpscfaycks217g1j7k4yyk41p";doc="0yadwjksqxia4k6f8w0ng7rxzp1lggqxk8q6n1gmnwqqph08y4i7";};
+cascadilla-25144={run="013x6his54n8q3qp2xx12c0s2fbjca1ffmcb1kjy0yr0qy0y698z";doc="1l8xpfmdp2sc54qxx0ywh7im342nd3kbmgkx2pfzwmqz3xhpybfd";};
+cases-54682={run="15f3mngrmvd0h6yy3jiifyzfrgi014g4dsqz9c5g1mw65yyssl8s";doc="1vq4x3lc7zrxsh3b7dy6w53aikx5vfzx26fi288b44g99f3h37jy";};
+casyl-15878={run="1cmz40n2h7nckjw9x8wjrj0kkig4xhjslqjachsdgidd151m65c8";doc="1y1gc2a1fw8fmrs4milnqvn0i099khhjq8pmsycj4bxpbsbpwqva";};
+catchfile-53084={run="0dx2smqpw2jmzbsfl1g1zpa790qaxas4cz1xb5r905pvpca4q9h7";doc="1xhzw6ahzn8fgv2rxn30xszzpdjqgr97njvx7fz9bs9z7xr8f3si";source="1gbcl7bfr1zdvn69zzhsbfa808qdfq10c11qc3qgihpzz8s99fr9";};
+catchfilebetweentags-21476={run="0xvk581zl6wk04amq4q6s4mhpb4d3f239ihk16m9fglabhq34xwx";doc="1bd9dgjp2rvsv6mn40m7i2s5s84wj7hbk8rka2a5djb00fv4fgzq";source="0lvxhx6id5ka9r3zp8h0xgrs05jax4r5rcyqcs1f77zfc2s6s8iy";};
+catcodes-38859={run="0sqwy110bqmy1npqqp6m7x4m632zmg4n52snrbzzz87jp59k6kwm";doc="19drsfj7f4lfmjhpmivyyzaps3yhxsy5xppgbm67vk4368sgsmpg";source="1c9269586s85v3swr33s28wb74xxaxy3mzp4153by2y5hpj250xs";};
+catechis-59998={run="0i0bhpal6yjhama3l9q9w8ljviiljqjcxixlcx39h6qq2dh5a4sx";doc="1c11g2nbf5nk7pfmg3dqyidm83xwbcqnshpwhbbnz3vi8lb2ycw1";source="1vq6nbis9cgrsch7w0yfm1s7y8ymydhbhzvllpx2ml6qks6vhy7i";};
+catoptions-68982={run="1zixqpgln7yqpdg37l4dilbqsf86bbl64z0rqg9mjcs150vp0vcp";doc="04k68w710rvkx7zp10w9a1imwxv0qvanj1x3kjbyk0d7jvh3w20f";};
+causets-66359={run="1m2gjhs1v7kaagqqzppdf9frhlfshy74j39n8r4phhpxjpjflar1";doc="0zw9imm84dph6dnajj8ap50kr5h18j6sd12xfd1d2asb35h5lvac";};
+cbcoptic-16666={run="0y4y76b69ila35ak85wkakk6w1idjy92jhbnj01i82xpjnq9qrss";doc="08c3v6rppp3qfmg4nz0abwn2ka60wc6zrdx6qh1b591xgfwcm4jr";};
+cbfonts-54080={run="06641hiw3yahh28yq3bnz3dc6d25als1d8kbjh1ldab55gb3vz6i";doc="1vlhqfx3y85ym7xaqzr7bxkzm3am8806s6bkp50mv58r914xmlz3";};
+cbfonts-fd-54080={run="0gaw2v82im1k7addx320xhwwq28mcm2xkz4z90pw09r848s9fsyx";doc="1arnjpk1n9mkva1f9gsh5834kjb7m9rd49kgn3jf6acmdac67rv7";source="056b2x1fv2gvy7ldi9v1kgsla7jzhvl3lsd5wl1v0sb2rqr2jngv";};
+cc-pl-58602={run="0cvyi72p74qx82qqw6cwn6kdrrsfw83ngwwkjrgywqr08q65v1an";doc="07s3lnrl1n7pjbm81bqg6n6q6lnv5r04df0xjc6v6dqbdq08s51d";};
+ccaption-23443={run="06xbcnwyh6s417dc5kdf9h2qhi557fp0w5ikjdwkzsdq8q3ybd00";doc="1319qx3dz57f9hs21lxicwr8ql8131yk97zdps9rpnr5c6b0pgdy";source="0is0wzbqijcyi703k3va7icjxmf3v2rmrlhdlbhs1wzfyz1cmd2h";};
+ccfonts-61431={run="1rwzpbv0vaf4p77k4hf9ac14l9sw8hsvvqx5diq9dirsfq2js0rb";doc="1pbc945s3xjhccjm83y721xx1zrpqjbrirbf469anq9r892g33av";source="0avnik79dw3p1wvrg5rlqcaxr3w06mr5jvyms54ha18l2d63yw7q";};
+ccicons-54512={run="0xqq8dk5czaazzjlf601fs4d2z81yn02ama07js7wrxb21vvjz2r";doc="15hlqk9rir37m45ajfwfpw2w2ngsc6nfyh8g76vmbc6j48zmc4mg";source="091ayhgprp5w5g59c0zfy51lhas4gf3spya77k9fbr9gxp3phl4c";};
+cclicenses-15878={run="1rsj1gknw2ib42h1jn5zdhwv1n5hg2fdny08wpkwyyn14r5n52r7";doc="0vdr7nw2w4mqh3hiinywmrcszav7b0nc6jgrky1l3pgja9h78cj7";source="090smmkqiaam8k5jfk30xk6jrzdz6y75bcawm94x5l4sc8mqihir";};
+ccool-60600={run="1snafp7x6mvnmnkc2k2sp8kkj3lxm13x1nkwvyvbmylrh7zvjw6i";doc="11lkm79n0d713dmg4l4fwb0vk8k3pyf9icdyvbaj2v7zy6w028gg";source="1iy0jm88hvhprn70b9cg5bbh21z9mziyqcil6arq67r9a389npx8";};
+cd-34452={run="1h6x7mm7bvvd9za8vsr0dnbll2m404hbp7g3bwh6z5dr15y0hw8q";doc="1ws4qpknk8zz7cm0mfi9g9viy1f6r14y8hfi7dw2fl1lzi56j4d9";source="00mi6aazb16bq9b68n0jh2vs9n5kv7mizgp61n7r9mpk90hcaws8";};
+cd-cover-17121={run="1x1z64h0473bf4dvyiraym65h15n0jkqbc24kr0xw4i0fk0q4l2i";doc="0lsxmkaldpc89sm9pq4zi8j3fd2aszglx06mqn3y81qjil9h7xvp";source="1060k65sxs323zkjv8pvx6b98v6bq3h51r84dmn960v9xaw8pp3y";};
+cdcmd-60742={run="1vs7lxaz2pnc93926245p6sylv6z38a10flrsfzp317qpkvvrqyb";doc="17xflbkibs98pdgs79yxwasr2xfwh1i54y5b53314n9nsr0w539d";source="10c1rjy2y5f772qn69lmx9wknzj0mydj80jywklckp4g4xif2hqz";};
+cdpbundl-61719={run="1f3375jl826gm4arxsv0saigl8230d35dmkzvqyg2kldz5ig24s0";doc="1yhc82i1n44fp375vqyzrq47qdzwxc3x3zg10a791s4p25frzcn8";source="14aw67ah211c1simgsz0i3j6jxmnsj4arjfy5g20i05l892sb2xw";};
+cell-42428={run="1y2bxxx73r1h9rhsyar81r4s9nhgqjlvs5rwnkpk148rwwar7l56";doc="1ri21dk1wgfaay1hblmn8akmq8ccxpbp5lrfnprkqqrvkxnmaylg";};
+cellprops-67201={run="05gr1jgr9m7yfrl1d8pgnh0z8xm7rk8522vl5wck2s2slmk8schy";doc="15f1mbagh41qvzkqf1bdzlvchfn4dibsa2qj7zwaqszc6smscl1c";source="0yb9gjglaqfivifxi6n1al6w1nm0ah3r4d9y8bc7xnfxikhx3sym";};
+cellspace-61501={run="0s0f11xrs670zhynqq43sbrx9b290jph8r6fp6s7damrp9wnz9fx";doc="14znyc212pydxgnyzqwxd6vlvd72b64qjllmsjpcsxqi0f7am0ak";};
+celtic-39797={run="1vg75zj6p9bhp9qg4c7nvgncs7iiki5jizx27ld26yni9m2cd0sb";doc="1llinw15fnpjshks9yzlmbi04pkn6s87jfwgpnh5vb9hfws1ira5";source="1w3wm5ci6kzpnvlaxbpqndclhxlbs4xiwq90iig98wf97b85lfi9";};
+censor-67293={run="0nili9g4i8dly7gri3b1k4z1n5gnlrkj1dz4si3gf2b6gpll993i";doc="1kzi4glg1gpwx37ck2gys2dz072n43af5awa8x1a2036hpz6s5az";};
+centeredline-64672={run="1xrh8r00wrr29wiijpal0n6k48zzl5493zbfzfgwq115lxsvhp37";doc="07jvl42qmwlm2qv895f66cin58xzin21czdd0xpa13lgmpsccv2f";};
+centerlastline-56644={run="0wc1pwppiwycm5w3hp5ysnv3wgsw9s8m9p9ra3xbmlkqxd6zjwnz";doc="0f1x3wzxvgjxsgqparyjq4x32zbqjm88v5xdxm5qkiasai68r7q3";source="0ngxhlawj8igq7d2mhijpfcybfr6lv1jl82vs9kk7j8xrdf2nyr2";};
+cesenaexam-44960={run="15n0abwviaz213q00nv6faxc67fyqz44mvp28zcyysrhmrcxw159";doc="0vqxkqgyg79kzfcxh40knxh5a3d2j6q3f778k2npfz70d2kaizj9";source="069n1sk2g5n9cqq9rchk9w5y40igh620a1j5miscgykcczv2y0jw";};
+cfr-initials-61719={run="1wf5lcqh3jysn0fbzpmh429gmicqhh1kvz26jfl37f1z53g07shs";doc="1akblgsix6a59as4z5z6hhsncnsfxqh78s8gw0m3xqv6wrbv417k";};
+cfr-lm-36195={run="1inzb3q94b42n1g3hchqld687qhs33m2zxvxvgyciwqnwfn3h968";doc="1ska7y1xg6qq86kccplwxjd70bdbiw492d9y9n17d7hryg2nxw66";source="10layppddcanvyzjbgn6grgba9ff47kn7fqdxmwfkwnpw0qlw5k4";};
+changebar-69367={run="0q3z0187y2fynbp9zkhvfvcqrxyn8l03xrj4wm6zrzkz70yq0z3h";doc="0yvkcx0gws3m0jq15qnqbxm169f36qfr2wpbl4hp963z1az2dqnq";source="1zdljd9j7xdly3wlaqhic8v1d2j3mr7mz10vp03navlysd6b0ycw";};
+changelayout-16094={run="08bapli8zvv8p15bv3sj7l646fagzbj44dbq81apb8lhqanvlf0i";doc="1s304gpjg30kpygvg4r8r2j4bk9fg8vlb331lypd3dfd6slphm60";};
+changelog-65861={run="0zd7i9kh2rybh0d3zv7pxkjk3iddm03vkizpdxyy3sjblqa2kz3g";doc="1m65zxnlazb9jdqp4y0n4lzj6mcyhv4ng7nfg63zj7zpsx0kcvgv";};
+changepage-15878={run="070rd3drhaaw6z386v9z5rs7dmf15ci05lmlxsaay3s1ry1425bc";doc="1149csn0iphkxj7p1bhkza8v6xj39k49rylp84d1ilckf1q4imng";source="1slacsdfrjyy7hmhj4ssjkh0ln846b2ds11g446hmdvckyvz4363";};
+changes-67201={run="1cqdis0b9k20nvfc912xm99h6l36jzssszqrgcshl6m2kd722if1";doc="1r03j3g11nh23misg9prjrbl3jvf45761jzbxjjn4pajynfdpm63";source="1dzmdnwh8bbg3ysfxqq9x9nw44bz55f4gl79nn2z2c80f99sqvx1";};
+chappg-15878={run="1lx2yw7xyvbhvmcaj5qk2bjfmgyr4dn7q0v8q3xfkrnbzbzmcajm";doc="1c9qkc2m4rcixnif8y1zvcc0mzwjhzsbrbmy1cqv598cysc2yaig";source="0fzy53whj61n52k1ashphabpa076244dqjy1v7icrb27gd1y86mg";};
+chapterfolder-15878={run="1lphi7j367ga43j95vlph7ywzj93lppnn4n83xhbvwp56azryqm1";doc="1ns01x1y3dq3r37q783ha7xsnlg50vfw5knh2saw1rv40wf9vf1j";source="0zc9fa6xgs0s6g3rfzq3p32dlr3ay4k6y443z4zslkpmnv0hprjc";};
+charissil-64998={run="05ysp0l1v2azbr1gjjkh8mh1qmd7rq2znns60p2ic7dsfvfr9kpp";doc="14pq31xhrwa9v57dlwayysx16sw1kabwh4m9wjlpq9xdgbq9d38y";};
+charter-15878={run="1z9145ri2g732bs4fb8i74gc0ymak33k7sclahln2bhdpxi286fm";doc="0gm9pwanxvzv0zmxq6pf54ygxaxvg56kh1ym6f5ij9akwvhf6nwb";};
+chbibref-17120={run="01gyfwsfrjy7fs160zxvzhr517wwbsgh381hk626kvf87wssz2nv";doc="0h5vlzfw5lfg7chqfmbisqydmjn513rjrvw8pax4xlm75c0p6drv";};
+cheatsheet-45069={run="1cqv885i4crrramly68wamd9fcx0lj96vzys39aplars3pjv0glz";doc="1ykadvnpwkyj701xwfpnlnqr313d33r0yigmsscshgr1dd52jjf0";source="01hd52i399c9nsk68ymr8hmllxq1vl6v01fvs1gpm90pgvgdc9gy";};
+checkcites-67201={run="137biq2rvvws5k7l5knzzhkgr1bnw562bkkps8xv2d57fnm2m86v";doc="0zi9ffn3f0kzf3iqf2940f9zvmz2s15pgka3wngy9bzw8f0snxbg";};
+checkend-51475={run="1g4kx83kkpdd4fbd70b29hv82gbf19avd04b3bcxy8d0r7zyyyad";doc="1hzllxf7pnp7kg2623i5yhl2xq6phifc4jc57f2zfgfvvw0hqihy";};
+checklistings-38300={run="0hs740rpar4jckxc2p8wwd8x39v8bghgc2jjrbca9m5zbr0prvpg";doc="1riyj6x57jb28sjswnnfyqf80jnkvyr2cvckav29j9ni8l970qp5";source="1ghb0pv2zmznyg12zqgljwd2pc5lbajgdnzr6zf2rrmvlrsgr38w";};
+chem-journal-15878={run="01s4sbmc4g96cmnbhx9a6bqjskkrr6saq91cly2pfy5gr256vmnq";};
+chemarrow-17146={run="0vy1y1f8czyp36ssicmn1w2px76x47afrfqjfn024jmbs54fwfxq";doc="059c8r7vhs6765h0x0ycqhkd65nxb6sqq7xhi7y8jyb7i6q3rbbw";source="1ds3yx6mbwjvhzj6ximgglgccndqjbimprf7iszhkz3w5vxq6qz6";};
+chembst-15878={run="1dg8dasw0r96rnv4pnmm2k96rxmsdfhvkbxc5m358x3i5i4pcpm0";doc="1zmqlm8vr2f1mga0b33wikv1wn9lx3lpx4y7pjhgdqk84lhfqyh2";source="11qxmd7b1h7fwam9sclazzjhmzf5fiw5ykw6ry553xm1jp7vhvhb";};
+chemcompounds-15878={run="05rqpsyf12yrhpnzip0ywzflrvsjfdqhpi74iwpwb98d3q82ckai";doc="11264rxfhbf36jfkqdfyl2dyqal86bhjbm1zsy9ps8w4fsgdw94a";source="044gavw3i9xsa073bwpg11xy75dip172ih6h2p1mbpp8i7bzsrg0";};
+chemcono-17119={run="08cch2gr35wclm1l0j05lfbjskqw43jzz3aj4wi1dhpm31b855q4";doc="1kcgfx2clh4x59h4scw5mg035wqr2cp5kidn7f6p2aaf5607xid5";};
+chemexec-21632={run="0yj6sygdzs247fpajjl8gk3c6yhk52npbjahgngchqmblhmhlkc0";doc="0pqksv69yk7vf622x2p2ah735p0a93agfnfyg8hm2jadwjmhzikj";};
+chemfig-69227={run="06jp9cd9x404pz3fss77vhal0d3rlnwx1q6bnz6l5zcr7dg3n19q";doc="0g85rqfahdvb6xp56qgh8b9la2xjhsi1cv3q85dabxgbsqwq4m0i";};
+chemformula-61719={run="0q0vrz2agxw3g7cy5clya5hfsdv8s8qf18szhway3inzg5mfr895";doc="0h1nbyhj463zxj4d15cx88h9pwb2wxpq3r9dsbzdi63fb1mnr4bz";};
+chemgreek-53437={run="0di3w4yqnjs49im28g2a2qk31d6cqhrbwpq1jcxykk8am7g2sn1c";doc="065mwb7ah9h4qwqp36n0sdlkjv435bwrljz3yzsgym7a4xqvhfwh";};
+chemmacros-62655={run="1phw4kgp7h5mcrr66vb4kazzi3kw6abmxqhybn3amd4ishgbzd8q";doc="1rz1a7nc2c0cf78axch98zsaxah84hzr7h8rpvz3zz1vfa4bmk5s";};
+chemnum-57490={run="05z6i3cva4cq45z280ls3y5hrqk9m3a1v5yq51rdj1ilk3yh1a4g";doc="0g0q6a845xgpfwkhi31dg6w2rrza8cgxj925rm5m6mg026rd7v03";};
+chemobabel-64778={run="1s5pjj815ppa2glr9k7fzmmfcjpkz7a8fha66rfwkzf4rad3474g";doc="1p3a14q4qjpn1sr4j00x7x5pfp00h58riknbjjw0mcld0a1fiaki";source="1z904ymdpdynx4gplryxlqhras8l6zddfvrvh8iyiraydb8z470q";};
+chemplants-60606={run="1q7pvkkr4i4a1v8519a2ysrhya7zgri84is4c4hljqiqqv8sx4ir";doc="14gpajgpclgs3xzxd9mmyi1y3ciyxngqvxyzn651yn9i08h91f9w";};
+chemschemex-46723={run="1xs0vmk03pmlw7hcnm0llgq7gpg1wlack2k3cry0fnw8jqi6ls8r";doc="1gz7sdykvl3s6c5l1vhx2zyjljqrcs2h02s15nly8kjfcmvcncq0";source="0wkrpfipgl4yx3d5a5pvfrsxbp3dh9wwm0i34z2y6cra8xd4m58v";};
+chemsec-46972={run="0rl9aqh35pr0pr82vaq605ii09cxk73mjf3qs1dwcb51hjz51f35";doc="1fh5fplxlkzcly15kwzji7ym1ri8q33rs9k6wpbszyr2przn52sy";source="053j5riyl07jxzm2l44ns7wyck2y0680p9p73054szd859q86v8h";};
+chemstyle-31096={run="0a0sd2sv9g68alicfvm28b13kdipyrlck9ipdb3ybjjsi8fn99fg";doc="0gdvvkfjbzf0kdbl5f4j30cvddfbwiashz520g7kpkv460swvz0x";source="06ws8xqy1y609hzfc90l9zn2i1h3a6yq2hxcg1bfsbsqagh11rnz";};
+cherokee-21046={run="1h8q9ysfnwdc29kfc6yj4545xk8cyncl9ns5a465kh6li01zw5i0";doc="0ijq61im5wsv64qibwcllc2mi69d72915c5qjk0dcnsn7k823si5";};
+chess-20582={run="0r1danvrc979bbpcka5fdbnmxwiv54inxyd4rcsjkz6z03srbwvg";doc="0h6zcs8g6gg4fq0sp2s6gihbyrs9kkvrbqr6pdpb7j3fkb2jr9m2";};
+chess-problem-diagrams-63708={run="1hlbyxnx8cpsxv4zy9rb3f9z5c84szf1szxr6qm312p4vr7r0mjx";doc="148l2hjlifq04wc0cn04cx819gfi2zjmw8k03i98k6y1rbgi8bkm";source="0ma0nqvgkn7a9hvzqv1i03m2m02b1gdhy534jdsa6l7mqlbzw70x";};
+chessboard-56833={run="119dsa2mjv5kjw15349bjjz2xacnd82szwdb4m1hjqb3pkc8053c";doc="0gny7vq5cm7ibvw8fjnpbysqs81bf2s8nvjhs56qq3j7yg7ljapk";source="05wcy7c9arj8w9zsflr3byy31p0nl8g6i78bbkvw38rl9azpj20l";};
+chessfss-19440={run="1bi0lzxr3lr8nbrxj8189ycadm16l66isgslqjh1mfqyggz65gkz";doc="1xrdlw5z6dal81pdkhx8lwg18fzyfy1v4agq93bw09i94045cvih";source="0ryd536x30rv71pqvji805f9fm8ix6g6b5jravshrrksk9q8qw9j";};
+chet-45081={run="1ngh07j5kjp5v1pmymckqnj9knjadqzs8ia4h4vdyxp4zprgyqv3";doc="0l628j4b4m7a5p3vvzz8rwc236wqqs7vrf698gfj8gjdbbv0c9cz";};
+chextras-27118={run="0jb9dl29m57hby3hi2cfwks99xhrnf74d3fpan64852gvk0shb4j";doc="1ijm0ymdd4hh8sh4m5kxmny9nfn704prawr1c8x7445k9j1m2d82";source="0kkbsx2rqakaxq00nkvws7lpilzysxkmsijfxp1vyh73fz9cb8jk";};
+chhaya-61719={run="13x83hzrqriwcsc1q1yl93jpmgy83fq44jq890q2vfqjl22afmbm";doc="032qz2d0zflyj8aslhpq4n7mzr7rpl8kpdzrp9ahl3dxqzcrnwj5";source="0ld5zwwzznvc8a8n9l01i0236a9zw9n5jbiinxkhf8fk0gis1kb2";};
+chicago-15878={run="0mwrphf2g7v5yc0qij76dkzalgm3fhcm8zs7akgaypyk98cvxw8k";};
+chicago-annote-15878={run="1fz95s0d48qb1pzmwy7cdnccvadwsqj3pyvx02bkip5l0mg54kgg";doc="1lwrlb5axxqzrj1azyw6bsy9f3lq2n5acwnzmx8z7aw5sj19ls07";};
+chicagoa-52567={run="1za4fqlpirbr3qs894abnlwmrhsqbahniyyimy1dxal0cp61cfil";};
+chickenize-57325={run="08qxlyxghdzsbrqk9zhj6wr2ffbzd3nq7299z3q7s39z9azrr1z7";doc="1k4pqd8paq4zqygws1ihpsklxrmsxlqvi3y60zvaghq0r3iiqqqs";source="1j4sgh23sai4qzhpxibz2zl4a82nfiq7asgcz42ab5qdlz5vnh8n";};
+chifoot-57312={run="05p6x3l0vpzgxqw4pkl5b8hhkfg4jqv83435z8db140gsk2sz2p0";doc="02x1z9dbnzvbvwfyqk8axkqhzchd1dfjdqsf4xkajxvjc13dhcwy";};
+childdoc-49543={run="0vvf825w9081qcibwgyjdm57rs6083axqnr3lz9g8hd5s1h26s78";doc="0hh51g80vlr0malbfqbfb0m5nln84bvnqa2d847khncxh0azlr2f";source="1gaisc49xfpk37nrnm33wazihv61b61yhi40wwyblmhvwimmx6qy";};
+chinese-jfm-57758={run="0lgpg27qnc59i1lkbis5jr3z4fy2cl86x1dm320q5kfjm6z06vla";doc="0bpl9vkjvn3bq1dmrgm4f0kgmbvxrxxhd1alfd4yw30xib24aq31";};
+chinesechess-63276={run="09ylm4dnn4ag7yd0ck66wbibm8m782fb4bmfmf34wyrnif66sbzv";doc="0m1q0bw1a4kf2jdm8kcp3xg0y448d407awwaf5r0lazycy64ycqk";};
+chivo-65029={run="0vb828v2pi72zxxpjqcnij3a9900kdshp6xf1aah4s62ws82razw";doc="127l1ll89b61yczjkm36jly09y72xli8lybfjf8fq5pm621hzsj3";source="1b9gval665vsjghj9yy0lb15v4h0ysjc3l47jln55qxfd56vxiir";};
+chkfloat-27473={run="1bv0gfqa1bhrwq7vmjn0ih49lzb5g3sxv1fdnp25lxp5fxck31k5";doc="02s4m1ngjcw8w0ywyqislxs6cb5vj5zgczg3dnfpqsypvxg2xr12";};
+chklref-52649={run="1045jsyhp39js54xmyr1wxh7qp3z5hzasyqi33nvrc4g7rb9126j";doc="0pmgdkdn930lzyn8j3diwwam8c7ikm4fga3fh1vpigqddykj7hqy";};
+chktex-64797={run="0ij96wg5j3grphp71f3casa8nlkfia7hz34njvi007pzy00kgvr8";doc="0ln3in6f2j0bbk1n2lha7s6mv31cqjchbg1ck0cq10aabhvx9fz9";};
+chletter-20060={run="01gvs00kjr313a09y65hif15vqvxidi6ri11ypsbnsc0man6dhwd";doc="0mc8nlph24bh90l4x5bfc9dyldd4jjn46y08xgf194482dz2q8gy";source="03s40qmlbnlslcv8na5vwz67fad1chagal1pjq6lk0glhn5211dq";};
+chngcntr-47577={run="1a61sdmfbbryqd2gj87bm4qsva0xjmf9mkxhxnjixpqmr4gixq8r";doc="1rrkyvwbgfxxrnsdjybjqxqg15xyzr4s7qydx1ky2k7d2yxhiy41";};
+chordbars-49569={run="0n7ycv6wkkd4nr7d6w55375c0ym1pinqjyxx92dwllkmi5w2wr1w";doc="1hg3kzyyw3ra6qqf9fh2rvv5rn2jaglzjvf10hwkv84a21hlfvq9";};
+chordbox-51000={run="09sghgyq6mv3w0m1vlcf82vjbdkb00gpiqr6iwlimpqjrv09bp3l";doc="1fykwcz8d0ja7f5px60qf7pfzfcw447mrfpbq8awymr1ilwgmz05";};
+chronology-67973={run="0jbczd5y58a6bjlk812ncb1ckcsq1d7j8ghmivx4pr5pfcx5lsqk";doc="0g5r3by58srdydm0gps4ybsmihayir3qf2lra569ywgxy06hqpn4";};
+chronosys-26700={run="0ii3r31dii1252bg0xfh4818az1snrzfx7h4ibr6rd5q3a83yisx";doc="1c120hcadb7xpkspmixhfrdlcmhl79jrf1wc0vsjqbq3wxjq1p55";};
+chs-physics-report-54512={run="19ci498mf3yy0xhmq4ghy8yh138dzs8953ki2mqn9hj6jjx71yfm";doc="1nfmbhp3gqmf2pdallpnrx9hqlb8cwkndfri8i0mh411hrh72jp1";};
+chscite-28552={run="0db7nrmm5r4b2cvcyjfra1fmskjaspbgymjsl4vvif9j3kwaa0ba";doc="1q5s4qj508nqy74cdcg8380vjbhs4v70a4jkr9wdirqcxjxs6yfn";source="009a8y3lxpxjhkd05fcf308k3fihl95pcn7r2bgy57jr4nalmixx";};
+churchslavonic-67474={run="1x3b3l8b0gbariw3c48pfr6ywfxh304vfbsi10f99i3rhl8janac";doc="0pjb7dpxp0nnvh47vrqydd5gs4ld11lgf9m45nrzs1x8qzlx53ah";};
+cidarticle-68976={run="17a2cqb6d3n5g3jhk1l5hybmpjhqpf7w0cr8f0w8kqwm2h7ciknc";doc="01r547l09fjhzrm19gi7xwrvhfglf9a0cl2v1ikncfhciy6dvjcs";source="1v9qsmqhb96b8p27bim3s71ybarygksifanwgl55vha0408s3zd0";};
+cinzel-64550={run="1v29lilvh6l5iynf1810p67qx2znxbm04wavj31w5q7rvnar81xs";doc="1j7i2bdbrfadw25ajkgkygkii3prybhp4qh5k8azbn7zpxl78q5s";};
+circ-62977={run="1m6siikjprch991sqbchbrmhvh2knjh3895w48wjp9par050cbgr";doc="1zmyxc0iz7ljrkklqdmpiax9alk56pf1i4dm6ljpyisd95blcys2";source="1vdj8qzym1ihkhm628zz99w6xwzhav8ci0vlckqpz3y91nkkpxaz";};
+circledsteps-67889={run="0ybaz7hl9v8g0kx8v7j8llgxvvhaj40afk5fi9733iv8m0w3mz47";doc="03426fkcxcjszpm852qv1y4kb581gdkk109cyfy7bjyx8ihrxq0g";};
+circledtext-63166={run="0c4gas41ddivlam1hsfzxlyqzicclfd91arpa0s8kinlnz27bnq5";doc="0ia4m8ss2idvzhgp88cbaybrzld0cg5gijl7nzd9fc5xsmybdjsi";};
+circuit-macros-69263={run="07cbpxyawy44ds1vy6kpp9cxgv2mlh78i1wakzw30q0bj4rksw7b";doc="183785rmygpffw0gb7mddjvswy3dbgp5yimd5ckxn193429il7p3";};
+circuitikz-69077={run="0hvm3zv86839bl98zcpakgx86za8ij46iayr7ajlr7dxncfyisk1";doc="1mxgja72j4fc0a6w7g9317asbgfj67l98fxfv1jz3a02cahyw1z8";};
+circularglyphs-68476={run="0d8hr1lns0973y61qmmz1hg9pc99j3w4x3iaqi0f0jlyzxc5j1m8";doc="12s7fkjlbbiica7svrha74zh3va390ay87bajjs0lgx6smqfx85n";};
+citation-style-language-68454={run="0kgq9yrwrzj5kv91wsiq050rx78a8q5879bq8lcskzv1wqkhi18l";doc="0s0c46516ljx0csllvvw84vxipwnhssyvkzyrrkiwzmxka9pw3zf";};
+cite-36428={run="07nw7axvgir19ayi3zy0b2sp8bb9pq1nl36x0wv3nrqjilvgrwr5";doc="0pg5fc41iwqc1y9m9b47nh48fqp5dpnjbx14ny7ch9irxblg5d31";};
+citeall-45975={run="05nb6pywcrhqi1c9xfzkv46j2fq9y1lqmqawi75v3z56h2v6c136";doc="1p54cr0khq72z396r3vl0p9qqn2k82pmx4pjaszlzhni5v54hbdr";};
+citeref-47407={run="05bxlkylmilyzvbl99nsw16saqjsqb4bcaa68qkz8m59wz1ji4rj";doc="064c9zg2rhnym0wy2kxj0617mwb3mxpc1rr13lqpwb1f1qhghm6f";};
+cje-68656={run="0v0pya3nyj3phrgy0vrh9psbgawp823li0gvhw84pp9jg0lss6vc";doc="0w5lrlwzff9vcb0l44f5cj5763x8qb17j11kmbxy5p7zxz0j3i9a";};
+cjhebrew-43444={run="0my3jp6pi5lbbhn24jn07gx95laq2p7fqk88pwic7wwyji097vxw";doc="09ldma056ipsamrd558z24k63p187ziw2bh8qgy4na20pp22wj0g";};
+cjk-60865={run="0qdvr0sq8v0vi1vy8aybhrk7fnvlyxz9x9m63npa3nfcffypdv0n";doc="0liy56875383hjdada5bc1ni6w6ikmzkf5k8qg91l0hbkxxnqfiz";source="02bnfl8hydbb8wn2d54nrd6v4p9yrr4f6hkinyil5jnfkq9mryyc";};
+cjk-gs-integrate-59705={run="0w396gn4s8jlaz95cc3dzh9xsjiywsxjf87qwaniyaihssssl4pn";doc="0a4m7r52czkxp7j2zd389f5illw18dngdj3rkd8b9qlp9c4bq907";source="1h788aq405c44alpj85lyhmlnvdslc21n6h89vx5dggdfypbq18r";};
+cjk-ko-67252={run="0kzah0dkaqrm5l9n4792sgmiwv5l42518q8hsxcq4big90va6j8c";doc="1pgz1x55knbhf5xqajcjqfkj1a0bfl1v4dvvgdlfac7s0z46pxwk";};
+cjkpunct-41119={run="0wvqmf60gjm5m7fcc2qqz14lfzxcrqci3lrla96hxkqnqraiyb84";doc="1ja16xaqfg5158155flfvayr39k7grij13r1r89g59va53mpsgrk";source="1pn85n7n4fp2p5pq3w66kb5zlnjk1bdz7fz4xsa6z31d5216j39b";};
+cjkutils-60833={run="0wl33vh7pcrbyvxy6bfcjfv0xnawp4gb76cmq2304n9mp2w8dg2h";doc="1kkb1lkni0d7mb5hcnwkpwbyz7y9w5iy0z6rgm38lnkkm2wjhf7b";};
+cjs-rcs-article-69006={run="0lg0d2igpd1dbm2cd9irrb5702mvpscqf12bmxn68y778wym6gnr";doc="1vvm9nzrw9gidvzg1ab7riyxs98nxwm50kd0ih2zls8q6xxzy6bf";source="06wqrj29gf376mxpknzb6j7aqnnx9b9gacdq1bgd462spz7p8za0";};
+clara-54512={run="19g2vpxwjjc3y88ghw8yv0abkm69x6lnjj4p1cqbdjiyy4n83677";doc="0dkqqps72wws7dhynan243wf86gxn4chn1v5iiishkar33xvvlzp";};
+classics-53671={run="1l5p09agmrik9dkhwghjg8qh407bjw5q9hviykq7kf3y006dpzky";doc="0xp87xj7328ipwq0l8xgxn2baqm9zmp8dqyhv1iy68k9wgqr2f5w";};
+classicthesis-48041={run="181s8s8yk6y9haxz66ks1v6wwhpff2vs7lxrc8kshg1mn26bya4q";doc="1nxj2qflzs40mwnpd02bnbnh0ndm8rx12mr1vyyy6v3sc6g28yn2";};
+classpack-55218={run="045fl18pbqs3rxjp05mcmzhrqs94xgqnim96g8mij5v82fc7c99r";doc="1875ak0yjxlvsn1gs97np1vhy2jr2yymjxgr72p25g548sgi64q4";source="06r1kpanvp3y43jc8vrskba6qrsi115akw7yjal528fxn1lypq8n";};
+cleanthesis-51472={run="0wsib3c130m19r4z3ghipvgqvmfhi1cx86670ad3ama3rdmc3zpn";doc="0hhvak1l5zc4bj874rd0i6v15v70i3aq2dlv736csvd2b764g6y8";};
+clearsans-64400={run="0wd2lhl02svzxl099zfflqk94nhs84qb3b7wzb8adh2b8z9489c3";doc="1nrlrx6chgk1ysxcpvd1hb1qpagl3n7x9h0gzfjf0431bc3fxc83";};
+clefval-55985={run="1wdxl93z0svgg6h7vdhzqp74clcldxqh95yimqb190cbm6v5ll05";doc="1d1pw87hszspsfrl5c14q3c2iy1fkbh77dzldhajx71iqjfza634";source="1x7dvg6q0hy6pg05qpi2qaxw7y7a2dcfa4khddvbfcngp1dirrzi";};
+cleveref-61719={run="1d4qp3jl9mgv4afgdgcns5rr7agn5smiwqkmrasqchj4hqzwxhwd";doc="10wy2zndm51fy3d80cqnwsjxyczqjjffx61ir6ky3nkmiikiyypn";source="1qyyvn226dj4yq25cf5f7yzc3gx9qmxmnlnjijydgmmwam71s3xl";};
+cleveref-usedon-66915={run="0j2i293c13knmpv82g2b85a1y9003dxvizk073617qf312jb8bpa";doc="0kprww9mxfr45y311zky7gfhxvg5lrkxfg0mdkfgway0j2ljyw9x";source="093ydvc1mzkz0dds9fl107bj5mghdfjwb9kcfx8hw9ss9yg6bv9y";};
+clicks-64602={run="15v0yjrsnf4hqvmriffdq7x24cxk9l54a5s967nl4pqn1iavsqd7";doc="1givgqvm29fa1kvj556hfda3z1hhfzba2b7jfj46f8zsifi17s3q";source="18dpkhvhc2i7m2r5q0sp5m0zhzn1706zlknybcv3zxsnpcs1rar9";};
+clipboard-47747={run="1i9facsdigll3rzl8xv1i85cqyvlc54xhia69cv5cv0gly00p1dl";doc="1b6wvadihwglj0653bn8fnnq18whx2hymigvyknw00fyn3xjgvgk";};
+clistmap-61811={run="0xl0310x3wrk9lhwhbqnzi3gsvmbvk5smd4wq50wj691vmag9ivh";doc="116n1w0zfc6ad3nnq2wvjibpl4ywcfbgffax43vml5aixkpdlcq7";source="1cr6hbvln8mvrs6g8831153l62b4h1k5731s2d0xdm46wwmq4m3q";};
+clock-15878={run="0w5z1ffi25nabsaqh91glby7ifn40c9rhzxlz2kbyvbrdg6a3and";doc="1wp9hglx1vw8zfa182m2103xb0rhg9hmp51rc7bzm6fh3iyz52is";};
+clojure-pamphlet-67201={run="15q1hx198bxr5ip9ssfyf9wbccqrgwknijcbnqsm9mp082d0vc1x";doc="1fi2yxxnqlwsq3m66b75a16hpx4vs3imij175dwvjq1nvfg5y8cn";source="096whv58b2g15m6mzg689d0mp6p9yvj8z83w431zbg204h0kx0w5";};
+cloze-55763={run="1w0wydk9kimnihll4r8nx1kp6fccgmhybxl3qzrqxk58x4imp3sk";doc="1pprx0mdxfn8gwdsi03ifscinnvj7p3w8nwir20z5q5121clss95";source="1ijnnfq0xrcnysc9sf54nc9a2xg42jqfiqawb8a5jnc62dx9zwyf";};
+clrdblpg-47511={run="0p38c8p426dn4i40wwhi5hisx3yc8bqdi7vwxdbya02smixkpp5f";doc="1l0avfhvabq1mm9yqrpr29ps9iks84j7mbfgrbrd6kfgpdpqqhx1";source="0iphx9hbs4ld49d24f2i8dcyjxaqgvxznq3i34ik2ywampr2a5k1";};
+clrscode-51136={run="0kk8hsrd8rr5vadvh58fdlzpz29cnpr5nhcl5il8fj466dw0igv0";doc="08wps3rkrx4isg7abr6icfj9pcnhpnpylnk3wvwb42pqah8975xd";};
+clrscode3e-51137={run="1f7p04gaccyynqm0wzfz8jinsrrwn6i4amc51s835gxkjv2d8gwv";doc="1kryc0ay3bx1maydfha6wm4qw2l9xprnhs3901qbz904l21yawhg";};
+clrstrip-60363={run="18ln2mlc8bhhf96kqawba5dqi38f5j5s23qmp5dmpgdm7fdanlqn";doc="1mf6bcc17ivcdvy36ash33bmhh9fcry0w30bfi96swjq17740cla";source="1dc29n1m6bq5rbpf66q07nss8iw9mcav8s1gzc56j12ik1r2sa9y";};
+cluttex-68912={run="0kzc9xs7rn8x4zh3z4fh45d370k5526mr81sxb95jabsry82vn7x";doc="1ii7hmn88h4s0va8f4xsndvhkl03csz13nrnn6jlzl8rj02lz45j";};
+cm-57963={run="1i70pxbx7bp7lzpd4skdymv1a7h8njsr42v8l8jvh4bs3gkmlbgi";doc="1s5jagrajx29zmpdbqc6qpbcpwgp7g4c3d59ilg4sgcqgd9n5v1j";};
+cm-lgc-28250={run="126k3nr39xvgbzjws9x9xs01rj738lvgpy9r2wjvalxqvd2sahw5";doc="1xffcgb60kvbg07hsw3dc6kzjqh907fj97qrrj2586b66asna5il";};
+cm-mf-extra-bold-54512={run="1l1cm32z8wcpj0cl7czqkhnwil3ail7a2bbzn70dnswpj0ka8k9n";};
+cm-super-15878={run="0vpxkin8zvanasm0n6zzgmy7wssca6bm5yia2mjdi7nxzqyawlwr";doc="1ygbv3gwijyaaj8yzwxzsjqsfjdf52m3lm3f7rp1503d2wvq2qzx";};
+cm-unicode-58661={run="1y71gdk369hs2yzbfnj5i6yy2xjzv4n65vcfb8z7x596kpjm5jz7";doc="0zc7fv9p1m7dgi3vwkra2d8x18c4gkqzkd06gp9c18jgf0m6ahm5";};
+cmap-57640={run="11ki3gqlk6hjbpffmi2zdlj0rg5z5drcx8zw9nc480mxz931h273";doc="1ykxc5bg6s1c2p52fyl2dkmkg25ylngsfrhsw05yzskj1l8v32yh";};
+cmarrows-24378={run="19r3r86vdlkjgx98dsf8c3crq14p8ljdfq6cijqqsvj6p4p6nfy6";doc="0svllk1cvjn1mw68yfhbd1na6grp4hlqbybqnmw7igw8ilpshl1b";};
+cmathbb-56414={run="03da7ak8q3qyvwnk52mn2a79q2mfbfk0bfrkvmjpqnlagw35qmbi";doc="1i54xpnvygfmwbvdnj5wwd2fwfl1y4f99afvs283lz1ki2857aj0";};
+cmbright-21107={run="1ypjv6wfj1nm6wj6laniv304zri75q9gaik95sxbz0wh5cxzwgr8";doc="05cwyxmh6mqj0xf4awhif1vvms0j1lmadd1fgil7b14l46mcd99c";source="1y5is2678czhhkw4y5nrg05qqfi3n7fbric9m6pszfkh4iw0ml6c";};
+cmcyr-68681={run="1fdsd6ks48rvbvg44ac01z89rbd4w887lg2f9wqca1byx142jg3h";doc="0f2i6yzqy4lfh42y47mwqb9r4ni67bwgrrb7i7mfajnkcb6mi7rm";};
+cmdstring-15878={run="08wyaqfyjp482gwkwfq2xw3skazfzlv0nn59qri9728rmgykd3wn";doc="0236d4ngq70xrgsaxg0b0yqgcnq55blkq7d4hgw3sx6s6hkxfkn5";};
+cmdtrack-28910={run="0ygl30hj8rczxj8sxis9cfq419rscvndj5fwyrls3c1d2mnscizd";doc="03gp5n28lg10h6amf4vxamvnsr7hvrkhmscfcdf4jyp3kkkvnv4w";source="1m8kfxys9nh3xml6inyn4qyhqmw3h572lvlbh7g4z0zzqgiah3qx";};
+cmexb-54074={run="1hfslkscqr01dkgnckfcr8c04s053s6f8z5xk35lcgbqj1l7ygag";doc="1f6nrlnnq3c8mwsxz58pk05ginjkdjpgpnnw2alky20s78cc5kyq";};
+cmextra-57866={run="00my52lh3cn8bn211fpn7373b7khaylx4fgkrd2m72xgaymil308";};
+cmll-17964={run="1mv2npq85fmm8ff3n2czs1mfjqcqpy5rx6dwy9c5ra1nybx0a5ak";doc="0ps62xbzac6k9hk0s7wlk14iq70h922sxgagy5m8an9vqp94mjzi";source="1vhh0ds96n1yy3nby8np7v4i747cana8acvcnik1zz9h4xnf4brj";};
+cmpica-15878={run="1j8jsl3g76wxdpzsj8w68ln2i386cjzclcvvj1nl7z9k5bxf4s34";doc="1rj4g0kzy0ci440bjkh7b7lyh52xx6v737chzhps9w8q1b07wvca";};
+cmpj-58506={run="0hn69a35zkfrgy2gndhqlrclhx13c7515wqw28j4fk6ffpmn6arh";doc="06yhinxa4s8hswzzh7d9x8v768fzk171fgi6kxgm76hfi4ydlw9w";};
+cmsd-18787={run="0zykh9s50cgsxsv2958qyvwck5lw9s2a6fdx7yb14b95wkryqssd";doc="1mp1lxxhb489appwqsbg2g3lym4xvffg047lg7rpyw4msw3m87ak";};
+cmsrb-54706={run="077f185vcrklhnchlw694113fpgaxy8paxms37rp2br8mbhczy00";doc="13nd3vhxim71kcl2n02fcrm5vwakkrn0f5nfw8irl9i9r9bgy6ll";};
+cmtiup-39728={run="16wg8nw15f1pfcrm49xnna6finbvl0jr0wyapqg9i2jh39c1gizw";doc="0rr69cqg5pblx5h8xyw1zkap1fj3pmdznycplxx0kd4wqzbdd47z";};
+cmupint-54735={run="0y3pf2mbhxhn67skzy89850fhn17xr0b0ghcxn1ayq19qr66yrj7";doc="0v180y0j3md4iyx54fvjr7g00mavmkw6b99bsm07nncfq0anajms";};
+cnbwp-32550={run="1xn9s2scd7x714c178p3p8bmv5bjdqzpbyz75nmn50d8irjg1zk6";doc="0cs6jp079acnjj0292xba0gjkykva6grviwnm36vhxy93732cls8";};
+cnltx-55265={run="09czgnx6jqn856sr0hg5j9azaxc4i22yp1dz95nn4s331khl3z2a";doc="1ly2cl3srazzynhikk6myzsfhffz3k63ddw2x9sbnvw6j7syd545";};
+cns-45677={run="1b9hs7svh6zm22vw5zv6nqmdnmw453xv15gl5bgm4n3f1pz757wv";doc="0zdjgg2njgcf35jvbhkfgiv3b9cccf7ds8d50ga3v1ia9i4h9xq3";};
+cntformats-34668={run="0mx4rgzk4av74s906andw0h9ga5zl2c3ip0vi4q9349yj643k2q1";doc="0015ynn7mw1y8v14qckbqkvb1fn5xqaz7rcs6gid1n19f1qsbh6f";};
+cntperchap-37572={run="0g7211nljimm9a5fvry89ch4nf49xhad9ka7prdmlpj87h9ygas4";doc="1fmq2r8ssvp99ykil3aak8w301qvh4nldsph389m7qar2pviy1sk";};
+cochineal-68904={run="1b93yb0p4mzazs1m68bmv89ynlxikji27p91sxaf1d4r732nfrlj";doc="1qzzc9l27ymsyws1im8siada65xw411rbvkqaxps7qr7zwbrxn4k";};
+codeanatomy-65648={run="0pi4w20k4qcm3sbzpd2dsdpq6r0nblgjm2s3m2gclpmsybzmflp2";doc="1z9w6llgjnlmiwkz6ghv1cf2ilrfvj0r1k2c6kilsz4jcc457y3z";source="1vag4qaphfw0xrdl7b082iwj4z89x77sh62y05xs0f2bib9qlcn7";};
+codebox-61771={run="0s0145rdpqbbagc2klx2w5h6mlx4ns0qlllws31qbvy6byh65ngk";doc="1pj5qnzfa7725v6cixkznrs7yybc2v0ik9q2pxa4d25rpfxap524";};
+codedescribe-69343={run="0swllicbxmaswi1v5ks25rd8bv8isibbkkzsi78ibcbc52rg2vqm";doc="0adbg2kfhyd2l19dhbab0fa49spgqk44bga9wgnn8n8g7da6zvmx";};
+codedoc-17630={run="1zz70vp8ssblnacrqdsq9nwvf1lw69mlk9d94cfjc818szcgi9v6";doc="1f3i3vw1cmdvgp05xckr748kzbairhvdpfvr844y7wnmxzr4rfzg";};
+codehigh-65787={run="0nls47d5md0b46xi1nxydzwf79xrqh6ijj06h5n5mb4sw7w5qylp";doc="08d7vyn1s4gqhnbz7f935n96ay9hk7k41w8msg8j9s937qh7fb64";};
+codepage-51502={run="0kxf5zr3mhn5pd8pzmzslgnngk8gms27ax6cqn1z0n35zvh0p17h";doc="1sd01q8lzrzgk9v1dyhf4m7a4fspjll3w8wwkbzp7gc693xg3lm6";source="0b38lcswx2x1jl6ydmvs6yr1y0kiv6gdicnbrx5qs8xhwd93bcag";};
+codesection-34481={run="0qp4k2z442idg0mjnancfskj0j0k75w327fixjgdq1kl9q6jm9p5";doc="1fs5qhcm1cil5cqi8dh04zxcnv2imq4m77287amq0mbh3j5h9i77";source="1qfnls0g4z3xsmh89wjcw31gm09c7yh1g99ksf0x9ml6yx1j8f3l";};
+codicefiscaleitaliano-29803={run="0im75yz3sw89ky5lcrcjhg6k6j4sgkjfn6v4srmqzcfdmn2qyx7m";doc="068234c0shvblzkcgl67a9s9whcbyjy3mjw60i8ljhs5z5wjrnc2";source="1vsb7dk4mlaacl9ls17lm4xdw27xzdgvng02gkfjvja1ja3cq4zr";};
+coelacanth-64558={run="07y3hgw3apkkncch9qcl71l5xaff8zqpgcwf8is7wz1wx173hafs";doc="0ylnvl6ya87aivb10z8sq2rw02q3kljdiddjfarx70mr1jzr2hma";};
+coffeestains-59703={run="1sfxi8zimkp76nc3fg7r3qyf628sh9p8rh2b8l0wq5aga20951n5";doc="097c2xgrgy95w7v5xb9lkgih65ji5jlxzdm6szdyqnf659bmibm6";};
+collargs-69284={run="1hiqc0gwligaalxacv7si4g7qnn06aq7c4kqf2gma01xw8mi61gk";doc="141glrca5d5dsi6azni6valbgvkdywh6isian3av7gm2wridi3js";source="0qxdlmf1yvjlisizpcpmxclbs1wxap1zqivvsxnycyf4vwf2wxj9";};
+collcell-64967={run="0f0dzdnmmi4cpyg2qfdxkdl83qrcsddpqm7z9g9mxfnx4lf86y3i";doc="0wyvhcw36arrgnwq7zc8vck3m37qrn7my4r6959p4i7zhpvsazzz";source="1k7s9rkbp829wlby7h1hwlv48bzxwwghcsnmlxrs7qnh374dwb02";};
+collectbox-64967={run="17bz2nh141yw4cffv1w6cdnxkgi6ilsr5fkzkp6h5glfibmzhi62";doc="0j9hs1q8bzm4p7rwiikc805khkar23722ylf00yb7mp5mvky8996";source="12llsyfksri5hlncmj3bba779jhwxxdr9zcck02jmrvx61d1znvh";};
+collref-46358={run="0q1g0x0bm0qjh568fp45b1ljy3w3jgy6s09ji1d1m5yrbs4dm7qn";doc="0vcfrdg9mqrfv2jlxh88g0nhpsrfwgdg9wjdn0l9b4c5h8zq030c";source="156gdfrd09kyxjiplcm38s3zj8v6bygwlpr9g952m0r72q7cq54v";};
+colophon-47913={run="0v8q22qxjrbc1mpsmfvdp13iwkjxp11cxs86h2b7b9rjs0cjxy6s";doc="0s2kz7q6nkwc19jyl32rzcbbcm7ykhkglanx010xfz08vgirk1pz";source="1z2dihgwd4vbk87n0hzpipm2359fwl1z13fjs4g9r5ys7iv36wsq";};
+color-edits-56707={run="0p465bc127rlm53xngrynmrxswzmp1xsivkfy3mj22h4ij6db03c";doc="04zfa0jryyw79rz9s1c0yzr1i8zla7ivvfw701f8la1rab7z6q94";source="0279n81xyiz4ipjbr1jdl0wipfy1lkl18jx8mbqcbwczw8k4fbn1";};
+colordoc-18270={run="1hay7bb0xh2n2j9clvbn5ayz3jq0yjaixi35isdsf9ysvj81rx0m";doc="14bw1g3dna2ykyv4fl32gvqjs0n75vlfpc9icdk09l7zhdspsvfn";source="1bssn8rjrp34nm6qhmzcrcn6a0ah9lv5n94d1jxqhhaj4pmimd2j";};
+coloredbelts-68747={run="1y4ds4n6b6avqaqbnj5yh369bnp1f0w4mhnzkjvibhipis7n11sg";doc="0svl3fr6df2mvqpf8gfcb2byj16hbf2szdnbi8scbvrww68jmldr";};
+colorframed-64551={run="1kys1kcq1j3c4d8mv22fgdw5l2c9ar3il8cc65w0lx4avbldw28r";doc="1xg0gbyh0ay38yk00in78q7mysnmlr4maxzv5lw3s88l0adykr8h";};
+colorinfo-15878={run="0ip7py03xrsrn40cgkl4dnj3q9g0f9fbw71c9rsg9j7vl82fdn46";doc="1185m34382n9rk6w81ppb414vl77kikkhwvn78aahlyli4il51l8";};
+coloring-41042={run="1ld6gknb8a59pkz50wlil5p11mnv6ss0zsjbajbw63dg0zlwaglb";doc="18y8apbkh7yqzxrzpraqhd76k93xnvgq5rana8lq4xh5z3f7skjq";};
+colorist-68440={run="0wk7gllr4qmvmb3fsf9basi922ss6wvbnx44yxs0wladnzkyfdhg";doc="1kpv619xbwd23lm6i4dy90plnn6yh288alyz771qfzhmj1a7bvy8";};
+colorprofiles-49086={run="05nf7y425f8ric57c3afq7ymc7ndxcdahbx9n32jnaz9j3qq2ypl";doc="152vrbm5km4ymj5h41x8cjyypj06g4xq3vyvmgakai9qz270dvyz";};
+colorsep-13293={run="0nf72pf2bjn8pcps45sn5dcjf1dkrww9wlpp1xbzl1h9i68p3h3h";};
+colorspace-50585={run="17pahq2wh9vqwpkaqkzc3ypcz90i9qpmw7867qz4k8a87sp7wgji";doc="0g766c50w7xpfvqpp6lxjc6lm2cyr8yl28g7n357j1d1lxgnv0x7";};
+colortab-22155={run="0hiq8wgqiwxnw1gsrymshkldspdnizcci56ihn22h0hcwz76hgzv";doc="1cj84k7cl6cww25yy2lynjrbicn0qy4y09rh6dx2zq19972fggi3";};
+colortbl-64015={run="1zcxbq0sjmlixjg5vpp8s21acfnxwmip6xsr127jqdhl27mfn1f6";doc="0myxh9h2riwnbg8n1r5690w7rpvfry5n7brrnarpwrhc42hykcz5";source="1hwks6bpk5x9z4vqj63fwg2lzj7h8mgy3kk6601vynv5ck0af1gn";};
+colorwav-67012={run="1dlh3ipf98nq5m34rj7naafnw9hhrbljij721mw57rbhbpcyazgr";doc="05f91rmf1kpdkfl0dgjag5cq5xvcflihfi9xj5y49nh65mq01w99";source="0rxiqp1q49l1dlr2npbb45jygp487zhhzjx850f68bw5vq8wz9j9";};
+colorweb-31490={run="1rz9ay86z5bf8m4j5w5prvvk1nmlaakj3g0qfsrl0cdqk7hwsfsf";doc="0vzcwhbq1a6pczvrv21z0q3y1akfwm45fclf0857c8jvpikkzb1m";source="1z0h3l9gdxsg6lbw7j6nqhafxq8b8smcn4nmq7ywdzryp8b6fbw2";};
+colourchange-21741={run="0y8r7789xaj16cdmsz4q0zyq9l09ihgzzgk4alnggsyx1ny45ybv";doc="0zj9b8xcnjlvadams6a2z3pvnzjci5l10kran8mg79ncvzq386cj";};
+combelow-18462={run="0s14rmmv44js6vc2l8h7gb9f8h5w4as71qgxbadaxw641xfs0ys3";doc="0pwrqhd8m7c2444czsllk4sqai3i2scll94y6qy7m51jvjycyf26";};
+combine-19361={run="0rk76f508pwhq4crcimw6mvqw40j31g2nsrxj17pld7ygxf9a5ah";doc="1kbvk5wdpjxw9slhz63pgz65kkxcn0lkr6i5gv8gcjh2w61xizq7";source="13z1yd5mb4jdsa3kjl49412zj2g0nkprmmv8d6ibnjg6zdf9s0xn";};
+combinedgraphics-27198={run="12569y2i0q2lbmnwlwjfc02x0drpa3vcy58wbch4j2xzv1cih69s";doc="1jn4vdnlz0mwjv09ry0phbisf5zv5valwd3779cqbh1dzpnpl7lq";source="0xacdk2xsdlzgrxh0sa8sgjkwhwasvahgdgjjxa9p82bfjhr1f4d";};
+combofont-51348={run="051xpkjszw281gcpacc5s6wpbvwx66hkbr5fpg72205raa454bjf";doc="076niz8w1i6zwq1938iplhcv41qfasqhw8darlr84fr08d3hjwl9";};
+comfortaa-54512={run="1kfxl806y2g6axx8csnd7njyd0skxx1gpw7fm3paz8yrzvyyw89g";doc="0irfhf9qw81m9x03nybk7br1nrsk4gx1dccd8ay7wd3sgw00kg0a";};
+comicneue-54891={run="0w2jbwfzfhbm5375852zv9rqih3p7grvi0s79sxr6gpzh7iyvlxr";doc="0wr71zjk337h9p38nm67ga8js60vqyqfslwn7dqvzg06p0741bfk";};
+comma-18259={run="1xaq59fm295wwnpls4qfw364qf9iyg97xhsvglgnnx8w7ydhr68a";doc="0g8jpwf1ilkbk59p4l372is00qwhfbsf8f3db1mxysmlxyf0m535";};
+commado-38875={run="00by3sskyr1hfc9wqazn2rii739bhl2fhlwwp83h6wx98h51rfx3";doc="0mk7k9gyv2xxd3l7m58dsirk32cn7wbmdy9c0nc6i1jyfpsfhmq4";source="0719a7bp07vf5jgx00cjdgvzfnv7wbxrxna2bdjjsfyvipyr4z8a";};
+commath-15878={run="0k3s00r4l8bypv1166p8jkdj1wrx4ar4w0y1fggmpzivqicc02g3";doc="1n2929g5jhkrrp7fs237h80571m31dd9x0n2dhnqfgynnc9vasrd";};
+commedit-50116={run="00anqgix8vydq5ssblg5w5i8pziy8fvlva2kpwy5cjjiqgpprcd3";doc="0vvnkp8r0xbsyvzps4a20fr43cj2559cs6mq7jhja6jzvqqc6mic";source="1kzc8i6nmvw7xwz9fbfanabypissbm7hnmmgp2m8r462ywzpa79c";};
+comment-41927={run="14k4y4abv5mlhn1i8f90bxfymp9vz0aha4p2gql148wj2hh7h96m";doc="1589g0dah13lw4p18cqprhfnh1184m79ddrgvc2l22bq6vb1dsb6";};
+commonunicode-62901={run="0mx8nsyiy7jbdqsjc19sghifigg06is99sys3xg0rr451rxa1kyv";doc="1c3xabrgpmff2b3yfrxj7sbdwn9jq71xi2s0v6329rwjd6vifwd3";};
+commutative-diagrams-68044={run="0vkcb6gbzfa42kxdz3g77phqi6j614zpdp0aiyxqxvxs2jk7ncpi";doc="0hbb7xcki43274s3ssjqw976cv8lmyn1gd4rlx5gnvc347r2clrv";};
+compactbib-15878={run="077l73vb0rcxy1n51r3wmcb7gma6nn3xrl543a67n96lpp5xvnnk";};
+compare-54265={run="0isr7gmskv55cr4f1fa7s478v6fh65q9ijxkmbpxj0448g9817w4";};
+competences-47573={run="0hijar81j2jpwk5j2hrgaxb1fnbk6qh2qb0qbbmhsqrdrfcl6xdl";doc="0ywq9f2a1fb584kpvzwg8b16qc7bpcn3dzsscs6ndqbgcy0zc2yf";source="01dccp2wqdy52kp79n099v9lh1vfambg0b63amq37ac68pwn3qp9";};
+complexity-45322={run="062xi5wlg3axhrzc9a6nj068z7nskb7qwwk2wr0fzvsflqa9cp0i";doc="0yzdyn9j1jk0nsw0l4r06cr4brhz1f3lfxc918zalx6h9wnkxi2b";};
+components-63184={doc="04yg9hq0wcyi1ag9y9m2fnf5h3n4fdykiwljgpw0kyc73bfyhq1m";};
+comprehensive-69282={doc="0f1w8bxqapw3l0nywdd36lj0y10miqvzzwchxs2swgjlyxjzbspj";};
+computational-complexity-44847={run="10as8msnqa06dp3hp945m42rgbaqsja8z4sc79x7n77z6qzmznvl";doc="0dq56zzw1xzzpm1rdjkqwhr6v93xiv00c1g2rmlmfj5dnbzng7wq";source="02mapvsz8j1979gy7pmwkdr6wq55v0al71ffl9bi2bl7f5nsz0vc";};
+concepts-29020={run="18vjncdrbp7m7m08dnfmk6sgv79jx83bc4yvvcqb0j9mn9niy1f0";doc="1bq82dgsl6gqnrs88dzg07dn4rmc4y5by8122zqaqpdrpjxhnvax";};
+concmath-17219={run="0m98kyji3v4gg1a30phmn7fwssnnbdvyjxvfpl36lnljnicpg28l";doc="1392wq35zidk71vxybrwjq79p2gf4spcv0qqb07dsgapbhr2g0aw";source="1zn35da4jlplqg7fb5ibzaah2yh1cwjqvzmx45jxg0hnsc7xmlfd";};
+concmath-fonts-17218={run="061kfzds7clbxyq62ilxwcrdkfghi2lx8afik7vi9gg0hysbki7y";doc="1x6wb92k4da01sv8b35p3bly9hj46hh8k9wr22m7lj3rxnndnpcq";};
+concmath-otf-69005={run="1ja0j5i4alkw45z0gyw61vk3hx2lkrhcgfnmy8l2nm4kibif04k8";doc="0ynz1mzciljg3jiz6wpdwda8xrpnimdfpbrf00pm4m786cdz1hnc";};
+concprog-18791={run="08yr8yk9gp35d0nvh54ysgv61s062vj446fyb87n8jipfm49mj2x";doc="197p2bdn1rqmxva56sagvb1z7kc8gwxr9zf612r6g8yb07xg5riq";};
+concrete-57963={run="06m8d6z5z3dpj9i0nvp50g6pn9j0m4n0n1j3w94nml137qghawyg";doc="06z5hh9ksr9jpkfchyh2zp8b827klb4v282ipizrm1dvlv2r1603";};
+conditext-55387={run="0g6clck3v75yvg7gv42w24zv18vi5jcg1q9k663cxldix77lkgbc";doc="1qc7w7xfpxarb82hf66f3i63v7ypdybqwg5g3j8qswj1a39cy1wm";};
+confproc-29349={run="1s4mv0g2x5mfxnkp0i29wa3ncbx9fa05qqf734fjppdzsgic079i";doc="021kbis3c73gnavrjhqa34fsbq5c94lmjym2d4ny2wpk9xagh994";source="0dpghxh9mq2sr7aqgcj15h6b4xh7x5hvdzph6606izpff8ac7h8c";};
+constants-15878={run="11naj0z8ppb6h07r7cff0lcmr8zgc29kp3x7spi60zi6cq2546gk";doc="1wgvq0x1kjgd0bs0024fkh7wis9aw9qryd7y0igrbgdgc722pjnp";source="01skagh044v62vw12kmibgd6y42z5r1glrsvi9y0h76vs52jz7hr";};
+conteq-37868={run="1h7b98qw9hl73gh4zidy59z4rly9afnvmah75jgvh0k1v1hm09df";doc="0kgdggc8gpd1h7kdbh3ala5kz8rs56bgmwgv9wvxsqx4sn19q2fy";source="1y0g7sj696d6qhcw8vrpxr8gwik54slp7lijbxz64ksqbw5xjqv8";};
+context-69131={run="1r8gkrrrq1ps1cp058m1jv8922zsx3hw6c5vsmxpbwckrp5sirwh";doc="1nh2yf7vb800cnnmzic5hmy4w5kxd38y1py1xjg7madphb9zdc60";tlpkg="0vcs8ffry2jpxad68sk0mnc8p0mnxifbimsj227lkn3d5cxkrp9j";};
+context-calendar-examples-66947={run="0asc49mn24ql4fk73089viy3s6wff865xk8af7h67ffsb5qjnld8";doc="0wza057wz18yf2zl1j77hddzimwnraw5wg1579ncksywvhnmx3rp";};
+context-collating-marks-68696={run="12vqvbp7ns9r5nc7p7nrlsll3jp3hc4xi9wjyjq8lrmd8ly3v26w";doc="0nawd3x4rl73s4mhpq2wd1sqa8i6k2n0a39sqcaf21zx99mpiqp0";};
+context-cyrillicnumbers-47085={run="1gk4ncbfzilj98s7k7s43k6vb3il511k434aj34fsvqh5x9x4aw2";doc="0f7r9qgfc8h92jprjqa24q4vpz4bqrrns3glhmwh3qmk1f2gyw73";};
+context-filter-62070={run="1vj8kimqsmn9xhkh22pywqbn4sal5gxpxjbcbv8xmxcrby02gsfn";doc="1f6phdqxgvdg9c6f37m654ha6i226d88i81147h9x6sh01i7qd0b";};
+context-gnuplot-47085={run="1pahxhbliz6fsj2va5pgwcs55b3rhsmfnjb9qjxkz3gqzrzdkfdp";doc="0l0qp9c0yvdrf8398wyac98ghrdc86lxgzr5l327gmgnk8572gxn";};
+context-handlecsv-69186={run="17sn4nq1fn3868xwnlg71fqx8cjfq92dsiar091635cl72f4fra7";doc="05svrhaz23sb11pp6kk7lchcykx5b9b9399368k7pyq7a1p4w2sk";};
+context-legacy-69173={run="0j18agzfhwwzbdnqavphvrp0lpji2bv21qh28kcvzl269mgjgbc2";doc="17wsgg5zfx0s96wm2l9zca060z6p3mj88hcrw07vy44imxv3gyiy";};
+context-letter-60787={run="0bnd56v120h3c235n9v2h6mzvmd6fy1g837gjim5fkkqd7jyzp2q";doc="0l4vgrpha5kx2990kdk4pdfljznlczlji0fxqsxs292yb3yy5a4m";};
+context-mathsets-47085={run="11r30c6lpcvkx7awgm70cb5darl90fvpnf37hj2mb7h69d281hv6";doc="16qckniq5v52m36m05bpnqypfz2jn4430n5x5zazx54j8makv827";};
+context-notes-zh-cn-66725={doc="0pdizaybvxvzh19451x90mj81ql98q91f6cj8mfxwxa0mci1b9p4";};
+context-pocketdiary-66953={run="1pm8zaypfm575ryq0jzpnwf5p9zjg7hzb6lnc636cf16y97a1vkw";doc="1yy38pa4m7bqfb0r1wxj1g3zdmwzgdil35g2lw63ww15y03k7w0j";};
+context-simpleslides-67070={run="0dgmix9w576vxmffbm4digcp00vvdgmdxmxwjzrrkici4rq31w79";doc="17djxi04rhg61fjcmsz4yjp7mnc7g1fbfb9mmkcf7gk8dwzrvigf";};
+context-squares-68545={run="0x0f2f3mwqyxaw49yjkyql8hk2mck2kq2mm842vpl9sgmrgjb8d7";doc="1d8z2l8r29c5yklfjm60bvdm8lchp17w60qr38gjdpx334bshyy7";};
+context-sudoku-67289={run="0fnzvzpn2d24hdi5g18f1mpaqkyrcf8kvkprqdz1jvlkqld82kd7";doc="0dqzxcljl1mn7qs7hk2pahvc5791m4c911j5dv85fwaladhjv9xb";};
+context-texlive-66924={run="1fg95ihx4wbm38j4rm4p6vdaiib6n7lcf43m444r4nb5flbrbv8q";};
+context-transliterator-61127={run="137wjy0whfbwp95h4grypwxld7kxlx9h6l3bkd5bpfnqhg70j05d";doc="1snnrk0h6pwg83qzsv6mk3n5fmirk6rxjih43rcs290amkx8i49z";};
+context-typescripts-60422={run="1vvhd18qd6vka9rg048arpwn61rqw3za116k2yqfy4lnp2rypk0g";doc="0pll9scpcsxzwgsy77mbpw4s0yv432h5p0av70kr81zzskfxabxd";};
+context-vim-62071={run="1jinagfnv3aghjn8gsack6zl9d3rcycwqmxir5jdjhbw4r66yp0y";doc="0gc1m894ad0y8l1vis5bc9n6avg8npzlqa4xr20z401nxhxmbv6h";};
+context-visualcounter-47085={run="0n20r8315py52ghivwy9kh7g7yj4ixakmkn97phw1fxgz21jk6qg";doc="18ncq5d4chmnmxmhazbjh9ypsm4c3577vgcmnx0y1pmzgb2g8pn9";source="18yyv9974cxzpw45rzw6ia2jamrb07bzw6gqchdprdjs0xmhz308";};
+continue-49449={run="0vwz01gmbid6b2aj32qnz1xrlk9h0nicjv9ix1rvqdad20m1i4wa";doc="1mzsj70v9f6srmc8ja62pph9j67p644hl54fx6nyahvr2h9vdik2";source="1q835904qai3r49yi8hrfxkh4bjf6913qs5fd2dv7myp1w93j5ir";};
+contour-18950={run="0xb8a0y3jazrq5gxfnxjl7qkyaqjnmyhjshgngqcsrw2sq4j4li5";doc="03rxkl9vhhqa7gpigar8w2h78qvx4k68chhf0881ws3bm6lg15sy";source="17sfl4npipzgc7jwqx740nny7fnd8bv8k4vav9ds765ky1xcs521";};
+contracard-67201={run="1qvpz8ybjc7yx8zx4kzcpjchvxrb949rqb3905rhl61shpqv22hm";doc="1jg8kgp9wvxksjz9kxyh3qqxhgjmalkpj8y004qvrxna2r2idj50";source="1v6ffg84czajnl6p6a1j8khnfmzssjkhbndz5ajkww64iiw060i4";};
+conv-xkv-43558={run="13clac7dhg2p69ccv2yjzdh64yjx02y0fb0imx9lsd0knnb1j3aa";doc="12dln1r2qyadxr4cy3xbwn18s5y8yxgxid22wpb2i42n5qc8j1fy";source="02hz64vbcy7vg363vb86vydaa29g5cgji2mfpn640dgmqq0s91vb";};
+convbkmk-49252={run="1hb4ahbgihnzqmcszxlq67bsiqprrxa9vf25q8yz31j70sg7s18r";doc="1h1iqcc1rjcvwg9p7xg5zq6sj5bi68s2cknsbwr6dbkx25ihwi4i";};
+cooking-15878={run="053wbmf3xrhwjxp77f1myfvz3f474kpk626p8gds939yx50jqzvs";doc="1db5wxixparr81vanwkvg097ll58fqpp3qkh0wz7mbqjkansp6km";source="1gka18njp7ipa0jp1527mhig43hhvz5bcdpvs95c61cvjrmwcdm3";};
+cooking-units-65241={run="1ainyz58nk9zyfg4isfgjk3g8gjw08ri8d1x9kqnymdyplxqankj";doc="1r21szkygn46i5263k6qryb1fhg9va71f3dcqxw1dh3f8f2bpcpw";source="0cvfhbr7zjcc8d5r453wkgmvnqwmx3qj0gl606sgrz87zhzra842";};
+cookingsymbols-35929={run="0kz8aaf7bp0y2ph0iia5lkrxnxch9r63iy7y4zpqcawh1ajl10ji";doc="0dws0sdcg13jpz23zvkw6vfnc34qc1s464nm2nbdybhjwc9gdbdl";source="1l1jkd6mcxdldvjyk9myig4jsi89mg6n4ab6ymq5lqf25d260h0j";};
+cool-67013={run="0sz3n82js8fq7fiffyb53ib1y49k0pg6bkbzgnzsk698y5w34v13";doc="1gpa5im88apgfqyv1l9g4mcmw6fmryksbx4nbldwlwxdvkwfwdf5";source="0ds25c0k113w365f0nylliiq1h76i753lfkccbbibs41rp2kg4p7";};
+coolfn-69007={run="0y25dmrbax6wxzlrqmp1j3h6xnvvk0ls4f4rl5a4a3hi167yqrkn";doc="07xjbc9bj6chvjqv03p1c37bbqr1fjpkq468sx6cp0q6p45z17n9";};
+coollist-67048={run="174l3x19lajwfghixzxjizxwqj8z2q9rys9wcly79gs8r3pmbxwv";doc="11p2s7wjrjdpzpgyhn4jnx4d98nbmbccbn6q1b8g3gr8h4mqvdnx";source="08196xxbx6fvhic3a9p8bwrr3ir4v9ikl2vj8z97m9zryrzjv1i3";};
+coolstr-67015={run="1ky8l5g09cj6731i1x7fc8chp7qhpc35xcinjrajjbzfjr637pk3";doc="1aj48ym4rykbz4z5rhfch5cfkyj14x8wngsvwrhzw0m58hpfpn4a";source="0sxdiic0xcr148841ngzdmda4bgk9ningsf91ar517r2hfh1178s";};
+coolthms-29062={run="1z62gl39f9cvmwap70q05jml1657jxg7lvq81rgqh878z63d0rzi";doc="0zqpx1c0lcrkp1zpwl776hd8gln7i5f5m5k5kjhcwxwngd8w8df0";source="1bir9kbsvayk3xkchg7kjbwqkhda81vay9d70hmqxgwpa0l38j6x";};
+cooltooltips-60201={run="1apf2qvfs606nqnnps2rny9ly6y0hs7yv8injrbbk64x3nxk86xr";doc="11qjqqicakybmnqz4vx5jb0cqsj8gw86rywj7ycvg96s93zkh12i";source="1spsydk6mn3qzclav2g2al20sdnaabz9b0f01gq95w2qygl26hy6";};
+coop-writing-61607={run="123rbingcrgjg5dyafciwz8wm2bpl9bz9w54pi2jim87lgibnf92";doc="0jqrf8pnpsq8d432s7b3qva93ydf8gng18fn3drfbzsvb4sqaf97";source="0yhynaxvvhfhnx97p5p12xf66zng989kddlfw9pp6sv5alxfnvaf";};
+cooperhewitt-64967={run="1a9jq9mfw37qavbqynyqpsc1i0hnbxwy9z58ipqqaffblqfj5xvd";doc="1i3wmhs3y0qr8g5srknbhk2fwbw4lxa732f1fch4qpsqqp20hy7y";};
+coordsys-15878={run="12vpxh6ll7q2jpsv85j68ij0m3b0335hflpqahk40dagybjkp426";doc="1jcjvd577886q8sqzcsqil81b2lm31vjxhbdrgs38fw8n6q9g0sq";source="0npd3qqigvp0i5zdgizm68sr1g5xcplgwfahrkak0kq4g882qmdd";};
+copyedit-37928={run="1rl23bq3fbn4rajc744ra2prvm4rmh0wvhc7jjsiw7sw2hzv467a";doc="1ihvynh96vgl8ik237pf2pdfzclslrn0i7lc64skx3q7pmyv11in";source="0i2pwjj4bdfsykwv6bchp2p7x0gpdbnyx37ri1d27vl72yi72pw8";};
+copyrightbox-24829={run="0n9z6dngf0z98bnzn6nl8yvy7dh1jmcdbqfxnzxarxzqq16f99ch";doc="1clg6jq9cja76j5x9laykndfqp0i5a4bfmqrxaa8rp6y2gnvpign";};
+cormorantgaramond-64411={run="1jdqzw1jd0r0qc4wnhm85kg0nb92dgvwnjyqlxz67lb9wgwddlk1";doc="0j6gq9xk9p2m8kwqvzjsh0s5z9x4q6v8klxygdahwgahvd0n8dl3";};
+correctmathalign-44131={run="0dvgaqy8pkk3plhqlxgkxkiwyhfzwcyn391grbqv764mvh4iar69";doc="1fd32yzxj3l4sp5cp9rnwv3175jz5m5hxwlfm10x282g44l7mjid";};
+coseoul-23862={run="0wqxvh5mnrl59ry0qahxzlfajgpp0yj27h0falxnr4m5iygv7699";doc="0l3z0fxsdlln0hjwkxf9ka9hw8zmmixml9lfy4kbrn88xq6z62yw";};
+couleurs-fr-67901={run="1479gy549yj0xla35f7ryvh7vkxppisvi4kz7ji9v2219hx4vkg6";doc="09fh8d9bgh0gmabiq0d9l7flkk46w8yzqksnfygmbprib15b65ck";};
+counterz-67335={run="1rad8irarp20xah97ppzipns4i2v3smd44sbfi2jy5dc0qibw0y9";doc="102axl32lgrdlav3fyzsahkcikmapivydbfwm3wkib624i1f1h95";source="0f8gspf0m2b78fr0jq7n4s3y0f80l1pc3qr1rzjfs6xdrg1nv633";};
+countriesofeurope-54512={run="0387czqiyawxcjqh22czyd8f7y55kcrscxmp28rcm8wqqdh2ra0z";doc="0h06f5rpizsdqddqdvvvh5p3nhm4y5aixjnxl8s0b90wpcldwrpg";};
+counttexruns-27576={run="0qmm8902apb9ks1ik1dxmzb3ivkivpj7a8f8mkn5xdyxbnqvm5pq";doc="0kpasflvbal7x4r1ni3jf30fh7w6wi68109m5ajcjqrjzxkpgmdm";source="0840fyw71mw3l5k5g01wd6hn41a079f83wmbyg64f4yhgjdjxjnf";};
+courier-61719={run="08g6lm12b0k6333pxcaqdf67v87fz5mrqp3jgal8qhrls5ym8q6r";};
+courier-scaled-24940={run="0gfqc90fq1nk7w5rvy3fqd5799aaxh48ia4wxcf01bhs4l7nrl1i";doc="17zr8bdv5dv8hybbjfvkrn1skn6xpl41yfrb4q1nq491nwbppb14";};
+courierten-55436={run="1maxj7wsjqh2ni75pjpzsbwh1f9abndka1ilaiwik1c21kgb44g6";doc="1lq4clwd38f8l4722khgnldjfk11mn1m4m82ppb1qk04qyh1v8sp";};
+courseoutline-15878={run="0mwv6bslzgm5ys4gl32mxcw42gkpzwkzrvxk6934682v85qi6f4k";doc="1k135zma8aacd0mf6l5v4zac2blqzf6z5xa40094by61455x48ha";};
+coursepaper-15878={run="0n8gikcli14inz5q85n6k63yg6dczlpi837mbxrv5552hqzpivwv";doc="1d8k6yj45x0wx790y46b46nhjb3zvv2ncbkhlzckq71fsi5ayp32";};
+coverpage-63509={run="1739rmdrj07q8s9xpxarwwds13hciyv3q41p18cm7md8qrdd74xk";doc="19hw1mx7ghigybh23b8v65y0zx28p9armynkw9s7mgpbsq0wld32";source="0spllq6j5rxqc6a96x0dx3n7skm4gqpp6fgas9vflywiw6i5vk75";};
+covington-69091={run="0imdahq466zkhjnxgnygyq8s3g2k8qanm8v9k2z2fcp0hjwz2rkx";doc="1qlxm07hw1fbch6acl9rslqsl1vh1h5sf41qpmnfkwy654h3iqv4";};
+cprotect-21209={run="016z5zz8njkk2cra768jlh2s9l3r4wmn50nk3psmk3v0i0cy0197";doc="1wjyrb0z85yighkw9a1pxxwilp31c5fjra7y07y0v1z20q6g3rlm";source="0lrf75hvlp6jpwfppkj0dwv7a9q51n897bwrf3gzwswb7icvqnf2";};
+cprotectinside-63833={run="021581zdl2c4j6crp9cnrnvxpwdx0jhhx5ab2ax7016hzsxff8la";doc="0m7hhy2wlagymkq0ckr6yhiav02y7b623gd47wkk75f48rm0lbdc";};
+cqubeamer-54512={run="1r63ahd6m6ll0phqaxc02hnbrf3f6xjdghrhn7wdqxnf8n9k34ff";doc="0rgfjw69is9i06blv1dr2ki6d8lgfwg3w57r3620r7yffj7z9hpy";};
+cquthesis-55643={run="143w42d3xw31dy8wdpqx01r8q9vs2an1ixnyil8n0q0af29j49bs";doc="1b7k2s3ils5s5yb3fdd6h0is494pss7s76awfn3dj6yxiaps5zvn";source="05gypg8zsdpfhp11rk7nii2vdw4rand5lw6ijkm23lbq2b5nwvwj";};
+crbox-29803={run="0ni16ldwni2gyzlivd5ii2fdq15h6np4mv73raa5g76i5rw42sbb";doc="1yk96bajna3ihvyhx482jrwiccbmqdr9852w11x00xkcvvc6azfp";};
+create-theorem-67712={run="05daimn1g2v9i0qxp46nq23m7a9hsrpsqfgx6f3z4c6jbcwnmqj7";doc="0bsff7sa7d12a7lbv3aqhkj6mia3gln8zvpc291d9kvb3fnnzy9p";};
+creationboites-68087={run="1mmj4xavpaqrim5w3cqs0nkrfvg23578nas2ndnfvy3zgjywwxxw";doc="0xsr0nvs95awhdjbhfd9baj7cchf3fx83f4cv5r6sb0l4lcwg14p";};
+crefthe-68813={run="044lg08mg5d91l25la181x4l449mgx8cv47k4nww9yivhzqv6nlh";doc="1i891qa4lyhzhpnsfz1hswn3fh7i1045qiysynnkcbfai45f6y1v";};
+crimson-64559={run="1k6ff9fb5isv2mfm7zvnqziw1rlbs8qmqrlbixq33nrab24kb1zi";doc="1fmfghyxbihw6ggf4x2scx2g7464bwqy0yql38m4r0vmmjmzi34s";};
+crimsonpro-64565={run="16jz8i749gk7s87h2b78nz6cclmgvfn35kh3869rsf299y4dbkx2";doc="1y8qngb1v6paqr643kh8sdipnp57lkbqwbk62r8nrxps2cvw06g0";};
+crop-55424={run="1hnf65q6mg5fq75l4g81zvp4qqdb092zb41m6nl3zw2cvp8gal23";doc="1w6ql3bnghj633ar1zwbv580py4f1fmdm4vk7pa3q7vpnrwrgh5n";source="15fxivp8d1xww6j5nbfkmsb0b2c2ldmkdy3ikw3m6jjk269nwy4h";};
+crossrefenum-66014={run="04zx8gwgzc76fsq6kmqy08gak2fqjl5h7d0d80lr5yvmq6aj5a4f";doc="1lsymlry86jnzjifjsnwz0swmksbv9hfdvjhy2i476i2ayvpdv7k";};
+crossreference-15878={run="0xc8d3g8j86dzpfxzfcildiyk8zi2apc9af88v2zg6zjra6vra1x";doc="1iahzjwns9zapa5y7z6yy2wjdcy6qiqrqvp9q9v4ky2zgsf7n5pi";source="0yajk2dxnsfy74r6a50zs4lc064aha0lzfqp26gpgnsx2h0bvpix";};
+crossreftools-55879={run="0pdhi9yij4n6bwcwbk077sdvwi1v8ww51g2r9ssfnmvmxs4zjw27";doc="0q80k648b967q9gcy7c3lb8ywk257zbsw04kc2gazlc61scviy49";};
+crossrefware-64754={run="1zhh89bwj8cc38p08878mmp8kl0pyr4121nhqssva9jixjckbbs7";doc="146zijsczba11hbks8j0dxygv998hhjqmcchq3ckgc08zrwvd9di";};
+crossword-64375={run="1jx01w062yn2bpnpmq29rwgxll00x05rb2i0prz7gnhfv7g4iwj6";doc="012h0rf49rlx7kjjv5i86jz5v36ln437ifmzv0hh1ww6lg60phpz";source="02sbn4clwrccqkr41azpzng7ck4q74lhbqzcd75zdv59gll9z3r9";};
+crosswrd-16896={run="1c85733q3x56s1fvag4kw39r6lnx4hr1wmhsrjs0jnyf5j6lf38w";doc="1abqbdfk7c7cx1ij56q8dhz87bc8ppb3hkfmc2z5r6zv94l34n2i";source="16didvmnjfbd103skc6i9qbim4kav9vw76954yfqijz1q74c880s";};
+crumbs-64602={run="0cka3j6aaxbgxvv3z7010myr7kdiva7jv7m1l4b7svq6j4md38vi";doc="0rxkzcmgvbm4mk26fwiw1wzng5bkf7byh43zdp4dh0mx82zn8qq6";source="0z88phhr4a0gdd3i4b5mvhcfxc1cy5sqpx7nvf1plmz34amiwcz4";};
+cryptocode-60249={run="09jivxl23sxqpa16m6mla6zb584607ssr46vfg97c828s25n4rz2";doc="1ksjx6zcksrsligx58vg3pihylj22qqwan4r4bk7zqdwxwww88l1";source="072cqf7dhjyhgw31l8im95h2m601j1bhm4zfl0f2q7yzznk4jr54";};
+cryst-15878={run="1jd8ny0a0mlhjdbigkkkkz1xn51s3l8w3dpcx5kwg10m29b3vwc6";doc="1rdclk91d2hps0xiqj4p0i4najjz9llq0nr9qvlj57h7ipyrahcj";};
+cs-41553={run="0nzzcg1yvbslhqm5lsfcpqh6sbzkmnmmgyakg9l8855qpa8g9bf3";};
+csassignments-63992={run="1mwaaf1ap05mp0lalyk89lyhqs26x4w1sx91vfsjxf697lndadda";doc="1w2mhq1yg24xz9a5ar92sky0b9j51nbb8k2k2ql114wafrkzzrnh";source="1k1iynw5nnnffx26ba5ydaay2qcz492yppcl8ws98xwhrqpjhx66";};
+csbulletin-65250={run="1fw2v0z3a9lskwgbh1kcwv9jnmaz6pf3w2hg2b93zd8mz7wifvab";doc="13zdp3fqbmqil5scgdcy0ngd6gxvdxs3k8ngm6xq1bnq7wy1284k";};
+cslatex-67494={run="1qdcnf755fak3kppl02yi2q9ghb17kxr2cyxc2y80idaafqgr9sf";source="0ig4a8nksmsm7pb1hxfy6gksfv27bgayqx60ygiaphcz0ir73546";};
+csplain-67934={run="14z479gkiwgw17pdghrxh5q0rlxnij7ccj49kgf3macwgmh5lm0r";};
+csquotes-64389={run="1zsh8z36capzkg695h2h7h8359fiyyafqa6p5m916pmz3vv7sfaw";doc="02f0l0w8k33sgqi6ml47vpqxlpssi9md0z2dm25y0q1ghhyyl86p";};
+csquotes-de-23371={doc="087c08c44811vd8p00l1xrkg5w6fsl8as64jq83m6gf1hfan9w4c";};
+css-colors-54512={run="1q3vmcppk86v2y72g47ifp129fj4rgdq3rvzgkzdzwhs1q06ipfr";doc="0rjqim8zdmgrz5dff8bjkz9kk456l699k5nplhc8bxa6dn7yrfdx";};
+cstex-64149={doc="1vsbq9a31ymvrj0bx48n93chyqmma3q7b49k7dmhb0hkic6h73aj";};
+cstypo-41986={run="0lfg2c985h1xlnx1fa3kx1jjrhw7kmgwvalqh5127w20r0lrh8c5";doc="18yx6l49qk1ayaz13qqw72r8l8z348d20yqdm305nalhqyksv1bb";};
+csvmerge-51857={run="0fyrqx85mklws5zny7gmmyscnsivjfvwmgwi52k3jk2c97nvsy8z";doc="18pmc5h44jmlh583cg0hjr24k2pj369l6ya4hqm9kwka0bhg29nm";source="0mggp5xankhif93firc5g01c6b160bkwqwbhc04wcm4ndlamvip1";};
+csvsimple-68566={run="0sq37wdvwd9m3c53wqai4vx80r6r3qn31s5r51gv1k8d3q67z49h";doc="100lbrliv5jg52xkgn18l53yxv2rcfsjj16qaj1hlc6paxwq5xcr";};
+ctable-38672={run="1xqhq2ww64h8vpqqzg3zbhh0z7xpjbcqcvxxm4a6kyasyhc9iyr2";doc="1nfdrjjb3j1n8w3x4v92v9l1k0smnygwj47ry717qgf2sq7f2b8n";source="0smcvvlq8n9ahx0z1kmf37p8zi5bjsh5q4x5mk7npay96s87z9s8";};
+ctablestack-38514={run="0b739h1ndkisr49d8y4q0vnbl9j3diqwl9r1ah8wk2za1ww2mi54";doc="0qmshnvbyfjhi8bb989hbffwn3447r91jp46z1yhhmcbjpr7clk9";source="0133xxb7470lyfssi1kp81yr1zsz4d8ai3qjy72wki0p7ijkypw9";};
+ctan-o-mat-51578={run="1iya9r04n18i8jdzqkn2i1rxfxxmpzcpga03rp0i6ykjj65v4q4r";doc="1j053gvvcznrk0fhg21ddyx1b1m1xj743b3w8z01lpjihihzq0l8";};
+ctan_chk-36304={doc="09ngqgs08q8bld334jrzhnd558lv7fajfppmfrkp4kv9hc5iyz9a";};
+ctanbib-68650={run="02iany03amlszi53svfv1mj6iwjv5lak7drgxcccai2bdvc8lazg";doc="0p9w2w064i5ykydkayv5wbdxziws998y8algms6gyz38rbmphv2c";};
+ctanify-44129={run="159jchim2b5idpzj5fxxc9hvrbddm6n00rpqsqffzdiijvp9jbif";doc="0wnyp4rl4cg2wgaq83xwm0vzm1b5xlgbrjchg4s3glh2zzl4mpg5";};
+ctanupload-26313={run="1dvqr96ir3gakxrf4fk0dka80inl6aj3kydcf0128vlq168zgvsg";doc="1gzfib72lfbgzcp5r8130k1n2d00v2kds0x8zdkqnikn22fq4jxm";};
+ctex-66115={run="0mk0iix0wygznqhzqd1wzi7hiabr751i0q5xrr3k1nmns68y98vd";doc="19z979xk8mylch56d2gxvln0w7vrwfizcf4apy4kpbm1nhb90gaq";source="09y03idznj0qw2ik0hq3xy1v87sl3xzgqfln1cnvk3c6mmfz9j7v";};
+ctex-faq-15878={doc="15c0g0x8w7vm3hyn6lk60jf66akyfcq6x8jc2lnbjx8ydwgb26br";};
+ctib-15878={run="0vm3aw2havsabkrr8sx4m6px9hi189vgsmqy0s922dlm479d8bcy";doc="0q7jss1ai1jjr66yk5927psyvvmp1dwbr54llvwyc4z131g7qrnb";source="1im0zhrw1lvzp9j26d9nh4m1mjhs5by6nai0dh2mrmdjw1i2222k";};
+ctie-66186={doc="1avhvyv70jds5xzwp7p1km6d8yha84ckqdw1r1vkgfb959wd3yi1";};
+cuisine-34453={run="16kvfkx5sj6xp5dz0gqlbp5079vh6snkpixmphvz2gzyaqnmafi0";doc="1mbsgn7mvy39pwq5gn7l3h6l3lc53vjyqyvc50xj8h9gs1gpdrb3";source="1r14f44bjdry108f6iy7byzms4dybc0wi936dwkg5ahwyq07pmck";};
+culmus-68495={run="0pj51p0pf4lr9997ilrb8hkz4ncdpml0k7zg9lmw4phdy2bh86ns";doc="18a8h3lgdldazj4mslszmqzpglf0vqpa617pfqa1ga1yf7qnh1fh";source="1mzijc30dcymm2lnzzfci1f99rsxwb8a50p6fd2qnynm3ixrvw6s";};
+cuprum-49909={run="0gqrwdh2gpxgc74zq97zm728ykadkrl066v77hjllmw7x6cjxrng";doc="1126yz6ks0rk92jcsbg2m3ibvv64xznrii9kxf6ss36hm1qwkgbi";};
+currency-48990={run="0673ji0kw0j0a764kjvla157mf5lcxa02wd0ypj82gfz617sn0r9";doc="0v8sfvj7g65r7iyjijimbg855rbbg5d1zdkp7vc58q14y8f34a8c";source="00p52nbdv0x1v71fb0ln63wb9mxdhy7zgagbpmcn2ca3xb83m16k";};
+currfile-64673={run="1mh6dcnzhfsd12ail2wjd5gm79rzz8kcr26x8wya4lvjmdzbw2sa";doc="17bfg4h6pvwhr589pq7j21yawxv7c04q06gw1yf1xsi94gg1mwv0";source="14sk7mh2p25zjl6sxinly5zhj882y035h662vf3qxs7garijqsfk";};
+curriculum-vitae-68211={run="0khwnk2mddfrvmn41y2d7p8704iidyaqzk7zri9gxkrhhhpqb4fk";doc="1zdlq51qv0vds2l9011bmwyvcb1a2lxjffai3vsjhrqvxj6aljj8";};
+currvita-15878={run="0xrcc3pash4g8mkmnzqi0llhix63hqk12vlwn98ipww68qnhfbky";doc="16v8r2vhvb9ssmnyj4zzgv2b2m10d3zg7wm2v6cn0p65hn5i76f1";source="0xrsqmaan5h60970d12bwm7k9nlf7h0flzmqhl0j3kbnclm0x8w0";};
+cursolatex-24139={doc="048s5fg8c19s3zbl2dkmh8ffkicb8fd9n46m0iqrc39i0wrh7p12";};
+curve-20745={run="1h1mfx67i3d2jr6l8qlfys9m6bqzn4x1wb74cjbrkdclyqn3lmd7";doc="1jv8f3izp9pvzh5qs3sh33c95v0z3wn88f278qxi0f1bc1k8990m";source="0l9cq8aji7z8qh0p45af8rnz0iw9m1hgc118482x699iqrvg96y2";};
+curve2e-67599={run="0cd0w4gkcaqswhwz8w011pn2g0yl96h8wm5m92jp646xsbq4a1r8";doc="18gcvpdckrsx42286xcdjlpmlq9s0541xkc8gx9f7s2gvjia8lr0";source="0wdqd75fsrihrdyg0h8hl99xlxgphwn723zx1rm73vzh4c5mhrqc";};
+curves-45255={run="150iv654y4x5lb3njd7dfjf8i0axlpf7zz6gx4wqgq06kddjr7w7";doc="1ddgy7gzw2871qsh99m0k90lgh8kf5883skcqxww0bl7b335qc8y";source="1r9c0rpi7q6ishzaaw7qnil0lzqgdvc0ybmr3j083af17snkq0v6";};
+custom-bib-24729={run="1m25bdq11g8jin9qfib12h77sg8lb87p5680d5dkqzsf5y3iq7vl";doc="1ydbi1r0jvl936ziypnjqw4fsr7gvc1gksaqr05wj1bchh28cyaj";source="0sjpwz9zhr0kd4qn454nm1s4rw4a6n4qnackkrq4qkriwzv9asha";};
+customdice-64089={run="11c6gzpmwh7q8dy334i2mz4g42ly0iqz6vh3zal4hi005js8n0i8";doc="1pq06p85kcki6rb5pvijly7h135mh0kwaxq8zz23l9c3lssjpj45";source="1ah7iacvkvf9hmkdysyfm83fzypi4j6myg2a215hajda1fxir3np";};
+customenvs-68637={run="0z3rgjsw4qdpr028yv4y0yscci9611c32rl3y7y6v0n0jvv43lvg";doc="1cg551725icls2x4in84g1zr8ydbyz2g5al4w17dk225k2f8vgfc";};
+cutwin-60901={run="0camjay52m2fbg4df7rrswfn30an4s40bvyvssdcmhmqlbvsh46f";doc="16wmnp2p3hnl8aanm29sxflqcz03qc5vlk9ziq38qxsksisxkl5d";source="0lqjiqlfndqmjmhj5p4flhly69cyg175s8wg2gah1fcfv0dayrn9";};
+cv-15878={run="1w9gx9mhg9wp47rhb6kf1w03mypydp01rxmypv6yvcrk551b5jm0";doc="1b16zaypfphbn9x2fwh2v0i212jx3pn84vj513lkxzzfh0if78iz";};
+cv4tw-34577={run="0nli9s73cns9x44vr2npb7zgfinnywgwajlr1k2hf9jldzm09dm0";doc="1b9zd0ky6h8mlcigfwj49c4chsznvbycsphs9lkpdhxv8mx9wgyq";};
+cvss-65169={run="1ja7j01vbzm16ms6hj0013q9f4wymzmn5fwdmly2mipgnfir79dg";doc="0a664wp1c11sdyhjgz5l561ngsnws5bgr78smswf2akj89637lnw";source="0ig8igf03vsi6mqb9a6cikqqipm7ja3ipm30c1gfinqvkmdsz0jh";};
+cweb-68702={run="14gn6rm4a01y6zl8qq23q46xaj50jj2ybpff14xg8pvir89b7g9r";doc="1bqzd57l1kw91dwl2l85760578jqpynicx2qly92a8xp92w5y9vm";};
+cweb-latex-28878={run="0cd2rgn25s02p2ga3509pnbc70iad936qznr2yl5q6wnlvd78lbr";doc="0vc5f0h9mq7p9040ksql4clcb9y1dxq7s1a4gzgpsjyla05ps3qd";};
+cweb-old-49271={run="0vx235zpflqpnrfa9kqq7wmc1rylg5bw1r26knfzvh3w1swbp4ai";};
+cyber-46776={run="0vlx0r57ay6jpybs6wlc1w1qpbd62cjq3snaqplaj6dkah98kcbq";doc="007g12qa9v04z3b11cdrd9z7pc7iba0aa2g7z460i0hi2fg4gv3l";source="1kivc83wjpm2rf2myk4079f1l8pyw1pm9a2j0iqbwshic2qfm86q";};
+cybercic-37659={run="1g7iv7xyl0a30kjmrwvcz2kg6y7q3r51344nf53r6ln1asagm68r";doc="1nman70rpgd0wqhgw84qg8acm243y45nhxd32dmh9y8ywabynvc1";source="12pbrk2bmgv25fa0llpk6pfgmz5jljmy1w5b6j0md0ni46ldjxpb";};
+cyklop-18651={run="1krjgk4a920bpgb7c6qw6jx5b7gv97raxpaby1vx1lh5zvbybfn0";doc="1fnsd0p8wp58imrn22zbswk8bdjgp0w9v4hcv8f7x5ks1czcas8x";};
+cyrillic-63613={run="1bbmw2lcr5ndbpkdy78y6fd30c52g4md6j5n6kq23fxxxisgyw3f";doc="1822d2kbik1h0ma6vignick4b4vwihbk153rwwgik82h57nhbr74";source="0h65281fcjzx3avppwxhr2y8w5kbnrqp9mmyijq1jdlbmnn7jwzp";};
+cyrillic-bin-62517={run="1m8ci739229igk1mgx2n5dqywijfs2dxafjxsmlpdyafj2vbryaw";doc="1nz4mvic87h8iarm83lckj7hx44ywq556y01apx9biq7632mfpjh";};
+cyrplain-45692={run="1wdcibxs0g53warxs6vz39s3chldzh05p7v1ksskppghg5qzgh8z";};
+dad-54191={run="1sj53bp0fp8d2d3qnwvl0lm7c6pzbvv8ds9ww3x6qhrna630iwaw";doc="1yykrywq662s311l9daq9wpxdcr8l6qifi5bzbnv0vx2372hhhw9";};
+dancers-13293={run="0nni21f6y9gynx1lsymb3pmh6w761q21idq60fib90hvv9jjd85q";};
+dantelogo-38599={run="03a5l0hdlr69knnp6q464x9610mwjkcl3cw3i2q10nfm5ywr7nsx";doc="19y2vbi5wwia1lg16rbwzkfd2chi9vw3m3xig48h0bsyy5y9pgbh";};
+darkmode-64271={run="0pdfdc1mf1mircrydvjlanb61mlwpv8l256g4yr4jix83373hzzn";doc="0as8lm21znzpfdhf7880fsvna1ivprd5q7jc5mlyva6gny6zf3vq";source="0yy8i2qxk7ms53mw05lk8lq1wal1rx3431wqfw4w2v74xy3jpmcx";};
+dashbox-23425={run="034nwqqbd4q99mzdd6958w6a3jcvvpvamdycda5blh7in1gwm1b5";doc="01zb6bc407282xhfc6ccrm38jjz2vyl96h552435b6cap68jv48m";source="1lgpiyfizg0vgfgz51wk3mhhc344gwra79k1xp95c2p6w32bgf5y";};
+dashrule-29579={run="050scy57rjz5pvwd8bbl4h32w1paigyyy7dazr33v28061yap9b2";doc="1ryclmf2l90n20qf516p4qz02znnp5rgjx6pfw4p3wrkamnh6xwr";source="1f05m420qbbk25pc5snh3nb4dx7bd38nwfix1p8ndngn7l9dfkcs";};
+dashundergaps-58150={run="000fzv5a00nap8ybzyijz7kx1ky4qx418jmkmyz5nm2rpnz8ckg9";doc="0zj18ikjshyd9jdrn4a8h1l8d9kypr38kx2cfsd9gllppp27m4c4";source="0n43mz7bnf05j31p99dmxr26rl6xzkc4maxra1aavg8s19x9pmd8";};
+dataref-62942={run="1jcbplf8f5952gzd0p1nq9bsi9iw5ix2mzrn4z3xjaazggm9im0g";doc="1pczh1h8k8apmi1kfdj03i5yhhpncg1v9w0wb3dhzfx81fi29xc7";};
+datatool-52663={run="0c4f0byqwfkldxc1430qixy52xsidzw8s78igrxxrqhvvls4ywh1";doc="07gg85s1sv5zq1n766av958fc1qqlc9ifmyz8kd99b27yf9im4l1";source="1w5rdaqnx1mrf0vagxq5gvpxskwm5m4mbj2h4xhz78p3varn2i6i";};
+datax-61772={run="0sqyx1waaw57v6qfh9q5mcf5bwz3j4v4c52x7dcnh7zh37cq6dmj";doc="1kd6qjkvdi3bnkibihzfhcabs3f6ik2bsqhg609qnk6c5cyz08i4";source="19va3a8b7f1l93b6ky1b3li4y6fhxiycg6gjpv9i3vyjhc0cr0sg";};
+dateiliste-27974={run="0vzq9y9ilc6pnhg60psvwsand6sd4w5238rq3xhwnj2nq80yi38s";doc="1gxjc45zim6vykmskmhrhnkviw9i7la56d2zfyi89c5nyjbry5a2";source="0ks8aka4km6z6xcn6sihsff935z8kg74cyf3czk31wmr9qay4yq0";};
+datenumber-61761={run="0jcpzz01g8n8gxl12pahhbl0wi91in08vmpwf3lnwz9cdsm2n53s";doc="1h7nm009as764cwkdxy64zh27qwwsqlchzfd2qd4wx9gpvg3dg20";source="0qsbqqh4lm075gfv9bjmb795z2awf78nr66lrsj72p6z8wa01scv";};
+datestamp-61719={run="0gwmg94562bfc3apjqkf4bb2g0diczdc9ik0dp2i7ha5kqxvczpr";doc="03a24ssl9x33jw5vqg2as0cvrjq9llpdr0qncyxl7i03mfpiwyy4";source="1byhi7ka2qkzcph85ba5kzqfqakqpw8abxzvf50cddppfcr2gc52";};
+datetime-36650={run="0xwh0sl6x8fqvaxahh8356dfwqkzk8g9dkxyaax5gz8ar9p3xb6b";doc="1j8zlxbyqpdrwm3z4pgdv3gz2firffk8wwr3ih1vcgn7nqxkcd78";source="0f644wc3c6zx6dgdam4wh6ap4gzzf5qn02krp90hkqmbrg080zxz";};
+datetime2-63102={run="12854by3m3pr6j7s6zm8inj2panr7c9h3ngm19gzybwy7cdb34nq";doc="1pk1k3rsd9h5csnmnhlwi73i6dbwhlpqmf5z7kxgy9czmarbfg56";source="1n60n0i9iwh8qyhv78z4d2afsfk04k912ixjciblgnik1gnd4xjh";};
+datetime2-bahasai-46287={run="13xslpv73cvxfs9m010qnnqsrz9ncgci65ha89y1zsi87fld4xfw";doc="080zpliqc8wb85gqx86klrq9rj7p73m5vnka5qmxzj60kvicwlk3";source="1jhxyrxl2f7qnld898b1hhga80wl6b6xfhi9vd9ka3w373qgqfjg";};
+datetime2-basque-47064={run="0m9sf0ghni3c2qmr6byjjy88f6bjj4hhpiy9c5bgisc0ccb11jn2";doc="0krgk4krb8yglk1a0fvzhgrj6b2n38gn8kxin23p98b9928wmcl3";source="1q9h4jli6fcsd0vqlh88khv10gd6gz0vxd4gx9ikbrvgsx9wx25y";};
+datetime2-breton-52647={run="11hd7fq61g7j7nxsgrw94hdrrn54dnjvh10rfwcn0x6ck1vxawfg";doc="1h50bi7q6gvv3c2qchrx81ybly1svzyirhdcyy2swzqda2w1x7xs";source="03ppqjw69xbkvqnjfkqj0zlxsg4m5q0cx2magq88f3wmjp7kw2l4";};
+datetime2-bulgarian-47031={run="1vx3n6n46kzcspc10fwysq7xij5dnlrv2wn6b7pkfbl4yh1001yz";doc="1yfgdcr1l6qji2x0i9gs17zb5scc9p91cgyk1w6brhy5sk4syns4";source="00za8skfwr1mhjpizgslppnlg05rwab3nbak4kbsqglcv0nivm93";};
+datetime2-catalan-47032={run="1lj6407mzspkhh18yxxmvk3srgdpf8c5r06sycy128dqjkix4ma8";doc="103nx5macgfrj8hkvyyra24378g5n1x4vnxi30pjkawapwjwk982";source="0pc165ql0aa2wdwkz8wyk4yafxr0j3vnp98vxybq1x3fwfqvipv5";};
+datetime2-croatian-36682={run="1h8nxr5n9k278pngb36sswi6655p0vq442x6ixlw8h4mirlrq9jk";doc="1lma00vhrjkvldgc6iq5p9k2ky4cfjywxdzy897308yxrbahm0rv";source="1xcdaz38mm09i8zc8jpfxpbs3l2n5hhv8nk5xxw108x5k8vb8fnw";};
+datetime2-czech-47033={run="0q8f1ksl8lhkfxb2si8l84l94w4nfgav1ybfryd596kmcbpf6iga";doc="1wz7sznkpk9rik6612vibk2zc832qxrq4yq09rqwp6y2nar0p3vj";source="1bism4aqd05cjjrxmsqxxpq10sw72855fk5v2wjkij62yawklp15";};
+datetime2-danish-47034={run="18shs9bi583590a50jszym2pwcwgbz39p75j4nj5g32bwap262hd";doc="0dr9jv99c51na0b4ds6ac4rc26na0v0rbjybna25fiy4b0k7dgli";source="1h71ibvmhsxi1j5h2sq1zs29d466hylm7w9pl5xb491d091nxfl9";};
+datetime2-dutch-47355={run="1s5ff3wc9lgvz8md4kwwlqc792s4dqr2mcf0sif0dv0z8ssi079p";doc="1562fdf0c1w556mwr5gfbc5qqnrbw0f8i7dc4lwh8gfnp7skirc8";source="0i1kv624yr4zc184vy2y42qnycsqq57349d49glxc9lh0bpc9fgd";};
+datetime2-en-fulltext-36705={run="1bnmzpll7s2pv62hafbwxcj9i0c4s7vk1090xg2zvf80d0k0biyi";doc="1szzn4jcgchf1h8bg507lmb4mzdqx60k94v84z2g8h2pv7d5ip9z";source="1vrhcgsjhb6vfh44lqh2hx22zaw5qiwiwms7lnzwism5zghdkaxs";};
+datetime2-english-52479={run="1xjjv46vk4s3drlzvs7iprw3zhn1zk30bwi2dgczjqzk0fxyiql9";doc="0iyq0385pj2lqmd5rwyanry6brbwrii4zg2jjnhp2ib404jwjqf7";source="00sjzcpsp9jjfn9fnc1fmq19448qm0p0ggi2yy7qmz426mqb3g7x";};
+datetime2-esperanto-47356={run="05691xa25qp015w0cm5mzi3qrb88hlaq5jxjrxqgid1ni9rpgwh8";doc="1c0dhq8ll04pl3ics7d3p8r73mdawnyridapfr9540cs2a1xjjbb";source="11xg3v8dk7aiv9ms4nggsm1xs898m0zzi7lszi7jx8pcmxqnz851";};
+datetime2-estonian-47565={run="0vdnvfswgm92ncrkh11p523s6vczz1vdxyjqjl9cpm1nfj7wp14j";doc="010i5rcy8pc5y16rwhpzzywlyna031g6s9xsdpgg0avci1yvw20h";source="0xsgj8l6hipdb0f75ckqw1h2lmdkjxxgz0mw38pc1kg6sr4r3sdf";};
+datetime2-finnish-47047={run="01hjh5lmd2461n0g2a67z31h80wcfj14b9y9amxkx4k01b1268li";doc="1cihjhhm37f38rknm45ndli3kmgrb1waxfncl1fg9l95hn929cnh";source="0zi9ydsj0zjrg3c7618fxxabas6zhvdimbsd42n8fc5acvddhi36";};
+datetime2-french-56393={run="0iznh6qv41xcaryyh70lk26rmrk2j0j3239hib8g924zqgyi83p7";doc="0f1j72g2xqaq64wi1jkllhkpxbjm1j3d7wraq42x13giv72g95w8";source="018a641mqcpj1maqhpcrp09msf9rbr8a5nd16hk8c375sh2lqpap";};
+datetime2-galician-47631={run="1g5qmiy094yrid6jh3xvy783kq331bzk0lqzci7jsb2izymz0lqm";doc="0im51qyxg5dbc6p1w3k4vs63d7nyyipd2ad7z9czlfid0n4ywksf";source="0j4i3b3mp1bpqir7imsfw2y1098ak0j8zs7gjhm16xdrb4n1xhcl";};
+datetime2-german-67201={run="1n7s5fj27rlz61r63s1mwbkxm62ddb2izz7ip4fb165d0bbba8xr";doc="057p9xgdbxq31ff43qi7lr4wy17nk625dnpczrinfd80xn92dhsd";source="07dv92w3rfg0xi6d8n6ykp0rn4pj6k8knp9sx8an9bhzmwqw2yw1";};
+datetime2-greek-47533={run="13a1lpvg680881xpgphzni3hcdymvph56mhgy0jbsri14fw0mdyi";doc="1kkl386rd0h5psr1z4aw32r7m55in62hql8x9c8njzajm5frhf44";source="0kmwn8mawmxvrgx5d39j92p3r1nlk1z378z1h2lx129yz4qbsv56";};
+datetime2-hebrew-47534={run="1b04g9lm0g5128phix3mnx9yphg07ig7p9d149rw0b1imly7f6mv";doc="1lslls4q5j1l9a5m0gzv351jfc93ii0zzcb62p3icq2qjig3rz37";source="11q13hms2mnqyxg6hc3279a8hs88j2d7v7wl90v5avwgh8923q55";};
+datetime2-icelandic-65213={run="1ws2mn3gf57b8gc1q7fp32li36mvmcxf5i8p3ikap2swvd9y3a39";doc="1dm4vg1jvsq94sn9nxxcasxmrs5i878z9bbrcf88yzfx5bm6wbfs";source="0vss8vq4kzzj243ha6gdvd9g5r85ar09v7y2yff2vj41gwp5zmjb";};
+datetime2-irish-47632={run="0k40sibvdqhg333l0iyhg3zs0fkhfbkqhs64ch9hs0kpw1mah48g";doc="18yd4icn0vmmizims17lsailn0gjqnhx4c7yy5jgrycammbjns03";source="1hs18kcmzgif8jcfp3v87h6rvrhskcvi5jzzspp7zgpq73izb1nj";};
+datetime2-it-fulltext-54779={run="03nr1l5gzwzdg4simif6wrwzg9716vfy1nbp8xfl98hs3sznhdhi";doc="1rqkdp81zg5sq5klz10v00c9xzb162dsmqgic2y3v4mxi482iy89";source="0y50s2mnyyx5kxb0bjbbr4pr7ywnfq3aqhqybqhd5x6rqpwagnd9";};
+datetime2-italian-37146={run="1if93khnpiwn2qpk66i431aw55y43qr603kdfdfq76v4sq4zrcys";doc="1r7gbm3ik84ny6nk3fb36g337imfq7w53cmk47qg1cpmff6c800c";source="1ckrmbv22dm7998r9p3b730zyk7ldzzbf1ds8ac5syqibh8wh0dl";};
+datetime2-latin-47748={run="1xgjcby4kyr6pb7zmwvwyhcq5y468vvja64l8bfivhv0n1s6q2cs";doc="07lvgcnpi7z36l21dwbs1s19f3afg55i18wdjcc9d02566g2fjv3";source="1gi5n1sf6v965hd4p0c6d8v92myhh218ql6bgaarsba1axp2c1as";};
+datetime2-lsorbian-47749={run="0vpqvd3fcmd8kqs2cj6ix5g3ci9zjr7i9ym31whryras2cm6r24m";doc="1ysrjnw655p1jplcxajrjgd48sndqssm8j7gv869nf0ngx4mx1rc";source="0875nzp676qv8vi3f37k2cbf7vszsrws6clyldqqayxkr7gnin63";};
+datetime2-magyar-48266={run="06y57br6g9clfscqma0lqp38fzp6rrxja3sz5x6jgi0acyljxzxx";doc="1mcw5rzb573qav00jz611576lvy8nkfl3g92wj02szb6fxq66g60";source="1697h8jh2gx1ybcfhz8cqzvk70h83qa3028hqi3c1rhkcbxbrabb";};
+datetime2-norsk-48267={run="1kcdkppmc5h3w09bwcrvlsxcbcawksmdam0x5w6zbqibvhlhvh78";doc="1vrip0mq47w2qn8i14ckazpzhzrl79dpyj7zv01b43xw5zkyqg4q";source="0rkjhbqppncaw67pfiihy2grzlcsaszi8jnxhhvb2sf4i3dpqlr9";};
+datetime2-polish-48456={run="1mndpf6vnb7lbziaj64aa3q796bv17mh4r9s3p0y2k8yjrllql3m";doc="1cn5qrcl4jxcnn90llhn6x7rd5zdnzz9h5szv4hhzbn9i4k1ci0f";source="1c42vallyqmpjzivcfvaxidhi2rs05sw6xbkb319dznl1jmdby6c";};
+datetime2-portuges-48457={run="0ikj36y2n7zlxgvwxd8z8vmkm4gwdan3si8bz98ajc1z5yncb7ha";doc="1m4ij8xjshi23hrm723m6vsbijd9cbd49b29fr2466sbxmnkyv22";source="1r0nw953bwgdz3w150s78s0rpd9c88djygwc68sr3dkfd6iih05k";};
+datetime2-romanian-56394={run="04jypimj3pcvnalkgzwzxvgav8s0g6c7br1w5hk769k7aqjf7qx7";doc="0nv47vpf5gcnj86f1m24xbmlvhf7iciyjaz2kxbbsn4yz55zmbmv";source="14324lrmh75g4jigcbcgx9zyxn0318k6my6ndvymamldwln7gmmv";};
+datetime2-russian-49345={run="0m3cmm2ikili85z44mmsnaxhv3x2s6xyk6kkfr3kaczn3w8srqim";doc="01rfdj3wf69j976mkv2yxw0ns4pzf852miykknni4zw7lbcki00g";source="1x931h6rnzm11ipfa747x306iwn3381ahcf7bfzhg75p8707glgs";};
+datetime2-samin-49346={run="0wqnsvx33d68j18lm0fmvjrdg8g5hv0xwzv6wqnb8wwz1l5zmqvj";doc="1wfij9j00pqs8bapbjpmg8xzah9509vrsb9h8sqc2abdjnqgkmdc";source="037gm3s8rxk4chj2q9yilbkvg46dxnd2jpr886ibydfp1ndnqcp1";};
+datetime2-scottish-52101={run="18c3y6968css1zm1pryn3cfbdqfn9px0n62bq6mapmgbd7fi2plh";doc="04dy9syy4qmn36mfy1agxjzd41prwqzlx5f8vpyq3148w51kpp1j";source="0nhfk8b19dqa08lb10sbfwp3c2f4rn493dgp4sm254bk00nil1gh";};
+datetime2-serbian-67201={run="1akyl3r70rwdyjjqvpsmh5m9g7xsdmdmx7l9qyh54x8c7gir7wd7";doc="1kgkpfgfqj99m0262zcc6b7fnik83vr45973720dbf9f5gvyin95";source="0hn4w3rw6mqzcj14a55m2hch3ra1ax0kb3l254pfgk4x9l3x028v";};
+datetime2-slovak-52281={run="004s60h3zi0a947ayc7kk2slxwl6bmpba8lxm8000f6yaf00wyk8";doc="1wblf0fd2lb6b05vvb31a33lz7dxakd5k6y5pcvs6iwjjb755n52";source="17hwr9yzpdkcvqvm1fa4qvacgica9mm29npmcl7xc3c503h4z6wi";};
+datetime2-slovene-52282={run="1lcpx7nz5lqb6pdw2j0dybkilavp535pxijs13nfl043xizh4brq";doc="0i6p83lixs6maiww4fdsm09nql3xx8xvs2qz38r5md4r5zzikyb0";source="0grv3gcm8wjdcx9smsq3dzd916pg8kcvgmh6s47xh83wz00qqi36";};
+datetime2-spanish-45785={run="0ggb24w3sljmmydnjdkbg34n9mszjwrqny8vl70fcin1dj69njcj";doc="1iglnacrcwwmc43shhsaamwajlb3mzj9dgqnd5qg3v7ynlp5zblq";source="0fjkhxqgw1yb1nzfiymwv8bsv6zlnwvdjl7crd78n3yx1fgv9wd8";};
+datetime2-swedish-36700={run="1srl9lm3hbsg3bwdkdw4bz7rhhnkkl6pihjky5p2h0jr9mribczm";doc="15ya3082by696ysi8gj7d0x5n5g93przna74r0g8yv3qpqkv52j6";source="0yswvrgh6xg34iryy0anhb4jac8q0iyvdfw9bsbhaz1xbldn7xw9";};
+datetime2-turkish-52331={run="158prpx4ma56qvq6ivq7ffwp0llll5x34af194qygxs0ldsgjlwy";doc="0n47wgnw5kvcn85s1983dg3fbixh7i4p3lxrfnd7qvaxyrph6lw5";source="1hnwws0y43d9hpdgb63y5pxr6d0ahis2q40z705b199051lg2qfw";};
+datetime2-ukrainian-47552={run="08ba6xbivl8gv2a3g0p4ch969zq1lid4zq3vqqvgzkhkdsvc2zkg";doc="0biih09p6a90qbjck5w0qs4k8lnqdha0xd3f6kdjmlljqxk24g5j";source="0mrysl74pfbs533h08jv5wld57s30nsq6mar2n07668nmplqj0ss";};
+datetime2-usorbian-52375={run="1dynq4qqi7mpckzcmwvfc17hvnfjlv3n93dwypp2sxl1596vili4";doc="0pvf7lx3g09jy5nxlzvgsixmaz9bkcq0zlhq8r3ijd743sq4y048";source="0888x4b0wjqwfrg96rcpxfj6mycdpwwyk9fjavj3j535nxb5hjxr";};
+datetime2-welsh-52553={run="01p4mxn78ynyan6pb9598qmi000alyaiw3bh83w0l5682v2fi7ip";doc="0rkibaqirq4xgy6r7a1aws6awyamllg5z5zixb3imapj3x6c8p1h";source="0d21jimjq8sipg1qh4fxwb9cmq3sga0wjlrcqapjpy559bnfgmrx";};
+dblfloatfix-28983={run="1r8s36il4bmqvvvlrsdbhdp4nanbyd1lh71dac4f774bf5pkhzi3";doc="0znp5j2v20q7bsic5j7cjqxmbi1dannffl0b14g2w0jp3p6hpfxn";};
+dbshow-61634={run="0cfp89n7r5jn6rsg8qrjmwfzi1i9qrvxh4aiz4r33sgi8qy5iljx";doc="00nksa78l2hi8dwp72wcz7b4sx1z5p88c9pyha975xr4l5lbli4q";source="0pgyjb07flhfr0dy1rqk4j237wjskxfsldrl58hzdanipqn0jyyi";};
+dccpaper-67890={run="0pihvkqcb9qpkq5c8n1n1wlfip87zql1dzxrai1dlln0rrrxhycp";doc="1762lsfk6jg13rkkiwr1y8kc6xlf5y714jjfiz74zlv9w8ixgxln";source="1pjjhcbbx609rgrbaqdp1xkn7cafwax93jpn8m7wlzy3acl31lng";};
+dcpic-30206={run="0yfjhpn8hr3yk4dyjfzbc8g7cki64039lb96naacyv8mjhqdpgyd";doc="0vxqvnkxm00k0xqpllcnq01si33wyg2mkhpb7l8jxxxizn3wf5vi";};
+ddphonism-52009={run="09s324nj6g8nlib9wilpy01prixrw1ilwlvl638hgv5rxsspza5y";doc="0iirifr55s86nm5512ii0qm8lm4zy3jbrbk333hw27y8m4v9qd4i";};
+de-macro-66746={run="0pw8b3v4yy4frxa8q3xbljx7m1vd3952w01ra77g2x8b02msd9xl";doc="02zxl4xpbyjs5vwg5cskgfh3w2ls2bxlyn50smh0kcqas46vn9a4";};
+debate-64846={run="1v3wapccyxk2fnhm93padrmrarzdxljlqznw96h735086pgsni94";doc="1kivk2f6k1ifmh9w8qg698wvsbb21rfwwmr10bbvlsbl8xw22p7f";source="1yia0rhkwq65a9ggn6pkmr20vrvlcjkai30j1hm0jav7rdq9pqbi";};
+decimal-23374={run="00byxbhi2pqccd1vd6hsh4ri0vzvq1mwjnvqmqqlrbr3qfv05zla";doc="15v078s3d3aawihdmd0l1ndqinlsqz11xxbvbw0dyh0arw6d1rc3";source="1k88s0r82livblqfb140npf2p7lvmsqkpasbr93ihwjj9vp54xb5";};
+decimalcomma-69251={run="1gsmjqw7sws2r5vzm1vdp3mbwvxpally5vb7pn64d28bcmkvs28m";doc="197pqxv9sny07vfznzx55skwl3gj36wsqi89j24jvj7gfrm2a0kf";source="0bgiq61d31rzzkcib6z1lszydzcjwh3waxwhhfxf5mbwinlmwwga";};
+decision-table-60673={run="0v1654g69lsvcvky0yh977kz7s1b5bjihh6bfc4lqrzbpg92qijn";doc="1gpz0g8s61aryz5y8f2v35v0p8cbwpvsq1x4f45hrhd3hpk96hbj";source="1d40h7vcyaxdf8yrvbx2lns0hg3d0xy9mv9rmqpy8hkqxavzd389";};
+decorule-55230={run="0r5pxcpx29l8x1bw4hj4xp66zgkjgm0qn2ryvxy1d30dyjgp34zb";doc="0a3qvnknhcx0jx8x9gk7bh4sbnzv1mnqvdr8l03nzjcbmysvc3hy";source="1lj47s4k44pjnr0n06xdcb37625hkjclrsj4ccmkgcr61d85vkwk";};
+defoldfonts-68234={run="00h2hk4vhqn54sczns7nlgsiymccwikdpl702y9m9hvhdw2misak";doc="1xl8nw3p9jhb530m7sxkrsg3qpd497q4678al524b3gz85ps1m0w";source="0ssc58p013kjdh0p56jhw7cx734ngnkm9mvf1cslcar5pyh6s88r";};
+dehyph-48599={run="0fkqlsknrlxk8zazcqy4q3nisxr3a4x21aiwqhz8s237rdf3w39g";};
+dehyph-exptl-66390={run="1lk9jl0h46xi2bg724j8jg6i54jqdch7ncz1a3yk6xwfpjgmj9ig";doc="160z9xiqdi9x3wmmipnlarrhlj8r6885541vl23hlj61xd17y9xz";};
+dejavu-31771={run="1pxcrv98xgy9hkqhclyp0q5dgpgc80bvjzs378f0dqzc1037lghn";doc="1f42z94n6dpdq481n5wmsx5hx000klmbklghz77x8pc9shgvlka8";};
+dejavu-otf-45991={run="06cdqjqj0vcxrr2nlqs2qszssiibzr0pbimhvqjpqfdv2hhdxd0d";doc="0x9j42zm6dagn4wv8hz34x7cgybi6bb86whxvmmwx5slsbb6yqfy";};
+delim-23974={run="0k5h5wk4fn4qzhjcgraqjzf6ggq7rvr8d4c1j2vwxi37fa83642b";doc="167hklrsm9dh68nvl6inqck07zfg8w4gr9p5c2n8i6y6v9xlj3q5";source="1xh63b78kxngcc3qgzmcfrf4pw2saipw054pzq47vp2ajppp1sq3";};
+delimseasy-39589={run="013r0cgz7ivrjfhmpcf5rdfl2573q35qmw0bhprnamij2jpvggzr";doc="02s406bh59qy6g8ckpxhgl0b4xxyr4zf91a6prhzlmbbhf96xbp1";};
+delimset-49544={run="126ax3z4c36z83479zk56jcvdj5r95y182rv42wkm4lm6sy8v24j";doc="1mb85h29fp7nxrkfylfg59jbvjva7lmr7vvgd8nz7k09w1gf4x0b";source="00hp5f5pfad36n4lkmra8mc2n0ynnq9ynnspqfb9378cx3m81cxq";};
+delimtxt-16549={run="0s2bbxhbfvq0jm4i90sh6krcik8yk2nl0c39lzr1nrakal0k5lkh";doc="1wswrw94n5l1azs2aczv6vf56ksbagniry4rwq9b16bmvdy7slyz";source="0sfwmd0mj359qkchqgm8zc80ayqp0p8ppdgfn3cmayhf2pml6gyj";};
+democodetools-64314={run="0ih11kxlvnskrdbvxrakbljh1n08n1mb6hbmf08475557bp0nchg";doc="0kcn368yzx0jf04srh2lzbxj9n76ph0idfjcqs2am3cjp2mjis17";};
+denisbdoc-66137={run="0sl953nrm7iy4jxadmwhq2x6hglspyzxwzi7wcaqjnb3vqgzb726";doc="1p5b5xpiqhla4pmx0kw3xl0qwy419qscr8q3z4l1id4sqj7vy6b6";source="0idsm5fbq3k93jphv569yw7cgpckzn1npk1wczvji0zvd937pih2";};
+derivative-68787={run="0qqzrhm1x2n5xv633dmd3pw8p9i5a7fmnqp26wcwhy08dipmq441";doc="1ld2kpn6l7dy73wws4pw0a75cwjkpl402bddxghz1svxmpfnnn4x";};
+detex-66186={doc="08d017wn7a67pmp9b5yhnfg1x2q6f48qaa5ma4bplz9a782icwjy";};
+dhua-24035={run="16gq48zlsfk9llafs8379797v908khv954q8lw2dvzk0v69d0qki";doc="16l76rvba4fz3vfw8mzkmks7b7206h2dva5dgw3m0j30ds8d6vm2";source="06vws91qfar1h87d57c9f9cw04isjk0szhg2aiw7sc8ligs0v907";};
+diabetes-logbook-54810={run="0rmahxnjnjd677z42ra1mcp86na41sz9ir4chkpmaikhdvnbi4qa";doc="0qb2nyjc7fpc7yc632bblbjryxdx39xr64c4kxncdisi34am82z9";};
+diadia-37656={run="0gygfg9vs4gbp3r0h9v6dqc18np331c0hjfmc5rbh29i74jcm8jh";doc="0bm0sb3fjj73mcdmrsvan9pdla2ki7j1wwpjpc4kpfc116a9lzy2";};
+diagbox-54080={run="1p7wfkhdcgdc1gifr4im390w039609j6mg99sixgpq8f0mqqnlsf";doc="04i03qdy9gfzf14w1vz8nqqgw4hn191w423jf2ck5ibljwlwa214";source="1x1ixmmixi2sal1iajwnf0wvg97kj08hi5vv4swdiwqpd14g1i53";};
+diagmac2-15878={run="00jzm6pdzxbg33fbj19ih813j9wvb1g9hr01g9xjc0d6nprq9mcs";doc="0vpm9lc33x5xyip25kay38fhld0a0z4l6g3nvhbdh65apb4j4wfs";};
+diagnose-19387={run="16pikxgaf40vm6l5r0wk5jxbfyzy1jgpq2qhpl859srxrygdar4q";doc="0k6vxzd3biyrfwnfr3p2zvj5j10r4xsda65qf6ppdrjr8cvmjx6l";};
+dialogl-28946={run="0vdx7qnpp5s6j5c96207px2fdhylj2kv3ph9mr3jcb6jyrsiyi0q";doc="15082p9pi47vdwrdqz4kdcl59ymsgnanrrnil9p97c1wbmc9saqb";source="1g9c68a7pqpk5vfcnr95zi11km3bhjll06zminw2knk2naxlykhh";};
+dice-28501={run="12j86mgn8zph5w1gd1lmmz0dcka36b187vld6r2srnj9f398h7ac";doc="068pzhi6a4mnq8bj5xvg4pdgqb4kvdggybs16hpk8jla03ny18zp";};
+dichokey-17192={run="0bvv3893jxpblddqi75hppb9s0rxaiqbq70jns2x7d79afl7xkwj";doc="0m5zc521shp00wld4kyhp9xipsqfq00q1dqd3qp9ki1b2kmr5w7j";};
+dickimaw-32925={doc="1mxjqn4lblnpbmad3jk453lyx1qzcmrddis59j3jsgc5sp929w4k";};
+dictsym-20031={run="1ipmlwgma06nd1rk4y38r40y01csq1myqavmpd1f3c53k1n0v42s";doc="0rljzx70rbvlcirxr2kf0fmrks6g04zc1mz5hzfkjcn6xivpawh3";};
+diffcoeff-68838={run="19rrh9zzjxyd7hxfawi65y0cnr1ps5vzypk60jfki8s1bbk8l2jv";doc="1ximrhl7m5in95mxlmk7dpvja39sjvxz4awzr3vwn9w11qkhw0p9";};
+digestif-65223={run="01hym4d6vqja4hwnjyvs0zs0l2fzhdap0pir7cz7wxqnlcip6hl2";doc="0220wkv0w6zp4ggnqkcfcq388f42scywzn2ah0h9yhccgdikd52h";};
+digiconfigs-15878={run="1irv3jc87bpnc289r5zh7pgfdgk4bvfwbyv6666kyq8f8yl7m1kh";doc="0fnibq45xgwrha5vfav8lylnb6p2i0brd2k1yp8jm8id6xdsxmq8";};
+dijkstra-64580={run="134qfpb0sqyazfjyc7mid1rydyszc6gpqms787vq2fd2157zksz9";doc="0qmzrdzh0704s97wqwxj3wyg33rbbpq0mmq7hdqf8fy0vq2v8hh4";};
+dimnum-58774={run="0mrcnz3s214a4yxljlbrzpqyrsjlh8gd0llj96wsirlc1kpsb3jq";doc="13j2pbbpsnd70gmn3ap4sad4bvbwg3r00ix9s1m2kvx4k7j3zwii";source="0sx3y3g7jn0dbbfw3a8sga2fs9pz9710jlckmc464a5zlxmcyldh";};
+din1505-19441={run="1ki5xzdxgvy34pg345f1577cj93ps4mgcakjgqra8jshnnfrfqs6";doc="0wh1zkzzm3d9s5gvff6j847jsqpr436sw7ysvrlv0r5s3fb10xl9";};
+dinat-15878={run="0m040ib86lk9ccd4m2r33k8rgdi7dgga80skv2qif43ssws330r2";doc="1hvc4f56mi0drmdqr7qlab68b9dqkmczhj28d3lpyn2l2hx4dncx";};
+dinbrief-15878={run="1msbw91lljb18c10bia4zclgb1klhmnck6kf23dgpv5ihpdmzla0";doc="1m3dvm2d0s7xbnvywwwcnjcl3hr8sczp1lmpcdx8m6gyjspllbfn";source="13dcia7rzw0djajb71b9gq2isgys63zs6g89rnwxfvn41a0nkgh3";};
+dingbat-27918={run="18yzigyd9s0c7qs34x1km0am9ii7xywvyd9miicbdr6s4bjrjdz2";doc="0fxbmx6nz2ib6qfka1qsb9ky9r3xw5hvss532hn89yx40gb6qx5r";source="130qj3fs12j3sj93xlnqxch9lgywgwk3qchlil72dgmh24kg6ij8";};
+directory-15878={run="0z2kczyvd4h3751ndfywzfvxl16xrjl3alvqxpscjsplrrrq53l4";doc="0w5rhczldn9p28dys7pjn3lgs0a6dq4yr59n1969qbffbcyv2m5q";};
+dirtree-42428={run="1j91nhdnf4zvqpn6a3jqrcvfpfb0ml18n2g474n5d2k1017mdz4n";doc="05yd1fkkgyspqxi2ddmq3s0nwnyh1xk55lbzzk6pwxjx1s1cd5k5";source="1pl4s67bwf5vbf0ccfhd05yrmfss59kng0ys871yq74rxm4abing";};
+dirtytalk-20520={run="10msaqhpb66l95vk8l172mpglilhdrqc4qcvmq3v58ssj19kksjp";doc="13yv6x3v4is4l0z5b7a83r173jq7mkyqc8nn52sfdkr168saxylz";source="1jw485pgqr0l60rnd39jfn4gmac5n9k67q8ykn2fk3s38nklyzib";};
+disser-43417={run="0kksdx0m0lgb7f45g21yzfh90id3pzq17bhff8x7az0djb6n7zk1";doc="1pb4gzw1yx3kx6yxabm4wj99gmnwmx9vw30m3l21304axdxgk7w4";source="02awlfmhyi2cahd0dkhxkfiqqg6jwmkksv6134lyms798j0akv0z";};
+ditaa-48932={run="00ym9qcrzq9g72r5dkvqwsxig9gryizzznjfzarq9x9dvd7x1r48";doc="13cw5a4wvv5fyknckvm6qzhl2lvaqvqvlwi711ix6zq6db3ghfsw";};
+dithesis-34295={run="0spbmfqf2i12sp0qvh6875vp2zrgpkrhvbmjzwyxj6mjn1yr7r9b";doc="0w9xgl8y2w1f7ns2nn9j5rs7hd39w6as2drcjmw4dc0vdbklkayd";};
+dk-bib-15878={run="0b0ypkq5c3bvbz6633csljj2zqibcm0nqj4dkskikzv0dzqkilh7";doc="034zpjn14wia2zl5flgndr1p89b8jg0w91wzqhw5zfzmdh4k3pn5";source="1aj8d2r3myp74x71jkgi8ckzcr6ngsqfqqpv5id43awrffxicsjw";};
+dlfltxb-17337={run="0yql8krlb6cbi5vhds9s8qwy4010vlsi3szbiqlzrby82bnfpxnz";doc="0c4nvwlf5k1q34gsn3z0pb00b0yhprhp3a1mcrg9i53yw7chwsy3";};
+dnaseq-17194={run="0vsifiirz1mwmjnav8k6m27mm5qsn3iw01a9c056p4g4ji8w2v2y";doc="1n05sb0yvq1hm2wa5vdnkhr54fgdkxv2s4kd8dhzk2zqx6sdv4jb";source="07vdyylb7j94sphfz6c2szxhx7l5swvyzly3afky69lm356988zd";};
+dnp-54074={run="0jlvb0nps1ij4sgbg3clgbk34p80la1fhh9zihn9fhl9nrqk637r";};
+doc-pictex-24927={doc="0fdvqhkgi5j33rx0r4fifj69f4smn5w0n99vx90a3fw15qzxsg5y";};
+docbytex-34294={run="19f8kxa8pb7ai7npxxavcw8hbsskmnchi7vynzkbd0imcjvay476";doc="0q3by29jmymrf4pirwmfqxr6bdglh936yb1phficxlpm07ibp8mz";};
+doclicense-68441={run="1qb8r4lwjqzwv46fsqjff8l5zb1scjkq34pwnsxbymz1sl3iw1ls";doc="0isk98wcs93labxiygbf6hg2794l7m2wr8ck71jafd6by8x7l1mb";source="04sq9wrsfgg3s51k853yy7vn5yp292d2ii0ww3msrqnlpknvim7j";};
+docmfp-15878={run="13cxjhbafm0xvnng6gc9g03p4j79sia7jvygxmphgnf7wfndv4sz";doc="1j2b530wcpr8252lcpmy0c5w83kqbi9xzsrfbdngi1jmkfy4nlgv";source="1w8g6m2whza3w62ngsaslv7h2x7asijznwb9glx6g2vjv456sgf8";};
+docmute-25741={run="15ad8274dwgzk7fzs7i5g3ss02ld8in8f86339rb314zmraj5kv3";doc="1mrwispvif8nwjbq12jgzpwjn9xf7mr91pwg5bfdcnpwwy8l1bh3";source="1nfv31h23mp7alrm9saz5abakjsvs7rqva3q9zvxlczix7yn63qw";};
+docshots-69410={run="0c43i1x2va0a4g0a262qsk5dqig6ic4kkmgg18y7s78xi0ymj8m4";doc="0l55vpqsbwr7pln791lql2s325ljphy5gf5glwjjmf90cgx498ir";source="1hr4y4rqwbx3kbdy90myi666b2jb1iy6bw5y219xl3dyq575fj15";};
+docsurvey-69343={doc="1s14cdm4174mf5x77gr0gp59hsklbq2nrh486j3x9vgc6jv00wv7";};
+doctools-34474={run="1rdwmdah8rb2yiicd9mbqz0mmf56rpgnp5vwyjhax7m0zqjgqkgm";doc="02jrr4wbkdx8r44dpfn4g83j03n6yrska79ljnwigs77p5jqlyl8";source="03y13bijva11hqil84l2p4cap7fcm8wk6ds53nx1qizh66h8g9vr";};
+documentation-34521={run="088imchmqchi1ilwfzlhk8d4am2xjjgacnyw5w4mb6sirbckhi3d";doc="103rpywyl1h30c7jamp3cfi1rg89y48krdjbxc0calz8iq5n0460";source="1fzk62clv9ij07cfjcrwn94cqvz2piysij09y2wlkcs06lgk2m69";};
+docutils-56594={run="1pxswkjs901clnd8l3n13ghqypv6l8gxr3pnwn9i0zakvxz6gdh3";doc="11fzx9kyxgxr20hnyqy9nvl5rczdfyb43j1bjwxnim68kmy5bjyz";};
+doi-48634={run="0rxsgmqmkpabw1qw7k0ssxjmzkia323dl0p73zw7qbwdpgs4xx5v";doc="0h6k3bg9wg4wa4shyijr0xsx935s8s8igad0zzyk57q5g7lhhka4";};
+doipubmed-15878={run="05zcv1db1bbxp6qnw4ni3qjx6yhflad1syqabqbdccrfk5xim20n";doc="07pd08qaggy6q58as1aqfnbk77mc2b4kavbzqk4v11f5vp5v0bdq";source="1hzv0iaj8rxblqxiak3n855yw8gqmxz7l8jwf98qnbpb9cm01f0i";};
+domitian-55286={run="0rcyfp46ar0qd2jiir3vmwqmkcj8zrhnrivr0xsi7nf9xbl0xj1v";doc="0q7lbpc0lh2i6jw6dwr26d9kxpwqxcrv6szsqfk73h8bpv123ghz";};
+dosepsbin-29752={run="0qknrackr7m0s431vrygphzrk99wkrgdp6kl04q7f4lsffq12k9r";doc="1lhrlgyn9sg88052ib0jkwd88zvjpzqnz0ac5whl5gpr5zw2y2c3";source="0lqmcndd5m4hxslvpq4r9g1bal12vfdsncfcii71glv45c2hl2x2";};
+dot2texi-26237={run="0hb9mv8ai85smn9viig88f5hprj3dyj574amy9nzdr8f52lrbg2z";doc="0wa63gs8h9a5d94chiq1gr4lam8p0338lyqbw3bmf3ix3v1bzyvm";};
+dotarrow-15878={run="0wjan8m1171m5bl5x6pygfn0lm3pyq87vmjjgzl1zd337l3wz45w";doc="18d9y7mzfwsmy9c14ihj2blmikiwcwp2y462wjnmm8hb6gm58cpc";source="0f8dmgsrd2wbcmxipj0p40d09sgcl8i5indbzsmkfz7fxvnpr15d";};
+dotlessi-51476={run="1ii8ilc2hqdwck9z1lpbyjsgh47pkfh62r1yv6kdkafqqrxzpxxb";doc="1vc8bpzzad2k222ghdcqmkbd7541b88wccc108avzj9v85wfpjbk";};
+dotseqn-17195={run="0n0hgp5saipf42kwx4hxxgx66irmy91pdzcznc8vmnnlayly8s61";doc="1an4s3v47f08z7v5gmz49g4bbz26xcvadn74052nhrbmj8xm8fav";source="05zxrzpm7mcms2skh9mpv4nga9ysqwin8qjc7yy9prcaban00y33";};
+dottex-15878={run="1ykjw55qzv5vk1wk90qddswvj3ai1s5xx674vkf5r07nw07dca76";doc="0vk0qgwvmny4fpa9d0gwg4s8z68aaiw1bn135d5msgikbkhbbmw7";source="1ph52wyv7fqri6pxsi289s7svy4p4zap1bdzbwqpbsrp6v4ngjqa";};
+doublestroke-15878={run="1nfbbh7kid345jkcqdhh72q3fg2fh39fzchcbhfkvisvqmqs3cgp";doc="1vs6gkv9bzya3hnclqbwx44nf5s8vir0hs499dsya2q64qrmcp2p";};
+doulossil-63255={run="1lajwxs0i5971bvc2jmdi1ljpp3545hq9ckyrr93lrk0ghdv65qy";doc="1wv1718k51wpbzrlxy8qm169q7brbx0gy7x0mil18a8ik53r7c6c";};
+dowith-38860={run="1ffadlm7fzm72svbpln7lms9dl5pbrv6xjzhwbcsjbwy4smx8s6x";doc="12sis4raxlfwzdl5jqg6x7fa7wsd9phaawm9ydf91wf7d8md6z2j";source="1qm2v2lw05jk4nnfns9l1hldamjka6plg2zyly6vi0jlns741hpx";};
+download-52257={run="0dwivfcjvg12gsf4zikyvlyb0p1pks6a2fxdqgji2x79ashxsm24";doc="00p9cjzqqh95nlda8193111aa5kjagszbf65wfm3jfy4dahqxfwz";source="15shcpxz2h0i34pnm2nz47h37gy4xdws87p8yrxbfi4j10qr8c62";};
+dox-46011={run="1vv1arqah132cns24s99s18ixcrjqfkbq551d94pjs8di7fiik2p";doc="08x3h0750nbh20wsnlkfz59na5kvi9jsm63l8dh3l7b0szzq88cb";source="1p5xmacd5phv5ig0ga1wj32fqpji9fl21lbygb39qdjr6v3g7vs2";};
+dozenal-47680={run="10ghknq4nnyvly55mwcisb64cadb0afmsqjh8z026izs684rbsjr";doc="01m1ljwbzmzq0hcj6p95rl4rrgnjrxlxnf72f49f725xhfsn57pb";source="016lxqwf1cm7a7ny5znkgibpna1r13zw0cmzs3wk49zhqhkqmzvp";};
+dpcircling-54994={run="11qhxh5pgjyc98hnlbq8hfsb77bavs0z3yjx4809z6aypah5cd92";doc="1qrx0pnk1p046mx6nzjwgrfxaq1hmdgalqsp3cr6d6zgqwzsnms1";};
+dpfloat-17196={run="00agcljhzafzhbcfk1jbxaxyc3znwxd1j1sdhr982m3s1nd8733g";doc="1nydmlbk1p4gywq0hh7jnvd9hs9lxl73khbpi4zn5j4blzkb31x9";};
+dprogress-15878={run="1sz7msvh7wyf5k8ag857lr11dqwf12p1wzi6kdkwma05i8wwni88";doc="1s356ffii215bybc5cqg91gril5am5zzh5w4s1nf875yl4yjxbji";source="1f7ym5lr0gn24jaca509hbhg9xr5mhbr5wgncvvf937jmq6w2jxp";};
+drac-15878={run="0p8li8cln7674zd40w8x6izn2kf63wsxpwg3dpbjnp5jccifvsnr";doc="1lhibs5s6h0a97ggjkp1i8j02ry9p0zdq6pzjxm4ijx3fqj1p3rq";source="1478yizwfvzrpi50k3fxbs9vq7g39170jdh7l3ynkbq0fkbssxhd";};
+draftcopy-15878={run="0fxh7h37akz0s33vjmnzxjp04m7ynb0z6650p5wd399lfg5bi11k";doc="1z7cjzk75d3gwcb4dgvg7a8jl9bvzqnc7zn0ginqcl0aih37yg5j";source="11gswnpz0azxb2d1clmpk9bis9cijsd1hajll7jxm5fhnk6vigfn";};
+draftfigure-44854={run="0dhjlykc6p6jm6p0s0h0d74097ny29w84ns1pxbb7f8iwr8hhkvf";doc="0gnazf3bmbgnygn3pv0lzrlrcic3j2yfqxq1kaijkkhsr9w57jy9";};
+draftwatermark-57099={run="1xrsh755whbaxizzljcpk5an5k9s09f6hcndp1lhw2z9mfnl2na7";doc="0cnzbj2wg5kifqg08i081d0043462vswbxr68spnnxp2y3b5ysdj";source="1k66347n1cf3ap8406dw2qa21k6mazwhv6brr569i0khsxypfw0a";};
+dramatist-35866={run="0zrkdhvx7f1261r5b2d08bd6a3pzldvpi69iym5k6f79ziz0602q";doc="0vwk6zfvf89773bwcxnpsd8crbkmq4lr6hksp4dn0hn6rf4smyyf";source="1xy8fm9h9qgjna6z5gz28rj0cq65wpxpxcs4vsfr4vr1p3vmig05";};
+dratex-15878={run="02nyg30awmpp2yi4m6r9gbgz04irjzpbjhpp72j0qxzly8c8frqn";doc="1a5knp5hylpb1i7hkd9160bah7pps9b0hm00zgn9fk33g5xrvhbz";};
+drawing-with-metapost-66846={doc="0r1fqikx9iix0xm2w78s80knfwc7w0kf2k7fb3k25l1cj3ym14mq";};
+drawmatrix-44471={run="1806y5cdgnj61fy0lilm424x936dz2q5f2j2s3w71kzl5ivyf569";doc="16pql717cz27sic494xvmsw2mw9jxn71xka0k8fjys8j52pklqnk";source="1x8lc07xccf73vcvywmrqk8ivg5xb1g75gqhff12zgrp2vqzh6g7";};
+drawstack-28582={run="1lirkdnsp35l4dwsir1xyf4a2s608ymfc3r0hmgg9phiy9i1664z";doc="127c98z547disxksvhabrpnddrp5ax5dwbgy7nmyja2dg65yax9i";};
+drm-38157={run="0j0r5b2b6js88gy04d12w8wp14g7z9xcgc43y0ysn2xglcsja3fj";doc="04i8mw2lsirvzf3n8xgddd2jr2s45fbg6m6wiwjdz4d2i1pi98cs";source="0l3j52ypvsc8ma06a2z2dkqsa3vd7afqkmyrd6b3z6w3dgjlnz3v";};
+droid-54512={run="1fmm1k3sxdn2h6v56hqdn0l84rz1cgxmj586wd4ff41vfzbdnn5z";doc="14inm79ljwnr36dz97356iz4257vbvkwmbbaq7wdza1yf07gijs6";};
+droit-fr-39802={run="1wz883z4a7g4na18z50vd0156gj6zpkkl49h4k0dhxwgqibh13mk";doc="1ss2j5jsr4h96rqcqmm89mprnr6w98zbsxy87jlmqavjjc8k8jq8";};
+drs-19232={run="17jp9fvj86sp4ywgc6j1dp3pnvgllilbq75298qamnnj3f403vlr";doc="158wkgnrgwfg2ikbj98hmcaaymrwpmnmaxillksv1b7gxmdrphk5";};
+drv-29349={run="10dqig3wmp340m9h3n4yl6scg1p2a7ccazsqp7p8a4fkfw0cziiz";doc="04kgfqhilxpcc0h6rhpw55s1j14wsb5v8b6ykq7ajmacrpmyi50h";};
+dsptricks-68753={run="13hvyb7qapfby45z2cikqwaj4bcf6lvhaf3b6gq7d9831gxfwjhk";doc="0jjwa6rh39qp2659ijb3fg3cqz0lbpjpwmvj6zpxv0xhnjzrnidm";};
+dsserif-60898={run="0w1kihzrmk48hpl36a20fkz4nwp9z27in9xsi0fc3d6mhgdx35db";doc="0bwnnxypyc97jfcam0vdvpyxphd1zn31mc6lvl661jy10cpqf6b4";source="00hf5icf1n0rwxr2ms34z7r62g98dqkx5v26m3k7w1wd1jfnjzi6";};
+dtk-68849={run="1j92bv10qjb1p9ryqg6yc55l4cj52q25133mq021jq3b148j5v70";doc="133y8gcdk0mgp6nrwg2pfslxjm1jl94d8frfyxm7ml0dy18g4adw";};
+dtk-bibliography-69155={run="18i5n2jiy5znaf80rxrr9f376j9f52gr3557g8idkc2g97vxpx8i";doc="152r014y7y20h19hr44c0vifwpc2s1rafilnxknhx01zz7ln2hq0";};
+dtl-62387={doc="0kvnsr8nxrys99rp74wlxnisfripx6jpjjkqy38d3d4gw13cvb5g";};
+dtxdescribe-69348={run="0m959fczn0gyc9p96932l1jzfyyf426sva72fjhy23yjgcv333w2";doc="05sa7capgs7lpqw1qdcr28k9f3cdkyps8ia8vz74jm8nm2gigirb";source="0bm90l8zb6vkk05vrvpjm13xpfaymw4g6ycbc57984djpkmk22bv";};
+dtxgallery-49504={doc="07c403zbx7sxkhhrwrfw3np20xlqhdk893b4bd6r8lqb0zipp5b5";};
+dtxgen-51663={run="19c9w97wjyrq6g1j8n8qgaclx141lv2j6z6l5h13gmkmyw08vwhh";doc="04z9dy0aada8zsp8ckz3agqcsm29dnlx770xyl51rsvk2qwsxgka";};
+dtxtut-38375={doc="1szg0xvwm0jbzs8waillijzrff4kv04a73gsqh9c12ap427xfryr";};
+ducksay-64655={run="17ihjvzz7rx5zra8lwb72vyq5i27psvmlg22sihy2lxkxzy3krx0";doc="0ydhgp11hc7hl3ikwf9pgfwf5p7q5g6m1rmfcy2h6svv398zcg67";source="124lwhv0bfc6h34q93hjxpa5ypdiibmibx1ksn9x8892blg7dxnp";};
+duckuments-52271={run="17fz5mkr812ig337m2q40dcsj98qpczw53vjrsqk1skmknk0q4g8";doc="1pbq66k699v3b6c02qx89dvzsh45knr4y9s6a45gkm4a7mkk5nkx";source="0xcdlvm247d3hl7bvb981fv07nb5g24c0n0171vsk3hacxpshcsk";};
+duerer-20741={run="1v6ja2q8bi0w0jkyl3j960gkvv2m5b7n9lg6ql9rxz7sfjcxa3ih";doc="020q5ln31smf228xx27gbbw0xdcx9f5zh6qjriakxa9mhixksjjb";};
+duerer-latex-15878={run="1f23mz3nd7icknkz4dircn38y1k2k0pwq3r79ja4h85si6i13ynx";doc="1arjf6dzzkvql0jhxg09f4yq9vgx7ag9l69csrindj8sksvj18f2";};
+duotenzor-18728={run="0p9gq8i6xcfg4pxdnqfswjcnc17x7pzsp4iya9b3fjq4kplqv28s";doc="1bc1pycds7r45c2bzmjhxs2wv0f2wqyxbycfrl6g4fycr341h8gi";};
+dutchcal-54080={run="0j49mha6lif07hnfn2wdfl949kfal4hbmzg6zal4w5rgw366szrm";doc="110rbvidl53naa31ndgh6nx19i3rkawbipz9rpxyasqk61kvv6mi";};
+dvdcoll-15878={run="1b07xplza4b3ngh50czq8vwmhpr2qvkl5xbgd93a9acvsf5pyg6b";doc="0fhkdwyvlizlb66bd24pfncbg58a31ygnfg0f9dw5z9ccfrf50hd";};
+dvgloss-29103={run="0fgc0i7cn0kd4f682xny0968l220ypam3z33mwac6ifqaaqbiy9d";doc="0l467jcanablvj95l0sbdib6dblc6ns2jcbg41kv0nxpah2i5ms8";source="0b106p2a8xr3c0vxwx3j0qmxh2z842h5x1z22509jabry3sf1y98";};
+dvi2tty-66186={doc="108y0qxh13x0iivgsvkk4370f471p03nyl4x9nn7lng1wrsafp6h";};
+dviasm-68043={run="02dxk56b63kqiin2ad80hh4xrvbhbkidyi0pxi8c2n5zqdiq81sd";doc="1hp4vrd6aj2qy9mzb9cr8l641cvxx4aw1ra0v6yr16lkzcls7s4a";};
+dvicopy-66186={doc="010bs4iyaja7mq5wy9mz6fzxlxf9472c2zdm93x9i474dzgnh2vl";};
+dvidvi-65952={doc="1w153rqm7nlmcf6162glxz282nbb6b6hjf5h0p7mbzr0j1357sxj";};
+dviincl-29349={run="1qb2cl5jbgzjfgwqnvnfbbrbzxi4m64lajvz6pyybnrwv4bax0km";doc="046c2cl9azgfg7y2022lj8x7yw8kg2pgjdixxk5989ai850k2j9n";};
+dviinfox-59216={run="0bcq55p894m5hw3zdjz7q7ns21vpzjyihg5x19lkn9k05nxrs2d8";doc="0v2sy294w0m3kniwky24lpi4ic5d8qrm5722gd7vw6ddwkwc1x61";};
+dviljk-66186={doc="03pi78c8ghy2gghzk1ffrvf5x7h8c1r0pv5pcspwxz365x2rsbjw";};
+dviout-util-66186={doc="098pksgf2iamq96rmzg5fw7i9dlpvdksficsz1bf8k8z4djnbk8n";};
+dvipdfmx-69127={run="0i83g2476bp3zfgdvg11kmls969ip36z1d4w592946547ar2akmv";doc="0wid2ydcjf5jq34k8hsg62ndgishbg6f14p728dnyrbh6k4iqvwv";tlpkg="0mlhxv77q5nanqg2dcbd51wpbcrys9xhr22bvx3hpfzwykb5lh69";};
+dvipng-66203={doc="0r001q4p5569dagayds1c56y10ls6f6v7mmywiw81l995q16apxi";};
+dvipos-66186={doc="0dmaas4m9y4px53vlg0jr73xviki338fm2n176l8ldwqj0vvq1b8";};
+dvips-66203={run="0k89qqz9zx5zh13azpjndfzszgl85hq4513kaayf4k3spy9fn5yw";doc="0acfsqbpnws8m5y66fkgcgxf4sdr9sjha067735scn75wmwi9y01";};
+dvipsconfig-13293={run="02vgk91y80ch4pkj83vbiz1b2ccigf152hm83p607y4n4qn2xzsf";};
+dvisvgm-68950={doc="1fz3sa7p9wk2g1v0bpy87vz7nxwrh5bsfl4m734n6lhsh1bkj6fb";};
+dynamicnumber-38726={run="0y779azvla68n692x0gybg74cp3dk32219v67qfamfzz389nbs7s";doc="1appm3ddbv9ll0mbnid4xa459w9q89swmdlvdzy1fxdps4y0vpz9";source="0ydmlz697c46fx0xpnvcdcfm9sm0j3jmk47xz8znd2ghzg395fgk";};
+dynblocks-35193={run="1zb7vk34k3z0cvw6kz74s7831fz17mg3j9hw60diabc0q47pwyr0";doc="1m69hys2b7fvwn9h6q3whkpcnvi04hnhx7811s5fqhdfi76v4zk4";};
+dynkin-diagrams-67267={run="0iprylvg36fs9rk44a4yj6xn2q5vy6jy2104m3j9jkyfafy2qsy4";doc="1f54q909b3qgbgqgbxpi4xr4f06dkq7z0wh49q29b1gh2zvvdxms";};
+dyntree-67016={run="19kzb4j7q7dz993znni7pixv2qljzydag3jywcsgdpqvlnk1aq0y";doc="0fa2imzfskl72fvdm1pbhsr33qpwm41dzsfdipdlgww6116rlwjc";source="0hlx970ym3zxln15pm4c2qxliaj4yhv7cnak03hhbb0dx916k3mw";};
+e-french-52027={run="1pm1k7qb1a3h2b8kay9jwby382jxp3866b9m890rj9gfqdmwbfd2";doc="14719qp1qjcx4wjwcarirj7iz6qmjgwb95b308zqdr197y1cvymc";};
+ean-20851={run="19w54ch23s75mhn94hxf4nphl5dcz2w1jx138kr0phfzpc6fri36";doc="1rylr9m7jrv0qq6pzigpm73z34p9n80fg5rf7andmvv0fcpmggk7";};
+ean13isbn-57514={run="0bzvkzpi10d9sjlsc4df5v3y7qycbz1qkn7ngy97prq58wg047gc";doc="1gf076ybmni0wzhh0fsf5w4sj4pv3c3w7g7m09k9607y4havv20a";};
+easing-59975={run="0zdyvkqydl713p61izpcp2yz6n2rfsf853pblh6xgsjj1vlhrr0b";doc="1f8151jb5nzd8hj3sii4ca274iaxscv5w8fxp758ncshr3bv0avy";source="1hha1qs4wy6s2162w61gpik2hrx73r83gja1llbq80gyvyfgdssj";};
+easy-19440={run="0jrza9lf3yf4d1wm6nzwv5iyfia6625fjvflfmxsscbmwqickjhx";doc="0f72bawmxrxqk60xb61y079bqpxj8kmvn167plbq5whq5b1fsxfl";};
+easy-todo-32677={run="0fkwlzgx20lj44cvwv8hqv79v528k1gghx30lvqhg44wqirkmy86";doc="1yj3c25mhkp16n49riza4qchr2pqycqmb2k80syn5w3dzrj021s2";};
+easybook-69411={run="03sd459lv6k8v1kss8j62pq4fnd45rylxa6w229sh54xmzpfpq92";doc="1ac88h085rmcm3r25dq4abdnb46pksr3m9kx8hw62jcf3vvvdc31";source="1a3cxpm0hwcy7bf1mrsgw77rl5sgi9g6ckv6scsmlycr0bw4an98";};
+easydtx-68514={run="0pfd66n156hw6g2s2p8v35gjykacci9kpyx75zcl1sw95ry9407g";doc="01qw09bkafjmkmhg3wqqgw8javrar7zxrf9hr3c8xy14rc36qkyx";};
+easyfig-64967={run="164ncaq1l6hdrjp0zinynf825hwsky1xam2yqxphhk90438n5hzk";doc="0hc63z5456f00a2x70ckvf3r54zld4d3r63a8d4ra7502kk8s9n6";source="18f4bb9yf3f7q96w79rhx8h4svlxnv0xc6xwcawav63zsk40mk7q";};
+easyfloats-57204={run="0vbg5dz6wxzk20rn51xv7v526qg8m0ih3wikabdf1bfb4n093k2k";doc="1ncmmmf2w313cpsc9s4w0c3gzvx09r26gwlxhr9rszksvd4y7fay";source="1ih161wrkxf8sfm0zyl2m9xgmff4qs6qvsz7mzxbjl1j2zxzhhf3";};
+easyformat-44543={run="181x0sycxhwcfna2wblvijjs32zvqs6xl2am4hz8204mk321rjsb";doc="0fg7y02717rk6ikw32qxn6iw7l59h5vc22aif6hs9xjnbm3nhhfr";};
+easylist-32661={run="1ghjps30fa1jvfkxrzaxqvy5ilacdyms6dl8bf2qg6195w2sgm33";doc="13wgq2pz9jw761p2yipf23k6lrx66bp25l50446rp1xz47yk386g";};
+easyreview-38352={run="10wl0aihr4c55b08mxafr0jd1xaz640p2kj7n63w3wqxzxlpq42i";doc="0nnnr4l1b6qhp75n646pd446s7c3pc4fxsxw84gvfqgankfsx3zz";source="0p7xrqivvb685d0xcljyi4whh5vr6yahskdl63ynw836bmin1b3z";};
+ebezier-15878={run="1zmsrs7dpw5gwh6h0707gxcpsnbb8qklsqnyr0q30mziz1wqhdvb";doc="03afnc0nw7yzv03n4gq38js3y6x5v0kaxi5psmnzpf2lj0kfa7l5";source="0492q2l7yrv1h51x4swqzfp74k9kb989m0lxbgvgffh4gl7zhi5w";};
+ebgaramond-66604={run="067amcvp0bifrxyxsbkwj98g1j4m4mis3dyfm5faa6k53fpwzrgg";doc="1sbi8vm5c1hlf65kh30r21vmy817y8i8i9l3h17ys7dfwi0d4f85";};
+ebgaramond-maths-52168={run="1n8xfa9qmxsrpy78h98x95wks24fck3mykq5n8x0qasi4fabclnx";doc="1x4l9mi2cc1fx3qbis2ibshh5wlfn3sypxcrbcr9cwwhpkg07sqb";};
+ebong-67933={run="1skwh2sly6bckgc05b44cvl2pvn42y3970rvmnlh9xm2x5ql015g";doc="0fa0kdipnn5hgfpjh8rz3l9zz97i94v45xmsxjgjn40xqnai3v27";};
+ebook-29466={run="1jy79jrf8cd1rljg9f3g0hzkihxkpybvbgjnkzd5y6cfz7zaynp4";doc="13cj8a88qqgi6kl1d7kb0cizl4i2pjm51hqnz9q03249av3z377q";};
+ebproof-57544={run="12dqzyi84jlzm75d77crxbwv2nzyw8raypdj60bjrn6kifav7v0m";doc="1d6g3v3hskgd9wrddkhf7qxg160n6qrfgzxfswajswk0kg2w3675";source="130d3af0n0gjvnm0ad3g6pm8dy1w8zp0q7im3gv1kqbm7k5h0hny";};
+ebsthesis-15878={run="0vg8n4xrlxyjx88yzlsr82drlrigdnb870p0rxd1nv2ik2i1jzri";doc="0gqh1zxb1w050a9dqnc5vhx1jgmk9kqk9k591s05xckidhnpp2v2";source="0rg2bs23051ravdqv14k6yrrc993xpxf61zi8b94f0rjm3mg8f89";};
+ec-25033={run="0l9zf4zs8yw84x5rnyzaggz4idl4kmvj40c03jyxbsxsx6bi8jks";doc="013w8hdsln91k13c3ilv36p4vp1263knkxf4m3hh6vaaqcr55aw9";};
+ecc-15878={run="0sa6f5dbq3p0nskxwy8namy7hckd9ihz4j440v06fyfk6wd2dxn8";doc="0v95nvyv5ygfrwwr2mnaja7vxng3d5byglikkirympgqpkc59rv4";};
+ecclesiastic-38172={run="008agcka4wj694snynfgak1ycm49rbkwn3z58470adc4rwi99klf";doc="1xmbxkmia5pcr2l5m3rd12qzpq92f75rcbipgpvck6sqpp7psc8j";source="0c32d6fzzn090hi9nxdj3qbbhp4q11siziwr7m6lp2l285n91wj6";};
+ecgdraw-41617={run="09affkfqlsrjgn546h6fkbzi4y7dy9zgf4i5a8kw6lbgl631gvid";doc="1m42ngbia5ilcx6hjd0xid07vdvxmrb2vd4qmzr8bzzflj2janhf";source="0825jfxsmicfqv1amnjx69wmfw893pcdqihqx7vv6yd9xs4bqciy";};
+ecltree-15878={run="170bf0i0g2fnmmv9qh0jrdv7xn2xd5xmsw8dpvw8rbxfmn94l52b";doc="016hlxjhfzn2pgcpxi7hw0wnfd25idp70jvig7p8614pvkv3bsby";};
+eco-29349={run="0vp39dva31kjs4ckqdy49smhicq4599mqly7y9d9xfz6gly6z9zh";doc="1wb866ilp8hmxndqys1lpw6zb3l1nyl583z06vh8nfys1hp0x0m7";source="1j3ik11vjxc1dahd0p7jdcjjqq9i89fnd9514s1lq5499h8jg159";};
+ecobiblatex-39233={run="0mrrb3bm54d6rpwg8i534wmwkh7v6qzysvd020pi5pph967lqp54";doc="0mhwspy6k7ixjjxk5frwklasm0xzwbwk2lx684ikv195nrpb6y8b";};
+econ-bst-68761={run="1jhvw59f913d35dx6zxr42bcms0i0d12kxd832km50kqi08wb50m";doc="1akyhlnd9g3rnw6kqi6cm4h0mrr1f3rbjii36z4qydl4gri4rvp0";};
+econlipsum-58390={run="0xca6dhbz49zxn58g5bc2yis2zci9v5iypfh3h53rxhlkbfbcqln";doc="1pb6z051r40wp8rv5makhaxbf23aq5j5gm6pw1khvhk806rdig4w";source="0j26l888qx5q5j39875iab4106fkn3ign9fmbcmcvf42yzx7mav9";};
+econometrics-39396={run="09zlc6943vf9r2n096x6s0xwbyl4lnpcv8a1hmn81s5czawkrqbs";doc="1bv3m38gp92cdwhvpwrhs4p34hrmr8800js6myif4r52gnd1q4mb";};
+economic-32639={run="0jyw807d23b22md2ib7xkgi2jh4mr50pczjbsylh2gdgsplxgaw9";doc="18jn833w1chbi0qamdxbrrp39945drslxd2jkzi2g8wcca7l5b71";};
+ecothesis-48007={doc="1avnq2y5l2bc2lkf2g16p2vh77dabv52jr6jrm4jfm1wdapc6fmq";};
+ecv-24928={run="1rvj3rf5vrjhqsz070id4i3l9svwsgclfhkjzxlb42va1bqxkcdk";doc="0cp3h8pagsxpr0i28v8x9dh9j6imbprd2hxrl6ln2m75c9ki2wmk";source="149jwhqpmfn6gwzkcqpilxp7hqnidjlvhi1khqxnvq3k947x33js";};
+eczar-57716={run="1hpwjxsr5n7f6zdc3ap00d9l4346yvavsy4wjicj41b1g7wl46v5";doc="1hvw36i6szhia91xq2y2jzkngy0aawxw5azpa77026byqm8mrs2i";};
+ed-25231={run="0wb34cch7jfgvfql5jy6vvfalj9bv6pjyd9dg2i9msq1azvrjjv4";doc="09kn8cykfsyk14g428v72l2ppwffcdrrycnyl65kixv8hj0vsdy6";source="0ldjyl7gpa5fswzabzmklkwmz94z8al7pm97hh0yjzdqgjxfsdbx";};
+edfnotes-21540={run="0aljhm0wiks5v2s9qkwbp0ma8p6230ahsyr38w9akwy4j9ziiq75";doc="1260dir3aba5wv12a4xidx6ld0vizl7n9m7agwrkmbanpzcqscf4";source="0wm2hynpa4xk464rl5ikxdh5p71mp2cwzac2xl582q8fik7vjx0s";};
+edichokey-56223={run="0c4hwpvassgrlycrjygwywp6ws91vhhb2wq1jwdla8x3sk7hkdr4";doc="1b79022plz2a6gbf1grrcg4j6794fd0a45lmq68lci64mz33b66n";};
+edmac-61719={run="0cvxirrcf7qxa1a6r4fzklqrmala7pdj9i8wywapy0anak8lpd9d";doc="1s33bml7f2lsfrj3fprpazjgjiyiblfcjr554fwq8aadsvgz2xxy";source="0hywrvvxaqb52hd29r0dkixj9fcczhr8b1rj6wxj3wcgdcbfhlm0";};
+edmargin-27599={run="19dmfw76l03v87igfhmh81kbfsp5zbznk62vqpanpppspchlx7p8";doc="0v9lbfynw840xampn4sgxmq413357wjwjr5slzrlpv9mh1f8z0jr";source="00b7b5c4n7baw4c973d0b3d4gzkr5k7m4xj258sw2bhfgaqnrjd0";};
+eemeir-15878={run="0hxnd2rxrm56vblrkvg01c1pf5gccbmvd9lvrwlch89flxp3fiyd";doc="1s576bk99sw867ywkq1qhk31yycc19zqr34ry2zix25cs3hk4pia";source="01z6p0ndp3nc3pbbwchchfn9nlk86kp35qvb5hkqb3ha59wlfyzs";};
+eepic-15878={run="07hg546cp5ab7x4zq25m7z184mvg7hyql7dsbwvgpq6hyz5pqzyq";doc="13v8n27iw1b7qvs3baqqyls9cp2mqbycrbax7jnr8mfvp83jmpkz";};
+efbox-33236={run="1jss3bkgyl365rkgzil7xp4pab8k00w57p60s2sh8wrdy10qjsda";doc="051s9yc05ai0yipwm5f5kdqxgiyiyzmzyxf8rbfwl9ir90k84fq8";source="0fcrnrfk6yrdhj25xmchlaimc5qqyhri287b9pwdwsxlr58wgx9c";};
+egameps-15878={run="0y6naagmi9qii1k4qcp4svczxy5vbramd9wg1ixr8xckp806kn58";doc="0i36znlwls01ch6kns5ikw90nbq68pn71gpvfizf0x9ipymqwisl";};
+egpeirce-66924={run="1ld3k182k7m17pixv2acn4dzlcrkj973y2xjbw653xhs2g3mr1va";doc="1mldpazfnldk4q0r0ddd9rdg9ar6fvabqfb3r2g5c0aff5v2p30h";};
+egplot-20617={run="06i2jh1srww8111c2axcwn2lcs7lwdgp7npn2qpi2x7g38i2kkzv";doc="1silqbylbkxfyzacmyvc3kf8g3md8931ax1s877p5x5zi0vpwbz5";source="0qsyqhmx0gcl13hlhbia9rq82kkkhc6mhmzp56g9b62qy2wl1ss8";};
+ehhline-54676={run="11db4dh948g744bynf1ydlg6jk562picrzfbh5pszxvfdag91kar";doc="18jr25hnp8hg3dbjgf16cskdhm6kx9nxliiggqixb7c1ii6mmn2v";};
+eiad-15878={run="15l4wi5hfbx8lp91jddxwg073z0r42qf93kvrqv7bwhqisk36x2g";doc="074iirkf7fzdxik5yq4jjk2p8c5k9jj8a6n178aw767j18h4n2n1";};
+eiad-ltx-15878={run="1ifiigww9nk6hw342qj1rxzl2b94f54cm4vvrpffxy9qggwkd2zx";doc="1h4cm5b0mllqflsgfcjdh97zn3nn3d9gwa55w5kyimmxgz516mng";source="1bpy6f6d81n95x81rgpz2r1vzg9gw04309shnx8a9jsx17fnm4nk";};
+eijkhout-15878={run="00y3y01jpgzww1x6zjh748hpvizlrbgrv04p8aq3cm2pzs0g17qk";};
+einfart-68376={run="1xqwx5b9fj88p10mh8hwjqs7p2j4p62cj5c5lq23l48i53359wcd";doc="1cb85l2pvgw6qf3lln7dw6n5wlvvr4pk9l4yb6ajrdl6lyylzifc";};
+ejpecp-60950={run="111sr2lnp3b8hh0hyvdf3zv6nr3m2ghl8j2zklq0fdimm7ndmqcw";doc="14ww6ilq1l8f8i4fcafl4v0im39gajkr5189180lbrim6wk8gys9";source="14223kfrwhi1hby3lqadp70pn9ykagf1cwgqhapm5856iai4ravi";};
+ekaia-49594={run="009wk5qyv26rdi9gjbaqxcpsyzz6l5w8b0wrg9avspq81hrjkg9h";doc="1rbcnilarzap8kdsvypjwin1d13xskqq33wg6p0p02b8gaxzf3a8";source="15fl2jhhv01vl7ggwmddpldkmwdj6gj99851aczv47lj24w093bc";};
+ekdosis-61113={run="0drs97iqw8018m15hls6kg222r0jiyqg4n9ksrgrl9g2sd25h65d";doc="1x177sag8ki0pqsbvs6vjk07zf45wg8fmq9s50v8y4qc0pn5xa4v";source="1l6d4a4smjmily8mf6rlx4j5354jrpax15iggzqm1ncspygj0mfd";};
+ektype-tanka-63255={run="0qnkc2i6zxhx0i5mqx57qf7792ffg246yxcm14g1fa1nlryhdqwd";doc="1cmsd75pzv0bfr9y868cbpxx39ixs64pc2i8dsi6k90wfzq2bq55";};
+elbioimp-21758={run="1vfg29q8b20zi9lhn9nsr55hgx710ysk0dvfqpipqjf53fjsp0gs";doc="066g7g84fna6wy1slyh2sp9hmwjhp57hc3qf59gj5mwqvaaym8bc";source="1ysvjlmik0kclmcdf738vhl7xigsq8c6lqpgl3z2daarlqx6b8c1";};
+electrum-19705={run="0ckfb8xq10bx44zfdjy1p1hfcw18mlfli8zgjks81kfsgv7hzfxj";doc="12mq0mn56xi4h8dwnfnlhg0bn7qn6b6wxx20nqd73qgm0p1h945s";source="12ys4fdn1kyml62rcwpb424l86kspnzb5xq850ppbb82ng4146js";};
+eledform-38114={run="04sd6m6ay9iav3scf72i6id726gn12qgv19hbaav7dvbkx73s10c";doc="0f8inf12l7f8cg51adr269qs9zc0imsk9g08zh793aarvrpfh4gm";source="13phf594kj5a9ql14wvd7pzi3vcrwg61lmc4fb7079j2xpx7drmk";};
+eledmac-45418={run="01is22hyay4xl1bp58g08kn99478fz5l22xdlbaqyr5yg0k4rgmc";doc="0x2h38mlixff4yacqrvz7k4q57cwigal3x10f3k4qdr91q9frd24";source="00pkybywz4j1qcki9gv9mfxqvm6q3m60b4lj2ms44c4mric77wk7";};
+elements-61792={run="0a3dzg3d1wz1zni57k8gibrxczjg0k16vqqkbwcd509blwxgps4r";doc="174467pvz1q4d72z215pni50084ywddfvf8c36ibagijpdvrym08";};
+ellipse-39025={run="0hp6gm0na1gjxdjivxgakbkrq48mp9zblbfxxw68l2aa4jm1x1a6";doc="0invkczwak9b89n6w8ny9bh1mg7amk418cf6b0552pb5rpkbby8m";source="0143mncfyss0cyzq0aim8lvzxhq5q8a0cpsh92llqjl19s30d3fd";};
+ellipsis-55418={run="1zbasvm792cghiji6gkg27ixjx7ms46rgqbi3wphpm9dix9296ap";doc="1w9hp2k4qvhg5275iq5kq79ws5z6i7jb1536h0qrznm0lkw33c4y";source="1z8f3x734nc364gybhslxzvvv4502a29dmb4nlz39hm0kzgqq3h9";};
+elmath-15878={run="04vacr9c71nmrbq6hnhpcgk8g75jzdvwf6z513mqabr9d0gf84l5";doc="1da0lrbzy598yy9jisjq0yk2qfjfiqpj32l1v63l3x7dff6yi4dn";source="19q44k909mkxrwsqx4zvraa8cv8jbq8z46xnm53agk0jr94bpiqk";};
+elocalloc-42712={run="0jj85nyrq2y7w7pm9pq8qdj3xszg5s3a1j8zx2dvsy6a1s7mzd8i";doc="0rgf8vijb0dl48x4rwbzg7gd1apjs7vwl8rj7zyv60vx53zzkp5i";source="100hs4drnz5jy657crs8g62281sbgza7k78pvk1qfds2y8la2968";};
+elpres-60209={run="0k8jcp6bgzphlg6kh0krlm95d2rq9z90hscsncq1m236hrzfad3b";doc="0k6ygcd10q78h9f28y091l171bmaw7ibk9npi3kpx33vmass118a";};
+els-cas-templates-62931={run="0lk027m6s6z877lilqv8sq3s5xcmmqqhlhrh8p1kaalw01g53hy2";doc="080sa0kls4w4p8lgvahk5an8p6lmkf5kywbzj1wx4n5mqsj5mpcn";};
+elsarticle-56999={run="1jjayypcaczxw69dk3v69fj31apics2356l934kmag49rwfzxail";doc="0z7iywirs24112fmdl8fm818320s3ilqlgc7xi6nl4idjakhfmi7";source="03pw09cw4hd0ixfa88mj7bijj9r3b6a6kg53q4hzzzl97bf6v5yc";};
+elteiktdk-66821={run="010vxx6ddmbcj004a9f17wq6a9myx7hfvnmas1b6qsch6ln99wdn";doc="0d9fq58svc80kx557kmqa7dfz787zbzhpaifswkh2f0a327f47is";};
+elteikthesis-66820={run="1xrilac7n04s28ww54pdl6zn2dwnwl1lqc7xzhqkrinbfxgchg03";doc="1pkkwbb4ialcmjbcyv82psq6g5qyzxg8hgvgp2n0xybvvxh4z7mn";};
+eltex-15878={run="0k782lxa85dsmqbcw5q8gdny1lygfsv5h2d1d70f6y0df17r57ad";doc="1hshzr96sn318b7ssv6f5md23v997xahm2232c3kns3rzpfssy21";};
+elvish-15878={run="0hz3cfydpm0sq6s2xp8q44k81xxhqm5mmrx5aqn5wzm0kr52pmsy";doc="1zzzqgs30gbhy8ja13zq9b2s6mf1m47ms5rp33jc5xp70w5cjp45";};
+elzcards-51894={run="14vd8vnnss12flbszsg8357831r986pk7hhpcwqln53r6x5kd543";doc="084zcf7dqig379cqc6ahiqkm8f5jwqgiizd6h5ki28pcbshi49rr";source="1ipavy4km50d8larywyb63dldmawawzfw3x6m5nzvi70zkx1f6rw";};
+emarks-24504={run="1qf1qrbw2fsxc137g8dfsx1c202ylvg2ijdwcmxq1fv1pd2zjjwz";doc="00fkdarm7i16vlmjzvjpkyp5v4mbdc6isv12g07shx3nz5v4zgp5";source="1lznlfqhcwd3r8dp4cix5jav3dq63v4wspr1ks3pm0bkycy8wr5a";};
+embedall-51177={run="1078qszq99jdcy2vsaxmg1fbnr9fdbd32y5lyxl4bwl0ja62m459";doc="1c17d4bpzxws6j9z5p7x97zfggyzyadfjygbhi7ykfiy55qywhdd";source="02vdmjb6vqvqmfq7fhn5gb09x2lzpmrfhx6dspv33wmwzv99kzr0";};
+embedfile-65528={run="179a168b71h8zkdcfr7krcm2addbin9chckaczj8a8ayy6xr294l";doc="0iqg1lbr1fb6ckdqbzyml5qwpdnr606fmhfgvxvzb71kn239cg8i";source="1kc65i68h4nd9q1fj2sl094n6q0js47h6bh00677a89kgjxvpzr3";};
+embrac-57814={run="0n2ll7mxgw228qb3j0x111yyiaa4ikq4797g5k8xyakjmv0w3sv0";doc="1lqapcz7iv8z7df7cyddg6ylh2b61ndgbfhnfa8abzgsqz1h8sjy";};
+emf-42023={run="1w7whsff28cf3p0i8hii1lklb8i541di3g4z5iv2rfm4xa5m6i2s";doc="04qq6ljidaqs2i4lxp3m1varm232rhd026qirvr8q10vpkd6grad";};
+emisa-60068={run="120aa7a4m1psqx3wclwzghq0fcyxs8djlf79mp2ds56y0mpsqx5m";doc="132h5m80s24w51px615di388r7wkkqp8ihwapdz770p5pywk3c2r";source="1pspisyb3pxj2nfkpzzxc7pghackbl1p9dwbr5iqzwwv37bxjgli";};
+emo-66944={run="07df21ziq1ajpmff74w5vcsvh0kd2dx7vc7q61syqr2yqvj635cq";doc="130zqvzv94hi0h5m742kn7vc8110cwjd3b59dxdpihm76gqpa9zh";source="0hy6pvyxg0k478lpdfirb92mx28w27dxzms5al3pjq1mhr04bmf7";};
+emoji-59961={run="1pzx221zrczj26pdw6ijai6m73zgbz6z14d5wlhv7albrh4ppxgs";doc="1531y2a3dfmv2y2xa7xi0dpdkh61skk5makiyzs8mz3zl19n8nkg";};
+emojicite-55131={run="08y8qg37m8b3qf2wkbg802kmx359i6ki445ljjnxybs7apvxjpn5";doc="1iwlxc5ygq7l4qag7yxxas0rpcywmjcv5pcayrk5mz34xr06x5f8";};
+emp-23483={run="13iaipg8n1njzbnd8s622irizd4cc1cbkyc735mplvwq10q2jxqq";doc="148l1xq42avnf5gz1sqjcdprnkcbgsii3fm1jiamx18175zygsdc";source="023jc6v2l580x2d480x11z6rlknjjvx8g3qkcrvdi778h5m5bb94";};
+emptypage-18064={run="10h1mlhk0841wgc70hp51jnah14si7rf2mwpkp8lfc1xr7jwwvi8";doc="00l43lhrr246hiwa717b72rc4ignqd3kljkw6ka3l8z1nzbcbni6";source="16nzgkvl9gqsnhx38dp71c3cz5rrgm73n99g2vg7rapg0vb623xi";};
+emulateapj-28469={run="11yv57sv6ys3g8h2ix5xjnjrbnyfvcma4i7vzdsj160rzi12n06v";doc="15zm7jqpk917l1r2qfkqdkbsxa2q7w4640h9115v4jis0zwgj0s9";};
+enctex-34957={run="02a26lzlkkw3dabxci7w77117n2bagsdk5rlcn4cps45xdbjqikj";doc="068qh474lirr3yzh8ggpavqsmzdv5yvlc1i93f5cx49cd9j7dm0w";};
+encxvlna-34087={run="165xjggnbpc9baj9xbdkxzxsb9gdsxffmakffw0gzp82acxgfwsv";doc="0jc0wlhmc7f1vrabzk6ql62iian2n8s32r2crq34w2cjglmf69xj";};
+endfloat-57090={run="1vqy4ii3dz79ffpjc5n234z9v0lqpkq93vla0lbq0791h71gv53d";doc="0y3hkihs6pc0g835nk21qj8v3g27f6rrvadwmvqkhchvgh02bwnl";source="0mdr1ga2p1ikbcs0zzznb1c89n8shrha87qm49sgzbj4d0f2gdbx";};
+endheads-43750={run="15dkd3ky14phrc9cndisa88vbmcp48wly8l27k4wvbbd0221rxwr";doc="0yp1rm4ly2005mw488yscrgc0y8awsis83wwcfh3qh8rcgm8jzhy";source="0578fyav3h5wz40c12r3rqzbsba7vqvk0r5jlw6wymk2m9n9n5np";};
+endiagram-34486={run="0vgyl6rbgrq0jslb5k1796hlnzxjpavl5ab6vj6zizinr2rvh0dc";doc="1gz8ri82sx9nn2adb7sv434im46cb0ld9r4j9fz07kqn6gxzzr2j";};
+endnotes-53319={run="0hm5mwxdvxhj9v51y88g6mm5fs9p2kaksmhps032cbc1inn5asj6";doc="0354v4klgz5yn1v9hkk3zpvv3x1l4b6jzla7iwxpnk9qb0bvfh4g";};
+endnotes-hy-54758={run="194n7n7xcjpsxijzsjpgsxrpshilki0ixkwlbn6hxd92jjq7amz7";doc="1mj4lfvn86676s3sv0v3hx07cjb4mm3j3i3swwzxg0i48acpch52";source="1qhf4zzhk7kf0wcpacl82przkcf7g8z6jwirrzlwd39876jmhbwk";};
+endnotesj-47703={run="1rjraz5m7zqyj1j7c640ngxv7i73d03xh5wsmcaakc10h36n3pyr";doc="1sss0shcnz2knzghjqw41s17v0bs7dfcmg6x566fdwdm4mdg4dkv";};
+endofproofwd-55643={run="1dz3kfsjalq9419l9sdjws5bjisy8pmy93my8m8acdf3d4ryr11x";doc="1m5wq64v14cz4i29smnw742ak6sraxq9rzwcqkg40vgzsss73lxc";};
+engpron-16558={run="1jxk1j23v2c2ffqp9x948gkjkqvifp9lhd1wlp2nhmr4k0k3pgmq";doc="1j580xz1jgw088xah57zv8mrn3wgm6xipj1jf3c0rxyd3fkkk29v";source="0gg46lfqprs6jr2dgpa1c882wz9k8jjzrs281npy8hk4hhqgrg0y";};
+engrec-15878={run="18qzqg4i4f2dcpqdw4zs9lk8cxlxxn01wbh8a275wiaqj5fi7hzn";doc="038a925h1047a8wnwm54mmyq12332waxx8nbrg9m3pacr45hwmgy";source="0x32a3cgh7pidln750qbwxl7bkzcjwj4brxbqmhyfydnhzw1xzar";};
+engtlc-28571={run="14lz7dw8wgksbihdvga2yyqa3qxbs382s5pzrfycx9z7503dfy0w";doc="04lv0x4psfpivxfx5asf40pn0d80cwfwc1pwl21jxihdvc6jhihf";};
+enigma-29802={run="0cl7a0xh9y1lg55wdkj03n3ayyb0853nad04fpgjla6z9c9l1lrm";doc="1cnbi0n8pw2m8xvxk51j4rlyvj112cdz5zjhc9n8znj25iva8in1";};
+enotez-61490={run="1nxn52jbgxp2r1zlyp3hmr0k5kwilmf8fkr46scnh9w1ijxxmmp8";doc="1jw2mbyz3xnshrb031b6xzycqckpn422rc1ddrdj7r2j5lzy7l2n";};
+enumitem-51423={run="0hp6sk3i0a1jwwvlr0lk4w75fc57c2fvqw9x5ir8db049380ixyp";doc="1byxv6d9g38fhd83f4g23yqha8nvr5iv6lv97w40jn58i492dyrq";};
+enumitem-zref-21472={run="1isvqbp7wvib81r0yn7sngxa2dygkfm4jn4rdvw0kp8rknam91qh";doc="12ffsw4mzwg8gnw264kvc9gpxcmrhda5pwfyml2ih50g1dj6fwv0";source="02y3rlxcsdmafy4n4iiaz2j3syg5x7bzwzfvfk87xxg0n3bvahl6";};
+envbig-15878={run="1szn3ngy2iwzbc9y5fpchr5vpx5alr908q8bfg94lylmb8lx2kb2";doc="1y778gc6wl11afjjv2szypc8jf1g7gg2s0lvhv2skl1n3wpb3x7a";};
+environ-56615={run="0in2a7ar0c6ji7qhrbgp4bglcr2cmb9imxch8fcrwkims4g3vjp3";doc="1pb6nmprhz3j9dx2h7sw0y66y1qlvhkjl3ip28bxa133fgqab148";source="1jkbi2g2s13rngwqvr435i9n94ycnzp9xa8szik0nnmj482ah2hn";};
+envlab-61937={run="0q84vy7zbjqrrvy0r2j2hpbg9b5vwbwk860q24azms2zxy50a8vd";doc="16fnyfvvixp6lfgvz32w92q35s21c92556qxbgpcd94fd1pw2bki";source="1fygp7wpyzhzh070sa61qk17h05rqr4m1wqp78vpp0awgkmdji56";};
+eolang-69391={run="0iiaj4hc14b0ln84pb3yb3rk655hxx5w2gjgkpa7mlw4p53lc7dk";doc="0r1vffb9mi9p5zf26jaimd68k9yvlnr00xz2j318hg4chda9v78w";source="15z7pa7992c18r0n7y0rlaqn1id6gyqgxqwgv9g4yaj169crm7p8";};
+epigrafica-17210={run="1kawqgy9kbr535q1v84kk29q2fwhg6yzmgjd5i7dyg06cy0g6rci";doc="06ichmfivx1v2y67f5nxx02v75wzci6m3hhg87kc4qik61yp8lgw";};
+epigram-20513={run="1zps5067mgi7xq3fpjvjln8i0rz53j7qn660khraq8ribv4glnpf";};
+epigraph-54857={run="1lb4wzjcag59dcfvizvng9s47v3x2af6v62hc1x3ck3fqzx9haa4";doc="1h13sgi2bxknx2m5kxxlv9p4fxf1pxh1zdwm98h3kamzb4a4gm81";source="0kqfrmx732m0a6k21iiq1ar47ff50ri3f5wy8ib6ssbbvd9agx4l";};
+epigraph-keys-61719={run="0p4m2z9v0ckjncy5mpfs85nzpzzi9lx30a4dh6rjkhgmnk574n6m";doc="0gd3mcw13r3245dmd3fsgyww30f4anwff6vj14xsy75zcs9k0ywy";};
+epiolmec-15878={run="0wn2pi3n9ls945i4v3x36kgg34sqhi1x4az5gq6lbvviin4lnrvf";doc="1j9n7g9z2wbbq04wh2x0cxx7m4zggh1scblwrx9g69sd8r0b7582";source="0qairwq1jfl5jrkrwlblmsc9gb34wpanz61zmsawz94yf3plwxxs";};
+eplain-64721={run="1nix31pjj4licp1145dk4vpbz5zsfiwabmj5jzgxvx883wbkwrnm";doc="1b9w6gj4656bj0q622w75ar7a40qf6s8bsr4nfjb6a53nh8ga6n3";source="1kncsw127i87d7cq1wz3nhsghq9nf0h3dwxhmdbki96wskgw8bgl";};
+epsdice-15878={run="02i2fv7c0kxg9d96k8gwcvm56vd4rjkndc68k1x2wa19f1ymsmi4";doc="1cxrwbnrfg161ddc707msjya678fvvmvgsrrigdzmqrngpi7vh61";source="0nj3d8nqc8x41lmqmicqf67wc4wirg0q0djzi0nbk77g2m1qjs0l";};
+epsf-21461={run="1i973a2hp5ms1lzgf3g2b73j34xymak9f8wz88fqczcvdfnnag2g";doc="0d6jhhvw882kq9l2a4vrfrnxxvkidfjkmp3zm7kj1ir8mk9qvva2";};
+epsf-dvipdfmx-35575={run="1p0syahj7liknn447lb83p2rdv8xazpgabk39rjxga05pfn3csh5";doc="192x6cg0dh0j9dknwb320g73hid9px635p79idr33x2zq3gaaw4r";};
+epsincl-29349={run="0cmjwns5hnlqi1rk6py4s07kbgflm046pycpr1lr5c1dacmiycxj";doc="06cyyhnphdxigpq4bkg28rx8h9kgmb3ywpbdak6v6ivvlksxgnaa";};
+epslatex-fr-19440={doc="1xs9977g9g3i6sipkf7i9jdl8sdm69ci3161a4p7k66qbizi7zvb";};
+epspdf-66115={run="1yjga00imbdfjqdqnfl9k4dhyacqq7c3i814pn5a5fz5bbyv66qm";doc="038fw9ycr0wpaq2z2cwid80lizl6vvj5q0i4bnx4lgxkfa82i92z";};
+epspdfconversion-18703={run="0arf6kmziarh1sgani0bnp2jm8psxj937hrkaslfj8fm2s46gcmz";doc="1xpj5lymdh9w2ary36sx66ib0hwbjfbbhhcipdq4nkikq7a8zmpg";};
+epstopdf-68301={run="0rqfnd8x45m923lr4fwysxk3icgnpmzrdj2w0gif0dg4m1d8sggs";doc="1kjqzi001nxbrikxvc9l3fpc0pz7zhmknqghwd8423flym610vv9";};
+epstopdf-pkg-53546={run="1bd7bkkk5hbp0bfzrvjpmfrrvil9i2pzmzl7aaa324q7w4f1w67k";doc="1lwv6av0b4v4vzzk3i27diw42hcdqzgvis1fk4fclkyqz7w0ai4d";source="1qmvc299bzgfrf31sa4027rgkq3yjg57318mbx4gl4cwznxr7zh0";};
+eq-pin2corr-59477={run="10wrhqr55r45azk4z840wphwsfcm6mamzafijqgldi2g90cp0hsf";doc="0ii5dnaw1lplccp18gjkixxsygacz44r834r0vaxfkjmcbx858yw";source="0l6p9bwaszyzj794vvyw3xq8nfaypxb04ixf25wniyg3kr54a9nv";};
+eqell-22931={run="0i0n1vb43vq2axghik3sbs2cja2fi78jl0q5xcrkbn5gr6vi49md";doc="044bm3jyll74jrxh8va8g38shjn3b7wzchjq39n4rjp3238wirsm";};
+eqexpl-63629={run="0d97dysvgyk2cr2w9xaq5ipgkx3i33jq5x4mak8pq65bgbpl5dhx";doc="1nkg2qp7lg282rpf1ds5gm43gnnylwf4df3ziikssjf9pnamp7pw";};
+eqlist-32257={run="1cxas8g683y4i22rdakgji1r282mivmnap2l0b80rv3adg3ccvrl";doc="11lbz2s5v35w13vvcf2bs4y59hsdd0haai1244jqswyfxgamybgg";source="1lw20i1iqb0lxqpv2g7dw62ff4xd8w8k4y2ccpqmsb987sk223d0";};
+eqnalign-43278={run="0214pwf689rj7ycjzrafkhpj1rrn74h043vryihyscci03lf46fs";doc="128yh629nnxn2ca799s9zxbvbp0zam1lrz8nciinfbb10m8igwv9";source="0pdzvs4hyyxr229jlcw7766qd4npasc676hf74nx0msxwm5iq2yr";};
+eqname-20678={run="1qryjgmn2cw2indmmybgzrcrakqi6a3crvdcyvj769mciz8lsdwy";};
+eqnarray-20641={run="13vm2xqfm36a1fpljchnmjnl6m4fia8x5bia0h0yxh7yw740vbzv";doc="05vh8d0yyqhn7d45ykrql4dbn07f8yh4jmr6qmx1mkhyiz44c9x6";source="109ds6zn3nl17kb4z6m1xpa5ds2iwqaxqbf5jmw54547wv34havy";};
+eqnnumwarn-45511={run="1mv50r9g43si8kmdmf3kgcjmw10kzipq67ssd3vllja4pn9yzmz6";doc="1ypvd357npccz8vbbq8ss92cmxphq16isvw4ax0ppgxp2bh7cr4g";};
+eqparbox-45215={run="1bg49m7nzw20g2g51g07d7sgq0sjiisrbaq4ca31qbybr2rxcp12";doc="0z86nwj06zn55gk32wwlxbqfb12a1fcgqizrpagm7yp0xr99b8wm";source="1ny9mcnb76yds4l7q35wdm0x2vzia80aaqr12idybkzi75a7b2yp";};
+erdc-15878={run="02sf80cadhv7if8arbjcsgqkb0hhdrlpq6izqgcai6vb7xsc6niy";doc="0nv1yqxjmp4mfksmxm373pmy3zzbfcfvi683dalpslzq2qyz20yv";source="1vpghcpm9a2pvi3plh7pjki7sna3hkzvq2xj9gzmhqxcpw3jskwx";};
+erewhon-63312={run="1nw8y88z39wm0f312a8r0hwmdy85nynrpq8k78l1iabq9i03316h";doc="0wp19ficxpgay4bbs1hg3yrxmy2hlslgyawa03naaxpy1jysx8pw";};
+erewhon-math-68990={run="0ianrz91a3wc11s3jixilkzmrhjj6cw4h88ic12v1njg48d7sl3g";doc="15k7gzyrwqn3lr092sbcxfq639cy58vwgm8sqpnqhrbbzzm56304";};
+errata-42428={run="0hp8pls350swslim7m3cpnw23v94vnqj9avfvx9hq0bgl99szc5c";doc="0h30iip57km31074cya5fyhlmyamix8anpk19rqbsfb43h3988g8";source="00bdq20dwwmq0nw3c271ah0bclzkzkwbr5ak4y9asnab1g6fl5yw";};
+erw-l3-61799={run="0klwkq6x58bhqgc849yv68vg7w8ivvzib8rl84ipf3gl1hk42761";doc="0qkg31gi4jhgvc3i42cbj00ccavwrxfmygngn8qxfgmsphx3a41z";source="08lh56xzj3wjh1dp72ky8ckga8k73d3alf0vxjkwb6b6krzz4gm9";};
+es-tex-faq-15878={doc="0wp5jx1qs4yp3y4qpwqhpw7rnilw3vb2z5xb4lzwph6zw27jf6sd";};
+esami-67707={run="143pdgx8lscxhpbh87pwg57m01pcmax0h46g6f3cqixcdvfh0qp9";doc="146jgm694cvw7wn15q1p2ghzspb1hlr5hxv1ddb89mgkgviqx3iy";};
+esdiff-21385={run="0p5d89r6pzsf0hzaky89843pa4z2n4dgq3yg8li4gb5m2b4fjfkg";doc="0jw4rhkshni47zdk18b3gd4amyhh6v9a1mgja58wmp2vrwv1nn2f";source="0iwkbkmkl31wmdrd1wapd94p70mwd45lqld3b7pfb0j287nzkzl6";};
+esieecv-59638={run="19vmccxpv3dp1ysicrj5sr6xrsqgaaz9109q3gf79gdvcfp0g7lm";doc="0ji6pf8b2c3ka17n4qgnykfwhy7nh3zp87cg913j3rah0zk6fqzw";source="0r10sipb7hd5dpzsh97qiqb5adx5j6iw2aly49f1w0l8pxi0fyyn";};
+esindex-52342={run="1vxdlbqc3j33gdvy04pifd0cdfvnjwmpqbmz305g79733hvlbw55";doc="059y8wnnzqn1kfy5jhbpk8zi4lgx7r5s6xg6b7x3iih1ccdyhwma";};
+esint-52240={run="1i9bmx7sk3fzzdb1ny4a9b3sq9mjjk2x78gk18y77rxq16d2bjnr";doc="1sdklwvw46yj8xbli4yl6qqp5jdm9a32fkspk72p5186swwkwnc9";source="0j4ms51a3qzk7mrc9vh5psk83jxnlh5xa8vq36y9iihha0d6rz6x";};
+esint-type1-15878={run="0nfvka430084h72w0gdlvbxxlay9lp5z76bckmr5vd1vqi4jz8kn";doc="0lp2hc76adxdl44nn4g8hb19cflndzg9ir004di3wggh6s2yx40a";};
+esk-18115={run="007jcqvxp41h0ky25mgn2k3qdvyiyr3vj9mn6ml1zsvy1ymxq4dj";doc="075wb7q7z5idhqh39isvkacpgacfcv966af904yk9ralin5fwbr0";source="022n8rh8rwn9y4yx1rqpdynw2lpm8npwd45y88r2q29qcd9f62qb";};
+eskd-15878={run="0cpaix3x3qw5mgaim5574pc39hypi42kmk7yvnbvf3qj5bv7jkyz";doc="1zwpxmr721b3ij4b4zvkncddy85d9s9ma7llajp36qh4vl0bc0cf";source="1kfyrzs1swin4ph70ifm1mnsm77dprd96rsw228liq1cybn5bgii";};
+eskdx-29235={run="0h11378qh1y4c4ac3vd9pcl93a09kpsh0vyqcg7mfn01dgmqfam1";doc="19bcl4szagigbd2jrlz60vhhphm86667chciwlk05k6hkflg595w";};
+eso-pic-67001={run="1j340mj5ccfb5z28dcgs76jv05yv2vkfqxszzkd2xg4jkzpy0479";doc="11qlj80gnfqw496r5xa6fg34cmp6sf33k1drg4cpq23y9slrwd24";source="1gh64sql402fcg5k6w19pkx4n3g1aviw006yp1zdaa3wqnl1skly";};
+esrelation-37236={run="1gjwrnd63bb66vy7f74alxshcr5pqz8g8q178wkgyrm37xql6kni";doc="1nnwpgjy0mzc2h7sp2igqwain2nz6374qn4mjvj6g8x02lkc1hsa";source="0aqb63mzvx5hl178kmy6aawyv5ri8favficfjjmkpq3d4hgnrwl8";};
+esstix-22426={run="1qqs88wpabdx0y92md1w8klmk7ncbpm2jqmi0j5sj1c2cn82mp1a";doc="1zzbwvv8lbd27cxafj6qc5sml4r44ymrdvaqn2h966alzga9ify2";};
+estcpmm-17335={run="1v027r6j4vxxvdccq83irjdj1gf6kzy5i9jb1bhsv7c2gdf3ihyx";doc="03q3z9if5hswrr086zi907xmjaijh266l5g9a140q0fivjai4hcx";source="1qb1v30ijky1xhh5dahgprp3fhxfm6kvlxgb059429idvm5ap90g";};
+esvect-32098={run="0fgcy91ypllj3i706znwwzri36ja2ca2inx838q08zbs8gqq4zah";doc="00xpfzzhyrh5p563faa7ks0vrrc08ndcpn72a72jmlhk8y8bn7sb";source="1han75c642d3qmr47ppn11f7q1lnz8lcwj3q39nh1f81vi2w6li8";};
+etaremune-15878={run="1l3xz9zh5f3wj3v3mvq9xk4q6vc7k01pq3ivsvm0qlkni4bffyja";doc="16v4vsd7dzihnx72bdz99994kpw6r5im659hm51w5wyh8gf8mp29";source="18rcvjpyks01d6qkq61rmngmwwyxksh4i5dmnvq8ihx4vj3zlgqx";};
+etbb-69098={run="14rrzb8c1i58iypi7f1wsj9xp2x93s37s030zbl7xj8aw9j5w4mf";doc="0vqrl9i8mr02qb12czy09x9vrch6nbng04618h9ampxs1m40sha3";};
+etdipa-36354={doc="1jp35apalaa1lh44dbn1zayavv1n3wkm0v69hgy8vdz73yp5yvhz";};
+etex-66203={run="1zk4dp55r1yjwy1bpigyzbfm9nh3np544hfmzzfhdg4i4yps87k8";doc="1377j3czf6s21f7dr4qswzqvsh7xzzqcyjw771cswzgg7z8k66nn";};
+etex-pkg-41784={run="01aa6bn8d46ql8aw8kg9k2c3x611jpd5hx3h6g2fqb2lvjqnr1zp";doc="1hcir648vyypvqa8r710mj9qldir9yp2lq7biv3s9w1vl2ssw18d";};
+etexcmds-53171={run="0m0kf57wcmy50qcca2v5jb8z4h7z82pja82igmf6gsm7fksm3wrb";doc="0grl3svqzjh5bdg4jwzmqaxz7chkqka0vn0hnjwpyvm52ngmckyk";source="1s7avnnlr4g8xjdfmkm82aanz0k0cnhv2dyar30439x2indyw68c";};
+etextools-20694={run="04x0a0wy3avac8cgjgq7npiy06b0vrkxa0hizpn4vkzv7xbq79yd";doc="0z04a5f4c1xygqsgkss4bh0s41aqv0i61sh6x9h0isrqlhbvrzs5";source="1f0jr38lbsrdjxhihxks57y6xw37ghgmydcq48ll14nywx07qa2l";};
+ethiop-15878={run="0h1h286nq6f2bplxxkpdg8mr70ip92c7mkj9lakxzcwacsj849xy";doc="1aqgl8hvapg3p0f3knpirlgnifpkpw4jb22zncp1s26jqjc9wdcr";source="1cc66b7ad2kfs4whzbnqdzfswn32y8h19bj3ad20ia24dggir5mv";};
+ethiop-t1-15878={run="1xbkh7xx71d19ghwfq8bhjnf7jmapm13hp2gr6ggzavcmzf12ffz";doc="1lafizx606kv455bhf125hl2xqhndd5mblkd0zyvqgyir9bawcd9";};
+etl-60998={run="0cg7ppbc7nlgmcnri2iz2is8c5kj03jn0crw4m5wmxvqkkcg2217";doc="0jqpybirslqyk7g9g27qbbvz3k02m2k352fxl2w1p0h7hhgk12a2";source="1z244p46j7hkzry4n1xdbzcszjgwrlxd2jmjblbrldj2ba9sq9nd";};
+etoc-69343={run="1kvwyy0wxwwfkbmsh7v5kdvcb9sx7ywzcv5cx5nmv0sh92ah5dgh";doc="1lh8pfcj2iixm9r31cawfs7vpg8gd4kgjcj9yyqx0i2fksd1gs0g";source="0clv4cllb4nfchvc4zb8k25wzlhl4k5hnijl3071sq8aldiaqj7b";};
+etoolbox-56554={run="1g944zizyl05qz6lq1k13hv9952r97gc1i7is9s5fckz664075jl";doc="05c3kvfwvbg4bxf3wza5rdvh98mnxadf818rsklxa5g2lz44jm76";};
+etoolbox-de-21906={doc="1vchha7ymvj51jfnvl76rxv466lzfpxr6xcvwafxhi78w4bk9yry";};
+etoolbox-generic-68513={run="0w0mmw2f2lry84jfx617saj29nkc620vkrkg1kmnnxvvxqi7jd9a";doc="0l7kbicibm8c6p5yspyr1y8aqh5d3bswa9h58787r4hcj4pr2hc1";};
+etsvthor-48186={run="19iza3bimr7xxbajmq50iqd6cc1h82kz2lixwphn9568d5k5vjm1";doc="13cijd5cx7sks5jdy67hp1a08f4y223l0hxd3w7ljnvd5azzyc1f";};
+euclideangeometry-67608={run="1pa69p2p6a4v8wz3m32xd7vy1km9zksszj7zjyqw36gfcpk5sxlb";doc="1d6340xmamzrcsi31i0vifjxhy42ml7v3s6r1r9v6vzimh1iz5bi";source="1l8xc044kcac6344v21dfysc6la90vv822mvik984zcnkbhxy4jc";};
+euenc-19795={run="0lh0k5g6icbbzl1xzzcj4sw7vjhqpn59y9xbc6cn58klpww8ywdh";doc="0likhzn8afsq302aiyjk6adhjimz0naqffjrj2s06c6681z2inh1";source="0bwr4cabh3w4jbx476ygxv6afxj6sblszr47awr2nixx0m018ndj";};
+euflag-55265={run="168c6y6rivahj6cw377l54jsykpxaxvv3nbmr80w19d90h4sqa5l";doc="1a65rasxx88bkz3bg51bmzdbq67yphljaa8mgkp2b69fjsifm229";source="09g2gn9ci11dca9s8bgdrjaprzb66vb47ssfnj6n061glz9a244z";};
+eukdate-15878={run="17r61096angayvbdi9r3d7ljb1a5z9q9r093kpgdsi11ahcgsr26";doc="0071bi5m6v5ak6g5pxjxzq5y5353mpdjx4f2dbznkmfd23wp8j7d";source="1p6vg8nj8qipj59jwvp4izf2dv0l8490773h6j87wlclnnnlh2gq";};
+euler-42428={run="0f63sy9zs0myb76wqgzww48g7clq6ni9kwnrfjkyyc4lacvd36in";doc="1rl4bxzlmw95pgcf7va9gsrgz89602a9pqvhiym15b5hdwc5cb07";source="0fy3dx3bf8idddxsj29yqd7bsv7cyyg8q9njmb3p0mw7laqrkjxl";};
+euler-math-68991={run="060m4cizj9gh729yxx70vnj7rw660r7ka2gqpsd3r5jmgcpybppn";doc="0bkz8biyz0mzjfai4n4iy0xjslhyvigchnrargz10zxiyb5a7p5z";};
+eulerpx-63967={run="1ls9b076rc73cbc160ms7df3w5m0x840y7s2mg3wk22vgc461ail";doc="0qwhb6wxm8fviqi5kdy1lcplarijhca0ymrqnxfnrz38z3v4xycs";};
+eulervm-15878={run="1x0zgqw15r5z9mf4pcpnf1bdbwbpwbc49ij7gjrhf9jzzlkwraf8";doc="1bbd7f4dz3xp7ylgpi2wh9jf8nz4z6i2cvphfx53xvg555ln5v1m";source="1if22m5h8ma3bvrlp4jzzhjm410r5r7r2ij17prycj3cpj4r2nl7";};
+euro-22191={run="02kkwf4psrmp7n5mqyrc3745kj82p3nxswad9x8rw1hd7a278y3n";doc="1ajqx7axgqpmbq4kl2gmk97ibwbijqsq6z8ln71qla61j0mkgj32";source="1hkzjy4vmvh06pk8bhkpz09ln5jygvyhwzyznqkrzffay3i89cll";};
+euro-ce-25714={run="00ypq57ri9vkmc85c5l5qzq098has90qllm9lnv4jd73l1my7pmc";doc="03pcwrjrjp74s2xl7pahpr76dls17x76xvhck9izgsr29j6kny4d";};
+europasscv-56829={run="06vqrnfzcq04mjk38q75n1k1dw3ap7z5xnzpjmgss8rl6mjn4v3d";doc="032298ir415l36gakqalg5n1nk70c47xbm2svvg1ygb32sgn4afp";};
+europecv-64037={run="18yrsk65jpgqx1lma8n0r8ya3izhmp2z6z534i46386858hm9x7w";doc="1mc4bch2jp1nkxsqg80g403r84brv81fn807hn5jq27fbi93py6b";};
+eurosym-17265={run="1bf4vwygyakr999k95ki53fykknizakz9npz2i1h3r5ci805l7z4";doc="0vmh23f3ksc3b3hym7iv7m8rsddk8vdbqr5ib49bjqylppvxrsnz";};
+euxm-54074={run="10dqknqlqrga9m2lgd74zx5hk4qcbkfvlzjgr304p94w3k7pclqc";};
+evangelion-jfm-68059={run="0vrr3md73dj51rch8yz71fpr39q7adq1ds6jmcfly3ccp9n4wcil";doc="1d2lcdjwl3hd4hl1arbf9dc9jgn2b13l4hkmpxc7g6cd2ishbxwd";source="1kvwwhv5a9ai57bw22pvg5q79cyi4kf35yyyz5yzb8f6mwaj29v5";};
+everyhook-35675={run="11r4932kly5zmksmicapqxndqw4cdq1sg2x9hgffms6v8m5cwkfs";doc="1g9p36ki26vqdfiwnr77jxk1bna7733dml5k4s8nxq1drsklwqwn";source="0hv04cn2j7sf6032jxv18py368zbpp4ya15wv18qymbk6yv5najs";};
+everypage-56694={run="1i8fjcbk3flywzd55y0cbsdmzymvkynvgc5cvv6yh5y6nr514rjd";doc="13drphjv7gzgdzzwd6fxlngm2rprhls60gj4lz1v69sqifymnn4h";source="0vdi8yd0r33ajnym0f3j42ajkc2xs8b5yn3kmklmgx19kpc93ln5";};
+everysel-57489={run="090nizak865w2mgrflmz91kc0b2zmc6fq0xxrlpz68xwb214lzwx";doc="0bhqpzw5dpgq3842jbba9y21yj1808nxrg50339lx7b8vc5d2i8y";source="0aibvqmg2n26dici3adi849a5k20ck68v25vx1bz2f15q4gggd6g";};
+everyshi-57001={run="0y738zcqy85ww3mhwgrj1qh0vgpwfh2ib676wlr514xglvmp9l3n";doc="0ynjq4ibx6rr0qh5lajb5n9skqa3j4zyi533mxc10axp5zpxsjkx";source="0iqxf73n3l1jf32x571rw5wqwvz7nj3bvyqzgizvfpbnavqhrxfb";};
+exam-67600={run="027v4pscys8rmrrrz7m2plc9blf0bif3rjykfhw597rmnmgmhxcz";doc="1cwcz5c0lcil552ryqnwsm9p278nd172p7d8s4jwg3xdzbbgmni6";};
+exam-lite-65754={run="092wb5wjk452i252g4chnjzxysmbhy30q4cxir32mx54z41yf0dj";doc="197mlnayyzgr9v4yf3w6m72k8fqavdy4k2q1c0v7slsvqad320f6";};
+exam-n-64674={run="0j4bi7j167fkaz57wfav9ybv5b5f18ql0gscvdxyf9vh1czk83n9";doc="17jj5s75fs0sxpak8ywd6lmss3iq290316mr5gyxm3v7r26ji8ii";source="1lvcxbdwy7xxjwzbxzrykym96j1qa7caqkdqhhx4qxdry9czpl43";};
+exam-randomizechoices-61719={run="13dqgkh1isrg0z97z7bfd2b952sc2xr7w7ykllhvmzicr9gcml1y";doc="078cryxhlnwk0k01pwypmdkkjlna0fn70kj1xia17jq2xvc2fpcd";};
+exam-zh-67505={run="0k6wfbz76j0lz3abcbj53pc37psnn0wvzq5bzhx24igmwx0wlawh";doc="04q7r7pcjwz3qni7yg18c2jcp1ir8lb35dw6rkf63z2928f6hdnp";};
+examdesign-15878={run="0y9kqiihidv24553zlijr6fspbayvram1mqgy9kmd1wwskvbza3w";doc="0ddgn0f086qdsyssg4gm6ynlcnnsd16qpvn2g3wzija7ai5sqkig";source="0z5539hv1li9vw0d3jx7q9s844f29wi9xr5z30hvzl3721rnkvzg";};
+example-33398={run="06ld0b9gi8s7y6igijylfvj2qvj3d45z2ml9wd1zfzkpf32pghmy";};
+examplep-55265={run="1a3pdaqzc9jx2yf66vmjg9r4w07b8afyqijl21np6sf7rrsn7zg8";doc="06jqa848zzswd5pbfrvr9lh3i4l5h8wf3v9g179g3q2yb4dmvjwv";};
+examz-67303={run="1vhk3kvmlsj2kcz0ccf3g3a9z5h6ds41dpwhjd1k3iyy6mrb69r5";doc="0vqm75k7xqi40gy116h3rjhlyjybzsmrpnlgmsx8qykll04y4vql";source="0lnr2s33z95gzyw4vjz6jgyhqcgbwyq1lz8rz5wzafbf87mdkigx";};
+exceltex-26313={run="1075b0wm708wj537pgki1hvj58l0pfrdiglalbjnk3gmf18rk22d";doc="1s48mcj49j9jm8vs5nhvljb972vhfng09xvd6kiw01a7i4zpw3h1";};
+excludeonly-17262={run="0zfml40br991mijcmplxlff2lzkn8fdgwgxcam7vnr23kag7lzxm";doc="0argzz7nwadm11qp642r454w8p0swyhvscic71fhwi47n69cfbgz";};
+exercise-35417={run="18f7mgc2lmm1lg13dm858nqsqzga52sw0r6zlz7f0pv5hpc0mgak";doc="1y50izz1z2s52knqn9a1jianq36isyafviv0yxqqx6zdfckqca0p";source="0lpslsk9a7dx5xzr5iif1prvrn399j70wfcqhgbypz970zzpril7";};
+exercisebank-50448={run="1algypm3nhkbccd9k1w5qr6y75hqiinw5dj1h4fbmripmhdwircs";doc="0szpxkmx8qi3zpcrjzd1nzn7jcp30wf9nv8rp77x7rd2yd0sw0dy";};
+exercisepoints-49590={run="0vr2yxqx2ng1f9qybapz61146lvsniv6mjwl1yfxk10qyvdw3pnv";doc="17kz9fyd7cc4pa4j6dsm8h5zpwfr68wg3ndbswgh2pgwwvf63777";};
+exercises-55188={run="1yvdj03hr40732swfsg2br9f4wx9855n7a3whlqjdnczp6545lvi";doc="137g1gvwfxm3gid5xvikrqk0iw75csrkqgrwmh0hda28dd4zbdwg";source="1lryxm36phhp7p269zzf9a200k9k0v8zw8qyqvyk784vmvyilv7z";};
+exesheet-69252={run="1qrh0a36x68fs7xkp2grhqz94v49180v8aj95v3w08xcmx5jvwjf";doc="17dxhrsknh9fx9g75dkw56c11wpvc4xyzv7rgx2dm29szg7qvrnd";source="1hdkh6zbmsmc1aqzglihjr9xz6dhfxcijmyd1wvhb8cxh8swr4dw";};
+exframe-53911={run="0sc11jk94l0nmjjd69k6nl7j68szdkihim194pdxlyiybwqf9bbh";doc="02s61k5lpjw121cyxkkhlbm5d6wv0gl009abkjbidpgxbnd5yl4z";source="19y20l5g814cvn9z0axpkynxp0vwkay782dmn05g6a6qzjb49i0j";};
+exp-testopt-15878={run="0g7q4ccfamsd7sr7wb0qsw74dnwiyz0rjrniaxm5jvgaadiinc7q";doc="18i2ym0da8vp3xxy5q2gaykvja3dga4l64q9zjxknkm50vj6dj23";source="1xfp15q94icdq773ivdvk4n47i2k3g3y9smdvmxw5m9f35nayypl";};
+expdlist-15878={run="09yhcdbx3n7gj3g2v2yh4navgdf5ik4x281h51kd1lzdzbbnf3aa";doc="1qgwn2ignri6wh67wwjsqpbk28jch01m8fn0nw6lpc6kfa4a9g6v";source="1m8dww4i5w0hivs904v8ls1dhs35vp3qpbb44ihwha0zsbvghabk";};
+expex-44499={run="1vdbsxn85gkg24rx3qhkwcc658zjyhkymfspysxkxmmb8rn42y8n";doc="1mgq1knfx1lf0vr32wa2r6v0sr49m0xjnsdy0y42zngfi1mizp20";};
+expex-acro-68046={run="0hdbjdkqsi6nw99g3rqvpd242mag8k7ggl6bb0wj99nzfq9f43sl";doc="0ilsi8ddsn7crc19qf22vwff2xc4lhpqhxpk6mb7id5fd7xpp0pm";source="03addcn3axfzl3i502clngi1bc5b4l5ndq335xh6x5h2566kjclc";};
+expex-glossonly-68860={run="1qwcib3flc06b1l4fl9knqb6xjwhq59h9i5gfniq602znndjsc21";doc="0k740yz8fjxkcmjvxd83234arq375xg8gcahyh2iwzqs9k8cvi4c";};
+expkv-bundle-65623={run="1mw1cdl4phkm29yxb747whkkd81g9a3sbbnkhzgskbna2zcjj0l4";doc="0cwydrq8k5z6j62wizgg6n1n8r0h0vi4ijky59vvz8f7b95j2xz0";source="0cv1r3daz5lscdqyjgmy6xj00b4i280bg1c93b2kd9x3svv179mg";};
+export-27206={run="0la9v2m3n15hgds8mmp1c56dz0a7iqygjk2qnd99n5924n187wyd";doc="0ipbs7rdwjp6jrr4drgcs73mc8fy6bav24qfda1an7byglgcf2nm";source="1q3xbj3zicbizadihwb6b75c4d95b6wq0adi45wbqf6hzj05bd5x";};
+expose-expl3-dunkerque-2019-54451={doc="0xij1ycxnc3hfzkl0bfs03s0zzzv6xsj3myvykb6n836j1g66g2y";};
+expressg-29349={run="1hcrzh5xhvzhf7d9gfqfxj7bi89ds5rxa8m6al12mdr5qpffzzkb";doc="0kla1swvhd43xcvns17wlcvq33wvjidhkqnd4i587x9mdn69s8bv";source="07w45g2nbldwnbrbrmdq9pwi3xbi6cl2mqxaiyk78jfgr033rmqf";};
+exsheets-67300={run="1ymcfy9i2ll048sc0gyljcbwa06m9q0g6nxp3csvk4a367wv9cxa";doc="1l3ln3xkniyfgmhrs37rixszacsvalwq78fyh72v8ca61krxd35q";};
+exsol-69343={run="0w51rxp4lw5v1xmhp26bqalarp05x1ynpskbgb2ci7b3g1xcnm0g";doc="1hjvmd9rjd5vb4d7794iii26yl394plf3ajihp7mpmwbzjz14w6b";source="1837xcdlwxnw8944c787b4yqlb2bi2sijx0nnr3vfvidpwsa7ys4";};
+extarrows-54400={run="151qmfsqqj516ky9j4wbzh1618r769b1bqn4rc5fh51p1s28k8f7";doc="1iw3750iikf6dc6kyid86r7kdzkpi1z4la4zlj63z26fczivif91";};
+exteps-19859={run="1pmipr1444l1yai8d9hhrncvimzb5scn80pqij2g90lz160962r0";doc="0ymkwhbl6r64pxhr95wdw10dvn6q95mkz1pwa1nb42sdcljizrsg";};
+extpfeil-16243={run="0n2j976a2607zsgf2cda5vljl497c1562rn7cih11h6vpx76jx9k";doc="0irjpxz1zk30myk0h1wjhzcxdpyqjfzxj0lx1nz56v4f157myn50";source="1yf2kcx73zp24wrjb59zd1f35809k52cdwym9xlf5fy32rh69y08";};
+extract-52117={run="0yfxyzmicqczvn6pc7ykakpm2hjsrsb243n1bs0crjsvacw29hb2";doc="0lkljkwf22vq88nj21ca023ysa0hmgcsh7a0xhk210ba01a9433f";source="1h06ji378l32a18nbf2plhk4q3vzihc541d0wkw80ik53m0frn0k";};
+extsizes-17263={run="1249x8lklry9ibil9crfvy2x3hk5afnc3g3khixqf54jcb29zpg8";doc="06a01bmilk7hqr2k9237i6x53f6wz4z4vhr8n0qc0i3j09n5i0ps";};
+facsimile-21328={run="0mfzqrn76b2nhz60rqjdr55s6i9fzw96ya74nncvdjjcvaqpjrjk";doc="1i3vv6a8r1mmkmpjwr66r0isha7s5ksp5cwgx3rj9sl3wfnywsfz";source="0icxnmiwmrjsp1lhhdkcgsjif1s396lkdxp73vz59afzhwdm6l0b";};
+factura-61697={run="18p09q5r4n04r3pr636zxbq2jp027knlzphd4zpns3d2szgw2j05";doc="19d5nsjxzghmk56l1v9ppr237ykdrgk7bql4cdr4d2rdvqbk4r19";source="0l77127yc8r4n0iyv4q3ilcs9hrfjn0y56rc805av4gdrgil9xgq";};
+facture-67538={run="1vfaj6hsjnd1cmgwrlj08bn9zr52zc1z9h1dpjq742gf8n2f9qfb";doc="1my5nlwdik253073yhcjbvqkgwcw5kvmg2fm2wladlgcq8qav96d";source="11nr4df4dywqaq1bk3vzjc6s9gd5kxdksicij2fmiqx4a5309ijc";};
+facture-belge-simple-sans-tva-67573={run="0n8wwl82w7hn11l3c3fg7nr088v2mv4s2d3ynwahgy18k6953pxm";doc="10yh7528nms60ypc2zh9viamk9cihi0a67jcvwzb2i8f88sx4cfq";};
+fail-fast-67543={run="069rv6yv525b9f0igkaax17kr3qyy1n82v018yidc57ig75h4vlh";doc="15qydfbhbdvkzrys4x3g3k2zpzjzah8yx7q1xxnc9p90rmlj6ch8";source="0ybn1365n7mkaf73sc667pw826n1pndrizn5svnx89ckzhni6s3h";};
+faktor-15878={run="078fxihxiy9bnszy2nj5ca8ys9hhhazkawwi7x2hzwfh3n4dyqz0";doc="1hj13l2g7za8n3bkxmg04npi5fnp4jv8viyym1076wify7hrwc73";source="1r8wksjr0q1nm118fzkn527lak31j3sjrbsahpdmvxfir7936njx";};
+familytree-63739={run="1a6hvncnjzrjb3bpikkjlmamnrsas5221hhxmlvfb8x05qxjxx7x";doc="05m6n4lzz0fc2hm011kyvnxnv93gl39jd1lx404xz0kjs0l94cp8";source="0g6i47agywjpqi2if893jpm045kwda3bhlm2afd6gpjynybpmhmp";};
+fancybox-18304={run="077xd75n1lpy5a4gdgk88p0ai2is5aj4lf2cfxn7nsyhdvc1y6gv";doc="1giimlw8zfksar2hwarpnhy2sd0jsdlxzfw6gz1lmdb8xmwkx2nz";};
+fancyhandout-46411={run="0fgyvrww1h79bvwf77h83p2lwff5b564gk8cjjnkp26zjpphah22";doc="0r5wzyw7z8gsm2k1y06h9gj5cfxnclawicxdjpq50dnb6233ac08";};
+fancyhdr-64977={run="0sh8j11p8za9rsskamad5av81827n8x1bdknfq2xzza5k15x8r1d";doc="034gij44l188s6cvmjn3gl6y7bz83ifqyz6cwyhd7pms6pajr41h";source="0mwa9c6a1rq84j522q18c1hg7j8x1h14aaqrjx7c92aw8r15c5r8";};
+fancyhdr-it-21912={doc="117826hd9zl15i8qf6d1pz2qz57l68a9nxqldxyk21acc29ifalr";};
+fancylabel-46736={run="0fyrhiknwb658rg4lkdkfb221yrvzfs5g2rmxfas69p6aambyv36";doc="0fpxag39xa2piybkb19fldg3ykwb26sg700jp8hy6kgb8afp4hrw";source="13hx2k4i8ji3a9kxd8j2j177l4d5asz79r9v707d8i8vkxcm1ild";};
+fancynum-15878={run="0vfis38yawys70hv4vrrnyy820dj89dqp38jbg199pbb8y0qf1kc";doc="01f7d3him9gcm7p8567ljamwrg2jl25xs7w6jm05l89dkcb34fdh";source="0cfm5da0gk4y8plad5khzhf9gjyayxmca67qpvdj296p86xxdi32";};
+fancypar-58895={run="1znfj0zw15g4n7rf3za61ixfy7k8vyv9nikkran9bvd0jmx6v4js";doc="1qdqw4283qv1i8njlvnds87pd1ssx239ycd985rbkkxyd0brrqa8";source="1y35cm7q0qa2szmkldv46203gagzxwz4cam7yzm13s78wyig6mcd";};
+fancyqr-64182={run="0r5f2cq5p2x2nrhgamcl4h7jc01z8lr0kpbvkalgnp4bkr2js42a";doc="0gl8kkf5bvls46hmcwpm3klnzc0rp7mp6cgn4fv33l60yi4vpwxk";};
+fancyref-15878={run="1ns9b3viqg45w3pmnh69fdrjc9p39pfnqwwsfl9nnx04pf8b0p8i";doc="07g7ynr4qjv5l8v71ymbhx3vf000g5qq63c4i8q0iq35gird9yac";source="1p5xd5a6lwv71hp1sx490qwqbjn720gc1fpkk2inmmq6h6vwgpdy";};
+fancyslides-36263={run="0hfa5jklvybgx9rji032rdmyh2qr63fkyanvvs0jmg1bkpqw7s03";doc="0nqqvkv9gsl3jp22rjkxrzklpz6dfmm3wy3mc9f15jv9iy2zlrr9";};
+fancytabs-41549={run="0yxr24fnjabfzhyvfj7nhn26cc7hi08byw7zzmky3nnynxnxc2p6";doc="0f9b7rvnz5syq5dghj426k9ypppjg4q9wzs8v3jl8af94xy7zrig";source="10p8hb18qrwp2dxsjybrawnlryl97k854l11c0327r39qiya61ns";};
+fancytooltips-68931={run="03b31bifjnl75hscp908x58r90zrp9hy8r4kf3lkygqvikh8f5bm";doc="1l6mp725xjmy6azgx2zwcqlp3vfvk7gvyhr0wwrnnklfcscyr1rz";source="0nhmjrivw8a2xhblhxnjbyvmz4hp68sjxnnfzmqyrf1agjgwz8m0";};
+fancyvrb-68772={run="19kr6cgk83fmdhs7360gvi2p1q94jnl5r9vbm54zzhy114wvhiwz";doc="0jr5baqc56iyz0bifhrl6k3ragdaj267yl3hc71symhdi6sld4if";};
+fandol-37889={run="1l6h2brl2d6bnam6p6j0p1d2s13jnva5zkr1xr4sarzzxj6zlz2r";doc="01ax7za7wcr644ncpv3rpfvl2ndqlppqnjzbjp8y2d0hawc3k5m0";};
+fascicules-54080={run="0zlkjn8kg6vb58xp2xh7jwjk6dmk6knzqh8v7lrdbmzhw9j28vwb";doc="1jkhj04gpwcckp9zqanaa9zhplgs2a5xqnn2xf6ir6qifiv3403y";source="0d7crimrdcxlh8hd24qfwqnadxfjsfrfnjr4hx5rrj75mm946zmj";};
+fast-diagram-29264={run="13c2r5prb7dg05j0r4lkdz36v51zj6v5p2c7q22gfkbz1lj1s6s2";doc="1f3ghs0l6mj2q3iw74rjjb12y8151cccvhww13h4kzc30vacr3r2";};
+fbb-55728={run="101yfs3np0mlwgfhiz74jh2jngxnb395wkcm9fvpmrs4rp7wxx4l";doc="0b48vqwyhmygv70gsbiknmmysd8pz8m27pfj52zqzzb0kphibynl";};
+fbithesis-21340={run="0qzf6ch5b25qrhzflh8rwrljhlj87i6xaldnpj8j9iq83y1xh4jr";doc="0wvnm716qi0y54h95zlqr7m1q9dgmjnl9f0ghvjgm886hljq752z";source="02zmk6yx4v47ngd6ba6mjn1rnhm2w6p330rfz6nkq8shcky7sy72";};
+fbox-69041={run="1v7ycqbqlk80lbf5wag8vmyhwr1v4jjs8j7bzni4pm8yp4m0yjis";doc="075mws8pivd2nc045przgf5lmf5mpaw8gdyjlj3haqvpq0rf5mk9";};
+fbs-15878={run="18h6n8azrnk2qabv30kpa8gmj2ljkvx0nqs8qb9r8dxxnhng78ch";};
+fc-32796={run="0bw8ifh6sxgii5s3vx9d87m4rdfmifdvw70wmj2kwqzrij1ri568";doc="19p5r28fzw0i7kmvvv93hiw7cm3lkcsn2hdn90k8m7jwy758qrdd";};
+fcavtex-38074={run="1rnfrvbm4baslmmakf3s1n37razfzbc6d11b5yfhhdhskq2aci5c";doc="05ixrg17jwd315q5c52c4b8smcihj4rzrxjparrgfimivd85i3h6";};
+fcltxdoc-24500={run="0bnz5b9ibr3lh5qazdanlvvpp8d1h2apzkw61qxr6kg9ymmk2w68";doc="0dvr57jz38v5wflcjjp19rwjbisbzkdc91fji9s1yrv27drawijp";source="0k54q30f7qp40fh3clxyaa40xhsa28qyavn13km65s1hwvg4hg9g";};
+fcolumn-67729={run="11bqaca189j79cszypwmijw166v3j9pkm60y2c2wyraj4ss4d1k0";doc="034crw2fxf9m7a7zvsi2c7fafkqkhn8vfxc97dc7k74wrd5g3kwl";source="0dqcm83g989lkgjkb5q9s4d4284g5c2y36y75iyq4jhdh2ca972z";};
+fdsymbol-61719={run="19kqkmjsi5kw5s6kkgf4y7nrwjhyd9pgq02y3f43wfdml9jwlvx1";doc="0ddy5d074fjmkvl3pm4akqfq7d3f57y09cfmrs5wfgvvb51gfcvp";source="18hiwralhdsp8sj8yr0c5pj4xmjaiyyha1y36sgca2xlacpw8ah3";};
+fduthesis-67231={run="1cysdwj1gl9zpxqqcb563x7ssvc4y6g96cn3afbjk5hhw8381h1x";doc="0w1dyxcyxjpdbmxrv23xlrhg21kq2wf1r85dkdaw3hs76800baqb";source="0spm9cz58xa2fi86zcbs4qp4zxcdvaq1ll41bmp7mkykr369j2k7";};
+featpost-35346={run="1p8xb6kmfhhqvxcmgf4bkw60p1py2s1pyn54700zs8vlkbxlqy6f";doc="1hy7n0jfdidj3an25j0m5bbv2ks40iviwzwijlk6qqdll0k26z33";};
+fei-65352={run="02zypphy3s8z531zmvrdz2df0c6viyfnzfmn5hgc8js557z8iw3f";doc="1nimda4g0gsf7521ibmqmh5a9hfyyhdp28dpiqs0wq50ysl8phc8";source="0k5y72pwziakribc9m9yzm860pg1q222qarvrqxyjqchhlikcrhd";};
+fenetrecas-68779={run="1fx9kfgiiqkkfgj12x3yph2218az86h99r9idg7q5rkx9h04lzg0";doc="1qcg04kcvfmrgsza06fd2aam27ixwydis86f430cfli4x3c4c7ap";};
+fenixpar-24730={run="1l79py58dih05c4kjb8cngzs3bzpbhc72f4hnz2r7nfwmjp86c56";doc="0fbx9wms2n0ff1cdpfavqhjg56przd7hr515vh81g8jgnz68s24l";};
+fetamont-43812={run="08c8xjgam1fx3aa4ikx62jfh3f4bws0ngk428bqzbrd8q445c3jz";doc="1zlhg0wgchgkk6j8v23wd29hklpzb8q4p690pfswg3zakc0dcbgp";source="024bwgb36iz2ylwsfzz4wfgsyr9djdd0p23phadzmc8qzxqsslph";};
+fetchcls-45245={run="1pccfz68chmnbfi9qnrmdnyq5kvkq6ir5dl09jqbjlcw7hw82ka0";doc="0if19dgb2k75qhyka4jiijnl3msk8y8kj0fzhriarsicivwd47ds";source="1qb9ymkvbxmxlpcs3drcyk02bc372s0vhw6wwpig2bchb1hwdl44";};
+feupphdteses-30962={run="0sgg5wi5iylsz0y2495cajqdp8nzlsps3x7lzalx0qpjid91lij3";doc="0ish03jv00i0crfzhjh2l32cspk2r5ifysz5prd6fwhdrmwmvm93";};
+fewerfloatpages-58058={run="04903zr0lk50i88vywpbzpg908zkmy0w8vcfks55cmbfb2ja37qd";doc="16hb3xm2aszwlagzq9w3bi2hyanbss3s4f09sypg07dkilifdnv8";source="17rcaydy16vqnlgn76ijhjlv2jcnw962wrsssca8z8y6dfvy0aqs";};
+feyn-63945={run="1pd608v8wl7007rjmsykwabr1h8jjk1s78nbmq4a0541rj06yd0p";doc="1dkfi17i6lz464bwmr5r5295y1avvsn5rpdw4cv80rd20lvhnyyp";source="1vh6kz22gpmch2rdlvhplvqqd03vd0mn5m0a123i3xfbka1myza7";};
+feynmf-17259={run="14bl9c8yz1z596281kysyyjbf727pi6mdnwag6gfqs1nsinq0a2i";doc="1ql099wrlddb4fyfrsirx0vnhcbh0wgwp9yixhvgxfk5pbah8v8n";source="0f9ghmp0hcmzadsfljfq7pinn69251dwhcdk4n62jrd07qdgqsyl";};
+feynmp-auto-30223={run="1yhvcxiq6ajjmlsvnznzvp35sap1qsnj54zv70dwpl29rkrgrmsp";doc="1y1pwlplkz2z7lqz84ay7ch1lw4plh4n69isqzsvhilnr31fkf0a";source="0ja5yqs9szyk4s2mk9cbjf6p98dagwk7pycma84y48kinkl96s0s";};
+ffcode-69383={run="0lrhl343ffn2pvffkf34kdins8b97vq1shaianzlsbr30slliy77";doc="17jxqsa16xkrmq88kd0ydn4kwfr313m8ppl7g7wabnaldnwxi9ga";source="04vb3sanfnzsyg8zg53r9ksrfj03lh08yq1r0wxpz82gcdbg4zhh";};
+ffslides-38895={run="1mpfpawdhh16rl6pnvxnkj95gf9hjs49gj7cwfyngmqkjc2idi8j";doc="0z5kpim798zxj20p70dpcgmwg4vx9mb0zrmq620sprxxdr2gd059";};
+fge-68353={run="1f6ibw87kbhpf3qxjh17jr1lsh9kk9ynf1rngzyjwbq2rk2id94f";doc="1c8nnpdvkxcm6218mrs18ipjf9mrl1cqyvv3p31x41ii8wxkvjm3";source="119d70668gw3za0mksr93wcq9gpzjn4gyv8vmizlabi0ip1ycgy8";};
+fgruler-63721={run="1x0pqrwwbwf7qi64wlcg8d73sf5r59jcqhhm3l30qk1ymfwirzvm";doc="0mva3jv63prks2la2g9sqza2ng59bg9g5xkgg4flamk0409bmd4p";source="1if9sbrln3jsc965xn9njllnn56dl5y4v2krn76hyxsk1vyza45k";};
+fifinddo-info-29349={doc="15zp4xvszy07cy1b5r3k5x256lbalr5acrrdj1gx33llfmvm469a";source="02pmj7a9hx4xnfjbhwg273a3wx4449542rs7rxkii4hk78xs5lwr";};
+fifo-stack-33288={run="14d714q6mzpag5rcn2b2454pad3mpvdz6ii8k7jdvx74ay24zphv";doc="0pgvcyss7h1mynawdhpm8xid0albf5cajhz423ygz3ifi2dfrasx";source="03hkqd4s9dm2h10i8pw3a6qgrjskiyhnkp4wh9r55l60wnqm80bc";};
+fig4latex-26313={run="1bq3hj1gnc1g70jvrrvxsg1lkxrdnj81h08qr7hqwlwll37qlha6";doc="0ddaikx7qphb98xc3nswyv01d0xh5g4vf95fqsnbhg811c83jpk4";};
+figbas-28943={run="1bgpchwgj10609ld6i4my2b6ynzlhqrfqi10g7pbqjaypyzbjs6h";doc="0ncmqsdvhssd1v77m0jhx48fk6ssxq5yggd29dd7k3jrypaf3bck";};
+figbib-19388={run="1lxg05j9c56rrinl5gc4y7sc4r9gc5gyq59d3yxq4ggmq9q9l3dw";doc="16qbipciqc6vv5hg1fm9rda4kk7x827nlmzha8c9i3dz7gy0cnan";};
+figchild-62945={run="0k72116mhd9z9psbnrncmn8x4svhyaf8b4738qxb808i81ba97kv";doc="02xr6kq4mrs9cacn2sczf6ys2mhwy5lpzz3lbklx1na3fbkm6aaz";};
+figflow-21462={run="1w2wccxfjbas2yyp8sscxfb875kz3mwqjlma46v4328sd9vw4pwc";doc="0nkdz047vypv0b47wbin7nz3cbcriv89w05d6yn26wvq5svlxgw9";};
+figput-63957={run="1hvxp65c2y7852fj2v5b4m3bq4197m564y6gzin2hddbd1w003vf";doc="129jyybg92ddy5i6gg0f28ij0qxx59p8h2l4y9gb154rdmqa2bld";};
+figsize-18784={run="1hb2fck0pz1gz6vm0ffpzn3vcm7lclagsi599bi2f2bc9ly2372p";doc="1zdncnl8nmkazvqjyamzgj1x1f5fm3kyw5m5fi669rk9dqhsiq69";};
+filecontents-66740={run="051s23ymbjkv8z2d7sv8jsjljy5w2sh1mgvynlbkib390gpgybh3";doc="13fwkv2fvdfl1jgyfg4pn9il6w6pn3islc9zsaqs3bwzj25y16rs";source="1x5ahz0fsmnjx7bvbr83316r6w80gnp83yznnhxnj0zg42s2gfxa";};
+filecontentsdef-52208={run="0lrdmz5fnmrlzga1w2hr3ksydnz52lmqlnnmix7xrcp81qv9xmx0";doc="1nxb4wm4wd223f9wn7x8j805ybximrk0v6n1l56xysz4k30jxcba";source="0n7zq8plqn1yki6azmncgdlg2lxcprfpdq5dv0qnxvpvw5dawdvp";};
+filedate-29529={run="03fwpi529pp6bqwr37ns8nas236nhh7nm592rpjyrvlyv1w30ifp";doc="1dywknjhl2p9590nvcpg1vi8r0iaj52dv7sn8c2y8337w37c6ny9";source="0fwqs6wqw93ih2icg9b5zxgya1zbaj2sn0jd3dc8b8dm59cwggk1";};
+filehook-64822={run="0h0k0fgdwzm50jz0ibj7zsv1sk355q13x1djc3pk4fg1f3czhfh2";doc="00l8hx1sn4sn1mqpyiz9isl5a25a4a64nifq6q2jlw09df9gmf9m";source="0bd6fhrzy6bh42yb44y4bh01zpx92crca8zia4lyjmc95rlv6gfa";};
+fileinfo-28421={run="0x922migfx9y1nqqs9lv4ygk3cvqj88a92cj1kb9xkgykp8c6cqx";doc="0rw1pdrqghgdwzyfrc0y44cj1989lrvpab4n42qxbbb9srhmary4";source="0kssla41sryd278w12syrhsi5aalld94vjcmddldcc0l8l71sz5f";};
+filemod-64967={run="05lipahmxgd7cy76rz1j3p2z4k31gj4q7ihvb0zbi44g4n26hz6v";doc="138481q84a436a9ns587qcmmsv7p9fb5wzz1gwla25jigx8fb4fr";};
+finbib-15878={run="1dr1ivhfb83ky3q82dzzv5vvc8bl84iq7am0p1rc8fjlbj95i4wm";};
+findhyph-47444={run="0b7qqz0p0l70r6dl4jhx086dxywb0vlln3r166pj0yl5jfjzhpna";doc="0n7cpjxz3adj4bcmc1vd548lggcchhqfahdcvn4w9invw296hhlc";};
+fink-24329={run="1pk9qp2cbc1yagrgnjz6rnldn6zgcb6bw3vi452ks4fwic4pgwz8";doc="19fnaw32vgjpj991n5nlb0hwac92kmny3zc483wffbhbca1nkdck";source="1dm06hhp311xjfjjjpw66hmm52yivjhgkpwpif25cvq1z8dfgw2h";};
+finstrut-21719={run="148pca47nggxv9dyg5n0p40ri1mqz5chj4ir49472w62c8zh83fk";doc="1jrxyksw0bldvf5faykbpcngjfx06y83q81rs3k3m6vldm3rw23d";source="179640qn5swml0wrc1glvbf94ia5y6s1qlyf3hf2vmr3vih7k2mh";};
+fira-64422={run="182wpm6dkhs41y6kr4bjc4rpy0b62d17r0j60a23znfgglpriy3f";doc="07wm5kca97r39shhymnwiarsxn0i5ykycyd28shqyqmmmk6f2j33";};
+firamath-56672={run="1d9l5nsx0qswn1hcalzsrxkvc7mvpdqk3h72bfk50h91lfm2i567";doc="1w6zlskvs54x192nyxa83qnlqhvq98g64k5fv6ch406nkivifmgz";};
+firamath-otf-68233={run="0680qh4drixmrvhv3klkflz0jml06x8k9inl2c8ym6a8adqx43nj";doc="10ynw2ckqc7vsv5hq9kv78cvn6yd23qfbyv5060sjxl91w6qxs63";};
+first-latex-doc-15878={doc="13ngk5pia5vbrbb4jrrlq1lmyja08m7cy4ydcjasxha8kns001ss";};
+firstaid-68720={run="0jfrn4vx45aqlw8n5ipicl12y5r62vsyr6dl9vzf6yld4dn5zvvr";doc="0ad36d5bjlj6y5x7aixgn5sl5ra31hqif5yz0j7n5v32hxhhjqi0";source="01pf1jpxgq7j9s720xagjalhyzxr49i8kaw9mrab7fvx693cw9dj";};
+fistrum-66461={run="1ypzwh9a7lkb5b6d9796hwzarlsm06nyndl4clk5ss7nh9jdia3f";doc="1zyyrvm4vmd1fy35clf4aizb810mhr2xzsyzwmpcgsbm3nf7i2ng";source="048g8x5q882668lbzz0ji1hndfkd2bd777s2zyyq59bcw0gmavbl";};
+fitbox-50088={run="0jk46rrq01bbqkwfqf1rdrzwv475mdmz4hqvbffkivnbwj1vz18g";doc="0gb5gpdrdagilxsklq1aijr5zfl5n82nwal1h9qls0iqzjvgizka";source="039q5as7939zc5nby6m6piz5h0zphm19hqjkdyrgzw1q4r9ypzc6";};
+fitch-69160={run="1c6myhpv9ix6cr6snn5f9ky2z5caam1sqjgg0bq1bj8df3acdv80";doc="1gdgmviy8pqqwwsvinrb8qsgsd4gw6bx6xci56w4nmfal729r6g4";};
+fithesis-64135={run="06r4qkkgmvak5z624vhk2gl7vnq538ixjq6v2v4h1zz2863kicck";doc="15dnysdjas5a2a53g295f5g4fvi4rii10w72w5z9libxp6h93nmr";source="1a35viafyrxh8aqx9n6gy4j3kk4yjz5cjgwrfyskbpvk014y84n6";};
+fix2col-38770={run="14n020dmfn2s54h5xvc9lrynijcwnj3d2w4kg2w52v0kf037hmln";doc="089pdfpk0bi23yb7grjv4w1agkssfczwvv2vhk3piy43qpk9h09v";source="0wi711gb3bc5pc2kb7q2hz8y09g4phjxggrqjbl6i432z42fc061";};
+fixcmex-51825={run="063a2mwh75mdbh8syvrdldb7cj4iyvqkbkda4jm6cq3nwbq9kly0";doc="1c9q5srhfil0wnk84k072ridssgwbmzpskk6pwpaq8id36dydvlm";source="1h3xrdz9anb2cxr8p175rrcjvaawv80cj3bp9l6bcpli6yb6fdfr";};
+fixdif-66606={run="1gxz7bv0h2485pwrs7b0zhjcafkgzd1r0ikpjjw0gh4iqc3bcqd0";doc="06f5mkpp6aar6c569pwd9952xgzjdy3zx8n8y6y9a6wfflyh3cis";source="166zj8nmapwqkd06ksvjbjajq649amjrfji9z9j9mbcg865pgwa2";};
+fixfoot-17131={run="1zszczpwcggczq428ha84g71rvgml2zrx2v74nmk1damcp35pzlv";doc="07zdbq43l9yddc9gi4i2qqpvz0xxmkhxgg3wl329j25p4h58amra";};
+fixjfm-63967={run="1v4gn6bwlb294sxrqgy6j9vx2dp7plbagkvmw7vbvp6wk8dkza72";doc="0wiihlpjzvmh8dynf0nbhmn8raxflqxmzpk97s1qv7kkvpc79sy9";};
+fixlatvian-21631={run="1qm1jj803a7zgqbjn4q4sg4mn3pvd600pfkqabjvp0ck24r1pw1p";doc="160bb2khxfhl4g48a5cbj8xdxslgxvav1c0wiq3w1ajla278qj28";source="1zfdr8kahxgkhxzg925lgls50prcgyp6hz1vhis1241f9rd6r3qs";};
+fixltxhyph-25832={run="1lvr7r5adw566q0hbvmmvmh7igcm8asl0ispd3lflik886ycmmlr";doc="0yfa6a6dvzx2jjy1jcw7phps4wxz3ysfhk5mxc65qss9kmc94mwq";source="0ksb42pc0bm64pgszgph6g0rnksd9fhb48z97bnd9jcsg5rhzi12";};
+fixmath-64648={run="1513gzvwpddwhbaiaw2jw4qs0c4bbiym0dmcc88vzypqsbnjs13l";doc="17y6wwiq3b8l2p3nsfwm50g7lzip8aqls5ysgr4gvz1l8aydl26z";source="0pzyg8k41rlj5gvqq86i9jnys9plqbxb3qvas8fv7k5kvqc43riq";};
+fixme-63708={run="167003w7a4xhy35fj6xm7mx1hvqn1bh1b563sih3adrwyrdnqjbd";doc="03qddrr56q77h8qhrx9kryx1d0cab6lzcngsbmyzaj1g81hvwsxl";source="01rpq9xd8rhy4fz8g1l6354pyibjsl90h591w7l7cz7v0yxldy17";};
+fixmetodonotes-30168={run="1pca7qpkqfd8506jcjgr1kwcymbcljzvsq47xlvvly3qzac374vv";doc="0icin53y7xj0dddsi90n3hkd2wrcpymlyhfllyqfz7ac8y4xn8r2";source="0aphhsamc6x1k891ybxhnqmhiwh0my9sj90x3w22gp7zhavgrww1";};
+fixpdfmag-15878={run="0s5ilsmnhvi57x9cqwp7nwpagfribmgkbl0z1ci55aw2a6bff9hn";};
+fiziko-61944={run="16r25wagw155fnz5lngc3jqxaf5sy1f2mbyzdklnizaazh2vbfdf";doc="0pdnd0h3hkdw32m4yjmqj14ijg3qix8ajjxkhvi88h3pbwd0wjiy";};
+fjodor-53207={run="0gnmdc2i49529hniklcyqrfyrkfh83wbv9zmiqngw8hqmdw3zv68";doc="0dag2ial9cx9hnrhxc40nb31jvkv618jklwahgj6ckqfl89410i8";};
+flabels-17272={run="1aawdjmk8rinhjwnkjz67bq7rcp15i15dsbb9xll59nij849ppjg";doc="1yzlhd6c5b9y1r1gy7kvbrxygrkia0cz98p496nj1kdg1wr1xzbl";source="1vyjgbn2kihvzf85fg4fdg0v46nh0flic1amk7k3sdcxirn0fzvb";};
+flacards-19440={run="1k1h06a22jc8wdcxf1066rn4sfgy4m3wh479f4by1zrp773gykzl";doc="11hadqdf0s7zaidaxfhd6lqhl3qf7zkalf9wimi3j3plp8ln5499";};
+flagderiv-15878={run="1rnnj84vl29061hnbayz5sxp6h1civl9c9w2n3b0s56i9kxv3dd6";doc="0djwrp2rjyyd0wk0sg55w2l75fwj3gabd6bim1smpvjwsps0fcd0";source="1q0g5127vyhkjb1g0v20kd0x3p0b67a9haich1a6yp71iikl1s8p";};
+flashcards-62104={run="1xih8g4znfwgd5cim1z63q4syg9jk8nz99q7fgc9mahzq7xym2mf";doc="17as1mkgllva5q92qddwzffl7dsirx22wlnxn12yvv6a0h8hx57l";source="162r74jij0b8yf22xyvrakbrzfh7vjpfl1800ahljas7n8g3h1wi";};
+flashmovie-25768={run="01rmqf1rg5vbxzs9wap7m8d19fw73mh3k7min4msbipvg1vqhgi5";doc="1lza6mv55da69v8jwjlcd08v5y2gs2s87z5h1hrsp3p3mx3chya1";};
+flexipage-66614={run="1296cbg5kszwrq6ixkpzz4w4x0a7k77kf641v292awpf9sd0mzl3";doc="11s6ldawl1w8vpv6cvw05d9krjxv9921ilryh9ffwrrpzf4vgjmv";source="14ajajbl0xhjxl5zggjpip1b4grszdc2g63csgdy79bpiffpkl51";};
+flipbook-25584={run="15b2nzhpgj6018769ggajya6qmhq9rnyzha0sic9fff24jwdq62x";doc="0lf04giwsgjq0fsk6wrms4c3dg53v1lq3n0q1ij5pw4390llsqd3";};
+flippdf-56782={run="114xvv7sv9fhqxgfz5ckydn95mrg4049ml3kg6vjjiwbilmszr2h";doc="1fgk3g74arazrmw6swfyq38s5gdw8knnwwf5ij0dl566cwmcfvmj";source="0hbw3wgdva8vkic4sz0349mdyx8dpz3k5kk0fn80m0yqpldwgkid";};
+float-15878={run="08jb0v6lsyff09hid3whah0i0fk5znsik5rigl4l7vflnvc6km8y";doc="0pqj9qq5yprg0xfxga8ck1s2wyjzz4ymhpqgzhzbxbdslh475vg4";source="0774d7gmb8c7fc3f8yzarlx1m8nld1vg4gpd3dfyw5b39ra4aq4h";};
+floatbytocbasic-67945={run="0vykm4w2a4gjhjhrxr2x3vaan81yhnylpjx3z48cwspxixlnmf67";doc="12yyyc456v4i5dj7g3cnv03zgvwvsv6c24vfz7wn9jk5gv90vrwf";source="1gkq5v8z77cncqqz5cvzi78jf66v1kcni3yphzhykvd2mgpb917v";};
+floatflt-25540={run="15v2m2mchki2gcz0fcp3myyr806fqyy77nv9g6rqm11aqp6212bw";doc="1d7v1m23p47rl9lln02c6bsi5mkqi7c03dhmnjhg8bqp6xfkfmaj";source="1j53lkr1j3fp5wlb41x2vimncv2l1pc8qm7qy74i0r1xf7kfibzz";};
+floatrow-15878={run="177knmgpv583xajihdd5q5spaainn8h35kgydq2sfi6ch6cadirh";doc="0py5a36gdbsd91679k4chfxy6ykj2wkjqlg4zkp5xsww6fxglskx";source="1mpskdqhghmgh7i3425xb985pwrcqcbfw3hlfhbyx3bhwwx5pnqx";};
+floatrowbytocbasic-67946={run="1bxvfl7qk36znp2i8a704r5jsm2kljaiqyff6nsfji6v69wfgwwg";doc="01qaaddanpvl7v41v499r61m7b739qjjkwj5k9d08h28v5lrny0l";source="1jy49cv9kvcmhkyv8pi45fr1991dxfn7jqvq1i06v0adyprvw01m";};
+flowchart-36572={run="1b6gwbnd9xjcvjxgnl6xjq6lja1a0p2xnrdlbrhs6ka6f6pnrbl2";doc="06i32gmsqgvqgy0l0qbdjybnp4rmz2cn1c7zw76w3mhd9z220d77";source="14ikpr9fga193y2vgr5sisvzc5scf04b1xc9hcv6zmkcph8dvnnk";};
+flowfram-35291={run="1ccmry6f8danw6jqdsck7pzwjsrh5vcfy99f8kzyqcbbrzl5rn8h";doc="19rrav68s3wlwgaa4mhgqsdlr1syfpvp4jzc80cygi0fhv2hn7yi";source="1hrs58xhwawxqd96jb5hjywbfra6az2qkap0p5zap9zkck8ixz81";};
+fltpoint-56594={run="13zin0r1hcfihji2h33q039mpcf86lw2q017ss8848xpqs41fb0p";doc="1yr5d1hs3bdd20df25c1jyb0hcizwq7bxjbcn804b97sjk2fk8gp";source="19qy8da4ppsd1agh1c3xs9fxsl6z8c60lcyw4dd88mymk7yk4ysd";};
+fmp-15878={run="07ml6i8lqcz737fm33g95nx1hz1p0z251h7pgxvvvdmn5dml1l94";doc="13i7axi1s8qqgdvdky20dckmsa95q2q54z7cf6zgd0znzjy6d4mp";source="1fd8h6dndrc7hphs87y1lfplmkrwgn1pxgmvf00gfhgkg1zf127b";};
+fmtcount-53912={run="11d9pq2cqd1qv20wr5789bzmk0a82j4rf8y9xh4l6nf2nk9p5c3g";doc="09ikawga4sg27ch8rvdf9ni0k8b3nk3k84mgydlv4lrg5gb2hv12";source="0ijsl21nsx2kkgbcc00bzs637rq3x92ax0xbrdagkfvnrna0bg69";};
+fn2end-15878={run="0cj26s7555q49fi382pbvy65xa0yp0wbihk3y0magblyxjn72wdx";doc="1kafhgr4c9d4pjpydd27ha1pdbxk364qv8dmcr7k3l7xlv31jv4f";};
+fnbreak-66615={run="143wpqpcqaamjvg466cwpggcayxfqnf2vjvfvy7xwgky9sfql05q";doc="07h1xr1xgih5j8mmqvv6v5kavnb9yzrh94g0m42rjqdzg5c25fb6";source="0rxbjgb758x82gvjrmap30q4jsfq0424r3xszbm1f9b4wb48xqxd";};
+fncychap-20710={run="0x3sjslvz1gsrr8607q9r6k8683p9zcz7p0kxvr92j9ls1prl5c4";doc="0is37brbbdqb1szx3rwgmaqbl8vlqr82sy8svam39yrbnzd9v1k3";};
+fncylab-52090={run="13l9jmcwabifc7m9klgwl2gqypwlizy1mb7glsvp3jslpkhfj267";doc="11w7z5q433lnzfm4c72697f82yb7rljk9zq41dl5bdb7l9wd7325";};
+fnpara-25607={run="0rn4yk1zd4h2r5xhghv7v0ph0raspq4r6mw812hn80bn8rhjjrlq";doc="1w0pkqqgkq379nnqk0wx419z961l3g81ldkh8ivfhn9q5vk04p0s";};
+fnpct-62248={run="127n7966vy4rdwypbsczi1aksrf6pxl8xdywssviivkk3npmhwvs";doc="0qixawqmjn2b1yy0fs140a5wfq0py5bi58gpz8c8564vx29yva5q";};
+fnspe-45360={run="1w5ibha9cxychlvqrbj2v49kizc7hg14lhn1smky2m9ijqrrdwyn";doc="1ix8midc7hy8443fh3vkrl875h1v9hqfwmgjw750gdy9x7y06fmv";};
+fntproof-20638={run="1gq483namx453zg5yv7acvhy9hb93z68fyfb54ayqkka2n35q80h";doc="1qzxky8jjvnlznm11rjzgxmhib0psv7lfk3nfb8ys2wl0zjcrg2w";};
+fnumprint-29173={run="1i04c2j1jnw9qkbv92nd4rr0zzvwwdwwk0ya5f4g4rarvw9h4z5q";doc="1cwc4jv9jxxinradairp45rlr97h52vxghfxin6dwszw51ac8p7n";source="15d3jpxs8zgsj40xipg3mfgir41p46c3ppwh4629a1dv4skxg2nj";};
+foekfont-15878={run="1vb2j10j6ra47gyp5a7fpv3868b1rgk2w54w0cd8iczvshbzva88";doc="0yr9xzq9pxgaw14r6494162acj4yavyd7r123fabwf4dgj1xf46c";};
+foilhtml-61937={run="1qnh70h01ys26spbjcq71zdhq8j7lszinv26v6ikpccsaaxnfdl8";doc="09b3lmxzhfa1h7nwjvidq2pd11dkz4aq3l4ciz0xh7gyslfdwvgd";source="0zhva600hf43h01n9ycjcjair84y0wzpn00z6ihyh8s6g199g428";};
+foliono-58877={run="1k91x2yyxp7n1akm8wm4kgynl977gq7z6pf439aaij9r0zzic2pm";doc="0f92kpv6jvvmr9fh24c7iki37y8ph53n3ixi3qjk8bb55yldyz46";};
+fonetika-21326={run="0fmhazwrjh427g0hz8br5b05ccxv523n1ar5ib9hp3ndqh6svpgs";doc="06mbkp04rwpb2jg6kbq2bxdsagbwl3vajzh0nbq5bfg9lgdv14l0";};
+font-change-40403={run="0955bj8r9jzzyyzn3shs3y7iyaxjzs9m3b9l2b33hpd4qxzzp03r";doc="0khs319ifwl7gfkmv7y27ysqkadz04l7zvcjxn08qzmhsxhjpz6w";};
+font-change-xetex-40404={run="1xjxrpqfxll7wfkgm5ksjfavk7zr5a36qfjm5aw5a92wgqzpmbrp";doc="00ikhz2nafa2ck1j6vb564ij61lnqa64l9xnl4h7v12g11j0h2k1";};
+fontawesome-48145={run="1s1lkmpmb9fj4qmdhll2mn1hz8xk89z9rwga5zqpjb9was4vrg1y";doc="19xjkzn9vgx2sgv5sypwcmwyx9f7rg4q58f913rjwrh8gvncv07m";};
+fontawesome5-63207={run="02ip5czslh9120nrby3k9qn0niy8bryr4190yyhibnwkr9yaqj4k";doc="0mbqzjfdm9hpds1fragbhds1zzyk91xzfy4azzn8bmb6xr3ix3ai";};
+fontaxes-55920={run="1xm9a33imgfsj1r6ky6c02ir857ccv5llqgjyfh2rlvk9xprmcjx";doc="135xhw9vda8l3cc76ja8akfj33wfmmys9wf2f1j5n1p742zj0g3s";source="0mq9rmi02p8lnkg0a8s1bi7rn34dg82n9cqr14sjrhqfvpl3hzr3";};
+fontbook-23608={run="12dcha7gkyl4ycizd2469i628l8qvh1xzacg7bv7b55q0dip2hlb";doc="1ywxxp2ygc6xjrjsmq1ax4p9v0z3hpmbcgsnqm3vdnnda1c0gn33";source="04ny0n1wgs27ky6fpf0i8ivhkj6ypad537mlx7rz39kkjpl6mz96";};
+fontch-17859={run="09jpw4fc3kk2w1rxs0lm5sfvl8v12y9gch4viy6hva3sh3w8yzin";doc="18si3pz2crkyx075cfnz3ddwbgyccgvyxfzqd70njxqspz8xwf23";};
+fontinst-62517={run="1jqhfib1ml33wq292x9ff03shyjrn2b3grw44cxzxndg4vq7mn1l";doc="1138mrjd4lbwn05kksw1249ffjkdpxi88m8551wdmh6q2bnqmw6h";source="133myqzr4xlp4a3pw8ld815mpl7l9y6rhz620ja77sv4fmci76v0";};
+fontinstallationguide-59755={doc="1i6im0nckcr9fzs0kc54dvcj3jvjz2j8jd55xgjm0r569qjj1hi5";};
+fontmfizz-43546={run="1ccfywcywrrim1hk7g0kg0bljq034fh27qrr8w8ypcyjdnafkhxg";doc="1fcsrwbn8kiyw4032kkjg2668ax0kfcb6g4kzgp6bjcmqzy6q1zc";};
+fontname-64477={run="0ylpryn5wnjnf6acjl6kp67i0vl1dz59xk2xbxb0fqhx5ib1gdgy";doc="08vfa7n2bzjsay7b7zaigkq7imlfmq92f4firwc3rx9hfm7hjbn6";};
+fontools-69241={run="0smka2cr5al8f00hfcwpbwkddl7g2zcgg2jrak2j8p2ycibvfgaa";doc="1avxm73plf2p0xk0gh11311bfqbwlxdyvgx9hpg623ngyw90wkaq";};
+fonts-churchslavonic-67473={run="1s8y5kri1sjhsbz2mdszwy12vz8k0b5ad0rp383jrgcd710n3949";doc="05kgbvjj4w3sblsjprgq1gg0inrgrx0hpim8pmbgqj6w8xc1n9kq";};
+fonts-tlwg-60817={run="03fs5l62fbkz9rinnraz9zfz1byjd74xwvlfqcv4cvbxg02dpgmm";doc="0l4p30am56bblp120lcs81idahw3wrgmbrvi0jzfnvzsyd7xh068";source="06zw6amxdkmb9cdjvkvwgah5x33ksa9iigb4dcw6b9d3a0q8c8ya";};
+fontsetup-69390={run="0cwklm2jzf9rhn717y7s2x3wf4z098djd6zg57rz76xrr48hgzfs";doc="1mil076kr9r2a3wpn9gdkax96dzi9fg36ycqcl9h3an4zn2x0b1m";};
+fontsize-60161={run="0614lcl1cxc7a6irrjinp5x1rx2cbzns0al7d9f3njyyayp13qhq";doc="1c6p4yz000rdcmjkn7pgz3ckw3p42xkz4clk5dz01fnxifmmlf1l";source="0lvywzrc56rfkkwipwhqahkm8a70cnff0r01rpl92d6n6znl278d";};
+fontspec-63386={run="1lskffvb9a3jmzq4m0kgq0v4jhl39aa70zkz8ha1i5zhljwg4r6r";doc="12rxb0f61jgh9xbgzq0479zxzqwahsx57s9nl5ygrwcigwzglk0a";source="1zxfi2adixnk7fcy3j4iixr86clv9gckgwimycrmsf4wvvaf031m";};
+fonttable-44799={run="1vz99pfw4akid9hjf7dcqf1fx5h30sr25i1f9q6a9frk0wpwff72";doc="1inb0ai6q8rjsrcwgv8ns6as60ifdidqzqb8x9ygaw3j5ykzr02q";source="1qjilvy77072jpbdc4p4qfy5d4n2ww2wcm5drwvai6p2aclqf29x";};
+fontware-66186={doc="0ng27m6cz92aa52z99gnw5i8s8fbkxq4354mygwnchchgxndcba0";};
+fontwrap-15878={run="185mzghp8xckdq7z6cdwznrg1pswflvfy61bhsnpaxx8wagny1zk";doc="01knmxqj88g87ljvxmf8rr72i2gh9qdmx7zsbwyjmibiw71l6pcm";};
+footbib-17115={run="1vr72sl8q1ccql2p42v3a9qw01a50v1c1rxpgmz39pp65w4z8s1n";doc="1xyq88jcg6p7lc44n2ky7538r23d4n0nhfkq25q7xg0dh8whbm34";source="0ps56l6ah0i398f38bxy4yg2i1p0ajcwczxq222hl5176g2z28jb";};
+footmisc-67556={run="1xyx6fj56vj49m9848i83jbq7k3hycx9pd5nvc3cd6md99bmx9pn";doc="0ik4rl9nmad0f9zjx600sxvlig6j3v0gw2lhxmkbs37v18p0xqy1";source="193ki23hrlnw0vkh2r54m3y2h54kzh989pk6iwjnfgf91d8nijzf";};
+footmisx-42621={run="0f6csxzkwbf4nlw6z9rfyys1f7fc0vpdi2m36g7y3k9l3j6wb3mq";doc="1962sivh4jipsxd0z0cpzpd0jdw8v4afbpzfinklivnla2c9hp4g";source="09w5bfx94533q36z3k0a1sf9jx6acz85qgqypgn6b0b5mkhjsmar";};
+footnotebackref-27034={run="12vxch1i8x0k8d760vgq61i7j3kkylgbcxj6ggdv8wzd20h4izyc";doc="09dvvnjvika3617zx438ca8z3fmdkqbxx9y73pdhn6gaggfmzr72";};
+footnotehyper-60374={run="088mh736125609bliars0scv7v7bx315ajk801yj28vskg0ki5d0";doc="1dj6kpqar8bh0qk0qma2ckp68cll2ncllqfda4ffmc5ljmjp98m9";source="11dg59x87a8yjq8j413gk4p0bmpq8awwh50c6vs9rrcgv67mbycs";};
+footnoterange-66149={run="0z2v5diab3xpq7x63n0w71r9yalnypyv70syh5n4nr79ahyxcmmx";doc="0gg1sc5dv9kpxavrdkc2865fcwkyc9j24bvk34l06fr7ib43bja2";source="09qa9gp6pv37kcck55c9zv3ky79xdw2ivkwf94nzbw475ryw0zv3";};
+footnpag-15878={run="1qdl7lpfy5nn6qx026b9aqz8nfs958grh443lkqyxnrnws0n2nww";doc="006w2w6aga9zazlk8sv8maqi4s1rdzqyphp0lpa8qv5q23vcdhl6";source="1hh2754as2yrmfz4hiyyl8nlshsfdhpgpg3ifhs6h5s0xz947rw0";};
+forarray-15878={run="0cn062f805lgy5m45q6flxj5w6gjfa4w1ip7zmhxd2z09s962jf8";doc="1d6m425lfg1g8arjyz4j3q9253rdmfaabaasbpd2ynhjr1abfh3c";source="0dpqr0hff33ddfw6vs0pnk8yhaa4gxkxgn43qgx06mx1srv6rz1i";};
+foreign-27819={run="1hqmhy3l2hsjf2hkxhrsdc3z1mn3zx8718w90g8152x9k84bf7jw";doc="1gnaazl1ds76sqdpbj773k80isyf5hmjxh22p3hs9zxcpnvdhng7";source="1ziafjxcncsba0gbn1qjf2w2gn2g9z55bpcff71hr9axhp8xgpgf";};
+forest-57398={run="0q1xd07z1ccqrrfl3x0fg35sdv2kcyl6vgps7f6gpk5yp8j7d392";doc="1s9i1kxd5zhdqv5xx29kh8i5fis642hcw76ya5bh94qffhwwg7j3";source="1i6r6i8zh70zxz6sk0c9b07345vcfr9aapw8q5kzd3k76fzcqfdl";};
+forest-quickstart-55688={doc="1bjy0bfkb90nv2dbdw8hdrm3dvm1v0r0m7a0l44ckw48vnc6amvk";};
+forloop-67017={run="0mqlc65g0khj1izxpgm7yya2klazsqggz2xx61ni38z7kqhqs58s";doc="11y7afy69dkp9rabj1186aw1d8vfwk3vp9raj0brknka6wlgcijc";source="0k0skv10m7z44d20v17yfdvg6vpn6m9ajn973d6da9cshxvszyiz";};
+formal-grammar-61955={run="044fz33qawb2s81c8walxiz0qjam7vsvsnsvqchmf4izd0svw998";doc="11rj5pbampim79ffipm7asn8q7nf8yy7l96j0j8xjyfxcqqld6ca";source="0xy21vgswxjr80q1qcx633g09qivgkd3i9gf0fwjmykva23q603z";};
+formation-latex-ul-68791={doc="1mphwdmz61p473y2skv3xw7r7dkqfqr1qygnbg7ih1ai371f7hdz";source="0c4a6hgyvmfav048pifdczscd4cpd6pv0fbaixsaflkrpfwkn78l";};
+formlett-21480={run="1gjdgl26ma0sh15yrgi8kpy4sq268jkz9jmyw66iy3d4k9ybggsm";doc="1mm2m4qgiz0aplbyf3rwzhpfzhyg3mfmzc00z35kv6s5phcmlnf1";};
+forms16be-51305={run="140xh5578cpjn6mfwnghy38alz4av25gha09gl7c7qxljgpc2a7i";doc="0wa6pyn8l8d14d47kqvwvsnkv2s9mxfhmzan7jgzfrmkb74h7xlx";source="1l3ci86wl6an48a68vfh4ynajq6j3br8wbafm8w8c0x810hb141w";};
+formular-15878={run="16h5hf50ngqarcxk4gjs9x9mcycmj5cqwy5pb6ffpj9xbsxn4r8i";doc="19aq7sbghvrif72x7vzvabrhwj7lgsddsbdqbkv9vhmp82452vyy";source="1s8ngbw6s163dzj9mi629yd4fisxr1gl8w8i618my426szc1vrcx";};
+forum-64566={run="1jvw5w58v5npajvhs7dq0srgdqha9yqs6xy56fbk3lm8y0cgsx22";doc="0cihnv5c2if9dr5mz9iw12g1bfh118ib2an0sgigqcq6f4zp4nxh";};
+fouridx-32214={run="033f2yhslmm70byg4pkw64g976vgssc6yiizmh2f1chlfhsz1qhz";doc="1k6zirff9bqbz7assfrlq0r83bjqgzblgxix7697lmp6ww2rj4l8";source="0il905sqxqvqk0fgsns3yb9hjh740h69imykxd84p92fndaha5mn";};
+fourier-61937={run="183dsh8z5dh1q45qrpkas40ga2m4mbrgl727v0khqsxxim5vlzi8";doc="1zcr023w2hdk6y3x1d69nrwzsv3qd8ip63rwcksh69k4q35r9xkz";};
+fouriernc-29646={run="1vv4whd3axfacbmm8nksdc37d5zras4gwa6ykgw1svplqgg3zjk3";doc="128n1cnv9h1hr4s6bp3xs1v9p7skhxlfy8afslpay2bm0ixf0cs3";};
+fp-49719={run="07qzdfrk2y499cz9jbpnj024r43japqdngbxg4mbapw9cp8066d3";doc="1y1xwqf6mskg10h31ws2pvn5y6g9asflc7l9r24fp2fi4254mvhq";};
+fpl-54512={run="1jpbgs674zkjayx5xbg4ymnmygxcc15ysvr4cpz3abp333cqzjb4";doc="1860bzvxbajy3r5gpz6hwy0vib632fkdig2zcb51yy2qgg3vbal8";source="1fr7ydvn8ql0jhplkwxzrl5cppxbklg97nqb2rjigvmqqidjk0i3";};
+fragmaster-26313={run="1d59sjzlvygwq9b02gbrfra4cnvmygza80b5rkghhhpa0n3xnx9p";doc="0j1a2d4ssj3y42f0rsyhd7yl3pak9cz12fy16k2h8v02cvc96529";};
+fragments-15878={run="02m23bx1p090m6w1frb2k6m0cv6jk8d9fdbmjscwa7c9c55qh5gd";doc="11kj5gczbhb0imfsf30hc74s50iwq4zfs79j6kv62ib6v3p32mm5";};
+frame-18312={run="17r35x914f3h72drsszy74ir5phcxmkrcvwlrfd11li0lsmiyj62";doc="0888jcccsnlpzkynpg8mvxy2mnb2d3xz41bi341q9fdbbzs5lmnn";};
+framed-26789={run="0fp0zbq3bjfqx87zb01m5ffn8kw8044vkz8b9cfndz1ki64d9x4r";doc="1pjnqy8zl5zkadpkvwa35khwjk1nxg9pq0h1wqwgrdvqk6gj0cbi";};
+francais-bst-68686={run="0irbq10fv35k09a5jdyxa9c1x56k1adxhs3rmdzs061a3j0pp1g1";doc="0c39ya4kdhl5hialq3fggf6vkphg2nb166avfzs5708hc119ys6k";source="1rlq3j5xwci45gb0mx8p4zqp4fsdyck4qzdmz4j8p25mx7hybcif";};
+frankenstein-15878={run="0zj1gcl4gab78qcs2rv5i9y4q234iz731x2hnab169ygql4d95i8";doc="0x1fp5xc2qlx0pac2vqm8567fdh8i97k25ixr28w7fzwl9xnm91x";source="0ag37z3klcy0jvcvvj7v14clx2dvv6q43lh6gw83rpsx51v9wza4";};
+frcursive-24559={run="063909r7iga0cirxq8qx538407qly4p2a440xq7c603fmgcb8n6k";doc="147sa2wcixanwrhdh3ns8fg447zh5f42z8x0aw41xhk7pxncqrml";};
+frederika2016-42157={run="1pi2bhbxw9xg78w6d6k4l6p1qnm4nh6m8k3bn76kv4ascydc9hfg";doc="1vyy278j376swl2sjwxygqm6mi6s51aa6qypgpw3w2g5kpsqqxqb";};
+freealign-69267={run="0b1b3laxjjjr45cagwakv8c50c3cmw5iycd76k94d9nxhgm346vf";doc="0pz47rbacyyqyh075fz6pfvjpi32fl859mckpi4v0kwr9yk6k5aa";};
+frege-27417={run="1n0qak8xsi8wlg7r2daszdvi3hv9gmp7i04phcnx4hnlr68842d9";doc="0hb7a6c0i0jk8cvv2vfr743ysqn2vh1y6amy7arc4zafi097nwly";};
+frenchmath-69211={run="1lf7g6kqv9bv6g21c99mj2i0g2v6x740rspibr6jxic6s5q4n3s9";doc="1znx1d2cwa29nic7jcwx1kacfhpig03xj1gn0ap94nz2q5rr1rhn";source="06a65spj8avshffjfp4p08051mxgagaw38i0i8qlk0jp5x89f8ml";};
+frimurer-56704={run="0d2534172sqpzg4zj2fz0k1qa2m627jzqdnpgcak4fxighvx1733";doc="15g0293xz99w400l3rj99849va3swi2j8hcj522qiyzfcx5j7k74";source="0qxpdybwz0rp748rqfs026jvps026sffq3c7zi7bdy8a34mqmgsb";};
+frletter-15878={run="11gxmdwwzwwdlrmycdxi0y123hfikhp9jv1jjmhgsmsmmxsx13ly";doc="1pzpz0q1hplni18m6wkwrhknw15h555qfdxfnnfrnrmsa7n2q2bl";};
+frontespizio-24054={run="1rdgh6wvxk0rhkadcrb1f3ymgxn81vbx489z16k88wkk1p0r4749";doc="0mwdqry0h2f65vrki3kvqpjnf1nm5n9v3ljmn77nlvkarqp2kb57";source="1p2c8sdrm0ay9nz0dqrcjigzsjki15fry6mmhqcm3gqrcscsk5x2";};
+froufrou-67201={run="0pincrfmb51qwn9bcfyqb6rdc0n08lwxf2gr8l74kfmqh2mg5mxs";doc="1jl6glh4pjm870wlb4in3v5vph55fnvykjziqnq702gx5va52jmh";source="0wng7skd5zyk0s2vgnilndi8p9b3h672pk00mwv97h2qb4lk848i";};
+frpseudocode-56088={run="0ypiw6sfap27hpflbk0drnd412ylv9r307jbkkbhnm5lsmwaax2l";doc="1cf6424l655rykyfvca2yl0lwdifgj5kgvl0fvw9ikayf02wh3qg";};
+ftc-notebook-50043={run="07ng7dgbr1swsx0zwm831wijqjq4x6hnr02354jdy9z59k6d4lyg";doc="0w9jxcfvkpif1fyd4xgwbfba9b2sf77mqr9symwby31lxqwrbys6";};
+ftcap-17275={run="0dbrhynslppw5nrdvikzdkfvilzr909ypc9v8nxpa3yh4zln182d";doc="0iq7lq25gzyc85wpmr93a8ivgc9038rs80mvhm46zdrrixh5ry21";};
+ftnxtra-29652={run="07fazshsyqng62sfbnjhxglscw707jmn5lz1ws6avq8c5chs70pb";doc="0a100iy3imy2x6rgv8pgkid75ah21684ddm6vda58gv8yzfz9fyd";source="1ips0zm2cka9wh4474sc283102s6r9hvr4if7lhd04c92f40r3my";};
+fullblck-25434={run="1bxnzkidpszq5l2kfilrn8ny1gw680gcx9gz9975vylh5kissrmh";doc="0zj229qkv3zdf2gz6qkgblj33zdhf8zixy59gqm4v69ld491wvh1";source="0arshfc79aljbpfnnq5rhi7gc9sqhlx002xqg46wrq125cgdj13q";};
+fullminipage-34545={run="0zy9vk5a0bljq3my17fw4jl8rhd7vdzcmw550ps8zbjbhxphssrc";doc="1n9lzacq920lmc18rhavz17xnm92lm964pglf6j8i7yyj5aib61c";source="16q6f9nss1jx3pw1xq0j82y4gn70hdjaj9m7pq3947m6bkyz92vd";};
+fullwidth-24684={run="1kis1p158phkwxdfhpb4ihfs2w7wywj1lighc44sfkpima9c4nmx";doc="056k7w66rh0z1kxf1m91sbjhg8kdy9jvfkwm3jmi5mkclil5ihi9";};
+functan-15878={run="0vxwabhbnw3dlxzlqz4yi4l4iw17a0w7lj3gh2q4l3p9lhzr9qmp";doc="1jxx1inlzrbzm784zwkz55ykdqhn9ncz6cixs2wqh2sx1dih7cwn";source="1a2x71qhjdr2ayii65qivjmwmxzw6id3vljd8nv3l04xnp6p5dnq";};
+functional-65485={run="1nzjb56bngv2h36vlww234fndanfi5dbmbz3y1vjxxwvahhqn0cg";doc="0iny1h6fd23zws5r53kqbb126rcphdkns6w7afzwb7n5hk414jq6";};
+fundus-calligra-26018={run="1rnrqblg06qkwcy7f460pd1hnh4bwl47zyswa1iv4iknx00rd8a2";doc="0jvbvalqyj0kyf6cwr6zf18ylckh3fwpshwhmnv7ldg5r1ylia9j";source="14a0d7d8mlsw7qwpspqc2rmcdyhnfy6l7f57bk9v9jc8pg9fxb6m";};
+fundus-cyr-26019={run="02zz37h71nqq0f4sf00fiw80pq1q3yadnhqm2j3niz13gms9ydl2";};
+fundus-sueterlin-26030={run="1zpcss3lzhc9zkh8b91138ycwj8pihch318zr9pc6bl3ifq37wq1";doc="1pjka7j1378bqa32h0b2dcinf6ayjmzcbm4c1sdw6dsvrzbnda3f";source="1y4bg8r2hmpa38hdgkrk99v87cphikdb7sq5x9aczbmwwgmgw8fp";};
+fvextra-69001={run="1dxzwabx3zifcidp1hv56h0kd234jixjnblym2r4sqfw7lsdyjv6";doc="1wwpl4y3qcgg1k6ahg0w4rwxzr3qw0nv505dric5qpsvi1944fj5";source="1jh9y4w5c05vsqv1yvrbra9pkcz2j3bxqnqqxlnyv5m825k738bm";};
+fwlw-29803={run="1qwlknaljj8f1cpnln328az913cdwypr7w8m8iqbqiqhsl49siap";doc="1cib3id21xblai43gkn78ypz6n99vwzhzmpdifdm8wv001x7wb82";};
+g-brief-50415={run="0w0i9mqc5wg9za3n99i3fkn4bw78l8kf6glh0k6rvrzss0sg79cj";doc="1ikasv5w1xr5ms6836q1bnk7b87s24m15mnwsbdyf7cnsh267x6k";source="01j6zxs8vpiiimc10hhl93xcixwlzsih5k56n7v9a1a3czgymad6";};
+gaceta-15878={run="1yimj3mxyjj36ib4lfdh65sz5w71rlp41hhnzz84kgb5y103wpaj";doc="0vvadcqjj3hvjll9nqn3mam9ycas0zs810qi2jnq6smpm300c3l9";};
+galois-15878={run="1knks42bg72lj8nqdy2iyaqkq5a76yf4zxql24mwxq5fq5xv1vmx";doc="1nqhf3si1kljbr0s1sb22kq6nfrp9ycvm6smiyxbw5lyl3spqkxv";source="1rlgf9bv4rjkyifz3xvvkv6xnqxl0pl973mq0zqxaiqfkh0i5xwk";};
+gamebook-24714={run="0ccsyi63paf40lxphmb60k5xciw8v7vd1hqllgq84mry7igzb9np";doc="1c2m4009fralq8ahhczwfxhh1cmsdh0c5072yrirda46khd5wy91";source="1dk3fpg5038jv5bs7c2f82vll0bdd7c1jrajwhlfk1v16p2f5i1c";};
+gamebooklib-67772={run="1qk51f0a4z1frby7bv553rxrhg8xgfkxfnr4dbq3dg7mydzrl444";doc="1cix1yzasbqpghvp5smban4l16fc48zc8a8d9jjqgpb10l21a2rl";source="137a2hgcvmkgsd8kyzxlprr3d6v08xvdv3s049cg9lxazizm5g7k";};
+gammas-56403={run="1wcvzihv3xh52s3ydni4gs3lcp9icmxinqj6znwyy680izmw67ba";doc="1al5rvpfavkc1p7ayknxnrs4r7jzx7f7dbm3hayqwg0d7jdanp8r";};
+garamond-libre-64412={run="0cj6sla634vcp3ih7x4fg4iirckiizdggw8y5ddxyhszf1ygkz5q";doc="1q1iy0xifacs7w76x4pgcjx13hvj0wc5l42xzac2srbmx6x2n4sc";};
+garamond-math-61481={run="1bjskvaqq4glba1vmcksfx69p6r025sl8aynlbk46kh7x5fa6vj8";doc="1jb0kcy715fmxhbzg95qwilwnmp45znh37iisiny1dzy8919nlbh";};
+garrigues-15878={run="0qr2ak20416p5zlavcbihxkjvifzwj3cf03ipsnxlp4a0r3m0hgy";doc="03cx077kcvny07dkg9dpgvdb5vh4z7v0c80rn82vqj1l3i0qrxkn";};
+garuda-c90-60832={run="1yz7zpwdvvhzcsfcz4dc40nnaagwrsxvskc5bymmdxv1zf6m3npf";source="0palvrkdf8c8xhx9d2sxvch0lgycvn10bfszzwlbxw6qrbnpspr3";};
+gastex-58505={run="08xba3pqif87wn23vacj7amqi97yk2qgsmmawpm3r3iirir2l1d9";doc="1b5qvkpvdlsq85yllixs638p1bwv9xfqy2mkzyckqcwfcdcv7i21";};
+gates-29803={run="1vxn3j957za9j6ryf3nhy5r744gr63m78xzvlh0z10sr0bpw46v9";doc="0igxfdxyiz280ryivffq6c7y84c16ip1av8wn11j6x62dcsrm58x";};
+gatherenum-67201={run="1b5j4106mjdswm519nb9sswnpnna5v6wcy4p8xbccv01044iqlk1";doc="0afd1c352075ix46y0jrhfwlbsaibchvz3xs916qi3hd8a90hbpx";source="05dri0sgr8h29q3zxcsyhplhrkj1wllfb42d8scy6hp4mkmbsr06";};
+gauss-32934={run="0jsbvm7sh7bhs5yfl17fj1gbdqgpm7qchf07y3p7k0rxxg0f482z";doc="1f6ycdq3lpylkdwja4f89plz7wpnz73wzgjz74far6r9wr026443";};
+gb4e-19216={run="1mi8nwxa418wqp9w64ya1i0ag0pdm4cx08fkmaa302bkhym92bal";doc="0nzmhjqdhl0x29c70iqb8b96pjnx2vm94nk3xgid942pmx44skxb";};
+gbt7714-64633={run="1i9a732px7rrgq69czdqrvnchwwxzl7cmxm1pdnbkv6s2yaakgdl";doc="1ay59q9s8vq7bqvif314xjr34k9b9g4gk30w3wsy7k44ijs481k2";source="00qbmnsyv87q81m01lgflnypwvff7xbqfkf750pfdyd18g2r0x2d";};
+gcard-15878={run="1pcxw9mg6hadr5c6m4z3pdzs0b9jw22injdlk46xxhqy5gsafa7v";doc="03686fg2fw1k1j5rrskxpb0yjn2n5l697l66gww90jysq9546iag";};
+gchords-29803={run="130b2svqilpj14jl5slw11b9dqhq1nvdph6y3qcq71pgng5lhjjy";doc="10mbr14bjxcl4p42r0zsqag5sg8yzp1mpi0s7fq7i9197kg8i77b";};
+gcite-15878={run="0dl1plmbn4i5hzmjz48hyfl5wj819pg6k1kjsdycx4wi0d9ff2pr";doc="175151qpcykxsf1a6g9v6mkhr6m9cm5miw3ys6j5csrqm3vsl604";source="08h5kxah5q9105n1awlrmiy0zrl3rafb8v3nwp4qfakr83q3vf3k";};
+gckanbun-61719={run="0bf42j8ismm450431pqvqgwzd04xsr7qlhb9di867qdyiy6hbrpv";doc="1rpgm6jclifxzs4k5ybkn9pxsl60vl167jjhffg6d319g3miy7al";};
+gelasio-66805={run="05rr0vdiw9jd2qzasq22zfpg901l9jvighlhsgcpl2n3cfwa96i9";doc="1n8jyjs056m85h2n602h4gys6556k4h2lwyhck5wp4g7a27ri189";};
+gender-36464={run="0skwbiclrpl1n55dr3lkw86dvqy3f1n0b271ygsz6rr3qa43478r";doc="1gamaakkqqf37cwwzxjbyfhz25gdzayzdkqk60xls9flp7227hbr";source="1l5p8ib5lbvq2b8pizpwpbcv8aslmi8dd554win7ssd6vhgb68j1";};
+gene-logic-15878={run="0fxddiswkvfzbmcckl6mhyipxjlr0yf0579i792c6rvrqs5avyak";doc="1nd4bxrq1g1gxcrs9lvnakaivla37p218pa4ns6jyjmimfl31gxi";};
+genealogy-25112={run="0w15jrd6aycdjh8qznvm549kzwl15v2zvs7awgk96380nzcsmhqf";doc="08fxhib7wydjbd3bf24kw6zbbz2sv6fhgmg4q2c1lgxddmm8mpzy";};
+genealogytree-66513={run="0947fmawi8xzmv9c4k4355fkgjivkkjrjglklk6ar7jky2xsg62b";doc="0wvqkdhk1lmvk79qla34l14hvcjmw318vddz1dhl21g0cri7fl60";};
+genmpage-15878={run="0fr4m2y3vfymlwk7ik7rymifyam2jhbxn3qr2sj40zbcr9wbah6n";doc="12fxwrz5gpswyf523wm1pg99zilkgrpq8z3ls5gw9j7bdb71nj1l";source="0q7acjs7g1xh5kcmrg20k9jayaf5vxz5p5amjjd4xj4rnb1wdlj1";};
+gensymb-64740={run="0rsck4ysx86d4gfr5a1w9kam98zzclb78v5hgdmhag74a0qs1n0l";doc="0826rq87q35knzmwkhz6ipigx3s3hkzcypy977qa0r3ibcbdr7ap";source="1na3aqqjfp9p9zb7hyzz6wdd0biiigih9fq6bxygcwflbwbhks6z";};
+gentium-tug-63470={run="05m3qcb12n143sxy12zm0bvj9zvkdi4sqsriprfkkfg6xlvk396r";doc="1yw6xs5dpmvk1brwry30ak368xddbmz5z2k79fpnyrx9a9z57j37";source="062g0b8bn41aynm3sk02ciapiiwl55whynvnz3gfzvlja3fn3xxp";};
+gentle-15878={doc="1l5fyfdbkpqlgpgi1hrnn2sz8hchlnp7z5s5584czafvs10jg6vx";};
+gentombow-64333={run="0r3aziqnq1pm2pfangv4238rpihaarndi3xhvpvfj7mc31b3mygr";doc="0vqfamrsy4r1wqly1196cq2w69wydzzw09y3jg5llvyh95a6dp0i";};
+geometry-61719={run="0wv4c77fvaz8qg1ffjg3y06r3q4xjfxkh3m7a5s9ynwmfchcirgi";doc="1npbvp9g9b4mp8w768gzx1vxsdsi9zlrlfgc65xmb0rqx7z19zvy";source="0dm5zakrp71rxfa8xgj7ks0gfvmrm93sqi6f8m4hw7ls7yqm3y9f";};
+geradwp-63134={run="0dkn2p0hbsx7f6nzyvvg55qcy6n3c48m7cf88r68hw4l5kcm2fk4";doc="04hj6j7zpbhsc4gzs6lb7vnmsqzbhfwirp8pzlsrjp8m7388y3ii";source="1xxmhqiivybsk9kqmmjzcxdx6iqcpbwiq5dph1l4jkgkpyfkmmpa";};
+german-42428={run="0w1s582hpvmri7im4jsi75xjz8iij7yxs3n6nad2png1xaxxq3ic";doc="0hclzvfgrc4ii80ywgjb8z1byn2ccqckvgk26fzdvcgg5j7v9x9a";source="1a5svzkxqqnqzva8nb1r3z1rfhjyl5w4sgkfwj7by83df7fwgnhh";};
+germbib-15878={run="1nrmmmq9j52yjasjjsxx40gjdbz617j66kwsiv7qzpkh9p2jy9sc";doc="1sbvvjxls934s1rxk0aq46glzvrn46cdznh26mhpa3i28c8xv3hy";};
+germkorr-15878={run="1bqzh9zklr0y1fj7lh6izbzsswsx00wlwgkg9wl8dxvxmzhrj6y2";doc="0fx39c00hmwv2wvngf3agz3gl1qs5jhcbfc377nxd0v44kbl6wga";};
+geschichtsfrkl-42121={run="0vnxskd0vlslm3jhvpvb4ihzlssdrz5bywrxxysk6c391vyq3w0q";doc="182m0m7lfz5wz017kb6kk2jn5vkmsll3js0sd4pqmr6gb8av44m9";source="0hdq1lkgmcpjk7f8pl2q3c6rin97hdzwhfwacc43m1l3c8zbmqfr";};
+getfiledate-16189={run="1bhqqsvykrmqlgd8whfwxm8bkcqdfzm182ryngq8s6yl9vx39ck5";doc="1jdsnf020iyiyxaabyaxp0nzf02s4kqmm8qf02vaclmbqhciicf2";};
+getitems-39365={run="1n02xiwch25vv9qk3rqddsm54nhp4fkwi3i5a7r3285md2b4vsiw";doc="1m2wfxyqkbfk7zk1czmqp8wwmqd091zijqxvanjxf7azxfmlnvwz";source="0njzl590bsmdnvm1gfqfjf5xpj9mj5ijjxjjxiya0741ylhwv6p1";};
+getmap-50589={run="158fwravmqda1zwzw6qzvq7lrd1xsjm9cdw3qgif2jjq6zsrnjqd";doc="0s9djdlchnp6w7wr7w2b4jj6iq3v6f8r1ri5kbp5q3hfshjgah22";};
+getoptk-23567={run="0rh7b66fn37nkcy2y6q8h3j7i8njwdmizn68iy1bg2l080ns1nw4";doc="0dmjwgv0qghhs7fa0a9jvk2mqbg4m3br1dk2x7q5mxyjzk9878da";};
+gettitlestring-53170={run="0kg2p7ys50ms0li3vnrabywnrjjgllpyr8sf9cz3rnv8zsab4b68";doc="0xkk16ncsyv2s3klv316fprld0d5aqaldh3g10p5gcicmccd9061";source="153bkg899ikkg5zhfw1nc48nzk3c0x5iycxspxcrrj52dpgq22kx";};
+gfdl-65415={run="0mdvjf5xgjk0gbz5x32pgavxw7s8inf5ahmg25zs3ffj1s5nmand";doc="1ybyixpc8k73jv7dl6gmanc7k2n4j09z85a9sx1a2fmfmijngspr";source="0wz586ljmff9j1irwqzvb6lqadzr6q382j2wxahnlymm7a4q4k6r";};
+gfnotation-37156={run="0n2g1kjig7rg9bkry1hyq9jap95jb9crzxh4yd9jylgrygva6wr4";doc="0lfdm66xrvkphqnzmymym0s79bwap5x4h57q6ndb7h97p5pxhfby";};
+gfsartemisia-19469={run="0b200snkvdkrywgn3j613zxyx16prqczw106hfh7pzpr7w717lyr";doc="03gi2v0vfcdar6qsp7xff9s5pd023i3kh4b8asxh9lah998qm3z7";};
+gfsbaskerville-19440={run="0n68mfx7026ymxlyhdyg9ppylh5g4bkwj95c9bfmp5bmym0q6dfi";doc="0v0widjs2w65ppvzm04wzinrcyp8hcicgxp6brydjmx9d32yrzcq";};
+gfsbodoni-28484={run="00r9b46m6h4vac788vfz6jixrd4wbmscblhqi1pxhg76id33xdgd";doc="1s0lq3ac01zcaqyvswn12fxhvqarq2b3lni1xza3yyk2p6y95g1s";};
+gfscomplutum-19469={run="02c0zs2xl2hy5wrrj25w22q1fj6q8w4qjbvlpx05pzzh3y63n3ip";doc="0h9i4v3sag4fmvlnkk0wjxmgsq4kbiikzv0rzfrhzfwaifpznkcf";};
+gfsdidot-69112={run="0m75xf0x7y3mxhhnvs22f1fz4gr8m86g8z9nfqxvwijjzm6xgm1l";doc="1jaxayp4z0ih0cr795as9bmp87h24z41ijhrfwwrbpbmjkkm77qx";};
+gfsdidotclassic-52778={run="03p2w06s9kca35jdby74q4x8if5gs39gb387rjgqbv3vdn7zxi4s";doc="0qnkxqr8r9spg3xl2ifr2sb32hbvmka979c4f8aw4z1i810bs0kx";};
+gfsneohellenic-63944={run="0ycqh6fn1y4czslajdwnj8fga6f2riw0pd4az10qmrxayi5hil23";doc="0zp7rba0mhbhjsnjwm3ldy1frz75grxgnkfl1gvzm4psxm3c9yjy";};
+gfsneohellenicmath-63928={run="1caa8w1jzwk77djhycahr3dd6n8823vc513gl7sgx2jid4gidz6j";doc="1fk5rn7jxqlwhzv7v9fvpadhlr07fr4pfjlqh7zx5wl720xb3yif";};
+gfsporson-18651={run="0h2zy85jalpx2vyjszw0kkrav82zv549c82qik9iylgfwfk1amx8";doc="1zy50pqr9bzfncs03fg98ws41v0v5c9y36rnjm5d9i7q2zljapy9";};
+gfssolomos-18651={run="1hn8k9majggqcis32nw2krnqpqdgy3y0dk777i8fqn28517ygxcx";doc="01cw6sq180cjjzwgi7p2qr9pf6rq0r5zmnb39bch2g0n0rjxqwgl";};
+ghab-29803={run="0skiyyxr8l6a6n34lic42lf0rnv4jm5rpmzm08gv0qqq4ha67zki";doc="15vpkpbpnj1w3nlc5wzy2k4fh8jw1a21asc24lj0j6dpb4mzja1n";};
+ghsystem-53822={run="02hvpf3idwmm4hjkbvcz0w9n6sb6iy1xcj0iiqa51fzg8kimpkzj";doc="1lld29kqvfgl4fmj70z52l1b5sqcb3fr8d2aim5l88grnypn9gb5";};
+gillcm-19878={run="11aph8kbrsjl4ax5hbpirsgc4aznj0nkk76v1ax6d52f8bxjsgjx";doc="1qbhq72bip77lsa5pk05g676c08wc0y1ix3c2iw1h5g5fk20i5y9";};
+gillius-64865={run="1z49x03rvpdgx7k3ry6wkz4vm707ms7mf0c120gr5dl0ggk16x8z";doc="01vidppjs8nwsf0pnj5b6g7ky95ayjiklkr2fybi4arvc4lhswgp";};
+gincltex-64967={run="0w1pk80idhws2yva3zvlbnwy2xbrqa0dckhwj8d9sdqxn5j2va4a";doc="0zdv33r7r6x39p80jwjxk4k2yi4rqyv9w3nzkn7si5ckw223gz4a";source="0m1yd9b6qlbmrxqnyk7kgxx7227zy6v10sf1vw856gpx1r6xbc22";};
+gindex-52311={run="0llk0aaa43n4in5am3ziqvkl1c35q27am5xk1naszwlqxcn4lx42";doc="0fpy0kvkj84vg1jz80jaz26k73rijrldy4m1p1xl3ccc7dxvr299";};
+ginpenc-24980={run="1brakvxxrm1gahl609psp4na8ylkggfs534nysnrijq6vf4r1ryc";doc="0d4q0n0wh45ndqgd2zk254791lcvzrxz4alr2bnm9akcfbv03jz2";source="0jw7qa8wrb20wf8dsaxinkrvfyjdsndd9izxs549dj19whf1jmfy";};
+git-latexdiff-54732={run="0b7hafll82widr8vibaqqavwwzi7m488ypm5wx14y6jncfl8py9y";doc="1cbny4qkr8dg8vnxjnjawq9cjb0h3816ad66q8b5652rpxn3zqcl";};
+gitfile-info-51928={run="0qk6r9fiv44hamlqvsgpm75nd68sgj81sgy93zsylypp15283z2b";doc="053x23sq6657lddjyk9bzadwydfh4zxl78gxl1payxmbl9pj925i";source="0fnrwcjfji5pbkh4kdsishfy85gqcvcmfqxwr5s1n3bm3prgfc8b";};
+gitinfo-34049={run="1n8mm4g7bmiawd7l7xhx9fcxv7z3l629bj21i6j9s0rfd6c7mzz2";doc="1ip59qxlqzrn8y211691cv4bg8d0yxkyvbpxw8xpzg99fpp3isqx";};
+gitinfo-lua-68808={run="1brd5rqdx2s7s21lddkkl4ymvi7zcq364qffi3wzb55c87q5s4x9";doc="19c8bavrs6jqk0760b7j608xj1mrr2nrabzw3kdvgxy2azww70ld";};
+gitinfo2-38913={run="0k3vw12yh13q1v21bz7i3m32s1w49pk13rg3c0d0l1pcx0wwz20i";doc="0586h9c1kp5cg7gk67xhy5fbshpskrmfb81m4xncaxg6ajaljk7n";};
+gitlog-38932={run="1v0zpfry2rz6xvm92gzhabc9sa157kylvp6jg298kdsbr2limn3k";doc="0pd1f42qmka0wh9b8m15nk69p6isqp74b5qkjg6ymwbabqxbcbl0";};
+gitstatus-64662={run="0kn4q6c6379qs34hmvzixvwkzhwbn3bnrn1pjwsp8lp66fv1wpv2";doc="192g75hfxg3nkaf0x8b142jzgmjzv97mpiravxfwpgfv25fayz0f";source="03kz49szcrpa6ij859a44ham0gbr1w2bd7z7p68vhwg2pcg8gq5r";};
+gitver-63920={run="10ji9cimi9plka0gk5f1yk9kybdfkld470x75204dnk82pcsad91";doc="0gywkwrlgv8wnj4y1qmwk4k09s06h56r7qvcnk194ix5srvbyr4b";};
+globalvals-49962={run="1kgzrymfd5lzvb9dqlb4cgxfszpzhvad859r7sl0dl282596apgl";doc="0c2qf5fqn4n8lhifvi4731r3vifwxp7h9sfd4c26d2nm1w42hv7d";};
+glosmathtools-55920={run="07s9jh24m9d9y01kk6z5lw9acri8g8vjmfw0mgdw3mwpffmba5mx";doc="1ya15q1nb7xzjxq7cgnl9q8pwfr1xbih6shd89krijr2l3rrycws";};
+gloss-15878={run="09d8r16dwl26a76a2gky152bafjip3r3hf41bxxcb60sjvnz2qva";doc="10vgsm0cvcbfxwi7ly38lsvvg139y6abmdsv91qxq3s1pn1qxg6d";};
+gloss-occitan-52593={doc="1q00j5r6d2y3gf8rbh7f7rdfjg3mg1c3rrfqd69rxyam9n92h41r";source="1cb92fpzv7cqqxxa0img0la6hrgxw6azb6j2rslszk9hjghbcjdg";};
+glossaries-68437={run="1d85ifx1q3cx9y1mx1qlv434l3858mk8xl6g8azh806258ks2lp5";doc="139jcnfcqqdsq5wvbj83dkrhjgs1fwslbgp16nfnkdnibv6p3rl7";source="1kly0q8gvlgr8fd933dyfkqribrpx51zaf10v0ii1d7s8rp4a07l";};
+glossaries-danish-35665={run="0qdyvkx33a9jgfa7y1pbm1lg5v1ba4xrxxg0hyfqi0pmpkajqb87";doc="0gvpcl8881g9xfcxhpa3h3c5zc3467ak8mhmr4szgjrsi4nsrnv6";source="1823i0b0firwzz9038wag2qg2h39az1xsj8484w36kbij8q7ygld";};
+glossaries-dutch-35685={run="1ipxgp919h2jh5jajq72dwaf6v5qi7xjplcihjy8j88zakd9iacs";doc="10k1xh64rzgcddzaz7qawb2qd353j79xn3754byhn4d1kz6nihxw";source="0g2kfnxmnnqz8y095b125d7ira54s5dpb5shfqld7m52cranscy8";};
+glossaries-english-35665={run="15nm7bz90ijx674p16d596jssi5915iy43wc1qb6gbbk4s8y9h3c";doc="1dckvl8g0visp5j8ip9kvmis7qw1n81xpjw136bnbm28y7a5m4sn";source="0x2iw6g9a6dzw22p05n3v7vbif8svhnw9sjqfmxn020jqnajza0d";};
+glossaries-estonian-49928={run="1p2d21rx6vs8gcsalbf5kjyhmz71gbbn10c4j4lsy7rqcb97zi99";doc="0q8rsf08snd2p4nkfz2ry7rmsbdpixgn14n1mk4wkjclrbnjszgs";source="15xi0xl53jxfqsz7dwbmcrnlshvs2zbdq38v3izlyz47aaf6ajdx";};
+glossaries-extra-68409={run="1k23qj3hmimg9yc25chxlg2bkznb730c897ly9hy9bm1cvwgbfwc";doc="0fx3jqn01nxn6slb78ilwkgwn2na2snihynjmirp4r17xx858dqp";source="1gg4341smvw2qd6wglywpaa7kziz92mj2x9vwmz28h6pnsvr0x7f";};
+glossaries-finnish-54080={run="18la9s6gblpqdqa1vcvsddzfxadssnd1mrg6iwl4aarq57605cql";doc="0zjwasnxi1fzc3xq8xjmgyrfcxpf3sbfgh6nzz60zdxd8sz1wvfz";source="0jfvjka4i94vh88jfpyysm6r1q9wwg7q29s5ik8d3da9g3n1bhyj";};
+glossaries-french-42873={run="03i8xx80d740c5yv3i83zbxpm9kckzj2kbdsakxa3sp9b0j0jk0b";doc="1k5gkdj5madigzvs138r360nrg6d3fn145xf8g708bk43r92100r";source="0fhi17x6kk73mismll255b9nsr8hm147zd0n3rcndbih9ray6c6a";};
+glossaries-german-35665={run="0h30icsisgk45ghhmngda0nqsjzsm23hay0sxch00ix5qcd19s27";doc="0jmkcq9h2kfjzfwysfps7nqjl7f0zmh5s60ww9kll8ypdd4a1n0s";source="085xarcnj5cvkljz70m27c7390jpj8kwndpyb762pr26dxvgspqh";};
+glossaries-irish-35665={run="0xyijjl1mffhmwlx7b7rprzl4rvhb2h8jdsx2jq86qg5gxd6c4r6";doc="0kic0jhmwiik3y2gipncii6j4348qkxbvkzs3sp9678xjl6j5zl8";source="12qdj6wfgrw6j4vdlkv0bcknnamb09vsyxdmyd094hwgi4cs7wi1";};
+glossaries-italian-35665={run="1dwvjb91jn93jbvh0idvn3nxm6s7frxyvc5a7yszyisfbaxx917v";doc="0sb6kzw87nh2vznwhky087017c6338jhqahgh4ljmzan9h3imk84";source="0hj3wdzdrjv9aciqgj68ihaalvarimi85vff0hf6isnmja5pwg28";};
+glossaries-magyar-35665={run="0y1540a4f531mc8fqpxv50d25a78waipkhhjvgnilbh7p1l3cf04";doc="1sgndhgxlbhfjg22hpqazyd4zrqmkiahjfwhhwv1nk4dnn1rflcp";source="08m0srsv9nspqfzab0g276rimzw64hg9i6dddi7fy9pc55iikfky";};
+glossaries-norsk-67141={run="1qa56xzfnhbb9m5aaz2sxqqj21dbsdmm6yhkskdb45j5ac8b0nyc";doc="15z45ib96inz7y68rfghas87zbjw9g2mv9r4a63xkf371d4g6xsy";source="1jgwc8x3xia56g5xqplasjr2c1cll1fdizfhzszrz1fc1jfjvyzw";};
+glossaries-nynorsk-67201={run="19di0liyrqgi4vb0aiw3p507klaszwbdmsxjh09snp7jyri2rd43";doc="18l362siz2p65qhb2vfgqdnczqwcgcd33qq8c0c1h3vqmsmcjfvb";source="1diq7h06jw2s26jrbb44amniqyipdndzidf2z122xyc9cgcwzcwm";};
+glossaries-polish-35665={run="1pm5c1i0zfzj32p75cj014n2kdlfhfp6zlh09y5y8a7cfdsbcjdj";doc="1r0igixgkwcp7h3aslj7kmchxz32qp09vdan6w2garkgj1nspnv8";source="0zg3pfjg03kcrqm4b3s2bb9z3jhlga85hzd1n83pbrvf7fph4ld2";};
+glossaries-portuges-36064={run="1gjadmklh6lsx5drjqgph31z3x0g4xy11g074hm4y2zgziidkbyd";doc="1cbzpx932chvxrf4myhy6bg4jrj05nkr2l2g893k6k7xgm2i1m7y";source="0cz40x5s9whyr7r7w8gmw9gm119xmbb1qkhz19zfijg6nnq2yig2";};
+glossaries-serbian-35665={run="1nbpnq50kki9i2i2dlj2x9ldy6g0in0mz54ii107m8fc66g90vi8";doc="1cx33aqm3qcj94rl6n71wm0sq2kc29r1wny3bwwpqg5mp3bw2g8g";source="1vgihxf778vvf86rka345qmnbv5s2ma1b5h47s2f15x8bjx4xy9r";};
+glossaries-slovene-51211={run="0i74cn88m4llskd371z5xakw0s1gdgfmc01i55xqmc3j1n5cayh6";doc="1bfw6dnj6vcz0v6i8dhy2ffd6vbjqihqshkzhnwrrc858rzgahiv";source="02c4gvv1qvhbznxlxff6kx976whcv80c15k2jxsgd6bira50414r";};
+glossaries-spanish-35665={run="1wg894gdkqkm2mpzixgpnsd5hzbvvviba7izbshiihhldsijs60d";doc="0zkfg3zk204q8a4xj00ibixqi0j3ll4531vrbavafm8b9qjl93xr";source="01hnx7zkqlb4r549252y3nsqrj8ywi30ci27r5n1p846jv366lxc";};
+glyphlist-54074={run="12nmmyh77vr2622lzi11nm1z1k2bxs7jz018yl4rwjlpg0sxg1ja";};
+gmdoc-21292={run="07hf9413bmj1iv1g13wnngfb07fjb11162pz1769dz5si4av5nmm";doc="1p3zpf3rmmmvaam534vyw2n8r3klfxlk36jk19pk5akqwxwv754r";};
+gmdoc-enhance-15878={run="15c1bah1lxa4ap43287qm24nmcml5g8a62plq0wsdhbd07w51h34";doc="1fy3y1f53frsv09vz74n7v8gv1wscga6h4di9wfspwan1x3kdp76";source="067ind9qmah7w93bhwg9vfj8nyps60gsvbxmx7qhkr6c1cxqa8wr";};
+gmiflink-15878={run="1b7gbvkhscb2p4yhcwd8mlh3fsvgfq8g6876s1brygnp9lsz7cxn";doc="189srmaykk4pmm3p65p0i00ycisr2bdvb51r6ddn4rjbliv6i9gd";};
+gmp-21691={run="1c98y5fhnq5w9b6kkpnrag364269s90kccgbqwr33bn9ixhsf0dq";doc="0wir24czbym76b9fcbzd29m0749lbh26n44yfl48k5pxy6pkqjcb";source="1qg01aaf4s939ixzl7wdariaxxg1d5z4s76cz50rpw0p7rgdqbay";};
+gmutils-24287={run="1yf7r1bqv7kid7v65bv56w4an5nx22fhxzh67fh7r9y8msrz86lh";doc="1xplwkdjdcz76rmmmnv8zfp3fj104b1vag6rzrxj7ap9k8zzc40f";};
+gmverb-24288={run="1mqmi97imyr63ff0qyv797sipncqizbx9cvlg49wxnf3bjyk2ki2";doc="0r9sygczigi52piyk4zgw807zjr0jl4babj3qmnnsg0qclhvaqnq";};
+gmverse-29803={run="06v5fxz15byps13vm1afrpx365nfmq57200gspqpdch2sji2n4k2";doc="1f8hccasv9f1wbjn7cjkwa2z9rwn8lwkv657i8n533ccjk6s5xvy";};
+gnu-freefont-68624={run="1gq5dcbc92cxvlqddspc9m8v5biyafgvjc1k7fy8z31vll6wnfzi";doc="0czpqlipbwnqsh5hp6yaq4ypqzipm0xfsvrfc36pri0d2hb77clb";source="1cmd2p7krwhkg1f8xf0y4z2ik9g0pjc0qgi3c5van9zva0bn84k2";};
+gnuplottex-54758={run="1ck4r4inr8ac82p0r8062z3hwf9187sv43ym9586sk3ip6kqb3yj";doc="198g23i6k5f353w2aa9f9cw6cj8b4f93nsk7iq2hvhvk6ia876vx";source="0iz43zdvzfs7spc6zvgclyh0vjnzkwcixgk5mg2a3wrig8r4q6fq";};
+go-28628={run="0lqgz9r0vxjbq1nyg77zjfsglwbd44zdpwz56smalb6lp2ra3r5z";doc="1mf49wywa32chr8q4c0s4fdkmzd88a1fj3hxcf3zx7bnsi5r4gl9";source="0vslzmpj94qlh5g2jirwj8b4w93vx33j8xdadyc32s6b9rrdwnyl";};
+gobble-64967={run="0f4dk6xg7b5ij3w2za5mspv96xrlksyi8gy5h2ri29khb58cw5h2";doc="0a2rd4m38mgyfpjaf9na75w5cmn32lxbbqhqyfr145hf2nf08c1x";source="0k42x8ni36gq51aw55ywy36jl89brhsc0177kn56zpvv2zmghqiw";};
+gofonts-64358={run="1283jyz641bxsq6vxgaaa3hjrjw101p84nqv2jb7vixpd0yw6qwx";doc="1bq0db6xak2mj6m5q2z85f7j7iw29hh2ch4767lyi5s496csbysp";};
+gost-57616={run="0b495h3wwvwzn7dilj2am4h934y7b4fm3g3j85bb6i8fpqxbpikp";doc="1as0a9pc9bv0aya47ir77vlwv2hqaapl1ks70gslfqj57082whwa";source="07jn8ji4fa68mlq381lcmvk5qcamiczain2jlmpqcc9cfxd31s3z";};
+gothic-49869={run="0kgzx9qh17hcm33bx8r6wh3c9j6d8v0xs4fhi3w5vwmmlmyv9dni";doc="111pz7iz7zckzsdjaxz6p7chp98144727vh9b3y8v2yqfz06vzid";source="1r61rnird0n9iz9kg5ky4b602wmvsyg1y94h6az314ax7zdccm23";};
+gotoh-44764={run="1k3z1b1nyyk4jr2aj60d9p3fvx9ijpi21780wbbzmn5gydmivvm2";doc="0kcx815006v0azrn7vvbldplg7z4bgsibz921k20pdz2fqy88lnw";source="04frszj42vxnn5mf0mi5izwqw7mh57w0npp6n77kciyk84qjca7b";};
+grabbox-65223={run="1w9gmzwzy8dmk5rymwhn75rlciszk2wyx9yiiqn3npz872b55sf2";doc="1h4fzi0199gfzdsx3f4pz76q14lv90sgad8ixfixn4kq6zywg4cs";source="0sg5ahgxmm6vwa2ng0w8dmgxb4d3x14929i8apkm21bainhaxg4d";};
+gradient-text-65567={run="16ry27061szxa7krcpi739r57vj00ryv94ja3xa7j1dcvj6fn5sl";doc="1fdf06z2n7jcbj1rby47ylrxq516nwa4qa67iphxhdn5maf1d884";};
+gradientframe-21387={run="0c77ymahnfqix4h3i5q8fyzra5vr1fc2rygycwsz9zrf332ca5qw";doc="15lf5hlw760cqwqjf91wjzfbplp5npv586k967bpzm17pkmw6pqq";source="022x1whvyd9gqw2kj3m8pncn0m0c839bdwysw4sq5xx9nw6ixib2";};
+grading-scheme-62505={run="1cbprwzwz019nscz0j3j0cdxkrmkqs9r220qvfms1vfmjs1j9dg4";doc="1fc3i5h4xs40z3ndcipyjl7vz36vbaqd9zcw8nlvw746whf4g2lw";source="0kidqf4l7gy9qg1i01ghvb9rqm9ygjk0ii22sff3n1jpbc2vdvh2";};
+gradstudentresume-38832={run="1i3rbv9ixnr60yrjzbj31aaq758638k5xvlarkaqsjvacc3wx88f";doc="0nvih6lkbgc7jkkj303119fyxnajl4iha2baz2yhy62h4mq8lhd0";};
+grafcet-22509={run="0yz1f2p8dn3a1ws5skmznbd4ih9bri6r7vr6rx3zcspmad1fjg4d";doc="0inzw5cw5759c4l3ikzgn0zx47b0l575yjpz2613fh9l5ys800nl";};
+grant-56852={run="1whd5f3fc72balvgifnb37583v0882xq51qa0fbb92b0a0c71nid";doc="0zfz8gj8di6sx9k48zdn5hv5x2fj5rd8dm7x4h2k6xssrj4aw7bx";source="0pmg6kjzy6wahhz3lk742qzx8m5afz8lqsl05zpkcmi7ris9m9ah";};
+graph35-66772={run="1bjdw1kvds8iahl1chrzmzaxm5ad7bb5c99yyw3rd390pqbh8y92";doc="02kx45b2c9d3f0f5h8xw2mnqn1mrp7v8975y2gqx1ln2x61xmjpm";source="1lm6531f5s5j1l2fasz0fk0adask83b2w1plkqmk3zxrn4rcchw8";};
+graphbox-46360={run="1hvhadbpd988nvrlcppvv3bnm5lzmlnxgwmfp6r4mgsr1q7xgg6j";doc="1gls7j4753s16q6lgdsaa3yg8fc4vzxh74z7qr2ykz9b8ij0sdr5";source="0nfmfn7y1qqbm4yifqxfpxn9yw2xb9yj4smv9fmxrs57ism8d9dp";};
+graphics-66204={run="0cb099m8387zmn58aws7q6nn2wlxnz3hhghhlfn6aagwp1i064gy";doc="0q1b8gbssjvrga4nbjsxk8mplingbjs7x4385pa4bg2r29r09znl";source="11jmacik80m12vycw3yr8waszi280f6raiqcws4px4w6zan71qhz";};
+graphics-cfg-41448={run="09yifx2ww4jjjhl5k8b5vz78711289755mw0r1rcshk596qvn9r5";doc="0rfjgc83ryg3s5q01xnkk8bzw7rx7m96hfxq85xjjn5qxsgy8yqy";};
+graphics-def-64487={run="1jicdjf7bd30khgfkn6ilm7y7rnkqvms909wqj3ixc3mr3fz8j16";doc="0k6fapbyi9bidgwr67m4l2qfqyg0rjwnyznfi4fy9q9f6w61fmv6";};
+graphics-pln-68760={run="1z2vgvlf3xpxidfs0g4hmq990lpxvird2pc6a59l2cm1s9nvsz10";doc="0zjm566qqqk8blsdri7jxbhynlf98fk7w93fdxf5wvq4lzkwks38";};
+graphicscache-65318={run="0gmp7wldnc7l3768fs3wximhnc02ijlsajsfbg1iypihak6m2ym1";doc="006yyxyga6n3hissz8i8nmydwyin4ag00j9b3g7dg4263hl8yakw";source="1nk212cwla2y2dv6cysvk1vzk6kjyfgs03ngh3ry4gyz6ql844qi";};
+graphicx-psmin-56931={run="1sz53s8j6rn37xz1kkw0zr85625qki05zfvj6zpyw1yxay86r89w";doc="1fjg0pwh8qxk79mmrpgnwps50r8hvw6hqsjd2cp021wkqcyk5zb1";source="1rjl35jhy6dwja782xwh0qp3bxyw6ziha6fw5qbaq16jfy8hs95q";};
+graphicxbox-32630={run="1pl1x7n7yv7grkplpx7fflfi4cwzmkmh8nnd77i2n5wdlylyabxd";doc="0f1w22m5r1xz6n70yb1p21qq3fi2rfj9mdcyqq8s40km1i40yxkd";source="163isaz9zh1jr5wbhsw3ppicxsq4v92d6516dqgiwjhf6hdgay94";};
+graphicxpsd-57341={run="1fganh87hpkac141i4c8f5bw06sfhy3qs14blx466h1nmc6308az";doc="12d820bdrnlq0v6rzd72icvac73vq7b7sq2kq0nab05xsdi2418c";};
+graphpaper-63116={run="1bba2x75pd679qd6jcm5dd2br5d3gr7s3r8fwwid8mmq30vy72lg";doc="0a8l3wz3xrxnwp5s7gjr8qgmdbkrnwc0gki6i9xymvys385c6q87";source="1343djcm9sh6g5v8yfbrrwzg8x68rjgwpicq79md4f4gnsmz6lvv";};
+graphviz-31517={run="1gpl57lb4wkysxdhvqajzxjb4w0m5nxdxi841dzg0sg2igchfab6";doc="09aa9yl3zmcc5vlvjvgaxfmhj83qk4wgp4fx90bgn28kxnzhicxx";source="1w878b21va1y0mz08wr7mgdxl09hmbmxbzfnpv2mdqyy01lwpzks";};
+grayhints-49052={run="0p65f12y0v9s13gkmd0limdcsz36lnbf0975c4pxcsc42i8smvqk";doc="07qpkj60rrl1pc651qa8kpym3bzcc0qkfwaggcyin9a65a5snnhf";source="1g32xq2f1ncq124j2j8xm3vdkhv4sxynxc3wzx7x6s9i91p5l59y";};
+greek-fontenc-68877={run="1lsyx2g792b2m7rjlihqj26dkz9kaskbrbwzvkjd0x0rzvf9g3a8";doc="1qrn41ly963nnpwchs1s1l3mfsi49af1x0q9vk4zms4wcd9w34wh";};
+greek-inputenc-66634={run="0bg3frdqlja36j7l4y1m41nslqy7bisbyqyax581arrl9hv9p0yh";doc="02wghx50h2x7p9kl6j7kkg185jra9pijcjrf3bkx6c7d1spvszcv";};
+greekdates-15878={run="0g8cgyrw6lacr9cjig3q1g7rvjdwb0p40b41rsqg6lj6y7m25ya8";doc="1sh4dgxfn55gg9vp163qj9nd6kbp03cb3nkg3hqlf6b1az486nh5";source="0k8vyyxvi1i6kqnanfm1nfhbwllgn22ik57r2p357y69hfj3bs4f";};
+greektex-28327={run="1v39z550xynw4kkqjqcj7izj2cghkk1g2swsy9x9c71sz95r2bw6";doc="0g4m7sb6ppjj0nxgv7pwwvc5p07jdkablcqasdmj8p44ikg9vp59";};
+greektonoi-39419={run="1dhbslqclyk5d8a9v9s4af4gxdy39b35zbbr3k5m53gsd0kcs5w9";doc="0hmxx4pcirm2v5xpl3zyij8r1zm45f373dv18vxj4xr3sn6b7p14";};
+greenpoint-15878={run="0l27vvxzyiar7y1x1a3hk0sswfazi356wsbnx86dp8l766qcc3d6";doc="0zlrfv2y5ixhyqyr5hxycalg6bygvw1f6bfaxqdpakwiz7k3zabd";};
+gregoriotex-58331={run="1z3az5in2izkai2bf627zj5966ypv1z9z9510ynallfi5q6yah49";doc="15qh7jfz42bj450zngw556z57dzq99cfsna5008yymgqsyvy5jxl";source="0p6xm22hr6ka4jm9zrg4yifsc4125g22n4x9zjvmarbxixj04573";};
+grfext-53024={run="03ff5n3yc3fxrayhyapm9qhd665r15v57vri6ajb5xb4m18rkfqw";doc="1f5kvnnv604qllqim8qv40cfpx0xaxanigqnqwmjfwf0n44akcfp";source="0i5pkqrc4jm3cgwzyhw1r3kh6b0b7sb352bnzid7h8msiwx32y8k";};
+grffile-52756={run="02cmm9q14h87dv5h5ci7ny7v4plrry54mz15jddx1zkfx4myykww";doc="119xqz1n57mghhp7db19ffrv1cdk1fgpznlyrn3qgvg2926mx104";source="0pmg9140plqv27mp936ca0193ihggd243mmprj3l0d6rf5dajm8j";};
+grfpaste-17354={run="0y1zw0l245chmlgmi7cmg2yp7s30z8055wnrbm6f45aizcvgdya9";doc="152b029w1203lgfmxdmhq3nh9h2hcdx4xanklv59rih9ha5l8j5v";};
+grid-61719={run="17yxgnwlxi16vkhhy0mij2f07cib589305iz3kzf0gfha2x1fnxg";doc="0h3pfv1hilyn9c9mlqm9nbfd0l0s1n8w7hgaa6cab43y8n60z8gy";source="1ah419141p76qjl1q82l2v6i5z34mj19rvsbwldp8fawfkl093k1";};
+grid-system-32981={run="11l07viwfi88i7c05yjb39wxzdgvg6xvxlcgbmqpvc4fbwmr45bi";doc="1a72i4af612w28wkbsvqvss5462ar8g27y83w2h7y65nqv42wi9d";};
+gridpapers-58723={run="1nshsbv4qf8vxsvrqidwr4rqny5lp0cxijx018bcskhh3xra7r6n";doc="0z3vns6jk1ihiqf12i46n8yhfyjmnkb4l5wyc18phbh9l6879b7q";source="1bnb38mgi6pzm6gvxf0k60z1dal3kgi2rjgwfrcg2h5vmb5rpdk0";};
+gridset-53762={run="1hg92rhf2jl3yp9y85pm0hrbc2a43ysxkhdakfv51a3bynd7ym51";doc="19aq6g6dnbmgz6a4pgxm2c2vbwc0m3hicg7qcbjpchahj8278w5y";source="1gmgaql1wyd6kbhhv0ssyhg5dz9jls0y895h7yg8pyjqg4d0i2rh";};
+gridslides-54512={run="1y5bngrqi46yii7807nw2y6vr7xavmbnk7x3bpfj5fjm8vpnw4aj";doc="0ringj34cl8lqdfa3qwfcq4jdfzsghw4haw7c9dq9acqnpc6sh3f";};
+grotesq-35859={run="0f3nmf0flj20xaxz8g73zp0qcm78yvqx1idyawrarpz3q7zdvqfq";doc="05fy8hg21wq7z2zfsbyjszamif7ixk8aj5bbjsjinyxzfkdack3m";};
+grundgesetze-58997={run="06zf794hhf5w79d3i5wh4lw97i0j98kfkrnn8nppy3p4yrij864b";doc="0rjb4lbc541w8lfy3504j40fvynq49dbaa7bpn7wk77k4m8f9nsr";source="0khbksa9yy82zqd71ls8gh9xcl0h12h7542bi10hwf7zp4nhqs7b";};
+gs1-59620={run="0j8hsdifd75wm4viqwxxk7s654bb7yxs5ccqwl0hxw7kxrxybxmr";doc="03yw4cfa1ixhf34ak42qjwnb1pbw1lzljxg371v1gcwbba9x9svb";source="1my4p6xgpghz0fqq1i5wmqx0nx27xn0vbpl4gbczwi1xnakmvv4v";};
+gsemthesis-56291={run="1y9wj43qpcgp82sfi5s7izyf284hzkn5py0v145jx03l2kxhv90c";doc="0fyadx4x8d64h75fq3xgmfxympcbfjhwwmwg4bpj20d3dbf0rh32";source="1i5w77zwb9c4qc90hxz7sna8g2c11mkf3vnkkm3scm6pkbg9z0av";};
+gsftopk-52851={run="0n6nnfn3fwi5dz9vdqk4mv97hwnyybj3wsv3bipqfsxl31yjp51j";doc="0xdb0h557sgi56gik24izsr5xlbmlfya1w93yih61a5422rv198c";};
+gtl-69297={run="07d5wf242l52y43ranq4l147755gl8r83429706yjj01a71mjlh9";doc="16qpbiy2q9bmnj545ni2pv0w63djsqyjba32irmhq61xc04fkym8";source="11nnmbgr3b9nww4w337320rjkyc6l007s97l3kh2m2xaw6danmdk";};
+gtrcrd-32484={run="095v007lhv0yyni3cqvc14iv9jqi0aqfmlr0zgxh45xfpqbsglnv";doc="1ivw62rpgfyxmlrzvjvmhf4hxfrlgskzq3qr0p6g48ilv3is7sb5";};
+gtrlib-largetrees-49062={run="0l0fqpw6sd1gg3da8s7wz324q5bdd9l80zxg835gfw0vvrn912im";doc="1mq4pbmsfvm4y7g4ar3a438469yy6x4ciksrns05dnkk54adyyj8";source="02x48sgx6vfwbdvgj0f5b9sc0kmkwcl6jyqzv0ascc77av9w41na";};
+gu-15878={run="0h37ilpkqlb6z4fdjldnbwpz2j15izz0wb70n4zmmp2162qqbjni";doc="1gx36ngw3mbbw9i2xdi2glx80xfvj6pv5frh6fmsqlnvhgni13nf";};
+gudea-57359={run="00565sv65b64h18cib0hbxh73ylg07lk7wxl9l9gvdczdz7a4xk6";doc="0rk9g6kcb8wjhf6is5wcbrr95hv7ahwl9xa9vqnfq6m1yy1bah13";};
+guide-to-latex-45712={doc="1wc5pclv27af2zr6kjjahjzxxlab31d8970jvxr9lxiqllvkxyab";};
+guitar-32258={run="1cjrmz39cpwj6kfq3r9868prd5bx0ppsxdydc7327247n4f270qg";doc="0gqck2vifa7r4wb9q63kw7mp8b33hza1jjyn3kighk2rrjbrg3ah";source="1pfcf4r1vwv80zc1p8fjvf8nqadiijsl8fjaxjanjgzl3zyy25i1";};
+guitarchordschemes-54512={run="0jhqamb3lmpzplvxwy7aydg6sv81b4xl81ss5q1nk66lxki714a1";doc="0939llps22ir6bfxqjcbr22kvb6qxid7dzfqjxigl86y8amvv7lf";};
+guitartabs-48102={run="1akm3sbrwnbg9mzlm98zpgh187w61g74zdyq6lb21w7bw30jkxbk";doc="1mrifbwkv0vh4cl1jg92v7006bh3rfrgy7gqpz0byd5nc0vfrm5n";};
+guitlogo-55741={run="1zjlfd49hkq9qc1l3g974wxzw200qyiy9vbiai0v9gs627hxckwj";doc="0awpik3x75rky5w6rk9zg3cy83dgxs2l57wfg8sq9h35zmni875w";source="1hi4rb31mc3820fafyhk2158y67b90xp5wl6xxd0b5fqz2z28qnj";};
+gustlib-54074={run="1kqlqxwlx12hyyhsxyn470rgpzg6xw25ix1v5j4sski6nwspvn9c";doc="13yx3bzmbm1b1p5rbjdfsdlwxdpzdhhmm2xd05hi79wdfxbbby7p";};
+gustprog-54074={doc="07qx4xvyqb4p0cx0macjgyg0pcxgcmdxmzfsx9ah5s0dqvminwrc";};
+gzt-63591={run="01fn1j0blpinnm9hsq5wxsm30b3bggapd3q63yk2wzzlchyca98s";doc="0xncazgwps1140w7x4mhf8i8bn664dnfm5k62hihpq54vpwv6g6z";source="1ffji9j3lc6sd013d7ilkm595j6k6f5n64db57969p4mhdf4lskz";};
+h2020proposal-38428={run="1yz8bz4nmccv0v700zz7x11fjdqhs4hgkz8cd6bnqr3v0n8k4xrf";doc="0yd0iffrvahaci04bmnd20bszgshx28apsij1i35l1wjr1hlnfcz";};
+ha-prosper-59651={run="030zapbv83x0x1vh9px6klqnivygjhzi48fz40jb2cl17b38xnx1";doc="0i9714nqgv3ywxfybg3m9lcrng6v7ydxgfvxva7zpjpmsm3mjfvl";source="0ljl3szba1p1jj7fyw6qzm5h673d63hqwpsn1jzapk013rnxsfmp";};
+hackthefootline-46494={run="1l2iq2k1bil4l5nzxrfi4pg831kxn22ld7402y285hlhv7cj6qfc";doc="0w10yipva3ixyp91iy2y15n312gk5fw90960p3adla2w1p4qhs4c";};
+hacm-27671={run="05layzjb8ngwmqvg49abdi55j9gl1l74sm5baipm0yi0k1kr8xy0";doc="1d1znq8r384b4xpc9f81023asq6yrkbvyif70wjn7h64x1wpnnn0";};
+hagenberg-thesis-65819={run="1sz41ng6wpr0zk0bdhfp6iqnsis2bpnr4k27hw5c94384vxa1w9f";doc="0czc359n4h5v83idvvn7nzl7azzwcdndbinssdvh35ygy68v04jy";};
+halloweenmath-52602={run="0sfcggpqhai8xzpnbyz1vlvh7cfl3n2m7z0av4drd7wqzas0mcw2";doc="0k7qfv036aa691902chj1rgcf3z2xd58xfb2r0b5z80g6944xjrk";source="0ir0xr3aiyjiashy6jl39f401ccgx3dhlyiqx4h2myiwq45ay2ka";};
+hamnosys-61941={run="126amkwf4aapxk26n1h7vyv08hgyj6gac4sz6v76qilwpp6m6sga";doc="1n2bk2yp8c4bvqcjq0hahfs14zlrgrgj9jwvrp903c46zb83lfc0";source="1jxdiqbvbkmhv5p3fs3vl728wb6izfx9wbjqyylzxc9fr7b4qpmf";};
+handin-48255={run="0xcsmfa4jjhrl3xkglqwbgvi844q1f9zjgpyix5akx058qjvwl7g";doc="1k3ar5yzyndnfqkv3bhl7q8aczfbaaghv9mkhzpfri4za5ks6fnn";};
+handout-43962={run="1563x16fgw29vzw9bzjrc8maj1r8337p288y7v066qjaq886x3xz";doc="1y1wpkpjwhq7aya9b98ym4xsv15zavmv8k1i6q0vx302awi2r5yr";};
+handoutwithnotes-62140={run="1wxy2a01jvxhw1pna1bfljigabfw9i66m346n0yshhk6rf3zabgd";doc="0i1viv2wkn2afvkcm1z7vxz98aj2yyn63cilnhm5kzn7ngdrkxcj";source="1jiz406v43khg1p9kpaz96bwd7iscl078315xjfsirlbk33c4y2c";};
+hands-13293={run="0x0vdn7hq6k7wr7yxn8pnkvjhjq3mfl781ijrs2mpvjqygqffzag";};
+hang-43280={run="097qbqwbib8gj53qlydflff7sqp5ghcg5812hjnav9a0rgklpw8y";doc="19falj7rm7diwr24q5rpab3rp39awnyg0hdxfhhalkpdmjwqk2iy";};
+hanging-15878={run="0s86yaxyfv9zxf4svwg9s13by9vrw38apfg0hsfchsimsdd6gsbb";doc="086lzvx4g6bj04xdqnadmb8832klmq362k9lqh4pz7ym34mzh5c7";source="0wwfnkb66m7r77723kkkdp7yxkl789g310m5lhllwx33fbhm8vhj";};
+hanoi-25019={run="09a7cv76naxzdach5507wdqnjp12amvlia7kw0jh224ydmkzfx9x";};
+hanzibox-63062={run="0pww3xzi9r52cr0bggpw7wlddm6gzf5vs5xi7v03ynlpn45wz3x2";doc="0x18yvhnywhdl68jz4v5llkqqpiz1l48nv77g0x2x2svzwrxrw3w";source="0dblzzg2gkg1blx8rh3rs3jb5pq1qjcn9nq0n0rz7a7dph5f10j9";};
+happy4th-25020={doc="1x950scxbvcgwycpakflpklc775pknjab620g099dnsfrpb76f4a";};
+har2nat-54080={run="0zaqsnvg46pdf98gzlxa8l6z8v9l3fd7jmf60nbrfba7jrzpy1bh";doc="00n5qcljlpw2rq8x921vhsk7xvz8z43gxiq41qfzin696ysn7xj5";};
+haranoaji-68501={run="0lpghfxqr1kh4s6vk5zjqkzm4ryz47qa3dkrxfiyclv4crsqlf16";doc="0v31a7kz4bxp4ay7bh63w5hn53iljq62vkkq0nad7jf0cyhdm5sv";tlpkg="0s4wnm8lh0sbblz47j7q48rlndqxjiyn332061iadd5gh1x9ialh";};
+haranoaji-extra-68500={run="17j0nf9f0l2202d0b6yba9dbkwp7y97kxh4lnv4chvx7f07l5grr";doc="14w5x12q0d4z5h0skp4lvicwrcksl9wfc8lrsv8lc3dmhijv0f48";};
+hardwrap-21396={run="1kwsns5vg5pkplcl5nhmvpm2ccdv0f9431qxjxq1k6zfsknpy60v";doc="0h1n80c9l34isgyzl36hf4nigxcsykfgqv6i9jjdf6dqpp23bpw9";source="0hiqsj0vpfkmi8z048ymlnxrxaam8raq2f48wlyk67x4w2gv72k8";};
+harmony-15878={run="11vh6dy95n049bfr46yyb6a5ziawmh3n8dr8l7cqhj4pqmkpgad8";doc="00kf7kbrfr2cqv7izx1v90mpa81ncsn0r9jkxkhz8df8fsizaigl";};
+harnon-cv-26543={run="125885fg7frl37pmxxj51i7d22xydj5wsva9i27126903y3qdm8m";doc="07i4qv95fcfnlfj18qljwbkv1cm5r00mzmq570ra3bgjc301gk9a";};
+harpoon-21327={run="18p0xqjxix4ka9a9ja513il0wrpqrqh8v9v13cc89kh8qfjlf9m7";doc="0l2y9l8wn55dg06fbxjnv16bkhgbg9rpfclawfh4p7m2cf2h1k44";};
+harvard-15878={run="0jpxqyrw9skg7jpw2d46f8nrh7jaa3r9lviv848nfnn6h35vs61n";doc="10vxj1cna040i520wj7c0flbk0d4hr22jyxqrv88616xqqkg3b6g";source="1j754jjwdil45pr032xjmwhf1i2phspv2swnjbyxgnssl6i370r7";};
+harveyballs-32003={run="0d3wc82qamnc2pivkr23njai42vbn7xip2rlsj4kc8p75zh9da3h";doc="1792wp7zx6a9f19lplca1b7pdyf8zjvqndl26s84sfv3w4fmbr8z";};
+harvmac-15878={run="1ky0vc92z3i7l64hkdm4jrlaz3acna747lfd2w3b0ybdsz8514wl";doc="19sfcgshwcvn4z3cih6ha2kgdbb5282zgf244678rl1gkmqjblj3";};
+hatching-23818={run="11sdpa2fbxqz8diiwyjvx5fwfycby0rdav6941pgfbzsbqd3ys62";doc="1fq1wkq7q5f8jbhx7p49jnpnfprb4z2wmawyjbvcnrnmr8jbrdny";};
+hausarbeit-jura-56070={run="09nf6pz7xqhzs0n7nafmmkpsy5ksvqvnwha80yv6rxasnazd940b";doc="1na417f6avcar3dmgk5wrggj99mpskc1j7fj4qkh33rii7yw6f4g";source="05f4qr5cz06k7hnjranx6sbqniv4h77dy0rrm6bg4dd6hrk474q6";};
+havannah-36348={run="0zdbwl36d8a374yhaqfb4f3561ncch10v0vh7nxj22f267lgl2n3";doc="1pkkslz2f66j606j44rq32dp9qhfqcr959wrp8j9xgkw76i9lprh";source="0gyndaw2g2j2j22njn32839mihqx3pl7sij35vhsyahyamnipk2h";};
+hc-15878={run="04qricj1nmmmhxwsam901cr43h96ymc7qdb1m52byniv51i8g0yn";doc="06q64drrpgm7lzp45hrl33cs2dj4mx1mjpsd3paqgsn2xxqls2yj";source="0knqx9smbx7lyr1r6vn50x3x9zldv14gb3484jqk28jvm92njnij";};
+he-she-41359={run="1rr8pdpizasdcb1sfg74nsqs67xh2lcwd8w2rjaf719bpx9372yb";doc="1lmahrp33iv7bbnkbiwpkagy3rm7j0wric7m1fbzdvkgkzv274na";};
+hebrew-fonts-68038={run="0024bhlbj59gq22gafanns4gi8mii8fcd6xkwaa85czgm5yqmazc";doc="1kv46s1x86gs2b7h9934hqlpp4siidnarb1shj427vijfg68asnp";source="1m4kd4r1i3sj4x0liyrpxckdp4v6xvy79xwmkf3glzrmzq79vdz3";};
+hecthese-68584={run="121l6nj57aivlyw2gzmyqyi90ql3bsrdjw0qa6gy7i7ifhw81s8v";doc="10pl8k15r835rac4ihng85ayp2k4w7idlf3ss1ywb3appayf8r9g";source="1cnnif8c2n34hlpm26bpdvbrvzil09rdfbqcyn5nbfxd66k83vah";};
+helmholtz-ellis-ji-notation-55213={run="19szfdy3r6i0ayfr4qjv99dy6h97pqcfr08xhy3v9kzqm4d2b5nb";doc="15d4dil3r44v5xds0n1lnqml7cyncpyr92prb56rfaav669hflbr";source="01zdhy1p6idpksjh1ak1lyw9j536bzr130bjgay471k9d76n38dr";};
+helvetic-61719={run="0c3f1ly7y6404z0akbfbbfql13sz717v0n0g69qjpr69hi4n0nsl";};
+hep-15878={run="016jjvmmc679sk23dy0g09a0s0n176a5pyq18snvi9xajh2c4xw5";doc="0czpwbhpgpbij9b97dlb3qq0aa9vyh12p81sdm0hwkj3i16yawav";};
+hep-acronym-67632={run="1y2s0fmrm4z5laq55xyhs1h85pjk48y92g0rzl1hmrdhqk6l0ikg";doc="0mbhbyv9bbm0k856nbi6f46fn5a7z2s2ixq435gvka8r713ns5s8";source="1nqv1qvqrxz6fd5lxrfsmxmgkkz005hymxk8s3xdwhla982nx56c";};
+hep-bibliography-67632={run="1qqidgnyi30zgmcfp0jj361l5sga8ds1b9wqhxad3hfzysa8bacx";doc="1x1bgw7sqgnlqzqxx2zbvcxdpl304vbn8wx26rdjf389r0rw3yzy";source="14wng879zmwzmacx2w8m2v1l4ha169xaaalmzmwc0lbj5rxhy44v";};
+hep-float-67632={run="1fv5bga9nf341iij2s8llh6rwvxf85h8hnilhlk0jc5s105whj1i";doc="0y69ymqj9lxwr4v3lxsvz17lms045k2wdvc9dszvlrjg2q3ac81y";source="1xmfqk8q0q0xmwsc4hgmvvajij88vszqimcfw0ddf7bylxchxjjs";};
+hep-font-67632={run="0z92gscinj92pypc6hnvdlyd0n1hdkh1kbnlgliv6cv2swyddmv8";doc="18nn2rxq07xxv14ds95q5rwlqfskd6gl96gya02s4fi2lz6ys55b";source="1fzx346kva3lxk4hx9pkxnj7j7jmx287gylpddb2pdpwkkc8spci";};
+hep-graphic-67641={run="0dwnbl9xm12v3hdpki7nzbq53l29rhy762rxbxvq7hjbjdm5zni0";doc="13f1g76vqqm5c3ivdy41gix2bzmd6z73bqlj9cyij15jzwix9dan";source="0y9d01kwnnlgx0cbr4ifi97la7cz56l30z65spbq2ilm4xlx7yqp";};
+hep-math-67632={run="155by362r43igwgyyq6fqd4j0r3qs12fx3gfrlcdpqlxnjg9j20j";doc="0xhkrd51y4br7qsldynnfhvy38ilngb3l022hpddid9yg5s49k5s";source="1zdrlvia3yyibmbypz519bx764jy62f7sia9qk6pb0wvwxbqmc0c";};
+hep-math-font-67632={run="096y39y8fkqhd7p43kv8fairn6q85bapca1ir8v2mvspr9h2c752";doc="12inm8vwlwnwzr6hngjpixzf6b2ckcy5l4a9dgqgvrh543vwvzjr";source="0p3365139k77y4kmwg09x67n67vyfzzvy43s1jn8yda91xnn02sv";};
+hep-paper-67632={run="1zgyzl3pyb0ygfxgn6pb9wcg75iysxqbpr6awa57aiah0hmynmm9";doc="10fwbgz97cifhx1pr0li91h312ni0g130jg97d2vfpxrn2drq697";source="061dap6lcrbif2rlkk7206aha72h31af4ab6wif5xriz9bj11cjn";};
+hep-reference-67632={run="046vf4p8nn661w3ag3l0z55zv4nw42n2376b1ab2p6sb6sb7l86m";doc="0ahdg40hpb17lask2bswsc0qqh1fdalvjgc64scqb1ppfiq62sif";source="1z80z7sr8ipsc15rns83141m3rw01s0pmc3da8d2vl7ymf4v8wwn";};
+hep-text-67632={run="0kmjlzjq8qwhka31nyyvdgvycyb4nlxrdp1fnwf1kgarr656rpky";doc="1fsjsx0h1wws4z1vbhc4ynaznbf0lwxnw34i98n3cyqx805fg1dg";source="0wa27j0xyi76nagz2yh240yhghd72gq2b4078yvnfs1bkjf00127";};
+hep-title-67632={run="1mihii4ndrrk9wxvwh6kzg1dh55xfgcww26plsnn390yqqfan8fy";doc="0iranpsi295spbqpm8r9zv4gq3gn2231pjksp6qkmkwma9xl4af9";source="0ldf8yjqqxdkpyxxm51q40y5w2zhpwv19s0770nmazzchv7hs23y";};
+hepnames-35722={run="0almnyzzdf0q50r6qi7i6c4pp9aakyzdzj2jxkj1y0h5smi602ii";doc="144wikhsm6mm6f459r4paf0chas0crzvd2rylpynhsmkp9sk3fck";};
+hepparticles-35723={run="076w3wmdywai4pc02k8nk0qyc4vmvn9x6lvidmp4z6as0jir7ydh";doc="027pgn4i7n6b2zk8ikyqj4wlkkw1njq4qcfkmy0bgqz3al08zr0b";};
+hepthesis-46054={run="165n2pwn04vsln5xy6lkg61c1bp65zyqsd37fmmd3xs7yhv7xc2d";doc="1cql3rp42bb5c33sdfip69g9rd06107zg6wmsmzkv8c019xwg4y7";};
+hepunits-54758={run="11szf1jiralk8jdp45bzksgd76bxcf8xgdk707spbyqf6fzafrz9";doc="071xs04zgnw5ir33qzfn0wxxfsk75d9di0ssl394ksmrm14ny3vi";};
+here-16135={run="1l6xh4jl2nipnswdn78378vhr41ikj7qk07j7iaqkyigk5ndl0vx";doc="0i454862gik3jy1g3v21laf8qag2cadvapqz0mn68hl9ymly4b13";};
+hereapplies-68638={run="0h43apcwi4mdag2kpv9js9g8a6x83chskli7lxqzr8zqcwj97905";doc="08v044j2h3w5yyzh330q5bfsip55zx9s0ywpn2f0b8x3nd5vgk5w";};
+heria-69058={run="0kqvcx9b3bg661i3mqdjxf8m8wx5cz223ifdniwkclr6h7nwrx9x";doc="0rn3ng7c8jyg438yl8i4l2zl1cwf62izfyis889py9axz4kc4i66";source="0dwcnmnlh5xp6rlhhgc70p8p6saz59chh2k7w0hvnr2p7768hfdq";};
+heros-otf-64695={run="10q1g30vma4fnqyga8279hqy2aq5wq6fv8d8nw22i9mm8ms2wwga";doc="07k4k2rrkj4wx8i018jfccs4gf2pvx8grcmz88lmw52im9ga002q";};
+hershey-mp-64878={run="1mnqsqsc99by1r80b6y4rfb3kzb0r10jsfpfgy7yragr8rr9xzjj";doc="0xh4a41lfds3yrj1am613c4629kvgvd9dfdfzmss9li3j5pa6jwp";};
+heuristica-51362={run="1sxpr7f4s5a1q2r76r7rj43drsmljmd32wxwgwj1x97a5k7x3jxf";doc="1ws9r2hhcqdgcdplhgvwhhl7c834i4rkk0xrsf14c3gwxg0x1ip6";};
+hexboard-62102={run="1rbyaspfnvcms41rakzrchjrkggd0m5nshpzyhcf36gv6vxcz8ix";doc="18fmqz39xwns749klira00vlm779gxja0i8g0rrpy6f1pfch93by";source="0c6a9q1yj2dam3892m6105r737fn9ygiksd4fhmbmqpz9rxlm5zg";};
+hexgame-15878={run="0s68961p0dsaila2a3symqswvgdhh4ah08aphqjfs7licn50yy4d";doc="1bfrm8mz98l8nrxgnvp8q54pr09ixm81wy1ds1ww4syczpw7jypm";};
+hf-tikz-34733={run="13232m6hybqv16f6v0bmgiyfqdfj407mn0h4m9wgh9pzwy3g1rmz";doc="070h5rdgfffjs8sb2gaximsqjzby2vcf9ffvpljkd3jzc8rznlbm";source="1df36m347jl9640jig0qrk445s0gxyk6rl74i19xxv567bxh9n69";};
+hfbright-29349={run="0qwwr02q170q29rlq7fw61888k1pm867vgj70ijckivibl0j2snp";doc="19zdznha8bfwqfyrhq18ad7ri8nd240hjs9kslswg70xfrync877";};
+hfoldsty-29349={run="0ar4swzfczqafanfzhwyw7kx765w743r1davbypc7lglcxwjw5y4";doc="0f9gcdi8wqq5g3camccbdzfyjppyqbvvv0z10grazq463lv83jq7";source="1prpbq8833njsmqanxzf25136g46i2yb4bqpvlps52294pjh0l0s";};
+hfutexam-68829={run="0v74nqzv0v03rxkfk8iyvj93rnrjj3dmwj6kmbihnvc55qbn20xb";doc="1nq3c4r083hdhgi99n35p691b2djys238dylwva6zw9j80i6vvnz";};
+hfutthesis-64025={run="1wr9qa2zhx1py23q9r7wigiwy2ik4gicaqb30mc6m095flk5ms6i";doc="00fvnydr7bcyf9ij674whpgxizcn2fpwizqdnh0srxm03znw8cfi";};
+hhtensor-54080={run="13mx7mg5jqrlyxnx19n0rs2crpxx2gp6m7l41m6l2ig5vlgc0x1r";doc="0k5fg9ad5avnsg84xwlcbzffrzf6y8l8a2m0dqw3clg7zjmq4prp";source="1pay0c1z6avkb44h0iibfn6xskiglym0fckfqrdv0bablk3cghjn";};
+hideanswer-63852={run="18v4sis4yn8b1zwcvrjadj7qzjya52wljvxhajxsnl4pgslkjcqv";doc="1rr5sy7l21r4ffdcm7bmlcs1al5bn4gsy6p2ig92f921f21gar4y";};
+highlightlatex-58392={run="1pmhvjxp5038nnxd9bnk3s30wgzxvbzq6z8cfmvz0k8h1nzkc1a1";doc="0q4v0dvr50wd0qbk8xvn7bayyq00kj8b8wwyn6axia3mpjmr7a41";};
+highlightx-68756={run="0vrcvnr23qg3ma2wllqyy1xbl3j7ggril4ah27ilwgad1i6nwjci";doc="00a5y0xlcdrw1x2gkrhcr44dyrmc2gnd7gv34r3vig8pfbrgwdwr";};
+hindawi-latex-template-57757={doc="0q35drybrlcfcrhrd5691m66nd17b0m6hkcsqazpb1ck227zih61";};
+hindmadurai-57360={run="1z3590pi02n90hwsjmihxk957hcqgc3kry3cdwpwaci43hxcvp2m";doc="0zws4bzz6fkhxnpsjxj15wwnvbd6rhxqilabzzvm43lv0y21hvlx";};
+histogr-15878={run="11zbm3d05j6nrzwb3hpahli54lf06aly60arh4fi9k52qcbsylv3";doc="046gw7h51w5s8p3rh6kwwi22xxj8bspbh7anf2cdzg4w88dardl4";source="153lhmgh0n224xkg7dmcajj7bydnv21spihh371hj5a461d4h9k7";};
+historische-zeitschrift-42635={run="1zh8jhsmn4klaqn18zxbk3ajxvr99djavz4cww5wjm8lh5sv473g";doc="1gfymz7b2khfnn94qkd3dawb7ppqll9qg7nsx3qac8pqba539pv8";};
+hitec-15878={run="1rzv2baizqa6fj063knxhac39slaaxk5lbgpl6zwk60nbp1lxq3l";doc="1p6vcgy1l1avz05h6r7bqwr7hl3jrnyryl3vn1i0qad25jryf7qn";};
+hitex-66924={run="0agmnskf8hjvkjbkj5m05q30v020m5vaj5nqwj8cpnxzjhq1hf7v";doc="1d1mnnq733c8ihhb490inch97r71vwrvsj8n61dqmalj89yn2n84";};
+hithesis-64005={run="0j0fsblj5k3jpxqgjxh7abynjqiz09hgvywrvqi0b4vv2fm8ccpa";doc="0rf5bffmz4158yqa05l4vi08nf1cl115y0ff9rkvdzjn249n3mgv";source="0mix1q6wf5723c54dsc7xx7kcwi0qz1kvmzs9yfx39295cvg9hzh";};
+hitreport-58357={run="01xxw91175ffcix6s7ji2600j966dbm6zl8fbnfwabb1rvn39nq5";doc="1wpscl97hpc3s1s34bskz088ph3x83qq7m6qgjj0xa2hbm2g77ci";source="1hxcw8n5aa4jfpd8r8f3442diww9zhnywd6kbbqjs7928bb51vk4";};
+hitszbeamer-54381={run="0nw7ch41rjp0wz0k508x2kkg4yqfpy6yfcl7n3rb88ps8fiqd786";doc="15kkzvgn1n09i7nnfd9mll1l6xqwrbpc252k54gi791nc30acaip";source="1ysr0z079l5k61v5r77hy2r150did3a1a29k1xppxrjr5ry3f4nk";};
+hitszthesis-61073={run="0dr4ifga9v5w7kdx2iban28ajvw24b9ayzs9rqa3hkkir460hhhf";doc="1v839wq8vrswximiabnz3vzfirq7q34zzqvxxyi8791x1z7a4hph";source="1w1b1cml2k1fvvq00lrga4k5sbifycxf0g1hb33wm05wwz0wihaj";};
+hletter-30002={run="02v906vgbidc2s1mgz1k3666riwb27vsl7dp24rd8q2m167xjd29";doc="1x8q4jkrbw6ddkqqlaz6mxj4q105vjs8k8ifphvkvhawl9iikki3";};
+hlist-44983={run="0ac4n38nnimrs14k1s2yizbqvqky905qcv0kgs0aq043kkmpi0v4";doc="1fnqm6kxr79y6bpymafr2s3m8sx5mviys06hcs8sfn2gzagg88bl";};
+hmtrump-54512={run="13pq5h9pwnp8hynsc35ib8wzblh3y4gx2lmrrvd0big80wwsdhsm";doc="1bzgqgrjlpskqydqdj26lsn55pkznmbbiq0w4ybr9r0djdmqbn1a";};
+hobby-68137={run="0ndhwgldn1na83jzdk1ab03asbbp090a2czyxipm5s82zmfa7bm7";doc="1yz23fn3zdixc5xxprl0jrly8pqm1n0dzrv4032802l4bysxj7sy";source="1nmgzxkxsq78q35zf2xpzwp3lw7s3i2gya18y4xkdq78673s11pg";};
+hobete-27036={run="0825ng1xcpdmjihiffzjrvcvx2fqdz9mryq2bwffas22kf0zlx46";doc="0il6kl26r8wmm6jzii7gmr61af84bl9dn4szlnw34dgsdg0an5hh";};
+hobsub-52810={run="11j0fxsxmyd93px9j5fdarz1231nczdkfpf1qf33kcdpyb44jrs3";doc="0hdidvz42acsgy021c1dzlvshcmw6fz3pkqrwpk66qk2nnh30dal";};
+hologo-61719={run="1jhzw2bxl0nvspr0blkglm6zbmrab13fs601h54gnrhcw10mxqwi";doc="1af7406hbdvb2fb735i6y7wi4bhnq7x7sijf63zl0klpf9pii8l3";source="04d83z1pw6scg4cd1616ix291zi9dz5nnvw9xc8hd4lfxf15nx1c";};
+homework-68773={run="0h590xk9dd1vc8a5bffwy10lfidz1gb20zrrahqv4c3w3fy6qp79";doc="0q218128c6f9fnbrjinxcxql0gvlgycnr687k0nfrid96mwqm9f6";};
+hook-pre-commit-pkg-41378={doc="0mikg4p9wxb28vgwh1acgdhwa2fqnc8rw3jg355d6s137m40awc6";};
+hopatch-65491={run="0r294p098z0qykrh9r4yxmc0w72mz1nmxqbv418pmbn15wgj031v";doc="0qxa6maigbzx7hc3nss3wmvcpyc9wvhq0pbzni7j0hqyzzsz3vv9";source="1kbk80432fpq30zgix8waxq87kjd2bpcv72idaly8yjbj4pa1l1x";};
+horoscop-56021={run="02kazmk5sa40x0a4zb30gk9lkky0ak825gczbr5z8wchwpy4i1ac";doc="0w9sgk2j1fzkcfzn76zpygrlyi9fnimp92mygsq2z6rpblzd1qyv";source="0c6zkcb2057y9x7mz4q3nwin8h8ax71yaam21m91gk6ad9k8l4ij";};
+hpsdiss-15878={run="1l7mbnhds4c6y1w5vylsx8j7b4syl2j785l3xzvk89nc5g6ck2qh";doc="1cxdd1340b1gkn915id7xcdac2zp79r1yi5g3wjwmj4kbn7z6sbp";source="1dar4y0ajqz93znww0fkf36li50b82hbxixi30hi8fm8y2hc3j2j";};
+href-ul-69359={run="1gf2kcqh60ilzkd2i1fc782db4nxqgrizz6h2p0i2lvc4qplj95i";doc="092gjbvcda2xacj0a3b8y6zlizkkyzqcbr6qfhdsqyds1sdrzpjj";source="06paqsz9is5ksj8lnny4d4g7z3wkfgv8lnyl3nzckj8ap0f80g34";};
+hrefhide-66189={run="1lbfx61xyvnm1r24h6vrp3pnmci4j5abxlaanhni19j8gvqkri3c";doc="1sf697hjryz1l82ag8h2kpxgmwa4fzmwb6ki1wsnl0y1qkl9m1k0";source="0p4vqr3cjnbdsrkv049jdd6yr54xz40lvgdyx6z2wf79k5fj4z1q";};
+hrlatex-18020={run="0klc0pb2b2dcixaqhgxinhy18rp0lwck7129zi5qnpygzfslpdws";doc="1dlxj4rv9gaxd6i4ns4zmhykhxwsacw6m3m2jmk2lkc3sw68hsyh";source="14cw35brx8mqv05zbgrvfmmjhxyryx7dmj8dk0fkimqbyvhvv9sj";};
+hu-berlin-bundle-67128={run="109hjfg6p3g54pz7n6i64ggqjmvjqzmjp6ipddji0mnhkhjfww6b";doc="1j2vjhk6rnsj86a59cd081vfcqnb93lz6szis05cs53k8pa7yh52";source="05x8cwvh5xkjjw069lpw7pbsnb5swvf9k2c6l2s1v0w1wrpwg7b9";};
+huawei-68336={run="1byjwc6yjfv8ynmbdjbljgm4592aaz0dscb4plwy5qaxiiffsjxl";doc="03hicqi8j2mzc6x1ay0blwjl1aj7n5j590nf0qc900zad7r8jlm9";source="1sfm0vbsrm7a8xa4jn3ncnmyn6wipc4pr34gk9x71hxyj0hq3qm8";};
+huaz-64723={run="1vjfx3c2hdv2jzqz09v3ki59dlmgnw0ff6m394nq6gx0qqk7xl6m";doc="05xsh7jvy9y5v9vl25br8ixxbyfd754p0hihflrymkv97f1b0nlf";};
+huffman-67071={run="17pgzpbhah5m0gljhkqymv5lxpl5bxxgif9m7rnad20x4nmyzz68";doc="1r6a1i3j8s4843gdvii740dl5rbilgahcrs2xw1zcqpq8z4xbfnp";};
+hulipsum-56848={run="1wfcsaff7rja3n0151ddzbfl9b3gkfkwq0vp35zcrd80xsqlw935";doc="0994kin6fvbk4j9rp53vjp6ci050zxsf6z3qi7zdfxifd269fhx5";source="1a5mkkl36dk60baffj3an2sa382p39j2sdrgadczj5r9pm9q0am2";};
+hustthesis-42547={run="0c5akc97v3fh3skxpgmffywca8kyswmaypkyxdzwrqb1k2z4xknp";doc="1llsyhbgdz9k6swry84q539yjsvcxj6hgirqcw4vbvsdxxxsbyn1";source="0nqs1ifkhhzspdwg5nbqgpd2309aw9r65cav51vxpn2abss1q6a1";};
+hvarabic-59423={run="1cagm9zxkhrck5svckh7i0c3zx48vy0h6f2nhishm40g9q9r5qay";doc="06g6wmxqgfj9zz2ph7gwgndgkm2kzpd4ci7pkwl5qm41ik96l7a3";};
+hvextern-69064={run="0f7c63yr0fn1zf5a5kidxz07gyd1nphms1cdsmxkf490f7xh6xxd";doc="1ynd6m5zw9fgh4r3f49p2cp0d5409qmavyd5c9ykzagzbc39f0r2";};
+hvfloat-68586={run="16h12i3s0n4cjlh9pcfy1s4q03ln010dyma8myqpjqwaqb6wlcmk";doc="0cmlhq6pab92qg2bslk4q4hkb1sczyqxknplm687zp527fzklasj";};
+hvindex-46051={run="1wk4q29iyqrk83kafwhah5gvvj2ywpnqzvnza6cwrkb85fd1q2i8";doc="0vcdmn3xc4cm3rkdkzi0qvqakgkc3hrgy8nycr5c8vcb6xaiw0gr";};
+hvlogos-68568={run="1skfin78zfp4wlggm0b1bn1vjmf94nia0spg5kg4y781b85lyjw6";doc="02lwid7nznnll5mfpykxi2w6gwn5rmsg2ycm88p2hrbjihz34fbz";};
+hvpygmentex-62405={run="1rnra0v65wmz8yqwfa6zqqswx0m7j54z6wpzvbrp2d5gx8azsdv8";doc="16r1sqsaw8ij5jxf0ygm2kgdhxpzsq5g61jhj9rq0zhpjma7fhdx";};
+hvqrurl-68693={run="1lxpmj84cmfrxw456cm9dfcw1zxb5p915h3jp1x3h7w3a2dnnyfm";doc="0gfsjs5q90cip5z0dz4qz0lb2d3kvm5jja6drknh3lddslak1lqm";};
+hwemoji-65001={run="1vkflwxx8c0ckx7kz9mkh2qkpyxjjx9zmp940p9w93x4c09bs6l2";doc="0i18fcfbvyv4k578bn00w7ngk5lxp29n1j1i52vjwc4cp25lfgys";};
+hycolor-53584={run="1dfd149g2k8cq3lw95z6r4knyq1mgirdqnk9c4lmd7ip4rcs0vi5";doc="1pc12vbn1yak6l6c1fgpnj0s88fg94nagj4b95mvclad6b546g71";source="1f5jv91vsib5vk4byr0481a8j5pvbwmhfqz2qd14ck2vw8laz4ap";};
+hypdestopt-56253={run="1753c7vjx3smnhl1iylg4x0sdcqfg6gb0wdbwqmlass4qdn494w1";doc="07a2dpvvyj2r2691v8izjnqjksna1nm00za4sva1npcrhkc2qq1q";};
+hypdoc-68661={run="0xbsmzlj9hf5y349r4mvvnzc4k183fzr8lp1f07r1dc0nbff1qvq";doc="03bcsfydm4yzm1g9ijz1r2r0f5llc0i3pf318aa5rfy6j896nvvw";source="10yvzay1g3nk2kpv2l41vd2dqxqh5x03dd23xcpd4lk09rbddcpx";};
+hypdvips-53197={run="0ax6n7ki47jyzp5g8781c7rv54hwrl0fg7d1bwzbj9bmqi39df4v";doc="15vnypyl6g50d4mycz3s41h8ccpmknr0vh9bwacr6nxbzlyyykrk";};
+hyper-17357={run="12737gd2nmnalkgl4d2sh45r4d621zl6g2zcih98m7dw8qr38w2v";doc="0hzl3fzgmn6kyl6p4d98l9ycisfhb9v50a1m6n8q1k6jpvr10z9f";source="09m0kdcs4kqksqwxf29yq4l52kb2mj5pxkry010ibwqw64cs5p74";};
+hyperbar-48147={run="1bj0v54k85isn3p48vmiygcvd3n06r4mqcp75hf96mmp0wvmczg5";doc="0fmrz4hlzd8clxx150fk4zbkdgbnhg3b7ck10225b0n1lqgnlh0h";source="19x81f6bki5mnx1nblrl0ji663q0pzkacy5lbjsqyr7krdc33fyh";};
+hypernat-17358={run="09lnsw7ycwkk71fyjk8zwgzdjv8ff3k028q7hr27dqsiyg4hjg7a";doc="150ayv12ym9h68a09h1xakdfzccpix1pff9blkzjq6iz5imzzpr1";};
+hyperref-68972={run="0jmgr56a42db36625s7yxv9n46qjmrhcs3s9p91l86xm6g32nzlq";doc="1s6ykvsm30z8nds9w3vnj7k7h2gb4fajkchkigaliyv5p0bx5q58";source="0gfdzfyclccssg4yc2mj1brwk7lm70jcsklcxzmxyarchsnrx7jl";};
+hyperxmp-68251={run="1bgizrwr5wpr8qprjwyf9z3f8jw0m1sq8qzw886j6lwxlfg6fp9k";doc="0srwvld1grn4smw2pnr0fp2082vvz3x2bj4lycvx036991mmnr6h";source="10ll53lhsqz20cp80mvwy1z9qna1sswappy2ifz71m6v304a1q9v";};
+hyph-utf8-61719={run="14jj24fr6v74vj8wi2a9k9zk9vnrvmy1ni4zn24dl5fdfw75n5ik";doc="11n1blnx9i7q2dlhyhf1dxs2vnldc9r8f3k6diix0i1np8hpz05q";source="1cff5ijmpxc752n6cmpfzn1a10ihrkz7n9l55gz2k2q0a00m2ssh";};
+hyphen-afrikaans-58609={run="1kn57mzrbk0qhz69b1ysdqjv8xirsb40yz61jx146kqc4p1y96lf";};
+hyphen-ancientgreek-58652={run="0lhy1zrg27748mrx8yz5qxpxl3nl460l5l6impiz3lbrgnld487n";};
+hyphen-armenian-58652={run="02x9p12zc78w1x7k2kz019as42d5kn6gxfl4s72rd6dyrqii7bc1";source="0z666y580w1kpxssdanz67ykq257lf11a1mnp1jrn08zijvfrw9c";};
+hyphen-base-68321={run="1xganah7l607qg0hyridxx08sfjc8qakykbc0c97pad677mr4zw5";};
+hyphen-basque-58652={run="1dy9fgbh4i3d9ar8wazwjvhhwzyhbys68icz3zjvk7gk9nvbm9aj";source="1yhsbzf1g9dm70jfixsz51hsfvn26cwfkfxvhg7xv2piynr4v51l";};
+hyphen-belarusian-58652={run="1n5md9kf7iiwqm236bkdsl4fb4vd6a03b6q1arvfa4l4yh8jvr13";};
+hyphen-bulgarian-58685={run="19h61n6ip8ja8kn8p1fb79lfv15pfzdhhzih0hg15cp1891nzlql";};
+hyphen-catalan-58609={run="1aqn66448bbiycmjyhbxikr4l5pvjvl5vm8gpzjinngiw82v9j98";};
+hyphen-chinese-58652={run="08sbasjp9b4wl15zmx0diayqfa9i7pf65nnsa98lbc9rpyydvhn3";};
+hyphen-churchslavonic-58609={run="0yh63znzx0bqqqr6x70c7laikxx82ph85jw48i0jh9ziv0n5gq8s";};
+hyphen-coptic-58652={run="1ry5srs6qr7z1xj1km0jsc3z278iylrfq79ji31kxmf1qs7rwpnd";};
+hyphen-croatian-58652={run="0fqwf7val8hfdcqww828cfq3706wi0w0ypmvwkkllsx1nv2mqiia";};
+hyphen-czech-58609={run="050b4vmp8n9nwqzagpw7mq1ciin9rwgdicmbk1ajl9gvci7q1q8b";};
+hyphen-danish-58652={run="142jxvssj44xh1p8d0b298l0ri33blvac5syvqgx71cvsbwpc6lb";};
+hyphen-dutch-58609={run="1hxwpb67c2hzzfk6jchhzbj2mfxzywz4zqm3z1hz9r2ywahram59";};
+hyphen-english-58609={run="13h2gli0pfjg797i4i86dihmnrpp52fjr1apj71fgjiq2453zsdq";};
+hyphen-esperanto-58652={run="1vfrf4wby1gmw5gm8h4qkyqa3hsx00nwj2qs05m1kn119k0sg70m";};
+hyphen-estonian-58652={run="1x8by00sb45acj1rkd5az408i0i2wjdabd992p4d599sf8b9dk05";};
+hyphen-ethiopic-58652={run="08dyf72ygqh24h15na2ssl2f4w9jlffh4vhy6lvrw2y6kss1xr8r";source="0j55k0sh4dc53wbngadz4wy86k046bsi4l5a329044hk24v4ydm0";};
+hyphen-finnish-58652={run="06c9r6dfihycr4vb4bvnf08d3p94h5n5g0ayjpha6gl08ab6wmv6";};
+hyphen-french-58652={run="0j41s8jl6449lys7zvjy9psynxlxlbcf23qh9sxf81rk5srzwkdq";};
+hyphen-friulan-58652={run="102sxp8901hln47nj7wng556bmrn0hqsljlf0v0ll8lsngf85h33";};
+hyphen-galician-58652={run="1l0z14m9j9w1c9kkm61r1s4q9fvbblhdbrqhg8gcddfh0b85qllq";source="1979y5x7b1x8j9v4ifc7k24zb6pxd00z0c6j9knndcaj428mf135";};
+hyphen-georgian-58652={run="1ja7skdhwwdy3idgjf508dbhbpyl3a7cj9mx8x1rswywy924liqf";};
+hyphen-german-59807={run="12x6z459lmns56s7h15lhz0fvz4dw1v51l1a4akynlbs3wh1adiv";};
+hyphen-greek-58652={run="0yknyhys5j5d34hlzw5wqdm1gw74p6bvx4dfx5kylvwjahj6ys5x";doc="16ikyzvd161hn95mi1swg0a390liwz1cq9534i5nvzh1vkyy4wrx";};
+hyphen-hungarian-58652={run="0d0bg0h78ij9b9anmdlwrlddd1xg09c2k5ganwnydbpj81c4z425";doc="1r10gjxyk8bkqjiiz7pij7zy4cvspvhnimkszl2sv0zgrkgayw68";};
+hyphen-icelandic-58652={run="00lnbm193g0zv7c1m47yz90gik1bd80718y8cmz5jhxz9ny1l271";};
+hyphen-indic-58652={run="02xnj4lrkvy7gs4vlnsvili90p6p6byh659mzci1ad4x36z4362k";};
+hyphen-indonesian-58609={run="047j1835ny6l0ris6j5haw41m9id38r854mx384kfm48sa70bs9x";};
+hyphen-interlingua-58609={run="1gc3c86zbjv6j1kw353xwhzrqrmq41rbw2ah1xrl7rxvksmzmsnr";};
+hyphen-irish-58609={run="0kaf1as4jrs8kc7rr2jg3cjkxr0x4fxn88gqjxdjdac6xhlvg0w1";};
+hyphen-italian-58652={run="0xxlpfvcy4frkvxjgx85nz86z0n9cwhgsdfmhgzi66w8c9c2r9fs";};
+hyphen-kurmanji-58652={run="164q51fkcfslh1vdz19ilwjbrs0v96a4pn45d6n0cvv9vw6gi791";};
+hyphen-latin-58652={run="0l7lsp9igylrk4cvjff8lx8jk5biisss3wkcil26cca4hb1612aj";};
+hyphen-latvian-58652={run="1p5kaf7pb5qxj6h3bglgnsqx9rys35i02piswwvayf4bdmv9sqx7";};
+hyphen-lithuanian-58652={run="09a4636b77fc2rmgc2b4jxl174bjc4ji69xply0yls4b69727i1x";};
+hyphen-macedonian-58652={run="006fg0snc4h98fzdzwdhk6ibhyrvqhs502wn2c1dnizlry05fdv6";};
+hyphen-mongolian-58652={run="1mdgs6gcvzly6y2i5rlxajk2qxjac0m91ayqb079mz8yxwvmq6xp";};
+hyphen-norwegian-58609={run="1sp47h5syhcb12nik26iy6xs5dyxrj5a53vzr0scbc0s746qi4gw";};
+hyphen-occitan-58652={run="0v0yivzx0xl48isjlnxfzvlrx9gslg6srids1aywfqmybffmfw95";};
+hyphen-piedmontese-58652={run="04sva2d6dxaick0j30izd7z71vpw8q7xx0xvihcvcgb62gb5bc7a";};
+hyphen-polish-58609={run="121aayyqidlz8kprwkb4ydzqakw1m7a5ysz9zvw7clb65z5yd69i";};
+hyphen-portuguese-58609={run="06dxp3qddbh26wv1wpwml41vpbm4y6386vgd4xn2107shhbvhqpy";};
+hyphen-romanian-58652={run="1720vcpvmm086k0ndlbp0rkzmz7f7mnmb4wn67jm53357iamkchr";};
+hyphen-romansh-58652={run="0dxcw56bkl7ddqj9fahmghwsdkmi7ncr5j319hgcgnlbp1717rkc";};
+hyphen-russian-58609={run="0vlnw1xn92ncl31yh6i7k386n0hp6vx90lgb1kxs0a3zrxcds0wa";};
+hyphen-sanskrit-58652={run="1svx84qj9vr2s6pyxn8zz587ph37g615hi3g1m4q6glw9hgzsmkr";doc="1k6vsa9xakzwmjma4f2vm685cyb28rjjj5qmpb7l0fpqpmvndp1d";};
+hyphen-serbian-58609={run="1v0v281ws9dyivqd1nrb5ms106vlvmsrvka5jmnzl1wnpw34z92c";};
+hyphen-slovak-58609={run="1vn6i784fdz35dcbxdcv85886mbg8vbjvx0w6sx230gjjxs1s571";};
+hyphen-slovenian-58652={run="0fyzw8r6v07p04m44ky3n4vkkq1dmfkl58xyx65pcpj9399bdjy3";};
+hyphen-spanish-58652={run="17gq675kb397kqd87qg4x03wj2b5zkjy8ynzpq2h1flh1lf2zfwp";doc="13kmgf0lwxm54gs39lm8vgg2hhajvqwviql1chhv2l7d66mxrcrm";source="05r3c2m5xfs6yl52ms6kc95v3x82zbs4py9ip6xznshfs5xakb85";};
+hyphen-swedish-58652={run="19rdzs7w80gf7q2xdkp1z2zc2hgq7mklfkrfdwzch2i50zzfxy6l";};
+hyphen-thai-58652={run="0k35mjibmsrahiv71dbl82r9v978gwkm42xjnp3zb4kgc0h79kc8";};
+hyphen-turkish-58652={run="0zqizvrri9r9bldqds768bslyipqrs06hx96b0nn9k6wm1y8pvsf";source="0rjwv5b0jwnwhlp6ifzd6p8iid59zylp2wbfk5crfjnknrl48qn9";};
+hyphen-turkmen-58652={run="17bhr58r8sl4fw8w3gqsb8lvpw48vdijr16bdk7n6ma0183vd1bv";source="1wlqx8wb0wsqhdv823brc3i8w1vf4m4bkb2vg917j5dq8p8p71aw";};
+hyphen-ukrainian-58652={run="1jpi7argypmrx4yvc23dx777r157c7kxgwpsix7cjjihakmx1s6k";};
+hyphen-uppersorbian-58609={run="0rvb1k16rs9hvb9xgf3yv79mh2gkndvk85blmjjsq49awwgkd8y5";};
+hyphen-welsh-58652={run="1klj6ir4b918cx96jd772ps9fl2fljh8kwkakdwaqqi8szzr65d5";};
+hyphenat-15878={run="0ckfvjxdv4rb8156x2vmwl15mk9057i2lyg9xhqkmvqh1ani4lc4";doc="1lzpdz05dw5m8ljxf5f846m1x4nv5yrqbg3sixf7dgyhsmpfxnls";source="1ddwv26nfl4jwz8vxs4fwc9qw8gds1sg275g2bg9ci8dfflk16k7";};
+hyphenex-57387={run="08f915yqpx6qhc2dzbicbv9cijzpgcl4jpifydqcc0x68y51qrzi";source="0lqn354bskaa6g0bn9g1r3lbb1hj9si5n1ki38awayzp1yj8a3q0";};
+hyplain-15878={run="1kpaxdya6m7x4dmrxqzrs6k6agxsg8lcg5yqqdlips887lf609cl";doc="1q5dh42gpv4n9ps0yqyhcscjn47qz4zf35jlg56xgq2w5229k742";};
+ibarra-66892={run="1ichmsdkjs71f5yx5cphh08dk07gmr7mg7n0v2p4sg4fh3dbxjv9";doc="168k2sx4shkx8h4l5jp3i940sp2bd9f4if2pjk6ilmc832dbh25v";};
+ibrackets-67736={run="1cd32hk5wl2xzahk9xsrnmv8l5r05hqi9gz64d6k0lzard4p494c";doc="06ifqb5k7z08mzd8kkrkj3r37yfwgy5fw4zygd0an5470pk13zam";source="1axxyjfhkany1k2c6rzsyqilrq15809fd73r9hv0qmpbgca7m3m3";};
+ibycus-babel-15878={run="0az75laq5fxnvn12348c3985148isz4n7nv6hd0d8amanm80h779";doc="1256n1qa6zpq509rk02llcixw3qh3sgi9f649pv1hjk6xdy7nxfl";source="08x3knpkwifgi2zxv78bnfn10ix7l6rf5nhfqi6w5xck09l7fiaj";};
+ibygrk-15878={run="0krpzjn96r70z8rwsq52j0v1x7ppd766ngvf6xhny2kd7mshl9ka";doc="0prn5b6cjc9ljxdnd1ckfgzqwlc5vv4w435zvyz75r3f1dvbhh9m";};
+icite-67201={run="1aszs6kbmwx7k322a2yzk4l8d2gdb84aq7f9sk4bpiljgi9gpclr";doc="0bc1r733c6g8y8r2kam7in3p3cb9y8frph85s26kcgdxqw7j069i";source="0l3gx6sm1inyzyb6z2rb1zrhrnyg0i3xim0dn80360fkxxsz7739";};
+icsv-15878={run="0gv7wrghqivfm8yb3nkm6r8jnvx7klbhr1nbp27cjaliz70aapa4";doc="0dlsqkdmx4nhgs15hhn0nw6vk6h3q3hhhwdymy8nnxraph2mvyl4";source="1fh1znhlacpci7v23aj9zdczhc87sg3l0s1gsvrbgznpadgbzbim";};
+identkey-61719={run="1vs6sr25ybmrfkg5v3m021hlhw9x3gpynh89q12a5pl2ka094hn1";doc="0r33gzfwrj4j8a2i8kdddbhgljf3hz1b7cjfxgmv5gdqmmjywnx2";};
+idxcmds-54554={run="179mvb95a1cxkn7ncgs7xwhh04d36s9nb5jjxvaszcfkp9rnlkcg";doc="1ym6yi4cpw9flz4si6blg5bfj85sf0p3y6nipc886ixkwiyvsgm7";};
+idxlayout-25821={run="1y1vzyb1l5b8q3qqs62zfiw7vfd9c1pdha9z4nm5xpsar1nk69qx";doc="11qiyzcj4zi8kd9h2k2jhg8i8rzfwdam9rhr7cmvbxqsqirf0fp2";source="0fkpj4gn06wkq3saprsb3gm7myj04yll4spz3j7yi28yniv4cr5c";};
+ieeeconf-59665={run="1qmpb96jx5zxql57bh5ppzfzfrgamnxn1nsqpq1bsr0xf21zr6xl";doc="1jhsfs770lhq34xxdx6ak9mbpmamfz696kxy6dhvfadzkn3v1ls5";source="1r7a5wd0hqhjh7dkbvm0z1fiih4f9pxbx6y7qmcy1qdvlm819jmd";};
+ieeepes-17359={run="0nipchw9hdlc7am3n052bszilwj192pfcnc9p5alqnffrd8c4rdj";doc="0ff8xa7w5dmp356klm3lfr9dnfplxjqpq7aiczp6xj092vmjrhdi";};
+ieeetran-59672={run="09j24j6kpgjx58yghh902bdpkns025v9av6ym2xwslmv1ya31pka";doc="0y3bw20f1sa7dacqwrwc43masap5sz23vna8bbkf4p74rdgl3bkn";};
+ieejtran-65641={run="07y254kl5wanv7d2jyzhwlf5z6n542217f5n7gdyrm4jryzhb0ly";doc="1l5cyqlsamkn3yjdia1zbv7lianq8jcjl83pkywimxnybw0kvdbl";};
+ietfbibs-41332={doc="18ypa96z1gclq4amka28sv26pm7lycak68zf4b3sf1bx4ldnzmxq";};
+iexec-69230={run="0fy58y8g2l6p1xziajsf5g1pvs8nplj5ml5jwakl7czjvmxylsaa";doc="07r3jc1wsfkbl0himc4ihzshj3n3hlmyb3js1885n279n6hn63vq";source="1afja904bpr4a753khpd4vhafw5gyspmzl9rj79q31pnqjhnacqg";};
+ifallfalse-60027={run="0pn37mzlkpswyykciwgfkw981098gccqmp7wllffr39qxhcj6gdl";doc="1583p9f3lv7kkjygqv368ag70jq2b184j47v32aqpgnwlmyn55jr";source="11636chvmy2icfq6f7mvdq0fpcn36yl15g9ffpp0flqdq7c8nd14";};
+iffont-38823={run="1a4zx0mysk6i7awvcjv2y1yid1k160icrkqkvw34qsgs35qnqbbq";doc="1iqchl5nra5ldmv5ddpwjcm84whpsxym34vphj2zxvzl0hqwrc2n";source="1x187pafzgg7h2vvy5dfc44y37q45lkzqfkxh8b52pysxxl23014";};
+ifmslide-20727={run="1n4dmmslpsx9fv9wqiipcg04lasym2fbgsqkvvffqmx5rszgdpha";doc="0n7hsymjs1zfjc5gbn26z2wdl5qicc7pd251s0h4qnfigq3nhr08";};
+ifmtarg-47544={run="0wxhdmd2h7rs3fck9yq1g48kyd33m7xzz3g7ixg046azai8f90m0";doc="0h8li5c5lxccf2a325p4vg7xgalzwryk8czdzcf637sbbkfhd53d";source="1yh0c42glrw5cgqk22h8lrc12lriz436wz9vrc4145gjcxm6p09s";};
+ifnextok-23379={run="0sf9dmz303pbxfi24z6fb1wxia89qaf4svgp4sbpi1yl3gkxwrmj";doc="11r5zrs467h3rv5j8c7b5iav19v9hbcxbspgfdbd061g871xxd5y";source="047pc422qhh9d80rjgmjgmn5xsapf9azvqrl0cjn28qw4m5ccs12";};
+ifoddpage-64967={run="14gi24l4m9zmyhckjq3j1svr9858rm2idr1wwjwmp561wp7vr6yz";doc="0gv1j0swzc4imahk9s96nga1l42qzc0xkznas0jzkbi27s2lik4x";source="0wz7iaxf26qz1v8sc0kbrz1wy0kzd4zbd0qiscdhmhmw2xr077zf";};
+ifplatform-45533={run="0abhpfw3w1mvpg52xaw3cngl55sszk5ji9a38yab8vhknh3d3jby";doc="1b41nzn666askfc1kkm1lwf05ggf2ml8gz3rrki4yw6ch52sl2sc";source="0g0qvbvv4j87rxps9yypair00z6il5hfjczkrmf4fkycw714sdqa";};
+ifptex-66803={run="0yw0dphc2pdx2jrm5khzrnp6rg3fbcfc8z6ppwmyid8iqxszpdg3";doc="1mbdhxl2fgbwjbsk8jqk3709bv8k3whqagls1vqm5386lbcycvkv";};
+ifsym-24868={run="1bs3974l1jdv0b2wwa94861hnb05kb69bsyhvsgh6k9xgmgwfrla";doc="11k9jfqrfmshwpmni6bm0324zj7c939k6shvi2l69k4w0kx6phlb";};
+iftex-61910={run="0dzpfyc2ld4kbdwj457fzmf733792gz1z7n7hpbn6z7npnkg6i8s";doc="07wvwfxwv641lmk0p1gplv7rsvab87v9fgzamizqvihf2ys506q2";};
+ifthenx-25819={run="0bp087nfq5hb3a60ayprbz621nmk0acisizkw5i25n4kryi6vc63";doc="1hzz8s2xlz2pij81cfgjad8yaamv8l4iaripj7bbifkq7gy38afj";};
+ifxptex-46153={run="1wb1laq1nn02klvjgwvjgansi4anmjaik04fl0lylr7x5996qa9k";doc="0bh8bqly3zzzzgs21cb51a06023l9xfig5qjfzrlyvfqms7wj19z";};
+iitem-29613={run="1sdsc28fw1lrr72s4wwgwk0zxk9720ll5xbvap2na4i3lp4vjghf";doc="0grgh5bslsl67ygvz2cd3xb9adn3w4amhpkkxnh035vkld91fxh8";source="1fk3c5rc8ylf9jg5id4jnm1gjnrvafiivhr0lpfws4ddr2pmir06";};
+ijmart-30958={run="1j4i7f745nk80nghnpajkib2y6ddrzg16h0gn5cd215pibjaml6c";doc="01ds6p3byc9j5sgjhh7yhbpv36idlp5g9afsqryvhfrwy3r9900g";source="18saabw9v60rly8qp8vcgj84rjz88gbz4g2sda4i15lsjpmz4dis";};
+ijqc-15878={run="0h67131gbqr971hln3imf3dljh5jaqmdp23hb60zxnlxllf6msjs";doc="0l0pvaiqgyxk5fv2carjhvp6f45clrnah5sla7rdslf134d8ciza";};
+ijsra-44886={run="09dszs5ha929aws50zq2k7kia529bxfczs6j8bi0fvjnmf6kx3yy";doc="0lb3rlqsscmnqn65l1aq5x5ismsplgbm1ks1pn6cs2sxdjy2s0ly";};
+imac-17347={run="1v7zpbzgxz42b6zv0y3d2cmzzsal5mmzd3lb1nk779i82dhs6pi1";doc="0s64w9wkfmrbvkd8mij3y0asrkzcg2k58xjl36vfvcf07aw5wcr6";};
+image-gallery-15878={run="097brbh3xf2xi4s151iy8g6abnf0ba4yar78jz607f9dfni95i8c";doc="0f8a7jzj6w25al9c13mxd04bg2c701s0ynsd1rvnqdik6d98s0l0";};
+imakeidx-42287={run="0w0q18bxpbsqrj97309b9lyfcf4has5ldjvs0dwn45lciav8a7rr";doc="0h2wqdg6navbpzjq38ks2b9lz3hkmgi7v1y8ihbbv3aisyvp5r93";source="0l7q94z5a3lsy4kh7vxyr6mmywc43p681p1vjry1f9vi0s6ljwpy";};
+imfellenglish-64568={run="0rvdfcyy2f4w5dnxp396gr5516q76lyq5vshwlai26pf8f9ffd9v";doc="0mycayxx0yi5xrkgp48dfcd0vp8cw5jhqgdhwm4kkbpqckbq6kpy";};
+impatient-54080={doc="03cjl3lg7k7p4h8drw7vcbw6ymgmm2clv6sgfs3hdixs8dmab1b2";};
+impatient-cn-54080={doc="1pc20pb0las3slam1d9hmqigipmr6r98wwif12m33mm750vmq65i";};
+impatient-fr-54080={doc="1qwdllmi0ci304smf4yl6g8ah083jrch9clkyav7r5qsxnhwxbxh";};
+impnattypo-50227={run="0kmyjdasybcvr77jrirp3s1i8jwvhk7j04wz6blawihidz55myvq";doc="1cgk3wk3flpmlw3wa4sg1s9ry6bz9vjanzw8kpyhj3d8yl7cnzbn";source="0qc5wz5a4rgvrzv361gq3i6h4hp3v176klgn6fhiwshk84zqccn4";};
+import-54683={run="0if5vrbx6456ydarw57p1jpkcj2d7csmiffgll6fgxf2kllqga6v";doc="11hi1yk9xhqks4i3rhc4s8bbaakxbbmddb7j5sym780y45qm79c3";};
+imsproc-29803={run="0pkhmc596xrmfwp90w7brrzbjn5rzn70kdpnjlxbyf2j85dr7gz3";doc="04qasn12qqg69k6isnv2qjpcnfs1nd27vvdpqqdb23z97k38x2xn";};
+imtekda-17667={run="1hhxwaykslzmf70lvmrmpnn2kq3xa114lyvazgfg9sccc990gnlf";doc="0lzkiirxgvl2m0vnqpspr25qk1wyq1bs2sl3zi6704q3fvp6sqbq";source="19h57cyxs47awil222i5svqgwdmw9mrm16wja9f1j980nzzaq7wn";};
+incgraph-60810={run="04kzj381v6lj9a2hjgkrsjvs4h5hw6mn80cfmcp6y8d753ibaail";doc="0vi27zvbw8pwh9krr8zwh90m1fsx6wqsqkch8c9ggjy03518b5zs";};
+includernw-47557={run="1w51v1v8x7wzibcy40ss7ldra83wbil8w1p978yvs5kzbky3vw2f";doc="1zl5fsgzb7nm1wi6ddc3cngqj3apmjwn1wkmsz785nss56vk9f7w";};
+inconsolata-54512={run="1mbf4m3ll3r4nhxnmd3ridq7kdqlcjcm3g2q2s6qxgn4b6j9ikvn";doc="1rh7kisvs33v91r19lnqgma705dc3gari0g153ws8bd1px3ivsdm";};
+inconsolata-nerd-font-69061={run="1778fg0vpaf7ccqs38x9k8d4fsnawqvqpchcjb5bqjzg8mk0mvs0";doc="0ydzsljbbajpi08dy4lyqld82sqpyv17vh1pp1nwp6hrn6cml3q7";source="1jndmhsr8y15b630wi7qshn1kjq9q2nfkvrn9gk0awqzjwl56m6d";};
+index-24099={run="0lx5jl7nckbn0brsijlq78mm0gjshf8m1dqjhgl0l59qi56x5f4x";doc="117h2g30zbw5g6x3xlmpgq0k4fqixh0l8ah7350q1sxvddxfcc24";source="06acw1yb5z4f887p44l9afk78kpnjv9djmbwj55bac23ml2k3ddr";};
+indextools-68555={run="1f1r8k0psa7g9pk6kkgvyi9dnywsc4n34svfq2pj8b1gmp9918kr";doc="1xrlfkg43x4g66ip24spnq7vr915z0q7zdkqmi8g5zls8y81jg1c";source="056vrs54jnjnn3c2kvxfhhxf5ms8cpb004bhd8f9whb6c1hdjqpy";};
+infwarerr-53023={run="19nlrbfmqbkjrrx9x75s9nd6crg1lzimb2fr3hfblaivj6lx8p4r";doc="0p1s0v6p7ygkvz5f3vgarcrl85clfrj3ivzrka62djqyzn4bb3yb";source="1x2mkqyx7gz0bz31na6mcdyrlj11mxpjlzc6gb9pk51sdqjj0bbv";};
+initials-54080={run="13d5pvc2q6xc0i8nbjpifn5xyn7wzln7gng98nnpjxhk5y67bcz9";doc="0676gq5dx4pqs6c0z7i48gi53mlapplmms8s66qwpdq1aksswdcq";};
+inkpaper-54080={run="10989ja1vy9ca451gc0v0mrkqi25dwv4fdvw9y4k6z26g7902hap";doc="1dmvkq44kyxd5y4l2kc9wvgrhgk4kkfw0qfqzi2faf9xd6jssrhk";};
+inline-images-61719={run="1nq64ymrmfiw19bcbb25gmll36xbv58ynzvv140089pw7xn5x7bm";doc="1rjppia3m0kvf433ansxhmwvii70i4k53iqk9jphhk2xv2gfd16v";};
+inlinebib-22018={run="0v37ifnjpvsrcbrjd57yk3qqq195jqvr1cgvfz2fsrjrd2ima822";doc="0w4j64dxh11fysqpkldksv2qg816shz0dj16jqgbksxkjsig1i16";};
+inlinedef-15878={run="0k6190v8lv2l96qpmh3pkblhwn6camcq83w75rz09517bnysm4yz";doc="0gz9m7fwcdxs6q5a33v7n32x5jr4hbxsy4j2shwv39j1j2amr1vl";source="007648wrb4ar04g0851yw663cvlmdyifidp854y87yzh536hfwi1";};
+inlinelabel-63853={run="05qv0j8gvdqsdc0bg51n7mskbx88gv2yny1zffr409x8pvccnhlj";doc="09jnbnyc5sy1grvyjxnlrr3pg91ispqd18mfdk9zj8m6lwy4gh1l";};
+innerscript-68776={run="074xa8nfa50sdz3hqvvlrmambjnfg9yai73xx9bmzc7mrxsdkxc3";doc="11nli4g0q319k4whryc4g9mzqjsqz43ryx796kvhb3kw8v7z0rcc";source="1zam1pw4jjx2kcps4rdvi0rdrwz37xb29wjcbm5ir4z0lx4qq4fa";};
+inputenx-52986={run="0jjf29lj8ha99r2x0vz85swkr2aq6v2jwis27irsi79syfq8bpbc";doc="1kkblvi4dhfxsij5lmbdvmnapskvd5yahha5im2nlllh8crypwv5";source="1681djxj8c43i93ip864bi1p1fpn2dngkvh18zs0234ls0gkwiy1";};
+inputnormalization-59850={run="017dxyy2lykvcsigpq5vfklb2gqg1aprk0xk21sxa8bdsn3hd2gg";doc="13yvyh5g4a1k6bcqwgmgspp8gkgzvgcx5f0wy5ajp577cxsk5ir5";source="0wz9hw5qs3i3iah63fqhkdcijhv30k828a2a19268am4803m1pxh";};
+inputtrc-28019={run="1qy90zwai5ciajsiph6sgmzmfi16qgvx389hvxsfi28wccpm5bh3";doc="0fcxac4jsvhnc85p9nwpp44ij0yq4q1lxlw42dzhg88fdkl57srg";source="0b6kl9a6ilv0i5xnlcfjgia40ynl28dbz1rvcvak3637fva07ghk";};
+inriafonts-54512={run="0kbf9rvrml10qk5pckz21ag217wimqhdxjfk35ll0a17hc9yzj68";doc="1hbhfhmnjya1cmj1wzhvbny7maw9m2dr7sv74g2ka6gnl1n4rx1x";};
+insbox-34299={run="0ylnp3l21zx4y1bwrr33v8d79vlgz5frna9dkg62gz1bhjbw7f7i";doc="07iw7py0p0jfq5np89dx9fdvia3yk5mi0py77xrgb8v4gx7k5g3k";};
+install-latex-guide-zh-cn-69264={doc="0hs9pqhbf5pkdk3a29xnicj7i8zxgf3vazf2mmm4z6fc4b0kfpjk";};
+installfont-31205={run="0lszqj128c3f4wbcrvzzlvj25jl5rm0n5qfj8rsn65ycxvymbf91";doc="15x8jzcd7bwvbjid0hr56h7dw39n2rg6wbfz4b02y7shp1pn7hgp";};
+intcalc-53168={run="0llrnayqwdqxi91yh7panbbiljina3bynv2hxhi6sssaw3pyd92l";doc="1vav25plm639410p59bi7bsihsyys9yaddz0bcawxn72zi9b96r4";source="059pqs3f821javya7brxvl9v2mifdyw1vg18hr1zgzhj7bmlxh14";};
+inter-68966={run="0f7s4mfj1phliv0dddkhsf4gpzi6xmyxhwv26bsvgvs8saf7qsha";doc="1i12ppl2fmjv4nxvslqqrn4ygrvmf9aa1lf5wlsrwn238343nkps";};
+interactiveworkbook-15878={run="0dibc16gdam4yxil37y2zsz4cnfiq2grm6qqj512nng4zqnwcdj0";doc="0nh4zm37xipvmv5h6yxy1ir2gkjy23h22j8dnz7m04w021sgx7i2";};
+interchar-36312={run="040zhi6rq7l8s04zcq2vfxricbvakkxnx0bzihbj1ss21pmyrv82";doc="18lpyq26zc9b2ypcb98k578wyg2fp1fllsfyrp67b4v9lnz1m7q6";};
+interfaces-21474={run="1d2sg377lxrwv0w0zdhxdjsnb8sbkzadpp29h4jcm7v6qpirs1wj";doc="00dmb0jq7vvf7xfppwmw1pps6453rv438qkpv5qhlamqlvx2b28h";source="0s5gfwv1izv3y3z3lmfbxdw06830lzy85f7vza4i8zcdwf775pl3";};
+interpreter-27232={run="1an61a9gdja2h19m13i4024d4x4f741x4yxk983phl97nfadv900";doc="1vgdgriiwv3lbdwp72pdc7yz5f702xxykqdp4ih1ssx1sl9pcw05";};
+interval-50265={run="04rj730lnkgj4xfm3mldyyf6bb6rr1f3dhms0rnaiq2pzv77cqyw";doc="01ngbaw0lbh4dn8kk1vnv49isd7wk8gjh2qvzw6x9yk9nl46gzla";};
+intopdf-63987={run="0nfjwarkzi972vqn20wz5ava3hq87bpl2kvfig91ybz3chd1111c";doc="1sjlbdrn9ajbkl18lqx8lmxdlb0dyh7cjvj0vizhnsjgpwp5f0dp";source="1cz2y4x17smkjp6b7g6r3qg3whdgcj4cla315wfp2z9nzpgmy7fs";};
+intro-scientific-15878={doc="0bzgi3zg0lm6zwjnac90ihaqwcvhindfdphjijv7mh11ii0qxlmf";};
+inversepath-15878={run="08xivnvbyhaihb24w14b908927fr73kbk66x82nv9j332lpmfgmd";doc="097fyhn6dj9d8hq26xads2s7vz7hvixwl27psqrqqvhdlq3bvj7n";source="09d3dzckxrg9vdxh84nx3xzwj3rfarvf0bpda4qib179bgnqrf7d";};
+invoice-48359={run="0z2ixjxicphaya7244mi0gdnxnv3qawyxpa1kwv6s0r8li4604k0";doc="0ki54z1rlb9xwvsgd2bxv2sb135cc6zh44kpww0mx76vcky4az1r";};
+invoice-class-49749={run="05vbh1iclf9gj6nzradfvnqa7yp7r5c3ccahg3j7qrdkkb0xj8ig";doc="0myl8pvvfzd5jrlva1cxkps9g6jr0lpfw79wr3ghv2idz8ba85x0";};
+invoice2-67327={run="0646sb8da53x6aybbfijk35cibay4pnryq1xq2nzikdsf8i5x0x1";doc="057a73iw33rpsgpxcg13jlpcfmcmsq68jdz0fa3dhz964nf2xkpz";source="1z4lilb3h8gp64lgw7xbcnqfjf0lmzv760ggdjhmh5ibdc4ic58l";};
+iodhbwm-57773={run="1d18fjqgingshxvsawkz9idybfz5fdzcd41qxk5hpqms7zcjymi1";doc="0iqw7insxma8pmj5v12zjgs72j60z99g7w5kfkb1h6biwlx33s5c";};
+ionumbers-33457={run="0pfs5064cya5i6h3bcypsm8fy1bas542kpy742gmbd4rdw8cbxgr";doc="1sks9qdrl5kivcgn9mgrv3f2gfifmp3icc4wjha4n1va1fqcqcma";source="1nimrr8b242h11nfxi9si1pg0wc6c0aaa0dl23hjjci89n8y89aq";};
+iopart-num-15878={run="1fx5sw6xzsamlrnm7nl965xrgmgffq85kkxr7ayka1w578p6f8jz";doc="06hrw0c3arhssabm3l6fhb1kh8bg4vp5hpafqlbyz064a60m1p9y";};
+ipaex-61719={run="12rd8b6kbnn2hvsimmfirfq3nj436h2ckg5129qxnfnqfqr9pkl6";doc="1g2z2ichh3wdjmn9jjd48jic1b2xw5sb8sksqv0hm043hk5makaw";};
+ipaex-type1-47700={run="094z08ygcklbk7nzklfmdz3lfmicrr40i0wzxmia93v1vpsjb4gh";doc="0946rj1bh2hi0779ss6d003wi4xcb79i9p432jkry07xkr3fpy7d";};
+ipsum-68861={run="02df1xdzvxv5g83bw493kh01vqbq1nf2ls5f1z6j53f116k8k154";doc="0dsq0h7hgm90lf5a2mmqgf9m002vng1cgfz6y21c85ld70ds0vpk";};
+iran-bibtex-69347={run="0b6janv0n9shyg7plykvb1dncxkfynrq6hzn6bgai2n1565c10dv";doc="0pwf352y5yz01y21w2vgz2z3j1k9jkssmk88gf4mcji8hkj8xrkn";};
+is-bst-52623={run="1acvwcg568iv9lskld9hjnyvqvlsmgnbg2akrd59kmh8mmbkydk9";doc="1hlprbjkamq1w3f1n2dzayy9v14kxj8f1nr6d3z99c7v7kg19m75";};
+iscram-45801={run="0h6pciksfrabg7wgxsgzciw22cp6gmz9cb3ifdsqb4n4qk9fga6m";doc="1p0p4w7pkyc9xp5af1afmsibbbrylcfrdcbn16adscw8y6wmds05";};
+iso-15878={run="04ifwh4vn074cnibyafzq59zjlnlmdfyq03mqwk44r1mgmizizdi";doc="1bnh34708psjpbhcddv87axjhxiyfjic0mamlpn3z58qcm0jb2pz";source="0gaxih730r70xgy84vbqz1fqbdr1w9fg9d1hszp0kqvqaypfmcyg";};
+iso10303-15878={run="14wjjp2iwb7l8m01cinmpm3g9hk1rpjx4a0rc41y614ah5bmi4ry";doc="12m0rri6l538iyphsh2abcvllckg566aj1487sa9jc4m56armvj7";source="1nnfz5r5hk0rf1gvwrgp4m7jb5lln1cf9pnb46x9l9hyiagq5din";};
+isodate-16613={run="0xw8356im72iqi67nspwkhafrwl46gb3i41yapnj0hqb672gk4lj";doc="06m8ic0nsiy5bsymzfhpia9i47kbpwqmnbrvmsp44mw5g2ccjk41";source="14b1ymqd6qbcksnim642py5qs5n6g2sy207apkx9mnhhbqa15an8";};
+isodoc-59709={run="17fqpqlh12khnxyknah5dqc1xhbz2bk3m6jw8jwhpxxzb20njd4m";doc="1x6k1rs9k27x9xsb9i5a9m1cpx3xfwiyf4iq8wxybvgr5pli7f63";source="0wmwfqhrn2nsj5r9n0bvb2cl863777g7dsqf0ciyqq8l5lngx8wl";};
+isomath-27654={run="1bzw4l364z6avihhihiprbaslnn49v1rrllf5cj0cg35r3jppz3c";doc="1d77wksfk5pidb24cjgak0mv1k09dqmszksrv4q997iwxkwckkna";};
+isonums-17362={run="0nqzapahfvqg59zxrgjiyywkh8zb8mz9gdc2733r78rxnz81m1ba";doc="1axq0acxk6qhq42ayr0zjs3356ww3ryidvj2wii2c00isw0qip1w";};
+isopt-45509={run="03skmw4hmib197p3cfbhf3mbhq5hrjavwinwc22drqmca370v305";doc="0jxwzfysw4qsfd1694grnzs2jfqcbhm40w1xlgcsrq2ylgcjhr8q";};
+isorot-15878={run="19x89d5fvjpn66y8ma1h24dwapw2x6a4nxbw4ixp7xqkycyhy0wg";doc="0jrglpxxks1fbwgvmx0w3fjcnsfbf805jv95kawvgz1ix3mm71v3";source="0rfc2jdd4f5yds516lr9m28izg3lbf6wwvpsh9hrl466dakgdayz";};
+isosafety-68801={run="01csapgs6danbh1lr2k1pbz2sbmnj5fwllvb17jnddsjnv6xs4nw";doc="0li7197m1pqgv309fv6nii6sl4ppkcnxqnzgghrv1vkvb5ps4n41";source="05sc88xg477z50rcvg4pjh2p4jnfi4zkjkyv1w6phk7jjqh0hvpx";};
+isotope-23711={run="066b5jw98ynyc15jigxc1idp79i89hwrq19rdizzx90s6xfnxlgn";doc="00w5bxh4dkph9d4z0x8h6akcv1i2a3b5vfr4xbvq1n8k4i8ss7jb";source="0x8vrmprpgpgbxp3n886yajdd9mv27r9shkyz9mp1bd4zakdgc8f";};
+isphysicalmath-69343={run="0550hx1ybxh8196q51zc1966jpdbrb0zprrzg4ss8x9yxkan13j9";doc="039miqrgiymmsc561mnycda229l8r3g4cz629xkndv0rxz3civb5";source="00l19fbwvpv0xrzjh0chqp73k6cvgj2bidalr3c1n1g21zai6c22";};
+issuulinks-25742={run="07rpm9kcfj3dxsax8kp5r5mvrgg1c5yrpbiirsk44ybjjkhhjscy";doc="0qlz8y0sszp1jsnbbgaj9h2zcz1yqk827pwzccfi4wdj4rcpvvam";source="051b05k40zs5amjxnqav6ibdvj64wfhcf16a2hlkaf5kpmpkmh54";};
+istgame-62946={run="0ym2l6nf8prgwg6sqfjlr6mmhv53q3aksfznvgy7ypiggg18rq5m";doc="0ggkbzc4xnmx5h18af4h7zhzp1kcgfiqdl28qhrhhcm1d6vc1x2z";};
+itnumpar-15878={run="09cv6x74vs8m10fhk5ka6i1c6gzbs5qaqbk7i7mf2zsdg5w447r4";doc="14273y8zl42gkqm915271n15pc6srsjvfbnc3jhp5xcjcqnq3yfk";source="1wg714a0ipv9g81wgmjdrm4l4yar0z2nqxr5khiwihk9nrg26yc2";};
+iwona-19611={run="1gf8kmpmp2cjz5sg0lx8j0kr67a5xshjkghpiy70jnaz7k8fbrgb";doc="1skk4p2pblh8h37rz2pjx18h8pgbagvr9w8h9d83299byvjggpi3";};
+iwonamath-68144={run="10nr9phqmjvbg9hg7fz11dap8ncnxx0pbpbz56pna5kj37znmh7a";doc="0550vjbv8b0z4v0zwgkiw68fg02aj8nznfsf0qpf3isqyl9d94cy";source="11f6m9969lcvp3cw2gbdv4gg4ggisb3c9p090v7nzzyadx4i2kcy";};
+jablantile-16364={run="07f298cfha42q2d12xihaqkga2iv1id2wa5ph8a61z6ckhchzz69";doc="1lp90rbrji8nld0wzry2nn0m2zb2nrqnqyy85p9sh9rmrplhj8f5";};
+jacow-63060={run="1gqjsdzfspnpps2p5qmxbgrkc8bxihmag0w2xrvm26afmh376djf";doc="0p6xpz5n961hyfzjf7crgciig5rl95wkylikmr6gb95bskdcybkg";};
+jadetex-67493={run="0gsmhql8p421dyyv1b021sv0hsnl2y4m8wj3vkcabhpiql76yfyf";doc="18ljn0p607hm9655v6z6xs2apkai20l2mlxwyb2asqa72s6x79yb";source="0vrqpjn64qlyszf7d2vwkbd1y2lj5lld6w9zz1jqz1f0arhq33lj";};
+jamtimes-20408={run="1sn588j6v6gxfgk31r861s7cpfk2ir7ip75hm31rxi8s8hv8s7s7";doc="1n91f0b0bjwbkm1rq5w2vwy6wlaizlp7qb8pxm2wn08b5a825hvs";};
+japanese-mathformulas-64678={run="0x9k23g95j4wqf02ibj4zpfgxa3vlhgckax80lwm5flvr34bbgdv";doc="1iy8q3906bl7j2ciw8l3162pjw067qkbkdadj9v727x3lg29aay2";};
+japanese-otf-68492={run="1zwjissgwzkjrmh82xixax57wf1ycz239yl9wmcsnn3wcz04jg89";doc="1xzwpyzw3f13ij6xnhdhmxxafiwqmbjbyvv6c6cfbzdw5cpkvayy";source="1cs0daf9dyx5z397lak5qmanwvkbh49nflfaq6ikiqhm22hg3w1r";};
+jbact-52717={run="0z0x6jrxaayp3w441r1zwlqirvv23g0b8h9xgy6r3ppi71glzqvp";};
+jeuxcartes-68266={run="1d7izhik03gs35xl4vran8adv5xr4vasc7nh55h9ya559v59xm2v";doc="02jvs63xi0qhcdnrm1m93cjj29i0cp07hw52m3143iadvargpmv6";};
+jfmutil-60987={run="0ygrcnm9d0dkrcz5cx86j80rdqwi1j9zs28b1bjnfb4vkd5r0fs0";doc="1vz9wav5ggsz9gkkyflywsnzjsw0p5paiw9wfx7x3ha2lgwv7agk";};
+jieeetran-65642={run="07b126wich0dkvc7f581566rpn17qbnzx02hfgbw1rjkqnq3svsd";doc="0r8fsqx2nqi1jw9r30h6w3dqafl8mwhih9vxpibgfnp2lfy01a5m";};
+jigsaw-66009={run="0h5g4vrbwpbxbw9dwscw2bqg7sanh0a30bbhw48ff9ic94bs2407";doc="0a36l6s7wp30h5xy64sj3gj716dc43mlbyy3px5wv7n973f5km51";};
+jkmath-47109={run="00nh8cf002lysvn6qiyy5mcs2n2z5ppr0x5vp1akbz0wwhkhw9h8";doc="07n2xxfwk0krbiaphfkkfnc8mgc8iqmmmdiz0cj6s7688rlwij0h";};
+jknapltx-19440={run="1jw24izfsw3l8bn27qci3mblmhpkal9wcldhjll7h84fgjb9q396";doc="0m3blfj4ninra6zn501x17q6b2qzckzcavgihgqmk9q51yibd5aw";};
+jlabels-24858={run="03fpym9q84g1b0pns6sdsb4jx78aq7sclr5fkm05ckvkk4v3wmsj";doc="09qa8y6axg9pvma507b9w63dwd2jrxnmd64f5rfd7wpznamhbc0w";};
+jlreq-67400={run="0sjgbc6x16psaa50bfzwq1fr6vlmgjwai5qzmf8jcyask21j9jxs";doc="1y5yajzvsy9lvy79q0ma9j48qbmif0nx9wpmi2p2nysfzafrlsy8";source="16mjb1rnr4vnc14na947aivcap1wr33bhb3w82y5nj5x4vfpycrg";};
+jlreq-deluxe-66115={run="1gmbc65qilf6im9xl26440kmvyn56ywc9r5sjbpfd4aknfpwsx55";doc="1nka16c0wyh7zqvqdn836ygxg642vzhsb3kpzwr2j3xkg4kmklsv";};
+jmb-52718={run="1a5nz825jppq3pl1263w2sbm0a48kmmndppfpp7vi69n5j2248dy";};
+jmlr-61957={run="1vliagbbyy5nzfs8pkl71gy0zvjzgqibrh7c480aampwf5qi1gq8";doc="0mv7yxa1rn0qaz3qkzxh705ia27gqrjzpcqi5gpp340hvi8hm09g";source="15p4dsbn25gpsm7avswx8vw3ljfvwmwbp91qlzm4cabsb54kbnhs";};
+jmn-45751={run="0iq5ky3llx50smw80lpylv11jmqc51m5yrhlslz3sakmgdqgg1yi";};
+jmsdelim-62630={run="1087jag55rnf02r9s5v7brfqhqncibq1xr0xjq680lvb62f65ln1";doc="12k6m7i81d6sblgqijpizssnpkghq5snf6bq44lkxv1l39flzjrr";source="06kp4zsdzi2m26h9m99x6kqc0lfic96cidzb63mvmdfqcf2plba9";};
+jneurosci-17346={run="0ywl1nlysc5fk7v5cdmy5g5hylz4ll20nnqxsvymsxnayjm4civ7";doc="0a8almw0x4b7v3dsdi9cjv8vzg518fl90zyyxn24p614w3zr01sj";};
+jnuexam-69161={run="0w1jrrfbaa7wiffic6r2s6kr79zva1l9lkl5dyq9lmwsrkh1mn8j";doc="0x33wpwxriiirmsqk0a6jd8lm73vybcz1wn3lg29bywpa5h7hgl2";};
+jobname-suffix-64797={run="095881x3s3hyj6kzhymnzp8xcw89c94qrz5654kzs9mqc2iy28ss";doc="0ng9dzmx53p525c0kppl33i13xwdsamv0d6k1j8plfvjy86z3ay3";};
+joinbox-68003={run="0xbbbpw0yvm0hrll0yxcg46bd8gl77nb63lljk1pfak64b055clw";doc="1mr5h8ydiv0rh3a9s61ksmbvq9kd3wjaa4zx2hbg501dwmyx42li";};
+josefin-64569={run="1f93l4f6gvsnnzr0f3gpvl9y9i034rhxcdz8c282bn5jdzg93j7r";doc="04sva62hzfphzcmk4jhmp4yiahg7kzjcskviq31lhy83d3600aa2";};
+jourcl-65290={run="0skrm2rsr2y7q3mgzy8wcia8n0r2ixhdd222i0vc2figi9ynbd99";doc="0x6jxx8ckf9rmg6qidypqjy7kpi0l30npb96py62imyx4cfypr8x";};
+jourrr-68556={run="1gbbnv6x903hibi2gw17armhvdg9kg884wip6a64nbvsr6g4rgn4";doc="0385yzr1rrq5rv0rm6wz4ik7f9s8zkkfdhxq8yibnkil5k1psrfr";};
+jpneduenumerate-63893={run="0an70r9y0vklglyms7n2n40qz8jd2ig9m5i48xa81z615403bf90";doc="1kb6g5hbsdi4qxcqd7ginmkg4q1flqjbi1v2d8ss6vjsamd360q4";};
+jpnedumathsymbols-63864={run="1x9jdzl2hljcm8ia7w6b2rb8zbb41y7vyi88rvlvy3y6i5v3wkcr";doc="1i9f6llx61c9lcy1lidgmidn7k870pbl2m27yvdi40kcqs39zkbd";};
+jpsj-66115={run="0yv7lkv7sr7qhqv0rmyislf0a5rcd125kqwbnfj3696cwhm5aqf4";doc="1bmms10hgyl4gs91i2kpds2mn9x41ks8fjrislj2zl8y3vqdkc81";};
+js-misc-16211={run="1b26v330702mbd9bviq6sr7pg0338hddzc84z55fsqjd85fp7zcz";doc="0bs30a1m8cbv2824xhj6k3jiv6dmdp6jjzsinhfdwiizc2kzriwv";};
+jsclasses-66093={run="0g59rxplv04jkjzy4x62lldf62glsr9dwgr550cpw91ws2izcx16";doc="0r3a8z11g2ngk97bd79610l6wnjy4rdgqv2prn3xcmqhrzg3xf00";source="0x8laaf3rw2z1587qx6ghvcmga3gykvahrjma7x9m8mg6ljh3jpj";};
+jslectureplanner-57095={run="1kciz53cg9p1f710j5rw8pilfmbiz755a24dqxckam98jy5g4b8s";doc="0lcq9dygfjrs63yjwdkjkssxyfx6phmbydh6c8lcfpkg984pfg5c";};
+jumplines-37553={run="1d5w5nh0pkmhjjjq9x2n4r72ygjh2mrbdr23vsrh8cyvj3xym4w1";doc="1q0mzjyfj8vfp42f8m11g6fyx60mb33g5n4i7pw9r0dfx8y4jvpd";};
+junicode-69355={run="1vxnwzvcikwrvx9wpvrvwn4k7jh3ndamri0y5a4wjc8m74l30f7h";doc="14w0dcn43s9mdgpcz0vhwh2w56n90saljnvkg4wad7aq7pxvnbln";};
+junicodevf-69374={run="0cch871h5l90pfjfqw6x27dslwh60yg95y2g1hyi9q8y36cjrs73";doc="14xl1837jbawj2lj16ym7yi4z8mp8zvzdz6rbkcyd1rbsfkbvfm3";};
+jupynotex-56715={run="0dir4hbh5sviw5spsh80cms12rppv3wfqp8cyg5fxkj65mr3akni";doc="0xar0qf1czdpzbjn13x2hwrby18qh6s1909nv2q24rl3nrrpzpcc";};
+jura-15878={run="1mmdx5zjrsrvh90kkdgigddvb4ih3cflygv70al0jy0mpm6iwha5";doc="0zy4rafc7lhdb4gig1y53fsmk6faa2zh3s7b1la7z7qdw7s2gyai";source="036ac5chvg67hdj8g82nra7p5jickwq041jixbprf080i0mywvdp";};
+juraabbrev-15878={run="1rla1p46nb04flc2grrh1j0wvwk84cd2h1v767xzg2rdsinaxw68";doc="1708lfrryhlj2d3in4gvhfl8c6yvhhgi0lb3yz63h0n7flsb4a6m";source="0i5xhmx4j6ry4plcgdn8sc9vvbai9vzk9jr0mc54dhqaby2slyxa";};
+jurabib-15878={run="18s5jsi5wp0cac968ysqajwrway4sv1scf6m1g2l86jkp8gl6jm8";doc="0klv7f8rbcw9qlqgpylyh64ir0zayf5ralpjd26g85w1pyi1c8m6";source="07s3z6lxhkizgv0wrz0iiv1443dfyz29x9wssxa6y5lg72w279fj";};
+juramisc-15878={run="00dkagnyz7xrkn1kdzb7612qsdc00h2mkkhfv2xnw1fhrcsy11gf";doc="02prrfg5vvy5d9y45hjx877438r8syymjj9q8465c3y3jn4ka9fc";};
+jurarsp-15878={run="0ylww99b12splqpkci2hps4zzi4myfy0agxzz4m3s8q74h4bqj32";doc="08bvr93ax4p00lmjkhy09bfm403lmzhq729gjjw6skla4wbvkmci";source="0fdxnj42qk4cywsxj8x40bfrkp0yqm7qh54jp3qf79gkj4hj6yp7";};
+jvlisting-24638={run="0ry7gnzgl2d6id7xgpbdhg8pj920105fd9qyx1a0riagp0pgyryb";doc="16z6amx6czmipal3sbqmdsc1v5x1p4nyy5wxalicy1dki1f4zpyn";source="13al33s01bw43sa2ffz5zlxgaqvhj8lrcz8y7x9xx43wvvxjmdz9";};
+jwjournal-69162={run="12lsm5r6a7gqpi48ddf5p3ifisq38j5xb6jsbfpj1zbwhx7820y1";doc="0v9x97k1cw3xca3na737nbf6g37diqs10p084013ab5j83n8wgsg";};
+kalendarium-48744={run="11f8zkjfxbk5w4y49vy712ivfqx66m86jdddygfjskp47gxcxby2";doc="0rbac32h90cnp318a0chj1wfzfrvz2y140siqv5slld90f7d5546";source="0virfajl7xr8yiksxzmr68dm11m4240drg7xn72gxbs7jfh48wqy";};
+kanaparser-48052={run="1cwik91vx5bzq5jn8xjgr4ffz7n9d2qpx9v9xr298afmadg65h0x";doc="0y7j8qp9j33hw80dypc10nr28x2zn174sq1rbbbr8gc7vsvz5pyw";};
+kanbun-62026={run="046zvhsmw56a30s01pr50bv1m3s4q1fnv8hbays3v56xbj8rk7ka";doc="1qsz9krhmgav37k0386il90h91c0sxk1q2zvma272fnpbw5rbq75";};
+kantlipsum-68983={run="0aa0nz2a357fggcd44wkh1fkc6cwx6kqhm7aj4jhb8p4j2ch5mhx";doc="04nlyjfmqrvm0q64hdrrx81jc0f17p3l25v22q6kgsm29nlgxi22";source="0akpmgj54cipxl3yg4afq0bdws3m3100i1hm9nc4xrzipw8cdvx5";};
+karnaugh-21338={run="0a8bbdd8khib2bfk4n6527d5ggx31gva1fkqbfw2jwc5194rk360";doc="0n9jqsfn3v78flgqc6ir3w0lymh1j2kl2pcjxq4wnhzgjy8blbq7";};
+karnaugh-map-61614={run="1q4xrsxjmzvfhivg2xycfpfsbcb51nq1cq255slpc06q4ycyxbnm";doc="1mnwkmkf4lx3cd11rzgqq2rlfc42728zi6xj67x38wqqpi9ak15x";source="0vphzrj1y5r6zmlqg4wxykqqww0ihgh6rw3z59c23f1v3j83jj4r";};
+karnaughmap-36989={run="01b0ndcd6vcg4y6v4zbi6cymfprv0s4vhh20hwlghh3wy5aknwvl";doc="1xk80qqqpxagvwp1vfh9vgrqihakp7bkd89alb3j9bqaikgdiqdf";source="11b5bjdccy4p3w65268c8im3c6bam9ql60mik8pifwfbn36bhpqd";};
+kastrup-15878={run="139ynj6jr5iniwg4ry57b61bpalchwmk2lvxpzi6rzhp42ifv1j1";doc="1bzjky4plcl24fg5rwbjizixwfn7nkbzb6wwydxd7s2053zba07a";source="1c4ijjifc4lwimzrhp7ym5804fz5afmccn4bnfayypmjqpc8x6jw";};
+kaytannollista-latexia-69265={doc="0rhjjazj6rgm1paxv2qvspcab49s4swq6gg1gkx0vd0105r7mi3p";};
+kblocks-57617={run="001mn33pf532iwp3d8likhbc5a4nsgq72dirbilbdgaxqxndmx12";doc="14qyg0sqrr5b04j2ramw9zcfhbgmc9qfyy5im9la4id4b4zxrk25";};
+kdgdocs-24498={run="1p1rcb0lzcsmgyqz5750pl2r73fd18k76gry45zfsr7750kwx7x9";doc="0b2j3mw8z0f3d4pffqw2r9zxpmyvykd36sskkhfg7wa4q521nf3d";source="0sipsvbi9254zpg0bmcfin60szx9q0vnx07a9bdm9ma11qb1djpb";};
+kdpcover-65150={run="1a4w58r6krjg4aqpkg9r0pk7553nd6fqx22jqk37vd08scgh72ls";doc="0lvzbr63skkx12d6nwci537zvqcpp563qlf29id2mki80gqsx29w";source="0crbr3xrv0yfd64qjx72yz55py9h7by4rkl09l06sfwpn5ysdzgk";};
+kerkis-56271={run="0hcaw35viqpsbpy82knib5lbf3ngvmmkga96d48v5s1zd6m7fwdk";doc="079i5x6liqgnkc3ii65ka44r9pfpf7k2gxhkbklsb3hm51zs06ld";};
+kerntest-15878={run="15695a4q6ikdy6f9149rblfc4fx25hmpyczgr1z1q8x4s5ar7dr4";doc="1fmpngs3q7pwf4z284gg9b4cfw55afdsnzg6qpanlryk6czbch16";source="0gwz65xgxii7vriw5sf1zi4r97prf2c3dwawr3ghhgchmblimf8l";};
+ketcindy-58661={run="0v3sz01qwd2pnnqbf4v8g0xwhs3zqxc9qihfa13df43rw644m65v";doc="0ch1zjmg04pdz96dhyl2iy380hyjqcscxn0kafj94aldin20256w";};
+keycommand-18042={run="062i4fr9h2sc1zy3ybyqrq5hw4g3g54gx708rrznkl4zmpf93ppr";doc="0ls9fbm0815aar19hg40p91n1iyyfhn68ndhvapmwfsxhi6f2d9j";source="11blfbqdn1a00bfdv3nwd7501pd5qrkk7pqn2ffir1461xivz26f";};
+keyfloat-69399={run="0qwdi5gvv3fmhp2j9mwgbfrbr8awf6bj3fpajhrznfk8fy5zflnp";doc="02cv38dpq0jh1iyp67ybd8kxq0aiy6sxkz2jg9jy7vs1ksjkx74q";source="1dq8w5vsnl7kcv6q62ik2d0vy5bkbxaqn679ifbffgxiqihbpb3g";};
+keyindex-50828={run="0fsszjcw1r3kws565pgc5j7chifbkf3dh1hnlclwwsjpxbji4n6c";doc="02n7lxz8pd49q9nf6pavhs01410zj9pbszqqbmk5c1ld077276x7";source="0k3img6kb6v853wzmhsrrhx7lrh275ssx57b83vk3yx9m831qwmb";};
+keyparse-60277={run="1jfxrymww3qh4bwgc74dn6v5xwsqc29y835k4rpwglkb14ncibxd";doc="1i1sklid586igkcbhx1mjljxpq2yl7sd8rqagygqgqsxjzg91jm7";source="180fkwkm01cspp48a8msmws9bq1pif3i80yzjxs7md9k01hqzniv";};
+keyreader-28195={run="17cfxcn374q0pgf7bbqwc0yrk6r15d79h39hzbvf7yrgj4r3880y";doc="0fp2hv3azi287gz129gqlsirw4dr1d5lqhzxliyzfy8dd9b2cqb7";};
+keystroke-17992={run="0h0ci8pslybspsnpmv73qml22592vp5lr50qqppyhw8qkng22gsg";doc="1ig565mxjnji3ng8vsc2wa3jyp6mrhma4hnb3shwnrj9g2kvj84w";};
+keyval2e-23698={run="05ssgrl08d55in1wkam99bfdfkjhjrda6j96b6nmj61sp97yg3ig";doc="02ajr27zgfjk5hwmqm05gdapkg3d3rk1k9k3nqm4nbvwhx5sahg5";};
+keyvaltable-65416={run="0r8y69sbis65hdalck66n5hxww7nk5z2psb5qzx13dx6qhnqknz8";doc="1lhk840aj1sxj6pwybrpg9gd3lm9gs06q1dhz399my6cds1b9bk9";source="1k749a0smf6wdcsb6cswm0adq98ylg7cq9yir410wkxyxdfwj413";};
+kfupm-math-exam-63977={run="0r5zqf6qxzbgyhg13xrr8qwqb5cjrik670fclh089qsz2kihqb6n";doc="1lxab23k08wrnpgjc68lcn1r41c793cncxfd8mnqxml4lyylfcwc";source="0c4fpj08y2ixf9c8kqzyl0j4hrjg9mrim4fg6y4s7mb4kcw0138a";};
+khatalmaqala-68280={run="10hkgjbi16d8y7wz3l4z0xzi112f124vzwq1g4kri7xlarcha0d4";doc="1jfqkbmj6lvfg0a3dnznlldb9aslmj1g2cc2yni0ramz4kpf0jf0";};
+kinematikz-61392={run="12h8j42d7m2z1sms9gl3jj0qclvqnximmbj9fnmr270lk59xlc8y";doc="13qa25hh33jqaxscc464j1xd778x36f4d2wvb6b318iq21s2qhh9";};
+kix-21606={run="0w5qaq50wki5b3s3j7p11akx7mb8z1khchhy6093pzzrny0hd5c0";doc="1jblprmz9vfriqdmi9ihh3ihi7pc9wf9cp8qfli89iir2xy7lv3d";};
+kixfont-18488={run="02zwdm6zja38n41pvzay09f38cam28rr9ag6yy1m5kmw8421xp11";doc="1dvv4hdgkzmdn7waq4djsgdd8p1cwq3j0bddgxq2y94pq64maq0q";};
+kluwer-54074={run="15av38sb3pzffxvrxlbwxzgvhnxhsjhkr3qwrlqswwq1sy4a2ssc";doc="1cx0xya0s27mybl37gw3yx1rmcyvrxnrp8c4012gvmqiyqyx4sjx";source="17w0ybfzs9x8yixzl8cfldqi42sq2jpkyap8i08mvp8krqgviz1n";};
+knitting-50782={run="10x5yxlrnj67gzd5kz7fvnz0nykvvi26sdm7i3n3d0si1vjzvczs";doc="1zm6s0rd3zkir9vxvbc37big9ygnyhcqpr4p306vqavvmf5g7p57";};
+knittingpattern-17205={run="1ydq16bmviqkbf9zkrlxsh33bfn8nmyzbbi1xwfd7nsg1bhdf6d1";doc="1x1bswn2sd1w19g1szc573zayk43zi3718a9yqfzqnxa0qxvxsqd";};
+knowledge-61991={run="0459xp20v02awl3h9ada0j9p0nasaz4fwv4whc6p4hwzzw86052j";doc="190gy5kj2fypvqa7b2s3p0j25drx6rd665yqq9s2gjsqzar18ql3";source="16xspjjic7vydd310ldxjjipzwl53dw726693q7kckbfv0vmpd7m";};
+knuth-errata-58682={doc="0rcyw7dqcwlnf9q421k017hrx5c0d9rra6rcr3n6wqmhxmdy5mn9";};
+knuth-hint-67373={doc="1fl3nyzsf9jifccw75grhdgyh5qhj4akkkyaa7mp6kpfznipqbmc";};
+knuth-lib-57963={run="0dl8z340n6m6xn7wari4hir0syxqi0kl2fhnf0bvnmkqhqwyzpca";};
+knuth-local-57963={run="02cf32f57fr6bngiv9xiw8bh4sq53p9br034ap74s80h3bgcmn1f";};
+knuth-pdf-67332={doc="0ig3ml88gqks5j9ly73qsx0kdii5m2i46f9d9bnh7nr9bjbpmd38";};
+koma-moderncvclassic-25025={run="0kgsbg4is158j1ssjwabicw38mh2cd4n1ggxinflb8i18xsmlgh0";doc="0f070dxww75g36il70gmrx9bn0f0d3mmh26fmzqb5zmf93hyhcsf";};
+koma-script-67573={run="1r2li64g7fk7qg4gb215z2q86by2f2ah9hjlqf0wcv8985qshnif";};
+koma-script-examples-63833={doc="1s95a3vgjxrn34cpcinkyr1yw2rj8s2973np71yxrwzi9dqdjpn1";};
+koma-script-sfs-26137={run="14qhq2h6pfjy878nkglbif7yjc12g6q32kl4xfc7kk3kf9syp0kf";doc="1cjraqcc13bcq451a36i5x2sbwj97zy4srrpaxybmlisvnza7vz9";};
+komacv-57721={run="06df0hx1rm87vgsb1g8b00ak77n6zs34c7mb76k22fis41qmm3a2";doc="07sxwgrrik3vadlp9a4lk3jmcqnvfzz5ir8l33zi7sjrapr7mxxa";source="0vd6ha60dz9ddmf3rkbbw5h602fkch3zifcjip9nyfs7wgnkg3r2";};
+komacv-rg-49064={run="0hcf3aw9r3hr01f9109rid9c1c36gmg9z0258zlqgq9l8qs0bryz";doc="1g985pnkhlhyf1285w9g1zx86vldyg45r4dyp1dq02pka5nf33fs";source="15v5y47jj0393vkikpv5mqdrrygs66b20gsmp03j6v6iih52w7fk";};
+korigamik-68204={run="0napq587a4j4z0fw0ddhal0h02aymjj92cbxmqrrw19j8k8g0b2f";doc="1lxkyaqcan6jxbvi1zavbavlycp8amz6qmah258y87yl08m8c475";};
+kotex-oblivoir-66513={run="1np1zib9alvhsz8q3pk1zg8dfd7n8gvcjk55c2vb3lp9bi8581x6";doc="1pmilc2sav4ncddm4zq279708f72wjf55z51g6slqc9mmykmb4f1";};
+kotex-plain-63689={run="0nri3fagwj6mgkcx97750khsyqf94dx5kxkf5ny0jiswnv192v0j";doc="16376wpncchxpsl57g7rgzl96w9hl3qyn3i4qw901y00smr450hk";};
+kotex-utf-63690={run="0gpdg9c7dqcg0jfq05i5gkvycskipzyk4cmfrncd8mm7axv9qd23";doc="0x0y67bn28fy32awnjyq2zy4gqnafyvbjkhs7hipghxf87p6snrz";};
+kotex-utils-38727={run="021hgi7iw47b3c637mk0g4v52h5ygx5w1060bpcknjlbg0qb09aw";doc="0l7dby446xxjwk7vl1h3w4xsid4dqd8zdspj1f457jy4qwjaqf88";};
+kpathsea-69121={run="15dldviayvv84gmc25nwnpc99d7z28yarzzwcbrqm9w9w7v68v24";doc="0gfnyniykcdvyn20fbwfvkx7i7lwf7kdn6117rkcjsw9qrspfc3q";};
+kpfonts-65583={run="0i8c7agc9zs1vzjq8w0ghkwk81hrc2qghzn7hs1wq3vdbc3wk4r5";doc="1q8h8208z0k19nw7idq45hmzhvsrnf7g3708ch3kjwaj7r9y5lij";};
+kpfonts-otf-68970={run="1sq0p6d6q189liyf5kxmq4fgmwazj05mncsjkb1gz135c9acrq70";doc="1m9iz3llhzwaqfjp101ghpzy7yca497wnxjmf17n28rd6sy8kblp";};
+ksfh_nat-24825={run="1qzn0n19lslf2qg8fvm844xx5k7s8a275a77z2ynbb0vs1w4prpw";};
+ksp-thesis-39080={run="0hcsni8p92pm3l7mi56jj7mlcv5rvdpzwbv1jv5f1hb6xyx2pn4i";doc="01pbmmwwjzd5cq4xxmx3fknk8d4q3fda3680g344g5s6ra5i45nj";};
+ktv-texdata-27369={run="1md2iv0csmr5f2mcdlb3lacccwifd6iv7yp6123gra5xcp06k4y0";doc="14sk7x2va8ja65a65fpksj2nd16v6rc1f0828gmm8j81d13cci6y";source="1ws256l59plnhmw1rycfznwpndni5i47liqhazddwbg2hragfahh";};
+ku-template-45935={run="1f45rknbzb3d3h72vznfzspg7vx9im59w5s5lwv4z0b4sk7n1d18";doc="04gpy6a0mpjhbl9h2rnflvhxsj5b7x7fwll8z211fl10cnvalcxv";};
+kurdishlipsum-47518={run="0b5x438l4m396pmd427zcnl7jyy5ag5c004gyn0n1zzwbz5lcnfk";doc="0kw9664fm4gzv7cspj2psczyn7m09qz95agn4j953q39l0qyz6ls";};
+kurier-19612={run="0x9270xgsk28i5dxp29r0awf72l5p0786mbx7gb5d4vppkf0v9gx";doc="1d3lfxixhcrkk94m7ljfcb90yvdwjbp2axjnpr2bbh32xv9zzsnk";};
+kvdefinekeys-53193={run="12nn74skhwiszbdhawqds31caz6d59a5pjmwar0r8lmk4f1jr3xh";doc="0x3h28xqgsmngs51m666mvxb8jg9vwk0wyhijcw84v1szyd0m7d6";source="13cb0xvqhz5w1hv6hamr7rh1q1cp6abqfsdqzd0xw0my9mxvwk97";};
+kvmap-67201={run="0ph45hs3x468lhrhsdwikqrw681y9zd3q0b5r088lrb8wsc5pd40";doc="0n0ls3c5w662f95yam6q6rh9gv0vdyzf7rmnkd6dgz5gl1z99q1a";source="0y6mcxixqyqmkk1iq0ys2i174ki4ygss62fx435lwm56xff7mvp3";};
+kvoptions-63622={run="19sj7pds5km2y284vhsvdddvchr2zcnzkki0h48ymd258afcvswk";doc="0yym68kqbmhkw15rvmz6bc96h17yiabx3lip4lq2qjq254j7ql0w";source="0ngbpkryyjf8l2gq0p750z96id32hl8gir9cxz7hybzk2vnpyxln";};
+kvsetkeys-64632={run="1gnc2b1fiapk6fjmgh1rfrwd04k6s30qgdfn2ppyf6fw440sx4b8";doc="0qhncqjx310clasz23bx9mq8p3kdmpz5cicx84a3afh008qylgsj";source="0l0g3v7n7sqfhpbf3289k9nh98cfz4w5xn0hbkr4i056yqj8dcmw";};
+l2picfaq-19601={doc="0mk8d082gcqlxw2x7d2w85sm6i51928pijybzbsh9fy2rfcv99xz";};
+l2tabu-63708={doc="1jl0n43bqbys0c9v0xb4sjql0gvk4r14ldzp2rbwzjsk8a39q8v8";};
+l2tabu-english-15878={doc="0dqmdr3lffhiaq7pg5pn6ia46miwq4nh5vimhd0qbf936amiv1mm";};
+l2tabu-french-31315={doc="0c6fbmgwv2adlxbhl1shvpa1w6xd36gmrwvkjgdp9xc3q999l4dj";};
+l2tabu-italian-25218={doc="0bgfmn5v80rdhs9wmjj6mki29p28ip1d29rmgbw4jh4z6gd4sf22";};
+l2tabu-spanish-15878={doc="1p83xflgv8x7nq9mylh468zn3hz5pv3zxprc63q51fwx0ylxfdbk";};
+l3backend-69310={run="1cwjy3r6dq601z20kd7fdsyig980v50z857hdq46b2znh0x7fqra";doc="13rszdyiffb0jy3j38c14xijpssv0pp2xd5il1g2nm92rcihfyx7";source="0wix411kis8z2lybbr7kwr8i8azxiaik78850vvsiwljy3512inw";};
+l3build-69360={run="1s3p19ncp5m7yrn5f2qalb36bqpapdc3fyajgs8185z26j5dip7v";doc="05m9182znq4dymj10qpxfncf095vsdmfcqkym17i0dgan8dakmqx";source="1x9227kx0b9x7i7rymxwlccwip7hy8rhwy1xjvn9wqad7sy08n5v";};
+l3experimental-69310={run="0fy07favznm88ww65mjswrlvbcqw594kf31lki1wbvjw7n8pp0wc";doc="1yw6l043j6xjki5wfqjls0400ybjdjxhkq3bzvgvy3x1rpysl5qh";source="0ng9df42sf2zjiy11b25mzm7ww3sw7vllr7rx385y452lb80cz1i";};
+l3kernel-69310={run="1d3wnk8zlhpkqkcgrfx0wqcq8nwa8cibpwm9i1fchmmn6ap8i2rs";doc="0d07aknkq2pxvgqpf4lbfa8qrc2mdsf5jdsq792j4mjl2gc1dbis";source="0vv8sjg15ykcjc70mcrqnz7mmnbj5lskssvh1f5if0j9xdc5b1ka";};
+l3packages-68507={run="0x158f74pmqp8dj8z68pl6sr55caijig35sqgi98s25p4v8npka7";doc="0ylfm3s3b1zqpv933n05rc9pp2zs4ra19xwashrqr31h9sc7655r";source="1cdzi56yp7fr6hdp4v4nwlbgxk1q5kafb0wxans7m8ihsv6g9v2r";};
+labbook-15878={run="1qh16jjmpyqdfndfs91nmbfhwxif5ygk35zlsailngpgnp1r2x7s";doc="0za4mp2zq9s1z90sgqcvf6zac7w0wqbf8y5w1qrwmlv6r6kg3s1s";source="0w7nff8c2ffrn2ywz1dahd8n4cb959b6zf3ka0s913nv04ifdkgi";};
+labels-15878={run="1d1lxzif4f3qxkall0qzsn4lh55ljr45zba0xwzyvfbwighp1vvm";doc="0fl3as2lwdga814fdlg2pwyw600cvrii9hd0f4vscfzq7lmw01k9";source="0y6mkg18jqsbqj14h52317d1vvzvn3mv89q2gl4i3i89ka3dfajh";};
+labels4easylist-51124={run="10pfzxw0d856ki2krsdpidnfsk27mg4k0vj3jx7pry5cfirx6m0m";doc="145n7vy3d0vk3cq3qd44l3a6hjmazipm7wmr4aa2knxvs4nyvw2l";};
+labelschanged-69400={run="1fhmxc85w0jgcvbf3kbn6hpkyfl70q6kx7d06laxzafizga069pr";doc="1fbkiz4rqch0sa7xpw0i3x9dwm7vpvfyax9jvp520xh66sn46wh5";source="0ppwzy9p9zh0hyzh9kgvjav9h7pk3c7dp44aqj87vaq33bwkss38";};
+labyrinth-33454={run="1r5za0nrvcpmx7bbnvvxf4l78pv4ciq83ck9k9qh32pawv5jn8sp";doc="14405x5dcm2k4m74jjhwd3f1836d79qz3w9m1zfj3gnvzx2kij9w";};
+lacheck-66186={doc="1hhx65yd800bl3y2sq20lix60wd2b2j3k7n9s788mlsn8b0p7yq3";};
+ladder-44394={run="0a2sxy3rvc4w4a625wa000g4mjm00d8fpjff49v08kw1ddadv6fh";doc="16dg0nz4k3491mj7ccvw32r71vyjz2hdgdh4xgs7p3n9jg4jdp95";};
+lambda-45756={run="1ajx5g5cd5s9jqr4b196689k7zmlxmhhksly88qps31s7lzaprvn";};
+lambda-lists-31402={run="17srvv0v10mczvvmxr6sfhlr8zks589c86v472g4rnmf4bl4my88";doc="1yq4kn0nfcgy0qh33qakv7c12lcdzbj4x9xj357yn8c0ijqkx789";};
+lambdax-60278={run="0sr5im1ag7lzz0rkvnj0biik9z5ww6yr03ykn2w64dg1nf42chf4";doc="07fgh2x639fj8wb21rygj7yc0c7bcq4sm1bhdrsxzgrwjxn9rbw0";source="0sarj3dsqm18zx176p6hq3xv717fzdpvipvdlv8l5y5pcvasz73x";};
+langcode-27764={run="1hj7zyjxh64fax5rv32558sp2ss986fxx0fqd5xb9c07s189cs3d";doc="06bygnvh4sdv7mp17c94wx9v1lj4zgih1db6mknc3wiifi5jcx8m";source="1bi25gqx2yi8f6g8hpnqp9f52qnfpyafi0r16scap8w0sbnwrib1";};
+langnames-69101={run="1rg0hn4addzi72qgrx303skf35c03lslrlf8ry790kwr27i7lna4";doc="0ix2gk1gzvsk1w0r1whr2imdml3a6f9avw6yfkf54n5hnaxm7i6n";source="002rmwkvm5b4ay1cbxc51ibcb27sg571l2r5czfilbavh0000piz";};
+langsci-65793={run="1hf6q716lasc30d72z60ry74xz0gwabp34vm9vk33kaf705b3hxh";doc="15cp4ab6rr0zxggrdray06yj8szpdjr6fc613j27wpbjmqjzbb67";};
+langsci-avm-66016={run="0xnprm5fcy8knxhldl54c5vhir4klgsmmy8l9306hmlykmphwifx";doc="1s5bjwhdz1fwnkvnrx7f4789cy0f2l0qkixdd6va6zjvylihzl4l";source="0ifsjndp9lf06anqcl79kp7rhx9gc56yw5xsr4lb4fshzzg6jwnr";};
+lapdf-23806={run="1lfmn6axzbfk03j6f12yqa0vy3gzvw1ylpq7k2ki4prb3zwhx9sx";doc="0h9wy3amir9wdqv0b8678mfmcd172zll9p5v7sf1l0w3zlbw5msy";};
+lastpackage-34481={run="0wjpjd3b48fj4mqqdx38sqalbaa9ab3c6rywyjqhvrd1pxfap2g0";doc="1123lz0ki4kww93952wqrhrw9l2cnk4wrrwyi0dxc5w1yfn2gg87";source="176fk84mbb6w5ql94381kz05lh8q8im7ri6rfjff7f4ymfjnh2jk";};
+lastpage-68557={run="0xds81j9i3dqbsfw9084f0cqmscyapcndd6ssk0njgj2isjxb43s";doc="1agaxsy82b8nq5kn6kpjc4g59xzvalxpim6rqzl8j13ywvxv6vhr";source="17zk90069n9nc2j4jhqwzkm9kfhvp7wlq7akvwsny9fk9vrgp62v";};
+latex-68720={run="0jx9qmvwjy0i4p5a6lnyzfcj43x79ba5gj67qz83fmxyp5x8lbi5";doc="1p86iz7wcncsibsr5dyaa7lqh173r1891pj9ygs7p0d403spd24n";source="17w073p61jl2i4w02gvs3pyvi7dcmzzng8gwc1d5kaqcnf7y7gi5";};
+latex-amsmath-dev-68730={run="173gm8vkn4dgwys9h7yq3zv0pcazxvgrj40ax8msmmffq2r8cgzc";doc="1ch147w7ak3al37ivkq46capg7zpc5c10inwkcmqxhk1bqa0cgis";source="1ffzh866cdx9r8b5z8vyiccxvramahskv7an1jpi6flg0b9vv4i9";};
+latex-base-dev-68730={run="19jfbx01c8wq15anrdcyz4d6bvbl0cchimjy7lirvqmj78wvkqc6";doc="0ddyhlspmiz039f8cn1qf35yi36dg6g55rbf7r6czkppykf3hhia";source="1wk7fk4ip97qnn88l34w1xwrqc4y4lahf0v1w0qxlskgmjmsjlv0";};
+latex-bin-66186={doc="1mhdc8a37b9j64kc8c8171s8p7ixklbf1ijr4vfh7af2k416qf8d";};
+latex-bin-dev-66186={doc="0dwjlwaf8pxfjgby6dwr8ijnhm85rvprapm8m85avq7mnfmrp4kr";};
+latex-brochure-40612={doc="0xba20sy8q10ac9hxwnz9axh853hrj06vp7mfn12ajax31miznmy";};
+latex-context-ppchtex-66687={run="0ai8w4r3lagkgval65hxnb8fqg8lq0j5kailyb4dzv2fjs9x0sl1";doc="1wbgxydjicb10mnzjixnz1hhqy4xzxv6k92wf7fb2w486mh89k5s";};
+latex-course-68681={doc="00s521wrc5gqqs5jvd1ljl04nighy8q79r0ama783ic27a3k0qhi";};
+latex-doc-ptr-57311={doc="0mamlfnxzi4lwh5cpss8zcfr64jdnf6vnj9fp48accrqdj2rpfs2";};
+latex-firstaid-dev-68730={run="04rcdqd7461r54qhn3v13517clirbim4lnghli6yn31zzyf83zif";doc="0m4jx0qiscxszpk3c6i4r7pcr9x8xdq30q1ixj4b3l2jn88mvhlx";source="0m7xdjy67arisi0l2wgjvc9i89g2xdp5gk5cjqshb8hwxjw21mg0";};
+latex-fonts-28888={run="0dh4kgy4mfarlsrgqw4dm5zgfhcfg9qzh8s2wjk6w2g0jfc8rf3v";doc="0243qbrs2w7qh17nh8m4ivj35gfgxsnqxza281cvhh7g2fv47f5l";};
+latex-for-undergraduates-64647={doc="0krj27gmra2mpriircasv32snk80z9ap85h76n0bgy4wjqyblyp0";};
+latex-git-log-54010={run="015f1jrfnwr7i7jn6g0cfl3zs73xw30h14fr2pyjhn9pr8kd3mgi";doc="0pj2834ax404f0nnlfbg75f2h80wvnz23s8nr9vxr24vr745xpf6";};
+latex-graphics-companion-29235={doc="01zs32gck1sl9zlbhghyjmjwxyvw0jha5vl2hd10knyrb3z4dhxc";};
+latex-graphics-dev-68730={run="0gh26h6lpv14ywhpcbw9zkzn00jqrxbfwsq61cpvb6in1f7q95bh";doc="1cyx9l48nc60qdaqny9mi076cch9cc4f3qpnp9hxr1rm7x712vp2";source="0ng5gd50c7rg7pv09ry62j8plpn4vigc0rjy0xg4bzfyqhpax86d";};
+latex-lab-68720={run="0hdzvh1affhjy4r80x53gbhi1pqsjikvyxrr985pl1slzfrlhjbg";doc="1aqwxllsrwijw6rc98cplkxw46s61dj8gz2q07djjmx137irvkcm";source="0zj723bpg0ik95sjm97kmvjp3ygsf29lshpzgljyqnzz6z8ppb0l";};
+latex-lab-dev-68730={run="1maxr2mi0j3ccq4gc2zhpp5acjnv90pa1srxd8yyann1q02cqng6";doc="1k0vld6c5zb8llriv57aj29w4vzzflk86hd6547ybjcnyz77i53x";source="0bdpdjrzghj1mx78jna3p1f4b9rzb7j6cxy0gpx1a4pslxzihshq";};
+latex-make-60874={run="1dgw31znxh3ch6xyg7y0ngnkjmpny7fbq9nhapd3am4l6qb0598j";doc="0jmms953klgv8z4k5d8rj2l5barwxx02pmzk6ihpp1wdggfjxrfy";source="0a5jqry52x11iga5ky89b57l1ww0hbl8z0mkkv6nvvc7bg5gg6w4";};
+latex-mr-55475={doc="1zd948d9y63js7980g2bvxpf67hshh2xa3n2ihbzwhpw6l9cbh1w";};
+latex-notes-zh-cn-15878={doc="0w9rmd7b5fnfvix653n9vbnn1k8yxlaaak79ipvm8p53dx75xfxd";};
+latex-papersize-53131={run="0axx2lkwi1xq3qdaazhb6i7dssx8q2k0nm5vf4b9p5ldl1ky0dzl";doc="1dkra9b0wv8s4f7xn36j1x1p849ziwlm4chf5mrayp0wmx8qshc0";};
+latex-refsheet-45076={doc="169h1syday30qiw032k14fhxikdwszggvqz8b9ga4i9wwxf1vh4m";};
+latex-tools-dev-68730={run="0zhy09mxg97693fk4d3mbghy2w82gdnmvpavkajdyzzmlxlmxcna";doc="0gz1vizf2xax6pmgxk4bpxqg4p7xlpnyhxv0a57l6mjcn606d2f6";source="042f25jnpms3crn2q5fd7l0gay48yc5hy71frvgqkdfr25wdd2pw";};
+latex-uni8-49729={run="1sv4n2v0m3lck7x320cwbay23k7r9fh4wm1vxg9m4grphc72n2b0";doc="1y3p08mni1ng6dyp0g98in7hh3mbzqq42249idy90vjhc177rjc1";};
+latex-veryshortguide-55228={doc="17i8zmr7mjfrx911psdy9cbn05c5inn4ixqmnjkpr9sbgsninyc4";};
+latex-via-exemplos-68627={doc="11nhv72ixwr0g19nr7dir5awgdapxq0l295hm1pcggr62wqh67l1";};
+latex-web-companion-29349={doc="0v018lwf88z3qmzyqpyvfql7dbwk5a9r0wj3jfjc9cp2ksl8zf8f";};
+latex2e-help-texinfo-65552={doc="0rk69n89hl67qfbi5mmb4msaibychsk9a83dx593170ayiir6s6g";};
+latex2e-help-texinfo-fr-64228={doc="13s0zjwk3m95kbx4qrz2xwp8kifzc2zmasp1ks9l2acf1nqfac9p";};
+latex2e-help-texinfo-spanish-65614={doc="1v3wa99phdmsiajbq0ad4h939cpwjwzpq88h6s0796h5fr34hrvq";};
+latex2man-64477={run="04m5ccx6z8nvp6z8dm7dqhqyf8h9snmaz4cvd8i8fcwfba9znf9c";doc="11nl9ldkw3f90iz8r23jbgxaa6yq5p61f1db344nfhy0wimx15si";};
+latex2nemeth-65269={run="16fd74x6bz4zfj2zlvbfw160684ff1fn1rkpx4y34avkp0ivs9bq";doc="0f50qxbwcas2gpazlq0ja4m6lcbwkkwlp19qb2v1lflfgian39c6";};
+latex2pydata-68919={run="1zn2qmivr0daldqnrrkh8jcb0gncg3cnikkrrn609jp5sb1xd1hp";doc="04rp8hycz6r4gl1llvxq5z4ks9iy4j47wxg6lkx39hdphh2q561v";source="19nsm6sn099cm2g8bvks0d14fdqfvs43cmphgl48rhzgaxb6l408";};
+latex4musicians-49759={doc="1zvy2pa93kyn056d5n0irzdq5xmzki6d35zxacxfy19r0g9rwq6f";};
+latex4wp-68096={doc="1a569y6vss3glz1il4hg2f6718mj24spp4ahdj6v7k6y7ppa1zii";};
+latex4wp-it-36000={doc="14r86fwhb9zafmyv05pqfi9962dpxj7wq94acm43gv8m2rsjp52k";};
+latexbangla-55475={run="0jh2x97r6j8lrl5kq5m4bvk139229fwf7r8g8xq7n0qywnfdr9zh";doc="0hgcqd8vqq67zzdn7mq4bps3q56ad3nmaq71mkcyricgrkn5xxmb";};
+latexbug-63596={run="1rv43swr1nqnf50y7rxbqw2w6402rlksddk5prcl7618vs4yiag0";doc="1sdmjzl81f0hkmj9k0m57fiw7529ym3430k5sd1q6sbz096wwdph";source="0a9012p4c07g15ysgf2hfqzcll6h5riajylxga326p65k2zv062m";};
+latexcheat-15878={doc="1383rsi21ma0291asi779bjr33m7fii019di8gv8kxwgci692fz0";};
+latexcheat-de-35702={doc="1cpqcvqkkyb2bf87yjvc2migxawnacx5mva8dapma7hmwx0z7rhm";};
+latexcheat-esmx-36866={doc="1d6nk9p9adlhgr28mnnizrxzzqlk20zw2clcddqlaa8pn73dqhcm";};
+latexcheat-ptbr-15878={doc="0m636j9gdfpm4j1b679z5qw5ygbm6jp8xl9dzy6v5zzy695fcgaf";};
+latexcolors-49888={run="1wpa7vw8vphdghdv1ap5ilcgzj5n6vyvn4a6lfvswg2d47s5y1a9";doc="10bbk7bs1km97hpzqzzfasxzp0w202y8w7pwyd465ygr4y19wj6l";source="1j7vfvyj2k4q9drmkmh3mfk1g3vs7czn1x16fx9jyinbdxnwblnh";};
+latexconfig-68923={run="1lq89ycfsv3bl6kb1lq4s4808pvld02qmjmyz3npaqkwjrxhyy3g";};
+latexcourse-rug-39026={doc="027siznmshk60flxgra7dgzvwbmgwvckwb6r257b91x3rm77anv5";};
+latexdemo-67201={run="1w95ji58dylfa3j2crcxswx058brjx31x6n76wlj9hjv5dkarqj8";doc="1jsszarq2lydblwkwgachhhr2fqmabw870w3msgrllyardp7ycrw";source="0vi6b642k5qjnwa3igll67w0h4r3p7bxxjlajfiqwp06pxzjl7in";};
+latexdiff-64980={run="1z0x59j9g2cmbfwfmc87fpbjy4hp827ic7y9z8q3j7kfh2s3j8dp";doc="1r461j9m6rs38kim7isvi66z176fv1nnd1q8p1zza9b1j1qhfr97";};
+latexfileinfo-pkgs-26760={run="0lf6pkxjqdilg10i3fwmlb1nvvag6c5bm6pbcd50jjbd1q39iih0";doc="0qh84r86pszscg96gri652y6p5xx245lfzvx50qvzw77xn4iv6ra";source="1x1sj91sd5bb0jihvp0qg52q8ybak4flvijj5hdq84jf0bw3gryi";};
+latexfileversion-29349={run="1yy159skv29hp0qxpghmq5zmay9yi0ndkgz7lbllj1ymkgxs5138";doc="0k20c2kw0xarjlkdhjyx9h9kvjm2f3rd98lz097xj8xvk0fs0zp6";};
+latexgit-54811={run="1kg9cbz6h70496snqqa2h9xfknm70qf96xyvnc829k5v34jskmi1";doc="09rlc9nprx6590snfg7gakycsam37wmmscybvm48vdn271vvla9l";source="1pn4gv4prwsnnr377xg2x3kf3kmi8pxgczbi9knzavkd53653akx";};
+latexindent-69269={run="07qrhrcq570907kcafq3v7xbif0c3gfrnybg2ibi9rsic4bmf5qh";doc="0psnkncasbascn0jr5p7li8nbwd3sv6a3pp7dmh99092h66wa9pw";};
+latexmk-69373={run="1pdm5p4vvchn535cckwa1kk739ihpllmg1a30b5f74zf6np1nwp7";doc="0wl7d19zsf465d7pb0i88hx71jh9ln1bk6y90z4p0d7y744jlfpn";};
+latexmp-55643={run="03rgabck8mcxnbg1avl638nhxdk6smvyd21v2ns61hx3jn09cpv5";doc="1ad9axqv8h2s2xckrdxcnl8kazpgijrgpxmbwsb3h0hqb3liznsg";};
+latexpand-66226={run="1ky0z3k9lwd2815kn3hxpdhcc92spp4wadc5s4hhjdjah50b6zpk";doc="1za2s4qvkfpqg2s86z33y85lw4vbi5ll52if58dndbg47mf26939";};
+latino-sine-flexione-53485={run="1k8inj0rl7mhsjyzc39w789jlafqshh9sgy99szxqbs0jilgfb78";doc="1wccb0ksrrysqjp68l3wnf6l4n3s64ny3cvxiqgalrf0mlfipxmi";};
+lato-54512={run="1w70dgmvcwm9jff2ap7s78qgqs9ip4a6dx5wz8iyd7hn2mwf1v80";doc="1fj4n1y16x7hxyd63myk902iwm6lr074rkdybv03qwxl12p9ykxs";};
+layaureo-19087={run="0ggab1drpspvqwkijlj2d7k1iwacd8bihgrj9qvrmsvdlswdjsd1";doc="0vxa87pk0fq67zlnbzbpnig221isp1fy6qp30fphk7igvnjw8v70";source="0mdibdz7hawfmc6bzvk3qfhs22pnmsnvkvvag31p3b4n25zshmry";};
+layouts-42428={run="1ab9azs06k1p0s3n5zjhrykpqac9fi3kr3w31xmh698zpsg3jq4c";doc="0ydpj4mbjyg6qy2wmj90rqfpkcq30pws5d11kdr1gcwbzqqkgbbh";source="10mfwi1wv5v0qdwqj1mh5q8izgavlhclnz2aj8h02ijy4kzgfg5w";};
+lazylist-17691={run="06p4r8q0a0m7pmbbcddxn5xc22f9zhvl2a9q0iv7ibkvgyy6pqja";doc="04x6ai73z7cqs7k9vgicxfcnvslr5812dlzqrspafy8w8qfx37jy";};
+lccaps-46432={run="1iy7ijsfpxcfr3d824j66ahcvmc3p21nl0k94x8bhfrq98qzxmrp";doc="168yq8y5c31d9h31x081wh7aifsq0bs66cvk464wciy91sxyf34y";source="0q3jn7h2b1dhdshdj3gxwwdg3gfrz6n5c5sflacgpzc16pn9gbca";};
+lcd-16549={run="1r911gvxiwwh7vvjhgi034j3x49n2dxxvf38zsldmqaj4sccfky9";doc="08id9jhafkmhypjy72d79v2yr2jgm6pjf4yhaw5279a4063a4f1r";source="0vkgnhkc1774d3g7r6sv7km81dvdrbvzdlk7jca6q40nnqw4zbw6";};
+lcdftypetools-52851={doc="0yjbc6rsf8c62qa1lyi9kjyjy2p0xlps19llnvly3xyhla08j76f";};
+lcg-31474={run="1zgpbj9zim5dcc5c2lf6hy33hzzk8cmirqh8kv60bsvha4hwvzi6";doc="0fnpj3mdxd0v1lrkp2ywb184bay0j6vc5m50jlnipjfjhry68n15";source="1al9wmw475g30jw8lwx709r0p4lq6p2p9n1ky69ncyy42zp79ld7";};
+lcyw-15878={run="1c0js52z8mgfbr3lgbvnhc646ggvsvgr7w1mq83lyx0pvnlqm3aq";doc="02h21pl11ax04q5psazgxpm6xpb8lljm4b08bbmivpwbm0z1namn";source="0zf06l74fzlici5dzm3ggvz3h66dx3yjxmb7qz8xlsk5fppyhcb4";};
+leading-15878={run="1ky6c51dcx0gsj8f6zrwb242d940cjml0gb258ags5xi5iaq40yk";doc="1l31zpglr1bz0gif3w7kqzhd37zpcgjig2ly84fcyk805sf7nncd";source="0f4ayaz2m0y87ifddl4622rpf858zmh13xafp53nh96b8pyvcip0";};
+leadsheets-61504={run="07w8h1wv322dy0b69d13b9k59m6iid53rlpn20ps5ss2j20b62z3";doc="17xbqxhmxc39gxd5ckvzsmhiabsi2afh2r2jv91im8inqfqi8j1l";};
+leaflet-56878={run="04fvi31wwpsnkpsni3r6f9m3vr8b6h71f2znb79aban9g1qvnyh6";doc="0f82hm37i7w547jpmxkl8a2k4f92bw29vdzq4ywwllk2hdcq3sv6";source="0igkl1rjl14raf3xv631c7sn0mc1smyc44mldwgzgnzxxkv5kzzf";};
+lebhart-68376={run="1234ihmzv9fmhrb5s0c1ria1pzd2qz5vi96v2p4faabksxp2qi2n";doc="066d7m6w4i6gmqmgxdhsvq779mabqai0ix83c97gc32jlhhv1lsh";};
+lecturer-23916={run="0alcmds4ds3m0rpq6r46ff56x78kv0nbdnfn80s9q638pf1vvnvb";doc="0ksqm6ibcakjf2dir19hr066gg2dxa5blfiikr1j8x966lfdjb09";};
+lectures-53642={run="0qdhkf7z1rnxm2ql0ywfk11y3aqp8yr1p9202d4ha6729n5pyima";doc="1xakcm4mmhl4ahnvcpn7k748v4j2m8p6d4p455claqhf7xg4jz15";};
+lectureslides-62292={run="1x61bpgp5ddgld0v05qb5sg2lwb7lzqn6r65imshvcjz1xbwpvdb";doc="1awy6zgj393q0lm195hh8ky51fczm5s19d46fc7mivxyh03w3wk6";};
+ledmac-41811={run="0ipf7h58bylrfwg8yzarqvpkl0kr4k3z9hl6cjzxwlh16s5fs76i";doc="0pgkv08nsq0rmcpck9vq1hfb4gnfqh274hclq4grk182fpn4ggiv";source="07fl3lypnxz7sa4kjf3xllwqakhrwgx8z8r7l6x8id96n48zri9n";};
+leftidx-15878={run="05fi4rp3s0s9ank7pphdwxnlnanc2r88dxhyxbz64fb26sja25gy";doc="047a5clwf0r43r1j87k2zfv0pa3nrii213y0zhv5r3zkmwvm1qky";source="0a8rzkycppx8qayqw3s7ndzz2xp4zqgx3qd8dp9s5ynlm10020nv";};
+leftindex-56182={run="16p8n98cw5kxah37wv263mq0jg4jq9f2dfzjyy06sadjwsbf4psp";doc="1g5ykrfix8d6k2cg3nsh6fp5ibpgfajxgf9qgff4s99ir2fgyhrw";};
+leipzig-52450={run="0wml5k749fgx3vq10v4vc970h6nqm6qflg2z4jajph1h38kj2ryf";doc="0znm18pkrf592jfgshmr0d7vk4d4yq4wvj9hqsfg9nrjd4l6a66x";source="1sxqsgahdr0srk52iqdacsqn7sc73iv0n70nsnpvgfsczmxa2djj";};
+lengthconvert-55064={run="0zjyynjlq48sywr5gyi6nhryrp8hcl41q1djjp73ingi2h2svz47";doc="1id32l1ipcilhkk4w9w2q8rfjlk99f5jphvq1hjvqdnhz4q1rk69";source="1zy9bnibswz834k24fk5srl0ahx4i4hlrqv6vnvwb3h8z71izc3b";};
+letgut-67192={run="0b1vjlh97ra46c906kxxh4a9z9ff17s5kii5488ppmk3fmjnvfwp";doc="1q8hcsqj92w808hbmqk006zd106rvhl48jc8qknk51qixz74yvsb";source="1w4ini5k56qik0yx0b0f0g7n6558w3yqidjsysiap4mn07mcpic2";};
+letltxmacro-53022={run="0p16zmxngzzp9hbg7bxrh087gxj7hg4avf4a9akjkg56834hna5h";doc="1gxldiflxvhy6ca87f8z3a3zzisrwz6f9vrx2r9gsfw72jyfa99y";source="00ykjx412119jxwf1zaz5bismfr0i52psf5fagdiybbshs5ac88x";};
+letterspacing-54266={run="0ry7rri76dgbrkzr6na2kkh7bn0jpwkhh9b5qw0cl5xwyp81rddg";};
+letterswitharrows-59993={run="1b7d512g9gma07n7np7f92qqxijxs2df4h0izq5xffd5jf438m56";doc="04hrchgbm25b8g8d6ywchyijngk42lh7z5gq2g2hnddl7wp79kv3";source="1jabbydsy0xn79p2c9dg605kfrc6g3c25jz72hnq1ilpny9zbihv";};
+lettre-54722={run="13h1jsgjp5k82cq4rpx8gd114l49m1pzplksrwjylx0bzimlzgwn";doc="1w82fhhcdgsxwsnprx2p61ygsyh525im8j1zalcw0bji3i6pm06i";};
+lettrine-67923={run="1w18c4z4a6scy1d3sap8hwfdivi3lidndg5szjjlc0xxnkrc3iis";doc="0afwbjyqj173n78bjpzn3pb05vbx9ggrafgnv5djvm4f37i6iy4a";source="0ky4fljrf95wlj2yzqnfg34k5cwydvl558f5axwrlb0id8v29jf9";};
+levy-21750={run="184jkjwm17ms75j86njpkr17ipcamca3r5l1fcg8vfv00ffj9fp0";doc="1wbxdyfxm80w3h8bq8z5yavdwdbgccvhf4hm697ss5yshp7l8gfs";};
+lewis-15878={run="0ws9vk38j3m0sprl9lak2sjlq13nalcysk95gv68h90x04jj5zdl";doc="043kmzddal693kl6fds0xl2wwmyzvd9cqs8dmy1jzp0mdi6qw6vn";};
+lexend-57564={run="1lqqn007dpp24jcgpn9fdf7ysb99lgrz9zxjw27qm2439wrzhc1w";doc="1h7s17x7grhdb1hxxg6wql3pwy1w08iywpynymrqn8748s93yy4m";};
+lexikon-17364={run="0ql4hzzf94v0pxr0jma4bnkgh73napz4np2zd1jhfsf55sm3axzd";doc="0fbz7v6a5pw20p22vyx1mjdr4z39wgf902ph9f9nwawxwsl24v9a";};
+lexref-36026={run="1whic6s54279zypip228xyw7da5iq8p7lw090z71d8nywjsgllqm";doc="1vqygg7hqn64d3dxj1sj4nj37k3w7y8r23d8l8x0lb909y285jpl";};
+lfb-15878={run="080305sym5mppkmgvpxw3ddn51c7gh07b5b9vs2qsikv616077ml";doc="1a5y79xx9fw1mcinbkj7wv4gmvb2gmlm7sbnxc07603dc0lrhjww";};
+lgreek-21818={run="0ry70b47s9bn8ixcjzsj0qvyvlbava2dn2jpmp5nrqqycihb6jvp";doc="0r86kjbayji1cha84dg37ajn1hnlidyw3cf4byq3x63vyvx0ag3c";};
+lgrmath-65038={run="0i1mag3077fs18xyznbgh3mc87sz35ihz4n5yp243h3c2qg9kyax";doc="1w9y3pqfm8df2a20n6n5421hhjavg14y60lq97bib2py6drprcpm";source="1d3ssx38hjg7376fi34rllpzkj8mr54nw8p5ss0la8fc2j1ac4ra";};
+lh-15878={run="1k2nn4zpxdgj3b10xdqzldcdbw56ws9735wp0yajkhxl72ms0705";doc="0zvcl1zfbn7qv9069hff2a2r2d33xmqr31l4di24y4p33y3ylprf";source="040n2hbkaypam4fhyb82ncy1sfyvg7fdhykw9fnvy42mlzxv1p3y";};
+lhcyr-31795={run="0civwbn156gky4k51189s9lpqcs06wjr32pviwb1gzsfr6rc7vws";source="1pwlcsilza9f2f73qsvbr2xxxbs2dcms08jxjlnpk8fxcpiy8j6z";};
+lhelp-23638={run="0j55ilp7wn1w8vs60k6iangc9h637f2jrnpshh9glryxj9jjgxqn";doc="1is5s8iqyb41fr2hr1kxf68xrlb8hqw3v1fifl8645dcgp8lac33";source="0iyp664cy3n04nn4499ryzx00sr1iip1qmdlpvjx010r7hq4dyb7";};
+libertine-68981={run="19f8pki8i0g10z2sbwahyixcmwixcri3i5wrq3bx1zwbc28fwih6";doc="1mz4lgajz9ij54sgn0x9w2y1ng49hdc9v967ybgjivdidjsfqkhh";};
+libertinegc-44616={run="14fdpxgsmq9dhgl2065rdsp0fnh9h0xcr0jzg4k5gka9irazxrzx";doc="0isvl0ghjji427p1fd1w0yy04c6zjmp058k5gkpsa3xkhq3ijvv0";};
+libertinus-61719={run="00f4wjqqz4hqh2ic8g162mnn95s0p2v1qshbm0zrnzjy2gr51hi6";doc="0zkv3fgkirq6jcz7ywb1sjnnw8vfwfgd3y41lm4ds547ra8zp2q6";};
+libertinus-fonts-57948={run="0izp1qihx1arqkgbdp18ks0xz7jlyd5cc4r3d5nhdnpph1nry9r7";doc="1zn6nlpr95syxmijr7w0cljq21qfv09b2rp8j6n0rvyzm50gc4fg";};
+libertinus-otf-68333={run="1gxgz9lgiyw9n00ss64bb5zghzb5hzli6s8znkaq6fcgnvaf5ra5";doc="08xig7pz9322x5kz8l4dgqc74hsdzrhnxp8kz577gbkg8mi5rsf9";};
+libertinus-type1-67450={run="1brcmv3j109909q5975zaaf7slnzqcflfqzfmxvbaxychwm56nds";doc="0v352ny2961inklzfc2jn797f443dmp7hk0wn7s9dzqnim8rsr60";};
+libertinust1math-69062={run="19yyzlslc3qqk80fdk42ibyb6q07w3qp6ax0pn7gqmw44zlr95pi";doc="0nmg81gcll8z7mr5ryxp93gvja60ayynb1s135l7l0h73s461lxs";};
+libgreek-65004={run="1wazhir2i0bwh8744867akraid5cz629yjj6aiipxm6gjj913gy3";doc="19wbh1vjycvplflzkb79dr3ha2115jc8lf0vjrxx7qvnjprygs8q";source="0d8x32jq6fcni0g5qa0hcd3vyxj5fcqa9yg3m2bfb049p5ms7s40";};
+librarian-19880={run="1rri0fb9ssj413w1g8c7p79hn72gqzncihhhg3ws3ldl9s3nm54d";doc="1i4m0gp38f64y59zcsyg2j7bb6zycyf9z5yr5wf86l6kh40cc2fq";};
+librebaskerville-64421={run="1d98h5gyymci1vny8877pdq7nr0vvv8878kcbahvkijyn5gwwdx3";doc="08rds9g231kqmka2dzv03sj9dwnrh89rhsbfqffpzrwsfc4fqld8";};
+librebodoni-64431={run="0w630a8xgw6qs0d8gw8g13slxcslyizi0mmk3phyvhiiw9km40jp";doc="16ncr4c7w0hjkrss4y23qd2rmd9c1zv1pyqgqqc1rdi7w1kjhinq";};
+librecaslon-64432={run="0jwxqjic9p2k55g7f8j75s78rf5bfpcgbjsmg36qk7m9zig2v9im";doc="0rj21fkpajmc4gyr5bixf4v644kiw2iq1fzxs6fn91fcfkwdd2dh";};
+librefranklin-64441={run="0g6vlivwlwb56mm9a509xfssp11ir60cvrd9cp2hv9ym93yqkcgs";doc="1gvsanhdlbn3wnx2yq7brvzh7wj4nwyvdjybkmazlb6ih8ribab3";};
+libris-19409={run="0nprmwx67zbq7xhjbb4xiw5da3i0k958zvb3z32s71jdd6psnphr";doc="1vg5jgllfxh3rdqjvgmzn6ak887ar7a4kc1k5cwwwgmgdsfam1zl";source="1dfm4q73p8q8bgn33z025sgna1jq428d5dvmfagjjwc7sjd93ncb";};
+lie-hasse-61719={run="1bqc4gpk1f5b7afsqii6ny1xyh4zpc5347v0xv618svjh7dpyzpx";doc="1jfrig40w3ac4j6y8aiwjyvsv9q8lvgvn1977f2yg12lsjdzcpyg";};
+liftarm-62981={run="1g1v61iahjd67fjdgr6d6lag9yjqvix0b7m2aw1gc9bjzlcvpd8d";doc="1pxhbcg880vnnmaz53ifpiv17jsr66i81nzhnb80d4cn5jlxklwn";};
+light-latex-make-66473={run="1rjnvx04hcmiwzqg9gh1l2w0vnj0qfm22snjzm9hi7i3sj1kx2ja";doc="1mjmsg5mgz3fyn6v65iy75jz9jvdv4bxy8lqsgiifv1c5660lgzb";};
+ligtype-67601={run="1xsdzgcbmn1djpvsjak0bav7vvaa94rc5byhvhajfb5npqrz2rn2";doc="1yjsbj3m44cj1lzzgxkzl1wsapqfcjh6dfyaqi971k79zh9420vk";};
+lilyglyphs-56473={run="11mb49rcsi051k7yd7s02k9ca5g4mmifdjx1nqkvs6rl922wcyki";doc="1wl5ppgazb27s3wxgmz1xw8cwwmnnn0s582k5swx8qy91qdl08r0";source="0657barhxkzh3jj3b8rk5rl9i47k2h0p1wa2vxj00fdfqfdjn161";};
+limap-44863={run="1hdv2rlvxbqm2wnn3x2xrmwxpwbs03qnlfj7k1s8mfpp5smmhd2i";doc="1qj9ddllgvm9zqjvfdgg2sfdyfzpp8raf8n1l0zrg9vpiy2imdn3";source="0l41pd8xl969ax257lrcnkxs0pzb3q1fmiy8ijz9jfrval3rqqbw";};
+limecv-61199={run="1j1j3n86gvvv8jc8wycmjmnx9ci9w41w38fkxjsmx2mvc8frsi2z";doc="0d9gg2gf16pynh395sfqyr1bzj664snv54x9bb5a3zck3b9kbga1";source="0m0li0wa9pk2p5m3gqzr7n78qglz68akw7f5nq69iddqwh5r827b";};
+lineara-63169={run="05g4pmwnwmlh9zlcn3g2v5cpxr0pa07xr5kqnx0gb3ij32348kz7";doc="10bl6r0sa41hnyf8c6hgwgji33jvj9zy1k39lk168xv2wzkarml8";source="1fgdbxkgph3x16axccx29llckvankl51izxk825jswbgsxgj52j4";};
+linebreaker-66639={run="1v23krvl4nf8pz1p2hl7d9pj23c6c8zw7hgcacyjvzd8sc22jsi4";doc="0prq9r6acl95w8cjrmzxlg3hxiq1qmivl0sgdcva6992smmls68p";};
+linegoal-21523={run="1arnfkijq4324jzyq2sn681rk9ncbgv6zqfrvlbs3vic8wxj5c20";doc="0mjpbkf6vw0n4ddd9abrah7rxf51gmgayspy6jpnai1wrzv0aby5";source="18v5r4hj2jpqay98njcyijwvrbc067c49jrhja6i52ddj6h9q4wz";};
+lineno-67171={run="0qgm0wlsq04w8cq435px8fxp6p9k064i7j42dgi9xx40fzar0k7c";doc="0clfrg91m97ija67d7ykd3yp8r2zng0rl8hrhdi5hay3b0wfcs4z";};
+ling-macros-42268={run="1qr7bpa2wcp1hqx3ckid8h41lp8idhqqnnbdv42j2nhcy6f409wf";doc="0lk4whkamzsf9mriiz06ynpp962w5473ppf4n36q3bb13amyp5vk";};
+linguex-30815={run="16rqzqipzng4xd7yz3i6416231cfphqbwq8n6pfal83awzd660jk";doc="1l0m6k9adq0zr88zbqrj4jl286mwarr6fiy4181bwxm9w9kkxs04";};
+linguisticspro-64858={run="1aq5sz202hipjbimm2n8krb78q54ybjyxbymmv1nxdpjxk0hixz7";doc="08pbwqz6rqqmw814c54g124h6ni6bpb39gpd2ibp5gxn21agqa2y";};
+linop-41304={run="1dff205vbsayq2jfyk0vvbz5yks6gy2bm4ylwwk28wmi55fqjycp";doc="134jxv5bqklpdhd3wfbqibsp21jspmq9iv3fik2igwsbn20dzw4c";};
+lion-msc-55415={run="02xxyl35xl6c48x0fdlfkcv4bfhz4hghp1v3ff6pf9yl3cvqlh15";doc="0nycprcfi6769r47llwma71hzdb9a6sprdkkk6p898pmk367wbnf";};
+lipsum-60561={run="1rfz9f6gaha6ccx1s5kij2zkwdkm6i2laxv5r9jyjvsawqwr0lam";doc="07wwbyj7i8cdnq8g364c8pjfkc0l739932n3jcmkj6vs7qbmkikq";source="0349nqaglq7cnwi54p35anv7ycsd7a92jd86l6l2n9pmvh7z6py6";};
+lisp-on-tex-38722={run="0g33w5hwgpw7hd62lij0h5n89n9r9ynlxswb34j0aqf3x7nsdh8m";doc="0rgjcldb2rg330cp8m5vxbi380xla73jb36nn94b2awl4g34bpvd";};
+listbib-29349={run="09rs3zkymlnn9fgsclnfpn1mrmxnqy8kd5pmdiphlga1iwfj5z11";doc="1nz6p8z4yvh91hvk02y184xl6fd8pyjlpjmlv5zpmcjillv176yj";source="14jrkykx2myp5fghh9qj66i5g291azm6cihi12c53bv1ijcyl1ik";};
+listing-17373={run="0kpf5svycd71r8p61y83wx1k99fwxm95qz5fbnqkfrq3c0113h3p";doc="1zd0mxh0gxlvqrwxvycqr5yzs5fns0hrkn6g6b4m1v6njv2f9lna";};
+listings-68476={run="123agzj0xmm4gprrdyj5223129qd360z5vw57s93d187hp29byrh";doc="1r3yl3z8hpdqsin2xld6xs6ywdk0k7ykc62l68bbdasc1bw22ccm";source="1wffwc76c8xvc95yg72j7z1iqzij8jzq2yz5mqc70mivl0amqcip";};
+listings-ext-29349={run="1r5nq62k8rwllcpxwpkh2z0gcb1rlydp9nry8wx7r0h93hbmm2z7";doc="0jyk8z0nsdx2yljly8nd4g8wnw7ggi6mdjw0wb7y0mb5wq47sbpp";source="0hd117168f5s1cb2iim6y198lnh05ph4ib7p666yxvv48wr0mfpc";};
+listingsutf8-53097={run="0scs9dnkl2hj95zgjiggn2ikq2nf62q97nnml3hbvmwdargassmh";doc="1s7k2gr69xlxln2yi5wyvd69l2qa8v33d92b6ahgxxpid3437prz";source="1bq197100f74sal26w0r4iv6ys2qa1ylbwbyw3hm9dlpb6kmdmgq";};
+listlbls-67215={run="0r5ns594dxmq7r9pkk2hk482caapfdar1gwbdi6fw396pcnpw8p7";doc="0gnc00jv99rvf892q0sncr7l5pxpndrmw6qsxfbnyb38yr675fk7";source="0s77rh3480i9w06a0nnc7l8gm3w1s6bik4nl15idb27h5a5fq302";};
+listliketab-15878={run="088f2lm5lfbns7hd1m06f3zn1cjcbaw427z7zl5n47ahrvcz9p94";doc="1llrdgxp9mghs51sz4jjhbdllzlr1xgnfskask532zwn1cm6f4vd";source="04xfgaqpcskx5m8byysvd2rji31km9c6cbkfzf3ybj4a5bmbnq58";};
+listofitems-66655={run="19qh891v470h4617fj9ajddpf119qh087ng7ay9q73qhk90fhs62";doc="1s7gl5ai3xdpj05lxhj80hc1i48x2lhcanwh4v3w10yyzf13axyc";};
+listofsymbols-16134={run="1qp5y4rbnlpaa3nghlxjn5yzhskvan9rg0g45wqmg6yk9sdll5b2";doc="15sr2n0bsvwz6jqgyspj6kxg511jy3fr18705pyp815hg4maxizp";source="1sjg64imcxxqq8bsqm98954g47nfambr6vsyizkz8zqzmnr5vd80";};
+litesolution-69115={run="0wl8z1zzxakbr6ackc2izfzwkqacfznvm5n96gk56fnqjlz3d378";doc="1d9ciidasiqw45m9iha7j0vnr4wmi7gq7mdm2g6lj17q5dick3i6";};
+litetable-68782={run="1bil3n27ajahpd8zmwjz6xab1ibc28slg5bicb6x5yzs5jppqi4m";doc="1qv6b6qjrxvv7sbsggky3mylnnp1fzjvbbk32vvmnk4gi1cnm264";};
+lithuanian-66461={run="1jjbj39d4idfsx86lmpj0w1k6gr6mwr7sxvcm8wag47rgd05czcf";doc="01r1wraa7jgvblc3wrdvkhccp4ba8ps112ip1v31vn4wbnlvdyax";};
+liturg-15878={run="11l8ccpq2mcnpsfxry6zzjihj3s7s76p9plh7afprd7j2nnq1a79";doc="0rhyz3162nzh43nrxwkynr45i4w5pqb5ip53x5j2k2a4cb4k1z86";source="1hn89rf3xi66bfc3kzwbvllfzrxr62gx60ywbh8gkrw813n18lll";};
+lkproof-20021={run="12bj60lfqlqvyk020lv1l6iinvqx4cvd6lfz4vhblfx3gs3xmcqf";doc="05sppy6q0c2iangbzmxv5qxla8slc2k0fx62f6n2fg1ncgvfl7qh";};
+llncs-68731={run="0mnfvhnq8wwsaz9yzw3a9mkc4xnmq8ihkzhp1md0v2pwlzsvdzlr";doc="0bpbvp85v3qqmpakyp7yvm1vbibj9bbca72v98jr9f544kd97qzx";};
+llncsconf-63136={run="17x1sjs86vl03dxcz3qbwm7r21hmzvsvsr9qa0xii8fvp1yb5pxz";doc="1dq0v5wczbhk1ir8fl97c53sinpqnvv9v1hff1hzc3rhbwh5smh2";};
+lm-67718={run="1b4lc6ipij5iws4rgpv3sjjwrdbaxnwiqdbyyj62jzc3yk999m4y";doc="0wdnpnsbg4gvahqq8lv8ny36xwxgph04sjn64pl34srn2pk1jsxd";};
+lm-math-67718={run="0vsmzr71d5iqhr9bwjnp7khzlg939mvfnbg846854cxk8wfm9hzn";doc="1j6jcki1hxdr17njy8sfpb82mxh6bpllccf3hnjvylvpjf45nxm3";};
+lmake-25552={run="1fk98049965cqqyzdl3yl9iblk87gwwrfccr5jqpdm5v6m8mcwrj";doc="19yqngjn320sng4pg835rffk6d2g3c5wyma46x1jr0bccv8s1990";source="1p002ywz3pxip5v4cd346nmpg0gi7wamlcl7bc6f4zvzqp0cg41g";};
+lni-69361={run="1slm6l0jjv9ps8qzs5ld774iibsqm4bi916pyypi668vpf03dp1m";doc="15125l53k3v5g8gg4x8i7izx2y060r2mpqs9k60jxn4ljlmh0cpd";source="1wlvrxfj254ap9vh0wnzana3i1wryqiqxwff2gh8lrh4nh3yiq01";};
+lobster2-64442={run="11kx0xhhklgrj3rhc5q3c5hi61444vr4936fpq1nma1yxn7mbyfz";doc="0l51mwqiq34v22pa4rjj4c6q7w2x9acdfy02hb8gmn80i91fijpw";};
+locality-20422={run="1b6xi8zzc9x8bc54bs2s6ryn7g2zfpy1zsdddlx3j8kvmbmgv6j9";doc="0z0vrx1dy5qqgb2kx08qc2r06ljqnfsgiz58hpy6ylnlyay39ipl";source="16xp8pc62jzgcmdhqpmfi54y5aaf7mx6bqgwslpwixgwym0i69qy";};
+localloc-56496={run="0ynzcib8hsflpjhykfl348pmc508g4i3ig38wjsb3gfm97mlhq24";doc="08aiqc04rwinqr510r1wkzz43qq4nks1varmxyjbnw9acndn94ak";source="1wcl06i82xkp6m5m311pn1ax42avlp6n54ad1j450apgygdszmik";};
+logbox-24499={run="17qbkfkbz35c1a2v3agrpbkk1bxifacj4ccn3mh2w4kv8z8zvww3";doc="0kc0gldcfy4bshfkl7vprg80ywwsqhac4f81f2f0i6ql4jmlqwsj";source="1cj2gb5apapmhxc9vkypnq17w5fhnwdpp0qhi595gm5j5q1wqcq0";};
+logical-markup-utils-15878={run="0nc8kgyplffng9429h0g4hynlwwxpcvnirxg7rj62zcjcg5ijqvv";doc="0x3j3fy8zd2vydzfa47ra9w8bqvklr2im8aq725nwpxbyyg3m8v5";};
+logicproof-33254={run="10b55lwrrq1aqmp9njiabqg59xdrd5g8skbcrlhs621s1999dq2g";doc="119zgxwx0q6c4ghpb30mvpdwrpr0xvk54hmj6qfpih0kxj0zp1az";source="19j00a28pz5dp29sx61dnrpqyl24sx9apf2ck334ap5sw7awnc70";};
+logicpuzzle-34491={run="0zsg11lw5x28sik6ifj2v1zjvm3pcv4vf7w2pfxcr395vmw33qm9";doc="08vgi2s2cy09dhqdmvmq1ijlw83dgjd7xjfdhj28vm9ny16zmydz";};
+logix-63688={run="0syvhp2zn6rpmg1v92k9df0q4kv79flvj93m7761675fb8jcki0h";doc="1l7kyw1pjr4bpj33sy2dvkb1fvl39pb1mbvwz29w6k4038hg50hx";};
+logoetalab-68916={run="1qmw240mqsh2s7l2r8nvw9xh3zwa99g01szjaxn94d92hnqmb4r0";doc="0rkj5gcp01xcw6d3vascvp3nw2ng5gxi9znj81yasgw09w2qyb43";};
+logpap-15878={run="0xrv4x46m54b4gfa805naab6fgpd72fwqnyjjxw0idy9kb3s3x5v";doc="1zb6qyxrqy07m65i18dcli30gb42y6c3ffr22cpxa7r8xmaprcg4";source="07cm2gcnv6d7pzc9d2v3bdvsmykqf00bbw177mqyjaq1chc0xpna";};
+logreq-53003={run="1zj1vn0yfklngvfvcr0p8hchar220lwfrznsq73jbw9zzjx47v4f";doc="143b5bb1jkc9j1gd46c28q4zq8jlh9wrngjw8q4prw5dkfnf1s8m";};
+lollipop-67930={run="170q59wqy0x5zhziaycmfglv1wnc5kf252ni1r4vgrrs3rlwiirr";doc="1wj858kqp27amx3jpndsqma152r40agfymh9ah8s42pn6kfl4dkq";};
+longdivision-68609={run="1rnbw3y9vzs0nqyjw1qdj7mbiy1mk9l3ccygnn65495smgg7h7b2";doc="091b1v1hwbifv426w1gglg273c9ck0n3bzj3xl9hhl27x1qzxjcy";};
+longfbox-39028={run="1cm2zp8sina312n72bd1xza75yi38n1s2ach2f9sjxdx0m5c3ywx";doc="1wd6hdarh4nm6x4qn789flnq69gq5p2r2pgybsynbna7ywar0l5x";};
+longfigure-34302={run="09pnqp0jfhsg7i8z241ggnx04j452zsg1zqmwy0i40fp2s36a61c";doc="08y2a2922zk61iirlw24kdsf473sx0b44pjzxihmpcrf19vg2c12";source="1p10y4nwz9wj321mf36avl3w6zwvspnb9cc92h9jf4iawnqyp8p8";};
+longnamefilelist-27889={run="1nz5n1g65fs7xxd4l0c9xdr2z46mxhb0fkmf5id4hrifrbl3jxbw";doc="1v8i6ax2qwz7d7mi0bnpyllbqyksdd749s8pr95jfw1fhi07i5fj";source="1615gzf3rjfr1nlmpgcrvmlzhif13g3kn210xq8p0vsv20irnqa3";};
+loops-30704={run="0hml4j8l5gdz1c2qfpsqdpha5dqjqx545am8x4vzs57ga7j2va4h";doc="1jf63snh8bnyi1j16mjs14nyqr4bj4rjbwd3bs1xd30i54d5584s";};
+lparse-65693={run="19zvsmv6p650qrblallq9krwajdabwrkhl45723226nvrszsw0r1";doc="19j769yldcx498ycy0q8vkgpmaj8zyn9inhix6cpsrg42fz3ijjx";};
+lpform-36918={run="033w5cd8z7r02h4r2p8lha6z81qqvky69a7aiahjpd15smss4wjp";doc="0vnz4simqdsznciymkqyy0cpbnxfpkd54wdrcn5ra257a37x1f4z";};
+lpic-20843={run="0axszk7cpnc58rs7w7pwy3vpj39l6zc27g8lfxjzkzlnc8hbnycd";doc="0hyg9v30h6n38j8a4pbqfjxkqfc9ls3hcp1cf8n8dwr3ajyhvins";};
+lplfitch-31077={run="1qjj043c943pj0pvzyhs152795zyskcrxkkmp49jxxm0hi8ww51g";doc="1nq554c0vjmcdb9xyprjvvvcwrkbbh8s1x0ypkzi0gqds4m4a38p";source="0cc04s2ndbs8j2xg4afxxyi2l8mmnxvgfaflak64v6i92n9icfg1";};
+lps-21322={run="146a42clkjyrg046bz43b2rpvz3i2dvhcsd132bzc76d3x0sqps6";doc="1nwn4dff3szxlvw7ydqp1ylw818maj0ij1g08zlz2i1gclizwpa1";source="0hzmjvgd9y746d9983y73jnc7pl4y85lk37h5d6j3jznnrdgk7b8";};
+lroundrect-39804={run="0s44pbvm6iwl2jyffnxriqlmpp6zs1y70z4aix8wwfasx86gq131";doc="01ncbhr1x995763d1dnarhy56d7mq3r8k1b56whqs6kq55115w2w";source="1sh8ypnfq4pwaqd934vdh77svs9d3a4114vghg6m4sz5fxh11i39";};
+lsc-15878={run="129vlr2gnirf47vs1drcsml3w4jcwg78hmya4r3nspaqm00b17gd";doc="09faqnv9k96nwjcvgmml9f02vdj5hadbmb1lp59xk6jikvybv436";};
+lshort-bulgarian-15878={doc="0qg23asq2i5mqhp9xblv5hm3qxmd5886d5x0gq1fkdbyy9gsawi3";};
+lshort-chinese-67025={doc="05b9fq4jhh9xifn2lj58fs17fc0prx915gwfz47s92spvv9fwbi6";};
+lshort-czech-55643={doc="0ar9qa0cg0mjv6ydgx1phaa1qpiy25s3jciznbylgi5xprvnnfa9";};
+lshort-dutch-15878={doc="160r060gmw6f6lgbnyvfxafjpqvyr4jwd56ddkjfm3ir2bfl973d";};
+lshort-english-58309={doc="0pzqdbzynlwvpamd69cmfpa8jdcvq96qjr9k1fy3dxpzi2mapvhd";};
+lshort-estonian-39323={doc="0dfwp7kkynpskb345i3yz7h5pvc8iljqg3q6l546vrwla0bmb95c";};
+lshort-finnish-15878={doc="06madlm869kmwxprmy2c78ma4s8zk8mclzmd4xdl0r4mlhk4vdsl";};
+lshort-french-23332={doc="1hdl0w7b1ablx7qfcvgniz7dcbgazb49b8wfw7c08hlb38gxfqh7";};
+lshort-german-55643={doc="073v7zvk8xri0f05mr0ad770p81akl9b9cnia1q4hcma9fk89k10";};
+lshort-italian-57038={doc="085ydria5q7s648r7frl54sa1y4kyr569zvqjjkancfd83h873cg";};
+lshort-japanese-36207={doc="0mfxig980jyzhay1i83d69p294hgbr92v3kk2a4z8ca3fwzy8w74";};
+lshort-korean-58468={doc="07660lrss97hswmis7rgc419h05mgrvsfrrwmnrwk5yn97flhhqd";};
+lshort-mongol-15878={doc="153k4dzia30fpx847wli7i5p407a808gmj3p7jifq5bpx479qg1g";};
+lshort-persian-31296={doc="0b1b45nh2d3d3zv735dymgyllj6m8i57icbihjkl1im0nghrzklk";};
+lshort-polish-63289={doc="121y638k4f4pbjpa4q0n9qj2w57624q2d1v4jz09qh399fl5yk81";};
+lshort-portuguese-55643={doc="0wg51rjcayiizkz0vvjkirrx19q8fbnfrwilgh13prlbpams1hsh";};
+lshort-russian-55643={doc="02abh69xl43p56fcciyan4j0z4mqq2j7ynwazq1nywhz37d6zn7y";};
+lshort-slovak-15878={doc="0b5gn95i32dyn8r7v2cdcz759fllp3b0zwx17adjs282n06vfymq";};
+lshort-slovenian-68204={doc="0cwjg0z5vr4x93bz1khwl27rk8k7kpjm978iyzn6w7gx3wi87zr0";};
+lshort-spanish-35050={doc="0ls50syrg3dl5dl5a3fi33cr9j990l2xr6pribn1vqglsqrh191l";};
+lshort-thai-55643={doc="16r9gx902a342q2mj570y269yw97yaj6hrbqrk4h49ihm695z30i";};
+lshort-turkish-15878={doc="00r6pv4z4933jw072djdasd2wp5j05wghln62ga4g6y6jblf6zks";};
+lshort-ukr-55643={doc="1nsah1h3z3sy96a9x0mfdwby7pvvjwq7zxfv2s8nvsbvnn1al17s";};
+lshort-vietnamese-55643={doc="094lfry6cqvpk02c3acss6581mgb7j30fnja1b3qwzxmyxjdblwa";};
+lstaddons-64967={run="1yyfgn2bdlb5gjb2qicx837wl03djpi2cwxzds3bp3n37h52k48c";doc="1lxcah5zmmgv25hm6a3yfls7ysgg9dfzdbc3whdvw11mh3pwkiw4";source="0bbppx159q28sak5i6hj6zm1kqdgcn61a6kw4gcvhj536vnd947h";};
+lstbayes-48160={run="1kpkr8xd1k1iinrp1ljj1wjphn0c58l8f6hci0axvxdklr02s3h3";doc="0x288aij80j9vy6bscj3w257nj0y3z1hf0rf9yncs13jsxr8rz05";source="1hcgcvnki1xkh4ni6jqcazl0rjbhfmm6gbgsp9n5qavdgnv7qzmk";};
+lstfiracode-49503={run="07fdzwb4k0dv2mf6yl31h58i61hmw0gfpgrjdnz3v2rnw1ip8kgq";doc="17a8sg0srw7096r3h7qa23msi6pq0dagap3a0rcpclp73z3gh3wh";};
+lt3graph-45913={run="1w5n9y7pqy5zmn6w9bx58nnawvhp5467d150qxnj3c92gh0qbj5i";doc="157y7a7gpgm6dc7hawdhxr0v3ns5kibykhkg3wfb5r5fay47jj4n";};
+lt3luabridge-64801={run="12j7x3r286rsj54h6l0nz3ilnf5fnnpw51dbis20bsgnabpia55m";doc="04k331s04qgh5hg007fs5rhvg9cq0bm7l9dcmkg1yj60h4rpcnim";source="0hyv4jk59l7b1lrxcvkxjqbp1sjpkdig5926lj3nlx0ih39zbwpa";};
+lt3rawobjects-66619={run="1k65hvwwqqw26mqm248fd23xk4bgm864bqnyc759faya84ib8n0q";doc="00l496344la7q8jz0nr895cxir6zn5pcjsn16mc3cd7lpiclxs69";source="005iwxrraxmirspq3881mc2pb8iikc71p4g0dwxbqp38c8v8djb0";};
+ltablex-34923={run="11gazci0c064iav6124v4szdbj38anqwnfgh8pfpdq9zff0h9g5n";doc="0jjd5f3r67lrbl4vyxjakm8l8pdrw9vm1dzhl5305ga8vvwb7gn2";};
+ltabptch-17533={run="06ww90fh24s6lmzyvmqjh5gcr7vp3lq6cg9q6k6194g4kay6yx5i";doc="0yb41cgqpgcxk27259gfz14v9bpndjg51i9nmwr1qwyvaqd6jvjw";};
+ltb2bib-43746={run="0glj7g6zyvm08paszjk45kp65aac6i3f8spf6zn12idf1h0b76j2";doc="0j1p6bcwwgz00n3wyv3vm02z295sj9xf93v946k1xrv5jc6pg6lf";source="0g05r6b662jx2s2kal26b3lv0dd6r54fb8m09yv5d021y1fm2nqg";};
+ltxcmds-69032={run="05wvxr5bsrfgyy5aa0mrxqw0vi8m1ks5ma6fzlf8ngnbpihr2ggh";doc="0jnqvpc40mazy5ka1451w5rdcsl5q6rza3dqkhqpf79lgiswxgc5";source="1p7gzrhyiaiid1mpqfqlm6jfamdd8bvxx149lsnvhnxh3mbxlydm";};
+ltxdockit-21869={run="1krcr5qlz0648ibj5c1jd0y4rf6rg33r0clyvdjm70kq26y1lqww";doc="19jc49p978z0hrx7p19h33nc65a7vjhlrfszwvr6mln01la3ivmq";};
+ltxfileinfo-38663={run="0f11qjq1a3s5nxd7z9k19yhbl5219nn4fr1vfcqq1zs8pwnsgqzx";doc="1qjs959a28cqjigdml0jgyhllyxd5kj276akz93hdbcd6gzs9ss5";};
+ltxguidex-50992={run="0qv1p01y18ia4w53dvlfhdrgy1xsicaigcas33xs6yqipr8cwgkp";doc="0j4h20bblkwgdjvr2ihfy32mzyb9parbjgiijqf9sfg2k2p7xpib";};
+ltximg-59335={run="0w53yx4bsj5c9djqp82fy3yvfaf7sl08d2698bq1bzl13rlnvlxc";doc="1rni1hl6i91dw0fdynkajr27gir1a7qyagmpmypnpcdbqv0rq0hw";};
+ltxkeys-28332={run="0yc0c6hh8aiqm695by6229qqhv7ym1ssz6gpysy6hb10qrqbywkx";doc="10v6gw41aa4ndw2x4rwyq9x66hsdl4l4j0682dcfm4cpc903caga";};
+ltxmisc-21927={run="14llkpla8gpx7q6a53sd8a0a42wgk93fg4mbl6pc0v7v1kjblr5m";};
+ltxnew-21586={run="1sidvpbqn5b8szbgysi1afbw5lw1cm8ivhq12sig0z4z4ljp3qf5";doc="1f69xq5753iszfa2yr6dfmz1agic26j4qx7kkw9j23nhm7f0lvva";source="000dh3d8i57vsa46np49ml0sb4j1n3gnpcfi1ghj7pz5bn9br8w5";};
+ltxtools-24897={run="0ldvvkvyw1khfvg80ana7wj20917sjzf0lsp4699hf4jvw71w6x9";doc="1j51wpw06jz7xb6qf6nc52r5fl31q6zhsdm3v2ngc1hd03dcxpic";};
+lua-alt-getopt-56414={run="17czrz46xlbj3xkh4jwdq269mqaq7165kpkhhqa498hrkcgdgaak";doc="1zfwvs979c7s16vpv2k9l81mcmm9y4qdjk46l8ik3123dalchv6f";};
+lua-check-hyphen-47527={run="01q4j9bb19lf838pd7l26rkz1xr7mxcx4fsgf5xd4sdif18h56qk";doc="0iaihbrppn1ap7bqvn37rk8b6m4lwdi8w4zkshiqya1mphhsfjg2";};
+lua-physical-59138={run="1rkf3cgzw6lyld82p8crv8h3swk4acq7b0i9c20q5dksrxcr7vmh";doc="10kzyj9k5fqi0jjkah3xx2cgn1ssvc3byihvs66qpavd2gz25vg3";};
+lua-placeholders-69404={run="135njnv5czy2fqyjchkibxnfav5m0lbg35z3k9f0ag39qf7z1ci0";doc="0m9rivk3gcbf84z8jp5pj58r88nmjmcm1w122z18q92m7kmb55f0";};
+lua-tinyyaml-66776={run="0wm23v7rm1mr2l10cariiyzv8f64aq0ms154md2ww9ad4qmsf3km";doc="16990nj13x5452c5mb8ha4hy6n1iyv2xsjqgipv27dhz2g176qy6";};
+lua-typo-69403={run="11g42k7431rh9ih81sl6q331k09l8cy1qw2w5n687736hvv65wak";doc="14rs9ds0mw796rawi4vwq73apyswvy6zlml36866pzy2w8mdcfv5";source="0kcjlddqjvfpjqrj690dwkzjf6b2qqjc7ccix96hzhb37sxmm2qf";};
+lua-uca-61023={run="1klxyb2iw6mccm2dlnpk947kim6ysvkykz69z7crf6lyzcy6lmvb";doc="1605lw450b64xx1a6lxjh9w4jda0n3d0b3sfvxl4wngd5y2jckzg";source="0z7fgyp7dh4zkz48mkh49pngaiyd58ckm0ipd3z626alz4k2jspq";};
+lua-ul-63469={run="1yj9044y9xk5kswl7vb1h5fl55pfmjrq2qnb2caym405pw0pn8pq";doc="0757s68bdvbaqjs0a9wds4x1sxrdabgi7s6jx1ibljb2wndxvw60";source="12x006v3z95ygpldh5x394h2igfn0d67bgmqqh40b5zall17achy";};
+lua-uni-algos-62204={run="0msiywf33b5jpdzc66wyvnklvmvs4cpfq3f6bsplgi22x8nvdrvp";doc="1sfswdkhbjrjd4cjj95lbc1sq30j9y5xi35lg3mjfpdinq43wfr9";};
+lua-visual-debug-65464={run="1yby9rmhq63md8cb58qvi4dzlvw7hnfqicmkrap0c4qamva1aal7";doc="1g48dm1is12zj2ncp5lxf9cv9anq31wm3n99kjw9m1fsygjfsz1k";};
+lua-widow-control-65084={run="022g3aff6xj47wk9kgmc7l07n66milxyxdjpxhp0a5s1wcppf3y9";doc="1az40nki14y88hxk44lfl7czvfhz9lkr3lfikyf2bnjwl2pdmc13";source="1cdpa5h4qd6dc03pjyisib6hndgbr6rxy2ngicfaqwkk25ybrf1r";};
+luaaddplot-62842={run="024k6k9iyqiw29l614n0rj0k32y50fgisd2g1abfis7lihc1nlv0";doc="044yp2522hns6hshlph91c990lh43bwvf40cgkfid47mi4zr79l8";source="0x09ac3qlz7p27nm478lcawdrj98622527ba4rz7004b5p2d8w8v";};
+luabibentry-55777={run="19rvhs12gw5vdq2vvcdzbz4qd3y87qjvl9x4bcqbncqcvwg82cyk";doc="1raq564ad633c0xbwx6r9hhwmx1r7vis283rfh67lixq3prl0nfl";source="0gqbmg1c4wm57ga8gx9g00dfbczfvhqsyl13q0ba451d3kmh6klg";};
+luabidi-68432={run="1kfyazn8v1ks5yvac4x5cvd42i8li0sgv00plj92c2m31hfxw2gl";doc="02387g70qsxs7km8dlgibyx080jwwjg668j0w12v3hz67jvg5ymk";};
+luacas-67247={run="04507iwzcyc2xgy6sfawzj6l4zrjq4iaqnb4946hdfc4nbx177mn";doc="16h9v145l1kv00ipghfdjdqyh8giq7y418664806h6gv812af7yy";};
+luacensor-62167={run="1n1dgnamm5l3hqpbrm4dwgsayqmr99m41iy4038s7mfzz6dkf0g7";doc="038838s5p5ynvxycdhassvkq1vhpv823bfr5ppir00zd7mv8c7b5";};
+luacode-25193={run="0qk8vadwymhcm7yw3sffdh9i171hl8vg07j1b5gbsl1sa70cpam1";doc="11d6ak1dvdx64k0i12k4c5kh24f5vqy0ihvj9a5lxa9gqypflrga";source="1fafh2nq66cz01jsbkb0mk907sppahlswsbb35pa3q5j7iqjzyav";};
+luacolor-67987={run="1mbiwswai0sq8wi4vmyrracygdd3a1g45m3qanpams683ik1syal";doc="0aqwjckc7cq8z80bjyl6fz2gqzrwwdvrlilpcf710wlrqc5c023r";source="07dwvksaxidr4b7z7fx68q2kcclhmpilvy1xk1xjjp07s5vgqkkh";};
+luacomplex-68883={run="0hd7g5fg9dbacbkk94zpjk7yjwx3jp70l2ia6wnzx8zqajs4hc7v";doc="1hsr4308z3b2g3g94hcn2cwin3awhhxb1hzy2c0nx77d0byx5kkc";};
+luafindfont-67468={run="0aajmgjbh77mj4qv6d1765bn66qjfk3m1b0bg286lp77c0vsjrpy";doc="0bhr19q4j9fqy7y8mjiz49vjd13s1wpdg91bqfdyx674l5sp72zw";};
+luagcd-68893={run="17nh27fkwjrfpvf0fpfbqcqi00bgchw0zf3iznp3iqmjyvrdwn8j";doc="0lihscgrlrjrc3djqr3v0zwdzwhmlk7r33rg0agasdhcndw5hb3q";};
+luahbtex-66186={doc="1hfawh7vig7jsmd1y0qlbn80x6770q56sqd9rx638js4p5a4di3l";};
+luahttp-67348={run="0nrk066mdzlw8z55qy8w3clpfdiy411mqni3kmn17adp5iswc9sn";doc="1xinhsfcl4xz3xziv0ch0rhgrqqzmrr3hs5h23hdyadayxk4wxhl";};
+luahyphenrules-56200={run="0msfn7s35xhpacx745w0zbr6g5pbhhm4pccd5cmqdhq6dh0fjw2w";doc="0y2rxs5mqyw6cyrmgsqqibsw45qjlzsrcwpd74m9l9d4731nyn37";};
+luaimageembed-50788={run="14xmb1cjqvpqwl33qx7376ndsbkql48v6094r66ksr7vlyap5hgp";doc="0r0w2lzxf4avfsv5s6fx64bw300vnmympfdfzz1k05c5c2kjy9x9";};
+luaindex-25882={run="08kckg0129ksr8pdm0a2yawwb3fa5js3mkp6jd8f90y0w7acrvis";doc="02w8s71qdkxznkmqv7c62dhar2x6ia9zsiwd29qxjf51dpwj3mg2";source="1v09zszin9f4k3gczrfs86zv019l42d6khacjdb3qjp2gg8w9qn6";};
+luainputenc-20491={run="1wsz8aw4dyhiw5p7gyf26lcixk1a8czr06akd1h6dwj6s5vq4vka";doc="0h6wjb0kjdqfrmzikvbddq4w31d55mxlcl5n3phr56fa9i49qmgm";source="1yps04v6fvqspq3rip0c6pw5a5y3annwfaij7w27i53419h83lbd";};
+luajittex-66186={doc="1qfbg0r6gsncgymh00yc83kcayd4m7bvryap8f63sm9s9bzfl6yv";};
+luakeys-65533={run="1p4hysck00vgpdnba5jnhaslcbq5cpyw89f1mdn2201dr0nj46sc";doc="1s46w0knvc5k7d5nqvycqschsf60p0qdgswwf3bs987m5vi7jmzi";};
+lualatex-doc-de-30474={doc="0vnmgs475bzbqi14m9sm45cwjfsbvbk45wkb8m73j1bnk7wg7hh4";};
+lualatex-math-61464={run="18m4jab4yy3fvwkn6fyb1qajsq4nl45v06l1kdjimcws5vj0wbv4";doc="0di41c5rk5raf88hpz59syhg330can3gb5s25n2y5c47qj0aph1w";source="0v470ky6shgcfy44b6a1b987cylqiz6rk0dk9qfhiqd6b93p3axd";};
+lualatex-truncate-67201={run="02plqfp0xi406wya3c6cdgj0777m11fzkbk9nbharima6zhsc1nb";doc="0gkgbliv8bzpdk27mkff02v1d03vggyq4nk50yawrimz0k7q64bn";source="159wcqiyb5rs9a7wfm5mj5vcqh4kr9gv4pv6w0d7vfylkrlh76nf";};
+lualibs-67994={run="0h9v05ax34iir2i1qjzqi27qqnw4szch42mfa8mfxvxcmgcjyqpf";doc="1wn6j8fhprq0i1k301p5k1rw5dyavwn1lwvrydf461nwfvahavfl";source="0rchl8c2dn0f5bq94h56ncy4rp2iisr3j9wmp78c1bm22k9xa1f0";};
+lualinalg-68918={run="0ma2na0ms6k07aavahnpfz1wddrjw2zqq0znxfmib50m3nqh3r5y";doc="05lpj7b9bg6w6d3hc20cnqd50m4g0lfbgj65lywnk52klkggiyd8";};
+luamathalign-63226={run="00j2vngg8sqbagyhmjv8lr8kzfsllllmm2gijhxbm8xgf8r7f01y";doc="0b2zkyzy0rq2cfbk205nixvflqcxgc1sfxiqbiqhz2yhai5y87i7";source="1svawaz0lj4zilykjg46av8sky18pwzqfnyli8qldpby4zmnqgvi";};
+luamaths-68883={run="0gcri65p0y9rmq19rgf79jw98i855cl30al9cpq3znp3jjyikfrr";doc="1sv4ygd6ypf0hhcbhydcr1ap7ig26z476i8z0gs5mzfs08rdq5mm";};
+luamesh-63875={run="09ldwjfa0dfhgqv2clyqzd8nzq596h9fz72b1jh7vqjwkn5774y7";doc="0xnk2mcw24v6002v523m7amj6qc4w3h655l1ss4rpwvv6virp3kj";};
+luamodulartables-68893={run="1f250s8836j4kgdzii56c0248j5sp64f5wbqkpd6p69wjz7pbrmx";doc="0pdk7x09gmdv0lnwkvdv3scmbgfgpyv069fa4s5hbyvwskbj7fmy";};
+luamplib-69069={run="055wa9l7bh6313x5dgr2x5idgd3dva994fq9ip9bxg9iv1bnxw1k";doc="15bwxh64cxqz1g6hpn8vphdd1z0f35ldiraadqqw1pf9gnf1fgxm";source="1w83x0yis4rddiqm9qdiqjm2ifg2d1ah7f4f14im9h4r5z37bck2";};
+luanumint-68918={run="14z8vvxxivi2i61r1ydq1csbxlm3621y4j9hx3p0m9s1ngcy4ryv";doc="1iss948y9rhg7j6am6vyc5y0s1cmn43k1g8vgcjlzbp8x88mwlwx";};
+luaoptions-64870={run="1lkx7ynl6xci7klgi2h7qbyxny65nca74xz2bhnhch6zm38rgsa5";doc="02w3623ix7g67bz21262i95gn1m4gzvlvn08f7v0x0q5lm7x1f3x";};
+luaotfload-68143={run="0qxjljd7b0r1h6qxmcl9k7rkpkfmcmppg3yy60ids37cf8sgvjpn";doc="0zw66fxxd02h39dhadp1i53nyp50kgcclkp3fgz5pi0njdm02azc";source="1jmvglj1mv766cxzj6bnagrlby2z7w3gkpqls19ic2g9a154i62c";};
+luapackageloader-54779={run="1ynqy88drl04ld2lycrpvjj3cxddmbycznfamhl1bmn01c1q9784";doc="1fn9kqab5hyvscjqmd34vxjkdcr7bapgw7w3ckwvlsslxrv22rfs";};
+luaplot-68918={run="1lsc02qnqw6p2qamx2754ywk95yilq8jvn3vzra425iy675gl7kg";doc="11xl1j11p52zxncgcmg1b8x7isixz4vissfxzppc6ndv5dvqk3aa";};
+luaprogtable-56113={run="16jmy3cvn7rmzf5i03x51yp5l90kmrdy0iqg8ji4z3xwrf0iq79x";doc="1d0k83dyiml9abnfc3b9l4n6w18lgm37bijr8xj3chyv04v85392";};
+luapstricks-67207={run="1pzhv15ins6km9kmlmfn6qwypncjdsnvrv0qfqnp4zkbdy0hjxmy";doc="0kpnnpq7njva8lrk9wdj0l27iwkq4vhg2w3crxvnfymnq094gklz";};
+luaquotes-65652={run="0cjikz6739jiqadp28zll72i58s20dm1i0q9kbd3q2y69l3l727r";doc="19597kvgz6ggjfzbdkg9f5rg9qag9mrq83v0xk2w6f2k0n179d5f";};
+luarandom-68847={run="1qg41y50fmqq623wdc7rj17az8k2x0fwgjynq0f6213swx3nz3hd";doc="0lzrcg3vywprj6jksnwr2abd9qj1vcqqqk0fz9nrsrg3hphn6v0x";};
+luaset-68883={run="1cnc3pdysh2xa8jrjn6kx7lx1avpr6x11kcgyhbbzizraara656z";doc="0ynaizxiqh3lj1nnp8wcvd88z5jwpym2zcfvcp28nzwzhvvagccf";};
+luasseq-65511={run="1cxp3x3d346k7j6kh1bch4d83xb5ihb6h9jv8l98jcg0fp6zvy74";doc="1pxx09mvdn6pymsv7959bs5xm4568nzx78g8ikyj6hm00zqphaph";source="0h5zqaz5cvqgy5nghvazncwdxg6cmbv6sjlvp6f6mkgy2plpvbxg";};
+luatex-69182={run="0z08r0hjkcp51qzffqgf80df9445xiagi08cs3lyjfjn578z813b";doc="0cgml9jqd905jnwml4bwaqawplqp9ga0qnc4swkcvjmq3fkij8nf";};
+luatex85-41456={run="0ss7c5x0x7sx6lsn1iq6lyyp6w0xb1iy01s1f7zf7mlb9n1yzffi";doc="126y3priwz6anp8sj0296bnxd53lz20nchpxw74zphfpwrv4hzih";source="15bc8g0pgrkqpb8q2dhb6zml2d4jwrripih9898mmalsjixy62x7";};
+luatexbase-52663={run="1zrwz661gilr4iizcfsxwmfr9dgx7v28lypaslmvp3zaf52zl2q1";doc="118azb2x20gyaj42r5w0749dx8rzhhri1nz3szy9vv64h0fig603";source="0vsg8q5k8l66sy3d0bskr6cv1f95lnhap3b9yl754x7ynv272xcd";};
+luatexja-69245={run="04vjkw2pbm31zanh19lp54pjq6a12advq8mnpimlimy292kqvfqy";doc="0vwy9fr0qzk8zwl603mv3lfv2md22syk10mv3fp3axyjpchvba1h";source="0y7vqwj3rpbhrr9z3if1p81k789sjgm5df973jsnbwd7mz4n53s9";};
+luatexko-68243={run="0kr9i78a3dw18rfws0xxc7kjd4n61xgzjkdlzb83yls4fyxncz1h";doc="0k69i41pjfqifqjcjw4962yvvgwb07a46igvwb70xsrm8cxgkm20";};
+luatextra-20747={run="1dx2hc1md8csvb37lckxj4987zaldfd73c86y0ni8fzd4zg55s7z";doc="02dl0skcr30hh9wgm7bkdv5zvx3czcdkxv3zdqnasdk0b7r7mqh7";source="1yq5i4v2dxayhfzn1yw987i3zjm6gy4fqckx5kybzh8f6jr9167b";};
+luatodonotes-53825={run="15syf4k00shgi159j6ja182k24xhfw71zk167wwmy57y7kwm5cam";doc="1jcybpcd500lzkwa33zdmsq3svb9hrh8f56j4qgwm9cq4wb721f3";source="01km6y8ajgaaab9j1bdp4s8gj3iw5b7cfdl1yngp41ph22888aw2";};
+luatruthtable-68893={run="0pkw1q5jw8id57mcz2sr1mb1lwafara5kzvq3yrkmqp8s9ml5ns4";doc="1i6nplzr640dik1rg668pai86vip0qgsfgizgbd7v4v7sjs24s76";};
+luavlna-67442={run="1hwbf0l2ydi2a5x05gcffw3p9yw8gvk4srihz7rsp6g7yf6qhzds";doc="0wirwf96b50m5wnhfiami8xiw9rr12mx20kp4wqc1bnihxg8l2si";};
+luaxml-60709={run="0w4c8sy0bjacrkfh3qb9rnv9ls5izzkma3fr6yd4zmwjzn09hh6j";doc="1giy76w9p3ribicsbwghh4ckrdijcfxnpyflv59ry0c9008xdrr8";};
+lutabulartools-67714={run="1vly69bgzq9pxapl7w1f7cppkx5yr5yyi1gxv0488m2z75522i8k";doc="0iyg0vqm675ak5j1ax46zwq9gcl58vr2r861085zzxicw4a1fh5i";};
+lwarp-69384={run="09zvwh3lk9lx3ah5ihv7n90898ahj054id6hyixj0ymcxmjibc14";doc="0dcqrgcyffj1rjf81fj4dc39syzr51ihkwlw41328i22rbaavkql";source="1605c281d4ap8wiyafvsi717yifksrbi9d3jcwrg75cvs9f9ayqa";};
+lxfonts-32354={run="1hl703cxwldq4ams7044m02bmnvm8vkym7xyz9cb8xkaqfyqp8cp";doc="1lfrcfpn9a260bx47nw6msvksjzqjqms5d31nprc800wk2vb8sf6";source="17j1kys5hrvkymba91kp8f1kq5vshc8blv5pm0m6yk6p4kdnfkyh";};
+ly1-63565={run="04g9labqzn9c10asy6nn5s6clqq2cnbhps9jf683qx5di1pabgp1";doc="0l2dqyxd005y9k8xpca04vyzbjxx6vzr7by1yz4qm1dkccnjprh1";};
+lyluatex-66880={run="0zj0n5bgawhkw0c04crlkb2m8yabb0r49bysphgzabyl3rvd3i2s";doc="01x3xkqv2f8gvrsl0qj3d2y6bkzmzbphzxcqy6s0f4rp5yj3dw35";};
+m-tx-64182={run="1znv3xc5462jmm3ydrcnfj1nj7dld9f617xw3fl2gdwn083ivawh";doc="0svgf4a6rgisj614py6l9hm4ij7b4x75jn84s2ydbxzyv61bmmrd";};
+macrolist-60139={run="0yrgy9q7bjclww9crxzh3zhnbsmkjwncvvdm9nld2qfmg4spsis8";doc="1161aanidazgapb9vl3mm9j0j0jfiny9fx6il3gbyprw6j7k61ad";source="0b3hc75lwzk9l5nq804qbpmaxd9zlrybqdfyg9cavsvyjrjh87i8";};
+macros2e-64967={run="186qfgd6p825fjnwivvzvvpx1ydiiw4k4lkvs9gqvm5gmas7kcv1";doc="0faj1gxhrc1fsqniy56c35jjzmxbpgyc27ai6xipbdp8sjdqm6pa";};
+macroswap-31498={run="0p35inib3yiblfhiy1cpvwahiqrr309fks7r515s21ybmw409v05";doc="0w03lydl6vwslr17h4px8ddjld0dqs5zd15sysv0hvqajw2fs0kh";source="02zfswma4h70swyy6znvhr54a38wq1px3f5ypz7zy1k26nqi25r7";};
+mafr-15878={run="117qd3a06lpiqimizj12lxd0vba82lsc211b46ags0mwgrqhcyz9";doc="1m6y9mpsp4w9cnbln8pv1pn86vqj9piki4kg2q2rq5m9q0g57vsd";};
+magaz-24694={run="0ah5blj8qfjqgnmygn35r38nj20sjyi6yjci4j9b90d8pz9w7d6n";doc="041cb5rqk5ldvbcqr8w7jnfi4krlc7g72ygq5j7pi9gy04d98mm0";};
+magicnum-52983={run="1bl7lhjk9glvbcn4lqanb3zprqigvxj07f5nm8zn9vpja90fyn6n";doc="1as8l73v9bamajin552xb4xqs08ik8sq22kqdc3psisv4f874kk6";source="1kp0d8wgphbh4mkv1qf9h2c1f2nkzqn9q8fln4v35yx2cay679qs";};
+magicwatermark-63656={run="0g5m44fcrx7c2c009wx3zzqyzdlygsj5mnznw2wmmkvqk13zy0n4";doc="118zaz7brzg0jswbn0bcxd9w5rngqdj2qg46w5ac7c7m6fsi4izg";source="0073lah6madc8cm5dmz2lgc11bnyfsmrhfz8wis7zlck9y9hk6as";};
+magra-57373={run="02zwkxc94lzi5wf29wws8ia863ljq9bq9swkh8k8318v5z4dv5ig";doc="0q6ss5ff86ckqyv8l2iy6mrrigzz7yavizqcy3w5s6jhjadz5v69";};
+mahjong-58896={run="02dkqs06dgp74963awkyj7w3in66h91hx5rycix61d0qz4qwrvqw";doc="0cxzzcngiz7796xzf0k1njchhw2p2m47kpw2fhrf1cqijwhw3jxb";source="0ygvmg8c6yp2mwlffr52jf5shl0qh26p0xlfkj39zzabd8jv2ay3";};
+mailing-15878={run="0x2mgcmfmppzqlwkg5jd1zfyvfdjnrvnk8glby93s5nvp6i6g8c1";doc="1aif16654381jcczmfn44k8v8x60clq94z4hcwjsqhai6s441hbr";source="1cx0pq1qmkn6k09x1r8mx7dmpwvdvprmvwj45p1k7mmfcvq2834d";};
+mailmerge-15878={run="06z9cb353sl9q6a7jbvwwdd0zk3kw5xmww0r3sjiqampxib19i9j";doc="1dk2a71x04nbc0rcmd3axhz8yikzlw9ab1nd5k1ki7pmclwkscdr";source="1qkmlfc2dvjhrh2xcypnp9wansxrb9wzvniwfb7sll2bxjcfbs8c";};
+make4ht-66130={run="0jk9xamxgyvwy77jv9iyg0z8bj1cy4cmswf6a8ydhcbpc2yyhcsn";doc="1vhcrpxdf1pc7qn5y3jirq01qni2i1jb9cmvghyy92kzfj88c93m";};
+makebarcode-15878={run="1ixhl4k89mng2dqfc0wa0fq52xpafp15gghnyx28d9j1163wxr7d";doc="088wkffs4b8y0clgcx1impzbxck8klm32dbf6p1jyc2vpi848irk";};
+makebase-41012={run="1nmlgv76zy1ajfzbdv7hizby3hhciw41s10hbnlbrfdl27w14dpp";doc="1vxwgjk3dj853qbvy2fyqzni2qkkjhslf17xvxskq97w8fcqr13j";source="1f8aliax01b9ir5wzk0bjhqzicl26xa63khx84s9haplh183qk2m";};
+makebox-15878={run="1v2xpiabjcgyi1d0ifpvzcll8y01lzs48bs19nalv37jw7hkrr4m";doc="078bz2pism9harcyb9lq8kkrkq984zx2ya47yhpqxnrd85kgcxfb";source="11gjpqmc6dzccv3yc539ki64hzpn8ns0zzjvanw7afbn5bkyrs91";};
+makecell-15878={run="0238il37zzshzl3qn50hav3wa6rd25k7rp5l93lb9g7r476sgvrj";doc="0mf4jc9rv66qjnm3ldrpx5lbfw1yfqy0jsvg8d3wdcwvlxpcrvwf";source="1vkfkfgjnhx5byipkrzb202w9jvmnjc2z3zjih6y61yizccwm543";};
+makecirc-15878={run="17y2hm6p280azgjvskyig34jyj90zngswcgxc7xa2h8pljh1fqka";doc="035l3s20mvy61rnmsxy62k6iid8lxzwhbkyxa1hblfnmya7rs0xf";};
+makecmds-15878={run="1z4m1kg7zy5q8l0a5d0fr7jl46wrw0rbwkxq1d0lm2s13xdn71dm";doc="1hqwvilvx61w47schnchlbgrj5snlp0lahsq5a1g2c1grmzpirnc";source="17c66isk18ch47syhsihj96yzi1jpr84946gck7r8ivpmk3cmmza";};
+makecookbook-49311={doc="1abzwzsm2jh11qj2qr31bznfc344ynjrdagqayrcgifg4725fa0f";};
+makedtx-46702={run="0yir2j268vdaa44flps15l739ngv97lws6n6yk3w4pz4jn5gylyd";doc="02ir7wf6v6znly9c36z8k0djrzpkd74ssphkggmp8fj338fk41cj";source="0jwdsfx2l8sz8y90bz3gfi51vswyzmwdvfmnlaa2gplhcjjbv4yy";};
+makeglos-15878={run="0jp0207q1p0znw1w86g6m8ifkpgh3hi1yhkzq117kwl5ybswq8w9";doc="18zl45jdpsvvldxvfx79ijldh3g03acw254m6i8a3dxgxj2p76hb";};
+makeindex-62517={run="0lpqnw6nr19p08pf52rcx1xvvsywkpf1rqrkjdsgrv55d1afsd36";doc="0ixvak7xisfnfqsgr3j5idzja5bynrx747g2w0my9fl85bjfjbj0";};
+makelabels-60255={run="18gjnhjvhaa6bdsangr8fb9yms3kq27wa7n0pb1rnqd8l00kp0aa";doc="113dyl3k5c32r9k13bm9kndmbvq0pm9v7k94d9y1ba7xiljh0aph";source="16dcm1mrjxdxby7szqf4h534w9g7z5klx15jyx9s568c4arnvfyj";};
+makeplot-15878={run="0qp0qgcli40hd2dxgbd8fv9s03r81dlhh48pb8la9sh28qrb9i51";doc="112chsx5wxrc7k4w3qzf23pjgr0np1ip1ylqs2igdcihchz6syyd";source="1zksg7iqb9g6my9zyyrmwkhx04qy0118lxf60cm00njwmsi8w1pq";};
+maker-44823={run="1fymg22y0w2kghmqh5pgxkrncdcbbmhhxappc72g5q337hcky0xa";doc="1yz72c1ghqjs06nagngpp2q62gh67c3klwm73bcbc090vdfkw7mf";};
+makerobust-52811={run="0nm751w11p7cqg8ihckn338i6908kcn513644c6a1qc9rg847hlp";doc="0bidk4f0q6486vgwqvifzchkn0xi1l9j65yqwgcdnl3yg6vamqzw";};
+makeshape-28973={run="1fy1ccz3707f8wxilh95k8sc3a93gl93qcpvpxl833mbkamkx3kj";doc="17dnkldg0v2qp3hdy4bw1k48p8xx3v566pm088g8qb0df6kx4217";source="1yd3ssh3cpy54gm0nkp2ah0nqarbnk9hqw2kkwdf96dj8vjlsgwd";};
+mandi-68950={run="0rmrsk3i2zrf48zv76jbfv7a71z5688lnq0gdla1x0ka51zfp11m";doc="1rfhbg00vbd5dbz6fi9zj0m2cfxwwycdc78qamrpxb51y3bb9giw";source="0vlw1wm8kmqx3zg4hyqcyvfvrch3pv0abvp06y48dxw2zkhbdmf9";};
+manfnt-54684={run="1fzfcvifh013xs6dm6xq2gpvmf3v0qn8scrbjj3yak2ba98bcy18";doc="15rs74sfnyq2k27bs3dvjiachwamima3q4vp0dp0ic95as2n61gp";source="1v3j47xa7k66dadz8dyy9gm3k4s6465zgqpzb320isjpb77p7r48";};
+manfnt-font-45777={run="1cdd2a3xj00bwsby9z5iz5f2iy2iwsjl35gcack9q83hacbf3ssb";};
+manuscript-36110={run="12r1b0hqs1kqdxvyg8lv8yrsdycfxs03j0lwfmlhbg6lmgz32pss";doc="10dczs60ncdk5z76w5jxgis9m9qilxp8xi53gixki4i82yd4l9va";source="08fpv1i9vz6fbf9vy48k6y45xz67kbqb5f30c8pxbvyzlicixdjk";};
+manyind-49874={run="0c5badlrh2321958z75wi4ggb289hnyy0i17bpf4qw9sjym08pz4";doc="1x65nnkmqp2x04n9rg2n8yh324vdbcsbv68xfbb3ppx2462wrls3";};
+marathi-61719={run="04nf43i9z0s8hndjwhfdyysjxz8k1jargsrx03k19i9lihdjfjs4";doc="0ybafny55hvpv4kia7jybybjn4vq8f2g7h770xzq2b1mimyn7dkc";source="1ja8kbhsbhkcm0ig6954l6k5absdfppikzwawifp33dwpjkk6w0h";};
+marcellus-64451={run="13blr2k1vk0kwac3chplddaplsjacablkky68yq0wccdrxhbxvdr";doc="0sgcjmkgailx7nvav1gs370ywi61ysmm1snz1f976ppdbmhh1v3s";};
+margbib-15878={run="114ifix2wa74ix9zz1ml9bpyd0pqzj2983h29n3h425yq98aiqs8";doc="01zam8vg63igvhdzf3gwgm3gjrnd23i8ra2cwdj4w44lcvapdlss";source="0qjpbhs7g4qdhna3kmlv4pg5fk0b3xwpwagyvnl91gn3q4aml4s6";};
+marginfit-48281={run="0x8ias8bv1zaavin929782cjvp7aw94r18lqvv10v3vgq20n7kjw";doc="1cj1fidjvvhhzn9fxbvyh75dfb78wxi83bdxnwbpc6rf3ax5bl03";source="0rrn2lrqg3a1yz6l88qkh8sljr18p1wx1vxyrzg04pzj21lw8kkh";};
+marginfix-55064={run="0arldbc20d1sncwanx3szam53yv1d5wxgihj8lm4jmda1858bmgy";doc="0kk9cghi0y1zfk6ya3pfs08npdy7v95i4db5a89v2177cd6z7a78";source="1k1384nxhiywlvyndnvhj6a35q433ddc019ckf8al2b1ngg13y0w";};
+marginnote-68204={run="1jg3f25jhdywqaxy4qimxr7x0kxjs279m7a3kf9lvyj6igcijml3";doc="1n1kswzhxdx7b47l4gf4cbihvzy54z24gg0sz4syvpy6nq23fs0b";source="15cl27n5q30i70ad91ajflrrcqb5wya1cb400jh82b9k7a6y8ych";};
+markdown-66954={run="1y6gqhcbp9z6wc39704x6mi69wlq3b9zkpbjf898545qi6l08s3a";doc="1y8l6y1wp72kjq4cymckyfywz8nz44rbyrw2bj81rp07i1vl3r3x";source="18s9206jpgwsg9b0k5gfnr9ighm882qcyc67ymardgb2v5hzpszz";};
+marvosym-29349={run="14i2alqxpz0imgdlx03gyg2nn56wrhlc0rziyx93h4ya9nz6xzbl";doc="0qyfyz8qfcchnf78r71fp5p16hmsrq6xf54g5mnwjb4p5ipbd9np";source="0vbiq807pazw2c1ck799w8sy3q8wcpb6smmq5qqw4nqcxzwsxk78";};
+matapli-62632={run="0r6xibqz726d68cli8izl20r4x2ncvrmlrjb711jz82qxbgs9kvg";doc="1cmyrnrijghjm15lhi2isza0dishbll3k4hpzq84jjjbcbs4gvyp";};
+matc3-29845={run="1mp6k50lm020xqrq2vwl9xyzr5jwp9p85c6ng3k22g4rqsxhrb3c";doc="17xh063gahp5m83vj6x8waqwvf4hrvg3wi80z70r94bag0nqqf2v";source="0pq4l1ays56ry5v3ig76h49kn7hdk1gi0wqx9b29vkdvzmzrmq02";};
+matc3mem-35773={run="1asybbjj93wpbcn577cqkbfi2bkiq2hzv5b2lqs31igawaa0vdhg";doc="1fgngv22falzvrsynzzj51jaf4gfcw88jwbljywixqb9xcg9igcm";source="03x6cm78yhgfljhcfrvn49favgf6h11w96s9agr96xmngzh4z40m";};
+match_parens-66681={run="1cp1qidfxnrhq5hia9z3nm4ij2g0v1rxs4g5fb8srmjpik10ss16";doc="0c5lcbkp4f7c8dx2nan6bv6cwicgk1520grbxs5k3r21sa2m9p8i";};
+math-into-latex-4-44131={doc="0k11j92h9hpxnyciczknhl83b05avc0rqdnwn82ssqi1k3qixibd";};
+mathabx-15878={run="0x0amwdxr6mh6j1m1q6wawljzjf1683xp1fxfqyxmsk0spx032mn";doc="107fimmxvfmdjdi1rlk0h0m88q1dbc9q1qwqhx1fwfjwdn62kvsi";};
+mathabx-type1-21129={run="026pnrn2y7zrl8qfhjv504bjk114z6kd6ich2ic97l5f3lhl9nj2";doc="172dhvsqql6fk2hfqcw19bxsqwqjfd7376a5wwzcvdgvx44s294v";};
+mathalpha-61089={run="12fsn6wsgixbpnay1szkmv16a2wfsl60nkcbyjksy1j06gr0yf5p";doc="0ryvikvngpgnqbcf5mp4g99cg0r72x53p7q6h333vd3s2qjah7x2";};
+mathastext-69237={run="02zjad6562mfi1lvdv6ha0var1p4shgfq325c8x7dsrnl12v788m";doc="0r7f9m237crb9lw5yg5gq1d20113fq8zpcf0lpr9s4dix84lyvf4";source="1ghh502n227kwap1ij89xj0i6jc518dvdg2cbsi5zmqwz7m1snxk";};
+mathcommand-59512={run="1mp9g6q271ymx59rq9lkdaadi7dwz3p1d0qi1495rrn5d9fpccgy";doc="1bjky5x3bgrfmfripn3dmabg0bg02h6xpl3s6qncqgxs0bnfz2vs";source="08l3gbrxw3aa028820iv2l1r5alnvzd2wjx5fylxs9lhrwhbmq2b";};
+mathcomp-15878={run="0ciipbbi89n9aakg86czfmasfnx0k6rq7f8v0wkxk3zk2m441cb9";doc="16q0b81y748qnyc2gycrb3jhw1i5yphmf6rpivwikzpk2nrg3ndv";source="0xdivrbkhn1fh75ws54i2vxgx3xqaqkpfjir5q84vwxgmxfv4cja";};
+mathdesign-31639={run="0jd7xfwavfn4dsss35splcxrqj6qwk18jw7qgkwshpifp7m79l2v";doc="02fsi2hinjfcf4pb0r1d0r82s50734srpkk0i9c566zx3m52v2vf";};
+mathdots-34301={run="1wbxvraw5lp77chgzslrrz022zgqn2fhmzk85cn7ggafip1hr9s1";doc="1ldl9l92y893dg2ksqn6n82w43a2l8pylz3iq4glcphalhggydcb";source="0dkpj8cychzl7gg4bp41qqi3y50x0dyz2pxanfli4a2anh2dy06q";};
+mathexam-15878={run="11rn665k5vg9w9rfgcp602v6cg659d4c22gikkgjpslc7bzrlrkh";doc="1lv8zdp1fajq1nms16v3nk7f0bc8az525nnjjjzags4rpl8wkzh8";source="1p0lalc0ny1zb8gc4bbg7z9pm6airbg63l1k0qqmwg10wvxpsjn9";};
+mathfam256-53519={run="0s97k46ysqvgs6a8aq5q8iwab390s90drd3g0ixd8zmv9a4hy1z2";doc="1zk42fsknkbzyx4m7xn3yjw9lrdvf6m7crnqsp1q7qb2nv3hn1br";};
+mathfixs-49547={run="1vvyka8kilv92hfsx8ahb200cl50kp1r4qdiaqgzkjag5kfxy1ka";doc="0gbh6yicv1mf0llfipqymy930zpq9jqc2ix2gfbjdh909l1y34rw";source="1k49pdi4kivk707i7fb2banj0qaqc5qx8zl2l8b41i6q2ir90a4i";};
+mathfont-68241={run="1yh9rlhg8lk4a4haaxlyaa76ij0i6rb4zbk6kryp71ks6hyq7vny";doc="0wsmsimscrkxbyx1mkjlhkiv3xj66q8r2fiwk8bspx6zbdr7fwyq";source="1z7k0x9gcyls65mfgn30dhipqwfhn78hwx51gxvrn7z45w4h52di";};
+mathlig-54244={run="0pyaqwr2h9knxf1axi55vm6wr9xj15d5j5pagb2011k3b830f91b";};
+mathpartir-39864={run="1a934cglbiahnmqxjg2695rmp8fxlg3m19zka8ayc743ckv92prd";doc="1aw9sbhgca7hnshkd2vyzf5lrq2xql25mwp9qyishkzq9ayv7p13";source="0bn3zragwja3hh32fbrsdsswlf07a8i6qrpnv2c1c47m86xk3764";};
+mathpazo-52663={run="05j5qgq8fralghp5wkx6bha1cm59vha29ppq96nllq2k2nqhpi3d";doc="1z76cb473nb6r0vjjxjwiymnk9wsf7pnycc3ad3ba4vd3yl1827g";source="0lmyc1q7jswlhlzz4fd6ia407jj4pzi7wvmrcgfyw20j2nghfcgp";};
+mathpunctspace-46754={run="1vlbw77bqi0qlm6i6hk0kz1syjzjk41mmj9nhnsbm3l8f5fy44bp";doc="09m2w7pzcahncazlw16c0bh6v3xgnm7rqf71lpvl8p33krasaj9z";};
+maths-symbols-37763={doc="0z83qf1rz84cr0b1zvwlacf24pc5r8dn1cxiiyl0xrqncl3279ka";};
+mathsemantics-63241={run="0vw14g42f9jhnb4k75qlighsngdl9kkwp921iblafs39zlx0fh7w";doc="1lkm8gysyim4kjggwm1dqc9158agxng3nd9kdksyxlna89xrgq96";};
+mathspec-42773={run="0gspy6kjnx7bs5dxap8ym8s0k9i8hczi6s4s97y7av7vc8j1fb5w";doc="07mmfcd0fvhrhafsfk4sb4dvs5x8x1rjk1a2xl20kwpfpp8l1rb6";};
+mathspic-31957={run="104vf0cbxhfbgabxjpypyx16fbpyi05k14dhw5ynmlh4rv3ck7li";doc="10j7z7yb5fjqlldf8w5sm5kic6v842dijd7f4v0b2q5h1gbhwyim";};
+mathtools-63767={run="0nxhvj69zj71hpx1f5y56asm8cgm6bmb0wnrbdq33xfhv1b6aw60";doc="0cc5rypff42yw5i0jkmh6d7byx3a3mc8wiyvwhbjx2z2l1kpjkhx";source="0kj4qf29cd1dp0wqmqn9bsv96dzqvs9h31v1fm4cadd1cc666589";};
+matlab-prettifier-34323={run="1q7i44n15pvpc65k41nw6z8gxj0nwk39mhafnmsibxh41yyxz9ns";doc="15x6lbj54597f8wm0vgf0yy0iwh7g7xv7cnllnay651zwg3z7h9l";source="0vr8cll1v3hgikrng1rilqb5d3kbggcmdy92hsdnip7dr0hxc39y";};
+matrix-skeleton-65013={run="1ihjvzsxaj5282xc15a4fw6cqj159m9hpj4hblfmjgjra5p597gs";doc="0109ify7qqbdrgrw0a8svdaqk1amm0njvawgh1ch8z7qszlpg4c4";};
+mattens-62326={run="1az5ld75djha5949bl1wiqbm5mzff77cvcyyk11qjvg7pjwa3h1z";doc="0mqsr5a2bhgrllvcqp03aacvsp7wymqnvsk1zswwscsrjl9dh5ka";source="15ww1gl01yfaw7gcm66z8zd2yhhnj15pw53crj6ma6j94akn1zff";};
+maybemath-15878={run="0qb9nr6m819axi9qn8i32fynlmkjvyvc45gyp6pckwj54kxzx06q";doc="078s9v2bly2q802wdidzpvwaqfdkz00wkgyhn6867bkbq89g4aa8";};
+maze-65508={run="139hjw2asv21p0m7qrpi5liikgf68kmk9v214njh107gi3cjl59w";doc="0h1lcq6xipzsw15cycraqjf4vckzqprv7kccls640y4jd38g3g4d";};
+mcaption-15878={run="0bfcl1swwgz83y4f80a1kydmxhdyqxld0d5cjfgxfhnn9dxp3wc9";doc="1afldwg6dghvkwd8gik8dmag4g2pb6ag3aks26qi0ygph05j9cwz";source="0i6sd9vm1pn9h570am4lkr2br81bhmqqwwvymb8r37xpmmp9yvsk";};
+mceinleger-15878={run="1a16g83g9wd5vdx70bq8zbr4hwm8fk46dpsna97r9fgh44n85pv9";doc="09z7srskh57mz055ywyxwg4zcx07vq36jdy8z9w6w74af4icpll9";};
+mcexam-60481={run="0ixgrxw0fzaqbkif05lvd3z6zlwhdlyhfb372b98ypyfp7f7v1mf";doc="0wi7zjiw93hv74scwz4w4prmy00x6n3ncwfrxjyxn2p7i2hkws6x";};
+mcf2graph-69281={doc="0v5pw5px77gnzfx5cbb818ql1gi2l48f62j0fk61iqav02svr4nn";};
+mcite-18173={run="18did9achsp32k7wq4q75a9q43jxdm8k40q41j242gndnkn8axw1";doc="1gdsa91a4snk3f22mh06mr811b1kb0vpi30ss84d3mrnsvd1p0ha";source="0q1bv5nx9xf6r1fvgnxb1x720dm0xqrqg3kya0504q8qb0kgxqfj";};
+mciteplus-31648={run="0xbk5zrd9mbk4xid03j7a0c96s311rb1vjawhvk5waqw9y6dn476";doc="15aldir7viryb2f8vi0a83vgbdwbp5gcdg0slhp6j6ka6xv7ayhs";};
+mcmthesis-57333={run="1pjllpvmqva7yk4zi4gl91blwbciw4f0fhq7rjc214iglyghl9fr";doc="0np4zsrlb5xxlwc37dldrcawd9ldmjqgq1qhbpdz639n3j4gmnq4";source="0acxvqka48id5fhr9p07qh01h44vhq3kapczr0i49pyn2ihibnyk";};
+mdframed-31075={run="073gcxy2s8mskf4mvvs1jr8fkijci1ayg0b5r5xzcjw0s5azny1m";doc="0m8k7h5c0h1fdrpdf2a4vhgr8saqspk81c0cdjm2cmbsfm8zlc3s";source="0p96sl69p5342yy9fgw5cnkfi2xabdwb74mw7i1gbxvj0vx1f2q6";};
+mdputu-20298={run="1ihwhdcmk3gd081yn4wimg7yadvxkygybr3bypqrvllwa92lay3j";doc="1hsd74svpxxmjps3fng679hq7dm35mz9glcwwhk1carzafmm2ppm";};
+mdsymbol-28399={run="1rckczggrdd977n7dr223zfvp7dl683p7d6wfija8ln4d1ll3lz8";doc="0v8d92kpka138yzy4a8hg5yf6zrz267hhsakpm2f0bamdzqkp4kc";source="0xh9d4xpdyacmb3kxmqh71qfx0b5qbrgxrw3fj2nh2rzh35smsy8";};
+mdwtools-15878={run="0l40ydzljgydp8qfq1lm9v8nz0mrz4zxpjxicypn2hx7bxs2b9rq";doc="09d2ahrpksnjd4x7gqfx7yw51ivfpv4pwi6ms5c394c3v30xak94";source="1w3sjwa0n3pyn33k4lwnzcswm86zj9givshk0raq2qdb4znvxsk4";};
+mecaso-60346={run="1hsgs52844fv3yfzhylb47hpgjdfkx5wvgx1ihslkg9xm432z18c";doc="066zg20m9hnm2h0bdbzfbxcjsgpbm52l6xwrszbl2ycinqf4rwdx";};
+media4svg-64686={run="1l8ncn14k3khzq4pvy0var7j7nr78vll42bfz1m3cxi5i144ygn9";doc="1ws9j415nkj68ypgmvsc3384dqzjrfab0bb8khz2rqq98sv6129l";};
+media9-64047={run="0891l6dfz89fqy35svnk1rl6vjwhza86km8vk85n9wp322vqnrha";doc="1v0fxv93qc6nj7rskf7gd8ra8i7sll2aznrgs7q2bml9xnggvq39";source="1h3p9v4p4kr35ixpwwv7g8fwgy3ky3haa2ypjlpzbci7jcb0ix5f";};
+medstarbeamer-38828={run="1cndcpdvkdvjx07rfan5dd7yg6sv532b6vvd97cm7ag2g1aqcilq";doc="0i995yaqv91h4iv3h7r5m73vb7xvpjkzrh6nddcjjcsv2gvpjcxi";};
+meetingmins-31878={run="0za2aqj7gbmxxdm3hqkq2sqkhl3c1q8a3s778hw164dfpi8jx85r";doc="13kqp3561k9pcz7lmh7izmxw8iqq0s1jlhvq12dh00wvr7vwr8dr";source="0fkgaqldjdry08wl8al8d0kppbsqqhig83mgwfk20rzpji298b5x";};
+membranecomputing-64627={run="0k8kgr6rlrgpmmylf3vjjjiyis49lm1r1hnvb2m2k3481gfj7zfz";doc="14hk6rw8fj040vwpqhqajlbzlp7g3c7szprssxx148j816fgi95c";};
+memdesign-48664={doc="0aij1b7l1kb2x44qn33m39k0kbhdrclmr25nmvzfn6yw42lh9fz7";};
+memexsupp-15878={run="0h3n1bnvyxr0ylg05fm819lzhzd7kbip5p5mr9kc5af8pd6yci9k";doc="04zwmw6varldbg5cxzk4bv8mbh80i9gdysfxpn1i4xb1la38b0bf";};
+memoir-68004={run="175f2przjgmmqz7c08f5v7rrz4w54q594blddj4n1372dxgg9fhm";doc="092mqw22np2ynr7g20192c4k8pcsg8qg9g3qx3k8kgds640afzxn";source="0xvs80sm4i9nnjll2i62g8gn4lkkbvpbhwzw40cpsg6n08hkihdc";};
+memoirchapterstyles-59766={doc="0jxd7sbh5vc3j5d5jd3zmyg58kwhy550l5z8q14b4msm00fp6z0a";};
+memoize-69285={run="0q797wprlvapf4a4wiwbkivh4hb80iyy6mj7q5hlwqqvpw1gw3lj";doc="0g4fyf723zv3rbwkxddvsxh22pqljra0g6r1lf7iz645501y7q94";source="1vmhr1skp49yb13pi7lgqn89wlp8xv7w3cj9zcfbw27xvn3x6235";};
+memory-30452={run="1zgfjz995jbji8hycizbp614dn0g13rimh9csgrga86f1ivgcpmx";doc="164nnsi25jk25p3kh54w2l8zk0rri50p0s9g4r5f50c3wzxi1g4h";source="0mhxxhiqq5miqskb6c4hmjdjki280yyin2dh0md59ai1aprgd4p7";};
+memorygraphs-49631={run="1ph43wp3h3pz5hh6dp3n6dzmmbn0fw11w3v2fjf6d07a73jqh97j";doc="1k8gppgv5kkx7i799mwc9iclp2rv9hgdk2bwnqcyc3j3rmnpyiwa";};
+mendex-doc-62914={run="0ab3hrln124gwvgsszd4l4jjrc705x3wbnmrrf27rx8p6fcwwrmw";doc="00m35j5wkcsyrgp0h8mf6cx30bjlhv23szmclpls70af2shcmzba";source="0sqp5s98lzdjnvpvw3hkvclrz98xzx6v7zrlag9m1im7k2ljlcvy";};
+mensa-tex-45997={run="0gg38ls6fil67d0ln2yfjbpi2r6cbrnavfl926jbpxjfh4qxvqcq";doc="05krm8b1ylr8wjr0xy361whm0kn6mj4y6yrycjj47927xnij5qfz";};
+mentis-15878={run="1pjpgn0lmyd7y7qbri8f7s01a1akgdif0s9v56ia2rsimn5fgbzr";doc="1r6799zz3y0iw020wwwl8a7az2j5b894i7w0pqqvsq05g4g00fcs";source="1ajy89hkvcika3aybpz93myylwlgfilg1d432my0jvmsa40ikcdc";};
+menu-15878={run="09mnnssvb83l1jhjbb4rb6lbzhwf4y4y0mq5h36dj4h2hp4qfi55";doc="1g0ihkjlnf9v90x39mm2jn2ziijildyiqfda5bkm441pjh40x0pc";source="091a0akja0y153lhhplb4v0n4z77qvxh9nchlr0v5sm9bbpvpiyd";};
+menucard-55643={run="13dirr45ysvi196wgsrdrcxspynzvrk88rdacrfq84l4imbsh683";doc="0sbgrk1l2b9mdhiymwvp6zci4nb86rn2r06chdbhgy9lzija4wdv";source="1pg4c26pij7p218a0r6mcwbmnsgdj7i63z8z7gq71i8jqpfcmlrg";};
+menukeys-64314={run="0039xx0qilmji8ch0i488hx5rnhf1brk6n5k0c7vg7jjs4xylq7v";doc="0a6fnclh6gd1n0f11dg23gykhsr399qmplq3a43wqqgichsn2k2l";source="1na3y08blykp1bs4bqrjx1lmmbiykfly00n5in8x6h0282q031i6";};
+mercatormap-56060={run="1gw28rgsdllh8h9cg70nayj12aqw356svv34lhvfj5b52y7ykabs";doc="0v9v54qz9m9hnfid2k9xl7fwgwhjxnk0g7wndxypd73b63mvfhpi";};
+merriweather-64452={run="00sy3iyqigbmjz7v6lf47f88mpjwgkbhrnp59x9xpaqwming9fp7";doc="0z3k1w905vlawv5lrmc55q637bfz17cjndlk4gh868gqv5j288v5";};
+messagepassing-69123={run="0r8qfwyip83mbvmfgvwrlypms90g4da0qf2ka26pki9r3cn9syvj";doc="0vicxdrd51gmk8627k7a1n83ldj0kgrzaxmwmg5y99n619pagxr3";source="1im9h7n2dpqdc8hlwf65m4ss8y9k28iaw29nf0pnlh6qabzqgl7x";};
+metafont-66186={run="1kw37drhnk7qajmivvjwdrh5awns571wclv8b354zk71axf6cr35";doc="14fwpwp4kf7x7amhxwjng2b5qgqarhrg1dhd7zds2xxmbipcnxga";};
+metafont-beginners-29803={doc="12hhvlnvh8dj1396242m6yi0341cina7sxrv7pwzqxzzahwdvmgm";};
+metago-15878={run="0km18bf69rf3rs42b0azc7i8bypy14201vk13yf5ahsypcjcgqns";doc="1bx240q75pq9v23gz82i26vrp7z4cb00f9nb3cvvknbndk8y7hy2";};
+metalogo-18611={run="03crm3sswv7mz5akghqvkq1zpiy9jdpy32ivwwmf14sfrrri2cz7";doc="08vgbmjhynb4ramaj68i27hpgijg51j80lm0qf1jrfpapz7lrzij";source="1ak8qbcbqgirljfwhq7ylxk1w2frxfkjvadjq00cclj007idr3x8";};
+metalogox-69401={run="01bz9kp73cyf89fjqq8dcyr4fi3n4h7m1gkwkhm78grxd2wghar3";doc="18vmy8xkxjm02jqnsza88z01n9qz28scm3mm4c00bd2y9a6ablzi";source="12cxqikvlk5vg7mgiisi97i4b4nwb49ymvrja43in89glh50ily7";};
+metanorma-55010={run="17vg55m4yj3xcfgvmm2kw8a81fblwykgnbcn65drll10b89wx6xp";doc="0z3mr4aw6gqdj4621dlghb4bsc5i44mlg81w81by98783fn4xdyl";};
+metaobj-15878={run="07p2r8975ps1ricqralyw2qz1zq5lmaaf50xqd68qwxmgrs3541z";doc="17kqa3h13p9vba6sa5s29v29gkm0zbm5wngb0zx1lxwkpkgqaqv5";};
+metaplot-15878={run="01blkf01b89a2f1c7fw6dbp49iw9qw94krv1hiqg7ckkj8j06sp8";doc="1fm27sy0zz3ppzz95bngipkq4m498g409igx4xcbkmqaghci1pin";};
+metapost-66815={run="03ryd794cm4srjmq6x0vly4jav0w0j5p4yhvlqvsnkk1qil74nrv";doc="1ihf0m9p73k247mj90hns4afdqxz25yvfbmpxrbzi4w08q5rdxxk";};
+metapost-colorbrewer-48753={run="154yj9pmwlmdq91kw5xllqah7pkccayv8r1zgvlqgk472x66zrzf";doc="1y0ml5ldridhcg8k811dqq2dh4xsx48cwfkliygq0q1kkl34vdag";};
+metapost-examples-15878={doc="1rslyjnw27b5br17cbf6mjjkcgyr49yav4kw12spm3vdwyzb7gxr";};
+metastr-56246={run="0ci2qs1iyyn55zl6n12yn20xsff42dim744sjkxml7xad38vpnkz";doc="1jhvf4xngi5mjycbrbijn72p8anx15r1n6vh5hrjai95xp9jn88a";source="12rv9fayml2kjy7rmdh6d7g4xr2yg3r5ngky467y663p893nxk0w";};
+metatex-15878={run="14s2my2zs3sx3hy0vapi8zvxb6d15fl7wqsnis58w11a3kni4f1d";doc="0z0s4ys1zsa2s2m4slpjdikzbkw8k8m780gb5mh2j2azc7yxlsdq";};
+metatype1-37105={source="1nhbsn33w6zbzbvi3a32ng6ib5dbh0vll9g2c5ssiv1ysxqrg6yq";};
+metauml-49923={run="064cyc53izb7fqc6xfk7pygr2k7wqivx29rkxzrb7sakafwmnkq4";doc="10n2xhjfysqihmkrzgcg96vsh0mh76h1jjcxx2nghydihjdggzjr";};
+method-17485={run="1aafzyca2l34p8jxgdhwm54yw16znd1085lx58wrm2fjw727946k";doc="18sjh2kvy1f3c72w6k2m60jf60zbz7bz91xgq20wjigfagdmsqkd";source="0ckvvf1h80mlzyqbd12yagfl8hph9l7k35mghr1ri4k317sm3ls1";};
+metre-18489={run="0vfb01vwb6x5wf4sq5j1rrl3jpzw0mwfqy1jkkirxkhbim5gln25";doc="0zkr3wymlzxnk2n9h6nz65a1gsg0k4pfabdrkc15wfdn0yczicj1";source="15cvprv3zg5nfsd5l5sj2s2hgx5gljn1jqzgcr4lpadpans14pkx";};
+metrix-52323={run="11hcw66f3r4rvxy8h0znwgrdvlfvibc6j73pcdb3bvyywb3774gz";doc="0hx74wi8vf57ly8yrzdq6x5qm8l5gi9km4v0ma66i5v40i9jwgcf";source="0i0xzmhqbs91qpznbanlhrnqvgxc45llk0wwb4mfcvmj622d47bp";};
+metsymb-68175={run="0b306z77z64wzk5smm506xsv6jbr3y6ajwia12i06fdynx4jajp9";doc="01x1qms8mh1523vpc8ky87x2zc05m0gr31qwni60k3byx9zi9blw";source="1g4kviik4qg9scjp7mxaf3n6kzdm7z666iqpbyz6dmkgsrsph99n";};
+mex-58661={run="1azsp6n01qhph2my75r05sby7r3lsafydsxv8f5532dkb9r86p5a";doc="1nkr92d761c7yfb9aysni3ihidzw334w4180d6r15k1iwinrn2al";source="1nd7p7ssh79rrpv5i0z4246cv4wmjgy3by66bbrv7w2xhmh5819k";};
+mf2pt1-61217={run="17kjgjbjvwnh3cn4cky3qj4kaskiis4h2zxd0mmq5h87qs24zj9y";doc="0iwnr02wbh36q9nfj8jxc5d5kfc1wzap5gspix8n5rl3yzi9xgk4";};
+mfirstuc-64743={run="0bxy961jghqcyf4pkd3pvgri2dq56s0nnk42ar3vyha4lj0pp5cl";doc="03nfbjsk5yvjzn5p58rq2s8bn4a982vq7riqdj9glr480cmzbkq4";source="0i8wfvdjw1vmvngfj7mqpahx1c8gjigr4y51yhz2xsrxhlpih5jh";};
+mflogo-42428={run="0swy70pm0pyqzy1i5wf5hc6cbzn91ihw8hwh9kavdfawb4qzjxxw";doc="1xqk3nwpi3drkzrnr172i660yx541lxxw3wps0jqbqficqn4fiw4";source="145hmbxr5x5pj2whra9yify9lyx0ak1az31gvwr3gp5klcmna8p0";};
+mflogo-font-54512={run="1dx834zwbrwgp2v61fagf5m4zmxf2qkhib4mkpw6iadcgfqv6x7f";doc="03b3qg42axqhs1lvm3pz69m4jmhd1385gzg1sw8bqyajlrdnydyh";};
+mflua-62774={run="0ngbhdh8hgpjfqnrjlnp27x3qziks3yf2zp1qq7r4bjfa5jx9gr6";};
+mfnfss-46036={run="1m0yza8nw5r3ph8k5nihgf93vf54cb0cnw4c5gkqy0rsd23hk4dd";doc="1ppjjma5dc5i9ly5y7h91647nw9c2y9w65k0dn1ks92xsvnzf1mv";source="0qjz8dz76abwqspab89z3a50nndh6gflanr8hn31z5fra3kzfp90";};
+mfpic-28444={run="1r8xq6npgnlvcyimi0xlqmqa140p94m5x832x0nfm9d550l1zrgi";doc="07h8j6afl5sd7hz4gw0rkix1c39vdkg8376jgi7ypwvk1xr0wgp0";source="0ynnc1p2xihrwzfyg46dljbc2f28l152la8f2z2y5zfvd08ir49k";};
+mfpic4ode-17745={run="0jdqbdi2gqb1v4cqahwss1rj44iw0753cq262j8zmaarski351a0";doc="0sbsb9lysz6hysrpf9dfgm2zn5qcsv7aaf5llmy9kan0m4h84afm";source="0iya4y3msmyq468zj2msq93xpa01044kmnv4dspz1fmh0324iklm";};
+mftinc-15878={run="0yhw7zpmbc3780qm46p5sc2qq71s2vhmfmi3kqscck876h4935fy";doc="0yxpbp501d6vwsxpm83zjhypvz3xz51f91q414zxjvsy1cvvprr1";source="1zamx3658d8vaik5w30hvia5y0hp119vhvqhj4h5kkwnwmz8hs45";};
+mfware-66186={run="0kcz1gy17819w77sf0l9m5f6rw8dcapkdbvwaknnrmy50v0jfs1n";doc="0z3djvzs8l0w1j7h22hc19r2i49panw7m2lpp22lshxybsibr47y";};
+mgltex-63255={run="11xl6nw76hana2mdcq7m4h6kx6zx91apxcqkgjczcw9f7ip6m3cl";doc="1939pnggbc2vcvavilcssf6i9j36ysv8k93f0bz1rgn2krja2d22";source="1pdlxf2qfyzm3pjjpl0wir4sr255lqnspbsvxfy7wz78aii2ik5y";};
+mhchem-61456={run="07dnb38z8p5a46fp8rx3nqhqni0lwg48wzi2bc2nxb4yb0wlcfai";doc="13b1yc9zi2kblrmmlrg43arxg45g7y2l8kd2sq64jys2nw7sq17n";};
+mhequ-64978={run="0zyp8x8qxjq3z6b8dm3pgls4z9cr03qiqxlf6d55ylnqmdd68w68";doc="081mavy3495k4ciqvxd3hzkb2bs7m0s5jm8lx01z85p568bw5268";};
+mi-solns-49651={run="1bv7gr2wa11cbsznz414x35n5yy5jw7q9kngnb2h5y73v8bnzvc6";doc="1byfb723572whq315zwybwm1bcvcn49km80gn5bi081gy81r75hw";source="12xrddxlrngjnk0yk35spk886yd9p3nnz6jrp51dfzw1xz6pkivr";};
+miama-54512={run="0138r1yrv1880nmcpgcgb80nzd29xchm09s8wxb53j71q0vvdswh";doc="0dd32q8clxgkd7cdk0699fzplnib4waydx9y9i33lxxwjkfnfsbl";source="14d7ryxz6q17jn94wlj5vf2hzif6i08yjbxh5z7pdcgrnl035gxj";};
+microtype-66587={run="0hwwx5qzp55pvnb1c2h0ia8wp7gm4pniagb2wvg6dz5l4hja3fj5";doc="1bqr4ggi96wbmrd75mfnymkplnbwscizmf7kkfhd29jz5hl5x2x8";source="17gdym7f8851w06y0h4hdz7s9967i6x9awhqgw0i4fi0fafmyiz0";};
+microtype-de-54080={doc="069d2f0jcg9m4fv8dli2dr9ags9gz6mkwy6fzz37ns4jzrqfsvwi";};
+midnight-15878={run="05hzxlzr19snz16sddzpyh5f7vvs6jcdsqyqvqga17rr8y04sdwz";doc="1ky8k2ys88n6hn2q9v9gr71g772gm5zvxlbzmibvajq0hhqm41l8";};
+midpage-17484={run="0hh4r2sgdgzm0nryzqymd66a7hr74rvcsn58y7dc7di6mhikrysn";doc="0jfw5wd6qbxhf90mpi8fmv0nbazkbg9h65z91613j1ynqqf0087y";};
+miller-18789={run="1nk31l9g231c3dk70fqph444z9x5rdjy6g7wazy4ygl3q4gfh6fj";doc="1vvxnbbjn325y9s5h7qp6v2z1xy6wwppwqv6iwdak7mf47gww2gf";source="0jpyvjpaqz1x5avqy1dzf22qwss7ksbp917ncmgjdxhj82jhy2d7";};
+milog-41610={run="0v5rxsa182n28dzd3l3y4qdsz6rinv3r6p94iy73r26j7jgsqd5d";doc="04z8ya5gba7f5q86ch57zqbiz81s62hpdbn7b8jmkyy953g5l8vb";};
+milsymb-66697={run="0m2rgn3am1idrpmjply52v2s8frxgbdr80gxiy69fdk2psqh6lcf";doc="0cvy530713p15r8kd8rb34rvmryk5mkz7f519b9jzgl2i5kcsadx";};
+mindflow-65236={run="1i5a3jnyi07sp6zz3cyyyyp8gbimy7ypvxsg9220cyws2z65d7zm";doc="13qpcy8bwywvn0yv8qsi1wmwzlhw3yawg5dnb97mkj607cj7bzhz";source="02amv0fn4jk7k4x7ammi1n5y8c7b18hjs93mm6zs1pxsvxzc0j6f";};
+minibox-30914={run="0r94l5sy4n97p895xk33ir3dli1ngy3p67w2d3i7f6hi6czvykm2";doc="0bzd55wkdxw8spw4706nj0sk478zbnvq9cnkpid638cwb6csb21c";source="1dm8p6rjivm0xxa7px5dvsnrqs48zwn2kiq3vr6gdqmiy0ld1v93";};
+minidocument-43752={run="1mrzcxa59kpmrkhnnv08z7h48bj74gk2b0q3bvhmvddd6047yxwy";doc="0dl4l8skhz7fm23mpmgmy593f34w78mm5qwab5bc41sg0xc0lyy3";source="1n0qf2r1mjp8vx3s750fw5h2q51pp3qxf90gds8bzq2cv6mi61sv";};
+minifp-32559={run="1vpq8mh443hhmnf5cgj37jm362m90zdhm55jzqh1x84dadqpmivf";doc="08f3hp3knyc37a2fy87i11q62dlb35ri197gxm3ghl5h28zvzpfb";source="1l837v8c70s8x1xn4xhag6nkfpayamgzk95fb23qw23xpf6zp2wv";};
+minim-69352={run="0ny85fr9921mdx8kprbq9q2w431g33yyi2zadbw1p19xsng4xy0v";doc="0lv17nf3lvll2bb777xkd5d0mpkrd2ixhqn32448ilczxqp71qcb";};
+minim-hatching-62395={run="0raih3zsaxpas4myf4m0bmdxqm1av62cldjs4z768nndkv6xl1iw";doc="0bngn9d24w77dxi1s7ad87gi27m48d4jr2j51cpmmagfdvlqnfsi";};
+minim-math-69352={run="1fa8a3jq51wm23ivmb5n6hrcbyxcmhb95x08n4lmhw6x6qsr0hj7";doc="1dpilbyr9hdik1lp5lm860hjk7ni9adwn3dw82pasiipqvy8qzcf";};
+minim-mp-69352={run="16cb8sqfw625nx2zw0qclskw30zp13c5hcgza80ghvvmmd4ixpvr";doc="0nmg25mmk30q15vpzzpmiwc0lwkk7qnx5dx57bp7wfq5w08jc8df";};
+minim-pdf-69352={run="03b8awx6kg2j49485arlzaz73kx1bp73iq9mp5fh0jj45hxvls5a";doc="0qjwpff43h3a02v4qsk4p2v995kqp049n4qg0nd0g4hx6y5gi2l5";};
+minim-xmp-69352={run="1pyf6qisnkh1600ha6605if690715qprhwrakygq71gl0ak9xl00";doc="0vyhvy71ajr2d4dii4kp2inyihra85xvmqjs1fzz1am5hbqqmc7l";};
+minimalist-68552={run="17fpzv3x25gkr9z62mycd1pnv7fqp5hj22ax1qy236ckc02abc5y";doc="11656mg8gcbj480sy5z4avrw95f2ihm4b5n1a1s9qdaq2i6y97rz";};
+minipage-marginpar-15878={run="1qpymibkrwdbyf2rlvfjj0g8agxisd2ym3xi7lzx3g953g5whg5r";doc="06rivjd4x8mdpzv9h1yzkjbs317jvxa78zbv1kzyia7fps74wi1b";source="13k27b7avz3v2jadjh84w74rsyh4gz2x22b8j5lv6yvrjnwv09f6";};
+miniplot-17483={run="1hl5nd6p9c1xhm1kpw9sh1s81ymdy8lxfn7wh1sdvildcvclvd4q";doc="068s76gnva6rsnd7gfwswxfam56dbiw9s9ymqr2hcqx7i4dl87x4";};
+minitoc-61719={run="0v80ga66rg4cgifmyfa5vq52v5wz48lj4js0ym9197x2w98ra6ry";doc="07dah8lz54ccvrgigrvgcmbj76ppxaismbllfwyxcgkrkvqzxqkj";};
+minorrevision-32165={run="1mcgql832xmgpcwha6l0d282mhyva6xmyf75gbb6inwbgg6qkv9m";doc="0x9lw8xzmnn015n9hyzajnl9gicafj06gr2msk6vxwk136ayqfiy";};
+minted-69163={run="0ksd9lcaqvpncs236vczpsxq1ymx7xxhwpqix4n7yidzyypxnbix";doc="03305wk872gh9c3pish93spfxnvpawcbfjb1gbpbrnjvnkcq92jq";source="177whv7b60pmz0a2r178dw76s4bqixn0zpmr8g3c91gd3q07amdc";};
+mintspirit-64461={run="19jvqcydiwwq3kv5bq6524wsynj52b8mqm3j3wn108z7rhnampg5";doc="0mwrnf6q3h82qnxk9gy9ns12k9lr61z92vmlyx2x745i8ra7b551";};
+minutes-42186={run="0yc7dkvbn0g7gm07h9r62ma3aagbgparrlamh462a9ckdc7jzivp";doc="1m8blswmxhcm2ya966ajknx9arz3yh1sn62wnyxls220af3401ss";source="12qvfyiscs3y1wk3r2mdq7vgkmz1ldsbg3wz4agib97lc30qqmif";};
+mismath-69169={run="0ryb4s3gz7c7q6ya8k6jj3pcvj8x8nvvwzlqydf2lr3c7aj6k8ij";doc="12v70qldkhfachvs05mygq6hzpxyvkshwrncnd7s88r8hizbjlpk";source="1s1l6zr9n9c3g8a0icwd8rha5rpqrhqakmqfwj89z29drjiliwhh";};
+missaali-61719={run="13y2dm6phd9c77j3rajvz4qma2h2k4nwhb520j3mm98bgmbkphf7";doc="16487s0ijkk6va22rhhyhxdqik863n1i25p0f67gcb8xp1s5l1wk";};
+mitthesis-68732={run="15z072l5qzmnn09awr9gazikc60h9f3z061qh0fy3j15gr3sw81d";doc="02b0bi0kycfm5x7z2xnbphamzm0xrlfvqsk0c01ni0gjf65j9f9m";};
+mkgrkindex-26313={run="01db35xmg9583hkr9bpflr6rj8bmvidaqahpvkr38bks21466sxz";doc="04p2xaycwszq5dp8s2h6gdm36l800ipvigblkm8m58bgycm553fw";};
+mkjobtexmf-29725={run="19nxq3k9jf4bypk2al38n6igpca369lxqcn3da8cm8c3m511nsmm";doc="042a29h6sq9mpy6chfkl6893zcpb3gd3gsl60xfwglivib706qwz";source="0q2i2xgpnjcx8qdkk47q7v0lmjdv88jjvl7zcybnhcaa9km8f9na";};
+mkpattern-15878={run="061y05sa0a12x23f68g7rinllkggjfghgmrq2qnan34f1ind1g36";doc="0b3ahrhxmm6lwijc7kgvn0k17fm9rkp7i754zrhfj7w4xgq6i50f";};
+mkpic-33700={run="0sib2pckayb4i7lxga35rkxvy05ix6idifcqrlcbmddfix3djrzp";doc="11pj8q1zvblsc2dyd68a0nri9zpqzrp9a6lha5dk91a2aygzaf87";};
+mla-paper-54080={run="0yzfqb3x58qzw5lcyw3f6c3xyd98zx7zmz9j2rmv42r5wj1g668p";doc="0kzi1gnla04shaiysrgyz4ak3l96h11shkrxcj0hbav43ndj2xhl";};
+mlacls-67201={run="1i6zkzy0xp0zpi6drq512pil4gxyw96sgsfx9vz45rzc7jvpbbh6";doc="1wsysqqv00fdcd7v26i5840g1hlrxdnnzznh1yz7yj3pwz40b0f8";source="03m5mqpn7bq0dzynwdmhxs207617aplvbc5ra1da7wifnaradlsa";};
+mlawriter-67558={run="188kwakrn0ca1njpkgyq6z1x97ky8imxqgpyy9axcsm2wmzhmf4v";doc="0h1302wyl24ilvba68f8pjwhndmqn9n0h3nxr5ifhk01m8359nr1";};
+mleftright-53021={run="14lvlhhjj50v31lgf7ywk5dx7d5gbnivssl15qzpa6s619q2h6l7";doc="13vvfx4wxvf5liv641lwdm3hdba31rfrwsmirl36qwbrqsrl8xic";source="004ficd5chakwcklbdx83qp3985s1imlz5knc7f3m51zxgr4lmw5";};
+mlist-15878={run="044pjvbyabzqashbzag37ymqa9mr0c1qg3p7rb1j91r0y5s8ra8d";doc="1vlxzzg6f3jmcmp8fjn58gciywc2qgw9v1kxpm7qr3vlv40pdb13";source="0jim2g5qc9cdks4r3yi67hhszx3kkh26hhc0zgm2kx9syhdjv057";};
+mlmodern-57458={run="16f5cpczawzx4p44svpzy205l9m9g06w8r0554cgdpqdbwr139fx";doc="1rqb0g16wj7jg65xm0rk68cfz9r00zwy4r73wbkn0fqrchg08yn8";};
+mltex-62145={run="0j5282big4df396xvk2xaasl7cwnjn2sa14xj22xgzvrz3hr4dvj";doc="13c7a99jl0y75nkciir5zqdiz8dgjl8znbyrb485xrwlkzm6ygq2";};
+mluexercise-56927={run="1yhgp5cidpkh4ihz20d1p445q370bh25jwc8ikqdq6g1qnf8sdv8";doc="0xcifm779nln96bmx0kvkmnzc9yk2314yc6nn98wm7gqdw2bf21s";source="0mq8fa0vd762q2h981mj6is4d5vry2qgggbbmffvmfb4h76z5gh2";};
+mmap-15878={run="19hnkczxhxcr7pa7880mfgjfhjwiyl2yxhfz67dsrljqsfpi19nl";doc="1f861w6clfn3k8gc6piil6bq6admbyr4kxqnkw8hh29s63rdn76j";};
+mnotes-63406={run="1jmkh3bpgqc1lw4q7s57n9p10wjhflck0lqrjxjni4qaqxhg02d0";doc="05kgkxjhizwpnz60r9kjlwqzv66lxc4fj1wh0199fkn1pyyjdrcg";source="1xpdyv0l87mb3af5iw06823iajk2dgv2dg0298nvzm8jj3ip6851";};
+mnras-68878={run="003pbz6wg81ymv082vxd7dzf37c08ym2s63c91yxvldn93p795n6";doc="19mgjg8yisia0jdgvwq0jdg0hj8qpzl393x0w0vkls8s82j2jc7y";};
+mnsymbol-18651={run="08b0ypa29zkbch5isk39bbakg76yp5g7w4caahphdljkqy4k27zd";doc="0pv7717qcjd5ps6vnlmxk1bqvkhi9lx6j92i6ggnak8i1izd75fw";source="15ksx2lxxyklg4dcckm82hysin9r2v7pa3v8gjns4wabj4hx7v4m";};
+modeles-factures-belges-assocs-67840={run="06n2871v6jx29r8qjgcpg4h3qbnc6kw24kfk2f08wbc2rg2xdkxn";doc="1509xrny3xvy7nii0v1rga8ip18g8bv3d6vf8a3qn0cayfa9p248";};
+moderncv-62128={run="1icns5fym56yp1wymsf50cl1wh1vc9vdix7lxapp18prx3y3kf0s";doc="1sj75g51dx8yd13ywyyhs8r135pgg5jv1h0zshxsdpj7b7hbdxf1";};
+modernposter-47269={run="1qc422hbqiyy6b539r7kyrshcja58mifdvs3bva1ikdxanxhnaq1";doc="1z9b3fanm97c3ik1q6v06qfwrgqcqwyi79h5dlhcnpwsm5dxqj0s";};
+moderntimeline-55518={run="10alhs944akmqfslqzi09436mmnjz8nm85r8jpjwpfcx28vfdwnh";doc="1bnz01q5rib9gr724gq6saxvzpg3lfmimh14rw5fn0fcn9bxlwsl";source="0y2kfxcpacslpn1ly6anv0hlil2x6wlsi37w9b8hj7xfx95qh51r";};
+modes-69113={run="05xf7g14jgs8whl3jirb2aww93mq7l64vddx68kl8wqc43j87v89";doc="0xpl3y1na7ldb3yjp808nywpg7fqf0v2mwc8rlv3jzpq6lnqyjb6";};
+modiagram-56886={run="1d3sz2yxc1n3xk6haja2yz14jgcl15pp21y985h7dflk2yjflabx";doc="1a42ylnkigyvvkk0yrxcpypz1qlki9r4jzpy6lpky0fa6bfbl4yc";};
+modref-15878={run="0pd0qd9yjhvdl3icrgl40lgyjsgahjw1jgc2ah75bfcwj02qm4v1";doc="0caqpnyg5gbv3b6336w59nn0w9ic4p12f5ig2n7r6kg8ydhp53d8";source="0n28d6x8w9rh3hah7p1imairyyywssajg7zwssp03dla0xlgxrql";};
+modroman-29803={run="17ijrx7f87pbkwbyjwigz3jr85fwzq6rr0pz1591fk9i36jhjaal";doc="044v0nkz0h1c7xsb66kmpqvr5gg4lg1qkx1x2qm9ijdpsbc4zsng";source="15xy8jpp2ac07qq0nl3nskpv62c59xb8qkl51irvpb0m01d97y39";};
+modular-44142={run="0khqcm28cq8cr51wmyv954zy85k9dxvmiszz5w4izxvyk14d56sq";doc="08qhmna1mbra9395gvaqbaqi3rmyhhckx781x4zw5439z2bpmg39";};
+modulus-47599={run="03sssw7yg7pa7i3l29l049qavwxphih5jvc86nysdzzng4a4dd7n";doc="1ylrs9705mgb8ijj9fq5w1yyd2fi4ykx8gpf4ckdr78h6rvzkr1h";source="0gm8vwidnls0z31zxcd348xyc4rrvcffncnwmazi9p1zplhg9ggk";};
+mongolian-babel-15878={run="0qv413sx05pz5ri4p9znb020nhb8m2ybapcdgnxvkdamgbfvi17s";doc="1zprq4x55rbd667ll7a1rcscbqvg3i4wafmxnv4bksdm8p512w5z";source="0qf83v7iphfavxh7kh1zav95r6q3k0aiilzwnc0mm607bkjzc2x5";};
+monofill-28140={run="0kpzszxph3bx34flvhz746xkdpcc9mj0srifki9y8fa6vgsk2rz1";doc="0czdlvrwav8n3p9afa40icddh37md6g39kmy02vcnwmn9k3izp4p";source="1x5raychfhcjibln59x01fay8r25fwxba4lwi0bnd51drvzs76pn";};
+montex-29349={run="0rgf1rflrf98jayyhj1gxz0mkw74qhd88b4i2ccf3mm0kzwlvw0a";doc="0w9izkjmb90d4x5j1azhlskhgfmxh67jq1awsdv2s52psgscpfm9";};
+montserrat-54512={run="1blgdkfjjjhzk41myfp7bb7x5wf3arwapas4mm1770d46nab1wwr";doc="0blk6jxz1xrascrdalssqd9pdrvpai3k9bqbvgkyngqhp4rzndv9";};
+moodle-65672={run="1yr7laz12x1z76aik10dsl6rpqgwbfvy65k5yhbik5iq9z7wrv1q";doc="166489dmj7ysl0z7f6whnkk8ndv5bmb9hh7pjmp6lprvr9vvqxm6";source="00n02k6hskbj8rb6krcv7b681lx24sfyxy8i28rf4c78x4ds0420";};
+moreenum-24479={run="0cjq1a222c813l93yzf9757dcai55vh24r17cv6awv0d1xf6jggf";doc="1g71dcnbcjb2x8ilhyfbkbb55x8740pz6n9gzdd8h6kyxm879zvl";};
+morefloats-37927={run="0zdlkd53zl0y69d3manicnd8ch8qls6jxgr4mncqg5r57lqp10kd";doc="09xmhl2zaxzyvys63n6r71g6qp281f6y69gy4zbkjwb1n68js1i1";source="109wx7axxf1pgpxq34pz9i1cg357il0rbz8h0xqacn2yykh9q565";};
+morehype-38815={run="1yssb0c3l0sqyv775mjnbba3wv1h6497x125li68q8iwjc529wdr";doc="14s0bvxj2fjrkcrdp576c0ka1appg9g4ri4mc2isfb73yc6bmgh0";source="1sljhzy05akipng9lfajapvdm8jf2jf50v1awl38ld0wfkdqvcdq";};
+moresize-17513={run="07vq0wf250ixhrg70vdvaz7zh33zaq5sm32ka8qh1ab590c8w7h8";doc="1qa9y7q1wi7f9klziwgj6dw9c7bh453srljsx9m106nbyd1cvnpr";source="1gzj5bh16afgl8dg5z44h7d4m79i5naj4wl09m17x6snvfz7ifah";};
+moreverb-22126={run="14srw73gbfr0c3miizzs1rml2ms504hkv970p4dhp1wpk8ywc5f3";doc="0bp2lmzbd3zxqhijfqc7im10476xc50yc8amh0vf017ll7prcmjh";source="1snpyn7bc4qbmamxybv1j1h407fp597m26v2jq6yzijszfanh3rq";};
+morewrites-69306={run="0ia2cklwyp7avg1sncr7qj60qmlhc4zvmmlp8xjb8xp5vgn6jgy0";doc="0xnbybiycp23g754ys39nmak8hfi30q10ga0liaghhykyap2nisy";source="0cx05ra3n66jgx21dkq3ixwf3vmyfb6kswvgg9m1rn6c2vi8902f";};
+morisawa-46946={run="19b8nzkwdnqk61p1fc7yygjlrdimawmbam18akphcm70qx2h01dj";doc="1y218bablhn06njs5zqmsl6jvvsgyihm4il1x9722pqvvyxxf9q0";source="1flrf2c2jxpq33g26i0m2h63yd5jfy9bdh80idpx1m6bi6hhq7ac";};
+movement-arrows-67270={run="01kbaxy2wyzxla01gbxlwj5i28ahak3xgm7f8myv5d6p0s6by0cz";doc="00v14fnh2crcmnnkdj7dxjidlxl16iq3nfygx8igas1nbyni7xfj";};
+movie15-26473={run="1x48h56mw1pzllzz5b8fx5ikhp08gx9jybdn7qk3jvfy13a4r5yr";doc="0bhyfgsjwmvvl7lnam0k254w2rzn01wf5gzn38ymmlcbw4ajkkxl";};
+mp3d-29349={run="18wgwwvh2vj1adbvbl1q6lh0wy0cynfvrx6cgq0m5nqps7b3idra";doc="032ywwjrv21ypnlidvn95dcnq179pdiail86s4nxxllkjrryc2db";};
+mparhack-59066={run="068wp9vk6ablq8mhj165k2r6lg1llk1i8gyj71ha2kcsq62v4a0x";doc="1cs2ypwz4wkb3rs71wichmd8zc89vj4r58srqzmriwkjplhaw3p3";source="17c1pq9mqn0gaffawg66wwd2n9cd31gghlvmrpn9m9z6xcdm0ipa";};
+mparrows-39729={run="1hmbpfw1wn13zp8dksnlc86vb19zs0dbwx9hy0sbiyfmb7hidznc";doc="0ly0sw1c6i3k5nh26a260qw27x6rmv5p2zs11yh5076ziwdxnnlj";};
+mpattern-15878={run="045sji1qqwalvmiinqkfm3x4rk2jc7m9nya48brcc0rc5icq7xqn";doc="05b9pr86yy3hl14jymk4g4mf6f5v85b4nv2bc68m02dflvm4wnsj";};
+mpchess-67704={run="16wykynx5m3xdjnr9mfdqhq4yn4rw8cf7314cd05hf87i4r5vzwh";doc="08c4kwznib00895wwsv8npfjxvwhxv7hk58vh189b49jjbcddds6";};
+mpcolornames-23252={run="0bg59x762rfsl3whzqdpajakjnnx5jbh55m73dw23id1g7cs5rsx";doc="1n78abrsj5xj1gd2psgph7x4dm8nscvwmlp6ijz5p6xgphgqs5bf";source="0q74zsx3ni8bzl0k1iwrr19k7f9vkwqfm0bp24m91wlzvh4vlk7r";};
+mpfonts-54512={run="1z5ws1kr5s07xwcs39w049yvhfwadybjxb32kf9qd8818pgd4zkc";doc="1hjy2jqm8mlrwiipl4f1rp10nya3zcy2vsyibhs7f280h4zhdwxz";};
+mpgraphics-29776={run="0ymwcn16n44y47ngdsyb0vvfp9vjnwixhxk67z6ni5d19f23jqli";doc="0q04yj9j9f9j9rndqn9k95jwjm41g1rf5raqlrr1cn14bax0lr4p";source="1hacfhb2dbflvmg0c1lif1hmhxkj3g6j1mdlb3wm43zczgaavnmm";};
+mpman-ru-15878={doc="1x3drpi21zcmkhkscvl4l7805wskqa4zskydb33i0asss5p62396";};
+mpostinl-49559={run="01p16dzg5izjgd64l4qgrhx0dm99hp5lrn9v2rlghs8m249fwmv8";doc="1a1rhz5q1i69bi1blvwzz404h7mgjkjcp9c07dd8w6xri304gi1s";source="18rfna80lz3zrf7wynr8zdbiv36k2n6a8wd430r81ybr9233dhxp";};
+mptopdf-69363={run="1l2182idlbzci9kjpii0zg3c7fpmzf02dz5kg2zcv529mjwwv91f";doc="0q9jlvall8mf9j2zky41bhpz09yi061rfpkpd0arj346ah5w9nni";};
+mptrees-66952={run="0smqvznscn6a220syvg0cj4dbf65r2gy6fz0f4wmfh88l83fy0lv";doc="0sv029k1wi76hw4h3169m9mq1vd6wrjfvk0y9k7xb1zw5da1d83c";};
+ms-57473={run="0km07va23z5vzx87ndrv9mj0fq4yw0kv7qygd59smhm4q71yspkl";doc="122xwapvjzv9qyh3p1884bzdpalvqzzkmzd18gqr3q3r4cmk2q20";source="1myxaybppzkdl14h4g12xcp57zqjzkzijryv9nd6hy6ggl9y8i99";};
+msc-67718={run="08rw5drivv1frf7c3r0pfy3slp1sz3hzw4gl55vcjyh2b58v9qz1";doc="1qwrg7gwmigwpf9mhmrv25r3785z3nf7i5fh2q4y2pyn2x8l3bp5";};
+msg-49578={run="1g418z3slb3cjf0wzgwgv0zkq0jnj647zqh6iqvlv42r7bil9001";doc="0miycfpf7s74jz831kqbh6qlkkzq31l1x0fkf9d04b8zp26mzilp";source="18djwd3g50ys4ckgzc3dp0y344qy86ni327jmyz3lpnqai8w1c8w";};
+mslapa-54080={run="0ayfh1yv1a8wsq9qldgcmvq9d12sxwaa7df5p3bhsp0klbqf7pzz";doc="1hiag2x2br0c0qpmm347cyxmi58mwg2x0lyqfakm87f68lbbxdq5";};
+msu-thesis-68480={run="1g6xxc39rvqbypd1njgcx0zxzrncsvrfnk3jqlbcaqxkym9qdvhi";doc="0b2dbp162hg610jcag8cg88ykckl4xj9gsmpzsrxxh8hmqv36g7p";};
+mtgreek-17967={run="17k0lvghiw4milj4cnf6wjhsj7c1banw550dvlw9spv60lccvqqz";doc="1qkl09lkdl9z6lm5hkn5c2xry7xd0f0ijx6xnyq3l6q99cnbafzq";source="13h8knsfbl91g20gxjw3c0m6j33wh4zkmm32ybfvzlm8q7nf2lhh";};
+mucproc-43445={run="06x3hqdp6d6nm3n296wnj4j4w93cwgjpz0nlw5qj0z44zlghs483";doc="0y33jak5lzhjp4v5d4pzfj7jlrr87dl6wdnkqcc0p9fr4fd2h1z1";source="0xzv1m01rj74gg188snznshir510lj5myckfjx7am6sxwlfni63i";};
+mugsthesis-64259={run="19bsplm3qclalplvsybvrgyk9wikr06cgr9zv1av6dp8djmz60mg";doc="0md9p75r8m677pgfiqm30y7nkixa77a244l58fcmj87i3j8jhx3r";source="0zx4npm8qzw4vxxi2fr7ylazga1mmsaq5r0kj9v614iybjg31733";};
+muling-66741={run="05bhyl75w3qmji5s8n6mv85yjhq5nrgncnqshdv9fbzbgcnk7a97";doc="1fpsblzyxy0kf5vs4lnxdq11nkj7d9vw6a3vzyas6dqrlb370vzx";source="1m1yawp0wm3zafjwlpv6m010ih0gb24q8v2h94d5l2w2ymkyx2sb";};
+multenum-21775={run="1jn6xqrc31zzaj9yk244g3sbi8fj2klswbg24fkclgj0cjr1xi5j";doc="1pnjjbfwgy6ksdl76n9iiqla2wl0qa4370n49h4xy3rmrnbjmdqs";};
+multiaudience-60688={run="1pc03jhvlq35zzjsx6sq6bgzsp2mh861wqbazrgp7ilni1bqhqsx";doc="1ja9zphh154n7wwhqgl4xj4as17ag8mnr65k0wf2npjrir7rfqgf";source="04hpd3zsf24vwas726jq231p462dlb9fq01gx4z8wg3zcczn0agd";};
+multibbl-15878={run="1aj6j8rp94mh210pdwd9d4a5s5z9v5f36wpylwjv4v2ghmyrgyap";doc="0r4hnp4sgpx9x0hmrl3qlw55xlchav3r8sym2vnv4sqjnx4dc740";source="1c7cvjabssssy8wq6x6lr909zq4f0bkhdzx1x37n3rxm2ngdqpbs";};
+multibib-15878={run="0ma2fwy3p9b6ijf727iw2xqsadk1jvh1g27snqvyrzhz7702b6xd";doc="1mwl9yziadzflq29nwv7bnbdb07d8bsxl16agj7ydmiw59ykv1xg";source="1g4d3hf8s1df57yhpw04j6bgc8n7hc16dc6qz8jcyj264vfv6fgp";};
+multibibliography-30939={run="1pmvlk1rvr98ig2zj2mgq91a61l0hib9aaly2irfzl28m092r3fg";doc="067wp2cmmrcgwkaxy2ngmhkfbiykr1lr0zii3i6xyyd6z2aidrfg";source="1p25yixvajkyksrbl8zax1jrb292prpjm97b6vh74v478bk21kgv";};
+multicap-15878={run="0ky6hrdsc7wl65zk9krv5bf5z5lbiv1xfn4g9q8b3pp6ri874hzc";doc="15zkw0sh0lf5vdi219h32nw0icq88cj0vnz9g9j7zb7xqq31f5g9";source="0d3gyjr7kwx25gzsl4j5z887c952zxrsh3qk2j0cbs6yahzscxim";};
+multicolrule-56366={run="01k425dsahhikw9n03dfarnlqc1irz33rm9am6w3gx8pd2d2q6zx";doc="0h5is5lmqqybyp9c8kr0d12x27lgm761dcjhi63i7pv37hk0kylj";source="0blj75rh7vqy8s8c87dqpbz7d279hngzl99272cyskmj8m4y6jpa";};
+multidef-40637={run="13rv808x0bz97cm45r2rjxy0yhmjycswcf89pl7z182acrbs30zq";doc="1jcm11pjx3d8105k12r120nqjjyk0ncmbry8pvkcpwf8kpxcqgp7";source="14y2vk3y8f35wxka65fmj1i235hbb4sviq8g0j300d24nlp32xsz";};
+multido-18302={run="0rb320bxzg83nq66dx4d2jy3cmz83zdmv7xfw5n1chcswpi6l39p";doc="1s8jhzznsqq8kjw19l6gdr12x1p63v3fyzfdrgmd9z66a45d6hsa";source="1ypcg93f9n9cv3y6rj92l46b61zaj8wm9cfps1c86w675xs76zaf";};
+multienv-64967={run="0j0s86c6xqpww1x46l2vn66l0wflqjsl5q4jqa4089xhzaxzhdy0";doc="02j3gripplimgh9qj3mjy9nlifdi6frj6cawxnjsm35r19m9ia5q";source="1s28zxxvbi5yg6iigdixc5kmn5w7h4hss3xrv04hr2838xpma3wc";};
+multiexpand-45943={run="04v8qz91w4fayy3llr20dqwvdx835wl9fmxpcg45sd3yrik2s4nf";doc="0pw7kqc1r0mvnb03fp5l3gpy5m5zvrynaqkg4xsdrhw4gqxlpfy9";source="1n1bngipr1sjjqnzsdgyyy08hnk53f81j0fqffjlr5siy4by1p6b";};
+multifootnote-63456={run="0a3xwpcyg1kkdbvfinpq15p2v2mnynvk08p8b393px051ags017h";doc="08j63v16pdpiwbcy2hv63frhpc6i3lw5lmnizqn3bpj43qkyig7x";};
+multilang-49065={run="0zkkfvkybq5hxbdwkwy5n7gal1ir7ixg8342wynk3ga9z6lb9shw";doc="026d5yxli87f2svfyqmfzbhydwd4c929n2v11wk5prg4zc3vp08k";source="1v4ql5jxlmpc6458qcqvbsrb9pf3dss60z3i3ylmyp6mx0kjmchr";};
+multiobjective-15878={run="072zpfc1achwj0b1dv8yskdcbg92a2imnmn9z492l7xxyz889n5x";doc="161nkl1q2kc91is8y6h2j71hnbly6hv1fjfmlhb50xypjgrv1ibs";source="1nps6rl8di10mr5r1hd71svlj0dxd51bk0plszk094a3r3l6z4z4";};
+multiple-choice-63722={run="17w8sc4gki7zlwkg1vqrmqrd9id6hdjf3kcvyavbmnrisri95hl5";doc="1cjvs2zwcgj7w34p3w9cvv4dln0q0468cz0j4vdchqjdmhqkwxhp";};
+multirow-58396={run="0bsn4xzliq9gllmac4wqqsnws9slywc0d94abh81awpzv6vy8jwj";doc="070q5s39pfdq5wiq7crhdqhcyjalpd8kydig4djgji975b0xn0bk";source="08q074bixnkvn7hsi1n8vx0r6pqwwkdjsjnxz0n3lam30x4j1jib";};
+munich-15878={run="1dns8n2xybkf1m3j82adid2nr8ngvg5nnlxr5ky8ha706bmz1lra";doc="0dzwmrv636nca34b39mpxyhh99sr3s5k2rkj7jwms2knlfn81djm";};
+musical-54758={run="0rn4b1m1c58phyj9zzvyxdxbilma1bnncscwmxc8sdgb9iiwmlzm";doc="022s1z7d5ins4gpklg9hadlp1gqxpr6862i1g4wp036db0457l78";};
+musicography-68220={run="04vwhhd6mlk79bk5nblrdb6vlv2n2r1s9dfx752p3vj584w2mdmr";doc="1144kbjzybzfcxqbwlcfnk4wvqm7kw01slf9pzpb5jqagwrq12sv";};
+musikui-47472={run="0z2ya761bf0n7l45dqkc626s9d66qwr810fnwf34lr1876y3sfyi";doc="09sdb98m3j5wkl4p7hdpdrnrr0l25ni46nlhkhg1g54hdggcpjb9";};
+musixguit-21649={run="02cz225x5s3spj0wf9c51ka0i1ysmcrvlpa2b8vxd59f4pwz36am";doc="1g8hay5rdkpa4pjj0lj5gfs7xmqwzmzxnc8k023ahlz38gdczgnz";};
+musixtex-68484={run="06anc6izks564xxia4l67qazr25whyxq897762f7hk0a1pvfw9ha";doc="1xmnf612wfgxbf7rgm020jcvavqpnahad1sx4bnjcm1kapbxh19r";source="0ari7nwxlyj0lnqhzcpq4vh9xn0kdzqn9c1a5ih5hp1q2zwx2m7l";};
+musixtex-fonts-65517={run="1bq3nw6zig0grmmgnz7n84cvxasq61h2mmvm1j6mnyv69yhssm2s";doc="1pqr7h0r7cr2clzn5x74r2z78rlbczxmdwc7bkpb5a0k002cc9ga";};
+musixtnt-40307={run="0g2y52s0151br5vr7hjv5dfcyr96cjxp4n9ya3s1jj81q6q01jjq";doc="1y933975hv5vzwrgjizq315bkgnhlky21blv9kbnzf6kadic8ys7";};
+musuos-24857={run="0hfrgx3lk7mf9kzf6n8hswzh116pmllx0k3djbfinvvvhnqy972s";doc="0zxdnzd8x42z5fpvkarhsvdw3x4bz6qppn0iyjff1fjzwl8q8dzh";source="0igksc3i5ydqps0g172i2hkb854bnkf7xh4jqvwlimrlnhs7nnkk";};
+muthesis-23861={run="0bbv49nnngkpnzq7kq15spn4x67yigpyfk8ymcgv647z0bvbladf";doc="1nx1qbgp67n73k54ppyi4li4flnsyi8jmy1lil0gaza38m5y8aak";};
+mversion-29370={run="12mvnkij2q08j50ka3nngmcz0p07lmvqg3jl8fxrfdzyy0h7zhdd";doc="1z9d4bcylv4sk79hfzgy36bza0r9lkzw93mis2m6ypgdbsaa3n2a";source="01dbma0p4lhygs64aym66j3vp3c0hpbci4x42mpr0yvjnglymbj6";};
+mwcls-44352={run="13a1vldimwdjq9lna63gy6gcc9gnwirb2zrm8m4g170q9r2b01rw";doc="10nc7ai9brm36hqhf1czs1vvhp9nqvbk4h8r9l02jsdjbf4rrml3";source="1fdg5j1jrsdaavg20sai9ffrq4qyffkkpkij5czab5zkbmiz8kv9";};
+mwe-64967={run="1rk5530j3cnmf46i3gb6wc198ay99pwlbb80ynj33dypfiwsvhcb";doc="0bnw57l8bb6x4k8i4icc8g215bxrccmn39vyhj888ijygdw2hgmv";source="1fl2xlmqdas5rijzrail9yqlqz1s75z9fzkip5zjb8s0gfnbg3qa";};
+mweights-53520={run="1i4jp9yy9yy1miyzcq25nwm4zqd3936v4mi2acv4g1rgzvai86vs";doc="11114i98f0qscg9796df1vwkf2m6ycbaimk4qfwv47mrxhvwq5qg";};
+mxedruli-30021={run="0xyp3zxzd55h0m201a189rj9h7js6ky3vzikb4yaa7z8hwsad7hz";doc="0ydh0292i72lb9vcglwq0pl734qgrh9sqdy7qvdds6a84jwc5w7a";};
+mycv-26807={run="1nnm6ns6qx6ny4xb7z61pajysfb0nfl7gs5dw292bwi7daxs98xx";doc="1d3rra14k69l5pfmcw4fwbkn257935zdiyd2p9gzx0bc28ivsajm";source="02ailkp9jr5r70aphfzp6kjm83ni6gigyqn2nr0zlsa098frpxg9";};
+mylatex-56751={run="1zihhgy4xaj04qr6rfv73050rvb8a77zglaqgjby5b4a1j5vyw7x";doc="1bdigldcdk3rz4p58w7g4qssbx13jbhqxbavf3x38r71r1pys5x9";};
+mylatexformat-21392={run="0nns88lk6wdq053aljg9k17d3g9fvi75n82swglq3jxmxx2k7r89";doc="09dnsxwdhdnpwf0y7cfj6xh8gws32xn12fc1rh1xiy3ivlynj8c4";source="14rd6zn88zaaznnqh577zgbbmmdmbkzn03201i459v3jzcvijfp7";};
+mynsfc-60280={run="1zc7lgr1i0g5rszh9gzcv7fs98mk06ms5flb3iv2zww0w9r7iy0i";doc="01ig210x2wrdkp5k7mzshhm26958zmvvlclyk81i5wb0i11z9p77";source="0qsacpapa5vhpcwhm44dj13zpx9a3kv2j3hp3848zhq6rpc4981f";};
+na-box-45130={run="08xixk2hl5w876x6hmp6h044spi0qw1qbgrqklwrmkxkgpa27i3s";doc="0i1p5f2nchl9hyrkc6s3hsqcvmyxsi4dbwyr0mph8slhw2rzl711";};
+na-position-55559={run="1amvifgadhq73avh1dq9mj2v4s5r3hlr6a3z4wcbhw32jd31ncbx";doc="0pcn0r0p0z7lxyfsvcnl9skm5aa5xi6362vydpx9kv8m11gl7pjb";};
+nag-24741={run="1l31y7mr00s6md7a68cz51yv0qfd26xaj04ax1ph6dqc97r3fv1w";doc="0gc56zgva7kziny3ridswnp8rscqi1mg51d8x580pidb11mp7dw2";source="1fh9nfjbkvw907ra1crqfhm7hl4k703g80w3c8qvd18r86wmn2i4";};
+naive-ebnf-67892={run="0hw3ra8cmmr79ii1l57z68kqxqjfwq1szl4fg1wykrh9cnca1bn3";doc="1i3h4328sczm3hv5claypc0qfymdmbygr4w6zankb3x0nzrgk9sm";source="0z2df8frslvvaqjsl6js5pwwnhjqkj52dnrvgbygvdhnkpkp5yix";};
+nameauth-65738={run="1zahfi4vsv4s43p1bvrbcd330i4z6x4pf3yy7vwbjdfgzmq39nx8";doc="0map4kf3r0pydsllp1fggcj9z9rir3ipnx7dz2g5asw99dj4dlz0";source="1w3qladdlwhxx7yzsjl17p0ykswg4phri0wadni4s953s04l1i3j";};
+namedef-55881={run="06nr8bwymbc3ps7whpxnsnbnl1fayz36hlgcy5isg0gcx8bdspfh";doc="080m0d24cish4an6p4q7rcrqpr2r1yvwvzk431nszhm39h7d8z80";source="03kg4zv07ch01n0nc7qwk99n32ifwf89z2976wg5k12yq51prplh";};
+namedtensor-65346={run="0jvcqdqnvnjm9z1jcdsa86cvv4f4hq94yi6r688j2sny2700q7a4";doc="0cjbz9g2b8cg2wm97vdgwpqby0jbc5l2d7j2cwx0j571hchlijim";};
+namespc-15878={run="10sbvwc0r3lm90qdxds13iyfcddq1vjx2p8vvs4g3sav4fk8p02k";doc="1z34xb5s5fgl4rag0fmc5i5j3jb810f543096mxpq46j98rcp5mz";source="0xjcnrrrrw4032sd6wscxvar9y3kd4547rsd79dpkbb0ksmqbqrx";};
+nanicolle-56224={run="1sk2frvlsxzrl5cv1c1azqpxbpfr4b06ssli54j0p5aikf0rls1f";doc="14zsfxcyw2ckdsi3fg5qwxfy6d0yja310ycxsi3xrdyxyia9nrd5";};
+nanumtype1-29558={run="1izx9cjsd46ydhrl0ixsjz23nbk7mfv3swfk5ada0d4adcm7b73h";doc="1sxap924dzf17vslp3n71r4mj4f98m9cmchq603c7ara1cyjk2mp";};
+nar-38100={run="1nwk71qirapkg3h6jwlv53fm6zwb2vq0fvmc4xcanf19sm3331mk";};
+natbib-20668={run="1wxpcyr1b6k1rzizbz2g452klrmr6xh98csqr6pawlnx2zy3sx5x";doc="1hai95c7ah61rqrsvzvn0ppvr7pn10830dp7wn7fc0j678z9r3js";source="1qaxwivq95pf014w39igh070cnbs7n0k5am4waxvdwkzql1fafpy";};
+natded-32693={run="1vxqyyfrmrkwyzil0a3xvlrmfzyfxdkfl10rlfzgwdwd63bb99kk";doc="1anh6k76h573yci4lcw5wyf552zfqdrf75vpg19vrr3nijhj9k8v";};
+nath-15878={run="13j02zq77fv4c5f45qn3hgb7v20xi0d0dpj0m2pfdc7fj74k8ib3";doc="1ppyrz9y2hkv6pq18w4chm90f9x9d3qscw679281si2phmnkl1mn";};
+nature-21819={run="0b1ra8babjwpn7v22rjc22pjrjczh1wflhq9ihbj5ag3d10sil6s";doc="053m69fwgcfpa5gcp3dnf7k37175jcsclfkh87lb0zwcymjghlw5";};
+navigator-41413={run="0ank98y3a7b5dpc6gxqpgshi5qvkbys4nyx41gf6hkinmi094097";doc="15370abnfjvql6gkcamgq8q3p4kycgzlgdla57w2swzwn1bd6x2h";};
+navydocs-41643={run="0isw46fzvk85i3mimwsc3x7wg8g7ifbi23i0d4v676nd92j1i72n";doc="1aiyz3z489bdsx4rh79gxbdb986hff75qik97fq0xrpk3w6x6cjq";source="0x1n44brcy38fnfp03j9xl1awfawwa8d0c5cg739yr404qbq8dp4";};
+ncclatex-15878={run="00w3g79rn2xa33al7cma09b8l9na6xd5b7w40j8z9day31i2p89p";doc="14fvmjnnw8n22c3j2mc44bqrdlsxn28dasfk9zmajvmxgic4w12m";};
+ncctools-51810={run="14wam15z6jdl97dxibf789ji0mk59mn96fn5x0vns63d8y65fh6y";doc="1j5j6zsawp9i62kwb8xxzxsvh0qczx6qd1ppq38nlha3cj8k2rfw";source="15anl5wwds08h2msz7m0a11xlcqdqgqpihvcrmy41kdzgnzgc56b";};
+nchairx-60196={run="0nv33zq3gyda9cxf4q7ixw0q73aabjm47mjxqipl9cyp1wv3r0kz";doc="1pjnazl84w4bz7lydhy6lklh3kjxri12gswwffw18a92jff88acl";source="1gva51szjww2qr33mizyxsgd262xcw4116nn1dm9z0dg278hwy8l";};
+ncntrsbk-61719={run="0i6a48zbn9lg4pwbw8ya2wjjgppwac816fnbpmahm67kknx4d7ij";};
+nddiss-45107={run="0d1maznv4yqpjzxm90vdl68h6h7zr7m0k24dirq2nc1cky6l0j1z";doc="1apqd332kj67rpa09md0gb025kx4d7arvqj7f4l8krgsizxfxcck";source="0x2abanmpp7sv4qbwl6in3yp9k99fx453f2fn8xw9b0z053ivvp3";};
+ndsu-thesis-46639={run="1bjrvsdmv68zlm2xd9v4jpkg39zvjhcrd7435r0jh0sffai4pdlc";doc="01jfadx1dcmm3q8pdwpxmxfmmp94xm9y0r77220ffrlf1iczadkg";};
+ndsu-thesis-2022-63881={run="0zirxqals86gkjm4429m672a7k9n9nl2hx264javqhmhngcybhcx";doc="0jf3gdjfm1ycbnkp775b7hzr4rqd0alciqjaignrfqhwgdr96gh1";};
+needspace-29601={run="0abcqdcykpq4wa5a95c8w1bn6cz90zlsy146186v0s54njc5g3mb";doc="1r9mn0flqdnaca1w2g4lsy0pk5a9l2sjnkpzzg72qgll9dsqqkmq";source="02j2f9wl2ljyi82dxk7qk71dmjvgl17vp1d3hgvlc54gl5qcwqi0";};
+nestquot-27323={run="0l2glc6aykd492rspxphgscx0ykc8cakvqkm8z99jq7xxi80l1x8";};
+neuralnetwork-31500={run="0rhvhk46z3wgz5w7xrbmlmgk2px8mvajbrrj4ygpqa58g37wl0v7";doc="1apv7bhss9ilqcm5fxwg83gxm9i8563671jcsmhkl13gcii1lpv8";};
+nevelok-39029={run="0c4zij8ihx3mz615jr4z150d61mj4ln88zrdbsjx9hlnandqkij1";doc="1x7jwmp32f1wph9k03q6ly9nbmdpsrkhyvn5j83n1fj6nj6hmzqf";source="15di74y4h7qgjh7gmmaingbg71jrlaiz1qxf960589k2xshslbi4";};
+newcastle-bst-62856={run="1qzr66mjmdkvrgy5lcv0yv82vx4vygxwa7m8lj6crsffwyaxaxkw";doc="0crwyc9r5zqz412j45c7qh43wkdj2z7rfrmmc510746b9nm31l13";};
+newcommand-18704={doc="1vlxm26393psl4kjfh533q03sb4klnfq84nld9ggs8l5x08dks58";};
+newcomputermodern-69379={run="1p35sffk1hnffhqfpb13n0qam0f002yp2g987vqm9p4970fzgs0y";doc="1n2hamvbjgjnqw03vrml6k5rw2njf31fz219h20j82k29k42mmsb";};
+newenviron-29331={run="0vij59qibxvl81r367yxfl4mgp8fjzd99x3aq008hwh3g1d8ciaq";doc="1nvra7lh4zvxy70hf4ndj4nl3ij3ar8g2fxrc0951qvixz9jx7mm";};
+newfile-15878={run="0gah9qbkpib651rjfrakzldi4wd7gv74y8j455n1yi6wnr0yq570";doc="0vqlij71kfjzbl08sh38rzs9k714xigjc1cdvvpj2m6bhimazp76";source="0sw9cqids994lscbjif8h7npp4cmzrhrcvccspag2aa78gsvz04i";};
+newfloat-68434={run="1jhaccf7ppi5m5jycz77s5nldbmscydzbd2db8bmb0qx3z858m48";doc="11712zqy292xs7i4xvrrv948i6l1bwjxsgax7hph9hjfqs086rmq";source="018msda5vgamyn1lmq63rwv58h9z49q4rd09l7slij14djxwgdb6";};
+newlfm-15878={run="12mryj5w7dpn0mdv91grkrd24n2pn68p54bl70bg3pddvz5ab6gy";doc="0afpxw78vijnhx2rwv94ar6x4ivcrgz7873vdc5n4dafgg18z78s";source="0z081mn0zf92ana2v99sdyyqjz4lqnm2ymndp76xwih9p1z8233s";};
+newpax-68762={run="0dn36fqqwwa6jzcpznrjd7fk2mkzd37mpvyicif0dc7g125whndc";doc="0jcx3lvc1ay9b2dmj9f1kd7kxmyql95dn4xw4syp45ivqsag3p0a";source="0i7ilsx73lcifvzcffjp3n1swwv1af6l3qwn46mykxyv8c1ygjsr";};
+newpx-69380={run="0rcggz9vf7w0vvkba2d5dg2zmyq5px0wb5xzc0scvdn4bgn1cjnk";doc="04hsww1gwp04nwjq7ns08bi73yyy35l2k3dx4akr8kvr16inn6sr";source="0larcp5lk303p8bryaihfdvzacbkzmx4kldira7k42sg31p5hlbj";};
+newsletr-15878={run="0hl73l6cv94g9k4qnldxad6nl56n9c1r9rkwh2c38sr31d6fn8z5";doc="15bd97zlny5p212naaig42li7ki3f9bfr9b5pqk0vhbf17pik9za";};
+newspaper-15878={run="1afj267dlvgcw8028b4c0v9rdj77w47zjgpk0grbapy7wjgpyjb2";doc="12hlji06sd7bvw7r664cg8ijxabc2q1rb7z516ph18ayjl5vca82";source="1h8abnmiai3c66cjndm6xawz00z1pfmgwlp6w43amjrk1rm4r5vm";};
+newtx-69381={run="1cwaaax209k8196h90q0n0blkb638047hqzprv5lrzjx5sa8xafy";doc="0zzqswva33n8d306g5znq4zyhppqqygc04krc4wzn2wm2jjh9sxp";};
+newtxsf-67051={run="1si13s0wcgb8smy9lb277y11iy8pwcngvlqann31f8znkp8rk1dh";doc="0f76vjwqa1c1bn7yzfcy47k1f8kp5y878mm9ry3m2glsscixr9bi";};
+newtxtt-54512={run="1rydma1iqcb7k8ihyhpgdbrq4vpsy2dwyij2pr5p3bbmsc60kc42";doc="12mvwqmpb1hyn3l98z74qhyqzkinzw4q4f4q0mx1z586238q4klj";};
+newunicodechar-47382={run="1zr5w047xqg9bi6drl2rw414m9bzpa5r7n5270zr8k8jj74xcv7x";doc="11vk77c83xy40i9vclw4v1h5wnr03mb77fa8s2lhi0p4sq0c3vgr";source="060kbd07al8cwns5877ap7irpf3r3bkw0w62cwvl67y03gcmgr70";};
+newvbtm-23996={run="0d9q6mvczacdxykp381181mnra49qa0y0mngr0dnqp24hfw9j9l6";doc="0k6j4xpvjwwvz8cipgrqvrs2dj66n7yzlr9mcfsgd5w6rm1p1h4i";source="1p3g9qyq4x0ffv68501zlpf1w0ffm816pa0wqjpqf8pz2jmgcg5y";};
+newverbs-64833={run="06m58n02lx0cw6f9689863yqvlmzpaiarzhpslnywhvgfnks7aks";doc="1wny3zhid4981rlxm684p4pn315jdjmkwc002dbj9aq7lhax0dg7";source="15qivriqxgk1cfff6li172lxghcpgy9i1vjskki96pn68q2p0nw9";};
+nextpage-15878={run="1p9dvw7fqspkg6hk6rdmsb5k5m9mkj0kz5a47wg5dgfqgrqpixf8";};
+nfssext-cfr-43640={run="1qp85vnmzsn967iqvzsf7yzsq1a4zxvyim7r0xb8pncak805fs61";doc="1jac2k7nldxq11rcf53glb5y3haqdsxzzxmgmvyzhbrzmnx0bsms";};
+nicefilelist-65842={run="1pjpffkhwfrayh6a5l57j0szaz63cn83mw53v17ibxk8dj4ls0d4";doc="0dqpx0kkgj4vcfvlyl96mllpn3kqz8qh2476kpfw0imrp8klsq7b";source="0q740bd8igcdy11nmpn61sb1yy1kfypvif2s62ym80p89qf8v74c";};
+niceframe-36086={run="047y9dh0p51lyrrq5fkvp4dpiszvf2nmx53hccl8hzgr2bs3kbwi";doc="14fapa38pffkj1hs58b7r1zkjn3dql9d98jzh13cybyfynd5crjp";source="095frb90nryk4m2iia4sq3kfrcfg2k3nq079770xlp720zqy07rc";};
+niceframe-type1-68091={run="0p219ccyqcpf51q71185manybxsxc89d1crxxwqs96n9ppn7xb0z";doc="0a3xh5akhxcrk440wa6zwm7cf4yd1smis4pf4gd3cjv3rlkli79s";};
+nicematrix-69275={run="0n3zif8inxfxvzm7g751439afyjcxqzca4p4gffxj5apw5ccjdf3";doc="1xrvwf25qffjjc8xkkqgrfzq1fl0hchqy9db28kps6l0xj1bdn23";source="1v5x3ry9n6954p8nmjnnmqsqipyrf17fmkd7yn7kahppwc431zr4";};
+nicetext-38914={run="0aqfg8phvhlgvyy71flqsaqwmmc6lsl9vsxpxd61v69hp2qhvggh";doc="0c078pfiw1nz11krcgwbdlp2brdy2xmq6rda9yahfjjg54xgdbg5";source="112ji0zwy54nqswil8lvvcrq0ai7jsmdagvf2786zg9n14h5kr75";};
+nidanfloat-48295={run="15l4rdj7bk1279xjjkgh9a7scfmm6w88civ48shh7gwx8gsvcscb";doc="06ccf5yhrqvshj3d8ic3pbnvmdpjxq54i57y3141wgqcj5h062dp";source="04q480lddynb2gqz8azmyik8170vl056fhfjsnq8ydqj0rchnnqi";};
+nih-15878={run="1rlhnhdz58qqjv563wjpp11ppyqa5smjpzjdzfcra0wd6cxv9384";doc="16klyjxzxj4mipql71admicnzlnasnv9hb5pl52wyk4ic8ggdgwh";};
+nihbiosketch-54191={run="17gggbkag8y4fjvj248wc8kqiklsqmilcyisx9lwcf5irngql646";doc="17lfnfkgjdhj8i5zv08v6lgxrrjg8hzbbq9ihnpcbhj2scn96g7s";};
+nimbus15-58839={run="06bir9vnihawgmc8v4cxjfcgk2fahhh9c603b7d9wzl7mi40prl9";doc="1fr7k4vh7726xh03qz5116winps1dkalnskdywvcvbwk18a2m07q";};
+nimsticks-64118={run="0h87j3i80slsi5nc5299jvslhr1m3hb8hvs9mwz400b76k4x3ig0";doc="0s2v4941bmgxcsmcwz7x3mybzaydj9qshcxwj42fd855sf1rmis6";source="0lkfhdq9iq9lr3aw5dxs21j5vl9w8xjjjxph79imdx6lcs9cbs9n";};
+ninecolors-62006={run="0qvjykxzl9154wbiybwpv4j9da5vyvw2r14hkg9cvyqqd0fn7g3p";doc="14dmp0cm8hbjrd14szkcvkrff3l7shk4k9zlzx6hzkpmjc9qkl0w";};
+njurepo-50492={run="070jmqsm9caidgc0n1cmcj2v0x8dlxxwv54hcqkrisaf4nlkyyk1";doc="04hg7gxg0nplqpmmagqynnddxv12qadamjy3rj1sxhwxgjma9c5f";source="08fan5igmdc43s82s1adq7ymxpvahnp08f90p3p4qlqanj41yh65";};
+njustthesis-62451={run="1ar359ssgan8pk72bbvd4lp2yg63ww6g2ymbjlxbv63qh6czvqrr";doc="0s7dwmmhpb4qr2nnzr7jjh1zfk5fcvk51nxrf7i7ikq8jss0ic7s";source="12lq39rhj0z6msdpshagqylknn31dd2pl6ymk1lfagm2bq8mvx30";};
+njuthesis-69051={run="07lvgl75ynq4fljq8h1pkd3jq4v6zaigqga3mwrhnd880igzk961";doc="02npr4q5ywrvzp8a20mvligfpd0w5wb5w24lx64i9qviid1vrdi3";source="10ggn8dvk6ldsbjqvvixslrzlhg95hfmqjd9ybb890xq3zmc7zca";};
+njuvisual-65261={run="0qgifkahh13dkc07dx32i3hn03rd14pkajg0yw7wx8l0la6nxsy1";doc="15nyzfqsrsvmqg39vidycw3agdy9yhgj7wlfjw649lykbwbqqlif";source="03ywgbapxldv05azn0s5xh9c7a7imq9qwxg90969as3fy5cjbl98";};
+nkarta-16437={run="0mhi640hsr7dy7jbvkqq2yl224i9ialf01jkcma0cq527nvrnm3f";doc="0bqix170zf7lgiv11v4mqyq3iva707zv91z154bi71cvnlknbkns";source="0f6m2wz1cd99s4nxppzdq9jm1hg02xzswgm85dmi18jffgrd2chp";};
+nl-interval-58328={run="1lrj178yhmd4ajwvpdlbsr97sg39k39b8n30wib0ww2lagyw6rgq";doc="0b439r5r8zzhgd5k0n1bzag3naxs2bjd6hlm3sw60viq8fs5wgy0";};
+nlctdoc-68448={run="0rqlbsfwhan0hnxvadw5m77ny65fn0i12mrhwmvr83fm9ybp9q7p";doc="1yh4il6lq6hawxy00v3bfz6piryawsf7aia101knls0nb1ifrjan";};
+nmbib-37984={run="0kmrgd4w63x0f5j5l624j53mhivc7wllzi346c3ny7by6h7mh8in";doc="0fzg9jm7hd3zx5naf487xxfyg2yg0w9wmc60265av5v97qkghirx";source="1m3pnml7wdk0p6vqiyxssqi7rz0vkcvbd2z63wqy28r78w9js34x";};
+nndraw-59674={run="0gffz4kfyz81yg1cv7sgs5zr5a5kaay1pmac5q6v7v89w0bf8089";doc="12yj7gym7kzacwxjx5df3ssf97wrrnsm75z2c1j20srr30sz1cwg";source="1y29n03z9gxwy0gjzm6b5da0cqwg0bzm26cxlrz9551qk8nis9sb";};
+nnext-56575={run="0vf53wnrjday1q3hrplqklfp5kg57ibyjiijqw0jc074gzhyw0z7";doc="1rxxrnm8vb274c9l6lki1bxd6pij92klryigd40wwwwxzh8fc10r";source="1w3p9ig1jivwyy9rlbzfgcy82h3wlj2ig3rdlaq9k9fx8vd6znah";};
+noconflict-30140={run="1flkwyz36xycq4aidj9v6ga29ghbww8ss5dkz4lzsr96nv38q78r";doc="1v3q7xbss5ra1dizg2mz66zq97cfsv5lgnd136xqbbmn5vphl0dj";};
+nodetree-68244={run="1d02cgh8vy6nq90ndx6yy907x8kispwxjcxy1smdjd35308hhxjw";doc="173jz2ihpnwp7bdhq2j6nxkmsabrg9mib185pyz5v55cyh45whlw";source="150iq6m7yvb94qzgj9c290s5wkc0sp06zbmc8kn42wdqz2b5wqh8";};
+noindentafter-59195={run="1gp4zyqwq07f85qp703iwsa0351yp49zyjrzrhfidw456whhl3a7";doc="0is88wpryqdd179fvhjkvq6qy4inz0sp8a7j1i90iziadkf4rchx";source="145bfg8qz8m64x6p2kzkz6skzkdi9jc82q77zr50xms9565bhf4l";};
+noitcrul-15878={run="1whs120vlg4cdjmb1x363g92ira9nc8j2h65qnvwv8qrmh2hrwnp";doc="0y3j12rb8ks8sjs1ikw3sccq7p7zmixc10nhdy9yg9rzwcgmicva";source="1dsjxs73xf79sjq9xynnv78jws1j39l240lvcvpir1k8vnzwfa13";};
+nolbreaks-26786={run="15qa4nf5c9gl3ha4prajqxl2p1ks6fpql03d52prm9vqkwphzgyy";doc="1h9n7ki3iznbzq519cliw03fcn2k40f2rldjkhnp5vlzma81inh3";};
+nomencl-61029={run="14225s3b27dmdgkjqyh4fqcwyyaahva0sk3k6nvffl6jjqdwsgkp";doc="0vqxxjlvgaa31mjfl6jv0azfh7qv0g341i27s6k9zz35a7dwqaq3";source="0fxfan0s0y1i30rg2mwxl21ymfknh4cnw8za13mx34wvaxmc4l9l";};
+nomentbl-16549={run="08jvfyn4vd8qwlnbsqhlxnwnl4qv5b8r32slcbfwshc4kyi2hn9a";doc="0g48qyrrj6npsjcnnzn3mgsmd5fq4v5vzzsgxvvx9x15446987cm";source="10b41ax3ynpdbn9bawkp43whqjkygh8f2p6qdjiwa47w1acca8zh";};
+non-decimal-units-68504={run="14ry0yyvs4d77vp3ghvfaw1vwc8j0jacn3p3vbb65pjzmgjxabdf";doc="1hkpmg9vg8gr6chb8qri06vfdnyw22abp11d1lap8l8xv40c3las";};
+nonfloat-17598={run="1ay9s9xrf27sgan2gan86g68i91rwa8spmmj2l13pb3zl5qikw66";doc="0jjil5rbxzcpkyid8y5dahab2ca9r77sw2scgrc4mf2h4nhrjfyz";source="0vyvpxyrqjqmlw2fj4b9avy7sn79m4q8gcbgzdkzzp8d0rng5i8s";};
+nonumonpart-22114={run="0dyf0nl16j7vp955g64rbvvjyqq31x5iv7dbkh8cikwvgn9g85s5";doc="06j6sc8q18mnnnpbj57ykays69n78z0iz1r3vink7qaw4a8fbyba";source="0p3gicf0fzmk0f7lblydf31pi9x0f6x0k5rvdd2ia8hrjdaqv1dz";};
+nopageno-18128={run="098q0visa9g5lh3vp6bp484fglrq8g21v4cb71cnc30f7avkg1v7";doc="0n7p2f039vmd060ncc81yi2hnn7qyk6b7z2hpxh9pp78dwklgx98";};
+norasi-c90-60831={run="1bsx31al77ci58p1zavp5q9dl8msdjqilb19fglnkhgg8bjbqh7d";source="1bsivm5im913x336v6qrv31b926lfr8821pzqshq600k4fgk3rj3";};
+normalcolor-40125={run="1yvbqc6px76phjgy9cwpqwy035nb61nvcxy32v9xa9wfcp36nw7g";doc="0919aan1qxp5lfqm902ijn6sflkzv1dgxi12hjfixd8d1d7rlfgs";source="13lqp3zjnhm1wmf5id1bbr86l5qi13xgij455l38l55is468sv8j";};
+nostarch-67683={run="10gkz055a6j0hnpya1a49ysqqsnf9f85fdnxm1aacjnng5wpshzv";doc="0s06svy9gjvvpjqni59qfzzlwplx12dbgcvpkdi4zj7r9wyh4v3v";source="1vd8r7viglzi00vfxq4wnjdciamhl9yprham3mg0mmrvmp30l52f";};
+notebeamer-68871={run="1glrwrk760xh657ipslz8vp41qwp1qhmb7cwq2p3kgzczprkj8zk";doc="1yb2ml5mc1mr19di0zc168v63n0vl7hb6vq3fggiw9ppl0rzsasz";};
+notes-42428={run="058316ialcra7m56ww7imzqqhk318abwscw5g60hr73x3x7d9dgq";doc="1zq11rygqkbx85cf79ixwcv1w971w4hx8zfsv7z16am4mlxcdz5j";source="1ycxa3m2l13z6a3a4a88wpznvwdb78qyxkh879cvg85apb11rffq";};
+notes2bib-52231={run="02iwnpiq918izkssa8j7fiz2jbfjn87xdjh9spwys98q2cvvxd53";doc="1md7zvcnlb2sf8zw0vlnsnia1l22gr69jgksy5yg30jis3zm2gjp";source="1fb70w9y6gj1a0y4w3zd7yfmk5gygx10y8xjmdj06ky7k0r87qlx";};
+notespages-41906={run="1zn3ygkiyqax88azc7vcrkfw5hfzbbq3jkacnv50c8z5xllk2nwz";doc="0556azchy0yc8757wcy687vn82q0jmyf7n38vyx3admpawyk1pxk";source="052p17fbdpbdpzaai5xn8r0v6lamv7ps78svd27216p71djsfr66";};
+notestex-45396={run="08b59wvl0n718vbzj6azwmj5cn4jk57yzzzzgxkgkjj3kq2926ig";doc="1n7qdz9sf7jdvrrcvixbvk1yjjqdwsr8c4vlw0glwabjyzj9hi3v";};
+notex-bst-42361={run="14r3q4z35k5n0rl2igjs4lj5ic4yd14xksg1qam5klb6raaf1jkh";};
+noto-64351={run="1bq1ysvd9bxcbfql6lwcbx2878n3bjwb3akawm7z025igi7hnml8";doc="1pz1flyv3js1wfw9p57cz9qb10dd64i978z76ngmfg5k1hp0w7l2";};
+noto-emoji-62950={run="1d1mxl32brfyn3a8jpkby0kwv69gimj9wcl8y61jd2qdlfd0mx9z";doc="05rch3ybas6gds53g35gda10gia61v49kgxi3gzcxvn92595zv9a";};
+notoccite-18129={run="0cbvwvgh3rkms6akamnrmzwm6796ly5fa93qsb30bqafgmx56il9";doc="1h14fkdn5kvxagkjx8h6f6a06v7y9z48s87x52cblwykgfm70qxz";};
+notomath-68014={run="04ik99znmf5a97q474p8fj4rhmggzggn9kbdyxhpwxcd1s15w629";doc="0bwcf8s46i3gb79yns1y7crfhjsv32np496rhqq197cjd1c4lml9";};
+novel-68807={run="1k9kkgxsxp1b9fd5d82swypacp2icpp81dy5xnbc1y43wvg2z8r8";doc="08ayhlq5wx9hxn86imy893mamsskl7hk8ya409c6rpkn0y356g5n";};
+nowidow-24066={run="1w18i36ynsyldb9gs0yhv6plyrjs4762y7bglncv7bhqjmyy7y3g";doc="1l2zq2ain8nhkaa8aagpm22nvg8p1vk2cdgs6pmrydk0hhmjh01h";source="01qjfpps7ahmrwvg142mspj8gsyx21l3nr75g0v7qsqxbfjjy6gk";};
+nox-30991={run="06036p9059x0lzliq9b2pqahnbp8jlkd1gnq300rq0syj37mjk5f";doc="1qfjlzczcnmf3pgqf4qr5v9c6ws6qba9hm28h3xwf2s3099drxjd";};
+nrc-29027={run="01pczvyzfc2vnrfsab180fg0nz13cmry0dvdxmq3lxzp75ji5aqj";doc="0l6lpvddg25k8dynqr26gj7fnaq7k6zbzp5p62684sz9351pvz6c";source="0lzfw45m3mw7yd9sx6lya6cvan696p74wrxgvmqa73prc2lhmbv8";};
+ntgclass-65522={run="0dlm313f7m0cj0fsqv884xi16kq9imrkkiaxg8lszy8idp9vvmhf";doc="1c8kc3q9xqxl28xdyzlnlzwdfixbfra6vi32p6iy353mdhvhx2r5";source="0fhs6v9zkfxfxp2g17h4cxa4k9dm4dfgk2dl76w61ad41wd629d8";};
+nth-54252={run="0716sd99xjdkplm7jdmg4lx8lpfnnx6mxjp1l1sp2bfqcg73p4hm";};
+ntheorem-27609={run="1mbrpw822ibb7wpzbl3fhnxg4djwy32knn9hqcvw1kpahgfbks66";doc="1f1cridxgv2rwv3f305hsd5pm59im1ik8qmpqhq4rpvwph8ny140";source="1pkrhkl9iq0giyvk6lqjxx5x681rjl9zmc0kmcypwgbqww59hp0i";};
+ntheorem-vn-15878={doc="13lkgb4qjiblbfm4jcxgkxsf08zk90lqz02bxrmim1n8gvyihwcc";};
+nuc-22256={run="1918fk7bh6pz1grm1655fag16i0ir67ywcx28jsggsly6641nkm9";doc="0r4345bpjdb9f5gmcdjf6zav64gab5f9i4nfql01yg7b7mhk487x";};
+nucleardata-47307={run="0rrxpz66rf6g9cp6ix4rrbjqj9s357qsbv87dhri62iy3alw5bv9";doc="0kfi9c6isdlf188zsk2yx38z43zjzxf8fhvl3hm2y87di2kihdax";source="1lai682rycff3hm954x482hzn1mq1lrik3g1fwkbm73s99nljyj1";};
+numberedblock-33109={run="11v5n8s9glczglmqm4bfykg5v0qdqr2wfnymb15aichqqvbfcgsd";doc="0rh954i5167pmwmisn3v26zqqgdrk5bcn2pc16m3wyrdgvq02kzw";};
+numberpt-51640={run="1f4hmqlkfzqm8c4q9cbcqsh9pkchnylfv6gfzafgn9v3rdksg2dj";doc="04hdl6zrzw4zm8cihvfidlnjirfj7zlmh9mb7nzzq68cyxn30256";source="0ha3v5lgn8sycfxs6hlbdf7n0b8mcl2mny2kx37s1bib0h8i0bxg";};
+numerica-68021={run="0x4nx06ppb1blp4012pb6l3fkp3ikw94xy9g3653cam3p6pwlviv";doc="0dhsfbysxrm91hxhgs842yv6cxx0agsj486sibzwsxajbmwxc36g";};
+numerica-plus-68019={run="1x4dmzxb4m11kdscmp8n7jd1ihd21h0nh6dx3gx8nmxghzq20160";doc="0h3y8nxw4zdbxzwkfkffkc8p0pjmxd0lh8zcn5cisdjzk2dsjjyq";};
+numerica-tables-68193={run="16zsxbdydwzh460qc69zs54w666qmim5rn0lgf5b9kx2l0x8mvbm";doc="0b1v2a44lzys1qq2c98c22v0i920j07k2ayi8l4kb0z95gzq4y29";};
+numericplots-31729={run="1c127aalh7jcx9rxhsyhi2k1qdz6fg8d6qj0kvf564s9c0npgar6";doc="045z6l4dmn3bzfsn7gi6bdhwvp3cbf9nj8fcs6q07vi4by71bk98";};
+numname-18130={run="0sj8plvx36i2azwnk9zhxd16x7dxk2419rdzc93pl3f68kxdmy5y";doc="18iarxgxxi5dj0cj1bf0il74ndn5lng3axf7zz0jwqpl5d84pz6b";};
+numnameru-44895={run="151c13r8arj094jw3zaymz6i7invgpyqr95p0qnwhj22z418pj1m";doc="1rrargznsmgq1h6a2ixxr9bg57zcrs9zwhxgz0ssbscdyvjqik8n";};
+numprint-27498={run="0wkijyxl1zzay8vqvsyhk6kf5247qr8k55rz91dn1ph7b597d952";doc="1jra448iyyvc8qgc9z49brb6j9c89fzf5zhgz48k9959bv8izs8r";source="1svwh456nbswkrmj98s91vr2x05fvs58chkr5d5slq14wg1cpa0q";};
+numspell-61132={run="10rqraqmnd3pybpih3fhk0068g448252hwcckxzd9vd33n7gfw1a";doc="1hlfb7b3hq9ps7l6z0qzymc8mg67kdipcshb1bpkindasx6dnkl3";};
+nunito-57429={run="08hnxivx7ixmvp7l6kxfr0vxy7c78i9jqkam0xxg5mkxs9ip481k";doc="0xhv3rws4kp5s4q4c10ykkf3yyl9i9ndxjavjx9xxxwm1iap9m3f";};
+nwafuthesis-66895={run="0vicfc3gnxf7cvj7lqa8sd5maxlkfqazc3wi8il553fw88dxvkcq";doc="10sln765phsv6rpxjhn6z431nwwkch3qbq0s3wjk0mc34302qykx";source="1xk78d8zaqbn82lsw0fi428ac9ybs0xnnva2lkb9k8zyijz5w04r";};
+nwejm-64462={run="0c3m871h5s86n61yappdbw42yws7nwk3z6fa7nwqx55nd145yhab";doc="041ksqcn7dz37rj6f3bb02mjai9xl58wbzkzpac4i2fnz3i7hclk";source="1y7a4yn0vkxg1r5fjbpdm3b9y2sn6bsg0f92qcv706siyyynkbmp";};
+oberdiek-69038={run="1gp308z3xisg8qmg6bggddmmjdpcg074vv15jwhb6z8xfwyj3jvp";doc="1cxl8d26mclv7054s92c11s301gk9kv11zicx8ikv7mpa605ylrf";source="0xcdyy5v1a28zqyip8n8j8szj0bdircciww0a98w5wfxgl1d0dym";};
+objectz-61719={run="0s93jjwcmyjd126wmf2rw3776jgq0ldk40f269cp29968q00sfn3";doc="1qxqphnsgh412lizx6jij6qhnlx1d558bzd3klqf950bp2hy3cm6";source="1l8afdawrrcnbpqdhjls28ncksg8lzs7g59viqygwixwplha0fb9";};
+obnov-33355={run="14cz2rqp4sf4f880d49yhvqjkzm5aw91cdijmqwf283cqgzhdmlf";doc="0k20zh42vcm449dh662frdmspmycx0mi81ml8qkvnncy8h40jxr8";};
+ocg-p-28803={run="1cfg5253i7rb0ng65fwm6v0yhs2l91gv0a3d8bra1bkwz2f1mfmj";doc="185fgw41dbw1hsbv5lr84spv1qcfglm0xhrgwk92g0dgh20d0kfd";};
+ocgx-54512={run="0a1mvlgn1vql9w8ziks677ysir9fc904ihxhn2hy5qsk9j8wc5w9";doc="06d3hdgvwymvxq7vv7ccjiyay6vf2v6c8wznqxyjjb8sv64mzlgd";source="0z2jgksb5pccxs2bf94vbzb04b1k6a2ssrx3fxc3fwl3z8afqq9q";};
+ocgx2-65292={run="050cz13qibfz6q92qah8l1ji1c5g8r3p1bvd6wbl8lqwhzfkc203";doc="0jkzkssihk8gsk90liydqpk3rr10mlja376p4rd7kpyswdc6j7q0";};
+ocherokee-25689={run="1xhb9y2m6sahkqlng98f9rqi94hrj66594zqdd2sv82902vfgl9p";doc="1fqjs1zwf9rgdzzc0wk39y3jcn150ssh6yvda4jfyqg3sv17wwgg";};
+ocr-b-20852={run="0y62xmxbw7573fwvfr69r7bhfcywvhcb4mg7am5c3j96ipq5vqzh";doc="13r2chskacbnfawlc9xwskrl8lqj3dx8gzzpyjjk09rx1g5q9gc1";};
+ocr-b-outline-20969={run="11lv3dba2g8mrnfh1y6agg8ipivhnppd3s7gqljlpdbdbk40zbyn";doc="0017l87j9g42cjy1ki2xksh6xq0hl3rsxcrdyrddvvxp520p02x4";source="0yn2mcwj73mazk503f13qmfy2bqkq0gz264ckr33bc88f1i1518b";};
+ocr-latex-15878={run="1l5s8wlqk4fc9i3fizhbm3c7nafq36w39693xm1x07giqqw8q8cl";doc="0ai4kr65ls66ywxncb63jr6gy6lcw6zjvlgsbp4wd6kfjxs27bh7";};
+octave-66115={run="0sw5r5gqvpmrn96rfz8y8hdbrwasv751p7ga5dary1v1kp4brcr0";doc="1r9wywnqhgrg2jjlzyafhdnyxd3fa17zjbbw1bj2a3r2jzd201h5";};
+octavo-15878={run="16pwz513a39630p51n84761asli9kba5z3pmbgfkcz7yfk9iiq22";doc="0rdb58jnyyp12i7ndd6qibs2jc1f0zcw42jh9j48aid6nwslvrbr";source="1f13rhvd2l3v7fdivk1ybw0gnacv9y2pzwnbw8ykmaq3x7m3x2j6";};
+odsfile-68204={run="1k1rhixcwaqyzawpajbi3ljnmawc5l582vb0vzsnmq5dkry7ccsd";doc="1jrq1mp70vj3cncv1l4f8km7yrn2lbhjlcrk0qa716r5isqhawfq";};
+ofs-16991={run="0g2rxji8g1nafyg1nzpy18vzk20p4p6r754m89naygs1qn5n4h01";doc="1v1z08m2ha071kb8zia1wlgkflkzj4hjws8rqnq7asvhi1s2p1rj";};
+ogham-24876={run="0hl3xjmd2bagcn2wnmr2rs1hzmgvm421rkdaimplzdnwj0r64j49";doc="0phm6xdxl1a6nh6g17nyz6p7f2ymll39k42588dzw45z7zwan40i";};
+oinuit-28668={run="1wr3r06hbxrc0v9cwyp7ad6jimw05x3yn6vqpnzchk5l0ixnlkaf";doc="1919kmp5sxd9q49m6dd8zrnjx0cqgav1i87gag1rffd5hz9w4fys";source="1mymvxv4721nhmfdlbl9bgc76dainzykggf93jx6xfwlld0krgis";};
+old-arrows-42872={run="1immbai327l7vkq67nz6mcnyqmx3ajg3blrhbmffkbl92482bv4d";doc="01kdfgiqp5n74lipiviv2alzallba37gyzfp1sqrvwwvrp3a3z63";};
+oldlatin-17932={run="0cxpm5qvbn0a643x2h4dc0pf00kqqk1z540j6dp7mbiwv48qqzdb";doc="1my5h8wq241dm3d6czb1spznrxmrclwgn8i391pwmc11z2ijqgjk";};
+oldstandard-69185={run="01cfmbwlm3x7i331wkwgjq9l71wa2l490lqmjnr0n7dg5nk9kfk2";doc="0kbqi8vyz9rbb08yhy22ll65fq5i7xbxa9pwgfx6sxz6gsbdfin5";};
+oldstyle-15878={run="14lm3ghfgfqafqivam1dqf3gqgkchnbnc84z5i0whg2p18x9zns5";doc="1qj8nbcx1krpha49k4yzyix13vs9s41g96r7kpdmv52vlpfgs4lx";source="13c4dxvikdxx7qv7y9rfpgj4fgzp21q71xpmq1jzx7phwrsn6wcw";};
+olsak-misc-65631={run="1gm01jvlj8vcl9a3v53bcmg604dzf4immd39dj6n6c692r38hhzr";doc="1afxiazmp8pvgfym1i2bj8k5slfqi81d915d7lax59ib0p05w4mi";};
+omega-33046={run="047w29bij6g9k9fl7ymap4arhdmm9kvjfsikvjkf9nd7shd6k4kl";doc="0r686ck7z6vxcajrjihp4a4mh3z23xr8ic34dv9yp039dh0kbm71";};
+omegaware-66186={doc="06kzz0342h6vvc32ydrzgpqsdqv5l0jbd5finr43fmzqi5jnswil";};
+onedown-69067={run="1hzj2cyyp3zqa2wnw576cjqg6nqziahdn3vijg9y7jr0gc3372ch";doc="0a4hvgsy9i6a26k6n51dv1pdx92d4vk6p3vdrbx8mqwigwa3rijq";source="0kbilw165090a925g1p6z6ayfynv0z7zjzw2c8sca3v0ncyy3cdj";};
+onlyamsmath-42927={run="158p92zgnmicfwibiyr5qbkwwkxhvfpvngkbpbw6grbdhlwsn63g";doc="1d2znlhbz509rqzlwqnbz9b64mpbhckh8pv23fqr8058xlbazkh6";source="08znvq2bzapn0dfa7f4sd08gm5k7m3sh6hkwy17zwkc0987wx487";};
+onrannual-17474={run="0bj29lk2nlsmky82ablxl0r6k6wl627zrsv9g97hydgdmi5nxasz";doc="08c3xmyiz91623lnps3iahi5ga9941nc6bvxmdihadxhm2lk769z";};
+opbible-68465={run="0njr5kkp6a0xfd010w3n8g65bv88zx26yd4nslajsip2nzad14n9";doc="0lyghd30v6wx5cmv7sidyy39qjkng3xlazgg50s6iaydld8hk608";};
+opcit-15878={run="1g54f5sv05rg1xxpydsakjrlckmh1wq0p15w4q0935iw0aq7rn8g";doc="1rx3ap93f4570d006qci6j6qi88zwxc8504gg554aak1lffazw5m";source="0242ajp415h3y20dyvi2lrp38saq10dgb6hpnmadzs7wrwxhma55";};
+opencolor-66363={run="18a6vha0n4mwgx9lnm3d4j4rkf72qx88fbzgs164arzpx4gp0ypy";doc="0n7myxbkijvqgxsvf9c2llkwhqj06i80sv81vgkxvx16974z0mg3";};
+opensans-54512={run="0xj7v9lv1ni7mq175l29a039a2ifmdsy1wnv1h0gfni5c34knm1w";doc="178pa2kjvp15la857iblh9qc195z3byd1wxxyn7c5bzmndvypgxn";};
+oplotsymbl-44951={run="1x5wqngjdmc4751ci5qaivzgqynmmg00kg2clngxjqf48n4fakdd";doc="0bj6w6h4g991rfddmrxgc02090vay2h2qjx36cb0hfx55gwkmh3b";};
+opteng-27331={run="07a6dja6s7c1759i9afgacx4v0fli98s6mcq5zig689hpkw841fg";doc="1125aj55p7n6b03mn6p6845yvx2jbjkwwldgwiixypklndqsf6cm";};
+optex-68873={run="0bkp2k9yflmndvzxf071wr0i5rhx4r3rjwf1jz5mv24291k617qk";doc="0pnn7vsfa4yncak7885lc4lcg9viwcl7q80f4g8axil1ash1f0mi";};
+optexcount-59817={run="15i48ly8mbhhk0mq4gxwpwbvhpgvk1pb8bfbmfk83sp1liq7xijc";doc="1cvhzkl2lbz939y417ipi22n9alh9j7f06d2r1s0h294692m7bpv";source="0s51426ib070x23d92rgpj247qni42hzaw569z64i7zr3nyx16dh";};
+optidef-50941={run="1jvalzi2gid20wn253swvhil05m273x6685n0b5wbrz5kbvzk212";doc="0sdd6rsdfx1fcw1493b12ww5llww6mv0rij3f1ik290c6qbmyr3w";};
+optional-18131={run="1mv65cqcrjhykpl565z96s57z05635q513qr440crbh61rp93chs";doc="1ks001q2b1yw87q0frhqq6yv77mskng6v1sm6kd8r22cv5g49xbx";};
+options-39030={run="1v2j59zcv5cplh3czd6r7cs4n79yvw3448492bxk446j4lx2mfcx";doc="1za038prpjb3s74ryr25q7hmz881gr8abmf68h7xdjq6bdk73da5";};
+orcidlink-69253={run="0gjgjwgc05iavwwx6s3zrmb3ac4nv5y533bgap14wwx6x50i2hf6";doc="1ajspvsx9ginyh1j0k1q88081dh0jxrsyr0c249wlnkbdkpcf6gx";source="0nlhscyjkg5lgi0y7sddwkdr5v5wcs4ilxxcpap75a9hdk4ckiph";};
+ordinalpt-15878={run="0nia32ms50727kn080xm2v0kjzws5sj6jdy7kglp8wkipvc6nw82";doc="1nwfz0q6csg7rg3hqgddjbiz8f1nfcgghiqvj2wxqf0cfjh8zb95";source="0rzlbngvszl1sjrigpn55i7a8rwnj9sy76c7gwb43d4im1ybd14d";};
+orientation-57390={run="0qcqyr76wiks50i1zr3skp7bsnjzi6snsyvsm2za3l08kbdi3ixx";doc="02cmfz42sdd1gr4yaha603rppdh4c4wjj0jbcrmwlfgl9a47rj11";};
+orkhun-15878={run="0x78b5d70cxy7binl5iq2jwgsjh9rzs87wc8ib18jxscqick5jgk";doc="0q9hwwf80hq6wffyvd26kq2053vs5czly9zlsclh93hsmzg3vj9g";};
+oscola-54328={run="06jgk12q9hmbqcmwb837n8l96f3bafc7mgnv4v9amnh4ajlg6i5x";doc="0qzn7d70vl0lxyql152pzzhi72ivdslmxvfwr70186lh6fjxr4nb";};
+oststud-67217={run="1yzsibisphck9a6dlbvcs84qz3lhnj6amj6vfzh8rgy40s7vvz3x";doc="1sj2lk6fhx9bdgpxnmw6m25yrjmka6m2ygiapj42jp81n51pvyzn";source="0phykgmzds9bvsblfazg82arwdhzssjc6b9faazi5h57jcmvbss8";};
+oswald-60784={run="1dkv4javwj8zfk987grjx00p0p3hnzajm4mgddm1g4z1zfjfdd4n";doc="16pgbws7vf93dwaw8cm4laz09hywp1xigrbdbaq9ngg9g97sn0l0";};
+ot-tableau-67813={run="0wrxkvi28a19kdgsms38wgxgygib0iypz0y830gizq339vj72v2l";doc="143rx32hnxnbw61n8w6skcqs8ix411dwcwgn43xzw238almmhidx";};
+othello-15878={run="17y68qzxifgnh8k1q6qfn97ka7703ac8nqk62ridn1wbxc6fb80r";doc="022pv02lvlphl8168rrcdzk6w7d9wd52riybfvvy537ifwp7kqr9";};
+othelloboard-23714={run="00cybd6dg10bwl2k87i2lj9jq1nmq4jc9v4qhjwqij5zv0l5yz4v";doc="0g5k2q33r726xyj1mp08qmyb4xdihiyzsm52mgbdn95iz08b2989";};
+otibet-45777={run="0fg3gc7614r1b304g78ipq6d84bml2q4mvl2yc49jjnz13nr05js";doc="07l6475b8z98pkmn5labv4i4q6g92lh5bdsdqcwd28v5y1jizhmy";source="0lfwadx3a1ni2k91dpzsdh297j3viq5dazaz78acb879lgz61ik5";};
+oubraces-21833={run="1rhavggv1c50krafvh7lwnvarh7lh59x7lwkipw24qakq7l2a6mg";doc="1bw3b54cn5dk0j4diq8qxfba0w3p0f78h4kycb2bqd2gq7258vyq";};
+oup-authoring-template-64491={run="0cqhrwpylpj0z5gcgx9lyhsh85vam3nfbzzsz9x9laf2rdi0v1qa";doc="118916mwp8zbjdqdwmxzwaf09a16rc2zrll9qmig33q48xszdf1r";};
+outerhbox-54254={run="1867xhxlbskiysifmwlr10lay8khragzi36fm552cwc4vjz2ybcz";};
+outilsgeomtikz-69124={run="0a0g6fnvxzh942n5lg71y2ry39ra9b01y8ngjb05sdvka9a9vwmv";doc="12msajfyvrqawq4j9d9pcqfsirsyiw57pna9zadkj8mizikfdv75";};
+outline-18360={run="1q5dr9xlsn3fz7bcv08biv5cv71qf8brzgg4468mksh8lc8r2kli";doc="103sijg9ib5qfwaxkdgf11zsdg2c46dv00hn08sspl56a08j54sl";};
+outliner-21095={run="03j0mshhrchrgpa2z7j7q6n783va5v0w16gp401rzbvvdn0l2qni";doc="0vi80qhq10yy051sfzh6pmn34laghhvx6plnggrwvcmpp4fcw14h";};
+outlines-25192={run="0wzrf2fkf9kh0d3jjbc3kxvsmkynwzg622ghwcabaps097r9z45i";doc="1avkpx77sis4hrrs9dqizq2sz4vjzvn19ks8q7l32qyz6lnxwk2b";};
+outlining-45601={run="0kc3x4zq24f2dzwzypdi4ysgsfi40l54zxpaxdfgd662wxangrsp";doc="177xwyzq3mha4061dxxshszsyysmb6nl5b2grg4m55mn19qlw2f0";source="029wnd1px0wdgffblxcbs33r1ffv761sgma7bap9g2d1n3dwja2c";};
+overarrows-65853={run="176w37bvjjc8hi2a48138gj77sj1ibfnc71355lpk3vh2whhrx4y";doc="06v0v79kcqakhkyjnp6c9rvqryiy8rrim82p0d9m98dib48h7h3h";source="0nmh0rrsbbcl842lc1zl2dhj5r403phamfbfxmn0qs0f1kqd2awn";};
+overlays-57866={run="1xfbb4953ab25dbccfsp9ban67vrq79j443mlglnzqmg1njrckk9";doc="1nm0d47vclan46q0zvigxri5zqmfpv0qkk0arsg836vnv7l53q0g";};
+overlock-64495={run="01h1fcgplfbfbkb1wp0gnf6xrqn8l8y1hxrd8gxpjqbg53wr278p";doc="0gl3n6h41fbzi4lcsdra5z3vafh7drm6g04ilmbb5cbkpnsyl3nz";};
+overpic-69343={run="17bbk29v6pkrk9igzx4by586jfc997mj07srhgy401mnmxls2jyk";doc="067rq6plcan44h87adj9jlhnnlkk2f4slsid4v6x80423q4gfqll";source="1wi69kgglry5r8wg944x87scqsqx49ynj372y0qfa7n4dajxgzwz";};
+pacioli-24947={run="1fc15ygzkdbv5mykgrmzb6filkl3aipk7i9k1syh2ssr37ldxcjz";doc="0pknnd02q244pxyc2vapdx04adz7gwf41swda2xi3039x82pm8fd";source="0zl6l5yc7v5w1xjd83prvfmy8jf3jyblallphyglgb4vkqq6mxxr";};
+padauk-42617={run="1yjqxzqsvk2mdsk837bgwqf3nfm9gh873bnir19wj5kj622zfh4d";doc="0331w1z1b5x15yb3xyxv008l95idv5yq9xb87da5r9p5fzfh1z0y";};
+padcount-47621={run="15p8g5hjwlm80xnm9py3ss6afl6c8rdq8f92z7518hp0yp7d3zfw";doc="1crpv27a9rfmh4dcliqvi7aa4h4lvkv48k5zk0kx6ahhxa2zkzaa";source="0vkk0c7gvzihlmw3f8ni4awj9r6xrysj9rrsbqk6dkngrg02x4xz";};
+pagecolor-66885={run="0ycmswy7jghmnpkdv6b519yx7ga56aw7yxq6671nlg1iq1k045kx";doc="18xnh0588b95h7fmqwqzb0p2n9fclqy0hxv3a1cci8anpcr6xz0q";source="0qc662yig96f53wdbawgvsg4wx0dikcnf85b2cffwlkr8qzrwlsg";};
+pagecont-15878={run="1fh6bplg468dandbyvmwf13sh27r6x4dmrwslldlc9580h8jv02k";doc="1vrcr5l1facyyf9p8977q0i5m7cn7y40dbmiv99314iyawa3rr1g";source="1qc105f5v0jiahk8gpgr77lqfaladba4hmqnfizbblzbjhhgg05p";};
+pagegrid-64470={run="054yaxr2q8x82dii8bpy3y1nhc1drvwm98cd3asaddh4lzrpl9vl";doc="10rsrkdl9bp04kxxl2g3rfscf0hcw122py25x2jbq6lgz76780jm";source="0fbzd20z106cgzknj98ryzmwiixmbpvnx5p8v3ns6yjrwrcng3lj";};
+pagelayout-69188={run="04492pp3xcgg9hbz2vygqsfriljhjqg7nxivjhg5m7v9c4vvzj47";doc="1rw33vvag98q7mjdhvk954c1ady62xv20s8qd94b09caclkpdgzv";};
+pagella-otf-64705={run="1vrzz63la6i270bjqb1nd4rsqqgl13nrqrbmr0l58bmjj7qh95d1";doc="1dffy7z3cfyq2kzyvbarlqivfv4rs70qa7drii2arv2m1609ylz4";};
+pagenote-63708={run="0jd80dz0jl2gmfr74lw6jy1x2hj6zlji9az956gkj8bxxc6zir54";doc="1s7imj4fi08487xmcsicsa4cknpsgd10dbcyn6vkggm95qn6119w";source="07ngnfinv2mki203in54l4gx7r4qx9rm8k4x7856gr7jy1wkw16f";};
+pagerange-16915={run="1nixc1dn9cbdi3pa5yxajii6c9ljgc2jrnknsa7wb66kj5j1lqch";doc="1vy3c498j95miksm254a1sh7d8bp3g5p7lvncc1xad4g388q6hak";};
+pagesel-56105={run="1j6rg25mhaiamlff4j4lw8pbp6x3mcg00biqz2apsbi6kmbiljw8";doc="09s7r6dzv95689ysdw442gyqsd2jpdyr8hkrigmn9c4sx32alq5n";source="177j2s6chsdhhw63q9g6ryc06vn6rsi29n4prrn2w14fgr3wnhcc";};
+pageslts-39164={run="1lm8707bl8a9kxrbbr6sap3p66zwjklqv13invm4gcsg92yf7yhi";doc="163h2h9n4cvap2c369f2yxv3idij6wzjqwf0wd7w5024h1vvj683";source="01nwizj0vlnwzbqyl5dn02vg5xl2aw60wyvp4plm0agg8kxmsi3a";};
+palatino-61719={run="12jc0av7v99857jigmva47qaxyllhpzsnqis10n0qya2kz44xf22";};
+palette-60119={run="0wabk4pw6gr9y309dsh11w6gygayzglh0jabqi0zsvy0ikr7wri0";doc="1dp867fydnxdw82z4gxp1sbz5w5q9jfnls6r9izylrzy242rd52l";source="0iic125v6j1ljgnm7d0qicckxwmgdg7cz568556257js942ldyxx";};
+pangram-66300={run="1x8jdn8j3dgzkm7zv23529gr1jdmh15wkwkljzsc1dnviz0ppacg";doc="1y7lakwbh58y7mvwfqp6m4r9ad0kblsls53n7ciq994hfa6gx07z";source="0xq10764gznwqf7nfaqjjqd6s73a9h13970bcrds7jiyq1s8l382";};
+panneauxroute-67951={run="015w3jivsfxcb0gjrlpz796p50wchmb34w3ad0dk73qhn2jrx6p2";doc="17c6bnyxs6szybqb1ihv0q8pn3wb950s64z639vhdwhaqvppd2f4";};
+paper-34521={run="1d8w8aicx5drrgqdcrsb7vdy39xh6xmnnpympy1db5i2mc2nkjca";doc="1r03wy4harxplfhqp0dsqfpp0s4j5gn6k2p43fpw7wndna8lnhyc";source="0c1iv6aynpfi37bg30q235zdpbyhj83rkir4kdg4vl8q27c8gpwg";};
+papercdcase-15878={run="0gfkn87avjnfjx2k6hz5k2s9iy2lxwx9x4r0cp1lcwjgjsavf2y3";doc="1hm0i4vvxhxn0wvsrbxd2lkqspqkq7ik3sxxm1nd575p5l3zgl69";source="0mkadgjk395z280220zndpbbks331d5hcsxqnarpjmh00mkhdj7f";};
+papermas-66835={run="19i4m31q8jji3chanrbqqxni9x2c4mk0qp1scf0brjaznrcv4dvv";doc="1an36yvg7z1yhb6gn9ppxp24qgdjmpndwy8nwn87cyr4fqmrmgr7";source="1r3cw66snl1dspbr9i6pz8v83x15ylhm2k5nbksrf7f24jrvvxn9";};
+papertex-19230={run="144zirbvdpq1q8an6i5rngycmlrgicf9skh6mnwyz45n4zyyzyg1";doc="1aip8lhazpmmvdib6yqivbgjagyyhmava29q9hrlx833385vvnhj";source="0bfkh8vwqh6jx34fmqfqf2qz5wjpmq9bpzbppf0cphs5frbwg10b";};
+papiergurvan-68239={run="1gyf1liq3lv8dbfdpv2ilbwks4k88m2ywnv3qxpbrg3v2l010c75";doc="1mw0sc6svi8rci96wl2273bgn2f3w44gdczaldfflxc7az4mhmvb";};
+paracol-49560={run="0lbdk9wbs6c6kq0iyf6amc72m1njdf3h8yvcnka9dkhjp228ldf0";doc="0fnby29nnrasv32p9xwwwax57ijzscpnsv43rwajlqwcdhi3s2nj";source="0q9izjw8lrwcbx0cpq66pr33cn02wl4daxsjvlkrjzw8zzrijl64";};
+parades-40042={run="1vmjda4cvajsqai47wvl0byi552gdcy0j4m36p58gjn3d9bc8818";doc="1lz9dsy94x5cvv55nk975fw7dlg4bm6d8ls0p6gy5b58sjd6vcp8";};
+paralist-43021={run="19m0ddw80vjzm8p0z5rrd3jf9kqzq653h3jdqlnjw4g81r0z730p";doc="03kv1n9m1b6r0r5drp81hv2i8dgnlcsz81rhi4h6a3xyxnyhw6bj";source="069mn3mk34rxxhl1c1878zs61pk7asa21iwwk6r2v88yziczkhlm";};
+parallel-15878={run="0hja3k53n8v8qzj1vym1j2b4pj7hqszda82s83kw1v5av6kcy4da";doc="1i0ls71ib0l3igd52cgn5z0cjz0j17hsj0qc5y4sqg2nvivvw7gy";source="1slmdxldvxrvf61aa1b7m09cxpv6jsaw5lvbgqsby6jvgfp4r4g8";};
+paratype-68624={run="1cwcw13xdarisjslsp8aayb984fk4qhx1ihg887fzli0wn7kpvvr";doc="0kz4nzz3v6a4qk2svgqyx02j0pni92qpm5agb6k0vwylmvx6yyzi";};
+paresse-59228={run="0mbxnc8c7iiwcmh17n4yhl1imvsq2q7wng98k6h9r15nqf5ivk1x";doc="1qmqki6fm316bixxjispq92dc1b3zhrnh4ad64wdlsr3fpja6g1q";source="0dc0hblq764q23xnz7yj1nawdr5m55526l0dw7b49p5rdb0zhcg3";};
+parnotes-51720={run="0d8600ssj90rwl9rxd27i23f58lmxyf5r1sn8yrl8fjnq42q447b";doc="089i9fwzjcv98pnqmhca26wpvn71zcgb79y3jg5w8szagli38839";};
+parrun-15878={run="08cbzlfy5cfkxpgr4igv3282k1dx9bsvsjfdi8b5dhl2gacg4i7a";doc="0wvbmjzi8jwx5gdg8zgb4p3gz8v8rfp2hw67q0rm5f9rkza1a3ds";source="0d79vvc4j1sysbpy1qdqwd27fai14820z0hqkkd6hrxzq39x6xza";};
+parsa-54840={run="1n2yh9v3d8s32ylicq5vn76m91s6648zgvys6vg8m63pafzl8rlm";doc="0i3d87kajjcw9mallswncp113jz9jn35jkj2y10dmx6z5sv3x3qx";};
+parselines-21475={run="0ymcapxlfyb6xi4k0z1y42cyzan67yg5v4nnc2f1ac35yw4z57pz";doc="0396j4dscv2pqk9vxmz0p4xm4l3v9ln98cwv32r615l1k68vafsg";source="0cg77iddyvl6p818j74ci2zg4zdddp82wddhxqh57qg8vcvi9g5c";};
+parsimatn-69090={run="0dd3jhkv5vqijlkzwf4fd6sb1b8shjzkfydxx6ddbx6a0digxrpn";doc="00aa6asx9banp3v7mjp1axicfnfs1g3l6pf3ifq3n0vwjaxrpaw5";};
+parsinevis-68395={run="0g9ypx3ai49sfcr09q2q231p77z0glwwd0zwwfzxlhkyx4vp6vsp";doc="1mqhdyz9jlipjl74k5blpdizk79f5m876mgn6z39n1p0b4pc8724";};
+parskip-58358={run="037404fa7flsznyidn6vpp5r5rw6wpzrg6sc8zppj9hqciqlbd52";doc="1pw9mgg04lxmrin7vplqyfhxa2bb73yf7qj8l3bwc9yiw78v5h4m";source="1ysz2jfdi49qjyrfkx5k1vjcykk4774i581d7kynw7q9r25lyq9g";};
+pas-cours-55859={run="0gyw81drxs56dwqh6v1gqgs4xcwq78v9isgg38djxq17km075y3g";doc="1zn71815y5pkp24l0cd4283zb3i85mqqzbxmhxj19v5s4jx3ywsn";};
+pas-crosswords-32313={run="0nq8wqxrsgpdnmi2yqcs45mb93gp2lad6p0b6ifqr744hycq4njm";doc="154ifvbrx2z4ig8k00agjsgpsplrjlf8glcxipbgai9wqf82i2k5";};
+pas-cv-32263={run="01aqcqyw0h459xq18gc0y00z2j13zwdn72qpfmajps7ppadlcbxw";doc="0mwgvj4hbq9b6ih6l6hg6gl5qrxyyf0mimwv50vpy1z7bhdq2l6a";};
+pas-tableur-66860={run="0i91nszaymzzwijjlw0f865qx6j7x7rzrxbrc51i02qlfgpaq9zm";doc="0199rpla518gv3rdbchfinfan826z5qs8zxfkgh7rgd7i0cid29s";};
+pascaltriangle-61774={run="06gbr5jgfbms6p7ghdkq2cs9d6p8yr3mvhb0h811y5rphrfzh36g";doc="0fch8y78vd7ykwn9qdgl6m787m89ff3h1fpj0vvzj5vbxmvw6cli";};
+passivetex-15878={run="1h49v6sqbm27isfwwcql9dzxn4vmcn2algkqh7f1pzj860xw3ygn";};
+patch-42428={source="02xfy1fs30nha0l03lqwl8xrpd81855kb5nb660ks83aj187dghy";};
+patchcmd-41379={run="0v0033zpp4w75lbxk8w2byhgy3s6qvm9281xc2c75bryp0ar5pfq";doc="0vw698r5q5ai4lx4vrb24x8j9dc7iwaml8scsh9c22cpqn2sn26s";source="1cb90y0i5k9s4jj3f9vnj6rhxphjc14p5nm6hllibww3h1khnrxr";};
+patgen-66186={doc="03y05mv0n04hyj0lcq54grx7w5wv95h61j6xlx2jc9v0ib9akq4y";};
+patgen2-tutorial-58841={doc="016bx1rp8kpvlywg0yafhbbhlzw4zxdcbdrd5525vffn6fyp9fi3";};
+path-22045={run="14k9dqvcc2nazjysff0s1jrass14d2r9i9cgfx46ss09cw53h71s";doc="0kacibdjhmz39klvxr244n42c5vlaz1z71a8vnssmwmdzzwfzs5x";};
+pauldoc-16005={run="14p0lnn5hvn6szhgr0ngdc31dbjrfk7r8m8n2jn5n8nirsrdzjxf";doc="16ls36m6c8v4x46bz26ysl0ndi9jmby2gl8b9wglw9ba2gf97xjw";source="17440237dyqhxpszm6rcpdhb8dib6l9qfqj5ls2m0bk3vqm7xv8q";};
+pawpict-21629={run="0sx3lwgm3d3cm4s5408x5dhf45kngls8izzkqjrqjy074736968d";doc="17zf7acasv8h9crzg6jw3d2grmhi689476z9x6872h7kzkn3whj1";source="1vxmq9s2q6sq6qza6lhkd6lmj6pg4bw8qvcpqr8zr12nqcfy4z3g";};
+pax-63509={run="07mgly5jbvxav3k5z6li0z7vwq7fqrj6cq0ky41v7alddjpa4bg7";doc="0pii0k53c0np8d4yc61axasnr8aknknfm36px3xh9sl1a475bwmn";source="07jzn5k45pxslamrak05iykqng5rg1b4kh8p6zbadgxb8gxrqx3m";};
+pb-diagram-15878={run="07l8172hqnv9dq6qg1ipbjjbmkpv7s589gci6q82zb8a0y6kyqvy";doc="05h5i0b1y03j5y0nf8iv8hb5qnq1lh5a55nn8xggx2rknnq0d1b9";};
+pbalance-67201={run="1lknxyk8fprbrbvc38kyxwnl4q2pvfvlpyznbp50qil5v78qld7c";doc="1s7rz3zf51vlb7v98ah4ylcr2s17gmmwayv0jpv03yz65iwkjmcv";source="1v2ljik0rsn5zjmxygrzjinrnyx5b14l4qkl1xa7vlb4gxb8ld9f";};
+pbibtex-base-66085={run="046k2l3v0vzxa73n15999lamllkz18is3di7gh8k4jd7y61gv51d";doc="099z6wqv969yw705dwyykfshx025vdbb2azzmdwp7vdsrfjhzir2";};
+pbibtex-manual-66181={doc="030rhhb4xcijvjc0x1ylyk6xz5mn90wrlp5ss4yr6qlpzmq21b50";};
+pbox-24807={run="1b6xli52wbqlhxf2sk4ryighd6jaj6znvpfv6n9s1iq40ag943dc";doc="1qa0h3ahh8q990wbwyrp4glwhdhbcgzz9yp436083w8c9ang0lg4";source="15gqbvrsigqqyzcf8rda0z0kcw5h6cnk1l9pxjh7apz7i3k00i5c";};
+pbsheet-24830={run="04z9iszj9hx7la9zqqqxrsfq3b6asld4zxvrszyjqw7z3fj7pyz3";doc="02an134idar5ndk2kk2d446bxawv0xkrwg8xvgxgpp8s1pqdzai5";source="0ad7zs28d47p3swvl6kz2v1p2nskrcf8fjwy0igwy8d8qalk0dix";};
+pdf-trans-32809={run="0dr8d6szds3hlrnrw0rb7il23rxw5haz37dg3iacgcdkffnglkis";doc="1dcmcd57zv90jafx3whd0nn9hm5x7aynb5npassjqbglb9lfml87";};
+pdf14-17583={run="0gpbf1jxfjl56pn3sj50b6x0z3fqhb7d1dl8dhf31vgcj8sn9n08";doc="15rgv0fw23c4zbwlx149hhbq711hq39v1nka52mjpl7lgvvzny98";source="1wm9nlqws9g02zkk3rgrpaic293vfskfrxsn3s2jb3iz0f12bp2w";};
+pdfannotations-68958={run="1j63vhy9iwbcfd00i6gsgvrn0q2r25az38221m4758a5x0mggf9m";doc="1l8ddc4vwqnr65b81z8yr0al50p1pjdk3zq4yacqi6qf6kmwibf7";};
+pdfarticle-51127={run="123b9f0nl8wyyxfnbs5krr5ayrgl02hg9z8w87lj6g0lxch7dfhf";doc="1pg4iix7i0m3smy27xk5p03x8m6rq737kyhpf5qzckm276n88fzf";};
+pdfbook2-53521={run="027mgmbd3gnnc6gqk8vjnz8j52cvx71z5y6flrc4zd7g0syivdad";doc="0al7sc4rxwd7g1cmyh8v4qhmlngz19f0f08x8n3wbfnvk2f8n33x";};
+pdfcol-64469={run="1b5rzfx5lf0v3k1kb75j364jfdv4wg910qhv0218dp4mxwn985z3";doc="1qrd28c9z0x2jcvcp5041s6qbkcvham8m06xmjsd31kwnpr4f4df";source="1bgpg70150ifvrviwwbhzr1fa03fhnfa4agnhyfyp6y393i6dcc6";};
+pdfcolfoot-65512={run="0i99z6niw3ryb7akzxxwhh0nkrajlfig6a2ixwsr8k5l4ga037cs";doc="06y6bcm8kfvfkrnvwn0s14hvp6ad3785fs9cc70w85v2lnk5qfm7";source="0ws6hwnfybvl0g7kpb7qj0akpnwsq9s5ddq27l9c05564lmgxcph";};
+pdfcolmk-52912={run="09rqw5csr4c63w5z5c019rm8h4plqzwy0icxbzgap048a7x02kqh";doc="1nslm2frwxqcrm3spr601p2r6ga2b91d7v1v0rbi7h06h14mvxa6";};
+pdfcomment-49047={run="13cknk58kksg605m2jjkvmkfm47sdk56irj8xa3p0alx8c4cn67m";doc="011l19b3lhc8zn3dn071gnlg2300174xaqkdn83r631zz45yriv7";};
+pdfcprot-18735={run="0m4lf1rb2j81ry7v2g9lfqs42rizifd64q7xw9dzhnixp900ldfk";doc="0b9ac68snrs7fs8g8nqrs62h8jjfyjsa07psk8qc20nvpya3hjq9";source="00nmdx6l66w895fjir6r2pwrnh0vpn706i9wi5qxx143h75rgifl";};
+pdfcrop-66862={run="099j54qmjd40q9mws11sadhzdmi70y27mjy8rpkw2ijhqgfhbiml";doc="1wnx4ci4p77cz7l6yihdbx62w65zd18smqqkb3vniqwr11232nqx";};
+pdfescape-53082={run="1vbdjmm9bi9ngzz2z1b8jnf6nzf9xsaj5pvyswg13y4dr00mnz6n";doc="1v81nw121acyv6mvpykgrcdvsgqmby8acpby5lj75ih4zya9gs4d";source="0jk7rnf3z1hlrqlrcx0bzic46v57d8vpm4w5fn4c37q1f4v5zmpi";};
+pdfextra-65184={run="11r5ifc28fhngzj6ygzfjk4j03xwri683498gf6zhwq0j3km70jf";doc="1cam2f5byw6l7rk8hb1zsw2l7qk52sv83wkx6qzgkhmzqbsh6wck";};
+pdfjam-68597={run="1bjq9nax4i940y43b2iw2i7xjzd1q87h58sp4y1dh1x1n5a7fw8k";doc="1kh8xlzcbhnkrwz3yryg8ai7m315yw52k1ydapy218zbvjzrai5r";};
+pdflatexpicscale-46617={run="1z19y34c0x05yp49jqn0z8i3ghv0sz8zm0arb576rz7mskpivjqz";doc="0d1zzym0mgsbicp92qf60fq8l2sdbdx47517k9pj3v8g91svxlpw";};
+pdflscape-64851={run="07bmajz9ggwkq7pz49qipy3nmaqd6ypwhpxilsj9qw4bk5asxclw";doc="0s7bv2v7hcs90fvgk12ff3q89nhxp0v8zjv38wc5inhvhk77jvbd";source="1cx870l68mch1hg0va4g3vdjw4d508bw1kw9f3x9b4wfi7dqfwrh";};
+pdfmanagement-testphase-69078={run="01ih6xxsmzp73h6v0wy9g10rwrmplyr8lpdaz99b5l0pyidh4p13";doc="1ghmz136p9pdg7yfv3g5zrlpwiv81l8p0syl43whdbkkmwky7y86";source="15rr5pli0zp8ziplpkyxzid1i0jjnwcl496pd2q460y07rdxhgbh";};
+pdfmarginpar-23492={run="0mhf21dcz4ndhbh1g0h3kcqza4ni6iigrkif0iryyzg1zcx60d19";doc="0arfch7gb07grg0n8ij0wfzbfzc8bv5izvhp3vjz8hl8ha3wyzgd";};
+pdfmsym-66618={run="056w6dq5ymm0x71bcya5nq4iiflcmgw4fh6zv3yb8ihpjj3h00y5";doc="1vrgfpg21bzg8xcw6cf43bjc3gh0m3r0s0y8lqh2nmdl00pmybad";};
+pdfoverlay-64210={run="03cc0088b0iwjmx5wkcs48nnmygsg7w1xlvbi0pawgmhfvfivis9";doc="0702k1ckh9akj21xvbvn5s18x8s4nwk0m7jybkcl8f481qyhhv26";source="1z8n2a0kwp13iyja45l014jyl8aaw1hhnxgxfib6q8i0qd97xw73";};
+pdfpagediff-37946={run="1a4qmaypz1indb2pw4vz0hv8ihanhf9z0azs3zkv2ya6qkc0kphp";doc="12di5a3976bkilcyfg0imx3w8771ky0acgrag7xp9rpcggbi3r08";};
+pdfpages-65319={run="1ymrq5yhhjp5fg4sbbksyc44lqaz3jwx7lj0360xk14s6h53slyy";doc="1fn5sc8k4pfzsarq7j51iamyl3da7r1qv8jmr8mjafvrvzk6xbp0";source="10gilsm5b0qmfmacm2plhm1ivrvdnw0ikgmxapwdqi03qvizgyd2";};
+pdfpc-68610={run="00zab5xlcqqvvwfxf1py7m6gslgv4drx8d419wl3zjmc6ww8156a";doc="1fm43d3q5gl8fg9p9n3z1nvcp6cykm271waphnjdkj29nbg7n9wv";};
+pdfpc-movie-67201={run="07d7d7h8zfap39dd3nks1bnpnfpgs8nrzzdsmchy6isqfmfrypgn";doc="1la9fvzrlik4ar3fdaxla5gbwpa2v49xrrwc4wy60i7h80vqv80d";source="07lw20wp5cqr0pvjsw3ds75n3hggxgcp9rbvw026lj5k54wik1bv";};
+pdfprivacy-45985={run="1l1nqf4ihwfycnb1x44l1dl2h9f3iy1ppvr0l4zb8qcjqhl4j63y";doc="15w8jwhksfiv0h2iixk07xvvmk1g2j322xqid753bcyks48xffjz";source="1nqjj51h0pcrjnybj3cqb8zwi0r1ipzzw8ic2clnf3in88pjzjhs";};
+pdfrender-69058={run="02zipdaymsrrryfn1cqmj5hmcg9r62mzrjil6fm8d4jgk8ihykm6";doc="0m1cdx7gh5w5a5g9n27a2amlkmy0ixi06w2a4b145sxy41acai50";source="11y3vy8709m5cz5r6zh3lnw451mn6l0674p63fcgqlircs0j7vr6";};
+pdfreview-50100={run="0saxaxhma5gdn150l934y0q8x0nigbcn9r7ixr8rwz4d85g05m9a";doc="1kdyc7h2dpr4gjzf9g0rx66gsxaiwran9k7vj8942pr3x2d2jbaa";};
+pdfscreen-42428={run="0kkdnwgwc9z1rqsz8cjsmfjdi3ycwi7n7pl2929yvvwixp10rr6f";doc="1zhg4vqfjjmg4z4blrr2zl6jp7m2c24m5diifgn5j3m8nwxp6m2j";};
+pdfslide-15878={run="1za0jp9dbrv0c875zddgcvddlk7gm47crmn97k4zx2s7glx24wj7";doc="1rv7wbzrlgj55n7r6i9bm1vxjvjr38v67lizmbdcxz1lfqbv0rw1";};
+pdfsync-20373={run="1wwndjn0058hflw73y8xfsmnspvaz61r55k96fmsdfb7xfncv1vn";doc="1dz826gclpf2knrgks0lhvm6rs1xjxqpzgbz4nkv1f8li7379y2q";};
+pdftex-66243={run="048dw9m8gk1rmx5v5ylymfcssbchpj9s5csjpip7dz0wa23yc19g";doc="0mszix35nlx7ba9plfdb26wclh33qzv11qd3b243ys0rkv9lbklf";};
+pdftex-quiet-49169={run="00df842vapzylgavkk2c0j8yg562n2jawwznvyf3qq6dznwf1chn";doc="0sa2gs440h3jd5i51hhbfvpqjpfwvzz5m32x3ld5q9k6zi88b395";};
+pdftexcmds-55777={run="1fpijk36lx5czl6bpbawlm8f34zp264l1fli095wha41fil25hks";doc="00xzyvl66fds400dm5zryrv3m5s42mv6658zx7fnx2wbd0jxs738";source="11516wkglckyrz41pz9cqj0xa2bd6v2l234k28ynnmfjsg56vph9";};
+pdftosrc-66186={doc="0mnz5id6fywhlay6r38nvii0a2ks5gdb15i7s7wkq1ay9k5k6fq3";};
+pdftricks-15878={run="0vji4gmlg9b67yj8gb3aj2291ll1xg9p5vq2kvclj3xpy1vnna8k";doc="1hzd05l4yyz5giw9kqxaw410na7k85wj0cyw0bbwzxynpzxqllfa";};
+pdftricks2-31016={run="1dlzm7ivhxvz404nm61kxjn5arqgfw5z184qaxwn28yk6ri07s8a";doc="0k0zr8mv3xq6ibc7s016qnk78b1d22jgyq35jwimj3rm2aykdmww";};
+pdfwin-68667={run="1mxfvchz2h9wrybvb0ri4iygwn1ljs2jzsr9hi7j7ych0sjq1c3j";doc="14i9y2p683d9rgw599yjllgyy5gdb5z560pbb4l5hlfj0mxzj2ja";};
+pdfx-50338={run="1pim1kiilydijs57zcsd1cnhzvcq5y621fb15hwg9y69s624wjwk";doc="1rb38sw6lyvy24hkdyw7xrbm99bplvcp4cfcdr80pdwf51g10faq";source="1y55s7h2cc39vp36ickpkc8dl42rmq77l1d47h1dxximyihl96x9";};
+pdfxup-59001={run="1vvddbdg2l1s2m47w9whvjd1pfp28l6mnyk1m52wnspm3mi476fx";doc="0mbqq0rx1k1hrwbazfkxf72n1wrkngp45gssgb9z2pfw6k3sv3vm";};
+pecha-15878={run="1ia3q7gygbg4scgja2qf5p7wbgd429cj78b8ffjcz68vgdg86jjy";doc="07b7kmf1if59nrqnsws5hklv0idjjxwp37a16dbjpcfdirb4s2m0";};
+pedigree-perl-64227={run="0a99nbm95pagcnww7wyxqwdycl1ags7arjnd9spahj1zn7xg1413";doc="0d13qx3al4qa7v9i4frii3vv3n52bln12d2dhp7wyjla3jz6673a";source="1xb778agh5vqbm6r14aff42wvipykjsw9yk3i0hj7ibz4ipcslr2";};
+penlight-67716={run="10lzsbz2ia477khfm43sx2qli46isf2z8pvsz23yvip32lmqznrb";doc="1hxj4i1zfbwbyl633wn9m4xvbagv7ljjjgil3cjfmdapxgr06n1m";};
+penlightplus-69070={run="0cbj9pg01nq7jz8qr5d3l0mh4rpad3jxjcd7j5rq3aqh8z5s9q7n";doc="13j9gb6h8mawihvg4gxlzwjfkwprsa9s5fv0bdlr5z33n8fknhxf";};
+perception-48861={run="1dqr68wkf70aj11g4ywr56si8g82bxi2xc9zdnw0nm0wbimy5zv3";doc="00g96wswsnpd0smv1s23hqiq4lg407m80nybmig4ibcrafjkrqrf";};
+perfectcut-67201={run="1hjppa3dv8a5740nr5jya445y5nb0nb2z1jlkqh386bnvgby8393";doc="1ly3zrrrfb3jihf02p2j5ym3m2gnr18pf2v5qg8rsj2l258xlark";};
+perltex-52162={run="09vc7pbfjl0zjmbra41p5lmr6l6r4gh2x5h9h5hg1i76n4mfkd8d";doc="0sndaglhb92b4jvp0jzpvdiwzc49ijh309aysahrw0pwkdl2lv5d";source="14rv37h9qwgba7dqq8zzvm0dc9y4hmyr6yvvkfbh2il5zs7m8nrn";};
+permute-15878={run="17ky79fz5pb9xr4gwrfpnpxj16mzj6f3wnh9dfhddzlmbllw1djs";doc="0m83nafyxbixsyg37ia535h3axvf2vp6ky0yg1xcv8ppsl72fd8m";source="0k1h40himliydiqssvmzl18g28w0hfsxc6kv7wn1q41sm54knhay";};
+persian-bib-37297={run="1yzbap8fwmlz46ngqcy6hwjw98z1cxlprpzk6vg2qw7wvs57b143";doc="1rn6p3zbfx6vxdjzxavvbf9405cxk1kv56971n6i2bysb5h22w0y";};
+petiteannonce-25915={run="0xvpw8lh1zlkc89chbyjsfszr7ix06afh1fajp5iiqiyxb021v7y";doc="0nnf9bw4jdm3w28957bdfsl9z94a3dxz5kvmjrg0jkrp3r3cyrgv";};
+petri-nets-39165={run="1hi46pzd5cjvpakya2bl52w7m84xm8h03m01jfrry3vnp9hqbc11";doc="0ixpads25k51rlb2kapxgv75w5igbnv5isn61c29qpm51dpaq012";};
+pfarrei-68950={run="0zp4msdpi4w1fhmp7n2s6cdzxss5a87k0dw7z9iw6csnnwaa40z9";doc="0v54c02fmsxzwc8i3050mlll9z1qgmk6vvkdgjmph735q2bmlfsj";source="0inlfabzb1q94bq2zw2416vaxbgwr4nw2yfax491dg5hqpglyl6x";};
+pfdicons-60089={run="1pxw1mhm2lmggs67ql176f6csajabhylmlxaxp47irk6mlihiavk";doc="1czd4z8rfnfp241lq3v6ri4hnij4b8pg2h9lcs3qa31r7zmx4hkk";};
+pgf-65553={run="1xai2x91jf241w03lndpa478dijfm52kyin1ci4s3pwvvqvwvcib";doc="059fvzbpq3nggjc3yddzgj1ci4xs5qrwkqvqshcnk0agn80zpcx2";};
+pgf-blur-54512={run="1w9p9l2nw9bf0rhn70y70h6lqqqx3qravgarmmz1z86ara26k49w";doc="0fq1w85wqqrml9jzi7s2n888165pg4ds8ysvgh56kbkd2zzahnw3";source="1pc8x23l6qcq356s843si16yc6yfrvdxg7v821271dndkg7d2vvh";};
+pgf-interference-61562={run="1l3gryb96av9zwxn4naxz5vy0y2245fv5zlm1dg31p88lflh2s5d";doc="09vvbnmcv8d6y75hxdln9gqspm35fada4g66w6z4kv1bg7z3vrlj";};
+pgf-periodictable-67250={run="0q5407piln8alj39g108sbkiir35f9zki3fhfmq7dfkd8910mbjv";doc="0mk48dzb8n4fisrifmwm3gbhrk4hmsma38nl5rpiwm7yy447ch5g";};
+pgf-pie-63603={run="0wr3r2997p8as08d172sr2hxspmi5bgsgvgwvkm27hg6kpi74zsi";doc="13xvia0zbgsrsy50rp3fr07hb1zfj7jfs95ai6cvy9522cw1zb0a";};
+pgf-soroban-32269={run="1y1c70a9v9zy8i58j19g5c8nc7f00zcdrdjmdcbm19r8vi2r09fr";doc="1r1rgd313fijmjqy468j25d55p76vxmcrgkp968riknych16y1pl";};
+pgf-spectra-66961={run="1zl4cmkd153yk99sm6cki1a0g5z1pfv5c1d8jskcxzrfxzzrd75b";doc="1iyny475v6h54crlfjm32lq37f2dg8mirgghs57cqrrcl2nv4qdg";};
+pgf-umlcd-63386={run="1qsnmhb0jdn5qnq81zx7gr1a1l93a3f2z12lfz9i2c0cqbjnpxl5";doc="1v2p1xq7y5a0mpd067ragvnw21hsvl9irwaszc6sdb9sqgqf2qh6";};
+pgf-umlsd-55342={run="0rs0iskzhmlgydk4i9idql66sk9dyiqrglp429b2sjaw0mbjyxvz";doc="0vl7wjrgnfz0y0pfp4izqi1528i81fssak85w1sl2n97lhyq8mkk";};
+pgfgantt-52662={run="18snhw1hvff64xq6jaq6wjdxcrkjwjv39hif31zj2r0ghsajqaqs";doc="1xhls9kyhf314rrmd8r3065qaffbm48mc746lwhsrh6vmq548baq";source="0hgjiy1gs8nx0211ar38qr3ql5yx32mcdvms0yibpglr2ncv4x39";};
+pgfkeysearch-69385={run="1map2bxnwlj2v6w4h36jfszz858a1zgdlamdjj0jc21xjsfsjvbk";doc="0h5zhzh4k0hbz9gnh6ygzsr8jm5lrhdx0qsm5z55xm18q7gp2ri7";};
+pgfkeyx-26093={run="0gh229dsrbxw6brfz5m2zz6x3zfsa03iqps5bgcr4bz0qfjl0a2s";doc="1cbldr5x9n649sk9dfcp143jrzxh6l4ibzndx4yr8f7id5nx3nag";};
+pgfmath-xfp-59268={run="1lfnqkws7gjjbzh0p5i0l94p1fjjsybwf7mzl5d7xzcap9db4x71";doc="07d6kybw6q6igfpn1cgjxdi3n5zz6ic2gazy71gb2mjqbzmhzp88";source="0jvy1qy47r0p3fx5329wqg4fnqlwlqsqs49j58qvz6k7l0n6i82g";};
+pgfmolbio-35152={run="1arhxgwpsw9ifj3yy36mv52r8843bm3v1lrda17r44zjf4fhimfk";doc="0kxp1gqd09q5h4ixjlfmda9jm25wd3s7dsxcqc32sw3qay4d84cp";source="0lxbszlky3q27cyzfnnvglmzim4lfjh14p62j43sj5w2arv9w3v7";};
+pgfmorepages-54770={run="0xarflkdk2xvfmmsafv1hhpdrfyddjxlqjjwps9yzzcwblpjnali";doc="1wsa6iqyrcjq7zyanjgaq6a1i5d7lm1bk9y07mz0bjwc2yv359zi";};
+pgfopts-56615={run="0g7a22d0ppdzcazrif8yjic19lvz143p6vwflz16p6zh88yhcdm7";doc="17q1mlaql7f510pz86n64sm4m97nii72jghf75qs5yr9h9lqrq6v";source="1mz5nzbhmbgzjkpkglz2w3s9s8kzrigg3wrd91dmdhjsm4d4kczi";};
+pgfornament-55326={run="0hvr6cbp4mzajmqz6fyd3x7qr9b2vlwdhkpc62axgm2sww8igp70";doc="0i1fncv9saflkvib43jp02mh94cv0nnq6k8psrf4l1yx95sdxnky";};
+pgfornament-han-68704={run="17ldl3a7gp2pi010hp1fh15haddjgni6f7bkgqyl1xk4yx0gjcck";doc="0v37qkx8j0ijgr22bya5m6ka0mvnymkyqsdg3q4bzhcfydspsvwy";};
+pgfplots-61719={run="1g3q8yr4i5h5jqj8w5yh1jix2ia37la59y0dcmrj5bnsr8zbmbx5";doc="0fd0azswmcghgpajgvxh82752j4mp5avslaicp2x7hjddh54j357";source="1h9js7l4vygn230svbmby09k966gkbgjxykk5vig45qdr7mqg3fr";};
+phaistos-18651={run="064gh7pwrsp37dxvjfiar9bl1i30a1kngirgywndss8xmrvqin9m";doc="01wd0636h2xs465rypc5q7saxhind14krmk9dp9rqc9129k7rc0q";source="0l6nmd3v9x3j8if5aryak2kh42zza0g73plwv6im6hpxkhhb21jf";};
+phfcc-60731={run="1w2la7mmj0a3sbd3k938bnq8fbl6sdy1w6bxmdfgiywj6wiib6ca";doc="1y4y0gx858gida7hnfngar6damk1gfvpzx70zbjsl2v7x6qkvkm1";source="0n7l6q9f2i4n6lc05ky9vgm0ms2hdwxwynfcqz216pshd1k0b2m5";};
+phfextendedabstract-60732={run="159s3ncwdb79chlffvp9awiyd9gx9sxacsa8596bgdq02i46q3ck";doc="1851hbjavdxlan8c480in5j4wyxrl4kmgqgc86f9xwd9k7f1gp3r";source="1psff7l4917izgx0id3ccl4fk0zb3s090db4a8dcm56lrrpxzq3d";};
+phffullpagefigure-41857={run="10vdd225whr0y166xbfc8qbm39vmw3ksvcjm7ylkafyp670ckc3a";doc="008q8mf85s4dfbjxbc0k9zpwazbvhbfcc0hqvn679v23kxgfphnx";source="1xwiygkhf3ggmgl21dsqmpq6238whn20wzhwn8znhh9sxwa58pyl";};
+phfnote-60733={run="101mhf3pwshakfnl298yl6fsyaa7xqw44j2g5z4vjvvvl53i7ksj";doc="1y5vnm9y3lxkl58gzhphscffzirxv608qg6bjk6xf82hz8835nac";source="1vjb4irvrh1nn4gc858zsbjybshr9ky7h1var6yr1ys2p7fdyy6c";};
+phfparen-41859={run="00is93n463f5iv4gxd18sc3w338h6a38xahrd1r5j8mv2d419wq2";doc="10ninpjl9ij19kw8y8pvbma34b1y462qdigpslid2g3gyagkrs8v";source="00bd1j7zn84d0lfkw08mc93q2ayg7j7bq9klcvvcd5m189spj30h";};
+phfqit-60734={run="1mabnz0dz0m098dxinlmx0whkw2ph2rbjc52iy1xj64aiik9v737";doc="0882ddy6cpg6ca1y6csxw19j7ipm482mfqlp2ldsiwpcgnzx8vkz";source="1ac8wpm1mmpwc50cyswv7hkkpi9b2fnhhjkzvsxx2arvdpz07k9w";};
+phfquotetext-41869={run="01na6w8kspl4i0i1s4cgnl4r5fdcybqxx7mzdd6mwbd24mh971a2";doc="091rcqssy0snh6m0z2pwpflfvvf7fsrriyb9lq0f5pnpqqhya8ds";source="07q96xkawcsiipr87nbwfawkcqmgch8h695gg8wlq091q2wrp452";};
+phfsvnwatermark-41870={run="1jmq6l0hb895bfqh2qycxpimwdgp44c64cyxs3vnfzxsb4ii4sz8";doc="0bcj2m5x107sswwg54zhyfdfdhxn14klnxkvb1hc56qi4wc4vkwy";source="1q2l9w8lll3i4bjna6csx4kdpai58i25gn1yn0z4p0pbzqvi08xp";};
+phfthm-60735={run="1hk4wxxw7l7snclkwikk0n90y6h8g1y05ikkz0dwpzxwswn9fjnd";doc="025hl2lz0avbrbv341cgvq5jar40vrgr2rsrp817mxrbwlc53qfn";source="0gajcnby3vwmgsgyginhi7fcjssayfc73mhg6mhhdkxi0n2gfnxi";};
+philex-36396={run="01m80gaawlxnga76rkqwwrg9bg0szyd3qi0d3zyvk1n41h6inijx";doc="12s81zvlsddzscvlwqm080y6iv1wm5vrffp9aqdlkpcf0fwlriva";};
+philokalia-45356={run="08z5hrp8a0551s0qfj02l79cpkdnsll5k60di132addymsl2p0lw";doc="0pgy5y3b6ramrkr8r7bvw5byviy50fprjsj4cj5h3l888inj8kkx";source="168r0ygbvwbwxlqvjqqma0q3w4172jpif1sr8p54h70crqx2310j";};
+philosophersimprint-56954={run="1cdnlyf9cf591bqp1dqdxl10i3im014vhxv77m8mviklayjyq1lw";doc="17j2zh4p8xhf619slqpm6bzycwd9zpr8qj066c4wm63la6fy7lyx";source="1zdcwyknfjxw3vmlipklrvfadw5ahh4i4ns95kyqs1x57c7wgamp";};
+phonenumbers-63774={run="11f7cnv7kh2pry242nxgq72kcjcaxg45714i5rg5w7q5nri4fkf6";doc="08hzmb5m515ri5l27gr0mi8i1kwz6sf5f1rzhdif433knyhfm34j";};
+phonetic-56468={run="1cd8x4qajx3896a1bzyhnrhkg8j73lffri0fzks5h8s27jlnl6al";doc="01hnb97dwbd7g4lflb9kz3w0vhnk5nzni31sfiqbg35lypa0pbwl";};
+phonrule-43963={run="0xv49vfvlfjad65gngbk5022vcdi0w86mzqk60nbz3i8npvncplf";doc="15bgpzfxjm22f4vqq9nbjhldvxzflrpayv51g383nr41j3k4m3xx";};
+photo-18739={run="0d9mkavi2x4wha1c9zi2fswv7vsi4hr0588gj82vwmwlrb6v8gsa";doc="0xnxkv1rkz4c7wh7dm8rna2g2zf9i97aaajlfqsr6ls1d9by4zn2";source="0vxja102ajrygarqfg0y7bmmhx2my66dlnfp7rsc4kldi1g2fs3j";};
+photobook-68313={run="19538cm7z4sw742y03ih5avr6bhxwnpymmppp8w8ah2p4ixrwqsx";doc="0bwb0mw20iz32cw6rcagpdc247n00pnql4nby8vrkjhbyj8l3hp2";};
+physconst-58727={run="0078ggfyyr2vh5ni05la8jaxnyxaz2jn0rlahwkw05ng1h5nwl0s";doc="0d10kzi278b6yf7dvm3j2nsks43jm6jfjql5jyv51l8bq5grkmr8";source="1qvhif2amxfqvwj6vd82f9mjgrk79crnz4sw5v19v02xzxv66fsj";};
+physics-28590={run="06nwz84201w9vky4s877fsiw4pk1kf6iq9yp1jcap7j57nb4l23j";doc="09zmpxkrrv9j2ip034vqwblazl4kyprvp24k0f2k0xgc4fja2pqn";};
+physics2-69369={run="17br2lisl7qyqvjsgyaa7c2fx3hvblj9cx27zfax7v32aly423af";doc="0lwn61jdpzljwlgy1yzllflziwqchq3fwanj6c2yy02rfyi0lxp9";source="1g1psidas3yjknj8nlhrvgjiy6b1b6z42d8260szq8wmmmybi13c";};
+physunits-58728={run="0fzx8c7sgd6incgwdbzyd3pb9dmdajb3qdfd3mj8sascilr0c2h4";doc="0ha1zp0lzx2q10m0wp492sf45pw5cfd98s9pnzn2wxx3k970agf8";source="00p7p4hh49i9xwnfd8y7nsgxajjcpdlxw1asyxb8q20x1w1wy2cs";};
+piano-21574={run="10gfxklfwf60p54wcbs4l1jpwasxvvbnkjhjpiygnk6mvzjx7dyl";doc="0czqrjlfx1i6k02aa1r1crvkw7k2fl17vzqzrkc97msprrymxwgk";};
+picinpar-65097={run="162119bh7hx30742k0f6ygaa0w9hssl2nmp63rmvdnpjlazfiizp";doc="11v1aynkvc6m7484h2pmcm24405v5pdgkvmjg4jabgfkz5q71g7h";};
+pict2e-56504={run="02rhm6a26vgpscasrbz25vjimlnkh9s18pq6a9025k65iwp5f08z";doc="15k5w2l4c9mxay416bgj745g45pqyaw749mn69dchg2pqh77yz1j";source="007yb70j4ay0qdls8kqb4wxf1g3672yasjjlqc10zsywc005f0nw";};
+pictex-59551={run="0yz4dfnmakv78bc7rlabh8582knr131mrx0rxjai640bdax8as2a";doc="037ljjsnmllkxgp800dj1k9pvabwg4gjsqci84jdmayjcwsjibl1";};
+pictex2-15878={run="1qqf08yharknq6csk01jdff62mg011bryqlq5mbmjwqwh7wxs0wy";};
+pictexsum-24965={doc="00yd0945qiss5jizkxncg8a9bdsld7mkhaipi92bbn1ghqicsw5a";};
+picture-54867={run="1i2775x39n5vxspy555rwn86384yyapl70kcfir96prp1846rfjd";doc="09gid4bb2wbmaqday94qj4r44cpk57rxpzg6grdcjg4y1dkjph0b";source="150wv3jb6hspwhkjnbxff5izskvqfvhvqxbw773qikjjxsaidqgb";};
+piechartmp-19440={run="1sl8mz26cglbsqmpd8qz0l9yycxgcimi0yhkgnc04n2iik1xc6b3";doc="0g8sh91ki495mqv7zxxz2q40bk9dl150a9hi7yv0kbpiy45h3af4";};
+piff-21894={run="1q0xdl6ip1706wxprpd85vycyksbnn1ws091gvmpdhn6as4fxg9i";doc="1sa2l82yndb9pl8bfmnna20ackv9rxp7y6ljjyix3bpksqp20rwq";};
+pigpen-15878={run="0zd90dp5bx1l5d5ka8lzx83yprl1anh7r4qc0laa455dix3swfq7";doc="0z0a78akxkigpw7289692sr3z8g2vnyc6hwcznn2963vmsrayv6c";};
+pinlabel-24769={run="0dlg15b6cjykp481xn03kg3p1zqwccwnm2la710xdwf87p1k4bp6";doc="0jw94fl3awpyla0flmw9f72j3ssrqh1scfrbx34mxlbmnl4z3pfc";};
+pinoutikz-55966={run="1kj24i32ql4jfhzfxyrcj0nmyyhf4ipic7zdzcz71za6njqv3gql";doc="15farzmd27gp8ms5vck6xcjs0cx7rp47nww0shs6r0b0l99946m1";};
+pitex-24731={run="1g91l1z71481hlwz8vmdac0g4vm5d6940gy1ly44qny626k9j079";doc="070qn9b6bq4szqa9wqfmb3qbfxcgif79dzbb3qqhvs7fh9bivqdv";};
+piton-69320={run="0r88g4c5rc2zg2vw49a7cswrnmqcynkhhck5w4f6rqm2iggbvwgl";doc="07d13hn6h1wszszzfrj8zib5vvm3kv3z0543c404587qm1s3b94p";source="1j0j70ap527g1czw9ca6gml6blfa0djmjvhvkqlvyv024msm32l6";};
+pittetd-15878={run="1s8865g4fv04ha7vls9frkkmx8dyn0l7z1rqvh3dkyy7fdgq4vff";doc="1jkdny3kqljfjnf9ywpz7xqvfka8kwi33jy3z2yiq1fvp8k60ar5";source="07k0ilmwkg3wvgfpqyqc60hn5mlsj8z5lsx8mq8h3igwm4j8krzi";};
+pixelart-66012={run="0d41qzn2gsqbgvgaxk9a7cj5r285ayn8amplzv57j5c5azyi6qlz";doc="05mcmy25mdl42wfdd3l64bkkxrvmcj6lw9zb9jypaf2rrdfnpq6l";};
+pixelarttikz-68520={run="1zn0cpmmdfvydizw1q9lhxdj185gyq2hpzl6rpjfxvx5wsm9piag";doc="1p5aa3mjv4g5qa3vi988v583d8h6237lq9bncnjaa5c1sd1l727l";};
+pkfix-26032={run="1sgss755cf1zrpv3x74x5qnqc6w81cvr1x0w7875ijh4c1xxkn9v";doc="0bxijxbbj9v4c5p1rg4gkqnm75rq516vxln6s6174ph7abqrhvys";};
+pkfix-helper-56061={run="0hf9hnjw7ws0mx9w5s6ik17zlq27fyc3p9bgya1wxbh8lcvrygn2";doc="0fh59nzzl58fgpkkfzvi603sfsfnqrj8s39k4nn97567gpv4a22a";};
+pkgloader-47486={run="1vmpxv6x2dq9b4ddj3xxqzkxz213bvz7qn24jlx04svdrq0cnpjn";doc="064qsri65nyy25sz8y9avpxyg3rzcspjr1cfc5jp0vfd07905zix";};
+pkuthss-64869={run="0p2hs886j54waxl9kk0gjimhylj08z1jy7c4pryks5slchz8rmg7";doc="09hz5qm3d6wh1v6bcl2sadlnm79sfvp35g8jhqz6xps13jsfj9dp";};
+pl-58661={run="1j2a3vz3wabv3ai0k9xvf8brwljr5r2bi57nk0bba476vkvxbrbd";doc="08qkn286bx6akfrxrlbj52xylbvv00bvmmpin1sbpy342ij57lrq";};
+placeat-45145={run="0vmvw0k1s023siwsrl4hr32wyla5xmkvz449p7vlfv1n63383c1g";doc="0j9xm75xv0lqkqzm4g8aqxy6cs8vxydmm50vsjj4g4aah7n8jygk";source="0118s2p8vfam65fwynf3vabqj4kz0kkw9kbq49k7akwwj1wpyd7f";};
+placeins-19848={run="1mlx2wlm5j7qhhz8q1fvxd4zvjmjpzhk2aajql3wqvamrawba6k4";doc="0libqvl13md069fjbx3gl17fyzpn6v4jk4vk5086szbi93dr692m";};
+placeins-plain-15878={run="1lhc72zdm2cjynx6lf6kafmf00nw17z3mnfhagh41h76cnm338g9";};
+plain-57963={run="1mn5cfiaj7wrjij4y0g2mipc6v8dk7l7nc25s1gmgvvyfqwd3byv";};
+plain-doc-28424={doc="062d6hg4npy57307avvyd2sdxnmyrh5ia2rdb17p6cx555k8zxwq";};
+plainpkg-27765={run="0dq20a8nyyyy1342s8sc1z1i1gdfz49dmv2w9fl5dbnligzxgdfl";doc="145249b9w3jpf9swgc4293r05p7r5ylmxvx1a5qlv3fgni945vms";source="040m08y54xr4966f8b6z38spdhjh197l56am3wpza5qff4nbcj6a";};
+plainyr-52783={run="09py8psdqqnxmq2nkczxz092668zscvf9hbr6fcvrnj0blvz3wxy";};
+plantslabels-29803={run="16hzr9zavc26mqddsq4yzb2y60r2lh1yjlna1qyaxqrq7fr76g1z";doc="0pvy9gaarrwr4f0bzdhj3xgisfmpd73rfcv9mlw87k3l9y2vly0f";};
+plantuml-67097={run="00n393r717v82g1g70qs1b5isw4x5bwvlmajy1ahqrapwxrh7jfx";doc="00gihdh9lvs2y95imsmsjx4qqmqr9maavbvv974s2k82bg24bkkl";};
+plari-15878={run="0jybi5dvl6ksjpgfqfrdnx5q25gl5xgqhwax4dk1shf6rbafkgyg";doc="1js29imppwx2jny1hcvjbkz7cc9qrafgniy9qd11bvjyp3n1vly8";source="0br0vm2ncrdyqgazdr2p1kvgl6lq124b8h82245jc8yz7mnrz2nw";};
+plates-15878={run="1238w5267spw6liidzxd550hjdjxsg3d1231l9vf5fmcifllsnmg";doc="0w1jn22gd938zqifhbiikgggbly2fjhiwjdh2jq66yax7p76pjc3";};
+platex-67315={run="1qddfffw7w3l0zgf1dq4376fx5m76jys8c95wwibxdh20vydf0bk";doc="055pc891zbkjxdzl1wbkxrxs3flw79zms9ghnqjz2jhw6axh2khn";source="1pa7yg6369fh72y1wxj635kv63ba3c0bdhlg3ws202r6zl7ffmab";};
+platex-tools-66185={run="1yrgp92fk1ci0skh2lqw2pcbnrmsys7gai0my1ijp65zahdscx0p";doc="0v34yg2wv8jy7dj6vszx8p4rqpg0mnb574axqmp2irl2givf6wsj";};
+platexcheat-49557={doc="04hvm19x4z7vq2md3p3r2wwa7iqkgkxnvvj1xx3s9145m6fjib5a";};
+plautopatch-64072={run="16m2dsqws4z0i04wfman4m7d5p9y5dij8rl6bs0vphq4n0hcqhh1";doc="04npb7xbhibvjjxh32m1g2c0r3q5j5jhjgc7hn1nyzj2hzz415sr";};
+play-15878={run="0gs6iibb9jkmynhvwldwrh8rvalayv8vk8ziyx9qyqsdsgh53bz1";doc="1dvi29x0fdnb83bkqfsv6l2jp9rvvnqpf1paznx9pli8gvgwa1rz";source="0nlyi6ra8v3pgk5lhhvar848mcd5zqbnc6mbqnbxsj409jczd0rw";};
+playcards-67342={run="1bqk76g9mg86rkhjl12g41dph95zrdby9pddp7lac6bjwvyjg6rg";doc="0m9yvn6bxz3w6l0vfn9ycllj50az3631v5xabk3cjrnlhdq97qcz";};
+playfair-64857={run="1yy8c8aks9c37a18ynilrag254ffcx8fj1xydsi1a58gnifmhi0f";doc="18axmajlbgll8cdjw7v13n0rq9dsbpnm4sa13mf46dq4fhy1i8s0";};
+plex-69154={run="0q8x2358prmrlh3zyqymiyq7i2rpzdhv2gw7zvnzjzx7s3kwdjq5";doc="1bpj5qh46d4n6ymfx500p44vj0qn5bqkz8379x3pn5dcy7ia8kja";};
+plex-otf-68238={run="1vzscj27j18km0cjjbfjnls4ylr1b067cynxi71f7wv99s29fw0b";doc="1nyhqvwax36xkcvwd68yb7y5mlainwdw0czyyvl2yd0f0r7m15g0";};
+plimsoll-56605={run="0x39p7fhfyxnz95g44ci8xdiwiq0w2n7z3vq2vm26l9ia9q9m6d6";doc="0rjjk5l0zvqmj32m1xcyrawzzllbs11bzb4i4cvzmnakzlwkwcrr";source="1b703r0ssg8q021z9dc8n7p1w7hk5b548icc269gjrpad622acmk";};
+plipsum-30353={run="1byjqmx68gb2xcb4nw429z7wnagv5l0pi3v13dlwp57sgfkxrz0j";doc="0gmq7rc2r3r50b7w5kqglaqmrqnxv6wav8gz09a2skkir6v1mpgl";};
+plnfss-15878={run="0l4kjidsxzp14ii850m23q3yz1z8my9svqrpd5hi6v7qnv73vdnw";doc="0iw938rnvcfly3z5v5gikd3svx4mxwfhw0gsyv26m37l5slqvf1w";};
+plstmary-31088={run="0cda8irxd0gxa18x47v6d1wiwwwh6w30fl9ipxdz112h67l342k0";doc="02ql0pxjkp5a803f9ayvr9splfchzk6yhzjfrmh2nxzwgczy9s50";};
+plweb-15878={run="0yimmz965gsb0ddvq3ck28x73p9fn08c42f4331088130l43dkx5";doc="0ad3z41r1a3wkwr7lr9hf7n4bcas10fdjky7f9ykam0244r5q4pw";source="1zpnyzxf125qqz6j3m2182yn71nkrlaan1qfwl98v020iia6vyv1";};
+pm-isomath-60368={run="0kl56njrcs2qklkr49bnkx17qd8csa5bcanc4ypxxv883895qg66";doc="0glkk1l2gkqzkjg4vwi9qd3yfv3xsm4ssi03jizy9dxrxbgl60z7";source="1ly3bh0b1xl5wf3gxvzrwwg2kglvqmaj3mb7alq5x8q2wn1sxyrz";};
+pmboxdraw-53046={run="0a1mp38f2562yq3nzv39ffwhnzwpamy74pvqnigg7hv2v7blkijh";doc="07f1n2wpfqrd62agh0ddw67fnl5qczw16640h3v5x7yw31dx4n29";source="0mqg8xkhqy18m2sbp2i2sv58n2hxf05qr215kbmh0b53lbp16pzc";};
+pmdraw-69366={run="0mxjnrrbmwy6bs8jnm6zk568kx07shz4m3zccp7ppxcrr4b0y3fy";doc="01cxqlfnbqzn6cd3jcm01bxnmas86lpipcihaxk13w0zwaqvyxzw";};
+pmgraph-15878={run="0mrvf2r4bv4qa9pzv90ardy5ncq2kgy3y89pgr1acsm5cspgryr5";doc="1pizlqyb0n20apwb6rvh6yfncyxnh6vfhnvc10il9j4894rii6mw";};
+pmhanguljamo-66361={run="0jhibwvph19i7hmd81b8c83g8n2dd45hj0q1l2y59lx5a21zisrf";doc="0bk405rl1vs6dv1dwn5aibld2rpa5cwd06p9s3pa6n7s8aj8frvz";};
+pmx-65926={run="0brg4xinn6sg8c9jvh3cvznqhlg0l8hfqv5whsh3yaajc5pn40rc";doc="0pd78a36zwhbn7054fgknpa56jli5hqssbhz0qh8fmqxn6kvs8r7";};
+pmxchords-39249={run="0yv1c0s3zjy5w65cpv9gmdr13wkfg04jc0g7b1f0mh8ychhdab1a";doc="0n6g5f4szxsr6zqqp2czi29m1dncfgib1pd90mbrjprvwh0filf2";};
+pnas2009-16287={run="0yl475rlfhlnd9d0pyzm1gj2gixrdzyn6858j1ndvkhr8vc055ns";};
+poemscol-56082={run="1k1vq2hki8jq70d0lmw9sbzwhp7mi5sx735wkrz9046xd0qmhq7w";doc="1cdbv1ls20p764vkllgw710fm4v8nbkw8ryw2546lqa21v9ki4sx";source="1l6zsi6x6akb4z37iyllg99schd90bny8r3pz8vddqjyacnf1j7q";};
+poetry-53129={run="1z36zzm75zidsb8zixmsdgngvg1gyasxdz4lcw4ikdwvjmswqzqr";doc="03cal4780m1r6i1g86d2gil5h6n0h8dkiv8phfjcp890y9vdw2y3";source="0y93c9fvjhfs70qvnk9ff7hwq7zyq8hw8h65bwgr3f26b6skfxyj";};
+poetrytex-68353={run="06h9aqwryssmzkagr5af598ic2rr5j0m5h5mwaw3ssrxwry86mxz";doc="07jkb5z8sdc8gp3j2fls8hcqrh5g67wimb0nfmmz5287why1br3w";source="02x9gadfnianaq3hjrhllrql20p1aa81jv8lc033qj47wml9fajd";};
+poiretone-64856={run="0dc8ll3xk7yrf3irrgl5bh4dwvi6mvgp3iqvzfi26jv12m3fwr8f";doc="0l1ndiwxpva5r7zdgcmn4hghi31w2v6vd0bvmvmywhx82ra8spsx";};
+polexpr-63337={run="1dml5b7zb2w4cawqgvqld63wlny45vnz7p8y2pc7b5h86p51a0cr";doc="198dhv2wlclrs5sqdiqk26llyhjk4l4zr0hlcr1cw56dnhdh2j75";};
+polski-60322={run="0y66zqxb87i8wymryd19hjws7y9snks73030r287lbifb77kyx4c";doc="169z3y419d3afhmhk22d0h045pysdrkhyvsgrs951ah3vgf8n5cv";source="1m8pysaiynxb64n81b8zj3cly6g81w2fa1nrknqnxm27bjzn2jrf";};
+poltawski-67718={run="018iqwz4apkj8pwc3ws7k00zldnz4k02h1hv0ry9d83z34xswfsn";doc="1kx83mgwkxd0sv2xjzvn6wdsbdng6skw71z2xc3xk16lk356q8hc";};
+polyglossia-69093={run="04mn94vq8fkg3a06ivgfvpwgdykac5di2ibi316brz9ypsglvfjs";doc="05b84cypv1ifzip7dvzjbq4xx3hn23qy2430faw527nv8zsz30a4";source="1cjbwqk3r91l1pl68jnyk1gl192gfadfqy3jg9a7cmrnpkyihsnv";};
+polyhedra-68770={run="034zv3j4ga0xqkqn504fdwrcbzjh63v8zzfchjwcsbb2qn1x2rix";doc="1a01r85nliax7zll3qz212pkz2yix2xzh15hlbpqgqslh564fkxr";};
+polynom-44832={run="0vn9k3vci15lq0f6r2354ag4bs55jcq6571wvz3k4daym5ka57s1";doc="1cxsw0b5vxy191xy5clf15hb2cpyyqj5ipvgcw9n0hm8ka3g9l1i";source="0qh4w6q9qch3r41ps38yzlv850wcqvf6b0b6vqirk9lq978k387i";};
+polynomial-15878={run="10w1vq7101hnp2ifaa0j9mfccg9y4s3cyms4m63sx54lbpj6rc1r";doc="1vn0i77hzr72xkj6ka4r8n0g0nbz382z729v269x6p5j9qqmiz21";source="0hsb8yyk6ssih7fpc6qiwaf40cwn8xx4jgwqgpmfgkc0x1qkpri2";};
+polytable-55837={run="02gsan2wakxsw1niq6l82ag2rkkasi1nclf5yad2kl6c5654gp47";doc="03k3qz08bfqjyw4ymmibabbaciqz3srd2hll9np7xdphjhf4d2i2";source="1sh5wsb5i1f60sqdych0b3zjcli2h4g46znb0q6n68r4ma7xqixm";};
+poormanlog-63400={run="134qh7xsn7yxa9zx98gpd2hqx3lkd6sqc4rzcandvzi6prsjkip8";doc="0gsd83g26cafmd2alc2acqxcd79zyxkmpyiq2bw3qsasndkyfrl5";};
+postage-55920={run="10s3lcypskq2qmlyqcgldkg4i4a4qbbqn27v6cr6h3j4z93zir3x";doc="1zy7hrrwmdlr3vib8i8vliznri4p8dhfgkz0fx5qgc3ji15ks095";source="0h89r91diqwc1z9wzvbsynazv5k9spg2rfvg39kzb83lipxiqwjf";};
+postcards-21641={run="1glfwj94drccwmmsx6icc9vyzq7w8kvq6flkkbg1bp0rrkjf448j";doc="0cvhgz34mplpjzzdpy2bxblmz6qxxlshadj8in810g3y22v39khl";};
+poster-mac-18305={run="1b1zq9ay8fxqn9593f8n10zlkirw2b0piic71b9fx6s9a7x82w7a";doc="0wc0194ixbrl722a0djm704fmbf49p7vxk5fyv6d3gyznja54fxz";};
+postit-67344={run="032zhdciqwyfng7ll8bpnyl0wndwpm3q4alh7qmsgj978ga97q4s";doc="13j5ygc86v2nkcv5g18j4nacpckciyr641qknpb9mw3i4k39rly4";};
+postnotes-69102={run="0m9izldvlngj81c6nx9ig5civvvxkf9mh3cjj8xh0r70pf3i35yq";doc="1qs6z2rj9k9dmz14r0g1n2iz7hfssr5ysvk7k33y35c6pwc3vvx0";source="137f66097fqzqbzwfwzyqgmdax8z2a835y8ixrna1490zvakbriv";};
+powerdot-59272={run="18ii2qxz7c0wal5xqddyzd2j933lg4z7xglxsxn3vgp8ffq5kr3n";doc="0zpwjmvlckp46ycdldf049s7qvgbpx8cx5zlvzh81qhgdlgximhl";source="1v7pxr134kndndk542f7bs34c5kj85xy0cwvwlhnav89ff2mh5hg";};
+powerdot-fuberlin-52922={run="1gx04y9ysvwzghy38k6izhs9gm1hzssnb5zh8qjjh8v99mk6cqwa";doc="03ci0lcgw777kfmnzas13q75n03z8v2im1wzrd8hpbcwq18mmn2v";};
+powerdot-tuliplab-47963={run="08f25qa5fdacsd8i0bs8y0p3k0zjgja0qp4ak0x3bixz7yivg5nx";doc="04b546i32k1cs6armmnvr8aqbfvs0ysarlsjmsci9xdrz3clm5w5";};
+ppr-prv-15878={run="05xs41xfm5hjpx9dzrngaj824rr8cpwcpvzxsyp1xpzlsv3gk1m4";doc="0rfrxzfm34kn4sgj1dzvdyjx7s7nkyjc785j7pgb609svld6jvyk";source="0miijdgcsn709kpp0zjyqxyxfgk0f798v748brmqshb6mfxbryzn";};
+ppt-slides-68764={run="15x2rzkbc43mh39wrmf8fi2vdn4jxq2cmysl39slq2wj7blblhwa";doc="1lkkvn5giyp6l0mz7q0va9p1rvwikr6b1kw4ry1qlq2jpa4zjhfd";source="1jzvqvy0838h3md6i9j4pk43r7z2h2ignbcap9lg6cmwwkril6bd";};
+pracjourn-61719={run="1idcncspb2dcmrfsr8bf1ar413mc51lliq9xgpv0ybsiv91yd4lj";doc="1hks8p9vksn88daqyn7rnsaza4i05dgfb3ngd5yrvvw0v40s3acj";source="1jbicfqvvyi4nnmpqafzlzlx459v5cyv62wmq67c2692am8a04v8";};
+practicalreports-52312={run="0rv5rsba1xdwcv89fl640yyqqk8c8vf2w647yqz8xawm358la42n";doc="1a7p22pkmb365haizgg3ainxlr2626mg6p9962cy0933hb59llcv";};
+precattl-63967={run="1lq5f5fx93a79q144980balnmnkvcn92gi85df14iyj96c1zpiij";doc="12gmnd4fafkgrffh9smd8grv2bsq1dajajh3s6rqnf2l8xr1wqkx";};
+prelim2e-57000={run="0fws0ssw09yzmzlvkz4sl571yi6yvynnr91s76vsfxk9xrzvkb98";doc="0madkchnll3aymjfk002ika9awnxqwglwa30mrvbdd3rvghqnm53";source="1bbcnrlhvqldvacxms4jclk5khh618wqkkyyib1fz2c93maxmz6g";};
+preprint-30447={run="0qs03jsxjp1cl48lxnvzh7p3pnpxfv8143979pknr06r24g25csd";doc="0zkaw9x3ziwddsv03acbmc02isp74ikpdva2azzsl1nzk0c3qs3d";source="0y0mk3118yrm95bn22hdwn9qay3j7j1ijkr30hpysf9l11z5ck2c";};
+prerex-54512={run="0nri97arzym6z3pjzidlr6svyk1dpr4yrlgqzh2jcsrqhwliifwl";doc="1wcf96nc4zvmydn9d628s9bffq3lnhnllci0v9pci03cs5p1zscz";};
+present-50048={run="0irxkzfg19h5pn0drgl5dlpz34j1p5jpyii05b2xjz4810gnl79h";doc="0c7pmcjhc3p4ilx3fr6pxc4708kl7iw1lds5ngh8mlrwz0hhsd96";};
+pressrelease-35147={run="0hrx80i1nfwyhhda415v67qxkgj6fqbg4bicirdn749bwc0anhar";doc="05spvrh6dfq16z9jlswzqrwnscnywp482cv3bhak4vavbxs8bf35";source="1c7nhvaxs4xlycsx2n6bkyy6rhnzc9ddcnw6cccpgilds546ns4v";};
+prettyref-15878={run="0akbp6wsxn4swk0kwxw27x3lpf5anwk49bb8pvssaj4xy68hyq1h";doc="1wmvvsz7y0idwfki553qkfhg8j7k5h79nlhmaz6ln448x8gym8y8";source="1w9qckaw403a8nyqyx8qyqdn3zfkxzgfzj1hdw5vwi2805bbfy1f";};
+prettytok-66884={run="09lrfza86v4haac2h4pg68vqjdx60h79f3p7my59mwdk67sgbxwj";doc="0n6w3d8fbm7pidh7iga8vmlvx8qvql90k14hahy4q0i2b8dpg2bv";};
+preview-66924={run="021bb1l1k1qpwj35v81s26cw599nk9vmv6q9wk03x9b46ir0mzxc";doc="0rdk8vjlps3q1b91xk2lrfy14wcnfkbdr7zng88wjw6iacp0rgfn";source="0k7nla9s1dd0afmash82izyb4va1wfh3ip4wry2zmgbqjkpjg0bp";};
+prftree-54080={run="1sdb56cvlfrys3f884hg6qpv1nwd6ywfyiq8168bs78g4q2ah4by";doc="137f5nbcm6p428an3v20j5cx5djvdri12ph07czj13877pjy9ccf";};
+principia-66625={run="17vkriwbkwjb2ksxbv9glz11i3dczj8hh4a4mfb3signj2dwyaf8";doc="1d7fbkmjbi6ym7kik631219fa4c1cs80k7f3kzzzsrwkmnhrq6qv";};
+printlen-19847={run="1h6q95dvpldmrfbpdv9v19p34iwq3jzz7vs0z7b6fnijyybjxnpm";doc="08p9zwkgjpkh7ip3i54qjdazgnwq79v15hvz4j4y2dvh294nmrgn";};
+proba-15878={run="15d8n2ik6m5sc4vlp3k2w3h5h8h5s4agijgcnlkmklw3qv172vii";doc="1m2mbbn1fa616dfxkb7x8azqsvczyifygjmbblsyfkd5kl6f8dwp";source="0wbnfa1i6vbpbq2a4yhsvpyifiw1pirz72qasxm1nwmgfg5dndx7";};
+probsoln-44783={run="15zsh16v5rs0baqvy9jwn59d95qj6glvc5h054ldb8sy5nwkl3sk";doc="1l5mq047bpdg21mjdjwfs6ghdh1cb19bf9y5939nlw1wyy1flcfk";source="1lzai2ynjnfinf38jdqb0bdccrh58jbhnwnpm9ikskxpzy7v262d";};
+prociagssymp-63242={run="1vs5xs701gkm4zl6x1qkzbqssffdhg4i3cabqx3s8hp07nw8h7fb";doc="009kqv5n4m5ci39bck5s3h5kwcim5dfjpa6y0xad46syj9mgjgvq";};
+prodint-21893={run="06s9qbfy0rkfby9ff3dylykl81yb3fxpwxrwa8hn1aa2gd9bj2n9";doc="0z8ibz668zjjjypcn0kiy488wzgwzxqackz5z996r3sq5x5zzgh5";};
+productbox-20886={run="1idarj7sxqkqzlnwaqv9f192r228fclilz01fjy444ly765k0cbk";doc="1pzba2ymna70gflrnw6hs35dgkv17qfjs8gh4g6van44wjykhfvg";source="1fnqp2sx0wmyd9130j5zbqw2dk1nkajp4qs46qm47b90wga8pkkj";};
+profcollege-69343={run="0f88f1q817s8r3skm097hp5k5qbjfnfh2lp26c2vc66bpmpkjzi7";doc="0qp55z9d1x30gs8h51rfyzci1hia8jah9mk6s7z1xlxmy9yvawrr";};
+proflabo-63147={run="0rj7x6s9afn5yid3pqd2vz9qn21z6n6m5cahq92ygn1ix5xbw3dg";doc="0z56g41bw3lwi32z0imja6a4nls406ck3ic4pibyi5ajcb8317w4";};
+proflycee-69386={run="0apwy75hr9b4kirl2f94wz9fxlm6pvndn8ppi88mdplfwhykhvs2";doc="1qwpl2vgi6sxd4p9bqyqag342zzacfvq59nwbd28hcnnyqrr9az1";};
+profmaquette-69287={run="1q10iqq390lkb10xz5x8fjcxic9x15d70k472s9z8nwqw2sdg540";doc="1xhajdlhh24fzdnhq9qqi3r01s5icdii3vgxy6wb0dx2ndkw8k5b";};
+profsio-69125={run="1gj53aqxmmy2h2xxg2hr53baxckwgm5r116iiz7mhlfpd413s77f";doc="1pk0ihk58s346xqfmi7xygismr07pzb4rsx4z2dbras2cwq8r0z5";};
+program-44214={run="0ay2z8ga10zr5p453ss0w5qqqyknsgqd2hifa7lq0gih4rml14pa";doc="102c9fir3hn0m7y3lkj9j0vwf0srbv6inq87lcxwfkvc7yw0rr2m";};
+progress-19519={run="0wgkyvyf24666kg79h7wq1piq6yq2nkw6k5g0ydk3y4gwzzkfhlz";doc="0r303dr6yf1r5kk38c1njjra7vgvp9qrblxj7zd8fw1vlq2sc7fg";};
+progressbar-33822={run="1d0d6dy9ssiij19s259d2ns2k5v2ccc45anhz1qm7iqli12ij0m3";doc="0bxsgvql8hqv4qw1pv18vdxcshphdpbb29mqp3pbbsd4crp4qb5z";};
+projlib-68784={run="1hp39wzk117dc0f9xjbm4hhirn9myi81pzzrppc30vzjsy6c899y";doc="1ics502bv7k4yp1is445gid0av88n0y2d9rqi5sw4plp23hxa4k0";source="16zz56y218gan7x8gmrhd5bfcn44zlxaajyvxx2w7id0ii3kxb6w";};
+proof-at-the-end-64188={run="1bl6s055slsn8y7cvg7jagbaycfm79rfic1pl25v93bpxhrx45gi";doc="0bqjhqcvrhmh0ay7f59shnyvn815pqjzkph067yay9l5jr1s9xcg";source="0x04lrwhhbnm511rbbccmf3p0wzp7h1rxd1kcf8xb03pdhvq1adz";};
+proofread-61719={run="0gnn7zkzrszglcqcwz8c4i13apildg7s93rkp1z3h5m2gr9w9v42";doc="05g3k77vczdqk19gigs9b6w8rccvcr0d382ysqn0yg6cgd70bi43";source="1mggrm4cfji364ylra3ffdhwbx6phcxwfzw2mwls00msk7jdzpsg";};
+prooftrees-67399={run="0sk49q7vavqlcn6rgpzzjjwldss4rlqkvds78jyfm79ky9vdgiz0";doc="0jajcbq3mv8lmixygc7i4nhwiywq5qp9w8hbiqxi16kpqql37n52";};
+properties-15878={run="1pxl101mc318ivzszyycwb79rqghx4x8xr9fvq216ambs7gq4sji";doc="1arkdafwmhg0hm11as4mb75pjz2mnah1l5msy5xnlk4asbwfc4sb";};
+proposal-40538={run="1y5i7xl1z706fcv82s5dyx1ksfvp9dq2m0shwy3an2r94qszcwmg";doc="1haa55hhz11j9m3lxp84yzlpyalrc3hlb7wxvmngqhn2j2mi0b3c";source="1n3z0rvhnc76grih3jy5h5ax7rffxjwmafd92fnp10jinr9riapx";};
+prosper-33033={run="1vsjb2r4xnlwwdjbnkpvl42c86rkzs2imsq762n2w6x41i591ics";doc="1f5w1vb4d7z990mz6iicjakqhszcwirphwv966c66j2jc3yvalfn";};
+protex-41633={run="0i3dvmvyxfwjrp6fy5bl1kx2c9vapj19vs97jg3rkfrkdbk0mhdc";doc="0wpkhhp2asi3761nvl5gp53j3vr4iakfy4rhciv5l1z4gw7d4j29";};
+protocol-25562={run="0kv4ndgdfmwah88sspp4maca6z1l39fg41bf803kapp34nfxqggr";doc="0mz77awxgv9jk97xnl16rs34b1zdqldfi3m2qgdi9y3synrn25x7";source="0q0vxm79xpxkgr7yf12mqkpj69b75smyr9kl5jw2c1j1wqxzxh16";};
+prtec-51919={run="09izjx2g6gyckmgzrvg9bzlwz1yvwr0nc40s6wsbb898wa6cswxx";doc="1cv2knhl8xrsyzcywypr6dqgdxqss0r9mxl6wv4clpzpsyvmfzbg";};
+przechlewski-book-23552={run="0qn5agid0s57a8bdlha8y9m99xpcvlqknq473r6995qkdsrrdxl6";doc="1bp9yqs9y28nbzwb183yf8h5862pm3iw1jsi8c6qzhsrcwr2b2jn";};
+ps2eps-62856={run="08zr0qc8p22wr40vgwd9idp75x6cwbb3acnqcqafh73a66vdvbzn";doc="1jmygd0cbja55sdfynfqr73f54lg3vkmc9hylyw0zj1sdw20wmz5";};
+ps2pk-66186={doc="14xq9x5rf15ibzr41cm5rm4v3rpmj50rfsqp4zzvyhmpmyw4dsx3";};
+psbao-55013={run="0il4qhmc00ny1syfhid0mvmcz42sqp58zi8gf5hm6p3dsf5jy0z9";doc="0zrmprbhrbj3m0q0swlnk581ka3mws13dsha60izi7bfqxc6crqc";};
+pseudo-66638={run="0h59v2akfr00vax3hr90ph8p7znbi0n0lnzl99f65pg3k46xpgg6";doc="165i1gg6pfg1bcwxqlg2nx2crn8vblnqm0zxb9kl6jd820wjd9ix";};
+pseudocode-54080={run="0x2p2bq7cqajrn8s03dgikxg2nb94hk7mzmi7l911xdgdprlg6qb";doc="1qzvdp0qmmlljahg6hqn7c67sszvjvp3v8zvg7nwam58by39l3k1";};
+psfrag-15878={run="0m5dlnjf7gmikg4nyxzzfz999gphkg41qm2sksq9ly2rspbdcs8s";doc="135c7sr4i8617vwr4nnz8vcy5qv8icr0r0cmqsj6r1hpkm67zqhk";source="0d68rzpxax5n0da8sg1nh50li7rc0m7syz0kvpsgzqbdp1clbcjn";};
+psfrag-italian-15878={doc="0ssx8rw7fwln02zzscywivnhizgrb6w05awscvv9gf9n1qj6avsf";};
+psfragx-26243={run="1kb769ai57d7zg3bp0r0mspz0a2l87qiyg04a87iqk7vxrwv0bd7";doc="110n7a7jgfmzps5ng4gibxigmm3dpkqlz6jpbnphrw1pnlskwjsv";source="180yrq0rnsb9cd8j70jym06k543q211fzzswzg0dq8fzn3hk2wwh";};
+psgo-15878={run="18h614dasdg19jnwwl5swih2dxp4wis66fkscq8jjmpvjnckpck2";doc="0naza2kxcgm9wdcyibs36qnwwgwpsbj2m9qkk3l9d54kml3wiznp";};
+psizzl-15878={run="0pzbip08246id09mm0chi0gjjgdc7yzj0bd7q8qh5yfdbhjn8yc8";doc="03slfkyrb0pil00n55n6yp5vxxxl8adjbxxmg1c2zl261lci107v";source="1h2hrjxc3ck75cigh82rmi3558dmpliwxzzsaabb178bh76m2n3a";};
+pslatex-67469={run="1wfk27qb4x8aafph0lgnkq3bkz5fy4cmaiivd924mk92l1wfg6dp";source="11gykawqw4fi453s1bp2r0pfm0az2k8gr3rcrygzfqqzgrhxvi8f";};
+psnfss-54694={run="0ng5pkk6m2l8yqd58wggbakbs4hp4400r4ihyi9akf8j4kmq2s5y";doc="0vfv9x1qsivwi6c6hi23vw0jcjz9dclx0vxnifslyzlrh7592dzc";source="0cqpzra8jwdn9d6w4mhmfrfw2zia2nbpyxjfrcz8m1disd10lhsf";};
+pspicture-15878={run="0i41lg0nw9xya0gfiwjd3xgbk0w723g90gnsvnfg764s2dl371b8";doc="1p27zx0svlcm4p12xjq35g2lgj1j485c3x363gciqb4aswmlsl65";source="1f8lhyhfcywn5y78354r37bgalyq57bm1fill5vzny3l7cyqxxn4";};
+pst-2dplot-15878={run="00y967mflrd0y38mqyv8r7h489jrl38rgaiq871wf9k3cbmf0f1g";doc="0j1c2kxc63nf33gi1f146pa6hw7fm5x9h4yc30dqg8hsd2v0bni6";};
+pst-3d-17257={run="0mh6xbrvwxx7nxp4yqm71hhpqjb41g4kinxkj2vmspw9wrwclbj4";doc="1dp9l6vwhb306j998hydb07c6ig10ibn7h0wwiaisgabn0s69xqh";source="0m9lvgmjzzc2lmp63vnly30j9886qabgbhqwpbbyl035cy6k684n";};
+pst-3dplot-68727={run="0pdzz4gqvq0h0d13f6464ldz78x4gzn24bxb76lcjj73xpjsxir4";doc="0agrpqkm3zs497b4rrday4cbxy0l1l3rqpiindx7v57fzqh0i34w";};
+pst-abspos-15878={run="0pjh72cjpim4v0ri92b7nbjdmilpfa7d49vsvhfqddq68k02m0yc";doc="1nwjynxlpxgqld6slhhrzlsalp9296nbnj2kzr6a9c9b4sjxxbp1";source="1p9i5bg4jx8s6bb6ilbaa702l2mn911g09pjdmk6mnb405d908fy";};
+pst-am-19591={run="1vk1dpvm5bcnxc6k7kpqq5xb6a227bwhlrwd6mdbdapk58jh876f";doc="10acmb6wm7z9bpgh76hlsjks9v2rzp0qqbcklrjx3iw0jqdk53vf";source="06xvv8fh818ldzqccf911hw4wr6nyzxdmghynlsg4hjn54ff3x0l";};
+pst-antiprism-46643={run="1b8yxfyc4cac5992a3cc4xkj0ip35z63rqxdw2jx748qs7c3gyxf";doc="0d4v65fsk28hyiljr6fpk6yw7sac7n9jmx4bmdfgpkagspb7ygpf";};
+pst-arrow-61069={run="1x1b083p4k1qz178zr06rfjirn7l2sh37qxyjd8n5z849cp17rqc";doc="0643rfi4b4jhmzs0zy6pkrf36m9zc4dilp33mx3lis2yrra3if9d";};
+pst-asr-22138={run="0sk8hchv1p7vrpyjslpc45mhjg7l2r66mlmmvhc0s89q1khm08rf";doc="1a6d4g9gqjslnfr8fp0dpw72pp7c14qzq5l5i80kv36w5axks7pd";};
+pst-bar-64331={run="0w3h9xpikkl4ilvgp398m78f7k5b0j0w8z1zsmv57mkwf8fisk6x";doc="0v7cqj05haz0gfjrvy0ppcfphwizxavznbqakkr7b51krh2c9grv";};
+pst-barcode-64182={run="0lmdhzcfqg3cxjpj0f80r8dfd2qp0nq125rgxf5d1rjp1xl82psc";doc="1mm04sndnrqcm1z5axhydyfvnd2i49hz55gnrs17v022y2vfwwml";};
+pst-bezier-41981={run="13w3hqzfim53nrh5bn82fb4gxx32gfayiaqjk5dx49xc4l3rvq6z";doc="0xjs89hfkf7ak8izf59sl5gh5lawv04nxlajn7sskh187qwbqkgw";};
+pst-blur-15878={run="09fl784hqyvbvs2w9ymd4rda1dfykc1l8g5dpac00da1788ypzim";doc="1x881z1z4ra5bcms1yn2p7svs82h5ckwwvlw30jfdwxp4bgs5y28";source="17f9k4vqqk6mrh3dny6qfhb6b45g6sg7w50i3c7d9k0djz2wi5jk";};
+pst-bspline-40685={run="05ys29amaikrm31avlz0kcra9j48nwvqwr5fwl75ljydjf6drdaw";doc="1czq6932fmx76c82ylrbh92qs2nnipll8piah0c7f35xl9y5xgls";};
+pst-calculate-49817={run="1knbqbysc6f3csy1y2vf413cw2jpf722l0hhs20yzm8mi8x279yw";doc="1jyxfqc18whihn8jkp041bvpp1b4f7jwi2zdj8abnmx45d16i6jc";};
+pst-calendar-60480={run="13f9hgbldy8cn7si1p52lcv58d6c8slsly5k6ykm4c7vh3461ckk";doc="0zly3qhwv20da2g3asbpmgjps7zjidd3hclq6znpyh58a5cdbiyf";};
+pst-cie-60959={run="0rqn44hmz4gdi0n1pcb4gq7yv1mg9r8gzfqbz8za76jpsbkybi28";doc="19fib4p6zcgrkbml49vwd833lxj1a0brw9wabqlsj0jnh9g5gk78";};
+pst-circ-60464={run="12hsni412nfjk0b5blbi7slc4pa0c1lnkkbrdhkd84yqm12gwf0s";doc="1p21a1qwn8zhx8nqzr2brxq53xh2scmr7gb8jcdfjgw8rx998s5x";};
+pst-coil-62977={run="019hda59xplvwvc2jrk6zjlvx26y2m8l7j42sr8w6ydgs49y1m7x";doc="1rlp43hi4fs3gkfaic8r49774g7rgg97mkyxzqmi8qak8fz1v3v8";};
+pst-contourplot-48230={run="1cav44hw38rnyi1yjj5z0yqw2ilbrq328xrj4fdipkfd0km0bf1i";doc="15p3znj8z0s3d336ib264c3w0m200igsq1aq2bbcj92v43rzffrz";};
+pst-cox-15878={run="07662sjbviwbplb7mjvvb18v8lf67v997hn78q6gz262z41daf3n";doc="0iwvk4db5girx2fn6fhgx6irx288jw2jnd28j4zh8x3f5hf3xfg9";};
+pst-dart-60476={run="0q1ck6pz7f84mcv6hrjh82h1hpy7f8l08810iwmp9551djf4pz7z";doc="1ccwpmicgsv3lpg2kgbgmvy0mwyjcn6gvwrhmzlxhabxxaafrvp6";};
+pst-dbicons-17556={run="1mq523ngyxlds1jaq1cnwkp6hynlz72imc1sh1f2fch0v91a3kc1";doc="0j4p340dxlyj53s18xqp81cqwy6awpnw6k4q68yk4zx915v24l0p";source="1c071qx2ira6hd9mkh07k4kaqhy0a3cbhr6k1b4wkmlfswjynppd";};
+pst-diffraction-62977={run="0ccy05jagh7kpra07bai1j8drwn2701qdfgki925mcifsa74r3y4";doc="12xx19vaygrby5475la4nzygcbf6cf1mq3g14sxyhg997x9q4ha9";source="0wf4kpdn7vyaf9cy7dq6qf3lq37fgkcg91njfbqy9n9v8k87fv1x";};
+pst-electricfield-29803={run="0kk0jjlcfyvz5dws08wnm3qlhvgifrby88idssjhgvqgg8zpz3yq";doc="0zx7x15p6vxj1f9v8id7ba49878xjmbqzh762v1sy1bxygj9yb21";source="0n1rxq6jx331b0qlnpjy7mh84m9vdlrs8ckr2b3slwcwp63cs0sz";};
+pst-eps-15878={run="14grlhaxxhwmpw3xi3xv7n3bq3zx3qwd9rh707wfgz87iaj7jzvw";doc="0dz6543q5g4wsqcwcwablr7w7w5l6dk19m9qpgrhb1w8sg7hgc31";source="1cn9yl1prwzjvxwgyzs5jdywyirg9hy8g76cnl62gkk9ndmcpryq";};
+pst-eucl-66924={run="0fr742cx9fcllwzmh4w9690h2yq2ch6zkf8m39iksdsfx82x6sah";doc="0jxn56qsma852nvb3m9qipxyhl39r3wslwwbiggax0jwqzrnbbia";};
+pst-eucl-translation-bg-19296={doc="06c9ajnfl01sl81z5r8a5lzmaygq9rdmgym2v40y7xp7z033gwwv";};
+pst-exa-45289={run="1s94fbqpgv58zks5jfq3dbzhpw4p3gchhm32498m6bsp52kzzl7w";doc="1m7gwxbhnii3s7aqi8v09sq49010yasx6k4p7bx43rhir08v1zjv";};
+pst-feyn-48781={run="0qi5zll29rfc7jkmz4hs0y22if5qjn13whaf7a62rdfvbdp1l87x";doc="184d371rhqn549a9vgvdh92ikzphmdsbskny0dnh0pcgxzwdabzz";};
+pst-fill-60671={run="0h748amhh9mhpg1m3l5maq75k22jhk2xnml0ncm2dl2fay06mlin";doc="0p3c86vmlx8h504vb603yg321dcf1lwfyfvlc7qmlzmh1c2flqvl";};
+pst-fit-45109={run="1sqdysxpzdlaph42725hvdgy672mzdmhz7scizb0jr5wnq3rn9x6";doc="0lvvy353s1py998a7vr01pgvkl29qp60w2gyrxxwjig7j7ihn5lw";};
+pst-flags-65501={run="0p89whiwccbsx15jv7krji6fz8br7d4k3ag788dv2cyjids8v25g";doc="082hffz14vjvrz3pgc6pb4xj8ljyj1igvwlk9q1gw48sd0rgrib0";};
+pst-fr3d-15878={run="1m0zz9bqdqw1hzwp06s4hma68wwm5mmswrp9jj3xc9r5xjyq7fk8";doc="1gpijw1iv0pg30kws1vclsy5yjd7rk0j3qspcjlmkj1bhq3fjrgh";source="1zvssd11fg4hf53rz4c6imsgi77kfcc7l9hh0ni8jnznlgmdjkf9";};
+pst-fractal-64714={run="142i9wf39v31wzvalh41v5bjf1l91x6kib1rpk6fqyhfxx44ibn0";doc="0hkvmraf88w54kgqax7q6lg9zmcliqczyrw4prlivgjkmshy64nx";};
+pst-fun-17909={run="1r1zvnyg5m16fifi5xbzn5iypr4n4d9vbnqi42h6a4m4y1wb3qdh";doc="1gb9rz3kz13xzflr7r00dalqri10lbn830v3xcpmb4n29a2bf0qv";source="07kpm9irvp7dn0hd1wh08p7lfbgn78jj63yqzzxn1jb4wrb4qkx3";};
+pst-func-66845={run="05c7166sms46md8nzkm9gzp5s373vqgpkr7c146ywxanix66b0cb";doc="0wlikp18sc8lq2jn7zxh619r2d54p425a5k0cgm669apz7c0vws2";};
+pst-gantt-35832={run="1hkrmdwg7kc4xiif4fvhjwbj2ryxlrbyqb7h2n3rk2jmmky4hv7p";doc="1fqkwzsliv1mg3lyidgcsy652l5d2qy7x1rjix9swvk4vblx4fjs";};
+pst-geo-60387={run="09br33z2vdr2dlsfyqf8rya3qj7bila8r2xwqbc6g96yhn1c3r19";doc="1xxyazg51s4nj8hz8adzv3lvpr2dc1ji0sfm46xr763srwxpjjd8";};
+pst-geometrictools-61430={run="0i80r2n3vsnf4sczqkh9ri4dfb7dfxg9jcyhrrx2az552q1mr33h";doc="1ff7302f5ik2a367c81hgk3d88kkapm1jp5nd2mlybywa2nj5s0f";};
+pst-gr3d-15878={run="10jn2wdc908z2imnpcv03ffm83228fam0cqgmgmcss1774r2nc18";doc="0985ydi7jfsvlynjs5ddjhyhbh11nficfphy6qnvbv0jj367rabq";source="1z981d54aclpbq9ggy28qgnsspgwkavalm0j68pj69jxbcfxrpby";};
+pst-grad-15878={run="0bzq77vj333dsgilfw9k7lslhpmk67id6p1z14aw7nfrhyc80082";doc="03v585i28dc65xrydsp5jj9nd6kfpmhrjkwm3w89dv0p32xyzh11";};
+pst-graphicx-21717={run="1d7zvrnhch7vj1l9xscg4ynj5alml7pb38zwqns403wvcdnmb1an";doc="1mly0nr5yc5rdghy04sarhrwlxiwnndk644s4czf862n92ammh5d";};
+pst-hsb-66739={run="0x0yzrsp6pwr5yk4s9rjkdgmxs5g93gmli5k50g8lwfgcz1kyfky";doc="13z67asnaj83yzn6qa9c6q4313klc1aln84hwsb8qjf3qg6w2556";};
+pst-infixplot-15878={run="133806cabfd6c44b0sdhchcmqjqswy2q2j2ry5kr78dzdna40y23";doc="1cd3i5ishy7pawv3ah6486kb63351p1g2d7iwx9zh5vwywi1ymqm";};
+pst-intersect-33210={run="1wbipiav79g5cal64bny5ba872rr4848i32w64bhrl7awsddyq0f";doc="1y45r9pdddh4pbb3bfp6mzss7whapf4bv7zbkrx7wmyjaal73s5y";source="09pbicmzmx0nraf5s8b19grra8p2vvdl903kc582dwn7xvqrk3rn";};
+pst-jtree-20946={run="0082prldszninnbksndf6y5mklvp4zgdyk31v78axp5fl3mq437n";doc="1hgy8iavrhzw6w8r0avf3h9x52fdl3lqshf6mxqpffaq1b0s6xqc";};
+pst-knot-16033={run="1m1bzq66jan3miyp6r9j1pkk7mim9xjn28ldd1nni06v65hdcz48";doc="0gfxyryyf75p89y2l1ar5yfy5c6qawbz503bnpnw7n575rhsz36d";};
+pst-labo-67147={run="0wyvxb8xs4qvibgz2nz9fayp9fv6r2jlqxrr7svr43gnzjdsq28m";doc="1ayqgrs4y8cpws9bla26s7b82xg04p4f1y86p1gcl5f6816whq4g";};
+pst-layout-29803={run="0199jrw7b58x6qby4k48n8sd2rffxlkhrp334q2dmalqsi701l89";doc="1346ww24d9c64h03zgz7m7xdsnvkjy27cq4nbjn56bqcrl88982d";};
+pst-lens-15878={run="0220idbrzzslcmlyxxzj52mj9iai0p2ya10ykgkssyd8nfbl2jin";doc="02hbbhdnaz6cc5zkp2zmm92kbk0ppzwljivr1grx4g0jqqw8c2h4";source="1pwn8wx5w65xdz46qf5mzjkg74q296bkmzwsxw2aml406iksy890";};
+pst-light3d-15878={run="0glqibq1h8ynfkgn9r2p0yvgplydsigg5chj5gl2vq2hsb38sqg3";doc="1njiml3v4vb7jxpnai69b08pdikasjk30g3xp31vixqrzr56i4am";source="0rrgfxsbvfbyc1g1xsakmiiy7f8skmv2bkgq6vbji9y1f5s3b4zl";};
+pst-lsystem-49556={run="02m2g6kjs8fxifsdxld6ivjxch7vj137828xpax8s7abr9f4dyiq";doc="1apcp1ms40xhypxr4fq6xrh91ff15gplzllh3zs5b1w153xq3w8l";};
+pst-magneticfield-63821={run="01as8f6dm5yy7bqfm1yw0dm1w0jx74vhpbh4kp55br6f48fs480q";doc="1mc60dryqsmz2i4jspixg7m6rf97ai2zr4f59wf59140wlca7c2k";};
+pst-marble-50925={run="0d7xlygws5f1hipyc2ba7spr2y8h3rprigbrryny3mw2ycdh1yqv";doc="18jzc9fpjcrhya1knqsxxmaix8sglfbcsiszxc949pf4zdpm50ym";};
+pst-math-67535={run="070vvvcynfaa7mmfmqkkn7va3jvpmwxphm2w8j4k74indii282ry";doc="1w5rhcaggrjn9hmkx4h2h31470fpj8d3v3gk4w8ph35zhds5vl9c";};
+pst-mirror-60506={run="06qvndipn0i69b5jk8fxhp465sqjz79vlwr0j01ria3m91vygyqc";doc="0bfzs55sj49y3lznll477bag80yf06pcv0hh0xfg3zzvhmpcpiky";};
+pst-moire-60411={run="16zhb6gqrpdn56cggm80q67yp175dkbvyj5iy6zr5bxwj6qj8px3";doc="05g9hsxfcm5yl6afrlpba7hc7hd1kr0k00m9zj0jcqp1ggsqnb6a";};
+pst-node-61838={run="0a8bijpghvf5zx9zsd5m4bcwzl526f4r9vqa4dbqdxww0zxwk6gr";doc="0w0wr8xc237qjsz14yf4aq56d6jm8a4gmzp790rsphqaavab677a";};
+pst-ob3d-54514={run="0pglxl2prdi347qqrjpyk6hr3arhfc4rrcz1mnyz7q5jyamlskp5";doc="0s0jyb1s21pkmdnz4wdz793lbvidl9qdfh9cfqa0bwx9mmjvhpnb";source="0v9kih4gxk7aqwynihipm1595iswwkv5y6qj262aikhr6bz8v0sa";};
+pst-ode-69296={run="1ga14sfia3w8pr8shxwf5231l0s2wd91yzn8lqvb6k9i5g5qcc5r";doc="15pyk4ahpccaxkwrg2kygnlsxryw7x9y74d0hgq234618jdc9fib";};
+pst-optexp-62977={run="194g5i604i33bvnprfyjab50smag094lv4gx2skd2h16zfzmg9lg";doc="1dgcb3fax1n15hz15fr0pzihyn3yyzvidw6nacysc4qxq2l6b56d";source="1cw69vk791rr15dc3z6ivv5lbcziab0bwiar8cr767fpm0w4rrfb";};
+pst-optic-67052={run="0f3ml0lw1yl9c9hvvx648m0psq9xd912z325mj2a5vqih5vxssyz";doc="1wznc3x2cmysbj67dc6pd8rxjp9hdh7gpkjxmq1vdc2n85vgznv9";};
+pst-osci-68781={run="1frp9pmwngklkwyicr04aph29ljjpgcgagnk5r6dxb0c8bp3209k";doc="1669300lfawksl65nx7x7g3kzzhf8qpj08isxcba40ac6lwkfkp8";};
+pst-ovl-54963={run="0p4yyrvagfjamwd1f81qyfhz6wwjpqi6nfazyl8ml1fd7qjv1g18";doc="0pqh9sz0l0j0bzvsva6kba6gm7cssy36i17px2zrr3lc9k6yajf4";};
+pst-pad-15878={run="09z2dkb2h8hmf46b0h1b235d1yjv42dgx55pj5s4dbpxzgam7ljz";doc="1c597riwdggb0fli4w4ay2iwkqhaiwxy3mcl9diz8lijy0h4fpk8";source="0b2w0pgp8njbndx6x3hq0rwxsr1gwf848l6gk3vrkksq419j2506";};
+pst-pdf-56622={run="1klgwqpc3m5k5ciiqb070h48r9mp4hmssp4s82k79n6kq45ar33m";doc="06b1kpazsfn7gv2npfrnrmxlky5mhw6dfyzip2lwd243m08jdagq";source="04b0kpxmzi42116pxmkdjl87bm6j22wr62w7bka9qww2ifj18na8";};
+pst-pdgr-45875={run="0k7i88srnysbkk62mr3w0fgv3dz8hlz96nlxbrfm4arhxs6ah2pb";doc="08lj4bd028bzwi25j21h98ma5zw72hiarpcn0nbxwhbbqz865q2m";source="0q2cadndr14x2sjjdsc07xizrb9cv8i5q8w14lrwr4xkamagav19";};
+pst-perspective-39585={run="0g88w41dpz9607g286ahba11af2a1x9zya4saxhjd75j9il0h4k7";doc="04gim8i8fmy3ysyl1y237cn0xfdsiii2pwkl6y79abz1gscn0pfj";};
+pst-platon-16538={run="1crl7q5r89vl99jj5f6ki8vnz5f5i15x631ra811033xmi32z4yh";doc="08d0g6mwkqrc81g5dhk016bi2dvr3jz389f32kx89w6n11iw5pqr";source="1c4pmwrfk9yxg8jshhy5y4bwvlwwm6xn39lgr3xdvsl9bn5pfz2b";};
+pst-plot-65346={run="1xq4l3psjh3vb5ilhjwrwyjil0i4bdy4pc0k0kqkpbab76p9i0wi";doc="1h016y4gfy9kpd33ahwlqvi93c3z5gsxg1b2jayiazzd6fi376gb";};
+pst-poker-65818={run="1h7piafybws9clj0gn4cbsm5z9gxcmcv07xswx1njfkl319yj0hi";doc="05gbabajcli6p3k5m4hkq2dxl6lf8wij96dczxalisrr3p9ddkhr";};
+pst-poly-35062={run="168ydw08wgqsy642w7nf8nyzlmxccpcbdvyc5h8vqc6i8xwrlzyz";doc="0ls2nf4h4p1dc00mmplc73bv5vanddvxkmxv5kix9b471xx0y696";};
+pst-pulley-62977={run="12w7rcb0z564xlf17258dx1q290i3p79bv4vhqpq5pp3wxf46c5p";doc="1x3c2n8js6kvnmdrhnm5ng6amkwxmdlbnz4wsh807q5agqmq8q6k";};
+pst-qtree-15878={run="1bv3xxysk2jw5n41i0c0zm2kx2r6qpyfqmpaf6dqzm08rn7ax1lw";doc="1kkcrdm930lr128ffzcqd3qvh11mrikiar3kqszzscpyfkhi8vc1";};
+pst-rputover-44724={run="0ahx2fjnwgamdb4r6v6q3bg72xpgvpfan3ivvbi0gvvnah98l4zv";doc="18gaman0znqzxdqw0r2czb30l18wh5740skvsclvn28b5wfa0i2k";};
+pst-rubans-23464={run="09lmil6ishwjaybj5nqabxm20xwx8nw1l9dj9bbjxg42h1wz26mi";doc="0l6w0hssg5qmi93inh3n7wk7hps44l8w5xvj4x4rblh3fdlrrb26";source="0phh3kkxrr74y6fim8ak28sdxd5fn11c1nyn3pksd7ddq0qy5gva";};
+pst-shell-56070={run="1j97kcw8w52q1ispkpbwblxza7q8v25288pzxkyc4yf7802a3zj1";doc="1i5dbbnzadhc47mg7bdv6vas7ynkx2c4qpz0khcvrz393kszjkdm";source="0rc6j6cy5kwh9sq2gp5scxpb58ycjqdycnmnqpy67xha62fnhcsp";};
+pst-sigsys-21667={run="1v3yz2vhazp04xjd0bp4pyyiz0v4yq7hbr9mq0m2s8pg3hisfbwr";doc="08m72w1jxrafcbr19fp0yvii9aama1rfl9czys6gr3sii9ks6qxa";};
+pst-slpe-24391={run="18f99ravk128r2cg84yxv3cjx2df8fgzq1f054z5g5ig1s5ginws";doc="0g8dhw27n2vf73289y8rah5xakb60cy23993vl3ygz1cgrn356i5";source="1mxninpgycpbakvmc9qc6032mncz890k5ggsfm507jzyfxrdp5lg";};
+pst-solarsystem-45097={run="0n6w3fyggf7favnr90239b6dp2j7q31qi5yjilxdw35s001m1ghj";doc="1bm77lqaqbjnhwv6fra0g05ij4l9vj9hh7gs3sljgdmwy4syqq24";};
+pst-solides3d-68786={run="0miw5r3sp58x5q9rdcaa2qp7kvsv6f8pnkjklljm8gy171ddvvav";doc="09ymz8vb5hinmcnnc8x92qkaq6zjhy3gyj0m5rgljrs15ks38vx4";};
+pst-soroban-15878={run="0fygllzq9gp37nkffgk3am2vygl5d5dwyr4avf1gvh0s698jj8by";doc="16a1w9ci7ivqf30hvr23fv6j6clqjb4y7nmjgcbfz20xzxk3aa1c";source="1h6srvvl3s1prswlj608y7pj5l4zzn13yqrhdv41956ikd1wbb14";};
+pst-spectra-15878={run="0nd87bnxf8giakadg457p10idbnn0m982l0pgyx23495qfxywax5";doc="1y40d08nwnpkmrm0jdj69drpip1gwkd8n9hqmairl1wccs6r6dhk";};
+pst-spinner-66115={run="1nkmvjy19cpxqs3ii3djmrr6yj8naf54a97jbprs37afml3zql2d";doc="1sff7bhnxjj7cmixl9qbfvglya79187gx28swxr7mby9ybf941j0";};
+pst-stru-38613={run="16i39r6vivs0z1l5l48c3vky9bac22n5k7gddfj7vlllfg6llgzs";doc="1cl5sq39pfvwhww488kq0cgnlihf63jkhqdd4rciaa8vf55mc6wm";};
+pst-support-15878={doc="1470n03zanpw35dnfzyjqm7d5lgddrimypz28x0zsk9nqpamnqnv";};
+pst-text-49542={run="1s0dqi2mpzlk8069piv4z7jg370navi4r5z8aysy9vx8n0vm27zf";doc="0ia6h49lfi9394sfr29wmafbhvgdm5zj7q13zll4d1agakn48j27";};
+pst-thick-16369={run="107cprs3hg9jmkdq00w9wc6bbkqmrdi91zm7bjhih461jmqax88c";doc="1irf2v4yg0w5v40m2przdcbhr51qjcrbj0s0i53rq4w4v3gl03hm";source="1qwxccyqzhl6mikl6jp9s2asz1aj96l86yq9s8nfacjg14vk5n4c";};
+pst-tools-60621={run="1ip2cm5wa8m9b7mb44lphkdjbqascchw8c1s7yxd5zc81xnapjwk";doc="1c5z1jxs720aczn7mjn9lz8kw37k32qrngaa9d8338ls2q47g88p";};
+pst-tree-60421={run="1hvjna16bncizkja6hac8q4snirlrkm0c5ybi9c8b8zjb4i6gynd";doc="1fp2wx2xwhrmimq5axmpswnw62f39q4rqqi8zxklhkr75ccnxrfp";};
+pst-turtle-52261={run="1b5948sqlh4yaf4j3id2zq9r43v6s3azhbjkww7vmxc53rfcqfpa";doc="1wfka7rwysdd4pyb4nhp1fy4f1lnqg32l6rjmqfd17fzpkmb3035";};
+pst-tvz-23451={run="0ly1mqlv7fx1xjivacx5dwwb1fjhqfplps9n0wzypvbwyd4nbaia";doc="18pcvx7rlvad0a6hp0q8sq5pf1y1rfydyqd11bqn94d56nqw6api";source="00i2akla1ibrk6hc0rby5q9n3ji4zlrs52d77y9iyazj0v3fab5i";};
+pst-uml-15878={run="06bll6q06szfsaib7jf09915qvz0rzf0gp5c9crwb139gbpzvxwq";doc="1c0pna78alfhi8i7bqr9zwcxx7sksi3idin5wyqa9dr95a2pwd80";source="0q5x7m84qdv8sy7x2nqfbhwp1lryr5vkji4hf74a0ialc617nfvd";};
+pst-vectorian-60488={run="0q4yzrn6rk488awv2g7qlba08w6807p12dlk1pydp42sba3a3sll";doc="0wws88bwd9zmlhqv4xw6v31cl5dj64hzvqgw944gpjcgxpz19215";};
+pst-vehicle-61438={run="0a8809rs553n79zvpi8vcg92lly643n1ss53pfkvk2jki5nszzwl";doc="0adwpcxnmn8nabc2nsw1d5rj6p0rxhdidcpyhmkdw0rxf17604s2";};
+pst-venn-49316={run="1i9frqc6b4wg3pb0ks4v0xxsfzs348ddhncr31mhfs39nbj6029d";doc="1y2pz45hlm2gd1lvj8p40ldnl04pzccgbsa3asnbpcifkx3gj4s7";};
+pst-vowel-25228={run="1p1adlrg62jsqzkjkl8avb79w26kkd5jdssmkcsd65dg5qfa9x50";doc="0wyl0mvx2d0zd8q0sdmyrqgr72i2igv0669ajv0gz8miv04vr41k";};
+pst2pdf-56172={run="1rm0frzi52i3irfy5703kw38d3f1grby27nryjpb4ziiw6n5yizb";doc="1sll10kps82b47npv2g2r1l3kkm5y75mp2p2pzqsnxxivgl5kp2l";};
+pstool-46393={run="1g8pmd13f73v8bsrcpf4a6hh00pww6isz00gj8cxnj0xnd4p9xwf";doc="0vwxrcm29w8fiw4mmr5jcxrlc122k4s1wg1sqvmzqypwpvyls59c";};
+pstricks-68767={run="07gapdjvqfqj9ca54kqy3wla8pnmnrys4l04bjawg60574qslq5l";doc="04732mndj1lhkpb4k17i8h3mjc8iphv2dayzqrb9ykw54gsb51p4";};
+pstricks-add-66887={run="1h1y2r0y3vypygcczkqi8xpxc0mdcgqm1xfscspqw9ifndx0rwrm";doc="0bd3rwcdmxnazq86c6wwbjkajzd75knja1fc7s3svhn0hxy4jcza";};
+pstricks_calcnotes-34363={doc="00vgcdf73p4143dfjcvs4b5v4phvisv76ink3iiijl6s6f9zbmy3";};
+pstring-42857={run="1f7a26xxxzwfgprhzxq4ay597sln18hjk8cmlzjy342jy45g6dpj";doc="0ngxd95s8lzpsgirgrq4dg0p1dwh4l0gs99nhich12v6l19jd29b";};
+psutils-61719={run="04xwjilc64d5zpbngcsr6c6gvm3857wf2hsyag32v8bk1pjag97f";doc="0hb0bjnk53i2q5wkkcn4rkjbpvyv90d41ynxbgsk8hp2gli8b0zj";};
+ptex-66186={doc="1dk8rvadr1q00bjizj567lzjp5l47pr7miyk0ghkajbiiwbqi0kn";};
+ptex-base-64072={run="1h14n8hj9xh97y2g8fnz7q3vrzmm7nkk1yj9194v0y6kjggf732h";doc="12nxgvrinkd95hiwczd8nykiyldjyvh8sk49m2j8hl9g4g6slkg6";};
+ptex-fontmaps-65953={run="0f6cijbr26jjnba7g5ffyh8pb0aihdfv094yyxhrp2wlf93ca4jg";doc="00lx6cv5sb039k3wzjsq92q9x6a2q6l96khmj6rc0l06xva4j6am";source="046jbs402n7g7dyd1akqwx382rkn9m7cs6qr6nz1cpd7c56kfb9n";tlpkg="02z3c5jkwmrr61b6ivw0dx45jjgg7larkrhjzg4mr2dha2667hmg";};
+ptex-fonts-64330={run="1qp1linlsyyx2v4v5l2vjvynw9gpvd4c1klszamp2fcy1wpkgw49";doc="0iqy6k6x96qqg2c8p9cn58jpkqq8hhnb20852a39whgvcnk8awhp";};
+ptex-manual-68147={doc="0kvq5wx7rz6lz9a5f2fjk1y3l8sbqm10jc80s9irbkhv8rhkg8ar";};
+ptex2pdf-65953={run="0s4b60gc0wg4wgxczzr2h1xlic0rk23a9wvfy76vysqzlsfmh0xl";doc="0ky2zh6a5d6w2aq8k9wg7p3cvp8l4wihfjlz3sir3ggj1rx2x6j4";tlpkg="1rikx19qn1av7hrihjviqi1jgla1ncw3fyv7mjav490813nk92ah";};
+ptext-30171={run="137amhihk598rhaf0qmbahd9spqivzqrmi53y6q3mlzhlrxg0p1r";doc="12crg85znvmpr5yhvr4yr6riw037zwcpwpavp1vb1nnd9zy99ya5";};
+ptlatexcommands-67125={run="0srsgh0a8hzy23xd4a3fa168qx81fixakjpryd3db55ygrvqlvcs";doc="02k3c7nzrsgb86zkhc8mxl06wdalw9cdrp5grm0kaw0q5yzifp9f";source="1wd4k71xrlgdxbix3m2dr5isj0am8skdr1di00bji1vj8fvmdczp";};
+ptolemaicastronomy-50810={run="13zs1n17jsiaavw98g2ggfrmb4pbd48qscqb918shai2ffkpx8lw";doc="1r0c5rixwam85wchqhf405h7mwim88616ycy1i4zv03hby18156a";source="1aacl5pvqww0j2kvk7k5ikn43qhj2pqsxh47kid443g56hclkzwf";};
+ptptex-19440={run="1p3bahmdkxbdgczvx52qhyn2w0wmdzr8061idf0kpbwvl0nkw75p";doc="1ldg6ljwf0iivd0cxb22sld2q2afwfb83ac5r6jxjcfr5ac7dv0q";};
+punk-27388={run="0jywh76pckajz8m9c9li6vvybjwljyzhk7hsn437mswbfdd5f2yz";doc="0lbly72hl8a5996dkjr5ssnzklbshbypxymp4zgdvb0i033pd0r0";};
+punk-latex-27389={run="1wfs3li3h0fv6dmpvfjvf0bhq72iy82gpjbxhp3ssm7sj41y07cf";doc="1agngq3shcszz054gmikza54ny6zki30rsww8mp7h9ab5nmm6wsf";};
+punknova-24649={run="19qc4ypax7jlr0hw7aim6p0afy9a2qz1ifasx9dh5rnqhjf0q5hl";doc="1x432js1hj43nrxg2bvp4wrrmgpi6p44ckrfic1gk7ki8wzcx4s4";};
+purifyeps-29725={run="125dn66xsrnv4acvk2mbwfl26sy42jw7fngm3p8qmzya93sp0vwl";doc="0lzw7ajxkx78v5dhlsddb0ahq6a9975f4mzmsgp23qczmz28878w";};
+puyotikz-57254={run="04s6878wblhz3m7xc7zgqv0ziwx76r22c4sa974ismfqjbdh6xdc";doc="0wikdmv19kj62vc5bd0n2dl91cqg44lwlfs41nw808hnk96a02q3";};
+pwebmac-69027={run="1162s28w7mlmp724a72blvphq21vrzydh5fv5hr38a7dgfi9ydyf";doc="1sbri1kw2hgdgw59ahadbysv481zz79lh67z3mvq6frx566vcb2m";};
+pxbase-66187={run="0nlnlzpbd2dd397lxxg97pgaagfyb00ygrd6dz0v3gkmpwllnkvf";doc="1kjkqsbrsiwzz6szjm2irz6ijy9q5xnjimdhhv52xk0j46hyiphf";};
+pxchfon-68103={run="1n78m5685q0w9k2v0iyxra2cj57gh11wnsifkvb04z956r1xvxik";doc="1jm9f934a360jw3v1yr9ca9a4qyrifqa05x5m1a19klf53rn3ghx";};
+pxcjkcat-63967={run="0pg6rh8yf6mnd047br0rwiyjyzb7g8qknwzx7v9r77rxgpvy4baq";doc="0jfm9ln4k0iwvk1ddxma3yjvfrzkhxv63nn76d6xi8gqj1vm1kl8";};
+pxfonts-15878={run="0vkhx82ywv17rflmq119jxs3ib08rfw6lkjgr3mp9vf6vplgqzki";doc="1afcy7c1n63zi5czbpnajrrgwfp9xdymkgwf5h9865adjbb3lm82";};
+pxgreeks-21838={run="1j93gwgk66k3fwkhraapis7ddj8a4bliqh783psdv1054j5fspqi";doc="1md7q2q0b2lhffjm39cxzxf86rw8759zxwj5sbgavzdhyc70ssli";source="04vdi4wf7lw15v05jqycm66j1iiy6g13qrc1ynrnq0df8b0zfs1g";};
+pxjahyper-66272={run="1hcnwp8m1rjpc987bg7nwam6lbc0wyv7anrw7avf8dfljklvnxbp";doc="05jv160jmxhqwl9rl40yj0y2853r04pxnbhd40zn54jdnqz10aw6";};
+pxjodel-64072={run="0gywpypmv9c6bqyygyz336v7dn6bnx5ibz2p6f38paamk6bqbyf4";doc="16nf7za81mq77irbdqkxw2iwxgi3jpy5vh1fijp67bq3lx0az7is";};
+pxpgfmark-30212={run="0mkcc99fwi8n63fghw3mz2alhgpakc3hqyd40s2fpwisvh15rbbr";doc="16sapygswd6mr0pr04c86jzngw6gdf62bgv2xlrfzfpq7cnjafxb";};
+pxpic-67955={run="0zy1f7584bmmn00nwzl8w17hwrc4c5i798763p81sl784hm2vpw4";doc="0yw22zb82scd1c4n0niyc69n7xhjgadabxgbh7jjkxrjbzp6j18y";source="053yqnrc5xfj2gifnn94lxhawbnlfw3dhlzz3jnn4pvry7vnqhvc";};
+pxrubrica-66298={run="1w74syyn707qwyckizmyh78ycs6ic0mmhliz2wbamz35s1z9l2sd";doc="0cbx00q2bwnrhjwfgwdj4q09ix208037774az77cg6i2qz9xmagb";source="0x592j0vbp8pw0r1wd2mmplksyyl6wnwns8smf0b8s4y3k96n71l";};
+pxtatescale-63967={run="15swkjxfxznb101hvlqcxpplxngfaf0nbpkw7j2fgccyqjs5fhfn";doc="1j6yrpyfhn75qkv03bnwj9i3s4lmsh47sw696y13cflvdmsgs8n6";};
+pxtxalfa-60847={run="0fanfh1gb1fmp7binmhks4l90s6925pki6gwyzlaa7vy7za1l3ck";doc="0jc51zsbqbjnp7zqbbl1cpqjf7rwvsxvfzfzm9wsbkfzd16c9817";};
+pxufont-67573={run="0vvnhghcdlyqhl8244c76wd411cd9cjmjsrhic47rjs9sis1ilci";doc="088a02dfk2n6lgyfri74p2lnbp7mp4vn96qqkby0qjfnj6956hb7";};
+pygmentex-64131={run="1kd9jqmbxhkd7gijghd8wi0q5sxqf5dpf22z96wwr29kvv7jxm64";doc="1ppayblsdpmrd9sxfpf0kqhbsxfd1fgq69g48zj9jzbhncwx0lhp";};
+pyluatex-69372={run="171ahvh5ii2gimcx0a2g0dn7s87a58yff7g2dwbw5hi8vyqksfi5";doc="14sxmfsk3lrzcv0k8rkrq7d5dirxmy58i3km6bkahigk5iryq38p";};
+python-60162={run="0brs0hydf9vqwlvxipfrfxqjblazgb8ziy4brp2bi16bnsz59ykm";doc="0x1nfbv7fmyhzhgy6xsndhd9nja8xbip436kg7ygscjxml6gibgh";};
+pythonhighlight-43191={run="1bf3jf05zyggcbz5c6hr06wd8dhf0q5m1i4i7p026s1b7dxxq1qk";doc="0qw1rnyg5pawmp7hd3b0dyjzmbrlxa0hzg7bxnmvrz1akn1cas3q";};
+pythonimmediate-66461={run="02p0gnlbkfb2x0d502d2bmi5c4hz3ibmimns7r2bdzqfvx7ynkhn";doc="1v2h95ixg3fdpql2c5sk71g76j8v9244gcjfzsilwl77fxd125xg";};
+pythontex-59514={run="0hgbhdrzxvkc8szvkq2vi8v4xxn9k05zpa95vrmdlgw76ms33wvi";doc="0pxafbrr7mclvn2zdwirqbfa0b03cm4l4wbcgh1ag75skghmh745";source="03a3qj72hzczf4dz282vqq6w263zk1zhgm69h1rk5ibdyasmv8xh";};
+q-and-a-69164={run="15gmr65sq78id1l8nljgppbv85q3pjswwfgylc2msa7pk7vyiwzp";doc="0c8wbw0ia433sg8j9py7ivd1libjx43ys2fqi14m0m766sfrdigp";};
+qcircuit-48400={run="0vxsppwbmhh03mq9k3zb2hgl3628q4i51dz98j2s73z19693266a";doc="0571vlvpvmpjhjbbrd1ybzckhfy7ymralr017d09kf9p5gk0y677";};
+qcm-63833={run="17pryjm0r6w559lgkf03aws720zsap95azfbixm7p8lr1gy5nwlq";doc="0wx14xsj4sy6xpcs87bji6xfarfhlzqdzgyyx2p8439m6ay3cpx1";source="1gsfa9bby33a5qgi4p2awr91gn8p4d2qylz32xmzhp0x6fpqhig3";};
+qobitree-15878={run="0irdc2w96ad7mkgm6jqwia7lk1x4557fm60l98mc6kpd3a9djzgc";doc="001w9a4kxbrx11298gnvjamx8c6plag1gp5b7x9vq35s25kdy0i8";};
+qpxqtx-45797={run="123dfaqzpl8h5ia08swjmj4h05ncz3ishsh6rbcm5px35ccrgjld";doc="0ng1h0yhclki35v1w08r2di3dvf9rp78r43dfa752zr8agrfd713";};
+qrbill-67724={run="19wl8p36crfgyzad9v20n3j8ad33r7yww9gn3z3yvvggdqpsda0k";doc="14hfgxl7rl026cmbh2cxnj51fslm1zzfnc5pv33gqzd3nzmbs1mr";source="0g3aii3fdjp3ps788b108jj7ggks4ndzhg071jqca0q5xhydnvph";};
+qrcode-36065={run="0vs5sg5hch0c2rxy27yiy1c543l2fnqinr8nvsyr288fja0pfrig";doc="1rmwz89yxlgrypmki8xanqc3xxm10m9zc2shh5r0fzwmsfssri9r";source="115wlgvpxx0vkb9d4gfwbqamk7sfmcfd11hxbfr8khd5hv8asvpi";};
+qsharp-49722={run="1lrnzvlalznyxmkwrn9nh3x2zz74bakiq09dg374js5yni36igf5";doc="091kiiicfinn5cxpfhhb66j3hkmv80gsqd1b66xcz4ghxan43ywk";source="13923qlhbx52x7h3v0iv6y8q0dz8g2ikvfz9m0lh9zwjcwv4mpxy";};
+qstest-15878={run="1xk4vqqics2iwzxck416za70cksx836qrsm4v8idyg9kscvjr1jp";doc="19ddnrz4wjd51h8g0z40db53wh0zlr6m1nfczghc5b26vvcj14y0";source="198xvadvk9fb36kxzv1wpis5qb38dqaxsqva6l7l23kz3sb6k849";};
+qsymbols-15878={run="11jlwr2pwrxck0xcw2szql0rdynjr2pk4jgzlqkpcardibfr385x";doc="078qxbmv1zgg73a923sbfqnwmdwg1qkfxra5r8dzi8wlq1cv29ii";source="01lmlclv9rlkga19mw4ikngdpkxhmhq77kylln8kjhcpa1cylk5c";};
+qtree-15878={run="10a9v90yspc1pq3ja9bzixdq6wxl6q4jxz5na7x9yw9g44z3xaf3";doc="0ja3xpng871h96q220nrlq2iypk2spjs4qr5vpmri89b5nvngf6m";};
+qualitype-54512={run="1r59cbk6rmdy0zhljcfqxksf101rkzib8ll20ak0sshc3f1jj64y";doc="1jxcqd48v11b74drv0lh2gv65aqsjv5zziph2s9g5ldd1733fgl5";};
+quantikz-67206={run="0g7zjkgfw814wn1ddsw2yxvcv5y8ca66cz13hmfa61p4kd8y0x2q";doc="1rla8zwpmvf5wwd6bp74dimm49aa6m8xw6ix0ahcnvx03vs1yibi";};
+quantumarticle-65242={run="01w948cabqlnwyv0n1wzs97hhfknspx2596w79ipjy1aka4w6304";doc="1k2xwacvm6sks0qj1psskcfm002haa734fqysr4cggckwhf6n7wk";};
+quattrocento-64372={run="1jn29sl616p97vf81krg8g94zqsgvw40p1mh664i3sfkglxlag2v";doc="1v63bbn4yd799cy55w7j6isl53ngzngq9jlzi63nd5bmk4lqcq3m";};
+quickreaction-66867={run="1jcqsgvsa886hw3ldf2xx915jll8glfdd7vmc04plgvvvfavghjj";doc="1xgwv5d2wpp5jan4c347kxmjqfa9qk9396vpz1djsa27h0naj4f9";};
+quicktype-42183={run="16qy6rxxkdkkli1knibhbm28jg80l0qjsn9lsb36b7z5xwxj9f21";doc="0ic0lkhj3rdpwfsrysm5qidw0gby11kmfnzbh5k2fpkfarwfhxxb";};
+quiver-67779={run="1nakig6vyj6fmzpxr7xv79wx75f2dq42k5q80fg90krxm65bmbn0";doc="1jbxdisyxla5s8qkn19ayj0iyqdym7n6xlspr0vjmbz0nmh0nxd7";};
+quiz2socrative-52276={run="1s6g0svlkg503r5mqn3iw90qyw5lwpv7dj92yck7ymziv9p59qkz";doc="0v9x0jxrgiscblh8w9wip07di78glgzd0rn2fp1hpzabi8x94dvc";};
+quizztex-68823={run="1yrari2lhzd6rmkqzhng49vmcbglnb8zn1mw5f4a0np4mw5dhmdw";doc="1qii1rajgh8fba2ck8l1p5dzviiji2i4nppivmgllrvs78cnfk60";};
+quotchap-56926={run="1284ldj6pfqq6mz2a62pi81k1jca8xkc6wa1wbrv3kqwfdcc8cwa";doc="1bnhvp91adi4bhzwddzl16qw6d74in94jq2h16lk06aakcwr72hd";source="1g2cfb5j1qjqads2m9ad9a8n0j7ihrvd55q9b56jd141a23layb6";};
+quoting-32818={run="1sghajwgfdc1p0gifii8wz1rvzsiy38f4jpfmh5pys9w6nr9a8bj";doc="0aknicilv5rn3claf77l5br5mr21yg1dhdc1j1yxigz9k8pljzm6";source="1h01p11ahr4ykqnhgl0kwc5i68mw9wznswrxy9ab5rpma1agjkzp";};
+quotmark-15878={run="1v48482b57w6f1cx0b5av9cq26zhgcqkwi8yllnl9p8pnrjngc9x";doc="1jmdv5i67hsbmybjr8j2sv7f7z8bm3a30yy0ycyp6b5c3ycqx04n";source="02bg50nj945gycxf8kb7s9c87xwszprq3zynrxxpzixrxqd06pf3";};
+quran-67791={run="0gp028w9q30wx5vfjvj53b6brrac6wdkybai4fij2kk2vz0ck9lh";doc="12wphp5nz23svjj06s8xdrfghfqqx85hmyqd4rg7kxyky009i6kk";};
+quran-bn-68345={run="0rfg0vi7297gdilra0lg6z40hxp22y3rk3fxw82j0hh5dj0f5gl7";doc="0lk1xjf1n42v5mkg2sr3mykvgrhi9m53gxndifc7pmm8anivfklh";};
+quran-de-54191={run="1a9dqgrdh6vw6zpygslfq9d9z8qws9n614b5adr7pkjcdwm8zsaf";doc="0fq3yd3grj31wyjvac4qkvs38hjjnlsygiihrxw22ddhsa4cl2jv";};
+quran-en-68790={run="193b22vcvbrhy12rjzxzgjhlfiyzp0fq97g2sbna45s7358r4n2b";doc="0jgqpcl84dgf0bc5zlzsbif5nqw5kyhi4ngdd4kcj6z5lpafj6k0";};
+quran-id-68747={run="1pc6hnvi1xdfislik6rq2f121q9r8mjy48prmfj51zv061f367bs";doc="1zsf40xn4xfy8wiyqznsa2y7b2rzffak995yrkllkbcny5q20ilw";};
+quran-ur-68314={run="1l2hsql1q8yhicqxdz3jnhhc9cjlwq4951xsyfz5ayzrcckw83n1";doc="05xcidnphnidr1pa4rhiimqlqnfjqkwx4hsl6ppmpiywws904g3j";};
+qyxf-book-56319={run="08v4n8lc3qcxjzfvwqypnky9zhia7ylwq5f31arxgdf0wq4gyhia";doc="0i6g7v0xdy26rdy1kap0b4pnsz8xjm1h90dwby8y0bqlxjhd509w";};
+r_und_s-15878={run="04icw2n2vz98bk48kbqybb6x3wgzz8fr045133vinybx49nk8xxa";doc="16ksw9wid0sr9gjhjkxk3696fcy19gky3cp9ia6rsfh20f9f2yw2";};
+ragged2e-67441={run="0wvvlhbmj1j4gp66l9p1hq526r3izywyf8ddggj316q2pg4db53d";doc="048f04kd8rzi3cnqwa8gw4cvx2q5k5qpnph2idvkvjy3lw3jr9nj";source="0zj8nphii46xwc4gp6h6l65zz9lx3s0741x9gkz9ghq2x8m7qphz";};
+raleway-42629={run="1d8zv0x1j2c996ql8g7zc38s7fpc61ibk5zdixhj7kbfrz5cbc1b";doc="1i8hja5817kzy894j25hy5cjnw31y4kcahcymx5hrbi0aplhizx0";};
+ran_toks-59515={run="1k31qcvbdfx5xknykv9zlsijgzxcw53amb03avwbqm3kly5d30r4";doc="1jri3cb862m8984awdshlqc9wwcq0hbjw6cf2yqgb9wn186gjfyd";source="04ix834glql0yprygm5s2354q62cwsz39lfk871n8s9mxjd2f1c2";};
+randbild-15878={run="07ix44c2zm185byn868bmm6fcbwq9q37h31brfa4839hpklg41pp";doc="1cpyzrmswxawxk6x2vfjy7y8qj3mjrxgmr9lgjvz11f5fvvdb0i0";source="0yzz5awhhw52zg877nl76410a4q6gy7mrri0hccicj529kk0d1x5";};
+random-54723={run="1y4dn1i3kmd99b5br7a2j6ppf0ikzp744si5p6m5rmvg4vh1jh69";doc="1gfcswp2krrfswyjbyhck4pb0lq03jh2mfwzm2iwvd3zlndvccbz";};
+randomlist-45281={run="1kwbg73d8hk4wh69fajl1zqyvkfyfxzyv5xykknpa5s67pxkh9c5";doc="0r8i0ywq21c1h317b3yx5ixr4b1fllgwams4yy5z13alda4wxqdx";source="1s86m5hcncfqkwlr8mwdyh3fsnyzisiw5dlg52r499wr77r5z56j";};
+randomwalk-49513={run="10ivivbyrxm50svqdhv9lm623pvmnifpwpnbhpmx2nvf4crxxbcm";doc="1lvff00h8c2fxyf7if1d2xqkk87lb6396w6mb4yfxwsk0j8j2jhf";source="169x0wy0k91kmfbisqh4ciz8n4knhkxmz2d227gzwbf80sr2a80y";};
+randtext-15878={run="11a4j40zaixjklf4rkzb17cxnfmm6lp9kph3kkp2kalz41qamc0k";doc="1g8nwiz06w4a1sdvdfch5yavar11mj5xpk631n5ym2d5g7hp0dm9";};
+rank-2-roots-68161={run="132sfajpxnl82pz9g76h4xv7fpirqgxrivz2g3mccgvb5ykiv0cd";doc="0y1rva3xz08xkw8s46xxhn6kl58dh1v9i190ffqjd1g2xxix10f2";};
+rbt-mathnotes-61193={run="0mrk5p7h2y1kaaj45fcr56smzi7ny6808k53s5442gf538id9jmb";doc="1ysaqvli3gy777a5g1d7q5brc245qqfr1fhzj0a4dwrj1gcnw4x1";};
+rccol-15878={run="04nw4h7z4k4rnvqh5s602l8h05n85iri3p3cpic4ss71ccn8c2dw";doc="0q3qb0sbhnbqwgc0i9bw27s317rbz05k6pmvhad3m8mvlsbgh285";source="0ss2436k5fbd25cynhw13lq4ns4payl8fi8lc96vi0kvn6jmkwrq";};
+rcs-15878={run="1kri1q5b36d00k1pmpkpa0dmbv7qqprycxzmlmqvp7fx82s5awwk";doc="1x6m7v28p3lslral4wk595clg3kjf2nwk2mi1sva2fl56mny7mzx";source="176fvqs3r8wysrqlqwjdnm0xqgqdyjq7wfwnfb2iv3c3rmpr7ab0";};
+rcs-multi-64967={run="1n60pzx6qrbabksj2aqqf1j4i1b298ldsyjg8z6pmhladq2r3ia2";doc="06lqyy8igbiyl86b8fsl968sv94xcnl1amppyf8hmr52dhdqcysc";source="1pdds0kh3p3rkdn2nrpyfrw224q3rfnahypif8n0aijkcxdlw3w0";};
+rcsinfo-15878={run="04j1sq20960w5yyf37pnzvwaknl8f18mx6rmj2s2vch8bcncdzjh";doc="02zyrgcd0m77xp5p95v63b58mv0h0miqlziagwv1rz3ywvmgwhk7";source="1fgmppgp0n4arrilxmrjn7h7pf5jq7gm6drdz6njq8w1l1qxlxg7";};
+readablecv-67986={run="0z8shn1l3hghkxrmaiyxsv25n9ar59j0nscj1331yf9dwh9cd31d";doc="02zjf16y49lyi9wy3w7k2q1sl3j37k3575nm1hi77bmj4i57rp4z";};
+readarray-60540={run="1hx39j04h7y14qrp75q9f5x3nnii62pvi43ww48nk02glxs9y5kq";doc="1v0f93nhylqs5rz2bxrkfpzlvwajsz6znlyvdnc0gxcbwg330j1q";};
+realboxes-64967={run="0xyp6w8kbycaqmrkkrl8701c7shvd9i16vvgs28cvr61nkv3mv4s";doc="0xd95j7wgv3yzrzq9lvdxpzvvvki2an8kg0zm29yz01m397vmys1";source="0r0phiq8v15ra9a429j63kyjv3w2p96myr8czijfcb9g4920jvmm";};
+realhats-66924={run="0v8pc4b8ls0xyfbji9m7dw728dni8bsggq2pjf9bi2vzmq8825m6";doc="085nfwsfvmbwv7zlfg849ywyqswi011278gmws01sv3q5y6ypfxq";source="0rp15pryn8zyq668pxapwg0imbn76m9fclwh6qd2jj48bqrlsq06";};
+realscripts-56594={run="0ph678nf5k03xl63z66gkmg5f8agxy201y6bvabhdnb1zhvfrfmm";doc="1kmlaym3vxb9mx0jp7wvmsk13i30wyyazhny5zzk14bwx8rk3kf4";source="1qzqr2q2bkq4pchin1xivg8gwx5qkgip4kq74rswfz5a5iimyh0n";};
+realtranspose-56623={run="1m3gmj9bay3a1b7fidjs6rs2077m7csaszz11g6y5i2sjpjyx2aa";doc="08w4ad33pycaaiwhrnmx3sfx2c6kv417ijhqgxdsja1mrhcp0nxw";source="0s4lbg2jg5fa4x8f9cnp5zcb4yi92g4981dwdksqsilcd0in4ksh";};
+rec-thy-63982={run="0pr0k26k66dqaq4rppgqx27f6km6a7r4zk6cj4yjl5l2ac19vvim";doc="0rljkcq2vgppc1lhc8mms0qxbqiq7yxhp19xbshscga86hxd0l5q";};
+recipe-54080={run="1pnyia45nx32r1ng711k2l3g2h4r6n67nfxvg193z4mz1i20hq85";doc="0hhm5l89naj8vzjnvf2ambpawq7scp9bgpfjzszgb6069c486bvp";};
+recipebook-37026={run="0ianmda3ji60acckagmlsmrsvi4sxp3prznvzqkkkvv88w1xbm8n";doc="0fmc59fddgfs4v6lsba04g334xlkhsl1liph7v3yx4qj6l9dxlkp";};
+recipecard-15878={run="195lg2kvww7amwls014s21l2pnyp24c8cfyb3glrxphcvcdhhr6q";doc="1h13vn2zw880gvzi1pc8j41wa21ygja43hrjmyav4zxziiisrnwq";source="0fkwvjxjhaywk61j750a05x0s5fgb96q5n3afcq056yf01jbvsxi";};
+recorder-fingering-68595={run="02wxkvcwh8j3iv6dm9ms3nn09kb8lz97xx0jq7p0w2i95is472bc";doc="0nh52w97xi8p2wgqrpz4svipi8fcam815a340zlsphxsx31c8lg5";};
+rectopma-19980={run="1ivjyfhl4g3j1j0xnq31rcnl66z3xwaixyzs8wwmbf1y18lgzyb9";doc="0gfvsjszqrn2r1cm7blk0xnrnv94l1a7ialwhvf733vm1m699lja";};
+recycle-15878={run="0pj6xvdd30b4y1fa01vmhczinw48d6psfd8iy0rpzpaq89rbjrvq";doc="0sylgv7viy4qgl0krhsf8q1gkxiz91wpn0l5jyq5y1zg92x8jk1b";};
+refcheck-29128={run="0v82jjddvis01n2ngw7yngv4kh2impw77s1yq360sxqjym2m34ng";doc="0ckmd4wnjl0zbyqr5q18whb927sjbz1xgdg1hg5w4ih0g36sra63";};
+refcount-53164={run="1r4lv6yhybqb8wkqyaysimb79kbdgvv393kn7dkjqr46b5w4fzcf";doc="10vn481rkdwv63z4n67gch55w8x44v125kf3v7299j92fm8fdznk";source="1rf8yk9xc1qhiiq30jhvjqmg5773g5d33fpcpih4i9c1l7kad3sy";};
+refenums-44131={run="1dlfd5dx3mqfhn73y04lafcbiprqicv9kfz2ylnd4fhhm62svb7a";doc="03d3p9d1f0pr6gk918qiq7p5p6k0cf1zh209akl6a35042a6nms9";};
+reflectgraphics-40612={run="11kcq0dijnwwxf6d3s0fhk7nfhvn3v36lly2wf21vgsl387dkkaf";doc="0iwcljjlk1741kw6cayrbjhqalv74apppw612gh3nhh242nn9bwi";source="0hy76c57w4lw0v77qaf064j7xz327fprdijljd7myy02idlszbmv";};
+refman-15878={run="1adim1622bngp214hsdzjgjkjcv7b24a6aaqzihlms76vfq0hklj";doc="1jpx3yka29lpssvhjl12h1bxj0k996x7a7rf1742wph6w1n5ymmy";source="134hq9c9kdr7rgzmp5jkjccqgfw10zwv33zmj25b91xljn5afc6w";};
+refstyle-20318={run="0nx762gng6bmlrala884r4mjh2vjh4r20yy00bpjzq0il98hs2lh";doc="16dm6n9mh488li57ighbd3badiavxlmy1ffz2hln6lkd9qp2y6i7";source="09mxinjwbidd8sr6g8hb4gdq81ifzp67jbw24xc69x82kh48r8pq";};
+regcount-19979={run="19n0gwvh87pb2fanw52rc5j540v9yw10h2r8svczim9sdginy56r";doc="0qnxcyh2vhkylaav056lc2vg24y5h11svzy6hrk6rr3sza9k6z2k";source="1xfk7qs4x302lfi93a1n8nzpsmzmypyb34d8hd7h8y6nm7q2g4y3";};
+regexpatch-58668={run="0i8dfsr32f4w3lfh88z45sdhvwzqgh52xqfqgj53fvynblpz9msw";doc="0qh2g9sdj971a75dv3jfxi3ga3mf6fmb4azphkdgxmm690dblx35";source="1iq45q093v1n421r37w42815yxjb7iby426a48mvgzyc1c82rd37";};
+register-54485={run="0i084dij80m292c9f57hb0y3gs870520l8awl3wb21ss76vs5501";doc="0zi950xii9qbscbv5030aw02arc77c8inwxmzkslcmapdqxq5wr4";source="1jz02c2c5xpinxninb1a2bkgan21gijs48rks4xv17y7k6z9h00v";};
+regstats-66795={run="022l63bc3g31479byh1350fl4wpfw9pq9jbqy3xzhrrl35psvqpm";doc="1l54lb8g97gib5al38k98gnahrpl4sc0kr6wrabagq70cbbpnc50";source="1px681bkciakl41cyblk72v5kh83hyqf7bn3s0hjax9alszk29pa";};
+reledmac-68411={run="0kchw0r9irziabbpjbf405f8rp2n7xvijipbyx7isnzadhrkyp04";doc="0gbx77a5k22393yw7c8s8w6pakal4q3sfq8021mhcl2qcmpvc574";source="1vxxgm7wy47gwhg9wax31fm02klrviwadvik5863hikrinfl3im7";};
+relenc-22050={run="13ym795q37rmxhmr0d8834y272si11f0qh7lmhffrpsf4d3bhf74";doc="1hb2sdm9lgzfkj2kkbrlb3alnfjq4rw3islgdzkqbcgqp9s06f67";source="1gk7nbczw9b897idmsgqx6i8xdmi7wizhb3dyc0hir7qmivaqv6s";};
+relsize-30707={run="06sy6v0jscrj2qs7axm770xv8fkiivvj5lwb8mkf58gd5jwc5bgb";doc="1sgv3x3dky3i7xivh6pzqh3lrqjhb62g0ji0hdgmy9blfrdf3api";};
+reotex-34924={run="113nfw6md0v4522n54q63smd2g2iwm89qsqld237f32r3rdkbcl0";doc="0lapzgfp019a7qihfhf1cp2szwq98j8kmcy80c3gf1fa1x0c3x1q";};
+repeatindex-24305={run="1z4z6bpfjmgn8mkpcl1rsd9m1jxdx6lx2kz83r43d1ks5zjc6wn7";doc="1vcq9vbfw4dwif9q5ki0bq378yd4sg5g2yxr24bjav97shd9iaxk";};
+repere-66998={run="0kjpf1ywcphgmkxsr70mzqlx3mid4af7699hz3fqgs307iswj0di";doc="1fhx74lsy7wsh84p2g9chdqy94vh6sq4wi1rny9pr9cmnfxb09m8";};
+repltext-56433={run="19h9qfzz9idywv1bi4qpl8yqv73lwj6s6aqxqhb8jlh3b2scp4y7";doc="0nhr1lpbb5nvi7mfzrjxfq7ii2kib8klzcsqg99b4pj3hcwhv93v";source="1phbwgyvdm6a616wzvlc24jm40k4hbyjsnim5g5jr15phlsa6r2f";};
+rerunfilecheck-63869={run="0i06ypv9hgdgmsv2idx8bfpi9xfrl1m17ly6cg8a1x0v6ns50fwr";doc="16ryk4k490pxdli58j36bgrbmfi4gfc5jm8y0pnv9fcj07da7wpy";source="17m0dig8vddgga28j5raavq8aysy3kdgzapyrciajj0j90q14sss";};
+rescansync-63856={run="1qdcw7zi965khz3n3xrwg9x84hi58iv8sg9b3dwn36cjdrxvvx83";doc="0szxkc0bpj0in2mlms1m381hhrajvwhp4yk17daihnyyxx6m78i9";};
+resmes-65375={run="1g0gqmx21s3y5h8ll5ymgd2k78mdhw3nrzc3xnpihdvh4gjqg9zv";doc="1qpmlhw6rxc8jmp44349x428f7mrs6dr07l5q20v2qj3xnnicjzx";source="0s5w0cf3a3106v029yndv5hmx5nrdk27dwbw18wb5q8m49gn6pz2";};
+resolsysteme-66192={run="179casx77warx76rzmfa8h2rvb8z77g7dp3scs6kbyc3s8j9x7gj";doc="0q4adkm495rn91aq96baxf365ygaq286cds25wr6hjfg9yj5bhgb";};
+resphilosophica-50935={run="00qqwp5n5a8hpz4zpcmh3avbm0wh2csdwdf450hmqnhpv2hn2z18";doc="1s5r4s8ja16vsz3ssqk0klfm1vfxrxbcj45mlszq5r3k5gsa1y5b";source="0nkxh1yc6nnjlh5bmf9w5k6hzg62f4i7x7nbf2019vlwvqn7r4yp";};
+responsive-69147={run="1ymdbw5gq79i5gd75dcnc484cjgrp7ckh8163a9n8rlghpn0pqqq";doc="1kzw8r28invf2p4xcqfws50w5i38rr7wwzf7jx2x147n8b91zr7v";};
+rest-api-57068={run="04y8xai39hlhj6y78cxq2fqy7fis7mbpwzyk4jmgqd3365738615";doc="1w33inmwr66p81g66zxqiqccks965060034sx8rmjnjfgwqqgcgn";source="06c06pbqa8m58r0lcr2xc6zahf6gjdc1r2zfgs3q1b6czy6rns34";};
+resumecls-54815={run="19cw19c4a3zn5gvsngcxj6xvh2qq5n5am0sdmg9zajy9lqqp5nnf";doc="17z14r8yj33mjjkydzaad1bm5nhvrv5154n5n6snjszd13vgdyh5";source="1mm53893g9nqp3wdks6qa22k4pk71v09rg98nm1i1bz5ppn6kj18";};
+resumemac-15878={run="0nixlk46dpyay8zsxrfkcng23rdyx48mnq8s84xs5whlrg369s3d";doc="1yln2mz6awzafpmrlzi3s12zj9m7qfj4laqgjpy4783rxdxy8w57";};
+returntogrid-48485={run="0cfik8imjgrhgilc7005cgy31h1azjk15jrcvd4vpf3g5ml1hpsg";doc="1plnz793nhiq9y89x7i51bgp9d18kbi0bpwslg982hf65yklmiwr";};
+reverxii-63753={run="140f6n41kdkbg6fivz7rjlc86fvcxv2nizzfb511s21waj3lljdd";doc="0n67pqjal4nv02viyshdznqwd5xzc3s8v3w1zxykrphccic73nlh";source="1asb5s8xvns7l54cdp6gshcirdj0wcwhkl791jxb4c93qmb3pyx1";};
+revquantum-43505={run="00mcqs4zd33larynscqza6p18a8payrgarwbgdsnnvaqf3c2rjnf";doc="1nbs15bl80yl7hrav0awm43q4brdfqm83bpyf2zg00yz5pjm1497";source="0dqxvcd5yinnsal4wydb5ybsldsax18zp016p2yzk212rk61rikd";};
+revtex-67271={run="1l5kvnpz3ravhdlzshhgjw19mwm6jggpsplgmdwzbn6pmwnk0wzw";doc="03pyr8hd55dl40wf50f7vaxkwbqcsmajl9hqaxwq878pgbxb1zmr";source="19ij6z0zal8321q616pk62mcyj12cwb12lw6cgpbqf70g61jgfwl";};
+revtex4-56589={run="1v1km5grdg72mqf7sha1laprwhhwplrklax9mabhg13q4c9k8dlk";doc="1709bsjlka0d8x405fyac8vpmklf92qhw0qgmzvbhynhq4sc85b7";source="031vqkbg38iwi92yhvd5xdmmkbjhrr9lm7ncmlwgizf1y0ib7wpa";};
+revtex4-1-56590={run="13azycwjj9ihirfkcgmjrpvjha4wngmgkm6irh3388zwjs2sh7sj";doc="057yf32dsx1j3b89wl9jqrafvib8p0x6l3w3zk1c98p9vp8c0lm8";source="03dy16s50bkgj2l2zkm3z6mzf9qwhrax7cxll2p0rxxwfgvpgh8a";};
+rgltxdoc-53858={run="10wpra4vdjvjsq8n6iz33mnl69b13jbslp6ccf5b61va4v66z78l";doc="0xsz70p88ij6djhlf7n1718fxqcngfxnyl60h3ia0xi1gjzrbk1c";source="1vzldzdqyiqfaims3a8w378k4bfwxyznmw6028xvwrk7abq1nr4f";};
+ribbonproofs-31137={run="1f7j2v5233fvjzlrlfliy18gy890mlr2n2fbqfhh88f2w3z4nw2b";doc="0gqbakw5jdamy0q4rx8y19xkdnb7v5arpkjmmsxhvv12pk2kb3d3";};
+rit-fonts-67659={run="0gsghvmn1va4idw2p62r0a4vr5pdy67kk75f73xpkhsg4i716w49";doc="047lhzb7h0sq1bwrh0a04ank09apii7rh9cdrx77ngrnrk2fz1a6";};
+rjlparshap-15878={run="1af2a5fmzx1mmk0vprx8w18rqgab0dcm1c7sfvnh7v59lgvkh6rv";doc="1is0ny6a5ndhgl441vrv7ik4i0br90nlcddiabgmshwyn87kiciz";source="19kvfg03r3nr99a9ylk3yr6nnq8r7cvfp3rsi2vi10m19jz60ssl";};
+rlepsf-19082={run="0ycf0md4d2bz8003s0q4xi6qdjspi8z1dp5040cm3qm25p7jsrf4";doc="1asi443gvl34m648ap9j5an6fx5x94s3v4dp8bqvygn615jhd0na";};
+rmathbr-57173={run="1jlafpdjryj0sic2zpn5f90754ydnfbb74x8b3q19klm3n20bsr2";doc="1nfcd9ypyscqv3ghlaljrnj4rm2md5h5k6yl173n15zrr56sxkfd";source="08mzgxkwk6frzgd2hq8fz30dliwrkrk23xmqy9p0qjmq9vi7vbf9";};
+rmpage-54080={run="0y292gcfkj0nk8090iqnlrx9mhvh545im2xms080kz0l1847frpc";doc="0rq7xjizq8nwg9zk60gjd9vcjvxyc0xaldc4304nyihfjxfyd00b";};
+robotarm-63116={run="10xlswn7bkad45fyv9j70pd77319mynldwk530y23lc2874s3yn2";doc="00qwsv5vxidjzkm31v21sbzd6rp1pvz2vrs66gmlm1xbfsv4kd0p";source="18zffnyyhc3mp8xpw7bc52q29z3skqfxg6h6x4b18mi9jpyd2x6q";};
+roboto-64350={run="05ynyzlrnhn7q95ld1midxdccc7kv209p4x53bi2n8rsjmp9sp39";doc="13aqrvxs9vhy8bpm42fx1i47m0q80pc4zm5gh2bllrpgpqn9hbry";};
+robust-externalize-68842={run="04m5bnzwfpfqafcqavcwdmqzk1yi22hpq3wrh1kiy858dlcxwnmi";doc="1wq6m2z9q58340sgkf1gvns6n5wxb11a79kpmkwmh3zzz0mjkp9m";};
+robustcommand-15878={run="1vxsxdg6122psbplm22l7f193fv7rd3dadcg6ys4ngzy957acvig";doc="13d5rsj95yx81bfbansh964dig4hjp5raxagzws58f24l8imvfzn";source="1zgnyglhz8i6hgzxlj19kdw31z9kx44zj2vziwkhcpr9clxl8as8";};
+robustindex-49877={run="1fl9vr5mynjg8w74sk2jh8vgj5yjpmyhyr107iblmcicgwv1sd9y";doc="0xf592xvmh6xmw08zwwcsn9xyadd9637vicnz95fbfpp03p9qjnq";};
+roex-45818={run="06mry55hqrakkc7yb7b174cx45n0frk3isxw96p4v77n9pyvlffk";source="0fwcb1fgz4kxbgcqm34s5glswj43wzg5j56ak5an39lsw0wirs94";};
+rojud-56895={run="1cmpg4w2pqwvr624kc4rv7kvnf45c2ffqrryh0i7kbqgc22xly08";doc="12y4cph62b8rag4dxajpzy7y29kvnb3n0z99s2vcq1hfscyijn12";};
+romanbar-25005={run="0p4a1g1s22s7jq4ahvpqspx5gkd6nhwifbf1shjp53f38myy0bm5";doc="157glkgzh4c5zv15akrlvfl2m03i99hfrm952x919137jkvjbpkd";source="0w70p08k9k1bwf9ls4wgnclp4iqj4hzn132ny4s11lzcaj4v8p5l";};
+romanbarpagenumber-36236={run="0m2772qfl5862l6m81rrx4xcbj1s7vhk9x0ywsqnr8qxl1kmv3h3";doc="0mj7kh8jvhscc4clf2199594994xdx557q0nnsk95srwmncq8f50";source="0hq151qq6wb0q1xhbq6jqzxfh3zss9iyya5wxv883a8pd79rancj";};
+romande-19537={run="1bmqvxmlv2065ifn6bdy8i3mj1g6pkg44dhjrfr4sj5g8dihhqq0";doc="0fgbq36nzkvfw56rvqajvz8krfd84msx8iykkjizn1m5zkqb4iv5";source="1v8360kqvxidzkq8sgcg8k2cqhl59q7bmrk3gvf9vg0shrbvdr39";};
+romanneg-20087={run="0y9nlxbjyiwivw9jkc0vz0lj3b0nvj9dcd4sj0gxgxa1dg853rlp";doc="0bi3b9991x1pvh8s8yrw5031jkvvwkrwah78qfd5rlywh2ylnrr4";};
+romannum-15878={run="15zjf8wbjif83vnib3y6vqxc138aplb93nfkh95wl2rmahaigmw5";doc="0a8zsbh28jl761ir6is1l05n9jyvzr31y86qwaa714yxwpzak0s4";source="1gnvnj1l88l66mrhvd50cx44wws4a45708jmrncb5mnf0i6v7ci5";};
+rorlink-67461={run="16w0lixzj403qgj8yjwn7v5dg8114h91kbyad27y26z7c6q31dq0";doc="13z72aidbrlgyplr8zhjwhsyk4q1hja60jcw8d2l6275j03ykls6";source="18r6gjh78qfjqp1bczcrsdpzddhyfyj152z2r2i5pjcmdjp1806r";};
+rosario-51688={run="1jqgz4cxiq3md1dldlil6pslxxrp7brr9hl28qcf6akymnfxx37f";doc="050yna9vb9cz026cyi44f1qc596svxvf6fgyxlby2isl1jqy89zx";source="1bzcpxygwsmcg91nxx8lxc9skm5cr8hbz47qmydwznkkzldkdbh6";};
+rotfloat-18292={run="01ycgag2ip0kxdsaymfcndmbhfcc95ppkmwhm3imryibm9112bv3";doc="17x7jdnrnm333cq706cdkgzcyscq1k162l0rg3qgvknig6991v64";source="0ymb6xbsqqj91b9vkfzdab1ip0xqqj72zm1kd812gjgkpgxc3jfv";};
+rotpages-18740={run="1pqfkyqs8ymfqsvq35cpv438g8a3az6sajh2bszxncl7m3rqa10d";doc="069jlj27xa7vnl83bx5m4k79lky0ayvcl13gqxlk8an5kdwmdr3j";};
+rouequestions-67670={run="15265sdg56vrc9i7jl55rqwmhjzg27x46qinmzr51jws1wls9l5v";doc="0gj9w2yv7nvjjr50jwaagp6ccqr537h268sakms9fvd3hx8awmd2";};
+roundbox-29675={run="0607rknc69dnzwajmgaq1n8ixv884bqp5n9m1g6n2d9frmmh057i";doc="1vyna8wndg79vman54sv24hbdlv2jnrdkiwyxgzcwc2zv29asxs9";};
+roundrect-39796={run="1xjfigxkgcszkcja58jd2w1rhhnccsl665p0k20lssb97wmdzjxg";doc="0sg1ck97k8pbg2fjf99mhpvd251plphr5pk1dywmjniy9vmhv1ih";source="02kk3h77drvkqanc04bjlfzg0scprcs78z3m2zf8gs6q8w95k7pv";};
+rrgtrees-27322={run="0jihs23929pzbgpgnb2v9i16fcil9kxkggdv1dvg6xq9f2fh21md";doc="1skw79hvvh0xkjff4bfl0nqdd8znwhhwpdx33v8ns43xxamzmnwy";source="1q7y5mbvnrykrp87kljcxw7zdglh08cqz92iahdsaac4xffnz6bc";};
+rsc-41923={run="1ljdc1qyy9ziqsq2z6p13jlspjpalbkk9i5xmqrjwhbqz88fa1d9";doc="0ckvfgw88jhfr91ii6zahrziigwsxfaz4f9rmc7ca2a5vk5yqc90";source="01v5zc947vqa8xpsam5pyg8vxm4yygphyv5hji0r5dmplak0q5gx";};
+rsfs-15878={run="0q1iqlkq6swy905jh73y42ya9zb55xvg9w991x7lsmdxc0bzdf8z";doc="069cpd747d6bk7jmmn1im7jvfb00bd597l34p87vdjcwbk3bzfvh";};
+rsfso-60849={run="1h1hzsf74jll793qs51pq03b2l9szbqagn2p03bcg0f3lgx0cxx2";doc="11vjx0l2dx6cflvypgv4vnaavnmkgznkkw9zizic879vihdzrzf2";};
+rterface-30084={run="0wlscg6lhqar791sz1d63mnprxvaqvjx0mfk1pi1c2zsk0lnpghs";doc="1ghwg489y801j2c1s5c7qpv9yyh4g6higapzjw95nmmyf32aka0h";};
+rtkinenc-20003={run="0q024qcai2slxd0ral92pzzl4apqn5gr8gj3vw7whz7432m4z7gj";doc="0kr27a2294bj80f3qria15bjpsvgifgaj27zv9wj11rqr5g4zm7g";source="1kwg3qbk2ldq5mirpvg0cmhd3nyz79jfdbw7y37s2c86g3c5j0i1";};
+rtklage-15878={run="0wrvj1d1dmdff3kqph59jbyg22gvz3bhpnyvjd7ih7vzfi4b8861";doc="0nc926q2arbszwsq88dd96spaj5xzkrfng34m84x0l8wbiidbvlh";};
+rubik-46791={run="03qnnbqas5qrf6jmj90kgdn9kkliq8ap70z2b9jyr4rzq8m19ryw";doc="16jzhkbh8m8v8cb0jyifhz6dcdn0sxzi898dcyjrvf245zfwk618";source="1cnkay6vn88p5l5jzhf5lzzfd39p7pbmz9psc814jvlpqlzx90fy";};
+ruhyphen-21081={run="0pizl8szphgyq12sbpgsw25x88svj6vmf8j7ry23hvc9bvjibck7";source="1s0wscvjg6hj9f8arjsp7b9m7nqszqxh2wyjrx9i2qb60n2kaaac";};
+ruler-54251={run="1ikap9dkdw9lzpda0f2krizqbfkyjxvyddils7clim9nhg77aq71";};
+rulerbox-50984={run="0srxrij0sxvm04n6zk4vq4qqmxbjz3v425nx191z96fpjcssx2cn";doc="030wrw1ry800yixlgb11xbm5834njv3ad9gl4jv08x1pxkj29vcp";};
+rulercompass-32392={run="0ky611n65rvaii9b5ic498p7divfm71h843bv9h70v363mki9a0q";doc="0wqgnb9czbmymzmv7j48lgdv8s280id5sh8mwv6p0jqn69zcpdd8";source="19943zfp2rm3gdm6w5db01w6r1nl0kn4zkrnnxg4ic4n3gvv76px";};
+runcode-68223={run="1487x7a2b6wbsxmngln9yzyyd5a38ps069rmk95nxam936ijknjq";doc="0blns23ww5i2435sd6pd02dapqjbxq5vqn6dfwhy3bqnl199dl0r";};
+runtexshebang-68882={run="0c4rsadkk9vxcax1r0c0mz30krw387da9ildvjnh88ll7zgxv7xx";doc="1j72plplkdlazbqhpnykwl5fbszr3lil3zg9a91aih9nzr662vrk";};
+russ-25209={run="0jr0x81xc1zi9vhgvqy0hcga48nhkj9z2n4rd5303b8h68n92yfd";doc="02dl5mh45z9n2b59clcqnaj9fsv79jw46ph3303mlx7plyvdqj8z";};
+rutitlepage-62143={run="0gslb7lkinbhlqdgp8pb60h9x6ajypb5991z17p4d0jwifz063jk";doc="11h7ppnimbf6znqla0r1vq8six0ri5ihzd82dj66hhh6ic5pq9bx";source="10k8l66sjzdfrg6cbslx19a8nrvw7w5xaicn78rkkf095pyh1qpy";};
+rviewport-23739={run="06nc81iapfymbp0kxfk0srpxilfhk94xwhslv6az8n5a3bvp2mq5";doc="1m4xvkafdf2skhclg60fjgvyd6vd5y9jrn3186q0hdi66pa7dl66";source="1hijca49b0cvh3w8dqwng6wdssmg2fjjj7ga9ifmziznb2k4qng6";};
+rvwrite-19614={run="0gb5j3hn1s28ar9d30g158xfc2vaavhm8cbmivr1ba32njdmmqcq";doc="09n9p9q4pjil70ydk9cjh2gqxdslnhrg9avfhj0vvfacknbmh312";};
+ryersonsgsthesis-50119={run="0zn3hp9ipjq3624h1kdz1r55wxhawylxkmh6fi7v6cz37cnn36wx";doc="08bylz7p9ygmzy6m8h7w33l4lch9iqnaqnb3nxw30d5gp0rsb3j9";};
+ryethesis-33945={run="18d9lw5inr4fxxk4x4xjxnnvbp2agz25c9h328gi1c3afsmi4lsr";doc="1jy3vsin13lpd8q5piia1klc08nfmhnx0hp9hl8gnz86h53mc5xa";source="0chmpps2q20bkwf7p0yxwp1y6mak5hga459vpji5sl754nzbvxb6";};
+sa-tikz-32815={run="1hmxifd6zkq4scfwybz0j4za911r76v56pczgym1shx8lqadsjcx";doc="16yjn7zpfwsnwg0mpqzwqrlz6v2bf1gf7qd9hhj28kzp0qgdnka6";};
+sacsymb-65768={run="0s1w8975ihjffw4mi44x91m8z5cmv7vpwvbai0n5sm9f21mwgvmq";doc="14mnvqqpac30qwjld1vsa6ky1qni968a9kxlvi8nqhn2n12ng3bf";};
+sageep-15878={run="0yavixnkhy1y69l38xj6pbihzm83ncvnsl6pyr3l310hif6r0wcg";doc="0z2n1511lr2m39vn4bdamw8xbxlw92p5hrsxzrnjlrg39ysymsyd";source="19547avrh6yv2v86w8f7b0pbvh8xvwa5z8q69bxcvhwj0jqjicps";};
+sanitize-umlaut-67126={run="1hif269aigbfg3j1f579c6ipvlqqgs0swlzamxdmplbdxc55i9b9";doc="0nh23n1yhjyf21l9sr8y6yw7v1mil403idqa08prvrmnqhp1d215";};
+sankey-61874={run="0njrbv0wghzsyhhxlahy6gc4jbgyz4q43qzqc3jb8lln6s6yn6bj";doc="0v7pfxj823fxl8w8v8khgnd64g0wr7198071ai7s6bpd9byq3pkj";source="1qr7nfgh8zigjj2hhwsvhnd3dl6933dfaqjidbraid3l93af8ynz";};
+sanskrit-64502={run="1w2qni1pgzj2mafglzyvwfk11csfwz83gbcq1ihqabxsy3wqvpqw";doc="1ss9shgz8q2mdhs2q5128pjgcl9ldw0bz97xwf74346625n4wgxf";source="1sg4dzb24q477cp83wn3wb0w5srj373llhx3fnqc9cmxfb0rs7ag";};
+sanskrit-t1-55475={run="17mqm0iapkf04z5wlj3qpk9qlz8nnq50bfbibikacdanv3852m8i";doc="14g53969gw2azpn7z81kdwc1m1hz8mafrz15kzrfiw9w6hh7s6jk";};
+sansmath-17997={run="09zi9xps6pv6pjwp8pjiz6w4zqa9d3rwqn38167k2dlwnc3ij6g8";doc="103h78a075lh094slfwlh2yk4dbl0wryzmsksvbp80gbv8w7llpv";};
+sansmathaccent-53628={run="0653qd7c2lb63lbgjrbac7kwl2lzygz694li1clwxlkrf0bnv1q7";doc="1r7dqwn7vxgg51jlsgx82kv79fxskcdz6cyhkdbwgd2f3rmkcm5x";};
+sansmathfonts-68777={run="0bs5n1j7gm87a3dcczjmkld4h4ql9q0kbaa07l62vdvsv0zhfb1x";doc="1lnkknp1axxj0aighhj3cmv2y1bcka9f2a0678g1wqc87kh796j1";};
+sapthesis-63810={run="18dfh9msd4w3gml1h187sdzirm8g44dzvdgsnh4d21nnvbbxzhnk";doc="0cy0rhr5lc4k9jz744jy4s9pf8508vqj25xx16qabfi28rqqps3d";};
+sasnrdisplay-63255={run="0qhvx1nc7v6l2gq8c3av4sqsjlzm1raw6cmrf2lls7dg4dpz60pm";doc="10f3cr5vfdgb7g0yw3pjqdfiaciwb81m2gssn0in1hv8izy09krn";};
+sauerj-15878={run="1bd9cvx40skqlx71hnfrnc87b2p1wrw3587fjxlp6a22yhzghhvq";doc="1swlcqm2z289ijbxnv7aib0v0aisqdn4l2bfymvn268siz58l4cg";source="0l5p9c0fl1p7gy815l5064x93msfgb6z2lnvm2x24mwfnfpykrqg";};
+sauter-13293={run="037skfr46198y0vczwcy6dzq9ry8w5imj1ih9nfy9mrb0hmj8caq";};
+sauterfonts-15878={run="0x2j4rz8n2v5qw1j71h2yasjv2yh5g503svjrcy70n27njcic2dy";doc="0r3xc4128x9nz9wqqs9y7a45lfgll99l7n6k87cb2zkyckr0kk6f";source="1k5fix44afwcx3rihmipji2zalc2zhz8m0rcpybpz76mzqsrc1fi";};
+saveenv-65346={run="0j100cr2w7qii9q1inmmsyf5xbk729qypnyrin0kwf12cvbj2b3x";doc="1j5zi0qvkwx4a1099ydx0hwb93cdmf7y2q6sa28p3gpsh0fph8wq";};
+savefnmark-15878={run="09i4rxdm2agj06fwggg9jznjwdgvqlafhmf8krncc6vsj8h4ih8n";doc="07w3im9nz2s72p502gzryyrccj4g980axvihrk5b5b3w0qzlpn4b";source="0wdb9xsrfddi3sw3g4gppv7vn70f3czjplgbr7pj1hna8grig5p8";};
+savesym-31565={run="18z0xwarbkb6cm7n29wasa04d92g2pirlzsr0icnzfip2f4j7524";};
+savetrees-40525={run="0bzr06y314xa1r105vrc9nd37akqcsq58j0qxzlyhc8jvbji9ajc";doc="0c00z409by0qp0if8ccrah81601w8njlsdylj42achqr1f9q8rvg";source="101p1q1in7qp2nrkz48c7wqfdrg6mj7iqxwg44aqaib1wb27g5ak";};
+scale-15878={run="0al9axcipchrzc9a3dscmv3yvzwz2388w8knr4vw51mn72ws12jj";doc="1fbbdksmcrd91sixwkkgljnbk08i9jfhc751vzggrj87l38ym67c";source="19nfy1dcq5bd23dnl9aa8jimyif5sil9lf8b4hspyq7cvzcjcplm";};
+scalebar-15878={run="1q9jqf46j12f9rav2j4ngr52pqfyrc4h9xj66cgb3mcc7nqgmc4w";doc="042xgbjlibp1273400sg7p6fzdzbnv344dgnrs3y93gk6g7vf8k6";source="088k5a86279b7iwci0wzxv5wnqifqiwc5kc85701987x5qiaajhm";};
+scalerel-42809={run="0b4ppffs7zcg3y6i3c6dnjb2rl1xm5rz7k5mxm08qj4dpdhyjfpi";doc="1js1z2fkxy7ixh069hmg5cxm33xjwwg002y64m32wj4ldb7shfk8";};
+scanpages-42633={run="15q22kfwbw6scnx8q9dj3p0hr0m86lj2asy9fp9s0a15xsbhq1is";doc="03lpz3836rwk5nk2sbbyv9s0kvjbw5ld9cvw1n40b5hggivc2sgf";};
+schedule-51805={run="1p36glmixr7qadjj91j9rlzph03rp8hfrrfdqcg1ayyzkinr9a6i";doc="198yxgq4255q9bqjj141d5rvzjxq4rw1363gcwy40yagqs4xhxs1";source="1gc4zpw7ylnnv9k9kbqjf8r83srxbiqmqyy10xnp8gx7xrnbmnyx";};
+schemabloc-68445={run="0vc9hfg5gn0xs9gjv3c4dlrxpsqwp370y1b9v9iqlncglmjcglfy";doc="1l9hqsa743lanyxp4y2p6ifgwrdaxycwnmvdjzdl6ylzv3n4qm6c";};
+schemata-58020={run="1idrxgfzwcy31cdw07f1axv9qxiy2m2j039rj7m6gqqjwnzpdyfw";doc="0wc4vcn0gbwwgf5c7cxcb66w66yl4s815d6m1cj3dv2mcm83cjyd";source="1qblgn5msrnnaap7w1r6szdzphf7dgij48g0h7cyj12dxy8gm9a3";};
+schola-otf-64734={run="01i19k0xhha76zz34ccpq83lgnjw4x7p511ssrbdqmfgrx5q0gbq";doc="1znflqa3myy4x0m7ayg3sk4z7pja5df1jm7lkashrcrr1gjqcdbf";};
+scholax-61836={run="0is3py7zig7whp0hzga4d4a7kfs4h32w1irw4gmrjb3cqndg8w8s";doc="0m73qqh86cpgrrxw8v2nz5al0x850danniqyw8359bl26r8cj6wl";};
+schooldocs-69238={run="0nvywxnknaindq3lfdclyqhna4xczyhldm40g287d8kka7avbiy6";doc="092jvfgy71nl68ljh3xd17z86q03ghc8w7h6r2mzrx2n5rga7z3p";source="1wi1ya0kg1gn6v9wbj9c1f3mg70fjkfg3lwciy7vgmzskyfcragw";};
+schule-68483={run="0ki63lqw2m5f4q5aal8qz6v8ldvlpbgc72pzw2rb58l56m1lc66i";doc="0xm09ndnhf93vyp3mwgns973dd4pff0jrkffjm2sfqfasc0lvk9y";};
+schulmathematik-69244={run="1dw6six3530vyb4ym05yzx1f7mh14kk9pd7187rlqzn9n28vzqy6";doc="04y8fyn8plnq1q01qg3l2i5hw1rdycsfhr6i170kxdishq7zavy1";};
+schulschriften-59388={run="08dsnba3p8nz3hnzh1sd5cd09ngg73vl8yq1h5l8qcnynwwbrcdc";doc="0vaqj4m0yxbbmqf51s107k28l2wms68w3km801lph4nfz8khaybs";};
+schwalbe-chess-63708={run="08aym55g3r9nn20xrc4m576q03lgdfxdwhgaac6j29b9jzac5wxz";doc="1s36x2mnj4ijn2785jvgk7mby9xpamh5ar5kz4ghpw64czsx85a7";source="0ls4xpj78311d2q1vacg4h5257wdf11as6x4k83g3m4dx30hxcvx";};
+scientific-thesis-cover-47923={run="1ggghh7w9grb1l1r7xg1igdw79jswcanyn49rpnwiq5rj4a09r2j";doc="1slsn30sbhxlvr73fk9infwjkw66p5sgv0ydkmarkp1ncybqzr6s";source="1qlxpsy3rdb10xxv1nsn817srdfywq6z1zgb4vb0hy3qnbd2rjwv";};
+scikgtex-66764={run="1hxldpgmp0k6ygry8pni0sz1bkz2mpcifnr7zrsabsx899np0rps";doc="0x73pwz3mwa7gpq9gmmdw6j7mksyknwbaihqfar5hidcg7n45k4b";};
+sciposter-15878={run="1pihppjlynvdlsin8brrhl2mg2jif3fa1mvsard686m4ar6id25f";doc="0cpyz5n70hsp5hjdja3pl1lal1i2akn7xawwcp983mqfgnp8jm7c";};
+sclang-prettifier-35087={run="164sdqd7msilg6jk1ivjzvv49amji4hb5r6wg51vcxmg069apcr5";doc="07s0y5dfmp26j0ayz2bhksdybpqb4cn439cvyifxillkq277dqk2";source="1y67y73f2whg663hw56fwrn6jhhpdpm81w32kzwc7r6sk79bnq3a";};
+scontents-62902={run="0hl8sr63b1z8slq47z4spl0sikxdyr0im7zf0vllspaxqfb4nh6a";doc="1gapcq60n48byiv81czq8h93jhhmhx41iddynl1mq5j2icq5g6wr";source="09n4i1jqp8pjdr9qrk956vr335cc54kr5fjlcdavxxkrwdbzclhr";};
+scrabble-69024={run="1c25d2axdvz4j7n03dxk83bk9033ik4cqmw7026vjwvqwvp48mfx";doc="06jbihq6m7y7j6ivcl69kyd1jw1hkj1ixl2vsl17bgcp4la8i6hg";};
+scrambledenvs-60615={run="1r6a2k4n1h8n8svp40yraxjxy8xbrrj8d5srgz081n2fb7g6qdqx";doc="0ql4avpcccx92n4mqb6cn8g6zbq73238c4ilr4jj5x18afsg5f98";source="04xrips1nk27apwgfgr0qzn29h5nzs1810q66vlfk1qlmka2gszy";};
+scratch-66655={run="1gd2yq2w2v7n3kfsid71qv2v5q1rvpfm49rsk4815pk4k16kxhg9";doc="0jhy08h2v2qf3p8dvh8mz5yqqrdzxnzlx1p50ng7xn88d9ihpqdb";};
+scratch3-61921={run="1in71jxpq9mljn7gvaslsnaji21d43yj6ckzim42fyd9zk48waz5";doc="0yr18cyzdfrdz6vs0slbgzgp82gklrmxh34k1p135g7255gw8k0w";};
+scratchx-44906={run="1rhqiix6dmdf9i8wan5xh0sw9ynawzb080b4izlp06d8vkfzx6rb";doc="1p263dcjk8mjfxzgppkbkh7l2p89kavdk6llkffkj0z8gvg8xaiy";};
+screenplay-27223={run="14p99gph5jvm0h9x8irh0c4mxb7q4208j5q0d8pd1dpmlvxvzsh8";doc="18i460n3p05mx325nh7br1fl3i1lfviy7jgl24yc5hwqyx3wwdpk";source="1fdw0bpf4q294yqnc4svbpyiza9bq7x2m0x5rc0x709c1wylqsyr";};
+screenplay-pkg-44965={run="1xzwvnf16djzsif7ff8b51dq98h2844nzkj2f9y6c75g6rhnyls1";doc="0hkxa7gz3sammjdvglvafwczn54m6vcywz6rwqng8qa2hlvb2c3k";};
+scripture-69232={run="098jk1s4xdvyh5pr90rysmxjhvk26135xfaxq985sazaz6lhm5yh";doc="02q96z886ijc0ipz2gi3dxnr14a67lhffajiqxq1s203m5rbrard";source="1pbdxbmar62z4drqyr31d703lg9yv5rscg2sw493bkym3lw1v2cf";};
+scrjrnl-27810={run="1p858dfbqas8x4ddpw81mf59p47iqj30yban2g70rims1wqy4f45";doc="1rfx2x3kir9qxp74halcwrn9zg8c4lm72jljspw040gpvjpiydm0";source="0b48zv36kn7bg2n94yl2dzwh9ba1fx7phpzljqpn44ybj1ng966w";};
+scrlayer-fancyhdr-63844={run="04cq94rm8jkkncb4g3dy5d0b7c3h8bahby4rsd028i0iiimaqnf6";doc="15xy198pn5illwsphn7x2hdh2x3d3ydqa3rqkiwjj4srq5japbw3";source="1b60i58229yc8mv07fls6an4br8p897sdg18lz6b4a56z73020x6";};
+scrlttr2copy-56733={run="1as8ipxhssfx4hqa4s246gfim09nl35dx1wanfc6p0yk79nm5lz1";doc="0hsyiicb359blk6m4kj5gddlzwphxr12hbrwbp34cjfzkbh5ib5m";};
+scrwfile-66872={run="0mvrg5vqhswmvnpf74ifld6fk2dyczknjf21hwmy7lyca6vn9fak";doc="0jhagc6ab9rfnb3shkn17dhfgklwmz6lg2ln77vskngxia5g9wzr";source="08dv79i1cm699rxpv2h2acnq53ghngc3cf98r7rcgmxvszgqlm8f";};
+scsnowman-66115={run="0xzi49kpfq3n37ryn8p0z8h86x1328az401pmv6iviyw3l4ri0ap";doc="1h472n0ajfc9my3y6ggnihd0kjpiqhw65c7442aidmkwmxqi5lln";};
+sdaps-65345={run="1s9vs9ffjl5i8lax4i5ij7zjv28d75sm7z8frssm1cj0fb0wdq01";doc="18096xagndh28fkiy4sd6nw23vik781w4pybqnwjfy9hfm3h6c9l";source="1l3m01pggyxpnr2nvqnvzwl12lsv7m3lqh7h27l77wnwip7sjhz4";};
+sdrt-15878={run="15p0i40aa82f9lgdiy7wn5vbkbb4z5hzmmr4g52w6jisx8c1w45v";doc="0y1gxcyms3wprp47y2mlfcc68gijyvyc6h10ivif1yydmxq1b2ki";};
+sduthesis-41401={run="1i8rdk8m8bc5lk35p7qd4pqddi3knpq1ylbxv67ij7g8sgrl9xwg";doc="0i7f9zjxs297hx3hd6cm70hkkc50wb1pcr83xk54cy72yqiq119p";source="1j6asblirf0x4f5zp8zbmpm7ak5nsilqf4ksxr4bgrca70vfava3";};
+se2thesis-68255={run="0krn4a0r5vl4iaw0mwxh50h96qgwfwh25b26c82jhs4hdssv8gjz";doc="1sdg6kln5vz6misy8fs14abfvbsrb896gzf32a635qld3ayxb4k4";source="0hr40nj37s4civj4q62c29gdyp2w1yqi8n2ls7f77rfsk32w5czv";};
+secdot-20208={run="0pnimi0vfgp5zsp0iwak0r0j562w59cl1fn3pnp1gwjz65q2229i";doc="1v8j3l2bh055b18zxl3287ardn0ns5qjgbqkj08qxz5ls912y2br";};
+secnum-61813={run="1zpxz6j5is9f2iaj53bqq2m73040lmzn60h9rwp9kzvlafciss7x";doc="0dabcwh85mvq73sqyi9zkbslzbhhns1sqrmvddvy1yjww0lf2q3k";source="1f8dfi9vrlh71bfb1mi2ll0gqcd6jbv5k96jpmvrpqy0pv1i2ckx";};
+section-20180={run="0rqlczfl443z7mjmnmndclbjy6qnqvla89s8yqwngzyms4z1h3v8";doc="14d7576idcbpxlw7hy3hsdd41gpiyksb9ajwnn0jm1mk2snzb51b";};
+sectionbox-37749={run="178z63iys35al6g5lavqgdd1lcadha9rp25bzm41gyg84f2hpljk";doc="0mk0ijbrvmvky4awh03y2q14ks4x9hr2pa84ia0380xfx56849kp";};
+sectionbreak-50339={run="097mwp2iqg6rk1xxlppqnks0j1k45b0hlrg84x12y0cgrkd7cdbn";doc="0kmfpgcga24kpzm9kwc066a6m4kzw2sfkhr815yc0y2a1agj3zfw";};
+sectsty-15878={run="03ixlxxs2ss5lrmkcwilrzi7r46krh21rli07y2j79p8l23n7vrh";doc="12xkczxiw3spyljn1ay9z0xrxdg9ziidnyryri4pkmsh5k60wxw8";source="0h94wh43pf8bphafhcmpsjzj26592c30pih0x3p7csv8dwbv6js4";};
+seealso-43595={run="1mqy9br1fz73q2l6czmhly8j6dnw51d50dkfh9622793z0a2cl71";doc="13sg11r8d8bd9gmscprqai5lbjwfvr17ida17836zagz83b6y16k";source="1yv4zwq6aic2wb5wiz2564mh531i34r9sl87y07yk1ad89kgjbv0";};
+seetexk-57972={doc="1bhv5xgv8jpam5apdybd0cggnvcizk2r6zs7lim1hmhzafpqqlcx";};
+selectp-20185={run="16kcbpvjsdc1ndhhflfmnz0igjyjc5k62gcfly447w7d13qsg2s6";doc="1frpv5dbxfg708xp03hs4vkgqsxjihn3yk3qvcpns6awjlfi2n9d";};
+selinput-53098={run="13pxqr1mzkblniv9rcrr5aslx887xjahjj9f27h7hpx6r4g7hk17";doc="0pbqch586hfwfjbm68g7i56d0jcgg6w26k6g2qlfdbk8mjpc4r4v";source="0na8byym8s2y2jyi1691cnw46izri0y6ybf3g0pmil2hpxy544ry";};
+selnolig-68747={run="1xrndff5if1jbk5vzycj2alj72r123xjwmyr1lrsjkpkp6jqjg0y";doc="14ppr67fbhsqi6d5x0f40awac7j3i90kk7mwrjm1ch1572im5dhc";};
+semantex-65679={run="0hzp5i2zdnw30s5kn797bwz0hi8ldz6x10x6bgp157n9hvipqaj3";doc="1kd48bj4w4rjk8zswgxgjxj470zxnicr7mbq9lb7crra6ldprp15";};
+semantic-15878={run="1vf341vlmgc00d6srdwjm0a2spad674439ml9k6ir24pll39ia73";doc="0rr5kbn1yzil4h0j42v48m4mkqk8rzwcn05rkn8vs2s13az6djna";source="0x2qal3q0m886lw5xd9w200fkq4hn34qs2kqsr7i7dcq9xwl57qp";};
+semantic-markup-53607={run="10ahkdiwm4h5mwigkzgjiq2xmy1lzgjdif11zajwckv2xng5ckgc";doc="14gv3pgdyjjjj8l8vfa2pgzafyqlq0666hbk0cz6497g99z4ga15";};
+semaphor-18651={run="1fk3qdnkpv28zc8q172w9yn1aq8ff9ag6ql2ghh8aa64j9gygdsc";doc="1bq53xa67jshwlynsbqhf73jgy6pcd8hhdc5dbh83cgma804fyyh";};
+semesterplanner-56841={run="1d69y3s4hhv0lpf4ljxg7r5zg0g1fhjw9b30hhpkxvsbfdbl030p";doc="1a7a927gwspc21drqqb72rymyncip4b15w4q9cy654zdp16b5i10";source="0v66xizbjvlzvxdwamny8rggwb0ivwmhlzpjkmm7p26s5l9kd5m1";};
+seminar-59801={run="0a9sg439ahhhbyb3gp83hvnj4ap0f67xhnfj3p2i3k5ch7chkdd2";doc="1jlrrqasp1rf1kb2bjqlhs61l81h89y7bhi7x2liiwa0vyfva7s7";};
+semioneside-15878={run="0lmr3fxahcln1sf6fg4mkrg8dl3k3670wmz14kpyzd131g73l1iv";doc="1n7iy5qvd0f1hxp025w9x51llx8cwly4lc107iq5yz9njdwn1g30";source="0vshjv6nzbp29yza2vj4g8hfx0sbbgnd1s7ck8ms68zcv23534j6";};
+semproc-37568={run="0yvs0kqk3jwq5yw7b8wwycfrg1v5q47mdq3bprx7rb1yh83ip53s";doc="1ycq0qdrhxk9x9gbhigz3vpldc0dfhb3nwmz5v9i45v0l2m5l3bc";source="19v3w2y9406r5bhjchc6rsfb2brrw7f7sb8ikmr8586gdsnwykk4";};
+semtex-56530={run="151sfla597g5n0nv676sbv5m4kfpmjli7ddhd1yzsiqa3axw7vhm";doc="1mm9ya9ls0ryfxzkss3lfmslw9wrbcq9d5abf022ifbs5184rgnr";};
+sepfootnotes-41732={run="028x18s5c1jxsw97idpj8fmlzs6h46nsgd8zg0awikhdmypl9ac0";doc="0mb7fidrjns48c06pk7yfq3csac74a13i3d2cgfdvn7lxz6lp419";};
+sepnum-20186={run="1gawca8sqgvkgc92hrv0mjhdhh9nqiafxg2ssk7m1r5dqc091qg7";doc="19skfqlaz82ji5fzqzgnfaz642ms71hqhv2pavm6a8ifish8wcj6";};
+seqsplit-15878={run="0m1vlslfac4n7fwhrmcl0swx1rf80ks2p3psrszwd8rz79q6xlc8";doc="1wbmr7hayx3kzwmbr1w1hlhyyzz84skbahd03bw0akbgk0qziz1p";source="1ibiys9lfj92mklzf4lvdzn192wv843zxkv91grjjba8cvn12w5d";};
+serbian-apostrophe-23799={run="0anhf0xj3pm516sxiby2j3pbh0cp50ipch2s5dh037h8bfmjgsbv";doc="1r7fsgsggbr8gf973a8nzpq4rjjpmzbcqnwc8qrlynfiscwc2mjf";};
+serbian-date-lat-23446={run="1766dw6c8skacjbbcd0d2lvy1s57vjl84c12xf1w2q8kh6p4lqk2";doc="1k8lnnhb010rq872yc9d4m8s3vd1my93qydv7x8l80xyp64sq203";};
+serbian-def-cyr-23734={run="1zxl15y1j964sp4iys1rl4gyaqs13hi5ms9rhc7944p36rdf32p4";doc="0nwfxr85nf19ddk9b7hhin84jpimsx2hm45nzh136qr5jnr1g3hz";};
+serbian-lig-53127={run="004bfyajczp11w6bpb7zfyjwfpqwlwzian0m68qhmb3j95vrs3nv";doc="1yrwmr8mjhqnizsgvar8s4xaaw1f70x6zij5z394a86ygx1gx06r";};
+sesamanuel-36613={run="1a6673xpr0q8v7wr1rrq3n6acydsfsc3q6kmj0qg6hm7lzqc1f2r";doc="164hkrwdgpq5azhr9z2ganiwhzqxfaljm89igzprgcg23cy0l3vh";source="0n1akz8757l5k2rv188rnqd90dkmy3xppzcfwahiy22p4bzaw2aq";};
+sesstime-49750={run="0nrwgky0rh7lazd41h3jxlb0kgpk5q7hhbgkfdab41zrawjp9y86";doc="1a353bn7z135bnk2a8q57x4z8d03aimyjfqx3w9x0r81rwzns605";source="0vrwbbmfwfqpvsfz31yid9rxzdc19749fwhlpimx30arqpd88jhg";};
+setdeck-40613={run="149m9s33isx98vkl3498ywjy6f9q31jkw8schc16hxxm1z0jadnh";doc="1rp64i0nrrxn7l2g6dlcmfvwbq3rg62h2ifxrzfp3k5ifnlkhpz1";};
+setspace-65206={run="1h2cwbh7kb2hf3s399x78ij2mxj4b9pjyxrc7jjsr4ldx8hvf2by";doc="01v5nwbkap93zf90vx4a2whwxa0hbnscqqgcd8r865xfnzgc8a49";};
+setspaceenhanced-68493={run="0jqlpgv868qvcl5v3kgzi9dl2r99fx7k8frbzd3fj1yfmjvzb1vh";doc="15ln2969hhaic7zk6g7j66b5iqpw1css0qgwnppwfvydyx1ln6yj";source="068z20knb02jccvh3qm9a3rzpaki5r41is38v6ax9a2mxmv36y4y";};
+seu-ml-assign-62933={run="1cz01iy83gvgg3mk54vkc373smz4r47i8084jgcnr24c0gwr4h3v";doc="0f780ydm3ww7q2rar32lxadzda4mz8bccgman9j5ibwfsdnc1jch";};
+seuthesis-33042={run="0yfan3cpx7h7hrnqncn152ccawlrsaccj0c53kzza0wnkr3hc9rc";doc="1hnrl455lz61y9ybhmrvxjb66y5816sq3yqb76zszrscxh5a8h5f";source="0dw7ipk6l0mwgrwrj9sxg8vidwmmy22vmpwm6j2ksnznz0238yf7";};
+seuthesix-40088={run="07vjbiycd00r1daqg8m0b6g9k97ja0wn3s4zx7774av6p2hdhllj";doc="0j1vphdi9z6anvw7d3a20nasrdfgg8vrn9jh9wi787f9vy2xzdlz";source="09qpilk53k37c8dzc3q3pgvm6yf7i7a09ln0yn586wslvm2dmmhr";};
+sexam-46628={run="007lxpvam03cvldnq9q8l2p60iymfijs2yc30cgj7i1lx44630va";doc="17rn2wf68f16zsr8p1dk3klqapw251zpqc2a7z3b7lgl4164q57w";};
+sf298-41653={run="05px7n24nn9rlrc02mgsndzxc5a397m6c0n3sbsihq0qy9zl6nqg";doc="0d3fh5dglipskc7cjcdg2n836qnhfcdfkzpalkck7b85kgq0zrbg";source="0afcavg1zs5ldi9fjhsnvsph4xqwy8jkhil8jlcqcqbq39z73pq6";};
+sffms-15878={run="0av956vbxjwf0pywp4hrxag1ypaj59314i3xqinq7xhwwxlr7g6b";doc="1aq8bs7bsbrzzl2bp7mg2ckccazk107ckjl7118m5d2rk0mf09pi";source="0fl3z3f3pm7060cfxn218ycnf1y7id8kcll960h9jvpqkq3dhx26";};
+sfg-20209={run="0ldw6c8aqqd7m4ahziqv857zkjk3ap12xnnl5k43dcg8n7apb3ix";doc="1d627ks3av63b142f8kd7g0fi1f4xzq0yg219fj8qxja4mm5jrv6";};
+sfmath-15878={run="05m3whw5xkml48yx93j9h46qmspnr5hwsfszb59l4wy4jfj66zk4";};
+sgame-30959={run="1axbv7ss7nh6nj6dzs4v0g6lqccm8vyvpc4qfv2aqij37qlyv23y";doc="0nj8n049lmin4j90an75p9bqillwx7wgpvxdm0jb1janfip4r5qj";};
+shade-22212={run="1dcpvvk5216znr2i0nn302da6vjixkih5nwix9m3hlmrd69z6hcm";doc="0xs86yjd9f6wlgz0dlc89iryh4rba3752blz07zrxzrm89fdq22c";};
+shadethm-53350={run="1miq7szfh1nya53vcn9kv3m8jb1sx8p1v7z5m3829ynbyiwr7z9v";doc="1gbjisy9miqp0mrciz793vvhj0a04vaai1ixi6vzplhlx9gknv6i";};
+shadow-20312={run="1avy8291hmmvbrqdn4yza9w8w7a7hbwlh38sl7288c6gh1hkyibr";doc="0rjfdi2hm07j418q3fvrf5pxflh1nfkhrk58nsa23fixxzaw5nlk";};
+shadowtext-26522={run="1pnnskcw1nq6m3rlvsa69dxq828dx0bgggg8n2p2bxnr9gmnba3c";doc="0lfvn68d48yh8smf4w8c1is67chsfnipxc82fx6mal1czlyn73hf";};
+shapepar-69343={run="0siq7d3d5gr91s3bc5873540b1ia73ggkf1y1bs47zb3mh4z9g0b";doc="08bwm9a4rq70swqibj9s0i4042fnribqz93jx02xd0638wa51pph";};
+shapes-42428={run="0ww9akd1cf6nr9jk00qrjc8j0d9ryf7f8hc5ywmnz1q1z6mk1fqd";doc="0qh721vhyny3xmkwiaif3gdmk2bhy67mvyfkc4hxrba8lddnkfqm";source="0g3xfni1lmwdkl2jmprnhl3yxdrmilr6nb59kvznwph10h1c7iqd";};
+shdoc-41991={run="0casdf6vn89la2vgqy5zcc04nlsrqpiz0zj7mwlf6w2zqcpmr1x6";doc="1vzz7q88xq2dg3r1xf4idgvdqs4q4w5lplg9rvi867qa8qcf3ly2";source="0wxd21fs45f9d5y2ml3w50d7z8ig25gv34iy3mldarnqi2v64p7z";};
+shipunov-52334={run="01mckfm6ikchmld5r8mdy5x472avh473bfc7lk4rqan8p4wivjrl";doc="0k6x9nxsqcg74z9i462qix58qycf3wjii5ld13xajn04g52bwvpy";};
+shobhika-50555={run="128p64d6bc0m65nwdrjr35b7rxlx21c025vj8bk6n1frfg4k4lzx";doc="1zxg9rxsdf15jn0hn81p20j0dbq1095vqrmh7d5mzhlhnybkr1kg";};
+short-math-guide-46126={doc="1wjcjgw0xk4zx57f364cpl57qpxj3lq4lahlkbk6iiin1h9v2prf";};
+shortmathj-67201={run="19rscnl84f9x6r7kajj6wjh80di5y1mc4g4nybafnisap76r3c06";doc="1kzzbkv36hj2wc9kz1wjr5dlgx3r21vlyj7sy8m8i72yfnmajgbx";};
+shorttoc-15878={run="0y1sa1l5g19arc5wdnqp0jzvqn51m4gb07acpcp3ajqq7n7yaf3y";doc="13nlpmb1asrx8vi08kb6kcqg6szhnzb6667crj9xchbk3zm9iyil";source="0a3hl98rl5qadx1mqqla9hw6i1s3324i4la2kwdazhxhvi6nxm0q";};
+show2e-15878={run="0mhpxhvgfnzwwzd9ahyzdhqxzqz9sj6vldrnbjy4n0r4fv6c67pi";doc="0zfir9yzh3mgpkldcak7hzal0mwls90h1m5vxiax6h2izfkrixfm";source="1lnhqxazyz2gfgkgbj7l2140x81bgsxb71y8dagcqazjzdmqgcdl";};
+showcharinbox-29803={run="013an5sq2kxrfs04k51ldc9vkixag1lbicl614sbj3n3ixgk15db";doc="1zdxvlj1jspgkws4xmwa8yy7aaxqwr33lmzkicg6ayy465jmfk9b";source="0b8hq68lbd0xjyd1cj3qsw1rd4rvjsihd6s9ab5v3a0q1sm5kaw3";};
+showdim-28918={run="1pb5qddnvv4kl79fcp20zkcfgxm8p4zix82g9431db3bbavvmkri";doc="1hc208xi8c4ihxb9nsk6y5p6p43yyylqh7jgy8lai2a526xm2hgw";};
+showexpl-57414={run="0gg8bp3pddkp3z79z8wkh9263gnxhcn6vxhgp2mq7w8i166rrsyc";doc="0dv60pc2p19bzr1fj2hqkgyjry9j8ykcgsi0v3xpvzh91ic9v5q9";source="002v6m0gzzx4kr8vnw75czn58cmzjnyyfyzi2hvfx9ykh7nmibng";};
+showhyphenation-67602={run="1qbgbs9jc2i2r572187p925wjyw6zi1h3pgpyr1ixz84ykdjc2n1";doc="0qrvpapyby3bbaxh84529fvhgpsvsd8xv1020q832ad5fay6rm10";};
+showkerning-67603={run="05jfqr88hcx4mq1fq9hv47921d54947qqa3jdgvk529d0487lcqf";doc="0ggkfgf7zb4jn6icnn43w4jzlklkdw7f0pqyksf00mgxcx041fh6";};
+showlabels-63940={run="0v3azvk9minc28bs6n7g75c0bimnf2ilw1379fd8hic59h1vgqja";doc="1l46xsay07ysg4d63x7mxkavvd9cnjwmfcmgnsh1pg4icpyhs055";source="0vmh36ia7s85bx51hddga0mxb4lcfrmxk31zidqk4kkpqmf20mj9";};
+showtags-20336={run="04m7f6i3992p93xz9rlfa0vnil6h9dyk7gy1v7ih47f1m2awjak8";doc="0i0iaz4hlgf52g68znl5a3q366hd8ygad2khjs3y7hk1fwqpz45h";};
+shtthesis-62441={run="09g79h7dwc0v06h06svj3h43q1xf31fli33xxlqnckz28i1a4y95";doc="14fqspd33n3r642mvmiamswjl4qjda2g7p62amxs69s64cqfliv2";};
+shuffle-15878={run="0laiw8v6izp53c8y0jf4k1nb8brvs36gd937nz2i2cvnpghz98if";doc="1wd46l86h8vlxpasvhnvjimsfrhrbs56i767v2h7bdl8yp751ycl";source="13qz2jc0f084acxdsf99fj22kbsjkr6i3y7pqzh1g2jd4d8bbw8m";};
+sidecap-65618={run="0g6j4mh0nxvdvqyaz0b0756y1xx55zxwrn761xz39mmw3sca3yzz";doc="0yynp2qmq6df47fzns8jq5hkbhkj8p3il3prq4l7pg1129278my0";source="0h0s7hpmx4ha318zkz6caxq2ckvwxxv2fbkjy7a3pfs7q2x9fal4";};
+sidenotes-54524={run="1ip6ybhfihbbzflafcqfhspr1d1x44285msahf7f9ilmhd4536x5";doc="0f4nqbw2y36ymgcj7ywy9gf94pcg09aqk4kjpankksgwmvyjbsxg";source="15kz5d5038vi03siq6lbbf97nng1024hx8zzgrasm304sf2c0ggl";};
+sidenotesplus-69176={run="147si778pbc8vj4jmclsp1qkjn68qli97b2jz8c5ij3znjaxk42v";doc="0vb5r7bxj9xn1nkzmqnxh32ar87fy385rf2zpggahld9v6l7phbg";source="056mv9jqp9lgysgk89hh9wwbnwi4q477zc3cw6c7hkm5wn0xcx7w";};
+sides-15878={run="11anl2mfkzkdv5qb0rfw7940z7hy5i43d8hh9nsvzgwfsw0x1qkr";doc="0gsqb1hzhy1qk29lhq57arzivkwxw1achz08ms1q8q9vxwcsf0sz";};
+signchart-39707={run="1qg1r76v1llj68iqk5imp7f63774ky68sv64xa6j4w52jkkswn1v";doc="0scpaw7l26fcqylcqspd0g5va331yf88a8wc69diw78haywwgp4f";source="1lx77qldn3d23dvs11giircs2pafm54094h6ipxlc4g39g7xc0zl";};
+silence-27028={run="1zixww8d87jymdvxjzjhvhjjr5f8fxhbjwqyzivki2rhw6dpsp2v";doc="01qb2z62da0ji751i3wbhq10rfin23q20r7wr0fzvqv163niy93v";source="1m5xiy5j8l0xy9731mf0jvk4f6bh7d22vbsgpjpvy5r0vxafgxwv";};
+sillypage-66349={run="11r22wb3701sbkdwcz1bhmiaw5xv0bajzhfky1yld05w5phzh21x";doc="1cdahbjw4p317iyr0drpvqw317cjlmzkpjw9s61hv95297156cl6";source="0ya6g5jgpip7b18av75ifia998z5pz3r1sixa44f5f1vjmbxvy4w";};
+sim-os-menus-68843={run="02gnf1js2x3l3y01hj10yy1b1ymkmpf2x8pl9qrhsx63v55chm3k";doc="16bgnhiqxmk5z1ifgci7pp0lm9sg3xh18irvrgbwmdvd088cxm4a";};
+simple-resume-cv-43057={run="09xsryzpnq33wja6fkrxy4ajrci6xcn0bx0mbsw37h0q0h65rp9z";doc="0gbf0rg3v1ivw631yl133iamh7kadclr089rby72al50xwnbi559";};
+simple-thesis-dissertation-43058={run="16byfnhfd1j14911xs1448yampvvplxy8l54by4qwq01wp7pjjmf";doc="1wrxjkgbvps1wyicwlhkx59xwb3vcy1n0wf7r7dllw11r7hdg6f4";};
+simplebnf-68959={run="1bcg213dww4ngpafy873ralbhp901c6xrsnvryzpgk5jrqw2d2bj";doc="1450ri57ci113csq9z54zj6284s8bn8rsl5y2xidl76rz9hdidgv";};
+simplecd-29260={run="0d6gw59xd1mqc991yy6k5jva88j66pd69k5sl5jrysl4rw1mxxng";doc="11fzk8p911v1myphghzpmkj7k62vk4sdicirys1jh8rd2cpnnwcl";source="16g6fcsr0nw7isqimjq29g0zyf72z11qx9xz36zq8z4khxsl09ln";};
+simplecv-35537={run="0b7p6d8y7xa8xs9i2qyljk2s992gprsr3a5pjalkkssa5kiz3371";doc="02x3nwmxdk9spx5crlaw1xdqlwah04m88zrrw4wdg0qjnhvv4mvr";source="05ikxmvflqz5m3qallwgyncda49dzq4fibllgc1j77pdh99cy3vq";};
+simpleicons-69396={run="0qb0mr7k1fypanyw0lhldmqnxynj7iymmyn40yy5j8nzfxz44c8p";doc="0h2qfijb12yslabq7yny5cmhlhjyglg7w1dwbn3gph2c5z7mlqq7";};
+simpleinvoice-45673={run="1mdc6aij1id1jxlbkwfdvdv87yh55v5qyazfciffpbf91qm87z0s";doc="0lvk87l3xafl4s303rhmksfajnw77qd90yvzhdk126dp1prh7i6p";};
+simplekv-68439={run="0cw7n0skxgxgar8ks5nlcn70pyi60zi7n2crdbamfw3kgzdqhqsl";doc="1hqyfflwjdxmq289ngc25gbjm2mcvwxzm9sbfp06xszk2vhbjd4i";};
+simplenodes-62888={run="0rdmcmj583i81349m2hwdf0wl4glsfkg5vkmhlvzndh0n55ivj3a";doc="0sg5xs96agly3r917fvbs8mxii7b3l9hsqf2cpfpx5gwdlmwf0d3";};
+simpleoptics-62977={run="051635sr8yp7n44hw9wza6hw0b4av87yp42wkxwq0rshxldqgsq6";doc="1lwk3qq1rgkgi7qd8qxdjjfrnk44c1gj4vl01m1jl181dxjs7lp2";};
+simpler-wick-39074={run="0lm22wdxiwasv4igfsyjfi338qc7m985da7a9a6q8cm63hks2alm";doc="18hmx8b6zpsc98mmjvimdayqpkffwjjch4sjajbz4csjpza7nl98";};
+simples-matrices-63802={run="09kmqq2si98yg3ddnlkddn5gjlvmwd8w78r9d2xvd7g28wm1hjbj";doc="0zbg9ppqj6af49braf4hd9b0fklxjmsr7yjgbla6ckbkwihkqssc";source="059wa3qyaxx7ha1xw98rwa9w7v5nyhq5rfmajhba1crnp155x73p";};
+simplewick-15878={run="07rzphj6ffla4qz9pa31xnn25d420lvsnmgj7l78ryxai5amdfvw";doc="1ch7yqh3bv2y6282cgvqzm4pf5hgpfvlmpg66zcp44wnkq1sw67d";source="070f0zrnrf2sh0dx5dlbz6072b76f8iw03pvywhyryfgghfdfv7d";};
+simplified-latex-20620={doc="1cgf1p7p2ikda1nb0c2vhhx7ai6rd973pz6a00pr9yanxsvghp6d";};
+simplivre-68376={run="09x9c7z98sdv7zw9kqysw4wcfg3x76rn2y4fjwqwqa63fwy9ky9x";doc="0m5bxr5gflag1kv1c34jk78lsv8d9hsyqw6i5yhfm3r7hb1z0ki4";};
+simurgh-31719={run="1nhdmdi6qbvx1nd92hxl8vkly82a9nxi7ghj0zpm31c15z5pb7rq";doc="1cw434sxnbgq5dbaidn3zn8i9az4q35blcx9lr6yf3m0yy2rl8by";};
+sistyle-59682={run="146493bgh2ghbscq69bxsngjfkl3k8g68cy5j28v07lxi3ywr6n0";doc="05hs1wd3wj8szj16wnmjfiy0g0hxgy2cc9ai7q6ys77kgjb0dpfp";source="0sb6vbhnqlixrfy9484d8im3vmgk58y7nqad9hm2gkd4p560cxj9";};
+sitem-22136={run="19z6zmwriwrlcpgdgn5yl2bzbz0fkn3p8g5hrwd368bq7wyfc8mi";doc="1wwnqhl3ffqnp5qxddicqwsr7515g6j53rx1rgi9b5z3cv42f5qj";source="0y249krv2h241wy8xbi5xjrxypa56zipi8fbmqbziw9cjjnz993v";};
+siunits-59702={run="06x797504p5lzb3xlkri1sc9whyjjz6a95gk8kvpympglm8fmpxz";doc="06saapj9rh5gbrj0npb9rm60xrww8rl1y5brvx97gj4qvc3i2pic";source="1clhfsmydg2xjajak0ssa9v5sd3id957si5zvyq3njgl9cpjwi9r";};
+siunitx-68844={run="040pclva6m2300m4zrqqdd1jm608yw3rpldf63scmhkxgb981iil";doc="00j5b599s2wdizmhk8rr9k1894nffa6ynaz1wg6ccm8ndzsv6kp5";source="18a9xwb1zaay0mv8b3br6bg2dm016z1s9zbavalz6psr8wv59lj0";};
+skak-61719={run="1lh97kc1hmz3ybb67zr7vr74z1zngwl2cppkhmp9cagm48j24am1";doc="0abiardppn7hx6l5h4zh92b9m2yf3w16y15rcvsspv1cb9sf4lfw";};
+skaknew-20031={run="14j42hifh60p6glfp24c2f5k9k34vcm0l3alqfqhvv68l31i05rx";doc="0i144akq7sgs6kwayl8c2yir0kc7czjs49vj6l5lwdcwbyryhh21";};
+skb-22781={run="0k441znw2bn13aiyc6b5hskl76hbhcpilc1xg4jw837dbj2v6qiv";doc="0qi7l9ky0y65cmcp32j93lhwlvflvz8didq9c77faq7ffgzz51s8";source="1rnraidwhkxlhk09ppa5k0ndqhrra4asbpjwv2j5dgf70wfm5vmh";};
+skdoc-56950={run="1bqgnqqv5806f375xjny7vjd831ymdnhra2rbgh5hwls7v9hwp4j";doc="08g7qrmasrl302pxq94dk13y2bdbg6ipxg4f774kzbp8zwqa2xwv";source="1qnyh8gqbk6dhkga2v9gg97q0cbbv8hpcc7nwjskwckc4jxplqwy";};
+skeldoc-57922={run="0fnkq85bidvd6m14m90w428ndx54fj2855sxsajfzyid63jrfa9h";doc="1jgg6h4cdz6ir7ks61lyq9ixczmhdcs34mi4llh767baffvb8340";};
+skeycommand-24652={run="0z5jpznmx09vc5klsvp4hldmlgyp4bwz25gp775kbmad8azad1x2";doc="09gmmakvxhvrh7k06vjh6ly1hmax1z5x7vqxyqdwi90ajh2zkmgc";};
+skeyval-30560={run="1an6ghhsq5nibwas1csypz9vmrmsj7jviamig1r9zzjrb5kzs65a";doc="107higin87d7kca6753f8f61yk3ypk5hkidrbckm1vzn2ci515w9";};
+skills-56734={run="15ra36iiz7i9qb4669j32b26hzmjyx0hann3kd12769f2khb3ial";doc="03j6cj9xg2fhab2a048hb2cs2ddqac6x7zfcf7p9s8zgzyqqi8s5";};
+skmath-52411={run="144iwn9hv4d71420878y7dzygmyyyr2l12gsqrbb44mdal68q58p";doc="0an8w64z7dvbxgagga33zar0m2l44327q4lpz59n75g7c6qswnv5";source="0finxgy2sj5wpzmjh5zfcq9l3dzka1mlffbgmhzp7yk57rrz9lr4";};
+skrapport-52412={run="03y0arbbj95jnicmz9d89vsyw178hw1410vy3ydvf8j88j8z57sy";doc="03b3zp8w0m5kffx10j7qnikdfy6yznvvzlg5hj30nxam4za51n91";source="0vwhckxi676ygxc18rhcsfnr5kp1j5697zyn7ir5qxhm8vdmqf33";};
+skull-51907={run="0v3kvrk5aqsfna30z920k237jql1byy12qkb5i8zlr73z4cy1ll3";source="17iby2rcnqakykglv9k1q5zmcj0h4gj4h2vadihvyyz6m6bvcx0c";};
+slantsc-25007={run="1a05zrd8bqiqgh2bwlll2wspmd4xnvl7p8mz3g4j7nkvx8bp4844";doc="196sqfqgxc7pfyi75d0nqy151if55k3wlvpq8ai7647rmapn17np";source="1jw70y8052qvjkr796sz9w0c6kdyammi3gy5v8iq0wwmf38jl8qf";};
+slideshow-15878={run="1v39pb9qdivrj26hpjbysg3hbdxfd247a346s5gdffraymiy9lcl";doc="1s40c102kkaa24w05lmlg1kw8fwlfnd5vwbfqlrf4y8807izbj4s";};
+smalltableof-20333={run="1g0kh262h9xv5zr2yix9as4ghfsrqnhj8y9gzb66xk90i82pri0j";doc="1q96blk44d3nv5bihz81a25a43vbf9b86d9w00cl9kkin1zzkf6w";};
+smart-eqn-61719={run="0bjkvgyd67v876dgzp6zwifal9dy6mlhqvjn2rzrigrddvvn3j87";doc="0m3ilj749zh2apxr0748dhhm6bfs0a6gnc02azjsv8wqj32bdz11";source="0jxbyx3fsgqmydrzjymqa3zi21xigqpnid46y1izam8vc1m78w23";};
+smartdiagram-42781={run="0b9rq06c0xm9dpd6yljvgay0p7xpglpddw10vlf5c50wma4xqjda";doc="1gkgpgnsyxv9nmhnpalshf23g0iz7bcp4agkh7l368j2h48d5xmm";source="0chpnchdqvljj7h44ybpkln3b7kjzr7b18cj2qhj66ng9cwpywwd";};
+smartref-20311={run="0g8dy72b8q65pw2zmcs2yipclpx3g445v9snjnyxbb3q82asqy5v";doc="1nwl85jj0d97djdqkczdw3544vhazy57fx8psdcvfdncbvpk84jy";};
+smartunits-39592={run="0jiz4mhyf4zaikq0fi4jvan27ngksrv7z5gmch88qj7fapg4xhna";doc="1cw6k8bvj5xakh909jq3x527jnmma8wa7dwp1za8hsajwmmfzxgp";};
+smflatex-58910={run="1w55jqw3m1a3s28hkv68vmqmbh14c7wnsv88z5qhmyqav1nbb13z";doc="17pffyp6d7blwz0a2yjdwa84lim9b7jbg54q5gknmwi02sqdqsb0";source="0xd02c6zzvx9av0xjmv8navff8ik9ibanmid9kls10jancp47waz";};
+snapshot-56735={run="0598yminjxp01imxrbzydqjli0i2ws1f9hw6f3qhs7xykfacbaml";doc="0j614bp2fydpzr2lx9xamn36fn4x0wwi5a58013ds2a8iiha6k1l";source="0bh7gy9inl30h8y9v072fh2malc07cjwizgxc6wvm07n2x3vidfh";};
+snaptodo-61155={run="0wxnac52wv3aknjs8vsw17ghxn77xiqffn6badyp0scyr7gvmkbc";doc="0036gs7ybs2ilhp4lhzc489r5ai6ffx0ha7fn674qzk3qn5j7zkl";};
+snotez-61992={run="1nq3ggbdpkpydaqzpfawvvny8azgbmnbwpl00wsl4rhi7jbqsfwc";doc="1v82nn2y2kk8h34j8gidrzlx8nwah5wmdk3qigw8aa1q7vrkj5h6";};
+songbook-18136={run="1qknajn3s4vpw68hwn0mjf9zllhba035gjgiwj807nifhgm2bvpv";doc="08p61v1jgw0s2bdfwgmb1zw5pyldfsy61d09n6qq93wclgaim7lk";source="1xzx3jxp4791imxw6h7gs1ach94k1w33f4p8pd4rvlcnwglnv9s4";};
+songproj-66704={run="04jnj92nva8agg4k8qgfqcd7rvwhvhwx3836464z66fdv6v4q92x";doc="1qyw11czqdhkpyf190asx8yi4wmcyxc71n052f5481p3xbblz1bd";source="16qcb0k59kkxmqavywdmxy373ck923xn8pjfzp6qssgjvssnbnar";};
+songs-51494={run="1q2fddi3z3d6f03y110ah1lc5j64cgg16w4hcxdd1q6sc6ccc61r";doc="06y36cnx42yms6b3mnpkvbwrl1rrpjy1jlafycy33ijx0sbpizql";source="0airs4wvpv2wmm2398sfy5sh40q0r2skha33999fkk2s9jc99jbb";};
+sort-by-letters-27128={run="0gjmbx6bk2c3nygcbvwn3wfsdj1lscpnqzfl6w8li26hws1ravii";doc="1p0dfvh0l4z4bd86wcvph1fcjip2rvsm22j890y607lfbqhc72kv";};
+soton-16215={run="03vldli7z2bsvznmqw5y6gi81ln5v54jbiqm53z464v76kp9w29f";doc="1i7b5i8vv88cjxvcm1adlxikqwvbzpzkiiksdn36in8msj23vjkm";};
+soul-67365={run="0hkxhwqmss7lsh600ggs8q7qx0dlgw63q482m8piwx0jmh4p29xy";doc="146ji413205b7igjscv9wfybs60wyn47d9q6gkzn8l23wamrzxwm";source="0lplpmk05y85r2rjzjh24p6slmq8319kn7ixxb3zjbzjp1lc44j7";};
+soulpos-60772={run="033c0arpqhrypwy5grpc8c6dnlc7k86iq5wglm6r02bdk4mcw7hk";doc="1g99lgnl1m7nffwdfhmmb4zgjwpaiq3pggbgmi19p24z7qc1sjlz";};
+soup-50815={run="00glliinyi7m5m6gkr0szzsp5drgnqww4k50yfb6p3qv1mlkqgvi";doc="0470i396sk8a6lnx189zcazns280qgyw3yvwiyxc1gs2wd812qr1";source="09db050wsnmpqxmba7w23h3g92xyzg0sqv57yhns5nwxb2cmbr2g";};
+sourcecodepro-54512={run="0vzs79a6bhvxap9xw9nm4csqm8x6m83nmsxffqckihkrbcbwnkz5";doc="04g53xmi3afzv76dn4pg9vjsd903rl0hbzqw32gr7hhgh60xwb8d";};
+sourcesanspro-54892={run="0j0qgb04yvwf265hwiiv581fy39cpr6i9f21k38xdgdi0dl7ghzl";doc="1lg7jxxcymnvbrhgdf6ddj0nahbr6g5vnz7ahav8v8zfyfw87z6z";};
+sourceserifpro-54512={run="1zwvz4yqvs5pcqwsig4sjkp4chsc089j0dl9mn8ah047nhr2d7z1";doc="11q4ppkw8m56bpn8s08w0zkiilfz6s5jv0rkqjnqbzn47nm3dqij";};
+spacekern-67604={run="0jf5rv2kqzfr2ji8w4x3cgli028rhnndz5xm7l54q5m5rqczb1ag";doc="0z9dyms40vh95wslx7xack5qys02hdwxr451d19k3jvx4jyxsl7f";};
+spacingtricks-69048={run="0ahyb2skb6bl3m37ppzb569y539bi0njkq26wkvf0qw1g51irvz6";doc="122xkp4s2wqqza5nxlibxyfsxs21n20xn3y5i9lym0hakpj7112m";source="1mbb835yyrzpk1qlqci0zbvwd64amxqav0z3vnwaxxi14hqr9laf";};
+spalign-42225={run="0wy2kliv3mrcqvandk3qbbqjbri6xq69d5jsi80l7qdiij86z3g2";doc="0jp34h19q4588rli6k0v5kg47j6i1gjpjgk772fkb7l0f5wln7k3";source="02qzd21qzb8s2jsip2fr1jgf11xd7xmiyi7fv0s9ylyfr259c5b1";};
+spark-otf-62481={run="1z9k0dnahkq2nfqs3plpyb3fdj48x8vcav0ahykd554fygv5h4x3";doc="07pq90xx911rdjdyr0sxg4zqfg1yb5kn43xc5l6hn0y81m9j151d";};
+sparklines-42821={run="1mb6c3mial9ashhvmjhynczjpb462j18qyy2an4ckgwgc46pwhp3";doc="03j6xdkvsv5p71bifmggf69w3s1n7758yii1caz9p9bcqmqbnrk9";};
+spath3-64818={run="1w91n8mq9bzf7fwfwwhpqn8j5w7plc4366a5pw56x2212n75pzh5";doc="1gy8n6rhxbqf64gh4xbjvy0dz484vm53ld3i6graly3qzdrwkhdq";source="1gy5p59n76lh0k961cysc3qpnnhppbcd7dmspjijca4fx2v3ckkl";};
+spbmark-69350={run="1h76dvirbiqbn2z1cki5ya8psialnp2lhddxsyqxa6c2k4n128zk";doc="1k8bip2v32gwqyvsa6jrbgfkihv0g5sh27c34fgpz0g65cpzpxjz";};
+spectral-64528={run="1qjvxyjxm81j3cyajki6jv59k6y2m8nv9kzhj45d7i56za9klkf2";doc="1x6sixvjk4sk5r6x3pgppynsgp139jm3cc7bv83bk55757jjd8j5";};
+spectralsequences-65667={run="06v0sb1xa28biv5ak6nprdcjzjdm0106rmlgm4if0jgmax0hiqpb";doc="10limf15cp1bv933m45s3vdvxwzbpd5hard4lqff2x8ay1h0n1wd";};
+spelling-30715={run="08zkbw4fdfmfz1pxcr96xjhrs8lfbf6sydp8crp8110fikksjv9i";doc="1wm6r4rhkmxmc66zx9nvvdmjaarx789c33vzm26mbd6ylv5qs1is";};
+sphack-20842={run="18vav5d5846hzn6ry7ypnbj9vmxxxxjxm8wpxah9mlml6kjy5hc0";doc="0caz10cwphajhni7rq8klh7x9m46hynbrgyr0c7fjqs8jfdva4k7";};
+sphdthesis-34374={run="1a0a4mwf14f4076gwiqhgdq436l5fxw588rigif0mcpnmmmlkxwz";doc="0b6cgkwb4v4v78nvwg2n1zgc3ww9fnkh43s4qb3g3pdjc399dj3s";};
+spie-15878={run="11s8phbfna7wwx1gji1mpl93arvxlgfpxif4c46xia5spn4i44ji";doc="05myxi72wcagb55fk8p8461vag4yl79ilyhfri8il4i72419ip22";};
+spix-65050={run="16cw2sv43nh6qsrc1681cw1035gj78fvgpwj79jb91sph80wd4kf";doc="0z5b25wv1pcyjc97w1qd1lx1l1rj471nm9yxx0rkd7qyabqflyj7";};
+splines-15878={run="1dynq4y6crzmnn7wcana8klczvzzd2gkya41qpy9w6nxwa2b6kk5";doc="0lyg56rnhrq620f083bayssdm36h6wl05d8wld67lf42056kxy8j";source="05b9dwykc91q4d7xmvq5hg6vznsy4axpi4w6awr6l6qrrqh6wz71";};
+splitbib-15878={run="0z2vnb51ksqp3i11903mvgaknvxl1azwqsch5aaq14y7fp9kcrah";doc="1vb7snjy518hcv3x0cvr40bzlxr0nqb1ssqagqncyzzpg55nv9gl";source="1sgl95vwqrp6k4y355d9mwkqm6zpw0g69p87hnsmdbd9bqkjvsv4";};
+splitindex-39766={run="03x58nb9bqd1fn3k9fqq5rdafsna9rbxjhp44dwzig8kp81f0g0i";doc="1v2wwls8fgb1rhk91hrjsabxj6plx2bq7h07fyqxvl3982am9wm5";source="06ksmac3dxacfq7j4ad7vy9kls2rnay1hww3kgbp2sgadqvwmz0z";};
+spot-22408={run="18ich1w6d68xa2p65lh22yfwdkvgbl9zz9qmd4yx84ljzby49zhg";doc="1flizmkafy77g30ffsispr2m4yaqyfw5hvynf7ppph1q07jqdy0v";source="01sx1j1sxr1bgi5h48ij02nwawg2wgg1c7mx22q9r4sbn9mprlbr";};
+spotcolor-15878={run="19xicma97v309pbwgdyizrjwwnlas95wq0d2qlyw7m9wrq295lpb";doc="1qsdgagx45z4gha0y7z37687jxrc121pr592b1xcy8bhf86nimhm";};
+spreadtab-68256={run="1jkc9h4a3cn5k7p87hdib2jk8kkmcn98cx7b8p7p9fm3pjac807r";doc="1xgy9b81am6pl835sf04hf0srpdpd7bwvxdl5cd4pr784xgfvdb8";};
+spverbatim-15878={run="0s7042ln9l7jvb0vyrmg4h4fdgzy6vaabr62n7zlkr8pf7zd8nvh";doc="1rb6gyq7j5m14d8707gkqv1n5ifk1y497mwflhigqgyi9lgcvgxc";source="0f3spbpb6icwm84v4lq0skkx53nw3i0b90ik0svd9dhg31y24c43";};
+sr-vorl-59333={run="0a87b640qdc7bysxlgr0y63znls4ryjgibi3ablnw9q3rhzbbr7c";doc="05zpxq3qjhziidiq8i30hj295yh2qa3g79lx9ywlldbkyhq928cy";source="1ddwga4af9k70c05v2a8frn3q779d2pw43h5bpfks5w889ss6rr2";};
+srbook-mem-45818={run="0znvycl1land17f2c9cq09hhhg4b677rixzjc0hsq34c91s3xdq5";doc="1nf53sq2ic8y70z0n28kz27lji35slwkxrn8rz0dsaas73ga5k2y";};
+srbtiks-63308={run="0bghfl9fix95nxb8zvsylb8040msfwk0vazqkwvc75v08idigijx";doc="1z9fyz7kjqis1rblrdb2hmj2507bifg07yrigqkn2cgm4wsg0cfg";};
+srcltx-15878={run="054b8g0vvhbzazxs8913dzir7qb6x5q5pfsiwdp1z1awkpafwkmv";doc="0fidv12pgqck21fffgrrz2a0pfsb01fsyld8qhf5r00915aai6h3";source="1sj23lc6k8kwd11q3sq6wbslwl4fsc3wzp45w4by3mw5k1q5xqcf";};
+srcredact-38710={run="1rqmgpxcvvcmzxdj6k15v8z4i4iq4wv95whddpi93l3n0zv2ihmq";doc="082ff60lfnapb570ps3g6vjy2xn0gjjih6y4nm3ry9i0k1isbk0w";};
+srdp-mathematik-69288={run="09pxklmnmdwiaf0dgi94aq33v5v3ml7ap0xs9s422wswhxx8378d";doc="1143sfcqclgsqkcd0ypcyp37hna4apbg16kvi2146xkz3gh3agqy";};
+sseq-31585={run="01vqjmi5vpd2s00sqqj6nlwgqvz9c43igg09w282khlca471253l";doc="08xq5fjn951hdpbrvzx6p09a173radfh8a4wzhmifd5rca9l7asy";source="0a1rh7s1fjxn3bblqz4lzhd9812d9p71wwww5hg9nnpn3gjvdr6n";};
+sslides-32293={run="12vg8fdv0di8vgnw8wj1y6rad6izmczfqzy5pr6gpflzmn14fbq4";doc="1dssqc7f6260hl527hhqq8zbiyszb13z3bny3rwjblscl9ia29yf";};
+stack-15878={run="1wadfhja3yji011aawrp3jgiqdxil7lzvkd1pzy9c9y63lzknfg5";source="1qv2bvjs01lk9b86rzb7n0lk2a4gr870qsnahyrd9dqdnvvz4n9n";};
+stackengine-60019={run="0m0c3sgajlzb7y598y0rpm29mrlsxmks6a0hi1b56vpafsi906n4";doc="1ga71wrnd8ykhw9x3a3yxqicqaarzxncass1lmyrh1kndim79pyi";};
+stage-62929={run="1wdvq1izp0y8b7mzbqql3fc9q8j7jkrmm4ynnk3h2zlg24lgi3gv";doc="1jamw0i9nwmk50j5xiq4pznyjiqc2px2s5993gyjs6hwxb28c423";source="18mw8338ls16klvx7zbdr1qc0z64xgnilr79zfldvsw10fp73apg";};
+standalone-64677={run="13bp2iyfnpyflps370mzrxk1vkrybamam1f47ws4cafpz99nvvyr";doc="0waw4vqxh6nclh6kp17nhb4i1hpckwraf5clksxvzgiv25cxkada";source="0a4k7lx74w035fvj5q6mnzpx18jzlghz3lavhsl9ssqjb3zqmar2";};
+stanli-54512={run="05mq6zhs6x5qjqk58gwws9lw3p876bd1f8a5c2jvb2azjl7d9r4f";doc="091knxhx7jsjiv4ip0z2jbazvv3xmbvandbraxbipp4zqqakb8bj";};
+starfont-19982={run="1bf89j0qqyzih5w9ban03k85v8ih0d16sil1sf7smzmqk3nhmrz8";doc="0rjx4wj021ri26zxdlhkh71q3d0ygf3hvcqghq9fwkbi0gnig1r1";};
+starray-69002={run="1dh1n0z8c1g9060mjr8qi7qcq4s6v86c61nfis61xxj9606q5xlc";doc="11d8y9yqvm7l5nbwxpakj3ybw5v8p7vm0ccsnvib9cyivy8vqvbb";};
+startex-35718={run="1d6c54hm9jdi882srj87drkcxm7lldb4g60lbic9wwzn9kpa0ynk";doc="0ikmb30ndmj0yhzxy9mba3kqxdc5f8i66sji51ihjcrlplj3jk73";source="0304dzv4nzlcqi5k1gbfnx823xaxq84ja4gwh7qg941q152y7w9n";};
+statex-20306={run="11qpdrcszbsrasbasmk6h9wg5r2a11pm116i16h7mvw73vjaq76f";doc="0dkb7c7wavn3qgndl0g8jpkx1qr00c3iwp6d0r72znggl4cznhsd";};
+statex2-23961={run="1949zszdv000dw1dx1jjznbd79q73fjiqnkq2axdbxffh47ls1dp";doc="0fkzbs76yfyygscazn4dgphs8g1byzg9n3fbdg6pizzncirbgh6c";};
+statistics-67201={run="11szmc6f380si38il9vw78n30yyfmmvgxpp8f8p8kzb373d3hs9f";doc="0z8mx2gar2fn97n3x01dw23l7r4ckqwgfksgmfdj7vhgs51wsv16";source="1dkz9vdcnadd1xd4k9i37a3mpn1bwm4zf3c6bg6rvzxaarrrci4m";};
+statistik-20334={run="1c0469cxfvyg5jl9q1pyzras6fk3f6zbgigaby0iav34imhg7zy6";doc="0fih9k7mpzg25h56x6zzdbdnhybd25b7hlv0pdbnlfb73s7h4mcv";source="0i68y5ynymx339zgxc9r8dgcflm5468gd6cwn9ngpnjvqqbas3kf";};
+statmath-46925={run="0imcx9nx9h5fi53nwg82n2d9s21vlngdab7znyg1z5pdll0df043";doc="10mxwgvjjnk2ci05ikml35q64c82c7dv7rjwajhk03gq8ljq939j";source="1himjc8cn3j5jr073qpp4mfyi2cpr0czf7iykr0w6b7722kkqdh1";};
+staves-15878={run="0pb7cghd2p1f7y5x19x3zyvaz63k3nmrwd04g0yqrl3774fvnh1r";doc="11i1rcc30lnm8fqmnpmk1hgz2fmm54hgf23ich279aqfsk2pm8iq";source="1y87sw1qrmvgvayzwz2i6qjzvx952h68123fhhv67ga0kpxf9fwi";};
+stdclsdv-15878={run="1130sj024qfsszjx4adr3bmmr6594d21bcv3ixmw75y85djha1iz";doc="01li1x0cc820y0m6dmivjabnbhz6v1j696cwx3d08fiw4x7n4jiz";source="1ypihjm5r0v2isrrv8152fp59ynjn9wmhp0ffx508n7kih9yisbn";};
+stdpage-15878={run="13q3jc6snrscq7bl22myd8rb04q9q5b0a3xvr609j1lxczbs1xnc";doc="1kr7851lc6lp4aq78xc61nw495qnhnrbsz0w2yyldwfh07h4byzb";source="0ygk73pk79wgn4qpg0niv3d0a4l8bdhrdvv1a9s8g6ayngfr0nsd";};
+stealcaps-64967={run="1n6922kmdf5ahc8i3jyps6w5r5k1yhnp2x1p2bd259mjd5ivplyx";doc="0djb508nm3l88p33736kwv7z309nalblb1zfijib7ksqq03515di";source="12krgi4wm37q2jcag29mflql1fpry8zhzxn3bfbmwh6cna8i6042";};
+steinmetz-15878={run="0g9ll1hsf82wll1ng5lc2v6il3l6pdy3dppz7k7piqqmifzc8ifz";doc="0gyyqmllgp6dg2g4nh5q5ycnixlyzc6xfmi3szypmr1rai1dvx2s";source="07fj431nraf7f9qcmm5bvk03cblmj15xcsbnhgish4rxqbf7clsj";};
+stellenbosch-68039={run="07j555jrcg91nk6rgr6c9dq8y9b3i0677j339hlcb6mk7949nz3m";doc="0xrpmbzaa4y3v86zzdws9al13v723k5yjbxgnd9l985fgq5w21bz";source="16mmz7pq4y9blxskrxjq8w15zq9vrbcr6nj8ynfy13b7wxvqqrcn";};
+stellenbosch-2-68183={run="1mp3sskmlxmr5jc00rh5i1vyikipmgvc266djbx8f47adkgqxfl0";doc="1v7drgjgiyjp4q714lanybp34pkxjn73w4s20lch49mpq0qfnfqn";source="1ha1ps4cdf6kr6dix9wnhf2672ic31n04vhzqjal12lcrf00pzi3";};
+step-57307={run="1r2mf2qlcksllpaakrycmcrpxfq9c4g7n18ip13ykp92fmrbcz4h";doc="0f0hph5cjwhwdn2yyfzvn1jbkh8xm71jw10zagbncapfqfgx5h62";};
+stepgreek-57074={run="04xldk3dzcr1vg1xld4hhwx5xzi2pr0v7gn526xr8ca3m3x5mwnd";doc="179zz295nxpp21p6xhrn1r9ka68i3l9l8bphrb2833a2x6qgmil3";};
+stex-68569={run="0qpc9nqi6gkkwc8rg00rkvli3kgdfvxn2h23paxmsf8jsf74c4lv";doc="1b855d0n3m2glxf22j7ifn8sf7yi9z4s55jnb1dk0pfy3i8a5zf7";source="0xm55wcxd47z57pmmls2nx6f310nbjzmn05crynfj4rw4310vq00";};
+stickstoo-60793={run="1vil4pran5vkgzrks8wp2nnwddily3pkfw9vap1l72c5rcxsvii8";doc="02h21jbb19cl24ds2r1gz3js8fgxhi4dq4acw6fvq5kv8izqr9mz";};
+stix-54512={run="1jqrvkx444hvfh7246g22k02jm00m2cnc6ffj36k8qdi1s5m9dkj";doc="0vmiariam5zd37zq2ni9560kjgia89p52cm1phxqp6gp7avfyl7q";source="0jjxifyrkdwgbv6xvgpk9ji6qwn4wr91lkdprcdjpmw9b2mwflj2";};
+stix2-otf-58735={run="03ilzmkskp2fj3jwyvlwz8b2ryvb1rfj08ciqhkhi9ddygzjk8xx";doc="18cqnpabka16kfq09rspzgwmyh0fva77i8676myf4wg805953zgh";};
+stix2-type1-57448={run="0xrpb3y7wbpxdc627gn9h6s3sjymczbhxqqi0dbicrcrd4065kp7";doc="0kqh52jkqgsfdwj83wks80h9v326hxz1zqh2ls346kc6gz0r2p9n";source="0ajs9ri4v4jw3hp64hflxwqd9sw75sk2a56lv57qjzzjzkc51243";};
+stmaryrd-22027={run="1vvnhyk7fq6kh1jb2zd19r6qq1j8zzp14gyrqvw7yqm5amjff7fp";doc="0dvcn4yw7qlb7gh3b3z9vk4rx12b1086glkk0x21cks87kphdxib";source="1wmn7bwahn28lwipkpsla74wn3a018808rmh7yvxdkbxfbzcwqcz";};
+storebox-64967={run="0vy7iavq6qqxpmwhm9cz4gxp67nriq230kcf1mr1gq2w0ncy7kjc";doc="1crb1bkra0y2gjzf9wndr5c3nvc83v57lkdglxb8v1pzpy7halmx";source="1ybpjfrria57fwvr9kriiw6y76ivwvsyb6ayp0bi750smsv8k5n1";};
+storecmd-24431={run="00xk8l8l99qpsmkdxcpccf8g7av2asa26qrh3bi0kkmapm7agk8x";doc="1n5vw689y9y2kakhkyqv47d5cin7f3xqfz8bc3yncdrmgh4kq82j";};
+strands-59906={run="0i2k3b3kb570k5h7yag83gchk9ss971v8w1xqr2kb448f1yqkjr3";doc="1clpm1i4a0477zbrixscwpg6qyli0y5vp61lblgn4iqgw0sndhlz";source="0ckf9ipirn8m795df5za2qd5w96cxzxmmv1kcn0gl4aj3ypia6b9";};
+stricttex-56320={run="0igsjl8gsdld0way8nry9r50ibvm0aj8g46ki547c1jhdgmw67fn";doc="11pyyvsxi2d4dfzv4pmapa2ffyp5fky32823fklcffd2i6jnvsbh";};
+string-diagrams-67363={run="1r1xww9h5vvvhar2nvkmjlkv1s57qv53cz582mh6vwg6v6w41nj8";doc="1nccy5d95ada03lh1sfk7rv2r3qba8rd2g61wavw1p9cq40r97lx";source="02mzpys2xw7hd7mfn4z5z7cdlcafkwhiibxnkwya9h578g20ji1a";};
+stringenc-52982={run="01xnfg0mcp94dh33rfzphk50kjb68bw76kf7jnbsnjwlqf2cr5pq";doc="00hbmjwhas4fpcx1yg016ggqv324hdc2aklr2nx5m5x0i68xq6qa";source="1ir6041286fiz8c5zpsbl4cq62gzdrdpj50aqv5p6b1lqd8bsfp6";};
+stringstrings-57097={run="178qqf3ii5kaw5rpjazvf78mjb0aw4vnqzxpsv9ahbqfxpa16894";doc="0x6hcdp3hlfnd0vn3inq92nja4hirvhg9m37zmsh9ilnnz7dk8lp";source="1aryr9b5d4jrj6mc9cmbpc11l2mqxlxsc16c5h68ql0i6z0bpsz1";};
+structmech-66724={run="1l28ljkgzxirg31ai7gb3m71kcdzn3gif8w9ssiawaifrz15wi50";doc="1rnmrjpmzzidykm3al7sqb2q7m435lpjppv7xyl9a8zlkjgvwnlc";};
+struktex-47931={run="0qkfh53rhy29zapn4zr6n14nmximfyv8rbgxm16qq3l6mid5jnyc";doc="1nbbqh3g42qvrk478q2v6snl1lbmfjnb07jhx6z53yk87pna8gmb";source="0j3bprncnkp7iar2dh46bqr3v9zdvkk9c2w9kgj523bcyzw48zyx";};
+sttools-60736={run="1sxdf55j0g6gm2h486i023axk2m5ik37ndayjs5zxxkj6i3sh4vw";doc="1l1js9bpslrqih0c5cjdw3d5nkcx96d4idfxw861yx4lhxwzdq08";source="1c74wjq7r3jqq10mf1d87v6fi14b37i90qavwcx6s5bhhrpl871z";};
+stubs-69128={run="1p454rfdp2v4zq3vx1716x2w1cr1a6dkcwnj2hx7w2jn8118vqkb";doc="03la45gxcy1l1qik7kgcb518n3yvzwgdi5x3ffzfpj4yp2rq994a";};
+studenthandouts-43516={run="1007rr5m0lbfib30bkb21nvpq1h7didqijg6jsbprmkgsz1xfdkm";doc="0sqfqxypkrcyp8fc60xsb1v9nbw7h1xrdai626dlpknhnm00kzmj";};
+sty2dtx-64967={run="1nrn2xv4r39qa2glfw4kalzdh5w2zlx4vaw0hplnrnxj8lwmpb9m";doc="16jpjskvsk51sz0j503z4dljwzd1ymi2b06z9lag8ab5iiyhm80j";};
+styledcmd-65262={run="1l1rg9456g7jk95kx5c7l1rz738b83vqf02kxq5n994rzxsmz0kx";doc="1fs253bda40z0cf23zz2330js8f0cg9f9rv5mrp09pf0f13shvxi";source="064czvwrkssjgw33v6lv70znbjb3q0shp2piwgia2p2lazimxrrg";};
+suanpan-15878={run="18nzb8qbs7q233f68983q6988inwc0fm79clnpfpr37z2p7im95v";doc="0xria0g6qzx528dgwb2q23l5iqjzj8xix1215ciz5kmrp2h4fh7n";};
+subdepth-15878={run="1l79nf05yrvpzsbsjyrvyhsc4kx7dfbvx57qc1ymzk2zphnfw4fl";doc="0g8apcawmna380iwys0dvshrdi51k50gavh8wgwybcvfjib82h4w";source="0ac0l63sisx6ry7m3qlf0f98dn7gml3pfxlyiab8664cv43df2s7";};
+subdocs-51480={run="1mc1zqvqpw5ln494c6afx88gigkby4zlb5i4gbizs75irgyrs01y";doc="05m9pcg8dhk8rayald2mnzl0wa7z3w8znwzw2b9ifbxz3cp5k4d8";};
+subeqn-15878={run="17jhiyzv75q79mdkpn6vj60j61wr8yf8qxz63g16dl4xf1xvlqpv";doc="107jnszs764j7zr9hywn7dhjdyqd9mb6mwyqcilhgyz8ggpqpz68";source="1gwz9pp8jzb7fsj4dg797rsqynjbk8q69m8xjzz4pbmsysi01ijq";};
+subeqnarray-15878={run="1bj51jrpvid2k3pd8sgrg85aq4iqachah22izpn949zvjvhrk81s";doc="08aaqv3ca0b6pnj3f6h7c0l2z7spg0hmzaflxrgxbnndn1zh0yhj";source="1slm6rfgf599d1mkww44kcd3lj88z43dr8i15imamxr0dz05jiav";};
+subfig-15878={run="16fs6ax4rjnv446x56jydx59ahw9ylkpq22a1dfnnyf8s4jm7a08";doc="0jm594akhy2b1w8i7ccv23z4z94lbd6rwpmr62mg1h80af806biq";source="1aprv7xqcwnl6076w71x5x8kspa1sb5hlpbcdrws3slfzm40skcw";};
+subfigmat-20308={run="1vx7qh6na1il98gla65c42j8r00ihy277l3s79jab917b3xmrr85";doc="09n91ami9skfmrrrl6j7p7wy62ds64zrr0m66c2wn0pnm6lanmxc";};
+subfigure-15878={run="02b2y8isk2irxdm7bcmx22v5lbkbhc15jqpx0dhs61dnzb5x7ag6";doc="0lhpw3ayq5p15blz7pwkg2z44g300fd2k42lvyf7zii67x2rgjh9";source="1mvp7i150kxin5819cvyfwwzgwmiq1r89m2ywjhv87rgg1v31kx3";};
+subfiles-56977={run="10nslhm56kp5bmzr2nlbm40rlp3i02zj4z6vxj8w6cj1vv7jrd9j";doc="08r52aci5ab4cv70kbrqq1ak4ny627ks43nhqk6kn649pcahjqlw";source="1hmli1qvgpnn2bmllf1w53wjh63zk92dv2wvvi6fzjpq0q6lqhwg";};
+subfloat-29349={run="1ibpaj98ibx67x4kff1p0cnzpxmhs4yyqs2y4vj6as5jx43qnwj9";doc="18ps2xbqdf7pgyhj848zw1sbk36drwkpa0g1s9mw882ynz16gl9g";source="01c11mbfyynpa1yi0arlqcaklikr4sr83j69piznabj5jhb45nci";};
+substances-40989={run="13nl4xc0spsg4bq3ld0fv0612kac2z017zp8hwck2d8413jwkj8y";doc="0xbrs7qpbs5314j79nzcv408ghhayqxj2n0nfify6isxh85r1ks5";};
+substr-16117={run="1qialx52sccay00z85z001xsm62ajvbfxqxc9ps0bpmjkcvvgad4";doc="0zfcggj17bf26dxihkmqwn80pdir4n216x0nhkb3v17q889q903n";};
+subsupscripts-16080={run="14v5a89iwm2ykjsm3jxgbqsm5nba444yh8mzqf23s23z7fmcmsqb";doc="10swcywyb0jdsjhm0cybvmyc9g2ksxq60bqaqnp23kfxp39g9rq2";};
+subtext-51273={run="030f7sq37qjn99l1z6nx7qbivhczpzhjm7drxhhhsssw4n3mci7k";doc="1m6zyy09a3193w0p91y8g66n8bnm80awzg2g8l195n4p41l8vnkw";};
+sudoku-67189={run="1nyh5rv8fgs0lgmsjgkfx24s3lh8pph6jcp7dx8nb8q2ij8ia4pi";doc="0hdvzb1vcrlbis4xsgzdnbidapqp7kdaqdskdha5szjw53xz77ys";source="1rwwqpqvmwvq26ycj2glk0k4m1vlbjrxjp0l20qnh5vad98a1x7p";};
+sudokubundle-15878={run="18y4x1g050ircqh3nd95m45scb8zgjzi03cj3n7whn207dvapsdw";doc="17mdxysiwjp3ii1qhknrxw07dcds57qbm986583xh69bhq08c4sr";source="17g96rhis66gvgbm1857ck4ri8nz3isdlqshfx9rdbpgs8x58i0h";};
+suftesi-68204={run="12cis5ynr5ddhqis0i5501sbxznpcv7i4rh172c7jm5dww2vank8";doc="1bmnzdnmzn4j3fpbfax4m9xd8gpk2vd1xqf5z3ypza46vh7nggxw";source="1x001l06wnfkky2vng3vpkj0cwv0z9f29h09jpf4yc5i1nn2s9rh";};
+sugconf-58752={run="1x2nrvqnl65jk3amclgwrk2x1dscncxajdf074a2d410w1vikrck";doc="16w8nfyixsr7l2dn1lbwcscbs6m4mczql9gmg9wi16nr8d7pm8si";};
+superiors-69387={run="1kj12xhd0psdz08mx7k2kz2maaaam29s3lway19gcawr156jp60m";doc="0vg6sk9ad181y4g53shj1j0mdrcqny4hjdfv3kdn5csm7h5kqq72";};
+supertabular-53658={run="10r18kzg7p8s2wp1nydvn5f5vfbailcypqb7hkhxyjzpkdfrp12w";doc="0cw3vfh4mxd39n2w1yk0nxjq67pb8s0kzv6syr2s4x3p3nrml822";source="06r03i93j8rxw6ddiwmshb88q3h1dc3srlh4djwwycjbgp66xx87";};
+suppose-59281={run="1157v4laxbdllf5vqlnsf4cyk535xdq968q33gla769r1vv4yyhx";doc="1cigx59dypmjyv11lbf9fyfh4krl9gyp8jiwirhb9hrr9jzy7263";};
+susy-19440={run="06q7nw6bh9dkknj1jzvy1wljh9vn49z7mbhr5d0ydv10mp9y9zlv";doc="0dsr3yd5v6i240f7fgpbdlp0dig4dl0376ssd7nbg86scl63k9iy";};
+svg-57010={run="0h7ciy6qc3awr2317npp2xi958s4rz8kfr137s2rwpabmkriypsg";doc="0c2ibjsnjffp6rr4fk6b74j1vm6vfi0awvhbpz4yc5cvgjw733nc";source="1dh1857r254hiyi0sjdm3271h26wah74b67fvhmkwwr0wxz7w7vr";};
+svg-inkscape-32199={doc="1gw3jp7wph0ys6372z2rgjwlpmmawdax7xpgrp4hzg5hxz748pn5";};
+svgcolor-15878={run="1jjsjh5qsra0pi57k4430j5fcjdsdb9gwrzgf9bhkfrwr1gfsmvs";doc="12q998m0irshvh46ndv4zzpxamg6jwaxx8c054av5zgpvb9g5x1d";};
+svn-15878={run="1yvgad3kgly04sm9cwjmp1g1sbnsa8rqqb6wvsip285x9kc6lfjz";doc="06qfqmcdgdaf9ghlpc2x8w43w2f0sbaylyzcwyb3krw1d8p0zixl";source="1f37y92ikznxblq6nyy2nkhl88d818z6wbkf901cpw8sjf79a35j";};
+svn-multi-64967={run="1c1gq7li7p3m16xv5ad3s08k5wvzjij72yl8gdpjxlc8z3hxxarw";doc="1fwagcrmfhz8qwajrpj3bh4r64hm1637kxsqrwfxjnxfrk95v9d9";source="1799jhirlv8gvnnfdh4mwsclcsrr8919wl7wn8y88xwdamiib282";};
+svn-prov-64967={run="0r4s76i89wh1fjrmf9imf6y2sf96xznznyjfcivi3sp8dvf5ln5v";doc="1al7qiwd5ajjpvs2f90p7frlkd389p1ama019yl0nnxc1l45m067";source="0cg7qwgv20jvvw6bibkskj3p8jc5l2mhgzwq6x0wzy1ds7x1f6b7";};
+svninfo-62157={run="1npqdiwj6lnwgfnzb4iiyjl6bl55pjc8mml3gyrvd36j2f6cl1z2";doc="0728psfyzblwp3nciax4hncbf7sw4ww4rmrlz4jyrpmnv80qjp37";source="18rcrh0kkqfz1k84my8adn2a8y7ppjprcy77pfqayix4lyzw6syn";};
+svrsymbols-50019={run="00wr6lyncnpvw806ff8s49w239sqpc8c5zg1776qyhjcpypkfgym";doc="03jdqja9hm58w65vp6mf2q4dd2i1n6gq7yr9p2qrzjm33dxycjx8";source="1dsw2z368hj4sixfy733r19yvnx0mi2qzff8647i6faj70lrj6ry";};
+swebib-15878={run="1y5rrhrhcvjzz17lsl2y9h5qz0zl9gn34xwwprnns7503d1d2nfy";doc="1w3fl5qg5hng8gsnykb9q86ddz48jdbyghizf5x31rjwiim53q6l";};
+swfigure-63255={run="1i21rks6l9vb71hxv5ysn2q9qdz7hy8h8ljjxia64qsxjd4p5k7r";doc="14d47ga8bacw373w7myvrw92rs5jbpzdqcsbm834bv26av4vqyfn";source="1fbqwdasg56sbhs6hlw95x7zw6annykddc6cc7scm8267z83r1jg";};
+swimgraf-25446={run="065y4xxg85kdcv3gwp4xiqd1xdxjkng9xkdyvlk61zfjv5pks03r";doc="17qxnzimwb828pby8mx2xlmjd2lnnpd60rdn45455x8zfxdll3s1";};
+swrule-54267={run="075mshpyi9gxbi3n0hbh3ygidzw1daxy697lhc7cc99i39y8scpi";};
+swungdash-64204={run="1mr1x0g86qdh5nw39b56da3pyw7p4cq1x783rcqqw2rmvszp6zqd";doc="0g11z4zjm10yfpbs5876xsxh2xhlid6c45r5bzn58h2zn1d7fnmi";};
+syllogism-15878={run="01x5kjyfm5ksqig5h2b8sgmn05ws0a65idv1xh5l709yp2i35120";doc="1zqljwv03f755lzc9fhps5xh2dy6r0jdsvp6a21ka11kqq696vjw";};
+symbats3-63833={run="1rkc00q12f8ysw3vcn15hk626wzmy5j6gisvyzss924482pp54dv";doc="1cs9vdddpv7ymgicx005r50ilwjharqvszykf35lram9d2n7f40v";};
+symbol-61719={run="1pdkpr86bhia5hcmf7q3nhvklnsga4mqqrrirgl8a7al7x6q3ivs";};
+sympycalc-67087={run="0nr281r9f5d68kqsg2psvhdzgy24sdghyd9h395q666mp05z787f";doc="1ik7h5bwvnbv8zqq4pppprqwkrb2fjd68l5fhj10yznx38hh5x47";};
+sympytexpackage-57090={run="0d77xd1xl9wc6qbd335kvhq8gbvvqzgqxblhcmyd5khhg3azk6sk";doc="1y743lffzk65wl5nwi490wnmf4xaxcnkpicmhadcvjcadvhrnlxn";source="0q3cl06b2mcpn5an1m7c68c4c0swmgacj3afqb38984dcvap5abv";};
+synctex-66203={doc="1a2nlmbib8723jjhf6xxh5rpmnd5jv3cd69br4ihchbq5ipzircp";};
+synproof-15878={run="01bx52ckyg4abigyzfcxi83jqdkczvsj9b80rznqz8vm9yrbv951";doc="1kvd3vvj6yx1bfqbi858qglc31dx03ish49q0lai0mp1814n6fqh";};
+syntax-15878={run="1gd38myk5lf5fxlx1j8cvjv6pcpcr15r0370ikxf7fczv8s4ab2l";doc="0l6rkyidqvvhkrjxs8y316rssayihqimbyqwvmdzqpnfd16rdxpv";};
+syntaxdi-56685={run="11l8609xj9gz2zkd6b0ah41lgw4qhrvdjj47vwpzb4sb1sirsfgw";doc="04hnwc8hc4z88wxrp81balza27xjj56ymv4wb8lvl7kg0087ldw2";};
+syntrace-15878={run="19vx1iz2zxv49znddhcsl7aw4i267fmxhxpszzg2i9z0klm9b3nq";doc="1dzy8pazcp3lfc009g0n1h0a6q3v99ii43pza3m2gkjvbrb5sk00";source="0hb5iklz2c7zqrl8zrhkn8k7dj1zgk5gvf4wpr7h32sa83ajqrdr";};
+synttree-16252={run="1n2n1q2pwx3fi0dhh3h5dj7s5wrz2r5zpx77fmxjk0c3d45c8wan";doc="0rnghg1459nlliwbcy8r60rc9si3ya35c7sl5zqh67sfwla2ixps";source="022b2sn42mfdnska1cvqjsafakah9a908rvyw0d326d7lxx8wrx3";};
+systeme-66655={run="0agy0h2zq8n6723w27psm3azigf2bsw4s80701xr0zz6kmlyrfg2";doc="1xxycz86kxljxg1np3zd6jzwanvp3f67la1k267z3w39f5i63x1z";};
+t-angles-15878={run="1p1h0gz1k4lr7rmadhdgb7l3gp55w12m3p88hy9d4d0ryzld299q";doc="1n01pg82p0yz0b7ph82k5ha7a9j0a4hc0489xq9pf4kbizh7ap4d";};
+t1utils-57972={doc="0hdk57179nn57wnmvr3jasjavkvmrn6ryph6jvjhsfqprn7bhf1y";};
+t2-47870={run="0s6zn41dp7vzilfyk92yy5mbb74lcrpnmhrwl9xcj1dbadi97nm6";doc="0wfm1gy3dyhfv2xzjfsky2fvdhki5r2ndgvzliq2n0kvfxf1sgna";};
+tabbing-59715={run="19w1lnal4dw6aw6f27z7zf97f78s23z87s1d3hx845mm3j77xyhq";doc="1fl0schhxy4njd70dssi0bprd2p3hzpq4m5v9zmm0mbi4jlh653d";source="0d50zs145vd9rjqv0mljg50q1bb6j3hsixr9x3r6b2yf39jjyraz";};
+tabfigures-25202={run="0fgdwqd2qqqg8k077p6cjdv2ag5z0953jh0d69gjxfn0bc11yyjq";doc="1j1klsqcig3gdb4jvcqvm4kzb5zj3fm0mkliflkgm7sla99zw564";source="1zkisnxdfdvx7gwgqjddp27sgj3a2qy6mc9vzfx75qf4c6y3q7za";};
+table-fct-41849={run="1kpmd1qynxq29aanvaanq35ihiv0d55k6wamxdz3lssicrn3f2vr";doc="06jr9wmjppzd9m0d8hgmchnf78k8r7cxiqlyf3i6apdhjf6hcxiz";};
+tableaux-42413={run="09pi8sm17m1v4h362al448ayhj1h5n0krdaa7zsys00l0w55qm3h";doc="06173sm4yx2a3mfadax16nqj6ggn6yak85l63jiaqdczwyb09kxi";};
+tablefootnote-32804={run="0i1mj9bq2hj4d7y7za2zj64p5dfdvsfi51147as5kfb6ci90rc56";doc="071xk16ck9r0jip847ikb2qjyv3ghf1m73w4s619zilvm752c0ak";source="14vrh8c322skk3rpjpr03fgzbm03khmhf3ifh2fm72yb5cqgbbqr";};
+tableof-59837={run="1n9faa8pcnls7n1ghqywvzri484j37nwmhhday1wa0rzxqhs5vl1";doc="1aa9frbqj6676w0v4s2n3h9nz922qsiafh7rxnmw83bmv93sdydz";source="0as1hwba4vski9vby84j48s88ha76vl2h3yqvn6qkrzyh6cg7g3p";};
+tablists-15878={run="02sffbb22hirw8mdijf7scxbivipmqw828qzdbc49vaxq7ggmzib";doc="1fwhps6a0j8r5zqcksdqw8gwa55rh2r2la3iz7wc451zk3ddbxpr";source="1wpir71xwq7xhg41l6sigp55n93v94lashgi6lgr0g9ad8hh3y4j";};
+tablor-31855={run="15xinskbqjj1dmi1fpvb6slg8kk3g66dm70z9f7dx8bzb1v65zwz";doc="0lmi8mn5k7b5i0n7bqhagjkkzs2niy9852r8r0vv2c8qfbpm4hpm";};
+tabls-17255={run="17bg083653km6v92hifll78vs0p9zwfnj5rbw1pcl2siizf3pfj6";doc="1gnk4blwfikqshqjv4zd4cykp1k6k025h7vnbjrvia11l6kcnavn";};
+tablvar-69212={run="11xcbpdcl39r8lacnvqyd8j3qzbpzd6q15ivjwh9ndrznkxbpjpz";doc="06gh6a1qsbgbncl13jybpprmdbyfddwyyfwz1m9fs5b6y5dr2sck";source="09ixxr26sw9507my98p6dmnqgk0xw14h1gfbav6f02yxk3f6glp3";};
+tabriz-thesis-51729={run="1jrxxmd38369qrhg2a8w4j9m3ldp08wrblbpmc08f35zwlrackbs";doc="1rzl7y6p7n46r7ljcycr4k40qxbih06bli90mdjwn96vn60m1jym";};
+tabstackengine-46848={run="0zd7gp1k40wg6b5aln30qxbk84ks3ys0d31vlw3wijvh31qbw6xz";doc="1n26fdj1lxwwx1abslxl3vkcvhk6lbnbi0wqi5mhx2n6g6ir8b89";};
+tabto-generic-15878={run="0i65jflbnhqpqf1w7pkagicic1s39gcl319z7g9zr1g80f9532dv";};
+tabto-ltx-54080={run="1ayysa2dfm6q6wli0ldk45mfw9jvj79mdx5kcpiay69xjl96j89v";doc="0rgk0znx33lk2gafzjbwwvl61xl4kw36h9f66kay0y91cy9ra9n8";};
+tabu-61719={run="1x22myjp1rpg0in3jgjj4wy0xyva8xd5hsy5c1rqqpy67wy83k0a";doc="076ivdvaac2snb4dgkf4hzpnbjqli28hll6s4r6z609c5v34mf1j";source="1pb4kibjcmwn8snfhcm49jjp38i979dac06p471w9bjnsp0khs85";};
+tabularborder-17885={run="1p7iwpalamif71mrznbmsig5g9lxs3l16dcpwj2kzhiixsh78vfv";doc="0rd6k4b00aj398hy247x84jj9c3d0dm00xnaw69p7wvlprzricwc";source="1lrvp6128j70fzwqr61nnwiivgllbbkw7pd53l11sqzqwzxppgi5";};
+tabularcalc-15878={run="057720z8l7ss0kpkg7l16fc2v82xr0wqlxzxbcak5m3hl5k03g7a";doc="0539rar83mprammyilmclcbjxr657z6q2xmmwmlik990imf78lqc";};
+tabularew-15878={run="0g9pbr0vhhjj2lz9bbgwvm49wl8bdwvv1jjggq2dnwwqbr4vc4p8";doc="1ff62dxvnhi4q1gy8f7qhc0zz1jiayl6f8j96dp0rz38l2is7m86";source="0sfpx5w61xrmmgip0c746mghhj06r2mn2jmj56zingymm2djiad1";};
+tabularray-66276={run="1alrp56nra7pcxg1km7p8km679dkkqcsj7m85r5wm091qk7gxhf4";doc="1jkhrvq0xwr5qp88zxj888j0grj904vljvfahd5azys05n3ahv33";};
+tabulary-34368={run="0z57030pg4pfvghjii8bgqba589cabnj8qsr9w1abpwp3pfy4zbs";doc="08r21q2h7sjrk875x84lngcqgiy5ijik56ly7g7wyzhq3jyxds0f";source="0lsdypidawyhzj73c3yjs8k4xy2sds7gz8gazxfy460zndsz675m";};
+tabvar-63921={run="09pbsqa0a492j6ijvi25zdv4ic69wc8ngdxll2gr7wgh6m9hsrq8";doc="0iv8w8jvq05f6a1z7n29c9cldk499fd9igryv3c93g6bgq2hkzks";source="0bw2a9rgij2xvz3lhz6gya4vfsjn41cn7mg9mkg728q4vbhg19ms";};
+tagging-52064={run="0sws4x1h52cd313apfzydqpj6c8xrb8x5881cfhwir000n48crb6";doc="1pv7savkzm6jhaliw5ilb7qmhlj3iyiz2w6kxchanwrg4pnqabx7";};
+tagpair-42138={run="08qjcwyjs90sg8agmpmm3122h20898hy6dwkm0lk3dba1j3w5drj";doc="1dkn4gq6zxfqw9h64h7ggkbyrk9vzyax8gmnk9qk8dccdvf5n2sv";};
+tagpdf-69165={run="0lh32csbsl17wvp9nqfkh07sqb5kqrlgfgz8w6asndbsnna01wih";doc="1jksjkym9cj28bgv7bgl5i2dyng0ggzlnqxwr23gv739c749gxxj";source="09a16y2mgyj88b0dvvszv1d6lw9ji75c6rnq4wd1azjz0k397w64";};
+talk-42428={run="0i9whk49bahsm2kbj53pjdh3fpg1ixfyxmfvcp563ylr8j2ibimb";doc="0rgil00i39p2agz9fybg0h3xmpq0wxcpjcqpbpzjw5lcf4mpcni5";source="0kdrknwwivyxiyn8xqappf3k5l1brkwkkhjqa0l5n0abzafkjcy9";};
+talos-61820={run="0pffvqdkhmc0adl7g1sfckgwwjsfgbnf03jfry3yfq6za6mk05d0";doc="1narnqgf3221fpf66w2vlw95cr17swbap35lvb7dzviyad0ailcf";};
+tamefloats-27345={run="0mhiz5lxz0szi8ygmajjmldz1bjf6f1lpyxj3b9zb17h9aw8gr4x";doc="0s5cy9m8jpxh81c10fgdvn8wy7pnv7sa25hy8wbv6qkr1qwz8dss";};
+tamethebeast-15878={doc="13shw7hcimckn7pp8pj0cr1zsi1wq6r400x1v6akpmwwjxkw09g5";};
+tangocolors-66733={run="1i0a42sdqgm7sraxaq246fk1w8ql4hn00y2r1rndyd9v3828x8yq";doc="16x99xbhwnibsbw364kb9yxzfcws3d65n0sdj2wflz2v7qbyk986";source="03kpykm57favngm16669ylkh7jh1q92c2zhb9sx1qy1wd5li7ix2";};
+tangramtikz-66183={run="1c9in9zdw7ixanhj7kgrdsrv6iwvjy02b12lgq0k3wwllnaakv24";doc="15979bzhc22d2pzc8v8ml9220b0sqz4f2nh0nkxibm8hg9pq3prr";};
+tap-31731={run="1ci65i2k6n0h9lklgk41sdq4acp5655mps77j9gcb65yk4mdl6c5";doc="0r8y4jzri83qypvnmgchnhrd0yi7j0k753zmnwhzxqg4bvki10gp";};
+tapir-20484={run="0ad1qkbvvswq7msx9889sz8n7wf8iszigd0vmk2yycykbf0axzii";doc="1m5g6bsijqris8r7z2dw3cj74ajcny2wjysq8ql26531z61hj9ss";};
+tasks-61541={run="1gwl8g4a2x3sbvqg91ry577hmpxdc4dgcj9ixhsla25h23jl414b";doc="1pavbpzm6z6najh72z52j089mdg6gqzsa8sb9qyfsql7mndnxznz";};
+tcldoc-22018={run="0gz5v5hi7r6wr8qas79lakwr7gnf8d5kypf7cp62qvrybp0ljgqs";doc="1vy7k0f6ri4kbjrhby0napsas9wwlq5by2q1dakbz7r80zr7dc3k";source="150p69vd9465icda6p0wp37gg9vl8y3c2ys3b8f9ij9a88x5775j";};
+tcolorbox-69370={run="16k26jwbhk466h8a09syzskljyg0x2h5fm5f6fmy65bcjgc8ai51";doc="0dal9wv4aryz1l20hbbg6njgy534540vqmyd2q9366a9ydgx1km1";};
+tdclock-33043={run="05w49l1kvs73sxchbwrlfs9n6mn7qshx102gkjk4jslhnw9lc48z";doc="1n0ir0l10p9fai1cssri11bpzpjabpsrpfji6w826l8i3xlqkdkg";};
+tds-64477={doc="04lhavbayyisxxqfm1vpfq38xx1xwkn136hdnjaa3szky2xyn3yh";};
+tdsfrmath-15878={run="18qqjmdh4hgzar37imn811i7nbk93zx5w7f7agwnzbxgy1kx2plb";doc="1vvbsq5aql1f5q0q6v5z1xm16bmb20w2jnn0d0rc64dw4dxnwpxw";source="03r9f335gb31zb2frpv6hk50c01sz6rwlqw9vdxf4ch2np90fd9z";};
+technics-29349={run="1fr932788zvxhvkvmq4m9kzc834w4xzdjq4p80kda3fsk7a7iv2v";doc="172pqpm2i2wfv3qgvz9hvg8wqz8q7kqy5afmms4xvxhrd0xyaf2l";};
+technion-thesis-template-49889={run="1w004bdgaag02kqhsdksw7qy93lyjihhlbxiccavp7m2aj1h9xly";doc="1fa280wcainx6z15w199fbvzn8ya3zplgfw41mmvp8cv3y2njnq6";};
+ted-15878={run="0m9dv66nl6q4kq8jq08ayx4hrkh9r2i7hmr290s5d7bkyicdkgpw";doc="08yjlfrblhralk4b9ji4g47cr9r1zj8dp6sjha0169395wn4820l";source="1cifrswbfk6714m63kvmrsyvz3q29wd1bgl48f5d9ay7pz07wjyq";};
+templates-fenn-15878={doc="1s91swqsysva49cjrb9khgik5mvhxcb3wr2wz4l2683gdgxlbgkf";};
+templates-sommer-15878={doc="0z75xhawsmcxv4f24cqcvfi0r22gavjpg4si6nwrgc8sg82x24m6";};
+templatetools-67201={run="1hbpn6aqp5zq2dm8dd2cm0zmnib6rasrn8a8rpjphvhfkr1ydmck";doc="0irpqbcf51dx4rcsa0y3r4x00y7p0fanspyhia6vhk2wsipbgk0x";source="0z1nm6jp8za0dlrj8s7zfcy099c7zr6lsxa48v7gppabh7i96gqq";};
+tempora-39596={run="025smp68d941hqdxqsd4qpaxvk4z8ybg14xwc47i36k04244rarh";doc="14k350dyiqjcfg5fx09i2i9cqsdw4mh1qcrv8cglf1gf2d0b3jl8";};
+tengwarscript-34594={run="0v6mpqkyp7fr1nb5myjs4alz8f7y56rnd1vlsgvp0m2shvnvhy2f";doc="0225gpdqbbmcpgxmpjcj2blbpzxcnr7vmm38jkkpyan3gfw52n2w";source="0jzzn01c5gwkc8n6naaddm793sm8vs67vsjd30lj4ls7djpnixkc";};
+tensind-51481={run="05vgqn5wcynyp8gy80icnkrdrgb0wsr3h0db033yx4yk3c8lhwaf";doc="1vns4k813ffccps5vrrpfmb7rm4fmfs8zgs7cnw2hqg08dmzijfn";};
+tensor-67667={run="0712frfli31jnxndk2fac6fln2538pmb7k16jlvskkifgzwrsf99";doc="0cgwilixdvg1ak90m1bv50rvzhlyd17d3h28mw5bj1myqxr8ybbj";source="1g03dgvnj7j8n7z482fyxpa40daj6rllvz4vnli78i8kyp2b3m3v";};
+termcal-22514={run="1sxzpnrgc7f325w0ww0b92y8ih6jrzpvgp6b5ilvcpyriym89j8d";doc="0nv2s95n2h67j4zd5i2iiz5ygkc1s0xp5wjnnvbb27cxqw1h4sic";source="078bs0l7615z66h5fr1fcd1ydyjbc3lddl1z7j80dngnx5j0vf28";};
+termcal-de-47111={run="13a79lp2lp0r1r1j5nc94adbir463rhprdlc9p6rk3qa7lh445pf";doc="0krnv111d82razivjks8ip9m6z1bllqhx47yzjw6b5af9ps1k6a5";source="0nn9vgxv5awzqx1zndl7zvgd5nhllw7kp8zj7snd1nqvz3wgc5n6";};
+termes-otf-64733={run="0vwm8qrbp9r3bbz2a5sbkkpmkmhb4zh4hbxd37hngx1pd576lasj";doc="0pxck3jbnw7wk7j0p18as2i7cffwj2bf4zjx258dqxg2yjg82i7y";};
+termlist-18923={run="00dw7p9623kxpsvqs1yqk6n95hfl0b166l09djibybxx43fbk6dw";doc="05rbr62rvl0shhdxvscsgqci6b6n60pfzbsmikan6v2bh31d8mbn";source="0dl6bl28wvg9fcdlfqhchcxg98s3d668pm0sp7rmxzz97nf4fi9k";};
+termmenu-37700={run="0rw7a9ydsckjv6lc8q8yc5c4lq45bwczy98c6g6mzdcdl2dnhh81";doc="1r4901slsjhg0kzcy07qkm730g1bax1p2410mhh9ly8cix0hcxr4";source="0fvv10j1s49swvif5prjiqvk699l82js29n09scv0x1ixcy40h14";};
+termsim-61414={run="1b263hwbplgxw8ca03dx11vp3ar4dh1avf5r1r02qa8b1zax4b20";doc="0qzqwdc7wiwir2lzrsig76v0j8766hszzsh2y51bk2b7vns4psgm";source="0jidnimy5imwzcz0wl45v2p0wpi0xijqzsy94j517q00sgpnz0pp";};
+testhyphens-38928={run="1sqq2rf8amsn6zdp8l1vg5v5jxcn7ipp78qbzzkikiamlxv89nkv";doc="1nzimg7bz6h9dm7hb9r9fzs130dw5y7cjzmb4rc5dp5a5xhiliv5";source="0s92imbkb4p70fd629bbg2cma72ys853qby1nwk6rvdw8gp47pgg";};
+testidx-60966={run="02zkg2kffwh95nxn602ara915jihj59af4hrgv6cb6916m9fv0r1";doc="1pz2p3fdzdv4n1dabh81yl3b3iaywmbjvgxi6zklli6jbbx5h708";source="0h88x6mmid6nmhl4pw9p4p9nlh90p86g1k44a6bbcyzdlxc8n6ac";};
+tetragonos-49732={run="0l8b3kjk0jk70mmmv37zrdb16id6yrjvgsgsmji7pzdqiixy7jh5";doc="1g2zcx3b1pfc9dh76p5iprdgsxp0yndp7rn5ksbq4s9k4m7ikpzp";};
+teubner-68074={run="06xxypkdzmxs0m6bl99p9hggic3zaxqgfxg8ljq2wad0k7mwn0i6";doc="05vj8877g8ndya6p2kvhipxa61504sa6p80j1zwjdr732n7bg218";source="1nqs8cxfi1rgiab8kvzdi9fcwbpgaw51fjy1kzzpszydf6qxgqjg";};
+tex-66186={doc="1n4jybv4qghg74anpj7n7kj4l908f476q597vyvvq59fd9k5m7mm";};
+tex-ewd-15878={run="1pmf17bxw6i4a9pfi32fjk0hd3p44kw2scwmr7p38320r6dv7srk";doc="0ss7nljpn8k3cz3av5qanc966q90v3qj9qy0akmdzbiy7q8ml7na";};
+tex-font-errors-cheatsheet-18314={doc="0pfd5qphmizhxb2p4gg6809xcx1rlfkwqa6vs4f74457chcwljwn";};
+tex-gyre-68624={run="08578kyph2grc2ca9bdg6271iqpjyjg1qcrivfk5r27sq5c8cwf0";doc="115gb3afrys7ww3p29lm9bkwvkqk9gjdfcj457yazbk53ah2yff8";source="0f9gzhlawkpn4cg284n2sad05aary5pwyczi1qdgnvk9v8sbjax3";};
+tex-gyre-math-41264={run="0vqg04im4s6k1sjfclrn855liilgayh5kca774aicifzjgsigs1d";doc="0s6s2bs6q2ar4y53fyckz104y8rbvz3msjvyb4sv2p4j6x0kwz4g";source="0vl9ggi62bn1cpnjmqanx62b6an5294375jg68gskg8fwi8j6gir";};
+tex-ini-files-68920={run="1dzfn0v8v8pdg6lmgfs0q2c0695zndkf4rpl6dckn51gp2i1bgl5";doc="1l1yizfq9srfjxirdwb3hvlj31a72mnw4spwyjk58xwcsjxx3y00";};
+tex-label-16372={run="0flvmmh0lzkwvwksmnb8m4ix6pzw6f18flybkgidkyf9mf0gg8xc";doc="1ppvdq0cj62zk3b0i76lc35r9pizzli7mm4j2zvdabysn0prlyyb";source="0ysjsk73ksninqk2dyrw06arl692x66rsrr8vb4l2ri3m0lyivlf";};
+tex-locale-48500={run="05l4frsxpdmsrbn50q87db878bwpi076wagj5r8kdnmdwmcanr6l";doc="0j9m67n83f4h5yhfh3a51s9yhqh6kpjz8y5vlxhyabyf7rcpybd3";source="1x0wmqsrbgdgy67gln4jd0518cbd2cxp36gqrjrqgn574qsl5cx9";};
+tex-nutshell-67213={doc="1r5idg9ai3bpc1nxwj7jm7kr9i514gvnkz7wq3dh745y6ilqncsb";};
+tex-overview-41403={doc="1agfya9rwvyjvip0alvibimz75jivpf19hp4jvlv7z0n9m26m9jd";};
+tex-ps-15878={run="0i35b4pp38d1l5rac059znlkazrcqa62qm8brhdmx7zzkbhyysi7";doc="0kgf7y3nxkw8x42wpc1g5mmmbz28n73vgwd9d6rf6fjpzrycc2zx";};
+tex-refs-57349={doc="1w7hcd3qsdhmb2siakjg2hm3h6kxa90ncsaif9spr4xkxs03ib6l";};
+tex-virtual-academy-pl-67718={doc="1kb86nn5vp1b0sy21aw9wlla1dwlaijppzq7728bmfs5nk1dnbjv";};
+tex-vpat-66758={doc="1y7f87prympxg8av128npsa43cri71jjl9gxq1p04pjlpdjjm0fv";};
+tex4ebook-66621={run="12daajbjblpxvfcsa1b63zz7kxcyaiwcpj0djfj1ycdmyhz53cqi";doc="0rx0wppzfdl7z6zmbvyva9yq6mj8gqhy8m62x0r9wa01c0jlm79a";};
+tex4ht-69412={run="0vy411zwfhgsfjbyj81pgihp3g4sqkmb6cssb8sc7ipi74ckjha1";doc="04z1bsgy3lisx7ifskxzna5jcbjkbwwjlqfwbfppnmjp5rwphxdv";source="0qdman4aan2m1wmsf9l9j9qkc5d0rq5v6ghi7zmflv7jj5v1yld9";};
+texaccents-64447={run="0xai85qn9isnrvijw9shhljlkcnvmygni18kw02gsmij0dp9c1jp";doc="02185jla4hffra1wf3mgiaq8lyxh4gxgcjrb5dv3mkrw709iidcz";source="1wqbdmfly54sb8q1y6ms2wg8n62w34xpbfvxvwmg5i4as4a1ycmy";};
+texapi-54080={run="09cnhqn4gxf0alkx0276jkpcsd0myypbn94jzsavnjq8jknp6850";doc="0529cncxbw53km02pymj57iphgziri3d9cj54pqmjqjx9qmgwfmm";};
+texblend-68961={run="12lfkp9qykcvmrafwilyz2vj0yk0ghvkxmmnkhlac57q3hjy12k2";doc="1sahpz1bh883crlr4qicgmx96ncij5zz1dqrm23q4qlg88yn8y3k";};
+texbytopic-68950={doc="0pnh1hsd6k434c8i1xdjq3ywrwylmryrsl86d6h7i1cnmzz4pwlx";};
+texcount-49013={run="1bi484kbrcfx3hyflr4f2w0plhz58p2206rz4r1wjllhhhwzc7pl";doc="12a3j0sk7nysd3bd7mwnbifyrcvjjkfjy3b8f1caf6k0pf1mz8b0";};
+texdate-49362={run="06bqyfl1vnj4gadqsx94lj8cm1ia3w3bmlsfjwwfaad0al3ncxdp";doc="0kks8hswbwhp8dpjdbwr4nm55md4wgabl5ypzpx5arj41x8halhl";source="0mbcap5nfj5ap8gxn4pyv8w37hcfnq4bm5m6jx43cwkzf2hiwar5";};
+texdef-64967={run="0wi60appvgs0h5690h8qqvcmsq2r6fcxais2jqps92ryy41s2v68";doc="124azfh1332lq18g40d291gczx2agh2b1cxq07ldmizi8pmvjaza";source="0hanvqdj2dgpgl3wa6sz3qa542882h3mv9709spl8q2glmyip5b1";};
+texdiff-29752={run="1jjzd4grr3ip6gd8xmhlawhdcjfj1sqfsa06rxrpziklwirw6bq4";doc="0f7q7cszy6ca6fmwzi7fn6p72szgzyj9fldvzz1rk3ywkhsnpakr";};
+texdimens-61070={run="0fny36zd88qkcz7k3hdxq2qr41dmk9j88skihls4vwf350fy8j98";doc="1qls1hqs6ypmsg4rqa26dp98m6h7zq18wdg9n6g6895jrmj10qdz";};
+texdirflatten-55064={run="0q2m138gpk9cvfp19jvsw746mkxa613c2204qfxw1bxw8b454d7m";doc="19iiznql82a34d2yhzqcp339zszbhfz9fh0h4mb11696mj8rx3v7";};
+texdoc-66227-tlpdb69413={run="012smkh6bm7rbdpaf0w38gakhqz0s7hr25gi2cf3592imk92qlxz";doc="1xh39n2iw8zlfncvwlw2a0lbxf90awf96z5cry47dvsz81k7r6si";};
+texdoctk-62186={run="13j0c5m12if8jx8sp7hlirz33y6l2jk8lvnms7dalz52mxz8kq4h";doc="1k41z2lbfjsar5rl47xnk1adbcnnb4w97bzbgf2rnjhimd1gn9hq";};
+texdraw-64477={run="14vg45kci5pffvwdqnnb0dv3fznfaay3rg0fjiwfill24ifms14s";doc="0lw37yi82ir8zn2ii2x88f871843y2was3xwp7p06wjanr1jwc6h";};
+texfindpkg-67027={run="04igpv1y8gw945z4abb0wi959wq9y0xwzk7ymlr09qs8zcm0xv6q";doc="0gddmzndg4cc69173ssp4ncz0mmcw575fffanmdxp7y5w7ggrxb7";source="1vjbmin6jqv4k7qc0l8gd27z8gk6p87pw35rgqp0f3h0pf3r62b5";};
+texfot-68110={run="1yk59iwj4wylhagrlpasy5s8x24lvfab9xg8xz2hz8d3khai1qzd";doc="0rqhyyp6da4fkdfqa1c81jaryy29mdgm2rzml2hklp1mkxkw7k19";};
+texilikechaps-28553={run="1z9nvv2y2nzpkpxyf18p426wcl0g6gbg7qppq70b285kdbczbijd";};
+texilikecover-15878={run="04bljvhvmrxh1a4sfqw57yysaw03c5ldi1bq63mlqqvd9p3hmyck";};
+texinfo-68342={run="1wwzz52da923022bg9cqqcwny33qsspf9hfaz1zgrmxw5mi2p879";};
+texlive-common-68510={doc="0l4yicbx7n787xczpg0lwsxlq2cavhswb0w469gc21va59lki3z5";};
+texlive-cz-62854={doc="0wkf0g47wj7yqngxmy5cvjic2gcgy31pry4810cgklljn7pqffxp";};
+texlive-de-67108={doc="13k76mqf535l8y0pk5vvzirnicxajnq5kpgywp2f35vks362a8pl";};
+texlive-en-67184={doc="17fqvsdnil7chg6a33sy7sxmdh23jyy944qznlfllbnzdpqc9cxx";};
+texlive-es-66059={doc="0crlg0madfm3gp54rh4jm0q1x1l7mvn3l82swhdxab3pl7zwmq34";};
+texlive-fr-66571={doc="1d48jxvrz3dxrbfzj5pygi2gd9bzjvrch8728pbc7fk7xbimkafx";};
+texlive-it-58653={doc="0vmwn6n8bxpzcfrzic5qg5k2vklbm6rhl9861zxsli0rd9396qn6";};
+texlive-ja-66482={doc="1sbv761vh7a25lpk1h4b2ar6w7cqjmafv1kbl8dwd47hnsjd7xk0";};
+texlive-msg-translations-69346={tlpkg="0l0w783z2zbb24jlqwxjjiwmfbqys3g634ymk5qhzck5w7wcwy6a";};
+texlive-pl-66576={doc="1id4kngpwqs53zn3pqj0hp85yf6rvha17dyb4s0m8l66cj2rzyn0";};
+texlive-ru-58426={doc="0c77yyfj87fajran8jppj0x8krk6b5195iscpn8z2n94spz2fcc9";};
+texlive-scripts-69407={run="12y5mpwin93asvl0anqs170zixvb29vjakwgagvylhg1ns27lrdc";doc="12all49r6n1yc3jxpkc96gx17g5zfbimwfmb5d7s55vl1c88zmxp";tlpkg="12scd4svhgnvp65wkv3kd4iqppahcg3229s4qfkjwm3jb1zwslxr";};
+texlive-scripts-extra-62517={run="193v0r4i3p4psn5b4q0ggpgaazwn6jadjlzh5gjm3igg9k73i1wj";doc="1izzy295pmxrg0sf2szxxahxm6s8bfi960mbs9z6vy7m5j1szxwl";};
+texlive-sr-54594={doc="0icavs9jkcr5b5cx5kv202k95j0ydgby9lqrw8wm9h936mbn9bkj";};
+texlive-zh-cn-54490={doc="1r8n9k1cy7798g1rg1hyj6g945j9649c5hhqf8hm7a7abzx7w6ll";};
+"texlive.infra-68903.tlpdb69413"={run="1ig9nsyhhgv9vr5hhvzj3asqz75fdjrvgyj1s2z8rbng0y45x8nv";doc="0d6ij3bgna15i5fkg4xwi7155wz891625sy6qh4jfjmi9sda9p2n";tlpkg="07qvyhgbbl4cddhn4wqh1ivp1ifpw5hwv05xywl62zc1swag317x";};
+texliveonfly-55777={run="03i9pzqv2dz4z9nlq60kzwiyfvzhhaalhczqa9146jp4wvcib9l3";doc="1fsabzkbcrk42rsp8ssx0kvap31y1rqnkq582129946q3njvmylx";};
+texloganalyser-54526={run="0icav63nll0lj85cqlbg1lx1r6ysjf1lyv5bydxr3flr1c7yqx2r";doc="1s7952n2brrz3s1qca9r5qk8fnjlmrmrn8b06dhjxdb7wdqis6g0";};
+texlogfilter-62792={run="19sxpfyfp2knv8q13sgka5kw74vplr0fnf5c9m599h5kb7v4pcys";doc="1wwhdm7b2rwp9qjpivj3wflwf6q4lcxbc3r52g9c68w7d492v7al";};
+texlogos-19083={run="0rp4l8da3dn6djdjajavxqr5mmi3fsyadcqrpmd9cfggdvb9i8qz";};
+texlogsieve-69072={run="01l0i7naqyjf5nafk0bzx3i9zvcqphzg4wkbnb27ghhwarzibjs4";doc="04r1cj63s3rh97z42fysr27drximd1a27ksvm434aiiqz3niylld";};
+texmate-15878={run="06hnwj11ify60gx92zqky28spdhppgai5v08l73kiabrryzdn8w5";doc="13d6rlazx3qx9zwbb60z1f6dk64n6rph610s97hha5kpc0v2vkm9";source="0faabcm8lyfvzn5jb7vbpkpa31gjb1czkr0g391vbdmx9lrllxar";};
+texments-15878={run="0vhwraxncqx74akzmjcww4akisn3zjgi5b6ac8c350flhl0nsh5p";doc="0xn17gjnb7n3ryc28p8vg2hshcwa660482pzm9byq8k6s3a78yny";source="1kq5zw31sv0i87h30ahyasqy1qh4m36f0j37f8532s20n5llcq0z";};
+texnegar-57692={run="0qrnysss751vsbgd794gwh8lwrq6gq09p55qkkfngc5ly29icx9c";doc="0jidhqlklr8yd48san5iyy3i5pxg8lygf4xi0gcp3ps7xcb0m5g1";source="1bayaa5vffnkmvdmg64q5rsnh69grr8qirwd41mlfi9symh9gm2j";};
+texonly-50985={doc="0h40f8hj03ha0ilpj2fx5kzzvdv0yplmr4528s2rmmy62l9kgdkd";};
+texosquery-53676={run="0jszy2f076hrc29kk8qcr9616hyk2cvys3kg2qfhvblxf07ziw62";doc="11rz21m720pp97vb457pxaq5yxf3j4v8vfcd77w0bjpc632lh1xx";source="1q7spgr1xk2lnx2xqksjh979n7r2v1n1441fkrc479zyi69ncn33";};
+texplate-67201={run="0bh1yhs28wzagh7i3sraki8ygd1kikcmalqvksilmb7j4s5c0hhl";doc="0zvrsllhb8fkk1wzg9mylnjyvb7pjl5wvd3m899j7w9cp5zl5yvp";source="02wc2aiqcrrgc514pn1m7yn1b5k6vg1p8d92kk99pkiz46vxnfj8";};
+texpower-29349={run="1w1yn4is019rjnj137ckmkas48xblmhpn0gvp8dac2hmsvqfl06f";doc="16j3xy98k9hb3p7bg9inzqmsl07csa6lx1lgym4h6rcjh247llqn";source="0nkbapkzq4knxhs63fiqg0rcxyp72vmd35jz46dha87s2v5w2km5";};
+texproposal-43151={doc="1yxb3yagljsdp4s07fzd6498889i7cscch68fb77jbfc2z4srvsy";};
+texshade-69371={run="0d5panq1z0fpi7rvwp9p2pahd7vlb3skgsw9zq4rhb9pirawv3v7";doc="0bvxfpc2v8hph04kn8a8rf5995awp8c3zc5r3ddnghcidn83xsny";source="0ib9fs5391pjxh8p0c6bzvxmgv03y73qgdpjdzyadbhkqj4kkdxw";};
+texsis-67930={run="08sn35x8wab41mdv67ra3hahrsf4v4brp9n5z0l4bk3k27rl4q0m";doc="1bgngwqj3kkr196sp8i59yrkqpambijr4a54jfrgxb6595hiadsj";};
+texsurgery-59885={run="1f2m8b4xjq38j6q86pfa4m8f7z4sqyfblxpkkljppiz66cq9gnpy";doc="1zpilg11flz7z6pk7zhpm5ck39avh24na2jpl4asnnznaf5bzfjz";};
+textcase-67755={run="0rkhw4rai08n52ak4acix224cwj9fzpl1m4qcxzql9cq0h51rn2f";doc="0hw7q77pn8nx80qqvfz333sn1dpx4srf5xsv8vpl6q1akhrk5f84";source="1bxkagbkl6pnlnf9ibs0ics3p5nm9dghyfq97bn32fv38jywlswl";};
+textcsc-67193={run="1zx7890vdwghxl7g9rm9fcj0v4h06sdbhsscwyp7wjmf35k6awm6";doc="04gh3w1a7pnw1zja7gg01xda0f15s1918v5m289ax22j4x9g472a";};
+textfit-20591={run="0vmffs1a9zspg3hcnd7p0mffa0cw4nnbx8s4vari3n8npmdxrf26";doc="0dcb63v0yhlhvjmcbsfnw3px6qizmq95rq67i64dgks85d4dhi6m";source="1h2yql1gy6hvwv0rirm9v996j3clrywsg9dzgnvrkrvnkf1b6dqi";};
+textglos-30788={run="08932gszahdc5q6pckg9q8bdxs39gacjw9cljjlvghs8vn7jjwjj";doc="1c88my4j07b7ihn07bcii9xxckdv04g3c6jycm0ffhjffw4p7609";source="19hc7lalmbr85pbz3pd3dm696fsbdl7y8v9g1c4l2k7b0i5mc8zf";};
+textgreek-44192={run="0r7jcv38749xndr6sigy8zw96kwqw63k4m33c09hikawf2728jzd";doc="12pwr5b8269hrwgpr9g4chw273wv81cfa52wvp3nhkd2cvbhfcp4";source="0wq69l55462snrkpbpnlg03mrn2yxvibw38lkplgfc65gzaa07sw";};
+textmerg-20677={run="1bwlcaggagg811sbsi2wrfsz31rd6x92m47aszikmkzfzx4ina7k";doc="00p7r1y0npb8xfq1mcw5apccb6xznww3ya8q0qgg5irqyxs7d9fc";source="1972gkv933fmy32ys96qg6p1yp7551mc4cilvnaasnrwyr776f8p";};
+textopo-23796={run="10g5i5mg9898q091w9svm7gk4hgd6dja3dwy5dwc7s78pv0qcd68";doc="0r94ivbqmvs9lyw1ipwzcb4f0v9npvyfll7r8c9g627ikk9fmpa4";source="19p7sgz34dkvjqkld38x8li539kx140w1nj9l3ai5chilxz4lvy1";};
+textpath-15878={run="12f8qn2ncw0drx5r48ddb0xcc6fdm7jpmv5i1n0ihfcqaqa1l8xb";doc="0qhyflskr978qp01apai5r3qjhsj5q4mrvwck60jr79yasxa109k";};
+textpos-63967={run="1mhbsyil3ldw4xq40739pm7995d7fcv050ra4xjnaqdf93cqr2gm";doc="06ya6i8qkp823pnh1jzq30wi3pnww00jw48lbk6rzvxzyhwxrzdh";source="0vhyr1ljhi5dxyj90zhpr8x7h8rjn84pddaa09al69awlgkihclf";};
+textualicomma-67201={run="06myfm4l1k1ms5bmgswbqikg3kkrz6qah97ncjv0s32inkqjcicc";doc="157m953qh08i0a8lhrk3228ir2clyk32zd6x9ar2fgbkggjll9ch";source="1zp5qj4b8fn5y8a7aylz7bpkg6jnmqifral9l3h5g8ka1727ng9h";};
+texvc-46844={run="12knhsx5y5n6wlzlmzvym6bza5dry1z8qlszka0f93wx8hpvk7cg";doc="1852x7zd684h6jjhq3f465z4q7d75871hh5gc8abvdk9p6srnwsz";source="05532lckvznsv4slyvsn4jrv93y4gxbcy3q3r8c7g0lgya255s9q";};
+texware-66186={doc="122r0aq02vwx6irsnapnfbvhgy5d09x90rc8zc7a0bi7b25bxnd1";};
+texworks-65952={doc="0n0ydn8v42q3wcxmhjv5nwmmzf5yfg77qlc1v5bmkpb04dn4055y";};
+tfrupee-20770={run="1q0z0as8gd9qb3p10rf5kwzljg5z790cgmxi5dbz1piy0lcnj4hn";doc="04zmcfp1xqq53wl41rw199yj47nf7l396qcnsp8dsrvf7d0n0pfc";source="19bgxgg9cdgfdvdr4kzmp4na0n6p28dq0iq4nqi849j4ij5lwmnj";};
+thaienum-44140={run="16awnv395nhgm8s3n7w1x7x0h32033258bb0jp81v5nrnmn344wi";doc="0jvggbnxinc81bn8glmyli746asqcpclgmvyl8gzbdarrnabij3b";};
+thaispec-58019={run="1inic6cpbf1kf1hi6brhq5fj3fkwn95cvgjqwh7bxk9dxk1rzsh8";doc="0ki2jl9spv70f5hkzr762nkcylplb9z70c8gdp97whqg9l9mb8bs";source="0j69dwrn3qk82xgnwabq30ab1pf4xs3sfnxgnrksgmhd0ly4lpjv";};
+thalie-65249={run="03lb6fscsbisqa8r4wyqdlsfsf0g53k3zavgqbhih0rn1w588dzx";doc="1wl6h539d9ygkix1d4fbz04q20262811glpy7mjbbhr9wzacbdjv";};
+theanodidot-64518={run="1f1ixiqb6mn875rahrcl157y3bc6dv2i7vks7vbnchppjbfgk757";doc="04n1cp79d229rqks9vkj1byz9r1zi323v4r68g6srcbr4v7n3nhj";};
+theanomodern-64520={run="0w1ybshhj3y22ysymxg27apmblqxwwp193q81vkykxjrf4qn357p";doc="1a99wqmfr3adqm7rhq58kjg10q9bvf0gj44ly21nvmdl7wa0qjjl";};
+theanooldstyle-64519={run="1v5hkpspzjizpbcgbr5wjikwpvslq02fahqbdjpycrpl2q3zlc4m";doc="1wfqvav0k9vz7bs7wdh6fppijq904r76r6cwg8x5ffcv029l75ir";};
+theatre-45363={doc="1nhm56spqvryhmhwmzly939mzv5yv3398lh2lyfhf40rr02mzgi5";};
+thematicpuzzle-69356={run="0cxgvzld08bmyl89qvnkqf285qfgyhdmkq6aq8sk19acr9lljrzj";doc="1c693zjh4n4gjpkbrvw5s29r55b350mchby88l7pakhzzk81xxfx";};
+theoremref-54512={run="1dfv3pz7pjkazp0czzpzhga9j201gwvx785v3qvqasrvpa0vwyyq";doc="0zs8q0xzinp2ih68c75yj9mbjh1pmpqc77xg9hmj8n3gpf1kmmi5";};
+thermodynamics-69086={run="1m7lhcbn6ynxm34y44j4hwb0y644n2vlm0r1yc08j1p9h27s6zym";doc="0knza3s977z4vs2cdp7ykk80104k487gbs2f7aa3qsbxqfln3jrr";source="1c1xs99a599l8km9x0ckcif32gg78j8pgva2axdrllws36wpn2j1";};
+thesis-ekf-60228={run="1r2fgq9ralrcm00gz0lrxm1f413pik1hill8x8nqfm9wzif2dd9s";doc="122vzng8dhsrpixwn40r9ddczqk9igmzi300hmbymy2b4ydhzc3a";source="1nizsqbj6nbf5qk54vvldhb6flppyn29i058jngldqp43r3xq8hy";};
+thesis-gwu-54287={run="16vb94z3svvnsxmv43d3xy6rz8ki3dmk01iz553q949f4dfig1l7";doc="0xfl7s0i4ni5lwxlsmlldl96jnhfxjyay99w3qc3vc4az9vdqfmc";};
+thesis-qom-63524={run="0lsi7xy3grxmwcj55s2m0cnkqr6544qn40k5jrj6himi7l1p82b9";doc="1sppdlgr859hnfjhjlsdv8shwzi5gkgmv10s8f9vh646cnqp50rx";};
+thesis-titlepage-fhac-15878={run="1s9g6h020ahv404mxsfvqic2im68qnvb425cyvz0bj2rwn1fwnc8";doc="0pjvm3d2l9715q50nbbza5l6vzhj6zaf9payimk1lr6k94357v1s";source="0bhf68pc8c41ih92sajva48m9fq7a05x4y9qqanbidvmb6jmvhbn";};
+thinsp-39669={run="19d23nm17nybk0dda4l05dsbs1695fk0kl86vc713l19mzw4l7fw";doc="139v4dmnbhsd3nqlp9qknml0glfmh1f9dg0nnixggf19lsayn27p";};
+thmbox-15878={run="16c6p3n4zc2726adj8z131h03gbzyhmh5bj8hzc286p96131swdw";doc="15mkfzmy0141k5wgspngbwnnldf0i1rvbmq2bkzcpb72v9vcj8fd";source="0lv5mr23wwhig6r9fyy7rlv2cqxlr35y3g89i938w35s9q25xx08";};
+thmtools-67018={run="0msngnpdpqpw0skchd629v72wnd9pn8s1jijcyvqzwy88k8i8f2m";doc="1lyc17i46x1v7xhxl7qf8hpjn3y9r7da4lycpsfijmlscp9q3c3y";source="13zd5sx1nh9f61jwr2raxkli2y42w2dr23j5yjjfwfk65pd8bfq9";};
+threadcol-28754={run="1whvgb3901wciijafawy5pgnr4adpix2a6ph2v52kwglg68s2ixa";doc="0dky94vqbqrba5hsvgs1sllwy6cxmr6mlr6zv6qgn1yrrmjxs0by";source="1qd96xl0h8bnp5mqbh8mprdfbw1bhvp60dhj46hqyl4w7f61jj20";};
+threeddice-20675={run="1r5cssaj6qxv17n04pgvib12a7b7fnxfk3qbf87mhs1xpxsh6v1s";doc="0w7f2dfy6sbircp8dbw8s28s4bxbqnmz469c71v3qcaw6hgw3y2y";};
+threeparttable-17383={run="043vgdllz4k8fcclyw49515rcwl03albnmszbqi7sbsskmxnzck4";doc="1mlhxgv9q1gnkp383vinybzh95fd49dgz4x14jnjilhjabvhgyid";};
+threeparttablex-34206={run="0ipmhy0jpx38sy1jyyw3ab953cyh95ix4qwrz1ywhi54dn6ahygs";doc="19mk0y6nn6bn7gmn7vvlbijqdcjp2br0s632lmhnyhwz0d4xz6mi";};
+thuaslogos-51347={run="0p5xs731fjvd413rg4lcp289ijk1lxa5f0c9arj949f6s0pgdqfj";doc="03a24gn5zzr6ma9q391s0vsg7qqn53kbmpw86a3wlyycsrz9ipl7";};
+thubeamer-61071={run="1y0qangc89pla53dkhxx1xm9n3bk4ngslns6lzdgygyqk6cslfdg";doc="166kd79lyqb7vbgwf1aqhv9jxmjspdfx7malgdq1nizari9lndc9";source="18p9zh00g56kxxj38djjiwhy4a6mfgmjhak962ph9d6k34gfxa6n";};
+thucoursework-56435={run="18f3gbydg1z6hiaidqw3j9yqybzvcp9ykq5a7frbd3ww051rz9xq";doc="0pq5i3kd19ng122nf1gd97xsc8gd58l5gplg7iswfjykdk5zv562";source="016r76nsk9lnr2zkkwz27r2i35j154rlnk5izd11rlmsyw3ix7l0";};
+thumb-16549={run="1khi4j0as028c7fhzkdc6dmbgdyj45lbasbv4ksnxmf2kylmbhxz";doc="1h4b21mmp2bx1vp8n3556lxm16x7acy3srs9khgq24nrfkagwrp9";source="0f2z9w9mxfj0b3s9mvch95cv49bkyv6mxmdzmkyc1zr8bwwqdahy";};
+thumbpdf-62518={run="1zj2733wnq4zydf22qhza9j0nywh6fmn8xd3dc6nwfzm68pdn9ic";doc="1fpbfz855cgs9gdvwqbg9pb3i3yl2xagmxbf25mra08ii17v3pf3";};
+thumbs-33134={run="15k7rn5fygvsrjln614jndldmq47zq75zqlv71f2gvr8nqgil93n";doc="0c70k96v2m6nbx9b8qx09pky9g0s0ipqsxy3fsn8spjjrqkwk0v9";source="1ns05c3ji4svj4x9y2qy9hn0f2bvlllbvg98xsr2xv7gylr2pkmw";};
+thumby-16736={run="0q3h6cwbw90adw3c8ggyb707l23qvsfl3dl8zrzhg78dm9l8q3gi";doc="1v1934z064ar7zgjpnpxvmc7bkaq080h0hka0snkj7kwqm6sfry7";};
+thuthesis-67127={run="1wnnl59l063ykjlzl2ln781w56w6s5wwz6nxs3wsx9inzn4dn966";doc="13a5vrnfnhhwl9kdjry50rs67kmcpdz7yh0qvfvwddv5kndjr0py";source="06ys99v2865pyc5xfrszvj1jc6l4kxgi37nih3v5s2a4k0sp3hnw";};
+ticket-42280={run="0qpqzff2hj01g2k8nq9vc91l4zvg7kx4p7nf0gd6ji9lf0q5caaw";doc="07xa7nf2qgvjq5pzaj7k75wzg2ldcpxb47ypx53swssz277ixvp7";};
+ticollege-36306={run="1mivwaf3ngmdr1zdkl9xif1rl4fy0b062r43064645idpkk4120d";doc="0xy35cggk34ziagi1m60ymckknls2wwil0wdzlswn0aw2zca9lc7";};
+tidyres-67738={run="1lnymwa3hbfabxigxfqkhmczigswqn84wdw8jdzj7khsv4zm47rk";doc="0gb1aayki8i14i9zl450jmy4ybbcdnv54l5s1b34ma7vw9nbng5g";};
+tie-66186={doc="17z5ik7bbf0v5ylq2v1rda6z64iz386vp56z7yrr6h1dl488kr93";};
+tikz-3dplot-25087={run="06ij3bk1aham4iv0wm14z9dhcq1v60qiv9n6idfcmjqz6m05cdf8";doc="1mq9drqg2z9khxfylsgpz32binla5abq88938jcjk9y21d46r31h";};
+tikz-among-us-60880={run="047mfp3z4m63wc4f7psrsi77qpc55drl1wdrk2dlzfykkh4mna3p";doc="1f817bi1m745c7cgl7r0yx5jx22qi6h2xwg8kb246lkfsvwlynnz";};
+tikz-bagua-64103={run="14cycyq0lshr61n83jdzdyjhr20b26fsrp1ximyh1phk958yxmbj";doc="167pi758hdi7chys2rbs1v1lqd5gi2nb1fq244igjr77v1775ifb";};
+tikz-bayesnet-38295={run="1sdal5mq1s3xkklj09hy0j41xymprmh78z3923f55bg0kzdc2i0v";doc="0kwlqx1bys43hzwpwj8snrn5693grfih18fcw3d74a6x7s5k0h8m";};
+tikz-bbox-57444={run="023xrf65s1c4g63ggpmsdyckp6zspgjz1ad7pk7jf56zdnhqaxb1";doc="0ilj988mh0w1ws8ancnxsz0ig4s5k0yi3ywihn6vsk3z94k51yfm";};
+tikz-cd-59133={run="0xv75gvwlhax08mp1nlyy2kgi0br7wy7aahbaf9rfbj0idpcl5ip";doc="0dxsixn2n0irfqrgcp63h74fss1ldqlcvfv6d9v61asxsjdrzf0v";};
+tikz-dependency-54512={run="0v471rprwnqlhwvx0lqxvpsgh8ph16lbvrpcrynx2hx71n9daqla";doc="0h3mnxwcb1k1ilw9pi1xcwmryjpci0kwlaqfxx2i8lcggsdrxfxi";};
+tikz-dimline-35805={run="0mp6xg317m0dkrw73609xdn7r9hbf8bdmyp0bdj2xzpynpvxisxd";doc="05rikgrm1f0f0rx7ir1nn4cy3a93bwrck2xqnms26dg4dqddnrbk";};
+tikz-ext-66737={run="04ar5xpvxsihcv50n8z49dd76s4vlw401y106yi37x3fsbgfzshl";doc="0aigvf2a0b9lh6gj66gp75iag3ipd1kjf6wv5safpn2v1jfhadcg";};
+tikz-feynhand-51915={run="16bb4h6wbmyv9mz68sywgw18h2dcyxkmkcyjjshkbagimf3ikb58";doc="15h182ywc8ihahv76khphah6awpahbsrdi0hin578jmg1582rzp4";};
+tikz-feynman-56615={run="1kh3riwk5iksldsg6ljk27lhh6fka473k958q9781m65isdzhwa9";doc="0cjl1zvn2q39khh4afzvh6nh8dlhrkd6vn3i8n2ywv4xldpb2k0b";};
+tikz-imagelabels-51490={run="1xg2malb3ybgcvmr1gksgg93i4d8fvr7pqjky1b98n0abfxybxv9";doc="1fqkzfbbm4ckbjpgjrg5fa9ggam2lcy5gzvnhc4njyjxwx1hjcsd";source="0cqcbwccfq65zsbnkcdjfqwj9h8ndjhan1ghnzp9by8z41qj2fvv";};
+tikz-inet-15878={run="02xbywhzzkiica13d2dzingz9qm2v1w3fjrj9kbjn9q9fmw2xw64";doc="15mvq4gpd22nah4p84dazld4ncdshygmffz7sx42s2zqyjwrm6wi";};
+tikz-kalender-52890={run="0lkvvwzfilmhcamy00jdfrwhxr75d3jzppyhvvb26ymnzm6v1inv";doc="1pxc1wii1hqmhr42yskil16ahjslkn7y6q8qj8hbq85y7ymm3lxi";};
+tikz-karnaugh-62040={run="0bhnh37ydzfrkvjwfyzih59sadfzw9y02y337wym3gqaa0m6w7gh";doc="1p7rrg2jrpg4hqlvnzbniiwpcfxyfxbqq29izbsijlwlwfhm2zaq";};
+tikz-ladder-62992={run="0b39723rfs3d8npxnkk96x3fcsk51w5vnh3mfmn9dnh07xclr92b";doc="1j5v3vj0w8yzydf1qxl2smcf5llwzq4zj86rjgrcqirp86z0jgqj";};
+tikz-lake-fig-55288={run="0miw1aws614ffb4q8szr6zh5rb0216hz1scl50ambx1qv97azsgm";doc="14yb48ylr5rv4n6ikqh704vvzxx8k68l8ww2vnv9lx5nl2nhybp7";};
+tikz-layers-46660={run="1ym859l9bzzd2rack9kcbckzbpmqxyglaa0jggpf3hlbsgzy33h6";doc="1lnlfl8k4czvxz1vyfmnqk3k1arc7jpw7cbgrnh5xbanhvyjfzl0";};
+tikz-mirror-lens-65500={run="0lpb87kidq5lrl79hzjss78qy5hvag2maddvwkh8idnccr06awbi";doc="0q4rp929pq600xi78yp0siagzxbrhx0cksqplr0h7xgn74yldrs3";};
+tikz-nef-55920={run="1i1l0rk7k6kc9vyx9jbpj25bkl77ml5ay1wvwff7a51rr8c87s99";doc="1nsbycqfai72xbrzy6vz7lzpywdavbcyz7x3h1kfhby10s2h136k";};
+tikz-network-51884={run="1mf196mmkg097slc5aslpjlpih2kdq5wkmcpznsyhg7s20mf11yy";doc="05dzfw2x5j1i3534qmhp6wcymba5mwilv2vf7vrw5fmrgd4h1gy2";};
+tikz-nfold-67718={run="03q6hj8p7p4f5sa6ipsw456q5g3326kidkmsiil0sjprklsm3w9i";doc="0xpc9nik5m90kqrpmg254mcpa7qca0fl4n4832pax0j59g9f9z1f";};
+tikz-opm-32769={run="04ch55a4jvvif7c74s8bbsq0bkw3v3zjh6wdlmij30cfyxn114jg";doc="0ajrvamsj1is4lh0xf25wjylnjg8kd02b7kwj40nq1kawnp0hlxb";};
+tikz-optics-62977={run="0r5z7vp05s92hk87m01vcxfa0kkvfmzxyzfx397b3lwmlavzws8q";doc="1zjlpblczvr9390fmz0vh8zf0pbf1zc4d01l4ykhdpvljf7ndrmd";};
+tikz-osci-68636={run="1rxkdljz3lq6lnmpr56wyb7zkxrcjzkg6pi3qwrgqcz0njd5d7xl";doc="0sn7qhv2kdkiivigbkhqqpgj2kki8xydnkagmrbk47s3bnvzmhqz";};
+tikz-page-42039={run="0971kcdlavr24lkf9wdzgwb97cf952iw1d5ls6zz7fsfj6pigqjn";doc="19g4b944wzahnabpw2kighd1vr63c7im3xgcjz3l53yrz89nhjmk";source="10v67pn2zvpxl3817h1rvn0y4wb7dj07p4nv6wf1jhchgvmb8bdz";};
+tikz-palattice-43442={run="0pfp30l373li523l0skr52fa397h2wkizvggsls3kv3p087j16an";doc="0krdfwivibibgpxsjnlsl11yppmsynanj2lgf892izxj2m3hld7d";};
+tikz-planets-55002={run="0gjkapcls19839jrjimshd3cqdl9x0ld27i2d51s7k8f0rcakkmh";doc="0xx18gdj4r9jj7qvwlrd237nhcbazprhqgzn6m6cy8m36xy6yc09";};
+tikz-qtree-26108={run="1x638b7a71mwlcrn50w86j649qlzjm121ap6jgccr5vck6q9wcms";doc="0khnzjc78v1p8ahyii5rsqx29797jv3ycdan2d55bvw87p4iyrra";};
+tikz-relay-64072={run="0rwpsh2y902b93p1kjb8hwhxjvfiglfkzma5alghcdw0r538r4fx";doc="0h5pkr67anks09f8fii186sfwhh3l137k7kp2xdwk1sz4zfcqw66";};
+tikz-sfc-49424={run="0kkfds07qskfbd7yxfyc6spylnd0nnhjyfa8s7i44y4d2x1skik5";doc="0b5cf8kcchp8h33x5ih1wvwdrgdhbkz589d55454i1470b3h4f79";};
+tikz-swigs-59889={run="0cpmk783m9qf4wq1qsw4hy3azjlx0r47ya5ijw4ss3l4nr8i710x";doc="02carafyvhv0nv29n9x0k8ij8adiwf2xqr8bw43k4imj690360li";};
+tikz-timing-64967={run="145r878hxqfx1sdn4hdagmcnfx8xqcihfz775zabn5sbzki87ywq";doc="0na0rjgnala2lyww8chnkqyp26c1y2siaj7gqh6h8fjpi5bpamdf";source="17wzwm58194p5jlwb74z30864q7nzg9fi4q4dbcp26b3p6kn5cxs";};
+tikz-trackschematic-63480={run="1jbji8zkqjwpf1bn25p415n7cwz0a5q2606imyj8bbxdzp0r8y23";doc="1pvp3a9pgszgb2013gkh1z1fm8hpxa4z6ssmr1hwvwj7y48399bv";};
+tikz-truchet-50020={run="00yf9044lpsazd8wnmcz39lnazrxpqd7lpyr8ss24gk9gm33b563";doc="1vlsyyh7xj1fn6wkafh7ps4ys439n1lmvmgk63pya18laxkphxxk";source="1zbp1xb9sbbnr4iiqgg352ymn9ybfmkwmwd49r1ws3w7iy3qdvrz";};
+tikz2d-fr-67239={run="13mzq1azxi34lrkm4rycsfhbcm8cap8pzam8gwc3vfa5sygkczhd";doc="10lv2v9j65bq9fj3yin86hbbj4bvlygqc1b2sszjabsdnmzbw0yd";};
+tikz3d-fr-67774={run="19js2ypl2xlzqb2rspvrx1a73w6wl9jcf6pcm2b0i19rwfp93d39";doc="0kbil2rvy07rdva18kb7krd49mqcrrsbmh2mbflqxagycpy3vf7a";};
+tikzbricks-63952={run="0k15zgfckasxf9zbnh3m4bhwa22pc1rmx930in2k9qskqx41rlrz";doc="1dmnx38k0b1ivs8ay74yhh3pmqi3m9s12cxakfhnw57ipkpp6af3";};
+tikzcodeblocks-54758={run="0q10q8gfbdw20ysv40pj9c1ks4mnb4dqvvz39fvyji3f4s4xd60n";doc="1imd5qf95ykqs89zqb32yg7p61in242vkjx5wv6r2xh2dkjpvv9h";};
+tikzdotncross-69382={run="0vwxdha9gpmdv4l61wdfk5j3mi2facrv3a3azkgrfn5s2pyf4m5k";doc="14xwxm1ckicip2dwc7925sfdnlxdwry7h12fixs1g4l0vmh4bcim";};
+tikzducks-66773={run="1mlj8h6wk80pi8vi8ggj30mg1gcdwdfncif53p0mkyvmvjfin3px";doc="17c88srkb48y49icbqv85kih5qd2r222559a6g6xgbqvwa3yx1gq";};
+tikzfill-67847={run="1igbzzpx6rwqklhnalzpsb1rpj7l4mkrhwblp8k732nfqvj1fn0x";doc="1dl033xf2waf0j40c4whci5qsyxk4346353j43vsrqy7lgsh557b";};
+tikzinclude-28715={run="0s0mhfshfzl28z6lgwn7f540pbmdxl51gqf7nw1s88738mx3m4z1";doc="11jj75nnzw9m3i6nndbfscllfxzn5bd636s85q17gds03jbqkhfc";source="1v1bvpfqhvn3hp3zjx3sqv4kg288aviy1b9zl3s8r64zmai86bfy";};
+tikzlings-63628={run="17wgali1pawsb6kz2w41a27i7gj1sm4h8ay8i8q967s8s07kxv5p";doc="043sia2hyynbwpgh10dfca9gyih97z8hlxpi1390a28wnmyvcbwb";};
+tikzmark-64819={run="1p73c3ivn3aamrzzzw5y4fmkfy7s9qnvw4q64jn01qxzzs1vbhdl";doc="10fwszi7wsqrh6kql40s6w4y0jji8v0q41bd684cravhgg0yjc1p";source="0mbk2xvqjpn44skvdgjq43s1j4814sfn57xc1ishcwrrmidy5pra";};
+tikzmarmots-54080={run="1m33y48cs82f2z19gwhr89qyaa9n5qlrps9ash5ijjgra9dkfj8q";doc="1jp10kd7vpx68z9i1j1pk904yjb078yr60hkfk0vxhwhnpychlgz";};
+tikzorbital-36439={run="17g4bd556kkhrxir4c2q6f7qxa8rigkf41dj979nb5k3a7w4k3b4";doc="0h1s5dnyv8n4hv608c5rspdgy2h10ilqknddai779h9biwhfzh3m";};
+tikzpackets-55827={run="1kidqyd1d7wvs1f3cp6ixp397ipaj7jd19djhy3q4dvbnzq1xm4b";doc="0rlpz3m4vsyin6ckyjkxjp9a40gxhhi44z18hrw2blmp0mg011v5";};
+tikzpagenodes-64967={run="197sijaabaa3sf5syasf4ciwz8hkgy2pyr7lp78gzhlv950drghh";doc="0y9ik1r203inp74hx4xznkypw0p88zhg9fq6b9205i053vvla239";source="01bjvk944nlld4zbrld35n45dzljqf1rng83y14ipn3wcdxa0plx";};
+tikzpeople-67840={run="12i0m8jilbl8ldji9xmxm5hgsl0bd5vkjly1ykmj6w2rzgmjfbbp";doc="1a3cjadvnrv9hslwgihxv8z16awkikinv44zcj4fd5drnqjsvcrq";};
+tikzpfeile-25777={run="1rwv1i6yb0jd5gw16db3kqar4ykzbwcyw51hv781iz358hgww5mc";doc="1530vkp14lpv0hnv8qcxalibsi1pkcj9xp1pa87lisrillxs7kwb";source="180cp8vp26shmnjxg9qs9n28v4xy0qhqgm1bvbkqrpagykzzhsrf";};
+tikzpingus-68310={run="058v2b6scnz31p0jzk4i1i8v6a1vb10fd4kgi0izd4pw58cjj31f";doc="08fi2mlzwvdx8i4r2hf8l2lx7j6b4phpm8ihwklfi49ha5i0z2n8";};
+tikzposter-32732={run="1r6pia3sjl9xcixnsr5pk8cma4f18mvpn60dxmpzpn2nn1sk4p26";doc="06vy5vmzrqhl6zk6z9a4kyqfvjqc4s9pslvl9zfl17cdqsfvbdf6";source="1idiz8izn9m9h7kyiavw836v9x1vzg58vap42wpj7yd74izwvf1d";};
+tikzquads-69409={run="1a55w1apikxg33n35wwi3ffafnlhgsnl5w6fxq9qin77qi5rq8l5";doc="090fyhby42m0zlx28vm9ix5pjgkmv7ml0ja6w1kgn0vd63q02i4c";};
+tikzquests-69388={run="1l1d23ky7pvcj6j1g52p5qsdy060qbjws4fp4i7j38k6dvyrw2pl";doc="1bvjy5ghc0arx48gxc3sz7z1fz02vigg5cxc1g75b6pcn1l5x9lf";};
+tikzscale-30637={run="0h8hpk0nv712vydxrzyhvqxrrqb34hw5qjgq9baagqj42ka06qfg";doc="02sz63v9zxr58417jn00ypm3myga7x29q31xbnz7p7mmq5q1r94h";source="0rf6rsrcpapmhz3q5wkgcivhvswy1kb3mql94xs372qc08bxsi3h";};
+tikzsymbols-61300={run="05a3szm1xgsqj766cwwf8ssg1s2jd0kbvgzv6m0hlkvnpig13y7k";doc="06wkvldkiym2xlz47rr4f0nhlbygdqisczn66d41lsf59v8036lx";source="19jcl91qn62hr4j6fcw6a6dc0qhpqqfpzqb1d8mwibn91dzad00z";};
+tikztosvg-60289={run="1gpkypg9j6iz0i0f77drk0p373x2vx8z5v6j9wsb3bggnf00f0yi";doc="03f324pxiwyxgnsvw83wi8sh5ya633a1d6833kq2zl8z1f51vvfd";};
+tikzviolinplots-66659={run="185hmygifmnydjfsg01mwshzjx6d80r92j7bh3djpkslxwp8pdyz";doc="0asisvkbf7gfwqn6wzyjl574kysjz4z088ph4pqggy4znd0yqljr";};
+tile-graphic-55325={run="1l87pqfzgyr8apcs9f2gssf5rh1mvknkr5jim98zj5f93ca5mjpq";doc="0rq35cpk9l7rc30l1hk55r7x07f96ishr3dzdi7x4d50gv7675ah";source="01xqc704g5pqwmlfifzvv61nypgvnabxv6xw7ljgv9vvpyvfh0ni";};
+tilings-67292={run="124gj42waa50pv8qm4zkal8xxr5d0kvi9wf9qlrz0chhm1xk4v15";doc="02bz0wpvzwf4f97g14rkv25x0ifxxfwdkgi3nbv6x2djbm79xjd0";source="03zb3sfygc8bbdl5z4hz7gy7wfnl54sbka9b8w7ywkx9wgymvkz9";};
+timbreicmc-49740={run="0inffnb824kv9lswj46b8p0zb36f4s3pfix4m7x7v0d216xa75pw";doc="05x699cyrkfnygbwfifzz4ih0g5nm7pzlj6ygkh6pysyzxkb5w94";source="0hznll8725wbjmayxilg0hvjw2vf63wj4cxmznvfly9lk8z5zh5m";};
+times-61719={run="13g41a7vbkvsf7ki9dgl7qm100w382mnlqkcngwgl3axp6s5s8l0";};
+timetable-15878={run="1lnl8gi2rrzcy688qb8b1ff9yivwxdqmbcfx2ph49aymkxfym97b";};
+timing-diagrams-31491={run="04yal5fdbwwdq5i7frmvxm0z7zy379gpwbc5383xn0nfdyzrq91b";doc="1w3qzl1j3viaj6qi50qcyx51w2ms23j27p17h526iz11x39w0gw7";};
+tinos-68950={run="0czfddyibqn7g62j3kqqvswwfdm1z6xwv0k0m43g30n8r61a0qa5";doc="0mg2rjy5kk7gd05lp00zh41sxapmm0bvl950r404wy1snl17d23d";};
+tipa-29349={run="1vax0padc42ks1b4rvl0ikfqmb5i04ii27k1711vfdbzmg87j217";doc="0wwnbarpvjcq8ibbn8sr0zqrlg3clplc9nyh46r5gsr06qgd1prf";};
+tipa-de-22005={doc="16gwc0dpdls6s2vdl3hmd6307d88gfzsa3kbw3vhl0z5iawvwj4h";};
+tipauni-65817={run="0qzwx1rd5wqrqwlqrgd7c8czsvr9hy5bb2dljf2xqnm0c1c05496";doc="19azyp11a949kqkwph7b47128fdh7k80lf9ia34ik7a9qw1gri73";source="0m5kfcjk6c0mm40mqbsfnp1ddha617d4sl44dv62nj3rkj3shqvl";};
+tipfr-38646={run="1a9vj3r5b15chzyrpfd7rn0f19qkq9lqklzxvzm4xc5b5n802zbw";doc="02x8fikl1vnirfcrw42xq2cbkf6wpciary55xyk6xwnnhh3abbgb";};
+tiscreen-62602={run="143c2w00f4s24qli3wbnhps6b5pbrvrhaddpgpgn52pmy20f5z85";doc="0l0qs27bm0hy835zljyapyhs7iwvkpn85vnd0z02wy8l0nb11ly8";};
+titlecaps-63020={run="08cy0cmrp27iqa081q1y3ibif6lv2c83lmvn9d7r920f13dpmy7k";doc="0gmajngp9cgi10b9kgc4ra020drmm58f00vh1yv5qj3x8bx5hihf";};
+titlefoot-15878={run="0c0nhhxhb3hmvg3a64lr5npbqsmrmprqqj9pic91j007k4s1in4y";};
+titlepages-19457={doc="17ib7rpb2dhb2m724x66fdzddv8cqd808wxy5kkvx0vb3rl27hyh";};
+titlepic-43497={run="1pj4mavc06r5ghcvyjjhvn7x2xrccgdfjr3961al7420ymaqb726";doc="06s1r8xy54129y7fvzaym2vkfbyw2x31r91i8cyxyra0chzh8ngl";};
+titleref-18729={run="1y2aw2m7jg7l9vcr35nd2qpbafyff1bc8acy2cm9k7fcjm4rcr17";doc="0rv9hsx5p460pa3ry50fnrcb0kf08rzdl7bq47n5nhm8frpmczad";};
+titlesec-68677={run="0y27npwraxaryl2z7mv0fzkdci8whq8jz7b2xlk2n31slbfvksb8";doc="1yz5s63bbpkiziwggqcal266444nm03fnr7kwan14gswmqqbkav5";};
+titling-15878={run="15iw3giwxg658pzb6basjkp4v92m3qvzk1fcarnzikc649bjcbch";doc="1r75nwakbkwf32qva6icp3pq3y8bgfl6cqw304lcw8p6bih74y5j";source="1jdgyn9zyf5rwbaz004g85rr2jpd5gi5iyn111s0r22ml41ci3hk";};
+tkz-base-66115={run="1hvk92fj8w5lnwi1g16mmgdkinjscpcxbhf0n37sn8l3kpl7m9p9";doc="1lhg3zrhxhzrzav52293jn764kyv0nzb47b97n4v60v3ajgqw5r1";};
+tkz-berge-57485={run="1c9kgzsagh5ww0zlwywpddwn3mx0wrf8yc627gjap3f7nyyvixn4";doc="07bsfmh9qyn8q9z4brd4si1clmw7sn2vh2nr8idqnm1z1jqdnq40";};
+tkz-bernoulli-68780={run="0ifjig10clmd3402y9kdpyw1vlwk9vjakanjzkzablm5zzdr0qgs";doc="1iv94xglrk07kg3jkdci5nixrz96gwasgg5h0fl345ph9rdalwx1";};
+tkz-doc-68665={run="0gf3zjnqng90kn9341xdchm1diav93qlv2910mrl1cc7vqfp47wf";doc="10p4i3xnbpyhzj32j3mi59pzaisjhj066m9np4ankzizgwv9x5in";};
+tkz-elements-69213={run="1k2ypgil01w9d79fswb1mmckb6iznc0da8fhpqax1lp7pqxhhr6a";doc="0baqnqhlf4zc22d4qh8ikzimhrwqc26f7nwjwmxh4n5k6gwwfm3d";};
+tkz-euclide-68747={run="0jb3cs6yqngv2g30sp5xw69fmy620q40w0d0ny65q2d62s46nrw9";doc="0y7x17i9dc3yxa7amgl4a61kk8b0mbyrn1v7n1bsbhva150087mb";};
+tkz-fct-61949={run="0hlcxnllmkhmxl5dwap1sb2jg822bz4glllqcv59dx7jqab5bv8k";doc="1bjkya9ssr6m4aw6rd64nniwffgz57ikz16ciba2x149f39pkcx3";};
+tkz-graph-57484={run="08kfjaniwrlw23vmz24yq9gbdks9fwcf0g4jyy98ikfqh9phhhs9";doc="1drk9va3bgq62qfkcvp5z30gvnscl7mbjz66m27wmgagb2ki2f0q";};
+tkz-orm-61719={run="020bi7dgjipd2ancqji6fa1zcf9lh9d8n4zbacy5l5nclxfiphcl";doc="1zgmsl11cf4fgkfilflw8c4wrcfwnvk1f88l90hwgclfj5q0ashr";};
+tkz-tab-66115={run="142fjk2kdv02b7whr2m5a53z6b7rhh2zfv2fi55q1sy4xaa1wia1";doc="1p0h1l1jca83j27wa79ncjarczissgp1jh9f9ylqhbi7y5mk8abw";};
+tkzexample-63908={run="1cs6x5v0f4dbwrsmdq6wjcggc87hc132bp0faxd1fqfhgapd00mc";doc="03cn9q2qq04ni6f6kvrcyy0js718bpc3di37znr47vhh419vpc5h";};
+tlc-article-51431={run="1kzizgzmi7swzhjq9dasz392wga0w1qdb4x3x812lbshzg235vyh";doc="0w07p4rv12ila4ix4pymysbig3yl1apb6cxmb2cp9ziwv9c2184j";};
+tlc2-26096={doc="1ysb233rjb8gpl9s35qql1dny5rj6fn8ssy2dqdqsn5xj9pdasyy";};
+tlc3-examples-65496={doc="01ny6r3ycji0af0cdywn2fmxd0fyz3y7afdnn983a5gy1j9rza7v";};
+tlcockpit-54857={run="0sm882jxczx8q4dvqaxnyb2wzlpxd249ayv77gj9vgq4lx9v0l27";doc="0zd8hx3f6jhm5rklhr5dxb84y17p4rbgwa7wh95ab5f6n8i5pgwb";source="0kldzbbyjvj0n60jgff8y6y27nxnzihjyq10gnx2gi62qn9bia7i";};
+tlmgr-intro-zh-cn-59100={doc="127fad3aq66rnn4jkccyw7qc8pdcwapyjb6lj9kn49nqcy3jm6nk";};
+tlmgrbasics-68999={doc="0yz7d8dw071nawgn2s38da6sp8zbrd03zzsgisfx7yx9jp0zzbpz";};
+tlshell-66771={run="17nrf6cwxapdkdccqr2sp5v7fayd00qcdczzznl7ppm98rsz9p36";doc="1h5mk09sakbmgsppl9fnry28xnzqya3bmp3r1nkzg44cv7kl98vz";tlpkg="1dvb7jjnmdh0k4dfkm4f89zapkjb31z2364m0vapmvfq4z84vpyq";};
+to-be-determined-64882={run="0yrs04ik67wj1wyn4cl3wfabczvz3ga3h7sfbhni9x4438br48gh";doc="1acxz8nala57gnc78r5aswiwhfvdckmvkv4xiwgcznb0c217wpl3";source="1fizh0inczp818vdwlvyawzvw8s0i48mkpgjydfcmwpsbf8rdm8c";};
+tocbibind-20085={run="1swxyai6gqlz8zjah2qnz9c5dkd1smpk163b56rba0kx7zcmvzc5";doc="189qi2qyp1nasg9w902ydk7rlzxl2qww9w3p5s3p9ywchvm1l9cf";source="08sr335sgs7hrhd6cbdc4dh3f8m9fpplv72fk54y57rx59l8wxbs";};
+tocdata-69402={run="0qf3w3021053akx5fzgia258qw25bi0z8aqi73wwsj1prli6mv10";doc="1zmgdlivs4jvhpr6iaqykdgac8v5lyfp3gy9zd72g9l3s0j86cna";source="1y3cg75lj5f6aana3hjicnrca38bq3nbql8sj51akz509a27yl4v";};
+tocloft-53364={run="1vp3s7q0fcyfj2ksk61gxdjjnwhd62dzfd94yp7y3qfy7x8hyqxq";doc="0zjs0ldib6hm3b9msb5x7r64ddknqwf6kkc9cc82hbla9wshq4qq";source="1764cq3d9ad5gy3qag6f6wxgnna0dhk3rx186jqjpqyqli8b4lgh";};
+tocvsec2-33146={run="157m17r777cfqjn5p4j1rbj10ysbyms87jrhk0wjkahag9rgny1b";doc="0dvzcynpfn9fvfkks5idncgbdqbhxj0vp1d3mfzymhiw4sds31xk";source="0gjpdjkl73ip3jkhr9sx94mwxz3rvxaacn553xwa9gvk3xh5rav9";};
+todo-17746={run="0chmi45gcs8y2zh24072y37g3z62ixpv8cg7ck7knmkzwfzv5i13";doc="0n6dy738cj08laf4cg4y0sadzzzrz9wa9m87hwkya6c95znl0091";source="06xpbraybhf1wbl979653waznvgq697jq61xcpz29gn159li0pdb";};
+todonotes-69319={run="130szqdm8xx7bqqqlx01wgrj6x2wfqzynmf7pjsn953rvyd2da4d";doc="0920zvilbcjsl707vyvvdcw27qg1hjlrmjfbr3229rv9n4zd4fqy";source="1xx14nww9nh8iv0nxvnj2iwj1wm70iqfclgg39q7jlywdzpp7h0y";};
+tokcycle-60320={run="0cl2m00pl40pi6ycw1c1kndaqinrqml5gl88kh5d00dr7g9p50rd";doc="0yy8m10q7pzwqbf371w7r2x1x872idjlrh842vkxk51ijb1441a7";};
+tokenizer-15878={run="04b3jy76qdvbq9c6yc0lmq99jqcprmcfd602zm6xsr0lwmxrp1cd";doc="0lpbfdvmib9ykdcwrcd5inpibgkm99avqyn94zadbasr54k62gna";};
+tonevalue-60058={run="12jvvfppr9zqaqkqm1g1nqvxikqqg493a1p10z0k123cw11877xq";doc="04gvjaxqhqixs13x9y805dgsxr62zb4i1xmcgwr42n2a5qa4dv2y";};
+toolbox-32260={run="1qpbidjji1rj056700iyrbhgmqvw8is5kp2mmm5r9f455dmgm390";doc="17n7dxi0j8razw5s12s4drz22wd63xffx1x6w0a4jhiq87na4jq0";source="0l9w43kp3h1mbas4pab9qk6b18ny5r1k8vmm9nq2j95gm7z5p77f";};
+tools-68941={run="0hhib64h3l94c98v7x505gvc0rd1z8cqawypkbnvlycmw57804jw";doc="0r1c6gr5qcrxyy3xnxj1rrwnzfsqna9qzs45gka09i23r6x7ip8y";source="15an5rw7ciq2lji49afy28z0dyjid3sbf66pc0lfs1dxrln2ijrz";};
+topfloat-19084={run="0md1db8a7ifx2vg269y2dhcf4l07qa35jg57x4q9nsn8ac9gy4v0";doc="1q7fssdrg5r2i51b722mw6wydd17qd8b41iv9rqa7s8r9brf8f8i";};
+topiclongtable-54758={run="1p71kg4882rjzlbq9rfgvppz532s227xs2jmg8zbgplfd3j96mnj";doc="1q12jsaxs9d15qc19wjca7xhq6qajdp7573lv9dc6y9il84r1izs";};
+topletter-48182={run="13ggrw7s7k476sp8fzbj5if20wa1x75m68ip17f1srihnfks3903";doc="0f45rz9n6fsg2c429n3hmzqx4cqv9jvrhwgmbfhznn6zrlip3qy8";source="0p6gvk4xj7bsazb7ipfgp6by60br9lyha53lj0z7rz16f7f2ar0w";};
+toptesi-56276={run="00qd8ap3dgrj16g831458m2kp0jivvbvmya2xzcyp560njsvqqca";doc="09hnbj0g7x76m9lnn47z3cjjnlbbfmapmln3hi6ykb6lh534c4wa";source="1nr54n7hsij9rjn54wgnij16xgay0dda2h6vl2qc44s8yz892jc2";};
+totalcount-67201={run="0zd8h2sanc98qzhgkzgaxjyzfh969lb2935778c80n0w8g53ipn7";doc="1cwk1dnpin4zz0zc4rbf7a1spz5wzvza3nc9d4jrpxqbzgs36nb9";source="1cp1fkvs1gbif9brdwxd1dyx81ylshayq6gad4fw6npzqynppk6f";};
+totcount-21178={run="1mj04hqxi81i1pwjrn10ipm6b0xwv2081paa4kvq7yma8g2kmi9p";doc="1c1941vfi2pf0wsbfhhzpahyxjzb4jx4lr85k7g6r8vk64qahy9i";source="1f6r2ci4dqri4fxd5mwmfmqmw2k5jfr5vzf2mazynixxp809mjwq";};
+totpages-15878={run="1z6brrn4kb6w6an8iz6das0yykwj2cbaswa9wy2p3rfc0w95x0ms";doc="0nm7x3rv5rxg40k0xls5d3s5dqrpc8vw9g93sa3jkdn18xkxh2zs";source="1b0glns220jsmn1607d5f44k2lijjp95cd0dkxabdc3p576ipmmv";};
+tpic2pdftex-52851={doc="02nf2fg4xzh8lbbddvm44qyvcvfn5b7kzcyg729a58l29gd88pbs";};
+tpslifonts-42428={run="14cpw6n2j16mq1742lyjb09zynyjhq1wcljhpbb4c6brwnqvb05q";doc="1wwmxwb2y6zyp1h5hskl7b6bb58ydasv3gq2bj0jcnqhdphgii9l";source="158innbi79r298sj1r4qk9c0g4gv1wzdkcmxf511sdb8ipar6xk5";};
+tqft-44455={run="0v14gsk9nwyppdyvcd4ngx6mavd4sa1y8zzmjbb8gcf5dlnz2vg9";doc="1wwvklsd7aqn36vym38m3q6gqf8fgf16axy627vdfqgg30jsml3m";source="155kv0h90zkymc6b3r1iambxsfx3y3rci6nrk01yd185ml21dvdy";};
+tracklang-65263={run="125bpgp39bvp1g3601y3lbwzvq7s64c6zghva1m7yqv2jfkx2rmc";doc="0qncvbpqc693iy5id0fa175jqwyyfvj4bjpn6zwsy5njlh4dixzn";source="1gpp2kpj9lckbc33ldv91svq9snsyk92praghhfn7lhjn897mv5n";};
+trajan-15878={run="1hnk1qb46hihc3ga6klxghqf7yvn6zschp6w36a08mz1hfsdb8sj";doc="017v3bmngyh8wydjl7hmxqh2rz61dg2imcl0gabsfs98l8fnwsfb";source="01qgax96y0sklbbb8mdfv5yc0i2k90i23yg75vhjmb7xlwx60q7k";};
+tram-29803={run="1bk233y9pin9r76vsbkg5j2wadp3c6p2x3mgqchnmlz2ip54x336";doc="17b0vw6r2ijgxs3dix1ff9r342vkz1gsa603mxixxxik62j5crk5";};
+tramlines-65692={run="1x4mgl4rpfijka8bww4qhv3ascqn4plm0qlzpyhz43frmnfwip6s";doc="13zwximglba27mr2cxs2srcb6hwh9jcz3na1jgqh6z6wf2s5x7m8";};
+translation-array-fr-24344={doc="128k8isyn4s0v496sykn22fqn0gfwyyk19kcrmxnc6clgxxfbdy6";};
+translation-arsclassica-de-23803={doc="1ix5lafy3ay2bc9zkkbqw2rrw6ng3izb8d9p6rki6h2j7n0qj47s";};
+translation-biblatex-de-59382={doc="1ygbz7prjg6pdiqm7lknnk8a9ar05xvpdam38piivif3d3yk5bg1";};
+translation-chemsym-de-23804={doc="01liazqafs3lh9ppipw6i6sljcjzr31nq70r83qgknqmb9j0yfl0";};
+translation-dcolumn-fr-24345={doc="0xakssrkxb2wc6xyy1yvx4mm398x3yq032b7vapqxl82h992fjll";};
+translation-ecv-de-24754={doc="06b4vhsgdphi6kdh5x4a2kl74b64z3y5qzxcpkn0hj40038z1av7";};
+translation-enumitem-de-24196={doc="121raikamd33gabvbgwygrc8hyi3qhvx4hhv4h8wq2chrglj37dq";};
+translation-europecv-de-23840={doc="0n3x8g6k3qq3f4drkhzygz4khxyw6isgxmz963xqp91s0y667gws";};
+translation-filecontents-de-24010={doc="0d2ds8kc98yd1can0gzcngm7gsn2gwhriaxnnds5kz3z3al71gkc";};
+translation-moreverb-de-23957={doc="1jbpmvcm9q73kh09mhrbsb2wlycwwm4n8il342hz4jd15gwhmy8f";};
+translation-natbib-fr-25105={doc="0f0r1n8q3jkxsdcddabsgz9h9ndq4yffdpxdqxvqjmhfafhzwgkg";};
+translation-tabbing-fr-24228={doc="1cih442gp6zf8nwb2lbgjn7a64aglyrcw3aciqy5pkdw09pwn0an";};
+translations-61896={run="0cs8wvvcgmzsnx2bv1qhmcmcswpj6kbk79573yr9vmiws43djng2";doc="02z9ggyi83hiqmvc53wgvkxw7q3jn8sb5vd1pzxmw5kvhdgkzy2p";};
+translator-59412={run="1cpr6znw0nkavqxr6bv8fkb72ygnjhl1ap0wbim75f1gmwn7k4ki";doc="0yk617bp6c4wcr6mqmyfsh9lirjjzlg6fiay3fp3g9146p567w4s";};
+transparent-64852={run="0rq67j8rxjcxp8kwzfzb3ppxbb74sybl58yzq318b8663g65jws5";doc="19gpcw9z3jn9mfmb4ixijyh4xv420is978s7d15crmn3vsk6cygn";source="161qwg68f5nslk49sdibmxvgbsn8qmq0ivmyknq2ghhffr7g40pb";};
+transparent-io-64113={doc="04zfmk25qw2cnja1zqhafabsy26zalxiawf6pm5zqx4x1jl47i6j";};
+tree-dvips-21751={run="1l7vgcgbh31hdaaqb9kqi9jmvbyr5429wchyjg5pjjgpffj599qv";doc="17l7mmvb03zi7am3nnp60ychx224kn5i3bdl2yv2v1dywbsnl7yw";};
+treetex-28176={run="1gl79r8h5brqmkw5paf26vm6s5ipa0f7g7cxxh3v68qg5cm2dink";doc="1prh07qqn92il09fbam3c66czcgi3ssa6kd02mb62mczzf5k594f";};
+trfsigns-15878={run="0g1xdyhin39sqbgi7x5m5r5786x2822sf49271arhnv58md7ns76";doc="1nr4pypsglxi17kpxh6y9xh0b1ky0w41f2i6h5fi7y63h9gjl87z";source="0v1yc2zq5kqcbx8dp12nzfipw2cd7f6z2p9wxxydgjd4xp6s8cny";};
+trigonometry-43006={run="1z4sk50nzdplwarbv7ha3gi5v6g2sh2nf85ipdz2rbj3cnz0j53n";doc="12pm2720vyk1c79qbgk935nridg3z48cbzmzbx9ak66araz9y901";};
+trimspaces-15878={run="10rx6pcvwn1lzyivn312j76lsrw3lb40jgzyj861gl3r3pcls0nw";doc="13zf5bz4pp0lwp44kxdj1zw44h978bdpaiskbma752603jlznaqs";source="0nfwqm4a7c1ks5sqypkwmffqasjaw008pxjb5spr49h3sv7sp04w";};
+trivfloat-15878={run="0s74sisq1bg9n593az435chspj55ysx9b0vqywl30mk60hray6zm";doc="09szjgdcy2fc4ddkw09vsa2am5m98mgm606i6s2nrkjgldm0x4ap";source="067ab9d2vc3m950587iqcfismjnl8fp0jxw0ssdsz3gqxys6vgz8";};
+trivialpursuit-68971={run="0rs7bf0wba9i85sgnxms4sng83y1ckpz89ibs93wqh3fappy4w0i";doc="1zci9nn24r51fcbz6sqd81zk8zad5v45xyi6mminq0h3c9c6lysz";};
+trsym-18732={run="0crl9ik3bd9jwvy6x9sl102bvp5pgj2rq9mywlrcpbxrvvffw1ab";doc="1pd0r5j26xj63qvj7mrifcxjrzazdi702ang8k6npq0cc8v29iar";source="06aavqqczg63yc0s1mwry4nd2ml94424a2qxswcz60y57m68yq61";};
+truncate-18921={run="13hzrndx2myazl7f30i736zs8vk12203hv9rskwncl77hxrqqqpm";doc="0l5hgx3207h54s4n5193zc6ssj6l49xwx2hd9jfpqh1f73kpn6hf";};
+truthtable-68300={run="0cas4lh1n7y9z7b0bvi3yv6xhm3klp4bqdmqz42gh0n2vz9clrvd";doc="1s3ff2pjyls5z1ll8m3x5m0h6gf2is4pnlagiv3y87nbs9sx359d";};
+tsemlines-23440={run="1c7sjdrgqbjw6f2s3185k5rlkig643pkkahjisx16h0akbbdm4k3";};
+tsvtemplate-65333={run="02v9b1jvkynz0gl4czzizs3kj68bkwx7m5xfh5abffcy74f9b96r";doc="06ph8853hvm6xmn6zcycim7qrmr2a4vk702sicg6bh1bzcw14cvj";};
+ttfutils-66186={run="188gcwglfgl7yi4026n9l3zkpgwx034vfr4damxpfr6n630rixw1";doc="0yabxx9pq8rj2ibzqa19ix7vz5haydbdp3ylinanzqgafrjd5pfq";};
+tucv-20680={run="08m364pqd2imqfi5jalxjrwbjnphjihnmlpnpqg8vaz2rsmddlh7";doc="0rfpmrlh7wbpmpqp5j6iai3g9x1zkhqvwfnwjfskknx5an1ad79c";source="1s0shpwhb7q4zhn6kq2010a4d3jwck3liir5jn5h0gzqbsafai11";};
+tuda-ci-69351={run="0cblzjymh2012wrkxyh09wwax25cysiz5ph6k2pg5qjspx1a98cm";doc="0q4lj07kd9h1cqsyvb4y1amdyrabck16a9r0pwi4mkl1qnlv8dmg";};
+tudscr-64085={run="0l7m9n8n6ikd9f47jc1xp8b1ik2vq58samd3g1v0m7f48jvf36f9";doc="06g1h7l2bbabg87y97zifxn6401hf0j7ia86scgjkpjbx7p2dj2w";source="1s4y8cvn1iw77b2qklbbnpm1jkjc0sjnkvsa3savvcb7zhw4asa0";};
+tufte-latex-37649={run="1azsqa3qa1w2k0r4sp83xp9b7g1xjw47wv9l0sk065zq0bdjr9yy";doc="10h41jbfmjg7p8k3m98l2jyhl7365qym844y8f38g0f9sr1pyxvn";};
+tugboat-68694={run="0yj3a32shn70svaq3pjmilw9ah55rg4z3ffd47dz263qqrp5kxm3";doc="1skr54zc5z1vmmv6c9yx1c7q69z5y6a956m917ckb67shqrvsgiv";source="0af24yivq0dym98zzpz1y2xy1l4k59j627fiiz4ny3lzmgwjszg1";};
+tugboat-plain-68695={run="0nk6ycvi05lfbmr2grhdfrgp3d3w8d5di1alc7gpsqfimxh8d89k";doc="0bzv0zl27vjz4fk3nl117jjvcj7ay9dpwnvlwblq27mhj0b3z3j3";};
+tui-27253={run="0liczx2jcdks6r5040r7dqcyrcj225xq0035ccdb9kjmp0rmc90b";doc="1m73fc2nj7qsy144fmbqhld3hx431ry64jv5p7h0r4p0giadwxgc";};
+turabian-36298={run="0fjqr88a51699p57d9mpkpf2hn9rrmdchsxhpjng8hkx3yjl647g";doc="193qbhcgh63kfnrivzjyyk8vp66wb5k4791qdii7brp59xsy6l7a";};
+turabian-formatting-58561={run="0bfl9fgj0adpcm405a9b1819463nrzqplzzdlvwy6yanyqfqcp3i";doc="1dam5fm94hdyzi4ai0wq03pkarb6lbrykych3ixcsz8r2z04g7nx";};
+turkmen-17748={run="0jhg6nd47y8igsn10m3bcsn61zydlwk3g1qfqpy8snz80rkyn9d7";doc="1rs4jmqy5zrgk2awvvw8lsvdkzjwbfq65bm3m9c02158q63bw2i9";source="1kz5qhyjax82mv74qxhsiwj83jijnfhgijdl2w8ic8lwc31q5ihl";};
+turnstile-64967={run="1br0ny72qsv5fpfw4x0v7q3dqy2jgicyd97ibzpxc04mp967njjr";doc="1iv8ysamcqzc7lavhskf8kwi29jn9xcda0am0ak9s1c7nz7pb3ly";source="0aadq0w193hl3rlb1d8xv60yy0fam4aprz4j96dphnanbb9g27ll";};
+turnthepage-29803={run="0zsgmi4akjkhwqas45r7ppbx5c8i5fyvpmk6a8wmpk99ib58pipq";doc="0jkv2zs1m6bggjhf3g71g9cyvrnmgmr549fqsvc4lf8fp9kp3ayn";};
+tutodoc-69343={run="1a2q792dv19y03sv7fcdlb60vkld9z6vkkv4ad10w9frgq3ghhwg";doc="0i9h32l6smr7k1ra54ds8gh2fjaiwpgnqvgwq9m890l9f9f322cn";};
+twemoji-colr-64854={run="10k7gl7jp9l41mj6jamz26wndf3casx1qyy1dz1rscgqyvgjgh9w";doc="1d0kaq2k3svm7609x3nfm8lcd1d41rzp8vcr3wxwrl1dadjv180c";};
+twemojis-62930={run="1k58rnl12pj54g5r9rc7dcf1n33p0hw233wckrpn0dh287gf5ffy";doc="022i152bp2r8fnkwb0mpz1nhs54qxpy57f51j1mkb5rc1dqgcxqh";source="08jxkcjb95yb7pc7jlf2rcz9b2yibpi5ygi48d2ni79i5382mizh";};
+twoinone-17024={run="02na16ki3n7gcbzi45dk6nwna3dqzgxwc73aha1zncm05bnj3n4q";doc="15ldj27nb6pp90abilsybzg7hn0z8xfv7mmwrmwdq20qw8ss75ay";};
+twoup-15878={run="11zxz1wlnqia071kg3d70glp167k2c210gc4r2755sh6m23wp8p7";doc="02zg1rq2ylm9qvgwh530d5l0pq9a377z943s66apyf3jz8z55sj6";source="0lmqla1wrsrzq900c4fhjzbvg7iwbd3y05g40j0lmfrj8w8lqvng";};
+txfonts-15878={run="1dfrd8dzrzj9y5qnz9c554xn2g9931slhj9ylan2i71k5asxmkiv";doc="13v5hhk0nzj38nfgyz9ijmz9gb9703izrgb617z274d744qwqx73";};
+txfontsb-54512={run="0g2hjxcqhgynzmvj44q9d1wpxwpwy52a6rbl3nhnq06w2v1lh637";doc="1yls8kb1bglfqa7yiqidanyjgj3xb1isc7z99ybw2j2kbmvvcjbn";source="07bapd1i9rwf3946pj54s0m0841ximmj60ic266mcmj5gipw2q1q";};
+txgreeks-21839={run="1872zrdb80wfkjh2bdblv31k6cm83cmsnqns8f3hwf3vr0ymvb62";doc="1gswhcdlf8n4wpnzy0fx4maxvy3n4dcbag9r0igrcvcbqnp9sfcm";source="0n4r3zn19z62qkd2njxqj74k60jr59704mnhrlvmmxi9x3b5g5sv";};
+txuprcal-43327={run="1l1khap1kpgjsjrbsa3d9hgd61lw4x7pi771mchszkaklqx8qarn";doc="1j2y6scl5pa25yk00zf64nqgngrvvb4hbig3qi50rzf5kpq56pxp";};
+type1cm-21820={run="0xdbj0yivyb7advckx6k2iwbn8xqkxrlapjrqrx51jcqhzqshknp";doc="1zw172nb8jym439sz8fb2nnfxmazbnr5mjpmffwkfnasi2f7b4in";source="114wlrzzvlnd1la16mgdp88f7a6h6v8l5ddq72is0hcddw80g2g8";};
+typed-checklist-63445={run="0yrl1vlsly2k71svaziblbnd3jl9jpnpvpg942gg31dsj9vvsb2q";doc="165h7yh2w6n64g2165wbxhpyghwgxww7lasy1qi2qmzkxyf3zi4n";source="0f942k6pjy821851sxhff7idp8w9n8wgf8v9dfrx7mgyb2yqwwqb";};
+typeface-27046={run="06i3zhnc42zbzb5lk0pqgiwq0y7wgds4hs27jybizw9y3yhv9nf6";doc="0z9q8q87iybb4b6g1xnnryr5aihic0vdsjq5xv55i3gbgrd15kr2";source="15igfb6xy0g7jykb50086as2drjr76jcprj3kafcf347427026dv";};
+typehtml-17134={run="1lv5bl9bq1413bbbsjvh8gz1p3qd075y7asi9x0nja36rmcags11";doc="1cgx2prk9ggw3wkbabrm0sbsfb4ablglzh2ckvg5s0chgkilcnyf";source="1ihc1dq38rklrmw8h4k4i6pq3qy9dlwn7nwzmjblpsghszfivxqb";};
+typeoutfileinfo-67526={run="1006mxdn6gdmm0ssmnqnw1ay8wi0549qs7a6vyv1nrvis4v7nys7";doc="0dvglz9jw5ig3xy61syy6yghf3xjnynvkxnwqdmkfz7fgy74hb15";};
+typewriter-46641={run="1cgyi8q0w8j6xywby39g4nprg7p7p2dpgfdb58qr5nsppa2i31m8";doc="0lz81r7jv8frdgb1aglxlr98cngacacjvsa4wjzwr9cvahc1q5r0";};
+typicons-37623={run="0acmp2zpg1734c6719jpmcccyq4325h2023bc87xmj7jxqq0xlp6";doc="1r9wabmkqvzdj6dcxl9syymp0rzz8kj0lfmqn9j4njghclndkfdf";};
+typoaid-44238={run="0m7nvdni7nsmbmlbpf51cb3s4s5qaszbn7mw62dfvvawgd2d1y0j";doc="1b24irgw2779j43pc15cwpazx0mdjy2zla9n6lqvmwyhl5xnaswz";};
+typogrid-24994={run="1p3if64qmyhflwlf4gy59wl3xajaza5xpllxy5f3a7n1pzca46rx";doc="1v9az7ln7z1w3d2bcfn02kxqcwwl4kg4zjri2pmvicc7skzkplr9";source="147flz7xlwjxbq7wkaw83mxr8qbcqvjknr27a0aaq5zs81jcyy8f";};
+tzplot-64537={run="166wxyqcd55y55ql1p7wvrb2x4mhavz7byax2sq43bqsz2h6689y";doc="027pg77h4p7vavy1s25awa355id6i2ngsb9spmj3bapr6bknsajw";};
+uaclasses-15878={run="015wxmrjfykv7j2bvmb42491i137h513q826f5czmcf1c8gk8bl9";doc="0x6krd94wrdwc1zkyvqzznwvnvxx4agwinr5fhshav6r8jfsn4rg";source="06nsdpmp8qqsrcbbcdpm82gcc3z8y5dlhv2lgwr4i01srwkd91r6";};
+uafthesis-57349={run="0fj2rfdzldav8m1ac7wv8n1k8pcgj4yy4zxx0g8sg1mb5i7if0k6";doc="0g096y6dvxfzbjrvvwpb92z4hrxp1p9jvbgkap5gra61msacqawq";};
+uantwerpendocs-66819={run="1dx140fk30ppk96h4n751mds1m6d521d3br94ixbqybya5bc1y64";doc="1f57n9v9pbwgw7j0i0gvv3y976a58lrf4w55gd7pqgwi88fdwy9a";source="0sq29h4il7zmxksqhdnxyszmz4d5rgd8qyzhi1y7bjp8c4sny2dk";};
+uassign-38459={run="1xwinmh3a8scfgxm40505zn85r0052pcykcs0lcvazn91007dl8i";doc="1b89rvsspkgs60rkmqjad7n2pwwmviiizpqr2si02kwnsqfspqdw";};
+ucalgmthesis-66602={run="1n8g3blw71qrrkrjjq867qimn58w5a2l4lnfyqdw77wa67qzxb08";doc="0jkxxfnc9npmvvxyqk3zw5csapmhgfqhzm0rssijw4d46b7w1lcp";};
+ucbthesis-51690={run="19g7wv3iypbkcxhlybizkis6yivgn6z0mvz4rgsi72zaahpxmg7y";doc="0nlpc0vm12h7pni3lw3jqq7fsh273nc63abw8yzw69crh3fspyqg";};
+ucdavisthesis-40772={run="0kdrwdk7mg3yd7hm2xmq63kgikr2p2izibfgw1whai921za4wlm4";doc="1chajx1i2zmfh4ypnf8jspwr8kjwbfv7z07qrfasrf73r775yxnh";source="08525i86hrv1387jn9ayz3mpwnh4z8kvjvb590y7gqv3cdvrsa2b";};
+ucharcat-38907={run="0xiryrx3pjx2nq01f4f0x3anx3zvkdarp87103z9zvpf6aa27slw";doc="0k1aqic1ljafdk8xralygdyjapkqa0qiainrbf982233kjqclpvd";source="08xxmm2rrpyi9a601bzxka226fnhmyqfv8cfbc1qdivn8658785y";};
+ucharclasses-64782={run="0d5rr5w322pr4bsmcp09vsldydxxm69mcpvpaf9j7z5rwhic9biv";doc="1l6pv743lzdhnxpd8bv1y40xhfg82421jyri2c5h7j4ahlcnnvic";};
+ucph-revy-68224={run="0i0fzn556b07i46jq4mb43fhczvjh91asd71512lc2rsx12r7gvk";doc="03ab4kj1qnb9hp89kf9vvh8ca0l0k3jqzkkdxi9kycwzqm7x6bij";source="1b0v20k0ypkf7gcz0wmrbr5v4lzp97v1vvb2818bphrqj7bdksf2";};
+ucs-68759={run="07xgqkjhks344r0d9c8rvw2gvy0kwhx5kvyzkf2ymw1hiix8w48s";doc="0icaq9irpb67mipfpv55kfbdy5m7dw83h5qqq98f5d1x14h3gxbn";source="07pasmgx62jjdq8wgqgk10wkykzljj7v52xhl1ncma4idmd7l97q";};
+ucsmonograph-52698={run="1jkcyhrh5zf8p205xgs10azhp69vrz613ln9ssrb4485b7a25b3d";doc="1hhr0z3sy8vn6cv2i7g8nfpnsdpyrsbqrclc8j8g6qidh83x2y5q";source="0x465kyz3chdcj705v9gc8s0w3pmawaza93pcm8nxy3k7dwx920j";};
+ucthesis-15878={run="1mqj65aps995issvi1vgn7f7pvxq39pwxaqqwh7pxnki26k8czrv";doc="1hv02nxak4laz9az2kr5lvd97l4mcnixdmpysiz6xqvc13ivkjl7";};
+udes-genie-these-68141={run="1fj7qy5cbcs03pkpcv8ii539val5ps57pk0836srwgmgh418csiw";doc="0ikgr4zdxfi06ply66kp8v8h1p51m8fmzv87hlg490qaj8wmng5i";source="1rz05n7bvf0c8h8b278m9q4pj8vdc29i5xncr2374lyhkcx4r3xp";};
+udesoftec-57866={run="1lq0n05v6q0p78jnq1wf67pgzh214lllcas4jxlpz8hrwk9n9v1h";doc="1gd4qhdr4wxgjalxgqp0d404w65x7r3ipdkdq82lfcyclqyab8fh";source="16fgvdzlxrcaxbbk9m9yxviv8v3qhki2s5kq8j065xx88zd181aw";};
+uebungsblatt-15878={run="198bz1875qhh366ddvdxj72jpcdinfxsrb2mzirr17fq6liwbwhq";doc="0814xqw1iglvwn5y29fsvgbrm5clhgiz6ivbh8a8rayscbjwixmj";};
+uestcthesis-36371={run="0dsdzhf9pp2x4xbprii9rvl0h0jwwwd03va8mg7c3cjgr2nvy1dl";doc="11z3ac2pnxg8qqy4shmdks7h33257nbkgj4h1rq49gc2ssqmp8pc";};
+ufrgscca-69042={run="1jch6z0jvybza2fmd6mamc8kx4c5q9l8dhpk2r808a9zxdwhcx39";doc="1w4736vj2x3znz31qpfkmnh2aqc4khvz9zx2n3mda3ngl34cb1rf";};
+uhc-16791={run="1xvkp384p0xcba1lbi3b2najk6d2w1s78yi6vgppmcjrd5limif2";doc="0q1wxcn2zclpj4bsn47jgd78xmp82a6x8w068j4ihza9pfvbqacm";};
+uhhassignment-44026={run="0pb7hw9krpri3ky7hfshjkkbk36cilf31iv00l5iynsnrw70lwyy";doc="1106wbx02mbnkgzwwiypfz7fg1a3rmwyhlgnsxf4z081q891p3fm";source="1ck8c7jx3qkxnm0a82qfql92s05bg5p352fw1yv3y7v86z2kh6ad";};
+uhrzeit-39570={run="11ysijqpnm3b4z7pnyg7m7kpzp6fiw42dc36gxk1aq55wsv7kk7g";doc="0rln5amx6vkny0pm4yhgvnmmr9akwcrd93db7bifxdp07hjbvj83";};
+uiucredborder-29974={run="1zklnahb3inyf5qnavccqvkc02iwqw8mz7w1iam0lz2jmzgc1c41";doc="1lxyssdc3sxsfhizm3f74lxcgpkaskljqpybwl1zw8m347p1qf85";source="1rbxxliaaggn4rk6093lhmndas1xy111z9bjrgjrhjhxw19lc0ib";};
+uiucthesis-15878={run="19fif7a2xb3qrmkg8yfjg1hpisif4znc64765d6jrqgb9fqqzlnz";doc="1w20kjwdgppl39axgwks373j3dsnidamhvqy1wn3yilzfb9vjjxj";source="185mzcsh598dxnf2sb4mmvc3qy4pi43qrlim5jhn3n90qvwp62cw";};
+ukbill-69362={run="0k3wwd9snv9w8mif0snbxbgaykmrj2d25kakllqc9f3gdpjfqy7h";doc="0c54c4zaznbpskycspfihpla4928w5g9w095lr6djnqb0spk8138";};
+ukrhyph-21081={run="1fnh98jcbn9l09mi952qrdw0dq0pjykwgwi35zz2lz8h8r750ihw";doc="0bbj125zb494g9x160n3lsivims28w0drhfmp0c2920cwhk4m0xh";};
+ulem-53365={run="0v6p4hj3hij0qvq7vpsbnk11rhwwlx80p3g575jy4sn2vfw5zzsm";doc="18ny9kfv3w2ag97czcj2gaqqy1gj2f7rd8r72vd7wsdihgqd5wzb";};
+ulqda-26313={run="1mpjwq43dj2am9llszy1yzz2jbhdskf14ki881j6q6h5zfwwacdv";doc="0kkxa9sv2xg6d31bj00wszkchkk6raj2pvqji930098jray3zdc7";source="1gb2r4zzr3q2kfigrb4j528jmr5paj38swhnp1dlb2dqr8y1szfc";};
+ulthese-60217={run="158n0yiqrb8x387b76c181ps3m66f8rvl8paanqnfbb257jn3hjl";doc="1sasf73ax5nrk89a9ry87w8yf4czr7r7jwbg4cpwxry4rffkz636";source="0rli542fgz8hbjcl4ag3vgkj2s44b6w3is62ai2zj1h38jm4ybh6";};
+umbclegislation-41348={run="1lsvsxjhjlfxlqvlmy4pqbgsr2jv3imzgv7zfa2p3gj382hj1qlb";doc="1a3cjb20ycjs1nsghc9fsiz4kc8f6awah0bksqyh2ik4fnkydxb2";};
+umich-thesis-15878={run="0k1jl1v6nqyg4ld1f470x96pjm68hs5fnl3kab383363mly5ypy0";doc="182vclnb9yja2jgh6j2b2f7421w0xi567s0jrzaqvbnaik5sk5x6";};
+uml-17476={run="0gl1063pjxrif7qpq9wxwajpsp32idmnlsq27y668lwpkpm0vmzn";doc="0n3flbps3s8lhr9pimdw41kmyrfvn51pddm4d3yc08v96sgg65bn";source="0ylzxyl44p0574qvga9arjl84ip8nsafpgabbwjrk2kcbs47jsi2";};
+umlaute-15878={run="0k1pjakg7x49lyvpabjaspwa73z659gj4qvgysm3rd1smkar6vy5";doc="1x9l84zk5jnfasgqc4d35g10a5la79z5q6q55f364chc7bibyzis";source="0ajdnhbdw7b0d8qxnbalv3867p5lrk4mk6xl9skmvmkzpbf4s9an";};
+umoline-19085={run="0xx4v6w2sw43nqrzdpww561511dcaigsz5blywqg72giw0x2v3la";doc="0zpn7ii50w0bfh3cr84w6nk5zj0g8y55r577wnkdmzpm51qxznxc";source="00nb73pq0s7xychc84438aa9472mp1h7drafg27wm916f10832cs";};
+umthesis-15878={run="0iby3d7f8mm4p5z4jgnxzqnfmwhsws6hg3yb2l0mrknlj98ww4yx";doc="0vf8ikxi8706hc0sv1h53wzpd4mfiz607hzbhwq607k4hc71iz8f";};
+umtypewriter-64443={run="1xn06vz5lxr58xi6y2qv5wa5h2r0g1xnba43x5qh5ag6bz5ym1wh";doc="1sgsj3d153nyylqz5q1mvjfh2mnll783863wsmh9n6zajkfxhv0c";};
+unam-thesis-51207={run="05lb63wclgxqr7jn7c38plhg3r806b7888zyifcivv85q143j191";doc="0kxdr723xvg0lzhmzwpyik9vxy584y41pmwy8bi7197gz1hgdlzz";};
+unamth-template-68681={doc="1ydaxzcwxq1rjkawlapnfipjzlyzvbvijrx98pi9yd4zk2nnqjfv";};
+unamthesis-43639={run="0wqi46mdjsl06q7hyvy4wpihvrr040f5g23bgc6lm6lq11jadj6l";doc="1l71n80psc2hzjs1lnfgpfpg13355sk9ld86104dkyrl645qx07r";};
+unbtex-69307={run="03pmfjv9ssgk0g4344pnq15z28mgkjr5f4jgddqdbs23320zwd43";doc="0gy3r6mp4lr8k7z93i0dx0zrr0pn89lzaq9anjmc6wnwnb9bwvgf";};
+undergradmath-57286={doc="1z8my3fwqc8rfc1843j7lcmfka2023z9k0js4ygh1m8kilc2nrr7";};
+underlin-15878={run="0gm9cikysz83sdkhhwd6x9zbs278gwfw8mxh7z22l3c0nvfkxbfa";doc="1rvryx13hyif7hw2wgb88n95qycip95xh92jdy1jm2l6pl3c5q3i";source="1mczvxrhlipisffdi9jv5m3d2i7h34jpm6vi4dbl58cg9sasc4a4";};
+underoverlap-29019={run="14cknh021b4qsymflf0mnv8q2vvhgsf2088s1g6pm8ckpx7diq0r";doc="1h1qvk9m04sp0nm4acj7kfib5cfpch1mkpvs55mnqqsgasgnymjn";};
+underscore-18261={run="0a93sgddm7xy8iby50yficparkr6hnzj46w70madbwpjkpnfya78";doc="1lqg7j0hnnhqnfzdv0zzgpnmbysypdind3fmr6axkw0czix1pz5n";};
+undolabl-65846={run="0arfny56vh389m89jz17mr0xbdlmf3mf0wiilmkdia4sbnbv3g7z";doc="0802sqkxir6gdkxkaxh867wjc12m8apvlhycl19fmlbivg6pfla6";source="16ymhmx7by5pi36z6l4l27z1x8pkpz314jfibpc5azjmcphqhjq5";};
+unfonts-core-56291={run="0pyrnydswlqhxacwqpbc1m3bzm8v4gcl3ka7w2mppp77l8a70drl";doc="0225vsqaj8l0g1igc4h8m94cfk6wv17vlnappdgxwws1fknz0x5m";};
+unfonts-extra-56291={run="1i7skyjqlprf6m1pnz5l2hn67f1cix4n3pai6v1a8adrrx7vcfdx";doc="0d3cxfm110lg12n3c9hc88lqmx77rcsil1s6yph384scxadlg3bn";};
+uni-titlepage-68917={run="18s5vidaarmpppdw12ynb6fjc52sn5i5zr5lglvgfqmxnwx5i3d7";doc="0djb52kfbp3nn4prj7x613g58qqjf1lnmcxg1rq2y3kam4g63r37";source="1jhvh4aj2z3qzf85wq3isfvkwlf5cghrkhqq82q371zxaks2fd0c";};
+uni-wtal-ger-31541={run="1jyba7g6qmngn4lx7mrmk0j190zkjv8lw775w13hxr2yky31cf1z";doc="0kncfbrs663qcpc0nsfhf0asjri8103laj9zpaayk3by612lfgj4";};
+uni-wtal-lin-31409={run="1rc0dc1g1fwhz8qa550ykc8azzc4i748jh37a8ppgrf4x2lgxzjq";doc="1ja9a6fjrlh1lbjkcsal7ahw24w1gs1mzma6jiiw5p5kbmc4zpz1";};
+unicode-alphabets-66225={run="10zmjmbrlxsvq7snzm3p89afj4xy4ad0ni06fi9dkqjmi9l5nph4";doc="18l3zd0q5ixwpvbcx2glldp75anqkgm3ifnf3lha2iqapk03jsm8";};
+unicode-bidi-42482={run="1prl0i2a9dg5yc2yl1x1k0zmz9lww051w1zwy8cbyvk3rd765a72";doc="0ab0gym9sjllmqdclkjfbc4fh9n20999mv7z2gylfybirm0n7i7c";};
+unicode-data-68311={run="1ra75819cglkd1gdv96wzflx65bc73v46k2hmn1bxjachz3cd7fr";doc="1b8zpwd0vr238may4wv68xj77w7fiq757jv3i45yz0gir1as9piz";};
+unicode-math-67919={run="12xc969s6x742a3aay28354cpvam2x9ack1396q2hk1wdhg846fl";doc="0y0sacc4rd4ilzjfw10v058wv626wlva1kzrbrbqxsclq3xcm2fy";source="1wr1hrxd63z5iisdw6k95qjknl3i917y2dmnrflyn0afvl2pxjg8";};
+unicode-math-input-67089={run="1gkamvcr38zh9yzvhbngi4lcbmxsrmbidg1rq3mfs51qnpwrkww1";doc="0p9k80mymz1dflsvjjb99pzrskwa21fmvrj3zmsxdmf8vzq2c88q";};
+unicodefonttable-67066={run="19idvgz9pmwsjrjc09z9njpnffyyaf963xcz89dhzxcc2k6v2wrp";doc="02jvkpcwhf5bxg6d6pxl9h1igx01wkhwm7rs3ycid8vf9ydsvl77";source="1lfjccv4h97vy34g8shh26rw9ai7h7f35xywri06ch3vx8gsmlrl";};
+unifith-60698={run="0plwq53cp9rsdsjd6db1g8b39k5czzdsmmrfki7ckbgiw317k7w4";doc="17q97073nni7x2d1zlplrwfvnxw9pkjgk79jwcvbgfjq09cq374z";};
+unifront-67054={run="04rm3pia1x68qm5kabay70fr1szrzvg4bzk674din4babl3nblal";doc="1d2kmwfa7cz009wfc713my93v3pgh1jcqz13jcy65f7py86qf2xp";};
+unigrazpub-64797={run="1rg5b9f3679qn8jaaqn29bfw3qgyxgx3p3zxi7vsr6kn6ada3j82";doc="0hpjzkdhrl64g00x7jb55wf5mz57gab432vxq3hd4igffrxvk88m";source="0mdcp3f8by29abbclsy9ndydgslpybcs5wqbiz5aiy5blp8d8abx";};
+unimath-plain-xetex-66394={run="0h81w9pzy11mnq63401m6a8nbmz11xxvjfawqmnyzzgpx0v0n7r5";doc="178slwilm2klrln2q7zm42xf6hanc16ksvrn6hzfzsda46f5mrsn";};
+uninormalize-57257={run="0ai1w8n010sq2fmwvp7625dfmmlvzx9d67ji34zwxdl2cyjlgsw3";doc="1dksyk07zjmwbzgc7c2d5lz7fkvrllbj1nrpb34vd54yxl4azgip";};
+uniquecounter-53162={run="1g7ix0pnd52dsykq5na5d4kfi49zm8gmampf5yn281mn901p3wjc";doc="099clvqs76hiwl8i2gqj2hdmj2m77v03pc82sls2xpwvrs1dqd4s";source="0cgpfgv4yybrq1ryhjrzwfwf97805dw6if2s1qivhry94lb96vn2";};
+unisc-63178={run="16drn07j24q41a99w7cgf69d9j21if2csf4lplbkrvjnv5rnpdda";doc="1s0xqq03ccx4rrmds2l9sz7qphnh9wsimxmghmy7d1slmfwg2g1a";source="1mxjq2s5ns2lhrrqy3xwxlnn3fcb206gvbdvr75kagzqb61rz5mq";};
+unisugar-22357={run="1dx088b21apj2rpij4pxa9srx29irzsfmlp9vn8fjpm1ag60md98";doc="1mnpbd68i0112hhcgiwc2j5jkwffrfdqlrdl896ybd0cpwq5d8sp";};
+unitconv-55060={run="07nmxxclxvx28w8w7gmgfs5vqgbkxxavw8c31nk54dvskd6l6zlk";doc="0yfcqw1fx38kbc4kcw1620h6mydzzxi1y67x1yr6wa0aiwsd6il0";};
+unitn-bimrep-45581={run="0vv9vc9cvw3bjfndlfyr69kpziymlgalyvc11av9kq2x5b4jlc5b";doc="1wyiar6xjhsjcfnxhlz8y1l9xvlcpgmkh360am85llfqlnar5w5f";};
+units-42428={run="0rblvdf1cgsm4fda44vvldy6my58dnars88wv2blgnzny8s00jhn";doc="0nn5y3w25sjxq0bxq07d6453awgm4m4gih5678lfxf9yvnmvigq8";source="0mmqp3vhly9v02fv4q4d3bq7zzx8nmm33nlvbn7137jgc7p5vlbd";};
+unitsdef-15878={run="1ck9awf9mzjhq0x4c3cpan79imh7ijpffii90955jc78h3bhcwkg";doc="15svjszg72axskaa3yg91gvh9y01s1nh5x6nhwqbr9mz3bn3npck";source="07v6xpwkag6fp8p331gcfbb0p1ca36rvrs9kbkayc986k6nds688";};
+universa-51984={run="1r8rh4jbx3lxciszf93klg3zwv06qqgnzikhp11c2qmrjrk9gznh";doc="0acfyvdbqagda11730d5bmr5qlfq7hiqw7dajq143i54k9ln8mvi";source="1ydba7wjiqnjc8drv5j8skv5q8hjrliwd38s6xj2jd12i0zp3gyc";};
+universalis-64505={run="19v4kl6xbqj5lpxlpjghnnhs2dnljzzr71pvw90z71n6wncza5gh";doc="0nw6c17jvpyp5lvarj2hf1ir2hwc54ns9nflw4zpgz2ifr5kr1ci";};
+univie-ling-66728={run="1aqh4gpxg8ryx6lvqwiz1m82hsjf1g1206vqfl3kml3vbkylv21i";doc="1p9i4gy6wimgfwcwffqf5hkpxhj2knn7ljfdx818rscrjrrf592m";};
+unizgklasa-51647={run="0clwxzngdy6n7iwk9zrn21i1frmahdf0s9qq2nqlhk4h6rxwb8jb";doc="1q7q2fpgpjdsmbfj9zijccqpl2m6n0dch72wl05a64hxg117jbl4";};
+unravel-69308={run="0n440qrni1qnbhjajj2kd7zwgv8sk73bv4arasha05xfic0g3arf";doc="1smf996jz3iy82p34b0qjmjnpipxdakp0b9yk5qxv0rbkiwkhymc";source="0hb343svdnjx8czl4x1wlhpmzhrzsslykpnx9aywpsgn2xabncnd";};
+unswcover-66115={run="05nkk3xgpjcdlsk8xrj0mn5r3kwzi15awish2hd205v1rnbjiaz6";doc="1jsxc55wrfczcc9mnf5yl2yqbbzbk10jcdly5z5nyfvg51427adw";};
+uol-physics-report-65761={run="008iix41i3zxghxmxiyky0cyfn2rzy8q64f49dsj6nvixp6zlf9d";doc="0pbl7vx7xvmvi7fx7l0mn98hff9d838n19zx7izg3xgrqalygpgp";source="05rd3ss59gcfa9i3lpzfb6f8rhnmx50868si3hys13pqhwb7xkn0";};
+uothesis-25355={run="1wgs3fxg01cxcpnhk43ik12sjdip77fkxdaik6w4w926i8z0np7s";doc="1zmpx6biaxlm7fys5a3qahglpbqgn6ml07z6q8vplyqgn213hd6d";source="137c9av6i6b6hg97wmqd2iwqzd1dq6lvg2992wnbm2bp2m9r20zl";};
+uowthesis-19700={run="0iv9s5dfmbrhxbx4kqbhxjf23rln4ymcx4kkk5fmc67qi51i8jnq";doc="1xcqs2h6qs2lca74mg1jvqza77xrph53bk9dwkk0bprhkxn1all1";};
+uowthesistitlepage-54512={run="17xh2myc3xj2zwbc7jjdmnfqhmhzkqj3dwwn2q04hcyr4bm7vnfz";doc="1gm1clfvd0g45fpgf6h4nmyy2vrc0d9lqfy9h3nn2pnh0ki2z0ir";};
+upca-22511={run="1px88kyvr7jkzzcbd32pi7zlak9wwzf3b55yhnh9bi03pk0il33s";doc="07gsza0vhs52qjj8im4i1fg2v2lch9iwk424ik9c1xak1v7s9d23";};
+updatemarks-68163={run="08x63a7hg949dcszq5x03kwc1408bml78mfrd1p36vd99gsiakv1";doc="0lsdfdd6nkl21pblpax32gw96mgm8l34gp2m7h60fipj3garfb69";};
+uplatex-66186={run="0kmw51xvg44jrzn6r1w2biz2d0m3j533qadi4bfjhf2dzi4jdg61";doc="15b338kzdd0xbglihc5hf92mv3jwmyxp2pf1nb9l75cxnqfglzjl";source="01gpwxp81hz8824y1hffq6b035l0pxa8wyfkjm9kh5m58j52s50w";};
+upmendex-66381={doc="0mj8nmqr3z7b802kvjmnkckq89l694an7s639yghf3b9b5v7xihx";};
+upmethodology-64613={run="0r7k223ypavdbywq5fwffyysn68pg12dgp842jd22b866ffm13pj";doc="1vw9azpz8vwanfg60vr1a9bbx39k8v6jhvn505pvmf8fqgkqd9ch";};
+uppunctlm-42334={run="1a71nsc5dnaa8gb4xmnlhvdsvid2h9gwmxr0xa8blh4xd0vwi2d9";doc="0d1qs7krblmnf9r2afvzx5ir94aqgxv8p2d9sf9p18nlz9f5h06q";};
+upquote-26059={run="1zglh6pb1fq0ipsivhj0knhcwcg04mjkxca5s2adbbfk2xs1iqgy";doc="125756iaikya3v0wk9a712klp39ndw7i68bybnrif2klm4c695lm";source="137lbzacpmkm1fdmp548m6r83mnhclsrcyqk1s0rkp558fpnqpp1";};
+uptex-66381={doc="14hn2n6jbibbqbdr72j74z5bz003jnlabi3kja0f0waxhas680gd";};
+uptex-base-68298={run="0g1ihpqi9im0k7zg8vmwzz8mz3qpy2nfgsq5r7kidsar4yrqcj1m";doc="0sadkwyprlv4i2mh0mxcf2paslskqg400xzwnndycx99yi9bvrvk";};
+uptex-fonts-68297={run="1306b0nq975iskifmbj0ah66dh969sbwydblhv2gywy0yddkg8x9";doc="14m7l415n7ywh0k4k6pnq1kf9iw7x0xv11qvi2n1azs5r9nyw302";};
+upzhkinsoku-47354={run="13fm9r3s01003n8ykbq8plx3xzj7p9bz958ylkl9f10kd9favr57";doc="0hd55x231kpcl1rmds601a2k1yzvhvfks7sg0424gzw7wirhns75";};
+urcls-49903={run="15hnqy2fxqblr9db4h2r38v1h4iwhk5kcm8qm9war1c1pgwg2a6l";doc="0axb3cpbqbksrixhksdhbjyqyic0176lyxxk5di268jbr58203xp";};
+uri-48602={run="1mmxhxm4y7qsvq4kgdnq2vhid360gcgq0yxbcgw46k56hxd61kln";doc="1zadcddyfrgfbrsyl4461zwz8g3rjwypixvmi5ny8f80z4igal6a";source="1w5hbpzc5xka2z834hnzx16ky0kdx3x4y0xxs61l9gx0ygqkzbpa";};
+url-32528={run="189lixyamvrcpds2i7nlh4w83mk5lnk73158kcw3qjanpncnnn1f";doc="1xragd7gak0vzj14f7dcx5hxg8plh47ncqdb1m5liaibrdlhgpql";};
+urlbst-65694={run="0kq36hv6hmj82784c1cf815xgvpcdzgrv5ppniy921yxqxdxn4yv";doc="0c7i74iybjra6mmra82ny1bs09j3qrvqri485p4h1cz6195v3wln";source="14v0wynzshm4qcical4q1vnvmx34ds00fq1733ivl6hr0sj833mb";};
+urwchancal-21701={run="0hlaimb12imiv0h7khcaar4xi5dma11bqcrb2b6imd4srgg9b50g";doc="1mzfmfwny5mzag8wf1h3k4xbmbzphwqv6r74sql8wyqw53s337jf";};
+usebib-25969={run="1q38qzz87nh2hbmml3b0a4919dgk6d5rn0z5bhrc4ip27dscvw07";doc="0byl3xhiz3b4hqqmq2wi5fdbshh5prvqfnhjcgjk619bn99cijxm";source="0asby43xsd35aazh2sncg639x91f91shs25f6f1127rskx5fd7vp";};
+ushort-32261={run="0235a399vqry1vdyfyva9anav8axs1pxwf9v4hhhazsf85m23qqn";doc="0r0jib3fclxjaczcbzkb8ywmnz0xkrj02blg0f5i065h2s1qa10b";source="1sp8z5jnb5qlihv2hz0j2gs4rfqpy0ka3npph1dvvjvi5520c94c";};
+uspace-63123={run="11kmx5y9kdklgpfwzzh8mq3r9ycn5zv0a1pkl6yxy2vsyg6wkfjz";doc="1bxvpm8j88cawv0cxl8h65q33bnid5sqv8gqia9z13h00jcgkjcg";};
+uspatent-27744={run="043az1c7bs194w7frr768pwaliiaikfibxh6zqiznc85ax6q3d94";doc="1q04i3q9693ykpgsx1fl11w0y0kxffqyljns1qy04935s5b8vskv";};
+ut-thesis-65767={run="157rirfa3bi7pg1x6641r0j22ycb4vq1pv6b1pf0cadcfflh07dy";doc="06pkxz4kyyxm6pf34jdwm21z72l4ry7891508yc0hic89fgjlcl5";source="12xprwfmjxwcf4mpghcg0hsxsa8bd5jkg7pvp485da3k4pgslx0m";};
+utexasthesis-48648={run="0j8jjy8i5i9lgy7m9wnvj36ms597amnvb9a0ac2a2wh7vqf3dxgd";doc="0131pn2531bwmsv3ak1kf9nc4v86icxjg19d28sqfmlnfvl73v4y";};
+utf8add-61074={run="1xgp93wcvb2jiaggidznmbp173w0kfhwcw2bg7829hl60vhqnsjh";doc="1wy2h2a7a36b41i5ya268bhb6fiq9q7wqvzv3ncl1ll6wvvg0c3q";};
+utf8mex-15878={run="0inwvyrizq3mr4c78l036ib15d6v2bnrakm08hvxx6ck753kn1hj";doc="1nj94nn4s662jh2wykvrwkiiv2xzg6v8q4iax18d20p75yfcn3v6";};
+utfsym-63076={run="0w72bcx656rdkbgndmshzd6ackh1r6x6m2f6bjrc3rxkmhvf2awc";doc="17m89pxzhfrcg8b3pai9bpivypmzfm0ck0pbcp38nabbnwk7bmbl";};
+utopia-15878={run="1hsvl3la37nbb0b2q9995w1hlgvrc0gkyjkgqbsp99rk0ry392v6";doc="0yyxzyg38z6kip43gxlj3j55rdabqjrzl33yp1z043rblfw5b9mc";};
+uvaletter-66712={run="0qp48wng88fqkp1x0c3brzkr9f7p08pvbfws46dzrddxg5w4nwvm";doc="00g32zdkyv5x3hzhdph754f5mcqicgzqvcwigxf2dz9shb0phgk8";};
+uwa-colours-60443={run="0j3yywmr4rb011062gwaz4q56jcizblah0a4s3xi2gh0jycdfd1v";doc="0pa7a1ic7am0w1chl6cx778gv86pf38m12s0xdpz3hp2krkrjxwx";source="0h59r1sxqsgsl79jvm8q015mck28z89c595lkpilymahfn3aqi88";};
+uwa-letterhead-64491={run="0y59djz26f6br8gpdaxbzx0sm6p4gjyvfdi3g5w2rhvzv92w81is";doc="1kj991b6w3f6svzf130g4zb58k1n1fq18jvvradrqygvgrj8lg0w";source="1ysgg1idxm0h3rslw94ih10jmb85n445rr2cfzx9x1fhl2zclj3n";};
+uwa-pcf-64491={run="0bgg42n0sbp1hslwrrc8xclxpj87sggicxhmcijiijfdb88g5cl8";doc="0r8cmhy9laq7j40vkgp9v35xsq27xn5akkj97qysi844n4dia9kb";source="0sm6zx16yyi4p3wwfsyzgp4w7p53mqi5gbl4qcjj7iz373mmy3lj";};
+uwa-pif-64491={run="1ia1yv0mfxqrd61jy5qqf8cgpk3jxq7simpd74m7zy27sx2ywyg7";doc="1kl9scqzc4yyvi4b1rghr6lvpvq5587bfjl207675jps4gwcqhny";source="04zs8241iaslw7a43d9pk6scb9gd65dcjmv2cd29jf98ybimy1m2";};
+uwmslide-27354={run="1kpbdd8q3q0qkz6alvlnl24jjx6shc8z8p36d9grd3idyx0h18r6";doc="1m41j80x7cj8h87fkyw4mwhvqhxvxx5dql596s7xay8lcwlxq5i6";};
+uwthesis-15878={run="0x6j9savd25v7s1nxzs0yqv10i1bbd89pnb0ldjmwilrfr78yw9c";doc="1plbn6dkqwl4bdvsyskzylww9j8akxh120yrnkfamk56ij9dd0py";};
+vak-23431={run="122crp1ipxwmxp6pd0x04dxnaf3hb822znbx8v9gh93x8db4khf2";doc="1jxbijc1kn7mx1p167zd5rdczayz5xxxfdd2pwbsmav8zql32aqp";};
+vancouver-59192={run="0rlxr8q68lrv4zshsbzdwzh70kfmqxzcn0siy2x770riyfj3f3z3";doc="07jwrms24pa30bspmaljs447cphp1jaqjpdnm1j3qvi0svjr112h";};
+variablelm-60014={run="0apdyspg0q8x1j6ryzbibij9hn0gfqdlhjj6nz9q8w45bfywclvf";doc="0bcz4sbq33iwpg9r2vq5g3zpxb90xljjqbis9srk83z4rj7jyp22";};
+variations-15878={run="0cij0zdvlv3icymqxsfn6mfzdmb3jrxnfa3lz2kz0xx3x8yn0sx7";doc="0dwsw8j2bhk5cdw61xlcvlg152z6k6306zpbap2gjlfhf0z57syj";};
+varindex-32262={run="1s3ff9i7w7dga61hrkd7m2rfjq7wrkx1b7alx68kxkjcnl92rb9p";doc="1567hz8fpjbjsra7fxg8dlqkd39d0p0a6lj9kpglv31chws6w2sl";source="0gdrsb0n4sr7a4n4wxrvnxh34a6b1wzpqcp2m39rvw9my3h07vhy";};
+varisize-15878={run="0sd1znd4c2254fsj6i2snj3ys1h5vss2wzylqcp2pv31kbgpfh0r";doc="19w6h5w08iyc2kg61h5q4j4djwwm2x0bhhp6k60kfxnk4glccrmy";};
+varsfromjobname-44154={run="19j2avb7jqb9ndnfskwqfm508maqa6kd9qmqydflcb9hgjkz47xc";doc="0mcv48nbly7ihd8q8652v2gm6drvpjv42h0jrw9dpzraljzvpgff";};
+varwidth-24104={run="032izb0vpcwiydg7lli6hnawij95s5ygkwdp4bfk1c9j17d749cr";doc="1ysrbpv2mmi8fcyhdabvs2jiqj2mkajapjvsf10c8rw6i3yaplnx";};
+vaucanson-g-15878={run="10dk1ff3swbnx6l6c30s1ryn2dbyx9harmrcg7whmqdys1mahsbq";doc="1dlf50f0hpislqkcbr685y5xg7iz2y6zvlzjdkjq3af4qv7ncf5n";};
+vcell-59039={run="0m9r0wldir0g8y32aikm2il8qsygsc3zyv2zkg4wn7jqlidk6f2i";doc="1zrhf70s70zxm5ck22vbi88vpdjn6ba6iay88f41x21f11l536q5";};
+vdmlisting-56905={run="10fzab1jn6hk6ah7h9kyv9cyrv2l0gvlmask1c90njhvgqi2526s";doc="0b0vrxv5mlf721mfdvw46ixidgzh0bq88sgrvxb10y05wjcjqiwc";};
+vectorlogos-69010={run="1sibmv30czwrvp850d6zgw30daxjlz95wm3ck0rb4bshjy92rg9a";doc="08hkajc2hffhkn7zg7sqqcjc3gisqmkx3fgy43vf7vn33wa42n28";};
+velthuis-66186={run="1ki27wimj82h2dgw6c1f6hs93yg794j711x1w3vmgiwz3mdqkzdf";doc="0af9p3rq7d6g0549sj74vl3scww6ia88vwzfv84fmkysa6ph9n2g";};
+venn-15878={run="0kfq2wnjsbvk0ciwrm4923fpr7whmzyv240r4zps41vzpc4mykiy";doc="0izj8qsnxj9jgslwzz37xwr9n812y3cxmfs52yd7p4638qid50im";};
+venndiagram-47952={run="1v4hbkc214fjh5wc2myqxa6jcvr6sa31c7nz9avzj2kf40kp3ip0";doc="0as35w7fd9xjqhrr3v3nzld9bnhz6xg7rqgs2hyzx150xndy6cb9";source="0ci3ajx316b6iin315z1xkdfmxbbflnj8sf2ww7gkxf853qakwlc";};
+venturisadf-19444={run="0a80pz2ng6grjj97hgk277d25ijgc7swjjsr4rjbd1ljnfjdvf51";doc="1b50h04xl2nwlpclfxl7m1wnyl1ysf9d7p8jbahglnxaxxn8ib3r";source="07isrwhzw538w4asc5baw6wbfydzdrflrp3pk1qilq3a5wcj1n00";};
+verbasef-21922={run="1bb1ddwlix4v6knmz68yy7i2jsismqdz189p1664q78h12rxcpx3";doc="1rd4mhi7w3nsvvx0zxv43nd4ldw7if1zadh0xxbzbjaljypmshi4";};
+verbatimbox-67865={run="0pgim93ifd9mnrx7fkl9fprgf33wp7m5anms8qgzny0lxsm1fafz";doc="1v32x3j5zc8yl7rgxn3j40p53x4f1y8abr9w5fj0bwhs8qawv2xh";};
+verbatimcopy-15878={run="07syldn58zwnwxwdsmq63qgr2nb0bkl9di09knska9jk0c50ql1j";doc="06awpisb1y773xsijrifh0121pq6fdzp2ai0snxny5vrpmyp412n";};
+verbdef-17177={run="1dy1h0vcknnizm2f3zggga85slga5p77aw3ll5ca3kx5qxp1xqhl";doc="06zh9v72ywrg84wlb96p0y28sn9919pn2xjgqhaii6irdf3hmlma";};
+verbments-23670={run="1iv716hb41cy7bc7bk2420lwdykpccyg6wxvbxb8vk904fsgdk2a";doc="0hzrzb6m8iakip93in80x6k15b08z9xwjrbki12d28xdadqkpqcc";};
+verifica-56625={run="0i5bh8j5yjvql6mywfs617mh3pywnqd7z1m6158r3jpwyn6ki25g";doc="0sinc5ha8k3nk307q0piqwj56r2bh4pbxxyww29ygalfqjr755bb";source="1zn10fr9kv131w4id0djycy7492ch7gis27gbr5r02ydwm7nny1c";};
+verifiche-68023={run="1fzxa5aycqxnzvvhzwprvq0lcdgvchdn5gnwbzbfnsg1547l6kz2";doc="17f2r3l9252bijlips61naj0wzdsa5ghf0lkyni5xsiz0s2jc4a9";source="130hq5mzia4pj0cdqcj3w5fhgcsd0hhmv83s6an6ia5rzmb14kzi";};
+verifycommand-69389={run="125r3ncvllap1vmnj1wz11ir10223fvbgsy233qmg0kdclnh4v54";doc="12j8v0r2jay5f1w20f7yi1kl4jdfqrv2ga5748xksds7jj0x7im3";source="179642vhwmgrmlvavl5naxnj1a3279clgjyc090gqw8vg8hbnccq";};
+verse-34017={run="19yp18fl88zcph3r53ajbnwcr8lbvgahs2kfdg733l5zw3k5pj16";doc="063lkcis5m4zs509hn4z1zg1faz1lsxvjak6c574xasspm45v559";source="1r9pn4dqpr42ng4xk899kxph5sci82dkdx834lyrhi8lsj32g9b4";};
+version-21920={run="19b4h22lqvgzqqm0pivjjhmpxmijrr5rfy0xc9g9y7czsrp810hb";doc="17bsgyjvnna790nz3x94wbwslxkkz3958vj2l3jbyphm5vv92fxz";};
+versions-21921={run="07bxhbpsqgdbpwph2w7gam699605m181xmj8jhpcsf4rwcpnjik7";doc="0pjz8nk7dnf2jp6yixhi55zbrlmhv477qsx6p52dwkf74vxgv5ki";};
+versonotes-69249={run="0kcfa9j99jpw521sz1q0w9qfjs76138l1rdy9ha4gb61m5r95008";doc="0z0mpqrz3n8lp3wf1kfzfmm39n7rwv2xxfvy4x76a67qdjg2glbk";source="1h0qkcpps65a8qcbzskbghsdnqvhgg62yk7ihmv487a8lid68js0";};
+vertbars-49429={run="0a5fc0a4z482fcxx27wrn20fsdvx9xclsy36623h80pxnfw49aji";doc="0y8vfa23ld199r45pqd56rv7b0iskskpaqc08lix2zss6a082iy1";};
+vgrid-32457={run="0yb2hr83xvy19j43kmjrx9kf2cadyairjr45vg5a0pbr9nwpzdsr";doc="0ymfdbqws78n3mm9cbf7zrcdbn4hb9pzzjsw77hlg023h4hkddh0";source="0rwsi6lmd4yhgpa6605631ld2bn8pzij7radk8vhwsa1sn19326g";};
+vhistory-61719={run="1m3k7qhrkxa52hky57jp1p23sa2binjfkywv51hjfkz5cyhcqi3r";doc="0f8agd4p659ncqx66yam1q30jaxx20qcmg649w3vy7fwf6crjiyp";};
+visualfaq-61719={doc="0fjx5y95n8bhsnwsw34sazbgygznvw76z01rrxmn1bp8za7751n0";};
+visualfaq-fr-67718={doc="0xk0qly49dqkrw1qjhnyp4r7y5jykghlp1y26hipghlaqqhdynga";};
+visualpstricks-39799={doc="1wfri908smlw1ngqq1mjll2b80b29piicqmv67x0xs1v3kc2sz3s";};
+visualtikz-54080={doc="1q0a1mhc330z8cnhghp2p46bxsmzz8cdba8hcvssglz0gsq5z5fc";};
+vlna-66186={doc="0nfb7mj6y9d4n89z59ppi96grfylwky97mxcv9rjflr5kpqlpga2";};
+vmargin-15878={run="0k0qp68wnfr13i2prx64n463g9xa4cf6y656m2bc735pvsa5ln78";doc="0l1lv0szznc9l5jz261nkcpq6dq28869s6h616rama40kqpdm0bh";source="1vwydnpsd5ha4g86dg2q5s012d6l3yrksc580m41q3i67npb8chb";};
+vntex-62837={run="1857xywsc16rgarwhj30jk9mfdw62483g31gsir9rgibpxdjchsh";doc="040364kv9mizvb2bw22in4z6smzplx7jg9wac7h3wl7739qcfwgl";source="0f7il38l3yp8v6yxgg5mszgiki9z0as1s1i99ky50bvvb049x8zg";};
+vocaltract-25629={run="0af79zsabml28hwhf2nq19s1sf7p6kljyvz6c2zlbx96a5k9mjs6";doc="1sjvklf54r6znggylk2wyf1fw806v8msc2g24ibv4p1ia3da2giq";};
+volumes-15878={run="0jl7n29bdwi7m74zb6alp0c4aamic3776n5bd9xcnf5ihfmh9ssv";doc="0052j7zhnbi20x6hsxv68ls2byqci2n4crssb243diid8yc763ac";source="1lvc7fhdblb5ys2blbm0fdib5y311nz4l6xll1zzpsvbwpcc8imp";};
+voss-mathcol-32954={doc="1c7kzk2m2i8f6vqywnzfvcmv11ckanhcjxf72p4rgivw8f0lbwjm";};
+vpe-26039={run="1w2pxz5dg3q42cdydj10fzf9hmwbc1xy8655s7ngzhnj0vljrj1l";doc="00n8almyx5g71gwxcn05vpfvvisqpr4k1lp123ys810p5n25s31z";};
+vruler-21598={run="1di4a3czay9gj5dbps78iik9r5p0n5vxk9dagc2ak6gdbc3rz1ls";doc="1885iaxgfbc08ldwrzv50jpmczhnjjvhq460vspdp33f3z5i7ifq";};
+vtable-51126={run="1bdf5h2nsw76y2w4gw1ap0ncg9ibydaqdhlpynj4qyy2c9qkb55q";doc="1w144as1s1kfd9a8z92kl8v2qm6il09k5myz9siq5dqxdfs3k9hk";};
+vwcol-36254={run="1wfqcin8xmxrby5mxn9s5j32zmr4ka4k0h9ps4kdddpq238db89n";doc="1zyndap37lq6jk9pafpzd3q5bib2x7yrnz6wk7wlgmgiyb6smj1b";source="17apnly4vihdn7dzh6hibgairrnvzadxlv724cgb5lqaci74gnqh";};
+wadalab-42428={run="01lf8nlga2nycr23xpzl6xas2nlgajjmia4lk4zvjdgcxqnipfrq";doc="0m8x6plkry0p3jabvhgkccb2rvlsz941di4ihfc8schkq7iyjlxq";};
+wallcalendar-45568={run="04rck2mzvzpm2f934iz4nni9s5w9g7a0qcp3kvp3bsqa6nhhcf6v";doc="1b2nn4cwsb6vi29a49cnnazpzffwbpyw48wffklv11frbmk74dnj";};
+wallpaper-15878={run="00cixdnwr4vpfpqfdcbra4gwz0i36kddak8ywv8l4q4d4yd567c9";doc="0ngsn8an7gqzkw96sdxb4q24h7bvbjw0gsqk6dzrdphclvsjy8w4";};
+wargame-66713={run="0gck1xa19pqmccblad9lpgj2n4wvlka83grd1qgnkhvwam185r0k";doc="0swifh404yi2mya0xv1np8ga9m8bk0nwrc386bpzgq7s8i1mmlhv";source="16zz89n1z9wif54xs6140xn9rmi9dhaas9s6yjwy6z52gjinsaga";};
+warning-66616={run="1rsqy10fghs5n2zb3g378csxykrlympd40g74wsz9v4aqb5a9xf1";doc="1fsqznifd2fj3czhhhii1j1z79f3vdkjhf46sdhc67y2izqmg8rj";};
+warpcol-15878={run="1dr0ic0pskvw6397q1yy1ibbpl1c1kndqaw5y72zzzy52x4l4j71";doc="1jc7rilhf61irh8kgc437mp45ryz0yr63z11r9ixbsj04dmfk2xr";source="1lnd9b42xyzfnrz94x10vxrmfy6r2l4wlxbfc1c02fmnchj2wq6c";};
+was-64691={run="18yszyvcv57im6qk8kyck21mzyzwmlzn4s64jlzz0pdzpjhn7sxa";doc="1dv6d27zlvpb1kc8qlj1jxbq08czxqrfq9l0ahqdcrl3fawdgiv2";source="0ylf9h95ig7vy64hai9skl7dxvkf0rj85syhcpf9a2p301hchs35";};
+wasy-53533={run="1gvk9gdx32sm4q2f2k4i6yj45c6zyf0hjkq7r6ysygmd2zsvf9lh";doc="1ah93bb5gr4di1jbq316cm4d5iaijj4f06vcjj4x44jajirlaq6m";};
+wasy-type1-53534={run="1zkhqyh72q1w6lr94a7164myp5qfmj119qim58cal1h48n3wypcw";doc="0rhkbkmn7xg044aw1cm44vbwiqfpcixpdpcdvz8yq6in8kmgs0lv";};
+wasysym-54080={run="1i8pvf5yfw5j0rkcpy6v8czvr85p1yk18c8h18iljgsdvfj786h7";doc="07lhw9ss609gjlhv9f0bbyv3z327v3jqblfwhcspwg2sjvazzx8l";source="1i7y0si6mbd6kxbbyvcfak46hrcf95xv8x6nc29nc6adqjbygkiw";};
+web-66186={doc="0iiyzzrgwakw7ipdnwmjwcrqayzq4yn4786zlr9zirmmj34hpamz";};
+webguide-25813={doc="0wid2sxrif3mm3lrs0s6pil949byviq4d7924yzvmf9hkrs5f03v";};
+webquiz-58808={run="1bl334im0jvsyx78g6jq9m8623xyr4xz0avzfaymhs39dv17wsyr";doc="0lwc3r3w2d7lzz39ilncbckmvx536z3wvz84jlnv3flm2dll2z7s";};
+wheelchart-69040={run="14m5nrs3iv6hdryi9xn3yral2pr5vbabwzxq882x8qfhm4c75ch9";doc="0dlffrsc1lyx56mhjnxla20mf7qh2blybdw2xnc1nkvw59yj4dc8";};
+widetable-53409={run="1k1jnl3jbrbcc55cl34wj3znfay2wnf8k8sgdslicvnan2j717zm";doc="1giy0gvhngsmfwc87j9k2p820j6bm2mc2r1kbcl4ci0c3383mify";source="0krkcnxzjrn7lqd0qh8lgjixfpd3c5glvj1ilqhak9ifd3lq8r4s";};
+widows-and-orphans-66753={run="189ch6wprsw4xsyk79pm03kkn19h5rkqpfs0g0p6kj5jg39x78xv";doc="0vzcyzcf8fh83llravv0iz739ilr15qpjkgyjmb95r0a9zwx044i";source="0sf8picg17x58baw36s0z41p7ck26439wjra4mbc6kl6gh11jqmz";};
+williams-15878={run="0pbij6hwk82pmddl199sxin34fk22wzvgfj0dpjsg0i5qrsg0qcl";doc="0vvz6fsh4vlhwirz27gyni6xnqinhl6iymgmfhlcc808y7fawcvq";};
+willowtreebook-60638={run="1g8v5am9pzabiq5l5306q0s3a9zmyrdx5s7pjbpph08bhqfhxvvj";doc="1368jr8d6444bnalx4p0by1133liv7fl4zpvafdm0a6gz8b5n5pa";};
+windycity-67011={run="1r395672jacizgwyk2jlf1af1np4p8i54vf4g6lii5yv0yhx6pmb";doc="0f6c5pnm31bdanbcjn5p7icq9qbk7j07sam6g7daj670z385lx5f";};
+withargs-52641={run="1b49fag0ivb5srlsxcbmy8ssqsrcbgadkvcxd6xn9l9bk28wpfwr";doc="12n87c9181kskqvx7bzvqjimg7agcm8n2z7rxnh1g4kh9bjr57ms";};
+witharrows-68047={run="1z4v7vr44xd2c8b86am74xi41796bv4gql41hk1zldswz6gw8w35";doc="0ycg0p5a9vzz7nihcsb49vdcqnwzvz6za7dibbx7am0crb4y9a38";source="1vhdm893g8zk7aqqpx7wsy35phaffpfhd2cj359z6k3r4km548bz";};
+wnri-22459={run="16hcapjdb5dx48gbcvk2bkpnp1w9knswni2vs8v1l9shxz03nnxa";doc="0wpf06is1vkaw4ivhrz4hfii3qrgs71cawgn1fnm8fdzalgb2frc";};
+wnri-latex-22338={run="06m6xwvm1pxz2bjf2xa7k3x6m70p1f5866wn5imipmhw4wjs2jp2";doc="15d9mcvdhs1jd574gm6a9ppxyy7avclvq54ikcmlf4vn20lygidx";source="02x8fdavhkxfnxhvr891adpn93yhqccs31w05h8f9hyg34jlnb30";};
+wordcloud-68209={run="1s3fpbd182zqi94kg59mpssdp51rh7gw5371xrp235g8ih50054a";doc="187ap98yaffx8nf935chvvgjalx0g8xk4gnaqbblxkz26qi8z3f0";};
+wordcount-46165={run="16vxb87jyj7006akcd7fdvnqihz9rjyw2pl43mdvr5lxp22fpxdx";doc="1yv9lj7k7m446knp2ghsj0dj95splsc6071w2iarh8cq1xlbj3kz";};
+wordle-68170={run="1kz3xxwls671vv1czi7fy6k0cpzrw39afqmakq8apnxazi96lp3l";doc="1jjfsviijxk6n3qymsa7v7rn7slfq30k2arsz3xrgvri2c22z3yl";};
+wordlike-15878={run="1mdgcdiwnqcsrqrzbl27v56xpnzvxb7gg7a8vass31srk8n10ssq";doc="0i9k22hwjkq3pb6z8hiff6zz8l3yjp4vh8x89z5mcbg8iw5gjacd";source="1azirdir33aixw7zh9ps9npxy1v8ckgsdjb96ri1ma0cy2z5d1ij";};
+worksheet-48423={run="1rsh38fx4ayai0mlakqgpzxpnwp6ckzjcpiwy7aqlpia0504jgpc";doc="1hagdjrf472ip4jjkrjv6mgycwjlhbggval7kkk449i0xd9kiz39";};
+worldflags-68827={run="170wypqn7mmfj4s8gbm363l4hqmmjhsziv22z9hyfhrdh0lprip6";doc="165ny43vh389qqi7rzw7mhfyn04awr397i67kkc20jiqxl6v64r9";};
+wrapfig-61719={run="1axad52pzzsx9d32rivasl5d49dj51adk5kcnb1rr8mz59421rk3";doc="1c3xd0ja4063qzag0v07mxkk52yczlcwdbwn84gsfp5hdmd5cibr";};
+wrapfig2-68164={run="1vkp56jijwjivf0ml9crdsy4ga7763m6hh9kdw94s1zb60zh4zny";doc="0cjfllnqyj50v9jd7sdqbf7inic7jvrzd4nh3dhssgd5s2abfpnh";source="1zy26lvz2b35ywxxcgk5r6p8vqq92bbw33j39zzg4b739jrh842h";};
+wrapstuff-64058={run="1w5bnl5w2shar2qg2lm7768n8h4qvgzhxaacphjhqbx9zb1r20w3";doc="14npfsqr8wp1bgq9az4x23rmkkgpn37w4cr6c43wyqs7cvizz0yl";source="1x34kkbv8n8c89x21ikv2lyzlk24qbwcpcxwgv13lqqlcqxfz2ix";};
+writeongrid-68863={run="0vkm3hfgc8a3a6x5sxyszbmhprqckpxy0ibz75g6dhf8wr30jrf6";doc="1dvxx2gqvip9wf80m67hb6w76bbwcy2nzk5rm4m8dj9fvpzfv2jr";};
+wsemclassic-31532={run="0zpqx8gi2yf8cm5rmvchz0jprfwcc0gjkwcrygrvlqhqqn7qmc07";doc="0h7vz6pza8bv8y8ihfplbsq8ip9ds2z63s7j7qh84vf325ci5chm";source="1522cvwkw0ryvhgdqqd7k8lrbrayrmm3h31c77v7x8a81cry2bj9";};
+wsuipa-25469={run="1grz4s0zi7dlgbks7rx0h0rkjvchilhjabs59h81f92f835lafm4";doc="1zw7ibbqc75k4hplbvqpdmnqg5ks9bw75mrwcg14q1rb1807sp8w";};
+wtref-69214={run="05zfj6b59m0ic977w31fi4i86l7214xixws7yidvnr35fa7wm75z";doc="0g4fsbhhsvszvpnf1vn701c8kr8lpq01lcd2g8nnmknvrpd56v5z";};
+xargs-15878={run="1r4giz5gp4pcnxw12lr8hnsa45yv1lm1ddq6g33rkgs1qjzkhv02";doc="06kfclbfr2kc95c431hn54g0c6vcv7vscsskg9myrp94ilq1qglk";source="0k58hqv0jmk3v2jmx212idnfrs9rxqz93zq34f5kqx8dwhnss9pp";};
+xassoccnt-61112={run="1z25b0dps2qf1lsvmbq462ljyyakkicg92d3l1pz254n2mqzvwjb";doc="0057kfclqs5n04ghsz6ad0pvgzwp4hlpk21c66922nscyl4qrfnv";};
+xbmks-53448={run="0pv35b38frgwbi4ijn1x8w5mx48fcy709adlrkzhy641bw4isv86";doc="1nr1m8mhqwkjl9l9pw72ls8xrvg8w2gi8rar4chk3xmh6kphi7ra";source="0waizijqrvg7qigh317vr56bi2b795p5k3h779p0kbl53k3f9f6i";};
+xcharter-67742={run="07c71gkxryhr6a1yjqyqypsmr4ns986g00nqi0ij823bz6q34hk2";doc="0mkgx4daalf59qrh0afd025r0p8nq2908f4fs1am0sy6svc1m16x";};
+xcharter-math-68992={run="1bys9mnl562jq8zr1zd98c3vyvpjw1xp7pblaxcwxwsy0zij8291";doc="1f9rm0ga8mdjkqj4qv75c73cc9jbkjj6bnm6s4ayf4lbqhirzjn7";};
+xcite-53486={run="0zsfyaxs0w2xy6fa1s6hlrcnzw1q9n4n676bv6j80cwp5cw7nnhg";doc="1sfziwn05dii3gviiahvmg67kb04hzhz4cd1cwjsrrvnjii0dqb5";source="0j5blcycs86vgmi54z0b06il06zzyjp4v15lmdwfnx0amb9y8jr9";};
+xcjk2uni-54958={run="1x77gmg738r2zbyd0mc7q079hz5wbvabyszmwizfdj6vflm86w3y";doc="0xig1w251dsn2qd9iywcdc20plibadiw8hl1iwygpzfa3187djjf";source="12hbjjdypk0s5k5iaac80n2n4z1zlkg5lp59y58dwnn4y1dx6m6z";};
+xcntperchap-54080={run="0hqagjlxphvfqmslg91fpxngbm15i3kmawglszj8z585i0j570di";doc="0yf5ak4xr07jzlh8s087c7g8rfa71isziy1z13qy8ifv2882p9qa";};
+xcolor-68864={run="1s4iv57w90ckapbaplzj5p837k7a0gvx8k33cici0sqi115iqvxc";doc="194q54ls577n7cv6hwz6b5al98lh3v8za989cmrqg7gn1ahr5pqr";source="12lki4jl45c4jiwncfkcbypghqq8i61m0ams9jljfpgs66421kkn";};
+xcolor-material-42289={run="0sa38kjyy4iywgd9lwhd1aqw48laqj9h2crcarvjd8hr4xwhrbcw";doc="00jfvs4r7hsclvy49r6waanq1q9vszdi5fhlnbg5arhkf53lzii6";source="1jiyl9vry12fl3y2c6l8z5ic8jaahshbvaha8c98h1h2d8mqk6vx";};
+xcolor-solarized-61719={run="0ggm9s8vqw80jfsmw5jn143xcbrx226rwkarjkfqhnlzx85k2d36";doc="1vmr5y6c5mi7hgkb33daamag2y4j6vpiyxnh0cpya824l6miichq";source="06f2x0w9k87wd75vm6gjxg2pdrcv3g6406nraq2mnlf9sial9mnh";};
+xcomment-20031={run="0hxbf6hid76d1gm7ngjbrrcb0x7faxsqa44560f93n6arhj1nmwm";doc="11zcprsby27n8dh78658r6xmmkpqzmx28f6sqc7jhg403jq0j27f";};
+xcookybooky-36435={run="0hx5n7rz2aw460m9cqk2f2p4d3v7fhr02cjf8wk471fp8jwn5bx9";doc="0x9aa92w7b43n49d6m0rlac86f3hsgsrhvq82g3zixvffypyvm1i";source="1z951i4sad1i8bjmw7bgbkanzg04icjj0qfjrshr3m8a67wlxgjz";};
+xcpdftips-50449={run="02g4rm81gf314ds6yzrgasj1ighbyvka7p0vb8mrl78m1ybqjab0";doc="0wcbx6qx288448h2rffv87xgzfj8i30z1v2j6qcp8nlqq21lmw38";source="1h60va01gkm2m9jz521wx93libahh9fi3a8pyb67l6zgjd8dllxi";};
+xdoc-15878={run="18nqhig2kiwa1yzk06v65hzriq6la8c31j6f7caxzjrhjkzx0rvm";doc="09i5zcp7qisgf5rj6ys4rqvj8v8lxcxr16ddmzzvibgdc8kpc3za";source="0vxkqg2jl0qfnahfs82764z7npvsyc0ys3qlz6xk61ylhyqvycns";};
+xduthesis-63116={run="08cxhw5lhklv7vxl30fhwmlgq4kmv53a8qppcmsap1v8jc8vjrdk";doc="1j8pqz4l85qiziry85w7a23i6s577nb2cpbq4v5jgvp5l8x8lhzk";source="0zdlq46z2l3y5zydal9nsawv7nhhp113hdia15d9fd23j8gq4jdp";};
+xduts-66661={run="0l0p1xmnphgsfqq0q4si38zbrzxgmwzw3mqq7lyd48vwq8m8sqad";doc="0l1v9a1c6bhd3k9r272y64lyqpgn1vi6hflz8cg90ybxqxwrgb3d";source="0zaxm3rv20ijh6pmcas69hc3m2x3355gn8g1z06ihn8fnz77wl68";};
+xdvi-62387={run="10aldzxy02d9phqr9qwpxxwci7vf5q9z7sgxcz50kf44asa28fcm";doc="0n4v45wnzba23qpv5nmx87rdd09wl74jjfgpy6z66xp9jsdlja4w";};
+xebaposter-63513={run="1kdrjvdzsn9jwb6awcj2g2cr5csrhzds4w0anb8wm9q3532hcw58";doc="1k2cv0b1l4bn229rjvwcfjivkvgdifjgs5mlp5s27jpq9m5jvpph";};
+xechangebar-54080={run="03d1wmvldpfk6y52sd2pvw3ipglbl8cc851rqlz5jgk82c2frxg0";doc="0cnc62nff1vljwkk6gb6r0cwxq17b2yl4v9ilb7kxapaa6apbp14";};
+xecjk-64059={run="0m93s5m9m9xy8wjjm03wajcwi05as0y5bv305dzryh5qcfv1ncri";doc="0ghbgk2a89davasn3si5jbszafknrg4gpvkgnq9hmndsfzfaihsx";source="120zadcyidw8cbybb8gz9qbf7r1h8m5cadqxnn8xs5a84czgriry";};
+xecolor-29660={run="0ws34zr158nkpghiwlvigb44zzi5qymfqxzsnayw78i6zpqal55x";doc="0hz9kk36ap7szbsd0jp6a59lnaxgnmwl0jg8gmz8s1pjf77jf5ww";};
+xecyr-54308={run="1qqfdi6pxlkx6pxi2q61i0diwmsy9n95x4bvj9r3pgaf851p7cjx";doc="08b2xahg1agfczvqpdkvi3641g3pd2w2yc245bnyk0nccfcnf3k1";};
+xecyrmongolian-53160={run="1m20p5x1s92cwhsixaz3s0y00r8n0j6172bi8vpyzcpf8mc886br";doc="0kiyjcqlajmpj80n8wkk0ziri83811ivl380i3cyz7rxmsh1hqhg";source="0dj2191iqcm9qpi45h45r3cp4nz5gdviw6xf9iz261b3pn515prp";};
+xeindex-35756={run="06ipq7m9mnal497j3awdspqim3fs7v695pf2x7v4l92vqz3hh1sa";doc="1pa1fa8vjgbzmgphx3fmm93dd5wr3adxrrld5xibk2qrp7fgkbsr";};
+xellipsis-47546={run="1slakkdjh4c88caxcdznir5gkw0v7aahfpqksp4l9as9bsl52980";doc="1jlndanic0xc16ba1hg1lswcxa2b20hibd25bs65wyag04rbh8lb";source="0768vqhmxgra190g0k3k4hhzgkhkxwwnvwmdpymphsqm9lvxbl95";};
+xepersian-68117={run="1i461pl3hdqd2p02d1xnmzpxfc8bxcip3c61bfjf30cnsa184zvc";doc="0b04na4c83ly2r8jv5d1mpjvhnc7i46kzhbgkh5kxzvjrpmqwnws";source="1409w2mfp50mihwn7vg3krhg7mrijxjc09sgqhxa1fgv1c3yqisq";};
+xepersian-hm-56272={run="0qj98xrbnh9bam0a6c6vy7ffaia3iqsx5s71bjlmbnyl6y2h8lwp";doc="16f5x8jv8mqf5a32gvrzqwh1xz4s5nxwqsq4q8sg1za6micqniyg";source="0zcq75xzkr0bgpf1xdsphrkcv70q17vs8jkhzxvjrfzilh9h3iqr";};
+xesearch-51908={run="1rszh3svj87vw5lskxv8bvnkzzj6k9rbikl6rr87ry9apmymsklg";doc="0cb73d981aa0s0hg2ynrg3zybsaw28f5b29zmqgvzqidi8vxfbhl";};
+xespotcolor-58212={run="0w7nns136gfz1dvq6iplk0jbza85lpzlpvsxf1bzjhqw5sk6v4p9";doc="1fai2v8x4g9cmda5m6nvf6g8w6qg64qfdq1rvjlz1qiqmy71c8jy";source="14yachqawnmpldkwc3f3q4krj2sr1kad7wzy1lfxwqggvpbdcjkh";};
+xetex-66203={run="09124rd2k40dihk4c1pidkd44rvhv1b0ain1bfk5ry1032ky7wly";doc="10x15yqxsfb6xsl8z75i1hnh6dcff6ivl036945cfqsycyi9sq72";tlpkg="1ai1pw2hqv01z24x9s7vjva5v487rrr6al7rqpa001k7in2ijff4";};
+xetex-devanagari-34296={run="0i6hkzl2jbiixzrw2gvngnyzqkz0lfdilj1zz5xi6ypffi4vyihx";doc="0ahcawr9872lipz33jrv870lj2601j593fwfqcn5x0jhas93ch6c";};
+xetex-itrans-55475={run="17476frf0r4w50bfbk6g6ic40kv3x3i6qpl642glb3vyzyjd5dbg";doc="0bs67djfa9pi1k2900y2ybnv6lgjd031cyczks0jjzfnav2g4df6";};
+xetex-pstricks-17055={run="0i37r4lk1l36cch6kjz12mfzgpg6hd7n903fzbj9h7mwmjwnrylk";doc="17kiv64h94hf83ailbw29wf15r7gv9yq06h3l53c38rn0n20vdz9";};
+xetex-tibetan-28847={run="0r8xgnagsqrkxr0ij0mcv30vhf7c3amyf9lk895lgwsvz6cysmma";doc="0p5l36zb8l3h4x8sjk8cwxj5psvfa4j0kg6jb93sj1ln3yfrwfr2";};
+xetexconfig-45845={run="1253njshiwdayzq0xir9cmbi8syhjb3sc4pyrw9p6kzyqvckkcxm";};
+xetexfontinfo-15878={run="1sc0lm5w94320f5abv2hw2bzqprhk73fjv2lkv380fgkpdfi7pdv";doc="14mc9snykdwzcmq013bs8vzn5w80lblpg05jk57g7fl2z9x6xl38";};
+xetexko-64894={run="03cqwgd87skkn9bxrmka5q0cfgz7wq7l2kln9apq35xhz6qr5hcl";doc="0iizxcn99c9qvm0l5d1724cw3x44w41rhhlb99kh16bjxs42xc2k";};
+xetexref-68072={doc="1gq31fz879pjzn1r0ksy9prhvh70wil785p5nsj2n5pa67hd1h5g";};
+xevlna-43864={run="16ayk70kxk2s23r6nxva1hkb1z7aw7zz1zhmcis1bsijx657kw25";doc="09aaf3mpbh07mix5xvr20zybbbrbgbwcmkd5q0rfsd0ac8cm72fh";};
+xfakebold-68929={run="1xmw5mm5r2r0bvqga95lvcyf5y0jf7hc40sgzdnc2dx9n8sizwgf";doc="06a3znvv53c3ymfh53f37anlgj8878n5mzcw0mdjszlg8q4bl914";};
+xfor-15878={run="0m4y0caa22fps0r6735kb9pr2f89z5a8wflzrvpbms4nh3a61zgc";doc="0c0qg60h631d3m9rqr0nwj9772zjv3ch0d2p1ksnqnjf30idydl1";source="16xp7hziirlnd507g9bjvszm90wk9iv6ankq8bx27qkyk1shhjfq";};
+xgreek-69268={run="13hvjamdswy98r0z19hgyq9nd4y7x4j1vq06garkpvq9r7x6v68r";doc="0dn65ndxdg10zfzr2s4ybsalcl3gymhygdbyl0cdzsqkcv4xj7d5";source="1g6vpqia7yffnkzdshhgly1c69fdrlphaziia2sgcp9zc7mdwlb1";};
+xhfill-22575={run="00lb01b27h1bg8h37rcm7wmqh5pc3gz7rkw0l6xrfai0mb8ypq2k";doc="0alaqaiz2dfk4sh4xgrxfrwxgisv2p0bfdz7ppiqmli10al1h2gd";};
+xifthen-38929={run="0ys8yq13vhval5jg9a4n4pv7b3v11w1yh63ssvyx3pnr767ay5r8";doc="1miqc1bfwi2ssl6yp9aqw7ygnars27vks0grpyfns494yimy8nc0";};
+xii-45804={doc="19jhzv5hqzj59wrfcr1dsj6z56qfckax694idgf8arri5lnbkdd8";};
+xii-lat-45805={doc="1nn54xv71kcmn9jbkcslz6a64cvjcay9x96rrxnakdj9qcqd27r5";};
+xindex-67771={run="1scp2bj9jlp71wji8fa90m9jmjm2075cjand9schs8551and42r4";doc="0yddkhqk43d7hnaxfh3afqqcfqadgcx26f77gj2bs4xl9qa0c755";};
+xindy-65958={run="1jm8gi2pq4rw60p8bh7hp5xw1kyhy9r02zy5s2p2xyqh5c6di7jn";doc="119lq9mqczsh1np0876fz4gdfyq1rxmc0ghaqyriwl4fzj6lka1n";};
+xindy-persian-59013={doc="04w3h65215slnakk5w19m94xmj9cjx01izbk9xijifv5l6dqh447";};
+xint-63562={run="1nhf2g00742yzjzl6hnc52cbp1y97l60grgjhjc7j80w91g7vv35";doc="1340cagm5hxif3qmfwvhy6izkhg1awazg971a9ww8xlnxk70gmp9";source="183llw3pmalq4ylndhnvbfc74h57xl9q6pcbr9bnrazlxkjmfpq8";};
+xintsession-60926={run="0p28r81qa93r9hwsaib9jbg252q76xz1hxlaf6q0r2bs3i8a4hbr";doc="1fzyqf14fdk6mjvgfxg43mx2gncj1c7m0h4fid88z7ffsa6rq1g5";};
+xistercian-61366={run="1bkwcw3n5kkygz0d5ihikxp5hx2mcj3hvbqpggfv8wz8y820fkjv";doc="18q40xjmzd51hnh4ga6g7yx3ra8lmcysavf5r2wv8chqfa6jcxji";source="1vzkm5p56h4rbsj36nnc2c45p6fchqdmym1hh8fblxdy311vjrhh";};
+xits-55730={run="0hnjyncrb0r9ssp6aj9lih23b0z031fjhc7fjjsjc89igbxb8v58";doc="0iv1bs2i1fn0pr3gkz07xaqsdfw9idcyfdd6bzqjryynas25aia2";};
+xkcdcolors-67895={run="0nhg0b4zv1xszx2sl61nyhfc5z5caw5bhi16ia119j3kb2lwr26h";doc="0sqv3kwbhh8ay0igpfal2gx22sbgay3wkwd2kzbs6rgsp6xyvj0k";};
+xkeymask-69223={run="14ll2mzc3sa1271yvq417a03g4ky4fvmb8zhmb9bqvw15vz7v53l";doc="0a9n4l2ffd358cvyc2xqvvmrd3zjq6nz7d99b490ap2734y21q1k";};
+xkeyval-63616={run="03m4skbhpv0l8cg3v50650k3h75x8rzk873hnqry0frb3qphjycs";doc="00xayhdwcwb6nq093v65pp1vzx2icn1xpkrbl7vllls4viq861s9";source="00ljf3z3017jdyifxhvls0j4l4jvdg8wi7sh56ij9qlx5jmjjzdm";};
+xlop-56910={run="1clpl22vxgqjpzs0ypgak0d6z0sr6hw3gj18r7sgs2q0jf5m6715";doc="1acnr4yfcakpnr8pb8g26qh7z9xr4dms4nfy50ig7r7azmdpz9py";};
+xltabular-56855={run="12skn3ld5cjd8jvh32l1h86mcqmx03v2w04189rkxh2q90kyjmfw";doc="1lps5w6p2j0c1bszyrbwdfn9r7mii9k9k6ap9s2ssb2rrfzf291f";};
+xltxtra-56594={run="0zpvlsdsrn6pnlfd3aa23hcrjfnnrjivi7r61g25j9sqcx7cmkym";doc="12wp6zwqa5mi5i5ridd2amnr48xrkqmi92xdhh95ydijpzyslhli";source="0vwlj6f7z7fh1vx257v0gnxj29rp3xqjpxlnn156xp9i8i29v0hn";};
+xml2pmx-57972={doc="1d3ralqh0b71scd59b4hmm707yfrz1rj28ni2lzkhbb1ql73bvah";};
+xmltex-62145={run="06rhg0mgxsv4061w8k6parag7fkhrja81aj900mi65bdwmxqxxql";doc="0zjaf8nvsid88nrvzgprwjcm6nirs6glyy25xws57fa9yhza8di2";};
+xmpincl-60593={run="17p97mqcmy10hql3fvdkkjbmlnylhz852ckai0s45birpk6bvi8p";doc="1k532g5b8fm6ly9whah5133g6yngadb9w6cvf2apwm9hwx1pmnxj";source="14xwxsxfa8m8p2idzbkcjznh46np2fikn511bqw54k4k6991vmx1";};
+xmuthesis-56614={run="05z3pbc9gqfnzp4y4a5p6bmprsr1r63w9l442hgk3pshswc2dflp";doc="0dqmbdz0ydlq1hkz0s3lr12sia1qj7p912carwq4pjg9rrw98z7s";source="1c3a90gpb2siww65yc2l3kf91bf5xvxk9iq1s9cnx1ngxjbs7835";};
+xnewcommand-15878={run="1hqpc8p8bl56gzcmar6m670l6yq5arlh382s3m649lya35yydmms";doc="1r4wlg8368ax3p492qyh0nzxkfgkgvm5bzrbm0jhh9ayk9sp7ryf";};
+xoptarg-15878={run="1ykc3mdg45hhyk5x8lv06zggfv88kyrr1zqnv8s9j8cb5c4r71jj";doc="1g42s8mgr7yqdziwza1g241vjgygzddk6ly8md6c22kj8g0sq9jg";};
+xpatch-54563={run="1almf1wif49mi3yqr4qsdffd6m3q8xcma8x9v737ffczsffhs923";doc="1lxsqxzajkcfw4b9i89bk0gmhrsprkmgqqbj5v34bgvkvh0n5pm0";source="1cf161h6g6m3q8bq38imvmja7ral7lpyb26byb8nn26lgixkprad";};
+xpdfopen-65952={doc="130wvaypfrg9sav0pdcdy1g10fll8pqcsqsy70fxlzzr937glsh1";};
+xpeek-61719={run="185jan9h82hrc8bai9h0k09dj2q8p2klqvz042h7xrh2napk060m";doc="0sag912jjxpiwbsgmp0l4p0kw4jfhp1j3sy0lb4kdxcqrzf3m1aj";source="144glnmckvjm24smk4d2xmnkfz8n3r4k7zjmsd0iwa004n28il5h";};
+xpiano-61719={run="11vk7k3n3np2wxx7gv9rvlgfmipmh1x0bjq5b2yvgsfxii65kwz3";doc="0hq4v45nacdxygxpjby6s8smlfkkp63yg83zfmwcl3dgxzayb2s3";source="00xnkxm6ijk1i0h3q0yadklc7f2np19bx3yzq4dzrfavdkxjz8f0";};
+xpicture-28770={run="1z3hbmqlamcm9wgwan834hggks2b73s73h3r2pppp00a1sz3g343";doc="0ymdwdspdhrhgyxw7h7f8nal6h0kjw6i8zicmll5vj8vbmi44dv6";source="1yjvqrpp7a0d3nldqidqrk2xk1lp5vbla865l3lxw1xd5b08y40r";};
+xpinyin-66115={run="1bavg69s0hin8phlgpmz53vkjlh039mancih71amw8bbvh077ynh";doc="0rnqq2hy7wzip9nij6bv0jvahrnsyqdmkvr23fvm7f90s07d1ay3";source="0yj7qh7qp3c1n17vplwywcsjwwy982gp5smxqq110syk6w2hppj5";};
+xprintlen-35928={run="0ywzhbp0b40cq395x5bv348f5dbbv29cqvlh6gkznr6qkjm6ai3b";doc="0dslr7n1mfbclyxic7pl1i425hbcb925jfbag0sfaal03pbczq7z";};
+xpunctuate-67918={run="06lcrbk2q0vy6myjc1qs94p6746acawj7z38ldp3vvc4xynrarnw";doc="02vzwbrqj1dzd46xj49mldkw6rqppvq917bj8216argr5dc4dfk4";source="0lrgdnfv9zlnlyyyybr76a458sp8bayrbl0vw6jzzs0psy1lskq0";};
+xq-35211={run="165zyviwxybpgfx9ycngv9nml482faz766q1skgmligx05qzkhyl";doc="01yhk07lrcbl7ppkqvks5j7wjpwyy0zc69q46wh42gbp65vp24a4";};
+xsavebox-64049={run="1zsv2yf8hp3yfdz2hwlqdzhk40xbcm8bhxwq0dzzkdqi73pfay6d";doc="0ad4gm6mxayrsvbc38nmn20jiv72g177r8vdnv04f8z8i02h7im5";source="1x3rm695vs3nh01nal4qyk164kfjx7pjx3sfmv90cj2jkyi4clwf";};
+xsim-61988={run="1ajmvlrmx97f94k7aci6bni5bhhlrf07c7vb8vnjgyq2iik12ys7";doc="0ppqjy9sgkrwcycfj5z1igi6w56rvcb5a12p22spa56fpsh94910";};
+xskak-51432={run="1hirv11b76xl7jx4swpa7imhjncfn81i9qc118qfrn26n890dgr4";doc="0hzyv8gy91avmpf2fgjwpqfkkbi8255gy86xzn5cz3y948l3m5vl";source="1gw6xqbpcsgdi5s7d239j0ds18w674z4zfibsvbgqjb70lixnyv6";};
+xstring-68015={run="131y1vly79iga9yi9lva4bizxs00p4gyx44f7gcgqnd35biqpy00";doc="0sn9djwkb06n917f1zly6gy81j1gixvp0w28a0f4i3whk3va0yac";};
+xtab-23347={run="1cpcs7k8liapv68cghfwj5fw80rz71qrld7l9lsnli50h7ph42sz";doc="1z3wp3hqy98a4l34kgm604zajdyv0b2vq0jipywmdc12115cw63f";source="1im5cv88g6n88rxzx8lqcxfmhkihywrv2h9gclmv0jx2mmwvwafv";};
+xtuthesis-47049={run="1d68hx38gwwscshdm07rcg75zjbsvk5kyliy5rx6z5jp75k0fra4";doc="1fdr5k60zxjb75vv4m6mj1kalka1kg7cw3k5j9a53n01m2w7q6r5";};
+xunicode-30466={run="1h8ixz9zy9izv5j7555094jiwfp5js5y8mp4bh993gn9xn1rb6b2";doc="0jrxnpas07np9a30cybk6jqv4ng96vjqpyyadbl55szkiylzwwfi";};
+xurl-61553={run="1qbys9b3zd3rlabdmbpndf65fzmvkz24d6v3k7cml2bmdzzqv2cc";doc="1q6npbv8iy1bgl2fjs3ngjw6wb78y51nmjbc2pndas7klbvdixc1";};
+xwatermark-61719={run="013zwh6gz8npgyvdj8daa6y9pb8554lqvbskchsc366k0m6xrwd8";doc="01x4rkl6h9afsbfis3ixbqi9inb1sgvavd0wld9jbwcrmv4qxc76";};
+xyling-15878={run="0gixafnkq15xgkqm2y8qxljfpy1n5nq4ll0lq19sb9635czak427";doc="0s38yqc0xfhf6ap8jc60s24vvmsqhn6f4dsslsdk8i4nq1dmsw92";};
+xymtex-32182={run="01432q9vnzbxzli9bdkdsd7ccvw3ksc76cs3568lsr35bkq1yy1n";doc="0bx00qsgnndw8kq59nbihlzlnwvdf6gncdl3ljckcdn07i4mhl7i";source="0gxi985kgkfyybg90f14y2w068ysy5vk4irc8lfvdgil3y8jwi4l";};
+xypic-61719={run="1srvrq5biqczvyi7k0ilbray7ilzi6gsmvk3b2hmf5qmv8hk0cs1";doc="1js0fkhn60fnxgbgviri58c4q63a0ycq37r4hynxhyix17h51kff";};
+xypic-tut-pt-15878={doc="0d9ivdz5jnhnh3pg8qb2jn7qfxad06hxff65scyhdd6wbsfaizi9";};
+xytree-15878={run="14f3vxkfmv2s944qpdhxpvbrpxq2p259bnk5sxlcv8lbsk2fvvcx";doc="1aq5lbx0x5v2f4fmhp0bcvasy5569mrbf75xk6m6vjpnls49zjfv";};
+yafoot-48568={run="05b2niwqs6c43gl4ag811ljdd0nasmbdinz6dx2d488nl4jiifaj";doc="0mbg6y7qsdsq5nwgdh32kd9x3ghvf8qlbrm84rg6269ff0b5achv";source="1p3zwyg1pf3ad35w25ahlk1r4c18k6vvllcv8ccm952mjg79mj83";};
+yagusylo-29803={run="12p2kxrqa4479wrwcbbxsn5hknr1ai9rf1x76psfs43k9fh1pnn7";doc="0g0vx5zjrfxrf595c0kz378n2h9hrlaf9sx1ypw3iv90zns1sp35";source="1js0slg00sr0bc0gysxvlp3jwlfa57lldi6q7a8fvqjfg9bkclvm";};
+yaletter-42830={run="13xizdiq8dj7iyjw7a9srhr24c1z6g50r44a7hjz0909z3b58j65";doc="1jgv50mssx6g94fh5fcysi884w1iah2qdwb0vrkg6952266gdkvw";source="0byfxy8h76m0jwgd4q0s1ar08sr9ys9jhvsz2l44id321w5276dj";};
+yamlvars-69071={run="05fjkphk70cqkgkd0gg3abnxdnnr4yyr6sd2pbkyh8jkc1pwadfx";doc="04cjg932c22v40fmka7baj17bs99awilgvmakdbcz4mqiaw9zmzb";};
+yannisgr-22613={run="0h61qn97l6k97zbgk0ghqgr4bf8fhbrb037gdskg2sgxb7zsl5wl";doc="1vw8p9xk3aj3lfsq8a2qv7qd00aqx22fs3427j31wnl1iymwycag";};
+yathesis-66146={run="1kbp66x3rh5mlfpakgfyfk34aq5wq7dbg3dqpy3g3cvlfjm5anwm";doc="0y1v78cy20i042fg02qq7ipqzrfn82hrgzfdxz6p68i10fmzpmi1";source="0q47z4k7k55n0wxabh3sjlfdd68nm8bmdy8hdkl0b5mfa5dh35z0";};
+yax-54080={run="058i478l85ilq0asix6mkdn1kfzh2abqn9ngar6s339db4h81lxy";doc="06i376649jszpwgvb0bq8wxchjmhwjfvc78pl5q6q1ic2jpkq5pj";};
+yazd-thesis-61719={run="1bhjqd6k4lqk4sypssmrsjl9lqrbha9d0n42qbaq1mg5whpl2b8x";doc="0krsm9s3ym6f3d323scvxn8cf1wjqppglhmzbxwn0cpjq5nl01pg";};
+yb-book-67188={run="01ha50044ph7f19jrpkdlfa4idk71k21l28hwm67l4y1q6fyzrll";doc="0ckn24i29cqnlmvml5w77ws9rx9k380c470kv2b2d88709yzzqgf";source="1j29rgbdnlmi4a2px1y3xmq2lsdrwlmi9l3dqsac1lx45hpqmhby";};
+ycbook-46201={run="1ajhl8vkd94yajib69s3jw6v2jbbn7h6g92m0yc86gfri3qcff2r";doc="0zf71gmxj1hwywlw5h8klgyrn9mww12hc4bic0l0gmwixvn6k56k";};
+ydoc-64887={run="19njcgsdhz094w6c7hxp20kcj8b9kvcx4y6zg0rzsxs3h4fr2f21";doc="1dpjwv7m10413dxvhqgxsw2rp9n2gw8s0jghshgmbfm6x46a4db6";source="0y7cc2sl9yia5ldp2la1wy4d53jgxgcpi0v5wkc4m554jl9am4z9";};
+yet-another-guide-latex2e-68564={doc="1a4z4ni7327jd1r4n0w2lh7bb8ag7dfdgr6xwl4q5hf2jbdv8mmy";};
+yfonts-50755={run="1k7b78fr6x8kp6354viqfni3k77d96qmx9r76249m5j140hi6fk1";doc="0a7fy4z790fr6q4z5qnzv578x48kqs128wl5znd5bn3mbg0n0cq0";source="1ph8vc09vg0zxc9x1xydrm9wn6q5vml2bc3wln15v69p8nm52d7z";};
+yfonts-otf-65030={run="0rhym2lw9jk2aj73ndyvr32ryz58krmmfbm28cpgaia06crjl4jp";doc="02ghwiqnws03wfhg3sim6xm1ifdpmi4x5yz5azssxnxfwbndp62n";};
+yfonts-t1-36013={run="08fbdd97n2h649kvks6q03zrsjvb1f7qwys3955g6iznf4y8pyv6";doc="0h0gi1j5fcn1nkvf0abf2aimj2q3h6bw4rx7kzg5xra735fqpl4n";};
+yhmath-54377={run="02p5rzh9n92pjznrqia9b6jnlwmn14189m7fiabvinjakaxmwxwn";doc="024p61b5i55m6n8fmk4j9r3q7dprp3lcyzkhag0wch6vgjkrajzq";source="0y74zwc1pkw3dp56jnzzy4zx1ilw5qx9msm1bf55mvdfc045a17s";};
+yinit-otf-40207={run="1yjz72nixv6di0ifsimbnc34wlw6s8nqkwflkag2p75q0jw52qrg";doc="15yjqa1s4zrpz8cj199ak9dgriys76q8iccspw3909g2ci4xyyfv";};
+york-thesis-23348={run="04c8g1wkl795caadm8kqfy6kdqqgwlk46lijpmyiiykbb8z54wq7";doc="0zp6pfr3giqm4nbsidg06q0c3x9gr4bk3g8qq7wxl9a2pgk3z45p";source="0105amrybkm78pwb9hrd7n8r69sj6lkh1zm7c9sskibb13lqrk9p";};
+youngtab-56500={run="18h6a4b4psbm0hjxq2xnk4bkmsa1wd2fvarrzfkhcj01hgn8bz17";doc="00jkdw02iary6s5szh7hf4qjlr7r8y9lfmvlnrpqkhh6pdhsy3jh";source="1hjqkj12jx9imfqm7y1mqdvp1knhf69kbixr88varbh09d6r9p66";};
+yplan-34398={run="1f2kxbb32hxwgin5bn7b78r8sqdj4v1q80sh1c87425zw8jyd73z";doc="1ls02mng1jwihz8s505brmaqcjn4abqys6bwl22dy855bw5rgr5k";};
+yquant-68997={run="0xlwjgc0lwls7zpgbd0v85cij3a66vsv2vwlr6a73s0bjyjy9akh";doc="043yq765f23rdhn3pmdwzy0q3x91hwaawfwakq93acwbx4mqjz8h";};
+ytableau-59580={run="0gfpxbvar3m21pj74j19qnj8qakbknhvssyvfyw61jwdd8ygdxkd";doc="00k10759qihk3330bwfpzmrm9bfb8513w3sak9jlfy5inay59rbd";source="05pxlbj3rdgr15cqfdxviyp2698b7l44rzgssx18yv2a8qnaxylh";};
+zapfchan-61719={run="1753lvv2bq29g43s4chc884n742695agvgal0b99gsrvlkyfp8gn";};
+zapfding-61719={run="17mls8wilz9api9ivsbcczpiqp1f39qy8wa6ajssi8zhnc5lq7zn";};
+zbmath-review-template-59693={run="1zyll0lpd3d2cjizq6f2zxnb1pmdl2qkhd1fcm9f9l6i5fqmjk15";doc="0ymvngll5znvw0i4y65imidy21fzfzsdcz22i2i8369k1n15x6yh";};
+zebra-goodies-66630={run="03m5npbrbcmxw9csl2hg1jgzjg96rr2r3yix3sajkxzmf2bcm3my";doc="107wr1pjqc9yswd52gflan10007p7i072gysnwdpcxk880f1n29l";source="15sw808cqfjvwmdnnkds9n1m29c7dzdm3id4hkm2cl92jxiygb0f";};
+zed-csp-17258={run="0wr6dxb5ks34x8rzr7s2cnanxc5jawqcq0zhkmxrh8cjqcfkk1w9";doc="05gm4s4svqa4wds0ichfm6lk39i0y54y33b96bnycrabggqfw77g";};
+zennote-65549={run="0sawds55l9cc15b3lvr5zswg5ybsj8v22kx8h5gn65g4j0zj79aq";doc="0qwl9f1c777iim45xcl00b3zidzs4192hyv6vv14a8c57h28j7zr";};
+zhlineskip-51142={run="1j3wkvd57kdwhhny0dzw0hqqnv2ghx1mdjgyzrhfj8gf3fifdaym";doc="0hy14njxpzffcnyciyc4zbil6372b640bshfw9jq4wyskwk3i45h";};
+zhlipsum-54994={run="0rvwbnqzgbdihdavscn8mcc7hy6yjdzj2fc2h3xs3i77lfa5140d";doc="177l81c3zbgdvjgr861jn917ps174zg8bab824f7dx2gj5mhdzgf";source="098fqbcr9fdv6f6hjaczm3q28dpx0g8xqjykg5hyx7nfp7nh6yjk";};
+zhmetrics-22207={run="094afdf0mwb6f5jvg7z7cs5xinia71cnlaixcihliai37kdn1qss";doc="0achyp4i8dfhrkr9jddp7qzdifcqsf28qaqdnyb76525mvgkip5y";source="0hic8n6kq4sx2dc8vb34fhyjrbbxp50lllyj5sh2ld9s5fwgm3yk";};
+zhmetrics-uptex-40728={run="06g61qm3ryy6mvvaq4whk7084hjp544dig57mwcxlgp6cfs0fq8l";doc="0ybijj2hjm4byli3yh8q9lgb40bdpq16d9273nrmiyy8szxa20qc";};
+zhnumber-66115={run="1iryx2mdk0fkvwnvw8z71bscy0kk41nx85flw88kwmsv5bd3aqxz";doc="07hkrlf3gycv0clmr13c6xxp36yy5wrcmzr39ms3ql205qz94qcq";source="01b6l05j6mkx2c8lbj2kmkl7cr5l9cwj2z26v85mmki1z3fkqmrw";};
+zhspacing-41145={run="0h588z408lggk7370l9kcssz2hn9lz19bnakadygrklsyhqh9pzh";doc="0s5qyrsi5nw0vppgx90lzz3ra121jgm9hgzg3z791imlxgjn8pzr";};
+ziffer-32279={run="0nalr6i8yqd1iq713gigafnh1k0h8kgiml1zwpk8rjyya606capw";doc="1cr63lkqi9kpkbpnrwmbppipsmw6wy732wsaha0y9y5ia2934nck";};
+zitie-60676={run="131kiycj7q9javr3xs7maa2qjczmva7vj98bw36pv7znwchspcca";doc="00daf6p699y5204lrdg7hfcnmqh3ah764fpjymblvm8hy5f1w5g2";};
+zlmtt-64076={run="1krv8frabpvnx00xwdx058f9y2mip3bblpix05yxpfspx6aarhcw";doc="1xiirzbgh1x34zih8xbf7whl5f994lx9bc4qrirc58rlccnqgbgr";};
+zootaxa-bst-50619={run="0lwin7dfd3nk0r3drznmhkqd7fhfvizxqy3z2xv616spg1jh9sgj";doc="1s4v9azi1pvvh1fizp2azkbwh35xvqh8qcnnn1xwi0g1xhcp38pa";};
+zref-68278={run="1292p3hmhlngwnhl9lnppbvn4fqblphxmpmbh1vij23v64acv3lk";doc="1xnyvhrhcnganvdzilljdn6x5yh7srijhdd63fc0p5d7zn5hccc1";source="1dbzxl0rc3xwcn2bwaghywsry8q2q34npax5zrv9xak24gplv72y";};
+zref-check-68846={run="13syzhmzvd537gdvwkzvlnbrf9as2yl0id3z7fmj35vjwf9z12al";doc="17f344gzq68c9v2glz24pwxal72aa7mmyi5lvgqx9dkkpzlmghfc";source="1lnnx5fb23pkkzwdl82j765canbm9bbnmmpwwxh9yg9dcz4gwhkp";};
+zref-clever-68846={run="0dgpx323gw46qi45wqvlyhsyw5d60i18bg7vk9ndkb6isvs9pdx4";doc="19dfpz5185m5gi4828vc1hg6njc4jkb2n6hah1hvyg10izbxamgr";source="0bk2irrrbmyh7w6p9z5b2bmfcmnb8sb97zszsq54hg2rc7r1h1vx";};
+zref-vario-68846={run="0p7b9pqldlliwshm2xfm6c69is878nj52dgchx26dqhi8lx8l8dy";doc="0ck4h0wdm7rkhcb7bp0cksy2krpziyjykp15p0l02180c79mnp3z";source="12qsz4fn6d3gpxhi5ppfvzqcj04r9f88a5hj9691kqjwh0507zn4";};
+zwgetfdate-15878={run="1fgz3z1f9ifcbrwiq166hnff23gmlgp5vn0djm2znci26bcip4s9";doc="0gda7xd1sbiaaspb253xgl47jm6bcn8hj101m6ih69mxrka6sz60";};
+zwpagelayout-63074={run="0xl2qyq9037fjxwc6v9hz9gbb5fggqb2x93bibvhdb0bik6iw5md";doc="010120lcnx9d9jj116y6vskch3025jfi4v7xh6nyqlvirsjr4hk1";};
+zx-calculus-60838={run="12i0zskbwky4l81imz83aqi2g1jypy23nwv9fyc3rjlm6aarrzrj";doc="08clr1caznfygq0wqmi0w5955birqaiyvmvz5kjaq6qrzi9rwnns";};
+zxjafbfont-28539={run="1zcyvwsqn2w9x9w79lvi736r2zwrsk2xdk6nrrmkiaq3cakd81p9";doc="0dfh592niw8s6zxmxj1sf8h02s2vz8s2ywd291946bb72xidb4gq";};
+zxjafont-62864={run="0p1zmf0bwd5fpyyz8cwdwc8pnxcqk31570p4722lzwqiplm0azfc";doc="16w7iqlb5zwz8qqyyscmyd0zdzb55n38gf10qd5cra6c161fi7b3";};
+zxjatype-53500={run="1ap4f0yq4cmkz5djy7mpgp32l24jr7xbxd9zc0nv1fvnywxpxfcq";doc="005rr69f433bllggj997rhbwlbmsglaywi55az5j02x0036aj2dd";};
+zztex-55862={run="0qh6a0jgrf1b2363dw66m8v8r0yq2sab2qm3wk008pvvlajdj45w";doc="1agivqj1mqnhv3w70a292pypm2w5xcbf67wwfz3ywaaaq5amjbwq";};
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/generate-fixed-hashes.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/generate-fixed-hashes.nix
new file mode 100644
index 000000000000..532e3c5cfafd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/generate-fixed-hashes.nix
@@ -0,0 +1,41 @@
+with import ../../../../.. { };
+
+with lib; let
+  getFods = drv: lib.optional (isDerivation drv.tex) (drv.tex // { tlType = "run"; })
+    ++ lib.optional (drv ? texdoc) (drv.texdoc // { tlType = "doc"; })
+    ++ lib.optional (drv ? texsource) (drv.texsource // { tlType = "source"; })
+    ++ lib.optional (drv ? tlpkg) (drv.tlpkg // { tlType = "tlpkg"; });
+
+  sorted = sort (a: b: a.pname < b.pname) (attrValues texlive.pkgs);
+  fods = concatMap getFods sorted;
+
+  computeHash = fod: runCommand "${fod.pname}-${fod.tlType}-fixed-hash"
+    { buildInputs = [ nix ]; inherit fod; }
+    ''echo -n "$(nix-hash --base32 --type sha256 "$fod")" >"$out"'';
+
+  hash = fod: fod.outputHash or (builtins.readFile (computeHash fod));
+
+  hashes = fods:
+    concatMapStrings ({ tlType, ... }@p: ''${tlType}="${hash p}";'') fods;
+
+  hashLine = { pname, revision, extraRevision ? "", ... }@drv:
+    let
+      fods = getFods drv;
+      # NOTE: the fixed naming scheme must match default.nix
+      fixedName = "${pname}-${toString revision}${extraRevision}";
+    in
+    optionalString (fods != [ ]) ''
+      ${strings.escapeNixIdentifier fixedName}={${hashes fods}};
+    '';
+in
+{
+  # fixedHashesNix uses 'import from derivation' which does not parallelize well
+  # you should build newHashes first, before evaluating (and building) fixedHashesNix
+  newHashes = map computeHash (filter (fod: ! fod ? outputHash) fods);
+
+  fixedHashesNix = writeText "fixed-hashes.nix"
+    ''
+      {
+      ${concatMapStrings hashLine sorted}}
+    '';
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/make-bin-containers.sh b/nixpkgs/pkgs/tools/typesetting/tex/texlive/make-bin-containers.sh
new file mode 100644
index 000000000000..1d8cbbd4067c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/make-bin-containers.sh
@@ -0,0 +1,60 @@
+# load realpath
+loadables="$(command -v bash)"
+loadables="${loadables%/bin/bash}/lib/bash"
+enable -f "$loadables/realpath" realpath
+mkdir -p "$out/bin"
+
+# find interpreters
+export interpPerl="$(PATH="$HOST_PATH" command -v perl)"
+export interpJava="$(PATH="$HOST_PATH" command -v java || :)"
+export interpWish="$(PATH="$HOST_PATH" command -v wish || :)"
+
+# prepare sed script
+substituteAll "$patchScripts" patch-scripts.sed
+
+for binname in $binfiles ; do
+  # binlinks to be created last, after the other binaries are in place
+  if [[ " $binlinks " == *" $binname "* ]] ; then
+    continue
+  fi
+
+  output="$out/bin/$binname"
+
+  # look for existing binary from bin.*
+  target="$(PATH="$HOST_PATH" command -v "$binname" || :)"
+  if [[ -n "$target" && -x "$target" ]] ; then
+    ln -s "$(realpath "$target")" "$output"
+    continue
+  fi
+
+  # look for scripts
+  # the explicit list of extensions avoid non-scripts such as $binname.cmd, $binname.jar, $binname.pm
+  # the order is relevant: $binname.sh is preferred to other $binname.*
+  for folder in $scriptsFolder ; do
+    for script in "$folder/$binname"{,.sh,.lua,.pl,.py,.rb,.sno,.tcl,.texlua,.tlu}; do
+      if [[ -f "$script" ]] ; then
+        sed -f patch-scripts.sed \
+          -e 's/^scriptname=`basename "\$0"`$/'"scriptname='$(basename "$binname")'/" \
+          -e 's/^scriptname=`basename "\$0" .sh`$'"/scriptname='$(basename "$binname" .sh)'/" \
+          "$script" > "$output"
+        chmod +x "$output"
+        continue 3
+      fi
+    done
+  done
+
+  echo "error: could not find source for 'bin/$binname'" >&2
+  exit 1
+done
+
+# patch shebangs
+patchShebangs "$out/bin"
+
+# generate links
+# we canonicalise the source to avoid symlink chains, and to check that it exists
+cd "$out"/bin
+for alias in $binlinks ; do
+  target="${bintargets%% *}"
+  bintargets="${bintargets#* }"
+  ln -s "$(realpath "$target")" "$out/bin/$alias"
+done
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/patch-scripts.sed b/nixpkgs/pkgs/tools/typesetting/tex/texlive/patch-scripts.sed
new file mode 100644
index 000000000000..c08d765ebd71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/patch-scripts.sed
@@ -0,0 +1,57 @@
+1{
+  /python/{
+    N;
+    # add script folder to path, unless we interfere with a docstring
+    /\nr"""/b skip-python-path-patch
+    s!\n!\nimport sys; sys.path.insert(0,'@scriptsFolder@')\n!
+    :skip-python-path-patch
+  }
+
+  /^#!.*perl/{
+    # add script folder to @INC
+    s!$! -I@scriptsFolder@!
+  }
+
+  /^eval/{
+    # most likely the weird perl shebang
+    N
+    /^eval '(exit \$?0)' && eval 'exec perl -S \$0 \${1+"\$@"}' && eval 'exec perl -S \$0 \$argv:q'\n *if 0;$/{
+      x; s/.*/patching weird perl shebang/; w /dev/stderr
+      x; s|^.*$|#!@interpPerl@ -I@scriptsFolder@|
+    }
+  }
+}
+
+# patch 'exec interpreter'
+/exec java /{
+  x; s/.*/patching exec java/; w /dev/stderr
+  x; s|exec java |exec '@interpJava@' |g
+  /exec ''/{
+    x; s/^.*$/error: java missing from PATH/; w /dev/stderr
+    q 1
+  }
+}
+
+/exec perl /{
+  x; s/.*/patching exec perl/; w /dev/stderr
+  x; s|exec perl |exec @interpPerl@ -I@scriptsFolder@ |g
+  /exec ''/{
+    x; s/^.*$/error: perl missing from PATH/; w /dev/stderr
+    q 1
+  }
+}
+
+/exec wish /{
+  x; s/.*/patching exec wish/; w /dev/stderr
+  x; s|exec wish |exec '@interpWish@' |g
+  /exec ''/{
+    x; s/^.*$/error: wish missing from PATH/; w /dev/stderr
+    q 1
+  }
+}
+
+# make jar wrappers work without kpsewhich
+s!^jarpath=`kpsewhich --progname=[^ ]* --format=texmfscripts \([^ ]*\)`$!jarpath=@scriptsFolder@/\1!g
+
+# replace CYGWIN grep test with bash builtin
+s!echo "$kernel" | grep CYGWIN >/dev/null;![[ "$kernel" == *CYGWIN* ]]!g
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/texlinks.diff b/nixpkgs/pkgs/tools/typesetting/tex/texlive/texlinks.diff
new file mode 100644
index 000000000000..97770cc812f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/texlinks.diff
@@ -0,0 +1,9 @@
+@@ -157,7 +157,7 @@
+       verbose_echo "skipped ConTeXtish symlink $src -> $dest (special case)"
+       ;;
+     *)
+-      test ! -f "$src" &&
++      test "x$src" != "x`(ls -ld $src | awk '{print $NF}') 2>/dev/null`" &&
+         rm -f "$src"
+   
+       if test -f "$src"; then
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/tl2nix.sed b/nixpkgs/pkgs/tools/typesetting/tex/texlive/tl2nix.sed
new file mode 100644
index 000000000000..244f8fbcc15f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/tl2nix.sed
@@ -0,0 +1,181 @@
+# wrap whole file into an attrset
+1i{ # no indentation
+$a}
+
+# extract repository metadata
+/^name 00texlive\.config$/,/^$/{
+  s/^name (.*)$/"\1" = {/p
+  /^$/,1i};
+
+  s!^depend frozen/0$!  frozen = false;!p
+  s!^depend frozen/1$!  frozen = true;!p
+  s!^depend release/(.*)$!  year = \1;!p
+  s!^depend revision/(.*)$!  revision = \1;!p
+}
+
+# form an attrmap per package
+# ignore packages whose name contains "." (such as binaries) except for texlive.infra
+/^name ([^.]+|texlive\.infra)$/,/^$/{
+  # quote invalid names
+  s/^name ([0-9].*|texlive\.infra)$/"\1" = {/p
+  s/^name (.*)$/\1 = {/p
+
+  # extract revision
+  s/^revision ([0-9]*)$/  revision = \1;/p
+
+  # extract hashes of *.tar.xz
+  s/^containerchecksum (.*)/  sha512.run = "\1";/p
+  s/^doccontainerchecksum (.*)/  sha512.doc = "\1";/p
+  s/^srccontainerchecksum (.*)/  sha512.source = "\1";/p
+
+  # number of path components to strip, defaulting to 1 ("texmf-dist/")
+  /^relocated 1/i\  stripPrefix = 0;
+
+  # extract version and clean unwanted chars from it
+  /^catalogue-version/y/ \/~/_--/
+  /^catalogue-version/s/[\#,:\(\)]//g
+  s/^catalogue-version_(.*)/  version = "\1";/p
+
+  /^catalogue-license/{
+    # wrap licenses in quotes
+    s/ ([^ ]+)/ "\1"/g
+    # adjust naming as in nixpkgs, the full texts of the licenses are available at https://www.ctan.org/license/${licenseName}
+    s/"(cc-by(-sa)?-[1-4])"/"\10"/g
+    s/"apache2"/"asl20"/g
+    s/"artistic"/"artistic1-cl8"/g
+    s/"bsd"/"bsd3"/g          # license text does not match exactly, but is pretty close
+    s/"bsd4"/"bsdOriginal"/g
+    s/"collection"/"free"/g   # used for collections of individual packages with distinct licenses. As TeXlive only contains free software, we can use "free" as a catchall
+    s/"fdl"/"fdl13Only"/g
+    s/"gpl1?"/"gpl1Only"/g
+    s/"gpl2\+"/"gpl2Plus"/g
+    s/"gpl3\+"/"gpl3Plus"/g
+    s/"lgpl"/"lgpl2"/g
+    s/"lgpl2\.1"/"lgpl21"/g
+    s/"lppl"/"lppl13c"/g      # not used consistently, sometimes "lppl" refers to an older version of the license
+    s/"lppl1\.2"/"lppl12"/g
+    s/"lppl1\.3"/"lppl13c"/g  # If a work refers to LPPL 1.3 as its license, this is interpreted as the latest version of the 1.3 license (https://www.latex-project.org/lppl/)
+    s/"lppl1\.3a"/"lppl13a"/g
+    s/"lppl1\.3c"/"lppl13c"/g
+    s/"other-free"/"free"/g
+    s/"opl"/"opubl"/g
+    s/"pd"/"publicDomain"/g
+
+    s/^catalogue-license (.*)/  license = [ \1 ];/p
+  }
+
+  # extract deps
+  /^depend ([^.]+|texlive\.infra)$/{
+    # open a list
+    i\  deps = [
+
+    # loop through following depend lines
+    :next-dep
+      s/^\n?depend ([^.]+|texlive\.infra)$/    "\1"/p # print dep
+      s/^.*$//                                        # clear pattern space
+      N; /^\ndepend /b next-dep
+
+    # close the list
+    i\  ];
+    D # restart cycle from the current line
+  }
+
+  # detect presence of notable files
+  /^docfiles /{
+    s/^.*$//  # ignore the first line
+
+    # read all files
+    :next-doc
+      N
+      s/\n / /   # remove newline
+      t next-doc # loop if the previous lines matched
+
+    / (texmf-dist|RELOC)\/doc\/man\//i\  hasManpages = true;
+    / (texmf-dist|RELOC)\/doc\/info\//i\  hasInfo = true;
+
+    D # restart cycle
+  }
+
+  /^runfiles /{
+    s/^.*$//  # ignore the first line
+
+    # read all files
+    :next-file
+      N
+      s/\n / /    # remove newline
+      t next-file # loop if previous line matched
+    s/\n/ \n/     # add space before last newline for accurate matching below
+
+    / (RELOC|texmf-dist)\//i\  hasRunfiles = true;
+    / tlpkg\//i\  hasTlpkg = true;
+
+    # extract script extensions
+    / texmf-dist\/scripts\/.*\.(jar|lua|py|rb|sno|tcl|texlua|tlu) /{
+      i\  scriptExts = [
+        / texmf-dist\/scripts\/.*\.jar /i\    "jar"
+        / texmf-dist\/scripts\/.*\.lua /i\    "lua"
+        / texmf-dist\/scripts\/.*\.py /i\    "py"
+        / texmf-dist\/scripts\/.*\.rb /i\    "rb"
+        / texmf-dist\/scripts\/.*\.sno /i\    "sno"
+        / texmf-dist\/scripts\/.*\.tcl /i\    "tcl"
+        / texmf-dist\/scripts\/.*\.texlua /i\    "texlua"
+        / texmf-dist\/scripts\/.*\.tlu /i\    "tlu"
+      i\  ];
+    }
+
+    D # restart cycle from the current line
+  }
+
+  # extract postaction scripts (right now, at most one per package, so a string suffices)
+  s/^postaction script file=(.*)$/  postactionScript = "\1";/p
+
+  # extract hyphenation patterns and formats
+  # (this may create duplicate lines, use uniq to remove them)
+  /^execute\sAddHyphen/i\  hasHyphens = true;
+
+  # extract format details
+  /^execute\sAddFormat\s/{
+    # open a list
+    i\  formats = [
+
+    # create one attribute set per format
+    # note that format names are not unique
+
+    # plain keys: name, engine, patterns
+    # optionally double quoted key: options
+    # boolean key: mode (enabled/disabled)
+    # comma-separated lists: fmttriggers, patterns
+    :next-fmt
+      s/(^|\n)execute\sAddFormat/    {/
+      s/\s+options="([^"]+)"/\n      options = "\1";/
+      s/\s+(name|engine|options)=([^ \t\n]+)/\n      \1 = "\2";/g
+      s/\s+mode=enabled//
+      s/\s+mode=disabled/\n      enabled = false;/
+      s/\s+(fmttriggers|patterns)=([^ \t\n]+)/\n      \1 = [ "\2" ];/g
+      s/$/\n    }/
+
+      :split-triggers
+        s/"([^,]+),([^"]+)" ]/"\1" "\2" ]/;
+        t split-triggers   # repeat until there are no commas
+
+      p
+      s/^.*$// # clear pattern space
+      N
+      /^\nexecute\sAddFormat\s/b next-fmt
+
+    # close the list
+    i\  ];
+    D # restart cycle from the current line
+  }
+
+  # close attrmap
+  /^$/i};
+}
+
+# add list of binaries from one of the architecture-specific packages
+/^name ([^.]+|texlive\.infra)\.x86_64-linux$/,/^$/{
+  s/^name ([0-9].*|texlive\.infra)\.x86_64-linux$/"\1".binfiles = [/p
+  s/^name (.*)\.x86_64-linux$/\1.binfiles = [/p
+  s!^ bin/x86_64-linux/(.+)$!  "\1"!p
+  /^$/i];
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/tlpdb-overrides.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/tlpdb-overrides.nix
new file mode 100644
index 000000000000..5ee4d4d6a79f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/tlpdb-overrides.nix
@@ -0,0 +1,425 @@
+{ stdenv, lib, tlpdb, bin, tlpdbxz, tl
+, installShellFiles
+, coreutils, findutils, gawk, getopt, ghostscript_headless, gnugrep
+, gnumake, gnupg, gnused, gzip, html-tidy, ncurses, perl, python3, ruby, zip
+}:
+
+oldTlpdb:
+
+let
+  tlpdbVersion = tlpdb."00texlive.config";
+
+    # most format -> engine links are generated by texlinks according to fmtutil.cnf at combine time
+    # so we remove them from binfiles, and add back the ones texlinks purposefully ignore (e.g. mptopdf)
+    removeFormatLinks = lib.mapAttrs (_: attrs:
+      if (attrs ? formats && attrs ? binfiles)
+      # TLPDB reports erroneously that various metafont binaries like "mf" are format links to engines
+      # like "mf-nowin"; core-big provides both binaries and links so we simply skip them here
+      then let formatLinks = lib.catAttrs "name" (lib.filter (f: f.name != f.engine && ! lib.hasSuffix "-nowin" f.engine) attrs.formats);
+               binNotFormats = lib.subtractLists formatLinks attrs.binfiles;
+           in if binNotFormats != [] then attrs // { binfiles = binNotFormats; } else removeAttrs attrs [ "binfiles" ]
+      else attrs);
+
+    orig = removeFormatLinks (removeAttrs oldTlpdb [ "00texlive.config" ]);
+
+in lib.recursiveUpdate orig rec {
+  #### overrides of texlive.tlpdb
+
+  #### nonstandard script folders
+  context.scriptsFolder = "context/stubs-mkiv/unix";
+  context-legacy.scriptsFolder = "context/stubs/unix";
+  cyrillic-bin.scriptsFolder = "texlive-extra";
+  fontinst.scriptsFolder = "texlive-extra";
+  mptopdf.scriptsFolder = "context/perl";
+  pdftex.scriptsFolder = "simpdftex";
+  texlive-scripts.scriptsFolder = "texlive";
+  texlive-scripts-extra.scriptsFolder = "texlive-extra";
+  xetex.scriptsFolder = "texlive-extra";
+
+  #### interpreters not detected by looking at the script extensions
+  ctanbib.extraBuildInputs = [ bin.luatex ];
+  de-macro.extraBuildInputs = [ python3 ];
+  match_parens.extraBuildInputs = [ ruby ];
+  optexcount.extraBuildInputs = [ python3 ];
+  pdfbook2.extraBuildInputs = [ python3 ];
+  texlogsieve.extraBuildInputs = [ bin.luatex ];
+
+  #### perl packages
+  crossrefware.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ LWP URI ])) ];
+  ctan-o-mat.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ LWP LWPProtocolHttps ])) ];
+  ctanify.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileCopyRecursive ])) ];
+  ctanupload.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ HTMLFormatter WWWMechanize ])) ];
+  exceltex.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ SpreadsheetParseExcel ])) ];
+  latex-git-log.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ IPCSystemSimple ])) ];
+  latexindent.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileHomeDir LogDispatch LogLog4perl UnicodeLineBreak YAMLTiny ])) ];
+  pax.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileWhich ])) ];
+  ptex-fontmaps.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ Tk ])) ];
+  purifyeps.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ FileWhich ])) ];
+  svn-multi.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ TimeDate ])) ];
+  texdoctk.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ Tk ])) ];
+  ulqda.extraBuildInputs = [ (perl.withPackages (ps: with ps; [ DigestSHA1 ])) ];
+
+  #### python packages
+  pythontex.extraBuildInputs = [ (python3.withPackages (ps: with ps; [ pygments ])) ];
+
+  #### other runtime PATH dependencies
+  a2ping.extraBuildInputs = [ ghostscript_headless ];
+  bibexport.extraBuildInputs = [ gnugrep ];
+  checklistings.extraBuildInputs = [ coreutils ];
+  cjk-gs-integrate.extraBuildInputs = [ ghostscript_headless ];
+  context.extraBuildInputs = [ coreutils ];
+  context-legacy.extraBuildInputs = [ ruby ];
+  cyrillic-bin.extraBuildInputs = [ coreutils gnused ];
+  dtxgen.extraBuildInputs = [ coreutils getopt gnumake zip ];
+  dviljk.extraBuildInputs = [ coreutils ];
+  epspdf.extraBuildInputs = [ ghostscript_headless ];
+  epstopdf.extraBuildInputs = [ ghostscript_headless ];
+  fragmaster.extraBuildInputs = [ ghostscript_headless ];
+  installfont.extraBuildInputs = [ coreutils getopt gnused ];
+  latexfileversion.extraBuildInputs = [ coreutils gnugrep gnused ];
+  listings-ext.extraBuildInputs = [ coreutils getopt ];
+  ltxfileinfo.extraBuildInputs = [ coreutils getopt gnused ];
+  ltximg.extraBuildInputs = [ ghostscript_headless ];
+  luaotfload.extraBuildInputs = [ ncurses ];
+  makeindex.extraBuildInputs = [ coreutils gnused ];
+  pagelayout.extraBuildInputs = [ gnused ncurses ];
+  pdfcrop.extraBuildInputs = [ ghostscript_headless ];
+  pdftex.extraBuildInputs = [ coreutils ghostscript_headless gnused ];
+  pdftex-quiet.extraBuildInputs = [ coreutils ];
+  pdfxup.extraBuildInputs = [ coreutils ghostscript_headless ];
+  pkfix-helper.extraBuildInputs = [ ghostscript_headless ];
+  ps2eps.extraBuildInputs = [ ghostscript_headless ];
+  pst2pdf.extraBuildInputs = [ ghostscript_headless ];
+  tex4ebook.extraBuildInputs = [ html-tidy ];
+  texlive-scripts.extraBuildInputs = [ gnused ];
+  texlive-scripts-extra.extraBuildInputs = [ coreutils findutils ghostscript_headless gnused ];
+  thumbpdf.extraBuildInputs = [ ghostscript_headless ];
+  tpic2pdftex.extraBuildInputs = [ gawk ];
+  wordcount.extraBuildInputs = [ coreutils gnugrep ];
+  xdvi.extraBuildInputs = [ coreutils gnugrep ];
+  xindy.extraBuildInputs = [ gzip ];
+
+  #### adjustments to binaries
+  # TODO patch the scripts from bin.* directly in bin.* instead of here
+
+  # mptopdf is a format link, but not generated by texlinks
+  # so we add it back to binfiles to generate it from mkPkgBin
+  mptopdf.binfiles = (orig.mptopdf.binfiles or []) ++ [ "mptopdf" ];
+
+  # remove man
+  texlive-scripts.binfiles = lib.remove "man" orig.texlive-scripts.binfiles;
+  # xindy is broken on some platforms unfortunately
+  xindy.binfiles = if bin ? xindy
+    then lib.subtractLists [ "xindy.mem" "xindy.run" ] orig.xindy.binfiles
+    else [];
+
+  #### additional symlinks
+  cluttex.binlinks = {
+    cllualatex = "cluttex";
+    clxelatex = "cluttex";
+  };
+
+  context.binlinks = {
+    context = "luametatex";
+    "context.lua" = tl.context.tex + "/scripts/context/lua/context.lua";
+    mtxrun = "luametatex";
+    "mtxrun.lua" = tl.context.tex + "/scripts/context/lua/mtxrun.lua";
+  };
+
+  epstopdf.binlinks.repstopdf = "epstopdf";
+  pdfcrop.binlinks.rpdfcrop = "pdfcrop";
+
+  # TODO: handle symlinks in bin.core
+  ptex.binlinks = {
+    pbibtex = tl.uptex + "/bin/upbibtex";
+    pdvitype = tl.uptex + "/bin/updvitype";
+    ppltotf = tl.uptex + "/bin/uppltotf";
+    ptftopl = tl.uptex + "/bin/uptftopl";
+  };
+
+  texdef.binlinks = {
+    latexdef = "texdef";
+  };
+
+  texlive-scripts.binlinks = {
+    mktexfmt = "fmtutil";
+    texhash = tl."texlive.infra" + "/bin/mktexlsr";
+  };
+
+  texlive-scripts-extra.binlinks = {
+    allec = "allcm";
+    kpsepath = "kpsetool";
+    kpsexpand = "kpsetool";
+  };
+
+  #### add PATH dependencies without wrappers
+  # TODO deduplicate this code
+  a2ping.postFixup = ''
+    sed -i '6i$ENV{PATH}='"'"'${lib.makeBinPath a2ping.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/a2ping
+  '';
+
+  bibexport.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath bibexport.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/bibexport
+  '';
+
+  checklistings.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath checklistings.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/checklistings
+  '';
+
+  cjk-gs-integrate.postFixup = ''
+    sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath cjk-gs-integrate.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/cjk-gs-integrate
+  '';
+
+  context.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath context.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/{contextjit,mtxrunjit}
+  '';
+
+  context-legacy.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath context-legacy.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/texexec
+  '';
+
+  cyrillic-bin.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath cyrillic-bin.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/rumakeindex
+  '';
+
+  dtxgen.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath dtxgen.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/dtxgen
+  '';
+
+  dviljk.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath dviljk.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/dvihp
+  '';
+
+  epstopdf.postFixup = ''
+    sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath epstopdf.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/epstopdf
+  '';
+
+  fragmaster.postFixup = ''
+    sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath fragmaster.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/fragmaster
+  '';
+
+  installfont.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath installfont.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/installfont-tl
+  '';
+
+  latexfileversion.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath latexfileversion.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/latexfileversion
+  '';
+
+  listings-ext.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath listings-ext.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/listings-ext.sh
+  '';
+
+  ltxfileinfo.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath ltxfileinfo.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/ltxfileinfo
+  '';
+
+  ltximg.postFixup = ''
+    sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath ltximg.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/ltximg
+  '';
+
+  luaotfload.postFixup = ''
+    sed -i '2ios.setenv("PATH","${lib.makeBinPath luaotfload.extraBuildInputs}" .. (os.getenv("PATH") and ":" .. os.getenv("PATH") or ""))' "$out"/bin/luaotfload-tool
+  '';
+
+  makeindex.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath makeindex.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/mkindex
+  '';
+
+  pagelayout.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath [ gnused ]}''${PATH:+:$PATH}"' "$out"/bin/pagelayoutapi
+    sed -i '2iPATH="${lib.makeBinPath [ ncurses ]}''${PATH:+:$PATH}"' "$out"/bin/textestvis
+  '';
+
+  pdfcrop.postFixup = ''
+    sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath pdfcrop.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/pdfcrop
+  '';
+
+  pdftex.postFixup = ''
+    sed -i -e '2iPATH="${lib.makeBinPath [ coreutils gnused ]}''${PATH:+:$PATH}"' \
+      -e 's!^distillerpath="/usr/local/bin"$!distillerpath="${lib.makeBinPath [ ghostscript_headless ]}"!' \
+      "$out"/bin/simpdftex
+  '';
+
+  pdftex-quiet.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath pdftex-quiet.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/pdftex-quiet
+  '';
+
+  pdfxup.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath pdfxup.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/pdfxup
+  '';
+
+  pkfix-helper.postFixup = ''
+    sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath pkfix-helper.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/pkfix-helper
+  '';
+
+  ps2eps.postFixup = ''
+    sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath ps2eps.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/ps2eps
+  '';
+
+  pst2pdf.postFixup = ''
+    sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath pst2pdf.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/pst2pdf
+  '';
+
+  tex4ebook.postFixup = ''
+    sed -i '2ios.setenv("PATH","${lib.makeBinPath tex4ebook.extraBuildInputs}" .. (os.getenv("PATH") and ":" .. os.getenv("PATH") or ""))' "$out"/bin/tex4ebook
+  '';
+
+  texlive-scripts.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath texlive-scripts.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/{fmtutil-user,mktexmf,mktexpk,mktextfm,updmap-user}
+  '';
+
+  thumbpdf.postFixup = ''
+    sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath thumbpdf.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/thumbpdf
+  '';
+
+  tpic2pdftex.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath tpic2pdftex.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/tpic2pdftex
+  '';
+
+  wordcount.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath wordcount.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/wordcount
+  '';
+
+  # TODO patch in bin.xdvi
+  xdvi.postFixup = ''
+    sed -i '2iPATH="${lib.makeBinPath xdvi.extraBuildInputs}''${PATH:+:$PATH}"' "$out"/bin/xdvi
+  '';
+
+  xindy.postFixup = ''
+    sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath xindy.extraBuildInputs}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/{texindy,xindy}
+  '';
+
+  #### other script fixes
+  # wrong $0 expectations
+  bibcop.postFixup = ''
+    substituteInPlace "$out"/bin/bibcop --replace "basename(\$0) eq 'bibcop.pl'" "basename(\$0) eq 'bibcop'"
+  '';
+
+  # misc tab and python3 fixes
+  ebong.postFixup = ''
+    sed -Ei 's/import sre/import re/; s/file\(/open(/g; s/\t/        /g; s/print +(.*)$/print(\1)/g' "$out"/bin/ebong
+  '';
+
+  # find files in script directory, not binary directory
+  # add runtime dependencies to PATH
+  epspdf.postFixup = ''
+    sed -i '2ios.setenv("PATH","${lib.makeBinPath epspdf.extraBuildInputs}" .. (os.getenv("PATH") and ":" .. os.getenv("PATH") or ""))' "$out"/bin/epspdf
+    substituteInPlace "$out"/bin/epspdftk --replace '[info script]' "\"$scriptsFolder/epspdftk.tcl\""
+  '';
+
+  # find files in script directory, not in binary directory
+  latexindent.postFixup = ''
+    substituteInPlace "$out"/bin/latexindent --replace 'use FindBin;' "BEGIN { \$0 = '$scriptsFolder' . '/latexindent.pl'; }; use FindBin;"
+  '';
+
+  # flag lua dependency
+  texblend.scriptExts = [ "lua" ];
+
+  # Patch texlinks.sh back to 2015 version;
+  # otherwise some bin/ links break, e.g. xe(la)tex.
+  # add runtime dependencies to PATH
+  texlive-scripts-extra.postFixup = ''
+    patch -R "$out"/bin/texlinks < '${./texlinks.diff}'
+    sed -i '2iPATH="${lib.makeBinPath [ coreutils ]}''${PATH:+:$PATH}"' "$out"/bin/{allcm,dvired,mkocp,ps2frag}
+    sed -i '2iPATH="${lib.makeBinPath [ coreutils findutils ]}''${PATH:+:$PATH}"' "$out"/bin/allneeded
+    sed -i '2iPATH="${lib.makeBinPath [ coreutils ghostscript_headless ]}''${PATH:+:$PATH}"' "$out"/bin/dvi2fax
+    sed -i '2iPATH="${lib.makeBinPath [ gnused ]}''${PATH:+:$PATH}"' "$out"/bin/{kpsetool,texconfig,texconfig-sys}
+    sed -i '2iPATH="${lib.makeBinPath [ coreutils gnused ]}''${PATH:+:$PATH}"' "$out"/bin/texconfig-dialog
+  '';
+
+  # patch interpreter
+  texosquery.postFixup = ''
+    substituteInPlace "$out"/bin/* --replace java "$interpJava"
+  '';
+
+  # hardcode revision numbers (since texlive.infra, tlshell are not in either system or user texlive.tlpdb)
+  tlshell.postFixup = ''
+    substituteInPlace "$out"/bin/tlshell \
+      --replace '[dict get $::pkgs texlive.infra localrev]' '${toString orig."texlive.infra".revision}' \
+      --replace '[dict get $::pkgs tlshell localrev]' '${toString orig.tlshell.revision}'
+  '';
+
+  #### dependency changes
+  # it seems to need it to transform fonts
+  xdvi.deps = (orig.xdvi.deps or []) ++  [ "metafont" ];
+
+  # remove dependency-heavy packages from the basic collections
+  collection-basic.deps = lib.subtractLists [ "metafont" "xdvi" ] orig.collection-basic.deps;
+
+  # add them elsewhere so that collections cover all packages
+  collection-metapost.deps = orig.collection-metapost.deps ++ [ "metafont" ];
+  collection-plaingeneric.deps = orig.collection-plaingeneric.deps ++ [ "xdvi" ];
+
+  #### misc
+
+  # RISC-V: https://github.com/LuaJIT/LuaJIT/issues/628
+  luajittex.binfiles = lib.optionals
+    (!(stdenv.hostPlatform.isPower && stdenv.hostPlatform.is64bit) && !stdenv.hostPlatform.isRiscV)
+    orig.luajittex.binfiles;
+
+  # tlpdb lists license as "unknown", but the README says lppl13: http://mirrors.ctan.org/language/arabic/arabi-add/README
+  arabi-add.license = [  "lppl13c" ];
+
+  texdoc = {
+    extraRevision = "-tlpdb${toString tlpdbVersion.revision}";
+    extraVersion = "-tlpdb-${toString tlpdbVersion.revision}";
+
+    extraNativeBuildInputs = [ installShellFiles ];
+
+    # build Data.tlpdb.lua (part of the 'tlType == "run"' package)
+    postUnpack = ''
+      if [[ -f "$out"/scripts/texdoc/texdoc.tlu ]]; then
+        unxz --stdout "${tlpdbxz}" > texlive.tlpdb
+
+        # create dummy doc file to ensure that texdoc does not return an error
+        mkdir -p support/texdoc
+        touch support/texdoc/NEWS
+
+        TEXMFCNF="${tl.kpathsea.tex}/web2c" TEXMF="$out" TEXDOCS=. TEXMFVAR=. \
+          "${bin.luatex}"/bin/texlua "$out"/scripts/texdoc/texdoc.tlu \
+          -c texlive_tlpdb=texlive.tlpdb -lM texdoc
+
+        cp texdoc/cache-tlpdb.lua "$out"/scripts/texdoc/Data.tlpdb.lua
+      fi
+    '';
+
+    # install zsh completion
+    postFixup = ''
+      TEXMFCNF="${tl.kpathsea.tex}"/web2c TEXMF="$scriptsFolder/../.." \
+        texlua "$out"/bin/texdoc --print-completion zsh > "$TMPDIR"/_texdoc
+      substituteInPlace "$TMPDIR"/_texdoc \
+        --replace 'compdef __texdoc texdoc' '#compdef texdoc' \
+        --replace '$(kpsewhich -var-value TEXMFROOT)/tlpkg/texlive.tlpdb' '$(kpsewhich Data.tlpdb.lua)' \
+        --replace '/^name[^.]*$/ {print $2}' '/^  \["[^"]*"\] = {$/ { print substr($1,3,length($1)-4) }'
+      echo '__texdoc' >> "$TMPDIR"/_texdoc
+      installShellCompletion --zsh "$TMPDIR"/_texdoc
+    '';
+  };
+
+  "texlive.infra" = {
+    extraRevision = ".tlpdb${toString tlpdbVersion.revision}";
+    extraVersion = "-tlpdb-${toString tlpdbVersion.revision}";
+
+    # add license of tlmgr and TeXLive::* perl packages and of bin.core
+    license = [ "gpl2Plus" ] ++ lib.toList bin.core.meta.license.shortName ++ orig."texlive.infra".license or [ ];
+
+    scriptsFolder = "texlive";
+    extraBuildInputs = [ coreutils gnused gnupg tl.kpathsea (perl.withPackages (ps: with ps; [ Tk ])) ];
+
+    # make tlmgr believe it can use kpsewhich to evaluate TEXMFROOT
+    postFixup = ''
+      substituteInPlace "$out"/bin/tlmgr \
+        --replace 'if (-r "$bindir/$kpsewhichname")' 'if (1)'
+      sed -i '2i$ENV{PATH}='"'"'${lib.makeBinPath [ gnupg ]}'"'"' . ($ENV{PATH} ? ":$ENV{PATH}" : '"'''"');' "$out"/bin/tlmgr
+      sed -i '2iPATH="${lib.makeBinPath [ coreutils gnused tl.kpathsea ]}''${PATH:+:$PATH}"' "$out"/bin/mktexlsr
+    '';
+
+    # add minimal texlive.tlpdb
+    postUnpack = ''
+      if [[ "$tlType" == "tlpkg" ]] ; then
+        xzcat "${tlpdbxz}" | sed -n -e '/^name \(00texlive.config\|00texlive.installation\)$/,/^$/p' > "$out"/texlive.tlpdb
+      fi
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/tlpdb.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/tlpdb.nix
new file mode 100644
index 000000000000..7685359a3a23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/tlpdb.nix
@@ -0,0 +1,48001 @@
+{ # no indentation
+"00texlive.config" = {
+  frozen = false;
+  year = 2023;
+  revision = 69413;
+};
+"12many" = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "57a177b65450718631f36bfd8db0f2d1bff788f3bf147137b6412714cc945c7e08832f14f9e7e659adf7e072a91f13a2ea27fe3161cd9b60313bc956f1f543c6";
+  sha512.doc = "9ce7fdae151a116ef6b22943bcbd1e94b90862baa5d50f54a00105d1f2d623f75a2e1440c3c49c560e2e6c5baddb8a6772753f400165b63a90a84f540e3fa381";
+  sha512.source = "f007dcaccb364964a73da6a09db5e6a25ee401d8108b19021b67023af273f486392cef6a0b01e951e9fa885304d0e157b919cbd6abc472a96dfbbb0f432b8530";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+"2up" = {
+  revision = 55076;
+  stripPrefix = 0;
+  sha512.run = "6408d1d99a97df71640bcdde4133edc2e5861bbcdc8c5e1be98d5704f7ecf9c043c5538ea19ac4952d811e3677ee0698bdd477eadbd1068725bdb210787d9dbc";
+  sha512.doc = "3375cfbd95412f2fde2bdb9171b1c081890a52168d0c6d0f0dfb0ad914117c79291a56bc97602627a698509635765fd5e6e95387a006039178e440a8bea24837";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3a";
+};
+a0poster = {
+  revision = 54071;
+  stripPrefix = 0;
+  sha512.run = "038623ef39540340a9c9de228ff0787512fb34916ee5a250dbc6d9327b9249d51c633b8ed0dd725c90db462ed7c96290ea7d6fd60e299e787d0e5cf585efb5f5";
+  sha512.doc = "51e01cf36d4ec625bdc68e586d276e09973dcfe30cd9ba2aa7dbeed73337bea03a222d66a6903e5203e1530d88433d326d38ff66896c52ac33587a3d147cc2e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.22b";
+};
+a2ping = {
+  revision = 52964;
+  sha512.run = "4008c18f93a7d378c8da20bad7c1fdf19c3e6befccdcc804326168854fcd35bb89fe414b30a26dbddeaf81a11c0d404bf5b5459bd3d8adce49dc30279e3bd420";
+  sha512.doc = "7a7b6474819b2715c131485472963b463163378d4ae4ac586f17a130b3327c6dda1f4132f4f2379388a8a493fb2374abfff6b7ad87513cbe9d04993572692aeb";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.84p";
+};
+a2ping.binfiles = [
+  "a2ping"
+];
+a4wide = {
+  revision = 20943;
+  stripPrefix = 0;
+  sha512.run = "e0f1f95bf660760683d6c5a917d75e537a0347837eb4388eded8194c6ca5371b2ad9be9829fcaaff1e24b7d8baefd287db6add752c19a57a6cf0737017e311e3";
+  sha512.doc = "bf059462ec7e28ba782d5842d090c93f4e911bdf44eb3d4f184a7324b454105295460a52414ffcb9fc71dceeba902b1d78ba208d0998f71727ad41299eb1138f";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+a5comb = {
+  revision = 17020;
+  stripPrefix = 0;
+  sha512.run = "443548964eb48ec458942e97f0d6ceb698050a5d4dc83ad17a71db0f1d5085a2c8e73c3e8d9bdbb7ab7e6328d12e42a6ec05c4c7dd4247717f295fcd5da66423";
+  sha512.doc = "ee845d8b6a21271d2f0e4e6fd24c79a1235d24ba15cc2d037eb41761b05ad3e69dcb5379c223c07b81c62df5f89190c84ff977390e149566710ce7175e4c2823";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "4";
+};
+aaai-named = {
+  revision = 52470;
+  stripPrefix = 0;
+  sha512.run = "bb851e6bb3d9c2efd8d9abd32056d0853e320ee7f495b3c595d6a112d5e66bdbcb24107f741249fdfde350dead6763484cc412d380188d29155649b4076c4e77";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+aalok = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "03d1585e9b92e26044066d1f5b8d2dec0ad298627cc94fc1ab11e45307f62c573934f1a2cae6c5318a9cb377834d4f5a490144cc07bdebd9dc22cf298315630b";
+  sha512.doc = "702145c708edf984d24153822036acc0b563038c50423af0cd3cc6b008b7eb3bc8d67eddaac350ac6557650177218260e5adfaf0ca5807130b0e23ec7127470d";
+  sha512.source = "b452ccf38dfb3436aa8a6907798101621fb2f5a66077cc24b316760013b0e665ef26d69b444c27cc8521dd6c06828be8a832e061df74bdcc70577f262ae987c3";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "free" "fdl13Only" ];
+  version = "0.6";
+};
+aastex = {
+  revision = 58057;
+  stripPrefix = 0;
+  sha512.run = "9ae52d4142c12621839945213d1f20531350b27f0b1d124d5d5c1bae81d50fbe83ab116d0c65c25852952415eb860eaaf008c119cc10cdb149b964f0b06ad6d0";
+  sha512.doc = "bce30656a98d3598312ff399b5e5eb229b89e7e62521748418be718c38c6749a8e9737f6c933f6f32ec948e3ebe1ef339ba9037908741c3b902d33a8fda9b027";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.3.1";
+};
+abbr = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4b5d504cc9438ceb97a6935e66a6eaeb494eb76eb313bed275b1f1a829690569972feec048132e12b5849f398d0a4b291bc5f9ce8462031846ec46bc88ebab3c";
+  sha512.doc = "7080dea132581fdb0803b4ecfdcf4fd5ed5a689bd7e0c7b7b699ef5b3faeab908042f1704cb553ce38e7f37d9facf7d22a74ac71e2cbd269298f35666367f41a";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+abc = {
+  revision = 41157;
+  stripPrefix = 0;
+  sha512.run = "8b1ccd152ed2ad90810551a36f0fa7f114625784fa967f70b67559f9f1e8eb32d7edd08efc9e55dd92723df4039d1bdcc212200d712e99f27de84a153c2a3777";
+  sha512.doc = "5f127f8e1ec104b40ac4d5e9bb22965e9376033892362073cdea9f65f1f10a4152f237b4f27bf52dbbe1389f59d3da673434c39a2b3f43d6f17aa60caabd5584";
+  sha512.source = "e47ba563a1018edfad97fb0556e4f74c7f3054a56c38304d9a188a92b51554628430332b4e66ebf1d12eb4ec6719cc13d7ea62c23157e70a3c0d40e172b9a04c";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.0b";
+};
+abnt = {
+  revision = 55471;
+  stripPrefix = 0;
+  sha512.run = "66931af2a5ab583914ea5abe6bb9668d04442c23ab654691e3864ecfaeecf65e3eda47b3d279abb9fdacb385ef9922d6caab808273f87f3bf323a33b441b7bd1";
+  sha512.doc = "0a46414ec99e14a60a167ec7ca09d074c802f4232cbd4204e52e9d489edb3b1657c7f33f0a3fd0bbaa09f624cb52903b8a18db43f54c7a1b0aef8c804b53b1b7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+abntex2 = {
+  revision = 49248;
+  stripPrefix = 0;
+  sha512.run = "951c039cf0c97a6bd3974bd01ed9323876f1ee74b8250037dce3e92e00d598ab1cb2cfd0bbf4ea6d37b5f8c3e1095e531aa245ad1a91ee49262e6f99c5c84e59";
+  sha512.doc = "b6a5871cc33d94c1294a62aeb809f9d29ccf021cff510497c02edbaef2f155a55847dc521a0f698367692e556b2c588a95066bd3097482b0477a67d4a78b7489";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9.7";
+};
+abntexto = {
+  revision = 68837;
+  stripPrefix = 0;
+  sha512.run = "9fb1177d1e97995fa8c7038e38fb827e491c2658af6844f62edb547f281120a9df873a98e509d3e67c577d46472c887ca96ce2e2436f748cba9086c6160f2986";
+  sha512.doc = "3d3d58d077f3072e9bfd9bc11e68e17e4885af88864ef80de1010c331c429895c5e03df438d3a0652a8d31623dde5b1cb40daf0a709af6c3a2e90658d13c596c";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "3.1.0-beta";
+};
+aboensis = {
+  revision = 62977;
+  stripPrefix = 0;
+  sha512.run = "74f569d7f8b942087285964f350e97b15de05a69a09b1aa21d3bee09a017381d4b18b449a55aafcd0009a5941f0bea198b04947a81b331541af6617d5a58ad73";
+  sha512.doc = "84317ef83e712296819b25926adb7522531482b9d17d807cdfd3897f712aae8a8f161a242bffdbe7511478a3e5ec2c1e76fcf51c14661b3465aabbc6b95bbaf2";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" "cc-by-40" "publicDomain" ];
+};
+abraces = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "ca6061935e6be1089592f77612de222313e41b8f78f0f14bfc06a8823da052543cf6ef0cb95c585698a8a07b5d3c2954909d85ee2ed300c8602574d34ede2892";
+  sha512.doc = "84c9a8585ec4cd16dd8e07140f10e545f99622dd90ff3ed28a7eeaa070ce18cfc9ed64e2bbc9efd0dbd4ebe1c27b68aee66eb091ffd6c8debad1cb502edb6f4e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+abspos = {
+  revision = 64465;
+  stripPrefix = 0;
+  sha512.run = "87400db8c388db7d7105007ea853d2254451b98daba9a8c61822fb56d143e2dfb75918d40bfe519dfe18b401f944db1569ee41ac768ccac8449e78ae59fb11c0";
+  sha512.doc = "90cb62134a36e1cb1589fbc8a6b993c777562eb1eb309dc0cb4f6835ec7174df262957cc9b34631aab4cff5b6aa6818770e26034f5eab29d35ad5d7c4a155cd5";
+  sha512.source = "7cf57d88b340d57277e16594e66c076aadba3d505d6f7c66cd1e9407db5d21432d121c3b798d0f86704f12732080a9043c6c843afd16886533065ab70e61b8db";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1";
+};
+abstract = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2d805c2cc322cd802d612213ce525765d49d06bfb371a4ac5d1434a3c752af0ba0182093b0b6e4ee28a80ab926ad0f3a0403c03f871d3e003f6eb5a60ae39c34";
+  sha512.doc = "4feae7e22d9f8c6866a9b873359a3060ff75ebcd833e1ea5f82e833933b5beb36260833675775cdeb83f1cfde4dbae3421434890aa9f0f7539c999acd2e0405b";
+  sha512.source = "e68a030e56dc15481335dfb1ba566f9b68e92933f27d296d72e20b4d3541790b739b945fc1b39415baadf045164158618da98b63be567c1aa263336579986e8f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2a";
+};
+abstyles = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "de7e7a5c7e56ae4fb478c9a072c6b2dc8716ea34ee17be577cf4a485c5506f16cc5b79293cfbc80b245ab350c2e2059dd5fb37a2e28818f492edf7c0416d52e3";
+  sha512.doc = "d12304eeb2cf797153d7e17beb25c462b3fdf75f5b7b1b24e1ff89d52ce8fe5b2a0fbf88d083ba51301afc45f51871e376253aede36bef21becc1a4350da8259";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+academicons = {
+  revision = 62622;
+  stripPrefix = 0;
+  sha512.run = "10fed2cdb2533a7291626eee2f3d46e79fe972eadd83cf7177f22228dcd13422549819dc5e1cf0b03e8397e23badc02a965857aca886ba004a3279efeb49b288";
+  sha512.doc = "beeb30c90b668edbd135a0067165232efd0919c4e42f9e968a8e0e3250a88ba9d1a4489fc8e8f10c69c27794b1e00c63151877e119ceb33da50b12c42c4fc80d";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" ];
+  version = "1.9.1-2";
+};
+accanthis = {
+  revision = 64844;
+  stripPrefix = 0;
+  sha512.run = "5727125c85e06501f009267bab8c1eff674a76db618c6155fd9c6b41bb2407a3a201a008c7f5aa6d73ecf100a3fc917961d20f547c2f6040fe72760a4dcd9a44";
+  sha512.doc = "6789c3c330d1e6a0d20364e4e98ef72fd1c6294655f704366b0e6c1fd081d1aea312dc9e6767fb3e076b3cd91ea5a67606e8bf62f7f92af097ba766c99ab0cff";
+  hasRunfiles = true;
+  license = [ "gpl2Plus" "lppl13c" ];
+};
+accents = {
+  revision = 51497;
+  stripPrefix = 0;
+  sha512.run = "738e8299148365c0441495664cd97b408b181d192adb718adeacc93d4c63b7e81c12541746777571f3fd0da37348905269b5d7ecfc2d58f88174cd53edbe56b3";
+  sha512.doc = "50e5cd01da80113ef3247c4a7c7da703d4a9c3df68822b31ff734da2d755f5fd2bf9f5f8982d84e3628e96905276dfe6cc6699bb625ff1dadbe810b11bf5a35b";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.4";
+};
+accessibility = {
+  revision = 55777;
+  stripPrefix = 0;
+  sha512.run = "6cbc455f40a6aeb5862bbed64e6ec111d497f1948fa6eb83d26fc04c85c1145437005aa046e20eae70f177ff04c7084f03c2d4b3234be6c6ece822d6f366520f";
+  sha512.doc = "261d13857558973edb692ed320745173a5006d0cd23418e926be5398b4f3a2da0a670e3a08a26083381e830f4bd327eaa4451822ef096612a7a3c3492833c328";
+  sha512.source = "a7218b14ca307c9e02f6c562db3bb381a8a57ff758fecfc36f758bb70a151ca83e3401c7e2254ad2f75fe62d762cedec0746b07f5f5f6b82982675f42faa4e31";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.3";
+};
+accfonts = {
+  revision = 18835;
+  sha512.run = "f70105569c5b8ed83c103e423d29367702a5330d57f743a640ef68fc6a290b246e8f514907d63d6c7f203c12ab3eeb0cc64a45fe5c0379f10ccf1c8002007a47";
+  sha512.doc = "24b19688008b875890a397e2250277f81be1b77c00f95a9a2d40a257c0dc6f4c8adfc07e594f3873e60e1bfbcfeba786e45e9e63eb632ca92b7c935f74b3049e";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.25";
+};
+accfonts.binfiles = [
+  "mkt1font"
+  "vpl2ovp"
+  "vpl2vpl"
+];
+accsupp = {
+  revision = 53052;
+  stripPrefix = 0;
+  sha512.run = "0b6e474617333ca00c2503e99f60a290b930d7e7534de7223be511404aa6c7ba9a8dd69b94f3433b347146bba7b8dbbd4b6d45ed8b2c6b0880c0177842ba8b45";
+  sha512.doc = "650909f5212a92659d18ba3ef5209ed12c9b9ddff2b3157ea17cdbc8955536f41e43dafcd715e5ec26c1d0c839ffb7b26081ea36150b2f0f50c952c5231a1a20";
+  sha512.source = "e867fabe08188b8fe68c1d9ac6688fb99f69422db26b4cd611028cb8880ce90a8981efb7eb7c49f4fd3d1182d3b99cd90f171959751d7e1ecc1f7880d5a8b5a8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6";
+};
+achemso = {
+  revision = 65103;
+  stripPrefix = 0;
+  sha512.run = "c611a28933960c49f383ddad8dcc8486403eba1e84e981d2221a8e8b6db607dadd93e6b58ffab1c0bfc19ef423b639c673693b113d7e158136c5c30555f68508";
+  sha512.doc = "e03343efd2179c1fb094fc5b7f46e078949f3ac75c311aa0559e9c3364c3178f3e8452c9a87b4952a76982754e57d5668970f8fea9ac508756aec45b6e11db38";
+  sha512.source = "ce918746855be7450b253d7cda9dd112fa40314538167deec1b86a58ff6fd69b68d2712789632b332acb1ce92dfe431346b57fd51f92d04aeb2540f4a35cc0c2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.13f";
+};
+acmart = {
+  revision = 69242;
+  stripPrefix = 0;
+  sha512.run = "c51a10fb637e62857d723f103fa9c28e2d0257ebf8a5eaa9968c32446bebde6d49627cd1dee965d2e6832575fe54438ee62585ae1cf833af93537b7ed3521cd0";
+  sha512.doc = "fd0ad303a63510061e6e43c64f77f9bbc27dbfdd6011195f5ae64d5ca0e7263aed3261853652dab1576a614e94de677f37a5a4e165d8d4d525a61b86f023b2af";
+  sha512.source = "b8fff464e69e493152c1fbfd7feda02471f3e7a8ce3ed9dcdbc2b43d8fa30a587768d7c63754dab2a8b84969e5671f2426b748297ac98096fc323f9937dea963";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.01";
+};
+acmconf = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9363127ba5d59bee9d41e800a0e11d12bc4493e5a79a94be8efe23a44278ea097a58fb53cd334fef0f2ab32c9350196c46ee1aec8347a4aa5554b317c15249ba";
+  sha512.doc = "a8a971df6a94a9548b71c1463b9ab143525127774daf5aab227a805c302ee0732d3578c361c5346b123983a32e6d6c8afbd543bca4dc7ac7ad4d5919aba63099";
+  sha512.source = "bd9ffcd848571f2a4ffaa7f324835c74abd59ad1d2816b6dbad5fcac7fb06b98c38059dab7261b4bf7d811d56d0ad48d23ac81525cf95a2e6a190a25a6de9d82";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+acro = {
+  revision = 62925;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+    "l3kernel"
+    "l3packages"
+  ];
+  sha512.run = "25c0dc9cda98db7ead55613aea92946cd90e7edfa1213d59966eb8fdd93ae1bc7b532f7849c43fb8fa77291b23dc5d8dc80cba4584c991a7b38e55564bd59ea3";
+  sha512.doc = "c827f8dc5fa88b67e84e48d0cfb6d47aa5bfa98fbceed86e6262d98111a956d425d0a2f3cf54b18cba7593dfac17accc2cbe71cc04f1ea2157c511d670c41daa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.8";
+};
+acronym = {
+  revision = 54758;
+  stripPrefix = 0;
+  sha512.run = "be68e32baacdb8708d1a31c4a585fcd282d0def7a76a1e284b908532118aec04505271790a99ab0a36e7c035695b84f8ae1e2146c31ca8c4fcfb76be4f11db26";
+  sha512.doc = "72b77e66b4db0c3b42252020fa56be3e4b1a848ad7314037d6ada3eb449fad0b35371835ccc6018bc71ef991ade0720f7febeb52fecd71b3ccc9a5b839bf66b2";
+  sha512.source = "8fd7e9f374e08f69fc33df24be50a9842fb62a18232d2631d85ecf7e6ce702bad1d21989dc01b3513a69e7a39eb343763690cba027df984dfc7777f047ed45d7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.47";
+};
+acroterm = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "f8ce516ba2de1367bf414061e14c260be31304ce93693a95e6b9ed29d5cf170bb041248eafb76546cfb1547e687d07ec51333177405ffa8a5c9ea76070394832";
+  sha512.doc = "66610cbd2e77d8f9b0eda3c61382dc1a8436169017d363a5716e0ad1991849824a1958552af4a14545dcac37191302c0907b505884f7cf1c7d83f8087d888b6a";
+  sha512.source = "531b5768a7312bd40797b6cc67abc58050481ef97455219698018a635a298f542506669956211dab32d51dce2c86f3d3d6a2e913c4a0f81f072035a63470e5c0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+active-conf = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "afd71b77d016c6f2b36ff045176929409f1fc104d9f3530c1a70fad4fd1c71ac327a3b58dbf4a14b93cc691d88bf6b7d3add07196921876360280ee4e5915134";
+  sha512.doc = "e1b990ceab6820376c18068bf5ac15e984150fe7ad66929496cb77665f0ae334cb28026e0000e788f0580eab549fe2f70e802ca67d0f968961f4582290646758";
+  sha512.source = "06d82683cb44e35a07e2907e00f2f80b247a3ca2cc0e9b230e7417aafc21a73c9ef788c4e88cdf7fe7f812c471c3b34273adcb4d5e272888fc481d9d18a88b68";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3a";
+};
+actuarialangle = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "23878ac98706c08b1fed8f4fdbe7d403f4f0b668ce069837ddd1d433bd3bd3e50e9b041ebec4c8256df56f1649962b7ba2421795f9adc3207a825562633a2b4c";
+  sha512.doc = "f28274449a2c9558a22e1b3a3d648ed2a456d6ee179168d06ab4a6cf339f2e0ae7e43c8b0d2ecd8697ffb8cf5308f0497a13012f4b481ec68e02248036a8cf96";
+  sha512.source = "9364093cb942abdca6062b66d35f1a0e9088c7bf653baca6bd2ecadb8aa2e743c311caed3ea52f42121511b9b66232d5ef0ed554a29a3253c8e52eadd83d0dd0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+actuarialsymbol = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "a36df9659b33223efb54d050f12676e3aa0555c83911a901c5cfe137e8e7b27d68b47534cdd2064724f20a37715b46fbf6863a5935c9fb93f56e4e7ca26bf004";
+  sha512.doc = "ab15ff459aa82dc46a011a7601128dc7e6da720676390167ca856c0942f6a70e0d698a1624b443d3779446f3ac01d4af6bcf5bb5e1e0a17e0e5fefd3deef657c";
+  sha512.source = "3b587f3621cbf4d4446664c253a9cd27a6b69da3ed8d1bc09f6054bcdd450e40f8b38be336ce48e0ec251f1d8dbe45b17b6055251aa76bdf4c36b97ed8e4f077";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+addfont = {
+  revision = 58559;
+  stripPrefix = 0;
+  sha512.run = "36e16da02daf6b93b53f1458ca5eee2243310846b8ea05e6b8b00a3120e7686fbe42d6e34d602d84171fcf7cc5428135aca36eb5402e778facb1882e7e7831a3";
+  sha512.doc = "583f7cd7b46173ff57cfa4505d14cd3d88ddef7ebc2adb8fd2705fb8011711bd65d22ef38cfa6b5224191af1841f22ee27332f832029cff762b7b7e49246b179";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.1";
+};
+addliga = {
+  revision = 50912;
+  stripPrefix = 0;
+  sha512.run = "b54db5b075c2ba2f632e40a1ae2d840b0a61cc940512027effa2b2b3cadfd6dfa2407e2580a462b98f48cafed94281d39613397ed34ad76f54d6a7e8b614ecb8";
+  sha512.doc = "572d9aa1396ac80be2cd9ab0bd317759805a6541b656e19ae36915a6277f9a4ff2987c84dbf903133e0a5027f382b0ed48fc882ce7a79df7a27cfe3082d2a666";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+addlines = {
+  revision = 49326;
+  stripPrefix = 0;
+  sha512.run = "5d0a438fceef1481633f37824b686422e5000cf232b7dd24bba0f30c8d62b583daf01a67242283f2e4fe971438c061acad2860f50ce1438ca32677d497db8b2a";
+  sha512.doc = "2993c6caae1d2f230d144c9f93f7694adcb2e17d9bcd60eb3aa3144806a522258fd4c44a314d40cc767b3b069c4c929b8e458e74bebc746771b975b77bba34d2";
+  sha512.source = "6de10a1ddcb65be76594e7389d47316e066aec3a747ef7a61e15fa0e670d914dae3d2ef777c9574e8b85c5d9628784df7f4dc61f589917dbae571f31416bad08";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+addtoluatexpath = {
+  revision = 67821;
+  stripPrefix = 0;
+  sha512.run = "91d4f85e45181674b6ab2bda5ff3632aaab4abc0066c5026478d41c0205e021f12c3cb833c8c339c02e4e033aed351a5891f8527b95cc33f26ba534aeeaa785b";
+  sha512.doc = "ccc8ca7fc9423192a68260b6f441fa7be8a1144bdff8e0eee478f01e2c09d0e54f2a25d7a7fb935f76803003842f16e41916861d9a69e3ea2bca5724b1be5411";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+adfathesis = {
+  revision = 26048;
+  stripPrefix = 0;
+  sha512.run = "4eb7fda01fa1961d213eadd2f0bc9b1cf102de664dae1f37588e161af22d043319e12ca704c3223e78e963411c3f0533c845b17f7d0744b020ef2dca35b2c7b0";
+  sha512.doc = "86d89f4f139c9ddfe6babb84558f7d89f57b75e28d37f659d9893ef703cef7199272e60f1233d51351b5bd8a4565393dd6f09ba69796d2ab555423c2ba23c2b8";
+  sha512.source = "3d9a376183e2cb22dfd210eb6d453324d035289173c6750d67ee90379d794a50393c49f8fc40e5c51484127632f2489468b215dc510b0db0313372816fc77927";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.42";
+};
+adforn = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "7a4a4da6c72ff2f8ab4b2a9a5e92887306a8e2aee4bcc5a93c18bf41d1bf9c05bd23fd6401bda054994aafa8d6002dbc16d8483b951acb705cd46fda08aaf060";
+  sha512.doc = "2a287f8685154359c914b13e8e153aa64bb19708a9f5b122180cead53ee31ab829dc934dcab43f09ded4fe5d2a81ee32528855f1a4a1bd07b795eaabcb204f48";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl2" ];
+  version = "1.1b";
+};
+adfsymbols = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "7100648956a68719d1a449a3aee0a4acb3788aea7f082a6e7e38c8d8dfa2c712a4b896a9b036e8ae8b2732b11414ab71a49e2f513e7d689f4b0ad9e44c052019";
+  sha512.doc = "fbdd78030826918a3599a1f843db692390ebdcf4ca9a853d8c2e78706cfafe83ae79d23d09fb097339d8c726608a27436b3bf22725935c55060f1e8579ea1eaf";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl2" ];
+  version = "1.2b";
+};
+adhocfilelist = {
+  revision = 29349;
+  sha512.run = "57436dae1489c0f614c4b002f83d34a711398a762ac532b44b1d91a51d068462aaedb5b034923629f7630f039988452eb833d1e98af389c788091517bbee8954";
+  sha512.doc = "14bde143bf3ffa3f2b972f93544089e4c0314c7696e1d711719549b7e831278c66fee0676665fe6eaaac744689d613dce159e4eee2e3f9c24dbbe602794fc62e";
+  sha512.source = "15e7f652408c5975ba47131109e0d18bcb1d270e0ea630a9a3ff385e499cf3607a366e708a5ec9559d7ccc2a5e0b2d3d0f5f615142978a918b0bd1bd0218a30d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+adhocfilelist.binfiles = [
+  "adhocfilelist"
+];
+adigraph = {
+  revision = 49862;
+  stripPrefix = 0;
+  sha512.run = "6a4684925e542a6ab0e3b97280059dc47fc892efdb99858370dca9dff91074d98030a93f964a5172bfa95a6dbf41f7a639977b0559332178ab8e4ca9dcb20e10";
+  sha512.doc = "763f94d22e939c255cb0b920183403d7c753dd4d77483b79f82f4a302375bee4ea42357091866ddc392b554c6dfb707c624fabfc3f92fb6ae07853e3ddbc8594";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.7.1";
+};
+adjmulticol = {
+  revision = 63320;
+  stripPrefix = 0;
+  sha512.run = "aa3a350cc284bb52e5dd519155d9e74dcf96171e12acfd092ab3be502f09100a37cfb98c4ea99c6db7f7efc4b1edadfea86b29460dcdae212fd38cbb0b0062e0";
+  sha512.doc = "393cd068816ef77104ccf294921d6e9213497ce52e8507044783b05859c54ceea208fad8a7af2efcc6b42ac74abac142f883eacd455b0e3f6227c3222d2a5db0";
+  sha512.source = "400b8e4a5a65c49094a127c43d002b93ce38f04eaad154e5edaa1418d9186abc8b14c74570da79953fc44863de2f98748c23d66abfb9b4d03b5024aef9e2082c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+adjustbox = {
+  revision = 64967;
+  stripPrefix = 0;
+  deps = [
+    "collectbox"
+    "graphics"
+    "xkeyval"
+  ];
+  sha512.run = "ac12b052b2112d5bcd942888ab69fa20aca6e2b392bf868959b8573ee8611d93042de3f90eace1519a89d0da64d2dcb3046e26fb0f86f46ea3e673e2a2aee2c8";
+  sha512.doc = "d48b405a472df491b3ac6db23b126a70acda26e4dc2baf8e60569f110af2c4c740708c84fad9b70f689022e8747013198c98ea0bb3c6798f1dd8065a431d1ba5";
+  sha512.source = "08da88fe2a344716e7184ac2cadf564a90def84c03af8270a2f5e906ae720a7794dcb2707af5e41ab41406b01021029f4272c3e2844e9e36cd913ab56f049ba3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3a";
+};
+adobemapping = {
+  revision = 66552;
+  stripPrefix = 0;
+  sha512.run = "363f7fd337e5a34737608a2bc37521bb526ce726f5c9b5b4d08416e534448306002bc7af1be3f5e6fefcaba16ffc2260c4dea8a486d44dbccad577fb04d6da5b";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+adrconv = {
+  revision = 46817;
+  stripPrefix = 0;
+  sha512.run = "ec4300075ae2fbb0b29fa8126263d8852a405a84df8cdb6f484c989ebe948257ba3d1f3ddf9204ea7d6d50129c294a0130afabb053bc63022928ca748bb4ce14";
+  sha512.doc = "93ec47833fee152b098477f838858a259f5842264d3a7e9a959d60fd35f46d680eba61c9f4b5efa08ab2878da4aec78d19cf83880e33aeabde9854aa88491c78";
+  sha512.source = "25233e23bd1c6aec13609b5d17587747a5840e21637e3d11a478941f98f5f74a77eed31f806b51d07b79f8cc4ebb8c6b8fa419f72927045e3695ca4ada8af388";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+adtrees = {
+  revision = 51618;
+  stripPrefix = 0;
+  sha512.run = "1e06f07576666fb7b54c78d930f66fef78571469bffc3ef448687c8bbb0d23d41761e17c8ec1293bb6527e31fc70413df1b7de5c9a06514e6aa8242ed90deb09";
+  sha512.doc = "ad8f2e42a4a31368000909c5841fddc189bc2331b47f2c64b16ec509bd662a1b82df3ea8b712f0bdf1c40f123ac28221179b4352e20631d9fb776c0b2939bc4c";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+advdate = {
+  revision = 20538;
+  stripPrefix = 0;
+  sha512.run = "80075aa6efb4125bdce79e9b2ec6951caf1a753c8915201767de230acdd1adc2eef31400574effadf6287be159236422840751bf5ea24cd3cab8a01e82a0185c";
+  sha512.doc = "acfcbd6a40630da2cf9024cbf3ed378c1f7f8a16c8f8395b69c12f9693e903ba54b9b051c364c5cb4de957876bbd41f0b480c4f4b320e22f2c6df7b08502873a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+advice = {
+  revision = 69283;
+  stripPrefix = 0;
+  sha512.run = "fab7716603412d29daf4710ec6c04742f1d2f898d818f1f012932c99ab51bb8c9746bd3ab5b18752218fd37dd09d4550f3d2b8ef59e9aa852a68a132366b1900";
+  sha512.doc = "145aad6269324b04cbe79c159734ae30f3b13cd361250260ba374fba07c39af8a00974d0e47195dc4a1390a881936c443c671b1e09e8f905267baec3a60bc2f3";
+  sha512.source = "49e25acd701cd657f41c5dc611b9fcf7342918f29f276eccbc584a88aaa0e0b777c5838e84f067924943bab3b22002fc94f4a5d8b977d2c64a09567ccbca0fbf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+ae = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6b1c57d5bd3f0959e611659f979ed42b81e397a182d09b3482e98865196077334a9796777aa112ff367b97c232859d4f9637730dcd2654e6232c577d2f59c39a";
+  sha512.doc = "927521fb6b6a5787d0e94ad724cf19825b2cf2ce23333e60e13625a36390eaa4cbaa1bbe50dbc718efae97036d5d815860919f536601bb97224b489d20082953";
+  sha512.source = "d82fc85014bb32147c9562482ac1d0ab1d1fbff8140441dafff032e24c3ee9e406c9872a93a66ef96a2f67a75f47c01e53565372a14d1bdece588f312c8f00fe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+aeguill = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b75f41c1d179b63d1807ebfa81e9e656bb43433a3291b9e29d5f0f76667868d26840dc6ce7f61f0f959cef724f0b5738b96af2a371f949daefc4179de1f861e8";
+  sha512.doc = "8361fc02999b080f19beb793fb0d1d802203114c1e1581c312a21e3a682191470b93e373fc269f8aea0e2643a69c8caf80855597ff6a71aadb6bfc869f4370da";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+aesupp = {
+  revision = 58253;
+  stripPrefix = 0;
+  sha512.run = "7a42831624c30db319a81420e1142bf827f21daeb4719e1a179a63632586b1fb43709c17faef073eb67f27f1303b4f7db92a40425506f4d8e0bc6b456e4f6114";
+  sha512.doc = "ece447f4c12da8509be155f2743ca52988f32ce62edb361a85fdcd7733bb401cf8ecbbc0fa6bbd7d1662593f1084aa89a29b2f1b822a765bc6f7e581b46bc153";
+  sha512.source = "cb628c51f7f4d972f81b2e23495e7ac6e82e422c7e85ffcdd7c3cbb753b055178adb9ea386bb4b1f1f1c4d2cdc561eba27cd82c7ef33830db0cde9af99e7730f";
+  hasRunfiles = true;
+  license = [ "gfl" "gpl3Plus" ];
+  version = "1";
+};
+affilauthor = {
+  revision = 68996;
+  stripPrefix = 0;
+  sha512.run = "4aaae3ef6ba9dcfcafff4214c3c425a40518687fd01600266feb3ac1f836f6d1795fd1c2903f57cc3010b7bf5fb153876a4bbb83ac81576e6423589baeeeeaf8";
+  sha512.doc = "24c28a1c6879c2a292a96fb10dace8d1dcfa2a1a71e07570a232ac70b70e4e9f10f7af823fb2b8d619dbf587e1f5cd9bc38e1a4e2fc6e22714e5deb27a0edbe1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+afm2pl = {
+  revision = 66186;
+  sha512.run = "9ec87ccaff69c7467f803e4ce3f3408f8195cb93f571a7c7aa5f195d3de80b480b182831d239d8b2144dc72a5c26f9da58973075b6a939d23a51de0acdb1d199";
+  sha512.doc = "e18ef6478d02676a3edc048ec1f8bc37e7cca97e62164632dbf02595a051e6d09d19ba8422c4a617523dccfe1a6ed55fc9be34d1c0ffc147bbfa4e5d8f2daf40";
+  hasManpages = true;
+  hasRunfiles = true;
+};
+afm2pl.binfiles = [
+  "afm2pl"
+];
+afparticle = {
+  revision = 35900;
+  stripPrefix = 0;
+  sha512.run = "958ed5cbce1dc7bfb5d01befe74de6236a09b3ae5246aa3f2e80225bc353abf21b622f4128641c54a27197560557738d4c224e160c0be87010517c3a30a729ae";
+  sha512.doc = "d8185772e114a891ff5ce0f2a2e12b827420f8c486813d87bbb6fafc662ca1db710178e8cfa260d7d650c3432909b9f7a8521648f6aebd5f90daf1aec4e28d7d";
+  sha512.source = "f12b5a10b929d78c728331704ee83e726bc28562b8179adc2d9e7324b6b742100319078f5ebe8371a34927ae1fecac4779b9442076a95cae1d66e015f235d440";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+afthesis = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0ed83c0a98bdade60c49b3408053e020c6deba1b96d74b47aa2404c778a96ce2898af1d76892704524c0c069128e59c0bee5af73de6ff9237624600b991ed6b5";
+  sha512.doc = "c221f77700f974f0cedeb4f8ecca5280c04203e9cd89042d414eb54037db71cceed450477fe9498a15d9f09b8a0cffa177cc897958594fa7e3952adbd85225a8";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.7";
+};
+aguplus = {
+  revision = 17156;
+  stripPrefix = 0;
+  sha512.run = "73bd9b7f01a4911fb25aa7d388c5827c62a01a786ece4317f5b702de4c281bd05f82568780f4396bf289fcbb348abd2a3eca6620fd8e3f801d23aff7a05e104e";
+  sha512.doc = "48b9c010f746b8a85bbf1093b3dd39c2a853d74b20feb71bfebf2ded8d6f4c44538e6e20b24c65849e8adea9d34ff15498e847b1521bfca11d18fc23d18e10f2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6b";
+};
+aiaa = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9a5c04cc0b24e2b11e4b6953ceed9e506ad9f44922b3407c3aed1f5fd1fda1e86b1a5d6613a059065c1026f69830a8f5af0ed21ad8e1856ab44d22985768f24a";
+  sha512.doc = "cd69337eb21eaeff910696f153bc97fca94afa0b147e3360477f72c5d90afa5d54d375b5eb7801df1b988c8f11d8fd23848a07f013a4e06c28a013248e00599b";
+  sha512.source = "e9542fb3cb5a16a565bb5c349f15b453ccb4c81570425a5825f0f952816ec27edad65ee670bed9069dd0c1c8762b5becf6300ad551b15bc5adff960f73354588";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.6";
+};
+aichej = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7edc0ca36209f18dcca0b794c7ee712f0eba82e3e69b09fd46fdc7ede6bd33e93d4936d7bfcff88fe4f699acd04493053a7c76cabb87670215efaae12aaabc83";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ajl = {
+  revision = 34016;
+  stripPrefix = 0;
+  sha512.run = "083a549d425336eceee0ab8e85ef592aa15983e9a4dcf2264d835b5242933fed8719b81b427fcf7784b38b8e0b3dac2e2a7f8b9ffd10cf2690b96bf8b586ff3d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+akktex = {
+  revision = 26055;
+  stripPrefix = 0;
+  sha512.run = "481502410094aedb36f00dc93ff3cad9479e756b00c60abdd7da98713f273cf45a314ccb55ef2436dc54cf7e8f84e2bf9fc5f00974c9978aebacee177380c9a5";
+  sha512.doc = "4378f1e2c96bab5f5926b22863580dc2ae555400d770f5875eff09b8f915da4c83e99679fa7487f788970d17537123d854400e31bfca868d693b3d950c33051b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.2";
+};
+akletter = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "fc0702fce74b32b04ce2b1e03960a7617c84a89d4581f16bbbe1b16fc01d45300c0a46682460d78cc572b6e20cc42ec7701c5067adf5e4960ed1bdfd5a69e910";
+  sha512.doc = "6a951bf2ad4a7af4a6c87b24e8f4c3b4ff520430024a6abe6b54cf56269a903d78e591def71ce7cac832a4d3f822e8baa14f8decc960b455688801f406d01e74";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5i";
+};
+akshar = {
+  revision = 56277;
+  stripPrefix = 0;
+  sha512.run = "d626d6e3a72fb8319f07c56d200566fc351be15acbbdc0ded7c3abb9765ce257741458109203882e8fa6131ba182539fd04e1ccffa0a25cbdcbe6f7630d3bfb4";
+  sha512.doc = "2dc5f4de3807a8e2c7a81046fb5d9dd92a651ef86aa22bd47c68d7b9a75943537284faa2d95d89b013573dfaca2d8d96e53524cb916152e46fac067532b108dd";
+  sha512.source = "9095a3c6889eb8de55c5956157a5dfc3e885e93b70ee6285b2ac14d4fcb244e65a11bea2476ad2d35b6add316423897bf8fa15e30e99b6d8d3d3d3cc65b20f31";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+albatross = {
+  revision = 65647;
+  sha512.run = "3ca4c3ff3fdbb1b865e62fa96e984f94761bbce1de24cf09d7e5bdee3b4361c6536cfbd2119aeb6aa5df842228004cb78a27e2aa9e5e957cff59ef82b9fb459e";
+  sha512.doc = "dfc9cb6a72ec80fe5f240a8c50c8c98167d069cf13e3502ba281991deadccd094e369a2ef2ae6b089064de77d937c45ad3a3dc70c06fe6fc5e39190b7d652189";
+  hasManpages = true;
+  sha512.source = "93b72dbb855302d42faed5be48e2e4f11ba7b91212a296eac0cda3f13c0eb89e857decff834f7cf05b9164d2ee2ef8eb6174f077026b285dded75e10c1086a2e";
+  hasRunfiles = true;
+  scriptExts = [
+    "jar"
+  ];
+  license = [ "bsd3" ];
+  version = "0.5.0";
+};
+albatross.binfiles = [
+  "albatross"
+];
+alchemist = {
+  revision = 66924;
+  stripPrefix = 0;
+  sha512.run = "3e4c4902c70deb8f380d3ff5e1a621f595ea1dc47cde3579bcfc12bd0a066d5d1d6773ffb1d1f98aef336c8cfdbe7770e1d48f5b89fabb98308f54df5dc75fcf";
+  sha512.doc = "cb978dd26bb9b95a29f6ced2ed4891f27fd0646daf560316dc1b20827a7af454fca1b6500bd4bd5c723c4fc6a24b77d6d7c7a6eafb3edc99e2098b11e4f53029";
+  hasRunfiles = true;
+  license = [ "gpl1Only" "lppl13c" ];
+  version = "1.00";
+};
+alegreya = {
+  revision = 64384;
+  stripPrefix = 0;
+  sha512.run = "2bd5aa12890cecfa42b119f456ea63bf8b8f64edc4e2c55ed738cd24a80527245b0219330e1dc89e0a10e8ca17bb17ba928056ebf69955f2481d468a5cf97104";
+  sha512.doc = "dcff5d4a47c3649155a79659012aa07123e5108b85804da9c1697d1f93d7b336ef7e37e1272c8e2e8f283971bfbfebc2e0cd2ebae3ff8ee69531629635ed7d74";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+aleph = {
+  revision = 66203;
+  deps = [
+    "cm"
+    "hyphen-base"
+    "knuth-lib"
+    "lambda"
+    "latex"
+    "plain"
+  ];
+  formats = [
+    {
+      name = "aleph";
+      engine = "aleph";
+      options = "*aleph.ini";
+      fmttriggers = [ "cm" "hyphen-base" "knuth-lib" "plain" ];
+    }
+  ];
+  sha512.run = "326c0c2327ec391a2e6caa5b7bed74af44be58df05b58dd2d2ed68ac96151282f63cc51dcfad7b84f3fa716b9df1d9fe97e27e4ebefe81d40a1e0ddf06be48e4";
+  sha512.doc = "33dbdb3fc2ed1cb698b1b3a1826771475b27e33c19ab102b5f0f403f670abd10330dbdb4223d9f5b96cff001a14dc8d25ecc9a084a612b9db8a1cc6a70bec090";
+  hasManpages = true;
+  license = [ "gpl1Only" ];
+};
+aleph.binfiles = [
+  "aleph"
+];
+alertmessage = {
+  revision = 38055;
+  stripPrefix = 0;
+  sha512.run = "df06377244dbd962326646fcd0aad535733d275ff6a86bed3739e8b77c6d1231290c4628a98be50d92e9006f25be68c20d5fc5e92c82a6cf841c0af5670f7ca9";
+  sha512.doc = "412cecb146790ed0b7fae601d9ef0eb14381cf75ed20ff1bab3190c249750fb693708c2dce26e76da370a265f99dd312dc6747b6c9e7de62ef51a709accf7e60";
+  sha512.source = "c670adb01cc2e1dfa0997f6faef9a0d0b31ad2c6329174597b781580f02ba5dfffa7afb4538e0e740271d7f9f70b48a1caab91cadf8282d89a3f9a35c8ae8897";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+alfaslabone = {
+  revision = 57452;
+  stripPrefix = 0;
+  sha512.run = "b958ac7987363fcefa3d8b7016f13851b91446a2a252e9561fd1a15df78b867b928f3e45a6fa1556abffa0de03b2b70543266ef9627b7474167c5672ac98d9ed";
+  sha512.doc = "375ca21d23599fe365f53f461264351982340d151ebdd2ce143189d8fd3c22d191501520d571f207a1f956f433ae6491e171c7ebb3c9c5421e30b358cc79f9fa";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "0.0.1";
+};
+alg = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "923f36ab03aa10cf3da008f4b3d7ba5919f3e4a512c82fd1c42386df22019ca70c4c1700b7596750a00ea7c50586bdb803db3fee22edfbc402ebb9e249668e99";
+  sha512.doc = "d94795e7513612f3eb102b85b9fdcc792b175411fd67edd6779037b1e0dc101378159f58c6c6feb82ca6b73ea2a6fd415a36e4a4ea67913a0d1110582a41e38d";
+  sha512.source = "a8231edf9c10855b312bb00f2bf37b68ada65b876ab621f459b3ee12da5bc5b90080ab6eff5c3a48c0821753a02576aac0100b3a577cfb7c5dc2cd4b47c8a026";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+algobox = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "42192835e3dd2aedf96ae3602b3009af09512425cad0ee3dc859a972ea5b8ec46bbed35456b17f0ff7a31faead6df06c01734211bb0f206eba80fb05e66d2663";
+  sha512.doc = "5d5de2d91d0a5cbc63774259934fcb8b772eec36e9841d8f9e5d813e5f40cdce3171409b131ca788fb2b6eee651caa311128fa075eb22c969d2456b1e54708b3";
+  sha512.source = "019badab6a259e9e41ad21d81b53231fc9fd12f87c8b980610dc5a4d60fd7c1201d9f45d71d46dd3b583df1ae8725fe0b183c4ed0b4a35e849bb5d0281a6d31f";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.3";
+};
+algolrevived = {
+  revision = 56864;
+  stripPrefix = 0;
+  sha512.run = "bb038512d7ade0cf90217150d276d8ed7fb4279b8a3088bcb38dfe8f48373e8957909f5fdfdd2f6247682623414f04e732262a393cc0042279705ceb345cd608";
+  sha512.doc = "c42976e8fe3d53240de84845a0c4428363868629b5137a57863b5fc922ed8f557e2e4451446277cead1dba0dff036e843e5ead35e6e591a04f2edeb640c7932c";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.052";
+};
+algorithm2e = {
+  revision = 44846;
+  stripPrefix = 0;
+  sha512.run = "0203f337518811a04f255a1ea65045f487dbb4813fb848e0ba1b52d3e5fba96b784852d7e900a82f4c047c2943098e3b37cbca27322d115c341fef6d262c60cf";
+  sha512.doc = "ae737056adb53f943ae8c92d8e7bfffe52a107cca4a7a3151932a581744f1396f43e134a55e9894de0ae1fb5418983ba4643e1e07487b690478a6979555d8768";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.2";
+};
+algorithmicx = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b6cccb7bc391ad11a8996d3e6a3a48f79e50e3e685a4b7670a3399d5d400435616794100b38e73d32633fc16cdd1795c2dcd57bc79279266dc6509bb14d08804";
+  sha512.doc = "cda9c4082faeaaf504194d75c014fda9cda20fe85ab9dd8c4f5a3c9e39fc2c8c8428ef20b921790f36c8abae2ecd8ea089353db540477909039575bc65ed5228";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+algorithms = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "ba02581f18b74ef97f37b7c1052bb7577b256ef94232b045a43c841fc4705f8d7ebcb2b286d95dd70943d309080b05d36dbf847ecd6e661038d6e375d514a787";
+  sha512.doc = "3658a5a31162acf5ea1dc318503a2f9e74944cb998494083de76e2e31119bbc22094bfd41e048f5628730df359d2359943cec3cebd07b364a81703b92520dd01";
+  sha512.source = "d83acd2275e83d37b5bb9a24d9cb0efbf711a2fb76a9a5a18d7299c95d6e1e0ac8fb41990b795a21b23b5e4fd8de5ef08fa480c6b2eaa7d1f7644e0d44c2f1fa";
+  hasRunfiles = true;
+  license = [ "lgpl21" ];
+  version = "0.1";
+};
+algpseudocodex = {
+  revision = 66924;
+  stripPrefix = 0;
+  sha512.run = "0a8b2e49f389066575d403eced31e57cba4af96619bb2ad09bfe51054193d3033705736ea23233b8da3e5e9e0714aa26c4132c2227fa36cdbdeb7df50035aec4";
+  sha512.doc = "5ebf9cb1c66d4e4987387958758aa5d174002409759a38075f6c32e2418f0db670445d2b9d61442c5fe719154d137e3156c6871063eae7e5c4b50593022af623";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.2";
+};
+algxpar = {
+  revision = 67495;
+  stripPrefix = 0;
+  sha512.run = "3ea0ccb08a088e16c3fd47f5455ec1c3980d242c4f9db838ad07dad089326bead01c03708fe25fe3a14ab3abfdee93c864d1c633f5e0fe043b31962ca1dfe462";
+  sha512.doc = "196b2539e23d96f2f7967272d59243af9eabfd588c8ad4cf69174493084f5f3af0c088e3e5ee51df96a6a5de02a7d3a84f7f4f7b3f0cfec0fa4463fb929055ed";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.99";
+};
+aligned-overset = {
+  revision = 47290;
+  stripPrefix = 0;
+  sha512.run = "3998cd5515ad43e559da91bd1f25b835743299ec13fcf22ee9cb3aadc44c285f428ee701f5b27141c4d03c97b31a31e8620a2911854a1781ee5543a99073fed4";
+  sha512.doc = "d44ff38fe36352e1498e12eb56652e935cfeeb9ce6af5711bebe7844b1b7ba16864c8dac3c3b5f2e2bd6fee86de38c7555d5796940b834ce1ad396f5d2cb536e";
+  sha512.source = "56584744fe5700505608c6ced57fed83fa189c9e755b63521f466f40e1080a35032b007831316e4b080cf93ef36958873924246a4cdfe2b0f129effda75380b6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.0";
+};
+alkalami = {
+  revision = 44497;
+  stripPrefix = 0;
+  sha512.run = "57d8a09d5643536cb2341cfd7bd84f24f101ebd73ef1456a39fa8557fc81bb6bddfb58990c38d4da229da5c6ccba0b4d956d82f7d07d65c57a87c749ba3ef841";
+  sha512.doc = "c9ebe4fc7bbcb254e0fa0f027e93680be2d1690cded2d9b18f3da091544b05f5dcf38b87400f8c5b8d4dd9ec320379c752615fea99d010a118bf35f4693c704a";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.000";
+};
+allrunes = {
+  revision = 42221;
+  stripPrefix = 0;
+  sha512.run = "d05513d484f11a9fcb5d202d02e7ea586cc82c44abe0488294e58c6f31185b083026bad3f17186ff03456481200e05e2ec4a7a7348f6b8fa4e952702b15274eb";
+  sha512.doc = "569f61370178f2517ea4d4625209a1359cd56913073344816f4fa8aa19edc8bc63c073de4373adb0a0a8c8d45fe392da9869bd16bd7477da65d5b0decfe6de61";
+  sha512.source = "9765fe328824806dd96ca1a0e9678ba385eb61acf95d8447213492843f908de65209022d76303be816ee1c500e95aeb35280f3377369315a87752a0c4478feb5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.1";
+};
+almendra = {
+  revision = 64539;
+  stripPrefix = 0;
+  sha512.run = "9bfdffc9a634df297dc9b5c406c0681ad78b81619900126110b978bc5a7a2ec0f91a1e351100281c794972d87f33c7088725f55928e120a743001080887ad4b3";
+  sha512.doc = "477d5d068353d06e591af13e7e970cccd3d5229765f89150e4d9bb5f1de2b0283e4212bc475fdd6771f4e33f046a3e64dd4ca794c3691af95f7e36f77c7eed76";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+almfixed = {
+  revision = 35065;
+  stripPrefix = 0;
+  sha512.run = "1a5e41cac48a33c4336fe03576c49165b47a0bec606b0a15a3563922b964a9a3c2de735cd88cf10423b054b5131193441fbcd64fb2edc47d4944ff33cf6367ef";
+  sha512.doc = "f51af6e63070fbf94a3f8ed756d544dc7d9460f37b016fcded0d2c56a6cf672d2e60c7b2cb8be9f9942f43e46b5ff2bfb59c6ae301a5d88a8858d6e60a3fbaa9";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "0.92";
+};
+alnumsec = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d61adf9c03ef9f0b5d68325b435d5145297d85fa04a5bf106de50f58c04c9507eb63fb17070e955e7f476158419a802f0f18d2cd97ca93baa7997c2d57def479";
+  sha512.doc = "ab07f751332fa0ad974e6ea84b10a0249e5bbb69e591d1319a8c5d743f88d63ad9a7c72fc08fbac95e3cf950d090313dd758ed8f604e209206f873c5f0f70880";
+  sha512.source = "2c978d1dc9dc7f6a0f91d90102a37a2c8bdb78a19d7211d179b04ea448bb56baa451e09f945daaf3f219187d39f5938a7c003988fbc905b692931c9cffe465ee";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03";
+};
+alpha-persian = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "dc0344deccdbdac04c5a798a52785e913d6da3997b907a07894f86b1b3ed12640a870eabec3bf5916f9835a8a405ae4c692bfb70a63022cf8b52db0c2c3e1382";
+  sha512.doc = "a5881df317b723fff5e00a89706584d05d650971a4bd88d3e3f71df1e7dc021289f9737d1d5239d6196be29307599c3bc1ff782c190032dbea9bea0140547866";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+alphalph = {
+  revision = 53087;
+  stripPrefix = 0;
+  sha512.run = "de17ab4278afc9fb308abc23c19d4d1ce117ef3b66a21b748c102b95722d3395016682e9508e135e2b01bf4ff274964df0fb723ba2f92c81873dd58d73a3a733";
+  sha512.doc = "a098159842a9bd47e6da930af94cf365629c72f539fc3d045fb33b4bbe2004468fc690564850b67549b3eeb2265134c92aecef65b47d16da732bcc5aa93d26dd";
+  sha512.source = "34e3c847a63de5a6e6dbea406e79fe0715a46c746f7113a5e8651838499c1d8b0a636c0bf138a1030c957e2e7cd17f848bf2285109642686f56ef95d18354717";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.6";
+};
+alterqcm = {
+  revision = 59265;
+  stripPrefix = 0;
+  sha512.run = "6af82517cdbc64453b7e546afe4886ba6816d44492ca4fce9cec98035166b45bc432503db0c09c44e2e41f3bf8cf18c33a37199025a6f09dce6fdd2849973fcd";
+  sha512.doc = "f16c2591c79aa8d9f98f36c613617b3068495f814db73bc330d11f6a52b4a6b394a663040de328e6251f16d21acf683adb6cc80a5ce6524c09fac8397439f8b9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.42c";
+};
+altfont = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "18212e7107ed2bb6718a7c763d881dff7859e55e5bb33c42e1acfb5ea21228d1ebbdc6e13cb95f041bac99f871306bd3227326953229e69ac6b8ea774434cbd6";
+  sha512.doc = "4d181a21f732b0265d4251d3775fdd8a4305c99c0dc1610adc9af583f73e376cce249b2ef237d8027aa32a269512db71260aebe78e5e1619f506f23d1105dc65";
+  sha512.source = "f6982a69cb4264c633f8174fd8d487896db88e7d849c074c90645a84e7bc4abb1c1e6adf28500d300a74cdd26dc20b62efc013ff9e080df2bbe9a823ad0112f1";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+altsubsup = {
+  revision = 62738;
+  stripPrefix = 0;
+  sha512.run = "a3e168d93d3d7c2343a539329f8c7ace39f376e0008726affc77630e3d4032cdadc5c301cc15f94d92be4b98cf00bc2c95f29225fcd1def7bb66fd91c0db9c65";
+  sha512.doc = "e96020ae0cf52a851885326068d10210bc18d68df8047ecb84e40659015734c352c08a8d4f202aa3970b699131c032e36350a9c2ec4254e0f000e49b0029f3d4";
+  sha512.source = "eb79caa298cd000f6cb9e1c272b2abf788d7e5469bbcbba22bcb48e8b7e7c1f7774ceb9478aeb3588ec69280c5069f1b0c8c207918d44c772f32b558abcae35e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+amiri = {
+  revision = 65191;
+  stripPrefix = 0;
+  sha512.run = "ee2a1598a4040a069cfdaa275793b34bd8c899f65e888f41bec55fef53fae6312e3b9ad1a3dc024aaff1df22f735e0e633a1524b54d7ead9ff482ccc829e8aba";
+  sha512.doc = "8f50fd9ff492cec24fba7a321a4fdc25d5b427eac31609adbc9fba6a0bcaae8ed895aa6cc860a66106e22ae21dbe9984f9e37f4bc2451f77f5d89ea10d0f5e0a";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.000";
+};
+amiweb2c-guide = {
+  revision = 56878;
+  stripPrefix = 0;
+  sha512.run = "1ffd4d1691abe2543585fa950d9b18ebb10e48c5c7d97e2f05828f04620bfd730894cd92f0df507627ddd9451a253ed8bbe89c07306b6db27ba84bd6c24910ea";
+  sha512.doc = "d8f6ab658d8d8f2e05876ce27b5220eb2e10a58775cde91f975cdd106708ddef86781cc1c004b4381176fa7ee8ee6630a34bf7cacec374bf21ffe5e06c8d4d68";
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+amsaddr = {
+  revision = 64357;
+  stripPrefix = 0;
+  sha512.run = "9452effac79a430126a8060827c603c8ce9ce441b187d2fff740a7e8f013727ac4187fa1c148d430ee17fbc1709b8e8f89465b2403ed070d0517304dd7f8aaad";
+  sha512.doc = "2d501a1adb6fff4f16f0d3f44e6911ccef824cbdfb9e9a61582a00d61d1e92d03fe93f7fe6d4f87eb2575422407e634dc7e543c1ab05a744014f4d3bdd68e3c8";
+  sha512.source = "473c8d5289ff0f780956d298cc1527d5abc157a442191f3a321c30ca0d8cc11808c609c71fa50c996d5354534e5b5a16c154cf870a2fbae8120b026d5c8713dc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+amscdx = {
+  revision = 51532;
+  stripPrefix = 0;
+  sha512.run = "6bdebfbe4985eea23ce24db5e0e14162310d81efab18a7a820fe819bd51f839b9deca35b94740f038ae80084f355e5e800fd6e681d859cb7bc9bb8886993c33e";
+  sha512.doc = "65d6ea09c1bec56e5082d3521e1eabdd513013b0606f6cfbd0f7c7566795b8963dab6e9f3a46cbb6d008311e7ee3701efa345ef5dc780a3b18f6f4842d97594e";
+  sha512.source = "94751d2c3f617710b50807de584cf4c4d7c8f1ff82a1ab14a5bbd8b41fb5828b0a208e20c131a0aa023a1c8afcdc3d4b5e36b2df99f76b260ec2d9509a941f76";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2x";
+};
+amscls = {
+  revision = 55378;
+  stripPrefix = 0;
+  sha512.run = "eb39dc97a860047d764884663a1f541aa95a2d559dd55cb25f6b7c6c46617e6c33fe55a9fdc37b211c613333911df6e260768f43ae9630a208ecc7fb774891e5";
+  sha512.doc = "c2e563bd239f36b0db3bdbfe1ccb4a0adec0c22af25b557ed748897a99672f05f36f2bba6e51827c6fdd60b351079809b15c0367d075566c5e48682c23108fe2";
+  sha512.source = "7a96a464f9826a515191174b6e33016c7161c7547ed70ca78cac256cac68b4340a2b3bd9608f79df106c3eb2383b8d6895012a2cc6dee0c76d53d116679f4c6b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.20.6";
+};
+amscls-doc = {
+  revision = 46110;
+  stripPrefix = 0;
+  sha512.run = "132432f34812f009233392ea29d6c4145717a80ea305632687da30de6969dcef8af9c2aa88cbf1809dd34b0c3dfca0f40a52b6216a7370f2a225b2602d0bbaf3";
+  sha512.doc = "8c08813abf65f00b68441d1e5cad3eb4a16fc1a77b30e10d96e22f34d6af547804af4d47b62ef0dfc895e2bc7cc5ecf7bc08d912448fefefbf716430c4502a64";
+  license = [ "lppl13c" ];
+};
+amsfonts = {
+  revision = 61937;
+  stripPrefix = 0;
+  sha512.run = "6a9f80bc8b6b2afc3ff6ad151a290743d37e10ddeaf7efa969f3fec40cab0492860496c7bf0abeb410124aeaaa15a53640017c8d12b630e68c59dfe186519e52";
+  sha512.doc = "fe0917bf9d65d15155f287626edb17d692db7ef2e888fce30b867bb0c873b0166949b3b5f3965f70b6b237d7b874a7fd3411e53b87368acc7447dc0e8bda55f1";
+  sha512.source = "4145ce58620f84133e8d7a7639fe376631c92398161283c69c9d1119c14e4d404ed067f2aff2fab7cc0c2249d1fcdea81591b45a1cc72bc08835b99ac8a5a6f7";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "3.04";
+};
+amslatex-primer = {
+  revision = 28980;
+  stripPrefix = 0;
+  sha512.run = "05c7c19430a85986db770d1ff8686993edcde35171e3653ddfb7db4a09422c80e53632f583371079fe14d3c6fd9ff4eb3f0c37cbecea7ca2d9a5aefb04cabdb0";
+  sha512.doc = "85faf2a9c03f7d7d1e23d72b7041c9b322d5f8bd8cb309a60f7256416249ceb7582c112d25f8953ee67dd2b79a3697e29cf6250d7b199a9eb73a9682f123354f";
+  license = [ "lppl13c" ];
+  version = "2.3";
+};
+amsldoc-it = {
+  revision = 45662;
+  stripPrefix = 0;
+  sha512.run = "9178b17bedc53957118083a78ead56f9fdaf9fd6a60ea0ebdbeee6c87254e7567b47b61bad1f9bda2554f471f79c28f3df7c3d2b9858faad65c3d110664ec4c8";
+  sha512.doc = "eb23cb624c4cf6283b8f777911d102953d31dc8da04392d7023694fed02ee1b8a8a49365fe0f1cba9682e911405f04afc982b6cc9cf9699a4d76ec8dca6a471c";
+};
+amsldoc-vn = {
+  revision = 21855;
+  stripPrefix = 0;
+  sha512.run = "5b0c2cc1afcc4060249be20271af92c71c866db47d2551a176b5685c58182a6ca17da9540dd9a7c7abd33de75b0335a625aa921fdbd77329bc91d16718fb346a";
+  sha512.doc = "827c294eb1cedd51a3924796b461ec3d6c858e7875254e0fdb6cb496fecbb6d2ec541e930327c54cc446b15dd69ed795470ae6cbf1cf1e51c0f3ae90f3f6c12f";
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+amsmath = {
+  revision = 68720;
+  stripPrefix = 0;
+  sha512.run = "39e87ac8255c577fa8b1c0cd155d4fa21bd0c0f789141e6d1e75cad1c34a78bf5fa44277342ae9d93d80f4f88f31ca9f88dba9c592ceba04961e601e3e8e9650";
+  sha512.doc = "b1dff0cb1c09a184dfe9dd890ccb6e9e5bd5d2b109ce0b98336ca4cc1a45d4f398eb7822d02e9210c611c98a49fe41884b103e1b1e4f7c6b3b29b4de5be2ebf0";
+  sha512.source = "c1d052395b6f6291a269d610f713ce01383940685af91b1c2dd711b73f5d765e801524a538687d7f8cde055bb1dda9ca11900e4e8b58182b3cd792fdfbaca6be";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+amsmath-it = {
+  revision = 22930;
+  stripPrefix = 0;
+  sha512.run = "6bc869e3cf11a9521ff883e9b8cd227a267d28291124c0f268556ea576bc0af8ea4eaa145e45d1de84709df08182fc83946d80fd0f116a8656a35d75ca83eef5";
+  sha512.doc = "814539a2a82601c930097113a9baca5166fcf68d1b0c4dcf25d8afa8991e667619517879bc415ff114b9e86664b9ff5e25a7bcf1bb04160b9297cbfabb4a639d";
+  license = [ "lppl13c" ];
+};
+amsrefs = {
+  revision = 61937;
+  stripPrefix = 0;
+  sha512.run = "01416fea668e3717b14086199280582d7547cc7c555e19d2f88b7ee94dfb6863719375a140feaa5ecf7461c6d6c6f0ef52bffb544ff132b34771f11556ecdf09";
+  sha512.doc = "b704ccb7bf8a49c141277b240e08ed7d22c71bdb91d625997a726b25ffb2e8f494637cd9ac7cee031f9b45476006441190ba95331e32c4ad3af4e25ecdcc6f6e";
+  sha512.source = "81b8aa65cc79f08133a6390915ed7753db3439448b608ce04330e23c849f876ff2242403b9bb3e08b9642cb0362732adbcefcab9640e75260548dce3938baa25";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.14";
+};
+amstex = {
+  revision = 67930;
+  deps = [
+    "amsfonts"
+    "cm"
+    "hyphen-base"
+    "knuth-lib"
+    "pdftex"
+    "plain"
+    "tex"
+  ];
+  formats = [
+    {
+      name = "amstex";
+      engine = "pdftex";
+      options = "-translate-file=cp227.tcx *amstex.ini";
+      fmttriggers = [ "amsfonts" "cm" "hyphen-base" "knuth-lib" "plain" ];
+    }
+  ];
+  sha512.run = "4f380f6c67b3c92d4be1b3a9ddec3b464e91ccc632762d6bf28f47dabf6e2e096471dd64804deb370349fe14ddffc3b4d37be195cb63f87e47a2345ebbdbd7fb";
+  sha512.doc = "94b3f6ac9f2314cf5e3335ea517bd23e0c08ef10e5edcc032bc5907fb69b04525ad434eb896ef8d5b149033148da55703039d5481242c2f5bf791c1b32c85388";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.01";
+};
+amstex.binfiles = [
+  "amstex"
+];
+amsthdoc-it = {
+  revision = 45662;
+  stripPrefix = 0;
+  sha512.run = "17631e2d6306887236f11eed586454a784f256c36c14955be1eb30377f1f73b189686b37ba6c95188fda2e0b0aac9a1f40469a32bc7787b5d4c244de9a01ccdf";
+  sha512.doc = "2d35f87da43f957d7ec3d1e61d052d14b4dc207207fc2e6dc4de08b699e5211db17a84f0305888294ae163691e4dee2d067fb1c3a29fadcc34214033fe8e22eb";
+};
+andika = {
+  revision = 64540;
+  stripPrefix = 0;
+  sha512.run = "4da9904459345033aa87deeb0019c8c4a39fbafcd59d973717ed2c4a410ece528944c69669b6a5ecf6ef8bb790f60bba909468e001485c405e7cf8775b7533e5";
+  sha512.doc = "50684857dc25ad942aff18eedec04c9e27e4e408f748c208f8527c5096e600d26769ec6f82e2f02e72ab472dfb662f12bb009156293a12daa2dc0676d63ed446";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "6.101";
+};
+animate = {
+  revision = 67401;
+  stripPrefix = 0;
+  sha512.run = "dabe8762a0329d46ca8987621a59c38183e713c1c257e2cfcd2bbe36bd49bb7cf23b3e75e421f4bf023db2558bb9503d550efa882d77b229114649a15ffcafbc";
+  sha512.doc = "857f611cfccc96ed1ae63f47128e9b7b4240428f86ebfdb6f2b79c5f0c76858e7a917321330d841059be02c3d7ef45036f0a2ed441e27abfe68ccbaa61568607";
+  sha512.source = "d0b799be895882ba64d200f4c77d8794212fecce55b8c65e874b77587ed4bc186930f9abf1f662d0c7c7e8383f34afc3679f11679d22c035539d93b8dcd19e7b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+annee-scolaire = {
+  revision = 55988;
+  stripPrefix = 0;
+  sha512.run = "73158727d9c5da0b28fe71661c72a8d1faa705034be8cd10ae36abc266240958cdf0dac962926a96ce445be187016d8440b7aded3129de6fff814ceb6366beb6";
+  sha512.doc = "3e02616de1f5d55837511eb2b1edaa571b6686192433941e1412d812588fede1eb8a8d160b724d1fb8ef8f369cbecd401d1bcd09d4692a79b182ce5bccfb6021";
+  sha512.source = "2e0e2a08820a7826fc6e58dc97ee9587818bdd62d0eb046982dd1f8a676df705e5bb87cfaabf7e260089d71ede1f597b0afd92b69616c0047d64983d919da50c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+annotate = {
+  revision = 52824;
+  stripPrefix = 0;
+  sha512.run = "bd31306b72bec73d4a2367fda6804e648ade536181d7a5c34d196591bb5fbd483f13a1e4aa2c28d3a4f29d0c74d37d5f1a77046b15d321c29176d9f742e91a72";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+annotate-equations = {
+  revision = 67044;
+  stripPrefix = 0;
+  sha512.run = "4d4f64f6346eaee14dfe509857d2a592da825eed9ccaaa1a9c2cbf3a4d4f750441392d703c9c9665c88316125bc37192c0d6869f3e2f5274e7f80699f8c553c6";
+  sha512.doc = "9f958eafc15d7de177a3ea66c0e381ec76480845647af0969e34b7429f3543c51de33dff58d2a4faf10bba82eb8f3de097d3324955b1842806fc69e8cc6b200f";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.2.2";
+};
+anonchap = {
+  revision = 17049;
+  stripPrefix = 0;
+  sha512.run = "4b84d5260c0986191fb4f2b560c386a806c8f93c76360a8d93aa7f9b55dcf089d7d03ca946143b52923130ee751fd47f1ff59908314297fd752ff5fbb17ec0cf";
+  sha512.doc = "087db509e1d9649176614296f84fefe9b726dceb3ac8cb6eeecdd8a6fdb03dc97433c31478638eeb6f5f7cde85b8a8a693fce55ed0b3f5aae35a075a43e5652c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+anonymous-acm = {
+  revision = 55121;
+  stripPrefix = 0;
+  sha512.run = "6899f18cd8422c1671b74a0ea3f9e8eb47d7ef62e0809d12e71de6ad6a7634c8cc7af22f701c710c9b2b5ee3867acde491bec8d3e2690e2532de3488aed1bec9";
+  sha512.doc = "f7a91677338dff848150dd1beac5645c157550f3463795d2d67493f35a81a09d33ee6cb39f2d921f535c12f26bb60ac17e4208298bd8bd7ba0dea8da4e1b41e1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+anonymouspro = {
+  revision = 51631;
+  stripPrefix = 0;
+  sha512.run = "105334748bce7fa8a78edd599d6a8466729937f0008c479213a4d3d4b6b3e24b91bd1e124d0e3c1354fd68f99fdf621538696ba9b32ecbf09f5c7202b0b34997";
+  sha512.doc = "ced94c5fd0be106433e99cbe66305b60ac6ddee82d3a1c8046d1467b11fe9ca10c2ba3b4ceba56a0ff439e7fa82d09c303f29200fdcec1600145fe7623773e47";
+  sha512.source = "75d70833e574ab7847208d76d1012105f42712fc1558b9fbb35349871068bd60099d4ffe189eb28f5276807e6d1e48969283c7ea5a48f991cdb959077c1444dc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+answers = {
+  revision = 35032;
+  stripPrefix = 0;
+  sha512.run = "89f7fa19dad8e94b57a66b53b72578c277037c0c3a9fe008d0802dcdedaea03f01c6554f4c6b80fd038ebc4f18e21bad3fc176f4c4acedae07d9acad2a90700e";
+  sha512.doc = "616569a8d972150c0a1da86625b580baaca642bfad773e9e2240f74d33ddfea203b4c7349660b996adbf8208a92b11861d3f1a42ff88c68f39efba0af97ffa19";
+  sha512.source = "ab865ba5abd9be86d4056cc33ec9436c14cbc0c308cc68d9a6768c094b84dc1bf785bc78c84e1f286e9371c2118ae3c21b8f57d0b4406ba6c2130f633ee6ef09";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.16";
+};
+antanilipsum = {
+  revision = 55250;
+  stripPrefix = 0;
+  sha512.run = "d0a31d489cbb68ba258d78c14d294dd3ceecad43d746a43fb87d6c129d2b97145187d8f0207d320be91168a3e8d0612c79bd861d327572517479831a52d290fb";
+  sha512.doc = "e7b4caa710d671e8474df9e449112033be38da1465ac475ff77748646b8c24c5589cb2fc3fccaa19642ec68960be1cda4fc4bb427e53ce19ca5c99a45f74ab44";
+  sha512.source = "bd2860412e363d97f50a0055036b283c10b475832c6acd1da617a76cc05391b7cb15ea2b080c2658b8e0eb7d455a5ddac80ed25f7cb0f271c0172008b7af323e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8.1";
+};
+antiqua = {
+  revision = 24266;
+  stripPrefix = 0;
+  sha512.run = "0318b6f81d365cbb4b320642ddb6d8f909b5b136daf952da01c22508c392c58c9f8a25b33e4dd0e5afe777bb0b366633afd6567c3992df2a2e286cc9f41e6211";
+  sha512.doc = "4158160d42fc776891f974cf8de13631aed17578ad2e5a67225442b7e783a36e2a0d3be640d92dce0fa66097dc617ad54b2779a3a3ef9878b46d900c5dc2ed7d";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "001.003";
+};
+antique-spanish-units = {
+  revision = 68998;
+  stripPrefix = 0;
+  sha512.run = "d5b6208afb1e098a66ecb7f4f536d4b4f2762705bfb142e66e4f83e38670b88db1be5f04ce3c8c1f1db7feea8ac3d92bcbf5a1ff099f87a01f05503c881c92d4";
+  sha512.doc = "b25eaf2cdbddf60950478c26874ff99e62f9ca8b726cf533958a723652c56e32e7279cba9c4a861d670a6933639618902dc914102af1dd8e672ea9a1b38ae67f";
+  license = [ "cc-by-40" ];
+  version = "1.5";
+};
+antomega = {
+  revision = 21933;
+  stripPrefix = 0;
+  deps = [
+    "omega"
+  ];
+  sha512.run = "af2cbe945ac3495e94fbf69797c05d9a7cd8c3874148c54c602a4a152c669638cf7a861949a3cc2d08aa21f378b57beffddf2d13e3afc1157c74472c348f5405";
+  sha512.doc = "298b2e796736f7598a83a2d4fee53f48e78d0c8b255cc09c686371a3a05a4d36736cef96d812281cfd3fe1024af433f32e117c1c60d7559809220ed8dd5e56a9";
+  sha512.source = "7ee92461e60834af1f736f387823788a44d680171d9a7acbfd71c858885e190f724b5db11074efb74faf63b471af5c34688af1be5b765de67b170dbcf123fe2f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+antt = {
+  revision = 18651;
+  stripPrefix = 0;
+  sha512.run = "c31e92701d14e0559ca1807389d3f1d95a166e9dee918fc7218ee671227381e3c37a991756e9c19c7e7d3681597c3c012037a74249c7c8eaaefc7c8a3bc2fc36";
+  sha512.doc = "00533390612e68b48dbbe9c1ba11e46a0e48f8b87cea8f6623267d53795ee9170daa1f34adc8cde12356ef779990fcd7fe7a10b601bfc11c9a0f590b5a25f3b2";
+  hasRunfiles = true;
+  license = [ "gfsl" ];
+  version = "2.08";
+};
+anufinalexam = {
+  revision = 26053;
+  stripPrefix = 0;
+  sha512.run = "0f7deb262a96bf55eba167475ca7c55887c1cdfbe60f9a32debb6926d855764eb595acb693ce9ab74a2af89efd98114f6694255580b5d594915cb2470d84b485";
+  sha512.doc = "0821831108f81bc8d23dfb7d26f2201057a897a2dc783959b9e298b8e59b79a12453db072b824397a9625b8a63e7fb19ad8ba6d4500436bb0f7b9a23f96d1c3d";
+  license = [ "gpl1Only" ];
+};
+anyfontsize = {
+  revision = 17050;
+  stripPrefix = 0;
+  sha512.run = "31d1c235d011998043663bc1f5729bd40c5b90996627038be612115daef2b3526c9e616b16c251d6b653d5bad82beee62a7dcfc3b8c10feec0850729afb294ea";
+  sha512.doc = "9003fdbf712448de70c858eba74f7de79e0cb83e8f9fe72d9c1b71869161d5a63099473c4f9ec670b28b356ceccd9b56110a1724dcde3062ae209a678f5b0e16";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+anysize = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4439be91f8dd82cdc051c519b5bc36fdfb632cf09941f4e6ec92fa77c2b5f4d767c162018fc9451d48ece17e9cbd5d7d4c574eacea78b8f92b6e07d40d7b590b";
+  sha512.doc = "96591bba808fc91a876dd49a6e1ede3b679c18952244f14b07e992b40d20f6c4a0f4b4dad00a409c766c5f2e883fc4923c501e65b06ad93193719001c2629f08";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+aobs-tikz = {
+  revision = 32662;
+  stripPrefix = 0;
+  sha512.run = "76e3f9748c704efafda74e6184aa3c0199f8dae3a9f433615fb87ac5fd7c81d5dd604e91ed7648b68f05919425f82fd19ca0b66f4f590f55e55634a5cc4b7f9a";
+  sha512.doc = "3732ca200dcb7d3d4b99cbb0edbe13ef7c9293e8424457c2493c330b4ea810bca21851161b83740bf3b7b53899941e906b0b2e4b46ba715e7b5bbe19844d2070";
+  sha512.source = "2cc8953d5e03bb1e6fc35d323a35d434aef291b165f1ac4fa0b005689af3d7988770d0a86fb4b4c3dd3ef6ea876f962dac5653e695533e089a7a50653358f40a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+aomart = {
+  revision = 63442;
+  stripPrefix = 0;
+  sha512.run = "26216ce5a5069aeab93234a02063961d4895e45d35129a4888107dfa670e319d7d1f1947920700033b31f68bbc3a59fd189feea33305e2893581e8f6d89ab553";
+  sha512.doc = "414142b801b286e4064ebd8a73cd40ba07c5d5cc6441e19f7657f94c2fb97665828d2c664908b8efa91af10d17d7bbf1b1b887de393d3752cbf0213b800e0c15";
+  sha512.source = "79fbbac627d55cc394fbbec70c4550c2e889d88483b4e7c2bc19ddfc660be93072a7ffcfae92804b75e2fab47ea91c137c98ab7161e84399d586496940bf14b8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.27";
+};
+apa = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "dd825c533b29f8cd005b238877763ecc299f1a6d23be870bb7b899401f0aa73c4377bbed640e220faf4a1fe204dba0d94671c67ad83cb31d99eecb76e658f352";
+  sha512.doc = "5e5224f11e811511b965e6f79adbab67bda5c809fdb4fadd5913ce570e34a933d139e8f418cdf7beff6e24e79443e4f4e4acd81837f24a5783915e169099e720";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.4";
+};
+apa6 = {
+  revision = 67848;
+  stripPrefix = 0;
+  sha512.run = "17ca4d98885f30c42c6e5338e838ea2556a2f9dcaaaaa82a4cdc0d82c9a208388f66fec45a87211720b12da193d758d662fefaa8d95fd3246f3403091b4082ef";
+  sha512.doc = "244f143bdb9209482eba9c644a21b65af3a6990b5896ef079aaaac2aa57bfd4c0ae26878cf1f87d3f1744b3dece2aaebfccae4e0ebaa846944b614b76a12a673";
+  sha512.source = "fae9f67a6f34bbb7ebbe06d125a45b6b2fcbb2d631f7b9731bacf2e87c87493b4e0804b9381609147000e412d2ce55e5b0e582de242ef027e0d3ac08dc3ed05b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.35";
+};
+apa6e = {
+  revision = 23350;
+  stripPrefix = 0;
+  sha512.run = "155bd30654ec3a2bf3930bdad98235baa6bf7aa8109ad449aa1a7b6f2dbda37851f43978266e1c273cbd2155ed274003dcd91f9f452f2dffe268750fd0d9293b";
+  sha512.doc = "d78ed178d1fbd07668bdeef74cf6f9f3674837a4f83eb5dce590762f7c02fae1017ee2eed6625a85a7b3e251ebff103e37da84af589125bdb60b73c9459cb748";
+  sha512.source = "6a6502eb1a60d2b67d373fd1cb4aea0737d0eba9ed2846c07ff5849c4bfddb9ab3b6369ec0958536e831c79e63beece92393c874d9463bc7e3cc1a56f4c4ecb4";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "0.3";
+};
+apa7 = {
+  revision = 63974;
+  stripPrefix = 0;
+  sha512.run = "48765b391fc91c657666a94c4e903b3e3f93f0620ab561e6e7a29ce1c03ec52674f33dc314136a0ed35e2cec427e94b6365cfe64b1d50625f443dab6f20eddaf";
+  sha512.doc = "3d55da4666c2babd231db031e6d72d4bd03b99fc89a581a3f351124956ce61b6275b2c7ced590d4407c1124636b6b2fff0a5cd5766e87ea51e4422db32288805";
+  sha512.source = "f3190097ab50699cf44da16478b36953da636d15ec79ec45471b94a29de91feae603aee65fbcdcb32dadbec1e3981f3b39b7c6c483c77fb0da1922b20e056b56";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.16";
+};
+apacite = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "6f69733b58f0e791422269f48b56a52ad6b131afc4ab5c7c5ad1d9e0a5ec0d84ba48b8e43340f8e1a563a0c4b10aeb131f1999f836e89f311f067ded8464f91b";
+  sha512.doc = "ba7720239a221d343cc58d28a9611f731a6db21f1e7852b0cdfe0c4f0cd97d475efd83c863b14d197f2206cb2bb0d314266797376b548de250842aa008ff3732";
+  sha512.source = "bfcd5139e68c54b6c35dc8afc46022ffb56101de5dac3e6ea24df372483c2ecc2e3d2d0a486ea284f2fb6b0aba4ca622080910821a27447239ec527db941a2f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.03";
+};
+apalike-ejor = {
+  revision = 59667;
+  stripPrefix = 0;
+  sha512.run = "b04f10bb77365327f326f2bb6c67347802fe6f9628644711d72b85576f59e06ec9fec168ba382a187f51cb7bc2d619b2d971d55024e4ba82d7f5e3c73f556bc8";
+  sha512.doc = "a9e091123eaa359ef7ca22d47ce3e069ebdd9e74835e54dc2abbe92073edbb9989d408d5f52f5e83b52f7137b4cbc50fc38e56606f72541ee46aaabbdafb3a40";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+apalike-german = {
+  revision = 65403;
+  stripPrefix = 0;
+  sha512.run = "2d9094953893182276e88db622b68750a5f70a9314ae5b88ca33c8b04a3e4dbb68fa01de9e3f44cc13b41b7bd7ef9c9b618af7c1cabe58045dc03b15277da5bd";
+  sha512.doc = "eae2fa13afb28c51926a1fc4aa8e8e39da35d9a6b3297eb2a1b42bd39580daaf45a782c4cbba16dba6c7a4c315873d6ad1a7b6dd61b4de06cf5628f8d381c63a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+apalike2 = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "cb837c6299628a58189f33570de7717d53d83d9de456255b489ae4ef73693b51bffc2dd12c9496265ebc8cda64d8da8b1c71d46f9d96a4bc13c07c9a6e021a2f";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+apnum = {
+  revision = 47510;
+  stripPrefix = 0;
+  sha512.run = "2e155193dfdd3c88cf336cece23bc6b393a81529c31ac2535840a7c4f4a97530d35d0f4ae964e8f92856eea0d54c356e8bc15427918ba0891730827a3ba561c6";
+  sha512.doc = "4e1a6ff31d9836dbb04fbd90911083a9ff70c7526ef099d437e21c11766314cc29e8071dbc21976af7a23fe99b673bbee82dfd265041b9ecd015070c58b4ce14";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.7";
+};
+appendix = {
+  revision = 53718;
+  stripPrefix = 0;
+  sha512.run = "efaf48867a45f8365755224123b9259f80f49417c409698420d67670baa969d5d354df1429fe7abbd87c29a8e89a9e084cd75384310a44d61e1f2fb7a2650977";
+  sha512.doc = "f4e90fc9fa5ca89a9a20ceb56cce788984f3ce5e55f92c99de966a54afca7145d9e3602c4e514ee6b7887b3ae9f8facc9b3191ada19514aae7c7886ae2984b0c";
+  sha512.source = "7e7222abea6401b749f2019fb205956c99bc3ce48134138862caead25aadce25410ac4fdf9ce10e34dbb802c07e5fadf8e4facaf846047ea654f2605b4f3743d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2c";
+};
+appendixnumberbeamer = {
+  revision = 46317;
+  stripPrefix = 0;
+  sha512.run = "d5f4573a0f6c31be7e910512d86ee0443e713abea11e71694b58f1d1d65f4249f967aa5b873941e1d8b7686d408f411aad1a76009a3bbcb528693ae14dc60e63";
+  sha512.doc = "58b32eacfbcd8e024a4cf3dcea0c1d057010dd454c1e54b6752b970a3fa1a9e10eb15d8cee9dbb9ae032aaa8b6c070079b112f5a91b1c9617df40877a4a3454b";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.2";
+};
+apprendre-a-programmer-en-tex = {
+  revision = 57179;
+  stripPrefix = 0;
+  sha512.run = "2008619320d2b7e906c2511609e76894dd065f8e56dd1800cfac0e13af4415dc76c437cdadcf15cfea85d7862996e99ba3240aa30d36fa70d9c1d950b7c97e96";
+  sha512.doc = "34c86cf9f0a296846a85f896f31da102013dd7b78ddc11d20aca93770671f2ab05930167160d3bf6282b7740fd9d5eb5238ec70bdf405658c1688d3bbd769d7e";
+  license = [ "lppl12" ];
+};
+apprends-latex = {
+  revision = 19306;
+  stripPrefix = 0;
+  sha512.run = "fe9c7ee4cc8cac1ed932388ff75066e4166e582f92bc23da4a4f6049f3cfd8c100d6ab6c0b3c661dd76038a9683eb3207f94f54ea338dd172027815d6945ad94";
+  sha512.doc = "d65d5f56e055ac4628e8198b718689631edca80abb3593480948ee8ba3336d7baccc091cac9f95b4dff745d84d409488d3a2032a1587f1f1a5db186af4da1413";
+  license = [ "lppl13c" ];
+  version = "4.02";
+};
+apptools = {
+  revision = 28400;
+  stripPrefix = 0;
+  sha512.run = "05d243100c9fc575b7828e0084822fdb2c655f5d2d7c51b42aa3c5ee4d127f62f714affd1fa8e94b7c0c322b57a9fe1728d1829ed7f18d75b5287a673d580cc4";
+  sha512.doc = "74ce416ef14978e0418754e3d2e2874ed07a8fbc6be90a1bf7dc492f191546407d7a967efb1306481d1b88ad296faa1194dc4da8975f7ac0c4e4053ccaa1444a";
+  sha512.source = "ffbce0419baaf512bbf8aafae3a8bdae5456f9ea1699cb48b6ce215fd8c4d84dbee84399e8799fa5ca161a1e98375acd16d196c9ca6c505c7923aa7fab49e0e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+apxproof = {
+  revision = 64715;
+  stripPrefix = 0;
+  sha512.run = "69d21b2d0770baf8d29583e383dfa1714d8ba4d87d65c2f6590ac6d2f5df2304d002490cfededb38eae043ab1cb2b23d7c67fa7880c4e48654f2a34aa9f853bf";
+  sha512.doc = "2ba3258ee71a0776ee27bf4249288b12d92b7cabecf1601efd9f1855f5a058b9c030a0d4107c026d8362324de9240350e65f8fca1e76ab5e4ebfe718b37ed27e";
+  sha512.source = "32995f9080055dac2fe74e1c9d65baea4dd824098d1dc1e62232c13c4d67226e0c9cb880f5dc801215a97b2db7a6c665cc7188f42265416c8fc136384c3fa34f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.4";
+};
+arabi = {
+  revision = 44662;
+  stripPrefix = 0;
+  sha512.run = "6f59ea8c986078f388f4c8f067b12863422728cb1a56464ece4d793189bf0e6dcded476a3b86317c2bd5f9b4b3cbc475fd748c2ab9bbf60b3d8c8cd4c162ea62";
+  sha512.doc = "c851b0cca46b11d7297a03488cc72adafb6409e0406de809a1a18d4993068702f03e17cbeda1399914005c9885108d747c844719764145c746b2a0ae45d9121f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+arabi-add = {
+  revision = 67573;
+  stripPrefix = 0;
+  sha512.run = "8a9742a1499082ec9ecf5082f34b194e572cb94a0d0b6a3b1d6b8a01edfb9b3b53d42e3720b85fc2dc654d06b3641b95d506eac8cb393bb9ef21dc68c70e5adb";
+  sha512.doc = "c11ac1fa2b8dfd619060efa36f81ed0ae6d0e1b976c08894f7115d960458a812496d5ce4f8270350ead90a5a1614a8a61cfb98568a1e28d414fc0c5b370690ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+arabic-book = {
+  revision = 59594;
+  stripPrefix = 0;
+  sha512.run = "ac60431be9ebb42e2329c954805ecaef988bb6724eba7638ace659a973de3de9dbffc9ee85b2847531c3fca44e97e7099b1d9412ec754d9d27bde1432480f133";
+  sha512.doc = "5ed647dc625397baf5db5cd05c87b2ce5dd44b4acf67ff6337b96989aaf210775f3870b5f1f376219cbbce96e486eed5dd24dc893684aeb7d3490ae62df15f14";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+arabicfront = {
+  revision = 51474;
+  stripPrefix = 0;
+  sha512.run = "efdd3769bedf8ececd7f71f6a918ed19f66caa78b348238b34e554698a5af6ae5616bad5cc494c970cd8e12073f1c27ccd1cfb7ab19ea263b5cf98061c42ccf6";
+  sha512.doc = "64eb067784cdb56915b45e80f1666347bcdde06e3711a18cef16ae92450377aed236cc32c8c10d467d50e77de31a3f599abe900f411a510574378e63eb923862";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+arabluatex = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "c235430d724495035832ca32fe838ab5d75d48d2d68c6c84965f5fb7e5c65098356513241c82e95b6c6d806328c0272b775c1aca963df02ce2540052d62b312e";
+  sha512.doc = "d625d9d23d73a4c261c2099b77831dd1b60f38211a4802a3651e31f65c5d278c3cc3db8469cacede81c1a105cc6d4f605a5a9ef764b6171e4fcacf515a1080e7";
+  sha512.source = "260d4eda4b79f727bf33327953fd0effe33f12272d293a2fcf6d8a5da8ef918d42220effedf20a29e5d4f39449b461398f15b08dd1b73522666cd7a009ece904";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "cc-by-sa-40" ];
+  version = "1.20";
+};
+arabtex = {
+  revision = 64260;
+  stripPrefix = 0;
+  sha512.run = "df47df09eaf935bd8921d8ad475190fe6651f1cbf198473ee82099242b6f4cd63ae5873a2b2fbd7a75a4f9ae77f5ce3f56ffec0e668fdd649c4d3fe051b2ac68";
+  sha512.doc = "a73aed53cc1cf4f5600312f58e0ae8a29c57fb04ebc87b91f13526c780567a5ba076a0b63b0abed791880efccffcfc52bb0f43131da4b8e2a60b48184d2f66de";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.17";
+};
+arabxetex = {
+  revision = 38299;
+  stripPrefix = 0;
+  sha512.run = "7c58bd94b780abc5bc17b4218229d289797a155a8e98cae8e22825dc7d9b12c5514de01b12bf2f645047dafb13b4d519d463f4ced60f7ac53a65c6aa38cbec86";
+  sha512.doc = "0dff3162a710b458b367bb4ca587d525b68ac79d2d3182e8b9d2ca90ff72f89bf69153960400c344511449c52346c329b8a34eb788e11ed9a5319bb6bca89418";
+  sha512.source = "fb29b38d69d39f4c7ed04a3ebb114e49512abbf444f36fcd02dcccfdda22aa3800521c9819696c2828c46983f8266fc00aa59cafb35e26574a3403319d364d64";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.1";
+};
+aramaic-serto = {
+  revision = 30042;
+  stripPrefix = 0;
+  sha512.run = "6731d62d8a24c9f0d26061b8b2574a880df30df333fbe16408d0830657ea36f04f50c56b574de5eb081f490a4c5782595fe17bdb9208b6602c1a0ac81a1f10f5";
+  sha512.doc = "433018891123aebb201d6c4f2b00dd15a558344b758899f85b9bdc21556ad4fc4845ce72084863b243e42beba643c5ae4dd210b74e2588af4825e3c83d6d7997";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+arara = {
+  revision = 68431;
+  sha512.run = "142cbad66e19afd1190d4ce76962a133b6340a72d6dc5c77b4ff6898223a00bbbf4d4a9f1d089e5256084e6a277314d904790f55e35143a07c217ea2453c2238";
+  sha512.doc = "cbac6e45e0a580887ea8da3fb1273152884590a7b4a3dadf03676e89f9af056eb1f276e74d0445b059382afc6a7239edf8f9dadce549d3a6b55b7aeb244f63f8";
+  hasManpages = true;
+  sha512.source = "850f8dc8292d391940340db96b5d53efd145924848f575719503f7cbf7c3dd1b87d274fa31cefd9ff3107fd2424c65b47e79abe6fbe3798f5c57f14c7c0960f5";
+  hasRunfiles = true;
+  scriptExts = [
+    "jar"
+  ];
+  license = [ "bsd3" ];
+  version = "7.1.2";
+};
+arara.binfiles = [
+  "arara"
+];
+archaeologie = {
+  revision = 68476;
+  stripPrefix = 0;
+  sha512.run = "02768eb18bd866522380974e675eae530afaa9f0c0baf4e4dd6e5c0bcfef3755a54e79d9be2697b4e29cc633ec87c65179561d662cd99406556d3a66940b9199";
+  sha512.doc = "60136a2704265de25c0097e766fb50d89019b01524edebf6986db2c465d8dd2230f5d48ed5fa7b2d0c6f1ba5bc11dff4d2a171667d7743ad3d883e068c318864";
+  sha512.source = "0625c3bb08909e367a908f5f12f9f2e064e6beb251e7e79ccf0ff7fd15639e89040b4a3ee45cf28cd11b14559c1f1660812b78cca6d8dfa02796f9af85290be0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5.0";
+};
+archaic = {
+  revision = 38005;
+  stripPrefix = 0;
+  sha512.run = "5e841f4a8e5df375fd660c998d3d54221e6c8e383fe4a69fb082c98d62b44a1fab2e9ec88db37964e015abbc20cd0f2af5aa26cffd4fd92fece5e24661c0efa5";
+  sha512.doc = "457eedb06a3a09a73a2ce0b20c18b643530aa2659d7b1b98be14238b9d40e8a6bdc39085654e8589fb134921f40d211d93f553cab25d7901e40286b3075f268a";
+  sha512.source = "5a39568546651ef10937849550c3305bde9379737b21e24b2adbec532dee8192ddbdaaa77f2e6bc135d518f354c1b20d7c43bc03f65ccf47d423f4af1e75d620";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+archivo = {
+  revision = 57283;
+  stripPrefix = 0;
+  sha512.run = "0f6b7985d73ba3e62874bee7a05c215cea0008bdfd1b0c3df6795a2d6363ee2a209df956b4f9698ec93ee8d9c6bd62ab5bf3bf19cff78c968a97da58a80b5f40";
+  sha512.doc = "88cf002d557401730c035727251e228effdd25d52e9d76edc950d0f3ee639e2eb5bf623c77a4e80dd902b7095076030b32aa017c8adea9f57912ca9de51ab7b0";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.0.2";
+};
+arcs = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "65737905ba0a6ede74d8cb211b46a2e62b640d1b655f895095ad4bdecefde496368707142143e2f2e48849faa89d86a9e90a0bde64fe84b3c828e14462f30406";
+  sha512.doc = "2cf72d4ec304cfa08c1b3cc8df3bd9a6cb92a633a2ab783ac4efbb5edd6290ba256c86bc4a3bbc09d923a58a10e5f21f5d8e3e2b41b0ddce14406d29405523e0";
+  sha512.source = "ce6599f074d59530d85960b2a313421400f1cbc26b488e900a5b49d75f6b715a859b36de2d2e25c880407950f1170512cc3573b0256d69ceafab40e29566de78";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1";
+};
+arev = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8b6e88a41052740831fdfa03299f665fad9eaa0e45d1d235392aa0b849bd6ca03f1e18892c879d3a5289430a5d236b9544d617ea2c3af62a59b38b4d7ff8ce90";
+  sha512.doc = "a8dcb8bf0fff3be9c99550623f12651df09b151d6e28bee03d7aa80c7b0eb8c86603b4d8037232e4998bc5603ab3dd368ff7a262b7c7f62f2903338774a9b8aa";
+  sha512.source = "6c92c2f3ef59dcb93207ea90643d11aa8cf81850e2696414f489c40cef97737d00ee4444893669f12d4592c6573a71cb229c232b62f10db38195aabbe83fe523";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+argumentation = {
+  revision = 69023;
+  stripPrefix = 0;
+  sha512.run = "d18f62c0c6c5cef4f85b854342671ebbc9224475d41488058543e682e41230f61cea4ecb68db767742c30d92ae2af1270ef47624608a3fb93aa6f8031b12648e";
+  sha512.doc = "bd6e12905e35d15064a357a248f4f5dbf5d91e37d0e742be0cd360e7d6079122090f29341acf11584ab563355481aad7edbbdfe1fa6b2455aee2b67e263dbb6a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+arimo = {
+  revision = 68950;
+  stripPrefix = 0;
+  sha512.run = "3c84fc274ebd29dfa65a8db214ef2ea74bb22da21827844be3b5648b7f10cba81a73772ccffe758b19ac16e58a75b1eb578a0ec8e85957f9693858065665a085";
+  sha512.doc = "dc70491f5b2b5a900f3d6f9bd543974b81976907a7c3dd53fd7530e3d0a6d83fc44a61607b27d9644eeca6f6228faa171916e67fc7517c35d466d9c50a186808";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+};
+armtex = {
+  revision = 64182;
+  stripPrefix = 0;
+  sha512.run = "853eceb3256407c75cf7d74a514ab8c76f44229c80e740072c3fe2cff17eb47a99b683d089a30c759e6ec5fd14451ee9c94a290cc2606248b6e396f6ca7de5b1";
+  sha512.doc = "f26c90f18e534735f910f8ea34bce63f21bcb029b6b621398109adb4d99e6ef4470e76037a16b6a86b8ef8e4331267adaf3779772aadb1009d4222d500e26114";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0-beta4";
+};
+around-the-bend = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8fdfb83017cafe87778ea8a9e7147d6b73ead7019dfc9dc8b620858a67a2a02991e291d622aefc77723f6faa8a66b132313a100d298a2f6327473df4e0fb17f1";
+  sha512.doc = "acec7325203a96ab3937cb687e3265b5cdf6d77af5740e1e187f993fcdcbb9db743835e9ab579b6c8b0534311ba94f3d1591330bedf1c2f9eb9e6955ad070f9c";
+  license = [ "lppl13c" ];
+};
+arphic = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2d4c0f91dd483df95bf91056e4d7cbc28b681fc9f42704cdbff297ceb4f8110affbed879cc8b15061c309764e1fdcce01fd47c2d742df441ed191f83a065538b";
+  sha512.doc = "327dbc2cc7b4bad5e410dbb07dd2a2d5052dcb54c98310ffc3596c1e5b4121c1a12e3067b7074f209a3972cb51280f057cfe718eb963869bf05a76e17c528dee";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+arphic-ttf = {
+  revision = 42675;
+  stripPrefix = 0;
+  sha512.run = "f0559968e2659a4e899bb0ee1e6236f4bf7f4133c96c146a189b42fe0ce7f375ffc5c62efd8acffa68b36c92159c28eb54167a7625b606cf7644c0a072d7f8e9";
+  sha512.doc = "000030c21bf1ccd74ebc1c6bf8e46dc5d9f884480b2c31407353a3ff45a4d1072f759e9e31abbe5c9de7dfc68820fa359d42c5e980bfb7e9d408f015f8944aab";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+arraycols = {
+  revision = 68277;
+  stripPrefix = 0;
+  sha512.run = "faf429613ee1987b92b369dc357f376c1465531cec8f7f78c37099366fa80954930afd62c553760b71a2226b0d245d9ad9664f4e5383803471bcf4f63f419f7a";
+  sha512.doc = "6bff5add83a6eb8f0c697bdfc5da076c5a833e856abf0b023002a50a85dd1a7cc24e0cd042a2fd28c18a37a88ac91f4f09a5c4f2911cbba30026fbc03df06c71";
+  sha512.source = "9fe04362a179851b135af96b0eed0d229d19f2d4623acbbc39dfcef375be7dc682ef08af3fcbe146d7ce738cbe8e7e00e9f72d549966efa674433e3024738ab0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+arrayjobx = {
+  revision = 18125;
+  stripPrefix = 0;
+  sha512.run = "5cf6573de2bf55c1b75c2a0f38515ecde848dafcc0e5f0e77185ac039d0bcc4049bf6fdef62134ea5e4839570fc20cc6928bc9357bee0c4396f08d714eca8d13";
+  sha512.doc = "495f7f8f3265e349e16ad170eeda10296926864084ace743df54f5a4b304da6bc344bce901edc0fca8d835bd0f90943b192b0e16e3a8f5bc81e0f269f2b480a7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.04";
+};
+arraysort = {
+  revision = 31576;
+  stripPrefix = 0;
+  sha512.run = "6dd3c6a79c7b7e1f9a0fa29f2d7f4fda8c3aceb0b900c4e42773c81f8a49e84dd62ae24027065cf19cdff93d4addff11d0b25cde62f2d4854b84fec26eb98c61";
+  sha512.doc = "1070b880c7bfb6101fa9294ee8d1ab4c61b21af41316ab711c3226173b73249944533cf0594571f90215a46322b1ef07322daf7230d95e7c23bf21650e1d6047";
+  sha512.source = "a8a5d1506a5cc9a33f5393ad6dcfa7ee84af9de69d0760d90fc633391cd21f6d274995e372d91f47929b098d64ab5464d7d7cc2454266bc52972b8708e3bec98";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0";
+};
+arsclassica = {
+  revision = 45656;
+  stripPrefix = 0;
+  sha512.run = "9c6b32e43ff86bd6f28d23b9aab5dd90a423610b2f3c842462e88985c2ee88eec2e78e05cf3e0b91397009bdd370880df6db642816d7de3bb10a96faf4fa34b2";
+  sha512.doc = "84cd0583c074af45837f38c21815019613753890e056109abab3c79c774a7ebe966c35875264998398b18d7a7fc92ac6762dd72726e708193f699e321f296535";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+arsenal = {
+  revision = 68191;
+  stripPrefix = 0;
+  sha512.run = "f103fff41a3e21594134b9902064001bb18e0c85985ebc99486378c0929d11eb3c12f00e7e23ed254029bca78adb2061575c48e9406fda890eb732b3cb90f096";
+  sha512.doc = "72295197eca81954e733409239b4cc13ff9ae87f5cf5c402a8d2904edf2e3fb6686fe2a0ea8bbd4d0e2bc0498507c47870ae1ac3cc2d722713ea4b952613a345";
+  sha512.source = "214ebf080bbe11aa5c3fd088b6329746202ae1c46867fc6f1ac23d56ca22b44b147a8e929eb895c86834d6d3117bfc1e447e3759db9b73f4ba14b824a952b00f";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.2";
+};
+articleingud = {
+  revision = 38741;
+  stripPrefix = 0;
+  sha512.run = "30a34052cd9586d4b49d687035ae8bed040cc5bc2d9ebc0d96a035c4c7cc06625877a501e02eda9be5eb79643f009ffa9e8d2bf9d7affecca016ef3c6310a6de";
+  sha512.doc = "a7961a7ce16613d26d714d39bc441400cb37d7013d03684146ee9113d05dd821a23a1eda9f7e89601680959f3b473e31155f24003b5deaf60e069385c0681646";
+  sha512.source = "1217fbf4951d4e6a11378154cc030b4fa18e7ca6384bd1593e9a8adfb4a4d2a3161bace28c22bd4aa4ba81ff56d1e2d1252d9678ded0c53f8dee6294e8dc1032";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.3";
+};
+arvo = {
+  revision = 57213;
+  stripPrefix = 0;
+  sha512.run = "3a6236c3f5e07f3ad709c6a5e0f7d2c90574cc897f6f5d470aa1523b537370587b5942e1a8c581fd96e43e80189fb1c7c4a2475823077feeb929ec594a90ffa9";
+  sha512.doc = "3d3c6a92159b47e8dd5ae7360c06c8d5db8ccab609dd5f3db47db2ddc9d62badc3e6bd7c881ec5955003ac2b460c550ce56154cb2323ebd2bdb8205318a709ce";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+arydshln = {
+  revision = 50084;
+  stripPrefix = 0;
+  sha512.run = "fd676917ccedc39b90b48b531ea4ec5098b70ca854583a3266d4080dc78f59e37a743e63b738be370cb0ca650594d0878ab1f807eb6f55daec17ecead73aa4dd";
+  sha512.doc = "a809e2abfd26b11edaf8a5b23ddf01901f84bbd63b8fed7b6050a4947654ffada95bb697e13250038c6fb93db80dee4faad6d4493f05bb7f4ebb86dc7e9b9698";
+  sha512.source = "0be560bb0dac65951b177a34ba45c8199cbe75b64958b71649f09e5e7be73fe091bef6097a9502be80e26bd415f193e00579925b0be0d12bf43adfc0e3963578";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.76";
+};
+asaetr = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b44fbf1bb916eb9fb01c70a7302ef4028d04c84dc6a89a51c0feaca762da9cc95cc03cce6497e96dd64ad73e812fe59a12adb515ff4f561401131476e7df6214";
+  sha512.doc = "be0cd70f1b3035477a9b455328a8e167a5042e07634913c0d9efb995286165a1f41c1b86a505b3f23d19ec2f43712328f70085747d692bb97ea968c40ed109b6";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0a";
+};
+asana-math = {
+  revision = 59629;
+  stripPrefix = 0;
+  sha512.run = "2bbf3e139418db06578af5fc8d3925d96bbe1bd9d472a82d428a059b1a206db131734f1b0e762ca49c896f403faf279b2e47465061dc5bcf0eaa8058474017a3";
+  sha512.doc = "86b064ede8b8d77b9722d967de612e4a0e8758a29a6a3909b625fe2fa8ebe9551359a442376e8ee8a9dadf5d295d197328914411144c6f94e0b0fe16692eb128";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "000.958";
+};
+asapsym = {
+  revision = 40201;
+  stripPrefix = 0;
+  sha512.run = "9a683044f23fdec0547199afbc0f0c6c9de8faf01f09df38de324f53e91f446de867e951e187ec77bd63cc65bb92ba2fd7bc290d54650ce24e02b682cd10a941";
+  sha512.doc = "4462b37c6575ba0f3e95c29e1d84eafaadc562da19ec58a604bb6ef677fb9b9d35fa68a6f2c81d8dafc35dec9f904cee9d3fdfe0c2031de928862324e83d8663";
+  sha512.source = "54325810653a14ba0ebe67b92341fa151e5bade3ba23e97c67c2bada6bf43ab16d5e0d11eb4c59075c48bddd9eebe44ddbca5accc331e6b26081abbdb95e3e86";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+ascelike = {
+  revision = 29129;
+  stripPrefix = 0;
+  sha512.run = "d8c9d69ac49e632b7b303c0fcff53762f6d40a490aa1655f58525e192481b65b50912867b1cb16c9aba1d93483a6a2bd31e586683819a7f2b3db7439d46deadc";
+  sha512.doc = "0283fa497b53dc3a0d60960bd45945dd9b363c53a563139e911b8bb017a6f0ea7f46a95811812a679fe1ac5327c52e73f4aba35d26160041c61a1cb5597c880d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3";
+};
+ascii-chart = {
+  revision = 20536;
+  stripPrefix = 0;
+  sha512.run = "ffc1634e3e5313eb0cf04caaa227d6477cf81ba9b6eb887b2897b6740999f1f338b2dc53e6da735876f9c3b130394be59b0a285309d61909a73fdb0d6f28a8cc";
+  sha512.doc = "51b11a22dd963336fd93a87e2948d05f291b4191253a474b9d6f70ec31a2645801fb5f6fb6238f6a9b2979dbaba4a6ec8ac15a41c4e8867645dfa54408f18373";
+  license = [ "lppl13c" ];
+};
+ascii-font = {
+  revision = 29989;
+  stripPrefix = 0;
+  sha512.run = "e92e312e38432a7294c71a76604e5a3c2aa6b65937d39933fcbc9fc9b61e00a1e2f35ba739f64c29a3ebf6d2e388cd29da384a2a6456f71576101a1f12e36f0d";
+  sha512.doc = "2d681a41d213fe260e3491a3b410239fa2e025ba19894d133a27e47b417ccf27648aa13ae431b4c42549c1692cbe517f2595c2de675b14d9ea0460d469e4f036";
+  sha512.source = "1bbadf44599ad29f843ef17d1b437f951f5b167e9bf84a73600a0a9dc5633d94d76c91ec23493250ac894d9114c1b2d1d1f182690aef5dea92c9ec51c96e69a9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+asciilist = {
+  revision = 49060;
+  stripPrefix = 0;
+  sha512.run = "5c2e7938a9d2df31477cc976cfb549103c8f378a8d38a3624d3449229861fd834d462163df6e2e1f1fec686f513c6a194ccae9fcd0991820b357e12a1c32af28";
+  sha512.doc = "8602a9f8e5dc04a6d4a914f603e04ced8f5cef55c5a335087b8f0953d19d4641d43ef732ce299ea18590de89e2360a8dddb44f8ae76be6498ccfd29e4a680746";
+  sha512.source = "562efdf7665916bc124f8d2ada2d7087ffebb23885df6c3baa652ef24b8fb7ba7e2f4a5880922066b9f5c44bdb9c70ea67537c79676c9fb7004d2ce1f6c0d6b9";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.2b";
+};
+ascmac = {
+  revision = 53411;
+  stripPrefix = 0;
+  sha512.run = "f03ff628aced70ac2406863aa4b23eac26cf47fa09ee377ba78a8df3af633ac1f3fad8d005022c1555d957ec9d84f98eebf2dc97b296713a2edf5f0060d4180e";
+  sha512.doc = "e35257d0992717350e78e611f31f864651a1762dcefb76ba60510180de177fab02f634423b0f3c78c03394fe0eeb6191db0d534190d4f168922263526a85b1b9";
+  sha512.source = "3613b89f600ca51f1234f711816d041c4a3c58f72217b299505d90d0b7316606b3015c43edf3546fe93625dc628f232179ddcb0dce7a2f26375b93af7e6e7171";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "2.1";
+};
+askinclude = {
+  revision = 54725;
+  stripPrefix = 0;
+  sha512.run = "828a18ff7c2d997f25b46b9ce8626a749ce1a18989a292f7f44e9eff0c28d5819e6e017398e76a6872da6498a4ff8306d8f8e701b87b80f57f455d28389f7aa8";
+  sha512.doc = "a06a9170ad1637c35a25c9a0d89f3721ec350a0053cb5b85374fdb5cc67e7d4653e75c2a5f9b47d19700e3e9ab2d70e5c0c419f68715e664185bd30759dc0291";
+  sha512.source = "909effe3b7569cdd4a4a1fd7db12cfafab6c1ddc0987709199a051696b447f9b57ea0bece52efc28f41f49e2b81611e14e975cf93a2d5e4b1c202f84b9702569";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+askmaps = {
+  revision = 56730;
+  stripPrefix = 0;
+  sha512.run = "0f4d91a15053d40d329744c429540075c33e2098f6d9d07eccc5ad16c5696233dd01de89c61a7090dc127c3730ef04e24f8d56845919cd268ec8c0bc68d9c09f";
+  sha512.doc = "268915d685c8bea4388055487ca0d30418557babd01547457449085e58d639bb17787b6b5c97fa99301555afa9d9d11754196cd2b1dbf48b642b05a835b383b0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+asmeconf = {
+  revision = 69228;
+  stripPrefix = 0;
+  sha512.run = "1953dea9ef81dc53b06888b912a67de2427448d9d3b38ddc75ebf3714912ae0092d372f82e107b4bc312c0af032b73e6e056f4e64df29d76d01614ae339e9397";
+  sha512.doc = "fe442954eaa9726fbd7b1a1c58f799fb0c8fb0cff55dc0eeb7930a131c77470aa87db26c3178eda57d1fb3c3953178088a4fbc8d6e8260fdbb884b382c08883a";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.36";
+};
+asmejour = {
+  revision = 68629;
+  stripPrefix = 0;
+  sha512.run = "a2c37b69e147b7174335faa13522e00a2decf12f6a0fff45c6074c27299a5f71b80181d81265a1ddc7169e2f7652f60250e94222dcef1423de98ec30576aed62";
+  sha512.doc = "1a788cf31b7ef2a1cbf0a7d439b36ad80c786f4719a6d6138120d4fbf22208fc151300774da5718389fe22e0dea83fc8d9b41f0e96b1bb7426d0feab38b2e4ea";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.21";
+};
+aspectratio = {
+  revision = 25243;
+  stripPrefix = 0;
+  sha512.run = "1447c3037f5477aeadfe3e5fe18a004ffa1b8c5c18b7c68295b8065e32c5a3e6a044e7f9868bafe3d8b81e391b2c614e2153302ef34e1e4aabe84c92ada2f129";
+  sha512.doc = "5ee4918a3d90e9e4b51a2985352133331b77a8a87bdd8d41fab9348e5c548670ab56b5f0afc63756b65fdb6e45aa7594335995ac0d146d542b571eefbaa84d78";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+assignment = {
+  revision = 20431;
+  stripPrefix = 0;
+  sha512.run = "5b8ceaa313eccffff8930b4e1896c7aa069664244623baae2aa1eb3555786dfeb8af8245e56ca149754093f6d74d6b86c891cb9e52e67c7b76e2501ac206658e";
+  sha512.doc = "49198297494adbb538385029d41681e55bf64c89fc9cee7d923b7ba9849c039a7e5aa2c1fbfc15f06c1a93a3b694899ffd8988d1833fd88c6f5dd51379289a14";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+assoccnt = {
+  revision = 38497;
+  stripPrefix = 0;
+  sha512.run = "24dd03f444ff4dd627a97840837cb14288e9021117f93fbbdc4f79cbac9cab46d43fb93769d2f05970eeef3fafd39692eefe5d1b7bec8ae04f6078d7a4b48824";
+  sha512.doc = "195f1f017fe187a224bde969f45b6494007e4d05ab2e8618b62e8d40055b4ef401f5ef069c3bd1af25f8a9f5e1ad1cba22923e4d615d4f075e13a78a06752e9c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+association-matrix = {
+  revision = 64845;
+  stripPrefix = 0;
+  sha512.run = "6b87d01d5559669f6e2d63fc14427d950eba9d790070625cc6acaaf6e308282b7434bce90da78a41858b068121b75a1e1c0ec4453d287aaed94c9e6308a1b5ce";
+  sha512.doc = "e56de37acf6d8c2b53aff0aa78999dd400b18b3bb44ea40f21a7638e463405ce4f48d2041236897f7a281099c1c5d879ffcbda9d6b08d2b0d5fb83193803d157";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+asternote = {
+  revision = 63838;
+  stripPrefix = 0;
+  sha512.run = "bb1939b53b892744c323bd28f84cbe07d94c30c3f824e9d611f8b044fe8b9b07990fe7709607e7212ac8252d6eaef9a989447f270e26f16e074af0b9bd92cfd4";
+  sha512.doc = "31b443d1ad05880fa5c6878fed144a2b1cf20fe855188ca8d879c5d18b7285f16dceb76b2ab7dd6be2f401b898752a674f810af6d3b9ff906a6cd75a80cf51c0";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+astro = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8cf59f7de3ea5add30166fcd4284279582cbe6199bcb1ebd540688d03c03ccf03aa740602cfad11af9380d970ed7009e6bfb4e96c56d26036f872e82c02739b6";
+  sha512.doc = "df4a06e10e9a438393c7e22f746618c5d760a6095e285acd0b2918f58e234a1eeca9b49597d381a113cdcbff0f13e4c7108b9b400afc81e81757f4400ea484f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.20";
+};
+asyfig = {
+  revision = 17512;
+  stripPrefix = 0;
+  sha512.run = "f067e6aa1f3cb481e07f59781fb7d4c671a0b21a392ca7830d7fa19ed7a198fefd5ad5104ed3644eed484100871f9a8d36d1ae6e31d55487e4ff2846df618e9b";
+  sha512.doc = "d798066b8c545ef385a75c81d431c169668bd10ad072bc3e0ef1db7c0df903d51e9dd9ac2d482d109b421a868e9cbff577c18f52a7b4520b32985fafcddb66ec";
+  sha512.source = "0a62a885334ec00b04e47ce4df391d170f286cd90e7d68d940d0f3ec09018ef87f49ca793508592cc92268c1346ae48a54be65ee601f2dad7dca82778c9f7e39";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1c";
+};
+asymptote = {
+  revision = 67300;
+  sha512.run = "327acc6f4d21a2babb4d10ce3e888e95027e11ab0466e5e98ef3fc8140f0553cb95e3f961534c614934522e7c995078ceeac10a7a62a64801edcbeb090e54bfa";
+  sha512.doc = "38c4adaaf073eee94398ea11e7b9fe671278dc8f326689500abdc1a5ddd34b5be438de6686f830928e2cf879c1dec6c332e9c7228ebca1fa0c31284593c2c619";
+  hasManpages = true;
+  hasInfo = true;
+  hasRunfiles = true;
+  license = [ "lgpl3" ];
+  version = "2.86";
+};
+asymptote-by-example-zh-cn = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "34608d6412d7936a15bf649555683ff03c5021e1688c99285a6b7ecdfc3a43eac4ed32108626243d6e9b07c23c557f07762897a96501a27412c7c5d039747553";
+  sha512.doc = "a0087e5be69962c671e1972d9e7be12f76be64582182afe042693cbad92cf3fd027422c605dcf7860cd2e61f0b925860a50e94523b9ae2d1af7a8aa6d356c3a7";
+  license = [ "gpl1Only" ];
+};
+asymptote-faq-zh-cn = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1efc7098392ac5cad5eeaa0dcf527bd158e3f7497ff1992603b833ff63d5cfa61fe5e7bc33c5cc0c441c13fc03dfe1e18a334411be6ad2f5acc94c902e9ccf2c";
+  sha512.doc = "b7dbcf256cffae9cc8f5027934946929b4be7a8794fb8364892802eeff4e7cf970ca8549ef442a35f173ada61533b51c2da301bf2ce931107a7ce0c564ce0c60";
+  license = [ "lppl13c" ];
+};
+asymptote-manual-zh-cn = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c04fc953a0a9035c238b9f80873d9fc605b23b322e898ae55b8eda7537f0172076e512022b163e3cd397ce2e4e721afa2e981454db53511c1a7347a017185df5";
+  sha512.doc = "0f82e25773a14b0f81b34354f16931834d0496b2c6636c498c6af686f46e7ff93a274739a1a4c189433c9df1ae91ca010f0887081c81f2ac9006a105c7fd4ac9";
+  license = [ "lgpl2" ];
+};
+asymptote.binfiles = [
+  "asy"
+  "xasy"
+];
+asypictureb = {
+  revision = 33490;
+  stripPrefix = 0;
+  sha512.run = "a1ab37814223b13bf49d23c527543cb537e2224335e727e07e1f645a7f76a2f3ba1a275073c775463880b0e258e716b6b00d0df29ca944f1f22b3ac70aef4378";
+  sha512.doc = "68b060950fdad080061b8d2c1a91726d0eabee9aaebe322e983e0dab81df30c65d9d7d0cf32fb2847f504ede155f2c43f3ba8c00073fa425bddcfe7d47a6f000";
+  sha512.source = "883968dc538186507f4e81a466dd980b8a8a3ec088e25e7973c62e949871c79baeb909ef64815720004d503cad33d7f9de6c7ca0950cc0618ad2111e92870b73";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+atbegshi = {
+  revision = 53051;
+  stripPrefix = 0;
+  sha512.run = "7e03a9a73d8790f6603d53c11aacd01fb7108546e2d3b6ddbd5fce1e42d68ed9c23dfe41794b943eeea67ce0c598851132dd23faa95289789911cd059a8caad8";
+  sha512.doc = "8f6402dd0f36d4cc4a4674c0d0b37f012a7d6e557174ca3b58a7a2b33d89475d1e47028cc39d2b77c496bfae0751275369c5f4f49cf53b8c36fb60fce47a6bd3";
+  sha512.source = "8eee629abbe71332a00a7ffd41f8def262baef4bdfe9e314a4afa90015b30c77e291634f3e83d904646cdbe4820e3c6e0e6398383892ea26f62ad348ac2f3409";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.19";
+};
+atenddvi = {
+  revision = 56922;
+  stripPrefix = 0;
+  sha512.run = "49b0a69eb308e19e3ed97406fc1ded6e80f15d7787031e2b71cc41ca2e1c74c19d3f3832ae13c5f1af70abf9f2f201c9a7ef669ed2e58349a584ddc767059c54";
+  sha512.doc = "d60dae681800be4495c2690f78513475d98a4480364306eb26c16c551b0e984f135aefccdcff549e6702b2b62bb185ccbdacd85dd3c12e5b20c128d9397c0e8c";
+  sha512.source = "a2c6321e825629a75d745f0bd03cab168fb51b5c33d5d256a621847f27ec2010f0331c37644e95b2ee40604d68cf34772a3dde59b6c6fe340713c0e593fc318c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+atendofenv = {
+  revision = 62164;
+  stripPrefix = 0;
+  sha512.run = "04a6c644b9235dce6495c46e2bcc093c03dfadf279d354c8b43b81a0b4a14daae71e7105642bcc95025c55ce92094c01292be2fc379e6c0c720aaa9b5a21ca9b";
+  sha512.doc = "22249061d4340939e597d50a5ae4c09f8b4514ddcb0862003ec7fff7006bebb207b5926ffcc0d723190b409435279c815a5880c6fc989294f26098c3db15d1d4";
+  sha512.source = "7b457f3643595f98138aeb25090e7cfc98f2d613689428559aae60898f81d586d509b7124ad3fd77383f9524f8611ac8bfcd361391670cd689f1025cf0078859";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.2";
+};
+atkinson = {
+  revision = 64385;
+  stripPrefix = 0;
+  sha512.run = "8b763a29fbd529b91d586e00f13176c1cff3777541816a02913e57e8f8586357331615ba4d16549b9a98a0e049a42b2f49af39b3f950fc4845a46e37435dce2b";
+  sha512.doc = "f5bcfd015fc4292f4568e9d960e921739a9ebcd8f198f648323d475f6ae5d803d3f0ef77d368fa9fe36f53947908e4bcf1cfbdbd621e780221c5e8432ca9db05";
+  hasRunfiles = true;
+  license = [ "lppl13c" "free" ];
+};
+attachfile = {
+  revision = 42099;
+  stripPrefix = 0;
+  sha512.run = "526a279f3fcb309cb117327f4206e7dce8c49d39b85a846799bdfea5bf453d2f00e14e854a74d544e49fa92ce056cd8ccc7e03f56856a8e8562b7105d5fd19fa";
+  sha512.doc = "9f9e6572e70d348e1db71254a0c6a80cfe76b767801a3c18ad4517577b793b5388367b24f311f491f0dde8df38684b3de4a2ec7e6db67f1fc1ca7b4a9ce5ce78";
+  sha512.source = "a4bf69ed370f495f190abaaed8616b4a3ca14184987c6c4882451ec4dd6961b827d3c38d8c049ebe73954f5fe205f727124e447d2e3cf17abe1d95336371b9a1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+attachfile2 = {
+  revision = 57959;
+  sha512.run = "57ef4d0c2de0cb854bb91b14a55921851a4abdd60221589f0655afc64a01d4bc672380fd572e0d451b6bac7ffd66f407b4ffab5f0fa1092dc8fcd809c81b23bc";
+  sha512.doc = "3033a58688a822f74712d072be3251c58b96e9e370859effc8a4ff7f8b9db98906c471a6472b7b9ab4b0d9725a9b53918e8b65d5bdbbed56e737addbe582737f";
+  hasManpages = true;
+  sha512.source = "abd6284061c0f936df92479cd18c0440d654a8f6ca1d610f8763fc1af6668b3eb3d4efc2f4ff33a5b9192844083e55605fbeee2fe1bcaca8079fabf498a702fe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.11";
+};
+attachfile2.binfiles = [
+  "pdfatfi"
+];
+atveryend = {
+  revision = 53108;
+  stripPrefix = 0;
+  sha512.run = "2a546be6d2109de9db60e94bea3a63a3c7af8ae892c8540a1513fbe4bfa505dcbdde9913b7a4449727df0ccf6957f8010c5b76abd8d6310c118b269bdc7334e4";
+  sha512.doc = "5c5948ab7f0ca213bb5fe3ae056cddd392461911e2af7dfff133253f6aae970d525fc752f154921de2186c8a443fa4f90b18d23896a016ebc9ea177d6826613b";
+  sha512.source = "1ec0c4752df403e47c4f8d4186167ccb59d2269012d904e9de1ec54acacbdb84b571f5bd1e6b645f7f86972178db2793853701cfa180b66ae7edc1d1488958b2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.11";
+};
+aucklandthesis = {
+  revision = 51323;
+  stripPrefix = 0;
+  sha512.run = "54c6708b343c2605d7779561fb086b914f1a7a825f5556b4a36faee0c8ad29b1c8ed67eaffae223c5e5d47bb6e6a9aaae4c0c658debb7bfd196d9362ae7b8796";
+  sha512.doc = "ae73abe45b0aecd033df666f3095486fb29252449e840e9a978cf916a2eeec4a126be8c3ec60379408bd6f7322c8794ba1fa3bd77e45f1723affa18ec109d93e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+augie = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "a862fc140ee85e9f48908e7251dca78f6f328bb194bc1031ce7b521feabc62bb148764e7574341b9ba39a1bc76bb4a718c3cfa45bba7480aff168eb17661d74a";
+  sha512.doc = "434c1d88522ae41e8a41fbeda6685a059fafb8f6cdec26d8737b5f6a6ddcf1e4f2a443ffdffa6b62a74f4abd2ed2e947176f59e64bf5691debeb62d9d54e719b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+auncial-new = {
+  revision = 62977;
+  stripPrefix = 0;
+  sha512.run = "625ddb6342c2ed4e5491e63ae13619b18892bc5d2cc005aac489cf1b6d193a28acdff9404f51b4cc76e8950ac182a4f8d5845bad85fd4c4afbdf33e7b8c225b3";
+  sha512.doc = "4d3880a12e8dab72fa5278e4507bdc03786cfe94bfa43e81068629327d1e70a251ca58c7cbf6c58560c03b9e1e4d79257a674370e89c780f5c81589d54084270";
+  sha512.source = "bb35718db33f7c4cb6889570def1b4f8a47e05896a14c8867ff7dba362028017d4e64d66b31e2f2cef45b749784704ea6cf9c1731543c3277496fc6c128b08fb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+aurical = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1c48c36d6121005c123018cfe1266783288572c0ce8a9ea4b9b47ac28f46206de61b7a73804121f9a57c056c871c547c97ff10a529fedaca57bcb3ab78f3bea0";
+  sha512.doc = "89de4991373a50d673f569e72f4727bd66a2b40b385006c3c7e4605812e7f8d3d346e3b08be55241f9926a58b40126d123d6ecea912d09db3973985d0cf9e90c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+aurl = {
+  revision = 41853;
+  stripPrefix = 0;
+  sha512.run = "4688987b83ae65e15a74cb7960dc990710930186ec94e376cc3a74dfec9f6d75a51babd99438ff87a5f6f8e05cee483b569fabe627ef00fb892126f74749649d";
+  sha512.doc = "a58f7cbbae262c7650bc5147b400f25f0c666effdcf37e565f665092d1cff820d2d98652947d36f6940b8d16027336b970ff88ecd9f3500d9a39a45eb4a19acf";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+authoraftertitle = {
+  revision = 55889;
+  stripPrefix = 0;
+  sha512.run = "b7496b1ff5dc7544afa6e2181b9c86814671d42603c1f9aa08cc6d45e02dc402e225c44fe554649251b8cdb3dfd81f1b0fb245cc8ed56204d2bcad16e5e9f9bc";
+  sha512.doc = "a1cda29730615ec8b81082f14462c5864033e1b4cbe0b071e5cdc6d9b5393b2e701ba6e6665963170bb99408f03c8fae38fc17aeb2de83fe9c8fbdad8273482d";
+  hasRunfiles = true;
+  license = [ "cc0" ];
+  version = "1.0";
+};
+authorarchive = {
+  revision = 65777;
+  stripPrefix = 0;
+  sha512.run = "d5695336d18c4b84ef2b611b9ebcf502a974ed884625a2296666fdcf54a757f6682c0f9689713d134c033b1a9cf743218c02b05c0b2217c5c2ad5eb5d29f21bc";
+  sha512.doc = "e8ca021be201da6cdb5ec980f3724d38d3cf4c5fa4be8fd08b286ed9f0ccf2db1f0b8e3f14e3cf6a591afa4c71ca4cf3f962d7a09466000377d51745b6600501";
+  hasRunfiles = true;
+  license = [ "lppl13c" "bsd2" ];
+  version = "1.3.0";
+};
+authordate = {
+  revision = 52564;
+  stripPrefix = 0;
+  sha512.run = "c67f75eb92a937755ef0a1ef0896ae3cc1c256008d864572503d3e9d3be1321d25be59e76d4d3ae443398612233a328b1d6e2da9c103f41b30eb088208701308";
+  sha512.doc = "156fec304fa95388fdbb386153482016a4d78d4862943bcd6124466b12df920498d5b42446465fc0f70da6353f58c329a27a822efb5cca8f0c4d7fdcb3239a02";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+authorindex = {
+  revision = 51757;
+  sha512.run = "75e35298e4839f3975824624c7367504a26dafdf4b8e1d5238e2575c821f652282cd9a6e58fb4296b2c0345ff104dbd2281135776718fe4d2ecb76110946ab9f";
+  sha512.doc = "a6c48d89cfd854d8acae47e318bc3951f8e81434d9a81901c8a7b7f1c25188afb013b94780ceb201e81b5d10efb7f5c24f5b5e4c8d8379aba390431707bc4d55";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+authorindex.binfiles = [
+  "authorindex"
+];
+auto-pst-pdf = {
+  revision = 56596;
+  stripPrefix = 0;
+  deps = [
+    "ifplatform"
+    "iftex"
+    "xkeyval"
+  ];
+  sha512.run = "5c1f85a0ec5aa4173181b087a1f5f8e30be6d8c21c3461999a85b42032d45292aa6f8aae4922a5e97d073fff5b2c9d114cd30f5d5bb73ef523718e891ce59473";
+  sha512.doc = "73d6f4b2e298eedc537a46c1e69bce9e160eb28e6bc2f631596a4fd3aa658d8b51d6dfddb6748b7e629fe564a2ced5e55bcd766650616d936a4197e368b2fcd7";
+  sha512.source = "199e9fefcb2f96f1ad9e33abeecedcff9c72f20614c48951197703ff65901763ef88f425af08021b1843f30c3ee8e3a9756095ad4b165772b829a29c6e5515f2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+auto-pst-pdf-lua = {
+  revision = 66637;
+  stripPrefix = 0;
+  deps = [
+    "iftex"
+  ];
+  sha512.run = "7d9882f2c80021409602f343e99dca9613f060056614f2fa8445b4f427f53287c4eb95af0a252ee3cddb2d6b47e1ecbc0ee3032dd55c209eb946b686f8037023";
+  sha512.doc = "ab6cc1b954ff26f5d7b44f12cffc7aa2d5ac1aa64e37a68a5952616debeecab0e34dd2bcb6e06a3f49e90d45e9b5f60955d8b62cb8d124ae35625b398e97fd44";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03a";
+};
+autoaligne = {
+  revision = 66655;
+  stripPrefix = 0;
+  sha512.run = "b590b6f43bf17d54595c3adcc6de0e5c6780efd8ee68efaa5c2990f3e9e79ad6844397d6c7695d3ab66d72d4eb592c1455e4234f7a40efdbf4c788bc45216442";
+  sha512.doc = "d043ed183b3e30d35f7d4e6a5b5f094ae5bddb4e2265294c02c0888cf2e78fceb16b14cabb5b5d759b5397f58da1111d5fa590aab89a59ce13e3e13fb2e3dc91";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+autoarea = {
+  revision = 59552;
+  stripPrefix = 0;
+  sha512.run = "dadd69326335b6fe6e425a867e2e62a0b1df2f3179801bcc726c6ceebc15c24e3a7c9ecb3034209e25e503be47a9ad8639addfb628f720bd0c0d64c15177043d";
+  sha512.doc = "1b0f6ab0c7b1c69b7a802e9685db50e6b54361acf68ce2c2803419b165be1dd01f52a5b3fa9ccbe273e859509f7b7faa0c7c6b88bfec8f51f0bb66adf7b94e90";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3a";
+};
+autobreak = {
+  revision = 43337;
+  stripPrefix = 0;
+  sha512.run = "91cc17692654270bba9536ea9186ffea2e7e9a6e9dbf0ffcd9821c8b3ec470ea3222af2a1df05d85e47d65fc1737cf2dbeba150641355bf826e5ad2da90db059";
+  sha512.doc = "0d06f75e6f4fb254463ee2a075d106c14a06c5f7fc25b5047fbeec0e48ca9faf6e136f098312811329db1da5f9fffb6dfd45abe6eea9ecf682f4fe99f0384178";
+  sha512.source = "7120382c7974acccf1a49548ad8e654b945ae2ecfb858b37ca871fb7b5b054d8554c971a86c511d03e2ffa91e5cbc6d61cc743da51b0a9de705f74c0b9c2c7c1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+autofancyhdr = {
+  revision = 54049;
+  stripPrefix = 0;
+  sha512.run = "3ee2452c80ba671414a1669e0c47c7069189dcc0dde97bb33f94e77251b2ac8511b7cb79fd5866c2d3acfbe7768e20f715e61a6303a847ab82564743fb8d2a2f";
+  sha512.doc = "1fc9ac9d47d65eecb1a6736aa5fb148a6309fa64cd18053b038483d484f974f3f1aafe8afb03b88921ab5a990b78a2aa9dc6d7149884a550c57340218f72159a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+automata = {
+  revision = 19717;
+  stripPrefix = 0;
+  sha512.run = "09026f967084d5f1804a32166e854ac410a768f6b4654d9ea9bb69dd29acb8a3199919daa1fd6dd48963ea5d6454b9b9d8263939e5af81a8f07f66f08b5f4835";
+  sha512.doc = "49c6515e979a87ce270d32b367c5800acffa4b638a8bed3e20f3e74387c2e7ee4ae0c2ea8b232e2ae57d0d0a730424d18911835581c0c274732f3d36f650693b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+autonum = {
+  revision = 36084;
+  stripPrefix = 0;
+  sha512.run = "3a663a53b4b4b53515978460dae1ac275cc4e3e6981b008c78b875e3e47af8abd950cb35f6e416ab02507e498bd75d6f4a775e2b429d668d02ebaa4bfdd03f25";
+  sha512.doc = "2d0c515fac8afb219aaa1ee270b30bac09bcc310afcad71ff6ad2a3448187733718c03c304c09a0d631595d36043dc3eb0b6849fce0e4c3bf7f5d249b15c99c2";
+  sha512.source = "5c20017e3008ea726979ca70272923d9c62a5c36367fdcdf9d62e141f4822201e2cd36a9b4c58a6591568669daca65d17cbb78e5382c01ad4d624da7074f4010";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.11";
+};
+autopdf = {
+  revision = 32377;
+  stripPrefix = 0;
+  sha512.run = "f855fbe477986356d34360876a4a6613638255e234ad0210cb035a1f3a9b9b827ea140654e2001aa29ac09d7b8addf8f872d34bdb4d1700ead2f6e6f083cb2a6";
+  sha512.doc = "d2c2ecf193f03f4f568d2304128e50f5cb5964a6c0a2ca8b739c59b9d3e80637134b5ca91e1b5c1971db11eb54a086b3eb888b6984050dbffa22a166c6757e39";
+  sha512.source = "fdec2bf2079746f67f3ffb790eb2e10a7dc884fbf68b2c1a6ec9c67ad0ed411d9ff87baa89fc11dfbf9172bfcd81b411d8aa223c209def4fda6c91a4a9d32ed6";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.1";
+};
+autopuncitems = {
+  revision = 63045;
+  stripPrefix = 0;
+  sha512.run = "d41c5054417b511487beedd379f480f3869e67b747339837df5bf029b58171791ac8cb1c7bcaf5301822ba9585138d68af5ca080672d4ed1026086519fea1aec";
+  sha512.doc = "9c88cdb757a53e89bf7625fad0623154ea6101ee8c9cff2679698d0f6144d98a6099a68ef3fb1a31e99e7dee92572e34654321e44496e863f1444feab8a6cb1d";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+autosp = {
+  revision = 58211;
+  sha512.run = "67587e8b456257be9b924a5bb8c8f4def22fa9aa9678663975ef74e346dc186ae7848a9dc043733cf1244f254750ef4f34204575f62195d4b966ed8336781bce";
+  sha512.doc = "2905669b9e2b61749cb7b1eaa02be889c4e8d8adbd78b126e7ee6d894f24f623c888a24abac1d163f3332c5cfa9cd1f64d0de95200350b88a7f47faeacb841a6";
+  hasManpages = true;
+  license = [ "gpl2Plus" ];
+};
+autosp.binfiles = [
+  "autosp"
+  "tex2aspc"
+];
+autotype = {
+  revision = 69309;
+  stripPrefix = 0;
+  sha512.run = "f7bbb705f28bd5f546125118c48fcb2e02043ddec76ace5866206a3b047448740db06537d969584197de375bc195a8ac5712eda8bc00633befc102eee7c4e538";
+  sha512.doc = "a64c7184ae642968af2ff85a08634b04d526051f798c16a2d3ac1c42f7a948de11fe5b83ec9d208733a7e2fedb190c5175bd253d811c9a6838a5a3ee45768317";
+  hasRunfiles = true;
+  license = [ "lppl13c" "mit" "free" ];
+  version = "0.5";
+};
+auxhook = {
+  revision = 53173;
+  stripPrefix = 0;
+  sha512.run = "8ea845a19818df2df7939031e7b251b4b4d99a17c0d1b8177a592275bed6efdc660266964e0639222b86cfdd897bcf13302f1477b997ea1a06179cdd44aff0d1";
+  sha512.doc = "7c4f850d93f8a6d25a35e762bdb2df26384c75ba1cbaba06806964737badb2f7c8ba3192c62df7e7f3de12c6fa117ebc525c735e696a9cafdad943a8cfeedabd";
+  sha512.source = "f378f365c8fdee267224d092b35cd2bde971302cba003edd24b3f0a06bbd59e077096580e65480cb66adc6488aefb688ea423d74334976dfc92168688514e0b4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+avantgar = {
+  revision = 61983;
+  stripPrefix = 0;
+  sha512.run = "c08c987c385bf9eeca0f4f5b7edcd41570c81f18751593824da8eea770c29d63725bed100fa2ff37a80a5c70086533ddc1e91848d5ddeedec3c5c669907ed20b";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+avremu = {
+  revision = 35373;
+  stripPrefix = 0;
+  sha512.run = "2541e80c0dd798675164cace381730c75268d5385883163b67230d49022f16c9ec72a77d602e8b5094db31b1d3aef2f0f71da91ed2f7eb7fe1039117f7488cf3";
+  sha512.doc = "12c97e23dc853a971b27258a7666753d019620e832a06b10a49a26f0f30d7c6fde83c0e328e1579b62376f2e9cd10b0b3950fd6c4ca89041a988fedd4c604acb";
+  sha512.source = "1d6a7f16cacd937490ae5e7416f43f4f9eafbf053f6e35d498a26b8d4092ffe79740a12d96503ee5636c4d1d8b3bd02653b4839b957cb91cca672914bbe98899";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+awesomebox = {
+  revision = 57349;
+  stripPrefix = 0;
+  sha512.run = "4984d58669576137746518b68988fd9837b5ef133eb8da948f67bb0d5f775ad961055871bb46084e420ef0564b6a4796ba81a093be93f667f959a45ffc0c6174";
+  sha512.doc = "eec717fa5bb5a0f0d15cfc39d2172f8818718f6c7037fe962a0e811c131cbc91d3f3167077ec413d565e6b0b782f5b3f77b38257caa6529a6f5db7da8e163c3d";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.6";
+};
+axessibility = {
+  revision = 57105;
+  stripPrefix = 0;
+  sha512.run = "9b42a40556f3432e045ef35b23fb7fcb6ff295064645e5b9331d0ce99a8f2bd232d0926b46eacb5598da112dfcf3673225efd655573523dd504767a06a42686c";
+  sha512.doc = "f3255c9d6b1eb75a501e5c36cece49cb72767e467c0853465d2b8a39f011138d7154eab2fa5287f9223b4f535aad5c2db25d2f76c286376499c71d0ffd120699";
+  sha512.source = "c5ef10d286eccf16b270c8b487e91270cafb09ba10a88a8e0c925485a380c18002d399857f7dd42978aee72f7b1889c5dcde7ffdf2f5626424f31fd99a452ff0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+axodraw2 = {
+  revision = 58155;
+  sha512.run = "bc9923a9614ef9d7bece20e682729347dc942470a927b40736d6868f02867408b5fba51b117edd8745f96df23b9c1e93792d321291db13b7fdfdae0ee32bb7fd";
+  sha512.doc = "927e42358d543f46ccabb8184e35b6f0a5848783ce9eea09e6c780fc83955d5f37b998254153b1954cf1a59be6cfe573a6c79c2c328ab2a22a6e5f6764a50fa1";
+  hasManpages = true;
+  sha512.source = "3c2fbbff234836ffe40edb7f38c77c5986cca7fc68b3dd7672bb4f1ce9327a12fa8c51d38461d914cd6466bac8b2b578a151d09d4e84dd903530f7a545d707d9";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "2.1.1c";
+};
+axodraw2.binfiles = [
+  "axohelp"
+];
+b1encoding = {
+  revision = 21271;
+  stripPrefix = 0;
+  sha512.run = "b33280f64e37f300c92f9bad4372c13dd34e3dbe5fe47f2dc9fe0e270f33eaf5bedf9485293a74a6e0eb87b65f44fb66a286fb279a3d2c390c463e6aecfacb57";
+  sha512.doc = "4bfac8bf2a00dc61a007c10654cb7fe539c111170127934cd3a64ecea9ceed3fd04ac249cbd645d89400bef6f4a3527d1db04baa88eab88eceee2edd48e64393";
+  sha512.source = "7368dec012e7dd9fd948856aa0b901be48a5800dec417a1511510e184e7543ae9d76acf46a12ea956b1b27367b41309923ce5ed3bdb320399572f5dde737543c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+babel = {
+  revision = 69343;
+  stripPrefix = 0;
+  sha512.run = "8c4b15316808e7de5c039082ecec99cb1d2ab72909cb5c85899180e55d7d425db4440fe6fa9b9f801345c34d55fcfaefba2296d424187bf6f809ca1dd96245dd";
+  sha512.doc = "5f6a02d13ca3e1104587595edffec7735d84ae5b4686692db04325a1bf3b82a45c08c8fb94d6cc79b0da02778e30f7eb8ff0473fcbb30e260022c647e4a8fdf3";
+  sha512.source = "fab559d1876e220830972bae45ffbc2f25c1ae0c0d16f0ba4b857bac5a6f92316bd45951b2fc4c718f0fe3947d88afa0aeaee813787b23040bfbffaf88018850";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "24.1";
+};
+babel-albanian = {
+  revision = 57005;
+  stripPrefix = 0;
+  sha512.run = "8a98ba1dc08bc2bdbba0793bda2a07a6c248543fdee56cbb047229d1cfe77cdf616c0ef023b0a74f877d9863768065f0e256ba35a1071e0dd3f2bbf2b47b7ebe";
+  sha512.doc = "d26b9d933bbf0225f79bd8180f9dcc2961ea481fef7b535267034296062f8879b53ca47ed6b512fc724b261276be6d92ce045ba0c8bbdba0149cca6f117be8ea";
+  sha512.source = "74212f36288599d730fafd00dc50839cf0f12283ed8653303471d2cb64a57217b4792f1000cb44411c7d5031e4597db67368964ad318e896987103af8e21f838";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0d";
+};
+babel-azerbaijani = {
+  revision = 44197;
+  stripPrefix = 0;
+  sha512.run = "3f20954607195d4804b4bd90d7fe5baa209d5ffac6dfbe5f758306bb7c8aedd1c4c92675f5dce7f634e7ceb2b65e9c3ead0ebfef730bfe2dbd8c0ba17d3079b0";
+  sha512.doc = "bfd4434720b9676e253f69144aac9a07d6bd19e3a4418ae74269df70085391444ac46556928f131a14e85b87211fd76521b67a457e7319eedd3781a215efd962";
+  sha512.source = "b3eb9fdbc08643706a2dfa50daaf27a687c593900a972f89029aeebe08e2a1c4fbea08a848224b198ba447d3ad3a62459aeb9db2c00a0f3f039a16c863ebaf0d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+babel-basque = {
+  revision = 30256;
+  stripPrefix = 0;
+  sha512.run = "40079f02225f81c8838aee6179548f3fcb773fa8e031e07f30df761f298b9980e3a4357a8013bd7802c688a192cd9ef2102be1b6e8e1f3efcd68769a9e5a5a2a";
+  sha512.doc = "e6342328d62cb0232d38e10b3b38cd4d75c55a5d31d702c167099a2bd4122e40c5e3cac8a9c2940a9f9893d7aa2594b8322cf469924b97e903cab970dee81c6c";
+  sha512.source = "1c924232920a969fa48e6d61bcdfc5150cd1afcef6d98cdd27fbe2e0acb5b7749d2b2dea77db88125128b380f2b4ccca4d49d1d140f2e96880e0daf2d09c2d50";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0f";
+};
+babel-belarusian = {
+  revision = 49022;
+  stripPrefix = 0;
+  sha512.run = "5856582f8bf6a98a4fbd560bfca82ccb226267e249f0caf8afc775875d50ec204ea613320534a63062dffd0e050905adb24763a95fec2ef4e8faed70a400d976";
+  sha512.doc = "247d5a3b99cd5a377534a94fedf47f6710d32d875d3208b1516fdc9acafee70a14ef1dc37600f9da53f806323d0519ebb2c4e288e471363756b7b819751373c8";
+  sha512.source = "82262f7775c22a908161a7a2d65caa8662c62ad759db792a6718dba043804b7aac523a8f3eab2dbdc3882a88c55bb641b862f3f19e9c4d3ba1a0f4298db9833e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+babel-bosnian = {
+  revision = 38174;
+  stripPrefix = 0;
+  sha512.run = "bef1defaacf5232bf9cce6c1a9956c9a42d35a2c2b6ddccbcca3938386f4f4a61a0cbcba74b930dfad18ed211374c3667120c6706ebf097c56ec3c5915ccdff2";
+  sha512.doc = "84238e6b38021582de93e9fe934bf608e647c9b4cc0a066b4fbdd2ba98c8e6531b653907f9bcfb79e6afc9074b4a079b5e419db25625d40a76a8ca8e55e81ab1";
+  sha512.source = "dfc18e55b30620e27cb8809259a6b4790b94cb98b334a69cd48f66c25696e2df8d38dc5a1d402ae8464ced727752d96d8b5abf18522c8bbde4ce1f6f8ad73c92";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+babel-breton = {
+  revision = 30257;
+  stripPrefix = 0;
+  sha512.run = "bbcfa22674ca1d4a8e23f179480f9e94a50d5b460b8b0d27365c9166adc02a191253ef2d61d6f5eaf5bc61e73faf5d307378898f1d6b1b748448bbd8a36ea141";
+  sha512.doc = "3b47653b26901dd4aba1395c61c9dc01d43ed490c70ca04ba7d1cc67ba7b23b658db32b7a5fef085b236a68bcd009dc5cc5687e3dc2dc8d246ab2ccb8d391b42";
+  sha512.source = "8f381a3955780617f9738b008e6f4490632a67c70f16d4855f15ca59981dadaf72f7f15cebe10a121bcbb894006c738ca1872fbe33bb256c8145b22254236b67";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0h";
+};
+babel-bulgarian = {
+  revision = 31902;
+  stripPrefix = 0;
+  sha512.run = "0c838e5c5cd010fddaec385376f9eb5fb10730e918dd28f58987f855a444d91ed2e66c0de46c74637d134d72f7e348e538836df33f6255a14ed51d0e8d5e8a3e";
+  sha512.doc = "4dcd92a2088e737972f0663fe5161883cae901dc82aafd1bd33f2d80a852fb51d6229c95cc655826bd17599a7152b8a7bf0031eb046530a135e8bc5c9c74b2dd";
+  sha512.source = "047f69cbdedea9070a002782e8d1b893aae71adaa2e637df560ab8a176308faf8d1b8b52afda8f38f264783077a227176eacace9484ccc0af2a4a7615460c7a2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2g";
+};
+babel-catalan = {
+  revision = 30259;
+  stripPrefix = 0;
+  sha512.run = "728d847331f1a00766cfc2818691516234b153182f31ad2da024ec3194cc384a41ca89cc67ce66447191188dfe088d1dc4c8af3b2e6952931ec7eb58737c4bca";
+  sha512.doc = "3184373d85b1e9bd76588318372ced328d2ce7f6d4f45bc5634671a88314d1ed18cedd968e59dd5203b4d77e6d3576f36a654b1a8bbdaa106d47cbdfb825e452";
+  sha512.source = "ef15d0aca46af936141fa2d47c6b794ce85f2c3fc9adf18b5ca4b0267292f24d1c02121d5189f7cc9db98e0ab22a5d4ec2febc32b2bec5c3c5923598e869878c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2p";
+};
+babel-croatian = {
+  revision = 35198;
+  stripPrefix = 0;
+  sha512.run = "b5724a84cd180e9de79136ced8bd38717dcb4e932dbba4e20fc071ba9f50fb35cebe83d4a95ec6e8ef0e09a02732cbdc8b1a71715c8a5967393f54087ba4a807";
+  sha512.doc = "d5e40e95037c3035589b093037c563b3737e061369f27ff5c51d620e0655dd075f413b91434591e2130849d641c1ac59469db46be1d8b0761075424c468668d2";
+  sha512.source = "fdd4efb6d24bc9560e14f9e02d231ac636f2f69249d7dea9c07b337f0d5617c754bbc9087bda5cf1f2da6178807e46f015658b3fc2d04ddd5749dc2643ef4ed0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3l";
+};
+babel-czech = {
+  revision = 30261;
+  stripPrefix = 0;
+  sha512.run = "0cc0f07fafefa6d7ea1ae1b2ce143dbec124fe96b36221f1b5a847fd0b789d1974b5990ebd93b8ac0607f63956948bede25c7e690784ca7e9638f48139585a32";
+  sha512.doc = "1575fbe0d70725e975cdb0c1c5ca685985d91f23e4a997af4a0db21905ac34962f69653ffe4084065bda70cfbba0f0a1f0885d3afc19e98d0045ebb68cb545c3";
+  sha512.source = "1cbc5de700e32ac2600a50a85f6437b7bada601734753a8ea62b845f7500880195625e827be41e277d76137ca3dac05b230e64e0edcf1807cae2079feceff8a0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1a";
+};
+babel-danish = {
+  revision = 57642;
+  stripPrefix = 0;
+  sha512.run = "201afcbdb9b8d9128cece15ac8876e8d9bc261ab6c90745e52a95bb58fefea0b478a623027b097875d831fe5671f8f1f16a2370dc0dfd92ec3e603436e366e1e";
+  sha512.doc = "5ed050c01207e110c475abe825e5299df0f7927476141d81cb31fcc8c6dae1076e855d3590aea0812bc2a15949231163c24f0039620f3a8f41cd43bd6a8a0840";
+  sha512.source = "5c9bc598da8e782acf3a4e3ae5e93acafdad34fd68962436ee7a5acfcd7c234863db5faf9a3c2e2b87814d235883e3e85688fd0b3f514a7d57977d1872896884";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3s";
+};
+babel-dutch = {
+  revision = 60362;
+  stripPrefix = 0;
+  sha512.run = "bef13adf26cbbd16604af041fc7af866c82e88cd9d7d05318abd10f7d6f0ae718e1186f5527b4b38f1f099ba5da3d85b5e2f6d1ac0dfe8fe64ea52fcf6f06df1";
+  sha512.doc = "a78535f95bbbf6228014471a473a7e38b2cfa2da0160adb906b8f75c803b3e9396ca52322100102bebc179ec1e863a78c1b102ae932ea324ea58fd57bf9e9b06";
+  sha512.source = "724746e2e05c5de5184125068b2637c14c58c83f86fc92d75521089298a26290ecebbb6f0c61f7452da659dbcbfa1c36789e428aba500fa2211e354747fb017c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.8l";
+};
+babel-english = {
+  revision = 44495;
+  stripPrefix = 0;
+  sha512.run = "f570d2aae8a97ba0762fc1eab75dad1f17c4ac582a351ffeb8e56a136b789a38b7a6519247ba5981385f1a093101542942b3bd073a5097336392929ed40c9e39";
+  sha512.doc = "77d6b482407ff24095b1076673316744374e66bdbdd7ebb767ec66ccdccd6ed5bb27ecfd0796eee210f1a888c82ad2eb4b9d2142c427bff137bd139c4cc53ec3";
+  sha512.source = "ce636f5cca9aa33ad7414432fcc46fbf1873c4b1576cae8c04b8cf15381f4b6ea54e0621f297114f302ae172752282daedc0b59c15393e1071f8542ad3baf628";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.3r";
+};
+babel-esperanto = {
+  revision = 30265;
+  stripPrefix = 0;
+  sha512.run = "0c3be27d02d4c3157f2b0df0950e0814db3ffbdb2553d2c0f176893f3669123a9130874e93edcfd86480b785bbbfda35f9246dac3b4a0779da51387b0bf12ee8";
+  sha512.doc = "166c1b59511b5a01cac11b5cd76c84cfa485c2674b390a167ff165bec1326709437ee843f664fd4ac9e61338481df9e7f3026189f7c29c71778dbd1df98cd35f";
+  sha512.source = "f2fcef5841400c521415c870ae1641549eb702944ebd404b96ff9d5b52ee9c2d484662a50d9b410f62e74580f37fdbd269b3650cee0572b3096e4b0365787d4b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4t";
+};
+babel-estonian = {
+  revision = 38064;
+  stripPrefix = 0;
+  sha512.run = "03357f8b0c101e5e186fa4211a971e625f6970a3129a2594a611c74b77b36a27a288d2da518d21e6e2e5d98bb82802b2115d47e31e6258f01c003be854090baf";
+  sha512.doc = "ca732f4b6ccb9ae27f99aaabc99037d9f3d04bc170b9a8bb189a81b6bc9f55fd757c5755bf51ff423850f6b45c88a5645f75a462fc9d9e9b989fa04c1a2cc7c1";
+  sha512.source = "47e8d53d379ec383400e618873d800bbb6dcd8eea7807e31173110d5d7492f52cd4808a288e53534a2de578c43a5ee4eceef690bfcd56cc11e863919f86ee8af";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+babel-finnish = {
+  revision = 57643;
+  stripPrefix = 0;
+  sha512.run = "ed0dc79fbf6cd992bb5ff3df46f93203ffcb3ade34c6a613b5b22bf5effb98f78fa85d9b915130b304df71629c5a8bd68a4bab23ee772a1068f7184fa27051e3";
+  sha512.doc = "c96212780651c9c0c831e295c26f678c80724e5b923d69fc73bc1be39e369a19243b42e5252dd4c0a049fa0c4d25dd611bd470b12a4b55dec4520d016c21a5f1";
+  sha512.source = "11bb4bd731c27af0e11718a55793f7a22957b65e2ddc988e6e3ddb5cb6def8fb1d9ea9f235bf400beeb026f220a628effd612d04d416abeec2e1c39a001281f0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3s";
+};
+babel-french = {
+  revision = 69205;
+  stripPrefix = 0;
+  sha512.run = "ed7e71eb62c61cdc41c23a0e351d7f34b3b90fc245fd56129325774d64755e1bf42e755a295eb99ff39ad300945c3b32c514eab53a338195854fd9eef2c2c347";
+  sha512.doc = "fb42614164d9231fd23672f9f548eaad2501d416c51c2a08c5aa47085111140f1fb1f3519322d17f1b13601238b6167dac92669af43cee67e0a8fef0934d2030";
+  sha512.source = "8ccfec652d691199d0e6f51be21e6b4f77f49bcfe83c168a072443f7c16f518aac34b3221efbf2bfe1f8e5ac30e6db22b556bf2a4708d232b077aa6c52d190cf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.5r";
+};
+babel-friulan = {
+  revision = 39861;
+  stripPrefix = 0;
+  sha512.run = "e6210dc473c3d71759f2faf1558df2d6a7c646485d85cf0113074fb68eaef23b2e44eb88c9fd35a7a7929b408d6574f7230852643366bccd29afee744e0b2d07";
+  sha512.doc = "0ce539cb0b6cc7af830c7413545f411e1291491fb26ad0451e7caf1346da9ab188a457e3292efe9724070e77f67e46e06293dbfb40b78a1328112b04d4a1fd77";
+  sha512.source = "1e7e241350d499bd0bf28b1c190b3c73e20d02be12612905305ad53cead422e8ea1b6b0dd633190170d7ab2ac2802559693597a8c6ae8527a7fe83af7cc61463";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+babel-galician = {
+  revision = 30270;
+  stripPrefix = 0;
+  sha512.run = "1c8aef52e0eaba8a55e6c0bdaca4ef47012012a85d38ed268207227063d042f2f0b2cbafa3d1e4d71432e3ea6effd2a781ab0aefc536276de36a95d0dc834b68";
+  sha512.doc = "a60ed8ffc43cb56aeafab8d09e8235eea9482ff8cdabc00da68938d980b20a7067da3286fa8ce19eddf9276b51e78dd944545cb8bb891bc13c31cffbab39544e";
+  sha512.source = "aef01bd2587b5a452874e67c52bb4adbd89c5203bbe9a338e85449831434cbcd58415afd3d31d6e315eb91dff955750753bdc9cd38e87e3aded5350a350df547";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.3c";
+};
+babel-georgian = {
+  revision = 45864;
+  stripPrefix = 0;
+  sha512.run = "07adf0a76fb15951db5dd01a0a1595aa9c8119d6e39e94eb36ac340932f763975abe284d738a52a1fa2a938a14f87fe7ede10758529c3f68c6d573dbccbcbc82";
+  sha512.doc = "b2f45e828e32fef5e4ac130230050f035ec69607c97562a835ef2157ccc6673d4ae452624d2d1aded3552eb71d85d971a7e35d9774ad7b6e4ca7a8e0a71e48c1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+babel-german = {
+  revision = 57978;
+  stripPrefix = 0;
+  sha512.run = "0d7ee8aaf0b8df0040e3c7b6e41b999e21d79502dc084ef657392e2e4704101b49ef7b99d5b8059a6f271683c01a09ab19db3ec2a9c923a8bcdd14db819f6107";
+  sha512.doc = "59dbbb949ee4390c9891b0b2c44b93cf81c9b5da1be6c75ec6aa3b38a657aee6e28e7d02d0e188fa37c15647f40e553f13fd0f18845f4a8a3dfd9eb169886fb2";
+  sha512.source = "64880138c89fae929df6d7aea149ccfa79c7ec558ca307cd28218d891ae6f72e9042358ab0038b1850aa3d30b2d7d80eff2a60328ba37699f68c3d00cd341611";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.13";
+};
+babel-greek = {
+  revision = 68532;
+  stripPrefix = 0;
+  sha512.run = "f81c220447f77f207dee02a5611edb3dfe68fb775abe932efc560de9a268570e688b3abe4eb3dcc094ac0c967360d52be02bc85c82daedcf173bcda269065938";
+  sha512.doc = "deb5a889b55a93101ee4c8571dabf00f8f971a6a27c2531c9e71a74e4b972ac1fe3efc6a336a6f0a38bb746316ba38881fcb2b4a90b64fdb5fa1fed51a7d90a0";
+  sha512.source = "aa891867efbcd19359dc6fa93334e43858ec9c4f7b0ae2d26c5d770fa2210fbfa16afe2ee8ca49fa3db1cd6b8680c8f06dc1069d760b65ebfbdcef0e54fc7da8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.15";
+};
+babel-hebrew = {
+  revision = 68016;
+  stripPrefix = 0;
+  sha512.run = "7feecb0fecb5ba203e494c9ca8810c7e58df692617c7ef1e15128bc3d2c947fda90267c21b0dcb2743b18fbcc120da2a0f1ca0ba76cb74cb2e53b3039dfb1c5d";
+  sha512.doc = "849c598ce07421613bb7dbdcb1893efe5facd807e5ad54a507d62054119113f349e60186258b7a60bdc695d7fae757ae65d64e7bec68710046a4247e52510523";
+  sha512.source = "cbe6c2798fcd9edf4f98520172cc56725081158d2968f961a6ad59436455bead4553070ba5ff52aee705464d261d0880c032850e51ff1514e631362f64ba0dab";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4a";
+};
+babel-hungarian = {
+  revision = 49701;
+  stripPrefix = 0;
+  sha512.run = "5b05fe625155df3a958eaf44dc55190fff60ef356d40e681870ff27adbeaef1dd2b27402d9058d27dec665dbe9127d43a2e07ad02ef5a546c2e77479453678b2";
+  sha512.doc = "696cff23cc5e2c32034729385c251c8dbeb5f78d11c0f8a0515af480f7a9b5fc5fa6c07d216c5078d5f1c4e71cabe093f023f294dbebb6b203337da9423a438c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5c";
+};
+babel-icelandic = {
+  revision = 51551;
+  stripPrefix = 0;
+  sha512.run = "46aca093e061948272d2a54ff9f95b94b101582f0ec9d795668983c37b518be3c3d76d2c8e6901126d3dd7342db003589bacce9a40cfd573263a953bbedbfc48";
+  sha512.doc = "bc859f01f52ad51da7df9d458e507b62eb69e40e1dc39362ff32ea8ee8890acce8ce49120fce967f321c9d674f4334c62c9bf2b3f8017288b724ecfe3943d667";
+  sha512.source = "cff6e1ef260bd61b6b098b449fc5dcfe5c708a36d9e5df679d21e5d84a62fbe298fd6581d9c6a79829df55809b2b12f6bdefe4367df05ac50830fa01d8c73dff";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+babel-indonesian = {
+  revision = 43235;
+  stripPrefix = 0;
+  sha512.run = "9e42cb144d53dc0a076afffdbcd2adb7bb55cbc58feb77916e02beebfd1833fa308a0c78d0c26e1d187386b60572381c881da083c73ac8fcc651e77af17e2093";
+  sha512.doc = "c4f86b646d67ce4b29e96771ea5657e352ee7633c344f24552a2fde4c387aea41f9694d77114a1454b106646d12d30b277fc9de589d3d4b666b00208978f5bb9";
+  sha512.source = "30a1b987fee18a002316bb51e3497d22696e83ed48cb4a6e40da2f82876cd2ffc5b4ab95a0c1cef8a62f3d0a610401bf6552d5080dad3a9d0c45d4fca53dfe7b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0m";
+};
+babel-interlingua = {
+  revision = 30276;
+  stripPrefix = 0;
+  sha512.run = "e562cdb5b7cc35d14f4696cd3b85c6578a4daaf7899bf684026e50ade2113ee2314405756dd5f6ab91b6faea4da59a3546e30a18ba77037eab581ae3c98b044d";
+  sha512.doc = "f2f86fcb4a132a9c1f5c65007c8f1662a8498a53f265cc778ad3ba33120a97317aac890c1ff72cc6b94727d215937352ae268cf51344053bec6e0ee5687d0f69";
+  sha512.source = "260b2b01ec451d2a37e00e83c79a09f359a3e4a7c34b1396892259442a3f9d2df683e74e6f14a5cbb9b797f8cdc24d0bfdc7f9c3dbe124eb901f43d393f5e1bf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+babel-irish = {
+  revision = 30277;
+  stripPrefix = 0;
+  sha512.run = "d9b1486da57f9685e136e14adc61773ec0b3a58ade370da8383476862ad798f26609329d445ee6dd0c6419c98342b720a6880939324d19f67e1528fe99ea3692";
+  sha512.doc = "f5dd55c6a527cf19eebe492271d1404be3c995cac004d41160522c6c71e4a4636c32547fd64b93beae41b60d8a48184ff9b498f82ca0453bc72b601de3d66cee";
+  sha512.source = "df023dd1a4b04e022f46f7202b616e6329b4673084876c1afaadd41faf4414e908411deda1ab909246ea7e1922c46b0a70b5e3e3fbc6c4855e060d47e45ca21e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0h";
+};
+babel-italian = {
+  revision = 69298;
+  stripPrefix = 0;
+  sha512.run = "39c9a5b40215874e74a86d3f994900e1dc3f5c1d0067b5bec224b5ca997a2bb254b914c9a15888e896e73908be5cba309a8da82fa12d797c12a93037c245256c";
+  sha512.doc = "ef2f87cfb66fff50fccc3ba4eec0f1c778765d49ac2976561f4963d9e12f1b2c486459827a44e66fbb42278fce72111d9aee373c1395f0532fcc42ab5efc5ad2";
+  sha512.source = "8436a5fe438a56e27efc22d979e56dd8f55971c598cf40702b485172448c0e5c959a1d9971f201c9e5e14df1d37815a39d9572c9dadbf6c6c9b0969f3529a3c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.00";
+};
+babel-japanese = {
+  revision = 57733;
+  stripPrefix = 0;
+  sha512.run = "dae227c586eea1b56fc88937f8a99803994622c07cf54290ca1b5ef6cbfe53ade8aec7064820044284cfd70fb6ee2ba908bbb74dedb54bf3c2f0085815c7eb43";
+  sha512.doc = "cbcda3267222cbf5c38d8e7e8ea5440b94c3d7d0ca70b4f635b0751e824c690a4d495f0906b0d646de5f1ee08c74f72482020baf99d39ad0089002d5e523ccb5";
+  sha512.source = "956aa7cc75bb2a007fbbf4ba4e7209251d3232f585976dc0002429372062e9c1933241bf05c34aefc481a82032594b922df3851d6f88bdbdfd7c181b9a44d6e8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+babel-kurmanji = {
+  revision = 30279;
+  stripPrefix = 0;
+  sha512.run = "bbdd05e7106494f23892f3455ad224d3deb1881f5a73720e2c73e7401514fed324484416def64e2e8fd7c2416b521fb2d4527585d2302a220330925c296afecb";
+  sha512.doc = "c31f7efd7415f3439635b293c9aad2cfc2632352534e579c0f8d3e74443fb7aa88a95e19735a7b65137d81899ad9d2ad8bbdb28c5da2ff05a2be9dbad552b0f8";
+  sha512.source = "88f600cac9509695c36969ee2bb2041142dee729381a1ffa49489f32454e4c53b4d1795407436df9c31da040cc1d0c7e38077fc786e5cd6832ab9ccd14453d2c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+babel-latin = {
+  revision = 59800;
+  stripPrefix = 0;
+  sha512.run = "09a08dd3f90f83490867b786870b9591cdb3fc8d83c0e68446e2c97ba665a70f45c8b2553cfd6d965d31e6b2c435876ca569f4c24a8ddad4188ebd8b27b261b9";
+  sha512.doc = "5a57f5b070cc86950002c40c5dc35407b0ace14ebe8ce64662260615bf5ae069237f5b0b6ae0fc795e72d9d1d3d9bbf7b30fd9cb762e56595058bebe436e5b92";
+  sha512.source = "e7444e7c98837fc989a5db187a5769bffa993487c47f56ac5a686a92fc1b25f084966b411340de869a8325dc13fb6f85ce22e65c43debb63a2dfab2568d36cdd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.0";
+};
+babel-latvian = {
+  revision = 46681;
+  stripPrefix = 0;
+  sha512.run = "0e19f04d81195b77ae200946e5502fccfaedca5a6da8080a0e7351b684c7d1802a1d9d05794006561109dc8f9a0c04f45266e74068157caa9c470899cbec5230";
+  sha512.doc = "e7c4f93db73431708eb902af924672727a6dc6d1cc9d17ca92436cea51310a10538f32825c13144ac35ec8633fc146d1788492f9c6ecf7b11ed72893ab6393fb";
+  sha512.source = "ce0c59467b4cf94857bd0713283f46aa5c64987f5a4c68536566b98693b93e61ead42049a2ca323eab3b2b9842623f1318f2c27ab4a28d3e4660b8edffd988c0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0b";
+};
+babel-lithuanian = {
+  revision = 66513;
+  stripPrefix = 0;
+  sha512.run = "83e8aa3c7e8e018f79c848ebd884f0d0a07c87953611342b5a9f25df1241ddd931ede31a03b1670922049948a6f9ebc88676de0a4be9e144a3f99e22fb857fd7";
+  sha512.doc = "76dac9c2b95699a42018ad370afc1236668a37a71707a6c1a8fff1921df9edf30730f71337c1128f64b7448a0bd3f99e432ddbc1219534884e8476a8c7fdf338";
+  sha512.source = "1ad90b302e3e7d415fcf0534642a22fbced05f0cb3ff9218c73175b3bda74d0a7c96b27dd1401e12885233e2236e7be479d651829dcc04906f94f27012a5ee8e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+babel-macedonian = {
+  revision = 39587;
+  stripPrefix = 0;
+  sha512.run = "c061ca1ec358e4d8df05e0adadd5d87695cf3b9f86cab52eaa0e08b1f5b1fedb66febe32107e74c1926fa4d697b056d7d3f119db525b90ff7e7bde30fd015508";
+  sha512.doc = "7284141fbecedad06cfef78f50b4c13ebb3af76ced474c456a364c97943b51b9a233ecf6797e561ab0936ef7d082adc80daea0de4e961baab60e494bd72f7061";
+  sha512.source = "c5866f925540742391981848fb5a76908863fba8a7c77da97b6e6bc634a8425c2d39459f789749cd1ccc4e7888e6d0f5b40d3d9a0a76611f4b1ff2db80866c72";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+babel-malay = {
+  revision = 43234;
+  stripPrefix = 0;
+  sha512.run = "6e2f95eb95a7ffe0b21789a65e74936139d92381867e507ce56bd8eb39b4061b177c10fed0a0226e9091b963370d3c001115473625910f03b699d5517350f2da";
+  sha512.doc = "b06395639e743571870dee10e029e4622c55683d7a9d728fff381bcabe4bf694511230795c79da4080299938acf66d03cc55fd45cb8426b484e19e0fb0f73b10";
+  sha512.source = "4e7e47a29802a7369f7bdcf29ac0fec13afd69f42c9b01060ffadb2cd8d1f1656f7f6ae8fe5ced67d9ce6438c26a07743a18bd38c561fbe8357e8ea3c685a5dc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0m";
+};
+babel-norsk = {
+  revision = 65093;
+  stripPrefix = 0;
+  sha512.run = "e5ca8c827ddc30ca33b1fc3da98e6576938aef4041d56c77b329ba69851a6576f4315228bb5188dc09aa3180890f3545d0b24f31da89c868ea11e92263f2a9fb";
+  sha512.doc = "f67830ab2e6b46370ad0737b64149ee8e0c1c9ecd68920ecc0ff43518335e884941b4469d91d0202f6a7927c1e5eb44507a5e43308effd89e1f1846f80de5355";
+  sha512.source = "48506bcb93e7f8cb27b8c5e6257fc1e8247db04c94de6b9710438179647bdf6f1d9a0b5c811156bc79fb9ae301493df49536335a9b8fd939ae0852d4745843c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0i";
+};
+babel-occitan = {
+  revision = 39608;
+  stripPrefix = 0;
+  sha512.run = "f1f2f26b5466d10e995d76f7003c202650e3976b82b431d2bae768a582bc0c5662fc120739c49fcfd1226da3595c8a6b2e8c952a491718c45e69770c09d542a9";
+  sha512.doc = "86433fa646eb6b2f7ee0ba54f1dafa73b81bd98012859c59408883cc76ec876720ef526cb2f526bd4a8385c0371f9bb01ae6d604661deabb4ec920172986adf0";
+  sha512.source = "95bd15481ed6d20f1b9b71fad9661e5a12e4f29cda61dc8910a1601fb0f97cb4797d5ecf8137c9465a623288dc05e58c84740ee5b663b1f30f1c984d4dde9b03";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+babel-piedmontese = {
+  revision = 30282;
+  stripPrefix = 0;
+  sha512.run = "72fe6338ef6f172a23790402a632881906689117e7227b6f2f2fb6129fca9a7d44c42ddd48e8286252f3b5fce9dc34439594882c1f80f33557ef5ef70afe4993";
+  sha512.doc = "a2fa0cc72a205fcc25c2baeb7717a573bf8f2db5438e49c9de8a90e8da37d4f267ff30f08f8bb79f08756f5d227acddba8c069c8a5c257adf95c3afac271927f";
+  sha512.source = "6020ade081108365e4b23d9b3c9ef789e95764748d06a647a071e8ad77c945593a680c7669c57e989e71104a8bdfbf857eec9599327560e4453e0a81b9d309e8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+babel-polish = {
+  revision = 62680;
+  stripPrefix = 0;
+  sha512.run = "0088388d0dd6459e5ac3062cbd5eeac7ae0d858b93ff278b6bc7a95e8fc4846d8c12530eb41ed972f5009ab745857a5599d9ce25860efa06a3a1dddbf396b4dd";
+  sha512.doc = "536b3ea736a9e876f2e7e942e56841c97de27b94d00e58656e9d7ed3b27aaa43947deed1d04fc54530c082095ce46737f05969afa85fd5de57baecf5718815bf";
+  sha512.source = "21d9f5a3f4a6e9f7595b8e38af5758f0eb06d8f390448a39c164b5c4e7a83089e3a254931a1c23e8dc088eaa6874d5f1451b78f14b7b8dee863daec62f78a490";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+babel-portuges = {
+  revision = 59883;
+  stripPrefix = 0;
+  sha512.run = "8b63140bf59669873f55ed65925eff65cab3bd6bb404b7dec962b7072243c2b2be8d2918e379ba02b557f7e07d1d490b3cd0bcf3756bbfc3f4e63ff540e73c28";
+  sha512.doc = "1fd6cdd08c2c00340b04ddaf078d1e9f0b1c51dee22f805f00bb46e63c46c4461fe4d9df174c2844a6ed01f7b52333a6290cd0c8aff3820a1659839668308b91";
+  sha512.source = "863f5c222f11288cb4f041a04cf543494409bc69df67a65b71ccd79411e4a292653a6bc48644d3b7700c0a01d1a456fa56c0ce867d6177983a8b7c98b5e66aab";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2t";
+};
+babel-romanian = {
+  revision = 58776;
+  stripPrefix = 0;
+  sha512.run = "ca6318ca8453dae2286b305766c6ced299f18f390c0d0f44e77ddf8eb4b05c31c7a2b01ed52e271f68acd6b127650b370d15ea9bcb3b591fd01e5d3a50b17db5";
+  sha512.doc = "73ff361e7e03499427529824b83ea584a5ca190aae3d1ef9a5f4a5adf52cc8ab02f5652c92c1464a702f581e29626fa9cd14d4ee84f6cdde69b38af9d10b20ee";
+  sha512.source = "0e4aef9bf20e6602dd946e2ad2856c7ee7849b492d4b66334450b450faed146eef83d2b7f13506eac6f34507bfec4ae735ae9845d3a21c36d98105bb353166c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2m";
+};
+babel-romansh = {
+  revision = 30286;
+  stripPrefix = 0;
+  sha512.run = "db28e78ce4e028ead2f31fc84d0e7d8997a18dff3bf6aed0301b79bfc7bdc52a8741f9975766d36ca9ca2af9908e7e0bda9e454abf268a1eebf4693c30f5a5e8";
+  sha512.doc = "42f9b63d92e522b596839d10c1b90ee9052cac86cdd54ac408063c24456b2a7b5adbfc8208a0a388fcffbb19b98ae0810f7da9d6bc517ddeeab78c8389bdd5a7";
+  sha512.source = "e26e9ec260d7f01550799f90c6bb76c0c29cd200896c4634085627599f5c3d7438159ea9f72df416e334200a7e1aa3f063dfe9bac5817f55c8f6cc83fe906a63";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+babel-russian = {
+  revision = 57376;
+  stripPrefix = 0;
+  sha512.run = "5acec3460294e71e6def384a7863a849e8a5d431dde49c77a4a7803af5373b56fcd376f6e73b237dd230728ab5b536f903b6a1bb19fc478dd5e742293a6e6ca8";
+  sha512.doc = "387919d8bc226b00492f9924486a2591d15083a5a8e2293889f6532ef28fdd6409e2a777e728bee7f7b9796a304f440d8cc5fca246588d2b3ef0c84c79b701ce";
+  sha512.source = "71ca4e9bef2fe88c8dc41def4facd4c33145692cc0ac2cf05eb1d455ea83bd93b3cd29907772a5ce84168986db0fde8f5748622a4dc9b6857682c4c0aaf04f34";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3m";
+};
+babel-samin = {
+  revision = 30288;
+  stripPrefix = 0;
+  sha512.run = "8a9e832e988da76ca26d87ab54438048d3d76cf02027ac9120d1277096d2495ece671607d32182cc5f9a61032b1ec33695f6592796680aaba0b65c142aa8a43a";
+  sha512.doc = "a8d43e73b4ab86378c5e3d2b402298580dfaf19afcce509ffa8ac747d68627c21b58020dd823528073240e1a28a2178157f9752d587286a0168fc3047cacd0cd";
+  sha512.source = "2e0fe9724a55daefdc3196fc2934d3551b4e738be4d6940a25a091c173f220f2853b077e5534ac20f868954e360e547fbc7d622507d227b8cb0bf7e074e57f48";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0c";
+};
+babel-scottish = {
+  revision = 30289;
+  stripPrefix = 0;
+  sha512.run = "a2c708d9e116933fd00619fa8d89e30aecccbfe162c96eac22055bc442276863e8957481787d94a75507c2662ff4fcd13760b454d12b811dc4659205cdf5825b";
+  sha512.doc = "b32687935329933a733d239a58d7cbb7c4721c4fe37c703891547c2e6e82503235a0420890a9f025cb81a5c86148bd5ac2301da20d538781fa6f2831939c8009";
+  sha512.source = "8ec0b8a65d433f978db671a344ff22263929c96b742ab7c11c0b47eb2e2f2d652064fefb4a19cc3f91a95cf0abe3450574a3381917fbd239be1bc89d002f99e2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0g";
+};
+babel-serbian = {
+  revision = 64571;
+  stripPrefix = 0;
+  sha512.run = "0067de0fddd73a7c68cd2b3a12b4eb620c6b95886c4c34ec1766ff9b3c174ed2a8cbb1dae72cd8adcfe55bf01e4d24e47668e76babdc57ca9eb59704a5ee7cd5";
+  sha512.doc = "e83a8db6c60853dea918d226fe643fd06c1cd65bd3b9e29fac962c029a263e75821dcf6a5a3b33ba44b12321d5e19633f704885e77017cb43e9555a4e060394b";
+  sha512.source = "016a726438759e5959938ee6bcf3735386047581eb166c244116f0032ee0cef5345c851e6d90a5790b132c2f98812da14f97fe2e96c23aa4dd48d7f50595b88a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2a";
+};
+babel-serbianc = {
+  revision = 64588;
+  stripPrefix = 0;
+  sha512.run = "c4c4bf91fb22d0766bbab6a9980b0faa19f4031cabd044a309478f9ee700bc26247a10051f10d36c8cd88425820d2f800d3947d005fa9fb8b54429efdeb3c8c8";
+  sha512.doc = "a173daa03c9da413b4f200a0427e5293676ff3bc64dfd21d945977fc78fa9172ebcd73bad2c7ebd8976ee252cebe3c78d03ac9aa10b2be9984bc34b66ac5ac66";
+  sha512.source = "13a4981f6ff19cc1664bb2da360479814723651379c445e3fd272167df761dd07c3cc5b19072fe99de8b08b2b41485d08aca6fc1c16325fbbf7ce1ff1fab77ee";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2a";
+};
+babel-slovak = {
+  revision = 30292;
+  stripPrefix = 0;
+  sha512.run = "b14b98d2cb66a3f8f5d8a313d9208a700d1c3664a5bd23f5baf0d9aa2e3acf3891a0536871988e7579020570999ea05a9dcd60a404cd6670e3c1cf8110d9094e";
+  sha512.doc = "da1d663125b913e3480ad147ac1f5c1befa00110e71bbd2d42384db03fe0f0db3133b49e26d1a336b49c10018990763d42ef49b64440c9138d9d938057ac90e0";
+  sha512.source = "1668ed3f373e58ee9a507637ed4c17638fc429a30ad6087c7f153f8fa23103c0a93c0c0beec73380d41925ef1ebf25ac214f1afc95793edad65545256e6ce5d8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1a";
+};
+babel-slovenian = {
+  revision = 57666;
+  stripPrefix = 0;
+  sha512.run = "159e3fd820c39f64897dd26ab589cfb77a9d254cc75a0b1988d164cb9c989bc55ff2320d5d21b698928292a92ea6bd85b9a6cc489270ff13c2c13842d84b4c6a";
+  sha512.doc = "8df52574e61776f1d83301caad0f0a9e2042c88048034c6bcea23c4e08155fd1166de4c76584e3d462c5b1f914fcd38fd1eceb740a54e50dc2758ee892778098";
+  sha512.source = "3b630ef8368ba89c235930e9815350bc83331c82230bec549f86374e243c28bb0bb6615f55588245551add88d16284e90c6339ea548fc52b1236bd654b2a5d98";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2n";
+};
+babel-sorbian = {
+  revision = 60975;
+  stripPrefix = 0;
+  sha512.run = "629a4f09de7ba1a444af0fc4e6db9f53635b0e000d375296697096c2debd782496d7b36f7745af42a8a19f6cc24c6a832595bc6c89ae20d79701c7181d1a5d68";
+  sha512.doc = "ebb371730cafbd37a4c54dd0ccfe9d6e187aae747d1b6de9202fd09a85b5b38f8814e0bd27cd86e51c5aa62e6816ac725e28eff9117d6dc474a9e32f3b6fdaa3";
+  sha512.source = "57d29eb253398abf3210acf390cc80e97b444c370718bda75108fd1d70c1c7d2fbfb43f6387751cfc90b9cb9020eb4222fca0821d10c4d52750bfde05a2557e1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0j";
+};
+babel-spanish = {
+  revision = 59367;
+  stripPrefix = 0;
+  sha512.run = "2da1b62772f462c8e058edac7d305804be6234a720446288fbcbe2e574a1cd9f905e4220b4008dad64c0e59b15194e2627cd1e295003c1bcbdd523c8498fa26b";
+  sha512.doc = "9c3e87e7de6fa46b0c6b9da65d4c23e31640628fd6fce844b53d896ad85813e9b804fe4a36c7c2c1cf26550a51551b39150a12467e26fad4f9bb9094dc0af817";
+  sha512.source = "48e4293f6c7aafed829e273e0e5ac2709a082e648988bb40e5bd0b36aba6d84aa036d07108a2bc76c65b4ca029a9652ab38268b7e7a87abddc03f00ad55a7fec";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.0q";
+};
+babel-swedish = {
+  revision = 57647;
+  stripPrefix = 0;
+  sha512.run = "d3ccb281b9a5405866b0a4621cf0ea4fb75a085041de5d52ef0eb6db370cafacab05d1eebfef21f9558f4110e19b739e6c5cc424709e06640e8290a9c01722d6";
+  sha512.doc = "33a59fb66617ee8ff66643e57b0146940060d04bb7bf2764bce97a062a955ddfd80338072434f86d86c414a22d5ce6f120be4f21523a3d81e6e88947e9c2e57f";
+  sha512.source = "fe6e091f5cf7b0946a6be154af2907288dbc5ca58a003e7009740b2c85ed22075afb424f805427a5838e3729a35cbdfcd8934f860a32eda0523f141f3c9a9952";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3e";
+};
+babel-thai = {
+  revision = 30564;
+  stripPrefix = 0;
+  sha512.run = "4e3e5c6d8944040177a21f04e63bd40e85c24e9327eeddfe98072da38590c58523f676fd7532e4e00d0e3cc88121a2885788d606d2dc9ca02fd91c7f04a6ef57";
+  sha512.doc = "791539a57534c4870a81ec2318298b29e9e9ad925161b0a4cf52c49086a865d5b58b60da10829a5fb37e66f0d161b396beb127e586457c556875f1205fac9360";
+  sha512.source = "db43b9422d95579f9bec645671e5c0ba654ce2d7ca89c3e98b6d910f6546a30b29656aa7061d03b767aca6eb2a01b001613a8b619d597bb9053a8a0df3376b6f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+babel-turkish = {
+  revision = 51560;
+  stripPrefix = 0;
+  sha512.run = "02916936992e00e7aa884b46b6f786dd0fe5a0aaa6e2c6c4e28fe72de7fe5260fca7cdd37efc4a775a8d172e3993c98df7cec3d1ad08f01487f7cb0c8f2d179a";
+  sha512.doc = "06931a6b9987a7affd4632ea5cc79028a2a88c584523c03ce79c2a15268947fb1103137da158886c7957e0a7c938ca69c1c5c7d88104c892cae611c914f6fb93";
+  sha512.source = "54f3c4bf5063c571be3ae2ecd7c86882cfac940ab942e66fbb18346a4ab1e266b716d276294dc6c622b3ffb0b86cdecd70411314b334be491d0ff56604d0ead0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+babel-ukrainian = {
+  revision = 56674;
+  stripPrefix = 0;
+  sha512.run = "10476b0dda4e80472aa8d3b3628d372da10f8badd37df6beca434e3bf1b9e135972acd5decb63eb6f706b700ef969136117b96ae5a6d6209fd75b9c13d06567c";
+  sha512.doc = "7dd3c5d02024cdd4e0c06b57d3aef0a723aba718760efd4b1214b7da2dca8877293bdfff2d3893e531eb734d5551dd93afc03dc4f3413822a3df0b40b4bec43b";
+  sha512.source = "0fec3b7b65f3e2a5c0b426d4c55e55ec0551fb38a786cd36db52cdfd6c87909ff82ca21328ea33c7089b39aa2694d4d62ddcd1d59255ae929d4ec85a44abdd62";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4e";
+};
+babel-vietnamese = {
+  revision = 39246;
+  stripPrefix = 0;
+  sha512.run = "ddb75c37017c1b0b6af2cfbdf574526cdfdce2099d599a23cc8ac819f6ebe5ea7a2eda4bd743af93d78835ca5dccb3d7fa55db22b3154862aa4affe83c28185f";
+  sha512.doc = "b078464ce848b24d692d4dded7c9827f37fdb4141b719c71e28b5ef0a827f9ea5c2137745f9689fcb89a486d4a88a94a043a62348e86b5736a68ea48c7f33e16";
+  sha512.source = "ffdf9a552fd79b1b51c0064ffef8f9dca1e618b41b0abebd2a22152e8f2bde04a9e35964250e8bd42912929d3e6d8dab6fa430ce302a1f28f27676015667d489";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+babel-welsh = {
+  revision = 38372;
+  stripPrefix = 0;
+  sha512.run = "89526156517773131b5452f2cf5bf773f34b97b2e35e786f2bcd4dad512519766eded269539ada9d5c34d4b1f02d65bf55a0da0053e6bd7b7a3c66c606cfb60b";
+  sha512.doc = "cb0ff59d9c02bce3028f0025c07963d42856eb4e68f322b839ed1ea5f51abf372ea17fc695e7be4bf87f75b3d2b163f801102f469773a4474bd0d0a72a47376d";
+  sha512.source = "42c52ecdbb0b1de295800bece99804a481afffa2848a2146429b318f964e3a88dadfca9c020e9dec6bb3db1548ccfa79db3e66edf366a32fa83a1b6ba91e7fc1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+babelbib = {
+  revision = 57349;
+  stripPrefix = 0;
+  sha512.run = "90e78ff6086c80e0102ce7aae74070d3b1444208f3957e354f2c940ea4d279f87ed59e6c3310c6d9fc1464c227fb0eb4c3813ca679a6e94295e0b824cb527376";
+  sha512.doc = "cd5785a17242a523f23093f8389f1d4c5e3d49c0656ac3f168a8627fb153b217b5a14e5c990c7afd1c5ea7324b5aad2e3dd40e8c2ca0f9ba9064f91f7214bf90";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.34";
+};
+background = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "e9fd9b5e680082aa3e9f0482ebe41a753088a1e61b85876a9685942172cb9d5b6c9819ac2d61e0274f988b46d4f962222ce0afeac2827630edc728125761f214";
+  sha512.doc = "518b0785e562fc6f01d6bba6cf7157c847faab151bcfe7840d5f2c9d8fc3ca54689beaa8698c92f24c196393fdbf90b027165be80e6cf07e9ee79ad8073d8533";
+  sha512.source = "36bddbbaf17dc15e72773400e75dac754a2eb60c106c7a6861226b6dd2a1955fc016810a10d5c90ff56b690be922affc0427c1cf3b5e5c1f334231bc8df69872";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+backnaur = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "adf008822e18c19a7e9e0ef4eb54230ff267ba287e3ef6c0686552ce6b51c8b13fce10cc4533a733f2f6ac09739fec4c2a5878423db1c65a993c5bc16cafc643";
+  sha512.doc = "cdf5a269f4055e8c5685da95b18501f7b69ca8b236fde8e60d39760a562bac9bca5da3afc06caf18bc4092a97f76754a48950881a0e0aecba90c40904e699637";
+  sha512.source = "45142a281a29b1f9e24e128f05825ef2b8e8549ab5de03607cb018dcde6e98b751598e01f6795b14c81c190a275162eb8e30402006f4e7d2a07c2effa4a949ce";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1";
+};
+baekmuk = {
+  revision = 56915;
+  stripPrefix = 0;
+  sha512.run = "f9270a17459444e128b5fc5d12b943043fa4ec2f87ee5996808f9dfad1c4c4146787db3ecd267767a375d1fdbd56e15850b25cd7c9c71ab270e3517b5863054a";
+  sha512.doc = "3a3819f892bdf69afeb66b9fdfbfe1ffe06e2a488425e814cb3a1e223ec9659a71f0571dc25136e0f7afcdb616f717dcb3823b89e640b0894313683e4f79b197";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2.2.1";
+};
+bagpipe = {
+  revision = 34393;
+  stripPrefix = 0;
+  sha512.run = "7d815e23e9b5d686e0df54c4a0ad51c85360c7b3879695977fb9be2b69cb343e1c9043c2595ac5554e87e0a568b2441bd16a43b334af4b43e5302eba19bc33d8";
+  sha512.doc = "696047cc4965a06388a61232af9336f2010fdb0b869914cf66ac9b052d1efd85ff05119a277aa127cf05f56e03b63060956c7c284df78e93b0f0beabd691d33a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.02";
+};
+bangla = {
+  revision = 65786;
+  stripPrefix = 0;
+  deps = [
+    "charissil"
+    "doulossil"
+  ];
+  sha512.run = "1559fc1599e2586c660ab544a5d7e279240a966da677fb658162e8497e17b574308f90f51823ed861d52c2d0f4c0b836316866b2d5cc1b0c3ebfa82caa9334d0";
+  sha512.doc = "dfa23cced9bc203d87f4ad344f3f4448b1950418d6a01c72a9b56e64cc7b5e959ba6845e55c592628f11bf677b93aa68218023e32116efa8580938b503639f50";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" ];
+  version = "2.1";
+};
+bangorcsthesis = {
+  revision = 61770;
+  stripPrefix = 0;
+  sha512.run = "3d297ec59cff75977addc7320f90a68a6fdd87bcf5aee4947c14e122dc7741e443582075eec4a9b327c3e988da500934fb5426d5e9fc17c7decab4a4872cce8e";
+  sha512.doc = "be5e7eb308d2678c3cb7464e234bd63f551a560677e67bb6b5c9dec5ab59b29bd6f8a66db300065cb472b9772420e443a3fc7a4d31ebd2557868b3a6b2fcfe2a";
+  sha512.source = "3141fdd4bde1e82edf0677625c3b599516ff8b1f71b19c4a486cf5d68361135983f4fcefbdbb390bbf324d78eafe4bb6ad9ffdca8f7b257fa98faf590ff23c06";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.5";
+};
+bangorexam = {
+  revision = 65140;
+  stripPrefix = 0;
+  sha512.run = "df88d8051803726d508906be7dace3ef15f455fd00c1603aa16e9298af75e9f38d306ef6fb319b713e21dcb337eb93fa44a2baba2aa15f79076e6ef55d38100f";
+  sha512.doc = "b8db60eec0ef7a57e0d0991f70ae7d1d7f87391797521e03baa916848a8be827a97496de8af8f2f95194ccedd923288f471116e677371b99f75f0309283ff50f";
+  sha512.source = "639dffd548f6937a01b24e5946e58cfce47609257e6964bd51d441d2ae3435f16d86015f50003b2c3757b8101a50375d02ce68be19e85c6f8adc7c35338aba18";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.0";
+};
+bangtex = {
+  revision = 55475;
+  stripPrefix = 0;
+  sha512.run = "84d2b5b85f423e171bb90821f9e4518d06a640c02b03638295322e0ea6aedfdb831b6a4e62d3c25259b7b70aa0fe68ffe3081f6de0b0c71fe03c10616c74347e";
+  sha512.doc = "05ca923b97240a766d3ff448c6b16a33613a16e3307509ed7c369da6ec889e7e19d57e5f542b829c788ac4e87bd7025a62af9f7127e2eebe7fdd3eba4aeeb7ce";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+bankstatement = {
+  revision = 38857;
+  stripPrefix = 0;
+  sha512.run = "c388a06b1527fe131dd56813303ca727c035f2023b25426e8aae7387867afa0425e4f739c2698b30af97737557c068b94741dce51f8df573c29c14e4cc4f02c0";
+  sha512.doc = "5290904ce0aab9e4e098fb4625c8a0cb5c728769faef312267131eedbee937e1d964a561b2c001c38131ff93c9083db46275d693431b2447267edaae19c296f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9.2";
+};
+barcodes = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e4b9f432d4464da19d279d8e7a5c2ccbd6dbba27fd175bbe7385c0f34199955c16427fc7bf6b487cad1da0b2e28b94d44267a0042e811fc73a88661f3d312b91";
+  sha512.doc = "2054d8b87084bbdccdea4a2c05c43b427249d597880b3870fffb98bcf0bf88adf64c9110e3ff98d1755596d559ab548a464a2d681eb1adbaf57cc748424e0d98";
+  sha512.source = "9b72c54e083622b95df17e643a6466125a22fb62e3ebc64c3b0f5304253ba5625f0ce2e0071dfc4e06643259b4d7b575a1bae5bc6beb213e5bdd3e83074ba9d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+bardiag = {
+  revision = 22013;
+  stripPrefix = 0;
+  sha512.run = "dad9b5a50e5a82ed0285fb36c609c4302f7b22daf71c159848788d8c7c91c19dd44398e98357dd58366cd97140e943540d05b6e1c9937124a40c4b4070065a1a";
+  sha512.doc = "54fcfb2473c6ece46ec2b01853c89046c7f5396e97f62b9175cedaf4b1e783285c7c417700c827a7b9fefe5055b10723ce278e5fff0e864434f84020472c1cd8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4a";
+};
+barr = {
+  revision = 38479;
+  stripPrefix = 0;
+  sha512.run = "6bd398efda5027e3b762b817ce777adb9bb1c8e593ca04386adedeab7dc26ba382058ccfa3c281ef8612fcc50c9b719e7f881dcde0cfec041cf4b2cd05f238f8";
+  sha512.doc = "6600ecadc60fdd00e4d894969a84118265b5c5d07e9a411d3f01887fd1e94c481b117cbda80451774294dbb989a61379b16fe3ba5c3b8363a9a2485b76752aed";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+barracuda = {
+  revision = 63708;
+  stripPrefix = 0;
+  sha512.run = "8081a9b253c77cc5e68efeb8c66beffc189898cc6ba80cd96be88c57d3117b2c270e439fbe47983309625c90def14f3b2d2c50b567f4f461e4c0ef591c7ba63a";
+  sha512.doc = "18767583117a7e16e5b292aa2e82082eed1f48e7f2d8033cf605d9a0b9f09f460826ba4c43af5e43b003e6514909cdea30e24666b8c518655a9e6ab7b6129953";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "0.0.12";
+};
+bartel-chess-fonts = {
+  revision = 20619;
+  stripPrefix = 0;
+  sha512.run = "33c52620d32f5e79a702bb664cfcb47409faa049dbf7f34cc5816005b4667267810fab130e3aee1ff7a7e3292af37c2d376c01dd2bbf17be199a22cc36ba751f";
+  sha512.doc = "e61232eed7f345e28796192d836af9de29bda257fb85460f67a89bbdfd7dce01b8361962b7cccf314311c0e772e69367f2921ad898c106389195164b6c925ffc";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+bashful = {
+  revision = 25597;
+  stripPrefix = 0;
+  sha512.run = "b46abbc1622fcc15d65981368d5c8a7528f2142d722604eb028e0cc364d6e908587cb58a340283e7afa43581ce365ac7a545bef65d1cb5e273e777467231c40d";
+  sha512.doc = "5017fef7ad1c67f33cc881a94f75cce97d422b047d8944dbff377b1f3f3d36025b7b73c76ba2ed96bf06b0c6e9c3e99b97ecf36e2ec8ab8b7e1893dc11f201f2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.93";
+};
+basicarith = {
+  revision = 35460;
+  stripPrefix = 0;
+  sha512.run = "346edf1704ed621a326e4f945b8f5341dfbd2d46af095691c7b853a9683dfb2254d443ae04bf235f192a57dd55336dd50249b0963bde041120468499e61012b7";
+  sha512.doc = "bf454539b0202321121437d2448c3b49a2d6122459af4788a573cc2525f0301d1267b12f3df8636a36fe807c474cb23347a41a2c412eb12b674c58541516ade2";
+  sha512.source = "6c8b449cd8f356be6403a48943d6b91cf2c2dcff90020041a8dde0fb8ad1fa598727137dfda0b091ee776c968d4dffdad1215716111a36be16cc5c5e5b2cc5e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+baskervald = {
+  revision = 19490;
+  stripPrefix = 0;
+  sha512.run = "3c0451c43f81396038c3ccff2b4a9b07bf31023fa7afafd2884506928dffc8a9345ff0b8c8114f20b3016026f4532ab138a8b4787a37811501659a0f53c98941";
+  sha512.doc = "e9e2c8749e29351b59690027b019da441de5c74068aa5a8457e3014c751fb23dddb0e8b94bf56529879086ea8c58e023a23b85ed9bbaece10f6dcc65ddcf3ff6";
+  sha512.source = "60122d6a04e88fecd4c6baae3a657f40bbfd48895cc674e95ee9e2b3f9172e01d009064a616f2d7b3f48c41d43f75efda19c3ca54feee612f1866fe64eef366e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.016";
+};
+baskervaldx = {
+  revision = 69273;
+  stripPrefix = 0;
+  sha512.run = "f78b61573fc99c6696dd9aac4f108f473996c5e67223e721db88f355b2e55a68f2b8a21c7bf994f2ee36a8fa465b55b970d65407b1ecfe1ffd7e00061bb70753";
+  sha512.doc = "8d1b8a3e12b958fe5dee50255c291ebe8ed75e8733a28a5fda7c927a9253e0d94e68b51e81ce8805e3c3855893f53947429fa9684c99925d80176522c72119e9";
+  hasRunfiles = true;
+  license = [ "gpl2Plus" "lppl13c" ];
+  version = "1.077";
+};
+baskervillef = {
+  revision = 55475;
+  stripPrefix = 0;
+  sha512.run = "d7ff1eaee4b050128ac89aff0d48d50c99936b1e04e778d0594d28ad3b225002012cfa56ff515486c98d9769d499ba5f4584358f8969c6286f07bd535b478ff6";
+  sha512.doc = "131117d2170aa77f83954d61d630cd0714c7542f3b4f5e868f834bd091d0b4cd76185d478ae2e4d35c8b9930262d3f14e675681540fa8363b4aa060ea5fd96d9";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.051";
+};
+basque-book = {
+  revision = 32924;
+  stripPrefix = 0;
+  sha512.run = "645d55362506a1bcf563a12ddb7616f085d5cc75a45cb2f0dcdf551158b48f595cd71278caf9a0c35f1d85ca66b880e6f59f9ee416fb9bf15cd7c18bf6fda2b9";
+  sha512.doc = "7954b1c86ddac3a1409bf16cc7db5470332fb86459257756200dc794a3443b137e6013a7e904bbf63e8fceae64850418e56ad08af12a448c1fe507e29221c7be";
+  sha512.source = "4b8a2ac7320d04d5e35a0c789e5b548582ef4e0723ca45231250b44ab08fb52a73e88f5425218ecdc3e3d35e01042b64c711ad78aaef0c4f119ebd1abc4dc36f";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.20";
+};
+basque-date = {
+  revision = 26477;
+  stripPrefix = 0;
+  sha512.run = "2f0cdfa78c3b75dddc5ab9ed15f651308dad4e598f9623eea50929c48d6f15318f768b95d55ba124eb048129447ce1e629febbb3fa6925677b2a46ac94d82654";
+  sha512.doc = "249bfaabe93c4306c32c698eede8835cac334a27802253dc6ce1f380eaafa5c79fc3b86ee34ddd7b98df043cc0ccec137ae3d342cd3904f39203b0ffba2fc9b7";
+  sha512.source = "f38091d9c38f86efa401f11759c536dc3ec041688ef9b1909dbdb5661ea096b7e4d69ee78a5beb194e1cdb24afc8ea07e26f2c9c45777aae517351fd4f3a2b86";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.05";
+};
+bath-bst = {
+  revision = 63398;
+  stripPrefix = 0;
+  sha512.run = "0d32f9c6121a57900fa3818cc4efdfe7355346b7e25971f21e72358bed84e8a56467df9f8132f2666a5047c8a47606a4745ebdb5a00bdc02b4d33155ed72bec4";
+  sha512.doc = "45ad0c20ad0cdab5ea22bcd3eb728de173c0c75fdea8b315f2edc5af977406e1be2db0d41b5f2d68e57d68bd3adf7e34e1b3189b401a0a7bf1436376f0e46e08";
+  sha512.source = "654e5b3581e66c9df05d7f42cf00b5ad818406d00a03122aedfe1e7f4292f6c6bcbc6be1229ae62303bcb0300c7351c5d0d655da493da0d799aa3183e57dfd1b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.0";
+};
+bbcard = {
+  revision = 19440;
+  stripPrefix = 0;
+  sha512.run = "ac7fff708b3e25312460a740241ed003ee471f84dd4d30388d9cde8380ec9a6b6fa6fd6aba69b170c464a25bec44f1669fabc4ac2d7d3e216885b7e683f88af6";
+  sha512.doc = "9e4561e97ea77c84e3c1cc8f75ca61318937c45b7b50dab66d6745f61725b6397458a05e50a267937bf6db4b28558ff0e9f2225078b9516fe574620982ab2cb4";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+bbding = {
+  revision = 17186;
+  stripPrefix = 0;
+  sha512.run = "d5505fd7aaffead426a873844112e11fba47694ab07d0f5c88be31188fbf4a09ed4b8f8bce75221b2b2efb3ff81fc132fe54c2634f32679e2e2041944ec92f7d";
+  sha512.doc = "a1425b521b1c8178bd6c9b059acf034080be6f3f312decb575b7541d34a6e1de926965cde8701061ffcb57147052b1495b21142f0eac645596a783820eb6200a";
+  sha512.source = "be0e2b1332835920a3c93ec69ae53fe83df4918db9d3080716d7b77edf999a87f54a4c87ccbe4d48b008403539a514810f35c6b2a59d8be0ed6968f6a91ba129";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+bbm = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d795fb56f2ba57dea55a546244c5d07bb20c104cb9d1e6f9b6c229df9e5fa4244f8bb883bcddc150e1072453cb518d31c110bb85d157b4fbfeb47195da939619";
+  sha512.doc = "034d880588fa88d97045d73dd651a0b3573c624dbbf1d2f9fee046c59f007b9e3e2121d5d773b34aa7b0bc8c72daa540447981bf60731e64d99cde49b5f6e911";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+bbm-macros = {
+  revision = 17224;
+  stripPrefix = 0;
+  sha512.run = "06f59837d585c721da77f289119bd4b45a91e3d72543ed3e4de76f84a2916431a733baa379b83a3e299d166e27bc0350df6f053d1ec744c52dcd0297d416fdf1";
+  sha512.doc = "20a29809dffe8090e5c067dd2df9dd5a5f7de6ec7abbc01eb14b5a500f37cd62b50914733edf7403af89a1db86ebe10b3d7262f519dc01dc35b29ba0c70c3478";
+  sha512.source = "11d1d83d558a7943e35e8146b7f44df6a553a513f8e0478e1a9c773d66d004a4110288f91896b283dc4153372bb638a444c53b9184745858976a7e6aac69b121";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+bbold = {
+  revision = 17187;
+  stripPrefix = 0;
+  sha512.run = "1b123e9135179244050ed6f97f17efa2a43c42018b2fa3b01c956a99886ae6696c83df2a0d61ce95cba925c2bb4c734d77253aab165fe9f622695f557fcb0abe";
+  sha512.doc = "c754e81f83a53c4a1cacbd2638d550ad178e0e26d7feb592585579a27b780e11733a7dc68fd374ac575cc7866a1e5417d3df0d2b973e7278d1012657bf340390";
+  sha512.source = "a7a61bb796d3ee618ddc39d471bb29d1b7350a40bd7a97d44d4a1c7cd5e4eb5d5783d2ea46313344468406d1d25c71ac322ac4bbbf7b06aac35bc03651e7ccbb";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "1.01";
+};
+bbold-type1 = {
+  revision = 33143;
+  stripPrefix = 0;
+  sha512.run = "86631e16388a447db7c521087eccbb666612933f6fee8eace091e00b20b5070d38ebc2d4d0a754536eacef9e9e6470f237d184e00cc4419bff85087f54b81566";
+  sha512.doc = "ad841ac652a7985ab907572f66462091b1c40f7cdab2b00086209a2d96056e0a9e32842dfbc22c829b27799882252da95e3d10d4a9dd174f487327d5f3ac3899";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+bboldx = {
+  revision = 65424;
+  stripPrefix = 0;
+  sha512.run = "b75c9f544bc0c6d1c046d614a6e0ba52a9cf920d73e8066e2d5e656e1a8774d42677c5a5bc9848e45bd4892e3ed19f6c3c281333f437b541d30d3410be2618a8";
+  sha512.doc = "671259c208ea744654b82f25fddc3589fdda650c2121c71763ca4fb4c0ebe3a99906763c5adc354f49edec4beec59897445f5864a37640f67e47c8df6473f2fe";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.032";
+};
+bchart = {
+  revision = 43928;
+  stripPrefix = 0;
+  sha512.run = "b78e4017d0355107e1e73670c20457c2dc314dd0537bb3e699df3118231b5b3c0b2acbf50ca07f71216d56c81acbb031d38dea7b42099165a03a8049f62021a0";
+  sha512.doc = "762b75974de179360fcfe6057102919644a564ad2c3431ef25e2c373267ec063ac8350caf0038a5964345491355ddda4f5190eff6de93f2c2da7ab168c829fcd";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1.3";
+};
+bclogo = {
+  revision = 39364;
+  stripPrefix = 0;
+  sha512.run = "9afc02338b4141607cfd50d7678832304339d0b532464ada6fbc22c58d06dbc5a0793098c9e24617ba5296c3f7b22bccf16062017701608a758e4a26c05f12a2";
+  sha512.doc = "8671f8095005a0abec84a316da59f914d19d8fe0f4d33b13e73d6ddabcefd3ec7fedcfc8ce9dcf2ed3380a129f58bec16f73694a5d2769a18618142de93be38b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1";
+};
+beamer = {
+  revision = 69316;
+  stripPrefix = 0;
+  deps = [
+    "amscls"
+    "amsfonts"
+    "amsmath"
+    "atbegshi"
+    "etoolbox"
+    "geometry"
+    "hyperref"
+    "iftex"
+    "pgf"
+    "translator"
+    "xcolor"
+  ];
+  sha512.run = "25fd0161673badc509511fe31b4780a68011ac796e12a841ed185ccb5d9eeaa22c519ddbcd2fc0a5cb70ba94a0752b6b5880f86dd499e4c89f1a5b708f3d7fd0";
+  sha512.doc = "8893df96934b3325455557a8a4499113c9d69d563452a01a81107054d99bf4ab67308482a70a777491d208d3e008b60d9c8f76cd560f1fb8af82d97a2a121bc6";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl2Plus" "fdl13Only" ];
+  version = "3.71";
+};
+beamer-fuberlin = {
+  revision = 63161;
+  stripPrefix = 0;
+  sha512.run = "6638fee0c05b9901935204bbcbd79baa1cd0213c0aba6c8eecf1a9f4b2b44aa9403f42078e84e437e7e14d36a991afd0446ae9ffd2ee3260814944fe7b52e92d";
+  sha512.doc = "2241bfbdd7dd8b034a01e83f4076fdcf628ea40a29d27cf1e6ceba234b68580cb05f5b29d71c196187e3b5ac1e5a0ec566c5e4a0b784e56f43bdf86ab2747781";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02b";
+};
+beamer-rl = {
+  revision = 69254;
+  stripPrefix = 0;
+  sha512.run = "36f3fbabba1319d8019862455e97502d5446f1838db4fe42410d75101f430270df3abdafb61e7fb565040d9aaadc987cf268010aa682fb509cd7303f6f2e6dcf";
+  sha512.doc = "d0add94467afb47bd358ef5a228e314e280b92c8c038f3e6b6f2a28410e8eaa6c984a34b43902e4b6abc2c0246e732be9e9e31065e11cb14cabe5dd34b15e941";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+beamer-tut-pt = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6074f5933b945f02b24c31353bd7d683b35a54f53aacfa2ac19de382f56fbb9f6284316ee70c0eacea3760101d98d4a6b7d78412a0d41b13c9e1c907d181ee16";
+  sha512.doc = "ef6e80c3417cfad3e2f3e0ecd3ce249aa0b4cf0a6b5dced09c27138e34a8c86a74d0d03c6888d0944fe2b03bb5b8180872306263c58f54281f4ed2fe3424d4bc";
+  license = [ "gpl1Only" ];
+};
+beamer-verona = {
+  revision = 39180;
+  stripPrefix = 0;
+  sha512.run = "71b241e603688bd22e10f171d32ea3dcca1f25c136a7c0d0cea3e72e936b068ea7ced6a40c03d2e2fb21e533506bcbfaf10f450493cb4e2c3df2981b714048d5";
+  sha512.doc = "ab68e6accfbfea7651dd43b55c4ddd86a66a827ecc6f6353dc58e3aad47ba89e051fb4f9dcc76e0e8081784385cc696fda9d95c0e82c71b0645d358afaf42c4c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+beamer2thesis = {
+  revision = 27539;
+  stripPrefix = 0;
+  sha512.run = "793ec95902fbecc2de84616b74494d7e34a1a1c88277277ee82bb172c1ef0cc42cf175f62fa2b4926abb73817b7eb258d85be6689b60a56e0faee941276471a9";
+  sha512.doc = "ea71d35ac3e02d3016b8d19d38132ee16960757c9846192cf2213061c9899a9788e98f50dac074b0cf83f6029f883eb1f7784779d0256c719d55490284cfc8f0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+beamerappendixnote = {
+  revision = 55732;
+  stripPrefix = 0;
+  sha512.run = "bfb855380ded0b9ef019a139c93cc4f520d4390d98ddfb43483679742ee597b8e045c8286a9391ec068f51ae6c50372b0438b41e449e23804efbc18767c11726";
+  sha512.doc = "abf6b36bfad890b37a0add2ad443c39ba2f2484bd19f9730fec4cbb416eafc6fce723fd5fa684cb7adba4110f888641cc570ac7b7a26ccbf06dcd3697e2c5921";
+  sha512.source = "f90db38b52c3c5dd3867111c17716160191ba238b965185d31d497494cb17046a83dcc62966bdc01d79a3f1ddfe53d9d9a4e31a6084c951b68598bb4ca392c4c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+beameraudience = {
+  revision = 23427;
+  stripPrefix = 0;
+  sha512.run = "f1fa8d1d30b00ea59b3fd83347fc1ea1e90135e51e8f4393eacdf32ae983a80e865d4364c924c74bb1d409ebf22ebb5e290707b945898db9e6234dd297553b49";
+  sha512.doc = "25fbfbf71ff66a80597b368882de63aee2e090e5604a67d66d52e99dd606ce54079e4a7350c4acee5966555dfa5dc8de0e650c7cb4c136bdc40cbe5739c0dfe1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+beamerauxtheme = {
+  revision = 56087;
+  stripPrefix = 0;
+  sha512.run = "8fbe5425396d8e5fea8ce618091948b84bb9e3998b9f34730686d9275398d7a149c912cf80d9f7da083af583ee37fb191435c68d8ea6741776ec2fcaabe9194f";
+  sha512.doc = "3d62f584a8170113242f1ba9bcd1fd3a47c539cf646719d4e11464d892372b0713475b026be3721e5921202d40593e56f2f5cb821bb12f11a629a81e390f25da";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02a";
+};
+beamercolorthemeowl = {
+  revision = 40105;
+  stripPrefix = 0;
+  sha512.run = "bf9874f0d7bbbe3f95c352d1c5e93c5e7fa3af18dd02eedee553c312ef01783420b035ac74f93eb150a99a597ff9948d978ea575963f4117d0965137446ee5fc";
+  sha512.doc = "258016683c605b4961ee25f30077cec69c486cf3ed0cccce2482db01b39141e122dcb46e02e960a83138d124aa269ec903379c3c6b65f3366e96565e90c2337a";
+  sha512.source = "940218da36cd17d38e2b8c6d79eb1570d6c779b5f694e9b43abf6614db93a8227939e1ef86678f72461752ca0acdcaf2fd5e52a45a35b6d98811511af5090a2f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+beamerdarkthemes = {
+  revision = 55117;
+  stripPrefix = 0;
+  sha512.run = "ced5c093d0c4e3c23fcf774bfcc768b8a3adb20287e0677e1a2474d5ad1eeea1f5f979f988c0f0ae6a484ec1953b95c044b0803df9f76f289e999ec50889433a";
+  sha512.doc = "45d0daee876c0e0d94b2ce6ce7b49f6eb8282643b1bf3540abb07e0e7782434c224ba40ff933e9febd893467ebab2ba7cb588669a98784e8eba6acefa0d30611";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-40" ];
+  version = "0.5.1";
+};
+beamerposter = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "7483f14a3008997c0c39c351e0f8b9a01dc42331ae990575ab33ab29c18cea648e0e6ab328a2c1fde404bc10eec78d7c7b8352bb02636e00d5d6e8689f1c717f";
+  sha512.doc = "f597797340286e4a87b62696fa167af07a1717a175646d11836e1f347601551fe0aec5ad4362c135d0f6bbf6b45e217a91bdb5053ba1331828fbc352583d3697";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "1.13";
+};
+beamersubframe = {
+  revision = 23510;
+  stripPrefix = 0;
+  sha512.run = "d3ab81c5eb90d8566eb850c25d7751f5a341107fdb756b46bb50b392741746eea356ff54ef1ceb6ca6f0a2c0dfb7940aa7cd6e3d0cd27e4328e817d1be454964";
+  sha512.doc = "85878ad48e6ba191174140517ac03039320620f246efb51c65e57541d9cf569d59bdd6cef17f10f6f6d85bff9532f6ea70175cb09b68ea6e59312a407d89f557";
+  sha512.source = "f4c9d5b2f9a868e1cf3dead5636025698137d63f64c0c528abafa0e5719987e6df9be31a6ecb9597824e5c9793172208908616f42f8980b49796368e217be24a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+beamerswitch = {
+  revision = 64182;
+  stripPrefix = 0;
+  sha512.run = "43b91dddb86a5f0158a6181a931a4a68eddbef350917f59df7a281e89f6b87d3db652146094eb46fd89d46f6564d1bcb2f278e34a6ee2738d7c4a817ed1db37c";
+  sha512.doc = "1cbab77e0b5482eed26fc7364877cde6094edb23ad353340172b278d4728024b5187df2982f3985899bcbd626aa77fc2423d8dfc4936b6d32f62cace50a4d058";
+  sha512.source = "0b6ddd42fffe3a1c85c94e0262b156222b0673b1d8d6f54d3f196154eec4a1fe6ccc44d8c34ab04c496e1635e8bf4555bbcb835dda0ed52e780d904d3a797610";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+beamertheme-arguelles = {
+  revision = 68659;
+  stripPrefix = 0;
+  sha512.run = "e8b070e76ada96ff6a679c6c7d553d7ff67d4cc3fc792183bf68eee73fd9be3059eda0f0f7fe970655b6debef3af018b15b3a408bd494bdd506bf187d80055a5";
+  sha512.doc = "c9f34943ba6a1233f24be443a56abe9aabd51dfe7c4531ffbe793ddbcdeef637edf87686934b09e78bcf3213d4530165bf28646e86300ce790b94f0ad8fcc7b2";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.3.0";
+};
+beamertheme-cuerna = {
+  revision = 42161;
+  stripPrefix = 0;
+  sha512.run = "f0433d4a4582958ad057fddcddf1f1f992ec98a199943bcf80a7834e37eb7fa5660258edb08e2bd9205628dc1b8a69419c907b6c007a1c63cd1fb335e439125d";
+  sha512.doc = "96f4e9c3afbb81a7841130ea076b2cd35477e93eb105c03add6077fd76981cbd14b609c3b9e573f143572764ac87b1ff76ce18c377f3bbd9b02a1ed45a02eaab";
+  sha512.source = "a4381e52d7e46336d8d8989be45c185156e67df776d5ad159f2db6c62c751dae59e0c19fa0c5ec3de4b0385047d5f6fdf166b6c12707c889cffeabe11802a10f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+beamertheme-detlevcm = {
+  revision = 39048;
+  stripPrefix = 0;
+  sha512.run = "cab4d390d7469056f2235c493b9383a4374c4a686810db428cfe622a4c2513f7176df489d22f7e37ae1f8a2d3303443b60c12c577764be2258b345fe9c3dc543";
+  sha512.doc = "2c637af44b258c688449ad2bbd81664e3086efe874d03352ab393487d7eae1148773ba39a498611a848c43824415cb5b860259111f6d287fd9e6d7f1c01eb530";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.02";
+};
+beamertheme-epyt = {
+  revision = 41404;
+  stripPrefix = 0;
+  sha512.run = "2bf451ccfe095384aeec149e97d7022cefaf997cd19dedffcad5606fc149739cf21b6128ef08e609aaffd6afbaa59b1cdc401cbd3ee4fbe0e997d724b713a620";
+  sha512.doc = "a615bddd7955869d7e175f734a06308b166057dce0b479a4b11d2bd1d06fda7e0a4fdf8185d0a3db2d2302cea2890184616b92d0b7abd5321fe9edaca6dbbd2e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+beamertheme-focus = {
+  revision = 62551;
+  stripPrefix = 0;
+  sha512.run = "3716ecaa5471847bfd03dcc6b35fbd7d75497798cc289be1c3fd543d4bb063d8ee59955da47f91e5a8e8213c2ec0e5052df9dbbbce5bba702af4fe347a2c60f6";
+  sha512.doc = "b95f069cbf78cfac26bcd110de989a1609c891f3fde3e13f43c52b19e439a3915b034a25e3759b51bf5b98cbccd188f735cf8762453416d0350ad7fbdc652a9d";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "3.3.0";
+};
+beamertheme-light = {
+  revision = 49867;
+  stripPrefix = 0;
+  sha512.run = "5cc15c3ee0222678c1c97b31805421caac8b20fca03b1d748fd2a71756d5d764b8fbfb32ab70937e890f7755966b520362db98a9ae65be3f83509cfa287d600a";
+  sha512.doc = "e2d0cdb7fdabe582f2b6f1a656a5b9b61ee3680fd4944c06f108cf69eced96bed7b25e56563b1cb9879e8da42fdbbeaa41d769158c5e256bc70b5d695571a5af";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.0";
+};
+beamertheme-metropolis = {
+  revision = 43031;
+  stripPrefix = 0;
+  sha512.run = "dae8058ae5c2883b383a2bcb85bbdc45d0b0a3fab46a4498ea1f3b8568f04d049598fa78b72429adc7e36773905c67801e129378e233582f0fd8eb5ca4327745";
+  sha512.doc = "c4661061ea3ce52a20fb8c704042cf755b8b54549dd62467b1e78f85a4067c11a02c89422384e96323ef277ce44a3f648b1778b54e0b5c79b721f67451fabfc1";
+  sha512.source = "af3cec1b7544ecd51c875a704605500ee1ab4374df9cf1a7db6c6b9102c4800651485a64dd865c1158d729c06f2499021408230c50278da3de40f7f0cac7bf6b";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.2";
+};
+beamertheme-npbt = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "9125794ab2ebc4d15ab500b67b9943234d80088393d9b31989ae8209359dca97778feaab3d11365ae1b4131f06dad2fe73bb21fae1220b401c5f31f413cff171";
+  sha512.doc = "7703951f2afee05627847980a05b0bef0cb2fe87eec078f64a3e4796feb4057bdf93708ef0476090d40dad2605c69e23f695b9164a969e6a67f8329e6e340a3b";
+  hasRunfiles = true;
+  license = [ "gpl3" "publicDomain" ];
+  version = "4.1";
+};
+beamertheme-phnompenh = {
+  revision = 39100;
+  stripPrefix = 0;
+  sha512.run = "30745bb1f92c230bedd953d32eaa6f2085ad2aa7f147bd3368fe8ebe4f6092ecc615acce55b9573da4dc04c8e89877ba2705a6712cd4c4f67f34dc59eae97880";
+  sha512.doc = "626d124c6ac02271cc3bc137e60b8a66a861b7f692910e9fad283d8836599e3adbdd1ac472fe66955a392d1b563e955da852cfd5a0d712d284fdb2dc4d709a63";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+beamertheme-pure-minimalistic = {
+  revision = 56934;
+  stripPrefix = 0;
+  sha512.run = "b9c6237108e1aa5f4859ebd1100efbddd2bca55c76bca876e0e3a0c10dbd322a3ee834e4e452b80b2f7755ce026fd2bbe5c69434371ad29df1fe3280b409bdc6";
+  sha512.doc = "791e3a367f5c7ebfee453e7d7a76753763e2bbe122616e49fd0d4268dbd274e3ecb308b5adb850765d143bc46a311316f86bd13e60ce1449b0217d7b4f733830";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "2.0.0";
+};
+beamertheme-rainbow = {
+  revision = 67542;
+  stripPrefix = 0;
+  sha512.run = "220dd54bd2565263ce7bc48068c96b48a0677f36ad5f3d826561e1d0ca21f5ecfa7ab675005e7aef40e4b9e9f149ee341c0ed82ec8a5a6fcab40785cca97289f";
+  sha512.doc = "bcf12ee63331bec8fd8c5443231109bcf1027d1abb9ce94c919c17fbb8a5248bea503acc25bda67226fcea1e30a2ae7283cfcce6a9b937362086e9123b4a429b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+beamertheme-saintpetersburg = {
+  revision = 45877;
+  stripPrefix = 0;
+  sha512.run = "c258a4eee25ccdb2437625982e54def90aec87be003f697a47334be52b85ef223b377c7fc57d49c889121caea664fcd6353015ad2e62f5bee5379bc222958f53";
+  sha512.doc = "bf51e2bc33f32ba3dda6c140040a7499a60c26082569729743228a6c7abc97fb20076d1d0c7d0b64a25a54cbba1d9a8b59a9059d160a5a488ef6641999e8611f";
+  sha512.source = "6cd3ed424b3a724e397de3fb7b47de33a5c9f0c5ac0e0f8b26bde55ef69b66015874dbd438912c682c9aa1c33e4e916fb895458964dea11fe228e29c1afc40e8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+beamertheme-simpledarkblue = {
+  revision = 60061;
+  stripPrefix = 0;
+  sha512.run = "c75bb4c0f0eecf2aea0e24d30410ca1edcf645c323d88433bc6c12adf116740f2f6bc7d8517db764b0b33d9d9227db93ddddd1c521dde3343fce6d807b0e642d";
+  sha512.doc = "9f8f642ebe4cafed03699377be6bb647cbdfb80f99e075e2863b69a4d6b6f59cab6dd4dc831b0fb015302b3737b32d08cf37b3034365b021e8fd9f086f7e6ddf";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+beamertheme-simpleplus = {
+  revision = 64770;
+  stripPrefix = 0;
+  sha512.run = "de19e0011817552bbba482517f9ea4f59590cc837c4b539e01db5f08eafa2dc94adda9dc8fd4f92b07fe2acc38862b5a581c195f1776975469d69c1b7fdd617f";
+  sha512.doc = "e96132fc4669ec82913ad7610a174815be79476fc40ecc1ed35744292d41ba47bbbf1a7cd9d244b41c12ab515c729655271d62a608ae47cd2acd0324cf0f0ae7";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+beamertheme-tcolorbox = {
+  revision = 67000;
+  stripPrefix = 0;
+  sha512.run = "bcace2249558b6519dde1d9c80da791e38330de31da26c606d8bb8a780952bc2cd57f93948ba191606bd44c2260819546a367e34f672555db22d0c736a6b959b";
+  sha512.doc = "240a7be55ae035ae4e155efa814639de14a2c5ddc2dec9bfb963df2010026e8cbc7f6c834b6445695dbd7f1e68499e123b505de068fc196ed25a86115c06261e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6";
+};
+beamertheme-trigon = {
+  revision = 65985;
+  stripPrefix = 0;
+  sha512.run = "1269b79603c415123a91093bc69cd672aa54518da7e7cef52193804fcede45dc09fe6748f2c0c940a754767963174e768b52873fbac5a520f7076229100ff016";
+  sha512.doc = "83b6946c17d060c299260ff272130938933dbeb9124b1608e8f3bd886b2f63851773181dc1efabe901196b37f7254569a5b5de0de7fd39ff558eb21376ffaa27";
+  sha512.source = "49f9d4cf001b45b29a5c7b59155d72e286092157dfa5c0dfa05e7a20958adefda2a182974508f9a0936acb1d5ce199e21b350e85da7e292525b2aaab60e2c6d3";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+  version = "0.7.0";
+};
+beamertheme-upenn-bc = {
+  revision = 29937;
+  stripPrefix = 0;
+  sha512.run = "0c483991348107a2b9102e514ec05838a9ae3e97dceddcbf3b8cc21ae635a272c7d70d97b2e1a0929b7545e50560f16a71f7b290ca16cdfd63177782b993b714";
+  sha512.doc = "5feb0a4401d9ebbc4672b7f9668f850fb65002c7d7124c607009775149c4c428642cd17df133ae80d564ab091fdff039d34c1704360033f2374b55466fe1b618";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+beamerthemeamurmaple = {
+  revision = 65698;
+  stripPrefix = 0;
+  sha512.run = "d3ca653e4d21c08077e6957d2a2ea56f988100aee0c443428328506bd5cee2a739045c99c7373a8870693d76f844dc5ea192a1a69bae197c09eee4ac212501cc";
+  sha512.doc = "92c71d9ce3a124009ad3d72e4b46c8ccb3e49d4eeb193d53080a08f3917c065da44bbfe2ac1ec80fb9105cdf1e3a840e7df065a7b28151771fb5acd33ca66174";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+beamerthemejltree = {
+  revision = 21977;
+  stripPrefix = 0;
+  sha512.run = "b079ceab30460a7b92a616fa6d7216ddddecfa02adfd66bf38aea83eccdf6e63cc52d8b2ae88db0b21962af223b364424227806beabbfb2e344af98474af2528";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+beamerthemelalic = {
+  revision = 58777;
+  stripPrefix = 0;
+  sha512.run = "70d789b4490e5ceb9d578be03f815eea97706fc89e41756908d41f1953c2b4cee4ce7c142406a0abef0497b89b74dfb2dc6d2a841898996f32025f53626a8548";
+  sha512.doc = "b79c55da51785c42c68a2bd5f7a386b21fbb36948df8b5e87e60b9eab263e43592b7265902b6f3a2d3bd214dce122fcf0d504ff807a7bee0ebccf7241fa8e1fd";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.0";
+};
+beamerthemenirma = {
+  revision = 20765;
+  stripPrefix = 0;
+  sha512.run = "6fe83e0805fde96d585dc027ecadd23862815171f56f6a05db0a6788018a096c193c995895f7ca18af6d322877e24d570743d84a922a2c7e4baef35d3f6dfca1";
+  sha512.doc = "13f1dfbc8f09662b627dd4ed6c7ff297612c5d05a140a446ccdcb6f0ad3a9995b434d418994cccc2323ead666eaeb10b32e1a9d410a38c632df9873717397231";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+beamerthemenord = {
+  revision = 56180;
+  stripPrefix = 0;
+  sha512.run = "4ac0d1a6494f7acdb1afd73b2bf8e7c966ea3167f856432ebb872f0285cfb8fe759735b57bba5e9ebbb91a0bdc9e2dd643f5ab0686e9417e0719369266d7e46d";
+  sha512.doc = "0e2038d76d478bfa54a547c97e002e84a98a1dc7ea0a1584f12d6cb1b2c4cb1f65d9d368533b5870c4f3ecae02396ec0172a89eef1547d33a168ab87c846a4d6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.0";
+};
+bearwear = {
+  revision = 54826;
+  stripPrefix = 0;
+  sha512.run = "c758735d869a9b1dedb64c9c0377891606d32ba69fe0d665d882d7d113bcf3c9678e6cbfe93c269758d492a0336c26f937195f04e80587c1aa083fb1c766829f";
+  sha512.doc = "03171083f40cc4688ca6849fd371189b43a9e5963e06be3ad44271b11cb985cfa0b369b49ed43110395e1d7d50f4337e9ce597989be48049cdf3c3a1beac5ff8";
+  sha512.source = "5263fce263e48699b3e59e556827f3fdd88cb812a33d259effad361289ab8270c40d7c3c510938c56a99070bea4894d769e7f0986c7aab75262feb59dfc27078";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+beaulivre = {
+  revision = 68376;
+  stripPrefix = 0;
+  deps = [
+    "colorist"
+  ];
+  sha512.run = "edef18ea01309678c4fd177b08cce8c5a59023cb521c9adab9cb88e096c3a4af3c2cbe035360f9310914252a9f0ca71a0bb4a8e220c75ea38fd2dfe8faf0d639";
+  sha512.doc = "8159204651670ac0ffb0d3d4b9121f573e86bdbaa5619ac461393d097f5d2a94dd547e3dfc83b6e8aad0b57dc2913bebaf77d41bd0355ac55ea4c74175a73922";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+beautybook = {
+  revision = 68438;
+  stripPrefix = 0;
+  sha512.run = "68df2cac1064c5636f1df6b5f9d51773278798310e7d36550f2a55c05c8d1480518407a97037d0167fe92fbab2f8d7be73d528681d66f63afe644ef3ede38ca0";
+  sha512.doc = "62eeb012597c27e02b00ac5d7b2b280136986c412baf7113634bf62e0fe82b1fb9e4fdab3ab6a2345517a046fe46bfad6f2031926f07f69609e895800e215ed4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+beebe = {
+  revision = 69012;
+  stripPrefix = 0;
+  sha512.run = "46ab5e24904f3a5f9fc3a548a13b78befed28d1d32aad38aa57a619313aeaaabcb5c131e14103c7c9c02b42297bc59e0a096872ecb3342cda92ec5e14e9c8c29";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+begingreek = {
+  revision = 63255;
+  stripPrefix = 0;
+  sha512.run = "c6e8493a80e328a10208088f7490a14bbec76fc8d969b85c6505d655840d9e4d8e05da3a1a3b17d76fcc0ad26df7251765d7d4e812000cd3fb9101ad5a46c3a9";
+  sha512.doc = "3143cf03735fc6e5b3a77f17b6099f139d6a1cfcaecf140dab6eb4c72398742719956bc03052e539eefa9acbebd00ab14f7b0be829ece74b8a66dd227580542b";
+  sha512.source = "ce891bf42100a6ff2f046f2a02f9ed53a9ac893578d7120cf483aaaa1d856c9985a6e7a59c2076c9febc35fd9cf21139de6fd682923bfb6ecaeabe63dfda2a93";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+begriff = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ed1060e0ce9bad28f98481eed44f8bd98f6b8be91dd5dc87d5c34a6cc57e724d175fa909fd6ff514399eb81bd8f28450f7c9a6c6a9bc991f35d617a8a25de8ed";
+  sha512.doc = "af28c20897e297af4ca1fb13bb286ff0eece9e2f06f5b734062716c0c5f5b7dd673d046a5a47c907f9a845a7257393f3328d46c4ea2ac0ae6b0eff1244e97256";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.6";
+};
+beilstein = {
+  revision = 56193;
+  stripPrefix = 0;
+  sha512.run = "4d604245024a94e23c30c7968e177173efebc7d8d227688f0e90adbf071c7d0d44a6c07c37143675a66899062ca2b8c366516ca3863128e33e784919a33e3d49";
+  sha512.doc = "9684c13b0d91121e7e7548ed9bc1e377ac7a54f9f1f2aeb57d465bab36b17d216e1cae4eea9b3fb6e5afc42e41f465a31db0209f5b45f40f7db0afbc4646c73d";
+  sha512.source = "0bd1079836d7740070d6100730449e6118a14485902a9016109587530e0f83b8dd4a4466cce914c5f06f42163da746e75fd998eb6b279e45574f81535e65ed1f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+belleek = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "4ae91c01e67fcefd46da99d6bc8379b3829e4e0e88f512f36bfc9743d075090d0c26d0eef11dde5125b344e85ccc3c5a31569f3a1078d00d364ea80120bec30d";
+  sha512.doc = "93266af4f4293639a123f5ba88e2680d87e6d815f49cd7dc6c9322866dfb22308716da1e362699aeded819e7817987938f70cf48c9166e7127836de743e5dd63";
+  sha512.source = "b8547d1b3da8be829b7fe99d0cd7cee8fc6b7158c1799712ea85614534d0b020cfafdc1696a0e5037ad15b215173e1461c64f86a1f52795209272aed9991d107";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+bengali = {
+  revision = 55475;
+  stripPrefix = 0;
+  sha512.run = "2ace635791a4c7a8af0843a5a92d518d0e93fc09a94929a277002a3e4426f199e207238766b07ff3f1e1bf0e3c0cf8b83897b30ba105ee7239d6ce1d591289fe";
+  sha512.doc = "61bed8e39b9dc4673ce27402c0ee76b035e254133af09bbbadd00b80d367ffe204d5f660af8c633bc7dc6bd81f66ce419741e341f63e314367f2e54c61f8269e";
+  sha512.source = "ddfd0dce8379aaa3e224f74fd33fa4dd1fbe6a40d9a01bc6dc8da1dbca5b5eae97c4837ff21c75be8658d37693cdff3c2983fe01c77d13bd0eb89e14f78d6e2a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+bera = {
+  revision = 20031;
+  stripPrefix = 0;
+  sha512.run = "103b2db8f7bccf6a9729faae793246d2933667295ba404fdaa7b61cfbce0f1209ea27e7a2a63846c6550b41214ff496a62598bbb9b731c087b8bba9e0abade80";
+  sha512.doc = "2606c87871d6f6ed27b2a5e49117c50f00573bc6b9ce249d1433da214764b220eb00c73e59be43e32e8a4827c397c53504103e00b7e5602de5df5bb817e2145d";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+berenisadf = {
+  revision = 32215;
+  stripPrefix = 0;
+  sha512.run = "70dd547d0c5138f2a61e20b4585160e5fef281bbba72ba8dcc7032efa957d80c158ba88fdc0dda9982dbcd69a48d5d54286f52d1425a5819e54e05d79eb9dd49";
+  sha512.doc = "f076717ff948247589225fbe4fcd92114d719526e535d645d767a3f7fdaafd3a6ca84c3a60997074186974ebf045e31a51d16d53c8a5fdc78a2461733cc66372";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.004";
+};
+besjournals = {
+  revision = 45662;
+  stripPrefix = 0;
+  sha512.run = "e797bce36fa6529d6b57be352ed81b7413c2ca818fa904a8cc4c7c8f0801369543482aa5c286b40f6f7c5e0b73d53b6aa6b9aaeab3e6229da7dd954a3dedb1ca";
+  sha512.doc = "c790eb0ced559adc6696f0f228c88a2314214ff6a4ab71ae03dc46b3974cdaae53fc685c05f0bbb7646a5b31d332f763fce4a71919319aa520965f56979eee54";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+bestpapers = {
+  revision = 38708;
+  stripPrefix = 0;
+  sha512.run = "d015369a268cff98571985f319f95df9ffe0255ad222e8c8133252c3ab5537cfc4c3ea11aab13a565c096e92472d7724c0ef23ce6a71f62c7a5fc2b30382a054";
+  sha512.doc = "cb5e9bbcc83b6081dd0207001d1b39c6e089e2ae168f20d1cc87482560a483e4ea195fbf208c342ba691d3c85ea9f4674b2eb6cf68db9f9d83d3b98bbab60dc3";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+betababel = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "db2a590e8ed5e946652cc54d5c01bd540b87f77253278f9211c8720229992275f80edc26d0c94b4f68237d84a5bf7b56bd93a40e2a0ce8df5ffdeb124c81d219";
+  sha512.doc = "209f8fc6123f8403bf6a30731773aeea82c5c6de123e24755e9a22ca6f3ea170015feeb541242a772c3244e7b74f1a766e95886e4f773f21c48b353f22d6adce";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+beton = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "23d243f15a79246aa590a7ec65249724a4460ac6e3ac01dba2aeddfc169875dd8392c1374cb8459ff84210d51822430fab9d75a87f0ece20323cd20709de0c14";
+  sha512.doc = "fa579427c97f930455bc548d5b438f32aa291d98f9d8b391dae686b270e135605cb3ddd6cfb9076cb248a17eabb4e62bcf4f720b2daf829b3d12d6ebc294f832";
+  sha512.source = "79e129919c06ef083e4f8fdcd88a60339591b3f95776feb9cc076e46fb379b5ab10f9b48f3b8a948e9a120412f818dd3d99cc24957d3eaa812bbefb388d91049";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+beuron = {
+  revision = 46374;
+  stripPrefix = 0;
+  sha512.run = "623d3b7d8747ce1776de9d0ee6eec013c2050f9cb4a521167bcf23435d5e30c1233ee869ccb299360cfb6f8f4b4034a77d4fe601f789211b290684c0858462a2";
+  sha512.doc = "812dd30a9b49d7ab5e529f3c7ef934be5d72b75adeec1a38cba77c867525243ffd0d4f4901c9100e6518eb0a8c35e208157b8e3669d3700203ab7fe95aa29845";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+bewerbung = {
+  revision = 61632;
+  stripPrefix = 0;
+  sha512.run = "1a5f652ce8e7ad60f22b7c3c5cc46c3963e5511965445fdacef01aecb157ecc4fbd3eed07140d64716b90a11db96f1b7dab8b4568aa41f7049f8a3a1ed0e290c";
+  sha512.doc = "1713c1d4ef0982cf635ea57cb7af7805b001b48cdfef5bf770c627f5460f57945d2d2ead87c6e0ae8ad7cdc66036caa5dffafccc5ccd59ba889154cc6e4f9f5e";
+  sha512.source = "df95e8bcc71b83dc196699dc9f4581ce3482ae9f1b673fbd2bb2551d84c68c97cbb70771ad710052d1f2652bcb2d32d8a4392a038e747e4ce7a25b65aaed2e79";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+bez123 = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e70a0889ceab74fcff4994568a97f31ac93165353ac207ee683b28aee2ad3cb8f770d8e3b450e3237537e97312a0995fa8c17196ead0fce55fd76a49c77de72b";
+  sha512.doc = "91ae5e35394e5bf3a6bbcc6aa7d7180ba546b58e84683c569bc34f5b0f9dcc6ea30153305fd83fe28e3bcd8eccb6179d277d28e1ff56538fc6980a7c3ec8f444";
+  sha512.source = "fc329c0c99ecd10c42bdffde10918239874367e7b54a75c4de4882e520ea82e87188070775174a11621dca9bc5949a850207f02af7c08d1b6768ea87fba7e10c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1b";
+};
+bezierplot = {
+  revision = 51398;
+  stripPrefix = 0;
+  sha512.run = "0cfc80b93b76053591f4d76e3cd2f5518dec2dabc397b0d18f0d9edb40a0eabfd1ed608b0cbd6f4b7b28b9a10a9668b21f9ee798514bfd3ab4cc125392512d6c";
+  sha512.doc = "284cce26134afe943c4b5c0b3d968f2512fa1c47ed1f2b19e70f48d618829b76ffc200933933f27b407e1086d95f38a4e9ecfe85506ccc2336cd5fe7eb40bf37";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+bfh-ci = {
+  revision = 68828;
+  stripPrefix = 0;
+  deps = [
+    "adjustbox"
+    "amsfonts"
+    "amsmath"
+    "anyfontsize"
+    "beamer"
+    "fontawesome"
+    "fontspec"
+    "geometry"
+    "graphics"
+    "handoutwithnotes"
+    "hyperref"
+    "iftex"
+    "koma-script"
+    "l3kernel"
+    "l3packages"
+    "listings"
+    "nunito"
+    "pgf"
+    "qrcode"
+    "sourceserifpro"
+    "tcolorbox"
+    "tools"
+    "translations"
+    "url"
+    "xcolor"
+    "zref"
+  ];
+  sha512.run = "8aacc57f0eb40e83a6331cf86b076b287787672421648df65814214b60e739697d97fea5d8d18f112c27ea60cd2f2b9a26c31fb6074b9c1f1cba4522e96a11af";
+  sha512.doc = "fc7e441fac29da849714c79ed0f68e94059d09c1472b4c56b3f100f0e1af730963e9d0bedeb3bcbb87512ef68535321d6df13370cd9be3d5399cbc05e7f1cee7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2.0";
+};
+bgteubner = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "53d38b2bf03861553a60db38c06b5b7eb48404a08f4bad645b24383ac4131a5b60a0103d0d2217cde1aa4f8bd739db4389d25693bb6186fe0974b0ebb63fd567";
+  sha512.doc = "344c8f7800a273b914265ccd9cf8175a040f021c07aa0fce3b6391db85e8ecc43d5d593aeb8707f82cc2c8c987b2d72700a2fe4d8b0bdfcaf2a525c5d79f7e3a";
+  sha512.source = "ff33871afe34c6d578dd5d8e795e36e83a785893d8741dc2ddf2b8bb27062324f00e0f52b3cd3d993074a7e7d21207537f028f6f5dbf8384d02799d1108b9472";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.11";
+};
+bguq = {
+  revision = 27401;
+  stripPrefix = 0;
+  sha512.run = "8a795ba517941a07ec1445a16947ce5028cfd61ba2b5c818bc894ffa73d439162271d6269c67c8ee7afd6d13551d4a9bf73763c00b719bf3a9019a8e7d368256";
+  sha512.doc = "1bfe38f2d904af63a5a0fd2ab4accd04fbd294083cc462f7d53f79819f40dccf1c3c729ad591d15327eb120bce847ae62c2bc9b9554ea278c1974e3b37296dc5";
+  sha512.source = "108ecf4268a4491904d46f5aebdace10f8aab84a4333fddf94788b677088a584da284fd763a8f0ab19cbc335a3a143489a49836ba059971483faeaf40ecbb0de";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+bhcexam = {
+  revision = 64093;
+  stripPrefix = 0;
+  sha512.run = "7244442c52f57270055fad1ec87b00bb0f3ff4c89e37b57be051b29046348dc781e42b156186310d58eceb1ee9d4ff2fe287a3027642fbec3c9c315e00af9c68";
+  sha512.doc = "3e16cf4f60c089a21d8e2d0a9c78e8204391ba7bc5a72d7fc23637e0c875a57dd1615b8332f6fea9c5a9bcb4fc17c4818bce708998c1c8c71d0d970e9bfdd132";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+bib-fr = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "24e5ada94266ba8786470453bf8a076891e9b7efac1ff64fcb559bfe2c95875d3120634f94f464c9e40da0f45b18a78af1bc428106b31e85851a2998b58f0834";
+  sha512.doc = "a19ffa9b3ce51d372a7467bdf7e360ac4a0faf45fc2205eadfaff16fb640ffb0cccac7fd0849a74955dcf612e353f0e25f94c0af9e3b5bf617f067606c1da120";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+bib2gls = {
+  revision = 68534;
+  deps = [
+    "glossaries-extra"
+  ];
+  sha512.run = "98fa1d2a2af4c0bcb63aee20725206d015d9aeacae7291739d1b0e2a11acc2a0b447a6da8229bf1f09cbbedc4f5071401ec5f61a4a69e64658ad62e927e6618e";
+  sha512.doc = "6213d39c6029ce142232f077e65173b92b9eeb2c88b4d15431301687d4fcc16dbced3ab4817241a1f252c5e8eafd7f63f5bd71ce7d7dcd277b49bddbe351c93d";
+  hasManpages = true;
+  sha512.source = "b029073dff63dd547fcb5f2359c0449e1d91c9eac243cc45a850fcce917db4fc22646bc45e47f5fee14b75ae67e75b13bf4677e0e76868c5a83e689411de28b4";
+  hasRunfiles = true;
+  scriptExts = [
+    "jar"
+  ];
+  license = [ "gpl3Plus" ];
+  version = "3.8";
+};
+bib2gls.binfiles = [
+  "bib2gls"
+  "convertgls2bib"
+];
+bibarts = {
+  revision = 67407;
+  stripPrefix = 0;
+  sha512.run = "358492693511d2de25fc7e080c862e1aa6a6ba40655fbf64991092a4a56c76a35f9fa9f8e0035fa042f0341f8fa9f13a5615079a2c9c56af36aaba4f41385865";
+  sha512.doc = "d708263bf3d867e075281e0cdedca007fbcaf8cc333a8c7c0c9a0b79e68bce1c100b263a740e232a5f84861726dda947914a7c4ba52d87315163db9528c2c544";
+  sha512.source = "b1d8043b2f7c49e6bfee9b1b82f361450878f6059cef790f12e9a26279caf25f2bf446b4b70c1882478503586b700e7b2e78a6c631264b1c2498ec493ba20ad3";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.6";
+};
+bibcop = {
+  revision = 69395;
+  deps = [
+    "iexec"
+    "pgfopts"
+  ];
+  sha512.run = "e4520627247c144f8fdaa3f3923f150297714171124f3e76e0d772ef0455d89c8229574a3e9bc8875c6902103465dace4eda81b0e30de3830152f3cd260bc794";
+  sha512.doc = "30ee2abd74da23ece25080c25c9c94bf44a54dea50088fa6a04109a7f67c9ddbd08973679499854cc4a29ed432a110283319cd2f8f53f6aed005a03218d0ab0c";
+  hasManpages = true;
+  sha512.source = "e2bfecbc459f92887760ce2862874f05a392970c8d5dc5564a46128564f7da7d8dec4d4fa27ae4381efc79222760d76c74f19f5a6216fc234a377f83402ee0db";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.0.17";
+};
+bibcop.binfiles = [
+  "bibcop"
+];
+biber = {
+  revision = 68188;
+  sha512.run = "07222b2bb0aed6b2de71b1e061c878e409205459decf998a7c100ae92dbecd91549a6c5e2e0dabe21f742fdfa7a57704252ec565d9e7ef0bb1d802fc1939edc6";
+  sha512.doc = "a02c41efa4a5fd8ff79c8112dfc22b45e9717aa572021aaf93ede35ae57d91531dddc004497b562c605350dcff1c96441f7613d6c922e882652e9776707022b8";
+  sha512.source = "8fd59f63eaa86ea4d87c8c01458fea16c0e470969f3dd6ac65e20954e8a63e793a58888cdb61f913fcc291fb5d2f3e0205e7e7488946738e27c23f1ac51be9b2";
+  license = [ "artistic2" ];
+  version = "2.19";
+};
+biber-ms = {
+  revision = 66478;
+  sha512.run = "8e78b381978835ea25e8a973fea35a653f37a23e4ab3f0a83f26808f142e4b2a91ce61ab230f7667b222af249bbbae08b40256cb82fb8ddf39c89b7dd042c3e8";
+  sha512.doc = "82bbadac2732d19b750cbc9ffd76c9a26409837b0e1b9396d405b9a64a2e5e9997fc11c53d8d399f815bc822feb1ba3fe9fcb50c8e9401ef7b2c9790450ab784";
+  sha512.source = "9c15f088c5c97d63b928ef10a8d1f0a628874ad664182b631e5a52407b1a034bea478fdbe1c287ddb703fd9c9d3d84a8bdb47ea09d6de25ad99aa1ef8e227fcd";
+  license = [ "artistic2" ];
+  version = "4.0-1";
+};
+biber-ms.binfiles = [
+  "biber-ms"
+];
+biber.binfiles = [
+  "biber"
+];
+bibexport = {
+  revision = 50677;
+  sha512.run = "75f9cb374e0aee1b049e977e3ee1a855ae8f908a6c6191589ce9d9fc28a8358fedf93faa416b1020e157a8ec7a3980673d00e052a100c88724e86050ea5eb487";
+  sha512.doc = "ec96364b4a9f7ab446c6b0104646e82cab1c9015e0d3dfac6a795e58e02dd3920737207d16089c5470ac32f76a61be949efa6899ca935322c0062f71f3477b16";
+  sha512.source = "6c18b4e12e8eecdd03f6afae80766cebe3f826a1146c38b6387c6793abf284d3c44e7d4d6050675f01676128f1d073d8ee8f38f31a6081049b8c390b5a7813a1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.03";
+};
+bibexport.binfiles = [
+  "bibexport"
+];
+bibhtml = {
+  revision = 31607;
+  stripPrefix = 0;
+  sha512.run = "c7245cce245740f0d930518cfee66dc513bd4b43c8b5804e1012fb95f401dbca2321be44ba6251de573723ec2e6da85fc77b9a9192004ac2144bfbeb3225d27c";
+  sha512.doc = "cf01a0853d87180205651768b639ee4cf7ed1b6bb4869880489f57e37ed8fbff3e8406fbcae1d0c652b3d410f77af9b4d1932ee154c60cc79e2876014abf7b80";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.0.2";
+};
+biblatex = {
+  revision = 66403;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+    "kvoptions"
+    "logreq"
+    "pdftexcmds"
+    "url"
+  ];
+  sha512.run = "e07cd6233021bbe2f3591f866c3b3eeae083574f705da9505f6bcbb7284c243ac7f24440253c4557f0a300e9995188bf5915a42643e63eb80ff9e0fa4ffaff1c";
+  sha512.doc = "f765e31a89e4deaa9578b30aa206d8f26ae7b3545a6575a5a28758263fc45eae6c5d3b5aa1233f3000f731ebed104180cf79fd051b47a79699c89305d626d0ed";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.19";
+};
+biblatex-abnt = {
+  revision = 49179;
+  stripPrefix = 0;
+  sha512.run = "f2c239aed726d57eb98cef8892c4b4295205d5a8d55a14b16db8bd6b42bf3f51aadb0dc767f97dfbcd8e57a1f867c5e344c604d726453113a007169edee0ff58";
+  sha512.doc = "04158e1b92a2976d2a5cc107e00b5e4ab90a85799f9e55b25936fdd0e141fc2196f0f64577bf2eb8997b7ba5b7e8c575bb725febfc397940d271ecd5f56138a8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.4";
+};
+biblatex-ajc2020unofficial = {
+  revision = 54401;
+  stripPrefix = 0;
+  sha512.run = "62d09153fea349881ec381bf6f2badd4453c5b2c328e8e3fa1cf99ae43cf62faf525bd453f02bb6d78e9f12ae4e35dd00c2c6f8efa015336bb13f485e8064683";
+  sha512.doc = "b66f343c8456e3efb118fa18851dd08f298d5dcda4312c9688ff486db7a98fd5b3b953616f407d179480220ce905a6a6a08faa325061df9b71c6490277cdfa4c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.0";
+};
+biblatex-anonymous = {
+  revision = 48548;
+  stripPrefix = 0;
+  sha512.run = "3a3cc037e3ce718c219e4bd4e380075d4a92d85cd1f490b8ffee10c5b80bb9e515f1f170b53eae033ea064cac2ddb3bb285655482e5cd65801403584fb9e215e";
+  sha512.doc = "11b4a4f281068004c2bb11028200bf7f8b1461b4b40d0b52b60d60f145b3e9ea38fb672ae532d8430b0ed889df631b1dbeabcef5e9373b720d4a3c3354254789";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.6.2";
+};
+biblatex-apa = {
+  revision = 66605;
+  stripPrefix = 0;
+  sha512.run = "d86ea9a83fd5c1f08bab77c12d6f93e241d444c10554918a8aa91ca4f9677531dac291962e354d2fb19668c3e59fa14e256039fc2cae2bc531c2ffaaa2ae3735";
+  sha512.doc = "84f00557b32e8a50a1256d7a39635c77ee6a59c9fca1d36e571df8540afcef5cf0bf8b1dd648a0eaac1c45744d863774da2d0033223b5e3043653f8759b31388";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "9.17";
+};
+biblatex-apa6 = {
+  revision = 56209;
+  stripPrefix = 0;
+  sha512.run = "c327dac9368270aff53b8cc9319834c36b20701d379017c1ac0f4597cfcee56a5f9c149433e2629e2bcf708bb63d8b8706ce9c6dc009696870ebf06728f11b7d";
+  sha512.doc = "4eb72746e8c627106cbf7e0a7164a30030cf87a6d91ec0afcef70e072dacdf2dcb386ff91e1ff648da178c6f01121c16277630752ce792d54812fd97cb699541";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "8.5";
+};
+biblatex-archaeology = {
+  revision = 53281;
+  stripPrefix = 0;
+  sha512.run = "04c9541ac2f3cab21e412b0ea2efc284f9404f225f83f13c5ec3da2d6f3e7274e5d24647205079971beb11125c8fb3403bf09bac3ae5bbe353f6e2eb073d28c2";
+  sha512.doc = "4cb13b2b394262a7c8ed212092cf65bd0707c1f0b0e8c62b1d166fc929a7ddd7f676e72b0750680908c67a17dbcd5dc1b558ef83b35c8ac7b43048fae2e56856";
+  sha512.source = "0cef203b6be6246ca4664295d9b4d5403154e9813c3419c5473fdc950bfbbfb51f1b6caffd1af7891933684380e2b81756875eec9fd79ec0eeacd6f8ced7b09a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+biblatex-arthistory-bonn = {
+  revision = 46637;
+  stripPrefix = 0;
+  sha512.run = "93b48bb950e9a4bb81efabe4a3c8ee85d7056daeca88c1c1a070c5321b8caa0045c4005467cdc029f8a26b94a425235e36a36bdee163242194a5301ddd6fcc98";
+  sha512.doc = "e31b7912ca34e6ec27c365c2b3e549cdfb60bd94c19b9f1cd54d35d2a1b99ef2702c3f818f7354ef4f5d3157c0e29538a94315ae7af8177de23893e598c7d439";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+biblatex-bath = {
+  revision = 63401;
+  stripPrefix = 0;
+  sha512.run = "38075fd9040bad99fc95860f503173aa9be430317194c28fccc9ed385d7d596e9f738a436753c6d963b53fbaa714301fd2d92aa33d2ef6ce4cb6b902fa0923b0";
+  sha512.doc = "e9005a72487eb7d1b4e5e7e8c024c65e2846435c8489d8766218ca6a2e77e902917a038491b9d6f1117db402397226b7c0f91805b25a9cb62ca90782ef15e8df";
+  sha512.source = "1b6d136c520ec2f6db1fa99f278b0ca1a8d5b552a634012e772ed562296c1eeed1b84171ec64a4a79fe116a939108001ddc0b498f0768b0687fa45f7ca3f987b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.0";
+};
+biblatex-bookinarticle = {
+  revision = 40323;
+  stripPrefix = 0;
+  sha512.run = "8a7bfae09d95434d6db671e4037a2f1d5c1ba9cae5982e286389364ee2ff24f9a2daee78c69e529efd06be37d2e6a6f860820361feb42f5b84157dda2ef0988f";
+  sha512.doc = "727228b915e6b370a74b4d38dffde3bbb7ae47973c33263bafab2aa6b640102775dbeeea7f09c046903dbfe86dbdfcdd8e0418d125a51678e603425328cd2da1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.1a";
+};
+biblatex-bookinother = {
+  revision = 54015;
+  stripPrefix = 0;
+  sha512.run = "afafb9bf593dc3541ad527f09ee881fdda4af3bff78f02b68d53463a07494ac6c03ba55165738501b685e3e1d998eeb973e8431651ccf904b3ce0ea591dc0592";
+  sha512.doc = "ebf06bec2cc1b083a472bcdf03772c9f5568a1482c926ebf886f02ece86a6f0c31a127d285ee16baadc4c0ea771eaac05e374c0a3de215d677b07a0335d362e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3.3";
+};
+biblatex-bwl = {
+  revision = 26556;
+  stripPrefix = 0;
+  sha512.run = "ca5e20736a70ed02fbdada150433162b64b39b0d95bca623cebda8da821bfe8554f9409cdd49af7559737dbc6d6033bbf6868f5ed809b1004cbeba4bbabbc38f";
+  sha512.doc = "32acf8bc10c07532e8d6174f3dd9a1f850acaeaaa5a91d14a1c299f2f5f22e34c619a41fd9ae7a90e097fd5ec30fdbce581f65560e2891f697ddb0106469f50b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+biblatex-caspervector = {
+  revision = 64866;
+  stripPrefix = 0;
+  sha512.run = "803bb26a4abd4c735ea377c3ecf2b3906fb40f692529d54673ccb0cec3711c98563ccbe061a24025fcafb5b39c83a4d29f5e3d1bbd916380ce4396dd9f11a47a";
+  sha512.doc = "fca9d334178ceba7777055a3b9b98ccef673dc6d94812abde55d3d826db244eeff36dcc4e1b2157af10a0980e9f9f00a5c4d5b0c59a1d1e26f863708dd8cd6e4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.6";
+};
+biblatex-cheatsheet = {
+  revision = 44685;
+  stripPrefix = 0;
+  sha512.run = "a974a8eeb4282f66ebdc7a57d40c76b0f2bc957249c130d4f97aa9f9749f5091745a87db277c3bef43d0f4e37790a9663949ca3bba3b28a16d37c13bd6029181";
+  sha512.doc = "a2b9a82afe127d0bfb71f3a481eed3198e27ef35caa5cd08557ed35645f6209e9187f1e0c21d6fa51e6c32d0cf044c0d85373195a5f034c856fb4beec360af13";
+  license = [ "lppl13c" ];
+};
+biblatex-chem = {
+  revision = 57904;
+  stripPrefix = 0;
+  sha512.run = "5339931e89e477284cfa76dcaa0be9ea7b3417dee4e20f8ff2a04da25bda4685270d3c001fd41f786f31c87e590b2aa4b597a517ef8086c75aad8f1e509a770b";
+  sha512.doc = "17207489eb4d5ab5cf210882e6487dcf07fc30195facf27f3bab95f28fd8cfdd270da30d410579f6a8d91a1e82e7e12ff809fed47837e3ae521927b8251da5fc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1z";
+};
+biblatex-chicago = {
+  revision = 65037;
+  stripPrefix = 0;
+  sha512.run = "dd93d36fbe11af94840c9dcd30695f5b291bc5da58b7e30e47960be42094cfb48a31a8d1c24dae41b56420f65b3b5849ad29a558387a9fb38006a9f816932841";
+  sha512.doc = "e30297477d9e353bdd073b7afcfac2c890fb255e4c20ccbffea7fb3a3c6593496749f1cef0bb1d38aee649d3b054c844efb47008493f5410895a55b3369672c4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3a";
+};
+biblatex-claves = {
+  revision = 43723;
+  stripPrefix = 0;
+  sha512.run = "008cb8403f1b35a7fd077f8ac2f33f73ced090ce3d65ce678ecfe90af8ab6fb2b4349342aa838d2d4f1e78d0d87267c7b8206a3377c6490499ee9196498c130f";
+  sha512.doc = "a11a4df38dbeb4c27f30b824c9f1ba230d273e227b8cdbfe5f61268a1a2b7ff3193e79d8e8bedb6f9334df39001b71a3ec78116637745679bf3d67582727371d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.1";
+};
+biblatex-cv = {
+  revision = 59433;
+  stripPrefix = 0;
+  sha512.run = "d034400abf6c0342a37e6e5de09d5eed252e80cfb93b4707f6e879edf6e190180046d28830fe382a6240d6000bcfb9277a66bf2e21b92ce9fe9deff0596f1c03";
+  sha512.doc = "23093f0e8f472eac5db45026266c17b3337d478af6dc1776515417a2539ad671a67dba4ebee9f83407ee4c126cef5a6245106916188093ced89a52c44afba339";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+biblatex-dw = {
+  revision = 66579;
+  stripPrefix = 0;
+  sha512.run = "bcfc88a15950bce48844dfdfcaa8cc946d553c9fc31b3820dd52a9f4588c55e253cc593d13b1dda0b38153a21b93a3d9a868398296546f54b5b804c58eebaa1b";
+  sha512.doc = "54699b3f4e89bafa89cec29ed14a0ac32269bd52a68dda7916961b50032fba9ad3acadebb1737d8bdffcfa07f99fd104ad3fe19f0a1f569258fb4ceacefcd1ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7b";
+};
+biblatex-enc = {
+  revision = 44627;
+  stripPrefix = 0;
+  sha512.run = "6aab8a819ce9a3ec2d6676ab8850c3fc6bb81e5af5c9414555581cc9d164184d18ec550fb0ca67d28d800826356f1c709144ee7d38c0cfbc274179fa813a3a0c";
+  sha512.doc = "ae50544ebdf7bbf9ee708f193493ffa241ba91f0925a2bf03b6bf1ec486586fde3c630fe717f4f2904373c08a2f9a90afca86b50870f87aa0d04430554650223";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+biblatex-ext = {
+  revision = 66641;
+  stripPrefix = 0;
+  sha512.run = "d39e7a2418beb7b627bb6cb9566dc17553f0f33c6c720a6da760976d6f0333cc15763d79aa2dd09a70d571a3be886d4129896db14616e8e28d426cf41945da8c";
+  sha512.doc = "bfca548e2bc673037efe14a54363787311c05c8518e868f7333d958f45b0a75da7d65caa9dd993ef37408414d27576ecc2cca7eb5d2e5e316f4f2f94c961d8cf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.17";
+};
+biblatex-fiwi = {
+  revision = 45876;
+  stripPrefix = 0;
+  sha512.run = "72b1e41ac55403f144529fd5cbd88f51dfd61cd637bd8e6427a2714d3684ffa37774c698475994f1481442cc8eb336d8de398d55b3df28e5e1615b9cd74cef27";
+  sha512.doc = "37fd37d39fee963af8567cf27cd266597175ccebe20f016c7dda699d95e6f7fd0408a57f9061b98996a6ce8eab04a8ed376e6e29b5cb41635d004d24082e91be";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+biblatex-gb7714-2015 = {
+  revision = 68240;
+  stripPrefix = 0;
+  sha512.run = "6bfa18d733590bd1c361a47fef482285dc2357617e69f49edf0d398311ab038fac38d326515b840fbd46630171af004f4d66f1db3b4f77efed836e297c92dc66";
+  sha512.doc = "7aa9cea56196c395805b484e5f003a17215db968ee3e7fdd8aa1ff5976079be542adad8cbb25e0a874a1094f63a17efc4fba5a9ac70d22ac7bef739486ad9a68";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1o";
+};
+biblatex-german-legal = {
+  revision = 66461;
+  stripPrefix = 0;
+  sha512.run = "0d447d700791b3e0a50fa98c14cd71c735e1e1196c9d0c23e86114942d2a9d7dfc9f769a6f8ea7aa78903f1c6bf5600dfcd7091250ef65f2a2a5295a796f8fd1";
+  sha512.doc = "8b83f35af4cbc23c2e19dd35d3f798575f1df540bd4f10a9f0f7d732d5de6559cc0ad49df21753920eb659596b5e506e17fbc066fdab27552831d222da1e394d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "003";
+};
+biblatex-gost = {
+  revision = 66935;
+  stripPrefix = 0;
+  sha512.run = "8d87595c133fd1b64ea7facda55a1a7a79dbedb93750e0f54abd26e5904d331200349a956eb03a67017015e85e9854e26f6753b5d2be2ef0f3e4d532eb0b7ddf";
+  sha512.doc = "3ee6799d4dd00b4503fd6d7bb041d674c9e61d4ab3c366fe078a9db4a4da154601c13876dec51ba14e3322442e3174cda81212df26d2309e3517a60d06283051";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.24";
+};
+biblatex-historian = {
+  revision = 19787;
+  stripPrefix = 0;
+  sha512.run = "bba5cedd64fcf0c0cfbf9b56c66838141917ba1e7c2f27aea5bda44261ba28366b465415e3674a2ce398812d5cefbb2727c7e5e1adf53a2d9779754849664502";
+  sha512.doc = "ed87ab74fd06ccdfa0923289dcd7a37df695fdf76003aa7ab142c9d924fb69a81430ab7651314a9a391b9114dc2c2d63ffe94461bb00fd33d97ac9e8c5b2a8cf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+biblatex-ieee = {
+  revision = 61243;
+  stripPrefix = 0;
+  sha512.run = "2f4dd68ea556dc56fde888294bd9a3368efcf4099b95b0c90e60225c3b99181de52b406a7e40a09792b6b58410174d74d774a0aeb1feb4c8bef69fd513861303";
+  sha512.doc = "ef24c360fd211b79538aba8394a831a48c4b518bcecc516fee91191aad5b2eef06ce9e0e2e033134499a94dac4542803c32a207b2b71d48b14401b20f5aca549";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3f";
+};
+biblatex-ijsra = {
+  revision = 41634;
+  stripPrefix = 0;
+  sha512.run = "040efc5b43e2642251921bcc49db1ae2e00342100d302bca24e2b7b11d1724797f1fe7aa254d01b35d1dfa316f2b0f739664f275031c498b157bb652c6aaef44";
+  sha512.doc = "36cef635b4603606d36f13b489320e10fad48869b8cdbe78d6f81ca9f3caee0f3e14e408236b1f18e6c7cbf3cd414ed8eb2863058b31e761b4355c6ff1230dd3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+biblatex-iso690 = {
+  revision = 62866;
+  stripPrefix = 0;
+  sha512.run = "e337c10a9eaee195b091deddb93fed9416912856599d31562812dc4b5818d495e6ed6443ea1c801298e351be7ae37f830e5ff23d31beba8ea0bcb682da15f5c2";
+  sha512.doc = "ec7f5e962bbe119e583c8dd671b28229c39043e1aa06319772d878c8a49e466541ebd5adbab4e1b229afcbf91e9cf981dc6d0918f3358a12882bfa5d282d3a51";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.1";
+};
+biblatex-jura2 = {
+  revision = 64762;
+  stripPrefix = 0;
+  sha512.run = "5fa0044f2a91cbdf550949829ccbec0a11fde1576c6f84f861f1899dbf2ebf4124a63a489f77e487194e61bf4c629772cc77aae6cb35260e8bf92e64552eeb7e";
+  sha512.doc = "87d31c5f9c0ea71e28d26df03c88497e8bcf18b07784c57be3c55dba0660cf58e2113cef25e802ea6210a87cadcf2bb2398b43ffbff50519daa62b329b678c4a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+biblatex-juradiss = {
+  revision = 56502;
+  stripPrefix = 0;
+  sha512.run = "6f78c1da8426508af972a27b6a23439a3b84c402e6df2494b333111cfddcebbbce639a49c8e900cf52b0e63724a41031b4fee82e0a17f07b479584bb66c809d8";
+  sha512.doc = "94bbebfa29a491fa6e502e55236605b5a589c24920d235cbecb8c9372d1e580d586f643537a5ed6afbe6d1656f0d5ee8610cd09e3112a9e2fcd00581937016c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.23";
+};
+biblatex-license = {
+  revision = 58437;
+  stripPrefix = 0;
+  sha512.run = "f655338605eb7257b2746a73e4f29d58912addeb65a272b3135cd45b32035a58c0f9c9556dc9ffabc34ca8c3b00b4d8c4f44da6654d794dea3bc2a94b986bdae";
+  sha512.doc = "8638454c5014f7df6c82edaf028872acd6f6a135389919178e50bb660236e63a299483f3ef4e83476e399e2cff71f1563e4a2fd111c1d18aac20273b3abbd744";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+biblatex-lncs = {
+  revision = 67053;
+  stripPrefix = 0;
+  sha512.run = "b2ab630bfdd41150b0be50d3851c03413ca8c8fbb5756989bf4e0bd8f98480a65eadcb9b11ab879f5cdf3b6c980376ff6ca6507bd26248a9f1b42b9217f656df";
+  sha512.doc = "ec622c2258d96900fa8daeef1aee6216eb933870eb09329cb90b7771b3e8668c88cfd253d4da0889ecb127421061bfa7cfbc8df27ac59eb58f7ae309eebc1f82";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+biblatex-lni = {
+  revision = 68755;
+  stripPrefix = 0;
+  sha512.run = "f5d636b5cfa0125be2f5f87f41ebd0ce7bb853f7eddb4a7601f72ad42267e6456e2212bcdf5d820db3cd8b2aca058123a8dc2bbc67305cedf331d83b9a007b6f";
+  sha512.doc = "87f37b95865ccc3d66fd514fa038b8c224e1a7df502e6ab59e65a37457f129b1188e510fee0f307296222d40ce241acc307e6e2d2cef7598cc009fb21a9fd7f0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6";
+};
+biblatex-luh-ipw = {
+  revision = 32180;
+  stripPrefix = 0;
+  sha512.run = "e58e2522d9a4711454166c816b971bbf6bab1f8d1c7eea122933c8b7955a49ad294df410fe0a75375134b77d442bd5214ee25d56d766be7e5843e4ac14d7ef5a";
+  sha512.doc = "bbfa55884d3dd3167618f6f9595c301e5faeab0a35cd058cc68922a2aa8362cb3a9d035eaea06ee43c428dd89d23538b15bd4c79c1e095ad10aa4d1d7184f92d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+biblatex-manuscripts-philology = {
+  revision = 66977;
+  stripPrefix = 0;
+  sha512.run = "8ac244a6dbdc725b256e5de0389ab4e4bef4f8e1c85d8c173680e66f1ba793679c8388e70e18791c544091a8bc7870459a945c6a5f298a80c530e58d071bf11d";
+  sha512.doc = "eedeb99e8712337165d684c38621a0bd7829d3071fe8df1496d2347c5f0b8150af68b20caaad69c8d3e3f08c75a52ab63df5d16c48863d0ea179f15c0f55a490";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.4";
+};
+biblatex-mla = {
+  revision = 62138;
+  stripPrefix = 0;
+  sha512.run = "f286ec7553818df5900e6d5e791d56c815711bdf6dbc3a317bd416dfae9e7b86d94e4d43cb4846cffcef9e9a246f0a059835ab6812172130a31984dbf39b58c1";
+  sha512.doc = "a6e5861754ca4e1bb42dc054188777b63d11c1438f83399c4752ea849284bfc7a97943e891983b88117047f59652441c31edf82f382370ba233deafa0445c17f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1a";
+};
+biblatex-morenames = {
+  revision = 43049;
+  stripPrefix = 0;
+  sha512.run = "7e847faa586655aa7b3c92d9379540b2f5e78fb50843e36416e21552c6a9e810945f5b60a96a14c35570bd0403ac29a43af29bd46e2ecb0d87e3c6ac90345826";
+  sha512.doc = "c30953fabfd4717c56cc818e55f83995ceb203bfd67775aced3fe8f1f4f4a92b118ed9c40665ea28944806cb2d409a541f59df530e37274e3bc3babfbe55713a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.1";
+};
+biblatex-ms = {
+  revision = 66480;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+    "kvoptions"
+    "logreq"
+    "pdftexcmds"
+    "url"
+  ];
+  sha512.run = "811bcee998c24f46ca5fb8bef9532148c97233766c30f0022cce7022ce0d5f0b5ee260ef0d7276095dc4ccba3dcf67e90a4cc1abf080951c9bd7cfa4237428d6";
+  sha512.doc = "dd6dcf78d0423578a41b47ab84fee4f398a238ac15e098e09d8cee93d5d08d4af62a72d90fadcd5ddb497cf7a4c4b6017fc721c1de246d0aedc98ccb32bad111";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.0-1";
+};
+biblatex-multiple-dm = {
+  revision = 37081;
+  stripPrefix = 0;
+  sha512.run = "9f83220ae7f2576b4f58394634dea831e5759bf6560ede3244ffb9d18fbf522e9c728c47a4184a43c2dcf6807481a964d7e468e4e6cb921129440bf917925a8f";
+  sha512.doc = "f33e650b2faac0c7b9d078f0f4fd9da8a58562c6a9a8b13acbb4b23001d2ecdde105c08b6b6e62f138783d61f3e071f8780afee2f170c134c275ae62ca5a597a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+biblatex-musuos = {
+  revision = 24097;
+  stripPrefix = 0;
+  sha512.run = "129d1c12bc0e4e8fd339f7bc37442947dc492700a721933c9dda0b18edf78a9b402884376cb7d80893a06834f70a5d377fd264813cdf869ce5e40667f296d618";
+  sha512.doc = "d2fc62bb25394195a161e47ba116f2e795e6009b5f547d09cae2e21cc0f8171c610013622c2a019438e04b6c089d17c21333e3c70b8faeb09f90113cca9536c4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+biblatex-nature = {
+  revision = 57262;
+  stripPrefix = 0;
+  sha512.run = "b4b12abe904d96c9489dbdf248042ed1f1af1474921e0835027220059492f2441aace661260fa3632a65bb2c1ec0ab4e521014e63a14f7fb835293fd8191c2fe";
+  sha512.doc = "c5169189b1225dba8631a0f7f5ceb5bdb5267888b2817716e23aa79bd4516665965b4343ed5e1a8e5099eb59ca64cea9edbd31613f7cb02f161b8ba561c6d4e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3d";
+};
+biblatex-nejm = {
+  revision = 49839;
+  stripPrefix = 0;
+  sha512.run = "97443b036769ffe3487cefa6cb5647eadfb8cdb20db0f6607028298b196a0df1ddf1fdee85e3f163a138da47f28019ab32147f65a5f7cb23b46596c96a772799";
+  sha512.doc = "bfcf854e7545237dab17bfe3cd2045a1914397a02e5fa31bde2bce8c0e44c474fe0389e2cb8cd59516f4db9a3b538524f8321723a49c41233de637075bb41720";
+  sha512.source = "7a2cd3e8205c9b081e9a9601240dffd3943eef31cab5339de92be61fd023f3889958292ba8698760e8d8e6cf196f306b76e34c677d6aa2074271d11cbd78f799";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5.0";
+};
+biblatex-nottsclassic = {
+  revision = 41596;
+  stripPrefix = 0;
+  sha512.run = "a0da4bac443dcbc2c0d8b97d4eed21c171e876cdaee3699a0652c905088056802bc12e1f16965b6b2063e1ca0dee808f5f5e9fd9e5f6da7f956548fd5bf0b222";
+  sha512.doc = "d0b6de2439ff0698b14781deecd260d5851b44da80a10827e0b0bf5ff21ddbe46b979dae9afe988ec1520387668a802a777fba28a830b0e0a7ce60988bfe375a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+biblatex-opcit-booktitle = {
+  revision = 48983;
+  stripPrefix = 0;
+  sha512.run = "4779618979e358380b2d9d2163a8e62274093bc4e7d7a959364b1980d86110233f3927a80e2dac7390ec43d0626f92311d5923657872d25bdcab5d93dd84956a";
+  sha512.doc = "81990177b6cb92dde0e2d1371fa6e5ad6685c9750eac87063e336fd3412b46eca40e091bf2222631f6abcef995fd04c82a3cfd3f87baa2b069c74457edf7f13a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9.0";
+};
+biblatex-oxref = {
+  revision = 68950;
+  stripPrefix = 0;
+  sha512.run = "4059920c5183f9ed337b9fbc0e56ddaed2bd7e089028729c606981dddd113e1d916f335283608774b56bc9fbda53822e1e2b9ab8d9c3283a05bbda530ff4e234";
+  sha512.doc = "55d8336df5219f430dce34e2138d770557e9d68ede3d15b34a1a1b164d92d58a27664470764c45fb65dc6b5f6e1550e7fdcc9aa5f266027d3543418f7b6d2b07";
+  sha512.source = "df89dae5cdd3a5edf49bd49ecb1226dfa8e9145ca9abfd10a065ea4a5f12e65b4d0dcafc9b4c6067b180029797cebdab7d50f42c8dcb0fdaa21e33fc09963eca";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2";
+};
+biblatex-philosophy = {
+  revision = 64414;
+  stripPrefix = 0;
+  sha512.run = "dad59b9acdfadb96f0be528cdc0cf5c0a89fc6d35f8d74f6d15230cf1177f4766111b6fcd21fb5aaf1694f1d0e720cf98d6228a89bc87c91124a04526e7291bd";
+  sha512.doc = "1baca667f89ca22f56d323764de02e93f2ff543e68af85a8e0bf4f23e005caf251d6771012e2df44ba9df35b516e6db449037e5e8d8d54691ff68080957d459a";
+  sha512.source = "d8a6ace3497436b0993f3da25a5e13879a23eca44d4eccab00377b0a62db1a2d1cb1e40083c7bd958a3d3968c35d88c0acc13ae9e07dd8b8c559a4770d7bc6c7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9.8g";
+};
+biblatex-phys = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "76a37bc2d37e2813dc39b9b21cf38788e6da14e60222e4fb36aa90e5c933c18adfcbc1c8affcf9a8e70df14d516a4827599b2c5979828e7e28b77b7b3021329d";
+  sha512.doc = "62fe809519f86ad46136c18247b5c440766778b61d1d406df302aec76756a2259f06ae175af2267de30c1347db511f9482503326c28e1d382039d5047a75a961";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1b";
+};
+biblatex-publist = {
+  revision = 68476;
+  stripPrefix = 0;
+  sha512.run = "b3a8bc7c370e1dd6f7545e878748ad7afbed934440ea37161f33350b8a277ec4ac4844ffb37273b282352eb543641ae77516d5bdc7c8245b97d2ff946d31dcba";
+  sha512.doc = "d5a3841a106272f32941d5a9f8e2d1544eaa431f60f630cffb1168d3e579412f5d867aff993d1f76fec7d1590248bdfdd5bce93a60f014c15f1275b800b7a1ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+biblatex-readbbl = {
+  revision = 61549;
+  stripPrefix = 0;
+  sha512.run = "d74bd07be5983c2731a418ae0167d99e2bdf8d1a9569186a8940f89af3b9a6fe82f641717638c693b98b61637a705fe280d033282d1e37c279aeb080c4b66399";
+  sha512.doc = "9ca0584c36e7247496cd0375e0f6585695f509c4e88d29f23158c5c5c7897758d678082c9c836d0cc878423ab23d54e9a0c2b40c5b63830fd8996a35b4aa09cc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+biblatex-realauthor = {
+  revision = 45865;
+  stripPrefix = 0;
+  sha512.run = "dec592d3f16a431286f7887af863664d777e09e5784a53e9b99247e3bae86c7928907135980d27614e52ab6bd1f1f59a3e8633ecde05d3f9b84b97c84ccefa23";
+  sha512.doc = "bf0ed482905bfcf9bf5a8eda61f609037316012aa2992796c57d48b5f5ccac496dd372ef5e8c88262c8bc5b2d543cbf5f6aba8ff1833a99db6929dfbf379d2cc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7.1a";
+};
+biblatex-sbl = {
+  revision = 63639;
+  stripPrefix = 0;
+  sha512.run = "6aff57b41510357eb5d73322254fe9f8462917909cbef6124733419122e681494c9ad13966438c5cabb8efffed527b1a455539bb092b9bbe61e6ea8883f9d73d";
+  sha512.doc = "e61925481c93e5a1536df91db28544d124aafa5de0871da78b069f4e1765e8a68b4b7e040a4ccdb5c3d8a16140397d33d4e04c212220ba2290968f438e4239a9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.14";
+};
+biblatex-science = {
+  revision = 48945;
+  stripPrefix = 0;
+  sha512.run = "e75dccc1a01975776cf94c17aad531823844085e4fa2ba54ba4f74d77ad193c26238eed602f309760f3057b6fc405fd01ec2a7a20647cd8570889832b1ee6bdb";
+  sha512.doc = "ad7d8fd4e54830d77f0a155a04cd523c5c789745b5da34b8ea1efe59ffd4ee1673045dec58d28b8234993a70061337178cddda2267506366549c2639f6c917b7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+biblatex-shortfields = {
+  revision = 45858;
+  stripPrefix = 0;
+  sha512.run = "be9562c2b79e1f01a110708eb6c0de165a9f596bd18ee72dd6c8add0bf380222a31ae12d86ab843083ae3e7f47a608826b985455f4c8501bbe21d4f0a0e15b80";
+  sha512.doc = "e6e5e6c113ef43a9784f9000637d526f0bc989358d690d4f41be01e1e22abcb33f347421c727c411c2c02f0c11b1c60d54e7fc23180bd6f66c5c46bf29fc1202";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+biblatex-socialscienceshuberlin = {
+  revision = 47839;
+  stripPrefix = 0;
+  sha512.run = "f927cccda37e1ab37bd01b49f3247b688ba0186db5b162ab9b73db7be5f83d1b261bcfbf355d575a3905cdfca2421b6b592ae0763d7575957ea382b451fb6099";
+  sha512.doc = "30c411b27e50e0f4ac46385a07606846ae3dd744879de257e2f2abec829e5920957d55e970255cc51cb768f3ca0aab629f30d2860e5745c4addf5aac10ecaca3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.1";
+};
+biblatex-software = {
+  revision = 64030;
+  stripPrefix = 0;
+  sha512.run = "a95344eb338410804347bc0273eacda0c69804a5dd6886932d11d72879f4c59798cc9bf902667957cc26b56adc0c2f7f747e8967f85fe5602dc1e786bd3a717e";
+  sha512.doc = "cfe81f1a29f49a756df7595b18ebd492df77fb7ca208418b8627f49180a0a8bcd28b779dea58a88de16b6aa6553243b2755df3e16bca696ecb8a17fc3773135e";
+  sha512.source = "6ee3d3df8bbce5dfd06f64b4e959742e8cb273db8f0606baeef97750dabb0391fcf409dce603772c525a0ad10d543e476d9ec217eced690b0c84e7a547a48f32";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2-5";
+};
+biblatex-source-division = {
+  revision = 45379;
+  stripPrefix = 0;
+  sha512.run = "f7a9b6a9f8fb21a5b9f06e3904ec2147ccd21383c3ced8852b22d0cf62088be103b674466ae571ace6bea52904f6cfb79ef2982bdb16679d02ff1d260d5b3517";
+  sha512.doc = "1ae3883454e6aafc91b996de520a4669a06a67cd74b9df7e7cb7d096291d5f1dbe728a2a0fbd3b5968fdebf64946e829c4722bff33ff52ccbf32d8055f042144";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4.2";
+};
+biblatex-spbasic = {
+  revision = 61439;
+  stripPrefix = 0;
+  sha512.run = "478c5cf4f9996e8b15b13a1ea08b53ea03ef731666095f5374bbca6e16c93d0f049b891540742821140e91a30a8af1fe3c233ec45df1dc777b7c408b52676d97";
+  sha512.doc = "9c12f5fc1b328ef0369e7c82c2a25162568cd1d1568aed4ace480a639a38e10642e93ba20939fb0adfed2ee16b44e9a7abcb3eeb6fb51bcbe47bce7436a590fc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.04";
+};
+biblatex-subseries = {
+  revision = 43330;
+  stripPrefix = 0;
+  sha512.run = "37955d7e547fceb3e3856f5e367d39a4952ee0d604652963db2a54466e9d6c1effb6b2c195ffd1dd15eec5552df97419a09763bc51af06c6726dbe40a6e3bbae";
+  sha512.doc = "94bf4807e0623c35690ef7b1fd879710a762630224c0a52ee4e7b4a96c27001a9653de2c7d2ecd2a12cda448bfbdc336c54bcc8fb6674782af017cddfdc8e5fb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+biblatex-swiss-legal = {
+  revision = 64491;
+  stripPrefix = 0;
+  sha512.run = "12781675dfedd279313be790c218e7e2fab876774207a45caf8f7843eed74a37c460038cf403d3ca38a5b849866917a24e5d61df25cc7ca44606f9b606e95a26";
+  sha512.doc = "04338344d00c9df040b2aaedca7a6c8d34caf1077b9da7322ab7db6b17c1fa32da7c170e45621f5705f552eee3c2392f78a6bafa8bcb918a07452d7e696cfba2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.2a";
+};
+biblatex-trad = {
+  revision = 58169;
+  stripPrefix = 0;
+  sha512.run = "e14b9326eb05af2a89eac072d6c71f61527a53a813605bbb399703d2a23cf7ddcfaeb2cc77f6f7b8959e05833ae3eb343224bf126907193af557d09fc1746552";
+  sha512.doc = "32d6fa6369359e15717257be6e89f77081dbd352654d4c60d55f4de9c5f522f7d222b51bfb5a1eedd7f6378343d041380c5e97e559e681bcf7647e0695ca13fc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+biblatex-true-citepages-omit = {
+  revision = 44653;
+  stripPrefix = 0;
+  sha512.run = "908f6544890f69b4ca405c94e68c4814c52956bb77108f8e29bb4b6b63ad7de3bc0b1f1213a612f9e0ebd94ddc054907092451a9f326476f39e18a1f81ed0c63";
+  sha512.doc = "bb53e66c1aec87669be8bb608f82cd7683692cf87aeed792d1e9d49045039c15fc7113fe116e04332e8aa6331101a6e97e97f655e26cecee9636409d810f77e7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.0";
+};
+biblatex-unified = {
+  revision = 64975;
+  stripPrefix = 0;
+  sha512.run = "01d07011f31b2e62d6438390fa81b5b86af50a9007ef66316a8c2125c2670015fba458fbe128a409c49510baa054b2dbe6c0ed0f153366c5aab317c38f62ff84";
+  sha512.doc = "56158b821a29bbe55b67520c9109569afa8b9338af18875da42f95abdf934e5b89bfd9c4bdd41de7d5f263011ab98516916d358be4f36278c6d4cdacb8964300";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.20";
+};
+biblatex-vancouver = {
+  revision = 55339;
+  stripPrefix = 0;
+  sha512.run = "9d31315ce02bc47869a3e11644fe3160bb7b0178f87f71a9f3c06e54326c49bb1c37daee0c02f7185ef50513afe0aa4bbf8070b91db3181a2185a138daef48f8";
+  sha512.doc = "ac285c5568d8651e81680576950d593eb5247b636c1c27b0a2a4a6758bc151b51f6e2b4938bc9273cc748924cb9f6193f6b58b883692ce03fb272316b8ec7204";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "0.1";
+};
+biblatex2bibitem = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "ff86dc4068b0b3065e19af6447a71396337d9e7e5394777c1c385b714d01f2ce983c45923b460c60784024a8068ad68f05ee8dfd14039b65c2d9d9a61ef584a5";
+  sha512.doc = "21a53b0f4612fc18cb43f12cd6b1d1f72db896d0c55f73928fd11399598c04973595895d7cfafa546507e19cb25811118de9d07a8e9e1e242e22bb8d17e3486a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.2";
+};
+bibleref = {
+  revision = 55626;
+  stripPrefix = 0;
+  sha512.run = "261773de4bfeb039d4cb3f2dd88ca7c2ae229d2844ae0f5f454e06d888d9543fbe1439490895a49bbcbc79d8335151bba2a35bf36777113a965613efdcf9225e";
+  sha512.doc = "964f8547c073db2b174d9ddfd1f6d0ff06df5bc51b2050725da20687f84ca835f58ee238f3f1a9d6d4ebc1858217ed0d8b2950964cdd638012d91e94bf92aa19";
+  sha512.source = "09329d9142cfeb1f70778f46d0396aaf20c7ab2a215d76120ba11147368236ab98a24ebe386f68aaf253991af4c95a320339e5d07e956132d9d3d08ede63bb79";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.25";
+};
+bibleref-french = {
+  revision = 53138;
+  stripPrefix = 0;
+  sha512.run = "f768d01206a35a6ca18ba777fb159294f566be365845bc82d344e9eaa3dd7cd0c1763564b7e17d4a1b851330405cfb3c383019b575276bd9b12d084c4845ed89";
+  sha512.doc = "e72ac2b74f01df60c998896b76013eec56a3d8cda8df2f26f92d05d342760204913d7d70a6c8f63680f54bf3c84fb1c654c213ec2356dcf189bf9e134ce4de30";
+  sha512.source = "f70a734e6391ff8681a6e58c3161ed5bc894a9bff26a6b0cedd4d868acc0412fee0069ff937a247b129186c8d73b43305cb6747678aabfd0537c1238c9ee2305";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3.3";
+};
+bibleref-german = {
+  revision = 21923;
+  stripPrefix = 0;
+  sha512.run = "094177e505025eef5262b876fc49cfb09435b653c87fb1ee7453650e94f098bfbc7f5c78684849b3ce0cec2019d85a0413728397b5ffaf32bde542d8fa86222f";
+  sha512.doc = "c3c610fd8a80ca5a0b8de6ce4aac887a7d16f01e21d845fad595e1d5d6069d8e89459dfd187cc458d21bf2247f4f2c7fe72233a12c8e532b9466f2ceea283360";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+bibleref-lds = {
+  revision = 25526;
+  stripPrefix = 0;
+  sha512.run = "ba3c4e41b566d0a26bd9f0d11d8e776fe04a18aac451435ff0283ff273971138407753bd6806f34708c5a2f0c1b2581c71de46bbc2e0c8063c9838b3d946f2ca";
+  sha512.doc = "6fd81f90d0c94644231e911ab44827b77864842a3fa91127fb53114179488e5ffd66a404a1b5afee513e0cd3f4c83f38cae547e6dd6484403926c4c46b5cdec7";
+  sha512.source = "0494b05fd3881cc273e8232c398e80ddca4c1286b10aef5d341c6c3573ee40cd5ad1b7a2ae0aab9fd505f94a4bf98643453648b7cc52fda09f5e705a8b4da863";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+bibleref-mouth = {
+  revision = 25527;
+  stripPrefix = 0;
+  sha512.run = "5ae9356781549cb5ecbdfa33085ede0fdbcb7f131d55484153484c777f88e23cf965507afde803e7bc5b775aeb416b9ee767815b5dbec444a3d21be18c7445f4";
+  sha512.doc = "a904b4c9c0c8f3ff1feaaad8d1650b383ff0110bcf463f004938c51bce84ffc860082bf3e598922eedf0aeaa664ef0379ea3304f6dc5b681679d9545026c6bf4";
+  sha512.source = "5ad805eb19d6ce8fef804117b462eb1f1dff887c3b6326fd42eba88c7a218ada84992bc419d889f04363ae9b7073b13ebb5f7a002225191fc22c2a2cb5824514";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+bibleref-parse = {
+  revision = 22054;
+  stripPrefix = 0;
+  sha512.run = "3af7da247ff7f9708ef076a3fe110979e7ff07be0afb08597feeda9ae31e60a66eb2bbbb5da015e10566e83a116cc9f2efa56fe91a57717230fb35bd004c209d";
+  sha512.doc = "08393d76bca59dcbd715cc443ffbf7a1e15894ac6a2963d0ce770c96974c14d42283fd9237c215fe454ec4403a21387ba9dee52ea1bd93b83ab4a13fbc65157c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+bibletext = {
+  revision = 45196;
+  stripPrefix = 0;
+  sha512.run = "3c5170b747c6426099c021390f7ac226ebf9dbe42ff586c698b3489d47639fcd4198a4cf49261bba9335caebf8f39488d65fe851d60d9f3c2cc2127539ef080a";
+  sha512.doc = "ea38659b5b2bc252760937ecf21d4ac3e8986ac8be6afdc1f2205d84696b8da55e02037bcddb24de389d54a692240ae946ab3e41a0a7913015da4d7b5e12da7f";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1.2";
+};
+biblist = {
+  revision = 17116;
+  stripPrefix = 0;
+  sha512.run = "02f006139b475cb5d4ec2bf85ec098de78f5bed7242ec693317ad4e01acb62a8c5479f295a8a1409fccd41b327daa75a2639b67d9838777b8355e6bd40af478c";
+  sha512.doc = "b5bdd51d7acb738569671f13dbd25fc7b98a8e2e03e324e9501a20ac34cf1ae3578fcd622be73a80467e47a64a81f4d897c4e167b07a5ff5d06635b09dbec51d";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+bibtex = {
+  revision = 66186;
+  deps = [
+    "kpathsea"
+  ];
+  sha512.run = "568a72b269dbcb0d5c723e346e8118a0ed923273460d9518891616cbf7b174b17cd75acff02f092176d71b6020483de75df20994bfb66c2cd46432c33d5ade3d";
+  sha512.doc = "4f95c010ded89688791e1115ce4e167740b43e9e48d596b2621e6c18b4529479da9441351b463946e7efa1e428cba3d60112c5f7a5e008733a00fc64050723a9";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "knuth" ];
+  version = "0.99d";
+};
+bibtex.binfiles = [
+  "bibtex"
+];
+bibtex8 = {
+  revision = 66186;
+  sha512.run = "27008a8ccf05b7f48f7668ea171c9d53063fc26c09ac4507a3eaa86eb22b94cbd70ba6c2b7a8d439d7978a3860be37733dcbc17f7cef930d06dc5a45a89c95d5";
+  sha512.doc = "c305fe0afcaab072ee07542b8bae8475ce205744500f81c6de400b2bcd7ac05ff65a025301319f80a668ed35d653105c0ec0ab392c0c893f5d76802a1806bd04";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "3.72";
+};
+bibtex8.binfiles = [
+  "bibtex8"
+];
+bibtexperllibs = {
+  revision = 68910;
+  sha512.run = "54e8413435420357c6e4acb1ab28a6aa602f1a222ed4b3350aea498a3516f48cfec0d04e9951a3ea0117184855e32d891d2c04af98231763eb1c5f7bd1700aa5";
+  sha512.doc = "e2a1f67710cbb6b732f5dc9b39e4ced5150792c06d0455704375cfd6def134dfbe54a8d92dc1dd88896a6d5405e662dceb15f0282e9d82a9d2f857a91a8b4fe0";
+  hasManpages = true;
+  sha512.source = "92cd4a937f3783305396a5705bc7a0d80371a22405865be33e1ff1caef7ec0a479ad58d9d80d45218273dd21541eb3167ac0cffba8ac16ec5d46ada1ea4e6145";
+  hasRunfiles = true;
+  license = [ "gpl1Only" "artistic1-cl8" "publicDomain" ];
+  version = "1.9";
+};
+bibtexperllibs.binfiles = [
+  "ltx2unitxt"
+];
+bibtexu = {
+  revision = 66186;
+  sha512.run = "fce13fca4fd3d65b04a451365c5df50e4990bb62b0e8f878b712e9062f7d240a33ca6cfdbccd2ad2df0179be1cbaf2421ca32bdb745f3b9d9c67829d4c739916";
+  sha512.doc = "0f200681fd81074a5f23477ff99ac9e08e2d123056544edf7bc5b7b7645c22b74b66404028133037b5e47ffc4ff7c0059a1ed375ed0d3e4d211632c44f37072c";
+  hasManpages = true;
+  license = [ "gpl1Only" ];
+  version = "3.72";
+};
+bibtexu.binfiles = [
+  "bibtexu"
+];
+bibtools = {
+  revision = 67386;
+  stripPrefix = 0;
+  sha512.run = "72472e2c51a0b984feae71dd1bacd72880df1438406301219c80f1dc6a8702b0d7c1e2bfad7ffdbd025e58c14a069335d4f5d6f1fe981d5bca259a6eba94bd4b";
+  sha512.source = "3507bf7da29aad37a43cdd1ab2668908e227a2002438fb161c822fbac48be0e6b120070d6866fa553205ed404375d160e3a8b756c0681fb6a3e3b5600ac7a7b1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+bibtopic = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "34e2a644cc4472f415522e6e798bcb1e2d623afd4783b07f4904405c63296ec912fb6c1d03f80d51c37ab81944cddb5b4f3678a22a7151d89376ed9aa343e9d7";
+  sha512.doc = "5849fd57abb9bd847833993e660e342a537562bea9fba76376f3885d3bd09360c5783e4f04828137b43c076b635a2d566d908be48287c3fe6645c2abcba06652";
+  sha512.source = "2b6d11221e625b6d568874d12cbc7b45d074ebe2bb973d63fcbb9d85689a4c27824f3eec68fcaa46f0de707767baa516c3925ff0fc4d6a90518584847844ede9";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1a";
+};
+bibtopicprefix = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1df7d78498b6de233aea92cb1b18f73893b8cab723fb614a9fe895e5131639c1b4f4318cbe103ea4d9308e383627873576664f0af3ac6fd26aebd5b8b0036379";
+  sha512.doc = "473a7db7638f471fd87b1cb242a3a593e3ff0aa4586c1fbe906cf12f2dd866a27ab50176b01d3f4158cdf0fc263fa54ce16eb63c797392349fbc90a8422c3b2f";
+  sha512.source = "ebb06f55dd58c5948e5586ba29fe3aff33533eb3b044e07be71da0f20512af21d9808ae7d970f168189bc84ccb9bde6a19e935d7d6280e929d169250d3781a3e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+bibunits = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5658d508b876a88f3916a190a9090d66f2dbee98260af8d23c8358d0708f27fc80d4cf6c348b1f6e1ff196e7de6d5567e371ada640a9a602185611fb09e64ddd";
+  sha512.doc = "888e5a4c1863c15112ece5763b01525a1a74f97ae1270495a41d598e73c4583ce2b9e28030b3054dcfebd60b038fb2d32938d6be947477fca93014fac70676af";
+  sha512.source = "37cbb8ff6443757982a97bf6efa90881807712ebd7f0ce2975ef4960ef74e0541cea9fbffd64f765b6631378f3d21e2ac308ea1554709b6c2582b7cf7485398e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+bidi = {
+  revision = 67798;
+  stripPrefix = 0;
+  sha512.run = "e589f50dbd63df9d711540ad90b53384e52a5a0b353e2ba050657af3273f3dd7b65925101465d89831ea133504701c6d05d01ef959fcaa2570bb1188384c621d";
+  sha512.doc = "09ac7b97d9d1a93b80e8dac120cd6e70932ca9239dc94202449a476979caadd596677a210b27700e3638c3cf0bcecf98c4f903ea228f94545a2cf5cb206abcc8";
+  sha512.source = "1bdd170bb3065027106944aa23b99311482fd90a019a6bd1e87044f03a04f672e0b01a31d4d09e213db7b228718f7e9ad15d77acfcef7412af8ae180935fd77c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "39.8";
+};
+bidi-atbegshi = {
+  revision = 62009;
+  stripPrefix = 0;
+  sha512.run = "5b16cfee9c71927cff133db3b967dc835634553d0980f74164fe8996ef86c3529439e85e00678219879cab41bde2027f3258b2862906b58634713e4b7d16c515";
+  sha512.doc = "05b8118cbc59f06aeb87ab3b5b6a7f7a14dd23543c9d45621352ceec58998601a97af31bb6b0c999047efb362c24508f769be3c2e483c21a814b8ff35bd0bb96";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+bidicontour = {
+  revision = 34631;
+  stripPrefix = 0;
+  sha512.run = "10364edc592375f69912888945e6d555df30627498aaae409b727392c64cd4aac386433119578a7a01a48bd0cff84aae33079593219b282feb9d96a68bdde78f";
+  sha512.doc = "a1a3f9692ea2e462305f8c6db432586eb76d78cef5fa0e9057cbe5766ad99e25c560ad658569a92d1885e373fb6215fe2f9bcbc1c69b46c3088d36eb92e1aae9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+bidihl = {
+  revision = 37795;
+  stripPrefix = 0;
+  sha512.run = "fd82ad18b96cdd782fddab8739e09978d08fc37e8c65a177bde930671e102c9ffefe7465fc766860068188f6b9f8222119ac791f07223f79e9840f25659ea3ea";
+  sha512.doc = "c9d0503857f2cfa960e36872757afcab17b2631caa8a33112ff2361694939774052a5249db62d21831e19c17826f422853a78c5522094706bd4208d4c5223019";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1c";
+};
+bidipagegrid = {
+  revision = 34632;
+  stripPrefix = 0;
+  sha512.run = "b823a646d97c15ad9beb3aebeb7b2156aefc3ffd7bdec813e9cb2481e137cd661936c57bacc3b8c42509151205dbd4096329b5cbec25bd06698b698c59739551";
+  sha512.doc = "615d87ca4c29e0a30cf1eee08819b10419a2f399a88f2bfed5bfb6eaf7b1adc8b64a2ccac5da7bedab4e4b951e80488b97203b9960980ca5919f653cc4218996";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+bidipresentation = {
+  revision = 35267;
+  stripPrefix = 0;
+  sha512.run = "a41f98c3f009f7f8de8a41e386cc829c55650e603ccaa8e7e381fae45be2872e0b20e66b68e4d7ef8110abf7c9f6661865d49f7c0cf3ca4ae6f781c3ef5bc0ac";
+  sha512.doc = "56993d41b237d25e00536926b3b23f1b1a6940aabe4f636df73cabd5ec27252de9fb8ff17d872cec3cda7a0a3b8b13013ec77477dd89ebba83a8406da3ee144d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+bidishadowtext = {
+  revision = 34633;
+  stripPrefix = 0;
+  sha512.run = "bf9a75be6d1f37055c793a16b0a4d019579adcbe14a93b64cec5495e4d7c8bcd8b8c6d86906714f8aa47be5789209a1ce78d19e8023b44b9d52409b281797310";
+  sha512.doc = "ac2f47ed1a5535ff1f0030c38bc210b2e3905bd46ce7024d5237387faf87be6a408ea35648f83a2ad7697ec09a91a4cce1aebd32c3446756adf1955bfa97f7c3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+bigfoot = {
+  revision = 38248;
+  stripPrefix = 0;
+  sha512.run = "f56fb1545e0a044a143d1a257b9784b5f5dcc56d68bbeb52f909eb928e9d749729135f0c76b3af6dd0306add550b440d32aee21c33e70b9b48a5a82220623702";
+  sha512.doc = "f5935a5ede836798f3eab1ff61d528870a07be712047a64aa5af5576a1c6032e9d88fb5c42cf216e0f9812266f9a8562b5290301446c654dcb46146d7b60a16e";
+  sha512.source = "75316aff3c594fd904adec7cadd0b24aff9d527479d0c59f3fc654772e29cdb4cca938fe5fef6e14b9928fb25f37fdd3f7a894a81f95810813875c4fd419dff6";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "2.1";
+};
+bigintcalc = {
+  revision = 53172;
+  stripPrefix = 0;
+  sha512.run = "c801e5953008e8cd8521886496238f4f7a86a6c65a160255beb3fd6a41a48dd7bfa2da438f8e1ae4c79b51f769f0e07bcaa7c3c8aa6e1204ea656aca3d1f4620";
+  sha512.doc = "f5e7cc163157e429906489cb3cb94d8694c01be3c720e03b85bb24c7bd757391cf09e08f3d88df4ae7485978042e9d408fc5af0d93e016c82912479d40457079";
+  sha512.source = "e829ad1e3a118e8fd0ea0e632740ed49db65603d6fdcc7d40126a048db5cc0f73c9f4aa64d81902794ed308ca31a153044a56ef37ac179918b24be71ae168f64";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+bigints = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "23f9a529af214771f74c6921baf8582b6a3c5e170d0fa511c260f5dd3fb6cb6194ef4082ed299dc0a3ff8e413981a36b594b440e7bc5512c7d2732fed9eb7a8e";
+  sha512.doc = "46799d5c6758657eadca7fb30d214baf47c237b63655a71ad19e188fd54b664397babbbc5cf6d9897e81decd027dea1e0d1a6fea97384461ec8976fc19c7fd8d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+bilingualpages = {
+  revision = 59643;
+  stripPrefix = 0;
+  sha512.run = "e7d92cd1e11e1604f94b3a825953ed1f876a39dce3dd383e7ea1e4e166b9ffb21786911f4b408ab5d53e6f770225176251096ca9df0a187feb530a27ad167b5c";
+  sha512.doc = "bcbd9f48dad1b84c96fef7d6b5e0a343a261a20ff35434c5e01d4b200229764adff383f2a718c6cbd89e4b208e6de1c403fd7c614dc1c247bc5a344cd3f3d504";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+binarytree = {
+  revision = 41777;
+  stripPrefix = 0;
+  sha512.run = "b2204194393811994915604d428e0b537bf871681ea42a93d1e26a74d01cdee3ccd7817e7705cb6a3b9a1f2a97381e23226db9d671ddc36beb5c478271099cc0";
+  sha512.doc = "4ef9f7db1d9cf124112e3f3e5c6db7e0b53bd72a5d7674a9f0ac7c471b88ff72309705b8d3942277a93883ef821907f0119d4dd3f645c8caa098f363612df68a";
+  sha512.source = "ff1e8ce1d07c2011624086ae5810220af3e28f19eba4dff9e090e757787797afded50d937a7c1f503eb32bdc91cee2b0b1b42486381b725e57a127e5751ae5d7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+binomexp = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "61cd0072f766bc4abb1e3ed828d06c0e0ae6fb74902ad86e6c4ff3279ddd84386bbb0b1d669d9e71eef362c8d50577047e6076b174ca5b54da8680a43c5e1715";
+  sha512.doc = "9f8e24377ef858e0b3ecc94dc87eeeae08931084316034ea5e3de822ed8b6a65c4744b744a547aea19d3486bb6f2b04f46f1e7ec81cac2470d16b7134885d355";
+  sha512.source = "96ac7f02535a36555dc773b096324e821fa554423dc1d3fbb3436042a2ffa63e7d28b8d872b03b961143178aad40b6d14ef0be7378be99782e94f957889489d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+biochemistry-colors = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "ff6e61f48eaae649c5b14b60e85c46743dabc6fb841f3f2bdda0723a5a6cfb7a45e21e48574e4bc558ddd436474c356c5d2f767cee1299da3ff67db5c70c03d0";
+  sha512.doc = "0abc9a2d3318627f861be23bd175836efc6956147fbfc16f9ec84b4ff5f137f7910a12ec370c3baf3ad2dc08ca2ca197bd02e371ec258e9538eac4f11233f9d1";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "1.00";
+};
+biocon = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "54676e4acaee07609c379d387af4f06b45a4bc0051a3333c250555536114b3862da73d70305b1f62adf7afca2b4a2157cce8afd9e20f10e49b01d4c2ad351cdb";
+  sha512.doc = "c296c8402129338295a3043a66bab91a499b29703f7ecead0a045e0820ced683a4c25168ecdfc184c07282904afed3703b31f8ca707492a913de7c49a351c322";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+biolett-bst = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "35fa3e7a46706c715783b10997888a45cfe6f84b465562f894eb9914915e608f420b631e9d4e7fabe3d3d83424c089288c848ee34cae5cd08d1d778e4ad64155";
+  sha512.doc = "2a839dfad925ca94f26bada0d14fecdd7c096d3c99e903a57e4a1d093b2d1b9cf8770974aa1ac51baa9759c68e2a4fdd6efbc861c5bdebaea4cb523c00662487";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+bitelist = {
+  revision = 25779;
+  stripPrefix = 0;
+  sha512.run = "a2022ccc4f45f7a911eea4e99557764770b4e6f2ba0333e043fda2419e29d93bac40462fd36568354a415a9b27204a38620e6191fddcdb053f8956aac5747cbf";
+  sha512.doc = "5c3186464aaadbf269b26321ed9447e8a1633ca9b4a7b323da692277ab074f15b6c39df866eb41955dbd6ca8b0ff76a115786f3273fdb293bfb79893dfe0de99";
+  sha512.source = "0dfbf3dc2ad3b11ce91f1f5f6949f3d8559e0f90044abff431af556560382b5063a96e661c7e95667f3079a7386df85938e937743e2f185a13f4d8a2259fc4eb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+bithesis = {
+  revision = 68634;
+  stripPrefix = 0;
+  sha512.run = "617142849910c69e2986f1c685aa09f29375b83197dc6d964a887b50bc495f9501d578b6b7b3d2a6e78613a34b994a11f1160590e660a65e748c42504866ae1d";
+  sha512.doc = "6d5a915b04a096b1f5a9d9b9ed7bab9ae9e69886c3553778d5db07cbf8d2f0c183f2b86b1df0d2cb752368f192bf5e9252ad4c07071625659dca052c12ddcb25";
+  sha512.source = "8cef46e7e72dcc829ed8c9df27f6411b1b51a4fd3792a3d56479911ceb0e3197179a6e901beb49d4f91acdd5ac400881254c59a8162aaedded260b340cbb422f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.6.1";
+};
+bitpattern = {
+  revision = 39073;
+  stripPrefix = 0;
+  sha512.run = "34a0ade2d1110a15618b2ecc7f46a413519a0864a2e5cd1e25eacb9dd76cc66b35565b4b8c015780fa1d3dc88e2237ae7de33c77e29fd5428758a526959625af";
+  sha512.doc = "d1fd1b2b46d7846804c9163889bf3a96cda2e11e35de2328c9043f99ccd9d0778710219593565ec9231775e1404d713edd7998e3fa909ada7dee35333137b56f";
+  sha512.source = "8c5860792394f85ab87d2a3ab234496a1f550a24f98a5e2f8f4d815b24e4fd3e7d0a1ffefac3912536d22cd39fdbd91db013b1c8e05d4de92aca47db679fa7e3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+bitset = {
+  revision = 53837;
+  stripPrefix = 0;
+  deps = [
+    "bigintcalc"
+  ];
+  sha512.run = "b1c9121312404d3daf6907623972c35e0f36cfb4197e589bd937c145506cb5a2d9d8c1f665ae3b4d3ec093e55bb146c0b67cd0858425b704fe29989b9924ccb7";
+  sha512.doc = "a5a3ba9d27dc3d9658c1d261f798fdc5e6dc4cedd85287ef77d2a0341048d71f8575d4fbd711e499233e0991c51765953931d87d40dd22fa2a4e8ecb9f2a8dab";
+  sha512.source = "40580c17ac81137d533eb013ed14bc092281b354ce42883c0a3c33ee7843be7ebed0ce642746ba9e173bedf8ee6f6c243b65e692ef2a50654ada23e323166c89";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+bitter = {
+  revision = 67598;
+  stripPrefix = 0;
+  sha512.run = "217870554e509c3bbfb70d3da9e3ccc4fb1013db4508034ace728ff114e31eb9f56511b1e89c702d21cf1b522ae799601a0908ffe70a3856aee29c595a22483e";
+  sha512.doc = "2bff9fef75632fb43c59cba04ea531eba8420c3841a0343cbb1d56995a8c322beff036da61d494112e9c89f82d367ec3bcc9e39ecbe153c99dc012cbc8c15bea";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" ];
+};
+bizcard = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1575499c7118a96f3273c5b8d68e25a20410daeecbce48d1e6355039b97867b34a06c40785052d378dffbc80b862beafc06b9fedf62254d8b31445d8f95cdd29";
+  sha512.doc = "f529ec77b370def29ad77927170874dc02af37bfb9f57a4e1383b5adaa93f6e59aa33df06d40a80e2374db514f55e2f115e7c8f22e4c92cbd3cb621d8a735bdd";
+  sha512.source = "ea5567a5b3f2a8f70954ca9b5939cb4f9cda05dd128da4d6592dcab25babf284d5fdb2c6af7a31e181f871802ab267fe012d9da3df963be19d789c6984c88cd5";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+bjfuthesis = {
+  revision = 59809;
+  stripPrefix = 0;
+  sha512.run = "e017032edb4e87ae31318179de5da789cbe2164ea5679d69e928a138242adb1afa8dfb3f8b9b7796bc6d5bf21c143f51e931656439a451ddf868c77c7a7ac559";
+  sha512.doc = "657e45d4faf201c2d878c5323e3fd7a283bbe4bb4f868b1413e9b8eaa1db00d03771a4d4211e23549121c5dd480cfcfd8ee8e0edd7e56615a3c941c100465c44";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.2.1";
+};
+blacklettert1 = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "eb7d531fd91c6d46145c76a08678033e20097805b3a911fa85194217104e071c56d3842cee83c275a11cd4cdee162aee4630d86025cab76806f20e19c975076d";
+  sha512.doc = "a1f18f4adc7f26b9e71db6f171ddb4a8eb15912cf57445110a9da52eb4e0b017a0ace85ddc46ec2df36e73ee3d9bf8dee087fe4467f46bb2bd7f708108585412";
+  sha512.source = "0951e374a22fda09a3fe51e3a7743874c774a756560fb63a68aa199ad2cca674ee87d1dd30b98709b0e74e018e0eec878316ff303575eabb014158311f22a273";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+blindtext = {
+  revision = 25039;
+  stripPrefix = 0;
+  sha512.run = "3baf7b9db502824ebf1cf8892cafb189654ad0a91a8cfba399e103b417a91e4f137918b73201fb5988c8dcecabc557865e190cdf77af35e634d0519d52715795";
+  sha512.doc = "290a4c76fbeb8003c6972933baaa95e62b37310594e459e27083326977d370c1408de95eae44d05d848c61eb22b555792e5e38f4a0b70267d6a87c0314268501";
+  sha512.source = "2ca8cbd44a56c36ea66fbad415524697009af4c7e39164bb43d9c689743666c05aded6042393bba6d658a0be1df3ca5ac64a6e8da2e9c726fbcd1500239c4532";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+blkarray = {
+  revision = 36406;
+  stripPrefix = 0;
+  sha512.run = "5ed66db84619cd9130e68e05acf617ed0007db9ea35895e31ad96b543f7d6a01fddf00304f05b0fb71ec9484556326ebad1d895b81b821b9f19fe6ae9f3ee12e";
+  sha512.doc = "81f1d5b5609531deda3475eb906b841d33a6e01ee49c54102474d852856172954d943ee02648fd1ce74d5bf4030db8d36c7b6786c9fe3105f3be08fea36fe207";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.07";
+};
+blochsphere = {
+  revision = 38388;
+  stripPrefix = 0;
+  sha512.run = "cf7a7865e3e994f2b951a24018b1b1b71ce2b61542751f495dc14ebc4964a1f4a2833d95bde9b8920d4a4fd60ccc03760e66b8ab64f6b14ff77b9206c98e19a2";
+  sha512.doc = "3a9706ba73e8da7280495f9d32d32a38c9119bac9b8497e7e1bc69a704fde2552848d60ab0ec175544046fdc06b3e8887b4eaeb1c50a5796144cd56e4a44d9e3";
+  sha512.source = "d5c54403afb2cc4db7c5340fe6aaec54da4066f6e9898cbf1f1d2ee3d4ba9a001699e8e32cf38fd87b355c1adbbbcb649635f9abc07976c2139fa6e851a987ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+block = {
+  revision = 17209;
+  stripPrefix = 0;
+  sha512.run = "0dedf4b50238e3f12c3d17eca19e4640f2a36511fd65fe4d0baf4f221df279a5d9f28024cb0e20f528e32921e1d6b4c785071210e5ff6471c73e42e58faf89a5";
+  sha512.doc = "77b8c5b6949fb7eade5eee082be1c28433136b8374d45f255a80daa0c7a0340a3154a9f6f174fc52b25c252f1b5a2304b32e26c6d6a2f9af033569d7ba602952";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+blockdraw_mp = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "86bd39051095fde2a99b232b1139c4c196467d0e1825b3c1c73bd25551a55edb6417a0810b20c4ac3d53ff82519364f2ac72fde3845a750396a4f6a8966c73ef";
+  sha512.doc = "01fc4226a952c76b52726d1217649d9d98ec708163e4a9b997e36f505b385ed145182bca747a2b5334cfe8b4663d010a699664728c5be05cc4daba63ff1f3c00";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+blopentype = {
+  revision = 69080;
+  stripPrefix = 0;
+  deps = [
+    "gates"
+    "texapi"
+    "yax"
+  ];
+  sha512.run = "6cb45600033a679ed498e59c2045561683edb0193cc330e2650a83cdd37e18daca45db700f5767492800af78f365c6f1b03766d92ec759b3448287c7b378bd63";
+  sha512.doc = "1159bcbc24dd6a860909f0b16911b3a88e3deb2bcc0670b85d31ac82a34b5e991cf73f305c8517a8dee1088eddc3c4cb02d8c5778d897efea254a715e78de294";
+  hasRunfiles = true;
+  license = [ "lppl13c" "mit" ];
+  version = "0.0.4";
+};
+bloques = {
+  revision = 22490;
+  stripPrefix = 0;
+  sha512.run = "06b18467956f6782de7e0dad41f66a79e1c7dc5c3ff007a8970f24740dd5edfae0e375288c3510a8acfcdfda7b568f2316827cad1b6a006789afe8a31f829f4f";
+  sha512.doc = "fe37018f08820f21bf188301d0145e42b50563d8dbd8f9b232e6fa1b7eecda931e8a42d40f47ed7cbae24235833eebab874e30dd24d8393dc728d6fcb10057e1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+blowup = {
+  revision = 67640;
+  stripPrefix = 0;
+  sha512.run = "52cb1cbef8c97f265114decec953472b2a8804659d60ce3227aa5904827dacb1cd6156c189a6e75aacb2051d8237298690c6ce6816ce9425fc293c8e32962236";
+  sha512.doc = "c038502451d1952927f9b9e1648fed009452d00a5d9db06429f8968ec453cb7863444ee0e41073dce5c0c4990c2487ebd818ad51bf72d1e7a91257ab76684729";
+  sha512.source = "632342966fb59de8f7ccda1fc7062c691fa2829462c67d4edc7cbfbed3dafe4888979baa60a502793f0db88343c1b8bcbb5e8cf18727e854b4a8443ff06f564a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2.0";
+};
+blox = {
+  revision = 57949;
+  stripPrefix = 0;
+  sha512.run = "4f874416f3115f9abc5514d805952d576d3ee597475ad27523990820d485a3601e43e503a23d948a875db343ce4817eb7fedae6aef48a78a38a1656478190b74";
+  sha512.doc = "a9b8c964c8a43d9d6b0c4b5555c2c555246d04ad0c0b1209ddf953958f52af8e2ce3118f573d12c0bf727a2545a326bd284e61a27afd417cb672480e1025a5ac";
+  sha512.source = "7c8ab912484f90d5aa8f406e2d3c6176eb8908457cb184260c600fd72fb91c5ecd179ec4d80c55b6eddd7607c7fc36e3ec51af5fff31e9352b17360c470e8405";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.51";
+};
+bmstu = {
+  revision = 65897;
+  stripPrefix = 0;
+  sha512.run = "e8e2af194ab8dc10e88543cdd888438d6dabd37651fcb331df2a2372c863884ee3ff77344d14a79608ef6e87d3b82042497f26045db3007b4cfc85fa33831667";
+  sha512.doc = "da816655e19a91d152a088e92078a9ef2c35f4a7b379d63e353eebb7b4047d459b73e5f53537e9be5a80d56ebe80e1f20db1305fb21fff14fedd518a11c494db";
+  hasRunfiles = true;
+  license = [ "lppl13c" "free" ];
+  version = "2.0.0";
+};
+bmstu-iu8 = {
+  revision = 61937;
+  stripPrefix = 0;
+  sha512.run = "7d4d2f575bf4a3a14024b478610a1d3d1fb9a9609492890ce4edf9f3ed1e34abd99f519d3574c39347f35f8bd2bb1b19569ed6a3652443063942bb0900877ba6";
+  sha512.doc = "142cceab83b83c5a0eddde753f67b44cb2e881cd01a4de1059606e02cc241d6d55f271d525db523f82f6ecd68bf6bb09dffcb15adb1b4b080b5701e041ec6f2e";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.2";
+};
+bnumexpr = {
+  revision = 59244;
+  stripPrefix = 0;
+  sha512.run = "a868239dada7f16d52c5d16705ad796d6bc536b1943b5c0bb9538fc72242f3fdbe2cd579367e9230e20e2b3e53725ba8cf25d7d2aaca660a338d7863f4661d46";
+  sha512.doc = "a367968a29bfe0d1496a8d444d6809a1ddb6f91031f1aafed30fdd2cd8ba929972554b186dfc897b273cb347f569922b7d59d3c472b385bd2ac1fadfadaa122e";
+  sha512.source = "447c6dccda5a51d86be058cdbfbd7e38d46964754df21f155f8a41892dd0492efab2fb391b7144a0c5876cc5852176fa14310f78cf4fc8e4ffc9d28fe9f75e87";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+bodegraph = {
+  revision = 68785;
+  stripPrefix = 0;
+  sha512.run = "65c14de3d529c5f439ffe83dbeeb6551152bfebcaa4f6ca8f22bb29340f23cd2541fa7934a5c0163f6b9a604d76c7c2bda3ee6ac1ed3fca04367c08e5f580f39";
+  sha512.doc = "e9dc19657f581260a59f141747bee7b15d96352eb4b59a2decf116e1287a980b106bfff220642e4d1828d65201484e657d8f4513faf7998c0ce3938a98484ae1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+bodeplot = {
+  revision = 69397;
+  stripPrefix = 0;
+  sha512.run = "ce07cd6d21576123e5fcbefe15417f90a3c8bb65344a0700cb017bbcf76a27b2a3938e7d3f13e12a06398f6af739af69d4e09e614f1ca58850f2d74150bedb71";
+  sha512.doc = "478f633335f8fd55c712c37b11f54523c9d51a650d9025bd0f09b4ba77241710a6921fac8caac6ab0c4aeab252ba89886871c3887b327d1abc01771e6e9c5618";
+  sha512.source = "53c0f4825ad3323af7cb59ee07327d628a075e86dc880edffcac25dd0b3891d2f156085764cf0153c4b7bb9549f6e9253d090a4b08c0d12d195e872dbab02686";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.5";
+};
+bohr = {
+  revision = 62977;
+  stripPrefix = 0;
+  sha512.run = "257faafc089c9864a7878e9690a96ef8a5468fa4a310232609cb769c4bd80c15ee7923ad73feac782cda4690f699ab3734dbac05e39588a34fca576fe8dd042c";
+  sha512.doc = "0ffcb6071ad55d9e6a38c9cff810b625fcd6eb08e476e9ac7fb0bae73ca5373517de22a536c2348ac8646b62d70167521d70dd46327dadebfdb9e69facc0f27a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+boisik = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "48403f4b18cb23e7e16e3cbf19d066dc7e1576f4d9ae42b94a4a34508905f5e6e2f8f60f2de7881a29b8525c86a8120a76f1f66f8b9ea047da0a884637b1bb9e";
+  sha512.doc = "c68e8434fe456c5e58a6ebb9e744c81dfba5098c0fb12024de750f73022e300016a424bd1ad9cc85c3122c9a0c863737b2e27f2b151667955f92ebbdc060c6bd";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "0.5";
+};
+boites = {
+  revision = 32235;
+  stripPrefix = 0;
+  sha512.run = "894f6d2484e9b72a24816c34e1254ae8a6d011610770e40590fdc3ed22a24b6f655418694de256a6522e4024f4df033c017f294743113256583ffb8445a63bec";
+  sha512.doc = "22ef96e0f64b4d42b978abbba806f497fecf686d76b159bf3d06aedefe1097569053a11ced6c3ff2c7d05f975345957af0790f2035fa3af396b123da7d41cd7c";
+  sha512.source = "682b3e64f47f71849853bb8752e342ca74a8937e5f1f0f75ba3428ec3e32593339e5f0c90695aa112edd2f607dc4e1c80985558f354b6181f73e5da6cffee8ad";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+bold-extra = {
+  revision = 17076;
+  stripPrefix = 0;
+  sha512.run = "cc12de98493fc01b9a59993ad32e646102751c3023e64f66255a1b66505d3cc2f82d71ac53b4f6691e083bcce3037e521a35feb09cd5019d662a6ce56cc55032";
+  sha512.doc = "4bb27a63f711421437385c2a76f26d74cbfcf6ac5bd8811bf4ca5a0da354608dbc6ff295c3943edae1701fefece397ec356361176a9713f607c9677b8222b7af";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+boldtensors = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3c2d17f2bf8ff48638540ec5a3ea57bc835227291fdf6580747a87dafeed6afa4f49b91a67154da35dfac9a405aab2aaed5bbef1ac188291319a972b4e50ebeb";
+  sha512.doc = "657bdc4960e2d40621520240840ab4252e927baca704da0388e3124938c55de834e59cf8ff3d900aa294ac366ae7b1367909cbe885de08790d51380726960146";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+bondgraph = {
+  revision = 21670;
+  stripPrefix = 0;
+  sha512.run = "171233d7850335c1819bf1f74e0bcd1c221e5db73d092b0efea71ad35f71b16e4f240c3c791f9022a9e21ab7a2bb62f20ad06609051ecb54fd0640add0ef8381";
+  sha512.doc = "0697b880e1bcd51c3b5c2e035a15f852f943ffb86ea2952b460f01e42ced2e4fad8f8b15f32f58cc7771c28ca9bf66f2302914bf08d6696b6d952d347199134c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+bondgraphs = {
+  revision = 36605;
+  stripPrefix = 0;
+  sha512.run = "61ed449d8fcee24f383762eeac54949d709fe3fbcf06598acb8849613c68ce2f445dfb4cfc7871bb6c61bec65ed45e8888dadf036f299a4d5c0bad13db0e16ba";
+  sha512.doc = "223448f91f0cb9f7b032439aeddc85c132f39bf5ffacd058b76c85db825df15bb47bafe333a0ae8afb089864fe966973fbde6da0e02e1fa46b8077e3f84eb6f3";
+  sha512.source = "564af88ac0098d102bfc84932159dcb3df8e06ab30e849d7e039b13ae8855dc6093230e743bef13750a464eadfad54edea4f1a548c14e2df79e03b1f79754254";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+book-of-common-prayer = {
+  revision = 62240;
+  stripPrefix = 0;
+  sha512.run = "d8a2f2c007569e8a4da6150592fcc67a4e60083a2af93d15a8bcbd31b9b2d56c46d28b9f4c708714e894638b22fd9a4013175f45082c9982a05c8081855d7d9c";
+  sha512.doc = "98f7dc43da85180db2a3f00462b02b23977dfb46b7a9af0d4bb97a2bbc2babcb906a1762b94ac9196bc6ca5fe11bf0690e1e59d74ea1f97f16d9d747e94b5020";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+bookcover = {
+  revision = 65394;
+  stripPrefix = 0;
+  sha512.run = "83a7b06e32e082d810fac22a842f646b692e75a4e0ad67ba59a1d39d0f0931970b615708900b139c7e11f05bb012797d2664808929ca7ba8bcfc37ae75c878ac";
+  sha512.doc = "f58d3796696fd576fec15770cbe04d14e659a1d8e6570ae39c17760686b75cc941ccc2dcacb923fca4c2ffcf671a9ee1d63f348d8fe22058078eb22c5a1fdbf4";
+  sha512.source = "7e40a0b41b7f46570925c6fabedddeea2b52cdf8a4844db4c9df48f12029424c08d8777227ce119dc46bc27dbbefe43284d581bf5c7f2aeb2b6d24ba2c83e401";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "3.5";
+};
+bookdb = {
+  revision = 37536;
+  stripPrefix = 0;
+  sha512.run = "3e44184427ce346930b35fc2ea3b508d9f32c1e89cc01d66046e271d61e0bbfde54b5d18917b09acc159f1d657f9d32c29f3086b04e4f1dc6da0cd21a0df3da2";
+  sha512.doc = "2449b7d32558665b297e57eaff6529932289e957e0a77d8a8ff84e9614b53844a2684a7b23a62ce6684b6e813223c2c1293bf25e678a1271e3e3cc27383d12b4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+bookest = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e49d8f0959276202dea2079df1a509dd296858841f4fa2df235743033ba852b856e5f2a9a14176fd986ad1e431ebd3581469e7ea30093b5a01b7d23b791a028e";
+  sha512.doc = "ad51d3cfff90ce83c7f6479f9f0eb49a54613c585561def33529b301e00915d7a8f94fb62660b3bf5bd87104651e7333c3a9b620bbfc1ab7fa9fa510e16dc15b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+bookhands = {
+  revision = 46480;
+  stripPrefix = 0;
+  sha512.run = "8a341131397637618acdb9bedc835a4ea98f40d55a8a2b312ac820821b00a1f059f37cde2aeb3f5b715eff9928b579a531c4c12d3bdbb3a7629a50d363f1a4cb";
+  sha512.doc = "b5901beafa849a52afaaa7cf09ebab327640eb5ad1c627bea5f8dde2c98aaf176f23f0c9460e7fb2212ce9b4038800c3a3c572830d08d059a04d3574d1015a75";
+  sha512.source = "4df12247bff50722ae11636ecc0071e03d8d296ea958d2a1b84b5b2952f35d890be66af4b85dcf1fe2599e787e71c1b9e7f727a8be9b4ec79eb1bd6aec21925d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+booklet = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "be6bc46fa76c0a1ecbfe199b1a1a6f0cedf14a8d583e9ab8ffd75d4cf8ae22e404b289224ed8fa6cd9e143119760d50131e97228cfe75ea56d5ab2f540e8ea8b";
+  sha512.doc = "fb6d74ee03f303433e61fe1afe297cf5e343f95e3834fbdee483522a183d403fb6bac8bfd1d0ca687c448d522d370f5216caba2b52b066ac1657b8dc2fc3df1a";
+  sha512.source = "7b63195d047c6d05cec02af6d44c77e9fbc0a198717a5ed3383f6d662946cb8de9b7659916ab6d7951eeeedfe00abcd68eb006012de3e083d767acffdc0f3cbe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7b";
+};
+bookman = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "8bef9b6e467384a2b5adc6bd61ed2e410f026f6ee867a5a62239c55391ebd6eb5e521c82f9bd0e4de995591458ec32f98ce821493a85113beaeef6535b938ff4";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+bookmark = {
+  revision = 69084;
+  stripPrefix = 0;
+  sha512.run = "0a95a2839415393f430eac43a0cac3ac1c4397d68b037167d0e66595e82cda6ef11078bee63855ed1de66191f2f241418705ff819dbe02ac4e3c68ba88eec52d";
+  sha512.doc = "1c6a24efbee2e8734955b40b9908a8f5af95d6d4b8aa330c72ae7dde5c9fa374af6bbe7651f46c87bdc11f69a38b5d81d03152eb10d0eddc334b87276fddf252";
+  sha512.source = "d9087686dad4b3d68e8520888fd1787ab707c0bb196777144865e2a9419112a3e3cd25064ed4c0d0d5a31a195c84d4793d0063e17037c74ce3eff20e03def946";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.31";
+};
+bookshelf = {
+  revision = 55475;
+  stripPrefix = 0;
+  sha512.run = "e6ab2186784aa9905053d15311b18def1c669a86db4a98033761c2f41fae97199baec02c41c32cc6ef4ed9ddb6ff5413f69a7ad1c9cf5f0c4c91d45297eb1af5";
+  sha512.doc = "38e04eb978152cb97a15f1b6120ba9f062224ed4feada0347042b420d4baa9c66e453be8d4abf4095ba3403d11281153dc7e2494d34864a2ad2e1ac10a1b4b1c";
+  sha512.source = "53076f7ea7a15ade58fc6ff23643515631f46368d67f9b55d67212ceface35834f10724fc7fa8dfd75d7f852bef9a6570d3bc5600805c79f7e24006e663e1528";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+booktabs = {
+  revision = 53402;
+  stripPrefix = 0;
+  sha512.run = "8d7e46297d19f2e683f5c16a13577fc582cba391cdc8a15ad395a6b44072a5b50216ec9e9a8c727c1b2a36b9275ba9bed10baec3aba9d726505955af01d48c3e";
+  sha512.doc = "952ff0f30cf7679c09020cf2bca542e11e3a64c88956e87db6289acfb03879609f66c8beb019a6639716462aa088bdff7df3330d60a5d864f25de164affa4c51";
+  sha512.source = "cdca8f3e7f7dd99b87da76f60b1279de6efa8af666fc99e11749c21e59b77148a40aa197c0682ac1085a4d971a26b8cb59a9d2794fef81063006a220caf91ba4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.61803398";
+};
+booktabs-de = {
+  revision = 21907;
+  stripPrefix = 0;
+  sha512.run = "25a46153cea4a6e94c77cabf3afac74e642c7362f7c852725e8443de8ef8873c5a9d2dab3fc3b083dd7382e10d74e71b40b40b1143afce1646e853899c0ea2c6";
+  sha512.doc = "1016522eb74332542a9497f47fb0ea884c7d8b3d0a0630b8a6604bdc41ee08d29d963fcee0d643a8260d2e667c0b39edc74f4998ecbe66bc7a45ef23ac78371c";
+  license = [ "gpl1Only" ];
+  version = "1.61803";
+};
+booktabs-fr = {
+  revision = 21948;
+  stripPrefix = 0;
+  sha512.run = "62d4aefc19ff86a60b8fc68a5203bbc2dd2c86ef2f74d5dc0d2a664ff342c13077f5f71a4991704e1d9c69587e4ecde629e5432ade3695efbbc388714fa3c268";
+  sha512.doc = "eab2c83e6d81a601ec98ffe43ed4b5ec71e17c6ec42c26c519fdbbb3c3e82154b01bb569adca65dbf540ccbd7263cc20806dbe901ba44204b84d07d235b07bc7";
+  license = [ "lppl13c" ];
+  version = "1.00";
+};
+boolexpr = {
+  revision = 17830;
+  stripPrefix = 0;
+  sha512.run = "677a397363b80126e45609d125ec2cf22b3ef144216e19183bcd48c1f0ccd6e2e079fbb0a2e7ac03f094470c8c0bc64ae652863aed970ee9fc75a9a69b60c618";
+  sha512.doc = "6351bf2d3382c5a3b9a07a8458d7f158ee3bd0e72c96af5f2f985d28a40859f95ae7ae956e5dbaa1ed93b1331322ae1e8901ad3110f5e74024efd831e29b6b44";
+  sha512.source = "561daf8eb74f10987be27e884023ad443f24e8d48b573dbe8eab5e958c2ac9f2319b293874050c7d7f56ea3c22f31eaa57f3101c8878b466ad8938018427e765";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.14";
+};
+boondox = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "0e1cbb6ec227a2cd17852e71f16b4972de18a076fdd4c4416ffef1416f3332fd351036fead4d82a69b5aecdf392bc7e1af85ca5bb1e44c153d25cc86ccfc631c";
+  sha512.doc = "72e77b36b79bdad663db8c707daaca8d324fd3f50edc8cb7780a641f5d0217d3fe4c2b758c1775de0ce5fea3d44e9ea08e745df51485b4d1e3de11e2a98c74f0";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.02d";
+};
+bophook = {
+  revision = 17062;
+  stripPrefix = 0;
+  sha512.run = "8ce41fecd2befaf448ed238d8bf643362f5a945b7391d18b2698c006421b7b60ce4d886e09dc579eef12cfb459f49247f7f3afebdf8b590e9285c608d654ed60";
+  sha512.doc = "7d8ce0b7caffa4e16539154ade5a3df6d6b42b75bc521643473ff568ef5c65c3014fb22053b353a917d2c4782f378bc765475dca5d20b3dc06ff02c0dd2a63ec";
+  sha512.source = "ca7e5fc30d23c022e4fec8414c9ef11d2acd5707ad781428021f8a828c6c8b891674fc6eb372a0dc33944e2a54adb9b86645529ff28b4438c31d8477cb2b3a6d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+borceux = {
+  revision = 21047;
+  stripPrefix = 0;
+  sha512.run = "e4658e7a672caccd24832b31b0635dc61ae5ace5297569a84d9da981eb37f6b9b944bc33c1e964c09c7042e3e74f9b3067795fdad508e52e624f2bfaf439559e";
+  sha512.doc = "202e6b476c5c6f48ea2e6bdf2710d01afcdd9a02669d220bb11bab8fa920f41fddb8aa152a815045ce9d0c92b761f90ab34cd426ba62cf26282d71696f00f03f";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+bosisio = {
+  revision = 16989;
+  stripPrefix = 0;
+  sha512.run = "659cd163c28a52fc12651b35b8018d0df7e4fb706739b090167689a7199a8f9ca3bc3376ed3a5b6c076e9242f4f8132dbec6cbeead499453fa5c9cbd2aecce38";
+  sha512.doc = "7fc9a651f6845643fecbb9f0fff150fec2a22273accc420451c2c5dbeab6e40cbeb9b51a32589787c005fe479f626111214bebadb217a238baab07fa18d8c92b";
+  sha512.source = "494ff83253abdc9f0d81b3ee36f1d860938b1eb8a7691ecda596d31126624f3272ba65685a9436a5817b93a786da97e6bc6702249630d71f697ef394f801584e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+boxedminipage = {
+  revision = 54827;
+  stripPrefix = 0;
+  sha512.run = "697cc00b10468f515b5ebae838d623eec58085269c98897a5c2c4ea932ec52ae819110612feb84b6951ff391bff9309655abf6a41e13da156e5ecc52c015431b";
+  sha512.doc = "54209e9e5fb8da8db65901c729b78aa3c9b536c3bca4d40437848287d8a07d955a84ea0f13d93e7e702c47c6bf8bece3b6d3f3026d5f78568205746c9009b968";
+  sha512.source = "718499cb248fb8a98a9650a78ae377f9aaed9318b91c4417c7690201504366e073e80615106156087686273f9f86adb58f854cc758c2329ad99103f788ba0164";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+boxhandler = {
+  revision = 28031;
+  stripPrefix = 0;
+  sha512.run = "8aa988155d5115e2fbfbee113013cbb4d32cebc670229104cf96c2920c81bb23245e2365cf31705b67cf72345387a275c83f170a777129ddafdf6cb7558bb077";
+  sha512.doc = "15b69a4d434be9561cbcf45a5c3c68ae9560fae35ed2256cfcb4c2bca8ac172a8bd0d6f7335644f586a9b3da65948b9372ae9f7ec9bf2c0d43b572cce5af20bc";
+  sha512.source = "20e1dd79907029b015d9c6d85c80fa907efc490a80db7f0e871b6b379c1370982fced3e3865a9fc0c7492a9d3631d163b98177dca99deff4a78d7f2ee354f2cd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.30";
+};
+bpchem = {
+  revision = 45120;
+  stripPrefix = 0;
+  sha512.run = "3359bc429ec00bdf3b26810e373fd9bba8f562d4782d16adf2706b59ec1cd153f0fd565c26319bac0cf5065b6a2ea99ad5cf6461fba62a7bae8355fad7d8279b";
+  sha512.doc = "c8edfa3e5fd901ef705b6b55dd2278eabd996e2b3aa76ec5da9c34c07db95909b67f31990684883edd256f7a5eb7c29450886472fafbd0ff91f8e81abc4dc93e";
+  sha512.source = "0f2629325312dc8e7d05d593bf97ddba9b18d0709d0c29fd5df2b7e5077a15624d98edbca24e20c039e7e72bfc21e676c7bfdb6d29f7c84efd4c40f41d3d930c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+bpolynomial = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "370b9ee803390f51da2cf7da4832ce9a51d923420908ffbf5dba21a2380e13cf345413eb81465e0acf86bc4011ec0bdf8cfcf5ac0cdf62cb3e88b2f2b6a6edb1";
+  sha512.doc = "2778eccb795d4543baa16966d55ab68a8c2c6f547d7a544aafec365036d9805a5cbfce97efbd25d0b39329814e95f6a2e18610f5e83a4d755a31dafbd651ce0b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+br-lex = {
+  revision = 44939;
+  stripPrefix = 0;
+  sha512.run = "e4eede34a086ab025a9918798feea2c6b8b19d86782a6d93745aa82d40258e1619433eb445d0b3c1335dcb195689bb76ac8142e6c65618cea6392e243dadd915";
+  sha512.doc = "3d277aeef55721a833cd613c98852c33f7ce22a8034e2fe62952409cffe1ea49ebe1f3b80f91018ea51fadef226939a14e103884dca19227193a32d1e3ba3110";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+bracketkey = {
+  revision = 17129;
+  stripPrefix = 0;
+  sha512.run = "ecdf6f5c6cfa46a3a0eedc9eeef5bbc59cc05a2a831249787ff70fda7d69466862c18dd7ed7a440b8b2bb93c6a08225c7a97bb2f5588d94548d9f6b626ec36aa";
+  sha512.doc = "db067a4ab9ac087f565d184c48a90800e68ddb25f5f78146ef1f65bcd3cfb1d0adea78483ca8e27fb9f82bbf26d23c5c16ce735aae194f4816ea73eb993ef099";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+braids = {
+  revision = 69398;
+  stripPrefix = 0;
+  sha512.run = "e92513b484cd34387542fd39684141d6bd24c99ac4e99791498e75e28c814b9647f9762a5803aa127e9c5423dfb93ac9126348d94668bd7e82c82b54af482f34";
+  sha512.doc = "b8a26f24d450b8176a2a6d094e3f0e66faade539266652319c354cc45a824358fbcde416582fa34917de422d0a86f782858247b7d457b50353ec4803b9024f91";
+  sha512.source = "c47edfa15e2d11bb06d984cce5735699f2fa2bcbe5ce09abf7f4220bcb904bbb5a541fd0ba9479d941b909ad9cf4df3374fffae8fe6a90fbbed9e80e26def3f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3";
+};
+braille = {
+  revision = 20655;
+  stripPrefix = 0;
+  sha512.run = "04893a3664b10fa1d5b912751e51b6d4a596821535da87aa1f2c2c5632e1fc60278435fe9deae4b0fba8296f2e46015b27b592721dde26dcc4acf7e3bd672a4c";
+  sha512.doc = "1cf6922ffa0785adb8e7e7fa5cfe134b206d70d012eb2ec1bd40bedb72ace43c8a17b3e94b16635473d425420f362c49f1b509796d43ca0d2aff0bd9be9f25cf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+braket = {
+  revision = 17127;
+  stripPrefix = 0;
+  sha512.run = "dc5f931ce9adbb3e8398cfab83402776d92018945172c7c17f04772f3253942c6ebecd5ca0f3d23f0befa87327dea4a3a9b90528bb7409963f04d9b856186562";
+  sha512.doc = "9bdd3cec0da91ffd13d556b9620e9c502a658374657e2821141191000a2321bf030edc9c32641b5ae6c52acfc7266c377a8f4dfe4891cb616f8d4f6a377d9ee0";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+brandeis-dissertation = {
+  revision = 67935;
+  stripPrefix = 0;
+  sha512.run = "96cabbbfd22e26d8aff3b9c54c5f9bdb9ada8a036af3761171c7ec1384d4429bd69c5004e16e87098e5c6355cd029e08371f41484742618f9090fa2c919bd638";
+  sha512.doc = "23c1a0d8fa47893017e657f60ef9a7ea54e6f587bf164872b4abfc51f04074ecd82d3494b1c78bec76e6e848bcce20c61af0ef7c2e9b24f91f657a678b03eeaf";
+  sha512.source = "b0d4a1712c784aa20e159c9c6827cb61b007826ef445981a196bb5e4c159199b76fb59dcc6ff03dc67b0328eabdaa821b5ed6ba0773c17ef7025b171bd6f746a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.14";
+};
+brandeis-problemset = {
+  revision = 50991;
+  stripPrefix = 0;
+  sha512.run = "fc5026cefa87e1ab248d9d26466a05e11b112c75bc3908c7e6f123a1436d5f813038176e97e1ed290cc99f93dfc8d024c88c1242b9bb41689bfa0a29153db9da";
+  sha512.doc = "0f6857c1ff226d797d6e0dc96bf040e2393564121b54d5d9b1e9e35acb01b7663441e0460cd117a0b015cb768bfdf3f40df142ae93d5a0d77f9a84f31c3e45b1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5.5";
+};
+brandeis-thesis = {
+  revision = 68092;
+  stripPrefix = 0;
+  sha512.run = "8d2c00167dc8c755d5d29f66c36d7d70d4fcb8fc1ca66e5c4008d702b38eee9c8bbb4bf9e7129a69649f57f31b25b532d44f3bb7628421aeff90e89afd9ba2e7";
+  sha512.doc = "61bf51cd01c13bf698b9466573af4f91357ec77a265db2166881c1f01112ce0a17d87b74f5470aff7da42bc39bb77fdac0cf20613e379bc168119ebdafb85d2d";
+  sha512.source = "0cb20a7d0b841a2d206ea4d8d9c0e7077d6b94c841d3bf8372899707e2b63c20d0cd6ea60b451abc6e1e64ec2c69771bd6fd30203e4b994d8b0e6779abaed515";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.3";
+};
+breakcites = {
+  revision = 21014;
+  stripPrefix = 0;
+  sha512.run = "13fdad42586a361b4e01999476f4d92ccc0fbcca4ee2663153b9eabbb08ad571dae6631306e9fc590d94f3f02af79519de30a78ed35f737004d86bd62b76786a";
+  sha512.doc = "2184e40db7f4a01113ba1040a62f8213f43bf34202a57a33abfc6291e84b01cf27298442f0f636289892d02764f1000ff3542f2ca6e490e0eaf6d5bab247b3f4";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+breakurl = {
+  revision = 29901;
+  stripPrefix = 0;
+  sha512.run = "fa1fa9e3ac50f305ae5b82eb63997d1674b3f640f36d502a1000b439dd52dcaf6b539d153a2c7022f3a00fc0042bcfe341e850ed6b01f7058b1f8f6fd92b4d9b";
+  sha512.doc = "38f7847274cbee0a6e7c536a982d0110670cf6af54bfa99718a862e1974fdd839f6ef6871cbe2c40bcd0b2a9036c806eb2b57c8adaee583ef316da367ed854f5";
+  sha512.source = "9ecbae9c483331d636a522f67e5da197e4f647daff0a0fe81f4542c7248934c662046c8e61bd10fadb44144918cd508f09c57880b9c1e0c6515cb2dfd35e52cc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.40";
+};
+bredzenie = {
+  revision = 44371;
+  stripPrefix = 0;
+  sha512.run = "1e5629a2e6e6099a319d8b8a1efec83262780c70a57c482f66a33a48722bcdb18fb891a96b6b6f29c54d71ce581dd1c82decdd22ad74d6ef61765fec3f8c3614";
+  sha512.doc = "29fba5bb48aeb2353616cfe9a8dd4fff90c164c10779b8115958733470fd47dc40a567212c62315110a5a7a51363c9f917c4984583d40177037d6b0803ce66fe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+breqn = {
+  revision = 60881;
+  stripPrefix = 0;
+  sha512.run = "c280871916bf0689794cba9640a7666a0f7b295635b85d99d08f04cc0c4cb7ac82552360b0c8b3d677b138779239c4ac4a2583db26fe194870c0c97a9a53395f";
+  sha512.doc = "70ab6500b714c0e91c597b43d934942c39c23cfc9993702b6eefa19b8c9027aa0e7eaa55cb48413e2cb42e468167492e7a401380c1cb4a711daae364ae01283b";
+  sha512.source = "aa4922ba1ebcbfe00716b02b567da4b17ab1b0d22cd5fe8332d147496f93dbe0a94e9e38964b13b6b4944ccfb2ce49bfb32ed5602ca1f147fc99163eaedadf46";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.98l";
+};
+bropd = {
+  revision = 35383;
+  stripPrefix = 0;
+  sha512.run = "d6bcf207cddeb6115cab45eab12d48326f067df2fec21386ca29282ccd484e572ee4b5420473079b033bf2b085e134fb42b76b3f18d5b56b47ad765c62b07023";
+  sha512.doc = "b9ed0de353b0b0e6d7c8e48f3a20c5ee88a0ee9fb1873ced88e89b9c4d73b20701add802442e69aecc419a2c6f433ca12ccea9130abcf895a5568f7b2d66d6a2";
+  sha512.source = "b33ad62f68eb425381db0c6724fbcea32b1e37f8dace6737af6e996b7103d19eadabf60873ff367feb9c3a69743d219ce41d5274b8c533d5b5323a971d01a06f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+brushscr = {
+  revision = 28363;
+  stripPrefix = 0;
+  sha512.run = "f8c7107b0e98cc6e402ec8ee6f5e6f9a1b8e0d046dddae9486e4ca68327f370a75a0f90000939828605334b3ad3c5caaf5e541c7933c5545fe3e531066fa650f";
+  sha512.doc = "41ad7b1afc7cb0f4bfdf0bcff4c1d85f3d9603c3d48ccb62f94a6fa2258cf3f60f03ee1b4b5756d85a77ba4ff9afddbccaba1c4bd5b69d85ce4fed206aa16b1c";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+bubblesort = {
+  revision = 56070;
+  stripPrefix = 0;
+  sha512.run = "8d089fe6eeb4ae2e8c77de1130b0d51bc50c4b89ff4d1d26065fa93d740de16644856db55c38efa9e199c2ccdfd6906ccdccdb9676f2313f92911c5d6e06246a";
+  sha512.doc = "a9cf0d74f8a713d381d1a06f0a9f658c9074a4aa9027113e47f29ba926f835878e2aa7eed9dedd948e9c5f3b50345f82ef9b4f35ac7fdd08ba041e3a00ac20b2";
+  sha512.source = "9cbc0f682dcc18881f4aceca601a2dcf4996e597f4341d3459af336bdae72938b9aa4402fd88f2f7a4de960909bd25bdfa3a01296a8b2e3283809fd63a47eab7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+buctthesis = {
+  revision = 67818;
+  stripPrefix = 0;
+  sha512.run = "7c27a0f982a2727c8ad7dc98052f48ddb73d37ff27b89eb53f8e33338f67fdb99dba2cdbc843cb628ea725fb7ca7d0188ec5f53c6b863c4707e8b174c8b788c2";
+  sha512.doc = "edcf0ac0b5e9ea86df731fee1d2388960b997b7278fac5b88dde6e3820ed3ff488c6ab156dfbca169fb9dd11cf49c5ba5c17516ac2f874bfb3d825426f0fa5ad";
+  sha512.source = "bbb105930a740ffecc9c2f4ebf3a3a206c49c3128b44bc9d96c97ec0715da1fe152bab9ffdbb3a3d8fd3689702bb7091056dcccb4b428d54ad0853f9ede97ada";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+bullcntr = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "886109fdce6a936d22b829ff769b130a445876073c73b2bc1767610302ba8a40112938311a138e1c93a0495a6e7d5cafa8d3606ca3b2fe48af442e023195ab93";
+  sha512.doc = "ab01cfba0570bc565d8b40945aec5d87739a0826d5c323c5ee960c0d3c7c3135ef2c8b7878268b415ffae3beb06fbc6af48656e7c4a6a45ee423254ce23cad1e";
+  sha512.source = "cd05d28c2e5c759863403e3ea9e8700002a4ef4f9021decec9a681b92d944ecc4c6765bae332f8645d06d12ab6adc096f4a560a195c981d5e6cbc72acb56e812";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.04";
+};
+bundledoc = {
+  revision = 64620;
+  sha512.run = "8f1e4428993dda804a2bd6b11504996e6cbef869b98a64d576f0edd97a47b1f2301b34ed234ecf1cc902c74dcb31064a96cb69018ac514fd91eb3e5c1b6df5ad";
+  sha512.doc = "d74b1ec9473c4616642911fb918553350c5c65ae2cd5171d3513d6fdd5b5b774a516c54a5ce09a8fb966a9de6c5e372b773f7e8ade9f14fa2b1a646112638679";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.4";
+};
+bundledoc.binfiles = [
+  "arlatex"
+  "bundledoc"
+];
+burmese = {
+  revision = 25185;
+  stripPrefix = 0;
+  sha512.run = "7bce3a31febfc6a959ba4779d975cf93276a0bd1115e06a50a3c8d705e49e8d6747ecebc7eac2147f021a538dda1bb241d8f320ef1486229c930141e06d6ae26";
+  sha512.doc = "4a7f3628efd913a362786564dd260dc1a63e51a397af3d92222db6f758b7a7792b13e58422d2604ae98f615fb5fc42e77f265e505236db9bc981d7951e0ee1ed";
+  sha512.source = "066d164d97f4fa9e1050d75c3c20997be859718a2be37c465010040f969b2d3aa17edc3c241f5aca45d91dd12517d72a731d02954088ee83ff5aeec3be0b0fcd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+businesscard-qrcode = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "d991a7dfb9be936018a1946d2d3fbe24b775d99bce08da27e7451b54c679bf6565b207a7645ee4def2464ce08187b6ff25614dff9ec6925bce66fb6f48809412";
+  sha512.doc = "6ff58a45f67ae55d82721f125bf3e9c8a5cbd049515b840eb4bdc79eea63bd82bccec41f53b05cab9e6720f3719cc58e882998249a738eaa9f033f14569b9f88";
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+  version = "1.2";
+};
+bussproofs = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "042e01990554b7ffcbd70c9a281d87ee98d9b25d7071f24d114e097e536ae1d7fb565854399eeee547ad2cf97bdd6d4fd0755169ba7548f01ed0d736e031a383";
+  sha512.doc = "b3fec7f142210ee5051b3b3a45ef26724d95c538978c4904c9723113adcd2164e6385a9949473a8b9d29109b016c24f25a4088fe3728d675fd0023a043ca6262";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+bussproofs-extra = {
+  revision = 51299;
+  stripPrefix = 0;
+  sha512.run = "8410e4a795b79e7ea06bfd72c713f39950da8d1c418002bc497eb802ae71dce5d5372f7692267ca62891cbb2a58719b76c2bce3f10ec11cff63c40bae9122a2e";
+  sha512.doc = "87ed5af043bcb4d41f301d4b09dae511fa509fc9c50ac70cef29d0df4bc023f97856504c0650b6139ff8bcd9c25a046411b58f72db016d7429788db757a4e87a";
+  sha512.source = "de1b272c20c7aa3d1c6f06fef7226083890a8b43ac3ad9ec54d6ff0649ee268b9c9acdf5d3e335f1fbf7f2b9aec3ff91517f126fe8d354e32662e3d6938b197e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+bxbase = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "7d1b15d92136126999f976127b43a125a9bd5aacaca5a76aecee94d4f6a6ce6538c449fc82d95a55984b9de802e1e66903078e5d2344db532b9b2e2e94ffdf24";
+  sha512.doc = "162a33a07b6149997b9cf0ed5b1baf55f80f2142c106e07188b27c02f4fad891d95d6366581d958bb730106f5d3777e59a1ba55176a7e7594cdadc77e85d7365";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.2a";
+};
+bxcalc = {
+  revision = 56431;
+  stripPrefix = 0;
+  sha512.run = "580fba2af6adcaf2b2f137cd34455b3dc896f2e26aabc2352fb23c12fe1a134340c2505d38dae51e79c72408fb4023213971ddc0ad322f16bafa29a9bc1dc4bc";
+  sha512.doc = "1e2e8eda856a15be3e9f3cdc441d3b1972b97125d0a370061f0919ed0c4aa267d5fbacddd453d9b99bf5b759b801c71c3e988f9666540d960d9a27e7c54ea904";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+bxcjkjatype = {
+  revision = 67705;
+  stripPrefix = 0;
+  sha512.run = "72d3a88c117ea971faf8bc836bfe32ddc52e96c1fe1546ceeb8a9b298b7a28fdfc8aa4b0f43bdb3fd27126383b289ad293b2ca6c4ad95873948be0651de4ea18";
+  sha512.doc = "8118935396e03cf72b0efe04d6e436c6d7b3aad3dd1518561ec36d1fcf35a4e29dcdf86dfe554d06f4814694e7528f238b73c0145dce6ebdd5cc9b587db3f86f";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.5";
+};
+bxdpx-beamer = {
+  revision = 41813;
+  stripPrefix = 0;
+  sha512.run = "48009e69d2bb6c316c5d33dcc9d17fcf9f762b68688130ee8407648039b7c3effbbdeaf991bda7842738da59213cc855b50f48cf179ec77e0682729d6e5d3709";
+  sha512.doc = "2692918a0fb1ac7bccc6e905350c6cd716b72b33d8f00bad73ed0146238965d0c1a1d9de07c22fbef1ba7211a919c1152342a9f4bb48185099aa470f76374bc8";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.3";
+};
+bxdvidriver = {
+  revision = 43219;
+  stripPrefix = 0;
+  sha512.run = "dc37ee5237e6eb02fca173b8b0501795604930b56c3e9101c6b653ad6df12cb5ae82ad81e66aac5c1ce4ff0aa8d7f05658f4b41057ede286715c25d290682182";
+  sha512.doc = "83e18920fb6f2f54f54c401fe83ff131dcbe64ca712ded59f0690d90f1d8b2623ec135692a3fa437b77fe82336553a529d36b5bdcec96a96cd57523f11cc0e0b";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.2a";
+};
+bxeepic = {
+  revision = 30559;
+  stripPrefix = 0;
+  sha512.run = "a0436e9dc7dffa9c7a7b2a41662a41db934aa4242c953f480400b7a2c8a71bb526ebe8eefa46b02db03364efdf14fd88c1dcd267ebd59f594d72540ddd3048c2";
+  sha512.doc = "25789b297ba2fcfb81e74637cb2270d41eff858e747b841cfbf5d29791fe6697d3a9cfd4abbbbc4ed0a5c5b274f8b5a7cdeaccc995f6ae623d2a6e2d831b7e55";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.2";
+};
+bxenclose = {
+  revision = 40213;
+  stripPrefix = 0;
+  sha512.run = "f3d0f39e9c21f3bff75d118bb1a9408e7fb2c84beb9301873cd37a678de4b7680d1e8f13693839ce32e1e816e756d8f0af14cc620952afc8fb02885debf478a8";
+  sha512.doc = "ea7e0f17ee70d3d4798e85e3788af1110fb2adb436106ad08f601655453af2c5d192d5e3854fee1b29f6ac21f2f6b02e239ff4ec6ae9181818b23bdbac45583e";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.2";
+};
+bxghost = {
+  revision = 66147;
+  stripPrefix = 0;
+  sha512.run = "8b5345c2e48c16f296e3533977b2d9a031274764f3580887d2142a12f34e93d4d31bda0a5997823a7bf52891c8707d897afdc365a001348d2ab12d8f947acd0d";
+  sha512.doc = "999e7623526c6ef51b8c6da383e79d9f889d1e45efb52eb127463b94e7790edb124c2ddece303c932134df4daf4189db082c3492fe04e6a829e1dd6d943edc02";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.5.1";
+};
+bxjaholiday = {
+  revision = 60636;
+  stripPrefix = 0;
+  sha512.run = "4f5dc4081f989b73e5334d62af403922e2918424cff24480644f1e9016e3e20fb044cb22da91a035b198aa92edd0a51e985fe791a4c99ffbde2d339ca46a3918";
+  sha512.doc = "6d3ccd7c279e9dd8063296d843dbb6b42af90359b16f421eaddc7b2ddf23e2dc6077d4748abbef3c67c9672536d58a20746848237525a4cf8ec87ed19117a618";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1.1";
+};
+bxjalipsum = {
+  revision = 67620;
+  stripPrefix = 0;
+  sha512.run = "a3c635eff092be08bb99f882a18fd477aba3b9b25666defa4cf872806dce666ab8b931cc5b85ee217dfbfd453a066461ba169f830236ad55f75a28a81a157e0b";
+  sha512.doc = "b7f020236e7cf429bb367ab412a6b58746302d2ea0c6d50c3b9af20a86e535196bf3e628c962c98ff0dd3d194d702c7a20cca55b815b88727bf8bcf0a5eb278b";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0a";
+};
+bxjaprnind = {
+  revision = 59641;
+  stripPrefix = 0;
+  sha512.run = "90d69860d7017c414cae328806e4d6e9a788dfe46f7a6a5792a0e8df563471b5d60aa6b7d2ea45caea3caf954a809f64549f24105d9856d6b89f96d366a02fcf";
+  sha512.doc = "40c81a58de05b25b5ec537ee6ce8feaa9476ce64898e7ebc67ff1d5497e53eab341734438160e578487753ec9bb747d8c69cbd4365895326b081588b92f6677e";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.4a";
+};
+bxjatoucs = {
+  revision = 52509;
+  stripPrefix = 0;
+  sha512.run = "ffe18ddb89393c61df4371d6fe1154759992e544af64cdfcc007122ed212e87d16194d906d4c9f797671860a96c4dcde12682ecf98adb3c7b8b4c6ae0b432b81";
+  sha512.doc = "9c281fdda182269c7a048e1ef422f0c403ecef7d8fd8dc462ebe39b861fba013ede2ef351baa5ad4537b2e1495f1f0572c7edc6fa6407031ff19053bd6dfdc02";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.2";
+};
+bxjscls = {
+  revision = 67657;
+  stripPrefix = 0;
+  sha512.run = "83829f4785fbe8e283adc7c463bade1828f5bb3b401e0e3e632ca418754e76b8ab68f275e408cc779ee8644f4f90885257ac989e66982efe6b66d77ae2587d6e";
+  sha512.doc = "c5923edd13dee12f95611103de2926c03edad8cbe85259ac345d33ab164012e9cb4011381fd58a49f8a76ec1eb11653b6dc589b3c8a4dff2299b7140547e14f6";
+  sha512.source = "b111a7f4054086062db2f5686552b8b763f7617d5828a74b57462836c09284c7fae6666d2af2d4892b8a7fe2db9198f93ecefa38e1a152cea31c52ad35995583";
+  hasRunfiles = true;
+  license = [ "bsd2" ];
+  version = "2.9";
+};
+bxnewfont = {
+  revision = 44173;
+  stripPrefix = 0;
+  sha512.run = "83775ee72fceb4de0037327561ea2f1723db89dc23ccc42245390212ae1fb849c92c75b2e7b4b23440c62086116b8f0a14b12b27f97c9277c55a7454b231826f";
+  sha512.doc = "f09fde7abd39a4df52175eff90363a469270ab1385f3600e654535cc90d7b4b5ba704be734323dffca512f5942c45a9ffb5cd19a73026c224cee3be33eaa5b65";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.2b";
+};
+bxorigcapt = {
+  revision = 64072;
+  stripPrefix = 0;
+  sha512.run = "03c88a7e74c83e070d132fe55231fcf0caa51a8e87daa213533ec1db5246919b6de062e290da3e45b17f66ade1af54e38f39075284009c5bd126513e32c4f080";
+  sha512.doc = "0a3c6c360bd1672fb4f1aa33dccba06c7de77a65a6e0d128fc3e90f99aa9897fd6d3a1ee5c2ca719a42a891d67a575ab13a28b7e6c9f6f8966f98167ec54cfa2";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0";
+};
+bxpapersize = {
+  revision = 63174;
+  stripPrefix = 0;
+  sha512.run = "1a58a1a8281505922f5a6a2abc8695be6826f55dd1d37d8d42633665aaaae98544a0662cd4ba4c384757caa593eb000ff933bb7d7b215447fec6d6f5517993fd";
+  sha512.doc = "f6631a73d4d29616fd197f9c32b7b533f60e6b007a4849930c33afa4eb866798e1ab415f0842cee8142e7e7379507b2557b096df627dabb1d714ee305a8ba0a2";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.6";
+};
+bxpdfver = {
+  revision = 63185;
+  stripPrefix = 0;
+  sha512.run = "693b58af2200a99c98b1b4fe9d99fca00cd39f06877c4670e4b5e281f3c31221490f3f7106e42069c1d0f35e192fc3d8e1457572db84a8176fe5dab695a55c48";
+  sha512.doc = "94500d43e01e6e4fcde2a5de892ff0587a495672620540c37f08d815a4178f153c98dc1b8ee099f2e4e849842066a126d2906defb5b07bc5849ea7dc19f81555";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.6";
+};
+bxtexlogo = {
+  revision = 63231;
+  stripPrefix = 0;
+  sha512.run = "e0399d089bbbbac0e34a216b5164956dc9843e2d77b9cc1b395609963aba759e527dcd3fc112f4aa57b621e4419ee33d16e7bffb7f88123a0afb7c983c82636b";
+  sha512.doc = "ddc5da87331449bded7b5936bacac04872467cea5ceff8b1a0b2c5938119351e17f1622020e53a94d704be03a626b5110685e69cb393773595d5b9cf7326f184";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.6";
+};
+bxwareki = {
+  revision = 67594;
+  stripPrefix = 0;
+  sha512.run = "6a7b89540c662871ad9799b00a8e17d0cae301366ac6651d9a9e7ba995f6d2de6b2149f6eb5795af0d58c5de454aeb94d0ade0026520a4e54594f93fd4470b3d";
+  sha512.doc = "60c6416a036372f3fbe636dc46106114d2a43ba292f961fe299f765afd9e23c975a7f68f4c48a9c1ef9ea5b9b97224f1d0f1bd1585fb90b5f183a14528351539";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.7";
+};
+byo-twemojis = {
+  revision = 58917;
+  stripPrefix = 0;
+  sha512.run = "5d9330d36bef34d5deb7fae5413741de09050bc9a0fb3bef7874b0d44f397e900f626fa64b8903038d3131e5b9ae66f121a1dbaa6f25668f73bdf7d3aeed409d";
+  sha512.doc = "a0329476031945d9fb694522b3bb08cfded7ee117033f758ca7a9d1dc423d66f8ca749b295e1d420b737da886b57b1bf2dbbed20d3bacfbef94d57061a22f4bc";
+  sha512.source = "7971ba8678358883fba70f2394417f2cbaef639fa0a1fb13f1cef8d0cb182c91fc3097450bc29011c4b939afe6cb6ae5ce3c8c50f183fc92f10f3d0a46adc3ad";
+  hasRunfiles = true;
+  license = [ "cc-by-40" "lppl13c" ];
+  version = "1.0";
+};
+byrne = {
+  revision = 61943;
+  stripPrefix = 0;
+  sha512.run = "ef27aa477ed05bfbfbe3729fcfe119f9e7e3335b9669a34ae812b21084c2063b819e1201340f3db269f9f2234b5644054ab30fb3112b6bae142c7e5a0c6831ea";
+  sha512.doc = "d0c03c352aed98d7b1abff22d8613f34d206807fa8e0635b88b764f136bc851dd53f8757aff45f636e1c17c32ddbe481867a3e30218dc97ca07f25a147c1e435";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "0.2.2";
+};
+bytefield = {
+  revision = 68366;
+  stripPrefix = 0;
+  sha512.run = "394c796574674e877a6532900edbe3555b63aaaf62bf2c8bc8dac280c60064d77bda56991ae1c1a208fc8bde4c8e990cfbb05d21605fdd4f934aad0403775f31";
+  sha512.doc = "98e7e38ae0a9337fd9926af76e51b6381436d4e6cc9b05cd1beee2f8b01d460643265c09b53b1058e72cacda1ee60df6adfc210efaee67b2b0cb31e3d2624833";
+  sha512.source = "d878e6325e42c5a7e2695af6ca46d876c56eb4f0bbeb75e560ebac50bac30dcbf6df4b82a1379ff60e713e5f92840150c96fb1b637591863dd9ca1387e9a38ee";
+  hasRunfiles = true;
+  license = [ "lppl13a" ];
+  version = "2.8";
+};
+c-pascal = {
+  revision = 18337;
+  stripPrefix = 0;
+  sha512.run = "59aa375b3b953f2fab04547b3234b36fd08af39392cfdf05f6992a90ef3a52503b2e11296787763abb9ce6251f9cc2fd062d78133038ca4a92e1b06ae65118e9";
+  sha512.doc = "52252a2265d9bd48f09ddaf5f1517a6a74980897f0e8e0ad7ea71bafb194ca5bb98386af537ef2a4fb955e62ccba3d16cc1ebbae094502f16ae3bea0c5073c79";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.2";
+};
+c90 = {
+  revision = 60830;
+  stripPrefix = 0;
+  sha512.run = "2350e99bfd047ea514586894d20bd37dc778c74fd4c1848063ba7d53cb59ed5df36cd20fd51140ede8af7f32ed7efc44e1d4f3db4a0baaa7d1439941ed5297a9";
+  sha512.doc = "9561381312a2e3fcd6a03da1082e9bdb5a2c30e241078adbb70d06060a21674fc8a40c5cb81ce87d31ff99c168d73e9b4074cb3a6114439d5a441dd0054cc682";
+  sha512.source = "774c2aae917343ba9dd78785d2dc9123bf1dfd0920b638ee991a92a9a87199205fea04ea36304806c7213a2bb4ef06459f385558c9691a7dddff69cfe4d35fa0";
+  hasRunfiles = true;
+};
+cabin = {
+  revision = 68373;
+  stripPrefix = 0;
+  sha512.run = "8227929382396ece0ddac74095387ee0c96d2102fffe5121f89182836792933a6ad66ded538229c5bd12f65fe7518d00a333835c17537761f309db578e81bd3b";
+  sha512.doc = "95353266181cfda03973d68472ad564185abac4d828141e339183f69380f99151e0a3165f099235db54be8a3ee35ffe069512240633972f4b7dbf14ca1e06126";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+cachepic = {
+  revision = 26313;
+  sha512.run = "a0405befc4ed9217cedc4abc78c355b869bb803fa4be32245198ba4aa8151884ace023b3465db3b4757c923d0425fd1d186e25facd7c29d05d5072668a9f0e3d";
+  sha512.doc = "93108475f74b2356cea79a8403729df7c24e95871680b0b53f9316a7b158aa973ce108632a121198459352968bfdfd79f265d4aa301ecd00ce55cf56db5f976c";
+  hasRunfiles = true;
+  scriptExts = [
+    "tlu"
+  ];
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+cachepic.binfiles = [
+  "cachepic"
+];
+cahierprof = {
+  revision = 68148;
+  stripPrefix = 0;
+  sha512.run = "c152dcc24128f0f6e9424012660f2620e385f470d92dc9ed530eb530d11b1fc3aac6e9e3466fea3548d16ac812c89743865ada67a3bd820cd37601f754506939";
+  sha512.doc = "1e203d56ace798bff086a9a3eec3a3f110c5e2c4ec56be637ffc70edca4b28ea8e5bcd8804b087515431460b48ad4863d3c15a1496724e5ad814cac79dc5e7ca";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+caladea = {
+  revision = 64549;
+  stripPrefix = 0;
+  sha512.run = "d5dccec03c75e7ae315067527ae4d88515d6bbfb6d9b1336420ea78daaa7718497e8040f75a0a531c91c2b0eae728cfddc824e623bd5c73471192c809550dbf1";
+  sha512.doc = "e3f84460394d1a806a06836535c8f9110715608e2110743863e4c9d37abe696a3169e904a4ef507105d54790af4165d3a5a7559b28568b86b73761975b8c0b3e";
+  hasRunfiles = true;
+  license = [ "asl20" "lppl13c" ];
+};
+calcage = {
+  revision = 27725;
+  stripPrefix = 0;
+  sha512.run = "d3f6d46166f2b37e6ee8ff9185c6ddf5ed99ca2b32c7520966fa9a3db95d3a9517e39f5e8f928332a8dba490274c4fe48e62b6ce83ca10d0fbdb9a4218e0d92b";
+  sha512.doc = "4c3f1ed751005a5fc19e0ae40dfeb010ca211dbbdb7ac11c01525c7643f1e993346f1af21d411705ebcb119f8b1c20e4ad35384d2be9618fbe6db2de99e6eb45";
+  sha512.source = "aa49d205c8366ad92a46195c113e69fe123979560ae92a51589718136bc8df8b3b00e0aad4d6643ca36d217be02fa61529c4a1779d6826a52f80d29649fc50ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.90";
+};
+calcfrac = {
+  revision = 68684;
+  stripPrefix = 0;
+  sha512.run = "1545318973205544c136b6bc03ee6838f9496972e43cb4dbda404d2bc389ff41f873513ac0275769685f72c0222998386d2f9abfed686570d98fced592414443";
+  sha512.doc = "d9bc62d0d8f95ef3f34b801eaf612e5506c2c3ff855bac800a6bf3827fc3b1e572390691e04425992604e2d6404844db3fdaba566f98da46d67877a8d077fb10";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+calctab = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "20ccd46a047987004eef78f75b18f49b1e3001e240604e2657e23e30c4e6f286ba700cb828eeffbd608880ac4994d4a3cd2d67aa336957fecd1d3ea8a48058b1";
+  sha512.doc = "555a9d966fe556e8aa1dd39ec1ec327995f62fa447bfd2bbb8efe47ad667427eef249c749f9d2c0436c16e31e6fe7b0dced9b449da307411ac186d30c2407270";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6.1";
+};
+calculation = {
+  revision = 35973;
+  stripPrefix = 0;
+  sha512.run = "d60f9face95cdf6944363ce66b842b2a695b468e77193785564d1697244e193cc0dcf462e7a13c8a22eee173d5d4cd192ae59bbc68e086ac27c92d2dbaf6f156";
+  sha512.doc = "741f4600986798bb191352ef98ac1a398014f92956267c36ca1834d95996008204107dcd8575077d7eb2dc1ddc627f03ffdf071ce0d8b2646809063eba59625a";
+  sha512.source = "010291ac9b9d4529283ae9ed9054a2d797109a5eba2e999d26c4e847bba6c0bbb3a357a76526c77549636d2446d38fca2b6063ca238f5912c1aced9e2b63bb8a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+calculator = {
+  revision = 64424;
+  stripPrefix = 0;
+  sha512.run = "de62244340b27b1b62c7cfabc8da5acac3da0440f3190c392ae86f6160544d3b8e44dbcf5b5c95526b87cb7a0272c63fb19c06181c2b996e6de2affcddfa797e";
+  sha512.doc = "d699c74a2b5a7932f454f121582ab4f03482022aef0b145f21ce04bf500f01a6504a39989fe22170fedb27206274285abff54a1fe59e2804a91d05c923c88e86";
+  sha512.source = "819c7159200ceca98ab34302951af308233a12a18daebced97370eda15e41490c83b577c3f3a0bd375601f1ef4f380ef3f3cc3e4f6df84b4c3a0d9ab9fcc7a03";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+calligra = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9479d6b5ab33b12acae5cb3858c218dc4a1e1901c4006dca5160778798813d333b2e9e615eeb29e01007084d8479c58573f88ad5e282dfc06f3f5a9820df482c";
+  sha512.doc = "05e7b61864f483f0fc50d4680d80a395282a5c7f36b7ccaebb70e1c24cb5a101c4ee5accfec8d12c7fac0e7a32851dc15906267b93e6d75094b7ac646826dead";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+calligra-type1 = {
+  revision = 24302;
+  stripPrefix = 0;
+  sha512.run = "325764734735203d4e355d33b30a289d699fa10377212e39bf33d3195f2dfdebd4397785d69d6ca392e040cd2fd5bad20b0055b5f92620149fc96ed0d6d337a7";
+  sha512.doc = "c1acbd3ae35c423b9414b5e132e1a164d4b102ecf9d7305548bb5d203a8d3a25309e2aa5a5d09277d310b9446013ca2db65f9ce6d5783432ed325838bfc9a48f";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "001.000";
+};
+callouts = {
+  revision = 44899;
+  stripPrefix = 0;
+  sha512.run = "a440d3815f5c5a6d291ce4d7a20bc8483bebe190a0e6944de9f5be78a23eef119f41740ca0fbae4515b6ea7f2aefff90a62005883c44e8d70c6aec0a58c777ee";
+  sha512.doc = "0801298bd110f2e484b45c66626c790217666f3351aeeab87881d7f32ada1868222a21f2a7861afaacdea302ad269d2062aaf5fa9d13fdf8efb93efaeb499bb6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+calrsfs = {
+  revision = 17125;
+  stripPrefix = 0;
+  sha512.run = "34b5315e9e5e0ca532733f7b7ebe66e77d935fedf0e042aec63fb7cae257a423db5e93e288b9e1dacb26b0b75784eddffa8b565acfa537a7d970297f71e63a2e";
+  sha512.doc = "2378c004fe888bd2d60d0830ec98e805a2bdea3a5a6f4161dd3d4cb56c437dabdb579f3293845a10e316cd868725abd304ecb8eab55fb4c728ed5bc0d2073673";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+cals = {
+  revision = 43003;
+  stripPrefix = 0;
+  sha512.run = "75321e774560d7a205a7bf6b7d2d512c6aa9b5f38f6116813ff43ebd4d1fed23ebe26c235b278ee5723062e49630fc5f9480dccbe5bdfa44f5168f18657ddadc";
+  sha512.doc = "15accc06e3de07dc535078300efbffe305d8e26a3aa0e81304de37090500210932f08c24454d0bcb5d93ced903832891b6f987525eb64d04b1a7bfe577071153";
+  sha512.source = "59a99cfdb7923d0e9edfa656f53825194b3c1ad0cc554e28ce792783d3196b525a9e7dc0e5ef8dd824e4d35b39a71946c579978520c7fb87de24f1e8b91c1253";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4.2";
+};
+calxxxx-yyyy = {
+  revision = 69266;
+  stripPrefix = 0;
+  sha512.run = "329c4f91442d8115c997bbab09ae77e29bd2a8146d3109328ed9e08a2a4080895618b9a8467d4827c14ef65741b1380771409909f80d0b5fba6f527fbc900411";
+  sha512.doc = "8c3f1a6a168e5891a07d39c7f67270adc521c19cc4be6a302dc779b9bc5284bf4aa7d9b3caab22b5591c0483800ce62f0647bf9e14c83902777aad0070e4193c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "20.24a";
+};
+cancel = {
+  revision = 32508;
+  stripPrefix = 0;
+  sha512.run = "ac6e6b642dde29e32e45d7a0e967370c1f7a6ce604075cd43c57b1ee002e75adbe4fbc81de30e8d252cd58f2ac091503595a433c5de898deb3bfbdbb6f2d2e62";
+  sha512.doc = "5af252a521c1976166db248c4c19d4fcadd32ec9801e0cd42b73e0a3a0adc461b88d765b90dec1af859474fc64bc00cbc8be44450cb4da6b43944c8fc46ba670";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.2";
+};
+canoniclayout = {
+  revision = 64889;
+  stripPrefix = 0;
+  sha512.run = "850e180dad92a7082a314535fedf7e45e3bc3db48db0e7948287bf7782c2b1fd13924e666ca0edecc5fdd7b00fb55cfb0c5c17bd51019a21fd10c7116796b6d7";
+  sha512.doc = "5ee3ca34d87e3f9cc70b606ebc5a8f7918d86284837a3359ca8d4dde50ce36e43a651e3cb6327f66a91f23fd7d5edad4a037e99745de3e5f23005f59517fadc5";
+  sha512.source = "040ce827288d3498274c9df72b4b1a7ab50fd8a5e500cf66fe4ee0f4c211a356c63a9666a3c9003b7c3ee35ce1dcd1feb16828fe1f119a0684b24676121e911a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+cantarell = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "37fd0c1986f76d823be6feecdb76bdfdc8222872355d0cd66c340950ed0ad90e057acee0f90ad0e41fc77b61a682f8bd390d98c8ed559015f9a0a65014b11b2f";
+  sha512.doc = "17c118e49fb173158f7c5cfc31c1bee1063cd38bd1ba976e2629a648c795295e3796e845b735cab07de99296088d09ed9d87ed92c22af3e1dd1ec1a7a90a04d4";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "3.2";
+};
+capt-of = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "f3b1b81aa5a8c2ed9d5ab94e2e242442674af957d3f987b0db459ff8ca920abaab43d46db234b92ab588bb5f7d4c587eccf586a87fd492659f5b088760859c62";
+  sha512.doc = "a8fa6b2a0787a3e52f3a9a22482ba9f9217ae97b985b4975c690d240ae040f4f1e17c3ea7439d53337e5a0815a66754d0e6c528417c04d7c6684d28e869f71d0";
+  sha512.source = "87d4bb47226cef478ada2482605b925a3ebb3c1ee1fc624f39e724a857101b113856d99bf659ec5e01ce6773e0f695e424c41ba0640f23a76e9721d06a1d4f56";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+captcont = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b5002e8ea4fc8ca1840190e8a2d40540576dc5e17110da473a8981198e3f24c858644b181545be3bed6275cd0e0bb9848a6058adfc8dbef26956e0754c4e4699";
+  sha512.doc = "91bdb436163ff745f3aecc67eec747ef5a1853035d86258bbe23a080a92b3393f72b4029bad719765663c94e79217df4edf753be930a3e4b62f0b999c296ea86";
+  sha512.source = "9c9f8b2785ce2620db8e5c373cd2eee4d9aa3cd8eb47c648625ca7250e7ace861d9dbc31432a7dd7d0f6c7ccd48b43aba74df519d72e3fa1a3c9546de946e591";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+captdef = {
+  revision = 17353;
+  stripPrefix = 0;
+  sha512.run = "c24a7d66c1daa3a9c336a8555286876aea9e969a4107c42c258f0f4c9a88070316df70e0f2a860adb6335a33e49cdd7a9ba8391255f1e1fb283bd2f6a7e7b343";
+  sha512.doc = "c0a1a4584d0802eda39812d2c293fabed2487b0cedb57df622519d5857c2ef10e54e66032e9e9ee9ab81c757fb827eabf422b1bf2ab0ae6f7c22ab3aecb49a8f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+caption = {
+  revision = 68425;
+  stripPrefix = 0;
+  sha512.run = "21a36ab8ece42716032a15f3c105ba32c5697c4c88fc8b383c66bc6fe7ddd4969e12721e94d79df0817b02b43e498ba5211ef844e320bd91ccd9ae24e6f28fec";
+  sha512.doc = "3a13af008ba73516f8d4be8ccdeda4b18fda2bf9462fed32aca7917efca3e5185f77810900945ed518fef5d81e2629f89cacad5564462f40bc0defe79451a415";
+  sha512.source = "160a286e1145f2669dcd1abd651cf2fd725ceb95c87506d0844e95393be85624fe53b2f549b7006d8470449ee9305aeed2e81d1a7f2c69cd2f38a26aaf4fecb5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+carbohydrates = {
+  revision = 39000;
+  stripPrefix = 0;
+  sha512.run = "dfccca523ef4ea2c9bba9ebdbed7f6bbce1ab0739be02118231d1eb449bc826dd5e96406d5e009239a1bf25088e8df289e2e66423a536d76cf592af1a50f276a";
+  sha512.doc = "67de0675fbe00573058f428d34779b3423d1c9a7d47be5f8f1c3ba6b3cfb6783f5f1a945c1f201bb719bfe835ef035dfb56864a13ba0f12e0e83ef1ca0ce059d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+carlisle = {
+  revision = 59577;
+  stripPrefix = 0;
+  sha512.run = "345c61b7eb6637e73a66b5f9183ec39188d4e2ffdd418f12d8ae70394f447eaf8a5d8c62e1adfa515ab7879e1afac4163957ae0b6facafd9ae6ad6f300acbe03";
+  sha512.doc = "54c785d458a5a2848c2ae5c730215df4a66a7dc523605d3a9a8985cbd65677627a2a5f5800f055da65ecfaf096fda609f4a7f3a5ce22339f0ee6bec635250ec7";
+  sha512.source = "9acfe2c47c7a6a9ee358bc79482f2b21f6ab735fe25696e04a996cfad798a0461dcc0bccf6ee7fff9a6b9e22307f5312e26f9c4fba46a03f0289b8031a6bb97d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+carlito = {
+  revision = 64624;
+  stripPrefix = 0;
+  sha512.run = "7b958d163439d9f3e7d6f8cf998beb799013a051a1b79719930d0efbc13e167170e330908a947a9708f55897e6c0e56ea020fee5876b6f3bb9e76dcc5997a66a";
+  sha512.doc = "6718aed70469e95dc4d077552b453f81c9fbbcad6201194eb264bba6aa9c9f9b1b1b09d1ed987b963d6b09e13afe5dfda1436333f0c44ee3c368caa90d790613";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+};
+carolmin-ps = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "61ae809b5e4e7ff493de30ebb825870ab9caa8dc64d6d3c82d4654fece82dece4937c798e3c1e5086a84411edbcaf8c2ea777a9534865b38d4bc5457ae59aa25";
+  sha512.doc = "284d9f740d1e4b1a4c989b527bac80e54afa74013d1234bf9e1c2d42ac2ca4387c3b0d24004818e1fb92b001582114a4432480804c721cc7df0bd3b85835f111";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+cartonaugh = {
+  revision = 59938;
+  stripPrefix = 0;
+  sha512.run = "354baf8e8cffc0849494e4f79a64111bc0fd4a63e2454b4d4763bcf0c25511e4fe70caf048c628695a90c55c04fea0fcb026a57e72131e746f9d795fbf54fc82";
+  sha512.doc = "3811c97d39d7738ee26cc40f839eaf9f51d798d7f14a93c5906ea977a20ff864f84772adf3815216827894fec67f21c488797b4cf0b4db3c7ef6c551637d0493";
+  sha512.source = "9e417dd74451cf07d406f0c085231c175ba5bed083456a06cf9e0e3539ff32b2c6d596190ff7421b879572f0f568fd775c66e4eedeb776e69d6e5dff461dffdf";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-30" ];
+  version = "1.0";
+};
+cascade = {
+  revision = 65757;
+  stripPrefix = 0;
+  sha512.run = "7411f24d41aae23f52a2d611cc76ae4f4e6895c8cf0d038b7e4561f355d00c21a6164f0fcb866599b5637fd9cb5e4fb34e6507638a5fa7370ade5fc1df1ded15";
+  sha512.doc = "dd52dae9ec2eb88f9c8db29eb633e110132795e4c995cd6980bc68e009205bf76c5cf513a47df1391e300c886f3aed78f5ea6187dacadbeee44cd985efcd749c";
+  sha512.source = "42e021863fefc55b730c35bba7966f2858567efa2ff3b0222b4bd9f2e47bc3ce8d44d3f2f01405e76831c2af99feb96d30c2a5f1974a18c2a1e84326b72180c4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2a";
+};
+cascadia-code = {
+  revision = 68485;
+  stripPrefix = 0;
+  sha512.run = "3164663a54bc3ffe39aee9cbe9501a3d405fd8879059081ee2f0f66bb523686e25f3a7fdb69e61cb623a17ed21f21b0d6752f8c05b09590672d04315d5d6594a";
+  sha512.doc = "c84b14187b080c744a33319a4ef791be09b4517d8cd0e9ed2dbedfbb37a09785dd6244a4e4dd1cf67cc8f6ff608b6ba8d2299c7074921f6443d6208c702feac7";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.0.2";
+};
+cascadilla = {
+  revision = 25144;
+  stripPrefix = 0;
+  sha512.run = "df66bd91562f3678e2ef42f16a4a0c4af95209fb28b1176b5b63968632b3235391180b06431a42afdc73a9e4f97f47c8c954ed1ef2ccb746cdbf1d65058ad919";
+  sha512.doc = "2c15b786f550642c26cc8f5e0151dd5b31e964b46d59837b3f1ccbe118fba6ad8f06f86c6a5bdc6a791615929bf4c9b7c2287f930d1ca3c8bd6c2d0d7ddf64b2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8.2";
+};
+cases = {
+  revision = 54682;
+  stripPrefix = 0;
+  sha512.run = "281f9d13741f16fa07f93bbd2628f4da34db07d5005b6c1d7994ec7713aa100f152efd066bf712417bf6dc3fafb496d0a80f65cd2127c4640ab28cca6a4ee1d5";
+  sha512.doc = "89aa9005cbdecc26e0b2489b544cf3f504e952eddd9a28dedd2a2f555d3e0c5f8378ce1ef21dd78fbc5ebac616cdb7559f2147e143f3cef12286a3e33d9b5616";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "3.2";
+};
+casyl = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1536d4fe6c0cc647def47d3686ac73757da8b4ebbb99a5188e78944d59350c0da731f2e51a40c94a1e05b225a793f292766de4221792804887b4350631c8a24b";
+  sha512.doc = "74adbaee46656ad57512a11986f834239d60259eb45014e2c738f7f5b5bb47897185528c0feeb96c45ab7d6c04e679e1858417a93db791b72b5eea1cf828c0ce";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.0";
+};
+catchfile = {
+  revision = 53084;
+  stripPrefix = 0;
+  sha512.run = "6e01a91913a2a81224a533eb7f119283c267682efaa2a6cec11e9db7fc593b0d7a6830b83e482f22e96df208dba598b1c6596a78ae5d4cd17aa4c9a50eeaddea";
+  sha512.doc = "ad0d938e0bb4fe3d307dff1afc5ff93cd4b76948a88f88a65e3d036fe679cddc91c52e64febbf887c766d423fa5d94371869793c93138eeb919188b9b44234a7";
+  sha512.source = "e254709b62517cbb717c43e894c17a72277465504bcbfdcacb2bf7423173e0476cce8355acb9772ca74fb267abd43faf0470ebf92139dd7847c756244efbc3fb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8";
+};
+catchfilebetweentags = {
+  revision = 21476;
+  stripPrefix = 0;
+  sha512.run = "71656fb162aae4fccf15767911b8524c4f3a72f4c6fbeaea45a3dd9593489ec7644e7c10ab61a49cdd125ffe56e61331c30e35a10517720948d4f03b97b20056";
+  sha512.doc = "4071d6d6ada488b5bbbac0df3b7604939fafbebc17808430d8bd389b86a8aeca0df90da77fb00f8be14af9e9a79c45bf5a2dc0b9ea45af34f60cbce83810e1a5";
+  sha512.source = "0d0e6436d1e065fd518a743fd39062f1ef9a86f450130a2339ae59e5af0a9fd0ebeaf72a66301c8ad42c6e218a01bef48c977044cf284c98cbf25e6c8f1773b9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+catcodes = {
+  revision = 38859;
+  stripPrefix = 0;
+  sha512.run = "6eeba6d0c7435050e5ca07a6b0a24bca1714a9ba3d3a20168547502c2ec954b9d74918767c9728c1595355fdb84eb74ef258fee86cae1907fc5b186ccac0a939";
+  sha512.doc = "4dbf09f34abc39d9aa5003ce3defe4f5a04b0cade5d6a848bbde4ff3f35ff6bd511b8dd8dade14f92b1ba38bda2595da65da589b0236920c7aa340d245e0cb7c";
+  sha512.source = "157520a8e968f5236add71d55aab0ddec48eeac801349ae1900cf70bcaf1faa4cfe98632ac5fa41cabee6dfb6fa46655a609023329d161cad06ece33f10d03d7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "r0.2";
+};
+catechis = {
+  revision = 59998;
+  stripPrefix = 0;
+  sha512.run = "3994f92840c261d92ad8ebcf3205491146ab64cc65b7685557d2b84e3ef73058f3e968726b157d13e986a5ca40aeac2a9ffd48d019664ed2da4f01589ef4f0df";
+  sha512.doc = "8b44ed2ca1ed8abbd5acc75074a2e297cc72632cda43a7049009631a79e459052808e51b169bd0be7932245ea2539223587b38cdc6d06e67c16da457b7036560";
+  sha512.source = "43827e136677ad8523499d0b102a7ad4be3b95a9818a8720065d98beb07c5cf1a7f6b36c0985b7f4c6fef43fdb233a6980a5899697297cf3ad39e0da6db6c33a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.6";
+};
+catoptions = {
+  revision = 68982;
+  stripPrefix = 0;
+  sha512.run = "d58647cd52548a6ceb0f6a47ea20ba9348e1edd55f5514c5264857d99be1085824c4f75c2f7231ef41a1ff5fd0274fd5e3f5dd1b91241179d1bab417f2ef100f";
+  sha512.doc = "ef09ecf5c1bb066ae733dc1dc3aefc8f6c8521c8596ff8b45d42ce8315fe49773b6c7d41d632eb342ada05d16784faac3cdfce51af9cca4dab7c9157a7947867";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.7i";
+};
+causets = {
+  revision = 66359;
+  stripPrefix = 0;
+  sha512.run = "961f6affda4b94a2f67e1acfd62a12439faafc436c66320b04c3df11383016375f0bd284836a0618def46e624e7e7a5f46524bfb9c3113575c88d490d117a417";
+  sha512.doc = "241ce316af86e3f764929fa7c601a1533b86f85dacfbf2e81acb487b312c7df9c2a9ef1ddd047a977cc7eabaf4643caeca7f5c07979f9509867f3d522c507873";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+cbcoptic = {
+  revision = 16666;
+  stripPrefix = 0;
+  sha512.run = "7d48e324b5c5ff5b0755903973e0b439025e98277269f21cae33709a6c39eb6df7cd8f054b22fb8b1c072cabf9e92d0f1456cb41fbdd5a6e99bc0d63952e6c3c";
+  sha512.doc = "e7e33c5af518e7fc4f8fb15af79a9aefc1ab8cb4401d0eecbd6b418acfb01c2fa790d4d7f55206ec9d6d865aa177b2872f4d742bec2991e7118df4b834341af2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+cbfonts = {
+  revision = 54080;
+  stripPrefix = 0;
+  deps = [
+    "cbfonts-fd"
+  ];
+  sha512.run = "0e7cecfdfa102113f75f46f9c8bc76f578fca6c967128bb8b203af76cc64cbefd123ae87a8b04a9780f498517bd9f660d12e2dc586220f2c12cc8aa76f1aa40a";
+  sha512.doc = "a069b7ca1b46e5656a05a5e38a0f9ea5c3ab1e5301edc47d7fdd43817a8f5d641980c2e54b7731dcbcf16e12f0dff17df5a816d66f7bd2b613232788815bb8e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+cbfonts-fd = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "af6f11a601f2ea3fd38d639beb3f836becb71aca7d282f5d0c7e020e9f73269c560ae3ac08d93706731872bd1a271c75724e1049c2dbf65e9ac0ea8f6c9b4724";
+  sha512.doc = "8fb94b444966e6e3bd63b5b3ea62f661c038767222b08df2bd288965902cf152e1af4ad4b9d69859d11b1b558f4015b2f304afb0a43c356ff663498d830e1554";
+  sha512.source = "d21d517c40e8c5058c8e610ee0a8ebaf19d97a6b284b9d16ceafb87ec401b4110a483f6ed00ac626fc5ed2e1fd97f9cce99df5cc12e73ee7b92b04c84972f280";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+cc-pl = {
+  revision = 58602;
+  stripPrefix = 0;
+  sha512.run = "3d0bef5ca5c37f1cae98bd0555d714ed4408b6fde4ffcfa78cf2512114c9aa09b81b23bc6d76705f64dd08ea493add2027e7af997357ff5c4cc360deae11ba92";
+  sha512.doc = "f5503008430e969a604973e4481f8ab51269a2c3570f757787eb7a1a9d11b8508ec7ca1709a21b9e2299059a9c8ca20e5806093bd24166eb44e167c06e4fd0ee";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.02.3";
+};
+ccaption = {
+  revision = 23443;
+  stripPrefix = 0;
+  sha512.run = "f002efbd7af71c108e041daaa182a4432d1886a058cbfda2da7fcf6c0f75a217d04bbb8498deed29c7f03a8d22d4d2e24327e6a3b284d38c7b37200431f17918";
+  sha512.doc = "a3d2f92700e3421c37a666093944ae297ed39a35d99d6971978f5707619046603fad06b84aad55f41d3af08725535470ccec6d6bde3ab8f1ce4f0a53038e9ca8";
+  sha512.source = "83a8ab7b7b72c156ea07bf7d19c759d342187440574dc82dc0f5e683abe490c3b408d672464d142922229593a1f8363881a48475da0884920484c6057a40358a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2c";
+};
+ccfonts = {
+  revision = 61431;
+  stripPrefix = 0;
+  sha512.run = "fb111cd33ec70fa672e759c9fc2894f6b0338e40bef7d1b2fda2c37a437fb1a5ad87ec87169ec389d9eb21068c890c960a5cc24efd6e443b5995d5001f4f7115";
+  sha512.doc = "b0e9b5ce6010b03afc52b6f4f7a978e8d5a8f1a382750bdbde0b758209e7f8dc57f84d950163e64381c2d7a8366a50a34c02286cc2011b9cde3e0d40810e01a4";
+  sha512.source = "30a301941132ba7b85c59b7e806d2b28ff314bcaae30c228337344f09846cc1051a73df1e4a2b76e36d499095c5a21000f250ec13f967a6080280ea120dbecc7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ccicons = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "4e755538440c87c2bc1f8d57d41ce78ddaeae9a0e3c1c85aeed172c2a25e952963b26245cd1ddc3222285c883ed4574ac4228d17f1263db31cc330bdb1f345a4";
+  sha512.doc = "0e4216adcbe01d8feb95d31e2df143ad739f66c2239196f9f5c58638a87d320949256baee32703663d6116bd13b4af607dd38d16d4ccae218af55f5402308c03";
+  sha512.source = "af84fa01272028018fbcb4fa9e04971b9580b1e6fd63f0e07419a088005b75e852a122a5ee0416afb7391ff165ae39549f8931a157aae1ea272d97be05132e8d";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" ];
+  version = "1.6";
+};
+cclicenses = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "dca388e065610abad24a76f7dc600d9ae659973fbc47f4fc2157958aa2850d9c3bae7811418bf76effaf696386a62584c8a2ff158e98ec7a971bd1dc800424ea";
+  sha512.doc = "eb710fbac41527da39c26d5d27aaa84faf05e380356e9c3bc1a0c0fcb4d2dd5412f304d323ccf13084dfe8d31243698350fbdbefac07fff6cfabceed9f4d842c";
+  sha512.source = "d20b1cce1635b415d7368e49a9a32ee3a61efca8d0807b67c7e92ed59604fda1fd9b9d168ac23d54b90e396d971fd421463eb1ec77009d3e077e474166afed55";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ccool = {
+  revision = 60600;
+  stripPrefix = 0;
+  sha512.run = "2b125b2e1fa1bf91abd3968749d422873993a6d34df66bccd2fdf8b71338cd6039be8e584f801fa12cfc90a59e32b3ca0de53ba07bdaeeac745aa2a73d05467e";
+  sha512.doc = "05db77b09aba0d4ccb3712a5f5086c93de9ce70e067bab00030e96a23b058b76b69f54b379ac0ad8d03e68a3986687b1ce18a980d9ee5b7e4cb80dd2064294ef";
+  sha512.source = "dad84e19fabb04f783276ad11c389c9ab0425d81fd1e91eed87b6659247613bf759064e94de39904d13148393ec34ed0567e2d680c8b794113e844feb86d8932";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2";
+};
+cd = {
+  revision = 34452;
+  stripPrefix = 0;
+  sha512.run = "8b47a219e4d40364e1a4ed4d13245c0c9334508ffca0cff565a8d8856aef32184bdf0a19966027fc4e958a06b4f5a53bfb66188c6fd065a1b3b230cf1da2f484";
+  sha512.doc = "5ab78083715332130aacf3a97f6280f2533e7f9383c38ddf431d3486c6e88589cc69b7cd760088fbd2928c9b349ff583bc275ce8d80590234deeaf1e1a23b4ca";
+  sha512.source = "094b4b41d99fcc81c4c02ec7aeeaa999b3e5ec7dd4984976021a1d75c5bf9c5a3e3f13b0acb939c14f80ec05b3843fda7558aaf7c324315434b69954084c57ed";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.4";
+};
+cd-cover = {
+  revision = 17121;
+  stripPrefix = 0;
+  sha512.run = "345b001cd40137d9739a97c3c06549c3c7b761f56f61109dd4908c767151515081defd6c432232ec7a9fdeb8e85e95258ded345facdef0cf6bffa82bb5c39fbe";
+  sha512.doc = "f22c8eccbecb35d4c3c01788c0eb8ca793fbaf7b97e2bd54ec79e78ba10c13a4eef46c5eee70f1550cc7c378bb01926e8eecc6d41916df22a6e615aacd2b1e75";
+  sha512.source = "d8ecc73c18376678b2ee97b8bc81aebae7860e40451427e03f382aedbacdbc17a7761e8a78e275470c36927b3461c422bc62462163c6d92c509eb50cfa75598c";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+cdcmd = {
+  revision = 60742;
+  stripPrefix = 0;
+  sha512.run = "677fd271bd209933428d0b655529b7e6c4bfd6022c37c3ef5456e1ce6fe25c599a9883474c28dc9510e293a2ee5e87a49b797bb562b750e888c622bf6ac6d37f";
+  sha512.doc = "bf6d3bb4422dae82e06d440713518dafa98ab7ef7b527268050ebe51880f90e45b76281c1d693f1b40e85f07d7f6d395f51ce2c642094e326c3b1d08534fcba2";
+  sha512.source = "50a2f50cc7432505c608aac180f7631d831742c8047a8f3da25bbdf6e83efd9121fe3b5256a2b139b1c3a29da4b2003304148f5f48c745734b811c1d853016de";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+cdpbundl = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "ab13c84673df8a4da5b694256ab14f3c4fab34ff32e8d2faa8712da128baefcedc19c8bcccc77a585171d25e17369af274176971a33679e07d2bd138d4766603";
+  sha512.doc = "5ac8e2878434ca3b30ae20c6d1ca7c19b7ac12a38f9598d265ca6c7c214beccc144b75ff5962faf3b58b74b1ec91ab2c265d5429b98206db1fd1c558fa79385e";
+  sha512.source = "b958ade1a2a9f9b685c6d7821e1a97304f0c07b9405a95231a166fe5d8ccd8f89dbf168d38996e1e633629042827cb316b81754996d9b09f4d951573967dcea9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.36d";
+};
+cell = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "917431174b203fd839d3cf81ed965cc654d66597246ef7a4f9f3c3a945397b546eef1e7bfc4f9fb52889e149ee2fd195dd559c317472831e66e0fc3253a6c22b";
+  sha512.doc = "3cbf1ffa3902f49c155f2ee6b13e24b9abcbdf50da4668042dbc720ef20f483e230fd2ffdc8448007df7ced1ed34077811199cda4fbb35c104dce73084215bf4";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+cellprops = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "81b8f2983c9425d7b95d916fc5f1989dc266154d4cea7c48165265076f187c82d256fd98989b750cbe15db64f6fb4a935bc91ae67718b5541ed695ede861c231";
+  sha512.doc = "a88187cd20bd8ab41077d3221dd6f804c310a3f7e53e1e600872a4edc65dfbe1547ca8599c42a9a10d4d61ea89c0a8da2cf4d60680706605048fb728e7f93129";
+  sha512.source = "1cda598a44d2b5c8663927911a291d91dae59d5b0169d34f386910877916a7edd6018549ca36a5c317d33c93096ec77dbdab5528b4fc41864a140aa206112c75";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "2.0";
+};
+cellspace = {
+  revision = 61501;
+  stripPrefix = 0;
+  sha512.run = "75c32e958beab58086d8ba91da3bf1a4a4b9f3ec306dd5369798298c45cc67ee44c591e616062072ae399aa89c90edabe597665901ec60f46fb9fcd9d4c462d5";
+  sha512.doc = "3a6044a5b3e38ea425174481bf0f079943b53b9cc7d68668f5666c72c33cc5edfb82aac08bc3347225e4838dc32579ea611e8fcd2619468e080cc63c11a38da3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9.0";
+};
+celtic = {
+  revision = 39797;
+  stripPrefix = 0;
+  sha512.run = "df78495c7a42a60bf40be46bf14c30d97dcd7c7d1b283f487026f7c3b6a680c750d09527cdd578f69234500eca05764792ddc90ae4dc8005126510ae33fcab4a";
+  sha512.doc = "ed29c2882619bc7f076578c91cfb7e1e83af9e6960ee58af78486c1af6aeeb2b2b6eabdf916fa30ab865991c677955c0fd15a43f128aecb635ee30b3ba514bb3";
+  sha512.source = "d60ef14ae649288b8b9484844fc9fbf15ce564209c04249b47c3cb0beb96c209c0401cf3f9200ca3be27ba0417c60a2a7a9780341ea311e1bc836753a2df7882";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+censor = {
+  revision = 67293;
+  stripPrefix = 0;
+  sha512.run = "9f61a4830737a7ec59797489ce4fef44d5d270d1ef84b4971eda0d91bd9fb6aca0efae6a7a0d056919d090325592e459de7b9182321cf1025251a81ee9127a90";
+  sha512.doc = "3cf23b7cfac9f992890f67fc86f3e53cadef7cbe2725b4a19bab144766c4f1e60a3675685513d062d5ad81b3f13b4b6864c1daf83f76761275aa51b07a130c60";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.3";
+};
+centeredline = {
+  revision = 64672;
+  stripPrefix = 0;
+  sha512.run = "b9db432378f6b24ab52c20e1189734dc7b1285792e5fc392808a04f98ce784d00ed9b87459017f1f798c5e6ff769639f650c3d3abe2cd5975306b6875e1fc067";
+  sha512.doc = "023be77780a79180deae33a27b25c333f4499b302d026e5ddc34a2d1b7d45496dc0940027e7982816be0f398837ceb7b0de27ffabe0d1096c9fcab096784659a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+centerlastline = {
+  revision = 56644;
+  stripPrefix = 0;
+  sha512.run = "a695c30f3b3db43c83e1ae592de9bf32b2856cca45561835e78a03808c7d3d3d8b71f4cb2cf6ecd82ff475012787f953320e4a6a5817ea384382741b7ac88cd1";
+  sha512.doc = "850bd95a2ba3c9538e08163b34c900c045808ab69ab021fbb2068e1ab0fd3c5f29fca0b95864203b52704a3c33b81df7ab3cb46eb7296131fd49de71ad0fb876";
+  sha512.source = "0463b1c97472750b66fed17bbe1c644b78da98ce4e02cda29cb58c4ad680124d5c5153c0b3714aaf43aab971fe38b471e7c801885d35434210d61dc43a316a43";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0";
+};
+cesenaexam = {
+  revision = 44960;
+  stripPrefix = 0;
+  sha512.run = "780962e24e1dc4c6c385c18a6c95b8864b1930b2bc684d9a556a1d6579a2a8d06ec0df3fdb085c3ae8115dc72d06e376ed8ea6f6d801af07dfcbf133c9cb9c67";
+  sha512.doc = "72d53ea8ffc1827f3965c6f0728aa5f2cae36f645ab10d78ff8c16a3537f79c6f53fd34f388f2991e5cd2261b366e7746a140285df95d17475adde9cee3fcaed";
+  sha512.source = "e1668fb9f07baea5ccb79e2f61d672f838a83c8d5d01b3da2b3080473865b9bc8acb0165dad58aa46d1ca296e2ef8dc545db3e856d95f6749310a4c90591b4e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+cfr-initials = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "b4799007822a3bc82370b72ead503661f70cce1beb7a27bf1bd2523283a248045b0ef863ab1dd9bd93b39441e50d51fabe11a12fe6528a7966219a2da2618141";
+  sha512.doc = "124dbae846ced93e4cbf5b9c16235295c7e76306830bc9e08cdb5a4e8d0d5f9deada4706c6c41cc383f440e9e874cc1cc338176787ad029f8164bbeba99db965";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+cfr-lm = {
+  revision = 36195;
+  stripPrefix = 0;
+  sha512.run = "02e30f6d6d19bede2121ee0a8db20c3d96c26ef000ffeab08e800bb1da994dfa2cb356a6d67c815e8579566cf97b33b956c79940de61725524c4a239f7c1a251";
+  sha512.doc = "32488ecec8a781f5548419a782775725e6b32276bab5e1d7f660b99468d47e71087fb35b8f4534f874b1dcf236d04eae9d7920fcf0bb46e139a4e7fedc415ef1";
+  sha512.source = "643e7f1b48e3947506e97e1596972b686fab538511c2a0749ad936285c1e097ca8677730ea0748d1def6d6318030e7bb289e55d0c8f0ae9fc01fb308e974c24d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+changebar = {
+  revision = 69367;
+  stripPrefix = 0;
+  sha512.run = "2dda64af4a2528e5f81a1dad9002badd1c443d7f1e3cec36b9548254e5b365a641912e720779787cabc6057dca74af42db2e1ec3a9ffe39c3ae5ef7ffe0d8319";
+  sha512.doc = "5e0e2766b5078d1ffe87c36d14961aca842ff7d0ee73aefc6277b730dfcf98ea573c822addb2d6b95cc3981e6f56458a3a209c03848eea48170f7452a6261b96";
+  sha512.source = "ad58dc8f77ac1f4852d47baad9718fab4549d8fc0f856596cd8501329895b532346a299e412e87840de6934151837eee0af0b4ec30200c1bb99f10709901c9d0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.7d";
+};
+changelayout = {
+  revision = 16094;
+  stripPrefix = 0;
+  sha512.run = "c6852a40bc8415656b8137cfb90a79cff8f8e9938979eba4e02dadb3c5d1ffef60966f9e5779696402f2b9344026ebc1e22ddeb9dba856d779317ca801f26e7e";
+  sha512.doc = "bb81e02317d12b4dae8b0886ac3222849a457563ee8c43e09495596c56482202bb702352a8551f5d760ee41a82dde6b3f3c2bf57b4671831a25805d44e8705de";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+changelog = {
+  revision = 65861;
+  stripPrefix = 0;
+  sha512.run = "9b3fd70ebd0563138e2811ec8d8748dce3d04b18da636b884887424960ee69fdd30902b85b968ee9f545d57f8dcf8f6f137174b8ea9a7049308cd778f52afbe2";
+  sha512.doc = "c729c19b2a80eca9735e2caa46832da20975c89810d3f669c93e66ee4a768877c7ff30d71b2f887dace78303773eaf549ed32a001124304b82d4d51c57cc100b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5.0";
+};
+changepage = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0ef1d3370affd4ffc2ef77031a8713b5c663263802d67142b10fa7fc025569b3914dbbaa5e71e2c643718940a0cb89194d79ec83a83b93fcf5d57e0bfbbdbb46";
+  sha512.doc = "e3894d3a475f132e2242a6402899e8b9b6045681ce1fdb05fc5b0570e4d6b8b6980c2b5f5953602690250826db0e7dc9bab2f235d39fa5bda0e1161fd781478f";
+  sha512.source = "45ba09248231ad1bf14dfa553b11172e610ae8f46948451437ce3a88521f84791ae149a83c1ff104dd0f00ea6a1a029e816ab7dbe1e38b9eb97902c4a9b9b312";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0c";
+};
+changes = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "c7c8f65cc8a6f94403a1c85b01eece41561eaaef39b39977d02b146ef8dfa49aeca27345eb96ad5f6ee05d3a6625aa0dec9a34def564fb2b25dceaa528d230f7";
+  sha512.doc = "26796990ee809dd953fc8f5ead93517faa1bdddf3639d9d51fc2f0ab00a620fdc1950ca78a6a77cb58a5977f702a1d93738312451900ffb0a745282e777f7daa";
+  sha512.source = "35fc09ca71c5a7baac4d4bd69ea38f507927ba0c82c2ad7318d11ac22d3e319f70522cedea14f2d36f780bb2c7ea0cb852a111dac3b07273df53291956e9c716";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.2.1";
+};
+chappg = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8286a7b7664f7634bc5dd16ae1888cc4b70e2880c8749fe2e894d209384da7a8513b2daa318a4154f9b443f89b7eb2e3c6d620b81e1bbfa1ed64c243ad57e47d";
+  sha512.doc = "c0d42e7a9cbae3fc7386e9734492cd3f879ecf69551d17483c4f4516c2ea09d0b9b76914decb987f850af362e54c638af190de6d0d6414d09c49cf48c0635f59";
+  sha512.source = "371b6630fc12563694db35e8e086f7659e60f49a6b881281bd3bf2c081c6ccc2af74b630b6a53ac9d8b447635f2700f3d15643a02f7d873b5451c9b43a331b5d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1b";
+};
+chapterfolder = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b5f68c160249e9cd94efc4c664a18c04e627d416b304697859144d6bbc5ef787c0f8721d19cd6aab6c60864dedc65e84b3ea9114b7c823a8131b4bfdfad0c2b8";
+  sha512.doc = "43a28dd7182e02ebe0541c7b236046a6c23d55c73e36aa1a0e85954c5efd917667e1916ed0bb7000cbc5285230d162d5e844726282f0bb93ff85dfbde5fe8c57";
+  sha512.source = "179e4fd7966f1bc12fa89fa36a5e292f0d9937bd5ae74dbc9ef5846b0d55fdfd53e998fdb9ea40311dd34c7a99646d2dfb309fc942c6cfa3ada312297975f1e9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.1";
+};
+charissil = {
+  revision = 64998;
+  stripPrefix = 0;
+  sha512.run = "214d5ac5b367e863424c54f86a841c4d1d0eac7e54cb6421619906df0e6d81661ac74e6db7369281637252ff295535e8f930442851cd0268fe9d007ddf07a913";
+  sha512.doc = "3f492d929afbaff4d5c1aac1d57fc719caa04e4428de280cb8f3a6d376f6f7c3084ea8ccdac891aaa9f754be12eab99ace392d4090fe692b1d195ed12b619b49";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "6.101";
+};
+charter = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "706efb4e3daf7c304f5047b99d1f68051aedafc110cdd51b2e3cc520ebe628a87c41579cf476978e70aa0ae920e7a3aca1082013b41be8902174975e164a8f9b";
+  sha512.doc = "846ccf6ea679e3fc70192e340ce79982cd916d1383579a8549dba7125de645e4fcd4c276800bd5815fcb67d7227081a66b51f42dabebe8cf112585ce9685fb8e";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+chbibref = {
+  revision = 17120;
+  stripPrefix = 0;
+  sha512.run = "c87fc723f7d78aaf6f47f0eb34760d20c22a46983e802f1383ca4d952b354e199fe17dcb0e8b42e66522826f71f1031c59457ad4c5f5751c6ffeba66adeb4c30";
+  sha512.doc = "58c43dbb1274e99ab60ae8c2911dff6d73099c02f3c6b4b97eeccaa336f56e677ad3a1897a4fd782cf97e59b9938c83f13c0741697630d2dcaa4a7daa0b852e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+cheatsheet = {
+  revision = 45069;
+  stripPrefix = 0;
+  sha512.run = "5d50e5bc579821cc9296209983af68f5c12f6aaea90dffe386efb85d72683c10dd518fc2abefd51687402125bdd4f108ea6325c546ed6b2216cff130abdd1a51";
+  sha512.doc = "0c798c7057e6e9d8b3aabaf745b374823f0a186e95a01d6208ec22df8f733f02a86c01b35bf4dfab88837574fc63f159ffe177f6c155e52f85bc0d062966acd3";
+  sha512.source = "66f00ad307295e106dbc45827a78041329bc8f4eb7fb3eff6b2c34ea6614b84496e4cec43e81213304022121268cef3e844f2f55e95c850f56ad261068448127";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.8";
+};
+checkcites = {
+  revision = 67201;
+  sha512.run = "f39c3d9dd2190ea9bd08ac323192197042d9a3899de22ca3a3fe05c0eaea0061f07fc3f53ea3c5f8c8b3bbad5ef4be0da7bf218238e660d28283bbf4edd02a31";
+  sha512.doc = "49760eb0be9ec54bb784f1b33ed5b86ce655b91b85e6f9a905342832aa4d4288138b82268a874f7b458ff87c8a94e4fc542dba3491b55a309915b6c3623e5de8";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+  version = "2.6";
+};
+checkcites.binfiles = [
+  "checkcites"
+];
+checkend = {
+  revision = 51475;
+  stripPrefix = 0;
+  sha512.run = "40af84a5510dc3038c536c4b0aae0176651f01953650c1e6ec8b5d76459e7000246205d55f2b13ef566930649daf1eafc38e6d2d822787d1fa462e99837b6ba7";
+  sha512.doc = "0527c3c080f502baaaaa14a398ecbdfa714cec872f6cf8391ef8a766aa24b497a0fc00012433409904ea11d7fec425dd7c7116a52e8d983bddb2633248d2b090";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0";
+};
+checklistings = {
+  revision = 38300;
+  sha512.run = "599ed476321a825bea61fbdd468670cadcdb11249a4a9324fc88339a9445ceeced3680459dc2d27c2e6263cd207ffc0ce3b60b325d31072922bf4644478cf544";
+  sha512.doc = "3f8d6eb67f305fa5e03bb625a4034ffe616a6c0223774688463884df99c337c1e5bdd76bbfa3b9428ec4812ec72388979c4252ba7407ae8b79e3de7cfacbeb01";
+  sha512.source = "a7435841305ce368f1bedac9cb531d8f0fce3fac27484547821a2e82998e977968e578601382f4cddf6c089b42e8e175c56d2e466faa5c4c0e5b49edaf6baf1d";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0";
+};
+checklistings.binfiles = [
+  "checklistings"
+];
+chem-journal = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "afe7c82f6e139c1321759ef9125f262d504bf602c1c5e16a11d41cc00ea47dac3f2befd602a863a12c46beaac4c50fe6fcdb145c5c6582c9d44c2740aa1b7743";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+chemarrow = {
+  revision = 17146;
+  stripPrefix = 0;
+  sha512.run = "4a95a6b81bd649764dea052984eb21c7f9e89c612ff96d23907eefce29e2d33fe92bd7944d94a6b108213d1820b3340feab35e3646f727288cb1df9b78302990";
+  sha512.doc = "882e6c6fbeb5223fc1d2404e8b9ef9bce2c3b2ed1279d2bdc45616476a856c63fe07cdeb42e27f3bc459199f3537fc620ef08c00f4eea83df77502463fc30ca6";
+  sha512.source = "19903052aaa97902f721892bf4a9df8d685db46ffddb4cdeb4df280c24a72d2166bc13408a32d5c760272aee45ad5516b899c0024ff3f077fec6825f94e36736";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.9";
+};
+chembst = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f6bc14345c841db93207745de1d6ce189e08a30d17110d8efe04af0c5aa98cf7e3a1208e1969afeca0c69f747fb5db39437645e2437f9596ba5a70610747b6d4";
+  sha512.doc = "3263dbeee44d46b6661e2e755ba10e22475432d03de6b3286d1191acf2fc8df1541d9a9684d5e00143dbebf65bee468e9244ffe73d7ff43889153925b6edb379";
+  sha512.source = "c0c6658210450aa13a17e04eaee082f4d08b71a50a1552b571a49557ce8422d709da325c8bc91e742eeae04de388a777134a4d626d72409da3662c2d152cfc12";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.5";
+};
+chemcompounds = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d8cafe15f21045522812279337f9680a975a3f9b9930231b7992435bf694f8f180b061623bdf5fbe7dc9cfdf7d6342e0d6c2dae1cbe0d8e855699064a97a95fd";
+  sha512.doc = "26d9568f73f6b0c557cc55b48a99826b70d87724f7f5776f7c58691e8374b3b6ed400206b338bb0397ae5e0c1df5d1bdbb638e80d0dbfea228138b96863587ad";
+  sha512.source = "d1a0c821c6624efcb31ca21ab658a64919dd6eca51add909bea4467dbf47b20dfb60f10ee979a7525a04bae0f7440ddfae2c244da25444ccf0486708b4d1a1a6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+chemcono = {
+  revision = 17119;
+  stripPrefix = 0;
+  sha512.run = "29b6e78d47cdcb21c634540ed6a935cd5c6eea5fb6a28ee85cfe681ff00c8bd24d7175ee5adbbeab03e11db2f56a38d3359235ed44771976917f35c673fd21c5";
+  sha512.doc = "9936d1f0ce1e6ab9498aec9d68c176ddd803de3ed1e5a698ca7b548203cac66492ce319af3e5951144ad11878065c8b349f57668498d245413d7db62d1b6a8ae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+chemexec = {
+  revision = 21632;
+  stripPrefix = 0;
+  sha512.run = "62f374a57c799873aa4d1db52c56fcaf2f15dd813e3bd9295044499defa29a88567034e39b20af1e8a7e4208dcc35aa422c0ea8e1e0925fb1ae3e02a1a8cb482";
+  sha512.doc = "83b622fe694111fefb9c7863d5322f7a717778727c99db3fe5eedec0b6575d4fe50e6b5076413cbbf36a222ee7765bbb847c44783d6ce45cb07f55bab16955da";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+chemfig = {
+  revision = 69227;
+  stripPrefix = 0;
+  sha512.run = "1f5908b759c39314eb999b4d1e60ac364888e4d6193673bd387ea838eb9bc257500b0603055b2182cd5be581dc1d674ed4eaee6ec4b0ce225f72ddb77f67ac80";
+  sha512.doc = "1af123c858992787d641eb6f0263f5ed0d819c4264e97191ae8058714039e202bd9bb663e25104775d9362ca005acdb056b3c97c238b1899880fb51665405a13";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.66";
+};
+chemformula = {
+  revision = 61719;
+  stripPrefix = 0;
+  deps = [
+    "units"
+  ];
+  sha512.run = "907efcb72ebf3a315bffc11a8d78caa82b510993b4a4de1da8a960bbd6c66bdf5bc202933fce5f4f0626ad4507a5095b571487beb2414bc49bd37e735f0299f1";
+  sha512.doc = "c839fed7313744c6abb77fd4f803524c47af7f9ca0e4b533b307a198cc2fefc072541d58afca8cfab6a17b85ecdda4d3bacd451ac9616b47a448560a97f3b62a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.17";
+};
+chemgreek = {
+  revision = 53437;
+  stripPrefix = 0;
+  sha512.run = "8e70154271fb921ad9edf6ab5f8a21ce7c229723f88d7e37fe17aedb189c67a5749ea9e622c2dcebeedd614efbf18b9138e0219aea998f7a8ab3087348afa788";
+  sha512.doc = "69ef091ed42bb40826af81c9a4ce5536873a5debd971d70d30804f75a3240bc1aea037817cdc42346537cd025306c928fa347938785af9e69022ef51fba20d2d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+chemmacros = {
+  revision = 62655;
+  stripPrefix = 0;
+  sha512.run = "814995dfe7978e639594d51542ac7b86f419d48ffc3d39f069c24e84abee854e01b9d72047ab44311d500b98ac1d01308b56a77006cf14a975861e45d83b9f7c";
+  sha512.doc = "dfe4411faa4ae403d9b46b9f8f0e821f810c1c9b5a8926149643f099b164c7d1f163ba3436c79a8b9eccf84ac234df74c080fd2e4a9ac58452b840c335b685dd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.2a";
+};
+chemnum = {
+  revision = 57490;
+  stripPrefix = 0;
+  sha512.run = "ea8bcdbb4e69422052758aa7c49f8870c468834ca15833ba4aa89df98c88dd025b4677a9a15b85dd9f953eed6e05b62bd8ef2d4849bdbb113f16de9fbede1205";
+  sha512.doc = "31d1e6c6165f7d8ab15ed322b1cacea608fc796c74e3cbadde89a56f1e7bf45c01bcc6985d24a69b459976f75565f35f61174fc34562265b7f159b5b42d1ac30";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3a";
+};
+chemobabel = {
+  revision = 64778;
+  stripPrefix = 0;
+  sha512.run = "bd6ff01187b408d0f6d40dba470cbdb9cd72294ca425f76287d1a0d01474ca64d15db42907295b5a90958d3b5a18544a66d6b49de9a9b62e21fc3efeb6598569";
+  sha512.doc = "ae4ddcb5609bf5d3c634847c7be934b4a688346469098257fda8838ff2fcad4fc390cd600991648274539cf65c937d82d337840e0500661014755bd4872e59d4";
+  sha512.source = "25c4b787d5cbba3fcf0c80e134c627b5a5e09524afc2df6e428ad3430bfec95e0bc71dae2c759289ccd9d0dff736b35cea1504d4158e3b6f34af9cd07b29b208";
+  hasRunfiles = true;
+  license = [ "bsd2" ];
+  version = "0.9l";
+};
+chemplants = {
+  revision = 60606;
+  stripPrefix = 0;
+  sha512.run = "6d5794cdacdf71db6cef86b9bc99af2edb1a13f2b209d7693a7f37cb5161596de37b656b3e4ae690102cc64cb7245b21004c72943fb8f5e08fc1ed1479d98947";
+  sha512.doc = "50cdbc24501b61b81c2cde97c851df785599f5c2f5c3e4eab75bdebd2a81501edb9e3223dacb2042682a066f5640e8b1377c43ca61ec643b342f6de2972ec4cf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9.9";
+};
+chemschemex = {
+  revision = 46723;
+  stripPrefix = 0;
+  sha512.run = "c7375af2dbf1a7b55d41b0ab617111cc198f1aeac98c354813cb2886e0707ce5648d3e4fd9eefdd23bffddc08b96c35a050c1f440f21d5a2d7d5c6b5e0b6aaac";
+  sha512.doc = "b5e864a02ed664e7d7596b56e2583f9a4aff2b8117f79415156df0cab9be084bb96eb6c70c4fca9dd4bd03b30e8b145e4cd809b165d17325625ae625c33f1dc3";
+  sha512.source = "56174f5943b8dc3aa0cccaefaf9d3f24903626d3c4eb48bc79f01f2a7be603921f7b1ee300e4009038e3a92cd550c08c37aff239a9426ef3277e47f645964488";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.2";
+};
+chemsec = {
+  revision = 46972;
+  stripPrefix = 0;
+  sha512.run = "7a69ed2535d477063e55541d53f73f5d1972905f63d2298629522dfbfbbc97dba0e9ea4a48ed1667ad7b50e24c4a0f7b6d5dbbf79863c9e79a0b3de522be54c4";
+  sha512.doc = "5e132354e874b3ad5a4363cfbcad49e3601380dea8f53e106bb0b5d92fb1aff6facfedbad69444ea362c76473dcc7bd8703beeeda9b69f2501d995da98ef71a2";
+  sha512.source = "b81e9807d8a082b1223d4747a3f0ad3eb3dd21d1d145de5c25b8c44a384dcd941eedf7117c794efc6e4af2397997d060d0b80bad1c7f487ae98b0679f5412b2a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.12a";
+};
+chemstyle = {
+  revision = 31096;
+  stripPrefix = 0;
+  sha512.run = "299e15460a64019177530a4d28154453a813c6987e6e89b6f60466ae9e59372c1a5e0fc418c49b85364ba3185d4fe4e4b7f98caad9add7dce9bbe1792d4e314d";
+  sha512.doc = "f8d6c51cd7e3df7ea8366ade62d0cf8ec3825b0ca54be600107a6be8853d1c58e1989f5c13bddcacd97673260890fd0f63e9a0282203dbdbc6a01653d86f0537";
+  sha512.source = "0ee97edc8ecf8f08ed39ed9fffe18b89249c513f33ff415e4205619395baa6e8b7c77832d5110d113d78d94c1d79ba84f79a5ff23a43fd0bb23d19db96badf52";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0m";
+};
+cherokee = {
+  revision = 21046;
+  stripPrefix = 0;
+  sha512.run = "731fb10454a9d359d91abf927a27215e72283a9635cbd853a6738ddbd5047d81fdb8d547b891f29836d0b604d97749074e9f2676c5ad122522d987ac9bb46105";
+  sha512.doc = "34b258b5b699f644cc0f7f9b673f3dbe48357bbd338726af2b404da4888a9e742f04e397cc3b6a3221d218a96ac7180ce1e6ba80a19c688de0960ce59cb14bb8";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+chess = {
+  revision = 20582;
+  stripPrefix = 0;
+  sha512.run = "236e195febc213825fbb5569d8eddd1967fbce1c6e9d550a1c52729be43674e063161adcd5dcb1f6293d9ecf8809518d40064fee08ab64ffe444affe3282224b";
+  sha512.doc = "95d3b598f63231abb6cdccddc970d6ccb29bec7e9fa29efcf1391bca70b610e9c0bc65754061a4b955548a854bcbbdd8cdf05f8f93fe52bea400b7c281ccc0da";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.2";
+};
+chess-problem-diagrams = {
+  revision = 63708;
+  stripPrefix = 0;
+  sha512.run = "a1abc825710bea252dc9dca092c9bacebce5af21672e413425d5ddbf72022272690db31abfdc6cc4738a1aef1b802f95adf93264a4ede8c352409b2dc11c125d";
+  sha512.doc = "47c2e1fa3790f7229a2402b5e20edded8c2c7908d48e16a228c55bd5b23e94d77a5e1cc9d00790238a6fec4fdfcce1915251a08b6aa487ff63e18fadea6c62f3";
+  sha512.source = "b06728a4f2390692f2ff557eb06484e29baa408ec21cd8f688567fb84dc7d67cd87da8ce4f743ce51b5f43267d0c0fb8b058d4fbc848ccda71a02ac29fd5ee6c";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.21";
+};
+chessboard = {
+  revision = 56833;
+  stripPrefix = 0;
+  sha512.run = "9447eb4dd8712ccbb519f91e99ccd1c64cc0e9ba904bd46dd8c83ce03c31e5caddca8e76c2cfeeefd5946c8881b9e6b198d50c131a1e8d5622b054d1459865cc";
+  sha512.doc = "1c2e8ab2776a247ab1cbaf5527e04392dbcd1eae3a9b1c6785223268d1811a778c0812a1a5437a15cf4bbf08ff28785a57da10c472dd7567f1f0217b2d7de556";
+  sha512.source = "674ac2dd69312d3959bca053d5170bf98381ec70e3d688c991e276f07260c10ded70055b4f9b819fa0cefc8f1ac7850dd9df61d38a97b58c0fc05c824a42c3e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+chessfss = {
+  revision = 19440;
+  stripPrefix = 0;
+  sha512.run = "8250d4b470a74877c44093888657b0a3c6ce71abc2a23780e71590d0398fc08943ef77ffafcfdabdc6bfd739f7d5b4ca15f2436df103271de029e5ff6102f579";
+  sha512.doc = "1f9e625cb7765450fde23f5666af3b43ddb9ba2e67e7d04b98ef19446117cf26eaec3c2586be7c683286dedc37f8d628e4142bae834af716f2c068ac28beef58";
+  sha512.source = "8745f5c712df2da39a61aa3d7ec3b6b4917c4905e3a0c4ac25ea6484555f25db6fd31b49a9c86566f69a660108683b4749abeb17f512ece9af54ffd7806c1d79";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2a";
+};
+chet = {
+  revision = 45081;
+  stripPrefix = 0;
+  sha512.run = "d4a43d5ed1f8e74f0b4681abeb2b1134e9ad770cbde69679d53ea77e09a1a23412f03705691cd31110d145a96dd97e078d675274342c9323b849c770828db5fd";
+  sha512.doc = "143b224d3ad957def3ec22a6e55c1b9eebd5db582065d422e1cf972580eb321ffc768c51cd687add62c01ab1cf3dec170422e6d9bbbab01846bf3e4cf84ec936";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+chextras = {
+  revision = 27118;
+  stripPrefix = 0;
+  sha512.run = "6fa92c9cf1da7cbe2ba74dd10f1f71274e25b228156f01efe5c67e54a2ba258500f7b2cc39fe935d4e92c641b760eacb7f39ea70643557ade4816e92e92a0b17";
+  sha512.doc = "8bcc8a6c99be02d8e0babc82ec016fd6e91823a31338701e3d741af895a1d87d224a849598c2784f5de9cfefaf9cd7a09ee5b102636114d528b1e17b830ffecf";
+  sha512.source = "1b82f258f1420b07699a0ee75f99e330acb4b9ad1fadc9ffb0f42a1a4321cbad9c08718f9bbb94185eea9bef8d707f729d610b5f671db7014fd237dca5fb0d6a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+chhaya = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "c8174ee6bbb8a57448caee6cd23bf7e41790dd1ff40cf496360548fadf1e7161b2e08b2ef53abb51b1410b406689267ce2d4a8668d052754e323a1d836670ba0";
+  sha512.doc = "0e6bab691d5a5965ab8ee575f84aeae44d26ed12fa8c7f636fd0997a4ec7c1d4efc4a43f3f451659b69bd367c759dc8c3239ca51c5d12c91ef7182e43acfd126";
+  sha512.source = "635430d05de402f7e56110516fd16ef455c1393cda27b61198ebf92cb9787b01ce85f58d0e06389d823a98a73514470d83624d87a035565d159323524de09439";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "free" "fdl13Only" ];
+  version = "0.4";
+};
+chicago = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2313d7911a8c6bbcfbfb25405e3fd2ea8c0721045f77b9ecf27e4daaee5cfc1a5c010c72d192583e6025aecc6f69421fbd7921d63daa9f29145eb6f9c96c3abb";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+chicago-annote = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "be2bc8e7e8eaa881ed7a8225b211ef464dd5635b93b867333458521e405fa42375d4804fbdebe1b913fa694aaaa839703494a155b0ea5d4a99162f6335ccef0b";
+  sha512.doc = "893ba3ff20355e0c395b2092fc01689bd956eb177434ab7152aea686210a7167a04b64ed8ec21030e4f4cbc7e1367a90976168b174fd068d6aecbd0304f380db";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+chicagoa = {
+  revision = 52567;
+  stripPrefix = 0;
+  sha512.run = "47cd96b4933b6c0bc4af01e5085af2450b60168813715c946ea18e3e7e5f6bda409862638038917bb678579bfba127fadf51b9a5916e4fb6c78bd10481a273a4";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+chickenize = {
+  revision = 57325;
+  stripPrefix = 0;
+  sha512.run = "3cb2182717630c6d251a055021ff671eb930885e5b33978c0cd51176225b1743938447e3d761cfa83c9e3f46cbca1b5686c18f734a1ea5fef50a7ce48873ee0a";
+  sha512.doc = "a2a7ccaa210583de7a765b940959ed4cc2678c6800b283c05f301814b69bb8c704394f8795a1824b41b03652e27106b9e47ed9d5a57179df685294fc3caa16f2";
+  sha512.source = "614f105bf01bc1a36ece9ed319763a06fc2480bb5c5b1845f47b17ae1753e9fea5e4f25dab9b35cd493d2c6c31de1c636723b676269495d85829b683420b7e6d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+chifoot = {
+  revision = 57312;
+  stripPrefix = 0;
+  sha512.run = "492361fbe54dae9585b4d62eb1d3c3bf4a81ff8ca8020ad997cb9b30c673cfd8b35cf8ff8d742fe6c1ec7cf529e3ce558b9d5604851fc39c75d72d0fda37dc6d";
+  sha512.doc = "34f5bed1ff3660a5fb1fdacb0ec26311fd47593ed6aa659d12eca8141262d9fa7d6c75b2601dc59a38ab02212269f0e69a5fb5da3d9ae1d884f25677f0f6b545";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+childdoc = {
+  revision = 49543;
+  stripPrefix = 0;
+  sha512.run = "b268695b1d91b49ba6a0179124cafa5e5cfed56672424ab40cc31924c07879b4f50be47f9fe9d574f2adb3f183c71d799cde8854a2942b530c40a1e101d399ef";
+  sha512.doc = "1a74059d946b82da211f5fed7cb120453049ceaf5f10841a78ff8864b41444064b223939bd2296142bde9c7bececc0ca8bed141be02431fd60f069ecab998d87";
+  sha512.source = "d74e34799e3cce5093f59d66d2680350ccf559b0a06045882dad98a60626c59f8e0ed8a6e03d09cb4ff443d3f68a33208af996e2b870047fb381f97bf92dbea8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+chinese-jfm = {
+  revision = 57758;
+  stripPrefix = 0;
+  sha512.run = "28dc8b70bf5e97a4e31defe09a16805a57054a019fa7908f6dda7ecededd8a37bff3f782d04a7c2fb72ec17ee1695d5a5a68daf3a159092080e5a7d667b4c9e1";
+  sha512.doc = "6b0b2e65ba4bb79a6c6eb5e4075a1611b2bc752cefe1aae5b220e663b33fde685184433c397ac4957e4f2a6716129aeff5c40ff2082b2a3bcfc13d591e06897a";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1.1";
+};
+chinesechess = {
+  revision = 63276;
+  stripPrefix = 0;
+  sha512.run = "6ff5ef8c4c29263da38847c6c836470c397e9838c765eacdd9859a055dcc719d3385d4d9cddf5ef7e92196f99fcef8470445686c1d858bf68608429b1cd7987c";
+  sha512.doc = "83d08a949754dd38beea350cc1c5f2b8d193947a909efed156f662b77a8505f993c8449f21655c48c6ea78891ff15395d34796479fe081d29958fe6a2c0ba49a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+chivo = {
+  revision = 65029;
+  stripPrefix = 0;
+  sha512.run = "ef91cfbaa46c34bdfd891c3bb752e203d1cf495d5a9f12523b3c59fc591c7abd78ad943d3f4da8abb46fea9f25cfbd280785c721cde155851fa34f3f3a71afdb";
+  sha512.doc = "b174894b8ebc6bf729ca8c8cabeb9d3fcc709d4f3e0947c689489e4caaec985f35265d476e44763fa5bfccb83308857b03cdd01ec8e7e47cf406d6a86a10d071";
+  sha512.source = "768f1a93665644d547e611abb5b773390205ba2839812ce222bd7d7b184851d46c7e1915d290e6ee87490faa6a8b0a2c59c3fe4a16d86bdb28fa77d6df4e8f3e";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "2.2";
+};
+chkfloat = {
+  revision = 27473;
+  stripPrefix = 0;
+  sha512.run = "2a08b71c204709846bbf26ec3883e9037af6ff22e9bdf13b27319ceda55381eb9e3816ead4e444eba4b8a050a188e58d14f0d9153a813953f587c6cabb3932b8";
+  sha512.doc = "b79b6bd6943dcd07656bb46d44bf50ca2c0148bdb6ae711d17a49e78f3bbf2b95781cd6f3d0b2f7625b131f7485d3db608c963367dd91dc91070501b367471b3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+chklref = {
+  revision = 52649;
+  sha512.run = "12f5e950ae439d0efd3f625572e8b81d993485a1efd71dc04c078cb1dc9b76650de3c424d7a6c60ebc5ccb5d29f37ed04c477ea1306acf4c5f4fccbd95e18985";
+  sha512.doc = "5aeb13824c1781feefe94215f3efce15c212e0d38f9e0d5fb393e96c2159ba43f165c600cd64ee9d8c42c0a4f0db6c2e462ee85a93993965bad0420b6b662ef6";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "3.1.2";
+};
+chklref.binfiles = [
+  "chklref"
+];
+chktex = {
+  revision = 64797;
+  sha512.run = "7c28847e87e788d0f50c07c1c3140962a70173d2a36997720f3066755740744060ecd03272662aff563de39102052e91a4582a4bb63e35f918ad8f517dff55e6";
+  sha512.doc = "28df4bed075d66d9f25bcbe332731f1d5f0bb0f7f92bd2f3618c84adf788d0f429bd0c6e75381ebf7bbeac98409d94f85d17ebd752f9e4af707d9e3373d45f97";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2Plus" ];
+  version = "1.7.8";
+};
+chktex.binfiles = [
+  "chktex"
+  "chkweb"
+  "deweb"
+];
+chletter = {
+  revision = 20060;
+  stripPrefix = 0;
+  sha512.run = "a32f71d89ee69ad60de6173f415d0a3aca7563107cfed71aab0ae99972a2ead442bc75f848ddf07c26c5d464b2224afed5ce976bf037049764f722396e9666d9";
+  sha512.doc = "05cf8a4f37eb51cc00d9c254dcb817c41167eeb7643f7a793d1a841bd2c8a3715ced2036b974533521f48be48ae493e52ef0809789d36155d1ffc9624db538d5";
+  sha512.source = "6e4c5063d7710fe5842ba684705d4b94478a9d468e68d60fe0b2ad23fdf717841421bb034317cf240269b77e4351eadce854145fe7e4300b2f9b698a6617679c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+chngcntr = {
+  revision = 47577;
+  stripPrefix = 0;
+  sha512.run = "0fc94f91911c623578912ed43526d18f85a003f797e94ef5610aab8477154078efae7000256892cc3d3103843ac8065c27d56a10c6f57c16d9ff13693930b0b0";
+  sha512.doc = "3b63e4676232c05516bb12c189873e4af39b8b34df2690c897c4733203c9f19a30759850979c47b05e5fea0bd1c277a5c1ea0624709cda6a3a4ab0196231afb9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+chordbars = {
+  revision = 49569;
+  stripPrefix = 0;
+  sha512.run = "1349aef2649fdd9b54751425d54cc9b0746dbcec9eebd1264c36867517c4f422d74d390a0e43d22fe81c5a36ff00e6cedc5e652183422e9408a2165486e79052";
+  sha512.doc = "ba8aae66430e2df58f01bb9860bfab9cdb3aa0636f77f657a1fe4405ec9397773b51b01d94201bb8dfc8660d05f2aa4ce9233ef985d3e4e35faf005c81759404";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+chordbox = {
+  revision = 51000;
+  stripPrefix = 0;
+  sha512.run = "0e07cae95a8ee5f040b4df4d94f996f772f0780bbe47c77db891fbf44b08f20e28ba8442dee3e981a052b0ccebb0d630e0f0917eb7c65a490c844a65f3b2e3f4";
+  sha512.doc = "0826513579953ea80047d596b6c577e4b6f00fcdddb7a06bdc953bccd72e09ec2fd9123995c1e04260ad880bc860454abd283885817a9eb359ec7cb5beba3cc5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+chronology = {
+  revision = 67973;
+  stripPrefix = 0;
+  sha512.run = "0706b70147c064fed807d750e3619d6f6c9ee9d875de70c8e08720bd0fe86e75fe79a2dc909ea9c76d98e0f6cd864957ee213f58f2753eaab86bbf2866b301e9";
+  sha512.doc = "dacc8fbf5869df257cc03f0bb4b1c33b2ed7e67f2bb7e4fb897038d623b4f3c1c7e308191a2270e661157d3908c142fc6fbaea349740487797f45feaabc9c039";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+chronosys = {
+  revision = 26700;
+  stripPrefix = 0;
+  sha512.run = "a9503f9440dfa9a42a3f2d345c5e74faa9f40b03264bdf8482ffa58c34318467a7863033acaf089acff6056f91e9d85969676c1b0b080b363c1274ab96f022ed";
+  sha512.doc = "1f2078bc645e1a9af4220bf4041391353495f76f530ab5f1a35ebf2c2a534d60a910a9ec079ec2222ced7fc3d9c146bce3d6d4d703acd2bfb9ccf357f6fd812c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+chs-physics-report = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "568c7b71838651881417900aa5eb8711d5e38b4496e130802b7732482c4b8d83585c54a507d2f5ee27823c9d97581db7508ea79645275ac8b1b4d02238c814e3";
+  sha512.doc = "edfd22aa48a1d3db245d3e41b36cdceabe4e3c2e263d3fb270325b6acc57dabe686561af5359b849e8a17d1f2e9b77f2016cfbcf8b0af37ba3120085de9e6764";
+  hasRunfiles = true;
+  license = [ "publicDomain" "cc-by-sa-30" ];
+};
+chscite = {
+  revision = 28552;
+  stripPrefix = 0;
+  sha512.run = "809c76b1bb47e194c43c869b27352578fb5490f6a9a8bbc2fae662b357bd36a099f5114765611d73fae87a846526781ceb7b45aa8968836c543e15f13e7ad7a8";
+  sha512.doc = "215085d808b75d0d7f3e7e95830c63172606fd43e1e30a20e376f43d12959da71e8e77a6f06a6058d8ab9f9406f1260262af3e904ff65254e5d2635ca6d15975";
+  sha512.source = "cf81a7ceda538e9a3a8bb0a78927c493d42993bb295680792ba643d6f771722e0fbe342bf59cd3104cccb63b1ece7905418b998c1af1dbd7c879cce024681f9f";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.9999";
+};
+churchslavonic = {
+  revision = 67474;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+    "fonts-churchslavonic"
+    "hyphen-churchslavonic"
+    "oberdiek"
+    "xcolor"
+  ];
+  sha512.run = "6b312822caec9f9d71396b8737010e59521cc59a744c6d2e0633ac26b24ab0ea97ef29472a83b49448e8d82225ccb63926cd91ffdacc523ebf37bfbd2d4cf6b9";
+  sha512.doc = "a56e9927434f6d29db7c1ec20c0c3d20cd24241a9883fff160cba111eb5c11181d5ad1b9ec8cb66dedc649b8c8d25b9cb8670f1a28474174b31cfed380a2327a";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.2.4";
+};
+cidarticle = {
+  revision = 68976;
+  stripPrefix = 0;
+  sha512.run = "1dd802c60fade71ee873cac25440e52b9cfa45293019cba6c22a16a6861eeeea1e15ad4f945dc9eafd95873efc112110b4ec14550f8bf8cdf57bec6fb6e54ade";
+  sha512.doc = "ff0dbf03d9c9f371d90adaf1f5d984e5ca6628d005c1345f4e2fa7c2c4bfe494914667d8afa572a5e3eebe73a7d4e01cfff8e1ec8c213d58f71fe64089872722";
+  sha512.source = "f46c3d5e483cbc9352793a2b8cb6b92ca0a561ea321633d9589a39f8331ded98e183ac331fb100e4e7e0539674e2563aad95c029f29c00e98798462e25228c9a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+cinzel = {
+  revision = 64550;
+  stripPrefix = 0;
+  sha512.run = "5e02892250c5b787e4c6288beae9be2b9a2a2929a31a18c40ab3bb7609a23741e829747aaaa639f8579f229005a2171070853ca79e23b7185ee5edfa090bcf13";
+  sha512.doc = "7edcb9894dfbae936ef6dbde1645890feb50ba5914ffdcfd4539a44f8c8ce24f150662fec06663de54e8bfa69479c8ce006038f063f6587bf70f7c3449623a4e";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+circ = {
+  revision = 62977;
+  stripPrefix = 0;
+  sha512.run = "12f50efbbb07593485120d0e0b428ff2035a44c668025eb4a6ac78ecb3c733c5975f9f7ab4685c71488e7480a3a280fb90f618d03d79f1afed278bfd67810573";
+  sha512.doc = "efdc13dc7bc670719c854be45155549fa24e1e195a6a61f84a075aeca1903eb13a6579a330d7ddd6bd5a1b7073217a453e29f790600ad2013e0d82a80763d29a";
+  sha512.source = "e9b6ea17103eb8438f230d2066833d8d5281f14367632fdb6e8acfcd8d33348286198ee7438c04d6b04d42bb248554946aa6eaa3a2edb6900b7c20540e5b1617";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+circledsteps = {
+  revision = 67889;
+  stripPrefix = 0;
+  sha512.run = "41f96e112cba5f15bb36afaccff8852917383269c7ccf8f163972759615d5e5b87c3acbb54e4d14db6572cb0330154e1117f3159d851fcc9d3c5c3efd3c17d88";
+  sha512.doc = "815af1f69253625528fda78b1794eae1ddb5cdce357f5af5db5a68385d7ae90386611335fb8c429de8dc13a908ab5253ca2e99ed019590434ab6d087c2dbcbd4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.3";
+};
+circledtext = {
+  revision = 63166;
+  stripPrefix = 0;
+  sha512.run = "473d8ca8d6507148814e0c6083c7046fdb57596e374d1bcd40318c67ecc5a557b324700505d40c1040fc2b2682edae1150d5051e0c26cf9823cee0965ce4f89a";
+  sha512.doc = "04ba2a36dbd2c18ae7aaab0f638412590e2d5ca43f2438690d1165f2761bb9b1b1655d26df1a01af143dcd5ca83c161ac7a7c683d3a65de6586398774023c275";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+circuit-macros = {
+  revision = 69263;
+  stripPrefix = 0;
+  sha512.run = "5bd9c2885a1e8bde8f954d5a4072e00fb7e2b2a1663fa6db5f1346aa5f5022107a01f44175daeb0fa8e84e066c8373de8943b89bed725c03bdf45769dca51ef5";
+  sha512.doc = "784736df91755e22f003719b1821b01a8346ffd72036cef10ed2fb38869beaa449a12f8a5782d48355426ac46268f3d897178e7ad06a2bb21fe00672a9d64280";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "10.5";
+};
+circuitikz = {
+  revision = 69077;
+  stripPrefix = 0;
+  sha512.run = "82eda82916370e8c76c450d74ffc4a77770a00aa0c65c4b53e46b1d6c2262db83af3290d220be14db657ad80ddca202535428d6e34af5a0e7b6348c01d8fb59b";
+  sha512.doc = "8dbe6c341fa86da01fcb3122531f1dae59abd3e1927d065ea7904294dabdf45746c52fa9b25b8a32a6234984afd8566b914c9e5b7b29a05337fbaecb4321c506";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "1.6.6";
+};
+circularglyphs = {
+  revision = 68476;
+  stripPrefix = 0;
+  sha512.run = "043f30f3b8e7834698e2c70744ebb66f938ff7189c593f54b1d3017b84cd7fe180b5b7685013985f68c31f8e62785804129ba91181053119679ea4f775676933";
+  sha512.doc = "8ebcaacfdafbec747a690b392e872a9ee8e7293070e3200ef583f6f5e660a5ab813a8a426464f024c493e17e956f1192984ca3a58fd7abbfb89fd403fc1e359c";
+  hasRunfiles = true;
+  license = [ "lppl13c" "free" ];
+  version = "0.1.1";
+};
+citation-style-language = {
+  revision = 68454;
+  deps = [
+    "filehook"
+    "l3kernel"
+    "l3packages"
+    "lua-uca"
+    "lualibs"
+    "luatex"
+    "luaxml"
+    "url"
+  ];
+  sha512.run = "da914f9a07a02453627546719a1df88d3cc5520bd1530876208b2cbf0acee4536f043bb34228a54afbb86a4fe5ea9fe178102f61828b66b1eecd610cae7c473e";
+  sha512.doc = "3af7adda2f2cf49b178680be6bd72f299d04f515d4f8711f6830227a43292229704dfb990ceee289ef9b46afd1f057d53215dbf226fa99c41a218542dda74a67";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "mit" "cc-by-sa-30" ];
+  version = "0.4.5";
+};
+citation-style-language.binfiles = [
+  "citeproc-lua"
+];
+cite = {
+  revision = 36428;
+  stripPrefix = 0;
+  sha512.run = "39196b799273a2da29591b1b59c0a504f0e0971a6fb12a21bed5ac45d94eb017f1e7c64691fcd46f5c151d867c1ffac706f050fe2e08bf3c58aec8867fa185d3";
+  sha512.doc = "f9ccc0e1975064ec792c6138907cd3dc8080ff2fd02a2925d1a1334cebbb2289797b234b46d92be0ba45d460c31359b5c143f20e28cd1aa1827489d04b88d300";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "5.5";
+};
+citeall = {
+  revision = 45975;
+  stripPrefix = 0;
+  sha512.run = "2549b398c98f82833849a45716d55a776ab3b7927fdc400c2e6d43c45fb0cf628bd66bdade7ca63bcaa2e98807914f7adb958c6a06c27762fb0ee70452d4d280";
+  sha512.doc = "f1eaf5ed48bf3fd2bc336b7d91dde09b5cfa9a1901bd6315d4abf032439571a89f1d7c4794ed0256ef1aff0456d275e68326e81627f164652c84de2900165a98";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+citeref = {
+  revision = 47407;
+  stripPrefix = 0;
+  sha512.run = "5f56fb1d813962358c737023e06bc2fa249712d8ef984f835073e11b075b676e845596a61ac312991e646d72068670b60eb002f78ac322f66d8e5a9bce185063";
+  sha512.doc = "21d1a8063586b09ba953ac5df96a3b1552c586d66c5f2af517b1b1ceb75b40f173bd411654dd313c6aeebabc35db7543ea8edcbc8705ae104c7f63e5a5b3cf57";
+  hasRunfiles = true;
+  license = [ "bsdOriginal" ];
+  version = "1.1";
+};
+cje = {
+  revision = 68656;
+  stripPrefix = 0;
+  sha512.run = "764c9429f8000aede2b8dd85fbb2bd7eedf8e6bd2924347b75d2aa51a05b060921da15b1a55d9cc33582e5fe658d89edf8337e02f164a3de033c66bed3c6c2b7";
+  sha512.doc = "791757a59293d7144844cd05ae3346068bef42dee489138e5faacac68b0ed0ec639eb8c60d0fe34e29f37e1238601ae074d43d0e7194f07c1940a0f9411f8f85";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.07";
+};
+cjhebrew = {
+  revision = 43444;
+  stripPrefix = 0;
+  sha512.run = "65a73380bcfd8892ab2eb93d088076e2d5371019244bc8a65a4695e69a45f743248fce59557533add032a02a0b7ea4f02d6ea4634265d2d9718a5b100f5a18c6";
+  sha512.doc = "591d932ae099aa168d55f9479842d25c5212dd7aed27eac1a5d05a111a8a396baae7c73ddafe1087a7b8008528c50b1a85825851643d8107133d41470ce1e397";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2a";
+};
+cjk = {
+  revision = 60865;
+  stripPrefix = 0;
+  deps = [
+    "arphic"
+    "cns"
+    "garuda-c90"
+    "norasi-c90"
+    "uhc"
+    "wadalab"
+  ];
+  sha512.run = "b13712912e479dab68cab9027042be8cb11047ebf9c034f532c857e83d28f19dfea5a1748685cfe1847c7372f2d0982f79736525694d937c88962c5262094585";
+  sha512.doc = "a8c6b2d4d0899b841ccc32b378855d61bdaa65d5f68fd408df3894d386bcde18f384410f34e6f33ee2a5ce770e1e663a05ab038d9b7483012a3cb414739c3705";
+  sha512.source = "88be587328daedfed3bdcb289b1a03343bd7257ae180a9e0857a6b00f173f601eccd8e5978dd29c2d95fbab180fcfd5135a682c5218325fc6b664f2cd505213c";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "4.8.5";
+};
+cjk-gs-integrate = {
+  revision = 59705;
+  sha512.run = "376a1b287955a801cb223c761fc9bee8af0f587f27f8c3e6cb32ef009fa575fdaf54f5e3847d7b4ca414e3eb4d58d3611ee2194736dcfafe8afb2dd6230c1999";
+  sha512.doc = "c1165f2ecd08b279cd0d0b028682eecbb3953659426a1885bbe5aab9838a90107c576a3b9bf80b0d54dbe3fc438c8af8a8c82f5faf79052c37d2c5e85ea9ae42";
+  sha512.source = "ee53a480230824eb7aa1ff270652eba4f39e5f160fdd091d596b9da610d8c8c211db3aa3d89931ec16edd36b2662d07a93513563efb3bb5a9ffc9dba0d274ee4";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "20210625.0";
+};
+cjk-gs-integrate.binfiles = [
+  "cjk-gs-integrate"
+];
+cjk-ko = {
+  revision = 67252;
+  stripPrefix = 0;
+  deps = [
+    "cjk"
+  ];
+  sha512.run = "8eb4ca863ffdcab233a353629f40b87264903d2cec2a79088a8f92a705b78e5172228ca46cf4f3ebb78ec5e8bca093917bf191baa7184f805003ea1f3019ea8b";
+  sha512.doc = "75c041a2fbaca6977a96efbe7f5c37729d85c2f0903faafcdd69eb1425037e8a045a394b6c65b8914e0d10c831a63c58bab111491e3670e5cdedbb4a73b2e3d3";
+  hasRunfiles = true;
+  license = [ "gpl1Only" "lppl13c" "publicDomain" ];
+  version = "2.4";
+};
+cjkpunct = {
+  revision = 41119;
+  stripPrefix = 0;
+  sha512.run = "cb44aa3386cd79f05980e5402adcbbf9f8b67fa76bdd5b293063fe9810520edbdf243656cfb54fe17d6ca43d405e6b16e8012eda63bae3cb3d8fc0f7755e2551";
+  sha512.doc = "cb9383b6d3fe9ffd5926d10dddcb1ea758aabda232f015b22f61dc8a9b316193b30ca2d8e2b849b1c03d92e0073bba6d90cc5b3b50f47b28a745dff2f7229486";
+  sha512.source = "0155261e5a1a22634a4c6c779054198534bc2b6ef1f1d85d471a25bde59b7e872db01627f08db6dc76c7fe6fd08d9a2363c47e79425c80ec5319648c994cbf48";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.8.4";
+};
+cjkutils = {
+  revision = 60833;
+  sha512.run = "36b0d0ef4bae2a9e5f2238c5c9aa125eabfca509462b65a159f66cbafc690939e16760a86e7e7dcce22ffda2f301c039059cdff1af8ed862017f18552e13e728";
+  sha512.doc = "636e6486f9661061d22d248b0b7a8debdb81cd08c56b449067782568fcc7db58922f7c9d40fbc992bdd008908f22a6733af4a8115d85c0572556d01e925c5587";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "4.8.5";
+};
+cjkutils.binfiles = [
+  "bg5+latex"
+  "bg5+pdflatex"
+  "bg5conv"
+  "bg5latex"
+  "bg5pdflatex"
+  "cef5conv"
+  "cef5latex"
+  "cef5pdflatex"
+  "cefconv"
+  "ceflatex"
+  "cefpdflatex"
+  "cefsconv"
+  "cefslatex"
+  "cefspdflatex"
+  "extconv"
+  "gbklatex"
+  "gbkpdflatex"
+  "hbf2gf"
+  "sjisconv"
+  "sjislatex"
+  "sjispdflatex"
+];
+cjs-rcs-article = {
+  revision = 69006;
+  stripPrefix = 0;
+  sha512.run = "6f49b9c02aa67036997403d65a9efc60c0cb7bcc29931d93fbb0359624fcbf4b3899e75c1721155b6484d7baafa79a823adf08fa5f1491352d4bd547dee22a58";
+  sha512.doc = "2932d797b3969a5e399c51d2c515c05cf7fccaa88d82d80b99f626dbf2ff7a6e5f7414963696842f1980755b72a06f9e9def3d282f8ff5ca5175ad1ec8d3f1c5";
+  sha512.source = "e3ca39b24e2dee6d611ccf7b0753da2d99a419db6d7e31d5aee231439dfd08da4f4bd9f902fa8c65d16df7fb9560cacf3d76ce111ba2881d267be7964c538649";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-sa-40" ];
+  version = "1.0";
+};
+clara = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "549efe7ed1b523e0f414d8f6401137cb0078256f514253199f85e436a5bac595d7525380fd986fd0c674d087decb23fc401f41a67b193c58f1e8e3bf95a8283c";
+  sha512.doc = "6b7912050fd352e3095f6abede303f67d3c779b778825852bdaa37345dfec91df860e5b9d0f2fccb7e4e20abfb93740f7f8dba5959aa1d630b7cd990bc0fcf77";
+  hasRunfiles = true;
+  license = [ "ofl" "gpl2Plus" ];
+};
+classics = {
+  revision = 53671;
+  stripPrefix = 0;
+  sha512.run = "86eaa987025658749c642f5132933745a418002feda5a3dec0f1dd9967a178af7e9c3188cde0b0b1fc8fb9ddf5cd59b68cf95942bd811d978d72a68f44a2999f";
+  sha512.doc = "df7d88ae0dc936b8b7f60e98f806b1368d249a838a7407ebd12de05fe10a6e0c9da1ba8cddd3d396033271dd3692451441ad267a187c30cbdf28dd996f707b78";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1a";
+};
+classicthesis = {
+  revision = 48041;
+  stripPrefix = 0;
+  sha512.run = "9a8c0c9ad0d97f187cf66679613514000324a72d2745c1026889b73e5981e0dcf36f388a0bf630f5ab35d28a39ae50ac842db28c214442ccfd987ff2c132ce7b";
+  sha512.doc = "3eb82d6c0f951a060e56c763e90ec842d1692326501f538d71780f4a0981edfda33b0ac0b5d00ccded7d3273fa69d4dd5d4a9c3557d9a69e1c3bc17375fbf43b";
+  hasRunfiles = true;
+  license = [ "gpl2Plus" ];
+  version = "4.6";
+};
+classpack = {
+  revision = 55218;
+  stripPrefix = 0;
+  sha512.run = "483d96aff1739fc2cdb63e9753fbb86ec93b493ee3d8d104e6089c791e4674d522a30e0dc747a48d8ffc6690452a147b2ad15a3a9cc676c641a9f6aca535563e";
+  sha512.doc = "6e30295ea5d7ff19f47d4144a3ea6eadd85d02a80023b426675efc75cd2867e3c79b60a8210f26cb732e5b0e70bcb856d96d7ad98a6165cfeaed64affa070bec";
+  sha512.source = "59ab38731bbf23dcda81c02a297c69b5787ce89a69953697651c399dc86e0994db91e5d06358365e8a607a3f15b3a115ab93fcedd8bfc9b3e91946c428e5ba40";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.19";
+};
+cleanthesis = {
+  revision = 51472;
+  stripPrefix = 0;
+  sha512.run = "0f12e2eb830014bd08e742ed6dbbc83f9b6d17141a4c0a6c00934ff1d831ab7a9e9dfca6931f5842284845435593449b11b8ed9cc29c7c607fe4df14c2b11d7a";
+  sha512.doc = "6042357f473bf4bce302b6f43d67fadcf0f449a3f1b1183a26d4b04375d60013eedc7389b002c1f0ed62ab1a8672735774d5aff0d7301e9a5e435080a4181c65";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.0";
+};
+clearsans = {
+  revision = 64400;
+  stripPrefix = 0;
+  sha512.run = "010e18c8a29e46acba07013b8ed1ec535373199cb2c62d895c906b24800e2055ab3aeadc0ef8bf761c1d47925c8741bdfec4d18b5cbcb680b07fc258c1313126";
+  sha512.doc = "a2be117afd912bab15e5ef69cfd54dd66385699677dc357233efaa73e2bd2cfaa9a29c0cf492f48ecf152a9640c95a4ebdee9366f2c27bcead571b5177345ed1";
+  hasRunfiles = true;
+  license = [ "asl20" "lppl13c" ];
+};
+clefval = {
+  revision = 55985;
+  stripPrefix = 0;
+  sha512.run = "1d92e279264970ca6d7612c3850fd46d4f3deb74df8a9149d6e63ac19eb665e5affeb1ab9bfea44d07825b80245b0a3b951d3ec08af0834c228a21270bc45437";
+  sha512.doc = "d8242b0dc52ad63167fe13a88c28fb4b088061f7bddbe3137a7b541dd1f15aacc75a1c7c1c9b6aee2db1ff14278edf3b83d8eea5cbd77e112f16f8af9e36f19a";
+  sha512.source = "abf25917b9a6aac0c3ef310bdddad1063ccbb6c59e844c792638927de403da00013e93db8bb1e9c4a052a65ee8dfb46743404efcc9c8cca6191b2703a6ab16a1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+cleveref = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "7e425fd19bd559a2a3f3091f6dd3d6711e6bb4ec01f6a3f8c1dccd60cb6518f3ffe563c1b68e3b379eab7be140f7ff5f3c68dabf3dc85d196aa2d41f81a67acd";
+  sha512.doc = "87760a9503b5ead92a1a8f26f9c0195487b5e7a1f97cb11519791f247cf87d35f044f68738d3563ac4a84d7f283d3907eaa816f2d4f8dc4f9cdc5114df639d99";
+  sha512.source = "aae3fc03f3ccefc9c58b1372a337afc9f0fc201d3db9938a01a1832711ce10e0f0b13e72da021c328f6bb1099dfafc8378663016ca6969ecef10dd5bf3683937";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.21.4";
+};
+cleveref-usedon = {
+  revision = 66915;
+  stripPrefix = 0;
+  sha512.run = "6004d6bb5fe8c93d2c48219c1c464ad26ee1ba4b31d15e0ca55b49df9218dc974e863f975e2d4f254c2e41197bb60c4722c126660919fe07d1f0e502f2bb13ea";
+  sha512.doc = "f8e2efa3de278d1ee600f844e0cbd7da73e105003b45f103fc0f1c3aed9df4dc622302cdfcbe77646322e29a0451856816ff9ecd908e1d882f7829f9aee5cf1d";
+  sha512.source = "acc43cbb720d9feb8b4535b60fe613583192b5c6907e00db495cc03432e1bfcbb99eaf99208213e1b29140766f16d2246f6232f3a3929e88d00ec581a39bec1a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.0";
+};
+clicks = {
+  revision = 64602;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+    "xkeyval"
+  ];
+  sha512.run = "7218b2bf0f28a0ed382e4884aa30b59c2d8bff76a3d7a09461e5e3ebf1f41648889005db3c79fe203a4d3753a65f76a48058582e25f57e61d972e8256657712e";
+  sha512.doc = "fc84edae6c263a889ea5b1d7a99b5fdf2c22bbb45c9c104e63d821a80b498d1932e654034f289a7470a15cb2ea6082eb8d8fedce24b21b9ccbd5e4304043d6b3";
+  sha512.source = "ff19c270587c08c28db6cad54e2a58ce23f6041b08b6d611b7ffe6fe2b6506c1a7ae33ded3fe3ec59cee3fcfc276e6a1dc3750291b4f7691255066805ca90158";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.4.1";
+};
+clipboard = {
+  revision = 47747;
+  stripPrefix = 0;
+  sha512.run = "19aed32c2dc229852133a44fe5ed692a0d3194d374cc77e2301314b3fff929b834fd4df82e811095049e64ba127180eddb77fcc4211aecd2db40e8124a38d55c";
+  sha512.doc = "50e7447b35c1d73c1d36bab165a8bb476764ffcc4ed7994e1bc63c6759baad0dd6c2c1f6a95334c7bf649dd13c8e79d17ec536120f1112d621e833b6f9f80578";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+clistmap = {
+  revision = 61811;
+  stripPrefix = 0;
+  sha512.run = "71da5b4136bd73945ec0e1d9fe429892960a9167b39febc0d53b7a628357db59240929ed6d8c31096c170cd0b2f5c60452f364d8903be40a6a4bf0b590069520";
+  sha512.doc = "8c0ca62ecf95989e1e4f90b6c606e421bd5f536ca9d7e3745384537b33b5745b221c6485e0fc5d5a52ddfa720e34f6260eb8bec0557d7e4171406ad4985b789f";
+  sha512.source = "b93a6e3bda06ce394c006964046d683576474d1ccc6b8cdde069c188cf8d146be43420c5d55a9d22bca554e87ea9309faaa73b5d0b8bb1b56981414b4b99e46a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+clock = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ba378fe241cd2e51b641f0edc4bdd1403477b392e0a22363bcf540b513c1c15b1c0e3ab37020aa77ec147ce59cc7ad6f09c86cadcc0a77892a1a798c36c411aa";
+  sha512.doc = "d06e263266ab91b48ae3238af6ce283c7f720c2113d95d10c7de6026b4557b0fcb22aaec44caba2f7ad743e578e9840da1b116fd3372558d545c424159d8f2e5";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+clojure-pamphlet = {
+  revision = 67201;
+  sha512.run = "bfdc173aa0a79905af238766f162f779296fe16e343a0fc4d41e8a47be2021eaff1cb30129db1238c725f633f3c96264ccc9a2cc0fdf0686e04622090d5a598d";
+  sha512.doc = "a8c782042d9c55d234ad5df84d73e0d4abedac2294073146bbb8dc0b01ea40910657d3a3e1bfb324437bc67426f69ccae6eb297b81282f32190e87bb2ba154a8";
+  hasManpages = true;
+  sha512.source = "8dd7cf59db96f9977f9242475c46a6635bf6cbc5c18bf1f44ee65cd6e308a5d0dafd2951b602fef102632ac2f6fdf707d306fb400b02e657c45a4eaf2a52384c";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.3";
+};
+clojure-pamphlet.binfiles = [
+  "pamphletangler"
+];
+cloze = {
+  revision = 55763;
+  stripPrefix = 0;
+  sha512.run = "f1c986699258bc9e7e27093a2d44f59d001ab13c3d9ba0717dc9bed0c53b00ce8ccf658c9cc3d7d457d18f45357a6d44da4d6710c1661ffcf299a8791822501b";
+  sha512.doc = "ca3d9e0a4eb7486f40e4a26d0b6a2aa5dbf7e3d28343b9069ee97b089e7906aa137d8e7f8c6d010fd2cf472836191b88b9450248bd99728d80159afc54a8d1e7";
+  sha512.source = "53d30866958183101890a4999a9b8f4b20b5bbca996d28ca4a22aaf81331f186facc695725917a9e80206545a3e0962b8c17b4e08b4d2db961878a273ba7c209";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+clrdblpg = {
+  revision = 47511;
+  stripPrefix = 0;
+  sha512.run = "bdd3de3ea16cb5d24879bcf2255bbe01612f8af70f663b9ac578a4ac98910119ea96b8a5b4a59d25c0406c1b33786997ee2940da0273b025455e334b48f17b7d";
+  sha512.doc = "53ba8c83224ee6573cd1549e7e425fd524b5caf65ab139b67e7de9b32bdd5c3c87f5af63c2c43696554fcc33c8bff4690373ad25582b23bf51134b9cb6301409";
+  sha512.source = "8663b5fa032e10cd77f4f526d30fd16302fd31c1e5ee268d815de3d4b9aee9fe6688e5c94ba50f5d0cb2bb11c03198401bb1a3bd03c431dece50dab65ae3d638";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+clrscode = {
+  revision = 51136;
+  stripPrefix = 0;
+  sha512.run = "c26ac99b2f097b3b9df8bcb3ae040da959c0bd238be75a50b3711cdf0b7b0024ef40749169c0fe0437aa8c845b3ee9c9ec4ab46fe31fe6b1e28019fcd4779076";
+  sha512.doc = "b74c858703577f79c89b4e95a0fef2012a756defda525c25f2945952b6637fba7ae4c30791a5d566267a16627bf7ce991c4edf726f7106b27b2df3c2b81eb765";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+clrscode3e = {
+  revision = 51137;
+  stripPrefix = 0;
+  sha512.run = "eb609d4204f9292b387fb8ecac13eaaad77e1d32870cd29f4996771acc5f8e82560e3fb9dcd2c8284888ed55d2b7bfbf931b50e01b0e4b8790c2ce5ce4445588";
+  sha512.doc = "0792d458ee46b44d37c31a5bbeaad2257ae1aca818ce33d0b1c8ae96b7e90ea6e06e9036ce61063f232c3829ec36bcef58f111b5df0b25d209e867ac53d322d1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+clrstrip = {
+  revision = 60363;
+  stripPrefix = 0;
+  sha512.run = "5a26232ede7efdd9ebb4ca89adaa2f0c507cb4eb883fc59662abca448a9bd09894cf52e850a0f57af101fd22ebf239ef82d4fb4a761b11448b846a82858fee96";
+  sha512.doc = "9d52efc5bec01766d81240bc4087d76b08b1a07c1b89c3a197291e7f7b9e1d4e10214ba7640b591cc82c67406c487c39b571ddcc89adbdf377a3e3fb4063b21a";
+  sha512.source = "db0be0ba5c5686846abc9eabfffcbe24c1b3f0e62554328c254126f7b0450ad0f066f7b3da20aabd83c80545e3400d0d52b639cc23b55a64e6b5735be79ea21f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+cluttex = {
+  revision = 68912;
+  sha512.run = "652ad061ea6dd183b7bb5e0a893f3d1cb1e48e17f93c65e2c9f82eb1261759c369498b2ba36f48acb2a29772707bbc36c2832be1518507970f06f0e527c1fb55";
+  sha512.doc = "5dec8c3c1ecebea760f25d5acdf6371ee67c40b38f64b24d2b47346caaa3a2a20d18578c37e14586fc16aa81a4f50761444f26206b01901913e684e413ecc0ed";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "gpl3Plus" ];
+  version = "0.6";
+};
+cluttex.binfiles = [
+  "cllualatex"
+  "cluttex"
+  "clxelatex"
+];
+cm = {
+  revision = 57963;
+  stripPrefix = 0;
+  sha512.run = "e65b2096ca183ca21d8ff987489223bc98750fcbaf4f9f9a9996f5153a76c5587d1ad77693234d02f80753b8b8cb86fd957514f82065bd7aab9eb64bad9003a3";
+  sha512.doc = "39ccdee82d86f01e11aaeb53844639b4f976677c0baef7675817fafe4263e8e44cfec144f6fce265c9c80d9a9373a2f46ac8a55b7f20923c680eaddd0222a045";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+cm-lgc = {
+  revision = 28250;
+  stripPrefix = 0;
+  sha512.run = "5fcf591d132314d8ce160e3070036f6fba56962ed40d8fee7b58b0e8219a8124bcf380b1be4e943209ba230f05cfcd374c96e3e799695a018356d12be3215760";
+  sha512.doc = "eda2082e865dec858a010b757a2d60e0be9526d2e5f2c276d1c5e8d386a71f4d7631d1af8dee009f9d61e0682904697bfdc89222863499c8e1aca2b11d0f3ed9";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.5";
+};
+cm-mf-extra-bold = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "1845d58827ff828d6b60b82e4eda94760cd3c86076982b861e53b4f996a0dfcc9a5926ce58de27891ca3ea115a752cc4abc56b06b112d43194aa8a27c61b86fd";
+  hasRunfiles = true;
+  license = [ "gpl1Only" "publicDomain" ];
+};
+cm-super = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "45638ebf4ef2ffb7c4b74669ea089a9f8d3ab4b98e555b3f9b2e9bd9732b48fdba61dc91188e2c8962b8bfa3caaab31c10d1ccd3e0aa9e26197b148e59576f8f";
+  sha512.doc = "5b524c55dbcfa1db87484d3437156ca9987fcca66e2c2e6d69e562c48ae708e51f089051524f324cbafb72a29e08f90e70c408d7fea7341e9ef0b5d53288b7d3";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+cm-unicode = {
+  revision = 58661;
+  stripPrefix = 0;
+  sha512.run = "5d6cce2e396ffa0dc887e839f4ef57865db9eda3dcdf6a62737008b53837c40ee1498d97ab06eab8f0802e745787fa5c107c0738a8dedd4e65f6996aee555c48";
+  sha512.doc = "f7633d0dbd08cc1e82f6804f51c8b117dee909a81d8496826abe3e9b7107577f2818323dbd789555f8cd3f62d8f1ffac440fde64a6497135f879fb58a779cf64";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "0.7.0";
+};
+cmap = {
+  revision = 57640;
+  stripPrefix = 0;
+  sha512.run = "4857f7ab9719a2b6828582599c98715c61731288899494aed96026dd6ad8bac92028586cb6b008ebaf3fb516d918861f79f544ecd64bca1e6a6183bd8bc398c1";
+  sha512.doc = "5a8b1bd0c47bd5b4a3df3d0270c15c0d3c8691c96f2e5ee272ab97362463c2cfc7d1e2a9a19f5aa7ab8b145e9ae63390b1ded80b48dec52f8bf62118dabd6cd3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0j";
+};
+cmarrows = {
+  revision = 24378;
+  stripPrefix = 0;
+  sha512.run = "5f56f9ab77b2f250aff664b0007aa17eccad96d6f674ae7417f610b62d84123fc85bc80cf83948e0df2a7bfb721300e149fc764b03638e5005cc4832f2fa5544";
+  sha512.doc = "0bc738eb48fc34b7cb35240622925d43e5ff5fce21b1c560158b2ceee2790a284b33816fd192a5b0161544ee5add98f4e3ebe7dd0165273d53e5ea2de7d994ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9";
+};
+cmathbb = {
+  revision = 56414;
+  stripPrefix = 0;
+  sha512.run = "8e720662ac4d00557b143c883e9d410da8593cdfa056b5320e0ff348c2c0e37f9c0045341c28e583aa544790e576d9b7db8c80f93cffd8c4da699e46e35f73e0";
+  sha512.doc = "f1b0b1067260287c66347e52111883834d575e5857a3aede8e14930252a284b5c0bd6bd7247c9ee36462d57a63d351110582cb66ca894d9430d476445f37da44";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+cmbright = {
+  revision = 21107;
+  stripPrefix = 0;
+  sha512.run = "3251c7ce9f139a9e553e3cf343339367e98e6982850ca3d2a2087efe5e26f4828597e6f5c1ac85567e81897a09239f5be717a6a85d04b164442c9c5c53ea4fac";
+  sha512.doc = "7add06e9502ab0bf912e811afbb66caf7ac83d60b6e2575dbc75709438ce6252239a43106632633e2d90b2badd46bb800533c496c811de7316cd1766456058c9";
+  sha512.source = "5824d33c26e94cf0ec8d2b69d0c80c715a68ef98ab5e2025c84fc20dcda2be4b89125dfe69400f2f27d46b773c5a3918af533cc2c25fad01694776bf5a546879";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "8.1";
+};
+cmcyr = {
+  revision = 68681;
+  stripPrefix = 0;
+  sha512.run = "c42006e8d596b231c3ef7f3f7123292a9563f6bb0881a7807625bd05e49a67ffd37d6e0965e6da36cdff816cdbf780e54b79b999ee5d0a18fad315f2724cc839";
+  sha512.doc = "153db17097c5a1e6bbad3e13e7bbfaf13bd8380633f62e9323d2c0514a2649b001c997bad9e7495a88f5cf9c1289f2987d147e22bdca6100e7adc1d88561d443";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+cmdstring = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b05a8f8d326a6546b7c865e4cbc1afdfb0fa50993f4ad5e3b3a1e1781be9ed7590e1dd17b18d58f8a96c83aa2fe6218328b2df3e193e2dc7923d051374ebc9ba";
+  sha512.doc = "c102fcd054597d84d98a4f74656f36a9e1aa53623bebaa4ef39f341ddb889062a0e0c705074a4909bf50ae3cdc9a0e0da06fc6b12fde10bcaf5391fe6c792818";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+cmdtrack = {
+  revision = 28910;
+  stripPrefix = 0;
+  sha512.run = "22de643d5b45f3898a1aeee44ae88594b545af34bb5bdac937753c13d31071872a78935dc2c73fb22c0e591d164f618549a2bd67a00550f3fb70753a951ad4cc";
+  sha512.doc = "2a69b054e1de07b31426e653af45125824bd037cf5a24fcde1f0fe1b6aa3eb925688959aa84094ecc65954b92030e1b78545db18f08a39990c4412d487ce2284";
+  sha512.source = "c6b02dd165bfb3ab40ee05aa3ac9df74faff8167de021495fb08e0d173b83f75453915a634d81d260d4739166b2e5a519b8cecfc7807d25f396c27c5b65f58f3";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+cmexb = {
+  revision = 54074;
+  stripPrefix = 0;
+  sha512.run = "584aa7d96c86be809a1da92955c92c9e73946fc236e9991925431bae4041001f6b4d7029b13004ada0435ae291a90fce8990e527188e1f35a3be922a39faefed";
+  sha512.doc = "e6f362bfa79f6c32537245af645f8b6a343ef5a9204b9cd50cfab9337e9617554bfc3fc813fe4c65d2664fc617d460f15a4ea099961699bbee82381df0856760";
+  hasRunfiles = true;
+};
+cmextra = {
+  revision = 57866;
+  stripPrefix = 0;
+  sha512.run = "fa6bd1e79ca96500080405e01a7524a6fd13358335d34b3e2983a7f33f7b7a50ff4106ee5f2f483f3e040a3a7135b4133d727c6a7cb0c90f63be40e5410e3b48";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+cmll = {
+  revision = 17964;
+  stripPrefix = 0;
+  sha512.run = "8470819c5a37b3d8d1d44aae53b62ff020087e1125f381e51ef4a639fd6b2394c3d6f15a3a86fe70e61a4545213059bde6fc3e9d06cd054e46218e90e64c0543";
+  sha512.doc = "71a7cd27a2744e8e3ab09b8fbbc514eb2e38d9740349139212f0861c67948fa1a98728acb1d22a4397fe95d8efd5c6fcb87a1843a1f9dbd0d161e2e835e1ac11";
+  sha512.source = "de17c8e0627408358ae3de41a5bf557d99abf76bb480ab28ef9df424d8b7ae1f73ca2e30f4eeb26ac9eb2dd36ddafa143cd49ce6618b2ca36fcfc6e22e83d217";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+cmpica = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2aac63861c3c1099054286647917f4ab594fd535de9d513f790cb70e8a38278ffda0be29656e1da57206c7bac21928cf5179bd1cc22f50e0f10d1ca8083f4b86";
+  sha512.doc = "7c6251f1c5090328c93f6ec224bbb6d05433b5471c6cb8b4d7f3b9ff05f9be8ad49587d24a34702fb23b9f1803ca3df3a638b16335944a9b2dc35422ca8bf9fe";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+cmpj = {
+  revision = 58506;
+  stripPrefix = 0;
+  sha512.run = "11eafc9af424689d7f4a225eea5f5d5f6123f79265f805506f4e98155d97e557fd96a6ce5dba6b1d598817ec87f561189cf48267f08c7cd7823781eaced17e55";
+  sha512.doc = "b1113cf0dbc02b69e3ed72d70168103b742d85c2115e78b1f0feece71f342293fae109f112be948e5e106dde226ae8d4d53706c3846a641b8d6e8417e8444408";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.03";
+};
+cmsd = {
+  revision = 18787;
+  stripPrefix = 0;
+  sha512.run = "97e1830bdbab04e321433f43e14d65fd2e9820d46a6fb3616f2cea38a54208e80e1238eba7b5cfd20137f6e3a3da3a1586a7caa3e0a495ed91235a05120d444c";
+  sha512.doc = "f9994a39f6e14f40398abacfe0f4c1a9cbd71d7b55c29787105fdbf8212953fb761f1696cf35196d446b9905a967d2908d7e41e7742e5cd7dd538ac0e7d3f5d0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+cmsrb = {
+  revision = 54706;
+  stripPrefix = 0;
+  sha512.run = "2fef47e94ba1a5ad0774667ac84e29040a3715c413990585aa09c866297beb61c7da533685bc1e102c8edb30d7bf6bddf8fee5486dd6d4d6ea9ebe51d2424196";
+  sha512.doc = "9200b4da942f308cc60dc53b2fba9cefb7448e95d89f0c34d03604e5f7a9119aea4e762d70cfa35fd12f555f8c4ae1ab4c0b12abb04742e17b6e680bd80cc9d3";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "4.0";
+};
+cmtiup = {
+  revision = 39728;
+  stripPrefix = 0;
+  sha512.run = "9412576d07ec490fda4dd01445f28e4b966d2664a81e5f44a574019df1eb4de4189b8d06edf7a1a3b57e8ade129b57c0147a96fa9b77337d9a906134e33f2067";
+  sha512.doc = "aae6105fc9e828715193bc4d251210f23ce6f4c4d703c79c244ff765a377f90055188f8af83e705da062cea8db8bf6b89beecc488cce32d7903fb7fb8c4bcad9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+cmupint = {
+  revision = 54735;
+  stripPrefix = 0;
+  sha512.run = "ce08962145a80b7b6748145a7385cc78e361295d85ea96f24397aad3025b7eaa2e962d4d30380ca1a8d22da7175a3135abacef78a76d9d4615f03aed049a4b10";
+  sha512.doc = "80cab8f9387e74db3b3650b8e7b055ecf1e094f75f0e43c4540b32658e43e392c82f3fa8ab6a6c08495ef6f9f2773501a7f282acaf7d7d640f0bd891cb8b1f08";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+cnbwp = {
+  revision = 32550;
+  stripPrefix = 0;
+  sha512.run = "31c83774160e64dadc95afebe830ea1aa7c929e48f611cf5c9742cb66e12a3dd459928c85ed1378460247241fd4f007145b002ae7aabb88e773779124510c86f";
+  sha512.doc = "d41f72a3c5482b1ec50f1bacbaf8bed5f926c5d522ab5e3574d71d68b2d7c63e20fa1df65962f94e53b70f75aa7dee5337d064c212990c0f3351c30b05b567ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+cnltx = {
+  revision = 55265;
+  stripPrefix = 0;
+  sha512.run = "fa858296b0d71265f4812289d7e50e1650deea64fe8feb86c1d9a3ce49719ed4d265e457fc1e6c9382c9344b9798ef2de322419ab38b86dfaa2f20ca87052ea4";
+  sha512.doc = "b1481a3f56079e4655b94ac7855019492b051de1405016830fd196442f1c3fb8213d00540ec5fa42dccf743eefd9ff1d0a581626d2b0c64b7462e43708ccb502";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.15";
+};
+cns = {
+  revision = 45677;
+  stripPrefix = 0;
+  sha512.run = "0b3645da07e0fc9482cfeddd93f949e18dc12b6aa02e5a6c45669f3d5f7f25d5fa7ff4992f40b9b71894e21b5b1855999ba8e1b130be27e8b7001444ed30db0f";
+  sha512.doc = "264c64f2ae29bff96b428500af07a81402434d9422792a36ee0da74e9821f161cf8281d38317787c0db78109d2eeaaff4e62730855ae1f1e1f250f4173740d35";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "4.2.0";
+};
+cntformats = {
+  revision = 34668;
+  stripPrefix = 0;
+  sha512.run = "f829d6452faa20a514bfe43a8b002d4d728b57e0d6c44de7ba8aebaa96d9a40fc0ac26ca6ef637ab9efd3f133c70cd4d5b9c81dd382ed8adcd5abd1b2fb5d6cd";
+  sha512.doc = "4d6c9b8ad41dea1e14eec71570afdeb28fb834191587ba964642628674526a5ac82d6ceb972d5d89e0faeb3fb46da26361dea45f8757523f58765dfbdb773a3d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+cntperchap = {
+  revision = 37572;
+  stripPrefix = 0;
+  sha512.run = "ade4e6bbb00d619d52cb65549cb50f4ff9275d20a9e871ddee99064fb2ae0e02ba7d403bd6c7d658fdc6d542d7a32244ce8ff7fbe023b4fe292697584aed966a";
+  sha512.doc = "354ea40ce2fe4e543016970fe81745c151a53c182800e8b861006d7e1c6fff84628a0baa4bfad29a0b81c8d0eede9f31145e7d3f380953921a48f31c5b8d0a8a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+cochineal = {
+  revision = 68904;
+  stripPrefix = 0;
+  sha512.run = "43b896ccce0842cdc7ceb207932c1f112334b27fa11c8431c6d2561ab0b17ac6f841ef3d9ecdb27e8a7c3976c350edfa115bf927c205a4cb493f66b35eaea357";
+  sha512.doc = "16e0783a4a77d96c96d26bb7d04723dcd5fe882da39a9214b4c84bbcd5581aeba331c0c7994a56d6199385ab54ed5cd47bd9dfaab92dcc44f940c0c2d9afdf4f";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.081";
+};
+codeanatomy = {
+  revision = 65648;
+  stripPrefix = 0;
+  sha512.run = "59f2c1b91875a69434595d435eb905265c9e114bebb8a94edbe07f597518424add7916fab565caef11302e6c31537c54e5885f3320ec0e515cd0a207c8012e00";
+  sha512.doc = "4595189bdcee5788de92793b54e8a3dab0215057acbf7d9d575af6e9fb67a92ec1985d61d415bd44bea2d8ae7084de0676e121c96be2262c93eee78116f50a86";
+  sha512.source = "27c57ca05dd82f9810e63a0265658174dc3a9dfe21033c70bea65db5543648dc51052a8b72bd5f2d89e7ad9806d1cf1b0bf1e9c9ca543589afef2dc07184114d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4-Beta";
+};
+codebox = {
+  revision = 61771;
+  stripPrefix = 0;
+  sha512.run = "04f63b435f360fdfa81bb7afeef38117a8a4b81b70562e21020470f49f33abc33038d6c55665a5ae4573ff61c19ed9120e824eb319ea97523fe1fa8e82ba9424";
+  sha512.doc = "165fffcfbff35064a3c55a0fe1b095f3a45a5c01d1c8a8704cd151cbb20c440592edecc3be71900b1a7a5e7af28d6a8d6c4a3b9fd09f850c7da71362e2377ddd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.4";
+};
+codedescribe = {
+  revision = 69343;
+  stripPrefix = 0;
+  sha512.run = "9d1176a6934468658a99d00f862ff2554fda33ae7e458409c3dab3df42afcf093f3d28263f8f7b431024df1b67f969ac808806b222ba256d27793a4b1e7a2865";
+  sha512.doc = "2540adbdb84154d3fa96a74e716b3b7051f4687852f873b67a0a0bbe6bf9e932b3bb19eee07b0e4cf7299e3f1d06983b4faeec77182db0e8676f53b2aeaa2776";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "1.3";
+};
+codedoc = {
+  revision = 17630;
+  stripPrefix = 0;
+  sha512.run = "8dc006776f2a3f0f28aeed0450e2d7b714402de1939a92d1e7f1e0174a8de7e9f7099e7ae9a5de34df03613ff16800bde17f7cc90fa82798f30c775c10c655ff";
+  sha512.doc = "fa23f45c539ec134cff114d7252a4d96585168729dc33d0865f4976f94620a8d3c02fa21572953161977d893c7f311b0d15a431f74b8526d1de0680dfdad7341";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+codehigh = {
+  revision = 65787;
+  stripPrefix = 0;
+  sha512.run = "ca33d6cb84e716357cb18d8448f8e047b4bc049cca8e77aa80525a209c66ae4b93dcd453f91672cf15fc5305ce1d62768e9851edd6fb07214153100cdacfc884";
+  sha512.doc = "f689cede2e83dee785e3b83094f5897a8d7af4e39e3c33779acceeb7ed0c1226d094aca64c222f4b1488916e7ad78ed1a6b8800070910d4e0daf6e6ccd24bc5e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2023A";
+};
+codepage = {
+  revision = 51502;
+  stripPrefix = 0;
+  sha512.run = "2531186744ce4915b8d903e0ea49e1d3e0a6be5ab2db7bc2a5cbc70e675c2dd00104a677c08b7b7d12eca56dfc4b283c49ee599fff6d3460c6238f414ba3cb76";
+  sha512.doc = "b49ffff68cc599835acf436de3117c7f9511b362d821bdd8c18f0af930c5b717dc0bcd00477e6f0f367229b9d1f6dd150a8166dd74bbfbc2cfcb77ccf28cd8d5";
+  sha512.source = "2c12bf42c1aa818d5718f2bbbb07460364ad40f7bc4cf0676cb064a03751e1bd88be16fffaae097f5ed9c0793f60ffb93374b43f7b90acf8ad3cbc8f5d7b8b70";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+codesection = {
+  revision = 34481;
+  stripPrefix = 0;
+  sha512.run = "95318ae4933d0cb43226c714c8ff931aaa8e06cfb2c44c3929db59ae8336882c588e26268445b62f8da32145a962bae0030daff3d5cfa22007919fb7b13fd69d";
+  sha512.doc = "881e62381793f548d0c291141944d81e19cf4340f2c1f63916857f5702756e18d107337c340568d62de48fe2190cf4c74a8d6604f8d4843c47ceb7c59608c0b0";
+  sha512.source = "e2ca6d6cb96977d494bfa9818d90aef30a915dd4c284fb7e555e79c09db022819a6e1f825ab895108594b90b488e70780f268022a896feef7dcc1ab590fabce9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+codicefiscaleitaliano = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "7c93841ceadbb7bbfc9846d281fdbd84b7f284117344e1c4fd984e746186403e9be3e2048cfca53f6690a1e20b7471224b8d30ed1358959053111c22d3f15191";
+  sha512.doc = "7b0c13252796be7d584d3e5dad65711229cf916ce7c8e89e423805183629f161b3d4e4f47d6c9488ab32ff8b52723b0fbc4252f2ca99e965f4d7c4409881b67d";
+  sha512.source = "8602ad1eee729a5d21d760da54f31d67746bc336c9e18d43b9cf3a5443afaf8099d27a908cc1cd9cc028e94b2173e97179cf293d5739244834817f0bc50bbaa3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+coelacanth = {
+  revision = 64558;
+  stripPrefix = 0;
+  sha512.run = "279faeb81ba3169bc72848c691ab42729c670bed5c41a2add3e338bec0c109ff15ffcb492e19834d0ab2293040a659e3994f374b5a6028d505823e372eab7f48";
+  sha512.doc = "ae548dfea88ab4315674caca7e0531bf52512b6ac8198853e0c70661e91061e3fdc15c82be7d6f1ee5c92a7cf340e65b0ce99665da82507b9d9f9b119722c2b7";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.005";
+};
+coffeestains = {
+  revision = 59703;
+  stripPrefix = 0;
+  sha512.run = "7a8213810b8bb30c0b863ce996aab92a9031dd9961513d25822904c6e71dd2fa1b79f050f1840e8d88e8f8e8e87c7736369f3fa7a6873cbaa57fb8dca7c71d47";
+  sha512.doc = "fab8a2aeae8dd1c6f0f501d894f90d5b6f7785bf8b3fcf86837f4bc41da8002427c69094676870ea7dfe9186b3bb92433f5c66f0cedd08f57954487db8bb162b";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.5.1";
+};
+collargs = {
+  revision = 69284;
+  stripPrefix = 0;
+  sha512.run = "1807cca3a1e73b42ec1403c272777d5e31c1a6ecc3efe9b61697d6fee7b2b1deb76b9b909846b55a297587e950b42754f68be4cc5ed729c54e310fcd248d2972";
+  sha512.doc = "395931952725fbebb85445d8f465bc57a74d98f2d70b61f67b97f9a3542598bdfb1ddd7203a3bcae87094aded580325c98f77bfcdfa78147b971a9aff18a8cd0";
+  sha512.source = "4ec8b2ed23cae6473c8a5993efa79e426522ba710378598c408e4b33343b1be29c7aee01c2ad1483cad2a91fcc8775844fa598f740c42438d9c830210d31e0ef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+collcell = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "ecc414d09b916580b87aeba0192b55e698782ee9fca088ff3d3ab6f247ff2fa33caa0cf6913870f8f3219806e2ac88674c6f7692ebdc027675907355c38c6eea";
+  sha512.doc = "a516c5c4030957305e413e252cc59f33652b42f2d0dc0aa0fbe297f33a68da4d534f0b07684d39276e8b6811b53b775db45b774e7ea82fc9b0c7382910ab6442";
+  sha512.source = "1cd565603f9c6e4b267d67b501842a95916072deac09b0330336d8d2b97cce1a7571f9a8f0725958a920f0d786d1a3a6aa8682b232e276b9fe8e4208a08c34cd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+collectbox = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "59316a336010c03bbe288ecaf20953666d084500165befe465ac87210795f2ef68693e5fe155b45a461a690d918d83aad247dcd52eb40cd0bf80f6c68fcd8071";
+  sha512.doc = "db2d2066072a3619913df6fbdfb19ec3afc50495d51ccf1339312bcff1bf7841902f412932205cb4ae2f94acd33b9fe2b250d67ae02c22d6efa25c251a182c00";
+  sha512.source = "b54a9a9215639eba3c0c052676122a3c25efacda695b34c56317d809e69e6859bb52c7fb8845e08ece9d1a2ffa399f3800737b56eca7e6c4a2f7ced14b10a2ce";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4c";
+};
+collection-basic = {
+  revision = 59159;
+  stripPrefix = 0;
+  deps = [
+    "amsfonts"
+    "bibtex"
+    "cm"
+    "colorprofiles"
+    "dvipdfmx"
+    "dvips"
+    "ec"
+    "enctex"
+    "etex"
+    "etex-pkg"
+    "glyphlist"
+    "graphics-def"
+    "hyph-utf8"
+    "hyphen-base"
+    "hyphenex"
+    "ifplatform"
+    "iftex"
+    "knuth-lib"
+    "knuth-local"
+    "kpathsea"
+    "lua-alt-getopt"
+    "luahbtex"
+    "luatex"
+    "makeindex"
+    "metafont"
+    "mflogo"
+    "mfware"
+    "modes"
+    "pdftex"
+    "plain"
+    "tex"
+    "tex-ini-files"
+    "texlive-common"
+    "texlive-en"
+    "texlive-msg-translations"
+    "texlive-scripts"
+    "texlive.infra"
+    "tlshell"
+    "unicode-data"
+    "xdvi"
+  ];
+  sha512.run = "4241bc3a3ef21502faa9a2e0b16295126c357fc15813a625306552b40f9da804164abccce642f4ec1e677092f81d61381958b87fcf515120a12f9b7a19055370";
+};
+collection-bibtexextra = {
+  revision = 67386;
+  stripPrefix = 0;
+  deps = [
+    "aaai-named"
+    "aichej"
+    "ajl"
+    "amsrefs"
+    "annotate"
+    "apacite"
+    "apalike-ejor"
+    "apalike2"
+    "archaeologie"
+    "authordate"
+    "beebe"
+    "besjournals"
+    "bestpapers"
+    "bib2gls"
+    "bibarts"
+    "bibcop"
+    "biber"
+    "biber-ms"
+    "bibexport"
+    "bibhtml"
+    "biblatex"
+    "biblatex-abnt"
+    "biblatex-ajc2020unofficial"
+    "biblatex-anonymous"
+    "biblatex-apa"
+    "biblatex-apa6"
+    "biblatex-archaeology"
+    "biblatex-arthistory-bonn"
+    "biblatex-bath"
+    "biblatex-bookinarticle"
+    "biblatex-bookinother"
+    "biblatex-bwl"
+    "biblatex-caspervector"
+    "biblatex-chem"
+    "biblatex-chicago"
+    "biblatex-claves"
+    "biblatex-cv"
+    "biblatex-dw"
+    "biblatex-enc"
+    "biblatex-ext"
+    "biblatex-fiwi"
+    "biblatex-gb7714-2015"
+    "biblatex-german-legal"
+    "biblatex-gost"
+    "biblatex-historian"
+    "biblatex-ieee"
+    "biblatex-ijsra"
+    "biblatex-iso690"
+    "biblatex-jura2"
+    "biblatex-juradiss"
+    "biblatex-license"
+    "biblatex-lncs"
+    "biblatex-lni"
+    "biblatex-luh-ipw"
+    "biblatex-manuscripts-philology"
+    "biblatex-mla"
+    "biblatex-morenames"
+    "biblatex-ms"
+    "biblatex-multiple-dm"
+    "biblatex-musuos"
+    "biblatex-nature"
+    "biblatex-nejm"
+    "biblatex-nottsclassic"
+    "biblatex-opcit-booktitle"
+    "biblatex-oxref"
+    "biblatex-philosophy"
+    "biblatex-phys"
+    "biblatex-publist"
+    "biblatex-readbbl"
+    "biblatex-realauthor"
+    "biblatex-sbl"
+    "biblatex-science"
+    "biblatex-shortfields"
+    "biblatex-socialscienceshuberlin"
+    "biblatex-software"
+    "biblatex-source-division"
+    "biblatex-spbasic"
+    "biblatex-subseries"
+    "biblatex-swiss-legal"
+    "biblatex-trad"
+    "biblatex-true-citepages-omit"
+    "biblatex-unified"
+    "biblatex-vancouver"
+    "biblatex2bibitem"
+    "biblist"
+    "bibtexperllibs"
+    "bibtools"
+    "bibtopic"
+    "bibtopicprefix"
+    "bibunits"
+    "biolett-bst"
+    "bookdb"
+    "breakcites"
+    "cell"
+    "chbibref"
+    "chembst"
+    "chicago"
+    "chicago-annote"
+    "chicagoa"
+    "chscite"
+    "citation-style-language"
+    "citeall"
+    "citeref"
+    "collection-latex"
+    "collref"
+    "compactbib"
+    "crossrefware"
+    "custom-bib"
+    "din1505"
+    "dk-bib"
+    "doipubmed"
+    "ecobiblatex"
+    "econ-bst"
+    "economic"
+    "fbs"
+    "figbib"
+    "footbib"
+    "francais-bst"
+    "gbt7714"
+    "geschichtsfrkl"
+    "harvard"
+    "harvmac"
+    "hep-bibliography"
+    "historische-zeitschrift"
+    "icite"
+    "ietfbibs"
+    "ijqc"
+    "inlinebib"
+    "iopart-num"
+    "is-bst"
+    "jbact"
+    "jmb"
+    "jneurosci"
+    "jurabib"
+    "ksfh_nat"
+    "listbib"
+    "logreq"
+    "ltb2bib"
+    "luabibentry"
+    "margbib"
+    "multibib"
+    "multibibliography"
+    "munich"
+    "nar"
+    "newcastle-bst"
+    "nmbib"
+    "notes2bib"
+    "notex-bst"
+    "oscola"
+    "perception"
+    "plainyr"
+    "pnas2009"
+    "rsc"
+    "showtags"
+    "sort-by-letters"
+    "splitbib"
+    "turabian-formatting"
+    "uni-wtal-ger"
+    "uni-wtal-lin"
+    "urlbst"
+    "usebib"
+    "vak"
+    "windycity"
+    "xcite"
+    "zootaxa-bst"
+  ];
+  sha512.run = "652554e2038407c987a3aaf73f206b228728ec7848c737de8c6267abb0b20054846fcc74400fbf4a802c8efa1dff2d4174e9d4725b41a7816e25c9c8d1cfd848";
+};
+collection-binextra = {
+  revision = 69128;
+  stripPrefix = 0;
+  deps = [
+    "a2ping"
+    "adhocfilelist"
+    "arara"
+    "asymptote"
+    "bibtex8"
+    "bibtexu"
+    "bundledoc"
+    "checklistings"
+    "chklref"
+    "chktex"
+    "clojure-pamphlet"
+    "cluttex"
+    "collection-basic"
+    "ctan-o-mat"
+    "ctan_chk"
+    "ctanbib"
+    "ctanify"
+    "ctanupload"
+    "ctie"
+    "cweb"
+    "de-macro"
+    "detex"
+    "digestif"
+    "dtl"
+    "dtxgen"
+    "dvi2tty"
+    "dviasm"
+    "dvicopy"
+    "dvidvi"
+    "dviinfox"
+    "dviljk"
+    "dviout-util"
+    "dvipng"
+    "dvipos"
+    "dvisvgm"
+    "easydtx"
+    "findhyph"
+    "fragmaster"
+    "git-latexdiff"
+    "gsftopk"
+    "hook-pre-commit-pkg"
+    "installfont"
+    "ketcindy"
+    "lacheck"
+    "latex-git-log"
+    "latex-papersize"
+    "latex2man"
+    "latex2nemeth"
+    "latexdiff"
+    "latexfileversion"
+    "latexindent"
+    "latexmk"
+    "latexpand"
+    "light-latex-make"
+    "listings-ext"
+    "ltxfileinfo"
+    "ltximg"
+    "make4ht"
+    "match_parens"
+    "mflua"
+    "mkjobtexmf"
+    "optexcount"
+    "patgen"
+    "pdfbook2"
+    "pdfcrop"
+    "pdfjam"
+    "pdflatexpicscale"
+    "pdftex-quiet"
+    "pdftosrc"
+    "pdfxup"
+    "pfarrei"
+    "pkfix"
+    "pkfix-helper"
+    "purifyeps"
+    "pythontex"
+    "runtexshebang"
+    "seetexk"
+    "spix"
+    "srcredact"
+    "sty2dtx"
+    "synctex"
+    "tex4ebook"
+    "texaccents"
+    "texblend"
+    "texcount"
+    "texdef"
+    "texdiff"
+    "texdirflatten"
+    "texdoc"
+    "texdoctk"
+    "texfot"
+    "texlive-scripts-extra"
+    "texliveonfly"
+    "texloganalyser"
+    "texlogfilter"
+    "texlogsieve"
+    "texosquery"
+    "texplate"
+    "texware"
+    "tie"
+    "tlcockpit"
+    "tpic2pdftex"
+    "typeoutfileinfo"
+    "upmendex"
+    "web"
+    "xindex"
+    "xindy"
+    "xpdfopen"
+  ];
+  sha512.run = "e397e1e30540ecdbefb7017348dde411b1287fb5c3a395d963747e74bd6e67fa5abd1f5137ea57e5f2eedcff1e89ca8fd1bcdc9aeafc2a969821953343e13620";
+};
+collection-context = {
+  revision = 69108;
+  stripPrefix = 0;
+  deps = [
+    "collection-basic"
+    "context"
+    "context-calendar-examples"
+    "context-collating-marks"
+    "context-cyrillicnumbers"
+    "context-filter"
+    "context-gnuplot"
+    "context-handlecsv"
+    "context-legacy"
+    "context-letter"
+    "context-mathsets"
+    "context-notes-zh-cn"
+    "context-pocketdiary"
+    "context-simpleslides"
+    "context-squares"
+    "context-sudoku"
+    "context-texlive"
+    "context-transliterator"
+    "context-typescripts"
+    "context-vim"
+    "context-visualcounter"
+    "jmn"
+    "luajittex"
+  ];
+  sha512.run = "a8426893d3b9cfbddfffa383dc7898f7abe48271695dc6835abb2cda70ca1998d65eda2acd716a13ef4239c8ca8528c92b2c679510d6785ef38bf554b81a6cd6";
+};
+collection-fontsextra = {
+  revision = 69278;
+  stripPrefix = 0;
+  deps = [
+    "aboensis"
+    "academicons"
+    "accanthis"
+    "adforn"
+    "adfsymbols"
+    "aesupp"
+    "alegreya"
+    "alfaslabone"
+    "algolrevived"
+    "allrunes"
+    "almendra"
+    "almfixed"
+    "andika"
+    "anonymouspro"
+    "antiqua"
+    "antt"
+    "archaic"
+    "archivo"
+    "arev"
+    "arimo"
+    "arsenal"
+    "arvo"
+    "asana-math"
+    "asapsym"
+    "ascii-font"
+    "aspectratio"
+    "astro"
+    "atkinson"
+    "augie"
+    "auncial-new"
+    "aurical"
+    "b1encoding"
+    "barcodes"
+    "baskervald"
+    "baskervaldx"
+    "baskervillef"
+    "bbding"
+    "bbm"
+    "bbm-macros"
+    "bbold"
+    "bbold-type1"
+    "bboldx"
+    "belleek"
+    "bera"
+    "berenisadf"
+    "beuron"
+    "bguq"
+    "bitter"
+    "blacklettert1"
+    "boisik"
+    "bookhands"
+    "boondox"
+    "braille"
+    "brushscr"
+    "cabin"
+    "caladea"
+    "calligra"
+    "calligra-type1"
+    "cantarell"
+    "carlito"
+    "carolmin-ps"
+    "cascadia-code"
+    "ccicons"
+    "cfr-initials"
+    "cfr-lm"
+    "charissil"
+    "cherokee"
+    "chivo"
+    "cinzel"
+    "clara"
+    "clearsans"
+    "cm-lgc"
+    "cm-mf-extra-bold"
+    "cm-unicode"
+    "cmathbb"
+    "cmbright"
+    "cmexb"
+    "cmll"
+    "cmpica"
+    "cmsrb"
+    "cmtiup"
+    "cmupint"
+    "cochineal"
+    "coelacanth"
+    "collection-basic"
+    "comfortaa"
+    "comicneue"
+    "concmath-fonts"
+    "concmath-otf"
+    "cookingsymbols"
+    "cooperhewitt"
+    "cormorantgaramond"
+    "countriesofeurope"
+    "courier-scaled"
+    "courierten"
+    "crimson"
+    "crimsonpro"
+    "cryst"
+    "cuprum"
+    "cyklop"
+    "dancers"
+    "dantelogo"
+    "dejavu"
+    "dejavu-otf"
+    "dice"
+    "dictsym"
+    "dingbat"
+    "domitian"
+    "doublestroke"
+    "doulossil"
+    "dozenal"
+    "drm"
+    "droid"
+    "dsserif"
+    "duerer"
+    "duerer-latex"
+    "dutchcal"
+    "ean"
+    "ebgaramond"
+    "ebgaramond-maths"
+    "ecc"
+    "eco"
+    "eczar"
+    "eiad"
+    "eiad-ltx"
+    "ektype-tanka"
+    "electrum"
+    "elvish"
+    "epigrafica"
+    "epsdice"
+    "erewhon"
+    "erewhon-math"
+    "esrelation"
+    "esstix"
+    "esvect"
+    "etbb"
+    "euler-math"
+    "eulervm"
+    "euxm"
+    "fbb"
+    "fdsymbol"
+    "fetamont"
+    "feyn"
+    "fge"
+    "fira"
+    "firamath"
+    "firamath-otf"
+    "foekfont"
+    "fonetika"
+    "fontawesome"
+    "fontawesome5"
+    "fontmfizz"
+    "fonts-churchslavonic"
+    "forum"
+    "fourier"
+    "fouriernc"
+    "frcursive"
+    "frederika2016"
+    "frimurer"
+    "garamond-libre"
+    "garamond-math"
+    "gelasio"
+    "genealogy"
+    "gentium-tug"
+    "gfsartemisia"
+    "gfsbodoni"
+    "gfscomplutum"
+    "gfsdidot"
+    "gfsdidotclassic"
+    "gfsneohellenic"
+    "gfsneohellenicmath"
+    "gfssolomos"
+    "gillcm"
+    "gillius"
+    "gnu-freefont"
+    "gofonts"
+    "gothic"
+    "greenpoint"
+    "grotesq"
+    "gudea"
+    "hacm"
+    "hamnosys"
+    "hands"
+    "hep-font"
+    "hep-math-font"
+    "heros-otf"
+    "heuristica"
+    "hfbright"
+    "hfoldsty"
+    "hindmadurai"
+    "ibarra"
+    "ifsym"
+    "imfellenglish"
+    "inconsolata"
+    "inconsolata-nerd-font"
+    "initials"
+    "inriafonts"
+    "inter"
+    "ipaex-type1"
+    "iwona"
+    "jablantile"
+    "jamtimes"
+    "josefin"
+    "junicode"
+    "junicodevf"
+    "kixfont"
+    "kpfonts"
+    "kpfonts-otf"
+    "kurier"
+    "lato"
+    "lexend"
+    "lfb"
+    "libertine"
+    "libertinegc"
+    "libertinus"
+    "libertinus-fonts"
+    "libertinus-otf"
+    "libertinus-type1"
+    "libertinust1math"
+    "librebaskerville"
+    "librebodoni"
+    "librecaslon"
+    "librefranklin"
+    "libris"
+    "lineara"
+    "linguisticspro"
+    "lobster2"
+    "logix"
+    "lxfonts"
+    "ly1"
+    "magra"
+    "marcellus"
+    "mathabx"
+    "mathabx-type1"
+    "mathdesign"
+    "mdputu"
+    "mdsymbol"
+    "merriweather"
+    "metsymb"
+    "miama"
+    "mintspirit"
+    "missaali"
+    "mlmodern"
+    "mnsymbol"
+    "montserrat"
+    "mpfonts"
+    "mweights"
+    "newcomputermodern"
+    "newpx"
+    "newtx"
+    "newtxsf"
+    "newtxtt"
+    "niceframe-type1"
+    "nimbus15"
+    "nkarta"
+    "noto"
+    "noto-emoji"
+    "notomath"
+    "nunito"
+    "obnov"
+    "ocherokee"
+    "ocr-b"
+    "ocr-b-outline"
+    "ogham"
+    "oinuit"
+    "old-arrows"
+    "oldlatin"
+    "oldstandard"
+    "opensans"
+    "orkhun"
+    "oswald"
+    "overlock"
+    "pacioli"
+    "pagella-otf"
+    "paratype"
+    "phaistos"
+    "phonetic"
+    "pigpen"
+    "playfair"
+    "plex"
+    "plex-otf"
+    "plimsoll"
+    "poiretone"
+    "poltawski"
+    "prodint"
+    "punk"
+    "punk-latex"
+    "punknova"
+    "pxtxalfa"
+    "qualitype"
+    "quattrocento"
+    "raleway"
+    "recycle"
+    "rit-fonts"
+    "roboto"
+    "romande"
+    "rosario"
+    "rsfso"
+    "sansmathaccent"
+    "sansmathfonts"
+    "sauter"
+    "sauterfonts"
+    "schola-otf"
+    "scholax"
+    "schulschriften"
+    "semaphor"
+    "shobhika"
+    "simpleicons"
+    "skull"
+    "sourcecodepro"
+    "sourcesanspro"
+    "sourceserifpro"
+    "spectral"
+    "srbtiks"
+    "starfont"
+    "staves"
+    "step"
+    "stepgreek"
+    "stickstoo"
+    "stix"
+    "stix2-otf"
+    "stix2-type1"
+    "superiors"
+    "svrsymbols"
+    "symbats3"
+    "tapir"
+    "tempora"
+    "tengwarscript"
+    "termes-otf"
+    "tfrupee"
+    "theanodidot"
+    "theanomodern"
+    "theanooldstyle"
+    "tinos"
+    "tpslifonts"
+    "trajan"
+    "twemoji-colr"
+    "txfontsb"
+    "txuprcal"
+    "typicons"
+    "umtypewriter"
+    "universa"
+    "universalis"
+    "uppunctlm"
+    "urwchancal"
+    "venturisadf"
+    "wsuipa"
+    "xcharter"
+    "xcharter-math"
+    "xits"
+    "yfonts"
+    "yfonts-otf"
+    "yfonts-t1"
+    "yinit-otf"
+    "zlmtt"
+  ];
+  sha512.run = "1a80dbc68b0a3a248fdc699013f7a23796ac9c6e2ae7e3135878f9d5fd6ee17ec1c809ac906804f1fbb3bc43451ee969d48247d9ab9125b681dbb29209892df2";
+};
+collection-fontsrecommended = {
+  revision = 54074;
+  stripPrefix = 0;
+  deps = [
+    "avantgar"
+    "bookman"
+    "charter"
+    "cm-super"
+    "cmextra"
+    "collection-basic"
+    "courier"
+    "euro"
+    "euro-ce"
+    "eurosym"
+    "fpl"
+    "helvetic"
+    "lm"
+    "lm-math"
+    "manfnt-font"
+    "marvosym"
+    "mathpazo"
+    "mflogo-font"
+    "ncntrsbk"
+    "palatino"
+    "pxfonts"
+    "rsfs"
+    "symbol"
+    "tex-gyre"
+    "tex-gyre-math"
+    "times"
+    "tipa"
+    "txfonts"
+    "utopia"
+    "wasy"
+    "wasy-type1"
+    "wasysym"
+    "zapfchan"
+    "zapfding"
+  ];
+  sha512.run = "eaa6e54780a0813a88102258ee3bd7a4640787be0b89eff4ba2c9cc19298bf3e2799ffab4e03e49f20131d07fbac9f601a7223fc1b47257dd0feeb04797c56a8";
+};
+collection-fontutils = {
+  revision = 61207;
+  stripPrefix = 0;
+  deps = [
+    "accfonts"
+    "afm2pl"
+    "albatross"
+    "collection-basic"
+    "dosepsbin"
+    "dvipsconfig"
+    "epstopdf"
+    "fontinst"
+    "fontools"
+    "fontware"
+    "lcdftypetools"
+    "luafindfont"
+    "metatype1"
+    "mf2pt1"
+    "ps2eps"
+    "ps2pk"
+    "psutils"
+    "t1utils"
+    "ttfutils"
+  ];
+  sha512.run = "430c95b7e104cb837b7424ebb17ab7ee1aefd99d70aaceefff8a1924fa949329aebe0d5a28b939fabf28d3c5dfc2dcb466147e1396514d5dcf4f64af231db8a7";
+};
+collection-formatsextra = {
+  revision = 62226;
+  stripPrefix = 0;
+  deps = [
+    "aleph"
+    "antomega"
+    "collection-basic"
+    "collection-latex"
+    "edmac"
+    "eplain"
+    "hitex"
+    "jadetex"
+    "lambda"
+    "lollipop"
+    "mltex"
+    "mxedruli"
+    "omega"
+    "omegaware"
+    "otibet"
+    "passivetex"
+    "psizzl"
+    "startex"
+    "texsis"
+    "xmltex"
+    "xmltexconfig"
+  ];
+  sha512.run = "6c7f0a1829789edea6a42d45f13f482abc0aa1ecc66b0ba4b70197efff349df75c9a89a98f21537cf6f3751b608fc3ee10ac842613deaf2aa21005374a23bab2";
+};
+collection-games = {
+  revision = 69159;
+  stripPrefix = 0;
+  deps = [
+    "bartel-chess-fonts"
+    "chess"
+    "chess-problem-diagrams"
+    "chessboard"
+    "chessfss"
+    "chinesechess"
+    "collection-latex"
+    "crossword"
+    "crosswrd"
+    "customdice"
+    "egameps"
+    "gamebook"
+    "gamebooklib"
+    "go"
+    "hanoi"
+    "havannah"
+    "hexboard"
+    "hexgame"
+    "hmtrump"
+    "horoscop"
+    "jeuxcartes"
+    "jigsaw"
+    "labyrinth"
+    "logicpuzzle"
+    "mahjong"
+    "maze"
+    "musikui"
+    "nimsticks"
+    "onedown"
+    "othello"
+    "othelloboard"
+    "pas-crosswords"
+    "playcards"
+    "psgo"
+    "quizztex"
+    "realtranspose"
+    "reverxii"
+    "rouequestions"
+    "rubik"
+    "schwalbe-chess"
+    "scrabble"
+    "sgame"
+    "skak"
+    "skaknew"
+    "soup"
+    "sudoku"
+    "sudokubundle"
+    "tangramtikz"
+    "thematicpuzzle"
+    "trivialpursuit"
+    "wargame"
+    "wordle"
+    "xq"
+    "xskak"
+  ];
+  sha512.run = "29cd464cc85a8632164c26468b441ddc97133e4e5ca291d9939e7c0c22c60c7a02df91d1e3cdf925b803976bd7f089d8c7e2b63cd32fb88f8760f546be921160";
+};
+collection-humanities = {
+  revision = 68465;
+  stripPrefix = 0;
+  deps = [
+    "adtrees"
+    "bibleref"
+    "bibleref-lds"
+    "bibleref-mouth"
+    "bibleref-parse"
+    "collection-latex"
+    "covington"
+    "diadia"
+    "dramatist"
+    "dvgloss"
+    "ecltree"
+    "edfnotes"
+    "eledform"
+    "eledmac"
+    "expex"
+    "expex-glossonly"
+    "gb4e"
+    "gmverse"
+    "jura"
+    "juraabbrev"
+    "juramisc"
+    "jurarsp"
+    "langnames"
+    "ledmac"
+    "lexikon"
+    "lexref"
+    "ling-macros"
+    "linguex"
+    "liturg"
+    "metrix"
+    "nnext"
+    "opbible"
+    "parallel"
+    "parrun"
+    "phonrule"
+    "plari"
+    "play"
+    "poemscol"
+    "poetry"
+    "poetrytex"
+    "qobitree"
+    "qtree"
+    "reledmac"
+    "rrgtrees"
+    "rtklage"
+    "screenplay"
+    "screenplay-pkg"
+    "sides"
+    "stage"
+    "textglos"
+    "thalie"
+    "theatre"
+    "tree-dvips"
+    "verse"
+    "xyling"
+  ];
+  sha512.run = "33b19b29b31671c148900d207f1f9947be502ab215e901afa9c5fe5264bafd004717dc8f6438d1a4b40abfa63c0b94725738b8c8bc117e293676f3db1e25ba6a";
+};
+collection-langarabic = {
+  revision = 69111;
+  stripPrefix = 0;
+  deps = [
+    "alkalami"
+    "alpha-persian"
+    "amiri"
+    "arabi"
+    "arabi-add"
+    "arabic-book"
+    "arabluatex"
+    "arabtex"
+    "bidi"
+    "bidihl"
+    "collection-basic"
+    "dad"
+    "ghab"
+    "hvarabic"
+    "hyphen-arabic"
+    "hyphen-farsi"
+    "imsproc"
+    "iran-bibtex"
+    "khatalmaqala"
+    "kurdishlipsum"
+    "lshort-persian"
+    "luabidi"
+    "na-box"
+    "parsimatn"
+    "parsinevis"
+    "persian-bib"
+    "quran"
+    "sexam"
+    "simurgh"
+    "texnegar"
+    "tram"
+    "xepersian"
+    "xepersian-hm"
+    "xindy-persian"
+  ];
+  sha512.run = "8cef2ee028669abcc0e964ba01f6287f52c4e2857fa7547036ea00bfa47d83d38c9c126705ba7989cfbc027586315284139ec6131c5ea7701136f1bfd7cdc2cf";
+};
+collection-langchinese = {
+  revision = 63995;
+  stripPrefix = 0;
+  deps = [
+    "arphic"
+    "arphic-ttf"
+    "asymptote-by-example-zh-cn"
+    "asymptote-faq-zh-cn"
+    "asymptote-manual-zh-cn"
+    "cns"
+    "collection-langcjk"
+    "ctex"
+    "ctex-faq"
+    "exam-zh"
+    "fandol"
+    "fduthesis"
+    "hanzibox"
+    "hyphen-chinese"
+    "impatient-cn"
+    "install-latex-guide-zh-cn"
+    "latex-notes-zh-cn"
+    "lshort-chinese"
+    "nanicolle"
+    "njurepo"
+    "pgfornament-han"
+    "qyxf-book"
+    "texlive-zh-cn"
+    "texproposal"
+    "tlmgr-intro-zh-cn"
+    "upzhkinsoku"
+    "xpinyin"
+    "xtuthesis"
+    "zhlineskip"
+    "zhlipsum"
+    "zhmetrics"
+    "zhmetrics-uptex"
+    "zhnumber"
+    "zhspacing"
+  ];
+  sha512.run = "d10096b2d83dc0378361184a64c347918e75dd51f48d962893371534c375dd8880e8febb1aaf1207e5ce04e59860f629f10c99bbf6304239e1147a5072194137";
+};
+collection-langcjk = {
+  revision = 65824;
+  stripPrefix = 0;
+  deps = [
+    "adobemapping"
+    "c90"
+    "cjk"
+    "cjk-gs-integrate"
+    "cjkpunct"
+    "cjkutils"
+    "collection-basic"
+    "dnp"
+    "evangelion-jfm"
+    "fixjfm"
+    "garuda-c90"
+    "jfmutil"
+    "norasi-c90"
+    "pxtatescale"
+    "xcjk2uni"
+    "xecjk"
+    "zitie"
+    "zxjafont"
+  ];
+  sha512.run = "bee71f9df25db567c0930659e5037d1b6144d5c157e0870e9144f82c6dddbd9df156e580583c65f1bf5f54a70c9fcab108bd117e74af0e28d72a33f6b78207d1";
+};
+collection-langcyrillic = {
+  revision = 54074;
+  stripPrefix = 0;
+  deps = [
+    "babel-belarusian"
+    "babel-bulgarian"
+    "babel-russian"
+    "babel-serbian"
+    "babel-serbianc"
+    "babel-ukrainian"
+    "churchslavonic"
+    "cmcyr"
+    "collection-basic"
+    "collection-latex"
+    "cyrillic"
+    "cyrillic-bin"
+    "cyrplain"
+    "disser"
+    "eskd"
+    "eskdx"
+    "gost"
+    "hyphen-belarusian"
+    "hyphen-bulgarian"
+    "hyphen-churchslavonic"
+    "hyphen-mongolian"
+    "hyphen-russian"
+    "hyphen-serbian"
+    "hyphen-ukrainian"
+    "lcyw"
+    "lh"
+    "lhcyr"
+    "lshort-bulgarian"
+    "lshort-mongol"
+    "lshort-russian"
+    "lshort-ukr"
+    "mongolian-babel"
+    "montex"
+    "mpman-ru"
+    "numnameru"
+    "pst-eucl-translation-bg"
+    "ruhyphen"
+    "russ"
+    "serbian-apostrophe"
+    "serbian-date-lat"
+    "serbian-def-cyr"
+    "serbian-lig"
+    "t2"
+    "texlive-ru"
+    "texlive-sr"
+    "ukrhyph"
+    "xecyrmongolian"
+  ];
+  sha512.run = "43ba5d0f21162fbdb6fd0e9dc7c990fa845918704020da8ca5c6770139370be55f4b707f98708c28b472f9500ee25ea734bdd96c5541a22e66b69c03ae777ad0";
+};
+collection-langczechslovak = {
+  revision = 54074;
+  stripPrefix = 0;
+  deps = [
+    "babel-czech"
+    "babel-slovak"
+    "cnbwp"
+    "collection-basic"
+    "collection-latex"
+    "cs"
+    "csbulletin"
+    "cslatex"
+    "csplain"
+    "cstex"
+    "hyphen-czech"
+    "hyphen-slovak"
+    "lshort-czech"
+    "lshort-slovak"
+    "texlive-cz"
+    "vlna"
+  ];
+  sha512.run = "719c321173ca12660891080dae509080934f72d13a9417b2c40a22add963c7c5a1ee95d3b306f0d6c26b0db97d69979c27fbb15d1690849aa03b06d4b0193a67";
+};
+collection-langenglish = {
+  revision = 68790;
+  stripPrefix = 0;
+  deps = [
+    "amiweb2c-guide"
+    "amscls-doc"
+    "amslatex-primer"
+    "around-the-bend"
+    "ascii-chart"
+    "biblatex-cheatsheet"
+    "collection-basic"
+    "components"
+    "comprehensive"
+    "dickimaw"
+    "docsurvey"
+    "drawing-with-metapost"
+    "dtxtut"
+    "first-latex-doc"
+    "fontinstallationguide"
+    "forest-quickstart"
+    "gentle"
+    "guide-to-latex"
+    "happy4th"
+    "hyphen-english"
+    "impatient"
+    "intro-scientific"
+    "knuth-errata"
+    "knuth-hint"
+    "knuth-pdf"
+    "l2tabu-english"
+    "latex-brochure"
+    "latex-course"
+    "latex-doc-ptr"
+    "latex-for-undergraduates"
+    "latex-graphics-companion"
+    "latex-refsheet"
+    "latex-veryshortguide"
+    "latex-web-companion"
+    "latex2e-help-texinfo"
+    "latex4wp"
+    "latexcheat"
+    "latexcourse-rug"
+    "latexfileinfo-pkgs"
+    "lshort-english"
+    "macros2e"
+    "math-into-latex-4"
+    "maths-symbols"
+    "memdesign"
+    "memoirchapterstyles"
+    "metafont-beginners"
+    "metapost-examples"
+    "patgen2-tutorial"
+    "pictexsum"
+    "plain-doc"
+    "quran-en"
+    "short-math-guide"
+    "simplified-latex"
+    "svg-inkscape"
+    "tamethebeast"
+    "tds"
+    "tex-font-errors-cheatsheet"
+    "tex-nutshell"
+    "tex-overview"
+    "tex-refs"
+    "tex-vpat"
+    "texbytopic"
+    "texonly"
+    "titlepages"
+    "tlc2"
+    "tlc3-examples"
+    "tlmgrbasics"
+    "undergradmath"
+    "visualfaq"
+    "webguide"
+    "xetexref"
+    "yet-another-guide-latex2e"
+  ];
+  sha512.run = "49f20b883df99755070b68d3eacb29c297e76a05b3151d632c26fcf2864d996e4873bbab27429db915f93995923d5b7e680a3c901b28cac888ffa021bc629b74";
+};
+collection-langeuropean = {
+  revision = 66432;
+  stripPrefix = 0;
+  deps = [
+    "armtex"
+    "babel-albanian"
+    "babel-bosnian"
+    "babel-breton"
+    "babel-croatian"
+    "babel-danish"
+    "babel-dutch"
+    "babel-estonian"
+    "babel-finnish"
+    "babel-friulan"
+    "babel-hungarian"
+    "babel-icelandic"
+    "babel-irish"
+    "babel-kurmanji"
+    "babel-latin"
+    "babel-latvian"
+    "babel-lithuanian"
+    "babel-macedonian"
+    "babel-norsk"
+    "babel-occitan"
+    "babel-piedmontese"
+    "babel-romanian"
+    "babel-romansh"
+    "babel-samin"
+    "babel-scottish"
+    "babel-slovenian"
+    "babel-swedish"
+    "babel-turkish"
+    "babel-welsh"
+    "collection-basic"
+    "finbib"
+    "gloss-occitan"
+    "hrlatex"
+    "huaz"
+    "hulipsum"
+    "hyphen-croatian"
+    "hyphen-danish"
+    "hyphen-dutch"
+    "hyphen-estonian"
+    "hyphen-finnish"
+    "hyphen-friulan"
+    "hyphen-hungarian"
+    "hyphen-icelandic"
+    "hyphen-irish"
+    "hyphen-kurmanji"
+    "hyphen-latin"
+    "hyphen-latvian"
+    "hyphen-lithuanian"
+    "hyphen-macedonian"
+    "hyphen-norwegian"
+    "hyphen-occitan"
+    "hyphen-piedmontese"
+    "hyphen-romanian"
+    "hyphen-romansh"
+    "hyphen-slovenian"
+    "hyphen-swedish"
+    "hyphen-turkish"
+    "hyphen-uppersorbian"
+    "hyphen-welsh"
+    "kaytannollista-latexia"
+    "lithuanian"
+    "lshort-dutch"
+    "lshort-estonian"
+    "lshort-finnish"
+    "lshort-slovenian"
+    "lshort-turkish"
+    "nevelok"
+    "rojud"
+    "swebib"
+    "turkmen"
+  ];
+  sha512.run = "5fa87f174fc372c21b80ebe6b097525218da63892bc8445a29c24f2bfb015b0f04c100467f85e6c9e16a27ad26e31f00832d7712ebea7dec8631a730a95a9759";
+};
+collection-langfrench = {
+  revision = 67951;
+  stripPrefix = 0;
+  deps = [
+    "aeguill"
+    "annee-scolaire"
+    "apprendre-a-programmer-en-tex"
+    "apprends-latex"
+    "babel-basque"
+    "babel-french"
+    "basque-book"
+    "basque-date"
+    "bib-fr"
+    "bibleref-french"
+    "booktabs-fr"
+    "cahierprof"
+    "collection-basic"
+    "couleurs-fr"
+    "droit-fr"
+    "e-french"
+    "epslatex-fr"
+    "expose-expl3-dunkerque-2019"
+    "facture"
+    "formation-latex-ul"
+    "frenchmath"
+    "frletter"
+    "frpseudocode"
+    "hyphen-basque"
+    "hyphen-french"
+    "impatient-fr"
+    "impnattypo"
+    "l2tabu-french"
+    "latex2e-help-texinfo-fr"
+    "letgut"
+    "lshort-french"
+    "mafr"
+    "matapli"
+    "panneauxroute"
+    "profcollege"
+    "proflabo"
+    "proflycee"
+    "profsio"
+    "tabvar"
+    "tdsfrmath"
+    "texlive-fr"
+    "translation-array-fr"
+    "translation-dcolumn-fr"
+    "translation-natbib-fr"
+    "translation-tabbing-fr"
+    "variations"
+    "visualfaq-fr"
+    "visualtikz"
+  ];
+  sha512.run = "83be4aa190b32580ab6334a00785123be5678a95f84589dea2ccc2ce77a6328bf8954f28e683a9614b43a062901a28b3f6b060bd968876094aeab5b1f9aee816";
+};
+collection-langgerman = {
+  revision = 68711;
+  stripPrefix = 0;
+  deps = [
+    "apalike-german"
+    "autotype"
+    "babel-german"
+    "bibleref-german"
+    "booktabs-de"
+    "collection-basic"
+    "csquotes-de"
+    "dehyph"
+    "dehyph-exptl"
+    "dhua"
+    "dtk-bibliography"
+    "etdipa"
+    "etoolbox-de"
+    "fifinddo-info"
+    "german"
+    "germbib"
+    "germkorr"
+    "hausarbeit-jura"
+    "hyphen-german"
+    "koma-script-examples"
+    "l2picfaq"
+    "l2tabu"
+    "latexcheat-de"
+    "lshort-german"
+    "lualatex-doc-de"
+    "microtype-de"
+    "milog"
+    "quran-de"
+    "r_und_s"
+    "schulmathematik"
+    "templates-fenn"
+    "templates-sommer"
+    "termcal-de"
+    "texlive-de"
+    "tipa-de"
+    "translation-arsclassica-de"
+    "translation-biblatex-de"
+    "translation-chemsym-de"
+    "translation-ecv-de"
+    "translation-enumitem-de"
+    "translation-europecv-de"
+    "translation-filecontents-de"
+    "translation-moreverb-de"
+    "udesoftec"
+    "uhrzeit"
+    "umlaute"
+    "voss-mathcol"
+  ];
+  sha512.run = "3b52fac1e2520302998c3b11bc2f77b34d5bd4cc09f4fa4b9238ece66b0e36e676643f7476846d1b25eb64d31b0dbe87a33ad44669be101f61cf223e70ecb047";
+};
+collection-langgreek = {
+  revision = 65038;
+  stripPrefix = 0;
+  deps = [
+    "babel-greek"
+    "begingreek"
+    "betababel"
+    "cbfonts"
+    "cbfonts-fd"
+    "collection-basic"
+    "gfsbaskerville"
+    "gfsporson"
+    "greek-fontenc"
+    "greek-inputenc"
+    "greekdates"
+    "greektex"
+    "greektonoi"
+    "hyphen-ancientgreek"
+    "hyphen-greek"
+    "ibycus-babel"
+    "ibygrk"
+    "kerkis"
+    "levy"
+    "lgreek"
+    "lgrmath"
+    "mkgrkindex"
+    "talos"
+    "teubner"
+    "xgreek"
+    "yannisgr"
+  ];
+  sha512.run = "800991b6bb8ac7772ad030ad665b812abd9b294498f7b7678be721ccc87d54607e267bd189a0591ebead2c6ecb64047e5b5581c374f067c3b1575b6d442cc6c9";
+};
+collection-langitalian = {
+  revision = 55129;
+  stripPrefix = 0;
+  deps = [
+    "amsldoc-it"
+    "amsmath-it"
+    "amsthdoc-it"
+    "antanilipsum"
+    "babel-italian"
+    "codicefiscaleitaliano"
+    "collection-basic"
+    "fancyhdr-it"
+    "fixltxhyph"
+    "frontespizio"
+    "hyphen-italian"
+    "itnumpar"
+    "l2tabu-italian"
+    "latex4wp-it"
+    "layaureo"
+    "lshort-italian"
+    "psfrag-italian"
+    "texlive-it"
+    "verifica"
+  ];
+  sha512.run = "6ec5e8a62e3c1ed8e3c23542381091d38c77af507af7088a55e44f1e34b85d01ec19342db4541d9d6cd712c0929d54a3fc663e1d8fde3c53fef0d6fc43be4994";
+};
+collection-langjapanese = {
+  revision = 64603;
+  stripPrefix = 0;
+  deps = [
+    "ascmac"
+    "asternote"
+    "babel-japanese"
+    "bxbase"
+    "bxcjkjatype"
+    "bxghost"
+    "bxjaholiday"
+    "bxjalipsum"
+    "bxjaprnind"
+    "bxjatoucs"
+    "bxjscls"
+    "bxorigcapt"
+    "bxwareki"
+    "collection-langcjk"
+    "convbkmk"
+    "endnotesj"
+    "gckanbun"
+    "gentombow"
+    "haranoaji"
+    "haranoaji-extra"
+    "ieejtran"
+    "ifptex"
+    "ifxptex"
+    "ipaex"
+    "japanese-mathformulas"
+    "japanese-otf"
+    "jieeetran"
+    "jlreq"
+    "jlreq-deluxe"
+    "jpneduenumerate"
+    "jpnedumathsymbols"
+    "jsclasses"
+    "kanbun"
+    "lshort-japanese"
+    "luatexja"
+    "mendex-doc"
+    "morisawa"
+    "pbibtex-base"
+    "pbibtex-manual"
+    "platex"
+    "platex-tools"
+    "platexcheat"
+    "plautopatch"
+    "ptex"
+    "ptex-base"
+    "ptex-fontmaps"
+    "ptex-fonts"
+    "ptex-manual"
+    "ptex2pdf"
+    "pxbase"
+    "pxchfon"
+    "pxcjkcat"
+    "pxjahyper"
+    "pxjodel"
+    "pxrubrica"
+    "pxufont"
+    "texlive-ja"
+    "uplatex"
+    "uptex"
+    "uptex-base"
+    "uptex-fonts"
+    "wadalab"
+    "zxjafbfont"
+    "zxjatype"
+  ];
+  sha512.run = "d9f73ff10afe2c91f9f6ad0e92ddcf8425ed7f51c7f08d291451775bcfcf3421d8d2afd78c7dbdceef995ac5a4262df89afce2b35e6c2dd064e8a310e1025f67";
+};
+collection-langkorean = {
+  revision = 54074;
+  stripPrefix = 0;
+  deps = [
+    "baekmuk"
+    "cjk-ko"
+    "collection-langcjk"
+    "kotex-oblivoir"
+    "kotex-plain"
+    "kotex-utf"
+    "kotex-utils"
+    "lshort-korean"
+    "nanumtype1"
+    "pmhanguljamo"
+    "uhc"
+    "unfonts-core"
+    "unfonts-extra"
+  ];
+  sha512.run = "2d93df728d34137c8f9a884aa2871a2980e806672006f2c5f0c5f79412d5789c6f94958363cfc9a78b5a97a7d76bbb6cb157b2cb2a8a283f7afdfd838fa24883";
+};
+collection-langother = {
+  revision = 68719;
+  stripPrefix = 0;
+  deps = [
+    "aalok"
+    "akshar"
+    "amsldoc-vn"
+    "aramaic-serto"
+    "babel-azerbaijani"
+    "babel-esperanto"
+    "babel-georgian"
+    "babel-hebrew"
+    "babel-indonesian"
+    "babel-interlingua"
+    "babel-malay"
+    "babel-sorbian"
+    "babel-thai"
+    "babel-vietnamese"
+    "bangla"
+    "bangtex"
+    "bengali"
+    "burmese"
+    "chhaya"
+    "cjhebrew"
+    "collection-basic"
+    "ctib"
+    "culmus"
+    "ebong"
+    "ethiop"
+    "ethiop-t1"
+    "fc"
+    "fonts-tlwg"
+    "hebrew-fonts"
+    "hindawi-latex-template"
+    "hyphen-afrikaans"
+    "hyphen-armenian"
+    "hyphen-coptic"
+    "hyphen-esperanto"
+    "hyphen-ethiopic"
+    "hyphen-georgian"
+    "hyphen-indic"
+    "hyphen-indonesian"
+    "hyphen-interlingua"
+    "hyphen-sanskrit"
+    "hyphen-thai"
+    "hyphen-turkmen"
+    "latex-mr"
+    "latexbangla"
+    "latino-sine-flexione"
+    "lshort-thai"
+    "lshort-vietnamese"
+    "marathi"
+    "ntheorem-vn"
+    "padauk"
+    "quran-bn"
+    "quran-id"
+    "quran-ur"
+    "sanskrit"
+    "sanskrit-t1"
+    "thaienum"
+    "thaispec"
+    "unicode-alphabets"
+    "velthuis"
+    "vntex"
+    "wnri"
+    "wnri-latex"
+    "xetex-devanagari"
+  ];
+  sha512.run = "312be65445c4b862e50fcf4bb8d4413b233eadee8a9ca14ff3cb4eb37549314f37a5d00d22a4b3b2cd461b3b0473a7426a5e7f33ffbaf6dfc0687f1af754cae1";
+};
+collection-langpolish = {
+  revision = 54074;
+  stripPrefix = 0;
+  deps = [
+    "babel-polish"
+    "bredzenie"
+    "cc-pl"
+    "collection-basic"
+    "collection-latex"
+    "gustlib"
+    "gustprog"
+    "hyphen-polish"
+    "lshort-polish"
+    "mex"
+    "mwcls"
+    "pl"
+    "polski"
+    "przechlewski-book"
+    "qpxqtx"
+    "tap"
+    "tex-virtual-academy-pl"
+    "texlive-pl"
+    "utf8mex"
+  ];
+  sha512.run = "fc0d08f70aeb83869109290e6d1585d513097dcd4e17791752ecd3d26ac202838afb5931f78ceaeeaf72c63b18fe9183edd650c075d03188f24cb2caded178de";
+};
+collection-langportuguese = {
+  revision = 67125;
+  stripPrefix = 0;
+  deps = [
+    "babel-portuges"
+    "beamer-tut-pt"
+    "collection-basic"
+    "cursolatex"
+    "feupphdteses"
+    "hyphen-portuguese"
+    "latex-via-exemplos"
+    "latexcheat-ptbr"
+    "lshort-portuguese"
+    "numberpt"
+    "ordinalpt"
+    "ptlatexcommands"
+    "xypic-tut-pt"
+  ];
+  sha512.run = "554f7d7e4828e1122cf3bc6b24c67661046ce2ae646975054f6903f8c2dfd3e63131ada963cd3b5a1ca3128539f039b4d275b9c8caadde1dbe9118d583d47585";
+};
+collection-langspanish = {
+  revision = 67307;
+  stripPrefix = 0;
+  deps = [
+    "antique-spanish-units"
+    "babel-catalan"
+    "babel-galician"
+    "babel-spanish"
+    "collection-basic"
+    "es-tex-faq"
+    "hyphen-catalan"
+    "hyphen-galician"
+    "hyphen-spanish"
+    "l2tabu-spanish"
+    "latex2e-help-texinfo-spanish"
+    "latexcheat-esmx"
+    "lshort-spanish"
+    "texlive-es"
+  ];
+  sha512.run = "1f3c1cc4d1e28871085092314a58671a2acab47da0a758c0bdff569b0a80697ac3c32e9991a8f77268f86c02e51420e4d999a9eef72a2a7353a3efbc633e25a9";
+};
+collection-latex = {
+  revision = 69131;
+  stripPrefix = 0;
+  deps = [
+    "ae"
+    "amscls"
+    "amsmath"
+    "atbegshi"
+    "atveryend"
+    "auxhook"
+    "babel"
+    "babel-english"
+    "babelbib"
+    "bigintcalc"
+    "bitset"
+    "bookmark"
+    "carlisle"
+    "collection-basic"
+    "colortbl"
+    "epstopdf-pkg"
+    "etexcmds"
+    "fancyhdr"
+    "firstaid"
+    "fix2col"
+    "geometry"
+    "gettitlestring"
+    "graphics"
+    "graphics-cfg"
+    "grfext"
+    "hopatch"
+    "hycolor"
+    "hyperref"
+    "intcalc"
+    "kvdefinekeys"
+    "kvoptions"
+    "kvsetkeys"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-bin"
+    "latex-fonts"
+    "latex-lab"
+    "latexconfig"
+    "letltxmacro"
+    "ltxcmds"
+    "ltxmisc"
+    "mfnfss"
+    "mptopdf"
+    "natbib"
+    "oberdiek"
+    "pagesel"
+    "pdfescape"
+    "pdftexcmds"
+    "pslatex"
+    "psnfss"
+    "pspicture"
+    "refcount"
+    "rerunfilecheck"
+    "stringenc"
+    "tools"
+    "uniquecounter"
+    "url"
+  ];
+  sha512.run = "889eae40b82f31c7c4b3a17740399c763dabec7986fcb39261b252afff69a03a16e660b114e358cd72e3fafa14a158849cf03aa2ad4d73a5bee4ca9abc4c24af";
+};
+collection-latexextra = {
+  revision = 69389;
+  stripPrefix = 0;
+  deps = [
+    "2up"
+    "a0poster"
+    "a4wide"
+    "a5comb"
+    "abraces"
+    "abspos"
+    "abstract"
+    "accessibility"
+    "accsupp"
+    "achemso"
+    "acro"
+    "acronym"
+    "acroterm"
+    "actuarialangle"
+    "actuarialsymbol"
+    "addfont"
+    "addlines"
+    "adjmulticol"
+    "adjustbox"
+    "adrconv"
+    "advdate"
+    "affilauthor"
+    "akktex"
+    "akletter"
+    "alchemist"
+    "alertmessage"
+    "alnumsec"
+    "alphalph"
+    "alterqcm"
+    "altfont"
+    "altsubsup"
+    "amsaddr"
+    "animate"
+    "anonchap"
+    "answers"
+    "anyfontsize"
+    "appendix"
+    "appendixnumberbeamer"
+    "apptools"
+    "arabicfront"
+    "arcs"
+    "argumentation"
+    "arraycols"
+    "arrayjobx"
+    "arraysort"
+    "arydshln"
+    "asciilist"
+    "askinclude"
+    "assignment"
+    "assoccnt"
+    "association-matrix"
+    "atenddvi"
+    "atendofenv"
+    "attachfile"
+    "aurl"
+    "authoraftertitle"
+    "authorarchive"
+    "authorindex"
+    "autofancyhdr"
+    "autonum"
+    "autopdf"
+    "autopuncitems"
+    "avremu"
+    "axessibility"
+    "background"
+    "bankstatement"
+    "bashful"
+    "basicarith"
+    "bchart"
+    "beamer-rl"
+    "beamer2thesis"
+    "beamerappendixnote"
+    "beameraudience"
+    "beamerauxtheme"
+    "beamercolorthemeowl"
+    "beamerdarkthemes"
+    "beamerposter"
+    "beamersubframe"
+    "beamertheme-arguelles"
+    "beamertheme-cuerna"
+    "beamertheme-detlevcm"
+    "beamertheme-epyt"
+    "beamertheme-focus"
+    "beamertheme-light"
+    "beamertheme-metropolis"
+    "beamertheme-npbt"
+    "beamertheme-phnompenh"
+    "beamertheme-pure-minimalistic"
+    "beamertheme-rainbow"
+    "beamertheme-saintpetersburg"
+    "beamertheme-simpledarkblue"
+    "beamertheme-simpleplus"
+    "beamertheme-tcolorbox"
+    "beamertheme-trigon"
+    "beamertheme-upenn-bc"
+    "beamerthemeamurmaple"
+    "beamerthemejltree"
+    "beamerthemelalic"
+    "beamerthemenirma"
+    "beamerthemenord"
+    "bearwear"
+    "beaulivre"
+    "beautybook"
+    "beton"
+    "bewerbung"
+    "bez123"
+    "bhcexam"
+    "bibletext"
+    "bigfoot"
+    "bigints"
+    "bilingualpages"
+    "biochemistry-colors"
+    "bithesis"
+    "bizcard"
+    "blindtext"
+    "blkarray"
+    "block"
+    "blowup"
+    "bnumexpr"
+    "boites"
+    "bold-extra"
+    "book-of-common-prayer"
+    "bookcover"
+    "bookest"
+    "booklet"
+    "bookshelf"
+    "boolexpr"
+    "bophook"
+    "boxedminipage"
+    "boxhandler"
+    "bracketkey"
+    "braket"
+    "breakurl"
+    "bubblesort"
+    "bullcntr"
+    "bxcalc"
+    "bxdpx-beamer"
+    "bxdvidriver"
+    "bxenclose"
+    "bxnewfont"
+    "bxpapersize"
+    "bxpdfver"
+    "bxtexlogo"
+    "calcage"
+    "calctab"
+    "calculator"
+    "calrsfs"
+    "cals"
+    "calxxxx-yyyy"
+    "cancel"
+    "canoniclayout"
+    "capt-of"
+    "captcont"
+    "captdef"
+    "carbohydrates"
+    "cases"
+    "casyl"
+    "catchfile"
+    "catchfilebetweentags"
+    "catechis"
+    "catoptions"
+    "cbcoptic"
+    "ccaption"
+    "cclicenses"
+    "cd"
+    "cd-cover"
+    "cdcmd"
+    "cdpbundl"
+    "cellprops"
+    "cellspace"
+    "censor"
+    "centeredline"
+    "centerlastline"
+    "changebar"
+    "changelayout"
+    "changelog"
+    "changepage"
+    "changes"
+    "chappg"
+    "chapterfolder"
+    "cheatsheet"
+    "checkend"
+    "chet"
+    "chextras"
+    "childdoc"
+    "chkfloat"
+    "chletter"
+    "chngcntr"
+    "chronology"
+    "circ"
+    "circledsteps"
+    "circledtext"
+    "classics"
+    "classpack"
+    "clefval"
+    "cleveref"
+    "cleveref-usedon"
+    "clicks"
+    "clipboard"
+    "clistmap"
+    "clock"
+    "clrdblpg"
+    "clrstrip"
+    "cmdstring"
+    "cmdtrack"
+    "cmsd"
+    "cnltx"
+    "cntformats"
+    "cntperchap"
+    "codebox"
+    "codedescribe"
+    "codedoc"
+    "codehigh"
+    "codepage"
+    "codesection"
+    "collcell"
+    "collectbox"
+    "collection-latexrecommended"
+    "collection-pictures"
+    "colophon"
+    "color-edits"
+    "colordoc"
+    "colorframed"
+    "colorinfo"
+    "coloring"
+    "colorist"
+    "colorspace"
+    "colortab"
+    "colorwav"
+    "colorweb"
+    "colourchange"
+    "combelow"
+    "combine"
+    "comma"
+    "commado"
+    "commedit"
+    "comment"
+    "commonunicode"
+    "competences"
+    "concepts"
+    "concprog"
+    "conditext"
+    "constants"
+    "continue"
+    "contour"
+    "contracard"
+    "conv-xkv"
+    "cooking"
+    "cooking-units"
+    "cool"
+    "coolfn"
+    "coollist"
+    "coolstr"
+    "coolthms"
+    "cooltooltips"
+    "coop-writing"
+    "coordsys"
+    "copyedit"
+    "copyrightbox"
+    "coseoul"
+    "counterz"
+    "counttexruns"
+    "courseoutline"
+    "coursepaper"
+    "coverpage"
+    "cprotect"
+    "cprotectinside"
+    "crbox"
+    "create-theorem"
+    "creationboites"
+    "crefthe"
+    "crossreference"
+    "crossreftools"
+    "crumbs"
+    "csquotes"
+    "css-colors"
+    "csvmerge"
+    "csvsimple"
+    "cuisine"
+    "currency"
+    "currfile"
+    "curriculum-vitae"
+    "currvita"
+    "customenvs"
+    "cutwin"
+    "cv"
+    "cv4tw"
+    "cweb-latex"
+    "cyber"
+    "cybercic"
+    "darkmode"
+    "dashbox"
+    "dashrule"
+    "dashundergaps"
+    "dataref"
+    "datatool"
+    "datax"
+    "dateiliste"
+    "datenumber"
+    "datestamp"
+    "datetime"
+    "datetime2"
+    "datetime2-bahasai"
+    "datetime2-basque"
+    "datetime2-breton"
+    "datetime2-bulgarian"
+    "datetime2-catalan"
+    "datetime2-croatian"
+    "datetime2-czech"
+    "datetime2-danish"
+    "datetime2-dutch"
+    "datetime2-en-fulltext"
+    "datetime2-english"
+    "datetime2-esperanto"
+    "datetime2-estonian"
+    "datetime2-finnish"
+    "datetime2-french"
+    "datetime2-galician"
+    "datetime2-german"
+    "datetime2-greek"
+    "datetime2-hebrew"
+    "datetime2-icelandic"
+    "datetime2-irish"
+    "datetime2-it-fulltext"
+    "datetime2-italian"
+    "datetime2-latin"
+    "datetime2-lsorbian"
+    "datetime2-magyar"
+    "datetime2-norsk"
+    "datetime2-polish"
+    "datetime2-portuges"
+    "datetime2-romanian"
+    "datetime2-russian"
+    "datetime2-samin"
+    "datetime2-scottish"
+    "datetime2-serbian"
+    "datetime2-slovak"
+    "datetime2-slovene"
+    "datetime2-spanish"
+    "datetime2-swedish"
+    "datetime2-turkish"
+    "datetime2-ukrainian"
+    "datetime2-usorbian"
+    "datetime2-welsh"
+    "dblfloatfix"
+    "dbshow"
+    "debate"
+    "decimal"
+    "decimalcomma"
+    "decorule"
+    "defoldfonts"
+    "delimtxt"
+    "democodetools"
+    "denisbdoc"
+    "diabetes-logbook"
+    "diagbox"
+    "diagnose"
+    "dialogl"
+    "dichokey"
+    "dimnum"
+    "dinbrief"
+    "directory"
+    "dirtytalk"
+    "dlfltxb"
+    "dnaseq"
+    "doclicense"
+    "docmfp"
+    "docmute"
+    "docshots"
+    "doctools"
+    "documentation"
+    "docutils"
+    "doi"
+    "dotarrow"
+    "dotlessi"
+    "dotseqn"
+    "download"
+    "dox"
+    "dpfloat"
+    "dprogress"
+    "drac"
+    "draftcopy"
+    "draftfigure"
+    "draftwatermark"
+    "dtk"
+    "dtxdescribe"
+    "dtxgallery"
+    "ducksay"
+    "duckuments"
+    "dvdcoll"
+    "dynamicnumber"
+    "dynblocks"
+    "ean13isbn"
+    "easy"
+    "easy-todo"
+    "easybook"
+    "easyfig"
+    "easyfloats"
+    "easyformat"
+    "easylist"
+    "easyreview"
+    "ebezier"
+    "ecclesiastic"
+    "econlipsum"
+    "ecv"
+    "ed"
+    "edichokey"
+    "edmargin"
+    "eemeir"
+    "efbox"
+    "egplot"
+    "ehhline"
+    "einfart"
+    "elements"
+    "ellipsis"
+    "elmath"
+    "elocalloc"
+    "elpres"
+    "elzcards"
+    "emarks"
+    "embedall"
+    "embedfile"
+    "embrac"
+    "emo"
+    "emptypage"
+    "emulateapj"
+    "endfloat"
+    "endheads"
+    "endnotes"
+    "endnotes-hy"
+    "engpron"
+    "engrec"
+    "enotez"
+    "enumitem"
+    "enumitem-zref"
+    "envbig"
+    "environ"
+    "envlab"
+    "epigraph"
+    "epigraph-keys"
+    "epiolmec"
+    "eq-pin2corr"
+    "eqell"
+    "eqlist"
+    "eqnalign"
+    "eqname"
+    "eqparbox"
+    "errata"
+    "erw-l3"
+    "esami"
+    "esdiff"
+    "esieecv"
+    "esindex"
+    "esint"
+    "esint-type1"
+    "etaremune"
+    "etextools"
+    "etl"
+    "etoc"
+    "eukdate"
+    "eulerpx"
+    "europasscv"
+    "europecv"
+    "everyhook"
+    "everypage"
+    "exam"
+    "exam-lite"
+    "exam-n"
+    "exam-randomizechoices"
+    "examdesign"
+    "example"
+    "examplep"
+    "examz"
+    "exceltex"
+    "excludeonly"
+    "exercise"
+    "exercisebank"
+    "exercisepoints"
+    "exercises"
+    "exesheet"
+    "exframe"
+    "exp-testopt"
+    "expdlist"
+    "export"
+    "exsheets"
+    "exsol"
+    "extract"
+    "facsimile"
+    "factura"
+    "fail-fast"
+    "familytree"
+    "fancyhandout"
+    "fancylabel"
+    "fancynum"
+    "fancypar"
+    "fancyqr"
+    "fancyslides"
+    "fancytabs"
+    "fancytooltips"
+    "fbox"
+    "fcolumn"
+    "fetchcls"
+    "fewerfloatpages"
+    "ffcode"
+    "ffslides"
+    "fgruler"
+    "fifo-stack"
+    "figsize"
+    "filecontents"
+    "filecontentsdef"
+    "filedate"
+    "fileinfo"
+    "filemod"
+    "fink"
+    "finstrut"
+    "fistrum"
+    "fithesis"
+    "fixcmex"
+    "fixfoot"
+    "fixme"
+    "fixmetodonotes"
+    "fjodor"
+    "flabels"
+    "flacards"
+    "flagderiv"
+    "flashcards"
+    "flashmovie"
+    "flexipage"
+    "flipbook"
+    "flippdf"
+    "floatbytocbasic"
+    "floatflt"
+    "floatrow"
+    "floatrowbytocbasic"
+    "flowfram"
+    "fmp"
+    "fmtcount"
+    "fn2end"
+    "fnbreak"
+    "fncychap"
+    "fncylab"
+    "fnpara"
+    "fnpct"
+    "fnumprint"
+    "foilhtml"
+    "foliono"
+    "fontaxes"
+    "fontsetup"
+    "fontsize"
+    "fonttable"
+    "footmisc"
+    "footmisx"
+    "footnotebackref"
+    "footnoterange"
+    "footnpag"
+    "forarray"
+    "foreign"
+    "forloop"
+    "formlett"
+    "forms16be"
+    "formular"
+    "fragments"
+    "frame"
+    "framed"
+    "frankenstein"
+    "frege"
+    "froufrou"
+    "ftcap"
+    "ftnxtra"
+    "fullblck"
+    "fullminipage"
+    "fullwidth"
+    "functional"
+    "fundus-calligra"
+    "fundus-cyr"
+    "fundus-sueterlin"
+    "fvextra"
+    "fwlw"
+    "g-brief"
+    "gatherenum"
+    "gauss"
+    "gcard"
+    "gcite"
+    "gender"
+    "genmpage"
+    "gensymb"
+    "getfiledate"
+    "getitems"
+    "gindex"
+    "ginpenc"
+    "gitfile-info"
+    "gitinfo"
+    "gitinfo2"
+    "gitlog"
+    "gitstatus"
+    "gitver"
+    "globalvals"
+    "gloss"
+    "glossaries"
+    "glossaries-danish"
+    "glossaries-dutch"
+    "glossaries-english"
+    "glossaries-estonian"
+    "glossaries-extra"
+    "glossaries-finnish"
+    "glossaries-french"
+    "glossaries-german"
+    "glossaries-irish"
+    "glossaries-italian"
+    "glossaries-magyar"
+    "glossaries-norsk"
+    "glossaries-nynorsk"
+    "glossaries-polish"
+    "glossaries-portuges"
+    "glossaries-serbian"
+    "glossaries-slovene"
+    "glossaries-spanish"
+    "gmdoc"
+    "gmdoc-enhance"
+    "gmiflink"
+    "gmutils"
+    "gmverb"
+    "grabbox"
+    "gradient-text"
+    "grading-scheme"
+    "graphbox"
+    "graphicscache"
+    "graphicx-psmin"
+    "graphicxbox"
+    "graphpaper"
+    "grayhints"
+    "grfpaste"
+    "grid"
+    "grid-system"
+    "gridpapers"
+    "gridset"
+    "gridslides"
+    "gs1"
+    "guitlogo"
+    "ha-prosper"
+    "hackthefootline"
+    "halloweenmath"
+    "handin"
+    "handout"
+    "handoutwithnotes"
+    "hang"
+    "hanging"
+    "hardwrap"
+    "harnon-cv"
+    "harpoon"
+    "hc"
+    "he-she"
+    "hep-acronym"
+    "hep-float"
+    "hep-math"
+    "hep-text"
+    "hep-title"
+    "hereapplies"
+    "hhtensor"
+    "hideanswer"
+    "highlightlatex"
+    "highlightx"
+    "histogr"
+    "hitec"
+    "hitreport"
+    "hletter"
+    "hobsub"
+    "homework"
+    "hpsdiss"
+    "href-ul"
+    "hrefhide"
+    "huawei"
+    "hvextern"
+    "hvindex"
+    "hvlogos"
+    "hvpygmentex"
+    "hvqrurl"
+    "hwemoji"
+    "hypdestopt"
+    "hypdoc"
+    "hypdvips"
+    "hyper"
+    "hyperbar"
+    "hypernat"
+    "hyperxmp"
+    "hyphenat"
+    "identkey"
+    "idxcmds"
+    "idxlayout"
+    "iexec"
+    "ifallfalse"
+    "iffont"
+    "ifmslide"
+    "ifmtarg"
+    "ifnextok"
+    "ifoddpage"
+    "ifthenx"
+    "iitem"
+    "image-gallery"
+    "imakeidx"
+    "import"
+    "incgraph"
+    "indextools"
+    "inline-images"
+    "inlinedef"
+    "inlinelabel"
+    "inputenx"
+    "inputtrc"
+    "interactiveworkbook"
+    "interfaces"
+    "intopdf"
+    "inversepath"
+    "invoice"
+    "invoice-class"
+    "invoice2"
+    "ipsum"
+    "iso"
+    "iso10303"
+    "isodate"
+    "isodoc"
+    "isonums"
+    "isopt"
+    "isorot"
+    "isosafety"
+    "isotope"
+    "issuulinks"
+    "iwonamath"
+    "jlabels"
+    "jmsdelim"
+    "jobname-suffix"
+    "joinbox"
+    "jslectureplanner"
+    "jumplines"
+    "jvlisting"
+    "kalendarium"
+    "kantlipsum"
+    "kerntest"
+    "keycommand"
+    "keyfloat"
+    "keyindex"
+    "keyparse"
+    "keyreader"
+    "keystroke"
+    "keyval2e"
+    "keyvaltable"
+    "kix"
+    "knowledge"
+    "koma-moderncvclassic"
+    "koma-script-sfs"
+    "komacv"
+    "komacv-rg"
+    "korigamik"
+    "ktv-texdata"
+    "l3build"
+    "labbook"
+    "labels"
+    "labels4easylist"
+    "labelschanged"
+    "lambdax"
+    "lastpackage"
+    "lastpage"
+    "latex-amsmath-dev"
+    "latex-base-dev"
+    "latex-bin-dev"
+    "latex-context-ppchtex"
+    "latex-firstaid-dev"
+    "latex-graphics-dev"
+    "latex-lab-dev"
+    "latex-tools-dev"
+    "latex-uni8"
+    "latex2pydata"
+    "latexcolors"
+    "latexdemo"
+    "latexgit"
+    "layouts"
+    "lazylist"
+    "lccaps"
+    "lcd"
+    "lcg"
+    "leading"
+    "leaflet"
+    "lebhart"
+    "lectures"
+    "lectureslides"
+    "leftidx"
+    "leftindex"
+    "leipzig"
+    "lengthconvert"
+    "lettre"
+    "lettrine"
+    "lewis"
+    "lhelp"
+    "libgreek"
+    "limap"
+    "linegoal"
+    "linop"
+    "lipsum"
+    "lisp-on-tex"
+    "listing"
+    "listingsutf8"
+    "listlbls"
+    "listliketab"
+    "listofsymbols"
+    "litesolution"
+    "litetable"
+    "lkproof"
+    "lmake"
+    "locality"
+    "logbox"
+    "logical-markup-utils"
+    "logoetalab"
+    "logpap"
+    "longfbox"
+    "longfigure"
+    "longnamefilelist"
+    "loops"
+    "lsc"
+    "lstaddons"
+    "lstfiracode"
+    "lt3graph"
+    "lt3rawobjects"
+    "ltablex"
+    "ltabptch"
+    "ltxdockit"
+    "ltxguidex"
+    "ltxkeys"
+    "ltxnew"
+    "ltxtools"
+    "lua-check-hyphen"
+    "lua-physical"
+    "luatodonotes"
+    "macrolist"
+    "macroswap"
+    "magaz"
+    "magicnum"
+    "magicwatermark"
+    "mailing"
+    "mailmerge"
+    "makebarcode"
+    "makebase"
+    "makebox"
+    "makecell"
+    "makecirc"
+    "makecmds"
+    "makecookbook"
+    "makedtx"
+    "makeglos"
+    "makelabels"
+    "makerobust"
+    "mandi"
+    "manfnt"
+    "manuscript"
+    "manyind"
+    "marginfit"
+    "marginfix"
+    "marginnote"
+    "markdown"
+    "mathalpha"
+    "mathastext"
+    "mathexam"
+    "mathfam256"
+    "mathfont"
+    "maybemath"
+    "mcaption"
+    "mceinleger"
+    "mcexam"
+    "mcite"
+    "mciteplus"
+    "mdframed"
+    "media4svg"
+    "media9"
+    "medstarbeamer"
+    "meetingmins"
+    "memexsupp"
+    "memory"
+    "mensa-tex"
+    "menu"
+    "menucard"
+    "menukeys"
+    "metalogox"
+    "metanorma"
+    "metastr"
+    "method"
+    "metre"
+    "mfirstuc"
+    "mftinc"
+    "mi-solns"
+    "midpage"
+    "mindflow"
+    "minibox"
+    "minidocument"
+    "minifp"
+    "minimalist"
+    "minipage-marginpar"
+    "minitoc"
+    "minorrevision"
+    "minted"
+    "minutes"
+    "mla-paper"
+    "mleftright"
+    "mlist"
+    "mmap"
+    "mnotes"
+    "moderncv"
+    "modernposter"
+    "moderntimeline"
+    "modref"
+    "modroman"
+    "modular"
+    "monofill"
+    "moodle"
+    "moreenum"
+    "morefloats"
+    "morehype"
+    "moresize"
+    "moreverb"
+    "morewrites"
+    "movement-arrows"
+    "movie15"
+    "mparhack"
+    "mpostinl"
+    "msc"
+    "msg"
+    "mslapa"
+    "mtgreek"
+    "multenum"
+    "multiaudience"
+    "multibbl"
+    "multicap"
+    "multicolrule"
+    "multidef"
+    "multienv"
+    "multiexpand"
+    "multifootnote"
+    "multilang"
+    "multiple-choice"
+    "multirow"
+    "mversion"
+    "mwe"
+    "mycv"
+    "mylatex"
+    "mylatexformat"
+    "nag"
+    "nameauth"
+    "namespc"
+    "ncclatex"
+    "ncctools"
+    "needspace"
+    "nestquot"
+    "newcommand"
+    "newenviron"
+    "newfile"
+    "newlfm"
+    "newspaper"
+    "newunicodechar"
+    "newvbtm"
+    "newverbs"
+    "nextpage"
+    "nfssext-cfr"
+    "nicefilelist"
+    "niceframe"
+    "nicetext"
+    "nidanfloat"
+    "ninecolors"
+    "nlctdoc"
+    "noconflict"
+    "noindentafter"
+    "noitcrul"
+    "nolbreaks"
+    "nomencl"
+    "nomentbl"
+    "non-decimal-units"
+    "nonfloat"
+    "nonumonpart"
+    "nopageno"
+    "normalcolor"
+    "notebeamer"
+    "notes"
+    "notespages"
+    "notestex"
+    "notoccite"
+    "nowidow"
+    "nox"
+    "ntheorem"
+    "numberedblock"
+    "numname"
+    "numprint"
+    "numspell"
+    "ocg-p"
+    "ocgx"
+    "ocgx2"
+    "ocr-latex"
+    "octavo"
+    "oldstyle"
+    "onlyamsmath"
+    "opcit"
+    "opencolor"
+    "optidef"
+    "optional"
+    "options"
+    "orcidlink"
+    "orientation"
+    "outline"
+    "outliner"
+    "outlines"
+    "outlining"
+    "overlays"
+    "overpic"
+    "padcount"
+    "pagecolor"
+    "pagecont"
+    "pagegrid"
+    "pagelayout"
+    "pagenote"
+    "pagerange"
+    "pageslts"
+    "palette"
+    "pangram"
+    "paper"
+    "papercdcase"
+    "papermas"
+    "papertex"
+    "paracol"
+    "parades"
+    "paralist"
+    "paresse"
+    "parnotes"
+    "parsa"
+    "parselines"
+    "pas-cours"
+    "pas-cv"
+    "pas-tableur"
+    "patch"
+    "patchcmd"
+    "pauldoc"
+    "pawpict"
+    "pax"
+    "pbalance"
+    "pbox"
+    "pbsheet"
+    "pdf14"
+    "pdfannotations"
+    "pdfcol"
+    "pdfcolmk"
+    "pdfcomment"
+    "pdfcprot"
+    "pdfmarginpar"
+    "pdfoverlay"
+    "pdfpagediff"
+    "pdfpc"
+    "pdfpc-movie"
+    "pdfprivacy"
+    "pdfrender"
+    "pdfreview"
+    "pdfscreen"
+    "pdfslide"
+    "pdfsync"
+    "pdfwin"
+    "pdfx"
+    "pecha"
+    "perltex"
+    "permute"
+    "petiteannonce"
+    "pgfmath-xfp"
+    "phfcc"
+    "phfextendedabstract"
+    "phffullpagefigure"
+    "phfnote"
+    "phfparen"
+    "phfqit"
+    "phfquotetext"
+    "phfsvnwatermark"
+    "phfthm"
+    "philex"
+    "phonenumbers"
+    "photo"
+    "photobook"
+    "picture"
+    "piff"
+    "pkgloader"
+    "placeins"
+    "plantslabels"
+    "plates"
+    "plweb"
+    "pmboxdraw"
+    "polynom"
+    "polynomial"
+    "polytable"
+    "postcards"
+    "poster-mac"
+    "postnotes"
+    "powerdot"
+    "ppr-prv"
+    "ppt-slides"
+    "practicalreports"
+    "precattl"
+    "prelim2e"
+    "preprint"
+    "pressrelease"
+    "prettyref"
+    "prettytok"
+    "preview"
+    "printlen"
+    "probsoln"
+    "profmaquette"
+    "program"
+    "progress"
+    "progressbar"
+    "projlib"
+    "proofread"
+    "properties"
+    "prosper"
+    "protex"
+    "protocol"
+    "psfragx"
+    "pstool"
+    "pstring"
+    "pxgreeks"
+    "pygmentex"
+    "python"
+    "pythonimmediate"
+    "q-and-a"
+    "qcm"
+    "qstest"
+    "qsymbols"
+    "quicktype"
+    "quiz2socrative"
+    "quotchap"
+    "quoting"
+    "quotmark"
+    "ran_toks"
+    "randtext"
+    "rccol"
+    "rcs-multi"
+    "rcsinfo"
+    "readablecv"
+    "readarray"
+    "realboxes"
+    "recipe"
+    "recipebook"
+    "recipecard"
+    "rectopma"
+    "refcheck"
+    "refenums"
+    "reflectgraphics"
+    "refman"
+    "refstyle"
+    "regcount"
+    "regexpatch"
+    "register"
+    "regstats"
+    "relenc"
+    "relsize"
+    "repeatindex"
+    "repltext"
+    "rescansync"
+    "resmes"
+    "responsive"
+    "returntogrid"
+    "rgltxdoc"
+    "rjlparshap"
+    "rlepsf"
+    "rmpage"
+    "robust-externalize"
+    "robustcommand"
+    "robustindex"
+    "romanbar"
+    "romanbarpagenumber"
+    "romanneg"
+    "romannum"
+    "rorlink"
+    "rotfloat"
+    "rotpages"
+    "roundbox"
+    "rterface"
+    "rtkinenc"
+    "rulerbox"
+    "rulercompass"
+    "runcode"
+    "rvwrite"
+    "sanitize-umlaut"
+    "sauerj"
+    "saveenv"
+    "savefnmark"
+    "savesym"
+    "savetrees"
+    "scale"
+    "scalebar"
+    "scalerel"
+    "scanpages"
+    "schedule"
+    "schooldocs"
+    "scontents"
+    "scrambledenvs"
+    "scrlayer-fancyhdr"
+    "scrlttr2copy"
+    "scrwfile"
+    "sdaps"
+    "sdrt"
+    "secdot"
+    "secnum"
+    "sectionbox"
+    "sectionbreak"
+    "sectsty"
+    "seealso"
+    "selectp"
+    "selinput"
+    "semantex"
+    "semantic"
+    "semantic-markup"
+    "semesterplanner"
+    "semioneside"
+    "semproc"
+    "semtex"
+    "sepfootnotes"
+    "seqsplit"
+    "sesstime"
+    "setspaceenhanced"
+    "sf298"
+    "sffms"
+    "sfmath"
+    "shadethm"
+    "shadow"
+    "shadowtext"
+    "shapepar"
+    "shdoc"
+    "shipunov"
+    "shorttoc"
+    "show2e"
+    "showcharinbox"
+    "showdim"
+    "showexpl"
+    "showlabels"
+    "sidecap"
+    "sidenotes"
+    "sidenotesplus"
+    "silence"
+    "sillypage"
+    "sim-os-menus"
+    "simplecd"
+    "simplecv"
+    "simpleinvoice"
+    "simplivre"
+    "sitem"
+    "skb"
+    "skdoc"
+    "skeldoc"
+    "skeycommand"
+    "skeyval"
+    "skills"
+    "skrapport"
+    "slantsc"
+    "smalltableof"
+    "smart-eqn"
+    "smartref"
+    "smartunits"
+    "snapshot"
+    "snaptodo"
+    "snotez"
+    "soulpos"
+    "spacingtricks"
+    "spark-otf"
+    "sparklines"
+    "sphack"
+    "splitindex"
+    "spot"
+    "spotcolor"
+    "spreadtab"
+    "spverbatim"
+    "srbook-mem"
+    "srcltx"
+    "sseq"
+    "sslides"
+    "stack"
+    "stackengine"
+    "standalone"
+    "starray"
+    "stdclsdv"
+    "stdpage"
+    "stealcaps"
+    "stex"
+    "storebox"
+    "storecmd"
+    "stringstrings"
+    "sttools"
+    "stubs"
+    "studenthandouts"
+    "styledcmd"
+    "subdepth"
+    "subdocs"
+    "subeqn"
+    "subeqnarray"
+    "subfigmat"
+    "subfigure"
+    "subfiles"
+    "subfloat"
+    "substr"
+    "supertabular"
+    "suppose"
+    "svg"
+    "svgcolor"
+    "svn"
+    "svn-multi"
+    "svn-prov"
+    "svninfo"
+    "swfigure"
+    "swungdash"
+    "syntax"
+    "syntrace"
+    "synttree"
+    "tabbing"
+    "tabfigures"
+    "tableaux"
+    "tablefootnote"
+    "tableof"
+    "tablists"
+    "tabls"
+    "tablvar"
+    "tabstackengine"
+    "tabto-ltx"
+    "tabu"
+    "tabularborder"
+    "tabularcalc"
+    "tabularew"
+    "tabularray"
+    "tabulary"
+    "tagging"
+    "tagpair"
+    "tagpdf"
+    "talk"
+    "tamefloats"
+    "tangocolors"
+    "tasks"
+    "tcldoc"
+    "tcolorbox"
+    "tdclock"
+    "technics"
+    "ted"
+    "templatetools"
+    "termcal"
+    "termlist"
+    "termsim"
+    "testhyphens"
+    "testidx"
+    "tex-label"
+    "tex-locale"
+    "texlogos"
+    "texmate"
+    "texments"
+    "texpower"
+    "texshade"
+    "texsurgery"
+    "textcsc"
+    "textfit"
+    "textmerg"
+    "textpos"
+    "textualicomma"
+    "texvc"
+    "theoremref"
+    "thinsp"
+    "thmtools"
+    "threadcol"
+    "threeparttable"
+    "threeparttablex"
+    "thumb"
+    "thumbs"
+    "thumby"
+    "ticket"
+    "tipauni"
+    "titlecaps"
+    "titlefoot"
+    "titlepic"
+    "titleref"
+    "titlesec"
+    "titling"
+    "to-be-determined"
+    "tocbibind"
+    "tocdata"
+    "tocloft"
+    "tocvsec2"
+    "todo"
+    "todonotes"
+    "tokcycle"
+    "tokenizer"
+    "toolbox"
+    "topfloat"
+    "topiclongtable"
+    "totalcount"
+    "totcount"
+    "totpages"
+    "tramlines"
+    "translations"
+    "transparent"
+    "trfsigns"
+    "trimspaces"
+    "trivfloat"
+    "trsym"
+    "truncate"
+    "tucv"
+    "turnthepage"
+    "tutodoc"
+    "twoinone"
+    "twoup"
+    "txgreeks"
+    "type1cm"
+    "typed-checklist"
+    "typeface"
+    "typoaid"
+    "typogrid"
+    "uassign"
+    "ucs"
+    "uebungsblatt"
+    "umoline"
+    "underlin"
+    "underoverlap"
+    "undolabl"
+    "uni-titlepage"
+    "unicode-math-input"
+    "unicodefonttable"
+    "unifront"
+    "unisc"
+    "unitconv"
+    "units"
+    "unravel"
+    "updatemarks"
+    "upmethodology"
+    "upquote"
+    "uri"
+    "ushort"
+    "uspace"
+    "utf8add"
+    "uwmslide"
+    "variablelm"
+    "varindex"
+    "varsfromjobname"
+    "varwidth"
+    "vcell"
+    "vdmlisting"
+    "verbasef"
+    "verbatimbox"
+    "verbatimcopy"
+    "verbdef"
+    "verbments"
+    "verifiche"
+    "verifycommand"
+    "version"
+    "versions"
+    "versonotes"
+    "vertbars"
+    "vgrid"
+    "vhistory"
+    "vmargin"
+    "volumes"
+    "vpe"
+    "vruler"
+    "vtable"
+    "vwcol"
+    "wallcalendar"
+    "wallpaper"
+    "warning"
+    "warpcol"
+    "was"
+    "webquiz"
+    "widetable"
+    "widows-and-orphans"
+    "williams"
+    "willowtreebook"
+    "withargs"
+    "wordcount"
+    "wordlike"
+    "worksheet"
+    "wrapfig"
+    "wrapfig2"
+    "wrapstuff"
+    "writeongrid"
+    "wtref"
+    "xargs"
+    "xassoccnt"
+    "xbmks"
+    "xcntperchap"
+    "xcolor-material"
+    "xcolor-solarized"
+    "xcomment"
+    "xcookybooky"
+    "xcpdftips"
+    "xdoc"
+    "xellipsis"
+    "xfakebold"
+    "xfor"
+    "xhfill"
+    "xifthen"
+    "xint"
+    "xkcdcolors"
+    "xkeymask"
+    "xltabular"
+    "xmpincl"
+    "xnewcommand"
+    "xoptarg"
+    "xpatch"
+    "xpeek"
+    "xprintlen"
+    "xpunctuate"
+    "xsavebox"
+    "xsim"
+    "xstring"
+    "xtab"
+    "xurl"
+    "xwatermark"
+    "xytree"
+    "yafoot"
+    "yagusylo"
+    "yaletter"
+    "ycbook"
+    "ydoc"
+    "yplan"
+    "zebra-goodies"
+    "zed-csp"
+    "zennote"
+    "ziffer"
+    "zref"
+    "zref-check"
+    "zref-clever"
+    "zref-vario"
+    "zwgetfdate"
+    "zwpagelayout"
+  ];
+  sha512.run = "9241966245fa9c875e458a781779f1ab00b615cfee8e5b4a591bd2fe71ed0ef148f7ed40559e7a54c6a46c63305838bb2e46634a2f434d550e80366af2f329a1";
+};
+collection-latexrecommended = {
+  revision = 69131;
+  stripPrefix = 0;
+  deps = [
+    "anysize"
+    "attachfile2"
+    "beamer"
+    "booktabs"
+    "breqn"
+    "caption"
+    "cite"
+    "cmap"
+    "collection-latex"
+    "crop"
+    "ctable"
+    "eso-pic"
+    "etoolbox"
+    "euenc"
+    "euler"
+    "everysel"
+    "everyshi"
+    "extsizes"
+    "fancybox"
+    "fancyref"
+    "fancyvrb"
+    "filehook"
+    "float"
+    "fontspec"
+    "footnotehyper"
+    "fp"
+    "grffile"
+    "hologo"
+    "index"
+    "infwarerr"
+    "jknapltx"
+    "koma-script"
+    "l3experimental"
+    "latexbug"
+    "lineno"
+    "listings"
+    "lwarp"
+    "mathspec"
+    "mathtools"
+    "mdwtools"
+    "memoir"
+    "metalogo"
+    "microtype"
+    "ms"
+    "newfloat"
+    "ntgclass"
+    "parskip"
+    "pdfcolfoot"
+    "pdflscape"
+    "pdfmanagement-testphase"
+    "pdfpages"
+    "polyglossia"
+    "psfrag"
+    "ragged2e"
+    "rcs"
+    "sansmath"
+    "section"
+    "seminar"
+    "sepnum"
+    "setspace"
+    "subfig"
+    "textcase"
+    "thumbpdf"
+    "translator"
+    "typehtml"
+    "ucharcat"
+    "underscore"
+    "unicode-math"
+    "xcolor"
+    "xkeyval"
+    "xltxtra"
+    "xunicode"
+  ];
+  sha512.run = "586232e420ea3c53c4c9532252681a8ef20185348deba9e1f37c1e0231203a8d4955dc27c067ab1491ffbaa8f267a34d09cb6c48536f871da3fba8ae15c1f910";
+};
+collection-luatex = {
+  revision = 69404;
+  stripPrefix = 0;
+  deps = [
+    "addliga"
+    "addtoluatexpath"
+    "auto-pst-pdf-lua"
+    "barracuda"
+    "bezierplot"
+    "blopentype"
+    "checkcites"
+    "chickenize"
+    "chinese-jfm"
+    "cloze"
+    "collection-basic"
+    "combofont"
+    "cstypo"
+    "ctablestack"
+    "ekdosis"
+    "emoji"
+    "emojicite"
+    "enigma"
+    "gitinfo-lua"
+    "innerscript"
+    "interpreter"
+    "kanaparser"
+    "ligtype"
+    "linebreaker"
+    "lparse"
+    "lt3luabridge"
+    "lua-placeholders"
+    "lua-tinyyaml"
+    "lua-typo"
+    "lua-uca"
+    "lua-ul"
+    "lua-uni-algos"
+    "lua-visual-debug"
+    "lua-widow-control"
+    "luaaddplot"
+    "luacas"
+    "luacensor"
+    "luacode"
+    "luacolor"
+    "luacomplex"
+    "luagcd"
+    "luahttp"
+    "luahyphenrules"
+    "luaimageembed"
+    "luaindex"
+    "luainputenc"
+    "luakeys"
+    "lualatex-math"
+    "lualatex-truncate"
+    "lualibs"
+    "lualinalg"
+    "luamathalign"
+    "luamaths"
+    "luamodulartables"
+    "luamplib"
+    "luaoptions"
+    "luaotfload"
+    "luapackageloader"
+    "luaplot"
+    "luaprogtable"
+    "luaquotes"
+    "luarandom"
+    "luaset"
+    "luatex85"
+    "luatexbase"
+    "luatexko"
+    "luatextra"
+    "luatruthtable"
+    "luavlna"
+    "luaxml"
+    "lutabulartools"
+    "minim"
+    "minim-math"
+    "minim-mp"
+    "minim-pdf"
+    "minim-xmp"
+    "newpax"
+    "nodetree"
+    "odsfile"
+    "optex"
+    "pdfarticle"
+    "pdfextra"
+    "penlight"
+    "penlightplus"
+    "piton"
+    "placeat"
+    "plantuml"
+    "pyluatex"
+    "scikgtex"
+    "selnolig"
+    "showhyphenation"
+    "showkerning"
+    "spacekern"
+    "spelling"
+    "stricttex"
+    "sympycalc"
+    "texfindpkg"
+    "truthtable"
+    "tsvtemplate"
+    "typewriter"
+    "uninormalize"
+    "yamlvars"
+  ];
+  sha512.run = "d03b9242340be7be8c32e87c2773bb8aecd4a6b7e1594fe755d9955f111dad4863e497bd3f374140c162b84c6c90379ff86c930267ab5c6d26c3cd0e3968c745";
+};
+collection-mathscience = {
+  revision = 69267;
+  stripPrefix = 0;
+  deps = [
+    "12many"
+    "accents"
+    "alg"
+    "algobox"
+    "algorithm2e"
+    "algorithmicx"
+    "algorithms"
+    "algpseudocodex"
+    "algxpar"
+    "aligned-overset"
+    "amscdx"
+    "amstex"
+    "annotate-equations"
+    "apxproof"
+    "autobreak"
+    "axodraw2"
+    "backnaur"
+    "begriff"
+    "binomexp"
+    "biocon"
+    "bitpattern"
+    "bodeplot"
+    "bohr"
+    "boldtensors"
+    "bosisio"
+    "bpchem"
+    "bropd"
+    "bussproofs"
+    "bussproofs-extra"
+    "bytefield"
+    "calculation"
+    "cartonaugh"
+    "cascade"
+    "causets"
+    "ccfonts"
+    "ccool"
+    "chemarrow"
+    "chemcompounds"
+    "chemcono"
+    "chemexec"
+    "chemformula"
+    "chemgreek"
+    "chemmacros"
+    "chemnum"
+    "chemobabel"
+    "chemplants"
+    "chemschemex"
+    "chemsec"
+    "chemstyle"
+    "clrscode"
+    "clrscode3e"
+    "codeanatomy"
+    "collection-fontsrecommended"
+    "collection-latex"
+    "commath"
+    "commutative-diagrams"
+    "complexity"
+    "computational-complexity"
+    "concmath"
+    "concrete"
+    "conteq"
+    "correctmathalign"
+    "cryptocode"
+    "csassignments"
+    "cvss"
+    "decision-table"
+    "delim"
+    "delimseasy"
+    "delimset"
+    "derivative"
+    "diffcoeff"
+    "digiconfigs"
+    "dijkstra"
+    "drawmatrix"
+    "drawstack"
+    "dyntree"
+    "easing"
+    "ebproof"
+    "econometrics"
+    "eltex"
+    "emf"
+    "endiagram"
+    "engtlc"
+    "eolang"
+    "eqexpl"
+    "eqnarray"
+    "eqnnumwarn"
+    "euclideangeometry"
+    "extarrows"
+    "extpfeil"
+    "faktor"
+    "fascicules"
+    "fitch"
+    "fixdif"
+    "fixmath"
+    "fnspe"
+    "formal-grammar"
+    "fouridx"
+    "freealign"
+    "functan"
+    "galois"
+    "gastex"
+    "gene-logic"
+    "ghsystem"
+    "glosmathtools"
+    "gotoh"
+    "grundgesetze"
+    "gu"
+    "helmholtz-ellis-ji-notation"
+    "hep"
+    "hep-graphic"
+    "hep-reference"
+    "hepnames"
+    "hepparticles"
+    "hepthesis"
+    "hepunits"
+    "ibrackets"
+    "includernw"
+    "interval"
+    "ionumbers"
+    "isomath"
+    "isphysicalmath"
+    "jkmath"
+    "jupynotex"
+    "karnaugh"
+    "karnaugh-map"
+    "karnaughmap"
+    "kvmap"
+    "letterswitharrows"
+    "lie-hasse"
+    "logicproof"
+    "longdivision"
+    "lpform"
+    "lplfitch"
+    "lstbayes"
+    "luanumint"
+    "mathcommand"
+    "mathcomp"
+    "mathfixs"
+    "mathlig"
+    "mathpartir"
+    "mathpunctspace"
+    "mathsemantics"
+    "matlab-prettifier"
+    "matrix-skeleton"
+    "mattens"
+    "mecaso"
+    "membranecomputing"
+    "memorygraphs"
+    "messagepassing"
+    "mgltex"
+    "mhchem"
+    "mhequ"
+    "miller"
+    "mismath"
+    "multiobjective"
+    "naive-ebnf"
+    "namedtensor"
+    "natded"
+    "nath"
+    "nchairx"
+    "nicematrix"
+    "nuc"
+    "nucleardata"
+    "numerica"
+    "numerica-plus"
+    "numerica-tables"
+    "objectz"
+    "oplotsymbl"
+    "ot-tableau"
+    "oubraces"
+    "overarrows"
+    "pascaltriangle"
+    "perfectcut"
+    "pfdicons"
+    "physconst"
+    "physics"
+    "physics2"
+    "physunits"
+    "pinoutikz"
+    "pm-isomath"
+    "pmdraw"
+    "polexpr"
+    "prftree"
+    "principia"
+    "proba"
+    "proof-at-the-end"
+    "prooftrees"
+    "pseudo"
+    "pseudocode"
+    "pythonhighlight"
+    "qsharp"
+    "quickreaction"
+    "quiver"
+    "rank-2-roots"
+    "rbt-mathnotes"
+    "rec-thy"
+    "resolsysteme"
+    "rest-api"
+    "revquantum"
+    "ribbonproofs"
+    "rmathbr"
+    "sankey"
+    "sasnrdisplay"
+    "sciposter"
+    "sclang-prettifier"
+    "scratchx"
+    "sesamanuel"
+    "sfg"
+    "shuffle"
+    "simplebnf"
+    "simpler-wick"
+    "simples-matrices"
+    "simplewick"
+    "sistyle"
+    "siunits"
+    "siunitx"
+    "skmath"
+    "spalign"
+    "spbmark"
+    "stanli"
+    "statex"
+    "statex2"
+    "statistics"
+    "statistik"
+    "statmath"
+    "steinmetz"
+    "stmaryrd"
+    "string-diagrams"
+    "structmech"
+    "struktex"
+    "substances"
+    "subsupscripts"
+    "subtext"
+    "susy"
+    "syllogism"
+    "sympytexpackage"
+    "synproof"
+    "t-angles"
+    "tablor"
+    "tensind"
+    "tensor"
+    "tex-ewd"
+    "textgreek"
+    "textopo"
+    "thermodynamics"
+    "thmbox"
+    "tiscreen"
+    "turnstile"
+    "ulqda"
+    "unitsdef"
+    "venn"
+    "witharrows"
+    "xymtex"
+    "yhmath"
+    "youngtab"
+    "yquant"
+    "ytableau"
+    "zx-calculus"
+  ];
+  sha512.run = "bc4ca79e6057d48ac00b5f271d8e776fa1ee2080749a3e5761e13bfe0b3acaa08ff797b653ddb61bc9d168b28f4f29f234e64b51724773d0ac51cea7efa6ab9e";
+};
+collection-metapost = {
+  revision = 67071;
+  stripPrefix = 0;
+  deps = [
+    "automata"
+    "bbcard"
+    "blockdraw_mp"
+    "bpolynomial"
+    "cmarrows"
+    "collection-basic"
+    "drv"
+    "dviincl"
+    "emp"
+    "epsincl"
+    "expressg"
+    "exteps"
+    "featpost"
+    "feynmf"
+    "feynmp-auto"
+    "fiziko"
+    "garrigues"
+    "gmp"
+    "hatching"
+    "hershey-mp"
+    "huffman"
+    "latexmp"
+    "mcf2graph"
+    "metago"
+    "metaobj"
+    "metaplot"
+    "metapost"
+    "metapost-colorbrewer"
+    "metauml"
+    "mfpic"
+    "mfpic4ode"
+    "minim-hatching"
+    "mp3d"
+    "mparrows"
+    "mpattern"
+    "mpchess"
+    "mpcolornames"
+    "mpgraphics"
+    "mptrees"
+    "piechartmp"
+    "repere"
+    "roex"
+    "roundrect"
+    "shapes"
+    "slideshow"
+    "splines"
+    "suanpan"
+    "textpath"
+    "threeddice"
+  ];
+  sha512.run = "c0bf45f69b1b11ef6e59e6dfa0bd690fcae8b1b06097eb99f06e7ffa954f1ebebf296f3245e6922d716688353e22b691092f8e6349b1f02b3234b49a3bfaf969";
+};
+collection-music = {
+  revision = 65862;
+  stripPrefix = 0;
+  deps = [
+    "abc"
+    "autosp"
+    "bagpipe"
+    "chordbars"
+    "chordbox"
+    "collection-latex"
+    "ddphonism"
+    "figbas"
+    "gchords"
+    "gregoriotex"
+    "gtrcrd"
+    "guitar"
+    "guitarchordschemes"
+    "guitartabs"
+    "harmony"
+    "latex4musicians"
+    "leadsheets"
+    "lilyglyphs"
+    "lyluatex"
+    "m-tx"
+    "musical"
+    "musicography"
+    "musixguit"
+    "musixtex"
+    "musixtex-fonts"
+    "musixtnt"
+    "octave"
+    "piano"
+    "pmx"
+    "pmxchords"
+    "recorder-fingering"
+    "songbook"
+    "songproj"
+    "songs"
+    "xml2pmx"
+    "xpiano"
+  ];
+  sha512.run = "951e172129275fa2cb7ccea6bf23f27484503533ebee4c3bef7d2f4ddda5940c15713b104a584704a0b9ec710e2ae363b6ec130747a6e169a7c461e509714a77";
+};
+collection-pictures = {
+  revision = 69409;
+  stripPrefix = 0;
+  deps = [
+    "adigraph"
+    "aobs-tikz"
+    "askmaps"
+    "asyfig"
+    "asypictureb"
+    "autoarea"
+    "bardiag"
+    "beamerswitch"
+    "binarytree"
+    "blochsphere"
+    "bloques"
+    "blox"
+    "bodegraph"
+    "bondgraph"
+    "bondgraphs"
+    "braids"
+    "bxeepic"
+    "byo-twemojis"
+    "byrne"
+    "cachepic"
+    "callouts"
+    "celtic"
+    "chemfig"
+    "circuit-macros"
+    "circuitikz"
+    "circularglyphs"
+    "coffeestains"
+    "collection-basic"
+    "coloredbelts"
+    "combinedgraphics"
+    "curve"
+    "curve2e"
+    "curves"
+    "dcpic"
+    "diagmac2"
+    "ditaa"
+    "doc-pictex"
+    "dot2texi"
+    "dottex"
+    "dpcircling"
+    "dratex"
+    "drs"
+    "duotenzor"
+    "dynkin-diagrams"
+    "ecgdraw"
+    "eepic"
+    "egpeirce"
+    "ellipse"
+    "endofproofwd"
+    "epspdf"
+    "epspdfconversion"
+    "esk"
+    "euflag"
+    "fast-diagram"
+    "fenetrecas"
+    "fig4latex"
+    "figchild"
+    "figput"
+    "fitbox"
+    "flowchart"
+    "forest"
+    "genealogytree"
+    "getmap"
+    "gincltex"
+    "gnuplottex"
+    "gradientframe"
+    "grafcet"
+    "graph35"
+    "graphicxpsd"
+    "graphviz"
+    "gtrlib-largetrees"
+    "harveyballs"
+    "here"
+    "hf-tikz"
+    "hobby"
+    "hvfloat"
+    "istgame"
+    "kblocks"
+    "kinematikz"
+    "knitting"
+    "knittingpattern"
+    "ladder"
+    "lapdf"
+    "latex-make"
+    "liftarm"
+    "lpic"
+    "lroundrect"
+    "luamesh"
+    "luasseq"
+    "maker"
+    "makeshape"
+    "mathspic"
+    "memoize"
+    "mercatormap"
+    "milsymb"
+    "miniplot"
+    "mkpic"
+    "modiagram"
+    "neuralnetwork"
+    "nl-interval"
+    "nndraw"
+    "numericplots"
+    "outilsgeomtikz"
+    "papiergurvan"
+    "pb-diagram"
+    "petri-nets"
+    "pgf"
+    "pgf-blur"
+    "pgf-interference"
+    "pgf-periodictable"
+    "pgf-pie"
+    "pgf-soroban"
+    "pgf-spectra"
+    "pgf-umlcd"
+    "pgf-umlsd"
+    "pgfgantt"
+    "pgfkeysearch"
+    "pgfkeyx"
+    "pgfmolbio"
+    "pgfmorepages"
+    "pgfopts"
+    "pgfornament"
+    "pgfplots"
+    "picinpar"
+    "pict2e"
+    "pictex"
+    "pictex2"
+    "pinlabel"
+    "pixelart"
+    "pixelarttikz"
+    "pmgraph"
+    "polyhedra"
+    "postage"
+    "postit"
+    "prerex"
+    "productbox"
+    "ptolemaicastronomy"
+    "puyotikz"
+    "pxpgfmark"
+    "pxpic"
+    "qcircuit"
+    "qrcode"
+    "quantikz"
+    "randbild"
+    "randomwalk"
+    "realhats"
+    "reotex"
+    "robotarm"
+    "rviewport"
+    "sa-tikz"
+    "sacsymb"
+    "schemabloc"
+    "scratch"
+    "scratch3"
+    "scsnowman"
+    "setdeck"
+    "signchart"
+    "simplenodes"
+    "simpleoptics"
+    "smartdiagram"
+    "spath3"
+    "spectralsequences"
+    "strands"
+    "swimgraf"
+    "syntaxdi"
+    "table-fct"
+    "texdraw"
+    "ticollege"
+    "tikz-3dplot"
+    "tikz-among-us"
+    "tikz-bagua"
+    "tikz-bayesnet"
+    "tikz-bbox"
+    "tikz-cd"
+    "tikz-dependency"
+    "tikz-dimline"
+    "tikz-ext"
+    "tikz-feynhand"
+    "tikz-feynman"
+    "tikz-imagelabels"
+    "tikz-inet"
+    "tikz-kalender"
+    "tikz-karnaugh"
+    "tikz-ladder"
+    "tikz-lake-fig"
+    "tikz-layers"
+    "tikz-mirror-lens"
+    "tikz-nef"
+    "tikz-network"
+    "tikz-nfold"
+    "tikz-opm"
+    "tikz-optics"
+    "tikz-osci"
+    "tikz-page"
+    "tikz-palattice"
+    "tikz-planets"
+    "tikz-qtree"
+    "tikz-relay"
+    "tikz-sfc"
+    "tikz-swigs"
+    "tikz-timing"
+    "tikz-trackschematic"
+    "tikz-truchet"
+    "tikz2d-fr"
+    "tikz3d-fr"
+    "tikzbricks"
+    "tikzcodeblocks"
+    "tikzdotncross"
+    "tikzducks"
+    "tikzfill"
+    "tikzinclude"
+    "tikzlings"
+    "tikzmark"
+    "tikzmarmots"
+    "tikzorbital"
+    "tikzpackets"
+    "tikzpagenodes"
+    "tikzpeople"
+    "tikzpfeile"
+    "tikzpingus"
+    "tikzposter"
+    "tikzquads"
+    "tikzquests"
+    "tikzscale"
+    "tikzsymbols"
+    "tikztosvg"
+    "tikzviolinplots"
+    "tile-graphic"
+    "tilings"
+    "timing-diagrams"
+    "tipfr"
+    "tkz-base"
+    "tkz-berge"
+    "tkz-bernoulli"
+    "tkz-doc"
+    "tkz-elements"
+    "tkz-euclide"
+    "tkz-fct"
+    "tkz-graph"
+    "tkz-orm"
+    "tkz-tab"
+    "tkzexample"
+    "tonevalue"
+    "tqft"
+    "tsemlines"
+    "tufte-latex"
+    "twemojis"
+    "tzplot"
+    "utfsym"
+    "vectorlogos"
+    "venndiagram"
+    "visualpstricks"
+    "wheelchart"
+    "wordcloud"
+    "worldflags"
+    "xistercian"
+    "xpicture"
+    "xypic"
+  ];
+  sha512.run = "1549c2635af7f0f8f2e06ccfc383a840b859b2f191351f3c42cc3ec9d7ddb8bee9be89e67139f8968e638aafc5630d9c30b4148fba5ee1d5eef1b41f0d879cbd";
+};
+collection-plaingeneric = {
+  revision = 68675;
+  stripPrefix = 0;
+  deps = [
+    "abbr"
+    "abstyles"
+    "advice"
+    "apnum"
+    "autoaligne"
+    "barr"
+    "bitelist"
+    "borceux"
+    "c-pascal"
+    "calcfrac"
+    "catcodes"
+    "chronosys"
+    "collargs"
+    "collection-basic"
+    "colorsep"
+    "compare"
+    "crossrefenum"
+    "cweb-old"
+    "dinat"
+    "dirtree"
+    "docbytex"
+    "dowith"
+    "eijkhout"
+    "encxvlna"
+    "epigram"
+    "epsf"
+    "epsf-dvipdfmx"
+    "etoolbox-generic"
+    "expex-acro"
+    "expkv-bundle"
+    "fenixpar"
+    "figflow"
+    "fixpdfmag"
+    "fltpoint"
+    "fntproof"
+    "font-change"
+    "fontch"
+    "fontname"
+    "gates"
+    "getoptk"
+    "gfnotation"
+    "gobble"
+    "graphics-pln"
+    "gtl"
+    "hlist"
+    "hyplain"
+    "inputnormalization"
+    "insbox"
+    "js-misc"
+    "kastrup"
+    "lambda-lists"
+    "langcode"
+    "lecturer"
+    "letterspacing"
+    "librarian"
+    "listofitems"
+    "localloc"
+    "mathdots"
+    "metatex"
+    "midnight"
+    "mkpattern"
+    "mlawriter"
+    "modulus"
+    "multido"
+    "namedef"
+    "navigator"
+    "newsletr"
+    "nth"
+    "ofs"
+    "olsak-misc"
+    "outerhbox"
+    "path"
+    "pdf-trans"
+    "pdfmsym"
+    "pitex"
+    "placeins-plain"
+    "plainpkg"
+    "plipsum"
+    "plnfss"
+    "plstmary"
+    "poormanlog"
+    "present"
+    "pwebmac"
+    "random"
+    "randomlist"
+    "resumemac"
+    "ruler"
+    "schemata"
+    "shade"
+    "simplekv"
+    "soul"
+    "swrule"
+    "systeme"
+    "tabto-generic"
+    "termmenu"
+    "tex-ps"
+    "tex4ht"
+    "texapi"
+    "texdate"
+    "texdimens"
+    "texinfo"
+    "timetable"
+    "tracklang"
+    "transparent-io"
+    "treetex"
+    "trigonometry"
+    "ulem"
+    "upca"
+    "varisize"
+    "xii"
+    "xii-lat"
+    "xintsession"
+    "xlop"
+    "yax"
+    "zztex"
+  ];
+  sha512.run = "e162b0e32f52ea7ca60d5241ad6f653b29d2601eb05734ca0970224894e1acf3c21b1c160fdea652b8616f19cce5e812d5ba78ef10aa3cce784a90aebea960ef";
+};
+collection-pstricks = {
+  revision = 65367;
+  stripPrefix = 0;
+  deps = [
+    "auto-pst-pdf"
+    "bclogo"
+    "collection-basic"
+    "collection-plaingeneric"
+    "dsptricks"
+    "luapstricks"
+    "makeplot"
+    "pdftricks"
+    "pdftricks2"
+    "pedigree-perl"
+    "psbao"
+    "pst-2dplot"
+    "pst-3d"
+    "pst-3dplot"
+    "pst-abspos"
+    "pst-am"
+    "pst-antiprism"
+    "pst-arrow"
+    "pst-asr"
+    "pst-bar"
+    "pst-barcode"
+    "pst-bezier"
+    "pst-blur"
+    "pst-bspline"
+    "pst-calculate"
+    "pst-calendar"
+    "pst-cie"
+    "pst-circ"
+    "pst-coil"
+    "pst-contourplot"
+    "pst-cox"
+    "pst-dart"
+    "pst-dbicons"
+    "pst-diffraction"
+    "pst-electricfield"
+    "pst-eps"
+    "pst-eucl"
+    "pst-exa"
+    "pst-feyn"
+    "pst-fill"
+    "pst-fit"
+    "pst-flags"
+    "pst-fr3d"
+    "pst-fractal"
+    "pst-fun"
+    "pst-func"
+    "pst-gantt"
+    "pst-geo"
+    "pst-geometrictools"
+    "pst-gr3d"
+    "pst-grad"
+    "pst-graphicx"
+    "pst-hsb"
+    "pst-infixplot"
+    "pst-intersect"
+    "pst-jtree"
+    "pst-knot"
+    "pst-labo"
+    "pst-layout"
+    "pst-lens"
+    "pst-light3d"
+    "pst-lsystem"
+    "pst-magneticfield"
+    "pst-marble"
+    "pst-math"
+    "pst-mirror"
+    "pst-moire"
+    "pst-node"
+    "pst-ob3d"
+    "pst-ode"
+    "pst-optexp"
+    "pst-optic"
+    "pst-osci"
+    "pst-ovl"
+    "pst-pad"
+    "pst-pdf"
+    "pst-pdgr"
+    "pst-perspective"
+    "pst-platon"
+    "pst-plot"
+    "pst-poker"
+    "pst-poly"
+    "pst-pulley"
+    "pst-qtree"
+    "pst-rputover"
+    "pst-rubans"
+    "pst-shell"
+    "pst-sigsys"
+    "pst-slpe"
+    "pst-solarsystem"
+    "pst-solides3d"
+    "pst-soroban"
+    "pst-spectra"
+    "pst-spinner"
+    "pst-stru"
+    "pst-support"
+    "pst-text"
+    "pst-thick"
+    "pst-tools"
+    "pst-tree"
+    "pst-turtle"
+    "pst-tvz"
+    "pst-uml"
+    "pst-vectorian"
+    "pst-vehicle"
+    "pst-venn"
+    "pst-vowel"
+    "pst2pdf"
+    "pstricks"
+    "pstricks-add"
+    "pstricks_calcnotes"
+    "uml"
+    "vaucanson-g"
+    "vocaltract"
+  ];
+  sha512.run = "508276fe37018f3d9773fc7cda0cb37edcdd28e9cf8ab54ed5be16b07c2066de4626a561bbe387c7bba0fb82d4102be406efd721a4b5dc90110b8560083d2b07";
+};
+collection-publishers = {
+  revision = 69033;
+  stripPrefix = 0;
+  deps = [
+    "aastex"
+    "abnt"
+    "abntex2"
+    "abntexto"
+    "acmart"
+    "acmconf"
+    "active-conf"
+    "adfathesis"
+    "afparticle"
+    "afthesis"
+    "aguplus"
+    "aiaa"
+    "anonymous-acm"
+    "anufinalexam"
+    "aomart"
+    "apa"
+    "apa6"
+    "apa6e"
+    "apa7"
+    "arsclassica"
+    "articleingud"
+    "asaetr"
+    "ascelike"
+    "asmeconf"
+    "asmejour"
+    "aucklandthesis"
+    "bangorcsthesis"
+    "bangorexam"
+    "bath-bst"
+    "beamer-fuberlin"
+    "beamer-verona"
+    "beilstein"
+    "bfh-ci"
+    "bgteubner"
+    "bjfuthesis"
+    "bmstu"
+    "bmstu-iu8"
+    "br-lex"
+    "brandeis-dissertation"
+    "brandeis-problemset"
+    "brandeis-thesis"
+    "buctthesis"
+    "cascadilla"
+    "cesenaexam"
+    "chem-journal"
+    "chifoot"
+    "chs-physics-report"
+    "cidarticle"
+    "cje"
+    "cjs-rcs-article"
+    "classicthesis"
+    "cleanthesis"
+    "cmpj"
+    "collection-latex"
+    "confproc"
+    "cquthesis"
+    "dccpaper"
+    "dithesis"
+    "ebook"
+    "ebsthesis"
+    "ecothesis"
+    "ejpecp"
+    "ekaia"
+    "elbioimp"
+    "els-cas-templates"
+    "elsarticle"
+    "elteiktdk"
+    "elteikthesis"
+    "emisa"
+    "erdc"
+    "estcpmm"
+    "etsvthor"
+    "facture-belge-simple-sans-tva"
+    "fbithesis"
+    "fcavtex"
+    "fcltxdoc"
+    "fei"
+    "ftc-notebook"
+    "gaceta"
+    "gammas"
+    "geradwp"
+    "gfdl"
+    "gradstudentresume"
+    "grant"
+    "gsemthesis"
+    "gzt"
+    "h2020proposal"
+    "hagenberg-thesis"
+    "har2nat"
+    "hecthese"
+    "hep-paper"
+    "heria"
+    "hfutexam"
+    "hfutthesis"
+    "hithesis"
+    "hitszbeamer"
+    "hitszthesis"
+    "hobete"
+    "hu-berlin-bundle"
+    "hustthesis"
+    "icsv"
+    "ieeeconf"
+    "ieeepes"
+    "ieeetran"
+    "ijmart"
+    "ijsra"
+    "imac"
+    "imtekda"
+    "inkpaper"
+    "iodhbwm"
+    "iscram"
+    "jacow"
+    "jmlr"
+    "jnuexam"
+    "jourcl"
+    "jourrr"
+    "jpsj"
+    "jwjournal"
+    "kdgdocs"
+    "kdpcover"
+    "kfupm-math-exam"
+    "kluwer"
+    "ksp-thesis"
+    "ku-template"
+    "langsci"
+    "langsci-avm"
+    "limecv"
+    "lion-msc"
+    "llncs"
+    "llncsconf"
+    "lni"
+    "lps"
+    "matc3"
+    "matc3mem"
+    "mcmthesis"
+    "mentis"
+    "mitthesis"
+    "mlacls"
+    "mluexercise"
+    "mnras"
+    "modeles-factures-belges-assocs"
+    "msu-thesis"
+    "mucproc"
+    "mugsthesis"
+    "muling"
+    "musuos"
+    "muthesis"
+    "mynsfc"
+    "nature"
+    "navydocs"
+    "nddiss"
+    "ndsu-thesis"
+    "ndsu-thesis-2022"
+    "nih"
+    "nihbiosketch"
+    "njustthesis"
+    "njuthesis"
+    "njuvisual"
+    "nostarch"
+    "novel"
+    "nrc"
+    "nwafuthesis"
+    "nwejm"
+    "onrannual"
+    "opteng"
+    "oststud"
+    "oup-authoring-template"
+    "philosophersimprint"
+    "pittetd"
+    "pkuthss"
+    "powerdot-fuberlin"
+    "powerdot-tuliplab"
+    "pracjourn"
+    "prociagssymp"
+    "proposal"
+    "prtec"
+    "ptptex"
+    "qrbill"
+    "quantumarticle"
+    "resphilosophica"
+    "resumecls"
+    "revtex"
+    "revtex4"
+    "revtex4-1"
+    "rutitlepage"
+    "ryersonsgsthesis"
+    "ryethesis"
+    "sageep"
+    "sapthesis"
+    "schule"
+    "scientific-thesis-cover"
+    "scripture"
+    "scrjrnl"
+    "sduthesis"
+    "se2thesis"
+    "seu-ml-assign"
+    "seuthesis"
+    "seuthesix"
+    "shortmathj"
+    "shtthesis"
+    "smflatex"
+    "soton"
+    "sphdthesis"
+    "spie"
+    "sr-vorl"
+    "srdp-mathematik"
+    "stellenbosch"
+    "stellenbosch-2"
+    "suftesi"
+    "sugconf"
+    "tabriz-thesis"
+    "technion-thesis-template"
+    "texilikechaps"
+    "texilikecover"
+    "thesis-ekf"
+    "thesis-gwu"
+    "thesis-qom"
+    "thesis-titlepage-fhac"
+    "thuaslogos"
+    "thubeamer"
+    "thucoursework"
+    "thuthesis"
+    "tidyres"
+    "timbreicmc"
+    "tlc-article"
+    "topletter"
+    "toptesi"
+    "tuda-ci"
+    "tudscr"
+    "tugboat"
+    "tugboat-plain"
+    "tui"
+    "turabian"
+    "uaclasses"
+    "uafthesis"
+    "uantwerpendocs"
+    "ucalgmthesis"
+    "ucbthesis"
+    "ucdavisthesis"
+    "ucph-revy"
+    "ucsmonograph"
+    "ucthesis"
+    "udes-genie-these"
+    "uestcthesis"
+    "ufrgscca"
+    "uhhassignment"
+    "uiucredborder"
+    "uiucthesis"
+    "ukbill"
+    "ulthese"
+    "umbclegislation"
+    "umich-thesis"
+    "umthesis"
+    "unam-thesis"
+    "unamth-template"
+    "unamthesis"
+    "unbtex"
+    "unifith"
+    "unigrazpub"
+    "unitn-bimrep"
+    "univie-ling"
+    "unizgklasa"
+    "unswcover"
+    "uol-physics-report"
+    "uothesis"
+    "uowthesis"
+    "uowthesistitlepage"
+    "urcls"
+    "uspatent"
+    "ut-thesis"
+    "utexasthesis"
+    "uvaletter"
+    "uwa-colours"
+    "uwa-letterhead"
+    "uwa-pcf"
+    "uwa-pif"
+    "uwthesis"
+    "vancouver"
+    "wsemclassic"
+    "xduthesis"
+    "xduts"
+    "xmuthesis"
+    "yathesis"
+    "yazd-thesis"
+    "yb-book"
+    "york-thesis"
+  ];
+  sha512.run = "3bef1e82951ac3624c88c3f42e7d9dfdb4aaef71648852a0df777276139a1fa121f640420d5977a5eae99a590a53eb96854dc97b6637bbebf76e63a7c1248228";
+};
+collection-texworks = {
+  revision = 54074;
+  stripPrefix = 0;
+  deps = [
+    "collection-basic"
+    "texworks"
+  ];
+  sha512.run = "b1f38877115fb6efc9b63a5591c399b799f3a258e342d5e198b74b582628461ad67ea7c1ab76e5ae83a3e8e538c62ac3e7c5b3d3f1d29c093331843067cfec57";
+};
+collection-wintools = {
+  revision = 65952;
+  stripPrefix = 0;
+  sha512.run = "8af5c376990a7ed062588a0eb8695455936a92376b94f157d75a22f976f62017999aee8aeb692a07f98a64f05ac98bf4aba79c5f75688c54ad2196807471dc1b";
+};
+collection-xetex = {
+  revision = 64951;
+  stripPrefix = 0;
+  deps = [
+    "arabxetex"
+    "awesomebox"
+    "bidi-atbegshi"
+    "bidicontour"
+    "bidipagegrid"
+    "bidipresentation"
+    "bidishadowtext"
+    "businesscard-qrcode"
+    "collection-basic"
+    "cqubeamer"
+    "fixlatvian"
+    "font-change-xetex"
+    "fontbook"
+    "fontwrap"
+    "interchar"
+    "na-position"
+    "philokalia"
+    "ptext"
+    "realscripts"
+    "simple-resume-cv"
+    "simple-thesis-dissertation"
+    "tetragonos"
+    "ucharclasses"
+    "unicode-bidi"
+    "unimath-plain-xetex"
+    "unisugar"
+    "xebaposter"
+    "xechangebar"
+    "xecolor"
+    "xecyr"
+    "xeindex"
+    "xelatex-dev"
+    "xesearch"
+    "xespotcolor"
+    "xetex"
+    "xetex-itrans"
+    "xetex-pstricks"
+    "xetex-tibetan"
+    "xetexconfig"
+    "xetexfontinfo"
+    "xetexko"
+    "xevlna"
+    "zbmath-review-template"
+  ];
+  sha512.run = "457c4e7a3e2089adc69173950c5d3fa177c6e03c5936c49328bbd3c276d9940ba5aca974aea4b97c5dd51b6ec1ca9ebe28861e730aef63b1312589e0cb16df1e";
+};
+collref = {
+  revision = 46358;
+  stripPrefix = 0;
+  sha512.run = "56c2fda36523ae348bea381d90493238c7cbf5ab59f074437c7b694b441f913e6b58795ca81d2c549fbba01505a8895e9e139a9d143050761bceced2717fdb97";
+  sha512.doc = "2d75180ab389632ec320795d6e6b989d902b82d1cfc97ea3c5113647e605c1eead0d0f5a6733cb692b624f4caa7120959c0b15018e35be4d4894183ad3e4c37d";
+  sha512.source = "5a89f6703ab1818375ff33840b1295aee99e6a36338790014b7ac4b54bd49850adcf73ca793c57fb8159be87417741dcdd6ad3934af8bfde74595367f5e3a9fd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0c";
+};
+colophon = {
+  revision = 47913;
+  stripPrefix = 0;
+  sha512.run = "e85dfdef7eefa2fedd6af7c0b6eb71200485b5190268de3a89cbec8dd15f8e66b3260430660f6cb860e2712d3e20e5a8d0b874592a71b116dc07de6e28161474";
+  sha512.doc = "aba1badf34551d8340f733bb9e365a99c56c473f96ed69deadda917232ea8313df800579cb347e074ff0836553bdeb49f60330883581fb3cc7a3eeedc736d1ba";
+  sha512.source = "8764595f95806d0aa8cd956bdfbec118f16376c936ae457d3d28c072eb8e2d6f0e7028fdb91ab301dfb587a721cc40fae13f56f5245b418413187f8776624855";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+color-edits = {
+  revision = 56707;
+  stripPrefix = 0;
+  sha512.run = "e1023d734b7c8c2c781fd037f29a8c845a45fcd1c62d7880d51755bf943dba142fee040c2f0b9bea2ef6986818b5f67126ff468639c0d962d0a779f6840fb1c7";
+  sha512.doc = "17322e4a1e9cd8cd6043a37e0c06bca019b887aad0100367b0c99b70fe3043d32568b5cf587cb42d0bdfe77cf18bf222fba126833d9a61789bba88bd121dbc4c";
+  sha512.source = "b23f1893840a3a2a8d5a77386515c224656ca0c82aec3eb82209c862ebb222e8a2cdf4942bce3d43f4538bd380f9518fe031f08259dd063578760431a6230f10";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+colordoc = {
+  revision = 18270;
+  stripPrefix = 0;
+  sha512.run = "a4d87deccae89f844a6251887e4d20817837fff4eef9cbd2874bef8890d41e0ab930a3ee55fae9ee46685c6b3b2b3324b54ce8507f1cb10eef332b7a480b94a8";
+  sha512.doc = "a2e5c6699a615651dd31a570ba6524cc7cb3d2f3c8d4b1fe49092dd4c01b40714c1c534f3554fca20fad7c17fdfb7104b699a10677519f57538e239820b6f1e7";
+  sha512.source = "2c42638129705d6e08375298684ff96c867a4deeb1d836ea12f8d6b0ad9f61f6840159ed04b92f2cac4c8d126da3a8e657589635ebd3388b9d457994bbc53a36";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+coloredbelts = {
+  revision = 68747;
+  stripPrefix = 0;
+  sha512.run = "0c2ccc4f77c74e551361b6c479759d10db1ab96bd293926e3fb60c1888e073094c4aed403b147744711b5210c9fc8e0cdb431ef8b778cbd12fefb4f691faab85";
+  sha512.doc = "dbe9cd28b3bdac4b51d080edae7a983900fb2f9c583d7e19d0137d551222d23138862e9acb43de98c2f321d4abee3dbc2e43961f66227a5cf2c639545586ecfe";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-sa-30" ];
+  version = "0.1.0";
+};
+colorframed = {
+  revision = 64551;
+  stripPrefix = 0;
+  sha512.run = "a1e623ec218635694ae31046002648ad840f9f30099e8a7d453ff4301bf2855a47e1139d20760db4d53d69292a0e99ecbfb4b4ec37046d4023ba61249f701434";
+  sha512.doc = "f3dcb1d97f012dbac252b097117573b889d5bb77490d7a2c6dc40e87e7bafc31b09b411fd5f764d9db915b3142c7549d411b28f9cd3adb63a1afe444899e3092";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9b";
+};
+colorinfo = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "63bfe1dcdfd85dd1d7d3c7c8d3d345f221bc90bd34bd75888c361d4de97633b9c14d96930b41adf63370403c858f754e740c53d8100b9eb3c5557dd66e6876b3";
+  sha512.doc = "d871a76648cd57af0bd6bd800ee8673ff07b2572ea514a3806731713d9ec4ab368fba2cf540ba71005300d4e02beb180f8eba82c0b060bcaa7a60e54ae601df1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3c";
+};
+coloring = {
+  revision = 41042;
+  stripPrefix = 0;
+  sha512.run = "7c89a6c53212beaa06d54dc091021c5fd57cc30fccc917ea413d23b0790ec637b6b8e69a3bf1b44d0a9ed24fa1c0dd21608b174c0230a0a94a2e5aed221be033";
+  sha512.doc = "cfe600ff32f680f7b7d3916e5a2e767732a9ab9f1e6d06133afbadc87dc1b8ac420284c75c221ed5b5a81b76f6b01302c5595b69439566775adc18ab11185961";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+colorist = {
+  revision = 68440;
+  stripPrefix = 0;
+  deps = [
+    "projlib"
+  ];
+  sha512.run = "c3a49d415ec1133adfae9b8c5d8059dd0c41d2cc9637a0905494820a514dd6e466a1d114e8d26b7cc8b5a2b197f331a146b2f3dd6a5a4d478f2a71b62dba3f7c";
+  sha512.doc = "6f5abb6dfc10b4e4b952746f84caa489c06e84d0d9dfa7ce9a2cd1de29f19dc028ab4a42cb233310540d70b8862a797420aa9f383d05c3b672574b8a4870078a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+colorprofiles = {
+  revision = 49086;
+  stripPrefix = 0;
+  sha512.run = "49be492e62fcd615b08bb6a32767cac54a9535ab859d2a27d1c84788d4e168df2a10133e5408ab1bd3a802ffa8465a61c4144cd9cbafc6fa98f995cb7af89381";
+  sha512.doc = "ab7cabd369cdde5c2e5108b4d75d71bfa5e6b44d7ecc2eda25509078f26bfbc8515dd10a6dd82adab979170e12552fbecffca1f5bd3a1105db21b31097ec5f12";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "20181105";
+};
+colorsep = {
+  revision = 13293;
+  stripPrefix = 0;
+  sha512.run = "3c6387a4c538235181dcaf7b6c3ac51d2893d35fa2c18d95d85810b778fecaed7ae2337d2b284ee3439f44d3570ee86884d42616539bf61a15526aa711da70e9";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+colorspace = {
+  revision = 50585;
+  stripPrefix = 0;
+  sha512.run = "677f462e9ec347467ab39f3c4e776b870861ed0a38447d61a50abfc3172936c99b468320ad40a5b43713df070434c0b280e2d9d13609e141603453fa7d6c37f8";
+  sha512.doc = "702060f3a2805be7dc472bab428fad866e947d8f700f8357e897443909d555dee399ac857feb1e341875bbd4017e7e456c46c4282def6daabc092417859bc634";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.3";
+};
+colortab = {
+  revision = 22155;
+  stripPrefix = 0;
+  sha512.run = "460225705cfa914efc689df2d3f0c0ef7f5883082195e3d8e29e124726589fb5e9b7fc4679541b685439de097b6b297b803cf08e104ec13b849dbb26cffeaa04";
+  sha512.doc = "947e46ffe5c83c3803e40f0da9a1a926e830e2b24f1d486d158da24bceade870cb1fe580aded3838f895deb238d1615cc0e3f95a05e99800fb1bad87ddf0b134";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+colortbl = {
+  revision = 64015;
+  stripPrefix = 0;
+  sha512.run = "f1c342fe4a90002959283b9b3ef5a2dcfd9b62e6d559f0838ed102546ba8fd55c2a2234ad2d2824b9141a055ba02a9bf2c4b5877c24f5b5dca87360067e94acc";
+  sha512.doc = "c037827d5624448807284af963c9fffc424e258852518f77b3d50792e63ecc26c361f6e504638689dfd589fb73b86f77be7c4519398994bd53c68c1d5dcf6c04";
+  sha512.source = "252a17abd3fccfe0f4fb7ec0f2f0ae79e60bd5e3ae015e85619a9cf9f362a213b7eff2a9fa45d199885f5ed09d990f9c26c22eba722f42b34cd75a0feb880404";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0f";
+};
+colorwav = {
+  revision = 67012;
+  stripPrefix = 0;
+  sha512.run = "1f0ec92974581f7a1d5d36993eaef84d46019a345f1ca9979d0508b5dde7226cdb38e102dce02d404a4d28f8c408cb53cb0b3bc819905935fc9cd323abada305";
+  sha512.doc = "c9d23542ccc17980837bd49012889a8e11fb87f76bdd3c5ea9650177ebe527533cb5ac3631895f2455b094ffb4c6bfa973fddf9f071c80bc52c3c824b1fce471";
+  sha512.source = "d41960edb1e83edb50be56a6eb43025cfabd5fc3a83ae068daba59276e9b5995f25804311398ff6874038587165b6c236dc983247f52399ab55e156417bf7adb";
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+  version = "1.0";
+};
+colorweb = {
+  revision = 31490;
+  stripPrefix = 0;
+  sha512.run = "dd8e53aa707f1e73276cca9a9c5732b012ca7dcb0926d101c71aa5fe3829f07251a7f606accc95266f6c9aa4b867a38cc654ca97cc32857edc3d196b2c5a7fd4";
+  sha512.doc = "b1ae7c14f2f07405b7a957831b60829046b058f6d1640051cbee877100c98a8f47d2c1d40f60599c42ff90eed246248b4f48dd8c1d31f9d45082f9ec5c341626";
+  sha512.source = "4016805ddde5974257fc9f20a0f4a8e40b12d059ba74ed6425f206c4b10127596d579dd8c057e85289e32dc1652b2258f6d2590ec6d4cb10c72aa4a874158275";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+colourchange = {
+  revision = 21741;
+  stripPrefix = 0;
+  sha512.run = "dba4ef8d97324c3da71de1c6a37e268618bab0a876e1da37226ec9fb187087d39f32507e97f4ab4fa801fd4bbb98c51a322c6f2493b719133154b24223bfba46";
+  sha512.doc = "628bc515058108ba97312c15ee5af00e086ea3dc124b4e7b038b176d4175e2146afc6f571593c006d749634896fa286d16c923c17d4dc9e55e81ac3a8aa95442";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.22";
+};
+combelow = {
+  revision = 18462;
+  stripPrefix = 0;
+  sha512.run = "17f1beb58a11f3c754c57331d1b2d9338fee359b6c27cdc0a855671397e78c0b2d29ba60247f3104d3eece22619671f56d2aac862ac404502faaea08f40d7be4";
+  sha512.doc = "82d8e60a5cd8d46b952aa27dff03398cb6e65a1c5a76c1eb260d3e30172af89206a7a8ec7ab3871d5e33e87ccc2c99e2f54740facfd71d43ea6f88821c9ceb2a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.99f";
+};
+combine = {
+  revision = 19361;
+  stripPrefix = 0;
+  sha512.run = "9e57b01fa0a14556473764144dc3b5e4e3d40a7f913932b02826a68efdd952adc69e990ba75f6b5057d69850d3e693e1c5b5c40d2c3443aab2741ce9646d522e";
+  sha512.doc = "4e09fd0a9b587d61da2c6a15579675b9a839c83f0b38b0f958b2f4aa2c0a49adf93730ebafa235043cf645d6b8689cbcc5916e4bba92b5e30ac87a8282402859";
+  sha512.source = "25df0ae6e799710f575de4aab975f774f53abb28e627547cf61fe68a4de18cd1f9fa3a8cfd242ecede15e6363734844a8ca37b49da7bb4efda6bc90f4f1da168";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7a";
+};
+combinedgraphics = {
+  revision = 27198;
+  stripPrefix = 0;
+  sha512.run = "22d36d3a44fbbe5f11522f28e716be862d354998750492d014d86037a24407a748248571e50dc99a6fe5518d8ecbf61ca657407194a43b75510b613438fa4b65";
+  sha512.doc = "4802871f57bbc131c850f89eef43778ed25a9abb0a850dac0e91e762b7a321567348f147ae02847cad4c226f9acf2bce921f9745832d1dc298d751b8123741b4";
+  sha512.source = "248524984e09cfe3a2a6bafdb0011d3470035243807635dff3ee6e6bd5c7d2ecb0483e7ce069a76f1589dc5bc2da4aab2ef94ce9ef587915a03d285bd95965ad";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.2.2";
+};
+combofont = {
+  revision = 51348;
+  stripPrefix = 0;
+  sha512.run = "838f10474c2e89f317df4592443deaec3d1a3310f7bb2b458c2a1b29a03013c4274912020ddd9b5807bb6018b6564c11df7b14b8a6db556e8db58dd98049c002";
+  sha512.doc = "ab322618efb3cd8089e9142a28800d34724e499bacbd0cc4a0db14a409bea3cb355f50d412f92862f53c0a5f91fef8af7b652b21be0596cc9687e4919f5122b4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+comfortaa = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "6b851b6c56ef5b6ae6e59c5a3606238671af34963c5dfb8a39a9bd6b84597f673d12963abdd687013f11edade4fb9ae37794a4789650c38c29f64bea1d41dea5";
+  sha512.doc = "b1b4efa42012646538316af9bdd5c724f285aa784e18e85a1239376dc02cf1b79bf43bb0ce07a822995a82811eb6562e6943aca0b903f9241bda088ac0675fce";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "3.2";
+};
+comicneue = {
+  revision = 54891;
+  stripPrefix = 0;
+  sha512.run = "5dc900d215fef53fe69ffda6e9120f1230173f40d220c71eaaa3d7eb21610b214591bdc043f27f0fe5259daf2a800b695167d2deee1810a67045997aff7c2a76";
+  sha512.doc = "24baee44951d9dc6fd70b6b6092112a1d7d13c394eeb495162c3f80444ebd799b526acf7b7c86b7590afc9f5f6efa97c10b661ddead6ca11a168325c7c840650";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.2";
+};
+comma = {
+  revision = 18259;
+  stripPrefix = 0;
+  sha512.run = "65c21bca8e6a707697847ff96d1cd909cbe0c7d33140b4b175a2e3464c1c67827cea9c9f65e45dfcd31fcf2fd94262daa907358341fddf351241753ab47ac99c";
+  sha512.doc = "b25433b52a32cee71043c1f13d2ca45beff32733ac24259f767b6093f5b5f38e0da3c88569bcd637267397c49d26e546c26454381cf916040c52a2833b02df65";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+commado = {
+  revision = 38875;
+  stripPrefix = 0;
+  sha512.run = "c5e48910b5e685c792b9dfe191cd8666472e24e7ef6d6c2fdb3bfb05b2f39f4d4ca68cc7b859d07f50e5d596250e36e1664e1ca48666b0e3126eb8c91d27c384";
+  sha512.doc = "457d03b34ba53988ff287060d18f993f8e01ca99991505c5373abc05cfdde4cfcdda8fbb6dc3737e91c66ef0b30c083c31e64e326c08d4959ff8ed1a66cd4d33";
+  sha512.source = "e0f280bd901ae306f17ef58686345ca38546fd635dde274456af67f41fc05523a91c1f0c0a2b7f433c992193a6442f870031459071a5d7fd6c12f68728f24809";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "r0.11a";
+};
+commath = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "68c25e035e211107c65eece91bf84d65f2328ebaa3dc81d70186707c081f865abcb1be383cecec7d780bbebf3f565647406d6bcfc2c6bb3e846058d50882a6b0";
+  sha512.doc = "5d1d162cf8fd6692788bd15e2d3c2021fa6ed96f289f2c17e9d7e9d2afb428030f0d016f4b4aac62aebec1c8988aa1a978f71bdc7f4873e181f1b2ec7e0f6d0d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+commedit = {
+  revision = 50116;
+  stripPrefix = 0;
+  sha512.run = "7a2248fc7c3de4755a68dfb769c0862332f41945a5efdac8f0b9911c3479bc45cf72ef0176d8d2ed2abe127aaf388c17c90d1f58cfea4aec8bd9e488f2d96c5f";
+  sha512.doc = "b8c6fbb8c67aeb878fef32bb6e61dacdb3ebf9bb7ac92bcdb685bccfac8129ee3145d40ae579ff77b097fc81ebe0438ee5c50c6bc3df156910a287b368728c6e";
+  sha512.source = "19db6434ff564e454ca44fee29d22bb6a930b9f51f54265955565fffd8a7a4a1be89e3475c727a47c3723da99160f4d9ad9899321913d8739821c6491117c843";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+comment = {
+  revision = 41927;
+  stripPrefix = 0;
+  sha512.run = "36b5b4c4d4345a4fcf706f5040c02c2de52567fae76146a06b7f084d59b12d151e65faba1ee4aeeaebee018d81200c2902feb81ae575de35a68c00fa14ed6ba3";
+  sha512.doc = "d5a360c6a0c549fee1d46fa0e9c3f9aaaa4b19b30ac48046e736008ddb42393062824950684185175f8ab569cec221bc8f9a798a07623dbe26cc92a3fd6bc72b";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "3.8";
+};
+commonunicode = {
+  revision = 62901;
+  stripPrefix = 0;
+  sha512.run = "a395e5ad2b08ffd1a29b99c66b65ddb7ab3d5207290db71ba85a0058a5404f0366030d229c5c4bc8a4450bad0a0da9fb5f6d374be2c05cbfa7a8217fadca7b11";
+  sha512.doc = "dcb1071fb36eae56f6aa8b90e5b88ad32566a5dd410cf9f25c157789fac73d38d24965621f8517980cebbabb957a62f3dfc9445e00c83ed0fc43a11306684029";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0.0";
+};
+commutative-diagrams = {
+  revision = 68044;
+  stripPrefix = 0;
+  sha512.run = "896235dcfbe5fc65302f5473b8821a2943ba3bce0c5b410aca855f48fd2ee6dd1b39667be7413aab027e0b36b3cad9735cf6b8406077b0c833f025fe41a83d04";
+  sha512.doc = "49de0a9e52308dcf0b5ee7ca5b18df49efb3822ab2a46024e787979abf6cd682b180a461868c565b79607b301ef5bb65e9493bd27d9cbbdbe4d71472708fc01d";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1.0";
+};
+compactbib = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "dbc3bb28178a656b400a2a72e48ec813d6e282ddba7c70bb4dd0b5ed7f76e9e0be1dffb0ecf43e4893210453ef420c1b1d859c287663cad6bfe8c7f46dc8d86b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+compare = {
+  revision = 54265;
+  stripPrefix = 0;
+  sha512.run = "16d6ffeaa66c1165ce4c6795ff2f73e0cc5a811045198db6e7aa2556bc6ff8b20883478011fae9f06400475f9a96a57fea34f7513b7fbbb392aee03dbd30ad01";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+competences = {
+  revision = 47573;
+  stripPrefix = 0;
+  sha512.run = "e5b2b3a77418d5bc55e8fbbc68c39b1852ce6081b00bf6115573ac29cb7c2b8fd70392fda9b04edca5c3aa1617424541fef2da4d2f777c433b8ee168e850ad99";
+  sha512.doc = "8a0078f2a3c32f03aef58a5d1ba4167ac4c738103d65cad9a5f4bae67aebcce3cb7a16d6aa27fa7b83955c95b28c1f70a0404f5633e3231c3b6d4232265e6c53";
+  sha512.source = "2fb4c80d75808aca093a664bb2ef152cb4ca6bbf1ba0253c2eeb6ece3cdd2299cf7f183423b65f47655128c3b374eb756cd870cc24034da7aaae206216e79fef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+complexity = {
+  revision = 45322;
+  stripPrefix = 0;
+  sha512.run = "352e1a308e159e432c3123afeba8b173b28e164c81b4874273ddd3f8bb8c8866ef33ba7c06e061d52a3845eafb3307b045b82c9da5ea6a812f3808417fa074d6";
+  sha512.doc = "2ffc63af2d86b7dc121c6e122ee1d23387c4c73a6ba65b226413671b86644d0cd9e9ec646b3eef49d9c4b2d64575d83ff45f3691337ba1dea6835945ca80de13";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.81a";
+};
+components = {
+  revision = 63184;
+  stripPrefix = 0;
+  sha512.run = "e7f8aebb11919cd389648b1417c9d43f163858b7de28592998636a69003274d3825bb23f8faa2c29101d51343d9865780523cd95a2a014433399e2373970a116";
+  sha512.doc = "f64c61df38424c72abbb778e7e39023193562228bc1eaa3f683bd81f3eb61075c4948b75a47d81946f4acf1cb5affd242309b95a248240ee413b8dd5dcb40a96";
+  license = [ "gpl1Only" ];
+};
+comprehensive = {
+  revision = 69282;
+  stripPrefix = 0;
+  sha512.run = "3a95484c972a27245694364364b16545069e677eba8e84bb1e3d743ec37ef4427dcdac4ea507df41d90c155bcac48b346ec3e0e985c5d447fce05be5a9a8e418";
+  sha512.doc = "0534af854d41a22af152ecc0eed7f0d835525d4508dc8cf7eed131a88958ec2024d35d80002a77fc09a2df4ea428514edfa751f889c1b90740344bf5025f4b59";
+  license = [ "lppl13c" ];
+  version = "15.0";
+};
+computational-complexity = {
+  revision = 44847;
+  stripPrefix = 0;
+  sha512.run = "639ae984ee1b581260434ace517d8209843127795e674af045ddafe16838946bebbd2dbeded45fddf62ec0a49b1a30492db0cba4ad1e5bf65530d1d5a5df9198";
+  sha512.doc = "9daf1691d33bbf00b67b82cc29de0002e1aef968cb1f182bc3d722082582ed7e60945f74675b48a87baf67aa9f5fee4a167bf1548d3312492a8f570feda93ac8";
+  sha512.source = "37d9b700194fb1ad6cd11fd9008aa1634a6b425133365819b5f76ec349a962e44ef43e8c18572fec16bb4f7b44fea29bcb4f01936016486c3eee4d44ddfc5ba2";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.25f";
+};
+concepts = {
+  revision = 29020;
+  stripPrefix = 0;
+  sha512.run = "2fe917ad25df3b14bd3a20566b97a7ece0f87f79ec7ef10bcafdffde1834f6fc4bfa6775a7ec8d044e5f3ad241913b2664a7a5c25893e9406de26c0a1008d25c";
+  sha512.doc = "5519f645d55e2a3e4e5f9156bdac2ea9e4ad4735ec9104255e75ea254f45b135f0d635322cf46a5536e8600eee1447ab48753763a4c89310e92d51c94c4fde80";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.5-r1";
+};
+concmath = {
+  revision = 17219;
+  stripPrefix = 0;
+  sha512.run = "1e2fd3339fd2bf2a48967102ca42c930ff41a5b4a9fa850cbce6aa2ed701ab351a5dfb931ed80de34aa13e18ab2b01fa2893f981fc671d6399f4d55aa9f8ea40";
+  sha512.doc = "05dbb0a6d89d3f72f3d77824670afb29e6ea8dbba6d37255f6a36006a6a6b630fb56b12815ae3075c41dd698d6a85c6be7ce1dc2da9b3b69b636fcd8c4855a84";
+  sha512.source = "6c4a5a4af907174df5fdeb77f0c4d0f554c2b8ac0d95031fe98f4a748bc4a96c7a526e44229174ffaccdec5bcf086722b355b3c4dcbc4441e1a67c91a71376db";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+concmath-fonts = {
+  revision = 17218;
+  stripPrefix = 0;
+  sha512.run = "65b3f7003b8aaaf6565bea6a65da11f42dca2283f1d53710f4b476a48ab39ae6fffc1d0f9206e23b66047b572c28e793e1a75d047f1c1a892fb4e7c17c854741";
+  sha512.doc = "7b2db9b8f2f23816cf413676dfbf6ca3413a39bb20cbc12070b9202bd2e98714a86dcb5f27a746ae197efd2284eb794f06af1b2941667abfddb72773ceb61378";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+concmath-otf = {
+  revision = 69005;
+  stripPrefix = 0;
+  sha512.run = "3ad91e982f5a46ffde4a24c2c16233b671c4ce55f78afeba4a538e9437171a5936cdbcac56dcac357c17a188940150f70b475e37b4eb5f2416c9c00a970fd87d";
+  sha512.doc = "7ca90916cab639721f678b33d341c9ce253923ec4ef78d5a1246c9f79979aba9674579f2e8eeeca6b6fd2c0de3d70e3d44b8be572e5f738cafc408337432baf2";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.61";
+};
+concprog = {
+  revision = 18791;
+  stripPrefix = 0;
+  sha512.run = "f650acafa4ffa424451f338d6432d665ff679396ed367650d360adf699d3b1e7d8d23f5b3fd070440cb4d6578d07978bfd02960c1219eed6c8594f110708e5cc";
+  sha512.doc = "bf4d76362f7a764ae4c7937edf05a575b3faa8d6919c6c857ae350b742f53d6390546263d14958dbdfd423c9b45a7f9eebe862a00378f51c754b5fee65f60bc0";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+concrete = {
+  revision = 57963;
+  stripPrefix = 0;
+  sha512.run = "9bf9621c120f831110f71cf8d53ee5d4d42869da8c9b2c653125dd6cb6eb9b8d264116645753ee34dce1076204e008d9e74bd0596b46ffac596cc7726b0c75a9";
+  sha512.doc = "c70e9c299e69daa29e9471293b59ed4bf375b8314729381c1973c5390ec5d73b3cffa16db8864e8d84466dbd078179e98b2ffa3e6466d67441e30efcd02676fb";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+conditext = {
+  revision = 55387;
+  stripPrefix = 0;
+  sha512.run = "60619cdd5031d0fbd2f9e4e8614dacf8f439282787f6230bd2662bad21607720757a19ab27ef783a36a6a19299d5960fb786d8cc787e471a46e89f8cc2e7c866";
+  sha512.doc = "3949b2f03c86a922d306cab525a5ca321509d64cfd73b99a39e3404800f63f15e262921e2c1e8eedf98ba2f6cbdda00dfb14e54198af5b7438afdea4572a86ee";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+confproc = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "b6e054332f7f6a239a6eb102ae4b022f90d9523628a293517b1d070602290bea8e623379b5c246fcd5b8daae29c9d32d02a8a7637cd704ede5b1b928de4536fd";
+  sha512.doc = "0bd697d12f1740257e89cd5853aac7340659350a6374c32c5fc22da4249ea08b7e176dc499712f4c2cac6641c0161394ff0433513f7ce1942d50ac69021c14aa";
+  sha512.source = "f8530a8106931edceb4c5f0b87022092fc85368966e5029ab25e9f2f19cf95a3c97694dcedd5a78d707b4d9e4a9f358a6bc4f92084a49dde7d6100b50e77fd1a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+constants = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c4f807315c7f95fe7945e937e750ea18c346a8ecabb80a39922a9b861e3cce3956db31c55e68a0d3417406284d7187fd3b1d1c336c0a130eabb07e4bb60503ca";
+  sha512.doc = "2712e46552a8391b0f2a95991368882a393007788cebabe7ed6c5a604eb2085b4bf00749c6fde3c88028904b7117cd4865b964d11eb443c6939e734495d4df2b";
+  sha512.source = "6ea97687aa1f8f1772ba82a09b251c557b3cbacd056a27fc45412c9d72161d04814c9478bc495ca78ba2f8796ba44b3c29ff70f94382cf173b3e6ea2eb7dead3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+conteq = {
+  revision = 37868;
+  stripPrefix = 0;
+  sha512.run = "ee0f344ed0eab872aca3c54422f83a6f8bbed2462a22cbd54dde075ceae79dc5a01ef13947327ec726d5eeb64eee5519e4074c138f4d172bbf2b4024eb88ceff";
+  sha512.doc = "edf52893cef8c5f8538a64d626a12725b043c5f0106a63f02cad91df9ad632009cfe3da51149750d4c23c12742c00052b951ada957b89641d9a0da59e93396c8";
+  sha512.source = "d3796e7bd679bd64c59a8d16e50ee7e190f9fe3c0774ece399486f8d5df7f6f63ec8a0c595572be305532c66b94011a92bde3bb5850f2feb4ec162e3415b5102";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+context = {
+  revision = 69131;
+  deps = [
+    "amsfonts"
+    "context-texlive"
+    "lm"
+    "lm-math"
+    "luajittex"
+    "luatex"
+    "manfnt-font"
+    "mflogo-font"
+    "stmaryrd"
+  ];
+  postactionScript = "tlpkg/tlpostcode/cont-cache.sh   filew32=tlpkg/tlpostcode/cont-cache.cmd";
+  sha512.run = "5dc3ab5f5747a0d69684ad61ed86f508411357abeb52e01d1cba256024c370309d2f4ccad1076d1337eb35f7b10f8bb31f5a51219c4f8ad4795ddf4617b158d8";
+  sha512.doc = "7c440d9924d68a4abcd9e404b3516ff696ff215c44f2bc81542bcafb69b92bc73b4ee173c5e90dc2de7405b754fb1c452e76b7b71fe623c72d794dc0b966bff1";
+  hasManpages = true;
+  hasRunfiles = true;
+  hasTlpkg = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "free" ];
+};
+context-calendar-examples = {
+  revision = 66947;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "aae09b844ae244839f82088ffbad9c777355696023fa95c24221b6ae0e4ac6dfce6a4d70efe9f09d5e5dc89e6e7a17d98282a77b90697ee6a3496ed0568734b4";
+  sha512.doc = "62a63d54d0388a027cb6afa58141a6fc303fde6cc0f989348fe29fd10e825a03d86ff682f480723b223b606e296591cf03092c886cf13cde03463ff8012caca1";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+context-collating-marks = {
+  revision = 68696;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "dec8338854260467eb5d6542d4561e38a87183290e53e75c3fa188fc8f537a466ce4a5974f4f5644b9f2e62591cd4e8860f8e2b314c8918ae45e90e00c61ba4d";
+  sha512.doc = "6a5d88d6091e95025e7a4f12a6e831e5bf462156afa06c7b49d35086f9b555ed8fc1ed9cde970146106f3efc29b70bf0699c1b5eadcf970c1f8978c46ad590bc";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+context-cyrillicnumbers = {
+  revision = 47085;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "14a90656d706d68ce441301aa6bccf2033c36f9c8d8605ec9dedeeedb71a5670dae325a5a198b2ca25373eb2b495e57fff31b85089c6c0fb987738c76ac636b2";
+  sha512.doc = "d95b1df26033aaff0a9f6759268ac3e68bff02556001e3f9b2bae1db68aa13c839a87047a6ae0a296f8e5817398ba35b7cbacc4f194dd93cf72684904190e7e3";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+context-filter = {
+  revision = 62070;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "c2534b543fd5444776a054f43fafa393040af5bcb67f869d61d200a4a1d0355f1d81c64adab683d15a6be806a21dfc9ad661995bbe51da3c0bfb841ade4b077f";
+  sha512.doc = "a9c2ea88b0e2514840c368ea7686894dda4b86c93ec8f34989238ffdf5704f1c1898d0ee5e0724035314d2d37803f1a1afdd445dd802a94f5ff4223148f81767";
+  hasRunfiles = true;
+  license = [ "bsd2" ];
+};
+context-gnuplot = {
+  revision = 47085;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "d3d7dce105707bd8fd903038e458cae614ec63da7932231e1f659570ec3a7960ea0fab338a8405f2ca8ce8b03946b58db8255333d2a4ab5a659566f4d272b0b0";
+  sha512.doc = "40e471b27d53ced33590792ac62992a220357c6db1c78cba901197362a36817bc14b049f2573ee2e5b5adad5182c5bea2880c4f7a2477bcd1a06ee7ccf88b0b9";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+context-handlecsv = {
+  revision = 69186;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "7142f762e76a00a0ed7821ba67f09daa9900977dd643ab5249668d385896e87aff71b0dfe268389599ca75a22618638f4d873965bcba94f7fb4ec684d46986fc";
+  sha512.doc = "bf2a7b6498743fa148653e8634099f7597dc8a383f88e15a0605c6cc45247bc0521a1e57c879bf4212e22345f7482f734c741bfac739df1977f1f140b6be6928";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+};
+context-legacy = {
+  revision = 69173;
+  deps = [
+    "context"
+    "metapost"
+    "mptopdf"
+    "pdftex"
+    "xetex"
+  ];
+  formats = [
+    {
+      name = "cont-en";
+      engine = "pdftex";
+      options = "-8bit *cont-en.mkii";
+    }
+    {
+      name = "cont-en";
+      engine = "xetex";
+      options = "-8bit *cont-en.mkii";
+    }
+  ];
+  sha512.run = "79783a6096e3bbe21eff5967fa3ed4edffc573567bd027a59c40fbd1f5e3cfc7d0c213ddc9fabcdecd596bcbc9946cf4255edc4237f0148c89dbae7744f3f508";
+  sha512.doc = "6fbf5f1194771c9dc4a19b49aa343656bdcad3620e14a68a0bf9d05cad8f8c813f717b66b12526c2f11a87d4ded75e1cab56d3e72ca1cabe81c9818aa11399a7";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "rb"
+  ];
+};
+context-legacy.binfiles = [
+  "texexec"
+  "texmfstart"
+];
+context-letter = {
+  revision = 60787;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "558836a8c95743270f627a18dfe7a29ffc7a2eaeb4cf663d589ef5c07eab4dad6f09db31511379c90a41d1e9e7da5766e8dc3c8bb0902fa06bda4fb33caa97c9";
+  sha512.doc = "94e1bf68371f3e8c426cfff5c471f93c86ce51fdd92dfad59669d32cc73d86de606113ece55d13a0f25ac4a26f16916407de9175b84acc79ba107156c20cd20a";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+context-mathsets = {
+  revision = 47085;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "e4c689c745d06c61d6f693a9832001aa8c79d51664c2a5d6d0c6148a95b30870063f50eecca31ac0924193c6dab8c12cd5ccaca16eeaf5f83a99cef1a8889ec3";
+  sha512.doc = "f2c33244814da8e8838483038f507fe6b3e146f37691e55a37bb5355985d2af4c5fc423318133c4f13837a3e66a4fe72d5c14f6721bb5ee0417a59691b86d3f1";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+context-notes-zh-cn = {
+  revision = 66725;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "46be6b5f9f86d6da5514f0ae0cd77aa9beab67572699f9779f3a6cd461a8600336103eaf71d6e6d99fd7ac300a3e5fedcd6e378d349cf648c9aa5a8be2aaa5b5";
+  sha512.doc = "a49b1c85508128e0a2e9ae0218e3622f7479da528f51380c1e109bf877f401531689e8119cab3bde6a91e507f0bd7f16e334cb3affaba7fae5927cc23b17a207";
+  license = [ "gpl3" ];
+};
+context-pocketdiary = {
+  revision = 66953;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "fd90eca9b9642a16aa203984165302b111d4058ed970aab3867018f48d16884fe543d3067a0ad2fc2c0e2684924ef11e9788a7deacb20ad06d7451dc5b19383b";
+  sha512.doc = "a78ed374f6a7ad63a93aef4c9cb2ecc0937c2e3df821c543f49a3ad762ed6949a7d1c4c5a03c7cf54eeb0b9ad891a18c5d10b97a42bbb840c74fef2bf8f14cfb";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+context-simpleslides = {
+  revision = 67070;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "083b1f0b70a74a3648501314fa993632534f476376fb80eb4444b0273866bf4a4d562e4bfffbd14ed79be0020361ab6cc5c40fde1f99544b76d6f33939781f19";
+  sha512.doc = "e7a410ec0d99f945dae91c041b396875a6350aa06333f5a5d2d7aa4c6bb62f926ec53a27a1c95a724ce7b320ddef11d6550b0b92a34c00ac63c7c0da96a35928";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+context-squares = {
+  revision = 68545;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "1f84f3131d67e831b31eaeb60939e467031fc080b32bb4c0d52439c1dd7ec7fe5768d2f2bb1f6dcdb25b1b1e4f9455aa83d5dcb3a0d1954aac41a79b0cb0dfae";
+  sha512.doc = "e55bcb462d1aa0aed9563d01dd53f9062f8463d7cd06a42720f3930656edd0fd818f891e43c622b753200ac2ed32f45d21900208f69999b35474f6e7789a7b5e";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+context-sudoku = {
+  revision = 67289;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "b33ece74cc5578c4dca8df816715d7106b674fdc653d149992cf637b11799a21eb03708c0efcc79da9d4658c5f8a801c6bb32dc681f43f3d4b3900dfa588ca99";
+  sha512.doc = "e7f9b6c0ae6bad729074ffb2e4e1673336954adb9013ee6525e87715f3d22720efbe1f7e2cb6b695e01940a4d7f58489889612749ea2f4dbcba3ac6faaa741c4";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+context-texlive = {
+  revision = 66924;
+  stripPrefix = 0;
+  sha512.run = "64abf080ecfd9cf68f2ef12123ca6ee976d6fe3cb8382d34b32f424a1bfcf9165142bab2c1a9a1f394e1ed4bd53aaf2875363e7f357eae48ba00ddfc894e5d1f";
+  hasRunfiles = true;
+};
+context-transliterator = {
+  revision = 61127;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "f919d3f9e6ab25932cfaeadfc07f86ebdbe00d84dc21236e4775930fc3866cee69cf9a25d373e13655f4396a3c395ea6ea103a28ffb4f00a4e95b7ceaec155c9";
+  sha512.doc = "8473c1ca7b48009055f5c33031ec60f80d84dc43396789b0c0c7e6d65bcf014a237088dca07211beae4bfb80377f55cf12a9f379995cff50f52143fc4bc81295";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+context-typescripts = {
+  revision = 60422;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "a13d06b9a792cbd2352016df508a7860e45b541d04cef1c9d9c8b5a6199120a71dfd69f990700c4a76ac31ec11209caef431a190b9045bdc46cc44f88cbef0a3";
+  sha512.doc = "3d948f22da14b1d481817477235657cee714e4a2a69834729c20e18157f1175890ddc7fce992e8f5f27e26cd6d08186ff1521e2186681557cfff1a4778267324";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+};
+context-vim = {
+  revision = 62071;
+  stripPrefix = 0;
+  deps = [
+    "context"
+    "context-filter"
+  ];
+  sha512.run = "12100c7aa3eb555cf9dbe72454a96e63feda52329a8a192ff86ba30477acab4ebaaf84c15a79f16d4e3f95cef02baf8146e5810b8c9e8e94c25ba1317bf4fc2c";
+  sha512.doc = "0f49e22b9e1d465f46727a9e952e095eceab55e77a2559fe497cf14690377f77ca42aa23ce7eaca659e9b0983e5a950b36733eef49b0473fd33a8f783edb43b1";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+context-visualcounter = {
+  revision = 47085;
+  stripPrefix = 0;
+  deps = [
+    "context"
+  ];
+  sha512.run = "da7799ee31a4298f8e8cb02cb4e480fa49fb4188b776df877648c663c93523636bdd7fa6ca5eb403fc8f3483064bf223fed042c1d27eb0817c224ddf8e21c673";
+  sha512.doc = "1788355ea4109e7e2bbaa9bbc3798f60a814d549d082638a59a453cc5fb39b54ff8a00471a28a96a5501e91899874ae19981ae0f8a09b6353d19275b851b9f80";
+  sha512.source = "39bba551e9f0bb8d70c0b60a2b0fba3d7cad30555d4052fc6ae722bfd9cb79d5cca784474a9f1847faccccb1618662bc4dd2fadd1fdacaf2f4cc9c035b5501ec";
+  hasRunfiles = true;
+  license = [ "bsd2" ];
+};
+context.binfiles = [
+  "context"
+  "context.lua"
+  "contextjit"
+  "luametatex"
+  "luatools"
+  "mtxrun"
+  "mtxrun.lua"
+  "mtxrunjit"
+];
+continue = {
+  revision = 49449;
+  stripPrefix = 0;
+  sha512.run = "42cda9a2796e9006263320163777df7046a79e38cb2c0ffb53f23c27cc03c686e00e39b066228b09ca99a6e5c2bf4a6cb32d5d7c49b40cf614c542e258968ab9";
+  sha512.doc = "0b6bbf7c3123b7e741255bd3ff9e020ec61bcb81a236ddec41e709f14de514057d9b902ad783f48e5c04ba1ca6daee31a38f130649cb0e5b2d548ca9689d5dca";
+  sha512.source = "790671ec666983e4ff5ff594b7df54cdf7c9d136d57f9004f5400857c3001ffbd3a13a5fc559f3ab75a168c66fc5aa2ee3b5702e5ec417c9a31a1e65d18b801f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+contour = {
+  revision = 18950;
+  stripPrefix = 0;
+  sha512.run = "0dd4a28f97efcfd0459595776cbab019168fca48984d78f9ec17e0f3af9dbebd378adc6649bce6a9a999651c75316f3ff44e0f10e208465dda2d904d080c41d3";
+  sha512.doc = "af1c649d2e5666ee3973395babce4802da2154ba95fa7fc08e378c261a8ea1c5be44053c40c5cc1bd0c74e2c54b659470c3d45063fbbd4330cdc5e664f19bff0";
+  sha512.source = "377b4a92031cd957b15d232cda9e4c2e7488a4c71624eed06dc2edf9dca37afc11e18691650ea377da2dd78b5f636272eeb6d94bebd99ad5ec1ec477f7b65784";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.14";
+};
+contracard = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "eb705425aa67034ddbf4390165a5f6a9690c67d34371a720298843d1c7292655bcb59a56364bdb510608d48b6590931abd68216fdcdcd8be90eddfbc339ce28b";
+  sha512.doc = "046a38d7a11edaa8f67648996c31e481cd818b79afb1f971afe459b7adf0bb3d4f5cb0afc3903177bfc0b9b0678336a837002f8db486916afc24445a875c3285";
+  sha512.source = "67bf64418fde78f9ea7288f47efaf50970f133325860f0283ed2842f58394417b4e8ec8f0180cde60c9bb74cd1c797aa6f89afe3fd033676681807cd25d5cebc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.0";
+};
+conv-xkv = {
+  revision = 43558;
+  stripPrefix = 0;
+  sha512.run = "7bbbcfd71a32704f2383289d91fcc1b5993aa9e184f5d974f6dd5592312e85848a926ad9e6f412bef801daa20cc2b9c999ba137b9b24e31facfd6931309630df";
+  sha512.doc = "c1c923008185db09b3e7cfd90bfd9b33ca2a61ccc706b0f9cefb238e0860120da517fdc7166e4fe476a1cc02cb4a7a3fe4c9b81c87c8de25ddd1c0c417dcfca3";
+  sha512.source = "edd5feac4453010dd996edbb3741339904b0380c021f9429933f6b27df6d9c002d593d617467043ae6087de3c5842fb7a4e8ccfcc95c7763e124ab5f5c9dc024";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+convbkmk = {
+  revision = 49252;
+  sha512.run = "01bb9621459bac7eecc99b1d9aa59de420ba805b2e0ecdb2a89f5c86fa4a3021d957b4ddc69617ea406e77865d68e40c657979c488fc51f4676d084cfe6181cd";
+  sha512.doc = "937d436cb9387eac601883ced516fa40f60e606bb4bae0be62e1ded2a31754a1d00461a34ad533cce1cc48f4d11e880233eaac128d80841e0b22f18801e86506";
+  hasRunfiles = true;
+  scriptExts = [
+    "rb"
+  ];
+  license = [ "mit" ];
+  version = "0.30";
+};
+convbkmk.binfiles = [
+  "convbkmk"
+];
+cooking = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6c2fb1adf244dafa9689844e1283dce19786e2c1df170d4172d3567514555d90adcb82414f79b5d9dcd59cfdd3af5d6893fff57972d6e4fb32196add0ed5b1eb";
+  sha512.doc = "30cc2a5b4679126cad1b13785081d924f9d455a5f392e5047c14c8ce1dd3efca102bafb74e1a339dd938680f3a95111a7025a31508ea63108eb33cf32b03c9c5";
+  sha512.source = "7b935bbf1a7e7dfeed2db1c4725e38a3bf847822dee7da8d6098e7df82b5b5035b47ce3f0b9403dcf35028b319c2661b0bd8288b8a1e80395944532777451bd9";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.9b";
+};
+cooking-units = {
+  revision = 65241;
+  stripPrefix = 0;
+  sha512.run = "82f6e5b097ff7bc737526b13b04724fa144cb96d796cff517019e49befa174f621a41ec4c52d29fd20bb502dab46db1699b98f57de337fef8320392c63839675";
+  sha512.doc = "1297801aaf9b7ae7edb900165792e1b7ae91ab6c32482a7006dfddae37e1438a3748f3e048ce385b76dafdbe78ccf5c643e9d78c07f2bc9cdf7802affce14764";
+  sha512.source = "245b98785b44afb68c70b5cabc228b282d8b9351ca97b0b0f472dd8ebd547928f538c002366a4b9344d74dfa35efffebfa5314ee1cc5e5f292d7134b03b58698";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.00";
+};
+cookingsymbols = {
+  revision = 35929;
+  stripPrefix = 0;
+  sha512.run = "9b43ffdce038ebb001c0ab6198fa2d92ad6f1ec6040f1c315a53fbfd29367e5c851f4015c36b0cdb2eea84f4a8dc90aa3d5126a09f93766d614931bbf555f982";
+  sha512.doc = "fb6794942d016d12f527b86947c7fae9947a7cf9122a7b26d39bfeb6d5f55a7cccc11b666101b0c80a92c7385ae8305bcb4d792baa0974b738af80697ad12891";
+  sha512.source = "b2e8ff3274ffaff3a3f5b3de1ab95a534247878f163cba8cac9af0cb49c59c54f9ac7b362c75dbc394a3c942864b3255ed28310ac5ba842b5b63ea0d0d80f7d5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+cool = {
+  revision = 67013;
+  stripPrefix = 0;
+  sha512.run = "4ee983b7b07d20c9fe7568ebb6be60ecc56f85cc4ae4013870c53370df99d69bc0537c3889790324baa1f1a8afab2da56763b590457c49866d219b1540effe98";
+  sha512.doc = "06d182b5415ed25be80c827206759708daddfaa6bf7a3aae59c1639c3c09523a7b421abdd9d2a8db1297e161e439b777d3d1d8c07e52dddc1c071ce1c5a9fe47";
+  sha512.source = "c305695f6694cfb4b08462591aabd64adef27001d0c84ba905b0d4f07b7095905cda414e7e477ae962f5ecf6cdcee60d0a432e4eea924bf2fad0770411131912";
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+  version = "1.35";
+};
+coolfn = {
+  revision = 69007;
+  stripPrefix = 0;
+  sha512.run = "b92b231bee56a8589e079a1175569a8d8b92bd0e4730e87882cd8415bf301d466c381eaa0540104abfa5e9ed2d159b3349e3dbfc34e6b1c10e52e255946b3067";
+  sha512.doc = "f3f6c06eaff8ce132e5bbdc25fa244b6aefd388a467bdf78c9c5459d6bbcaff185ef0a485957e8b864ce167b0be3a994d73cbed788754da308dea2af5d9beaae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.2";
+};
+coollist = {
+  revision = 67048;
+  stripPrefix = 0;
+  sha512.run = "7336f6e9a05311295d1ada4598d4b5506ef64ea1c245d30c2f30e079b5da66f08b029d98a74dec769b60da7ac05822f377c485bc0a7a25fcb3aec9e2f499d3a3";
+  sha512.doc = "5f27ec17d4544bb4ac9891e088b6d921901504c46a52a65638d5caa0fb7ad4df55c00ff2ad7569b6b7f97919b9a139f433044f849ca4bd559c77e147e5878d50";
+  sha512.source = "c0a8e06bae7ea5e3a2dfba01e014c7bd0ffa22306bc1827e1eab717317b23df8d20ca344ba182c7c44a596f3c7471aeab03ed93221cca658a0e451578bad6761";
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+  version = "1.4";
+};
+coolstr = {
+  revision = 67015;
+  stripPrefix = 0;
+  sha512.run = "272c0ad1071f394c9cf96c38ce85800aeed55eacba29dc86c5887b86a63b717d8f83fd83afb5ff813df780691a7a2deff6d466e521eeca14ad3e3d09f07ab0db";
+  sha512.doc = "5f4baf28b3a5d2b83ab51037c60454def4c1ebb74a408add0459fbc7766fe828e32af9c02ba898592272b067b23715e3986ca4f561a1a89d58a57c7de6d70bd3";
+  sha512.source = "56e15bc77c6bbc2523162db8a86d1b3bf86e97a59fec15e27da736b964d02e27e7838690befce0f493a9363b946f710676c76e1ddc0c048f5cf40e41d29c1c0b";
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+  version = "2.2";
+};
+coolthms = {
+  revision = 29062;
+  stripPrefix = 0;
+  sha512.run = "7a9d8f4605a0ff108ef5cb32ef4b6f455d16898248fee534e6557d8323c4378c8299fc1a6d58dd491020090ed4fdd3e41a90de99d18a9d114b72bd57b27b5e7d";
+  sha512.doc = "2f5ff3ead76bc83138e41ee881713829de7b8b0ecdda353fcbdd9ebdb7851139eb9022fb4eec1a1c03d125f4106ce748123a9d9fcd76859e82158a541aa20aba";
+  sha512.source = "088f76522c4576925af08d387ecfd18b4906aa91fa741c4848eed49addb9a9334b3f27de30c516e7a85583a450fcfd0c7054b071bb926eb8f1f9ab54b5791ed0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+cooltooltips = {
+  revision = 60201;
+  stripPrefix = 0;
+  sha512.run = "fde90a48c95ee35a7b9c9dfc1359df09646cd9f5cf1a44a7eba7ffd9aaf98c2bee400dd7ee6796583bea5a874c2693d25d3e502cdd4c3a207949f46ba7525505";
+  sha512.doc = "0b9d55f41afb738f1503e232e06809cc2354775c6793c1f5f3f3c65d4aa349294b5e9ad4d223f588dbda0b0f53091cbee4855804273a8d8f21a6689760a556e0";
+  sha512.source = "584d4880126bbca5343a4a8df85ca348d397dfb5cd5fe8a62d61224f9c95c5a0aed20f8c522d65ed68c6435506613fd0decc35acd848bedf2bf89de6842a7f27";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+coop-writing = {
+  revision = 61607;
+  stripPrefix = 0;
+  sha512.run = "b00d0ba304a9aa88929a0f130b3e73bf8c095b25cebc6b33d8d01d15cc73766ac3db3a588719fe6480fb4105ed0bde32d5ab2354f2cc223c2e3bb90a8e6f877a";
+  sha512.doc = "489060dd92b0044cb76c8e4f3f17aecf85da7b320406875b0c9b46fde2edf485868669e4986d9d602eb317ec0199e6ab81bb34096f7635fa4479203e03336577";
+  sha512.source = "f00f9b9db508f6fb924a4371413631eb6a269f1e70034891a1cf1f6b8df6d81f5f3e7d12e5ff7df29524d5354fd2e6123651d549e997457cf4723a8e723053e4";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.2.4";
+};
+cooperhewitt = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "91047a9831d2f1bd9ce8c3d6b1089316a40312b4920d9e8e26df4a5fc64293eadc45ac211c039ac8bc83df5d3406cfd006d1192945bb3776983f5d571c9e364c";
+  sha512.doc = "211601a3a1fe2092a1cbb67cf6fa71f7ea2225f425a8556c1b88396c3f0d721ee144346fbd29204c4d68da77363653b1f0b14693139278f2b22a6104bdf949d0";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+coordsys = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "83a57df64b3386b7e927ca30b4b2ea031bd656121dda79dba0f96779e77d733d2293b80a3b08081678bea9b31a31a586123e9866c6aa595561843af3de0cc4f6";
+  sha512.doc = "bb89a04e5889c39c23ee65c38232cc0be931dff383d52614e290b6bd8ab23e7c9063fd7ea656dde896c08830b8c7c85e1da7f56728fd43a1bedf31bef6ca2e83";
+  sha512.source = "dd03bf08143a43b3486524d4aadac592e3e2264d23aa45fbb499ec7e709edcabd87f66fa38349edd856a09fb6d55ef466d565714045559b9b7f418a7d3eb5acf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+copyedit = {
+  revision = 37928;
+  stripPrefix = 0;
+  sha512.run = "27f48ff201c66d61ed7702b4d11f0d39b0c74974ea3a90506dace0f3cb4ac3c4ee5cac28f9669574184620b3e64a4b9ef3fa5564213e3d200754bbab791e52ea";
+  sha512.doc = "60fde840ac3c6876f031daf09e852ddf79276d2f841dea2ee5299678bd116df31b2ec2dfa6d6175e45a42fd781be6935cbfa2aab8621af641985e3df2c665fc1";
+  sha512.source = "7d2bb6e2e8c036345e301d45c03665b6c8ae9dfe91668f354e77e30e2d8a47d1b6db2e7032717c4b04e8e122952b916459b991fc5b566a020262835bcdf6a6fe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+copyrightbox = {
+  revision = 24829;
+  stripPrefix = 0;
+  sha512.run = "2ae2afc738cc906d24fca0a6319c98dc1e9382bbde6db3d0c3a371d3de8b92c30b3bf05be04797bc0ed6d905933a50e74809eed52f06cdba5fc5088be033d4a9";
+  sha512.doc = "9b817f2874a35f3e023774d3be32e0f8bf53a26f9daf553525c95ce0c21a64a22c3a716fb20cdc76921ec90b7b5305f305bf44853cf87d13ac38ce853ca00ea4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+cormorantgaramond = {
+  revision = 64411;
+  stripPrefix = 0;
+  sha512.run = "1f1707a00298fc2015ba01259dc8558a79e72a10753f3c101f318359f0d4a3b6a9ae16cb1c1825ccf152fb50045f2cca429b00da27607fa8ba1046ad15e5a86f";
+  sha512.doc = "85a5ba16ec8756b5052b4e6342d47e83c9fc8f348ac3b4c067afba131a7ed853cab04c22f8723a912a1178cc8ed373ab5fdd9d2be0d9816918bd22233c13ba95";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "3.601";
+};
+correctmathalign = {
+  revision = 44131;
+  stripPrefix = 0;
+  sha512.run = "5a7e9b3b51ae82980cc1ab9d4ae74aa0b65afa533d21230b1f5e6867bb6464f910a07bb1c38621eb18d8bccd8bc50260b8741752936c310012590706726ed6f2";
+  sha512.doc = "bc6c9f24a4107d28120e6934f6966b2560ca4c34169b0074023e941746240879bc0572840d3967effd3a1358ef288ac412946f79fd3b40151c1507cba8828be0";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "1.1";
+};
+coseoul = {
+  revision = 23862;
+  stripPrefix = 0;
+  sha512.run = "21524a0721fa26d85b383879cc75600bcd55ee05220eac245171eadc30dea7296731e4d6d2d3d82d10b32f1d674d444bf1df41dd82b92d5cfa7ea06d53f56147";
+  sha512.doc = "6e950d1f5129b39de2cfdbf7cc46b101f81336f29325a5e74f58dbb4378dd79189d1e29dd88a9e828fe4e758b6de93e76f70884c9fc582cc8a69f6db1e1f2617";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+couleurs-fr = {
+  revision = 67901;
+  stripPrefix = 0;
+  sha512.run = "d3d1abad334d50129f77b35ebd6fa244feb84e347e64cd98f3e3413c556b1848a198e4679e266f838d947244756fc19071b1bb0816c73b887b2deb4fe061adcf";
+  sha512.doc = "8e88f3947d0dcebab82a60bf9886350762f57da2c2b3c739e2e3896afea70a2088ce325cfe6373d6a351b57fc2f0b0bb7f0f4c9716a094d86e1997744890c92c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.2";
+};
+counterz = {
+  revision = 67335;
+  stripPrefix = 0;
+  sha512.run = "5fcc21ea49e222cbb205998172ca4184f4daa3efcf92c48278b3e7c5bce6669594b02f5fe54af76f94ee19ba63b9701e66d24c2ce85262748c1fd2c9b6e18b3a";
+  sha512.doc = "a5ccf25501d1275161e9aa53f076fea2480cd5edbb83e4133c9cf8e400b840fde78f69bf038e5778c6b8535fea3e654c11eb1ac82545a90fe952530bfdbb607b";
+  sha512.source = "920d054c6a3bc41504db850407d8553b1e108af85ab1a94fd2a6bb71e8f6f7f02abd11908a8d73430cf27c9f9f8e46014a53b8afdb80dd360e4e1cd12f8bb090";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.1";
+};
+countriesofeurope = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "fa0faa88db3e7c1baf73d5fad1fa196915c752e15dc024cef051127581f1e8a3d218d5f2f815b44bbedc9bd6fce6292825929471b595771e9ecd0b5131b11d26";
+  sha512.doc = "e99ac6f4b57a2aed80cfd1214da7625ae94336677f0cfa0306125b06054835c2c3b23ac901cc3f421d56e4d021dd468db12e21acd6b3883c8b937919dbda056a";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.23";
+};
+counttexruns = {
+  revision = 27576;
+  stripPrefix = 0;
+  sha512.run = "569393d76512308751bff3c5cb22bc11ecee420bb16b5f7d35d6b10beaa02f9c99a4d440e7f3a35bda4e6821405e5f8d621af5af176821549a0e0f0660f998bd";
+  sha512.doc = "4a67cac01589ae5d3eb61c5c6c66bb38ede138c9c2b56fcb6359c8f851bf55ce3cf2e5662cd7751d6708c86644cb5f607318612b01b60f769858d594c2b24218";
+  sha512.source = "ed482becf766081e5cb05affc10c64979e43f9f655074366063b95943229dc9043943422e1063ecf69e5d44659566fb1d0ffddcc27d33eebff9de69f4aa8c7f5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00a";
+};
+courier = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "30d6c8906671239b9ef04b3c4d571f59e928ffefc965cd592ecd3277062c778b6f8cb0782f5eb8c6bc27d03b69a88a120593477ced93bcc44cdd4fbc3e5b8adb";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+courier-scaled = {
+  revision = 24940;
+  stripPrefix = 0;
+  sha512.run = "570256a4353163cba169ac5d649458d363edc5c2836efccff1e7df83c12d9b552978b3531f2ab026430b3222b3dfc00be0e4700031e6bc50bdb60a739a68c9aa";
+  sha512.doc = "59c5cec8491e678b084afb4c6e63ed07ca179b5f17be8fe581ff341c80b3cee8016601799ada090e1fcde9eeb72197986f3d4aeffa7c7a9d10a014e34282f52a";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+courierten = {
+  revision = 55436;
+  stripPrefix = 0;
+  sha512.run = "06343c68149c28b8808a38d5d7f2a57e9bff996d836c90a352ed77da4637fff150a18c13b8807f401e3d9cc9e7ecc773275f8ca18e2dc8d315ec5647c3f6b55c";
+  sha512.doc = "737818c02e35e5502eca7bd80427fb814f54d495bd1315b124ad32a033da0ba0b9b4a2cc5a1f8c19b0f8d91f8534a783253742728ad1c8499d97e14fc3a67938";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+courseoutline = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "fd3bbcd90570aa1cbfae49fca247d761ac0b886d795fd8097754706b21ab1d6954eb8d8a6c1fb4e69d550e7ec89294fa006f50bab0c7b806c545666eac4915f1";
+  sha512.doc = "5a52cabfbc28fe27aa6f85b3653de3ace51b65011ca2e33b56be59854b364319ed8adf95576f8211d9494a367fb637b47fd2805a2663df87103b2d67a168dc13";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+coursepaper = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "bae9e3188a3312f970434b21f23436251dcf8d7b5b2049decf1f95903f5e58ddf9dd328ffc6908c70bec436c9edc3ae62b05d110f42a8ab322eb3f464733ba96";
+  sha512.doc = "359ee3956a6da4eb41947db9b5f8dbaac7c13c18ea91afd6d63f738ab43af4c77fd93e9123ecda28b4e2211387c910b7a46b2ccd97edeba70fd6d2852b228094";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2.0";
+};
+coverpage = {
+  revision = 63509;
+  stripPrefix = 0;
+  sha512.run = "a41ebddf89a5fd375ab107e207b9397b3496bc7daf213b4c29779b15d0134a131d6646a4474a5cd9d3bf56da58350fb2ea4b98692bccb8d7b06c8a4f2244ffec";
+  sha512.doc = "0931d1f63b60b1b94467114db0fcc67e4905ee1fbfe7c2083eceb0f7715eff201ccca4cd74183b70a4c84808838244b3570529b372ab64a9ef6bcc0f5357aa77";
+  sha512.source = "15d25cd0b009c1f8006b344498f40a293d18cf08b9098c9923b1fc678a65a2a2a55efcab53744e55ce41d34f4aad248d389aa6127827b1836ec6a706ed6c73cb";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.01";
+};
+covington = {
+  revision = 69091;
+  stripPrefix = 0;
+  sha512.run = "c70d4926d45c93ffecff4d8f32923ac99a1b354e51dfc21eed8f3e3172e5c29875d5ef7a2509dbd6150f22bec337efceb7cd42717798144d1d1046e4332d00d0";
+  sha512.doc = "cee67a2bcd26ef106d35fadf02145b74e7c9b67c2bd2ff46a4a7afc262d020d43b168fefc2d086688c4087469e9d68a9f0ae79c83dc018ecce70233a0459f9fb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.14";
+};
+cprotect = {
+  revision = 21209;
+  stripPrefix = 0;
+  sha512.run = "f4795674aa97744b0d6ed70bcae83a1ce3b41670a1bff2e67d12825154bcfd7eac2a740996bcb4aa0445697a3e4c17ef3d8606b308b7db3aea263269a7e2eb51";
+  sha512.doc = "e8a5000eb9a538f95bf6df4e2d68ecd8769974192e8181b6eb40e5f48b2cc3a9b9d405d1c7b611e35c41dac5ca5165a503efb7584ee94289ed3255a9482b2b2e";
+  sha512.source = "a9c10d5437f4a9f55680fc3a9841e9dc665b7b642e2831c0bb6239d73ea08312eeae372cf95591d002fa7dd51ae45e7413d9651ea5d60e5837903adf565364e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0e";
+};
+cprotectinside = {
+  revision = 63833;
+  stripPrefix = 0;
+  sha512.run = "5f4a3dad026c07720a11935e5ae4fd4b6f5f060292c249224d3a45ee818063ada48778a8399b324f1f13ec4744215a5eaa4f41cbfb82e1f9503d720e3020de55";
+  sha512.doc = "a8b050ddc6f3dedfd2ca6c4d7b4def6ab63d55cdb6e8e1622ce95f61aabcf2d9d8bf56c05065c9f4c49c507414273efbecb101652d372e78fef2251a87bc6bfd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.0";
+};
+cqubeamer = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "7c2c4548f8bbb4885680588ff113c8af96d79b5403d6cb01bebc6824745fecdd243af7e14b51bdacc91a6ee2301946ae911aa6c892d248958c1089d3fac383a0";
+  sha512.doc = "f11c9d614b75a973cfd0452e283078c5af259127624f7746c0f49152da20ea016acb8842ce343cf342e4fd45f563bdadb48fc4e98cf964bb1c6dd044e610e202";
+  hasRunfiles = true;
+  license = [ "mit" "cc-by-40" ];
+  version = "1.0";
+};
+cquthesis = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "929e1b191e8aefd67e734c49227c24ba6f4a15704d3f40aa49b1c0390796dfef36b56e7735e068fade5415838918ec712bd34cfffc9aa2981929067d73d86ad9";
+  sha512.doc = "ab270eb465858de3b92248b3b884fcb648b59cc3f947e3362a445562c29e910b0a7f1e4c137aea49c537e68ba61a90d08f40ab43d3340c109e01a293505cfdf9";
+  sha512.source = "2184befc80f4ef6f23aba573778e99314dab80b65f053416e5dc8ebb0ff462c8f5d665085955fd28d88dd24cdc9e0599ba4735196b239e3123523cc1316da3a5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.50";
+};
+crbox = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "087ae9406fd8f6916e355b51d2f4dc7383228813716ab9f6c37714794c931a9b5defa4678a4471523c5fda2c6b0b7784d11dfb488a8d9c60f0244d9d2d64ab2b";
+  sha512.doc = "8927d6f60a3a895685c679e565632ee2ca68c1f2e8dfd795a481767463d88ec37579bfbd55858ce1e6e433a981de4b5140cf75489221243716cd8035a2967a90";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+create-theorem = {
+  revision = 67712;
+  stripPrefix = 0;
+  deps = [
+    "crefthe"
+  ];
+  sha512.run = "4e33efc66887fda4505c7036444c7afbebd96594bcd326b8cdb149fb4a429f3cf05f87d6315dd6c207d5f55a9951ec6632ed63aa6f2d4320ac7fbee53d744680";
+  sha512.doc = "ee71cddaf790679dbc46044e5262f3b5db098f1b57291719bbba68b9e905e5daa20127d1a124b6f1e3d898fa081a3e7003f607ad0bc4191f5f63fca837ab2c7d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+creationboites = {
+  revision = 68087;
+  stripPrefix = 0;
+  sha512.run = "5aaa071101c52bbd95c83b2e523ab664a2d52109fd5ebdf71da07d3af997d93cc2550736fe18dfac05348d92cbb02749f03a052954a0807fd3d2140efb322588";
+  sha512.doc = "42e8ce40f037b18e82899b570e8102835a437a5283193f1e799876039a856f86adb1afe52f5b07bc6151644e9b174dcfbd96f6148e2610a0a32cb400832f3ebf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.0";
+};
+crefthe = {
+  revision = 68813;
+  stripPrefix = 0;
+  sha512.run = "4222df8d84b006df3641dd2fd976440401b83c40e9ef0b126be8ba9b459eadc084cda58798db596e5ceabcf4b4f0c821bcdd5b05be5a3ec9e3f65d98b4c6da3b";
+  sha512.doc = "48b2636dd969403d3f0511c8b959985da32243d5763d6d2837f57981ae2f548b2e92956c3fcc9349290e7b705ea8144ab2af9b74a5538ebae967693e82e6085c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+crimson = {
+  revision = 64559;
+  stripPrefix = 0;
+  sha512.run = "fb807f6602365c65470ceb947e72c63171fc401145b83a63429836d274ca1a0877008c27e4f6416b2a89a3fceb2912062749deeec81346e59c734fa14e4cc289";
+  sha512.doc = "105068d0dd81b33a8c073ab33542f2ba7893d4e1d95dcf7af58b413d54a3e7e0cf24911fc2e56ee9821d6d55f016355d4e42db2d981e48e1feaa98b498e20e73";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+crimsonpro = {
+  revision = 64565;
+  stripPrefix = 0;
+  sha512.run = "e119ee9df715d799231eece3e5c5c0c125077b9ca526d1293f943dd2700b45da0bbbac90a964248415bf9cb1a51923bef26995acf25397216edca531594d321d";
+  sha512.doc = "3f151947afe36a62d958804ffafddf533b9970162511ff2038629582acb15b4614d9bd5ffa28b53961c53996d2a8ebc0852b511007ae83d2b4f5f908a1d1b04e";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+crop = {
+  revision = 55424;
+  stripPrefix = 0;
+  sha512.run = "f6161e7688d8853d2d9041cfe26360b71a920028df673d04ba38f258c810021752bb7282757ceb98b2e62f7ae52a5f4abcdc61333081d77b205d5431ca62a569";
+  sha512.doc = "770ab2977a4ddfdfdbac5f1107e01b8bd5858a31747d44bf0186565dc79becbefde2f34a9514dcf214b8eb781390e98d5f5383f2e70e393ddc22043d4a0eacfc";
+  sha512.source = "1b1f0e6a309d1657a12f9760ce2a01ab370de1d34bd628bc066768eded3d7126cbd1f8c38d315fc120c58d73cee48fbf2515492c218a6510306766dd83861b15";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10.2";
+};
+crossrefenum = {
+  revision = 66014;
+  stripPrefix = 0;
+  sha512.run = "ec85888801dd66c0e1b22a257be19eb141b922975a7dfeff90ba146232a6d8b9a7b76e338b68548ae228a1317af0208072c06cd10ddebbada93b11b72907c817";
+  sha512.doc = "c5d847af7f8c2d753563d5f393cd3de2936de96ebf1e653b7e0b9f72da75f3481ce1a783329f74ccf8e5f160eae81e045c663775dac916c431edafb1677b5860";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "fdl13Only" ];
+  version = "1.0.2";
+};
+crossreference = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e34b4d383b8398880b962cdddf248c95f2bc7187b5ed4f0caf84655a94f92b915906b150ef904c696f49f22ef23c039ee66427a03b1430f7a3d5f619f2a80d01";
+  sha512.doc = "e21b294ac2b3489cc81ccc99c54bc60985d8769e297f137180a9373ad289248b5d90acf3dd9800d0690907543cf52f0532f6317ef55a43a5b55541805e2be68b";
+  sha512.source = "ebf66eeddeccc32574b0f6285d655d5e9a00e4c4c6a50c232ecbc438b51e4ac45876e925b41b71717b23004a24680b3302b8a0afb9ba124e279094d705676b2c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+crossreftools = {
+  revision = 55879;
+  stripPrefix = 0;
+  sha512.run = "50b8ce01e9bbfc1f3b4ec9093fe0b091780edbc197a9c637b98a025926600459c5f0b22f5683427bd0a4f0a6ddacadf77833f3171d2dbd45ce43dd6e1d80d813";
+  sha512.doc = "0edf43d8b68decea7d83cf5eaf2f92f86635f19041680be4a511a57a7751dd40efe4b4ede05a898c2e00f91076caeb3f4b39c444d1ab8b05a4f0471913e4b475";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+crossrefware = {
+  revision = 64754;
+  sha512.run = "7e8836c9c1cec51676a01e3e631cd3a0155f081909415e8ae2a4143b5eb611c5c843a0c700af98dc983ace1f9e3492da5a42bd54e74757ca68da7f106f7eb6b5";
+  sha512.doc = "7b7212f8a4b6f75d93ec573f9d7544f09df2e73e0b2a32e2f22866378f0d69e0b035511ee5cbc7eee4114b5540b3783d613aafd7508a41aa336195e49b070a78";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+crossrefware.binfiles = [
+  "bbl2bib"
+  "bibdoiadd"
+  "bibmradd"
+  "biburl2doi"
+  "bibzbladd"
+  "ltx2crossrefxml"
+];
+crossword = {
+  revision = 64375;
+  stripPrefix = 0;
+  sha512.run = "8be92df53341bca46907f0125122e2498761880606fb42621df7b4e9f5d9cc9e9a8b74454aa254f49b6fd471b371df7f9f873d9209a94c419433b53247bc29a7";
+  sha512.doc = "445ff450f4ebb1e615d0e9a7193904f4512dddf4af3b693f6eae9a115d5456202c54c291c263c37fa37d082d3403c4b7a83deff7e1ae37548efd7ad47b97bfad";
+  sha512.source = "018058d6dae55c27804cc750fd6469f432c1a0edca187f6adcf75255d9d2a27c34a446e54dc7a6b5de3e030a0145f5b950961f53e4dfb8976fbd283f4db30e38";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.11";
+};
+crosswrd = {
+  revision = 16896;
+  stripPrefix = 0;
+  sha512.run = "889334e046aa6371df566c814faa98fdf4931c85be3d49e04d932f02bb71bffaa929614398469be04bf6426ec05ccbfcdbe0ad9798017f9504fba5f3781521e6";
+  sha512.doc = "0d4d1e8c1577ee23f7fc60ab8c106121978e986945b8dd399faef4ca55e60a7ed3ba65220ef56ad11b7a100690f89692f0c1ad80c845e2aa04d81c8664a6cd27";
+  sha512.source = "edb2825137c510f1ed32b9380b3e59ac492a76ed35d2a1b16ef486a8287338c1afd8b26cee9d1ae447eff3dd12de14cd7f75d97db74ef5f084286c7f5cd8478c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+crumbs = {
+  revision = 64602;
+  stripPrefix = 0;
+  deps = [
+    "catchfile"
+    "etoolbox"
+    "xkeyval"
+  ];
+  sha512.run = "f4e3e045665c16d02c6b1cf2d43957fcbfe38ceb17b6bed9445803d4134a3ad2c22b552230ed685d42c33864169c782c9ef51ba47669d7a975e699ec532a1f76";
+  sha512.doc = "b6e13f1177eace8e349648dd376e3252b34ada5e84c0a676631ef313507064c68624936730fe9780707bced36f05d4103cd9aa33a4bd511cd23836ed2ab38d03";
+  sha512.source = "5220b2d854c11d4c0734ec22dded6c1259d470c416c08fec4d4fff35714bd56126f5c4f8785e958454c1a3854541b9d8cb571d4f7a86b636b1c12e739c52072d";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.4.1";
+};
+cryptocode = {
+  revision = 60249;
+  stripPrefix = 0;
+  sha512.run = "d4d85db9f631bd2f3c78654e88b9c77df7af991f304732ec92b58d08111baf2548bd7d27e6187b0fb6dac7cb0517d27ef3973293cb76088ee8824cb28b1493b0";
+  sha512.doc = "8516c946f2a72a898a6320be3b9037b3e94ec1e4c4624ac0c7f67f64855308f793275d682e2c16b5566abc17ab58200ec1ddc32dbb9fe2c08fe21183bac2986a";
+  sha512.source = "ec51e316bbeaa2a28f7fea918fcfd3338fdff0153325b93309d79300b9df1655620227596cddb429952ee2d9074da8eebe6dd64207e2f300f475215eb33b9f3a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.44";
+};
+cryst = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "49e1c9d0cb6909e421446230bf71123fa71b4aad1d90b1c7614fc465651f701d91f576c2edd8b6840d1c78dfa5557cd604e61a5e745e1ccb2f60bde9e66117ed";
+  sha512.doc = "55c765a9a4799f719383473700a0ef5627ec8873fc9fbd4ffd191d205d24b29d57255d90687176789240a3c4a547a3a57ed341a0558d99aa01dbcff0fc7dffc1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+cs = {
+  revision = 41553;
+  stripPrefix = 0;
+  deps = [
+    "cmexb"
+  ];
+  sha512.run = "bc956c595d4460f35c64c92e7730a7cc9cd3af95301afba56c49bcf8415666863de926733409ce1afd99ba767fe3a3fa45c68f2dcc912b69c6f72b618289fb30";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+csassignments = {
+  revision = 63992;
+  stripPrefix = 0;
+  sha512.run = "0e5356f133fb6f3fb33ee0407a53d59330e646e4f1356c307464c45f5dbb66435d68ec833c6482673417c53d611816c4a66a5db34da6b14e327691c0f0c3590f";
+  sha512.doc = "3523504d0f7289d485fd34463ab7a0ba2fcc3d4a9b2908f3853977a8b3d7fad4266fd20050d2ee8a685483f47a66e04b50fd4cbaf0788f22c1ce48d2f4b89476";
+  sha512.source = "0ba1b40ea19e3c1196a4314427ed882a00a4c4807127d0792ad6f020cb273d3c157ffc469bb7f363726b8a73ec20a9989de43a9cd82e114ccf1b9a1e66328547";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0.2";
+};
+csbulletin = {
+  revision = 65250;
+  stripPrefix = 0;
+  sha512.run = "64d8593e12beed90aac7cffee0632b4d16d77e5cc12702600ac62a8374429ab0a35390d8046b43579855744dd4f59c458c574e173254d3cf21ee45d3eb97b4db";
+  sha512.doc = "2ca7ffe0973b443a2114cdd1e171f62b845f4f0185aaa5b7c7cc2809cd3a2b927784a4fa68c9a3a28fa40f44217826d1f34165a027838d3bd9f4e0e740a294d3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+cslatex = {
+  revision = 67494;
+  stripPrefix = 0;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "cm"
+    "csplain"
+    "everyshi"
+    "firstaid"
+    "hyphen-base"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-fonts"
+    "tex-ini-files"
+    "unicode-data"
+  ];
+  formats = [
+    {
+      name = "cslatex";
+      engine = "pdftex";
+      enabled = false;
+      options = "-etex cslatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "cm" "csplain" "everyshi" "firstaid" "hyphen-base" "l3kernel" "l3packages" "latex-fonts" "latex" "unicode-data" ];
+    }
+    {
+      name = "pdfcslatex";
+      engine = "pdftex";
+      enabled = false;
+      options = "-etex cslatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "cm" "csplain" "everyshi" "firstaid" "hyphen-base" "l3kernel" "l3packages" "latex-fonts" "latex" "unicode-data" "tex-ini-files" ];
+    }
+  ];
+  sha512.run = "a5ea5d33fcf2573f772541cf03cb660fbc4d32d4d1e145fabc07781f5f664369f0bce9e8434f403beebb3a6c17c2da43d7727fecf6944db1bc9d36796e8470da";
+  sha512.source = "8ea942f9cf3b9939311ae29bc4badbb2a67c6f4f2e03a4745142a0b570aeb0e668dfc47dea278f960e6a11231856464370507379cdbd77588720a16ff5e25d17";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+csplain = {
+  revision = 67934;
+  deps = [
+    "cm"
+    "cs"
+    "enctex"
+    "hyph-utf8"
+    "hyphen-base"
+    "luatex"
+    "luatex85"
+    "pdftex"
+    "plain"
+    "tex"
+    "tex-ini-files"
+    "xetex"
+  ];
+  formats = [
+    {
+      name = "csplain";
+      engine = "pdftex";
+      options = "-etex -enc csplain-utf8.ini";
+      fmttriggers = [ "cm" "cs" "hyphen-base" "plain" "enctex" "hyph-utf8" ];
+    }
+    {
+      name = "luacsplain";
+      engine = "luatex";
+      options = "-etex csplain.ini";
+      fmttriggers = [ "cm" "cs" "hyphen-base" "plain" "tex-ini-files" "luatex" "luatex85" ];
+    }
+    {
+      name = "pdfcsplain";
+      engine = "luatex";
+      options = "-etex csplain.ini";
+      fmttriggers = [ "cm" "cs" "hyphen-base" "plain" "tex-ini-files" "luatex" "luatex85" ];
+    }
+    {
+      name = "pdfcsplain";
+      engine = "pdftex";
+      options = "-etex -enc csplain-utf8.ini";
+      fmttriggers = [ "cm" "cs" "hyphen-base" "plain" "enctex" "hyph-utf8" "tex-ini-files" ];
+    }
+    {
+      name = "pdfcsplain";
+      engine = "xetex";
+      options = "-etex csplain.ini";
+      fmttriggers = [ "cm" "cs" "hyphen-base" "plain" ];
+    }
+  ];
+  sha512.run = "5c0d9f12254d2b61a9ab34cb447dcdda56b032c5d4fcd1b4ee2ec2f3999e5b5317e067c7e03814598add15ecd56449ace1bd1a67b6d87bcc6adc2122bf7b5083";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "Mar._2022";
+};
+csplain.binfiles = [
+  "csplain"
+  "luacsplain"
+  "pdfcsplain"
+];
+csquotes = {
+  revision = 64389;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+  ];
+  sha512.run = "68427cbe486f3b53bdb24869a3ad52cf6a006d7872ff9408560d9e4b0f1e8184fcb437d54e10f11d7a3585ff8ff7ad40ab4a95aa66091bb69a75a3e8e60aede8";
+  sha512.doc = "ceba04fab9ec257c6bbc2fc903e3888bae9ef6bfa5664c8e01da14ee2b1482005aece22b6bf4fa7fb893c2dc1b0cb7f762eb048e0b2c039be80ef73b0bfef131";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.2n";
+};
+csquotes-de = {
+  revision = 23371;
+  stripPrefix = 0;
+  sha512.run = "7d4667b77f1e27acb1d3c8becaad4889910edaab4b9da6b0fe821db262f3a31672050f5985a56533003178fbf1d579d170be3fcd22c31bbf41af9bcb68fb7c40";
+  sha512.doc = "1e8829faf2cb23b2e565a4b5daa5a09ef01d590d920444ee4659964bee042148ea19e9fbcb63e4c4ea1e2698697554e0bc532fa0fb7610bbf9bb4bca234d33d5";
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+css-colors = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "cebeb4e7cd71ecb1a502f6788fa62284f2d9e3e4afcdc1ddce585e94683a42b20e7b9838ff5c85fc0634894898d8061e01de79e062946e943b315d2970ad126c";
+  sha512.doc = "6299617c5740f104b59e850ca826a2906d63ef3564b6730b01decb4f7707828e28ae3de2d44dc851c094abb702a00a9a4cb2bc61f18f020dc37c04e189521c1b";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "1.02";
+};
+cstex = {
+  revision = 64149;
+  stripPrefix = 0;
+  sha512.run = "cc0f0d0e2af2c210cb7888e90d668016dba4cfce3ae90faf0597a7f8c2058dfe56b92b71d185705c7d3b19d53b989724a9106ab56664fd2e6f4e95da5c0a48b8";
+  sha512.doc = "e84c12eed94f459a7769527197f8b4b2f638297eec5d41bc7e4e3cc86c593cf957158946eb495947ff557ff323a085212b61cb3233972238d3afa2fff54e367b";
+  license = [ "free" ];
+};
+cstypo = {
+  revision = 41986;
+  stripPrefix = 0;
+  sha512.run = "ecc9054a0866e4926277bf5f52faf97b0b07f0ea660b7c4d089a552ab57d3a900cd1d688981770df9b3a4285c3d451fb23f1b69757381f3cbdf88cf0c88cf61c";
+  sha512.doc = "1ac42bcd1cadde9165f8edceadb438c4c2e91d6a89486e56e31623cf1ffdd5f38ec800d836dc90a5a6a0bc48dfac4a8ec90192319f8f046665c77e91fc51b91d";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.03";
+};
+csvmerge = {
+  revision = 51857;
+  stripPrefix = 0;
+  sha512.run = "f3f679127d912a8df32893f0afec13b21a272b6e5ed2d2c147e1bcbea5698e043d88d5dcadc0c772f5640945fdbbf4ff43655d6d4450b48966740cd3cb936829";
+  sha512.doc = "b090bd51f547f16270534c2305ba68af9f86800f55809b050eea25d5566be3a3ce245ad0f79a76ed21ac64b68b6650800fba5a5ad942cc1f3f8e982f56ba5286";
+  sha512.source = "b189b456daf9a54cf8fa09706f93de7e8365d75b792336a8328414d589ffa178ff0c39c17064b532316fc778b73b000610b3f966f9eb0d8e526cf1fd5b4bdd58";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+csvsimple = {
+  revision = 68566;
+  stripPrefix = 0;
+  sha512.run = "e98878933f2f4a7b5b41325f11deea34db380bfe7ae581cb7e78a738ce599ea7b325ae77d48af7a58705ec4e7b668751b371ddb0396a44e28b1af57ab21cb87b";
+  sha512.doc = "7d0a19509538818153357c485984abfe88b9a7e3c865a2184594155a9643dea61755a510e264a38d170f660fe502b9a37a0c353565d2518ccf621cd69ef3030c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5.0";
+};
+ctable = {
+  revision = 38672;
+  stripPrefix = 0;
+  sha512.run = "3192df463eb4d307ba886b82d586580a741da8d901dc560c06d293e04c5d5af9efff56a1482bc41b03aeaade2cc25cdf6f4dda3e1baa26da1f7d4d138f44bebc";
+  sha512.doc = "a32bc9c82a87f1f9327d5cbf4c15052124608f970ecda1909aa67abcc2fb4f10bdfcbb5568d8af9332687817f6f5bd6aaa0ce4843490e8ffac22526bbe123fdd";
+  sha512.source = "9886347fdf0a1a7105ab33bba00877ce22df66b1d82a60b8818af063da371d8c0c6d8f60252342dfe44bbaa65ba9a93ac8f972c64439bea7296b9e98e1be4b41";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.31";
+};
+ctablestack = {
+  revision = 38514;
+  stripPrefix = 0;
+  sha512.run = "3485fbd1bebf80814645c1be3e7358a959637439fa17cbbf7c2478ca73c4312cab82eed2aedb5403dfe94b0cfc09ee3e9c8182c08d3708608a267da235ab30a0";
+  sha512.doc = "2c74b9d2aa44b25952307e4593b4a792cb5d98b78619efef82ddfb134ee3da64de87973db30f3e5d5788ce5e6ef138fca2cabc4ed412c97cfa7b3dc6c3ed1060";
+  sha512.source = "c39356d4d78cc8121b20e572fe59879541ab533ceab64e68f17a346723aad4f73103df79b1711feb12337e5e2dcb56222b00a9b36ddcbc04fb5e946831340d6d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+ctan-o-mat = {
+  revision = 51578;
+  sha512.run = "a995dfc6d79ba77fe673aa501f28eaf9f057c34501fa032423569317e5a4eed048c3375d806eafacedefec02e91bcb587fa6bfb8c0ff980395bb877b2ce88c4c";
+  sha512.doc = "423efc3f2f850c5a9bcbe787edb8155ef76e56ce5e3a1ba3332bb465b8239616bd1fcff2e8a58db6f5ce9d5191ae3209a5451f746250a3b081fe9b35d024eebd";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "1.2";
+};
+ctan-o-mat.binfiles = [
+  "ctan-o-mat"
+];
+ctan_chk = {
+  revision = 36304;
+  stripPrefix = 0;
+  sha512.run = "6eabd7281d79ff0ad19080350dfcca8ee3a33ddfa6d17827a7851cc53f09f627729c8d715a1dfe50e0c079add44331a07d543cb8b6a57000efa6d73c30f2ffe0";
+  sha512.doc = "c61bc0d70cadcc4382dae55cdc1af076882801321a2de16f164223267732e476e41f949f566808c928f446d69aa22bd9965adb155c97905e32b93808810c76c0";
+  license = [ "gpl3" ];
+  version = "1.0";
+};
+ctanbib = {
+  revision = 68650;
+  sha512.run = "1d89c7bab95472d993c6e685880d513f9cd4ac57af87c7656bfb8423b2e5c9c1ede851da01e638558edb37e85caca3080293a7df9b0ad9e87b2aee84a6680a52";
+  sha512.doc = "760b98e3c4d7b07e2f15d7e2b1705f10eb697f5e7f2aa03de97a3ce347d7495f3595d9ed0518c0aa5d38d2eb0b20c3a889e6e66416587a4d15b89a9965986d04";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2d";
+};
+ctanbib.binfiles = [
+  "ctanbib"
+];
+ctanify = {
+  revision = 44129;
+  sha512.run = "6774b151bb0fb052d41d8447c7e8d378d7f31b0a5aea5f2f00b93669b8c2f629f479ae21d40480fd62f468d866cbe0c6f0dedd8a0248f8d83cd1039131849439";
+  sha512.doc = "f9b636cb41b126809d808c167410a37052b1c6c385fe4eb8df3b819c0cf2cac2c7c1c74d7ea15d2916c1cbc563e078845e451000e3a08cd9a8e0696a342b22ac";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9.1";
+};
+ctanify.binfiles = [
+  "ctanify"
+];
+ctanupload = {
+  revision = 26313;
+  sha512.run = "4464bdfbf72318b24abcd88e1c25dae5925a96e867c694f3f02a594ed7b8b24cffdcdb345f0054e200a6af63f88b591ff84058af0adfb4a1b3feff2a057d9d72";
+  sha512.doc = "9e027f7ce08041be7668a7a404fad6b6c7cfc71e581ad1216956d0b53c379d204bd84d2d55d186c74f784df8911770b96f934775f44f7141a5f1b9b5e773cb7a";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.2c";
+};
+ctanupload.binfiles = [
+  "ctanupload"
+];
+ctex = {
+  revision = 66115;
+  stripPrefix = 0;
+  deps = [
+    "adobemapping"
+    "atbegshi"
+    "beamer"
+    "cjk"
+    "cjkpunct"
+    "ec"
+    "epstopdf-pkg"
+    "etoolbox"
+    "everyhook"
+    "fandol"
+    "fontspec"
+    "iftex"
+    "infwarerr"
+    "kvoptions"
+    "kvsetkeys"
+    "latex-bin"
+    "ltxcmds"
+    "luatexja"
+    "mptopdf"
+    "ms"
+    "pdftexcmds"
+    "platex-tools"
+    "svn-prov"
+    "tipa"
+    "tools"
+    "ttfutils"
+    "ulem"
+    "uplatex"
+    "xcjk2uni"
+    "xecjk"
+    "xetex"
+    "xkeyval"
+    "xpinyin"
+    "xunicode"
+    "zhmetrics"
+    "zhmetrics-uptex"
+    "zhnumber"
+  ];
+  sha512.run = "43954ec2acfd2a0e37acb55c3bc7496a9959abeb60787a4daa742cfccc3bfe5b88542d341552aa9bfef6b4224c79a14c5a5e9a7221cc0ecf83d22c9e6ce6a48b";
+  sha512.doc = "475eb846b55672b23769af8757c7532b30d3d13d6667fcd71b8783ab291dd3a39fef6d255080745d4d609276f9074896fae7e674e8abeccad7c5984db5f88636";
+  sha512.source = "59df412a321a4ad75e1b948dd12d250a844c042c9a7c5ef24f0108591fbb087ec6949b537788f070d496b9ead0e8b8de120b37f6977dd536bf10ac353d5da6c2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5.10";
+};
+ctex-faq = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "39ff8931e0007a78e4fa0788d7c7fcd8f25dd4cf4fa3f34b694e681e10dfb3d804842daf45a6e56b5ff450bb965bc322dcf593bdce176ffec27f4696c1c99fc0";
+  sha512.doc = "0942a249a30f97d56bf5cbac2eb4de285a63406620b825a36d9ff8d46fbccd614af488f89e2af7472f1a9075a0e2b7228bb65a5804451df6945ce6bf4287b0a2";
+  license = [ "fdl13Only" ];
+};
+ctib = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8999ea42b82e56cbb06e2485060b829a0781550834ea421607b4621199692976488f4031266eee1a6b1443b12828e2fb5148ff43eff137c01ee9db8770bb1565";
+  sha512.doc = "65d8f613ddb651cef4c345791a4a849e3f672930fb94d1ba789e827b466c459bc321762c71675cb4c5fdec8fc456520bb7013d5b737b4ff2bd049bb5917a98ef";
+  sha512.source = "b387b2cc636f98bf7bf43fc3be04cbb62dfd6597c419b7791605011f59981cd9e90737f9d2f0f668f63bf9abff854219a75a7527d881c991190188f307f3642d";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+ctie = {
+  revision = 66186;
+  deps = [
+    "kpathsea"
+  ];
+  sha512.run = "0180080c48fea7b717ff0ad27e060ad4564841fe2929b8db919aa0402886a00e0fa40f1398ef82bbf9e983343c9f9f6c797606045d55ed07e572e006588c7353";
+  sha512.doc = "178a88260131781b6678ee63b1b35ecc0734525309b99c0d5bd4498127970bd67e30c23072392b6678186532a845c7e27188b1902b5dca52180720bc98fe3dd6";
+  hasManpages = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+ctie.binfiles = [
+  "ctie"
+];
+cuisine = {
+  revision = 34453;
+  stripPrefix = 0;
+  sha512.run = "cb594c2ef79a1d1614ad2b7bedff3b5bd9853bf36947751c880c36c73a458152eb7036861d0292614992623192841c28a3f4010bc0c4107fd8a4277154a1baf5";
+  sha512.doc = "9e4f55bf8199b4bd06847dd39e67e91a8a6885b3903c9ea772199d9b9fd9d7cade173dff6f785d143b4e7c3b154477622a4c2cad14576b22068a6729693a8227";
+  sha512.source = "1df5e248af42513b212d4c18cd95c8c9f2155598604624cf3b5e5e5b020643bdbb9c3addf03d8ff111c14185234d42f0db8a06a9de040fa0b58cec3895f32731";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+culmus = {
+  revision = 68495;
+  stripPrefix = 0;
+  sha512.run = "4f6f370a13ce2cdea9a1dd32bb1e2243000f4cd566f1a7698c641b9ad4793b3c1148fb914dd748e37b5e7bd6802144d4e1b9fd4c536df58bcb4863ad4f9cd2dd";
+  sha512.doc = "4c1217f0cd27bcd56c11006b7b3749e661aba567798b2e397a21b3b0df39a35acb6355836d4eac4fd619509b09b57c7e39a97068343b6e28005944ebf0430adc";
+  sha512.source = "2dc2e6bd71ee949208625fc259cecc6a0ffdd0701416c5775cc32855a2bbf8a533238e07d4fa08c090ed3ff627613c27f0cddeb2c86eda1b320cbc68e236a6a0";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl2" ];
+  version = "1.1";
+};
+cuprum = {
+  revision = 49909;
+  stripPrefix = 0;
+  sha512.run = "578ce2e5af01e81ba80c0cfcc0225985722c1515e8f98460a1cb5d71d8ee4630d400f28dee04bb505c429b13f5cb604364d26503af0b5d9bf98164b218b09413";
+  sha512.doc = "b9a9bda8eab6087a134b3b0660282998c7c3fa7fda8890e61ba107b9f7576d85ca01b59664c1c198679151e01cef6ebce5b8de29644a2e249a6ca2100f526fe2";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+};
+currency = {
+  revision = 48990;
+  stripPrefix = 0;
+  sha512.run = "d975cbe846ad5708a3558252094f4568c3ea4c5bc840dea7ade74eb8f6d90f4527b417a875a7bc286010473078d895cf510560f1287013e70498c983c896750b";
+  sha512.doc = "1f32fed0bf778b3460e094239afd76b4be9915be8a3e8ea20b7e48b02f1ffdcffdd1e588a507b8145ed232a38cee43db1bac0e232c472d5b5dd85f1cf3954c8c";
+  sha512.source = "c7a99bf685283b415c7cf71a6700bcf2928d2342f5db8a3b78e96148fc01ad028b0921a7c048f345dd5d5fbcb3f47618390fd580b02fb4ab1594e7bf5def9904";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+currfile = {
+  revision = 64673;
+  stripPrefix = 0;
+  sha512.run = "4c63d6d33c21a0ac9aed990fa79eb1457908d9301dfb81b3dc7167d5b8089ebd20abfbcf29380a7dd348c6ca8c131260e366aa55819a6affde146408a8e80014";
+  sha512.doc = "e891b03438257ae5e8eb3b6bf21a44b05df274cc18877a6c39569e94dcc9f5e678aed5a5858eb2e9762b4a8ac6b04856839dd47d81b5de55e4023a369e09ba7e";
+  sha512.source = "e68a86c05be5c92eb8a7a224bb404cfbf96e7950e6154e2446237692320f06368c0097d7ad0b57438012a36994e838b514e4588b6eb7d31478160bdf66bce4d7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+curriculum-vitae = {
+  revision = 68211;
+  stripPrefix = 0;
+  sha512.run = "a650807bb2a12df8460ff4b450af6bb7122a8629aa72d5e180e196ed3f904ab70e04fe0ae79474649d22534a0a7cf0342f4a1ff953355b8003e9d8eea0016d10";
+  sha512.doc = "5c07bdfa540b65a6df224bea38b5865e44f08ce042e4b465be83f580a08976236442d7bb96573ea8c5b089aeff8f02e2a9b556997a24a73d264a557e775f8d3e";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+  version = "1.0";
+};
+currvita = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c555b0e9c7a500e086f0435a2dc6cde8da8b02df4d27be14534d28c77c1f546aafecb863bc652922e07191d0441a77db647f8d1d11e33ec9bc6014f73a5822c2";
+  sha512.doc = "b3de1ad371cead2829225015d60a4defe604e63890ef06da65fa9223cce4e748707f0b6f4f0b0dcdf22c3096e381adc3432a7b21b36f834c18ae4eb32bfba024";
+  sha512.source = "a1dc7d983ac6badf9ced1492c712373205d5b0a91934f0a76eb1ac546470292e6c9dda4cd5f5d721e06c90d6237eb39236f1417d1c6992a774f7a9f7df9213bb";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+cursolatex = {
+  revision = 24139;
+  stripPrefix = 0;
+  sha512.run = "6c58f5a0f6fb8f129e202b786c258ba088efa44639f162b9e0109182072c16bfc6ba928953d6e9b31b2b1c2f693fe064476095c232dcb9e0c6bfcf18bfb7994e";
+  sha512.doc = "a0f726330a5b2d8da94cbf25fb1b1a2b22e5e9010e0cafdfdee3781bf518f0cb48adb27dce0fe2e46572460f8c1749c0db1c16e06343cabb8cb94227e3da58b6";
+  license = [ "gpl1Only" ];
+};
+curve = {
+  revision = 20745;
+  stripPrefix = 0;
+  sha512.run = "9d318d35ef04d171da1c36ab4646465d4aa0feebd90fd3e97db5f1cf09c28c174d0c3be288c369215812f51ca83b341abbfdf3fa44458d1994cf68dfaeef0615";
+  sha512.doc = "7a56d7c3bd8b9b13ee675b99a2f5a8a27fb3dfd81dc5225f3a880f338d5390c893ca887cbbcd9ad8deae2a1d6b6620ef664ea64384f93fd93a75a5c886641a2d";
+  sha512.source = "8e5026da24dddda0f266b8431fb28c27037ad920e37010fd97fdbfb5dae8024cb687b681356a6e27244dd4812bbd043e12c91508978dbe796a119e3e8633566e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.16";
+};
+curve2e = {
+  revision = 67599;
+  stripPrefix = 0;
+  sha512.run = "36b8d1ebbc07ea1cb78b85fe2c327a4c932ef0a88881ef9185654cda6865ea5ca017aeb33334f603fad74fa0245a531f50e2016c912da4355cb552ee5e069f97";
+  sha512.doc = "d28134fe19310084b6ffee13bea26b7dd131789a124041cbecb500e070bb134db98d4cf01d7d970781ad1823327f363fe886be9615d3458ca6763fbd7039f0db";
+  sha512.source = "7a9207da9be81c2dd9de00adf25f81adc2bec671e4fe281904410e964670968103a4e556806a287e830aa9aba908c353606884079f3509a66975dd9411d2c886";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3.1";
+};
+curves = {
+  revision = 45255;
+  stripPrefix = 0;
+  sha512.run = "b2ac96620bdcae2263e0ff37ef0975fc705efd2ec30fa53a5cc50d54378cb29c6ef44543cc321e6cb37dfca0ea9a6cdf85777825703b866bcbad9729235c9722";
+  sha512.doc = "afd68373952dbf2a97944bcd7b36dcb62d5b65727c660af56dd8da97137ef4845037988e211996289fb54efa435833fa4a503ae4bba70ab38cd6e55f1966db1e";
+  sha512.source = "cdef0242776f9976f72d953ac743a4771ac5d5aaaabf6988ef37d695c78e206f43d546bf21621c5a9f91e191c95c02ecbe9fc9d7e3f1eb23372a755856d61d2b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.55";
+};
+custom-bib = {
+  revision = 24729;
+  stripPrefix = 0;
+  sha512.run = "95b485e330c97242bbea4b989ea9e70882d796f7ff8fdbb10b0627d102ef6177c8cdfca976a89853170a9171a69499c58711d1deeb0e420f9cb268e336d4f663";
+  sha512.doc = "3d5fe696f095ef5661418e3066f2f98768968eddbeb24ce9ec84647b78452f97482ae1dd17cd9c84cfb81fc4a43052b05ef6aa4080e32a464d2ba4e8ce33869b";
+  sha512.source = "e17d437ae7fb0c1328c2fa333f1f7d286a517bb536f7cf2d66ced327d1ddc78b97791852cac8fc9de4994b41f1433da17fa1e41838ddf90f1fe387eaa9e477c6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.33";
+};
+customdice = {
+  revision = 64089;
+  stripPrefix = 0;
+  sha512.run = "d537d8357fa1d718f685d3bd05afe849eaffcd63050b8ef5f85dfea39260b9268e7ed12e727ac3a14a7194f21e4de158bc0a8143408c45e5f3718ea143a27aff";
+  sha512.doc = "7512a7fa81198895666d135bd50d75345e8d7152289f51126fa3fb68a028f05666d4807e63c82db5068a9aeaca11fcb06d7b0edd4d77804bee195409bf042144";
+  sha512.source = "8ab4af162c7abb96a129934f5c6b1471ba781d43dd7d0dd220a53638010c9c082d26c634a3e65c02f51bb92a7603a3aea9f370e82cea1d8de17afb9d815d1a33";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+  version = "1.1";
+};
+customenvs = {
+  revision = 68637;
+  stripPrefix = 0;
+  sha512.run = "d58a216909f8bf7c425f0836c05842ca918b03b928a57ab06223a82fa588a3bd3d515f6beb5ed27330d5566192a234a08385ac387563db8ad171b928749b488c";
+  sha512.doc = "d807f71f40367888621fefb52ff3fbba1d5b301b670710461b0feb79eb61171ec6208de41ea15ab39c14650734f2ba6a2c5f89182f27072c87c9564fa462544a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+cutwin = {
+  revision = 60901;
+  stripPrefix = 0;
+  sha512.run = "922ab4c0f1158fa699c883e0fd8ed942a077c3b3109b048087756895d0ab6ead05182fbe17ab19310b78691fd77444d1460c7e021689c2eab092ed82974ed6d7";
+  sha512.doc = "f37bc538e4affa716aa315535fad7fdb2bb0e5188844d028b8bda4935339965e3f375439ab0abc62d63f2f57c3d439a25888f29cdf3be484092a57ff86c86c72";
+  sha512.source = "d3a544d356d4afb5599379a1c767d2aed9ace420d4540a1c62b617cb8f542fbcb225ec4e42ab65f7ddebf91df3c77a6b9bf0f59de9e6a11e06ae68fddd5b21ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+cv = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "624d9bd1578e0d2e40e2ca76cd97d7f44d9da5c71daf737e06e6b6b15c64911af17f0da197afa17b5ff3b145461cf7efb058a5cbcd02e7c21642e660cfa3ca4d";
+  sha512.doc = "c04b207a635f1b6f76e316284da987b45fd4387961c59b7b1f1b947284937f91f4d95ade824195d1f0db00766fec870e6859a6dd27cf3b6b426d095866f17d6a";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+cv4tw = {
+  revision = 34577;
+  stripPrefix = 0;
+  sha512.run = "607745abedd1325c59bc8ae360a1c5d00834ec7bd050b057ba5427c135f17046027da3fb6130a0718e8d33bcab74eaf235f2de7a1ace483da1af87be5e559867";
+  sha512.doc = "d9166421ab15d7569a4db66970486c78af43ddbda9d7f9c9488dbc46eed91ab5079c0f9b7851835afeed6045ee4c65c888e1be93a95cda14623405847267880b";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.2";
+};
+cvss = {
+  revision = 65169;
+  stripPrefix = 0;
+  sha512.run = "563d310188adc99e14bc93772f8f94af0741665c15d8013d9cc98fa5d86129d48b62473835973bba90fcb4117fbd782b029b87045e5b392fabd308c8f1a6de42";
+  sha512.doc = "604139dd0e636b5b050d07417f7990c741e7400c7c656d76fb15d56a76b869a2805e43236ac2ea062826df5f102753c8f1450a4e09b24dbc2f96b6668975bbe3";
+  sha512.source = "771545e51e6066529d43edd5f14f070c816c8b86478f5e2598929f34838dfd0e90d9ed666d478e8f5c3aa14da9f6f7b8658e6b1527f212c775cbc2c7645e9e2f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+cweb = {
+  revision = 68702;
+  sha512.run = "4c7a5bc2e7f347e29b625db12e9aa53c872e97c38adb08feba1fd8498aca39a2a83ba3707725757860353294541bcb29585e262404687f6f4939b8512c362765";
+  sha512.doc = "27ce2eb4a74a662eda15e5f72c1543b739c3b2eb918a07421781fcf62f0a4f1ae18c99ec836409175835ce56f3f3087e8b6bcf4deaf4f2282ecf9a2fc713a14d";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+cweb-latex = {
+  revision = 28878;
+  stripPrefix = 0;
+  sha512.run = "5d94dd53bf3212967ae38c094115c4ae581ec15a49e3d0f64be311cd1aa190eb9efdfec2cd83bbc3bd89250efef9470a6a6af342247fb9670992546a976a5886";
+  sha512.doc = "16c8cd2681e216084564cec718401b9e8d98228e6597d38c42f8ef4cc4775e8e606fa11c84d21f0450d85ee18c7ed1e5fd9e1f54bcd0e8c2927b1147ecd4591b";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+cweb-old = {
+  revision = 49271;
+  stripPrefix = 0;
+  sha512.run = "efb1c9b65f7c628905d2dac1373da96346b6b6c78f15e8c0c8055e86c1a52b09bdb5f78fb06106e350d10a8daa378eb45f5fe788c6c3d8b23f0b47c3db6f256a";
+  hasRunfiles = true;
+};
+cweb.binfiles = [
+  "ctangle"
+  "ctwill"
+  "ctwill-refsort"
+  "ctwill-twinx"
+  "cweave"
+  "twill"
+];
+cyber = {
+  revision = 46776;
+  stripPrefix = 0;
+  sha512.run = "f79e9ce92036c8a106de0a5da06f5c2b833683527f1225f5b69298b6d886cb967f9d1eb459b7a0543d89b0943a8425dc802619fadb9d69aa4f57a5ccc71a593b";
+  sha512.doc = "4dfc2289e92552dde5cd1703e5644e6a19f4281dd16cb80d86caa35cfbc07eaf0f5cd57686e185adafce3883433fc87b1fcb590cd65087571115dd4b98023d02";
+  sha512.source = "cf9beb92528c860a3ec39041c0436d40d113bb0cfaf89ae9c5b76dd44ca18b846b14739c1a2b447ea1ff84042dbecd48ac2cc118615ebd30013da305e822c81d";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.2";
+};
+cybercic = {
+  revision = 37659;
+  stripPrefix = 0;
+  sha512.run = "f3bfbece973cb3b9a3077c160b0212561056cbf7733e1c011b39fa1dbf94395937f4858964acd0874f1cd3ba283df9797cdf19e8e71e7363a7619c5ae653881c";
+  sha512.doc = "dc72453f55c6a72913865f584b026baf287a35885548ee5c2c8d29cefd60595f4aa9f7c456f59ebf3ed3e3b72711beaf90cf85f24c2ce6773146fd2a4724767f";
+  sha512.source = "55223353fadf2986f777b4a61b2f34662f493d2c70e29cba8712625c16dfa49ba50644d406f49a908afb0e4b6816666c1cf5f060685d5428eb2787b6b4ef233b";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.1";
+};
+cyklop = {
+  revision = 18651;
+  stripPrefix = 0;
+  sha512.run = "dd6584831fae3eb388f66e42f289f9bdeff401412c7df471752c4aa56bc67c16c56f6f271d11c289a1389faae138ac15abc41bb716bf344bc2f49fa087ecd380";
+  sha512.doc = "4d81a01eea30a4f86b2f0a7c9c21923196dbd28c7d5ba5c1639068318ef227720550b3052cf0ead6f3194450d50dce9acaa325a0dace0e6fd230e0ed11d9b106";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "0.915";
+};
+cyrillic = {
+  revision = 63613;
+  stripPrefix = 0;
+  deps = [
+    "cyrillic-bin"
+  ];
+  sha512.run = "1b8889d33e5433b32d0b84bd31ef7ea96fe338456ef8e1732ea6c254dfe2f21d3600766b1e51bafa4ddbf0144e8420ad8ba6ad593eaa32c3d45dde99b0b4ec8c";
+  sha512.doc = "b0b1d24d3e8887c5b9c251922157de7cf042845009c07e62fd324ba850dff9f39bc6ebad04ab216ad69070da93f77f68693d1be57cd15b038374f0253329c8fa";
+  sha512.source = "4dc564f475a883cb75ae0fad6b5aecb936c1ab9cdaae857dc7cdfb3d8f06f6534542c36b053cc7b74f455a2646f081060c670b35f1eda5fa69418b1c1f97e5dd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2022-06-01-PL1";
+};
+cyrillic-bin = {
+  revision = 62517;
+  sha512.run = "30d3bdb0f92a0006613dee654714818b6961207029982d62b9933829b3d044bea0b2d9a30d0007dac23c08358a7ada2df9ac25ee92398cb32d47e9c29c503c67";
+  sha512.doc = "91da42251e165d17507b37eb48b35e157c75b06fa8822c9717fafd5e7aadc60bfeb084dc30a5ec32df22ae4e69c03c3f00e8a243d187881212ffe62c96b6235b";
+  hasManpages = true;
+  hasRunfiles = true;
+};
+cyrillic-bin.binfiles = [
+  "rubibtex"
+  "rumakeindex"
+];
+cyrplain = {
+  revision = 45692;
+  stripPrefix = 0;
+  sha512.run = "84651aeb63d3e47f208732f3c0d54ba86862d0ff7da7c56b3d8b8d1b49b6b88ed4c5f9abfb4c1c9d8a1ef8a455632aaa69408651e238bdc4aeb4eb7709f62096";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+dad = {
+  revision = 54191;
+  stripPrefix = 0;
+  sha512.run = "600bd3267a47e5513f51e67135920c15aa7aefb51f2c3dea6e912f26d1a45071f936e4c568afd322aa7e89d5139e68398b394c287d5076c17e310297fa7f8fa8";
+  sha512.doc = "97d4596972c436762e33bd1d5077f7fdbe7da2a74b016a8841ad98536c2e9d9a2bd01a91b1ad2fb306c7ba06a0a5532d47c7b813d42b0bd82a3390f3bd17760b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+dancers = {
+  revision = 13293;
+  stripPrefix = 0;
+  sha512.run = "f570e4c775a7e4cdbeaf2ad764ee147a685b5332369aea29175a76fdc9fb37f052da295d20a177eda8e4b8352d733034eba36882c2507fe804d7b996c0e0537a";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+dantelogo = {
+  revision = 38599;
+  stripPrefix = 0;
+  sha512.run = "883c5d6f8368bed41002eae123329954fe38cc23a5e6db7feecd57c16540b6b9277cf7d13af6ce8f63994c11148708e1d3dd10ddd9d17457b015d40477f91eac";
+  sha512.doc = "4612de774c6a39c7f09dfc99aa182fd37d9f3e32dece37726f1e87e48e5faae246f2959992267f5b2cb685c26177e47c5112fbe42b8f1ac3a60da92e6276a681";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03";
+};
+darkmode = {
+  revision = 64271;
+  stripPrefix = 0;
+  sha512.run = "f844ce29d5147d9a558f257bfd1a6c32f2f1de1fcca4f3319d22528da052fc228e61606623820fe078db208509774dfc87dcd82058a2e744e703d03edc0bdec1";
+  sha512.doc = "db103f2257b3d844592ba12c0e2c22d6ae97e8dc5e47521392ddd59951d9f9a56004d0891f0a5e84d511ec2043f1fa26c4cca4ddfa23ef7abea39637e6d54a99";
+  sha512.source = "39a760fd973d56c94f60026906597bf74b57ddc8a0bdb913856a06358b849999e7f7c49c54e102160771e599bc3177da5788651f48abaffceb14d9e77465ac0b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+dashbox = {
+  revision = 23425;
+  stripPrefix = 0;
+  sha512.run = "a52bac248fa26031db34686e57cd3c9be90bc18b41339d7e2dc85a68de1de23a627648599e5fdb207d3364b2b4e3651aaf9c2d90e6c3bd0f0fdcaa30fbc8932d";
+  sha512.doc = "26672278ffdbdaee64b82f4e7554b5664ca3410ce8009454cfc229e3590439b4a4e212b77568605adda885761f5ad456bca022f198e259ff9a33b8e0abc1ea6d";
+  sha512.source = "833bcc8f98e6fbf3e205b54311dddb9377026234132e5f988abd25e3ace36b9f3b54a95e98a5c4cc40ef1f049536093b0f779517c6f5a63a08459bf0a7ace741";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.14";
+};
+dashrule = {
+  revision = 29579;
+  stripPrefix = 0;
+  sha512.run = "4b1b993e9044eb2ed4bf6bde0c114b0cd1fe7daed38f8bc5d3e25a2705d55cb41b8a372cce84b0d61093044d970003a4317de98cb468978c8cb1a8315f980940";
+  sha512.doc = "f45e0785d7c6522683e724ca27f7505e3da6bf5923d5a8c71a75ef8c67ffba8a4e4711b91b64f25dca95566448cbf74b5937dcecc73f5ec0aeff7ace8d0e4c1f";
+  sha512.source = "0cf95a6d5fe3e80e9f77266033d64186300676d74a7cc39dd6f907784d1a6f7c9f83ff5a50198eec8bfc075ef5adecf58d226063f3f0e02f55dd7cc0daf691a4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+dashundergaps = {
+  revision = 58150;
+  stripPrefix = 0;
+  sha512.run = "c3ecf5c63fad14f82228913e0b12c6596a9aee24b6de3419a4e95de8de94e40e3d43c2b163a30cf221602ad9c1aa1c3ba42429ac2adac9d13888d74ee1f4e900";
+  sha512.doc = "88ca6be34c5d68ee4f983b9385bd83047e59bbeb94af12d2bd16105bc8afb99b8e6db9d0e25717fe5bd517d7e834d8795bed30ba24455d8f09760d1ad2c47803";
+  sha512.source = "1fce3d4ccecef6c2f5775792162a9cf21951f0006e168df236884f89a4bcc662c1ab9028e856805ebdf19dd410c109ca3de993c088aa9c0611ec98565be06be4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0h";
+};
+dataref = {
+  revision = 62942;
+  stripPrefix = 0;
+  sha512.run = "da099bb462ae2698784097cb04268b039f0900fbe57d77284532c0ef694c50d422436e5e0d8ffdc9442b98c12d52c72629b29f772b0d66f226ebabca579b2249";
+  sha512.doc = "6f51ed66ef467438a856ed22a7644d2bc574c789e89025cead65393d701abaee299861873d97c9509522ac7e478a35693e34d2afc0bee3d08d862b11992e4230";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+datatool = {
+  revision = 52663;
+  stripPrefix = 0;
+  deps = [
+    "fp"
+    "substr"
+    "xfor"
+    "xkeyval"
+  ];
+  sha512.run = "323b1526a32eb4e0d81db77278d66ebb6ac91fa357f7f76c8ac1f199efdc4be17ae4f8fb83fe55f3ac9cfb8a18d163a85d6c21cc11c26e4dea0db5f85dc12dd5";
+  sha512.doc = "32b5391c7197bc29783bab0c93a5225784fea999f69bdd8b1b5c152ed338716f82dbedfdb6cd19064ee409407c0b808e5f410e6090cda6d1f8ded2ca41f3ace9";
+  sha512.source = "e149a3be96ee0161b2bd872ab73e74c36ea638f0a1f0a48e0268093bdff2c2c1cfabe5c0a4d3ca8ef7ee4c02bd03710c5c1b2ff9c1b543ed792a444160814493";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.32";
+};
+datax = {
+  revision = 61772;
+  stripPrefix = 0;
+  sha512.run = "04de65ca5219e0e3b53fd0c0b92fa514bec77be2f889e48ad100f93113f54e738016fdd93ae59d79ae7f4ea31108efb9cbac87a6db010b71008fb17dcfa19900";
+  sha512.doc = "e1dd35b5dce9a4ea5b1bb9d9db14b8e6b6f8ab1a8f374079c2328862fb231b4eb69a05e1bddac424401d063925b4a75a9994000ee4c36c43e3fa6344badd6f5e";
+  sha512.source = "076509cc39ab41b028cc17551342bcc26cf8bbcd5c12d25d291e2eafb3610d390610d36e917a192b38fd7870c6ddee60a365bfa9711b024c6de2a3494dcc498a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+dateiliste = {
+  revision = 27974;
+  stripPrefix = 0;
+  sha512.run = "6da6a802994a06e040d43ac7fc9db0515d9273ba9d4cac061e04b05922f9eb9fecaf138eb641b3149be7b98f9139c428084b6470bc177a020386e0dc053427b6";
+  sha512.doc = "53ca32cabd7e3a32d02c77beb076b08ccaa782b6a2ae249b932242987741f0e255bdc83a2b6ccc7ed2e0efbec66923798026040745152f7244984a0843c8c23d";
+  sha512.source = "563840e069cd1e1c1e9b1774c5c3ee8b1703305fac3fd5f58a0afe76f154210150be05f779a94717c227978d2a1317a10f5b6232f51dc7b3e422638b84b2ce95";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6";
+};
+datenumber = {
+  revision = 61761;
+  stripPrefix = 0;
+  sha512.run = "5c7d23f949684000d0e38855e11e4869433c33f82fc42da0568d4b74fb0e69fe3fbcd5f72516222059ee446938144c18b10552290e24e077f2e624286e729d28";
+  sha512.doc = "18f2573f8c02685d20085c31384b75dd1ab5a47a5bb2b9dcda036a7cd1ecec80db175a674c1f148cd51a078721ed88a3c9b7a0915acd7c023c02ea9a16e2a1f2";
+  sha512.source = "7835857f1c4f3e59918fe9ecc903dc09139191b050b1b0166e4e1fbe4a5d0c95f33b8591f30012ef5d69af324e8a71cf24b39893029519c13e13d8044b191261";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.03";
+};
+datestamp = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "558e8ec60ec317f8342efd63d0146b92e43ca37a772b8fb200a40234d48a71e5374cb3f3f15bfdef129fd1fee8ed27491bcb8b69ae2b681abee72a3dcb8f18af";
+  sha512.doc = "d9627cbb294f0bcb96b019d3497b12ecd4b4eb656a1dfd70d1adc6cc4cd217bed9d4f9e209497c683f925cff4063d759b02b44bfc1f38421a9044aa8ef8bc988";
+  sha512.source = "3afaedee82a4e4c6f92f465fa59ccb29976272a75aeb523d8c161b07bbe313b5e79dfd96195d0426926a3ddb3117944ab21838d085e1cd59256bae31419e243d";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "fdl13Only" ];
+  version = "0.3";
+};
+datetime = {
+  revision = 36650;
+  stripPrefix = 0;
+  sha512.run = "3d033ee164d52f7085bffdc12f2062be7e94a644d9ed731b4d1b97a3a46838dabadcf6687063e165c65fc938a51a4adf8078339b720a305175d6cd6a3b889f07";
+  sha512.doc = "510449d17b09d9207b76e732b5d426121888cf653f29bb3be8872b74a243596ac339f09d11a14a4a3007f8818171aab28727cd1713ee35c8908d2d168a57d9b0";
+  sha512.source = "3e03ba12952ad5dafa701c7ddd5d79097890d13d3510d420cc399b30b1c60c2b6f72bc5caa2a6d2f53ec50430d13582c5c6fb549dcb3566f827af0d4abeaa011";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.60";
+};
+datetime2 = {
+  revision = 63102;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+    "tracklang"
+    "xkeyval"
+  ];
+  sha512.run = "7f2ad65f95e3881e5016647bff85b10138faaa7d26d097bdce0ec7b30cc0d913a43c2a45b0caa69a6669e54725122cf1a86117d0d4f543caba67058423af7f62";
+  sha512.doc = "d43970aea6c7971ed6a3564a6681caea0e0f5606607496d9ec51d6c2fa741dd6c28754c9e9f06cde0ad1a79280b53629eb427faf820d00549468a650cbd0eac8";
+  sha512.source = "511c10e67c7d77ee10d8d75704628313a1598636ce82a5ce114942854b3a9d2da237ed12fdab986f13b04ce3c2123933db91b850360b309aa52305575a7cf2d4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.7";
+};
+datetime2-bahasai = {
+  revision = 46287;
+  stripPrefix = 0;
+  sha512.run = "6bc05fa0f1cfbf05008de715f9b278948272cf7894e8c29b52b6ee4ba436e01e5588356fa020fd5453ed2e9bee185cb46c54ee3e808417782587c9509bab17fc";
+  sha512.doc = "d9542fe7057b9972c6e0b9ebc1360c2fde8f9b3538e70efd7249f0bb344f2d5c2845acac9ce39fec6f9f7197b47e65496ffc662b9f3a3044829e4709d6202995";
+  sha512.source = "7edf39f7e2c5b44923e66cf3dee57e7681c549b7ae944ba2f4593e4643e9d50b686b8c1cb6905326899b6974ec5c0587ec7a5f4f880b5b1e81c94667240c601c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+datetime2-basque = {
+  revision = 47064;
+  stripPrefix = 0;
+  sha512.run = "73d7dcb4a2d13d4ad4747d4d2a19b839bd9a1bd55793657315832178091357f61d9b748d5aaefd317baa7f52df2a4926dad6196d11d11cbce0df78168b2ad380";
+  sha512.doc = "ce083f982f95f5e4beb33a706144d26f6f09de8ede946ac89d28ad5e5c75f9a475e4e9bca5fbc7773ee90a91ca095f0b1a9908fc0f74fcbb4117ec7511d603b2";
+  sha512.source = "a2bab4c1956a0471571221a57f85e9f4260e349a9b775540638255d8313f5db2c9922120e045b8c769b7b7fe1698c7fcfae1e1aa101e858e84aac32673f6fb86";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2a";
+};
+datetime2-breton = {
+  revision = 52647;
+  stripPrefix = 0;
+  sha512.run = "725766f3227119012a79807c5909daab83e8056718cc4e116d8992d13e11867439d71392cdd8a2118f2d8ead61b1d36af5ae42438f8ca68f26ea14f0bb7cd0c7";
+  sha512.doc = "f421a467caa9202ec50678d398e31e1c4cbb4e98805bf86114c97fd49479670e825c1c091955a41056adf0f9c7596dbf5dd14397326c1b88fbc2b6f75ec8ec55";
+  sha512.source = "0d1d5ab08bd27ca1e322ee25f8a6d58733d29291439c2e901d971969f4f05148b2c1d660567ef07ef9d002e7939dc10d5bf37f03fb23728e6242b3db783928b8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+datetime2-bulgarian = {
+  revision = 47031;
+  stripPrefix = 0;
+  sha512.run = "fe0cf5eb73c5253467a8d2b972cc20825b5179ccd3964f64656ee8f4fa5d7fb7bf1660a7e79d58c491fe74e8c9421b75c177d4c8bf7309782c81ddeb69ff1203";
+  sha512.doc = "f07df79af157b8ed471f5c8021719d8ac4dea9075885cc42ed0d64405692efc5ea59b6a77448225aee477b8fb05d564ce9155b7e1efb3d9cd7b7baa794783cb7";
+  sha512.source = "9692b6932f74a7e15a625612dfefd975a948f8a2111401c44b156702fad868d7d34381191b5cf675f0c17aaa6234071e10722f6b912e80f8afc4af69353dbc6d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-catalan = {
+  revision = 47032;
+  stripPrefix = 0;
+  sha512.run = "7a414761760e3fb61ed12c656a88b6ae4d36b8268998f10ffc85a9cd362a6ee60b73b37c0994aa47603e805d785a3a0faa7266efa46c3e017535b864f2282e5d";
+  sha512.doc = "d1613bf5d8a35f69bf3dde127a764434b8527f0e627cecbdda43490642cb8d0a10ae629bf5f1359b7a87c12b3845bd468fb2c00b508be1d2cd80b6ad98904ebe";
+  sha512.source = "35fbd618c48265f4cd6bdccca100396f54b6379111189f8fad705e93f69026fbbba21f246074a3d154855b0a04e83c4a310b99c78e2105f821d109cfdadff6a3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-croatian = {
+  revision = 36682;
+  stripPrefix = 0;
+  sha512.run = "603052fb5cff6ea8fa5b951623efb1fc72aa6583fa1ed560b4c5266ce96cdd209423773ee0d3a592465247343f3fff966d7a9cd9698e02e339d5a1c579591f37";
+  sha512.doc = "a56060b84fc6d2917fd0cf160f0405104a3413e02456ce91cbd97aebd746b0e91c730d2e2e4bbbb46f39521b5c6cbc45558bb4327c7260719ce21e8226fe5910";
+  sha512.source = "5eca1a663801a65b79e0cc069bfa8840e04e08e589445713ea0646f104f5acba51d6f925d2d4ea1c36a83b8f4e095693767a3ca71a33af1015fff5f396c51bc4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+datetime2-czech = {
+  revision = 47033;
+  stripPrefix = 0;
+  sha512.run = "048ffe6258ce1d4bf9d098e7623d3c5e25ef8215a538e33806c4d35d6368fda81941ff9adbb394085c9b4f058fe9a3b02cbeeaae8cb1f7b2bb55aaa35c743d61";
+  sha512.doc = "976e98000a80e15a4ea5204f15a5288781ab35089bcd9427b62fb445f28a25ba0c03af4e64a3de688a51c5c94788732fa199705a68de3e9925f1db4ec7dcead7";
+  sha512.source = "9ef924462b97d29d6102cb691d1845f68ec50054a71d93222b61af91f510211016fdaa4861433a65c589263af11a62cb23d64a79f5bb26624395589dfa812515";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-danish = {
+  revision = 47034;
+  stripPrefix = 0;
+  sha512.run = "b9e5b442282fcebfc114a772af8317d8888cdf24cd5cafebd5d3c79e3ea8790a4fd082c2facc1a466e7e5b4266b0d93ea5fb6cae64f96f3d131fd4869a465a4c";
+  sha512.doc = "1d933d9d48ad6ef3dd0716fce0b2da6de6700bcd8c1d729d8216145dc5f243ea83323b0fefb6adeaf10a9fb264343e1b429044aaf86e6a77a121b0c951c2c77a";
+  sha512.source = "dbccc381f173d7204eeaeb8b8a4fcf59e6f0750213986207afbef3754554e4524e1ceb3620135a93ed43d786210583b3f931b41a1c645bfb22e33dcaa45a6c85";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-dutch = {
+  revision = 47355;
+  stripPrefix = 0;
+  sha512.run = "c14fcbb882183095c60f0e881ad1668f90855b90cce352922a562371bf2cdd556bd196ec85068775b9aec590f098c956c784b98da283ee1117bec68ee585f5fa";
+  sha512.doc = "e5f2fe126eaf87ef34dce686db6e9b9c3c322a2266293517e803435dfa67b55da6a771f6c7253203dcae0dd1237096093a6463f6bbbc096c108b73bac4a641d8";
+  sha512.source = "32036be5e4e8643da1cd0a2a291db4875328c5e8685f711e247eb7fc38b6b25b92db2f98bfa3769a02c982ea09cbedc75bb963d3f39c36860f9c335e73e331c9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-en-fulltext = {
+  revision = 36705;
+  stripPrefix = 0;
+  sha512.run = "19f08e264921b8b12def2b20bb1d904f90dae712bcbe579a9697d1f657f148ad8311c6d7a8621f336dc82518ec64438640b49776fdab62f302b0919cc7de8e4a";
+  sha512.doc = "a6ed1e804d8229d735aaf1874458dda3206ecb5e648c35af82a1d3fe524e65aeb7669088dc4bd9fd83919263d59035fd539a8318a24b2bc2470f14670e28eced";
+  sha512.source = "9bf741dced10ac57d7c4fbc3a8a26b49b35d07a221f4d7ecf56ddfdea6500edeb39ef75ed0234d6e510ea07da5da06cf29691a36545dc4367b3682e879d92b10";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+datetime2-english = {
+  revision = 52479;
+  stripPrefix = 0;
+  sha512.run = "2faf2dbcc9e49a9c30e5af599a26bb6925c6cb6831c1eb38bb58e08f50314cde1f3ebed343fc43ff50c6338a089caf90b8aaa53093f1284c583ba217c25cafa0";
+  sha512.doc = "ff904eb3279062f6573aa0190bd2f7426a18f4b67564b9b10673a88c4583c580cb88b33ccbfc0c8a979b10f6d2379bd22ad8483f19b1c4baf3f66e06d2ec52f4";
+  sha512.source = "f5177d83f75709135356331615baa47cdea2a01fc706bb507391c40866b1d072260bbba4ec33fe88ce44e9995bec77941d636e5ec6132b6c4f07d2f1f25fffae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.05";
+};
+datetime2-esperanto = {
+  revision = 47356;
+  stripPrefix = 0;
+  sha512.run = "6406e5a6708c1c97da6e0f8460ba70d61c403875497c57008013a3d1a8a9100b344b3d7267ed869f777566aa403110e17d778e2a47b3970846324bf08e8ae046";
+  sha512.doc = "c200c3f39ed756765876ca5655b99025a898719f9723a996bd4772974643e0421edd8d36a8eeb00d29dc75ae715fb55927e31f067b1159bbb1f4dd218de780a7";
+  sha512.source = "799b2197ce9f0950889a933952dcc33dc0ad2cb97d906baa61bdcf8d32bbf341d65aa2c2f1509fa59f366cb570e9ba6b4946d4d5785c5022c55117297192a32a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-estonian = {
+  revision = 47565;
+  stripPrefix = 0;
+  sha512.run = "93e8ebc62b48da8f5c159822f53c35aaa2cbd2fb6bc701108cf6452db7eca3df39de3c1ba9b84136683d22d65a975dc138aace0a81960d1c9382309a4cee5f3f";
+  sha512.doc = "268b873d870ff19a3151d4244b0329994e559ab61198ab3d76d830b1bdd6a05e8b5a7a7df2fd6eec8d57b9e28626f80af755b1866f4ee90eb0c7e94b85f3c087";
+  sha512.source = "2cccbea84fc47da4668a06154b97116b39e1aa51e31196c7c9a41d517aa5f24924c86474fa8f7f1252e356a85392977553b6a28ad154d246bd5192a7e7f07b4d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-finnish = {
+  revision = 47047;
+  stripPrefix = 0;
+  sha512.run = "45f971bd3711d1424b002f32e0535465658e50cd9abd9758faa3685aad6a6e74747e7b3cc840a38968ef49ecb91b3007ec678f63f0c0ad3b77ae0c39bdab2457";
+  sha512.doc = "01470814a87a5c87bb54b17a763011872864aad8d1f78f82c2325defb7f135daf34aa2b721bb4cbe7ec80efcf839372de07c29245ecc477708fe60f3d501a258";
+  sha512.source = "56f4b99f506673c89115e37dfd9458f5e3e55b62dc9dedca98747bcbc7e6e27306dc2711c05b0c8e2844aa03a4c8f7835bf6643ff082b7d1ed246a68b2af37d3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+datetime2-french = {
+  revision = 56393;
+  stripPrefix = 0;
+  sha512.run = "b786e4534dad90a76fccae091d86396324c4f5ddeffed4a2aa44d2df53cc3a05556265603accbc5f07bd1464f00caa9fd5ddaec0faf8e10b4edc9ea036c3f82b";
+  sha512.doc = "6744ddc0a8cd6f190de4462a4629d01b57d3a3bbd33f7c2fda8529685316565a579903bcf4192b5e811cb879eb01427c3d03c9c94ea59828b03f1763ced586c4";
+  sha512.source = "0566b2fefa4f170bece84fc5cf76ebea6805f96d48476f1314d2cd51252bfdc9814ce5b46de2a78a808ff1d8a60026753ead89bad17f022b717d36c0d6e8110c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+datetime2-galician = {
+  revision = 47631;
+  stripPrefix = 0;
+  sha512.run = "050dd3e5db5aaae106804a315e679cdee0a4e9fc2d10481f21059c410a73492d6e41d9db070bbe5112377a4f1dbec3345bc5f87efba998130cb20e31a443bf34";
+  sha512.doc = "881250aaf53eba33ee223e5d87f0d8d4081785ea723d5f2e605d04767aed63b2fd8a592eabddd4343c489f1abd809218c600aa5df2447b24bf0465e7a31c8ff5";
+  sha512.source = "671230a9b4da0cfec5c1afd50db2ec103c1712006c70be0c9d6d1eec637461005673c73dd1c457561e54af1409072fab111e7d93e785a91ccc6dd0cbbb497127";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+datetime2-german = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "1c020ab84d3c6f5b5dfa8170d9be8344c6a63bc3a7f462b29697fbb892eb4061a502801177bf21408f3a6eb68fafb8b77711c125d23e662ce1510f75117c1d03";
+  sha512.doc = "f050add5492691986f50007fcc48fc36a0a19e6a23303062c5a865be753e0c56f4f5f955efc22c4c838fbf9af79f91e0f488e00027f4bed045af483ce06cd24c";
+  sha512.source = "f131874dc61bc52d040dd25ce684782d50c0519c03294f23f9c6b717a8f574751e8f2df18de0b74bb3a9026718b6beb299435af6c990e4e2d7c891e831fae7d5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+datetime2-greek = {
+  revision = 47533;
+  stripPrefix = 0;
+  sha512.run = "d067dc579e739c8ebfee602d667042c4727e73595fc199197d58d0c6caad4460401bc9d08965292b36811e38be5424c22d6dc4f49c4a9682da3ef34d46e35cdd";
+  sha512.doc = "5025cf0113e24efaa2bc413da5d2c14c58ead82ceb07fedad299783c5e445a40295d54e0d5ef3a5937586c484ccaf80e40fcb95e5592266fc82e5e52966af6dd";
+  sha512.source = "b0cc23d43a600f72a13234938b2d1e26d011e416b5f979f86003b4ba4cf53f3fe76db4eb5301db23263490b59735d0226f0b27e10a8f521febe52758a3f63ade";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-hebrew = {
+  revision = 47534;
+  stripPrefix = 0;
+  sha512.run = "c9bfe10e1cda7e3890cd79fac15a8f629ece47971caa43229fe73236e80e1f476411aa4d05be61f7f03bc34324b114ccac2585b83cced2d38a28f279639523d1";
+  sha512.doc = "636dd01321842cd0ae1c3a1ed8ef41e1704d720aeb830f03a93c921c4735c1913211a1d987a1b430e312c57440a11cf8cb80f4336b4770a13fddbd9d6a5c3cbe";
+  sha512.source = "9d1cd5f81a144ebe0efed5773ccc480fa2a14fca7411ac621a489884873dc7fcc6d877c66c7e70ec6736f4e2f6a90b57c9db0516baec961230f14dc6fb55d404";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-icelandic = {
+  revision = 65213;
+  stripPrefix = 0;
+  sha512.run = "020254357b8f32dc146018f3eca4080f239203128671d8e99b712dd038e39bfbdabbabc2e62bf0782a86a3f5c6742d8ae130dd589cc6ea28f87a3ebdc9e9d994";
+  sha512.doc = "e3cd7b3a0d8ef17d5b5baee057a0b5c4a445c3b8ebd2894b27d5dea9e7373fe4798bbd48b83a1a96704661b935c3196f52ee8b21d624a91ad75ec51e5a246aef";
+  sha512.source = "4b9c797ea798156c88f4e4350e28ce3a63111a6c8cbf7399676ccee60f117196cb32dda2bc56b7a2386756afbe6e5207d83e59405d8e0f96f59f85f2359b80be";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+datetime2-irish = {
+  revision = 47632;
+  stripPrefix = 0;
+  sha512.run = "8c1d54d5fc80b2f7dd8faabc31df20253c9ee48987c268ae685144b02acccb5c3ec6bdaaa5bc420e90ecf4ec7d421afc96d82aef1a76ec7e01fb8e5f81d0a036";
+  sha512.doc = "692acb7c50c30e6790344b37e9fe3cb07f2a0e10b9d63b47c78df1b2d1bd1f8f186107acf4d75dabc14a99db57cb32810989bf7af817bfdd16fa694bfee5f17f";
+  sha512.source = "1e829006f0182374511addef820ef08868eb1c00b5e82d0da82efadb4df377531755a4212fb0e2f4a5df0d06aaed39863094524b351c29dd88dfd5ee71c84860";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-it-fulltext = {
+  revision = 54779;
+  stripPrefix = 0;
+  deps = [
+    "iftex"
+  ];
+  sha512.run = "29a67f9c4414d08adce673ac2b501e92be5822470511b55677b041fa1d89b55760246fea08ba0f4cac7ef6f8e7ff52498f0459d50f94bf2bc6b3e4a944976a99";
+  sha512.doc = "24bceb74337abc4ae74bbf9101bd32cc65371d60a0461cec91c8e3ecc3822c848eb8c7f0bc8706ec1b2118294df659b44f3139c3a3ed1c0c243f9654ae1b3d6d";
+  sha512.source = "89a91a69a45100324b24c5cca3e0bdedc8dec2a466c414e65044f55a6c1ec3c715946dd5c5ed942fc9dc8f6a597fe5f2075dd7d05c88d241da4bccb27ba9cb3d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+datetime2-italian = {
+  revision = 37146;
+  stripPrefix = 0;
+  sha512.run = "d099d05904e416d44e9a9ffb337b23e2c1f908dfddbb41cfd7629c4abaa7769c76f50ef687751224ab4ae94a0df4d1962adbad602ed3a7473566e16c5c4bea48";
+  sha512.doc = "963759f5e07e01315b827d4c67364d9367d114a09d518154524ba4496aee69f1ef08acbdeb67522d3b350a6f8abf8bf571171d4c380bc3f093d59ea3207beea1";
+  sha512.source = "4036338ded2298c97e49173758317706452c254bbf07dcbe83080e28b6d59415d0ff14657cd11b9a5981ca893a4033db338518e251d59d0c4eaddaa9498189f0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+datetime2-latin = {
+  revision = 47748;
+  stripPrefix = 0;
+  sha512.run = "25f4e92c72abe14db9340aae354e0f598aadf88ec109b6dbe6b48e12f55926f63fc80ca420ccbbbf8fcc8dac066520d69b653981ccdd41b2e8588d85d4f11a99";
+  sha512.doc = "f683c8764e99edcd9d9a449eecd3f1e4a10a2803a20bff7be22568a69ee1b06c5d054d6664a051b0eef8cdac5bc2387175cb582d005e1af31a5be8bbac4a0de4";
+  sha512.source = "9270951371b2595f59a5dd8f8214603d9a72856caeb7902488fd7e7068b16c09b7ebd8f94cf10b99d31fa95777b475d403d49429944bc79f20faf37ae9192f8a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+datetime2-lsorbian = {
+  revision = 47749;
+  stripPrefix = 0;
+  sha512.run = "04fcebad65bee525697ba96cba9d66d6acfe9bc602b6cfb207103a2bfba0d3cbbef948d614930c1a2bc785a6ae2ad6c4e0b06db58d562681225d67b7a5f2f8a6";
+  sha512.doc = "7bee606e0c48dcfa676835e3a313ec8c3b79f566fba6d6b65cb34c4f939e7a7df34d73e24f0f03d569e0f6a01cb244a90b9023e2846c597eb589e984ad9d1f18";
+  sha512.source = "9dee46b9c2290e00c1a9f9d7e63b3872ec206f7afe9ff0ca592824319b035da1295f566a8934d7d4e87f47b8061311682d2a6ace9a9ea15180433279759d847a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-magyar = {
+  revision = 48266;
+  stripPrefix = 0;
+  sha512.run = "4d3b27b0409d26431cc06a1ac83485b6d4d63b9bba30a862ac043cc27c25a77805d5c3aeff3a329e1348a32ca4ceaea917f2f840ce1696a58f00325775ae5009";
+  sha512.doc = "1eff11bc2c7cdae101331521f08d3a9eb878e8d1695b35724475eb5b99e0a537bf16a00bd3c13760cb36306e84b72f15e5ec294ed958ab5d67e75ad8571ac9a2";
+  sha512.source = "674e795a5b3d49665bba89c7f01abdf4c366a72f9968ea008455179319f66061ef2f73e21c6ae736e6dd960aba1184b7e374eecff8429d1b533078202f294ad7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-norsk = {
+  revision = 48267;
+  stripPrefix = 0;
+  sha512.run = "9ebcd994305b3b3aad61383b9ece13425b4c34432dae0aac2ce38c0219b2f19871f89cb30bd774a7db9be45cc8a21f7856f1f568c32941502b18f6089b787066";
+  sha512.doc = "3d834d8572cb8f1237b4b9e69bcbcf1a5eb0a1e5c001e8610a00ec377204c570218f6d97765c3efbad9130cb2ad9ced3cb80b32bcdfccfd62d7069ece93ab1da";
+  sha512.source = "7dbb4161731dceac735ce39e042713a07d3d63dabac0a4dec870a022ba79c2637d7fbde4715936908d39f3475746f243dbe2e39d88040f35822503f59c0f87d0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-polish = {
+  revision = 48456;
+  stripPrefix = 0;
+  sha512.run = "3b63541325de4082a828af5131a639c11f2562b8e2951f50199f7281e7c59e2a2deaf8cba124cc8679a4de5da3e95d988bb3533eed6cdbc9471a95476ec59bc4";
+  sha512.doc = "6bcccc320063567e2527ca6acce6180c9d19a3ec8a1e922e640e82d3ad2a244cd455741e059e385fa26ee6479ddd5086b9dcf73a705988adec96a311cfc5e40b";
+  sha512.source = "0adc45a662620826c90aac5f0372d83462eb571b7dc0751465ea246602ffe4f7b43f6a5b3153cd04681ee8baa23703784e15b79e5ae2c15cc9e6db5808265b8e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-portuges = {
+  revision = 48457;
+  stripPrefix = 0;
+  sha512.run = "976ad1440f05bd166659b5b950691b4d0ce988a3d71bb91525e4448b1520a6ead37bbb3ef9a899bac08c7dfe8cc7b9b7e15174c8ef143891133bc00e5c39e9fe";
+  sha512.doc = "3cd176813f3b0bb16341ddeee4d0a848b4eee9bacfb90734d97fd9ddc3e88285057dd0bf4f0f3ebb5641ebee48b15161feb3e4e75032e32368a51bfb9ca4a8f0";
+  sha512.source = "71b769e4a63cf02cf6c2794d3fb876a33d9c8b150059a2bc0960b8cd1b355e5ebde3d02b48ea47653cf781721fcec118d78301021e8b95543d32215e690a3c12";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-romanian = {
+  revision = 56394;
+  stripPrefix = 0;
+  sha512.run = "fed59ecdb496fbad41a5558526671cddf9cb487f50cdf103f61141fb1955170e54dbc3fc134ef51a2867715e7bc714dbf81bbb11e6d30c324a87492870738d39";
+  sha512.doc = "7c65be46449bf92e2c41623e785c6262c710de23527ea54c505cbe155af50dd9e9831780dd380b3d0c44af7607bc59fd3b168d700c1a8041642bbe4b4ae9cd08";
+  sha512.source = "58e3773e40d6116f5cbb6f2a46d33fb6d557d42887efb130c051c24fd991d8f0709f5afbc8e6ee9b5ada21d613d4d8975488f2e691bd0951c5f5429eda7de61e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+datetime2-russian = {
+  revision = 49345;
+  stripPrefix = 0;
+  sha512.run = "2821680ce189aacf8b0303d5698d9359f240ab4e470c0e2b052235e6aaeeffc882ea4b9c9c4f91d52b1402ef7486c7115bab8058e2223b7ebd3186fbd4c4c34f";
+  sha512.doc = "97c1b02377328ff75775194baeb2c3e15f2dafee303dbb85c47a0baf7f6edb4323f754578a9caf9db609477204c1310dade3b87d5a768a16fa940be2fe320081";
+  sha512.source = "f9055eefe76d9844e8764ec766c0e1da7d3c61db65c754115cdc47419ab68d84685688e59939f219cc5ab87f79570cd4c28011ca597ee4f89fcdc38c42e82a75";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-samin = {
+  revision = 49346;
+  stripPrefix = 0;
+  sha512.run = "fc4e6401ce02b1aa7be5fd78e5d5e74aff6ac35cbb6864cbce6d93fe0b2716510f6ccdd290c82286b8e51f37abe8460c0f8340ce0f9135838ecace7502f72784";
+  sha512.doc = "e5879faedd4d4fa5ac40575e0ccd1d0db94a80d78c3d01f8d36bb37875e2b9025537c876087b85626ccaed5c90f505a98fd3e5adee64ac1bc72f48ff66114438";
+  sha512.source = "4aa4d272188a8a2b6e40792b97df9b205857870f3787153502c12fbaaf81ed61d9d823a7966e147fbc1d94f761c40f179d4025166a48f358821134559a7bee3b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-scottish = {
+  revision = 52101;
+  stripPrefix = 0;
+  sha512.run = "b3f8c2e2c61461c162f4b7c029ced53b5f0c61398415d17044a5189c08460550bfd0ddd15c693dc959b5cb5bacef63a1d4de8a9fe11108843edeff475964aae6";
+  sha512.doc = "87035e38cea316b776f2c61d0c1522e61c560602650bf6955fc7330536fac42dcb17bdad1c3828f2accd10cef009efcd805ed917352ff921d03b46ed3d0bea18";
+  sha512.source = "4e4c7d02ea59a5d7592660e80c996adc11968433a2d88b54179ff15ab577a487789cba6fee4131511a5c22de2025879800544689653c48c0f7560a311b264c02";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-serbian = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "55ddf54bb1ba9cca7836ef0ec082d98d9d280b92e1d2d108c3a4d11b5c5d89f43098215eff675e8ff5b42bd8f446c6361a98f544f2d4bcb4ae684f69597eecb2";
+  sha512.doc = "b3b25cef5afc1481617cc3edbbe0aac242b1dacfdfdb9bbd30fa9d2c0f963605ead09bb9a91b016d0739b848cafce18ab17d3fd0750e589faeda0c434b4ac73e";
+  sha512.source = "c36f353d307bc2a49844dcc53837ab6ff2cb17a10973419ccd848c752f0eb53b369d4f0e123e3992f96d5fcde30f204e830093d6421f3544be693a9369c43129";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.0";
+};
+datetime2-slovak = {
+  revision = 52281;
+  stripPrefix = 0;
+  sha512.run = "c69d8eacf36fb7232a85d92e5db277b281b631c0c8f63df7fbba51876d1be782b7196efaaea0ac25140716f983ada40aedaa550102fbe0d445e5cddd41317a09";
+  sha512.doc = "c40e20b000f3fd5ac368c310d1f11519566410963cadaf4aabfb0c9cae05e0d3e8a3810c7da451a5e206e8b5b174ac0b837c1beff207597e050ec529e82acf51";
+  sha512.source = "19547ebf7016d1e416227830b81e95dd6d91c7ab7823d3fc2d6890d628a51074e4ba7b8b5f31020bf86c2fe447b60f22754bbecb3f7e65dc908ffcfa9087e12f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-slovene = {
+  revision = 52282;
+  stripPrefix = 0;
+  sha512.run = "1d0a73d3781fcc9ea0df63e391f6b7a0a254bfa920c63ad1a0c76b56d4770822bc4e049ce18c554974bbb20478150cd7a4f545ef8983bacd31a112fc3acd5419";
+  sha512.doc = "dfb2a9808488ab0e0b225d0a397490f7e1cd2343caf0a685d8e3f48feff2ce549092771f0b4017a3c45640067ad1ede8a852e714b313d9abfc7c9642f983cb46";
+  sha512.source = "f1a60b0173e8c1f6f245459ba35014e4cca9308e2c5aea203d6123cb88f6de945a6f80ae350ecbfce6554f6d2b671f32487825c5f01093c3bd3fc7a1902231b6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-spanish = {
+  revision = 45785;
+  stripPrefix = 0;
+  sha512.run = "07c321a300d779e39de46628b8e1b95d383e2a1a0af882cc607929d894f11b2e8329cb256014193d428182e78f2cbd5e3e277bc7821d3ad7a2740fedacf14e28";
+  sha512.doc = "629b4a2771fe68715978afcb202d984e1032d2e0f1af95d4971a980e14baf4b0705187f4a7ef9748c024eb27780f7720d8d5010ebfb23026ad8605a42730293f";
+  sha512.source = "78565125794ec1f5cf762cc27fd24c96eef5a1792941d4ce88c85bbecbec777da239db94118260feed6502e55f81b45f105a170e4b6207ec5e4201f043fa67e4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-swedish = {
+  revision = 36700;
+  stripPrefix = 0;
+  sha512.run = "b904b21b593e529ffb714f3762ca5b8de37e87fe25df593873defa43de3995d1c72b0500217182728eaee6030cacaca969376a5623bc0baf48fe33aafafc0a66";
+  sha512.doc = "7d6f2468aaa20da4e086201c0ffa6e6ae031e2a23db7fcccbb9ee8776c59b56a51cda9a03dfcce9fbf81b618f2e7543272f4ae88871f2b5380d1b98ff89e451f";
+  sha512.source = "bcdb2b0eb40b7acad86b37e215cf4bd3c5376cad8fbd10d7f1af32a5983243aa28d950116d40abf4ae10bd28e32c10022297b77ca40daeab15b6f88ed33758d0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+datetime2-turkish = {
+  revision = 52331;
+  stripPrefix = 0;
+  sha512.run = "7d4b756ab2f102c7981376d6f87e5a7f7b47d57b1ae9f821185bd5b04e7a5d9a81aebc7835a9bb43a217dffcfceb5b2c46b838bc652dab7c2f468d9510c2ee4a";
+  sha512.doc = "6c95641444f2eb510a330c7002bba2c40cf28daeb63fd9092d74846673c03d2aeafd1e7d61d5a7470bac95117c3717cd75566907a896f5cb4b54ccbe952c6d65";
+  sha512.source = "da530162bdacda3904b07bb2d9b0ab74c56cec0341f0c0457d6bd2e27e45b2d8c1f5ca298718d96924e3dce30e83beacd0fef919d1b5bdb5dedae29c7b3edcc1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-ukrainian = {
+  revision = 47552;
+  stripPrefix = 0;
+  sha512.run = "5e3d412b8a5b73bb6bd2ee176305806d9b41c5a67196ddd28640e958a7019b3e73f961964b7510be4cd69833c4599db1fed05c6a6f66d4d0b3bc5ad73b5d6dbc";
+  sha512.doc = "df40b4e156164a1c05a94c926d691b887a56ef8f42baee26e684383871edff05e5c6e87eba95994783cac2fcea1a5c72347c8eb86f0cca360faa8dd4829349b5";
+  sha512.source = "36c7db71bd063a87e8b9f2958217c71c7e6820b4e5536a5cc46db35ef69e83dd5e7b0ddd57038b66f8405d5a24afd21253ca34f7a8d174a26b4a67607048caf4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2a";
+};
+datetime2-usorbian = {
+  revision = 52375;
+  stripPrefix = 0;
+  sha512.run = "bae799fc523f01f7c70c7818ced0294bbb57a849567e05768c4f1c3f9cbe241755ac2dbda0a9ce0e3bb3f70eec45bae1c0607410302b458370a4c05951d791cf";
+  sha512.doc = "bacc067e851e4b58b2978472551cf869cc9d3d4412ba930b2ab81f39c4fa9ca352188b6a6bffc5b5dc4a6bcf611146b3d1344d221732a7caaf45f95bb67d5589";
+  sha512.source = "dcc7b42ec9873ef0d23026d07165301deda63b829462ab7f4074ae7c828945bc5cff2e2dba372782e250175b596b1be536dd27271e4b2f0913f42fb1a17ff320";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+datetime2-welsh = {
+  revision = 52553;
+  stripPrefix = 0;
+  sha512.run = "2c3b56f2e2796840fec8a60b4f75800743a4d71128cb900ed7419a7a01acd306a9ef86c2b1587e661833f8de48ef89e22c11589af21c9abfa2cedbf709c4c340";
+  sha512.doc = "7abb3d603eb94f99c1fc49e53ee28996d2a536d647b0940db20e5a9aa70eb10d7e00385300bfb3adbaf4f463db20c4277a8afbf0f174c449e402c02954c57243";
+  sha512.source = "92b71dbc5a21f650de8e9ef42bab3e3cdae1f4f1a48b34db9b656d894edc678e79e27dfe8b2143d85dd69aebf6e1cc9156a9b72d632065a2d146084f7da0f12f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+dblfloatfix = {
+  revision = 28983;
+  stripPrefix = 0;
+  sha512.run = "05931528012077b92702926856b1e0d1aa6472188f9b1fbff74e5534a41a3260e53b82bcdd0684ff045aafaf4b427dab6d8e06fc7a5d11cb42a545949bc6bfc8";
+  sha512.doc = "5790850d01d9f3734cb89146c23077bc852d84242352718ee655f1410ee84b77366bef133d8df49fd46ad976aa007fe2c4039a08035122f93e719c5f0f7563f7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+dbshow = {
+  revision = 61634;
+  stripPrefix = 0;
+  sha512.run = "339bd686c658c462c9da56018234c6a31e72a3def962798772bed17bd453efa94c5f8e2d72a2f033714eaabbde8b45bbeed07d302e311d65a27c37f8ef177a2f";
+  sha512.doc = "4d4ff36d121b950d7569f4ae8e7fee7e0a4790f61e8d2b58c136644d0ce455e8b8f4c1857c8df68d2f230016e5ea28a35047234ee101b3f949d1598f4e15e52c";
+  sha512.source = "189d3f8bd131bb3fb8bc7481215fa670001ec9bbe20a4d1ec99a9864005b44fe9fb582ad5462ef23f62ec538fe8d2dd9136cf79e94756c4b6e02d644e2d66a1d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+dccpaper = {
+  revision = 67890;
+  stripPrefix = 0;
+  sha512.run = "16a507603bffd0fd0e305c9e2d21927f0788dcff750ab276349919cc2e1036b41f57696e088ab5596bd714f890ea68ece629980dc613581d5c90f586f7e4117c";
+  sha512.doc = "7793786d0c34ab72954fe189bbae96a388f61f789b845b42d7fb062bab3858643e8ee730d11a5d4209fb0d728220e7ea89bceb3684118978dd8119aedf167a89";
+  sha512.source = "bf4bb7b3ed2cae28c3f3d15758a48fcea3e737872b27af3ded1cda51f5b1c84ac200116fa7019972c65aa2a4966885582956bdbb717b6b427ab42f2f7b7fb00a";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-40" ];
+  version = "2.4";
+};
+dcpic = {
+  revision = 30206;
+  stripPrefix = 0;
+  sha512.run = "6cfae1fe50baa81ba778ee1b8cc76dd2d0e66e3cd4a868364857f2338b1078ac81178dbcea81d4edbe013726b7cb14700506f38e49eb528701bf784280ca7de8";
+  sha512.doc = "25f768812f31cfc3e4d00717ed8d77392272f2480efe3311ecf5e922b18e1f5b6fa36892c7eb69cc077e350d5d7e55b7201673fc653c188ec8a76205f90b681c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.0.0";
+};
+ddphonism = {
+  revision = 52009;
+  stripPrefix = 0;
+  sha512.run = "9ccd7a8715af4a808a72d4dbc96a1216663c7eddb7a0fea48b77bbcb546a12d0e9de00928189b424e9db8e612778ed53231456d087a1eb83bca827852c9691c8";
+  sha512.doc = "d75ead2518ae448eba251b3f43431751f415c9650e9ac023e1647fbfa828f700ef2fa3a19f53fdd6e28c9e8461e071fabb7c016aeaa62678ada20ed0b96017bb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+de-macro = {
+  revision = 66746;
+  sha512.run = "6847ee60de3e70db18f402744ce0edf926fa2ba1ccd64faaa9844aeca85809efdab740d99f1ddcaddb74fa54c70d0c2dc0a7e8d15575e574ce8d451e0b6248e4";
+  sha512.doc = "21065d2ebaee0a2c82e5d41ae6a5ddb071623f9e405262de404557053c2f402f9166e7c3c939ec57e3d3a1842397143c16bfee9d219eb84ef613b74474538052";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.4.1";
+};
+de-macro.binfiles = [
+  "de-macro"
+];
+debate = {
+  revision = 64846;
+  stripPrefix = 0;
+  deps = [
+    "listings"
+    "listingsutf8"
+    "pdfcol"
+    "tcolorbox"
+    "xcolor"
+    "xkeyval"
+  ];
+  sha512.run = "88f9ff3f473dfbd84509adfe4491d15b7c20229361afde9cbce382be0441378cd6bb7d306c9b0a424dc065f34ab2d86eca8a0334d00fd3a5bae513776c418815";
+  sha512.doc = "ba5e90ecc8c1733cdb78233099cdc95e09d02786df11606b3f823f2b1b60934cd2881c873ad7afa192ee1b0ff5ad91121896cb30e7405ee3ae9bc960d26e7f9c";
+  sha512.source = "b9c0b94eea82d7b684aa358788a5ee3cb9709738137827b7a4f70ddd0d02ad92b6feecf03d0de7dd08c1ab233f17db3c973cfafef98134be33a41d6a8d7c4da6";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.2.1";
+};
+decimal = {
+  revision = 23374;
+  stripPrefix = 0;
+  sha512.run = "9a0d0947eacd52800b3b2cbc36d6e866c1876bd5f929896825dc604d9d633cfb169d93de0f86b0e78e3274936bb47834c222ee54b3571bfcdc0fe81bb2821776";
+  sha512.doc = "977fc97627bbdbf4d65844dcb7ce267cb2291b102b718ca36ba2fee881d5fcf359d6d0dae839d4e640200d3b8a31cba301d20560f5002344b8ea256266efc9e4";
+  sha512.source = "a880091295229345290acf605feb833489976ed3b661b403c8effaabd07c48730ac958a4b48dd48d429a3f031413c1392f4006b820f04e3dde6b2035a948747e";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+decimalcomma = {
+  revision = 69251;
+  stripPrefix = 0;
+  sha512.run = "78d257b6a3b65c44e9cff04093896240c7a9401af04b028fa79bf29dc436a18d163049d34a9a7c92c193ce07085aa877e69399f79da22696da800f72de20eb37";
+  sha512.doc = "21f1a61e45fe9d83f4ca7d01375c832b230485035f39277e18a3062da98f7d0bc63aa1703258c7fbbb6330dfde15153ed9bab60afe62db9bca4250033a12fb0d";
+  sha512.source = "56906bcdf0d1ed82de86cb39994682705b5e19504a97d2deabf34ccba239c499ca3b613e013c04c2726155b49a7971b9ad450d248acbeb5bddcdf4c4c7e8d687";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+decision-table = {
+  revision = 60673;
+  stripPrefix = 0;
+  sha512.run = "8a0bbe49c3ef76a7a60fff1778bfc06c2e11521e028bfcb190c85e8a38932bb1f2a97c26293a2965ee8d2e4e6d2cdda54dd2954881ac9b1b8e2506529af1ec97";
+  sha512.doc = "d5b9301a4308a4e2709b4c82a621fbea2af0cbd767252446f698f269b3ef131502d3db3aaec6d192642b154b546124326280ca4c1331dce64b36517db51c3bc4";
+  sha512.source = "c24db9cf19bf41d714d643d2be4bad5e339ba8f57175186793db0ae03b941ddfcc3584061ec4ef2aa2de550103346381d31c19a054d428210b35ef083866ba28";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.4";
+};
+decorule = {
+  revision = 55230;
+  stripPrefix = 0;
+  sha512.run = "783f09b3810616b14f04dace838ed1ed2faf32ea4df84dd0973df375928e16fb129ddf6429fc54560a317da0a9422630becc92543e1a1da76809c4962c423fc7";
+  sha512.doc = "0c13e2ff2744ca2d0e32446a85cbec06d832ce1fc8af5a719f3c73ed59e1a85461d5f51d33fe5a51a89b209f80196ad52609e83adbf7cc41336f5bfae8c4389f";
+  sha512.source = "84ab7801ab7b0772ffa3520a42e132007e05152e206072fc1ebb43d8d9675ac4929ad1abb30d8111db7d825f05d37b038ecc923267c5095ed62a34cf3955dc20";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+defoldfonts = {
+  revision = 68234;
+  stripPrefix = 0;
+  sha512.run = "f6823da220c00ffd688d0b25d06109f0f3a7ab606d535631d9197a26b02388b11e4dedf41829c94ca4a414cbc1cee81c425d006e7567116b243272fa8d8659fd";
+  sha512.doc = "d799609d039e98e2b737fcff5bef277359818838a8cc1489dab934d6b890ce480b7d6e935a84562662e8f130873d1a2dc777e08b229b7d5c0b431b8fde5d6978";
+  sha512.source = "5bc0c27101fac6b15e8e792bb4436c4f5ada6684bdcc254eae8466ef07ed7896957544186c09ab43d8ed278efcf44f07c40c9ce5c194fff081bd46a6e628704c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+dehyph = {
+  revision = 48599;
+  stripPrefix = 0;
+  sha512.run = "2dc4ee5b4389549c032f3a4d87740ab3c5e296a1ef109a6b673656a82ca4c317ca774f39f61417568b8ccbeac787c4058184fc893d53799bbf0b042ba5aca9a2";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+dehyph-exptl = {
+  revision = 66390;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "2dd98977dc31445cd981dda46f289a93b4340406801db929c21e8d08300b17745cda637f6b40ccbd2a02a0ebafa980fd9c1591b8f7beffe3fa029bf8c82d2eee";
+  sha512.doc = "c28f49469c8a2bad8fbe34ca1a0df6441649edb96c19d9482fd2140068447d86716911534cff181fddcf784c8e80a20eb1c952b2b9c323df7725b46d950c7b4c";
+  hasRunfiles = true;
+  license = [ "mit" "lppl13c" ];
+  version = "0.9";
+};
+dejavu = {
+  revision = 31771;
+  stripPrefix = 0;
+  sha512.run = "a26a57bd02b14c6e67d328c2c00174730b819f7da37ac147ec7f34f37195b6aa17e3223ac4d03617f5239700b1dfa45ca1741eed7b4488d2e604f02ac34ef2a3";
+  sha512.doc = "7e3364a3e0863c63f2a66057780fa922cb53f4da2f81e42ce9e200d5a034854216f4d4b833756a6d4d6837385e48aa8d03f608846f2f95caa84a7ebffe3257b0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.34";
+};
+dejavu-otf = {
+  revision = 45991;
+  stripPrefix = 0;
+  sha512.run = "d0d32f3c9d53a1a61e6e717a6275f3fc934c0815fddc3b36fe2afbf7702e5128d4cf15e8cdfe8b02009a6fb7c203ea42b134eeeb080b9765ff99c4143f887744";
+  sha512.doc = "212663371f747b03694327a40de3bec0be8efd5cda15c0cc343284f3a427890e8d16c4223098fc16a260b837a9d522c9cd35876a4c1004e09ee9ee29c05ec7b3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.04";
+};
+delim = {
+  revision = 23974;
+  stripPrefix = 0;
+  sha512.run = "c18dc230c5bac8db3d66f062402392761467ad18f48a65930a960c0772be30a7ed729a50657b12f533d72086563a67a98e8f5ce7afdc9947b52146e76e22b157";
+  sha512.doc = "c343842bcc03981c1814f5cffa2ba3eacc2e6abb5673ba700859406869a2398518e9abf02e159f4d92bf91383c3a6cdaa9f5720adaec81715fa30f4b8f36ff9d";
+  sha512.source = "8ff42847f918ab8d65eca86ee8daadd14ee138f984e06e1c4d66704ab4b6c53c1271b23aeb33003f9a7489e22e29850711efce99459f10764150742854570034";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0";
+};
+delimseasy = {
+  revision = 39589;
+  stripPrefix = 0;
+  sha512.run = "7f9b1d77e9b9bdc6e5c45ed3c38606fb0d65113f7303e03f591c1b84aa83748d72fb8ecde0cd0c7b19d1bc9fcb454834e156429fd9080660aec77ddfd7b53e42";
+  sha512.doc = "bc9c1ff757a9d98ff9b84993cedb62ee024d0f4aafee301db0d862be3d45c76d8d164d2d3099ae37d41017316282db1e7882330dd10de43a9539ba0b10e86b08";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+delimset = {
+  revision = 49544;
+  stripPrefix = 0;
+  sha512.run = "5c19bda2a87de91ac1d32981198ce7718d490184d4d65dade231b66c3f46621af91dbeb89bb79ba1370fd82a0527d01d0aa7cd9dddeea818e8c4b4380a7b63ed";
+  sha512.doc = "9e671fa601b878187b5b3ae1a47feffb6c451fd42f202f948a87b02f35385b47239947a3e91260e699c64c453df161d9ae734fa3a8e241b0e47056181fefc46c";
+  sha512.source = "d5618af6db29684ddd58164c9f55fbee73417d6968550361d7277558de98e621e2d1233b593c87860ccd8f7beb66a3c2369518736e14c86472d77425d6499869";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+delimtxt = {
+  revision = 16549;
+  stripPrefix = 0;
+  sha512.run = "25332ff7d2602047938630668c849829844fcbd622f911542bccd59d2eb1293e406cc79aca08ac3acaa98828b4a6fa4da98feb08fdf678ad3863c70cc2fc1817";
+  sha512.doc = "cd9363d8d44309c2ca51431bae067d87c790180eb884888144cd089cc9c14f83e1e7ea2389650d547e47d4575755a5b6b369e82b76cc19150b1dc973e99109fe";
+  sha512.source = "487557d866b99ec0fed6d9bf18c4bdaffa4ad6a8294cd2e9c681a4f65fbba051a97577b82e7170464daf4eb9f154e66478f46512331e1f4f41b48e61d65a86a3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+democodetools = {
+  revision = 64314;
+  stripPrefix = 0;
+  sha512.run = "f1c15d50ff6078ecfb012e5235736785aaed4cb59ebb8f4d54c06865d5299b7b32ab436b79671d68c8557b12de65cb50f162424affb7a91aefd4fe4dfefae04f";
+  sha512.doc = "ac49187b57e75bcad5d70960711b5a34162a7c97b237a1fed19d08089f3b7abdd7db9ea24368b8f0f2e9e4124c5f8832ea0570d8f37e002d00ec7007c784386c";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "1.0.1beta";
+};
+denisbdoc = {
+  revision = 66137;
+  stripPrefix = 0;
+  sha512.run = "43bbcb7f73c1ba704fef0754a4d79c99b45c99c7ff3b06f70db1c0c922734f9c3bc973841b6c1ffe6879324f935e936ab396aeb2d2fce1bce029b6b0379882d0";
+  sha512.doc = "4a0572e776d2b00d088bdcf5e65c94c15d644182a5ab8284a6b16e9ca795ad95ab89448954dfe5aeaacb986a012da0f1abccde7df35f4619a6ad5dc633facf96";
+  sha512.source = "f173f64219c4ab4194cbfb091273311da6963f09995fb2d751302c356613bee2bd4a874a35dbe1e99b995a5d50d9803025e8861947dedf77fa990a5f601f646f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9.4";
+};
+derivative = {
+  revision = 68787;
+  stripPrefix = 0;
+  sha512.run = "64a219eb707e54c1c57715243e4bb5c676d495eec5c0095887f33f30591b7e90a7278ce6401c649f1902ded58c9fc890a23f0611dc8780e9a7bb6bd55a728083";
+  sha512.doc = "3f660b6b8c0c1da3d7434f3a0ecf19c51a8618ad660ac4a6518ca67a4bbdb788b36a457a6f52c544618e814a3bf2b73a5c84590125f3e1d55cd95bda01f6b9e8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.31";
+};
+detex = {
+  revision = 66186;
+  sha512.run = "e258d80d1509831132c4f70df81b8e93cfc9d92ee74c5d39e7f35bd4f71a3eb93fe3594afbd5ab0e33cf0b6f45c816506e32ca8f41427f3c3fe661f3086100d1";
+  sha512.doc = "3d5a3b371e007bda61441460479a208062fd0d477d1fc9ab9a6764c1969fd383acec9e336e8d0b16aab5606444f5d87335320e010657cf088e9caeb18d6dddf5";
+  hasManpages = true;
+  license = [ "free" ];
+};
+detex.binfiles = [
+  "detex"
+];
+dhua = {
+  revision = 24035;
+  stripPrefix = 0;
+  sha512.run = "c6e6187bdfc80cec3ce092a4dd3605055f3ad67ff49777bf0948af128c8b48118247ed9ca6f5feb1a69d32719f81968d8259794082a28277796eb6beccf9cedb";
+  sha512.doc = "a2f9f61ed61c5476d5f70fdfe59a451e7b3cafd3412336c5767b53b0157416149ee9ae924834f8a05beaedabb9e4a8dd3e4dbcb2f17b733af113c0a8085e363c";
+  sha512.source = "ff72f267dcbd05830664f9ebc328fa1b6b80eb579627c5ae78965b47b8b8605ddf33c6b6a9b343774b2944d985afc9a9816924f23e8e7ec9fbc807f00bddb143";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.11";
+};
+diabetes-logbook = {
+  revision = 54810;
+  stripPrefix = 0;
+  sha512.run = "427912b3eeac373ba82f99b30a6ccf360b285a119248e9dd2aa175cfb7f2538327331d9e8eab7ff62cfd987466352c08016313f51b8651c4b42484fb6f089bda";
+  sha512.doc = "3a8c1c45b24d23ff236ca2d8bba6ff6d9ad055a688b5621a660cefbdff4e1407d71d96420cfa39dbb896f8035e6d5a2bf3f33fc2e80074527c9a41fcab72f976";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+diadia = {
+  revision = 37656;
+  sha512.run = "55a246d4e3ab86d6300210d830ce464a935bb83c9ffd29b5387f0a56f5c82d4c5a71cf107f78ffe0cde07f17897e2f949acf1fe70da9da7c7992b330a07b1c68";
+  sha512.doc = "e7487bb47fbe8aee714304150c00866780782a9ad32bf6ccbb02799aeb251345ce1cf042e8b4d7b4011083a3be2fe3b16b78f25a4a4206d173ac1384716592ab";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+diadia.binfiles = [
+  "diadia"
+];
+diagbox = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "34d2530343877efebe9ee53027253ddce0e59df3cd70900bf0f040905f34a8ad9d41328aa3c6ecbb622f7731f3bc9c4fce289caa58e2c1db46a6ec1bafefe6ca";
+  sha512.doc = "96310db4878e417f09e6202e5ca86f29524af5c1292ad8fed2563f1872e094be1249c4753eac5129c68492a5fe9ea87857783e2ca9af1ab77dfd1ca9b3309b2f";
+  sha512.source = "65ac012205c309099ca2f1a23f6446abb434a1a9c66a36d75d15021eead74feeb70c21024386fc11b223386100404b35a0ec3571d24aeec13b5513e60b11b3c4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4";
+};
+diagmac2 = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "553d3610ef7bba5bf669040cfe6b51b26718b9f04835413d43c3f8a018a8a37274b445bbdbaa4a512aaefc8327f6a2c7abd8d754b3d8cbd4687c9c518265ad09";
+  sha512.doc = "37952cbaa4c20180a2d09455c748b245927245c40093510a79fa0461e5836197d8bc05bdc3cf5c7bafa72c54cb503fa9722d7a8ff9a0630ad1b5e8382b4029d2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+diagnose = {
+  revision = 19387;
+  stripPrefix = 0;
+  sha512.run = "91fd8eb4b7d896f27c15c2b3b2a0a9bc839bb736a1fa053d47896c6b989729c3dc3a644ad59f6b3bd4164c150034f6ede5d52b680fb1c8cea6838dc70713f654";
+  sha512.doc = "f3e7152e656ee4c5f6ac28205b1dd5e9c0cf19c3d9400e2c40c8d8e9fecbcbc01cb1f7a36534849b6ba26f222f9547e3d669114a7d8923645528b7150cd10de4";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.2";
+};
+dialogl = {
+  revision = 28946;
+  stripPrefix = 0;
+  sha512.run = "68fb25b66499e289c7615fda04fec859d2a3a6105ecb3bc69ecd0e5af8f87027e74170495fa587f21767028d9f423cf04e3d11768ea0581a7474e9a66d62882a";
+  sha512.doc = "cc1fa10345fa089cd86ea4b0a638334c55c6a57cac3a9c549469cd52cff27b8eb3d349ce14d49de14fbb65f41d1887bf98e9c69081688703d8eef06e6324f684";
+  sha512.source = "0a39faa751021dbfe7638f139e50689201f93d4490339af70b4ddd42a77cec252cffe7a18a5ddce43ce8dde7f9645dd088fbe9c6cbdc4efefa65280f70c54d23";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+dice = {
+  revision = 28501;
+  stripPrefix = 0;
+  sha512.run = "7ec762fccc174a13f2a84ee43aa49319548aa970f017cd17bca73add506ca270a6ac621f51ff96d47a4f5eadeafc89ecc44f1c99b31a2e76722e648519e1fd69";
+  sha512.doc = "9c09c47b70e28e4c8ccffd4c75f8cac7942767279d0e01e543538ddf0ee70fe60cd15d1e3ddce27b56e1a9f865d5ad9b1794a875e41d131d763c11a3e0fb96ef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+dichokey = {
+  revision = 17192;
+  stripPrefix = 0;
+  sha512.run = "8ed4f0010546af68390f93642cab4495226387fd7461383e32fd3dfa72867050d0da05ba90cb768c6893afeac9bfe55d23b7299ef4a76432e8d11252012b47a4";
+  sha512.doc = "16a75d20463a0b0b508c2d50aa67a77999cab525e003704ab34663d1f0212c39432caab0e4df1c69b540be014bc86901031c7c8f647ff18ceda77dcef7239233";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+dickimaw = {
+  revision = 32925;
+  stripPrefix = 0;
+  sha512.run = "8e478160699ca5dd9c52ea7e6b0a7be491d0af44b3022c22797b02b9e6ba6ef67ce9dc35649d9a2ebb9b123e3fbcc02c0602271bd8049a12c4520a32a15d4ef3";
+  sha512.doc = "5ebe8605d1a4ebeb11896919c39aa736220e9ca247912b5655dbcadf03bfa45b4cdfe44ee6555bf8d5ecdaf63b0d2527d3d58ee6d7056a194a6a42f88ab0aa41";
+  license = [ "fdl13Only" ];
+};
+dictsym = {
+  revision = 20031;
+  stripPrefix = 0;
+  sha512.run = "6195ea914b422d5bb1c098e3a8f103d91aaa94520bdff1f5a04d7c952f84f16b1aa96287dac4a309d8d72eabac65a5dbaca275abc211d9290266cfb8f5fcce3a";
+  sha512.doc = "935e67c0be73969b572146ccfc92ca42c15b3b5cf2cdfb596cf3ecb9368463b793d530221d2a7e90df18edd54b7938dd27d1ee00757b580c543ea59ddce5d277";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+diffcoeff = {
+  revision = 68838;
+  stripPrefix = 0;
+  sha512.run = "a40e95018d471504d5d0cfa2d6ed3c43bb7d4a749a97200b2ed682905d6b448cbb51b80d27d772673b747fdfa3c9b02515ffb32ee9e44efc67445bc4c8cba3ba";
+  sha512.doc = "65646cb4ad22f5755be51c5c8e1ff907803d9d3817b76da8146d81b7b42ea4c9af07710d55d861795a2e7f25f0adbf4f0c55bdce208a563c3ad34d32992c17ec";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.4";
+};
+digestif = {
+  revision = 65223;
+  sha512.run = "098d625749cee42f965d21ef5ec2843211db36fd0f4cced882ed15f32a20a2d70bf292b01e6797e7ca097adfadf2fd40d3c5eef6c694da39e8302770cfb784d3";
+  sha512.doc = "fabc6d0ea5a1e55b7ecd6430b2373c15e413c985485331bd7bd5bca437947a76ac7d8ac6ed2ea3d6afe687284aef673b0e302a1c9925737c6e1d95cecf2ea8cb";
+  hasRunfiles = true;
+  scriptExts = [
+    "texlua"
+  ];
+  license = [ "gpl3Plus" "lppl13c" "fdl13Only" ];
+  version = "0.5.1";
+};
+digestif.binfiles = [
+  "digestif"
+];
+digiconfigs = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a1d5cf0e93aa2722087a491d49c87c1b6c1dc863a39807f28dca198d4c52d8add42706f992ee91b6a42fdbf379293a2aaf3a21199094526c545f41002e8992d3";
+  sha512.doc = "95e948491a51321671b15aab55dddd7c6b8bad78bc67bcc25db0970dc478d1bba898fc2efe44537a18d46f3fcc73bd2af600c4a74af4982e8de8a5fc0345a134";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+dijkstra = {
+  revision = 64580;
+  stripPrefix = 0;
+  sha512.run = "5662fff484dc88098c2bd22784aa95c4d990c5a725eedabaa1f542c53671783fc89ea1a4d6f7450483dcdb2cc8ce758a8a26c40d7ad27b93d7e3eef4d31d2ebc";
+  sha512.doc = "474f8fedec9daf17363773a200b81ba57f57175b1c52de5b7a7c8f7395996725284056ddf4a9e3e68baa1197dce84ed2767795956a403946f530492b6713b8d3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.13";
+};
+dimnum = {
+  revision = 58774;
+  stripPrefix = 0;
+  sha512.run = "636543ee5f2e027ec242d59ab8af28e8aa6f35d3e91480e4812a72df3c1636fdfeed2cf472c79b29fae5ed65224da4ca4a0bf5040e2a4360b73fc5f4cec85bb0";
+  sha512.doc = "a00eb3157b84a22afeb66c6f918fb434bb2a183afba110340b93cdb7dc33152f4b9472da134f999f36057b7ddc221a2a78bbaac5fa0509e452c4d8d6e96ebcf3";
+  sha512.source = "2d729252a866edd8039c2d09b8ebc92c28aad4b0863777460c69075d7c4e1065ad515937e13f2de5b0578a89c4693cc508dccf002823e5591a6960c6d2752456";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+din1505 = {
+  revision = 19441;
+  stripPrefix = 0;
+  sha512.run = "cb9b819eb69ce4870dd36da844b1d24e4f678ad05f43eabbe861e9de5b53258e45e70530ca76c0aa9fcf54232e8f33dc55623f94c1d9e5fc3dfc48481093c3cc";
+  sha512.doc = "4479f5ea1e1ade4bc7951d5722e397a688e75293da55ec57dd0f3d32add2bd551844da81336be0a77cc783e4c9af958be46501c4b78adbbf8a5463770b5cbb2c";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+dinat = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0b22f43a5088f669820674b46af72e66f3f2714a36052bc7d18c334b202d0060fd07b1a608626adf183314d2380fad672baf58307ed83aaa888231e75c63b1c8";
+  sha512.doc = "f4491ab35e2ae8003faa8220e88c0abd2d970cc6b985d2baf993effd2ebe94a964ae8ece6db70a55f922abc83c91cce5f598ac2e722b5eb7e1584aee436e4393";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.5";
+};
+dinbrief = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0c2679265417acb042f81300895be7dc7d6b8d8f0bfa2ff8853b9c1adbb6bae78598c7eb4b7c2c91a9f95959ff7a7945f846e1f262f923d741e6fc77458be9f0";
+  sha512.doc = "5182bf0761a484e89331ced44d05f82da097cb7be010333ad3eea1b987119af3f3e2a3cd8ac2c4b2b6149a09a5789325edee49205fdfe52d2960c12edacad0af";
+  sha512.source = "0f81c2cea6799ccd39039b3fc9c45ab38b2041d0eef6efad245cae9fdfc17a7f967c24509b241fd19870170b4028ebed40db25884556bdf74e0ce2fef1a6e1ec";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+dingbat = {
+  revision = 27918;
+  stripPrefix = 0;
+  sha512.run = "d6bdfc62eff8816e03eaea41ffbabf2d3af7194edbb2f9073c8d8b3d333c75f0b587a74556b916efb40afe41c88a8029f0dd764d7dc5894aa50e66e06fccb77a";
+  sha512.doc = "993ef5169759d86641e2a3185064f94df858d81d9b7ba4b0516b22abc51eab887b5d02ca487ad85b007e7ee3117563a257d80b803a361ea1d32857921e794b9f";
+  sha512.source = "01e935a99ff83496cd1e5c9e297d316f879fa8e54808c33a2daa54c78e1afc5048d3fabbf93450d15d6fed09eb59389348da266c751782cf017f383a97214d2a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+directory = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c07947f06fb08da461391cf6101a7a2e55875179c5d19b41007b0d11ff1881623e353b813dcca1da1f09e55beb80bf412f85ea6c9f7e3dd6e52a875770a5ffdd";
+  sha512.doc = "24bf3fe447363c20e4ace4fb326c329a244aaeaafbf6f596ec91a3975e7cba86a2d711f9a5f10c2a70d72d74bc08dd2540e5139b4c4b525103e867a9d8e62bf9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.20";
+};
+dirtree = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "5faecc2a6d79ae79929481c283b01e69df482267635957c5eb11c264d924ce299021d95baaf8cf6f9cb10e57f5fe14820c6b3506021b4d0213494bdeff5746a2";
+  sha512.doc = "9edfb6fbcf4278c2b24599b58e10f64918d901bdd19dc0e9e8c8bd77756f2f3ba5dc13e31fefd2bd5f1467a0fb0dc0e765fe4e0515781103bdb1b81f687def7b";
+  sha512.source = "4939918ace772a76142674410f9a1e91c698e02c113517385814346399cc94e031384905dc2719d717ac1dc65ff04d1d5a7049408ec55e20b4c0000f4b8a7049";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.32";
+};
+dirtytalk = {
+  revision = 20520;
+  stripPrefix = 0;
+  sha512.run = "d5cf28f17a68cd064a290769aff11e656debe87ff0c04e61d4dd4fe87d285daab6dab9516b80b33b03680d50c420a4f3a9858ed5d2d3d5c96fa7fbf9989d29d6";
+  sha512.doc = "8cdbdbfca4bdc58a560703b6406c98334ea0b5d9920cbc98ea0fdb7b56c9f1d48844167201829cef83fa84f0e21530baf2fcf4a3f8f8b5e44c5e792864ebf94f";
+  sha512.source = "448c9b5765cb054981e306b795f7747e6e5a9219f00a4698d6f5ee36ebc56c80a1adc857212b3baa1a065b9a8f585f9938e2d20d8f6d30f8d17aff9fc80b11c4";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+disser = {
+  revision = 43417;
+  stripPrefix = 0;
+  sha512.run = "98c497bd8d422cacf639cb38ff3a489b5fcda3f92cb5a734287fc930666867eb0e9e6f6014ad42df527d3999eb5a87da28d7178b47cc53eb44a338567f952ca4";
+  sha512.doc = "ed0c04c0afccd7f9f68bb8f65a6497b9cbfb2bbcb5333852da7b790083e71ceec8348f6893f1e0f16bef7e4b5ca0b9d1a58ca46898dc58a02f0324a62971b916";
+  sha512.source = "9a9770eea5ab44b2265cb191bd113be4e98038a0ba8f3c92ffb837791cf59447c82caf63d50af6bace698a3b5b8a2bc25f427add6cefb436a6377df4816524b2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.0";
+};
+ditaa = {
+  revision = 48932;
+  stripPrefix = 0;
+  sha512.run = "1aa2fab8150212ae8dbda9d0138a4c396f47256f93582ed38d9449f9440daba9e07dc0be397c49981e2d1813b7e41d2002fb7ff914382606f417f2738a8d2735";
+  sha512.doc = "345d6d7d3f21d2dc728b93e2cbfeb4fc1f589797e852604809b1ff3e7bca53414d684571faf8245c740a50205e7d8787afd5304beb89efd3545a389ec4a74331";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9";
+};
+dithesis = {
+  revision = 34295;
+  stripPrefix = 0;
+  sha512.run = "b11165408ccd30427390e9f409e8f561122d1a2dbe821ce90687df9feb2faef692d8ccd75fd8372b975a06e3f11bca0ba6e873d59b30aabfa95015ca35e557a8";
+  sha512.doc = "25058b262f803fbbf3c41fa62ae8983ade351fc7bb65be7d886a4300390f836ef5d1240e59571839b407afa2ddb363e6c31e76e36c160ed3fe0c6d0e0ef71fbf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+dk-bib = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9de9e026b9e3de53b297d7925bd0e4e9ab08562e798a8f1b9e6988ecb891067534a741aefbbb81f1c53d7ae6b6cd0e0796d8c0690c5af661e76a5c6d9ea876df";
+  sha512.doc = "258d8413d860f6a30c597c10b8c25f352166f8bc39cf23714a137e46f4748ba716dcae8eb8b6e17378f6a850ae64a68a9f331c8301c938f0a8042d967b3e62b3";
+  sha512.source = "ddb3927504b35d025c339bfd1c072e9ef770a159f046bf86220ea675df481e5b781026ed6395a776f27518ffedef83b7c5f95be30f1be49747a76bb2e2280817";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.6";
+};
+dlfltxb = {
+  revision = 17337;
+  stripPrefix = 0;
+  sha512.run = "d1d7bd6a855d131324fee30bcb920e0dfa6ba733a1d52f94c59e8f328b533d63444b5ce7e5fca9dcc7f21833a9cef84460106aab0a578fd17974c0e348f1ee07";
+  sha512.doc = "171d6661ca71533fb869832be2bf6f7d26244bb5735fb884b5b1ce7c27d291b3e9518a902d6c7565d94d2c55c37b00564184bc5851824a00b5a71963a577128f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+dnaseq = {
+  revision = 17194;
+  stripPrefix = 0;
+  sha512.run = "b4a83c42e16aa734611dd8295aa033904828ac1825ccdd41f297586c0667ebec4a43606740fde56bd01f58ffee1b1f4afa647ce196ed042a5dfdb641f0ee2d7d";
+  sha512.doc = "089352ea3210231ad158ecb0bc17d5ba0a9efe49ee4c609554f08dceff9ef534185a7f9f17526910d3b602c4c6c358f211fec4cfe27bd6df61555bce4f9d795f";
+  sha512.source = "f4357ef3a23d8b1c7ca3168441ddda57fe725c4c17022807464e61035b89a8a8334684144d86f3d6ff0f3955c1c928903b80a61e6b1792cab633d6dab51d44df";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+dnp = {
+  revision = 54074;
+  stripPrefix = 0;
+  sha512.run = "27a4c150b3b5e3fa23e0df55289154d44e3eaa55330544e426cdd3126f8ce0308abcc17fa5a011e12d83460616cad039cc483f08d7254b64d4dae933db6273d9";
+  hasRunfiles = true;
+};
+doc-pictex = {
+  revision = 24927;
+  stripPrefix = 0;
+  sha512.run = "c866f0855f701917fa81966c16a7f1c869320ddaf38e2c1c2a71844fa7b224fe2216f267b7b700ef6e36a13f97fa6f33a1d05342d5a7a8dd47ccda761fc577f4";
+  sha512.doc = "3440fd4d0e2117594d6b350dcfed891506ce7fc0500ecdd4f156431363a38e399061469f5def9082d59c39b14b65ebc19ccb3204fef71ade300825cf35659158";
+  license = [ "free" ];
+};
+docbytex = {
+  revision = 34294;
+  stripPrefix = 0;
+  sha512.run = "0b212fe2131eb4070e08efad7f1e0745d0538b2173b274a41c113ae6dfce46d7d1fc8ebd22f16b3a956570865df9cad668866fc2038687ad6c0b7b72e76a79d8";
+  sha512.doc = "0daa32aa23ca248dce228b8029cb19c6d4509114094d46efdcc45b52d6593176c44da88040b37d83054ec286c4b79727ea4ab2cf07c4522e5f597750d85118fd";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+doclicense = {
+  revision = 68441;
+  stripPrefix = 0;
+  sha512.run = "f312fe38842267c1a35ab506354717a0ffc3d4b2684769965b7b94ca5fd6b137d0b13fdc98943b1fe0f635bd673c331ccc53faf5667b75d1192d786972008dc3";
+  sha512.doc = "162af038ac645790412ea0e07771c39bbc3706ee3ccd6b8a496b166e7ef51e7802a225b00f1cceb0bdb0c8661ab51a79d4eb40a52c0348f1565fc83dc7efed9f";
+  sha512.source = "2002418b83eb7117195e60a6f0211a395febe6455b210068db7fe1d99738820ba111e14fd6f61bf53020a78ce1bb7d0bd12b57294cf5081d37d5002dcf641253";
+  hasRunfiles = true;
+  license = [ "cc0" "lppl13c" ];
+  version = "3.3.0";
+};
+docmfp = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "55f68d7affd8d82631eb0e67c6232330bdff97ea908259a5e14255058d88f9f745afe55bd4a15eb91bff959b7cfc31835fa22196d3d0edcafa40da521b3105b6";
+  sha512.doc = "fc3721046105ae78b19b61a45fd01570873842c6786a096575efae282e4fc884f5f5dfd5ea6888a25ddc82077340bf0ede4a36977cd33d2b555ccfc3d0ff2c02";
+  sha512.source = "90c38a698f428980635ab3a826f35adb65a1f9b2a2dd385da8ff41ffba01870c071b7ce100dea1142d85ca216a68a0170aa8fdf92feb80a8ae055899f6b05633";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2d";
+};
+docmute = {
+  revision = 25741;
+  stripPrefix = 0;
+  sha512.run = "5c01f4e6922b7a23e753edf9110ae7f1386a4d6ca719ac898b058068a754a6c3bb123f918bdb1087baf5efd1176545f543ab8b93bcb6c9529c9000ad6a3b1e97";
+  sha512.doc = "8207eade8841747201656a7e6edc789926a9dd411946a860e4d865fed618392bb9159245f7162adb4a58c88d00191d83f2daef49f610c3d8e5e231ad7f1fcb7e";
+  sha512.source = "1809026635be9610b39f5f428dfeb2c323b4588dbc6306a50e00f092910fd449921a2cd797fdbf3408442b9f24cfeaf7c69e75db9bd217dce975eee2f1a4b930";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+docshots = {
+  revision = 69410;
+  stripPrefix = 0;
+  deps = [
+    "fancyvrb"
+    "iexec"
+    "pdfcrop"
+    "pgf"
+    "pgf-blur"
+  ];
+  sha512.run = "b25c70def3ad4e85aaa6f229362a7d4ca3b2cf20fc86c8682d3ddc36738868d3ba3f481634d0a9acf8366af102ba3a27b325f3282724f392e8e3d312abb60814";
+  sha512.doc = "81adc089c9572519c09a0e1472cf2aef9a52a51c84992c8a46fdf74bb81aa432417f58836eea621173c60ef9ef2367348643d161f661580d030c206fd88f478d";
+  sha512.source = "f7e7609765907f9ae15f000ab50afc4546660e01266431050fb16b59bb760ff154ca2efda4187452511c8cb4c47f253ac401225e33e261028ee5df2bbbf0687a";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.4.2";
+};
+docsurvey = {
+  revision = 69343;
+  stripPrefix = 0;
+  sha512.run = "06d5844c96ba47de92459a20594f0f575e0ca2fb6471f7079274ff752a1ac631f0f0d2f4f76f01fd5b8fa8036fca57557b37fe8490571b49b46fca06ade0a4ed";
+  sha512.doc = "fbd223b5af17fd7e09d43f00d103ddd3e5730eee7fd86cb25a8d4568f00f0155a6aefa28d3addd507bc261ff57e99256f40b232781256744ff9634292b35fa87";
+  license = [ "lppl13c" ];
+};
+doctools = {
+  revision = 34474;
+  stripPrefix = 0;
+  sha512.run = "5c621b063d752fbcce773f2b209d358de1588e7c4edec017eb45a74c350e86932ac9c4e0662415ba7ad5bca8ca86d1255b15f4e5572ea949a5d6404b28f14025";
+  sha512.doc = "a78cec3ce74e4689c848b49af7da035cc7c684730f78acd7a7f8d8f78194492e53880e7884eb00dd22d4bbca4f370aabe8175048503959f88023a12ee4f26598";
+  sha512.source = "bf61b5c519ad73fa8187797367355c195ed2048d83cb4842862edca740f51d60bc421881da10c474d950485faf701631af6299033d2005f0d2aa8c6561625864";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+documentation = {
+  revision = 34521;
+  stripPrefix = 0;
+  sha512.run = "330534f15cafffa56dc35e5b4de8caac66a87ccb0b834df5419a68a7cb136136263af14ef14ee7ecaf01fedb2803c2653dab7570ec2535ad1ca3033e1afd64e2";
+  sha512.doc = "09854b00d86dd902c26c1b4f8cda942ea09796911939a20014b6d50d01b052e04007b55fe814877cb4515a6aa1f4ca1a7ebb39a6a6ac1bfc89b98d1f910329ee";
+  sha512.source = "7e32523123407b913662fd7bbdedf5d3058e1e7e3592649b7afdd4d4df6bb704c7b1c3153fb0fdf3b8bea183259a64b8ab6ec17d74ee74ea086a56ef1dc90bc2";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.1";
+};
+docutils = {
+  revision = 56594;
+  stripPrefix = 0;
+  sha512.run = "13a31f6925efd5cb0e0ccc632d7b8ff80e15a2e95399779ba33ee6e0f1d3c1a3f4a397dcb7fe33455471ec65e6fbb18d681349a43b24a083882c23aed5a0b036";
+  sha512.doc = "1748ee0bfe61704d8174202dfaf6a674fd52ba154456f6aa18cf90b2248be90f12bdb36993cfc4a701a8aa3037614c2f86be93ac8528f3da3bce96a611cb5748";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+doi = {
+  revision = 48634;
+  stripPrefix = 0;
+  sha512.run = "7a041a56ecc0f88d5200d39d7611c74f955e79e5f5f887d26a70c76624c334b6229f7b937426cbbabfd7de7ae0f9cd2aee70c502981c46fcc3f18fddd62261bc";
+  sha512.doc = "3dd77559fbcb32d8bee7121f62bc37ca14c14c8e62f8d2ba44978438920dcdd54605a543135a6294e2ea9742f5fde4862a2efe3eeb6bf22b6d7418b4b01a2ebd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+doipubmed = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3f313afd9cee76d11b5f957a3e9f7cc0d5d2d04003c285df7cd872adc0cdd26d0248c03f0642d62af53f23c4399e7e5ac3ffcde38da782f64ab265e5879a7f60";
+  sha512.doc = "0298b7f4a408f2092bb7ecd8d5b0cee745f442bdcc2bae463d922ae4511d5b0fd79b8f78d1de49f77b4fb158937fcb752d919239efc25829228c1f75185454ae";
+  sha512.source = "ce8a2d5300a2a3555cef789064047d49810f1f7d9d00429eea8122cde3e4cf75b41d5cec901a3d6cb3596e83bfb43e8ccb2558c64ac3d0574970e9980ceceacf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+domitian = {
+  revision = 55286;
+  stripPrefix = 0;
+  sha512.run = "f228d1670e7904b08ba6064d0d1e8c23432fa826d52229d575bc2067e27adc904c3684d76889a8beb4885c3c9de5cd4a5004b9afd3f7140ae5e90d36b4961b9a";
+  sha512.doc = "81af6be4f2707ec5d46d5f78d459f42d81e0cf62a17a8e695e42b666076637183447a9f1888b3f4c84e4832362eefe01b8d8dc5d748a640eb8e20c72bdfc1f3e";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" "free" ];
+  version = "1.0.1";
+};
+dosepsbin = {
+  revision = 29752;
+  sha512.run = "7f31d47d60b0bf151cd6e6516e29a8414c6344657c133e726e6e8dfe23818995b10b9a2898b1801c4bcb9219969a8af1d2725b75df514ffb119730b3e49008f1";
+  sha512.doc = "b9edce9984698db8e50f9183f89b025cfa89dca8a8725054af80f379c88ff1d2b02cef8f3d5f37ee5b8585a59d1a4d0f0ee0e541a7784f3f3f4e382d78e6a47e";
+  hasManpages = true;
+  sha512.source = "d5739533a9d10e584ed7de4ec033b4a31be5681fd06fd9a2268f924d4434df902fc1f346ac2636f4ba7b7dcc6b5804a80b5431f7055fe8eccfeeea09915ad2e7";
+  hasRunfiles = true;
+  license = [ "artistic1-cl8" ];
+  version = "1.2";
+};
+dosepsbin.binfiles = [
+  "dosepsbin"
+];
+dot2texi = {
+  revision = 26237;
+  stripPrefix = 0;
+  sha512.run = "20cc54f907b00e2eb14e4641d5098dd4886ce8d4627f391421bc5e819614dec97e0ec42c92794bacb8ffcb03737cb8736c308fad6984abf13c127f6d1174ee0f";
+  sha512.doc = "9e8461946582e0c99ee35437522e25769e2afe5d7051f072937a57c5d4e1a0c8e144509c751f9ddb7ef576f43ca408ffca663f81c8b5e69fb176a4233ff45ea3";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "3.0";
+};
+dotarrow = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "43ff7e4e163764e703673312a1213c50f0a77da98f3f36b726e87042d082f3d2433e35156e1c963d1c6287aa4cea5ccc64f140f89b82569b0552f406b29813c9";
+  sha512.doc = "7b5a4d0b2b31f55e657eed5b7cc0185a8895df77895bbe40f27c4d29d1086c9fef1779f7c4c726faae25821972fac418c379e9e68ad4cd059b1c6f5b0420e9fc";
+  sha512.source = "3d756e93ba60153727d1719f3eb77d278ecae65c08f18529a6352707b655bf39f01152f13b60490ce21ba358e2021681a64de8e9fa6f46f9f4bae5b3a754f1a9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01a";
+};
+dotlessi = {
+  revision = 51476;
+  stripPrefix = 0;
+  sha512.run = "348be296d710fe22d8122b45437d91027913b90ef36fa7aa365ad49dbdea566506c80072623ccc95170227e77ee2fc2fb3f711772afe4e7e7b83195eb3110b61";
+  sha512.doc = "c77fed1f0b8ddbd6ed141fe8c9f914cbd5592820ffe3e457ecf35952817149d1315598f449dfe0e15e0e50328e45b408d3f1ef91fe83154f5374bcc62041ba77";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+dotseqn = {
+  revision = 17195;
+  stripPrefix = 0;
+  sha512.run = "794be5110d50ff9134471aedec8adaf7267f112012d962ee6e1cd7ddaa36cc37d993517cf4663686c90df891fe2e912d260cc9c9945aaee25925c2915afcc45f";
+  sha512.doc = "aeb026d83497b78725d623b52223877d4d5a0a745312511f007d69395b87ba5362904cfa26bb24f2f2c7d0e0ae14bb82699d6108533260d736c0e85bc29ceff2";
+  sha512.source = "7cd2a4a2001a38e999e0632222116f32b559d8f004c9e378493d84486028e5c1cd5268f63a0eb93f9d1402b2c2e11b2db2429547f300809cca3d9f39efd6b17e";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.1";
+};
+dottex = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "037586577425d8a38a2170bc4bb9a7fa28a7886ad852d1c85483f7c3b625321c41a204b613479382ff5fb9e8cc3f8f9d8ff6e0a07c14b71ce6fdc68280515e33";
+  sha512.doc = "3708e08c630e27d744c3a865cc02e91868a32b1648b4d390cea0f20ea6340c56ea1720348f6b82796df6cc3f4d5b7feaf59ffe7e24c32e34535a4e5763318df6";
+  sha512.source = "adf26c722ad1e2fa26d10488125267516923db87c1185068a33a082c6f51bf5ec644ace69aefa0630eab9a604bfc28032cb5d10db15ef0c80ab28fc93839a13b";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.6";
+};
+doublestroke = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ff1be47939d9a2e8ec4fe8e6852d9fa31c2776511de158611ef8b853ac73291d1aa4ffe81985bed60c75a16e3cfc963a3a8ce3fb9494dcf6664cd6d92a549e73";
+  sha512.doc = "2cf0cc8936393be2b01ed06158b250a43514098aeec4007bf493bd9232fda911f4a59f45716fba5837e475bdc39a86cf6e1180d4220e6aef26ff9e0315389200";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.111";
+};
+doulossil = {
+  revision = 63255;
+  stripPrefix = 0;
+  sha512.run = "02e347325823f5b8359bbf192965b58a2b1907dce315277a65dc573b1d2e612fde821455dc8f8afc69dcc532f43a20d0f78d0b0f5649641c8ce6dde73525fc4d";
+  sha512.doc = "360c64adf1eface29c60c18e4b20c4aa382713f0e4a59ecab2737135a422178238214c9cb567669bdee82519e0658497bf409f92733403a1749730986be71d5c";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "0.1";
+};
+dowith = {
+  revision = 38860;
+  stripPrefix = 0;
+  sha512.run = "7c9bc25d94364ea13326ebc010d15c92b27ffad08b68fa5c3b5034e6bbd6a96370d159727270adf76e6edca15d08de86c13ca7ede009a445b500ac22b151c05c";
+  sha512.doc = "2fb2234cdf6b42bd3f9f991b3d2d76473c45c51ffb67e7c12e7976310e0fa562cb8d1f01b347e9b8140c854e1ede865cfed17f5748ded909dc8d983d4f246961";
+  sha512.source = "44d331b8f99533a6bb3b150748245787f686a807b22dcea3dd9bef311000881fcf0870d19d6718574d56adae79451ef05aca1bddf1904a76d50dd4e74529fd47";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "r0.32";
+};
+download = {
+  revision = 52257;
+  stripPrefix = 0;
+  sha512.run = "051fdf31160c95e88c8ed1214311b0ec8eda80b7128752c27a203c7e7dc5cee6d275dc4ed93f06308b71d199d9216b18600a2b6b219f852fc256eb2486c2bfd2";
+  sha512.doc = "388fbef93df8f76de34e7968b8a1925f294b87972e2e26cb1ae92145b252b5a88fc06254453a6bc15eab14a4532e1a18e3b719ea243142c09239e3521ff8f7d7";
+  sha512.source = "6090434f8a33e1ac95363082c0536a9990ea6c4936adbe151c1f8e5ad20e7ad9635ee656c9c29af9360b5d8bd427f78d26c9527c4a84dfefec7dd73a007e9839";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+dox = {
+  revision = 46011;
+  stripPrefix = 0;
+  sha512.run = "dc37733e7253d457b2fe09b72b808c5198f222dcde12e0d36ae546a8ad0537419fe7f27945625bb3cd3efd2b5b63991e89dede1199e89c67fe7d6917370cab67";
+  sha512.doc = "4474e38d3dd35dd14b281f7d2e5ad1d6104d95579901a50b3575e846532c279111c81f813b78c4d16ca6c78ac627a30e51515ee7b178602b7338c1c799c62609";
+  sha512.source = "08cbe72a2af77f3cd34a78d0743ede6f0017e7edc275e56c66defd51b1550990cf00d9327ee9cca5c44b7c73870ead063346754c4dc1f1aafc00614a5d5c0707";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4";
+};
+dozenal = {
+  revision = 47680;
+  stripPrefix = 0;
+  sha512.run = "ca4171da87126231a791f432a6015cc069f0eb0d540f8b79b3b5028f3f3e30d9202622886b582f2e351049603d0323a458fbce3d6b2565af5391a4aa94b734c0";
+  sha512.doc = "e7c180bed185135cfba31acbf4488ff0991066be7456a7c54625df458a24819ef8b41bc19eec955967f22fc156ad6efc9e194489178e2cffb806bf066ea42520";
+  sha512.source = "4e8c3cc35fc2d429fa286fc68eb92d2d290bbbbeabcb714d849f9132ff71bf99edfc5b08a0ae596f98e900e1b49d658af2b2b9daf1fbacf57e2b3aeefa15f6ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "7.2";
+};
+dpcircling = {
+  revision = 54994;
+  stripPrefix = 0;
+  sha512.run = "d102312ce1c70eeb9cfb279b065197ebd3ec6d3f54a47de55a5cb9828e76b2e690823a2ea19a935151c972f791783fa41a55adde03aefa54eb2b3fe3da0ea677";
+  sha512.doc = "b1b01183f3490897b9681927676a7eafd01367eee6ea2fcb82fdfaae59294c67d96036ef67093fab13f0493adb9dce56f4e420b486bdc5f94e8a7801efcffc4a";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0";
+};
+dpfloat = {
+  revision = 17196;
+  stripPrefix = 0;
+  sha512.run = "df136498f7ba41b1335ac109667d07dd9584e6682e1d75fc82a80839bf0f6d7a4de1f5750aa738eefb96d14d2adea20a3ec9fbc92130481d9bce0abb6c6f175e";
+  sha512.doc = "2cbdb8711556580d14a01b9daf03b1a1095387c077413b2815bfaef1af2781fc8bc56fa7a6a36abee60d6ce6928f920c9d9c3deecc2e071e8e99d51c1421508c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+dprogress = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4f56a2d6e345cb98eba3ffddfa977bd48661d90bd10712387141b3398c9a85e8b9d7b0f33e75635b7a98e91176f1e866ecf0b14ef0197fc488bf976dd4889673";
+  sha512.doc = "455451396b22b3d38288a5c51f6c2413c56ffd07ac1331c3727c4f382eaa07f0a128373ba033ae58e53411e69a4ec0eca67609fc3c111c91f24f2adb2536a2e1";
+  sha512.source = "de6166c9c79f62c0f3eb973b6383f2bb486a8f7673628862d54af8e00a5ddcdf78419ea819c95e750f47fa3e65cd58b598e3a3510d43ec3d4d3fa9538a846a79";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+drac = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f45c94e222a6bcae0d87ab5aebf0f594f1674a49787391dfb9cce32f9b36a0aa6a81e84ea4ca345e0918ff2166e36738ae9969e4d9e4653bbb99ac6a7f0cc63f";
+  sha512.doc = "7e6debf9580d7c145d8f95329aeadd63012bcfe3ac04fb9c4a3e815391757051ce021e4e2659c96fd7ff5066e3e324ac947cfaca16e52bf5895fd5724f81f552";
+  sha512.source = "a56b3648bc75174179ac74eda67d84226985d18863270cdf6b6c1688ff1405389ad27f20abdc6a41f68520e1d95890fe021d1896d00a5c44a6a4ec2b9c380944";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1";
+};
+draftcopy = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f1f2ac803e1858ffab880c7427ed2dfeaeb435255e83ed795e0d5b4262fce1fbf7593653035af2e45d4731107c8f886938015ee1a7fd0018001c0e39e9f1018d";
+  sha512.doc = "f7a4941c26c92223a9dde51e288380efe3b701d847051c13345e97f5a082cb3cd9e5d5421dfb2b1f1cdc12214df1ce6970a8ca6fe7463faad73af1a12c3542e7";
+  sha512.source = "9320e076a200fa5d7fa297c7d3228ce77ad9a9a56f57e4ef250a21320e9f2e429004ab716747499a264108ece97ae03388df084c24e2a370f57ee22b80628cba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.16";
+};
+draftfigure = {
+  revision = 44854;
+  stripPrefix = 0;
+  sha512.run = "e8ced947e69803243543657185e8fb28e67776dc9eee5e095126ec712fa368c32903f53243aaabb7308c895cf8e0c10a6d89c33e6b6c5d109f0300dab5213e60";
+  sha512.doc = "f0a9a59ee326746802fb33412c44148ed8c836a24653df6685ecb69bc76870cae63ac8955274705639e658491566da0d0633ee8d57cf57d58fe43a971252ee05";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+draftwatermark = {
+  revision = 57099;
+  stripPrefix = 0;
+  sha512.run = "c12311ce3723e6b93e8d21df2a50a3c1ab2326aa5cb6a1600fb848efd5309fa9a1c920e0ad27c785925387af5872570142aae61a2ffea0b3578d10209060e9dc";
+  sha512.doc = "bf3c28f78f03ebe43c84d722d668c14e0a751fb9e0d53ccb6a81cebf40b78f95b53fc3871ffa4919a94c260de861e93048b3adb590dee2bb8b600be1bbeaef3e";
+  sha512.source = "7f9eacb71dc803059f6d9951aa7958effb9e97bb2030884ed02f0fcd43ad554f860ccebc455ede5893d67c527915f8a7093a94b2f146e4884e23303fe882527e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+dramatist = {
+  revision = 35866;
+  stripPrefix = 0;
+  sha512.run = "d61da72538a7d83ee902081aefc23f3addf2fd6e5fa7ebb207fdac16546d13602c50419682e842df8f36a899c2c0aba0aaf615bf64202135dd9f470f5391838d";
+  sha512.doc = "fc28e1dc8614d836637350a20478a0e8a03121909cb42bfd1cf4caf8e7adc01a4ac3eba08e82c389c41a567cd00f191ecd8938ac40a0a226e2fbdac047ecb733";
+  sha512.source = "a364353dbbb9540a9f43c26fbfe6be8f814452a23e9f25c5a4c4f45a65534e0696dee993bddea4eb20eed284b892d258f6947fb0f96af63a0516f9f0fae01651";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.2e";
+};
+dratex = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1a18f8866d1cffb0ac3c277bf27e1585c7596eab60ed51756077abe3154b6d67ea95205f60b5a244e9acabb05e8dc95a792d48f0a2fc492f90d224f85895fdd8";
+  sha512.doc = "0ff34bd23dd8718f4f8b0dc3e84068ca2b38a9758849d98230f1a8d4561705d6db7be3b0fcb34621054993f27df7a9215267b3ebbd7fb3d77b8cd9cfefa0ad60";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+drawing-with-metapost = {
+  revision = 66846;
+  stripPrefix = 0;
+  sha512.run = "9e9deb95f1ca68c4f7b2a1e82bbc213da68e60bea65510e18dfa12528dbf65b20d06769c766009a1db49b9b7a649598f64a513957a4874f6c657ea0c1bc99901";
+  sha512.doc = "9d3ac79b2d4165a3e7fe1675826db2190b7bbdeaf8b14460a618ae909e29dcd9796aff70af98bae5307f67945434ab3a304d955ed5d56e17ea94a67f83f2ef09";
+  license = [ "opubl" ];
+};
+drawmatrix = {
+  revision = 44471;
+  stripPrefix = 0;
+  sha512.run = "6be4d4ee6970956dd2f3b31d31ca0cfbad268e2f98ae64fd87a49de9ab26765447531121aa0edc157779f3f9c0dd76ab2ec3f747912f4204aab9e2e7181368f6";
+  sha512.doc = "07eec69024d4daff597f2a937178f66413e6dc4974a2044f983e809b046f09140db7eaf3cfd68833bd95be0d56b4a564dfc9ad4d771fa124f55ea3783eafca1b";
+  sha512.source = "8125f7c3b0867df9d8f21e45d89a03e6ff0f946d946646c26b0ca825a30c62051264f45e5c2da5bbd45b35afbc2f7f7120e9ea3d2d289f6a228385860d25f523";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.5.0";
+};
+drawstack = {
+  revision = 28582;
+  stripPrefix = 0;
+  sha512.run = "383eab0b77675ae418a775a413c37720d6f74d51d1a31bdb2923b45ced53afa576f10304e372171298ddbd566a8418526d291f74a1871eaba36ea3793d7d0173";
+  sha512.doc = "d435447ec29bc26262886b3dc4c41cefae81d24e0704857a9ea61f1fc08ff8e4bfb4ead7686a9f49808dff30da47fc5638e2c0dbea4c6a551800a373f68df0e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+drm = {
+  revision = 38157;
+  stripPrefix = 0;
+  sha512.run = "662a2593713dc02debd4702b5184586736f12200aba4079154e6890b49d581810e1a7a94f0d3b6750ecd241dc03cd5a638a3ea5bd4792f13829e7812f5620b36";
+  sha512.doc = "7821503ea6548fa200221d2c2234389a252ddc61498d66389f0afd13b6c36536b744f060f42bf26c4e2be722a7cbca8841b1b76510391da4960dcfbfb9956177";
+  sha512.source = "a505f89568d63bc36799a3802fdd4e5a4903a10226b565c58b1b6d0900f0efeb699838ef17f84d9720558c7e1959e33d97c387b371862366726c6b99e30e838c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.4";
+};
+droid = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "e57eba23d2b7a84ca36be4b0a2988870a89b69a5c2f423d8961c8fe38c074cead0760c0061a545518959145ead02a13e321c5719cfcd7d6a575b7050cd74ef2d";
+  sha512.doc = "d1f86ef4fd82d955e5f6560b1eb56805bbea621358c3e708f5c07d6539d278a4e61fed680afba425a212eb7383bcdc1d663d492b4cd716ba2c1872f9006350c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" "asl20" ];
+  version = "3.2";
+};
+droit-fr = {
+  revision = 39802;
+  stripPrefix = 0;
+  sha512.run = "76c928be0648ae7bddc76f654b65a99ae6670cb17b0ae9a54596599ff655636d4520b31d4e802a15af65637c5bf956d41a2095762a3c4bb77052c9f74da5e7af";
+  sha512.doc = "6129658aad2fae20dd12252941ee774393e262d9322ec2163ebc964ec27c4ffb63f2ce0faf9b74a90717c137065e9af238d45c623cc58d52b1e4776da221e231";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+drs = {
+  revision = 19232;
+  stripPrefix = 0;
+  sha512.run = "5054b389c79b6895e648d3d4fcd1a3f7b06b213963245702e5bc4c0e8b6e3a87c6a2d3f72509998216e25553148008e597c6dd3015ef0b94724e84f3fade5936";
+  sha512.doc = "c265c462094e50872fc2748167226319a5723aabe54ca057661b95c7cff897afd08f42ce6d520b7ab35f259b760800e79ac6deae0f1ca0c776c2c2aa7839cf80";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1b";
+};
+drv = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "b7f2b56f305d552bd857a5950fad2dadbf800857d4c8ee411fd2f5786697385404fce3956e59b5928ed5f0a688117dd740c0f56806674d08cd8cb1d52b79a9d8";
+  sha512.doc = "a79d9883615568bd6c0d5aac44cc2ce28e0bd08e96f802d500515428ffb5400beadea94347abab7752904ae01342049b8d6687f6047aa9d8b27f5fe3a647bd02";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.97";
+};
+dsptricks = {
+  revision = 68753;
+  stripPrefix = 0;
+  sha512.run = "f51353329034141f52c38563f79de526b7b47de3435e14dcbf91f658a0f64a7b23075e8cef98d0f948ab54b57681c7d9fcec417b59871ff908c00e12d1711b6e";
+  sha512.doc = "0cfcb4e1094284ae954da49c1212bb793831861b57316f48fa93e20e92c8d35e1ee8e02bb1be8ecb52442dd80e3f0f921d024bdc8797a843ea0fcaad29759d01";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+dsserif = {
+  revision = 60898;
+  stripPrefix = 0;
+  sha512.run = "7fa159e85b370a1327a8cace1a20ed54b37f2413e553dbcd42c6e75cd224da35b47402d89d39971873e888cc9f89117fe5403887299ad8c43e6bf2f706df357d";
+  sha512.doc = "e831d9ba6233cd260cd6f212f4f8b3adb360f6d701d121d26f0de95360dd56ccf7e3a5fb6fde990d875e60ca20f7632a4badaa9df8e3b98f16bfa5b176308761";
+  sha512.source = "dcdf454c0d970338951b5b458df039ecc0287020fbf13c3ef46d2effc4aace39cdb424937d506783f572ccfd7cc136e9059e9894d4339b53f4b1be4b52d93579";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.031";
+};
+dtk = {
+  revision = 68849;
+  stripPrefix = 0;
+  sha512.run = "fef5d494604434e725a79e2dc8165cc25bb01953e31bd64046af11ea6513314afc879c86dfb8aff814e25ea3d6eb3a64a4896c0e5992a87c44af3444eb1439c5";
+  sha512.doc = "5ef9df97097a35a4598ee8fd0fd5a506510479195a8dbb9c4bd221324b091f1d62da62a4f7ef8e422fc4a01ac494384882d24d102d1b7cd4b59d72f821e415a4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.10b";
+};
+dtk-bibliography = {
+  revision = 69155;
+  stripPrefix = 0;
+  sha512.run = "57a04ffa623863f4413aaf8c78d1d9e6e2e3eac1ae71fae768cfc103680b0191306175a5534fabed4ac33381b9d1b0b2884ec9180d4fb92c8db8c095689bcbf6";
+  sha512.doc = "c43357d8f3b490840ca62f7f495d53bf13a187362d7caef89caaafcc2196b64b88ab093ba86d55e209ee3fc5d1c3ded0b2db6b1fdbf70a74d87233f1e54c703a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2023-04";
+};
+dtl = {
+  revision = 62387;
+  sha512.run = "c2b7f3ab778c01979b158c335e4bff7bbb677fe8c5bc3202a5f43c747119dbc4a7e348c5fbb0bf2a487a49430939fae6abc855392da92ba65441b87e08585189";
+  sha512.doc = "476723cb714863405daaa5fdc35557ffe7cb1149735272cfec2f14473ee65b93da90648abf73b4cf09799b1595569513f3735a07173b50eb6db405d526d40660";
+  hasManpages = true;
+  license = [ "publicDomain" ];
+  version = "0.6.1";
+};
+dtl.binfiles = [
+  "dt2dv"
+  "dv2dt"
+];
+dtxdescribe = {
+  revision = 69348;
+  stripPrefix = 0;
+  sha512.run = "1fb81c09edb0bea837328d7518f1d1aa8f810aba84c78a08e1047aa3bebcc79e4a61a587f4453ef5875efe0019ace6f8303ed78fcb74b378eed6d153590b7d1a";
+  sha512.doc = "6ee725f86a622df46e1191f15d42fcfc2cd19440d837df9146a1e751a7e1770db406be647c7e30572341db5ac7da8fde24685be385830bd8527b5fdf6d74f483";
+  sha512.source = "13ebb0a68a33e646f2b2ef3b6f2fb92127c94ffe8123ed53bcebe95c9a13e1bfb167d0bb457ba1235de95c353ce2fbdcf396aa4af21eed2a9072ba5e42501a96";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.08";
+};
+dtxgallery = {
+  revision = 49504;
+  stripPrefix = 0;
+  sha512.run = "c4b164fc1fe9230aa92bd38689ffa67391aea511af59e74b93c9379f1d027f07091f98734af837a1af90b35b0e2e5245f78f0198f4a09465a8c59c18077a2457";
+  sha512.doc = "ea56d62e0fb8b168461f8d01a08a9829ed00db4e2d6a460791de3018be21b4b446ad8ebf4a1c4a69e99a0989b85b55cbaa8aed171a53479df0501ea36cf03bdc";
+  license = [ "lppl13c" ];
+  version = "1";
+};
+dtxgen = {
+  revision = 51663;
+  sha512.run = "b197684c1e941a64b606b472fb9e0f1ed4f5d0b0db2df59202712c0e3f3b3993106b8d493d707c4875e90dacd9dc7d12bba784ef7c8d04984a38708073b1b92d";
+  sha512.doc = "f666a2b5d3cb32d43a23cc3edcd92bfb727d500a8c439b4b78bae89ac73c317adac9786e4702e78b5b4861b76489ff7af5cfd115a80b96cd6298c65412d56a50";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.08";
+};
+dtxgen.binfiles = [
+  "dtxgen"
+];
+dtxtut = {
+  revision = 38375;
+  stripPrefix = 0;
+  sha512.run = "cc28ede4898b583a89df3efbfed45318be9034b3c2a92bff083e79007326d4d680177f1884aa506dbc9574a924687eb463f2d69c297906fcbddaa584ef9e52bf";
+  sha512.doc = "2c8a2ec4fc38aefa720bee29f24149837f985a54cc1b9cc9325887f5b7738d89ef38d8b60acbb4b5adf0e6c13e1677003e58adaaaf50e8949c33377ca29679a7";
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+ducksay = {
+  revision = 64655;
+  stripPrefix = 0;
+  sha512.run = "d89900ae1247eb6706719ce472964a2d3b82c2826e18b3965de12d0c0503d77968edd9faffdee9870089de19e10319f94b1c6374371d387a50ebab414934bb61";
+  sha512.doc = "1231fbd9920d0f9cc6c848df09c175c8bf47771e909463331a593bc71a7656948541e66bff507250030a88a362265531c7997f90fd23b4dde40e555d02b75760";
+  sha512.source = "594c31ff9f2ac3274a275ba0f9b40a20b113f7357aba2755ca684e88f77e00dff220204908709b0cfe678a83fa391fd6728455123dbd53160a5edb5be3c64de2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.6";
+};
+duckuments = {
+  revision = 52271;
+  stripPrefix = 0;
+  sha512.run = "77c975ea3e42faee4db5d99d692220884b24ccce2d69a30ce484d113cd261ddf5cf5a13ee04d9e8a95572e98c8c4bedfd901db34379af6a567777f9358e4bad5";
+  sha512.doc = "0c9e24cc988b9350d188878dd8b463428133fe30c00218eed3d67917ace24412e55c396422890fc6c02030378b560b3d374970e879e3a331db7d8e34b3302421";
+  sha512.source = "528db05e9c1c0232fae271aff911f35cd55f85bfcdc931820f5a74d6f490fa3fada99c274b36fdddc6163cad6f779183b0056b1a6e003c4c2737282fed608497";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+duerer = {
+  revision = 20741;
+  stripPrefix = 0;
+  sha512.run = "15f39b70d6b595a1c4d6594a2908fc07e3597bf1bf88ba25b24ee545d473c709a15b52ad0bd367b0cb1a47ff9548a110c6dce6c2a2b2402f655c21f6dac5a393";
+  sha512.doc = "babbe18510ab7acc910639e2993858b2cf27c4414772d2a03fd2d3576f7dd64f4c7b1aa05d9a7913b4eb8d4eddc942137b41b87816631b34cf35e0120dd3ea40";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+duerer-latex = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e474634e00b86878bc0c09ff247a930e102621d3606079d72e7c284a8ec61d2a2b36f1d09c171b7a4953981dea65df49da1962f01df272fa80354281a3209bc6";
+  sha512.doc = "d1ea1a023e9f2f1ea4e0fa045d8831f764dbef34d1ef2ec96090f7f7a49aa1f4ed2df63bb611ee354a1e816a204841fbd7f4059a14ed06d758a31ca9f460d50a";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+duotenzor = {
+  revision = 18728;
+  stripPrefix = 0;
+  sha512.run = "33990302586baf5731976a27a8268986db6917137219248e559900fc2e64e5ef443bfd14a0472194a962f6fa59a8ed8bb1caadd46badf157fbe39f36815eacd7";
+  sha512.doc = "83a811a37004975e4b3fca67bfed83d8fc85fe97a07a20f624d321c62efddf2ce188f1748a5cea47185675e8d5226433b48327d8d7daf87465471b89b652f2fe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00";
+};
+dutchcal = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "308253e2b148cab892ef0ea5004cce0c3e3fbea4c0555b67f49e554734b16bc5be9baa08119fd0a2186360cef20e165b5133ce85c793eceaa9955673ec4594ec";
+  sha512.doc = "1ac89d2c4ef090edc8c354a3f869485d3af9c374da012fb51edfd22f0644d63a5c380aad115b6dbe83e70846904b722b69fe4093f4a7ac8a4a3eb1c1c97f25b1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+dvdcoll = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e6b553b2e13e87e105ba1c64422e5269e2f285754f12db1d43f475e0f94dbd32253620c1e71ef08de106d5a050c531e058e529264478e7f4545ed83dfffdd233";
+  sha512.doc = "59b152b1922bc79ec3a132902547e8ffebce8cc05e2933b3b54292b507d1ac1810cd0aa2c974045b9b996fd14445126e3eebe6ae3d6ec45e1fdccea9a6ca35e1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+dvgloss = {
+  revision = 29103;
+  stripPrefix = 0;
+  sha512.run = "51227cd1323c6ef94f8e0c537289abd3812f39109ce178793347d6615a718109f120bf9e6a4dac1ea801effb6f2b9425c376fdcfd5db6a5409887a8b9b49dff8";
+  sha512.doc = "4e59a568e0230e5e5dab7968eb27a8bda4680ed31b23d21fe3dfc15d0e3d8b3d6599535f91a092e2f9dea69402ba8ef07291d2cadc1e1cce28aea927fbb84341";
+  sha512.source = "a4df82b4ea3e57de02e61e28cf4b9e8fa91e385534d7676fe3e287c49148849dc736003b867f1b481d56466847f9f62f020bb2e826ec81dc31be3d2b6f6a47d4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+dvi2tty = {
+  revision = 66186;
+  sha512.run = "1051c3448703fdd6395d78b0d8b7658197da6114fb7455b31502bad5c2eda24fd4eba2ceaba1f65d106f981bbc60caf9f3bd0db29403e898b293514d086bf91d";
+  sha512.doc = "3ee736f5fbf91472008a5c8613c0e629a9f76f61fee4c4491b67045ddaad7aa2f89a22937b172e058b072ae1a013478fdf5a9f68dd2e225e8a8e77c8e3b3a289";
+  hasManpages = true;
+  license = [ "gpl2" ];
+  version = "6.0.0";
+};
+dvi2tty.binfiles = [
+  "disdvi"
+  "dvi2tty"
+];
+dviasm = {
+  revision = 68043;
+  sha512.run = "aa75c4d37cce8087658b66f8559cd31add027eaaf9b4fe4075f42f1bb4cbd30e57ca1125c8ae42852d17d51709b6c368bacc7146f16dc4f0d2ceb56b327dd824";
+  sha512.doc = "116a7b02005ced75ae3e712de7d66513ce7d6d3ae9ee4e6e94b347d6000b27bb58d4fc1cf76cec7f19fd7cdd316f42c02e8ad7b8e0f0ccf88d405e17ef2ff155";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "py"
+  ];
+  license = [ "gpl3Plus" ];
+};
+dviasm.binfiles = [
+  "dviasm"
+];
+dvicopy = {
+  revision = 66186;
+  sha512.run = "60f44492a3d1af9686de3118af37f1d054068527f50765e21773f76ec406b4ec0f419d6298dab6b5d33e2fb740bd740f2037f711e8993bf9d3ab8f611bebb2d0";
+  sha512.doc = "40dd53fe878937846f003d3b72b7d474c13ad07156e78679501d01c020380a3fcc450aee7a72c0155a950429c258b8fab253a7ce3043d58d88300d0c1037da56";
+  hasManpages = true;
+  license = [ "gpl1Only" ];
+  version = "1.5";
+};
+dvicopy.binfiles = [
+  "dvicopy"
+];
+dvidvi = {
+  revision = 65952;
+  sha512.run = "81c58f4e1352a8e5133de1ad86b6b37c47f9b0d29307354001693ebc4975c30808e349c73a477283a16df4219fd5702b733ecb5abe2043aff1d1b537b7fa6a3c";
+  sha512.doc = "b571021445b822e9824782ab35a0743ca23f69b809354dea6676c58209a451be5bf595641fbcb461211e6dec15e765bbfaf8164c0ce1ed4204ea72a2073ecb92";
+  hasManpages = true;
+  license = [ "free" ];
+};
+dvidvi.binfiles = [
+  "dvidvi"
+];
+dviincl = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "dc09380d453b2c83359fa1862f6d289162ed4ec12e7f1b2842789db26e780713981261369dee0d03561a6864bb8bb25e071ca73c3d85e6218667587fa78f55bd";
+  sha512.doc = "3418aa91ac8daf98f2ccbe67c2ca13bcf8fc5adb380f7c56e133f4487bc3ab701be1925d7a5878fc02ab7b8607e70991887a3d875d25b777b5489b7ae904aa7b";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.00";
+};
+dviinfox = {
+  revision = 59216;
+  sha512.run = "d366c28a88f488418405944e299b8e8c681a2bfbe1fb8d37847d89920ab41d3103d52072c7455ecec2451702cbbea02971ac6f1e1d609bde9a2f5e8abd345ef5";
+  sha512.doc = "4da7f09620beb3aa7e5a572f31c1d53466607ec0f6401b687ac1da624ea435f0efb3e0e2074252f49a720cb6d53412658a8a45dcba5553315fc9423233755dbe";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.06";
+};
+dviinfox.binfiles = [
+  "dviinfox"
+];
+dviljk = {
+  revision = 66186;
+  sha512.run = "0d34e837c0f67ac43dd8ef5bfb9a11d2821188ef8259f41b0cf9454bfa6641f956c21d63fe15fbd68dd59f89c1da820cab4ec5c4579fc0255a771c47010821cc";
+  sha512.doc = "4b5815d766a41eb74125269e297eb6f7d1626d68b3f2cf9d6c4f8734721e3c71b63e84e729c39fef41320e4f728888796e421bb5c7ea5ffe76cd549400d18d37";
+  hasManpages = true;
+  license = [ "gpl1Only" ];
+};
+dviljk.binfiles = [
+  "dvihp"
+  "dvilj"
+  "dvilj2p"
+  "dvilj4"
+  "dvilj4l"
+  "dvilj6"
+];
+dviout-util = {
+  revision = 66186;
+  sha512.run = "684f5efd93c0c12a07b753f169f44e764b01e4994faa86df8361ce38c15675a0601f61bdfc9702508f66273ac8c69250db65fa0d10d3c544fb78fcc824d4ff3f";
+  sha512.doc = "d10e8c9343f9065499e2c06b5eecce4047730875ccee29d6a09d1608e2334f7310282cff765c88c7da8ed8a52816910c79f3fad58d118f047d04b4bb7ebf44ca";
+  hasManpages = true;
+};
+dviout-util.binfiles = [
+  "chkdvifont"
+  "dvispc"
+];
+dvipdfmx = {
+  revision = 69127;
+  deps = [
+    "glyphlist"
+  ];
+  postactionScript = "tlpkg/tlpostcode/dvipdfmx.pl";
+  sha512.run = "75703f600365c90379c5d009e00d35d2e514a76b2556c96c84fc2a717287441af419a26fc9ef087d111f2e77c7180f6371ca2ec33b66052ab63ca3d11f48e788";
+  sha512.doc = "d2fb71e116470d2d629613401f448ad9aa8cfdfa9ada68ed324061e4ac614efc4fd2c4ea2542c8fae32f476b92aafbabe4a5be648f28f16708c43958d7aa99fd";
+  hasManpages = true;
+  hasRunfiles = true;
+  hasTlpkg = true;
+  license = [ "gpl1Only" ];
+};
+dvipdfmx.binfiles = [
+  "dvipdfm"
+  "dvipdfmx"
+  "dvipdft"
+  "ebb"
+  "extractbb"
+  "xdvipdfmx"
+];
+dvipng = {
+  revision = 66203;
+  sha512.run = "a1693423389d56570a3fa1ac1eb45bffdef5fa9bf26d738adae1ac2361fc9aa7985d4ed0908b5f8aa49e2425da9821989a61a3ac925ac4432c9caa49f66a95dc";
+  sha512.doc = "a4473f728047cdf06743520a5cd4c79d7aa41818c44291abf4781f04b87822b03fe5db9f42d489d7542ca259070f71a3f255507f3dc8fbe772e30da8cc88722e";
+  hasManpages = true;
+  hasInfo = true;
+  license = [ "lgpl3" ];
+  version = "1.17";
+};
+dvipng.binfiles = [
+  "dvigif"
+  "dvipng"
+];
+dvipos = {
+  revision = 66186;
+  sha512.run = "9e949fb402facda9c30fa2f388b80f2cfc530670b33cbd78559e4449fa6004c5d4082e4fb895ea397a334a333e5d5ae1a4f66fde3885f0a9eb28c9d9ebbecd0a";
+  sha512.doc = "254a1db41636608a133e7807a8d4ea8ddd99ac646f35b66a43205ac7fdaf4a15c21eafbb85e23a182506e509895776d1fcbe63b3b8a7f197d577c6405ece5c44";
+  hasManpages = true;
+};
+dvipos.binfiles = [
+  "dvipos"
+];
+dvips = {
+  revision = 66203;
+  sha512.run = "fbaf1dd979ceed4f7146d8aebc31ba7d770a8389b4ac214086db5951c485a2a3e3a62b2772394c8053444dfb8de0d22b3501c2ee3ee1e4e7493a1df5a34cc275";
+  sha512.doc = "ac2518c20c26dcda42df79be79ed24e2c021af2084ede43f51a5589b1023c9c94a307bd0a4742880e2c89d7620b2889f3a675e30a449d699d15db98922b0da71";
+  hasManpages = true;
+  hasInfo = true;
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+dvips.binfiles = [
+  "afm2tfm"
+  "dvips"
+];
+dvipsconfig = {
+  revision = 13293;
+  stripPrefix = 0;
+  sha512.run = "ff7ad395329dd1cc5d21d5459916d0f10a8c03399d733048bce0a8aaa4e3a955f3ad3dbb228319d4bfb96e0694069002507bc294ed81fda5a48ad93f8cd82589";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.6";
+};
+dvisvgm = {
+  revision = 68950;
+  sha512.run = "cab242a5b7fec4713015b2d3b57f36256ca9b10d606f4a11803d7c2beda9486a1839e69cf58248078d08a89a6e4513d0d4629901c828a1d154cc30f1f7059797";
+  sha512.doc = "fbd752b03b37d62e00e041104e547b1e862908f3ae74bcdffd17cb7bb74c6de3998ce8beaa32726f42aa31dfc1e4f9e85601a39b62f10d8c7381816d3c4c44db";
+  hasManpages = true;
+  license = [ "gpl3Plus" ];
+  version = "3.1.2";
+};
+dvisvgm.binfiles = [
+  "dvisvgm"
+];
+dynamicnumber = {
+  revision = 38726;
+  stripPrefix = 0;
+  sha512.run = "802df3848c8ace40e1eef5c1d30c07a6a5f30fc902a9bb18581b79ff322921e7235ab05981625eb289f093f4486f0aec2e9c83bf669a9afa993a86146317b619";
+  sha512.doc = "3eeb8617b33d45c1f97756f58bb87fa1244cd3089e0ed64f363f2909480459ce17e30d54bfbf948642856984618081d0fd15c0721d0190c187b375fbdfcfcebd";
+  sha512.source = "8a4ed9566201af2835190f574c3316f5eff4258ef0e9b25b62b146b483c14e9fcf66abc2e1c4b3512f12969bcee1a8102ba020ea78874e0c7f3e68c0a64232ea";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1.3";
+};
+dynblocks = {
+  revision = 35193;
+  stripPrefix = 0;
+  sha512.run = "bda4ad43754e7d4fa87cc4ac5bdb772cd24a4e613bcf7993e3d448a9c884aad5ad484c6dd7739f4c6edb983560181717319dc26376a6025f3847afb588fa47a1";
+  sha512.doc = "4f4084cc4dd913bcff3e71286fa4e881c7d577afd8e0669396de2ab18ccbdbc8649117bb931e365fa5999c5c842a71cab18da5573e83c1d721c87256e614c321";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2b";
+};
+dynkin-diagrams = {
+  revision = 67267;
+  stripPrefix = 0;
+  sha512.run = "4c7d15e3e04cc562e1f4a401546223af6e53f47f8edcaab6e82bb84246bb6c72b1acc15437402b161a123d11c21ac350d01b33ef7c8d8b7bab6c8dcb9baf7723";
+  sha512.doc = "94d9a69e3603664d9f81da2887dfdcdb70d9318ecc13c0232da64cf23e6d6dbcd072807035771c519d58283ac40f306901db8699061305b3c97a3f7ee42ecf65";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1415926535897932384";
+};
+dyntree = {
+  revision = 67016;
+  stripPrefix = 0;
+  sha512.run = "e8591951639020398e8f6bd892bd2d43217871fae4e94ecb09bc6005f1857858edb5b3b9330c5d08e8490598fd2f3d45bba4d99a9b33de464d0c5e6478399689";
+  sha512.doc = "c2b2368a88648efe795a633f00ac826fff3b53029f557a4c5eb7dadbe882f560c768754adbbac09347b6bf44ee3bf77ec4b5ad57e9d5726e2c51519e0d02814c";
+  sha512.source = "8df01c048b52cad5fa5862b16d16672eda36158936af1bd8254ef6b9574ecf84263f5f70a466f2846e653e1565e2f57f297c4b05c281c16ec72a4fd1e1eb8f25";
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+  version = "1.0";
+};
+e-french = {
+  revision = 52027;
+  stripPrefix = 0;
+  sha512.run = "ed14a41b05d47117fc354bb5a1782338ed91ebbd6071af96f4bb94fcefed31048ef3ed1301686dd720d7f1c9ee59c518adbf83c6c7de2c35e3d50cdd65c0b0bf";
+  sha512.doc = "d76ba6c016c8a48a06ed126d0d011e1336203cc8182f744de9d238e723019156f369574b7090cfcc943829ef058b77ec536ab6bb7c054e5e2587dc92998258d0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.11";
+};
+ean = {
+  revision = 20851;
+  stripPrefix = 0;
+  sha512.run = "8a44b134d612ad4908a3ec025b0934feb56a8a8d7c7dce91f7ff152fda91c99c0c557ecacf7b22d8e9abf8e99d28b09b21abc8658e598baf37bfbbaa885b86d4";
+  sha512.doc = "35c7d054236569b03082af07412f00dd08d760547433ec8da1876a83546c7432c4cdbffb617ff34b4e48b86873d699d41749bd838e12ffe32980b3d6e92865b0";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+ean13isbn = {
+  revision = 57514;
+  stripPrefix = 0;
+  sha512.run = "84f73871c0ddf2d6d2ae0d23f6d27c1cc985ac1c42345ad339d55762ac9e109f8d33dbf27105ae470ec2d2f127918c3fa0a3c49d9fbff8a7c67b3d20f36d2e8d";
+  sha512.doc = "e7c474d1d488d95786d5f061412d051c9306cedeb86f6e31915d44e6fb71f09303b8f0e782be393e56dc6887730560825ef29d57af5a20f7bf02d96f77eb554b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+easing = {
+  revision = 59975;
+  stripPrefix = 0;
+  sha512.run = "3ed041546ecf6e921ce60f48365a1ba81ebaa8420f8f6d8e1c9ba1b38b20ea2a8c13392295d31a784bcc2fbf135ae37e5b89af794603b98492a4fac9c6dc6861";
+  sha512.doc = "bbd559d63635d83e00924a9d40258f3edc32519524dcdc4bd3d7bce0487eec01900eeb26070cd4abe372150f013ab3206b075aaf530de6d395a938465de072bf";
+  sha512.source = "dcbac9aef840277651060def21b4bac6f26572d7a0dbc7524788af224934c6344ac47af13e85a4c4d8f0857227b5ba8b5401081d34b7d5929747f510288dad37";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+easy = {
+  revision = 19440;
+  stripPrefix = 0;
+  sha512.run = "fbc84351fe02c560ffa1c6b1713e762810123e7abee47bb31899d4baed353928350422e7d237abca758753ad306f927466919ce6b160a3820d1d5101c0b71ee9";
+  sha512.doc = "27bfb9792f0c8261cd2de9bc95dc4023c69a37e12037855e31c606f0dc18d47e45f8299d385fa1dfcabaf6df298bb529e9da41f6d9d36f38f8d7fb5ef7930886";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.99";
+};
+easy-todo = {
+  revision = 32677;
+  stripPrefix = 0;
+  sha512.run = "88b496c1f4f56d26ac2fcc6d82e28d71bf11418368d82d3dcb193f8299672bf41d6c15938f3f6af5ac28141f2a52d132844fd178ebb9694de7f7a22fe8f13eaa";
+  sha512.doc = "b2c49273445084f94083ed11f43492ed8ca32582fd9ffe9d12ccb7afe316b06b1924a507c5a12ab5880cae40ef4ee196c6d3e5d05f916356fdc026acc0a9acf1";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+};
+easybook = {
+  revision = 69411;
+  stripPrefix = 0;
+  sha512.run = "384ca42bbf351ddcde2675f202c4fc8d8413b074415d55f80858e982d8cc487583b00618b8a9a0fa084305b0bc425438c5859a18e8b2127d7cc58976049148cb";
+  sha512.doc = "8a9ec5d3147540f5ebebc7c85a2c1413a86d96d5961d7dadf9f24179bdf546f7645dc157a7f1b3ec12daefe243dafec828380532e867958733fa554baea45dcf";
+  sha512.source = "aef472cd48badc742213b17cfad43b5c5b59b4bc185548a3332a733542301f6cb6f9de10b60d6b7d860f6e2e62c43b9338a14eb5683456563e38377d84bc08dd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2024G";
+};
+easydtx = {
+  revision = 68514;
+  sha512.run = "f3297c900999197a5acbd73b931bffb21cc989296777b4884d62792d283490e46b06282ae5ce0cf3b0411690432dfa442a4f00c693f4d6677b9ced6037234914";
+  sha512.doc = "2f9fe3dd6b2ee2d326a05de9f38966f26ea5baa154c3d7fdecea4af944dd041858b9e66f593b1a246bc6a3fe7d44d64fe1ddcb72e2495917bf8f4ad38b6531c5";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "0.1.0";
+};
+easydtx.binfiles = [
+  "edtx2dtx"
+];
+easyfig = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "37a8654ee9f53ed35003d7d78fdae32ef195aaebc0530310e7f00829cec431d7df4f9bd807da8dae844731650a79a7cb9f7a7ca20c5dd540bafdca7975237503";
+  sha512.doc = "1a197fa61d347919b34bd8735f5265d058e5a932a638ca91d34f43ceecaa155b9277db8ea40178b37bd2bbcaec4f0853c2d42ebdaf16d37e223da45f305c330a";
+  sha512.source = "7fc5ad4208c6f1da261180edbe2cb1c11c8a34f87479199c7701986e516be43f05be6a226f75828aa2045a7fff0ad735b192e02e9739e381e8c64c66dba33310";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2a";
+};
+easyfloats = {
+  revision = 57204;
+  stripPrefix = 0;
+  deps = [
+    "caption"
+    "environ"
+    "etoolbox"
+    "float"
+    "pgf"
+  ];
+  sha512.run = "2d02a55fc3d50e5fb79ebe8188300db47aaecb42089843033c569ee0508a38f81e9409d872535e1f7fe3b13a067bdabbf8249073b803c8d232d08aa1d5520d48";
+  sha512.doc = "d6e96d7af908e83b67b77f0432e6ffcdcc55b64bc63ac360e42291f16adec4ab6655a423f5fc8f31180071afc5645f47b7ecb2c1c80af719b6cb0cc6e77948da";
+  sha512.source = "b21681d30b8963127d603bf81b140851b5e8ea17b63d5979bc05bcfa68efd67460b9f0d0419a69c44606a4d569f5840b3c8d6f0ce7b0cf18d86c1fa104776b5a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+easyformat = {
+  revision = 44543;
+  stripPrefix = 0;
+  sha512.run = "f952227a7b0e579d2bf432b3a72e80a45e8adc22ddd9e7af380de54c12f04acf6c4a88dde5a8e7027d11fb820448fdbcc6a343500ae493fa20341634fc64aed5";
+  sha512.doc = "99b5f56c6004b72bfc7289905d2808b5e3c743449896e2af88a7b5c23bae3c62aaf2da9bee43192c662be28372bd856dec1b78a56626d5b1eb91b5e21a759356";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.4.0";
+};
+easylist = {
+  revision = 32661;
+  stripPrefix = 0;
+  sha512.run = "b1ddb6242b9ad2e40785602f942d4381a5d72a7d35784bbc2a1732ead1fbd9d730b580226452e9f56fda873b174c56f9b433f1193e0e3424efba4821f7b714ad";
+  sha512.doc = "518258b7d24763477376657e128ef3504d2c8e0f71187edf9edd34825d567f9cdcdb09d61a37d99655959d7c76edfbe550bd08ebd7760735e46fff33bddfbf0a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+easyreview = {
+  revision = 38352;
+  stripPrefix = 0;
+  sha512.run = "4efa69b2e6280333a89022f93a95c8af4d22cc9b82c4e8692291470af83696e7ed524c77cfe9d9c397c4136c0ebd8399a8ca4ab47d42b84da35bb79189ff1b6f";
+  sha512.doc = "4f71891df0b1dfbf32be06a427f34e5c45f73543b3acb9117487d2bffa46f5b61b74f795249cf3d806705beab710c5a7934a59a8e215c87678e778db517a0832";
+  sha512.source = "8e4375d0711a1fd8ffb3c43a53b62e5e9b84ea90217c21a7155e514a4a42b8b34c36a0f0a839766d7e9b4eee05a6cb36ffd1da98f1c9f756d67fc8ba0acd4807";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+ebezier = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ccd80579b8c7e7e3500ad644f8a418bbd48ad1f2e1cb2aaa82836477553332b43092bb760c01cd7412393ee5b8bf23c055361f111467c71bd7061459781557ac";
+  sha512.doc = "b81d28abf5c8b4a3dbed9219e6519e23fa5b94428baa8aef0ff32dd4893b24524e49cbb8ae08327a7ee59eba93cb0fa2950883d22296451c1f7949225f42b1f1";
+  sha512.source = "ee742d7061a7891ad2b9cebabe827a408750f00ce2012bee8ae787bfd7b6d7ce8e968614d3d3f9eee72072560d47d871fc0022bac8ca8231643f85adf31218db";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4";
+};
+ebgaramond = {
+  revision = 66604;
+  stripPrefix = 0;
+  sha512.run = "4a676d0016c5b3c4e513dca01e7e2f1b5bfbc061e111935380af4937bdfe2493927b226b28972c060ee0c09e7c27c6bf828ea09151eec0b8df67530f62e30aac";
+  sha512.doc = "82713ea36e1eeb1d2673a049d9ffcae97627406571e6e8e47fa6a6853511beb5a5eeef8a63fbe88e6c79539b1fbde880d0b2779f6f01f20eb7b1c7fc716104bc";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+ebgaramond-maths = {
+  revision = 52168;
+  stripPrefix = 0;
+  sha512.run = "5d65f676daee62f96875def0faf6d1fa217143046768985956372473b4cd3c6c00ca650cdedcdf677d6ae6a03c65743d30df6d32c36cc8366d8a1a9961bc11d3";
+  sha512.doc = "d2207e0f6535be6ed1a53fc15717a60fab0d473da4f307cfc70c7271fbd93e7f6cbd92d1c0f0738da6d1b607832cbed95e5c87edd53cc5423f35f287289b4573";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+ebong = {
+  revision = 67933;
+  sha512.run = "c38185b31613af4d6b27ffb5442cd404c1eb05669605a2140db85ae3074a3a7739c3e375e3cc16736f9c2889224f33f685d503b3908f4009fa308be7737aa499";
+  sha512.doc = "a3337ca9bfe756672a66554b88feb59a49f66ecd7d1aec3702d74f29bc53ac1052394bda679a4cb4aa7509c5eb712938ed943a28c6f56a749c926b8d566eecf2";
+  hasRunfiles = true;
+  scriptExts = [
+    "py"
+  ];
+  license = [ "publicDomain" ];
+};
+ebong.binfiles = [
+  "ebong"
+];
+ebook = {
+  revision = 29466;
+  stripPrefix = 0;
+  sha512.run = "3345ec303d77965800fb78a1a6b0645c206534bdf84e5b5287d23fb273a720025ec770527d662a5a535e98fb6cb9a6d37d50569963ca24225af8d626ea7d4dfd";
+  sha512.doc = "0aba8d5010ece8e6e3c155d05a87eea960d8ec1b4deb1cd7ba948b4106eb8e20d752d3032696bb98c1d23b1927317d3d53a79fdf0b62e9053245aa86ef6e79e5";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+ebproof = {
+  revision = 57544;
+  stripPrefix = 0;
+  sha512.run = "e2b130cbc7b98555ad010ab5bc5226c68f413581b3128245500ad3ba734e4291c91cc42c96ee4108a1f359fb7cb4c884dd717aedba9e594865466e6c29d13be1";
+  sha512.doc = "d5a1b900c73969c590921f3fea138e1ece49d9c9c4f1ccf7d3c1c877f501196a08d8099afde9913b83e653f4a8937e91878640975233f5482b6538d262a6139f";
+  sha512.source = "16145b4ae4c6998533ed85df9a19abe7108ac13208f19fde0906280f68d96817df87db2db89ef77e1734e5c9ae6f2825939ce670856d6f35429cde10442907f0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.1";
+};
+ebsthesis = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "37df2bd7749bf91c2e2a6e27e92a9222ed9b9d499b3a9bdb63f7751008bf7a4bea20d62bd59e8672b7fbc7bf0caa1ca77ef797c42224fc4167e5212f21cafbd3";
+  sha512.doc = "5c508fdf7304668a371966d1be0198d71cce4ec762aa1b5b480dc495f47dd13d88f678d8613ed266e1d8e1353811e3058c31aaa5ae9f181c34c6bcf40adf5ae9";
+  sha512.source = "0e35721d759fac3af82d3c627c5520ed60c36a83e50f10a717db990f2bcf5a3b22a0b28cce5f3926ec0a9859d5b08124efbe24ffe9a64f9ddd15f45f3246f596";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+ec = {
+  revision = 25033;
+  stripPrefix = 0;
+  sha512.run = "a967804b42bcc11e766d5b74de28c54d167625d2b108a34bc5e49351533ddcfe3334e4a7a34966f8d159bbde6a80f84b4d216553ce03fbcfb7a4b6267574538f";
+  sha512.doc = "bcf6617cf66af91312aea98f6c4a034f3af4ada14687414e7c3572e319fa4bd957dd25ebf557078297950d8ba8fd02229c5ad53464077feda462263b52536f29";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+ecc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0f91383595d8606d0a118f8111af0531e0c53fe383511b6424f7cbbf70ace9c4d94dd379813bfceafcea11f6be361bf7d8df2088fad98a42a5e5d31476581f11";
+  sha512.doc = "e3263aab5c8ac9985c579d4fba121085419d5c28e4813798402ad67213f96575dac0776d18918edaa18d42d458937a1e60ad666b2a01dea445675eea7e32b2c2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ecclesiastic = {
+  revision = 38172;
+  stripPrefix = 0;
+  sha512.run = "f2518f8f25bf4b7c7fd34ee5fc271d08c3262ca2d90e271e02db96ef4826bdee53565f004fddd89e886258716874b101e7fb63b46a6124ed13b67facded6ddcc";
+  sha512.doc = "35902f78af7c9acc42e23ae1d5c39ead5d92f0cf73f9c27b3f15d025555ed08502709638dec3788305fa776bb2924eb43e691c6e69424b23c21110de3160b60d";
+  sha512.source = "9661b16b8d3af5e205e99a7b8da8ce1913ac1ef495f3e02202ce7cbe1fe786692c64b4a82913190db42f922f33d939069cf423b55af53792808900ebbe728b8a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+ecgdraw = {
+  revision = 41617;
+  stripPrefix = 0;
+  sha512.run = "419650d8ad24b9e08523953596a79c318740b2dcb7fd18a7c7a17019fe17cc66439c0acf56a7a7f8176349df0d80b44640511269d498cfa19aba6fb1f353923f";
+  sha512.doc = "24968ada8568861eb973967b33827642e1201d002f73d40de5183a38d5f447a2fb93feb1db32807829c071d1a1147039e34ed4c287886260453b9c9737693986";
+  sha512.source = "27ea4e0f4d184883eb0515cc95b7b797ea215626fb5c4003fc02bb490b6f3edf1d9422a7f764df28372d9ded429dbe47645bdaa8fa57c4517ef438096ac68801";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+ecltree = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7461fe472dbd2ecb4e692cdbd58d5b801960d160bd7e18fa7d5ebe3e42defd11faba318d5d9134fd17275a4271f4c7761fa2d65fc1f202b4eb7b0fe3968a9fbc";
+  sha512.doc = "3dc607ff60f9e738476b1f5c801801e3dc10713d7f5dc4b790b92f454fec1e68e9abe8efa7e4b0464ed6ad854d7971e241987fd63d406ba9deec9c99f8bf229a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+eco = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "7bed893bb3f379d61dc874280ccc26db037511ea69faf37076f3cfbf01cf3d747706d40086eb99c502f215f026b2e357e44e8940a859559c3a5d9876bfd70c00";
+  sha512.doc = "3c2042779dd30c8ff0e8f09580b3173f3dd43659ff2ca94c52500f989a338a29799c22eb08c493dfa82496117d7fd7548f903f71fe488727acf4e517dc6c0377";
+  sha512.source = "355f1a47eddba5eedf9933d0a137045d9cb06e3918814754079e7dca0852d2fb10969f0c48a030ef9dad923e7131b6e77af8e1e8b2954b3d70409fad400ebe05";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.3";
+};
+ecobiblatex = {
+  revision = 39233;
+  stripPrefix = 0;
+  sha512.run = "bfa49fbd340223db68ae6d0906b617c06605a41aa141ce7863d5ab85b4da44eaba554b93bf163f7e4b7cd2c5131e22ba30161082663588ce85240fe2147433a5";
+  sha512.doc = "e12bf5be5028e848baf10fed969a5ea94e2246153b481fc1b8ab55a6fbb5c356391ec4ccdb37ae7c71d76885000d9d74e46271402ed83ed08d1d67a94cf372d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+econ-bst = {
+  revision = 68761;
+  stripPrefix = 0;
+  sha512.run = "e46ee69626bcf1fbb051d66572e1335496bf7981023540707cd267624798d4b4e75022cd85e0bfee05a227cb20b65c3b70053a4262b662269f905ee89569d2f8";
+  sha512.doc = "dfda5046d25922e563df6deb93a9d4402f75c883a8b449f70430c7ab7465e8d8cc392b585e5aead7fe499ed9143d5928bb556ad7ab4c563d54be11270cf8cdb7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2";
+};
+econlipsum = {
+  revision = 58390;
+  stripPrefix = 0;
+  sha512.run = "e3b007e83980cc9d7ef7fbc1f7cf067d757ba29c886d20f6c53d028236cc688fad23d7ad24cbfde19b6adb77a159b10f2bad617de009b2fa769aaba042a8ff01";
+  sha512.doc = "a540e4cb09c88d1614ea0dd46bc35396d9f11a39089dfc9d83c31587a2f72c0537f5d7fe3c8ba1a25559d8b7fa4dd75a577820eeb02386d50fe418b50c6fb8b9";
+  sha512.source = "bcbd36e3ee0ed9e941e34dece41fb4e927f5f826fccfda3612f4757d72b7485cd34e9569d867435eaddaa763b28199db765f9caec107b2e6954a3b9da8e44a37";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8.2";
+};
+econometrics = {
+  revision = 39396;
+  stripPrefix = 0;
+  sha512.run = "40c205421ca11111d2aeae9f84b4e418e6b4f260858805c03029753af03def61221b81eabc18dea5fd4cf5722e3dca1ff9f575264257db3a8431b061177530dd";
+  sha512.doc = "b5992f38536f0e4ec1c570d78523530b53e428d922517d0ad380ec76dcd2ee21243b9979e876a7f809b1581f4c4b6907bcd3f581dff97c13a0fea2a0fca1d790";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+economic = {
+  revision = 32639;
+  stripPrefix = 0;
+  sha512.run = "d8bad4a76eefc8729ea06e93a63adadfeed57de5694775bc44f1dfe03217101609ada6d12b7a2382b9d80d068f0c51fb2ef45c2cf289fe294efe23fcf0bd028a";
+  sha512.doc = "39c319f14ee3d6fb10fa3c4f5d3a873322d332bc181a33a70020a9fa787383b72809b3b9aea5fcf4a3cff9930543e0d0269f74146c12f2b0d77a4f77c159eeb7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ecothesis = {
+  revision = 48007;
+  stripPrefix = 0;
+  sha512.run = "bed57bb0ea79c74517b26e51d88966f9a05943c4df6464200ffe36f486e9cabccaef2fced0a231b40b40410ef32c44a3ebaa984e6def30bde5d426dc68e42309";
+  sha512.doc = "7e1e3716de1eb964142a85ab31e28fc807ca1433f964e44cc8a7103b9ed023457bcdb01af2797a5e22fcf75a2e851d9c534f17937fdc44e4ebb6b5a670c6c115";
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+ecv = {
+  revision = 24928;
+  stripPrefix = 0;
+  sha512.run = "0ff0a352516aa90a19eb1a0a9bdc651601edc63f03c5cce9face4bd45b359734d954e2b7859a0244015e3933eaa2d3803d5579ab9260dde51a0ec89db8034910";
+  sha512.doc = "1cb8871b552a3d91fb59c644ea98373742ba9bfea64a92911f67f2795afaf01babe82a691fb3344f236e42b92860b754d7e92132b266713948cd1a6af13c58d7";
+  sha512.source = "e17e9d577cb3a562a381c8ee8a09e7b3bbdd236812fd9e647b72fa18d6f7b11c9a44f70376d5dfdf2a3b81d1480b055d23e8889661b557e88c03f02eed033946";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.3";
+};
+eczar = {
+  revision = 57716;
+  stripPrefix = 0;
+  sha512.run = "47906067bd5e2bfe28e6451456e2187fc655986d4eacc89e9c3edf67bdffe7f54ef2c14029c9934db6c85acdacb006cd829255c2209d2d1dbcf57a98fde40e3c";
+  sha512.doc = "03fc47faa72ccbfbe696e68bc5f9c332eb7262cf1b3129c6b83fc5f5e2b5c3e0ba93b047dd9eb6d92c32e218d303896272d0c1d3d3dc7fd07b80757ced9f231f";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "0.1";
+};
+ed = {
+  revision = 25231;
+  stripPrefix = 0;
+  sha512.run = "a6999fbe2a9a44f961ef60d3da65ea306809d1ee5c39d2fc605982083d69c3c723a0e18f4042cbd441103421cb569008925279871ea8ceeb0af4c4a21b746943";
+  sha512.doc = "cd7bac245c14e969b5162b86cfc76e0673da357fb1492ba311930ea7e20a6db61e3a13be2069f4f589ab57cba9fdfb0fcc8779ec8607a624437d1b2bd746825b";
+  sha512.source = "7736dd9bef8c265437675d87a6b70bf0bb67ad736b668210b7187ddfde899b145050e18a9d54629b966cabc8b46028dc982b107c0f869e581669b663d3267ba7";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.8";
+};
+edfnotes = {
+  revision = 21540;
+  stripPrefix = 0;
+  sha512.run = "3ffca21a97b1e54045129a8894db25d677a54c791e3453f53285741bceff0eb4c7cc00e81706ef77ac475a0f54a7868f2e9b444df0c4e4ba6b161fdfa954dc07";
+  sha512.doc = "144e2e22c4ceb6ea46235ed51b9a1ad4b20aa524af7b6eff617194aaec4f1606d857a8575e95816b4ef089e5c7d3fc1e2fc8e622486bafe9e5a9ace22bb44105";
+  sha512.source = "9fb306c9b77f0988fcc2dde74336687e8678364e2d53167bff8053a5888de1cf51240778281a7c864a7b8a66738d2c894e7e4b7a88871f0f7ce0e40c61b706be";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6b";
+};
+edichokey = {
+  revision = 56223;
+  stripPrefix = 0;
+  sha512.run = "c598495449919a67650e7afcc10924cf93f4c29e1dd32305f0581910aaea288d43e6c8c1b91ae9d849b354e343538350ef0d6e78513998a9d2fc6023cd3cf941";
+  sha512.doc = "07a8689d20663340d5398a26cd548bbd53c5e6d5c7eac00e9e6478c780e397e765a8cca0e4b41a7b70f09130a1c7fac5326e5f2c46b95f40e11f0ba88b1b3039";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.01y";
+};
+edmac = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "12395b2429372cbf88794c197e28ceab4b69ca7d14cf78524e9538491b2ca8d14714e1ef00f2643a0e3e62db559f12a9a53a56d4bc7f54420d3f125727fca557";
+  sha512.doc = "d78db33bf2b2fdd17f23eae23ab9605efb29a217e52d89df5feb64db1907c1b5a497441eeb1fe2373342b7c9b09296c06efa24d6776edce84406e22a1967bb64";
+  sha512.source = "995092e2ea0776377938076b67f25042329ab76ef31f83f6f40aba449a735a90bc697be52f16fa6a2ac02cbe4ff2ef99762fdc03bd14eebff7a363f6c7f46c13";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "3.17";
+};
+edmargin = {
+  revision = 27599;
+  stripPrefix = 0;
+  sha512.run = "242e7eff25ffb539353b73c18d31a268efaebe4fb51d9ba1cf376346e559ea2fb380743b29056aeb8e4db2065a660bf59e7c8dcf5469f91c39135be2b8c9527c";
+  sha512.doc = "da77df03b3eb89daa0a544d61c88956a7105073110dd9e1f4d1a753805bdf722a63f5a9674897f4f09a92f689d6bbafc190c870cf5784e02df7efed781dbbcee";
+  sha512.source = "6f3b848e12b92f773ed23f51bcfcd52fbb8209906b937486c87ee34cbe29d40739cb6c20799ce64bfbe7b0e3dfb96d604aaccd005ecc1dbb7126bf5302d3c814";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+eemeir = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "81679a08a320275221058cf0a73d71489621bfa4322a4b90759f67253df06e5c98c1325846966924c145092d9f63d9ba51544d0640c7f0827c7ebc42fddf9f3a";
+  sha512.doc = "4f7a67d76504c4fa8de1f7f4e5db19c1ed1509a3ee68d93811c84e3ca523b8ff040d61e14881ccf75d20edc7c6b52550b3b3fdfa58a9a73bf21ec7f8b0b719aa";
+  sha512.source = "a75e1bc385293e5e418af04a1c03ab606c5c77fa95bc6830a029e53e4298edd853c0bdb92ec0b97994fb8d2b7af293c3ef60f3d14974b87e079f15f904436d4b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1b";
+};
+eepic = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "37930ecdebd43ac8ac1dcb42da4d4eb4b5ff371605b9bfe4675ea861f4edff7cb19703669c8356c3d69e7ccc09789bc536714114397c3bca74fcb4a22b6f4d9b";
+  sha512.doc = "02efd8775f6d0db35fa4682c6bc715fe619037a6531de60a2955fbd7fca01d97a8e6dee0109a8cd7cc8237bd694c64797392991e5c203baab49dd9857b0ccb4c";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.1e";
+};
+efbox = {
+  revision = 33236;
+  stripPrefix = 0;
+  sha512.run = "5091324e7f5c05385296d570027a8546db4220a24da330ab85ef5d1185772f51b4f200f63eaad0cfa3eaeafd3d055509f4ffbdf798c1139a60c5e572ea46926e";
+  sha512.doc = "394387e09ecb0d497014a62fc1caedcb3e00148f6e0a9a16ae1b53efbb4d5cf749e154e4c905d197280e4ecd9bc88ea07ab7e0c004b8c30eadbe7f9f414c1345";
+  sha512.source = "4739cf6bbe23b69605079bdd8c39eddd6b44e192c5c335001c9612598f2a005e98b853bc02ff67996b63a971b200996f35de2331f230d9c43ed73ad9a8a98a7a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+egameps = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b8d1c056783c4a71484a00f0d80de4eb9de3beaa54cc4dc71e5a7c171871b5dacba753ad03ab196661b1bd73cf9d2eaf202a813b73bea405f807319a143644cb";
+  sha512.doc = "0216a85d539ab19aef8c2c4f313f5095aa39e4955ae9610c14d0243081b7af98f50a74a2f7720b376493e660a5486f83e69b41f8cb8017ff66a8e706eb9ca71b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+egpeirce = {
+  revision = 66924;
+  stripPrefix = 0;
+  sha512.run = "fb91855cd9264b72df852d4adc5d369b26efc5305c032120013d6cb18e99a94c8123cc7c9a4cad86ef3144609f0a34f3645597c91aabaf165a51b903b24c9d11";
+  sha512.doc = "c78830f07e8e3caf99f51b53783112fbc7b6ada78ecc284a53e90c532331ce9e4430540e5cffed679b447b9e23cd5bb25c4d437d07a127e65e142322cabd65fa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+egplot = {
+  revision = 20617;
+  stripPrefix = 0;
+  sha512.run = "c96cc3185c09f66fc6a4c19958b88d178cf0b6ea9d889938df5a07d4fb7b19962a9c17ebe0a906ab19a8725808aa09ee41b39a0379fefbf8816a5e78abf9201f";
+  sha512.doc = "e6e55708004cdf3dfd753071e2fc242428a6636944f3ea65510d2e9f8e2921b869ff4a22d100b43d70ba0708a5b19f002bbe21f57c858ec72b11ffe82e161e50";
+  sha512.source = "45c810de39612dcd60d71b4acc8aa9a7c2c22c1eab8e1ca1628ced9873c86b0ff31035ec5f72d89decf91ba552c4e3473249138f557bd650b9863c5385502436";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.02a";
+};
+ehhline = {
+  revision = 54676;
+  stripPrefix = 0;
+  sha512.run = "759e123a2418acd7239c4b897e64c146ffb84cc1646d331acc5ca498f707b916c1392f3fb9b97d2916d745e9afcf9c630a5a94e413ecd0c17fc2a8b13f773d3b";
+  sha512.doc = "79db947da1c51811e834999889c3d089e2c5077d2d21fe133f6879a87afae4e2c7fcf1f07981ef9335a6b7234f083e74e21364be3526448ebdeda6ba75815fac";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+eiad = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3123d601a5f5c34c45bff20eb052a0934a2bba9d693e460fdb84908ed327eff8b3a022a5c617c8818bd48b1fe72b9b0c48443e0cb290f15e94334152f1f5e5cc";
+  sha512.doc = "546bbad79f9f13e420b05b318010f078ea8844a02cedf11faa506d41073e2e0668356291a4e12758e5a37586e4aa9c79c17c8135f244756c39b61076038fb8e6";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+eiad-ltx = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e052333d39e72562e8e84d0e7f6af7066c2068a782422f612a26bd2903d8143874cd4dcc556d7406f3601a6b3a28506a3c0edc92e4029d124f02fe91edf0163c";
+  sha512.doc = "907a20283eb78965dc4d8fdb46c542937c70c7a3f2849984034f9f37872d4d3042064fad0ee232132aadcb7daa4d4ec4b9745f8a6d0406dfa7b929ea68be0d96";
+  sha512.source = "dcdb63542954048aa74a1a412cef02c16706bb7f66870e72ab4c772e2e41048c255bd02877fc60ffdef15b09e229ba721054cfbcbea5ce16fdaa181ca0bc8283";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+eijkhout = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "448f3b51c984a1ec81428c1840ba01d072cef4d1110b85f8d4f4d786d02e8d08e702e0b33e757035aecef1f43b604746c7b6f492905fbb201fc1a34ca6fb859e";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+einfart = {
+  revision = 68376;
+  stripPrefix = 0;
+  deps = [
+    "minimalist"
+  ];
+  sha512.run = "bdd96c338f02a27d430db81f665dba86c112266577b2b62c0009637324b5560dcc48b30c3f88a45217ba8a094c342b8ccebce54941c61eb0d28c37e966d9e861";
+  sha512.doc = "8727d905963cfb0955216f8d42c7a27404db7ea188e008f654e130359fbde9b33adedd0e9c723ff4fbca49e2ffbae3f457aae3e5864715223c80ac55ab19bca9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ejpecp = {
+  revision = 60950;
+  stripPrefix = 0;
+  sha512.run = "160b09a6c0abc694831cdbcb17c8fdd2feddeb27c82c06d70e31a5991c8488864cfc99b7e5768fe745a09ba811a5cc0c108428c6c7f3dbf3d8da7455074bffe7";
+  sha512.doc = "206012655184167bc27c73f4fb3b4cd14e6a85dc2c3faea1eaf98d74c89a8e34765aa1f6c47c6a9aa1bf862c98b1273d19e33ebdf099ecbce674b6f7aa39e7e8";
+  sha512.source = "01f26bcc15dc2e3b926524e6e0f1dd9739f7c5333bd947d5a1c83bd285e34e3c997c68acb6b33993a281f0dc81d751a9b8eaaf17753531553c6a366b6b60d635";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.11.3";
+};
+ekaia = {
+  revision = 49594;
+  stripPrefix = 0;
+  sha512.run = "97479cb146f37e0fd80fbcf67db44a474d96da9897fb058073b75bbd9a109f16dfa36bdd97c5fed5397255cf0320028ca687955fb40e069bdfa262af50773c99";
+  sha512.doc = "f95512969ca475b87f09fa3b61e2be1ebf949161b7209721579f7ec1399e6873186535ec30dbee092fd69dc427a199daa4f94ee47cc08a0fc37fbac6213429de";
+  sha512.source = "f39b1a8a90bfe899fe914b6a4e99e08334ecf01ca54bbd6275ab9edfefc12f7f165eeca09b6195532ff92d72e4aeba63e94be7afe00d8215a86dca3695d523c7";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.06";
+};
+ekdosis = {
+  revision = 61113;
+  stripPrefix = 0;
+  sha512.run = "6fbc9c1cfbeffa9d950a3a10e0d39286985876b02efb48bd90a5853b006642c9e7042b0a660fbcd4f0a3d7438e0d647a827338bf283326162ca75ef316e53d5b";
+  sha512.doc = "bf829e9636940ec6dd9371f12457c306f5af3cde562ea863de3f0f3efa44f8d5c4286f7373927ccb0913c7e2a0bab70b57e03a47081626674c7b4b407784329b";
+  sha512.source = "2f24f73fcee8f34ed6efa401939b6bf96e7de6f0e24bcb2352626fd293ad533d249c8a0618a9f1eb3413feca9bc9a26cdf852bb6c69fc49987488739dfb17698";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "fdl13Only" ];
+  version = "1.4";
+};
+ektype-tanka = {
+  revision = 63255;
+  stripPrefix = 0;
+  sha512.run = "7bef493207c3de9580b8daf3af8cde6e5ae616cc94334b3d8b3de8c117262c0002ae73740df4fbf3f30df913cfcd7c5c51d8c9659c83d6ec060bd54ae3c96368";
+  sha512.doc = "ebb43cd9951d120bf664ab177c70ab2f912e9ff0080cd42fdf1ba695ae13f766d75cafe77794fe69b626895b89956801a527a7ebdb2f87fb48d263f2c3e6ecca";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+elbioimp = {
+  revision = 21758;
+  stripPrefix = 0;
+  sha512.run = "4db2b191fdb73854bfe605efed30c4835a77180fc865eaf201f8405fccaf880e02ac9ef7802c2d215df8ad77d01fff611114c391a6c43190f95dc2b40cabd596";
+  sha512.doc = "5097310e0e400c269a30ef8ea26f400ac7768f4a790ca5b79222c0480553434343de7b0976b18bb6d67bc89dc2b2ad2251c24e94e4747450275fd52a8c9d3285";
+  sha512.source = "00fb96c43b0639f88b582bb26b6306d1ff112e9277c34f6a623d7643ac7a003b31a14b5a82b3b03680298e5c054c137f44a186804a90127ebba14442d5c71d6b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+electrum = {
+  revision = 19705;
+  stripPrefix = 0;
+  sha512.run = "c12af3a1e6a76d4a94f0d02fa5802179fd1f47e31be29e2151e7be3f569f027137c9d0268c86696d822b8d7a4c88ae2ef264341345c6a7421a8ec1026c104213";
+  sha512.doc = "b840b153a134fd9cd923aa9f70576b7e586bca87d7f1b9cfbf7a1f25ac4972905989876545a914ce845096dd32579901ece93851012d057114c0c61b1eceffa4";
+  sha512.source = "caec0c43c2870a6640863bc060e02c764b235336123777181ae1fab42e32053af0e2c09c226dccbf8bc31b450c720b69ae67f01b66b36d0ba308282637afb414";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.005-b";
+};
+eledform = {
+  revision = 38114;
+  stripPrefix = 0;
+  sha512.run = "4103aa370bc8314433b5cc9242390340467591bc38e2f5b820f9d35a1951bb9fe9e384b1d3c64a0434b3c3dc87c42463a0af5d9ff872180bc2b7a08d4b40c080";
+  sha512.doc = "c59cfa6957a21c5e74d9a15b7621536170137447111f9a88295e79aa7a29dcbb3d1f1f1367afd7243d2506b864a53df41b0e10419592a5e4e12af8e1e90216d4";
+  sha512.source = "3bf4fe6df4cb16c8ab7a3fc366754321c5a1056cbdd51a787da33d212c39ffa0bc73d394944b7b2cfe52b4f41abe0e3df7156571d3acc1d1c3ccd4d467798430";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+eledmac = {
+  revision = 45418;
+  stripPrefix = 0;
+  sha512.run = "644df002adf2f39acd9a6704a5c2e18e02f30d17c8e04173fb0f68e9daf5469bb6290c7e98ca181ebd45b40d54dbdf4a14fbbbe7dbe8f945b226ee086efc3972";
+  sha512.doc = "14c8b024b6cc817a025b6a4870d3edcf956ac9e358107c80d29fcab41f343efba5b5832dc22cd11fe2e92bc74b58fc5d67982ab26a60230a5b92af4223543e04";
+  sha512.source = "8d3436d3e3cf377148a52ea77ac93491abc66bfb1271538aa85f6cebc559ca225221b4b7dfaaf33426505b792ca57697d6edf5903b5d0e306434a4c32e06e8bb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.24.12";
+};
+elements = {
+  revision = 61792;
+  stripPrefix = 0;
+  sha512.run = "576b318c0972e8862b8d4cb9c248a3303125019a321b2f5efcc0b6d6c7dbc5cee4a1db725af49754360633d654447d83a58dfc7e25c13e91e034e73ccd5765cc";
+  sha512.doc = "6adb7fd993275022e49bda34889a21ce000ff7c247d6c3747494bd67adbfc1776f4c2e8d9affd57dbe659740cd9a5646bd34ab87975d306e8568a27899555e9e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+ellipse = {
+  revision = 39025;
+  stripPrefix = 0;
+  sha512.run = "edcbca8843239eae7bd927d9bc6b5095d1b9a4d8db213e22c77ab4a7c5bf7a09781aa225af26f1e4127f263d5322c8138cf38ad1a7b19688468ba2ba56f840f9";
+  sha512.doc = "722d50daf9863145c81ad2b97d6acf6b6229d65f868985878651b506b00f52c4a556b888ed848ac1194c4a68e793bc498b2b6b09132c8070b61b103e6ca9137a";
+  sha512.source = "29736aeb1a6d64d0e94124e6c67246650f517fefc9761f58e70e1438c8380a25ce48d2deb180683da02f77ebb508302b3e446b534b7e56ba257e61ac6f5fd62f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+ellipsis = {
+  revision = 55418;
+  stripPrefix = 0;
+  sha512.run = "009bc55dac8eab88e27124317acbf9f3101959cefa4419b507ab74f49453f72f272db2b4826424f3d8c76efb50163c11d6eed63e1219cae2a2632bb629fba96a";
+  sha512.doc = "7d0b4c51008203729df1bd50d2c2a2568f2426b7284f0d58eae4720a032e4ab469a5db6cf5656e57ceb0cc9062a7bfe1f3cfe20c51a3d08c85d55c110ce7ddcb";
+  sha512.source = "65b536bdd6d5b429e2f1832b3d466bfe055be6074b43b60305b79ae9ea09172e3e7e82bf7cf3b4dfbf73507135ec4caa3d713c5cfe060fbc925ba7d2a8c09dea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8";
+};
+elmath = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "66e11b5d5166fc6399337183dea142ecd045050176384e71993c76aeacf57c693495b5153887a95051a902167a8444c24ba6fe2ab2fcfc699abfd41ffaa96b18";
+  sha512.doc = "3454096f8ddd220820709a83f4b5b741e80213bada631f5fd78292ff77f3a1963a487b07bb6c227451568c594c5bcaec9c1fe9724345a35478a68191305d5a97";
+  sha512.source = "0ff2b6fd17db3dbae757d4e015007ac99628f0d1940e584643f9df2247279cbfe3ebb81e057884a38ab167aa18b60a8db5eb7b88e777653ec68675205ca0fcc6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+elocalloc = {
+  revision = 42712;
+  stripPrefix = 0;
+  sha512.run = "7bd72984c7bc1530e2659364b5e93b643db1accc8a034f6fe8333e26ecc12b8dca9cf40ada0b5986576e266e0eb7c801f9a3e4c2cb7dbe4d8c373ba0f0486ba9";
+  sha512.doc = "6b2d6f65683912405cc97b81a7cef07b4eb21be4304a12b5e0e11087d809d32023ea8067a81c01d45851943af2efc4eb4018f3a0e7a39e08bdc821f87264d9cc";
+  sha512.source = "c1dfe4848af6e1cdb57496b8f42f5f1744494857648ca1db92a770f9983d0ec7a4c3398a3a7b7d473204da475ffd0e33ea10606201edcd86f9cda3bf5bdf24f4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03";
+};
+elpres = {
+  revision = 60209;
+  stripPrefix = 0;
+  sha512.run = "6470db4f68936b14fe514828455d7fd96ff9393990982b805e5ba08e2281aa0a98c46551297dde6243e4ee3c5894d87d6fc48fe843177f9dafae102afab4aeb9";
+  sha512.doc = "0c3a7e151414e8ecc2ddcfedf55571db3d09e3a3cdf58d42b3cfefc82e160ac2487b6001d6da152b7a7f192a21c2e54b1593c01c7376c359a342f7e5410d16eb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+els-cas-templates = {
+  revision = 62931;
+  stripPrefix = 0;
+  sha512.run = "ecb340e796a94aab2e26abeb7d4d72ba5d68adcb15a0d99d3511236b8be5f8ab21d8d32995b1dcf1b0a3ea15eb321df75bbc016c52630b06498b75e9e5f164f8";
+  sha512.doc = "b616f6a170484f75dea1134f0570133b63ba40fd1bd474e13ae3e46249224b8ee7a777d0d18e11e828d0e5e59c2635acfecea99537060a7cea03fc2761dca892";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.3";
+};
+elsarticle = {
+  revision = 56999;
+  stripPrefix = 0;
+  sha512.run = "5a0a7c98a8e255e55468f9b01a43c33d757a38faa1b3130b1c3613648dfcbd0fbedfc69db99727c4406ddc0601249b2d021c680f83edd34bc3d64dcd4a7af64a";
+  sha512.doc = "47fe52924e95cb8267d0f65ee6962fd56fdc4ce00ccdf49533ff7af0916a962bd8c045b31f2159d7c70d8a041f7c20aafc73b23a8982572d456223afbb85e718";
+  sha512.source = "5887604f9a6ed0077bbbb2498f6ba7c1a3c8a74485688d40a6fb0e9e9765035d22e928b104876a19e42775fb766502ef71446e659f6d75a519e2b84ffdd2a01c";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "3.3";
+};
+elteiktdk = {
+  revision = 66821;
+  stripPrefix = 0;
+  sha512.run = "01ad0912bd93cb849013665046de7ec3773d90860b92c98201a7b075799cf6adcaad6f820abe95520e848f088c85b71afa78e49067da8a1abdea093de4476935";
+  sha512.doc = "5d0fef08a196fd796fcd3ea74f5385b83b361c8e7f1bc2bb4a5f663a5d5a86820b7bea137790a973152e5f475008423ddc55f18613da3bc48be211bb79e3dc9a";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.0";
+};
+elteikthesis = {
+  revision = 66820;
+  stripPrefix = 0;
+  sha512.run = "e533636f732fead1525c3264f96f69e19074728955772c92c381dedc42e0ed5b14bbdccfe5f9663a8a54a530f52d0c8e2fea556778751214cd626372004872cf";
+  sha512.doc = "a3f8102e22a12d0a970e881d3937cde9a4f71550132067ef844fd72e35c6210dd6feef56d236837a2183fa5d749287dc3c4db4cad00dd4c09cbe47fd431a7571";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.3.1";
+};
+eltex = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6de1507df2fe408081aad0f75b69d7c21807f238d37e3c6d9cd243b741ae1761aced90e948a0c570f28db5a39616954412fc77a87482c890183f039923915c05";
+  sha512.doc = "1bdd0f64c524def46dd0a20482b9ad6925b0d06ea272b05d6163a23f61ad1727b099a893f5af7a7de4140bd264b1d3503794a4c9c11cf8137c5c6070d08fe0e3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+elvish = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ca1496b488a85a32364b264706c9b4e4edde5c92681493b150942a3a8a2a32158b314a163ff4be8afbea489a75feb5dbb1c96e8e70f730530cce6472f9e46912";
+  sha512.doc = "e296ece5bb11d273b33e801ecddb1b9bb93e5f8cfc4a7d62b1555ddca89661557149935b7c5a71880efb888364989715b4e39585b2de1bcd8ecc24203afef199";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+elzcards = {
+  revision = 51894;
+  stripPrefix = 0;
+  sha512.run = "436449b4e8d6368fee200dd810b05db570d27846a56a5159422e7af74348f08e6f2f4c45cdc1aaf21d31cf0ac6e8552cc7f0968c2178ad4e65163294d771e027";
+  sha512.doc = "c24119acc3aebfc676641b17a0db75edc30dab7eb3aa766e35291463ee6049c9570ebe05d456e0bc0fff3765bee514332cde7b80e7d1479ed440c621143b7457";
+  sha512.source = "59f09337eeafa9b2ec6ff7bbfcd1d04535fe7d3defb942f858ef57a8007422358a68a72894ed120c3792da7c0f397d1a50dc093cc1dd2058d598649ab905d354";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.60";
+};
+emarks = {
+  revision = 24504;
+  stripPrefix = 0;
+  sha512.run = "8e5f2d559958083abbde5efe9e70b3cb3dc71cdddd3066ac305c310fd5a8b2652bc6b5ce66531963c5a5f9426ccfed7eee0700938ed6a515865ac8e1718de5aa";
+  sha512.doc = "4deafa2295612c7428b82a4c8c2c19811f91c2d456b430b6ab59014b3cdb42a86a84e67319745dea469ae40f89b36d104d30db28228c825ba0d86436a37cc7df";
+  sha512.source = "d7ded6022917a50689905c953808e9f4a43d03811bda490721480f823c4ffd36d15948e5693d73cb061a97f775e6590cd376ec20e0093af3af5b792d7d67e2c5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+embedall = {
+  revision = 51177;
+  stripPrefix = 0;
+  sha512.run = "c531feeb7557cfca45127d9c37c93bf5835e35efa7c8aab65d58594c30d6864deaa22b64ba90cebcb1e9dcb139b00ad64ff96238835b8e059169278fb602ff2a";
+  sha512.doc = "be228eb577bb2a59b93c7684bc1fd47e9a4a505f6c66eabf434ad29523f978c877608fe76cd6ee24c8942889710270b8f304170f445e2a1408303d7c5a8a52b7";
+  sha512.source = "f1d3527809502aafa0a0b9aafd02d25fdbb97ab795cf4306a4ac84dccb873111e580390eb0499dfe13ef3f0bd7ea1a61e90220688dc814de7ff21ab4ccdbb1c2";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.0";
+};
+embedfile = {
+  revision = 65528;
+  stripPrefix = 0;
+  sha512.run = "5fe36b7666c58f676b48fde16ca5f07296dfd2f6d28cb8861ae3d341020552a509dd79695afa73fe20c6a5e6e87d3557f89f66902e8f02f39665efd9fac8120f";
+  sha512.doc = "bb2e63963298b2c3a35c71b83eecd6464c7e4841e1098177ee78e56d15e072a88e6c58964e9292d70d495cce513b46d7b542d30574a41f4d0643df1f3b6842fd";
+  sha512.source = "6a8c7c8ccdaa01f7e36ba6fad9e1d1f3873e77523d4c8b6b1de222292515016ee9aba5df53846d1367e2d5be90f7c912eb4828c4145575e38cb940db65e62e9e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.12";
+};
+embrac = {
+  revision = 57814;
+  stripPrefix = 0;
+  sha512.run = "930b42ef834a50dab0889598e1cdc531a610c9a5a8cffa31f7bea5f3c55d947db59453f71e061c8d055da53fb50fe20c17341e47c2fe5bb35a604ceac71922d9";
+  sha512.doc = "f56db972f586aab767cf7300a3fa34a62564a67ede77ab8f8b6fa03ecf07680692eb0023cd3ed99656235c5afe80b672a4b3e50ec8f0ef95c9744a48ee99c399";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9a";
+};
+emf = {
+  revision = 42023;
+  stripPrefix = 0;
+  sha512.run = "bc1b601aa523b30a54493ac92e15bcdb918775e9f57514b62357b85b5919fb05cc945b3120cea474fab714585fe2a81603f43eae51bb266e8989af6105ebc65c";
+  sha512.doc = "f2e37967476ed678dce7c01f195ec03f77327d59beb2b15cc6a64ef92cc377700a2b7b528ae6c42497cde0ac127cd10c51e3ecf5fda0cf7954d598a0dc92b5df";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1";
+};
+emisa = {
+  revision = 60068;
+  stripPrefix = 0;
+  sha512.run = "dbe700eed5cb82ed687a5650fb58f07cd588d7a759ef67f0b015a795a732ec1b2d3019f637ecfe39fa240c93816c41084c5448d107371d209d40ce122fbda821";
+  sha512.doc = "48529f12758cc7874b45ff5fd418641b322ac33541aee2665ee309a6b0bee8362c97fc2e31870fb34430d60343cae433f5a2793dc785c5a88d4f2e5518317433";
+  sha512.source = "98437def2e985e2186bdee4f1ba1200807c1c1dc9882b41e60acf620907933417c774dc217c67e86a667fa84ca66ddb07f9132c7e3e8a105638097bc66b7d940";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3.0";
+};
+emo = {
+  revision = 66944;
+  stripPrefix = 0;
+  sha512.run = "633c92dde16b5170d5ea27fbb5e72e865300abf27054cd167652ebe598b90a8788d129c950e5a230f75201648b25aaacfb6b47aa44e994d05549c31a82600da5";
+  sha512.doc = "e60b38c75c23bb4ec5d453d76fd2c815abe712d1c602eac6897eb1ec9b51f1d6a964fd5aae5c7ecf17956eb9d39104708e887b0efab0830b72b9ad37c8c79af2";
+  sha512.source = "79cdc96d441c82b4f59b6f2bec0fb82b047d1b9540b0f29946c2d41f355118e3a9cdad2da2463ea4c9a0e26ca832a98db5b88f4445baf6ac41abff8b443ad1d5";
+  hasRunfiles = true;
+  license = [ "lppl13c" "asl20" "free" "ofl" ];
+  version = "0.4";
+};
+emoji = {
+  revision = 59961;
+  stripPrefix = 0;
+  sha512.run = "5c87970b1d47489027ef1a13bd35958b54c7c8b7bb59f7a97a5293d2156e3acfbef13c3a83b5eac3ce8297aa01b25423add40d3d0e654b5e0007f34556449e5a";
+  sha512.doc = "170a8e35c4f4c86751db4d357df39dbc215126465e784829cbd15e9226d04b92aca0d7836312c114d1c699daa5054883f364377d1f355f97024b63741aeede0a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.2";
+};
+emojicite = {
+  revision = 55131;
+  stripPrefix = 0;
+  sha512.run = "351fd8292800ce22d821351a6f69afadc87a24e4077dafd7a83b5f70b3f700c44764f2434255fde29532007faf952cb39d97f642a0b91c1cecc3b58d85753ab5";
+  sha512.doc = "642c3656e3f6e89deab561df4253bcac0f98f1b65537ba3c78079ebc4d3a9336ce40fe8abb1955583e404b3945d76fcbca19845dbde7bd7c8f4db0a6209d80bf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+emp = {
+  revision = 23483;
+  stripPrefix = 0;
+  sha512.run = "5028360a2b412232b06b0bc53352c7a0a379943c14781b49b45cb75aef044df5bda24449dbf13601d1a574e5349bd0f2d2f7b7969f10bf72b3aeebe9e81b6ecb";
+  sha512.doc = "480edb224fcb42457c6252d4b6fd8cf42796e9b2ac72aa8d4bb22b3840cb10a55a509a47b8c504efbdba3e28192acee367e99638dfdbf9cab4fc5628496cd5db";
+  sha512.source = "e80aeb8566f31c3582423abc2794cd468b2a7b3505d4d01cbcf261201e4e8a95ca6ed87c6deffa03c9f868762fbe8b2078bf8327172ee9a172605fa0e6e72c40";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+emptypage = {
+  revision = 18064;
+  stripPrefix = 0;
+  sha512.run = "6379cbd0983ca7b58d2c94ce02a76e054faab1afb2942227469dcf2c4d572d9946921b6d24e9c7d2b5a82cc45e7e380a8ffae671f165ad0e2a3a611b95841352";
+  sha512.doc = "11681a155df95f913c3d25cceb32b54ace35bfa5aa7541916c15473b951b02a7417380dfa5c30f5dc3de1259d6cad99859c31bad4c2f2056ffb4608c614a2e14";
+  sha512.source = "1bdfdd32ed844651a109b54c65e7297222cb065a122269bd5c10cf77c6ae0e38b717fe182dad6bd0432b5eafb38b3d8631218599a46bb61a598eef4093a8ce1c";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.2";
+};
+emulateapj = {
+  revision = 28469;
+  stripPrefix = 0;
+  sha512.run = "12b73ef4234af72358c1f120d860b7ba823bb4d65f91cba348a4a136b57f8edccf3849eb36e95c50cc40445a5fe3908652c221b938ee34a17aed6b4cb265744e";
+  sha512.doc = "2d226b60313de3387d87c373a23e490a66c2fe1a94e97ef2364e65fafb037a148db7f5162ab9d3f1d788a037fdebe02ddedaa772eb715dc1ec8fea941b0e6708";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+enctex = {
+  revision = 34957;
+  stripPrefix = 0;
+  sha512.run = "e6dc0988bd10dcefd63db2a57999637b63187d8a234c46dcb148e9dfe8388800e61237d7b58d271b735d2658d40c1f81016b5018e239d556fb9615d35b4129a0";
+  sha512.doc = "2bf47c879c6ed0fc539763c899d8db261135f1a0ef0052904d03a72663cff38d40d2fe7b0daacaf2d54771c7b9eb5e98b73ef71d2a733899d458803f8caee723";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+encxvlna = {
+  revision = 34087;
+  stripPrefix = 0;
+  sha512.run = "f6aa0a954affda9152f5b15958ea453e3c2979205f25a5d9f15e3fb189b2352a87256a345d382a3c7dc401eeb55360afa9cf942cc4779406b97cc8f8c47eba81";
+  sha512.doc = "01f44c8205daf33006eaa73061d27c9e17ce5b456e73f427f797023cf94d7380e44180c347021cc5c17870550fc7e626bab8de6219d6b56000526aa54ba34efe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+endfloat = {
+  revision = 57090;
+  stripPrefix = 0;
+  sha512.run = "9c3820ddd36934dcfd049ab766ed037119459d02e9c049401b910b1c14ae2aed93d94110db66f0cdd2149451e152b5bcac14866c7844ba4a47f8c0a27756f733";
+  sha512.doc = "0004d60fe959415670b5173bbab6d37733ed82b537d714c7357dae85ff8f7204e316c48d2651b1b53cc9b6ad0206a47c9cde1acdeb6aae676a25e50f363238c2";
+  sha512.source = "bc5150716b23d3aa1e3a66e29fca3e8f9703199feb05b4bf76834e79654c39b0f6790ef1f0c193abeb0acfd0b2717076d4e2c89069221e1bc45716e0de314e85";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.7";
+};
+endheads = {
+  revision = 43750;
+  stripPrefix = 0;
+  sha512.run = "55f01774d62616b81fc846af275067445c8979d50cbb67c8f6cdc362a26999c83c9ce5428af28170ab9e4c6262fc4ed8bd0431c5aee8aafa89e38bf4cdc30989";
+  sha512.doc = "bbed9408161f827ebe39ae2161e89f1f15d8327f29f7eb18bf58f3cac7c58492529caf05ebe3111891520c406c547b2f1aa57d2927c5f857ea6e02ecfa9cf84b";
+  sha512.source = "c58d68a17da865391ce4480dc02f3375ee6d311a2590f8505885c3ce7fed65b2e7d6c6dd5838f55f4fe3d7192b56217b7146646269938a3a10cdefd3c55bd0c2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+endiagram = {
+  revision = 34486;
+  stripPrefix = 0;
+  sha512.run = "50cda29c5f045e45e0421efe11128b11be1206b4ea3b183d401562a9c8afe214031c993f885bfca67f81e8b4827e024a0aeb1d95e5a8a03426f72f414cfd17fe";
+  sha512.doc = "0807629080916e9ca7451fd1975da985ac786326914521c21155c337acbf48888620e3bac03b00fbbf45bbb47740faaa40d1db768a296e4a6b1cf6c6671357ca";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1d";
+};
+endnotes = {
+  revision = 53319;
+  stripPrefix = 0;
+  sha512.run = "3b4d5b55dd1ef844b96d30c7d40d5ea56ea3082a9e6740e3bffb837b864823a2c5545a13fa79eb49f79b47ee86aaa28e15c64f676bd27e4987aaaaca76bb2f31";
+  sha512.doc = "e4de81d6cf0d7bc686d84420dff1e390ad18747ebc9381c6df006f871f9d5e000aae5cd43a3648dfdab2806da83efc6b375ceb4a9110137ed6b373538a7a8b57";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+endnotes-hy = {
+  revision = 54758;
+  stripPrefix = 0;
+  sha512.run = "abd177ac968efce6749d8bb80c327bd8c3617e14045d124e036f2e503eed7bc33c72112d46acebe84d8a0a2f25cf3d99fd02a514d3673f38ada9e7fef879e3f5";
+  sha512.doc = "46b7ea667c12de23f0491af714e5b86fb7fdbef0e3c03d7c31e242dc715745824be08028861c0e72244695aee8bcb0ce2191746c8d1f906523dcbe6b39958281";
+  sha512.source = "6771356602da1fef77f350eb8390abcda0f1267c0761bf255f4aedeca79fadf1c0255bb267b456469c1d8dffb1ff052e567d0bb6b07035c1f5d676d5ae2d4cdc";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+endnotesj = {
+  revision = 47703;
+  stripPrefix = 0;
+  sha512.run = "acc3ecb055add319d5cbfc4e542c1be490c00187153990dd42d5b9a23adfd19795bebe4648129bc1cd8aa8cc243111602b287183803db8b5962b23b6c60487e3";
+  sha512.doc = "71e52552f4a432b8743e448142fdc8e49b9e1ff1d290b6d20731c083f62bb5be823db76720fcfa40cbb8bf75968b80875926aea8a7f67808555fdec160de1911";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "3.0";
+};
+endofproofwd = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "a4b62882d4111a916588298415546fd402abf15ad89177fc2f57b983ef4060b49c7f73677add54c683e0ac8d40b91280453f8a239bb9da5e262cca20d12562d7";
+  sha512.doc = "5953acfac90a34bb2c57cd813d220279fb96fa74415f0d7677ed7b7a8839b858f64b3c96d1dfd2dce5a8704e76ffc7eda1e5aa337585f6715ae229a759148ec3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+engpron = {
+  revision = 16558;
+  stripPrefix = 0;
+  sha512.run = "e525f8d2ad25b93566c101edd29a70d49d9f65f591e15bf3457671aaf748da1afac5d483389eada870cefc9e144010e16c561d0561d97ecb3ae240e21b5c5b39";
+  sha512.doc = "dfa3ba98bddd11db47f308c988735967d1ec92c688081bad0deba88c29bd01c976bd1180342b890489f3026c964520ec1fa399fdb52f484c24285e3540a12859";
+  sha512.source = "b47f186eb08ee68b769d61954b705fb5e0575f9af90968569a1928a6b97bbe5bbbd8b65dbd2f946a40ebc7dc1fc676a03effd7cc51924356531ce18fcc3c8dee";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2";
+};
+engrec = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3856199a11043eb42062122d99f11a64791113ebee137b588b69eab7ba79d721349c2268440a4b801b0e7bc293fc99011fb9a70a732a03a5656cc6302cbd0054";
+  sha512.doc = "f5402766dee90ec0cd2aad59db562a7314805072d4247e5930e59f5aebda9c1b87c4b6935028ec960bca4eb27a1bb1c7ff31b2a671ae0338e1058e24323d4cec";
+  sha512.source = "ff2e4447135db1164447ed8502f45e9dc647cc3b8c9329fe21d3a279b40c2da0923fa78be44ef52d4d9a4781945976714140bd2837268d0537cd6bd6c430501f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+engtlc = {
+  revision = 28571;
+  stripPrefix = 0;
+  sha512.run = "c1ad2ed5337168c70bcfddd35c72b83b19a1596bc7d9c71298eb82ad8637c984253c79216606060753d1cc5ad4f961095eed8be2381b786b12202f5b0bc748f1";
+  sha512.doc = "4c6cbcf337eca115a856eda24924588208ed9e7491936640c8875d49d649d6012279e4eadfa7cdb6544e08fa283c341754d896c921402a2b1180764e8a8ff233";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2";
+};
+enigma = {
+  revision = 29802;
+  stripPrefix = 0;
+  sha512.run = "70cf80101d3fe9a75e750f5b3df4db79f30f5ef76ed65f4bfb40f36e5c8c5f0d22468396fe3a531508dd484ed5929cd14d4e22734a92814a4eae9ae2ec3e2b07";
+  sha512.doc = "b0509d252a2dd7b61339ed084dcb8dd4c3ec0e63aa6fcb7fd81302b82bbd3ddb0b68d0460e5970798a12b2b66e1f560b80c7bf36187553abf6531e0916ddb71a";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "0.1";
+};
+enotez = {
+  revision = 61490;
+  stripPrefix = 0;
+  sha512.run = "0f292fbfa3ad395857bf04c50817376152765c1511bc1b922fb6612033a0924a416b83b38e15a36ee792ec5ba351614e93cf6b70c6b2eb8cf78ca74cce6438ec";
+  sha512.doc = "6a52564111cc5af280ecb578c916a340ae0f0a8e1848f6d19d97d4c8dae863af7c8c0ecd057f5eb54ee701fb1f3f0b101bb4b6fde2500af71867b5d38a29cc8a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.10d";
+};
+enumitem = {
+  revision = 51423;
+  stripPrefix = 0;
+  sha512.run = "d49701368b0ce611f5cfb52ec06616edc27b2dedb99230983ffc59c4c1eadc265a8afd3c94f1e57920de875c4ec684fec007dceca59fd4f4008bb5572c13880c";
+  sha512.doc = "b61f62bb0da61c7124f661739ebfaff6147d73899511d8b1a1d4b98b31bc596c3994acfd73c3c1922f5cc8a05c6a98572254067718be394c48976a10b2351503";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "3.9";
+};
+enumitem-zref = {
+  revision = 21472;
+  stripPrefix = 0;
+  sha512.run = "5cd16cd19d63d4825dd1f726ad7617bc892a0d80e41f559234b3f82950f589f044a9816005a089f6837805ab08f07b507e47c5d2d389728adaa5350a76d1c1ea";
+  sha512.doc = "af4404c0f76f6f693d1fc0a82e0673c461a1acd6a0d7e9cbac10719790e54199deed1b87fae59db4826c2d1874ce59c7c2a1e5ae33286369a4f7e495223fe2e3";
+  sha512.source = "7f5642d0d3f3779b0d66832f509265a17e66c6e3ab4a74e7fdeb0bf4af9c66257eb78a9bb3a1a7dc1747a07ace12607031f861a14664addcc9d707d3f8c5d5ce";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8";
+};
+envbig = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e39ce40decbb52360cfe465d8a5147f9eb5bfae8dd42b86a868a46f1d3c2544d14035d6c307e116c0d08e6ecb62ba5943de803ee9d40a0a8cdf94a88aec8f808";
+  sha512.doc = "cd8c32d4694252449e78736be1697f9a8da01079a8aeafb774d92ded858de9ee7ae163b3758710df466dd0f75fb8b325e86e575457b66c8107f3c580fe0fc737";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+environ = {
+  revision = 56615;
+  stripPrefix = 0;
+  deps = [
+    "trimspaces"
+  ];
+  sha512.run = "c8dec70e56651a89ae8da15abc0ad81cc2edb4487837469238e2adc0e7c58cae4c5da82b637a3336839b50103e3d846c5cee8c73141488f644469a0f3e9d363f";
+  sha512.doc = "78d4d3f570470619c938687a6c9a6925aad901d781e3e893bd731a49bb8eca62bf1870e68d84f7125e10d91d7bec02a323ae42278ff59c04d7e33eefa2261496";
+  sha512.source = "b30607d21bbf5ddf1c7d36bd9173a16d91bdfcfa004782be50e50f17bf54d94e943d5e524e2331b75f3ce65e81193ba98e69ab56c38959d632007f5b0a87bd6a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+envlab = {
+  revision = 61937;
+  stripPrefix = 0;
+  sha512.run = "d4272cd079bc0b48835d675f1b36d0155d7da4cf920785dc7fdf608c311f43afb88e6861087c79774af6a434aacce05dda59f9e53aa7b2f3f37e06415eafa01e";
+  sha512.doc = "dfc28fe6df6822fd8f45b3bd31a66e635cf621daadd5465408dfdca47a176e0f23e66501b5b89a8f803265c68a02db6a7ba1e05e0f9ba0f35287bc582d1f48a0";
+  sha512.source = "39ba3371b9aeab277968d8847ba5fe519ea3035306fdcb2a6376b6fec881a3d443ae7f4912039216058fcf7918ddeace617ca08e85c6f21c70820e8d379805bf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+eolang = {
+  revision = 69391;
+  deps = [
+    "amsfonts"
+    "amsmath"
+    "fancyvrb"
+    "iexec"
+    "pgf"
+    "pgfopts"
+    "stmaryrd"
+  ];
+  sha512.run = "10c7dc6dd0b824fb2ab22318b6ecadb592abb552b4a6fa58fb89612add290928b625f9f6d6ac3bd5b1202662545e51bbe0d8b154025135f92c7999341876b976";
+  sha512.doc = "6802a32f5abf01bdf32bdb7299e82ae2740e8323bc1ce0fb6dd5d38c87146ac52abd4fda69bf28dfb8a10ed09223d4c3f8d320510131c5a81f5262f2e81af9fc";
+  hasManpages = true;
+  sha512.source = "97ab60d5e21fdac9aca815b6acacc31fc534474fe6037256e9b18ce4cae3830ad39257f593a95ebaf35018109286140c46769990f60f659aaa78490bfe717cfc";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.18.0";
+};
+eolang.binfiles = [
+  "eolang"
+];
+epigrafica = {
+  revision = 17210;
+  stripPrefix = 0;
+  sha512.run = "82e5dd9f781b6c3ad0bef743b117d9658ae9e0162fec524fbb59f35f13008d3ce9b37daef8d6b977a5ec4834a1ecdc06346627857445c5f19c89f4b202706beb";
+  sha512.doc = "c90061813a408ea74da7c0a9a53c1dc0f4ef65a9ec1d96e92002127ef401abb5211b7f029630fa445725497018a6e5ed3415e31c40001674405b13a4b4ebf6de";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.01";
+};
+epigram = {
+  revision = 20513;
+  stripPrefix = 0;
+  sha512.run = "8952dbb6f7c573028b1f9621cd9c947a264847e59e1ead9547d386d71c2c15ab5f9c26088568b023030645b02191c9b72d827a80706ca1570785876c6acac6f0";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+epigraph = {
+  revision = 54857;
+  stripPrefix = 0;
+  sha512.run = "bfcc661316dadf02c8bc1c4378b04c588ef612f030c764af3119e5c9eb42df667f7da9ad71b90fc2b5dbe7adf4094b05d792ca2fb2292c96035384ce65578293";
+  sha512.doc = "d8d2ac763e6bdcbcc200fa21995ea5044b4adad11f147b3d7e9f212274c1678cbba7661cc93df8cd013470a5397ca257690d85b8fe55704800284805abac7c62";
+  sha512.source = "566c5d132b17c806ee51d60122c9c89f7e1d3e6b6df1444bac715c5e77e2522513a2971f86c495b7fc654c684b07dc53982436aefa0544955e0bae30479b42b0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5e";
+};
+epigraph-keys = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "5e92bae46fec0037bb0a2b92c2b44de0c73ef4b434584a0bf13aa4e6f09e89e5e4b7fcc3e4809cd0f5e574d627285b8eb97f3971c65745e48591bd8e4a60f7fe";
+  sha512.doc = "21c4e1f6b5c3a5b4402e3d3189b6b2424aa952e777994d330e4905393563030f9cd2dad9cc20c2157accc0e78fe98e7828781d5d63a7fb1c6f1ecd504c67f037";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+epiolmec = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5cbe40240b14ed494500c3831a02659be437ad9710708929a69670d00b788ffc99d4d35e66fba04f170c9844faf2432c116d75e6b01988736ab483e7d0255a8c";
+  sha512.doc = "d2c54da2821e850f17ea0a21d0bc67385e2d986948503fbc23ce6df5229708f0700cdd30a94d09cb310cbd911c183c40935e944341b6ee7ec56cdd9c2602011e";
+  sha512.source = "a52ef99c57524444151175f8e345cc59ae99c962e31420363c01e3121e1b4ecfbaeed28a01c3185d9d57beae90aaa8fe55dec15fd0790088f72fc4ee8860ea12";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+eplain = {
+  revision = 64721;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "babel"
+    "cm"
+    "dehyph"
+    "everyshi"
+    "firstaid"
+    "hyph-utf8"
+    "hyphen-base"
+    "knuth-lib"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-fonts"
+    "pdftex"
+    "plain"
+    "tex-ini-files"
+    "unicode-data"
+  ];
+  formats = [
+    {
+      name = "eplain";
+      engine = "pdftex";
+      patterns = [ "language.dat" ];
+      options = "-translate-file=cp227.tcx *eplain.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "dehyph" "hyph-utf8" "knuth-lib" "plain" ];
+    }
+  ];
+  sha512.run = "fda8158ae2bdc96187b6e6ace2a94be3e0f68201adbc02553b48a3848481352ac10ddd72babcbc2835e089ce751ade7dfa6cfd1c642c94155c2861db865f5c29";
+  sha512.doc = "60902b2422d2f5d7570a19daf7f586df7882505d7c156539699a0aa47a0f3bde5688dcbdc92c8a6a9878f11392bc9b9f147626aad230eecd2740d56f104928ed";
+  hasManpages = true;
+  hasInfo = true;
+  sha512.source = "015de2eeeaec99bd15882a190f9ef3f2112520f8c591c7e6d2351c52d8690b024750adea426bcf95f438aaa20c97dd321881ac7212ff181e148337b57f6d386c";
+  hasRunfiles = true;
+  license = [ "gpl2Plus" ];
+  version = "3.13";
+};
+eplain.binfiles = [
+  "eplain"
+];
+epsdice = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "acc0ceb408f320570a93a52132d3e37d43d4be65a31a038187edd6de9899427f08d7859dbc383b7b27e9d9b5a635ae94ea97f0be4ab8386b5991089a1435c350";
+  sha512.doc = "6d9db45832d3e26e79a518f06d00db992ddfb2999099d32b415891e8d05b51803dc4f03d097cdcb04e5ccd6073606d4c7a87a07b9dd20d8d257456f927ee7427";
+  sha512.source = "9bc8b64a815e9aa14b6ef09e9ea6328e338e9539ebefbe3df805d3fe05ba3aff61750fd98033be72ed7a7cb4c3d5aa6152b557c9a1dfb0272dec856968171d29";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+epsf = {
+  revision = 21461;
+  stripPrefix = 0;
+  sha512.run = "4c3698edc9ef386b08a2ed7c360d926be6ca5a8284e3e53e0dcf5f222eeb27d4d33b4547b42dd2e5544ab381397aafcd58899376d26a4d9d47beee00ad1e9bda";
+  sha512.doc = "52be704eec6159e70d99ae2a4823c1da0790f41da9e6de130c84cc77e0d8d29aae145ccb9b416ddc5c9641100821f5099b5c597a350438652381be903e7681bb";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.7.4";
+};
+epsf-dvipdfmx = {
+  revision = 35575;
+  stripPrefix = 0;
+  sha512.run = "0f210b940d55bc2e85b3c86318be82fde1bf2b6fa2e5d498101036a01cec3b09cd8081079476f128f21881b14a13c7fa248c758a7a33ab0770f261505260992d";
+  sha512.doc = "e7b770f6880bfa8001851cfdcf2f2d03117fba3a2d38514bd7e23683aae08d57774bd1bfa4d0f75df443d9111a5472ba96bf8129e45b618b39f1798b27fb533c";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2014";
+};
+epsincl = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "f9251142a990038acde2f1e7b61b94eba39b2c4f5c43a1151af29a17d5f0efb0cddc0af1ac8d056d8617b5ab4eef29bba14a4731ef933480a9bdb95fcc15d023";
+  sha512.doc = "2cac5738a39157563707879656b473e7ac7edac2f304c209c8164c7878b10f0d5dcba1d38232ed6ba8e20fe21b3a0cf78dfd51733b993ccd5fcb2c0a05ea31c6";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.2";
+};
+epslatex-fr = {
+  revision = 19440;
+  stripPrefix = 0;
+  sha512.run = "f3e90ecb487259301c20ab4c4c28702b9cadfa844a49361fee0881a26f827ae602f954e4a3e824e910d2e098097c387aa5311c5f32cb58df5a0a1e2fcd9d2364";
+  sha512.doc = "7965e6094535d22b04193619842bc0bd090c2b47139e65498dcdf428f4ce2ec54e7da5edbdf9015c9d8f2013642d11347373e625a3884c629d9d807af2a9880a";
+  license = [ "gpl1Only" ];
+};
+epspdf = {
+  revision = 66115;
+  sha512.run = "3dc467713b1d90b96a8fd3903effe209fe15be82463a1ef4693e29e7d145220936bed0e75dd3824a1e520f778ab9b96fe29389037e14690352db136e642f6a2c";
+  sha512.doc = "ee5687a3add6773e127a1e83c91683b5c6ea5e37dd98ec5f5558a32015d292c31f1a456c985ee5d2e4201c0a47324dbac4a7129529236438676f587985bca64a";
+  hasInfo = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "tcl"
+    "tlu"
+  ];
+  license = [ "gpl2" ];
+  version = "0.6.5.1";
+};
+epspdf.binfiles = [
+  "epspdf"
+  "epspdftk"
+];
+epspdfconversion = {
+  revision = 18703;
+  stripPrefix = 0;
+  sha512.run = "a1f328125f82f33bcc881adacec981f4ce8aefd4cbbe160de66397ed3b1d4c2ed980f5e1c17c63b75973e3c253d76afc2f1227272ab7f0236e47e8e48f0f015c";
+  sha512.doc = "dc09e2ef835a85bbfc7c399b7c7323d64c312b04143e8070fc403fbd484bd893be1e4b532580efea93baffe64625c33004405eb0ed9bf6295646cfc260d72c40";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.61";
+};
+epstopdf = {
+  revision = 68301;
+  sha512.run = "fcba30848cb2a5bfb12cf89e1ee6d54bb89e7516789738e1fc7d9b1d47c403ff6ef1d679c9fed214669e8d06fc5e76eec2af0ef513d2649cd1d44b535287455b";
+  sha512.doc = "9d9068ce64a2e14ad72de11c6a608bf9379240c0fab77a7bd29fbf2774515c5eff12b375a592d3ad6c8accb06021309768c3965284d18b89fb0a57487e2dba06";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2.33";
+};
+epstopdf-pkg = {
+  revision = 53546;
+  stripPrefix = 0;
+  sha512.run = "3e2177a1c6cbf8850026f981ce3ec5e6a24c4fdf8c40716e3f18ba7233cc7a5115e5b74d60aa077575f41bafc58af966ab55c189de4d06863ab2a38551ff0dca";
+  sha512.doc = "c098251d55112c0c630e007c85d1c7271e32bba9443ca3c2590b51987053e945e3c52030ef4bd1f6758894cc263e9316bc31683572bd07c24fd0855f01c68be4";
+  sha512.source = "0816a754b15e42d6f43ef333c6f508988c861c04f7f6f53a370777ca85633a981948c10a13f3180797c1f5af1ed156b60a29c608d7387a53756f2e440f38bd99";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.11";
+};
+epstopdf.binfiles = [
+  "epstopdf"
+  "repstopdf"
+];
+eq-pin2corr = {
+  revision = 59477;
+  stripPrefix = 0;
+  sha512.run = "631f8dc9f50f7a45a0d03f0c4210af427cf8492d56886cedeff6cb0e9587453976beb1ac960afb53b7a31538a176bb63f55afd330ca2463847f86e57c3d545c3";
+  sha512.doc = "4e704295ff398a2e167293178d69edc4882e9b9f37dae4f9debda7edd921a7c2d19c036b4d1424405ac1b9853e57615d9183fbf56a763088dc58919842da2720";
+  sha512.source = "eb40f073d1763c59f9a0ed0444930f6698fbde754e213a73bff251df7f83b2c5a730345104d3b947ee8400363d324f968e3ebb7b74ed6f484d0c3589d5134b37";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+eqell = {
+  revision = 22931;
+  stripPrefix = 0;
+  sha512.run = "b3544579e03c33b7a5a10f1fbcb22735d1bbcdb9fb5ac94330ec1eeb6f6ae646935a46f4c7c3bdb4305368b2e9aa9eba244c80f08f3127fad2080b610f1041a1";
+  sha512.doc = "9210b85937d0bae3eab982f45b1f38f7020327c9b4cfc6604de5b171ecc84f54f5bfd088a3f06ba7123a7fc01a6fb09953015b1813db9ab2fbabf2a15bca955c";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+eqexpl = {
+  revision = 63629;
+  stripPrefix = 0;
+  sha512.run = "75f328b6b1e729b76b9be92ec7ad9844e5a41d8b6776700175af98ec217ef93df6dc56b92b49892090523e9308afa069ba3e6beaef8ca6712aa2fc3995417103";
+  sha512.doc = "2ad0eb828e3ea2484220335d61102e0ccdf9787b0165d6f8ebab2073ad2407757c04165d5f872a4b3c674d2c27b952ce9ce1bdc09a626b8e4fe804a5ddc5b1ba";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+  version = "1.1.1";
+};
+eqlist = {
+  revision = 32257;
+  stripPrefix = 0;
+  sha512.run = "1af830f51ce25946ac8bc6a4cca323dffeff20389ec998b74afd49a8edab5ad7a453818d4799e55ca564153a87b85e2a6b03ed67e53cc5ae6fa74c45edf3aeae";
+  sha512.doc = "a5b22b8e9300064d77d02ca6f5652659293c6fedb792be2f0664a2383b3167ed7bf8796af26edfabfdcab8d75ddf30f3815be36e8f38fda30f1609b56c16ac61";
+  sha512.source = "15817915c95c5f609c3def3bce324e6ca362408aa862e7b3548a67225bc1c33bf8a5c8f924dcbb1951958beaccbf86071b4e866f0e7a4d55a09456412fe70223";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+eqnalign = {
+  revision = 43278;
+  stripPrefix = 0;
+  sha512.run = "6793d24d272ff5f95b4e37fa3f4206e7358e0f5b51c51bcf4c61908e3fa554d8c8a53d888c7d7b1adde09f5d308c19944e93abccdb7846c88544abc90bbe4924";
+  sha512.doc = "65847f34d7d1c76dd4d87ebd7e46aa1bb9e9a34ecf04cac6e58c18f9f4949d3e82325dac982f6d704fe6013e2acf718f0372873e547434c15a4a07c07ace27c9";
+  sha512.source = "124449d3ce1f3b120f152c1eee49447f640f97d01f1d5a6f79ef72d1465cdd31de896049a5a7163e4e366ca9454b0f78723c4a94a24b8d83e2c4540d613bfaa3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+eqname = {
+  revision = 20678;
+  stripPrefix = 0;
+  sha512.run = "1717aa83439019ba2c07ced56ca5dc969a68b78c9a711d97d0a168d432c6e26b53f30b2a3f6f8d241acf465fe8817d7e4fc4238982a68bf2ae143c5fdc2ca72e";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+eqnarray = {
+  revision = 20641;
+  stripPrefix = 0;
+  sha512.run = "f5abd20910152cf65d92c7e44930729c1052f72441f162de2f4ad869f0ff37b669066f43089a1369298e9ebdb536ed62d437b3f34be5b3e417d8b0bf34d9c870";
+  sha512.doc = "7ea3d87f81eca28dd52f9e9cf4f7df1ce4f7b9cd82cc40d0a7fff234415b2a3e033fa1c8a11594b2c08e5edf87ae265e5f7a65eb92a79cd523568f37853de30a";
+  sha512.source = "9dd02c43fca4f6e8dba0bd44292c8f97aef4cbf39d521b9df10206a2309e82492f344fb65c35ac0509532e9efb2571aecb2a5894e639de5efa1444bba9916587";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.3";
+};
+eqnnumwarn = {
+  revision = 45511;
+  stripPrefix = 0;
+  sha512.run = "ddfee700caa63f65fb4f53fe2469d1e6ef6338843738dd2c06989f23b6f4b40dd1dfe4b5979a04b34a9430d7cdd4d0f3ef14e3ce39613c8961fb0266e4ce6af3";
+  sha512.doc = "e6dddee646be40e01c211854d3fa04855286e24a39b8217380e555eaacfad50fc66a57e89336d505c80a8df77ff7885922195423d11c2acefce583c9cb9fce81";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+eqparbox = {
+  revision = 45215;
+  stripPrefix = 0;
+  sha512.run = "b6e64a4d30840933614a42b16ffec215d1e01138c42805ed20bfab6ec03e232f87fcc2c20decb2e7e75234b7bd5fc2ebe5477808756ec92e6e724acb3482afca";
+  sha512.doc = "1b0f7e6249e114bb6371d19f941cd2308f70ac4f1c831ce5a1c15551bbd65a4289b0b0e718580cc7df97bf4732ad3a76b3f22ea12f7caeaa2ea6362fabab2074";
+  sha512.source = "2998b3fce2cce05512a41b4700905adb78d421302ed0275e7f263f891a0d8e9d5d8793ce2fb80cf1ca3e8f5f148e530a48c3c701f72729e6f4667382ad9247b1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.1";
+};
+erdc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "56754f7ca1872837a362b1f5cc929fe5ed8bbd59a1a45eb2fe20b071f7c44362b0d98764c6d2870d275d0f0216a9543cc1e9f671f92de1b6b02136f9076f5f95";
+  sha512.doc = "3e9d2dbfb3bd877c6bd105ca8cdff87cad9cf801797cea39e760ceaa1f27ed802795d728f9bd675c6553a88e22c03a035436abb19dacd38c774b94a0e2bd1567";
+  sha512.source = "afe35b5120001d40259065ba25a9c5720f78fb1a679ed984727b89076bc265113e93184bc8ffbf998f069f85636f332ec5c93a40ba39aef4d4b7a3884da42446";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+erewhon = {
+  revision = 63312;
+  stripPrefix = 0;
+  sha512.run = "760818dc93dc0564680d76c152f6db9f69870008f50c43227b329df3403e7b6b50f241b96822fa63aee6b6c64ae42ecc69369e8e94f43836d6cbb9125f197e94";
+  sha512.doc = "bf9219328f592300b90c3aa0ad425a4adf6e6cf2e190dc21cccb4b15ebe9db8f3dcb88c3e72b6f89f7b9085ecaf28f8ef628fa3175e7fb7d59545c61e2d76f42";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.12";
+};
+erewhon-math = {
+  revision = 68990;
+  stripPrefix = 0;
+  sha512.run = "30e5463f57ce8562c94cd6ed302c9b9bf5624d34a6f5b2374d691afc097edcaca779d45d1f6a22747c2c8d920f6f45d9c6f5f8a3d09123b27188ba84c52caa18";
+  sha512.doc = "193b4ff5e877b3f8abde9e81abe208ff1545e77e81b7d78a4d19a858e4722177ac8fe0453bcef672c348c7703fe1c53891e4a520348d11debb43102fd2450864";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.64";
+};
+errata = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "ac3b99ef6e120a5b488cf79f3e942c10a47ee92e84a04d3667f99810ef365aac66598908c491897ef7a99df268a0bbc7185d49aed2313487712e300383356ec5";
+  sha512.doc = "7fb625a66efc914e2eacc45696ac43112d7ca49b668ffbea179f47f04746509f981141a77d2948f30b8c56e4a2ff06f6af3047fe494e4f084237891fbbf6710f";
+  sha512.source = "ecc57287f78000349f4999d1f85aeaba0206a898ff2d97a1fa9b4f94acffd76099cc0f92a88e5a38153f71570f62d9616e0332edeb987e468a6483de0dfab5ee";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "0.3";
+};
+erw-l3 = {
+  revision = 61799;
+  stripPrefix = 0;
+  sha512.run = "551a7c38657547038a8bcf5973ecaec81cccb4b803961145d4aedf7416834e3cfefe736a59e20c80cc1621d415216371d58f3d0c7d2b0fc3dc0a182e1ba91acd";
+  sha512.doc = "8a0a823482fd19c80471e9c1a38312b5db7f04f618c8fd8381324c38bb9b9ebe8eb8fc9ce90137d4a4f1de7b6b65aa1c1820cfe0f009f4ad743613f53b549323";
+  sha512.source = "babe7d5b286f4c20f469112efd76e4a37980bdb709ca9cd058263bf74a5d20b4b7c0aa3a4aba7fba512b5c63b538b6da1ae90f1903bd58ddeb36e2dfa4339e32";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.2";
+};
+es-tex-faq = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "33f66e4f928591188289f07e003cac10229735e69ee7390020748e119930ea7b74ad69e5eea991d8e34325ac4d548ce0b843a00b3ca50b9e6fae3e96526a4ad8";
+  sha512.doc = "5b5d0ebda1bde2c1c67fd4853a41bb10956487fa5ad2686d6814dbdd51f68dde2a3d294797b7b1602d587a44ea6acbd8260ab9965efab81d91eb9d9fdb93da69";
+  license = [ "lppl13c" ];
+  version = "1.97";
+};
+esami = {
+  revision = 67707;
+  stripPrefix = 0;
+  sha512.run = "e5e2656b1f1dcb224652ada214871004828ac04c2ad316250e4ce1ae54f509df5607248eadcb018308ad2eb14ea761224962b751c7998b935540b4de516d4e1c";
+  sha512.doc = "7eda39cb0372f0f500b05196d526a215efddc58aadd1ee6c66504f73129936fbffc65d80183662de665b6fd54d4a9eeb5bdb2c7d5e11ff645c712ca6d712fc18";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.8";
+};
+esdiff = {
+  revision = 21385;
+  stripPrefix = 0;
+  sha512.run = "84b2490e6ff743f0133deacc22c8e0368368e961d634239694ccf7b5cde7826996e080077baa0e0045230b6d2c3cad53ee055c05b17c89ca735dc2e40a01fb5a";
+  sha512.doc = "97dbb512437c868f2b15ebd1271f51a7f196e40c70043c224617378e6c9333f19e2c18666f64fe6ea323c7aa5a58438944d8c6f5b1a9c0d36a239caee972eb08";
+  sha512.source = "983f7f7cee22e442768ae56fac614d569eef18bff35c52c669d51079a61beca395c06e7fb9bcedde338bbaa1b3775094ce9b77fe7c043df2e1e25975410ab7d2";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.2";
+};
+esieecv = {
+  revision = 59638;
+  stripPrefix = 0;
+  sha512.run = "c39e028de2f9cfb981baa2d36335863d6e3252a3bc3e1ef283905fed24daff609a85748dfbd34db0cbdcf7131f4db3aa6d66d0e714f0359b287cb14efb95f568";
+  sha512.doc = "8bac60946fe2a4bd5c1ddd55dd314c59dc7fe45ce33a214021de68bbe03b610b8bf1d6ad426e855e10340953176285132017563c41f0326c273f2ca790be4acb";
+  sha512.source = "73f00171770070e8d71396540fb8adeb79804b341c7906ac7ebaf67d8d9696a178b5458d6b4d7bbf2949c9d7e3a6d142bf682931763714c5d0ce0a77416bd28a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+esindex = {
+  revision = 52342;
+  stripPrefix = 0;
+  sha512.run = "4e3fe4402e025dbbf300b509954600e3a1eca221a448d32ff2399aaf552ff930e6921bed6f0e1aadb20d6453848e235e42e8b809c4f4280d39c29937615e90f5";
+  sha512.doc = "6db4b39371280b0f3a3e0be9e18337a75611410ad25e7953742247e750ca439c92c614edeffa03c4a7f39d8aea447037a6e25cb8f6f0d22a190f359c9cc35f8c";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.7";
+};
+esint = {
+  revision = 52240;
+  stripPrefix = 0;
+  sha512.run = "d0eda90d6a890b7813648516f21e3a88213b1374df0c418895301354de402b9634492a1fd89193f34c6db6b9fcc0cdd0f8f46472e0e3a210234c7d8cab1bbed8";
+  sha512.doc = "aeeaafe3746b8fd75ba80fc36b1610a3e4f7c7f26044ca82c2c8091139e0294275a1dde9dd73fb3e5b013ff04e4d0f26422e8c2a44a88beab167353e7686b3fe";
+  sha512.source = "242e864b822f5deac76740d7a00edab9b6ff77e260b3e1adb6676dda009a8c200b9352e87998b76ac3047f0eacb9bd5ef87ac554c7c20ae649e91f1fcad889b2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2d";
+};
+esint-type1 = {
+  revision = 15878;
+  stripPrefix = 0;
+  deps = [
+    "esint"
+  ];
+  sha512.run = "5a663d01e9241adf1961c922c588888561f495e6378fdd7aaa90954c3e51c5f0f8e6dc1e1947c9f03ce3472e1aab3dde1b35e6b5f0814f5e2cda564a31a45a1f";
+  sha512.doc = "081a225225f503fac403d306fac3ee3b2747341ef5c4ee9420f49a56ca959c7757f154c24f90ed9506041b13464ea216e6edb52f29790d189ea7b33c7c797f8e";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+esk = {
+  revision = 18115;
+  stripPrefix = 0;
+  sha512.run = "584d9b9abf202d93826c690545206c3b7276d6b3a4b717ed3671f9cbd2a1c6c6503d3352471fe60232e75d63632e021fb0ed34ce49d5a1e72ae58b08fbdd7211";
+  sha512.doc = "acc40c8829e69c681d3bcfd5aa7223b3f5320c1ed5fa3f4a9a700f203b622f300b73912ef5df2c163d2cce1b40aecfdf1eb880dcba48e94783c14054981e0e11";
+  sha512.source = "8f7123816c718d86eb1b362369dc10a745a003e8e79c54b8edb90813382528466a7e0fe3eb6b579372754d03888065b6f5c48a0682c6288905e93cebfb1b4a4b";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+eskd = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d0c1745172683bcacfb061f48bee10f78dbc849657295f5e7714cca949afd586c441f727e909c627b595ccdb50b81d813538e6837a00809ee884ffe1acd6b25e";
+  sha512.doc = "01a0be9d02e7fece62cfd1bc8ceb26b2036f3d2e374794f3c4aacbfe004cf4059346510009760fe48fc0141c4e9f3cf1e40088203d31b7bbb31ec375cf5f70ea";
+  sha512.source = "88b3edc0487b638142ba353ef108558b8fa6d420f2560a4fb1c189829af87d877a8900566c042556b15d654d11d2a0def58fa958fb9b234fca84419b2621cba4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+eskdx = {
+  revision = 29235;
+  stripPrefix = 0;
+  sha512.run = "e5ef11cba6b0251844200093445f5183de60e0c0198da9c7000ef5c05a2a9a4303a15dc77ed03e9874e452ffdd283016cedb8901e78cd0312ea5bbcc529b74d5";
+  sha512.doc = "748dec387a09546b28718e943e05772cd56c75a0066793332b343e7f604e607efd37a071c1f4f32fbd20d7427277bf2d598b355b8ea3a0a04943ccb90f4f249d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.98";
+};
+eso-pic = {
+  revision = 67001;
+  stripPrefix = 0;
+  sha512.run = "ee2a5c75fb02f94feabff9107d8e183cb3ce2dc7d38f8c82b2748a67718286a824e839443a9cf00edc142148271c83ae08017f2d5b8e6bc01faf50455187e75e";
+  sha512.doc = "ed03cbb8e57d28abbf3260c4a97c10833c89a603e219882920ed95fc2eab404c461a9c89b21772757a37245783c3ee10743f7ed248d4915d04a0619508469095";
+  sha512.source = "988e2f00cec99ab76b95bbb1a64a47bd11a3bc258bf04fb26db8825f381922d6d4db5f4059e09d9969c6a00926a8f6b4b235be82027368812fce493f5f16854b";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "3.0c";
+};
+esrelation = {
+  revision = 37236;
+  stripPrefix = 0;
+  sha512.run = "a6d8a0a9bde08e3582826affa52142fe5b5a0dba43c4ff15f5fdd19cb24b561bcdcdd761c2a84238c9b31d3fe0a023949d2d0c716e105852443e06ced9df13f1";
+  sha512.doc = "6698e9f57df458d9652ae98abbea08ce1f14c6c31677c32ab8cdf9b8fa0866a57c50028ea36d2c7cde133588358dce0b2bb37b7085995e4bab9ce7d3de1a541c";
+  sha512.source = "17b0495b4b19ca5166835549c62c9c5e1dbcb59e2252e321860dc7254b9ebc9d073f317a344a2a8a4ec772ee1a931a5181d9d3b1af45f913b0ad04ebf189bd3a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+esstix = {
+  revision = 22426;
+  stripPrefix = 0;
+  sha512.run = "e503f25cb713918329f297a4ed088b63967eb06828fb753653aaf60ef99c5fb7db6507d6f0f74080b9fad2050ca1917f7ab873be2fb0bd3fcd126f29a43eb775";
+  sha512.doc = "1233a284b88e5c8bfb29350b3b534e7a4c81b5692a9ac7aff5d69f77210e026dede300b511bc45efd18d6a96f6df9be2add166c80f0ee5d17c93732c0c242bf0";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.0";
+};
+estcpmm = {
+  revision = 17335;
+  stripPrefix = 0;
+  sha512.run = "20213ddd795e862dc924ddd71df08752f6adda4be7a06237507cec84abf6a6ccd664fa9676cb9b275ca9de8647011da0bc731fef9344945404f885b56b75aea1";
+  sha512.doc = "c240305f2ad7a841c1d9309d1934001fc42d68819505b5c862ca8c97c5ecd7b6d2fd8a79a4273be79126d1503d968fa4649ad06e0c001f3b731e300341802dfd";
+  sha512.source = "f867a24f4bde53c0de195874f1717fe49a3869755834ba1dd0a9004e3085f06076eefaca2e83c59cdf5cdf65fa740d0df898e0ee75f88a5cb516a3cfa404c164";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+esvect = {
+  revision = 32098;
+  stripPrefix = 0;
+  sha512.run = "1a6940862940d8ca29bcb19c69817b84a7f71f7a8762d3a63829fb0e0e88eccd940f3e2973d8d05dbe9323aa1f80dc9045b531e3509239eab399f02a55e7988c";
+  sha512.doc = "502d2cce629280d7c192ad11764c0c12e65f9f1318286d1acdc3e08c9d7d36b07fc3e5939c053aa57ad59ee91e73b4035c9bd1aafee3672ddeed4a64bf3cd7ad";
+  sha512.source = "658e98e4c97dfdfcb34b396ff644fda060a645d15760bd975ad1397ca73f4ed24331a77bfd914bfe6f8f218aec9ab3fcc0a2a48efc19a0c6adc1024943584a47";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.3";
+};
+etaremune = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "511f84d8cb951caaea65cbe839fe83c9c2dcd7dbe0e0c3db3611d914dea475b60de029d4dbe482616e9d219929c50b2a87f6c33451d0d880e3b368fbc9f7f612";
+  sha512.doc = "4d7728be13e1454b2456e543ffb89a19fc5204e8025f949dcda7ce3b8a8b898dd9a6d96e44477cd158baad4d462afbcc17b6df6ddd9982232891e7b4ccb112b7";
+  sha512.source = "17c0b9d705cd5ea494428bbfacf73d12f0f40d5eb4be2a3b1a4e2aeb97af61d184ae6a471505d6dd604174cdf34976f9e64de5366be7877da26141720f542953";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+etbb = {
+  revision = 69098;
+  stripPrefix = 0;
+  sha512.run = "e034a9a750043f459b8682229bf01c08b341b4494fd6fc6669e1065652ae9154e0eef74038f1e5f16c2d57390ebfa70056198d563f3e454ee3e4806971a707d5";
+  sha512.doc = "cc4ebfcb831cdd9f02c93248d5083b81a69c59163fec85d469a17841607affb51310858b022ea819055c6bdade821d330599c97838ab9f92de7b8fa4d8f8f0a8";
+  hasRunfiles = true;
+  license = [ "mit" "lppl13c" ];
+  version = "1.057";
+};
+etdipa = {
+  revision = 36354;
+  stripPrefix = 0;
+  sha512.run = "88502eeb78f2f5901cdfc192638501690aea861de2105445de226261c62f526d6602ab5c63f02974d067e229b12441ee6663b54769236a1e0e125896b869301d";
+  sha512.doc = "6aa2ecdb393932a485857222e66471b9c52388e726edffd0b4357e340e8a5092af96ad1847486a58d6a8485a4ce0e80e25e80ad58f60991004136739d26aa996";
+  license = [ "lppl13c" ];
+  version = "2.6";
+};
+etex = {
+  revision = 66203;
+  stripPrefix = 0;
+  sha512.run = "419c85187d6832c9624c70936b3ad879987f665e54bf1fb9a7ddeb1096d09677693987b187e8d60691235d721a1b995fbda36351ce754b9c6a2a44bd015c0ac3";
+  sha512.doc = "ae5b1f4d0b7746e294697567da95a400ada069223e497d4ff906d13e4515e879d85532675886ef0d14564604163659c3d6715ff00ff29fa06fd876eed9cf60b6";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+etex-pkg = {
+  revision = 41784;
+  stripPrefix = 0;
+  sha512.run = "e2afebc530bdab4d5384170dd807d6e39c96d5a18af0defa534106103243b0e52d926e09f3ba62378452ef643bfa8f0e4d92a3c0256847c91e561707410052f4";
+  sha512.doc = "2ef9984629ffdafdc799041127e31360c8eee80726d8c410130d61f12de306e7b4c2cc892e8012029827e8ed470f9191eebcf758830cd34b8d01593ff78cef1d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+etexcmds = {
+  revision = 53171;
+  stripPrefix = 0;
+  sha512.run = "b0be75d3c8eb92407f21111e6c9d397ab5de39b96b99403a149a9554eff523e99cdacc9c1c37ef47cd190487511c6fc6b7c91b617e889eac1d6d8b6aa61c0c6b";
+  sha512.doc = "841ff47f9cefecefb241cb81602b825c07d4d0eaf143343eb9bf6c35ca66194c98f851e4aa27a369d60927fe96968bf7a1c1d8dfc7bb5be092e77330ad8ac6f2";
+  sha512.source = "057bd48b4c4455f3641c961b6337127c6f84c72dd89615197c095b13846599f1fd8016ffb7fe22be820f16f7b012ee0991d8e959e59a3393694239c1abd610e7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+etextools = {
+  revision = 20694;
+  stripPrefix = 0;
+  sha512.run = "ed7e514441de2fd296c372d9c56dd71ebd5318bd67eb4611c4bf784b16b045a08338ca4456899739dc023e5bc4695a6fd1784e592e542cac6a0564a68307a983";
+  sha512.doc = "5a8d722f9e2e59d483c7421909b4a0f8719b0de81f2b8b95801f905d478624eb4df936f193eb3e4ad1e3f0c2d844c7672a5e2ab1c0ff0654ed88c66bee4802ef";
+  sha512.source = "a2535e9648828eee76f6fe48d7c85ab4211c2c107bc91f72a944f8a9eae384205ef371459fe2df743712039eb745e48dfbcfc42cd39b7d5391263711ba027862";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1415926";
+};
+ethiop = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ad9da81e2a9af7f93c3a9677a72b80335562677d552511463c20b73df25adb0a6765463273306486e295b8c5994af03fa1df8f1e70cc48ed7df44698637f8459";
+  sha512.doc = "13e9149433cee0c44d8eddbcc6f738cf113581e4890a8728aff08a6f3f26a62617e1770b4875668dcd75a3714925db9cf5c5d9fb58a9870292bc0d22005c844a";
+  sha512.source = "46bedb27b22953ee6aab0b372581fc58186f3208c985a88006846a1f7917d998b5b8abfe463c3f415100f27aae20ae1d1648044850e6e7d095afa480adbe5837";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.7";
+};
+ethiop-t1 = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "84f97fb5320ada95562aade797fdb62577e533feee9d7ece5cc51e17303012b198c0b1e6b4f720dc1539c4cb917ac71e3da6f48776d6fcfe84d4527ffd7b78dd";
+  sha512.doc = "81f2ed72d5cef9119c94c4b0025e31be6739153e36b7b31a2c59b0cbe5a683a67746da8346345d561472fdbb760c07831d1936222ce1388ee12d70c9053ca8ac";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+etl = {
+  revision = 60998;
+  stripPrefix = 0;
+  sha512.run = "14c5db74da0c3878609323b450c99dbc186c97997079d09acf55bc8fe78a2cf9f7fccf7c89c1fe02ef8fe9d532fc3d33e85d77e374d4f0c601c6251a04472dca";
+  sha512.doc = "2a1dca3962826cf749d67799c6d871b7822b16f81c7ff3473628926db217812ed5d85ee2da351245f6ff7a973bb1b90b61951101978693fb92f07bc86425bb2b";
+  sha512.source = "1be3c92c55576ea6906f08461f08269fc4840815124c3f1f09ed145a680de3763e3bcd88aae61c46d872e05ea34c302625e439ffdbcbc15d7565eeb250b177e3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+etoc = {
+  revision = 69343;
+  stripPrefix = 0;
+  sha512.run = "ee9e46861d53c0cf3f0807f55a78b2e9c24ed6d5b37037b87f162a297421548561728dbe268927e7155a16da256e61b24c74ee9b1c18addbca937b8c85ce21e9";
+  sha512.doc = "693a6589f33a93e9086342d093b8801235d9e7d8e1729400e4e1069d0bd9457bf8b96c0a946110f12e2cf6ae646dfea81fcb9a795724558f73e53bb87b300957";
+  sha512.source = "0311468458efe4ba2b12bb0917dcc4bc763a1f7e1e6f2621843358afea9edc5a96373f5beb74224df33be1276b36cf53f7d45fd7183574acc38057b31c51f01a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2d";
+};
+etoolbox = {
+  revision = 56554;
+  stripPrefix = 0;
+  sha512.run = "b4c2ba570b1636b7ccd741c8960335f4863fb7242253be6c071100b64ce0d6ffc1bcc9da5e9bc65830ae5e34cb4cf887220585c0006d7afce0af3ca95f96b36e";
+  sha512.doc = "15f5f37471b991c1363e7d34c419c4defe1920522d6f666c383ce31b25b412d40a1dd6ca1c0fdb0e56ef3c7e529215964957c5a2dc55522bec60e79bdd972947";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5k";
+};
+etoolbox-de = {
+  revision = 21906;
+  stripPrefix = 0;
+  sha512.run = "cbddbd599e10b6409db5c9f9d27f35b5922bba82da39b19aac010ef77e76a29465d91c10a40c578e834acf5d9ade2d52baec5cca06eddc802eabbe599fb3dd28";
+  sha512.doc = "4c966dc094430caf72e462c1a854995fb78b54dca84322233a16508e41f33f0dd71db2b997b26beb7fd4722f0df1695a118ef782d7954983e9df3ba2132b828b";
+  license = [ "lppl13c" ];
+  version = "1";
+};
+etoolbox-generic = {
+  revision = 68513;
+  stripPrefix = 0;
+  sha512.run = "12bb7835b59a33026a0acff3c8f8204bf9b159fa84538332ebd7e4ce7116f3ab0dcdfda075555e595c050dcf96525a67f13ab33757df5e55e21b62c3d08488cf";
+  sha512.doc = "f877ad6a682abe82d84bbd1e9bd2870d80d5b79a63ef150f0eb4cc9abe0cf07c485b59d55281709027d705843bb7da33cff2eac6d382885ba806068a3a651c7a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5k";
+};
+etsvthor = {
+  revision = 48186;
+  stripPrefix = 0;
+  sha512.run = "c70654c50e186f73bd6dbbb65cc40cbfd809a86de223f96b4bbd1af94fc5fa928f2400eca58d6a97e5578186c58cd038a99264a412d9bb7fe15a01d7f3aff8b9";
+  sha512.doc = "47c9d66a720a8225b34bd0571c0f0da18fc72fb5f37e4204e7d4842facade9a0b72550351c0743dbb9296ca8bd2ad61036361f0cb7447b06e0994fcdb7c657b1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+euclideangeometry = {
+  revision = 67608;
+  stripPrefix = 0;
+  sha512.run = "8aaf01108b5d96000d909e3d041a7e9c00cfa85043b25fcf4029238f2570330b2402a2faa4f63f80ed84d5dbd3c12cd4690668714ca1bd75c14673b2828619e4";
+  sha512.doc = "21d80f3152ecf31c62d203b77ec42c183e2a6058faa173163fe456d521e89cc514f83b0ad60684f2b29c7952428670afccda79372bbea1727d797dc78de04bf0";
+  sha512.source = "e48b5ced844b3ad25f11c6afc93fbf5bde4693d9977106ab175c369bfda583c0725aa77185458a88d2e38797b31ff074a48999774ee9ab8cc76480684a815f77";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.2";
+};
+euenc = {
+  revision = 19795;
+  stripPrefix = 0;
+  sha512.run = "f5968e42b36d9c3ab7ae17d156283f8fc09f0c725dd1037cae3b232f94af11a8ee84507efd87cab901bdc8a34f0f72d831a078de205e9beec81c574bb65f79fb";
+  sha512.doc = "ac8d4e83ab23bf692d609a617bf8aacd8b33949e0bff1070301b8cad4e91f2a651555ffb44ad70be99791e64020984fe07afbb25976b73963abc79660eab96dd";
+  sha512.source = "4037c8f9961be1f4cd6a41d0cced28f4bcb54e5b7c4f9681b702f1d90e425ab0c772561b662fded93a0c469cfa1c43967fdfb3eb8c9e0e8c86d8340930565910";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1h";
+};
+euflag = {
+  revision = 55265;
+  stripPrefix = 0;
+  sha512.run = "6d6b156148fd6aee2f82ca489263de2fc37103e00aed4a287eb10acef95c60902d3c0c329eb904d2b808e5844f9d6ce92fd8afa4e9abf187d4f8bc7b8f4b75ad";
+  sha512.doc = "68eda595381f5f22bcd819ea4d2a4ee430ec555c92594ceb581a9e566de648a74ca3fd53ecd4566d17d3b54dc05b7909bdc3dd805e8c70fb68520b299da355c8";
+  sha512.source = "ad66378d43f833c0713593db5875cb0431a251e6443a939389551a4a4e5fe8c76865d1109ee0aac1b9213ccf6f375b1e4ac5a2dbdf347a88aafd86a0af721e90";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+eukdate = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4f64df42384897fca09574330d919704bfac2115f330f8ef085c9be60b51c64a9f1f46c10b863e989b9eda6559a3e2cb2388a59a997afad73632d83b02177b3e";
+  sha512.doc = "7c79bb48296d491816b5e5cbcec389fb7a2a200a9b8e544394a8363b5b99c7ad36b332c05968b98c1bfa1caf04fb554318494cafd0781e25ecbed532c752c65b";
+  sha512.source = "114d472984fb42b7043762f7f76e1ac384ca4efd338b7ea1815d25178256dafdc2c83323cdc3e4c1835fa8d3cb019bf0d73dd3fe82acae16b41db4e0c76e81d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.04";
+};
+euler = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "3b3d383a2f715f14dba0ab926d3df9d10ab63c06d203c59e551732a7f6af4ff8965750404a37863c91d3fc3db7d44d1a279d03839162fde9d8d9fd849f0047c3";
+  sha512.doc = "789c0b35257ad74dcddea589eed36f0a3b86eae3b201fc708c13cb11dbedc5b489d1495c218f9e10558b8977658b72c345a5622c10b8b1d7ceb3065a6c8fb9a0";
+  sha512.source = "59e262e4ebd3eee88828fb2cbc91b55ffe962e2bfe662df5c052075cf4fe4b9b8580ce217e38e4709789a0e77c810f9681ed3cef95f10709c54da5f1dbebd73b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5";
+};
+euler-math = {
+  revision = 68991;
+  stripPrefix = 0;
+  sha512.run = "b248ed589be13fa10210052b13c6386f4544e5cce4327902a3e2ab3b5c2a58a611393c1ecad4f72a1d4a4302b7677ff483a42173645ab3462109f9c25fbadd8f";
+  sha512.doc = "620cbbd6eac6adf53bf9ba95bafaeeffcce2f34d6a94d45a4869b328c237a3ae59f18d05c518861d56859f3f31edf16f191f28fd122ad4c456fb5301c68be96e";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.51";
+};
+eulerpx = {
+  revision = 63967;
+  stripPrefix = 0;
+  sha512.run = "86f23cf10d19427876caa9e21bdce3adcfa7ca06578e7ae05f20529333e36b7135695c1c3990c6700e0ad365fed41634de5d152813ccde20cf642d7e2b282455";
+  sha512.doc = "997bfc34f084027c6275d41d4fd8e1eafc55a6aa1aae66895c6bf8a3ddc8a7b411052a126cb87b9900829b933175c6be942e1dff4713633b5fc12f6688799753";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+eulervm = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f497e30a188bd0d6cb66795253b35f6a108ef11a2924da94110e5a2c913af64826a21789265bf7f2b15a31a914b74ec171fe3c3d299b1164801898c0d7b0e7b0";
+  sha512.doc = "dce6b483aa0d8ed6d6e607a0a518060fb290b25f04306ea4ba50f863034aa3184118a7a13f42e89fb2706daa173abb7eb5c2bd433eb038aafd1f3a8eb9c17995";
+  sha512.source = "33ad15486b813b4c4cb7758cb22acd59a9578df070857483e6cf7997997437df954619a197c4bd762c38417bf9841c06db446ee74939b8eeeb6a0d3bf893f5e4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.0";
+};
+euro = {
+  revision = 22191;
+  stripPrefix = 0;
+  sha512.run = "35a1c763998bdbc3b3b54ade3e4887859aa9d166699ccfc73db432aab3439be075d858e88d3542c25f8a0065301f0b1fea9bc368f85ed767e9deafa090f35beb";
+  sha512.doc = "896a040cf80bec968e4fed5b2bd774e433997d336855775c1e6e5215cd6d9bb094550da324a2433d4da94ead4af3cfa6b192382efa73bb7c6bc951c22bb02fb3";
+  sha512.source = "cf587911ccf53bd78d100221518aa62595279fd5880152d715950ece34b23eb5ef39b0ec190d2c5b5060a4f68861a8b9ac2ef93a3a6f3dbe3b85223dc386bef4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+euro-ce = {
+  revision = 25714;
+  stripPrefix = 0;
+  sha512.run = "c1a864ebf022c8949b62195be6ce857ba108b7f930cf6e0152d70b7e3283e09c2f93fc670732cac79e3f48b860431186ea903324a02597b2a92fa43a0819b57b";
+  sha512.doc = "3a44189546231f3bfde594142e6901a69f6e351e1d04203d1d646c476ca330431c0560faa79fec79485a4092b667864dcfb522ddf9a56bfc2b2ab76764b3852e";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "3.0b";
+};
+europasscv = {
+  revision = 56829;
+  stripPrefix = 0;
+  sha512.run = "35aa159fd84082e1cfb65bd05ea83462400e12edf5a40a89740373954d72b42cc33516452691814359d3bbfae1e96f4605e0d19592c54f4e2e5328542cac42a6";
+  sha512.doc = "834c4266e343a8b615a45a2c4b064170bf6c9516a8631342ff02d4de7154229458818192670f3f73aac5600407c830c1be384226bb3b0923af964905a39d99b3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+europecv = {
+  revision = 64037;
+  stripPrefix = 0;
+  sha512.run = "3ea97daf92d91ca88cec92af2a1d3bd1a1cbfcdf187bb8296559ef9132510a34f9e2ad068b78c655aad466392a1fbaced45143186e89aef8f3d5cf5123c34510";
+  sha512.doc = "1c494d5e568514e84a5b9ffcc70ce02c3263f0837a2f97676be92cefadc8b8fdcafcd9b1d225ab753a66bc0878d63d2fc0f4b3a345f76c08da258e577b8f4224";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+eurosym = {
+  revision = 17265;
+  stripPrefix = 0;
+  sha512.run = "9624b0a91a8491d4178051e8e8264e506725ace0eb1b4e4ee9f3cf38cf7868d392f0f4fae92947c74182a6cdf7d4cfb46319a269e4e3aac686ecf4a4cd2f7b3d";
+  sha512.doc = "db226757ec82087da3e67fe69b5e9c2429e3cc2addb126bc528dda8bc421a4e9da2a367e64f119eb109e8898409a4e50177b81f9035ed1e0672bb902836bb61f";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.4-subrfix";
+};
+euxm = {
+  revision = 54074;
+  stripPrefix = 0;
+  sha512.run = "2f786231f801ba9a9c5f5176bfbd01f8e952c33c722c7508988628afa66d1ddd55c4de02c0ed9cfbaa35a8764833e822046f7125330145995433b517f7051bd8";
+  hasRunfiles = true;
+};
+evangelion-jfm = {
+  revision = 68059;
+  stripPrefix = 0;
+  sha512.run = "5839d7899e8dd8a5fcae792fe40e234fcfeeca9a19bec8d2e8ec7be0217a73fbd58066f6d094e37b36ab9501d53eafed7f3220ee1ebb37ce767c8dd3868708f8";
+  sha512.doc = "65447d983cd4a2b112966f8bc9de7f9a7eb2c8f38a9266db5a416219ae8b817f82f62fdc79bddcb2bfe3a67c84c6097975f178bce664e7ac23e2f29363c3df7c";
+  sha512.source = "8f31d019c8db0d9c817e5579ee9e3a31b936e91d0270eccb52ee6bfa544d5aedf8d0bb0d4af5a7aaaf3366d338ee0cc47647e211738d956857f57f28770e08bd";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0.5_b";
+};
+everyhook = {
+  revision = 35675;
+  stripPrefix = 0;
+  sha512.run = "56547973d184de21ff5d6d3eaf1baf9b8cdbcf93307c31fbbcf658350ef0d441509ce359266ea6f962ef9b40b1680b47e4c14a822aa043ab8174ab0610df1665";
+  sha512.doc = "331def0138dac385605b3ea1d88af6d5d1ae29bac696b76f41cdcfd070d50915eb3371a14a894b1e59bf35d55eb7dabecfe18e89f0bfbe6f028ce5fedfe1bbc2";
+  sha512.source = "ba0d5e3f2661c4b5ba765b7509675f301dffa3fb3d9f158b3c3255d84b3a5620ec4d883a9c2f116319e6c70784eb5efa4a1cac270d1a299b23bd6fdcbaf60b2b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+everypage = {
+  revision = 56694;
+  stripPrefix = 0;
+  sha512.run = "032713896e2704667582aa03e8d542062a5eb26188d41b08968955fbd8535aacc8288559112aa264c542e3523f452dd9b2acdd1dc3f66450cdc5c5c902e38b80";
+  sha512.doc = "4c19f905b5a16674980da2569b2994382a2eb108fd20bfdd29a6ef4220e00aa390c197dd86ecd093a9acb83b9a2d64521f732083e3c2828478a8c8c45463d180";
+  sha512.source = "f01679f5ac00d3c75a0595496b489a008c664d7197af6d267226498b821ca83d34ae842c212756ccef81aae40f4447ddae2146b5651084dc55081f75c1ec04f8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0b";
+};
+everysel = {
+  revision = 57489;
+  stripPrefix = 0;
+  sha512.run = "79b83d48e3e6eedcf1673a30c28fc06eb2ed8e3bd292d6cf914faf5ce2929795e6dd11baae3a207c796abb67ced2a2442af11c2618fd7d565696f8bfd121a0a2";
+  sha512.doc = "5efdce418de6d29481a8a8a9bb89fa561e865f5628dd67ce88fd648f54a40c6a90c625700d053d741b650c568eb6b63da81b68bebf89bb618a398a223a5b08a1";
+  sha512.source = "c288dd88a266e87bad6880e36a681e29f5f52f02b5f7b86133daae2972932572f0e529945acc6a0f00b844909da8f77cf3a524bece531667437a5ffa0dc2a684";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+everyshi = {
+  revision = 57001;
+  stripPrefix = 0;
+  sha512.run = "b6219fdc669847a30ad2359d6b0888eec0980114d5385c018e9ddfd0876dc52390e1e8ffae5d2850cfa140833365c30024456bfacde6615bdbe5101e7059d52f";
+  sha512.doc = "2a05f4b42c1a85b4af8fb3881d1e32d0cb8fad7070bd8eb83632b50e387083a5c8fd264b61b70416451f56a97e1c0702507bd50c534ab7baf975372d854a97a5";
+  sha512.source = "4ae653fe3cf9dcfa51f461ca72954eeef666a6324321cb5e6416d7e2baa5320115818a26f1970bf7654acec9454e5174262578fc4d28f251d3476d27d6d4d9d5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.00";
+};
+exam = {
+  revision = 67600;
+  stripPrefix = 0;
+  sha512.run = "99621f442f2a36e661f98e2722776e2e9dc394abc39cd20d45bb6bcff3ed362a942dc79d386ebf45efe053fc6abe2524d95fc85c4c766d241385970fa00e5f65";
+  sha512.doc = "abcc7ead3c7d4847537476969bb708f61430940e7572e078e26baaeb6f2493309dcb996bac0796870825d4badb7bcabc81fc49aa7f4e71c0c816fd7e1ec875a3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.704";
+};
+exam-lite = {
+  revision = 65754;
+  stripPrefix = 0;
+  sha512.run = "f1f16566eb49d5514bff3076f1c1837cc933278f3b0e8b1d6541f158ce4922daa43585057666e66ef80366d36b4b28793b930421ed8901d456405e52469e0e43";
+  sha512.doc = "a1a2ea02e4ed3d846e428f5ae43f25150a982f2d490d9753071345d53e640f3ef05b43e812ff84155a44f369ab49e294050bbc53823da4e899c7e1b6c2d1f36c";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+};
+exam-n = {
+  revision = 64674;
+  stripPrefix = 0;
+  sha512.run = "bdd3f8a1e7836ce86fe022e27c554c125403247a9ca4e4cec7a0f32937eb517351d815248ce67815610bd063a9d0e5111868c301847aa5b6e5d666dd1cfc2f8e";
+  sha512.doc = "3cd31c7cb86e66901eca162e7bd0ced047fdf22f2d8306d9f8cc8dffb299d027305e950ff1f188d366226614aaa2db2ece78008bf1a34d4076eaf3db7edab319";
+  sha512.source = "4234bf167451fadba8b098e686490b517c44063c76bb4a780aa0d585db0df75fb30050efbe539cf6ce2658414db6a69c5f0c6e63de6e024a825ea45070ee894d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4.0";
+};
+exam-randomizechoices = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "bc29ee238d430b0d1b536084568ec8e68381c827c7ea7a4742eb497c7092ac8eb0bb990c3356eaf5939420e37979412c61ecd2e83a98a0e36739f1d6c73be3e1";
+  sha512.doc = "0cc99d67ba7b1d8d27048b33a1f1b9864e35c542ba8683c590598d5da3d4be5d3f93c9a01f339dde6fb0945982e20de19847805d185b4b28aee2c7d86bfc631f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+exam-zh = {
+  revision = 67505;
+  stripPrefix = 0;
+  sha512.run = "06aad5aaab885a208b6fe999b595799c2ebf99998f1e341a52f244daf0e4e2bf323f27b4888996755ac64738a70468bbba94cdec94ff8b76998299ea468dfc87";
+  sha512.doc = "076c183310db5094b07c1e9e642a4dfa3e3ce9639a53d0b62bf83377e8ab62bf4b232a0d3446afcf828e9ed0f81be14d3ff95963254c07d2bf0a5ca8f2818891";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.27";
+};
+examdesign = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "bf052063b16056faed35007a5e1b6e2bf4f116388b2698c24c7c00ff257fde4f0225f138af6c011f99d051085169b51357c8661647f28be07a7f6dfd330ac10c";
+  sha512.doc = "1870e3732933e0d69f52eff2c403011b09814938083b91bb428c776ef50140e1b43713837e018b09e8340dd5e47811aa1050bb9f90b350aa341216edb00c2a9b";
+  sha512.source = "8f755df76be154c4a2a1aa6d2814774a0b9398d0b64f7a59cd865e92e805dc3bfc84026a18dc449a2ebd6cb6215097e351037430de19960e957f314ae724e244";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.101";
+};
+example = {
+  revision = 33398;
+  stripPrefix = 0;
+  sha512.run = "2f790c1bb8934e1127ba64c61ccf0d9ed503c01cb8975c114257a2179db7d88b4c969475b0e357d17785fcf7e42487e991e176df3dd7a1be5db4cdf87abb9cad";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+examplep = {
+  revision = 55265;
+  stripPrefix = 0;
+  sha512.run = "689c71afd2f5733b669b12c27014edc260ffca597b197ec0a91b5cc476bc6458699510bc5053863f9fa8ca47b9e2cda18939e734d3c23c7507f0646e0cbd9afa";
+  sha512.doc = "09fab96fddb1f42c6c5484e1716d1f2dda3f51c6c6f666343a79070aae079ad2bb67f210e51875621c4b4f8a30f9908d4bd53caa74c57ea8ec4ba330dbd721ea";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.04";
+};
+examz = {
+  revision = 67303;
+  stripPrefix = 0;
+  sha512.run = "7394aaadd38993f44b63409c28517af05f9875840d094fa4467e8bfcbf1be4af41327683264ad81107f2f84f024fd683a62fe32c04d9f61ee0532b100fec93f5";
+  sha512.doc = "400eb0b85928fdb12e1afc58036f6cefadc301ae4a3e659d1cd1f2fe122231729cafbab7a05910cb47d969839041ea240df26e510b43a6728e2d1794271442e9";
+  sha512.source = "df30d1ca746c4c4efaef640884ea93eb3d97288addc5571db4ae76454ec26e2b57df5e401314b9628454774c8d29b4e69b2a2e6391c30da2c29a7b7330e670ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+exceltex = {
+  revision = 26313;
+  sha512.run = "ef8495b4ef6937af022951044652ea1fb1dcd3f65961408e84a52f9053db8f4fde6703f18833ee9cd002bc058f01813ddf765f575200211563d6e16a956d3613";
+  sha512.doc = "a6c4ae60f2922af773f67494c30407b5b6ead39def9253b4710940774e619496a3c242f7e9bcc8733fc733234679bb2b01c6f4571e30dca16c8eb15ad8d6d01c";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.5.1";
+};
+exceltex.binfiles = [
+  "exceltex"
+];
+excludeonly = {
+  revision = 17262;
+  stripPrefix = 0;
+  sha512.run = "b83426d7ff334e64f8a5566fa905f1c03478ff68da5b74b85dfd6c872db7a63454f627db4e6bea48f8048da0d84bd80b269cf5cd3a5b487484dcd8f2e21c5058";
+  sha512.doc = "11f1a4e7b0bfeb5728ab632756fb612b784e7a8b46e68c2e5cb3681928811d394ac0b7f508e7c655945209b1e75837d4ec1a69bcaa6b0ac8d45d66302b4bcb13";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+exercise = {
+  revision = 35417;
+  stripPrefix = 0;
+  sha512.run = "8de2044404690716d781a3b081181d9a14596487213762bb1ef426a0951dc18b1097a4cd8255bc7094d9d5e7f874e68181849c173a4932e7d07c46e14d1609b1";
+  sha512.doc = "3059c297ecb8a990bac32e1e52bcd6fe39e6958c96c145ad70b937ba89284a6f447a84e2f144d31aefa1c446331c7ce80ccba926e288d7ade917c7aa68095076";
+  sha512.source = "fa76e8b16def4f53a968c897e12e37707c054c3a964f14ee9654bae4e7285a3d300d62f0a79ba7fd80b2fa15e9a334bf38f3a744f0c0f6c32659853bc9b57855";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.6";
+};
+exercisebank = {
+  revision = 50448;
+  stripPrefix = 0;
+  sha512.run = "6398abee37218c1c4b0e21f7dcdc82b49985888c8e5cc4702fbe20942471cfcdb8bb37c66edf2c6764d9a38dcc932b8584f65bec8dcf75ba11c738705a71048e";
+  sha512.doc = "d7b262b7a9ae3a45b69112e2924be8ec7cb2c13a8b973056e849cc5a0f4c82f85d4b5887a3286360b38c3459bc99ea9d917cd1084d6abf1ffc343d7ab522fed8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.0";
+};
+exercisepoints = {
+  revision = 49590;
+  stripPrefix = 0;
+  sha512.run = "cc706842f62ffd982dfde7f503f226c7f7050099b581dbef6e5e7f85269e3110a738232f1a99752b353a54a91ae5ef145697ff36ad9df1fb69ce1051bf92858c";
+  sha512.doc = "81493e680086ce4d833e8e9107a056daa4e74e321964f914d8824e25b4dbd6c181b1e10d41ceecf27d18baa53958babf77b0edf4c0234e0b80a8a3f5ae49c348";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.3";
+};
+exercises = {
+  revision = 55188;
+  stripPrefix = 0;
+  sha512.run = "90ca30f7417076a9933970d6c8559317861015480ae5da813e19e0114a6838084317fad6a0b1aa295b7a8a8c49038007a36ebcf4ee83f54fc0e454a317943923";
+  sha512.doc = "ba5b8125bf2a59646f401c5d4968f1e00b5d9a35293bcfd7c67c54d275b8e4b1586a5f07ddd097065259935a541551a8b990f5dc737e1be8e78343382b7be72a";
+  sha512.source = "32728c5bd1bc6465bb82ab95f9c2a4fa4a403431a8369373d75861ef0d6af8850c108c223b6e202f03b53f87d52bbf45f07a81e75175c0896951cda89cf20ee1";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.1";
+};
+exesheet = {
+  revision = 69252;
+  stripPrefix = 0;
+  sha512.run = "c659dfcfb0519983d4b45bfd409a155b1fec79332466108f7dc7535b5141baa8c1f48feb7929849e02077d76df15b245b60f6840c1ecc3c4d253aaf218af7422";
+  sha512.doc = "3e10ac55ce9878fe68cb5b34223b8c45f5a8edda7d527efd0cfa2c40cd8fe32582c507aa03b50afd0c7a28a251786ac5cee4a9612789243993db2cc656c77780";
+  sha512.source = "fe8d5b47bce3c0336ac7c0edbfc0d27580712d72b108f612dac4cb0957782b8d202244c84a205fc1731b667ec4986df8338cda346ddfae33f19aac03fb83516e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5";
+};
+exframe = {
+  revision = 53911;
+  stripPrefix = 0;
+  sha512.run = "426128ad41db65598a47e0baf0e019b6592c996b10442edddd624d86524116df4e0fd01411c3ac2f4153ab1af6f3a960680a085a556f07a90ff2b326bfbc26b2";
+  sha512.doc = "c8f9913899a52815ddf7d96f033db62e248a92ddfbafea2091a93b55fd1bdcb01734177c7e234ac2de51383eea7e21afaf77164ce496c7858f95d63800461007";
+  sha512.source = "1a42fbe43846bf5e3a87b43b4e855a0f7b198aad0f0aa311a4e7c3632b4d45ef338f107484190461fa15dbfa8a52dc7fbbcf95ac00cde18281b2d58e931df060";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.4";
+};
+exp-testopt = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "26b5af9bdd06a3bbd231b1b55c4ae8929efa06655656747b804425e802fa7d07355e510ac673590cef235cceaf88fc03e1493f4bee9c99ce2a32c32b9a3f9aca";
+  sha512.doc = "f4f7cda5cc8b3f8900cb12989834e5b1702f751248f58fe65a8d65ab69eb2a4118002212eefb609e251d4437579e635173366beb471e32d07d45c5c645ca506c";
+  sha512.source = "a41951719a9a4bc391216d3c5ed796b0f285a1a7049fa3617bae689127cffd32590ebd3212bf24b221bd7214128aaf564fa62e0a511f98f03961c16a39bc6fb9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+expdlist = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "fc0f0473faea3d8ffe917e654909374bef6b6d7e41d14c32acb3ee822748c6f37d1f5ab562b4bbfe35dde983f12cd9e1469bd2061aff32e3f79de66e6b3a6c32";
+  sha512.doc = "624bbc4ce685589e7e6393cd991b6305d8a20419b4538f2e1728f9ffc004ef4d724831515b77a607093bf45b8cefefe3e6a352403ddcb543b690b314fb469ce4";
+  sha512.source = "6713de4d316d2be62338ac94d465393a9e20e16eb2a088ca9086f2e9ad0052f799e47d89768e38fb04a38ed07800cfe9cc505b578b517c2f4cadbe520ee1bda3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4";
+};
+expex = {
+  revision = 44499;
+  stripPrefix = 0;
+  sha512.run = "b447a885d65a000f0b79b4c9b050bc89bb32b71426a29261d282fad72428fcf64dc6c660d9142114094bba32040c8e723190e553260c3899a1c1923ebb9f765e";
+  sha512.doc = "b0dce6401ccdef7fbfebbcdef9d68f073058f935eabc95fa45619f4d4d85e6b53e15091d845593255c000c3e672dabadb1cef024b2b0c79765f4f6a231de86e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.1b";
+};
+expex-acro = {
+  revision = 68046;
+  stripPrefix = 0;
+  sha512.run = "303eec6a2ff399771eb33ecaeaf85fa4a95dcd6bfcaf2a99d702dd148c90b99dcb6ec292170406e497839d5c64ca1a5a6faa20e6cd64a497eae7900b2f28f098";
+  sha512.doc = "cb24be981f9ef838be718f44f2b69ee03f81bdd0c6bb49ffe632214f3b6029293d92bd492f59b0c34bc39aeb506204f747a6e02064a9f222cd01053fa1ebe98e";
+  sha512.source = "c07114ec326345002f5a4379125516083452e7bc38ce949280a850095d260d8545fc1a3672206163dd43985a48a1e249038daf401359be8383c889a01397982c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.3";
+};
+expex-glossonly = {
+  revision = 68860;
+  stripPrefix = 0;
+  sha512.run = "e7d00f33d6a63e27524b9ea2fd7cfdf5f55bbcf3a0190a6967fefa11b4cfde4990dbda74da0ebe14e6fa76e8e0e4b5084ba352e39dff46f8e2028aadd6dda26b";
+  sha512.doc = "7ff5b9dfada3ef37c0ddc28a472a33a816d52b7b9b265291c640527e6b8974ca21d5867f7e271856a920589062eab5563b29c919a7df66b51af93af5e12fed5c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+expkv-bundle = {
+  revision = 65623;
+  stripPrefix = 0;
+  sha512.run = "969711569e1a27e2b08fb7aa9049413ab55c6799d6e1b6cd1c92a79f82214e36d26608fa0613bc3299385a94919f8f2d0029bd28ff2a649873ba6f5da74d48fc";
+  sha512.doc = "091fa4f7e8a3b321f02c874160eb92aaca0bbb9b0abb895c74f398c879cf52945ff3468f5f9f4f9d5ada750c47c817be3f9280328e6958ad7de470a11ca340b4";
+  sha512.source = "aa9721025f7ccf9091933d95ff411a7fdc763f9d34bc191eb693dd2fdf4e8056e6db929977c89956cd4bbf0804a2c6f1e902b06e26047f55e11e6e2c15fb17ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+export = {
+  revision = 27206;
+  stripPrefix = 0;
+  sha512.run = "04b5eac3e263fd692a1f4796ddccf7c5f41398075c9b15e65a0712cc83dcd85a65ae4506a882249e09c9ceea37f973be3398a0c31d2590e0c3e57549f07e9116";
+  sha512.doc = "169236b497ce09d685c71bd21eb6c35ac260d5978c03f074371386062ce8219bac1e501878ba13b60677c423904ed11b37d8e018adae573d135a1e1cbfdb84a4";
+  sha512.source = "844f1bb688d389fba93a7350b884b4cd5298ed6974d48218cd1cd2c863b9193e6d4d177f3ca1e905dfaa028f626fff4af4b9912ab9bf3eabd2bd9f4ce5d5da7d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8";
+};
+expose-expl3-dunkerque-2019 = {
+  revision = 54451;
+  stripPrefix = 0;
+  sha512.run = "9a642f593f0440159d802bfd78a472645dc1c320a43e8bfe91fd7eba3c0b67bc3ad9477c17b36f6ac08b39ddbaff11687e78694bc81134c33e1af085a9384a24";
+  sha512.doc = "d3b09af828ace720aa3f7b0fe979893f9fca3d358a69abd818bca7a81d45928cd02e0557bd607bcd91f223ad9f4808b0aeb61ba7269728d467eab46999ea5f92";
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+expressg = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "d380b7ca2efad2cdafc3ea6f2265452a85035765a221dd5cfeb33a03859dfca0e4cd01219995870c8943657d2525e25d32bf7e5b9fe8aa9afa8d17c1ac4703df";
+  sha512.doc = "9287376ba5aa36088b4a99455b727c0f60648d50421ebf2fd125542f208f490c5b57af256bf2b704f01a3e00e85e6023c69cb6dad529fb7521ee8cde74ae9559";
+  sha512.source = "4fc193835f6b283ebeb0906d847d54e99e5026ae53929b8855d78208212bc4ce6133359191830803298c1dfd07bcf7eb1e163fa12f8bf799a9eba381e11f7f82";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+exsheets = {
+  revision = 67300;
+  stripPrefix = 0;
+  sha512.run = "475b2508bedfef0f537b02dde56e489ec464ab500e1b6b63e7d8accaf9d5c17e8973d9aee8d370494115592febe684262fbad239fabe5a314c5d89e781506377";
+  sha512.doc = "8a00471bef6ab06927fc7c3a4c33e32a2f6de376cb238fa3e06e3e5a44c98b2ed413f74e60bb207c99c6e64f934bcb406d898bdaa0bd6d9c70b3b5133f4e8178";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.21k";
+};
+exsol = {
+  revision = 69343;
+  stripPrefix = 0;
+  sha512.run = "b29f3f9e3ba9d4b98b5db23876e69cce17740923419bc2999c742bd24ecf8f6434bc6226bf4f0bbbd17de79b45653b97ea85866b76892f07d696b0ab5b6afb46";
+  sha512.doc = "8be8c7e37139dabc5095c1c77f21a55e60666067ffaed66448db31a3cdf1ef2c21cfa4cd8e4021ecdb6586f1a7b0ece40ebd79f485f878fb25249e1094b7b316";
+  sha512.source = "d48acde6262a2eb4fcb2de2f0e3da5f7b0c33418d896235b2ec656df5fa946872c8cd4b266b8801fea5f9a30bae24154ab663358013e450736742604742578d8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+extarrows = {
+  revision = 54400;
+  stripPrefix = 0;
+  sha512.run = "ebaceefc82c42bd0b0e341d6d2cc589f9369fceec0a71dd7da40f0228b0ef1fbdcc9ba95ee0990b47b4a202d15c87630e46867afd8e9d69fe02fa721bfd590c5";
+  sha512.doc = "c51c13205ebb78eabf181b4a927bf92ccfe6756d732162407d1e98961c6b50fc20143de05c992feab2b6622a80ad7556eb173d87264e4c0059cddd10eaf8506d";
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+  version = "1.2.0";
+};
+exteps = {
+  revision = 19859;
+  stripPrefix = 0;
+  sha512.run = "1991bc0b471276ca3db68a8ba7611becc4557de4335a321b5c3e92c1fefbe34dc0488ab44850835b5ceb1684ce429e7756fb86d885e2da2177e0d9081797aa0c";
+  sha512.doc = "aac2e20a993818576f9e1efb153e9285b17b48827a1547a0c1033f22fa1a52f84ede214b4322ce4c6ddff69b8736f214f27370b3f1c006ea6e5fe2ab9fd64304";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.41";
+};
+extpfeil = {
+  revision = 16243;
+  stripPrefix = 0;
+  sha512.run = "5cfe0172ad420c3ca53c57be33fc56b205ba05a11876e4d14c6d86387788c73370bc0708bee46e43a02f10ce9db4b3611b4ee337ace44fe8fbcb2ca82f88b2f7";
+  sha512.doc = "8c2983b2e777e21e95d6ce1b9b4732491ad8a931205adb071877bf966fbbdc4306b88b35db87db4c3fa0bc52cfd333f721de2e1e7d233ba3c91d192a3574171a";
+  sha512.source = "6dfefa85e111b39bd46b2f39ae52e94a053569fbb0b263bdf02996bcb122913cbb999ed6c060e00a12a88e0ea9b187fe2e33a990bd75fd1f6f78082d8859071a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+extract = {
+  revision = 52117;
+  stripPrefix = 0;
+  sha512.run = "32889da48868c2335866bb5c229728f9a37dcfe552830ca03ad3b704d1f7a471ee120de2ffed07bcf50797f7e34dd6fce53c77f1b63d15071888171d44cc938e";
+  sha512.doc = "64fd270a61f5e5f39442a56bb7a20606854b45a995b9a455604139df8006a1b198ae332669de09c1baa5dee5ccdf59e5989d21c17376a764a096f535ceff3f48";
+  sha512.source = "c94663034b4069bb47f611b761f08df36e2e69705d491ad0405d826d81d07f0862dd2a7963cc1bfb0f071ca4ac56aedc96debdfbbb35b097a6a49f863ac3de2a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9a";
+};
+extsizes = {
+  revision = 17263;
+  stripPrefix = 0;
+  sha512.run = "5b000d25ff594af2895408f0d83eeb0e7d6dd5604c53d5acd835898197e44fb88ed2469039489b75b45678f28182dc88a0af56ed1b1730be2ce41e6e81f13b7c";
+  sha512.doc = "9bfa898f7eab416beaee2938902fc0f3a5ddcf1ce972f30d18a683756fb53bc8f66ef1220bd3bbe6ca6a473959a67c55c18a7996eb095ef301da8b594f42d3ae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4a";
+};
+facsimile = {
+  revision = 21328;
+  stripPrefix = 0;
+  sha512.run = "3a179a3abcc33bd0f48bf267338c8a7dc0186f7eed097af74cfd8a936956952fb50876dea447839738842fad34c724c057f577d427a82fd82f85c7e8ab80c8ab";
+  sha512.doc = "36da402d7b15601ad768aa1e07f356812ddf0a09b30d19c13bfecaeac847537caa3be31036cb80441370b6c046dee24b13aa3e04f339476e9ecd18cf09c8c9cf";
+  sha512.source = "ad8f90796cdeefe11e6c12e254c4571f2be57f5cbeca8b68e301d857a0ef8e52fbb1e32eb2d39e6d6b8c7ea19af58f6087c67c9bcee58e84a32038f18bde223b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+factura = {
+  revision = 61697;
+  stripPrefix = 0;
+  sha512.run = "6a90efed09588600991644ba847b16641aef40dd0b989b1944f7b48581d6bae642645fc97023e6cb0f1dde76593086c3007580df25e5997b92593020140dc212";
+  sha512.doc = "f449e749dc4b61a8a15062fc9e5556414868cf904bb279c5e997402fbd6d7f21f3e8f19c19af5ab4049a1512070d8e74064d4823d56ee7a20ed03f2a2eaa1b91";
+  sha512.source = "d26418ce7f0c6d95a1019f16406f39e791ba79733632cf5072b041a3ea3b70530d08356590aa5305b9d52fda0d882669d52b1bada9a3d0c458c2888cebe35b9f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.32";
+};
+facture = {
+  revision = 67538;
+  stripPrefix = 0;
+  sha512.run = "30ed6e76f8801f61eeea27679c8c23c050c7d17c334eabe0a00984b1117f046314e59c2c52225ca7d38eb71b93efa57dd563fd582eed500fdf238fac9540b606";
+  sha512.doc = "c84aeae53d8324b9e4f1d386dbbc8774d1b9266ca5c8b893a7280bdbc2578dc9e2ca9975874f4d0cbfc5dc10455cac322d9642534b0fc1384a6d7d192a816d51";
+  sha512.source = "5d2f865404607f25af2c0704d83b88a359ed5601a970c6798eaca104a2b61bf45745e271c9f19a6b41977cef1119e6981f986a20e05a07ba6053b24c5fcc4832";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-20" ];
+  version = "1.3";
+};
+facture-belge-simple-sans-tva = {
+  revision = 67573;
+  stripPrefix = 0;
+  sha512.run = "b37887eff90040c6705396b81ecf753289974f1fc5e7e348db2f0414ed7f1afdc0179814a6c89f0843f310b6afb56e8a3680c787fcdec886dceb49ac5f25be9a";
+  sha512.doc = "5d5bd334d970ea18e5e041e629893fa42c391a3de0652516efa258b8919429d1d6fe7b43cc4bb104d762e5a5770fe3fe8ead51c61c40ebaabe25e3d15311bf0c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+fail-fast = {
+  revision = 67543;
+  stripPrefix = 0;
+  sha512.run = "dbe4eed6fd1b3bd3c2d48ab4590043c2bf95871350bc1b56f47bb4dc27ef3010097741920ce0a935aaa03fe9e2e8de49db7906dace3be314fca49e816c7451b3";
+  sha512.doc = "6c5bcd8329cd21f13a1e0074ef4c4b5bc474babd663d444d9ce48d23ac775dfaaa7cefec393a6ce2bf81ca67c1429c65dbd41511162030b80fd1445c9aa5b541";
+  sha512.source = "0703b26d3675c57d5d81de357fdf1b50133dbb2a07710338a243dff8b04370f2af0d1c216d1b1751e1e281436427635a6bb5b226e0f35085f9dfaf9378bc6777";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.0.2";
+};
+faktor = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5c598fbb40d7b37ee5b66bc1bfa8b0b2a0b45f7e22c992e6d0c85ed952a79a120803d41f9b4a13bcbbd6424c555c8b9ba6adb4eb79d1056fbf759008f9b741af";
+  sha512.doc = "57934606287afaf1471f1207af5d0e97533a504aa83324069154e88e70f10779d2eb19ed2a9e177c5a4b2cce4203b576272fd2513d989d4ee276330305597034";
+  sha512.source = "01f22e60260621a41e4efd6681b6fa226f7461f47348a79dbd75f214d606c6af2fa54d904792e653d1accc22298385d4cd658c204e653e4320e2932d742da28e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1b";
+};
+familytree = {
+  revision = 63739;
+  stripPrefix = 0;
+  sha512.run = "2f3cbff39c42d0d6414b372c165bbbf3a4dbafa28bf16ca47a89445066480317caedc9b371f9deb348ba986de2c14b71b1820aa731e74d72a4b0b39a413bf9a5";
+  sha512.doc = "55f035425d11f070870cdd8ccd555447861823754a91b0a31f54403013a6427197b3ea893fa7e75e63577635a5896288f29ef052c9431aff3f1a9c2038ccdb1a";
+  sha512.source = "b6f8e0cfa54b13a95b4ab39e8a249d50f5d09fd325ed8acde8b7fca736d6aa05432fe3a40554f3c289a678c1349db542c6f321e8a35f5bd486ce6b0675450911";
+  hasRunfiles = true;
+  license = [ "gpl2Plus" ];
+  version = "3.1";
+};
+fancybox = {
+  revision = 18304;
+  stripPrefix = 0;
+  sha512.run = "752e26abee96dd2bbf77b30a6d98d48a1673632d5601d28bba5799e845a015357b96302f3f1d8977f0458003d3456df4694884a05ccb6124b76ca8f7fc84fcbf";
+  sha512.doc = "2c3e0466198d392af57b2bda16f80589a9aa9db992272980a2e7ab9d7d1842d7e8f2980003b3b09648cfe0b9a1977562534ca54fae120bd7e4d950d25a83c0c2";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.4";
+};
+fancyhandout = {
+  revision = 46411;
+  stripPrefix = 0;
+  sha512.run = "0091703483cab573f9c9202603d31e310baafe932f929ad852c23d2ca97f21681637bb3ae34fd3d916f3e50f553b42ab1682b437f5a63b67c6dc4b7b7f202c80";
+  sha512.doc = "be4c7b2caf2e85ec192f3aded87309ee2361fbb7e8fd1225f8f98f96446251aacd69e04e306473d06e14c8a8b686dd7a1c54cb0311bc4138fc9c34fa2d528ddf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+fancyhdr = {
+  revision = 64977;
+  stripPrefix = 0;
+  sha512.run = "51254df035199653a78cc06c6b62f3d9edf3fa8c78911c0c667d5043376c9d449ce5a412ffb4e9df2bbd7b7459be8bf43f5ff296015ab2b2e146673290211a3f";
+  sha512.doc = "3c3a1f01fd799b8530634ea917523f6a789f7f1b4dddf16e269ebb78ddaf749fff6ca07984044128147fbf5e568837688906c36c409688150f61490565b1a06e";
+  sha512.source = "57db137f52c1f93ac8cb70e234985f6290d326f073a30a2eff4806da756126238f36ee87d123dccc71d4f73968e1342006fae63a96604e2b1b858d798f42c287";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.1";
+};
+fancyhdr-it = {
+  revision = 21912;
+  stripPrefix = 0;
+  sha512.run = "6899f3c11ed4a8f7476fe954166ea7576446b670d0b22737766927fcd29eb24e6143ff3031b974856562a7ff55e68f208164729618a4d28d28b856919f2a666b";
+  sha512.doc = "cda5ff0581545e4eca9787b27dddcdad226b5dc9a630773b13073e9248b7b30b985fa5f5fc1bc5380e5a0d96f06c666d4e7e73168afbc2fa4ed0dd202967dafa";
+  license = [ "lppl13c" ];
+};
+fancylabel = {
+  revision = 46736;
+  stripPrefix = 0;
+  sha512.run = "950455301b0bf3ea3be0817a45c4e7453ba95c8afd397c1cf9ebf559f160e2828f414f0dca4647a80481f6e8daa0902e24692469023c21ba844afe1edda60b2f";
+  sha512.doc = "3a05f2b388eb2a22a0b48b4761b3964c7b0c616eaf0c8adcbd4f375a3dd059b3d3b0831e754842bc084123fff7a12f59c87c5c5b362739c062f36a215dca2ca3";
+  sha512.source = "5d0ae7fd455b679221c1877a5a8fe58da76d3db96de7bb6eaba24c50ef9a0bbc3252858276e4f0c6b81161f65e985911ab1608bca21418335e23189a2ddac425";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.1";
+};
+fancynum = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "93e1b88ca722b4169a572285443fad53b66ac59a3c0b6465aad54bd8d416046bfd79897db3d8f318f9d6e004c958b94bbcab16b1183d66197e1078840934689c";
+  sha512.doc = "4be390bfd7562e0c94dc19fad3e0f34e52db393878290773517d6d7951e428cd3d0dccf5f47f6f03e5f0b380ebb386c8d89373e8c8e4cbd16463a9cdd2f2417f";
+  sha512.source = "8f2f569fbb2a6ddaf371814e26b251286f8046e8a1e923f18e67b165c26c69cd09b46e39dae5fe00a427dbe4f95172680973b3eda7be16c60cbdfe6daf37710c";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.92";
+};
+fancypar = {
+  revision = 58895;
+  stripPrefix = 0;
+  sha512.run = "2f4e242eabb151834c6014a15d0ae012949e5e35f87bc32374e12f032bbb0fa21d6562b207ba855afaa28c36497cda3ca51eaefa579956f51283c84be8cefbba";
+  sha512.doc = "1d972212b86e56eb692cbcca5d7d47b9454a6c0900803818c286b6cc071df93c5444d36eb29a8035e53c65fc9c30582686a6b9203af8e142e1cf1c31a6e4d58d";
+  sha512.source = "3f88c040637b50d49981474b38d50cb5c3ba7baa5b6390b53f98e3315d1f17f0b0c48780f4c719583f3e452041ddaeb36fdfa367a616ce07a2758b11db152d39";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+fancyqr = {
+  revision = 64182;
+  stripPrefix = 0;
+  sha512.run = "fe2a8078e8491384ca4cc25fd058433dde3d4d4fdbd5784ad67150169f1ff5eec85c6f2c2ae7efb6aff6e6fc731c18cc4a156d968872b69d58a36bc042825c2c";
+  sha512.doc = "afd49422e17012b84a9ddf9ead15af3eb4f5b0e8291f76b9a672d4a3097d9f390753e0090cb67df94cbd5cc88c45ec2bd67b55594bae9ed4b945ad293e4f07df";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.1";
+};
+fancyref = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8f4ea5f16bfdbd06bdbaad76da724a1aad82263f4db2c24cf5f2e9f2db9f2afd9d4004d629098f936e0c2d4dcfa5fba8bd278746b90542f87b547e20abb0bcba";
+  sha512.doc = "2231f5fd45d45cb7b538852c95b90db35fde9b66629d17ec9288de6ecf5339359c17fdc8931019fd4acce61ec2927a0cd494cc7462cab0df13d7660106b6a142";
+  sha512.source = "65de000487a8d317f0d05ff6d35574cf0bca521e4ab029637fd459b34f8640c53fed78bb9a54c21e4f5cc7c03dab221995810057350c46690c948a9e436c74f3";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.9c";
+};
+fancyslides = {
+  revision = 36263;
+  stripPrefix = 0;
+  sha512.run = "a0b9ef4ce804b78a60b4c3a25d5d70bb7ec17324d295cfaccb64d166bb1a704bbd2baa5cf6edfed7adff03f48bd3f3e7854e2fbfbbfdc7eb953d567a257a6e46";
+  sha512.doc = "77e1839377ba440d4009f30ae6e58d843ec4b7a1bf7f0d3414700e32c9a01062cd6506cb589039299e7a4fd945f9ee5cd951a62fe9795f822089152ca19f3441";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+fancytabs = {
+  revision = 41549;
+  stripPrefix = 0;
+  sha512.run = "0cd45edda0062f4a0fbc26a0516d7f5b35cb4f8dfd4072830da880369d71d8a4aea6a7d5dd95a0b479ec3128170108f114aa00ef4b0c8324c60ddd214568f5cf";
+  sha512.doc = "0113da627d27fe88c4faa87e1564851344dac2efb75c78facc4da49a8937e2bda8e1f22997a2018b368001c24e721cbf623fc199d03673701a55c7ca45404770";
+  sha512.source = "4a7c92f30414a595cc8c928b181565e3d50614fb4e5a128197bb4a8f90a50cbd9c75ca447bf37c41e9fe3c05d4422d6e3618da63edc51f240dc3e8d55c8d61dd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+fancytooltips = {
+  revision = 68931;
+  stripPrefix = 0;
+  sha512.run = "b24e747d4ad811002cf742f6c74855a85b69745661de1cd1d4bcf41ec18ff62d34b39adf56393f79214a1cd4e54f72c54796b00d573e29414825b8c1a3cff317";
+  sha512.doc = "4d567cc367e19727815efd49392ed0455dd47d9416d6c1a4cf846eb017b3b3cb0c8060fb0fdae0a93cd05a156422f5ece0ba15e54bf3fef9b2aa8ad6a7c4166b";
+  sha512.source = "96485cec2bf6d02338699203cf0afb06a43156a66c7c55153bcb158256bc816550b2a0dd7a20cebc8bdffa84c1e40d1652b9a829746880203b49e80dd0297c47";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.8";
+};
+fancyvrb = {
+  revision = 68772;
+  stripPrefix = 0;
+  sha512.run = "1288adbf30e9bb084d242dab84450a60b0a9f342b20600518ea324b01223f61996576b4713b476c3cda41963047880a16a4e54cc773a0508cca1c14ea8230c2b";
+  sha512.doc = "b0fd885f1d5a1711d422f1f5340d954d6f217dfa69fbf2674e0523e335681b39270579d2e66e1cdc5246dff251725d7181f983b900899b80a927399b00f1f34e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.5b";
+};
+fandol = {
+  revision = 37889;
+  stripPrefix = 0;
+  sha512.run = "309b19d6bff9d3e009610d698a73ba191da70cabd57157f274dfca7583a9e9b31fc30ea52b2b2ab3386be7290a680f8eb47dc92381c3da8251b01d8c6a65c3ff";
+  sha512.doc = "d74e78a1c863d3865ec4b21a4c762bf6e2c30a8656fe0ec830d1e56b9fcb48861f316ccf8d8641e7c674e25f1ac2292d10ff2127315275347096ad325828d7e5";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.3";
+};
+fascicules = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "0d6318bea8660796a5ddeab06c416017ec2075633a391a536c7c3355de7b7e7f711e74f0e43e8b4fd39debfec797164f1961eb27776ca3b53eee729d0e27a479";
+  sha512.doc = "ee9a54c4b2d746577e94abb6d458c473f88bff18e4f0f57bed5923a1ef08c6ca533183ad9e9eb1d1bcfae6aa5082d88a9c08fe7cf96c3ab9d71ab099ec64c1c0";
+  sha512.source = "c5fec67754d84dc42dd6c62267c8a906a5717f53d9c063efc51b6cc45f3f616d270fa3af2658deac438739cb231bcf9b2c9497477c910f576ca943b80e03f3c9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1";
+};
+fast-diagram = {
+  revision = 29264;
+  stripPrefix = 0;
+  sha512.run = "cedc8305ba0a7b1d22274d869629a1872a80a4001b443c8baa93e44198a5dd88e39c16c28bb5edf9fedf4f8f2f68c6964f009cbf6feb21c7c14974c4b598acbb";
+  sha512.doc = "cd8e3edf882fc16b5757f59d16ed1a479e437eba36c783cd86cdfb9cb81f8b30e8b95a522ef6fe4b6e22b4b0bf6637e72bff734f7771034cfaf85df935e4a003";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+fbb = {
+  revision = 55728;
+  stripPrefix = 0;
+  sha512.run = "d63e140b60941f114b7aa7c82888c224715d6d173b88ca85aacdb3f7635aa928846e804e807830674d3bec0fc801435eb9e07406270c156d40e8c1994f50aa3c";
+  sha512.doc = "c63214ea5a91ea6bab66a866a65c2ee43c64f49afbc3235e2f55cc0de89fb3a269bea45fb7d67ccbcda4bac3249b2f2ab14f780fde7cbd112231b16e58eac67c";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.16";
+};
+fbithesis = {
+  revision = 21340;
+  stripPrefix = 0;
+  sha512.run = "3e593e312ac8efbbdd294e6a00ec020678dcb12259ae778ddaed4d43a800aa19ba16f8eb15b5122ab22f44c5e23c77e4fe733c7772929ef55589d387985db694";
+  sha512.doc = "92d0ae3382aa71260f6ed204f6bce1bcbac26985f41789e00c5d3186dcd448bd169b7641fa40d34cf87c556ca10573b0d8cd4235aaea8a0d1533dc40c71b3779";
+  sha512.source = "a931b41de1feb5b0a78bc40c20bafebeb529a8a8b351344020032641ecf9673168328dc271228130ff22ea17190cf021b1dbe01635d7cf77984f69861c84c02d";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.2m";
+};
+fbox = {
+  revision = 69041;
+  stripPrefix = 0;
+  sha512.run = "705a0f1f6d5009f0ac2fa1059f3029ef7bf7e8fdab6e85bddba822eb50dfcc049f94b7ff43afc97234d44f42505e1cd4e6caac1f22178949dcaea0a60e572281";
+  sha512.doc = "19a61ddc64c3c5108ec05089e988a07f0e10d772bed810898bf82046922eab58a389c3816b15055b5c2e8a4d1392305a351802eaf3f1e72799c9c192eb8c1484";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.07";
+};
+fbs = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2d5bce7890fd8e087e035e60064bf134d8ac7ca2646f7b846df8fca7c594843c2778d0ad1752ffefed40283153194b5da97156e866bb4b8bd10b14c8ee3f2c4d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+fc = {
+  revision = 32796;
+  stripPrefix = 0;
+  sha512.run = "12bb408f7ba4774d943aa954bd3d2558a329d383a65cd4780f6c5bdc39f51b943f01d87ad203aea3b02768dc0b9ab42f681175c18a1e1dd901255aae05156558";
+  sha512.doc = "a7495a0d6bd394811ff22438a42afe3c5109633da7c606a732f4c5746cc4162fa1c86ac3774aa7754e9b07c499f3519423d4b6fb212ecae156b0b8e8f848d914";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.4";
+};
+fcavtex = {
+  revision = 38074;
+  stripPrefix = 0;
+  sha512.run = "db440d7310805a7f3d918996e577a07c5d8dff72e6d667f00c1ffe5d88e3bcb689e794837609d9a0760530e923f9a28d3e5c052cad4c38e23ae03454e0ec26c4";
+  sha512.doc = "2060c70b6a926aae23c145f11c7c6e255f684f925bf5447ee98fdd6f6290d64fc5a92ccf8cbf85e0c6f0d6fee869a2d947e3df8726fffa4a5d2c87c217beef59";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+fcltxdoc = {
+  revision = 24500;
+  stripPrefix = 0;
+  sha512.run = "c14db194a73247122e589024824a53125ff10e15f8bec2475530aa41e78d74993f73474ff9b3899bc499c0cd8dd3e1ea034ea821d233c2a512f8c4d4d06d095c";
+  sha512.doc = "4aa6aed9c5b4ddaa63eb2aa7e529da03dcfc57723a6cb40cbbfc729636e459f4df1e292bdcd20093595cc3ea154787fda41abb4f6f46db2a7331626f181f47d0";
+  sha512.source = "6b16053cf7941063e4f08a249d1b4dcb61127eb0f22938353b17b959e7a9cb78d7953b81346f25a6e49f4a7c8bc602b3f820c3b9acd3b84215796b3ef1a63550";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+fcolumn = {
+  revision = 67729;
+  stripPrefix = 0;
+  sha512.run = "0edaa6ad0c01a2cf9cc06c65fec3bc13b85be893d7fcf4a92b0c8760d1999e5c3b90975e44c586ef104b020eaa0a18cfc4476b3abb243c5f2862941864113bd2";
+  sha512.doc = "9be3c50f25522c3fafb52432b74f6ab755afc02df04da84383ebb466bd9424c716082d3d6ff176d32c03c9097b6e39c6f54e70cd8218784492d2ebe37de0ebd8";
+  sha512.source = "e122343109c0367d3f22bfc2b3775ae10545a01d18908cd227422060ba3c685e35beae26c6892479e03c3a4f774e2f9edfcfd60d6cba0880a4279e610de1050a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4.2";
+};
+fdsymbol = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "e8b2d08c3e64def77a688dc9d96c0b9da9eaa4c942e571578fa0a7e6dff9eb3910ecc66a7be9334ecd41fdc0023f89d8c98facc2d42cd0095c75d6e1b4da69ac";
+  sha512.doc = "88efcb300a84b6c214fec37603ea23cb51043af78e1af8aa6e3ce157bab1c8e395e71991c7ea7854051f4706c6b702fe0d48edd76e919a4592e57320b1f77b98";
+  sha512.source = "7be26193e05d57fba2a91d57b49cbadaf5594d9ea843b9d9f1ae15608cf7d45e40112aa286bee73ee16da976c7ca7bb7aef5627cf8f0023cded506a493426b31";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "0.8";
+};
+fduthesis = {
+  revision = 67231;
+  stripPrefix = 0;
+  sha512.run = "e495c127884aecc1856b99705c262882b390f9e800dca59c2fa1200ae584a424ef4ce7752a9bb5dd7aad9a94c4a685af557163f2b07327e80f5b99153532d915";
+  sha512.doc = "31a91fa609f3ef8631d6ed57526e932d5c110e4d84cc78862d1bf4c682f8de97c080a1e2d82e60842b731e33505b99dd2a85ae899705ebc45de44e526358703b";
+  sha512.source = "d2cee0822ae532782bf30e1cd8b07b65a4c7ec3cc29901b10a25d81c4cbc224a9724a6ab2a1e7bcd8ebdb05f6936176d95783198f6bef20dbefd4e80ffbd7349";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9a";
+};
+featpost = {
+  revision = 35346;
+  stripPrefix = 0;
+  sha512.run = "9d7c35499df5c8c8efe8ea51d88c4cd9ddc6bd5238ec527d842aaa9ce42c30bb1d73c667f5aca22f385d3725c7443f043a2b63cd337a7f6d5b5d5810ea34bf64";
+  sha512.doc = "e4eefb43d63c6522c3080a76b4df3a369932bc9e2f868ed0143d62fd2365bb74e6891705b287d19b4ca4b2560b0573d6ff9a0e5cf2a3da2e4b21482cd6cdd0b9";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.8.8";
+};
+fei = {
+  revision = 65352;
+  stripPrefix = 0;
+  sha512.run = "2be4e4d83c5a02bfd43eed59741e07868e0e22489bb087f91de0681dbb04e999cff2bb9441b87937c3e2cfa60b7d4a1641dce4529a5aabc15df12d70e22e521a";
+  sha512.doc = "adb30683e075801f74cd87bad431c880ffe410fdba738b197932af4f0efdb1c6530ddd66c6c860c1097b4f9e37601a1a9c744a1b573396c29898f130988174ea";
+  sha512.source = "4241c9b50e339c450ca124285205d6fd7d2d2f73cab829c0248204012420f5ccd0615a1d1986cdec8efa15b2c8b8ed54ffd1d815f22ad0f9aa8e05b9ad485c07";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.10.4";
+};
+fenetrecas = {
+  revision = 68779;
+  stripPrefix = 0;
+  sha512.run = "6337deecbd49a9ef9d19ab31cdd705cb49bb127ff451d9f3790a3ef8fa95ee7b65f52d49d22b1698d039fe268fcc178c07f30dd66ba7aaff69e883594e6956c1";
+  sha512.doc = "8fda8eeac400f810e3839f5197c53b808594c2536b1d4a5c7c96c788b8faec40a4efe403b065519d20f09cc1d14fe80e9e060d2b8e4a396cc9c1ad34dd16fc42";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.4";
+};
+fenixpar = {
+  revision = 24730;
+  stripPrefix = 0;
+  sha512.run = "1b09294b430bb9ab6a4eae11549500b224514e55bb99329a4ee3d9d72ab906128063537302f672a772c02ff4372d46649656a88c4a303a9301976fc7a804387e";
+  sha512.doc = "6ee02d615438e99df82f939a8104097e43802b00af2a0e7be56f329061722cfc7df0edf84c82ac73754d63a703533bd6d5b88b6e648bedbc47be712ff86ec5c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.92";
+};
+fetamont = {
+  revision = 43812;
+  stripPrefix = 0;
+  sha512.run = "20c5c83119d70a94e66aeec0bbb9a0494525deaf9addb9b91d8d5595397ab5a1195eb9d72056a5fd1c3ca490aef66b43558f5c5b86688e7d164360a697c331a2";
+  sha512.doc = "16cfb520cf8b3030d546e1c7f7cd41772fc9d16ea55db6920a50945a7aa3034050d873d3d5da05c108ee303dc1c77217c8a1f014c2e9beaf36d932e33aefeb93";
+  sha512.source = "de4a25f0a86f29d10fd1cf799ac6c8efc58633a7ba0c48bb33716c46e6b0e1c9d5be6ee4e8e4955739ddb324270e44d6fa658c360d03123c18cc275ba6abff06";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+fetchcls = {
+  revision = 45245;
+  stripPrefix = 0;
+  sha512.run = "6cd8e2016f7ff344aa06587fbfeb4e498d1b2e76d9a6ff64f167dad71c4ce6ae867d791660f50e80b6f2e59a9f2fff4c4c9b7c1cdf84cdbbec5113081b24a25a";
+  sha512.doc = "ebf9aa0150b06a0b4674e7be076fa5ae4b2ba4542aa28e1b9d4320ea0152a5cc9cbbf926d713f877e74ea948d6132fc36898647e4790c67aab651502c4e5d57f";
+  sha512.source = "067385746ed2cdba4501038cbc4565bef431f2e35e9069fe883c0de8669cbf6f59d8233ff2f561e8590fe8b32a7613a195104f89774bdae4ddd63d65deb3123a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+feupphdteses = {
+  revision = 30962;
+  stripPrefix = 0;
+  sha512.run = "b4d4285b33f314720cd07eea903bb2fc6092f96033f75d4b06cf315fd24d1a34722aa73db4cb6410a847e1d23a131ae329f8ebe75fca15dcaffb99097768f55e";
+  sha512.doc = "d87c0a7722f62a599bcc63f7ecfea190c64d82a4a4a1ba21d18c69866f80ec77a527a82cb94b0d081002073f5faab95119c6902e8f8f2c10d815ca2d206b1d4c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.0";
+};
+fewerfloatpages = {
+  revision = 58058;
+  stripPrefix = 0;
+  sha512.run = "4f5637bf431b54590e8c2a8ec27e3da3d801205b8cba053c8c1294ba0882bf8aef17a0e291c149799cfc3530a415202014570460a6e2e8986ef71bd2cc05567c";
+  sha512.doc = "a18d15933e6efbbe3428f366bcc5ba5ec0b254dcf77f7ac2e72c19bba00e78b44c98df34f57468902101f547fe9e88b2033430a02098805c6f0072e68ac82513";
+  sha512.source = "e98684d4cb79477c66e4a831c8571729b3da021bf9945bdecfe8a9ff57fb1e2948c42c3481adea0fb702ce4d56ac533b14f76e78c182500431af7f3671491d7c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0b";
+};
+feyn = {
+  revision = 63945;
+  stripPrefix = 0;
+  sha512.run = "30e3ca5e633d040fe2eaa88463a8c9fa6004b86c4ae264af9b8a9a3bf55f71f7e1eb21e656f2fa194ebc751648f411a094fe40fc6a2cade1fc31aa586da1317c";
+  sha512.doc = "b420c19b69caf39cfa0e54bcfc90f291d9ddbed21d771669bf82a0fb04b4099fd494d2287144655366af7d0ea9594a74d64867a31754278ab1b97ffa507dfc5c";
+  sha512.source = "578f093c588cd577ff696dd052ba969769f418dffa3b2450b71efeefd885105efcdc7be4ef9693bedc911940d2707eb084857f5db9197e74040211a9952d2209";
+  hasRunfiles = true;
+  license = [ "bsd2" ];
+  version = "0.4.3";
+};
+feynmf = {
+  revision = 17259;
+  stripPrefix = 0;
+  sha512.run = "d4eb87e3f086f2d39c87eba057fc490ce5d39e9c5ae39aa1c04ee8c3be9c4a188ef123f860fe74d31e0e9e9182909c39df3434ddcc618632723f00627f66397f";
+  sha512.doc = "933edaceff112f7442f7c662fda43f343b0e7e41f65aae4f1a45bfd2de18c1e4bda505a235eebc4daf2451846dab376449242217ec803f2932a4a1584038f4ee";
+  sha512.source = "bdc4dbbc449c911c0d516b10da18c1d541645ec57fd95c163d571a039c70ad46e6111717ffc86c802123c272509c85ce1d71d90f49578b2e228a9229f4d40f02";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.08";
+};
+feynmp-auto = {
+  revision = 30223;
+  stripPrefix = 0;
+  sha512.run = "64ca275292b12847d823322ced9dbad615a34089c8cbe43262e676b34db205ed56509f641e18e949523bd252ed1ea73eeb5f019e2cd052274c02b1df67860a25";
+  sha512.doc = "3dd88f5af739013ace4fd8eea70ce247b997e887c0f7067040ff9bf4e0300126aff53845ecefafa7bb52dfc4d05d181a1e96847e6a534c718c5a7447231539ba";
+  sha512.source = "ea29f32f9f1c628d63b81c958f7c8064e884ba1764953dd62fbe5d90506547846f52fe378f813a09090ef6991c9b7d2905095b04fdc0e26aea4c8cbcb5e2b2b1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+ffcode = {
+  revision = 69383;
+  stripPrefix = 0;
+  deps = [
+    "environ"
+    "microtype"
+    "minted"
+    "pgf"
+    "tcolorbox"
+    "xkeyval"
+  ];
+  sha512.run = "c71ca2c5aaee2d7c14384fdb9655d08e92aec6b721ef906dc8524bf2833ae7893497ba67840935c97b76ebac9318a3c321af7030573a9a57c384c11dd1862faf";
+  sha512.doc = "9239c853483203eb42b1069ac1135b360af07161426c77bcf8684626b19aec169af9a2cdfe9caa7cc75ec322b191ad4ddad9b21daeb546dbe5541d66615abb12";
+  sha512.source = "a52bdf256577148636f06a391d35a0a9c59dd73b91f33b43f3f9f0a796f4995140c5563f4644a1f99cd015adbc260b67785a5c50c3af649c45a69495fd8e7af9";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.9.1";
+};
+ffslides = {
+  revision = 38895;
+  stripPrefix = 0;
+  sha512.run = "393903c180f2fd554178c909bf9a4c060707d8f2fac44022b4811526c7b505a0354afed77f8ae0fa3fbcebed3918a6b46f9e81206be78d7ed6b1c959cd3473a2";
+  sha512.doc = "4a8e176b7bce3d54464a30497e41d5a899905a0029199710aedca7234612092f0b2e265a465084536434c9b8c7f45eec3f2ac3df5eef66cecfdae5cdae36c798";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+fge = {
+  revision = 68353;
+  stripPrefix = 0;
+  sha512.run = "0f97109ffa1daa97d4ad496c2e948a123a9fb04393e668c9c3b1a14131f6ed7a21ac9056c6f3766e3ab2d3a2caa2baeb67c4b59d6c6489299090976d697e10f8";
+  sha512.doc = "8505aadb706e79e6e1d0faec203de577cf76acef5360ed7c29febc2239d2719a717a59e9d4f8fbf5d2eefe67be1ec3cc1ebbf9be47930750582df29bef2fa9fe";
+  sha512.source = "c1d966e094ce4a61c6250717731a20c3db0a0e438b5d8acf1b5332cd05a2f6dfde1d0e99bd02ef5ee725c1242da9ef183f680a03bb7f10d7ed50d0ce4c2bb1ae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.25";
+};
+fgruler = {
+  revision = 63721;
+  stripPrefix = 0;
+  sha512.run = "d30678e5f84074c9844845bcb527333a7040b9f9e787f8aad92103eaf880e89bb1747946cd91fb9b8229c9a8fcc8e2ff81c3dc69804d37de3be1b1f6a4cc5a00";
+  sha512.doc = "74747c385452b4d996f70413a88920d59b4ac8f4f61c92516e4e60f36cce68c8ce9bd72f621aa52698679aa10542bb2118088058c489230e7c2081b17d8f987f";
+  sha512.source = "3d7017aac6c2d07cd73166b1aab65452b11a97a7e34516c75c1a8e5123a3587eb90b0455846b82084a6e997340624c1a1053fa079bfb202a558ff4dc08398cf4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+fifinddo-info = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "86767390bc9946b8f8d47dae0334d7cfc21ac2b064b00ab70732f7ca3f50d875a35dbb0e477ef1c014452fc14c177a1c5c6b96ee334c99bbc2bb49eee9ffe6b9";
+  sha512.doc = "e6635f5cc989bfa0da9b2b0cbd5c3719aa793552f4c1adbc1ee218a78b6b116d2c2046b04254e3294834e63901ece9489b8c86421afd3c58aeb8615b5859ee92";
+  sha512.source = "f01f2453c206cc7fefaafd1269c77b43bf1f24a8fef034ebdc40ac2be5c4ef553d2096f4168e7933e63aa816b1397c74fe21d725f0a6bc3d8187c751145a44a7";
+  license = [ "lppl13c" ];
+  version = "1.1b";
+};
+fifo-stack = {
+  revision = 33288;
+  stripPrefix = 0;
+  sha512.run = "4121e3cefed7ffe80bfaa8b054ba0825ab0fc2b4073a845386de4db3650b4d68c48a4f7378ffcfc4a221b21ad30ac6e199920e7d8c44f503b35c14cf4c001462";
+  sha512.doc = "220d9b2796c20251ae568d1dc5a7eee1fad5cf6aff26a2b94c1a2c9dd6d853dfc9c25377ec8c3d6edfc43f5b4cf645c459754c5d6a642506fa7779cf79f1a901";
+  sha512.source = "3ab0e67acb7895c527be3cee1ab0fe7ba03397410f9970dc7c286418ae6e785d8051b82add959ff7d0596d6983ae6514f70c631672fce5c66bdb6542a3b7d777";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+fig4latex = {
+  revision = 26313;
+  sha512.run = "3f01676ea85d64e09376da4481794e1537b9e19c0ff0bac77c022b10b5d49c39d789de6e4f0356b4ea4b23326f9ef320f4b08035bc04a827951cbf44ed7c6228";
+  sha512.doc = "c05d3c08b916785b765694e68b8f7cd96c3c359325e8f84166102beb4caeada7490ed24ad0b4f52a66cb822000f8b4d75d1013b93055898e88e82d7f23d5095a";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "0.2";
+};
+fig4latex.binfiles = [
+  "fig4latex"
+];
+figbas = {
+  revision = 28943;
+  stripPrefix = 0;
+  sha512.run = "2fdc1114b03123c35eccd6b617310c714f37015620551538458a1a49b1e9a583aa55b3cb661f204bb9168cee0a7325b066d64315a15a94daa01e43d05bbb2561";
+  sha512.doc = "7dc8140b3b545d2683c471e2e2907a58e2c995f23acea26d763da8989c3288940dcc154ffc0f81ea99169ce574bf90543e94f86bf8217996b7c83474a300806e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.3";
+};
+figbib = {
+  revision = 19388;
+  stripPrefix = 0;
+  sha512.run = "1632b372b06d8ef3cc363d6b05e70b8a493f357fb947ca1b8fbb7752d7ffc4ec09904e747a3e9b91b61e5d094c96eee954d533d1b286b372aa57244ec2abc63d";
+  sha512.doc = "ba42f6cc811fc9e00c41bb6fb410a57a2efe759a0fd0621cd83801963d0ed138dc66a1a245a4b7256cb056f3fe71e883a8fa84d19dda785ba24825e85edfa044";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+figchild = {
+  revision = 62945;
+  stripPrefix = 0;
+  sha512.run = "74775cfe7d7ef14acdb22bc6c60aa4db512183441828025c8e68f30e9e95c4e5a1492c99a31f459035956a0c50de054bbdb664f9cc68b73879d96a4ead5f2dd9";
+  sha512.doc = "68cc451292f68cb433ff567252837c438938a8d16c4e48987abdd76bcafc9dca9482ad29c540ec24cfdd66f55da801b9c3e052615e805de055c944df82f3971c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.1";
+};
+figflow = {
+  revision = 21462;
+  stripPrefix = 0;
+  sha512.run = "f75517b5c43119d33edf46fbe124523cacf0d7d837cdf66af702ba563392a96323b266bece1ec9e7f87df34d684a87ab38f9ddafab6c3d069dca8ee22c3bf25a";
+  sha512.doc = "c972bfb356731aa119e8cdf1292a3bcbfc08a74453feb7e509a5cc519f62ae6c7e6b0c087973549b9d860b97ff1a3bae9cfd1166c4ac6a74553ca6c0f463694d";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+figput = {
+  revision = 63957;
+  stripPrefix = 0;
+  sha512.run = "4ea2768b272f9be270f1ce3edf02cd73b8d8c792d8b92c20a8d38b05649e43e8441d6e439f0e1be8ca906c5b9a47db1d6a48ff7ee136f53dc4ae09cc6172d46a";
+  sha512.doc = "54c8428c9b0bd267389a9bf25b005b31365fc9451d0e3ca4632e52a07af9c02a24aa1c7c9b5f19eac196f4dbfad9db91647cfef82c301496ec4be58d9e2360cd";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+  version = "0.90";
+};
+figsize = {
+  revision = 18784;
+  stripPrefix = 0;
+  sha512.run = "3c7523b05d04363c57c1ba75a39d9698b1648ab6a858be15112b6f47c052742033e3ed16752a9b9ef3854ab93f547f0841c32f1cc68fb9d4538fc02a7bb19ad6";
+  sha512.doc = "598f631423a97e189c21e117a7da23c95bbf4dc3b616e62fc6738674848fc46be4d7dd43832ff58ef834c0fdbe35d8923ba9729d5c48f90b0431a22bf86f79d5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+filecontents = {
+  revision = 66740;
+  stripPrefix = 0;
+  sha512.run = "bc51c03ea84130753cf4c6a6e6efe39403bc48a47b4c40f177d3ae17808c63a346a2b361ef61b0e0421094b6b64e20a972c6bcad305228ce0991818a62344296";
+  sha512.doc = "15f34d023a498c733810ddb4b04c1672507d97d731a579246fcfc3f29afcb47da73429807c4fff018708ddbac76851ab8357dc274cb6c2506cd37d075d2dbb44";
+  sha512.source = "8b93ff5a1cce54150c67bc607e67a40788dd0af08bd55163380756ce6979f3862b4cf1d70888b7b4ddd7accf078a387bf8540cb97af491b4d67bce31600fb8f0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5a";
+};
+filecontentsdef = {
+  revision = 52208;
+  stripPrefix = 0;
+  sha512.run = "63b399a5e21d2d4946c195f380a0d5f269f8c978c0b504cda80c0796604dfcb66df38ca79d31078efa03c7475967bc0ebfb856e933bce6b21d12836368780e2a";
+  sha512.doc = "26e7ca9971a0683325b62e2feeeb0db6ecdd3a732f07ae93515f2300ed58e97a44ff8a7504d194119c1e27d1d9bc4f367f29c17458c0e7f0b6a0a61fe18ea0ca";
+  sha512.source = "f6e822a28e074fece05b911f0bf9d262e2b925c2a73559764e1eb5131d9081b48ace0ead5f46bb250bf648eac204eb1d5d7b362be508f58b40a50f70577de534";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+filedate = {
+  revision = 29529;
+  stripPrefix = 0;
+  sha512.run = "5e2789c065459e82f073599c4d5f04c626fedae7e02c8dc58d6595d81ec8281c9c362592eee9547369b7a8e9cd2aed1ec526d69a8ae22f35771d5494e3109032";
+  sha512.doc = "cfc2eb596e6b6d17015ab2ca061da39e673376d6f4c526dc045c8d2514fa8372f1a853a97425b4bcb9eb0bdc522c6b482a9bc3da9f56f8a4e0c22e4970a40575";
+  sha512.source = "cc2a12c8f3b9e7391d6b57eec6c0f486137524022d89d3d3e7c037ab468a4858b253e8baa1cc8eeb731510c5e221b7cbe9a9f22a972023b3d1fe2f975e4751dc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+filehook = {
+  revision = 64822;
+  stripPrefix = 0;
+  sha512.run = "caa1f239fc8300f2925e94e860df3ac76637e337d57f599446c6b5f059fbba026fa9e440f4272b7e37ca9921731cddcbdd403c16e42b9c49e302452dc940fa27";
+  sha512.doc = "7c86e322cbdade28c03b65580c992adff2fa112ae65b28c1485419c457a7f930614337eee70bb6cc2e9c386dab866e4e657c0b8d394c975c6af3a8b2fe651cec";
+  sha512.source = "c9683da993eb365559e7d47e6c81235065e9ac74c9c334e9e1d9c040c9cde0ae135301b83e49c27307a6f3bc529c24d8f597dbdf377256d03c8d149e69c03bfd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8b";
+};
+fileinfo = {
+  revision = 28421;
+  stripPrefix = 0;
+  sha512.run = "2e5914e32af48db731aa83c3e51e6d9128dc969891bce21e1e2f859cab79130c9f5caa0f591765fa8a9b48c38eed8d19305f4be598430ab1e2cb3276b6faf191";
+  sha512.doc = "03b4ecbd21ec39d98949f2e8ece7e48bd539a75051350d1a9ea19e3d32ecd620c0f1a5dc454e626237534114d0430e2ad7c175e9c1b27ba15c78a35aeca3e3b9";
+  sha512.source = "6875ecef667da4476def344901db38f38e988d2345c2afff42fb812c01c356df8bf1dd3c8c9a563a883fcb9e22e85b8813bbf50905d711004a439767ac0f7227";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.81a";
+};
+filemod = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "e346e795df32a3b0cec0232da9c2b190bede65d905035a758b949c9cf01219e0880ec2ce2e83201f8dd9dcc77a98b29df2b463edf8c44cb1c220a7efe7c9f24a";
+  sha512.doc = "3e8c5a26b5c2fc8a6f713f006d091c0be719bde7bbe237e49d2496032289d67624fbad1319db421a0471a60aa8c11c97bbc60127053904725e53e75a2ae6fd7a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+finbib = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "14f08cdc92a2d6d511c112c480efb0112d45c199023e89c9314740c2b9b83598bc9f8917ce616bb2493671f408f946ada3de4535136eff48b7bbf72e7436f912";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+findhyph = {
+  revision = 47444;
+  sha512.run = "aea6305dc0d9b31367638078a7958933468e761ef4cf47a1c44d9fd5ab2e25f7af22273c4631946a90edc9b51947c2e56b3d4b74c8c59f0a79250c2edf5bc137";
+  sha512.doc = "97f3fa22fe490d21bc9e5ce5ea0b23ff25ab9afd9c5dbf6e8d78b24fd306ddc132c5ba7ca7ea7e3d7aaeb48993c7968b0c02ae0b765416a939d84b53171f4179";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "3.4";
+};
+findhyph.binfiles = [
+  "findhyph"
+];
+fink = {
+  revision = 24329;
+  stripPrefix = 0;
+  sha512.run = "837a470970c8376e1d699b28954cf2ac6ed849c2f96a4c17ced56ebf142297c36d3f856f9cbf4db920ae33f491738f7891433c5c6627565a48fb5391b663634f";
+  sha512.doc = "7b1d9d1c62766082030d7632bd91c65328d1bf3e8bb6abe4ed64ec5188d9f38d3b2a99695f32c2bf04e2fcd634819926ba923eeea915186eb9fe96bcb43954ca";
+  sha512.source = "e37a35a9c292ad3f213c560505ca6c446eda397771c18bb1fa2b64df70cd667b58ca03b6f821aa0a9d6bedb3910b66c411349f70dfe3eb5ca2f1fbdb9f925a35";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2.1";
+};
+finstrut = {
+  revision = 21719;
+  stripPrefix = 0;
+  sha512.run = "8b360a3426056b61e58e577cc68ba9e2f55b63a3b4a0a2eb76ebee53e9ff327da9235e9da5cbb85e3cf369cd48354c00a79cd46110ba4adb4b64192b7ff7b603";
+  sha512.doc = "8cc27d82f7125b5ee82585f97385924737406e45d9739ec9cd57b76736e902a588c7258628bdcc4841e3e23f359a4d8ad22a31ed6f821f1d1c59798f4e8f3d56";
+  sha512.source = "c06f1b10815444ed51b13d83258e1f3d246da65a581a0946e7a05a9c8432e78ae395efe18ff6c0a84db8fdf6016ab8dbcc6f3242e72936f46e522d1074ff1b87";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+fira = {
+  revision = 64422;
+  stripPrefix = 0;
+  sha512.run = "5faf4cdf1690f9d6c690cddbef813c8973517309144495016ef5d61ff5e5df9ce73f70b262d1c36ba72fa92f93c7a1d550b96acc4965d7ab88efce21ee20d682";
+  sha512.doc = "b97fa7ebaefc3a057eae0a3fd14f43fad1a9789af0b2c43ca8a0c6969610b1786e24508b1367002527841a8095486d6eea180c59d95b1df904df846c943b88f2";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "4.3";
+};
+firamath = {
+  revision = 56672;
+  stripPrefix = 0;
+  sha512.run = "c18ab8b2e12b947144528b196c9b1de7f1930f3a38338bd114bb61205d7f910fbf1e3b20ce48ad8228fc24b14d734ae68c3c8542218a058120a62783b007461c";
+  sha512.doc = "4e434c757b4ad4c82397224ab275db9a0783994dd9e3acffaecf19f73b3bfb86dc6f70c2833b2f203ec354aa275384d1e97f48deea9a765b3d972eede02a35f1";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "0.3.4";
+};
+firamath-otf = {
+  revision = 68233;
+  stripPrefix = 0;
+  deps = [
+    "firamath"
+  ];
+  sha512.run = "6c713fe81dd006707b987930e8c8835c21122607d9488ce997bd9b76cbe85bb91fe7017f4282fa91c11ab41827ce70de62d0baccc78a543d56b0d873ad153c12";
+  sha512.doc = "39c2eab4cf1dc638194d81effa1b442b87e96b1ebb2efc72d0ce26041bb04fc3cee8f44b939f904b07cc0332708d8ae8cd7a1f41087d363888306c0f0583274d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03b";
+};
+first-latex-doc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "39641224689a1d45d59b5643e5037599d03df3ecbe95090d565778758d334bddf832e867a25c1688adbee1f99eea23b3ed21fd6729fb3d4e50f1503537c9a400";
+  sha512.doc = "497080fdad8195bdc43bef476f9e678b49d83829f10a6653c9443d327cb0da8505623e941cd3038349b6307ee37a65ce1a3d3eb48e4c6262f9d636d10d96e17b";
+  license = [ "publicDomain" ];
+};
+firstaid = {
+  revision = 68720;
+  stripPrefix = 0;
+  sha512.run = "0d15794f22485c3cb922b0d1108c33f1dc3dad9bf8db46278deb8079bb966ca0f3cc1c5454d82e43f604354b578c9da465a34440670b365fab4f7bab32809603";
+  sha512.doc = "6ee8e2e67d8029551e8224a4548b425188ca85298e5cfc90f9f1b95579223c840a80aad4d4a56e36f8d0c336778cf62c8b025d3f4df215d94a310beac14b1181";
+  sha512.source = "2c091df08953ae216e713567d1af4f0dbfbe25c4d593ddda22791d353002cce85829d3a8b404d0a1a441f67264b778c3137842388159f3f551fed249e3ac711e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1b";
+};
+fistrum = {
+  revision = 66461;
+  stripPrefix = 0;
+  sha512.run = "7e0a92affb0fbe23b9d08e525f6e2878e3bfc10133fc95b41bbdeebca5c02c988b2c4033e50969212b5889dda4f9e2f043dd65688ea33d81b5bd138d49af5777";
+  sha512.doc = "15b50530a68fbb2b330aa972640fd85207dedc0b0e640f830940cd712a16fb001e60b59c22ff81890ed810a7aba9f1e150deb3f91ad1fc4bf52680d9d1735342";
+  sha512.source = "88fcdc104594951933fee790a45efde2cfe3665673b2589bd4f2972f15e8dc1f91b85c5e04dde3866688fc2b76d2692caa2f4dfd3353ca9416002126be408cda";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+fitbox = {
+  revision = 50088;
+  stripPrefix = 0;
+  sha512.run = "5244567062493fcb5300048be6786f1ac48c72c363220b894a2695e78646f461584e189f227d04f55e9127a66ab966dc04cbd762fd08277774fe1c0fcc7d3c96";
+  sha512.doc = "71d77dd1879a2b9b20f9c4934af8bd696de567b5c0187e7a5bccc9e225fec5793bff6bc670ce0bbe1065cb67de73f518942ae48aa0a27e46c2aa47dcad6856e8";
+  sha512.source = "406ae04d838114e9cb7205c9e704b95e8ea8c4747827bb82fbc53891ca552042e5742f7e524361f2a797a77d8b7286dca3512ce7099ec8fa23101668d4bad5b2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+fitch = {
+  revision = 69160;
+  stripPrefix = 0;
+  sha512.run = "ec44706fa5f5fc258666e343569f695db0d26f6628aac1ac6eaae12377f23138c49ce29d03dc5b08cb1f5427cb5ad612cbbf9aad5a9270f4b31f43679023e73a";
+  sha512.doc = "3a32fa5657e0042588c82ffd7d32f11dfc8e9d29ba268700092d26d32d24afdb3baa1f02b8ca4e248a19413aba0421d991809cac5db0d5d38aba8389b43709b0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+fithesis = {
+  revision = 64135;
+  stripPrefix = 0;
+  sha512.run = "faa49ccde90ef577cc5cb7bbc36c79670d8d9184b9857f40b17bd64101b24babcef7b62541a42f8483578be29a16d23e1436238242a3162d42aa8f491d426ebd";
+  sha512.doc = "efda2236343ecfd0e655bb31d6a73109fe5b91bd17b158bdc4709175dbabc7798d712cede1b4ef62082cb8dfbf5634eaefdcb230bb92643bf5c3eeb15de91c85";
+  sha512.source = "9a9c6b61571761a4837e2ebbf5b584d5de268e1ac26fbb2950c4b13b5afecc59f2613d3e90ac9532b7c4ae0a5d5bacd198bbb813c7bc2302f850e9f9462c5de6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+fix2col = {
+  revision = 38770;
+  stripPrefix = 0;
+  sha512.run = "b3f096a64fcea6c6b2864d4e8a86733afb852f3decae4704e6c275c41e1295622f1eb1c8db0e0d33a29e369a9b757495477c9ebcf82ae0003c4316967c03f0dc";
+  sha512.doc = "302ffac957bc37305fc5b6f458c4b7dcb06b65408131bcf64c0132638a110813eb6c748270ead340f3d864b927aa7bbfe0a16c3722cbd8334b1d8ba8ca72e7d3";
+  sha512.source = "af17350815d50b2f880cfdc9cdefe457e541041e311e886a87fe45e53e7e48ed12ad83c27b6cddb0b3f719469d6c0e379a68860d13892879cb89678f51607e97";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.04";
+};
+fixcmex = {
+  revision = 51825;
+  stripPrefix = 0;
+  sha512.run = "fc3a1ba6c5516378182373b89b71ddaf22e713c0be959e8d5afa1cd57c50f363e68669049750f286142499961c56f6bacd60c63b0211d5e6ba01d7f25d58f759";
+  sha512.doc = "e6f65b38a4baddf6c1840b0bb18464b6c94f97163672b67a87c693af19030bc3ab2db7607646d73f8f684e08258906da2380e7b1637ba85f80c49cf7d5045bc5";
+  sha512.source = "2967a93b0d041ff868b4f894a2b9e1d59d445e601af982d576a8ddcaacb00d4688eccdfd56d51beffd19c90903fb15fbcfdb0cba08983e78636757daba176cc5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+fixdif = {
+  revision = 66606;
+  stripPrefix = 0;
+  sha512.run = "655c9733d727189d7b2aaef2b629e67cf5c7401ec2a8ffd179fb450cdf1746a40571e0b8be56f4202e31d752c35c7255fe01cf0b36917c582f24415e8e842273";
+  sha512.doc = "e17648e54c68ebea15be76a8cf1406fd42858bca77be938efeedd72bcc8fe92ff016427ef815dcb590b8f900ce0efd87d9bb96f37afc8d79bcafcdb1e5d23bca";
+  sha512.source = "4c96dd12535cbc852d4d24623295d1d7236f8f4773e5dece09ffa99f7fe8bf24efbba89dedfa069e32af53b1d88afa109a5e1075aa368ed6331fb462c57d80f5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+fixfoot = {
+  revision = 17131;
+  stripPrefix = 0;
+  sha512.run = "52c25b4d5bb9e34fe3f8d2b122e68352ad572ff9ecf1011f3e9fbd67319d0781a48ca08ab03ad3201f1d1d2bd6d4e35fa3818e695a741a8ab440ce81f7724039";
+  sha512.doc = "bfe0e39165be8f9a56e2cbd4b91c0b7b7448d0b9d8a4a0b62d6c0d45e542a9964af3d34233ec777b69f0666a0945513a8475629f0b084f72a0b349682e8ad6f4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3a";
+};
+fixjfm = {
+  revision = 63967;
+  stripPrefix = 0;
+  sha512.run = "afa050087607d8eb5f36923d6ec72daff7f1bab0154edd08900486fee152068ebbfe97d87ae29cca7d8f4048e0c6091933d0b71d4a0266950828881b55aa6b59";
+  sha512.doc = "d1c39e4d0dcc1a8eb5510e3306d68f0bae6067d358bfb458127ff8f5d5223576f270cf628bf8ca2c3e8322d6cf1b52b936db0c2a431e4258591057a7f50513d9";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+  version = "0.8";
+};
+fixlatvian = {
+  revision = 21631;
+  stripPrefix = 0;
+  sha512.run = "48d39745498c187d23c62191d7da6341ecc13d6c43ac97deebf453046e78a26d221b5c7b7ed22aa8909476a754e877de26c20391bccb5cddb2db1fa7b238d643";
+  sha512.doc = "07dc4fa87b8564c3ff3144936ae4374e0bc7cf37a5a3e4b5d0724681859a41d30d714e96742253bb9a269116dd32d2ab0c1e5e1965242e88ea12fdcd224ace31";
+  sha512.source = "04903bf5ba774034c0b3dbec7c7d37ca5a802b3d104670d259667f8a965da26e7e954ce9272e14b6bab058a7e6a4b8ad42b710e22f85f2d0320a7827b2c7e173";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1a";
+};
+fixltxhyph = {
+  revision = 25832;
+  stripPrefix = 0;
+  sha512.run = "df41497da718b157073b6ad2a4b9cea3f9ee0a0824698f47d4441b76261efb21271f1605f69b1c0de8a99e3e636587a25b4efdb4d578683ef0c89d7f849d2c8e";
+  sha512.doc = "37d6b9903a56d33577c8aaabd40de592bd78dc6b2f5a2c82457f6d5b499d1d6f9a9bdaff29bb9f9511365d32e160f92c85c6c0d93ed065fdd1688aaeae9ab246";
+  sha512.source = "321e52dbc69bceea16f03d5d280ae10f497278876cdf3b7f64cbfb6f31993c18afc5bf4c38f424c9a84ffa55b235b73b4daf7d68dfd115c31dc3a237a6b64eac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+fixmath = {
+  revision = 64648;
+  stripPrefix = 0;
+  sha512.run = "e3aaa53832094173eccbb1cb3aa2f2876227bf9b1c023d2b6f18e7df49d97bddefd450a53ba717fe54ad7cd8e8f36452ff54dc7cb67bf518037fadc6eccf40c8";
+  sha512.doc = "5fa1aa4433ded289ce899004eaa165117a77ad6b4846624bc8c4ff5e203af701f1065683466998a5502ea13983bc9092ca3958059c047957e41555c753c1b11f";
+  sha512.source = "7f2e12e15c0d23b9803f6cf97c52327e6f111e8e14d39b78d7519c81df5946c1db18c2fa93c84fc3734bd2f9fe722ae716781d5ebb502c56546f9007decfe5b7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9.1";
+};
+fixme = {
+  revision = 63708;
+  stripPrefix = 0;
+  sha512.run = "a5fc18a3560f5908521fdaec0f3e20f25f124e7ded9de72b36d81ad573726af7399d223c70dd11a8ea50e47e05e3549b785ee5c64215fcc1bf6a5a9ab2e5769e";
+  sha512.doc = "89036e19b4c7ce8d9266ce6dcc5bb449c5de11ec74ce13b5208eaeb81054330ba53a0b01370b7e21d1d3d7486ddb7343f4cab946e1c3cb1387965b5e434e5b08";
+  sha512.source = "061d7bc9a8813accf165c98f9d386b3ead721a7a893ae55ee0bc895f6623e4fbc52988c5933ca71223094fdbfc6f7ab71ab18a2df00715299158d58668117e22";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.5";
+};
+fixmetodonotes = {
+  revision = 30168;
+  stripPrefix = 0;
+  sha512.run = "d327d19ac0e9041da98458e9147b3d1a9c9182bfe5c893c03ab9ef42b9c8044314f4024503327594bef337c1af6aad0b4f2046ea2d6a433947c6c45ebdf8838b";
+  sha512.doc = "7d7f8b049feb8e70c5d1ab0c71147f1f398b098f9c961267c3e90dc5e9ea9a8317361a0dacd8fe581e17cd85669bd39e83a1391641d353b01265a6195af33714";
+  sha512.source = "1a4028aca8ae5fd53dd8068d17a5331ad9011d72d668f9ca8242862599edf7709e84a8848bad35fafd790ec756c972488ac8db53a240426dc5dc95dfe18385fb";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.2.2";
+};
+fixpdfmag = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "733995ec82df92bea5a674fc25a3a6af2102739c3c73eeed7c9f40cd54bc4c5d65cafb35366b70641ff0661dc83700071054f7af274487474c3893ce5a44c9ad";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+fiziko = {
+  revision = 61944;
+  stripPrefix = 0;
+  sha512.run = "4ad67bab5850464deee4a3a29fd7c02d011eca50dbba03dafc5059ee54aa434bfae5c173e6022fef4cb761f2c760b6dd5aff403b33b7ddc8e632961ce4f8dccf";
+  sha512.doc = "e719652f76de617201a2562ac5b3a04df1577ace8fbcbf10b874326a85cc0ebe3549b0b427f39cfbeda0f34f7f3fe4ab6458ad1df2613572260fa77cb8601dcc";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "cc-by-sa-40" ];
+  version = "0.2.0";
+};
+fjodor = {
+  revision = 53207;
+  stripPrefix = 0;
+  sha512.run = "adf4d23888c6c778ada6d7cf930d4aba68b1cc20c64c571c17017b11c115452e5a4eb766d03ca03f27f9de46a5027590cd806b17fe94dbc4c5026948d3ec74d5";
+  sha512.doc = "a0a0e01d4d40f1b847f40401d20604bafd2723097e72c208df2a5acb30f57042b35df4cabfc93108d4278f5725dd4b50539f7e17b7c51adf875898071a368fbd";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+flabels = {
+  revision = 17272;
+  stripPrefix = 0;
+  sha512.run = "b05d66f1181eb9d7eb80636b69ea3af7a29ae7011f6888438cf80a7fa6fde44666f9fa7ee71620055f6882e73b6f5e211a2a65ca003d903cb26cc4f9571257d9";
+  sha512.doc = "cf9b774ef4e1336a123d48b3797d8122c5b9128324a9f6c0c1497194e8d3a3d9ee46a5a58470074c0dbc02f8c0aaeb1da3b4d5683ba9faf6e479a6790bc599cf";
+  sha512.source = "26b2a3e7fbdfe3523cad96880dc6b168cf633a115f6b8d794709514013a79eb2ab6d1545769b74236248b73c3b08d5b52e02fdac9cdb420e3a4f1ac5cad55d32";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+flacards = {
+  revision = 19440;
+  stripPrefix = 0;
+  sha512.run = "45cf4fc3f4678a5242873f80ff1ab328e7675107d14052be90308d94d44a931ba8b2cf3eec67e7456a21168aba168fe848979a8d45ef07bfc62613ad9174488d";
+  sha512.doc = "087d2c5500b5ab51280bf3f57362f00723856b041f520d41849d21043859bebc106ff9af33dcbf044aabd838f68d1165f74645360247de2c3feb9a8493ecc441";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.1.1b";
+};
+flagderiv = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a7618ffc60c548fb98a581324901af09defd9226a655163d967e251b090b6ea74d91ec10bbe1e5d685a83d147818ecbf8b66d84c972cacaf3e270baf39293200";
+  sha512.doc = "8c9731aec45eb594b95e1c89a1967f169bf8394664977059af0fd77aa40ebf3769200925382694e221a32ced470161f505420539b5e3f7f00be4688e308ff54a";
+  sha512.source = "c81038f892b37dc2759251cc14d8bfe11d0aff056b95204cfe1a4434ef1bdc6fb3c035edca0e01282ca019193871dd6044a8b9b64f3b6051c24f041700f2b71e";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.10";
+};
+flashcards = {
+  revision = 62104;
+  stripPrefix = 0;
+  sha512.run = "0c336f9609fbb81bc373fad344a44b8159c7d142d2a62de795dc7f1b7a8aadba563ab7a4788164058c19ab6f6c9835af1f1a0dc275377f51aca9520b3a8a2327";
+  sha512.doc = "6ef79cf1f91bb8dc7b9b3785da64af582891d1536962ea9ac9232bfb8fcb156e7c33319970793fc6776db2224ac991796a93a287aa3eed2e0cd0ea741c6ef9cc";
+  sha512.source = "9d428930e3993de9d2fd407a78b19d2b851d9e7faa88a5d5c0bb44ec014432518fcd4ebb6cf68e5b3a0693cb4ab7bbee0068f431e0ca169423ecb5959ec233e9";
+  hasRunfiles = true;
+  license = [ "gpl2Plus" ];
+  version = "1.0.2";
+};
+flashmovie = {
+  revision = 25768;
+  stripPrefix = 0;
+  sha512.run = "99ae914e1fa627f462be84f7bed923c638bf493ca183f010bdeb5d607ab00abaff7a1fe3d0f8613e6fb9df7cd5047b99e99a5da18470df25e7507259a441e188";
+  sha512.doc = "016331e7328732f5549487f8b2edbeabc9548eb81201584d3d3f7e0ff41a9a962761a8af867dbee8951bf4e99ea4eeecec7e9230868c23abc95260f288ca7958";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+flexipage = {
+  revision = 66614;
+  stripPrefix = 0;
+  sha512.run = "1e16b1722a4c4349879c4556338c9d72eb4fe8364d0e19e0237b3a269b85ef19bd68d4334e190b7e0cae6e3ab1551381bc2e46fbb265ce36e839a967fb114220";
+  sha512.doc = "5670616faa6646b68d3b3b2724f5e324cd1ef3595a0da3b8615d364f908f684f98d641754b71498cb2b61853192859dcf602a2925cab145292b1cc7a21f99766";
+  sha512.source = "72458fc100c39b56a6f5ce173fa1149997fec0e4b7040f9a6ff2a2f671e27a33a4cd326eefa48bb81ec53bd53147bc4065d677fc1aebd9620da1d869336b495b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+flipbook = {
+  revision = 25584;
+  stripPrefix = 0;
+  sha512.run = "8e3140fb417115ada958bf6dab1a22b39779926b47938bb49cf86499d64ae16d321e6e6bbc8482ee7e6a2d79d8341a227785ecf04c66a15f7e5c0ccaea016d21";
+  sha512.doc = "a5f6aa188e7a0aff29d4e693f0f8e52512838278e12d13c29706c7bd5c1c1c2a8d70beb619195d8572ca5a3920205380d586d02580bc747acb8e3259c79c3fb0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+flippdf = {
+  revision = 56782;
+  stripPrefix = 0;
+  sha512.run = "17773b1ba5f40d694cddb3d2e2742650bde889d53302e6fa6ef0686ea4cd3fe393ca2e5b31842e93e5588631ee53ebb668cb035b2843fc5bd57911167074edaf";
+  sha512.doc = "d5191d079641c9a06336498c396cbcc7585c983924a646bcd3b26889ca51a08eb166ced560f45f834281fae9abaa47d02fdd4ddadd3348cef704dd9b818e7675";
+  sha512.source = "95e86fe1e8ce5cbba8745123dbf6c352545d0a75f3ce679e2cf132e46184efa28123f9f9ecf805939c10f59af5bbde84bd2a75eba8f0aae3628b41226059bdfd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0b";
+};
+float = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4a5270ca2945915464ba25b7996dfbd4771ca5f477e4bf248183bc340b7051c042d9566908acac881782af74a59154f4163bc7879a21e042e1c31d67237fc6a8";
+  sha512.doc = "6f713c71361c1536bb086e7638b770ffe58e97aa01bd59bbab779f71cb485b9c06322d7d89e7d87cc8f77a0c7f18f4174fd4ec47b62556faa32d82fead0b7377";
+  sha512.source = "9e577ba84dcac612e4105e597ca2385da3dafb39327189caf30e5728b85a380b5a90363b8bf9070a0464aca2130bcf9419d030bd6c39d51f9a17b0a7dd578d5f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3d";
+};
+floatbytocbasic = {
+  revision = 67945;
+  stripPrefix = 0;
+  sha512.run = "01f45baf2f0713a229bf6b6d59e02c8a05f0478331c3c6c7ca7dae050db94d7497a87acccda1cd7c022b79b54ef5088f6af181429e60154ac8e1ada081062dfc";
+  sha512.doc = "0d6f29221ddb39019a9c6d308f77200279144efa9de35d5fcad8518de9ecdaf840179887282840cf7b31e7eb286f0fa41bec93e8a1f3682873adb791a467e22d";
+  sha512.source = "4b3c146a6e9960f77532bf2fc23cf686a092f00da541a0c0fc1243a3bb623b16e19de8e9bd1e792a9134cc1dd3d429fce17ce372da03f0abf3176ee4b722cf69";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+floatflt = {
+  revision = 25540;
+  stripPrefix = 0;
+  sha512.run = "1f7de96ac5e82cc4bbfab3fdb665a18d20413cceea097e1407dee2073109ee1b82d7d3ea82c80630d9aaf445f14a8497aee7e3824458dea8b40b270135052ef5";
+  sha512.doc = "7ca1c6ed832bb3d697685cad5575e02b531c0469095468fd40eb3131d89b68dfa0fcb9c882965aa7a9cc9c60292f64bdbf6264d3d990bd697dc27b23a46fae47";
+  sha512.source = "6d243fd8c9a2fb7bbc242ececd19d94916de97fd3583095e8342d8e7c56decdcaceac8038eee9a774950d9261979150035e8c9175175ad7346b0eb1fbea6c5bb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.31";
+};
+floatrow = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c650b5c856bd625ad192901f3c056171f790c549748d5de5675f14cedca5cf32931ece537ce2280c0e4895895a8eff0cf140c3408dffc2b081ebc8c62d2ae1e3";
+  sha512.doc = "b721ebbf59ca3744f1834c130da1a859cd4a98e9f5f977f5d35eef77b420deee303c109439fa70f89757cb9f57114bc74c5d527cafacc1daf2125b975621b525";
+  sha512.source = "033c5c65c9676054e209c64dd065f86631c9765b1582e4042e72bfd247a49602dd97ba4dcd5afa1fe2f7e3d252e4b6ef2ff1a2b00eec3156937fc214d7cf0c3f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3b";
+};
+floatrowbytocbasic = {
+  revision = 67946;
+  stripPrefix = 0;
+  sha512.run = "3554c3cd560d5203b650bd32fa39aa4372f935bcbc757d1ff93fbde3fcf1a395bac4676e7029ec58fd79ce0089595858707880e35fdc98a65615fa27a555ea3e";
+  sha512.doc = "1ee0174dff4209c1bcc3764c89ede858174e1aea624a0032c0af8bf61c1cb4082517ee2713fff0f5a5687ae4d63ec67c04f4a14eb5479edab183d0487241c37a";
+  sha512.source = "126754a11d2a5f47d2406bfdea43ee33371ed1eb8f6b94bcc48b71fcedab4f468e3d0fbbdd7f0229780a70b5d337aa3e443046346b1c53e968a585c6d44c1c66";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+flowchart = {
+  revision = 36572;
+  stripPrefix = 0;
+  sha512.run = "9adc1f823378fcfaed58e99727b68389b97bc489ba38995e5e7451608cb712dd7fe02b2686f692328b73d1bc8011131017b8edcebcda5e886f3bb4a0f6aed65a";
+  sha512.doc = "0bbc3f1f56f5adbabca07096804412b33e93669e20af345e57bc9ad42133ab629b9546887599b472dacc8ee43b9c395f8c2e58a288c487e78920be1db5a110aa";
+  sha512.source = "5ea69b98cca431225564482ed0597be71fe45e9ed933f4417059f4cf16401ba82987f90617e57a5428a42d03c0877969579a2b976a2c48d439d0dab7af0a6179";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.3";
+};
+flowfram = {
+  revision = 35291;
+  stripPrefix = 0;
+  sha512.run = "880869c22914392c4ade9dddeaffb20d6c6edb6da78d30705d9f6aa1b1352ba2734565fa8c2a6851e81f1107573753748d3f4d208bbbc4c0dc443c066e912719";
+  sha512.doc = "25924c121d2feedc7d815e4510b89f05000eef87efae8039c6566136b7fa92d6d4d9f25f2938363dcce8222d5c824d42894e4863b95e422b7949207a1e1daccf";
+  sha512.source = "993d60da76f1144524f9ece2c5c9ba0eb38526111a7cbaf6bb5c669eea790c1ab9519f4e7dc2bc955c611fadf5771f2d9b6582d753b4cf3b79038b2bdd29837a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.17";
+};
+fltpoint = {
+  revision = 56594;
+  stripPrefix = 0;
+  sha512.run = "906155f3bb5fa81cd4e97a375c37774db1ad4db388f334867cb5ba30735ec4ded5461eabcc833951b5d8a6e2403eec02e0f464d35f109304b9d6152638949b00";
+  sha512.doc = "3c023dcb86eddffb28e0937f9d31dada6c82852e44a430c892feff9572c81d9830e4524f742afd958a79f0af63e72311ece43c9eb0e2d8434d871fe144b7fab5";
+  sha512.source = "cf5031d06ada079028382b5e845df5b69330fe23412aeb2226af725333dd9d5f4b0915f5de2c46bcfaf6809c9f85479f6257c6e7825c076f896c5f411e3ba9ef";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.1b";
+};
+fmp = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b87a361454199c16e1fbf97bd2b82f8b5569bbd71b7beaa780a6d88357e9262f77c9c3ce17d2ab0ad9b043ed7a1dd721e533c516e1b927f0439e13ced6598a30";
+  sha512.doc = "461ee793dc8156b0ecd6931b9d4c56f368ce4938838b042abae5d6475ca3739c4fe47517168dba742f03c98229376f59f8654a89f1d65ab394c0dd907ac48ba1";
+  sha512.source = "912cfb9e0d4669c5d128ace088190ab4c5f90e371b45f1e399346816d606ef3f96901775a51b5f89a8670abd1b08e159587c9eab4ee6383c12e260d26e070034";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+fmtcount = {
+  revision = 53912;
+  stripPrefix = 0;
+  sha512.run = "ec5e10be2b93adbfa0e1ac710c7df37457e8d14dc5c7fe1cd13e062f136c63bd20a3e42d57c237fb4ae5c1be936e1d821d0a6568ca0c22b41948660f0848da43";
+  sha512.doc = "fa0955c7d08dca99d3323b9cf364edd8b4b305723a3fd3ae38687c6473ea2af3593c47384a61feff0071199b909e1424d422eed3864866b28c7d27b1f42c3994";
+  sha512.source = "1325ecfee60e7b602e5ca2fffa2b95a4ad11d04b5e986413af57da19cb75e2a268356f33ad64355511d526ed144e14e2abab4b84e5ec5e4faae122eff9914104";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.07";
+};
+fn2end = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6be5c07123cf2470ca88b7c28c068c6dd308824138fd2f645a1a7c04c69fe84953468733ca2994faa42389b5889990941c8e09dc543b66a1589f3cf22df1e017";
+  sha512.doc = "17f0a1d12afd607a26687b675ccc65a150e4ae67785389fe9582a3b05ee383f078bde35f296941ea069323757e1fccd1ae0e76e5e24f3446b4154738c1a45385";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.1";
+};
+fnbreak = {
+  revision = 66615;
+  stripPrefix = 0;
+  sha512.run = "15d3ba5ef30d8ebc23be3f0c412f7457960a7032f3c78ccdeba6342852a3b7db699b8792b6f981659268fb28c74e5cd93bfabde2b584f7eade98e6b422127d9e";
+  sha512.doc = "44837191d22ac8185b7748fbf32769a1d2299b92a313da918e6a03d78f56206e76d73990cfb1f94d956835f369adb4008df4da117a20984afc48289b1291fa4d";
+  sha512.source = "7ebefbbe46d0c4db1244ef699e454c0b393285a489bc20b0fd78bdd5da0ddd00982f063c25dbe78c4aa1661402a6ca8ea492774e9aeb5aed3d7fbd460ae2f58f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.40";
+};
+fncychap = {
+  revision = 20710;
+  stripPrefix = 0;
+  sha512.run = "83d74f4bcd8fa90cdf5d0b6e03e9e8e36ab09884998f9955647928ed0a33924735d236a82cc730412edbf54485ec8c357ba3954a264965f67752e397908ba295";
+  sha512.doc = "6a8c6910f0790457c71cd55c8d30d07df81c97f80a8b6b7930c067966c76c47848142cdcb7454c4b63a154c5c653933bf71acbd792c06eafdc496c92e4bc5806";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.34";
+};
+fncylab = {
+  revision = 52090;
+  stripPrefix = 0;
+  sha512.run = "47aafab923d6455da7e63eb24e0fefa8b869efa5a04bb301000cb2eb658893927dd9f9aeb8e6919ea29e0caeca235b1883106228f6acddc667117a3ba1136974";
+  sha512.doc = "a987a6efd0964bd5ab5328658e011b5c8da56b404d233c55d96541ec2f37cc72faacd934908c7346041ec8bab3866dd1f171e1c5de5eb528b0f0e80969c0bba6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+fnpara = {
+  revision = 25607;
+  stripPrefix = 0;
+  sha512.run = "620aafcef4ec7fdaf5cd732551fddbfce53222cb7540dd370f2cda425e1782c907e59868953f50acfff993a8fd8a84d108da7992f1c1565cbfa889a5ca0ef5d0";
+  sha512.doc = "798c7fb03a8fb20695ed63ba1333686d21832a936a74a93ca77c7614346316234b2255b8e0340dd87fd57bc1480f23df24381107fc81c68cd4c0cd594ddf5329";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+fnpct = {
+  revision = 62248;
+  stripPrefix = 0;
+  sha512.run = "35b1fc24b9cc8ae46104ed20023bc3e1a5a83cfb857cdedc3e6631b8ac4315a79dec012793174fe239898460ef0247f2726b3a7c0f07561a58178ff754b513e7";
+  sha512.doc = "2f986edf21052a8e008a64493787139ff9fa5f65038eede1c87e59add2c496f23fb20e7b33d632dc598318dfafbbcbdb7a938a7f04bee6c72884565c104df7a0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+fnspe = {
+  revision = 45360;
+  stripPrefix = 0;
+  sha512.run = "5e9af6b3b3136f49e49524c7fc85074fd75fff30826fcbb8dad358102e3eee6fa44037b7dde99b6556a063dbe4e819b27ef5a522999eb304f70c2785642478b3";
+  sha512.doc = "733a099cac2d96ddf6593b9e0195b85c8d5e86f6a1b283f011a55acc4a1bb7391bfd4356c6aaa40d9b2c70a7c180886d64162eaa396a5a457fbea491af1b47c1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2a";
+};
+fntproof = {
+  revision = 20638;
+  stripPrefix = 0;
+  sha512.run = "c1cdc018808a2b9fb5b91c54b55eddf3d517b8dc6062db1ffda3db154efe6f3abb91e61ce90a68743ce411ec614785974b4362f20f03ae398488ac1f816b3ba6";
+  sha512.doc = "cf9e8909ed030b27a57573cc257682da84b7f14c3c3775e17fdc8a2203fe99dda8797ae7b2599dc92e9684140102f6d1ca2147bbb437edcf8eb41ffd28b9a576";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+fnumprint = {
+  revision = 29173;
+  stripPrefix = 0;
+  sha512.run = "7f43363ff861fd4f887df68dd6daae6c97940d4cdd60b19563a966dc7c08cb88356a150eab0cb5b91bd4c3d5d47e324dbbfd43cf45872a5738c5f9b70766e047";
+  sha512.doc = "44d6fdf74bf6c231a57b3fad63efa7eb1bdf5b4342cdb38e0d504c4c09190130d37534769e17c3f60bbad668d50aab064bc5c0a1ad99808a6d084dd1921769a9";
+  sha512.source = "3f6465877aa1dbf5ab021e8397725ec83217bd774ee0623e71cf15d746d7d0edeb2f78ce76dfd607568be75b67f4cfa8d3e1ddd29c0ada6d376f7b4fdfad86a9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+foekfont = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "45342633aec41f2a5fe7213dc418960d76ff196a08b906965e3b68f2c5ed264b3192ea45756133f12662e451fcad11d08232995c0de2493495c40b9b59cef7ea";
+  sha512.doc = "7e1aa7a240d825c014be6af7be5cd7c1bbcbc6e52bd55be36f987b4a25223179bcc4c4d342906c10f9df624536252fe4dc5a45cd3b5ddb63f91e9f4c7401a239";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+foilhtml = {
+  revision = 61937;
+  stripPrefix = 0;
+  sha512.run = "88bd7239cc37cc4429be37de0e68ffd6291844bb81f34a3e9e8c0dab14641d66b6d3990e44d58e5322d2cbac8da27901fe7dbb3b64a59be577ec0f94a036bafa";
+  sha512.doc = "c444f13c4c60cd7a723d9bca8d687a3f995438767d077c812797b91e0111372fed6c76fb51f264c0332cffb1a598e5f2a17a63882dc18b4e682f08a3ffee0900";
+  sha512.source = "9904924a8b8b1723e7496960fb9856e91efce76313cb49e756d99be5f6f97022e1cf8f27edec0ee738281137e3fe4d251448caae54335d30b0772a1be44cb8e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+foliono = {
+  revision = 58877;
+  stripPrefix = 0;
+  sha512.run = "e5082c626e22acbaebbc7abadee75a71e3902af989767bcfba5d851fc89e771cf8a331ea540c05e6455b894351fdb6af6c598b5440e55c553662efdcb73cc093";
+  sha512.doc = "f03abc88291b2591b509a575735f6fe3e29ffeff52e0d2cbea287efe5426b7668462e6133394374f01aa3b968fec035e6a40a8bee01b12cbacf90fd0bca80b2e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.000";
+};
+fonetika = {
+  revision = 21326;
+  stripPrefix = 0;
+  sha512.run = "4db9e50fde60ac69373f5abd151f3e17275f5c492b6855a7f5dd8895650a79cda1feda43398fffebbecdd6f7e032f8935972ef573f79ae1cccc5844dc148352b";
+  sha512.doc = "ac3f0de2a9a5b5052d4ae626b4368f8b1fef419503cab9a88d4bf89db348c1a756555a6cef7aa70bcf733fa032840fe9ae7cfe347fb40bae32b54506e60ccf37";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+font-change = {
+  revision = 40403;
+  stripPrefix = 0;
+  sha512.run = "8ec91864d719d20ff66195ec1bab456d772417ff2d4d9ae75ecccafe0da616d1dfdf5b965be489a65eb28130b3672a5b55c33f3254f59c00cf204dcae6fd4eb7";
+  sha512.doc = "75f7e45fb5313d0bc1c333253aba2bcd1d650fb6c0baffce6e5c558b0e7aeaf2e697ea9412860b4049d2685cdee26d19f12d9a28184084ab9df66101b78b0361";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2015.2";
+};
+font-change-xetex = {
+  revision = 40404;
+  stripPrefix = 0;
+  sha512.run = "17de7c596a774c5c2e115704c2c57385f3fa90bf2dd49362547873453c27700537ab7f1e8a143c2ed49c90efe6aec234d3cf61643228bcba5b51c5ddcbb8bba9";
+  sha512.doc = "138375750a4d493774cbd558c6aa910d04bf3f32337f773438d6bb31e16df3d96af3a6ea12d4940c785c04f98130977750058f7c0ef2425e0d8147b4ab882a64";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2016.1";
+};
+fontawesome = {
+  revision = 48145;
+  stripPrefix = 0;
+  sha512.run = "e08643104006c9e14c40bb965b4401a8fe296f43e5f39b285cd19d5aa0ed33602cc0eb6ffcc996e1d6e5aaa57dd906903324626ee40facdcb3cedc5216a3deb6";
+  sha512.doc = "bbd18a60db734922ea006ebd00b0c9f90c34907a7b519a08bf007daf01cceaaf6db3b31c3dd8c76e1dac199d4f7c312116f6935b764afb62248b7dcfd92ac78c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.6.3.2";
+};
+fontawesome5 = {
+  revision = 63207;
+  stripPrefix = 0;
+  sha512.run = "d7f6a40797b2968c31b28f1bf273af9d27b7a87e7c2953748f354db2e760b027feb5a8fd52c8f367649fba24cd629d71c1b1368b8864d42eb84269e0b22b59d4";
+  sha512.doc = "1727133ca0e1713c356a647e08a7e22af50ad6a67e66c54f3d9e9a0601bd4a693c365cda625b37be83cb4ece42aba8312488f4ba5e885cc44f68f7930dfd7add";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "5.15.4";
+};
+fontaxes = {
+  revision = 55920;
+  stripPrefix = 0;
+  sha512.run = "49a2a2a3cc34370fc8db7c08446b2d12cb7b8a9ce6913568d7588c051683e24b859af23c440df1c815ab1b65f5b5de32242df344dad8102eba7ec1383b02c112";
+  sha512.doc = "c37621f082498bfc4c2ed0717fbe18b56032a7d5faef1ca7a73c4fd22adcfb8f7e517ced768511636d4c8488932d3b33a96137837f34c79416b9c5d8d852456c";
+  sha512.source = "f0bb1bdb666c9afc19ea333ec3919716565be9454970e7a9e3930f503ea7e31ebc4273a16dff6fb2ae44701ccab1ffa2e9c285ac145ed32294b47b68fff91267";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0e";
+};
+fontbook = {
+  revision = 23608;
+  stripPrefix = 0;
+  sha512.run = "55ee9dc22aefcf91c7fe30f516bfbaea5d0b8c5423cec204bfb208ebfb4b2331ebdd65032eb6f2a9f8958f15fd47433a9c7884f49ff1f3900f1538f9f25d4fe4";
+  sha512.doc = "65eb7d3f6426d3dcb13ac9a0d5b396eb4c03586d9d2b3d842af9ae4ad98119e8721034de499eae485c5803873946f04af992ddd860d09a7131021027c14b5d4b";
+  sha512.source = "8ecb0b7b4e5f00806a377acfa0198ef217faf0573930be1272d13d743d1e84db76f067afa7e7a665c4540536c1d888bdb702ea9c203a2a405389079aa49f71f7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+fontch = {
+  revision = 17859;
+  stripPrefix = 0;
+  sha512.run = "c8354fbcb6a13f2f874dd3df71f23ee1fcefdaaa1eab5166f35001811b9788ea2b53e5d5653437071d02978dc94b0a658bca5e2cfe825a0315d3389446b6c138";
+  sha512.doc = "a7c5f6622414d943a20745f7b02c3859d43d4f4ec0f9ffd3b2baec34e142c01474d8827c7b0fe5d1bebfa25d33224b26cd876e3457b7179097fd9539cb9d9444";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+fontinst = {
+  revision = 62517;
+  sha512.run = "c3668f79f4b926090188386044fd68b0f13913168cdcb2aa23ccfd3aead488dec03e79133669bac3d2b719fdd2d5ef735fd46cbb27fd26fe560368f9e0cda05d";
+  sha512.doc = "23c569bdd6f12dd4cd0b5673ed9efde2c7c7988d86bf2f89409bc22c80f64ea80ca6824745b50ea3ef30f70e4bd7c8d7005a9e05e511c1e917a12630f4b4bdb2";
+  hasManpages = true;
+  sha512.source = "1645dfe5c6cd0efc8d8af966eb7363176ee7a44646b5860a3c137dd70c7e130340887e8690913d03be84eb1d84134c4ec2add713e4583a0feeefe4a1c4554402";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.933";
+};
+fontinst.binfiles = [
+  "fontinst"
+];
+fontinstallationguide = {
+  revision = 59755;
+  stripPrefix = 0;
+  sha512.run = "c3f9820453f9cc3fcf4323f382a35255d2dc066dd0c090f55d15b2b28d64d8e3935e85b3dc8f30d9ee50408a48aba0ba4278d4985ead454f177ab1d484fe7b01";
+  sha512.doc = "785a84a3bbcf67fcbb878f331815fd585093de89faee6f2556727ef820e392131545646242ebdef603e85e22e86b1e97f5369db4e1c565875e79683ff4987198";
+  license = [ "fdl13Only" ];
+  version = "2.14";
+};
+fontmfizz = {
+  revision = 43546;
+  stripPrefix = 0;
+  sha512.run = "43febb41a8bd7b0a89a2b60b52f9b83e0d0fa8303c0a7986658a95c93307ba6642fe07f8ac935ccb50b3047bc74100cc7268fde438d3ff80c944ac59afa6e3df";
+  sha512.doc = "6dc0f6c10d44a17d42d8ed4148f39bf89c84dd5a3a672755340456b0ab983b1b52cbd3bb62cd6f5ef4c3f6dfed8a39568d5ca35598c4b016483fcf7d3cdeb360";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+fontname = {
+  revision = 64477;
+  stripPrefix = 0;
+  sha512.run = "424da4dbbc07c41840e6aeb6fabeef5d4778d206b9cb8a90e752ebeb65d962b96ad41a7e20c86a16665e2bf48ad795d85001da66ff41b01ae3c949c6eefa4593";
+  sha512.doc = "78199996913192f5f69423b6f412acc52b74f051b01d3e345b97b7f1d9ea4aea762a7b83488068f3091b41da69471d56b3f18ab4d299cc6adfe4e004072db303";
+  hasInfo = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+fontools = {
+  revision = 69241;
+  sha512.run = "5144f4a0636b49e63bf04f518b6c416623e2228615e33169839547cbaca574bed78777ab20f4db7e5820c1acd401b756896b39998c43f21f93de6cf8f987f6ab";
+  sha512.doc = "bcb3ab7f49e817ef5b6f710bbc227309f28396c6f4233e39e94163663f10db3daaa41b6db93a9ae85a26599dfce352a0c132a36b0c047ecf8f5269f428af4f6c";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+};
+fontools.binfiles = [
+  "afm2afm"
+  "autoinst"
+  "ot2kpx"
+];
+fonts-churchslavonic = {
+  revision = 67473;
+  stripPrefix = 0;
+  sha512.run = "a6e3759ee4fa9cb50a8b7bb55f162ddf6644c3d2ab61da514ae902c99868f34e3de67f1207ac003f98a872b1b1daafada441e888efe2f0482ddc6b9132374c03";
+  sha512.doc = "9fcc08b521d9706c3775d33ed7391553e855ef43a49ef1c6cc92ecc1f21677909eaf5c5d231fe86f232d3a092e3f913012d8d96f35b3344e0a774c4e5c8f1476";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "2.3";
+};
+fonts-tlwg = {
+  revision = 60817;
+  stripPrefix = 0;
+  sha512.run = "3b1894d677b63c88010fe583381ff7c0c8a7c5c6753e62e166ffa8ae7f18d6a521b12a4e57f16634855f3b807605407cfad110eb405a3ad334f8a14bfacb6338";
+  sha512.doc = "93de1f1c668d460644f8246ac25c47f10d99e91c878c50c3096e2df373e521e54412c239d89f5372c767cd768f7973b06f97f25705e865dd5c36cc3674496c0e";
+  sha512.source = "555a7e3fb1f1202412dda95924b692f21b6ad7d1abb68b5fa789e360667b6a23bc377651d592d43aa67728a8bc9f2a20ad5b1cbca85c412b90ce8a8654b07b17";
+  hasRunfiles = true;
+  license = [ "gpl2Plus" "lppl13c" "free" ];
+  version = "0.7.3";
+};
+fontsetup = {
+  revision = 69390;
+  stripPrefix = 0;
+  sha512.run = "f291077a88db97fdb486cc14ab24fa9b2cc1b00808f8d691c3313b302715897188a9d16dec192d477b4fc19bd22bf2b9e0cd92bc1a11b079ee5a88382bb38ad3";
+  sha512.doc = "9318253e03673a6ec79d33afb2632a81354fdf0f29fc429814dc3f00326275479d8bfebdc58bf71456c38a77ba22afb1be29b2daa408c7c3e4b1e149fa7e958a";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "2.1.0";
+};
+fontsize = {
+  revision = 60161;
+  stripPrefix = 0;
+  sha512.run = "8e89cde1cdcc388a5e8ef48ccfeecf6f1f25e938c7513081bb17bb4b65f889c2826a929baf4833b2191554f3ddef2dd9c5bbf50f53ff14fe7463ebd1e494aa4a";
+  sha512.doc = "0b4cb325f4ca5b94a1757aea9ab3dc00dc92ee2b095dd35f176e7acbad7e1ec87a7e2b7cdf9ed19bf50095c41f221f8c791c0e7c9d541021768945a84a30e51e";
+  sha512.source = "42b9a587d63a2a0190776851b86eb66c4e7e2811a4367ba659ebc996fcdf365b9447c94a4d04af5129a6b95d119e37735df9b26fcf12702f157d61932f64eef3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8.5";
+};
+fontspec = {
+  revision = 63386;
+  stripPrefix = 0;
+  deps = [
+    "euenc"
+    "iftex"
+    "l3kernel"
+    "l3packages"
+    "lm"
+    "xunicode"
+  ];
+  sha512.run = "fc4516b96eefa9cb896488510f5ac531446acfa7993abc2f361751e06fe95128afbaadad393dd7ce8c22ea731c81ba99cd8182ce8205c55f78f64a69ba815996";
+  sha512.doc = "e765756f93f1aeb03acf0f15d3388c3a39156f2bc46e951ab5c2e4596ac9babd975af025c0881078f58caeacc3281d3769a701f112b17f10ac474d12b4eac897";
+  sha512.source = "286db8b9c512c02f2333860b5ff2c980b8b5680de92fc896c95611f2cf1587077f47f9c0aa0e520ad0f64c6f031f8a2fb310f67034ebaca286076d7764bfbc99";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.8a";
+};
+fonttable = {
+  revision = 44799;
+  stripPrefix = 0;
+  sha512.run = "f8db43eedd7f9e43b0cfb8c37e2687321fe236daa4bee898141c305dd2e59fb40bf3e8b3cabde561c75fb65dd053de33e45b90a8ab9518b0b30aedf35f6af1f2";
+  sha512.doc = "1d2b27ac253df62568087abb8f9e0f0054e3bb98cb62e65784192b281722e69e8565fa569eef4d061684e8965e0b05a0cd6dcbf7e632af7f68f97e8d4747426e";
+  sha512.source = "56210bc42e0716196bed05a35ef9ff7ffb40a17a8cfe8cef4d31e2c8ea28bfb75ee035bb887ca62387460cb7f99eb4f2b408cea767ce824124116caa6ae7d15e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6c";
+};
+fontware = {
+  revision = 66186;
+  sha512.run = "7cec7df72b76ed64b864401c809b48e51f69338c7cb3ed05ac4ea69899a077983763c728543f99130f18afdd2a03c955d848066a239c97547ab0240d87c97d7e";
+  sha512.doc = "ccd22e262e5fa2cccd5da0ff016447d2df04aefcdd6960f226762667ea2e81b4afd406ea9f822b74d07c8f93cbe70ef90cfcc4040cae2820cf5ace94ce8d1113";
+  hasManpages = true;
+  license = [ "knuth" ];
+};
+fontware.binfiles = [
+  "pltotf"
+  "tftopl"
+  "vftovp"
+  "vptovf"
+];
+fontwrap = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5bad0487f5cfa4119d7baafccc6178925baea12f1cbed5912211c52f2c4ea01eb00f9dacd300c24b93f48e5f13197a86ba1e37c35ed69fb1031281fdeb08edf2";
+  sha512.doc = "857be54c81d9bfb14277c17638ec24c643c278d660b56e18a4701aea0ad28e496df0aec191b12d93bb29b7ab326b39ad9cc7ddc3615871d1b70fdf6e44ccdc6e";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+footbib = {
+  revision = 17115;
+  stripPrefix = 0;
+  sha512.run = "0cadef58331d5d51aeba1f69d0c9ceae99104f7c31ea79e0f5dee33c8612bc52cd0c8551abc6da1799705c879cc88535b46e4ef15232d3c4a0f7136e0fe46e05";
+  sha512.doc = "27d1f0e6bf0ef526f2b3c4852c53b78fc60fc10ec526796447940565ad75fab023406bd28548170f7382e822c3b0f43d96181233bc772ea58f8ac195f71cf495";
+  sha512.source = "120d5c14a1b12b15a39792d2cae0bfee5b1695af1c014708c65d61eba6f2fd52f17e2b61b576e192a2d2a9abfb3aa2e059fcd9ca17e48e8a3ee6e9cc2150f119";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.7";
+};
+footmisc = {
+  revision = 67556;
+  stripPrefix = 0;
+  sha512.run = "814aa0a1add20812ca241280a408c1bba21920c2751f171a67532aaf6e4dafd786578701a7f431a0295a139052c8c7c37f46c7e4df35e6fd14f468a5c7181b75";
+  sha512.doc = "4a257a2b7620bc8660785ab5d8c8f167ba044e2bf8fc6b340b8645c549f9d4c528d9fec9110671f1dd757892c6193681bc845b57a7ab722423c8184a276f8043";
+  sha512.source = "514acb8de22592d5211c97ad8a82659374e574c4ed972604443036381875d33d2e5956788fd9f9577ca1feda59290209f5165568dd00dd0f059dc43fba4efe14";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.0f";
+};
+footmisx = {
+  revision = 42621;
+  stripPrefix = 0;
+  sha512.run = "591f181c8103ebd7a86440b27992df9eaea91d5998caa0f52dbfa48b7afc4791ef8c1f5a95d85b7cafd56113726beb74268b7498ec489d7b3142dcdf7f07adba";
+  sha512.doc = "8c36c6eb169a804769ece280c2210949db96bbe57d6dacc1a0952fc1338d619334d3d8b46cbaa3dcac09e05a0c015f37146d8bed315238b5e918c373b2b42155";
+  sha512.source = "5b069985c3a55240d762ee67a1da66895c304b5ac82bc0ce80c9e5fe9e77906cc0810dcb11c39b3ab63ce39f5d52964b7fb3319d49c0b18c85bc1410bad84ae2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "20161201";
+};
+footnotebackref = {
+  revision = 27034;
+  stripPrefix = 0;
+  sha512.run = "8c18d95a4c74a7fe2ea4cc98df6bdb6813d9cf8323e44474330f03694758ee53da46d0d691164f6d90b2148a7cf9dc253dbc93548a3b33df3b0344096e4a90c9";
+  sha512.doc = "685484323b721c5277aeaa041b1d40b0d4675bc901a371f36dbff6246063252bca69261748a096919c7345a4a6e6284a6093068555bb43eb92fbf7cfea41facc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+footnotehyper = {
+  revision = 60374;
+  stripPrefix = 0;
+  sha512.run = "24d270cf9fdcec81a91be4084e371338f1daa0a12c8344b850860bddef360c97d66e7475711106ee0d1d2f4df359abdb2f0005740aaca83651ce92f1d6c89140";
+  sha512.doc = "605c22ffce3c413a0f9caa41a3ff7a43022a9c7a26e43fb177c107c2bc156c93a75f392b29d46880793788f9b5f0ac9e87cdb4c5075a247c17abec2e41527ef5";
+  sha512.source = "77f579a0e7422a98e0fa9898ea5fb36223f66a2b9889a0da1b4cb40736d88d11ca87820503ea934e6b7e41033ca18974df4d4f585d8283a0e62959c9c16ab7c2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1e";
+};
+footnoterange = {
+  revision = 66149;
+  stripPrefix = 0;
+  sha512.run = "b2c20e7b528219e0eee9ca32da40982670d3fa88938a58251e1ce6aca26b831d9ffdd89752ac19b78bc148c11c265374d2f679e7e3f54cff0ba445acc4025922";
+  sha512.doc = "bf5b704bb39a8d369093feecd02da251eb45790381605495960dabb9a4ef099f9118dc7a791c9d9db74eb19739628638a8c003256a42890d64ed821ebf2b8c12";
+  sha512.source = "22665f8b1e912c325a0ba7b8b05ca7da54f54b92e8f7700d045a837e98a544c651c479dff88937615ea1d13a25ae3f6d6f3a5a60c1c7402c8a892dae0fa0a62e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+footnpag = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a1ce9661f0f6a69d1709ea053fd548aed428a9cc8ef0445b9c4b897eeef349bb9767c219f5d860ab4d7d264982c1f4404d33619c80dec8411350bb965b19d709";
+  sha512.doc = "f83c9cc0701c63dbd5d3b7dd6038e1bb2c427e6edaca05b814778592587b066af3c4f7f12646f7b2ff7cc1c2ab8d2ffd99480dbfe72e50c9bce907e8e2d4c509";
+  sha512.source = "a44b0ba4ef7b6328d6d307eca25c34d494000a238c69fec3686a55057ff56ae1ada7cacc763ff1cd26aaa83962257442060fbd795c76d61f92761bd66be81378";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+forarray = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f818d0899fcba2d61ad119698d3633a28d5300098a4bd56a82b7b1c9cfc12c47a9457efed7cbdf8aee3ba9ba4143eefbdd54bc995c84c9bbe99dd5717030bef5";
+  sha512.doc = "e292418f60b290bf0567ea70169d66557a8408b2933221e0658d6d8e807b6495258a6ea33d65d14e13129ff8e58dc9cb50115459b014ec00e0b084f3d3fd55fd";
+  sha512.source = "4a9574868753faa19d0e80bd08c524445a015bcafe241a85d59832fb308981d12dd133fa64e65804ac5c3d86617046f06a17a4667e8cb382676dfbadd6f012a0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+foreign = {
+  revision = 27819;
+  stripPrefix = 0;
+  sha512.run = "e886be0cbbb64b11b6c54d6b62d6b38db1bb7e65b7a3a9cc951ad71d4cc1a93c323d8a1e17ba863daa6535c747c9801b06bc4d3c664bfb8da38518a9c93d45b0";
+  sha512.doc = "d3804dd1b83ba173e4098696656c814629ff099699f332c3b81136c4519bd577aaabd4d2601893f88a58009f00e8c8ba44fcf2c4a3b72ce90af4d4febb510ec6";
+  sha512.source = "d91bd89508318df931629678cdd0415da8baed9efcb55f965d71e26a61db705acc6abe14c6f7c17b61f54e32ae123ecd48cd018920b1f43626559e2b0b4a3c16";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+forest = {
+  revision = 57398;
+  stripPrefix = 0;
+  deps = [
+    "elocalloc"
+    "environ"
+    "etoolbox"
+    "inlinedef"
+    "l3packages"
+    "pgf"
+    "pgfopts"
+  ];
+  sha512.run = "edc3341b84e7e89fba3bb76004562c0bc889f944ed33474ba9cf5ed5e63a690202e851a30f44158caa8351b874b8e91659bd91c50d59ec43de9460869e4213f1";
+  sha512.doc = "fdaec77023176fc2f7510a9e3b4dcc587898e1f96886340222f932c0d93b1002ad35fba8a38a036f713e41814f3dc6b3f75a5657ae485b15ffea43089895bcae";
+  sha512.source = "45f912d17d29568e6ee267814d63bc14c20bb0d91c62b39c21301dd611c50db3b5f7de5f16b519da0f2b4d15609727144c34b16a620abb85114a42344cdaf24f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.5";
+};
+forest-quickstart = {
+  revision = 55688;
+  stripPrefix = 0;
+  sha512.run = "52e77fa1a6aca02eb15838d7c04e37744cb4f37f0bb078fa571c1309244fc329d92b553f3e7c62f574561929b5e4964b71cd2cca3d17d4f9d13f9bdb9b0ab8b5";
+  sha512.doc = "974a0d0e5a5e7e640e4e18cc5eb59b5a10efa7c5ab4f81e2915e9bbea30bcd68323cf95c62891ce1711d822336e5ee054735761a474d186e3c9f11fd4dcf6f9a";
+  license = [ "fdl13Only" ];
+};
+forloop = {
+  revision = 67017;
+  stripPrefix = 0;
+  sha512.run = "e4cf4d9fdf01b753b40d4fb2c5edac94756ccf60a7e0b1bf0da8b5b0c433eff5669858fcc35096967f9a53e6a365880e6677956ebb86764cd68ba3093fa4be91";
+  sha512.doc = "7315a8e90a83bbb73cb82525fec32c750d97f62fadcf1cd1faa816aeb2c54b5183c8fe659a19f213764979d495d7774df7aab7c950fa9886c6911e526712f0ff";
+  sha512.source = "fe9aa2c7836a17debbfc392b44bcccb09de5b978224b2ec81e17daa07eef3eaf508206f1d54cc9dc7897122ceffb9d1b8d5957c26f2b4bcaed4ee93ebe3436df";
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+  version = "3.0";
+};
+formal-grammar = {
+  revision = 61955;
+  stripPrefix = 0;
+  sha512.run = "9a14266ff45b4d153000f27694869ce0b3a159d646ec0343726e4510ed8444d9e1ea08209f64ac2b88d8875e860880d048fbc67c5dd5292e60c02521f89de3be";
+  sha512.doc = "48d80287ee514f4a846e45b3c0af655644817a3a8dfd2e95e7955fcf4866cb15d5b771e73076cd8cb6717d2d70bfd615e2b613ba58e79380905d3cbf23beeb9a";
+  sha512.source = "55c30bdefed19d9a794cccef0a437cac4fcc8d36b62f3fed1a8fee4c8ee68414fcbb5bf14203eb6510d4be32058388adc4829be1572aa9fc44915bfd362f67ae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+formation-latex-ul = {
+  revision = 68791;
+  stripPrefix = 0;
+  sha512.run = "c1bd5690cd7aac8a9cf1b608b19d620c898474e80667594750e6ad5935fedc56f6e4352573cb3700476ecb627195fb137c8404d3701c30ba457960d9f832e42d";
+  sha512.doc = "747ad5d71a58ecec9b83c7a81e36df065b2b374c0ee4deda2a797165eb1a883e270d57b9951b61b3310feb397dfc00d81eb38a0904c2c8f187aa04d8929a2681";
+  sha512.source = "a1925f332e6a20fdd2e4926138ddc88fd5b56213a44d67a5f8d812b3ef10f1d619fc8bb47758d74c5c9fbf34837023c44394637f848359b98c446f98cf8da62f";
+  license = [ "cc-by-40" ];
+  version = "2023.11";
+};
+formlett = {
+  revision = 21480;
+  stripPrefix = 0;
+  sha512.run = "9d984435565a9354d03f7ef1307d543e3a0bd3a8d398f6dec426f7ae16fe3c6b20e60cfb5daeca7be092427606b5a5886a31dc05d023d0f26d61aa1c07be4b8a";
+  sha512.doc = "8eee17c77620f48319e862f2e7d8ae4b979c84250dd17f33cae9db52b1f219f2f86c690969a783648ee3979f24ef58e410cee47afcb12bcd26e4278af4625c6c";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.3";
+};
+forms16be = {
+  revision = 51305;
+  stripPrefix = 0;
+  sha512.run = "9d8b0c7aa2314c81afe09cdd9ba3455e3ff7e3000fa9de0e99da935b282c3d32bc60aa7f97a27450ce999ff101b606fadae3dbb4965cbfc1d4a8ca5c29eb719e";
+  sha512.doc = "52bedc12e5ad33ac78c906f9d60284ed079b0f6d66e578f826c946c28de3996c70da0b11284e774ad56196875b3bd166962eeead9282f3d71f6c6a0d4a8cba68";
+  sha512.source = "19e3efc0f73c919c7e74eaabc4b7f9b70be4dc2776b22719eec4f373e180f3ff736ac3ddc26209acfc9f9f9de9c594467cb6f67899f21f563386a44ff58c9135";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.3";
+};
+formular = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0be09e33fc3cf97552dc9e960979447de61c53bea46205a52b37094f7ce39f10309f559dc99c0037392d4924bb688e27bc8d26e5f6fc69dfbc3d3c41736223ab";
+  sha512.doc = "09550cdf735f340a13c9104b86b37dfca67e39c277ec9f98bab08754f393368bea8379019c402662b7e7df351636e44814bb45c0970cb24db10bf3efdd9dd7c7";
+  sha512.source = "12a7c774c2b6638d610c3277246ced4c8946f0393527ecd0da101481b1b85d1418537019962f86aa8b7657a0159f7c210acb3eea1386e8a528a09428619f0b6f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+forum = {
+  revision = 64566;
+  stripPrefix = 0;
+  sha512.run = "17336de3385fe31437577e541a63fe10a9ff6f972e02776448a2012337499633eb118d86f7c1995cfbfd5b84360370c614a3687b18880e24a7e4ce06c1874117";
+  sha512.doc = "6598777d072ce157440923c767ec77f710ef38bfb019b7134d0ef8ee216d1a66af185a63a54a6af0c17d537a4027c7fa322ebdad07466787e400b6ff4fd77d99";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+fouridx = {
+  revision = 32214;
+  stripPrefix = 0;
+  sha512.run = "01a2cc941482972cb8ca3f5402bef75f53d5e7db2b42f8bdf614c34faab3805c3548d3786c3e7cd9d8d8f7691cd5e8e71e056ad8afc24d52444c6969c11eaa14";
+  sha512.doc = "8bc55b8e191b83ea42e228b47621780f4aaeec65248f5b3e9aad94443eeba08b1bf1bf44b7cf252f66466e5b0170260ad202c13abf2d76d4576833224212ae44";
+  sha512.source = "c29e1c93e31da33a3ba3914ea2992a53b52bc18a4da0d20cdfec712037f98058be5113dc65d731253aff8c4e1b0fcac4afe3da36b972f1fb23ce45a795c546a3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.00";
+};
+fourier = {
+  revision = 61937;
+  stripPrefix = 0;
+  sha512.run = "127699baefe3be6cf18d50da60d162ad0daa8794797b2200d91d11f290de4f209f2d6097283e9340fb49f20810bac7fb376e014e419994444a6611718670c301";
+  sha512.doc = "7f6ac2665a52e2bf4fd4769629e00ac2192c68628784e3bb9bc5cf4f9f4c99e8e46485344e7a1019182be0af086e2b5b0ed557650b1d02ed8a9f6e2dd075d59e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3";
+};
+fouriernc = {
+  revision = 29646;
+  stripPrefix = 0;
+  sha512.run = "904b464fb9066100512cfd8a8998bb089113b443e2df1fb77100f9b5a26d48a5b3512931c00292d19764eb4f068f207eb38dab78798f217f2533a65229411df9";
+  sha512.doc = "039ce79d06bd1fb55b257f1c65c53412b15c26d4eafb9d3abe9bb7a7fa836c8b545718f70d935f1449fa235f33d07c81ad8f228608de20ffdfa99b9f532e059d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+fp = {
+  revision = 49719;
+  stripPrefix = 0;
+  sha512.run = "27e60a78da80caf0e50d1fc83d227d19982e30950650845df710949f4d88db67dad96212331182561c43d37cdeabd3b68f9af55763f30175ab27a6b5f089870e";
+  sha512.doc = "79b62424943f725ffc6c1698cadb9ba2fa6d9f0694741a951bbed23c43f870b930d966f110bbe722c17249c7211f08a3a95a5ce7e9da69b7487aec37e99e5152";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1d";
+};
+fpl = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "9c8ca7ebe7124afec8ba3f4ba4fc27c0a54ab460e53afeab599dcc619f81e5f8ad744a3cd68df33cb6ce456d0db0fafe7ee04d585dbc3fc123e5758a1242cef7";
+  sha512.doc = "7b951310a10295bb453eed81ae668f042262094971dcd48c83ab721220094b3a62b79b5090002cc8a7a1fa12b4e75157fd8ead7c4deed8fa1d3629cc6746e8d8";
+  sha512.source = "64da822f5b40bb6abfa33d19bec50d8e002452a710d0d6ba3c5e66097e9a33f6718524471fdc716ecb951fcb2ad82659288a08ef85b72229ba40297fc33f7727";
+  hasRunfiles = true;
+  license = [ "gpl2" "lppl13c" ];
+  version = "1.003";
+};
+fragmaster = {
+  revision = 26313;
+  sha512.run = "dc5d80aa4bab7a0a66258face6cf8222d03b12ea492f7cf568ef815a6d5950a8a2b36c7403ab466141f49cb8faedfbb33146820b88da17d8b8fa18a2b16235e4";
+  sha512.doc = "61f0bd7dab46bfb91b634006217f01648007cbce3c9187b0811a5cc1755ec19654da94b47866ad9873fd57629f1561d1cc46bf3a4d62db618502aa0e67500637";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.6";
+};
+fragmaster.binfiles = [
+  "fragmaster"
+];
+fragments = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "adab94e7cc71c6ed2d881d13254793df16eaa08d1e37e4d3f0344e7a56cf08a4ffdca784871e8939f5db8e868b7166846843492ced0071c9dfbf56e39d20ec0e";
+  sha512.doc = "dcf795392d989fdea695512c8f7011f783ea9091bfcc238ad296b0cdf1775bcf631c3097ede09a138117e39c7fa71da7eb355878c8389bdab2deb76a319102e1";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+frame = {
+  revision = 18312;
+  stripPrefix = 0;
+  sha512.run = "b66df0a91a8605aaeef2452236b5169cd363689a40f4a35ab9006ac18c21d4ae2a070407f84beff7de0be246f2f1e55c8b06f234921c4d7153fea9a7f2df1679";
+  sha512.doc = "b61a3dfbc23031a39bbe01788f0f1d51750a3aa9132671917ed8d14c57453d588c75f8cd54beac9ac120f26b09fead55b871d53e918a735ee172f1603e4cd1ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+framed = {
+  revision = 26789;
+  stripPrefix = 0;
+  sha512.run = "06f0da36c24ba42959b2176066d3e95f23dfed41753f4e4b07c1f92c4789e68d1b246c61cbdeacbb9c00b6eb990ea2b3ec75dff8ac57845102a867dfdf2c72c7";
+  sha512.doc = "1f48ac19f74f5003df88700ff85c072c8a655d4623b82bc3b7c6570a548c0a7b7e97fe292f8557a72188c0047fc28e280bc3ab65f58559804fa78e89317fd67e";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.96";
+};
+francais-bst = {
+  revision = 68686;
+  stripPrefix = 0;
+  sha512.run = "0a8216e8553b123c82d773637bea5ac61a618116974786b485f16eda33896f404458d755730ee12ef8971cea2a8a4e67ecc697a0c99ad59c04e3bdb2e3dd0e51";
+  sha512.doc = "5a58a8b2afbf99c2a4b1eef26d7dbc16b345ba5c1cb3cee50d9434b577d73145e0d15d2977fb2947bd2263d725b68f01c728ea028f5c9192f76831a94e2ec23a";
+  sha512.source = "a0b490a291775ca178efefa8a432e8be6de8a2794018d2fea5c38ac8ed1df2b3d15cddea6421217ee5cf84056252b2de2d584664de376dd28ee8704619cbe314";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+frankenstein = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1d94962185391dc1fa9edcadd67a60d9a4b59592442ffdd45badea6279db8dea101b418ab3e03284e6e88c247fd213887f06e72fb6c4a002a66acaee82d8d4bf";
+  sha512.doc = "8d8a404aa0a61fb76104bc57e1c2b837ddf68516c4d4fdc1af0a84425943f4e23a4f660b28b02e088db8849090e3734915ef7e0216f578a5199cf12115c498cd";
+  sha512.source = "8481205c937e58fc0b46eb25e4f7c8b28becc7ebf2529ab784f0bbb7292dc21faa9ebd1ef3be2a98950f1d2570b23eb13f7d6e134b8c8c5eea25e81c0e6c6eb5";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+frcursive = {
+  revision = 24559;
+  stripPrefix = 0;
+  sha512.run = "5ac038493648ad14626e2a015c7dbf96a41257ab1d1086f9e79b0128df2c85af1a279e021e52c722636f8647364791bcf7580cccc1d80d60084f5a9a55a23317";
+  sha512.doc = "eb0559574af52a711f61ab84cbda996c7cf4b2314b4d5faaa18824ae3396f041b7a5948151b2b5cffae6675bbe09c2e4358b81e9ad7792e5ece8a2912d7ff030";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+frederika2016 = {
+  revision = 42157;
+  stripPrefix = 0;
+  sha512.run = "b7b271af72364e0d2d00ac499bc1e419534d479d27fb424b7046373323354c47da29b888f0d765e3ff4725333ab3d407cd21a064bc4d063adf890de75aa49e3a";
+  sha512.doc = "e205744d689113870fce9cf791f089ccb59cb6fa326c811f34db7183588df3de9b946cddba2a02128a9b88490e9326bea6563fa0fd9a3cdc76467555b7b8d198";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.000_2016_initial_release";
+};
+freealign = {
+  revision = 69267;
+  stripPrefix = 0;
+  sha512.run = "ca74fc018fe0162cbc403c32efa1101edc215bdfcb9e5432c8d395cdad4f26550df6447b7cef9ffb103863052886b608c89ea5ad56a8a909822e7fc49f3241b2";
+  sha512.doc = "ea7ea3cf64373fb06372d4452d3b66654813f52e221fd1a002c5b95c63604d0aa3b3a21ca6dc70e406b51e18628bd6ce55a74b1e2562b9140811f4d860cef91d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2024A";
+};
+frege = {
+  revision = 27417;
+  stripPrefix = 0;
+  sha512.run = "39d359f01256f2399cd9226744aa9735543d5c9eb26104855bb52efaf51b8c720cb85e5be08241d72d3b2e1c2deb9cc7a10dd90ffca789ae91b6ea6b7cffb879";
+  sha512.doc = "28c5cb420f25ed57a03f3914ce2286732ab8e06cbb0b8446ab3112ccb79b34814762becb7ac7457593e1b5b1579613a76a8b21fe2c43ac9f08175495ea87bd1c";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.3";
+};
+frenchmath = {
+  revision = 69211;
+  stripPrefix = 0;
+  sha512.run = "d9ade8b4e036beb17c2aed0903531fe7fd29de51d1848504803ee3c9be83c4cddac2e33adfbcc94124fcc1f7913520a0da633c499d9bb4c4146796a1789ec369";
+  sha512.doc = "3348e8014b3468afb30be0a9ed36bf6684963d1aa7cd325be8050a03c668221272bc009b0883b0ebf66cbd18eeeddf5ff0d1ffa416f24e3c362fe44cc0530c7c";
+  sha512.source = "223cd3352eee8ee65b48d599677433b7fcbc4bfd7faa5f1c0a99c62806fecb9a3d3f2381907708fcc090637658fc67c43537b16d264bda60a10382985846dc4e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+frimurer = {
+  revision = 56704;
+  stripPrefix = 0;
+  sha512.run = "81057096f64d8ed53fb8afb9bd72eac6538f5babdcc054f422c7d6d0fa73b88459d250ed56b1666ec8d6c936b52102a9a1988d04ccc2efe76761e945d9027145";
+  sha512.doc = "d2c8dd345fed5935fe2e329ebfe7c2e9a5c836f3af5d52605e35ce32ebf51cee529c182505db8eaec7772476f758bc5905a8b57cad5ebd162732801c2cf6d352";
+  sha512.source = "a0fc0076cb4beaf081f21ca474ee287cfcfac07c889907d690093ff7b188214875766746bfade8f7de9182e5c32c7bdf912b71336f078bee120b042615056e46";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1";
+};
+frletter = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5f6c61585ab0626931cf7f19d18138ec70572f3531f36cf94eecd82d93855a2ec8ed2ed0146971e035f8b5119df7c602c6279a9976e024ac85869953448d51de";
+  sha512.doc = "36fbbc422eed8e577e054067e7b442cc84b640fcbd0706e3d8cb503884a5208e0a5bbe0c40b67cb5b495bcdd0ba7a78855338588757e5a9d26dce21f9bedcf3e";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+frontespizio = {
+  revision = 24054;
+  stripPrefix = 0;
+  sha512.run = "6045214cc6a8325d8c828c2591fb43995f098803b031adf50bf8b4dddfa0047ce110dd25e5db71b068376893b7ee83a70806713a83b90a26c4d1c8553e4f00f2";
+  sha512.doc = "beb8cec7ff51ff9b85e2a650bd7931070c126ea3b126051eb63194e8a071f6dd92d0014953afd85b0e73095208fdcefbf202d9c0ac22003f71d7f7a72f4a4034";
+  sha512.source = "690c42ad3b6db68c8d4305fd9c402126013a26a28049f5cdbaccc455effacf9bbf86ba77d91c518d88b72e48930939389ec33620e8adf06eb20762606ad53daf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4a";
+};
+froufrou = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "06c13998e051544b8fad8c65dad787b670beed1ec177262d3076b77d805423196b1b9092c0c2acf383450ebfefc4e670406dd7ab4413217c492759335a2d8310";
+  sha512.doc = "fd49cc43d8479aa952b68b42bdc58a1e6256048027eed2d50ee80d2312f375956d6936f91b7a1d0d6ea2cdf5414b09f987e4bbd0f7ba279ecaccd8cfc9f6dd48";
+  sha512.source = "bab0baff37c117b842d341045b3bc01ca9722f92c5b0b18c8e777dcbd06a8e6bb8a13432f44b561ef5857a8f8538e2ef47a9bc5a1f012addaa2accc1cffe971a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4.0";
+};
+frpseudocode = {
+  revision = 56088;
+  stripPrefix = 0;
+  sha512.run = "f8807f696b69f5ad8b08ee24c210c084e11652d8f00b996e48f5e08c894e991b0f2cb288ac72e6b45208add3185a3e14fcfb432d8b2d2844359f54811859cb07";
+  sha512.doc = "6c22157462f55d2c19a8da146558556eef0e28ed7f79c5231b282ad218b041d1d850ffd24c8f06c914ae5d9efd04d442061598f6f427ffe9393cb2ff1a4324ed";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.0";
+};
+ftc-notebook = {
+  revision = 50043;
+  stripPrefix = 0;
+  sha512.run = "9dca1b2e09293df3a12df85f843e1701e1ac428f4caccbc196f43cfd02517cbc98908fe95fcd3e26685cd95dc8565aa5e29ad79f7d42ec5cdeca0346db6a759a";
+  sha512.doc = "36022ae2df65e45e2fdd2a01e2c95502c3acee0e8fb0b738ef06b313f47cf8798df30a41a6f5e7b4021a556ebdfd17f84b4a79d54d2b6e88c8044f0a67a87f8e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+ftcap = {
+  revision = 17275;
+  stripPrefix = 0;
+  sha512.run = "1287e0bd63fc92ef3e3c77ae3a6113cfcca38dd63f4a90948baadd2a365c07b38631d916230baeaf550b1aeff07f9cac3a26a07301838716d8d70fcf0843953e";
+  sha512.doc = "afa317f10c600c88bb96fccb0383b291e1fb7c11abba5f6bd1efb05e7d2ce117c4ece7bdf9a9ea16c71c116143aa65ba26cf7c2e1dba68f225b655d122169001";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.4";
+};
+ftnxtra = {
+  revision = 29652;
+  stripPrefix = 0;
+  sha512.run = "df8395b996f96ed72505ef1ef7f0e8e6101d4b26059831b227344023514d377eb189961a240e83ba42ac4ef7e8086b8ffcda347290014fbb1cf1531371c20eff";
+  sha512.doc = "fc16ff992e3339480a4154169665be49f51e56f361d0b1f97842c555be59485fd7edf3cf815e32642826224e188c5377fdb2ab36746cdaef7f552399a4b7119c";
+  sha512.source = "87e580467312c6198fd7106b6fdfdac994c5f9fae3d131b793da60ebc9d852141ed6630aa0d4273e50e7311b6e10499a3e4e2cf141ff197d5ed72822f0c15be6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+fullblck = {
+  revision = 25434;
+  stripPrefix = 0;
+  sha512.run = "b298f55ca3afe8819e44704329c06be2867b00c1a2a399b5db8de8477751f9945bce1041450c7e91559eeee65c9bae5e76b57469c956239c9752341b820047c7";
+  sha512.doc = "9da7587195a077f8218abc6a7df98bd15369650e00ab3893b6cd70a268bf34431b8c2c49b3415269bf6b8d1ddf51a8e23e76ae87667309f8466ad69da87f05a0";
+  sha512.source = "2ccd2da9f1924a1547f4a6b870ce150e6140abc9c1984f1a951a59146944d50c6f8e115ccfe79232f941dbec756e26d460037d92af191eee644bb2dcbe986c6e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+fullminipage = {
+  revision = 34545;
+  stripPrefix = 0;
+  sha512.run = "7ca92205caae688761ddeadfc0a37173b37e285adf3c1f54c4b2994a0c82c90713a255d5068784e3f3866a7f1af603906513a561632b2d09c68477e497330d2e";
+  sha512.doc = "111145d2f1c81f74692df8ef397d36c4c0d7b6c89efe0250571c0153b22b9d562df0dcefa90e3be96f8eb518af75ee8a23d42ad898e23668265dcf39d3c678ff";
+  sha512.source = "d95dabc4565fd48b8a6e8b35777fd456934a3cba8bac34629ee6ff4847cd1578f70a06e6b87a9b76d26e341a502d1c284e4e155aaea9c92a12dbf6d0043d8249";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "0.1.1";
+};
+fullwidth = {
+  revision = 24684;
+  stripPrefix = 0;
+  sha512.run = "c9b9c37991365346804b51aae7b4645e5b63eb6a3c5c60a953cbe0583de0960e8a9d6cc99dc7526944415764869308d778fb85e7cde821792bec940f6c19072b";
+  sha512.doc = "55892645ce01b31dd0285749091b8fbcab0061a7190f7a426379f6d3ea8bece8a5c054cad8b53efe1bb69a68fd3e49c3e8c8afb94954ff4ba8838142ab4576b8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+functan = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0899d9a3c30e701d5ba6a0275521a40a3cf2df680e9d4a95624730184fb370ae2537bec1becc3b185647a988af5fa8e4bda5198f42cbe68cbc848d8915f1c9da";
+  sha512.doc = "c824825fd424316701e25fc573a431aa5967af0d520b631489b20608459dcd0f7abfac277c5b1e7b60e0a2888e0b37d787755acd6f671e48d4911969e3058692";
+  sha512.source = "f83465845900ae5bc872fceead5a83fa972c9fa8b858606007237251ee2dd77cbd095376194aca0356e5c8be53fe653a88f5a10c1f73effa8201b3adf55c5a17";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+functional = {
+  revision = 65485;
+  stripPrefix = 0;
+  sha512.run = "a8fd828e18a6162811bf750bb631240a9e1409e52db682d2b7285c369ce2d425889c7e10e3eca98d8a49b496ff7e276b78af09dffdc87769ada063639f165f35";
+  sha512.doc = "d8ea8ef65648cd46cc8d9b42e0b361a3848078cf2e92abc4d3e8cd2f115320bef414b2a8c762ddcb730ca92204c4c3c33c11d34b804c4497f26c804e53744aff";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2023A";
+};
+fundus-calligra = {
+  revision = 26018;
+  stripPrefix = 0;
+  sha512.run = "a999f372ef266e66a199935a0783d99293141aa08586a38d65a3748c1a239eca7b0faa74d537085852e79520343ca937943b30ce38820fdc925d75b1a334aabd";
+  sha512.doc = "93aa54f12ade2eab798bd84596ec3b366db0a15eb05b5279261af8bc13bc1ce782077de36465e8e29d11ea1b89456ab207c33ab907e5c31af95e63d5d897da88";
+  sha512.source = "bc5cfc694592c7a0fb469f752a6ec854d11d9f69588fa6e42390080e88cca3da2fbe888b826ae7a3c07505bc418129237faa791dbf4f3dd9a31cb8e06ad1a9af";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.2";
+};
+fundus-cyr = {
+  revision = 26019;
+  stripPrefix = 0;
+  sha512.run = "de84ebbe6e70f61bf9765b9368df95fa5ae607a8d6e1c5535240e8665bb097c6958956d1b19ccf12a2a510672675c7ffa08ab98bd80b6ae2973fbe65d0e8d343";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+fundus-sueterlin = {
+  revision = 26030;
+  stripPrefix = 0;
+  sha512.run = "b15a1fa2ee3272f25a616234a335d0bd5c8ac810724ecf453e172d2b68293b55f01f3e57acf81c17721cd3f489b35cde077d5456b78afacc589853224f1bce94";
+  sha512.doc = "7162188682c9129e1788104fe94aae2a70607e276eeec4367ae60ff9e50d26aa88a73998028b99ee42627aa27e8868ed2fe72063db2e033798b09ff0b7a13477";
+  sha512.source = "59f5e1e7f338445d3e8430c5c7cf69de9499a659ad5f32566c26166bc2997eab82964919c50aa15311d19c80a14a1a7bc4380e985f382d4ee89c387faef38b37";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+fvextra = {
+  revision = 69001;
+  stripPrefix = 0;
+  sha512.run = "42c77e74ff16a7aee9f79f8a6f08309742c1168138ccec2a085baad525422119bff6c10ee323e29aa45509789af188eead92379c5bd0d30c5e4a9ae557a0d991";
+  sha512.doc = "27ee96621793f4da2cf719c49edeb3cb272fee6b31b13cfd86653ceb027c84dfaa1885b82510de22e0ca1e365ed783b745190809482a9f20796617e3fbc059c2";
+  sha512.source = "49252913e7683100f1f12c5bf85420b6de4832d68af740fd8bc0f7fd1a18aa9e39005f6217c89c4a532aa72250bf0dbfa6de7f5991dc48fd6fc8b91e84606a5b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6.1";
+};
+fwlw = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "ac2c981bcc4da92a7f91c3ac17d66c4e0e7c94ff1bdb3bf3c7f6a4eef19fad1ecbbc6048a5c74627126c7e1190ee18c2c9373e80d52130a2d272c58ef70de6fc";
+  sha512.doc = "bb55ca044aafb5b11b89b3c817066c4fb20facba8812667398ecf945bd8ed4b11bec2dfd21455db9cfa5e81e5f865655a3e6f4d3724bf40e47ad1db708896902";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+g-brief = {
+  revision = 50415;
+  stripPrefix = 0;
+  sha512.run = "6c0a8e653cab5f67a85d25e18b98371323b3dd09365f6a3d1b47eee409b233db4290f6e6de70128f5b45facfc7771475671990bb2c79a1718c74972bfba78070";
+  sha512.doc = "147d30be05a9224e141d9dc23a81750d0c43bf590d6e1dcb3e92fda6c668031522ef410904e5c7621c9b98879d6809fe604cf47de7f24891bc7e15c7be5ad05c";
+  sha512.source = "447a25d983f71d109bc747ee8ab9e120a0b7c698a9238ea5363d4d826383af5587f78f21c442d4e1d999eaf4cbfee813063f7547e786df962866e57c55673c8c";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "4.0.3";
+};
+gaceta = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "54c42cde3613f1fc28ba0a675281e64d2596e8f3c7831e1b1611c34fed1a82c01da2d6eb98058d5776ffc625d04e62359f63819307d04c6296705de74bfcef66";
+  sha512.doc = "594fb3b44492018c6777e014ccc4784813784d3e282cffec0f6b6410a59f088ee30c8113a714fa41369eb795b35a1c615f3069a43697d0bed887123a44c02bf7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.06";
+};
+galois = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0c864940c2a47ad82f031868c1933679f9ee0e5ab01e98386433311a4230a77c7a5d41016619fbf7bb1957fecc259bd092d7a0894eedef91143a0d85e68a6978";
+  sha512.doc = "7c71fe703efe235b3d1cf3298c99f2ba7dfbdc8d7c20861e8738070ef03b9671b1a4f6df40b2238d4b7cf9e765a1cfdc6210ea63ad06dfc60e0ac7a101735315";
+  sha512.source = "f1f62a005edc9b6b5c1b294aedbfe00cff61c48f22d2fd0b90d76b1c6144fd9c8b885890e4a6c6e64e054ceb67b851c6fe3d9f2f1baf2801f070f0bd269d4925";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+gamebook = {
+  revision = 24714;
+  stripPrefix = 0;
+  sha512.run = "4af22bc285bac3f368778dae5c91cf6a1999748a6dfa5fba96e166ed320e124c33f2b6d6bee16ad8d00d0f8067b24bb3567a1aba849b74a6b02fed3bb85dbc0a";
+  sha512.doc = "58493c9b39343846913263f53b3bfe0fd89e4adb4154580d1bb0ff5d32b5b91ddc75511a0241fa3b98faef8b2d9d7c1846aca486e0c7262f8b3ea7a6bfddc619";
+  sha512.source = "793f5cb23ef53b3d24d10ac5d52cf1e8bf90438571e23b5171c778ac720fb2c52a03a90e1f83f353df0b5410e94b5551d0855284df72c34a0f212842a3f96c41";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+gamebooklib = {
+  revision = 67772;
+  stripPrefix = 0;
+  sha512.run = "b100e95290634e0697bc420259b287650c8bc436a950749c8f60955b4bb1f622f692730640c8b882400d7f1ac7a9cd847cfeacbd5310a5bd57f3925f21766159";
+  sha512.doc = "f34592d3d47f5cff749fc0bc44b4de233a13bb962674cb22e06dbabadfedfc303049c73b18cc0807e0f1827ab583732a0019345991b3bedd6daa1f3e84c40108";
+  sha512.source = "0c97580b9451a154838e8e32a67f3dd2af36d1a9e3a464d0912a0ec2e6a1338f617855ff49b199cdea21dabb2678b1e99c58dbe2a3ba5c976eebbdd87edd5a20";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+gammas = {
+  revision = 56403;
+  stripPrefix = 0;
+  sha512.run = "8ecc1d5209ee6492e032b30e217dbbd0ae4c1ad9ab5a42e7e042eee63809aa257c8cc5d720f54be5553c8999f78334b8057bdac1134d4788144a3cafade7154e";
+  sha512.doc = "62ec08047df846d2e32be9396356fdbdb9eb9c1867079a891bececc1d56275666127d997ddd4ed2c2f73423dc4a2e051586a1b06b516fb77372b04c60a4ca342";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+garamond-libre = {
+  revision = 64412;
+  stripPrefix = 0;
+  sha512.run = "2c8a9057bccac0b8187e7e7b38445102e2ee89885595d93eb3dcd88bea4fe18d73786b471812f9a0ba256a6fe16ceb3724902e587b3ce6a98a1461d554182698";
+  sha512.doc = "b8a575d15c7020287313aed6fc7f08d4d6d9cc02633527a657db4fd0fe39a25154f7dbbd9d6516ecd4662d08644d803822a19da43348f955f553725558c0dd6a";
+  hasRunfiles = true;
+  license = [ "mit" "lppl13c" ];
+  version = "1.4";
+};
+garamond-math = {
+  revision = 61481;
+  stripPrefix = 0;
+  sha512.run = "fcab922fc4faa8468a2d8076664567c8533e95dc6767eabedee5c053bbdbb721890731f0d976a2d6047709f058a4d5e029996a5a5574912d21cb493f2975a76a";
+  sha512.doc = "c7c5795e7d9de09a590dbfd7311786027be9dcbe51b1f40284639341953effbb0dfcb331061cad0a8d01df55c52611a8d61a6b62fba701565bb643826ba55734";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+};
+garrigues = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e1440fcf8eb0ccd3b140649c590c902882a8a5a02d4cc14589ed44193f3a70bf13839e9de9663c500bb6874d6fce34f5a21c07e38a7456738548b6ebf449b258";
+  sha512.doc = "0c91f7e1c8fe4910fa7052440edd9afd81c8932e99368219c8a5037bddfa4c8c11037576e9c94721062df9cf7fd5d467389ddcf3aed3e1853be38846c049100f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+garuda-c90 = {
+  revision = 60832;
+  stripPrefix = 0;
+  deps = [
+    "fonts-tlwg"
+  ];
+  sha512.run = "a806538598cae0365968ab20936631a052dc65f9f6056c39197f7b1c7a5aad717a7a8b72ed2a1af347f8ce91f27d7dcd74b758db8f01fc7810a8d658990bcc28";
+  sha512.source = "58f62ec8020489b69743c0591129967730f9ad0729f7cca343ab6e6fa6675122a1e37bf73f090cae050cb695a14dbfb3c52346e3c528e660484d2cb576aaca65";
+  hasRunfiles = true;
+};
+gastex = {
+  revision = 58505;
+  stripPrefix = 0;
+  sha512.run = "7f75503d009584119967528fabbd72a8f0b0430cbe67fcdf4ec0e0bd5dbf63279e10ef32c897eab9408d518a1c1d1d01d3a428e9b7f72cc4d7387e3b692a6caa";
+  sha512.doc = "86f3ee5200e41def7d13df25d175c955c2df562652c4783c8083249eb924c01556cd402bf2f4cf44d02f94cc280e1643c2ad2261bbd191678e3c9039430d1c58";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+gates = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "704126d5e113b9718654e5d611d169df17b45ec09f187d86d1c108a331e80939d0266c4473233277e1b465a70775da1ea9576744171209ab45203b4059b96b83";
+  sha512.doc = "a9cd7d2c616021d429b299027503fed60e8474774b6d57095371f1afaba68709770857ba09f74e8e5223dcbdd1d9f1f70a0ec81c3801b1a77c3a494336fa86bd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+gatherenum = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "c700375b321db078bc99492ba42c03855a80db6c1661590dba6763d52c65ec7c86a9889a38956a5015b78416d8c7a296efd764d1eaa758891cd8c7f7d4cef8b4";
+  sha512.doc = "a1f184ec862cb4d343b4dbb8014faee217a61e1f72418a8472a2a46b6731af4e3e767755f4f367631f40199aafd449aaee9bf409e9358822ed6006eed495d4ad";
+  sha512.source = "378a9b33f0b370fdcf8b068e8cb58def5b9c66b7cae4a72cd02d4fee61edb060bac43fd30180c5709b2e7367861430bbad0ebc812fae9520fe72382ead5b0354";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.8";
+};
+gauss = {
+  revision = 32934;
+  stripPrefix = 0;
+  sha512.run = "9dd3f7685a8b7bbdfbee1fbe5dcc5d2819091c7c20df7979b1b0fb7971e613e45b6321a18674e88bb0d6222f050f0ab3959b087be70b90b5bfefaeffacc733f9";
+  sha512.doc = "50de7e9af2360367de7f7136def2536a82348752656b1c40022d7e13271cfde64e67bcd482c2d208f47b88a30560f8179b7b8706288809b41d023c037147f0c2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+gb4e = {
+  revision = 19216;
+  stripPrefix = 0;
+  sha512.run = "1ec519ad5f22e6d61d16a0233a73065b45e8628549bfecd109f968b8749c362cd04f358d67e96b1311577f94f6152e7de7a9e3264ffcff5c5769662b52df7e29";
+  sha512.doc = "9b8c8e2590a1a515aa84e11a4028aadeff9e4acb7d3ce99b0d21009e17443db3d2feee85d888a333595e144244efbf978239e6dbf48c68a43bd5709d9489c203";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+gbt7714 = {
+  revision = 64633;
+  stripPrefix = 0;
+  deps = [
+    "bibtex"
+    "natbib"
+    "url"
+  ];
+  sha512.run = "f2f869bf4d507ac76ee576f1bb739bc5e5681d3f2cb1db64841f90dfb22a9b18aab04c5722e231280cb94f055ab002ed99fc965bdbb3d2bdeb8d953f704e73b2";
+  sha512.doc = "17b79fb795d0b2a0f2c696da83ee1196750c1fef15c77d33353d6742443d43287b5bb96c349be8e58b0df538f4585f45b353234bb100318cbbc6de6f14192da9";
+  sha512.source = "0d7e44fdd1106800d2dac2cac49dfe4c9154498837e27880f0193fbc8033f2a74fe5670f79c929ce2216fef216288e5e072f1ccddd23cec85b6265ad569d21d0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.5";
+};
+gcard = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "de462bff229779faa33c546d525e3624f1ed372c09c1b90fa9270928caf0a2604f2bb9d3ef0768de7dd0646202d7a59995b7252c0b83b19eaf777438bd1acc47";
+  sha512.doc = "f7fd3c07e053962c88d0a0b8e5899272a3bd9af4cf1731f88a7014773d8f0ecc91fb45e1e59b1a372d8c8977e1dce91c5162558d0245d77a187ac7787a3710ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+gchords = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "7fd655af5446982b450e3eec2b8966f2fc17c11686bb75f516ce0043af651b90e4f88c9cfac133929fbb686fe3f7be6de64d89bda6822f218b691791c9207950";
+  sha512.doc = "26818218c9e3142f4bba491e996556b28266953c6b84f1c3de58d60b1bf100d15513fd2898507cf43226eec127942dede647784060668d86bcb22e3fdaee96cd";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.20";
+};
+gcite = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "169d9e96121d80bcbe7580e7ff447e8df252b19dca5b304514a792764344df679e9275b1a552d67070d3f5b0fc41c70a6cf1ce9c90358dd9ab58878643be6015";
+  sha512.doc = "d9b50778855efc00ba4d6d6f48891865853b8de8e55c3432140b0ba69767c6c13ab934c2be43b2556a862bbb5413ddccce158ec4130576617a75708919f1ab0c";
+  sha512.source = "44e8fdfff2e015a9bb034496454016f8f03e08e2f5b8ca907670447694877a383ca99a5673db107397dba07142e99cf01d9ee59a4a360d6146a389de7d103cb1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+gckanbun = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "ccea354895392747e5c84d750ece8f3717a0f9c529fd5b8b7ae2554bbe607b4497b9a8d213c479d5ad11e8ebc40187799ffced6f08f4fefb4e6d3cf223566c98";
+  sha512.doc = "4a885440883d615ad20dc083c768c3b64c3cdc627e1daca4008dbf07672ad62e8020a9b14f732d181c4a902adddd49908c4a0e41b3afbe2d68d2f90c5989e78b";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.2";
+};
+gelasio = {
+  revision = 66805;
+  stripPrefix = 0;
+  sha512.run = "d5ef910eee7b3e26a180c88ae104da77becb4bed3a955938486d6763c2a0dc51e71ab6f9351304894d5e531fab714cf75f6a0cc421d074b3ac86931698582274";
+  sha512.doc = "aa49c6e0bebb4c097b78ba11781f7027b783c6280a5fa0e3077f9c1eb20f6b372b3910f5c78b0103afa2429938a94b277bdcacd210afb8bad2bac92f5022ed8a";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+gender = {
+  revision = 36464;
+  stripPrefix = 0;
+  sha512.run = "261d57b05993954b80f82844f590f952fedaa4ade8f89704f2e2b4e2d18441ab5c8adef2ba3dfd81b61bed53150b737ef72964e1faa44ca48e923cfeb5a1bc14";
+  sha512.doc = "7c8bf143cb7ae1d22416df88aecf7e004eb02bf199f74f8003aeb9ae3923a3db42f1735650fac8aa908bf220f16ca48b3e4f9dbc312668d87df65149ea674be4";
+  sha512.source = "ac76060cc1b8c3bd876ccece1d82127575b956fa1bd3bed63d9d8a927845c8477c903b47be3a6e2d85de06899957d273d981f250cc7d02a12830a8cbfa6f6183";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+gene-logic = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b7cdc0d653aa8e25d763ca4115fa6fc857ddae35ed835aee6b6a204ba83d01ab91928b00248c40677ba132ef113276912a6b85dfd456d937114a3263a1ef4c7f";
+  sha512.doc = "db358777af18e7d2e93dc23084bec0f47270b4cb6c6078382a1eb9ce288aed06a6f55fc30ce728b1312d06f871458fc6b5b697b1073316e8f727b5ee80f99468";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.4";
+};
+genealogy = {
+  revision = 25112;
+  stripPrefix = 0;
+  sha512.run = "907394cb0ca9b3d339d78595e613236038ea2acce27c4468b7d028d0db7ddf36f7037c4f0bc63d5970e904d0675bcaf057c769239a79f064fa6aa9dae4f2014e";
+  sha512.doc = "34c9d737d31626331a18051a5b04584fd896d7cb8ea1814ff2fbf30486ec3578b2bef16155b9c8f2ca645d42f797f3101c799d3422c05f824026e268fa4f94e8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+genealogytree = {
+  revision = 66513;
+  stripPrefix = 0;
+  sha512.run = "603091897c07e0d6643482ee754aa9f0a49ba4e71e3a426c35404f46c6f6fc43a6d24f721023706cf0c03b152ad3153a8322b440a89ee6542edbb8aa71a384f1";
+  sha512.doc = "88757eb6be6ade83a5125da7bb7bd0abb3d56367a330607fdea9b05929c8caaa4fad0be79863006e9048daa66aa0ce7ddddd1a2100ae9dfcfc835456c08453f4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3.0";
+};
+genmpage = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b2618005fc0f00a636e3a307ba1038f8dd39798e2ee2afa4d9169eb45ed4b38a67a57bfb516e9dd8d93ea0210a7fcde21b26c0564b974442e18021d83f905265";
+  sha512.doc = "c428886adead6fed52f0d249db34a950b4f22b03770ce1bff0831fca29477ab92b5d83a9719b73aa45aeb5f2067f31afc810b6cdfdd69e709ec5e61a08f45472";
+  sha512.source = "563042ab68aaab51d357c957111419012a0edfd27332bf30be0985e8625abce945ca6a6a081e62f6d0ee29b6885a55270553b622bbcda5f369ad61b53d4ea723";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.1";
+};
+gensymb = {
+  revision = 64740;
+  stripPrefix = 0;
+  sha512.run = "311de4fa6c68b21cdc8c655a7092d98772398e82bd9790e0bf00898a6575e234da44534635dfdd500eb7815d302a4487162f528452caf373ed11b7994682a43b";
+  sha512.doc = "4175231e5b998f26e913374ad20b2718d4c566e5b220bfe4de9f89ffc4422b2aa4c941acc067d392eb43a725d93457b1c10d8568f5ad0eb7c1aecd4fa83e9746";
+  sha512.source = "56cc850ce5a2fb0d84b2232f591d3f1e3ed18d1924d365fdb6349237d98ac655b0881febaaed414f4903eeed7889385b4cf985eb3cf72c3fbb37392e8586f848";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+gentium-tug = {
+  revision = 63470;
+  stripPrefix = 0;
+  sha512.run = "03a32d7926747e42f25daf87ef08f866b9145a7782fd372a4688404951211a3528bcad7ee5e4a6888cd8ede2602930f628141953c840268041edbde2624006ec";
+  sha512.doc = "7cef5c563fa13b5b8458e2932be450edd48168da9db9ac45ab16ba608323beb4ea79f8dabf2c38b13b479de9ff3065a0cfa84ff5c259aea95495248e9794ec18";
+  sha512.source = "b2743e38fe079ca3d46711fbcf810f4feaa1bf781e35bbe33b62cf45cca3b2ee1ab6da22d61965c440f987f9850e614d3f1691f8aa0d01beb0f56984c31e66f8";
+  hasRunfiles = true;
+  license = [ "ofl" "free" ];
+  version = "1.102";
+};
+gentle = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b244b249329d1ee622686d2a44d1469ceeed7e2adec5d82a2482e8659266a8224490531e0ed971b56f945b63fd1081f29aded9c43cea78fa8a9aec836301b26b";
+  sha512.doc = "fe296c5bc38a1e6d13d2b46dc8081a6658764f7017d0831cfd46dd86082371d6ae095ec3b52b3aaaacc0a57cbcee066b94644a5746391fae4129eebaa246e146";
+  license = [ "free" ];
+};
+gentombow = {
+  revision = 64333;
+  stripPrefix = 0;
+  sha512.run = "4aa08751c2fc9c6709031d53637e0c2dc734926160f357df53bed6e4c33c4340e33f9dbb92d3ec2bf5dcc7b552c9508622986edc3c30d6fe15cc8334a0773779";
+  sha512.doc = "af1d418f108bb050d8380223548d7fd77681e942a1a48aff8b7fb2c7e7a4d79b288e47099382e6ab9218bca78dc5406a57a42de00c2029f080285d6f11183a5c";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+geometry = {
+  revision = 61719;
+  stripPrefix = 0;
+  deps = [
+    "graphics"
+    "iftex"
+  ];
+  sha512.run = "ed64996404299bd8379197b293baed752ff064e04eec87ffafdfd55cf21c2c48174560eb1c3bcdb0b06190badb9d9cc699aaa7a2ac8a5c537b0c818a423770fc";
+  sha512.doc = "a58ab22ae6df349d81b5ddf18a4e9b7dbb5804a497bbaff42acde18ca59fe8a19bfee34293debc23e44c690456e6a1b1d87614fbb85dc6cb3b3b7d330fc866d7";
+  sha512.source = "f4e1e8c0f5b8f443c8f5e6ad948cb1736ed944384daec20e9402c871872e86248b3167c72e07fc94fe32ef6ab36c17d2f177135ccf99f68d1c892af0a695bcbf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.9";
+};
+geradwp = {
+  revision = 63134;
+  stripPrefix = 0;
+  sha512.run = "b5b4cecbe95f3091348b917d9cafa31a5249bcf0b11b5a0be405d980c3a22d7af6f241af12ff999b5bbdf0aa3aebfff537e8c01fea9bdc904709eb66b3fc78bb";
+  sha512.doc = "e12924c6e3437f0d2665bbfd97aa7d88c491a159866a3ec7ffdf9f84298e4bc0ff336487a194b68f0ebfea67dbf415749118328ac1606f02f32193963f6339c9";
+  sha512.source = "faf85f46bfe88f5ea1220e69b514f6c026096ca331f53bb19d2ef2f1cc728cf8b9c46d394579bf78ef60d1b75c3164c2c8c204e959d4a298dbbef2f9f2dbe5e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+german = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "6cc469012ca6cb76baf2bbea00d198b97c2694d9388e90d2ded6b27da30f8d56aa2e6742ecabbdd335b7299c0c7476cc5479b59fa94468c9354f35ce18b59732";
+  sha512.doc = "b9795ae418790119ca923079221114b9bf608ce2460b810cb39575910c0b173ff445c428a2ce6260bf90a993fb354d2b5c300ba58344d907965b65bb6f2d4ee3";
+  sha512.source = "9064ca69c304f86eaaf2530bafe353902de078530f57f39cfcc0a9dc0d5a04ba5329ac9d0e7e10e3ddbbbd380c14b4efd8a5b7a6b0099f2c504563af74469c42";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5e";
+};
+germbib = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a7854f834c868ad80bcf986380f19139687eb80309e3aeb9a001d2030c5bca51de617394f920801834df460d05b52878301c6b45a52666984b3ba2d0910c416f";
+  sha512.doc = "53dd4fff2fbb7044436f37e8a2baf48877699db4f99b92a701d10c0230439b00b48ee09051839efe4392abdb4335c3998d92d6239802c765bde4aa2df3d34ab6";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+germkorr = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6819a79268da2704a3fa6baab74be48ccd591ba998a0b012d323cb0149273deba6298a92629f0d19c19725ef0b41db9dd28adf9bb898c1c637038f9c22ad4b16";
+  sha512.doc = "ab5362e069674c2c53709bc776be9fcbcfd3e56226a8fa7b9230c2f4ccb6fb74bba20485362f48130c153d81df838281620a628671c202cd60a52bf8ab5b89cd";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+geschichtsfrkl = {
+  revision = 42121;
+  stripPrefix = 0;
+  sha512.run = "24cad33dfcbdb8ab91a80509771bd130ea6682a14fea5510ea202af73155653471deab91abb43a302b9717c252475db58135ad465f28509adae5d8583bf98e0b";
+  sha512.doc = "6d1097dd0047c029100358bd3161f2ca515a09cf9a62b2633d4797059688bd5c30e4eab11c31081faeefacf892415c5d9a4985d20245ea9cf79b4197925ed2e7";
+  sha512.source = "28c6a7181bb91d32ddcdbed7dd9824c8a63a351acc39f4c2e60ca507630fc23b0afe62380a64618d882fe742388d5537a435dc0b6738ba8d5288c5f2894a4064";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+getfiledate = {
+  revision = 16189;
+  stripPrefix = 0;
+  sha512.run = "017b3ad95801da2788f2c5040225c6a8a2ac6d005c1d68d9eba0be061dfc9fa6f088a0279a75d25bea8ba380e4a92cfbd9b6a6b812d08cd2f86de097f7974fb7";
+  sha512.doc = "490daffa0b0b28c9c02d745d8de50f22395f6ae773e07f6e826a8ddaff0d38f9ee48e822953e9642e46be26084ec2919bcac76c388cb3f42965f1b662e4e43a0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+getitems = {
+  revision = 39365;
+  stripPrefix = 0;
+  sha512.run = "8797c7e70f1c81330b68b6c386116b0caf2c350a2b75724d796f0ab7380a2ea4cb2ae293ac3e6b941887b30faa2b73775c2bfce7c674ee98c4256a23231443b0";
+  sha512.doc = "95302dae67f3193dc3d52b4e5724584ee066eee1dbba30b1233faa0c65fc568f932805b18b8054165760a2b655b486e7f3115d3b37be780f8f5a7220f2f924fc";
+  sha512.source = "1bc8b4c2b75c5cf43e18a510e5e479a7109ac440266e0dc7d748d6ef391280d81f72a07f6bfc518c6c0c313b7c8e1e11cfe9ccaae33540e1b48988414bef5ad1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+getmap = {
+  revision = 50589;
+  sha512.run = "e5287152442820e20087b45c50a750af621e71e2175cd6790231d81e1f338e50aa75f29d9fbc31c2e5802229c8f15c4e0c7769d0513f1d1b0bafc96a8a3b120f";
+  sha512.doc = "bb55c60ec958182aaaa6dfc292a06fbad8a0ebdcb56a6799f1358ad2009bcb72b06611672219c5e9bd6d7cb4db76c4fa030be5e06f9bb38d04fa6744f8bca330";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+  version = "1.11";
+};
+getmap.binfiles = [
+  "getmapdl"
+];
+getoptk = {
+  revision = 23567;
+  stripPrefix = 0;
+  sha512.run = "6a2e543d0997c52155807d0d2641af9714cb09531286a58bcb2d5fec0e70c694edb7d603a250281a641610d1c39495d5f93417da5cfea7a86da1fd53a98ef77f";
+  sha512.doc = "fba54e8acd4f494c4e859c8705cb97923e477ed909720adb8c4735c527c3b13799ad74ac1700099bfa282144f2b38358b890bc52d4ae4a9e16699c2d0e10619c";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+gettitlestring = {
+  revision = 53170;
+  stripPrefix = 0;
+  sha512.run = "101ad92c2fba5c43321d8e12754190e09b0442508799dbb6bac23d5cbe96c470425a4cc10a28441408ac5a1c406e18aab7567f2464e48c2692fa38af1e23a16f";
+  sha512.doc = "f9e33fbe89df368c4c5dfd855f2fc0fa8c4d1eec5c0ab925b0a28b9f021fd2d88521895233d12783a023e40d70b05a0e849d4551f79fd4b8d0af72fb60a1af32";
+  sha512.source = "9bddc79e0f839a21ebb76e21e20ba5a26971f4192ebc2209468a780a15e5e5f61a328df5f033c115452751a31d1e6dc2e6e238097d2cbdbffa33f56ca420b602";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+gfdl = {
+  revision = 65415;
+  stripPrefix = 0;
+  sha512.run = "d93bba6171e3179b559a26ce246b6de423c06d0ec4e360e33b4d140be07645b90aea070d41d988d0ddb22f6686789e96d9df5e3f1c8ff8cc23829b7be0d015db";
+  sha512.doc = "24034eb02baab28efccb6569425229f6e2dd4a0254c926e9153eb6e8802d0cd18d9af7ff4229dc1f8b39fb5dddff767b33e026b12a3443cb3c62f1f0f5e64ade";
+  sha512.source = "be816d4aa6547ae5e48201b5ec61618f2868422f2a3bb87422543ef4faa1461b8b7368a1dee29d36881e0e051b7d684ad90f5dac4b5f43dda70b5e11540c5b76";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "fdl13Only" ];
+  version = "0.1";
+};
+gfnotation = {
+  revision = 37156;
+  stripPrefix = 0;
+  sha512.run = "4f99442eacf28ea13cd98ee4bbe981b95ae9d849e6bf2682cac2305fd793f6e9f5e4211362385890956fdb24ef03748e9cb0184c7ba9ed89e7985b2caa3e2da2";
+  sha512.doc = "b65d173c11400a7681510cd837ac6e8ebf65a458327bfdee140013d49a0c6fcc339f6c45d4b4ee918585acaf785c12e66b3df5f73f01a1f2d8c5b8db58b9c47e";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "2.9";
+};
+gfsartemisia = {
+  revision = 19469;
+  stripPrefix = 0;
+  sha512.run = "28cb811a30c06bd6390b9268dd2a7a4dadcb2fa9d426d9461af1ba5593b2c419ed1c7886c3aef9bdbb0f1fea3d6bf127ff6088a6b2c2048dcccfb21c2a06a5ee";
+  sha512.doc = "9f2efd76c243177240f237f7232fc87eb33d7ea1177a7bfdf7d506077e19c40d3fd923a960595c46f50fa19979598bd06a1865cae8794d45f91da1d6a9a60a7b";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+gfsbaskerville = {
+  revision = 19440;
+  stripPrefix = 0;
+  sha512.run = "b545ec586b3bdfe3da2cabaa959ceeeb4ff513b48024575b1b5e3c57bb2d10a0b4e2cd7507726275eed0826dabf03d05c20eb9d5ec341aaedc0313264214ef78";
+  sha512.doc = "a45ed2b35774755a6558431f784faad4bbd63aa81ad5d80c3cfe3f7726604aea3e4de2baa72bb27a4e2271e9bfe180c8963d06b880a0efd2dc5f7789dcabb51b";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+gfsbodoni = {
+  revision = 28484;
+  stripPrefix = 0;
+  sha512.run = "e01cca38176330bdc0a4b523bd2bd4f73a497d90a34682d29920e145d11ea099f163fa08470c79e10a27a137a5901d7da9db54e461667af61c687adca1960249";
+  sha512.doc = "c70b1a32e945d82e50b8a37319ee2bf63d4800b381f317168fd945311485cf6c41c7a3112e89457f4ee40bd29736accf681bd61494120e3d41f0c8fb28ad466a";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.01";
+};
+gfscomplutum = {
+  revision = 19469;
+  stripPrefix = 0;
+  sha512.run = "4013ef92910c3c1145708afa5a9ff13cfb0aae05e6b225c56c98090ea7cd223799e73212982312a14cf504a355dddce08e3364df8c046dfe462d07429cfa617d";
+  sha512.doc = "5854b000522120f6a1b065300943fd8aebcd75f57da15d667616a3706d35ffa35cac0422712d0b008dc2abf2b9deceb0248fc044be68f893f6ad0eefcd50b316";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.0";
+};
+gfsdidot = {
+  revision = 69112;
+  stripPrefix = 0;
+  sha512.run = "436a8cb4ea88663ff3358d6991fce9364f197027797903eb1b5c74ec0a857059579f0a58597ca6427c1651bf89440d7b7c8965e79fc668ecf444dbcc9f7ed4a3";
+  sha512.doc = "29b49271f62496e6537e84301b361d372b24cf208365d97f3ac1d6d5b82fae84ff82954ad45e87201eee0df9dfc58f3486049e219480d20add06e9eef934f17e";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+gfsdidotclassic = {
+  revision = 52778;
+  stripPrefix = 0;
+  sha512.run = "7b07a974f5447917d0a10a964011f2ed57db2dc9155384117310eadbe1dd05067dea6d617a598545713fb9250bda4241b0b2d5bdd84be4fb8c994d8d8c4e5ac4";
+  sha512.doc = "3256c1af2f7b0d15625eb3a7250e15b9645991b3a7408d11afc77aa65bb067cfc3682fac334a61d67f894468b3a14c21e694e4b7445a01ce88203af06a269031";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "001.001";
+};
+gfsneohellenic = {
+  revision = 63944;
+  stripPrefix = 0;
+  sha512.run = "7290de85142975c61b28cc8d3e5919805590e2be5f5b442f0c371c393f92012ef6b00997bbac1aa1fb63914578e99eb5e6b26f6af8f51cb5ec7f4c53ede51fd6";
+  sha512.doc = "231ea0eb57834e5b781cc3e8f49a85e2564756abe3812a432212fa7e85468117a1d80d6af5db8cec754eb1996d3b9716c12c403b1865d60b18660f454a2323b8";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.02";
+};
+gfsneohellenicmath = {
+  revision = 63928;
+  stripPrefix = 0;
+  sha512.run = "17e81da77241b3dcf6727ee8e954d9ea24a59a235d8e454b77204f99bec343d020803790ce6ce82a22226ef48ff29e65d84b6ec90e44286addd3ca727e8fbf1c";
+  sha512.doc = "efb0faa6617a402b6d840d9f20303a8acaf4140c60b8de285dbbb9794dc6212715cec6d1fd2cdee65aaf348ed1184ad66c480e00843801203f47fd3a4058250a";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.02";
+};
+gfsporson = {
+  revision = 18651;
+  stripPrefix = 0;
+  sha512.run = "f52d6cd8d0b674771dd56a5d2974fd3edd8b4685bb201489e578c62d1e31b5dcb6f2cb2e9b05702ec439ec7f0b35740e291d3a92de53b75870fd791858f8a474";
+  sha512.doc = "3dbcafd00a88537db9e27aece276df08da805b59076d5e65395a4752d8ce57a794f23508238e96ec26b8d7e6d25e11992c2a567e44ca2f930bc44b9dc980202c";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.01";
+};
+gfssolomos = {
+  revision = 18651;
+  stripPrefix = 0;
+  sha512.run = "6e6ac03cf7ee20accfb67855b3dce136e3caa2466fce760adef0a2c1633e0a170543cf861a6a07a0c80344ab026dc2f74a35c5543ea92a53f7ce8a1042f778b7";
+  sha512.doc = "67640d1a95ad7ec43d7df407916cde264c5460cf400011cf0cdb3dc4caffabba370f2fc15ae945e20b6a9bb6623645f6ffe80034a781cdeb11c400bd23985e3b";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.0";
+};
+ghab = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "7e919cbb0c84fe337dd05c749a3288990e750ff0aeaf119736108463a1684a18a66be94811a31156f951c871b2f073627914629756b06e747f3220d2ce08950f";
+  sha512.doc = "2cb7dbf5b43130b122618c50c18e513dc0ee0ce267cdfa6e710451d1fa7fce8965617d74d48748241321948ae8c5eb9cfa4945df146ed8e5d476d0fc5caaf204";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+ghsystem = {
+  revision = 53822;
+  stripPrefix = 0;
+  sha512.run = "42f94adda3268ce20f664113211d3c32e7ee005db053f3daecf72d381dd4c4cc2e78610b821cd4b43c4543610bc66170513c4fd9357445977a8a2ffc6bf140f2";
+  sha512.doc = "d2f1f42177ea820d209e9574def8efc0dcf9fac0c73ce1c9eeaace7bc0b25fc470ff7265ca8a4f42f6482dba61d7d764b2171268c168aa7eb154bb6f9672f52a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.8c";
+};
+gillcm = {
+  revision = 19878;
+  stripPrefix = 0;
+  sha512.run = "37c8141eac6b1636292479299f7df6b3dc128addf8f7ba680cef2c75d2f7ab04686134b243a86168c54052d4dcbc33f13c13a6629d7c98d3908e4cce5fb53f06";
+  sha512.doc = "55e02d36c12bd12932c2d220f892852dd1c8c947cdea09d058ad38e5e513dfb684e75a8ecf07f5711200f942ea7732519c739866458c330ee271bf45af32ed45";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "1.1";
+};
+gillius = {
+  revision = 64865;
+  stripPrefix = 0;
+  sha512.run = "f2ce20c1650588af9f446ffc6d69835e4e970def915e3912ef36ed8d065d717ccbeb125a783768c360328ba6d44e15f954348957d774dec8eb3b84f4b8e00406";
+  sha512.doc = "df8f143a6a80e9e5038744744b649fc26d042672eca7080fc8493a965ef4e3bcfb714735e83ae9a3bb500e3a298bc9bc9d940ff343caaed4ebfb8bf8d8101fb8";
+  hasRunfiles = true;
+  license = [ "gpl2Plus" "lppl13c" ];
+};
+gincltex = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "2137967697765b1167f36a858d2eda778b43ff1d681ec0d8af7963d2ab4a92448c6c1ad6933975afcc211d301cf168528e7ded7c3114c4b5ec580f42d8a7b664";
+  sha512.doc = "86ee14069c5522d7c0713a532627bf29e8cf71ec4c86184377cdcd8a73dcf0f034be9e92b8ff7c2caef8310f968c956d712f3281eb6e4d36e83a3464149489b9";
+  sha512.source = "ea7bb92e9f71606b39374bf43704187bd627ffa20e686d2ca09a8ea4c825e5cc363cf7cfb2a6811df7c82ff8773aa058362b9103052646e7ef5febf690abad22";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+gindex = {
+  revision = 52311;
+  stripPrefix = 0;
+  sha512.run = "b65317c570c923c7b6b84c2923122d844f895657267b694b46fed2d505348833a57700e4da93cde3d5a81e7589a456eea179a455dacb7c9324e0f65d9c718c9b";
+  sha512.doc = "2a3ed388473c669874b0474b9b1f45c60e2efd69e8c589a9f9086cecaeb5f1e3192fbb949c3d0b485422c7f6b49075d3db4cb8ba03bbdde0f5f77089331f770c";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.2";
+};
+ginpenc = {
+  revision = 24980;
+  stripPrefix = 0;
+  sha512.run = "20ea4e42fa07c21d8f2ae5d4419e6382141e6babca0b89b508744ea22d6310052f2c46e6ba0ad32b06f5623daee07a16eeaaa98378c9ad04dacb78634b9a583d";
+  sha512.doc = "4e343ab469e2445f6a2fd5297ae38d1cb42d4db1a3c438885815a2e4c5d367bfae3226a628e11152826fc5e4fd28a9c4bc5c393acea550c5ab33cd854d4f3e8e";
+  sha512.source = "b28077cb4b369567952e77198cb77f4edad02f0949d4f46836ae59d75a2f113f64446fba83a88e6155e9356797577fea72c79244808d575359eb7ca10d029940";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+git-latexdiff = {
+  revision = 54732;
+  sha512.run = "74077b3dd1a91a734af6d668b309f804dc58a282393d88d8d5d74a5e6fc73c197e49b462369f829cc7151e20aaf8085c0587428ed61ce7957a1ef173d92c5481";
+  sha512.doc = "bfda354f808c1f94dfac207d1526409a160b89292e44541930dac34383e3ffec9ce63d04db041ea5ac529e1e01fdc80c4c64cd43e8cdc14aac974094732d6fe8";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "bsd2" ];
+  version = "1.6.0";
+};
+git-latexdiff.binfiles = [
+  "git-latexdiff"
+];
+gitfile-info = {
+  revision = 51928;
+  stripPrefix = 0;
+  sha512.run = "7d3577b55f0154dd9c0a1aff3d46741631fc561b4c730a4f55a84dff361e6c27f327979638946d89ceb35370bb4051b1471481e6bd761fbed66757bc613abb2c";
+  sha512.doc = "ac2083dea1ae4373ee2482f41f9c66ab93a2b66699fa01449c712c219ec0c53635230b062ba58b4107eaf7fb54fb7eed76c5b9346ffc60f6f35b18a72ed0a08e";
+  sha512.source = "7b15a31e0ad37c75fc1e64079edb4ffe93d9e9a71fba7db13bb9ca7b68fa8dda0244fc0da473ecff8456459bb3f6f52e3edec2ac8513433d03ab107715ba5258";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+gitinfo = {
+  revision = 34049;
+  stripPrefix = 0;
+  sha512.run = "099bcb4970827cd3309f88278d8ed993856d5ebdabb22c3a3f558787bc6cae46378f7a92b88c5cbaeef496f40a8adf1e0740e685d667ba2376b5852a12af9e5b";
+  sha512.doc = "c5a9c948ad8cf8f2bc3cc134d60165ca4fc79117a6597a5981b39e26e25f4334f479f2bc1a0e22c52fc48794224115c0c170612c8088a414544d9f51b18421f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+gitinfo-lua = {
+  revision = 68808;
+  stripPrefix = 0;
+  sha512.run = "797d0a601440a08d5e1f2bc24ff275965e1412d545ab4ed88d8f174154d38da0f7c18afd10546d7f8e1bb0b98d395c9a9a36fae79cae671360124f07516b530c";
+  sha512.doc = "8724e388bfb545f5ffeca862094c9a5bee2d5635e1beec0e7d4f744c46b03ea63ce293a6a193ebcda5d53b6b54d3c96ebfeef6b5f15a1439d6ae6d4dc01ec31d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+gitinfo2 = {
+  revision = 38913;
+  stripPrefix = 0;
+  sha512.run = "7dd68c7b1d5ea49dcaae8ba1a1582676617bcfc6f5c6ba34eb1c62e60ea5b8ac3a50841a93394b640e8a79c3cfe447858fdd1630e4095683958f8d36439a84ca";
+  sha512.doc = "872b7fa8e0c97e4f6e0e1989b7c45507773b4f96cd56f7aa7064376b520d8f2beb4acfe71a21e295a8a457b86fcf7521809fa59ad02875466cf426fa09bd8aa9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.7";
+};
+gitlog = {
+  revision = 38932;
+  stripPrefix = 0;
+  sha512.run = "2fc9830dd1c43cf0c32fd743c9fa001287f5753dea38d8491af43803a1d98a0e09cd05641484fd2f7c47e68c8c6919c2eb9fc298ebd761166eb5b77c54d7f00d";
+  sha512.doc = "c1bc22cdf9b23baec98ddba49784a09c97e9e5f8c1a471dc39b3d58d67bb3ad2559f25766debeaf613b3c4e8d8bb4b22244de07d09e957ff09a94c0254fd3e64";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.beta";
+};
+gitstatus = {
+  revision = 64662;
+  stripPrefix = 0;
+  sha512.run = "153b9df6e1629d42a1c96a4f6c4c25dbe180db8976a102d633cd54ac36b75c1650328f8c5039ebb10c7927f7d6717a9260f39b7de6c0f9f9f37fb6fcfa9dffad";
+  sha512.doc = "e7741e738bafe379f71bd77aaa9b2a33c26b5da13f659181eddab01fcf8209ffbd0604d0b374368b7d814ca9608503f9e4004730871845e8f7b491e40bcb79f3";
+  sha512.source = "23ab1b1fe293fc842eb9ed3306e2b70d2fae8ba62178b64b29872f933bdd8f80b0991358fbd6aadfa194185790632acf2ec5249ef2fa9d490913072ba1b0660a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+gitver = {
+  revision = 63920;
+  stripPrefix = 0;
+  sha512.run = "c2a82b062f130225f36c66827deead41ad644512160351e216fd047b6f4bde03ee4798e5a753f319ce83b74cfe0ada5a9346b1ab12ee1058ce073ba114ed890f";
+  sha512.doc = "08f5ad70d40a3eab79a260958baa2e4d75872a93a33ac3398ad54049231693d3cb4f659ea91e3a53af8c19fbf6b8ca537c66f907b4592a45b155d895471cba63";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+globalvals = {
+  revision = 49962;
+  stripPrefix = 0;
+  sha512.run = "815a1aff9e889313854962e44c1c09a41713f4efae915a1d1a65a3f0777a4c36e9987c588c0d6f2f1ea91cfed6c28ffbe045a842ad71fd6babc91ae1bb16aa5f";
+  sha512.doc = "36a8b35ad90d9fb797a03b48f8cf818c9514ffe6e7c24be157e04455559d3004ac6011e2dbd16a4c478105b39ec0d2597f74e484a1913bcb180a7209b9191fb3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+glosmathtools = {
+  revision = 55920;
+  stripPrefix = 0;
+  sha512.run = "38d5eb1cc7337e81a1d824fcd3d6820928e06b421e1bd1141bc4cd859a32aaa1a10062e6a7a2512687245996c8848b42720085271c1cf6a24957bbe96ff824e9";
+  sha512.doc = "511c901bf123984727ccf8bc4e2449738a66fe866418f23b923391d30f6ad46ac260b5684b73b89616c07cff9bec0475e3553a70ba608c58873751d9a6dcbed2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+gloss = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "399bc1b809c01fd60934e28834dd7d6f263aded75bbede67507a5dc7bdbcdef725248b9a10d4ebf3cfaa981be33fd35a4ade78eb20b2b23cbf851376ad5e58f8";
+  sha512.doc = "871760a86ffb9d50cd480e2cd234a9873de48ce620f57a6538b36b0c1fd5e7f11342fa435e147ee1fb47ed08b8e855eba8168c8b755ed67ed7fffcb8f0e0ac86";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.2";
+};
+gloss-occitan = {
+  revision = 52593;
+  stripPrefix = 0;
+  sha512.run = "ee68a2f0c41dac79d00a4103804ad735b5bdc78bad660d5933e61e88290a2dea17a695ea45129a672cdb301e1c89e4fc319173df1fbfd87f944abbe46f7f1dd0";
+  sha512.doc = "1325b4c8c0ff8c1e53d27b5696da419f99852bd6c272176bab4e03f91bb6a715de51d24317b9cec1af50ee0ae2b34c03c51afe9cedb8903a1e8f74bbee3cc06f";
+  sha512.source = "043c132580baf8e66ac76a01312706996902c448cbd81f596db732cbb90d66be64d8a1f673275edaf11031d1f878587270663bba7db32da37360ed024e210280";
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+glossaries = {
+  revision = 68437;
+  deps = [
+    "amsmath"
+    "datatool"
+    "etoolbox"
+    "mfirstuc"
+    "tracklang"
+    "xfor"
+    "xkeyval"
+  ];
+  sha512.run = "bb81a95a1e379ec87b569d94ebf08f83823f825a70138a3770a3d1236424b976a98cd1265e7d68771460e6e96827761d697ddf0dbe48872c802414236e0065ba";
+  sha512.doc = "d11140ef1a6933170e59d497c57723e62d7ba7abadcbd9d3ee91e50171101d3e0740b0853da803bc7b9f56f86d7fc6cfedbe985e5e341cb775e850ee7c8ccd40";
+  hasManpages = true;
+  sha512.source = "01ebc5d8d91a666a2693a039305103a98de9b2c7a958a40be04275e948664b3c5dd4818e4bb686a3a2a681b0ee38360a43fa795ac4537f8d083a2637ccd3df72";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+  version = "4.53";
+};
+glossaries-danish = {
+  revision = 35665;
+  stripPrefix = 0;
+  sha512.run = "d9551aaa01e6f6720406a58f869048fbeac30fd629edd7fcdef657525dd1f7fb3faa2127cd81fb777d339ae65a1015e9cea7e5fe26a7de10db3a387152aaf0b3";
+  sha512.doc = "8e6097ced6686f3f5f0162c7deb11de9acfd55ca152c8ba3d4eafe155f645f33ec32dc495e3b4f4832e33300cd63d2d4ba56d018177f96426ee72e14cc60e230";
+  sha512.source = "f8a52fad43c5a95989ed8da27ad5a15da56e5cb2b08797bd70879327a512d9bad44fd217270940ca1ac541a880bb939b9e360fe5a686b0b25d779baa1bd01de6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-dutch = {
+  revision = 35685;
+  stripPrefix = 0;
+  sha512.run = "0e3d2607caa6032c8c768c1bd7c84808f6b836d6c167b1e0c720b57c3033c175269663f6e21edc248676bb2b73142c20c85cb6c3011586cf17d876e540a435dc";
+  sha512.doc = "c2d6ce929bb9e7482413886967beb598b6cfb4a2f84d5a2e5edd7039b94e397ba9ad2e63954178d6fae91c5e3aeb080a68ed466b609ba0adddf98003f570cfd1";
+  sha512.source = "5088bafba48d95e4392a5891ba3566d37a708cc7ed002243995d67ad6f6cd1eed19f6a572e5e3234c8e4ce58e815b4cc79e97d2644bc5341911388f7b80030aa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+glossaries-english = {
+  revision = 35665;
+  stripPrefix = 0;
+  sha512.run = "f62c43c9cb5a10fe5e364e6aa4ca500aae8b89e71f6bc80831a8c8211ca640f3631f011735ee5c82278b188bf896360b69502da2128e1db1287d24e44805ef97";
+  sha512.doc = "40c30888541114f5594403ddf251f0c209daa57c6b6f2d3d75b4a51416bf3011bea70cdc5f461e80a1e148181d6ecc2b2d7c891a7c75b1c577a72e5ee8ddc8e9";
+  sha512.source = "4a1d9cbf515c52d8f8a787970bf5537f25d6de7a66c3a1819cc5dec05df0f004aaac3734dba6ef813473db0cd5b08db4ddebca8dbc8674c2582abc7e9e85524a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-estonian = {
+  revision = 49928;
+  stripPrefix = 0;
+  sha512.run = "48eac96868bbeb636bc8d4352cbc1959829daab75716b3dea2ef98d98e388a2668a2ea1e35cc46f53e9ee030aa07dcef3e528f056f59d49883f0a00380785bcc";
+  sha512.doc = "5f957f53acaf6b56e338b606843cfa2ddd16dccef6bd2c74844e514c157ddbc3c5c24168cbe28c67894afab8d115460fd497de91f0142bbec3d1987d5889925f";
+  sha512.source = "f2d2ddecc5a338f844a9b98d50e636d69d31866e723e3aa261ddc5ac2d8349d01e76afdf9cc6b7a4b4d96dadee78ea6933c0d1c69d1196f11770c92cef356fb2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-extra = {
+  revision = 68409;
+  stripPrefix = 0;
+  sha512.run = "65f5a9e3aea0c8f419c530a9b989b0296830347cd0f1ad4deb0d879ac82970d546be4a907f90c917e35b7197dfa6b16fa6f1b4318a2b7aae74bbe924580fd0dc";
+  sha512.doc = "f90103cdaae2e6ba00cfdc82865a4beeab9f76d364579396b8710d81a14a71cbbd6168a307889664b0a289a34f9f7f9c1c69f449b09e90669184a0159c8aaf90";
+  sha512.source = "3eaf0e0f29949277c66928fb0952cba6e568d700c118e32e7045628da340bfa12aad6b1b6c794c9dd79d73bdd7e0e120a4ba2418e7390115a611696520e39488";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.53";
+};
+glossaries-finnish = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "ad6109c67ecfc88da631b3f42aa91b95720619599721a6c6d87b4d8a668cdcfd5bdedd333a43bfff663f5f26df64f4fd8268054dc2dca089ad34177e6e5b9078";
+  sha512.doc = "ddc0047503a68316c3d2e18d22c7ebb861aacbf649366a60ee186ff31ba79846b461d3fde029bb5b0a3ce8f07ef25b89bc46898047176160815570f68b022b10";
+  sha512.source = "0be0af63020fe9bcde5ef0f3b832d5fe90325de0412f32b3c0f34b6b00126bd2b139f0b3be376d54a41794447dd38564fd248ce30fc08f68a607fc65daa5d503";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-french = {
+  revision = 42873;
+  stripPrefix = 0;
+  sha512.run = "8516e94f69248238b0e94099b67c9807f02587e934e6fd2c9ef23befcfac783297cc4df71b8e41be77fdab85abcb4103435c3fd24584b46a3b473fc4489d5d82";
+  sha512.doc = "c26b40d499199c15c875cdca901a3168ab72e4009a04e92f3b1ae9010d7912484b1185453d117154eb5b9e63358b36cd58aeff3d0c4727945a343be4c3c2ede0";
+  sha512.source = "9c6b0b1d851c88c757e87c8b29b2cfaa3886efb00433a9c3744e175fd4dfd4433de3b80b9d70df89f879536b1058ddb1baeae41c5cdfc6c47377256df8e63882";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+glossaries-german = {
+  revision = 35665;
+  stripPrefix = 0;
+  sha512.run = "e0b8e18dbe4d4e503c144be2406b99b56ef0a48847b4044665ac178dffc59d2b8ea95873ee5f2e64fcfb8379a44ee8761ee84ae44fddf996d1029372d5185d58";
+  sha512.doc = "0ad0d7d8f41e52613d049fe3ec6e48d5ceb77e768c7b9ee6b3b0978eeebe6abfc803df44bbb7f90b4e487de074a2cc174224ab0e89d5fe7bc896adff495abfc6";
+  sha512.source = "7d34e603e6c667fad268f4d16edd7b066d3f6fb34739ae5e7620cfb2024fb6c7882862845055205d3a3c14f2c60bb3b304cbb1871958c17427107cc245e10bcd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-irish = {
+  revision = 35665;
+  stripPrefix = 0;
+  sha512.run = "b59add658270f734a8fcb70bae29ac210c84472f0f7ded62baa647bdbdbcba2e63dab71aca6f8c524eae9e3d80bfa7bf96bef45bef7039c3eeff738055a93acf";
+  sha512.doc = "9ce14ee4ca3ac1eed10f8c356fd6561f7ac43abcde46009a6d43245395985f045e9ecb83a38a190ea3a5cabf462a233967993bcaa40211cd7e64791dc2a583a5";
+  sha512.source = "cdc7332678be3abc86804b9b674aab88f087791c8418e6273cc07f2c2b4bc8316ad21a3421af9ca2f87f76a3ce42a6fc5e7343e006120dcbe1c7cb14901d7ff9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-italian = {
+  revision = 35665;
+  stripPrefix = 0;
+  sha512.run = "aeeeb9fcd98e55ed64c918276e0bf0b25489538da80f96030a85225635e7e0ca3d1c93c65aba8b97b486f086a50504c257ba478bdba28de92058053dcafe323b";
+  sha512.doc = "f1ee5a84c9a67b88087f657c259a3700fcd1fa4ad8c765cfae11cde2d54c4a71e69dc57bf626ead0d2cf1057750e284a31443c72e994e37a62715548fa9dbadd";
+  sha512.source = "9a014922abb8be849e97660f2aabff49413a56c06a93f5a3fb0cb89f972b54fc371bff8dfd6a758196d941efbc9281c5cab3fcf047901ab08e296d55e529206a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-magyar = {
+  revision = 35665;
+  stripPrefix = 0;
+  sha512.run = "66847635e1f00af9191cef210c19ed154dc1e5405ef0d2ad38485a913626ab9cd93b7c35395feedefcc04bfd1b46112e6410154c2ff26be51553619326d1e55e";
+  sha512.doc = "a6bc19bf794943b1b15c8cbece363f644671f912bb71d8b2f0a9e75d05886ae4af4846c78cd060099bb78872e4d7991a9a3274fd1343a07bf73c3ba1d475241a";
+  sha512.source = "e0e90ed2fb01df98b20a7807a0dc1155b108c35788ea952f753ee9033d2c7e516086c6380b8617411392198c5469b57b96aa35f8903e44ce44d30f5758acb75f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-norsk = {
+  revision = 67141;
+  stripPrefix = 0;
+  sha512.run = "8e718082194eabed6a4448b89a703a3b63873286899df02824cb4582dd7fea0cf0c1496aff95139b8a4f0770d6d49c5257ca3db14b3581eb529f2a7e95858308";
+  sha512.doc = "fac57f6cecf17f22de50fd360e4069d2c0eb8dc3283e00ef1a46d86827a411e15e3a2228db08165b158d384448aaf6beeeeacace05390c428bbfba3bff553ae8";
+  sha512.source = "f90b767ec7d7a3ba384198942ca6502e33f6885cdf9cebfb00299e7909c10d70a4b5cab58dfd7b0a39f366b667a1ae0c1d3cc89ed91db415625ea0b2b0367fb3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-nynorsk = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "eab5020321d14af5af78a3449dd2b99333bec3e56014b00c5c7a1a4410c26ab715ee8d3631c5a19b4356af61ee1904650704c623b7d36f783424409481424dd2";
+  sha512.doc = "e123e0024f750a28fb3778ca6e4880c070524837dcca5bdb628d0b32fa647c8b2a5595a76d436567caabbe88d309a1711d81d5bef1c33542206bd3c8e56f3e22";
+  sha512.source = "ac2286ac8a06a40d0d15d5e4200c14d1c242ebb35c5e9d0c9a0138cbafcbde4f220798082dad3b521b33cdde9c569403fbf23066104daf1ffefb28078a9e0fb9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-polish = {
+  revision = 35665;
+  stripPrefix = 0;
+  sha512.run = "7ad5a924f24acb052c16436f1d1eb198bf10c65ed3f77fb8911cc8b390cf286581a6d7ed409211993545d597a4dee4318e1d9b820dca6f831ca215986ec4a1cc";
+  sha512.doc = "cad7bbadda3e690ce56c75d2dfc92b02576226cb31d848b0c96d6115d18d222a50e514a6c6b5db9907d6a0e542824e229b063a0cec49dd726246f3dc5d4b41ed";
+  sha512.source = "5f7ba658feb54089405ed6a2fbab3a279143205438a9dbf6ba0a49d38245799cfac6369c48f9ea1e5eac2125cf475e26a3b31dd3745f283a21f3ed07aa8e64be";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-portuges = {
+  revision = 36064;
+  stripPrefix = 0;
+  sha512.run = "64582081553f90a5000992f9db3f79aae7ddfedc6f128ddc09ec7878576b0e17a580f7c58515c2696e2c46ce1ba49c2cd756687c144d0134d91cb6c5e0506ec0";
+  sha512.doc = "5f1692f14e2e4a596555cc426a556d069fcf710775d9a039f0143eddbafd0502e4f4a10e677a43589b1f91cddedba6dc9358b6015801e68f1b3d1e908e57dc09";
+  sha512.source = "a7cb8046b8ce5d122f691170804acbcd39b5ae367cf66057d12fb24d58f142e2a4cf52a1039de9cd73a0f8c0bf851f07367c180eedb12923ab3398189de29652";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+glossaries-serbian = {
+  revision = 35665;
+  stripPrefix = 0;
+  sha512.run = "7360d33c1d3912802be171ecf8c218fad45719ee6dfa0596904484ebf9dcebcc0d926112e40fca76a196ec6081fafc4524c81b366008fd20207f8150dd82be29";
+  sha512.doc = "1ce493838bdc59521728b6856d2cc2df26f44f3bcfcfc04d32fc20d3e416639b1420e1451acad8b8bb0597336a77b553ac599ec0c541527ab4d8e56765f07f3f";
+  sha512.source = "9097fda313f9cd3e0db095c27fa534269e2460c6b5efa3e6681471590591b0931c52f28374ee33404ae0491297d1047dac8b7ce7a525a46b01873210b6242515";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-slovene = {
+  revision = 51211;
+  stripPrefix = 0;
+  sha512.run = "d569d73cbaad175549fe5d4000ac73b0fb65d00598dcab0f3a7c7b384682568d21016fb50d7dc6d2f6a1b250ef34c44c784eb99a1ff042bc3a52bf1c987e0b55";
+  sha512.doc = "63d212e4c04dd7c7e663de230274b9111b8025839c8136313677d13e967a23870927a49220aa1efa0702422e8ad4cf683d1e5e09fcf291873d78bcb055e24003";
+  sha512.source = "0e779292973bed40b3e077058aa99ceaa851ef516af7be57a21bd378492f77b87e65ca95f9f8fdbebc8818dc820108e598ce93efb8c6129560e0ed40f3633b48";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries-spanish = {
+  revision = 35665;
+  stripPrefix = 0;
+  sha512.run = "6c92de5e24135a9c47d200f8f0c0ce7dff8a01f8c13bfb49d4090d1c195052559f75763c0ed68d633b40cf18bc89bc51e7b6c2aacdec05376a3c2e1d1b7a31b2";
+  sha512.doc = "5fc58f64a7f54b50dcfd632e700805bab2f46a92b727853b147d9f7156b2fddd50a8fac08d0ac59bf5f89e0ecf1d5ddf7c22482e661f8a5e7b5568832168bd5c";
+  sha512.source = "8bccb84eec75980107ed08b9f7e1ef0a595f7eb0c270ccbff77f4ea176fb5e17292b7d34d081ffdaa7d7be82fe40f71bbc30a65904892400536c51ea777475df";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+glossaries.binfiles = [
+  "makeglossaries"
+  "makeglossaries-lite"
+];
+glyphlist = {
+  revision = 54074;
+  stripPrefix = 0;
+  sha512.run = "c050808623d162ffbfba8742c9aee6c92555717eb3ed0a0cfb0e3cd6696c4f6d940aa494582011e6d0becc3c5572ddccac2598ac8d521b58a323768272f9125a";
+  hasRunfiles = true;
+};
+gmdoc = {
+  revision = 21292;
+  stripPrefix = 0;
+  sha512.run = "cfe29d7bd5e7936c2a40292fe2518dcd79dbc105f08d3f0dfa11ebdc4693ff207a1b312e6160fad4c089bbe5012697bef1122a893b1d42d59fc39fa5c48d2ccf";
+  sha512.doc = "68825a5fe89383d68b2829bc7e2fe230d717104a2ec56010bc7e67fcb14f9191bf47594cd0387b490debb5e752670048404a7985ab0b5dc039f4764d7926192e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.993";
+};
+gmdoc-enhance = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "481bed630ec444fda66a22656c2cdfcbd931a6743823c36f570ede09038ec4f219ecd1985243a4fc8d852f38512c6b369227f559d3874447144e0cd62d7949a7";
+  sha512.doc = "0cbecac4ae6f70ed01a407a9e5fa388f2c142b7bf77d219429d6685bf7d7c6bb3f324694286e6fe49bc2eff287faba901b7eba44f8bde1894e8cb09527c289a8";
+  sha512.source = "131afb02bafe204637f0cd1589db70584071d9f2480d2a11c03de4b0c14ed79500fe0e811a035a761ae4e6084d63a89e1dbcfd40edd24b4715db55d206f5206d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+gmiflink = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "768353fee03e36d5f13e5ea8ca2cf0925fb5dc3c847680325a0961b78a3ed6c30859bc57de7b927cd9e782f85539c97183687755c31738e1da3cc27a08f52387";
+  sha512.doc = "4fea41151ea197efdacd9e5756043b87500af8445769d0d0f69560cb94decd4f097bcdd52041706ada9b1ee7826f3c56aa30db473c472b1c74553cebb5231072";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.97";
+};
+gmp = {
+  revision = 21691;
+  stripPrefix = 0;
+  sha512.run = "79ec2dd12610086eb5e7b582f5296fe7f1101c20b6d4edf10d47c5dbcdd506ff7c5f326af7600287a148031be060b3e8319d20d8267933b94b6c8a53e7753bf8";
+  sha512.doc = "d3d4bdbc5b1c4618820247ec101e43c1c28b9e023e7613d5256456424fa95a54f23463ff1336f2586359a6078aa733de77cd7ccb892b367cdd00215ac7b67512";
+  sha512.source = "13c602f735e86066e87231dd299680739af8ab526d55897c8a972b177ddda6a92277c3455208a11184281332d94f924b59dc845b51d7288c7c6ed750c45a3fc0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+gmutils = {
+  revision = 24287;
+  stripPrefix = 0;
+  sha512.run = "af0fa2ec7a3ce1414bf5d48d0bd8ce9de1b96b2bfa4f9c2babc6b27c52d11a7e5024bcf66938f3566cf6cf331b154f7eb4ca9d1cbe7109cde939829ea5be55a5";
+  sha512.doc = "f1d6205f39f573b0c9b28f0ebca03b32e20e27c0be12adeb7eb23e12daf41a9590733270661aa29d6b8393dc87855f293437617cd8598f39082db8a33e9281ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.996";
+};
+gmverb = {
+  revision = 24288;
+  stripPrefix = 0;
+  sha512.run = "18038202bca3493596925d9d7c65612434ccddde4b301134f1f57706e5d2978025fead598751e27a29d23f66ed12306e6092461aac1d9d921ce818b0a49cdfbd";
+  sha512.doc = "6dfcc27b38639d4a97ed311bf7c6f1faeb1a023abc27d53e272f334b232a52aa0edc030b0c53d6587845da64097496696ceb03cbd6aa13c8ca5ac12c1772860c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.98";
+};
+gmverse = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "98692f781fead4dc292648153ca18a05d03f2c44174bce8b2f72e85fd1e98cb5ef0fb67c12f33dc982f1d04958873ea4e78f486fadb0c94544ecb66180ee52bf";
+  sha512.doc = "7e37c0c2e8443aedd6462251f603e2eef9cbacc45d980d79bf42cdc64b7ab0a5d81f50ae65251c17115265c45e641a5930de640099f04dc8112155f68ce9adf0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.73";
+};
+gnu-freefont = {
+  revision = 68624;
+  stripPrefix = 0;
+  sha512.run = "8889c49137ab983c2744a6ec26dab4c1cdf2de3e6809c620b5f2fed51d3025bdc018a9d85b93b85235053d6c0f672f8cb1c074e64b8cd971d53dba3535d212a7";
+  sha512.doc = "232e8d0be31f77adbb62383da35e1e37d7b952cc2e6157d6eeb4cbb7d5e1dc0794d9fb3185e68073c5cb2980a3d5a6c447f878ea8cd45c7e2b806afdab21f8b5";
+  sha512.source = "b81ca0245e9a7b1bdfb0745ade7cd9da0734a407dd8c5cf3859a7fa269b949f38a3ca18341b6ff0e1c3d99ca04282ed6dd9fe2923901a06506fc9bd6b677006e";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+};
+gnuplottex = {
+  revision = 54758;
+  stripPrefix = 0;
+  sha512.run = "5bc237b3bfa3b31eb4d6d2fb63280ab89fa929b531ec83dec362947f49ad0316b9107abe3a876f79e4c5b283134c859e4908b300a592aa69fc7ea20b80af7fa9";
+  sha512.doc = "c0e56811b5b4340c770d61ab605961bcdd5ab1abf72b9fcdb0c13c5e56a7481944aedbab70bf5d2daa90751528f0b9d7efd04a1453c08a4a6e40a46a41a1296d";
+  sha512.source = "9db5deaac39afbef502db7cca3c28d0669803af3d927d6650ff39abe365c39be8dff8d7ae7537ab139fe747b7acd7e9fbc3a66dd30ac8495f30dff143dcbdb5e";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "0.9.5";
+};
+go = {
+  revision = 28628;
+  stripPrefix = 0;
+  sha512.run = "772772146ad95f2ebff85a2f3064615c26300a6a4050c1a6c7207d53e12b41477b0936b1c3d182f1c5db0aebd8499de19e0c23283c2bccf753addb2623dfd1be";
+  sha512.doc = "c65516b11156d4fef5104a36cb361bf59be244555233cb5d9692892da06d3bdecd0b09866db136aec177a2bcbacfae6bb41c606f6b9da0329a00c614055905d0";
+  sha512.source = "54cbaf16bd4a1a9bdd02b7811120cc82269be40e97853d94b1d526eef98e7df8e7ab8de2e7abcdd7e7db4c1f7fdf3d7355d511ed57c44c09643ea291e5b1c6d0";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+gobble = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "a3490d91422940763da75ce023ae032a3d3dffc7114c02edab40399a1ef11e5fb2c3f8f3bcf27ba5fc089b4d961bc3b99f45351f43eb2f4b31d6a425a9df40e5";
+  sha512.doc = "cb1bf320485624448d9456c44056fd5c43792db4ef2a4211c37acbe54bc4be7a8eba0b7cd2a10446efd1591b631d6a3adef26b5440b1a79739af095a831b4300";
+  sha512.source = "f430253f8b2534f1eb1a2be289f7356792ee12b5be6f0847715974e5ed0303cd12f437723e93cc00616a4b55d4874d43477ebcf62c5b03a038a6bc76d838a597";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+gofonts = {
+  revision = 64358;
+  stripPrefix = 0;
+  sha512.run = "c30a0fa1e76d0d287ed9296bb379bbb284873593f8136aa567e2573ec9d20310ad5d2ff993b00714fc472b6d365e2556c488278216c95898ca44f1f5b5c681f2";
+  sha512.doc = "6a9d31a1d55f65d05922b71d9651198f9f9a8c6df754cdc93c4605fb6bc241b5c7cb56d0313a2681f60f4d92c45cbc42a9f61eba0c1eb1ba447a0363ff72593a";
+  hasRunfiles = true;
+  license = [ "free" "lppl13c" ];
+};
+gost = {
+  revision = 57616;
+  stripPrefix = 0;
+  sha512.run = "13bd2ec15fb4b61fa1a318092e27f9e94761af1fbb379e52c5143f10802a4bb77be35f152e33973d078e7e3d4554f89f66fc344a7efec9d5a1e0593f4eea0e5e";
+  sha512.doc = "af9cbcd39b0ed78157040634ea949152f972a02e2b19c4ffc679decfc4d76b161b591ebe915298bdb6927bfdf70b6a6e80bd119f52355fceec8829b20909c4c5";
+  sha512.source = "d375e1f17a9693ed87a840ea11157b5c496ad2495dfeb21bcf67e0b82ee6866ff7072c132c0bbadd5655ec50d791454d63290c32be04be63eccb11617ae58223";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2l";
+};
+gothic = {
+  revision = 49869;
+  stripPrefix = 0;
+  sha512.run = "0c3fafd295fb087d3ace144df7253ff09fb3d79091dcd49003964a7ce57308cb4e86f3c3158a5e3d7e509e9958f77d5cc6da03fc41b585ec4ea397822ac29a7a";
+  sha512.doc = "8f2495f3f9c72e5a5b01e17e1a9f80bae3ded97b902765dd2fa9b43ff87769a9ac2b972aa660344bcc8e29af3824985c49639477ee96213c0ee7d9d411e8ebad";
+  sha512.source = "f6e600c736989ac81cde1fd51306ddb520e693b6a5ee8338c3413b5656aaacade8d4f1ca7aa316589c4d49fa8b96b598637792825b03ab0fe3efa4bb584067b2";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+gotoh = {
+  revision = 44764;
+  stripPrefix = 0;
+  sha512.run = "478d51d4f8af849180d1e21ea21c6404f6eb1d13cd70d232f7002f62a588ed2de40e2950699c1bc0e5442069a957b05f3128430ef421311737cf55a6df868a12";
+  sha512.doc = "3aa9837e81bc59adaba5b1cc3908738451fefe2645bf1422e0c6b119e4ff94ad85a7c2ddbae798e1e1ced95a530ab95b2f7a5a92da827c9f6d9bdc574b5f3231";
+  sha512.source = "8ae972cc1f0095c442241e5340c3688021253d135167a89c67000c74a53418c48c3fa13b4b2007dbbf598abd1445ef06a9113a32a1fa37b0b8a5dca6c050ba5e";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+grabbox = {
+  revision = 65223;
+  stripPrefix = 0;
+  sha512.run = "f592b70d4b3bf02e442725ab3a17e3ebbfd3e69d7a790c01be44fa7dbca66b6df76d036b3aaf9f8ce4944bcf370dc626a07e94f5edeec11eb8dbf04c49bd3ff7";
+  sha512.doc = "52e91ad758b653bf6ed804009f3aadf575925f9ce4f52225c1d5e1fb30a79907a587914b265471ff7bdefd5132b6b2d6baac6062193f498e127fb29c34107fd4";
+  sha512.source = "c49132a855bd7e3ed4a98b6af13866bae68301927b22757c824497a778d2036b30307cd262630d336be7e569744b7667d554fd4810aebc0646dc90b6ff196baa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+gradient-text = {
+  revision = 65567;
+  stripPrefix = 0;
+  sha512.run = "87ecc935dec50f43fb4079a86c0fce5de8d4222f941f346ba6d9ec67bf3c623351fd42fb88989e4d1de17c36a82259aa61b7baf9a9227eea3f8e5caff3ab8bf9";
+  sha512.doc = "63894d303192ea56d1f29b33ed8722352a83e6fb58f05c639a9b930794ed5e7f2634690c5049dc62989e286464fc9f48d537e77fca234061dfedf755231b59c6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+gradientframe = {
+  revision = 21387;
+  stripPrefix = 0;
+  sha512.run = "31612230548e2167c7f1d6a13029ecc202675d6ae3e681fd915d38aa116374214916155453616da51ef3dadab06955fcbfa9bc383f12b5008adaa8a60e24e6a1";
+  sha512.doc = "8b010be9e222609d13015176dee4bcc196d953caf7a8c1814e49f9e50325bc33362975338241bd5cef27d59516114113bd5ac81e3dcc6e89ea7f4d53465b3cff";
+  sha512.source = "7ac2eaaff343101c1e9501104e2be138bbbf85d009c2eff98f10876ee814762ac2198bc800ca43b9573e206241b9e3f196ab24e053078f78138415db8ed8fb51";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+grading-scheme = {
+  revision = 62505;
+  stripPrefix = 0;
+  sha512.run = "d68e5f9110738f2ac7258c312045b40db3ce20ea8fd80e6feab47164091cf2dfa460ff7ab5fc794cfe2895f5df5733ed67429f3babafc448448aa99d52bc9ee0";
+  sha512.doc = "337f873bbb07432ec9e5c20484d82e65d315921411757c295af78e521075a16044943f41bfe6daba9f0efca56d33b372ebd177420d13284a44b0251409277ec4";
+  sha512.source = "47de7e1c71f78bc472500b44aba2cb4a606a6219737913bc07492bdc485fa7ec1bee30ee04311bc3b278b8017180e98e032e4f2d1cdcccf561e42f1a9bbadadc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+gradstudentresume = {
+  revision = 38832;
+  stripPrefix = 0;
+  sha512.run = "b66b3b8f7cf16f17758e4dae3bcd45f6e6e5cbc0dcfd6fc42f8dbc08abb572f16b96d5de4ba634b27cd16a1c4177bc62644d3eb5ac6060e66d9ca6d3f5df4eee";
+  sha512.doc = "e7b166b87a5dce9941d6bd931dec91124a118ba127075aedbe70fc9fe415a8083911f90f094ddede551eef197baee9cfa4ab6ac65c8ae081cd8938f872ad7bb2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+grafcet = {
+  revision = 22509;
+  stripPrefix = 0;
+  sha512.run = "d322b1b45762c65232f6f66adcc12955d85d4bfddc08655cba8e11903f6403f2031a78d7e566f4d9b5eaf950aa8d2a53472038e204a1d18517c754c379c60bc6";
+  sha512.doc = "b02bfb612cd5fd85c1839307a016bfc4c3d472ddbd591d1318bd7c5fcca42cc1200da07f2105ec429768cb0f9270273425b01df1242e475946bd37658e692f41";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.3.5";
+};
+grant = {
+  revision = 56852;
+  stripPrefix = 0;
+  sha512.run = "212fec263131499530ecb81d7dd23ad5d162928d4bf8a888b29c190f15d1d15df71f50ba5c243cc1cfffd324cde3362e98d2932e7562f69cdb77eb09025ac7cd";
+  sha512.doc = "5170e7f01087c8198220977c1c5bef2bcd2d1a2b824122a9727fb1504576433d682caaa6c9a93454aab756dcf654875fe129c0fbe32452934b1a8b08fcac079e";
+  sha512.source = "7894584e5cd67051423ec0febc19e67ddb83e6e183748f9bbe7f037073f8f3d271a6903b535cf699960ea8e8bb5a7fd47a8108cd7ca32e12d309133b9497248d";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.0.5";
+};
+graph35 = {
+  revision = 66772;
+  stripPrefix = 0;
+  sha512.run = "6449e4a42b8de0556d9ab46b3c5f4e0da94fe015b289877e1e9a5ca6f5e84d2f0d621e8f02bf4cf3959807f830f2671124e725147fa033d25444eb14048fd77e";
+  sha512.doc = "bbab6b3a5a8ddf69de43815fe54a29ea376839f0dc8e1af47cfcdc55cbeb6ec93005c1c137fe717b8b5c81ca5ac87e0d2d7b0f181608fa1d7714ac2aa37f1e3f";
+  sha512.source = "f058197a060da4bb7525398bf51f76b595464cf2253fbd8135d20e0e9b66d12def451eb687c229a96a7f2f79afcd66b768a4db37d448824ff9597eeb3a7ae903";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.4";
+};
+graphbox = {
+  revision = 46360;
+  stripPrefix = 0;
+  sha512.run = "d78f870b4cd54f7c6819413fd8acf0e3e1fe9b3b44f3b68ff3a20ad51aa6fde69c52b336b57285db1f6d5465204beb8a1179f918a71922889297cf6925282d14";
+  sha512.doc = "342c9018116e80ebf3414358320df55e456581630e7e266ff868e6c624baec0b7209ad3895d3232cd0bf35a9677b8c3db800b7772606afa928ed3424ac16c71f";
+  sha512.source = "1e97e3a1a91d007309c091fde6f05a7c1b062b715ee1f35051b20ad5fa119ccd415fa3741cf0d5e4f2a090ee9acb090c06b5467294ca26ac8f25a11971ca7530";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+graphics = {
+  revision = 66204;
+  stripPrefix = 0;
+  deps = [
+    "graphics-cfg"
+    "graphics-def"
+  ];
+  sha512.run = "cd36d380c8315829f3bf711dd970d5460f00e19961671714dbdf5928c2e842d33438221ee1fd9e45061a2adabb7f75eb34209914229eca872f2bb7fe7b346a16";
+  sha512.doc = "b2a23c52e19eb8f6eeb53951f5fee9015f6d0ebeeb8a97f1bf4db217498ddb27b62d028b3554be3e5ec3b866d1d4bcce6bc805761e981c718f123f6688ba153c";
+  sha512.source = "45f998e3729e81f50cf7c064d1a3926c18007069b4a89b478e87a6f97f3e6820eb5d58be6025f374b05d9c443c8a101918ebff84de512366f5415e041356a848";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+graphics-cfg = {
+  revision = 41448;
+  stripPrefix = 0;
+  sha512.run = "e1015d360b56f63f1b9790daf16e2101e6af995bd1e45288ea604ae94e20196cab22e7e54d318aa79fa386123032a928be70a57154d409321e04f03ecf97ab75";
+  sha512.doc = "dbcfdf635c2816f305205915119e1f6acba816c17b683622a8a32c361d75338376426b258c1fa3271abc1d7ad2a520ac85092a7b3bfbac6463106449bc906ae4";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+graphics-def = {
+  revision = 64487;
+  stripPrefix = 0;
+  sha512.run = "7f811afae5119a42f97c23f65bfead8e7ba7e64796688b219eff78914115f8dbffa6e3aba97208f67d38b6463819ed2cf49e173aebcbe73aef8c2cf399ef803c";
+  sha512.doc = "b52099d553c2bdf52ddb7b50231303f106db445d58e675ad819dd0dd84750f0fc6d164fa21deb1f622644a6651e6bdbe41ad3362fb021f4a7da2e7599fe0a526";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+graphics-pln = {
+  revision = 68760;
+  stripPrefix = 0;
+  sha512.run = "33c1b9a4db0c564df07360c17ea89a7cabd557b21e2703e68532388f7b977a2f99f12c6d7002e9297b8e35259a42fb713fa0d2c49e6c9a347845755186437c24";
+  sha512.doc = "27600b6127990a06a75ad8aea49a86b8f16b68ed306ca3ec54762124af02ddd1859adb714eb0dadcacc652578427d230d37416cf3326f567239dfa4b9d8b53e8";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+graphicscache = {
+  revision = 65318;
+  stripPrefix = 0;
+  sha512.run = "90e4df3ce08bc12f0d5c2e8b66687c79fe7b791708bec5990f8e11590b64bcdf50ec393244ee85af7bd6f644787d56626f08c31fb1ca1b354b64ffb5527a960e";
+  sha512.doc = "749c11a534cbad3f32a7840097e6d42c70f99aa684b5971ccdac4e6a0bd668465ed4a7850bbfea61e14d396440754bfc0d1fe45a9ce71a57908b1c94ddae5444";
+  sha512.source = "c730c10210c785ff27f319990b24af529a44c365d675f294401d363c1e5901af4b0e198c93a147ccf85fc440da99bf577063ed207d1d172ca4008fc9215586ef";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "0.4";
+};
+graphicx-psmin = {
+  revision = 56931;
+  stripPrefix = 0;
+  sha512.run = "d0cb1283998d0ba654ec75e0696bb2b6102968a504e3dee457826cdf82d7cc5793dc8407d0145f314a780b3e015a7be49e70ed21c21e68a3735bede1aacde6fa";
+  sha512.doc = "149f130b4e47f60ed3484267486033fa92aa7529169061a2dd9582daef579b6aeaaef4001261ff7bc301c17ef2817bf7bfeef909d22be44079a2c3c145c92040";
+  sha512.source = "20cdc55b6645f661f5ae9ebdccbec0506c4e2a4a699dfc88aac9bb6d0ea1b0c308f7ef08abb4525faf498edc77eed5051d9130cc12769dbad7c2a31a814e46ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+graphicxbox = {
+  revision = 32630;
+  stripPrefix = 0;
+  sha512.run = "032168dcdd5eab142cd6bf24eaccc3fc6482e3eba7e0fd2600322b4a6f2bcb1ceb8e30a64dd811b500af37c94e7de3ec25c60c437ba9afa7ba4d8a9af8b79a19";
+  sha512.doc = "6fd432f48c05c486963b8058025dda2a65b5cfa87b6ae03581009dcdeafd26396bf16e04fecd0e68a896a99d5c3e09e43902bcfd3f58fa9a9b393cf64406e160";
+  sha512.source = "a563a3c1e81496da30aca7256b5b2afc57d9df9e9aab2b6f5bf908691961f736a616f7c5f86647b94a6dcf36d3732bd68b75f5a4ba7d7d049bb67789ec48449a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+graphicxpsd = {
+  revision = 57341;
+  stripPrefix = 0;
+  sha512.run = "c1327b1adc6657f423bf8eb0d29224773055f434cf749da8a8b2d1713c2a90a6fdeed2bded223c7cc941cb2b7403cb68927d72b0eb085e906750ce64ffcad3b8";
+  sha512.doc = "082a8e580113ef796be4cc750d98f6dd0bf783298fef80a06f5387f352183d513e0d8b90dfb684bcaa575ff7b9307fe11e55f84aa66d7f29b411e06af76e70e7";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.2";
+};
+graphpaper = {
+  revision = 63116;
+  stripPrefix = 0;
+  sha512.run = "1a850300bad30f7139032bf12c26cdd120e62342e09d7d742067c2f040f171a5a20bda2d57fad0aa769d0a337cb7373cf0f5f4d3932ed65ae589e4feecdd5738";
+  sha512.doc = "dda173040d6d492a96e8ecfc374f1a8f01b30689f6f97be6c2c530f2653c70340c7f8c2181fd4a854f2b25e5b4b835f67056b1a95892fb328d8f5c75152f36e0";
+  sha512.source = "fbef9be61d0bf8e35e61a596a7297e1eb78308004786f2d48b66ec3fda045784ebba80d7fb66094dda99dc54b751710998dd96c013ac92e97a1c4e60d0b795f4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+graphviz = {
+  revision = 31517;
+  stripPrefix = 0;
+  sha512.run = "9065f2316f423697c8f815ddcf91254f22e44d89964196d971c3a42192bb1e20f9152c5a98375060daffbb295f8885899d2800728de31ecf60e1a25cf7bce31e";
+  sha512.doc = "688f17db6771785753797edccd141470517dbb2ee875e2a70769754bbd314cf8af46b3dd89d5c340e7da7d81d86895894baa2b9e8facc0a54ad91cd1a3947722";
+  sha512.source = "c3e4fc091b5b64924e886435667049ec2dbf91c20fd7d1678f40990e66aa9d94fd7b40b30dd359be0fd1fba0e169b29058337ede8232189dad3dab7bb34af869";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.94";
+};
+grayhints = {
+  revision = 49052;
+  stripPrefix = 0;
+  sha512.run = "45d0736b5b600aa3ae524e0ff2471846cf48105464710fc7bb7f8d27326275d1accc63b5a0726c5d43e5af487207eba105e1d5e4f59913a1b27d33e950122574";
+  sha512.doc = "85a6b8e44ec045ec00b7526f034e5b15d71fc8e439bfbbd43e1c8f85d4400318d8dfeee4bece211705c351e2b5afc9ddc89073fa14c1d90756bdf458d7b5b100";
+  sha512.source = "7342b60e1957297f41970fa2af45a8736f438e6560e4cb6bd279516fa40ca283d7cd60e5faad2959aba12958c0fa70a95d94bb9c48e7ad47956bbc646af82173";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+greek-fontenc = {
+  revision = 68877;
+  stripPrefix = 0;
+  sha512.run = "24aded84aee9dbe4674a019fb3ffbe0d48fb51d88908e532cbfbafbebd8dda63ac6d2d47c907d32063bd57c3c9d90d51b1e8f1f59ee4fecb451f20002d4a1115";
+  sha512.doc = "67f22594152f543a1b59e91a49168b92d6e9870f0c362a69746c6d3ac9fa4918980df4708bf1a6697fedcfd519153b9a29d92114b6567a2ec03e65210eba3d7a";
+  hasRunfiles = true;
+  license = [ "lppl13c" "bsd2" ];
+  version = "2.6";
+};
+greek-inputenc = {
+  revision = 66634;
+  stripPrefix = 0;
+  sha512.run = "47dbf3388943440918879234037ddb08a8ea7f2851945273af2a01b032484e849af3898860f1daced148b770c4146701a987afe3ba3b8b66dd030bce36c4006d";
+  sha512.doc = "2f85fc72c0415b48fd74ebe9d19e5ce86440c57c08038e96a2d99673143f2848bc347e95f7beab7753d0921414fc635aa9b4f98eafc91fabf64155a55a407bee";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+greekdates = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7f350b4db9578f9020b28bc217e508574b697749c1d2e10c9de9c6499e26605da8334583ea7fb56d74bae77bc30e5835653014f5f8f594d3f35d04478ccffa9c";
+  sha512.doc = "979353f7cdeb127e12388e1eeea4903a929d911f6f8fd42cd814b6cbea09a64d0ab9c8118968bf218330dfae64f9147621d23d2955fb85291f484d0b5eb92a00";
+  sha512.source = "16a5fe04bd6a598a09c7f326f6848074782e8801d0723366e5ae2b1ae51580319210c64f5e7dbae7eca5cfe3573b0f24d689c802d9594d18dc7c8f4126d9ff49";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+greektex = {
+  revision = 28327;
+  stripPrefix = 0;
+  sha512.run = "d7aeb9640061341ed39a71f7f69036f892bbe60b9db2236660e163b42fede81d6be58627b0163d3a183c120c9c8fa54f91a1a036ed9e50d2a72d5eac7f8a79a5";
+  sha512.doc = "b58305d403a58a60ac0cd6ebb60afe3058430eae15774895e03e41b331824673c128c5f06b583525e2311dd8ee5166549ea831e756e8c934c73ae911a0adbaa7";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+greektonoi = {
+  revision = 39419;
+  stripPrefix = 0;
+  sha512.run = "a19dd42de4bfdc3c068169bbf32c55fbd76135a8138d41e0726b421d3cd5e20483f77d7b78f85e54571381f780568f1fa1ebc57d23ca460b33e4caa256c4894a";
+  sha512.doc = "94da0bcac7b513fb9f720c0bc6d7ca8d822956b1517a95335b415e477d3144063bbff65d57978421b6b9611c6b4a866701762cbb2ab09351fe6c5d02e4b02f39";
+  hasRunfiles = true;
+  license = [ "lgpl3" ];
+};
+greenpoint = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2ab6b0a9d12c12936362e9e1ff387c393bcd2e9769357dbc74a5d9bcbbe027424f5d58d85d608c2c519d615f01e6e809f6192280c8c60aa53fb8d96dcbdeb8dc";
+  sha512.doc = "84143440a421999f0a59461652be21d49d8ace66fd3b8d9d89132c6f06f67ef4b571522d6ed54d87f614a15dceb99cdf4c3caecb54eed9a4bbf49401de20ada5";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+gregoriotex = {
+  revision = 58331;
+  sha512.run = "00dcd5bc7c12374a15d778cb903715036bd29a7a07522446cb5a5cb14509956db71df518d97e44d1e89366402281c26b96eaf39cc9f97d624ecb40107eae3db4";
+  sha512.doc = "67f018fe0eb9568b0ecc6977de8eb8fc1b0b9503372e2f674a97723c537d8a8fb4f48d48b95ee8979e4d4490d3725cf4a1411ab9d7da2ea14f72d0dad0fddd95";
+  sha512.source = "0ae6211b33a256f1b10a2b167f3f5886f712688ae73baf13f698af37f69f83a9be754efbc6b0d5b3a1cdf11e7d459a98986b27c27b6318cba8fbb3e48d7f682a";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "gpl3" ];
+  version = "6.0.0";
+};
+gregoriotex.binfiles = [
+  "gregorio"
+];
+grfext = {
+  revision = 53024;
+  stripPrefix = 0;
+  sha512.run = "a5f68f2bb2ea26d4b8f963a1b8fb8adfb3bd32e3a139dca57e6b45d80fcdd94c5e846549b1292224b9d845fd6a4d0ee56d4c2d2fbfc12c24806eca8551b9dc96";
+  sha512.doc = "4337ae578d9e524e2da8564a1b736eac1dd50c1e4495d027c44f3841eb65c6c494527109e32f00844c17a5973a94572569a429ceb95beec98d2b19e84735eaaa";
+  sha512.source = "cb7dcf9b3860b90bc8618c6d964fb7e9f5e056882bd5e6739a57564224f970ab9cf0ba136ebd88072541b8d169245ccaae90f714392a30f83c73e82281a07359";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+grffile = {
+  revision = 52756;
+  stripPrefix = 0;
+  sha512.run = "3f1f5e4f258e4ab1f51fdb44fa0b49e80df21a6c35dccad16a6b70ad76489cb4fdfff7e6c4dd07821c54543fdaeecae32cfd8037d4920ce60db02be9a2f8fa07";
+  sha512.doc = "2f2285ad44d0c585cd02b85359eb31f885f7c704f6da5f906240c1094ef8d347d33ba6beb31cf34e09a5e39e618a27a7ea263a63d6a887638d8f761e3cd4b61b";
+  sha512.source = "6538e5cf13f8212b5b231637a4abb68bc97330e123432922e403ae7321439bef910a0d1839abf394518ad274ed232c4c2e19671c8e6aaa55e2525708f305c679";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+grfpaste = {
+  revision = 17354;
+  stripPrefix = 0;
+  sha512.run = "e7c28c38a20e01b05c5839dc7d011ef5769b3344fd4321f68e1189a830a90e6ccf9edd596e248489a0a578b2aa4e5e5f3bd1ec21c76b3dba86a91d5e431d0617";
+  sha512.doc = "63719b8f7904baccddc9e68d1fc7d609453b2eb9feeee95bb077b82d1345c40db7a92c649c3d9abae6b9c2e19090163b6a227418f4d9d4d91b1e8b1c0438005d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+grid = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "312b142c43ef4bb9624fd6589d086d733593dc0d387894bf58749b3f6251f33df415656b974935352a0d4fff090953f136d0353b98329ed3051ad179708af12e";
+  sha512.doc = "c3559726bf89f766b0d95e3b493046ee6b4c0edee43e4c581adb150e6ad5358ad0a1a3a67b75ea1095f2da87393734972a59693332de10b7b459579a7f73e534";
+  sha512.source = "dd59a48ee18940509d89ea55219706f7c0ae6d7f699b77137495fd4a850cd9d373f01cd9f2485a2ec47204c380c0a17c4986940e0a0ef21740c383e0eec81f0e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+grid-system = {
+  revision = 32981;
+  stripPrefix = 0;
+  sha512.run = "b9846f467854538c488ae444645fcfb962c1aece34e3847dc3dfdd4a2aadf8339840c09243448922ce184f6211bb3b95c6fe9675b5bae0e3b3756b2787e7e87b";
+  sha512.doc = "659b426e99db9152c64f37a4c977176ce1a24c324465399f3e481cffef505044aa820f1a445a79c68f069702c07082d3d5c73c5fa762068a44acdc21221cce68";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+  version = "0.3.0";
+};
+gridpapers = {
+  revision = 58723;
+  stripPrefix = 0;
+  sha512.run = "17f9b6b16a0d2f45648b131623c243e0b62f5e2d2fb1c1997af921a1307d941ffb07729d5e4787b4627961160a75de98165e97a42331b07a3259e91c987f27e0";
+  sha512.doc = "0f4fed3e0d17f317f3d56f69a7100d36ac6d022f7c7c81c8dd0bb1f740f782ca5a4064cc2c80daf865c85e7ee84027a97fe675a13f9d0d348e489a2a8afa2ed9";
+  sha512.source = "962b9dd3c99ce419e58cc1f146406b0703807d365069a333971c1b0ad3409f64c9c89d6dfb9c4ce80731164af1d6dcde6b510c156602b0bdde2f231d7da45406";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+gridset = {
+  revision = 53762;
+  stripPrefix = 0;
+  sha512.run = "296200c463b67ce45fd7c9625298b5e0b83b730055830b3affcdc0c329a2ebd5f89c5da93e004b056efb63f8e43771824c7f0adfe435461943cc68aea4bbc480";
+  sha512.doc = "54fd48dce732ee11a7279eb663bcadde958f2ec9d3307194000dae2ced43f604a54e44174ca36dec389c9ce8e5e0809849b5c66aebd9527337ea3273353142aa";
+  sha512.source = "fc25880cbaa087230b0106a40d2c945809f09200c7e25de88588ab0075e06b91efd362453c599397e29f5e9a053f9554e0496cf03f4f134bd74678d1534ba07a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+gridslides = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "9f9c3fc88cdf9e3641aae264eac0c116c3dc410ddab4c688521289baaf67cb4c8c605c734fbf45538b6498f7c337aeaaa4b90d2584c6becf06a97b81894c63c9";
+  sha512.doc = "ea3a2ed6334a5e160cb27b096e0868aae28908f77d67626b9d1d86840e615bf1b296ff5813ef5ed24ca0435eea39f4afe601216f243f2be585eb952f4df33255";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl2" ];
+  version = "0.1.1";
+};
+grotesq = {
+  revision = 35859;
+  stripPrefix = 0;
+  sha512.run = "30d0d52c98f44945ed40f45f1e73ed60e6b98a8a74dbf57cdae5c2d400ef613f8bed2b89b3b6afbf7b98e449738f637911dc1becf0c0dd33c21a23ecac9a9767";
+  sha512.doc = "d41ae946f315d87b483a03d8b5a1034706f5bda765c69fa692f117b79bd5046b409e42c7b17577ee086ec98795e8a93acd761e30815c6083520b4bd244c33cd5";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+grundgesetze = {
+  revision = 58997;
+  stripPrefix = 0;
+  sha512.run = "f9912e5daab42e6aaec946ea34f420acc194ce88ef75135ebedcdddd5f70fbebc81c250f3368bc8f65cf3952d0229fc450ab40b58bd02473ae4eecee783f3f09";
+  sha512.doc = "7dfacbd4686f5296cc1f677b99f42946f6ba1e761454308568ecb013df3eb0a505273e1cc357d11780f7d4762d03007ab44b87343062c50666bc8e89e1512ed6";
+  sha512.source = "dfa00982121cd247149768a95ac8555a2061ebfa1bcc154ff944d07843d213ab7c7bf0931cad3dac118cd995abf0fcfe03f12285e2e7fc3e808223939d4c1d58";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.03";
+};
+gs1 = {
+  revision = 59620;
+  stripPrefix = 0;
+  sha512.run = "d12c13d30c9e0303bf6c6bfb833d673cf673de3c60cb9d637aeff80470d34e04653860e2186c16c55660faa107bf583409a9891ac8d5ebf1612c8410cf60d10d";
+  sha512.doc = "b3757db8c56cbacb87bd17d578be51321b0ac06a3cbcd75b136cdf52bc66a046f0db42af84e5fc33bd347fb52950448a352027713ad01263fe6344a75576efde";
+  sha512.source = "bc9f08753c9663ecc056de0ca7662dbecdec18ab9346e8590fc1ecd373392bce8af50a4a5f37eb6301a2cebce0dffdf0025a3d036f14ad0f696557abdb8f2716";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "23";
+};
+gsemthesis = {
+  revision = 56291;
+  stripPrefix = 0;
+  sha512.run = "42d5d8461d5f8ccf461e24d04fa61991507eb545a60b7f7bc3980d39c9f767aa155164cbb914ce961204316b1be61f5622f21236154013c6404a86ec30ec18ce";
+  sha512.doc = "3497f766bc496369a2eb9f829b8ba3f0d73bfe7ac11c4afd7f9ce06c21f9aaceacdee0456a14624ffb38bafeb978c5a4787ce824143693e4c3d99a227a994cb8";
+  sha512.source = "813f4825450b66024ea804e0f36d1df721565b046979d822830b87ef9cbd8a01300d50947ba9344c3e21f9624af573d7a9844d60432dacbeb0890944a9e11dc2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9.4";
+};
+gsftopk = {
+  revision = 52851;
+  sha512.run = "cb9aebd7428d10b627d80ea40d297f3e6de006859c7dd713478ff193458494f90017ecd0737376ac1f47638b059e02e8a46ea53a7c56b8561af75f770e214413";
+  sha512.doc = "0a597e2908438fc00fc2bafa7ec635a82b70aad9d7f7e86851a654c0b72b719b8c550be0c20ecf6c8d96627863a48e6a387156ad2c7e71d1e296dd4937d60805";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.19.2";
+};
+gsftopk.binfiles = [
+  "gsftopk"
+];
+gtl = {
+  revision = 69297;
+  stripPrefix = 0;
+  sha512.run = "18cac75f4370c759fb74079c6647553f5d91a8aaab946c46a54c40b8ed757e3c14fbb2f2f5b375e691c8599a7f7d3ca4ebc5a748f18ad35e507305a5e5d8f73d";
+  sha512.doc = "ca1fd56abaf08f10fc6c830b51d799a71ba00c11d94e48619f6ac44f151920e8e53df450c23426a860266d5c6347b7c24c9373d152be80c2ba5023836df6f89f";
+  sha512.source = "e1ca28c2729e2a4b10ba53cb3f18a657ea1ac7cc0b3eae8b7d13b70ee510008b90d900eea9f5f48ec8b0541638e76ae73e533493ab5b1b0de020d3ad39b95561";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6";
+};
+gtrcrd = {
+  revision = 32484;
+  stripPrefix = 0;
+  sha512.run = "dabadc0fba92f6da23830069e533e8d4fb234bb679aa355382c03bd3ac13924328ea8fcece3186f36d33b7d7f6cceaebb23f1158b855673160f183991e880796";
+  sha512.doc = "d8e715d1c4d9c7ebb0c34c690a82e338733501012ad19cd9e2c52e6b39dff352a4e042bdc5f54e63a03a38eb9c76b5aed2ec3afae88ccd63f56663ada32e828b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+gtrlib-largetrees = {
+  revision = 49062;
+  stripPrefix = 0;
+  sha512.run = "320b5993b676d803b235d0a10cfbcdde966c3e9415f164da6f45dbd2f6f201750b84cf9dd8ce5383afd92c72acd35aa8a44d0c6518e359615b5b2009e772bc6a";
+  sha512.doc = "6558466d513a94cc98e5fe97d5e3bc89f518128dcfe411e27d0af171716545557096a6cdb103511157f0cd93540ea784f97d688ba271d9b2f1918f11608bb437";
+  sha512.source = "258780013cefe87f8fed74b0e3251f64da8fe700b13f45dcdf20e9d9215a5b7b74e931bdc1da944e70b5a6c9d87516eb2618546994b5b45193112fa9af74cac3";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.2b";
+};
+gu = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "243eb6ca0af62518d60134a8fa66f91ab05e39c96fa9c0ebeb2232d27f46679da0a634b64273608028bef7f80bfaaf049dcd9f0cd935d5f66b0d5054b2d21a20";
+  sha512.doc = "151f9765d6da2312a10523ffca06cb4e0529d4ebf8189e9ddc00f86510c9cd13be9a04e47b85dc8cd815461c17f7e4b8be9604a1a605c86d7228d1113f985a23";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+gudea = {
+  revision = 57359;
+  stripPrefix = 0;
+  sha512.run = "e32cd699f60de092f9bf04e0eae725555735478db9ae7bf0a01a8aa78ff303c5dedee7eefcfa94bc1d8012f4062160dcbcb25cd405debccf7eed20abec056cdd";
+  sha512.doc = "633f6cace4db98c88e3a7ea1f68deeaf9b0fe980ace490807688b629b1e3b2b00a12717b66b641dd9949065e4f72f423f78788693ddfe2128752f8ac990fd43c";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.0.1";
+};
+guide-to-latex = {
+  revision = 45712;
+  stripPrefix = 0;
+  sha512.run = "cc569e242b42361e6506144257db1109f1adee52915f361ed330699edea1895b78ac64488ae8b9e2224bd3baab01515be86486113afc1ed9b072a400ca736695";
+  sha512.doc = "bba47b9a9e5223e558244029e258835a865b90824c7069287f0c996a36c4fb78d21e62e88e52ea008dbc573e7a4ea34843a646eab11d8377a5167724286c397e";
+};
+guitar = {
+  revision = 32258;
+  stripPrefix = 0;
+  sha512.run = "fed7be24d0bff6d2a0022374e4cbb60cda508b0f99a5a96d59060247aad561c1124728f00a6d0a51b3b22f4490c6153df740a5e9d8106da23c85bb18db385195";
+  sha512.doc = "4a2012e693257c2bdb4daf46a2402882caf0c8efbc65bd6679c9eb11440ae75f09d31369839f84312bd1028207d8aa23a745847be1e762dea977ecd7f73b4a87";
+  sha512.source = "26b552a91240900b54a3266f26e9f439c46315bb9558d95ae5b27f518a7f5ffdcc1990a4ef676e9186b5492d4a66826754c4d34e13e82b9bd912ff74d14cd185";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+guitarchordschemes = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "777af4d4ad1a35bef3f0075e2df707c3a3c98969ee688b71c3d13449b04ecfcb2d82ed9332a8aae81a3bd825462c2cbbf840b16a72fc6e3f65e7565ef6b1b164";
+  sha512.doc = "f7508a78fd341e4d4d0fa8a0f89a14420ca50d590bc4a1f5208d4130a3aa84048faa8720545c24e8f0243b1f062a6f40cb5cccdd9ed7db583a11fff1a40c7eeb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+guitartabs = {
+  revision = 48102;
+  stripPrefix = 0;
+  sha512.run = "a4866683cb639b63d455f40da2ef58ee4c69d0e29e5071437a07922a0a45598677557ce609905dd8fc5c3e40a98bceb9a753cf4506342585e6cc2c37fa591271";
+  sha512.doc = "ef5f516db586d1473d949f44a2eb9fb307b84ea5a7dcc3c9419298203b41c54ff4dad75d3b24cf30fbc24f4c60ad4b79b9c1fd58804667732a66b0ccb52cc3b4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+guitlogo = {
+  revision = 55741;
+  stripPrefix = 0;
+  sha512.run = "42fe915cdb69b18182222843452627655ba1d619c2ae9eb469673a35aab31967afc3cc2abadbc2fd13d9215555a2f97a54a6d3b1ec895fc3d3f6388819bbb9f1";
+  sha512.doc = "505a1f12e772f2f1cebae02164793b0416322aa60cde58a18ba0e3fea0a7072d07d0d8b1bad9aaeb9248dfa89b4b1730e0e5c2a2581b41a7a3a80636fc161b66";
+  sha512.source = "600881490f339ffe540248d7c497a970ee606a9e8167036043b833b24630171d44a58a262e79ddf72fa9308b45bd70c28893251b8c185aeb955114a11c70794a";
+  hasRunfiles = true;
+  license = [ "lppl13a" ];
+  version = "1.0.0-alpha.4";
+};
+gustlib = {
+  revision = 54074;
+  stripPrefix = 0;
+  sha512.run = "e752e4b53191a9c5b46d1aa5797d491b98ab2585873e9a9a1471aa89accd898cadc5a9332ab36828b4baa6a3d3d69b311794e1948b788db755dc8f066a68550b";
+  sha512.doc = "9c1c0279f18a37b2a500e415364dd4404a7dca8b6e0f85b053db5511826eb401865984ee3471fbe607e4cfa605ab50c08e6c11b166dd629e84d9f07db4af7114";
+  hasRunfiles = true;
+};
+gustprog = {
+  revision = 54074;
+  stripPrefix = 0;
+  sha512.run = "bd9cf1c174a5674a0b71f07bf76f46ca4e15dfa194372cb04e63467c29ee1e07b03d0e611afceae80ea192b6f842fdbfae0bfce7eab2ce43a4e448058521cef6";
+  sha512.doc = "268a01f59660e5225c1c21539076e6239381294e6aaa31992032ff8e3d777cb7e4195247c92d9f22efbee498c8bac34cdb915e0a5b0f6cb2b5c0b72c15695d72";
+};
+gzt = {
+  revision = 63591;
+  stripPrefix = 0;
+  sha512.run = "5a2e547bb87b29649169a5114fb4d4175a7630473f30ea28ae00d6dc29bc6a4b3ee33a07c2e94fb6ee4b4179a0bd28f49a72a3d3ed822d852524878f34d77af3";
+  sha512.doc = "5ca5b4dd6e86cf2457b384bb663192313110e4c2666a827c10f36e348d9b8bfc37f9f69debf275728f822a8c01656a2ede34c2873dce1341c3d1e2b054e9934e";
+  sha512.source = "e5785d489263e42fa22e1aeec7d20211dbfc234feace273b4371b44227ca3342c68aa547a19e37608eab354ec1794f313c55a761c555922e0c3de408d5299d0d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.3";
+};
+h2020proposal = {
+  revision = 38428;
+  stripPrefix = 0;
+  sha512.run = "ddee9c5c1838bad606f212c1a7ebb7ac4d7ae571f1e29e83d55744dd50afb55e302f4f20a3cedd0d4446886cfa515371fb913b862d4549618858896de2a543ef";
+  sha512.doc = "5ffad62ed8eb39c8cf07d4840983990009e5696a2d7714d2cbab13a69c77634d01f10a18f612c853a09dfd91ae1ea453bb3373681e89a6994ff4924dd64c3093";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.0";
+};
+ha-prosper = {
+  revision = 59651;
+  stripPrefix = 0;
+  sha512.run = "fc78d9c422c05e4d5b859d39f4b681c5deda4d6850ea383f33b71b0e2aebc5e4740811a831e8e364122c7f451866751d77af8d5e4fd6b8b9f5dbf76f23a7d09f";
+  sha512.doc = "939e86ee09351991654d8542cc21667e16d64dc56f0e9d29932b816458319c3ba8e0632e92bc8c17cd104fd10dd7171a89f9026fc9faaa197fd7376c61377d63";
+  sha512.source = "0ef051d229ef636232751d77ead251622845f9b973ee32cfcdf67c046423334c0fff283fa1f569464931ff8a6ec139e9fb16acb133874bb56aa11684b7388f00";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.21";
+};
+hackthefootline = {
+  revision = 46494;
+  stripPrefix = 0;
+  sha512.run = "223fb22b01327fb63ff16684d578f89ee583d5c7700dbfd5966aa8cb94ca4e280e4409620b0d261bf2a80a57f51658990b0a221c0dd311e3eae1f39d459e8098";
+  sha512.doc = "960c6a0bd61210b097710cc6715012e4406b54dafcf070659228074598a05e0dbb65669ef77c3f6ca2cf80001e95c5f801070be29d416d2bd552d6c2a1d27f56";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+hacm = {
+  revision = 27671;
+  stripPrefix = 0;
+  sha512.run = "6f4373f4e30d95c747ecbec45c53a9af23b78acb84a063dc0b2d4d5ed218e7c5f70d4f29817d39f6cf62cacc455cc3117ced589d41bf3f321a6f9d882823164a";
+  sha512.doc = "bb6d5cd50e68ce84abd5f7296d8216d929b772f30e946508ca9bad2ffcd8d077d1927fcc76a5ea2e338799109b34adc8272f9f7f6d316f5af1312070f57fcc3e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+hagenberg-thesis = {
+  revision = 65819;
+  stripPrefix = 0;
+  sha512.run = "bba9dd22c1e4cf082697c555f2bca5b53af2f3684c47c8911cd11af9f35c9e16e60c5d6e7941436f0a584cc98f882f22c5c855194cc71df7e928f105bcecf9a3";
+  sha512.doc = "9e73ee93a231c319ed65a2c23d23d28ad224367ef7773a9d5c1de474eaf6f9d2a402ae1afa4138ec172ca9e07a5fe64c47d57e16ceaf24b203390a0adbf645fc";
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+};
+halloweenmath = {
+  revision = 52602;
+  stripPrefix = 0;
+  sha512.run = "1c897f5582e26a42799065d9b105bde3ab7823e9320912eba72654d00624a3796f468d9138fcd47c32e021b31bffb1a618f3ce0024ce753005236a9e08ed05d1";
+  sha512.doc = "aea1397af446f64f4d8bacb03f0f2d211a44f0f85d93612db840f198a1ed894e1b0a3680005a002808fbe5b8b367f8a8d79b9b99908a4be0891c0d5b43c730e2";
+  sha512.source = "dcefec44ecf9cd8488b756c70624e3cce53ea6cb2c98acd09948d08fa0f4292ea20fd19156189329f30b47a0a3f7f7fee96e633125eb55eee066ee87b09981cf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.11";
+};
+hamnosys = {
+  revision = 61941;
+  stripPrefix = 0;
+  sha512.run = "36af23f5eb95a743a691047d9dc02a19825e88e8fa62f1931f5c2f13e95f89351b42dda6a204493d5f2a147e0d8c039b6b5bbb2aa82bec00824c7c5612d5056c";
+  sha512.doc = "068e8232cf97513c69845e66eb6772e80de0dcf9422a3547db3b002ada137a1b385829a7e8258145ec2b5a05becfd08ad5ee40fce71326b93c3241bbc9f8c0b6";
+  sha512.source = "bacd0fdea3934bcfd32749c759d1e57e740c0e47e477790dd3c706d252c9439182c0af36eba30b8c00c785bf782605c319bf63b7d9ab677c799a5997f63af32c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.3";
+};
+handin = {
+  revision = 48255;
+  stripPrefix = 0;
+  sha512.run = "361fa013f1932da2370ccbd67e70acaac725349e4fd4fea28a6b676a5459aa8ce8fbc1edf42f3f3fe234e12771c5be8bc463ef758f823a3b43fcb7191bc1a660";
+  sha512.doc = "cf91e16a8f04835a47da1a5ccb31711fd9317db557f0152689a93c4f58de33c8e7c8be1f7c5d9eac599bf8dceab3f4d3e84831efd0612a58571d3c71f508f20c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+handout = {
+  revision = 43962;
+  stripPrefix = 0;
+  sha512.run = "9c5da5e16df3bfb4eee1ff7b8c6881e7faeba7001fd7f0ecb8b3027a464d611149c8768b8d8853c07417d67a723fe5b1de19620593a177139241b47c7a814285";
+  sha512.doc = "6da7783c7a0dcfee168ec4ad6924fca636ccb5fc965e326d9c38ff31c9d2c7942a820165232e4e89b7c1e4857e81952156198de55d7990ba01e5abcd4c31bfcf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6.0";
+};
+handoutwithnotes = {
+  revision = 62140;
+  stripPrefix = 0;
+  sha512.run = "cac79ba06d60e99e151b272f28d6a8a04f1f766f406801c6f4fb24f4b4c74cc59d78fc6961624b1f77405bab6687ad896826426d8bad30b3b210e7ad5be035af";
+  sha512.doc = "f4f604fd888f5e072d8c002fcd72edb726d3f5512b5fd511446f3fa1295f5a6608510dabdfc6a162d648a3e020489d1e1ecaccb7e563f54e8ec156df51be6dd8";
+  sha512.source = "b41429450b42e341df413bc1d7e4266836370617ee94fe685710ce66c7b559b0ed44e3ecf95963fd84595845eef57b695982b9ce300f214901bd967a06f09269";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+hands = {
+  revision = 13293;
+  stripPrefix = 0;
+  sha512.run = "77c1742d045110ee4da7473b14c1804fcfab3772ae10223848fee99c7c8a8fb3809aabeb82e4c99460f3cfa0e009ee8d470d60e8be4c79c25c3ff990b7d1595a";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+hang = {
+  revision = 43280;
+  stripPrefix = 0;
+  sha512.run = "4a8227707b6878ab010b595296dbc96f0b31489dfc0abf0116e00d6b0acf54e91bad1ec182169357e4a2e1f14ee27afcaa23bd35db1fed7e4e972e66eebee042";
+  sha512.doc = "bb0af0db38793e12dbd8d33e2df613d581a1809e0661138a3e75cabac1aee2aca942aaa429678a817f487fda82f3ffa3a631d98c3129853ba6a5ce4175346b09";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+hanging = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "54bd2269c169bfe2a28513354407de22948658e8067cebafa3a3b3d88040acc318f3f3aa375798e36bafacecfa10c4ab5500095b92328e6cbfc12a541a8a7b3e";
+  sha512.doc = "a1e7e9d0d5b85e43ebd7ad88b39d6d5629807f668040041fd1248239c02394cf3c51aa676065c1d1d9e9ba8d1ad20f00e46d25025ddc0db7ec15148280a5b9c0";
+  sha512.source = "d982182e5c6c19d6dfaf527f5ff95c0a1d15cfa3078205c73d9ac894d24ebeea31a636d66356387996fc0faf9815242661c884dd566c0dd1d90779d61ba93c28";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2b";
+};
+hanoi = {
+  revision = 25019;
+  stripPrefix = 0;
+  sha512.run = "efc8c4892ea4cc8ae395907fc428fe74d535d689a68b3b21422c5c944d4defd57747e519dbca9bd2df2dd010b99e3132afceadee36d547fc11b04480147626c4";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "20120101";
+};
+hanzibox = {
+  revision = 63062;
+  stripPrefix = 0;
+  sha512.run = "125406446426da598ff92398a7d0de5ea26e866d4f9248269191d113f50e8a613075e3e3d3f9d625ad3e9e0b1c5ca978a0420c2de9f31f12958d5adf7e2cbdeb";
+  sha512.doc = "87ef15dc7f3920e11d0cc678f56365ba9dde31210e0add0d80763c1d271baae5b7e905f72f2081f5712c286edacc6943e38df4eb112c7ba17c125edb4d0582d5";
+  sha512.source = "d3d557b65df0809561c99431377585a119994d516dc9e30f0011e423abba27eaa545af6a76a0eea7269d1e2ef57a77c316f7aca5b0f9134b709635f87df14e38";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3.0";
+};
+happy4th = {
+  revision = 25020;
+  stripPrefix = 0;
+  sha512.run = "45492a6becc7496ec6ca6adca474aa141b9c68b06aeed46bb1459f15b6cd1df9e4e2de3842a91ae0121d83269c1fe4f772418a93da67031bd14b6649f3a80657";
+  sha512.doc = "78fe311673e370b867ad209fc1c62acd7aeb515e4b145bb7c487d30c121715994803e6dd540bcbf1b9b0776014327c7ca2f6c03437d9ff0b40f477ebff9cf254";
+  license = [ "publicDomain" ];
+  version = "20120102";
+};
+har2nat = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "b88cc102c09fc86a762da6c16802241af705a0a7da8707d072f051dea7b5836af9bd5cd46e7c80922877dfa389aace6b7713b10c4f1da75cd0d03c7bb3e68745";
+  sha512.doc = "de971a2f65481fda590a1ecb254663778a9260e65d26efdd67c739f02099baddd4937edd1bdadbce5020fbd9ad227cd525ad524dc4ea5fc1e563369313f5ae22";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+haranoaji = {
+  revision = 68501;
+  postactionScript = "tlpkg/tlpostcode/haranoaji-tlpost.pl";
+  sha512.run = "2ff313007fb9b93503ed6d703c976f639d878ccc706060e0a26ab8a21ffe1d4669aca9df9fb001c886a1b1f7a0e140403253aaa5ef76a6e91d327c504fc251f3";
+  sha512.doc = "1c294bbfbbcc6abbbcb0cdf6ea29335d2b1b039545c1dccfe60e8ae4f1883d2564a5924bec22b0dc817e4eef0009108df348d7af788afee1dba4f1b7f1ae30d0";
+  hasRunfiles = true;
+  hasTlpkg = true;
+  license = [ "ofl" ];
+  version = "20231009";
+};
+haranoaji-extra = {
+  revision = 68500;
+  stripPrefix = 0;
+  sha512.run = "79b1d71d80bc73681f1d1d48679c2f4586834d7dcaebceadfcc17ba49fd6c41849cae77a88ae4e45f7b2f535352a27aeb91089cdfd5a75b0af88024988617422";
+  sha512.doc = "3331b5113f2f8634ddbf4e280aa7e7b8f82a2ecb494b29d2a1587ab338130340084b1f70402e70fe2c0039ce57a4665030581323c703ed504caebac823a712a1";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "20231009";
+};
+hardwrap = {
+  revision = 21396;
+  stripPrefix = 0;
+  sha512.run = "eeb0f1da2161dae80d292db7b3289a307d892b8967ecf16021b8ed73c5fe724d914dda356bb8fbb48786760698e0060b39349b51886e13289524ed9d45463106";
+  sha512.doc = "6dbb83fc5d4b82d11bc8d97d0ded3bcfe583c2b21ec2a260000b6bfb0bdea9c10df834735ffdcddfa9785b7c86b53920a20146d020b0435b8dc04610f05b9b16";
+  sha512.source = "9a40a2a441e9f47b3d681dcd064fad48fe90999b34b57c85b7112e518c99d3b87a9bfc3867beb66e76499bb53ff3c14837f71f2d261ed4c78cad447f185d0ce5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+harmony = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "25e84addf5ac4c67985e1e433f795f377accfdd4dc56eae0ffb25ddffeb52e0a44278ce1a936406105ff5b7e9541452a103e0bb4ed91b8949facee75ca7c11ae";
+  sha512.doc = "3226831df9702b669ba4c269549927563ae321e8e10e0e41c6bd1a8d6522dcdaa4ae6a25a907a84cc1dc324c516a53754c81a0e1296fd8e3afbbb29f0992ead9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+harnon-cv = {
+  revision = 26543;
+  stripPrefix = 0;
+  sha512.run = "5acef7bfd07f896f4251fe922cb96f71e9f289205eebfa83dd6aadd241f20eec5d9ecaa3d70d6df3dd61fbe7523f568407d89b7c32c27aa719a6f97b89f4cd33";
+  sha512.doc = "1a8d96a152f9ac90f3a6e546c03652ebcde8f8d88a7282626d44177854aa41ec1c66eb6f4d787853711b80935f5e3e3c31d726d0e49d60841119db7ae278de96";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+harpoon = {
+  revision = 21327;
+  stripPrefix = 0;
+  sha512.run = "1894f54ff9eb98975f4eec9250a382534a0ede5312b4b540223d298a0fe5d7d8d24abe2018d07b30773e14bacdd97b60039a458fd274bb446aeb2e26b91bf96f";
+  sha512.doc = "4d69050cd2a7c57219a7c55e8d97656fe6f130936d2e79a00d3760e9139799cbb98db2f338586b65412402069b22971ac73e5b722a3911bf1402625dac3e7d52";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+harvard = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "64781bb5c419248934f259dafba2c43270396a1d3f49bb9a79050ebbb5655a5836a07fd69720f54f009501c5294a62f344f6b6c76adb89114a8c60d1e149e612";
+  sha512.doc = "291c2a530da6d24ecf1a87818d27b6141e99944eed10cc2dced2537f30ecfc12580c2f58d01245ef53f7d2b803853ce9bf72c03f8a2c3267dde0f4c799a991bc";
+  sha512.source = "58720acea1588f742d95d2916f8b1a5c8cba391243a433ae9b2cc4845dd3949c7b2a7a349b87fd663023e4d26b15b15dfb89b7f8db92e14e52f2f7ab835a160a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.5";
+};
+harveyballs = {
+  revision = 32003;
+  stripPrefix = 0;
+  sha512.run = "c282249d5758f6c8aa9dfd06cc4671211e76adc2e7c4f5cf925e713472e60f3d44c8a389c9ab4db5b8096336d46d99b62bde0f8c1f9fb5d22857e3cba98994e0";
+  sha512.doc = "89ede2f13e82600a2e78047a08766e99879ef5c64dcbcf747a2c21b1a395f4c1a1184921a8a0064b15b86f574834f602870f6641f0f265f92dce506959c6c4e7";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.1";
+};
+harvmac = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7acf7eb52104bab80b0b9995cf43cac842c106b8aecdff8245b0d1ce8440823e65ead75e470f00923764eadd32e936e02192ec7bbe70295ca254aa57f9b5f662";
+  sha512.doc = "a0f3308b938ae73c66398c5a3140662240603248cd6fe338a22f3ca6b23f28789dbccee48dcd94a8bf84de029ec103aa35c5b9a78151ceaf61a9cb60b832c484";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+hatching = {
+  revision = 23818;
+  stripPrefix = 0;
+  sha512.run = "71983591270b533a6824a836948fdd15d19c3f966c8277d8948b13c5f38b29c29c0b7fe577661f1ecc570dd71d89fa964afd254d50556b6893667cda95e21aa7";
+  sha512.doc = "02c2eb4991aa9775feec0846eaad9ddb74123a64eba8a3731c8e40c689844e542793e0f6884df8666f3cec2ed43af26b2d25254cd0536920c6ff0b107f35bf5b";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.11";
+};
+hausarbeit-jura = {
+  revision = 56070;
+  stripPrefix = 0;
+  sha512.run = "bfee6719ea75ee672a39234d9416a0415a11658c45f4e5958bb12fa67ea416f9da83d2583e7007e3dad860a18d207c42e3e0fbaa3f09afd0b3825c170d00c63a";
+  sha512.doc = "76898cfd9d4bd0f34632092ac7c1d913f4d460beb9b9fd3d98c249156c406b81fe42a4bed754fde79c497f9e674f50c698de598c9bb675270e7ada1c0002bba4";
+  sha512.source = "3346edf31e0f7545c1c53fbe88fd12a902ef673cf5dff0858caec415e1b30e3c26a2bad613a947f5897b6867ac5730deff8c7cf24f51d9078ed0494104bf5a1f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.0";
+};
+havannah = {
+  revision = 36348;
+  stripPrefix = 0;
+  sha512.run = "f19498f0f9a7ce349fab4291fef80ff2f2f9eb88c60edeb76174918955fab51f22a0d06b533112e594c0f4cfba23feab58c41fe75e1c4fa2fc4db7cd9f473d0e";
+  sha512.doc = "ee1a90d491debac3f22f470e5df79e11152d153cef97e8d2e38c5d8a60a1931384d65bb91a6d459e6aeba39741763fa67d589bf9004efc5059699ec621b99e43";
+  sha512.source = "9831ea87fbe6e12af8c7fb49d321049316221f4dd33b79a9495c5205b60ddf2f3593c8dfe2f4157e3934f21e69e3004b05802a0d592ae608b2de69cceb2f0c7c";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+hc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "17c7037eb04c1d0064dbb637f51947243d1b8f07d46245dfb8f2a38a1ea068ebe41da7e2346ccedf02979003a0a2fa0fbd25eaebf7847b266e21b7c873b032d4";
+  sha512.doc = "18aaf579ef82a11ea1e752524d9a04a4a0aa5d6cbb496bde380664723dd30cd421c77dfba1ee6bd88def576c76e202b328198fa6dfb4a9ab451875c3753a515b";
+  sha512.source = "42d3f57fb2c38823875116a67e3e71a3b1aeccdfa00c7a201163325c31fbd47d60a1dd028c6d9102d38d6490424bb118178c7589a433a69ec26e505b805418f8";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+he-she = {
+  revision = 41359;
+  stripPrefix = 0;
+  sha512.run = "726954216d3f8328eb7868553875651c2dbc3f626a9eb60fddd770b0e236a4e09a45872020589d8f263cb9f39300d1743e0a35676947752f33933db1e766411d";
+  sha512.doc = "580702222de769b066b01af45aad75717d11f46178a2b1f19e0bdc85b67497d9aed8b7ad642f76b8b85c5513f4921f58af8bcb80d1fcb88307f8ca8b07c8307b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+hebrew-fonts = {
+  revision = 68038;
+  stripPrefix = 0;
+  sha512.run = "5c27626c22275c42c25737d35af3c39a98a921037f6b9165a3222e168dd2c679e75e6854f88713681bdaa8eb8961bf58cff3b34c207bd1775ffea474b3524ffd";
+  sha512.doc = "bc7f81a0f09b544bee91bd387504f5a764e7a6df207f3255f5ba25b1fe654532b14e2c7ea9d1d2804db875b05e210b11058eecf7c15fd1fa7a7b516e2bb20207";
+  sha512.source = "21203d9e15eb6d3533c7a50c5fadf2cae403dbda8316a57d2a7e834ccbbcedd483f11fdbe12d1ab72ef9039e195f31e57eee1e0df8548da052bb030576557eb2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+hecthese = {
+  revision = 68584;
+  stripPrefix = 0;
+  sha512.run = "ca64dc8ca2265ea038ac3c2250c4ead4aedcfda74ee28077db2b9f4019f2ea304ed02e7349ad0a191012d2c903a1ed21b879459c048b29827ea3478115c935b0";
+  sha512.doc = "28e1e4940bad5a6f76160f42adbf3f5f793cc9a7cd869dfee2389229335c09036044d79d3e14f179d5e8bf32304c04fd23ff997a116338c4a3500906fa6bd1c0";
+  sha512.source = "348f79081082f3b1c6362b2bc7a59b7d55947955a482bc5f323119ce3a47158ac07f44c2a95aaeaa3a3c9f2d99f322f3a163b90bc7522d613d55311973639ee4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+helmholtz-ellis-ji-notation = {
+  revision = 55213;
+  stripPrefix = 0;
+  sha512.run = "2c91c08df5e97f9f7ee17f40408d8810cfc3099b5e125b5445a89d2f0d35849f32be0d4150bf7b9f812d5c9c0994c714430fd8d015b9d4ab3bf9879deff5bb43";
+  sha512.doc = "20c9b9fce33ec63cd635751acec1d25fb8c5cb4171ea06f3313c839ea400943926550098cc520c4d5fced46c61756977c6294e435821330715ab82cb894222cf";
+  sha512.source = "bddeab10a607bf0cd194f9725ffe66e103605c5910abd6fce216c579ba2722afbec724f8717b52b2ad6fdc8f472553519e000d7df41c5a26a157e8eedb41fee4";
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+  version = "1.1";
+};
+helvetic = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "243904e50c3458e62bf346f5a48332709db226e54b17c731ed0bdac5fce04d76b19411a12b01b51ca93b5ff7f06eee38f78a8375f6244d7b7d53116713d601b8";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+hep = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9cd27826b7dde1ebd5830cdd17423f4092c9833c962be7e73b515de2e624a7853badde0c244dc26be6b7d3d9f9c3932fffc48bb4e86e06b90d6699dcebb0d497";
+  sha512.doc = "1d77a9bd31e982a8ff908f772d8cf67692145624bf00db2745afaf1aa59fc1da7cae6d2e094379077a550e4d76338a5a82bef8e25c8d733547751a24c84035f2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+hep-acronym = {
+  revision = 67632;
+  stripPrefix = 0;
+  sha512.run = "3eeaf8ba9215868df3ad2d8eee5ed17aee0f91c5404b8c93a7ab378ff6d928660853f8dbbab4cc52421f0d902936983a8cb34badd675453d2fc30344de19fb1c";
+  sha512.doc = "a17c6f61a44253d6f9db070392b146f0fa297c080f04577f30e190a2742e344c22b3d70a58d3609eea6d981e843bded2a1a01b3fda356c822b1f60ef7ed05271";
+  sha512.source = "83b2899d05ac7f8b2e1525e76327303a135860a358c08dcfc6f9d1c66e79c1d743f77a625b225c477a39c07a091d282ea2869fa9f5189ae4e3007e7e792fefb3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hep-bibliography = {
+  revision = 67632;
+  stripPrefix = 0;
+  sha512.run = "8fa9f0a0f19f7dcadc88e727c461af05f3c0723d2eef1c4c7cc91fa0b507a6cc20f0414c82f7bc3ef12932ea54e8fd9c7c402fb2041032e23ee14c6dafc3a467";
+  sha512.doc = "388fed1b3b5b9de09ae4b1cb73de2f618f99293e1b3a4cba5ffaa2d5ae611e454688bea2ce01780ad844380e2de56e62c38013677bbc3a9194d0831de4cc97bc";
+  sha512.source = "5e82014ec9abfc9ff19d01c929d7475f6bbc38d0e77b9888f884862f17c1332a868153315af6d13c023e8f94b3d8b567e73d610ebc17c2df799692c603d5b509";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hep-float = {
+  revision = 67632;
+  stripPrefix = 0;
+  sha512.run = "ccfbce04c651a478a811b2148141090fffbdb3851a05b9d3fa7683943fde9e6579eb75693c4b2834741b6cf02a5b381d1f80bcec5d44783e71605e445840145a";
+  sha512.doc = "11c922d42d6793dffab0cf82f228f554510dc089956030c9c5e76b0a17e4d96ce2ae4d95533f0f704be1d4054f35884901a61ec851fa73f68b06c87b93f18821";
+  sha512.source = "c896cd60a4b8b4bf2bd46425dc615a55132fda57b42ad536807bba8cfafb65feef34cdacd4efc2b90de2b30bd859d6695b4f670d5f507786c48d19b8d0dea842";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hep-font = {
+  revision = 67632;
+  stripPrefix = 0;
+  sha512.run = "a70b15ded3774985b31a78ae5d05572922133d3fb59abcb482677ccefb6767726b902b62007e9d0e14950ca9e9f133c8677d6c2d352e0f529a3909b5f6da867a";
+  sha512.doc = "97a4c20933260eb24a935ed7a780a6e0a49f8b305872a33de5fe6df439ead0e555b909b04bd559016451bbf5cdc3494a3854d257b1804bc022a8925166103877";
+  sha512.source = "d85c106c458ebb002830f7f0cae13996f203bbc3377c66bc2776b7c501e6c2bea26530955b250eb5dd96fe4b6a18af18c9b616ca49096b9133d0041782e2ebbd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hep-graphic = {
+  revision = 67641;
+  stripPrefix = 0;
+  sha512.run = "59dc1363cdcbe8376b5d5de1a2220c9d70c7022d1d943f657ff226a9ec1bafc302b30255983c090656d293c0995095dc325e1cafed113ff43ea74d2a85add741";
+  sha512.doc = "9398029fe703f385decf3ed9295cf64501a9ad7efc3c50bddf1ac261e780dbe5a4ad9fe5f1871c2a8f081909741ec11a93b2b399b89c841cb9b661d812f326b2";
+  sha512.source = "fcd58e2b778eb16b6b0cc9d36d44f233b9f2e40a243dc8792f37b8159c4ec3b9500df418465ee2c809bffb24d919d8295dc83b661553ab413390b0b5cf32b9c6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hep-math = {
+  revision = 67632;
+  stripPrefix = 0;
+  sha512.run = "4446d255ec62b12b2eec1958696c10f4d55d83e3ccf30590f40d146d1305db3a351894c73d03baf6327834d0cee4592491c0a3a57bcfa7f95af0e172fef3148d";
+  sha512.doc = "5110d1cd03ca6b925ba6872932cb53c99068399a5329d7368189229103e13f79296bf6b97b2097ab800823eae6dd14ac408fe404d309c37b1e6e9a20c6543ba5";
+  sha512.source = "d853885d8f6910843558fa4854b51719e3d4917a324096e5dc38cbd7b701e8e250dea3a86fb803637268f36858760c2ac82ee147cd982df0b1516b93cd92150a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hep-math-font = {
+  revision = 67632;
+  stripPrefix = 0;
+  sha512.run = "0bf2ac1f414216568cfe4247f1c1c9187fbc8133831ebe7a55b2c2d3d30555db36b0c0c1edc2e8bdb799a34b20650990d26c1cc838c5a3a31c55bd9160ab1efb";
+  sha512.doc = "eac39c9916a87efd036b9f680ee9b774584845d1a3451b192857d5db72cafb1eae5ce580f1225fc6afdffe80e136f69ed2447f87986cdd3afb34adc9f9d9a49a";
+  sha512.source = "ff88e396d084bd47256015530ed0d9b6a2f29f67a0a88db018fa6c1efe5d949449a8ecb339e4ad438ebaec4f57792b8cd83496ccab23ca64e383e28ac3929cba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hep-paper = {
+  revision = 67632;
+  stripPrefix = 0;
+  sha512.run = "2cb6988dccd76f121a7aa39de3246559caedc0cc697a25382f7edf6cab36af32b03db915898f6073b31cd459e8dabb3da3acd387bd0c027e44d40af917613c76";
+  sha512.doc = "dcb2f4aff93c609edae00fa44c285cc6f5d5bed76026c8d5f3f722deee19dc197a28dad7372f2b44466036d6e8aa0e576457e07f953d36953219175224fc6818";
+  sha512.source = "ca7865f2f8ce574fec8d7b3a9faf77ae3899d75a2c2bc7200b8d355b89149cd88e0fbba66d5060f5b5cb567aa6a355d5ba45d34863f7fbd5749b4073e6114437";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+hep-reference = {
+  revision = 67632;
+  stripPrefix = 0;
+  sha512.run = "9cc4b4b63f41b28fa95fa6a81e47b5028c8ed0bdd03670c6d239bbcc09922265dc69b443ab2b1a4032cbf966a5202ff6e8b1a8c61afc2072e6628d11e071391e";
+  sha512.doc = "588d2c5a2990b44d64598cf698cc1d6e04e92991e5319167e412692d62ee54de5c6053e4e10ce719f470ed08c028d03f9dd301afb65be4f5370742fe621a80b3";
+  sha512.source = "84ca10f669a9541f7c51609b72d2caee0bee956489b4b9efeacd356548ea573457bc5cfed865b3806b1175d0d6b3b47793283589eda435b065668395a01a255a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hep-text = {
+  revision = 67632;
+  stripPrefix = 0;
+  sha512.run = "bbbf90b0e85a9b962267f42a2ced125448f8aa85bb93e347214164167a151e663f647b754e4b55faf42041ede7b6e90b6a073290056e00814ed25bf554eb20b7";
+  sha512.doc = "5c914c5b3bbda70d93fb340b863c656d67a480eb3f59c51f05fda65396d408ecc26229992bf4a0161fbbfe0801e8807381ffe7fa3a502ca68b56f5a3afc88caa";
+  sha512.source = "0052e0357e20251faab93ac645cec196a504881db615869e18073124671005a5c942e791705f2460f55bbc8bf4aa4906b74ff6cacc7174c59aaec6106afb5291";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hep-title = {
+  revision = 67632;
+  stripPrefix = 0;
+  sha512.run = "6da28ecfebbb06469fc666978d8674e81b60ce019e0f9a730bafab928d95af4d92bb8783275bc261a43cc61efcb14cfdd4973fa9f52b92f33d70890983d89e53";
+  sha512.doc = "3841dc3378d6f8fff0783815f68d75581dc5623961799a034410de2e37224fbf0b1d9ea6b0b65b9b5c339cad565520960d51f7077f7c785807e9afb5acf83d3c";
+  sha512.source = "40f64530f2328fafe8163d4bf0ce2eaa7ff34f3d1661dda967bf14593af9270e33c8e3eaadd79b7d9b70e065a8876afddeaba059c64a7b0759f1cffe3bf565b4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hepnames = {
+  revision = 35722;
+  stripPrefix = 0;
+  sha512.run = "ec893de8b4cedd1b18dd16c3237fa79b434e91cbab4b856c4fbe11afef162b560bda18c0fd75ab2c47b863cdcca1d64809a139d51f04e9c2f45eab6ba4036c28";
+  sha512.doc = "36a0966b755b6bb0f0dd27c80235e66af7c5252df1ae27652e59fd65fc5f280eb487666eef04206813438204dc592c0295651ccf0bce1e5f85f4797cdb439850";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+hepparticles = {
+  revision = 35723;
+  stripPrefix = 0;
+  sha512.run = "fb9229745b601b6f731c959856fe46d6871dd3a1c7fec2bac8116f4d74a575ff52523f610599979e25e7147b4ae6d36906d19ba66260356f15bc1a47a2d57460";
+  sha512.doc = "539025b2f0998bf031f417d002028e29edc58c1818d0dc9c07ee58c6877b5709936be23985ecd5a518c36187f451a2d5df66b5832d0019ff8b755c763b903aa8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+hepthesis = {
+  revision = 46054;
+  stripPrefix = 0;
+  sha512.run = "ea6543fec07480af8db52e43ea5fda346ed4e9ea245af0810a6988d864675a903841849e502506b333cef0b1685a6946ebf1f686bbc74f4ddcc7eea676c019ed";
+  sha512.doc = "e456a0ca03da4bf71d767616a140b6e1d922e05944a4db2c0cbb360dff39fc7e8bae741ae5adb49972253f38774f1a9c65393bcf4e38e3c568b0215a04f63d48";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.2";
+};
+hepunits = {
+  revision = 54758;
+  stripPrefix = 0;
+  sha512.run = "eae3b071eb3c81e79f166a925f5a3b16ffa3e992073f318b8a193a8188bff5b5222cef7533e398f1481671e17849123947577c13a182f40136124fe6368547ff";
+  sha512.doc = "86f0080a818aae8743f9c2ef20a3c87f2f23e29641037e91a89e3f195f55fb6653c1ebf1e990b1a984f2acad26243bc07afda6cb2b00d58e5f2416a0f8fddc04";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.0";
+};
+here = {
+  revision = 16135;
+  stripPrefix = 0;
+  sha512.run = "35c9ac325579de5d3bac4b8d16b1f30355398037cd0ad1c52b1585eb7ec666e743680eb05bec7b1f8cfa3bba3d7f5c0e6e06cddde6ca879ea708388df140eef0";
+  sha512.doc = "482a2ef8edbe41ce76e2c32bb579b132c84306cbd5387cb5249b10a02826e610229ec9c75a1df53b5b930bb982e1157ad9ffa63a77f84461cb6cc6332f6d6e54";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+hereapplies = {
+  revision = 68638;
+  stripPrefix = 0;
+  sha512.run = "b796f6f276bd9cdea0f469482c96aa42956417c544647df201a8dfecfc5041b726a1ea1084a51b392b6f71b3172961689cce0cc7be63c146ba7edc3dc8bcac35";
+  sha512.doc = "185798c65981f2d09b5c49ac3bfcca8763ca929399a9f534316ee8345f5550a437be10dd39bc886febc5d9de4156c0642c125ca2a033d129479c9cf98bc885c6";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.0.2";
+};
+heria = {
+  revision = 69058;
+  stripPrefix = 0;
+  sha512.run = "2ddbf4e07a47f72b402087046e4778d7d655af7243465bb7ca4ec10c3c15b72c49d8c6343e4ece780ac4aa1e2007e3fff4f8eb395673952d8050e7b6803b275c";
+  sha512.doc = "08e4a34df324d61089a7632b2b8d2b41ff4df47fe633803c1c246525b86ec25ec40f6b56182432488a3cf4d1d90b36038773104d2c78a809b12d04f7a9a23bfe";
+  sha512.source = "307a67c4095b52687fd978da3a1aa90b4cfb484d5f00876c86bad6c7103d926cda269ea081781b08a4b3cc2990e6570f60590b2b431f6a3f9c4d5c58d43016fe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2.1.0";
+};
+heros-otf = {
+  revision = 64695;
+  stripPrefix = 0;
+  sha512.run = "370ee21398ddc2f3bf285a7c6c545e998a192d4dbb5790a7d2a9b6835d9076871a349001901764761fbdcac0e29d5c0fae8800dab4a34918998b54b7a83275af";
+  sha512.doc = "fb99aa73c128cfb184a097b0d9a32a007ffd9e135d74b543cd23689bf5284176642c1f7a635b1a24ee167b5ee44daec090f7f78dfe9636fbe88351aef125d8ec";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+hershey-mp = {
+  revision = 64878;
+  stripPrefix = 0;
+  sha512.run = "8759bfc2237fc1954e3ea3a47355cd42c48479ce01d959cf0b072ffba4f26068e99f32737bf8669a509f53085b8d8e5c5b0b02f9a7fa6ba73a38bc996539d902";
+  sha512.doc = "d869c70b0919380ae4d88d9cded20baf9a8cce0946550d1a3b80056f80bcf2eaa7fbffbe16a3101c2a04fda512ff1b9160786c05c279a78732e1909782cb2b23";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2022-1.0";
+};
+heuristica = {
+  revision = 51362;
+  stripPrefix = 0;
+  sha512.run = "bbadd84c1cc0825f0dbe72bdd8f5c4b939ae1986dc0f97ea80ecf12999f97d455e2f89cd12e71e8a51ae4ccadbcb01ae7768a60a47b9b35f19b98ea17332372f";
+  sha512.doc = "f445e4588ba85a71af43640e6625fe1fbcb1f8a2208d2c5cfc7fadd1df325be3fdda85b9da4dd824f3c0445033b2bd9e2120e71abf61c6f55b9e828a3e61a87e";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.092";
+};
+hexboard = {
+  revision = 62102;
+  stripPrefix = 0;
+  sha512.run = "e82683253d7790448bddbcefc617d0f0e91b5373de477f1c78a5db9256d632983b1d5f700a0c6fcb4490b746e932de3fe40a22875a6c0d37f6d0ae728867b73e";
+  sha512.doc = "97c92b9c8644cf060da8b3306c8a3f26d1c59f36b1731ca4b6af06ec77211ab676963d5ed8fb70c6a63096a7224cfaac22cf77d5dc39f937902815bea778f323";
+  sha512.source = "f2ab006e01d1ff8ed68252f594d3340441a5a6bed7cc0cbee6c28e119a923a20b186e1f08db7444c75de52c86afdb9aa86767278f0b506a9c601064783baef95";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+  version = "1.0";
+};
+hexgame = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b16abb669f6bb5c3111e6c333353cc37a76431c49920a4cd22af79f6237f78a5c56124c5854b7665e9dcf963fb2715c488dd7ef4df86d5582aa7b3dbe3d08822";
+  sha512.doc = "0fad11a5510dd1a2ceec227c46c3f8c0c387ab3e2819bd70765d363ca5f97822147bfac62e69de773a96d24a881394c35c1542a8f08a1828a82f94aaa7f02644";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+hf-tikz = {
+  revision = 34733;
+  stripPrefix = 0;
+  sha512.run = "47ca98b066829e6ea2009c4beb92db2c7671642c495f1011df9be00d546f3613b7853aba5db88e3805441eab66c873e15b60f5ef75cf21e906f80b5f11aa30a7";
+  sha512.doc = "234a8ccdd9cd921368f700fdcca818d0c76265371ac89e09c1a54454fa3e00f0f28fdc7f962c227f9bb69d851585f2c65e20b4a4093aacc3ad0aa84d1abc7f87";
+  sha512.source = "74fd110da2d0d248d70811db52f220012c0a41cecfaf702765cf8bdeae98d9e1a96c6087770de4fcc1ec249901ccc79837ed4e89b4527dd3f746ecf503c201ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3a";
+};
+hfbright = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "91c8b007dd8ce71af9dbc98a66a82a395d68fc87a0abcf9518b5b89a98dc23b28f1b9b9aa551f82b920dc3e2d8b6500884eaa3bc98be48371a9774f9f283a641";
+  sha512.doc = "7de24b513093d965fab1f8d7d13ec4b356e7f5495cb3a8f17204b1a786288488b4921df6b7e184262bdd3aa11fed6483a25d0bf8e898db05c8b1f7dff769c175";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+hfoldsty = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "5ff36855df468bf59d387d56f4ea65c86ba304eb2495f2ca110558ef48c528ef444c7ebfaa378a454c311c806525ddaa639a32d3d1b16ca492b641f223133390";
+  sha512.doc = "1f88ae3c13857be317ac2097093bb368a9f1ffa2a8fe1b5e15f59622dabdce2f2b3aededbca31a4d17f05c2dcb28f8ae0c9be3cfb1758bab4501a99efc68612c";
+  sha512.source = "5ccd5708962e9ddeea3ac41426cac6469ae22914fc4bbb5779e25d592d1cfb0df78f73d79c969e00b68b38eb9ae7016cf394f9592c14d9400bba152e6fc91092";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.15";
+};
+hfutexam = {
+  revision = 68829;
+  stripPrefix = 0;
+  sha512.run = "4ebc270b01ed4f0e9d1aa501cb16cc0594c209cb77423b3b83b43600cb1080fbbfa8ecd9d2512e460d7215260a3045f1f33f469762e8a7321ace472d69e0a43b";
+  sha512.doc = "bc70bcca6f0dc432fe6fbf1c92ae8a364a93a8e94d65cbd22939ee2313bd5d82e2446e60b6dc0f8a4b88e49f5cb2b3fef9ea5502e5362860eff10a8123645c40";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+hfutthesis = {
+  revision = 64025;
+  stripPrefix = 0;
+  sha512.run = "928dc93116a78a440fd1dcb163ccd5d88daa4b96a6850f5bb45c996c3c81249982588ffda7f51f4c76f153f3df6f85e033ce15d28593c4d6235f7781a829ddb6";
+  sha512.doc = "491a841f563a79fbbc71d19bc9aa259ffc4429db53c86812724306432dcd7a5d3af98eb2ce1defd4f6af02fd5f4b34d4b5a96de540e95bd59fd7991ddd5dbc85";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.4";
+};
+hhtensor = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "ce772bed045b85de5032e3b4beff52958e18513e2c9628e67505b75baa17befe4e3a5eb86f812305b87dbd15dd2f483df78ca7c5db54b64cf18abc75a2ae8f59";
+  sha512.doc = "aca1224b327f448bbb3f598b350fd4e569960bac9d05b8674b4cde79c4a13b376dc2a932b8fbd315f63f9dbc930ea28599afc18340eb36d4a38d967c14b62152";
+  sha512.source = "6cf27dcfc865514e9274053bace69bd71e6699a501195c553ab3386723b375714f14829e70163539443c4c63b2821be8357653f137943cf49f26e0569c0fb0fc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.61";
+};
+hideanswer = {
+  revision = 63852;
+  stripPrefix = 0;
+  sha512.run = "9124e631262dce82cea19158e34353817129e014ec5808dbfbe87df661127d516664de2a895622344dc663c68ca51731bb6d887a5043789e3d830fa908b82cdf";
+  sha512.doc = "f9bad79f55157a0f9007c1f551592d0e054f2a519aeda36c175afa807a70542068cce1b9bffb31855de8e99e8460fa22f41f046be25c2bb4757ba859300b77b2";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+highlightlatex = {
+  revision = 58392;
+  stripPrefix = 0;
+  sha512.run = "befd40ea2efc15015a76f97add004e33da86c628b3bf58277f8a9feff9396544acdc6603cae74e7bb88d2c819656edcbce9897e32f65156f39a0667c087a491d";
+  sha512.doc = "20760262af6cfeccf512ab205fb874b3f1c9b3c15637ed6500bf5b627ba2f319963eee0f76aa480e1257b0cb31288829bfe324f05afde290c3433aa9a018c10d";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+highlightx = {
+  revision = 68756;
+  stripPrefix = 0;
+  sha512.run = "64919a37471b4ed0520cfcf8685a67ba2f9f84a278b9dc7524a484876e95072906cc5a7d40bd8c751ea2d4ec65633e589274e0b729f43625b46f91928a50b3e3";
+  sha512.doc = "ff1b00aacdf83fcc54021520bc447184ebf29498d2b5ea66b3c3266560066bc1b05d7f9edf61eee810100531c76db4c65814cb1d6c3051dd1e3d4911e41c145c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.5";
+};
+hindawi-latex-template = {
+  revision = 57757;
+  stripPrefix = 0;
+  sha512.run = "1f6651a4aa033a7cff44caff62d01f3dc5dc280bd19d8a0541c78cd35116e9f765517a078f6f6f7a25f9ee42fc4e4e743b86a746e80583b491ac399d46e94ff1";
+  sha512.doc = "459a131616a15431dd489aaa87a23533ae5eb58575f38757a81af8eba425bd4e5c0c0f3a11a3c030d04ecd7d29e9ab08b3f4e270961c4c8e8791c15a497ba7fe";
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+hindmadurai = {
+  revision = 57360;
+  stripPrefix = 0;
+  sha512.run = "24a585a4452895c901b41e64613d0bf3b2438c0bdded45b38ec6b61206cca96d5f0dc12ee5fb0073bcce95f208971e0838469e000108bb2d24567b2c239ba936";
+  sha512.doc = "9cde302caf78d14cef5c191c6df0179991d07d8dcf40dd46941a966062d3df2ed5ccd21b6f5e5333bbab9245962cfed9ba75161c16bd8e0a914c231f9f420ef6";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.0.1";
+};
+histogr = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "987c392828a4995afdb37b10194c7735a7dfe3375bcc6efda6592d3f35351c369c045a2c1464cd2653d6275913a335ce3d527afb44c51ee38d3038d4751eaadf";
+  sha512.doc = "6cebdf9d6000ba48dd8106645e7a05709ced06c8790f8383a036629d8d53ca434f5c5aa0ff511754ea9e00fa743e435a304dacc16edf18098409972f763f9087";
+  sha512.source = "f5e764adfe67c9e07261ff1211cc08ac9b4b076e67683dc50f9759e942f50810a72222a9669770b9f281b7f821d50a7da85014ad65461dcaf1117d54b98d89a2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+historische-zeitschrift = {
+  revision = 42635;
+  stripPrefix = 0;
+  sha512.run = "da501792653c77f7cdac978a348e1267d4abc2e80d8b5565b47fdab4a1e2204f9544bab972a291d191ce26bd29203ff28a6440e2f8969cf1b33a5cea48998b04";
+  sha512.doc = "1b091b850e4936e8e6484ca484f740005c66458655a0cbe24938c3f33f23807fe9b7a0ab93b38f6a3481c684e35031398860d5452f6bc3fc8a8e6f4c2e82f927";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+hitec = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d7ebe166a23c05a1b78552c102507e697c07b955cddc8f4061d22fc42fc414664d3a1bc1c08e0dd122a987c736d24d4935dd944b37f62fe260b3c811678a3b30";
+  sha512.doc = "f166b529f29f0470770d5a24e0f3ea2be9021732fb5373611b87cda10ff2196d1d121258fda75369a2f0f9a65324f4a8dc0d3c5f377cf994c04807b18b5a46f3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0beta";
+};
+hitex = {
+  revision = 66924;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "babel"
+    "cm"
+    "etex"
+    "everyshi"
+    "firstaid"
+    "hyphen-base"
+    "knuth-lib"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-fonts"
+    "plain"
+    "tex-ini-files"
+    "unicode-data"
+  ];
+  formats = [
+    {
+      name = "hilatex";
+      engine = "hitex";
+      patterns = [ "language.dat" ];
+      options = "-etex -ltx hilatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" ];
+    }
+    {
+      name = "hitex";
+      engine = "hitex";
+      patterns = [ "language.def" ];
+      options = "-etex -ltx hitex.ini";
+      fmttriggers = [ "cm" "hyphen-base" "etex" "knuth-lib" "plain" ];
+    }
+  ];
+  sha512.run = "b831998a078c61be41f376c73a63d2996ebbb128aa90dcc9f21e1e80d2e834d6628d150d9e98819defb4b38fcfd9e1ddd0239fd0ddea19d0086c7187d3d80a7b";
+  sha512.doc = "f278d0d4a4b37e4489ba46ee3325a9af5bd7205359b55f30a3de10de36182c754974e0b7a0f506ac233280ee395bfdb5a8f7f5c3ee1cbcb0c30480338968e0f9";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "x11" ];
+};
+hitex.binfiles = [
+  "hilatex"
+  "hishrink"
+  "histretch"
+  "hitex"
+];
+hithesis = {
+  revision = 64005;
+  stripPrefix = 0;
+  sha512.run = "d4060e3b06d2a103f414402e83bf5f5277c2af784b00abc7c6c0468518b0bbeded50f08735573e4a170eedd46227957127e3c3d2ab44edebe7386a7893af432e";
+  sha512.doc = "c5fe2912c4429fc14fb43aa7de9ef76e30b0354f8e673ab9ce693c75a85f5c6dbf77927d1dcd82c0c5aae4a84a665d37fdd505f1bb2dd0e1ade7e5dad3ba5ad1";
+  sha512.source = "64515fa70127ba17b9a8d846c9670bc93f16db80db83945037a4ae8b505979202a16e0fc7187731ead320078b8d9277337b555c2b2a271e99677e0330940b9f9";
+  hasRunfiles = true;
+  license = [ "lppl13a" ];
+  version = "2.0.11";
+};
+hitreport = {
+  revision = 58357;
+  stripPrefix = 0;
+  sha512.run = "e91894f8589f029d9cfe58d743d495131c24f0f6d6705d52d34ef34e1cbde5ba6dfd8e256cdd09ad7fa3080c613c3feaeaa15d3ca6ddb51fb82ba0a4bc333b99";
+  sha512.doc = "e7f0b2566042a8442d5fd5cf36e4eeaffdf093a682b8c640ae8b059016997148d17d9449fdfc6026ba169731e0a7e2bb60c525a4ace29e296fbf1a910e887e9f";
+  sha512.source = "7abb2458fa0a46e21c4d7e88699a3768555e954b37d2406a11d26925f520cad6a02e22282367d6787c560d0cecd34a1ecb6e96335b3f22930a083db5aa50e649";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+hitszbeamer = {
+  revision = 54381;
+  stripPrefix = 0;
+  sha512.run = "a90ea22943c228d15f659bc562d79b9e50b157451ee9d06b02cbcdf5a1ef4c1eb353c756e0963d113d6258c1799ab22f71a79905387c78638c01abeb3d936e00";
+  sha512.doc = "84d8a9edf719b1af7ee9d8276d91bfb15306bc3a5632c5c0290412533a5c321c1087bb642104d47137007c9328a346f72c8ab87b9d5f8b94e3ca0b6d2fd18a70";
+  sha512.source = "4e62661f3e51baede19234e9bea18065833ee07d1edb6efbd434d8cc194f04adb3ce48e74f93050a4e9fae1d4b77f5efd0346925b6ead46a344503b9af96a23b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+hitszthesis = {
+  revision = 61073;
+  stripPrefix = 0;
+  sha512.run = "b7a3dbbed2d9520aa26fbf88e9fd5f864912dbf0ebdf052cf65fe888676b9d5ce9917d154bef8bed2c5cdbec6bba5ce57cd434bdf3d9ff8c41ca6fc12f07a8ce";
+  sha512.doc = "577c2dace816b5356e3a2da21f8e95aa165e55b75f5df0524d5abe6649d6e1879b7a2e97d0da88890e37baa05becfbcd567b977d62c58f17e0f372234cf00b36";
+  sha512.source = "cedf9d399434f48032d4bde2fb91088320b2bd8b939629ee71fa98e744e8de1dfe14b4a01787fc9eecaa7ce8931b322bc0fccd7d96c7eb5e24f2097362063fa5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2.1";
+};
+hletter = {
+  revision = 30002;
+  stripPrefix = 0;
+  sha512.run = "bd79dec347980624c634918880718af9e434e24acaed206815e974c2db856e8f424e12b6870d920079626423f18a02fd326bdc387c256ae9c3a1dfa4ae26e71b";
+  sha512.doc = "67a9a39cf0c8ac1054588ad542a8ba3705e94445920d4ca85b46423a4cea364c58e8d2b02b7d7579c9684653734f0766e8ddced28a7c5ec77e0daa3c3dee26b9";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "4.2";
+};
+hlist = {
+  revision = 44983;
+  stripPrefix = 0;
+  sha512.run = "9e2150f08a7fac07a0e2e36edcecbd5c16ab3c119d8532fbae9399f14c6c7567d2cf4e2a92eda9a650049a901a35b6a9a0dd3423a06da6a9d266a3859392334d";
+  sha512.doc = "5b3748d7f67fb51dc0df2a03318e96ac9224abc42291ab475a907befa14fc210d9d2371005150404480900865e8ffa9f97e3ab122109bb5454c3b061f66a064d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.11";
+};
+hmtrump = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "34b2e61744e3f8cf180a61ca13788834466dad7bdf831e576829e0f6613c5e8a6330075e89516915728a5936a68c14288c79e0f050e5956964d69bab3784d9c6";
+  sha512.doc = "36c1a35cb4efb4dc340a439a921252cbaf48d3f0b7fab0010a7fa22d8b03e7b5b644244410efa9fdc63b5fbf69eb9396cc048908d00210e650941a0647d3f4d3";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" "free" ];
+  version = "1.2a";
+};
+hobby = {
+  revision = 68137;
+  stripPrefix = 0;
+  sha512.run = "0caaaf772dc325e70594f909f1a58740224195aa7af7ef86571e7a97e1245cea5ad6a704415a3275719fadaf74ec55605e66af55dbbdff4c524f529e121035ad";
+  sha512.doc = "3e418503ef48dd0be479f17171d8c6767c77da95d43a2f31a374cbb6ed47c5129e2baa64ca15128240856790ea92acd2b090364384c29954266d2b9ec6aed362";
+  sha512.source = "5978e0c2f5c30145a9a5562661004a50cbb5054ea98907c25690bfd1c55f13190d74283ef79e7995d6f63d2d1516919062fe746b989227a4e95fe091ff5c9acd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.12";
+};
+hobete = {
+  revision = 27036;
+  stripPrefix = 0;
+  sha512.run = "d2c79f5d39fbe82b43704a78add3a016768ff282d48ed1f49d1991c6ab56bef5266e8cfa7b3b03bcc944990d407ae43eca99930270ab84679f51323407b861a0";
+  sha512.doc = "ef7b1bd487c496cb2ffc01fb2940a72ac69edb1a5516d19ce6a6e6cb197ba6f517e03ac673b2372cc9cd4f40e5c6ea2469c2712528a10a3f5ba09e9d3a46f209";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+hobsub = {
+  revision = 52810;
+  stripPrefix = 0;
+  sha512.run = "586189051038582c9303935c70bed67975f51472d28b533e4b72ef341d4d93ad8f313774a5c585baf4b72d607101941f01176892499c7ecc5cec3ede2e28a693";
+  sha512.doc = "8cf2210285b162e52e2cbaf0d1a9e7027ca3aeb7da81ba238fff97a9cb10c7ba9058f5eb4f28303031a7774f457207ace1f30610cef2f733dd65b35d9ab6b1b7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+hologo = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "d4c5899f35a7405ff19ba810af17a86c25ba76cd01597dd19e074ec468052a95c85f8a80e1f0467f48f72280246c152bb24928a68fbbdb2cf6f0788cf94703b0";
+  sha512.doc = "f92326ed2d0bb3ac455a54889b469f69563d4a91e80883bfcf0ce92fb55c0dd63423be8ec800696f8c078bede28929e8a79d43174e8cd1a802b4a6ac88cff178";
+  sha512.source = "38d75dffe94c9af12005254231b3fb7fc8bf577993aec3ac3e132d14f304e400806627058a98f5ed1f8f9dd5f4ce6d8caef1214ab8d5dee31aa66f47126bf22a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.15";
+};
+homework = {
+  revision = 68773;
+  stripPrefix = 0;
+  deps = [
+    "einfart"
+  ];
+  sha512.run = "4b74d0a93d720252e38f7b8452cd781f37de2e17343b5003ef729f1b1d2b50978ca4a22c83fe0e5e941b92ec9cc31ba4301b322e3c4e2bbf18f96d8d14c0ca81";
+  sha512.doc = "e1c29c37dbdbfb968409a9bbc8c64573dbbbe477add7a3c938162a8189cd0689ceee8c2913b59a2cae21099cb0f0ef4db8fe7b23bb802d884ec20af61896907e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2023-10-15a";
+};
+hook-pre-commit-pkg = {
+  revision = 41378;
+  stripPrefix = 0;
+  sha512.run = "6fb3009d4bb4016f0d6e92571d52aaf7e3780d39a6b2ec73ffb37112b3f153ed71ecbcd985b81dd841f296a39da83e9004a2d6e6e85e9a49765e1682563cfde3";
+  sha512.doc = "3873c4714a8a6d221f860a5d0606113c64482b363727067e0017d27e99d73f31cfdac88a799fb1412225baffaecd7bb03dbdc66b607a075b1e4539ffc0df2a9d";
+  license = [ "gpl3" ];
+  version = "1.1.2";
+};
+hopatch = {
+  revision = 65491;
+  stripPrefix = 0;
+  sha512.run = "6c0f9549ce0321d9080cd0dfd3062eab47722bedac79293a14019c25edfdca7afd0cd6bd3b7be67a99a93ea0b347ac798a7b24909886d300e7085ca67d1a5c42";
+  sha512.doc = "4fbf84371053bd67fb3d4b370bc335013cb62042cf9c13d2fc1c63a582a56885a93f73a44aff8986b4c657f7d172a1bd75cbde556633647a1abafb72746f9150";
+  sha512.source = "bd32091e28973236d4de3255642677966c4c856da4d53ab811780536e3c564956ec8299d75f553790f2208ce2ccf9356fead39a5f501f53e91d108782bc3bcb2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+horoscop = {
+  revision = 56021;
+  stripPrefix = 0;
+  sha512.run = "d00c8ecbc9c76c2864a52a8bc9f802477e402a59c86789252bce1b8296735035b7b9cbb1c3a18baa76cd1d308d4af53d7d2f64ee9aa37a70e33bf27e1465207a";
+  sha512.doc = "9bdd655263da0847bed65c71e423e301a35e69d7cceacd650c0e9d4be91800c0de5fa0d7aa917a6d5f5abcc585ed031e6ec84ef003bb813be41e3daa3ab95f82";
+  sha512.source = "40627807a0ccda26d1ffd1e2340542644b9d38f5344e427bf33c2e6ef72acbe9de9b7c11366d5ad258361b217373c13a9c8fa88da7f8176af6c738440d054626";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.01";
+};
+hpsdiss = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4905368d081cc6e7f2c7b43b28d4c6e22081796d8594e5a07e521bb7ab0fb14c9ccce1dcbe135b0cbc5a7b2671e3041d7764ff80c7e1543b4ac4cefe945794b4";
+  sha512.doc = "566f0509feee0bc5c28481fb62f2c991827cd5855f9696fdda79628f5c43329b39dd508fe9613d2c0f823bef421a97393fd303d830c779c42ac67f88303a239b";
+  sha512.source = "8337cbedc42502ececcfd60adf422e15aba32381c46489a82d8b618286a4d8848c0288136771b8acdbb03af9f39029e4be8e1c287f6dac9bd3ade3b727e8ec8e";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+href-ul = {
+  revision = 69359;
+  stripPrefix = 0;
+  deps = [
+    "hyperref"
+    "ulem"
+  ];
+  sha512.run = "e8e5d7767c93d0f30a7cadadfb2c7644078b590e46fa073db9251426f961dbec4abbd0dfcf6db6056f9a03342a01d706e19da027f64a01adcfa584a9b1becd2e";
+  sha512.doc = "56babcea1003db2bc7456ccc77e004814d9dbb7711289e2a0af89548ef2e6b146f027ab7d0503628c7e61ba25691b1b2c7d5a24253e0fb08a30256cfde0c1e5a";
+  sha512.source = "eb842f9a9b01a36dd033f2079f0f4508eacad634c89c33e6c2607e78c6016fa441cecffe82fdab65c27870af5b3eedd4e0af45a9db224cd7c60c43a24b1b0d93";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.4.0";
+};
+hrefhide = {
+  revision = 66189;
+  stripPrefix = 0;
+  sha512.run = "f62671bc667f8a0eccf2d63b06b55e5483a7f5d1f97e4a1f829c898fe947adf048c21cac10b659160d6ee51f0ad4a48a3998a1e820e387881b6df390ce9bbd0f";
+  sha512.doc = "0ade5f947160493a66f8772d6980db65d0c52ef03b1c12cc2841ae40eeebaddb8b0af50a8c28b010cfe7689dd1bfaa136b80c419fe26ecad302699e754f372b0";
+  sha512.source = "51373bd9570c5df5ff388e9174875db7144e5868a0da8d5d27a9f4c332dc37c97436d1ebedb60c18b47a1e6befa07e5703fb1d6d5d5f872d46f3bc3e2ef71b84";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+hrlatex = {
+  revision = 18020;
+  stripPrefix = 0;
+  sha512.run = "14bd6fdf4a60ec599971b1f5ee7ae5fc649b0d1382f9dff8bf9905f4623f3964c2d552bbc4485680d22cf04651a5e49b71220ec2c05e6599356b6dcee6e4d122";
+  sha512.doc = "ecd67675466d365f00e49b775ae3e5264e2d10d574dbbe913d52b3a5b553fe942e06fcca26cb2357fa76688c55fc4268bf7d18f5cb2a90663bfe47c11a5bbde7";
+  sha512.source = "01f47918a1926f36840fd4d78debc70cbe09fd2a52b06ede7b40d7c3ce0d42e6385d54cd2cc96eed8bc222ebcbd2e7ab191c41f8c8df82f9b5ff93d2e0f54a16";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.23";
+};
+hu-berlin-bundle = {
+  revision = 67128;
+  stripPrefix = 0;
+  sha512.run = "57b3122fb063e5f930e5d94aaa94dd00fccbe865570c345abbb6252c42d3f67ed7f2dd163d9474452142ada7691783b7b4e0aaa8a23fcf6320c4bbc581e5391d";
+  sha512.doc = "91483639fbbe4b073eb299b0153eb57383dc59c7d669bfc07e275bf445b22f2eff35a7abd632388d701eb23eb833561d9ad4d865f3e8d7495bf44c74be8dd12e";
+  sha512.source = "eaea8de8f9ff48ee7cc3d1d91819cfad340f9f8aa2b666bc23fd28489c585b4344a946cfca6334620acbefa2602f90050476c5da56552088b1c1ddd3c483af0f";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl2" "bsd3" ];
+  version = "1.1.2";
+};
+huawei = {
+  revision = 68336;
+  stripPrefix = 0;
+  deps = [
+    "anyfontsize"
+    "biblatex"
+    "caption"
+    "catchfile"
+    "changepage"
+    "currfile"
+    "datetime"
+    "enumitem"
+    "environ"
+    "fancyhdr"
+    "ffcode"
+    "filehook"
+    "fmtcount"
+    "fontsize"
+    "footmisc"
+    "geometry"
+    "hyperref"
+    "lastpage"
+    "libertine"
+    "listings"
+    "listingsutf8"
+    "makecell"
+    "microtype"
+    "pagecolor"
+    "paralist"
+    "pdfcol"
+    "pgf"
+    "pgfopts"
+    "ragged2e"
+    "setspace"
+    "svg"
+    "tcolorbox"
+    "textpos"
+    "tikzfill"
+    "titling"
+    "transparent"
+    "trimspaces"
+    "wrapfig"
+    "xcolor"
+  ];
+  sha512.run = "97c8608c51635abcca6daca84e911d680967aea81ee4984a835245be32ddb4b97345e2714761e0399d3378a08619044e17e53a9bd935e44953372815f16d50fe";
+  sha512.doc = "e327912bf029cdfbaf1857534f8e5174d9bb26d5d1a2a271b3b0a8bd4bab1bdbcb8372b6f76f7c75d058f731baa483d58033f9c5ed82252e6210de4946c93128";
+  sha512.source = "f1f27f5baa2af8de2613aaeba69ac8562c6f7791ced01871c86c4dce3f25c14105003f8d636b3df3c3d8c04d81dfee4fab57150d80e58540db02d3d909dbaea0";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.18.2";
+};
+huaz = {
+  revision = 64723;
+  stripPrefix = 0;
+  sha512.run = "78331527a14c974923706a26527c8b42e1467935a741d28e81e7ba0510b29cc26242f8b811ac7025a9be3da1d92a2d65fb47dbd798fc1ddd985d58ad96e82c9b";
+  sha512.doc = "32c2279e927dfe4fce1554b2dc9a747aa274c6406a0b98fe4477fcf159d3b978f46035badb293bea596067583ad738373e2bf3680fb1d5e20284a0d45b3900a4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+huffman = {
+  revision = 67071;
+  stripPrefix = 0;
+  sha512.run = "0d78c3874045ce45d703f443817d9b20b5baca0e3b713bc5f09e18a64102af3d349ebb5b7051a5152eaf06c8d9cd01c3a00b5a3c0f5b4db12f566b5f5356c991";
+  sha512.doc = "3c1651e5cb8b527e1c55aaf682003c1639c91efd9bcaa4fa51779fac572550195979c0baf2bb4738f8b5e2628b6deb4af6109938ce70e4238696ca35f7e4ea34";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+hulipsum = {
+  revision = 56848;
+  stripPrefix = 0;
+  sha512.run = "32e981937f3077fb1310205f17bd10c93ae20c98e098f766b0a90218d81c7708071aa4ca605bfc55da1614116cbd8299f9cf1853426dae04a99669839b2d5c83";
+  sha512.doc = "862a91b902cc8bb0d71efe3933bd0a1b0f3aba1023586595d57cd45e15a0b961cc3c56a59315eee02337f89d35582497dd6894bf3ead060d2863823765211e1f";
+  sha512.source = "6de61158c97297d4c76691f6aa2686d8ff88317de0dcc951a23e6aa93c63a4fecfdcabb74629e2e12ed7878a8a74987834f36faeae3c5fd661bacf99aa7f7962";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+hustthesis = {
+  revision = 42547;
+  stripPrefix = 0;
+  sha512.run = "508c86a6cf5e3d952dd43786f78952cc8bbe635620a913abd82b49c2cfade29875bc924d5ea89803b03008328c7297010e98f70b62b5191d9855e0cc1614d3d0";
+  sha512.doc = "5c114cda4bd4264904b7fdfedd55720046403b8cd3c1bce4181dffbf319a9107ec0ad8cdd092922c8c5268aac62437d1128a45ea0cdff4121a40f02e26dc0148";
+  sha512.source = "61b6147d4bd063995900479b894b60d929445e60855c522e46abaedfbd33f7516f90a99d5052b3241d7070d375504cd660446d6647c28284e76d0ff9ec5aaf76";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+hvarabic = {
+  revision = 59423;
+  stripPrefix = 0;
+  sha512.run = "2f9af35f3e3ebf6d90ed05a77fcd6d6c079d3a476c26e0704e6f6b74899badc3eb0cc79d37f5f9e8b6a2846edb869bf57fc5b4bf14e834629d126bc71b77e42a";
+  sha512.doc = "8508cab70c4cc87665790dcfd34a4465fa22002ca19a41d2d24e21ae0a2ed833a7f3c0e346d36e8c95411ea925ad3ebda8b6d1ee4179610ce0e3f673e6226246";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+hvextern = {
+  revision = 69064;
+  stripPrefix = 0;
+  sha512.run = "c9effc6265c66681233309eeb19707f0ea1acb670934283c88f9fbecc4d91c07601c8cb84a06bc7d9895494ef8efb5fca1c00f658ce8baf7489a6c875d8f28ec";
+  sha512.doc = "f7a6dda6ea0d327d8596e68a5880a3ed0d4811d1f89743aca9219e9c26d6f8746a3ef569af464b81410b002047c53cad2b9dfdf783a0515d4ad3c3d322d4483f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.38";
+};
+hvfloat = {
+  revision = 68586;
+  stripPrefix = 0;
+  sha512.run = "21124f93545ffc5a025e24a09f50457aa16b8936044c4a510a626c812ccb13cc028e6ef6cd89fb64064c39b328ed47d227d40986cab75d6efb54c734774c3cf8";
+  sha512.doc = "737fd24c8fe61f2af825ba28b71a16c2e094a50835543c8fea6b317cefecda94602afdb70c8df24a671a1e9af219350acaa368295072fba1193de8db566eca40";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.47";
+};
+hvindex = {
+  revision = 46051;
+  stripPrefix = 0;
+  sha512.run = "12e47531ca8dcea2f195d86b5721f2a62d2590de5a0b464e5e6de5484ee34803eac14f2474e4a00938f6d5e5b307ed3183ea3aa0a4f0d5874877356de6e8c83d";
+  sha512.doc = "2a10c26537e550e3d51330c704711c2c43b872f90db15ee709dcfe603a5fc64102a8b466c5d5b7ab4706d5e96e91b11559305ac607477776f34da97590151368";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.04";
+};
+hvlogos = {
+  revision = 68568;
+  stripPrefix = 0;
+  sha512.run = "1d1c1a5944950a71046b764a76c7cdc05f6e48b08681932504009299e9d78bcc3a03c57bde36df6614faa0efd8f6af84388a02ecf225bd95e596cae0cbb69d66";
+  sha512.doc = "55b3bc2c71c8f110e39efe31469573879b65058675dd5324af9075f2b9f1d64fdc8a2121a963f88e67bea8156dfb5ca4a4c972bb70ae90b358bff209fc5a4695";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.10";
+};
+hvpygmentex = {
+  revision = 62405;
+  stripPrefix = 0;
+  sha512.run = "5770b9933ad2dc7c844ba2281a3717bc1d27f67a834de45a87effd400551fc74d111ba5087ceab96b2a9e6ed11293fd0d3dfbaf7ac89c4d9a1434911a2fbf734";
+  sha512.doc = "cd7b3a615ab8ca79e0d0e9feb7804cabd9036831d2f9761429b7bf528125d055e29f3f7a2e1eeb8efd4c73c1f6f8e0ed03a2ba47dbf9504fc1a750b4c278843c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+hvqrurl = {
+  revision = 68693;
+  stripPrefix = 0;
+  sha512.run = "b9a1e88f38b18744fa66d490fe6398bbfda8d0a81a9fa37edb5735325351f5f10f28a7452d8a2d60470afe7faf878c58b59220a8c20ed1744c2be16e8f94db60";
+  sha512.doc = "ae54369788c2ae94dec99c13c57d2c6c42852670d067c97dc8f108dbf910d5a2cb212576629322ba791e56e655b14fe561ba28bc120b07cc9365312dc2bdebdb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03";
+};
+hwemoji = {
+  revision = 65001;
+  stripPrefix = 0;
+  sha512.run = "fb29647b4b81c5c4cc389fe4957400e01dd408f9b915fa4062218af3b2a8eb852315399251c257ed1220ff48359940c59ab9a09dc7a67fa8f0817e39636a1312";
+  sha512.doc = "ec35434e49038755dfaef171273e70baffeb3021d002c83703bdc18d0f181f8027a01272bf5b3ce02ceede62495dc9dc1f1c390323e73d77b1bb6adf226f74b1";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-40" ];
+  version = "1.0";
+};
+hycolor = {
+  revision = 53584;
+  stripPrefix = 0;
+  sha512.run = "5269044c5b462f13c78e80d28f7237f2d6e353da98db50267a5c4f01b22d565b0300c689470f6eb1ef9af7b66c1068c1d40d7a30ae01f30e7b3649189a7e7fbd";
+  sha512.doc = "79e4c83b952182ea89b2ae7a1abdafd771359baadd34fce8d573d7449b24908a5bbf515d16d73fd088e7add82c143a458b2c196c125e5b492033cb36da63eb6d";
+  sha512.source = "587ca9470aaa935119d142a970931d89444d2d64ec311ba74a697fa4cd982be999e7e62ee9924dd6028f2b9411657d6b1cf4b6cb9887d08cdb0b969e8a334fd7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+hypdestopt = {
+  revision = 56253;
+  stripPrefix = 0;
+  sha512.run = "784fbff599b60abebd3ae794376a65b460c0ac4aa189319e3f245c1feefa5bb501acf75ed345bb6099e301070d0c1e1eaca62129c4e82fae5611526b6aff370d";
+  sha512.doc = "cde846c9c4da226d27bd15881577ad3f1c3f0639c3e37fc86486af40939b0efb2d22d522646136b1b2fe2ebbfd5f2338e347b7476be7289d2a3710d43c2fc8ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+hypdoc = {
+  revision = 68661;
+  stripPrefix = 0;
+  sha512.run = "bdd5a75f53b714976f54f0fea68093d79dc0d781a708dabbd3cb90e49d77f282ee15cbf8c1082cd5746bbe6b701e58e71bde38141db56cab5042d7556771d286";
+  sha512.doc = "cece39375981cc4adb60b20387ca441404a69c734f686cbe51df759b3025833814e9ec09aa4b720359cce4c4ae14b12cc03ff38954c3fb12ef268304a60f9dfd";
+  sha512.source = "3bf5a01f6ce3ec8cacc04fdd4d3b83d9cbdced6dc75120991e031a56a3dc4e5958c367f009c4f5fbbdabb02d0d7b391fb8fbbcdc2c4d5f68b9c0cf8d68259d1f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.19";
+};
+hypdvips = {
+  revision = 53197;
+  stripPrefix = 0;
+  sha512.run = "515089c437413d6d21c8d2987b8917aca7c046e42c0dc9212b39be1c9119bcc867f70c37087f9f3709db8c9f824ffe16d1b261f34d06d66e12857db9854892f7";
+  sha512.doc = "ef485ca27145ffc614c78547f68d574a0b27cd1a7cd5abd5752681e20ad6612e280f34f85c3e1c753bc6cfea976c9801da1768bda1dcea377c19b138ec9f2777";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.03";
+};
+hyper = {
+  revision = 17357;
+  stripPrefix = 0;
+  sha512.run = "6e5bbad0a682440e28be67fc893a970de315671e1f4987bebff4a163d9c38bb33d8de9557765f1d8c74386556c59e332ef5855a3f1fe36d08eddcbd2a77179df";
+  sha512.doc = "41fafe8bcaf651994c45abd0040e2123caf8e33fd2d06fafd310d978c10ae5c705f7dd64d9b4740bacee51f11fe52741ed64f83d6b236d298cb6c932fd3ba06e";
+  sha512.source = "50552c5d6650973719d892d2696ee4885f8fa78d9e9c62e3fabd8ac42f35610c025c508aaa250f52c5c7676cb5e0e6aa4b75efdd19d3c9e1f3b3ac6981ab1342";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.2d";
+};
+hyperbar = {
+  revision = 48147;
+  stripPrefix = 0;
+  sha512.run = "80077002a3bdc99339749e2f76687a0f8597a786fd3ca3f5207ec44dc2037dbec1e696ab58d77ee6b067d6e958357cb8f0c9805621c3feeb40dde004851311b3";
+  sha512.doc = "0598acd8fb945605b204c5c99982db63f4fc06fc82c47f7b301ead30be0474c7dde5eb4f78f3aa698160cd068d38aa2aabe3a1fae3c49cc32194e7cd796839c2";
+  sha512.source = "99555f8a939783db613ceaf509fbf2d95352ce8e774e750a9d552717eb538a64663a905a063b6b93aa83384ce322079656c61eeccc9678bdee47b2c56e52220b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+hypernat = {
+  revision = 17358;
+  stripPrefix = 0;
+  sha512.run = "0a803b9e7d23d364122869a89a6f181132f00b54d39f677a9d9471c336c933ba0e743fa4100636a6d3e929714a8896ce964e7614800c675ab9df7cce7e6d732c";
+  sha512.doc = "04a3f646e1595404513149f0ba56a36f0cc21a29f3ab455f38c4a7c3f5a282199208ac3aad329f38aa9fd5086762d326d85fa5052dba125d944969bfc0446489";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0b";
+};
+hyperref = {
+  revision = 68972;
+  stripPrefix = 0;
+  deps = [
+    "atbegshi"
+    "auxhook"
+    "bitset"
+    "etexcmds"
+    "gettitlestring"
+    "hycolor"
+    "intcalc"
+    "kvdefinekeys"
+    "kvsetkeys"
+    "letltxmacro"
+    "ltxcmds"
+    "pdfescape"
+    "refcount"
+    "rerunfilecheck"
+    "stringenc"
+    "url"
+    "zapfding"
+  ];
+  sha512.run = "e7daa9af79ef0ee5bb1ed13d8b7001a995d15fc5a839e4d102db7e5d7ad1e76ebc2f7c939b17d554d06789c225bf134177987743c58070e553a6e25a7cba96fc";
+  sha512.doc = "17e70d3008012178b1210bbdcd3abd3c39510dba1037753b2b4324b1f3ab832e0a6a634dce31d32950d1935fcefbc756ac1b7afc86b8f27f9bbee8cfe7768e7f";
+  sha512.source = "0cd806c9e404c93a96da335c8e26ab66476edc29f3f33a68e09ff290dbb3b69705443bbf8db5f7cdc85b702417b5e59f7e89514cb346aa0693c9ff65bcbf882f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "7.01g";
+};
+hyperxmp = {
+  revision = 68251;
+  sha512.run = "79dfcb70b4df1be8ada345507f0cece0b36c38f57c1b5e92fa008af3ceb5209c5df10d9144a24af4473a2f640d2adb59054cd9985f762b9b6cf7db45ed99c4cf";
+  sha512.doc = "b56e9ef7beb7502ba2e952267fddeb3a26597e9e5193ed66369dc3c78f5a08d34b5fca0685cab8f6ec67e12167a1aca309a18b85073b8e9c497641cf062be6b1";
+  hasManpages = true;
+  sha512.source = "02ca43c9809c347a6db12e0a8ffb2ec96db3b27d4c89ceea10091235c6b411de38d76f976a08d139bad0b0efa0b181e2e2fe5e2edd8cdf41ac5043fcc8758bbe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.12";
+};
+hyperxmp.binfiles = [
+  "hyperxmp-add-bytecount"
+];
+hyph-utf8 = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "64055aa046fdbc721fda474b7848b37d094b1a8f5f01e507df80003ba591dd959871c880f04d5bc6e0bf169e99bf89f5a1a7dad1195c8839773fc613f3719d9f";
+  sha512.doc = "c4aac42267b75a16559705e7de3716eafbec96a285d523d5e7b2f77f345d8e344e174571e247b9c5de8fac75942bc1b0f924e81efd8356b52c9ed91a149d8f09";
+  sha512.source = "2ed5177a81f46bb538517447d89129d82bab87f937c98e4afc6c74863d5f4cc3342470f66d2f5d05247fb3ac26b23ed4b6ce4fd093fcb61fbabac6dd330889f2";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+hyphen-afrikaans = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "0f969847994b3b377c752c23f802e8c51b4076efc2d43ad2560a72b83cea3bf0a64d7df18a59afe4289a4547a9f23cf81b0c365a499be85a2467579941fa9700";
+  hasRunfiles = true;
+};
+hyphen-ancientgreek = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "3f91560ecf78c5540fd4f5d9890f6aa7a57bcd3a41095985785505b82e40793b91a5da3a01bdc021b11c32db3dd7030a104686b34b496c9094acfb85509cd007";
+  hasRunfiles = true;
+};
+hyphen-arabic = {
+  revision = 54568;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "85012062097dd4b624cb39c68b293169a25ab3c9cd15b4474c3a3ffbe4b8ab13d6856c6c70a580da45a2d210952df2d9760682da3917cfd24d17772dc2ccce7f";
+};
+hyphen-armenian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "59538414bf5a4701199100fbd9d5247999a36bc28c7c6ef2a28deb9024e01605d48839f00f345c848365853ac3a9f1aab7402f44860532d7a5c099d2f27ee189";
+  sha512.source = "d25e6347545e00a809db1dc8e48ef3fe67678b9ec93a1f3619d2a5a3d786d6e411c2e9f905120e3c5d01d9489c0a83035ce8025836249c88ee768bf07b8e2ca7";
+  hasRunfiles = true;
+};
+hyphen-base = {
+  revision = 68321;
+  stripPrefix = 0;
+  sha512.run = "d3f2749cc6946702ff0d51c1d823531bc92b77c1106aec252c84cc8649aa56048556c90e9792f1b0749bba0b86b7c34aa2b04fe2946d1226315dbc73add36913";
+  hasRunfiles = true;
+};
+hyphen-basque = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "b90680dc5692824d60ca603e8bdd2fcade7cc772c8c0f9538d579704fb16165db2baf0c466ccaff46d92491b4a678fa86a127c0d106dbef6d640dfd2f887663d";
+  sha512.source = "75a20da77fa056c719ecc1f014bb09c67f62f1c4a3abe04b7cadf45c7a4e06e4492cb0d34a8025f19f3ee5e3330e488212885095335d4a7e97baa5b106576223";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+hyphen-belarusian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "19b9bd10d2357d0cb6ecc9ddb5e46b65b3c0eec1b2917a78311f255c1609bbb86595ce617d331271a72de934ae4001597f4a04d61b3810e34f3b197b21cab193";
+  hasRunfiles = true;
+};
+hyphen-bulgarian = {
+  revision = 58685;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "9763e6ece053594b01cd9255a8a3551eb6b86ab082f6f9283664e256c55d43b9513b624774a650d83215d656334751f569496030187c1c78e2fe80f2d10f2f1f";
+  hasRunfiles = true;
+};
+hyphen-catalan = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "37189e09ee902f2c5145f30180b51211091b07d7d04125c98f1b7c424ad27f6899424b78cd17c559509076eeeb957b4f268fb4130807e7fafb461174fed8200b";
+  hasRunfiles = true;
+};
+hyphen-chinese = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "a78b70095fcfe297e2d85a49108affd5d48451ff4740461eed46d395410a665011614c9a89dff37e9477ee3803de6ebaa68595ac39222f2968a4124355ea7fa7";
+  hasRunfiles = true;
+};
+hyphen-churchslavonic = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "c44b3f5fec7b44958336dcfb1a43c5b71fd1715262278863f5fcd74d7ec0cc6f1d572b741256d791e6979f15e4b0fcda8058725e27f17e1deb6e5df5fdb007ab";
+  hasRunfiles = true;
+};
+hyphen-coptic = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "fe36adfe900e23f2b0c3e9c3a3d96b608c49bf597222537d355d6a68e2f87f587db78a1921ab1c9a80ea175529e353524c35e99b83ef7f5515ab7c0aacd2f680";
+  hasRunfiles = true;
+};
+hyphen-croatian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "8355d0aa95bb2e72bfc45015f9ae9f6a138f94441387a4daadfec5be4060878f6e69d05eab15432d99c256c1a3f68c122d5c915164fe343459d658a4543ddf42";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+hyphen-czech = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "f5c8b08c2db716dfa6d36fcf337b4e18372978d04e28ff2c8ed0a0b3866f4bb3efb7b498fedbfde5052fc504b8677ae553c2dce73701e219632d8c5460d7e826";
+  hasRunfiles = true;
+};
+hyphen-danish = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "954543a3fb81ff00d9c58315ba59d7a5e3430217dda6c1453bcb7ffb0516025dea4b877eb9d66c9f80ccc69d3d4895bdc6ae1b611d8394435fa647b8b806559d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+hyphen-dutch = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "111371e47ca29069a5a9144d694858dd899b19e2b38d0c793b1e4884c69ae2d62398aacb4cd89e23246fc025e42872875bc808c1f327ac1502fac88c962e6c14";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+hyphen-english = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "a305cf89138e4327844d43a7e21773e31ac97a4655e4d58ae9a46dc0df565e432330debf704c37b4ad552561357521eba0b676755544ceb9c4f21ace09d6dd2c";
+  hasRunfiles = true;
+};
+hyphen-esperanto = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "ed2976e9fb3eec5d2f0759348b284129e43bf161db571dd21270335388b8aec57e1b8393bc9b246f8a6e9cde22f93a4cb3c1a03dcadd64fdda3d70b576789050";
+  hasRunfiles = true;
+};
+hyphen-estonian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "0eb91153214aaca8c3b5816f5315f9afdeb7c19521c87c79ea2b35e82217bfb23c8bb774baf810206f4413fc663e441ebe6b4962880ca0dbcda9209d2acce3b8";
+  hasRunfiles = true;
+};
+hyphen-ethiopic = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "a1532603758e7f774acba7c13ee74f0046ff187598ca86b2e93b91da31317f03fdbab5d4d7c0814978fb2ac159bd6e5a48e6e734c19758da21ad0a031844f52b";
+  sha512.source = "9d6c8c1b0ce5c40d388937328461336a97fcf1fe780fa6198e029f12ef118d9d98f6eec03ea217743851f0217217d6548298df9336fcf33e6c4c196bbdb9eef0";
+  hasRunfiles = true;
+};
+hyphen-farsi = {
+  revision = 54568;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "5b02582769a55bb07d81e748e83170c16aca1c33b0a240cf547fa9c2212f2be52223e258229c760ddc5dd730419bd9e761614cc4fb3b3ba8102841bb779af511";
+};
+hyphen-finnish = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "6aa171d77952165cdcb1b667885f16dd382124ed70ed1db80a9a89553d972720d8ff5f0da1b36669e02c3030d9ff362ab77ba1fa2ba45cddfb460018f0c0191d";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+hyphen-french = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "b9d2d05311a90f4caa6c4e8aa8a2e80e9c15fc3552f03f0ac6ec70d386610612715deb6e778247248355a3a209fb2413d6d2aee12f18bc35d5a334870b612507";
+  hasRunfiles = true;
+};
+hyphen-friulan = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "d1775a9b6e6b7fa155e44c93271e2ccb41bd1ec143ea0cf624841ad48a123db924dd134e6e60b862a808ad2058ed5b86cb34d98e5728b9dccd3997ba2f06932e";
+  hasRunfiles = true;
+};
+hyphen-galician = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "2d707542f80dc94ad20c0daa776df23b773a5e6ccb261e11db675e1e89f5f303a4f5cd50d97f491cc7ea8b0f3c0d3f6391707812a95d4e72cca3afa7815e566f";
+  sha512.source = "b9925168b1f9ae5139ffc3bd34810cc05a27475cfae31e98fd0d7618575fc994ca95d7479506024abec2c33bb20121811244d69c490df18a29d6c93fe02174c6";
+  hasRunfiles = true;
+};
+hyphen-georgian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "edaf041a2f92b0f7dbf28042c81838e8fd781cf9c3ad529c314227c94917ce4e8728ca676f8bd42e2a81bae76b11aabc1e22896e3ef9cd38ca4b718bc58fa0cb";
+  hasRunfiles = true;
+};
+hyphen-german = {
+  revision = 59807;
+  stripPrefix = 0;
+  deps = [
+    "dehyph"
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "c27389dea67ffd0d45419d484b0c72577b2d5b8234266483add078b970d5d994d41f7cf9a1509ad93efe9489501f986127ea717135c5f57588094393e0d7219e";
+  hasRunfiles = true;
+};
+hyphen-greek = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "3da84f41aaf7e5d4be0ce609e4d119e65c9189ff6662051cb7e879e9e373d990ef1c59ac7cfead1bdbc6e55b52d4b3ed28d157b22dbec43e5226f16872d5a7de";
+  sha512.doc = "865aaf1f9f0fbe130f9006e41ef677713667832745fc24c28cffe805a540a19f7104a3f0fef3258ba0e16c1c456959904887899a4c584338c58de7fcc80c5419";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "5";
+};
+hyphen-hungarian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "868a4c3f4d0eda078054026bd1ec35e05c2f4013e093bf58147bfa2d861814242b55a900ce60384767558c9552ff9d41cf447e2a157bae83bd2877251012d96b";
+  sha512.doc = "164180f0485e16a49ba83dcb4721902e8a29f399032d4f5a59d55e424b8178a25dedd9fb99919d9d772142342fb78fe0dbf7a5303382a0b7feae4a381b76f8bb";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+hyphen-icelandic = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "69add7ccde189e86810e2a82692a260de9a9fcc0ba011352881d202d4f4c94c4dbd84fe36dff40ef9b9ad3e8e990947cc61022307790f13cad56744f3ef5e41f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+hyphen-indic = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "765be1c13ef3445b056b61c24460cc2f18bad038c04541bf4773c7f61c6d26be25d3079b260a1b9623e2f01155ec52eb5bc87b0ea9234e50a5ca24dd8a7a5937";
+  hasRunfiles = true;
+};
+hyphen-indonesian = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "3f04a63010c02d77cb229c90aec9f1079557493958573be9ce992ac5ae3c229f01f9abc0cac785d9340ff48aa169a01f8b327ecb2e255bef57f1fe85d04d1d2a";
+  hasRunfiles = true;
+};
+hyphen-interlingua = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "dfed82ea70f25d452726b5cd03d8e060bddc23cbbc5deebab2ddad93ce6744c38d357327fbe570bf7a1444f62cee0cc422a6c7d066d6693a238d851b4fe46e32";
+  hasRunfiles = true;
+};
+hyphen-irish = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "478a77c4ab8231a3041c3427075f16c072f58a394eced8ff0cd5da6544f3f2fd65722f33fd8344e18060c96f09bd18b90af71f8508639fc9c59d29d704d9e348";
+  hasRunfiles = true;
+};
+hyphen-italian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "4e79ee31893d6c948a3aac8588d4beb75d89f89df973b1e39cd63894e008af55f8dca774194d7eb105fb0aef692b17bb645d5bd85cca7debafd74aabf241bc30";
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+  version = "4.8g";
+};
+hyphen-kurmanji = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "e5114da178fc841b1079130c01f8729ac94f0e3592dbd479f44a978ea009fd75b410d6130d9badd6227d115d8f6dad3ed4b553dbfbf4f80be5d1c2adf108e2fa";
+  hasRunfiles = true;
+};
+hyphen-latin = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "9d0db7fcad4ca764379957fa22f9daede79898bcacfbdb62abe54318a52dd82a66f8e39542c18008e3f6b6d0db284b1e9b891531d3c8f3c9cf22c764e83d57b3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1";
+};
+hyphen-latvian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "85aeadb0cb3c5de9ef48057132ccd958d17f014b07b56b9ebe2186a709c4e7646fad260e156718e43ec3eac88681654f88c9b53a6d71fb3eaee934dcb4439ed9";
+  hasRunfiles = true;
+};
+hyphen-lithuanian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "7a691e3c55c768b9ea5ef13552dc42025ab613df0a0d5c0d54aad58b63da11a93e59bc53e6a8211d5e054cbea8500846da01e9619bbee723d648e2d369a49d55";
+  hasRunfiles = true;
+};
+hyphen-macedonian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "f88208291212874df493151581205d1b270b2d4278176c42e11edac9b344b73c2ee859f93b6947e4a6003a00abc4d3753024add9caf84f114c8a0cec72aa8c8d";
+  hasRunfiles = true;
+};
+hyphen-mongolian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "159562a8feb25918bc422e7dc78a46423c7fff2f3c61016a0162761411999a5555be3c6e36cf967d5034f65c12f4b0834ae0c0423c2f3ab17a65034b1803dc72";
+  hasRunfiles = true;
+};
+hyphen-norwegian = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "8b02e90bfcdf3c6d4bd1966b21e0512069f1749c638d537e9553f68e61e0bc325db8d3b462f45650db4376c7a769c2cde3e0c0601d7de272898a23cd2251c064";
+  hasRunfiles = true;
+};
+hyphen-occitan = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "b0743d1f6083dac7a347e22aed19d0c5d76119582e4862557a55b817b17dddaa69a2150f14daf6b08689278dd61b27c1b6ed45df5601dd6327bf185a7a46a5c6";
+  hasRunfiles = true;
+};
+hyphen-piedmontese = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "fa7fc73edd582ba20b8236507385f0a30f477bb9c79e35fea56aa4020be966b9c4a16a327848dd051fa4cf6e6117ef8a51eb92ed6cb72f6993cb290fa5cd5ca3";
+  hasRunfiles = true;
+};
+hyphen-polish = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "5580b3865ff8d20d475cb962b0257b909ff0e410b6776cb8153145fb0ee42b2f777069413bc6b3622c8c52318aba1ba836210e8972c5b6a47ef978c24fc8848a";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+  version = "3.0b";
+};
+hyphen-portuguese = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "9d9ab3e616522ab9837bb7c7509127f998c442e96f96ee6b6fc0fdc9ac53fd03319d0c0ce28e23a35f1ae0ebb840cdeb19e8ab6444549c33059b28e7b307486e";
+  hasRunfiles = true;
+};
+hyphen-romanian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "124a93a633731dc1b3d6cbf2fc9b8489bf0737911a0c25ea44dbdfffa07c165ba5804dfd7e9cbe0be3b6eceb9fd6e95daefcae2356ee140f644416bbe1b13507";
+  hasRunfiles = true;
+};
+hyphen-romansh = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "a69d3881493c70cfd58e3d79ed76ce6f18bbcb43e1683f31270eafeb743b366a3c52c9945ff94db333e88ca18145263ba74002f5e78bb42d7aefa48c66af7955";
+  hasRunfiles = true;
+};
+hyphen-russian = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+    "ruhyphen"
+  ];
+  hasHyphens = true;
+  sha512.run = "f17852dffbb8f5c337b8316b92c2b0a60a318df491231047d9c0930d55d8b2be3274ec94d0d87085d53e06e89c585d47250f046300bf3890ce751f6f2052d348";
+  hasRunfiles = true;
+};
+hyphen-sanskrit = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "e84b6ca93e922c9c6edf03f4dbec1fae9eef2462379ef2fd0f3508a5048b54819c5ba12e0d76bafe1336666ca74ba95e27f63224fa048068bc515f3bc41f6eba";
+  sha512.doc = "95c6ae15687118ffc9019c8634347a602e6590b4a1d18bc060e57fe548a81f097070322975be1f62fa2685c5affff7f31b4854b0ec941bbcb9377ecf16986cea";
+  hasRunfiles = true;
+};
+hyphen-serbian = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "390aa9c116b6db7b362fc57aa0758a4c489c5fe33c718fb37675b17a9772a463ce532a2ace3e1ef90275b4afef5ea8d6cff71a7abe625d84e3f461c115306452";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0a";
+};
+hyphen-slovak = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "a0786980e0cda7029a72075023520acdc998b83226e85deb0b8186ee4293560321517d507f74fbe68f1d68a16cd8af67aae68baead9176f9cc687bcc7d0a72e1";
+  hasRunfiles = true;
+};
+hyphen-slovenian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "a605c9149ae452df8b2c25aa0f6bcdde53150e4485147a065f1f56c9740c3544c5c7f9c6049aea913916a62aabaf40777cf6f0f76a858e485c0bd09826a6ef5b";
+  hasRunfiles = true;
+};
+hyphen-spanish = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "d6783537ff44a326b83c2004afd63f5bdbd162fa4865138c2e6d34c9e6a103ac41dd7b382454646b09c74970f8e0d5827a5f4af617936f74fd300b2054a096d4";
+  sha512.doc = "263fd9480c5f225c7e36169b86e846baa64745b83c1072c9602e873f2e7cf8e63b07ab85b29e9d4263656faff58a39fe83e1eba34517b8ba34720f189c8e7f43";
+  sha512.source = "b1ceb7602a46ecab68fb767ffb154f0dea9626d81bf6c46dd43be328204f72141842c81efda9d7d51997ed25356746e345f7cd9f9ed88ac2f99746794becb75d";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "5.0";
+};
+hyphen-swedish = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "5f993ae6b22eadb87b6a1839bfa7d78a0dccc1107c5afbec8c248ed001018da38bb179e29f2430cffa90283221b20c5475346a8d5566edf16152266257f2a37d";
+  hasRunfiles = true;
+};
+hyphen-thai = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "8336eee03250859ab4328ad3c1fe437d2af688ef56b43be49c45838965ffe033befa84cdf600e9f48cdf60cbbfbff44450c830bd4c34556f680c5096ed3aecc4";
+  hasRunfiles = true;
+};
+hyphen-turkish = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "5c7023e01bf59af4d36bd451f51ae00c445711c7ecf109c9d835f1d689446d7b0b1b2627b7f9e84e4f4a8ceff52227ff280ac64481e1d29d538a30e093dace85";
+  sha512.source = "2aa80889b9657b03b6beb6510b6790fba13811b97abbac186eaf4d3f40212b41db0dd2d21583429820faad558b0415a09aa8254d2edd96812cf6396fb18ccf5c";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+hyphen-turkmen = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "c984bb7f09c5816c36a7a790f16df1750ee90f36e2130994ecd1db63f26afb650245985699a80da9b4d7004ad67106771d8c7b79262438369aee3f52fd8374cf";
+  sha512.source = "a496f681db0b4b85d82ec1dd60c057f63b6d1c1b52d391e7bee98d3d6e1fb596701c91f2ca400d0df13b96ec7a43d275646b7d2874fe1e4efc9d9b2b47f6cc5d";
+  hasRunfiles = true;
+};
+hyphen-ukrainian = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+    "ukrhyph"
+  ];
+  hasHyphens = true;
+  sha512.run = "05a9111b358c659159c6edfd38b9ce3d78febd794cc82968dc3e2acdc3612786304721fbd07f00f0a8278f4c2e46a1bfad821b5da45e60546d6acb5bf9068d08";
+  hasRunfiles = true;
+};
+hyphen-uppersorbian = {
+  revision = 58609;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "b2cb1bcd953ffabbd3f5acd8c72e9c60415fd300004de56ee446fc77d381aac1db65d613a2f591d3d0e45f2a12ff5340457ae3061b4c77de502923932383bdcb";
+  hasRunfiles = true;
+};
+hyphen-welsh = {
+  revision = 58652;
+  stripPrefix = 0;
+  deps = [
+    "hyph-utf8"
+    "hyphen-base"
+  ];
+  hasHyphens = true;
+  sha512.run = "12a23e0b9d00eb4381e3c97ecbb449faf5a73b755a17fc0301f1cbad5d0babb370aeec16dcdd316cefb56e142873abaa685288b1a1d3c7dcb76a07a9ef127ac6";
+  hasRunfiles = true;
+};
+hyphenat = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5af847cd55cc1b455b1928f6ba275054209ad5c9c2f81a7ae648d87eaa39353e842b2df4e91cf530909a46b4aa226228978d771b35e46b7e12f1a08a08faa181";
+  sha512.doc = "57f8a5d71763cac73635fddba75eb59faaaed01d47bcbb7ecc96b80fa5a926bb0091d3cd3448c6f53ad82cd44c9244ee631fb5b56141351b578cd899509eb323";
+  sha512.source = "781337dbca0ecf6155221b768ace1fec364bd1ddf29e3df36b2da64b6137a09996423466c8241cc5107c3eba056b4bf5c54572af77e781fe8e1e7f02264d9577";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3c";
+};
+hyphenex = {
+  revision = 57387;
+  stripPrefix = 0;
+  sha512.run = "77ad574e0786d7cd8e7d731fa7666a6a531b29a914759ecbb9b5d6e5f62e9ec9027aae7e3b9ffd62bd918bb0354c41e865779b044381bc1b7256528eddb34754";
+  sha512.source = "d93fbc4f3f1a711967f40bbb492e9f6497b7a91b90d42eab92f3815fd0d15b239286c96519acff2d6609be00809a86846ba2cea4bd94719a35aae024e5785a4c";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+hyplain = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f2968e8baf048329d8c78934770aa5d0a364ac7b3f77dc00a163e085e4fe45420c180acd05b281016aefdfa6523bed234e75ca07da0d133438798c1e51330d83";
+  sha512.doc = "cc64c35df85ba832f18f153d0f0cdc9f153ac4a9db0a175a1961a353f59ba585e19b6607e0c4cd1a832d921aa3451687427965cbef4fcb2a87488895e6643bb3";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+ibarra = {
+  revision = 66892;
+  stripPrefix = 0;
+  sha512.run = "7de51f4d206481dadbd4409a0c98dafb36a415e75053b78f40349edfd8b122e9449e749967eada07507ada1f6f22658c02b0a4993e39c2b0e97334076072d6a8";
+  sha512.doc = "318a4bb5d2fd012c783053f457023604d53cdb2b02739ef8a1780f1856d5a63713774568cfa7a230f8ca1eb4711fa65f99d5a99b5c4e9235fb1b449751bc50b0";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+ibrackets = {
+  revision = 67736;
+  stripPrefix = 0;
+  sha512.run = "fee99798386a5a6b9b8ff2ae9d2eecc5f4dc835b825795400777780f567ade13d789e81de3e841a54653226098ec602fa91839ec86f25ac0ce2033b31508b4e6";
+  sha512.doc = "1d6bd5b4a22a44f03006c1fee3d94ad2760042ac98835d1ab043905595f435b583ba2b65fb6f0f881234085f028f492a283a5593d9a8316eec6fab541fc3c6a6";
+  sha512.source = "766f93cb337190246b6a446407c8ed75b1ff35edf61cae443798d1f049639bf277951d59b5d8ee7f953be848f81a74b991856d328910e9237206f47a1b4a3a1d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+ibycus-babel = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "30f810bd70555df4f05fbc0b073456c030a0768372bd3c681921f41fc31bfbe0570a39e474ab26aeeacb142622154e5cab3714412b09f89d1260fae8b60e817a";
+  sha512.doc = "f09dfd00f35f653defd756b72437dd712ed1ffceb05beeadfb34c1c5163559ee7c0ae6ce0420f57b722e93080248cbcfd678d811f1383fa5fa1ab76db52a060b";
+  sha512.source = "13e3ad11b56a70d7752209feaa9437bda4979c40a25597114bfc5b4e26a889c623aa7266959a212de6b7e74ebe75fb38b36767fa95f692adae027e5d025a4702";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+ibygrk = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "89002af0024ec804ebffcc45f3a33337ffdb66f71e1ca70224b0936388892dadf99605a8ca3f59a2b879e76e24acc91b1da92622d602f49b236aecb8aafe64b9";
+  sha512.doc = "9dd3bd7a8ef3267965f30048e4a71314b6a9813cb400b7a94dfe285606d7554cde80aa429603d0fb1f587935e193e5ece5ed67870fc4e0c66eb5152c392a9cdc";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "4.5";
+};
+icite = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "23f4f25a72f77cca2585bd390ad1828e04a70b73fba0a86f0622e29b6bfee596a9a3172a8e8b2531c3bac60f8e4d840301d200ff4a4ec20d5332de62766020a3";
+  sha512.doc = "a84ba9a33de8ceffb8c92b0555daa1a39fb822a272af2192513ce0c03ffd7c97a413a5916f3f5745a1b36b8e5aafdb081ee301d613d645e66e0f2ba2b7484a0c";
+  sha512.source = "227acf7dd54f4ae1e23c753bc9c8a0ad82e275eac2d406cf6147d986d5e93ba2483cb7f9abe3e31d347218d853e6a8bcd4d015b7b9b3afeab901a1a40461924a";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "cc-by-sa-40" ];
+  version = "1.3a";
+};
+icsv = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e865708ef636c7c917cc9a870eaba4b8c0249acba01bd2cd3fbfc9d95672405db133bbf0faf9f2d299bc4024118b80b4354ecb8216427507f66817cac085e01b";
+  sha512.doc = "dd06bf5d8a087bcb20c63a61cb9867bda3df35e8adf30a3d4ca69ab149772d46e3b83f168a8fc1c597aa2536a14b98561f42226a59b6663f58de4e338f9b4e82";
+  sha512.source = "9ee3fecec68c7719a39d83860e8efaca3f5daafd82b9ed06af9ac38ffa3659d03f7ecec5407d568ec5f071c22c0cb33166449b64757be7b740943472d9ca1941";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+identkey = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "3f41af7a6b1f253dd34c670c3726f9b5fba2849230787827f69dfffd7008ec7bdf8bf84d11e7151b9e0a47b486f60ed2e475f30ed3f6cf35d68e283ff6a9c558";
+  sha512.doc = "58574d462eee30612617c9340e00e956968f04b8da292babced36016516272e4d190f06862c9bc41466c85ced264f380192c4e9376c4b0ed58e673f37efd3cd0";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "0.1.0";
+};
+idxcmds = {
+  revision = 54554;
+  stripPrefix = 0;
+  sha512.run = "ba1737eac5f6985ab4a0bb25aece07fd0668533ba046d9f980e4c4ba4862c9045e19c06a477e498df027fc0cc2af5503683389377287d58ae89690c58b5f6683";
+  sha512.doc = "1894abf19f05ea74aad0ac1fed2409478dac130a019a44d6bf2c909cb1de66e4c9ec543c75db6d9238982f51af066a4287bd8827f89a59d3d9ba6d3f79aed4cf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2c";
+};
+idxlayout = {
+  revision = 25821;
+  stripPrefix = 0;
+  sha512.run = "968d869a0b635b14ce8ce85e710c987ecd8ea2efb97a03314098014366ece450b4566d626031e11b52d7ede53a019665640fc1626dd1e24651275b35a8f2cac6";
+  sha512.doc = "469a20893247406856f15dad6b14050e221299dc2adc40f1547361d74d3f7ce90ba6eabde06402bdbe22c845119df4bbfa8b999931e99c1b944b165f3b245892";
+  sha512.source = "a2fac68e0c6c0f2cc0c9472d9d58882c337f519caa3b2bb088a330bda4f65b43a1acbbdf936e4975f3c628ce1f5a45f58def28cb129a0708a0b4168cbcdcac0a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4d";
+};
+ieeeconf = {
+  revision = 59665;
+  stripPrefix = 0;
+  sha512.run = "1a0bf2fe8e019b55ac1ed72a9d428c3e90653183918f2c1ff22e9ea468cb3b3fea424fa3de2a46b9534086138f1130105672ac217ba7172354c51bbf384ba20d";
+  sha512.doc = "a0133638d4da1822c2cc7c41052fc69d71feb89bfe0351594343166cdb217a62cb849d2a355bbaa3a12e38882ca76c94740f9f4711b42280c81a58bcc9fd17f2";
+  sha512.source = "9badadaad5c47d067054176f8c979b4472ff57db1746ec2f2adbbb39fd75856d2145e120de78e51388d064765a018a06a71bcf75f078f3a4a958754c6f565c5d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+ieeepes = {
+  revision = 17359;
+  stripPrefix = 0;
+  sha512.run = "60ae4ff80be5c2b02e2ebeea5954ed61b73dbc085a4d282004796d9be6038cc7c8020b7c81226d7dc7b121683e4196e461c7c3d101bb460eb8c39bf2da179bb2";
+  sha512.doc = "ae2413800f1bd4c0467321a7332fac15a8010e31ba7a4effc0fdb44e9e7a0001ba62d6acb44a72eb6f996560ddf96231b7355c4b9ad8b816be102a143b7c8011";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.0";
+};
+ieeetran = {
+  revision = 59672;
+  stripPrefix = 0;
+  sha512.run = "d688e4be2d145652c16b028cccd05ec5f41a94ca190caff0c6b3fbadaa5c859516a28e4555569d072dd1d550c8794c1ddaaefecce49945284dd304938360f419";
+  sha512.doc = "241119c6d2848d5f63e2afe8f1e07c263fea526c9c7ef21ecc533f27c92a67b1baf9a33122fed6ff491b2ddaddb0e02ce138164c8b9ff2f5db11d1ff802f73b8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8b";
+};
+ieejtran = {
+  revision = 65641;
+  stripPrefix = 0;
+  sha512.run = "16dde97354dd4c4ff2bfbbb9ead8ce7141a253afe2ec5b39cebe3239d40827d73c83ae90e79be77c5e5a799b40dcf5a3074f2659feb5add8b62d4491097a6cf1";
+  sha512.doc = "41ffd8978d9a591c4aa711c4b2f1dc73a4d18a39e67003494c4c9a86d5fd24acf40b6c79dcc139cb46a36dda96d1e0a26a7d5336683c3d7d11eb6e46765c03e9";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.19";
+};
+ietfbibs = {
+  revision = 41332;
+  stripPrefix = 0;
+  sha512.run = "ad8796bf4e492072dcc9335f913ae2b5d81f2152289ca76cfbb61a63577c631bc38f5cad6860aef47b1fb54c02157f509c23c3f903b34b8e7a82b8604eaa449a";
+  sha512.doc = "586dc66004dcf4abed254d223394badd45557d79c7e1b56bd20080f41185ea8dca28b3d501e708cc3ed4088f1368f153ba2d2af313d5d6add2d072b46954952f";
+  license = [ "mit" ];
+  version = "1.0.0";
+};
+iexec = {
+  revision = 69230;
+  stripPrefix = 0;
+  deps = [
+    "xkeyval"
+  ];
+  sha512.run = "21da64806f48487ec6756ec48aff60eca9406e94177419398af3970fd3638062a06d1da12655551889ce64cdca9ddaed7a8953eff35b23b6f005358586df9eac";
+  sha512.doc = "ff9c90d8a14d72ab3f03cdbe177dfc58ac8cd2fb217bd2a827ff9d14716afc95d35a647b6fc1bef77a1268175f64edab81cfd8d54b35a4a332543c3950beeea2";
+  sha512.source = "deccfbf6b069d9a4542944fe229a01ab85c845d3c84e38daa1c11c86d3dc0db4ace5e3c45497873323ba7c3033870c3bcb2de16ae3f7873ff738247e51b99af9";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.13.0";
+};
+ifallfalse = {
+  revision = 60027;
+  stripPrefix = 0;
+  sha512.run = "2117368f9114bfe20c7fcd387c47d27d59cb2af720eb6c55f2a8254067e2dbf7be21b9081a244367d46d5deae8150f915b17431296b02de486f4147e5ade9b87";
+  sha512.doc = "c952a3f591c77df2b2443352783606e57ccc35d45769d1e7892b12399de5253af174a739c7283a28463536394430d0582852abb677fd87015bada501b0bde95e";
+  sha512.source = "3070c2a5beefc8ce8b29f8216a66b5636aa71f6f68aee9734eba78e487110efa67a405ed4b87d4a550bd3fe45df3a8f3da10ae717d0c31cd98bb2465bb903bb9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.0";
+};
+iffont = {
+  revision = 38823;
+  stripPrefix = 0;
+  sha512.run = "a2a329da661f003edac0e0bc701958e0744864f8693ffccce7f1ea6867eaabe7d71b38a1dbef8bc27f770e8b4c30a4480ede1dd575d26860095575020db987f6";
+  sha512.doc = "95a8f7357f095dc39ff642edeb6d7df206c37ef01c14a1daa280939d44047c5a935eb18049c280ce00238ad4fdfef6abe7399dd8c6fc815b7c70b22072465453";
+  sha512.source = "2a12158850d95a2008e5a845914293cc9aae54dedd54e4a13a27899b0bb8c272e43bba374447b34913f7b4aae01aff9b9fee981240bed93f8995dfc53eefd2e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+ifmslide = {
+  revision = 20727;
+  stripPrefix = 0;
+  sha512.run = "c9027b8bb34f15e667e530a8b8d57b793ed16a7ea33feabe58f22cd71230945905054e01853561f4cbaf5fe22f4aa140cbc95072f375d567f57bcce3c4d07d09";
+  sha512.doc = "4e7a64773cc1a14df0d2f58ae0b66d1769b44958bafa8fdd4e51bc294555e7895632b741b47edbc29fc5f5ac0ddd73dddcc16723a7297c12311d3915e88f633d";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.47";
+};
+ifmtarg = {
+  revision = 47544;
+  stripPrefix = 0;
+  sha512.run = "b04aebac5acfe90a149f417cdf0d45b3a7cbe53d53d4d9f39d5badddfcb894e07f397933199bca702f3f0e66458133ba17feb5ace2ebda4a25bb24bf1af5d259";
+  sha512.doc = "8f456c15ecd5090d2124a85b02c1ad100dc999064b258678cad3c444acae3e88b95e38f7ad1785bfc91f385d6bc1664c0b58282d5ef36e6cff9857b81176ab7b";
+  sha512.source = "e30806ba6fa85737f67dbfbf7cc1556781bd4cb2179672e5b9980e7f625366d5627c69411dae34a9e1c0fc29c16acaf302c344d9d93b9dd4afdf23bea020cc63";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2b";
+};
+ifnextok = {
+  revision = 23379;
+  stripPrefix = 0;
+  sha512.run = "a56c703e1830fa64432d1b3aa72d3dff52b17c0e5b90b2cb34f7dff974e51331f5d9daa2b5aba578a8bc4a73b693c9a3dd811c6d7e32379165cc7ec1349c541b";
+  sha512.doc = "1eeb8d7627ad8887761e66704a8f3c848b633a4f3a5b094626b3c64888e6db95c25b8dbad4332887a6d9e866e4aada2816b7c7e7fd19c07dba03db38842886fe";
+  sha512.source = "05422af6ee53e12ad124b314388811490304c5f42b81b17aa899e7cea5c548395043abf4abfd0d4819e6338b6d93e99c57929d18312f49500f0368038e440495";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+ifoddpage = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "2a750da3db6bcc2c08f4240874d57c4aee1df4fa42e695156ad08ea5c1e187061c8071f621d3cae9365f28853c44e53a94d7702ccb4972656d096ed4d1272524";
+  sha512.doc = "924f08c94634f1149f8873c626c4b73cbbd2a6fba0ed28f1199b6688fd8940720643ba672d781b28f6802c1fc5dfed5928784a70436d492f4bc51c6d43006119";
+  sha512.source = "1a77f0234475293f72afad4b2db4e5b861236b30a80172460be7a4bf0b734a4a06a2f69018415b80bba11bd68bf4a36a953eaccaf11efc93698f1f779f80f071";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+ifplatform = {
+  revision = 45533;
+  stripPrefix = 0;
+  sha512.run = "952f87877c058c1e8ba3df227ed7332501e7861bdfd2a29878dc4b14e6b95a1b116459bef7f65c5bf277c95d08120c7e9fa9576a7654739e4a26125ca4d5c724";
+  sha512.doc = "520004cfa412c2a24ece0e00b11d457405e71a446e554a1d930e60ea7dbd00f61b2b6a7ecbe89b62610316fd3b6fad685d7013042fa71fd7fb270b40748dee56";
+  sha512.source = "a3c33b16decd5fb443d9b5bb13f3a5e0ed56705d353b0260772d81f963460ff7e914fb1d7f4ee24e249bf15af77368ddc6fea49014202389baaf035f2165e17f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4a";
+};
+ifptex = {
+  revision = 66803;
+  stripPrefix = 0;
+  sha512.run = "9b0588af312fc3627687703f030f40ae421d9949d696891e9a60aca3c7582f0a534099685e8b8d5535df0d2f9dcd452f4219092d70c285d0fa65af6d140b7afa";
+  sha512.doc = "a65a583b033509fc0a41fb65c6ec17357c0e095cf09d6f5d2b9b1f8e5fa323f368cd381941e8850bc1fe81a213dd2bbcc3d9877c08d50a5a78efedca05a7897e";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.2c";
+};
+ifsym = {
+  revision = 24868;
+  stripPrefix = 0;
+  sha512.run = "ef6615a3768f87009d22c3feeaa074a0589b17efc8585a509e21692195a100e5b11e2d0849fa2eaf8f80cbe0d96ea12e773aee0be28e7120ee80a86dcfa6f8e2";
+  sha512.doc = "10dca0c00a52d9d9775bd2ae35b50d7d56294da9b8eb21f2bc35f7863cbf1ab357cf8f3e1d949570ebf4908a60d9ccfe604e69fe779780c8e7527172f3f0e999";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+iftex = {
+  revision = 61910;
+  stripPrefix = 0;
+  sha512.run = "ac7958c10c0cd5ee3a82273632445423c347bc9c5fc2015b97fdb7018d7a07b7e1316761698973b325314e945fba6c86be0dd49e058ecf74a55ccf2b9df8774f";
+  sha512.doc = "d51b452532fcffce4b1078ab26396bc4f8739e2c3025917b4ce88af2e5aecfbe0a54e481f1683afe2d25259c6f73e27be8f257beb1b599f9817dc37df427fd70";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0f";
+};
+ifthenx = {
+  revision = 25819;
+  stripPrefix = 0;
+  sha512.run = "76235d3f8dc4e62604828beaf87327d11d4a9ff69061edf1a3ed4c874983251fba75d80973e54fb3daa2d160b27000089f4cdf1c29748124825fb4075b6f7148";
+  sha512.doc = "efc4fa3b5d6e91d1d5af27846bf2652672a233537810051b2858c1c4ffacafb9771b2c3a222cea4d490e0478eef96b205c4043f4957b876b7f4d57903b26454d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1a";
+};
+ifxptex = {
+  revision = 46153;
+  stripPrefix = 0;
+  sha512.run = "7bc52847fe21879614ffe673ebec74c735c70e07d63649def00f70d22db80faa920f0764f76c5094ef982abbff8202ca55410ee92d033c45ec43fd25adabb23b";
+  sha512.doc = "1bc4feaacbdd33ba6f46c699969638cdc8a4b962287332476d0d163a10141136f9b913027ccc3418033dee0862d5e572957dbe07d47371c1d932103958151e27";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+  version = "0.2";
+};
+iitem = {
+  revision = 29613;
+  stripPrefix = 0;
+  sha512.run = "b2b37e68db2b33e414ecbfb9078b60ce5571b7ae931ca828a3c668ea7cccd7b93a2919cadc7723daa3f63a7015939a8046973ade140fba01025dde0d5212edd0";
+  sha512.doc = "f9f001123e1f49bd90cb3b24448e423068565c9256129e23126791e2ea2bc39788ff5769939d90018087beb1b31fbf3568c6d4962f2e92205717c84aeee54a21";
+  sha512.source = "e24eb4a7a6a635b95b6a1b40d27651eccf86a6c5276aad3ca46cfde08185371fdb34ac2732d87750db74605c14e087d2102399e23ad85a236a68dd5987784c0f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+ijmart = {
+  revision = 30958;
+  stripPrefix = 0;
+  sha512.run = "a1fc1aca9f557ea9c8c70343ad1e5712a846b8a7edddf2077e78fabc3919b928a5d7e8b1fee0f0bc29ebf7887e26dcda5bd95f2ba613051e52f13f1ee24001d3";
+  sha512.doc = "502aebf377c8b13d7699761651cfd67e1e2d10a8e8a022303921aa1e708fe913b217e186b4e2527d8ed81e3db6ff055dba5edbea218d6b9a92f679da66fefe97";
+  sha512.source = "e42bfa6ded16f78b764d1ca55e905ae0b2c0a5611b8ffb2e882f121d04855b5f72bf925002bc322cc1106f68c7c68ebb412acc71789d560fbca12051a75860e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+ijqc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "55f7693a820f0cdaafe8697ad352cef2748471711113cfa4738931926cb4d49497f4e825b0a737c233541203cb5c8f23dc4f8326950520e8aa0f4ad27f353347";
+  sha512.doc = "6b94eb95d58a06b54a1fb28b26ddec15528ae99286a37631a64b4ced32343872a04b96cb2de540d54c54f02361981ecc575ef7d014a17e1d0111883e92671fad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+ijsra = {
+  revision = 44886;
+  stripPrefix = 0;
+  sha512.run = "9d5db4217675af4577fbf9b7e8a5dc4a42f447e7af60a818d740327326d478afa9071be37c80315b0822fec48d1fefe4e3d6a8dfddb6f34fbc11cd81a5d05a12";
+  sha512.doc = "a3424b8ed16d1881c5a2c4d80a42277a1c0e3a62484a0d5ee6a18a9ed9fd39fe0de241fefbc723960bfee331908bb5c95a0b1b95ecf5e06d6425ac8e6c2dc342";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+imac = {
+  revision = 17347;
+  stripPrefix = 0;
+  sha512.run = "5e51d080e18f2a5d9529705d0e8745a8c7b2d0186c929e04434b71ed356df3ee2456c268ce2232da9cdbf6c15182f6580b2b96995a6c48e40fcff1efb001cef9";
+  sha512.doc = "df4232356db6e2001277bdd8de706549d2f91b2d59d4a55f39c4aa9628e1a2b6ce092a7630ed4fc20096d069d19f2ecdf445129a870ca8bfc9d87e522350798c";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+image-gallery = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0435d5011bdaac97c6f36202a03cbe52cb45f83d7dcf37111b9c68706e4cc971b5b13ab5fe0b29cb296f7af4b217a64b5507ea00dfe63e8496e10b5adefeed8b";
+  sha512.doc = "ae9c965bcaeaae17b8a815bac824093a5834f2b96c99bf44527d915ae251cf1dc818279f78d3cbe75e51875e658d47baa3b9657e27f5121ed4e259ae5cc052b9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0j";
+};
+imakeidx = {
+  revision = 42287;
+  stripPrefix = 0;
+  sha512.run = "6ca0680f29daf88dfbd26fa87d47a65c8b2c2d534321b814ff78d77d0b97d7fc5654b4dc0b91d12eb0c9373cfaff5fac59f24def8d0f50d97da34fda6f839d84";
+  sha512.doc = "a07d9461013045274f03145e97d286d930055c4573e917a78e8913841cae30fb61b99e66d098b4ba014cf44e92982301c7d72414e3ce1df176bfd35ecd26ddf0";
+  sha512.source = "f3fd8e1a5057cbbfea56a0d21f16bb310fb815ad7363e284083f2c313ac055b1b335fc1c43bbddd1b1beae64ec42e29bb4a194056be658cfd3ee24e49d5e5804";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3e";
+};
+imfellenglish = {
+  revision = 64568;
+  stripPrefix = 0;
+  sha512.run = "59c575a0c08ea995ebdf871c627734e47d48de927f3176f7ebfe54fc9f73d0a026159ac75e5673b180ac3cd5b8af9bc59aecc9879ee1a30084609c3d5828ede9";
+  sha512.doc = "ca9e465e985ad5568713c5cd79f4b6d8b0474ecff9e35356bb2c88cbd6e71e451c44cd9e407bf0e8b15b4267d44bfce2a64fcc052a7f4be662b560695c34a865";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+};
+impatient = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "8c606388baf92ebfd113a2e7332c479f1428f4c9b2c5b27f04d9504be29ad20e38b3b538366c2feb78a43998460d362156e9abf8fdb3f8457ff4c8452aeb2141";
+  sha512.doc = "7b0811a691b9ff35fe245df7929164420f2155b4797d372988c7cb7f6052291c5735fdf44a0cd3f7a956be9dec424b5b59385b3f147f39b5beab7b56d1eeae1a";
+  license = [ "fdl13Only" ];
+  version = "2020";
+};
+impatient-cn = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "e75363bb36568ec42f13217dc740b839e109529e41ac9cc713e8c7eb620e557dcc08d20f36cbdb5f0e3145d9201d659fc8478d40fae4862fefd3eec005a3463b";
+  sha512.doc = "ea0918afe1c785d864bc280a6b64a87cc62cabb02540cdf64a7cbf4b8f81afcef9ac85a6f28b5bdbb42a75b6ce1e12139c12d0e1af4183a28115f8d740c6e78e";
+  license = [ "fdl13Only" ];
+  version = "2020";
+};
+impatient-fr = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "f6a9a69ded33199fcd46d518fe8ed7dca48677c78fac5f90cdbbed2290558c4a9d7c9b0721c188023384acc97ad95df29565b06abc16fa33deb04490ca50b4ac";
+  sha512.doc = "963a379e3fbf422f4f4d53a41d6bd074fd077360908eb0db1db0a50699e12f37dc6b3ec8b42812604de4ea444ecb38cbfc81d3445cd67626a65fa9b520fb8550";
+  license = [ "fdl13Only" ];
+  version = "2020";
+};
+impnattypo = {
+  revision = 50227;
+  stripPrefix = 0;
+  sha512.run = "7afd6cf1fc2738bda4f390fe7f2f9d5e1bdd33c2e6bd32b4dda5b232005589f38436813d9e5effb6feae6371896be453b608ed61c64b9bf38fd25ec400c4b101";
+  sha512.doc = "086b106a965e0f469cbf3560561da7d84e4151d5430d42d87c2c52568243305e20a1bc99ec4b252237f4c61369127683ff7b629013af8c76e9dc8ea6e551e24c";
+  sha512.source = "5bf181ff35a90a1d5c7656f7ae9778305088035370cec3542fa451b055cdad6d3b1ac1cf830fb7ab7ba3d4d89ce7b96a1112575f924fb13f24b1a90fc84e24a9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+import = {
+  revision = 54683;
+  stripPrefix = 0;
+  sha512.run = "96a92584b4ff4a4bd3b345b446f2802e34d59ebf8c14469a5b5331e6d2f92b63f42d8f5799bdcefc9ae3f74e5e6f93aad7d5371dbe7d21e84ced3890a76c7a19";
+  sha512.doc = "967d456dd18c8838db7d2ed64016fa0f77f2ed475e5cbe36389414849786d7e7850ea43e8bb00d8aa06e3ba06f62970a6525ee1b5a5109f8cbc77a0baf894b50";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "6.2";
+};
+imsproc = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "12ce0d8ccdcd54890f846b501cc5cf7af00f7759c916147c676358b689b852a86a1981b76a14e455a4edece20ad1857100123f91469dfb23ba168177e15fcafc";
+  sha512.doc = "a4007fe80cca88525dcade8d8201fb82a2c35cafd7bf92a8ebe6b4668ddce6bd43e958e1223d5c212e91ca692df39aae84c4a25b6862afa3aed2f1f646eabba1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+imtekda = {
+  revision = 17667;
+  stripPrefix = 0;
+  sha512.run = "ae95a9d52ed07e962a9d98cdcad868a9d2dc6e1eee82c38fceda7f7668934caab5062727e75ee3b1824ec60ad112f15541c9519fd494fa8199caaf0e83906484";
+  sha512.doc = "6f854d85a7649b49b3c88d99f1f011df514b39064e2c340ae1e807de3e730a46a432afe178574105a414bbd46ae0509b9e88d6c0ff825e74dd55772ed189427f";
+  sha512.source = "c4285c9099d8a2582570d0d7df327e6f693825a63c7dbbd6626361d9ceea83a039425b295e17de133fe51e43a23ada74e5fa83d0995fd4a6528eceaad2f59461";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+incgraph = {
+  revision = 60810;
+  stripPrefix = 0;
+  sha512.run = "06c7228e1ef4d760f6d7b1d308d4946eef7a55a60ff39bba6bdc6a96407cb6fab9f47dfd2c26f37d4f674d815e0ab7196badf2590638e214c980d26343a6bd55";
+  sha512.doc = "3e37591fd1c239d2feb262434a5782be0160104392f6b6c2f330aa30d8e8af5905694a125d29045b403239d67952bb88d1194a1d1e61194e82426405fa11c772";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+includernw = {
+  revision = 47557;
+  stripPrefix = 0;
+  sha512.run = "a2b43d658ed62ff3a301a1b190cc46f04a4a46f413ed4af3e0f84f1873efc6841cd23fc07d68a90cca50b6ed00ccf654aef9dcb6a8b4863277b06c7e8c666e6b";
+  sha512.doc = "8ebde646868cebadd8d50cfca25cd8d924c0112129ea86b0ca3ae5b9f9f4e4fec3c1e464486ec0f92e5cf7b7fe3df1fceb1a7967bfec755c57645e6909705c0b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.0";
+};
+inconsolata = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "3b33a1627083b50019e0c66ad49319d3ae699943f217daa21f57b19dd2733d29c6f1e9fbaddc1e3e39ea96623581b1d6a388f1a0009e84e4c3f381887b05d4c7";
+  sha512.doc = "9139f7769536398c2822c41fe1fd0850a81fb54d70524904b266c8e231c95e344e27468187f474d51a9ab8c4028d6e5f9cc4513d1b38e306b739a1572c387e88";
+  hasRunfiles = true;
+  license = [ "ofl" "asl20" "lppl13c" ];
+  version = "1.121";
+};
+inconsolata-nerd-font = {
+  revision = 69061;
+  stripPrefix = 0;
+  sha512.run = "dc202282d55ad63ffbf39fe7b36edbe42391fefd1c1cb0fe2410d01c562fe8024ac007ba235999c5e369a0d80763fdf80815d2beeb7dadba0f39d027fea507f7";
+  sha512.doc = "00fa8ab8a508a3bac281ab2d7f63fbabfb6958770d308184e0fda7924383dc22a3b36d5f4dff701cda63e847cca819d38b45a0d51f634e1f503d5964fa60d9e5";
+  sha512.source = "867f875d6b1211fbc8d223df7f00030d28ed13336c639f83251fc3b930e75f61d12daf93cf46943a9b2a3db883cd2e9c8b759f19f85562fb589ffbe2f01ea344";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.4";
+};
+index = {
+  revision = 24099;
+  stripPrefix = 0;
+  sha512.run = "2b9bed00e12b5aa7b1813be766ba7c2e1eb750dc270e9eb585b1cc3d559a3f0c9094919344aaaa51cb6cf7cc132a5f89f8c07c96a12c5b1a5446524d07f4121e";
+  sha512.doc = "0e68aca1c5dda444aa42cb1883821f2003c450291191b2eef16169f3f76e03e5ec9d31577574afd8d3b10237309be303538ccd1d4c8edb9757e7c910da7c5f51";
+  sha512.source = "fc9e646c54415a14e41f1adf9894e723ea8d25e1d151b56fe40e5dd437a4659535b11eccbe9e2b6077d01a7a83b044c2d1d2b9aa1b08243d82b5a37a70641c11";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "4.1beta";
+};
+indextools = {
+  revision = 68555;
+  stripPrefix = 0;
+  sha512.run = "decb4d3e7a2504f0f08f5e907eabcd961d1900cfce98e79cf8d7745868564eace7f3fd1217de69d615f9267630c71f9289a0519dd9f3b8603be6544ce6d1cad9";
+  sha512.doc = "d2b1ed9f2d79bab4dc9b69b09eafc3657c2f60002d53703ec01e7cfdd29e8e9ad4027fa46563d50ea89bc2e63fa7b6c71ce2e37caa5e37838b6cde2f99ed97d3";
+  sha512.source = "2d4d637e3cd9e6dba00104c0ae58021211cf8b10d8d44bcb9c3d9af1d0680e4539187947f6c685acb8ec194e8e60c447e6dbd02cdb6b8915c8abaaf8b991b39b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7.0";
+};
+infwarerr = {
+  revision = 53023;
+  stripPrefix = 0;
+  sha512.run = "a41fd6f2ee199e460950fdd31484be7e949a5e36ca740daaf3a1ffa01103d865f573c8ffe0859a8629456786cabf2f1751dbd828cb5d26356b1973960c854261";
+  sha512.doc = "2830f622e2ea8e5b3427a9d924dd5f45f0c63a8a6de82e261102ca2c3f3afd7b781a7e0d50903dc8d8c1bee0674503f3ab935fe81dd9490d4310650097c4ffa6";
+  sha512.source = "ccc6e1f7a63c10fed449c390b2283ac44b94c33a453f1146658082c888723ad8223bea01b71545d7f57f89fb8c8373f1a8329aab7255b7d17fd36853456cfbe9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+initials = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "442ffe7585c725c62cf9edf86bccabfcc0406b7517f145567c952ff0de65dae94158f586a1c0081afc5fe3320494750ddc6f455c78ba96e91f409bb0f5905d8a";
+  sha512.doc = "c8e837291eb7dced1d4bc4d94e7e6bc042ebeb5c561ad3688a491f451991f122896d7df01040575ac6fd705d3ad55350e12afc986dd619c4303ba2919f64dc6d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+inkpaper = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "d07bd9d2f32981607f4baf3bc348fdd99aae0c331423bf1f678231a2ab9830e4a824357df067e52643e6c89ecd1b850afb2444686fa33d75e6a3e598b003553b";
+  sha512.doc = "acc6ffc291db3164d8428a50ee0792907435b90d3677a0e9ec883e0d3b81b6c04785a08217bd6c9554545eb5bc328a702c2958301245bcce68949ce76726c389";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.0";
+};
+inline-images = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "8cb6a0ba51ddbc06a795dc21c40ca4f18921fa978cf17254aed279e85e769b29e7dd6a0266738e5f52e22bfed87599e6b2099bb04aa656397f04d6d51722c56d";
+  sha512.doc = "ce56e90e90da8ed441213eaedaee7bc388714248547524701ad49021899ef439ae78884ad1de6e60cd06b5916649403d75ea7fda051fd3b87e89bfead9ccdf10";
+  hasRunfiles = true;
+  license = [ "lgpl3" ];
+  version = "1.0";
+};
+inlinebib = {
+  revision = 22018;
+  stripPrefix = 0;
+  sha512.run = "42e158a9ff10dc165345bd08b18fc0f90b463482fbb824872289edf93269b36b04faaf35cd12538e83ef1e509b7400ee61e604c5849922106368624c6c20f507";
+  sha512.doc = "2a00d2f51daca68362b5243d8cc485bff6f64fbb9156d1a221d75dc5eec001c3377e6d67afe5d6384ba3f7504eafd65919f5afca8e1170f8b584eb101c947faf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+inlinedef = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b98b83ff26b5ecc9826f111d9faef5aa0f51ebcec7978881da2a61287af7aee022dc1b7812ee457885c7813eee0d2200d250ef45648619f3d105e2df54cd21d0";
+  sha512.doc = "6bf73914a9eff5d774ca7b7e37a859b0e7da3d408bae603b74c9f76e379ff6d3558d7e30ee4a246bf3f7d40f18446fc78299edf4eda0228e2f22e47ad09ea024";
+  sha512.source = "ccac53e2ce8ad0fcfadfedeca45d136ba94bd51d46fb4b860269f2efb7c0996823d32ee1935a0dad79ebe69c9794e2882e6dabca0c5751b3e8b25e5329623953";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+inlinelabel = {
+  revision = 63853;
+  stripPrefix = 0;
+  sha512.run = "66d105c71bd5896019ec584a4ca0a26fadadd8d922be95ec7c8e0ee8f9b5a265304359a19ad77036e8bc885ec0e786e03ee8e1edb72addd1adb5d064eb40ab08";
+  sha512.doc = "0d70c8f7d7b9f022444c95657b3ecef395790ca80697511e8ebcef975ae19edbfc43abb223bed03888943203e870e8732cfb37f2f07e0e4e2575b8e2d495f8ce";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.2.1";
+};
+innerscript = {
+  revision = 68776;
+  stripPrefix = 0;
+  sha512.run = "7b647763f5a535f45a7741c3264fb59e2223837a9c99617aab870b624122783e25d1ce2f48e14fa5c1f01b660e5372eefbad3df51c52cb414ba675b8bea18e51";
+  sha512.doc = "406d30155e73e13eb51967e3902e1fd2d76a92aa29323306a8769f9b4900323d288d1620a2a85ff76062e1a7b610bdddc06b113e15cd1479cbcb1bbb25b4c79a";
+  sha512.source = "caf662052e89c10a1f6da8f671aa3e30eb4738a68b095146339f9c0cd95cfdeaebee30869b5c7c92bcff6ebfbfe526ad6ab032d26bae93e671707dbcf3835218";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+inputenx = {
+  revision = 52986;
+  stripPrefix = 0;
+  sha512.run = "5550c1d76a0906f47ac3e2303fc57ef9ad1c8442e12e3522826dbe7fa8c971c7ca4241e0a1707f6e10336855eded20e94130a6db212b787383282326aee8886b";
+  sha512.doc = "087bca2b38a73530b19dba7343cc488b39ab505ce00b4c622f56f9d40c448e6349052e12358cc8fe6d8db7039c6af4f06910784795a2cb1e69b85eed423d1314";
+  sha512.source = "a633d0ba777e0342fe99d1ee8d9c955fe159c4a881f31c46fa205078c3b1786edc2025f58ac88b7dccce0c6bed50e8f44025ebd43b28871db953a34e54b3aad7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.12";
+};
+inputnormalization = {
+  revision = 59850;
+  stripPrefix = 0;
+  sha512.run = "ea1b93d71757875867fb9d899399ad5cf95d2a0560b3caf2569d08480f4d65dcf4a963632dd27b1e28674a9b5c6496f769c17ae08494a6c37ca2d0e6a8fd8f04";
+  sha512.doc = "ade22bfe8534389f117f0f99dfefd7e27f84ad653419929ab86ab045ff08c1d08952178c6c8d42b3b22d575e371ad4b77c2efda436e4b8ff89dad2bcb67c7d65";
+  sha512.source = "048bcdc198cb028863f2f3f30366ab209f18fa2d3f76cf42ebd795cf34d92734e617fdd7412c3f5e43127a4853f1f2b3fe928c8cd554b5e5fde430b5c9170d47";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+inputtrc = {
+  revision = 28019;
+  stripPrefix = 0;
+  sha512.run = "e6450fbeb0f9033b0bcc586c34f5bb8e9c3a6aae102c15912be315d14fe883b8bea62a59a4a65d0ebbfa9cebcc518b9dedf59297f026423ef14aed2c0a2004ab";
+  sha512.doc = "4fe7894ee87bcb81566d1838f52c02902d8f5668662fdc016005e9a44b31f35eef8831143cdf5321717ee590ed14fc6c35305f584a0b63254549f96149ae2a50";
+  sha512.source = "942d536481750f2272cf8b1420e13703d16231a0998b90c7f3335d4aa6dbd0cf1ff3b6ce072970b182fffdf14614422cc794798632ecc5ff41dfffb18c836398";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+inriafonts = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "9c960dca72d433a5ee20b2afe843b92fa98060e67638676a8e92ce9c7dde872be4bfdda6be7a76ea90db97e51784db4487ce22c79cd110ba0214ba54bc8fbe18";
+  sha512.doc = "352e35b1b748f502db20c76f670c8eb6d02f672ee743518113a7b7807678ab45f2a628980229d8dae67df0dcd3581a5a28492adce8752a1a5f914fe550bab01a";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.0";
+};
+insbox = {
+  revision = 34299;
+  stripPrefix = 0;
+  sha512.run = "98398c838689cfe22ba859e2983f374ecf94b21bcf46de362056821af31285754717f7b2169f8bfb6fbbbee849449a1f3caf52d1397a901133d0364b392654ce";
+  sha512.doc = "53baed8af86447a60bb1a97774778256fc4ad1f08f73e2172a68fa091c32e41bf84d10642ebb426be610e34ef5575999d15be7f0c5a966618cea5b3a3832c9a4";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.2";
+};
+install-latex-guide-zh-cn = {
+  revision = 69264;
+  stripPrefix = 0;
+  sha512.run = "f93859b38da5da139942105175bb9c4f399934777fc04a7d267b45d7fd42cb792de40217221c6e0fee7db3b62ec3592ad0744f0f1a7bff52864e8762d58e216a";
+  sha512.doc = "13042cd81cae222dab8ca8966702a28938f7f4b4a734905d64dba2bd819e610108078f0f81b3999b28a63dcb015bcb7941b177be9cab243fc9d01b6808ddf587";
+  license = [ "lppl13c" ];
+  version = "2024.1.1";
+};
+installfont = {
+  revision = 31205;
+  sha512.run = "cd5133b93c5daabaa0ea13649f3d34c28f9af9f92db54917e64cafca5f5e7fe5169d87e36783036850ccde0002d34860eceaea528ad06e21f08141106e6599ae";
+  sha512.doc = "2b61c4b229e0c4ec89c591075e52bcf8c150f5f9584bff94f81ec1f229940dafef11d6b6f84dd086692cbd99e6616685533d4313ef5bc48c56a7494fef3583b7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+installfont.binfiles = [
+  "installfont-tl"
+];
+intcalc = {
+  revision = 53168;
+  stripPrefix = 0;
+  sha512.run = "e1087a7ab3f1d695bc20435ef0bb2b806d1cca71eb792fcf46e6c2fc6d819de2ff623a65593b65d5bf228309e3e3d5210ae1fb1452356f97a5ecb45921a7ce0f";
+  sha512.doc = "f3cc5dba031957d77cdf39d902eeda96c8405efef52352109a7bfb187e363321d31120b4c66ed4b2e990fbd7085b927599a0956749e4303611cdbec5d9d7179e";
+  sha512.source = "c3fc56d3ece265756a6c19684e7c2f9717df7f65176a640bcf6fede941468c8a426abb610ebf9955de920adaf2c96165f91f7314f48701121dfc4381f921d42b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+inter = {
+  revision = 68966;
+  stripPrefix = 0;
+  sha512.run = "3e2799fdcbb3648912d99ae0fee49b3e34098204e742ffd8bac5fda212f3e452606124e5503f99a52f7f647b54c31858256e7e1dcee4a566f3ca8e9d5aab5eb8";
+  sha512.doc = "64260a91b781bc0ca36a73e1b44ffc34847b26b977a950cefa27649d7382e9cb9d34f70f982831912489d86e343d4abfc81ae0d91302d3276aaa5c8567c3ba42";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+interactiveworkbook = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2afca3ee8051065d4014cae8ee751f085abe6e62ea0af7d6c036bfd9ae6c3f38a295857d67c7e8f75a049fd618c82ad8b28a66f5c83a387969549cbf20ef159b";
+  sha512.doc = "cdc12a36f547787fd1e6aaa5f9dc38b99092f4fd7e71095c1b5ca25730b4d2a5a5fc1636798978741538624091721c96220d91b8f1cc29d7f4698767ce0269f0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+interchar = {
+  revision = 36312;
+  stripPrefix = 0;
+  sha512.run = "8beb2e016e1a6af0199708355b8f13aa1accc614135cdf1d6dd534eceb6fd5a8d9e611e4d6fe0d72da9effdef446549b01d5ea2aad043f3fe94b81fd3d4aa188";
+  sha512.doc = "c36dfea3f3f62660cae4f4653136269247bd109931b2eb6478eba29af089d42b6ea9f8afaf0c345c9364a68c1645e288d289345e13c8582e1639edaea20a26be";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+interfaces = {
+  revision = 21474;
+  stripPrefix = 0;
+  sha512.run = "3c726602547ae05d0ca055d92b98a3cd5fce9709329fe9e769e5bb02c401a28b9b4cee53e5b1ee21dbb6c1c4223cf7a098aea227d615a45ced885c7c4ccab93e";
+  sha512.doc = "a9b44711b1f38c48886f7b4a49b3a58ec5514995c9bed9a067d41cbf35dcc0093fcade7ef28693970f1f017924dc2f6f79d8c89a1efc847f7a8c264cb8f98ea9";
+  sha512.source = "a93e77e7d12c91515e2d67f926ff6bfb76a278eae5880c60d2575580517d31f82d45656061f2999d5c4e73279a09dc5c5437351f10419b6ea92424d555e7e3a7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1";
+};
+interpreter = {
+  revision = 27232;
+  stripPrefix = 0;
+  sha512.run = "6dbbf39f9f0f357f45ae275458f03abfee625720b5f2dd3bbb5a78f60f4c0e8972d153c8d1647f147403f7c665e25147fd0c576cccb226a74630348a9f0a7381";
+  sha512.doc = "3408bcb3cd3e6da67294c830870534d3cd620b7abc3ad35d4833e30c831bf93d11dc06d00547888268870c75f6a6e2e861448a0fa197e3e5a3c10aaccc6e4dd8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+interval = {
+  revision = 50265;
+  stripPrefix = 0;
+  sha512.run = "2a2fe0ebdc4754ca74962270ec48c69e6574c13e446628f34604b13584e7b14ff33add55744f03a1d28443b5ae87ba79926816bf44781951a729913ceeb4d6c9";
+  sha512.doc = "22dcf2288d7f888e76967209ef1fd31bef66dcb9784a45126a945c4a0ea302c67ab4a35bd864355b29679131cf2cf36fc6172017599ccf3025c4ae1537362b9b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+intopdf = {
+  revision = 63987;
+  stripPrefix = 0;
+  sha512.run = "77477057b8c49400059eb2ec0ed1ec6ab8c5b80ad661871c5b179af60abd0a5904ccd1faf045951d83e29aec560a77188c8468cb9f854ed28676ce52c3bbbd83";
+  sha512.doc = "07abc35842c8170da6763d070180f63505ce5fcc98ec9966b3e0b7502191ad267b4b6b0a9bbc6fe1fe037b0eb6e249c9ba9080669abeaaadfaa6be26ea86e5f7";
+  sha512.source = "ab22656c6f47d03fd416e7340438a1c57e9ec1bcf360ec3224aa7c37859b1210807c3ba7b94d9fcf7e4a6878c9874332d3bd030cb7e1baf3f05f10077169d75b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.1";
+};
+intro-scientific = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9919021461485fc22ed6ecc0b30d0a23c0a2217c76a07dd8acd87c9091c9d71be0e370ce1373f90e6f5a36a9638ce4312fc674b16ccd0846aab97d1b05674391";
+  sha512.doc = "0daf84bdf7821aeb2f7971ed15de5546a13a444f3dc1b757f31490679350199fc893111109fc564aae2c8786fefc9e198e79e817bb318a1ad62698b6a5c79af5";
+  license = [ "lppl13c" ];
+  version = "5th_edition";
+};
+inversepath = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d0d95399067922172799d17cc9b9b4fa7a79cf2928630c63441114c479bc60e72b3e5133b54f8f7925cbf90f5b419c89e07699ecf8e8269b43f969e584698043";
+  sha512.doc = "a9dba77a8aa851a5e915e368c5090fc83fd894c22efedffce97ee0915b4ec50fa72efc30f377891b5efc0749c12018228ce400cd4024369cfb81ff3fe62567b8";
+  sha512.source = "de5bfe7ac5967f4ab02dd0931c5799c6c68c5c7a57d8b6c40a205e76546d8a23a6ac6be292c6a1cd4c8475bbf0eb229b6d198eabc66a17b2ea4b0ffd0c798323";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+invoice = {
+  revision = 48359;
+  stripPrefix = 0;
+  sha512.run = "7ddb8e05d88321f45cfe8618c740671e17e79ddf53fc2c11a3b9224a27ba1ebc815635484f3dfb4c849d90efb859412028df1e7f91a4e746cf812b19e5d1a269";
+  sha512.doc = "7b827f575eca669f15767be9fd215e827a3e98b03ea3e1f353039f5190fa7d75a5e59dd5d89ada982518101fc5164449843656c60a65679dd82061dbfcb95ea2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+invoice-class = {
+  revision = 49749;
+  stripPrefix = 0;
+  sha512.run = "d31a445c1696741dbbdeb4f035358cdabc9a4ff74855c432dd2b6d66b0d690e65e400207bafdb643a1ae7bee3b3472393043088521a685251acaf9abadb08769";
+  sha512.doc = "a3ab71dd11f6aedcb7ce8a89f8b97f8a18ac4c610e3460fd13c1d31b8db0d347d25ff6520af7bd4d37453759d03db384df9e69b281307a36a1d05b4beed0a60f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+invoice2 = {
+  revision = 67327;
+  stripPrefix = 0;
+  deps = [
+    "booktabs"
+    "l3kernel"
+    "l3packages"
+    "siunitx"
+    "tools"
+    "translations"
+    "xcolor"
+  ];
+  sha512.run = "7ef03f3c3a5c23774c0f3a495f949d5761f28a5d6316be7bc2a7b4039612fbab3f4aca9d29b6881a04948b9be2f0e6f7199d4ab8a41362e2d848f2ae8a090c30";
+  sha512.doc = "9621a018752d18d9a5dd069e48a3baf3fa2f11c378304573a5bd9b9bc37ddd79366732f0b47f3acc878cdb68e04374db8371a1f7efec6ec6fca251a6c2b95025";
+  sha512.source = "eb17a9ad06f67433b749e798783676212ca16dd78ab9a2029335c923235110e9c8bd8fb0654fc47417c60cd263d868789d8f86fb075cadcbd19fcd6142872121";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+};
+iodhbwm = {
+  revision = 57773;
+  stripPrefix = 0;
+  sha512.run = "a0a6807c8715dfa5f4ded44f66509ecd6af804d5dbfa44adb4fec3454f39be633fe17b79458106be0a6c35086dd1d3e33aec19ec657a6cb6b3903695b5019cac";
+  sha512.doc = "ed3c906cdbb26c095f5078dbe961781ab1a31f8c1a7b926b0a8082b7bb41b71a8912774829135651937bdcc5f2e53880300cf9b21b6ce35430fc443d30423244";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.2";
+};
+ionumbers = {
+  revision = 33457;
+  stripPrefix = 0;
+  sha512.run = "f964955ea6470a8906dd7623bd6959aad72ab4da5cbd4c32aa78cb2350cda05a1f577316ef97cdec9658deda027429462b70bcdad18024f255191b2f6cd7f99a";
+  sha512.doc = "5bf57ed5617846d10834f880e4a1c029547f1ac678a52be3e79613803b4e6cd0986887f2a44a0a4bfabaf9134ef39c44e420a12047fee81fd34243ec42c5262e";
+  sha512.source = "f7d0f56de1a00761104fa7e9aa13f1ca4b9ef97051ef2dd6d28dba3066998d53aeae015d956dec0d3c771d85f6553c5835e4a9bd9d83dd4feb65591d6c613fb4";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.3.3";
+};
+iopart-num = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "49fadfe2a8a1796131be814b170e270e7d39c035419d7e546e57d2ef1fea13d48b2b022eda463829e1bdbe60233d361773321d86070420ad2b63b48154adf18d";
+  sha512.doc = "167b0612883558f74d7696a6c9481fbb75e9ef6e7760edc4f79d81b3e1d7a344dc1efbf638eb4f5ba69be7002391211024f7aafed2e08e19fe559b58b0f7b1b0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+ipaex = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "dec0527223fdb0f897ccf54e96691cd68b933ac61de4c036e21fd35bff93d32766444fe6971492ce64328f92621bd2949ebb669ab33b6b6f4ede88280351292d";
+  sha512.doc = "c53cf11bc81d9a8f5aa19c264a1970d4819400ceaffa20b688d0709546113f932b82b6b6d12cf9fb31b2a3d2c0d45b6b33ee3cb3bd0060c961360389839b1475";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+ipaex-type1 = {
+  revision = 47700;
+  stripPrefix = 0;
+  sha512.run = "0dd513aa3cbb9dba7e1099f7f08d839e80002fc5f5bcfc2a2a013dc799a0a6389f128fe72ebc32b673afd66f3ebbc7fab9b97c31763f94b7ad64eebc83b2f569";
+  sha512.doc = "1c2974ec35c0291207ddf560b6cef4cb5b161fb59e80a6508b4f88aab5ecf93c6a3dda2a3107a40e838235f5af22ce23704bf4f13fc4a0b344f0805c29655605";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.5";
+};
+ipsum = {
+  revision = 68861;
+  stripPrefix = 0;
+  sha512.run = "72ba4708735350c0b1c6521d3ba09ca0477b203328c1452033755da7eca159b82e50ca0950f2eaba7cac41c1f27cfb28951716887e2736d9e69f29f91acd29cc";
+  sha512.doc = "b53fd7756b3ac604583d95f6cf9b90d322ebee9e6a1f085607de710a2bfe3257d29394cc816f1817b0cb499a550202a0dd1578c9e7e04152e8aa132fea05bd3e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.2";
+};
+iran-bibtex = {
+  revision = 69347;
+  stripPrefix = 0;
+  sha512.run = "0dd643474cdec8c5d15ce28dcad815978d9e3a76d0327cffeff021ff6811ba2313e44a5f21a4ed23a1bbf09433c479e551ad0a49c0d074d38a777df66daefa9a";
+  sha512.doc = "51f903f7ee725dc2ffe58d594e64bebe5639e5efcabcde15206ec5e9583f8d4771fd2b457f8a79b2fe691fcf77d03854d1f5cb291d0b33fb7f2d5272a17a18bd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.0";
+};
+is-bst = {
+  revision = 52623;
+  stripPrefix = 0;
+  sha512.run = "491b40704ad4c36e7ffac12bd5b823a4d796a9d52b82176cbd9654b6fe07d3a8a0c63f9756070bd4a971a33836e179ce6c7609e5de2eebddfac9c6aaecb92b43";
+  sha512.doc = "bbd5aa6261779b7d395a89c04421c680b6906f795ec713b9c72bbdc282fbf459c443a08ccc7c395ac5274ef5aa1b3f56cd773e50faa7ced4ab4629f1b91e73e9";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2.03";
+};
+iscram = {
+  revision = 45801;
+  stripPrefix = 0;
+  sha512.run = "6111c93a14c28572c17a1336fdf00ddd16b6c04b34b4a10a1b4a5e46742852b949cc99438397895de36632c9f2fd57c4940a0ffa458ac148b4a5e49707e5ca79";
+  sha512.doc = "24f5ebac7b8bfa826cb9ebaaeac0ec82db18807c5c3417dac53c6b636f6cb32b60901ef51f0d545cbe185ef0eef034404d3120c1211bf65c4ed4d155c67e19d2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+iso = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1ee4026383b28594c02ee7a3fde24228ac777814456fd8580954b1708ba3f735b563beaa291cea859c6492f8b9cc488635b67e373fc3afbd8f884a3b6d30a392";
+  sha512.doc = "f5c874d3e00fb451f81a52f5711ac0b1c39ce48eca50a6edc0b1049bf4aeec43830fb534e207d852bb440c96bcb86d960d5e2e0670610d7cb9eabad2ff1451a3";
+  sha512.source = "c40bd267337a62dc7dbf437087e36e569b83da7806f801017ad3aa8b3059409cfc51c32d83e9991b7fa0c9b2e7eb5aed22f841670196fa9f7080e5398a098d74";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4";
+};
+iso10303 = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "40a36335c15b453d2e5b5abc29b2ec1891c6f1502ee2f8ffdebd2f9a159cea3aa28eba7c661c12a0445a4f713b77079d8b965ac955123fc81225cfd4491e5317";
+  sha512.doc = "24c2a83508282a348d6748bbf722962f3ffcd193cd1cfafc4ca1e87c60622e463e5fd382ff65235590f2a9d629e8f40588630810036d2195172f61d1448e3dfa";
+  sha512.source = "27cb8dd236ad5f249595d963282054eb40de35d135cbd6ad6a106941955e0abf8777602fc341233d22feb1073980341d31b6e939a69097d3776d7e20096fdc18";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+isodate = {
+  revision = 16613;
+  stripPrefix = 0;
+  sha512.run = "5fa145cde64155e9a4ca7236cf41449169ce0d1aa88381b46935641ed94d166429c1b139c852f96526dda270fb85736ca54e8864c32452996109b0061003639d";
+  sha512.doc = "75118f62de8568c9826dcc11b753511f57b7fd237cac6aab1c75377121fad2179c81ae5ec5f64ec127a299beb88abc209727d17b1ded623718c7594bb7ca5da0";
+  sha512.source = "43bfcc11aefd2c68ec96cf05f7609cab4009f960b5220bc15d982ad384e062bc42a791f269d5480bb1582ceda68f8c7d36e1308129aaa3df41d25d35cbbb96d2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.28";
+};
+isodoc = {
+  revision = 59709;
+  stripPrefix = 0;
+  sha512.run = "5bdd4158aa30923d2f06513dd2f1a729077eef05f8f6e068c1e376f931558b9ad786eea871396ca3d16778692f010bc39f25da3993c74776bd746ed5355fc0e4";
+  sha512.doc = "ebf8ac1221592472837590973700603e0cef6b459dae92cc28ba751f5c3c0c49a686b4224c83502b09cec26ba306e44fc00f19b0f9e9c83b26f582a9923f76dd";
+  sha512.source = "9240f497398b77b6633f5be4040d13053abe51d64189e6678beccc1110f9e97b24422105bb3a552ade1f33c1af3ca2f8941b5c86548fbf7885a799fa69345b90";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.14";
+};
+isomath = {
+  revision = 27654;
+  stripPrefix = 0;
+  sha512.run = "c9ed49ca5df0932ab59de0988de688fa119682810c3163ec530a8cd80f439eab858bca4dfad85567dbc2de08d226117b4df5249ff29f247c208ae2b1739165f2";
+  sha512.doc = "55d94c6b4cf4c2ebc0eae4998f8ed6a1f450efa70e1644549e169cabcc782f1acb879c99bec5237e3147886c696c36f675e9f3c452da9f9880570dabf7adc5ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6.1";
+};
+isonums = {
+  revision = 17362;
+  stripPrefix = 0;
+  sha512.run = "d82a96c2208dfd59f091b8316d8b496115ee56d51e5418344f128418c3b202f0ee20bea505c05f5e81f76006e2efcef48b2d3592bb5c550e219b5c8e4a6e5f4e";
+  sha512.doc = "5ecd4587ad6d782182986592bb7f76fd62ccd2e9245921b48ae28e9e381f4084e0d5930b32815ebd074be4190fcfd6beec8be890014edd76e9a5b4958f71d6f7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+isopt = {
+  revision = 45509;
+  stripPrefix = 0;
+  sha512.run = "2e313aa3afe2e1457a794834c1c5eddec66ac2d17fb614e15e6781a23ca0834a3fc2d68632b07e55618c6d8dc28de5bb8bf435e34f61a419cb27fa53042d4a7c";
+  sha512.doc = "94498c64a4acbb2b41a7e4869b628c683a975f1ba28a8b721b9c44843574610a47a39883f5333b405bb8c02d49f50c3d9ee4f344c27b5e5c0d22c181db46bac7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+isorot = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "788b712fc11f3e4dccd58a75a950752d0492dbc30f0475dedeb26b86e500d0d23c4babf0dfc2361fe16e74d7b37d8f5605b4d4faf1e7018642a5e9dd1be73be3";
+  sha512.doc = "4aed42e6fe61aecba99783a1173d903daec621e7d5e0867f6f73319804bfa7727a2a2dac204d792b76a98f8e291bc563bff364360b19ccede2b79600a59260d0";
+  sha512.source = "99767e98f2eca92d4f0d8e32024805bea9646f10eda7cdc7fa5b325de04d6e70648c1e1421172e2358d7a6ef7eeca718db3e31e7f272160ddba2f24e4c516888";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+isosafety = {
+  revision = 68801;
+  stripPrefix = 0;
+  sha512.run = "4f3997e5ab414bea29e986e1edd7b1436f82bd22b32e4047814d48058a57aa7ba042c88808784ddf5dff3926a1ec366f374e5e275df8e16e8d8a9b9c07982ac1";
+  sha512.doc = "905fcdc25540ca0db66cc8fd6057bb71ded0016180b4efbcb5855e9ece8213d2091f387201ab44a2827fc4bb897f8cd9209b570b9bc23ab5c4b4293f5848c1d5";
+  sha512.source = "38427c445a9a816c674a01e3ce85b1a30b6ccf06f7097e82bceaddf72e7d178bac1873e57061d76c37cd3b73abd783b1d35b16648f43485b3d80cb7ce5158278";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+isotope = {
+  revision = 23711;
+  stripPrefix = 0;
+  sha512.run = "27c03c4c6519c038185ee485e94ac51d90c21fd095e4a4cb6d91b06f98e7adb7a423a53b1df035514f58cd0556ab0ecb1afd55c05008e558812d95de2159c8ba";
+  sha512.doc = "e1a6e798f894f9455e5d2144a935ee2960199e65db0499c4a900f888065eacfce72269f6808e01e98be3ea3440144eb4004c53af26d80d6ddda1be5df5492b1f";
+  sha512.source = "555ad9d5db22d4efe1373bf971f441391371c91538b73f3140996d3a2dda85fc3003f6d685c3e54c06be216e5b54493d07f165c0a7adeb00845e79bbd9958c5d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+isphysicalmath = {
+  revision = 69343;
+  stripPrefix = 0;
+  sha512.run = "5329b97930fbe9cc13c275132a32cfe4293bc23b2c1911089aaaa80baeb0437606c73503b4430574e88da61615d0649fea6f5666a5609a79ac5ca37cc90294a5";
+  sha512.doc = "f044b6cbdcb63a5e66b6dfd396393a99d605a219ede55317c759c28c3890a7c79ff6c0feb1de8f6517350d15a6422dc54426b7b5169ea1865024e5a335fe5517";
+  sha512.source = "d68bb0b9753303e844476ec27156dc22ba7f3c4456a26870edb080709efb88a2485f2b41bd3c15a89d7d665f22acbd206c951d0f817742d352f6997621188734";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+issuulinks = {
+  revision = 25742;
+  stripPrefix = 0;
+  sha512.run = "2ac24eb0e19b92e29fa898fcb8cca7e2f64cf87fac408aa0c834f6afc0ef262560a512637b30dcbee2ec06e9f0fc32f344258bab983b1b1d6fd4da85c821c056";
+  sha512.doc = "2605ffe2f42560b04fe781efe3c1972ad76f6cbddc7ef68bdb0ece9b0573b8cec785c2bf4befdf339935730a728bf19b83f3597119d3f9705f571350e963801d";
+  sha512.source = "c66f332f9dea7a03a0ecc7844d99375fbb91ca262aa50faac13b9b396db0991411b33616aec6c1af22e915e3643e7340e0083635fb40b6e693a4e487e1e45fed";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+istgame = {
+  revision = 62946;
+  stripPrefix = 0;
+  sha512.run = "40ea41a683ecff33942fb3287f57489079be48eb5e7512b04f5b7038da34bf9daeb523b9d15325444f27493119d2258302838b4a44becc7dad205504064cb5da";
+  sha512.doc = "275d45c62d3e140b5a292e0499c555716a43ed4cd06c69c59edc49b0e832371d39b320de954452226dcdabce7a140a622f3d3d1e8acb69fdd4aa0c62b39fe0f4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+itnumpar = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "73770854d45bf404e874aeda0d0bc95dac7ba266cb012fe4af7c4e7686c078b1314500ddaa767b1652e9b05b02691c93cd24b34d6b145fc30c0a3f56693f6a17";
+  sha512.doc = "b7c81a74d816508121f0449580e4599092bcf3d176cbf9f754fe9e662d83a5c8b66e52e43b2621338a13b09c44babac6a575f1e8894863402c028dc3ed792486";
+  sha512.source = "72ad2e68d946f5a862e97c3cd3f20f94c23a2a85fa5183a6da9b1f03be60067a482b2f22e7560c5c731df18f910f643f0c991a2b0c09925cc270287290654c86";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+iwona = {
+  revision = 19611;
+  stripPrefix = 0;
+  sha512.run = "2a125919a015c82e00bff575407f02a6c9a176f83a6017df682b98af55473e7e36ca0a94ff27091a3a4279d42fea9c49f0d8ae6da7e852ae9c44389dd5d8f7fe";
+  sha512.doc = "87128ca46f7f2f13f8f886fc1c3da11f17636637632c0d39ebae07dfe70ec92024e1136da7a736a3fc8d494e856b86407ef9c01cd54a56fc2e41372bc0f1c4fe";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "0.995b";
+};
+iwonamath = {
+  revision = 68144;
+  stripPrefix = 0;
+  sha512.run = "e0b87b6815ffbec37a52e0ecd1d31daacd46c222abb71566ab3476cbc2ec28128f5977367715bf1eac439f978d750b6ce7e7bee589de7a1f18bf70ab8ce166ab";
+  sha512.doc = "81fb0f9b7b738994a4af09a8dda8b580f4d59a92f790f8b285c2b1a252e672786296472847a6d4d8ce804a757248dec04e02894d1550cf0791863d25d22f35d5";
+  sha512.source = "b7aa315eb74b6fdbfdd75dc176ede1841406efb9bf5ba584fe090123f3e93b1f7db9719a321833d2486b0e5e7a0a214a4b91a8c1afb2443e126ebcf96bea5b70";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+jablantile = {
+  revision = 16364;
+  stripPrefix = 0;
+  sha512.run = "40fb96443b2194adf8477a68d9d435101dfa42471d02ec48a37968d21e12802ff1feffa830484642b457562392b6ea147d394734acdffd735a8a5db421d0eefd";
+  sha512.doc = "00e753a85f3521ac0c6f336e0e563bd0a68a5e2ae756dfce72d3cf59a01eb9654b6f5c9ad9b83047d3d4f7743b7cce6f2d0d734510532db13942ef6619ae813f";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+jacow = {
+  revision = 63060;
+  stripPrefix = 0;
+  sha512.run = "7482562b56521fbb70325ad3b633ebfc82165d65149dd85b89697ff9b5941f580f43e42da9775c659fa4fceb8a2908a200258dc31162b013ad8a207b88a5152f";
+  sha512.doc = "b53a0cdf5c3fe1eedeacbb438fbb453f844eff9c669946963e18c0c787aac744307d51804327dfbfebba1f88332dc01c40c43d3a4a50b5d2c9c8a0bf67840dd9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+jadetex = {
+  revision = 67493;
+  deps = [
+    "amsfonts"
+    "atbegshi"
+    "atveryend"
+    "auxhook"
+    "babel"
+    "bigintcalc"
+    "bitset"
+    "cm"
+    "colortbl"
+    "cyrillic"
+    "dehyph"
+    "ec"
+    "etoolbox"
+    "everyshi"
+    "fancyhdr"
+    "firstaid"
+    "gettitlestring"
+    "graphics"
+    "graphics-cfg"
+    "graphics-def"
+    "hycolor"
+    "hyperref"
+    "hyph-utf8"
+    "hyphen-base"
+    "iftex"
+    "infwarerr"
+    "intcalc"
+    "kvdefinekeys"
+    "kvoptions"
+    "kvsetkeys"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-fonts"
+    "latexconfig"
+    "letltxmacro"
+    "ltxcmds"
+    "marvosym"
+    "passivetex"
+    "pdfescape"
+    "pdftex"
+    "pdftexcmds"
+    "psnfss"
+    "refcount"
+    "rerunfilecheck"
+    "stmaryrd"
+    "symbol"
+    "tex"
+    "tex-ini-files"
+    "tipa"
+    "tools"
+    "ulem"
+    "unicode-data"
+    "uniquecounter"
+    "url"
+    "wasysym"
+    "zapfding"
+  ];
+  formats = [
+    {
+      name = "jadetex";
+      engine = "pdftex";
+      patterns = [ "language.dat" ];
+      options = "*jadetex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "amsfonts" "auxhook" "bigintcalc" "bitset" "colortbl" "cyrillic" "dehyph" "ec" "etoolbox" "fancyhdr" "gettitlestring" "graphics" "graphics-cfg" "graphics-def" "hycolor" "hyperref" "hyph-utf8" "iftex" "infwarerr" "intcalc" "kvdefinekeys" "kvoptions" "kvsetkeys" "latex" "latexconfig" "letltxmacro" "ltxcmds" "marvosym" "passivetex" "pdfescape" "pdftexcmds" "psnfss" "refcount" "rerunfilecheck" "stmaryrd" "symbol" "tipa" "tools" "ulem" "uniquecounter" "url" "wasysym" "zapfding" ];
+    }
+    {
+      name = "pdfjadetex";
+      engine = "pdftex";
+      patterns = [ "language.dat" ];
+      options = "*pdfjadetex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "amsfonts" "auxhook" "bigintcalc" "bitset" "colortbl" "cyrillic" "dehyph" "ec" "etoolbox" "fancyhdr" "gettitlestring" "graphics" "graphics-cfg" "graphics-def" "hycolor" "hyperref" "hyph-utf8" "iftex" "infwarerr" "intcalc" "kvdefinekeys" "kvoptions" "kvsetkeys" "latex" "latexconfig" "letltxmacro" "ltxcmds" "marvosym" "passivetex" "pdfescape" "pdftexcmds" "psnfss" "refcount" "rerunfilecheck" "stmaryrd" "symbol" "tipa" "tools" "ulem" "uniquecounter" "url" "wasysym" "zapfding" ];
+    }
+  ];
+  sha512.run = "f169a494d7544e5218dc280937add40b1b0782ee5aeb5d1cebb4aa905bb72334c6caaf628ba04c3b5ebec984a5dd0c78c3c2f194ddbf121f63c5be4adcdb58a3";
+  sha512.doc = "670f0e517d81bb70b54b375e9cd240ac8a6ab9143fb529445c6622d445240a690908d043e583c7bf1be139ecb9a69dae77db74ca9755aac0a604a3eb342cc4a9";
+  hasManpages = true;
+  sha512.source = "d05f8460b8f9b21233c92da7a5d64a898c4a4b5eae5dd8f15751d4de00b7ec48dc6ea0ccf43f43929295fbc83a5cc342dae9d7ba14034cf198d40de3cab247a9";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "3.13";
+};
+jadetex.binfiles = [
+  "jadetex"
+  "pdfjadetex"
+];
+jamtimes = {
+  revision = 20408;
+  stripPrefix = 0;
+  sha512.run = "72e2dc3995f173f75aa4714c397bb036c140bace3b17ddbf321afad677ad397c2be804c890df472f89e15300d4645d02d8ce3746c33fa37be85a9d9312ece3a7";
+  sha512.doc = "bc14db250b9d34e700c0fed6390948b39022f7ba39cc0e083c6a1355517fd10aaf7065f6ca90f40a50aa0cd6557a35cdfb1534aabff12ec6c462a2fc87ec699a";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.12";
+};
+japanese-mathformulas = {
+  revision = 64678;
+  stripPrefix = 0;
+  sha512.run = "35245333f0ad08ba0772aff54e5ed1b252ad1b1d298c55934ade4a0e33dec29fc67adfebcce22f10b61b9469a2a2d208c4b9977519271457f1538c4bba8bce24";
+  sha512.doc = "cfa07138896028186773970685309030f587fc39f95b2fb0d993e2827a124ae4172acc91f9276ae65b32fdc614cd9525d557505b2f1fc11750a982a5c9cebb42";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+japanese-otf = {
+  revision = 68492;
+  stripPrefix = 0;
+  sha512.run = "30821d9e8a8de886fcd6ac64801771ee7ff48c7523e38946a8127579bf53d7ed730867d78573dfdcdc88017743929064eed1d4a5b474328ee2cfa7f889905026";
+  sha512.doc = "80fec029e80a451eb9f53efc6e69935f9ee42063784a5f92784a595dab76532837062da90f3c3ccf8fea4e14b3cfcd339ba4e5fc539257c11e7726cb70ad2cc0";
+  sha512.source = "c5ee59b3741e19c96f151483ab5444f3fc41dd498ef8a8a34f87dd087439d29b614fe3d9597d1a29e65bcafa47b570bbe119fbe6d705436fbf1dcbf9a6b76576";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+jbact = {
+  revision = 52717;
+  stripPrefix = 0;
+  sha512.run = "0f1cd72dca41b37c26d863aa734737ad128f5c39c508db13a3e91e4088477a99d9978aa1ed003ba0812e276bb4d80e527c80915cd7a08fd1cbe968816359814e";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.30";
+};
+jeuxcartes = {
+  revision = 68266;
+  stripPrefix = 0;
+  sha512.run = "ad90719dd34791c88a5300d33ad7d633e650b3de6d61f493cf9069c39429f57ffbbde7aca1d2356a9cf6486701511fb7805049ed6a53ccbf49daa7a3dc5ab4e3";
+  sha512.doc = "9c918a0cb97ac3b82a88fd104a2e084404b83b2c04acac44e5f566774a3c01d8c91b0a73b49325ab6d7d366c5849e69a60c28a9686049c009bc249cc9b04c7a0";
+  hasRunfiles = true;
+  license = [ "lppl13c" "lgpl21" "publicDomain" "cc-by-sa-40" "publicDomain" "mit" ];
+  version = "0.2.8";
+};
+jfmutil = {
+  revision = 60987;
+  sha512.run = "11f0ee88997b197ccb4cf249a92f90ecd08227b0086861b59752c2e17fafb1e1fec7a1cfc701d5df91497d4cb9e61d13f892d776ded07c34d7dab09a2a65eed4";
+  sha512.doc = "045b74024de9798fd7c74442404dba0610a94f66b60455d84fc33bfe56e8612b014fbd83cfa3edfb0c3a8acb31c0dece69ebefb58294b2d271dc1dc2e95d094f";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.3.3";
+};
+jfmutil.binfiles = [
+  "jfmutil"
+];
+jieeetran = {
+  revision = 65642;
+  stripPrefix = 0;
+  sha512.run = "79433835a06c0fe268d90ad11bfe6a9956e49284cb2ea2255c4577883f2087c0c6b823121a563cb76f666ce74265a056f0e0b470dd2542a104894adb0242d083";
+  sha512.doc = "ccdbc9aafd94956f43c7f78c93b02f067defb038ba6b9c649e38d1e0c02647c853ad391a1c2b10b60e14255b38c5d77aae9ddd260c8297e06084236c27d70073";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.19";
+};
+jigsaw = {
+  revision = 66009;
+  stripPrefix = 0;
+  sha512.run = "3ad1aab51b4fbd99efc6bbfabf716cfd27e4af71674b094053f4866e38ab4c6c3f8d1884bfc4e4f7cf0fef11abfc488cafdb696238c5af1440255151b1b2ca77";
+  sha512.doc = "92d04e7497c19471f8aaa5344a1cc3824e18691daffab637a1822f900468269367244c984e4420efc94014cfc849ebfa4fd0db6e5b37cb1e89aa5493bdbbdb87";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+jkmath = {
+  revision = 47109;
+  stripPrefix = 0;
+  sha512.run = "8e549db42b25c2edac71013afba0ebe3e09859ce4ef104da2b969663014cb88c10bf1c8899ee181070e6cec1b28d0ec9e5966d27f2176e2032d6855ded8ea941";
+  sha512.doc = "99a954f6eb917333a8e6c4e3437fcd16f6950e0473fc1a48c99d748246c97d5a3df5b96e0314a9ec5e7c6bb0b318b934c40070ec94df00546e49cf140aef23c2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+jknapltx = {
+  revision = 19440;
+  stripPrefix = 0;
+  sha512.run = "0369405034393ea8de2cd94497a97ba6c40264ec9142eefee09647fd4e51f83e169a99757a4b92c1c9d911637f137404fa54231de452bcd208ba3f9982984153";
+  sha512.doc = "cadb522c007963278990e75a011e22d2c6bd8429e55fe5ecba3c2f20b9ae13fda4eac304bc405440c1c1566b1458e0f3e77a6d4adc77117b20673204bf502131";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+jlabels = {
+  revision = 24858;
+  stripPrefix = 0;
+  sha512.run = "5077471a09df4090e087a465e9d1823668ab80f088a7d5fea7d14559e9ea8906dae029a2093038ce5e9f013bbe3a9bcd74d8626e6ccbcaf7ebedd5c2f1e3521e";
+  sha512.doc = "7736480f6736d8b623fac61683321eb7444ca8672eadf0da200eeca928de9dc031152e4599783d602e9c11b58463b03fc1162756edbaa5bd3dc1f6c5b64e08a6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+jlreq = {
+  revision = 67400;
+  stripPrefix = 0;
+  sha512.run = "7421f665a77b88d942d145dd63d0ea92c3f2c24815c564ea4eb13828bd9bc45cac1362dca4ae2e69a3f53fa9b79e4a495f87656bd560c951b407c34fab69a266";
+  sha512.doc = "2c3cf0af124dd6d92d41bd89a25884983c691c4a9a2a72c33754eda92244f37ccb310aa330f8b55d7a18c45d4bfdbeba60358d0e5b95bf7ffa3ce588f6a68b4d";
+  sha512.source = "0f455dad9f954f8e8d84bfda0fe704b0cf6a384f6c0a215299d9529d10950340071fbbee98f88a9f12a9863d3979246533a47e5a6e7fcdb71dbfc3c165079d74";
+  hasRunfiles = true;
+  license = [ "bsd2" ];
+};
+jlreq-deluxe = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "318b01471bcd2e7a15d5e58fe922d341c9daddc3ed9f3565c85bd221dba2d5d38635d60b848aa37760b3ecfd4d007d202d69b6694eacd41c885eed34ce77c34a";
+  sha512.doc = "ce096d4d8461d1fef3e4c9d24efd8f7a402085ed03852ac2b293467400e2c000633cc852d4a0ccc2b0903c9e3a682770a4edf632183758b9753e6a1c553ecab7";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.4.1";
+};
+jmb = {
+  revision = 52718;
+  stripPrefix = 0;
+  sha512.run = "6317f3437416ead3fa1224432bd2cae247614e614f888ea074cfc442b8c7c3832d0243988269a1d772172008fa377b142288f9644bb1e2954c3758c1b75f78a7";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.21";
+};
+jmlr = {
+  revision = 61957;
+  stripPrefix = 0;
+  sha512.run = "95a5e59c8f4617b8d3d459a2cfe0730465d46a98781e4352debb9eb0c4357e74c8f519e77873a236f127dbecc235f611e30fbd7348818d9024a27fb8f0ff1eac";
+  sha512.doc = "a481634eac642925340aa02323deee2aeee1577696abd435814a2f27d6e4bf6e61be2b2618778c762f3ec60a1e5067d634da74125dfacccfd940488b6a812175";
+  sha512.source = "1dee8b499ad2c5427082a69b5a3a65c173a96ea298a05f94b96d448d8d7554d96819798dc724e1e8f55afdd1b25d9e6ed6e7f3474bd83af83b2f89add907f2c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.30";
+};
+jmn = {
+  revision = 45751;
+  stripPrefix = 0;
+  sha512.run = "2e250c3f115911c56f9b8d46d358fdef289c624a5b24c9b4213bbf7818bf42c7b778df55d4bf181bce115b388915cedc90ef7cfa99ee6ad8dd621e7853fc7c29";
+  hasRunfiles = true;
+};
+jmsdelim = {
+  revision = 62630;
+  stripPrefix = 0;
+  sha512.run = "83a76c353b38c9d5e432606c2f1667dac10adf54f844d9c4c7a9b8b8733a44d63db9e2c9e46b2ca54f427bca1d3bf4ef49d016c26dbad361b83d091c78708918";
+  sha512.doc = "ef6f90a4b7d3738ff857158822fbc7b3dc23752b5da5845932f560fcaf83d67a22920e045448caae26eded760e34aaab375f29993ffb503d0b5ef3c8185ae737";
+  sha512.source = "bbb2b6acb1e2a4be8fd02ea84f3f43b14675b7c02fcb036fbf10e59553411d4a19ad5bd6c087e7aebb5c7309d3ad6d19ccfc67d9186799159e0209f45bdbc5bb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.0";
+};
+jneurosci = {
+  revision = 17346;
+  stripPrefix = 0;
+  sha512.run = "1ea3d11a66045784c2d1abe0290d95482c5a2a65a21963a58d9626872b25bb0d20f8d1c3c3b8173bf7f63ed71f7c33e13c8f6dab0918585b36d72fa37dc35714";
+  sha512.doc = "2ed6a342b376ced405a75da39fff51d03e9fffa89341522555d2edf8d8eca701013a95f09f01cbf642d3ed1ba93a1aecc89682986ae5c94d784f3c857eaaadb1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00";
+};
+jnuexam = {
+  revision = 69161;
+  stripPrefix = 0;
+  sha512.run = "f09ea4e82d630111a770568a3ffa3de9b862bff33cfe40eeffb69e6997fd2893bf58eb626d557f310d77a13dd97d6369cb7ac3d1f87601dd3b8b2aa4dbc5fbca";
+  sha512.doc = "828fab98b92a094ba2f42e9dbafa2bd4ff6de6e7fcd242871a5e2b6d3ed2fffd54f3bc9ecce7e24e050f47aa264cc5f8d0684355340bcea00817e824e909543a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+jobname-suffix = {
+  revision = 64797;
+  stripPrefix = 0;
+  sha512.run = "b2e5a82d5bb8575e3708a3e2c30e23a3ceb129c6cd78882126061321350c3ad72e36ccf41392eca7556203be713530d3169bcb39210f91d720159c49975eddf7";
+  sha512.doc = "fbe45bf364098e30deb8e040dfbb59b3b81cf53720793ca02dce59ec113ea57b86c1a3a8465ce6029ac1fa7b19b2220fdddc71f71285969e8f91eeafcabc3bfb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+joinbox = {
+  revision = 68003;
+  stripPrefix = 0;
+  sha512.run = "c7ef7c28e11a64f060b37e1e17fbe54a80e1c5050bde043e77c42385037974a462598b66c3ab48a9d3317a6ce55a0af3a434465657e0a42d5568a127779c765d";
+  sha512.doc = "ed665aeb55d066887e536ad545199809216a2eb84d9d81fd81e40798c7a69c5d14a191a73a8c2ee9fdcc6d36a8d206d07fbd72d427172eb9a182bbb3b4751cf1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+josefin = {
+  revision = 64569;
+  stripPrefix = 0;
+  sha512.run = "6be43db9172d51a84374aa836cf9e2baf02f087336685a37c321449ba06461f08b08a8d98c12cb3aba0dbc9c0e2e8b3316362f65c7393b9286ab50b11f70174d";
+  sha512.doc = "cc41ce980515708238256db38ff05c74a22f78ee5a8f4dc63d68339a064799e1beacab7be71ec15b2c97a6d9aecc7a39064fcadf4d7c67ff172eb9b8f7a939db";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+jourcl = {
+  revision = 65290;
+  stripPrefix = 0;
+  sha512.run = "6039789de2a03ec2568597cfee911d20b66db75ef4ca3c48cf9481ed2debd0226ccb605a083ba53bce91b74768e3d70a2e2ac077c630b8de33c010f917d68335";
+  sha512.doc = "873b2e5636f6409f7b6c4c8c4a8c8988108ad4740df9fdcaef4e7998d3eeba0a2a26e84fac5e6c7b6534bafd120a3dcf066974fc9419e4544cf597bc99fdaeb3";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+};
+jourrr = {
+  revision = 68556;
+  stripPrefix = 0;
+  sha512.run = "cbd5484b622c865b7c42f8ce54a76e54a5cbde6045701cd8fbba54d17c8abc510c79125e7d335c3509cb9c674ce233005f9fcac703fa95f3297239c00c3be682";
+  sha512.doc = "395fadb1bcc91eb1c3090f57d783b0b2deff507d22a4221258dd826d635ba382c4c4d00c0d341402374ba4bb037e39cb23efa2bb323652d73b0940ea89eb9f7b";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+};
+jpneduenumerate = {
+  revision = 63893;
+  stripPrefix = 0;
+  sha512.run = "10bb936cbddc6e88979ceed208bdba424d4e4c9c388cadd3a9b84a767c59ea43362f11092907f98c16696f07134ed66765a8bc7b02ea0a8fbe9eb7b814760780";
+  sha512.doc = "447c925bfe05d1c6657bbf2592bfbd16f80d9bcc1a3320635231153b90198f2e8010cef5d13573e84504d5a41b9cc6ec750054c00a9178154c4e210684919d0a";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.2";
+};
+jpnedumathsymbols = {
+  revision = 63864;
+  stripPrefix = 0;
+  sha512.run = "c4f23412a83fed8ee870922d1e8e0c2e8a881989223b340de7ecda0851d45d504fa6c5f0cb70ceb65e2c07f5df0154f77f343787573a6265a709bc398e3add9a";
+  sha512.doc = "0589ea6fa4dee93900753dc170aea295e9bf1103687fa146633589897292dff8c472ee95607a2d0b682321a5a33e22220234e2a396cee4ec2abc54fa4276459c";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+jpsj = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "de1383f7c52d4a43b0ecd2677314a88181e2702ae487b0ce3140b3048c1820bd504b6743002733e2da3e45553aaf911fe2c6ff552f77e706cbcd300570a34c03";
+  sha512.doc = "65c25cd1540664e4e529be67851e5198761cffd6eea495d1f60963dd9deb911ebe8426391fc456f08bb6f640040790fbe7d7702b21f7ddcfca5d246c02791764";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.2";
+};
+js-misc = {
+  revision = 16211;
+  stripPrefix = 0;
+  sha512.run = "6dd7920204cc66ff28c78f54bd6432a71d77ae2f4463bd997d2a4170465053eb86d61bc35d8da66377b47cb1eba88c6ed0918142910a5bdd4e44aec41d3ec4d0";
+  sha512.doc = "507cc8c04589dfa7b4d36bf32e4c1d18af42b90df58fee128c0ad37284a87aa1adad32623591d0e8ca880c53a1f583b0bd8054487e231bb2a58ed06d1bf6c6e3";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+jsclasses = {
+  revision = 66093;
+  stripPrefix = 0;
+  sha512.run = "aeba8c75d3af2077763da1846e09b6d51ce0f5935cc4e8a09fb6c747d9321161996423ce620d04c15cfe3a4f9af3ea36f90ccbded6fa03dcc088c5e71be74295";
+  sha512.doc = "0ce0175fc4a3ea36154c329961d7604bb06431b586dc1bc928afd5b2ada528bb79349a833504ccc93525addde80818210cfa2a1803ecb319032bc8eda034f18c";
+  sha512.source = "4b8e605a8f9d3de33b9deef3dd58ae2984881f9716b0a9647fd794a3c97549e50ffe3f2556bb4b4ebc5938ce3516abda9445d4ddff21882b53ccfd9276b37e02";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+jslectureplanner = {
+  revision = 57095;
+  stripPrefix = 0;
+  sha512.run = "022c878b95fbca48c7cd3464a12d5af8b29b26c2fe46f3c4dc2f27e6c3b3660f78f3baa7b9d289c3444fecd7186f6d6cb18d8c6c94b9ff27842f6c9018e9762e";
+  sha512.doc = "1af4d1a75b6f5f056f0426f00c8c26493638e8efbdd5ff7b746f45cf4ca3c6648d97b3832885d97b71124cba7e57eb22fc2018619e5a33c66ece10ba20528a2f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.12";
+};
+jumplines = {
+  revision = 37553;
+  stripPrefix = 0;
+  sha512.run = "e09ee044fe7d5692fe4f1098406e33481ebdf81698168223235e735637499053c66f278a1f7e27585aaa1a586ccf85b4f5afdccfa3ac35950475f56e46324103";
+  sha512.doc = "c7f56f012d6eca83e54610aabf1530889c01c1b28e9b790b220726bff860504a3e46ad4fd8d88ef50d3fff17507710bc168fd2d5861e9f2cdae69cff6f95ae71";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+junicode = {
+  revision = 69355;
+  stripPrefix = 0;
+  sha512.run = "e368f15bb9adcf7ed15527e4e381424896590866cdb9a214b7f8310e9fd0c660ff5abe442a2206aa88f4032665f40fbdc21b33eba910ff1b299c5940eba82982";
+  sha512.doc = "937127e4089bf632b62dc1a218645b1c2903a700183e9d9e7456b16a47b089846509d5d3f89424417a19dd540badabdc6a8a6024826e5cfbad97c19ae9f4bdd4";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "2.206";
+};
+junicodevf = {
+  revision = 69374;
+  stripPrefix = 0;
+  sha512.run = "1c227ce22bb32e8799cabfb943fcd38a4ccc6c07aa7d9dc9708c9bc84352c4a660cbf8c6d31249e47825b961f67a0d7da59349c827a97eada6a37a327091973e";
+  sha512.doc = "c96e5c1887f39a2151bf697353b84d9049ca3686a61568f1d99b68596d1b7f6363810962652813403881754ac412240a9d557a7053803172ba45a8c7c7057c13";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "2.206";
+};
+jupynotex = {
+  revision = 56715;
+  stripPrefix = 0;
+  sha512.run = "3b5cca7c6b8b14eda35d52a6db5e7ac027c0b29ee08a7b8f58411886963d8dc69348752d6cc1f010d11b9216026b705fe4cc915d2c60cb3ee9f3950fcc6bb308";
+  sha512.doc = "35b8d2dbcbecfb4e7b2bfb0ef39f2d076d6f4eec9189e89cee3bdfdbb6f57d5c1dcefbca3eeecf4842f7f94616030d2e73588074618b39e232f40104e371f3ea";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+  version = "0.1";
+};
+jura = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "08426bab6c0627e945d620a338c6081a8a21d80567d4a4b686617d0d57c99b1e148f5e5c3406a0337ee4ad61bd795dca353c28b0f33d397c5b47515969fa5951";
+  sha512.doc = "4d19c663f73791712d9c24361d8e2a0c2faf25bdac15dcce48825f02468f6a798eff7e147f531368bcc8d7e2a1938202b5614e2434cd46866f359f8349564adc";
+  sha512.source = "7c83d639330c1bd405b2439b5e85dd723f476f8ed5096c8085180f03d63ffdeb834639fc8a49a454d50df9f882f27dd42782741fed89f8bafe45b6222bd43239";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "4.3";
+};
+juraabbrev = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4d6fd00247c6c915956679674dd029048cb96ac3bc97606c0a299bbaff24a4cbb9440d557eb2945151720265ecb27bf15c638c003e1039dafee56471dfa03945";
+  sha512.doc = "ede48ff67dacf107baf50be345b042a7b64c815442875281241b7de4c3be56ec40c969e40ec69669f31058bbbe9b27c51cae25938d93bec99a8c57dfb8e9cb75";
+  sha512.source = "3a92a5231317d6f7d7b1afdf5df14997e17217e10b694ad97a9a2f3984b0afdfe5a3edeb4368108e4fb389a98a7f5414409e5fc7d319f4c78802cdc1a350d6a2";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+jurabib = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "12a1d9402ca15ff23cbb9818f07290f0b295c9844bc4cf02e1332eb27a26a3a8d0ed3199df1c4f4f85c9ff5308e7426d0c7adad8dc587fe905c5a15314863b3b";
+  sha512.doc = "3f804537752bfd7b6780d082b37834c805e521491f39bd76b52541707e69f8b775b9e18bfcba0b0827133be8cf82bab86651f2a7ec351f9cc140427056ca0dc0";
+  sha512.source = "349a2f55265584d73d0a1b0cdd00f0fdb384c87f8b1399acf62f14229ec4cb03919bb1c37d3c8ed992f72f3cd846c93bb13f25bed052edd80810bb6a92665e75";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.6";
+};
+juramisc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "cbf6ebe12bf72dfb823578ed49066f34059e5ab1beefe0eeee84c7df55135644eabdea7582dc848b52cd575579d8807a2a2723bdb697e851eb8aef88f8a5e533";
+  sha512.doc = "3925418b9e4d05def76b9e0ebcf882c4b7061ff7ae446aa63d412c093caa04536ad45c757e04e088c3b4099c569885c6e6708ad31b866ebe89ecabb8395964b2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.91";
+};
+jurarsp = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "511130814ed94c7f0829802a0c3e8e613b0c4aae50854f6e06779448f430e78c8712142fe04d3662b799a488d90944072847dd223b01b642de78c1f98649e79a";
+  sha512.doc = "1c439e351102ae3f768ae38404cc5d98403028fb6fa6088cd53eea40593ee03c10d20955f3fadef41f41af6d23f139ba356a9b06ed735644b67d3f42a076e0af";
+  sha512.source = "8853060222f8f45e69fd7d3539534ed6a0762cb7f97d4c140dcb4ac59fcf1fe339d7f6cdca6e035d4e9bbcd730746e1311885d837fbedf65e208be2100ec2a90";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.52";
+};
+jvlisting = {
+  revision = 24638;
+  stripPrefix = 0;
+  sha512.run = "70626cd23359751909ce385a7ed4415c5641e9c303d0dafeb99e36d0151f382c02c2f6818a135bc92fb156d4fa25d1976b2c906074fcc112e56a1a7a458801c2";
+  sha512.doc = "de6a694c26332d9c97bf4202bec0989370226b7381d080c4d6f5a106cd8f2bf352d756cbe7cede2a4ba3e17f85ad553e5c24e874a00cc1dd307325125e6d0bcb";
+  sha512.source = "776fe9200a5447c151f11ee09b0f3d95aa5f07ccd427607b12ad7069aa70084d99c7d620261797e6c147ab134bf3a151bb739eadc8e3898dc8b16f284c66a965";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+jwjournal = {
+  revision = 69162;
+  stripPrefix = 0;
+  deps = [
+    "einfart"
+  ];
+  sha512.run = "9778eb2f8a5999584afdb07b9604691d9ed1253a8a2bdedf569a10e892e876288a74c525bab2e0d26f8ed851d94f81e4a3625a54f1246cb0428a24308546d502";
+  sha512.doc = "dde16cc247d095b61e09b62039f081afa1855778b7d804e6e5692213c25a14c2746204a730f7934a531142f5b9151dc183b20f1d2aa14429d448cc5d4e543996";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+kalendarium = {
+  revision = 48744;
+  stripPrefix = 0;
+  sha512.run = "fea39ce08f6028f078e2d87ec73aeeb56d72006d24d316f8e257b3c71604efe2b4ea2fa698f79798ec5c9b3d271d758d4c0699ffce1bf380a74d21158224eabb";
+  sha512.doc = "60a1dcbaa92fcb4438f4a2416dc4784fc30af34c6e1511533b8827a266b61a62a6c0e66f51b27ce81dd879d774e9fee6b155a048ddb9f68e1f991294791739e1";
+  sha512.source = "a1668bd43e489002ff365f5f90c6f9f8d6acb752256159f223a444b41ac1398e8d0bde50a63deac11f8d3a22f792278891cb05109b5af4c2efc1e8c278f01a76";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+kanaparser = {
+  revision = 48052;
+  stripPrefix = 0;
+  sha512.run = "a9db1fc66330bafc5fc26ed600f1779dce328d6234ebe930aaff65a02a0d740188e73c5f73a9c75d69926323a610dca4b37044e7357a141eae9bb3231fd3e272";
+  sha512.doc = "9eb00a9652f22411f9ae0123bd2bda62af617f39ed3eb8266c4ca38ff0783722a3d1eb05a0fe1ef6a238a3132ade65c5ebd882309f154ca416e2191b9db44c4c";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "1.0";
+};
+kanbun = {
+  revision = 62026;
+  stripPrefix = 0;
+  sha512.run = "2ca12d697ed80a1f3182ac2e28897f670f8d770d99ce6fb3d8cb692e8e40d45afb463959ac8668b60ac7d67c9d8dd8f88ff5ec9e83a96f656ea8cd59ac419187";
+  sha512.doc = "853230ef31da0bab5215f62e68162553b5ba54619e1e6b6e84c9c57fbe43b5af5715af2696c384a14807a1cd6507dee600d37bb205e5b82d42cdae15ce30e940";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+kantlipsum = {
+  revision = 68983;
+  stripPrefix = 0;
+  sha512.run = "bc863e42abe6397617c588c85936eec4dec5fd9578b26cdfaa80e25abd29ae814a009952f246a4920a3da43e0842a9b113d0c73eb7514b72a9c5a16193f914bb";
+  sha512.doc = "97f15c38fff7c30d99313be71a6908f5391bb15a3e363fd00bf6a6563a2abdca2d98969d5299ba644d33917b48da41985c5ea6d9238e2e8a7fbd285262bcb8d5";
+  sha512.source = "873c0b66e7d83fc93d916d4599e96ff8ce8cd045ad2220914cd4161e15e8f357676b86a35dccdca927c03abbe224f604dca187eb58cd3bc42ba78ed70b9130d4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8c";
+};
+karnaugh = {
+  revision = 21338;
+  stripPrefix = 0;
+  sha512.run = "344027bcf79a9b1d3c408aae774bc532a39e7c638c4831d2566e7cf5ba5780161c6314bc0f9337de21fa08a2a2d72f3b5ccf9df7a521d7c95b4dc6e62cf2136f";
+  sha512.doc = "379638ab38cdfe3d94d049fec7701995566df9c5451f4f6a862c7cde232ceea899222b13f3c40398676bd2746305ee48e8b43781804cd24f48f36946526d23e4";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+karnaugh-map = {
+  revision = 61614;
+  stripPrefix = 0;
+  sha512.run = "789421645939ff491e3ee00aa06813a5e194108c2d55a5e06ffb4dba593a095352ec54c5194ef8ac536f4226007d2323a923ada94966b5cdbd147117856ba680";
+  sha512.doc = "6a04bc71128802a62fa2dbf92a513c9859f9bab336cd2208d05fcd3b9404a1531e4f20cfd69a1d58186cee6660582ab03e89ce87511c3e1173f84bc6ac132f29";
+  sha512.source = "520bcc77beb97f2f106c92682898244160c2ee45ec85118776dc375763363b272e1459e73d3cfe1c27c7f82f24f723953bc9705cf1f506e7c4b679c0f3063804";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-30" ];
+  version = "2.0";
+};
+karnaughmap = {
+  revision = 36989;
+  stripPrefix = 0;
+  sha512.run = "72c5ee674d7719b535a03cb9180a605fce2ac089c875cf57b95739b5c139bc45552960faf8f3287731fbe12c8402ce3c2c6517513d20bbc484e12a44468d6ec7";
+  sha512.doc = "c79e28dbfb45764c3f5feff21bf3cb8ec5ee41380fe43d35b2b091b1e263db1eb417a19c74987743c04a2f41fc2c3655fdc531c8971320580be48beeb4d3d6eb";
+  sha512.source = "ff5bdbaebaf55faf2d617b1e3634e52a6ec52c9d56932653d9b13a8aba94db101c4afbccdabd916d51be201135de2e739295b8a0523b63def160f1c07171e4a2";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.0";
+};
+kastrup = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d7cbd22ead6633284e9d114d90b2cb47924bfeb10c15eb350e4c2f82b883930c953410362313cdf8ac476a68cfa3a9b020217097909504b97a8ecd7addbc8d97";
+  sha512.doc = "32883a008b0f44c341fbd5f65f9783e403fb5751201235b0c4a2dfd9af8400e1a36adaf4573165688d78cacdaad3c8b2ac1b92ba87ef6951d3bc5330537d1f9e";
+  sha512.source = "60390a053fe2fa53685403df1d67a2bf8795f49db0f4eaa5a147ccaed951a55c1ed50c9cc5802bcdb5e356b694c2b4be78715022842c958f784908cab89a3f75";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+kaytannollista-latexia = {
+  revision = 69265;
+  stripPrefix = 0;
+  sha512.run = "c91cf44906a6e377138a04048a3b9885ad10df3ceef268ee3c8d467e4697fa8af1cc5f077b0ae5e2d6049abdd0dfce35a2f83d0ee46e06a1759397a657c28ca8";
+  sha512.doc = "8ef1f9e57e05911d443123bd4393c9bf99b715a4dcab570b361e7798f714228b2782dff0705fa91e660eb2e767709b36de677b7d96c103ce674875b26d47af35";
+  license = [ "cc-by-sa-40" ];
+  version = "2024";
+};
+kblocks = {
+  revision = 57617;
+  stripPrefix = 0;
+  sha512.run = "1cf755fb680b13d5298c306698bf41cd0446f7ec8da321b065ed549c1bc83bc352bd4a44d67eaff6fd1c253b2d92768f8ddcdb6a986febc4dd1abe6884a2354d";
+  sha512.doc = "7aa79c73b32d4098bdbf6152f28de628083639fcea2b7338e64fe6108aa605662f36002d93268f67fcfac59798369d392c5c4b79adcb18d0600faed8d804d8df";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.0";
+};
+kdgdocs = {
+  revision = 24498;
+  stripPrefix = 0;
+  sha512.run = "79b64f2f20b9da908fd9acee1033fdef290c30e99794c37f5020f33dc5fdbb670383463bc17614f4ecaa1d5d4c03b4ffd3aa4f2b7c53f27455740adda9d0545a";
+  sha512.doc = "6b579a44d041a10eb9224aa80c1b59b113492cb12c121b1ca5f57625d044b52a80cbfab63d7a3160043b41b1b4e27d463f5ef8c9688f620f431fc1937a8bc561";
+  sha512.source = "256c4c4e0a8dddf39fc6ce14f17313f2bee7c967dac21910fb44fd674573de113e78b0beaaa979d3c7f3fba06ad15d24d6243b8716b0114507331f267144d6f2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+kdpcover = {
+  revision = 65150;
+  stripPrefix = 0;
+  deps = [
+    "anyfontsize"
+    "geometry"
+    "graphics"
+    "microtype"
+    "pgf"
+    "setspace"
+    "textpos"
+    "tools"
+    "xcolor"
+    "xifthen"
+    "xkeyval"
+  ];
+  sha512.run = "d68fa467a50f7d1648e51b918201b76c199920e39915a3c5fcc72cd75c4b11b0924082cf8c01363fe5af998c66ffae71137e7f9635e147ed40ed5e7cd4fd63cb";
+  sha512.doc = "880f981153526b41cc128677d950e52b4ff5449adc4fbb3b0004a983bcc7222fb64714ca033b605172fe0b52107e6cc8ff0fcbd1778bf7aa6b9d20fa994ef452";
+  sha512.source = "e67cc3eede96c42506beb03d8e4e7db1b5fd4a7ed15026a060c3a5db559c0abc7fe0f9e24c22b23d2aff7c7979005f0c26d250607129d29b6d4bc9babc0e11be";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.5.1";
+};
+kerkis = {
+  revision = 56271;
+  stripPrefix = 0;
+  sha512.run = "b4a8465264a174320180ac5f9bd89900f7a3b351af21d3a138db40b0781228bac8f8e9ea66a54a1910b3750d65eed17f74880f1c7396780dcd631eda164aff58";
+  sha512.doc = "b9c57f71b2c5e48ab3b96984b231f5ad418d884caad0a3747c78bdf0a5688c4ac05993e43707236b02650750d5b7507d39e50668b7cc16e00a35547d63d0bbb3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.11";
+};
+kerntest = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9f295c253228745bdd91db65f2e414bc6113d246242ea1717db6659c2ccbf72530fdc326c0ec499f6d6c2af3ec8df2b78965666dd8544e07bce864716804e76b";
+  sha512.doc = "b471544af9d1ecfd6225e4b9d61f05b4da950a6512ac4c4bab54b1ef9befa859ee5aee2498690e724d84313808d2abc8f005fd4e121891878cd2dbd03ae36415";
+  sha512.source = "8d7c2a8e8881f361c67ff71a57056dbabd3e0af5d24cbbc5f9e7e6e321504482469809f8bf349b5fd4d65e011049d5a67e7570c0b364cfe178b0fe377da82c31";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.32";
+};
+ketcindy = {
+  revision = 58661;
+  sha512.run = "da33a0bdc989fcb6f4521d23e5d44bae70d608ed8ac10f05d6962a252e99bbd80380afa2cbe9e02b9c652b044dfff79218f951144da6ce55f8a53033c11ff346";
+  sha512.doc = "1704411b3e7c41b6318ff6f8da56007dbf1bec67bb495d25364d6274d9b8acf234430081c22bab6ad13ffd0ea47586e6e24c9f27da8a97a309e2128ec74f89e9";
+  hasRunfiles = true;
+  scriptExts = [
+    "jar"
+  ];
+  license = [ "gpl3Plus" ];
+  version = "20191225.0";
+};
+ketcindy.binfiles = [
+  "ketcindy"
+];
+keycommand = {
+  revision = 18042;
+  stripPrefix = 0;
+  sha512.run = "90c2246edbfd199d98a05df336ee228c65f26073f3c95c5ae55c3201cf59453bb5afb95ad367ab4af6b36dc4e0c52a25bb10f80fba265003c701122247be50d9";
+  sha512.doc = "b99b58407f5d93fb868bf525ab199c41e07fcf5f31c7a6a14cf68622ef3a34e44d1014e4d34594441144af5c7d9a9853cef1505311928b32a9fcbd41c7bf4284";
+  sha512.source = "44b63a11f08c3bd47ab337ccfa1b0b2737624f77228ca1d745020e2c1ca1b1616c1bfadda1b99c362c0b372bfbdf37d839f0d0457082922a54a66608c82aa928";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1415";
+};
+keyfloat = {
+  revision = 69399;
+  stripPrefix = 0;
+  sha512.run = "b3bbbe74c5db4eeb1a74d49e0fe9608df347921caa0814faca8eb62cad674fc3977c7af1cd58849fe6abab5a1231b4ac3999d5af7aceb7655f12d883e41148bd";
+  sha512.doc = "43771371d9f81311e29be4b7ad2b1876299d6ff4ea740e9cd759a01701665bb6bd37983828238e13141e39c253b6d3d92b566fc97ba2944d7967cf55e492913a";
+  sha512.source = "89f10c6c68e6941de535abfc4e86a0e019a1bcbd2cf10f0fa542adc208f5ee8c1c7884f679d87186c2103b4b1f69b36b50e3c73512fd9209db1be4f5c87f05c9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.09";
+};
+keyindex = {
+  revision = 50828;
+  stripPrefix = 0;
+  sha512.run = "93de5becfa1b4950f518bc004f0dbdfe96f567e17ec4b7656326b89201f1f85edcbdaa771dc8568fc0c87bcbd8877b618d0d00ce387ca70036f6794a8b870695";
+  sha512.doc = "4be79367bed5a7bc3f5bfd6c10f7ba6a4c87ed51139e8f8a7f55c59ae3ce6c1aa10df1c88728f7dbb4573634bba2ee599378755cf6c77a2ccf8d93ece5540736";
+  sha512.source = "3f177cf8d323fa6dc0b47742a27cada66cc505777a20c26864dcee73c272e46ba3867c4120f480be8ce5afcfc6896d908eae0f336cf306a13019bd0f0206f9dd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+keyparse = {
+  revision = 60277;
+  stripPrefix = 0;
+  sha512.run = "f3ca8d0b78d9e20bf99e46ebf181d670fe6d936f9d91f1059056820f8be1a9be6eb6278fdda8b118a5f82d376440681dc4cf9a063bb6693df67d5e2d47b3a5dc";
+  sha512.doc = "01b6aa91350a1ebad4f37be4051a4bdc97939392a6ec2b7708de77d06a575c14fa3f9bc9a8b98ac5d73428555389aa6bd0f9439dd299c2b34e19b7800eb2a27a";
+  sha512.source = "2eb4c90abed3e2676bce4865ad4254b6f572a69edf63ba82a5a9b3c994343f8d3a3523dd465b94d6afe814364c41a581dc84d49c9e21be6dc4231c3f850eafe9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+keyreader = {
+  revision = 28195;
+  stripPrefix = 0;
+  sha512.run = "d1786b07a3dc87f94248043f0bd941dcd8dccce29132e67118d3fedc0fe207a2df846d850851217fa87ed2219915719e70fa73ec284ed420072654c578ee0b3c";
+  sha512.doc = "05c45cb13bd2612dd5b048f296437b605117c71a52cef2a1b90ad58b693a31d05da9491464ea9b208dd7eed3f3cfc96e9b5a00f5a77e5d492208fe1e924dde4c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5b";
+};
+keystroke = {
+  revision = 17992;
+  stripPrefix = 0;
+  sha512.run = "e04e13e23b3342686078c2278d3b6f7c8678d99acda197f50296ade3dd91bc4316323a669efd7238fd246c60f169c694677252601a81d9e23b49a1e37049c93a";
+  sha512.doc = "bac7f2e879796c0ccd5ee28c47aa79e9208ce0d01456de9ada6cd00d822c098cfa318615311c43b1815de0e6968252f6005a3dfd9d0475ee7dec25f7d24d1d86";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.6";
+};
+keyval2e = {
+  revision = 23698;
+  stripPrefix = 0;
+  sha512.run = "08495711a9b509707ce6da359f9743b267baaa6ba6e18e41c965ce016c4c51e1bb7353769ecc9596e9bc415976449612f602e291608d306ee5baa69a4e823160";
+  sha512.doc = "424035c6250990b4104200fdab744d50643b6ce36ea717f50544fecd40746d47d7d2145203f0d6f19652a7217c99eb599a1c7d8b0e3a0fe00e1355c416cd4294";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.2";
+};
+keyvaltable = {
+  revision = 65416;
+  stripPrefix = 0;
+  sha512.run = "733d7e2f07b07b1b7f0538f54c0dce33a706210203c9aaeb203c7c4129859d025d20a1afc973f5320102c89bcac78547213707802726367311625ab89566492b";
+  sha512.doc = "7b3cf84548c2a8d997b8cb5ff3cdf77a40ff309220fb6d109fcb8215e78c8b93f44e495f3da7d92a3e144c1635473fe8780cc45acd9e978f12faa7dcbbff9893";
+  sha512.source = "0bed97c004ebb8aa8af13d226c10fa01e00459534a061d5bb9500e7d5376fd379f67310cb169e2c1fbcc0e07f4e5c35d096ef1ab65b92a1b78481fbd7e90e1b0";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.3";
+};
+kfupm-math-exam = {
+  revision = 63977;
+  stripPrefix = 0;
+  sha512.run = "cb050347cc1cfab5e2ef5c248b6460edb50779b81216f3b9277700780922c94e44ea2c14696b470111421de1e049378811645cde6dba004c23631f2111cadab9";
+  sha512.doc = "8cebb9035b23e1919fc9428e9f57335ecfda9c98214fec78f95d665f44060cdab2aff6a9ae22eb124a6da7716e88971f559084f64f7b1c1456e95dcd03c00307";
+  sha512.source = "0a7dbdfb80a3ae91b23256839c8174b3db13ec23f3dca35bba422440897ade8b33c0ecd8d8c76367241e71abe9b12c5d69a07bb9d0a1962d080a6d89e76a50e2";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1.0";
+};
+khatalmaqala = {
+  revision = 68280;
+  stripPrefix = 0;
+  sha512.run = "78481f7d494a7c1d9312e3c11a700e43b007660aaaf28f74a3aae4966b2387088bb891cc8e73bd431ad992395f7b66a10b9b326d2262509fdac3e153473d37dd";
+  sha512.doc = "ec0f8ec3213a009899134fbf2389f9f33e2747175bf94246c0e035c424728251c0e16a3391e598007b83262353db66acc87431f6856dc1df6e784d5f40b4a2a0";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.0.2";
+};
+kinematikz = {
+  revision = 61392;
+  stripPrefix = 0;
+  sha512.run = "6f23b8084247aa807c5738468f005fbaaed59559828247f269dcc24e62535984bf7805c69aea27b889d01b2afa04ad67811a0cc8e0ffdea7e263f9ac9c384fc4";
+  sha512.doc = "b5fb6a456f042a677866f9fee3bc7a13a8405ab6fcad590ba37dc9d681e61d04abdfe6bbab5009cc1d79f73859a1fdec137c92e6c0d367b1d801ca2d41d69160";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "1.0";
+};
+kix = {
+  revision = 21606;
+  stripPrefix = 0;
+  sha512.run = "dd819518a80ca0486a191361625b58f91d00ccac88a2f69269bd6e1753f6c87dd3c97d39a14a5dc3768c9ecccbc981106eba1f495cb7870103a828ea69ed8bef";
+  sha512.doc = "3d3816d395e69ec83c88fe55801cab052b12f5e38702edafec2d3f9225c80a31165dca553b60401dedac7689c583feb00615e41c7179fd19ccdc420fbd5e6d86";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+kixfont = {
+  revision = 18488;
+  stripPrefix = 0;
+  sha512.run = "a866364705d75ab560488c84a5e403755acfffe7b49b8e6dd65342f45f852a5be9d4072d750fae606c3d5789e1d46458da66f0af6fb9f9e0225c1d9acf69d4a5";
+  sha512.doc = "ca250703364924daf9827ddeb48126fb21ff5ec3230afbc3f6778d23e96dbbb16173e5504900032ddbe14920cb40adf8130be50ee92f3c9c2dbceb95b8ecb90f";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+kluwer = {
+  revision = 54074;
+  stripPrefix = 0;
+  sha512.run = "25210201032ab5cf867e8e46de560a2232e36cb636db8d6d533a6052ae125024f2fdb3d016aa68d49d5be4ded676a1e02108094c366fbc9cc443035edbc82107";
+  sha512.doc = "0908a60833ebab53fda54708cb332f0b3e2ed6c071daa1b231570c6dca57b09b6c9e7e52afb606300b04f9c42794d6d6b7c2387ab35fdebae0ef4d346ca068e4";
+  sha512.source = "12f20e51c0c7668761c2894ac6559f16f853c4d255331db36d9d50e21ac92103828d661d2df8358de24c8403f7a0292866ed4edd5c64e54e555e979475bb5adf";
+  hasRunfiles = true;
+};
+knitting = {
+  revision = 50782;
+  stripPrefix = 0;
+  sha512.run = "af3f7d2355054293c2c7973cfd40f0b741c8821884cca6ceec7562efeb92433bb81aa204b7b0ed4dae77cf674f4a63005f36133fbb5bf3d239f0cd5ef61a69ac";
+  sha512.doc = "effaaf06a5593a9d73f2e93a722355009a0a957a2067a1432edb40d8dda7649c42571cbc37fc7aa4103ae2094dea7b1bfd861273566102c55546f71b326e7118";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+knittingpattern = {
+  revision = 17205;
+  stripPrefix = 0;
+  sha512.run = "cee26b0e6fd54a43a12e0e48fd5b4bf381816dabb6019cbd7c13ab5e2561b9f191d9fce4c75a513c06530077bba8d383b26552e2e6f4e97600aa2216547a08b5";
+  sha512.doc = "d391a25a224713092128af5adf68e5331c530a67a763dc37f657d8bfcee0d904632e86ae2f3745ec2c4bb0cea5e886c85da15b064780dbe997104b9afbef9e4e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+knowledge = {
+  revision = 61991;
+  stripPrefix = 0;
+  sha512.run = "dac315840aaabc1efb96d52d96e1ee789f61c65964c0343fc35d340694a3f13f7cf9e0ab101bbead9f3d25ef9e3ea2723916864abdd192a89c319a0370b566a5";
+  sha512.doc = "0f95f35d60513fb181efa2d5d9579efa000838647b167521b364305774be164731c4c09ba4fa739ed3749cd5c43b19b59cd417f8237bbca2f930bc4b22ba0c68";
+  sha512.source = "5843dfc2fec15d5cd0a57eeb5aec12bfefa2914bdb8f4ebe2522e6576fcbea73f5663b437ff2654f8ddd7d6f8ef92ecc8aa96c59bf7d76ac58029fee85e1bb8d";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.28";
+};
+knuth-errata = {
+  revision = 58682;
+  stripPrefix = 0;
+  sha512.run = "f74443cd6bd0ebc039ff7eb0f5df2709b28c34c1fbf49793ee6d8ba2477337d8b7d0072573c32d67da17f7796efa058aa0d2d7cc2f7e196111c9ff90668ddb97";
+  sha512.doc = "86abd134ee7d4afd4398735964c83340b67edb9b41a960d205aacb3dbf1c702a854eb469d3c39b06a7ed1974c8e2a951dcb1c3fcfdeb2c394b7d21e4205ceca4";
+  license = [ "knuth" ];
+};
+knuth-hint = {
+  revision = 67373;
+  stripPrefix = 0;
+  sha512.run = "ffe5a785191fe8506f59557546b3bce29a236ed5e23a6766941b37dd134bd00ff1ec5dad0278d837bfe2cf8a0e69e5ab5921daa320184ee259580c9b41d92ede";
+  sha512.doc = "5b47b3cbf6164bce8cf6903702b5a6ed93fcd13def2de2e6b30e3c8e758fdf076a1c14f1bc452768c9841d967e932a6597ff0a1a7c9140ce2100036fa04f031b";
+  license = [ "publicDomain" "knuth" ];
+  version = "2.1";
+};
+knuth-lib = {
+  revision = 57963;
+  stripPrefix = 0;
+  sha512.run = "47d50b1966dc5a3adf4921c297d9ed5917035e917098154fc08d1c72ebd0ba70ebfa41735c7ae52c5087d62242bcfa9b0b49914c6da4f392e2d4c56a6d72807d";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+knuth-local = {
+  revision = 57963;
+  stripPrefix = 0;
+  sha512.run = "91962f359e8b2f668130a6511e7fafad26a0c4c14a46f715172aa28723f743e08c50be666cadafd7a591f2283daec4fdd45039afc714115077667b66e67cedb5";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+knuth-pdf = {
+  revision = 67332;
+  stripPrefix = 0;
+  sha512.run = "ab6e1db43370a551700c4ad8ca9e3787a7be7a06da2a72fd4cb0faa7091fefa1847d143bdf9c8d603ad7d307495ad34faca4e5ef054fa011d0137ba90f888a5d";
+  sha512.doc = "0f16994ee8e64478d01f7b0f2c54c55369b5f661abe7f4db347cb2b7d146c4efbf337e20fd7eba1cce497d8cfa5058bbf4c013073028c364678334c524aea155";
+  license = [ "publicDomain" ];
+  version = "2.1";
+};
+koma-moderncvclassic = {
+  revision = 25025;
+  stripPrefix = 0;
+  sha512.run = "68aa7ea875f46a4c1d1bbf29d4abb77f4ec729242fab41f3e79caf95a925a076ec3d37ce7d98b44aecaaf9edce541d1673780238786b36cee0621acf4212a1ef";
+  sha512.doc = "968f5303bc7b5fa3df39a2a44c38b63e54059a94ac7df2349b45cbc0855d22ec64ec39feaafd761515720d306d5e5ea8a223ca74790ba160bd093f989d8b69c0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+koma-script = {
+  revision = 67573;
+  stripPrefix = 0;
+  deps = [
+    "footmisc"
+  ];
+  sha512.run = "0ad55b5765ec907f39bbb8bba7deee4a131d76c81a0e7bd7379031c5a8771d47c121df5a55699706c886063a12bdf338e5b47b6a6784f0a23a72891a07b322b9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.41";
+};
+koma-script-examples = {
+  revision = 63833;
+  stripPrefix = 0;
+  sha512.run = "03941b9cb516d836b59f493e1e6af7ef409306cc567ace2abc467c7b6c73156819fd23212668ab5506c03697e29840073162dff5f912f605354cf9851ab6dda8";
+  sha512.doc = "d355edd3348b454015a390449e251bf476350385b062d314d9e924b187e85802e815cca97c550073605ec3a91a38a15d2a9af79b7771ec74557067dbedebdbff";
+  license = [ "lppl13c" ];
+};
+koma-script-sfs = {
+  revision = 26137;
+  stripPrefix = 0;
+  sha512.run = "3b281a1e94c73e1d8224f6ae552be91e3df344f9031e139334fd7256e38dc70bed4132164935845c710bef9dfe0e8c439c229d3415ff835e48777aea182e7fae";
+  sha512.doc = "84f7fb5c11c9b40029bc481d34ef7cca39baa2a3872f22fd5b656e324aa5cc0becf3ff6d894ceaf26e8ddea0d8cc14d428a140e1f19ff2e060c6d32390d51070";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+komacv = {
+  revision = 57721;
+  stripPrefix = 0;
+  sha512.run = "028e8d2a7e5ea450ad8d6f2b14ad0b84b319db0a234f03f8a6e1efc781fa7e60a67a67e4aa5cd101eea59e2c93a073b635d74bc6443d84b01599575466994a6f";
+  sha512.doc = "d016f4bd23fb08fb932c3d1516167619d239f8cebe8d2ad8e6fcd07aa945c2df17d6e05e5474dc5522ce4bff1d72fa7879bf9dee4348eb8aa8624d1fe30ea86f";
+  sha512.source = "ab1dd4f3976bd0b1a81c7772a92f1c015f2a0a662c65f474bc36b9bc6edfce6756f428fe9e45d969dcbbbeda41a0b1ffd463c3fe5cb286fa9722de22c59847c6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.2";
+};
+komacv-rg = {
+  revision = 49064;
+  stripPrefix = 0;
+  sha512.run = "6d400b0f228d42aaabf9527bbd3447fdf92eeff81f1fb7978cf90c3afa9835e4731a9da938bbece65034476ac2e2f7afff19000d9012ddd76b6f65618bea7223";
+  sha512.doc = "58236086df2335cd167a5d475cb0e223747d43d81d23c0c0ace1cd711a19ca371426d36e199d69a9fd5414a33872dc4ab3725850a6677440484daba0e55d5208";
+  sha512.source = "512fbddc0b233061afd3a2af20846e8eefcb9d1dc00b29669e45499b62289d842053201b208819536af0a2a7db56cfbf2346210775412035fcd13d2b2593dcf1";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.9.2";
+};
+korigamik = {
+  revision = 68204;
+  stripPrefix = 0;
+  sha512.run = "8218a2e5d09cc572c3e3bcba6d49ad9ef9be5016cbf2f3bb57c7f649fc638f718f5d91c09c3d9013ac182e651b0c53b65c7a118a021eda68a53a1e8641a0a8ee";
+  sha512.doc = "291a1153ed32bce9c7b845a40b4de3f63715f2179765021c1ac3f678bf1594a0abe405824099826eeeae30a90a5fd773e6e5aa91fe66a08ed47c91f371fdb6cc";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.0";
+};
+kotex-oblivoir = {
+  revision = 66513;
+  stripPrefix = 0;
+  deps = [
+    "kotex-utf"
+    "memoir"
+  ];
+  sha512.run = "ec9022c6f1fb3d888e7624f4ed311327d9f0b9b569f7eaa078d03c275027edbb4cbcf5785d155ec9cc7c68ea1f93f5d527cc769a12609c361250d5bcaf0d9d42";
+  sha512.doc = "28d6c7c2ba61c06258020dce099ae1ba339ff1a6c0a1c9b350512914fda062d3cc612cdb4410cb3ccefdef0f0700c6f724a35e1f8c5a0fcfdfe16c090322b59d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2.1";
+};
+kotex-plain = {
+  revision = 63689;
+  stripPrefix = 0;
+  sha512.run = "940f6672fd2d490cae446408ed6421c77ada3ea9c0c4820b00a0b38026ed5d30fa2b0f8bf86a5904a8c04b15e561e3f146ae4f817e7e2ef8c3a9284f9c841350";
+  sha512.doc = "34a45ea6cda9fa9b6ba453fef795740869b1cc3c3eec84b467847b7221a916f4eada3bac97b78dc6e5a545e12f87f1d56c3540fafa658535f9ca89335bc6b534";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0.0";
+};
+kotex-utf = {
+  revision = 63690;
+  stripPrefix = 0;
+  deps = [
+    "cjk-ko"
+  ];
+  sha512.run = "be75556f3857a405d235f920866f8089f105a57f9accff07a541fe110bb8124e049ebe75368ce3282bcd329cc6a02eed0ccffdfad49020986d61221839cae4b5";
+  sha512.doc = "7226874594b10ee48e8aea30a72e6d6f4db9f770d5d5830dc83a41f828bfe36b0b11f679aff02722e457150548860f1ad719758e6ffd239bbf9ac18d907acded";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0.0";
+};
+kotex-utils = {
+  revision = 38727;
+  deps = [
+    "kotex-utf"
+  ];
+  sha512.run = "569e9677ef0f346e5a53f4cc84302a8ddf2b4ad85708f4ab8ba7d076ebf339ec60998a41fa92fa815167e9bfc37085ebfd921dd13a60b017a0574e4a5d205802";
+  sha512.doc = "a46c5d09d119fa2fe8b9acea87a37776536e3216b776af6b7037fc5b0a522af5c1a58baf081e60f06c9a4054e8ac2372458c276c779038a030dc92efdfa3aef6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.0";
+};
+kotex-utils.binfiles = [
+  "jamo-normalize"
+  "komkindex"
+  "ttf2kotexfont"
+];
+kpathsea = {
+  revision = 69121;
+  sha512.run = "08b2ebc546de9615927f9933937c81a5fbae702e20e389055c62f13b70ce81a87995dcf402d8b94d0025eea80f9fbc1500270b615fe3f26f1e9c12a245dbd1d4";
+  sha512.doc = "17687e289d912120a0dc0b79829145521dcb660fee024f249153235bb2591936bedae9370ff20d8eb137d54d40d73d2854e4312651eff8a6763bf70040e0bf47";
+  hasManpages = true;
+  hasInfo = true;
+  hasRunfiles = true;
+  license = [ "lgpl21" ];
+};
+kpathsea.binfiles = [
+  "kpseaccess"
+  "kpsereadlink"
+  "kpsestat"
+  "kpsewhich"
+];
+kpfonts = {
+  revision = 65583;
+  stripPrefix = 0;
+  sha512.run = "d4d035c30acd5d5731a16e144cb45df6a3ce12c06d290f50c9e721ac67aa4808eade4eeae4c91a5093e29c64f91ec4d7a8d65d42307238c472d87d22eb5298c0";
+  sha512.doc = "d030abf78988bc21f0e4afc06f0fda95339864036883877f5ceec11210640fcea8cd0ba54eb4d7b7dcc33b9eee8a0b2593739b4e2260b9db6e23cd480861e79d";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "3.35";
+};
+kpfonts-otf = {
+  revision = 68970;
+  stripPrefix = 0;
+  sha512.run = "d2519e9ea6aa8cb660d2fdd69e6e686c17c6111eeeb313dd163dc3dfc4ea90dab4abf41661541a461c6b7536062cc6d30f8bc802c2c86850b88b19e64b5c827b";
+  sha512.doc = "ad75e243de2644d48130c75923953368ffa09144f7b8e67738e2cc2e065026fbf1762251fef84ff89762f40a86ae1f1f6cb92b4a09924036fa73a004921acdb6";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.61";
+};
+ksfh_nat = {
+  revision = 24825;
+  stripPrefix = 0;
+  sha512.run = "8893133ed49c9b4ba7472bc80a4e5583ec2546838e261fa2cf9aee188a0b00bca45de05c4e969af0b6f222a9668c3a7fac0caadbb180c10500fc53ae8c9f56c6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+ksp-thesis = {
+  revision = 39080;
+  stripPrefix = 0;
+  sha512.run = "3a250167d8810e3e81c5b6f86dad57e191a2a8387b5c7701e9b176cb007ebed79bd11867caa63e9cb9d3412fd59baeca7ff8e7589b11c4ef1144678552957216";
+  sha512.doc = "ea4ff7ccabb237b113511b58ff767b494b213cec1382467ea8b95b72abe9c0d361f39781940c976075157bae93e8e32364f716cdba2a07b8a7d72c0970a31cf9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+ktv-texdata = {
+  revision = 27369;
+  stripPrefix = 0;
+  sha512.run = "c2f3e86494993e6e56f131b9e7105ee2d15179b96580982ae7fba9e32c3e9889159ae767d96d95111f2eb052bd61f0c3c15406ae3af70b359e3b5ce081a6978a";
+  sha512.doc = "d930db31105dbcfe3df4184422115d82fda7efa93d00eb8f9fefa0eff3893602fb4db9e7be26d2a44c0b3cb56e8e9810f61bc660c15e49c23880c3f0cd44025b";
+  sha512.source = "1f7eebfcdbdeae66dbff4037a01173bc9383f75b5d7704755a10c442d63380d286bb4532546e036d5c558dc399defe3f9d3d035bc67a5ba90f8482e427b507ce";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "05.34";
+};
+ku-template = {
+  revision = 45935;
+  stripPrefix = 0;
+  sha512.run = "4603e59129f749b0eb065283bff9cddcafcd1096627f196749be09c19a4a79848564ee9343f14f31dddb2e37a01e222bf08531d5b3237bb906cf88efb427fdb9";
+  sha512.doc = "6b8535ef84bd1ccf70d16f7098826b5acea602b22cd461df66cdda64c4afe36f9ef6c4386227c5317a31767e4694c388f7a2fd87fe8fe06697af4bf5202b29bc";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.02";
+};
+kurdishlipsum = {
+  revision = 47518;
+  stripPrefix = 0;
+  sha512.run = "d7160d78d7f0d8d7771740f030cf1c76b57aa9ec2d179887fe4065337e35bef528b522c666eca0974aea6696033678dec5446a9a198fb139f2d2469c8cd47eff";
+  sha512.doc = "6af516595f4cc5b090398078977bb37e97a5aa4b28a578c068931eff7d34fa2cac379b53e70c8bcf270c998fa6fbcbe354b56d0299657fcce9a4e076a87b36d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+kurier = {
+  revision = 19612;
+  stripPrefix = 0;
+  sha512.run = "4f727e8733824e8c516e3ab1286cf0c834413a6ab52bccb5519c9a14a526cd3397a6d0a264679dc8b7d80cfc1d75ab11dcd2c02734ea63d5a2a5cebd3ea3c24c";
+  sha512.doc = "7fda14c05f105d341a31561e761517ce12b3e5ceabc01e0c5c8552ddaf55be1863a22545b268026c844b23f03e8700350f0dede79ca8fda62e7a2672fa510407";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "0.995b";
+};
+kvdefinekeys = {
+  revision = 53193;
+  stripPrefix = 0;
+  sha512.run = "2a03840307805bd6fe30be9c108982bc472912c11c8cec25737ebc4042e48af8fe4f1a76124536874bea8c554f003a9c52b8a72d2f6900bc6872ffef8649c40e";
+  sha512.doc = "c540045ec1c8bd7fea3000dd0ebc8adac64da7ccc24b0becb9b9c32c9dda6e5e11a77b57bee667bd2ddbddf347bd8af069907e087d543898a92ebaedf3fa4b7c";
+  sha512.source = "0944a3f6f8e8cd8c189767944a74d5dbf09fcccd94cfdd2e67018f4a3542ce2ca4b8b7e3cb440345eb299584707962ed903f2fd8c832fad6cb850b29c7a99af6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+kvmap = {
+  revision = 67201;
+  stripPrefix = 0;
+  deps = [
+    "amsmath"
+    "l3experimental"
+    "pgf"
+  ];
+  sha512.run = "ea3659bf10ca08945ade08c52b4eba46fa01e28443bffd672a1614f917fe71f68a63d98568e23266d7becf6f6a4fed48f2d2367256a39e956bd2f1d40aff6f71";
+  sha512.doc = "96f3738d31a6d9fe8f8f8624448749fea3aa2d6edac1442eecd70d570954692eb9e1756c1b4f4cb02a8dc17cde37ea0012824fccc5b567250c8ab6715150c796";
+  sha512.source = "24103e29f4268d4ced68d5d1bb342c0e0155fe56e1ca07caadeda841795e44b0b246d2cc39a97f8c683a9ba71160ac774bcd194177352d6e29c079921c43c5b9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.5";
+};
+kvoptions = {
+  revision = 63622;
+  stripPrefix = 0;
+  sha512.run = "8e4189334b66ed38279ec0deebb12769453db802b1538e8ef47598de08123006a5f65b4b86c144aba5c7ef21abb95c65196e314e4b80e9b513103354e4b29619";
+  sha512.doc = "864fd685912d7bdac610c16508efdfadf82c9c2efb8ae3c9b5a0d16c1dffd91822a1389109b3de1ce63dd74bb1aff5efa534c134ee06f1e61df9c867aeea608d";
+  sha512.source = "38168cf3c486866ae79eac1708ed93f117187cd7404d852020cd9b70b3a518ca50d641db564d5d1d36b7e2a2c9beaab27e45abce93d01db4c37de7d9ad36bdf9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.15";
+};
+kvsetkeys = {
+  revision = 64632;
+  stripPrefix = 0;
+  sha512.run = "8acc4b9069c3baadf9a9802546d636fe8268afb97416b47d79b0a0306d90104fbb86b8ec1b4492f3134357564bb81eba1ae0e84a38f5b94a556de45525777431";
+  sha512.doc = "127d4a03b26c9adb92254b08f0aac6039e39ff961539e253bccfdc1ee3598dd5e10608b8c8909708c041f5134c549f9af550bd1371a1e7b90003f77ef53bbf33";
+  sha512.source = "696e78c295f0ac2a4d4c69e0d855925d46fee487da25ff238546033cae5e3b9042f66b924d1535ee41afc6142234fbef63ecf4df5b0c6c191b395109244e19e4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.19";
+};
+l2picfaq = {
+  revision = 19601;
+  stripPrefix = 0;
+  sha512.run = "c6ea1d8ac189784d6581eaf9cae83a83beba9adfd32536f43c04633f7cc457353f0dbb69407332a29856633552910bfdd31cf85332c6dfb05da2cbab88ec67a2";
+  sha512.doc = "e4202740ea2842296338e9d635b27c35801f4a5f8b21eb8dc0c1db572da0718fc5adcefc5c122793618336272606ec27f02f13825f8d2a6cf4b83583ea372288";
+  license = [ "fdl13Only" ];
+  version = "1.50";
+};
+l2tabu = {
+  revision = 63708;
+  stripPrefix = 0;
+  sha512.run = "2e3dc6f2707cc6b9ef6daba6f18099665e279b90ac85d6c391d33dcaf1511b1d85cc8348b259163ac6fc96879053364423510b199da3af81f1fcb2674b983db1";
+  sha512.doc = "c6913d96a1821725c0d1a91cabf2db7a8afe692c1dbcd23113c3df63793653de48aeedf142d2dc81ec81c863d16583767766955a7ba0cba0de09840b9d3f74b6";
+  license = [ "free" ];
+  version = "2.4";
+};
+l2tabu-english = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "66e1d62c731a021c1be2fb6e9e3034c7dec59edfd03dc2bb0042a37ff6f0d967e59a023fee994f45cf2c9b15e64445b45c48a207e21b7edb81d8a538b6c8eb6b";
+  sha512.doc = "250ebdbd2a6dd3dd7d05c35cea0ea8fdb969bef983bc0a5f2c804129091f22ac0a499df482a1a990bf278ad94befc774d354341b30f9a0cd67539e1f63074ee4";
+  license = [ "gpl1Only" ];
+  version = "1.8.5.7";
+};
+l2tabu-french = {
+  revision = 31315;
+  stripPrefix = 0;
+  sha512.run = "8478211e871e38765cbbd36f8f571e63b5cfb9dc652107a4a9178c11a16b419eba7314246878507f22bf7f66818f8c5d1516a527deda5a2dc6c30f9260f23b59";
+  sha512.doc = "f489b0bd07b60797b53fc9010c699029dabccbf326767948dd815224f1c591cb59d6da7bbac0d0385ddfb6f0e885e187b2385bfcdbb88933588b06dfc34f640c";
+  license = [ "gpl1Only" ];
+  version = "2.3";
+};
+l2tabu-italian = {
+  revision = 25218;
+  stripPrefix = 0;
+  sha512.run = "5b2348bed7ce47d7e2b8de6642e14b24ab440226d0de46a51eab08b3d11a39bada93d890e1ab9e2dbd3ce253b3263460fe7114baf9bc7b5c775a7d806c731ab2";
+  sha512.doc = "c76981112631423d5d92ee9236d9b5b076e3d71086f9dada77de51362a5d5e01d82d5b018a68950c2b7f4b10eff1882d677243594436bae41bcc6ab996aa900a";
+  license = [ "free" ];
+  version = "2.3";
+};
+l2tabu-spanish = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "73cecbb031be2d421c25a7d6a5c04d08e30d83a88b4132682d434a879da915f1d4af56980f1bf04f7df5a3e881ecdd940a058a2dcf89b5e9f48c378eb322da06";
+  sha512.doc = "a6886d54c0f5e1915ff9efbc4974ab1ef7f6dc026d67a0596ed47ac9e94da098e690bc70d5ed3e45a4d8cbd0f877f0cd6cd3a3757288dfc2df284e9c040b7c1e";
+  license = [ "publicDomain" ];
+  version = "1.1";
+};
+l3backend = {
+  revision = 69310;
+  stripPrefix = 0;
+  sha512.run = "06481bcaf4082b3f187a855eedc32abae8423ad5020911ba1ab10bf937c767f98ea8eb10f6a83dc41af126facf72bf4a52c9ac61b9a1d2b9065c4a20f86b617b";
+  sha512.doc = "637728bdbdeccd2ec5ced361941b7e9cb560b53dc2ed95755d7a4da45d22004923c034e1aa55b9ca13c2b8d7980f99deead19774120a296339402fd71c9c7948";
+  sha512.source = "16ec201e41de548e9d6b65dba8a778a30a88729c186c18079e50dab46b310f8313847ce5e4402dd71a01dcde8a0e8a74ce96336403ef53adf8283a5491e33223";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+l3build = {
+  revision = 69360;
+  deps = [
+    "luatex"
+  ];
+  sha512.run = "d69d48f9720187457d38db15492d2852990fea748a6ef505f244469185862d9c167e82422056839e7dfb22ad1a89d123711ee7c756197d1fe393d4526470d51c";
+  sha512.doc = "8d53dcc007176451d00d0d78a965b8f88d6bd1096ee340da14198573704304f1c9eb87de466a824871345c2e7043445631d7eadb6916e5cd13172e089912efef";
+  hasManpages = true;
+  sha512.source = "8f53fd6835cfcbc22bf88be42afe97f92d007b89d2c9dfd745cbc23037a94b77a0a7261837bb77901cba7f52748c904bc0e009f253f68aa52aa8347728c2c7d5";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+};
+l3build.binfiles = [
+  "l3build"
+];
+l3experimental = {
+  revision = 69310;
+  stripPrefix = 0;
+  deps = [
+    "l3kernel"
+  ];
+  sha512.run = "2e32434ce1c2e485e879e87cd1becb8374d54ec818b321b17d85d0586382351407c3ba0b246431dbbeb16994f525f5ecbd127465e7bb52ac96e7333d3dbf50f1";
+  sha512.doc = "6834b31fbaa7546a7bdc066134d85cc310609c3966905ec654b86cc590d26a55939e760ca5334b7ccb612c27836a9e3d876ad95a3d15f6fad4bb4bb6269faac3";
+  sha512.source = "e278373263b43924aab0e45c7e0a8fed54e907d5756022253b9a70121d0b2c978030e774fd52e72d240b5c15a05fe2c4c926d5cb84277ae9cf40021b80c9fd81";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+l3kernel = {
+  revision = 69310;
+  stripPrefix = 0;
+  deps = [
+    "l3backend"
+  ];
+  sha512.run = "254ca061eef5d18c856c4fb2ef00240fbf1f85b7459739b92787a99ef2c36054ce2eda2629ce92305e0e6c8b73f85074c691595d88a0ad035594307d60b2d5fd";
+  sha512.doc = "71265e9c6834c69c2945810a7aec93d7c5118b5ace790d9aebe846f86dbf62652d19d5fea2979a0701c0ff6a2c2c5bedf55a20a19cc8d5944cbd7eece3061d65";
+  sha512.source = "e2416ae4337acfd241fbd1f8b5a2d2a60c0a3838933404ac48e36c7711d6418efec041a5d8be58383a49ad0f6f3e38d8a522a0bbf9c4b589b4bfe46c9d174b6c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+l3packages = {
+  revision = 68507;
+  stripPrefix = 0;
+  deps = [
+    "l3kernel"
+  ];
+  sha512.run = "aaf755351982e89531305e3f7a037db69e15b1b1eabb4140cb7a3a0a4db7c9604222cf0b9622d05b7637da310634f4ca1f00ab5941f51f152eb46b77165e4c92";
+  sha512.doc = "05231cdbc1f9bf3ad9775893099c46705f155a15e3ce9c4e8fb3d92422a3bd3dce9d05cd89e6f45c1d2afcf4c3dd469995e8d156e045d95b2788a4712ad5f094";
+  sha512.source = "642810f1d5eb19059e0d5541b3cf98c6e7412c1cd3194d469eedf9df5d53ba8c1d0f3ecd382df18637408648d252c3c52bb6e730391049626d8dc5076bb3b7e7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+labbook = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "92bd582cc729bcd3cea6979771e934d5a4a194536ff89a475309d3999ab0a2ab70d5ba5be6f0353e97498ab4e971e3209df9a3ca4ac99a8c9de27586a0f4a3b0";
+  sha512.doc = "98758f4cc186df470e8a16b2e9365f3bec585be18c0fa8700df238befe052ad69b697357c7d89b19233a9cf2b308c29a54bf84215fa3ca8859111b0214971ed2";
+  sha512.source = "23b9f993dbd431328590617c6715bb082cd1dac757db003b05296d318a002e85c8c541f5ce6a45703fa2cc481c7af98fe41e483c77b5025e50de324b68fcf525";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+labels = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b1cd175e1c5ece09926ad3fb5ef3b2dbc528435e26c81df563f674388083b481e6a6f072724254302c243a640960a942a6b356664675f4041c94962155f5ee62";
+  sha512.doc = "0ac61f3a1ec027dd3631a4e6ffabdbf71ca27eb19c877a0beef8d7d991989d613769474e99770e9edc74dffc8b59981da8666e5dcb26450717be37b098a028b9";
+  sha512.source = "debc22ed66f978aed88c84a0756677cc5faed39ef47ad37f8fcd4d6dcd02ce6b3a582ea6edc73ddd96ae04e7a50d43eddaba8404ceadb8c49439927f41f8c210";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = ".13";
+};
+labels4easylist = {
+  revision = 51124;
+  stripPrefix = 0;
+  sha512.run = "1f792dfc8c3d51cbb3ec4370e4ea36612d503a9a92d088f0d8b03ccc78c480118308aa48e4dba66dcfd55c8a3442950242742eddd557bd6b44c925e01e361163";
+  sha512.doc = "1ca630c5aa01e53d6a7fa65d9ebb4ccf5bc43af7d3cb66a6bbb287398e28764dae0b535eb4b821c2c406e22e239e8a88fc63a010d4e79977ef6e8cfd563afde2";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0";
+};
+labelschanged = {
+  revision = 69400;
+  stripPrefix = 0;
+  sha512.run = "9d40f477089880f8e0c61f95af1e94848dbac11a8ea5ee3a0c0c33a5883a8aba4c0471d2e23319667aa0dbf0699599372c8267588247809f316304e868ebaaf5";
+  sha512.doc = "ca1f6dd7d4be5c9b130a17c75cfe927e354ffd5756bd893ef99c2f67dfef69a585e139d9d3b44e0828cf0928197bfcc8a909e5a32ca386380ca2a203a8ad0fee";
+  sha512.source = "e3e5187658e31d0391910a1d4610cdb5572ddf13006423aa673475e165b04bcca56f6d324f0b383a6e7faf0a3263e68f5727c39eef38e903ee2950981c5b290c";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.01";
+};
+labyrinth = {
+  revision = 33454;
+  stripPrefix = 0;
+  sha512.run = "06c61f5a0a2b39d644d5b741877f445dea48fefaaddfb7f60251ecb328f16ba2ec6f09731608ac5ca7b288fe77fc193984dad25b8f0ad0da5f35bdd43fb2f8ee";
+  sha512.doc = "980a3bef8b8eb51cd454c835ba09205f8dedab92f747db9704c72d5433db75f68df298ee4ca06c6d68e0cb4c4b733c882d14bbbb9d877406163b0f95730a10ce";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+lacheck = {
+  revision = 66186;
+  sha512.run = "5a27d940fe59c61539d053bc6602bf37df1f538679eaf34d0e8b3ec3aed74ff619e4843ae2769aeafd10074328e9e27255376bc9e809d373d3913995a2a95b87";
+  sha512.doc = "cf4355d56985f9335270e4280d10602299fadfd01605e83edb4e8b89cf0d91b3e8ca671257a9599d5f5578e7a85140d390edd40c3b109f77bb9fca5ba47ca517";
+  hasManpages = true;
+  license = [ "gpl1Only" ];
+};
+lacheck.binfiles = [
+  "lacheck"
+];
+ladder = {
+  revision = 44394;
+  stripPrefix = 0;
+  sha512.run = "bbe2f94442a4f308a416e9d849f9e4b8af12387e59e73931b563d5daaee312dbdf82a99f5122de897cb069a54f3bc13619e719ed717b38db4aebcac72c2c4f93";
+  sha512.doc = "1cf2a2a2267e819c9ee723af9cf51d711f778c3583c859eb01f2b2faebfd0f7a6fc4f4ab6caa83a9df6a797175ec27d29f0debbeaeb39387954070623ab60b29";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+lambda = {
+  revision = 45756;
+  stripPrefix = 0;
+  sha512.run = "54da97daf172e3dae434e75425b80d1c617ddc9991f6ee804cd812e2c4bd70b49eb1a01318e243c10998870877d4f76e084b5ef0b0eaa89afa66f77a124a7c02";
+  hasRunfiles = true;
+};
+lambda-lists = {
+  revision = 31402;
+  stripPrefix = 0;
+  sha512.run = "caeb3a547eb68d3e255d729cb6ec390cfaeb3bd9d4b4b6e8f877140fe24f4ee3ff0ddccd4107fa836faf5163d3d71209fed4a9e052d3329ff22a892d62b43b92";
+  sha512.doc = "846c403f99194a19cd21e4d7367a1b43a8ad608055315bb36a1113fb37dd3d922dd8c5cb8474ae52ed3006be520b7e9023680e85f0dbb17f69a41c8c17e81a5c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+lambdax = {
+  revision = 60278;
+  stripPrefix = 0;
+  sha512.run = "63ce2370079b4b2a286355d05d40771658e35fef085570aaf07d264d81571378a6d76db128e3fcea1c6c27632cb37f317ae28300059027979114e9eefcb5cf53";
+  sha512.doc = "203a8ecde6022efcaba0680a507833ec56601887b47dbd563683195b828cd246d55cc9a44b91cb6ec2a3d0b8d7ce6d0777aa9519b93ca2b4b0f96f643df35dd9";
+  sha512.source = "2790c5696eaa95b18c4c301d3a72d5aa0a72566cfebd514dab3546738897f2d0aafe55ef96ba51073fd07e98f0052eaca4cc9bd8d46f5fd9cf7b544b4f103c64";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+langcode = {
+  revision = 27764;
+  stripPrefix = 0;
+  sha512.run = "bc3e601701732d3ff533a7415446c2aaf7306732fdd6a8ac8aee6571cbdfc02b38f51fffde3a80cf5df6b0dd5e649971406f76d394500a74f1830139ea0bc0bb";
+  sha512.doc = "7ac261071a2902d1e24cbe4bd43bf1baef418bdeb4d3c1dbee4db273d29918649f346e97b5ead3e3de2820110c0cd11dc58c78f765dbd07f7221f28ede5242a8";
+  sha512.source = "60baef83840b42deb38d8ae66e18484e4a0431fedd23b1a8dc96c426840ee57f37ab613d93409c3ad8660eef2e759757daf39ec9aace30350623accbd21d2de8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+langnames = {
+  revision = 69101;
+  stripPrefix = 0;
+  sha512.run = "16d4b14025e142be2c0d21509041d99ee2eb9b4b765abfa3102cf79759c79e79f43191f8ba1fcea3d8c7269bdeb6feb0a9efafb1f1ea195b58ed97a307386bdf";
+  sha512.doc = "0cc3548f9a640e3c6756298ff609bc5458f30fe096fb8557881356624dcfc6f81068af21731df3c5635381ef98c9b30c1f297213b8489e2bab8840c78f723ed8";
+  sha512.source = "dba944b6330ed6ec883ae6bc0fddb724b74d5ea31d703cd89e85e9cf91642d9edcfdc4710e812bbf658774611bb29764fa8e2a3e1df678e70aab6fa160cad50b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0.0";
+};
+langsci = {
+  revision = 65793;
+  stripPrefix = 0;
+  sha512.run = "88f33199c97f3f8a6a8ce174caea01f299ecf7230324d5739bf02d7e5b42db36736d1c17730a2f27f6d114490b5c1770a6da368ec1dd983791b8a67962136fa7";
+  sha512.doc = "b7b18248eb59015cdbc489b1ff9c992493e5a4453b4703223586367787c5648c640bc8946d25e665acf88ac376953f2e22f61cedc9ba53d9d8e4a47ce89e9b33";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+langsci-avm = {
+  revision = 66016;
+  stripPrefix = 0;
+  sha512.run = "00cb724f7783d4f6d088f38bd60c816afe8c117b338bf3ae320e4b8118416f025b535989a48262d13d210087560ae01d850f2562f3d75db38210fcb6c012ab38";
+  sha512.doc = "618e957df349847fd4828b07ad44e9a8247bcaba893704379471afbf9348c310da92fde003bbbe963b3249ba532982483ad7eb53950a5f39b27f9c17058f7bd0";
+  sha512.source = "bd2a2411ad9e5d418f33b3c758bcc7f572aff8be2a8b757c247bf099d246f4b658602cdda97e12de0e784259e13b3e4840b5789baf35606ebfc3baf2629bea10";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.0";
+};
+lapdf = {
+  revision = 23806;
+  stripPrefix = 0;
+  sha512.run = "10bb6891b82334f7dad4a1cf48c78b2b55c3b4a8939628a26576e99495f00e2bb8ee82028b13db4de6224e58e421402794feb2591842030cd47898506589ff6d";
+  sha512.doc = "6e561e0d513f7b18e4e40d11fc1f077a061e6cb08ed072de1d186bb86ab1fbd3905af6a79f9dbb0c201e437a1a8716706a83f1709d580c293961ae454699c9c0";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+lastpackage = {
+  revision = 34481;
+  stripPrefix = 0;
+  sha512.run = "f4d30e327704b32afe1bcb81023a247095203a9b47357f9a6dc4b631f4bb669255ba899cf1c8378b42ebd16f2608d8a649a0999f26e3d05c963eced1cc955ee2";
+  sha512.doc = "f31731b5a93c154db123e66699ac5175fb63b965522bb511d344577645f9b8ac6d78c6a1a108cad8914b1c01b1c7a6e656743b075a03322c306aaa5417f62be2";
+  sha512.source = "f894a701e4f30797039bf60e98f9f9e6cc730a167fcccf88075802c0a5a0244eefce9f854b95207b7a0714984592030965f818ecd72c98af199c07f3400eb74d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+lastpage = {
+  revision = 68557;
+  stripPrefix = 0;
+  sha512.run = "058f7b1e73340b5290beb22054c1bc0b97cd64a3051e90a4359ac7916ba033ce0817e6a1139a8b6b301bc0f68176bd882e8bdc7a7b59a719f0d090dc7cd76242";
+  sha512.doc = "e72576d702e2e76242c18d645351568f4adaa468b5946fca30c9ca7b9d2c36a703ad91df3b898089499c0127aeeef79e904652f35ab6bf98f5126ec6c387baa2";
+  sha512.source = "3b0f6326e815812644493e1a0ff422520e9e555f87f93d1c3f31a3b4a1250254ff0f4161e36785cdefb09833c9a3ae93e005cb4d5a4c3157372f79e00e23a779";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0e";
+};
+latex = {
+  revision = 68720;
+  stripPrefix = 0;
+  deps = [
+    "latex-fonts"
+    "latexconfig"
+    "luatex"
+    "pdftex"
+  ];
+  sha512.run = "5db84e105289993a7b03358f17af52568fc826c677368aec4c9326c1ca974961de01833b038aae6b95101a05dbd60f6714756d866e1a144c30199a0bd661e30c";
+  sha512.doc = "53f76796c526b4357b48df1443baedf5af5304da87b21ed2ee6619184c9daec33c8fd7a059f92c0dc037c1b19c3bedf804e907c8031385b1f62d199c7af67e2b";
+  sha512.source = "c6c5244599aa46ee18f66dfbb59e59411625cdb75333bd84a461f3c03b3f4d0400e3d6100b1f511107d779f0adc7dc1ae50952c1315ed587b95432dd3b659a0c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2023-06-01_PL1";
+};
+latex-amsmath-dev = {
+  revision = 68730;
+  stripPrefix = 0;
+  sha512.run = "e36a09409559a415c14fcd5e5aa8afdf268ac8b099814a1eb6fec88aeaef17ed2bfc1649b1859d8f5d4c90b25af520028c184a01866e9cc25bfd5ad7e945f84a";
+  sha512.doc = "609a298efbf504274793777b78af7db57b3e161ca8a49abb2cf9b095162a93c2eb0b796f24183d512f4ad30375401a56c6e238b1c18e61038b51bdf3513542a2";
+  sha512.source = "abd63e1e75b661b4301e90ec60015073e42f2686f2e639e2c264047c3d6f071c10cb933049baeea3b49734ffa0596253be65644d8ad54253443e8ba42d09d30a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2024-06-01_pre-release_0";
+};
+latex-base-dev = {
+  revision = 68730;
+  stripPrefix = 0;
+  sha512.run = "88a5f4610e396128575a96bc20091a0bc66295aab4febe52a46e89e8bc1b4396ab33dda9bb3b94a643645b82c676e6e1fcf37544435ff2852af0417f97f24f52";
+  sha512.doc = "10214331abeb528bc4e594f9141c99c21cde74729652a7d4a3bce71e401493904377bbf49c1778e35461689f0b2eba9e59c9b52ea484c8ac1bf79413963124a1";
+  sha512.source = "c601183a89eb0d5fcacd7f40bcc867d668067228fcdc17ff5dd5dce57623a6ad21c51d0f5be8b5e99003e4eb683ed4cee33a201fee52c88f1f2a4d873d901197";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2024-06-01_pre-release_0";
+};
+latex-bin = {
+  revision = 66186;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "babel"
+    "cm"
+    "dehyph"
+    "everyshi"
+    "firstaid"
+    "graphics"
+    "hyph-utf8"
+    "hyphen-base"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-fonts"
+    "latexconfig"
+    "lm"
+    "luahbtex"
+    "luaotfload"
+    "luatex"
+    "pdftex"
+    "tex-ini-files"
+    "unicode-data"
+  ];
+  formats = [
+    {
+      name = "dvilualatex";
+      engine = "luatex";
+      patterns = [ "language.dat" "language.dat.lua" ];
+      options = "dvilualatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "latex" "lm" "luaotfload" ];
+    }
+    {
+      name = "latex";
+      engine = "pdftex";
+      patterns = [ "language.dat" ];
+      options = "-translate-file=cp227.tcx *latex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "latex" "dehyph" "hyph-utf8" "latexconfig" ];
+    }
+    {
+      name = "lualatex";
+      engine = "luahbtex";
+      patterns = [ "language.dat" "language.dat.lua" ];
+      options = "lualatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "latex" "lm" "luaotfload" ];
+    }
+    {
+      name = "pdflatex";
+      engine = "pdftex";
+      patterns = [ "language.dat" ];
+      options = "-translate-file=cp227.tcx *pdflatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "latex" "dehyph" "hyph-utf8" "latexconfig" ];
+    }
+  ];
+  sha512.run = "4067db41ccc58892a4683c2ce5e15784e9aeebea88a9d9302dffc36fedf48f51c469bb1e99035ebafc58aa0a8a442c12b06457898a71e492ce778e58122a6a62";
+  sha512.doc = "763c7e3df586a275b2a756b591c96ae98ca1a2b5f0c694e9b502d55e7c4a0ad1d40b15ff4987e2be6a06f2f11afe99a4f7fcace22c45877dc54741383a55df25";
+  hasManpages = true;
+};
+latex-bin-dev = {
+  revision = 66186;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "babel"
+    "cm"
+    "dehyph"
+    "everyshi"
+    "firstaid"
+    "hyph-utf8"
+    "hyphen-base"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-base-dev"
+    "latex-firstaid-dev"
+    "latex-fonts"
+    "latex-graphics-dev"
+    "latexconfig"
+    "lm"
+    "luahbtex"
+    "luaotfload"
+    "luatex"
+    "pdftex"
+    "tex-ini-files"
+    "unicode-data"
+  ];
+  formats = [
+    {
+      name = "dvilualatex-dev";
+      engine = "luatex";
+      patterns = [ "language.dat" "language.dat.lua" ];
+      options = "dvilualatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "latex-base-dev" "latex-firstaid-dev" "lm" "luaotfload" ];
+    }
+    {
+      name = "latex-dev";
+      engine = "pdftex";
+      patterns = [ "language.dat" ];
+      options = "-translate-file=cp227.tcx *latex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "latex-base-dev" "latex-firstaid-dev" "dehyph" "hyph-utf8" "latexconfig" "pdftex" ];
+    }
+    {
+      name = "lualatex-dev";
+      engine = "luahbtex";
+      patterns = [ "language.dat" "language.dat.lua" ];
+      options = "lualatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "latex-base-dev" "latex-firstaid-dev" "lm" "luaotfload" ];
+    }
+    {
+      name = "pdflatex-dev";
+      engine = "pdftex";
+      patterns = [ "language.dat" ];
+      options = "-translate-file=cp227.tcx *pdflatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "latex-base-dev" "latex-firstaid-dev" "dehyph" "hyph-utf8" "latexconfig" "pdftex" ];
+    }
+  ];
+  sha512.run = "56988a74dc1969af32a87890a930eae5d1c41cc7d78d84d5293836c139885e1bca3103304d0083583e0a9d9ad1ebd76b11f86df67887de6ebec7b36137755075";
+  sha512.doc = "2166531c752eb0295b643f0e20f518011d2c3063a9a5de5e7e913b2cdf8efcb382a9460ef95a711420e9a9f49fc2ac77a538361c4cdc7d730af5acb43f15f2ab";
+  hasManpages = true;
+};
+latex-bin-dev.binfiles = [
+  "dvilualatex-dev"
+  "latex-dev"
+  "lualatex-dev"
+  "pdflatex-dev"
+];
+latex-bin.binfiles = [
+  "dvilualatex"
+  "latex"
+  "lualatex"
+  "pdflatex"
+];
+latex-brochure = {
+  revision = 40612;
+  stripPrefix = 0;
+  sha512.run = "de98a91947d5cb919b6a2c6e6a87f63499c8c5975992d039bb8d2a4662ed597cbdad99668b006cf775f71af936e5ad285958b48b57eac61783460fe37ed76298";
+  sha512.doc = "f057b86b61ee1f50430cdb83a56c27896e052047bbc93c4f09884b7d76f16f73cb1b570341faa2b8c771c0d42bb4d6450b8715c921fe866a57727eb4ffdd329a";
+  license = [ "lppl13c" ];
+};
+latex-context-ppchtex = {
+  revision = 66687;
+  stripPrefix = 0;
+  sha512.run = "6ab0e6d04cbf49cc78ed8f45d65837055d73f55ceea9014e5178bb30f7a322137856d187b7e0808f08df48408b57635537bd8dbbb1157d1508728aa2bf7e1190";
+  sha512.doc = "130b525dbf4172306b9bf6b74defccbaa17ab1871d044ce693ba2c0ebf568adce98eacc6cebae94bca425c7b8cb7bd2860747768a03380018a9abd33175786c9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+latex-course = {
+  revision = 68681;
+  stripPrefix = 0;
+  sha512.run = "533e270cadcee8dd7510368c596272d9e877c753f76246f11d8b3db6a3eed96319284c15a872d1fcbdb0557c7a267eae4beb9cd2d618f98759456357fc2b6087";
+  sha512.doc = "56f0cdd7a50b396657d60d3d10586e0472e18f3b66005df08746fd93cd481742bec1f1e820248185f9b25d6b58251dd8a4715231272324a5208e25335ede85e9";
+  license = [ "gpl1Only" ];
+  version = "2";
+};
+latex-doc-ptr = {
+  revision = 57311;
+  stripPrefix = 0;
+  sha512.run = "22017cc47746d2e14436915a0d649b31050debff1827cca44a3ab7bf9b240f40450d445a8eaab811b8737f589839ab7f2078aced47b65b320237ddbcc443b99a";
+  sha512.doc = "c7d7217a9136785cfd6ddb000e51d455e7482bfe395a9131329767bfffc71f918c2349b1426b615a6740263c958530c68c044ee3ae78300a004a8acf20bd8bdc";
+  license = [ "publicDomain" ];
+};
+latex-firstaid-dev = {
+  revision = 68730;
+  stripPrefix = 0;
+  sha512.run = "837b36861d1c5c42107ebfca9de78df1e4426b2466c001532ff3717743babecb8f574c5b431cc821f27a8cf20e88fa7e6dda5633fa8fac28084007183621ac08";
+  sha512.doc = "2f0676b179ec977da7d91135d2e9330bc37a67eba038754998445c49523d1630c34360bb857c108ab47a185a409d3924039d7b03f3b420d74c52fc98606ff408";
+  sha512.source = "c783d78612a76b55f49828ccd3f719ad94ab3a2a3d8b936e2049322c0c5fa773b8db76bc1a8d471d443bf3bc0d7897df7db628866287b64ee281764ae258f839";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1b";
+};
+latex-fonts = {
+  revision = 28888;
+  stripPrefix = 0;
+  sha512.run = "98549dd0c7b29511abc3a1a6b6803a86af0b48121d47e292066f3b67e4b5847efbb7025352c1ec996778c7ea3a5cba552385e9b4dfd6ab005d716f503e37a26e";
+  sha512.doc = "4d3162776a17f31caa8e6a0fe05eed9447b681d77e653371cb5fa5d8dd2f01bddddc9f95ca916f233c11f8ec7d15e02fe575dc953fdd18c34ba877829a142bea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+latex-for-undergraduates = {
+  revision = 64647;
+  stripPrefix = 0;
+  sha512.run = "5fc8504cbb061e03329d2e1952749d67bf5fb2f6798353c62a6f3d3f0106b9ec270852a99d9497870d84ba5d7bc9aae3bdcf7d15cc212d9c091e57527e97b656";
+  sha512.doc = "a20a2467eb6e98261c588baadfc15a9a653fa257338abca2c8976d46e8a51c282012f1279b537e02e39a00227ce3171b6b68d20452dd4f228c187f373cc4e9b7";
+  license = [ "publicDomain" ];
+  version = "1.0.2";
+};
+latex-git-log = {
+  revision = 54010;
+  sha512.run = "15994c6eb9ba1b194df270c68a3d74ab3db11974875ce192559182b2dbfa9b308d598056a3145f2cc2f6718865a5b140ccb95dea22a9e23edee527e5b86362ff";
+  sha512.doc = "52bc94324c64caac9a5b25b49c9ea01b8560433d640646ee70830d27637482cf50da95bbb86db93006f2be4ab9f5f79fa144e4b631d62c05f0a11ab45e639cbf";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.0.0";
+};
+latex-git-log.binfiles = [
+  "latex-git-log"
+];
+latex-graphics-companion = {
+  revision = 29235;
+  stripPrefix = 0;
+  sha512.run = "3148a646539db3622096f9aeefd7ca2d44b0cf83cd454673893978897d07cfe7107b8f5bc745bc6b60734d4ad3429be1ffc2edaa8c9dd1721b41bfe913fa0dbe";
+  sha512.doc = "ab9d885c811af3964e8cdd8576349059bd45d660e6b9a7e931697f7c7fa5282c725e044817de8f2648ded59519d1592945e0804ba7cbe0054ce2bd4d44606af5";
+  license = [ "lppl13c" ];
+};
+latex-graphics-dev = {
+  revision = 68730;
+  stripPrefix = 0;
+  deps = [
+    "graphics-cfg"
+  ];
+  sha512.run = "a6357498f8bb7b6e47dc78f22163955e6f207df84a5270bec98d003ff7c0c31d82a13f3ca8e6d1242721bbeee6d5c8bc4e6bf744708fda9a3e5e9ebe30eaf9bb";
+  sha512.doc = "0edf4d8f6b4d48df6e5f46ea5836a30f7608701a0470fdb713333b4e17c0348bbbde8df2e9dbfafb8bae924eb70c34e351aabe4a0e460821790adfa0ee52e384";
+  sha512.source = "f2d2b4e1c67d5159c14426df49065edd0605a1db88ee0c2d72d582edab070c6f8f11bb517f969893761c0c22935df69e5b9dc6d981e0f6136326277e1e2be927";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2024-06-01_pre-release_0";
+};
+latex-lab = {
+  revision = 68720;
+  stripPrefix = 0;
+  sha512.run = "ede4176b7ca60193acd644f572db5d1611a6940027f7641ca755634401b19e20eca65915d57e6a0859e465e818d6854ca98dc16106782bee0f817d776c056a10";
+  sha512.doc = "eda6ca871645fd6fe60424329e4c4d8d9817039d9cc30bd6f710c30675a3e8f0b7f7523b081b871e9e5abbf62a0ce0e22854aa443684818771ce2022f4887e7e";
+  sha512.source = "acc092bf6cc685cf8c9d5a0cd5af47022c3936ff0e509a3743ae22ab888daffd0c1b7b657c5a1e1019232c4047e89626963ec1784b406ad16d3dd3f10f6e19b7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+latex-lab-dev = {
+  revision = 68730;
+  stripPrefix = 0;
+  sha512.run = "59718166fdb95ce7a0323aa201477775d469f091eb47866b81449bff506e6523cdeef0609f9b0a68ff0150e1f08010f1bc00b447e4f7a30b254ee5db0b7494f5";
+  sha512.doc = "42de975fc56df75072e120baffc5a70f4525d80c82ad1e3de60e23527443d8ecc90b0219b42e1c52abad0318c19b27792f46b83e22cf471e5a49ffec2f8e61b1";
+  sha512.source = "5eee782feb451b2b454d08272df09c94184fc3f7f58564eb11fb7e927f4b9a23d3bc0daca31914f9c96b53ff55642458f35a4851f0373a699abfdb168be93bba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2024-06-01_pre-release_0";
+};
+latex-make = {
+  revision = 60874;
+  stripPrefix = 0;
+  sha512.run = "de9a924c38afe1abcd0802a17de4c5fd2cb444809dc81e00b6964cf3d0c81b8d8796a1bfa804250701ac4d71f42bb9d2a9ca1ec0740f59a8feb329d26aa605e3";
+  sha512.doc = "aeef6568aec936c43dd0bfada1245a0d353faf2329e6e66e9d49ca8a1a2f9eb738ab1667934cd0a160e074c2e2da85aa8b068bed0bdb1ab1b944cf62f42af087";
+  sha512.source = "521a553ebb556cb6df809ea5f830c926101dcd06f147544c19476a0b0ba82154c3b0316d795f4057a906370972648b485a96dd7386c8e6541160af469a74487f";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.4.3";
+};
+latex-mr = {
+  revision = 55475;
+  stripPrefix = 0;
+  sha512.run = "eb9b8b12f15a8662eea0e3df907264093074cac1d8f8e1f027186b35f3f3318c4b8c120d261be21350fa660b51a5f33e196d957864b0676395ded0f70940464a";
+  sha512.doc = "51dcfff4a8df46a8715d07d2528d3a1960479ce4bffba9b8eb5170d5d6307f0c776e197bdbe788d316067070c1d5f5d1382c32430e94ea83664868931a844e52";
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+latex-notes-zh-cn = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5e5b3bb01456fec3dc22cb5d0d4f521b4d4f5f8f3119fdd76ea9cc55a70a2ad8a2b72e36471894ee448c1d40d887d20ac8fda39c4a3fe2cd111d2850eec12071";
+  sha512.doc = "477df31445a2991db3c2b8cafaa97662d722f3f7171c2f756cf025717cb3b896c1773adadbc42c22cb360f7542a0e658547f15cd71c54e9b79f76fb1e2097e90";
+  license = [ "lppl13c" ];
+  version = "1.20";
+};
+latex-papersize = {
+  revision = 53131;
+  sha512.run = "00010f764235c6d9e4d6667c8c8b9f0ec6ae4b65afb53109f8179e0429d4b3787bd6b0985cd511f770cd74512483d1077e0f42136fe7ce1871984b372f2f2e54";
+  sha512.doc = "8ebddd884e3e533d06332f2d6f8657ed54c9c376b3de68c7e7652f3b2835ec6601f5326ea70dc830b645440f0bd9ba2281e4f71a847946bb595771c6a950c0a6";
+  hasRunfiles = true;
+  scriptExts = [
+    "py"
+  ];
+  license = [ "asl20" ];
+  version = "1.63";
+};
+latex-papersize.binfiles = [
+  "latex-papersize"
+];
+latex-refsheet = {
+  revision = 45076;
+  stripPrefix = 0;
+  sha512.run = "ea6751fc09aada1b8ebcca08ecdb10279b6df881b3b373b04e8c238609de92b4cdc4f1e7321f178b15637c0b712e9781317af07030f2f9297a3ce23a5f46cb32";
+  sha512.doc = "77149dabb1fe5c4a46591b3b307d02b2e2b33a07267afcdb44b77a2a823dcea9ea76b4be5ddad530151b638cfbcaf5d87ed0fed59a9e8ed99acb0895717bc71a";
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+latex-tools-dev = {
+  revision = 68730;
+  stripPrefix = 0;
+  sha512.run = "b7ac20a167585e18b7f249612223508380b04e162f10123e6a1fcde1df07fa72bee42bd46cc4cb20043552f981455a4036357b7c5f4c41b2dfa9cdfb8f4dd5d3";
+  sha512.doc = "2711c79b5ca59c7f399b0645f4b3d4620b3cfec3b76b3f26882d42c50ae9bedb46fc59a9483c067e8a667a4e089be42fe8e87daa708ee19e8ae0e945038f1f23";
+  sha512.source = "adea89208290f95ed0b970027c0eb70b6f7300fd4e171a18f88e6c174e0f184ee880a2cb04f8697b2ac55df45484787289a792578933857fb6d70864c0ae57f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2024-06-01_pre-release_0";
+};
+latex-uni8 = {
+  revision = 49729;
+  stripPrefix = 0;
+  sha512.run = "1e98eb60547932eb218f30cc713b94e8c7ee5861e66cc600b01f577a37e318a5b440b65c2aef1c770ef94bb4c4cf86d5d1636943de60f78049d2286a92ba5d81";
+  sha512.doc = "201de55826ce4911153f079e1107e2f4d2399d3d3cca95bc669cd958d09839ed7de778d644502cb6af8429818834027c9d3f3255fe58f95c985d1a96e4682f22";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03";
+};
+latex-veryshortguide = {
+  revision = 55228;
+  stripPrefix = 0;
+  sha512.run = "5c32c836c5ada42858de4579167848ef51c4b7626601fa95fe56175f406cb747bba5015ffe369ebfa93e789d29ba5329e1ab3e42262699695fa59b6cf047a581";
+  sha512.doc = "e2c521e768ea425312a400d88c893404c0f86c5886f595162b2a03493836ee1a949e2feebf8a8b3c9d6450630ff644b8973374f9963c67478af29e2a432d2f9d";
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+latex-via-exemplos = {
+  revision = 68627;
+  stripPrefix = 0;
+  sha512.run = "d98f99d1da5b8192cfd824829ec31f09f3178b0682885e5f497203c6f3f73bedc0a4f0a766ccde2f4f8a0e68b231f4d1213b3586fd1093588f3a9312716f072d";
+  sha512.doc = "605dba889bfa1ad23b2990b2f0f40db42947b718cd272d8f61243818d40ad9a552fb61f87ff4e3844e580d3acaaa9842c2484c62c5c5dfb4450755db3fb02758";
+  license = [ "gpl2Plus" ];
+  version = "0.5.10";
+};
+latex-web-companion = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "5f45c7f74a0e97b938009ada69146875e141edd556165b62185553b0ce5f590d5ca6f93a875dae1c546ebc788156d5cfc69c46535000adfe6933abe79a2fb06d";
+  sha512.doc = "a972860f65d763c6fb45e9726e5dd7b8234509b90634f45b8b25e090da92d0ac577bf8b33ea7b0a0f91e4e5639bf62c07086dc36708ae697c1e16e644acc83f0";
+  license = [ "lppl13c" ];
+};
+latex2e-help-texinfo = {
+  revision = 65552;
+  stripPrefix = 0;
+  sha512.run = "34b91b19e1b71b1df6d0f57dda4d6976a93b16afac259656c9d4e331b0c23a9b0550563c1a10dd7a95640e3740b3b15597c1023f6c2721bf2a64800466b9cd09";
+  sha512.doc = "d4584d9259f3c1867e7445d4a219e4decc5ba3b305e20d1e780180a47fbad8df4d55552726d8288e78c8388823a2b652b81080c8139b00f4ea3ca10e5789375b";
+  hasInfo = true;
+  license = [ "free" ];
+};
+latex2e-help-texinfo-fr = {
+  revision = 64228;
+  stripPrefix = 0;
+  sha512.run = "96366ea420532f56ae076da48f5402c2ee78ca27fae8180795d6cd18aae118a8c7060208ff43ab64526addcdce9e4d90790583842b20c751f37865cf616e04e4";
+  sha512.doc = "52f6aea9ac2393a73d7dc7ce8ad4d6f08e0a224397199d5def97412502026717e8cb966552368899c50718a1049b1ad4610d2d23150a45bee55cc2c776003db7";
+  hasInfo = true;
+  license = [ "publicDomain" ];
+};
+latex2e-help-texinfo-spanish = {
+  revision = 65614;
+  stripPrefix = 0;
+  sha512.run = "870c8f3af54ac42df5f4958669cf730cd16084c985f0b377c5aba9d526b8f7be14b367791d2c0a1f1a715739390ab63777ff2a92e7f9aad09897c8bbecff495e";
+  sha512.doc = "4c751a7305e089dab61bf991436ab1e612cfca0d17e416e21d659c04ef32eeb2d14dbeb09d63649a2b79f842766a218c43ae2c6fbeeba5549f039f991049a79d";
+  hasInfo = true;
+  license = [ "free" ];
+};
+latex2man = {
+  revision = 64477;
+  sha512.run = "2617f6e8059f30c0098ea896cff69f585ea2ddbd3bbbd8066e7296dd833d3a246b8fefc0af71a92abf7e2051c754c0e3e6098175a4b181780563416bc9146b95";
+  sha512.doc = "390666cc56ad70342c9a24ca593fe65b3760674a882ed8bba383d193f2578285727a085f823afc03fa0dbc9966612caf9a29222fd2a9f39214f01aa268acdc50";
+  hasManpages = true;
+  hasInfo = true;
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.29";
+};
+latex2man.binfiles = [
+  "latex2man"
+];
+latex2nemeth = {
+  revision = 65269;
+  sha512.run = "f2669a9e58857094c922b968f337e2cb2cf475b07811d53c61a8e0b4dc8bcc41d95186940361676bc62c0f235edb4fe7a7c0d5ee0f6d74c541d1108960e18e7e";
+  sha512.doc = "7fa7ae1c628e29549fc3cb2c98164e27f60cc0bcbf14e26b7a325aee313a5f41c3144d5adf2993c20999016f4798dcd436d96c637c4258ace0efc3bda4a54a43";
+  hasRunfiles = true;
+  scriptExts = [
+    "jar"
+  ];
+  license = [ "gpl3" ];
+  version = "1.1.3";
+};
+latex2nemeth.binfiles = [
+  "latex2nemeth"
+];
+latex2pydata = {
+  revision = 68919;
+  stripPrefix = 0;
+  sha512.run = "7da5e33f287bac42a378bf33073ec6a982dff7000097fdb865844299efeb9e7a1647ae49bd3332b036755dd4da6be34fbb197c8148d2c2af5c60b7580d0420d1";
+  sha512.doc = "8d78f4bfe6ddd1742baaa792842ab9ada5cdf4e1eeb3fb3496780e3a31120406d56be4be7cbbade5815f72cab57b76a5218e3bd86ef4593d1fc75fa2196e7212";
+  sha512.source = "fe7111c44158c400af7d0feda67e2bc8a1cc313ab8bca7c101ed75e57ca1a00fe434232ad4c5b78a19fad388d8a8cfa0af6cd53c7f84b809209d7bf955f8e05c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+latex4musicians = {
+  revision = 49759;
+  stripPrefix = 0;
+  sha512.run = "a37c75d55857e9680b8e4b0f59f1889f3b5198477212ea531aa6bbf9ea11dbae06fef7fdba9e706f016c6c0618eebe4ddb81ba73b48979683a22592a0adb119a";
+  sha512.doc = "738c2c467d9df87cb1eccf0442b5c94a97a3c4c2b329d78d80b05d2adf9e3be11aaf2fb407ebc29f07e6455e6533464d981ae65122b080aebabdfaa29cf71b61";
+  license = [ "fdl13Only" ];
+  version = "1.0.1";
+};
+latex4wp = {
+  revision = 68096;
+  stripPrefix = 0;
+  sha512.run = "0111de0987679fe40b14a4ad0dfa098fef36acf15e099f932e75121c26bdadc2e493c77b1d5b4208e662f2e5893955cfad639bf018d48aa5e7a7c77e5d009c6c";
+  sha512.doc = "eae8e0b5e4fe28311508b09b4b8b03ac31469e32772427c5d016bf43d48e458fea06f9dcf9ed696e1eaaea7bfd6b0ef4661d8b84c2bdedec44ca35c782079bf9";
+  license = [ "fdl13Only" ];
+  version = "1.2";
+};
+latex4wp-it = {
+  revision = 36000;
+  stripPrefix = 0;
+  sha512.run = "691d8936d71ca825da3a5fb193f8f7067480981b1b9bc93100f54834a7f9500e66785a216110cb1eb5cdd41b538333b693dab8e0e855e546a3eab90c43c48630";
+  sha512.doc = "c0c527bc7e9e71038316be5c6a57f4200ed69e7ed6fa0f066923cb14d14e20e90213cf0b989d3ba746bdb3e2263cf1daba56db3073017a0d7582e40640d35fd3";
+  license = [ "fdl13Only" ];
+  version = "1.0.10";
+};
+latexbangla = {
+  revision = 55475;
+  stripPrefix = 0;
+  sha512.run = "8b61b8aee0e95339b356fa85b9bb7ad3833ccf410267eb31a84a811c25c4e34ac350952fa26ed6461468bfeca37121e809ba560fbed7a0d8e747613708ff7795";
+  sha512.doc = "8d8c686edbf3e70e70fa577c7d09f2e3d3f1ab938253ed01892ba030be0ba948bba48d67503a6f215628e03160bb32878f868d8a72b5a0d65ce3400fb9011ac9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+latexbug = {
+  revision = 63596;
+  stripPrefix = 0;
+  sha512.run = "343629bebcc022be463cfb13e155c372436b6138a3ce641ddb7ff17286788b6db438d040a8fa76bbd0354b880e5455a1aeb5060202b99de2cff1bddafdafac35";
+  sha512.doc = "67209c3221ddf31ea4ba6a9678d340a590feebbe4965750a65037e3c8546d4a3db0b43d0ea5fe178eaa5e4d1500304b2a3fc04bc8e65781da2a5bf22e702fd0c";
+  sha512.source = "28e88cad4c3b0e676e95d3b4be46285a73036af1662156d298bc288cead111425d956352cb94165ff515d5b725f1aced863e6cca917d6cb100ca71affb5da7d2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0n";
+};
+latexcheat = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "530041d286048809968d91b20fd40c5ec41eb440fec25bf08f92af0f0fd5e1481a1344ba3c659da4477de353d222f3cb160d75eea2241ccf19b05e63e059ed6f";
+  sha512.doc = "28abbdc3b53c245b0cfb6ab68549661a72d37df004a5c760f5021e91b1df892b02872c7e20f328c7dd4624edff96f3b1fadfb46cf35d080c6b7c5635dc36adfc";
+  license = [ "lppl13c" ];
+  version = "1.13";
+};
+latexcheat-de = {
+  revision = 35702;
+  stripPrefix = 0;
+  sha512.run = "84de8075c1ba86467c8b34ed614462953ca8b9a237bb84453b2f9a1482eebfdb628c3e460d38da126416cc111387d68d3f479c5806ecbf06d079e47c35b88ca6";
+  sha512.doc = "dda8002178b55e155f7ce1f49f57f928b6c5097007daf36aa473c1a2d07aef4c3ec5e1c238537c0531731af0cb0d51804b0c0310be63954f112f266e737c7d37";
+  license = [ "lppl13c" ];
+};
+latexcheat-esmx = {
+  revision = 36866;
+  stripPrefix = 0;
+  sha512.run = "ab9965189096647e8af9aa58a937fa15595bed32055b3819bfd12334cf60e01d18b12563de8169ea28e3c0a7768864e51631c29bbbe47d45e09ffb2b87c5d524";
+  sha512.doc = "a45f2db2445e2daec8b31e995669a189c1d201f457e06de7fc2a85ad85686b31fcf70040e7840e1168e29b2e5caf796c45b6ce934780fa5982d0750438263606";
+  license = [ "lppl13c" ];
+  version = "2.00";
+};
+latexcheat-ptbr = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e50cd94941704f1a620a7411624ffd61d47aa4ef2944220ef0bfa9fbc428d8ea46be17bb3b18b30d645dcddf3c8091dafa9532f809dee7af230e2133c86b9bf5";
+  sha512.doc = "00369fce725567a85310afd3063a4a20e670d8a0c57ef7e4515579ee0f91157f44bac2471b076c2ba51253e2c172447cc4b915877d80b0c43874c4e125f5f9d4";
+  license = [ "lppl13c" ];
+  version = "1.13";
+};
+latexcolors = {
+  revision = 49888;
+  stripPrefix = 0;
+  sha512.run = "b22521df5572411a33ba84b2d7560f0735a6f3a3bab0c6d7ca460e19333fba20ec8852becc618274ca7b7461fac1c42d0e6ce7fb9b7e4349c74bd05e8e1b5faf";
+  sha512.doc = "5f6f26c2ece42c07b2b2e634308a2a417e12a105d9856d630f483443825615d770ed35f7322f59904b1d8fea9425e0222fe9deff27451a5aec52fac39eb9369e";
+  sha512.source = "369c0cb2c019ef227c41d38a193f82ca1417158065cf6f0f913d9e4bb7030e6ff3b34fb49157d3e81b9917bd38db454194c3576009be76d9293b365e59619a59";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1a";
+};
+latexconfig = {
+  revision = 68923;
+  stripPrefix = 0;
+  sha512.run = "22e233cad5742691da573249b3f9cd4ea0c6ccf4e31a757837d710ca863e0cccd089106e523e40fb541255f3795d963273ccdf70211f19ff3caecb30d7fefcbe";
+  hasRunfiles = true;
+};
+latexcourse-rug = {
+  revision = 39026;
+  stripPrefix = 0;
+  sha512.run = "ab31ee52beb0fe100f4798e6e42673d5284f6f85ccdecf8875f4d058928cab7363507f8cafe6c3c6f437a682f3e0017923d138ff671eea118ca8d2339627fbe0";
+  sha512.doc = "aeaeeef2c43a5ddf782a91152c9e2e18f00d9b3e18b7023837920a53eb390652d7ea85afcae338519a00b84a972a723eedd7819e73944ef7015f8c028822fea9";
+  license = [ "free" ];
+  version = "1.1";
+};
+latexdemo = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "e8444a7362e06fe225e9033fb4fd69a5dbdae2e6b18ff50b860e327890cedb5ccc92a2aa977d5349346dcbc0da91644729d292e08cd9651e096362df43f1b5fa";
+  sha512.doc = "b704b4f266b2106d6a48dd5fca3af644ffb750c7a183d0ceb31db06c98802faff451d4a224289203174f086c7ac46bb83b5296115fc2bb0241b213ebf631115f";
+  sha512.source = "cd9ccedf50931754ebd4f3a9cdf5df651be802fd31622a7efa945d41e3d2d4325827dc12983f17761caec0458a02d69eabb717c9ee0a80973b4f055d8bc1b7e3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+latexdiff = {
+  revision = 64980;
+  sha512.run = "ae7179b5a9d410302d750233b6b22d29382406f3222129155c98b1f2ddc23d22ca7abe1683fd013c7302fe8e21e82a376499ae33d83c15a01fa2720696e5b718";
+  sha512.doc = "2f484db22ec12886a4d76fabde3a65a982d3e659f524120b377221f91c7ad5973ad6023aa3226dd35baa687c86ec8dd8e736553d1604690d87e68d3cf7be84f8";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.3.3";
+};
+latexdiff.binfiles = [
+  "latexdiff"
+  "latexdiff-vc"
+  "latexrevise"
+];
+latexfileinfo-pkgs = {
+  revision = 26760;
+  stripPrefix = 0;
+  sha512.run = "b08fbfeb87299273a0e087e7cfe0e9df9bf50b95503a3110b9b329a9a41931f34f65661e219c6adf377e3448536d5aac8199799821f7057a67a4680a24f30ad0";
+  sha512.doc = "af5ff5d84fbbaf299be548d13163c8e5e83b73ce795bc1236a204f4025e34d9ef0c587702ea5d6b234791e16e7cd1930a63f3839c20caefad7610de125a583e6";
+  sha512.source = "b204065af499edadaf997f6a6cb1be474d02d03c1e37f94b33dc7d290f934c4a453fb648588482821f52f7b0b80f5edafa9a034f8eb2a9287ef06e753b8c1e96";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.22";
+};
+latexfileversion = {
+  revision = 29349;
+  sha512.run = "3a017b8a367864358370f0063957c301014df2aa039566ef33ae78dcf428235ccc2a88e19c917c940e186371e2c0b747887cb04e7cb78b9a04ac1720dbd94cf9";
+  sha512.doc = "b1df01f8bc7daed937cd20d1ab7cce443a3d1fbb58e04cb18f0c0b30ef0795c988cf51bf49ace2f960c173f6a95fe982ee9d29d7650dcde21784c788165094c1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+latexfileversion.binfiles = [
+  "latexfileversion"
+];
+latexgit = {
+  revision = 54811;
+  stripPrefix = 0;
+  sha512.run = "4e3787d5e9bf950e796e7eb475c825f20628ec5ed5b99cb145036fba99c4941ed81b347acba1548dea624d87a03e0cdbbc28fc579cc8edb0aa36460e9df0b6d8";
+  sha512.doc = "bfc6ce99ca1b66c0b1d5d98453716cf9e3a7e65ac55d7d17e5b06417f57d13f532602b537c804581e2e81b5265d554dd99e4d4307ef6d634d25916aae1892cab";
+  sha512.source = "8a09f128428644335c9d909d23acc91ede2020304ebf009be00928cdef670aba23d245b979e5fd8d927c9d0e652bc195c717a744015a31fbb2aed1c566abfaf4";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+};
+latexindent = {
+  revision = 69269;
+  sha512.run = "32b0e8cf8433c6c5df601268b9be7d752322fab5fa120e1ee9b8335ba5ab5d48d874bad26756fba2b9da19ce3ce582824af7a859ec1e7f57a8b2e3ea66c6d631";
+  sha512.doc = "f843748868107e46e97840d2ef8699d3234760cceb467730370484459a254db7c36869ed0eaeda66e95791d7bb20d576ffbea39e72da44036cbed0dc86799742";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "3.23.5";
+};
+latexindent.binfiles = [
+  "latexindent"
+];
+latexmk = {
+  revision = 69373;
+  sha512.run = "04cb04d6d286f317c7a9e3a7b2c38e1cb9b89e9570d59082173dda7eed8283f49166691113409c5197d5d8da7f319dde9248a445dbefdde97cb1b940a3dbfb9a";
+  sha512.doc = "0d57a68fdea7492a0776e7efaa4269ef45050a52ab40a596381e8d73ff978d9e25459675fe3aac6efba536197f7682a86eb8435c1250957f40a0ac8ac3e9b007";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "4.82a";
+};
+latexmk.binfiles = [
+  "latexmk"
+];
+latexmp = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "e32eddbc519ed33687c1fbe36b2cf45f9ee886a78c0a088f6648da42dbebb0a72064ec4b9d5333656cc3bed7b251ef3a758926db88e6bb79ffd4536489717db5";
+  sha512.doc = "02cda290799bde7288220d0b634b970a6ac543fd63318bcf90c4ad06eab074f5851e7bc42c9359af709eccc0c8847a0d3d1a9e27cdfd3f60c7143de7ac4d3901";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.2.1";
+};
+latexpand = {
+  revision = 66226;
+  sha512.run = "e5b63c9aa31f3b5885b1a61503998ce949021b448199538ac385d3fe687156ce6669cd3610a7c3387592d968b0707f7122f35fd50402616470e34bb49f341bf4";
+  sha512.doc = "c06bbb57bc006aebb644fc4a8edc1f89e10617c67bb77193bd2f4dc3eb7b04b55fb1f239d7d6979f9b385134f3b1e584d9f10521efe704292b7e64865f78d156";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "1.7.2";
+};
+latexpand.binfiles = [
+  "latexpand"
+];
+latino-sine-flexione = {
+  revision = 53485;
+  stripPrefix = 0;
+  sha512.run = "6c6e7dacb974ba25fb5106ee1b846a22590c1ee3e5b19aa4c9cb90aab927216a19d15f977eb92f20fb589011769463a500ac2146c0c8cc807a91169da660bc13";
+  sha512.doc = "204422bc4fc85ecf94cc3236a74acc368d34926b53effb45b6411e694c4bdd2b91c30250894868d3928b19c693372c49e7435f83974e09b829938b6237ef1957";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.2";
+};
+lato = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "2f8454888913ec6a024c53cf157509b8b769f948ac2c92d0683e80ff8e22865545a6a65864876be35569bf4a5d56ed871c8112b216561e3ce585136bd062c9ce";
+  sha512.doc = "0965bdda9b3c106bc49d8156f497c4c85a80d76a4740964b2d24c58155e8afed57989166bc5ac3eb44daf377b7e8985b406a0955dc419ced4a7011f328ce0c62";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "3.3";
+};
+layaureo = {
+  revision = 19087;
+  stripPrefix = 0;
+  sha512.run = "849b0e0fbd15b45cb31ed4856b0eaa190c26437a1965da2c860af62b65cbb000b590320611e96c5a6c4cc63c029c31fb352ec44d96e0704eb52c70ee460abcd3";
+  sha512.doc = "b4333e1361b352689dfd67e13a694a304449eac61ef8189957356bd94e5745f4c15fa38bc21219c8a21805dbecd44a51e719bbcd884b850ba1276759bdebeb94";
+  sha512.source = "054df6aade854320987e605aad0a641778336ef918ef086dd097db8d1a2fc8d623f0335aa4ffb98942e157438ba06b6e75411b48db541779fc2a6e08e5b1c594";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+layouts = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "9db14862ac1bea22096130ddac071a9b058e4cc1309917d2f8e8c536f280d2f4efc9a8dad9a5dbec0824b94f92c290e82820ec1628f0e4b72aa8fa617b72d981";
+  sha512.doc = "aa6639c5ca0029efda9af523a0a075ef2b60ae9e031bd68232ee03792bb2f7452e2201e7223735e83b7979f2c057674fcedde4ed416254ab4b5b8a6cd9bb002e";
+  sha512.source = "1abb95aa76cb3dc55d7426b8f98923662b48fa91ae8e5e2c3c01fb14dc28c8ceae90c01c9a22b1f59103e56d1818675d6da6223be6771083562ebc50ceff07b6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.6d";
+};
+lazylist = {
+  revision = 17691;
+  stripPrefix = 0;
+  sha512.run = "5ceccebce9cf3ff0574c471141f94b919d14a7faf1b5c7b5e09eb079aee11cb95bdfa7d8b26fb83e99875818d842cbd64733ab7cf7b7024f04f661f732a3fb04";
+  sha512.doc = "1ecf491370fd7ba0fcd3ef1ce11df768509c32bc9bf14978e3d6f36e39094570144b897337bbc481bfeb8b74354b36f66d561a33e255ba50aae0a5c42f002e7e";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0a";
+};
+lccaps = {
+  revision = 46432;
+  stripPrefix = 0;
+  sha512.run = "98d57c77a3ca19a067c04c9cef06d632e56f42daaa70ec729a7cbf3ff68ef3e7ab95e1d0d25cf853d85dd1916668dd5601ba6feb889d1eda344b3ebcb31da333";
+  sha512.doc = "ce14177476624831de64a12ef858516a2df28a3e194748a1c759d7a41743a93e03a7d96bff3acd85f9db0f5d4c96a53aff7b73077e131bc6fa807c8b36844bef";
+  sha512.source = "cb0f4f8400542d9d15e55dd8d9b55ecc1aad60dfda5de9ab342e8e02d075123e9b32b1c19dbed700ad8626d754a11be6e694a86b6eef757db3a6f47f9f5a22d8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+lcd = {
+  revision = 16549;
+  stripPrefix = 0;
+  sha512.run = "829c0fbed639619707023c1df1fa511d584e4805aa4f26b0ba5e5c5dd85d927901f4ad949e4a171d9765995c9ccfd34e5d45aa44dfef2508d5ec84c27712e05a";
+  sha512.doc = "385df3ec85fdbaa579b15f0ef0fa2347e15cb796a84265b1cc7a9e2bc520c0c98d0703615ed28c68ce5ab7cbca6f2699502ec26a31297c14b0039dd4b584fd86";
+  sha512.source = "1d788d589c959240c92775455ee3272b8014a9491f2299c4d6f4d9aff66681100a6352bfbb644e0c4cb770e27152bb5b3fdf0f347aff489c172189c542a02e58";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+lcdftypetools = {
+  revision = 52851;
+  deps = [
+    "glyphlist"
+  ];
+  sha512.run = "3f3cc8f7cce233eb36315b21db408847a267ff393d6d4118de61c4b03ec408f3f29b2d41fdcf84995bfbf5d07bcb25984d7ffc76458d4f2dc12fdb6dfb85e23f";
+  sha512.doc = "5a1dd1e2fd79351afc65d6786b24aebd9681a2b9e92755b44a836b47da5ceb1817f085483f306991a113dc0c26edfcd84839dec93bb46a003034536f31b31e5f";
+  hasManpages = true;
+  license = [ "gpl1Only" ];
+};
+lcdftypetools.binfiles = [
+  "cfftot1"
+  "mmafm"
+  "mmpfb"
+  "otfinfo"
+  "otftotfm"
+  "t1dotlessj"
+  "t1lint"
+  "t1rawafm"
+  "t1reencode"
+  "t1testpage"
+  "ttftotype42"
+];
+lcg = {
+  revision = 31474;
+  stripPrefix = 0;
+  sha512.run = "6ca6f347b6ca4104ec376554ff7ba5d19002b2b4174fa491f3fec87d6c75c3ed11c1d13b9e7d30e6c086b2a12dc3013f21ee10b482c95b177f0eaff02d953fee";
+  sha512.doc = "5674612693481265f72420ae10914329029f9af2f526e6b59ba2614d4d2994a0033cb3393d2751064987698f819cca8e0fa3783555db3fa6cc5849f337b1cfd5";
+  sha512.source = "b26dc9e706b14c304a282d2b5abc2d0fdb81799238c3951badb6152f8c83f6a2ace579ea0c2fb782bdfe0d02448cf716e77c3114ff0be594b12bcabbe138b17a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+lcyw = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "324a9eb8f1a68124888ad7d4f35dd0446c917e643e2cdcfa041ca26b719ccdc541b9b89857aa05dea2d599912c506561c762d288ccc86d637fd927cc70bf910d";
+  sha512.doc = "c063b6b5d23bd0a7197f5bd3121c93237c24f0a77fbc72cb370a7cd535282151731ef03098c36d8152707c50808c1b996fd1adaf16185bd3d0e3589e85b67981";
+  sha512.source = "5303052e625fa1e07a3e54a682a11469f0b14697fad5658f2eb6d0266dfa25e6f66bd752265a3ca99dab138200711b48cadb29d8b1a1a878a59f5c5e112aa860";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+leading = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c326950e6c4b07782148ee4c9ac5b22f7e42512e0bc6e5e1f75be6ed757ca90ebf2bb6b30b91ceaac32c761d595ba5799f0f40ca15954f150d481ea366f1c72d";
+  sha512.doc = "3ede6910ccb0a30c3ae9c78b86cf00cd7e2c5d8905b648861d2113d0af6225b2ffdc30509a72a5f69dd9e1164525c3225cd4ecaa04471ddf5c346a862fe097e4";
+  sha512.source = "b42b230efc2508f4b3901de791424251c6e0ff003bb342fa11ea282f46b2dfd5c68a63c95fbb9aee146839944586218a3cec0ef182575a9760d3ed3f5924d78f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+leadsheets = {
+  revision = 61504;
+  stripPrefix = 0;
+  sha512.run = "026e310ee9617108ac60fca69b0f08b2031d9c9dc583a400095765458bc72681c5c39332602994fd8a7dd4757b5214924d4f5d75bc5861365ef65e8e33b6e143";
+  sha512.doc = "dafae48e690e6f0a2272d268204cbe58967eec5dc895987ecbff563061f23a53bf9d0d39f4a269b852524c1cad8de08fb121aa8291d2c723c01615f4c83b3231";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+leaflet = {
+  revision = 56878;
+  stripPrefix = 0;
+  sha512.run = "ec809f2aa4cbc16dd26aae988e2e3b5fcef9284cd31deb126d26989358e52596a50fd63df07095f0bf081c46d1e8af3b3f59572d372be873d9afe1f3db3cee95";
+  sha512.doc = "ccfee44447524b112f47211729bcd2c78021dfd19394b82eb7024bd10a68d1a04789d01d16cc9f3b5eab7feda884eae6bbd47b6abe8023893587c49613b44d6a";
+  sha512.source = "cb505761b78adbc0dd69fba2888ab86394c7c32fd590969f721cebac249ab8298c87fad284fbb8bd9d557e4f7741559536e504155ee3b4f771dd135204857337";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1a";
+};
+lebhart = {
+  revision = 68376;
+  stripPrefix = 0;
+  deps = [
+    "colorist"
+  ];
+  sha512.run = "6537a527caa6b82b1cdcec7150d90cbd7bab93adf1b9ab96f59c4772118d17d21c969ccff449c67905a2ffabf616ac1783c62ffe25208d52779544e84c5352c8";
+  sha512.doc = "eec7a0d7e647797829023fb6d0fc55e8d35ff986a0e614b4522deaf632799053b3580e8888bb77974205f9e566cc14f04d8b60af3238c5ef65f59e0599d079a4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+lecturer = {
+  revision = 23916;
+  stripPrefix = 0;
+  sha512.run = "e0c217ed089dccb7cb526e62456bf72d186bf8cdc69b2014bd4210b6f1225277d1afb514f381e4581727900c6ebf34780bb4df01c3682580cea0418fa9caa1db";
+  sha512.doc = "97892442ebe9263cbdc8e35ecbc2f3acebdaa886e5fe814bcc0ada98b0cecd9e140a0d103adc9eb0aab1e5e48e9d7f4ab42e786d52f8fcc96d03db17c51fc17b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+lectures = {
+  revision = 53642;
+  stripPrefix = 0;
+  sha512.run = "e3fb80a67dcb5198503050d61266cbd3890c91c1c5c93042a17f2aa410223c3943e3dcb73d7d6e7a4d5888d87ae9613fc89025f0435c122ab44a8f822732250f";
+  sha512.doc = "bc50485fd0a8782095bbc37b9185bbc61df2a6bdccaef359f2cedd553cedc14ffd0bb8e6690578f1d57b85e2efa650a68af3b579a7c360a737791ddd74373424";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0.5";
+};
+lectureslides = {
+  revision = 62292;
+  stripPrefix = 0;
+  sha512.run = "48d99cd8a5b0c730af30c9c3585f0d2c9d9bf88f359f591bb769d5744412f5b76fe7151a744cfa194dc77f53da2737895fffc9b0e81de216d6d3f5bf4831d26f";
+  sha512.doc = "8bce5395c30b16ea534071464941e4d4df7622946f09daf4e1dd4f63f79dcbc05f350353bbfa474e1d990a37c0a61368aa34683ee251a4e34da5ad5c896ab84e";
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+  version = "1.0";
+};
+ledmac = {
+  revision = 41811;
+  stripPrefix = 0;
+  sha512.run = "b465117d5634dc4eeaefbc2c12a4d0fb892f4a27ed66057938701fe51e4dedfb5b7f28d796145d89a59b2667cf61c7175803f72e5970cf81244329130d173136";
+  sha512.doc = "7e7fa49106457f13aed11bcf80a1e38f000f5161e9a67bdbb174371db63a3953109f26da3cef8781d2c13abb4b86d5cb0c2b1b41e6f2cd3584512bed1a67cf6a";
+  sha512.source = "918f3009f11e3fa2b5531c5cf8ffe9d835e331793abe1241f01f01b14d990ffd1f3aac6ec153b17f77099f38c284965209cff8f9105c340bfdadc85f78fd5d5c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.19.4";
+};
+leftidx = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a01d085af4ac4048b5659e7f2f1692dd787b7c4cc9a0c06acf9852ad9d5aaa9790bdad6db7a76ec2f1a268af520ac35975a7fc55ef0d6373f244c85b8b6e116c";
+  sha512.doc = "1e372c7d307b4bae8fc5673c9654785db1fc7c510e188e7e0945e01dd502580479b7910e19132c7b8b169acf7d9de84504de2aa9fb580c9a526a5700114f009e";
+  sha512.source = "3339968b569bf6fba6d7332399d0727148add95c1c0dc2ae06626269c156a4e365dbbf672b652d3c5d097d0570b0955e6cb34255e3f8383f05ea52fa2c12e375";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+leftindex = {
+  revision = 56182;
+  stripPrefix = 0;
+  sha512.run = "01e0687f0205c40d95e23b5a9fea2dc8aea95d2e8d5abc54a0c21c1b5934dd68b3705cb625b7e7c34ee30d590cb3028e816719dae6eaf80e5c435078fa3b908b";
+  sha512.doc = "93b1c20788bc707ad90efd69194d8ecdf5154afe89870e51397c810e292b4e52fc7714de844580d0af5be0434a4493bca7464ca0d0b5f2641d9cf46a1f9c77ae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1beta";
+};
+leipzig = {
+  revision = 52450;
+  stripPrefix = 0;
+  sha512.run = "6811c2259558856d930901d2d82a47774c4c37ceb5d1309fa6b78ebb031685405e334e8de7cd63b1998bf673d5210aacfd096b1c6570ed26840fe4ec22359c5c";
+  sha512.doc = "a701d8c9ffc741099aa09f75dcef117db6c64a832dd51f57dfe07cee694a177a3a8be824560308b9cdd483013d4e69b77ee8755972b9ed504e033db6396532a0";
+  sha512.source = "957fda848d5d4b5a07aa0150019670058343764434b5a7151131ac1d401e4de60a6f57af72eb485f02d0e3b63a60edc291ce1692d408363b23f811d1c97fb389";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3";
+};
+lengthconvert = {
+  revision = 55064;
+  stripPrefix = 0;
+  sha512.run = "7796d45d91e157f2e901a1a48a7841bf222f86540ac00d59250e3f47568ab86832bc115340c0b65b27c12eb1a39cc2729cffb5da71afc413dbae737341d8eb63";
+  sha512.doc = "4191c3ce9b546f885c61243a343761a9dbc1ac031b3878a87c292d99a70effc89d927a1fd35eeafdd6523aea7c4bde0c90255057177767f534b471d4e098d3d4";
+  sha512.source = "ae8d4f8563c86a5fbcd56d40dc39df2bf52bf4dd5098b4976ddc6ec00b8512e2d6cf4a4b3f6fe83e27188ea24ad954c8043daf49aaaa15e503bc2f84f740ae75";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+letgut = {
+  revision = 67192;
+  stripPrefix = 0;
+  sha512.run = "0dcc57dd2e77f28a2df931e99186dc3ba4327073b222f8948632051f4e6d45383c8ef6de64443dc9855e6c9ec49f72fc0594a236445bdd135c50ec3aadee20ea";
+  sha512.doc = "e7fe29f8a7027e84cff04c0a70f077044ec07cad59873e33e6407a88f793c35fbd767a2a3aa43103a8bbca8d851ab9ba07576e8f318902fc0dda411540a312a3";
+  sha512.source = "c0d9c7145d89796d95cab9049a34efb634c0963867cbd60aad85e2f7df2b1f7ad356389c362dff239dd6ef8c7297ca5a232ab5364a4eac0c75aa8c6b92744d32";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9.7";
+};
+letltxmacro = {
+  revision = 53022;
+  stripPrefix = 0;
+  sha512.run = "c9c1f5c3b9aab6b31750011cd45c42bdb32ecd712ced8f8cdafe1aeca532159051d1cff1449b06e3d35fbefdd44f2332805cb1618ff1da022d405a88d600083b";
+  sha512.doc = "8be12930acfaa79dbf3d7d3e0a60a518b12392c094e1dc531bfbcd8d9517d4744e99d339b3b7bcfb1e156d0ccbd17ca464126d8530e9f9c13e29d19a6aaeea99";
+  sha512.source = "86863fc9935ac5044f2e3b3013b0df39cfe95f54fff5c6b1af0297b828fc88353243b117caf79cafb7f8c17d9fa90b2e0e8ca753573baa06db7acb26a978f30d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+letterspacing = {
+  revision = 54266;
+  stripPrefix = 0;
+  sha512.run = "30fdc0f87976feb698b9736e9deb6726746e4c25e4ed4a4637ff26699e171738be6447e8e2d02d154cf57944aa988208ee97859c0a7fac784d55fa6ef889b86c";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+letterswitharrows = {
+  revision = 59993;
+  stripPrefix = 0;
+  sha512.run = "dcfd59b7a51100a4e1d856d3cbc0d4f2ac258e745566b278e275d8ebd0273e7f96fa1431b681d42e10b1c7496596f1ecdd92753b8b58df4fe352c51b9b009bcb";
+  sha512.doc = "a21ff5d9a4c2e409cd7a32207e1e162b263dff46919fdad25bd5fbc1cca86329efebf847ed24ff7401293d8a318bde9fe7fd2c9def69f39740d5e0686c0ab849";
+  sha512.source = "50e2521b55a238cd6e461b3bcde326c5948573363988bf3bdcc428d04341728dbf73e891d09af65ca1832924cdbd0b0320bd94d662afdf78b3d1039ca3519231";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+lettre = {
+  revision = 54722;
+  stripPrefix = 0;
+  sha512.run = "308dc21e8be8d8f6952eadf9b5e9002fe32e8ea3b79ba679606badef75ae346721270e85e3fbcd269ee86b9ae049390164c57cfd73d7f2efe22fe82c7466a813";
+  sha512.doc = "9962763ae46836874eccf4ea5a2dd695eaa1ab890224d6a54e83670618e2cae4a917fb6bf05610c5104f4d241e0163e079628e79ddad3edf374b513cf6a457f6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.002";
+};
+lettrine = {
+  revision = 67923;
+  stripPrefix = 0;
+  sha512.run = "a87d35b6e4259d6177b30b1e8b99fa03ee76e4bf7c2ab281dd5064ca663b60f0932b66bd388fba64f1bb394e295692dcf43b570cf716c1f14265494dd70a6298";
+  sha512.doc = "af6034d748fac6e88c6494b17382435fa865fadd833fb87cf84f2ba4983d0b5e466e9dcbdefae165f521303edfb2f2dd9602a661cf79c74684b046a50dee4506";
+  sha512.source = "932416c613f72b7c979393749d89c5ed57541eae31829b221707d10cf2f14c2b7d44824dc34d13bd15211a58a72a44a7e6b1d3550977508e7b89180226f91e75";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.52";
+};
+levy = {
+  revision = 21750;
+  stripPrefix = 0;
+  sha512.run = "a71294df1b2bdb1402892ebc0c82dd60275cf41f6844cdd284e1ba73c8515e98258118c5a1e5158fb6d09acdc53427eb4e3f62f24591fd2eafc90d0bb69b71ea";
+  sha512.doc = "e69a1e2e421100a50416f86bda40702aa9a4d5c5b0b8c783e328e56e1ce587f832cad984fee2cad259603e893413155bc4539e853e1df0d95c89e9167c67b2e1";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+};
+lewis = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7dbe24061df0d0bb4762e7d308c895c99d8f9a9105137bce8c4e589c7fdc80f989aa8c3ebbe40708a8b6fa2a2df5542ce25fb16f528344ca46d50c47724e006a";
+  sha512.doc = "b267e3c79dfacdd7ed8c931a0e5954c9fd2ea0cfc12beceef3b40bbbed30bbb421d29afd263a25a5b0b5b77a6bc74ddf38e609262485eecae065d65e23200bff";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.1";
+};
+lexend = {
+  revision = 57564;
+  stripPrefix = 0;
+  sha512.run = "6a9e4ab844e5189e996b73ee95d5ea5bda0d5d9f7b00a707d5bf9b7ceb97eb2f37baef9310252227701d6fc280a14a8a79ff524b5cdee3610c4dc48968f6b3b5";
+  sha512.doc = "fa21e0311899513ca5f7031471189ce0269fcb35b5bb38d2e3d2e8015dab11ab2a10cc086ba6d41f24c25d99b32f91750371e3297c505ef4a522d61aaa24e5bd";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" ];
+  version = "1.1.0.70";
+};
+lexikon = {
+  revision = 17364;
+  stripPrefix = 0;
+  sha512.run = "7c0642f9e727d34175898138d27a838f0432a68659acd7986acb0b74183f28467351c169c52ab057daf46546d8ef9f9bdf30dcb1846b458b6b718ae38633b275";
+  sha512.doc = "4f1329d49d92d93743127e4f3ad9401e07529d31d2d68af86373f08b56ae69c22c70b89151461548aefb7fc1f7eca66cc1a4ac73407d82b65bd007f3372243cf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0c";
+};
+lexref = {
+  revision = 36026;
+  stripPrefix = 0;
+  sha512.run = "f9bf7792ac09a6b5a69ae642e0becbcb1ed0c2eea3254b31da62bb9b7e3e161c24109e0bcacc8b89e3d03426710378f04e13a05be467115eaea2be028f8e5812";
+  sha512.doc = "6a348acfd0e0701954195210bc717666308743f5f282b9efb7a253ab860a0372ed383cc2c8811527eeb2ed72c46be95cfb9e133d156fe8b906b67ed5140437af";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+lfb = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5b1386321f8c24673531b48d996a20cea9ed527ae60e608f63a790a2cbbea573d01e0351c1ef695b11f14d31d5c482ffa02b337ea04e649b7b758eef713f3bf6";
+  sha512.doc = "59eef59a1be002d28ce802617ee638b6c0e74efb391a502fa9593bf19e54f563f819f45442714b46a2e97f49bd561d2a2df631e53ad3847b48a881c8762d2d9d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+lgreek = {
+  revision = 21818;
+  stripPrefix = 0;
+  sha512.run = "f0b5cc9b7267aa07dc0b0f8c6d23a164bc239591fd13b5d77c5c840d33e131546c63c63a3bbbee2851000bda2e8593e7617f8a7ae381e7cd0561302a667acac1";
+  sha512.doc = "915df985f4766f492a70a35342e086567d17c155ea0dfce5514c6edebaf1dacb78998dc4bf5cc44415fef580a7779083bc2261a22dfd668e8f2023f1f15bff35";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+};
+lgrmath = {
+  revision = 65038;
+  stripPrefix = 0;
+  sha512.run = "415c04ea9add325ad71e678cafa99fe896d02c8b16facb0c4f69d656f0621e131c79be9470d15c755bfc4f63d9b6611e58829281c0e5c7209ac7c10ecc456b0a";
+  sha512.doc = "c68c01069ef48b668f471c86d0b562f2455e9bf022ee7a9d9a9b2c6475b9fd04b4e1b9b0eb7cac215f51ca965d35a1cc80102a6d862b2d72f9d9c72f07fd5900";
+  sha512.source = "044fc3ae8aad6637cb8489f1cb0fed9e5cbe7435a7615fb20b77c749fee43de1de6740b0212239c71106d7615c7a54eee36bb9fb35be571220744d6ae41da90d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+lh = {
+  revision = 15878;
+  stripPrefix = 0;
+  deps = [
+    "ec"
+  ];
+  sha512.run = "265aeba5ee99cbec2eca77a273a9e4857d78280e0ff17089a358e7f85d0595025e259b2edd471ce5287479531fe37cfeeaeba405ac9cabc7ac9616242815b6cf";
+  sha512.doc = "33f1cd39b2e68caa750ca5867bebbbc43c9948a7606f6fe44ba3bd8be84661fb562b5472ec57ccc3f6c18ef2823188c2f81ca4444b562f935e6f041d8ec0f39d";
+  sha512.source = "a81d3d7295101718dc4e66c6daafca8c480b281d7219956b0007adb4fd7e0f35959277931254fc778bf69c581b7d15ccf445f5037b589cee937211c39f59529e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.5g";
+};
+lhcyr = {
+  revision = 31795;
+  stripPrefix = 0;
+  sha512.run = "55cf81c051e8f23fe4f085990bc72a5b1dfc276e3ae1721680ad033deae1e3eafb1b9dcff3380ee20b72623b1ab8f117aca66f61441387d914dc29dc91c78448";
+  sha512.source = "18fc370261acff25634107705a36d06ec6367da95526a79fdd78c887234a2f2a6a17147eb317e97effa2ae8fe8e21e8df71cff3da5572055356386d26d2b06d8";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+lhelp = {
+  revision = 23638;
+  stripPrefix = 0;
+  sha512.run = "3a5bb1d95c300e9546b67c48cc2c3e1a5c3089c4430d76172a8d7f3cdc59fe03de1fafc6a1babeacc9259444e09e85e02a64f3b3f8ddfe3883511482b9ff0985";
+  sha512.doc = "2411bd37dba9c4afe1ac4251c9897c99e5934938bd802dbe89993d5b6ec0d19e1cba8b143ee5febd9ad73f0ef823eb79f34587e6885250a2bce8eebbdbf06fd6";
+  sha512.source = "42e419f41c8d8c00a4d27b4bd4499097b7c4c2b8b2e75c68fedd224796dcc9b9dd09054f90cc525286ea6b72a579120c3fc027239bd0f0630ec471bc870ec02b";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.0";
+};
+libertine = {
+  revision = 68981;
+  stripPrefix = 0;
+  deps = [
+    "fontaxes"
+    "iftex"
+    "mweights"
+    "xkeyval"
+  ];
+  sha512.run = "5c1dfc8bac01acd0e6e0d3412c08ee8672f01ebe1c7e22f36f313541139bea13d8967e53f5959a04b31d08c0ba88334b30c3e909eef310567b07ead39edafd3f";
+  sha512.doc = "54963a7cf440750aba83feb1a55d1de26ea6995716049d22d3f0ff742364db4c4ddc366d2937d022a3a8ed9951a114367a6ae1bef74c0a655b47007d38c2422f";
+  hasRunfiles = true;
+  license = [ "gpl1Only" "ofl" "lppl13c" ];
+  version = "5.3.0";
+};
+libertinegc = {
+  revision = 44616;
+  stripPrefix = 0;
+  sha512.run = "0af71c5bd17a2c89d85c2df056e76e4f8ff98b24de40dd306a9c4207c15dbe9dfd08864736a3a45f1c82f51717396ea843082f6798b89f7e9ea8c316453a707f";
+  sha512.doc = "010db594b034a5e401fd17a7772dd3dbf95c37d533fad97f7b1568336beca31523384da1eab42e74b2e8bf294b25a8d19df7469eddd65cc1bb61abd5dbe79d03";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+libertinus = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "93fc163a66e711943c22f383187d4f7e81aaca32f36eac6e6f944682169282544c9233d05a2b5e6d263dd95de3d8a8106871a0ea1fd2028899031e2cde1244c4";
+  sha512.doc = "8865b61037690bd3569654879866592750561d3fdeddd7943280ef772e7798194cf0bdb95809ab4373e1f082d1a1468b3b4456971b72dc892b07e73e2dcdecc6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+libertinus-fonts = {
+  revision = 57948;
+  stripPrefix = 0;
+  sha512.run = "5deeffa40e2399169a7ec16fec4d417c27350cb5ccb7f59eb1638172758e88167d24470d889b311760b0739b9fa0251e2389f7ccda0e4e8e2ce3a454406f13be";
+  sha512.doc = "410edfda953b321c9fa53e99854eea206177e4486c0fdd6ae3cc20eddb31111f28f17dfd725c5f2dc573d82ba5daa1f75c544709accae84292cff45d52b10c18";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "7.040";
+};
+libertinus-otf = {
+  revision = 68333;
+  stripPrefix = 0;
+  sha512.run = "74e8f653e1bfd28b11932b0a5e524e823dbc1759566a3a6fd3d74b854f40df7a78b5dd3845e2b8e217fe9608cdb116d1216a3139e21d4498bccf62b8d8e42742";
+  sha512.doc = "e708bc00e33f6cbdb1b21b1f62e968896f373301b8a3662fa32016c30bf913831d14258b9e1ceef3da39fc468dfabe0f9e4ff6f8b0e4357fe15bcd80c7e859bc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.32";
+};
+libertinus-type1 = {
+  revision = 67450;
+  stripPrefix = 0;
+  sha512.run = "6c84de57b1778ec35d9f56b00e577f9f8c1293132cedba43e657f4425e9bf01ab4243fe6ffb872aeb99b446019539a640d29c88cf29cc86d649d2a00f77952f7";
+  sha512.doc = "c656af53b98735bec8c63c3e56160da943379f4b908f553a27cd1c82111b201eb15c1f1eb1b6ff89fee281c27ea36d6fffc5592b75722cd561c8770ef2d3f6a6";
+  hasRunfiles = true;
+  license = [ "gpl2" "ofl" "lppl13c" ];
+};
+libertinust1math = {
+  revision = 69062;
+  stripPrefix = 0;
+  sha512.run = "9a44af1c4f96453aa69c83658c9474838efcf1020c9301d12577a403371d2b3127fefb57baa0bd5fa5ef737e842abd4f9c368761ee38f6285aeb5a2dd88ad1af";
+  sha512.doc = "14c87d5e0d19d818152bf1a5dd7533eb651d5b477f3e42d42277fc4040a263114fc2006000af25884c7dfc64de0936d950fcacdf7fc55e4d09c2d756400c34f3";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "2.0.3";
+};
+libgreek = {
+  revision = 65004;
+  stripPrefix = 0;
+  sha512.run = "bfd9b373b9dd5bf637dba467b32a8b15965407ff1f6d47629f400b919d7126d5f37e1f35b8624cc5505869d8a649e25db2a175de4aaedc50a3607d90848c6cf6";
+  sha512.doc = "94f7022093b0b1c3903b214a3e874751884020a78355e13ae101a2d336eb25796ec0f8388884f5dd9600badd15992978f3c9516a5a6d8ac1d7d3b92046ecde96";
+  sha512.source = "7a04909b6663987eb42f690355b91ba72056540f5e4cb7e8998ef04db7bfa90d33f605103b01a383107a1c0629c9a328006ec2d5b2d0d98777bd4b69db779db9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+librarian = {
+  revision = 19880;
+  stripPrefix = 0;
+  sha512.run = "2a01755bec49fa8c78680b0599b58649b803694f339383ad168bdc06554dabeab3047d1b17d63f7487860a5d0102dd8f68a78d5ad5ba94a2f8b29db7329e1ebb";
+  sha512.doc = "6d95e43b1f9965fe016bd9fc7ba3f9df56716d8f6c89948417643bffc4b9e89f8a5e6cb045e873daff819a16cc10cd61e74e73e98119a076580967187338be37";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+librebaskerville = {
+  revision = 64421;
+  stripPrefix = 0;
+  sha512.run = "671894db7ebd325e35efba47a8b84dc9afbeb213358503f65e246e97af090be03f6591fe124d4f5b4c53ae99bdc7a56bf84d385597ed7564fa63f7fad5265e4e";
+  sha512.doc = "9cfecbbfea90ff99af78bac088674061c7123ea046aa42da806fc09d6fe5e88c94fbaa3053bf87b563e55f514eda5cda108d5bf6b096253e79fa0d09567221ee";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+librebodoni = {
+  revision = 64431;
+  stripPrefix = 0;
+  sha512.run = "e1bc9e0560febac6f6e56737ddc070fb9642ca6e701699dd3546e63fa681ce28a995e61b4190edaf4d9b9f9a4131b77436d69cbce47e601b11b63caa25bccc7a";
+  sha512.doc = "be63dcbe34c1f09f560f85aba54e469b3b14331a4ccaf8e44ce7ffcc649ec1a0c4ba2494ff844cede73943a646cc8c62c8bf7a949b602389e4abf9ae5181331e";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+librecaslon = {
+  revision = 64432;
+  stripPrefix = 0;
+  sha512.run = "96c3193cfc16b5cb312ff67303825c7e9733642108a601ee2b8dccc6e8d6aaa0db28e2da7c84faf71eaa1576ddab230bb6f385972d95f4aaba547e57a82b1e54";
+  sha512.doc = "9f7c6662af462f0c73b97de098cc4bbff5a3060e44a72ce294b175c5d5a3f520a93026b1bab17bdaf5c48d2de55c4045730386f7f8f046b3ff797c4d715acb8f";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+librefranklin = {
+  revision = 64441;
+  stripPrefix = 0;
+  sha512.run = "35b304ca5b24ea88fc6a5227361db7f825a99eeba4b1ddcc31e5e71bda3f6ec911b00e2ec7ae9f54022748f39a26baa61aecff267628343dceae8eb8cb07bfd2";
+  sha512.doc = "092dfd68010c10942f030828552e4609ded2b27bbd13d213556ad301629893748ace3380aefda1adc8ad23261b2de253599f6784b461fac8a1bf49cd6e1370d8";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" ];
+};
+libris = {
+  revision = 19409;
+  stripPrefix = 0;
+  sha512.run = "1a754d896846d0db358cf4f878928dcb511d76a7de6e7dfabee71970908e3ed7caab98f854695318ead334e052282b690712069597f42505b00c41e328ad141d";
+  sha512.doc = "04378b8461d6ea0284f038974fed6ae6fc48fc362f63dfb8b8d57a81a721da7bf17ca3aeabb198c373a68a4c8e5516b66f12c240e081dabcf1b9c79fd2d2b388";
+  sha512.source = "8ccb8a6beb30c508d582dc905136cc8b1b053a8d71a7701bdeccb0ff1eecfa69e32d7167b871d4e38eb0c98ef49c8ee9a00a9ea3bbc30e51c8a81d903ac147ff";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.007";
+};
+lie-hasse = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "b71ed475c73a94a92b8a8078a4edccc73f7d688bad7a1a5e6218bafba823b76a20b79da83c7591903fa234c6f0e7f776317dd8b740e5fd7cd014821f8dd77c94";
+  sha512.doc = "d846971b6b8429e58521ad0cc564906fc06623a3764117069fdb1912aeb84858e7af93ea2f4a7732c6e677f260f10a6a9b79488d43caf56ad158152245f8e4aa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+liftarm = {
+  revision = 62981;
+  stripPrefix = 0;
+  sha512.run = "a4938aa3e9a7c844766c2b6ef5959fda39f4de50325545d64a319a9d7f80ac2b3b5c4966e1db249e83d4cca7b82a3a7a60bff90c5d425f32a2a5c5b55b2fc4e9";
+  sha512.doc = "1d4917e9a032e459ed1922b4d1ed5b525d3cc8799dedb8d435b0a387fb9c529159b620668bf5e737e87c68e434f2c01004d6f6b2100ea2484f179f2105901a73";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+light-latex-make = {
+  revision = 66473;
+  sha512.run = "1ede05b31d3b7acdd0f38b19e83b4258f05ddb184343dd36a46f142adca9f4081631d687411a1370be880dba5e3c6ad3f1c21108232e8b8f4fd03fdc1f3ad60e";
+  sha512.doc = "f5bb10465cf3dd983f59b101f6c631e202ce655282319c773cd0d83c0a9a8a3b9cee7790ef1f803b0c68215b553a2668d861a51dd9ec35b2dfe4b07ef0cf3a08";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "mit" ];
+  version = "1.2.0";
+};
+light-latex-make.binfiles = [
+  "llmk"
+];
+ligtype = {
+  revision = 67601;
+  stripPrefix = 0;
+  sha512.run = "f75a730290acd024eff3ebad6965fbea0e3388c98e0b6f325183758a7771de4b165810e7cfe05c43b12fb0cfcf71c51665c082bab82e44772ad0e0fb4b21c0ba";
+  sha512.doc = "dee12f5e8abdff666582edde442085e8c937b39fcc5ad37759f0cfb683cdeafb63afce7a051573db307d2c416eca46bd9bf626f0cc3cd44bc6e1379c428d2e09";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+lilyglyphs = {
+  revision = 56473;
+  sha512.run = "2616757691d289e859fb2bc161c2a5b5312bb1cd824aa15854520e004a639e597f42515756b3cad383e4e33b3057a1579ff5c2ea7c39d8f9bf9d36e9c9b58b70";
+  sha512.doc = "4d9ac765c6a4b2b736d08569eeb6d0d8b168fe96563526264f2485d3d27a944a3e81c6144cd8f1d8cb5162d425b436fc688172db18b09610b3088df4ce868a27";
+  sha512.source = "e0a1db8b5c4e57374ea19a7f8da3f4a89a2947869eba3f57411a9e815d645f4cb4200832276e3d3c869e2b3a8e3018e8e0f20f942f2396395b7739d7e9b23951";
+  hasRunfiles = true;
+  scriptExts = [
+    "py"
+  ];
+  license = [ "lppl13c" ];
+  version = "0.2.4";
+};
+lilyglyphs.binfiles = [
+  "lily-glyph-commands"
+  "lily-image-commands"
+  "lily-rebuild-pdfs"
+];
+limap = {
+  revision = 44863;
+  stripPrefix = 0;
+  sha512.run = "eae51f72a65d407b091244ed926ec98a7bf02ed8c360fcea2d614011555195992d315bb22b3697c8220f8e91f34a1c2f88092f34697dc9ac42f757e066198650";
+  sha512.doc = "748504c008704d2aa1c763920c03c72372c89368e245fbf4172b442b6e9efe11b3754f37c37a864ab19301c8822aa31f0d25f80edbe26405c043aab8a0382739";
+  sha512.source = "2fd49d1313293fdda8726c84438a742095ef9a917369d8ac62d619507f540b4a9ced794472441f8d48edd5a5cc575ac2ac8ff43b3a50ccff70af0416808dd611";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+limecv = {
+  revision = 61199;
+  stripPrefix = 0;
+  sha512.run = "14c7bb278113e8d8ec249e18fe7a142f5216984468a51a2c64926b2dea6e79d928310600cee498cb3773b0ae70e97199b4800a8c5df94431df121ccf62955b5a";
+  sha512.doc = "7e64c4a940dfb321da2c81ae84e709e1601068935f2531c8e6fdf514b5cbca6407485005f60e4f410a303b97557986f1962dfad976a3c3914d01309c67ae8049";
+  sha512.source = "43ab876f14fa2f920741f26252b852e5d579e9394efa1d5e00753f23365b62192293aa48850275c2aeadfebae4c2f8e0a929d4459c5feecedd7176514dbdcc9f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.12";
+};
+lineara = {
+  revision = 63169;
+  stripPrefix = 0;
+  sha512.run = "b87051ba4647ed2f0beb8e5bfe8419d8558421f509cb6eaa931f47a10488dfac4e36b3ece1cfdbf3e46eb431c3d15e7a7005f27522dbc4cfe6de52ce6127bea5";
+  sha512.doc = "4c87a47d08606416e5d6605edb3a89bb3a67babcc621dd28b8ca02bfcb5ba6108e56e76fc166ff0d6a54c058459acfc8ee6b46d49309d6333d13305d00d3179a";
+  sha512.source = "6476de5673f0e0f4896b0f579bd37e31c7301916dff1de1a957044b7782c04c43b5b5add887960d1a7013648a7e352d2655bd9a8e57dd0cafd31c851cef5f21e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+linebreaker = {
+  revision = 66639;
+  stripPrefix = 0;
+  sha512.run = "282c1687acd1843f43d281804ef4860967c069b38c415cb015c0694ddc9d78e03a5f3456a8331d3aec341d856474fe95a2f4fd92b786c2834d65cfaaf4b9198b";
+  sha512.doc = "d39b7d5ec0712e3e26ef76f9e1177f6de5413dce21b143e791d79c8980be640c785448fdc8fffe48fa5ebdd9d2d594518b73e8db21cb16cb99a8d9377ce8f9ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1c";
+};
+linegoal = {
+  revision = 21523;
+  stripPrefix = 0;
+  sha512.run = "87a062513ff7674f315472cc46e13fbce99057c3b7083a2b9c93b92f09d538af29f5d1e3664dd5273080b9037ac232dc0d7491753b83136d2d3558ada1b81976";
+  sha512.doc = "9c61ec4fa6bc63a57f7b272c7dfc55035e8e4f14225bbd2763157915fd351a2bb4f179150801f06682fd9bd59f756edbb127e7bd68592ffee5c1cfbac91b10a6";
+  sha512.source = "69133c573e53608e6b341abd7e745ba6b532eba05bb9a2ff2105bb9da69e31bf590fdc3f06241e5b667ec7f0c9458a908f5ad72304c7a5c9e412c0057611c5cc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.9";
+};
+lineno = {
+  revision = 67171;
+  stripPrefix = 0;
+  sha512.run = "7171da9917c0218a0c55c43126ecfe07b9e55e9633b673c89ae18f08897bb1634cc8412cc3051ebf6640afc228e246f1e5549ddea45261a6ddee01d158f3b9e6";
+  sha512.doc = "ab4aacda9d0f4a9a2aefdf37b23067ad27eaf40500fd92f7a4c619f9c012a40ac0c69fae32c425d6c12d2b89e6d6c2ad9585fd75b2af8447c9f7d333473add73";
+  hasRunfiles = true;
+  license = [ "lppl13a" ];
+  version = "5.3";
+};
+ling-macros = {
+  revision = 42268;
+  stripPrefix = 0;
+  sha512.run = "686dbb33df2670af909a80863943a8870ecef128679ab679f3d90d1747042b752c9aea15660c962b0f02418233d4d152e64357d5b57884a2fc2371acb3d90a52";
+  sha512.doc = "fe424a7db4be743168c4b1016fc25c95d33cf9d66767b39db0e79a5ba1bb667c76b9b5f10b23a08449362a3fef281d60f0b53e2b0f196846efe9f4765f3f08c6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+linguex = {
+  revision = 30815;
+  stripPrefix = 0;
+  sha512.run = "36fab316a894029feba86bf771d4e600b3e7f5d766deb9d844605979b066483500c8fa0a425718d22e9a2bc14d74aada16ca8deb7ee744a81e18fee8c77a7b50";
+  sha512.doc = "7a5d84d5425031d341deea8f37f1d8a9f6eaee820ef66661e8e38eafad2b20a5e9b04b81b1a0db0b11ab70fb0adc9c81cef886978626008eba6aa3c32bc0c848";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.3";
+};
+linguisticspro = {
+  revision = 64858;
+  stripPrefix = 0;
+  sha512.run = "6bf94e8910ae03314a3ff55157e52586b5f2550c2aaca1a8989b1f02400c87363c74e00658ee953c13a44dd69cb253bda6128e66a96b865e6169310165a7f9e4";
+  sha512.doc = "8f0c8937cacdec2e2ea4999dd1bb45af96a99a3707ef22b54a2bf1e0c745d663550ff0b68d80cf895e8bdfa1f279873c4725c7851af547f06155589d8e5bfde5";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" ];
+};
+linop = {
+  revision = 41304;
+  stripPrefix = 0;
+  sha512.run = "ba0c5e053399c44203d6eff42252854a16ccbf12132ee6e26fa577587554234b36ed31a63f1a6c40059e0aab8d9367a5b6aa6f34d552d64866b46e68478c36b4";
+  sha512.doc = "e63f09e370a53dadc92591d105c677f2a5eea4cbcbc4e3133448df64b10abf2eae1d76cdeed5e288f610be13eb4baf8f248a6e9df92ab79066078ee165b9fdc8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+lion-msc = {
+  revision = 55415;
+  stripPrefix = 0;
+  sha512.run = "8eed5de445edcd936654a9d7ef8e227d43b479f39279025115fd8586cb7fa107dbacd8c7272e868eb11de0e320740fb8dc5c1fd26327fc6e8394c8924ff37cf0";
+  sha512.doc = "87d5b7e8fec95c857f6c45aeeab3cd6eb70e9b7a237eea3b5a4deb8e92ec8ddd5a381c88ae4919bc1841df15a4b93a569a996ed032cf2b0b7a5bb088c779e873";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.30";
+};
+lipsum = {
+  revision = 60561;
+  stripPrefix = 0;
+  sha512.run = "24697be378aa490bf71194c8622400c11e27d5c6549caf2362250017ac97b4443986a4ad5f8d2d96aa53cfd7bcf5cd7ada0e1ddbbbfd27135e2a23bbad21563a";
+  sha512.doc = "ce44b2d4acab295bdcb2d0edcefedea449c4dae7cc4c0d62ef73e36169b0858863003bec1575000bfb78b1ecd9e5413807a89bc464b5d173f05a43313c7a22de";
+  sha512.source = "5984bb97fbecbecb5aaf26f788a6879682f6ec39c87e01c834533a779384b20ad02f1825cf5c2339b288cc61ed716eb3a76e51c45ccf80849b4434132e0c4081";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+lisp-on-tex = {
+  revision = 38722;
+  stripPrefix = 0;
+  sha512.run = "67817d9894ac5bc8d456ce2b114eba81b0c444bf53422c4acb5066b42cd5cd55d73c46fb2b443db9fe3b13bebb58d6fd7f2bb31686dc4ac2295447285295c602";
+  sha512.doc = "fb3a8ef4ada38d910b3055f408059daf700946c84b17873846175e6cd3075ad7f3889d2af154adc3a7898ac33646251bdbe0d8cda17ccf354dee526a96476432";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "2.0";
+};
+listbib = {
+  revision = 29349;
+  sha512.run = "e71bda783acbb8ab6ccab3d8af535034caf0eea919bbd175685fe50585970b87613e0df5ed076967aca395cd8c7f1317e805fb1cf765897b03d6cc131d3d98b8";
+  sha512.doc = "0ec0970f591fd3a840c27730d41f0b817f631727c9c7219880b45209c21fe0d3aa616eb6eb94bc7016a9acabfe9c50846d872d3b36a104e1f4eb74dd003a16d3";
+  sha512.source = "441b13ec75d91c68b8e7253a5dc9a6e515c5bb0df81a4784dd414b1956be6f2c9189051ae9090a04bd4d11919945a38ad6563f41c27d1b8d03ad283f71c9a19d";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.2";
+};
+listbib.binfiles = [
+  "listbib"
+];
+listing = {
+  revision = 17373;
+  stripPrefix = 0;
+  sha512.run = "154a9eb9da19d4a1d9f6ed421bc13f1f83279cd456b95ab8b7d84f9c48d6aae5548b7357e46041580d4b457758aa090e6352aca9d9e20f1739dc589d4fa24bdd";
+  sha512.doc = "11ef594d55ee823dab2a88ad5882e1ea89d7741f1038d3782ac43fa43cce948c1ed72096ddd11d1efbcc3b43ac9bc4dd23713f725aa71807ea174548d9a5c968";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+listings = {
+  revision = 68476;
+  stripPrefix = 0;
+  sha512.run = "7bea53ea00e877b33586378c32236f2269f6dad6169101f7164293617bf9d5ca43745e2a549a993a899b4ddc45254b3b032e112576c57b7ea7653a2e743fdb4b";
+  sha512.doc = "d62e73a7df88b7e07c53367e07a6867e26145ad1f4fbed0f8cd0836c10e234695c9b3d97eadd9700547e33f3ecd793367be7dd97ca4d46bb0cdfbd07490c61f4";
+  sha512.source = "1a89476029706617cfab1319a65e6e8353455ac63fef8155e2e347c34c2b60ca6f2b264113a2c4ced52c0872a66efe8d4f53b67274d7a94f2a1b51de7cf198f4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+listings-ext = {
+  revision = 29349;
+  sha512.run = "c68752d0e7a1ffb7d08f153bf337849164d0287f20ff8f092635ad7083b2e5a6c487bcd9dff913dd029f4ea92750768d23583eed53a0c2d3bf012e4db059708c";
+  sha512.doc = "82491f81dfc89950d085f7cc41dabdf7b895b23c8a69f80c1b4f4c420fe8f036ac181b56e3ab60496910d0f1165ce19b2f94c5e268dc1d59e352ab6747e3bee5";
+  sha512.source = "fab34f07d6384a5474f3ac30e2e00a75398418668134ac1041cabded6209c9521244e1637e4037e7346bc70b3247ebcd90526d5e34fc3c4e388fa978382bf228";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "67";
+};
+listings-ext.binfiles = [
+  "listings-ext.sh"
+];
+listingsutf8 = {
+  revision = 53097;
+  stripPrefix = 0;
+  sha512.run = "846cc046ced340cafd98f009a55e891bfa6bd5715c94c0dbd5b124599c8e3aed1f248f56592795184fa040285001b0d967dfb26b0fb764bdfadcc2eabe8c3122";
+  sha512.doc = "fd15657a8c7e8af4d21721f64ee0c2a77606d965698fdfeb581116f3b13dbf95bf774b77f019bef4cdb4565cd1957cf040818b1d9f78425eecfccc48ab6c5e28";
+  sha512.source = "9ee30440400c6cba5726ad3e15e0044fb18b74613237da64eca9e188246193b6e0ac205af9a3e7e1b566503330a85bf6507db7c3ac4caba6c31033f9f87404e2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+listlbls = {
+  revision = 67215;
+  stripPrefix = 0;
+  sha512.run = "bb0391bd671c306bb34abc336f74e203141fb0b2ae131dc36820e24716ddb5b7a1bfe9650baa5ba4cb4078e6f9d097a9a464aba1022b36f76c3257e25e583979";
+  sha512.doc = "773bb3996ee16ca65ef8a91e42e6d1641d42ae50de7fbe4b8324ad9e70d326d0fbca85e245d48bfea137a65f33ffc6e81add6208d239992012ac1851ca12d4a8";
+  sha512.source = "441fa4a8ac0e618a997078368794800f57e25545134533b81121718bcec912c1c367b193bf7cb3756102ffad4f75497e63c9cef611319aa478fee955c9cea780";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.04";
+};
+listliketab = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0aead2b70e314639aeb98c199d051fb0701570df0263f452bb2e65408678d437c7eb071c41d8674971e42a0961da30754696a58eaaa41dc32d33ded58a833153";
+  sha512.doc = "70ceddb9c59981319ec33fba05c663ecaf549b5dab56f29fa07f9c314d97d999c762ee1efff0d20b5e35b39e89b031458fdde4c5c708e0a1c2dbfdf17d710c2e";
+  sha512.source = "68b75e9dcce30acb59d928f4ff95732cd7e37061d31625f8c1835ef6b8da85ef39f4d8ee86b50e299e71cace2ca5307c25641042f325a93a93bd04bf804ec5b4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+listofitems = {
+  revision = 66655;
+  stripPrefix = 0;
+  sha512.run = "f108d1a5c1330afae1c6a3cfa12fb3d345bcde5617245a9ca736ddac9427b4375f926d11f706d91d87f8b5b55f6f0257922e2068712e969c55b6e5b7436043b9";
+  sha512.doc = "b9264957510f892b5aeacd299df184e93881083e3256754c2f89c4f76adad5abf9f23ba4e56b013ea7e98158f8437797a6ce9d5287e5b76199aa4bc0b8cca188";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.63";
+};
+listofsymbols = {
+  revision = 16134;
+  stripPrefix = 0;
+  sha512.run = "dd32fbcd59fa9ec599b0a06672d2e810b5b8172a96a4170cad03a93be3da21a02a036967d0e7e3a617bad6535aca2b1a34a114c383b5ed1aca22bc45239266d2";
+  sha512.doc = "ff8bb87ee326f0b0df175eb41d634d67cf2f1ecb76f1f8dacf2e19d061e54c4f5cf8e01c7e8c41087ca6b69a04f5a3184ee8ee39f00758d3df2f24a4b2e372d3";
+  sha512.source = "b232671411ada9bee8e9408ac9f7bb94e57010a39d916beb78d3f04dd1826203b37f8b8d4f040cce5bf0cc6b7ca97eab97d6f764ffe370b09c361a44af530837";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+litesolution = {
+  revision = 69115;
+  stripPrefix = 0;
+  sha512.run = "5a1ed66916daa7babfd009615584bd6065895848283f46d8f95d2fad69bffd6bfd59c8acb991ef7357100a63e7798c44aca3725ce0e89650adac13ea9e21428d";
+  sha512.doc = "aa750b1a4fd7040b946275239d5ce49848ea031188c1703161de300dddd6f502c31ee7f7a4655b26253b76054e6b487ddd56a9157684010d3b006900e94d6374";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2a";
+};
+litetable = {
+  revision = 68782;
+  stripPrefix = 0;
+  sha512.run = "2cd3dc7c4025bd9fc36ae8c47d54ff8db1d237c754234ecc13ccbe8d6456c7035a2e99961ad161be4c9da3fe2aa03f9e0e714ea2174c64d2e152af1e036df055";
+  sha512.doc = "249729d269cd9d9cead6ec7bef4731549d18cb3b01bd60197bf0d7374042d70e73767d3273bd149fd0e96534494be9ace640586375797f4b907b67d76019e11d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1a";
+};
+lithuanian = {
+  revision = 66461;
+  stripPrefix = 0;
+  sha512.run = "c2cd1b54daf74e78e6087159fa827ece77f2dc835eda81e03fce861581e812536292f3f0b70b8bb77107c0a4032d12006e870303156a3f3c7cb653020ed9b97c";
+  sha512.doc = "ae7a5e3bea2bd62a0cdbbfbde7e0d9e06554fa4b3bb825b45febed42556fa101fd2e6c611ad9fc1cc87ed5c92540977780fde47ae78a89dd37b70f89c94b5e8d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+liturg = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e97da4e9046fbd60ac2b22bc3753db7a75b5b6aeeb6c37293c5dd1e4e8fffd18b32818b9038b816a405033ff74d9c19ec2443b0169721656af687f1c5d62cf9d";
+  sha512.doc = "6b342e85917d5a70dc32461de01ae3c6ac66ca247b4ba3d812b7645f1cd1d961c914e584cabf743bb03ea74cac144ec05b03cc09d0c23cf7bbf4b8ce7d01937c";
+  sha512.source = "07bfbe684ae7584cac1dceb3d9012607ee24639a0e4e858d2f570f4aa3c21280bb6116123910a111c729dab794e568c05f8778d3b71612ebc288b0c268eab920";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+lkproof = {
+  revision = 20021;
+  stripPrefix = 0;
+  sha512.run = "58c211cf1ed20b36e69ceffc8568fc1cbdb51cb812af79d16a64cbe8a8e7e672a2d49e672501b2cb23ef72c4a04c59017e17e538061159c8b9e797624f8334ca";
+  sha512.doc = "01c3f1b50147c73294dabf83d79811862d4742f5a76f69ff6f6a1d5a2b0a8462e3728ba6e4d6fea57d3703c638f6cf04568948d45d4ec8d1dfe59571ff2933b6";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "3.1";
+};
+llncs = {
+  revision = 68731;
+  stripPrefix = 0;
+  sha512.run = "11a2d47630302815578f0ced6483e1bc680bbc7030f17239d5c896de64ebe67a55626a73a88ed2044b7e2c2414ba8cb6ecdb2fe921493817acaef52634ec90cf";
+  sha512.doc = "a73bba73deb5af86726323f9065bcd31406e3091d5a1fcf77b5ef0ee7a7843a6df729fe31f7642e30ba9a9e9acd2782491607ec3d7d67679507f4b124a9a888b";
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+  version = "2.23";
+};
+llncsconf = {
+  revision = 63136;
+  stripPrefix = 0;
+  sha512.run = "ded1d0ad62120e6665653575e6641a9bacb1fdd18b168f7c4389e2d8bbca6afa8cf15bbb7cf087f2ba502f85bb492dfd5d79862e03d909227666af7d8860d47f";
+  sha512.doc = "1fc61aab273b9ba1ffaa95cc2716f36d61bc5d7d7c03a2470e3dff5fbee20dda933e4a38e5b39a7e165f68408f993de693ba5547b673e9faa9e5115358c9bfb6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+lm = {
+  revision = 67718;
+  stripPrefix = 0;
+  sha512.run = "9e05642ab07ebe05c13d5fa98f3212527aa66a9d049f8eade506cbd9f0652315363a01ae20a9df873055e5283bba7574d51251c7dd86e56ebc37055b92379421";
+  sha512.doc = "d15569c1f55553b068b8d3a73efdbdb74137d02fdda5db5d57f29203dcd92dea7746b73a3f30293b2932f046e60697ea015b83d2587cde2783300fa41967c5b0";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "2.005";
+};
+lm-math = {
+  revision = 67718;
+  stripPrefix = 0;
+  sha512.run = "2fad475b347824d564525de51ed5bd1cc7ab2fc27fd826a00e86ebabd7d85afce2f7a4c85d9620c9b66d14ea0c813a269a13843a0b27eb7d0ca3e294114aad26";
+  sha512.doc = "fb1800349628229dd522d4dffa182ffd2bc9411803f5b349c88f4046d81117d050a3b681e3021a514a6ada5bc49b648b8dda8b553f9294f6d4fc317db0cd5990";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "1.959";
+};
+lmake = {
+  revision = 25552;
+  stripPrefix = 0;
+  sha512.run = "3613e9d53808b2d1e326175c28acb672c1f244b2e00ea1d544e1e05c73e2a93e49b5e8b187a8a73e87ffbb00c22235781983a2c0a733a6ae5598db12c278a763";
+  sha512.doc = "08fa487d9151ea6a49a73044d1f6b41ed0c636a69e04a2c9f04bce996f915e9d267383a6fc374f3292c01244981fdebf6d9fc462ee0fc151ded2601e4554593b";
+  sha512.source = "d18894108d2b4b5d46d4e212648b6c7d76894faf4dd45555371d17df5f6d186d4d2b5c8878e745520441eba2459c5fce320bef28e23bb59c09f01fee44a6041e";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0";
+};
+lni = {
+  revision = 69361;
+  stripPrefix = 0;
+  sha512.run = "5b091deac5f045af63d4351abfe70e28343ee46fa9e9c62d2cec409b0453b1c391a07abb743be24c8d01f8e5063964574ee684beb7b91126da55fc8e0663a831";
+  sha512.doc = "da89225db988132af56a8f6be0330e5ea761d1a8da1237c966c3b30f91c776e7e2c118e8aacc843c23f58d3f514c5e0cc6c2d06a689c886be90f8d309215095a";
+  sha512.source = "e02d92d0878fe98ce533ad9fcf058325c7d82f9548cc3211d34ba0d9d83e515c41cc77f588455d589b50ebc41358ecafe0c84e501ac60a402f8d548a1fe87671";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8.1";
+};
+lobster2 = {
+  revision = 64442;
+  stripPrefix = 0;
+  sha512.run = "ff9a64e40eb1e8d19ed353e4c6e46472f48eaa057a1283e8203eafd895cc622c031a849cf2cd941a664b07c4acc0e9fa18ca65acf6420cb3d40ce09c6ab6f391";
+  sha512.doc = "a02034161dcd7d09ab14d907fde0b4cbc570ee7e13fc1945e18c71eaffe90e5dc039266f0ac83dd7887fa1e298add0d2be9e4259cb58f6dbfe13b7bce228ab8c";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+locality = {
+  revision = 20422;
+  stripPrefix = 0;
+  sha512.run = "c7fde4ad74b339d340a046a4f59ff73da45942631c6b68275d365c18ee80b213d18b84540b8ee535f012aa18ef559e88b1df3fcff4560d241ee1147695824a2e";
+  sha512.doc = "5b7fde689fc764dc75930522416cfeb51ec30eec64080b289c085be4b00a0da1c5d6d79d2734502ca8a329bc2935216a8b298495e0ad1ac8331c6d3a5718bb5f";
+  sha512.source = "bb1e55107d9b16460b8990f35461bbe775c674ecb2dabb78d19514e365cc97f0b03ad5884b310edc60f2fea9366ee2633ddf4280165cab562038e024ea9267fd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+localloc = {
+  revision = 56496;
+  stripPrefix = 0;
+  sha512.run = "abd3aaa28d6c90182990890ebc8aa0ab1d71833549e9a1ed9a09d7fc2db01cad45efb231cb8d3b09a849c948a6f7ba309954d38152af88fa8cd3e38cc857fe68";
+  sha512.doc = "40fa07b0d5a5fe0603a087ce9440dd6d95ab188b83b4adf847d7145f9e1f1cc8e2d8ef49c7ee206e341db26afd885308ef349ea5a8c2b826ba6664c347c7d8c5";
+  sha512.source = "9a19531358e4809a90c1e571a8f7c507ec1b0807a009627ad2dfa3ebdf97fb749a4f57441b0855e44cae93ccbdc64e79b640de078fb9ccdca1de891a2d156eae";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+logbox = {
+  revision = 24499;
+  stripPrefix = 0;
+  sha512.run = "0c6f9d401c81344465d6eaa6eb6e655443c4af1622bfb6751db508638e2625aba7b5e77780fbb6453eee40b8a7ddba84d70ceca8882049779db61f83e7a15aee";
+  sha512.doc = "21f379c88638ee8499e7e47abb0850822a08d520aabb352e0f85ed0c38950aa71b4f9b3d430c31193de5640a915d0c84dc28fba71443d3f2e461a2dac53e2b9a";
+  sha512.source = "3123ed1fef39d4a252159c65e0cf938933f2ab4c693d8f7364f20e60accb20e32fcd9da8828019a8cefae1fb874605ffbcf88dd7123fff91871858cb5694a985";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+logical-markup-utils = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "87f7fc345935804705ab25ab010376fb72bc4722c75bb115b0c9dd0e0a51fc8bdd6dd4051b76dd083ec07d80b8c59c5d18423da55e0430db7a9f94ad0bd45906";
+  sha512.doc = "80c44068a6e474071e40a0bf3dc67f0201b21eb84a041fad8423c59c9e34ce138833c54ead638979357dc3026eea55da034daa05e71a56ecabe701ebf53faf24";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+};
+logicproof = {
+  revision = 33254;
+  stripPrefix = 0;
+  sha512.run = "d5b15ee5f35a9ef94618f8b092e97ccc4f1959a617c2e604b99ba56eef14c4a1a078d66f2c77d02239289e30878293ea6c9ff4134bd003331fc41fd3db19cec5";
+  sha512.doc = "bf8a33c5db05a30cb4f520fa2f73f572a90c3803c4b6dc1709f9e2c80f67e32e7665ce898852dedcd3daa8974bf909034d06f805ce473318f0f512645ceaf9da";
+  sha512.source = "4cde464059a65161c6ab069ef0c8905e4e6cefb7ebfd8c7c3b2af909209af4a911dd1bb0daee5b27868305660601187fe7a105660b395de98ae3d30864f012ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+logicpuzzle = {
+  revision = 34491;
+  stripPrefix = 0;
+  sha512.run = "2c642c7aa6d6f12e51228432f8bd9fab906ff4dd3354a49f636582a065bff0f534222161ce11306ff6bf3e354a9ca6f6394cf9826b321ac94e9ef5ee8c0621ff";
+  sha512.doc = "872a72ed13f7dcb43df3bd2f2b7bd504e3e430030115faadf0a130d2fd94331a335c4853e37c78e4b8aa7c59a44bfd87ad2a484b1b836c2a7526b97ef26ddd56";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5";
+};
+logix = {
+  revision = 63688;
+  stripPrefix = 0;
+  sha512.run = "29a2701ae91a5d7fec49e564b90b8a7e31374d2218680f4fa0c65c9df6dadae78c6599977e88cbf293fe2435d8b7403f41748abfb1cd5f9b00e94c76ff43e139";
+  sha512.doc = "7b655c727fdb2775a0d980bc54198d1b2c262842fb278f94caa764204022f8da4bdfef8e40a8560359e6fef23e28aa97da4c08a44c80140ed337010d47173eed";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.13";
+};
+logoetalab = {
+  revision = 68916;
+  stripPrefix = 0;
+  sha512.run = "1b3f01a1acc23b17e30185b3bf2b4e965d047bffc7d87649a40e52e4fc9de36518e82335055c66f221cf10b7c6a1cfdf9f51641f5ea945aa0f7d7efd76780fac";
+  sha512.doc = "93e17e5c624aa8a6f826294fc33de8a66731020696525821f4e14a5bfe0f3033cb6ae21abef41d408e627a6ca8d6e12ddfc7aa30d02152e6aadef3fb88fe92ce";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-20" ];
+  version = "0.1.1";
+};
+logpap = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "159876dc23e96f65fbb29278e30baa497489331fcf52ebda2adcb19098c2519044ce54ee590c3d91f80bf27b6df0a49aff455da54748c3e04c7e81c2be108e4b";
+  sha512.doc = "f85a52b9d95247ce5eb537cc677aff184a434a41fa9c3433955b43eec3e3cf2deaa701718fe77dd3b3cfad5811c5275a097d980e157130705ad5cd3f14276dff";
+  sha512.source = "c6c2127c2789c2717072d8d08043ac73a86248d71dd542d38dcedb3a36947f7ceb99f0246787e279b22fa03dea554a6afde6438ffda3fda6143027a7e6f1d78a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6";
+};
+logreq = {
+  revision = 53003;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+  ];
+  sha512.run = "df61c0c6c0b8520f5ec38780d8eb69cfd5fccd21f5120e48eee71e02b004d3da4cc9cb9371a36766852e3ca09a3db86655f1a2639a49741f00134cff1246acd2";
+  sha512.doc = "fa9277da81dfb3aa235bd795780e8d3e629558fede90fa9234528b50a11507e59e65e49a0ca787af037186890392dfd45bf6de7bd859cec369626fb7d57b543f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+lollipop = {
+  revision = 67930;
+  deps = [
+    "cm"
+    "hyphen-base"
+    "tex"
+  ];
+  formats = [
+    {
+      name = "lollipop";
+      engine = "tex";
+      options = "lollipop.ini";
+      fmttriggers = [ "cm" "hyphen-base" ];
+    }
+  ];
+  sha512.run = "8449ee38e28bca1974e9a144f7ae1ade40cf4ddb9da2cf35779712202c372a29d2c1bf394122452e217c08cba8d89cd76ee4e019a0b356fd9274069f8a63d8ed";
+  sha512.doc = "d8f9791b32ace40f0e936733cc5bc9d5954e7f0b013c0eb81e1b212a00635e674639dc4ce70858dffc1d8b0a15e6fb7ddfc7460f9196a832918252060e43db3f";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.07";
+};
+lollipop.binfiles = [
+  "lollipop"
+];
+longdivision = {
+  revision = 68609;
+  stripPrefix = 0;
+  sha512.run = "2f1f1e6a6b93266a1c6e1c3fbc33e4f9719b6ed06390d2e277e811f429f0b71c3e3133e2e406b837c109672b725bab29534a8e9c9b380128cba6901d5082c53b";
+  sha512.doc = "8314b4fd0802dc541d640a706b0bdc3b10f909365372ad9432c49e533f95103643c1171038b7f346b9f92688d27338e81fd5c803070d99f10a61adf690ee6389";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.2";
+};
+longfbox = {
+  revision = 39028;
+  stripPrefix = 0;
+  sha512.run = "43164941fd7ad91fa304aee01c3d34ec1faf8672549ae3b2711bdd4c91ae57ecbdcd8b29080d6c96cc64a73f7d7fd74c8621a70604a29dc1474f3c922c34a4c7";
+  sha512.doc = "fb319a679631e56122535b99a187d3c2ad5400d4a1f00275b73420c43f98e8b421a4b86f77b868c68edb39870132117de3310a00bde82f6387559c6adf34a8a7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+longfigure = {
+  revision = 34302;
+  stripPrefix = 0;
+  sha512.run = "984f10c8a2196b490dbffb015f2aa6449e8db6475c2f02dd71c92d5a3f6cb5dccb98a4c4f923f6efd3bbb1056aa8e64f324e3d8a051c11879677addaed8d3f06";
+  sha512.doc = "1f949e3ada113710f40b6d2960bb01ffffd3f9d26a65fd0482644da2a20c5375454c430e1c7d3b74cf872cbe486ccab9a4e71567592da5d39ad9e72102c382db";
+  sha512.source = "03d73c0d0c30d0c69f1fb878dcf843b26480c5005d88034e6f09fce485db3cf249240f2e39f591acd13556cf06677bd567857ceaaf96ec9cd0178f8216323be8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+longnamefilelist = {
+  revision = 27889;
+  stripPrefix = 0;
+  sha512.run = "1d16ee9c76784c5124de3abe62b6e916d0f65e979a18a721ef688a960e5d20382dc976de0b68d95c47e9651ad71a67ca97a828f1bdfba8e4a77ac084d7561386";
+  sha512.doc = "d909908d763342790b8ab56d333e60d7047894472f3922a2554581a5455539845af72d3867d0a55f5a27e982aa8128ae1a948f40e106fa127f2d01156b55ccf6";
+  sha512.source = "af1383755b422a3bdbf7af7437b732a39aaf666c7244e75d498b1252d3644e58a18115a744c4b4c7fe1433f415b40886868faeb064b13647452d444f64fd6f9b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+loops = {
+  revision = 30704;
+  stripPrefix = 0;
+  sha512.run = "60ee6999e43ba9082c5a283dac5a930c9075b24f6bc7cd3f719b0336b01dfcb17fb2d5e3c82b9f1636c9bb3e6c923607a3d9237d08fbaf17bbfc1196d0a75281";
+  sha512.doc = "9d70b3ae88d64bf2710157db88113224a95947aa03f11a2eb659c61109a451e2a93b2aa5ffd6ce9cf2f1b5fc8e0ef815850a0a9f27c7ec5ddbfbff1fe98ecaa4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+lparse = {
+  revision = 65693;
+  stripPrefix = 0;
+  sha512.run = "a5f16ff6e4b9ad5ba247205952a1a2b6ec26ea3f307e7e61527b8c9aad860b0d3cffa4166a4fcde56b2d54f3ae1f22bb33bb892c90f896015b0fa4cfc73a13f7";
+  sha512.doc = "0c08dc7cf19169e33ad0c4695dbc2a5ba6f16bb328879d2ab9ffe3cfedccaf65499ec0865783947a7db873b20f573e4443368d39d5ad7ef959b3f24770ec9c72";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.0";
+};
+lpform = {
+  revision = 36918;
+  stripPrefix = 0;
+  sha512.run = "91d5748629ad72ca421834ffc61c13f71240bbcaedf9f0e4279bc6aa0bbdc817f093c24cf5a9c50d5a4a132208969bd356642fc5704ebd5c4ef2b7eef23f27ac";
+  sha512.doc = "92ddf3b473e13fe8b77ad955d55acbe7a6da34381bfaac78184342a900f2c9bb1e0981d5ebdb440cf0f44affe2eb0dd862f9b51d2a40c9abd90f1dbe81584c9d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+lpic = {
+  revision = 20843;
+  stripPrefix = 0;
+  sha512.run = "d918fdc8744a9f5e0d24f6ba4f19bbc4cbd9a5ba4b3c559ab1321c36a9e3599ccf6ee849bd7f2ef6c3156cec6e526a44d27bc033b7dc5b217e289fdbff0bf149";
+  sha512.doc = "307109b75129099c191a65a7632ad0cbc903cb2b621b199dcceb7cab5ab5ddeff7ee504d7da3afd653e1aac04236efb6a3c1225f9e533a777295052bcc28d2ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+lplfitch = {
+  revision = 31077;
+  stripPrefix = 0;
+  sha512.run = "189b9d6000d4b762a3c64652bb05f9465d5c789b7e2413e8f0ca281a8d4729a3044aa955ad7eb82c7b8513bd547bb76c2ad2b609e902b07f8f4f018698e17071";
+  sha512.doc = "a690ee2c1f9cf5eb36693a4a9385c047a31d29387930211bf6384d7cbedb3d1f1696c0c04269b02ef29b13ebccc69bbc329772f3fee209a1b1d51768484f9a50";
+  sha512.source = "b06b45d992045111d1a8aed78267519f8b959415b00b94f75602b35cb7d37c47092e726db881d9094e82d3e25492513db66b210603730f8119d10e60819ec89e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9";
+};
+lps = {
+  revision = 21322;
+  stripPrefix = 0;
+  sha512.run = "8bc59b5d8874fca88bfe62822f2050f5dee0461523d853a1c92a051e854ddd6a8b2ce235a674bda383f26ad01d6e18a83cac87db2ea73b4af7e22e74ff823d0e";
+  sha512.doc = "a8ad542b5d2c28a9a02b5e4d4a43a13e2f3469512cf7264eb7ed78e2c5a29228531de3be7e84e557e3cc8a9ad60e59ca426da3d5e034dae6b40088ee99d2fd94";
+  sha512.source = "d1ae82c4a55280183a85fb3eec77306990f694f85c5d6b543b4ce4bbaf87a01b7fae2d6892bbf23587738079be503ac94b6a68b372ca1948863ceab826975a85";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+lroundrect = {
+  revision = 39804;
+  stripPrefix = 0;
+  sha512.run = "6e4968db6d4593fb0ad66c58b7977b77cfc5ad29a8ae8648bfa0f7844d71a809e0b381acfa4563cb1795177374963ddc10e8fad8a62c1523ea82288c7bd02087";
+  sha512.doc = "12e6bccf3875f4045558df6e274a13f60fb7845a998de2e8a722168cbef2d9003224f02e379bcf0752770542aed15ec1d1e680a54e347763b554535ffc2e1042";
+  sha512.source = "cf39670d2c17420b2283be3264b163f7d4df70288b6c974674cb0ca4d52e3d7f99766f9f0c5b8636348aaad2ca851d1c4b3d530a2a85567a1bec2804ac5d70a4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+lsc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f61d81a49c25972e03120cbf6557d356d6df6937af6e0443e47305312485217b6bb5c0818adf248fb860ec5d42c07fc22fdc0c54f9dd1f3bdcb12486350316da";
+  sha512.doc = "5d0550421ee0657c378cc1ad8159e16e43644f533e3d8a013d917c494bbb8d11cba79b99fcaa7bdcf8ef5f5deb88d144ed64d75a5682fe4c4187c60c634297f5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+lshort-bulgarian = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b528c16903ca8ed5ce69f5e2397dff8f05b13016384bc1304980cad71d86bbb55004d41db92dc29dd412a12b9a0a1b1ea99afcbea621a25bb20da4639d008776";
+  sha512.doc = "7cd22cad45d7ef2972679cf2a3653c3bbcb1d9bcfe94a65fb9dac23760de05b659470ca45cf8be13513924fa1cbb98599a304a51bc18f8f4d6631f082e662bc4";
+  license = [ "publicDomain" ];
+};
+lshort-chinese = {
+  revision = 67025;
+  stripPrefix = 0;
+  sha512.run = "6d6ac34f79c3d5447c1bbd7f2c87071a92867bd770fd023bc4d6fb48500d27f1b1a8706a727b0d0a7b47eaa9a639c6b5a691b7d21a5e178eb79131cb4bd75b6c";
+  sha512.doc = "c220f086c2e0c9bd52ba3ee1eddd2afcb0aaed1c4fc4b9ebf854ce57b4720df7ab3c5475f3164cf740b3020c14c5682e1798e43c8ad9e39eba596a24b04644d3";
+  license = [ "fdl13Only" ];
+  version = "6.04";
+};
+lshort-czech = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "dc967aae970e535c5dea48264c30f01d5ff3521851abd718905b78497c3d95d403c4f1ec8633cd2a7a55fe0a6bc1e1523391b214fbb8a0e2ed03737b09080e40";
+  sha512.doc = "10de238b8152907ec04834d6b4737cebb13bd6567c9867e19e2003d123299c733012569cd64a66d31a79894f9b37c1fc409cd5b76ed10832762988fc318875e5";
+  license = [ "gpl1Only" ];
+  version = "4.27";
+};
+lshort-dutch = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c8635db5888817d392706b8b65aa5158a4973cf236dad7fe31a9545857daab15a6c1f2f82ab06e71e50a4af94824b17ac89c394a759721e192966a1f78433d47";
+  sha512.doc = "29fc8b6a2645f241e8af437de3a295be8d56a088bd7c7666c35b14f104f242e68ecef2757d62a393400d9f337eb685e48ebac06769259c723d634312a7288ab9";
+  license = [ "gpl1Only" ];
+  version = "1.3";
+};
+lshort-english = {
+  revision = 58309;
+  stripPrefix = 0;
+  sha512.run = "73e7cebb51b9ae5ce2c6ddfd191a1d7e5358e5a1bfc61ff8d921cf0928e2cde839f232dae6cb0d9dd1b05df907c8c56c3f72a4d89917a6930762a46e1b1aa286";
+  sha512.doc = "ab6dccb0110d7033a36d743b9f8132ec5ab4a0b4b334ab7800dd68f9e65bdc7de6c5e766fba6a7a3596d3fd8d6a3a16299344fcbfd67585f1fbe5e519876d7ba";
+  license = [ "gpl2" ];
+  version = "6.4";
+};
+lshort-estonian = {
+  revision = 39323;
+  stripPrefix = 0;
+  sha512.run = "6bd3c07c1e5f9d543b0f67a5585cc33252567cc346a8d7feca050baf8ab437be97e73d2c4b4b159102e9c4772f8cce2abcbc25486d73e976b83a3d2f4b9e9487";
+  sha512.doc = "e16397fac3e6cefa699b412ada1851c7792520da8af1230274fa1a337b890629b68f71d94b3894044f28e687c6aa60d766377e12232d0e522e82e18dc97428e3";
+  license = [ "gpl2" ];
+  version = "5.05";
+};
+lshort-finnish = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "997db393d16942e78e4f52eef886ac7b14cba7ec3fd0c88f8c2cc74fb6b35f3802c58c51ac0112cc2b086f9c3b965b5f8d508ea81a36edb7da1ce84ef83cd203";
+  sha512.doc = "71c2e5c4d49a779f529a527cda5fcc6e55cfa0149fc2d9272ae7e69aecf2a8a361b057bcfdf5deaa7791073bc6252c3101f5ce0b8d231c779e99c34910a3343f";
+  license = [ "publicDomain" ];
+};
+lshort-french = {
+  revision = 23332;
+  stripPrefix = 0;
+  sha512.run = "1b2ab00e9e69eb058afd96c1ed099b8c783bb97bb52411cc907afcc82d43167ad6e2023a95671e90d059ee43ae335dae3401cc0d1b53c19c186992756aad5060";
+  sha512.doc = "2974f067584486528adf42a13cad28afd205f2f52680e89e8de33c4c0debdccb2d0d9d8259d6e2adaa5f86af0b9451232450d40ffacd9f63c43af2519cd8a06a";
+  license = [ "gpl1Only" ];
+  version = "5.01fr-0";
+};
+lshort-german = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "c937bb8da86a3ef6d428d134903bf8af74a286d644bedfe4766841b2b5234b34e2caed70460ecaf7a1b1dc57f1faf1396435cca7f714f84d75f15acea12e79f8";
+  sha512.doc = "69cebdd6a1444670a154d5cdd199022f6f1d6612b24b05fc8dc1e9f54a89fb65cda1f545341cd37616dbf6dd94077ccb924bf4b49f1473e45eb0bcd33f5f33a6";
+  license = [ "opubl" ];
+  version = "3.0c";
+};
+lshort-italian = {
+  revision = 57038;
+  stripPrefix = 0;
+  sha512.run = "05435f3a1af4c589267f1841e9af267fc12e2a3fe5b3ea2c586fd352f4a1184f1fc4be408780ff6db1b9212e1e4d1bb7263e3b35e7be9358e97e1712e9abcd6a";
+  sha512.doc = "6caa8b7d2795779ef010c0ef9ac387c73b15715929557a6227e0a8112f4d99717ad82fdcdf8d1fe18ad5ea9b502ed559bd7b44f73381475034b481eeb6ab1c9a";
+  license = [ "gpl1Only" ];
+  version = "6.2";
+};
+lshort-japanese = {
+  revision = 36207;
+  stripPrefix = 0;
+  sha512.run = "25de64f37ca5811ce39c8efc3e895c1deea317c8dd02ac3e091a41ff11ab7a4730a0e476d323d8375c41fd60401cf441c2c15d614a090092d66413701500d43c";
+  sha512.doc = "83292d42fa21614a055420eeb372ae5cf21a9a15b999e0b39f1063f63ee7fe53f77ce771a8aa649e860827214138fbd435161cb3dc4b3fdf2b75775979d904cd";
+  license = [ "gpl1Only" ];
+};
+lshort-korean = {
+  revision = 58468;
+  stripPrefix = 0;
+  sha512.run = "3050ad46874a78c36d8bf247c00e2369c18e122ec89a36b0423df290ba8e06e9c5dbd1d9bba5485e370cd73dc500a6d2415b3d8f6de0eabb3932b9ae5515fb8c";
+  sha512.doc = "6789054257f176828b341fe9ad258b1f7100d2fc880aab68244842317b45cea872ee49031ad2c1d376011772fb39d2ef05a700f962279f5ce3a286270b77ee1d";
+  license = [ "fdl13Only" ];
+};
+lshort-mongol = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "464b6638ca4bf859ff178238625ecdb7016598fc98c476d3e4b2a24e2f34e6096edef5864ab325ab4df21bcf309a8467deda80b385b624685b38b538a0d40b8d";
+  sha512.doc = "cb60632992b187e5cc80973b9e9848675b464b075b13356db171c1a7613c94dd9bf8ea53df47e0c36c910772316f4c43857c8e638819d8ece7c1ce1790fc9d29";
+  license = [ "lppl13c" ];
+  version = "4.26";
+};
+lshort-persian = {
+  revision = 31296;
+  stripPrefix = 0;
+  sha512.run = "6430462b11786fe3703e78efc9f1486da78db15601ae31e72a95d516d10a098c8b4c5dc9079490e652c57369698d3b4fe4d75b32c44ddd2a470aa5cbc79ab492";
+  sha512.doc = "9e7c43f3df8299db4bfad3c0b270c5b54a1448370e6782d095dd9a9b82ccc186aae98da86b2efe71c34031a5f4a07f54f4640de6d8b6fad913252979d440ccd1";
+  license = [ "publicDomain" ];
+  version = "5.01";
+};
+lshort-polish = {
+  revision = 63289;
+  stripPrefix = 0;
+  sha512.run = "c61289a35103ecfab025169d432be2b3c7f2fd4ff1eb094b345feae6c9a30bd2cee70e0402eb6c2ea330254cf00d04c02649a40d6bd011f9cc612521c88b94a6";
+  sha512.doc = "abc5162a490b9646649dfdf50779ab12632eb3ddc6d1c2bae93a4bb00ef1f9387bc8d873a7b5c062b92a999c9d62b74e64b1688dd3582255f7386958649ee009";
+  license = [ "gpl2Plus" ];
+  version = "6.4PL1";
+};
+lshort-portuguese = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "70031c79e7124b9c839571fa95d8b141035a0d8f79665f1e79df8a3154b81f0a7f8b7d371cd00cfec11c141165ca5e1fb0e1cbbc4d0de8c52cc5e0b77c885f5d";
+  sha512.doc = "19c55e5547d83fbce705121dbb09fe329c23cd42c1cedb812cc282bb447f9cc51ce0861e61a984e2863103a2bccaa6a4c7ffe8bd2913637930e42747c6947b02";
+  license = [ "publicDomain" ];
+  version = "5.01.0";
+};
+lshort-russian = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "d6641dc4f19c740898dccc357aa1004860952d0a2add37c6c37fe69ac222dd8396e506ff6a00ef98f77d8cdcea2287c96258214159f08d8b63184eb014ececc3";
+  sha512.doc = "b991cb5fc833446ab36c82beefa82afa026eda6b1084d99e6c4525687b82bf7c2f64f9cea38d244065cecf1b12a00331d4e70716880c5bf2509add05257accac";
+  license = [ "gpl1Only" ];
+};
+lshort-slovak = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "bf3821d0846701c2e45d89578625f517567d401d613f5aa7aaa4cdfdf8c4c4f87abec22d6fccac21b274afdba9c29c21a6918fabef77f4cca506071341b7cdbe";
+  sha512.doc = "8ee79c17e5ccc9dbb9f833b4f8927b22e7ce368f49f4d016fb936d2a5ec964791d9473b679a037d704efb269dc6caa1344168927a90a8e859527c64b0410996b";
+  license = [ "lppl13c" ];
+};
+lshort-slovenian = {
+  revision = 68204;
+  stripPrefix = 0;
+  sha512.run = "b053e42404063ed3275363c361ec85de69dd92281070f0c88afc860cf2ac07b3fef1a98598ceff52308e36c9f2b5e6c406df591481533b80fb0258ae20f32ca4";
+  sha512.doc = "851951cd5822f257ecd23d73901d833ba6067d3860002a4dd4449f23d5e7a50fa97ed579f5cbab8bc9494801055ef8f23f6f3249d9f6843a28f7da1b4f15409b";
+  license = [ "gpl1Only" ];
+  version = "4.20";
+};
+lshort-spanish = {
+  revision = 35050;
+  stripPrefix = 0;
+  sha512.run = "127fc2d598f16d38b075b4a9668ded064537f7056aae34bdde22f89aa8d301d77cca818976e22aa036f47867929d30cc47e02ed3f724ea26279ecba723e5baf4";
+  sha512.doc = "f968352fe1e32a918c1d5ebfce16d3975c436539349af22b32bfae1ab06061ac2b2b85feaed3e8a28da89956f4d5948e7d1a6426766144b0c0ebec72ecfe99cb";
+  license = [ "free" ];
+  version = "0.5";
+};
+lshort-thai = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "e81deefb7fa47e336a6b9fc363fa75c35576fa40de1771fff207dff22106b33d185c267d76a3897f2188d2dbdf9d2b93a1caddcdae38eb770cd7c5d6f1ccdbb2";
+  sha512.doc = "fc805e2749305cff0164ccd8d0b043d26731fd6f39e19c0023c87e4812f8509b923d4c1a97594563394dd7bbbe4a99d3b25aa37366f6e5bfb3cc1c2aa21c0606";
+  license = [ "publicDomain" ];
+  version = "1.32";
+};
+lshort-turkish = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "769036083d282ab95c5f1fed08d669dd4fb1d2dd7937e5a4e2fad54e20cf56ce3d5100b7aa612cc59dca50b6ff67fbbd5bbe05c085b6121654f873fcb991609c";
+  sha512.doc = "3aad40a5de5eee9e59064b15fe3e9c6a2585146fc21fdaf4683bfcba6786366c4ff1b3c38b6932426f53a6a9211809d4173f688f0878cbf2011d8982e3732834";
+  license = [ "publicDomain" ];
+  version = "4.20";
+};
+lshort-ukr = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "82600643c91120d732d50dcc6e14a4b4b4c471bf6c0031890487215d952cbb9675210f11fc40b039aff529bef90282d432966ef9547fc7d0272f85c02a288f4c";
+  sha512.doc = "f707d0491bb6a246243035d1cad265787ec4aeb7cbcc73e3500295dc67bf3a3a06b316f9f82d559502b7f108ab636b90fd01c3d1b0ee5f13fa3418910557c8b3";
+  license = [ "free" ];
+  version = "4.00";
+};
+lshort-vietnamese = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "6192e85537e184137189771d2180f1760db5930ad5a8c3dc8788ab5ca502a92b433224b1cc1afcc4e2a493fd17d4e4c43edbc84e4893ecf0770bd07579444eb7";
+  sha512.doc = "a0bad6d83fbc288ac1f39bee6bf1cfb3267a47852a0860f56b8251b67b2dbcd526d203c20b91f7adbe42034481255e5e3128b525e49f8cb341f18d9fc2407e14";
+  license = [ "lppl13c" ];
+  version = "4.00";
+};
+lstaddons = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "ad18d38c13dd5076a9213d8a6723b069dd75e546919f106be54a26cd63c3a4186fefdc463e52cd926e85c8020460cde516d12e900c51448440bdc165d4312f19";
+  sha512.doc = "38a3b1cdea124cf0cf0951fdcec168b6baa33cec75924687b0a49c1c9713cda847ace0b8bb01ba60fb8945ec2ff421678cd501fa6f5a446ce2ccdd15b2ac34d5";
+  sha512.source = "4bcd82c3b8178b1b4ab486fe8e0cb9393ccbca4612bfd7f7507213cedffe8ec92753e16f647eaf28f6a69fc0bdae655228bcae5fe5f1dad2c62c753433142601";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+lstbayes = {
+  revision = 48160;
+  stripPrefix = 0;
+  sha512.run = "8089546f54a849fdd2b8cd1bb2430927a03249f1acb72bd9d37e9ce42770be2413c6ba8186a45eda8f52a3ba2f34e01e6073ed7acce5883d9407e4ccd86cc12e";
+  sha512.doc = "9e256d20493164eb1ed01bb6f7dc7f555d9617492fe14688c0852b85e27c1f8f7f1978b1352ea3294bea41f77ce505c6a5bf2910514240e62ce19c47c8da0ee6";
+  sha512.source = "9378291c820b65d1f1f126a47d6db40ad757009d71327f84e5b78fc4309d77272231cc892fb6881426130d6571b0e7caca7ee910117a9e2660cef42f6f0d7827";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+lstfiracode = {
+  revision = 49503;
+  stripPrefix = 0;
+  sha512.run = "d2752c177194f4926191245f6397ca1ad613e66708e245b29ed6719bfb7438cbbde8dc69a639bdaf7a4447d7737909a5dfdb465a0f0b446c0d30900b7d279c6c";
+  sha512.doc = "ab396312abc4174267184dc2d5f4dd61e4510d3b70bcf1b6b84685cbe2e5941d6325d4abeb1d08f85cef62adc953d4a59ebc5d99fe9d7c643f7d25c3d36bfde7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1c";
+};
+lt3graph = {
+  revision = 45913;
+  stripPrefix = 0;
+  sha512.run = "9a3137a56952d18f41337f3ea1412180d6a0d7732178fe4855d23647d01648ddefd57859f786534c5bf39cb622da11e113a028135429ca38e6ea3bcfde41b5ca";
+  sha512.doc = "efa314f54f3d7444931f4b7410c406fc89c35fc318882683cc97cd479faae00d3aeb58be06c9b174e59bbcc2bae57ff712983ba0c216a270441490866646fcfa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.9";
+};
+lt3luabridge = {
+  revision = 64801;
+  stripPrefix = 0;
+  sha512.run = "f0d98099ffa137b1f5dbeac08d58543f3788647ddc22be5892ad1367d557a1afe1f1e60bf5f0ce531d7d5128b8f23e73a95081ba985579b24ad883887377081c";
+  sha512.doc = "f5181c14dcaf29bde02b38018f1b477092625ec07e442ab3334b3924b92f6e45e6c882220448b08bcd69cb9275e48be962e97ce9329db28a5b50a1217842e80b";
+  sha512.source = "6684ee282cb2d8bccffde61e2e8692485246d856ae774de476ac697e352bb76d503ccfccb2a649e4b50314e2ab6bda635924d87e14426e73be444e7f4166fca0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.2";
+};
+lt3rawobjects = {
+  revision = 66619;
+  stripPrefix = 0;
+  sha512.run = "05b70d22b56925542bd3f2ce832b1ed71759cf41f8ccce3d892c5bc6e17fb8ebfe8843a82d0aab6b6e88f38e84819b25bd18344683d182fdcfebcf81a47d27fd";
+  sha512.doc = "3aacb576ebf0233692b81daa231ae8a93b392d07a261011e41dd4eac34e295f288f9fe7ca1abc208534393bec1e290362b32ce0906d4c97fe56a598c49e6f135";
+  sha512.source = "2e09660f1a59fce87af33d5fd80a59a83ba856233db4032bec88ba8b6f5a8a6306de7416289c51043f8a947dc2481ed90cfecae095425144b865d7a1095cde92";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "2.3";
+};
+ltablex = {
+  revision = 34923;
+  stripPrefix = 0;
+  sha512.run = "5a64bd2904338fc45d6150c6be6497d56cf2e190c41018527a59ef075db41f94378f8981d4b92e211f60f2d641408144c546f2de0bbe4a8e94b0a3cadf4311a8";
+  sha512.doc = "c3ab3559880077f63523c84cfc5cf363cf9f1d2c4d8aa9cb173b4a2dd07e5afbbdc9b1ea1b29cb50b64c68d65f4470dd9c1656703e0a1ac8955b72b87e33e804";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+ltabptch = {
+  revision = 17533;
+  stripPrefix = 0;
+  sha512.run = "15c839c34935ee27b0b741325a13cbe6ec2f918b007ddd691029ce341173d12ca0e5cdef3a0111c3148257babf686815c5f81c92b6019cbbb022608535f17283";
+  sha512.doc = "d85ff06112e540d5bd3cac2bc6100d7d922e44d3388d247e521119ee4145716ef52889515b640e85c8a21405a35fbf63b168af09253e772e826572b0560305ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.74d";
+};
+ltb2bib = {
+  revision = 43746;
+  stripPrefix = 0;
+  sha512.run = "42e634e7c3018b87825e2bae40513eeb757520e1dba1b1b20244bee2d0fadc4663cbfa0dfdf74fa71f7821f47c41bb7c873a64cc68e153f9b7207f6a8bf3f8a9";
+  sha512.doc = "c26b018043c14022acc64bfaff6377988b5e40d09ac10916479079550bdbcfa5219df13988327679e7647c4a679490645376ed23be0601dc4df0528d45725325";
+  sha512.source = "0ed23f0084e3afbf51cb6a5c6079db62fd8dca9ef12a159b4be1d68ede6b632155ebc0ee9d6fc91cf93d2cddb5463b5d52b14cb72e7c1d61b975c891f710af3f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+ltxcmds = {
+  revision = 69032;
+  stripPrefix = 0;
+  sha512.run = "9d9a9835f4547200b160b42c07e918fb8b2cdf9eba91c30647c6fb1c74cb6f9ba60ab40bed63514ecbf334d527148b31fb1ec90af60075d19e28d10d675ded68";
+  sha512.doc = "21be07f4f98531621f90b7ed23c06fa4b39fafa12a83c45784b83b5f9728817657b5c2ac2c09e4988ce0c6df0918a7c93d29d7ab89159cca5ce5fc9e0eb017dd";
+  sha512.source = "becad978f8b2303a44057f165cdc6d22ddec03e58a26a0d6350bfbaf6d681ba43b105b65492c5be2382ee1e4f814129f86abc2ce376d2d42ddb0fdbdd2671d01";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.26";
+};
+ltxdockit = {
+  revision = 21869;
+  stripPrefix = 0;
+  sha512.run = "1144bd68bec92b4ac9ec8763e2e7df7c6018cd8b88c7ed2f02e7597c3bc13608a562551d80fab2a41b8aa9881848fa1b3501da7ae9c39edaae3720875ff65bd8";
+  sha512.doc = "a47852f464e8c31d9a2926e55d62c090292337acad6398568c7082012899045ce32163b798b25ac090e7fbd6ebec95f17a83ee1fdfe5f1f33d0b423dbeed94a1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2d";
+};
+ltxfileinfo = {
+  revision = 38663;
+  sha512.run = "ca078af6b822747e9b337eb5694c1b019444e55f5f9f9dbdf59fa1a65c9445b19a62b0d610514c9231365017d3ea95ad9288a37b62b400c12df74c0c7f774a44";
+  sha512.doc = "0020ffc5874e0545c7ae4d1f6f9c0d5d598786444f4e98369e0c5fc872c5d63f235222594a9b0f5d2def5c3dcafc5ad660a4fd5a9e4551dd7717bc6ac06189d5";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.04";
+};
+ltxfileinfo.binfiles = [
+  "ltxfileinfo"
+];
+ltxguidex = {
+  revision = 50992;
+  stripPrefix = 0;
+  sha512.run = "bb808c7fc1d3fdc7a4d065822a5ff67113bd9fa47a60762b5674040c52149cad14ecd2d0612216b15bcb9684e65e9b51312f83f14030e66de37ee30dabbad434";
+  sha512.doc = "534e51a54903e1bbc783b5120015178c48a1a9ff3b06b2121bc9f79c95b7fdc1bc64c374af27a357a44c67df45bb70699d788c150c625d7d949acdce5b109a3a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.0";
+};
+ltximg = {
+  revision = 59335;
+  sha512.run = "0c91f46da529823a96ef441ec88d6d3c077a8bd5997bc291f55012e0d227cc24f00081f846ae127a364cba26498a74f2769d401e6d5fe0057afdb2a76a875f4a";
+  sha512.doc = "05f9639a0224c779276a3b7f19450c93e255c70680fd54292e1ad41b3c89aa15dc187d58a73475ed9a8f7279faa0f3a0ec15042e75a52c70d78416ec46255b44";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "2.1";
+};
+ltximg.binfiles = [
+  "ltximg"
+];
+ltxkeys = {
+  revision = 28332;
+  stripPrefix = 0;
+  sha512.run = "f99008a8d6d18697d095721dfd741ed2dc48f6edad09b15d39ce2c37f05e6f9c9d613a4ca7ba7fce8755f9dc5659e21f7e7961a7e38dbe17b7114c2337103d8f";
+  sha512.doc = "ab28eae4955de3e5a23be1d718fd1e23384ec0e4a8c4b86348bd83ff501ec2e51a3981c60babd478bca0c115ba524367f77f3cabd3f733b82a9fe4cc5fc06878";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.3c";
+};
+ltxmisc = {
+  revision = 21927;
+  stripPrefix = 0;
+  sha512.run = "3433a283f52c41f198b944eaf58a961751e7fd3c0991960a2516fd72af61671e776f48c6a5e241e379b54a08af6fba732ab1c35e42b8c93a62937b5a38cdb767";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+ltxnew = {
+  revision = 21586;
+  stripPrefix = 0;
+  sha512.run = "7dda3fd3638ddf528adda0430cbd32cd8fe410a743b7af5bf76e651ee98b10f2481723665a19fda2f2b468ca5c4a838144cbd6e9c457f50362f7b0e83106de26";
+  sha512.doc = "91e07169ac377570382b9bc7044c0d66b61268fca38e2fcff4d7075322dbed0d3151976848c93b5d0a2088676e67f3a79d2a555829f170ca61a37b7c40fbdf66";
+  sha512.source = "0718785df4355f264738d8929128e4024eae629dcc1fc51e0d408ace6be8688b9281bc0e352e401a6fba71b0a3f376610fdbea7520443233d088e93740e0dbc7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+ltxtools = {
+  revision = 24897;
+  stripPrefix = 0;
+  sha512.run = "aed74d79bd9da7f7303cd14db5c2a74aab51de03e87a84986b294019a971eb68a445cace8af2394631fc4ec6963ad32347c47a80612f70a7427adeb689d3cf36";
+  sha512.doc = "e0a8b28f512a15fec379aeb3350c0611a77652531a66ee5a39010400fe5d1416c40bf6bd89d4e967851b09ad5d11b1d83ead675a0a722255a0e941980d74d1d5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.1a";
+};
+lua-alt-getopt = {
+  revision = 56414;
+  stripPrefix = 0;
+  sha512.run = "60ad4731ac61f9b5c4360bb3d0c6475e2abd358418e20bed29cc94761fdfb97fcf02829b9785e559ca6052a1e82ee7f0b104b166592b9fd87237679ac3caa2e6";
+  sha512.doc = "5921a3fd6846b15b0564b9182fdaa5aa62ee6897f3ea55eefbfd07f30f556633668755ee6e356dac23c9b61fd7ecf4013da8f87ebe151a2bd855c36d45f60434";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.7.0";
+};
+lua-check-hyphen = {
+  revision = 47527;
+  stripPrefix = 0;
+  sha512.run = "89cd0a13578d386bbf584f3c74c6c3ee1a45a7c0bf40480e5396f86b2af29b26abe3ab8aac69be0f1fe23cceb6da33237ea38384854fdfc7be6939832a8cad08";
+  sha512.doc = "cd756e0356b36ccd26d1d78c67026f5a27272ac383bdfc6f44ddb630f58d067c05fb9152f1ed9793d71a63af6607107b8d4b5af311563e2c3d966079b2d3e0c1";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.7a";
+};
+lua-physical = {
+  revision = 59138;
+  stripPrefix = 0;
+  sha512.run = "b28768f63c2b34930a073139be3e6e90a0086a561bdcdb6aa6c8111db4e6def819c0a3a6af2b5b274d009d3c9b390c6da91416189718a67a4e1efd7eb547c500";
+  sha512.doc = "52e764b0492aeb423d8c267f43436821a239e9ad019e43f7fcb881fbec31f9a56b690d792f15f954cec91ba7e3d32f70cb567994a82f3030870b44d0490fb593";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0.5";
+};
+lua-placeholders = {
+  revision = 69404;
+  stripPrefix = 0;
+  sha512.run = "11d13babb26aefb2782ed7e84444ba645bc808a3283bc0e927cea84db95e9b06895df23a4ad830e2c4a401426a151a7acdf8eac43faa3ba69dbe434349d7867f";
+  sha512.doc = "88b9e069384f0c86ec3f86c21c985c37d199a9dc1962bb8d829b28a34a8ce7cfbc46ab57358070ed2ae71fc9d9c92b2090a69ff0c48053dba54586274caf7737";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.0";
+};
+lua-tinyyaml = {
+  revision = 66776;
+  stripPrefix = 0;
+  sha512.run = "3144093c160dd1bbfcef7c0d56a3ff2a6354ed2c5ad30a4201706dea66fb8cb19b4be71087c078c4e36d163e6a785827c378303bfd700c086a7ea6b9d7eb2135";
+  sha512.doc = "1b0932800ff6fbad87c2a87e68e433d46de5a0c2543c8fb0c7b7b6f60749db98d9863ad4debdcd508bf1a613d32c8a8fa5d7e23f177517e4f7735f2c3b63c616";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.4.3";
+};
+lua-typo = {
+  revision = 69403;
+  stripPrefix = 0;
+  sha512.run = "177b89a930ed061d18e25bafc230b402976e25ebc88d09a0a42c70b5848fdf5b7964fa69160c3456a02f207dce39363c9fbf603c928cd50b373be6ba8a2c8ab3";
+  sha512.doc = "60a9e3560c35583377d4629ee4885ad5e8bf52773927c9d3e2b06a2385196303df704bbcc6245a2e0fc93c396b4a6252309180af270d9bd13fada543c9f3b7b1";
+  sha512.source = "65eac5cf5c4af2eebbc7d6412cf6ba17a4de37c6c47caf7667e047edc6697a0e93f9f3a334f3ace081127654b6337ebbe5db767d1de2eb48a275c22c0617ca08";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.86";
+};
+lua-uca = {
+  revision = 61023;
+  stripPrefix = 0;
+  sha512.run = "e6c703b5576c7d66372a3989618609f2fe4a2b41de78c624e15bd0905744559b2adb3f70536b9680f83897a3997a492a558e285818d38b63ee7e99798bf376c0";
+  sha512.doc = "a842063786a53c558bcd4bead5b6affbe9e448618d421435f49722e0a55087c28b36bc9d6bbcb874c3c794a9f5b303c62429b4386801e03f78e2f60c83cb1d1d";
+  sha512.source = "7bea2f473bf12fccdc21534653f6237ea3b71c57bdaf651b8f543c5447ba25b3ae3bf735c3a0e7840b31907b777aa87215b358d152c1ba29c0e372a2672b0e44";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1b";
+};
+lua-ul = {
+  revision = 63469;
+  stripPrefix = 0;
+  sha512.run = "a6502086f7d1c57247f9371a711ae7cd1d6112f68818e2a1e04a5a04c97c81dc0c01d7b767e6a6880e366eee9d912cf1ea1f0a17f1d43645ac15ed005d2b8855";
+  sha512.doc = "87793902acca0493ba9671d1052663a4c6322ee9231bb9ede780626bcfe500242b0bde8c0374a8a493336b2890a01a00ea77e2889f544fb2321cf44f08c58e4b";
+  sha512.source = "9306925f6131bbabf018343d0ab608b501690f7ad11b8c1df6a60c8e18b26c10c940f8015beeafa112859f54d78bae5d57c8c2775fb54ad82462969c9c65e79f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.0";
+};
+lua-uni-algos = {
+  revision = 62204;
+  stripPrefix = 0;
+  sha512.run = "01307963a88c4507a7864272f321580898e107601fc3784ef46122dd3361f4a272285836e186df8a5454a9825c608071caf79976323e84102eae6f59296f3a9f";
+  sha512.doc = "5f667cebc56682225d8a68668bf7e02545e6239b6fba3f8f6ab49bc34d50d537d39484b060d8239631bc4a0de42b63824af04e5e3cc33c528c0925de8419b5c5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.1";
+};
+lua-visual-debug = {
+  revision = 65464;
+  stripPrefix = 0;
+  sha512.run = "4d75ff11873d88b0914545e2233b7f49e6caca18a73aa71b74844ff516e41399c99c1fbb7f3bfcf420bcdb91bdfd10e42f4e8f7bfee05af284cea78e25718343";
+  sha512.doc = "99736a1b08c2eba032d749686d30df9384fec22ae65878162436105ff9edc4c781bee5d6407612edb53edad73cf38aa84c870c612663c5b8e2262b191c526f76";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.9";
+};
+lua-widow-control = {
+  revision = 65084;
+  stripPrefix = 0;
+  sha512.run = "22046b01d285a5d113e57d4e5158c2d5558a116004f51d7502cbf80f168bb31c46c6ae09206fb00c9400eb7308f32b56fae2bfeab2a8e1b3fc6e6c3eb0566ad5";
+  sha512.doc = "5b77ffc70f98fdb815f8cdf27d78a2b48422af39cfda7c4a109c97148284a3c425dcce4161fd960a2f2ec658726310f821d068f0c52acf02e14657400b5866ac";
+  sha512.source = "5c2007b8009e40df05b328579a379d7d903e992af89471b996bd09ecb498c86d16c4c69b6721bed8e69bafe2c457122889485289ce9d4758603b8255db89f39d";
+  hasRunfiles = true;
+  license = [ "free" "cc-by-sa-40" ];
+  version = "3.0.0";
+};
+luaaddplot = {
+  revision = 62842;
+  stripPrefix = 0;
+  sha512.run = "8834dcf95f0cd2260423ef2a65599c0ebd948c67b61b97ebca8fefd36134d995630238b6ca01b5b9aa8b6fe50bd10b0cd49a350b3e2c3dfcfea00cac56a777eb";
+  sha512.doc = "166ad5662521aaa4808ad1031ec922609f7a5049d9d219dbcb41ea4c7f777776794b34e356564cbf03628e6065e1eb4354366e3bc2c2bcae2b6e83344f6f810f";
+  sha512.source = "11f90c6f468fd67f58bc7ed6d468873d9c12989b5a4d86563f35ffb9b62219def0d2cc36d45362cbb2fd957928b673b93e52437d26ef3e69ef7edba0b4645009";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+luabibentry = {
+  revision = 55777;
+  stripPrefix = 0;
+  sha512.run = "ea46242da727c40f24fa232e1cd1db4bdaa7391aa372ae7dcb0210e2755fdfa2155de5c80a61b0c4554ab1c23a14bf286d00f07b34aef5edf416ac6b06f031ac";
+  sha512.doc = "9b4954e294173699cef6ba965948bbc2518d42158c3f80cfa5bec17c5e58166240f8c8d3864f5dda94ae325aef688db7003138ccdf3d6eb249b544baa72ec13e";
+  sha512.source = "d43a9d2024e5293966335df592451e3bd44e3f3522a06163c93da3d242b3e70377dda3612333a64e57d9db8ae8052753cebe9a73e01125b41e495c7a0f3a7592";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1a";
+};
+luabidi = {
+  revision = 68432;
+  stripPrefix = 0;
+  sha512.run = "10a304c8844ad7b8f5e1832d59e678599f503c1eda38e1a1e29438abf6304fc44d8d4235e1308d661fa0879494c1779b7110853305b645ff1d2d35cf575bf07f";
+  sha512.doc = "8276f91aa767b9c066bf6271f57a929aa21c7ff19a49db5db2e4eb68bae7613a13473cc23b7f5e60232148b46ff33bb86366320d730ba67918e2b009e5f22463";
+  hasRunfiles = true;
+  license = [ "lppl13c" "mit" ];
+  version = "0.6";
+};
+luacas = {
+  revision = 67247;
+  stripPrefix = 0;
+  sha512.run = "21a488b33ef09db0e0fc2c479564cb15f1f2afb4c790ed8e64baa9b10ec1ad3a36486261218959f8c7951bc06d234f0516bed5d31201adc8d573c7490658764b";
+  sha512.doc = "45f583d602c6afd13cd32d4049d4305d23ff8b47866a9d95b873e7533d3a46d2e357afda82819dedd450e95e3300aa34a4abfece9e0b90c22d6b2c3dc8cdc701";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+luacensor = {
+  revision = 62167;
+  stripPrefix = 0;
+  sha512.run = "6dbcc3a2870106eb49955b6e67fd621019fcd759b9d68d37e86af9d4121231e50ecaab7abe7fdc7720021575b8f6a28f28c4a11edc72f6ea71f7cba2b76909c6";
+  sha512.doc = "95cf6068dd5812806f3a7fb40349f8adab9099c453459789937c68d49e8238016575148254b436724b7764a0eee7caac2459b96ab214746d3c12ba1d268cef45";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+luacode = {
+  revision = 25193;
+  stripPrefix = 0;
+  sha512.run = "b107c9cf774608782c1ba1ce3ebea8d330ff9762046eaa9b9de112b704df1d0da1bd7e33b15e9d847f232b7594d53fb2678cdb78b23d87aaac73cc2517ac8e1e";
+  sha512.doc = "622a2417490fb818d5021bb519ea7ac8d886df5002534c4d269268ca4d2119ccc15b029111edb42d04a546e7a46a60bc8eaa6a0a108e9231cc49fc2141ed8ec7";
+  sha512.source = "fe53aa46157e24f7f637584faa0c18de62ce3857d9841598f51e09a03354e9cd44bb8fc150e91d5b9ad6d1ca150a065fb1507847cc385ca67bf67679669d7ef0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2a";
+};
+luacolor = {
+  revision = 67987;
+  stripPrefix = 0;
+  sha512.run = "142376345f25de68236e56fd334d8f24af90f510abc0d2314049bb03142df76988cd5451e22cf98df4443348f7686bbf9c269e311d5036cf8ae621200ae585ba";
+  sha512.doc = "d6654c3ac1ca1c18cc60cea463cc3b4b4ed902ba6c29521883079123b9906f089ed25e2268e7a1f92800d9b1158225b50c0b019ea28c68b846e73bcb350dee6a";
+  sha512.source = "8b29907f0e0d865704e5de710ac2dd37607330d66a4282ff1f4673306be40ce366a0c2eccdf4dd25c3592e804cd6fa1e2a35044c494c4a3c73e64bd0c264d102";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.18";
+};
+luacomplex = {
+  revision = 68883;
+  stripPrefix = 0;
+  sha512.run = "dcbb87d1c5776f20aeebf0748d348ab748e98fdc95427404f252f55fd1df9dc607aace2f6b4bfa086016eec7c4bae295979773d3a70d20a9e32da47974911949";
+  sha512.doc = "a892f4360b52ab22dcb282c5bd6e538af83836d40e7467453ad345e2d272363efdef83b29b76864dbccaba1ad3589f2a3a47d20415842f727212d3923191b052";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+luafindfont = {
+  revision = 67468;
+  sha512.run = "0d02fd925b33616d3f23df0609ea6fc1595b830cff8a712f6f93414cf80b51b2b1dde2b29e71084aad89377084b606ee7eeebcc2b5e8342b74fab23d8c97aa82";
+  sha512.doc = "fd16f72bba665cffaad3102d6573117300c7df4ea7b4a3104be3de7c26c9f127fccdb54e373cf47220df2652fd405c6dd3f956d2278ec9339e70ea390333af75";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+  version = "0.13";
+};
+luafindfont.binfiles = [
+  "luafindfont"
+];
+luagcd = {
+  revision = 68893;
+  stripPrefix = 0;
+  sha512.run = "d9b770680bc147b45c3bcd984f58335d4e4d53f97ffecf85eb1c017a1c61ef6ddc06ae3230740769e199dcf674aeb92b5ebc10cb29863bcc4f67caaf9a41d15d";
+  sha512.doc = "98905c9e829d1d96a44b25236a1181d5b96b75ca8a05293b185b9f372067cbf35d3db2d0e3343aacfdf840981bcd2af19e089b4a1ca7ae79a7a52b70c6828862";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+luahbtex = {
+  revision = 66186;
+  deps = [
+    "cm"
+    "etex"
+    "hyph-utf8"
+    "hyphen-base"
+    "knuth-lib"
+    "luatex"
+    "plain"
+    "tex-ini-files"
+    "unicode-data"
+  ];
+  formats = [
+    {
+      name = "luahbtex";
+      engine = "luahbtex";
+      patterns = [ "language.def" "language.dat.lua" ];
+      options = "luatex.ini";
+      fmttriggers = [ "cm" "etex" "hyphen-base" "knuth-lib" "plain" "tex-ini-files" "unicode-data" "hyph-utf8" "luatex" ];
+    }
+  ];
+  sha512.run = "30b1fcd361cff27688c65ecffbcffc65053696200abfccd543a14253b53a35de2af53b37f7ed1580510a8c63293d2d002cf4d9fd2d44f86678e2ecb09f02e4b8";
+  sha512.doc = "3016c12de8386af715932819701a6da1b106c504a7d13ba9bb5a04999737709f474b50c08311c1d4c23b5532ba7c1546cb0585e5375babbcd2091adf52d05664";
+  hasManpages = true;
+};
+luahbtex.binfiles = [
+  "luahbtex"
+];
+luahttp = {
+  revision = 67348;
+  stripPrefix = 0;
+  sha512.run = "ec1ce2020efcfa3288c70d79756fd221a2cbcfc873b4f7f77d23bb18ce16764873c30a6d24a36dfd86af5ffbd8563c0c9e863cbeb78b8487725fac7f6c153bc9";
+  sha512.doc = "cd4f2a818a31b8f9df2dd83590d8cbcb01cb6b06309a7a001711f990250d31232680ef2f10b252704eab611cc20c78cca51331db00f17eabad40ea88a8d2860c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+luahyphenrules = {
+  revision = 56200;
+  stripPrefix = 0;
+  sha512.run = "01025f1aa9abf7fb0c06045e8bebba3572b1aad06bb6edafd916e721c8ecb295fc680bc4da968e4fb059173ed9ba8e8de72ed42923b458a8dc42de4424b6ef9c";
+  sha512.doc = "1487269c78bdef7aa626bee1c339358aea03af7df17cf92d48e56a1530b5e4bb7a5dd56fd7e094512fc3c149343e35e9e1683ffcdb8634042f26e86083f3ca69";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+luaimageembed = {
+  revision = 50788;
+  stripPrefix = 0;
+  sha512.run = "c0ba8a3164f1a87cd12a5699e9caa23ff7a85debed9881798502436bbb594d48a2e15a135e3a18efb9f3d825af98303a46495148142c810e4601641fdf925654";
+  sha512.doc = "188049c30c2c845d18e1a20af3d5ee009eab6064321b1f09aee4b77c3111317755e698e28876561440695c910cbfea6f67e41a5195a5f7b50d45831d7b78d76b";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1";
+};
+luaindex = {
+  revision = 25882;
+  stripPrefix = 0;
+  sha512.run = "baafe2dbcfcc07293ec04f775becef7b59a2349ed5c98333c5a4e680fb3f8561f8749a6abadc6901cfbeae1b6e9a47cca05e8ae76064372585b7d7f4978dc844";
+  sha512.doc = "c90deae24da8584170bc2247d5f6ee22ba522c21d3d0e05a6ec2b9594645a022eed1fcf12c3ffbaa03ce0d92a16f75550dc7e0694920ef58b17bdacae02d6fc7";
+  sha512.source = "aa97d6618e7af11a7d5aaee332736aa60a8ba5a2cf796296368736c7d12b1e6eeccbd5c807cc2129fd3e4310617dd92e14aeac053753fe7267899b9b3459d8db";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1b";
+};
+luainputenc = {
+  revision = 20491;
+  stripPrefix = 0;
+  sha512.run = "bc3f05260800cc537436377c1f9fbcfc6a1a60a7fd892af23ab323171208b083c08c8bb2a5d299e4ce09468f66197d43f68717a57e649c50caf74b736cdb06db";
+  sha512.doc = "7c6093b3fa622007aa7e6cc852076090e1bcc64e9b890d1ff0cf6ae552a21e930e791d32cdc2238a0f60c605c92a2192dad7e9d423a2d6e013582926957da58f";
+  sha512.source = "a9ae3dcacf7ed85f5ff63e32c9fd66ad6860e149c3d2737bcfad870137b242797b8a3f62e90f290931e6884c74f70a0716c72f2e5414cb8406e5ec0141f13831";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.973";
+};
+luajittex = {
+  revision = 66186;
+  deps = [
+    "cm"
+    "etex"
+    "hyph-utf8"
+    "hyphen-base"
+    "knuth-lib"
+    "luatex"
+    "plain"
+    "tex-ini-files"
+    "unicode-data"
+  ];
+  formats = [
+    {
+      name = "luajithbtex";
+      engine = "luajithbtex";
+      options = "luatex.ini";
+      patterns = [ "language.def" "language.dat.lua" ];
+      fmttriggers = [ "cm" "etex" "hyphen-base" "knuth-lib" "plain" "tex-ini-files" "unicode-data" "hyph-utf8" "luatex" ];
+    }
+    {
+      name = "luajittex";
+      engine = "luajittex";
+      options = "luatex.ini";
+      patterns = [ "language.def" "language.dat.lua" ];
+      fmttriggers = [ "cm" "etex" "hyphen-base" "knuth-lib" "plain" "tex-ini-files" "unicode-data" "hyph-utf8" "luatex" ];
+    }
+  ];
+  sha512.run = "21313a5786f2bea08ce55db3a7beedabaf66f3331bd0eac1f8f3d7b926f68e103b14b1a5beaa271c37b60fc56735cc180e424f91db62f6e740530a65495d8e82";
+  sha512.doc = "7637835fae934f4fb1aea954270281a986733d0e0592204346edc290f2cd7d5200ee2fa0d9e15a27be8221c3c990a8c3d4654e314f96441a65c197d3bd259129";
+  hasManpages = true;
+};
+luajittex.binfiles = [
+  "luajithbtex"
+  "luajittex"
+  "texluajit"
+  "texluajitc"
+];
+luakeys = {
+  revision = 65533;
+  stripPrefix = 0;
+  sha512.run = "618719877ab11bb672c319bcc078a625bc92b4d3a783eff8414f6c9597ec8ea3225822afbeb0d1bb04e8889cc3003f4a1ed8063e1ecca410ec6f0170fa55eb00";
+  sha512.doc = "be88aac81b85730c0cd85ab76541b8af01ca85326a4449168062ff80690db7d90669dff794b3f5926f1344a0de03289958fd4d2cf0cd2eb4b593dd052577e01c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.13.0";
+};
+lualatex-doc-de = {
+  revision = 30474;
+  stripPrefix = 0;
+  sha512.run = "c1bf1c7f367e5d15cb1a5ba0878a4f02dfe25772bed22b48f7376e8448569247233ee41ee8b58c156494d9cf0c0956dc23f4576f053cc349896247de0a96444b";
+  sha512.doc = "b615887d8b543af1c125b6e9fb9c533f52816f8087075a8bd4e6ef752ff48f51169f5945ccb067228612cbdeb10dbeb298a090bdb93d201b9629b128b0c5a466";
+  license = [ "fdl13Only" ];
+  version = "1.0";
+};
+lualatex-math = {
+  revision = 61464;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+    "filehook"
+  ];
+  sha512.run = "16c945e72165acd9f4bcf20f81e6c5df9ec22f19d45cbb8f076763d2d1a1a2e230938dabbadfcc065e3a060487885ac2edb223aae22d12f6981f5fca5c0f951f";
+  sha512.doc = "f5a8db238ae096b7b1a2eaa84643f063cd28e08b328cbcc780171a60c571e858a1cd1941a8ea9053392a8c65b965a81c8cd585ce2accb27e797e3e4e8ad3a127";
+  sha512.source = "e04a36a2280fbccb9572539ebc9bafba4edb7ccada25c4b3faadaa61c2f4458d9e9a90e54fa00b5ba675e59f42ed2d076b39918e5c126e2f619f2f69ff904d81";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.12";
+};
+lualatex-truncate = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "e896a6e065b5dcc49c24f8492f640f5ebc06c4f1ac8bbb57e8f76768ec20b14a016f2f801a5c5c855d03f72808b5844011aef7ac377a38a388cd843120b4edc7";
+  sha512.doc = "242cabec009e94adb1582874f959b10871531b433679c2f66ba9f82af02150d78b8acb8b486a182c5e41f2d0b7fee9a7294ab2d8977c9a6f0c021fde8678a4a8";
+  sha512.source = "fbe5c95820b8f94773f8f7e33b554e05a5d8ab2178472a6a6c27a24e08dc7dceb3bc1483999b3b13db389b46ba6f5be1532927adfd1623f0ec003da2a96e5793";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+lualibs = {
+  revision = 67994;
+  stripPrefix = 0;
+  sha512.run = "4387311fb78a29d63959114e401a2b97a8743a50c76a22163e0d14f15cd7b51a50f4be7a19232b32fa4152eac71c73fbeebcb8e38fee3bfc997aaea37bef78bf";
+  sha512.doc = "a4c878209934b2b044688dc77b4b467ae4e106adfb5f728f398d7adaa279ba612883ae22f30e667a79a22d633a507b689525356ff24daf12c50bc84dfa798ca5";
+  sha512.source = "98fb3af23ec41561f0ffb12461ec2977472f4182b49a37c0365c16bc3d52ce61c382e6ca172ef92638cc0496d5e3073e4c96b13acf390e783f1bf46d34226d2d";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "2.76";
+};
+lualinalg = {
+  revision = 68918;
+  stripPrefix = 0;
+  sha512.run = "91c466d51adeee70e9504deb30a623c41d4fd6b461e76f4a6dba2529ffb3e879ac9bd706845b00354418d6a600b3c774029000b3495ebb4711b152e274b87d0a";
+  sha512.doc = "21d4a285713b962e17ae2f83be803abb77813bb6fceb085787fba35f2a1956b88cb199e057c1f49d15ded68c3fa186a5af0dc5bb1ba99db07dc557c3a2da1a44";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+luamathalign = {
+  revision = 63226;
+  stripPrefix = 0;
+  sha512.run = "61a2960d103cad9cd9776de0c08b8d2167f6272484da2a7ee067951f7bcbeaa683e046a053c1f4d35ab83c8d70fb96e9b7b55566852d2262162b90c1a63f0b80";
+  sha512.doc = "96a1fd4016b189d31c966faeba0942d4b3bf24208ebc6c03281336af6d86504f552f0bb705a30e6ff108ff692de969900a229b061f7bc91c6cbae68fa42e8143";
+  sha512.source = "7f4c636a013d6fe8f0771ff3d3234cc2b5f098d0369d9ca73f3aea29dd47e609ce56ba20cec0dbeb782988200b8fffbf62c1957055d074d21b98051d8c155ea1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+luamaths = {
+  revision = 68883;
+  stripPrefix = 0;
+  sha512.run = "1c5a53bd44f062a4531bf4099c0dc1e76a47f5475901bac7f1fccea0005f9704df257044b76063d51158beb0d66d18e41ed6a4873388f0e531b1ff21ee1042e7";
+  sha512.doc = "0846e5ece550ec73aa65b07993faab7151efb100f6e5cbba8a4e73b595b012f031435ecae7d1100690395bc973fc82b617a0463bd3388e38081ad32b8d16d78c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+luamesh = {
+  revision = 63875;
+  stripPrefix = 0;
+  sha512.run = "e30e6f2bef6958c2f76df6aae5ca5899b91f41fc35afdce24840e2d028222c31a0613ba3c7eef27629686137f15eac24d3b97b7e0fc33b5d91adb7b766c0279a";
+  sha512.doc = "286dc5fb713f06fccf7195f317791a8c775ddcaeb8cea4004fb7a77882bec36c60679ed9ef725128ff354c7230becdcc623683fb78eac9b24cf044f9cc97af1d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+luamodulartables = {
+  revision = 68893;
+  stripPrefix = 0;
+  sha512.run = "0b390717c538a8c44cc7e8214908149c3705d5cb453d7776015eed27638ed0c0d16ea0b5be5abf2b6bec6e410b849f35796f574923303ebc883c75f7221f7634";
+  sha512.doc = "dba85f4e58f7a7d8f1f81d0051a0305cdf51e7bd1ad4220cebed513871c6a3d816d9a6048cdce352f48527da2b04700b94210eedce5104af289dd0508fc72f63";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+luamplib = {
+  revision = 69069;
+  stripPrefix = 0;
+  sha512.run = "8e6238c9fb806ced90d5c4e88aa84e4ad1ad39631296a90bd6656b600b1ac4f34d4e09789fb2bdbe92946ccda22668003c78b03497b3717402d5163d9de5e734";
+  sha512.doc = "e2dc6fd89743860159a529ae81c284c6965c4cf9eb3376bebe9d4027148e2726c7be24a42ddce36a43e55e76f7646f90da1f124fcfcbc22cf6a36324eda78aa8";
+  sha512.source = "51eb46b66368bc894ec1848fc357b859a68e56a88b700e5a7bc37b8baf1a2b379ea877e39f6b8024c8ca8037f62c6c06281c8213f49eb724b1c82dbf2bc46067";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "2.25.2";
+};
+luanumint = {
+  revision = 68918;
+  stripPrefix = 0;
+  sha512.run = "f34fdf0308fe4c9aa36d59e11862958ee1824761e5aa8ee62e6df81b335ec8dacb203a64ce5e26395ab612583126093dcddbc42dbeb927c90bd3bec73c1b5485";
+  sha512.doc = "e8718322381688bc306871de22d585ad50128f45d25ec6864034a42cc661e78c510dbfffee46ab5a6da0e3018f1cf3d35974d9e4cf27e4208e9a8186aa03e656";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+luaoptions = {
+  revision = 64870;
+  stripPrefix = 0;
+  sha512.run = "0169029e4eefcb746f48b266d590c7d9f3d4d376070c762139accf27adb8e48badce38769d22250519b3482b4752c55f66a165f4a6c59b20c3048738dcd65a72";
+  sha512.doc = "8731eb75ed8dd7089a6825350c2cf335049ce80c1ff378ec26dfe32423e4278737abadf7c83bc100837b2676866d38fdff50024845dc78c1625e64f8748e140a";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.8";
+};
+luaotfload = {
+  revision = 68143;
+  deps = [
+    "lm"
+    "lua-alt-getopt"
+    "lua-uni-algos"
+    "lualibs"
+  ];
+  sha512.run = "7781db14c45e5e2d5cba50e91e9eb356260e4cf1e55f45b6f584164f1be0a4b31818be7fe3e08cb51e8ed43fde49c0a3ddcecb860848f8bf02096a60e45a58f6";
+  sha512.doc = "a929c941695de38ee029d60564346581153bf233db5ea873dbd8f84d1922df2621e7d9a5aad3ad6423392798c5007342f0a886249eb85d3c598b06bf8e271348";
+  hasManpages = true;
+  sha512.source = "62c77656a4ab2bb93e8403ebe197418914644d99384f74bd8b78c75c255537bfd947a32aafe3f92e576b0e2596eac3308e2d837b41604ad1725e145882916799";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "gpl2" ];
+  version = "3.26";
+};
+luaotfload.binfiles = [
+  "luaotfload-tool"
+];
+luapackageloader = {
+  revision = 54779;
+  stripPrefix = 0;
+  deps = [
+    "iftex"
+  ];
+  sha512.run = "7f2558dc265746f143520c2c6f3bf2ed05ac8c54988e573519321a7fb5a2a991220d0eb8906893f77964dc01f0e3f16b783dcd20f809042a11d29cd137f557fd";
+  sha512.doc = "64719d715fc98bc09ab17db5f2053ea3e34d703adda6677f50ffe178a974230e8a03a9019b995238d073580e1faa745e655a7207468965ccb9f67bfccb5b5a49";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+luaplot = {
+  revision = 68918;
+  stripPrefix = 0;
+  sha512.run = "99bb803fa2eb46b33e2f3d7bfb1b307dd268df91d392f8fe7bce5e45db65fb8b1de66d8d62f0bb2912fbb5521a73ea60b6627fee3fad23262fb92485a7858c80";
+  sha512.doc = "b34d3b67d1603fbb940856d9da2eb4ee57afd87923c2a1c4541d5d9325cfd597bb47b2ecdc829b2ce4eb3bfb35eb9b968e0cdba2cb9d557d12ccbca959506f53";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+luaprogtable = {
+  revision = 56113;
+  stripPrefix = 0;
+  sha512.run = "68ed668fcc84eddad444edfdd18ede2c94ad81fd61162d62c5a052fabcda6e5bcb519d6eb473721fc2cc090bb7f642dd55ac35b9f1f0a682b2fb8c480a0a1014";
+  sha512.doc = "d91bb2fdf9851b1aeb3dba0b5eeb75bd1f9aa8c806fc3a99e063af7f56e0878152630aa18731c1c40aa00de72a0d192981a272d586fb25f7a19d14b4fc25b5e6";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0";
+};
+luapstricks = {
+  revision = 67207;
+  stripPrefix = 0;
+  sha512.run = "742b75749754c3370c64c50bc8138474f0181b4777875227cccf749851aa0d42cb490cddbd72a9624b931fe99f02e2727fea4e54d36b1d46cb084c666dca445e";
+  sha512.doc = "634cd9587c4fd9c6fc558bf9369b191e0901b58d75d871815592f3e6959bb103d32026cd9ed48ce448a497833c30916d39b92cbb85c6544b41b7341277dc6820";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.10";
+};
+luaquotes = {
+  revision = 65652;
+  stripPrefix = 0;
+  sha512.run = "20c0c02ec0a89e37d82d6ba10cdd9fce632189c442950f325ebc09f5cc2a1e798238ac9d3e31245e113d4909dd0b37e3a145b471f7facacb285a2a2450bc8998";
+  sha512.doc = "3a9b36054a67ff69ed8dcba75a6d5bb5bd4783ec301e59f491b82954184ff7793e68120762ec95182d6dd00afa1fd4421d2f87fc8294ac39061c88f50c37d803";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-sa-30" ];
+  version = "1.4.0";
+};
+luarandom = {
+  revision = 68847;
+  stripPrefix = 0;
+  sha512.run = "1b5f4f420fe5acd552e7ff34459184319337a586b19f3b53111940fa648b09924f03ce7ce4da7463cbc894e65ef87647ada660922ab252b560dfe99295255097";
+  sha512.doc = "4be8b8d72bdd6d4eb33999d662e06a60c8971d5a990b649e37c990dcc6f708856ee61a59ad1dddb6c083eab09e809ddfb65a1730a8e76bb6aadb1a240c809a26";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+luaset = {
+  revision = 68883;
+  stripPrefix = 0;
+  sha512.run = "97617f8c763ec968750949f5050ae8682b179caf6433ca036c820017c4ef73aad3f96a1f8071be490c029db25afc6b85c45310ffbddcf3c8ed7b4b5547cc6e58";
+  sha512.doc = "546beb759fe4f6e6a6a9814eb46935a3d1245bc2a48878c8391738e92e79c7df2148e564b2eff0cdc60281b6f071d8fad2edbf171d7c1130b1068aad11aa5a19";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+luasseq = {
+  revision = 65511;
+  stripPrefix = 0;
+  sha512.run = "b77936a1b92ec8b3889ec9ba8b356fa235da6eeca98d6a86f315723c64b4c0a7d8db2213cd9fdad4d2b38cfa8af1bc00c7861f15a9f4f1a809ec86bab8a16f77";
+  sha512.doc = "82825043ea6c04a76cbf0440d9de08ee281b843342c6385f11cccf06bd11320138119fb90944f6f3fc5aa8ff9854f1934f7890809f0a8175de389ef5cd448cab";
+  sha512.source = "3a6b4fa48956e2f448a1be96eb9d05f236c9e1b2177de13ad16aa942c9b4ef5d4d4585bdb6f5d9b1a19901375f34cbd381430c629e037be500d84cf626065500";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+luatex = {
+  revision = 69182;
+  deps = [
+    "cm"
+    "etex"
+    "hyph-utf8"
+    "hyphen-base"
+    "knuth-lib"
+    "plain"
+    "tex-ini-files"
+    "unicode-data"
+  ];
+  formats = [
+    {
+      name = "dviluatex";
+      engine = "luatex";
+      options = "dviluatex.ini";
+      patterns = [ "language.def" "language.dat.lua" ];
+      fmttriggers = [ "cm" "etex" "hyphen-base" "knuth-lib" "plain" "tex-ini-files" "unicode-data" "hyph-utf8" ];
+    }
+    {
+      name = "luatex";
+      engine = "luatex";
+      options = "luatex.ini";
+      patterns = [ "language.def" "language.dat.lua" ];
+      fmttriggers = [ "cm" "etex" "hyphen-base" "knuth-lib" "plain" "tex-ini-files" "unicode-data" "hyph-utf8" ];
+    }
+  ];
+  sha512.run = "5ddb75ca2e358bea261363cc19d39a37a9e467f9cbf4f8006f036a96fea61cb00f86c4000c09d7dd07f71f9b9a01ec165ddefb862aa84f0bc3da6a387ca1f42b";
+  sha512.doc = "36a5dfb6b7ca09adad807d2fa74df854363107eb3fb514977e3ed8c69eeb1181a19a55a49eb8c001a3532601c0a222a3ae9d130827caa19864df03705af7271c";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2Plus" ];
+};
+luatex.binfiles = [
+  "dviluatex"
+  "luatex"
+  "texlua"
+  "texluac"
+];
+luatex85 = {
+  revision = 41456;
+  stripPrefix = 0;
+  sha512.run = "fbc1306d40e1c329a106d7ec4ef79ebb99b2869ce72c45212b87fa03f66a18b1636324dafc739a33500be77bee2c71ebeff02c97c42f85716f5bded4dcebc021";
+  sha512.doc = "4bf353f60c305ea76e66848920e521dec0c66c80f71ebdfb0593acfc9e2914eac272eba3d69f63f43fe8be903cfbb2da7edd82cbc3d38a897934d91f1ac276b7";
+  sha512.source = "40f2732ba0eea372d084c7a9096e12de76a6f7c4ee2c8c9c042ae51696ca46fb527aa73dfb37b7c6a1a75f9753ed32b28fb9d3f2474cfd54528336b4a3cc95e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+luatexbase = {
+  revision = 52663;
+  stripPrefix = 0;
+  deps = [
+    "ctablestack"
+  ];
+  sha512.run = "cb187dcd0f9e454a3b9d021b802ac6f7d09c3eee68adb5da31035f5b7bb36d2938ca940505ee08c8410ee0e5e5c81ffdd21617ea5ba0e9ca7b58abb6ede3defb";
+  sha512.doc = "5dc696009e84662fc56443d7a5d61b3f30adbfeae3cf7176e81e676087d0fe580cb0575add49999ea8d5651850b7562c775b0727de01934465f3613ab7344be3";
+  sha512.source = "ebb46d5d4c3f6ccfdbc758f9dab64d7e83c2fe988f7da6852dfd5e786bc757f2438f86010a695eb2e780a02830f15dea941de7fb5bdd6e6561df0774b476dd5a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+luatexja = {
+  revision = 69245;
+  stripPrefix = 0;
+  deps = [
+    "luatexbase"
+  ];
+  sha512.run = "359e6852a954aaf5a0aa99881dab189e6d878e5ee4083487d93315652cfb5cbbd010d6dcc74c946ea231073122604f35966744f9e7870dcd1321277fe93074b9";
+  sha512.doc = "d41556bac7106df19d9fb64c4093b9151e90ad237a72bb38d941d4fe1604c834800a7edc8d2bbeb7c82662c24fb2b2e1d8cd69a86ff76b2843daad90ac8f55ce";
+  sha512.source = "41f17265aa58ceb2bdd9b13e95f73552185654f459498337d34631e1fff3fd51f3fcdc06a2d426b466f0e21dcdc3fb81d1e4f031214b2e4c93582d04984aa66c";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "20231230.0";
+};
+luatexko = {
+  revision = 68243;
+  stripPrefix = 0;
+  sha512.run = "7815d0d6caada77e5d72c410a299de6349a81f635cf9f2ae5b61a73e5619808b8997de70a35a0a6e8cfa1250d413645a9f90f398582e061c92138dbca97d4117";
+  sha512.doc = "cd1d68f9fa8d5bc5491f4a58f465ea8ddc4a0c500f7c24c2034c75f33ad31d869d2d63d836ea6699b02b04b69406290e7f98eef1294ce8be0f9358f9b207c9ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.6";
+};
+luatextra = {
+  revision = 20747;
+  stripPrefix = 0;
+  sha512.run = "03c95a5e42d8fc0ed88704799a36624ebb48b9c7606acbc09de29e5da845ede3f239a6dda43cbfb4377971cecb55b1f5280cf0ea1aae5057f3ab8df2e0870745";
+  sha512.doc = "f1c0d31fbd66f4e78eb638a9bb336f49de3d19b29bf276fb6fd0d976ba2f33599c1536ec82f7887af1c1ee359b48b1048d400b7faf0cd8016b914f4c5318c849";
+  sha512.source = "2050bf6c907f6f4e210b400cc93b1786a7ea8407eb64e90054b2ac8408d31689fdb1ffcf4859f1bf6c24c298e5d07fcbd201574b9b397de192609dda504502e0";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0.1";
+};
+luatodonotes = {
+  revision = 53825;
+  stripPrefix = 0;
+  sha512.run = "4cc24f72014d50179fa1cd3630a483677a98a5dedd28e94f2c7003c3c61eae66bf9b6787bcde81b654f4187d873440828655be372b4d6bbf59c802da23beaeea";
+  sha512.doc = "2b7298a56975f0ac71bf6c0327d95531622de23a33c4a1999cdd35ae960766342071722e388fd3d9fc10fcbd23c0752e5e5399516c8465f7e66f5ea8b952e447";
+  sha512.source = "0ed8cbb2160246c499ed98a7865216e8f5739a7c87a1b9a6ef8b63944a4b3f2c6a011ebb4276486d2ff8fca96428b0c25e87936fade5967cf41f7cee79307880";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.5";
+};
+luatruthtable = {
+  revision = 68893;
+  stripPrefix = 0;
+  sha512.run = "3f239ac9d477c456881921140345415d2bc9f0db00c9180bdfac2120c86669f2a52fe8dc92752535b2dacbbab626e51ef614da7fc10a93ad90a2322dd1821343";
+  sha512.doc = "5e17243dfe5343e211991a9e7b73d8b2d454042bea5cd15fe5bdf257344b4953d9a3e3ed9c2bfa66263c32c53a93be233715f2d524bf78c682a57b67332744fa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+luavlna = {
+  revision = 67442;
+  stripPrefix = 0;
+  sha512.run = "012bdbcca4062a2f551b28dbbd781c885fbb557f5c1258157db01fff7141c8380341f53a9e58c3f844c022af64a748299efb703de5e37f05acaa0d385b8ab8ed";
+  sha512.doc = "a785d65816ff637c4c08f6a0ce95e5a65c4121885f6af32b3e68574845adc10886685451cf3fb68cff05b4ab29c792b3c02f793d912e86ace55f2602af6d63e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1l";
+};
+luaxml = {
+  revision = 60709;
+  stripPrefix = 0;
+  sha512.run = "ebcf0216dfc05291cd1f44096785fa10b4d8f341d0c45c03a4818aaf0ffae1b8a9ee4edc0ab26d1732d651218aaa936099a81c2d732b1ff25b956339f45df8b8";
+  sha512.doc = "8f42b46c552b5771058f442e2b962d49c13f31c0b58076770131d6e8bb048cd706db9e7380a43cfaeae815bb02e83709e9165a1057ac9471bcc0fa2ab322cb45";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.1q";
+};
+lutabulartools = {
+  revision = 67714;
+  stripPrefix = 0;
+  sha512.run = "eeb781b572beed01f5a787a4d0351289c90751ff49a289952a150e3aa013b10f4b0f69fea546709ce9c6ee077a08a551ac9e03d192c1064205eb2af6e907be1d";
+  sha512.doc = "9595cf869f480951f9d0d142abb05548e4f71d8af6d62c4ff0626ad9d9019d63b91333bfc8ba1f6948c9075d62fb7b7956658079fd17ea5e86f920eb7c6ed49b";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+lwarp = {
+  revision = 69384;
+  sha512.run = "c1c5bfa2f3131daa3c5c39e162e4eec6a1b640b5ce5f122d44cec5a1e732c97ffec2b0376766750a2c6367ef821acf3418323888d01121645cf7e5051a6d643a";
+  sha512.doc = "20796dd6f885a966391b45e0db71d2c065afb89f87e92074de72fd7db6c02741bec9281f6c2db4ce6b5564d66f74361a30dd1d0dba6352747d41a4d161895410";
+  sha512.source = "50266206d154e4490fc43258518d1848024a83d8fc9237758dce1d2ab2737d82d6f398daf2b04c8cd091b5f38f6e4a8f0bb7bbfaa3f60ad5a1be6b4fc18624c5";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+  version = "0.914";
+};
+lwarp.binfiles = [
+  "lwarpmk"
+];
+lxfonts = {
+  revision = 32354;
+  stripPrefix = 0;
+  sha512.run = "aa732f403af1adc898e6ac462412a59e4d2c8821ef47807ec5d8c1ce565a73299d472377117bca3fb30add468b546280b1603feff95d35090b338f87b279bdf4";
+  sha512.doc = "fed48ea91eb5ad414463d3b929dd4deb5cf433be63aa2753acc251aa1e8b85f0db7307a0ea96ea0bf9c4d9b14d0b90d26cde703bed2761a4a1b789ab3d117eba";
+  sha512.source = "18da6f216135745887160dcc1df6ed72eb0e49f60a445e45326c84bed8fd98cd66316e21a6e0e7528d551917092f9715641fc68e02371b609690e00403ca5d96";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0b";
+};
+ly1 = {
+  revision = 63565;
+  stripPrefix = 0;
+  sha512.run = "79ec3f1971587a3266d3351cf4d97e44d7871ace695c7f229b92c819f1334c2032a3c906a2e7e74e98fea5f01ef4dabac9c2dbdbecf68f0d5512c637288e8297";
+  sha512.doc = "c1a39c96000fa3e929ab6518acb71c26bb06179cf06af4f4eb1f2bde0d21816e108c6a89dfa2f7dd71f95887a37d532bb2914a03732dfe4080541ffa204e8e43";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+lyluatex = {
+  revision = 66880;
+  stripPrefix = 0;
+  sha512.run = "8d8491e9760f7464cc420b2b457f61c6f9e8e08b7de11dd9194f39330bb193b534f5ae3ea981317e4b2bce536149ca002f532f98bba5e0d8cfee5450c6b9b171";
+  sha512.doc = "96d99f944aed67d9e59714deaba08a5b41cd8d63f7c8a38151b2d7952817d5096517d1c643246dac8bb3616efa9c44180264794b90175aecef9362d32a83bf3b";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1.5";
+};
+m-tx = {
+  revision = 64182;
+  sha512.run = "b56bc4432bcd340f3e92f5043c38bde7f14b5f2d32b9433fa21c73c20f7ebb981714175aa6f4f871636efb62a52cd24aa639e87a320039313b16db1b027ee2f5";
+  sha512.doc = "316fbc2b37b903cae8da6bb9f44b8afad0e3e577c6fd84664e1724ffe318bbdbf9609dcadd5cde6a14cc5acbc134f69bd7a87dd90d9da7d4442a5f913b8132f5";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "mit" ];
+  version = "0.63d";
+};
+m-tx.binfiles = [
+  "m-tx"
+  "prepmx"
+];
+macrolist = {
+  revision = 60139;
+  stripPrefix = 0;
+  sha512.run = "d722a58921aa7f6c5a887c022027df5d04c905f9c1cd7a95df31e1e3d9ad8c583028436eeb35217cb186aee6ea21efff09d3f52fa5284963789ccaeedc3342e7";
+  sha512.doc = "21893f581ee47e136a47c56deaee6f9c4e6c5e4380027e22bfb62cf6258502ecb1a647f11dd5468b8687c033e0cc708397efc2499307db320963598228dd3b4b";
+  sha512.source = "ee930f3a9d8a909c9c139f47b9022badf50ead0fb95a87a38dc2850e1bf7ea38d346ac362e1aeeb8c2dfb661ce5dca0c3cb78fadaadc0524b080d73d3241d0fd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.0";
+};
+macros2e = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "4b11fe67e0a57f98bec13e9ce928664dbeee189a2eb303312632a881ba4f321fb5acdfbec9d14544782b86a961add6154a21c731f58e889ea58e98459de05c39";
+  sha512.doc = "71db4e3a595508119b1a8059c25b7a38e3252398186386519e7edc28b3a75cb6d6954f274795b9ef88e360b1e0998e4da2a29ba1f5ebf464e535ea90c498e8a2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4a";
+};
+macroswap = {
+  revision = 31498;
+  stripPrefix = 0;
+  sha512.run = "39af1bcf247986c1f7559e1523d1d33680270602bda1d904404db0700452d203f950eadb2d9808a1cd3098bccf070218bd791fdbe5be4a3b0f539f013ef226a6";
+  sha512.doc = "4e46c824a6a5909fca7d8a4628c87cc7a372ae5eab0d2f5110dc1f205e072e53a817043cbead53dde55e71c7c1c0e23695ba963c27e46bc70e2f84d430b656d7";
+  sha512.source = "43ac07d97c89b821f89f7308acc21521d025bad0dcc82f281e011254b163a54cc457db5bc0dc74419cc5bdfc4297e18cc886bbb1b22715dcb7d41e6bcc0c2374";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.1";
+};
+mafr = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "802d108e7deaaa1a42b7f1eca5059f9547f0f4edb2eb5f8f3f0b68d03c05662f37d2bf7b25844dcec6b89d6d1f0babe93614cbc87fe1e2ca0ac2153602c0cad7";
+  sha512.doc = "5e3a0c42944944fc467e09751c1881dfd16ee526c78e509acbad394725703771893770d11e5aa16b09b6b5d1059331b72ce0f1e85c6ec61677d101276398624c";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+magaz = {
+  revision = 24694;
+  stripPrefix = 0;
+  sha512.run = "5c35baa39a8b26911b2c2dd875576a0f875f5edc37fb497dbd403720855861219fdced11ee3fbbdee8e63f0817b6c2ee6a20e6ec3bcc9a5183465c22caf7735d";
+  sha512.doc = "78c9163951f269a489f6e8a48cce7d9ca46aa5c7f2f2567f8e50627ddc32920a8a5b54bf141ae881c2863de6bad4f7a954588fef9469291f18e65b7fadbf051b";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.4";
+};
+magicnum = {
+  revision = 52983;
+  stripPrefix = 0;
+  sha512.run = "305d94ec07468511e7ada667ded30a1c3ba68835d5bdd03a9a32c7bb7c0d274d5ddc77a5ad02712faf10aba5eca73c6708cb2bf497bea0b73b3f99b10923a8bd";
+  sha512.doc = "084bdeb7d422a5e79f4a53864ea0c94b09962e159e103fe3ea77163a9a549605f7139bb2ba9d1a57877b3453162a99470f48a691ff78289a1caa5389b2a7f67d";
+  sha512.source = "3bc74965fdc7ecfe7481e426e3cd2c9a27c8752fec3248e707c1f0ee1fcd03205540d6cbde05b82c9313c567b7e689acc9b1146f53962eadfef22d7006c896fb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+magicwatermark = {
+  revision = 63656;
+  stripPrefix = 0;
+  sha512.run = "87dc295ac046213ed1a0b3c1b2b415edb3f65cd1e213b101ed3125df663fc4261fd54c07343ece9dcb4e345f134e7d9caff2791e0b8ff507b8d006d5c2dd1430";
+  sha512.doc = "76504a77b18c8fd21d27cb26092edbca6e1e9470c006bd486ab4412116f30b833f3a92cac216c73318372da4fe3ccc7342effed2cfcafd09fb8efb1770582d5f";
+  sha512.source = "4f42f8459f7ae28a4799473b57f0cbeea59de0f6b1cb065a0e2f27a8ab5698512bf3845b275e488c7157d3504d79680e679c88fbd510bce485a89b72671fc98c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+magra = {
+  revision = 57373;
+  stripPrefix = 0;
+  sha512.run = "2b182272dcf5bf3469ccc38daf9ad24081002d118de77d2dd012b136152f2147a63c6c8fad5ffe2f758efbfbf7665ae0c61ef6281cf16112b740da95d2334b63";
+  sha512.doc = "8364aaf47ee07d7462dcb13bb370c88c47556e23491233e580dee165528b417bf3dd139f0cdb3db6c565c0ffbac40ea2fb995a0dd2981dd227d1a70561f2f619";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.0.1";
+};
+mahjong = {
+  revision = 58896;
+  stripPrefix = 0;
+  sha512.run = "697c0a634304e4e94a6165fd033d906209fa6811cf6297868b76389165bf557f3b6abd419582d200bb252365f790ce53c98e1da75c8b6d3d061cb5d6b635ef38";
+  sha512.doc = "622a34f880eb02813e7f4c1f6eb7199194c3ee0e62df534e7832530c34f09e2abfa7f1d491b4840310841e230e3ab5080cbfa5370e9366c0f9b8fd9000b0ef38";
+  sha512.source = "6b64551b9cf9d4e79875935d2b37af602be7d3b001a3ef441003136b950741adec8d4b8521ca9a49d744d2173c0b053f025af909fe320edf08f1b3d7c131055e";
+  hasRunfiles = true;
+  license = [ "mit" "cc-by-10" ];
+  version = "1.0.1";
+};
+mailing = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "33fca4d77b34e3390de647e7e39d6240344f2a90c6067275bdb0e7dd1a3deaf5d5cdaa84dc4a49a0c817bc6923eb593602653b0d0ae4b794510a272b78498be9";
+  sha512.doc = "2fd2d4dd5c1896d0849294a1911ae3682b7331cfa574bd46aa047f118fdcb09b4da3e29f6d5412d23ea49f776cd042694508e8b5492ec53cb44a6acafec110c5";
+  sha512.source = "5adf58b4bc60e939906b8ae587829937afffc54af81623e640a513ed8522984c2308d3af1631857f4469a5774a844e3655bc3a9ca8ee09445b545d10dbcfea5c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mailmerge = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1930b0c554dfa36514d0c0b33749d506d6e5acfcf65e3c1dde3ed75a7c45bafb74db8d83f1b286c1a623acb32b2047dcab566ad85e3676c67c0ce1f7722d24f4";
+  sha512.doc = "3e8aa80211af8f59289b87dece6cc2a1c5eccf02805e3e7927c78cdac66cdb6afaacb07b1114f8c67105289e4d4f7188043cc28f00365c1f5c3f353a53f14922";
+  sha512.source = "d894133e294ea440e1916a04f28a738930ea0ae80ad96e148434c84a02a388735d00778ff4850306ba7336c915a9b2992f41c496149447e6189db82c59a66138";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0";
+};
+make4ht = {
+  revision = 66130;
+  deps = [
+    "tex4ht"
+  ];
+  sha512.run = "9eddfced4137652653744256bd4ef342a1b5462a2bbe1852c7fc264b08646b0757d24ae2d12711c66905f810a8f0749ae7f6d7f32983d3aa96fad63e9e104a00";
+  sha512.doc = "2552e84307b92538639481b64690b2d4853f03e795b11daa61f88a1a15896f24982dcd563c181497a287744eabc5a4c3e18a2a705bbfcd9099383b1858a02081";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+  version = "0.3m";
+};
+make4ht.binfiles = [
+  "make4ht"
+];
+makebarcode = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a19268b5e63e577b4df9255e4c0eac640c73ac9e08f6d4b4baaff7920f714b7dd961f8143587b59478df2d854dc2f363312833c7636d08c2aab644a25b54bb40";
+  sha512.doc = "ecd0121f679d7e4ffb162c151dc4b60acc78f9297d3bf0003882b914f0b1a10a52b43e844c5bb085d73ac08f9f0aa2e768ec4fe7374067ae2fcf304e842a29e3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+makebase = {
+  revision = 41012;
+  stripPrefix = 0;
+  sha512.run = "cf36d0bad24180f48a7cddae8fa19c6260ceb5076b21f05e48360a30ec259b342e6a17f1c5d299ce5fe02a8dc5ed7934dd55c5529118bb24dd13cd36242b0d6a";
+  sha512.doc = "2f7eabf88fe3777ebb1455caed5a339c3b56e0e7a97d34aac0b4c461e7ccf6450de936678ce00e64e39f308167ec55a6b3ec42f7428a7a9c87d2607570e1576b";
+  sha512.source = "734e05be1aa54da7bf484fb9211b1f5d6d076c9a87c3287ebd1fe0fa965f542e4e8e14a6df767ccaa23063fc263e66d52b42df54fe3c3142bcf0b3d7f7fd8de0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+makebox = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "918052ed5c358e12ac7ca7c93f25a43fcfa8f7ba261fdf652d7ccbbcc27e3e0f822813d8297d3b75450c443687bd97e93416624b51da61572557d6a337638bc7";
+  sha512.doc = "807d495fdef601fff666acb79c7f3fa43d1aeebf8aed77bebc02f90dca4fb9c36ae1bc911a9af1009538f3d3e2c4c7f9ceb0111d091dd4c1691a1520e089a697";
+  sha512.source = "04ab9a02882a505f4393288ae8e5d6be374bdd6aa8a4472da1fb7e2c9e3b4bfc58132921a3287a4c8fe4d8d3fb91ddc33496a088431862407988ade1f716ee85";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+makecell = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ba32b6a68b0a4cd6df36d460832e5cd9664a9c305c24dbca93a4fce69e97b6db3d86e3f219a0511c7d70378ddd9424d3685d60cabbc8554077c6bfbd8847789b";
+  sha512.doc = "7c762852f1c7b4609fa823117e765d2b42ad857e2ffa1ca84aa3df74497c88dfc0a2cf05747f11f14453873ee70c4b0f2f890112c567d04ad0d61ada37e14335";
+  sha512.source = "bb2d33b674b612e67bbbc1bf04a68f3804fc37b9e22e19c9af05746efa869ef52db48c5828724b88de130b15120e9ae003f49ea6389f7add98c712550af87d4e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1e";
+};
+makecirc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9bba91e5139b90201e232aa3fa21254c5bf8d989aedaec8310209ae6b772d24d7b8c3be379909f04c2c7ff079cca10f43a1f74091a77bb1b8ca637a0743a2ef2";
+  sha512.doc = "25190b3a5d911de1d02fa596f604527006f3adf7512afae397e5ba15ab62d6471ab834f92437d35a9f37ed83c8b84990d79ef0fd9ce2b0edfffdfaa2ec97a345";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+makecmds = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "fb63fdc9cc0aaa531b25417f0c23348971c306b1a93d99e7efdbbfd7c3907b50f28c67f36a88bb2a94154bcbde937e63246ece577ee2440ad4f5c2935eb25b99";
+  sha512.doc = "f69dbf682df7e3089727570417be3624b496b5ad7db627b344d32b106606cab5299dd23497e137770fdfb9f940503a65e1074e06dd67e0561b36729ab6c3d428";
+  sha512.source = "380eca4f5fed0ae72cded8f6d3a201cacb05a57851c4c207f086dd17762689cd53a6b27daa23d8043c311adc9baed32808d2c7eb1855892f8113ec7f13c02946";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+makecookbook = {
+  revision = 49311;
+  stripPrefix = 0;
+  sha512.run = "a4fdb7a7553a08b51d15c038187ef621ca6852c20a033b1751c544634c3092f93c3db5c1f4d744732ff6696509d8fa406251e9d14e619397ca4202b55c1b9c64";
+  sha512.doc = "84c97dd438e3d3abedce031da5841f789f3b8c28672c9e3b6c53929e2e781a9d51adaec6d883d0008b42f1eae2ed5bbf992ec229bb8b2f7f510346d10dbc31fb";
+  license = [ "lppl13c" ];
+  version = "0.85";
+};
+makedtx = {
+  revision = 46702;
+  sha512.run = "e083fa791975cef84b2e2ba3472984e354d5ced50ae7fb96dd8239cfffd379e7a25fdab80abcb721e63dfb10d9557bce69e97c5624d1635f894bcd26e22b5f4d";
+  sha512.doc = "913f6f02ff478ab5edeed4792846ee6bc06d28c16fd3d7396d394f4a964d6f39a12c8163d66a50a5bf53add151317184b09a712dfd32f9ff783bda7f520c7eef";
+  sha512.source = "84e12e7798c37a598a2d37fa7faa206ffb6f5c1f9c21af7130a9f05bebf9857f2a4fb7988be55a9936199694a0d74595ff75a1261187d81fd06beda5e0628931";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+makedtx.binfiles = [
+  "makedtx"
+];
+makeglos = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "477523d4663e1e4a1fd6bb830e4574d6d116180b06a3199d6ba27f7cf704a1906a2812496e9a7ba8063690a2095fbd5022a5eb8c2448b1e0341c8a961cf05794";
+  sha512.doc = "c580a23d65422d8405ce011fb6b088f53836811e3da517423f6d0dce098ffbd64c0648318eb9fb74ab637e1796d19247ee87ca8a25c7d306e3dc35a5d6d79f99";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+makeindex = {
+  revision = 62517;
+  sha512.run = "5967ba4123fd4c708ce841d29211fdb66c28518f4b418903be0ddf2a49964f706af96b250eec814c547e0703460c1273ce72a7acf3ea9fe28cc1c7073af29d3c";
+  sha512.doc = "40b9ee1ebf7dba9a4bb4bb3077cdb1e88b07f276a9d0ae9c2817bd76a2f742ec9237d1b6d9658694fc5fc4e8f82591194862637bd83ea8e106c0541591d343ee";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+makeindex.binfiles = [
+  "makeindex"
+  "mkindex"
+];
+makelabels = {
+  revision = 60255;
+  stripPrefix = 0;
+  sha512.run = "4f58301507896c2e719f2607e1e456aeb25cc78913ed02d9eaa12489aeb643e73bccaafd1f219c1c8b485d77aa64e99d64166b63e8a2c7a7c3c8cfb77ac23bc6";
+  sha512.doc = "da01e167d1be1d4831c1bd0aca43472aae12a8204ab844f9964e60f57cf22312532c52cae85964f10780aaa0e4f84015f6ceee8ebfa042b184fb1ecc7c174585";
+  sha512.source = "588029533fc25c2501cb8a72cd4226c878a0c419e42d6e4269b68224d9992d298a01019c59c794eb1c9cca14b3efaf758f5c97b6ef90451a6e6d1fb56233a5ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+makeplot = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "366e9ec4ce551e17ae6e77f068b0d2fb46582c033eb27781cd620a87731eba744212db8dde9ce8e50318f280dfe31e61a344ab4232c3bf26040dd7a2290d4fef";
+  sha512.doc = "9aa863af450a66201e7cb3d3a58d9248430aa26cca9b50de4c71c350314ac9c0f6fe54e5eb1b37917a75030a60ca18102933f154bdeb7831ca02bdaa65b3a6bf";
+  sha512.source = "b4f0e0de72c005124b7e83f214111931ca2ba03ae5f1270b5d10ff790c6fd84cb02950aed7377deae2c432de55b7822ddc68b9911b608b0460c7800f375fcecb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.6";
+};
+maker = {
+  revision = 44823;
+  stripPrefix = 0;
+  sha512.run = "d8cefc4d4389e4024c448400f02bc0ef0a21146c1d079f804f5e102ee3f2977be7fdd2c1011672b70192af48693ab1fcc38bc1d6f7711fce217792e82f0e5e54";
+  sha512.doc = "fb7f68b4c48de87e6c1e380525a998bd1cf7578c2e4a51551b5ab4909481e66faf38f0a74083f25954b5d05e9eda12e56734351fab063f80955abf24eadc0e21";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+makerobust = {
+  revision = 52811;
+  stripPrefix = 0;
+  sha512.run = "502b4dd65ae3535a2519c696b8b2ef73b3eb8f19d20af7dce94e24c8f718f827e55ddf7ff229bfc0810ab8747c94720cc7a66335a7d44065d0a0ac6b156a683e";
+  sha512.doc = "4503551b0085c7c829d41042083209bc02dfd2391f99cf0fabafb363e288a455e51273bf0f9d4ff5a5fe17050fb5288a7835742e06865407b8400c88244f4e6e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+makeshape = {
+  revision = 28973;
+  stripPrefix = 0;
+  sha512.run = "b13358696b16b41a69e5a207fcfb717b417ec191ae9f6ad4408422b1ce99c3785a3328cf9bd2e87ade3ede4998ba76ddb2f640e06ef5ce88172942e4d0cf2bfe";
+  sha512.doc = "a249c636b414203e75225af611173add2e90af306d4a78c7d865fdd0e76b23637fb3b8eb41f127905bbd0065cc7b941d3d26e3ee73b9aad56e05ed0a44f67d57";
+  sha512.source = "43886cdf9c2da20943bcf0403e05fe19c035cd3d49af9afa52212c376a2ecae9ad963a24c257b70e3dcee448f42ee1464e63dcb0c5addd7018234658867d3179";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+mandi = {
+  revision = 68950;
+  stripPrefix = 0;
+  sha512.run = "dca65d864b92b561058a5fd8e703ad2faf4c1201231efc0168992cf469d0919ed1aa45d42fb2744bdd11247d85d9582c25862495f77ba835eeb3663911e86d41";
+  sha512.doc = "c88d265e450e87a59fcb23a7a3a94ea979dedf12b58c7f0b6b2ad78e43f43d86b7bef2e59b89a3724ff02957a62ab92daf80df278eb8f8533ee359aeff580426";
+  sha512.source = "e7f588b777fe28c8c1768f13bac4e09fa9b5747a0ab97cf350cf8b0ff61cfe0826df19bf2a8da03e6d23f8cdecd1335897197272fd899703ce158bfb473a8fb5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2.1";
+};
+manfnt = {
+  revision = 54684;
+  stripPrefix = 0;
+  sha512.run = "492dff2a46b9c0e89b8e29149546dfc736195f7f264b156fd91f4e8d1396f43b149948df656c7b148a2d54064fba89e033179b31eeaf03d0037875e36e9b4244";
+  sha512.doc = "469280a4576d3b8396f310ba627f5a69f8fe47604f39562321d9b3b7d2f3e81f8d2c0ff7cd18ae4a93d9125df0fba79744edf0b30d036916a8259dc39adbdddc";
+  sha512.source = "c90ac97080e2c0c767673f7128e1850427218bb4b05024401fe37aae71ae65f1feae2e11301055dbe6b74fe56e7b16bee4ba1fe0f1a1defbc07763fc5f5cdeb0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+manfnt-font = {
+  revision = 45777;
+  stripPrefix = 0;
+  sha512.run = "fe7ddf667368990f988005a44013aab80af9c097f4f824f717d84fddfd61dfc658f507d5b1bf8f7c076be1bd5a4363f117b388ecd39b0ce2b0ee5fc8aa83fd4c";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+manuscript = {
+  revision = 36110;
+  stripPrefix = 0;
+  sha512.run = "24e4c800ba6f5089ae76b6d444c81689fa696cd2fd9e62281171d771f8f9f065320b53b058cc6adf836f36d378f6f7fece98e8c09e2b655ecaa8884067bd696a";
+  sha512.doc = "baaa102f870cc307fe96b583f74c19c7ef2c7649f01fe7985c3dcd331539bc9d839f6e34aa238354b6932d14638b77e83b7bf8e62296c36fc2dba18f776271a6";
+  sha512.source = "0cc418f2b5538035123d81f6702031d97bf99fa6733d491b306981ae698f3cad9bd121a20410329b8428b5c14749e825052544cdc52b9c8457d7e302dfc64888";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+manyind = {
+  revision = 49874;
+  stripPrefix = 0;
+  sha512.run = "e08291b4cb0d2c18e6b97cf6a287d7cf5b49eb312138910185845b6c0a075981a15548de2dded6f597605aef885e736c17b5306328574473aa56f8f11b6b8288";
+  sha512.doc = "e8d9c687c1b3525c5e4d218a380781f1b2e7d512b053a583b00c97f0b7eefa1202dea310454065194039841bf8763acc2b0c4712ca8d5e9d31b57cf03c50b928";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+marathi = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "5ff1e45d4434c68f09fd011fb0d0bf7652002a9ef6c36035e953a5bb9871baec4dc1998b0c0ec1749ef93cbca8bd40512457d962bf0e9f3bb4c0d36fbeb6f301";
+  sha512.doc = "8ef83a4eef0d877473a24ad3d5efb9e4d374dd1c2e00b210251ce145d889d8cf8eec7ff368d94db888b134104770901877fb4e943bf758f921b341bb7bfb5f3c";
+  sha512.source = "6cd0135286dbc64b59628e7af8e84e3c4277705bca226155ca899f9ad438751cf5f5da73dfcaa500fdc1d4779f707f8290922098409c69216a5c66e2bdbb73e5";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "free" "fdl13Only" ];
+  version = "1.7";
+};
+marcellus = {
+  revision = 64451;
+  stripPrefix = 0;
+  sha512.run = "b6ba86cea7e275ae2cb6f35468300035fec789b85280307e65784bca9844aa8c834aa23e9f7e59de75d53879dbc609e64c084adcb1c38811483eeab15543f95f";
+  sha512.doc = "5267a43751ac7a0aadfba28ec4427da7c1afbafac2425f09582a736520ab4bbd769e08ef02b86816225cd76bedcbb23f6cfd3e77352c9e4008f9443b826b48e9";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+margbib = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7f734e46e72badf838397305ca926f4589b9aba7a0e91e21313f6a733f7cd09db959f30e3694490633713b1a77c8d11a521b2892722496fb162d7c25c7b8641a";
+  sha512.doc = "c4f93e442d1337cb5a1825b4f7e6fe5ae0a759c32837a896852ec5592b3c31a9c473789db35c147b67360ed662b1e9ae42a59fed446dde234b174f65e358662c";
+  sha512.source = "7a9aecd832d34d1225606a905558f5ae33befaaf20f8fa1e6e5263850d2c72273be5a4a05e96d15225b7a2853212e3de28455c856c17e42838406862cadcc344";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0c";
+};
+marginfit = {
+  revision = 48281;
+  stripPrefix = 0;
+  sha512.run = "dafe223cc6120beac7ce419c5f5eb72ece9be2a21992e829a8015f7e05ca22c40d5196d26d21d8febf3459bfa58c7defc797ce7bd4ee1e3dda28761594240b3e";
+  sha512.doc = "fba2ff6febb4acd0dad443221c6146fc2b3818c4948827b827fe2ff2df82f4e2843520f1f4cd41fd64900012d64d973d9b649e65b1c5ee4e74757344ab423dc0";
+  sha512.source = "89892d83570cad7c46b5fafcf8a7d87b660d898afde97c2fed03f82d3cbdcea9bd11baecd19d3aa958305cac0d9f7163e00fe262a0738e7f89b62f7d1bdf0df8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+marginfix = {
+  revision = 55064;
+  stripPrefix = 0;
+  sha512.run = "70dc40b9823cd82a52a7e55e5af47e5b2373fd7cf16567f6eca2bb886d3612473141435444b538f81ab9467d1b3e5ba04424b1ca47d95cc0869dea02faf82b03";
+  sha512.doc = "16ab654dd8957bcf37351b7c766b787f27baddd4e73a6a4c3a07f5b1486f5ea73c9028675b5830b8dc1224eae29f50d61bb579aeecd9af4aaafaf78259bca900";
+  sha512.source = "5e94ffc102902ff040162f5d9fa39f1d812801d0413befa5db7cc2c23d91ce24d47317f411e64f2fb2e22fb782c9cf1f87780c2cf2eccc50214b502402032eb3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+marginnote = {
+  revision = 68204;
+  stripPrefix = 0;
+  sha512.run = "6643a77d01d59bc371d301e738b59957bd63cfa0fc98a554f853d1599392ceb5e88663651563445633df704bbc3ef74510ebd6150c44911314225259982f114b";
+  sha512.doc = "18882e317048606324338ff765cd11e972c3dedcdbfe2407a3f9643b3efe6a7d173561726d4221618ac510a447cec7b1aa13a46ca45a091ac76e601c55c551e7";
+  sha512.source = "edcdc3acba09440dd7d1594a1813fd205447c672e0bb73e3b968ac6e211365c488d3ce0287b7df5e198a75e12d3301248e39674be831387cdd06636e97d76138";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+markdown = {
+  revision = 66954;
+  stripPrefix = 0;
+  sha512.run = "b638546ded5356e9f271cfc28055f6ecc307e72178097dd54c0cd81bf3208058507d902bec0555185b9548cfcf7fddd7d5906d959644d9aa8945b20b8c816dd9";
+  sha512.doc = "7ed883ce22b404fae91e6e946b7786f64ee28e14b624f46b4aca9af1cbd3969d674f0c82cfdd1161c7df5a34d60ed8627c4428e13d317035079bdea0e7f7cf0c";
+  sha512.source = "986ce93ea94fe9afdce6555b90e88231261f2263cff2be734edee32b5c1ac005967e40ce323cc629d16616f9370f4958491f4fe7b0641ab024dabab0cfe4ed0b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.23.0-0-g0b22f91";
+};
+marvosym = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "64093dc5de012c6a50762ef34001ff2305e6b59b667ac7b1ef72cc53f8b0ed3852b4d307a8d421ece996e78f2e32c8871038b6b66659b0866dbdc536445dc7a3";
+  sha512.doc = "d6f72ee7ed64404acce5c37c216a7e23193f2053c18910d80fc6d5fde73ba86c07045102488f17f4cbeb9e1d148567973713bb4d9ce2cdd3cb166936ba5623e1";
+  sha512.source = "c28a69567c593160c7d04b4fc0fe7f0106db12ab588d3f02139e55ad99a1b4e33f1bba92f5af103b6f2a7e720d243b919d1f39f28031ad95dde3ae7e723f6e36";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "2.2a";
+};
+matapli = {
+  revision = 62632;
+  stripPrefix = 0;
+  sha512.run = "b8330a2fbbcb2b6c65a1f056fdf572cf14b6c3b8aff3abf91cd40a150a12feb37cb4a43b41e8239fbe00bb4a2168894c375f0bb35c7dbe2f1d8de0d5ae2ae476";
+  sha512.doc = "6c24ac9fc5b1968ee8c675c7aef8c8fcd3ce813e407886a412419a4a894942d6928d49cfebaf1d7ac7be7cc5c08847e8ba2c70390e3ea7973b0882a51d039ae1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+matc3 = {
+  revision = 29845;
+  stripPrefix = 0;
+  sha512.run = "19996040ec55b000d84637070a21fa9fc216eb3cf8ec75f7c408925e0d7a716a7dca0eff4887778f666be3e857b589cd033c53d3859f84226416ad069720f7be";
+  sha512.doc = "68f65e9171eb03fed79dc9bffadb725dc7324fd9696ff9f6f0a13233327f47474477180c6e17b5bbb9ee2ee02996ebd6213b43eeb7e9b7eb7dca2caac2db470d";
+  sha512.source = "efc84a936de1ab0905e94937d00c3ab2f371412975786c3816cb3b8fdf98482943c1f18a08422ea95d7a7bda6607ffd1dcb6b5c28101c7f5348260a088cf1233";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+matc3mem = {
+  revision = 35773;
+  stripPrefix = 0;
+  sha512.run = "e0736f75126aca9506e1cfcbd321645e731e2dec7f3ae2c045201dd8c729044689e358724b77ef9d99aaf3ff742802857d488e3f2f78e781b64af711c7fdce12";
+  sha512.doc = "2038d84ab20c6763163769b62a35fa4e95dbd3e76b0e2cf1c4a25694488ddb5b9be8b40f81a1702600d918618455bcae46d22fa101a1a95978b996714de41dfe";
+  sha512.source = "cd8ad4afa288ca175c06df2de15cb7ae048f3b69ff6b96225f134c022efaaa5223fdba1b2b80f75ad3ab6e3ac79d38b41794cdbfecce1ac6ffd2ed47cfb69649";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+match_parens = {
+  revision = 66681;
+  sha512.run = "ed3286292a5480d73db2d3e231663c37eac6a17a50d4bc37131bb5d5627d445560c1bd47a3ea05dd4d9439ad97c275a05542c5664ea0460e2c596eda75aa56ac";
+  sha512.doc = "8ff55ae4caaa0ec44f2c44c21d08e977467e6a1a1471f0d361c428a2fd552907a3bff6a88a4f7fa40f3fac7f5ee0a62b2471d5966430b533ef5dac554d919a99";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.44";
+};
+match_parens.binfiles = [
+  "match_parens"
+];
+math-into-latex-4 = {
+  revision = 44131;
+  stripPrefix = 0;
+  sha512.run = "d5739155ac3cd6a02f356bbb600f7f76022faa4a5c004a93531678ead3c2f0a9f8e1419044883306ce453ac96ab8726ee45d8e49c86b0fca6a9232010a8927e3";
+  sha512.doc = "5fee7c89fc9f273817b23fa25260733ee0552df7bed0333bbe604c17bdecfc28d7e386478f7b42d3c2aef89f80ce7a1d35215fdc386ea47e4db3a334bc6a9597";
+  license = [ "free" ];
+};
+mathabx = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "400bb43207c43192321cfe1b658c85a07410778e7694ab1604b992025d69300bb2d4c2cb7866a255dc4988c843dd3b92c33e527c12f087bb560cba4520115643";
+  sha512.doc = "e1f9f96794f6d20dd75bd7ceabd40993e56d5315848bbea8a6812a16f74c0fb92ddc6356c71aaa1367c47b1dc26a3711793ec88cf0b90d391f8157fe20f77196";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mathabx-type1 = {
+  revision = 21129;
+  stripPrefix = 0;
+  deps = [
+    "mathabx"
+  ];
+  sha512.run = "ae2272ac7d79a3bb1a655000a2d5fa1c3d948363763abe194cbac4084d5ef60492648977660c3d9dfbc2c70bea3c207d031d2147097fb1d7af503aa80f257d1c";
+  sha512.doc = "2504e85d659cba06fa25ae4e154309a6d3dcba2ac8bae0d4066b6637f19081987b0bc774902365e5b723f4b6c35cad07709e316ec1893a018baabc699d755e8b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mathalpha = {
+  revision = 61089;
+  stripPrefix = 0;
+  sha512.run = "9c56ad5cabba0fc7ff7403882cd46161be0b4d7bcaf632e48eab5170b1350a1c780a9f98ed535466ae7c17a387a461fa4663ffd3c4fac5cb01ecb77bccdcfec6";
+  sha512.doc = "5de9923e39ccf9b55f10f0b97067d001ead5598423174808d2a7636c96f8fbd2e8a8e6c0d66140f62d51b9263a736cb6106cf6db0e16e62ee5d9f3887baa3159";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.143";
+};
+mathastext = {
+  revision = 69237;
+  stripPrefix = 0;
+  sha512.run = "057e16f2b729c1e6fd6857da04ae30b2d2bb42bf185cfba01dfd2753303e6d2668e5c48362799ecff40318bf709c348818f0529f6f8971f9cf6f66cb1960f03f";
+  sha512.doc = "632a36650d095b8a9f49ecfac9fbfb896ee29f18e81adece341026291fa945e361ea2f4678bde9b31166f2d7b0d7224c8be856184871e85b31d5e7613f950785";
+  sha512.source = "7c9499486765d4b59320a67e057d3550e46d1434a730ba06d288b869468203e89b9b73b7c96b4904def75e6193fc4e0f79e814e9cd3acfd088c6da9b6dd4b856";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3zb";
+};
+mathcommand = {
+  revision = 59512;
+  stripPrefix = 0;
+  sha512.run = "4be34084705419757f92b8f31be35a606689c25786bc5b95a0531d572ce21601881cbd7548b7d380241089d4473fbfb70debeab9b30633671b3494d66bfbb9f6";
+  sha512.doc = "80191b36dd3e34193c2aff764b7ffcf274a4d9fc41b1d19fc92ac807e03809069efbcace953fdbddd481db7d6604a859eab44a2c93024ecd59968c9e24e2630f";
+  sha512.source = "99fb6c9f81e72c3b78807ff1d073ff4c6e193a163c3aa6aaa2e45d94ca246933733b1b35a671557cf40fdb33184af6ea28fa8a590b0339db373820ad9c38d514";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.04";
+};
+mathcomp = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7dca82aff58606afd315bc18c6908946193be75f04ec456e2cede8184867543437007b27f04f4363a026a0db83da3fdf963afecab7330e9419b1ac5376efcdd8";
+  sha512.doc = "6135b3d06908c5c359cc432a7406f146ea6b0bb614ba0b983738230ca2073f4348a6ff139bdc4b43325a8b67ef59a6db8e60ecefd88af5c8ff0eddceb0f279fe";
+  sha512.source = "3578e5e31ac3cfda23381e348dfa9e4da6993a9cefaa73b3746be0f2719d04dd37d04e75925414f4f0083b0971222da5eced4bd582e405031f29899faacecf57";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1f";
+};
+mathdesign = {
+  revision = 31639;
+  stripPrefix = 0;
+  sha512.run = "cc8a1c58348f8f81417178434c9bc3d9edea79dc5d300753f41870734f8fca8f43325d56f73e3113aee8e9f38be1fbc6abd3cefe4458af1e1e22900ce889c315";
+  sha512.doc = "f6c0a3595beb7b25ab5ef2c8a08b3e0be90cdbfa20c946b7b3f5cfd29f5c9a38963262818990ef78be02d95c2d2a5991581be77834048fab4eb0e4c0252e6871";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.31";
+};
+mathdots = {
+  revision = 34301;
+  stripPrefix = 0;
+  sha512.run = "1235583223f831852458d53e1e8cb767495987829d4930387f4dccf7ab060b9f0af8722d6c1aaa820c1a371f8ce1c0222633e6feb064e0344e639eedbaa4129d";
+  sha512.doc = "b1ce238b3abb3397b0085983e752dbb9eb9d9c1026046726360498d089304f7f4deecd656dceee27b63934092568f0ca46620231f03e0952c43f28ae73e97dc0";
+  sha512.source = "dd590187fadbf0eb788eade245d4198a4c1075433db1a0df00ce2d5cf2b6f332e09ce995292d21ad46f13ba68284808cfea6c7818a47bf99a61ae44e5381fe55";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9";
+};
+mathexam = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "30fc0cc9c44f2b7a64860a7d8eeecd25eec7e888f4ebdafade236edebecbd79f5d832566d151243430a60c5995807ea77d34e19cfd5e0d8cb037ca67d3e933bc";
+  sha512.doc = "6af2944d12d09f1ab593a7002b9de71d14c5436885b79e5e495dc0ba1fdf9dc6b9080bd009bafff988b019ec3e75da934a7c8c043870fdd52a9a46b36c9d646d";
+  sha512.source = "f2324e1f9e0fe8f259b6e1d2a1370ddfec87091c82650432e24b08c598fd6ce57334b88ab53a6049f416ff14c3ccfc7c250029767eccf05456d6c233e665f6a7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00";
+};
+mathfam256 = {
+  revision = 53519;
+  stripPrefix = 0;
+  sha512.run = "20912d6df0f287c14300e4598400cc2da676f7e484757e3a9a0c41ef6861d7180cf7110fbc7b5668ba8a713cb66b9120736b64a1f5098df25379ebc7b14e44f5";
+  sha512.doc = "26aa672bc55de7c45a857d1ae26e156fe19f4ffa05417a7a4163526d01d5f58576f8d6db951e377b646e1ff25167571587d09f21eadecb95bc96e6b85707a9bb";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "0.5";
+};
+mathfixs = {
+  revision = 49547;
+  stripPrefix = 0;
+  sha512.run = "513e5dd9eb58ca5b1eb8daec663c48577fa2102ade0234412dbb22b6d756ad37009c689746c57c6624c731df64fa8d58eabfecbd4cdc31c576eb0ecd1e232fdf";
+  sha512.doc = "c9ad8dda9ffaa77ba727f536016ba1dcbfb91c4d7ab98b1e4b72156591e8ff0359f623475324e57c6b22f509cdfe7e30ba67c3fb22f9dd152e59f1557c96a6a6";
+  sha512.source = "f08a26458ed871a11a44a1e957a1e9140b3e95c98ba1bd958cb9d63cbe483ee94e91217a5a7e54745b2cf245ee7f898fb64238941d1a8fce04699a3b8a06b7e3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+mathfont = {
+  revision = 68241;
+  stripPrefix = 0;
+  sha512.run = "9ebe3acb43ebd09a537b99eee5047d2abf28a019017ebb434684864104892093e4451ff3ecd0393c4f56d4f94efb16cdefaa58b073b517e7dd01adc04f5f9a69";
+  sha512.doc = "304bdf738ca94eb7c5ae708ecf0400cce1af9c09f05056b3718bc0ea5352e1d06a2a1cc3c037c8569bb26d33268e14ab660e627da0d9df075af1b36f6bf718bf";
+  sha512.source = "771062f0f60be1c0d3a300ce74ca9ca00a56b6042e3980da47590116c08f39c8b4f0bdb756e41654481615fa1896f53963abd0c322817c57cb78247505abde9b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3";
+};
+mathlig = {
+  revision = 54244;
+  stripPrefix = 0;
+  sha512.run = "1ec5761aded23b8ebd4b9afece00ab1f3f9a18886edd12ffd2a2e0b5b9fe9adc9a4ee6fb629933f36f6a161c76e85b54e3d9855871c3387cb0f70f90194b2615";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+mathpartir = {
+  revision = 39864;
+  stripPrefix = 0;
+  sha512.run = "8e1c99db2d64e9c815bf8b6784d1c717969a5ecc96281df2f815ba7c0d779b53484c61ca233468de793be94cf636373f4fc0e3413c0ce32d4715db30cafe5471";
+  sha512.doc = "fca6b3e2650ada022617af137dc86858c83c51c55fcadf2ff21832a1fcd9fc44f371f89e8943c5e1d117a09893c3587f15a3e8021b11f7472dd3c9d37383f8a0";
+  sha512.source = "f5c5b328745494965d1907f6dc187859a5f9bda5a8beda164e7317dc1b8a6e886073f9d2e9b564c6aa56d55e7cb7191afeea38edc059b2dd55066e68ff826dd8";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.3.2";
+};
+mathpazo = {
+  revision = 52663;
+  stripPrefix = 0;
+  deps = [
+    "fpl"
+    "palatino"
+  ];
+  sha512.run = "72bfba52e37abd933cb7b1b19dd813c3c76438591c94f9c407cabb8a44c8c67f78fae04442027287e5bf30b7239c3703ece4271194716882773eeb50d4cb2f47";
+  sha512.doc = "94e624f2cea50bf3534300d3332dd61e1bc5b4c834603356831d0f9bf4c6bdc34af5d31df002c10430d4945c2c71dbf7c156b7b05ba08c657cc2d960839c2a35";
+  sha512.source = "bd6aba477ca38c9778d7d23460420f485ac5658e9514ac2260475a50b6ee7e2ff736bac81a4548fb4aebae952a406a0de1bef01bd7d8fe4984080ab835d328d4";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.003";
+};
+mathpunctspace = {
+  revision = 46754;
+  stripPrefix = 0;
+  sha512.run = "81d1fa6ce0e96190516f2440517d554e259013869065a4242c55bcc06f2d9eab1f8102464da71fe72dd0d231248b637d54733b2a11b832d2153f151dc5513339";
+  sha512.doc = "ce318466af0c6690a905c92e9f24f9a7c2891c4afac7c51eead8ebf211bf13e2c20d368782ed41f20a2bb2d6f3a6cd6bf44eb6a0c848ff8006564ec98aeae2d7";
+  hasRunfiles = true;
+  license = [ "bsd2" ];
+  version = "1.1";
+};
+maths-symbols = {
+  revision = 37763;
+  stripPrefix = 0;
+  sha512.run = "f2028a2b8dad52aee2db1fcf679647192cb926e13cca831a419d876783e492dbc590e4745302addae7d3f01eabf7eaa1fd7cc6f757eff2ab9d9b5c39a1b0b785";
+  sha512.doc = "b60a66b3cc67e4dde62b0fc0552233ab59b1981ab92cedbe4c0de31a4c9e9d3207cf54ec5d2361f81937867d81bd345e77c4ab3e36fcd8588851765ec3267864";
+  license = [ "lppl12" ];
+  version = "3.4";
+};
+mathsemantics = {
+  revision = 63241;
+  stripPrefix = 0;
+  sha512.run = "e8cd9b91b758317d310265c41f565481a9a18c9a345ea3c8b3f771de637f0a144d131cda93b7771ee7b28563fe1e6d42a410cbc7c9fe08532a5821ca84d5a101";
+  sha512.doc = "3f0b2120c9551e498d71ace121985553d1d40f2b242887fe0e6e31a9e25dd62d32fd44d3bd1b50233cbebbbe70201162dca838ede7409512a91d5e522149b479";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0.0";
+};
+mathspec = {
+  revision = 42773;
+  stripPrefix = 0;
+  sha512.run = "7e9838ad2f212354b103b9beb61d60f124d2f47e52a04e2fad61de01e2e8220ca5f19f5b2188cbfefb379f94dc4b76573355dbde563f887beec29c57b3648ae9";
+  sha512.doc = "d22c19bd2114bc48f438d820177006170d52d1a261f3cfe69452148f4e11a0ddeb1bb25e1c1fa22ef8d2284c7f34f7ef41bcf9d8e90a89705b3a7515a679a922";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2b";
+};
+mathspic = {
+  revision = 31957;
+  sha512.run = "e556960f07a003e877ce678110e724ef94d34aabc0ae52c59ec2ae487fc7d3e5de169844baaefd61e467e98a7a9718d94d881c3f0d43855e133040bdbddb6a62";
+  sha512.doc = "1702071f4c26097e241ba161258a51461405954105c8a7f2d92a552d6397ef69af029652ba5528df999c569fae32955d1b194b0f7c4475b3fc870656b473386a";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.13";
+};
+mathspic.binfiles = [
+  "mathspic"
+];
+mathtools = {
+  revision = 63767;
+  stripPrefix = 0;
+  sha512.run = "767b804aeec1ee62667529a523a22e38a4a20dbb7a3a4f74476d25f5cceed38b001b21fc2e8eeec6313e25ee3066ee05b47e1fad3ecce228d6ee13e2d78f6dd4";
+  sha512.doc = "2c974611ef592de5528f019e8854bf81bec20d489d25cae3c3a90aa1c8f6e63a01c5823363d7803b7cd229cd6300f5c551e5989edff870369711a4070d2c7477";
+  sha512.source = "7b8dc2c58a2d65fe5716381a5bc1020b1de11bfc043207053198323e315fb4f4c42057f53c42340fada0d7299037cb79ebe98f30406e493dfb1eb06399daabc3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.29";
+};
+matlab-prettifier = {
+  revision = 34323;
+  stripPrefix = 0;
+  sha512.run = "840d860303925d148c10a980218018ed14e2d0ba2b1638f8328308a0400e8862ced7cd28822fd81c3c3533d2ef4cd37e1c4009065b1300011898fefb407ac202";
+  sha512.doc = "22b783fbe09f661d1e5034cb623fab29e54df35b4f0379579f430b17a80236a843c15201b6583bf58f22ae39dba34d7f5a4f8482b1c6d185822940c67ac06942";
+  sha512.source = "25daf7d57d376a2a218a48c275b07459b512bb0e6ab95e78969883a3ca26f010c2e3204c0fe9af0922a50b48aa0f87c6b47973cc7adf9678d351faf9e263a9d3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+matrix-skeleton = {
+  revision = 65013;
+  stripPrefix = 0;
+  sha512.run = "55a7bc16ea6afd1e9e623b2fe9e8eea8e7db2a98be58432a296500a246dba7556bb5f79c062b72c0ae957822760ee2494cc3bb2ceba7ab54860f96e87dea53ec";
+  sha512.doc = "acf72a0c4e065137df6a803891fc804579e799d5aa3ec2d509f26284e64bb86e52c4c4f287dd87e5d0c1f3f73ef9a13e2af2459223f3441dda2b74588f7f6ec2";
+  hasRunfiles = true;
+  license = [ "isc" ];
+  version = "1.1";
+};
+mattens = {
+  revision = 62326;
+  stripPrefix = 0;
+  sha512.run = "3b58af4da3a0c8abb4499a28e993dc3bf128fc24188bc906d3bed69ba3040aca66d341122cb0e57adb18ccb4320736d7b27423ec8f6f6dacce4fb7bf4bfc5d08";
+  sha512.doc = "6139624ff7f8b5063e69c07738e07ae8a1bd1dd48c155b73d17466d4ee5aae25d377e7b7c0726e84e89010d99731d337187ea017f934889843360533c7218c77";
+  sha512.source = "d8b01f5c5d7c730e412eb1fc9beb7ffdc60b4b6021968803f24362cf558660074e3d94050878f09513221b6d670ab195b1c2020109e03c9c53c9d485355fe740";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3b";
+};
+maybemath = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "32520ff01d76e11bd70694a07b86272425680ca8bf21b6da9412c133836f9ecbc9a9537377ee67cf9292e33dedaa1d33e906b4f681b89f075d1fcbbbbdc989dd";
+  sha512.doc = "b0f978f89ebb7f681e7b045d03a9a6e7e9083d7c468c91d52ef417c85d707243fa0ef253b3e2d1f1737a9c7235fefae06c4a8fe2975cf2c13f7f09ada7752f26";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+maze = {
+  revision = 65508;
+  stripPrefix = 0;
+  sha512.run = "e09c0b0d00301dc1d90f66e774f6fe0ffb1c4305498f9aa4b41bbf0460940a2570e40bd8359e30d1d521418111ee9c6e6c8e61a6a2efbdaa484d3f8436f44fd4";
+  sha512.doc = "cfa47a5d16d4533fdcfdf4ad19c5560fc897da669c4b9bc5a5f7723a6082fcf1b29fbe410117bab9249a526d7c720cab400afec1945b24868f7b73e46690a2ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+mcaption = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c3e1c2948e2687bf720dc05dfa1ed6140a1ea55de3cad7ebcfe518d720ed96793b6bde32fb0882cae773f986b11150482fdfb382391650a8c513131b7041555a";
+  sha512.doc = "e803f5731e6ac1c299bc3a42666acb81a75a3f110be729639357a15633e0e7b8ad0a244820b96ae9f8b435d9d1fea54a0b7f14c5db02799b3a632b2f0c5cb4b9";
+  sha512.source = "e859c83efb88fa03790b2ddbe18cea57ee489dd59679559f8d7f3b93a0804d93478412414e131f39bece090ed5b3433e2784facbff9b3ad705a81d1adc542e77";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+mceinleger = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0792d7a5289965b2379001a54177e1aed4a3356d8611e52ef77f5097bed1918dac324bdf5c618ca76d2925d11539b623cd9d4016ff0f4d1f9283137816ec145d";
+  sha512.doc = "2dab78fd096927e3958d7270ddf15de9350ec30d1d000e7cf92be3b249ccf70e6faa1dce482a07995e65b4a4549693ce3b34d1a63bcc403ebe81f3d1887ecf90";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+mcexam = {
+  revision = 60481;
+  stripPrefix = 0;
+  sha512.run = "3c75869bd0e65798fa451d971ff441f3a42daa0647c31458631c388cd14cbb36fe4f4dc9178e59fdb307de590d201e8716b1a86dc9b995aa184090cbdc95c9d2";
+  sha512.doc = "30a7f5cf9b01e8619c95d63ebc2e3dce27beece3a4da6ed4d68843c171257f37d7883969edc94766e065c5bbdd78a2731d38666d2073fd5d77873d5a88b3f820";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+mcf2graph = {
+  revision = 69281;
+  stripPrefix = 0;
+  sha512.run = "b399097f1b7805603d156a450530ad33cca0d8ce28c2a977db584b2a0b2722bab87d6122a7ce27fc7066e24f4c24a5e832d66e1e90abfc88dfc388b6b4ad8f38";
+  sha512.doc = "8169812299146fa937a323bb573201c04ff6a42e1b090bb87fe24d213fbf8b1f21f0ecf40ecae157b26e15f56c00fddad9e09c9ec2e7fd901f92341214615488";
+  license = [ "mit" ];
+  version = "5.10";
+};
+mcite = {
+  revision = 18173;
+  stripPrefix = 0;
+  sha512.run = "71276681ec29d3d77450a8c343d64a1ea734bb48de0d693a4e9ca795e4a4c9a3d5f4103b5641c8684d49b5c95f56bfd08bd12e1d7e37d06f9170008b51804897";
+  sha512.doc = "8c5ae4b1beb334ecba3294108345bd616746ee651f03d39a7bd5f5cac97f671a861fb046e29ae7565863aecf4b043ebe25bf9a4180889c39e48735251e430004";
+  sha512.source = "9f6e6edf49906bf3300123f8fe265ac8f8580c6838d59f7147e9337e67bff71325ee41a3993b3d1cdc9c036b5d519834261fb0a2a9cfe4d3afdbe070b454af8f";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.6";
+};
+mciteplus = {
+  revision = 31648;
+  stripPrefix = 0;
+  sha512.run = "5be1980964ea8342321964f0db1c750c33fee9f21724608a260ebed22500d1fcfb0fcb7e588a0dd030a6c534b0da904b8bfc3eb0da7b2df34c0b3f2b1b8fb637";
+  sha512.doc = "5e720fc2b32ca00d71ade77fd0a47c6ef44d9b7692a8160ddc55a5f60495a40272a7a0c6c2f5bed923ea10703654f155701d4571d72805c1ef900780a209a0a4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+mcmthesis = {
+  revision = 57333;
+  stripPrefix = 0;
+  sha512.run = "128de0bf3c8f5ddd7ad5b456d92ee434573bee9e7df028799991068802c0997330ad6a3c8b0d295db7d9eac9e7540d5159cf5ef037ccb1e54cf95dc31c8cceec";
+  sha512.doc = "d93bc6ec219a32ec688933f598042a04f0f7642dc875291ba2437085349e4e697107d2a4bed2c22b2abd3f00009d92fcc01930060ba38aef3444fdbbfed811d1";
+  sha512.source = "dc9cb93c8975fa3e7d50e9067dc39c29875f6086a4dbfe657ca77e38feca4af419eac429ed97df41d442ee016f7f6205cbd1aaefd2a2e734af7ca2ea4c79344d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.3.1";
+};
+mdframed = {
+  revision = 31075;
+  stripPrefix = 0;
+  sha512.run = "0cff0945adc04102e0b0a154cac1f78e9ea903b29e3f880156b888abeb4ca23565d39a7b66d8097c35534baebdf6af152c5b3830d08e1287e8e8d18e8f6344d0";
+  sha512.doc = "06822404872899d6f509fa94f69cdcb81dd69866fbc5a82fd54ca361aaf27133140290cec2d08800dbb39c896ebb7cc19dc4cce38d2a0e45de9c658bbadf3352";
+  sha512.source = "04fa6379f9840676b4fbc31029f091d9112524f8450747ce31687c9ba77a02e41c25ff51676424e97b788c48bf0bbab690459b6b84e128514cda8efd459255d4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9b";
+};
+mdputu = {
+  revision = 20298;
+  stripPrefix = 0;
+  sha512.run = "2720c63845939d2befea3af157eae95d2550a216cd22634ab0a923a06d50b48e7133e914d210c5d3aaae6fd620312d23d2e55a015c2a24ee1881bc7ed4868778";
+  sha512.doc = "8c8097552ffa1f11944203e818742bec244abc5a7708207cbb69c46ffc64acaac28ca390c1ee256cd1cf2af093e39189cc9bcf655e948062cd217b58acee7628";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.2";
+};
+mdsymbol = {
+  revision = 28399;
+  stripPrefix = 0;
+  sha512.run = "49b52141928fedfdf5fdd63251de182761825a6cdcbf423bff562a863df159ac0d1c001239f777e7aef68ddce23c52407758c70f7da42f066775e204ac8c841d";
+  sha512.doc = "ea4ddd0fd65204ec0ed980108d86e97be267ba46c1cf45711c36721bfab9302766ec1d0849b38de75003af564a797f8566def377d8d947d464367bfa40b91399";
+  sha512.source = "0b649eba13871f6da834bbfb2c6523db6d50bd6a491b042a19f0e061ce9794d2ca03c39d277669b6698b48806fd0b705f322a69743c4fc50233559fd10406280";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "0.5";
+};
+mdwtools = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "bd78773e42fe20cce637a8fbc7c0e3f4f37ed50810190ffcc035a20c83508b6b7de7f7432b7bba8fbd039ba62f43a5b5e1f4839acb3fe62b425b650f23ff71bd";
+  sha512.doc = "06c8619d8bcce2c5cf9f5fce65318521bbb0c2ce53acd6b1793d0fe19a8f7a32c36ff68f355b6809491cec365d09f5f14b0589ddcbea6c5b48900d11fda4867f";
+  sha512.source = "b3e6ba09116dd83187a55f205527c318d9afb4742404bc21b12e0be3b754140ecba82642154d92947cbc0706f0f9d3e6d876bc27108f13373d3c9d6ede4d7f5c";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.05.4";
+};
+mecaso = {
+  revision = 60346;
+  stripPrefix = 0;
+  sha512.run = "b240bfbeda5a18fd24625444403f508e3dffc5b3631a8ff6e88db6aebcc97da3eaa2ebb3ebb0d15b0c1bca0d7f62a72511a00c0ca1870f6d0d3e90398bbc5754";
+  sha512.doc = "42744543f456f1c77a30be81b4dc47f69b220d2d0abd8cf7f05ec7136bda9f55f98e63a48cb9b2fb65d6fdb3270bce7a31cbcbece15527d4141bac301dd55963";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.0";
+};
+media4svg = {
+  revision = 64686;
+  stripPrefix = 0;
+  sha512.run = "b5f9ffdd5fa9c28b2d4fa71bf7e6b207ca1632d98ee7a9018f2eb84cc602edcb6434917c2cacd2bd51b7f34c893c099e94e9518905700218f03da224a3df2fbc";
+  sha512.doc = "50fc60d4bd74cf3c009501d37f02c9cbc98b11a5b498a55edce56801fe3e6b4e247c038525c9c76df108df0d991d797935ba131cf8b74dc27439f75b4a3890f4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.13";
+};
+media9 = {
+  revision = 64047;
+  stripPrefix = 0;
+  sha512.run = "3eab7f0687395941f6805db51fff943b6bc795a8a5cf2fb2ed9f03f0103b4fef0bfebdf449701a051b72d8f18a8e332ec02f1893812e4be6d31a56980d50a1e4";
+  sha512.doc = "e3f97ec8b1fbb345e42f641eb37f6210d4ebc2e791f6ca21af6c7ac7c7f86c149fa874cafe6a2eb1d47508e2a72aded6ea40b381393ae79e9baab5ecded73c6c";
+  sha512.source = "907343fbe326e491f543f104ea9335d6c69848b3d4a69469587bc5d417e3a58e2d18567a0377c71a28e8e7ee6d94959ee8a7e632819773692d34b6cc47a3cb09";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.25";
+};
+medstarbeamer = {
+  revision = 38828;
+  stripPrefix = 0;
+  sha512.run = "731eb6f78875aa38a90a228626d7cb5b7129c60085418d7ddadff056c9b82f8db95ee17f20ec8cd4611aa90bec391868f6b0b16fa0eae518358a869b576c150b";
+  sha512.doc = "1605cf9ac4eba56059b6e90e6a6e7f3cba9a924df1cf3dcfed300e218bbb71d79bd69b47a5e376da209490a8869061d6de8415e1670b4ac5b0fa977f74d7c035";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+meetingmins = {
+  revision = 31878;
+  stripPrefix = 0;
+  sha512.run = "315897eff4ae50257057f8191ff92535b669fb174a2eca5c368a9a4b9f75cd71ad745f3feff1c6863705b3e9e4a954afa449cf56f86bf60c389250842aef5215";
+  sha512.doc = "6afbfe02ee39e26e2f38ce462affa66e7e0acf5f26534ff9ace0b26b4e63514a3b1702e34bf478988a50c55fbb09b7d9421a8e79da6a6c46de88c6a958afa874";
+  sha512.source = "3f4a274000889e9160943ca0b7a7af30bdbf7aa9a33c8cccd0e938ad3ab94ad8f24a6685bc99596a1046a22d32855061a7c511046dd6c306353c4f5979e1f230";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+membranecomputing = {
+  revision = 64627;
+  stripPrefix = 0;
+  sha512.run = "831c579f8d66e265125e3a730338d01fe98d87241f2b52c7060ba3f852667a30afe256f37327497ea21e77cbbbee0017f23bd1f51c59f6445b4552e7cfb52ba5";
+  sha512.doc = "5b6479efc72f8e06e54d17c5a3ca4e63f0fe942bec8f0a1504365a97b59ea260891f959939165879aab0d23887b98b2ebce8fab4789959d1c2de3b37c3162aa0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.1";
+};
+memdesign = {
+  revision = 48664;
+  stripPrefix = 0;
+  sha512.run = "42949db3193952d1ae75855110ed40a1ff467b3cef0bb6d43195bac960a0873a47fad002695ad1376da2d4a1df5e1e05f89289102780d27b173da2e852b53cdc";
+  sha512.doc = "f4dfa00676379ce33857cc0fdeae867d1ae5c99e6767884a029285a94d2197926a68cd85c574bd876a2eeb85f0453520ef5efcb7f2a71a77c725f8066e7adf8d";
+  license = [ "lppl13c" ];
+};
+memexsupp = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "74931ebb1a146edadcde19d8c404ff8df750c4eb8f2f59fa83e6da9f8dc6567005d51f58e4b7bd2cdfa6b960adb072e9fee7b1842142076df88887c3c2b41051";
+  sha512.doc = "645bb189fca1c74e249745ad42c470dcd5d9fa4412a6dfefbcb6377555047bdbcf005f1c07977762e0026e8a4f8ea49e6965a7d50b0d5d5e7efd0228ac2141a0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+memoir = {
+  revision = 68004;
+  stripPrefix = 0;
+  sha512.run = "b55265c3beb272c274514931d18107d5ff50691cf442df5e21ce229c8ba88f44a5a3e56cf85ff9d89d2df705878367a31739ab0da3a9bf486b9e5a54e6cfab15";
+  sha512.doc = "4660576ef6f6ba7cda1b3d7591fd6ea768d94861b15965107e80b9231070e6581b0428a4bf11956ec07d3ccd55a3cdd6ddd5630a72e082aec4fc896576833a48";
+  sha512.source = "d817a6ec1253a686d1dc77c529565fac3ed1134932290ced8615d82f8505f29bc11ea352781268c4a729fd4aff2f744708890cf264f68c8828a2f2c6e034fe78";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.8.1";
+};
+memoirchapterstyles = {
+  revision = 59766;
+  stripPrefix = 0;
+  sha512.run = "0a109f84bc4d908b1d32bfe3ea0591c81f3de757cc5a5cc1aff3e60b1d2fbfec2e8b760fc0d07faf1fec62348933149a03c8c6147fbc5ffddae30b74a131a100";
+  sha512.doc = "2f8a20d21dc1db21017435cd58c4ae3ff744b5f5605aafcfef6dfbedb1461a8fbee456ffb8ac1399416f7ae6b8ebec5d59b5d50886182ba5116e22e3768fd530";
+  license = [ "lppl13c" ];
+  version = "1.7e";
+};
+memoize = {
+  revision = 69285;
+  sha512.run = "1464aad053b69b821e1c99c72a6e448a231a554c1f04d31550fe29401698705fca9c97149435655269d3128885601d4917c7954be2990905360cde1de73db477";
+  sha512.doc = "d210344a90649cdd67b118aca5096db266fede551b7170de088eec4a40b765b9a66b890824092329f76969ebab71dfe6faa3a55ba46bd8b5af9d092cf4fb4aa1";
+  hasManpages = true;
+  sha512.source = "68ac9d4a8af74c5d4922da8d8f2c89518bf855d8d578d0df1d9fd798f242c0a339a0e76d10b913a178c0c4195ffbd2e1aab7d3927ba4ea6133fb5e45ce4f9eef";
+  hasRunfiles = true;
+  scriptExts = [
+    "py"
+  ];
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+memoize.binfiles = [
+  "memoize-clean.pl"
+  "memoize-clean.py"
+  "memoize-extract.pl"
+  "memoize-extract.py"
+];
+memory = {
+  revision = 30452;
+  stripPrefix = 0;
+  sha512.run = "9b760613dc36895edf50a592aa5ef994a30117cc9da6ea256835cd3ad9ed62ab8d8c39de95bda5058d1bd3f06451d1c79d78d52ff6d068c28d75410c5ad98516";
+  sha512.doc = "479428f1af468d909fa291388cde319aff1ac9ef6d7c0168577c5f6978c0fa7e6b23f8f81dedaf746b7e394c92d51d5799bd17aa3488207be494621b77220cd3";
+  sha512.source = "731d4e4c874a58c2c1ddf6a394dd9eb67e557608b0d2a736cb500e4e299be2a726d4312d2eb4a05008684cf5fe14d458a7c020bd31fe134f8208d9fb618b312b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+memorygraphs = {
+  revision = 49631;
+  stripPrefix = 0;
+  sha512.run = "e35c7e727cf5d6e496c9c0e52252b5169670006b9bc9e96b1c95584085d57a3f25cb9464bb55fc4138640ebb6fdb079908cc49c0f1bfff130a509b6866d3eec1";
+  sha512.doc = "1c04e25d1c16348e594191c17f9f104e9388bb608b10783927ab3412f2f316138d6b41242046f12853b37560873bb61e0a0ec3f884cf8fc26ae2ba5809b094c0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+mendex-doc = {
+  revision = 62914;
+  stripPrefix = 0;
+  sha512.run = "76f59e31e7d2a4240ab7b258745a7c94b8d78f8e308ad2bcf0ab85fc2d4b0ad77f7e1268014960cd29913bc3a81fdf2d6bbf6a8ab0b0845f2587c3134efb20c0";
+  sha512.doc = "1a56d1ceab9536869e6d7da57146bc126f45893bfa998ab42eaddca7c48a9ee9d5b69abb31cf02cb6590d7acab68029f5eacb8547de6e877ed893c5f51acd923";
+  sha512.source = "e22c3a7573e8f57d8324d7ca74b3c6b4c716dfa0ea6f43ba3e6eaa63aecf0fe0591ccf9cc4b18984ed2730fc5b9e0b84287bca677717f81c583e0c3c3e0c564c";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+mensa-tex = {
+  revision = 45997;
+  stripPrefix = 0;
+  sha512.run = "c453044a7f744cf89605996d0b913c56208f10c46e26e0ba37a85bb1d63ed08426a18d87cc7841aabcf44231c71dc33a5c858de482c6d48759893066168d5fc8";
+  sha512.doc = "8297e3f69517f3bace8f509dfb42616e223073f5d428c2269d9dbeeb53579f105fb65755b22ab552e5635f1267e437c4aaeda284a8325b2d95717cf7adc2de01";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mentis = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ee03fae28adbf147945a88548e8223bfe8c8ce220a61726bc6738f34cc90ec776aa468a1cf7fc862d1f7f091cf87964cf665839922819130f3575d56301a5d26";
+  sha512.doc = "2e869d1368b807a70f3de5550d2c79f229dbeb8d888a927005fcc43c70644da0ccd36eb2464fa6437c9947c78d59e77c4013824b1e8d5a4bb517b80f1cfb5a8e";
+  sha512.source = "10858cb9cb2db0f7db31d371e42436ca001ef20fede5f6b34dca61fa48248383e32547576a2dd3a4a98acddfcaf9e1d3fec89183c48ae76d5b3b677fabda7549";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+menu = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2b2560a1df5091d19ff37bcbac1465fbfc54a848e4d19782602d656bf42abe47bd2bb1946f87a127c70725cf508ff9712337f3a8719d1fc0bcd4dab4473c7bc4";
+  sha512.doc = "ce8ddeed4e1bd859865f548d8ffc6978a620d9003f908d360e656085f6010a0f179218cc8b2bda4f754685369b53ad59245fef8d8f8a766b241f092162bb76b5";
+  sha512.source = "6c96cb64584802af2248bf43ccb7cc5215d8a2d2c13f1d6cf8567934938979095bbd51760bad7892a6d894a9651304dc9f5e4ed038f68ba0af087567de0777ad";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.994";
+};
+menucard = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "2cdbe2b8acdc12e4fc0b7d8a93afacd30ea2a8bef6a3f1766d219227e77cf06d26f1fe24206f15dbfd6d0a7507780955060df1056f14cc546e9a3c781c36f307";
+  sha512.doc = "0133f249cdaed1bd565047974868953dce96c4b9ce143cb8c1170194d0ef1b1e6d2e4088004edd831ae0ee1f5e736a1a297bfce75c1bd4b600b3b14a270e746c";
+  sha512.source = "d493d78656919b30822bf5e95024b3a85c8912936d2c7835af1ecf50eeb04c81e6262da230241c9bd78f0ca5073a1a4cfca4bcb43ef528b8623f0fc21671d38f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+menukeys = {
+  revision = 64314;
+  stripPrefix = 0;
+  sha512.run = "624bc3f2c0cbcf4cceacd555619b5e3932c7c8623e44f4b313390af47143908d019fa7e83d28f8ce94a5e44df40aa73d6823edc931bf8b289d20fc2bf42616b6";
+  sha512.doc = "5edf9b9e2accb846aa352046e37af630d997480a3483c53796e56066c1df00798b7615d13bf69d822ed9caa300f6abf624174cf7136caff8fd14c5d23ce2b68c";
+  sha512.source = "724478484b110022c6bb591d92829042299226595fe9974a41efe9c6fa9b67c4a1c617690a2518e6bacd1f903bb020c1f815f4c3186ba2ceb185f624a869fabe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6.2";
+};
+mercatormap = {
+  revision = 56060;
+  stripPrefix = 0;
+  sha512.run = "552c0fcb0eb72d55c51a2e9e4d055cefa27859d8e1a4410934fbbe6c139b4ddbad7e2444974acf4035fb29cc4bc8c3f76d33ef6c6e73e91e57e4225c102afd9f";
+  sha512.doc = "446be6f13150ba3490890b528fe04c8a8080213aa6a5b66fe61e3e58ea4fc0bd03581aa96b0ec355c5ec725187b7b681507f961a9b29350cf07bc19bd2c0fdf1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+merriweather = {
+  revision = 64452;
+  stripPrefix = 0;
+  sha512.run = "363cf63b7211464fba6fd7686dc7d1ab6914c64d724128eeaec90b3dac39002c0653a2c54ff6932c8ce1f16577cf27b1e4665a3e1dbe92bbb81e0a15419ae36d";
+  sha512.doc = "8762dfd5b3f3443177e0900c434c74d4b8ccca6c8817b1d8353c41ee8310b2299e2fa67113881bb47dd6def3295663aeeefafb15d7b808def000b6e253ac2d3f";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+messagepassing = {
+  revision = 69123;
+  stripPrefix = 0;
+  sha512.run = "8a2243bb9b788a4dbb1caf14368fdd4df3919d9d407b65f2d4f49af16a341a030bd9114f86078623760dc3ee5db060060c58c6f675f4e8bdbc3c1c7c9b7a1d3e";
+  sha512.doc = "c26c14eccc615a306b8ebe1a5c80a09249d5ba8668a34e2f7141b034df70634a277ad94078f2f50e51e53c514340571f9cb766232c3e2dc0ef5dc28336ec4e4d";
+  sha512.source = "6ed92b15d4f17613ba540069b4d5f4bae5b7ce2850594377ecebeed76b92c61f672da8f95628d46db87dc9b44ef7dc9c8561736bcc9500d1951f523dd43d7378";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+metafont = {
+  revision = 66186;
+  deps = [
+    "kpathsea"
+    "modes"
+  ];
+  formats = [
+    {
+      name = "mf";
+      engine = "mf-nowin";
+      options = "-translate-file=cp227.tcx mf.ini";
+      fmttriggers = [ "modes" ];
+    }
+  ];
+  sha512.run = "2ba715c32631b3ce24aba65e7e1df90a7beabc52b855f5e81cd383f94399e439a344f8a8a21f38648d34d546ca8f1890a74922836557cae5cd05ac945013d71e";
+  sha512.doc = "48b1def32bfba5ab1123712fe41d69f979e33a77456801c21f030de8a39b37fcae179db44a517d7b194d7e6e6eb93d770e179ca49db9014cd433c86ef91b07d0";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "knuth" ];
+  version = "2.71828182";
+};
+metafont-beginners = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "39352d8b181f3010fd4dbfbfad18a8cd3f68f0c38bdb89996ea4c77a649acbbd15e9a7fa318193db08733b3722a07a8ebfb17a6430bcc9af8101dc444608d75b";
+  sha512.doc = "4fb7148b0668845447fd38411df0288972312a56897b1d5bce69a7e57ae632aacd12c273a911045204705a5534ac1d1c290af08a7057bd62184a59eb7146feb6";
+  license = [ "publicDomain" ];
+};
+metafont.binfiles = [
+  "inimf"
+  "mf"
+  "mf-nowin"
+];
+metago = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e7b3661d99ea50f7b20fe3af370e59e960fc0599409b5c11bfc9618c12c38e44b89e4e81d69ae7ba5e2565e46078ee52ed0bef46aa619408b386bb73926caeb7";
+  sha512.doc = "8396725c0afc87c63d16256d5ab0d575a19f05d78ed245099a60785f0810a012e8c0026cf13d03781d09d7c0007bb9ed9b87072ed732ba706c893e5465461052";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9";
+};
+metalogo = {
+  revision = 18611;
+  stripPrefix = 0;
+  sha512.run = "20d5a9b8454166535aa3aa80da7d2931937fc6a4d730c1ab70c856311c223d466e9fce2ed6e3b2fbf4b4fc75778d7d4c2649111df5f92dd58b6fc42b3ec72696";
+  sha512.doc = "48318b396e4e227dc1b80e21474a296ba4dfd37e81b95f9669dd8c96ca7318abd8a1e21ceb95e0ca7832ed64a85ede985fae7e2e52b3aa742c64b86e54fc563c";
+  sha512.source = "bf240b77ef00d5351218674baf851b0eabcb22257fd6ce9dbd6b66afec5323a730df7b27d522f5130830ecf92af377edb3ec7906be206e760971dbe8f6266942";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.12";
+};
+metalogox = {
+  revision = 69401;
+  stripPrefix = 0;
+  sha512.run = "4b91892cccf068c85d774b9d545c07c004a7c6badf89114b5d8cc5818090fb7fa87b3dfd6a7d1162c22939f633bdfb318a670092f70540910d257ccfb6a39a09";
+  sha512.doc = "6da27bf652e239ac7d307a0e5bfd01183ddacdfad38fe1b97d4cf6c084daf9bc43f54cda651b92a5c6693c16f9f6c2a61f821f64c5d1362f8db3f6a808ae722d";
+  sha512.source = "1887d1004349bd5b586f7d02bba1e2668e6d0534317e59c12915af847d478dd5022f5dc91f952032582feea48c0e01034dbf34c949ea08c699056e0c5d500fc0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+metanorma = {
+  revision = 55010;
+  stripPrefix = 0;
+  sha512.run = "e9ca6b583cfc64ee78abdfca2520083dc231afd7bcc0b1b8373273c23da3f3bb961bad04d752cca38113d3a4d8e1ce54b401b96ea29e00e78be97d73bc528b4f";
+  sha512.doc = "3750e580e3d7d0d69515e0de7a88a161cd8e7092af41be10fb4092cb519ecfebfef900e691d0c92ceb95df236cf040b2a314d54bfd8a6f7a09cb3c9585f15a32";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.5.0";
+};
+metaobj = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "cf587c174e44da9496ece876bfcb8330bc52173cc3bd6d1b1351efc75a7c333ed8c7cbd41c079d492947a1ee43d8043fabebc80b4c7a5d348eb054e82c704e3b";
+  sha512.doc = "0bfe1fa6a4b3a8923cfbe9bdc4fa1b27567df66365db447346fdcc739675d1d815515e09fbe96f44369643c38e6a8007a0f8d089ed8504020fe0a0e2a795ea9a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.93";
+};
+metaplot = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "eb083316720a5d7379c0ef7c1afa0e82ea5df63a3a98200b7041637a6fa47aa33dc20a265e05bdbc63abfc375e6b59fa199d4091875c057a044821c557963dab";
+  sha512.doc = "1732b5a572a3d4c0a646308d3c102be29de845030a624763dd6075a44a739a29e65fd9f224229eed6dbe8dfc6b590a3df1cc07c184881dcd2f3dc5b0642a48dd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.91";
+};
+metapost = {
+  revision = 66815;
+  deps = [
+    "kpathsea"
+  ];
+  sha512.run = "fb50b9d45a36cbe11d07fe2d0a1307bf257132e195825a2007894d5accb33ae1d10e0ca6d6a27405e79d3c439fca4dc1df00f21814eb530ac3707ca516bb9a0a";
+  sha512.doc = "6b10e2a6183e6c7b9515ebfa0186b13d48bd87fb25cb69b010ac82b885fbb1f88f31340f7161e34f61cfa7478d50ebad6e82eddb14d8c746ef1bd4c480fe4b58";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+};
+metapost-colorbrewer = {
+  revision = 48753;
+  stripPrefix = 0;
+  sha512.run = "e59dd121f9a176e628697e31b720507723867a0b7b68b73531aa825bb02b07d04ff705bdfbeb369fe3a2d304f4c6c5aad3f823aaa4c82257540f1459cf099cb1";
+  sha512.doc = "59f17d78ef78a142bde5783996f149b3a7c740c2b3ec6f90133115ebddcf6c460dada543482f5379872054a74eb772bab8afd96fa48b2484f7932a478b8bde2d";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+};
+metapost-examples = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "95942b1b110e65274839ba01c16fed3e63a0ac99aa564d7a000bc9d9a0f5625ddc1dca13e786d0721bf93e76410722d4d76c86a05297bc39cd9af6dc91c2e6f8";
+  sha512.doc = "2a3aec80b511864878e07ff973e17ed4fe1aec692c7e6983b57dde586aa19500cdd373687b0e081dc80c8584f116f0fa3de7ed4f09ba232eee8adce5e998c954";
+  license = [ "free" ];
+};
+metapost.binfiles = [
+  "dvitomp"
+  "mfplain"
+  "mpost"
+  "r-mpost"
+];
+metastr = {
+  revision = 56246;
+  stripPrefix = 0;
+  sha512.run = "fb3a0484636e17b763c1229eee4736a13820a852d977b11d9e8672e08a8ab2f9438bba0ed53286dfc5b1422adef1cfc1c393d1eeda5d3172848c051d6aacd211";
+  sha512.doc = "367ccc05eb31c50519e7324093759d6452081075d7e9435cb9e37e9787fd35666c1c18c822bfbff2b6dba0b312cee727ce8b7fa94ed627eb439c3c00e5b3d4e6";
+  sha512.source = "904c3cdfcade4637a16366bf511094f4a33cd2614ee3f47bcf4cae7c2ffc0d0758633a8ff556ef9494eddf76969b235ae599e1df28bf9cc7537ddddfe33db157";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.2";
+};
+metatex = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8d438cf0f3bd375c169681b242b7f00dca96cd3bcfb167c6aa664e27dba59eefb53a6d28ef537802d584b17bc578b1d63ca25799146ee6d986bc647ae1b0af2d";
+  sha512.doc = "3c2918a3bbb30b4abe2395baf32ed2fd5fb1ce3541f86250f0c4037aeb127fe7e90cfced87144d564813a437b39b184503ea9a2c0c61b979907db74d91860677";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+metatype1 = {
+  revision = 37105;
+  stripPrefix = 0;
+  sha512.run = "1dc34e3f826ebf09c6f3baf358aa0e5ee4ecbe86e2f82a7da12c706f443f5eba7fd8582bf46612b2fa3588515dac34c49d47cfa2b9c3ae905cc51dbe7779eb28";
+  sha512.source = "26f891bb5a62da78763df29f1d9caf26588c6dff57e063eb445ae23a5dfd7108956068de991bbb514ee394c49d4ad119d4a0fdb5398aad48d9be223b8f13d388";
+  license = [ "publicDomain" ];
+  version = "0.56";
+};
+metauml = {
+  revision = 49923;
+  stripPrefix = 0;
+  sha512.run = "96773f0d0e2788d13738930fa1aa727c7ca2edee020f3848326d7be3533c177ac977564aed533c59695b1e6c4c65e191784cbc3e7e70becdd651cd702b462ef5";
+  sha512.doc = "6c649c32111a6350d36c69405fc272a917144be429bd84c0f118a74e1232c06744e66fb6647c5a742f58c6c78b46830a1484bbed3a9a962380ece6b16c555169";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.2.6";
+};
+method = {
+  revision = 17485;
+  stripPrefix = 0;
+  sha512.run = "9b71ed52073f831431ef6a3a81afe7efac97a6dd39d772b8f48cfa639dfec01411a5654830fcbaef6a3bef7aeb718bbbc38cbd18c592a080e67175dabc7e9919";
+  sha512.doc = "2a211d1325322bfaf57c81a534f29fde51ef2e0dad8d7697c3af9fe10745c5f6245bb689b65d54c39a66b34ccec69d055f201aba34b2a4957ce2fea0827eab45";
+  sha512.source = "ba90537e63493073509e9407aeecb28797370d75aada1835d5fbbbf991ea9b933226950765b61ab831a708d5fddc10c2fccd624d2872148bb77759a3595cd275";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0b";
+};
+metre = {
+  revision = 18489;
+  stripPrefix = 0;
+  sha512.run = "29d99fe061c828b4eef12047215451eaf6d603106b0ebb0b7c83c8f8b5ffd360160e29a0c86bc0cd329e6f694efae695ef03282885e872cf26c8177f951b705b";
+  sha512.doc = "73ca10e1d2b32d4f7b37de6c409b68dc38b3dd165f47f52714c3a17e7a5dc6c1562928e7a7f8c5a3ed9aadfe1324e451baf6cda5dce69043fef3811cb6ff8cf7";
+  sha512.source = "d11bfb161dd68208b4f4e29b67131618a02cb60f4e87c3f2809759ab42c44603e790876ea84c6c9f4f053c3cac1bf189344110ff5b4acdc97d7ddfe4c466c977";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+metrix = {
+  revision = 52323;
+  stripPrefix = 0;
+  sha512.run = "00cbb4d0cd9417c57ae2cf701f0a485d296e17b95eb56a7a3b0acf328c4eadf3d8ddb7d4c3442ea26ef019dd4a6b5c95af9f718cd4e31b5e5d29301ce8e82edc";
+  sha512.doc = "e5f8654272e8a85366c226113d3815ffb1e539237bdace71da55e30864f8c746162ce1b3f3023e3e62616b286145157816aedc871c6c42dcd3d4b76092d8ea46";
+  sha512.source = "51a355ceccac5ff53cc98baf6d8fb3c36949f620a51191899d272ecca9671819c740703af1c47856b4c171757de68df839959388c2d87b2f43f54aaaf219b7a2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+metsymb = {
+  revision = 68175;
+  stripPrefix = 0;
+  sha512.run = "02864640550428b4869f0682d5571f463d21089f85e4e03336890cd7d37d08b9ec89b9bdc7b09b0f3ff5ea8bd612acfc2974655439fdcc5b617846d5f3d1c2a4";
+  sha512.doc = "a3afc302c345de9e00f89f6e0781d4763d4ca5461f498e2cedcd0ee0494483db9cf7cd0ceb68823e7b1806caebc85a22751d5d4ce3b8041968036c8b2514e5d7";
+  sha512.source = "29ccd5eb8915077ca09b568c7fd1924d61243266dc2fdfebba00691bb35a0dd908f2311caee865a044a78a9e485f78a4b91065c8d17f08b13420bdcf1b64a05f";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "1.2.0";
+};
+mex = {
+  revision = 58661;
+  deps = [
+    "enctex"
+    "hyph-utf8"
+    "hyphen-base"
+    "hyphen-polish"
+    "knuth-lib"
+    "pdftex"
+    "pl"
+    "plain"
+    "tex"
+    "tex-ini-files"
+    "utf8mex"
+  ];
+  formats = [
+    {
+      name = "mex";
+      engine = "pdftex";
+      patterns = [ "mexconf.tex" ];
+      options = "-translate-file=cp227.tcx *mex.ini";
+      fmttriggers = [ "hyph-utf8" "hyphen-base" "hyphen-polish" "knuth-lib" "pl" "plain" "tex-ini-files" ];
+    }
+    {
+      name = "pdfmex";
+      engine = "pdftex";
+      patterns = [ "mexconf.tex" ];
+      options = "-translate-file=cp227.tcx *pdfmex.ini";
+      fmttriggers = [ "hyph-utf8" "hyphen-base" "hyphen-polish" "knuth-lib" "pl" "plain" "tex-ini-files" ];
+    }
+    {
+      name = "utf8mex";
+      engine = "pdftex";
+      patterns = [ "mexconf.tex" ];
+      options = "-enc *utf8mex.ini";
+      fmttriggers = [ "hyph-utf8" "hyphen-base" "hyphen-polish" "knuth-lib" "pl" "plain" "tex-ini-files" "enctex" "utf8mex" ];
+    }
+  ];
+  sha512.run = "a79d6a1ecb15f7962826773d7eab4b1ffd86a5c15f8076f096fecf63df1bd661449eb7d14251a57a1eb2bede030ddf93aac170fc3c59ae0a124da6cef69e55be";
+  sha512.doc = "091f2825376718d8c2190555af7ef54d0ae5202425d57b986fba861df2f8604301df5a121ccfcfcdc91032d07dcda8289fb8de5d81c487b93b0e202a2a5a658e";
+  sha512.source = "6f20a7e4f80670f7dfe5b2cfe3357a5d16b0f627b5e9e95c2d7d46598e00b989d5ae8c797589c56c594b7d3610f5f79cad42f3bb64a628be968e4e9e5d541e98";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+  version = "1.05a";
+};
+mex.binfiles = [
+  "mex"
+  "pdfmex"
+  "utf8mex"
+];
+mf2pt1 = {
+  revision = 61217;
+  sha512.run = "ca93a3ae439f9cd8029720bd1d90fbe75a403e7ab4ebcbe1ba1e5a7a28aa9269197f90a4aee849fea59d734d5dc38f04eedc140ff1be64fd805a10ab5510a2f5";
+  sha512.doc = "6c10831fdcc48d25645be675fbf5da29da945bd79032c60e73e04a39d61c287a64e7b884381ac0b08e48f5dc9b6dec27efea874f6e13d6e4a5e3f32c22fa3ce2";
+  hasInfo = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+mf2pt1.binfiles = [
+  "mf2pt1"
+];
+mfirstuc = {
+  revision = 64743;
+  stripPrefix = 0;
+  sha512.run = "2fde98490744da1823c5d90b8fabaa9c02d33f3f974fc7f0f6b8ddae4d8ec86f563a4fb491644d53a13b8632fbca2c7768970eea018c6112dc76d21307d89166";
+  sha512.doc = "43fd4ec0bc778fc110c0002ebd8a1fd25374d9167c8b64857b29bc3642870c89f02deb406378bfa0fbc46825af6fc6622a1029880189f37d58efea74a983f5a3";
+  sha512.source = "cd46a05b9b90c3e703c5970ac46b8fd59d94dcdb83dfd38a1038bb2197ebd0b8a89ef9582dabf1ee8665abba4905548706fcc08ced7966fadaedb333bae968db";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.08";
+};
+mflogo = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "a1c5168e37fd9cbe5fc2714ee43143f36cec662441a7a9d33085652a5d6f769838d351faf416df6fda78529b5f8712f1a056afa47577fe925dcca5249f1fda38";
+  sha512.doc = "6d1dabc636d22c824838a82da83a4676b20bb8a55dd1ab5628d00b4543096f91d234a51a312eb83544891910d923650f09e8911ec9db668f411735de6ef5bf3f";
+  sha512.source = "7078092cdbcba668ebb440ca6214eb155221427ceaf4d1f574d1055d2f1f52d288cfc0f1d2212f2a62903e447c4aeb378fade068ab901833ab9c251b1890e15a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+mflogo-font = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "4b2552a2f38c68c755f3966aedee8e054af48e0b0a61267d7a4b1a29a4bd6be15c8754d657a2f08d88dcd42a03ed768d336747d2c35107b4dd2d5bb0e1f649aa";
+  sha512.doc = "8ce49b7bf7bdbc46589da02c461f98746e13e13f19eb79af1c2ede084174204c128b27f88e164d5192415b6f464238e7f04fe95fe8e0873ce8aac84bc1e56713";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+  version = "1.002";
+};
+mflua = {
+  revision = 62774;
+  deps = [
+    "luatex"
+    "metafont"
+  ];
+  formats = [
+    {
+      name = "mflua";
+      engine = "mflua-nowin";
+      options = "mf.ini";
+      fmttriggers = [ "luatex" "metafont" ];
+      enabled = false;
+    }
+  ];
+  sha512.run = "fa735fa117e7bd433339efbb709caa5fc25007088500dd5e4f6999cc417d188fd43435f74d526186880ac857f9bfc52e1fb7f1055974cea959e28536150b1a19";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+};
+mflua.binfiles = [
+  "mflua"
+  "mflua-nowin"
+  "mfluajit"
+  "mfluajit-nowin"
+];
+mfnfss = {
+  revision = 46036;
+  stripPrefix = 0;
+  sha512.run = "33206fb4cb7ce8f18050d713be415abb95323599270b2b91c886e2ac3f24a58786a480e5d4d1ad6ad2083456231eacf94dc769b26e6cae7288e996c6e14bea29";
+  sha512.doc = "f8421e58ede77c8817679fcdcb43fecfc519427b3cb93ed2594fef5c8ac8124e0563a2182803a2a6bc417982df298abc7fe092f1cae5ed7583e2fa6fe94c8345";
+  sha512.source = "2bd5aee80abf38884cc4a3ad6d6226243a6ffe0d2e879101aee56168a10cd0c7293eec7ccf53c7a7e8087ca94398e3f4ef38d71ccbbfe48677ffee3f8b813bc9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mfpic = {
+  revision = 28444;
+  stripPrefix = 0;
+  sha512.run = "361983a020165d094bcd0fc9616be74bd2b5c72542b1e1b257b5ec42ac6be1175caf59c79e156da2bf6fecfe3746b4e33a4a8fc978eb124939ce0ffd2c383081";
+  sha512.doc = "97ec26cc1ed8e181c7d69af264204772c9075e3650044b58cad938fd6918f9cbf5c849699e31846f437e41410492b67668a7ec33e848cf6b5fb9c2d52d7a7947";
+  sha512.source = "609b960a70d47edbb814c981c5cb03b91fd19e905f8caed599be2488e0ed9ef0bfe01af79353015e0d6dd2fcda6810bde10ec4d8e993356bb7371ed2805988c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+mfpic4ode = {
+  revision = 17745;
+  stripPrefix = 0;
+  sha512.run = "4f3a314afb6b1f8c4fb07421244f2a05747f5d24194659053c561ba24ed90f325e82ab9d97981af6455081580f75e9e8f75d11f06aef9e1c027ed0f9bf17696b";
+  sha512.doc = "9d5f38873cd94fc3248b619f68e04bdb1824eb1249cf02e555a60c3e84dcab78d3e04f9451e1803943e898ed7f55e33615f673da8c58569219650976c25f0ae4";
+  sha512.source = "b5de6dee490578bc460f76ccb606b5d62d4f6f2c43e2f9967085f1a323ba287cfc596da70905a40e1ac602074323940a9e42ba8096a9a35190ca280217b2e10e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+mftinc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "64fa5f38398a626d5a351be7ad866c75feb4549f836932dc936cb99f921e7b8abe5b3d6fc1e1e6c427344606ee5dacaf067d8678e7b199fa1ff8d5c94cbffa49";
+  sha512.doc = "0846744cfd86bbcd8b6ad90d58bfe5788a79f43d05f3cf6f438fdef50cc4872ad8ec4d32005ced9ea9c424f3e86a799d79b0baf2a9544a3018531a99cd81fd5e";
+  sha512.source = "50ca90a2f48970b3cca5552a361337ed138b4a9e31bca2766eb429cdceac2a09adc1cafa6c444c514fabe71c38ed82a63b847e1da014f2c131a15c362efaf09f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+mfware = {
+  revision = 66186;
+  sha512.run = "f14b1f8876f8a4f2ba8954459c2a3739e0537d800fc1fde11aaaaa61400c18b9419edd3c7884ecac499da3efbd5219244c06ccab1efe17674b5458b464abd3ea";
+  sha512.doc = "ec469dc655be20598ae40cdccd8360252cb216039cfcdfaab5f45d0276fee272a463f19db7f98f6d35b3e6930098536fe8eb4a453161646aa0ed33dd3f8773db";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+mfware.binfiles = [
+  "gftodvi"
+  "gftopk"
+  "gftype"
+  "mft"
+  "pktogf"
+  "pktype"
+];
+mgltex = {
+  revision = 63255;
+  stripPrefix = 0;
+  sha512.run = "920784d4332e4e1635e089878a55848ef4ad82a7b23e24a1bc81f71a08bb7af411ea54710533bf1f429e506c4ca5e94855c73d890929dc558274e108155e1a71";
+  sha512.doc = "a8954ba22a30368ce01329b930486c02b317375636d85c7fdb7f14cf032173ab3f7a28ff6261d20cebdb8995560d4c7f41c03ed6285cfcaa555d405a06891432";
+  sha512.source = "63b874341f2e18f88862ec5e6cf7064e9d4219070d274f0daa2dbacf8eb0eee5b4206167bd86520d10ffa0316d7ffe93615604932924b4cc04936db352073d1c";
+  hasRunfiles = true;
+  license = [ "gpl3" "cc-by-sa-30" ];
+  version = "4.2";
+};
+mhchem = {
+  revision = 61456;
+  stripPrefix = 0;
+  deps = [
+    "amsmath"
+    "chemgreek"
+    "graphics"
+    "l3kernel"
+    "l3packages"
+    "tools"
+  ];
+  sha512.run = "fffeb1ce083d8eb3da6543409e5cc735c9699f9145114c8325c336b93d2dab2a9976fc448c6324318407c3af888cb91cc7764fcf3bd24369e4940f00dda66429";
+  sha512.doc = "cd4c41a329489149b3f2bc79dd50e0517707681f452888394870459d10888095a0cbb7b7c18500f04264c6c85f791d9af9d799b1b4e221e991af32690e7405ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mhequ = {
+  revision = 64978;
+  stripPrefix = 0;
+  sha512.run = "bf1e2b11a9b4930a9ac364ad1b6e6f6097f346494196ef64fcb76dce00c9d3c3d145e852ddf321c0c8ee7444d52656e2db27e6a80c97b4c18c5fae283b8fd88a";
+  sha512.doc = "aee8ac5b73692b37a9f0541c07787eef3dc173996c92aca250c35227f095416dace1e18be9fe6f2ae955610dcca9fea031a6b787fd2185138d7668d0cd269caa";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.72";
+};
+mi-solns = {
+  revision = 49651;
+  stripPrefix = 0;
+  sha512.run = "ac5beb872c78675bc9df379f8a2afe533647a1c39781c57fed2cec6e610cafbbb45a4fdcbd9826cb123a584e121ff752633d6c990109bb1f619b1d9fac6906de";
+  sha512.doc = "cfd36e0a1476e0d148fb36f350ec236d57beb2c0b27f08eb56f69683790b16425a6f95b4f93a010fe0d450863fb34a7eb31b1c8e40fbe5319df128439dfa5372";
+  sha512.source = "cf41fb6338270f2fbf56b33b9d0b3b6904f06a84b99dc8fc0613e10644b3f198b22634cd82b78bd50b236415ec6b8d46c9d0d99728480782459f514d2086426c";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.6";
+};
+miama = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "b9a5416b1de4cb487575894f3dacac8b07eda2b37b90fa0c5ca0ebc5d9d412c896fb7cd028c6af5627368c44d442670990949c9ceb9fe3a60179d3f70874135a";
+  sha512.doc = "a76db9f49bcdc225d9206ebaa3b7ca42bc7148a44d1d66b72d2033b68fe9a1137eec265316d3a24077e3e3712687e80ea948d4f1c9cd819e6a4afb8c9bbf91df";
+  sha512.source = "2b9e1a649f944ce6b36b1dc09d28112f7d5ea3c0a26a1f292576448171aa2f51449988ce85703ba7c2098f6dce62093ccf5af256bff1993268f31dc884bd3b63";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.1";
+};
+microtype = {
+  revision = 66587;
+  stripPrefix = 0;
+  sha512.run = "c80e6bb2c13432ecae2be22622e3bbfe82342ca138f61870cb8f3c2d7ec93f431bee5ae0a9619d4ad6a842b0752ecb73131452d6ac5c5fba7732ad4d5c979fa6";
+  sha512.doc = "6f7eb5d18fc2864c0bff52f7af82b3284766cef64d2ba8f4aa9f2f6d26af3e47e3be9d486f29e646e92ca597cc1129dacb5d1c03dbe155503ae046e4badbecf7";
+  sha512.source = "77d5f0e22a97ac0291e891df206618460a2672fc36c79a91db2b5212092d65acb0e1cbe0ecf82e0a31704baef207a48f817b5fa65abc4d6e6c031acdd85ed602";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1a";
+};
+microtype-de = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "cde294b4dd73d5948ef16b314e70745eb98bed30b4343c04885686533e2457a4aee07616e84eba6b0a552fb342331114de835d777d882308bdc1dba75927b17f";
+  sha512.doc = "fa524a0225a57fc60bbad95cdd7855f4ba73691a6787c906ef5091183425a650f583340d65ce8b11792046c767b0b31e5131c62dcc281898457234134aec291b";
+  license = [ "lppl13c" ];
+  version = "2.4";
+};
+midnight = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8f8bf1d8d3c5c12147dd61a4d65d311552877a9f5eb7ebcce71602dc69ed5459187134d3a1e346a15255f2c4ba57f054c3d020817df0d5d89c7fc2f216b19cc3";
+  sha512.doc = "0c594cac3c7e8d3064145f1b2b088d74a5445b7a7506fc2629b3df6f63419b025779e348116f7dbc859d7c406d87e5b5988d529e5da61d01b0759b0f0fec2382";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+midpage = {
+  revision = 17484;
+  stripPrefix = 0;
+  sha512.run = "9a13760b776cdce28cf3eb1e28e957265d7d4e83b23234f1590285bc83409f1d5b09040fc6cacd3b9f7a5ec2f61a4e5431fea92a5fcf20032c7bb919ed59612b";
+  sha512.doc = "25f41bb8cb12c6d310da66d36032eb4933248f0c84a67216cd0981fda7e61343c0dee03e96f522bddf969e925e6cf495754e52e863672f1cab4e94ae3b0400cd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+miller = {
+  revision = 18789;
+  stripPrefix = 0;
+  sha512.run = "a1415d82a2a81c3dccdea1b59c4c0e8d2cb3902dbc6816cf7615fa3e571de26168a6a066f52bad94c38595102afcd1447721095bd084befc20b3fb3ad420e129";
+  sha512.doc = "3f888fed2b909c269ead9e5191a788828048a21103c881a9b769fb0e8a3c0f3e6c41467827143f6b79a45d2497e3ac21d5c6da8727be3c987ab8a1fdbcec59ca";
+  sha512.source = "06e15ff6c146685a8b4d13c5d4e23de4ea343afe684924694f86104f362df7dfaa975b25e850b685e05efeeddf2ed079038cafff8a495116f27dd756e4dceab3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+milog = {
+  revision = 41610;
+  stripPrefix = 0;
+  sha512.run = "126942c7be2217843d5dd0a6a927d1a47537ced3b1a083caa54b4905625b57238cc0a3a8d1652da076144b8c2469f418077eb4051527e5d351c2d95f3d3a5f79";
+  sha512.doc = "251b73ab0f52ff2672733c3855289e012965151e07ff447da373bea083b1ff6bfeff38adef72419f03ca153545fdb90bb18f3aa254fa7b59d3c5c061ec5d15ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+milsymb = {
+  revision = 66697;
+  stripPrefix = 0;
+  sha512.run = "fdd01cd6a9a5b27ceb741ba689a82f1e695132d78b59c818fcf2e3ce63526109173b978246b1b556e355237ce456b6f632effd555c27b3096ecc1cd5f5bd22ed";
+  sha512.doc = "7baa8152b3968047e66990eeeb94b601a0667a7db598a4403930328f6fa18595c46979772b8b496dd7b076e99e19969d22c8a3f4f19d3b82f01bd84bfa920db7";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+  version = "1.03";
+};
+mindflow = {
+  revision = 65236;
+  stripPrefix = 0;
+  sha512.run = "35d1b4fd39bb64fb1e9c89ebaf33d54051f0f550967362dee15294aeac0066f92b0437e688b5065795dc19a680a9f26c99cb1647c3ddacbe0054ecf553c2f9eb";
+  sha512.doc = "4ad9f6c4e024f782dd1f0ec2e4847c45690c4c39410395cc4fb122f340b2dba0dbea5664f65640d2fc53ea301bba9e5758c7e29f3556511e307b6c0c2c46653e";
+  sha512.source = "1a267ca0f437c707ba05b65aa4355ad721aa2de26518143aae4e752ce1dc69d12f6e4b42b670c032d82ae15f5a6753cbc29f56bc44f4bb48d63ff6dc0afb9e1c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+minibox = {
+  revision = 30914;
+  stripPrefix = 0;
+  sha512.run = "18d409728f57cc2e423b5c74ad7ff4a9e93f2405497a96024769fb01f7604e019d914365f82fa5908bb679ce4a48cab64fd4435b531ef72235067481b8dbc96b";
+  sha512.doc = "0404b375fb0ef258d0e5acb8e7a78a60a55d08ce7339b9b63b1711dcc6d40b6f302b0f35f7d1fc8bfbf431b66bb5aaa2c94e92ee8e788a5f2156031425c0c4a3";
+  sha512.source = "6aafb14003afb2ee18390391e15fb00f73a16f568158d72fea348e7052bf1ec5f25cd446569bb3c6dd815577fca7b2522d4474681b560ee3ea65b6053509df92";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2a";
+};
+minidocument = {
+  revision = 43752;
+  stripPrefix = 0;
+  sha512.run = "33a7938dc25833faef05245d00219ad4d94902d1b5a8f63de8c08448da1f4ddd8e305cd261a3051df919b097f0b3b82081b57fa420e773dc89a1c8cb801ba463";
+  sha512.doc = "03ac398f6f8e79003b155434992a53b1485032ef779e5fa05a43adf7528fec1966ba94731ab2fc11cdfadce51bfca6ca9d1a88f882ca87f08d8e4077896af4c3";
+  sha512.source = "556f1c482366f1bf2bd6e2f4e92f0fb811d97e91e057994605a2794f9441f2df35bcd2e2dc4d6218e980e921b7d7a03e5ea2613b6d27d8258985521ecde2dbf0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+minifp = {
+  revision = 32559;
+  stripPrefix = 0;
+  sha512.run = "412bbd3466eee82a99b43d6f4a5998a0a22b20c2d51621368ecba1084010a5333bda9e221b07dcfc6ddea8810edd0dcf60c2be6f926ca0da33071e6a812108d9";
+  sha512.doc = "56e1b71f8289c126df12091cf155c8c05f05a391abd40ff6ce0b84bb7620630a80747e23c25bbb4276aa5d110314076f61da72683b6846a44a53ad3515b91670";
+  sha512.source = "32cd837a6c750ae92f9662db289a5479a102d09058bb4c85605820d6ced83f237d684fb07c9ba59f76062d6d383d1b45485ac2f2ec4e5bd43f780254facac1e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.96";
+};
+minim = {
+  revision = 69352;
+  stripPrefix = 0;
+  sha512.run = "ec7106c1cba50c73a9b2384fea848fb76a07f8a693ca0affd10cf7b9710e871cecdf2001be45453f76f572dcaa869b613b0ee07d7cf2ac2e38cfa662171904aa";
+  sha512.doc = "fbab9a3a46b1a569f48de82e8311d0775829750341bbca8d747de135a71c808d930149c86560fac29f5713cad2f11fcffaeedf15083439ac25ffc1fd2e78126a";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2024-1.4";
+};
+minim-hatching = {
+  revision = 62395;
+  stripPrefix = 0;
+  sha512.run = "3d6720c4bbce847f1ca08279593398d162c80c14034ba6b8d168517ab30af883ce4fcc6cb0cea4dac0b0720be8fb8f67ddd131a026ed6ca5ea46182af1c41110";
+  sha512.doc = "895a0b7731af0ea67e581ff4cc0208aca12d04ca862a15bc897d6e104a1bd9d7ef27f3a8c2a24c8533f16d0ceae1eab05a3dd923ae829529a223ba76d94485c1";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2022-1.1";
+};
+minim-math = {
+  revision = 69352;
+  stripPrefix = 0;
+  sha512.run = "b733b6fb53b450bcb4afd2265f65e64b6087d08d385a746ea78720efedc4d1aa14bf6fba21fcfdbef7a331d1c657674caace33f9a213d34d0b56604a4d0067ff";
+  sha512.doc = "d3754968215fdee2a31db13934c22a06998f93a11b80ba46e30231176e1583a8df86dcc8ed91b582a8b6f1427d9bf121f0f43cf297edb3e4a79250b9d703cb76";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2024-1.4";
+};
+minim-mp = {
+  revision = 69352;
+  stripPrefix = 0;
+  sha512.run = "117b829b8c037674b896f88d224795bcb4fbc0871dfaccd2dc56d9167549e88a1dc8e3808ddf773efd392a924569b3cd5fe3ab9468ba068dae76ca632a99ef88";
+  sha512.doc = "977a6f61e9e149caed9a61f7595cd3b488e0d536cfc7d00d4c4ad5a6b4f2bce003fda88309cee6a13d9f1781bcc7035fb3fee04bd2adedf9fb31f0572680f9b9";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2024-1.4";
+};
+minim-pdf = {
+  revision = 69352;
+  stripPrefix = 0;
+  sha512.run = "959a7e6faef8a4f22c0a8822e73178430721d0aef57fb9c5f5e5bd588e8bd5588eec31a3ea1b0d4a851afcd0ae393cb4917f976e5698b1614cc407428a9c9998";
+  sha512.doc = "1768a50f0cbe45a980579042021670533932da3b832d2cb619638311ac7866a3d39cfc9dca862c842464be47799eb98835584e86c8b04f820247481ad86ab5ee";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2024-1.4";
+};
+minim-xmp = {
+  revision = 69352;
+  stripPrefix = 0;
+  sha512.run = "4df50df08721b8c6cbc2314a36f08776766164c57fffa387d4804afae2fc1f35deb386f2c01e81da8a18b535c7103b7e07ffc51b37d4c621d8c5ac5248f4d960";
+  sha512.doc = "a6c524225e0e9c5ffe620950474ea7f0f16780d555e354a14885d81066228d350a14399a78cda455677fd116e752f3637e73ff3e9aa342ff4036363805d736cf";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2024-1.3";
+};
+minimalist = {
+  revision = 68552;
+  stripPrefix = 0;
+  deps = [
+    "projlib"
+  ];
+  sha512.run = "ea2e03654429ff56c274ecd4af620ad97734a2bdeb4dd63f13834a3d01f1d2c86b55d46005bb3181bf5305d5705a34aaf4c84cb7fdd46d90e27939912e3bacc7";
+  sha512.doc = "57f20e5e8fe46c61f181b52ac87c55d2e6e3b928308b347167e7973ee1068a7cf1cc6b8db048ec6ba5f983d1c8b0aaf4ecd405749938607e812ab7c11580fcf8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+minipage-marginpar = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "acf33aac7dea3c20986a9ed1f76efbb470d9fa1cbd31f29ed4fddd0e16835ace1946278fcfd04ea179122e603f63b269872953e40f8a64843ae8e60ded769356";
+  sha512.doc = "20d503697a246b8b56a71cf324e4daaec436b62e9c3b9556095670c2b461d273e8b77e24da3cada37106c350304827a37bd6f658727373e384f11fe064e07992";
+  sha512.source = "1050833e51b5a00963b616b496d9b18e49cc8ded901ccdffbaf949eac12fe8d31219c650936c083767e39a39dcd08686ef049ce11abbaad5daa998f4e9c1b7c6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+miniplot = {
+  revision = 17483;
+  stripPrefix = 0;
+  sha512.run = "2c5d08c2476871dd182bb320c50ec96f202ef65a417e65d1de8aec391fb60dc66c1e9e4642ad2207f7f4bfdd12e83bfe2cf75e9fa4f0fff0f4ee72769f7ca84f";
+  sha512.doc = "6ae8000b3d0ef50e37dfbda399396a42bd348d6ed9ee485ff01ded9d850693f43b0c1945dfde93d9ea0f17494ac2e03391824f2f0c0eff67355c3d3f3ad6cccf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+minitoc = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "e2d2503ac4888198c56e9007b20f489a04e31fcd29c946c5504b7d193506fb58e2577c6085be5d9d17c6f5b21ff77208810385c73688468f3988f0b651fb81a4";
+  sha512.doc = "15955f17dfe2916081156e1464299b598f1bba780518516f6bee7da55cd1c45e2fc90c27402ba9d8ab4a994ba5ea1675ca9593699792a08407cda5b3a2230908";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "62";
+};
+minorrevision = {
+  revision = 32165;
+  stripPrefix = 0;
+  sha512.run = "d76224254aa18dd80f9bab56f055fde5bb7ee6b5c3dd88e6ce19667c939fb2dbd1e5cb987522a3f1c50082f46ee20cf918f1e01fb00f588ce11d30d300fcf574";
+  sha512.doc = "ab1484f7ec214d43b95a8bd5cd78ee28bf0055d99d8c63c424c5c1db1c77b41a8631ea35bef745ab0399dd1c8dd9c9ab66b60033bb151f46afb023b6b5e1ab44";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.1";
+};
+minted = {
+  revision = 69163;
+  stripPrefix = 0;
+  deps = [
+    "catchfile"
+    "etoolbox"
+    "float"
+    "framed"
+    "fvextra"
+    "graphics"
+    "ifplatform"
+    "kvoptions"
+    "lineno"
+    "newfloat"
+    "pdftexcmds"
+    "tools"
+    "xcolor"
+    "xstring"
+  ];
+  sha512.run = "d9bf72028b4aeb2febd7e2ee8f44297f047b5eab76fca8265a56dbcde4d921946bce15af5a89bc110b8ba25d234925172822e045670cd9795f13e38cd0e90f18";
+  sha512.doc = "6ddf64e40d3d28ca2bedd8a8a9789f1839c63a96f5aee3f71155722876f8ddf0634c2022ae4c02e1e9336a76dc8477994654d20e9d5949f2054017fcd09a9146";
+  sha512.source = "2cab20988a7fae52fdeacfca9e0f30fb1d471ea1a93f7f76c6812f9c6d15e5c4949aac1a904341be30387ea1030c67100cb696a861b114bdf8b7d348c9d1a808";
+  hasRunfiles = true;
+  license = [ "lppl13c" "bsd3" ];
+  version = "2.9";
+};
+mintspirit = {
+  revision = 64461;
+  stripPrefix = 0;
+  sha512.run = "18167b9d0b5c167e2679cfb135812e3cbc20a90a182acb3eef15a54f4029298ebb39f6db626b5cbd8368389c9f0656f7575eb4f1970fd242d77d976762ca8d5b";
+  sha512.doc = "8a7855b5cd117a5a11eda118b8a4b08eff4183a427655c501c5e3c40e1e9617397d58e6622058187a48d04948fad9164b866e58c76080404d7bdf4ff9fbc4d9b";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+minutes = {
+  revision = 42186;
+  stripPrefix = 0;
+  sha512.run = "3abd6c4963ceec3cf073048c21d2abc236d58f522000195fd459c554c10d2af9afaf772b0fd1545fdf72decbc7e1c62a0bb12d7bc1dfd9d5b025f5131ca5f145";
+  sha512.doc = "a069ea537eb1fc572c842a26dd406b1ef2f1343ef6066d266642dfe37515a3679c3a9e64eb37e1e992fc40281d855b817edf9116aae3922abc60e3c01106e3da";
+  sha512.source = "09b6260de696981f020835c61e20f23bfb81404df44af477f62341b9b07c65a1be58098d33dc876d6f07f3a5aaf6df25c8e3e7707c0f238ae76094ff0bfe5a2e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8f";
+};
+mismath = {
+  revision = 69169;
+  stripPrefix = 0;
+  sha512.run = "0c85c7301c3409a56b99163c0269810daf36894c261c0eb62a78d333760e10375f0daade5e06090b3571d424b4b504f4ce14b61063a6518e5aa8f355aaa559ac";
+  sha512.doc = "e5693af9be3fe8496b213ff988c851388e1b7f28942ad1734d527c70f905d82d2110f55f3da9425af2a15584196bd83888021b4e6817c6b7717adda5a47ea545";
+  sha512.source = "b2bfb0bc801dd99a54366f71f28971019717d351a3020de5afca1eb4c2ae7f0e6825d343735a860db460f3c345970992eb19491ab486a66aaebe26f9cba9633e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.9";
+};
+missaali = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "552f53302060b3f4c764a669feea4fe1dbadfa3abf53c226f9fde2d0e876bc8992ff2dbd4be6cd3e261ab0e01ed4d1ad2b5a38c2cfb780c4fc099a79ae52b46f";
+  sha512.doc = "c80c201b7d3fa5808bc337415e86fe7e009ceccaf8020e587fae72f7024452f7c02b65ce48b2e8543c9796e8b3ea6431e0b8a5f1dc25b5adbd6f2ae7146e75a4";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "2.0";
+};
+mitthesis = {
+  revision = 68732;
+  stripPrefix = 0;
+  sha512.run = "7f7fb74329217ceaba1cb55e8dc6d52216327991f397b01b7603d8a797ad214bb0f62c51e237a14e388ba5110d558716436218a511647336115b9653c61fa801";
+  sha512.doc = "315fe938373d4fca5cb740067855cf38b52c00b49926baf2a61613ed5353bb81e4b156bc43ee3c67dd8414d5cb9f9fc1b36a215d67b04e57ce4ad4967456a021";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.11";
+};
+mkgrkindex = {
+  revision = 26313;
+  sha512.run = "bbb0b306f30b4fe898f5d5bfdcb1eaa4d2d88a95cfa1ea0da51957aad1de028928562c930180f6c0a7d66b5cdfd804d52afbd229e7ca43173477a229cefff192";
+  sha512.doc = "5a5b14d4282e97420f796456155a71c23a44d4197d4d92bfea1f0f20e95b42e506c7be3f2b0aba37508415341e999522bd823c649cc6259a6e26d42399c6b8cf";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2.0";
+};
+mkgrkindex.binfiles = [
+  "mkgrkindex"
+];
+mkjobtexmf = {
+  revision = 29725;
+  sha512.run = "c0dffdb276141b78bd2c47e6d2bfddcd13c1800d3a0806a05ca1fba72a91621364b827801430bc757601e07f2a5130366ade49d7ac1df27901fbec29827739c3";
+  sha512.doc = "3ef5c333cedd5104b63c1457fff2eee40aea7d1f1b187d34ce4cfccd5b6bd38809b7686dc7b41a147fbee2ae0e951470f3ae574bd3c10a5f9b6fb76b686ce4f5";
+  hasManpages = true;
+  sha512.source = "7f9de9bafb890d12ef2f07d3b8596dc31c4bb97079f826c9efd4f318383f64d8250099a937d8d692fecf703e626b42f942962f4d906e705cf4b0155e354bff0f";
+  hasRunfiles = true;
+  license = [ "artistic1-cl8" ];
+  version = "0.8";
+};
+mkjobtexmf.binfiles = [
+  "mkjobtexmf"
+];
+mkpattern = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0395c9258e6c4a8459e69ff2fbdfe511b0c6863e02333d9481a8a1e82362cf9e1be7e89e7447bda497e7ed2bc18e1986e0a5461e9f49c63ff869f39a4da4f007";
+  sha512.doc = "8232866143444fab1ed1f15255dc5f8c1c5050812e2882d2e20636bfd300216815a53aa03cd4f69ed7f45aab255a8efae9bfdc10df6b7a246d36d4db075204ef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+mkpic = {
+  revision = 33700;
+  sha512.run = "7814f14293e10a23bc9348dcaea9af326ab4dd93cc55865320706984e50883742381b5df3e77774e7a63fbba7ebcbe0fae7268a3d1a34ebb2d8a0303f5b53034";
+  sha512.doc = "bfaf4232fc39c13fefd86c21b2f9f76cd93761c58e39c1420c601627e95adf9e6c5c06db73a0afda6621acef374089dd93afbd2a3bd761cf5aa8db29883375e2";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.02";
+};
+mkpic.binfiles = [
+  "mkpic"
+];
+mla-paper = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "e82a0f04441b08a8f5b2dc0bac9480ae9ae8c169c7e5a1d1795315d3e103cbf3a07f726eb41d7dd7b1ffd1443fe00bc686b37c62edb59481a110bfd34944daeb";
+  sha512.doc = "6bf3856fced879c5dce5cf1442ed0302453f7a02ec30b4d1a2cd63228baeef58d11999d56f505c1aab6a78eff1e4671665da381b7e319a467e42f70c56cfc89e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mlacls = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "7d0ccccd52f39b97f5448674dd961dd230b93799f71871bab7d5cce5b77e60788029795436765b6678b4b9e89f9f370ace2a43c99a9c185c216335e7ddaaf5b3";
+  sha512.doc = "c4ed81865684aaa5d15679ce667d41604a2f9d7431b06a258ec2d8f5f0f22aeacea5f944e39faca856cc84139b730d33f407147deb07f7ac5da70fb82341153f";
+  sha512.source = "c8a602a2ab7dbe1c0ecef7a1d4288eea10b0d8e5bfc15319d31c2f417a6ea2190576c986088b8da8aaff317ffaa0f0f41d0025e8e16a02503f2d96a91835382d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+mlawriter = {
+  revision = 67558;
+  stripPrefix = 0;
+  sha512.run = "67e9de777a464cf7ecdff6c821ff31d73f31f5f69cc5e6800d740ed6df296b5fc3a584b34e60be025f91b96a609e392198b67d386b60fd24deefb11746ecd439";
+  sha512.doc = "7d05bea21e44c771cf86e94b03ff2960419fa99e44adb1e7cc9a2398eb0647d0a177ffb9e2b8bbc74775946e2b438c51b8dacdea916311c967a02c34dfd1a2fe";
+  hasRunfiles = true;
+  license = [ "cc0" ];
+  version = "1.1.0";
+};
+mleftright = {
+  revision = 53021;
+  stripPrefix = 0;
+  sha512.run = "d1423d7e794ff011e6bf436d85bc3d2d933263bee059cac910e1a3375140d0eb0f1682e38c675afe17607d71d253b656a81cc927d22f54a8add2df01571a5e95";
+  sha512.doc = "193d3fa473d136c11ad8a1b4f707d286cb0243bd32c020c1c5343c23a5d6347c2ba2ccc5c11e5bf835b4666c8e4a0ca2d234661e155c0f5fdc32e7b85cf2d253";
+  sha512.source = "365cdce5350ecad7f1ea2fe478ac4c7414c9e8c5053c480229cfed7a478f135cb033e67070f327956cb5aadf862762e270726bbeaf8e511b10fc96e996e06d64";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+mlist = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "23466ef3b73d8476c69632fe0c701f3ec675250b534fb4451cb0dcaf93c30a649ca07bb58cfbac89054cc31cc1219daaa1e7f746e6689927573175d42f78bfc0";
+  sha512.doc = "771f51f52e47aceb7da064a0bf8ba4b19f0255fbd14d3b6d301457ad0dea80836f3e4c449611f5574c12e87185ab5ac9668404c5f1f97100971293425c7ecd13";
+  sha512.source = "6112422b62304d0dafb8e4fa43239dd0899327dc952db6d1179af684049b46482a30675b8c44be534213d9b2fd9ff6bab267997bb0b08102e35e1ebdeca9956b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6a";
+};
+mlmodern = {
+  revision = 57458;
+  stripPrefix = 0;
+  sha512.run = "6fe8c67f768cde92e38741885c336786f65f9793fce0027b0476a8e45366e33c4a559c3bb6367014646e89f0ac39bd92219bc59921c3b3e0fa3a9c4314f2a632";
+  sha512.doc = "bd5ac414d3b3ff53b059543d25cf0296d59365dc219748d849f89a085225d864361923b4220a0a989585d99e9dc221f9a4209b622be5f279e0f02e5e1cc2d966";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+mltex = {
+  revision = 62145;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "babel"
+    "cm"
+    "dehyph"
+    "everyshi"
+    "firstaid"
+    "hyph-utf8"
+    "hyphen-base"
+    "knuth-lib"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-fonts"
+    "latexconfig"
+    "plain"
+    "tex-ini-files"
+    "unicode-data"
+  ];
+  formats = [
+    {
+      name = "mllatex";
+      engine = "pdftex";
+      patterns = [ "language.dat" ];
+      options = "-translate-file=cp227.tcx -mltex *mllatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "dehyph" "hyph-utf8" "latex" "latexconfig" ];
+    }
+    {
+      name = "mltex";
+      engine = "pdftex";
+      options = "-translate-file=cp227.tcx -mltex mltex.ini";
+      fmttriggers = [ "cm" "hyphen-base" "knuth-lib" "plain" ];
+    }
+  ];
+  sha512.run = "e04f33b83474e58c4725abbba21ae56659920ad2929faba7f25b47befeeb7e207e36888e1dbf7260ecc95c126e1732f6f5dced3d277db7c3889f2b08590b04dc";
+  sha512.doc = "e9d5a1cfdc6183bf99ef369b447c73e9ec5926952a80a75708db4fc6343ffc1a10d599276c13f295005f7c8c56e2e35ad9edc9dee3ee06928fa8c7b267d82bbf";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+  version = "2.2";
+};
+mltex.binfiles = [
+  "mllatex"
+  "mltex"
+];
+mluexercise = {
+  revision = 56927;
+  stripPrefix = 0;
+  sha512.run = "9af80a432fdcafefdabe9697cdfc16dcdee9f6a15d85d3e15774860e94bd579ad523c370b289e823f82372dfaead086ae0ed175fcdc51cafa53bd98076a8664c";
+  sha512.doc = "bafd00d7a14ddafeccdfb2bb4df613dc0ad6428445722b29ba6875d0dbc3feea9ab5ff86d8e7799f4a907840c584c2e37cb54e89b5d978e67b8f7e4b7fc7ef51";
+  sha512.source = "aebb67b8257f675b1237a362ae5ddb523d983717056915db5e482da90fd5674d7620aadc9b81b2667c9e78ad590b2cf670463eada81154f379e5693f411bc3a6";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.0";
+};
+mmap = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a2427b9863ef37385507783dba7bdfd65bf022d1c7322e7560b78222c3d4e0ddfccfc70aa927196e64ca1a520e985eea8cb78a4129a39e73a8410bc210b801bb";
+  sha512.doc = "95a71c9a9b9cd46c1723c986ba41c29a7204fada2cd7bdd14ebfe5e0c4e1b06106f9c13469edd9caf0b94615bfbea9cc8a1f56a4f83cec37de481b39d2b4bd91";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+mnotes = {
+  revision = 63406;
+  stripPrefix = 0;
+  sha512.run = "834350f6b4bcaa9b84c18d526072ebcbb260c501b08fb81fd40d3d4ebe015392ec94f6dfcb0fd751716f213afbb4615bfa3e1c729eca416c9d499d0eb784686c";
+  sha512.doc = "198f7b4e402a71e6617a1c7a92a54fd2a742c8c1748bfa17f71102a833b1fbb656dd5b85f7f7a58bfe05588525e07cf978278d6758448c4dd69d48275eb0be01";
+  sha512.source = "db27a6007ca0bc687bef6298246d5a3a72c232c8728f3dfc8d0f8c8fd62990d98d9e13b57916ac1a4562cc521610f2625f90172b76afcd4b5600e7c571b9a1ef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9";
+};
+mnras = {
+  revision = 68878;
+  stripPrefix = 0;
+  sha512.run = "cb8e7cdcef07bead94509ab42af1e3d6a966b7266b75473f5a6107d2fe7f3f4c2f732c9544072def55d923883b5ad495a166cb128bf67e10211919be9f4fdda3";
+  sha512.doc = "be0eaacc684772a599ef62a782d73b41e0e9963cc9ab0624805cac56af8b8f8dc529405588c687a018ffe888b643902ddfbd0f833cb7cb67a3053bd5c34e373e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2";
+};
+mnsymbol = {
+  revision = 18651;
+  stripPrefix = 0;
+  sha512.run = "68df6dcaca1d2f3b743c62e205a22427152ec6ac1deaa126e7511842ad7817ba4a7a232b72b45c6dae88d930837f46597c5f89e50b1057ba313a590157342ff5";
+  sha512.doc = "bf06a1534665ad50d33073e5d7332337c05f5d5315ba41af399f73f98d54b22a0610c65fa0e96b311925f40bebc1458fd0f0fa9c5fb41330f6d0b9b49aa12aba";
+  sha512.source = "1d622e81bfa0c2e61ab64f058a356e66c98f75a2511728bc49c6cb3d998caf132def2f092db7ff18b4283829e7c118368fb09a39ba2e9c05b0a0be5e4cada210";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.4";
+};
+modeles-factures-belges-assocs = {
+  revision = 67840;
+  stripPrefix = 0;
+  sha512.run = "0b0e546eef6640b70dbb07bbe6401983fd0547357dad47a854b4c87119727d79f5ef54789394ebd5923474d2ad95e59a55d9340cf84811b5f2d5a94e406e8c7f";
+  sha512.doc = "0bee390919ce8ce6082c2373f639db7de1029d0830d4cf9f1c807ef044e0ba27c8f0e4dd37677df63c03b64ad00b27825cd703973776377f844324846a908edd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+moderncv = {
+  revision = 62128;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+    "fancyhdr"
+    "graphics"
+    "hyperref"
+    "iftex"
+    "l3packages"
+    "microtype"
+    "tools"
+    "url"
+    "xcolor"
+  ];
+  sha512.run = "988cc5f400af4ecdfc0730a63d7f2a13fde81b9120f198622a5e2d145ca94e1d5bc952e261ef2f4cacefda8a23626119975fd1e00b44f4a66b1fbb7f4c011d40";
+  sha512.doc = "9527fa84fffc4eb2ac92dab59cf0e5ae87a6f5befd4ed05acdd85cc7050dcc669f8b814ef928e69bb1c1e8bb3bd774aca1f85acf6b750a1c9555a3165eba0281";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3.1";
+};
+modernposter = {
+  revision = 47269;
+  stripPrefix = 0;
+  sha512.run = "d631f058a0a17a841d4026c43fd086cbefd50d0ece85563ee81e34440650bdd7d3db6dd6f49d5e74278872961300bbd443b896586f5c7ea00a9ff816ef20b7a9";
+  sha512.doc = "385c8b97c57053d861d72b4f10134cbf2d943e4bcedb55ec42bff51000843db3fe30737f7ada3ce569c1d96584ec0df80afadc39be98c16950828647165f6801";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+  version = "1.03.1";
+};
+moderntimeline = {
+  revision = 55518;
+  stripPrefix = 0;
+  sha512.run = "3e32e360bd8249cded439fc563c8fd38e53314fb468251368aa5311463665771748b605c247c63e8e5aea2654dd05c4b12aafa073190b883d21469bb14333de5";
+  sha512.doc = "018ad6b095dca602021c45e04a526597ca61f5bb6ec7adb52d86c221649c4b3be94761e826d09ed9772c0628bd9d719f6a4db6ea1411e6d34f94f8c049130855";
+  sha512.source = "e86a6e1175c1d86e5c0b035ff925107ad0dc80e00f1815161348608e90a7ed5bc9828f896c0d072c386cf695a5f9d1b894eef2c864d403b74a75bc89a9910510";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.11";
+};
+modes = {
+  revision = 69113;
+  stripPrefix = 0;
+  sha512.run = "71e00fa0f1c3cdf01a6d49567df15b5a9119005ea63a2411680afdd0b423fe0f66a13f01579a379883969cbaee5535a4d338a9659196d4c95404b2cccc321cee";
+  sha512.doc = "32135a28343fdf1de2ff2cc25ae78920729c34f777ae6b147ff85f80953eb7610bad5e1a8919d6d873ad45fcc9b51cc9152e9e2fc566d47a57f7df4e6f63f5b6";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "4.3";
+};
+modiagram = {
+  revision = 56886;
+  stripPrefix = 0;
+  sha512.run = "3da30c6f2759d1beebc0f33c61846343b505da9527f2a34ad7e622958802cfd08e1da9ca297003330451aa913b45c872b4eed4cad3f5bf5f8e597a2b0800a09f";
+  sha512.doc = "cc0513fdca073761b8f6f9e34c826af2de587c9c6ef47bbe54b45e60427c5536a2c4743e2c187a9b089eeefe82359962d1081f5dd66fad9072e4c7adcb580763";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3a";
+};
+modref = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ef5d822fedbd5026903fb7d2630a837a3a1b0222150ee1a9f72a54e13d626a0387abd1fc20b18a257714c63cb65868ac885f8340d35c5453b42323da3b9b0782";
+  sha512.doc = "f7539376630672b6fc67821045eb8c891b4781d233e1b914f8fc5c255fdcc57ecb6e5ef4d36ae72ceac185e8d2e4aee42741538f27fb3ab1f5160855cfbc8def";
+  sha512.source = "370a7287ed60084ce3d92ef722bb1b1c5f49faf6563a154dc2fa2442a60eb2ab06ea1c82d63e5c887b8aea859f9e647a5d80455f9cc87746d2c9be25f4920b47";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+modroman = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "3314a474cdb88e517fd16943b8f1f1da252608bc5505bd91581e87bca19ea317718d36694abc670d471d0028dcb5fe502a3be1b1294604cecf619de235fe63c8";
+  sha512.doc = "5c6ad1cdad66a5a7285b7c51074f724670880d4417df45cae51e5b3b35bf5cf99f374f7abca73c7ae68d12f626e4b9bf0dddd6b2bc94250c4e6146598d4c5ac6";
+  sha512.source = "21e8a2bf6f1d58800452dee77d7a7dc89bd8c952ced6f485b42a2e0b6300df9c823c23f4ab3327d9a367ef8e8d6ba1bae27d3c9bcf875270053c7fa65bcf9f70";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1";
+};
+modular = {
+  revision = 44142;
+  stripPrefix = 0;
+  sha512.run = "13d80f572497551551151c35ac32c09cec70cd40c6d99d36c22ed84bcef509cbfafd511a8e2e284cd06ab1a57f4be7fe556d7e390f9d30135bd20cd49acf362a";
+  sha512.doc = "7d7201db0a2791700748d440fdc5cca9d8d274ceeacddb3715d99b68b4c04f52949e8b9897377168463059deec86177470a997bfea7a32a2765afda713aed499";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+modulus = {
+  revision = 47599;
+  stripPrefix = 0;
+  sha512.run = "e5dde62c2e0730befb63612bfd6ea3626463db85b74291df5937d8f7e1995f6b63c8bc6d7e08536ae761457ab1e9a0ddeccf11afa4108910561075dcc03201f6";
+  sha512.doc = "965d03005ef257526ffa6667d889a4b238ca5314f4fe8714bc8219ace1e909eb5765da6c0dc94e9b312635e0f9ca096f1d14364effb0045ed467da7c1d735474";
+  sha512.source = "0f33d1d241e0155eae39875b0ce72019740771c2e36b337255a0865cabeae78c93e24d7f7eddbe7cba9ce312090b251b26a632c260e097a2619d35b47fb050bb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+mongolian-babel = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a4e7abdc0b5817d88ad442e693fefe79df224a74f37d09b630fd7ded16e1335f563ca00a26aee8ba4b46b7516c0fa2f5dc9d37ec00455b11223e46a6e289cc01";
+  sha512.doc = "d0aa4f4a7f1b22d3d3a6a96b85d4d72acb71ee6b1374b70008b966ca2401b7b9434bca675601cc1cdf2f013520eb82c2cb193634b3ac9f9b9d40a201d10dbd58";
+  sha512.source = "07e75b2c9bb6c7596d698e0f31d8194ab5cc4e06f5ca472cc706214c342960378376406bdc0eef0940ac0179e989a92af496069ffb25ed75f5b3a0d5fe639517";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+monofill = {
+  revision = 28140;
+  stripPrefix = 0;
+  sha512.run = "6b9a45c32bd44aa01119c7bd8304ba8e5953422c14bfeaacad20f012188f9204c19f432719c74d9481a00611a18d4ef1ba2c1dc858b83b8a25205d40568e5fa3";
+  sha512.doc = "edb00621e74238c09d0ca0c04e5c57589012ef2272f0b470345845ddedd647c73fffc0fcaf4741726214b2419e9581127375ba2b36948ec73f4caef561c3e57c";
+  sha512.source = "fba90d74e9b12086fb4dd431eba4bb3349a83a2b839db1f1a1f7f076e3568cdada03de56570bd38e937eb51a76990ab39778a1832ad233067025ae24877b279d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+montex = {
+  revision = 29349;
+  stripPrefix = 0;
+  deps = [
+    "cbfonts"
+  ];
+  sha512.run = "9676cef9e0fbe7a0196b1ea0fb3ea4f0399a3ee8ed76ef06e824848a57922dc4f7cc1f50a1fcea47fc265465407653447ab80e80dbac3c4bc00488d0929f87bc";
+  sha512.doc = "1965f31e28a9f54d86a495b4b8cea50dc59f409d066918dedf77f86448b60ea547565dcf2069ee0e0a646d53f34d244868600951c4b1a4d4e099fe50e3c2b477";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "IVu.04.092";
+};
+montserrat = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "58c8b4a1f6eceb10c7fef8e6dd951985ae6108cb3f93eedf20949923237cb8af6a834674dcea48b1c68b51284ef37fe2d4120d52fee82753fd873f60b585e685";
+  sha512.doc = "694ee7f51b0fe1622981bfa636263bbe18f89ec481071af587a683648f4ee900d9100864e51669d65b9952e6acf64794b5610989d2bd86f6e4701e1e41193242";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.03";
+};
+moodle = {
+  revision = 65672;
+  stripPrefix = 0;
+  sha512.run = "0a297097f864ed3dc8c9d263a6a3aa8930732679a585aa34e2e5b31852bdfc3cff40118d3b67566816dfeda0f74282a476ad8b5ad793d2c433cf44f41f7c91bf";
+  sha512.doc = "ee40b07bc0ff2ff75f18eeb9ea68dec0a624a1b75b81ac00ea9c5caae3f6232213e1a5ff7028be28372cfc43685f4004059d972176eaa2b18688f16f8ef2ba09";
+  sha512.source = "02754bd2d6ec9ca07e07b3768855cf100d09de057ad7b3605dd7a97574c7f8024028ca882b3b6a1cfa25e49ec40400690ed7e7e1404f0836a9d6158cfec30bca";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+moreenum = {
+  revision = 24479;
+  stripPrefix = 0;
+  sha512.run = "069ef44faaa8847a07ad00dae31c1b63278d59a560ed90823100cd601850a798f574d8210c07854a8b1a90165efb3bba852e100e53aee496f78395e3d6defade";
+  sha512.doc = "987a1dd96669b9202846fc604fbcfb935b68c79d13bbe4599f32fab9e869ca5b60f3b4bdfcf78d3b3f5102db9ab16955ec13958c4cf3df7ec64649268c226d1c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+morefloats = {
+  revision = 37927;
+  stripPrefix = 0;
+  sha512.run = "28fd471aa854852cc2a48597dda19cadda3c92c589d0419b8d36e044f9c04e406037f162e1d02c1f4b20a6288efe4a689fe4e03aafbfc6b06cf14019f7e880f0";
+  sha512.doc = "f542aecb6d3868559cee66a7c153dc80cb6aacebae40c0cd0dd120c4230cd358b4d2787286cb3e7bdfb5565949861a35af65ca616369585b8f28462a2b1dbcf6";
+  sha512.source = "7f527c20294826a6d7e1c3ff390ca02f521e9b6824db41d078b4132201d1d7575cb43eebda9e66e8226ba2a641db692ae2d1f1ccac5c4f027851b75100e261db";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0h";
+};
+morehype = {
+  revision = 38815;
+  stripPrefix = 0;
+  sha512.run = "698ec10d9e70dc1b89ed5094369359fdeffb663ca95513b7207aed065515a66dd2c82b4e43d14fe271c9851e72a44e9c2f6e3baa177ed9430f89e88bdd692172";
+  sha512.doc = "2600045257c75dd15320a2f188f5b043358bfdb21ce4a19af2d1a696141a2f553da42c13143d14c8ba136fb1ef7a560684ac47c5274738c747f729a00b02a099";
+  sha512.source = "f710fd59d5c99d7df8b84a365a8f8c110ac7086699f36d1851eb7fdd27ed43212c403c14d9f9105c78402b278d66fa77ca2f50a0253073f55842a60fb19b4c1f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "r0.83";
+};
+moresize = {
+  revision = 17513;
+  stripPrefix = 0;
+  sha512.run = "92f67234dd9c0429798f9e8001a2d4b7004e11f2fa90130b738670e6228f45ebca3ba26ed98616e3af5c86148992f9915e3e6a1cfeb4c875fbd20fd818743525";
+  sha512.doc = "3c1ed984163e2adbdaa7e94439e160327515f1c6999e40114819d8e5250e090c932909217d37d1d07fcb108c56ec50f294324c32523995f68f57fd918983a412";
+  sha512.source = "701a2ba72c22bed8397350f92023b0b1d1587b837c4fd247dabe5860cc32e58499e8803a0286aa9f9e3831faff8b9ce0e74ac1a0f82d798a2f7f461b015b5809";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+moreverb = {
+  revision = 22126;
+  stripPrefix = 0;
+  sha512.run = "673b7ab5951e418fe10622fb1a4b4a420c4c436684afbb1474c58b7aa7b235f7063555a220133257b351b5847be5e880714e44ca49bd9198a4306c0e821dcdde";
+  sha512.doc = "27e4f361f5d7193c97629debec048168045bc38e353f677829677cb5ce5c0a9ad8f5b2576bd9f870da8dfbf16d745e489ba79e3dfe6aa1da8a9cab1ad72ace06";
+  sha512.source = "55ec67b5b9616459a776b0ca386be19cb6ae57fa2a7bde1f6a1896233f4f303277474d629c884e40bcd8d076522ab4e41fbe8850304dbd33469a1f21750c81ef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3a";
+};
+morewrites = {
+  revision = 69306;
+  stripPrefix = 0;
+  sha512.run = "9618e04c51865b275ab262d0e95806a7fbbffb4f6063b87644f3111760c591be6b3f8684fe72b5fdf0ea3dd6e034f88d5fef0f9c378e31bf44617727a76b98d5";
+  sha512.doc = "389828d2a8fdbd9f9b5f20f3c71654f4d23e9d23e5af8d98904b35bb8d8d939f4641bf74d43e3035ff73310f0324f21a47d56cf6065af1d04d96f34418ba1157";
+  sha512.source = "2794f2571cc3158f92453a229d088f24002ba893758f521da13b1229c67de24573752c07f03a894605704dfa19a73791903055582fc1729814a350c09b0735fa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+morisawa = {
+  revision = 46946;
+  stripPrefix = 0;
+  sha512.run = "7f149fab67905d6b21670becb1c3e3afbc8fb4c45fa3c376960e5a87d7fe17abe091af63930a8385b5bcb63e550fc0b9bb16d522f50f90b911b09599dc5ccafa";
+  sha512.doc = "7af68b3a8233cec22efb49e8131c65e33db4076ed4f254f2d62f629c03d0122e8dddc3ba68d283affb5ca663d3b1f744780dc98c14eadfa1a69028df281e5bb2";
+  sha512.source = "7e3821bc1f5dad076307ebf00cacb68cdeb9e18a060c9c024c0fea85c558f7373f214f16952fa643f8b832376101ec8c8bb839a902e6e8213912a4cbc10862ad";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+movement-arrows = {
+  revision = 67270;
+  stripPrefix = 0;
+  sha512.run = "42adce39a6f06212f5d6c3c235ad79772064d8b0588e3f79b34ba7f3a8530e08857e5a1612051ce6c58e419b0ea4f1a6012b19d8e37ae20ccb1a20c11f9894d8";
+  sha512.doc = "d1f1856297ccfbcd42d05524d633857ce548fe5b5c5fc84d76239a2cd62989015ea62f2fdcb509e918e47cc176002fc5467c7d721942f674eb4cb405dbec1be7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+movie15 = {
+  revision = 26473;
+  stripPrefix = 0;
+  sha512.run = "a45726b24f76683c44b0f006d720695c14ef51a260fa00f3223a075e48173638dbc9d9d361fb4e1f8f567cbe80f65d990aae485b669901a50d5b18750640b103";
+  sha512.doc = "4df2fec7f0abac6ef4d948285b3156bb9489a3b7b18939fa109abcd9c537e383d505e308516e1bc852aa5c5bdd6b8825e8f7e887c9787d7c2d337124942cc9e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mp3d = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "e5899aace25cef3a690150cf09e76bddc008f426800588ef7d21361229b0040dff74af7b43d563b05d8c3d16166e34b5a21e8e25ae3e97ca80e5ffe5c4925392";
+  sha512.doc = "2b64199f50ae5b0e6528bf041ac2422574f9adf467183f3ee3d58ebd91317ce25937699be29d0a5954565a4fd326719f11bc04a35cb4938489696ae479d5d7f5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.34";
+};
+mparhack = {
+  revision = 59066;
+  stripPrefix = 0;
+  sha512.run = "9a4e5a08320095095538eea8c5c5db5dc6d6c99ca3e3a3f5568228b8b52a4b1de98c1118b09626b58ef897f6810d2b43d2b5b416b3687e1bfd3a01506460bce5";
+  sha512.doc = "fc4cff80bbf20460e28f8d5a142e8994cea7e017391b147a47332b444fad0ff8cde1e7bb29159e39f8c14f4c9881ab91dcc0e2f108cca1534d4335f5b6b32a1a";
+  sha512.source = "1eda2d1f370141d0a5b0bc15f68dd40b9dd72017e8cfc75c71b19e2fa2ccfef7b1652d5c035c8ab6120e12089bf469b6e6edadd7997329da6409e6248bccc5a2";
+  hasRunfiles = true;
+  license = [ "gpl2Plus" ];
+  version = "1.5";
+};
+mparrows = {
+  revision = 39729;
+  stripPrefix = 0;
+  sha512.run = "58e4a909374486cd2d4313d62a49e4e30a5e85f8ef2cc0d9a7e734b546ad8b36e3bbfb96f3eecaa9c10b8d7b3b1557aa9e0b5dae5b4547d42cabc64d2f2949d3";
+  sha512.doc = "d1ca204228c1bc76d4f15257687a865c650fa83742dd126b3d7cd5e93e725b2da31eedfbca9a86e93eaa08df487b0432cc41f0d4fd2f99951f874691acf47016";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.1";
+};
+mpattern = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1efc3f1f1c93456a3038ae5037ad5dcc4b177c57852f7db475a7ce6d2002559b370ba22dcc6d312c68ba75c03523cdf0df8546fff8dab032832d3ff3148b5d65";
+  sha512.doc = "4ec7cadd89449ca049fdd723de9e29f20199a630fc28585a4802e3ce3666783822e4f0769907cafbfb0fe097b1da4a08d3e5e5f4038ecebbe9fe3543dd3413d6";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+mpchess = {
+  revision = 67704;
+  stripPrefix = 0;
+  sha512.run = "b65838b9b3177b069a2e8e4141fdb9ae68ac1dc9378c9fe7534fd23556d93ace29ba1ed9deaeb53fd54d709b77ecd98d9d0fc79dfc8e77b8eec899d4a332bc3f";
+  sha512.doc = "c859e9f5df0d24bd1eb59dfd39dc97cd1ba6e713b33e37d17128388928071e2da8f41180da333fea34ee6215585208de193a381205fd866142f341e1856485d2";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl2Plus" ];
+  version = "0.7";
+};
+mpcolornames = {
+  revision = 23252;
+  stripPrefix = 0;
+  sha512.run = "9808706010059e8d2683f88a47535b8039049681e5a9fdc013cc384bcacb1910cc7ab2f7614d35ed964c28507bf5fc062fe4db852afa45f9d9383c367838eeba";
+  sha512.doc = "bfb9ce4c85de655b890948897deba96a5ff60cb7518b3e198cd0b088b63670531f29bd84dbde4837298a24f36dac0652f2d2d3491dbcd7ac8f9e57de6500c6dd";
+  sha512.source = "ec29085382f6464b10323680488140b483aa09c9df050806a154fce60bf92feb7d4e04de444d0fb4b1623c6ea3506ba619bf0fb2477f048fd4c5f2f0be9f272c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.20";
+};
+mpfonts = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "7d602bca0f33f83033cbe15cb2376d0ae023a4d02218f10b64965580842f269a7065e6c2154bf78c7a72a46abd0e41214dea4d2f012f1945a17fb5b8cf0fa832";
+  sha512.doc = "4aa1296012f4ed3483f444320d7d28d942823da0cd58c1350dc4a90da1fa5e51cd5bac86f257290c720f9808b74c2cc87c49f18882073ac44ef7f577248f57be";
+  hasRunfiles = true;
+  license = [ "knuth" "lppl13c" "ofl" "free" "publicDomain" ];
+};
+mpgraphics = {
+  revision = 29776;
+  stripPrefix = 0;
+  sha512.run = "5d711f7a981f701e11874916fe8d22fa237404dc119fc2d5c8f8e9b3eaf8feb59a63023ec30f0c67d304839e4971288a669d70a697260af35e401edf00673adb";
+  sha512.doc = "954c8e3a8a0deafea163c9bea9da6bd1c27fcc9b5270408fdd29f0051ece1f4138a0af99808cf85279823cb48475b8e21b3a450f021d678fc5b2fbdf28e55320";
+  sha512.source = "30e7324760efabffddf6920362ba213eb05fce2658d9a442677a2f8f322695d5a361b1d183c4f775b289ac116d586e2466be46d4ea1798cde251132b95a98bdd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+mpman-ru = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e234fc25e9d8e5aa89a59e21186a16de3c695ce45c9ee8d132546381cb18e9be681bd4ee9c70bb10b4769ada5e5874b500d2a3cd7d264d89610dcda35fcba9a1";
+  sha512.doc = "57f2449eaed3651b808095348f056fdfa90b00979ba2e21fad120efe096dca9a9e48474e9dbb539f347ffe20ccd5582f4815ff4552c54e9ea5f9df391dd75edb";
+  license = [ "free" ];
+  version = "1.004";
+};
+mpostinl = {
+  revision = 49559;
+  stripPrefix = 0;
+  sha512.run = "0749fdf4c54efe9b8c9ed9f735a851a0c0b08a9092679bbb80eb32a80ed6e7284094a043e27721dacf8112b6898a8c5f47bf0b0dea4af9082a40bead0599ee76";
+  sha512.doc = "ad639ec50e5b71a1ef02bcc04cb1c0b195e9ed2cdef9ff8e145d17cfb34dd853d96449620f5d0eba614154cdf6291902316f4fdfbd179a112cebbe2a059acc70";
+  sha512.source = "44ff22f1fb0496422dd760b786174e520643ae9c2b8d3b922a08f9e065708fb4c292169e58cd328381c29672d0526c13506429c55eb57100e96f876324e6fbb6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+mptopdf = {
+  revision = 69363;
+  deps = [
+    "pdftex"
+    "plain"
+  ];
+  formats = [
+    {
+      name = "mptopdf";
+      engine = "pdftex";
+      options = "-translate-file=cp227.tcx mptopdf.tex";
+      fmttriggers = [ "plain" ];
+    }
+  ];
+  sha512.run = "680851a49d124cf0e2ff0c7626dbb5c5e48358ab08c94906cfe019fa2066dd3b47c763c7985a101d44ef6a6bfab3b3f72c88bbc1ad0eca0258b8f6467ffc0ede";
+  sha512.doc = "46b4dbe5a903601078da34238dc449ad932dbc44fdbb6df33b53554fbbe8d47307ba99e971ab197e468a8689d731f989c02097ca2b8ab07c575ec05e2866e81a";
+  hasManpages = true;
+  hasRunfiles = true;
+};
+mptopdf.binfiles = [
+  "mptopdf"
+];
+mptrees = {
+  revision = 66952;
+  stripPrefix = 0;
+  sha512.run = "a3579aac7bff11c77416bf19447a429a3f56695bfc105f1218ae8f7d531adf0333ed73ff1fe93bab8af2ef590d6157ffa3c363bc306d3e81eb0d78766aa7871a";
+  sha512.doc = "cbf0e2660c7e98697d2441ae8a40d69e9855ad1eeb1acb3b6e140557caae3d0f09619aa24a0c0f5b2c44e133cc7595ebdd6e7ee4e8809f92ecd759f0a12fdcaa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "23.04";
+};
+ms = {
+  revision = 57473;
+  stripPrefix = 0;
+  sha512.run = "73d46ed7ba85773f4ba7c261ff0ea8f2e751e53659fc19686bddd9523b160dba5e367c8fcb30a20678e4a3df26c0812a6b771736eef8616e112cbac3a25e7b48";
+  sha512.doc = "d112ff182da85ee8d84d8e7cfc50e5c13ad2e555ffe4dd2867a3439d69193ec7bc24fa87d2527936a57dbdc8e98df8d2862a740f91d497a8eba7108973a637aa";
+  sha512.source = "b03f9ac6bc7ab56bacac4053d278d0c826925f4f81df80e73ee2a48209e1e51c48b0706dbd0d69ec9a068e4a59a12df104b8e7dfd60cd0cd5c6210f43d528ce7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+msc = {
+  revision = 67718;
+  stripPrefix = 0;
+  sha512.run = "103ff1fd368f97920f5403691ccb5fafb34c6a291db5d76a83d56f64d1ec452386cb844dfea7462fcec573d86b05fb183034ae8968d7127f4bf425aebac1f087";
+  sha512.doc = "e336c0969d2f39c06baab3f7573109e11f76acf47767f0653996ea772bc5fc4ac801154c5fa0df2eeaf999699aa0d61c1e7d223b44248fba72dccc8bc1b86663";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.00";
+};
+msg = {
+  revision = 49578;
+  stripPrefix = 0;
+  sha512.run = "9419f306ccde237320abe22fe192a2473785244fd337063332a242e029b8650404df7f7d150b196d3bccb0e10e58e25e2b8aefb15627e89eda8636ddc50599e1";
+  sha512.doc = "85db0022daca5aeeb50e2eded6214a3b144012bfd0bd433b4f9474307c2a37e57c7a311385b8de4efcdc4e462f39c53f6a5fcfac2eae7263e2d1583b0ba584df";
+  sha512.source = "988d410412b2e7b3617678d0cdb2e8059f7261d48b942eff588c472ccb29e022a3e10ae2302268789331c20705ce062f0930ef53bb785245923ba199ed71b15f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.51";
+};
+mslapa = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "28a13eda4b10f25e4887feb44f64e23cfa683d28e57b66a64d2a15c627e5f7aaef36e9fbbbf3c2320891a0bb9a5270fb59ca9044f1822402d82bc494f41dc3a9";
+  sha512.doc = "b53311156cb6872ec996130474f18d8735f9fbba8d53258638f78d498b3cb294eb490b6eb1460546dcec39258e0785401dad5ecb66c82e2cfd7814bfa852908b";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+msu-thesis = {
+  revision = 68480;
+  stripPrefix = 0;
+  sha512.run = "a25f539ee6eb50450a603b25d6639918118a8882df16fdbe71dee49f09045480b80514994079f291120d6f3132753a90cfe3a7eb5e366a6c8b15b6674735fa85";
+  sha512.doc = "da32f1f22664d0bf05561a4d99977b942c95167a2e325928fc05714bf59a9f8aaec302f278685d0fae90b8511d246a156936101f6a12fe76a31d7aaef5dd762b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.1h";
+};
+mtgreek = {
+  revision = 17967;
+  stripPrefix = 0;
+  sha512.run = "fbc20f61e1d4e9d3ebf4a92216c7c007f2aec2b2cac0aca6e08f0e1ea5f6f405a32d947efcea0057a025a138afc85e0d1486191ee82fa9a0e9f2f6e2542a9e11";
+  sha512.doc = "49631058e9bfc59dd38a7e0e2134f6d9ddf68779a6f8087a056a89fef975154510496415b782102dfeae6b5563527fb6178ce301b004fe33a4dfa8dbeb4474ac";
+  sha512.source = "d69c6248a4d8fbb9a64cd539e7f66db5373f9551d27c98b755377594f9b1680a323719599f5963972d169399a0686b5e6f500148cc54881d23d8adb3b91bf4f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1+";
+};
+mucproc = {
+  revision = 43445;
+  stripPrefix = 0;
+  sha512.run = "02ee23aa25152e80e8dc2c57f14b99c70ff57c38175498c179e505a76d967f826acf076cae2085d305cde93964f03134fc6d1027e0669acdbaba5ed5ff6efa8e";
+  sha512.doc = "01d154fab3c0ad8db790b5a22fcc4cae7a5beea1a2850f5e9d6fb1fcdc6c1071c2dc294568451f40db5455826f78ae910be9572de5a4a7d870e3a18a74fc0082";
+  sha512.source = "f1ce5b80ed1c79cdb5939fda97b18bd263b313496a98cd7940e990ff719dff9e633d636505c0d538f37ff26a81c33d6f625f51a479e5ed6f949f7b3ebd845917";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+mugsthesis = {
+  revision = 64259;
+  stripPrefix = 0;
+  sha512.run = "f86bfd4362af798bc435bf6ad1f6ed6f8cbafa61a4bf273a196160bedff21d349c1d4294e63de5a2c925ec3f5918dbb6ac4f5c8cd41785ee715cbc4e903aa226";
+  sha512.doc = "18b239e98e97512030a55a6a9d071e2b53ac34147f121d14687dd2e68acf3cba3bc7c36c7b64dd3221121a37cc7665cc71ce0012218ca2f8a28eefd6ef46bc3d";
+  sha512.source = "8615a13f214ceee375685ab995ed91cf8521d213e311809561009f2d43745c5dae8b126ce09412a23007376e02a0b9a8abc021b2e5b8ac5e390e07640704f255";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+muling = {
+  revision = 66741;
+  stripPrefix = 0;
+  sha512.run = "5a955e229ffe00e276c4ee4590473ba9d137d668c63294735ecefb031f2a01b310723dd2a5cf37b4c9613793df39146d08c01e2109ca37fe1d9136903cd6aaa2";
+  sha512.doc = "9eea5504062340098751c51d99433f91e95bfe74b93f584e08d3c6d1ae516f6d8a18e8495d10a90a4c5f751f44854758a3a8779d56ae158397f35419218aa01d";
+  sha512.source = "fd0a41543e4d20ece031b9d2143a6f4196010141dac7c3525d7dfdea17e93ce1c6602e78c00d4d310a9ceadce2d9042140b8b53deaa95d665b3fc043042505ad";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "fdl13Only" ];
+  version = "0.5";
+};
+multenum = {
+  revision = 21775;
+  stripPrefix = 0;
+  sha512.run = "e73e2d3fe45f562398de752520628032fea310e5345a247472a2807618b72467b245995f32f21474dcb5702106bf32d6394508a96c4aeae4dbeaf6fdda7bdf4e";
+  sha512.doc = "889ffbce149b1f0a98e22a1ebcafc60e29858d08b57e2e567956830c679515759a6c8209901641e3d77ded31238e8fe93f7e4cdff95d1be925e3972c9005f4a7";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+multiaudience = {
+  revision = 60688;
+  stripPrefix = 0;
+  sha512.run = "a7d89874dbe314ab37cf42d8d520e234764bfc3fbbb6c89e47be95ef83bacd170c290bae005830286e206da25a68939ed8ee60cf11ad3f5ff9d994d568638b86";
+  sha512.doc = "b6023873f5843ec7db13e551417ef4c31a2f622372f32b4ad7af1ab155e3902185b06d6f2fdd432bf582f3da8a5e32e985fde93ae88b7916062db25021a641a1";
+  sha512.source = "8d528b7e27f8883846386374cc936118a9537f0dfabc71c3b993f105dee381f0cd2b40e16d5c48df01b9709f902479ba87c6b94278f6e8be98beafbf9dd3e4ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.04";
+};
+multibbl = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "419f7bcf8f2226cf8c60119e30da278bf6138f4e1903dc322da33ca2b22120e50b205dc0bb01b46cab0c93fdaacc37b823a812121a731fdea4cf03354d1b0690";
+  sha512.doc = "68a3f99cbde27d15fa8b56730f4e9f7587bcecfc9a6ebe19a7811a29278cbe21f214465942bd4ee6cc28833b9614dfef14714dceddcdb041d5676ee7ead810bb";
+  sha512.source = "be2bb39e0267d6a008dd3dab1d1fbfc22e38017656f6fd717e35d3252def115d451a1eddadc6fbb3787bee901b43b09327ebb0f676ee452db71196cd2299778c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+multibib = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "82cd48cf9097b36664d4dcfb5d73dbd6e961c2f0a8bf7816d1bc59a33cb6d2c65e0f63a9d1d596dc9faa4339536746089e34bd1b510e1b2c0ea272df5840e396";
+  sha512.doc = "1d4536094c09755fc91b2657cc0eb0b0b2fd8d1c5ca37bf2f046b62a4b0be6f83a93debac8be3c5481651dc75cac2066962556370bd84face6b03aaba24bbcc6";
+  sha512.source = "c7777e3c32833538893ae463d8396f894b390f642fa697b8ba237cd7183e2bc7cb86a9773530962f41372e4ec016eb96c7a060dc63081b2faf29248a65f14a1f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+multibibliography = {
+  revision = 30939;
+  sha512.run = "faa2e16b8bdb9309e2f16cdb2c717b59c8ecd5d73e4819d72ee3226a80fe0c0ff6b4d686d0f1d009601e0d6dea140cd4812c2f4cb94f37b5bd9cc1bd19137965";
+  sha512.doc = "3e13c8c60ab8091a363b63a63259e53e3c5076feb224a6f426e55a351141f007ea8bf7526b0f80684c83e4e97b43f5f05217e254f978e8b69665c736efbe8512";
+  sha512.source = "544b3778bd0a51e99e89e18e606d37551576d655a01b46523786d6f910cf84b3886a8b29c72b9e0c25b3ae629045470b24e2741d7894f867437ca069cd692cb4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+multibibliography.binfiles = [
+  "multibibliography"
+];
+multicap = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5e4a4eebd7560d4aebdaf7035b9bc14116a32cb2e043aa93afb9f95eaf271fdd75fe7d2b6296d36327d7aa5b14b52046b0c941ae949584ad27a2b89ebe54b6de";
+  sha512.doc = "644f46fa6431f0f7bbbdfed8a346887d107c8ff7c8d5b2c826b16994faa48d83ca59cd139c16fa144122e0425e6a2c592762b86568f17fb914dd943cdb7eb808";
+  sha512.source = "95df0571a8741db7d0b4d3ab0fd0d1469c531a00e3cf524977fe2cec57c3cb9ce9cf3c3136b42a8d0fb8f9dea2e8f4cc6f07fa48490167094e04c0e688d45527";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+multicolrule = {
+  revision = 56366;
+  stripPrefix = 0;
+  sha512.run = "46c8745965a2863f3ded3aff6a910e1971d9aa3127a33c36431d68d1150075f52444495c0fd16fa1b737d2f1dfe7058879f7a50003f763cd0d28781f62bfea0e";
+  sha512.doc = "42d7798d38abce4454a726dd2998b94e4171bf963108a8ed18b05b5acae739e19e8e1189e74cfaad02f4ca92b32e7fd0afe9496fbd35983574da8607441a2295";
+  sha512.source = "53c008ef7b7b6505a592ac3684ae51224e9a1d7def82822a376b7b4b6e6f1ccfe3cb2e2dc677efce6ac3807b5ac7424c34003df2006b8682c89ea78a060178b0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3a";
+};
+multidef = {
+  revision = 40637;
+  stripPrefix = 0;
+  sha512.run = "2d15975c8a191cc08925cc8cd74b982af909a7488a68e4b6f5eb4c2ba0dc94dbcb40c4347c5c4774fda24f98efff52131f6a243e1e6bdcb4dde7e683e408d6a9";
+  sha512.doc = "50b26f8fcfde20dd04f3e3701d611631c8914e9488a3f87d25e0c60803090133f9abe889b449c67a09ccd5053c67c4a3ea699d52d44480051391edaaa7ff9ef7";
+  sha512.source = "4f506eef5dc2bbb8c740d3b25c00e21a56ccb02410adc85788f2cf2ec7da81531ec5843d0a29931ab1aea0b4e8280eeb235b6a97505fb777068d902199cfd084";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+multido = {
+  revision = 18302;
+  stripPrefix = 0;
+  sha512.run = "5c861bddcb8b2bdb654dc4438621834a68b2bca102799317c9a220f9bc9bc4c9d70775375302a85736f8706bb7fbfc1a4c24fae2f850237e8f54ad521b1cef83";
+  sha512.doc = "8cef36438fbe57c54f625b178331f7a6ca19854abcddb475283fc0cb4a362764c443de05989245e962dba9e2e4f17734533502fbd4b2ef4fc8e8c36b96bc68ab";
+  sha512.source = "3f3f6f5813ab1da542ebc9c4837da72339804866875bf225292d8a36ebf54b33f12d3e84de9d0b5027d3e8889e10180649a19e25c7ec6bb532296e9e204e25e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.42";
+};
+multienv = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "04090331e44ac252dcc6929ec995cb0e6d38922729a6af99ba103a833d1ac93f7553d9314359cc5b1ad16d16757828e57059a6f1f8bf2892abc41b2d901fb15d";
+  sha512.doc = "29dfcd04a9b88d6da8a279b021e3178652c388a9afce5063e863307b8030fce66dafd48ae2a7e18f1e5e207f0f11b4d6c8da035f0799ddfc47856b7651d7fd9a";
+  sha512.source = "5c636e3040ec84931a7188151eff2eb4bd2696c4137c2e2dc27dcd2190cc316e3c75ebf74c49f0eb6c8e43900e87410c3ad414dd623c045f58ba1d198ef630bf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+multiexpand = {
+  revision = 45943;
+  stripPrefix = 0;
+  sha512.run = "63f512ca5b9649c86a6936cc2407737e41afd6c6a3b4810fe81155a5b4127aecc538303e26b91f53decee900fba7946e90a46a545b3c9caafb3e0863940e0009";
+  sha512.doc = "6b8a727aae2d314877df551ca5804e84be0bc530b4f09d8bfe6a9c1a4c1eb98647257beeb1813a183f0aa5422b0041443e817ce11b6db70e4129e3edc664e788";
+  sha512.source = "197ad74e02212405fee0c79ea03021172e7ac5a99222e0c0d300da6a141bc694a2957c544bd357fb67fcac24acbbb4059041bd37f607b29f5f763b59b70613f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+multifootnote = {
+  revision = 63456;
+  stripPrefix = 0;
+  sha512.run = "928a2086fdf167ae23f851ec6da8cd84a012e85c97f56b7ed62fbb2873cbc6cf2793a02c8c23bc76f0bae3089edf9c594141a9029920d9f1038f7cf4b39c5e23";
+  sha512.doc = "9e74a56d5d27506e354d0d68b4639df92ba4d017354e3f12bb2c9be33c210eef6cd2ad3dbcf0fa17b75b0c938da9407f0b4f9ce3e5fee000e2840d702d28fca9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+multilang = {
+  revision = 49065;
+  stripPrefix = 0;
+  sha512.run = "57f9829b100068a84feb8a09a94066b93ec5fe70daf831ea99604089a4fc2f67af76f79505a2eab6dbc8f2b025feed6d908a1f24630e27e0f7606c4a3ebb71ca";
+  sha512.doc = "e611f2195fc4f7083d6343eb3554a2e786fd6522383456544e45346481cd57d54b0899cdc6ffd9edc4b75567b1e092ecc597bff660d849e0ce2b3e2d1bd55507";
+  sha512.source = "1e52e9c740d0eae4f89eb4a65e1d12b3d5f159cd6c938f729bdd019ccb8bcf98300a544fa7131fe214cde9b7b58f9b64a771a49513f45943c681893fbfc78b6e";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.9b";
+};
+multiobjective = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "80b0f340f19dff329cd9f0fc32cbb9a8cf690243aa925d6687b9da345984f9eba9c0db7b62fedd2a54f077d841b9cbe91e47c98140f1cfeebdb16fc05408898d";
+  sha512.doc = "3a7c68054a85bbad36b6516c52ea74c35ce11c5ffd6f3d1f235ecc2ea55209343a4ff609857877094fb7f8861e8b7c54c8c979d06cc3b3583fb64e997372ae9c";
+  sha512.source = "99b9d17438d9f3f8a6ac40d0e705371d255af957fa5dc78dd6d98c89b515cb5af7377b5ac11558c84c7908b7efc7faadc9be83b86c2a255ba8c4033a69be3f4c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+multiple-choice = {
+  revision = 63722;
+  stripPrefix = 0;
+  sha512.run = "975e7ba809ff551faacfeb8c40f0965da34068b4d4d2d0d14d9334996a245682e74ee05a4ef99fab064263c14c0ee4e7fc50372184c2db7ea90572eb9f4beaeb";
+  sha512.doc = "334d989ca885f640b339028d85acefc8d1762b587e652805ef49a97c0cc1cff9f87fdae884c613719b5c377eda17f85c22137db6a368b663a389661bf34f6e4a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+multirow = {
+  revision = 58396;
+  stripPrefix = 0;
+  sha512.run = "7591c7994fcac6fe351189c1364b448ac8b82e88bdaa50ec87c72123961a1bddfc02b397d5955eb96b9d47b4bcc9b6c1352eab0016b1dec24e034a95c53323fd";
+  sha512.doc = "c02af3deb73b076662da0f45769dc57a7e11546e225f0df76f1fb163251e070b09203c4434382b7d4c3ad110460d0a1b6b0b384079b4a7cb54d105173fc7c575";
+  sha512.source = "0b6880a377534734eec1945b91a8479bbbaccb61c3da5b4986e53ed0d9e0837f88ddc6c1718a36482070a12dfb490c0295123684707ad531213b219f314d2d1d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.8";
+};
+munich = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d8d2de2245f24c6993fcd178e2a21891e66b5b99039e8969639d2a9cba15abc6c3c50374db61c8082695a969a69ddce902ff8b5fb8104fe66ba1384ef99b93f2";
+  sha512.doc = "ed2dc99df090a012f1b1b922659eebe4c2d8523127e17341b9c4b66413acfc89f8b64ed639c8fd40ace0f4fddc8662f42630411c67026311a26fed436a363b78";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+musical = {
+  revision = 54758;
+  stripPrefix = 0;
+  sha512.run = "4bb8bd0781cd49950f2a80ed9527de1b0e49ef6eefea5787d1d13efa3893d57b48a9b69ddf0f62bd2695a61d9b785cfa1dfad2217f8cd97929e1dfefac9333c6";
+  sha512.doc = "c06f45815ff65fa7c492575731bf1aec0e774cf5a81907d1e381ac8ab366c167ada688b8c8fc82293c96980c5361a688eda666b130c1ac3f39976d49bf78f60c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1";
+};
+musicography = {
+  revision = 68220;
+  stripPrefix = 0;
+  sha512.run = "310c10402a269d7bf44a811b841be8a8058ef8eefdfa4440fa64ac27983fe1212134e4a616b3979ffa4f63c8ee86a7ccc5568d49c195dc1683b326a501cd83fe";
+  sha512.doc = "52dc06ba9b0394c0ea66fc02094174b45733002a3a492784b1e67670614caf57a162d5ab74cd51bbe6d884fbf0f04458d6eeafa2faf637ccfde4fbbfa435cb7f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+musikui = {
+  revision = 47472;
+  stripPrefix = 0;
+  sha512.run = "602132bc51f1ed20f045bf0c822f201f7bbf3386f9181599894e66cb3c59f4ed15364013a5e30bfc59b22ab3fe4931872b779d1e7f34b8dbcd1eabe058b1f5e3";
+  sha512.doc = "29cc8526543698f218e8c9c20b424fb2b05d3ee0a67c70a2afadd33dc49f0030ceb440b349898b8bd66a53a5682aa8289d081e4502fa5ccdfe481b4e2430de03";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1";
+};
+musixguit = {
+  revision = 21649;
+  stripPrefix = 0;
+  sha512.run = "6262e1b447f517680ddfd9e5e076ea384dfa7fc8d219e7a2613a80ba66a0f0435d9dc31502f6abbfc150fa1e2de001afbdec25dd5778e3ffe559ea389d57208a";
+  sha512.doc = "8a6c9a42383d6b35c1300b958a7629306a6883bec1bd68751165eb3514f8f069c9995247142bad459e06fa42378a9ddd23093cb749bb2ccd58743312f83425dd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.2";
+};
+musixtex = {
+  revision = 68484;
+  sha512.run = "37701c422b8994231a3ca707c3d8eedbdffd4df89e6258f93c6f9778bd2b37d1c0ee9e94c75f81c5d5fe015b085cc3eff35fee6ec96a5fe28577403802b54373";
+  sha512.doc = "211c386eb30cdaaf24264cde5eb0e07e23a2ad66335d783e64ca08c58e3f04b9cdd954713d3426252e74f63f38399afa42571d44d9f95734d54004b14548104c";
+  hasManpages = true;
+  sha512.source = "f5997350c5131164aac7fd785181e22a6e9912762b455cf04fe4371e67faee9ffa25969171bacef14684b6066053c2d8bab5f5d6b467966855614a6af13e8dc8";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "gpl2Plus" ];
+  version = "1.37";
+};
+musixtex-fonts = {
+  revision = 65517;
+  stripPrefix = 0;
+  sha512.run = "53c6f1b80b789608ad1187a2d593474c12d71b27ce9bd8c9c0cc7d2ba1bf3501c2dbab6375f51eb4841646b1f0dc7ed1c641efef6bc32dbaae3cec56f6583e09";
+  sha512.doc = "eff2e4596dd426f1f57003d6441eb0632f7b9bbbb216ab4e2b069a1a624e77e06f032f191ba13afd2e55b472f5a719936f34fcf2ba6997336a3c3716c4d936c3";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+musixtex.binfiles = [
+  "musixflx"
+  "musixtex"
+];
+musixtnt = {
+  revision = 40307;
+  deps = [
+    "musixtex"
+  ];
+  sha512.run = "eab6332d626f199e46dcd03ea546abbc4446b41c4b0354c066790ebfde154c6fa90f861dcff77206318b58a31565d884576899629520e78b3285bac673d1f4bf";
+  sha512.doc = "2da473ad2425064747187da005e01d6844731c536b75095828a85d358ffb1344331ef483c0cebe79b346b4fa96a358a1e416cce7d7cfcce6b1242cf3c0a3645e";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+};
+musixtnt.binfiles = [
+  "msxlint"
+];
+musuos = {
+  revision = 24857;
+  stripPrefix = 0;
+  sha512.run = "3ad7bc18f20b0df70f6c92f7816d4e5bc90070a392788d93caffaba39f25e516a1ca4a6ef5438dbe55b514822d2882e7dfb809eaa4fb1380475fd624ec3efb9f";
+  sha512.doc = "a2bc27d789cbd6833961d41ee6d697004fa7539810aafa8749af918572dbd20e2f267bb7435c068fd604540d0a75d1a558fea38a8cc7748c9dcf087c17469a61";
+  sha512.source = "55cbd375a48388b310c52e26b02b6dcd56f7d50761addaf275de656a2668bbb0c436c742649cfa07355e626c3ee01572960fc0177ce4226f764db2b5c3e04598";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1d";
+};
+muthesis = {
+  revision = 23861;
+  stripPrefix = 0;
+  sha512.run = "66345512d1713dcd352feeb46d8ad9c609d4c9364a37b47b5fc0207800f6576831e15d7be59ce13f560ebedaeac9a595f2bd7045b621fbdc8e20a3b3c553524d";
+  sha512.doc = "5ed08b459ffdc954f5857be1a1970e9a23d2cfc23cbb04e820b82368b1febb9bf04811e53ce6fd05cc12da302d182179d29b278fb99157e801afd05db15cbaa1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mversion = {
+  revision = 29370;
+  stripPrefix = 0;
+  sha512.run = "3031b6aa9408bfb0994ff23c36f6b3f770aa8beac0e94bfe1361dc2ec6ac47859a996ddea9f5283833e5711d0308ebfe5aae91bc0ab564c6e83056d7394f14f5";
+  sha512.doc = "bf7639f024b214c2b8b73cbe4f87848f390d106f46afff6f6a1257d80b37a6b7b02d8d9224580d945b93b3f86a43495d00c5c07d22e8428703036dc43273ad41";
+  sha512.source = "22ea633c451f88302061c2d3427ed52e561bf31bde30456e632f3abbca918a329c40e239ecf0a2f2b219a23da063101ebc9a23ea5fa355e479ee28a9404d50b7";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0.1";
+};
+mwcls = {
+  revision = 44352;
+  stripPrefix = 0;
+  sha512.run = "045fbe4985684ff7bad3a7c493fa0b37e412e698ee5eaf31b4ccdf3e185433d185faeb78bbbae7e11b84354e4dcbc24c8f2cf549a64b81ed0b6adfceb4bc8d8a";
+  sha512.doc = "17b548e9db8a842c16367cd27b3f5639fdaf418f1967155a72c90e3e91d47a121c87dcf2bf0c6eb9042005d54e04ee40b367e0d81c7e2ff57de04da617f8b1b2";
+  sha512.source = "aff2829633113538493a5634fa11d11a65d643e65afe74255ab31141ddd5fb39f6da59764507af10314b1d458c5c75b1f970b808b1e90c53d211cb4bc11f3b55";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.75";
+};
+mwe = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "707e5fbc793f608432e0c565311964a8b92ce55dfae43649cab61b767b22d35029a781fe9cf5997505afae4ff75a48d82acff95cd18b27b72033616ab06e22e0";
+  sha512.doc = "d6cb1e619dfa4e99128e4fbb95605eaeee694c59636f6759055f3ffa7ff13f12fa1a6d73a26e72baf63bcdb9737ebb41795b79367498e2c1122ca2b15c4fbee0";
+  sha512.source = "aebd949d303f0de76079b78fa94f6c9d941c2cde5f35b25dd8a9b3db9dafbd4fffa73e5edc216d1b68ce15daee383794a0553b905ce29977c56b03d4cc6136ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+mweights = {
+  revision = 53520;
+  stripPrefix = 0;
+  sha512.run = "50d675bdee00625b5fbdcc1ef923a48abc19af890faab90ddde4893081dd2a5de6b5ce9165a4bece512c885ba3f3990d8dc300a873177c725a5aa16b434d4e77";
+  sha512.doc = "b103ae1a7e4072e646aa70ccd660cef52b6954deec6425fe2007c15a1f56fb45d43d276449e436f188e52192609766237ec22b69c7782af5c0e3f15081989dc1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mxedruli = {
+  revision = 30021;
+  stripPrefix = 0;
+  sha512.run = "f721b48b71ae2eb74104e23989cae84d3316b322ebff4703d9bddf74e0ddacf742e279813977bf29883fd17f01049112169d02aa3e4a9be887c049f8484ca0fe";
+  sha512.doc = "ea9de17ac138af2fdfbd624e0c516faa2eca674ae1c423cc7f972f87c1bfbd37812e199f68b463c07213fa263636490b7207baf68506514f73fdef1d6c041a49";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.3c";
+};
+mycv = {
+  revision = 26807;
+  stripPrefix = 0;
+  sha512.run = "72e74c30c994441aac708e719e894d01bc3d1a6570863a589dbacae8e3c69f70d192abf7473b58a026b2859f7f10dfd1e56827cc759898248e3cfc9d36f37583";
+  sha512.doc = "892d0c10fb8a2dd9a65bb6fa4dd48fc3ea49803a7e633cd390427bfbcc8f16f6d213f9ef511c7202521b518db4c94bfdad5197c30b2c8786bbbb6c6f188293a7";
+  sha512.source = "56901df8931579aae3cc8f51e7c6c6542cca3b1b231512e6cc27b88104c39dea50026f0cf21b2b4251f4e1ddfe4119de7ddbde6f50bde743296bb84195fb5f05";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.6";
+};
+mylatex = {
+  revision = 56751;
+  stripPrefix = 0;
+  sha512.run = "b7ffebb46952c41818081cc14545d429fa65e376a2214d0ed41b56cea05cb1d3146d87513b4a701825b01bcf1ab268cefe6e9d709cb627dbe7b95daaf439d509";
+  sha512.doc = "791cce1eb8370e62642b64389b26a91af563ca875268039ffa978cd07a743b999573199f1a3851ee65f8118cb462ab5d5c658118a735875db90eb8482246e889";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+mylatexformat = {
+  revision = 21392;
+  stripPrefix = 0;
+  sha512.run = "476e2c739c9a99a53a9f6bb7eb32e6122c149fe224497cd8e777af0ebd139ffadfa792090d8673ff96b4e17466e918f9af4ecb7a12c608d4c33d4e17f2b26f0a";
+  sha512.doc = "c0754ef147a457e7c91b16a50dab2220fbf2f5385e126e796b1c65025f0fd998371b4e58d96ae72b8c6eb21b2030906729270c88c0914b1748714455e78d1bbb";
+  sha512.source = "4f172517cd3e0bec77bc9003201a4488acfedcbddbca217ecac4878d3df9ab86719c5d9fc645671bbf3a5d5b66a1c4e80f9acc01ef27c82a3eaf13aeed45f857";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.4";
+};
+mynsfc = {
+  revision = 60280;
+  stripPrefix = 0;
+  sha512.run = "6736bcfc3e0285b4def1b690fa0be98da319ce91f3e77978f08afc81289bc64b9a7aaae1d23a535a437c68037ba3cf0c068846ded35e3a6f4a26fbb7fa1be382";
+  sha512.doc = "0b8936f3a2f36f68be9b1b9ba7c90f60babf6a6c9c81ab165ea947829ce0cf4230cf9f53d0acef3dde83c2fad10867e7316f9dbee0757a7fb9dac98b683d811b";
+  sha512.source = "613c70050fcedf8917d39d2cc212b19fc2b1bc983e442d33bbce4f1fcf99cf73a8ee8a51c44eea090deb76fa57ed6b075b9fad12ed00516b80a2314d0202b988";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.30";
+};
+na-box = {
+  revision = 45130;
+  stripPrefix = 0;
+  sha512.run = "8b0659454d8324ca51c9e97f7957a3c14230dca0b4b8e047b961bad1b81d2a8b0220cf275bf84e9aae6a3d601fe93df3de94f603a198f6bea716064ae8675d0f";
+  sha512.doc = "2c78a71155eab3cfdf551830051dd360f6e9fc8085ebe364c13a79a1ebda0693d633e7ba08e31c356e46140c33bf3b190365cb88d944d2b3e8c0799ff68cdc8f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+na-position = {
+  revision = 55559;
+  stripPrefix = 0;
+  sha512.run = "fb88693c5d626331b9deab494bdb0fececfcb3d6f76e91f76f467ab8f152fe857e4ef41f87b38092118646961c0f64f82501f0f75f5610d793b8158d77bbbf9e";
+  sha512.doc = "abe7a0a765cfdd1d4ff454180b32d4153cd715d9af333221ed3213082dfbcf5ae0562617a2b30835a8aaf2a65c166e6fb3941d3bd6c781d83d65e971bd53f356";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+nag = {
+  revision = 24741;
+  stripPrefix = 0;
+  sha512.run = "a2d239ed1e12fd1b082c8df5531c9b83cf55c39b13781aa01848f3fd06136a9522598abf9e63580a93fb12ad7c392061b14d5e96b4d4f4dcf8180180280224a0";
+  sha512.doc = "9a4859b67182b40428f720e2e955b591fd3fdf30acbe7c3214548766312833b3ebd5a046d1ca2e2b824e3bad95bde635a1cd112e8023395333cdcdb9cdf55ba9";
+  sha512.source = "969b7e463e6e8eca51af114ba51d538d0a1f7b9ed3cb5dfecab92ec7eb913a872b740b2f434e854a7c11b31c7b3364120379a5732220833235912e73ee202878";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+naive-ebnf = {
+  revision = 67892;
+  stripPrefix = 0;
+  deps = [
+    "filecontentsdef"
+    "l3kernel"
+    "pgfopts"
+  ];
+  sha512.run = "52780f4292abba6d621638637f8c3d11a3a39d4e26c3e7a10e077f4369624ed0f1fead7aa781d9d0017b000618bf08ade1bddb78e9d773c3abd9c6124ba00068";
+  sha512.doc = "f2abf68012f902440e17235fd49c55c4776d79c3e7db46d18e203b47160a427545201170c6644a18d33874a90c6770d83fae576da68befde87da17606ed577e6";
+  sha512.source = "a149e3c6ca7f22ed9b9d7a03c0d5bb941af809b6145967bfbc63ff96aec966eeb5e657cc0bc099c7727af6c2ebffaeb6f45474104c2c7c1462295ea115ad0d87";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.0.15";
+};
+nameauth = {
+  revision = 65738;
+  stripPrefix = 0;
+  sha512.run = "1f81c68299508534a64a91465478bea75ced09ce66be903e3fb21b228a575124f63101dfdaa66d9410e4395689706c9e09a2546715006710bad46d496a884daa";
+  sha512.doc = "7f490b2993516937693ed04a240b6e16bb366897b638cbff52c44f95d2b965bceea064e0e6d2064442a28417f8f1adb3ead564d8c30106dc0b36adf8d550c965";
+  sha512.source = "8ce8976678bf079cf929ad97d19d8ac0e7cd55d745e4bfbb7ad70379f952024d1424841ea0eb750fd9135caecc5d6cb8a32abff5e1c5331e7b1153e5939e41ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.7";
+};
+namedef = {
+  revision = 55881;
+  stripPrefix = 0;
+  deps = [
+    "l3kernel"
+  ];
+  sha512.run = "c413d600911ab1107554ec2aacadc80fad12a95e7486817c002274f282e047915d06f4878e68e423af649569752cd27d7c1b3a802a9abff68e91038719b2fd28";
+  sha512.doc = "72031cf2858a3b68092c852c216f96aaea212c721e47d90e870c8153f83db921590246fb11b59009d431754720791e3c625fb3abd7bdd9010cd1a49894023ebb";
+  sha512.source = "adff08a774126c8faff52ba14044a8e2140f9586358dab6ce95e7a941706bf57c32acf0ad75282bd3b01dec8a73fea105c0c65a1453f5903d5eaeb3fe0349b15";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+namedtensor = {
+  revision = 65346;
+  stripPrefix = 0;
+  sha512.run = "0925bc8a0a9f0cfee910470318fe00972d604e815aceaacc358fc412f3382c5cb5a4f9b1a337b9f609f0060fbd82bf1a7579ff611685a992b68eddd5348a8dac";
+  sha512.doc = "9127b5d7c44a4b2a1cb28062f3a0c18f61711dd72aba86ceb9b948563ea5cbaedcd0539e0ef8608222f957f6fcbe878848095fa48131b564e26b1bb654ac8395";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.4";
+};
+namespc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "71ec09a2aee5f299e9620b9b90558bca11415cdbf4304d0e5777896f85cf4e30cc39508fd69ff831a86707e230cfca1773fd9a8bc50c37f310f8bfeff629d2d6";
+  sha512.doc = "4bd240f3ce155ea517fc267af1925f2e84f7af694a1ee4a068a2679d97cb6f97fd77f8812017e05f33c935bb54a34459a9deeaaf43cdb4ed69d792676316734f";
+  sha512.source = "33579dd40ba708e2e8a727f923f727f893f2f8e9562d369b1e025b50300250010d2829217a7aa72c1ee5781f3ed501e60b010cfc3cf3211b4bed1168494fa4ab";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+nanicolle = {
+  revision = 56224;
+  stripPrefix = 0;
+  sha512.run = "e9f90cb21730e34fe03961281527cfdea0f7c15e349b9d441747be7ba591c40ac876ebed92f884bd502c3cf7a99f2f6f6328bce515680100c2f9a3d7e04a4aa4";
+  sha512.doc = "3d159eb9fd84aa8bc6c183ae6a42aefc331b9bd606abbc1b2c3c53776d5b8f1554a4ad304d0555b8d2c95be2e8000eab0a3ec6a167e089292099bac6751782d2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.03y";
+};
+nanumtype1 = {
+  revision = 29558;
+  stripPrefix = 0;
+  sha512.run = "fc775dae204d8f1ca7e05005ccba0bd568f00819519d34b2282028d7f2b89b9c1f9a091ed192def7281de97ea97c75b9327727489e8ff88585bb97cf5e8b8f10";
+  sha512.doc = "ff0bd0bcc32eb8166e7bff9d440692a3c21c5cc7fd7b8139b472fbc2e079cba0591d162e2a81090919990dba31d1e04b57d50c35ac1d0670ef9102c64abc88ad";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "3.0";
+};
+nar = {
+  revision = 38100;
+  stripPrefix = 0;
+  sha512.run = "212f1a002743ba14eac41de05a88325533db8b25d9f12b141064b9aa98f78dd5c28caa7cdaa4419829e6180e56ff93e42b069cdebb52fb8ef40c9652b8a23c79";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "3.19";
+};
+natbib = {
+  revision = 20668;
+  stripPrefix = 0;
+  sha512.run = "7e78ab76bd86a864eeccef86a64fb28b6b063d5a12210da80f0c5a5608df429fc2939580b88263dc50fd68d841580a12358617e20a0048ccbc9e148ba04d5f26";
+  sha512.doc = "afe78103a6ba2d58c6f6ba6927101cb481abb1b028c4cc09dca59296d30978c636e837c248eb4f8fa44aa8fa7f6db1e1b6855afac9d99b0cfa030dbad6e59edc";
+  sha512.source = "ac850d6b92e7cf538f564d052593319ec1b1366d74dbf86e55f0c59ab3a01ad79b780378e816289aedf9b645774cbde56b7d186abafa8d1ddaa6c32d676141eb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "8.31b";
+};
+natded = {
+  revision = 32693;
+  stripPrefix = 0;
+  sha512.run = "85568d2bd3b729cda5e4512a2e3309353e7abdcd6a02ee3f86e07bf65cd74ca9581d7b2746d582b704a116313b77cc5ea94f19fe0d233a3b41c4ae88a8704f12";
+  sha512.doc = "5cc23aaaf6006c1f77d676ad1f20d3a62d9ac8d8be6f41e68085844f6060d570baa04000bf3108c975add502c7ad62086509464753474a74c43d045122b28294";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+nath = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2eed9bc55d9d994df8710703c5acee9fb07d8c9732288740cc3c20740bd8db1e3d22617886818ceffb0346110dcd0dbfafaf192878500b2865523d00c6e02bf0";
+  sha512.doc = "ea75b3f282f81963484b2f6b29513a99f3153f222931dfa811deca40cc79a814a225a0a79e67237f53e3aabd33f7749095d3c7fb8f374ec802ee054ebca291d4";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+nature = {
+  revision = 21819;
+  stripPrefix = 0;
+  sha512.run = "78b6e945642bf2073e49acb318a0ff78c1ad24d38c28133b08d5e2881e6e5ee2dd6e8634b467047145dd72d08bfefefc631fd81c7e0facb590be2f9f4798ff6d";
+  sha512.doc = "cac72025fbb65e32fff8dbe3a457e28b2953ce2a14b9359b93724073d1c56761524f2e3200f80aabfea1aa0747fb010bb78586978856c89348fcb255630e5d9a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+navigator = {
+  revision = 41413;
+  stripPrefix = 0;
+  sha512.run = "868f3c08b71f670010fdad0320e4792929d31c2be1b29fbb38da518288596dc299b58635ebc8e7551b9191954b76280e87c47b1eb3c4987fbae3afcd133a5c2d";
+  sha512.doc = "56605790284309e8b6432152bdd6765172e9e7c9c6ca88b07ce5b4b19ac792df21879999a47663dbffe7b3dfcf6da0de3e8f8399cc65fc96dc2e8e3a57350f47";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+navydocs = {
+  revision = 41643;
+  stripPrefix = 0;
+  sha512.run = "b1a5afb90babbdf8fbba1915b88cdbf30a0244d8363c25dd9ce33bb153f9e8e0437146d9883016a40b1cf55c1dc02a06a7d2b72947326f5dc13998beaabff923";
+  sha512.doc = "2122252986f1fc852a121e09ac4f6a6a6c23f9227e374809f2968e729602f6d870bd9293fe1d456c4cc04aa48ee01361d37695c7290bb047f2c8f9a41981d3d0";
+  sha512.source = "aedc1a3bde2379780b1042f9fb103081acde19e4f76f5608d0382756b8f9bf0d4743aa3aa66556bfc9240d2044336a609f3b1efbf0b4780af87b66109293b225";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+ncclatex = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "88ec3d2c350521fdb978734d32bb7eb9bacee0ecb95ae051d7bb039cb86e6dd1eba3b4ae93881ef8fa2623e99f6dba9b126373f181c4668176eaaafa94aa992e";
+  sha512.doc = "e9c08ac08ee2316b07610bde89aee98289b937e8dbfdc86b392cae02037632d6d303c799f74f381f89a6bd4f4397a8c4d78025a88b8fa4ebbce4be663167f2ce";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+ncctools = {
+  revision = 51810;
+  stripPrefix = 0;
+  sha512.run = "f7ec6f6c51d2a4f071b85cf28299a4a11eeabaf225c85cd0144bb0971ec3da44ee9aeac7cdd7501d258b7e8cf25b3e3484cd60dbadf0ff3ee05767c713c12dfa";
+  sha512.doc = "a594e74455024dff7d38a8a750ee02637341f84d342a83409ad0e20a1b0f292c370e16c1b267c2d6a58975f45a6b4c1092c8518653994392cf4dc08fe8553644";
+  sha512.source = "9fd3fccd2383ba6dd9f32766fbabb5a2c108c335eee1b5fd6dd11d93d5d6944bed22877b640ea676bf9721a69e34f0500a3bee131a4bc65feafc348207d131b5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.5.3";
+};
+nchairx = {
+  revision = 60196;
+  stripPrefix = 0;
+  sha512.run = "3ebdb5c11c57818018172d87f265760039f4de415eff568271dacdccfae4aa1b8b3c646d5c68b4df55b66f631679c0a72c17283d949a35047f1cb8a536f582da";
+  sha512.doc = "2c58e3cc770a2180d010688683117a8beb4c8dfc17d0f6502647b5030ec3f6db1131201a352e0ab0247df158b4d5c61ba60995dfc8ffc7fb5e50e6a03b16c2c3";
+  sha512.source = "f1621721f65fce09ed2abcee3997dc1d2eecbcedb651641a99922362d4586be53c5fbf3c9d07cf1834ee6dfb79d67d7b20ba070ddb80f6c302d053979e3d59e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+ncntrsbk = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "cafa6f6ba366c07bfa0fe37ae415cf924ca54249288a52726eed52b9c8147925b6ac4a85fcb69a19596944ed8585cab4ce8fc2710a7c32998b360ea2ab143d56";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+nddiss = {
+  revision = 45107;
+  stripPrefix = 0;
+  sha512.run = "62f951bce52bab564ab2671bd5d019ff9f6f5ad1d8a18ae9f8b574226aa83e4d3a9c6c931f4830f71c43499f68b8b06e539d55a027e712ce4cd2c03e349d3fd1";
+  sha512.doc = "bd92c614f160c50a22ff83d296f0e511909906459cfcb7100c615170ee9fadbd38ba032bf95f7b25a083cae33c80ede96964d3b81e23c481fe5a836d91967ad1";
+  sha512.source = "498e13f4e4bbf8e2133870854f75feb5617a517b55593ab90c203ba860f95599ac5b010bee58d4f35706a6e17bdba54c66e02e04281bb548e62b335c576a6357";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "3.2017.2";
+};
+ndsu-thesis = {
+  revision = 46639;
+  stripPrefix = 0;
+  sha512.run = "d79b603726abaa506ec0cd59c30e4c341839c1dd6f7b7aaeb536385d22d69a37d764499aba390fe7e1efc6a6e25ae6dbb7e92bf659a771b6f4d6ae3b5a2c98d9";
+  sha512.doc = "8e93554ef50d43562d1c42fff3da81b77b4ae444d644e5b1a818571e80cef88a2006f1b1c61c320e467724df7847be50f4f3ec1663bd767261720cc1a80419ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ndsu-thesis-2022 = {
+  revision = 63881;
+  stripPrefix = 0;
+  sha512.run = "98f01d4d37fc1661c117027c7dd83e4c74001cc7d03adc854c6f869503e5700512186585b15d1b7dd7a40ec6a526f1e6eaeed1332ba9531850e6506ce2feaf47";
+  sha512.doc = "ab0c8ca7aa865052422192b51d1affe2c26af465dfe3de9a0bd10a30e5cbaa8f9f9594e1337bf175a069ff189c8924c844acff0b7788692f19e44198c1f578d0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+needspace = {
+  revision = 29601;
+  stripPrefix = 0;
+  sha512.run = "663b2ffe30b1d9a588183916ccb0e3fecf3098d3e67f2a40fc49e1db1e5c1a892bfb56eb177bccd923415dfe51d4a225e2017be3b2f3f7185071836cb2e04391";
+  sha512.doc = "3af05a6704a8d3c9539cab0871f9f9c8b7a241549c1b3127dfce2a0eaf77b87d54fdafff4b2749eb4614ad9aba45bd2e3d695a92243ea30472e62f7945eff004";
+  sha512.source = "a629e9b798ab772feed1e66b773fbc141b0b2c2cb6c336acf61e8e3884246da1b36f90260fd47121e53e552f6569528e81ee788b6d1779c9e87eb54517a2d787";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3d";
+};
+nestquot = {
+  revision = 27323;
+  stripPrefix = 0;
+  sha512.run = "cc75905a3423deb02f226340eeb6a5f97d9d83470f156bc75cdf39569da845279fe8d4a3907fdf269bac75e7afae02faa04dea367cf0326720301ba3f1c31395";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+neuralnetwork = {
+  revision = 31500;
+  stripPrefix = 0;
+  sha512.run = "ba66b86e10f4425c063c76ffcc97759863677a673960255d5c335d215ff8c0eeb4d0f12fdac584ae1fdcec00ab04705cad716ff9290f6b1ca9c8635841f580ff";
+  sha512.doc = "fc2cda90284e4360c9dd9c03611f582c7c4569331a3bf04d51152408ff8533dcc1f398f641ece389e63f9b7dd12ae471c3f6b5d8fbdea5d206afb1ab15df4852";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+nevelok = {
+  revision = 39029;
+  stripPrefix = 0;
+  sha512.run = "01d207fe9d77df0a225cd5fe718f118bc755c1e23c9dcb2bc4e0b4c2983205469baeeefcc195b150cc54f4540ea71d96cfc393fe61a32f7e85d5c9b5944c5938";
+  sha512.doc = "653fea96310508e8a30c76821d1cd83dbf579052fecbb8c859d40cb39926d24ae0141b4788901b34b4839615b33d5995eed2b6a27f6abcae981b9d47b6ebeb34";
+  sha512.source = "455ceb971d4617b096bb2d1c42fdb487208e8c6ccb3fa94869df08c9e89516e0f5c9e5513b0573d17929bc3284fa41ec19ef092ac7c7c99ca8a7f9e63a1559c0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+newcastle-bst = {
+  revision = 62856;
+  stripPrefix = 0;
+  sha512.run = "bc3f53c76ec9711d2ad9878dd12a62ed5fceba680dfd89d55ad81df0bf6e63e49e8660e1aa0726ac8ef545fab1e924fcae938701a59117bb42a59a016a349944";
+  sha512.doc = "c00154d8a4abc12d57d1760383a5da13af16ba5340edcdaaeeb4e61b5ceb42d0776c0967af7814bb3bc6a8669a61998b212fe62b190458a50ae1e6a03c2a3645";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+newcommand = {
+  revision = 18704;
+  stripPrefix = 0;
+  sha512.run = "e4716ec35793f0ed4140ed3bb221bbaedaf121b2529dbde5114a575bfb8aa32a8fc56e79e43068adf560423aaf68c5f09dd5d6b624e37005bbaa4def2b280060";
+  sha512.doc = "84f71adb1cdf4213f34e30a2737f41c93fd0e8ac4970b2adb832570c98c5f3876502556392fa077a8cb647a552a8e914b2a30e4e38a039c355802e2c85c5f3e1";
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+newcomputermodern = {
+  revision = 69379;
+  stripPrefix = 0;
+  sha512.run = "140226a635763be7a407910980664b38323dc3634980452fe9eb4395194e7bdc0144715f13d79b9f108630aebd393073135328c98fa34310e3b8d4150e2a5fea";
+  sha512.doc = "dd8cc0f43cd3a1d19a6666ce39d0d4024f8ce1ea8c51c0809878f8b886b286558d78f91cfe962b7cfa0e83c8abdde5912c4913c9c67be5d2b5ae81c274803fde";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "5.1";
+};
+newenviron = {
+  revision = 29331;
+  stripPrefix = 0;
+  sha512.run = "4ddcc24de158fb1a5b585c65adf769c3f92c4598355306e08257f4ef62718c6ca7f2dea80d742759601b37133a951d031445a39ed5d8062496459cc2f98a71b4";
+  sha512.doc = "cadfcd8ecc9c0904bc9a45542a24c1b6907dabacc94f45a1ed1b885557304a27e7e836b55cbebcc6130da0bffeff7c56fd89f0b7a16430dacccd670c8c6ddc7b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+newfile = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b949934073af1aaaada73c93e493fd39ca01ad625d72bcfa5df915b2c2f759a39d77b7c2a0a952711c8c3e0af5e6cca59eb7f333fcd27e7232c3780ad5400ec8";
+  sha512.doc = "c2c0e825ae7fee4fa551e831c822190f7682392d47bd8bffa3ee947900d6eaf00a363edd204f7404c834ade0bd5a05e9bb0a8284f8c660eeddf7f75179c0060f";
+  sha512.source = "9cc5d4e1ac98c2884af3a2e5d11e9cf573660679658450d0705d6d0c4004a8994c3b471078db8a6a95527f5aa84b3a7ea18a1c00b7cdcd9169fa1cb870a277f3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0c";
+};
+newfloat = {
+  revision = 68434;
+  stripPrefix = 0;
+  sha512.run = "6b7ec618044ee10c16722460fccf4e3b71092ed5fc902b0aff431c7407d50e97bc27a2e9bf4c561df50da7d605a3a1ea95c20f47727111e7077e338f0c0e483e";
+  sha512.doc = "e3faedb4cdb78304c738a4437fa503f7870c81c13eb82652ebf5a5ccb2befa1180683a5704b16891715c60445eac214cf8e6fb01f1d9675954d45e1a7535d659";
+  sha512.source = "150ef59ef64c4378dda85cf5472947575bf78ede8c080ebc9f2ad37ef8928c1d59c50c5772cf48683330bce60ce633e2295493c7bd65b658e3538628cbbbfd37";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+newlfm = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "72f7b087ba1002541e3d26d5b41b58380443e30061b92885bbd3bcc017b17cbad9227c14074a53706b98c785117c7b07c6d49639c84c617782066491dc0cabf5";
+  sha512.doc = "8391122e13223055582bfe0f9e6d62315c9a48588848ab02cebd5b2d7045be5f1d476145e8ca29392820d4ee018b9f84380408331b3ea56e7e99071024a8c369";
+  sha512.source = "fa807aaba787c52d3e769e240a04f5fa23e469908d2eb5a60967e2b08cfb7a694612e85514a56c3138925ce2f3c480bd5b6d0f701031d8ee8e646c3017cd0022";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "9.4";
+};
+newpax = {
+  revision = 68762;
+  stripPrefix = 0;
+  sha512.run = "88888718c7ddd02cd3fa3286ee63d7d527d836f0df15250d9ddde12be475275bd7517f4a0562f30d738d4a007d61c4a417a7f03c8fb628b3fc981e7a6f643ba0";
+  sha512.doc = "7edcf5fc73e0b28d92b8f11f42e47bec9a6b2327cc23a146fcc65143a30aba16d839579d94de7001b5937fcb241e977d9933e44fd5947da06907dbe4c327e70c";
+  sha512.source = "00ebef49ba9b5bd4ddc4c6889d0d9479fe8d1921f94170c51a2c5583f4d59f2bf533db3348e2b595758f377d4e6c504ec6b9c582c5fcc8c4468d782e68416bc9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.55";
+};
+newpx = {
+  revision = 69380;
+  stripPrefix = 0;
+  sha512.run = "46edf929749a4104f4fc141453930e4475a3ac298396ccf50250a6c4091ad58b19887883172cdcf5f5b67acb28f084529ef3c344ab3fff38ebfd53cb79334532";
+  sha512.doc = "39c54fe8bd66f529cdb89b1ef92bd6bb323d393d7e85307441d8f0310b2cfc2cc59d49c0b8560c8dee3da23af13240d619de1eb1c6525750caad3ec148fd7d40";
+  sha512.source = "bd679fa72822162ff3cdc14c67d8be7a3d91ad18e6222ec90dab7fa7878d8e593cc1f884ae3ccdab8bb52d437f351baf39afe30e320b4e2e998c51ee729cbde3";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gfl" ];
+  version = "1.535";
+};
+newsletr = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e2f1995420ed7b94b980fd794df5dca89e89dd96daefa43559d568881ffd17668717de1baaff18bf27e8519663203e0ea7fef214b8f7541bde81d436a3a5c378";
+  sha512.doc = "aff23fd9e3397c52a1566930d6da6184786f07adc64c63e5d9e0062451014d261db8dab06e9d393cb66b3b56a51b57f494f01c9ab27b05bbe2a226cd4623d590";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+newspaper = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "227fd249bba9deea4f191c59060c49d2d1cb8e367bb3007d3b123c17dd4328206962946ce3f637c8e6ae079a9c95244ce9027b0c9f83e0901801dde066a0405a";
+  sha512.doc = "b08d57346ba93e37e93f3c6e2487d56a0ac67eac0e4d9db564d221319e6403a1055729a2a1e43db4e161877b7300aa90e1853d75843c95295481d7cfaa3f6c1f";
+  sha512.source = "172e832bd15e8aecf6f80f8cb768d2d7b3721975638007ce631b78cf5f6dab27ef24ff63f5693f5c46cc430bfecae577beefe4fd2f6fef22d6f5fdf9ff20dfe7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+newtx = {
+  revision = 69381;
+  stripPrefix = 0;
+  deps = [
+    "kastrup"
+  ];
+  sha512.run = "116c8192b67b93a6dcac6fd296141b5b5bba89b41c94cb15ee5644ef9c9b3647dfcb9703a002c9433b8badbbd117cad8fd0565090ae7ee097cb65d7e06b0ae60";
+  sha512.doc = "6ac40ed19b45a5a99fb854469605242cc1efa098563a9653bbebe994e79767b465d182f0bef6a03961756fa8670677deb033a8d6ad747e54cf04c62634fd0388";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.737";
+};
+newtxsf = {
+  revision = 67051;
+  stripPrefix = 0;
+  sha512.run = "a85dbbbba3bcd0bb4732d327c5b70acd89ef59d6d22495cf4a4fadc3751af04f27b09dfc77613fa32ed3270417d31cc876e5d72b6868b9a7454302c961dc96f8";
+  sha512.doc = "d09946c13c3ae08339933fd965a1740eaa660413067878e44ed5bb8a249dd23c76acdfa01101a8ffa11eeae3f277a40394023c0d40142908498a1be0d95abbc6";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.055";
+};
+newtxtt = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "8d453dd25a50384aa0ffc620448a7c1ecff58b51b2cefd0ee2a3ea98ef274ffe1a11e6e26ccabc1d218d4a3f69da4cb254b3e9c6ee9fa99ac32d8714c15a9164";
+  sha512.doc = "0a29f11edadeec4284ac9c9c04230a925517b198eb3653a456ab68bf495a9dd0b846cea4c3e1a425539f0b834d37f8f9a7f20e5945e8c8efea7ab4bb9342f6fd";
+  hasRunfiles = true;
+  license = [ "gpl3" "lppl13c" ];
+  version = "1.056";
+};
+newunicodechar = {
+  revision = 47382;
+  stripPrefix = 0;
+  sha512.run = "8e1748abc585f51033a857db126c4b18f0c42e015d7193f8bc7b69493fb13a218db38da97f3a6733df01dbc247093beb544651a050c5a690f3cd5479c4ad9e6a";
+  sha512.doc = "9ec3bdc81587e8b2553dd4ff45ca4ba0bb504ded0726aa44d1e88423cdf425124334d04ebfbdbbe57b576b0fa52cfe1771c97308f146ea19d89d41eb4475eb9e";
+  sha512.source = "0464584e516c8f5d9c7ab4db114fbe3ea9e07d33c1544109ebd0d3b25e4e3ddac222dd69b6a8222e290ae2b6a7d7166a76b54ff9fbe7ffd5225368986e2af6d4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+newvbtm = {
+  revision = 23996;
+  stripPrefix = 0;
+  sha512.run = "029829b1da07d7e2fcc5950c32021707058f3d7228f6ff82404aeb962663277ed107934f04a93e7f43bd7b67f7034821437f3a8116f21028b7c9a154449ea53e";
+  sha512.doc = "dda7ae47bb076f03cba83438c573405f1c67e5407d83fa0894e9575952c284010b62f62720022ffb7a8e723e829610d1e8ff6a8b5098c92207e8ab8755dcb409";
+  sha512.source = "8d58e55977d708c8e3fd9ea6394494f68ccb21712703b2302355234d12355c23de97cb392d7ceda95bc078ddb2cbdd2030461b5b4069805d4ba01b5e3a8b8f59";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+newverbs = {
+  revision = 64833;
+  stripPrefix = 0;
+  sha512.run = "f2e2cd3fd2712d3333c7caa9e74a16300d7f08327b9bc7f44362570377feed31a206e6b09df15c524dcbfe39ffc54388de4fca90e180e38d28cf9cfbba79ab2e";
+  sha512.doc = "7524a6e767edc5f55d96026f947e17e42f54138157bfd1851832dd139617939661ba5a4e759b4cf313990077dc9ed240c032cfe706b595af4d9a4197e519fd1f";
+  sha512.source = "ddb1f40238ca2f622180ea640a86abf993add81c44ea3a459c54b1c114c0b78d4940536b712ab444e93495492b5c0deb02c211b06e00f8fbbdc69ebc4097f786";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6a";
+};
+nextpage = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "fca0aec60c5c7277dcadb0f86d757617484d700575fae13df8b386775e153ea89c52935ffdb2448c52e351593b396fdf3394f5b97e23a0d2d40dac339e584f59";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+nfssext-cfr = {
+  revision = 43640;
+  stripPrefix = 0;
+  sha512.run = "5083d4ff4168b857a7391855ce02ea354cb17a26242a3e3b2693d6bbb35f722f750299669a37afbb99a52180433d697fbf65a6fb6afd6bd58d4b16c63e5b0d67";
+  sha512.doc = "28b2aff47d74de3a42c441dafc156297904b5db20d267f1af07d1e3210e7f9959474b3cec387be7d9b20dc04560b4100a0d9da6979ab8ad2a7cd1e4518cec278";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+nicefilelist = {
+  revision = 65842;
+  stripPrefix = 0;
+  sha512.run = "deaf84bd004172584e0437f3f15dacbed3d49ef6bfdba15e77e0c888bc03e35a634107469ae979b38d1e5519f4c8236cafed71c0ec46b9e7735041f234c03f96";
+  sha512.doc = "efbc5965c9658e1f44182bf92f695b2d200cbdb8c5c70e23631b31603682168c0cfa5e114615483f7d897fec175267ef9d7fd0040f653e75defbe88bfb395bc5";
+  sha512.source = "f520f4114d7f44b3361fead74f19750a4765f0397b158d2cf8c0076dff4689418bdfa0f731dc9383a74da6ff6e36a84f9658432a271352b904cd816409b026e9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9b";
+};
+niceframe = {
+  revision = 36086;
+  stripPrefix = 0;
+  sha512.run = "539d4a6f3a192188064fafd94366ad2f8a9146175d9e04b08cd83d1386bccc730a0e3be4a9fd45e4f47152f10710191b063138ba504fca95e4226fc179f70a29";
+  sha512.doc = "aaf777520d300b5e8c9a17c2dfb5b12406f5e6926b17c4244feaa8d6c5bc28d87277f23fd814304a7efb91dab8a42e1ed88f6568b96f13f30c831e81201ff4f7";
+  sha512.source = "fb0106ee32e36d34767c6200be1d2415e11c275e5540dbd54777a6876474424f1c82ba52bcc0fd76da9ecf3b37671d37c762834b3e6ef714028c1917dee45235";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1c";
+};
+niceframe-type1 = {
+  revision = 68091;
+  stripPrefix = 0;
+  sha512.run = "b43c19a164d9d6eeadd11072f07d29d00763863724a5b5168ef8640b2411fa4c02c4955e769b23a39e06db8d02d168ac7b2a987e1ab8a9dbe4c19063b8f4bbac";
+  sha512.doc = "9f30b52e177fd2fe5bb3ef1f23a16b29a80f049cf33d8ade3dbfb187663e4a8872a18bef0fec1531cabe610839ba21b118623db244b52ab16418a7ad4dfb3d67";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+nicematrix = {
+  revision = 69275;
+  stripPrefix = 0;
+  sha512.run = "12bfe8ede8cb01f61a5437a3d91cfa225540699d67327ab40df051967f75e7af7ff34aaf6ed63c5067d7318c491581b39c41430f9d40d0f383f85090e2769c31";
+  sha512.doc = "71d57a75b4c5e58a3bf15879c4eed9b24bef9065b73e93d482ffff35160d06fd8d2ca723b0d9f784e572878a21efbbee34ef9277c94e283b7f69826aa5985128";
+  sha512.source = "7515731fd6794b3f154cc2937e8ca147a8f147fa2fcdba1bc15aab56dd436374eb405b6784fdfddd6183ec4264691c26fd0e4266365e96eefadf90893fedd3e8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.26c";
+};
+nicetext = {
+  revision = 38914;
+  stripPrefix = 0;
+  sha512.run = "04a555a82287a39249cf6b0e18d890329098a1d0d6957fe9a1c535024b63a5f50b6487dc1fe4fd69d87908abd385b0366474ebe3af0b31f41f6a35c519a6ba9c";
+  sha512.doc = "96cd1694ae0cb116bb4620f7cdc1f9e24385886c78cf87466cd329c5ca0d78111005ff89e9be50f07078eaedb69c4f3d495b1fc5063a1a69e483b86a6c8534b1";
+  sha512.source = "d7c556fb2fc34e7eca9038667842825053ac03478e32a6a58cdda2209b33ece494071e47d54bb24f7c085f90b45375bb5db7781db642bd9f8cf661853d077f60";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "r0.67";
+};
+nidanfloat = {
+  revision = 48295;
+  stripPrefix = 0;
+  sha512.run = "42ef65277deaf474a619e5ffd570309db8c8349f32e9bcfdf216251e81136a3da87a745b3dcea5212f636396179210c6acaa96a957ffd9588d1f414d6a59bded";
+  sha512.doc = "2be76c8e243de71698ae5264a8e3af4da8dcfcd130b0554d1547a0a238e55ee71ec57d8757648b162a6ebd17ce1047206979cf139003a02921a4308a852f0030";
+  sha512.source = "8a778b33036445dbe375af746244433470e5d10a963ebbfbc397c0376d5c4f7c23cdbc2ff3ff6455e274e83b465a64d8bac5023e8537d5b949fff038098d862e";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+nih = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5f016d57b1b55c698a902c7a85a652fdcd40062b409a14e38c1356b9030129b46631929e49c6fa70db7ed499043a75060c97919f15876ac7a647d31c2f0bf729";
+  sha512.doc = "1c209615f0745ed0ae4d2f4c55cf9447ec4711e9345ca3db778fbf45ccca76792039e6a7e51f2e7286034ae229b5c696ba7deee5bb8c224dbf95a4cccca650f2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+nihbiosketch = {
+  revision = 54191;
+  stripPrefix = 0;
+  sha512.run = "ce64ef60a007e8a955dd48f9f9f748a738aa57829116f060b3fe353308244db0a2c1d56d139e2b1cc1a6ee4f243eb7ea2339a2c927966d7418e6b553600b9e53";
+  sha512.doc = "4315c32e1ba43339b609c272fab7aa0b18c44b2c323f43cc303210f37c44c5a08d0dfcbf62e450bdd9ce899d69afd5eceafad91074fec73ac9bcc1e5c8c8540e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+nimbus15 = {
+  revision = 58839;
+  stripPrefix = 0;
+  deps = [
+    "fontools"
+  ];
+  sha512.run = "9e39f92dea1fa293d6249d16877dd6b2d990d1d48cfd31f4ac1d66233b97ff178d2b70f428978a084fc9a50b9dd994adb6a8ad29375e54f5d5ccf6ca7ed62f64";
+  sha512.doc = "8fb9ece6ca17549572a0d79a541397c6545dc01ac0422a5270314bba1cb83b1451fb0f56e34f449cc3d3de326e063e4ea1f2ea03a0fbda7342e9d0a101fb5ed1";
+  hasRunfiles = true;
+  license = [ "free" "lppl13c" ];
+  version = "1.014";
+};
+nimsticks = {
+  revision = 64118;
+  stripPrefix = 0;
+  sha512.run = "0b2485f7833cc8f4912a035284fcc4d0e710d942330a16a36788f7d80ebc5d9eb9ceb98f6a15b11e6391429d4684c985a83753696c1202bff5f0c5f4e528ce59";
+  sha512.doc = "6848acf10eb3c4b2e0dbb9e33868ac4a1c639771c1508a19e4d41512750cb0978dbb61a570830f2f555e09ade976d9cd5c91d23da73013a7310b9cae02b6ee1a";
+  sha512.source = "76903857b5e115f5c3462e114ef7a142855c7606e78f0ed96de54b4c810cdac596b39f38333db445387264ed6723c6c1788b13c17c6c9702407aec267d4b38c5";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.0.1";
+};
+ninecolors = {
+  revision = 62006;
+  stripPrefix = 0;
+  sha512.run = "f755768830e02aa434432ab4e879646ad43d092f50b7e38e39009c98327c5ddcd23d0b5a7ee8d8afad30e69b6219bb871a14dc7b274ae11a60aec33df2c94ae6";
+  sha512.doc = "0550d7b4a8b7040541edf156c5b82bf61d350a21c732c4ef324c58289eda288b7e30edd1f36d8650d453a590bdeb97b61d0c782f3d945b033b0fb746b6c802f7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2022D";
+};
+njurepo = {
+  revision = 50492;
+  stripPrefix = 0;
+  sha512.run = "a62efcf4630d7c26bbedb19e0c4405e730733b71361cbec9abed7a06a377c230bee561d8b48427104bef8dbd4e0bd56b0eaf9f0f7bbcdc8b289c726cd7b6cef7";
+  sha512.doc = "61f32efbea3b94749fa0cfc3ef2a3b3a34ccfb4ed3b6b09afa74e4f6dbd2540c1a263c81ca6406288f015303250f51acab0b6a4a4d51c95a2f9bbf1f3360f8e9";
+  sha512.source = "6a790ae4e533c8e040ede3355967ee030e136d42afbe222a8fc4b7c3810817901aaca1625199d88443c8dd64d3d6b52ef9364d706fd1cfd5a6dd8a7916890df8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.2";
+};
+njustthesis = {
+  revision = 62451;
+  stripPrefix = 0;
+  sha512.run = "829c4af6651ce3119dcfb0f6975289bc6cc4a8a7dee4a382ec8f63c1b876cd972452b766ed13e6aec1fb4d4613255a9ef206f1b7d8c03207c00a52876f22533c";
+  sha512.doc = "fdf843b266b0d2ac780fe934d4ba55c6a3b470fcf81bcf71f2ffa0a689020ed343768650cce06c5cbed0a35d9178723b0d2caadf5038871c55fbc47f244ce15d";
+  sha512.source = "bf0f1bfa5d6a9367bee61c90b35c4f8492ad072ce44b0fefe43c1251fa0e7fcb4c4f92392d5d317d808e6f3ab1fd8f7e274407dcc815e2f7e281297b53e5d7c0";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "0.0.1";
+};
+njuthesis = {
+  revision = 69051;
+  stripPrefix = 0;
+  sha512.run = "da5a4d00161d7904d58d745df89dcb1270eab27c291866300fb5a7293db2a078777c9fd234a3972d75d5d6208acda160921a603b45d72f4c235dfa09f2421038";
+  sha512.doc = "12f094efb1a86dc3ced366f3f5a2cc7ef5042ed109e30c3d4130f7de9b514a437029eceae67786e7af1159c0ecee1ea1298efca7a02eb8d9c85253c0acdb43ac";
+  sha512.source = "078e7e50803f934601b30042b871cca6a0bee5d66fcc1275c227aca20cbf5e098bee5ef95b728a2d4b6fc0f7e5a27e0042b385c07d8b4e6f8df71ceec0c67f47";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.2";
+};
+njuvisual = {
+  revision = 65261;
+  stripPrefix = 0;
+  sha512.run = "48f446e5aec77be8e9ebeba59779c990ed4ec5fc3f533fd22807e8415d9bf962075e940d4f789e3809c8ab4c75be6fc505d42cf37bd9e1d5b9e1a02d78e7523b";
+  sha512.doc = "351f6cccc1a7d91f953c4dcce294a0ca81a0e687ebdf2ee676aab18e299b8095d089d7691b58316c8955e06e341f78674bbd52b6073e010a3facb6184cb0a8d2";
+  sha512.source = "0129998a16bc4ee8c9345bf0519ce561360e11860a148252550b3536f2152175dae5af414d586a906adea275d0fb1fee1c4f31a2a18f23571a2a4dd5ef9120e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.0";
+};
+nkarta = {
+  revision = 16437;
+  stripPrefix = 0;
+  sha512.run = "60537472bed0bd22d64789008ff8bbbab92ffcde68cbd74eb0b6d9910705f9f476e8f2c4dafa0020a24b0ff2e27c42a39de1791f2c91040af07dd429e0fa28ad";
+  sha512.doc = "b3cb0205fdc567fbed23f797031e7336fb231c11490f463ee3bb3887e5d8ad1aba90bed1b14178b1d9ba15d76ba02ba93598362b9655eea78bf086c7df6c8b61";
+  sha512.source = "f96b85f2a779ae64c9c2a056e16d2d8473844b45c0d906f97a3b62f6f517ea614600312d44151d9b9b676f3ec7360638c72fd43c7a35e183bad0d4602dd84aee";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.2";
+};
+nl-interval = {
+  revision = 58328;
+  stripPrefix = 0;
+  sha512.run = "486597624d640ccd13b4cf4e913b5735b0f2a36910f563b87c6ebc6f38e2ad8df99591fe8dfcb503750eb6a98204ded9bc80d3cc0f8e2441257d6f9bd2167cb9";
+  sha512.doc = "8c9bb64229464a05f51396d50143688b8f108ba47ad23a01ddc97039133cc3dbfd51a6a58e36e946145ea483d3d06f36926d8e881b2e07c005e637338092f75b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+nlctdoc = {
+  revision = 68448;
+  stripPrefix = 0;
+  sha512.run = "ef7f443bab4a6608b506ff65bd885965c23607aa5a93a721a021e741eb85a757de021eec7b8b247c9b5a41cad3f3f06a90ce44c143bfbe6ab79ec253eba06264";
+  sha512.doc = "e887bbbc705456c084c26b1bd02677a185e7c7ac615b9711821233e6ee3a62de91c4cfdd3bbc353b0775b9fb99dc42e3447d7ef51492f4abf0c519ff1af42af6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+nmbib = {
+  revision = 37984;
+  stripPrefix = 0;
+  sha512.run = "c915b266e2a7644a88de6476bd4cf81943f7da31472f1b8eb889e048df8acc4afc36e247b8fc63bfdeb8c0384d87fc59f43d87f3ff09822d076c62a0edd1c110";
+  sha512.doc = "0014c7fdade3685ce03bf9fcc2725b430f6272025809e224b88361960cb47e5b533d88d60f0ce55e011dbb943c8fc025340fadc506eedf10189724ae79dd2bda";
+  sha512.source = "52297a890da760e2c945522094f128612ceb521500c81ce54da2f481581000bf42302665585fa056b31ff0f096a3a170ce56013e0979ae2043a94b68e7d32a5a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.04";
+};
+nndraw = {
+  revision = 59674;
+  stripPrefix = 0;
+  sha512.run = "0a3ef1e6654d191c588f8269c674e5d7542785aadd97bf96101be8627f4a4746e443083a0403b8710f2e8036f0d69be1db6d40cfc1865aed89056d84ee4a512f";
+  sha512.doc = "0ee7cb24d7cdfc708a3ea7bc4588259ce92723e3c4be295b85d689750ed81ece2a575ceeb9d6959692e36e363bd6ca26615fa598080977cb62de9a641da44322";
+  sha512.source = "c97381de546d0e4173c7d34ddc8f9098359a3ec8b84c78d155efc49cba120a3e59f64c3c43eaacc07196df86402a084558ca20a5ddc52733134440e21fc0bc39";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+nnext = {
+  revision = 56575;
+  stripPrefix = 0;
+  sha512.run = "406e846ebe7ed721218368cd00a021edc41af41f1ccb5989925abad92d4cbf4d604abac8144945599530c85917d9404141052ba9891b778d1006b7d339499041";
+  sha512.doc = "6efbea453691fe2af7f436e79e1a486abf5dda14e2457ca3c1c2bda9c8461016d4436eee82a18b079a2491e1c4eb2f7dcbaeaf8fe8b8c7846e744f02da8e3b6f";
+  sha512.source = "a0cc70a3bed51b403ee26c2fc583642ab25565c1ebc69945a831827bfd2c192946142ad92bbfa130f891bf9a36c18bf50e5b424ecc119081d72c7efa1654310b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0";
+};
+noconflict = {
+  revision = 30140;
+  stripPrefix = 0;
+  sha512.run = "660ea2bc008866130d0955eabecf0afa1e21ce38fcaa0ff0d4364ebc32ea8af6a2ba57c80b340f824b14f0488d2b40e5c7ddcf663e37d6170a7ac0aa740ca260";
+  sha512.doc = "b403c57b0d794bd95416ae09ed3fbc0c4a164689f9885dbb15e8a4c25ff8751376e6e61b622c9a94feacc4dfb905a7926500368bf51e5e568efa31e1dc5c785f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+nodetree = {
+  revision = 68244;
+  stripPrefix = 0;
+  sha512.run = "8c451fff46fda636b2b1284d8751e070bc47526d7dc94acceddd49e8eea3f951526c1680f330042e51f61752795b4c8ebaa490cd93a736747e1bc554126bf7f0";
+  sha512.doc = "3e69dd9f6ef63f3ca1ed8c071510a5b6946037d9ed76449fd14c16ce0892ca50031ec594f6bca7423d3669270b4e2821311a53b852f906ecbd22035dbf9c2858";
+  sha512.source = "ded67b13d69785d978a4662fc62cf0c76b63bb931b94ca2407b9b8021857cb1d6609b466ab9f552d11765f7b612386e9fdf0fec02e2a77a5cef459ecc4324b35";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3.0";
+};
+noindentafter = {
+  revision = 59195;
+  stripPrefix = 0;
+  sha512.run = "8445839068a264cc57df9b0e9cce4562b3e70ef208baf32fb2aaabf7ce95804a31f0f8b65c8ce2f2f0fc809a07cb864ff977af31d8162cf10560c39f9d2b78a8";
+  sha512.doc = "95f0e11cc91dce0e970caa703149b602150426df174044b0a2fc7d902f040fa4fe6fc3014bcf49d240bc9612c5c61a5a40124d5b49ffab1bdbabab0cfe55889d";
+  sha512.source = "e3a12b14ad4571a3fbaf4d4297da28a69cdba7bcf57a365dddb163d88a0b1f7acd20d600ab6353b4ea110d4a0a72c9bef365a3b1fd866448f65318bb5940dd7a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00";
+};
+noitcrul = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1629f5c0f832927093283cd5cb534cfb7ee35bd74f306fdf6cc18cfca3c72d5c1501139c180b7cf3fe71ef7131dd6a42465ee666c7bbb5c83a86f2a69a5a3c8a";
+  sha512.doc = "c9c3adf9742b329ddbfdcfc41126c22039e89642f0c0d93ad064ff2160f7708b62ab28994a81860aa08d83f11a111bc11a2a54bbab88bf3713f3f6ee4aa2e641";
+  sha512.source = "5be6bf65ca4dc0c5819a1bc870f704b595b25e5ed6900beb8a53fa8167680929a7fe038e80fef120e77d5b8731c13f92f7907469ce7aa4825ee4e207c09268a3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+nolbreaks = {
+  revision = 26786;
+  stripPrefix = 0;
+  sha512.run = "4057a988b0357e2256eea6ae47c560d8535528e63b93d648c45d65ac44c4894104015e3411b7046606b9a68afc44033d037229d684f0c5427d9dd2ff5b272279";
+  sha512.doc = "8cd5d7336097abd2d873af36b2ba6ebc8cd1c405c9a715c67e6c04d02dbdea067c0b7a8603418005ce223e0f1bff161a3dcb669da7c07c30b2ccdccc7f953fa0";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.2";
+};
+nomencl = {
+  revision = 61029;
+  stripPrefix = 0;
+  sha512.run = "ee20b8a21b03cb02ed2ef37d38c219841d4a07e17ff781c067906ecbb8f5383d8558c20164f7db79af0c8cd11c5ad8d76142b15ea74674593bb52a5a5993b6c3";
+  sha512.doc = "1caa5bcde6c1a3ac5de024f513793c52011285e70e32664d6c5d1a103027c74d45c716d01aaf849726b5b7ffac511ebe6cd16ba669bfeb5fdf37addc59e24a6e";
+  sha512.source = "0fda8a0c5e46933cf991bb4120e4bdf98a8ba05e1ca96600fc9e6abd5d3a5c78ce50ae9e625fdda956c90a8f9f569f18d9ebd96b6de4e0e5bb0fbd2b5b00889b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.6";
+};
+nomentbl = {
+  revision = 16549;
+  stripPrefix = 0;
+  sha512.run = "195cd134db2faf9c7405d040d0d3b4a71ec39ac201fad47c855d34d8f734d069c03424ddec6b1af978e7b244b3907f846fbd80fff6063e7b25df3de508fc51ed";
+  sha512.doc = "4ea606a78da4c0c4f5c35b38b9a430de8dcea49c8662081a85f3aa575523c40f5951bd54e2c8acb368b52f75a3214c0a4b0d178dc262a64b8f6485852c4458ba";
+  sha512.source = "5cf26c7871ccb841bb8350d594ed9333d7b46c7d2e3db70080ce743fdfd7c7fbfa3c8f7f976bf8f37decc653e54954a5e0a90385fb99ac3428a8dea4a5311719";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+non-decimal-units = {
+  revision = 68504;
+  stripPrefix = 0;
+  sha512.run = "5ccc76f7aaca5aefe92e14a686a6847a1df8b00afd04fa96d11dff75951f729920f5564244ed06b74b67e2a81532111fc54adc719a59d6a9d1ac4d6fbeaae9d2";
+  sha512.doc = "e200b68474a0202d8018d943382bd76830f411b95373fd6e43715b343ed0214f08b529b1bec92a4b4fa4c8a1ff8accac8994ca7e342e7edcc5ead511b2769e21";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+};
+nonfloat = {
+  revision = 17598;
+  stripPrefix = 0;
+  sha512.run = "39f8f0a4d9ef1cf8f1dc02c63612980f25cee80cb545bf405d9d2a080256ba6799ff3030c98c26e6f2aaa10ac71015e58e4233bf84703b290220b12db45c70c0";
+  sha512.doc = "2d090fa397a385cb32c26957b5c4c05ba8443fb1bb7ce7e3eda777ddc2d3af11ec3ae6297bf014f40e71d4668044ab729a6dedd74e8802ce9089b59d57663374";
+  sha512.source = "be5e0b078adb8c530d8255bcc72daf50ad8cbb48343fa76f132e1b75fd64d033c7caf287b6901f1bc49422956f6901dec0f7e7b7639dd71c10c1a76ec958aaf6";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+nonumonpart = {
+  revision = 22114;
+  stripPrefix = 0;
+  sha512.run = "e97fcc36af3e86c1a432d0e425dd86308429e764c976a2f7f8106c3433ae5a148bf3abc45706bcc3090089911e2dfe175156eccaba7d97f544154ad0b288e58b";
+  sha512.doc = "0cd6b115638c3151e5983845dd2964ed90f24bd35a06e904a005755696d6faccd90bbf88c7bbb5a0282ffcd266cb55e9eb1d058fd78432ba062fb4fd723348f3";
+  sha512.source = "46130f9c35465685dc690096405791f82d70e73091f6654b5bbdaebc71b5fa3703a013461aedbe2cfe59975dd6233668f0c204e817ed65fc83c30be59be52505";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1";
+};
+nopageno = {
+  revision = 18128;
+  stripPrefix = 0;
+  sha512.run = "0e152caa8b8df06444f50e2f9ca93f18088a0c58e2d5936f612a770b90cdb8f4bb0142064f56573d8569eee274adbc2703037ce4d7477c24d23c7c8de8748a62";
+  sha512.doc = "5988c42840efc02f816ca0f9ff7ad2d731c66563c0c4de21b857de975bbec08962cef4ed1dad096abc39ecd8489d3a34a66809e98f49b0a280c186d03e6540a2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+norasi-c90 = {
+  revision = 60831;
+  stripPrefix = 0;
+  deps = [
+    "fonts-tlwg"
+  ];
+  sha512.run = "5f65927546348815b07c93003a2b0922403d274bfa3d1665d4649c9dbc737df924958c2fd61c1d06cd5e7c1862aff392c8d1e9d827f4ae79e70d9b76467f651d";
+  sha512.source = "8fb30cc3a1e762ec15c813fff0191b08b64a0d259dbdd21a9edcf70c6eb1b327cff5ef3f48b9dba0b7d99d1ec31b3accef65deca7285e27790261ca659bd525d";
+  hasRunfiles = true;
+};
+normalcolor = {
+  revision = 40125;
+  stripPrefix = 0;
+  sha512.run = "013354a5f7514f6267d57d098ca93eb48970df0ce1cb2db0c60ecf664cbcea177b934ab8f252cfb9dd4c0979417937462ef55e51502bca7f32a7de1a0e820e32";
+  sha512.doc = "ca7a9c008f72aa1287092f881f9ffcbe58ed45bfc97ec3231fbeceeb007f6248629d9cf49598afe604ac8cc30a4e8117f54fe517fcbf52548add2f6ac6fdb662";
+  sha512.source = "ac6fcbd939d13714f21106c6b0786a9ede4ae6a3023348678ce22bca59343d7379fce9ef12bde91fd05b4912c70c8b4eb64b95f2869f4a30c03c4443640b9d80";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "r11";
+};
+nostarch = {
+  revision = 67683;
+  stripPrefix = 0;
+  sha512.run = "3646dcc196a2b0fc4389d8c7ddbce263126ec88f33749e7b290bdd5ef1800cc8142c35fd87635c7df2b0768c3be03a25bf4e3b84162119c859f278d70bfd4fa4";
+  sha512.doc = "279cacf2c378e30468748f3e92ae30d3085fa93bc38b43e7a2b423d06de056fbb2135f9aa5d243fadf504c60628b1048dbfa4f8c9e60fee2f844247f093bd7b4";
+  sha512.source = "1fde1f24f5d0f009025f1391b360ebb1e4eeda6fc571c6e41bfbd4620b7dfbe739e60b660fc034f3d2f0e1e5a101b1e8c5c8f187e5a3f38c9734f35dd6742bbc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4";
+};
+notebeamer = {
+  revision = 68871;
+  stripPrefix = 0;
+  sha512.run = "87870abd8c42303024df10a6339f6973e83e61fbbffd8851526683ad672810929b1e2f2fb2c9ade58a155b063fa39932122c6e21c652df1a4f7ad60f64c5ab7f";
+  sha512.doc = "d9b9bdeff61fac3e6bea8aea4611cd46cc08362cc104bb30e4a67638ddb9d45c91059606d016be559c4926b0450bbef3962eb75d6d6c1fc14f262ef3acac2510";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3a";
+};
+notes = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "7b569f27ec34c103c5808036a6ffd7f97f9171287883f38c048b8eabbd979559fbf15b20c7002dc9b8b0577889482c4347e4986e076079809a4a5656aed46101";
+  sha512.doc = "4e66790b76290925f49ab7f56175e2d41a20e715c43518edbae39e444d02b945ec05ca918574f52fbb6ca10fbbb060242c688fb9344094df2e025de83272322b";
+  sha512.source = "f5405540929d6d99471bac43d89b01ed7ba59bdb8f1e7d978dc9a43a563e6b16c9cc4645d291054308f06b3d4df10547e09a72081c210063d37810da511dcac1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+notes2bib = {
+  revision = 52231;
+  stripPrefix = 0;
+  sha512.run = "019645974d270df27f5c5bf22570e26b5bfa5c076739824eff60a40d1c246010fe0e599eb2fb282cc08aa2161ec7ee753b734548ca04370d9bf923f357ced1f0";
+  sha512.doc = "f4b97327b98e86c64620e975130a7fe790489d16135667c95ec7a368591084c381362e1447dfd1b3afb4f57ed2657a43f8623942f6618d839cb9b1c0995234e3";
+  sha512.source = "04cd8f2ac89b8f4fdb20a445cd98ac382a082114eca90306eb0cdb793fe088ef1d1ba9e35dd9c9b2c98238cee6ed9519144c012973d7c2e1928c11f7350091fd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0m";
+};
+notespages = {
+  revision = 41906;
+  stripPrefix = 0;
+  sha512.run = "f5f6960bfade079642a4b4f221a7b762cfb5276a74b20bb3eada51706cd2e3496f91ca23e35cb39f221c57da19012597eabc8d3aa63c58e0749c8a01b6a28ab4";
+  sha512.doc = "8af2f746d4484a2e06bd0f7f766c49cc9b0b790da2cf0faf1c83d959f2e2f60fcdcb7cdb6f1ffed89c2b03846215b589de332dc20935d0c0add4e3dc025c42cb";
+  sha512.source = "96b547ad56fc2e503c2cf9b6089dd74e2902831d99fc8899b57affdcc1c1d23463dbc7472878cf30ee26078c30cac9bdc20975925de01a86982af19b6a3113fa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8.1";
+};
+notestex = {
+  revision = 45396;
+  stripPrefix = 0;
+  sha512.run = "64f9704fd3646cdcfdc03f6a3e03f9fb37859b9f11463fa77e1d3d076115297fac9c0b8d6875c8b6b7f3d37127a400e6205239957526018d9ad5cdf36a984269";
+  sha512.doc = "c47bd3a4153467a63ac2e2b149f498f9458132e841cd70da9871f10674e77d928f7f88e58855c139dacdc225d286615caf0297077b843750e6940482398f02a2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+notex-bst = {
+  revision = 42361;
+  stripPrefix = 0;
+  sha512.run = "68627ca4a07ed0228b9b9ea4b70cdea5196e907f71f343310259d19464d503e76e2ea8fb5f59f01337916ee1f2ef398bdb1d3e4d97f0d49eac660fdce20590ff";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+noto = {
+  revision = 64351;
+  stripPrefix = 0;
+  sha512.run = "6b1c2961ca9199ec9f0c9eb6e8c2ce61eda6d4eb0157ef292a176831df2df83bf09c3aea23825818ef5ed03128ba838f4377e42b53409c96d388422ce9dfd467";
+  sha512.doc = "20b8371eec90440f2a491e1f34a0fce79b700e7b2f0aea2a808baaaf4e3275dd253b65d32429a78be6ed2b31b576f4291cc1f3cc2f625a675cd7a317bab90759";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" ];
+};
+noto-emoji = {
+  revision = 62950;
+  stripPrefix = 0;
+  sha512.run = "68400eedc7540f11c0d3649558ce14ac1bb0bf7f2ed56dfda355fa08c7bf37e947a4c48040075e52b4f4205250df2688a7de22fcbde8285ae4549deb5e02e263";
+  sha512.doc = "6c0d286c903b49e6c09c570a8586b0f480497f5b64eaf7e9a99d81a143ff9c383cc281d2d1c06293d82c459b5ac108cd960f1d5e4ddd80a70f6c39b4ae3a7d75";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "2.034";
+};
+notoccite = {
+  revision = 18129;
+  stripPrefix = 0;
+  sha512.run = "b63b890933b27717625383488d2cbeb1501ace58b83e5af66a35ba440816527dc879df444af78090294df6d4d412d21fddbab43068a6d677b22d750ddb4105e6";
+  sha512.doc = "83b3d2c7b97bb88af13d888d04f08ebb7e79661b4924ed6e328f26b9d19e4c6eea6719b49e6f227dc37c96201a901fe57da3745dfa7151bec27c7e8bfb81b236";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+notomath = {
+  revision = 68014;
+  stripPrefix = 0;
+  sha512.run = "908ef695e1eeeeee1bbff53956b1d890fc9327cf985602877abc26aa787bbb7a09c18d592c2f5b2d1840aa91e0c1c0b071b8af0d576c5110eba5f62cc1f3184e";
+  sha512.doc = "708eab7029720af202b7af3d45becbdcd8c8fe6def7327b70f3c67bdbbe6c17c53c1e42912f4dedde1f805f7d7009a75e7d8279f7e3a6faf091ca6990cd4f5ca";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.03";
+};
+novel = {
+  revision = 68807;
+  stripPrefix = 0;
+  sha512.run = "2debc0cd636e6d0fce34f841e46e25fb3fade7e601a43d6ccddacbdb475079e5cb07e83efb47c941cdda243bfa89da2b9215971d9012850c4cf0c780f8b0db6c";
+  sha512.doc = "851436d9fe782e654da5bfc8ed7f55cb63c3dfb2911fd4b0a01e9ef1e6d92044b1c44c471d99046c28e35d68010120c2cbc2101b379a9cc0584e0f18cf7e1644";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" ];
+  version = "1.83";
+};
+nowidow = {
+  revision = 24066;
+  stripPrefix = 0;
+  sha512.run = "2dff380964c5c487a015073ade0cef996f5786b204657ec5c8948748f485c03b457f6d8caa5bce8148cdbba2623489a01b5370bcd38eb73469d07da4afb8a216";
+  sha512.doc = "b11e2051543215f3f19c4d1e3398564093202be07771b7b3711e9ba5359e750bd8f73118b099f82fc3bb1e9a5f202027b168c371ca6587703d82f853ced4d538";
+  sha512.source = "862f3fcfb0a165473657d8e8616fa200a017c410e162bc8ce95376028fa4f2c0959e7d116152e73ba6c6cf4d39ad34d1c57f2320dc20f637e1d3a0e2cb2ec7b6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+nox = {
+  revision = 30991;
+  stripPrefix = 0;
+  sha512.run = "0061e0bc12a06b79c4339684d0598587f3aaf1c2aeacc7aa32118d7b91d3937ffe0ca50b55f5ba9d1b7a4a1c511811191160c58bc51b68dfdfa2b0cee900b409";
+  sha512.doc = "2383ebed9a9c6f65d6271317b46147915afdfd6caf39893e4cfe470e302f9ed6f30ca9f725bc2bec296cc88027462765b4ca5731cd5ccf98fa5c8156b1d88987";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+nrc = {
+  revision = 29027;
+  stripPrefix = 0;
+  sha512.run = "2d93fc25d0305b8bee0e5e9ae61bba492bc265e023980a411ffa521f15746c6d73940e352c886ed5dbe08502f472a63559191aea44c3801518bca8b28d0b753a";
+  sha512.doc = "35f86598105db616ea379175f3a098cf7c94f4a0a8836302de664c7bb65bbb5f72f41c5c9dc58bf336781a23553ec49e0a5c4d7d0be12b1cff68108aba77e88d";
+  sha512.source = "3404facf13d3ddaaf4a9aa295cd7c0777308502075d1ba70bfd6be6e8158eea6ff4b88db2414f8ea5e758ebdf52dcd5f44b6bb55e903c0e11dc6260b02a1779d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.01a";
+};
+ntgclass = {
+  revision = 65522;
+  stripPrefix = 0;
+  sha512.run = "f0bfad104459f2740712d186f7f9aab20e9860ccf75f8c552a4c80d8b14ece4d503d2aabbd7d3000e1bf05203f41ebd49f2c693b4d36478b631cd27ce71c9c0d";
+  sha512.doc = "c6a6d7302edac0aef33d1747900c3781683c2a0deb4d9dc3cafabda375e9cc92d9b57b6638442c164b7435279d43f208d2ebbdacf944e96c71ee368087d70922";
+  sha512.source = "60cc5982eeabb092b53f1bda76c12e3c090d9777d6a39ebe7b675dfa5dfab27450edac8da7e44539a67af1cf737060e0e52dd80116b8b7f784f46efc9fe7df82";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1f";
+};
+nth = {
+  revision = 54252;
+  stripPrefix = 0;
+  sha512.run = "e94365bee89f78b13ec22d8d34ac78aaf50f060f9282c0529d98518ce1e5b7f7995bd2da1d17654ed795f7555e7dcfd9d51399f4a83affc059eb3a760a76bf97";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+ntheorem = {
+  revision = 27609;
+  stripPrefix = 0;
+  sha512.run = "aabab9d6f1a5d9e9bd2ee2ec4b9ca8200098a8f3dc786b9c06d4b0e00431dd66f32a254d452bce7e1bb595454e178dcdd71d724b8d835b6f1c9ad9de41107295";
+  sha512.doc = "fdea81cedc9ceca6ee29ee006867a05f018f210db2cb59c763adc4bc15db65a7e96ffc93bcd576a4c1a50e7e55d4b199132371686538216eba6fed65dce77ba1";
+  sha512.source = "bb0eb98e3344c4be782d113a0e5f1c91d615a5530e1c0a786938b1cf608fe8828d59d365c0d1011e62517f0f76139ea13bad1857f2e1315a2b919af1de3335d2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.33";
+};
+ntheorem-vn = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "90460e92cb52bbf8ac9b56bb950d36551b40ba260a9745e8f4d339bbca855286f8682c1a5bd7dd4ecb53e85448f96d558e6c35ffb42d8b862d4680930f3a64ab";
+  sha512.doc = "e097290ec9f9696aaabaef4dce11bec4337050848ee547535c30a9ecdf12a1e0be014f905b235fa1d851ad2c20426cd4a9a442a19475063dd4fa73945c3e1780";
+  license = [ "lppl13c" ];
+  version = "1.203";
+};
+nuc = {
+  revision = 22256;
+  stripPrefix = 0;
+  sha512.run = "d540e5dc8a3edb41994ef4ed8af6a51fea544ac929ef059fc50cd561891e02e9ee9b55a62782757101cfc5eface3a170bd585c144e7c8e79e191299527f979c6";
+  sha512.doc = "ac118243f5fa4c7a4000344dfd5793dfbacc4d7a16a7031fca6305578e06bdd627473eb065a13c4d9cc5d9ef3c1712202c2d65a913c75043e36221fc7df25ac1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+nucleardata = {
+  revision = 47307;
+  stripPrefix = 0;
+  sha512.run = "68f9d542701bb9d2db956e70784dfce8a14058b5cab5c8316f9d76d59d20de4bc7fa05f22cfe318312b9ecd823a0d0b5cd084b809bcd615217f14e9e0ba76de8";
+  sha512.doc = "3d03a8b301c91fcc3e8221f913574b4542e0aa645d83e443d117ad0d69b7198c4780207f0a5e36f7e24f538a249097e1ac4d828e192f6dd22684e905ce9f1cb6";
+  sha512.source = "cf26f591795ce6db64ee7548c0384764c42f2eda260b5e5c1d56f7f08c54e13fef84616ea0a3bf9a9bfbf95ca139adf675eaae3047c80faf49e14d6330cb25c9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+numberedblock = {
+  revision = 33109;
+  stripPrefix = 0;
+  sha512.run = "d45a69881dee3aa3b6de69587b8c59d889fcae528c3c66f10cc14d653dbf7281e9ef4045dd2595d1a5c7305686bb0d12696bc00b672c5907dc58481a4e00d70e";
+  sha512.doc = "99443d809e77b32fafaf59b3faecbd121f038e3ce8e054304e8fdae6b145a0d19a67b5e7d003db72f06528d975c3e543a2fb9bbfbae9f48be460b1a344a0d2c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+numberpt = {
+  revision = 51640;
+  stripPrefix = 0;
+  sha512.run = "c23fc54514b98cbc31e095f6b1ff37d37eef75146a3eb14e230ee75b71f6d506f148de643ec5e890a565b544b6d05436d47033f0c00ecdccdab697336b61dbf9";
+  sha512.doc = "8b3723dbcbfa0163d7113c96ebcdc5a2262c169a94b733dc4af3bc263b119addf58042817dc8437ea5583ed93be1f3d5485ed76c2d704b20d303b5efa8bf41cf";
+  sha512.source = "967569a1ca42c00cac46f77cf2dbe61d1aebbb89d3754d69ff3beb848d174fbf544374723d33a8c4ec8b98b2c4d93f32dfd1570112a149afad934eb07bff4ef1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+numerica = {
+  revision = 68021;
+  stripPrefix = 0;
+  sha512.run = "56dea9cc66c348affa62820c78bd92b793f6ca18c4581bdec25e4579ebea16bef934e1243fb18f35bb3ac62e1499dcf441099932c05f016f5edc32fe85a564b7";
+  sha512.doc = "321c27897e1d1fd615cd8e1d122cc6c0271e5dbe72c7179ad2dcd0e06c6084bfb1e0a6a244b55cc41bbd8658f5ff9fbcc0962e950564a3fe3fbd7d179f0317f6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0.0";
+};
+numerica-plus = {
+  revision = 68019;
+  stripPrefix = 0;
+  sha512.run = "803e50eefdeedbfdf610f4084eb8574246a3f0c56e647a1105df410254fe7d965faadb397690aa8df08e488c5462af2404293f7deae6f8ae5810bb34488f29fb";
+  sha512.doc = "aa8be0b87a737a956c5f69b84a9760ed76de6d0c4a6c27bbdf0a08e9d3cafef977c4a0c22f7d2ec088c278e8333cf85e7d84a8054ce8a7fcacac6cb8a0e2a5e8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0.0";
+};
+numerica-tables = {
+  revision = 68193;
+  stripPrefix = 0;
+  sha512.run = "1244ae95394a7e28ff9281d1eb4f81de88a7e83e7dc880ad6c185591b2aeb3fb826113f83881811e19385aad5dceecb79d99fcab53f6d313b63b31235228643a";
+  sha512.doc = "f926645cf5f512dc655e46f6fdeb54b5c12050d66e9408690e0980843a291d2056a51915a44f2fbef6564f85344eea46ecbbf1859d79443952e989e6b8ad5e07";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1.0";
+};
+numericplots = {
+  revision = 31729;
+  stripPrefix = 0;
+  sha512.run = "6b51a7c68357dced9627d3c618a167d689b573ea44c2f36de5417735f39f5b3d1034558cf188bad2da5eb25f81a2bdee3df6059b8c14879770c3b300422cf016";
+  sha512.doc = "1c9f9856ec2f8cfef61829256f1076099e6bcb79cb45e8155116d6c24feaa52f481c739593c6cc51df803fa76e8ec38b8d276e796660327a2bd1d86957896332";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "2.0.2";
+};
+numname = {
+  revision = 18130;
+  stripPrefix = 0;
+  sha512.run = "b2859430992fa6ee99f4d96f58cabe26b0f216d5e3b512c69b4db74738d933ea8d54503a61257d304201ac3fbc2ba49e908eeca5953ccc0f0023cbbe8b3df76c";
+  sha512.doc = "41aaa9057415ad83177f416e43fde4c8c81e335b2f3c025cbc53ffe1d9d61fc05dfe33221c16f1d652837e4ab5a797f60391fb4c319339517090ad0e2ffe66bb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+numnameru = {
+  revision = 44895;
+  stripPrefix = 0;
+  sha512.run = "c6f92a720fc5baf6f55c3bc18e22113de0f7cad8a051c2019360f5f3c64eaa450bb12d6c361c52a5a802f558ff8d2cbfaa35897682d6ad218e9adbbc788f3c57";
+  sha512.doc = "5e67f1908356e1f21e672e63a8873e46ebb36af39e55a64c174c3bc5c49057c6d19ac36523c34a7f1c1fc53346f6ddde8fd239ca88b5790ebba1eb8b7dbeb0ed";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+numprint = {
+  revision = 27498;
+  stripPrefix = 0;
+  sha512.run = "cdebfa502a461292b02186b146ad8086f46447b5d8a0292fd7943d93a39796eff1710563866506679e903b7a4d415af9a8d863fa81a62395c7bdeec2cd68e66f";
+  sha512.doc = "b821566e6fc532425c8f1b901b5613c763eb392461644850428707105626b6eb1a53784d6a693e7f9fe2aa612b72b4d5a38ddf65f22a0d022981771b2b303d04";
+  sha512.source = "d4af01527564c9818840a87d9c876ec8d8cf6e7712913ea3deae4012fd0d4f0dae19e4016fc205814620d1cf97f3c12b98f1003fc6fc81857101d2ecd90fbe83";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.39";
+};
+numspell = {
+  revision = 61132;
+  stripPrefix = 0;
+  sha512.run = "4db8e16d137f47681f754cb2bc1b9b6fb404676f57c5696ef044287a3f0052603978997e597a2b8b13393d59e6531298daa127d72a381770cadef1a29944948b";
+  sha512.doc = "8bcc1bcca230a7829a106c66904feb70de818dde2d6c4c7be3a5df3078482bba001a35db85b1c548fdb5aada0018cf6f0dee936641ae5959ebb84dfe953b6b9f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+nunito = {
+  revision = 57429;
+  stripPrefix = 0;
+  sha512.run = "920e074987e7e75fa6db92e3c05d76f7aad3e7d9b4f0166a8a8ca79bc5183549299b56a10f1cb6c7fdaa63f7f55aa6b9c1b2bcb4cbf03567b26e9fcb0240472e";
+  sha512.doc = "e0de75f22da96d229a6465a4d47baa8e4c3199567f8d2e3255893e5b2a2d16ab73eabec1a103b355518c4cb98ea3146ff067af54938c21a910aa65aee3f429db";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.0.1";
+};
+nwafuthesis = {
+  revision = 66895;
+  stripPrefix = 0;
+  sha512.run = "f3bbd684f063f59ea0fc53df99ac0e84f3106651d6ce5cd48d58cbcc7cfc205a9330db5d4c7988a213563d6fb215a1c6d90c240396894ded1b7ccef0ea4253c8";
+  sha512.doc = "4a5395c215dd135488bec466dd4fb210402bdca2e54deb727264b02bd621bdf16ea60b4c16c86497b016f30f2dc5c291d0d432bbd99beea84d59533d29c2557d";
+  sha512.source = "d6188d94c3c35c2fc63efbbc37263a3f0c584974de022978671701e8e0d25d26b11e3dc92edb594ffadab231e754745b35498f09d9f95e00a114f09f790d103f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.25";
+};
+nwejm = {
+  revision = 64462;
+  stripPrefix = 0;
+  sha512.run = "eace1abc8a31104d1266acc6f19ac59b0d0ba73cda2b44bc308ba2a22c9ccd682ca489b9f164d30623f60c911717a171665da0feec6e0caf7c7cf01b8e51139d";
+  sha512.doc = "8ebf12322bf1beecd8e224e9b7a16becf68aee9910717ca39d73ddf3537edc28d559337350ec9af18132679a77319115f6c1bad29cc5ade8443e6e129b3e542b";
+  sha512.source = "f2d5d526b2b6242636324d0ad3aea17c21a680418cf937297c03249034c7c03fcf2589b794917ac72fc5a980dd2c57dcdb4dea75f0c894a77d5c5023824e7168";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.5";
+};
+oberdiek = {
+  revision = 69038;
+  stripPrefix = 0;
+  deps = [
+    "auxhook"
+    "grfext"
+    "grffile"
+    "iftex"
+    "infwarerr"
+    "kvoptions"
+    "pdftexcmds"
+  ];
+  sha512.run = "d8c75685ac77c9b8f3259952cead1d5d46dc7bc556044daeecccbe1229da7566c0a31dda776356a6bddd0b710b8e8e3e84612c3ea9e9691bb486e154d9e121be";
+  sha512.doc = "728d95ced0404da11e4dffbde075eb02803a09d5c89fc34b6ffe78e47c78837c105a85827adaf8974d2edc84ddf1e7eb0ff20846a2712d152011b2198bcbf18d";
+  sha512.source = "726481c21c3bda68ab4050c8dca78cfef2a9e7fdd6f8ee21540fc1dcd629383e21db06588cfd836915a58e4c8da7fa7762f4e65bb01da8d0ba94e874c1d04742";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+objectz = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "15aab03ef1773a4ec72a3dea3fe036cca671abd3e55721d69201c43902d9655a9b71b6b109c13824015a9db740cd8e463016f59dd84a22a3648c14cf7e95f2cb";
+  sha512.doc = "b1918ee04b6b1755b947d12485abd250ec91ce4dfe52403631e00b6c3dac88db2c3c3801912c952d26a00b06d8dbf7a9d88586ab7aa348aa0b2ec7cac1e4fb2d";
+  sha512.source = "77332f847ae68cfcbe61b1568e7079a9d2c5a51012c0de3bbad166df71f3cc2af61317d886e4092192e647ad2ac13c7f768b9397770587910ef63a89acff117e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+obnov = {
+  revision = 33355;
+  stripPrefix = 0;
+  sha512.run = "8adb7a1e6183576b4ed9d709b2f64cc778217602c807fce0daaa62b59786d5629fded5e7ad4824cdee90ad5333b9fff4fd47d462e38005fcd1026af8838f04ed";
+  sha512.doc = "6fca30705b614ede4e055a39b92deac91daa6e9ca0922725f29c801e58b4a1ddc7176148b03de147aa906289962a3ff45a743828c0636d7f8fa3279b88e5103a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.11";
+};
+ocg-p = {
+  revision = 28803;
+  stripPrefix = 0;
+  sha512.run = "23b0b4377ec615d8d334d09018629f524a775311c3d227b350e7dfe95c6154795d1d3e44e7e1e405d45b623ecc614892d0996631615efae2ad6f040c1c4d8dd0";
+  sha512.doc = "c51169bf3398b17f3dfd2e0aa0efb574cedf40c4739f1b4693f9282042fe9f024dd48675bdf5ec04895c49e0583ac436bfb36e12ac51ce89bc23ac587b3f92f7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+ocgx = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "33b8ab1b03b7a887127dbe589212747c8cfd794c1b1c9525222cdede3f941812007441ff2835386e59a19b253e5cdef27a83dd958506dbf7dce6988007befa3c";
+  sha512.doc = "c3c28d54a06a5010d8b1c266b1b9689cbf41050e8427689015ce0016131cebaec87ca0c416b865b5bf9a386a2cc33326da5720d326d797e94c41b8f02e160889";
+  sha512.source = "633326b032b98f52375e75cdbc55165e35ee4d531d4436df6575ef54c7897187030d99aeeb0de26622ce4f5e56a10df3c381ab72c0731fd8150d677f1fa3c09c";
+  hasRunfiles = true;
+  license = [ "lppl13c" "lppl13c" ];
+  version = "0.5";
+};
+ocgx2 = {
+  revision = 65292;
+  stripPrefix = 0;
+  sha512.run = "dfc6fb9f004ce6af6cf0af6f057ef3db0bb8957b52f2e1ecc262da1f2b2fd556626560062a712ba8b45adcda1ef0f1414b54d78f58b68f1b13cba913a9df71a4";
+  sha512.doc = "c09b684bd181579f6e773b295344ba78b6058f87d76d0ef3272bf5f80691bb40de49554948be53f9bad7779c0b4b8e3adb9fae1e12e0c4403962bebe4f949350";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.56";
+};
+ocherokee = {
+  revision = 25689;
+  stripPrefix = 0;
+  sha512.run = "9638c408e96fa861d395881d1bac87b55048a25de61561823242d78f836522205c9621f5a01bbb5ad1c8390230dac727b4fae333c22966a04ff5df1f923b5909";
+  sha512.doc = "40bb5e47b2ac627007d349c0b043f299f09321aa0d6fc11ad9f345576fd7a902be4d012d56ceede9e66c8a5972828e7b5a5646c101c08fd28fa3ab1c935f8256";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ocr-b = {
+  revision = 20852;
+  stripPrefix = 0;
+  sha512.run = "30b658802a2a30776cef18c2ea0f1a71044b5b7819c75ec58df9acc04134cf1aaf85b97f93231d439d79c47f66d7bc57b43494aca073871ec3479ae70178fc58";
+  sha512.doc = "6d162b10b558a9db8269b2535ac9df4f76973c54d7e23dea20efb29974b839278888fceab2da85f945da483415bbbafc614c8ae4c1cea6d262d6a46dea5b69a2";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+ocr-b-outline = {
+  revision = 20969;
+  stripPrefix = 0;
+  sha512.run = "ac15acebab9c9f81f0e7786cb3222b336aae3fa4a379592d5fa231e145cfcab536e28c9078ac617bf9b8b672f6dd24b30caa998242ba1e3f4633873ae8d54609";
+  sha512.doc = "7bafe00b9c5d846f21cac682d9577ffe696eb54a55f4bee9314646451fec37d883eca7531f594a7994fa8038f7bb5c78a55dd8a8264255a6e60ff90929596d00";
+  sha512.source = "b2fa5f4561a4fe61c216e800fcb47bf99a09a62d41d62e30669753139484b58b137649248ec152f7631461c54ab4e51873f3c7a42d43ccf2db86d3cd21d3493f";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+ocr-latex = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d6a4377f66293f8f7ad8b7f8fe3a3a3dd294a302dabb33e193921882d6681fc1c5537b8de2bb188396139bbdd33f14d4f1c20f6edf44ce680df837b250ee83b4";
+  sha512.doc = "d0de99d5cf93517f5be8627d649a1d8018766cbba44c40cfbe0f93a3b69c1a5f10b4057dd79194d148030948509a26ef45ea83208c2922cc64b10473d663d591";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+octave = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "03db52eae29898d00b407af64fbc8aca35cd5c6165c3f7c890dce1f8218df65c3df447801d8c68d29af67f62de3057feff203de7486f192d9e7e6a59d4f28e02";
+  sha512.doc = "13cf74923401dfd58978c2365e27aa394aecf01849543cb6f65a52b3344902c546599c350927950f63e3faf1b81667e9329b9c18aca6cbb87327046f0d695988";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+octavo = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "06de0f1e69c4bd8bf0a65e08515994a10ae8df83e6e8981daf70b6eeb424fd59b58808249782d76b9373d9982aee50e7c12c17e090e3697533b87d35480f94a2";
+  sha512.doc = "daa628a0c047ece5aaf15425c0123128a771a17f08fe9212856e2d63b40340dbd7a50a4ed1e19b04198637e11b530239f4280b810ee3813fc6275b78d37bd8a6";
+  sha512.source = "3632856effd0e32e8595bca0f2a1ea569261cd0d273fa200d9cd9c70908a96da613f06eb315389fe9b8e6fcdcd9db233ca8c148120625f6813848a930fdeea67";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+odsfile = {
+  revision = 68204;
+  stripPrefix = 0;
+  sha512.run = "0c663510fd84f116cb2cf12c41a59faec219b774fddec215ade16b9299db1e445e46deb565c4b0acad18ad2b0ac3c5f54c9b8d7b2ea3fa3bfd43cf86716969dc";
+  sha512.doc = "e76be0163772f0bb905cfc4987dd2d1083decc706e521647217b7ecb09214c29bb1118867bbe8d20bd2aabb1648bbfb3ac12ba072c38ab7242d3b1a86df5f6ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+ofs = {
+  revision = 16991;
+  stripPrefix = 0;
+  sha512.run = "347dc05e8742fa09679e3f16465077b0bbf5e34a4be5a5c2e1da094ad22c0e69ff9f4abb4aacb9be2c698b27da7e169adb0c1840da3e56b277514a9f9631dd02";
+  sha512.doc = "13f7fd3ab4cb31ae521827b703cf4c3a0c796b6a33f46b2a24a2a8c488e92d6039a9b136440b00b6a0aba14a2dbad832b777cd5a3aa120ccfc4888ee147954e7";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+ogham = {
+  revision = 24876;
+  stripPrefix = 0;
+  sha512.run = "fe651bcbdb0e8f9ded07fdc412f1273cc8d473894f06af69ae65ac4c6895daba3f61571eac9a49d16de043ae6ed6e03ea386f11dd6b395347d98784bece4c8b1";
+  sha512.doc = "6d406cd0a2ba68946be8d2eb148a6c9286a164ae701f66802ecabe6661807ea54eba175617e00920d37a88dee376c1bfcecef6184320ef1790716d53e5a07871";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+oinuit = {
+  revision = 28668;
+  stripPrefix = 0;
+  sha512.run = "4d6b72ce539766a3453f7edb24c243a2a495f3916ee9fd650917c510a0e8fe36e12399843c1de3dc0b0de704bf5362ea20e9bd0d6c3100e659c5641395d658dc";
+  sha512.doc = "dfb7275002731695086aa8733a543ca1eaa207bc57cd0b324666940ab932cd9301cb1c0b0bbfa4df36278ac8e289ac1be78a2e0a58ec656c470ff4b841a70803";
+  sha512.source = "0d81c9803b9b45b20c096ab00d0c0e5ca26e71d5af463e511660c5bbd28b5b962afe243f21418883575b5d40f503bada65b5c34ba48486aa74a6f9ddcbd48680";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+old-arrows = {
+  revision = 42872;
+  stripPrefix = 0;
+  sha512.run = "2b67317d41349c6d601d8ddcba6ba58cf503756f5bb2f4343c1447cbe4e24c8949a4de58e7cf3863a730bfa809dd09f5f1ce9944e3dc5d4de104e4817d6add17";
+  sha512.doc = "d142a95119386f85d1e6ff0f6a24bcf09b9bf7ec83a581ca43be67376cd4a44453d090e4eedf97bcba1026827eff29f97add3a6ed676833b02b718da4811a3ef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+oldlatin = {
+  revision = 17932;
+  stripPrefix = 0;
+  sha512.run = "02ba84762eccf816178cc652d7f8d8f7d962db7d5386de4a8274dbc9524fd7a212116de0d7a53886bd5b431ddb8a5cd8ffca7defe3174cbb50f417172d2963f2";
+  sha512.doc = "1ed3c1640420272b33178c62aaf4c0d538f5f1ffc5350c377788210128c74eef4e6023fa20b3d9f214f518079e8a8c3753c74d30084f5a71a994dd4b5534635e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00";
+};
+oldstandard = {
+  revision = 69185;
+  stripPrefix = 0;
+  sha512.run = "4c82d222ba84192cd6ed43e368938f31c0d481400f7c643defed74c5c39d38400515a69d4a6c76ad14d41cf64ed263e14e78ed7431f53d8c64fd9dc1c20e7bf6";
+  sha512.doc = "c2e55b9f48d145e4a7f7e976ea9cf46d1d7563bf56624aa5fdb1fb78f54f8386dc4eb7520d981be239e77823f96336e8a753bb623d286a3eed24308c6f59e5d8";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" "gpl1Only" ];
+  version = "2.7a";
+};
+oldstyle = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "968ff7b641f6ae6e8aaf43d1ae9617710b0bfed9894dad135cfd11050eef1c35c48d589d58d3a94e34f93c22d85c58b047ce8d0bbf0ae5c2e645de72e327f9cb";
+  sha512.doc = "79e2c2d155bab57456cf7d2ec08930d54e538a830c1e7fb12c0731b246b917840d0ba06d31939ca97e7a20e53a061caa5a5a3beb139fc1a05f32dd9497a37ca7";
+  sha512.source = "a9200c32d19045cd56121a64727c1465ef16f48269e4b9bc6957106451694707fc0fc3db253e0db425fa8396b32560b5922f8556fafdeb68ad129d90f027d944";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+olsak-misc = {
+  revision = 65631;
+  stripPrefix = 0;
+  sha512.run = "f2bd1c22a294c89c171d3df5ff9fc77d2c4476c7e44e7f0e26b07780467570ef852384e510a959f75b9226d4962b6163d890dacfc9341a8657d9b9d5d6e76834";
+  sha512.doc = "856c8ff6d539198f7057e45d5da22bd4120bbe1915fa11b5cd6dacf6b13354df49370dee55d024ed8ff8be29ab83dcc0a786db5fd1f72857bcef7f47d3167f8a";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "Aug._2022";
+};
+omega = {
+  revision = 33046;
+  stripPrefix = 0;
+  sha512.run = "bd07f654ad56219136e2f9e7612b87892bf8c6d0c8f2e41434a7fabb8b159bc43f79444301383adf560f1985f64e639dd496dad6d3ea97ccbd85fcee4d7a36e0";
+  sha512.doc = "31eb2aa643ec37d68d902f4de7be391e7da3af61bde93e78beb1e6df1c6367fcfe00f88e29c8cc878b9cd40f2e3a45f9e46bf24ca3a5608aeae09be491130fef";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+omegaware = {
+  revision = 66186;
+  sha512.run = "9978e66b66e988d49f3dea44b947585e5ec4fd61f204ee06a56a9d32df721c1bd66ab32a05c3d36ca92e740aaec2b478261f3eaf8c48c0cb30fbf9bbb410d804";
+  sha512.doc = "e3312826fc6f2bb7fb8f116f7d73f4f113e2b4fda8acdce29668ffc324bdc90f26dfe21becccea36e53f22707067c19116fa2942fb4165aed3d7c28da88992ce";
+  hasManpages = true;
+  license = [ "gpl1Only" ];
+};
+omegaware.binfiles = [
+  "odvicopy"
+  "odvitype"
+  "ofm2opl"
+  "omfonts"
+  "opl2ofm"
+  "otangle"
+  "otp2ocp"
+  "outocp"
+  "ovf2ovp"
+  "ovp2ovf"
+  "wofm2opl"
+  "wopl2ofm"
+  "wovf2ovp"
+];
+onedown = {
+  revision = 69067;
+  stripPrefix = 0;
+  sha512.run = "bc62aac04466286d07ffaf65b31c4d7ecdc6f4194f99192700774a213ca52861b0296c3f9864c187a83926696ad3a3a139ae7c00be2167b970159a7605fb4570";
+  sha512.doc = "4fedacde595f96c2bd8babf38d4aae73b3bd9f73572547ed5b93e98c16dec50e89651c42aa4d90046464c765aa2f4d5f32d8aeb6ec5de2bb30f6599e53314e81";
+  sha512.source = "aaa8de7cb8444749e1e7671406229d222c36b35f2bb676208c22ce8708a4e1cdc791ae99abad9b55fd877cf97573006c41c5aa2fabc573df589d059924f64626";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+onlyamsmath = {
+  revision = 42927;
+  stripPrefix = 0;
+  sha512.run = "5452647ee6eb939c292457ee26cb3639560eb55893e44ebbbeaf27ef1c2ed30346d91d733422e65f6780af7c434cf02ac740d722612f888fca8dc45538d81303";
+  sha512.doc = "154273f8589b0d8bfa0ed46cfb297d44000eaa750e8d34b1a7aad9f7b26cb19423d7f7ba362e3739cb7d22b2aa077fa44e59d9c46a52db5a82a57659e86a6dcf";
+  sha512.source = "2a3568cde9264ed3f074ad47fb5afa22f4c4835c7e0eb53699f691bf4c52b829c31724e56b9bbc84bffab76d425d9fb72b2bbb49ce14ff7cff0d57f538218783";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.20";
+};
+onrannual = {
+  revision = 17474;
+  stripPrefix = 0;
+  sha512.run = "0c9f717c54d70ad24a1d3b08a6bd44a4e96e932af4d78ba2895f40e16ae5e5b841cd421b71ff3e90490c13e0843d48b8a28efd49b33ee3f74ef9b6476c88f8ae";
+  sha512.doc = "4a4f46965a0de8ca99585d4af31aa2f0f94e51328c8cf1ed29768bb9e2f8cb7e14d63315a008a1d0446d7496ce4f8abb224946277ddf47223808f8f2277cfb64";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+opbible = {
+  revision = 68465;
+  stripPrefix = 0;
+  sha512.run = "8a4fe7d1241a1f1f431a666f0d6fecaf330cccfe19c2047d2e244b06838310dd106d2ff8dcd029301cbdbb0f2627e46a4f4c37b9a81104eb695d62f78d835ccd";
+  sha512.doc = "691b79162654071d39ebfa448203bec2c7dfec8091e781f44d7a48d4c16b884459bbdc4230626999349c6822b17ac5f6f4aba1a8dbd6c7e2a1d6127132faa2e9";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.31";
+};
+opcit = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4514d83e3554810da7fec3cc165c89a87a4aef04866755a5b42861b484ffea81bfff694609d18fb5e3bbdacc3723cbed96305ba0c09bc48af92456cef3b7b5a5";
+  sha512.doc = "6c4e48aa8ea0dd464d7d2902513b1640437518661e9d7237b958b95ad091053b41c6c5ed4407f9c9d87ff5f0ce0b2bda3a99947d3bb0cf70352d5737419e22aa";
+  sha512.source = "031596b3dceeda2782e355e3b19c23a1a31f71295d9ac763055a2ba07eb550a501c9672cbd63929984a3c65108e6084ff6a46fb03e885510e9d696df220b1e70";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+opencolor = {
+  revision = 66363;
+  stripPrefix = 0;
+  sha512.run = "b6b9368a3167db0f71fdd4cf9c369f43be2934060b79bbb2b477d8a247456a7f69932bb92bf8bb8c1e1b5e7721383079947fc40e1a5d7bc6f84a2e3fe9e02646";
+  sha512.doc = "ff198447e40d71f447688b5fb28385d9fe34265e520496f7d77acf7947569dbd6cc7a98802bb353648dc50979c4be889cef1417f2d15f98bc3ebf95e4a843963";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0.1";
+};
+opensans = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "d92d10da8d6d8adfa62d440767ed1fa9abf413a575b122dff275eb2e46d501436edd90c215611cd943308f32a197c72b8fcdf56b72268f76237c2227cc9dd5ff";
+  sha512.doc = "00e5243e465d948b6bd63bfd161d4e549cc6e5b008a8cf8aff1ea5a31bc7a1406858c045cf6fb52c254d61869f1bcd5ef8c6a43ea66164e842fe3fcff2b26540";
+  hasRunfiles = true;
+  license = [ "asl20" "lppl13c" ];
+  version = "2.2";
+};
+oplotsymbl = {
+  revision = 44951;
+  stripPrefix = 0;
+  sha512.run = "bb894b28fd62f95807bf00856aa2250bbe58b0c1def385d6528b50ba925410ff177ebef97279338bff7ab70db012ba916edad067584989f86797b1fbd7e21863";
+  sha512.doc = "cd4ceb0b923da7c0f56817602eca672442d03f628440c8beb82c953cf73a9d1bf8e24939a3ba4c813c99b7a2aa98adede0c98b4678b06fffd3f0bdfe8fae52ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+opteng = {
+  revision = 27331;
+  stripPrefix = 0;
+  sha512.run = "1af8edfbde5ac2abae770765a437bb42d5852877438d283d8021493c621e94d09bd62d9012556024ddecbeaddd838b37ae9abd0486d73e2698956ef49ab585e9";
+  sha512.doc = "b1dc3f9f107e1e8313bfa25b843a4959522eec2e6bc886e8b6271c2175258d7108c824bcbed8d243f0e51b70851e68246fd572bcf6afa6aecdeb86a946bc247e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+optex = {
+  revision = 68873;
+  deps = [
+    "amsfonts"
+    "cm"
+    "ec"
+    "hyphen-base"
+    "librarian"
+    "lm"
+    "luaotfload"
+    "luatex"
+    "rsfs"
+    "unicode-data"
+  ];
+  formats = [
+    {
+      name = "optex";
+      engine = "luatex";
+      options = "optex.ini";
+      fmttriggers = [ "amsfonts" "cm" "ec" "hyphen-base" "lm" "rsfs" "unicode-data" ];
+    }
+  ];
+  sha512.run = "65cc4c05b41cf41a1346bf567f4c14183f11d5a6c14ed6ff79e301ae54523eb8a90eea8f94173b9817ac45c14d5e0f5748be252db6a247a5627b129949f4604e";
+  sha512.doc = "38d20d669bf1d8ce18f50e1824550e5333ead4cf8773aa074e31fa331878cbb7bfed1cf7dcd29e598698dd5fc9855197cf5e2b970b2549c2b79c6d78eeebefe0";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.13";
+};
+optex.binfiles = [
+  "optex"
+];
+optexcount = {
+  revision = 59817;
+  sha512.run = "88a35391d3deb37dd6466e903f3cdd7d134eb9fb8c0a9ab548ca2eeee86687544e1b499248c2d0a7aa3b801d9604913e763128309f88f768d0dafb8ac1fd6998";
+  sha512.doc = "7f0d33068083736fe58c08dc9e37929efcf65de3b62a3afb51077a21d0e27b473a65ee1b333a0dd31b1d39e7f6ce79cae3343e8b7a9742199fb409e90030f7aa";
+  sha512.source = "c62820e25f1251b6baba3095afa41a39616e49147fc88c5ddd00fe56e0eb2d20a6b2a0ab633b01f2578819308fa0f05e53fd1daf781e276b08ade1407024c46e";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+optexcount.binfiles = [
+  "optexcount"
+];
+optidef = {
+  revision = 50941;
+  stripPrefix = 0;
+  sha512.run = "dfd704e585df8d01b279e67ea3a2baba6e86ddb9f38bc9747e370580a5f218e7ae4446d2429fc6bffc605ef0ea56c8077a8f41f3ca6a8e857df29d0e3f328143";
+  sha512.doc = "3b80346a15a6e1d7209c3584d4fc9de944c55867ee7f21b018300b87615c0ff4fbe290a8683088c0e81f0eb20cf514f13fba0eb141808d8e5f5986c75bc9546d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1";
+};
+optional = {
+  revision = 18131;
+  stripPrefix = 0;
+  sha512.run = "3f6d031b4bf863a339a80c3a05b101393f88dcefb67c61a67e01d9647e74def1fbf30f3d018158a83c8a171b875959bf57d7a3e90dc724c32868f9aafcd5cabd";
+  sha512.doc = "d975e4f1b31e2335e55a41b317096be36161fc36fd589255a461772eb701376ce3fe714d727c4de9663ed8e4300bf0b570855b6b3ccb6b55fccd56206ac69692";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2b";
+};
+options = {
+  revision = 39030;
+  stripPrefix = 0;
+  sha512.run = "3cdcd07f3c279a601da49a843169f0cb44aea573ac6c1c67a347712e5a087df4b21c6481168407ac6383e8fd5cdc511ea29fd7ec944edd2d514ac88b560633a3";
+  sha512.doc = "f23bc3575d6c93d056c752c63bb39e3ef9c92de1a90177e204e4d6a1fd90ce8c9afb36e727ac8ce827a59dad96a3b236e5c3c09af081160113cee1b529bc1973";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+orcidlink = {
+  revision = 69253;
+  stripPrefix = 0;
+  sha512.run = "fc1b4a63ce470c910737593ac877b58dec0e77de2a258fe7943b156a31c5f224389f5be5cecfc9d3098cac690a627cea41993d7c47b4510762b3e5c04f63db2a";
+  sha512.doc = "ddbea7f5c36f26e329c8e58c4d8ab3ba6aa2371a564505bf1a1a80a2f89dacfaeba706ac99940da6a742df262a25acce0f7b812817cc4db99793ad11e06cf6cc";
+  sha512.source = "93e268f12d314647f19ab92910eddcc68811e4db66a6c57bae504525469e24e3e30752cdfadb44d36ea866719765c76d89ac8011e0e50f4ce6f930c476c2e4c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.5";
+};
+ordinalpt = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c494aee642949d56d8fe4aa28c18e38faf5f66ca8d9f1990419b7197ba6d8547004bb11c3d7b1d63cfcb7414b5c618af81425e4fd61fcf114dc36f9b7fcfb039";
+  sha512.doc = "dbcad860dd1fcff2e44f568caac9d3d60f4e9ac2312c672b9e9b46f9b31a2498a7e92bd646df8c622b024aefa8f2ecdc9c24e3f95f72f30f1e9b213d6bc4a53b";
+  sha512.source = "c4264de0f61c1d2abb6785f2a19e76578a154bcdb5314a3016c3a8bf700725294847a482f33095bf7173885e765db2afb4a3a34de3fdeb1d0c2a213c1e60b614";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+orientation = {
+  revision = 57390;
+  stripPrefix = 0;
+  sha512.run = "729921d3152b76fc4c6c8385ce0b5a8ca2491670a7082133084c2e09774bd5c94b7c6c6b8ace1db787b4626f68a9b184550d43adace8dc6646ad36d2d9703f8d";
+  sha512.doc = "75d3d1dd0a71d34429584dc1519b9ba26e329f58f468ae8548e7f9ec9f92e6877917bda790b61af9642e595d6b42370e8fc511b2e1d9b974617a6f5bddf96821";
+  hasRunfiles = true;
+  license = [ "cc0" ];
+  version = "1.0";
+};
+orkhun = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c1e52283e54e4de7caccfe605438e2775ebacc9c3fd21c143e29d7966c591ccc3fba77019e4f9ed9850762a0c80475edb6c9142d7ac2e3ba54007f3dac8b056f";
+  sha512.doc = "ad0c15ca89057f2ff7d43a1bb8ea4513973978e1316e661a0e32ad8fb8005257a634954e85990958ba22360d29eea2d6ea9d87049435416616349874617d9dd0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+oscola = {
+  revision = 54328;
+  stripPrefix = 0;
+  sha512.run = "831e450ea6fa77f521eca76aaf281a0f7425e28d889c7bc919cd04c52a78c3a0665abf011ec4ef722f47e737c1dfb48f8aac231aa3f370d594cf5300d84c2456";
+  sha512.doc = "6024d48e3b6f68037a68dc04051451be2ea7a952e5d8f55b9bd1160d11900751b5a58cc8662e5c38940bee01a442f3691a8cd8329ee4bd5749cf7698adf72cef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+oststud = {
+  revision = 67217;
+  stripPrefix = 0;
+  sha512.run = "9ffd86c1fddc4667f6d02a9ad91ce0a3e562147dbb8453c474ad5595a77df8ae77a4defca5f6fdec2ea837e37ab23128be1b00d4ec15f20cb0bbc2e591fdf0e6";
+  sha512.doc = "700021abdba0ba3484a0f11600564ffd372bd998f889da1cfa26ff505395844b958468675eae6465af4010e417a56df45c2226d6543d1bb6f2331099e08d9ac6";
+  sha512.source = "5a35d201ffaa677d464e0dd8f2f5a474099505d341ead2e00970be39523199a2e3ddec73da19e7ec329a53cdedad495640dd1385fd6e5d005dca9a5027ee8f90";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+  version = "0.4";
+};
+oswald = {
+  revision = 60784;
+  stripPrefix = 0;
+  sha512.run = "92d4d3a7d8bd09031368a89ab7b49483e653750e1c348908aa3fdb62cdb8ce14ecb7d7a29b37e6774c613e658591622891e4bd6b348492c669716f220b46f9ec";
+  sha512.doc = "1f6606c8786b0eb54a4c3aad0220347eac3b2bead83ca5540345737cfae509be42b9eb10f27a5ff1ced559aacad7413b69708eacd215afd47636d17194b40082";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+ot-tableau = {
+  revision = 67813;
+  stripPrefix = 0;
+  sha512.run = "57ee595a08f2a30174215056300ed4f8ca496976ef7d0f80627b32d45bff7af85e8a33d8d37decd61883ab3cc61f74ce411687c260d2a427c96014d3defe9758";
+  sha512.doc = "45bcff2db460c23e543434ec46b8a168498ccf1fc1ac977f72f3022ac7ec02a874eda98a3bb6814edd22d86915b354fac5105efd1bcdb8eb979837edcada699b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+othello = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "cddd446d5b63ed22ebc4e561e43fa8b4b1ab2cdb1ecc45ab98e60d6799646845a9d432aa45248e7cf70bfc4aea10cd42960a8846479df46a7cd701f792b4ca74";
+  sha512.doc = "8ba85bf32ff739e4588512c2b33bf242b00e3f38a7ddb1b3f5582cd19b925e1adf52b4243857f1ef4b9d8198e8dc80a9aff8a63a7b3ff926978dc7e5c81262de";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+othelloboard = {
+  revision = 23714;
+  stripPrefix = 0;
+  sha512.run = "c975c73b8737f008b7f31af86e6c8a89de3f907c6fe782f075b04819bd936da3853a8ecf15935c04970777a4873b5baa38f9c675cc8943190df84ddc511dedba";
+  sha512.doc = "af025805142a845bde22a5fe095fb96cd533d69c50bfcea8716dd7d61fc95c41727c16127c2f2b60c5bf2b55870d698db54d307c2b025aff3e251419ed58a3ce";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+otibet = {
+  revision = 45777;
+  stripPrefix = 0;
+  sha512.run = "8fdc06f22bc9d25b61cb7b3b151919b7d2d6cf3d78f3cfe5a11284d9246acb858410ccab56996cd521eb98518be9c232a4c8e0f8ebbe52d7e93c510e3a0ac070";
+  sha512.doc = "96f9d64c8f668f67afe20dad97d1cd3cfec19df3300204831fbfe0d245c1e15d8d0cea48bb94fb002cfa18db45d3ade730848908b0d77b867fff7557b0fb826f";
+  sha512.source = "4b51b49e3d3a802a3a19aea604a63f1e9503f7d9d86c81200dc5e2f2051b06e184add9292321f4895905a07595de6771eeda2463ae0c1b096a98f2d2fd210721";
+  hasRunfiles = true;
+};
+oubraces = {
+  revision = 21833;
+  stripPrefix = 0;
+  sha512.run = "8a0a6e0648cc3dd9a342a960dec6512fc9153a083c8fc74eb08c4e0f46d091e5f2c71bdb69bae80fc13a857175ec6bab4b18cc81a0963d794028f4faedd0def3";
+  sha512.doc = "c97f91df77f64d824605c56669136585b94d95031ed5a4a67f3404c54b2c96f32bafaecc06d114755d0e65c3fcd0379d63f28f94aa32ccb8d23730f5f3eaf63c";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+oup-authoring-template = {
+  revision = 64491;
+  stripPrefix = 0;
+  sha512.run = "b4d2d3f66092fd8d65cb8539cb0038e7437d2a7613e36404f0a225462686051833c8335f2aa56f31e8bf3623f799f96f5d63710d638645b390c0f0947cf53213";
+  sha512.doc = "00987789fcc1c209d08464b919079b5d17535dee92da189180087f5ec67c78eb384f9622f965ccaedd3434c6f097433fbce75be6c459c08e494343217db2129d";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.1";
+};
+outerhbox = {
+  revision = 54254;
+  stripPrefix = 0;
+  sha512.run = "954af6a75833dc388c430faf538415457d0526b85060602b93584a45e6b0ff9bb83ab1d2117ef58817f08b138146873ff74ab045f174e949a0c9fb9f042b1121";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.2";
+};
+outilsgeomtikz = {
+  revision = 69124;
+  stripPrefix = 0;
+  sha512.run = "ff64c7a149bd0d890896936c1f5c818cc6f9c34a50b6f0312134dd47819b45df36a769ddd5b4db903c441217062bbbd44da086fd0bfd863ba8bbbbf6f96a764b";
+  sha512.doc = "0cebb1b166aa5b6628eb9aa88788beec5da60d7b25b9d110465ed25b130bbba2636209e151a9633171bc016e0953b5f27780ffa02ca4bb2f0dadc902e998141e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.5";
+};
+outline = {
+  revision = 18360;
+  stripPrefix = 0;
+  sha512.run = "ccfb49c4e035f0d246f00aae56efa9d6570ad3997c44e2bf70588ce67a0bc3fb7bccff19b65629fb27158b0156a9802d97ea1f8edf6f4494f644f40df5d97118";
+  sha512.doc = "301ad12a8f964a7dab05b208649c74ad39a64264f113963ebf36dbf83c90ed8ed042d8cc15f626f6081bd41f51d66dec592eaadabec32c65a0d67d15e8ead37a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+outliner = {
+  revision = 21095;
+  stripPrefix = 0;
+  sha512.run = "9251cb4154042c7620f545b2fb305cb996af9ff51c44259287a1f5ec490cd83bfb82321c4d8512ca2d22e5d2a7409ac5dad9f7a7d51f38a76bfe77faf2ca4af2";
+  sha512.doc = "024095493b4b7301597798285afbdaca9fad291dffec9707b82da9f23b1ee0585345e4f201d6b322a1a65ceb6f703ab5430d14973c3fb25970b04d2785ebb9d2";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.94";
+};
+outlines = {
+  revision = 25192;
+  stripPrefix = 0;
+  sha512.run = "1611e4ba3b8fe21db83a542da9d7e0c3431330bc24e3733d28c8c5b3172ce3e4b46ff5b7dda41f95b4edb6502236f6d558608487ac47f8726420a2afafed75db";
+  sha512.doc = "bdc507a3f3cb966d03df37d9385145811c5750bce6341935231ae987b0a30dd65424a1bbb772920586721e25711caa429cd6d8b8149088f753f36b9dd69ddaac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+outlining = {
+  revision = 45601;
+  stripPrefix = 0;
+  sha512.run = "0d2b7dbe710d1ccd54a70cfbf6464a3ee5ad0fab8ccfa61306d5d5d83252c0f3b64f1caba6b5e8e75f7e6237fdfc675981acb67fbb730282978071e76e92ee40";
+  sha512.doc = "c083046671d159fc118f25e56ba34d04f8011e0c49169920fe679ffcb78d93e52a6f8bb5bcfb34c47f0b23f73579519c431976229ef143a31ab059cde6dd64ce";
+  sha512.source = "8a2f640df3572a5cb8336342b49035ad97513ac97eb87483a73c0d41ef4b98e2ec39b994f9a7005c7c6cdc2564aa55fdd8cc0e34bd79b189882df34ab10e6cb0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+overarrows = {
+  revision = 65853;
+  stripPrefix = 0;
+  sha512.run = "5c2d386bea3d2358e7c6baffcabdbb00411895a45b0500f60f139435b55fc86e6c2c7d7bf96a9bf38300f4d217606ffcc4f212523dc5a7fa1e35b7eb4358fe3d";
+  sha512.doc = "1e5c39621f3790fe752c8785f5264b842ad00d7eb3a5fa91c41fb8f3c0a84c85d8be00b553a74f1750bfaebb6f97f7c462d9181c7b6afe9547a38b9d3f431b5e";
+  sha512.source = "57b1da2b639cd7b2abcfd8b98c8e73a704b5a247b78ed8373aa3059744eaa127314abe34fbca474106b5a3fda4bdc6dd8f2d399e082eb7a6e6396f77b35309c4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+overlays = {
+  revision = 57866;
+  stripPrefix = 0;
+  sha512.run = "93d1b7bff165da32f509e820cf88c08e8dc17ae688814a6913357ad9884ecf9fe94334be82e54c4e902935fcc38a6dab5687a3f5d4e333268d03df8e977611b6";
+  sha512.doc = "d1db70b9ca58bf23946a824c9b9ce173f008b45b608f409c6230403c5f5c1c2e6dbd22f7ec416e9869d3dd98bb0cc2b5a4a0e1d5bfd0a39bac36675d46a5b4d2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.12";
+};
+overlock = {
+  revision = 64495;
+  stripPrefix = 0;
+  sha512.run = "0c934c6f34922772336f39dae801a83c705197d7a7dbcf95cb890c25b8209697b3cfacc6899c57016ff32066979b665198d30ae45caf60748599e4c6ac052ad2";
+  sha512.doc = "44aec04d96e2867a074ca1ac85fb3449cd276d6a14c893c8cd73dfaa91e60ef5f98ec7ed3859cc57efe746ae1454a5fcd01b44ac580369a87f69bf5cff3e3b22";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+};
+overpic = {
+  revision = 69343;
+  stripPrefix = 0;
+  sha512.run = "6663af049c657a947c3894157eb21c38f8f240250894ee1c8e34e3ae7cfaec294670dcb053d36fbb7749c383b8e9645d25f583670401c7cacc232eb64996dcd1";
+  sha512.doc = "005e2aabb66cb7904544463274add08f9680a38cb608c9d8976e4c8cae114658278d2fb3dae55af989c21825dc9d71b4a28202eb68566ab462d1a4bda76ad54c";
+  sha512.source = "3d0e1d66a6ae6835eaa1e5342a448895d6cc6ca5b0f9a300113b2c43d276ec9e1785c41700895f4fcfa19d4fd3098e476dbdd320eccab3c2facc855a85f63870";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+pacioli = {
+  revision = 24947;
+  stripPrefix = 0;
+  sha512.run = "a82b391630b5f572d8ded331ae98f480fb0cf7f3eaefdcab3100bc839e2b026f012320e334e82d04e01a27657f36927a4d1570086899ad637f8c47ddd0f22b2f";
+  sha512.doc = "fa911ec25c0d6cfa62a2d5396aedf893b9078604611ae5d34b06f24740f65fd62895e4d53a10931071d19ddd24244e3c7ee9893f4eff03efd0920fd1c1626610";
+  sha512.source = "d9347b85cd548f5861b83ef2f213760805c3cb76fe0313f02935bf28baae72caf2d548459aed2acb7ad5061e49c6e6694e46e88bccc1164e83f63a6f97045d04";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+padauk = {
+  revision = 42617;
+  stripPrefix = 0;
+  sha512.run = "fec57c3e7bd299671ae8d6489723a4d33c54b11223f5f37f3f3b3cc148fcbb6d9a9aa46587ab83e414221cde3a7d0e4493877d90e9536952d9069a4cec7c758f";
+  sha512.doc = "ffa9d45c971b7fe4fbc55644be4093268f842e13a2ffb1713be401cc88934dae86f012741951f30580a94a57f35b85cac9525869e0abca5601278d48a19782c0";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "3.002";
+};
+padcount = {
+  revision = 47621;
+  stripPrefix = 0;
+  sha512.run = "9378dbaa1d3a569a3cb4bd70fa1b5a6dcdb0fe089d3a2c3eecef4cfdb776607f42b7fb018461c00781f8b022dd962e790146297f5df29889db13794e25c1cbb0";
+  sha512.doc = "68ffec3a80473b3b2899ae262fcbca47198c61bf1363b9c167986cc95214c778fdd49ed65e8fda8f15d48d3d9941ac54c6660f28729dda176123fa1b3f7e8631";
+  sha512.source = "088fd314ec5717f6b40f66762af47a32eb01f40259948945b48bfde12923474cbf0a7aa8389b4ea83127915782bffab4d9cc0be40d2f7d752dca734b0fc0b62e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pagecolor = {
+  revision = 66885;
+  stripPrefix = 0;
+  sha512.run = "7cd71dac6790eaf48afb107310961bbe37f04199b70316009f6e62c064c23f0bc7e4601765fdc03c98b1a39c35f9f53a7b83023e5f29ec0a273d7130b13802e2";
+  sha512.doc = "ff3cad39418f1a6a1b4e31788d79eb83d33cf7d04fcc8f5ad4703b60db1a581ab2de158f0b4d24d42c13fd2ddd6c85ad4eb3f9f4db09927ee2c97eb7d4e4a063";
+  sha512.source = "4fa8f8d617bf8cb1d8a2399ddc88ee37778f1a7de904385351fdad3c4267c1d27e8b6157a206ee0b434991da0a508c42afd71fcc4cea81477e44849c15f81384";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2c";
+};
+pagecont = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "53b0f558c6198181349a66b39f0b54108a931279766882bfb713390e79ad0f62218ed841416e143c6909161ffec548592ffccb337505eba61f643a05d49f1fa6";
+  sha512.doc = "634110b7cde040e5ae7be237abd6817055f7886d9fed5ce1a00b5ea93e9bc885f0c15398c280abe8472e27ce89aade2a827e66fc041081c8d31cdaf7755119bc";
+  sha512.source = "86417ff0f398efbf5b6abf2272df933734724a7d94f93d0a94704c393e195ca0a5828698d4d91527fe1bb0d70a26af49998513f0e9d80e1b8966239555a3dfab";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pagegrid = {
+  revision = 64470;
+  stripPrefix = 0;
+  sha512.run = "587c09867ebe999b3490d2b6dbd541acf4631a3d40ce1c0dd102b3ca4801ba5774f60ae86f27cd34bf32f324d54bef305f365cc1a8565ab54d84925861082b8e";
+  sha512.doc = "3c5d05229ac51f2013017372cbe1df54709b604e170bc4aefdf26a1a017ded6124fba4922ec7609f72c059e45e1ebf1a1eb838c89f4c1564c518469333afb5ba";
+  sha512.source = "f9f5f7ef9f3b0509ae0f52fbb9afaafd96396777862c2976550ceefb88d10feb7eeabec2dca561f5a55ce5f4ae6034be4db94da07209652bc6a85f5b4f2b4a56";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+pagelayout = {
+  revision = 69188;
+  sha512.run = "0eeb34fae976625ba534e1f1a5165d56cc04a91827d8951e1c8cd125703bc35b455033522fabf2d62d024e4ff8242cf6301a513898907aa54f05ce43a684cd35";
+  sha512.doc = "efb086ad732d35c6415c4bba8770c658fd5486573c42f310c56d3de667f9bc3527297a348fdfac2593965ef6ba5e65f56f6e2c19b8163edd68d9ffb5f40a17e8";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.5";
+};
+pagelayout.binfiles = [
+  "pagelayoutapi"
+  "textestvis"
+];
+pagella-otf = {
+  revision = 64705;
+  stripPrefix = 0;
+  sha512.run = "feec3cb6db5c10b2ae3d4d4e58cd21b1e425be368e3002914823120b1396622fd2e6de09bf0a892759f3e9629deaa1c419da59bb858dc1263cc271fb33d46564";
+  sha512.doc = "6cc07f42d696c04156c0da6610ceb562174dd5e00d1eba96c7b1813e86b53081245e45f835309db257cb1d157d6a77a3d453ea1f689400cab9fc08cbda21b8ef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+pagenote = {
+  revision = 63708;
+  stripPrefix = 0;
+  sha512.run = "085f824f879091e479635e2da9d375f51217f00dca5cc51f6b3dfa43e8a54197e4f2bb0f1748e7fa5dfdb522afcf177c67c9e47f4a9e756ba71ba6394fcd56da";
+  sha512.doc = "20ac52f56753f0166829aea56e2b1514a34f67eea08ac8f2fbc505dcb046d2cc4168156b8db8691b426e35bbc83295454eb299a443e44d236fd31b695bb8bb44";
+  sha512.source = "1926eca304ce92b3ec5fe2e06fc62a2bd8a7bdb45038050b5cf0871b35265f7149803ab32a28af057b7c3c1ff0deecdf0ae6cd4afb950d45679624a317b68651";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+pagerange = {
+  revision = 16915;
+  stripPrefix = 0;
+  sha512.run = "9216d443f44deba5cfc4ce04174031cae55f2adffa0f3400bf3f315c3b9003d1ee015fb6df69cb2cba23eb117f2ed191b7033ad46a51bc718260a44778783c47";
+  sha512.doc = "862ed02746c6d91a2b8d9e19bb2e943e251dd18f0d94562bce9cc9e8ad603f7554e77ccfa2485b9a4eb7a2d6d5185756985f104d870e95823a4b33072f24bc9b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+pagesel = {
+  revision = 56105;
+  stripPrefix = 0;
+  sha512.run = "c07cd3b48fd5cd59ca685b1ae39da7e7d8774348241c26d29a74b41ee6c29fdae0c01a47a79aa669cf6651b0b83a5b79f8424c139c17db5bca20d30186e5b655";
+  sha512.doc = "eeb70877276b393cccb1c0e301c191480e5aa52715738ac6d01b58be864b065b3b72afdbd90d3a398284671682370300537d4953aa2adf4355fc6d2278d2819e";
+  sha512.source = "457c52df8dca820c8ee39494630a077d0a14f58f7308805dd0b5f5dc374fdaee83581cab3543d7a9ded91ef94f7555f2d2b2420a6ff2c9ddf7c790b5407f468a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+pageslts = {
+  revision = 39164;
+  stripPrefix = 0;
+  sha512.run = "7db146bce45ee5ceeec5904e8f3ed6efe0010885b657b0f74546644c3ce2a018deafa95a11390da3d8a62eef16508b82c3efa9d02ac1662cbed18e905cf869b5";
+  sha512.doc = "58fe6250af4ecdd6d62c231778c89e0b049995feface3af66dc73b920f4dcdca8838d3274a7648caf2b38746fbdaaddd1b4f87577c77dabad2096e9c8b681619";
+  sha512.source = "99db221ae4c7795ca4093b7708aac14fededf3c55aaf314433602906d8b0f3d9c074fc0b8cc6807474e81e510f35bca486db3aa525e95a5486c7ff379cdd5e18";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2f";
+};
+palatino = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "5db043495b8daf0a5a854367ca1c82007a154d09b2bcae9f399e8f851f30a554fa98970cf45ccd8f0681f70ae7e01f54dfd414bcbd888b802e93993c2ed172df";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+palette = {
+  revision = 60119;
+  stripPrefix = 0;
+  sha512.run = "0583223e81139040de67fa9a1fd93479dd2024c19d34e775a71b9fc03d7b01799c2dd58736d431307cb067d2d3130fb495aaa002425a8c0c80ddbc3e33679693";
+  sha512.doc = "16934d0cdc60fe7c1d6d2cbd0dfb640a13d8282d98e322c98853b71ab7fe38a33241857ae98fd8ffd9f2e5c009327889f4c42a89af4370fc7d4608b457b1cb4c";
+  sha512.source = "ea0e817ec066450c3bceae8ff9859f9b4934dba86f1ef850bfe8d566ac1da8296d780313962ab63babdfb822d1c72e686dca2925f809baa3a62eb2d744e8e6f8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+pangram = {
+  revision = 66300;
+  stripPrefix = 0;
+  sha512.run = "1a74fb3bb7d1a4c9dfdb594bcbfef7b716affa55bbc7010fed6937708f9ca0d9f644c2d56a557737b56c1b8386de90a4b4df699aa50631c1e94f1e4e3c9d3465";
+  sha512.doc = "eb031dfabc359fecf7316cfac1d799f8377b38d2e86922a52e2409214f9dc251d1ec5c5ea439ce2830ed21ac9a02925f442e0930f845b849b7ef662c30a70955";
+  sha512.source = "8d5a945567245da7bdf69db5cdaa72d693054828d948700210e8a71c3f1178e7c690c7fb912275cbb1b3700f812482aaac896875ebbfcc33d3b9531f37b6cf89";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0c";
+};
+panneauxroute = {
+  revision = 67951;
+  stripPrefix = 0;
+  sha512.run = "d904edbcc40640e89e3399a5e00310174bc9317a1ac87da86ad15dfb2ec24757b21cc9ec1d9e562547b6637bc63fb1d58bc5373d4b84f4b53c0194c001a2ae59";
+  sha512.doc = "b0fc8b96588dbe692eebec332da0cd3fbea74090b566a9afddad30b6028d3592e95f729d7d8f6f198c14e2cbe63e821715ddd2678bd4a58865c5a159d8d8ce4b";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-sa-30" ];
+  version = "0.1.0";
+};
+paper = {
+  revision = 34521;
+  stripPrefix = 0;
+  sha512.run = "484964a6da8fffb001e29b471f7c9fa52d2f1aecf66da8f9365376b987c79e8e39cdede0f0d61977381aea78f9e6429216c0cc2eaa67a831e4f1ace29e2c9503";
+  sha512.doc = "2fd771d5f1035cb48c0a4de89f1174a988b3b8254caf535ca75633efe2ddc0483d095a720a9dae93aa7e832b0d4e63bc49cbdcd801e4190209f56bb0632c5aa6";
+  sha512.source = "74ad404eaa44a523f97d245d6ccada1546d9c991bfc64186ab1ee7f6efdecddf87897d7e64136c0285e4d6541f1bf164173efb020adc113893d8e9309a687967";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0l";
+};
+papercdcase = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8f2c923e72c7f16b394222ad86bc3f07304e6c39965473482c708b15574b0475af6eb6aaa085b94be6b0ddcce3324cd5639a8317caad55844998868ff18f0e73";
+  sha512.doc = "01d43ccf0be5caa114f1b406e5cd4c1f8f44f06ea92e6d3fc999a5bc71e911d6c99dbcb8a1b9c49105b978d0d36e6ad2642f73446e3ba6a55edb11f82f40638a";
+  sha512.source = "7bce5742cc7504e789011ec877fc2a934300b0edfa2e6b8f89d625184e5dd0c8cc6116aae7701c313e133d8669522c1414a2a16d11e7e6eec0d1c7112fc44d56";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+papermas = {
+  revision = 66835;
+  stripPrefix = 0;
+  sha512.run = "a9c2fed35bcabf0e3feb98fede1f66f0c60dbe6a40b50c3818cf88821712ae4ef789fb5a080113f31cca4851767e4b607c623454f06a8dfbe1542bc3897dd7ea";
+  sha512.doc = "2837d42a830f3a4517b7a0bddd9271264643198be3b1d805e471a62c9c87df81944a088b448829c26e05868cbb5f6a12480a6faa9a8c5d3f56e0c52c38c8cb75";
+  sha512.source = "b64f9a1940169e858a51f94eb03ab1843398deeee001fd63bc97ca0a24d385d8f8d6b65a4195fcfe52fe76493c78506a7e68c1e32be1d669b16087a741122ee4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+papertex = {
+  revision = 19230;
+  stripPrefix = 0;
+  sha512.run = "489718b18bff9055917d9aa1329c34218282c2dec743c4a136625b6c39dc5102bc85d7da6dfb5e2b6a0f4bfe5a8fe27341ba9c7cd205cb8435ed3bc81a7a5c1c";
+  sha512.doc = "aa36046e89f7e4486020a62dc8cb10f0a680247a3148149831153400a4ee935d3120525de3fbf29eac5c6cd58b655c1a2dcc2c4a8baf7d849a40f842d3b895fa";
+  sha512.source = "9afa6d8e8d23108266bae48e78caedc5bb20c06eb15e3de8969a2e8bfaea880901a184fa8f2409e6d7ec0a4341105151049e1763fa4f4cdce8150e6bb3a52174";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2b";
+};
+papiergurvan = {
+  revision = 68239;
+  stripPrefix = 0;
+  sha512.run = "0f79f739273caf08126817ac44fa0c02bef9fc2e2bdad32eee12d1e377bca14618b426bc71f4f9cf734a5e63c319ac019de2c7959d25a0e31f594aedf1ec6d98";
+  sha512.doc = "c9b4f46772ca50c8ca89d7d3d35719d8b2a7dd7ffc9d09a39569500047640404d1d3937ebbd4b3380a4e13cf56fc2f722d444f71afe464df332a69dfcc6049e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.0";
+};
+paracol = {
+  revision = 49560;
+  stripPrefix = 0;
+  sha512.run = "ff7f60734dcf6d1db89a0b80747b31eb95bb28ac90ea5d83546feb08389fe890c6e3b4c44995b115d3e9d446823e81e27bf08337ae2d236a5a89c2c79258f741";
+  sha512.doc = "a5711614d817193cf34cce405fc57f00dc17f3757b8c945dd174ba03453943c22e9c66b19a0f83444abd61f486e5df10246556e59d281f10f95452ad1931fb49";
+  sha512.source = "cfa0bb83368dc27a7d71fb5e8772aa1c0ab69f597b2b00630fa1a95cf448684e6b59d46bd6dbe011953c51c0195b5cd0981a2df8d7d5fb951aecdee0a9ed0576";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.35";
+};
+parades = {
+  revision = 40042;
+  stripPrefix = 0;
+  sha512.run = "6eda005756083b1ca0c1ee09efe44830874d8090c25aaddb8d6631284a057130d2f03ca7f88b460fbeb7bea90ad31da8242028a70b07f6a66bfb978cd7390e26";
+  sha512.doc = "eca6b66f0bb424730177498fd6310718a78ffdd031961f8de877bd6f9d027430143c19310b158abf26f92b4280016cdac696f423b493aa49d60b06cefc546688";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+paralist = {
+  revision = 43021;
+  stripPrefix = 0;
+  sha512.run = "e05bbd65ae7146515dd5dcc6ad7e40fc8437fae29ee26861aa9c2b4b6da0015fc00974f0a2328a72e6487660794a822bb64b35ea3282eac980c3e7fd23f4b899";
+  sha512.doc = "5f103c629d1c0bb94aaf6c86f7baefe3e99a854e764306cd21e256011ae5ed95601416e33677f73f6471bf4ce2a375b6dc98b8aaf35b8dab1c41ca91b7ec3ec5";
+  sha512.source = "1cb11b8e7792df9be259e1a5ef3b2efdc85b5454265deb66e2a527c4696d7e9297e2022d5191b1d666996f1be1f638517ce4441d0bb696f6b33ae490f4138e78";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+parallel = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "975bb869ea0df9236f0e86cbfe880e9bd59ab2d6aeb98f0a399f5bfc7e4367b3f14eb64e707e4e7ba8bd3e0ee641765b9ddfd79ee1abac61f96414f215fa5cbf";
+  sha512.doc = "ab4c283176cf1fd3d524151cc647c1da360a1772e57b282a91007edb1269d6bade379775d0efe6731fee18b3f3bc02292057d67795475a291a4dadc748d5b185";
+  sha512.source = "6dde2ae1a2ee65decf5c1ba547d2683948d58a7955b75e5a3bd74d0b6705e7c6a75f2fe4dbed01562211b670d455a0360d0fff3ac0f24e3e77b4bb01a65577b5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+paratype = {
+  revision = 68624;
+  stripPrefix = 0;
+  sha512.run = "b6f50e5c3063357e04e94a9454cc34b17e522c54effe14696d3d81e6de1f4732953b608c0c0d13965dde5c9c95e125d967afc888ecc9396001c1deb89e9b70ef";
+  sha512.doc = "ba91b90030c703dc35a77b9a51a23d90e5cd6f0a6490f74e151023248b05a6a0ea5bcf188e3c8e69611b9b7d5f72b4569538a9da02193ca737e94e744c83c107";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+paresse = {
+  revision = 59228;
+  stripPrefix = 0;
+  sha512.run = "1604c9320918893633af8318d049194158daaf458bbafb5ce34b2ecf39896eae4591989117bd1ecdc3a86d4728a4c477f32b82b38315aa0693fb5978a81d2b21";
+  sha512.doc = "f25aae5058f765f5f141c1d2ba537db5395384f64b1e0aa803e486eccc1a9c958dcbf6b1dfb0aca331a5d20a798c2107092f79b9e8ec44e342ba52964ed43b06";
+  sha512.source = "5acbb82be5b06506d603eb19b01770806e515b1d496a2b51ecbab0a6c5fb4b6a0842764fb76446c09eb9a49a9a9cefb571e5133a0f72917de989814cfb3bd00a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.0.2";
+};
+parnotes = {
+  revision = 51720;
+  stripPrefix = 0;
+  sha512.run = "798ac362fa4b67dacfe9b744163555d3c25c9e4487c5d2e2fa47be12d8d4b41bf89cb24a04f6434c804e9ca1f45e6d1f22ec234ac04596d5e1905589cf1eb558";
+  sha512.doc = "e9728eb1025e80f41ca07632cc2625ee670a61ebe06d003585645e6aed183087df460a1dea4f3a8b17013af6fb3e974a95b33d848d2502435a37b1aa881ce833";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3b";
+};
+parrun = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1a09e6dbde9c24d88e21fffe24ead7ee7567a2c7bccd2ef33e49eb1bc8eff2befb3828a87616872f63d1d8eeba21814cefc8bbe756b17f887558449aaccb1668";
+  sha512.doc = "cf284387780c9b2f4a79ebdd781388525aeb2a03ad9d85048061a6c43728bb6f2f4fc840ebb499a44a3fdf612ff4a20f36c17a377f959be813b4ee4d12288fb7";
+  sha512.source = "9a4fb32c53f5bd2f6f79992b4ce076ab211c24e2c0f4ca2665c903b2e3d5268b5615bb5e9c8107d1d44df6a9e50a9f942f61cbb1fd05a388738449e4b312f306";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+parsa = {
+  revision = 54840;
+  stripPrefix = 0;
+  sha512.run = "76edfb996d6354536b009066d4916b5864b0be1a55954a627380d4927eb05bb888d80c0259d52d367a8be58f5b20309cf65cbec0e8d4ebc6bef2b3840bf4d207";
+  sha512.doc = "9cf2df697f90c46bc119f4df1816a734344066fefc54acb37a6fd2c127401a4f8ba12dafe0350d7bde90212924e40f08a500fddceaed44d735bcaf0ae9e48cb7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+parselines = {
+  revision = 21475;
+  stripPrefix = 0;
+  sha512.run = "81d18bfa1f70157ca04383a2f6e4cf228f23d878a9e157e79ea0bbbb743090046f5058ff0731ac42f881f5cef13063fa0ff2fa9b80992b334e02dd7f2a1a33d2";
+  sha512.doc = "b6dfad3ceac162f9c122c2b18fa168469cb6c4befce1c4b2c8f003507ff4b2aed30e6728bf29f04545a080efada1fd98a9c8c064f4ac1eea521fb486624e60b2";
+  sha512.source = "454fd4c9032ff1075237294f346d55fdd0926c316813c3eaa487e1649db569455f89a364b9688d024567a15edfd16c397bb1ab76652b46112791874bae5db36f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+parsimatn = {
+  revision = 69090;
+  stripPrefix = 0;
+  sha512.run = "73bb90c41be56b880b11114110a69cc206640ad97a2193a9557447ca8c901bba3485a971e31b6888b671b938a24d8bc880b532b5638a4a726fbe7978b1417bc7";
+  sha512.doc = "c2e6b53ae9e2c8c949ea843654eb9d1545907a539af43f0b6f1728d78f7b0fed3ed1f92b8650aef85c0cb34e9cc91ab9ab8e1e7e4c406f9a9bf0f02ade10c243";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "2.1a";
+};
+parsinevis = {
+  revision = 68395;
+  stripPrefix = 0;
+  sha512.run = "bb783a5c4d45e32cf5298d5407b3fcc98d64cb0f5c66a5f45a564acd3fc90faa6006d5d649597fb293aff746cef1be3d1304a7ec223e1fa604f7eed4fd705746";
+  sha512.doc = "4509dd23bf7baeee99ced80e0b1d225dc2d616c992f44e5ed5fca7a75bd71dbb97081ca04b96477d26897f6481c929f469bc2483fb0483485406a90962ffd6a4";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "2.1";
+};
+parskip = {
+  revision = 58358;
+  stripPrefix = 0;
+  sha512.run = "2d64232f41b2607712bc67ce77ebc987502924ebaad4f799b6ae2163862a8b833a9c1a7c8871a33b4ed9fdeb74c8368897e1b831c485ab82e084fe3ff0552af3";
+  sha512.doc = "759e9e8d698f8ad77ce388ec127f158a7280586338c6e56e1f9188a9a2e8106cb482f8ebc4e252749331e65ac2a771884124b16e3ea5e9ac76005439ca85876b";
+  sha512.source = "4783fdc97f269963e4d5998b2d8066a676f371f5034bf5204bc9e5935928f153dc0a4aaaeb11a403baa0631d545a18a1cc19dec4ee42314e1f33b239a9cbeeaf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0h";
+};
+pas-cours = {
+  revision = 55859;
+  stripPrefix = 0;
+  sha512.run = "a2a96c526de2581461941553b0c47bb4b08b3a9df03ffd121d14f3ea6e8bd62227f12acb4853f04240608a805189f4d90459324801ee25def1b44c48ebc83bb1";
+  sha512.doc = "7bbfff0a879ba2287e528a63815b005a2159800656078db2ea2c0460887dd15772e04b1eb8953446c86281037180d82d84172370e015d2c66dcbf23651c6a182";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+pas-crosswords = {
+  revision = 32313;
+  stripPrefix = 0;
+  sha512.run = "cc93ed7340380b2072ac7df4c0d343e43e1a3ae4252c42d9914edcb33232597a5c86d22cce3dc02218e6e725191f056ef9fb342e88d1a60dcadd8d011723b649";
+  sha512.doc = "65baac7fa63a01c70293baa26d99d21dc999f959074a3d2668cf6661d3db059b47d2f577f8c9f5d7ac6014e601f50e547283c55541c492b3c2df4e5f01b65be5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+pas-cv = {
+  revision = 32263;
+  stripPrefix = 0;
+  sha512.run = "4dc3203c5888aeb3c613ddc16446d7ced1dbb8ee1c0f0d983fa010eaf81d5a0a7a9364381be04e10bb15a9f258d4ae086fdbc650ab8ca627b07cc286be1ce1ec";
+  sha512.doc = "93460e4435546cdb2df20e4e1fd555a726e909e411d42068b6f16f8bce2fa90144e1db95cad4cb94430f65b9614d766be00fa8c3e781a1de733b189a0b4585e3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.01";
+};
+pas-tableur = {
+  revision = 66860;
+  stripPrefix = 0;
+  sha512.run = "3457ffc6633ecd2eddccd0070a1ea5458d5126c1a42684991229c7eb8ec7e64db31fd809623b930cf4bb39c928cea2bd6ee2eb5ade840ba9ad36cc28b8d307b7";
+  sha512.doc = "495b121c5860a96603a060e925173a7d197d0d22e13ab26857de5f7453f061847620b44b95c6494dc8e1f8108e58d987cec5728507cda2b61e40173c1b6d6a95";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.05";
+};
+pascaltriangle = {
+  revision = 61774;
+  stripPrefix = 0;
+  sha512.run = "0736284ad69dc62a9f97887f09aaf4e527438d068147319be8710c53708bf88c156964c9737548df4b2210b1e6bf5219d157e5d5baff53a510fa373684a8eda5";
+  sha512.doc = "137c13f7878fcb5f3f2e7d4d47d05e8a25f7fd19f58672d7b521ba944a5eea22e90dd12418d4b056dbb1a94faaae750a9f2e06e4dfc8fcd206609f5f95e97a5f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+passivetex = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "dec61bb52bc1bf8588474e6d8971ca16f691d13b9c1be1f131cf0a720a205df1a95830f2f172df2efc30799d4aff9af064f9d851d9c705235aaf96e4b50decdd";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+patch = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "0ddcaa07696216f9fdea55471e1265fcaa71dd8ba2b8a50690dd519ad8b9442015502ec59b8f9f05c79f5031be3de2956cd71af58153dea8e1917f33c246fa63";
+  sha512.source = "ada97aba615160b3c30c9cdccf3360f3692612bc702247ae3fa44f7821aefa2ee60c89ab79417b0ff658335768512a0d8d9b5b17df619c57d169f6487d39e5bf";
+  license = [ "lppl13c" ];
+};
+patchcmd = {
+  revision = 41379;
+  stripPrefix = 0;
+  sha512.run = "a98085cb274c189644fa1307cf4ab5949a9eda76936fd6b74a7ba366b04d58b2a213c1a5ede53f644bdb76d44eeccd919176fb1934b8eda55489fee16f0c349b";
+  sha512.doc = "3c65e6b1fe2b25efb45853deb5b3111dbfa03de7c0b154fcd86719a81bbf725e1872a6e6b5a9955e63f410ff3c05bce5de336f4ab1e612ea0d82b8d44d5fe960";
+  sha512.source = "d3effea39c2dd33c9b40dd12304973d2d96457bea7b7f233f196c2ad0ca9819e57b38ab7b44e9532350b6c1cb519b184882ea924dc198dbaadf185ac177bea63";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.05";
+};
+patgen = {
+  revision = 66186;
+  deps = [
+    "kpathsea"
+  ];
+  sha512.run = "f37ecebfd74a30b2f4fcba5db893b31e7672f2d91d2be7f003bf625512dd54be056a23165ba8b1f5ed2165595405220df20dbd711e63a3be9901424aaf1fb0de";
+  sha512.doc = "c7bf5af0965cb675a82ee13c6ec467f88395438d07d59379f4850a36c783cfd6661d6fa6493e67bf39e78be615e3148cda9452003b5e9f5d5ceb1fbd305d4ee6";
+  hasManpages = true;
+  license = [ "publicDomain" ];
+  version = "2.4";
+};
+patgen.binfiles = [
+  "patgen"
+];
+patgen2-tutorial = {
+  revision = 58841;
+  stripPrefix = 0;
+  sha512.run = "0db7759a327066df9aa738a977d664b8e150405fd2e57e5532a7f9e2cc6a9cb0c6541cb37b916f8506589ea02e36eb4ca404ec1b8ace3726ae431a6c78f86db2";
+  sha512.doc = "5abe4de29113af4db20d85ed0089190f5ae82ef1573d8ffffcb9f5f03a4417dacbea5aebd0b274ea27dc54255f8ac6792c841a9bf77ee39628c8bb1dca49b084";
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+path = {
+  revision = 22045;
+  stripPrefix = 0;
+  sha512.run = "6a1fad600e4683476206385504ab5fb916caecc1101ac903d23042c25e055c6d4a73b85a57a3293929b1effd7d4af6db26c36ff994d76efd1c4f81073cee785a";
+  sha512.doc = "e52367b81b9042af70e940aab99fa13140c31d58768ce94fb86df74ec9b52fb365168e7e325d8b2e304094e5a35fbd9fd687305062b5b606bb9e5748f143ac2f";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "3.05";
+};
+pauldoc = {
+  revision = 16005;
+  stripPrefix = 0;
+  sha512.run = "36e67d812dd0218d013808879eec1150d6029e13519b0796f061a850d2dca99b8c07a2ec2fe9c49004b0f9947db10ac8d02d47a858b8b27852744cea58779d13";
+  sha512.doc = "178950b84cc4d5e1d78001aa75fd8cd5f0b3ca8e800b15fa1b65e19968a4642fc8ab2a3c2a95ab661155437790f100d48730d40a701dfba3a21981e93e35ba6d";
+  sha512.source = "7b35faaaa89048952de36bb0b340dcc367610d87ab104cca82ea8e38493babab9fea26d30cf4eabe7d6bf64552cedaddc57f49c129076a1311c2e50f9a991add";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+pawpict = {
+  revision = 21629;
+  stripPrefix = 0;
+  sha512.run = "426fe59ed20c41d3b11c87814b5f3737271d20bfb2cbc45142a36a42cb5aecc1555ea69a8ba1a1cac7bab323d8c9f23720601934f183d197b25e84d2037f057b";
+  sha512.doc = "5f8fb39ccf22aea8c40e3fb5d2babd757447e089da79a9df35336c56049872f45bb04fb76ad08d8d8a8404523666841fc757e7ebbb5201a156274ec2c29958b5";
+  sha512.source = "29f272c3d643ce366b3f82b3a5a913534e9b1833677540834bc48cecd946be0b5cf9d4de9e22012452a33c448589506d865db4ad589425634d80fef1562ecba4";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+pax = {
+  revision = 63509;
+  sha512.run = "71a2c105a7d593ca432a50a68fbcd16d876c8a28ce25be99326f323bcdba997b000158514328542378384f55a0ceadd9d34b71840980346b0b5c1c63843f7c1b";
+  sha512.doc = "a2e0e7129e98efc8a44184d445118220e16f8149166c2093b7c44a936885845c0d49d37a7588f32e2c06fc834f808b0e4a1b15808a32183bf9e457a9a1c19ba7";
+  sha512.source = "3920502e3ef59332129792eb87b771bac81ec3061d6cf35d77fcf785fdc88434824592b6f0d5b74041d372977e17b85d9253e7280a5ce9bc361ce56857397dd1";
+  hasRunfiles = true;
+  scriptExts = [
+    "jar"
+  ];
+  license = [ "lppl13c" "gpl1Only" ];
+};
+pax.binfiles = [
+  "pdfannotextractor"
+];
+pb-diagram = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6e2e18f93d5575e3f9db1147a9e255d2ab8a3918e25f53315f91ec395962a3c65d7321c1d162ab7510f16b25e4bdc5c8e4688e56820759baef06dcb08833a0d4";
+  sha512.doc = "4b12c7f67411ed86eff674665f61b6b2e34694c937222c7adceaab453d78a6a1f23c58d3abd7ed2320ccf05c40e6b38ff2280bd498e7b71e857bd6fc86de3067";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "5.0";
+};
+pbalance = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "3b9579669a9bf79892e433eb5ad7203254fa99615398e9ec58d1438d4b57fb94a5fc0dd14867b6ac18a874af3c4faa1d072a9009086b125a18ed21de144fd40c";
+  sha512.doc = "d02220c268923d141faa2a4249d50c8fc9f119e1703475f1ba979903a79df79b6ce48b70e113c0193a9b953f935446486e7d926ff52ac1eaf5f2c193638f9a87";
+  sha512.source = "141d99a8fcb9ba830c6df2b74fdb00dc8aa22781c6da19785c9b6b04ad7717b8f8e04315d5f9ec7ba2939f469d6728fa845c1ba9e6da1bf3cc0a8aeac0291fa8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4.0";
+};
+pbibtex-base = {
+  revision = 66085;
+  stripPrefix = 0;
+  sha512.run = "6be03a9f18741e16104d620effc7c0669e12ccde1aaa7d4332ada2fee95ceb1a6b30db4df41386995367b565b437174c0d4cae6e330c8181ee47095fb9bd5a5d";
+  sha512.doc = "69a7e564464d8b1c31474ca37b5e9fadeb4c2d4f4d25dad5f884317b226c6b7f8f467cd1809e1330cb64fe2006f1ab397cf4f163e469a14fb8de5b778dc70c08";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+pbibtex-manual = {
+  revision = 66181;
+  stripPrefix = 0;
+  sha512.run = "ca4690e0ce37561dcb877d17310f498b5b528cf6892beb075b4ed87f1a4432957c2ac56ad29f66da1452794c587f2d9343fdf7715c670ac7c3f7880f620f698e";
+  sha512.doc = "152ac93c6e1bf07d90434581a8891f293527d4ff93f7d439e7e15c99d53b0cf43872c9f8a6935fe314614b9c3fe3cbe7bb3dfdbba486dc7248fffc60742f37a0";
+  license = [ "bsd3" ];
+};
+pbox = {
+  revision = 24807;
+  stripPrefix = 0;
+  sha512.run = "cf2ea3781aac3d0b8619c46513bf9894c4b4efd8ba89eefe2e5fbe4e8f82fedd3b17f64467598080a577c65cc21713671c68763ff2600ce24fb6f6ddfae83a3e";
+  sha512.doc = "1955a1cd5336a7d71483f49bbc8c65426485fd38447282262b58b4633398cda0753c5574455421b19d92d5c88c599f9c227b54a7c340a35daf233a4f48a1c276";
+  sha512.source = "67cf5bae9494a81b97738ca8ed5877c009d631cb8ac681915559bc4919f536c657fe4e3ade36b8e4a0ee3b614ca4a23bde8a9cae19f3a9aca12cb2e3926160b1";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.2";
+};
+pbsheet = {
+  revision = 24830;
+  stripPrefix = 0;
+  sha512.run = "4fee9d64b1988f9981a056adc10de3be6940cb2cc7e23d9bc4effa8647e27601e5b74d2c15289ed5cc96c3f42d4f2569d897be111e2dff064a4c5d40445c760c";
+  sha512.doc = "d929cb815e8204268f17d9e71f53550b7647d39fd50782c1e6bb848a6a8840ef8389d2f3359bef554450179bd9a638ea80a1c7ec018c7275165622f1ba645a95";
+  sha512.source = "7790c2a14e44ff68071c4b3f0017c5b83a2fcd50a110d05b55297f07b4b313ebe8d5ab3b4d071bab5b575ded1323bb26b828aabc7cd20522a4298827d1686c12";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+pdf-trans = {
+  revision = 32809;
+  stripPrefix = 0;
+  sha512.run = "8e3d1526b0373113064e4812003b84fd78dec65ce4946ef991f09efcb6ffab8e89a9a655c8a0582e1f4452feb526c077ec9cff30b1ad7f3c59f07bc715e643e6";
+  sha512.doc = "a275e35947c38b93f5ade7a812d7938d342b25460e2a29e16a1431c7fff5939826ffe0bab30aeaf504a57ded91925e85853f93611702ee6dfec713031edf9306";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.4";
+};
+pdf14 = {
+  revision = 17583;
+  stripPrefix = 0;
+  sha512.run = "6291a2cbe2fea33d2a948a8ce58415de875cb09df1eaeb674f2a8fd3e3eb9fd5897d73e2ff613cb71562299ac22b07566b3c8730c807928e5a12f3e572f99622";
+  sha512.doc = "1b848dc73554175d33b7501fe83f1689e5181bddc6f59db00829ea39ac6aa7f91ca4f936f93a66411ebb257fd77132c6a4fd3371c8c28f0258cdcca31b8f0b38";
+  sha512.source = "81e13e0e9d0b6c4c0d6a764c94c6958a437a2e2fa186532607058c09f1c3ca2a6187a778ced20e67b7d70079395be11de7e2237548b12843f4f5ff80cb82c732";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+pdfannotations = {
+  revision = 68958;
+  stripPrefix = 0;
+  sha512.run = "22bf69647c957f3235fe1be6d90cb75e66188722e3308f80724dcccd9766a470fad09d0b6510fdf7d7e012d595726b5053ca727ca813a2771cd601f8761c97e6";
+  sha512.doc = "900b6383a998afb3593c6e588220341f73d3a03ea81e3bd4f71369b889ebf722dc921da4607342f7e35fa22e62b6f11a22af1c3e8d64acfad9ebc13ff1c5e66d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1";
+};
+pdfarticle = {
+  revision = 51127;
+  stripPrefix = 0;
+  sha512.run = "50cabf25f9da7b9adee489fd0a01fd9e5da2115d1dd09111507143a99a605cbc7e2de5a40a0e963b68942a601b7f0b753fdaf9cc1eadcdfb1261730fff5b4875";
+  sha512.doc = "d77754cf21565337f6db1b984dd3812798833f61fa263e39f9a929b25391a3b31a55df97a7f0db4fd379e4bf3855c51b61a719c30187865f67d7d37444e17de3";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0";
+};
+pdfbook2 = {
+  revision = 53521;
+  sha512.run = "dd87268e3856eb26b37f025ac62f24cd5e680e92e727588d36878de9df799f49254ef2259c29de15db11d5888ada83110a39aaa3116aa6f6aa290d3e64f1231f";
+  sha512.doc = "3048de4be891e270e8efe9f9d85524aff948c9483da25f491669a7181967dc281f42b984c9ee46464bc563c42a4f171589066f67818a291a136e1f49d40912ef";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.4";
+};
+pdfbook2.binfiles = [
+  "pdfbook2"
+];
+pdfcol = {
+  revision = 64469;
+  stripPrefix = 0;
+  sha512.run = "c9d9350a68513b9c7fd1d99138cf93aad74b76ebac4e5a55de483501bc5a6ac42a366e60e15a6d7e81149355dd6ea87b968bb070e05f04848e4a167422f645c1";
+  sha512.doc = "d2b5b5e1681092d024e0e0d47d3252e915cd3456b9bd27e1d2b871688ff2d805b385d864088e8a9ec665d7a0b495811b3ba6e8237363448d378072ac0c12072d";
+  sha512.source = "fed939659d5d9223e184f3a47a681b298bd6d076ab807eb164082d273da35a16126bd4b0b3c647c0a40d23abfa2974bd566aaaaa4f5d7864022e2c769870be3d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+pdfcolfoot = {
+  revision = 65512;
+  stripPrefix = 0;
+  sha512.run = "40db84311e460e79e6627bb3692afa56abe6c0f335f054955fa4f75c11b4c2a4f65c9c77ca225e1ceb37b3dae6727f27ee4b6e27a155eb1fdf9b053693490537";
+  sha512.doc = "afd7cfdef3e0290360251ff1de1fee17053229d89dc88e2275a3b94df8a9b5235ba462cb66eb741e541e8d59a9d0eece345c521c87f33fa5fa99e5d69d139ac5";
+  sha512.source = "e857b9d671a5be1737ea4d3a002aa89d6155aa6e89fbd336ee77189fc61a85b8a3713a631efa8078894261748d39ad029e2ac40a91ac1b97ba4b82f6fc054b3a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+pdfcolmk = {
+  revision = 52912;
+  stripPrefix = 0;
+  sha512.run = "ddcc125c608eea472c06981c9f5a901a431da978fecaa2a5ecdd08e2f6499ad25632e4de86f7e92445a8e276403ee92bca636b80e5216e78b21ce355910ead67";
+  sha512.doc = "e2bb876ad74381fb441d870422186f4cee76bb4cb5f721334b7119fe83b2ab0565ffd5300575ab52e8d25a263d87739a1e114cffed44ab3e25d8d5cff2006456";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+pdfcomment = {
+  revision = 49047;
+  stripPrefix = 0;
+  sha512.run = "82e1f9e9dc35f652d1ad348c6f2e03c1472c36c113cb17080061f66777d129f55f56a29c2a94292974ed759d12727d93e1724a8b529ed0b4c8c3e53511ab1934";
+  sha512.doc = "a7b6f568daa2d2c01574f56641326c1cf46c692d247fb8a8fd7485d6e804241a43691ac42923df35dac4453a23a5433fe1d7a063a88f4675a00780e89675a169";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4a";
+};
+pdfcprot = {
+  revision = 18735;
+  stripPrefix = 0;
+  sha512.run = "d046543b42966f8a566be0c89d78ca26b26d4095d99d5b16045283f0eb52a90a92122c1e87a2842d12d7ef2f865fbeaa69315a51bb922f713d33b9ef2e270fac";
+  sha512.doc = "ef19fdf93050dfe35df88163453067e589307b2173481d4f3b6943411bbaabda94b472622b93485637de5c2f885f9153d5078f5d3bccafb52bb28d3e25f39ca6";
+  sha512.source = "fbbfba0b35c70cc847a6ccbef17a1f506d26070d616254cd415eb6cdcf1b74c5a09baee420012fd88c11e4b4f8f45c5b7d4e2f5767e9621974a8d941a460360b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7a";
+};
+pdfcrop = {
+  revision = 66862;
+  sha512.run = "d2f33ad228c2cadc78cc8f16bae747ff1aaf98094a5dbf16462bdac0957f14aa32636b3ee0e16603e7e3caacfbd0d76526502911cacab29dc0a3d85c46a36e44";
+  sha512.doc = "0e3eb0d735d146c98bd9a34170afdfe73fc987b4d4a7102fa220e4d6e7bbdc185cd0d3bc219ffb7fa14c6fc1a971225ed24335e4ec9fd2ab9d3923dfb2f15137";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.42";
+};
+pdfcrop.binfiles = [
+  "pdfcrop"
+  "rpdfcrop"
+];
+pdfescape = {
+  revision = 53082;
+  stripPrefix = 0;
+  sha512.run = "ca908d58a9a0c0094fcd9bad550bf493a0dbea9e90702534a7418f9a5f506f5cedd42663f154bd227349e4e57e223b6360871bdc995eaea221c07cccaa780327";
+  sha512.doc = "d95aa97463b20c178a04f9f2cb71011985eb5242ec620adb9911bb5f1103f71e9fb0feca5704a9339b9490a71ed67c8c038efcf6cf43e16fcd20ba2eaeff8161";
+  sha512.source = "b6edb668b4803c91288b0f149e2700213ecab7725310d7d4bf499cf557590cd4356d9c79a6bfaf17a50ce85f4951a1e996ccf6725ea6da000f0c316f5a0466d4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.15";
+};
+pdfextra = {
+  revision = 65184;
+  stripPrefix = 0;
+  sha512.run = "84a84fe75512fce734c9c6ad3eb2b44091ed07ab69e202b64d0d86f143166a4ab511350120b75a8f71f5c88b8d9b175fde9b5621bea23aa5017e28f0c5c2e2f5";
+  sha512.doc = "644bc2b11ae5a538172eccd92e64bfa60b6fb3d5463e3fd897f46086dd84c9bf098d91565b2d88b24d5c481bfc7595f999a7b4a78c8bf74b130fe243abc9f2c4";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "0.3";
+};
+pdfjam = {
+  revision = 68597;
+  sha512.run = "ce5f86bc1091795bd749d79b348d5f2e5e9e012925222552c9b9431100d1608a20356fb6379c15cfcbc76096e65b2fac6725ecaa485952a28408191db2c46652";
+  sha512.doc = "c72b039c93eb3ae542351117de5d52eaec2bb7a191092ff8547947b11e9d1a6a921010d211a1366f71846121576cd6ac105d3002f95ebd3fd4aaa8106855ba5e";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2Plus" ];
+  version = "3.10";
+};
+pdfjam.binfiles = [
+  "pdfjam"
+];
+pdflatexpicscale = {
+  revision = 46617;
+  sha512.run = "d36dcc4d70156d52bcaf668d620c8eee5db8914473f943412ea5ad5c8bde673a6715fd5a69d13e502a5d4fe0b1e0e55099432c4e0e5e02bd5f6155ca5804c3f3";
+  sha512.doc = "64440f794e88c08bfeeac75d6d4174eccb800125c8d57e3b0be3ac6883c04790d422cb05cbed6be7335ab2e4d2e6bb2c8c0137c04160db126674960ddb7603e1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.32";
+};
+pdflatexpicscale.binfiles = [
+  "pdflatexpicscale"
+];
+pdflscape = {
+  revision = 64851;
+  stripPrefix = 0;
+  sha512.run = "13c581f774e61de70e97b40c54a59054b9ab0a9fd6e1b71d94fc5d0e072aa96661d8b72bc99c083b322df974f75b2f415a6fcd8bc23f95d2d999a03ffc0a3188";
+  sha512.doc = "c59c598fa494e5a57d2ba058dd6d096edc96aa958bec7ea1240195022b670f0cfc45d15eea0d0b68b499975811505a6fe9a209c7630c74c861fc42ce3904284d";
+  sha512.source = "f844e74588ae5982f1122d9826caa8a93c229d2169813a074537053e0a8387c3917b110ec1653fdddb31513124b4f6974a2e3ba4e96f714a57a03155646bf115";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.13";
+};
+pdfmanagement-testphase = {
+  revision = 69078;
+  stripPrefix = 0;
+  sha512.run = "f0065e66e3d94a483ca1e3dc3c7a1f78a1f2f8b038b45781e1f7011939e65814737c60cd606d291f153bbc633ddb15fa7f2b53414f857bf9ce5791a211f0bc07";
+  sha512.doc = "5b83c8d73ab6a81d1f32a35c762cf13b7b8c0efabde94735a3c45716ee470abb3d370f8d329e8785685f777ac812774d5b16de3d53991489d83e219b264b665e";
+  sha512.source = "cded0f375bdf26cbf999fb435c6b3eb9084f6d481087e64d9b50ad9e5414ddcc87a1a495b9a75326a65437021da41ec011647e2ba2a4f72d40e618b2519e23ff";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.96d";
+};
+pdfmarginpar = {
+  revision = 23492;
+  stripPrefix = 0;
+  sha512.run = "1cfb39ec9982fce753e3c0040123fc0faf39d94a41cac95dd0d189f2f5dd21f0a03c2f7e26de999097905b2bb32ec8d73e6dfa808c8ed2a49610da436639767c";
+  sha512.doc = "24f2fe0616b0e6872da321bc7878f423df54057c9ed7b62eac4e3de36df4ba9a5f0c4481392902130038c8f2da098d2fc48be34056a03d6e764a01b66c2649db";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.92";
+};
+pdfmsym = {
+  revision = 66618;
+  stripPrefix = 0;
+  sha512.run = "f424a0fcaaf484f919b1e6646c63eff6550711e23cf938886b9cdbcef8719defd1d23efe949916cdf27dda54a87a8eb5448d4c9e8234ffc043dd295937ea5365";
+  sha512.doc = "a40e39c7ce6e5d93339aeb6a1ffbb23dbecd11656b6c698362157c0fb46477dc4506d6b40269b3e9f10cf8fc0b2c982049d4e732b92c0a3401a0a40614b631e7";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1.1";
+};
+pdfoverlay = {
+  revision = 64210;
+  stripPrefix = 0;
+  sha512.run = "e167d180f13a5d15684072f2b9df8521e5c2dd89ee1eb6d515d6a73452508c083ab3b188fa856b571a0d41c0d490b65705631c236e677b4c58bcb0505c310cc2";
+  sha512.doc = "c77f221b34d01653995bb15ea7c05c13089d99a5d213b4f991fd09ef96dd8ac9a12e9b58f39b8216b1421d84204ffff8413694f4cbfe571a7225930a7c3b244e";
+  sha512.source = "4b4b18a150e6de4d4e40daacb06faffe0b838dafe619ccc065f88777cda32b765939bc38d9e72fcd7ab9be49063e26c42b6590a9a5905d541e3fb3c1e1bea8b8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+pdfpagediff = {
+  revision = 37946;
+  stripPrefix = 0;
+  sha512.run = "ce28e8160b14d0833b57445392237dceab536108a9d96942dcc0adf5305c149ba08269d697ab8508d8ba05dbc59dd972dd242cf7c4cd12e3d3e857eb885e5277";
+  sha512.doc = "dbdfc61b7f7bcafa597e439085f9624a48b734b2adbf53dd58ba6186b3597180b7ad3fc757acbd07c6466276a9e865bc154245e84d28b1e291004cdde64f55ea";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.4";
+};
+pdfpages = {
+  revision = 65319;
+  stripPrefix = 0;
+  deps = [
+    "eso-pic"
+    "graphics"
+    "oberdiek"
+    "tools"
+  ];
+  sha512.run = "c29f811574dde6dcd717255d40df7234d0916d6e7e4fe4c25e62639123bcdf4464e3e285c335c11bf2a289e8ca6391278611a0073fbd3ac8a071790717b2778a";
+  sha512.doc = "d91c5ae383beb5b4d16d69d09124c1e9598d3abebecc5d1f63319a90c8784c361fda0bc68626db752c8b9a3dc3f6b691a1be6d6ed7d16169278228f68b876b2e";
+  sha512.source = "869945d91d96e3a7936515a84bc4cfaad96193bb198a0a4db88300d1bfcf61ac971c6144820fcdb52045f4fa3511af8ec4045f999bbf8ef07d869d43e68dbee2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5x";
+};
+pdfpc = {
+  revision = 68610;
+  stripPrefix = 0;
+  sha512.run = "f94232b95cefe880b963755f18d71e4d4c00eec6a095a3ada786bba4036c8ac1bbf92377fdc64d6a4fa1fd8a3eb2f308a5edd451646f8d552dc1c29f7e93dbeb";
+  sha512.doc = "762933c4c5864e8f94a0719f4c26e5b1e576e11353553875df690fe9f2546c08dcd2f35e7ae46fda6960781fa2223d874acfb5c0c8f6a7f1732e2ca227001f46";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "0.7.1";
+};
+pdfpc-movie = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "55d8f438a458048893cf6cdb56969b84c5e0d195346a0d79f4e097a6ea336623133c42efedd1416e294d474f44bd01c9fd5efa6e38d44fc49194fc5de9a965bd";
+  sha512.doc = "96eb1120fadb2fa47cea38fb9fac189d8e142f9fdfaca5f6c46b5b0fabf603f7fbfa013715d589b25ef928bd69ffd273afcfd5d1fa0d8a30f2f8dc6c50c20cd9";
+  sha512.source = "891864cdee43d1c4da7ab9cefd3ba751ec7f574811ea09f680fc704475fada67c3b2fef727abc254b83269bb169f8d8f2269e5d938b9ffebe624cf9c31e5cf93";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pdfprivacy = {
+  revision = 45985;
+  stripPrefix = 0;
+  sha512.run = "8ec360bcfa5056b240091f1b2b5e6562656b15379bcf74b161899ddce41cb70d08cfdfb73b9497efd48e192fde11bfb4ffc59ed99059e1b6f6619e34b7f39bcd";
+  sha512.doc = "81e2d8a0e5f5889efbf96eae5e879378fd0b4cdfa9db66283e34836b767d27d216e35822f9225eadd8816e46c503443055dc822f221b35134ecf95fa2e0d22ab";
+  sha512.source = "7c31f0fc5836adffb8bb9417fa90c5acdd1cfab2f653d79c00cf5c4552435ecbf915cdc53ff4cbed796013c0c737c25fe779e9410ccf646090d5071139df5069";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pdfrender = {
+  revision = 69058;
+  stripPrefix = 0;
+  sha512.run = "507450ada31750d833e46a74ab38570bab964c4d36224482d0aa14b2f846a10c34c21735cbf7c4a8bd7f6c10dab5932830ceeef8198b98f72a716aed27a0714f";
+  sha512.doc = "447336df8ed6b0f026e9b99a5a45481fb04da0dfe009e091727d99ef536c5e073ca90bb9e4268104146908f5bd6588dbb8d294cceb0acb3f46763e0f835b6803";
+  sha512.source = "83e6d5dcb7aabd6bc3e84d273687b91326209dd78b8c91acb256e5c42566a4e441e526de9b64fd8d5310a6f393ee7e66c6f561f87721959fe2cc9e41aca02fc1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8";
+};
+pdfreview = {
+  revision = 50100;
+  stripPrefix = 0;
+  sha512.run = "1cb41c081230f601eb627d81118a3832597e97c2e0565f48f584e8f4b6d039ce903cdca54fea4591a5c9707d5145ff45470858dd2e39d3b18a2e964cb380301f";
+  sha512.doc = "72f7a2083c7bfae24d3a4cae397925f9d02555587c59cfea8d78b8fcc0de5db24367968fd27799f4148865ca7c2a4c2dacd11269d1d71c36f039fdc913a532e2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+pdfscreen = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "e8a3fecc3aedfb87156c1dfeff4673650a8dfd31109e3d76e7f51dd99b1610aee086a2fd183d48cfe1403dadbc6a8ba84fcfab5ea832b43b8a5128bd07612112";
+  sha512.doc = "8f4b1f6876b0adfcefb4a9b1ea5f9c8ffae0fb4ffc245fd75f631b172dc592dc82ffaf68b37e9c1907db5275f317b444966a466ab6c8e7b20b80535842230794";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+pdfslide = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "bdb1d91b587375a0d72e317e4a762b9cef984dfa36d94fd7bd13a3e22941f0f1f4c981138b805613f7a62f4d09c7c781fa9e4e5d4b5019a749a8f8a700bf5540";
+  sha512.doc = "92008d1e461e5309649ec5160b7dd3796455f04e923f4e5c8593a3a4cc76f704639206c48a4af13bfa9fa3fd735b03ad419f07d1222a45d093a6824aafcb8df1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+pdfsync = {
+  revision = 20373;
+  stripPrefix = 0;
+  sha512.run = "0a7f183fd83f52016d499f8aefface745fee8351bafb4abb467166553d742f91ead7377fc3ce8111bc57253431aedf70f4b540975a1c139017f7d02ccebb6ca4";
+  sha512.doc = "7e103ba84fd41acbed007f4acceb0188372a4984977a3fbee3bf4484612c6e0621a934709982407bd1d59a69167c1d2f5ebd4b94f73bc502baa8a4830fe3f983";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+pdftex = {
+  revision = 66243;
+  deps = [
+    "cm"
+    "dehyph"
+    "etex"
+    "hyph-utf8"
+    "hyphen-base"
+    "knuth-lib"
+    "kpathsea"
+    "plain"
+    "tex-ini-files"
+  ];
+  formats = [
+    {
+      name = "etex";
+      engine = "pdftex";
+      patterns = [ "language.def" ];
+      options = "-translate-file=cp227.tcx *etex.ini";
+      fmttriggers = [ "cm" "dehyph" "etex" "hyph-utf8" "hyphen-base" "knuth-lib" "plain" ];
+    }
+    {
+      name = "pdfetex";
+      engine = "pdftex";
+      patterns = [ "language.def" ];
+      options = "-translate-file=cp227.tcx *pdfetex.ini";
+      fmttriggers = [ "cm" "dehyph" "etex" "hyph-utf8" "hyphen-base" "knuth-lib" "plain" "tex-ini-files" ];
+    }
+    {
+      name = "pdftex";
+      engine = "pdftex";
+      patterns = [ "language.def" ];
+      options = "-translate-file=cp227.tcx *pdfetex.ini";
+      fmttriggers = [ "cm" "dehyph" "etex" "hyph-utf8" "hyphen-base" "knuth-lib" "plain" "tex-ini-files" ];
+    }
+  ];
+  sha512.run = "c0158cb19918ea2bba57cc68e32af1d2c4ef50ba45bf05e0c8b7e64057daee19843ff77633e4dd0ad660df39983c46f755c691f85d4aa2000086c02d48498d0e";
+  sha512.doc = "d059f01596573efacc4ca80333b07236f860375f49b82d0cd3ab6b3f441f379163a37c820e713a2d96a8f69b821b3dbd68f360c5b5f005dccac54575df4b5d4e";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+pdftex-quiet = {
+  revision = 49169;
+  sha512.run = "7b33e37a4b33060abee48ccf825cacecdee552d641da48dae47e3615fa0ab91ea9912b52fbd5c5ba6cdaa9c0d2cc7baa7c48a80bebb6d1887e5c633dacb4d104";
+  sha512.doc = "e13392cfefaed2c154c086ffcf85e21725e4230ce78d10e07dcb0a1c8b3685bef2572c5f5e249c56120320f2b0167cd5055ade50625a296446a197c0ba4b85cc";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.1.0";
+};
+pdftex-quiet.binfiles = [
+  "pdftex-quiet"
+];
+pdftex.binfiles = [
+  "etex"
+  "pdfetex"
+  "pdftex"
+  "simpdftex"
+];
+pdftexcmds = {
+  revision = 55777;
+  stripPrefix = 0;
+  sha512.run = "91054b61b76382813d80e873d908cc07f8571b7651f49a3dc3e87063507af43bf31107c34187b703b0c4462eafe0cd605159803c72cbf2821cf6ab3afb78fc6d";
+  sha512.doc = "a16db56366e80b1694b78919a245336c37690ea9a1305a606a3bfa85a73c854e92d1cd8b9ddb0bdfdea82f1ef684d06d8b4649e4111c39f24f321dbcb01aa036";
+  sha512.source = "f3e62a5f9029f71c652105b137048cef4f5562dd0848bb7a94d251e2af579c394322a70f40aadbed3ac56312005d59124ef3fd5a2436127a72c430d344ecede1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.33";
+};
+pdftosrc = {
+  revision = 66186;
+  sha512.run = "8cb175ce464b0ec0bf74c39ddcf381daf9e27635098e775d929f5cdc60858d39cdbac1a4302446f9368a274ce4c3afda9636d882ef4097d2272d22e190d8d272";
+  sha512.doc = "01598180f8eff2913eeebf5bc3d5f3aba32029286fc6e0c072aa8c0f4dabaf0c6e71ae7451ba9a7b65b4d0075a7f0a3baf345b02c5826eab64d74e39eb82798e";
+  hasManpages = true;
+};
+pdftosrc.binfiles = [
+  "pdftosrc"
+];
+pdftricks = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f7c0a71e44d0d388ab952ff820e5af63fe0f94acb2feb3415a2d1b3cffd94efc7e8bd17efbb7b608d082ab1b7d7ba1b780c63088df54a8db241c9b3d133eab1e";
+  sha512.doc = "0e3ec1f3b7d7c9bda1e08060f0ee0615244863e513a25370b598f22bef00e6ece79592a105eb13cc913c169b1994c8a38fd60be0566e1c52e1ce2f97dc1e5995";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.16";
+};
+pdftricks2 = {
+  revision = 31016;
+  stripPrefix = 0;
+  sha512.run = "e50406cd680e1d5cfabcfd8000b743fde61dcff7e3c686b06f58fd1fd36e414d53140b5d244ef65931aeec67dbf458e5e2d43266f26ee9de301babbc0f88853d";
+  sha512.doc = "4a22c280a28e4a45f068d52f4d75f19b5ccfec30609d7c8d143cccc67d16fc04cd1ae63e7d6a5a659a0805ed85d96d57ff5fba4b246f67029457088e7696ad23";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.01";
+};
+pdfwin = {
+  revision = 68667;
+  stripPrefix = 0;
+  sha512.run = "1064e81793884565568f6bde33072dc007c9b9a07c010be602111ea4429ccb803c18a3af13c85bc1367279624266063756bc59c72e6190e70090eadc8857b8b1";
+  sha512.doc = "5055cfb0e2cf0e1cc105a43fb82c05e133863cd22278792de5aa931afd84afe7cc3b35566a399dba97645da4495d16e47d723155991ecf1bb3e13a892f230787";
+  hasRunfiles = true;
+};
+pdfx = {
+  revision = 50338;
+  stripPrefix = 0;
+  sha512.run = "c1e1be225efd5bd66873663ccb134521b40253875248096a66a8499609e62e481fa64e563afd75952b2dc0041fa1fce594f4047c3c91fe6b9443493ce8899ae7";
+  sha512.doc = "22b7e52295ab8da136e584f545001d0db480cefb06b7d595133ff3508c9ee3e7b7d8c8a93c41ebf24a9e313b4e40fdf355a88ef0a65b629c3b27f5f4bcec906a";
+  sha512.source = "31c9d2e7fb89f9405f26a18dce6a5066958867ca03ee793e46f9676022ecda77074eef23fb4a238af5b077d642107c372e268ce5b4e7c0358d7ca8c0ed6daddb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6.3";
+};
+pdfxup = {
+  revision = 59001;
+  sha512.run = "f5b7623c1ecd132bb3646af5953245bc7378901bd5ded2e910487770cd79bb3d248cad426aafd18dd12a28bdd46be0f89b81dc95959f06688fb6a7a8f96dd11b";
+  sha512.doc = "23db38fd8ebbd04bf6fed3b2814360cb6d0b736db1540d0298e9ab6edd449894c420078adae11d97998fa1fceb8e7083adacc0048337afbf4b6fbb253c8ed21f";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.10";
+};
+pdfxup.binfiles = [
+  "pdfxup"
+];
+pecha = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "12092c82c52e34259fb0894b8375c45fd94b9aead121085736a0f7bac90b7e156906a22d233c596c79880aa0b858f7213f37b2059cecbb4627ce2e4163f22335";
+  sha512.doc = "3d0d9184aa0009ab67f299a87b3840513229a93ec08e33208fc7b3c1a69fe043b02844ccf7569d14c5d5cdf0546224b320970caa080458c92cc299853b021c98";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.1";
+};
+pedigree-perl = {
+  revision = 64227;
+  sha512.run = "4aca97c3d231e3c68a8372d6d8c970aa681fef3d1b7061fbea1648a188c03e06221bf83d2ed0678390780e9a3c2edfe425ea0050172e837ef1a1a62369c41909";
+  sha512.doc = "b0b251fcf40185b017835a7a47e32736ce0d49c56be134bf93619dffedae4ecf44d36050e4515fa681c8c37707a933d8faece2943b4eddb58dab6ba3a2df113d";
+  hasManpages = true;
+  sha512.source = "febf928301eddf00aa84ede679712a3e58520368f7ecd488e9d696b82dc6ed5afc403d88b344071b4291391528a4552620c4882ba2d2e6ee518fc3a8733a2f41";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "2.1";
+};
+pedigree-perl.binfiles = [
+  "pedigree"
+];
+penlight = {
+  revision = 67716;
+  stripPrefix = 0;
+  sha512.run = "7765a7beaf9d2f99f383c6723fb7ddf3968f656a433bd519631b539e7c599e4ea26546585c1be6732a42e1632fc11b980ee9316de6cfb765332790f81d548aff";
+  sha512.doc = "30307bc7774c3768227da33c31c6296e8d470f1f835f792248ed4ff40e261ea682fd967987396808fcd36e7e0a74c3da2bb947de7eab7af5783e3790857b081e";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+penlightplus = {
+  revision = 69070;
+  stripPrefix = 0;
+  sha512.run = "b4aee13d9fc3a01d434ea76ed04b2ae6871dcd7f2a1953ebe36a89153ad1759a2c66a622ee161ec7bfc0f79f235a54f6a2f8c232ad62cc2150ea872b2e4b79ce";
+  sha512.doc = "1a9da1ba0e893846d45eeb3cb6ea803f154986aa9c8f419695cfb4c24448a0c9ef603d14925e44731ca0fe00fda5528d80b30f428b81bf97a9cfee90755c78b0";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+perception = {
+  revision = 48861;
+  stripPrefix = 0;
+  sha512.run = "669bf4b618c4120d6cd7b574352c38d0fb3ab7bd949e26ea239f4ceb0fccbe102dcc6644ad2cee9eb79385f590918a12bb2c065f80b54e8343223056df448060";
+  sha512.doc = "35428e19d9e2429691948331ef574168a3eb5dd3e09f4286c66003ced8c0a65da9853de4dd57a1920e2f2315b8543f9ec9e096bbd26123554455dd8c23b33f55";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+perfectcut = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "5c3963a08f1041e78f871084531187214f3735b15409cbdcb4491046feba1fbe44887b23f450d40eb3a697a49e0ecace584b96cb10a7f959e28afc642259b5e2";
+  sha512.doc = "4a978f726c8b5a69006f293b8428978a1a6185df27f2d26a0be06309fc55ec3b8cd6117cbb4ee732f6c2d0ddcfe8ad66d86f7f838ee2e386931e41c0ab043e2c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3";
+};
+perltex = {
+  revision = 52162;
+  sha512.run = "af7cd6b065f2405a514d20cb386b34399742a42286002ab3e0f795b64dcb434ae97470ce9cbf25cb27a9b124ebe56844b47c7cf89e1f83a4bd35f1bfcc98163a";
+  sha512.doc = "d39c93f4bf3da08266bb0f10b06582db2bf96bee73faafdb191af3770c7c24abde407774f21d3c97b1f2453a8a9bd24576acaf0606796d7439334b8b1e42ac7d";
+  hasManpages = true;
+  sha512.source = "99a8e27c23a7056496c56e734fefa1e921a002d7b86c153b3a209f7c3d7c415dac05e77b0ce5bc8685bd622243d6ed53be4a7f570a3ed487c3d55baa5b5af06e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+perltex.binfiles = [
+  "perltex"
+];
+permute = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2b1ea22ff45718a12f5a031a60a2780a43b324afb3a7c4b3bf2e1a9808f5eb789938f0e084214912a50dc1a8ebe76c58cc39dccd5a411ce001fafc8fa5c41ea4";
+  sha512.doc = "f0f9f8d4e7e9b7cf5794529bd5febb0bd58f1ba0e95a72d688280ac3e6837cf39bdfb62ac29584fbf8cb37e1dafdcb971b9333a0306fa867fa4a1a256dd5a4e3";
+  sha512.source = "4273fc09b30de6ea203e13b09822a07b222de8d1abc143e67c0c465bd8c31ca4648b83a7fbd895a8865b7793462bd020642d383e761c926504a6d40e785c0108";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+persian-bib = {
+  revision = 37297;
+  stripPrefix = 0;
+  sha512.run = "e6650399eb5129dd0ad08c3ff93843da47287ce641a65826545b10a9213437da56467eabd8c37f1a7fc17086af968043586c53bdbc7485e9a4453b3f5b23bf83";
+  sha512.doc = "a18f3652bfa8cccd8d574e475859bde8d41de04d3093f05222dfe5687460b8eb29a1e9bc258cb73cca69dad52f567572a654f46414a0d513ec27e462f4787f35";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9";
+};
+petiteannonce = {
+  revision = 25915;
+  stripPrefix = 0;
+  sha512.run = "8ff32eaddcc84973851b93f0c1c1b250b596a080669ef60ea2c115098c4984d426e37240ae8781fa3b95ce494e9fecccdd259fd25b47402498028f2b8e5f9fe3";
+  sha512.doc = "d171f31889fbf07b727c78a99bc91a2e6a8231faa25944a600ddb17ba32273ffa40a39a56e6e9b2c35ebfd0bb396ee699ebd9ab179577ab07e63feb8686d4af5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0001";
+};
+petri-nets = {
+  revision = 39165;
+  sha512.run = "0807444f934acf16b052dc499a097a2a645d037622a71430cd82fcef85d11bc652341ce6396a27d717effd08bde8ba3224c5235351fa9146000c01abd522f644";
+  sha512.doc = "cf03048e2bccded143fb493b100fd19103ab90f40713441c5380446702d6c57ac3820f2892a3dfdb80880952e09de78e69b309783767a3e157f76b81c9360535";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+petri-nets.binfiles = [
+  "pn2pdf"
+];
+pfarrei = {
+  revision = 68950;
+  sha512.run = "2022347ebca4dcb71e1dda7d8ac906733a664b98d14660e48b16e6592ae229641b8c7bd10602d89b3b01535d2851f9504e3329a9f82f4adb5a4c68dcd69c6ce6";
+  sha512.doc = "4e5eb99b0e0409395954170339a744d18f8d0f8ee389ad1bacc684a037cc8b2b6121850a7674ec9b699596bcfa8e9e36521d13571bcad0db271cd1f9fa619488";
+  sha512.source = "65d865d2e79ff7476a3629fd3ffaed09b3edc8fea9224fd7126cce0203bfa6f5ecb5caee6727bd6d01196666f138786ca409f3530a577efae4fccd405cbd845b";
+  hasRunfiles = true;
+  scriptExts = [
+    "tlu"
+  ];
+  license = [ "lppl13c" ];
+  version = "r37";
+};
+pfarrei.binfiles = [
+  "a5toa4"
+  "pfarrei"
+];
+pfdicons = {
+  revision = 60089;
+  stripPrefix = 0;
+  sha512.run = "cd09de584483a1493648e9f842b743c43d7712b35f9d315ab34871a964b6ea7e8bcb0ff4b8d4399f5ce7d5ebadf41c94e8b88772b15155d4c21e17e4c62ecd2d";
+  sha512.doc = "cb9f0ae2a1b7a3c8cbb12f859c9cd9d33e447652ceacec2642e45c7db7a96ec6cfb9bf63ac8f711c1661557308ebc3c6c04604412d09cf16d232e23c805e395c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+pgf = {
+  revision = 65553;
+  stripPrefix = 0;
+  deps = [
+    "atveryend"
+    "fp"
+    "graphics"
+    "ms"
+    "pdftexcmds"
+    "xcolor"
+  ];
+  sha512.run = "d7fbf0dc83f88a2f6d2de3117365d3f4ac2379ecbc530e343bc3e02ac8083e9a9843d479d375d086e39b6377b21d2fcba22883485e040fab1601642ba80128b9";
+  sha512.doc = "e3be45f63b46124218592ffb8083998b9d25e81dbba7ec8ee58d578335247b05ecc46c145f5de8b859c72dd54cafac58ee784f9aa33888fc129817c66a819568";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl2" "fdl13Only" ];
+  version = "3.1.10";
+};
+pgf-blur = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "95093365a79d7f8a2df134decbac172a080711bcf8e8f77267ea4520ccc9aa398f5fbedaaa5500fa189b3873d8897350dc2c99f142b6bed1a6e7705293a3b8b7";
+  sha512.doc = "d313e5ed1a0b5637996d6bd1827b909a771fcb44490312c502acd89412966d7662b1482fb8f3347b8d658b336051773c3d10e70df9c1f22e810802936eee816f";
+  sha512.source = "c8b7baeb30d520d05d53d6c37f70e028d8622d59eadb7b8aef9c26147e5ae4704fbf45798315597f6ecb65a15e4c8e8e18dcc0cac98b0cb69efb191645632710";
+  hasRunfiles = true;
+  license = [ "lppl13c" "publicDomain" ];
+  version = "1.02";
+};
+pgf-interference = {
+  revision = 61562;
+  stripPrefix = 0;
+  sha512.run = "569dc2b0f5b11d93aa447d54649df07c3df375dcdaab509229d0304bb25523bc45062916089b15776b727a9c05205688a161bc79cfb4abbc466a243b2c8c57a4";
+  sha512.doc = "106f86c28759b0c105a6f57df9c8df416190f781b73f1bbb7398fde6e88192fca5aa3e198e7235dfc23c2fc3bb41a5cd0cfa060f9dbac4faab30bf04c484e9f6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+pgf-periodictable = {
+  revision = 67250;
+  stripPrefix = 0;
+  sha512.run = "90e347be204b06b55941110e968b02f36d849a667a0bfea81552ecb31baa6197139912adf8bccc6b212b57b77be3857088c35f412049ba6fb6dd205049312c3d";
+  sha512.doc = "e13515d4ca7af997ce26f25dca80325cbf0c94f9e5c6a7dcbd51d0b5fb2900d73e37b73762db61269c0c2408ae8483bc767da680aaa88c79c011ecd811766cb7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.1";
+};
+pgf-pie = {
+  revision = 63603;
+  stripPrefix = 0;
+  deps = [
+    "carlisle"
+    "latex"
+    "pgf"
+  ];
+  sha512.run = "3e5cdb5def0918ab1c3d38d35bb85f07711144d1fcaf0f3af8b2c5e0eacd9af6c3b92bc6e1f45438e40d7f5838770b91ab513970cdd9a3f7dad2918eefb875f6";
+  sha512.doc = "ac151cb61ea4fc440ffeeea9b987f6dd648b53596934900f41437f787bedcabe2ca8dd53c37828aab816e9334d0d26573f81000333e50d0761d70c586a5d87e3";
+  hasRunfiles = true;
+  license = [ "gpl2" "lppl13c" ];
+  version = "0.7";
+};
+pgf-soroban = {
+  revision = 32269;
+  stripPrefix = 0;
+  sha512.run = "e0f85a77e9d81bf01f5516c3b3baa52a9b7f1b0faaa6f0aab1cae2182732eaf04ea2edb6b0f9091272849f1d7ccb3797cb2641090b926db7f3d0483d08569845";
+  sha512.doc = "3f4c021cfb99a27778c250f9ac13e2abe48127731b54d0fca9e8e588f44ebf797e034a56d3ca19bc847bca173dfb03ef9a70e0fee71649188a8427d6eabceb80";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+pgf-spectra = {
+  revision = 66961;
+  stripPrefix = 0;
+  sha512.run = "723fcfd1b6827cf224fbbba91bbe4b65e8ea6b09cfc5eae2645144d2f64bdc0004f4f6184f2a310f7208650870041f12c4eb73e4d34c88fee5513d041ba88586";
+  sha512.doc = "81e418c2539e9df982025478d552b947dc040a5fb3ac8250636e874e77c97c83d215df6b2e9208f660b8a928eb1dd0e059fae357aef1b71b6e959a37affac2d6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0.1";
+};
+pgf-umlcd = {
+  revision = 63386;
+  stripPrefix = 0;
+  deps = [
+    "latex"
+    "pgf"
+  ];
+  sha512.run = "a55281a157a2a347f1c9d82679cd663f4493e03123d14dbef0d71582613772252b693a25b3d3e5b72b948c4fd12d0d7b0354d2e38083583b550d7cfb5e634d93";
+  sha512.doc = "6d798d93590d859d69bda9f0bd391049db91e2d4fb6f0b019a6f76eeaae9e73c9f249ec356cf5a5d4505af6948d4c70c2ad4685c1c41a7ba40ec62d3d8a9dd00";
+  hasRunfiles = true;
+  license = [ "gpl2" "lppl13c" ];
+  version = "0.3";
+};
+pgf-umlsd = {
+  revision = 55342;
+  stripPrefix = 0;
+  deps = [
+    "latex"
+    "pgf"
+  ];
+  sha512.run = "6b015603e3daa362e473d795d32fa785ce247b58ec9f88872fe4bdb4fa660000bd87da2369de556f998485a6fcb6dd49aaca549b0470b41adacba5a278453197";
+  sha512.doc = "968d23fcc4f114bab204ec53281975a6fee5f81635ece256351198075cd8463a706954f463beacc162180459fdb3652657f2c060a71c588681f8de6e788a4e6a";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.7";
+};
+pgfgantt = {
+  revision = 52662;
+  stripPrefix = 0;
+  deps = [
+    "pgf"
+  ];
+  sha512.run = "0269703fc00f10981d5ce8958159a24814b9f410c1b00516608c039b1ea8a3381392bf1d89e98f3011d42210047bf2e1fec2f103467087f9172e143d9ab6fcf1";
+  sha512.doc = "4890ae174c92db8df7befcef30d03724ae52fa4b26ac796d247a703794ce745ee892f0d2ab8a4f62e96a5e5f792791a6f7e8b9e71f1c0f11b68e8cbcf5165472";
+  sha512.source = "668987bd37aebd38697c02bc39d85371c7d40613aba13c0f3b62ece8145608057cf3f76cda03de6df25f7ba820359ff2ba1c340aa1b9ebff94bbd42aed39e401";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.0";
+};
+pgfkeysearch = {
+  revision = 69385;
+  stripPrefix = 0;
+  sha512.run = "c90dd895a9c4d3ba737f6dca0a618af781ef712f7254f80c4f6bf222db80c8e7f010e9e2b2a0fd4a125154586d1b1532881f1e29dacc677c416dc8b5857acd51";
+  sha512.doc = "8ba4bc32f3a0393ec32e387110a725d10ec67793867ff7efbe8bc6047a6fe7c2e19970f091f96e2cc4d756809301864c48ce550f46240e22aaed885d7ebb57d1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+pgfkeyx = {
+  revision = 26093;
+  stripPrefix = 0;
+  sha512.run = "c2adb44ef34930aef1d78aed2025a2dc17c69ed641b59af29bcb93c9c9532785090f30834d52c415116ab4a9477d83e5a46d1509e6bd41f47fd4e37cc8ff2933";
+  sha512.doc = "2a596ee81d2af4992dc23d6f28f788ef1d3e9a528992f01b7113de726898ae3007b685c4c447d2fcad640403d1bdd8a0eb07299ac9ea81f41c4158eb21b8e9e2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.1";
+};
+pgfmath-xfp = {
+  revision = 59268;
+  stripPrefix = 0;
+  sha512.run = "c82fdb2b540dc37393610199581416b4256d9cf382da4238625b9ae29f6d7ea6150925c6837ae1f4b55fa10239f8563fb8abd042d5533080de7283246ee69ed5";
+  sha512.doc = "f48114bf89d4d5aeca399c44bf6a6fb26567d7692de319e7d457d3b753df8e302871e9901d98bf8697680125fb8fad56ac8675dd339bc420b439aaa4cc93dbb0";
+  sha512.source = "18571bdab8756f25c357ceab0cd82f242007c22ae0b6b5cec17ece221137607a6d245ece8dd90c427d0eceda63749f0d75e77c2974e9dfa8509a1bd34768b5c7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pgfmolbio = {
+  revision = 35152;
+  stripPrefix = 0;
+  sha512.run = "bdbd89379ed7310b78a3847c43022f6cd65f5fccfabfc4723551f5ef4f4cad3e3dcf596ff65cb4c5ba4a354f9bd59fa4aa39147782a0ed369a7dfcb68ef7f9cc";
+  sha512.doc = "a9dbe657b4037477adcf3ead4ad4ca5b703ee8c53739da9de0bed8e02c8e14961a963e9a4a5a86b3f53348da9eab5cdbada1b5ddd073bc18c82177abc92023f2";
+  sha512.source = "1552182819893f7538ee5b38816d339639ff6e6ed3e092a67dde1dfa2a73eb7bca1490909fa34d4999399a8328b2ec8885ad86e76438e4f177dd81e2e6accdd0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.21";
+};
+pgfmorepages = {
+  revision = 54770;
+  stripPrefix = 0;
+  sha512.run = "9a4fd2f42276cb72cd39dfe3cb5b6c43855e1d7f01f47c53b23c8aae7bee98c89e8a8f784a917c0c4ebc35f9dcaec18b8d4f6bbeb05ec5a80647ff7ca23c02ab";
+  sha512.doc = "3bef05b263791c9b1e92868ae22966f5638a900d44ed9ab9de5beeb0dd25c7e8745d09da4cd3c2c7a9e9e5c710126cb7bbcb67579e770c43e6c7e057dcfdd1b5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.20";
+};
+pgfopts = {
+  revision = 56615;
+  stripPrefix = 0;
+  deps = [
+    "pgf"
+  ];
+  sha512.run = "7d672d626428c37fa749a810c57be43c6102e1325a6d3e16c57bc560b6d65a57bae94e619a73f3e0efb46ce7b4783d05a6e98c64b1e90c6e0f94f1dd9acd676f";
+  sha512.doc = "ff82e0502fdeefe6afe90aad4e7615de9be4ef8e2e6a69e7a537202af77aed00c0895269ceed3d38e0f34345efbdd771d22b0c8759fcb46ff8e91ce639dcd21d";
+  sha512.source = "758da1f3daa0ef888b484ea657fdd4384102868e4eee543bc97e73f103b67c367277f5c00efd06a2080f9ac3fb82c909cd30f641363120e70357450179dab6c5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1a";
+};
+pgfornament = {
+  revision = 55326;
+  stripPrefix = 0;
+  sha512.run = "3d5742197af0b6bc11a14ce5b2198aa7a580655f29757f825c24b4081dbd318d45d4dfca065fc04f0d5f47d92fca166a185c878c8d7a506e4ae7547def41592b";
+  sha512.doc = "b35295915c86e4ee5c2fb9b1ec2d545c8d4fc1cf5e65f3e6247e4de1e77e2f789f7842cf234546d6e658a73b4837cd50f8216cd9425f588cfe4a12c76bd134d1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+pgfornament-han = {
+  revision = 68704;
+  stripPrefix = 0;
+  sha512.run = "7337b577e10f2a6306badaa45ca57614ac0da6b3c12ca5c9c3978f1358fa88a352cd092452ef3b6e86d01ccd05f1cfae663f914956b74d184c08a21d2e484e01";
+  sha512.doc = "7b9138088db1581571508ccb550b1b128ce0b574dcb2a903f5311b9a6e63e9d9c6e56eca0e46ffb5224f5685c5b047a57e5e7d292e7d6de6a9bfb06ee568d9b6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+pgfplots = {
+  revision = 61719;
+  stripPrefix = 0;
+  deps = [
+    "pgf"
+  ];
+  sha512.run = "8244e65860f37d74d05535a627ef6cd321407a69a142d156bae190c562a9402a0d7e927df732c32cc5f556dede1b51f7aeca5d7d3a26167348a21f2e3d8be5ac";
+  sha512.doc = "720a77c574c81e7c3619e3b988c8a359bd6cf284ad3fa7c795eb01c371ede85ad727dde8e5f19d8f683947b5dc5752324581e364c59e8a644b5ae34d6b75a96f";
+  sha512.source = "d840015854794de1a311f1d8a9935a93c71a098c46fb1c5cec8a57228a924685f75ea76fc9cf2a9f9f30ed39920bbf2092fbdef2645ddaa5ad5a3787839c1d2a";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.18.1";
+};
+phaistos = {
+  revision = 18651;
+  stripPrefix = 0;
+  sha512.run = "d5cb8a051e1e80629385bff368896c47bdfccfcf38a24a723ddc5f9056a59c57703986799253812c9a4651f4e16dc55cee0876ddd0552900f978dab0381c9aac";
+  sha512.doc = "96eb22628467289f72aaa0d4983e494c75b3a2315d8b9d2921f8ab29d93fffae4f459ef852529dfa4ff48a65e25d652662c54d84db54e0118b1c021bbe39eafa";
+  sha512.source = "5ba2b04fe4e3aef136de2dc40568ecb81f437561ee8e6c320927bb816819889666f57ad07c3b8bf6eb7f6eb84b69147f9233449a26529b61712d158abf889f91";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+phfcc = {
+  revision = 60731;
+  stripPrefix = 0;
+  sha512.run = "1d1f6387db333cee296545663bc4e2026fecd0f381cf4e45b42c8b297a4ae9bccfaa8e9791f92cf59bccc428b3f63b944d9173660c3606f1f49ef1878caf2181";
+  sha512.doc = "ac10825535fbf1e5173d5d209c26d665a128473c3100e349a63ccd921534c9645ce3c7b7391aac56de70f23657db8e1496f6afc0b2d112a45f3ae84d87220498";
+  sha512.source = "31c59c51bb48a722e4962986bef69619ca1ffd80bc25ee1308cef80e78246811ee169ca6a0c9ea5e257626e55fb04bfe40bb1ec53d09c81b2fe636e6ce215a37";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+phfextendedabstract = {
+  revision = 60732;
+  stripPrefix = 0;
+  sha512.run = "0e1f0f232c7216d654a41ab750477a5a6efd1a2dcb15b2114eefe1ffcb582bd0512bc8592111904c550badef12a3927c5ee2af58548dab5015901165b35a8bd1";
+  sha512.doc = "aad67fc68996c032bca758b44eb65288f2245f780e9e4200888fb027b4638963e2f3b9c771a5ec78f8c65fd0c86c8b55b16d8cdad44fdcf9cc6622a766175e00";
+  sha512.source = "a5d3ae9a1bc6b8859e998bb3561a63e99d9a4f30da3e3c2dd918ba7f23a09362bd8f123e2bfbe2af4ff7f2204c969ad487ddf389fa04287eacf0abe9f251391e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+phffullpagefigure = {
+  revision = 41857;
+  stripPrefix = 0;
+  sha512.run = "4d443d5ce4dfd4805eaea4ecfe11bc94b9e92bc4d68f8fdd001a72ef09f519f11e20517d01722f5c7f79eeb9b92d0a6099d620e5c54dc0845b7ed5cc762c260d";
+  sha512.doc = "837b57707c0d37d20b02ed83ca32768c4b2718958ba3124650604f4de0bb11528c2d5fed95f942545db400eca0517ef59fb168408ea9960f0a894a777e9f2681";
+  sha512.source = "f0abc0f77efc7460907cd18282ccdf2ad15687b3d891a72e8fe756c16d1d715cd6f7eaabe09898c2bd88ebe54d16b86115c06b4d56fe1f2f4b8e3e952292a107";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+phfnote = {
+  revision = 60733;
+  stripPrefix = 0;
+  sha512.run = "ddaea70a5bb3aecdf634b44dcf5f006db479a4d47e44e96f92bd390c2c0e166b741ea31a0f22ac39770ff0c92590a261c18fe5096bf97997743684a95a82da2b";
+  sha512.doc = "2dc4e7d3615d8f185bf1bcfeb5a90d51f362538691444355ad6820f8bdcfcd68f1dcc69486c0b630d1141db1b4bc10bd17abcfb93cf37b778266090f29ec946d";
+  sha512.source = "15c0614cf6bf41c94513475d0b65f7053970505fcaa3126550d283b8597c49e30b86e716d3b643fceeee2bae37f81a65d8f65859847bee6f0aa4e508102f6617";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.0";
+};
+phfparen = {
+  revision = 41859;
+  stripPrefix = 0;
+  sha512.run = "c184623f226f9bc9926eef0b5e23443bec20e66c6641196bc90daf27a648d9f0db70ad176488fe061d44746b6cf46a3217eeb42f6a95f2e37c20d641ba2838c6";
+  sha512.doc = "5c34575950ee1a9616408f293319eb0634795e07173677cae112466a298dbfa5cc18fbead8e92e459718df91326d27cc7baf0414a1f1e8613a5c115c070b5016";
+  sha512.source = "ca94f1756265e0f92e8808b7dac74eb57f62eedcdefbaf6e4059c8a7ffa51819da979a70203b11250d329ec9000b454067c101b25753673add4b35c40fe1e882";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+phfqit = {
+  revision = 60734;
+  stripPrefix = 0;
+  sha512.run = "604093594d05e5f331d27bf5b0d6c40b631934a2872841f2534f69279542a6bd26ad758712b9b24c5490c4e9396ac147f46a9d0790cd29f56c0d2b13d876bd56";
+  sha512.doc = "738e5f61c0318f331ea2a7f1e0d5d019969636917fcc18ca19a72ed42b1207f4025c58ea886c4758b64c61cb33faf8ae5b4d5f2f7a55a9ce9758b9fec00508ac";
+  sha512.source = "0d0ce4d75bb6d73e24a47c8d66ac0b72a0cfe273a6daa4af1fd3a89f853c3c5c1f856d749321fc9ef79b0e0a9c27465045a48202536b73270971deb2d4cc7a30";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.1";
+};
+phfquotetext = {
+  revision = 41869;
+  stripPrefix = 0;
+  sha512.run = "809820fd3108cb5b33c5f3129fb3ae8251476161aca5936b966219a49a29204107375a33e6bfc452d2aef8b0cefb30f8ab0e53984f39d5c3228ded25ca19c37e";
+  sha512.doc = "501d652782670318fdb45368e01dbf76de7cb46f0f1584bc7dbf1242a71a42e7bc870c5cbf7dcb33d41463c550a0803226860a0aa64e75952f717436e8f6501a";
+  sha512.source = "fa812150acf519ca0995afeb9b3dde9c1929b945bb964612319f7065c6c303641e2a245397e7271eb777af9f6cfd310ca1ec7f9974c0bf9c329a0f006df2b9dc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+phfsvnwatermark = {
+  revision = 41870;
+  stripPrefix = 0;
+  sha512.run = "38dae3ef3fe183bf5149b91050afd5bc9c934d01332b021ce87e9ea412008bc22d42d25a389e82b02ccc4cc4820a10d821c228c02c4f08fdca89ebde69c6e2d0";
+  sha512.doc = "7f35bcb41618c7e14e7e9f8fb289231a8032f7f1cd2e6333982a346c5f8dd24e5733f70c03ddd183d170361b2b3af4115f6fa9b788c4dd2a020020ba525aff18";
+  sha512.source = "6c5e113bb45ce6b11768c711bb59743b75bf4b95e9d84c045b59f502f181e80a67be56b3b5153364c29ca5c36f6adb73dac4a5d3051a8dc3ea275a43277732ec";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+phfthm = {
+  revision = 60735;
+  stripPrefix = 0;
+  sha512.run = "2a608898b9038cc46e4720423a42f403abcd105700e20e90274ca6e01ed3c4428a443466d0e32b0cf0da9735c0b7ea74b82e90a3d0b72583d38fa5a14094f806";
+  sha512.doc = "bb0c2da2d17b0c3c3550569428fbdb5532d1fe79b325289d71f35659d749fb952bacfa6140210ebbbdc661dc445ae8add1be6cc79b77bf6346fadc70553bf189";
+  sha512.source = "7c234459aaa013a9d2d0c719791d99ad6db252e152a53f7111e6d9e04fed3c718efb4fedc85fd064825d40ef80fec2643d6310e582bf830486b8e43efa27c966";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+philex = {
+  revision = 36396;
+  stripPrefix = 0;
+  sha512.run = "0b6ce5d281836926d6807dda7a8a4eace43a25160b8bdfaaded7ef9838f933db7a7bd4859019555002b662ca01800e64c4f6228427b4f40c9a79e71759aca6e0";
+  sha512.doc = "ec8eafe3e1b5e7cdeeb2554c3e34036c808f33b4f4bd2e5fb8b2e10e4366f51db02b2bf3dd52e46c92d600cc092f30c4db6cb6f69cc66cafde5c11a53a883839";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+philokalia = {
+  revision = 45356;
+  stripPrefix = 0;
+  sha512.run = "6a7b76995074ec233d4922de96f727ed031b21abbaf1a423bded6bcd964e8e503d7d3d84d8d4eb1ca42ebd99e1af50a244238f668db245ff4810176abefb0976";
+  sha512.doc = "8cefb15592711d19d3fbe5fbbe6efb219ce081dac6d8bfb12ebc57ac807a30aefbaa37f371e70b7141876333ef408ae5fde177add749faf2302b2d7f60a1bf00";
+  sha512.source = "975d97494ed2fceefd6d7fae5cd7916689087d5f51136398b19d233e88335c373bbd572aeca930e3be212ae30b7d8b34e0070650aac5a9c391793fd6a5c1e394";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+philosophersimprint = {
+  revision = 56954;
+  stripPrefix = 0;
+  sha512.run = "8b4a1b9bebf971b0963fd20c01807d5d541a978b88a1b07bdb950c1e39fcb20b8750cc0c78bb97d663c00bac2a714fa95f0a088a1c84f371261d236c941cec4a";
+  sha512.doc = "9c6d1f01b2e815c4c33c4e95be40d1a7819568bbf22edacc202c3346ac4f7373ce4b6e8316ed194a32551f07296628d1d8f971ea856ddc33c1d964efd6388d4f";
+  sha512.source = "12c557b2f273c06ccdc322195340e10f50d54986ec8aea4ac103a173c9a31514d5fbce39413472fd530f0c41a21e1e5d7fb5ba03b8dd3008efb8056adc22dbee";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+phonenumbers = {
+  revision = 63774;
+  stripPrefix = 0;
+  sha512.run = "328a221086c26804d8655bd38f4a302b9d76b25e1a6238395f342bba8d1f6206b1d64a7a2fe4de41940015701e8fb8bcf33a0ed5d7298b8c7642429d93a85f8f";
+  sha512.doc = "ec94445c39683298feaf57ac7d074147fa094aeb3fad983b85fd922ec8baf533160a865997c246a62677ba79bf85ce8f385ede4bae159667ecae6eec2cf84824";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5";
+};
+phonetic = {
+  revision = 56468;
+  stripPrefix = 0;
+  sha512.run = "655dda5113926fe28ee0695d8d87a18c1ae63599a2d476f7d9b3e3a28bde475cfe33fd06aa70d709fc05a2d43026e91348bc0c5435f4a9132859b7afcdf41a7f";
+  sha512.doc = "626ca0614b723fc3e4b75ca977c7a12e77908ca710ec52994e62e9e89e2064f973ab2bda3182a3b466eb2df2bdf030e0e6432cbf9f984bd7316b483f9c310b47";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+phonrule = {
+  revision = 43963;
+  stripPrefix = 0;
+  sha512.run = "0465e183077f7daa57d2bbc5f1a76afa72770718d2dc969ebc3078b213738f5ae3919f3ebbee04ae54ff7b8ad6e35630fb22293b5cdac31ee5bf31680433ad15";
+  sha512.doc = "80ea19243537e769c49a3411e036c5811b19586fda3878894126a151af4ddff46a554db7bc07f488f692fe9efd0934149c8c94cde75b92c880bfcc28218ae5a1";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.3.2";
+};
+photo = {
+  revision = 18739;
+  stripPrefix = 0;
+  sha512.run = "11727df46b85be20802588a6c5743a9ae70a89ea73b5f16b8a4a3d3f1d3a9ab3194f56f0ef9d79947b14fe3f6b3e05cbd291dad8346cdb128b4d1c8c22d50bf5";
+  sha512.doc = "037466dff8edee9f6218b1fddfe579b2f82491746e22886ea5f8496b5f564084d81e35ed549ddfc42855c850913cf8c587806d71b7a531ec3ea3056962c54e48";
+  sha512.source = "644303a7eda6cbe50db8cf871ffd642dde5115d4f1a72edde65e9218337faaa63ffebc94bca96da28a4a2d7568ae0ea124f1aa12fe5402cfc1c57619e86746ab";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+photobook = {
+  revision = 68313;
+  stripPrefix = 0;
+  deps = [
+    "adjustbox"
+    "atbegshi"
+    "changepage"
+    "colorspace"
+    "environ"
+    "eso-pic"
+    "etoolbox"
+    "fancyhdr"
+    "fancyvrb"
+    "flowfram"
+    "geometry"
+    "graphics"
+    "hyperref"
+    "iftex"
+    "kvoptions"
+    "listofitems"
+    "mdframed"
+    "numprint"
+    "pagecolor"
+    "pdfcomment"
+    "pdfpages"
+    "pgf"
+    "textpos"
+    "xargs"
+    "xcolor"
+    "xint"
+    "xkeyval"
+  ];
+  sha512.run = "1ceac5c208ff577c3072b96bd3c98e03a75126c25c5bdb8a88c3a253623b2f089d4bff17bcc7cc14d522461df2f95a44ba784ff8108a6b2d284127d20b75d4d1";
+  sha512.doc = "fc29b76cded75fdc20eceb668cc0bda2346bc5e11c5df2d860e90999e48b73a3e44c985048174cc54f42aca2dec3d195b765ffae923a1eb78b1d7da180e6a966";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "0.1.29";
+};
+physconst = {
+  revision = 58727;
+  stripPrefix = 0;
+  sha512.run = "3655aa79c067d01831e6f30d85f13ba7b06742d4731f2f2bbea8066205256fd4f6a5d3290812e667bde8805b9bcad82c4713d49e3eb357cde56a1f50ad065877";
+  sha512.doc = "1824589dccba975de608260ab460a8a6be0d8aecb099571fb9e088e0ecd53f2f6e854a3f21eebacafd06717bfd53290ce23fbdc85467798c8f9b1189d64a58e9";
+  sha512.source = "9e21baa7fe13e2ac201ce8d3d01e5217d078a5300c580fcb9e32fa321fa02ae5da58a4d44f81b4acdb31dc219ae6544196ab6580a123c891021185b65583362c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.2";
+};
+physics = {
+  revision = 28590;
+  stripPrefix = 0;
+  sha512.run = "e394a7f8eda4583cf196dccbd9d52122d0ee630a411630f11d432018c5e9696a9b3feacfa2f881d82090df165a73ee0fa610ad86422123a9e1502ccf4b695be0";
+  sha512.doc = "40a85407502116954024d51361dcbfdf36cac07aae382ada1f96d413f9b838ea5a11d7014722b5641a75b6c9bb8a5c6c134c8c0d424788f47f45fc80b277b3ca";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+physics2 = {
+  revision = 69369;
+  stripPrefix = 0;
+  sha512.run = "1a598dac27ac5e1fa163493c307e48ff2e8c31d9c1c51a676a1b05bfde7af2a558fce4bf410a2c70837d128121331d6aaa393c6e7a84d8b98f9e271184e78a50";
+  sha512.doc = "0627e9882b0ff31f2d6db46a9437c536c29aff39a1a1929784fe4bb16dde1a18aad351819d36a7578bc71664a4313c918623a87cbfaa36738b19ee9a9f4769c0";
+  sha512.source = "3709f7455ffe7d21a1e5f04f08fb36edf1fdf9664c32aa942856248527fbb735dc6664b971bb2de961ac5fa1f8dee14a2ad06b39903e6ca83e639a18b71b01da";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+physunits = {
+  revision = 58728;
+  stripPrefix = 0;
+  sha512.run = "96f700e6dd103f768383a78645cb32e363b83c459a0c764a77d127bbf2aa7c143105752ef9910a2d9d6e659547931b01a2bb0683b41d8870c0fd850d7e01de3f";
+  sha512.doc = "e0a3fe337242d4da26153258f16dd8f71c2a704ed89fea8dc0f58b1fca7ecbf9fb168bc05adee988aca61883bf94272ec2f1ed841d99e47f0992b04f6c5bc371";
+  sha512.source = "59ebd20b6658b4f4082e56dbb2017b4f63fbf9d7a61dc6c5b91a1da1be4794b1e555f2c6e68cb19ee6bd4c0e860eab77905eadd7fd4f72ea83f4b251bc8fae14";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+piano = {
+  revision = 21574;
+  stripPrefix = 0;
+  sha512.run = "49c3b29f48211ac6ca04ef8f9df74cd3f4673a84e9d84c2a9b06bbc958abd640116673abd751be40adb470907bcf65a42756c22996f0adc4e2c0dbf3d6afeca4";
+  sha512.doc = "50609a17b51de85d5f9df4da91c0c1c421a86ff222d08268fd0145e248eea740c68445724fee425a2adbdab85e0cf5b4a9bb4ee5cf3bfcb4a3d5cf4f1868df47";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+picinpar = {
+  revision = 65097;
+  stripPrefix = 0;
+  sha512.run = "114b1e715384513f87f2a6772a6176ade44ac7053a8eb19410fb92862e721865dcc9350f08d77874296ae6402eb8d8da4b4b26ff4a96d035666814a3d3e21682";
+  sha512.doc = "3b972c49a8c2ba7de3e21c065faef96125b2b275b25f7e8a35c72e28f27156414a558e290ed4b84d6ba49921a0c858867a0a7cfd5db87a501b3ac1a0ee6594a9";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.3";
+};
+pict2e = {
+  revision = 56504;
+  stripPrefix = 0;
+  sha512.run = "04c4fc0ea9647c0a434be2ba709f539392685233adc92da262fee4d081b6d31bfe88d8c537c19a102bc7200e2adffac4f7a4cbb3a7a47ca47c26e93e96772e6e";
+  sha512.doc = "90fe6e6d6fce7d2a679bb511e2b0bbca2edc42f332886962aa227536558083897e1e3425b6c7efadaee6aa46d1e404ab5d4c18e21db52e723be8d4f0566eb5c5";
+  sha512.source = "0c637f9979672267e73dd762b43c3339f41ed8965c12fff1141c757572ff7cef7d7f2d8faf50d855cd22a3810b9ead5318b6c20c3e5218f01fc32252f93d29e7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4b";
+};
+pictex = {
+  revision = 59551;
+  stripPrefix = 0;
+  sha512.run = "cca6216568bead5120ef39eb2743897ad97d285b55e7d9b0723b3f6c7fa94ab17cb8cecb946845aefc57eae3c69305de6d839feb9df8212be83d2c7f242c2fd4";
+  sha512.doc = "e5bdad8dfdeaf3e3427d37b35641f37c8bb8005aea3773a914967a10b2583e1721fe0afeea0b8cb7f230edfa7b7d33c2d6fe023c229de4a27d6c979f6830088a";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.1b";
+};
+pictex2 = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "26b608cc8409c62f4c0130cc032f2ca5929886fafb9d22d93aa23af5a6dee62bbde83926bccbcb4fbd3d86a43810d751eb43a2a94be9528e1639c59fb61e5446";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+pictexsum = {
+  revision = 24965;
+  stripPrefix = 0;
+  sha512.run = "a24861e4b6184084fffa783918db485e5c7cacf7a6528681e7d8d4212287f1f6687604bd4f347e9e34ab7d29867dec2b30c9871a13b9bedae31b5dbb82ba1ed2";
+  sha512.doc = "148b7c29cb8189174442b95cd39b0d5fdf9f937a7a44a17314b93cce555cf3db459e21ae2c4eb9098c15551bd7aada2804855d68f9408fdbe974f6c12dd724a2";
+  license = [ "free" ];
+};
+picture = {
+  revision = 54867;
+  stripPrefix = 0;
+  sha512.run = "9dbb4e17b455a6a18bae6309864412b975d07a1a11e908e1023ab8e990ded0956ccf3826e72d9878f3597eaa4d185c8b147d2c7d2149618bdb0b09fce8e20e90";
+  sha512.doc = "ce60fbc915b3c07db6ebf4bccbd0e2e8ed6f38fe0c07075af2c433b2bd7f82cd191c314ef3ae1fe9b4a02c2c27d75e97a5831c45b833a33373d545a977a162d8";
+  sha512.source = "599ad9e192d2ee50b7037d93c3a8541014ada30c13a9a8b637ee33ee9dec476a46779b06a44f56288e6fc08b29408af30310fbf0ec951aef3a8b0d8dd776aa2b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+piechartmp = {
+  revision = 19440;
+  stripPrefix = 0;
+  sha512.run = "e4ef7bdc43280c4311a6e8abf2719815196fb0ed0a8450501061e0b3b0bb44cd60947d6d623ff753c5ad1384d98219df695865e6459eef02b2b96f00906d023a";
+  sha512.doc = "f74c3c34d37eabc3b5e857a90e8da2c6ffaa3b4a6974c6b1127f898fb727ff18f0f399e9c4ccde8d4d198bece0ea83fbbac37a1ba1d381576166b5a2742113c5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.0";
+};
+piff = {
+  revision = 21894;
+  stripPrefix = 0;
+  sha512.run = "79b804dfdbb12b8d2e854341062f2a149f9b0e061385a30650c39b877cce72d1af4ad1644d73fb3ca733a171aa61d1b533295818dc10a92eacbce2ca60722de7";
+  sha512.doc = "ef9d14cf4a38315e4d523082db9baf8d0f89e5963001d12ba7ffe260ca2255a6aa99dc38392a6ceb0fe24e6abb8c77b9343f29300ff5c814c01adfff3321923c";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+pigpen = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "107700bb0c2afd35755589551ca6bbd9a95ee6bec39e51868ea1b5fde4855a0ea2eb92b50105eb6a3490f82ed6f55c33cac25bbd58eeecb57fb80380095b7285";
+  sha512.doc = "48c6c4c26e7518f06233ce0da8898c1c722829adfad042c12b8820bb1bde43f25410c41f76c51f4d01035c9d654bf3ae8fc7bb44a4d2c23c52f3336ec7e7d128";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+pinlabel = {
+  revision = 24769;
+  stripPrefix = 0;
+  sha512.run = "56ed76be6c634b3c1fd3f83e12304d0d0e078e027754ac7619d680d2072ac7b67c527a4d23dda8feb6496e3808b3414bec65a48d4750d44405fa4574f122880c";
+  sha512.doc = "c56fad48b7cad065196cecdb64e501555d2a8f3ca098f001123215f8e21968cdec2da28f2a68f7e07ee9b1c2d961a82590aa136b15bdc87e9176462cd706b0a2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+pinoutikz = {
+  revision = 55966;
+  stripPrefix = 0;
+  sha512.run = "88ecb08a15725e4afbd296cc7eba16583cbe260989784e625eecf008441ac54ea53cba81801d77ab8439bc076c32d6c09d62305ef589d739ec1ed59e1f907755";
+  sha512.doc = "9fb1acfa981b7d38b312d089be9b9d5dad22334960133377b06910cb0df39c8e556ca86d5f9b959b27ef4c7fc2211b97507b138f026df58d439fe3ae9fd3f420";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.2";
+};
+pitex = {
+  revision = 24731;
+  stripPrefix = 0;
+  sha512.run = "dcc4280ef914ba66210ce471dc276042070b3246bc95ecb93b3d8af55393f49921a1d5e6851223299831344503dfc77fc2893f4cf1b78351dad40058979c20aa";
+  sha512.doc = "c3765f6acd4a147ffd2c216b1cda58e5e6ac8dc1202b444fe80d0dd69449b01df3eb17069842ef745e76e88371bf71c178d06c5ad2bc85e3427726bb30b74002";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+piton = {
+  revision = 69320;
+  stripPrefix = 0;
+  sha512.run = "95028768d96516ebd9b44abd790d47694716edc795bafed8ec8ddc54626792b0590295e87ee8d06740b50d42b2e4a00c326cc8ce737ff31b2f0d42130f8a57c5";
+  sha512.doc = "11825345e1017add9674e543d146dd151fb3d9dbcc228ec0660392a12e0baa7ec08f224d7024f059ca125f26e744e083369fb972c308173e17908b0d48ce2aa1";
+  sha512.source = "f29cdafeb5efbe3a0d927a68183687aaa6ac6f932a24d362af32827377de566f69c8721329546d07c1a1127da587b25fa3b649ffed0579056e88bf9e987bb7c6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3";
+};
+pittetd = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5bd78a90b4c7b9cfa8fbfad66e0de79d09762e06d3bb35a7aaa13ef8ba73aacaceafd8d5b5468de8fb59c6f4c76d364af145e101543c7ef2089dc9fe00e5e9db";
+  sha512.doc = "e72d325fbfd3159699621fd703fd539259d1b13ae69d00e771291e156e3ce6cc15a0d7e4d2e74a3ad3492c39c67adfdca5491b68dd6e8ac78ac1213400f091fe";
+  sha512.source = "fc1afca13fa1d4b6b0f77dcf693939be3d6423ebf15dc6354b955e1a02ea5655933470de740d0d626d718bd48b5f4dd1ed92263d8524d0ba38b2e4c328bbc135";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.618";
+};
+pixelart = {
+  revision = 66012;
+  stripPrefix = 0;
+  sha512.run = "0643246fbed81ac008f675b9cff8d3194f8eed02937816c41887ad84268850cab50e5c6a7c8df5148f04cbb43c6ab80d5fa4d960d541b42f505f95f554fa0602";
+  sha512.doc = "2823d82ac741954d19afcdf74a1b2071591a904183877ee54e8eb9a4dc2d63716f05bd1886691e87d36010fffb929e9d31aee05ec707a929a5fc74c01ed6077d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+pixelarttikz = {
+  revision = 68520;
+  stripPrefix = 0;
+  sha512.run = "c3aff99cc3027fc32f191f6a3329b397d23a11267e9fb89cec0bc5ceac875144375b3b16cdab42b471f16153cb75b21cb25cf38a74eb22c9ec0990f062245827";
+  sha512.doc = "e06e2dd718c81822b0701390d8df193ce68d491138e75e929ea0c75881466b4e190cc52cbb58d69e2f3619b1f2ee4ce8489ceff9a35170256d02057cab6b9483";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.2";
+};
+pkfix = {
+  revision = 26032;
+  sha512.run = "b4d374e5b771e131075ec59ef6713c6433cc3cefb6331a933e791c3774a9d54d6c8427d70a4aadb2c6326c3733abdb562ca103f0b6a9dbcafd87856d20b18a24";
+  sha512.doc = "c6819c63aa4cf7df5879a796e08299f2fa132e1244648d17a7fb0b3c28204b0641e56fe4661887c257ca4f5998786c31b1cae2aa64e3163340f08d02fda4c8d4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+pkfix-helper = {
+  revision = 56061;
+  sha512.run = "e5151d85d2db65f41b69320ad92611adcc8d211719aa06f39488ba75972f6bd4eda3a9ebd9f13e8889eb84451a640bbdbfd8862c95620304917cca3dcff4a194";
+  sha512.doc = "50103799bbfc18a728b6510f9cd3d9aa4cbafaebb1e68f2f3280b3a57efbdbf75ff68f36e72b4442e49bbb04801795250fb3e2d0728968e30c1e70fc5b7d15d0";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+pkfix-helper.binfiles = [
+  "pkfix-helper"
+];
+pkfix.binfiles = [
+  "pkfix"
+];
+pkgloader = {
+  revision = 47486;
+  stripPrefix = 0;
+  sha512.run = "2b9af06a79f484ce948b98d8ac09f3327a64e2299770ae6746d9762fc6b339d68aa3ad2abc5e67dc385bf4675cf406f170ef706fc101e87f6b58c839b6d3a3e2";
+  sha512.doc = "231038d0af3e7293cec5b5e3a9835b1ddfcb60d5c8006009998e5a04638e0ff818ed36abcb2326a56149af0884297059577a3437e9bb144264cf42feed055cb6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7.0";
+};
+pkuthss = {
+  revision = 64869;
+  stripPrefix = 0;
+  sha512.run = "766411cd122b6ee856834ab6b898f236509fd487f14421d4606fb46e628e5a8c9269321b373b8ec5b4ec12bbf13818770021c45b36202447b12eae68a80032f4";
+  sha512.doc = "6ce10aa1e91287f3ceae0ceca54a1a8d91428c84def873c3d59876c22dcb87d6d2a7ed9d0894be4f2adbee769398f0ce1139b55269badd773f9a881fecfa3476";
+  hasRunfiles = true;
+  license = [ "lppl13c" "bsd3" "publicDomain" ];
+  version = "1.9.3";
+};
+pl = {
+  revision = 58661;
+  stripPrefix = 0;
+  sha512.run = "bb0d16d92272c6233284fbcd94864c381ce60343e5b9ac23a04871a515f36c18d5eca92e7ad4f80b1335348f62baa703671984db2c85d5a35d84f725f699db9a";
+  sha512.doc = "efde952f17a904492b2c36e49801514b97ac5302b406beca7680a893051bc3821e70cdaad8d01dab479476298154c5ce2db99d43b04cf51cbcc5e16358c9b9f0";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.09a";
+};
+placeat = {
+  revision = 45145;
+  stripPrefix = 0;
+  sha512.run = "476dac5b149811659c663751478f9f224e209dd63954cb88baadcc94c70a4861673512e01c4a5f30097d242f56f1a6edbf4fc225f8b561e49a4e60b02020488e";
+  sha512.doc = "0fc82d9b448c85eb3d77a7943b9243720f41894f062d9723b3dd56f2d3e9cd8fcb87a3d57f387f1c87b3ea132fee2e0e08962d9044aa7c756f0db979f4c06a3c";
+  sha512.source = "c24fb52958d4bf39ea7925b1b68f2b2a5eea95c4c7bad8193d272111d6cc896b89e1b7ffd923a0e6fd9fd231dba3d1038a8730ae58b4ba059738da646e6b7bed";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1d1";
+};
+placeins = {
+  revision = 19848;
+  stripPrefix = 0;
+  sha512.run = "618eb33f1fce0b089fe111b083b0153c146e0d8abbcfc235a86dc6a698a2fad080f8ac38e04037e06b0e1e2782291ca6d01ae69922d181b26b4c809d6aba262a";
+  sha512.doc = "2ac2312083ae8abd3fe3f85da7dc65032a4c6bed4d1778c058120b48292f459d1b77d40e4eb6f0afaf88a5160d4fb0eb7f353ba1d93b7ec672f054e58de4d6f5";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.2";
+};
+placeins-plain = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ba143fda432b8ff9f96d48218ea3b3d29308db3a403c64af5f4a89b8305ff835481d9e0e77bff92530207359115f6a44b006cc58bce99c0f7d3924d1134ef60b";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.0";
+};
+plain = {
+  revision = 57963;
+  stripPrefix = 0;
+  sha512.run = "0010ad47f363ddad3a0433fbc48f4e39950eddab3d08e2eaa6d5eacdc620265d45b09ca23c48f92ac8bedf222f98095c4f91d424a27ef0e8e50ed6d673780c57";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+  version = "3.141592653";
+};
+plain-doc = {
+  revision = 28424;
+  stripPrefix = 0;
+  sha512.run = "bae58c957de52e1a45f91d8ea49579ea9c5b50b641331ae8d27146b6bbda1cf93e09abe58a011164ef99e5513cc32d346da7d693e975271e1892674aa5799406";
+  sha512.doc = "03f17a65680e4fedd76abf2ec46dbac4b7871c3106c74d3d7c7f200bd6124146b2f78848a3761eaf63b2c909eb5925b78441d73a48a4437ef496b8643777d847";
+  license = [ "publicDomain" ];
+};
+plainpkg = {
+  revision = 27765;
+  stripPrefix = 0;
+  sha512.run = "aa1158f3958013b133dd3f9308063543268181296274a40e2ca606c8e684105e89b79cd9bb45d225e14865ca0e998e0412e8edf8057445bde549f249a6d69b2e";
+  sha512.doc = "684b4f193f29336d5bd2c494c0c447cf0ac28090a156ae286437033e14507607582b3b9b40bc7b82fd92661a4bdd75f953e7c0b675f46418bb585b6a9492eaa1";
+  sha512.source = "44138ffb31ad8f78b0ab917302f48f0bbea871ef390c52b211ac25dd9c16f0687f02348c96682d89c9fdb5586b157c9d6d4ab3f404f40ab173835997ffe7c237";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4a";
+};
+plainyr = {
+  revision = 52783;
+  stripPrefix = 0;
+  sha512.run = "a42c5fc8c9a530f91d467ab3707fbec05f49764e85b906510f4605749c60bdda224a4ba23be85acd722f48b0958ed7184b4bfe88dc7c3fea4a64e70f9407afc6";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+plantslabels = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "7e1724b32035ee32325c491bce57ead23f40ad7377b4c1d5572499fef920b874bd57298e654429203cbea726b8d645a0899807547db80825be163538c1d91537";
+  sha512.doc = "999f132df73c15a7b3501487f350e48777543745c5cddbbaf314bcb62eca9b3ba41b51324b61d04e9f1d9cef4b9b8ab851d3528f8893bb21e612a7f50511da65";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+plantuml = {
+  revision = 67097;
+  stripPrefix = 0;
+  sha512.run = "97af8222b28309bd5d8ce5d083ab54bbf550b6327d463de8b481cf4a5f62c0c82b33718b5c95301204bfe8e4858039a0811f491d97c02079d723e66c3549c90b";
+  sha512.doc = "b76c635cd30ad2638619b1ded721d468eec92033206cda03cbb638b14be082de1360efd2048f2cb1ac787a4c9232416cd18a82ad7b261ec785468ffdc003b86c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.2";
+};
+plari = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "86e91b884be131df6b4da6441a9fbeb872e0f345eed49005ef74d58eb3ef8a2724da98cc810a51b58d45047d77545ac6b9512612b5946ba29d443dd14bbdb263";
+  sha512.doc = "befa46f8ef7c4c89e18339ececbd53341aa50d6bfc8927001d17395cba42db0f0ca3414619c746c78e4f5f4f9cb1f6db813defc7b89299f5b29e9c0866852c82";
+  sha512.source = "e03c7b5fe7406c447509d4ae841c13c579c608564f45b83e1fddb066248b53e46f83a2760d745db1a5acae08dff493686d667f0328c9c3d467df6a92d8304a5a";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+plates = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f662191f6a053585bbcf5a71635b6f63ee5d713086bd24f3c879f73868b5ab42b6434860b68408fcade7b7ba448845d1dd6a5be12b10bc25be8032b9dcef9615";
+  sha512.doc = "12779b285951d5e3d7a0f9d3ded736d5368291b678fd884262908897c4e32bd5fdbdd6bb4eeea59bf922555d5dc8daf6b0e06a174fba2605d4357dcf1f09c6d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+platex = {
+  revision = 67315;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "babel"
+    "cm"
+    "everyshi"
+    "firstaid"
+    "hyphen-base"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-base-dev"
+    "latex-firstaid-dev"
+    "latex-fonts"
+    "ptex"
+    "ptex-fonts"
+    "tex-ini-files"
+    "unicode-data"
+    "uptex"
+  ];
+  formats = [
+    {
+      name = "platex";
+      engine = "euptex";
+      options = "*platex.ini";
+      patterns = [ "language.dat" ];
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "ptex-fonts" "latex" ];
+    }
+    {
+      name = "platex-dev";
+      engine = "euptex";
+      options = "*platex.ini";
+      patterns = [ "language.dat" ];
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "ptex-fonts" "l3kernel" "latex-base-dev" "latex-firstaid-dev" ];
+    }
+  ];
+  sha512.run = "4a2682c51dc82e078ad14b30545dccd95f600ab02d5d05fb5c44c214221a3947562432783b43ea505b5199f37a1175a792c709282999f77b17b532d2a61c6e54";
+  sha512.doc = "faf91bdbc3e0d2ba0b13a914d54fbc4ce47e27c1225e5412b78c1217b2e3f6c22886a9f6f85b06e5e3f38a8b0c7a9aaadb4606721799749ae6ef5018f7bb08bc";
+  hasManpages = true;
+  sha512.source = "a1ba3fe817e5f4aa23c2c4c9b7397cdda6ecc889ee244a05fd7eeda59fba1baa02fd29820107c887982983b2115631f1aac7d19ae281f88779b3e99253b12036";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+platex-tools = {
+  revision = 66185;
+  stripPrefix = 0;
+  sha512.run = "87646f8cd885b75c3e7dc0edebc32675afe2d02f87c37ebf6abda7b68256f002440fd1a94f3f13dffbd8a7b694f3813d4115621f931b9a3a9d73491bda7c4296";
+  sha512.doc = "cf04b2c5d4df6d68bfdc3b0a3a8dc0f988cb0549252b3a6ccba58df685c41a9312197a63c97c3ff63c1ec15177a43d1e8064fd449054eed3df968fe213703552";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+platex.binfiles = [
+  "platex"
+  "platex-dev"
+];
+platexcheat = {
+  revision = 49557;
+  stripPrefix = 0;
+  sha512.run = "1409c7311eaa82811236d869b04e9f55fa2a96804faacef4820072a4813055e70ecce0e8c155ec19016f1ed4e57bebe0b362c5457d1258f317a40fc475d42aff";
+  sha512.doc = "bfe47b947a915099de15e5519a3aff201b327c31d29c1966d4fd3e9b73581792d918b461ed1944aaf5e8a5eb7956c38579a3fd972f189b1e3abb903c7c904cbe";
+  license = [ "mit" ];
+  version = "3.1";
+};
+plautopatch = {
+  revision = 64072;
+  stripPrefix = 0;
+  sha512.run = "1313cf815568dc385d5d1691bba7e57e246c45e71242acb94904ca0fe796940afb59bd3d07f728a9e407a9a0914b3890a7e7dc3c8bde3ddab7b36c3ed9ffcefd";
+  sha512.doc = "e4bcfbe263cd17dcefdc239f06f1287ff8d936f0a6b5ea89f914d7a4254e08040c076be0317f4e3cf2aa96542878e1c93fd3ad5b9633f4c3c3d85ee9d719f4d2";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "0.9q";
+};
+play = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "040468367a783e7bc49dd4b51e22a72c41ff2985a52e2551b3be6780767e17c8d11178f097cc66f5683033eb03cc2ebc2c08c1f4477daa7b8f9e22d8a40dd385";
+  sha512.doc = "97c882b12ab350c5b0fe066e04ea7c2c136b1dc7ca29e51d8f89ed695769c9ef1ed255c3c109ff71838bde91d25167a398230cd25809f1374ca306fbd9ae68fa";
+  sha512.source = "3bf9b5449611ce72af26a68c99a7ea813c7eebce59336d5c7bf65da1a870e6c26238f803ba8e07ee2a084826e6bee7ec819a919e7abbbbf11946f611cab17a03";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+playcards = {
+  revision = 67342;
+  stripPrefix = 0;
+  sha512.run = "3c7b076044328ceed3005de84d628d6d926f93c1d759982c2e37c8831093aa12c0dbff71f8b8bfdbd171dc545f313729c7c11086a3e529858086896bb64899f2";
+  sha512.doc = "396118759c2f02c709ede5e6b4be042d2348cc38ce4783fd9f612a6bca887f9237f86662b8ce84a78a6abbedc8e2ce9e2c61be2f2c818e262c693149b7125019";
+  hasRunfiles = true;
+  license = [ "lgpl3" ];
+  version = "0.2.1";
+};
+playfair = {
+  revision = 64857;
+  stripPrefix = 0;
+  sha512.run = "2c75ccda034c607fa67993922e498347cf8a708c31360ac63d8304ebcf538e2012529864c6c3102a63b0320db68101fddae021ec396efaf0396d4d609cd0d711";
+  sha512.doc = "006319162a3a7035955064d7ab99e704bf828cc7441a9c930cfccf4cb7e70ac52ff672de3ce8b415fbfb20f29a0b4c09703fe0e3715d15e38c1293973bd3a86a";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+plex = {
+  revision = 69154;
+  stripPrefix = 0;
+  sha512.run = "4180d4b5ff2d6843ac375a52bc3c63570638cc29f7d3bbda476dee962998293ce4b201817e056d5e87c20bd8280336b65bc689a8e1580ab8aa6f24164002732c";
+  sha512.doc = "175abcc07f213d5837070171b7fc483aec2c26b80f530ca7ad7a6f571de028c833e32d71a4c465fbfbb803afcba934e68df560944b8b54b20827d31cd21fa9f0";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+plex-otf = {
+  revision = 68238;
+  stripPrefix = 0;
+  sha512.run = "1dadbb3073ccdf40e496f89cdbd31af8ef37e810178eeb7aee49e9c1abdef42f28e58bf12988a59b9aee95384de842cae8a827e8ad8968c7ef37e8442e596d21";
+  sha512.doc = "226ddb9c201dabf158e0e9a5480995539d20d14ef34f5ea9498f9fe5966a1f7eaed00e1bac62fe17eeb710d0d3f68f9397fa568ee1a91076552130661dd6e3f7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.08a";
+};
+plimsoll = {
+  revision = 56605;
+  stripPrefix = 0;
+  sha512.run = "c0b44cf022ca470767d296af1ad80b2d5ede92adb22635f7ef34b9fa81ec523f769dfbfa6a78005a46bd9a4886507fa7b3a4f761bcb8f686dbf736e3ad92676e";
+  sha512.doc = "9ee880e89387986e228f357f59981b18fa8565d60e88d6f1b15c4109f9f7f20108c447fb995f0edaf64723ac37635b56cb5d097e93e0374a0f64adda4215eed5";
+  sha512.source = "2967c9b53daaeba02405da837050a53c69b725da8daeba1d6a9c58dbef0387628aa6dceb07815c5bb0d2cc37c6a1b66f5c64037ad33d74e1179dc3fc0f0431a5";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1";
+};
+plipsum = {
+  revision = 30353;
+  stripPrefix = 0;
+  sha512.run = "203b9cf56acbc53b2a3c195ba0a27728c93db91bd4be48441e61967fd0488cbc4ef96485ff0b567be64ddba798bb44308cb7cfabd2a2ac89d294203d93ff4d29";
+  sha512.doc = "6d5c77102abf42304f8480f74a073ba25b8cf317c3a6cf4c22af6035b17b07ac213866a10ead2a53d033b214e4a6d6e642d043d847e61fb165aa8a02ef90f7b3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.3";
+};
+plnfss = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0ae352953c5981b791379d9da9b61ad8837c22053f3371f351152078f4dce6b12615ed771987115cc094613ddeb0c275568e1d7404f321516418d218d9c68473";
+  sha512.doc = "9569a4f77dead68ad8c76794f03e6ffe147e1801324291fc13487b05051fcb7f307971e65edf66024c169411cee9b2940eb4daac4d073773e67f2f303b364870";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+plstmary = {
+  revision = 31088;
+  stripPrefix = 0;
+  sha512.run = "72d54627fd8a10215ae9fe417423c46240997f865da8b4f4b976290ded7fbb0360477db27f140bed0ceb4dfc57c42a23fe5ce780ec5eeebb9b3e30b372adfe9e";
+  sha512.doc = "6e5c425b7d484bbe187eef030fbc9d6a0ad50d6d8e22c5f08d3762cf8082b434de8a4c5d13251d90a016715c9a85aa82dd2637abb6e17a6973a08514baeef7fd";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.5c";
+};
+plweb = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1899a3498d10950f67d24d2d7bf0488cd8867bd862960fa892581137bb1fb3426dea9e193f8993ffa93df11684dbd1f25bc79a98489317998936ab4186e9a22d";
+  sha512.doc = "9a510c4fd534c9451863a47fb8fa3911cf5199b295b1e3e2739cfc37ca0351d28fa1876e5456cf05ac7cc05f9f60761578ba6d77841ca575908cf4f0c9f0e3bd";
+  sha512.source = "09039cddf52bb2080fa6f9dad964f267e43d04504dde81e010727f4957a4de0225b0e23c1cd9ce7222ee1ddbf0d6f1ed1405d0405cb849adda77d99086402d1f";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "3.0";
+};
+pm-isomath = {
+  revision = 60368;
+  stripPrefix = 0;
+  sha512.run = "89e11156c2a4b7d05fc3404b4badcbac94ed190db4c215e573c84cdbc8fd46c5775b19272e423df1806e8a38d61d8c071aca7d38380637c79f06c411a05ee468";
+  sha512.doc = "92366bb3963f1615de3cba205345d5d799fac04bf4935574868be140109756fe9a9a2d7cf7a685918018919ae2350e9ff717cd898fc0404205f21d56a359ebd0";
+  sha512.source = "fac0256323bf26f55e5908c718b8622f4996b2b792ec3770b1db4a31d91ccba84a8e21e839710e1d6305448044c5140fc38a4eab06954783e428dd94008d2fc4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.00";
+};
+pmboxdraw = {
+  revision = 53046;
+  stripPrefix = 0;
+  sha512.run = "d229b15e57fa76a9e8e9b903b5fbbb99d81d3c8a2b1818d71c103df7f2a1e9bcf79aa8396b6ab7a2ce054371d212375b968a4a5d572fa8686223baa8dccf4eff";
+  sha512.doc = "42a439f2f88235faf7302400432d49166861476cdc43708f84780d153bdcbcb55dea1a6b31cde2045d0b99d48c2a4f51ddae8bdee08937308c5de02e9b16a523";
+  sha512.source = "77220cba1cb61836f0be161566d1f177f2c503901b0fd4c0052dae81b457f59364596eaa4a32071b5c90623509f646ef3140f67e29a558b4910beb3a1d63cca6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+pmdraw = {
+  revision = 69366;
+  stripPrefix = 0;
+  sha512.run = "ab2b72364f2833ec7362d7284bfc10033e72c3f20c1b4f6ff7a89a8368bebd5aea2120c5cb82c27bf924fc1342030d83e61a8b4b0343aacadd09247890495325";
+  sha512.doc = "60a9292a2705281b8f32a2789b34e0dbc46cd8d475d7c946e00e8f0951b5cdd5a29cc145e0cc270ed87b52a23f819552081fd78f99fcd529aea57027d4d71b23";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+pmgraph = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b6e9f00789ad102b6cdcfb0fe48e5ca4f6976a7c207088c0c3e8b0c2d4fa376bbb932500d42133571a6e18747615c77eb6df2b4872ba86f853e3069ef198a671";
+  sha512.doc = "35f45f43c95264d4dbac5d12a71270fd15280f9008d204e12ab0a3bc6a62939e6de87233c94eeb7cf9627464d5f383c3d8c2cdeaed6eed9473a3e5fe380cc5e7";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+pmhanguljamo = {
+  revision = 66361;
+  stripPrefix = 0;
+  sha512.run = "099517421e9590597157121de5d53eccaae0784969288762ebd8e35a31eb12ce6d5466f890204bbb69d0d9c805c314b6a475653a1cb26ef270672683e2625a24";
+  sha512.doc = "12f324ea6c852b134868f4365a53c2f434adac235d01efdbdad0d5df138587acb28fa7324e10f5fc996c44f43289322bdbaf764107cea4e66d7f999b71807384";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+pmx = {
+  revision = 65926;
+  sha512.run = "433287732fbb2cb47886c6c78c923d5b6a1b5c1e71e3990084cde9bb288a282fff7fb9134a5165e0fc0908b8e60547e23cb900bc82b99717133d7600fa17dc31";
+  sha512.doc = "dedba4570b68a8628442716dc3a9b1699e5f531aef2737e4b3f47862a91ba69bda91d6fe6692914d2bd7b8fe3188a83fdfce8bdd219ab7c4f238a9c6ec273ffb";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "3.00";
+};
+pmx.binfiles = [
+  "pmxab"
+  "scor2prt"
+];
+pmxchords = {
+  revision = 39249;
+  sha512.run = "0a8f4a88834eb22d3f11ca567f37189af7834370530c6dbca4d83482e94cfb48b128bc1290e7f3ee718bffb4df445a300ddf5081805f88002f53bcf8b434bb3c";
+  sha512.doc = "d4075306620fa1ce037a37b9d2646d197348f6482e1286ff6fd99641a8b441b3d830a1420dbf6c025b8d11af78363b717a1acc7ea6b9e2954aa4f11ef04452ad";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "gpl2" ];
+  version = "2.0.2";
+};
+pmxchords.binfiles = [
+  "pmxchords"
+];
+pnas2009 = {
+  revision = 16287;
+  stripPrefix = 0;
+  sha512.run = "5e20303db90b2db63a3d6026db582026df8b9e910942303c952753d5dc27928ec70a8dc21edaf44cd57e04d25e93a87a5f28caa769a0425b47c78ea9d56ffa86";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+poemscol = {
+  revision = 56082;
+  stripPrefix = 0;
+  sha512.run = "e9bba80cd6fcd7b1e7b0e46fe594b3e25986dac5fe39d329ed4b8e15bc6b542e033a392abcad4e0c67d5401066703a1a89658ebc612d2adcf846de81b34fb78f";
+  sha512.doc = "e8e3ffc366be12ec5273c85a352a6c44ee22af072fdc9e63db390c0d3435e390c28ca83279a1a54f95af991890b7e47ba896612407ed605e229ec184cb1e5096";
+  sha512.source = "cbb9340d8241dc8616f997dd962fb913ac6d8d46241c55e37bd30fbea12cbe8f331d07268653c9100928b92a171245489685761e091b6d3e2b6be6558779b683";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1415926";
+};
+poetry = {
+  revision = 53129;
+  stripPrefix = 0;
+  sha512.run = "1f618b339fecd44d21029ff9ecfb95a97e47fd5d20089a2115d70c8336738c794e1c639c78a16b5756d591fbe3ad52576e3923f6f86245fcc9f7501008382eb6";
+  sha512.doc = "540a209251cebb31bdc87143fc8b60627a9296f488f58a81faaefb3c3cb66517e8a670e81b4363840cfa1220697d26517fc1bebedf43f62a4f1c18e3e14a8d65";
+  sha512.source = "59132d5d5deb62236ebdb4ec0335f3557cb4a99d4a5871ec40669801338f5f1b72fe3023a09160feabe2e0e1d2e1a78c8b803dc4d21c63cd3efafd4040224f9d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+poetrytex = {
+  revision = 68353;
+  stripPrefix = 0;
+  sha512.run = "f56937e0c18fcc1db0872ed27d3ab9497e42186552f5eb26015f7c28f1d38091544212767de088e8d94f6d1e15a5ab973bb1b4960f8d4633964ad9aa295e3b87";
+  sha512.doc = "3db45607b5d95695c3f54ab924912c39ed3c06d956374039656d2a2d3c25d1261541124d7a89ba05cf935ddc4b36b7cbf4c907d02a6b774748ae96d032b30d4b";
+  sha512.source = "8c43393c86bbd430b0e98695dcecf110a08c5f35f152c56aaf8fce946467803810ca87a3b81fea10302b5dd079d817e4874440c069fb466a2773a7c086af40d1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0.1";
+};
+poiretone = {
+  revision = 64856;
+  stripPrefix = 0;
+  sha512.run = "07e1479df1d89b568388a855236d997580cb76ca6ea8f45b55622425d10584037cec5e17a734c24a0eb0a9746966e94137026c37d4696b475e641806d07a7ef5";
+  sha512.doc = "c164f53258e08e74cade46f03f1e6d3d538a0f65cf3086629150c2741488bd33a82fca89d91bcbb83045d126defc3ee9493fc5e1d05e2c567464d4d29afc0cd9";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+polexpr = {
+  revision = 63337;
+  stripPrefix = 0;
+  sha512.run = "4d04a0a61b5f50c61eef41360aaec305b727e6d8686e8ef1742098a7980a6508e3455a8282a9cb0b4549d7dcd49cf065c49bbb7e710ca5120cb32567fd58fb8b";
+  sha512.doc = "d2477a275477b6e47461e769fbf43abfc746769582cc916eab153fb7ee19e85285561601169dea0335d0c525b79c5435ee2d44ba931739eb9d903a3f2e3b670f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8.7a";
+};
+polski = {
+  revision = 60322;
+  stripPrefix = 0;
+  deps = [
+    "hyphen-polish"
+    "pl"
+  ];
+  sha512.run = "24bdb98990f66e89085056e6ad3e0930dd16d0f4bbd07a2c9a49931796e143505276d2025fee21b2b52d927c3b2992d31f4edae4668cdb549f6f00ef43dc1c69";
+  sha512.doc = "755e7625d5ee1e4457e7ee518469d585c9c1e566c57bf147c62195555ae91dadb68f469127cb18a7c30cda1468129db09cb09b1974f5273d41c9491a6e1d5ffc";
+  sha512.source = "8e216956a95df02134cf411d170a75309c3f167a5bf7d78f77c4e47950c8a5da52e523e367f5ce60492fc0ab7cb205e9b57835b883225752731ca094d7c507b8";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.3.6";
+};
+poltawski = {
+  revision = 67718;
+  stripPrefix = 0;
+  sha512.run = "620708dd3f1d2d8b2601377486631c2bdc779d06d2016e1c9ab5869afe00cb88dcb1ebd055b6859ad3e3dd25200c1079b723613283f048c7cd7354977b66b8b9";
+  sha512.doc = "51067d3e930f9cae71d5cdf11d6ac83738e23539c020c93e6f4d8b460e63b04e77caaa41927ed8658056d96ff4fdcfc087e591be991e10c7e95a6b58d56ee368";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "1.101";
+};
+polyglossia = {
+  revision = 69093;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+    "filehook"
+    "fontspec"
+    "iftex"
+    "makecmds"
+    "xkeyval"
+  ];
+  sha512.run = "615880e38a7faa377698fe79ad6fffd16eeff067b95a6b70e459cfa68c530499e84e3bd040735f12a29349641f2f1ca2af270bb6ec884426b628bb7ebe491133";
+  sha512.doc = "8faec17cb9a8b3c30728a8b527794b1b58c9e8d26670e53433ecdaddaa341fdf8fa8f599e4cd5452ac854abf0f7b8d4216ea72af0148087e10460757af3602d5";
+  sha512.source = "73734000d3720ebdd98c31973e89b35636d3eecd3ffd7a5ecf5ab2650182f33da8dabcbca138b63e1f6472c003e36ebd9c8962921ee7c1825d5daea44f8f47d9";
+  hasRunfiles = true;
+  license = [ "mit" "lppl13c" "cc0" ];
+  version = "1.66";
+};
+polyhedra = {
+  revision = 68770;
+  stripPrefix = 0;
+  sha512.run = "26169961ab8e21114a4c44470da03fa510822b495f36afaad745c0324d45d5bd64e4e5587b7601fbb97156ba02ff18a2c253e175296f15f2fb3915f7bc15e060";
+  sha512.doc = "6a083101ebef3810467cfe377a820ff178e752c62655462153c661222da3c75034a1735a4a39d76e963fc6773441df423444d40e040f39d73dccb5adc6fbc34b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+polynom = {
+  revision = 44832;
+  stripPrefix = 0;
+  sha512.run = "bbff103f5828757f9c58c768ba46dcd9197629273b12d997e80e299dc1cf6a34e851fa4ebe088d131781eb6efc1fbd39cab602ba23b791c68fdb0e12f69440aa";
+  sha512.doc = "b0fdee90082414d88469ba5067f1c16279ddfc8c13627098bb3c2adfaded3c355cbb161193160fc5b9682d45a10216c56fe2613855528f9f4965479c681e6355";
+  sha512.source = "cf9dc9f13290bfd84e2956630eed115a132bcedfd34e6da076b2fa0fd4840fc5fabaf995b44f2a8f3c3d9ba9de851683a306271b272a83331a92fac367d82a57";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.19";
+};
+polynomial = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "46324509f078d9e83f4d94893454061636fd1148d5a2e9b59af640f617d82ba1d7397c7f7bb68ac99a83945354c875d3f29853e5ba38da59a2812f5f45ccacb1";
+  sha512.doc = "b570f3abf21a480e0bce2c08e44d97b488e9a0758d712cfde3ccbc45348eb95486c121662e296049220dd2802edb387651e839c2a819058111a2839049fc5964";
+  sha512.source = "db4c1d698b2a096ce6c848922beb747f70a874914d4ad1a468080c55ac0afbd89330c0665006f787c32c6c444ab601c64e7173ce9a5bd9241c1ba71582c0ea0f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+polytable = {
+  revision = 55837;
+  stripPrefix = 0;
+  sha512.run = "2ff55bb460357dc11b274ad3233e5ddd67fbfe05e60d25bcc69f1d06f9b0f247831cb5db4123b7ff859dfa88bd56fd5bdfc24aa992e98f5a17d0f883b40fcd2e";
+  sha512.doc = "5bdc4a4c8f95255343fccb6db79da434a6b883e0e2a769eac5c8accbb6343d3f5b8de2fd465c5e229ca0ac3e9964fbd96c50062440970921ebf70f01a3097943";
+  sha512.source = "dc5c2c007012a4a57a20b569adf784afef0db7b22ae88ac91f54bcab5f8a25a3dbde48a118ff5090d806d42954ea28276ed2adbddfd974972012a645805d9fc3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8.6";
+};
+poormanlog = {
+  revision = 63400;
+  stripPrefix = 0;
+  sha512.run = "e67561e7818e8ff9e02a43c02b8b992a26bef477176ce36eebaea37f56ea182bc9bedcfa56ffd8581b5d696698718d87f5319ac93d79032c4c27780ceb964851";
+  sha512.doc = "7d99c4036411bd892bc0a520a42c5e2a1c1077c89e58e1be8a9fc991b87da3d22871e75669c814358701d17add447a7e6546a33a8ada55f55ce0814296273f91";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.07";
+};
+postage = {
+  revision = 55920;
+  stripPrefix = 0;
+  sha512.run = "1b7ebc9b82ae1dc0a642892b6d74ef94ff0810ff3dda1628f741244dd17dc8d5013b42e2369c1dd6c27e65b965a1482814c62eaef582cd3bcb4c945fe0aa76da";
+  sha512.doc = "5f0d2dc0a4986509862b17af55f590f110b3dbdc697ed4cc704d31215945e224a0029087e04cc8602b059455447fa9214bede0aa63509958972c9dbe2cc4a0e9";
+  sha512.source = "68d0ae1488f2288b7b5ae3aba79ca877ce6f97e1134e61859a81c77bbed47c9b79d3eae07a6ce0bb5fb3645078fc67d2c6cd4a5baaad1460e09b4b34d3d597a4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+postcards = {
+  revision = 21641;
+  stripPrefix = 0;
+  sha512.run = "0e358697b47ee74afb9fb6bd339ea4a76457c78a76a37de6039ac44cd9ce1fc28a3866c42d988ccebf025d0e08c4c092a2b647cce4841662242f740f12297338";
+  sha512.doc = "936c1f923bea76aa323d2c8ce9949cea3364eeb1a145e735ff5bdf609de4c54cc78125392e9e3cc914180815bb9dd5bae63e50c0000b2143fe7de94c199bc50e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+poster-mac = {
+  revision = 18305;
+  stripPrefix = 0;
+  sha512.run = "f685c2c6d7d2795cf80702c0f8b4da6661a6d076dfbefeeeb071f21ffebd4420c7777681e550ed8ce05726a4392f526da42cecd6e3f26b5dc8ba775494589297";
+  sha512.doc = "d06f06a4432638ce7780923818cbe638edbb21f836566fb984353aff0bbfbe0905adfa39cc69fc59c87c9e6f7f2c3c268b7f2ef9a55a0f0a2bf0b5212d9e2124";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+postit = {
+  revision = 67344;
+  stripPrefix = 0;
+  sha512.run = "cb825667ddd1379b07870c388915abf36efa1249036795d3cd5ed7f41a87c046c00c7e292e542dad6a8b3b3090f327c5cff5e173220d49cc829f0fe206676aae";
+  sha512.doc = "2754e847a190afa3ac22166365a0ea12557d939fe4d2f06dc0c34a518da82dfbf7ab33c8ab1ddea5d3d95dae13c013f238abcabcf6444d956393fe61b00f4a6d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.3";
+};
+postnotes = {
+  revision = 69102;
+  stripPrefix = 0;
+  sha512.run = "a2b8a54ad8062e550af61a6f51d816d11891976525aeedc5267923665ea63967a388bde67dd2ad537b2c4d8fc3ffc738f05064d2fd26b0fbf7328eb806dfc0c0";
+  sha512.doc = "28537fd0437da707dfaa5dde2fdc92d11d4de5bdf99e8fc7655cc60533d8ed5bd5b9e1d680f0269b2d60e498fee577a3b069957c6a5ba41fc55dfc1631297853";
+  sha512.source = "b3050fd301f1a332622912a082dfffbb8ec4d172d4e7a808491f84b2ce7e494d16756a5ac7412cc5d1590d6a0f1ea5ec5a20bb7abb61b051e9f4a5179351d39d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.8";
+};
+powerdot = {
+  revision = 59272;
+  stripPrefix = 0;
+  sha512.run = "c8ab1d65e2ac0695cac0e8a0a683fe712ba51e8aa028316901e1ab6e31b0be68348066fcf290b03321c0bacbf5c0b16265b28022ef38137a3d89bd25aac58dd7";
+  sha512.doc = "99e602f4f96d6b805a8cb255d72f49c62e75543df2348471e31952a2588125724dfac07cd82865e9559220ef98a7b8847ab9ebd1ab803d5e155804f3669abe3b";
+  sha512.source = "cc32d07b304d6214fca1244823154290c68131111c2144592fb1b4134c59dcd0ab110542bcb64e7462c6959bff1bc9d1e2706bea66b0bed2abfde9c80255af4a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+powerdot-fuberlin = {
+  revision = 52922;
+  stripPrefix = 0;
+  sha512.run = "73026a8e853bb9141ef3d8915768ca07a9f5caba4e810cf08ab2f41b8c6ee42071065e347ecdc1da070686765591d5cca02a372bd256fc1f9871547a7e1657a2";
+  sha512.doc = "f2011b2d9362cdd1006714e71c3178b279cf764dc82f10ac31370d197de98a5131dec0c64bc17d4746a554396687e115e6880ae6940d902b34dbd91aa75ba308";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02a";
+};
+powerdot-tuliplab = {
+  revision = 47963;
+  stripPrefix = 0;
+  sha512.run = "91a8008d0675ea36676682d741ffad1e2f842ae37b47da628bade8391b2c775d7a756d31d5169e087ca0c4c0b0e958a2bb34d5143f905439e9572a6e72c4dbf2";
+  sha512.doc = "5805d79f125ad94bc0818f52d31e14d786f4f032e03a89a0ec8ae69433d56654b6acc864563e3273664576a59880bf86de81756f76cf9b920a21ca8331ce117c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+ppr-prv = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4bbd2404d9cb4bee9de81d463a6f4966e28409b07aa744e155f398f07e513dac4ad262fb3ac81717dafc9dd9abaed2789c08d0cbf0ce29137739886b2ad1dc74";
+  sha512.doc = "b8228988551d32a5d5b3ddfc59dde6af1f48aece8f5c0f8889fbe479db6c962d77b687fb5593079796393a255350dfc90965fac07e241d4f0a48027927065e67";
+  sha512.source = "cccb93596677625d323b0ceb6743fab15c4300f3baf09846054aae249608f61ab2a0a5bcfd9a7baa2b3a9ec86b2fb90aaee284608bb908229a918436c9acd772";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.13c";
+};
+ppt-slides = {
+  revision = 68764;
+  stripPrefix = 0;
+  deps = [
+    "crumbs"
+    "enumitem"
+    "hyperref"
+    "pagecolor"
+    "pgf"
+    "pgfopts"
+    "qrcode"
+    "seqsplit"
+    "tikzpagenodes"
+    "tools"
+    "varwidth"
+    "xcolor"
+  ];
+  sha512.run = "6b4748adc7f9823f7ff3dce2a73c4535085974a9f7cda33b53a934acd3399e310a85dbdf367102f71c310b8678119d3396f71f36e3e26063569a85af0c77595c";
+  sha512.doc = "e258319f37ef32ce20ec72e055755ce1782e2133a98fdfaeee6402c404df02e1c60ef9fbdaff39306da947534b6bd79fd16c2b82d4a635325ad8c94858b4cbea";
+  sha512.source = "a5f1384b3d4fd1e33e924b2bc51498c509772136bac0c03abab8125ab5ef0720f5583ffb9236ce9a044bb87127e0f42ae6668c4fd2b0b98f07e32ded13ce619b";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.3.0";
+};
+pracjourn = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "ad416756dca8491f2920d13b8374157bf1b49f236cf2ce1f66d6415c8de7282801645f5cedc31f2652304b1133f787a32ca4afa9f0e65a8bd5cbde956e54b82d";
+  sha512.doc = "2cc3efac5b128bc6873034fc451124cbb9d6c4040d9d1c1053367aa99d57687eff642cc55a52d833732cfe88c5e139c67998020ae220a1657744140745ffec30";
+  sha512.source = "819dcb9329ec553889d50646b7ac4ec52e2d82b329ad48d6b1dd391a7f575115c49c317497ebd32237c3925741cc6f7d497851bc5fd938d3f8e7341a05150d21";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.4n";
+};
+practicalreports = {
+  revision = 52312;
+  stripPrefix = 0;
+  sha512.run = "71b180b863f5405c145fde98bcae5942ed186de52654dabda4ef1a859ea292e6c2e6f1a29fa4c4320f2f9a442699844d4268fddf0200281c0f1a7477b49d9f5b";
+  sha512.doc = "48159a00f0c64c6a05e56d9c01b1e7c1fcc8342df3f762775c33377d45b0621e0e933db3097a5d489ddefeed1e0c155893e99ebf98c98fdd11df9b33e05e113c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.3";
+};
+precattl = {
+  revision = 63967;
+  stripPrefix = 0;
+  sha512.run = "35ce5ceaa53d3edc0fa92c8d9e5979255fa94bfa6818f8100b29f6fddda22f947c0fd2899efa5b4c72bb124fa5edd4f25b512460e7d370068eeff3d0ae0cfd2d";
+  sha512.doc = "869b3ccb9aa47107b759fbaab3980168332d51eb07e4fc77f5fa31056f1260e5d89ed54e4a3329afeb828445dec17e43df899358e7880ebe364705006a3571ab";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.0";
+};
+prelim2e = {
+  revision = 57000;
+  stripPrefix = 0;
+  sha512.run = "9f9fa79056db5be108c3b34b2ad61d964ba35fc1b6f7e9375c9e2ccbf66cd2028ef9e6689751c90c9ca236719ed1a001ae26753305fa3454bd88650cb12ae82c";
+  sha512.doc = "196640bfbf73f3f269f5b27f024f4c1e677b61b6cc452d796f025196786c166f60bd2f41ad83ac6cc6b9eca56778a07b77af05fc68f05330f14c92cf391bbbc2";
+  sha512.source = "1f2629a45183a026fe7bb3c83baa96ccf437846f902b5075fc210e47b6e3b99e81e5983bdcf617ba7bcdea60851154cb70bee3abe227420b5cc3c5a65e631973";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.00";
+};
+preprint = {
+  revision = 30447;
+  stripPrefix = 0;
+  sha512.run = "66ef40f1f9bc1ef3348923e781ad92dd0174b9c45e16c97662f30971a449dd74580391e1f23fed031a41995e65ff90a6785328de0372cea53e3ce946da469d60";
+  sha512.doc = "b5e5fa40832249c5a0faa24c26e8b3a2a73036ef007dd3a61adb6a7989926c80e018fba52a66078c3d7b39e76901cc041ebcb9985ff29b53ade2c057abaf1376";
+  sha512.source = "a7fe23d21dfee4071285ac0ca77a0b8936e8c149b804e9fc19e42cb5fa5eeac23ef3ed59e0433a965ec6203a1b031d2a76975248e624a6452e8fe6ea016be1c9";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2011";
+};
+prerex = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "4238f65f9ef42d218f092bc436fbbe95ddcbcee44a9032b74020a989696db3ce1481460162171f5feeb16f7507a41643443429afb8000d5bea0d7bf16e8dee96";
+  sha512.doc = "af17b95e20638fecfe6d431cc320b6d3207dd739779636206899d7bf39c26018718521dabf76adab33db28f975e99d2b2dcd9b13a164dc24927d2017e947bdba";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2" "lppl13c" ];
+};
+present = {
+  revision = 50048;
+  stripPrefix = 0;
+  sha512.run = "b22c0bb6803ebed5cd26aca4a9b55f2c7b506cc7e8910346a07437d60007310a3d2e3549040ffb2616df7f173279342f2334100aab14b589d0cc9e710ea89369";
+  sha512.doc = "e43a5de9c4bcf9281416963a898e350ba0a0b2d1cad92cbc97d99e2ee9d25f8407a09f024ec5d03a43fd3eee58e1c40bf99ebfff13913bbf85465588b4cf9710";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2.1";
+};
+pressrelease = {
+  revision = 35147;
+  stripPrefix = 0;
+  sha512.run = "0f983d4f836c03ede4ed6bd8c2c41dc69ad75a28d9006ff7ab534c6e483e84e2151bfd93fefa43ca327fbeec14787b43205457a9cf1e733f8a4c3a7c561498fc";
+  sha512.doc = "f107b506ba50ba8ed1b655f13049210ec4b90620348ac708afbba4d992470dd5aa8eabe84e2c0b926a55afce49e0a2cee28ecb3877550fe81099f7e5b40e9f40";
+  sha512.source = "57e94723413ce6fbb1405dacce4af0ab9f7b5e5fc9d091fcf3054fe9505cfda885ebf00b3242ad341325d982d223438e1a2b6cd1f9286cbf5621feb5ae9b1a2f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+prettyref = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "06e3ee942b9a30ff866abf8f6a46b6960321c0aaf2516ce48f587a55ffcb66f158887cbb9a476bc6323e90edd22766fec19d0cfcc2be8805eedd175fdf08ef42";
+  sha512.doc = "abcd8cb7e7ab78511d953d95699060581844dda67b3489317057782d97388f7cba990735b395e9563e15fd1fee137a86e8198d2d545f437a2d105bfd3e95bc12";
+  sha512.source = "d4793c0cec0e56a74d05c08547b68a83e5af33464b3c29a50189696c4d000ffff370422192a289a734e42cb4ef6bf2b95866523f3d6257961608e95f13dfb87e";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "3.0";
+};
+prettytok = {
+  revision = 66884;
+  stripPrefix = 0;
+  deps = [
+    "filecontentsdef"
+    "l3kernel"
+    "precattl"
+  ];
+  sha512.run = "d08eacff02fadea3aeaabecd957c4e32881de942a3199bad1bf9e8fd80639ace3d819f9a7ef875c77fbc95eb8e79281ee7bd93ed0f113f9058aad592c70422c2";
+  sha512.doc = "c0fbd26422e6399ccc4aed70e3e8dba976447161d008d440728fee07443caf35845c28acd86af860e9782a171e3e48a6e1e9a92c6ca44d8d7433c561408831f7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.0";
+};
+preview = {
+  revision = 66924;
+  stripPrefix = 0;
+  sha512.run = "6dd19a259a74447d597edce7e810aa90e01617d60533da9a381ae1929ded559e95509d9b7f0d62b83c08d3622225aeebb9772d6bd47b1c0155b9d1c68e48939b";
+  sha512.doc = "1c0e5e64a10372093ffbb4027a8edb6d7e42d1fc55d37ff695b7c19062a1403c00058fe0471eb56e9bb912e6cfdc13d3e46687dbd55f1efa58095d73f28b059f";
+  sha512.source = "01fee5b5367e15dfd4d9ea156b66455efa8c86c39ff49041c8fc9636ff79eae24e0c764673a75ce5050be81e9ac8ca3ad6fa2ad50fa7953f6a51292f1605b24f";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "13.2";
+};
+prftree = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "d73717b68ce3d12108a76a3850f3a09b9e1100969e79c745b7b08340175ea9599f10f928809fcdbf8ffbece3a60baa41d84dae182ace8b85ff511082f1db70d4";
+  sha512.doc = "3b4d81db24039d15e76e0b237ecae6454d54b452b542e26ba8e0c45faf4f512124f0c1d1f5fef3ca6e6dcb3c7cc09eead3003a53a59a689e5e917583585c045e";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.6";
+};
+principia = {
+  revision = 66625;
+  stripPrefix = 0;
+  sha512.run = "ef88cb4dd25ec8cd3d50a7f152698e771c8b5f1fa18adad21d55bcd3a8088a38b09eb19873c6a3d1883101d27f318bc092c9c1219a2be76bbc07bfd2eee9711b";
+  sha512.doc = "8dbf4e19a3c688278c52299731ca24fef83d08886a179f15cbc58038fe92d5ddd6e57bce1451a0af686593f98adf9ed3f52ef0b20cd68f65df52b8b6a2576dc3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+printlen = {
+  revision = 19847;
+  stripPrefix = 0;
+  sha512.run = "bbb48c169f31a1f93024195056c323ce67afa1fcc00f309ef1b820dd40e0b86ca98d05f6cd4af66379682813a3807f24295a803fdc91d8b9f19972e1520d5eaf";
+  sha512.doc = "25d00eec6c6bd069675cf7d980886b12444e41d18a83ed8e650923d839da8dca21dff65b110105458767b95c50b52a0143b2f7d88b6567ab3aa9953f4ec32a88";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+proba = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "33ef76474e7183c32b5f982347ed414ae7616484ff5a5d8564574220d3757688a3a47aad000c5b0a66a39dbbef20c789dd1445d872b025c274585248176c86e7";
+  sha512.doc = "960887501b74d2c5e8a00c09464ff17dc9c733dd663fb35c32b34bd8b79b2a813536b6c0f9c5df4340dbd3adf1f30f569aac678e90d5f328e1c33130767fdf21";
+  sha512.source = "d1305e797d8884f264a20df021b6b0619cee1df1aba8943f5533c2cd839e093420e43ebd1aa46282457a650569a883f4f11a9319f6b6612dbec5b99d29f37087";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+probsoln = {
+  revision = 44783;
+  stripPrefix = 0;
+  sha512.run = "f0c63a327569410af7eefa9f87fed56a6a2db78b05133c417afd245958a7f10dac965270fe00e7fe5de6ddfcc4a1cec446df819728e76ad347c7664fcfe849ec";
+  sha512.doc = "c79babc397260f03e2ad66556230966d1af97bbd5703c25cd09ff3aaad48b49d464672c501df047cf5226370b80588705c59212e75d0d1970337fd446d86e70e";
+  sha512.source = "53ce8efe56938c3e16da53bb1255d86b1ae9cc546cbf4983156c098ac07f1e7c16a998a7dc53fd445efa9f42a6b82889e50c188aa57a72aa9186177fbd744f5d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.05";
+};
+prociagssymp = {
+  revision = 63242;
+  stripPrefix = 0;
+  sha512.run = "f85716931c9fb7ac695db838d5e76160c485dac5f5f6a8f1c27cb7e375d78b385dce513103fdef30eca238fed78734661e192d712e74d948fbce0ccd209a1066";
+  sha512.doc = "9d7e118fb0b704649176bb51f523d8a64ed11fb8e58cd1cafc7ffe3f4ad5005366cf518df9d7a4577b600524e19f089a4086d46f946668e82a1272b28c750f8f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+prodint = {
+  revision = 21893;
+  stripPrefix = 0;
+  sha512.run = "ab2b0ababfad124b38b018c7313df0114c36fed0dbbaa42de04295b09142740ef43f34c4c6ad926c97c1ce28521c1d87274486588609197c2178b631b4ee6876";
+  sha512.doc = "addad035cb9e7b88d9da2bf161723db51897342872dd6c671695bb7bb0a6a4c7bac872ce40f31b22f5fdd84cc03994562a6f78f14d9203977d5b7c8d17130db8";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+};
+productbox = {
+  revision = 20886;
+  stripPrefix = 0;
+  sha512.run = "9b243f6558dd449ddb9d9190ea53a71ed5b28d25f5fddc64eddb194144aa688e8d8e946c53f115d40813d0933b77d5d2c78023f24a1887d8eeb70e6c1ad0bc1d";
+  sha512.doc = "73f8e1afbbfd9d4047120280e746ae1349225dfa84b98b288e23f477d2eb83310271610d6f4e40cdeb0d124788a97c1f8aaeb182a03cf2b1311e286f7299aa45";
+  sha512.source = "064e591694d0c7f6c9c981ef4038175cdb1fc9a120daaf954051dc05bb6b602bc7fdbf961a25d5cc490380028564316adf5714a151e4606aca31d1f4bca09a54";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.1";
+};
+profcollege = {
+  revision = 69343;
+  stripPrefix = 0;
+  sha512.run = "eb75b12f184b7e3f5ecf333a376b8d59ddbea8a0cba86c9b553074686c354394f10de5b3187b85fd43f458495dbf72c9f0cce7c98d5824c33f485605dd064e7f";
+  sha512.doc = "3976a1a95c47db9bf270f7730b8abd98d82356fdea0897e797d71a8b688c83a7ee122ddb59cc6f34b05d603d3611169bc5afb45c32a4568262b8f0c299b73965";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.99-z-y";
+};
+proflabo = {
+  revision = 63147;
+  stripPrefix = 0;
+  sha512.run = "7270b65b821c303e84eec760126ad421dd65fbb5ff81309142690f8820c4865c3b1ff39b22b2cf700a10920b973e18085a1e73ea3f6c9d90da984d48a19bbca7";
+  sha512.doc = "567ba9cd2d7eb724fd4ab20ec417f6804a795ff506bf8df582df9d7ace7ef2c5a8f95b46ff374391fed44918c6a536f6b14348ea3e0f3ff149fbe4fdafba9fa8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+proflycee = {
+  revision = 69386;
+  stripPrefix = 0;
+  sha512.run = "66d28a0ee9a4aa7b29fc31cfedb7dc95906cc82970a9a78fc5fd3cd95558721ffc01ac58cf74c2b761fe47779aee5349e05e64e3b0d71cf1ce76dff813724bff";
+  sha512.doc = "ea3821c1b94f71cd691cb78c46b78f4d607b489cdf1be6432caf7346505a008f887e0c9e895242adc23bcade67f9187a6b3cefb241322682141adc354db53f03";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.01e";
+};
+profmaquette = {
+  revision = 69287;
+  stripPrefix = 0;
+  sha512.run = "9fcb9729d28a2f41341f3b4f807d7207e33ab9bed43e44676dfa884ac9cf943fa84fb363a5453611c828e1b0b0f0bd795972b52ec736ef5213deebb7fbe42028";
+  sha512.doc = "7888eeeee9882c049977e96a9dfa65e50d90014e9c442b36cccc08fc95d392c78b25feb3bfaa1844a282b5bbe24bf6a4df1fd1d3d0bf477d28fd16ead0b61065";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.85";
+};
+profsio = {
+  revision = 69125;
+  stripPrefix = 0;
+  sha512.run = "01f1aa3951194f5bdedf6c3c44445b1f628a6abd633fcfdc5dcf01f8777ec50b28367a4deb0c303b41983881c255ab21e3916dbe03c1c926f7f2df6be119fdb2";
+  sha512.doc = "f6c650c6d4977df846a62a697fc1b4e82ac541b68db55ec15a0370be2f7b06e8e45e0c8abb81d5573d4ac2dc868cf63b5b19b65de7025afd4f5f69a6cf516b99";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.9";
+};
+program = {
+  revision = 44214;
+  stripPrefix = 0;
+  sha512.run = "a9ef7d68ad86b42657681e2b798899b5c7c472c5e272a9098a1424a35a109dc4a946be54c4007db73edb861cb475f293e404cee9fa0dca8cdf086eb6c4790319";
+  sha512.doc = "4213b5bc9cd6b2604bf1c667dd123729c0674d1c74338ebeb86b1551af14be3e24c4e94b4e5cc2c06a25ebf934d56eb6d3b5ce80e452798ea02fbb0ac6533580";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "3.3.14";
+};
+progress = {
+  revision = 19519;
+  stripPrefix = 0;
+  sha512.run = "df21ec7e4adc36a420959550376fff5b8a55fb7dccc064476b2306226c1776fb2075994d9ae63bd5bde0b68571671bacadf9285f53bc9e639c2afd59e5b6814e";
+  sha512.doc = "e88280bb1a93d34dd5597627d763d1b2a21a56990ede2e029246dac84f3bb22e05a08a9a94c0790a9c8a87698684816ace02149562785cf36f2b6af82f89c130";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+progressbar = {
+  revision = 33822;
+  stripPrefix = 0;
+  sha512.run = "d12161aa891ea45cec2a4511c48a1c338de5acd512e426a24988b79b7d9d1734479a1cd93e3e8ee11da67858d97260b71ca35a3a7a3dbbcd2bae746221a7bafa";
+  sha512.doc = "a60ee29da0517d6769e09f12af7b600284f32478aef1d28cdf167610c45bd87f841500c2bf718ff9b6678a171f3138f4a7a6ac45bd41500510f509e8e7067efd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0b-4";
+};
+projlib = {
+  revision = 68784;
+  stripPrefix = 0;
+  deps = [
+    "create-theorem"
+  ];
+  sha512.run = "0966ec8d951d6b060e901624e6137a60e1dfa6cba8599102bf7aa16f4caca5ebf4c234f6abd0a71cf8e54f6a3573151c406f5ee5d541c78517c64aba853bcdcd";
+  sha512.doc = "89edeb895c63c96ab12d27498c92c29194a4edb11f92292b072738fed7eaa766ed86382c0ba26eaf9038d7ad405628cf5fd21ff67ab3405883eafe1529899182";
+  sha512.source = "5320ae1610e4c0372bcce855f633c43ed64e928bd770b013ac656dea33c77bdd93ad75e578b71f66996973f365032e9ff20c05589ade56e02e88b244578965a8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+proof-at-the-end = {
+  revision = 64188;
+  stripPrefix = 0;
+  sha512.run = "0098bbd42c5dcd8f7e8d30f25682a17bf68845a7859752ba5b397020363914610691248809f27fa78db77d655d7719958f2d438c18913fba859f80e5b7525a2b";
+  sha512.doc = "5b1ddf5826a0a1c092ad2a155384ede256ee38f52315c2490b9829104fa2fb51f0e4b5ceb7d9e9040dbebcd6c3b0b8cda9d166377c1627e540ebc91fa96e64a1";
+  sha512.source = "c40a7912ea5352227557b9be51a06af4ff19f9239f146c23e96f4a9c134b58fa5274f90d8f726197cab40db523988bdf566181df78a3fff16ab17102e1e9636d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+proofread = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "79787978d7888ba127b9b72ea38f0f3e7ef9d427cf8e493120849cf7c2852ffe79b5fbf349160bac419be0725a9d79f33a00c13d6b3eded2cf0600b7d0994513";
+  sha512.doc = "e33aa6e720a22bebe6f64d90b00bc4e01b0892ae66c5f9c4dc8758e6494fe2bbb9ba84df442471b9db652223fd3e7f40fae486f09c7500095f7a2d1cb2280b3a";
+  sha512.source = "b1b334a3bc3dc61dad0eb071a1c5dc3595cb9231a3b7e50856bf0d5c50a4ecf188f5efbaf7a0065ad51341c2408cbf3d81a6e7c473bbd003289cca02d1962f46";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.04";
+};
+prooftrees = {
+  revision = 67399;
+  stripPrefix = 0;
+  sha512.run = "ee4feb832296a512e180b4d38e5989a87d6884c3c84ea2b224754201e42fe2fb6c4f68461a0cf3d3cda10b263c88c6da9e082572093f53ce2e8c62473d4707a5";
+  sha512.doc = "67cbbd3068410bf152d54c2f25821b5672c33b68e76fc7ebe02f0df160cc658b20e072379035f090beb34a7d4d5ca21809965bd8e44a554e5ae65039a12f4850";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8_svn_9582";
+};
+properties = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3bde5cf132c9013bcbb0eef439e61725ea41a09720f98bb53f8bbf39d56d6cde34ed1613b001a86b40221a36233b1d5c226819c94b41d49211065e1477a0bd42";
+  sha512.doc = "eff6b91e8fdd7b0a6b0526c7dd2243e32586a5ce12071130f388a911fa34cbac4681d4118b601b9eb979a272bf89b82f00f8ba509fa996521e8a2861f8e84a80";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+proposal = {
+  revision = 40538;
+  stripPrefix = 0;
+  sha512.run = "d9a352995030efd57ecd46028147a6326ede0695545194a01846d4a3e2d29096ace9e6f69900766906f3ecfa05ce566ebd1c2c5f76a3b2b2646c1e0f865093ba";
+  sha512.doc = "53c1d47f2f42c9ceed73f350c2aff9b229d6dc8dfde9e3fb8109971905c5d6430ca52d72551d540f5a1727a767d6cf485d8bca2489f301edfbf964490ecfb5a2";
+  sha512.source = "39ec30b5c0d94a2beb6d83d796ed13ca95b5e0045edc8e7828f5528e44e9f24350fceef93ec2c3bf9cdbf3766d7ddb0b72d6e10a909a6fc92e393681d425d8b4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+prosper = {
+  revision = 33033;
+  stripPrefix = 0;
+  sha512.run = "bf2285803a71b00c67a9e64ca5e51bdd880856338b0bf3e95bfb2ff2e78d5cdd0617424ed95918b5982d5befa71476b89567b2107eb0c206f9a9f53966a983b6";
+  sha512.doc = "21593ccdc8231e37f0b2938d3978205ab3ed61f74a6e8a4b1dd2cf82da552bd920a7711c025964fdab5661207cbea1aee04244c93552e20d10df338c7dc5c138";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0h";
+};
+protex = {
+  revision = 41633;
+  stripPrefix = 0;
+  sha512.run = "be8ea34f282fdd739f72f9b33375bec3be5055bc953c7a441d769ac1e7568af9327ae6030f67a805188dbd485ee8223936921590ec86269e371da6d3ee353afe";
+  sha512.doc = "95746823c32526fb5e2c9968749a7da2149d23c2ec9f1ced2a655a4fe54ad272bb414abd0be0d78775b0ac95e6440d9b6ead609de7615dcceb0186e4683e4138";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+protocol = {
+  revision = 25562;
+  stripPrefix = 0;
+  sha512.run = "e9555a25b0051592bd700df5b7335ad07eff024efd1efc4ef620fe7ad37866aa1edc8f354a7c772b3a298935bcffa9b5b2b49c2b0a14c868ae744cb9165bfd19";
+  sha512.doc = "f047068c0b9176087cd56530c9b73d30bbffb0d4b958cefae39f1f3bc924fbe705e81b5c867735715566b674379d1731e1d58b123dbbda3686a2b84f42674338";
+  sha512.source = "f41e90e822d9cffd941a9be8b918f5817c5757c2911a3c2162899d9e074390fc4500d8617e385f5edada4c2accf5a08421cab6192505721deefb4b1ceba136e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.13";
+};
+prtec = {
+  revision = 51919;
+  stripPrefix = 0;
+  sha512.run = "06e946526f194e36b55c91c46615c74a255411ff3de2fba005a672741830a5bfc162be122a7f03d00374917ab70dd789549a2976280db8c8106999ab7e0854e4";
+  sha512.doc = "fb299846eca43fb054ff441c2eed6f87382cbb58419947092d04bfa99102e3db7a8395c9b974395b579f6b5700f55c2c730c162bcd19e5246fbc64b80acf5681";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.06";
+};
+przechlewski-book = {
+  revision = 23552;
+  stripPrefix = 0;
+  sha512.run = "18b9546576957553b477a1c5a90e6780770f18d6aced92b17017c44770b6bfa9c3cf928500a9e56c6c67f45d375bc12ad8ebc97eb1589f3cf7b5b3ed2f7b55c6";
+  sha512.doc = "0441621561c2c4208d083f84eaf47573de94248cc1aaf027061de636c1a65f35a307260eaf390257bd02acac34b42963f96030ee27c83650deb11234edec89bf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ps2eps = {
+  revision = 62856;
+  sha512.run = "c43ba33d29d5b23ece2add44310b89036d5c4725ad76da1ed6e17bb93d0e7d103549f4a7e7807f89cdffcb19a95e0df2fe7851989b8a3b691aacfebfd41044ae";
+  sha512.doc = "0194c8634c5d31cf441fb3d7fa171d85358db9831c03cc77bac37272ddfed81d8296e9b05eb4daa7c8012f3bad1a01625aeacb2232989969551e01a92912c409";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.70";
+};
+ps2eps.binfiles = [
+  "bbox"
+  "ps2eps"
+];
+ps2pk = {
+  revision = 66186;
+  sha512.run = "764e6dc186bc0e9c1b5ee0a3c5a256e9d42d81645477bba49c59baafec55bc9af63124f77227ca5b6516bf3fa2bdb8d201af813cff09ac9da4574e70351922ce";
+  sha512.doc = "032c5ab3442cf668d6b40851bdf710b4e4b9eca701bf04c87359c579a5fce52bedea15ee5dc9e4c5967fcc0e3b84805450987b73c204e0df4708b65a7cf74c13";
+  hasManpages = true;
+  license = [ "free" ];
+};
+ps2pk.binfiles = [
+  "mag"
+  "pfb2pfa"
+  "pk2bm"
+  "ps2pk"
+];
+psbao = {
+  revision = 55013;
+  stripPrefix = 0;
+  sha512.run = "eb391c615ed622d928725b3a227ce0141e75ccb49a0e2e915d41bf12e343a9622d9032c4c3d6935cdf6e36c6afb4d3138d5acf17febe4691fa6e5c34da01c2b8";
+  sha512.doc = "8fedc9f84eb5f640ff9644c933b5eea71c1d4f9e03f861ca7e8820a582cb31f38e3a9e4625fb1b28ff189f02b3546734eb71e1491f63d4508d3d7b5f7ac635f4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pseudo = {
+  revision = 66638;
+  stripPrefix = 0;
+  sha512.run = "223e02f58f4b1cb137241a273cc6aec3c2923ea49bc74fcc220df449d01e6b3009ac6303a99a5d368ab3cee62d6542707feddeee30f527c2be1ad8771244ca85";
+  sha512.doc = "573b023b0d9604ecc98b774f77016fcb971c7c5dd508fd272169ad5d3da9f5273d78c07801257cad5c1461de2ee425f036afdbc827ae343e9ae151a63c86db73";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.2.3";
+};
+pseudocode = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "8335336bb46c0bc362bb10b6bed547d95230a29ba8144549476ec984323bc79475b11afef91409761e4f651dc4c28669639106d14c4dcceef7f90290e5f77b12";
+  sha512.doc = "ad53ed572d7d79caa21baa8c34482ca6032369824967e2966479e85a95d140a6477acf0e69ca7bc2d6dda6f8b161253b1afd43cc53ce4d44641dda64d82abe13";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+psfrag = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "71bf5c02e7a8a17eaa891f15c88777dcbbfc3ecf8b4a72dea49683f061bc86427ab813dbac5f5b8ab4742edcb92cd32d510675a80b0b3cdff2dc2cf127ee89fa";
+  sha512.doc = "072210deb2635a2032f6ac2d100ef72aa4471f69dec03fbb25fbb0d78b89aa2df0972b244d4335e8ed16e1a5f0cb8e04d22ad44dd5740fda59f9a4e5300befaa";
+  sha512.source = "fd02b807b47f3818545e48825ddb11d188e9e3fa384b0f3412bb09051daedf73c2587a74d70aeda472047c1eac039252a25cacbf74a3c8df76be13a2644372de";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "3.04";
+};
+psfrag-italian = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4d26f0191ffbbe7fa6a9aae1ece6e72739925b59a1a1db5ad3cbe8f2b3ece92ec8265f008e91fcabfe2e04863300db833eff3104486e9c33985ce5c7f8dd7543";
+  sha512.doc = "7a513ff265d259adfbaee9ffb47856602004f19679dad1316f04d36848f2e22bff8c3164ba9b045e7a4a57df76c2ad17b071a9cac68d4b92cff57a29f1e99f55";
+  license = [ "gpl1Only" ];
+};
+psfragx = {
+  revision = 26243;
+  stripPrefix = 0;
+  sha512.run = "b02063b8c1df58133b951eb10763d3b9099376a473dc980fef801ab565326ac1c5539be3ee94ee5c79837c1e6265cf41d6554f66e8900df2663d5d7e727e0df6";
+  sha512.doc = "863df965aa6abb99c115b06ed7d1b1660345e9bca0d0f5d62b6a7ffb55391688a92114edae7bd28ef8b715515c8bcf3c5b4fb4970cc1b6bd9cc068b09595cb10";
+  sha512.source = "f38ac5c21c7f366e952e71199321865a70376d1dfbcbed2ac993fa01f412f185a09725b9e6b1808167a5cf55d253b461a43a2f126cedd7d469645b7740702938";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+psgo = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "75791ac8c340cd72139c50b2e2a05f6001edf2b79bbb9fcb4c9118f2acbc67643469c8f6da34122bf001e85af60b5b0050bf3c7b5bcce7c393e7930e3cfe7eaf";
+  sha512.doc = "9d061c884f76eb87e86cb441ebb693a9c64daca024c35dd631d660f3d1f8b1541c40e285d5f4115b36e2b02b7640ea7be70f4527e7ae92c6d6173625b215b7cc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.17";
+};
+psizzl = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "adcd254a9991839c623b3f75098276dc26df935db1528d39f8588681b87237febe81f8289aab747486df92bc9af2103638734fc22c43ace8cdea1733d2a66360";
+  sha512.doc = "e9d65b3b0c364fcc7632ab83974d8685568d4135cbd8568cbf69e9162dbb80283724ada72891a72dce2fabe35d846c6f09b05f1123f8fe72ae749215170ee996";
+  sha512.source = "fabcb5343912bf005f5ad73b2ff9444172ad6f36fe42ec492903ed6d19d3c2b67775790b15cb37a688d9c0b8d78145963f8594b67e91d07284adb5d26cd2ea52";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.35";
+};
+pslatex = {
+  revision = 67469;
+  stripPrefix = 0;
+  sha512.run = "b08cbb8ed7a4b89b9018b5b31bbaaf8ae9c520ffbf47b54d239b30ca67a26e138206c1f2f9951f8cc5da49357c0eca9a3df9eda4f02119355cf2be0a85c3a825";
+  sha512.source = "9943941967009a9d3cac0841318c6a31818f7496ded89fe6cf4d6ee8718913d0145497443762d55e4f80a1fee496b5170ff4b6c13266f04e6ce4c5bc2bdb5728";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+psnfss = {
+  revision = 54694;
+  stripPrefix = 0;
+  deps = [
+    "graphics"
+    "symbol"
+    "zapfding"
+  ];
+  sha512.run = "f7d1acebcd1d32a691221f396220358f3bb15dff2e2cebec4b537b1b790b68d8ce1164711983a52b4f04d6e470df2e3e5fec63bb1d3bf39fe205d5f0351299de";
+  sha512.doc = "d1c14edccdf43ed2c786394bc04e9fd683b683532a9dc18d592f918ee8899234d23feb738128aa1418f441288cdbf0c6de832f8c4d98023926baeace36365a1d";
+  sha512.source = "6862a7e74be6a575996e6f45a2236db810f1c030d3a0c53b2b97c2e803fc7e29010108e4597d637b8abedd63b1f956da268f62ca2c609accaa4d035be7bfd8ed";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "9.3";
+};
+pspicture = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "139d160fa67dbb7cc932fc75dba80dd46a55a1dd5973b27a6a5dd38a6035cb367441b178acaf3c11859ad60103283774ee5e2623a083a0336d5c2ff74a7b82fd";
+  sha512.doc = "a743397a0d48c587b60db5f1dcf9e1c22f67ba15dbbce241a2584c95456b3546aebdfaebec9fcfb3dedcac65f7f053ec52cb479d726e5e3fbfe042efcf1ad702";
+  sha512.source = "af1deb00966a7d4d1d68e156dd5fbc60e95f60a65a942f1bda1acbd579b932e0c81875386bd3eb1945fab211cc9ad5607c3e21e5d240048d775c28574cb754ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+pst-2dplot = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3109c2709323906ec39bd1be6e7c9151b7b07f9d2dafd5f7af61d3facd3e37ae35bd8bd923968102fc702f35fa4a903e9a50d3a7a85a1c088017aababd16d969";
+  sha512.doc = "f46a0c8c94900d180fac92e7b393672d010388fe80867f01125cdc7c486eff97ee36cab1aeeeb224b9ab80739c2ddd9e89b84926948acaa8b2b0ae08457ac0ef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+pst-3d = {
+  revision = 17257;
+  stripPrefix = 0;
+  sha512.run = "dfd8a2b79d308cf4ae3bdcd438b967446f8601509fd4afb3f090d946df0cc2d66e9b7071ce33e51ad4cd53b7e62dbc02d861d46a302bfe2c901d1d8c82ab0649";
+  sha512.doc = "e8355b936fbc1685edf205e88f2793ab298aac4e4c06de10dddbe1587b5401ba8cc4d2a01dbad3ad56da5eddb27bd6049a41e6da8c139727d36fcc94d93ac554";
+  sha512.source = "fc50cff8bb86571d3827a03f3c64cb62a9fdab25e2595ccf9465e4ad39539ebc0a55da92519ef203da65da3a44e01ee28b39ef27a5af24d26463b215f96be313";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+pst-3dplot = {
+  revision = 68727;
+  stripPrefix = 0;
+  sha512.run = "1fefbd8b34e49b7cf6bc35bb761ed9aa49d062d81f280936b86b58f123cf6023e038308f066a2f9e62c2fbd4181d3dad781525f289a9f5e58acefcdd344fd69e";
+  sha512.doc = "7e15351efd6190ff52e10287a7797a6ef0944561e381793290fbb56f6f2f174447343d10c9cfbfd0f61a62755ea0b3eb7adf52dfacf1b0b7ef2ec159f393b4f0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.09";
+};
+pst-abspos = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b56bed1fedb14fe7cc455fe4e87ec51085e8e09132ff5dbe52083701cdd0d63f2e6dac2ab55838fbefd8e7de9666d0239e9fba712573a51dce2804d31ab140c6";
+  sha512.doc = "77754a1c27c083f60c2836483a60bfb6b4c826783d5acd16b1eaa9b7fe7aba8820886442ed28a5b334929a3f21f0f1b4487c7403f8dbfc3ad3cfc08407e35229";
+  sha512.source = "faf4f7e2b94bd66d19be75c307c8a6b20a2c779a8e6783096b41e7b4da66ab07f7ecbaaedfa668c09089bea9c2c79af4cbc12aeafe949cb729c589989206cd0c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+pst-am = {
+  revision = 19591;
+  stripPrefix = 0;
+  sha512.run = "a5f466dacd393ed7243fa2cb43aed0a5bb8469a51aa82fac4b53c47a474a1d9758db4d7a001cee49716714049499339567cb62a66f2731ffc7646fecc15c7784";
+  sha512.doc = "edea0ddc3f5472a86706d1823fe78459d2908724daf2b9bfe44b41e749f2b41483000602817a45a5e41869f86d4034ea52640bdffa334af54e4964510768152e";
+  sha512.source = "fca7f1f7769f839632eec75b3baa864b60f9ab3c1ff9cc08437fad4086cf9a063f283568163d1ebe3e5a2c87b06bbae1b11e5be07a8eca5030cccfc68392b40f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+pst-antiprism = {
+  revision = 46643;
+  stripPrefix = 0;
+  sha512.run = "dc93e3a8a040a2712f701c2fa89924c45749824d20ad814a9f04aa423e15caed3a457b762dc7d30cf5c9e3afea378efc303851af919831c0969cde50b9adea57";
+  sha512.doc = "df528e5693cbbdca80a88d02e2b8487b70c188109825da66c9d9042056c6ba62e361fcba2ac747d69a08a4c8d78f27534640ce55c583289c3f12c2eb4c57d861";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+pst-arrow = {
+  revision = 61069;
+  stripPrefix = 0;
+  sha512.run = "3e928de0ec8f1c9dd80143e35e3dcc9d51ff106fa12193798f5d2a77f49b3049f042273102b3dfd1460de68814ab32a3aa4eeb14daad846d729e7f6ddcdaa5fc";
+  sha512.doc = "19878f237410d2db75096be382efef2ab1c5d169b4bf48b393956bf13a697d2c96b0da528c1044ee9b36ca8231ba4ad2b478bee24402033ebbcdf2778e4128a4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.05";
+};
+pst-asr = {
+  revision = 22138;
+  stripPrefix = 0;
+  sha512.run = "c5ae73e1553b564a90d2c77fa434c360fe2858657fb5ff4c6ce1cbb46838fea9c0dd7a8d92e2048a8ed0d748839518b461b0727db3b7937c4e39edf85277e081";
+  sha512.doc = "560ea68a6f02dc3b79c64554652a9efd52c7fb00d07e7ffbc9b92ffab251854e07e87642028b94fc42bf7d01fedd82bfd50913f9c42d1c37d76c1eaba761ed00";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+pst-bar = {
+  revision = 64331;
+  stripPrefix = 0;
+  sha512.run = "a4ca273cf21aade2adb15a8fae3d7aae9b24f4cc4a81002cfe0471aed7b5cc7be516aae26151a8bd2d98171f5524686105f3576df8cb0ecc6e16d690907f7156";
+  sha512.doc = "7b090d51bd669c3b252f002855d60f008054f12966d01cffdf6163e4360fd88fc064459d42d756737b1a915d87ffb8f789900be480eb7be1f3925389e2873f58";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.93";
+};
+pst-barcode = {
+  revision = 64182;
+  stripPrefix = 0;
+  sha512.run = "c79fc6d5ff483278210e654a3b325a6acd2492d6cdcb8958d5e4802bcec6aa119887bacb82a91e312c39ff5ac12a62d28c04528439684bf000dc1f1003ce8651";
+  sha512.doc = "ff4d449709479f9e1218a2fa3ba642660b09556c96cc94a1b65984ae0723e8b730d09634053feb256bf196aa183e4f8a46ed3efdd9d91dc5a03b4a6d4d59c0f1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.19";
+};
+pst-bezier = {
+  revision = 41981;
+  stripPrefix = 0;
+  sha512.run = "e2277175eb2087e13ee0a1100d602730514e1e5bb023d4db7163ba4113f69c9fedf74ff50369298ed970b89425b824cb8619e2cac4be463589edbfd747ccc6c5";
+  sha512.doc = "5126769fb89900916a52135af0ba459651083b01db466471cc984b6dc837686cd780bda7c3295b6afe9a7bc85180b3acd95c015084d49f46049adb2fd84b5748";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03";
+};
+pst-blur = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5726819bfa08fbf6e9b5a2c6f93008e468b759a825fef04739a47e756d4b12a99aef604d64618081b1788b5fed9247c75dd3580a899771b148306880341f0444";
+  sha512.doc = "5e483141d8f5ad03421d9c7c5feef8baaa3b522385d307022dd617af0889bf57d1cf603a1d519a5d17d8dc918441ca3310d766e4dddb7ed6b8155985186b5e7f";
+  sha512.source = "2e7038a248c307c50d29a6171d1b52bc8d6fed76885ebc24480a3f679918fbdbf1e538f783d0f9e3792a3530e51e60da4873c5da0878e66672dbe13fc9b950d6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+pst-bspline = {
+  revision = 40685;
+  stripPrefix = 0;
+  sha512.run = "1f39a02cb0d56b4fcb8ed3a3768b59a9d14ac14769783dfde7108d86a8c6d68d79342df501c60efcfb8aca4c7f97fffecfe4cd0ea0f4fb76e528f696180b6dfc";
+  sha512.doc = "1f2b8c3f5d85db4215cb11fcd663c33fc1e34e764432a2285f879ec8bf7acb9d09368c6a9910618ee99c3305d701aff5e5d401c227d0c1db9028be3690b5216c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.62";
+};
+pst-calculate = {
+  revision = 49817;
+  stripPrefix = 0;
+  sha512.run = "b40a89c1e0152459e9dde468379b1a848955d40b9d9e05223544347d6057affac092a503e6307904e485a81de781eb9455abd948bef7f343359d44abf37f93ea";
+  sha512.doc = "d6e936e7bc53ae3296812b1d33ecf6ae890599cbb9fa6afac719d8ebcca4516772ff6c18f27e8d825ab959d430cbfe8876b2bb97e480bf6464690b28cedfc2bb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+pst-calendar = {
+  revision = 60480;
+  stripPrefix = 0;
+  sha512.run = "0e9bece02b9deaf677ef2d6f02999d3b4b7bc7028ec768fb57e69fcd3c1c26d1ddee1c261cbdce8eb8cb18c647dcdbca1448860d6139f01e17f234b3a8a0e793";
+  sha512.doc = "07796be64b64e6c8eff2797d145933bb45c0e3ec0ba50e6fb41974d2dcabce09f2f781f989a62a5c5fe6295af3ddbce10ab811c2abeafe2d8b56b7a603f27412";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.48";
+};
+pst-cie = {
+  revision = 60959;
+  stripPrefix = 0;
+  sha512.run = "fcddc7d04c259132a45fb30850c02b613ca71e9c3df26729166b142e953e997d3c618d835be472d98c0aa7a50caeaebaa5631cfa64cf132aa35c2d29be59c63b";
+  sha512.doc = "431f1d8306bb623834ef5f5d732e8fc413947b5f3d31d07874fc9d7ad0897046a4cf919e6e2e520b23eb9f268cfbdaf547dfe7e8e72d44ba92ba9cf3b7a4fabc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.06b";
+};
+pst-circ = {
+  revision = 60464;
+  stripPrefix = 0;
+  sha512.run = "2335b728be1227d4631e09c3994e9e1f559839e871e29854e700ed74b9031a7d2ea58cc744d20b459c99f1954b7faaecc2ced19c449e98b97fe26b2fa71755da";
+  sha512.doc = "c2eb37603cbba656eb1282130e112d0c3bbb49d4b3703c3d9b19d0d250d272d31fd19d2790c97cf8cd5226b0735e8466eab824a35754f41d7584208e606a6ce7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.19";
+};
+pst-coil = {
+  revision = 62977;
+  stripPrefix = 0;
+  sha512.run = "bf6e1671f6c1d6d7fe348958042892a10168cf96e8626e4d15cb34089110677ede3535abf96e76847b6ad8d3ca910030e975e7b52fe8b168136c98a05f6915f3";
+  sha512.doc = "84fb627c91d56e1553325c8d87981ba6ab1001b8f0163b45bf1a7352026853c8d086350191a4f98c01bd6d59bb5f4b638275c38b45eae6d360c8dbba1a5b8867";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.07";
+};
+pst-contourplot = {
+  revision = 48230;
+  stripPrefix = 0;
+  sha512.run = "9930e77c3ac5adcd9e3f14c4785a52a79fe5068b5ee239d1c9f052181657d2c5f16b082a8900b9571094ec83b7326be28a567dd39876332e5f68aa6b1c1b7083";
+  sha512.doc = "1a52121a22c829c9c5423810f529cbc4cf3e49a805ec4fae123dd795dfc8fc87bebb13653a9d173ca962bba716c8428effa4410e48085af4bb208331e4e89bce";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6";
+};
+pst-cox = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b7e0e787e5a6d825383a5c06d7aba34e5d7cb12258925b7f0384ec069e873a6652e421f963147648903f6bf063d9592089adee5b043f24dac10e30dc344f0608";
+  sha512.doc = "1de830f83253ef11f092c9ec0e698ff36971c7b6d4237c8eb9f6712bde051b9302d657faa21bf56d34287c838453c611ef1a7c70c09e55ea647bad48ca216e1e";
+  hasRunfiles = true;
+  license = [ "lgpl2" ];
+  version = "0.98_Beta";
+};
+pst-dart = {
+  revision = 60476;
+  stripPrefix = 0;
+  sha512.run = "f8d2665eefeb791672864ae5fe17aebe6b83ca776a6170c46672cce02ab639fcffb011afd922b1dc9abb98a70d6f81cf4b00321e2b69542d532c3c72341e28ac";
+  sha512.doc = "a0c747f8736607f920174b2a80ab07563d1cc7114d6e2e751f7e2d9835eed9f656f4b57b7b9061ad8501f4d6ba26c1fad37825b3819be1060782050ece94199f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03";
+};
+pst-dbicons = {
+  revision = 17556;
+  stripPrefix = 0;
+  sha512.run = "a09ba8f72ecc1b58298b436c47d3922b494337179bdf789468aa3a2236a5e2bd0f9ddd9b491c1a2eb181d08090cc1c6d8c4a0e9e56cb8619a65ce168d7efd355";
+  sha512.doc = "fc0a74b0ca228ff598f3f88840ad1b87654cd7205afb757e6eb6d98abb0cd56cea0ac3ad7b3464a9a5b09d3d4f3a8489228b19c78edc8ceeb8b10f5d40e18540";
+  sha512.source = "ad710329d577b7da464028bc0abe684d987a601b6ea68cbbbeafbc6135c3ade2ab124026ba0e1d714984251f800028ffd018863c9bb51aa8fae4b5b7ebff02f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.16";
+};
+pst-diffraction = {
+  revision = 62977;
+  stripPrefix = 0;
+  sha512.run = "15db0252472e17f5d4d702d98961babecacaf7753c15ff8e615199f868605e133188c996756cd6cb5b379616a494454dadeef36678709eae8128b0c69623f417";
+  sha512.doc = "a90ff70c942ccf4526ad82b83c0666db05b3aecec3e3b00fc572a7aeeceaf6487407b178e00b929c6d3402752d0b96d345735c5731ce2046fabb156df2703c07";
+  sha512.source = "b5df7c25649efb0fb2143428e7a67f3abffe9ace683c738a45e38a2c1714cbab6fbf009decefd829fd5f17c1c3cfc4859ee9abc3d428f110937f94f4bfa44070";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.03";
+};
+pst-electricfield = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "db9f7474d8290640d960f411574b6dad9f9b705eaf68644e001ebfc5050328673f0c1c31f925c6a2cd2279b9bb7ff89cf8d21e71a99e4b937137af404d046df0";
+  sha512.doc = "9d89a2818a56bed9e3cda9069f91cb49beb0182e0b24474051bb28c4299439a7b5477d09fa1caf23b855226d4d4441e48c9fba4a4dd1cd5eaf044a608876e5ae";
+  sha512.source = "89d6b2314db2840f70d99f2f0e66a875b47cc2e653bbd28c80a71eaf6f7d269e647e84b5bbf5ab7349d8a45412b824f9ae7d0c4ce9c4703f82258418b82e8867";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.14";
+};
+pst-eps = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "90be1124bd22958b0a9cbb45a3b76513e514131c416c98d7f70ca101e7841980c33bd8380e888054cedb873143aad168b0dc25918d9e241f763b9be3ea1a76d6";
+  sha512.doc = "70542680c550bc11bef851cfcd12010e17f35dd75adfa390ffadc7b920c2b357594ca514fcdeaafcf1bfcf1b9e622b23c680adbc64ae4787fa96ff94f9a62add";
+  sha512.source = "97e2adee4ce93de77d4d46946795565dfa0e0da188fd686bf96917b1220661510c1777fb7d025ac6dfca816bb8575487d45b180e4e35cade21353dcf4a8e5540";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pst-eucl = {
+  revision = 66924;
+  stripPrefix = 0;
+  sha512.run = "9310a2ce965b8cf9b03aff8c505515cbe386e12fc5973a4d8f26bcf2541a856605c8f14849baf649b1d1c24219dd4fec6ea5375ea43e8ff533171dde4e7d5ea7";
+  sha512.doc = "1054740975d1be6100ca269221925af22fd1760a5f88ad942be398a889f59209da79e31c53c702a02fe639d218d80820c3f1d1033349c283e9fb6e05c7e7643e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.77";
+};
+pst-eucl-translation-bg = {
+  revision = 19296;
+  stripPrefix = 0;
+  sha512.run = "ba2a7a76db77f4db3a548654e53d587b8f5b3dab9fef56b1f8c2640bcace64237e0bea5129025a07a490a2660ccd019fc5e83e3db504c6cd30b12b19df755f8d";
+  sha512.doc = "9f6d0153e79a205d0fce5b289fa43317ded0b70abc06139a503b98199584e8cb12b083c8235b6b53ff2a80cf249a4a43cefd3e0b39a9a406c62c1e684bcb35eb";
+  license = [ "lppl13c" ];
+  version = "1.3.2";
+};
+pst-exa = {
+  revision = 45289;
+  stripPrefix = 0;
+  sha512.run = "af3bf68bf2401e0bd7023762748180bbedae1a34fa749b02cccd6b498f1f7ed0ca0e929e1b290f9b4f56b7f30718cc602d54b348e23f73c4cfb4d72ea22ffa4c";
+  sha512.doc = "9f0310ad130ad4693575e33bb2f2deb795a8eb4cc6b3f5fa946095d979ad8a1a348feca0ee5421b4831fd16a1de23608013b69d027b0dd37f782113e7de868bf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.06";
+};
+pst-feyn = {
+  revision = 48781;
+  stripPrefix = 0;
+  sha512.run = "c1ac123bac3f92fd92321387be28f519963ab196fde7ead8ed6b4c93ff9fe5cdf07bfee65bef67b9cd70d020adfa99c72592df9be376d69c5dadcb8bd0d6963b";
+  sha512.doc = "e30fc57ace8fb4f0c36fd1a07415e894abe6840592a9a62b9e45c0663281a79532387f5d37136e9cb5e7b27f4c0d7722e6d1a9779e1a57a2fddbd8d0324d1424";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+pst-fill = {
+  revision = 60671;
+  stripPrefix = 0;
+  sha512.run = "5fa4ae2e862a9297073bf0559dc46d44109d1153571eb8538650410c96f5c43a9a8c85a379690820f63a5198ac1983fdeb514bf4b1342349352f1a16ef3ee375";
+  sha512.doc = "ad51d3aba8d9ee19b4a53081a5956e8cf26f2673faf521af088076c6a356e321ca2fb9a0b504e61529c5a2ae49480b3918bd12235a66ad5c45035ce92e2eae92";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+pst-fit = {
+  revision = 45109;
+  stripPrefix = 0;
+  sha512.run = "ede8c3503963f44d65caf46975cebdad296576742a771243914b49c6d802deb2f24e816dde7fd9a4bea7fa0c39965693575676ebeb648da099d88ee50bdacb8b";
+  sha512.doc = "c8619c7c98cd42884637de98c88d916e18db273371fd64090d5e9789570153b2508f0adb90fbec9c5184f6ef1ab24559b04daccf8dae7c5f65453044b9bfb73e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+pst-flags = {
+  revision = 65501;
+  stripPrefix = 0;
+  sha512.run = "142a1d78f1423474a935bcc977964eeec310f0e8d8037149f4f5fbf691789f0a9f2986630f629cacf319e34ee640902556b0b59145ef2a763006618c65e21f49";
+  sha512.doc = "4c8bed4fa6f527fd5e0262692cf4acfd52d36bfe8461acb97615c127ab54336ada7a274ed9e5a7a75d26cf764c2f63734aa75d5bc45ec833f3b77b6179fa74fe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+pst-fr3d = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ccd418ac7ac5ee1885cd2b7008e867c08cc0fc13fa97e264377446d301cef1caa82b8552731a4c7d3131f0e2ddaa0267276d5b1726998a0be2f149ac67bbffcd";
+  sha512.doc = "48c559c27999b06d63ab5c33c9779d0902e05c80c51ba9225f0def724e02892557deda44add976bd5fb73403bbc2615854ef9ea398b830357f0fa5be12702e74";
+  sha512.source = "7fde5941ebf78da6f5142d07963aba36f2c298e46c2125f5ec210830f5f3694b3b1a8bd4b342b6065fdefcce1e5807321f379d030b0950d3ca5dcad30ed2ae3e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+pst-fractal = {
+  revision = 64714;
+  stripPrefix = 0;
+  sha512.run = "c52e3684398956e0cb1c79c9d1fc145e3b012d011d60bae1a756686529cff076331bb1e8d1895fc2dc46fbda8616a1ecf5c30991778b6041cd40e79fcad32f25";
+  sha512.doc = "657b15f4342764d64aa54c1bf8a86be16ff859c7810e86f85db0b5c5a32064b1caf57944cea09a267f7c5bebad9db7ffdbce5d33a57c65045dab7f3c1d5eecd1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.12";
+};
+pst-fun = {
+  revision = 17909;
+  stripPrefix = 0;
+  sha512.run = "68d0c52bb40354a72b2eb14d2c10a18266badedd452a57e4c2a9aaad343b94f5c13f89853962e85c94ebed9274e87c44cc4ac1fd0203ec54097f71e5c4a15fdb";
+  sha512.doc = "b4f498e3f9d97be8fb8918abe5139d431656b52ac592ce9f3155c6dc7afcea17e51996dbb275968950dfae179b336ef923b2d88efb4b77506c64b5c775920d38";
+  sha512.source = "4cdd6ea161216ee5d8be410b96749ae52d212e75691de0a9012ee6f0b5044d14c5be4e8615a6bc3b3b22f8a8fa99a75977fb264730ae64218b20898444793dd7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.04";
+};
+pst-func = {
+  revision = 66845;
+  stripPrefix = 0;
+  sha512.run = "28c50cbd77b2400cd262b8156c01c2adf655da279a33703502d79590174824b0470a788db1a04c7439c63d1870eefa19a559f6f76c0c80c076cfb259eb920970";
+  sha512.doc = "b25be44e2e42b35ac48730aeb2d705082b99d5bead17119e1c5e353790f25aabd294043f753291265dd102ad7d8448c1592e5fa486fda317c1e8bd03aa1a3ca4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+pst-gantt = {
+  revision = 35832;
+  stripPrefix = 0;
+  sha512.run = "61b59f922129de60bf954145a0c83a5bb4c0232270b8213b45856a69ca56f32a9525d70ba86e51f95fa1c8836d4922a0dec971dea16f13f0c2f83c80fbfefc56";
+  sha512.doc = "950a55218077d7203988c42c83445bfb10f53c7292cb85bb4178ab20b9f1404ab4a864266e52c3af074c45cc27b6777dae71af41caf270143160d3d59e222731";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.22a";
+};
+pst-geo = {
+  revision = 60387;
+  stripPrefix = 0;
+  sha512.run = "4e97b80679129df2cf52a8998e1b131b7ed5ebd21046219843af1ca81272a84c3a8fca72810622a7215385207eb541cd2bfac65b791920da61c233f969423c3b";
+  sha512.doc = "7dde4c2584eb3c538a21fadfb9c49db02ad190b0778b64a4a51be7b777b4971302151a4f6ee7c5fb29f6c156c34a420b1734471f550d541bd2eb87877ab1543e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.07";
+};
+pst-geometrictools = {
+  revision = 61430;
+  stripPrefix = 0;
+  sha512.run = "838ddf95e3ba7a13fcdb5cf97d85647cb6b15bb6735947d26e358af83a34a4d5bf55530c4624f006eff4a9f0794d1fd7f5a3ed351607243e31537e36bda33b96";
+  sha512.doc = "4b7d2316dff80420ed5ce03046115670a4ad51c705dd960f56f6e7debf20b0d3c86030d93cc635410e01535aec1b42dd3497d18126e6c86bb9304c5cd506306d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+pst-gr3d = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "85cbaa41c3cce49aeda36ef55a89122370fc23dc91c5e5e63790aff2b8b748eb6a13a9a921836b2a471ab2deb9577ecf59be0bc6dfa4d2f1ddcf17bc33ca4264";
+  sha512.doc = "bd9026c7730dce9c09a092cc420fa7ca8d7c85db4a1f9a665a64f933595b43397027904c08311ab2301305f79a426a1b726b8df2c237c8a545726fadf9b8ed30";
+  sha512.source = "ce6786ec803ceeb33fd42d2d786d119ec2f604c1d4b4f7a51c6e9ce9e4171f01fff33b66b234a5af854e5bee24f23bb50abb898ab89c568150a50ffd8ff7d582";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.34";
+};
+pst-grad = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f98fe4e4996e20947d90ef24d6825d72a8ceb6bbd586b0de9b90d5d73208816395e5b195dcda2816c8e709fa4c408f3b814c02911488c83a207039d28654b9e3";
+  sha512.doc = "11f4a4de67f92bb2ba77457b5940e2b848985de111e3307215981e6d39617b8590316de5cb6e5002748d9e951be405e3f938d1708c28a7970be53808688c10ef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.06";
+};
+pst-graphicx = {
+  revision = 21717;
+  stripPrefix = 0;
+  sha512.run = "0d3f2d072a7bbb58ff555add4df7347a4dcba929bfba49d25dbf6b95956462a3fda07818135fe40f737151f323a27225983f656389f9a91a8295145ebf2877a1";
+  sha512.doc = "8deba57cafa74987ff7dd22b52db699fef2067dfb62e8e2c7e8e17b662f1d7644278272ee97209b3c109345ae8c295e125d1b195ff68cdfa8362eb3b7ad1bc84";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+pst-hsb = {
+  revision = 66739;
+  stripPrefix = 0;
+  sha512.run = "d3eef4f4672b938b84d1fafbf22889f9d7116af9a0574a95bfe2a7225d4a7185abcfb862ba7309fca924993f9665f2086a35edde97306c4b2311cf18f1763929";
+  sha512.doc = "a2664b558f51c43ead6c078f0895f4a6c5c55045b8485e7f564bac10279b997fe082279e3cf2c35a7f47f78fd826ecc5a65daff112dc8659768c3b6275b7c854";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03";
+};
+pst-infixplot = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a8e69a4bc20752d5f6d455f34fc4810e569a5f444de257c1b50c76d567a23d868b0e19c9f4656370a12d3a53ef35ad43e7dcc946782c19ef76091634bc2440a0";
+  sha512.doc = "0b6958f851af834917ab04f39bf60d50e26eb61ea52c9dee91274714ec0a87519323b1f9ef7d665f0a6d05cc97e6f8b1bf51617f2c57a5d80ebb96ba1aa94306";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.11";
+};
+pst-intersect = {
+  revision = 33210;
+  stripPrefix = 0;
+  sha512.run = "847a2532362e570d3e14ac4aadedf0cf1ac0f2da1991837abcb6cbfa607357d8a451d852bec9be50ea8b2995716613475c4c1ea1c3766169902eb82e70aaba0c";
+  sha512.doc = "e8775b9d8adbab9e7ce63d595cb70747dc3d850c4b43095e1a35f6be8093b61ec92457c7fcf6565484e62b1aa7bec82700d8ccb2dc8dca0089e56bc8be5e762a";
+  sha512.source = "87bbc6bb4d4b43d6c1e93e89d7d96c5f9941187181eb93814110e3930255d6ac6c95d81a53a6ed440f6bd4fd8c38725e4cf5763467722465cf941c4cc16b5841";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+pst-jtree = {
+  revision = 20946;
+  stripPrefix = 0;
+  sha512.run = "9947e00e7fdac25f25f1f828ff5b9a3b962b1d033c57232d2d47736ee7a675ee48367aa934153ec17ae3f2eaa763044dc067d83b2248c5f42a93eb5d9a79e292";
+  sha512.doc = "4d0a2432e9880a71f1d7b6a9965dfacbebeb44ea2586fd428fa58f634d7670d763e9ac293aeec6adda6cdef98736a7b5d341ec41d89bf3999c4cfee9066001ae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.6";
+};
+pst-knot = {
+  revision = 16033;
+  stripPrefix = 0;
+  sha512.run = "f481b82e5d21dd86eef3cf64ecedc45420b33e43619574f072a050fd70a6446ef8d527607ed5a929443ff6976cc94a03817837c8776bb2ee9794fec80a4c0751";
+  sha512.doc = "a8a82ce955b707c6ecb319783cdc4fc8406411dc8d711321919413d84ca42197828e69ae2b6b368a4b5b326650caf5393cb2214a7cd8b7bc0cff742b9b0d977c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+pst-labo = {
+  revision = 67147;
+  stripPrefix = 0;
+  sha512.run = "d04fe4359a34f466d306265919bb13483d5105d6c77c8e297f1f964fc8224b6923773c4d3a0c58f8dd9b809deddb4dfd4f99f205f09de6a9e64a2398b17b7ae8";
+  sha512.doc = "98d55a590607e78c55402af375fd25dbe1d44bb4793d5dd3327311f9e9457e8b6073cebfa3dc993560d5144426e8195ec450b030a8897c84c8b711afa28a3f91";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.06";
+};
+pst-layout = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "6d4c06efe0d0095ba52eeee25ffdaf44f836e1e41840d8098e25c6fd3b5ee79d28663ef7f02ddd7d1ba21228bf4f9bd5a66548e3aef642a49cc9aab5b4b24fba";
+  sha512.doc = "fa32cd065979fcaf2105372155ae8debb399a0f930d6b85e7ca4a69d8b76bc0d7fb717ebdc8fa4c9794ea03268c2079b93e0bd6453155bf5925defb75cf05e08";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = ".95";
+};
+pst-lens = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "406bc53d476d47d464f7fb318e75a5aeac85cf4239ab916e91728f5d8c0c05a9fd4c4fbc24b4b058f1c15d1ee4c6a0d45511b8cf6b288bf10163523b2bed0f37";
+  sha512.doc = "8d29f5014e0bae5d1fb22483ca3231e3631c76820be080b3a588660f868ece861c2d816291656a45c8a33356b992cd6e2396e9d73f4ab316b877b2ed8b778f7e";
+  sha512.source = "7546475681934697c5fbe287d9d0c81c4532cfb07537ce0184addac26a3c29e4a37da5e12d9ac3e64f83436c07ccd9ca360ca276f77cefbb9c23c740b15bab65";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+pst-light3d = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2bcfd2835e20302ec865667a44af8dec63c6c006c8a3e39b048464e129ef04300d0d7c2e23f324a8acee0e1ae1439e75ce642f7b76a8f1958d600546ac7c220c";
+  sha512.doc = "166f47222230e24530508e3ca66c881dcc844cb8cb35b92fdbeab164b964ebf2928df3068d79467fc8a9a8a4db81d2be48350036169605365bda116cbd86d095";
+  sha512.source = "8edab208ea567672bbfa0252fb4180abd8134702058223f04ab23c3ac92dca98f4946ffc31620b9d65376ae41c819038403ad3bd7c9162cabf8efcf7d4d57362";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.12";
+};
+pst-lsystem = {
+  revision = 49556;
+  stripPrefix = 0;
+  sha512.run = "0da3611c401895f508b6963c46f781863ab6b42ced2addf3413b74ff1c14daf42cdfb5c166072e18427871ed6d06c5cfe3b185f0af30cb25db2f346828ee1682";
+  sha512.doc = "0b277cd979f4a12abb57b8e6d2562b156bba74e0ca46da10da17a6bc505c6747592b5f19c5a3e9b72f99bffabcb45298663c6dca33c875c923408646c4c5f6d8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+pst-magneticfield = {
+  revision = 63821;
+  stripPrefix = 0;
+  sha512.run = "f11b9d1c1b535a9be89b8750fb65374c53e3917272d09c7cb2591251ad4def397948c17e110bb1d86d2e28434d0d58cfbf0efa3c73df807edadcf65bc8267530";
+  sha512.doc = "bdccf423a3c4c157e62a31fe351301f10dacb167c3464b7e38e6e7a49c566e5c4d3025a7e59bac22330b330ec791ff77242702e9987bf700bcc519e50b2742b8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.17";
+};
+pst-marble = {
+  revision = 50925;
+  stripPrefix = 0;
+  sha512.run = "e16ea0ed61c6548d43746f251bf8581a00863370b73d46077e5510fd167d63a539ab4543f0ad7db704571b5274cc5756fb713e5182c8abea404708215a98849b";
+  sha512.doc = "5684abd4913353b7a4953ed1b5878183f1c10dcc1bdecea6f3e9e6adef7c73c7f16cdade2b5e18f4a645c203dfb15a3917740a7638c410002eab892bc5ca6acd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+pst-math = {
+  revision = 67535;
+  stripPrefix = 0;
+  sha512.run = "12bd81bed4fc5de91cd4db49cb97a9911848c347a9a9325cb61637368bda4e0f35f9c5c348bd385d46907b61aa06682ae1a9d70616d4c5c81659550064d4cc0c";
+  sha512.doc = "1b07b3086fa3e1d12f255632ceddf5b30c219472763cc43c0649b669a6014bb76e3a0fe7c182d0ea24c54fee8d2efe8399867321992e20f7f418d28198661bd2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.67";
+};
+pst-mirror = {
+  revision = 60506;
+  stripPrefix = 0;
+  sha512.run = "316a6cd32fb2b8c59f554a49695ad097627e641982d1a6a8b1e5db12949c2cc84dd150a190834604d57ca10735779cb09983c28e7339e92f3cb82d642dc9b61b";
+  sha512.doc = "f577868d1cf76a372a3c248f6dde28ed423beaa5e445a6a343d9b5e4c2ab9f737e4266c12702fcbf6dda91a6639624ff99b4cba29d65ebd4c7a0c3f3ce1323b3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+pst-moire = {
+  revision = 60411;
+  stripPrefix = 0;
+  sha512.run = "60fb7e65170ec16f08f4109794afd657436fbb42a18feaff2997fdef20e18376810c3b34e0e341a5e577a6d08d6bf6314adfa51611d83a4e66245f112581d678";
+  sha512.doc = "f24fb6a5a34a09f7b519f864c40d4bb4afd4b37f12280877fa9e6edae48a655c12bdf13eb7d13e9ce43ffa849a183c6a81b8040f61d90e9ec514b07352fced3c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+pst-node = {
+  revision = 61838;
+  stripPrefix = 0;
+  sha512.run = "663d072baef5277519157175183313c9b80385d1574dbbc1502b60aabd111688286499426e88d28b3b5252b8ff23b3d325981b6e14b846fce3b92ff391ab5a7c";
+  sha512.doc = "5cf9cb60b0c36915945a4e2fb4e79a35e2ff9e957df1b1e39d8158560843fe1dae6867aa6270e70cf3ba387b104e9dd8b6965434168d89748e65aa77368a0707";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.43";
+};
+pst-ob3d = {
+  revision = 54514;
+  stripPrefix = 0;
+  sha512.run = "19cdca2466071a1c6236fd4c149d4962dab3aa0b0c097fa408ea60c2bb46011173033bff02d33f596c8a413ad781c14f785b39bc28be4c85aa66480cb8a7e295";
+  sha512.doc = "78ea80a6d63ccbc69640e6e18e8ef43526fd4d4b51a63dccd23429ea44843a0f99f522bc34a7cc88d6ffe48843313da64c550464f28ad48726554bf74b9e9cc5";
+  sha512.source = "a0827ae0fb0ba2072894bfc284234eb301c982972d8333866cc8b66ff754e85b837fa024083ae31d637ba941569ae491a85bbe62ab32adf0fb99bbe3ecd019ed";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.22";
+};
+pst-ode = {
+  revision = 69296;
+  stripPrefix = 0;
+  sha512.run = "1474e118f16c644c7d63ec89a42ea598443cdeed56e965fb85bc75adea4a8d5572a49f07417786682844523d30438a0a2798e9e5635879891f039453e53c4264";
+  sha512.doc = "f46dfac052060fbe8f41d74a59e85c3f7b0d0d25bf2b65209e7bb53d6478947fcd4a2af9b5e68bbe585afe94fa53ccd80aa80f2e1e21b68210d38fbd114b217b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.19";
+};
+pst-optexp = {
+  revision = 62977;
+  stripPrefix = 0;
+  sha512.run = "a72c425dc808ab5a4507691c9a86ad2193c08f8e88d62ea558d2559b68e18e9dfd8e0295bc18fd66e3cf41236c17b85086dc218e46317c09867b5eaf024564fe";
+  sha512.doc = "6c4f4427b023b6dccaf75ac2cab2c22da32d0fbe6007c68e05b9ced31b11da91e5537ae4dd174a726b36ff2657113bc07e1b054e9dff344a9dd99f3039be97f6";
+  sha512.source = "8f3f7cdddc2b26ff9adce1cb60fd165fdecfc0b3b61cbb827e52f97702cce602312bad4838f2ed96a8d07d1deda4f5226a305c7796a8794b6cafb821c8b745a2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.1";
+};
+pst-optic = {
+  revision = 67052;
+  stripPrefix = 0;
+  sha512.run = "132b3eb936678d51a4581efc14998c794047959f89789ed22098326912d00eaa0e39396608d3c1aa78f1fe8bccb21ba2ab454bd2b3744ba252c24f164c58e23c";
+  sha512.doc = "a7169c870dbcb336025aec5d475afa9691ee524b35ef3404f2e3244c4e4c0f08def16a8eb458eed1a8ebce27c969ec80004904484615588fdbb401b863052efb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02a";
+};
+pst-osci = {
+  revision = 68781;
+  stripPrefix = 0;
+  sha512.run = "c888d41f7e14cf311b359fd37aa0557fc9fc639b76dd5db782099f6d307c4e5e3214df2a670fcdd3625818e461c34ccc0e50ba617714e58aced1c71b484b63d8";
+  sha512.doc = "5abb2eb53cb6cf1492c9bfad164ef8ed1088e6b6cbe1f0af6bf0ec10b34de3c5b17163e2bcfa52bf0b4394f3945887ed0e532fdc6a8497189325d10db50f4577";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.82b";
+};
+pst-ovl = {
+  revision = 54963;
+  stripPrefix = 0;
+  sha512.run = "e3349edf9643e5d9e370b5dbf1c4dc3078ec82520c943a81ae353e1ccd0e2476105813b0cbbbeb707de5419035edcc39748c7e86a69cb90f8bc0d61d70f553c5";
+  sha512.doc = "755c786cec204ad3dd41043d8dd1bebb33ebbd889580a0a85390ca8efc318076ec9300a8e38b99788bf348a49dbda8ba5f3c758ace788bd9de47c251dd4e0407";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.07b";
+};
+pst-pad = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "cf519f69dfd1003ab17a4a67f309336442bf35497cd0102e346ab8537865540c314666fbf01cf6e3e106ce922fd8922ac4bbb5b20ee90a7ce24a7a98ee974006";
+  sha512.doc = "0a2206d3ef84dce88d3e0ea7899fb623d12f7f6a820298b031ff76044eb9ec49bb09f70f6ee0b00018fcc02f6260d67ee58c8a06a48ddbfd2e5b17f52d374830";
+  sha512.source = "ffd5ef230c25a731e5127cda390b60fdc275d53a833f8fd02ef8fda7b959d7ef5e2074637af603f1e510cd558cb3de22245bc34f91bb7114269425d3b4db211f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3b";
+};
+pst-pdf = {
+  revision = 56622;
+  sha512.run = "5f5850f0e908bf6b10977bf616aa82ce05d1f0afd4127b5db14379a510ca62614a3552cc85ec0136805fb479201c817442872f9d1074fa6cc1367f41403476e1";
+  sha512.doc = "eb5013040f3774e81d019c0010e8fb507d22cb2fb9c74e75f2c14aa0e4edd20245ddaaa3744fec7204c607b5f6329425f8f2b6e09bd153e6df6a3ae39d1e1625";
+  sha512.source = "1c353ad8d3b62fd5e5bb8746f69f00b8df2c7b53dd558ec8b24d571b1fe84fdab02daa4d7193f67a258c7390d50f25cd5270578d742b085634980eefc744b09e";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.2f";
+};
+pst-pdf.binfiles = [
+  "ps4pdf"
+];
+pst-pdgr = {
+  revision = 45875;
+  stripPrefix = 0;
+  sha512.run = "c42b723e2739eb3a70f7a984d45b6b738a1dab1f4f3bb7311850c344be736fbc97ababb6f744539deddc7d1cbde47830e81d1bfd42f705a7287b1fb970664823";
+  sha512.doc = "006395a2e1caebf8c86f4eb41eeb03a35d47b82e65e18ce4045eb22f93bc78a38f7611a1328216712d29be852fa3431876254f3b41b8b7a2a7c453f32a8e1bf7";
+  sha512.source = "e576ffab3eb1b0094bf7514ea996146c1d73abc5f68a47f3cdccf5e7fe7eec133a21511e9d1107ef20541750b12766899bd3c925e09be931b1e0e2a1cee376d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+pst-perspective = {
+  revision = 39585;
+  stripPrefix = 0;
+  sha512.run = "b1c6c1313e0f87d7c4dbc7122d09777f14f02ad0908c6151fb5da905d908a9ca2d905c5a9e3fb1e54deb0b7b91dda1488de0b96ff40683488947985d68e2d331";
+  sha512.doc = "df82bc95d3720f7da3c23736d83fbaeae5132f7b84aea9f2fd8ddf925f919e5d56f6701bf5b541446c024e8d2f6a5875d562d96cdb1564dae92d6ade759671cc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.05";
+};
+pst-platon = {
+  revision = 16538;
+  stripPrefix = 0;
+  sha512.run = "8eade14982b0ffa2c5e7d5c68a91d4159ee6f3317b20836c3f470ed68940a522459bdce54b1e1dd4068173e50b0c611531d1210b1651d805602f952a1696626c";
+  sha512.doc = "7c252b535853c4941fc4cdbe504a3c20ece2c04dd15e2bc5ea0c88928b5fdd7063035c329dccb7ed04d71606e70f632fc1d66847dd35ea46a4626c04070974be";
+  sha512.source = "092665b806f358201f0dc1b0010796c2090b84cf31d1f0e9e33d2ce370049f0e7f65ebac23cf9841f770df8c61c22bdea60e583474694311c7e3fb4fd71ced6f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+pst-plot = {
+  revision = 65346;
+  stripPrefix = 0;
+  sha512.run = "a273a0999f14697ffec4165c8f6013821f9a3439bb7822963e79d4b362a89334090af54d591f7cbff1f59d0e15e9b18dbc3ed9d711ba90162913098dcec67684";
+  sha512.doc = "870ef12eaebc4078ac0906cdfc225991714a55dd674cf7b757ab7b7925728ab771bc63612c61e26a997d900f8c03ec4d439d767b0a83fa54b8a65517399fbd7e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.94";
+};
+pst-poker = {
+  revision = 65818;
+  stripPrefix = 0;
+  sha512.run = "850b8302f7754e90559ba43ff3cd7440866b23cdbf7d3d577a75a232533d750917d3dc7ee9554ded07e6cc38346905da82e49bb90bbbe4de0f02c40fbebd111f";
+  sha512.doc = "d021da1775a7f91968490bb4e2ef5fc8eac114fe33810d069882e72e381ec94e0cb81f4ea213edd394b5919e07873838996b3aa0f043fcc41814969e59db8a21";
+  hasRunfiles = true;
+  license = [ "lgpl3" ];
+  version = "0.03b";
+};
+pst-poly = {
+  revision = 35062;
+  stripPrefix = 0;
+  sha512.run = "badd0fcc2b439ba270d5375703f91df9009fb7eae920915eab8757185da0c6665c34d530d9b4d8bf469767dd79ee834ded104a0fd98243a1e8a17cda47be0f79";
+  sha512.doc = "0facae2d565a22853a6e455534065f5954571311898e0850fcee7b18909f1cd0fe06b116138faedda6767d8514d44f7d843c13985f8723ccb8ec03a81bbaa46a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.63";
+};
+pst-pulley = {
+  revision = 62977;
+  stripPrefix = 0;
+  sha512.run = "e9e3f27eb01146a6aac0f9479f8c7bf120845a9c728f7e08296d95dc3cbbfd7d4eac6cadc0e7195848157929d5001fd9a1a7b9c2daf4ad97e28e0007ba8a22fd";
+  sha512.doc = "f7a0820425a1d785a91ed2cd070fb371b6503f1116e1e08a6e97509133ec8d4892bf546deb5b7d3c0fcb343a65f2b41c1e2c2400e23ca8dacc075e2dbd27c3fa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+pst-qtree = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5bbb7fdd477850e4e6c2bc395665c50668a427cbe176122d160fdfc2aa2f322ed83ec43929dd185fa1dec439bec3f5de719aa8d640d0bc498aa7ac9f9089cd5b";
+  sha512.doc = "4a0bba9fa7072e5860403c3b22a23947045106fd4b89781af848d17afbc5ac456c77617979ebcb80afe07620ab8b990e868c688301c4637804d32790fa4bd7f4";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+pst-rputover = {
+  revision = 44724;
+  stripPrefix = 0;
+  sha512.run = "3bd94d3a37fc8bbabba547a0072618c6e2bd2f6052f95cd4dd8cb973f64c4e97d0c7ef72fbe425df032aacbb8cb109b0eb06ee304b725ddcda6489da2c893934";
+  sha512.doc = "16bc8c2500c19cdaeb701da98e4de0ffdc13116a0ed5802beae395e9664ee16acc6341db7d2c3ea7b2a16b0afac35503cd5a53e1ce1fbd67598be4c890b317d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pst-rubans = {
+  revision = 23464;
+  stripPrefix = 0;
+  sha512.run = "360f1a04170358b976bc8b6d4d4ee138398f6b018b5611811fc41d90475c474e89fed214708d11b47bdb58cfcf983b37c3338c4d5b13b13825f3388d1562372b";
+  sha512.doc = "086f80c0b99a0043769b159b6f52de125f01e6c3b00189b0924c62961b934121b09a2f1634fdeef737b2fc468c392051f8b117e1de5d7e6d223e79ff443c2cae";
+  sha512.source = "f62e689c044a0600f4e303251329033e705f3d08b025214af34cc85488f347324d552594a321f88ecf91845b5db5011875436ba9fdb819dbe038dbbe012c4676";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+pst-shell = {
+  revision = 56070;
+  stripPrefix = 0;
+  sha512.run = "e6c12f5a1c8eb6b521e6bd3d76609a750bc12633de1645f6991a177d633043f1c5597091b34639079bd007d81302ecfb6715f826ec42353720863885e1d3a1e7";
+  sha512.doc = "72185b764b1c282e772341b9c616b27252759f8e0ca3a776770e976a31d160cea7ac74f23a982e088dee50a86a9af73d19f3f695a24f13381e88281c8c33577c";
+  sha512.source = "b49620358aa5b8d57c4f227770a59ffe84a751a494ed459c8a61602b3a32621df6a31041311f939c4da6ac2114c5c4381d2ef0cf1ce870ea41081d9d920f5902";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03";
+};
+pst-sigsys = {
+  revision = 21667;
+  stripPrefix = 0;
+  sha512.run = "db3d3dd31c4166a132a174cc9b2a86fb226496c663c1ba95b36f6590e18799c5eb4e8587ccc3db5de0d3833729ffa90080cf037519b2a7ba24c70fe381aedad9";
+  sha512.doc = "ae2869eaa649898daf057875d28fef1be5f20caf0b7385ba7723e9be51e534cc69b953bba8ad4fa6d04a0d67f85659c82ec08043ba760279a6759c20a2c27d0f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+pst-slpe = {
+  revision = 24391;
+  stripPrefix = 0;
+  sha512.run = "43905d7525acca6d10261e169a1c1ec1ee0cf0d4b7fcd05643dea3f705331588d774649ad5ca560111269025e92a1e91796693c5246e4d2b2816dd33d4eed87b";
+  sha512.doc = "377a89c5dcc49e587e3e2d2e1221c289da9dc6b3cc0565bd182d0ec356835309c12eecf68680ac4083c906701365de0068608ee1e49ea9fb95c866a188931a67";
+  sha512.source = "f8579912fb5477394f8eb150de776b9a15dad8f67b821a073748910388e06c70b23163fdabe260d55216add2924879f5380915c5d3ebbb21f0da3c65c6f82f73";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.31";
+};
+pst-solarsystem = {
+  revision = 45097;
+  stripPrefix = 0;
+  sha512.run = "48c38ec076b20b28aef50c207a77069cf5053a209f4ddcb3adb5a8e01f2b6510abb388075c7e5c90b6b48ecdf6f92764836dd58fb51181e28afbbe6d47600abd";
+  sha512.doc = "581e73c180e455adb09453c7f535de5a3f540c3d8046ea0a1667f9f13390cf63297b9073ef66d93f4c6b2aadffad3de24000a49cbbbe374bb7af75402fb6bef1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.13";
+};
+pst-solides3d = {
+  revision = 68786;
+  stripPrefix = 0;
+  sha512.run = "fef032b9aa9a87711e2c09e0a7213a2c3e70451e64060ba9fad81beeeababdc622ec46107f077ad2869a8ba9420fd81e3e9df96ba60f98530fb3238d4bec45ee";
+  sha512.doc = "3bbdf115c8cb4e0dec4deebb1bf8af6317eb0deafa19054404f992f79361a913b26e1523a31105b7fe0addcfef438a016d6b5c5780da564fc108a58f449ee86b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.35a";
+};
+pst-soroban = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c21d3f0e19c4cfcf79563e23e760178de6e39f1f42147f534946fef315c0514968548b30d24eb345f4f2c5cb7807fef4f0d45d8e345e9523806ce1e054d8cf11";
+  sha512.doc = "b7c1422ac43df949426581f7dbe749300093ce2d20145df768e21e893b9d2c419ffa8ab16c60fa509f09317bee4c7f80bed4920b92a5f9f2e9289eb93cec5eec";
+  sha512.source = "49fb276ae7277b1508ecdcc3132d103e26204f314f8779a556335e1875dd5c3c6768b6b152264ba5643d2c39eb275f7ef193ecb6a292135abba2d60be508d654";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pst-spectra = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "325e4f07e9c2788d571c6105e1fdc3a097881d1b472b038c365c65a84a4e69e15866750720b2c86f5b20e00fc3a054f619e79b6564fc3712194a1a5d05edf248";
+  sha512.doc = "f3655f399c4986b122253c4849bcb15d0ea4d2390b0ec3b8328d8255e5e2d44481198d63c6ad9dc10365095414267285ff02a944c1bf5bfd8c458d1a7cd5a0c5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.91";
+};
+pst-spinner = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "ec6925c95e398426089234227b29a2129a58097d1536b0f1569c4a0e6b4d7deeb0eaf7d9d5ede851c93cff49da05772b6113ad7ba0cbb34b854e3b2261bdc41b";
+  sha512.doc = "1cb4907c6b5feb39c947361176edeeb4da560935d53b3b56507642142f3dd61d98caff293c0d686bb33383c706f1cd865dc3644379564310b141c3f0204cdb57";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+pst-stru = {
+  revision = 38613;
+  stripPrefix = 0;
+  sha512.run = "bc0961c1f9afb68f66c4af9aa9d37cd8cc7c6047f55920d12cfb14a18b2c2288c8468c8d9f0e21eb7e395eaa884f0216b37a6fa947fb2c5ef51d57996ba8bb5f";
+  sha512.doc = "b9352eb01e9d80049a474e0b5a513bb8835be16af4226b4f4269d9a94d64b81a842e640ab316f066595b0b6053080042deac4b0cce1bbc602ea0e029f7809cd3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.13";
+};
+pst-support = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "05ddd6f09d603a2a6887f03aa3da0374ad061e2ab52ad25f0036192179f985f3695b0248c602607172c94c55cd9d2bb453e8f145d73f133bf79a881ccb1daacc";
+  sha512.doc = "ab2adb2c06d4f7f4b4a4fbfec59e1fc8d6b9f4ccff5aacc29f0a1524759fc1f0792640e8cc301e614477ad45261bbedb3ede93de2463e0a655aeff846561c185";
+  license = [ "lppl13c" ];
+};
+pst-text = {
+  revision = 49542;
+  stripPrefix = 0;
+  sha512.run = "6cf40d3dffb7803959a187f6a19b137b824d46ea73bd31430e983abec0b828d49c6d404287382242ad224e2f51feae74b3bee374443e9f421ae70d1ea2c0c3b6";
+  sha512.doc = "87f213f037227c05ceefbcee7ab8a316b88ee6f9ddc366c40cfa7676a714ec6802f3781db8357224769216241feb9171668184534572ebe5c5776c1553c1b62d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+pst-thick = {
+  revision = 16369;
+  stripPrefix = 0;
+  sha512.run = "5eab2dfdad0c9fad21cbb7d4484f9701bd48b225e881e0c86a2418afa143582aef160bbf4cc9f5a773aea97d2c12c7f614f41fd87f0ff2952c27ddac91f75905";
+  sha512.doc = "5d75bab3e4b5c18a14e7348dd97a3f7e0895a2b44111a72d87ff8ce7c7c0499062f61b4ff38b2d36b0632719fd58a33c91f077edc269d74fa58281a83752e9d7";
+  sha512.source = "c3cbd54dab4d8e71a2d6e9f94cffb1dc0576344032d3af01c21a4ef0f493c5b886fe6f99e7361f4ca0c9b2e01e68e61e0f8e74b5f511cd1680b20eb01a068030";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pst-tools = {
+  revision = 60621;
+  stripPrefix = 0;
+  sha512.run = "591dbff503faef5316eda8364a422d8810524775e6c6b59569d24928c8702c54463e4433a3c28953d2f36c873aa6a6e52c71dd9cdcce5bb0c362ab2231f5a165";
+  sha512.doc = "f61816b6be166d85ae238cf5651e2e1960a5303b3bd3c643e4fdbcc779b5e59f49ffbe53bd6e2830b2bc28289baad3b089eb01ccbd7bee4eb9805728cda4309c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.12";
+};
+pst-tree = {
+  revision = 60421;
+  stripPrefix = 0;
+  sha512.run = "39d6f88d9b0dd4280cd08cad6524fa693cf727bdbacf16063d76e100e16f957602124ee71421e88f389a7ba5070a932d779a2abbb64d791bbc071398f09a8708";
+  sha512.doc = "6ac862eff40eaa1a8cacc5c1a1d4886e82dee53046d3fbf631ec23bfb59490fe89bdde5f2767cba35e8d0439fa7b7688669b50ba3ce81698c34bcfc9d010a7e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.14";
+};
+pst-turtle = {
+  revision = 52261;
+  stripPrefix = 0;
+  sha512.run = "df30018ed03f10edbb9e215879f041ed6eb0db48cf0e7e2b5128cd3339d1005ef074aa0631c84bcfd2c8f9c1a1a69a26cac36248f3971a3b3302e2f763af750d";
+  sha512.doc = "22c14f1eca2aa764bfc250d8140f0a24f3dab1cb8e755180167ddcd1ac9224aca07fb41408823b8933b73293204053f7f139513781ff37a67ca9e0ee7bec4fbb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+pst-tvz = {
+  revision = 23451;
+  stripPrefix = 0;
+  sha512.run = "79e206f5e4154a797cf168b1b490cac8e1ddf98a79de6ddbd9dc98cf53eae01301c034643f6660708b58e890ca94b7235e5b0f48e53136f32c12c0adf5749179";
+  sha512.doc = "ffbba30214dce83e7f00aa7c6e126919cafe341dc727736e27a5af8ae212dc66dafa49afba553079d6857258ca72577950c06ba2deb21ca3c1b13231d1909935";
+  sha512.source = "ea0d7dc35ccef586bbe4dc225886755b28524b4db4ebcede6fd41c51bcc0fc8e7fca1f7a326d12524dae478b5a9228cae413b80e7a2830f0cd729e7efa8bab4c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+pst-uml = {
+  revision = 15878;
+  stripPrefix = 0;
+  deps = [
+    "multido"
+  ];
+  sha512.run = "e4ff8ea9b7fb9f530e33280de3e9eb20d653c0c062fa80611a544daf74da0b1dd2481b43d8f5258f9ebc1d1bf95b393b32c7152ab8464a9e980cefa105c45ceb";
+  sha512.doc = "d8aa92785c241b6346762d98349d8464ce604afceb8774ef160e8c24e0a40d3fd8dba7cac3f78cbf38cbf6cfebb79939ad3c76e6b4014c1028859aba38123efe";
+  sha512.source = "8b7e551154c1b1966046268ed3353b6c78c3a66bfa20f44c7fba3b58f661f2585b71d49d2dd673368f732b2f9446dc7783bad4ae5248169a79721d330a49514c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.83";
+};
+pst-vectorian = {
+  revision = 60488;
+  stripPrefix = 0;
+  sha512.run = "e3898a6b489afe685bfc657760702bd5e2e44fce2ecf6e4af28c1a6eb36173fc653e003af7b7879fbd3a342adfb89b8cf47168b1f1868815fa44050495d15f54";
+  sha512.doc = "6bdc368c391d12e6fb54740867631c7ba62b66a889e11dd40668dc7bcf5f9846e4414f84b706010505d3032b132735a9247e25193b952bd3272590d47d59172b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.41";
+};
+pst-vehicle = {
+  revision = 61438;
+  stripPrefix = 0;
+  sha512.run = "1cec74ed600c4c4df629942b158d47b33f26e3a38d3d363cd506e5dc7c9673e0da1af4af8bbf71bf735693d15f0b02a36d8b148e07405ff4181efc820e73eeaf";
+  sha512.doc = "e252811d71bc400b3cb72a29fd9099247044cb1d1c79676cf4319d58cc60293839b022a73706a9685434d338c9daa24e8b9bc5b7390a75870379385dde0d9c7f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+pst-venn = {
+  revision = 49316;
+  stripPrefix = 0;
+  sha512.run = "63baf8075ef294bc3a909b3160fa7868a7f179c832d680728fe463f8b1c058411a1393614ade666824fa3233d6617b1dd4e0c50c299a620bc459104515c85727";
+  sha512.doc = "e332f8ed24744c03c32bfd139a38dabfca1c6eaf9c5c4624d1579c16feda26e42e81b39dafc98527e8bdaacc2e3ff2d246c6f4b88d89bebfaadd57454e08af7e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+pst-vowel = {
+  revision = 25228;
+  stripPrefix = 0;
+  sha512.run = "6ee1dd91b42e319e3a88966fe4cb7327211e5859ae9bc9e262afbfe1fb7f143386ecb70a71d6b24cb0c794cb0943a6cbab4eb40ac683c55a7ef1fbafc118e132";
+  sha512.doc = "4fd8ba42b0d4ed821abe52e5848af0d19fcf12c2b9660f09a502561fcfbeffbe38bdf2a0540ee79b99f50cb3c783ab4b5d003a59cf84b3066c364daa7dca0eea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pst2pdf = {
+  revision = 56172;
+  sha512.run = "a266409d6740653bacb23e83b98e545dc462ed879299b195d65761b10e4700a797005ca231fc24e37a42591c09ba93b5ea6b8b82ad8b14a29a7649cdb3f39b33";
+  sha512.doc = "5805c535c8a043fea721093a4b7d2ab06c86c80d4a45eb3d603986b898b6d2053d041b638874e53c79e2d815a929749e02ca0986a2f8cbb400a2fa87581462dc";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "0.20";
+};
+pst2pdf.binfiles = [
+  "pst2pdf"
+];
+pstool = {
+  revision = 46393;
+  stripPrefix = 0;
+  sha512.run = "a97af35dfce4a137af97071b49e58c31739e6f271afc62a455db473e573148d25fc27937ce680c6f400a200151ffd73867d5dd8781b12a63c68b7bf256cff5d1";
+  sha512.doc = "613cc4899b1d76e0686cd269568cfc0dda437cec0e50571086b3d44659dc4b3e3d567dec88b5420e4c802d676f21c2428b3930fb6bb3f7d7faa14c029d35d43e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5e";
+};
+pstricks = {
+  revision = 68767;
+  stripPrefix = 0;
+  sha512.run = "606b1b487d523253c71d814289ccef2fe9c91c091f7b588fc842b2121da3ec592387774565b3e998c44bbf0ef17df0dd2207f632ceb8bb04df8f8b203603c4d4";
+  sha512.doc = "5df5f84afd8793de4201738a032df4c95ec017c67fe19966d908221e3ff69e77589f051232d1fa8fce7f15fe5702ec3abb6080f4676c2a31671543933ed32ed9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.19b";
+};
+pstricks-add = {
+  revision = 66887;
+  stripPrefix = 0;
+  sha512.run = "073ce9b5f97c4432d87f51a3b239c758e2840ec894847c334dcd206433e6c0a45575ed2214c00bd013f9ddc0945a696a8eb45b2efc62d8425d1c9607da658850";
+  sha512.doc = "552fcc2f0d448bd1d7f643a5c9f2521f72fd61a653363eab3bf6f31bae306a9c6694ca8d64ad5a5997adea9b92978aa366ece8bd7966c9d129942f8f487b99f3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.94";
+};
+pstricks_calcnotes = {
+  revision = 34363;
+  stripPrefix = 0;
+  sha512.run = "1b17e544484b71f3c29e5c3e1bed6021658ce7b9a256c21c004113b722a85be7ea6861753230910771b7c900184ca8cce146408301e75de79e0c2bf8939c49a6";
+  sha512.doc = "bab8492549fd268f856e11f5f6db4e1ca878c67634387e7295bc163cd17080ee6b685893ddc85a882bd895adf3689639bfa7fc7d0da5e9916ef305c18d94ad65";
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+pstring = {
+  revision = 42857;
+  stripPrefix = 0;
+  sha512.run = "d77c937467a9cd16f24fb1374a0d797db04bc301fa8a677712e09d83b58df6fd12aad8857dd83f4d5278d799a0d1d52ef12106e8106921d1ec1453ff6692605f";
+  sha512.doc = "51c316c27c3d4083696dd9ee86e378c83ed09c75c632a7f0a580bd84d0033c7776008056a4b26d7835a4974b879c0f2b0389ae83c70cbd6ab093bc8b2add9ed4";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+psutils = {
+  revision = 61719;
+  sha512.run = "1489c9cd3ae9e1063367301f038cd52f0fd7f5b2d548ea78c06a2bff56100aa613cd01026ce601527b6a32f88b6ed1df96f9c8c6a591d16a63dccdc8e32d6969";
+  sha512.doc = "8b4814c2a769b1ea8831aa945352f31125267aeebedd8dc8abf6381928707799bcb1eb29214930152046bab63b1a56179ea035ae6568595fd5ac83bbbd22f588";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "p17";
+};
+psutils.binfiles = [
+  "epsffit"
+  "extractres"
+  "includeres"
+  "psbook"
+  "psjoin"
+  "psnup"
+  "psresize"
+  "psselect"
+  "pstops"
+];
+ptex = {
+  revision = 66186;
+  deps = [
+    "cm"
+    "etex"
+    "hyphen-base"
+    "knuth-lib"
+    "plain"
+    "ptex-base"
+    "ptex-fonts"
+  ];
+  formats = [
+    {
+      name = "eptex";
+      engine = "eptex";
+      options = "*eptex.ini";
+      patterns = [ "language.def" ];
+      fmttriggers = [ "cm" "hyphen-base" "knuth-lib" "plain" "ptex-base" "ptex-fonts" "etex" ];
+    }
+    {
+      name = "ptex";
+      engine = "eptex";
+      options = "ptex.ini";
+      fmttriggers = [ "cm" "hyphen-base" "knuth-lib" "plain" "ptex-base" "ptex-fonts" ];
+    }
+  ];
+  sha512.run = "dca32af2c2742207b380c909190204049e29eb9c824f534c39757e3544e305a9395c9fd6ff76d855f1e7fc67e0999bfd863640fc2d2f45dc44bdaa7df543568f";
+  sha512.doc = "160902b1b32b9725f4c7cabd06dfb612fbbeef31845df108efd50917d85ef619ba62d03760852d31a21a23e2bdcb5035292b317982d7fede260a696041bb2293";
+  hasManpages = true;
+  license = [ "bsd3" ];
+};
+ptex-base = {
+  revision = 64072;
+  stripPrefix = 0;
+  sha512.run = "b937359bde7ade3645edb6435a824ee6af66e51e7cb518694706224e63e4d92391911f01745d331cb92e62c34c085aa5f284babacf6f7ab0a0474cbf06b00859";
+  sha512.doc = "85b6422630754144e4f9c552899e588f1650af2837cf88e8f47106e2919bee8dd956002e102f83dd76107edb0e61e2a6d4ebfaaf6fc06289942fdb32385454ba";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+ptex-fontmaps = {
+  revision = 65953;
+  postactionScript = "tlpkg/tlpostcode/ptex-fontmaps-tlpost.pl";
+  sha512.run = "b864c185b5718dfa76e0d4385654ca8e319ab0cbb59911defbec8d6198879265d064087df233d9020f3abc4bebe0742530f40b2ae6e584dbb4f5b6ed7ff28d07";
+  sha512.doc = "4b21fe546634aad338630520bf68fce2a83f8e6fade99d170ef87a92c8308dd289ed130bf67bfc88419f8752454ab04730bfaa68de90535984590ce8435d87b5";
+  sha512.source = "028304d777bfd5155baf89fcd4003bec43e5a7f3009aa9250cfd13277d085cbe52cf49511cf664efa0c886b1681475b0c25eaa65624bf0b77d4ab4403ebb457a";
+  hasRunfiles = true;
+  hasTlpkg = true;
+  license = [ "publicDomain" "gpl3" ];
+  version = "20210625.0";
+};
+ptex-fontmaps.binfiles = [
+  "kanji-config-updmap"
+  "kanji-config-updmap-sys"
+  "kanji-config-updmap-user"
+  "kanji-fontmap-creator"
+];
+ptex-fonts = {
+  revision = 64330;
+  stripPrefix = 0;
+  sha512.run = "d625f45f7211eca1152a16814ce87814cc19eb7d6646d4f66971eb08eeec50bcf91ddcc253f4ffe24418a3e2a989ce10c03a3536730ac286980742cdfa22fe67";
+  sha512.doc = "3a07313f79f31d09bf96c78a574d00d57641df75b9eeb89c76425ee3d6cd51d1e6ad6574fffdeb834d2bc2fa8c41511561aec34ca6be2be43d55da6227d19a19";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+ptex-manual = {
+  revision = 68147;
+  stripPrefix = 0;
+  sha512.run = "ffad7c7c67e7c6c92ec7b814cba8ca8cd7fc9935d5b6c7f685ee83b97cca56ac410ee2c15f8d86f4bbf443508f2e2224603c9abc64e734451ee94ce968425d62";
+  sha512.doc = "dc2643c258a98410d9a456e16794d70bf6de6e1a40b8db2bcf7fb40e20953bbe482cb26cf3e65b0caa19806e915cfdd3787ddcbf69108e2af0d83e03d3b0104b";
+  license = [ "bsd3" ];
+};
+ptex.binfiles = [
+  "eptex"
+  "makejvf"
+  "mendex"
+  "pbibtex"
+  "pdvitomp"
+  "pdvitype"
+  "pmpost"
+  "ppltotf"
+  "ptex"
+  "ptftopl"
+  "r-pmpost"
+];
+ptex2pdf = {
+  revision = 65953;
+  postactionScript = "tlpkg/tlpostcode/ptex2pdf-tlpost.pl";
+  sha512.run = "6a4246d9fbc7cc6f37319d338df8320769cd4b1f0247186beea117b8bf228263f3a330146cf251a9e8e8c7232eb894ce6dad9eda840dd4a154f2502eae4c0f57";
+  sha512.doc = "5635ead2dfa20ce9b616073272452de5c68c55104d88b2362b87cafe4762608d681b0c370169bff78466520d14f9055e509efdaa4ecdb083c3c3111ad829978c";
+  hasRunfiles = true;
+  hasTlpkg = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "gpl2" ];
+  version = "20200520.0";
+};
+ptex2pdf.binfiles = [
+  "ptex2pdf"
+];
+ptext = {
+  revision = 30171;
+  stripPrefix = 0;
+  sha512.run = "ceb8844ff23034bf730823349e6251ef0c7f208ef74c3ed61fa212af89a3208e8f9f1b74b7877698d4459047b64376faea647a919b340d306d54de43ee9617a2";
+  sha512.doc = "31ec6dea18c99aac831f4f180ccce47781ce98b2a8859bb62019cdffd690a8b803cba66728d1a9805a8a39de9ef43e357be8fb6a16e0602cf67f7f9dc6cb317e";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.1";
+};
+ptlatexcommands = {
+  revision = 67125;
+  stripPrefix = 0;
+  sha512.run = "2a2924af70b0ed8d76f6062482a500371d67d5a3bc0b87382d76626b34da9c1acdf9c123ebfdab2e5e79041b10d0e327e9cd732781e5fa1620247bdf02dc21fb";
+  sha512.doc = "5b9fc92a4cb3597c0c95936d5fb6ad475ca4f9896f8165a0e391e591bb3fc9ea75ae79c14ee62197200d69d577df8025e6017960beafe6bef0bda90a6a615118";
+  sha512.source = "47c0d8ffd0f352a39f54ce32696fa67d25dd438de8fede88bfc5542409cf5576c953b40180b5ee1f469067e2ae5ea8543a68c84246ef9ffdc3c51c14866be690";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1";
+};
+ptolemaicastronomy = {
+  revision = 50810;
+  stripPrefix = 0;
+  sha512.run = "58202171aa08b297e2999554d8b6ee43d4c5772e2f28fcf73c11a00ff8476dcdebfaa5352c7d248720feab2ba642947f07362cd9124dbed27e22086123da3de6";
+  sha512.doc = "04997eb4bfd5c5e7789b5db02e9c27a9eb4d65e685be1428c5b81199957dff5aca626a76c719d871217ccaa2a6e6eef6c17ed94f4ea161f581b77a22306d61f3";
+  sha512.source = "2a2d250d5deff043970037268b6f7400e073da58b1e6fce0d2a6e2b0c77a567dc683f616fd7ba67b659bec3f137349b37c84b808364bf5359392026730af3aae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+ptptex = {
+  revision = 19440;
+  stripPrefix = 0;
+  sha512.run = "a2c31b2e039c198d3c3c84cb58cc0b9326bcf11b4c361c1d5c9b8f5aa4943f14b30e722bc2425a38b69935f4c88c67439747ffd65e0a194f2e5dd54a6448bbde";
+  sha512.doc = "0e754625fb8507591f21b860901de1b06bcb31f5c0b2fd7df1fa5257c7c611bae4f575f7387362bdd21d826a329a8af3ba00fd30c3bc9d91be7dea5d66e2fdae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.91";
+};
+punk = {
+  revision = 27388;
+  stripPrefix = 0;
+  sha512.run = "a442a536dbdaff9dfa9d1cdfe1a084d0f4e4e28174a424cf59a1da94013e115b9fc6294ea3362c85cb770028c62b21f7f7fa9817dbd68787498199ce585589dc";
+  sha512.doc = "33842d1fb46a78654d7351ccf88b40b87e6e03d83598f661ac21ee99d45156dd8b37a652c5c8e55506f95fc57b83e7f62f6c90c3fea5443dc5bb6590302b3e7d";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+punk-latex = {
+  revision = 27389;
+  stripPrefix = 0;
+  sha512.run = "e44098c082465aa620d436a41306c9a1f36075c2612aa045e7c958151fc62e9a740584d9a9dd94b0c5631c00d406762a8e35f672931cccd3c09fe95850f3a2ba";
+  sha512.doc = "36a3341d2dca08941a923a1f407b422e96438e79ba5e3911a89f13d48317ec5aa0f5afccc7539b0882996fb872b38bc3653f1e5b088805e5ef7c9d96a4546d01";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+punknova = {
+  revision = 24649;
+  stripPrefix = 0;
+  sha512.run = "bcb37b02258ba406e8ef3965619c99193c08a4e1d11f771b3c6b06716eac16134be81585220a581176d9e8b4d7f488730ada3b5963238ff982be400cbb41d888";
+  sha512.doc = "64df58c8996563a447ed7a012c6dd8f5248c8a7db06089d776e8ce64d516b4a0c4bf9042f587c996c7ab61582bba919551d352c9ca75f8696bcac5ad0e34866c";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.003";
+};
+purifyeps = {
+  revision = 29725;
+  sha512.run = "79d99ef7ebc462c7c65d03f23cc85b9f136df2b0c9d647fc0672584fa57bfb7447f6db0e6d6b11bfc738cfe8c8658f45fe0b4059ff00f355e4b21d44f0d4102a";
+  sha512.doc = "3f9fadfb35596835b250cab98b0d1e3c6d537cfac5878e0b9788aeb5cc7ef455ce3d44f7d0f03e9002796a162d374f6aa8f9bce5bd4c3f0e8937040de0b82a8d";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+purifyeps.binfiles = [
+  "purifyeps"
+];
+puyotikz = {
+  revision = 57254;
+  stripPrefix = 0;
+  sha512.run = "635d17a49a905c99e895df3e777eed02f4c5e91a38d083e57890cd13c927bc68098d5f0864d6e32b2585d288091d15e5cc1303e04e26b2267d7e78a07f77ea0d";
+  sha512.doc = "64750274694fa8c7fc792d6f5ba19ab756366eb87668469aa6da9df74f4f7bc571772cc6a406f7c3453f306f36516aca9c2444ce126ff4968d1cc49d2c4585db";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0.1";
+};
+pwebmac = {
+  revision = 69027;
+  stripPrefix = 0;
+  sha512.run = "aed495ad3c056a34f63416e570db395125719e9a9cb05c5043bd4f0d58713c28ee548c931a5c18d316d0a2a39c81671788f87b422f01148cf9ecdb52ab2a87d2";
+  sha512.doc = "0312806d06b3db91d2e0bf3df2c1f3dc8620c1f6b59e4e968232631edac217e99bccede5d9cf133f52409d8a664f69dfa072ab5d205f67fabafa0ee74db90d20";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "4.11";
+};
+pxbase = {
+  revision = 66187;
+  stripPrefix = 0;
+  sha512.run = "34fef6f30f53ea2c67394f931168025f7dae7f6e12904b862ef821040a15eb3eac0949ebfab7b1b3dfae8e9944fdb85b99294fc6214df0ce8c1b82eac2702ed2";
+  sha512.doc = "4e1fd7e88d8e17dbc4f65a7dab0f3c4bbcccf3b24b55085fafc9f393cd99a653ec2c4fa41ca85760436a1c7c6121848c57912ff649c302db6966a5c907dc0209";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.4";
+};
+pxchfon = {
+  revision = 68103;
+  stripPrefix = 0;
+  sha512.run = "c79d32b99873e5262d3497846af0fe8c327d574ac61030241a8a1d95e4439794439cd3fb75cdcae51206e76bd4218a6778717492c036ab71aecd8e67a0040990";
+  sha512.doc = "1f50dcd95cf37669330d426238d398d5bfb2503e4db06287f7a361ef87136547d1020bf1d35fcd9504ea5017dc9ec0a0cb8f9298e4d178ec4c7cd426d91f1d6f";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.0";
+};
+pxcjkcat = {
+  revision = 63967;
+  stripPrefix = 0;
+  sha512.run = "81a71b6cfdd280f65f392ad602291d468a8ffeda440609f513166b88bc1af298d6be546e953e4f3a9abac3f0bae235c12b124e11258c53c1abf778f3f78f3559";
+  sha512.doc = "69fe6721aa9aa17aa1aac44680e7a520b7fd002c8fd06d2ccdde0e4d20a17875b9b585394159528fb9bf2c6e817c8e3762efce21a938217a199e49094592ec50";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.4";
+};
+pxfonts = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3b50d3f04c00cd080495c71d9387fe9c810ade7d83ead1178d661a618374a3a67c0fc70ae2a809d2b91db4afaf352b1596a588f6998a4eda220a6f181390b6d1";
+  sha512.doc = "71898d307cabff64078bbb98bee9417c79504fd56f1cfc1427b9e4ccc9448b5e2e8436fa085a63d6fa6601e591673ef52eb2225ddfad5e34943456a2239206a5";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+pxgreeks = {
+  revision = 21838;
+  stripPrefix = 0;
+  sha512.run = "d3f8ff3c975643d74dd92e749397d01f8d3fd0087a838271a491791fa4bb2d65c852ff5989f79952d40547a601c97fe0274ab4407a8e73aa047221934b9b2e9d";
+  sha512.doc = "22239223646ea121422016119b6d0edce32d002bf361d096c173857b36ce324ebe2e4107bc0eae650b50d0e94775c84f480768246ee65f975ad5a24af0335158";
+  sha512.source = "9924c5b5a60d381efc41f77f9b5224a12a158fd7de6551a17b1d32eebb6ca6e80a7686648a81774398c4e25fef759612c652fff983a635f4cf56c5bbfb52858d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+pxjahyper = {
+  revision = 66272;
+  stripPrefix = 0;
+  sha512.run = "f6e62e0dd4a5da2e9c702fc09c311a0661d58668c4999eaf5209792d3c88001b9e7d80cc1a9c259ec5e2668a7139a4fe90dac2b23ea756f238a387a6c7e66772";
+  sha512.doc = "f08af33a25f837e86dcd6dcd0f96d9f7bb2570eeae9011201468fdc9bac50bb8ea72d4f069753bb0c93aa9d61952cebfbbe936f65220167e4648cb206b901aae";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.3";
+};
+pxjodel = {
+  revision = 64072;
+  stripPrefix = 0;
+  sha512.run = "a44871d5c059df8962a135b6f40c3ab4d5d751bcefa5565e428d4efd8f242f34bdbb142a065e011065a8791a141dcef022d5e6ddd6d22cf78e369413b62f046c";
+  sha512.doc = "3a85af8fe9f557ae10468e5aab8c6a19c45cc1f99dbae5a3e66530484074ea91f152177ae3ba54cbff8869178055e53b7282674eb748d82d789e767f16e075e3";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.3";
+};
+pxpgfmark = {
+  revision = 30212;
+  stripPrefix = 0;
+  sha512.run = "eb341eaebbe2fca860c2592c0d24f6b5c4ef0f1e6b2bd731d48c1994ded7afa01bd5cb365d3f30147f68855777defc3384038aa652240178fc948b5225cb4c08";
+  sha512.doc = "8a80eade76fa7b5e5b919136e499eddb5ff534042fc56eb8223e80124bde97a39a65d31370037cf425042a1ae516e5888c8751388899ae65a8b561f091693c97";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.2";
+};
+pxpic = {
+  revision = 67955;
+  stripPrefix = 0;
+  sha512.run = "4eade52198c6ed8a9e04380cab15098435b2e158f8662d32c88599e02e49a2f7f6257bbd6fab8d3c660e61ff679aefb38d29b4787fcef0a3510776a21707526a";
+  sha512.doc = "28151cfd56136ef07c9402fb8f4e0da4a2694164a38e7eaeb5045845731b0b204813b9c0f2b07f9998619feea24effd049cb42a0057841a6a3b3bd998dbc0124";
+  sha512.source = "f5281b971ee70e963cb308a1906bfe8ef96939005f8b5972680db8565c1d0c9697d674426b0833064a07dbb086163c621d764125b3432af3d960a3e466b250b5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+pxrubrica = {
+  revision = 66298;
+  stripPrefix = 0;
+  sha512.run = "0ffdde0f17b1bcb90a858d6dd6ca204eea552b49e91cdc797e6364e8b59cca4808a293154426f9c3f52dd2bdc27e93c091bbddbe6c15862fec144b9e4cd6ea9e";
+  sha512.doc = "e2a217a5029857d66882fb5a626e7846a2cd282b9cb2f5a65e6a61919bc7ce23a16294bfc27e9b189a8aee6bcc95cab24a94a6dca221f63d650f38c5e5fce28b";
+  sha512.source = "f513b8bcc4e89323b199fd4c793a9405a94206e9498f3c298fd81a7fb07cc46a6e624e71d30b8a7951bb7b081be3ae8c621b992a0c290e0334c834d83244fed7";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.3e";
+};
+pxtatescale = {
+  revision = 63967;
+  stripPrefix = 0;
+  sha512.run = "5198b276ba052495662e7adfba51b039bfc355edc01c206b6b5745338dc43e977ce7a48cd11fab3a71f6e8683f554920bfa41a427d587742d2f64f18e058c5b5";
+  sha512.doc = "e3e3cf332727476e80c65118da7e7ad55f9f1c1f6658d2919aa37622bdbbc082858eef4ab718e0632752032e0f4e315c28ab8a218902509b3dbcc32377a02994";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.4";
+};
+pxtxalfa = {
+  revision = 60847;
+  stripPrefix = 0;
+  sha512.run = "33dfd01f714a662f351fbd3a0e0f36c413360adac666ca5665c628bf5d3acf732cb61e18190d340d144e146fa04116373259403b9eca314f48dba5ea4e6aa032";
+  sha512.doc = "f547cbd3cc4a0e09034e98a27bfedf41e2e2ab9b6561e441d7656b99b6b883bb51f9fa24d731d403133358917428c53489eacf8c7ede08a963ff06c3d0404c1a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2";
+};
+pxufont = {
+  revision = 67573;
+  stripPrefix = 0;
+  sha512.run = "370d82da425014bc4464415b4f0fe6fa1cb3375979734731ea829942ead4289e1ac6fc47c1b5c42185c97b9013da2e779c90c10454ea2e4b6e5d65540ce4179a";
+  sha512.doc = "551f14e0603c0ebd59c1c250a1f9e894683f69d22de748ee6cca05ee78c75899aec8671fdc784ebc5219163068dad7a98cf94c831d81091892a72e7777bba5dd";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.7";
+};
+pygmentex = {
+  revision = 64131;
+  sha512.run = "097a1eec7e6a969b0c2aef3915d8231d7e6b6c234abe79caa7f7325df22f4976d1bcf2b111c87c9b457250a2c89b5b0a29afd7deb81ee309753901768fb3fd08";
+  sha512.doc = "050bf2576a7305eda104ac928cb332e6fd1437e1852726442694fb7ec88ebe7fb9e7e54987a13b76aa103afcc446019a57b8e011f4e638469ea34a9788a8e7cf";
+  hasRunfiles = true;
+  scriptExts = [
+    "py"
+  ];
+  license = [ "lppl13c" ];
+  version = "0.11";
+};
+pygmentex.binfiles = [
+  "pygmentex"
+];
+pyluatex = {
+  revision = 69372;
+  stripPrefix = 0;
+  sha512.run = "7d400d0cd1af26732effc31e2b7a7e0cb501d712230805204362bb5fc456d379258ca2075f4c902dd6d4bb6004ba154d47ebd6cbbc5febae8d07c113987b1a60";
+  sha512.doc = "3dea8e36fffdc92dd5dc68279e61d0d1bfa374373ada7236b1717b5df7c5cd1baaf2fe8fdfa02c5f64fb8ddbab209055cb707a72ca839e63ea00ffb480f6613f";
+  hasRunfiles = true;
+  license = [ "mit" "lppl13c" ];
+  version = "0.6.3";
+};
+python = {
+  revision = 60162;
+  stripPrefix = 0;
+  sha512.run = "3b2b55d1c8da0c253711ea5d6434ffe3537baf273d8a6798a5455b3170601aec0dfbb418969bd9d79f47ec502a73fa5bcbb3b74bbdd77d242859c0f7496bf8d0";
+  sha512.doc = "c6785b22dc6820a84a9edc573e308a79991b4a67ff1c5b17553c05a75155ea9b981380098335162a6a7c3c25d2dc20665e35b9cf74317b5c865bc6d4fbed7a8b";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.22";
+};
+pythonhighlight = {
+  revision = 43191;
+  stripPrefix = 0;
+  sha512.run = "1018d4383ba04f92d383d2c4f51d30f091528f7a89ff23614e0ebc9e488ef3cc8167de12a42e6a6465c2b3937d849bd5eecc94cab0a9b8003569b06ae2c91632";
+  sha512.doc = "31297eb541060d760fd61ebe169b840cf182f8f857986aba5a2a578373037d3c99ee12ec9c707ab1f9d29564925821665997ea45f728273007f61a5f0bea5180";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+pythonimmediate = {
+  revision = 66461;
+  stripPrefix = 0;
+  deps = [
+    "currfile"
+    "l3packages"
+    "precattl"
+    "saveenv"
+  ];
+  sha512.run = "a6497acbf8b291e3f9c19a788d853725c9bb0283f4d8da67ccbd3b61302abf8a0d46f16eab2711e3767cbcdb79659d8ee35639d206ede7b578d2dbfb33a78ca0";
+  sha512.doc = "f12e6449f307c0229907085ba6d164a4f2f9ed861a9485e5af5d3a76a6dfcf08e7a38c56452e0ed0fc490d0a90bad151b3ac7e8fecbeb716f683e928a0cbb8ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.0";
+};
+pythontex = {
+  revision = 59514;
+  sha512.run = "2e67beb9974eb9a567726d8a68f7d565aeca97d20484ef6e36312100411eef9d9de937297399a98f367a756f6679314cc1a25201ff11936b8a61f8f1f148830b";
+  sha512.doc = "3ec2fe0f095384734575c2c9fd1bc9d485b628485c8ee75cd8fb9ebd6d1f56edbec6f378c7c9e1d5ba9c10c4bbcc3934ddb957dc47a258ac81ca89b5ce3a2e92";
+  sha512.source = "8a3cf562716df588d4ada0273c3340b73e16a01524e02a9c83c4ca781b8dd1763a1deb9e303635878721831e0d57b780c0666b694629106650f639061d2f32f4";
+  hasRunfiles = true;
+  scriptExts = [
+    "py"
+  ];
+  license = [ "lppl13c" ];
+  version = "0.18";
+};
+pythontex.binfiles = [
+  "depythontex"
+  "pythontex"
+];
+q-and-a = {
+  revision = 69164;
+  stripPrefix = 0;
+  deps = [
+    "einfart"
+  ];
+  sha512.run = "6a2ba84da635b700df2a39d69240b62749454d245ad6bb7e7ee8d87f8125f82575fa7c9e2ce4fb2b51bc0af2749135c5ba3bbfde443344ef950f6ce61a79b678";
+  sha512.doc = "885a499e877514022277317c5f4d4fef22e5a0593b9a69cea2021e2326b4f57662daf55977da5078ac45f0146a76a0cc644498ae6c2c9dc49d5e5c8a39565037";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+qcircuit = {
+  revision = 48400;
+  stripPrefix = 0;
+  sha512.run = "72dc726d377bfa13b30d5440f65e3f451a717c32785c9338bc95107a3fd29326d5011ea31a6805fd751e276279b8bb577f2b4a488ad0f380ffad84fbe46e272e";
+  sha512.doc = "cb4d00d575ed8f859722b97af7f15323af85e69b7276947c05770a6c745dbf0e4b3aa1546b3cc82d9555a5ce839b142ea8edd3da166d2c109bf6b829b2ebb74f";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "2.6.0";
+};
+qcm = {
+  revision = 63833;
+  stripPrefix = 0;
+  sha512.run = "f14457229f0cd0a291482b1fdab1970552257cc65955c9df43485c5af5a389d5323073c70b18ba0a6729ba4c7491fa4b2966f341b04ca6ea454d9e85e21ea904";
+  sha512.doc = "f60d3cf3581f7f2fbf7a4fc18994bfdf77b3ff16d148f6036694e477f7b8945b25bffdb107f4fa11d90b65498f8abd034e24a73fe8bf3e610e2d158a08ed429f";
+  sha512.source = "8cfe155d514e9b310b853b0c3b326104f26c207f49ebb0326e455e92e40f7848f3b3c89dffabe13f69cc73b9a561c79a334b4fdafa27cf8b3112977f1fe2960f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+qobitree = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "cd229c1611f269f904d73d276b8b36fb60a373130a3b5bf78508daf85d5ce50cdc4841a25e30c5a0925344eefd93f638e635be2878478f575f32fc458fa9a0dd";
+  sha512.doc = "b3b587bbe835456cb6298804cac2a8d61c85d4bad6550cd355e6a9ba155e7b691c5b2f5f919ded355b21dde9c4009ee30466bcfc5cb6d81e0af0fdeb97aa3b64";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+qpxqtx = {
+  revision = 45797;
+  stripPrefix = 0;
+  sha512.run = "7387592a338e7ba10942e4ed96364e36ca325040bff02cd69bf0f98d471775d38bd63e54bad494f64874e2fd0462762595c5796d7453aa6909fccc2d9d6bd27c";
+  sha512.doc = "6b6fc20f5ec1269d318813b1ad34020e2b5341ed8891c11d2eda6b84884b3782e992dd9dde16d14b2030f2b57e1146fb6da6e761a35b12a3d88e8d865285668d";
+  hasRunfiles = true;
+};
+qrbill = {
+  revision = 67724;
+  stripPrefix = 0;
+  sha512.run = "61a65a020fb5cf012cc08d6d852481ce8712c214fa7cc446ecd0d5a68221f29ecfa710e81889cc92d3f3895105f153ca5fd54b798261ec095a5f06ccc75cc4e8";
+  sha512.doc = "e348c90fb8ee446551fa2747763ad611344279ce00e0b8fc3772f1ca0b9bea674d1d759fc26b8955261d853b264d9e598862f0bf80561f23b4d3eb038a45f248";
+  sha512.source = "0466344e7d7fb00449bad39b5c42b259a8fec4d8472bee7fbca7acb702777f7b30f0a9469e97b3b6d03ba851b13a66cfbb5d87898881ea35089976c0a7258798";
+  hasRunfiles = true;
+  license = [ "lppl13c" "bsd3" ];
+  version = "2.01";
+};
+qrcode = {
+  revision = 36065;
+  stripPrefix = 0;
+  sha512.run = "65ecc00d46d06f8a36cb1f170c12692cf7ef8c0cf9e68bbdc6a7da6b0a7f5fcda6a2e065b8a474609556518ab07c2d12f19a9fdaa0b6339aba94cf35184e26f9";
+  sha512.doc = "406d1cf238b397412a57ed695a39af0ef32de007b94e8650cf591c63882d05d7df18061fbd2b350347c052091202a38de1ceef19f61fa58de38c2e73de6b01b2";
+  sha512.source = "3e344af4bcd4e0d2b49638c33177f600f1e3ff24416ad503f55b3376fe7323ab381c7ee695351923cfc06b54c9ba8b3d1f4705f5377164f2b43ee04ccc565955";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.51";
+};
+qsharp = {
+  revision = 49722;
+  stripPrefix = 0;
+  sha512.run = "29aa0808112111d088f8795ec87ca3df6f2e10f0a8e91347ddc7101733aadc72ba90356f7e4b39fce6484e04975d3e151205a5d5272789ecd414cd0a6afc243b";
+  sha512.doc = "69d74a3ed755d16957a2a844ae624a15e18813fdf02595c2e4ae2dc0cf13b20a1db1c4f49c20db3e4d3343c586411a88c7ecfe6367c4c1efea1a8cb2730cf8f3";
+  sha512.source = "d8ad97902be6b5f29db2cdd7d27049407ebffe5efc8bf0f0ac64e64ed2e3df8f4fe86b8e023ae7dde4368740fdebf22ff6420a32854d5745e8fb147005788226";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.1901.1401";
+};
+qstest = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1461a7e5a88a75d1976b8bf0b6b9a685c7e68bd5983ea1549b277627e20b8e7d0b890536c8e8357e168914220c168cc2be2e9a688b512e16d613107c50622f79";
+  sha512.doc = "a2e138b5de9012b637cc98b18e5aa64b2c9384f03beceda724c86f1e81e03b6da6b19de27fe15724463edc61520d035495f2f039a2d541b4761c44c55473d1c9";
+  sha512.source = "1ff5ae66e8620b298f4cb5ca4d53e420ed0e89e476edae48f1f37fb1785e8bf4693da410cf2149d690734ad11fcd669152ffa7a560bde94e923e772560f8ca19";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+qsymbols = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b910db8e0e33bbc111a95db914958a3261fa89061677d999876b026d25609326b83444a7c6b77ee4a39d60eaedff448ec662dddf9511e99c826a3bddbf0b2861";
+  sha512.doc = "c633094c09c291666f1953d8d8d8570d71b773e70f90c805cb01981117ea4212ce8cbd4ffabd9ca5aaee07637d19c6e627856115b3943f9d5c414034eee500ea";
+  sha512.source = "5c88d0d929f6491b6b9df65ac3ce2be28ee5461d5cae5bc2ecaba64a9012ce4d84cf3f63bec19971ca2e8ec37fa869b8707c8d6ebb9e80f8302cc04127873962";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+qtree = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9f381007c2526f51483d7c190cd7cf86cb399e95475841900ffa8f522d3da71f4f451b42562783d756e252e513ca1f9e9e8586517057a8f6b881cbbecb5c3987";
+  sha512.doc = "c16142acf0c3f9e4f347c9ceff7a6c29557c0c2c4d2232ce9df146279b3cd4e1019e703479f426709a3feeb6ac46fb91f7dcee8cad35b19c83c9893661322f96";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1b";
+};
+qualitype = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "c507e8b712f2ce40474ebf2c072654f00d71f1c21156cecced7ed40ea9beac07790a67250ebb7a535c19a266573edb5dbf8d1fe4d661b7828428cd1c7574a1c9";
+  sha512.doc = "20ddd865622520e4f9a7a1472c03f3c18bac039dbbe10849364a8ae1d0ee7d8771f30a02511a701962b2db25c79c74d3c2aa14f42951c7df9c0feb199092d510";
+  hasRunfiles = true;
+  license = [ "ofl" "gpl2Plus" ];
+};
+quantikz = {
+  revision = 67206;
+  stripPrefix = 0;
+  sha512.run = "af7a59b5fa4111199351b3ee6a14ecbcd6f6e86041a7f516c97f0cd4349a2d96935f138969e0029e4f5f8b8650b7efcef9554bd631c1231d371ec323d7b41024";
+  sha512.doc = "a5efd5af9c89a13afd29a06215becf7544e9643697759695f8be2ea39bd62f99748369591cdc619c18b2bba9f0a0529ea6ba0a7be1d9b4ea1c9a8a8042ff4426";
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+  version = "1.0.1";
+};
+quantumarticle = {
+  revision = 65242;
+  stripPrefix = 0;
+  sha512.run = "432dd6c4365dd1e6dfbd9ea4de2f29f0bf0fe3bb7f29b110354ad7d42c4675acc4df84cbcdabc8a476ff8de260e083d32c1b3e63bf7b6122dbc0d5373847bef9";
+  sha512.doc = "791b37745fd91a13638cd1689478a35272e4b1b04ea1fc5dfe16d8d320576fbcfaf8b2929b3afa12e783fa148cf3d5f422354d8de0976d808f0921839ea3659a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.1";
+};
+quattrocento = {
+  revision = 64372;
+  stripPrefix = 0;
+  sha512.run = "cc6819b03992528b4a564757caf4767c92a00b8ecdd6053595c5561483287be88014b6cfe60c1eedde75160669981baaef1e71cc293d1585e9a7c54e0186fe35";
+  sha512.doc = "f3881de285a603b1fb11c470f0c16698cdb4a4b165750a2bcc17fd4deaf44d5d94a7af531ddb1135d12556317731639ea779d25663a81bd25b578241ae3fab1d";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+quickreaction = {
+  revision = 66867;
+  stripPrefix = 0;
+  sha512.run = "9915f2032b336f50f784dddf14f69df6bf59ea0c1df668adbd36cbddf98df601605ec6a245e3fc2011742f6349c830add2ffadd49e4389c088bd15bf5bbe7a7d";
+  sha512.doc = "c71b5b5a52e12a50cb52632225e9c70acb40ad4796b4b8a922d810e8d5d34da532e3f2b0b708a7a896756f18edc2c39376eef4748e80ebde5869ec44e6af0765";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02.01";
+};
+quicktype = {
+  revision = 42183;
+  stripPrefix = 0;
+  sha512.run = "4950c1c7a4536cb64d70fe8c08a69fd9336825973a7c8a669ba48bd66476888775d1ad288d34d4b83a9d674624960e3d17de1c972f52bd7f329eff971ec0f185";
+  sha512.doc = "6e43ad0d932eb2237106fd991dcd25e5bd536cb64db5988c958b138af294fbc777dc6ce2c2b791e3875a2bdeaf5a10be7d15585b44e7487017925e0068e898f6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+quiver = {
+  revision = 67779;
+  stripPrefix = 0;
+  sha512.run = "b7eda520bdfeebff570458d36e22b1779bd16c14070192072987c7f1131efa33c6f1e7ff8c16f73c338fbfe6ef80e656c2ef061ad9ee15885b7f5e8f1195ffc0";
+  sha512.doc = "42bff285adfadd6655941b0221b2cf0d9a457a638997591220b564040acb94b4c57bb9dfccf90679c81e301618e8e4b5ea19c1dad9fb478dbabe1c2dbe4da991";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.3.0";
+};
+quiz2socrative = {
+  revision = 52276;
+  stripPrefix = 0;
+  sha512.run = "f4fba8eb850a90288a9b3e7f4571f5df560e09e7cba608f7bf2bb3090db5a2c6bc7fc7240ef2e3cef9d37fe1a0105e74c4c63c39a7c1793a1fedc6f86772eac5";
+  sha512.doc = "a51cc19b7d13c0bd4f1ed07c6292940176104b5fb381dece7709a5bc1332edb4606cdd4a66ee5a4e4886754c4d274aeab40666eb45328dcc6c465a29a1c4ae29";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+quizztex = {
+  revision = 68823;
+  stripPrefix = 0;
+  sha512.run = "dbf234ba1d366bdd2a1be442c4bb670efe34d67584386ab1dadfa8afa2ff8551ff03ed9c441f6dc480bfed36ea79082048aa6f0e182f4b9bb5dbce7782c81391";
+  sha512.doc = "5c9242df37a22ebdc33d834acd95f760681eebf32516857d6b7ef866ebd00060017ec058c7a628239aa65cfbe62d0335ec00d786d4f9558ec754687b161ea017";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.2";
+};
+quotchap = {
+  revision = 56926;
+  stripPrefix = 0;
+  sha512.run = "7d94162630e53133b79e33b60abb7c4664d3e486da611e37d48593757f39b0526831cedd0c236ce9b4d8ffc85b35734acadc98236435345180b999d7ea68c1f9";
+  sha512.doc = "e2fa71ee21ad019ef785a3c74ddab5f232d3a6d1e9fcdcedb34c216eb5e6d44abbafcaae5d1c4557bc1e4aae92561a75ba2c3723707328a12cdb6ff4c1b72dbf";
+  sha512.source = "eed36464f1b04852e8af08c5fd91c42ccccbbaeccad565e6f338ed5c87b003b2dd1704e1dad0ce0e49651461b637e8ed613399a0ae8122081e9084e47704665a";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.3";
+};
+quoting = {
+  revision = 32818;
+  stripPrefix = 0;
+  sha512.run = "44a9c726a5a9158fcd13fd93785101d2a9a940f34da3d52efd5be1a0467cd76aeaf4706b945a8de0b4e0b4a90740567cfad87f08aaa92e7d4eeae8eb9f7bbc73";
+  sha512.doc = "b3990965effff7529a7c18cdd3a08af337be3766ffe535feaf54db504a47b0f054af41511a635c3e70c34d3025df419af702d319240ee673f7462d2cf4ccbbc2";
+  sha512.source = "a50186cf1b8b0f55ffe4b2e8447b1232c14c6b36aaa4635bba464de1648ed01adbfa13d8a184bdda8398573b2b9132948577e47e252bcb1014761f4318a76ede";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1c";
+};
+quotmark = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9f21ef20aa9354b1347f00a52df65ea691fe4a00b05b794815279c070d05544611ccd8773cb7c9f8146a3a135f3100a06aaec48acacba255bae9a0654a2a9b53";
+  sha512.doc = "6507fcf8639e780ab844700f6356abd8eb69df6158ee638d8471a112159f95a3df8f358fa40479eefad0cf09c34fc37d9292904ae159f2a79fea5acb93f6e542";
+  sha512.source = "bbc423a9d6f6fca00c5c8dd9ed5dc084d094898ad5b27397147c8dae1f3bcb8a09f137f1c2c7066fb92d1cab1f5d16681612a528fc28ec4e7901b660f6c8eee8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+quran = {
+  revision = 67791;
+  stripPrefix = 0;
+  sha512.run = "d725825669bce286e05ba5a6a4034f2a485434d40cd32d7f9cad42c1bc7e74001a0a0d1784b5af73c1075166835042406c42839bdd6fca40cbb06b349cc685d4";
+  sha512.doc = "1d706f0ed780efb7529eec16dc9e76182c584113f6d5bc58521de023611401963636e6370c8e06082548da191c4523c7017c59f164d1cf5b234fe7fbd4522689";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+quran-bn = {
+  revision = 68345;
+  stripPrefix = 0;
+  sha512.run = "24694bd309d78e2c0315d60027502a93f3beedc436e3b5dbdb3491d9320ff4e2439914a3d3b84c70644ccab3858d184d948a006b13e622af5cb6c1211cf6f5d9";
+  sha512.doc = "d82f949a61f668b6577527d8ee329cd7e23fa7d584eb1c7258be3afe819d6bcf249d9db9778b6da4f57cc1f239d0340cc8b64855eb25d5825d47cf1e298dfb80";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+quran-de = {
+  revision = 54191;
+  stripPrefix = 0;
+  sha512.run = "d969c3fd171102e4c47bf4eca383a22498fb6e95a5f8be288a137e12e1c92adda9e92587c402ccf87fcb116597c6074e64eb70b8249b208e7d1bd684d6ffd6d3";
+  sha512.doc = "4a371576e7754789ec67cde04f533ade561d770cbf410e31c8fdb737d127dd36e0f8f6a233512b147ffd5692acecc43e1977c76efe04b1a65de3c6297038a954";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+quran-en = {
+  revision = 68790;
+  stripPrefix = 0;
+  sha512.run = "75ed9751d6d9517970ca0cf842eca390a172ae24eb12be04a2b97ee1d2673446064489bf594a172677cd785c05ca31587db8b3f64f8d8a1080ce0be0bf191356";
+  sha512.doc = "7e5999f4378a32dca0b47ebe63a1fbaa331110d638f1b2d3308964a1a61d4036967aa1712e1c07bb0d3bfaa2106abca72302df06a811b1412d5029fd94588d2b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+quran-id = {
+  revision = 68747;
+  stripPrefix = 0;
+  sha512.run = "88328a074b74b6197079c9fbe92170989a1c4ba139e2a84ae96f803ca5805000e11024861e9f033fcba5f346b6bcf38a59231b6849fb4af586eab33795efe7f7";
+  sha512.doc = "42d6c03ff54e65e94196ea0b66e77921dc6bfed3f45605835fd6721aae3b97ebb69acb2362bf0fb6158348fedafb8d543f32602358f3466ecfd89cb56650a074";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+quran-ur = {
+  revision = 68314;
+  stripPrefix = 0;
+  sha512.run = "af8d0d7c10d3b9dea55cb4339982196d5dc33204fb9ff368591e50f48b8fd5ea741207466f158a4ce7da1125cadb5240bda38cd4bc5093966fb42f7de77beed0";
+  sha512.doc = "17d660971e942478baabe2e98eec7da096c37b13f9da24a8e8e4139d0dffccb280b0a464a0fe76f47ff39f899e8ae0d9a582a01be927ff8529e14c097b81090d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.22";
+};
+qyxf-book = {
+  revision = 56319;
+  stripPrefix = 0;
+  sha512.run = "be1be15996d6db58200ced70e6b17d29ad015bd1f1ae1dccb7cb50e225e9150db76511fbec37d17711e10104322782f92bf9fedecf990fb4358fefc2df7a78e8";
+  sha512.doc = "5bd3f6f9576ae2cacf3351db9cfe59ba519953a6e25e32b2ab4215a928d7a0f2903a9c75f9432c8fff3d9b7221d6ea09c439421eb5c5ec6830665d89836b9d63";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "3.1.0";
+};
+r_und_s = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "86b219305e4e085af2a22d34bc586253b5674abb18e257fa96bab1d45695f841020c0004f1da51fcfca0fd0b325e4043f2e368740841a5a2e8db774711ac6348";
+  sha512.doc = "26e227f106bb9303c4823f0230b689d6ed883580051e1bd5ec2e16ad796a3e33df2caa389c309b21b010bb43b07e5ec1027d6c046af55193deb0e4d975288846";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.3i";
+};
+ragged2e = {
+  revision = 67441;
+  stripPrefix = 0;
+  sha512.run = "363d952daecbd0c4d57e7d2aa5bd28e32bd04efd1b26f5ab65c4874fc65948fb4258eb430560bb8d294406cf314778047b0027a45c21cf99f77119519878e368";
+  sha512.doc = "be65fa8afee57fb8044ad9ec3ae1ee05ebaf0d8b40388f9876de7c25f6bc6b3a78221b393442e1c3bfe69450eb3c98b276b569540ea8a154a5297560f8a972c4";
+  sha512.source = "56482d060b48c8433214b352efc1b2d6499aeb97a689fffd7e2ae5175f92033714aeb61250f79eb847ed3dc63db8e873ae8efab2aa8dd6d8824902a4c00517e2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.6";
+};
+raleway = {
+  revision = 42629;
+  stripPrefix = 0;
+  sha512.run = "8ce708ec993b1405dc04ddd96b6d39da324799f404e2798448c12cd03749f11685f840ba4f986b1b0f7696f9141923f3b91f5318de634979720af5af5b07781c";
+  sha512.doc = "eae288de26c57ac27172e83bc6985b0edf80ac88538561468924c34656f31507e008097a1e8452ce47729ab501493733a1c022440c31c34cd99f8211383e889c";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.4";
+};
+ran_toks = {
+  revision = 59515;
+  stripPrefix = 0;
+  sha512.run = "25b78e30d7e6a2f082a7740fcdb968cd4032e6fd612bafdbeb58613f45882e788809457d0fcf29af76d3eb82c57d8772960ad84f9ed5940fe670f8662853364d";
+  sha512.doc = "7e837aba73d0d578494845f038f7616a64eaeecde059655c8ce3ed5a5bc2c5910086c955b6a16a42abd09dbbafb71409387959eaf2378618532d2e494bba42d2";
+  sha512.source = "ad77e0842ddd144f49b26a548846f2058611336f51d7540e96ad63258ee46c2f0a139b6945c0fea1f26fbf61b5e1d21ec45f87a9f68009d87ea6b9b5634a2895";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+randbild = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b4fac4fe105366ae1047a1d4225bfbe8ecfe6e05c29e955bc91d591f25ad6a8ba0e2b81848f27af96a1509a278864393c8874b14f30e64c8d5b69b9db811ec41";
+  sha512.doc = "fd8f83db389fa62ae8dd63a2c3bc8e4feb9beb6c56d7579fbd9e9065c399a73ad19563f22cdbe1dec78bd1c33056ed1cd4d9a534105b34a2ceae0cd8592326df";
+  sha512.source = "6180472c45b6eb362076c50a6a813d5521fac11d92881639cfa3c7444fa456dbc7b453e4f94de147a635ce017bb21e30087ec7e6c39ead8778bbe9debb68a68b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+random = {
+  revision = 54723;
+  stripPrefix = 0;
+  sha512.run = "a93eb4d5b526285da18105f67bef5cb4451b7b71be50581936a4718ad99360dfd8141ee9437d374c56eb3db3aad9af4ec8e1555a4a5b8654711bf64aea3f419b";
+  sha512.doc = "f2aa83c5e34707ce9f7cb46e6f3b1632784ec741a68ba9faec0d323aba2054de55f184aa9f1120491bbc60db2040087c4b2dadbb9a4b3763b84358c1855974dc";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.2";
+};
+randomlist = {
+  revision = 45281;
+  stripPrefix = 0;
+  sha512.run = "895eb116868ced533e23d398d0f17bda2f55a2cea52ec46bcfca4004b9411fade8817af4fc9d3d91b2ab2959ea24027266d8fcac0c77a64d2a4b88fbed5d56a4";
+  sha512.doc = "4c0ebff9275bbd1c8550902735b4ef0d04dbd688bb1abdf124560defd2e5d0cc23171e8034fc67b5379d0ec30395b4433ababf3c3a244cbb5ca5f15005057f58";
+  sha512.source = "3ccb29c8a6b815484929b7bf0e142090bca848d3f5562533380b71e1be3c9fff2d7ed00f39fa68a745442ad45e1b07e4ed38ef2db55a2bf341e6adb0ce51c373";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+randomwalk = {
+  revision = 49513;
+  stripPrefix = 0;
+  sha512.run = "3a1f08f41864cc3b855fc4a9f8aba298d92505231c728381f5c5aa29f21c73d6e10834ad589c114ae26ba97d092b33e9c83a30518a7f289aa0ec96c933471afd";
+  sha512.doc = "00c23d42132d4a47973871bb9a2054385681898d6cd7e0a7a47337808187855812d98535428f6e37a3eb2da13680ac4128fce38db670a87a66483f6ece044c8a";
+  sha512.source = "55bcb9c1acabef60ee605d9dbc0cf9d601a31528dcf444f2caf2f8b91867538549bd304b3a73b3bbefdc9e7ec82791264f054386c46b4fe67d20e8ff6a44ca8d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6";
+};
+randtext = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6cd20551f4b48d30d4c830da395873bd20e11b930336f4fac0f0ccf09c9a956d18107c45aa2b1ecea51d1fc4b0c0fabf06d436e247aac6ff58548cbfd31d35b2";
+  sha512.doc = "3bec31ca40816e7e86642e080021ab5faabb19656a15463f712e111485f1de00d698816e84b1ed7b63ea9380970d4e80b04aa0cf79442c7d1d77d5fa3f4d072a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+rank-2-roots = {
+  revision = 68161;
+  stripPrefix = 0;
+  sha512.run = "c15a31fc178dbce9a776c8409d0df18e4ac05e2786aef486bd9a932c64ee6482ca15d6ca10eea70b98f9444f01d292a5e1032fb924cbd1add8e8bdae7a1bfe8e";
+  sha512.doc = "b5b2bfdea68db76c4d52d45613cdd45d91e684f24739024c53a2e6efee83660c2534cc88d4aaad5b1e2c203cebf2244ccc4331935142661090b95e29aa4e9240";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+rbt-mathnotes = {
+  revision = 61193;
+  stripPrefix = 0;
+  sha512.run = "15e5b0c52a70b406cb6de6ff55740206dafb75c8cc20dd45820059dcdb112c03ea0df0884b6caa12db0f792b97e0507f90d06644a8f78cd7569f9489a896b3cc";
+  sha512.doc = "effd703a23c4eee3ecb385cf8ca891c50e373fdb91834f45f7ba414d6e69b5fbef8a1833db4cf76e27dc316b734b714926078e4d92de08122dc79948ba928f77";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+rccol = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0a712f0918b4c0e4cf8cc2a0d442a681c6cd4d00b50478751512ed4588f070566f005717196f694c8d07e79f8ab6a49be6ddbda8db71af65e30cfbbceeab6d2e";
+  sha512.doc = "56c43ee9f49764ce50da6b1b4fd736cfff16a1cf3907fc7189807e5c946f1c25c593ddc1aa22c2ce2e0799f7057efe2df35bfb9aef0fa1c31724110a352fe4cd";
+  sha512.source = "bc0f7ee1a6fec9adf6d8ae77fb174fb0334030fcc504af46bb2cb88516c05b4b9539748b381a029b657f22d7ce6313b0f19471ef85b1064139e6cb7862c726e9";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.2c";
+};
+rcs = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4a9d7cbc5c16163a5866bcc3c9fae95d8fc42b27d0d8dd8ceaf32e2b568bf9ac6b710a4124cbd255f1f2d18fbcf66ae020cca58ce6d16c6c5eb6e0a85e288419";
+  sha512.doc = "71430d5e481dac53c3b1d5f86ec589fd855c244c6717f31c16e2fe00507850779fed3ef43db2deb546ec5b99ffe775a10711f1fd59c022f4223a8d3327424cdf";
+  sha512.source = "3c2db69ab4106eac241e9126407e90d8b20cf3e186d50cabcb35041a68c1b670eb3bf9b571d00a52c8e4cd410cdd7cfb38e6bb4558560d46420d1074312910fa";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+rcs-multi = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "597d15909aa4525608f649c08dcad66ea3e7bc41a5d3003c1fc2582ca459dab58bf9e8a909f92b3a5eb40397a2612d26601ef33fae3d151b7e5188a39ed3780f";
+  sha512.doc = "7ff57e19f66f665b1b2e35b32f109f091b21300495177fdd63e60b26a8c8e1d7532e40bcdb2e01d3499b753bbb53b1dec6f70ed3273c43d3fd541a1fe63f82f8";
+  sha512.source = "f86425b317ce13680ceb9f8bff961074f081e2381bcd46bd947f711835b64210452e6a230f1b5914e464b827106d4c7a8be5dff78b988d4d49cb7ad9fa98d749";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1a";
+};
+rcsinfo = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6070a3f0b434b5339e527161b7c1e18dd21b23a9b57817a2699bc13369bf35110868e38d3e487b7b0b58ddb12699599a6e8ac4314b150ff2c8049ade5124f786";
+  sha512.doc = "c7d149405b9824f7fb9a453386477ee3ebb7e265b29a004eeab687695667a9e8ddd7ca91ffdb4fe7f60716e6c1f2b39004aae82777c58cb60532bb2ace2bc846";
+  sha512.source = "bb38328d3124adb4ca1734912bd0fb15040e7d390d886d3817ed547d08e4f6e5a134db6e4279ab2cf0a5b8d0216afaea475c3dceed7381bbc84adbd63bbf3b82";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.11";
+};
+readablecv = {
+  revision = 67986;
+  stripPrefix = 0;
+  sha512.run = "bfbc2764d56277d9a215d4366f812e53361faabd136ae86ae8152ab763742f51d27e9b61bf4a1d42fe2f14a90d5d3d0cf6cb513b3c6f5990ad34abeb26c22d44";
+  sha512.doc = "6a337934b2f52cc8543ac0bee5dd52d2deff2e3fbf192977937c8331134227d816c846845923ead87615ddc117b44fb141239024e766e17e1896cfa1c4afbb05";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.0";
+};
+readarray = {
+  revision = 60540;
+  stripPrefix = 0;
+  sha512.run = "615f0be7efb7cd6954d36ad1dafc9f0f0a1632159247e7d6feb064e272c5753b26c5e07af709240a6e5f8bd7ceb7ca2c2c29842a5bd6e9e9efae2470f7a94107";
+  sha512.doc = "d9f87dc14d40c33b06591b611e8a79df95fc62c32d16f72cff96222e7fe48f4c09c95bb0b02a6acddc8b4630158ed61c9375dd370c2f2d21ec8a9328f63fff47";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1";
+};
+realboxes = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "2705000ece0e4bdc9b96929e853733eb594d6d12b1bbee97b3068f46ba2c6c3b2d06ed0f0eb5e34bd3e26e331722e51c1fd98ff36fa5c53473e99a7fb1610c22";
+  sha512.doc = "aa3d6f25505cf1dba7c5ae5c364524cbed6c6a588073fb29e7d9b14706b8ffbe5998dca4f17e1039aa242ad4bbc29871c72686f920610d8662491e1c91e339f5";
+  sha512.source = "096371da7866350529304b9be81460a2e081d4725c29ad423070253b7623069ee0d7ef7af6b2a88dba650231d972dceb74a70254765753f4227e39946245cef2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+realhats = {
+  revision = 66924;
+  stripPrefix = 0;
+  sha512.run = "9cd41126ccfdffe1322e0b49af113b65761a34fd8bffb96390f7c50d78739be06605fa2e16347a226bb7fba47bb832b1bfd19c8d836dd557fb41ae5dd0281d5c";
+  sha512.doc = "94fa596ae22d6c4f75276b30e5fa0f0d03d575f01ef2d6e6a18454bce3c0328a8dd7b804d586af57363ca1c5eaf3c57a4d021fa37327920f123e7b8b2ab55df6";
+  sha512.source = "87f5274eff261f29b387b8b171a1ea031e5373b282950c60517c66163c1f6b75cbe4bdd52731249b22348386fa3565952852efd5143c80edb8e6e070b0e77f5a";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "7.1";
+};
+realscripts = {
+  revision = 56594;
+  stripPrefix = 0;
+  sha512.run = "fc0c686971c536b3490438e74322aec06371857a987bd70a6def7310441229fc4813d2080c5aa9b5e22cf78dc8ab1c3ed75b301acd987117d3e6f1f589f78981";
+  sha512.doc = "bddc4958f2c57e5e05fa31912a6c19ee123be463527f2e1121405194ac47b6a806790c204268bcf590785c927808b75305079ed44537ec84284c594d691c906d";
+  sha512.source = "117c3dadf6aaf7a46a3290f6c49d23f62af1206e512bde7098068071e9edf00bc7da0fb34392b0911a4ae525eb0a99b946317d31d12d3312879debdfbb345a84";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3d";
+};
+realtranspose = {
+  revision = 56623;
+  stripPrefix = 0;
+  sha512.run = "413eb0a65d79521c81417afdb2d7f0ed8bc625d107d2fa19db84ae04a1f27f2da8f07fea27139dee411e1850d8646d63412eb581b08a9c4dd69c886457027cd1";
+  sha512.doc = "a2382dcfa84f3a2773ef6cfdd5a10bf23cd541927e2844419d75be6206ff5b42f37243ab2157ed5765c0f9c090340b6b75b35271157daa3440ee9d81ecdff9b7";
+  sha512.source = "5fd124830f8e5e29cc9b1a2ef967a21c2065d183bb8ae1560b95e66b09d1248b8bb6a65e6321651c23d309c2508c05629c2b7740e8c57e4130d2f06b99347097";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+rec-thy = {
+  revision = 63982;
+  stripPrefix = 0;
+  sha512.run = "0497b8d382cf239b6b8d2f4bf2aeb3af34c8d1f1ad94640f930c316f9b7bd7e6a150c3d344a555313a88cc848fdafb3e392ff6cec0caf72d3517dd1db4b7c2c5";
+  sha512.doc = "0733917542d683cddfe9651bc9187d2dfa7a57e2bfbfddca687a5bda10609451a3f58cbfd7f5308647f9a3014f0a4adc36e9075cfc1a5b7db48c7d1063cc9b5a";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "3.8.2";
+};
+recipe = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "03e9e48a2e423f36ccfbeb2e61ffc7c3588658a158c1729f697ce44d98079f104cdf1c17d85ffd5700a7532f762e22da0c4388350007eb13226cc0da43b08678";
+  sha512.doc = "4dfd27cfbb4f5f5f45a5fce25fcbee4c9881990dba1009337f41e4080686e993246189595a7c28b8d56bdd2e81a70e9c6fefcfef0897736d5400888bb9fca210";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.9";
+};
+recipebook = {
+  revision = 37026;
+  stripPrefix = 0;
+  sha512.run = "c030f81bac27221f24b275d689fc7cf80bd6d97ccfecb0c5d51876ae825871854d7729e123caef3735a7b2a5608f070ce170709c8a1723b5c740f05371c82154";
+  sha512.doc = "0c9d803360e1ef65b38f5b66c6d3eba6e9c38c371a430e2cca371594935fda16a051d6d1ee33e787114747b9efc36475c6c92b2c8b199aa1a5b48e214f7a4643";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+recipecard = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "62778e7429aaa8e4bed6546c748a7e135c9edc4909508723e7931284c619d502e9efb0e6fa54c8c1d242858355c6d95bdc87959400c18a5648ef105035ace26f";
+  sha512.doc = "0e62ac28631ee072c9b0b5dfe9995744c381f17b14da5e9c8f4159fb274cf2a7662f0eed8f728ec5990a6a957de051304601acde2d171e696e79284ab2faeff3";
+  sha512.source = "d08838184d5d21107ee796835c95dd446242ea3433819229ab918a30e73a3e042e6f4cc8f75c144ced7a16391841177409567bdf3116632b0915ebe47378943d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+recorder-fingering = {
+  revision = 68595;
+  stripPrefix = 0;
+  sha512.run = "1a97324ac1264d293a05207a667255e5711cc13b6acc02acd5a170d776d357dae9158491bd0adf96a11e17fbdde1d24809940d323f417f31c5b73c55c7758031";
+  sha512.doc = "ce1782952b53171c686d0f76d9f48a127e6c6bd6c1c2b0eccb00fb8968f31c809118f6bcce0503a61997907feb7d677ad23692c68427bf8666124bb0b040585c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3b";
+};
+rectopma = {
+  revision = 19980;
+  stripPrefix = 0;
+  sha512.run = "17a297d7862eeb8c48788e40fd761fd42b37fa7b49b7447e00e828f1a7e0f2e411eee357507d79bfe0441c7feada9e06fb18ee5ce0af87e7aeec7ae618e22d83";
+  sha512.doc = "27ae9a381a685373a980e13b9b5c3f6057f98224a7c9659edc0c056a6292e7289ed9772f3a503e8de3ea93b796f271dafeba57f6e240caaf738003e1ab848e46";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+recycle = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3bc28ed41a8205534d34593429429768bdfa64e61cc212017ba4be32f7a985e8d65ab296137cffbb7ad5be4dec90bbfd30d675ab314bb79ec0ea10b277c33d66";
+  sha512.doc = "3bbe68b48915c6fa662fb72072eb9e130613587e86d3d4172766c8fe690a995d23d252cbda9a226a7716c9da8741b3ed0e18eae1cab2f547d08265ee493a64dc";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+refcheck = {
+  revision = 29128;
+  stripPrefix = 0;
+  sha512.run = "46dde83ed04d4586eb6a2af393ab925aa7238a30c23f49ea33f0da331e2a5071447c5df22b31c2cd9b10bd37458794fe15e53e0e79f002bbcf95b0471d6a7d02";
+  sha512.doc = "a87b6ab25848571770bc8a7ac1f47e139c7a2abebf36b9c72b65bc66e02c14b23f7b0d2246c7160b7669460f52afd29063449c6659336f01f3e99df53cbb4428";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.9.1";
+};
+refcount = {
+  revision = 53164;
+  stripPrefix = 0;
+  sha512.run = "da914e64de5b70e124d9eb62148f5650c9445d2fdb94272ce622478b9aa50a4c7625be9c2152fffe9ff9fd87ee19319a0bc31ec5fd82839a479faec687de4af4";
+  sha512.doc = "5324828978e3c8c14e9a28b86cbf87de175b9908f460ce6090bf19944557cfe82b112c6543d2878b54f4a16b1a9f3f3ffc66eddf1234c04b8852dbfa3ebaf27e";
+  sha512.source = "26c03363bd65be818d05792fc1c7e3a2e7e747a49382562eeebaefac35d5b4143b86bd46fce97fd4aa0f162ce7a1399e200f2593b3920091159bcfa08f0f8781";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.6";
+};
+refenums = {
+  revision = 44131;
+  stripPrefix = 0;
+  sha512.run = "7113ba67dcaf3ca2a070e42b4fa9660889bdf7803401cc0f8c3f9f62c59e467d9f637c526712bf9aa9fc7ac3df3c550a41f419de9cff375e24e68d102207e8af";
+  sha512.doc = "3511419e6507d2c5a7b48679e9220e63643b38f803e8a5d7046a55ea6b6f4827fdfabb74336fe61ba35628868a7f042ad472567e73351d13ab9568c508468a97";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.2";
+};
+reflectgraphics = {
+  revision = 40612;
+  stripPrefix = 0;
+  sha512.run = "ad670c699d958eaf103db1ae65d79bad78dbb0677c7464144739fd67b63dc5acd3c298f81c81f258de477fe9f2d4a4177de887ce1c031ac9c701662167c1a5d6";
+  sha512.doc = "78717728d537cf0dacaee67151cd7f19fef6fa031a856ac49a58bb576337690df4323c80e1ff0f318a4eda3689fbdbc2aa5a3bbcef69b957fc4615ff825e1e0a";
+  sha512.source = "f228c9e8dedcd7d261269c896b0ef1ebeb7efc18a0137fcd64765ec92b957eb634d8e0e2d4f6aceebf1760e65936c6bb1a7b706c852e6c220282448830b7f672";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2c";
+};
+refman = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "45f51a654703a7e749e7dbb08fd0ccedc86b5f264ce08b504ed11827799202583f81a4f3fe32dae0794e20cefe2e6bbd0ff8563955c3a85eac2642c307aaf332";
+  sha512.doc = "560d70322bcedfd0ca6a10c161d3930d389e77fef25ed568f5a68ec87eaa63efd4f7dd2363bab283af00a49719c3c8ba38e8a35ca011ea349dd854a0698ec79f";
+  sha512.source = "722e2493c24738bf767b271183eb1422ab103b84dec17d28f615a52d9b35e1671d3745fc5a6fc97b2a9d7934f314fbc7dba9734af8e0c802cc6760940112230c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0e";
+};
+refstyle = {
+  revision = 20318;
+  stripPrefix = 0;
+  sha512.run = "15ab0ac1b41608ed2453bf1de27515aaeabd0b06a3e44fa3ced6b67f5e79cf237e92112848622303df2e174ae1e60b77ff31583837f3b12a447f8c4509891cbc";
+  sha512.doc = "9edca88347914ef7810c3b1639cb85f598963404620a99f81f5bd56d45b684e55bf179ba46a5a49953a88151251ec084fe6126fa3ce83d2635450bad25e07059";
+  sha512.source = "9052f56bd87d9ecfb2bd09a3de7f1740837d1e0fea17eb2ff11c1bddc11ad2cdf3d9287167df61f0ebf1eeb4bdf7eed3b5a19b748ee8e560a7695e0418291a6f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+regcount = {
+  revision = 19979;
+  stripPrefix = 0;
+  sha512.run = "6481e37b45ec26aa270637b465d9fabef010c6717c0a402f0bc2afaf5dfcd877e46fd8699ff8fa39d80218e6f319e09acec1417a47fedefe6da5d90a81b2928d";
+  sha512.doc = "19215d4d4e22777b236f4226d82cebb1d0f8ced841cb33a4b275f0cb558c3addd4a1fd76d3aae9cac5e275695e197574145649be5f767372bd1bff13ec76cbb7";
+  sha512.source = "4b152aa79080914fa59e2b8a3103fea930ad3a0ab8959c570eba06ba36596d82ba58d03a4404cac9b2ebe3d073ca0eaff856a892b3d1e84d183a9ed60f32e42a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+regexpatch = {
+  revision = 58668;
+  stripPrefix = 0;
+  sha512.run = "80b3be47155c8cd654d1b3ff7a1e261da826d97237b15733e6f63f6e3e9f1e40fb8f1cfbff48b38c4ca3acabdd3209147664aa8aa408b4601751f58d596c0f38";
+  sha512.doc = "7cb6eaa1ba3e7ffcb80001b2380171204059907fa5345c3c684eb84861340f70590a8b5f1f3fb30a84516ccb2d49b3245a6a697b328157f7ed09bf9caa80982d";
+  sha512.source = "bbe6ee9178c3f7d3272fd585f50f0ab66a86d38bbc65ba40a7deb8e22c6d300299c8f4203d3849b5f3c068f2194bc2ef0206ed0c0e5ebb3b235d8a83cd367d08";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2f";
+};
+register = {
+  revision = 54485;
+  stripPrefix = 0;
+  sha512.run = "709694065b22e33c9d3f8d859ba8632672bd5e3fcf6102d0915c203b4fa6773e0e78f02b1af537b3ff2eabab5dffdae40e0dce63232037c37d4e50ff325e8116";
+  sha512.doc = "08ee956f1f667245f3dc63a27f10b898a03929302f68f1fe19bfa3cc923a890ca72795d4500b16da31e7f69d375fc60e5023ebe404f3ee8b0ecc289fb7a6af5c";
+  sha512.source = "9bccd74449f5b20fdaae9b1a6e9178a1849f711bee6ca23229c20bdb78f036a81d38a370cd8dbd0a092d0f9fbd0f97b71d61e81f337561e7345610e04412dcf3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+regstats = {
+  revision = 66795;
+  stripPrefix = 0;
+  sha512.run = "4eaec929726cc9bce1481d4edd4222468c05aa30272b24e26b0c9737154316430ef91203531fbb94e3432fe06042de22d30a6253c1eaef6f1c9287b4f0049460";
+  sha512.doc = "8c9f9156e513a4f29c7d362146056fd69f7eabac72e2747c1c93821c9ed69753630da257e1a250b415074c21c1793e4f5c57ea4022338b104871379717da37c3";
+  sha512.source = "0a2b173393405c825dec83d5151b1cadd31a1e5b9b20210b7e46982836807a2e7e9c294cb3c184af2464334d43f9a5792f7ebd6c868ccba3f0b7879d34d747b7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+reledmac = {
+  revision = 68411;
+  stripPrefix = 0;
+  sha512.run = "ab02eaf561927fa1840d59a49e8f87572133fe5762fb2b8e97b5a3fa80a9489bbc33ff9d12433481a6088739cba562d6a66fe9e70b5e74e7b9caecb96bd1fb3b";
+  sha512.doc = "5ac0734dfc14a25f4b171d73cdd643a60d106e11eb4d128c6da146ffd47527212b84fb5c2674028ce0c18b5aeb9375d56f2d5a9ebac654660d672e7983405179";
+  sha512.source = "ab0af4aae5b31147ea29dcd5eb4412f139bffa023600723780f37b7729967f1d5b94290e39080b9a550b3dc967dade97fa94adb14d20742ddece3c4cf3c0c8ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.40.0";
+};
+relenc = {
+  revision = 22050;
+  stripPrefix = 0;
+  sha512.run = "d638db869698a6b564f1482c3ffbda561bac0da00e008b5b3ddcbe267587813042bd3d578ea871f5ef48a27309baf8e290413b65f99daa26ba7a8b2a1dc62050";
+  sha512.doc = "b5e81a7edf8e7d0c3be9ea46ffb2a43af5d58153ee91d656faba600d4082a8982706744ba1991c82ce8c119fd12fcc0eaee30353135338154b0445e48f33472f";
+  sha512.source = "ef1a5c1034dfac3ed942354fad6a9e4cca44a33d2252120fe824bb41280453a6c8e00c259331e4159206f60e5043664bb4008e758d8b81dff06c7d68c3382e6a";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+relsize = {
+  revision = 30707;
+  stripPrefix = 0;
+  sha512.run = "90a4829b63d86214c44cadab6b9c9c114d6abfbd72dd4cd8bddb18add9b7fede2867f39d57b03ac9e7762950db71664767554b515b5409cc873d8b31aebb2c1c";
+  sha512.doc = "45b6e38a14c31d7387a99d78c395fd0cdab5ee8bbbe72f840d511d14f6af73f749649b48977e8a995c2ee375358677b31a97646c8162c5fe2ee6c286a05a20b8";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "4.1";
+};
+reotex = {
+  revision = 34924;
+  stripPrefix = 0;
+  sha512.run = "e97663d414291b3d0a009143ea370676bdc69b1897492ef86bd2092e47fcead566151f175676b4a19e196054ecd4a41706a74e9d4e6ba353d9e346786d04a2d9";
+  sha512.doc = "fbdfd00526129921896db36234343d991bba29b68adfdd06d9fce262a58b2cc544dbe49d28cb9722eff1fd03ba3a765e38368baeddff18e36bde436c56ce538d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+repeatindex = {
+  revision = 24305;
+  stripPrefix = 0;
+  sha512.run = "f700f201ff05d25fafde3eafd63ddb5aeba81dfe8be0dc4522a08459f35b3ab78cd06d215477ef5bd59c1dd6d1a05361ddfdc21159f3b6347f5a8271c4193192";
+  sha512.doc = "031a5113799f662b88b2275f2f82467e2fd84ae58d18f4cb69e090aad7f2c8cb44eefc4c43f3fcda9e92de0c0027fd4ecaf9f152d33b73ebb69f06e6b4c8c1ae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+repere = {
+  revision = 66998;
+  stripPrefix = 0;
+  sha512.run = "502e1948f22a70003eb5ff4b6eed2790e28cd5acdadcaabcf1f0be699026fbb1cb7144bbb15f230a25f85abf00dc1de075ec44fcc6fa10e26550f85b50a272d2";
+  sha512.doc = "c16864711c87f2632cfa56ba06968ed967874ca25139360476f6fa2bb7bd89b900ff8a98c4514b4664e5d623c9d29437e375284bfd0073b2cdda0eae13e896ca";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "23.05.b";
+};
+repltext = {
+  revision = 56433;
+  stripPrefix = 0;
+  sha512.run = "a5deadeab45a6a2ab4732e91c26da32f276e2d5b35ff357faeb3361c917c3b47c81e59cb6934d052d3525df2a810510e6fa7a8b9e9d6d272c91b4b558de7132d";
+  sha512.doc = "0694a76754c98bcfb6999ddb96c368701556eb1de025af1ae32ab8e39361d18405fbd2c1438c1ebafd2cb06f2d9884afc08e1c94f57eaa89313f54d58a289808";
+  sha512.source = "79a4c693599b0f20e4e1b2210f65dab3b1cc276bf3a661f385a2ec70c703846e881bebd2d6ae8913a007b832206e033f178c4017fc69ef099c3ff87f4b40f651";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+rerunfilecheck = {
+  revision = 63869;
+  stripPrefix = 0;
+  deps = [
+    "atveryend"
+    "uniquecounter"
+  ];
+  sha512.run = "464daf4ee4f443f4ff329e28b928df94e83e83696e3e5604de7b51beb61c25a0ce50dc00b35d2cc8d0cabb32d10bc28c3c06069f5dd7eafd9fdb2d44a3adf313";
+  sha512.doc = "7c570d38c989aaeb7db5271501c5384ba8b8601396f629d7ffee32baaf1c289592bb5d69d2cb2784cfb2008fdc047098d43dc20803e4b90eac59848c15dd0cb7";
+  sha512.source = "2d987c01bc0f67708080d4578f308444ed3220a37ee11ef1a95c2a9bfa0ab49a46ab46d291153f0c748935f473124d70212a821233b22f1e606be6183e4afe81";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+rescansync = {
+  revision = 63856;
+  stripPrefix = 0;
+  sha512.run = "4ad1b90e89a005930d1ad5500418c0d867a1100d21429af64edcc803811e29bf4cd79815fc0018505c8d9504069f7f17bf6e09465484bff5ddb3dbc79f54aab1";
+  sha512.doc = "602eaceabe16b326a1e2546b3fea21f22c17b92d01500dfc30f0659f0cad8d93c4e919a18af4a96e8633afcc4c08346dec8f5e84f55fb1f54cc2067e2b54ca42";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.0";
+};
+resmes = {
+  revision = 65375;
+  stripPrefix = 0;
+  sha512.run = "b55b0ed4883dacc78d7d4406fff05ac80421259e85297ae8050b6a77539fd38655caa6afe6afb7c3d8654d9da0d965d7cfe52cbbcc6ed9f7be4d87aa9cd6abc4";
+  sha512.doc = "f2faf70d393cead42f20aeb5fef487870c69c8fb557fcf6dc3c589fda448a73b2ca0a0a39e4d963e67a0b38f976cefe410b2c983f820dfe7aca2c255a24f4bbd";
+  sha512.source = "67d88b13822d35065708d68b57c2013fd19276bed7cd433235f94b9af0c47b92c13307177c78cd16e3a87a6db634a3c93a1d8e8b30e8bca1babdece0defc8a0d";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0";
+};
+resolsysteme = {
+  revision = 66192;
+  stripPrefix = 0;
+  sha512.run = "b4d196ea41fd5f4c9d78df932516a8f1bcb2a8862a4b367a8a288678213fe7a7d6fa8f4ee531982dec11bf04576cc5836bf47368f282cd939464ea6df748eccb";
+  sha512.doc = "3fe3d927326acf296c5cafed3c7ab5902ba7c8c943e6bab280b1e0f0a997f90c3e2676522f3dc7dae0436845b4caeb2c58804280d546dd4e6223bd1984659aa2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.5";
+};
+resphilosophica = {
+  revision = 50935;
+  stripPrefix = 0;
+  sha512.run = "0ed9a50305132206585f322ba68fb514e0a4d566fc703a617cc6eda1de23b53820ee45231167f8b81aac826de732763e3c141a9ab65d13fac5d76e92d2101cde";
+  sha512.doc = "30739549cd7295186c10a54232e4ed57d6c2a589acf6f27ee758a40880e7a4178375835662b88bd78bd50ed0f695c71650003ae5ea78c63f5dcbefa15c5dd770";
+  sha512.source = "cfbaa18ff43da9287755c0cb3f218a57f034862ff9a63b3b77bc51e8171afc7c4042ee567230e7d1c263d7f993976bf4c2f3bfc055f0dd759b034d6d42d6df78";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.35";
+};
+responsive = {
+  revision = 69147;
+  stripPrefix = 0;
+  sha512.run = "13fd41361d1770d9fc58f1834adb312bde154800e5b1b6c39cb7c0b50dc5623ae3970d5d6fd179c706bcc6d92512f1af88b9dfd78440d47a9e330bff568d5ef4";
+  sha512.doc = "840556a6a8ccce54850efce732e63e58078e12740c39c8b81ed47c470d39fdb8a9cd27dca9abb5380fe2d9afdc41c801d2beab4717933bd4ac110c26491ea082";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+rest-api = {
+  revision = 57068;
+  stripPrefix = 0;
+  sha512.run = "a5a8f299d6feaaf4079e4a99fb84bdf7752016c92aaca0d0060692c13a7656c230e611e06bdb805712e7427d2e6cb599b96bee77e0c51ed769c4bc49cec32f1d";
+  sha512.doc = "b823828c122f971101a161168cfbd489985c159278de80db86647b0c0adff207747b6877795ca97b27f541c7907aff90213feee61d4b039dffbb8b7514923e54";
+  sha512.source = "2869854fc933ed536ef425d8418303e3558ed8e0b3681c2d7042e1386b0069dcf70286ee732e0f8ace19cf6965e3bb046caa0384ce1423e1c71d9591012e5a10";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+resumecls = {
+  revision = 54815;
+  stripPrefix = 0;
+  sha512.run = "1ee39179bba50d32bd3d6d9a00dc9f77a9a2b1822e13958b15804307e36ca208eed327f4f8ac144418e2ccde8d9e248dcf4c72bd137bf440f956d60d0bb11634";
+  sha512.doc = "23a3484a598f3b18763443fd4131a2e0278f17788aac6b640b00f0935c43ee7c3da5850892b525eb6bdbb9fb01d543f7a22b93cd5ffc64290ca0fa4f41a31354";
+  sha512.source = "a2c0f2062f30675fd4c336f618e7f25e1abb2737aa98f5bcb499c5941ad4615246046f9b8a5aaa57d94ed3b40906a73985c2045f8e571c2d86cc0e7dd2c243da";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.1";
+};
+resumemac = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f944441058cbe8468ed6646dcb10e09cbac78d5c7408c2a81f2531491739034e47da9fe8f45583008892740a57a2d36bbd1417f05f8d998bd79f886bfbad87bc";
+  sha512.doc = "5b89a7684cbe4da1c653d4a6253f82304b7b3634a9dc973e5f7da41967bdb034597e64a4fd82a922fac5ca62ee40e2ce35be6234deceb25000ff9103859e165b";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+returntogrid = {
+  revision = 48485;
+  stripPrefix = 0;
+  sha512.run = "751eddac662b8ca6d61edde7a25b11c357c497743aa0edff92be2a672fa13e4a92e6aaf40a8ed69853db642d656c3f54ad0af6cb35c94fe59cd540fa19f7b964";
+  sha512.doc = "6f5eb1997e25ceaa7a8956ced78c584058cb8f9fc112f98c350ff996826188f9b7748b7bedc6c19ec0912894500a4743dc7542532317016ef3d295563c450889";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+reverxii = {
+  revision = 63753;
+  stripPrefix = 0;
+  sha512.run = "28117df00d778cfcc2ac035545c561ba1f078f024a8676e32d339f4c47b2206e2711474edde9c15987c397dc192528c8a584dc6bd4121e6da6588dc1a2bed71c";
+  sha512.doc = "4d47dde91731affbaaf168e1a3ed79160312d9533636a95c6f9736e6f8c01f2514ec4e4c015bc9d68d0abf637b39fc063820c856693e8876ff7aaa1935f009f9";
+  sha512.source = "2dd66631854044834677e0167545de184382c2f9a925b4761b041137ac957dfb2bc645f1065c675efc45e400f7d8ea2a79f0bdcbdc84bb29c1e4bad1d54769d7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+revquantum = {
+  revision = 43505;
+  stripPrefix = 0;
+  sha512.run = "0e69ce3a2a4a1c289d494e081cd28e9c14c84a45717880e92292cc94803783a350bbe33426c4f5e7ebf64e5b28876e656ab2f1ce681b86c27c7a3c6700563a41";
+  sha512.doc = "16b8ff06bbc2155a853a26a0b622e3f89bb7d35439945948128fb37d342d293951526d415a3da9a01381f841dd61287317e52dddda8e8fa6e0eaa5d6a0006dc2";
+  sha512.source = "47e7a900aaa9198875acb1a0727bd30b64c0d41e9c33cd6240c29b8d67b17960f1ff05f717701385f627e6827881d365c01ed68b1adea8bd3e1b5423700f9bc6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.11";
+};
+revtex = {
+  revision = 67271;
+  stripPrefix = 0;
+  sha512.run = "3c0c008929457a405cabd699a6bdbb0c4ad2afde1c7155b163c52e9564f15718bddec782abfb6336e55c77ba1d0d0d88a1da39420ed1116f21efc1e4c93d4751";
+  sha512.doc = "de2053c650920b4e83183883b4fb15f25abde4210eb0c0a81adde4838c76db8e755a2afc74c8f3cafc0819d57b762e701380687e589ffc785cf6439d120c1474";
+  sha512.source = "270c74b7f50c5c8ef4eb2f27dd72e5029d6d48083baa9b477506e1559fd6684aa9ff95f371c8a40fc1535455a89e13e625b1cd7c129ff18ff3101457794f34b9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.2f";
+};
+revtex4 = {
+  revision = 56589;
+  stripPrefix = 0;
+  sha512.run = "cd1f83a7f2664c6002b93bf7ac3b5dfef4767b79f66cd03ed738e395027736d062d23f1a6a9354834093857d467664168295e615ed1c734b708c098943d7bf87";
+  sha512.doc = "3e74689745c65b4ae0aa5afc946983aad0507de7cd382db5cddfad6bd13e1414d5f72d7fa1308b3fb65b34eca82ae632b772690a67c643eca6a26490508f7597";
+  sha512.source = "32be85786fab483ac0bf8ce8e0bb314a3920e17b3102ef7ad719a4e43c3fdae113089c76587ff2075f7bedd1a6dde3fae6123a0f346082aa7a7645e7c76538e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.0a";
+};
+revtex4-1 = {
+  revision = 56590;
+  stripPrefix = 0;
+  sha512.run = "8c3e7c3845cd070ec51430a14a5b2d6f5b49821a837a6ac1f3a8889b353324479cf6121de0084b021c46722c425caa997b1b14df454f70bf7201ae4884de0f33";
+  sha512.doc = "d17acddfc14e54d74b874d6d7599a3d20a2e314072a760b0d03ae7e17184e0264fc2d98f0d3b32109147f9b4e0a099e0c7f7e8747730a567d3a2b44d4e4d22f9";
+  sha512.source = "d21d299085b7ce98e665cdd28754878c95beb7b0f0dbec970be3e39334bb520eee0ae4784cb4118b60edc0a92c6abb5bca8ad567cda65f5acdfd72449b15f2f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.1s";
+};
+rgltxdoc = {
+  revision = 53858;
+  stripPrefix = 0;
+  sha512.run = "85b9166bb4408d3b1091b033455650fdf53b24c2fce821c872420191390a1bfbf457326a1a85aab1bf0d6c15765275337764f87adcb393464f2533e2462f10c3";
+  sha512.doc = "5e35c6d1e6883c895d031f047fff1ededd4629158a8958b61fb6fcbd885c57797726f595894081b4933c78e5f346289a020424405e0dcae6df40b279b86395cb";
+  sha512.source = "8f94655ca8d0006aed02fa7e8fd28c5e3b8be6e92ab010a674d85bc88ce8f6e0120392540fcf5f7649a4af1e6bed4e0aec3d1d15cd095738beeb709fa2efe526";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.3";
+};
+ribbonproofs = {
+  revision = 31137;
+  stripPrefix = 0;
+  sha512.run = "88d1ea87819bef7f8e70e0df273315981c28ffdbc00247431afb8b92959aa2e0a3e489b01f7571d30ffaf3606d240f25bee6487fc704f39417146a93403bcb3b";
+  sha512.doc = "d0efb33c19d632253384182b562cf0e0aa10be81ce2336992c83ca7d25abce37c44b152cc8e928cdac90709cb99a4a5caf3ce8a631b13762aee7b39ad92da3a2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+rit-fonts = {
+  revision = 67659;
+  stripPrefix = 0;
+  sha512.run = "6f9be849a018d8714d30dec2d9d745c745c48ded444601bf64136580999614b514ab23468a440e8811ffcd114d0968606bac269cc3bf27feb9a5cbe51a68810d";
+  sha512.doc = "bcf029e75ed4d8fc403d8868bd8e01df2ca6c292766750ecd0e7c32ee6ac2e3a48527e321475c8f56ff7f38541aadbbfd8461fa59ec1ab911891bc73fcae1ec2";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.9";
+};
+rjlparshap = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9a7f5f821635f110d9bad0015d9fdf489f836cc6ec0c101f63a3bf5bf9235d7446dad98db1325b0720bab85d68432f4cbdbc6dfc78456329a8c48b47d9212abb";
+  sha512.doc = "73987b63cd565766586dff08144bb9cfab13b7251053d5f008ccb7dd3091ec9d3bbe8ed92fd8e7dddce93afd13a649e68826468b87947a036a054fea76225921";
+  sha512.source = "37af8ef7c124fc331a4156b177578aed29b99777a0270ef819b896e5f6dac9b694c3a05ea439cdc21533a405bd052e071036682b0846905c09ce95c32a986dff";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0";
+};
+rlepsf = {
+  revision = 19082;
+  stripPrefix = 0;
+  sha512.run = "198037c1fd20eaa28b727054607241b7ada10c9dbf4d48cd36f295a8b51a7d4f94859d2349d3d4e831a74e0da025ccaaf91fb53a3074a704f7a3216bb7df0cf1";
+  sha512.doc = "fc06c857011fe01b07180c9530a334e021f5b9c034c65e15959e173a409670947c7aa406bf751d64d5d77d462139f4835824aa53203381d27d4ecb0e51463e7f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+rmathbr = {
+  revision = 57173;
+  stripPrefix = 0;
+  sha512.run = "d1394e40203bc7a0adffd26587870ad4aca0faaff6226047cedd5ece5e55e6a99e56829a38ce40b6736c1f9a03b9bc4b337a0e4f9eadf0617ddc385a60372176";
+  sha512.doc = "e7c8d4f198399ac35e51a0d1c2c6ec420c746768de362a8179c0208325a45b11a8ba6445c2b7a433e7689e677505e3baa4b87d48a749bea5f3243d10f43deb83";
+  sha512.source = "44e4859933c2a5f664feb1bd40ce1e51da845fed56b8594d3fcbbc814654c80b18d20760db3c2690fbfa74233523e4e8492471415154942cd2666cc52837a98f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.1";
+};
+rmpage = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "13c05ff27a2b5979102c80bf30cda04d72fd144ecf43359cafd427417ed9f8921332a0cbba704061847c9f1d740f795ee1135f6ba2ba183311496884189e3fec";
+  sha512.doc = "e4de990151be0c984486b833b9f883d1f3412371fdbcc09900b89849b943800cb269fe0164695e95472b463bb4dc81b92fdc532dd59a9c3ba451fb961b89211e";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.92";
+};
+robotarm = {
+  revision = 63116;
+  stripPrefix = 0;
+  sha512.run = "fa60eb073a9a47690935403a13da3570a4aa44e9ee13c12c5a4ff93a1f02509ab35b5f64a03a67be74190420d0b174fbb4b9a34070a646ea557f03a584fd354e";
+  sha512.doc = "2d2838b21c1b0c8201375e0e4e4599c7ca11bfbf05a55e070db236ddd3793e51d1f809cb9c5e92bb9faa2e3b90b01cdc9579bbb44c653294e384c66b7628ae5e";
+  sha512.source = "02b928d574b29d2de845421b650156432911c3a917c7b2f5f13a1e3decc513abf5a73fd1d8bc27563885c9502e3a6058258a79e4fca2a1cfd59437a033b3d58d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+roboto = {
+  revision = 64350;
+  stripPrefix = 0;
+  sha512.run = "d82d9ce9480bf0c9d7f6559e7bcbb5fe8f22179adc44113121f67fc0daadd66c938b9fcf9a41073843e1cc981162972a79f15fe6162f68ba7a01b74732b0f01a";
+  sha512.doc = "2ceaedd2b273c252e8510a98cb05d581dad8aff94f3c8be1dc47fbbc9b52a0546ba8025c6bf0c51d97d0573d208af2f8a635c0cf405a980ae8cf8e4a1f13e499";
+  hasRunfiles = true;
+  license = [ "asl20" "ofl" "lppl13c" ];
+};
+robust-externalize = {
+  revision = 68842;
+  stripPrefix = 0;
+  sha512.run = "b210a9adbfa6bc7d0063e624a30abb885eb49a7e7dd3e215f97784e5da4c79886fe4d19aa012395894098833c18209c117e913b14091fd2f3eb8904a356fd792";
+  sha512.doc = "e1732e10a355b4f54d870420acfa3bbeb6256b0a7c0136f5cfde829ff02885422b175c2834b229bf22a4b4a28a1c8e80932af2b0a826b1658d0d8ec58de909bf";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.2";
+};
+robustcommand = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "806f997cf6c0eceec0c8d9b8f8207014c4ab9243f8007fc688674af2fd778455a787b9cf998262fb7d0a92ba8e2ffb597d61950c22a6122ad957a62ea54d9a42";
+  sha512.doc = "4d5c8a994edf816d39af12d7881793f0fda0223a3545559255674fa5a08f2d0fc9ad8ea2779b3c8bfe476966045f996b8b8f5da6fdd028188d28ae724c24a222";
+  sha512.source = "3dfb71a6a73f2ed968777eb1074d65773aaee7c1218b18fddd78e74a86f27d9cbf5fce79c41503c34e497b12543ec2e0c16d9f35d39b893e208a236fd66f4f50";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+robustindex = {
+  revision = 49877;
+  stripPrefix = 0;
+  sha512.run = "3aeac1a43261302532d7b5ee309d6cd94f54a2b17954c023bc6a94fa89c51291f3c4fd3276b03aa3ec65f4e21556d302c81aec107fac5dcb477941cb474dbbf3";
+  sha512.doc = "aab461e990176e1d0cb82573edcfe11a4bf668b2d09edff05f673fa20d24ec76464495bebc64086fe3bb4411d5ec9590f43cd57949bedaa3366f6c7313359f56";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+roex = {
+  revision = 45818;
+  stripPrefix = 0;
+  sha512.run = "7df2224f9970b72cfa1474898c057799fe42d717876eed864f35aab113d01dfb483edb71f7f4a0a98b6762bbc309ce6fb51e41dc222a6f19be2025f6448fb1cd";
+  sha512.source = "d89d02dd79142344334678f2d8ec4f34eb825532e8be9260cd08a43b28e1aa94ff5655c1c1eadb2f9a365e51693f6195a4851e1420072c867d8b2c0f1cbcbbb4";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+rojud = {
+  revision = 56895;
+  stripPrefix = 0;
+  sha512.run = "cd7065dc6a916941a0fd05ea342d29499b6f7496d1934e06c49e7ea1a99c5be5cd515bbcbc2b5935ff8132adcc7b94e653d55de967700410ace55697f6fc156e";
+  sha512.doc = "fb9c9f00433ba959ad8f7b5acc93b1e7b0db1cffec96b7c988eeaaae89ceecc815071a1e21f78d36279e529f4e9095602b1887d3c5d4164494be502cf4a19873";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+romanbar = {
+  revision = 25005;
+  stripPrefix = 0;
+  sha512.run = "205ed0508765e58397953f28e6a1172d8684f8063fbaaf4d741f4f092e1f652879b414a3225c87bac01e4d41f01c2b0a44632e0cb3088c5c174fdbe42cf25272";
+  sha512.doc = "a5fc8c5d6e6a584de4394c59f9bacddc23fbec8d4639a0476cc0814404f1413774fa2d6bae3d8438cad2eeaacb56405680c0c6bcc152a5e4155ecb73de72f07b";
+  sha512.source = "9a96ef043dc3542251fab1dc299742b5c322518c61de8d365c290926f2365e5bd6b80a57fcaee19a30ad504ab51b2dcf71170303ab92eac97fe3db4a76dce08c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0f";
+};
+romanbarpagenumber = {
+  revision = 36236;
+  stripPrefix = 0;
+  sha512.run = "7c8fbfcd5e9ec9e306e7ac836fb4c82db3bc42179bf77502b5299c17c4d3ad515b9397016d600011eb24c5d9f2eda23a485634c5aca3a765653cce32d7bf82c5";
+  sha512.doc = "a46bbeef023b74c576da84f9791d4d6d47a08091b43c6bf6936c4e17ff54ab2bf5b517cbf1d07e59c077e0981ac989570265df1fde7237ff24727e33d6f1b71c";
+  sha512.source = "953af4fff1fe7e6b3e4bfb7447a0da7207f93d7377ce365bfdf563c9dead97860826c8f5b8dc491164437523e27a040fee5b95b58f09f248166268197233f89c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+romande = {
+  revision = 19537;
+  stripPrefix = 0;
+  sha512.run = "874883eb3592852dd6dfe2dc675a768bed8db80c0c617cad7c28bbefb2ca111adb410a584f75fad935bfec330765650ea9d0f73c8c5a9fe567526b5fb46ff17e";
+  sha512.doc = "708ffe5a4dccf8241eaee7d22787e0e30bbd10faa1cfd538836da676cbd4f67b16a80772f8a4cea08f59af6d41a697426c4a4254c481d13ac3a10157b2a679e0";
+  sha512.source = "040b154c19ee55910b05d0bfe355bbf000403fcc5c536a081e4569390c599123d64000680cb847ad710204d1c33d7ceb0ab7ea049847ff4ad0762fd9c0acfeeb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.008-v7-sc";
+};
+romanneg = {
+  revision = 20087;
+  stripPrefix = 0;
+  sha512.run = "4195303ca32b46d722bb148ce4079bbea7cec08fc74a7b0cb6232dcce517b7b5a10753be22fbaab62ec11d894955e1368f3a6dc2a2474cf9b9450e035bb73c11";
+  sha512.doc = "cd583b94911ed57e6c61689d437fb4a55a868813fad5791dfa7231b4cbd8b7d22cf4e6f3fe90e2cd36eb08202f4058abf93b5df2d74e1841070378dc9c31db64";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+romannum = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "06fb28ffcf6c8212ba3bea5e3fd93fe4a5394ce1cd3977556bdebb982888c2c0f7e45dc751f94b1ecf921c701fe6783166e73a595d5da55e874359b7a4065182";
+  sha512.doc = "60caceb87b6d866c905685cd180f0deb73f400b33007e0589e1aa5a0b42ed948d88c672a620ebdd4d78bbf92aa81c1094e4d4d6afcb981747e65596711e112be";
+  sha512.source = "dd1a19bdb63aad8f3c3458bc000933b9c0d04a3b331c37d84a9e7de4a7027b6cbed113038129a789f43d1049dd72acc432e6cebbce365277026d5e6b5cde328b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0b";
+};
+rorlink = {
+  revision = 67461;
+  stripPrefix = 0;
+  sha512.run = "6dcdc3e26fa093346bb60d2346af7de4cae4ebaed024fa21de1f28cc462b956bb21e946e189804a69420ed26fee38b3a3f8d45cb5a04d16c2859f4f0e0caf8ae";
+  sha512.doc = "cc711052ab363104748b944b0f9d32e6328e2613a100871a53a2b9464e4e4d16b6cbfa4c42bbbd5cd093bfac1518e605af4b43205fec40641a0e2465b50f7728";
+  sha512.source = "105222e02016315b5cd5367e2a739db1c977f403e7cbc3172be8a2528e140197472785a7de48be8e252fa702941963ba2b4dbc75ce52929bea0d4b02b5b9399a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+rosario = {
+  revision = 51688;
+  stripPrefix = 0;
+  sha512.run = "e1e200c49ba98fb1d2bd5cd927ff209a1f72b9681b1cf3b49baa263985790f7d4854ac1cd9fedd464e2076488b3042456c7fede5648dd8ef23d1ba6701705437";
+  sha512.doc = "1e5a12a62b7e62587b452d0f8926757b987e83a2980698deb94c6955cff1e45ef634ec8ac1c1051f6567db8a3de9fe8d4df23a5f80317ddfd2ba863ef15935c1";
+  sha512.source = "4c7613a697439feba9e52ebe40dcbf738370f3ad5278ef0232f0e0e13ba9ac2c46d60233c8159c626b97b53af5238f75c096106b0b8529423d5fa3feaaf57a87";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+rotfloat = {
+  revision = 18292;
+  stripPrefix = 0;
+  sha512.run = "2976812ba6d6bdb304d56c9f10f08c02aa8acceeeef6eb05ccd0ac7b3e3b86984794017627d8f939994ea0228bef5e9d6cab0b08843e87a840ee5c2390dd0bb7";
+  sha512.doc = "020e080e047f20db45bf83ff32c267f5a10b7790adb64495d09ebb3795a55d953154b8afedcfa0214a77f11c35287b18949b8f1fb89b6ee51aac12a04832e922";
+  sha512.source = "b3b986dc11e30b68f75bfa371c85eded713f759f6fa0229857cc05172edd70caafd9124098813cdafd1f060fe57a6667326ee84445fade50bb6acf9d1cb6a95f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+rotpages = {
+  revision = 18740;
+  stripPrefix = 0;
+  sha512.run = "a206e4147a68ad0ae750e18ee6a360d6ed2ac91785b75f8fecda4b63db695a36a9602da8dbec1310feed4072f952dc49f4d2c5d2817fe74477759aa55246177f";
+  sha512.doc = "2723d32029abfc773de8f26a1f08cb3535c5878f63effcb94fcc6a2f98f1a0f9ff3c53df8a4d9c1ce1f99b52b9fd7b2f5c919dd9cc915ea8266835aa85ddbda2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+rouequestions = {
+  revision = 67670;
+  stripPrefix = 0;
+  sha512.run = "7eaa938339d1e59241b85cbbec4238be4fe2aaf4dbb3544c6d1511723c62b96dc5fe38c4fae062dd2d61760739caf0df3652b710546a6725d072969df8e68b0b";
+  sha512.doc = "16ea492fabb90e0a649d5ff8e13b358a4ff7a612df34cd60a7023a1572337d237b87bdd5deadd206513562cfc1a3b27e834c49fbd5204277d38dfcf3a1e4e586";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.3";
+};
+roundbox = {
+  revision = 29675;
+  stripPrefix = 0;
+  sha512.run = "078938229ca1ccba4c26f97eae59376afcee469629a7e8704d6e376d5bb256e8991ee1cff17f24e362772b78ed800b57bc6018b10e897daa73c142fafa1f62c7";
+  sha512.doc = "cf0f56e42a82d6ab36fe6af2ba690024cb555192780c04ef1a01e71fd6cdfb803b0129aa95e304de4fc8c1e2d1015b14dbb6631d9773bdf463fa52c22209501f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+roundrect = {
+  revision = 39796;
+  stripPrefix = 0;
+  sha512.run = "01cdc4c8443c50a91dd408c52122e8ae65257344176227a508cb082f92d61bc02756d47e27f75d7862d3c87c26add2003604956ad00b448f63b4f6417c520ba6";
+  sha512.doc = "35289692327bdc68acbd442588fbd37185f9e00e3e4ca78fe500474c53ef96542042cebd18cba7720bdca0b72f19384fd3b8afcf45447644bb3c560a1385595f";
+  sha512.source = "9866ae92b2c5f8c446ebca5c7afcdf3e8b52f12504b7d74c5ac4faa570a98ab6775c3ba5ad99d4300c1f9b7f92ffa423d5c73991ad47951a4e2bee3eb3bfe473";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+rrgtrees = {
+  revision = 27322;
+  stripPrefix = 0;
+  sha512.run = "cf80b48866e36b983527f0646c94fc9776ea799ac475a2c5879a4dcb3b3b0d052e061f871b6eb0a8c0fb1153c0a9f6f0ccfcfb1c6b8f3ff4839c3d454ea3e62c";
+  sha512.doc = "71992711c27e741403c5f7cc268e8597e2ea17abe42d953bf0c3caf255c0a8673f6210bb808fc70b741c694778f7cc7a45435afe39939b1377951e8e2343d73e";
+  sha512.source = "8ef5cf9dd617b1f37c57cb70e2aa7b3706d171eaca5e5498fbb3f653f409667a058254fd618681dc2af701d1d9e544d97ebb65c24081ecf1e40cd81f442183af";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+rsc = {
+  revision = 41923;
+  stripPrefix = 0;
+  sha512.run = "abd1d24110722545b93cc16ff35b70c87f467193a33e8da2a04eaff354d89782911e42a46da5d380b9406f923c6fc48d38950d7346cfc799abc0660efa23db8b";
+  sha512.doc = "8569a90d7f5c532e366901d8bd2bab3d5a32d5b6d1c4cedcf179d1ae96a6c34ef5d294392f93fed589a55baf3ffddee2cd35a67c2aa8fc7e0477b47ce92eb411";
+  sha512.source = "b3f097f76dcd1288a70d7aec88d7ae9fc58bb4b3f3a2589944c379aba887b3e7e6c2fd6b74b2a70de58e8cb078edc0d6ac0b1997078d0c322aca9928ba033202";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1f";
+};
+rsfs = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f5d52f49ead227b058841bb88571ae0d6fb40b95dd652536887acf13c0a5dc5b61e3813faaef2effc26539125c2776e113937a1612e7bc7146e7d5517b02aeb6";
+  sha512.doc = "2d23715b38d90c686d7edae77f2a774041d3b679035e0399b7b6089f9b17db3ea4c6c3cdd655bb6e5f3a3cae782e30984c1fe89f5f263a0cd86b441c5376848a";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+rsfso = {
+  revision = 60849;
+  stripPrefix = 0;
+  sha512.run = "7632b0cafcb0d28f5f4b742f8c457634a9cd1ec7fd59e61e01fd5f3da3964ae941fdf2fbaba94b0d0934270ba56a2224352e11075970e28bcf16bd9b6f97f236";
+  sha512.doc = "ccb3ce73add1f2a4f269728b8189569637327d85cd1a4d29a03904872cff10ce3057bd01a9d74a94373c3aaa52afe74a98d07bcad248fd18943efb0bace6db36";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+rterface = {
+  revision = 30084;
+  stripPrefix = 0;
+  sha512.run = "3c3cd754ab17d03d50c35ec9824b76b9d4528276fe2b5a882d35df5537ca12f83956b2c596a269f9961f243bbd5e8c394c6f1bd508d07cecae50fa47bf05fd86";
+  sha512.doc = "c8c38026ce2bf2a996ba40062fe3bce797b381633e4aac50ec438bc9fb567f73ad1c4e764af3cdc816e62713d4f1dd8bf2ab1814b50d086811359e999103c7bf";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+rtkinenc = {
+  revision = 20003;
+  stripPrefix = 0;
+  sha512.run = "a1f31a946838123b65124fc7220e77283cf89105ae439f1e851abfc3c30b6a6b7c83bebf676fe47de1dfa9668cfd22c638567ef9a097aa97dacef1f0e3ba1eb7";
+  sha512.doc = "f3e7b1e7c95af7bf89b58ac949ab5b3fc12d991a436e28196f748ae033c46446a0cb885943777f44af1fe5ad4aa579e0fc43676c44812b01cc64d85e4ae15e4d";
+  sha512.source = "9078c15d4c1531b9ca0b0ea6a2561815538de45dc33a9f8cd8f886cb7ced93a9fdf8296f409516480fb58861b599692982b503bd49568548b4d34743c44ca037";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+rtklage = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6e39e34a7c293f503949da66f1d5ebc65ae0388dc56e87992e9fc4daff1a250196afe68150be14ee2ec3242393ce9e5ea7b681cba31b7ed1c2d58526f6506554";
+  sha512.doc = "550c21bcd8af04041f1fac11f2be3ae2a1f01265ad6bf31243569820c7b8d83f32ccd0cdbcc4d5a7a5905ae9aa0512a449a1b2d6923affceb344152e6c12d72d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+rubik = {
+  revision = 46791;
+  sha512.run = "67931287ea126947b5b2d567ba355d44ce094b2b527288ce32329de4a73434be9a43cd520e6c24ef570a46a16c0edcf12212f46228ee1bcd2b8a8be7f9db3a7c";
+  sha512.doc = "33d5c8210600cb4ce7b1313d1046f6644f0a6648f7ee9676d4d628d042f6501b5e92f2b56a31fbad6f637dc93a460a568be9e1335bd52bcea825f5772b2a9d51";
+  hasManpages = true;
+  sha512.source = "3159acbc71a007877c046f6c075bf271e031feb00cda04c1818e4490396c3fb0651f160c7a98d8d3391efccae6a5b1dfde2155c6bde1c463e1c7416107b4ab90";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.0";
+};
+rubik.binfiles = [
+  "rubikrotation"
+];
+ruhyphen = {
+  revision = 21081;
+  stripPrefix = 0;
+  sha512.run = "d681972cad53b86167f4800f78b5d25de305d2f3f604e6b41b481c432bb9f09a964720fed5b5052cb8a30148da1bdc76306d8edb2139018d83c331d3439de958";
+  sha512.source = "df587bb8c81e73f70a93146d6c3a50c2a66b16084e8eab0b01e0aefb3ce073c6b6e812cfd8c5a1520f98ca58e2e2e0634877ca2987742eccc4d7340a7d62e23b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+ruler = {
+  revision = 54251;
+  stripPrefix = 0;
+  sha512.run = "a0ac63735eee4be96fc368bece6eed80058b79689954780990e1da5632448203c4f99d9b13f541a89e523f4a531983d5fefd836b99ed64c2f177723c822f8749";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+rulerbox = {
+  revision = 50984;
+  stripPrefix = 0;
+  sha512.run = "197588dd36056d6b6e9f7772205cc44e81734cf63dfc83a7c987209df0c2b47f91f460d322df05f123768f3d10d9af8bcdda6619da394fdaf3367be88821a135";
+  sha512.doc = "b4de5828d5602845217726ded4d56ce6f4008a599bb1ddba89745ab39bfc2ba9ed3fcd1f636cff4743252a975a18ba07925f1e78f81fc8cc2ded80a7cf8b74b2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+rulercompass = {
+  revision = 32392;
+  stripPrefix = 0;
+  sha512.run = "8f2e8d9a4d61c3c79e3ef29ae554db2696b9c374fe10f59fe2a4baea33c679a0678a95c30ea1d4310662bb5af6a1b02d88db7bb43610545b1ffb39fba19b5001";
+  sha512.doc = "6077a3c137269e5be37b62879c394d800f4bc80cacd1d9600b2aa81503958e2fa29f0364db58c1418bc206db916f84f46cbcf70d0f30a9276a6e78d154150425";
+  sha512.source = "75765738f4d3b635468d8e1ebda805e0fc6e2bd3eccfbcc1594fcce89908834572aeec85fea189368d02d05ba1fff6d0e2bb454ad25bce2b92a45cffd74a979c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1";
+};
+runcode = {
+  revision = 68223;
+  stripPrefix = 0;
+  sha512.run = "5f5952e07a5762b3f37de7d97aca5187d8133e6443fa41ed56802a9f852bc9e4d31023430e9969e836d0150e2862d67f0753abbec683d112f3752422259187c1";
+  sha512.doc = "cf2ac28ebca780c9951d42b38806844c55455638502708e6e79a2d9aced7478a797bb89af409364fe193d195b177fc8389a1021e4f553e2c211c6c38d5e6e9d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+runtexshebang = {
+  revision = 68882;
+  sha512.run = "8e681e06b29e235d76b21370614c22ba57cf69debff19869f3589ac5a1342f368621083a17b7a1ddc1ddee37478bdb9b81f4050bb9a2f7d28a7d753909238233";
+  sha512.doc = "4f2754641930105b1bd70a0a116e724e019c1930ec49e27c3ae895c35b7840c54082285cb6241554915234c16a59dbcea9ee07c509d09d5315ff6f04e0137168";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "mit" ];
+  version = "0.5";
+};
+runtexshebang.binfiles = [
+  "runtexshebang"
+];
+russ = {
+  revision = 25209;
+  stripPrefix = 0;
+  sha512.run = "11bceea67aae767037d728ab7892eedab312e9477f1f9f7501f9702fca4ceea4e21bd575b1589fb545abdbdc5f5f5315243f77adb4c9b9a2507fb255481c5541";
+  sha512.doc = "876cba326071d0f347d9a1a4c1eca692ca743729b9604a51bb5b53de96da6006ff24168040e77df60b1999cb22901b7318669c32378a869081956dde40974802";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+rutitlepage = {
+  revision = 62143;
+  stripPrefix = 0;
+  sha512.run = "fb7d3aa93191c443ba31e1a366f34efa7dfcc896c534d3696002ebc54f3b24cb34131c50fc7d584f4b725d3b56a323628441398b2e1116789437460b97e21fc7";
+  sha512.doc = "f8293227a99eb022a2c3a3ac75d7e8ba6f61880b62f5cce11eb791bb489386de93cefcc2b607cd4880ca58bb933328af66ad93b4c6ce0e16a842c56fed231206";
+  sha512.source = "f42d310b3697077a842fc13f580adc605826c94984102769b6b27de26548792cfac59517319ebbd20719068c012389d0c0a10dc0a89986a89855c8ab8d039620";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+rviewport = {
+  revision = 23739;
+  stripPrefix = 0;
+  sha512.run = "eb4bd4e75f021db40119cb4d4334611fa80d26885dd4229ace652bf8dbd7b4647a6dc4f45c8be78ad8db0cf1001b7117ce3c38de2483f0dd96da05473543ac10";
+  sha512.doc = "10f94dd8b29d354eda99e8c0f15b53baef80714f7212714a94070061e403d45fc5a97d25174f268a14b0f4c924af9b25c81131929c08be1ed9a4e62204f17c22";
+  sha512.source = "25e91e8c4f52b1752b32293828d174fcf3cbf6491f38dc2c58be23ef7f2a84570c96606472ed89ed837951bd2ab9bd1e48d4a126beef160c14899b0e70240eb7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+rvwrite = {
+  revision = 19614;
+  stripPrefix = 0;
+  sha512.run = "c187dcb7e1c72b727cfd0827a55d721c6a094679c1dae27438ed030209042b49c646af20e158900543369ca8ceee9896a9f36de76607f8514004df80e3be15fb";
+  sha512.doc = "545e5b96a2bb3646a7b4a6eb31d5192ef85dee9ac0b6859f6b414f26c5235651294f486bd132af112a2c6021d6843e6ffef8a8f79b7389b974227bc1eee16230";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+ryersonsgsthesis = {
+  revision = 50119;
+  stripPrefix = 0;
+  sha512.run = "0846fb24c6b96cc30edf46d1311809e1170d3feb13b3c26be4dd330ef8dd856771f257ca197f562ed409815f0edb7e8ea744a38b9098b86a325eda9cd4ad360f";
+  sha512.doc = "b0d57ce3dcab586fdc2e15f6c2291560c43dd772b693ec11e0678e083a1475c21b55601878cf938e666d0f8a5464ffb0b79281b62f4859200fc6cd67b33b8779";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+  version = "1.0.3";
+};
+ryethesis = {
+  revision = 33945;
+  stripPrefix = 0;
+  sha512.run = "63988ab74eda81270f0e470f3b1d1c772b17668fd9c6526fd8d53f588da8e52d3690b4c3ee898f2b460f83ac44ab4c528a0c6c48abf1a1cbe21427fb4e678a1a";
+  sha512.doc = "03ef086a51a97ed93038338b99a516ba2898a0097326f4cff3c650c7035acc4bba7ee2fd6458c579a9f1af4ff31334dd22cc23b7004d08e58a259306ee1fbd8e";
+  sha512.source = "0754857b37c510f7cc581201c516d3ca1f6e9ed9bcc0825968efbe728a281e2ec73f58f7415efdb07bcdaa66fbbab3178793907b3da17511e69044bbdb2d8aed";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.36";
+};
+sa-tikz = {
+  revision = 32815;
+  stripPrefix = 0;
+  sha512.run = "e30f8b6dd6f082bd127077fc5040ffef53e2c2fe43afd023bf0fa9dd8094769e2d40734dcf412d477989b746e1e5141cc42cc082e9f5b26e5986cc91f8336ec1";
+  sha512.doc = "d6586a6196fa9ec8c70ff6410873604d987394ff09e93462548baa202f22bda479fb4f76f66fb710b8daeb7b34e455225c997f07cc9360a09c5cbc4c45697a5e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7a";
+};
+sacsymb = {
+  revision = 65768;
+  stripPrefix = 0;
+  sha512.run = "59c61767c7f9cc782ca1a9cff78c0226f7860080453a772172f8dfba0c1deebfddba701704d15a2d05cfd010b4baae553d30207ff4701056a263a51f5a4e03e8";
+  sha512.doc = "135724503c2c646bd49ad1e434f5e4c20335f23605839847b3c6729945e4550b6f855ea015e5020ff9de7ca4bc5a46d70e99dc9f372e6fbd2cbe8aaf55683984";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+sageep = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d8e107109129636cf68d88c96a36de87b95dcfc4e154dae51a1145d7a0c58a17ca12e95b1b2fa1312c6c50c5cc02be35b23168d8eca69a7643695c38c5d0bcd6";
+  sha512.doc = "7f92c14d432ca5960669a8faace80ff6d4e97d9a021281c847b7f19942f4c1a06da3657e8992998e91bd1d69398b3fe379da690f81be28cb4ddc3980262c56b5";
+  sha512.source = "25f06543efc104bdcfcd81fbae6182498f23a7d1d958671cac945f5442a59a71033bf3fd174bd41c438c7a6a066d41b1e4a375b559b14bff6e705ad2ca894b05";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+sanitize-umlaut = {
+  revision = 67126;
+  stripPrefix = 0;
+  sha512.run = "2f9514b9424a72762c9b4bfbe2bceca10dfe4e75a42e9fe2e26d6808d14fa2aab62a03f26becec8e80b00c658d4452e95c3b84bf692d64cc287693b2542ec3b5";
+  sha512.doc = "2de8f2935de490e127f19b50f10698ad323e823ae4bcb7b357b6cfe084c9f6a48d2314889a54974a4b58275667da4eac89cebfac5c25e570c0172ecf9ca44af5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.0";
+};
+sankey = {
+  revision = 61874;
+  stripPrefix = 0;
+  sha512.run = "8a77f2ea3b4c2167d823a839fe2fda2c633ffeb775678e6fa9cb84558dad547f4fb03c3fda6c1f85c4984628ce1515ec874482e8a223385bf1c24b2c30dfb362";
+  sha512.doc = "a3d18d1a43f22470ea5498423c10246c780116769b0493356174c8e9acc6d9aaa32657f7582b795d2cd720fdbb6786319090303548661f899a650da4a0442629";
+  sha512.source = "92b3d428919f217c8c869d3896829e324670647c29321bd868753e3b408c5e227acdc15097c81dee01b3319c08fcd94da1cb5e11ceb5d5775a90235a54e997bf";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "3.0.1";
+};
+sanskrit = {
+  revision = 64502;
+  stripPrefix = 0;
+  sha512.run = "85b4c707f00cba5b9be49f228f0466e3f0482562d481763b9cc7f269e84e4018e3c00668483b6ba798b0336781555e45c06a6be116c2c4b23a978defa8c8141f";
+  sha512.doc = "16643e1c8e72e37ecdfae0176c415fd655619121cc75fe573dddf4a07a64161050a681f524747868101e72ee655de6935d3c21f68e74c31bcb7113d9942c818e";
+  sha512.source = "e7836d95d46335a3e809fce62211029addb84ad586fdd74f2f8ea924e767bd7c800edac5b74c8660c10eec46b5a8f0b287121e83b48e029b98ae69cc19bdb14b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2.4";
+};
+sanskrit-t1 = {
+  revision = 55475;
+  stripPrefix = 0;
+  sha512.run = "50f7a12443730bb017334ed1bad840dd2086a0225586eeae02f1386f410ae802fd043b1ce8a90e495aac7bdb20e2a8532c4cf98d48f0fc32b96da24f28de26bc";
+  sha512.doc = "11a0bbb4212f72a18df5eb1ce1e2259774c6376a3c107fe32bed4176d23da2f5bda5cab71a7df618c67113ac9d65969ea8e680ab939c7c6cb2542ebd4c7e5efa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+sansmath = {
+  revision = 17997;
+  stripPrefix = 0;
+  sha512.run = "075b9a32512f191767bfc739b833497eed371c2078fc8511ba507b19e2744675bfb3caeda40da484ae559aaff44aa4f6b2f7f5baaeb0c30076654593216fa5e4";
+  sha512.doc = "7923dcfcf20c945dc61af747000694c59c61982417307356ef2ee335f7a3eac7e44974a334072125ed4a3ec3b29caf342f15dfda1fdbc348a5e2cfb8a4dc2469";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.1";
+};
+sansmathaccent = {
+  revision = 53628;
+  stripPrefix = 0;
+  sha512.run = "685b0c604978aac45efd75c37652471aa165bfbbf12dfa686320a6a9ef926f9043382333ecc26db6d2ff4d12732d135947145ba937eb6d01d4a4e9aa17784315";
+  sha512.doc = "c9bf7d65a232d668243df9867b2eca64e0288fd733c6b39ce200f64fc5b0a07c98ea6a971446f67f1766998e169c14a80eda71104c1653ed54d3865e6e145fc0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+sansmathfonts = {
+  revision = 68777;
+  stripPrefix = 0;
+  sha512.run = "d31d37820883b0fa2a97dc878d11b6866554839acbae8c56fc10fb164fcfc2af5590d0d562512aa313ca950c32aecb4d4b89ea4113326446a75006b34a2f677c";
+  sha512.doc = "5972253d34cb39cb0151050b4e9dab45dea50901a84f736ee8a25beb5ad647a112462ed5b3d46c61ff20a3a20852000c64736c88df9ed59defa2da5bf54b5638";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+sapthesis = {
+  revision = 63810;
+  stripPrefix = 0;
+  sha512.run = "14ae91cff0c5487a6751d92f1ac4e252ba53feb74883c3e0f078f5269845fd85c906a4f962c4309f6765fcbadf934877a183659d68a88e1050fe636c0e5d54be";
+  sha512.doc = "04c294886ecc33f3725222d9a44953dd2c4be7a5dcc5c9d08d8cc05c2d8dc9c003bfa80a7ec027956b1e680a555b1fa70af64a91c27833a77ad4469a1cbc6111";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.1";
+};
+sasnrdisplay = {
+  revision = 63255;
+  stripPrefix = 0;
+  sha512.run = "5f6483d066775682cd08b9f68b7f31f5e8bedaf9248b7345dd23a950d5e61e3d2664dc2cffe2a86b35273044f8d8df2694d4d3598d70b974d38e02ae8343a844";
+  sha512.doc = "a99bda8628ed2b4cdc0ba24bdb0f514ecac643481d9d866c2992df131354a677ee6fe0244285ee4d9029eb10b219c9fd9dc5f7f93a01414a3db2cff8f58e08e9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.95";
+};
+sauerj = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a4fe5bad7f3d5c895d6166846100cabb1b59e5f37c06d21e451acbaeed0847ab93d9995e70209ab18cc55bf8c78a6c83cbbdd49a45a4cfe511cdad41baf3ddfb";
+  sha512.doc = "3ec0f5c2132a809b4f2f945255f0806508a3dfa3733119368ba59e4dcf5304ac9876ea5f05912faf926db651d1aaf4a3a1c40744fe7d3a077d8bd9dde2676754";
+  sha512.source = "05d2adc3b802e3c338dd92818cf7ce4d3bd6964dba8522bf4628bfc2d13939bde47cd0892b4fb629270d5e9104b9577fe6e3ba6eb71ca60a07f5e6441b0f572b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+sauter = {
+  revision = 13293;
+  stripPrefix = 0;
+  sha512.run = "17fc32a3dae358be5215301abe13d9e865ff9f52f58cdc849d5fc80aeb1a79723d0a39282383086282fbddcaeda0fe586cd3043edd582e0addc0b223bc3ee756";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.4";
+};
+sauterfonts = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4d7e491a7a6a22fd6ad8f407cbc8c041434466850e2e5efd46897843281cb71e046fc6cb849cb091cbf05191c45c52a6cb3e0d806eccb9133fddda9c8f305969";
+  sha512.doc = "16647b89752d1871c798f80be91bacf375ae9a4d5199ef7417edb4ff019d7aae548fbbbbde47f84cd5c7c36ec4988ad1df82735f4aeaeb40180b07a86dceb5a7";
+  sha512.source = "d8379fb3c2dfc5dcd9fc5c22101855a27ef5de3ac377f1e6a56bfd397888c5f7f94dd37c24c6625a9dc40f15160721c468b5a5bbe8a35f98f983755889e250d8";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+saveenv = {
+  revision = 65346;
+  stripPrefix = 0;
+  deps = [
+    "precattl"
+  ];
+  sha512.run = "e0e368dcf3add9d59b22d8e04da1de9110d6f1ad2e31cd2cd44f894ea1d7f0cbd4eb41b500637e896eb179539e19c4a1d0601035e2404726dfc98677f9db0927";
+  sha512.doc = "2016c815add27dca5b498f4cca3ce69c9c18f544b9651305d5d9a9a7a10b30fe187c526da37813218388f8305fc3df83257b2e9b6289171febb770c7d59d9274";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.1";
+};
+savefnmark = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2d39c1246bc9c5c28222a6ce96b93bc0c1e93c3155f68f44843b5560b548191ad3b608f24b5c444b834fc441238a0d2174a9a8ec006f01b160f77159decfeeb0";
+  sha512.doc = "9ca251e6d17373e5d6f308d2e75896aaa3e44d0f5883be65f7629f922f0eda296c963530e8fc1c80073e0706c2c72f97d062cd731481654c0564cdb695eaa86a";
+  sha512.source = "984807d4efb4b24445dec6742e0328274527ef3c7ddb3df57a5d941531d1e634b5d672c9a510b62f7053d69c10668c311457b3a1065e1775f964e9a74ad027a2";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+savesym = {
+  revision = 31565;
+  stripPrefix = 0;
+  sha512.run = "212ea18ebb424f9b64ca9c75a783dee9ceebac09adcd6ff6c721d90796bf4121aa8710935529451e6f9a4de9c3cb5910b6c07d6fd6b7093c4b9904348f43a1fb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+savetrees = {
+  revision = 40525;
+  stripPrefix = 0;
+  sha512.run = "f31ac72f12ecbe2ab05bde14de907707988d6b9ba20414543b9176b71d2a0d5358a34348177857c56b961301678b612ee6f767d1b9cb671b9bab344bb8230e6d";
+  sha512.doc = "3e5cfb62d4020d32d9bab01b3df2ea1cb485240aea5eda3541d29cbe38487ed8b242a1eb2b9d15d08bd742390a8d8a25b584e110145dab330580e69e2287f181";
+  sha512.source = "2dcc671cae73824a2e4cf10682f0ad7d6236f5e856267663f14864804587e1394fe12de5e3e54e5a64abb798c16014fab07a462584eac3a561f971496c58b5b0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4";
+};
+scale = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2d090a08c8f7d5d9b332f390b29b16e911f339071579cc09b954b2978df4b410ff3c47afd6b8bea0ce7eabac551b94f8630fdb7aaa4ef39f793748925157a19d";
+  sha512.doc = "aa41f6de8baee992b123ed40086dd5d0aff63c187858502c66056a52f3b8bfb12a5b7dd15ae9279a224e9d67d717f3927e97f5879ab09ded9e0960a3eb910a90";
+  sha512.source = "387efffefb6774f50165a0c3242005a52418c5c9ac3ff6d1b87f696eef7af8a57a19a4efe6066e7939fcd76ff8ff9ce3ab4941d30d36c6bf30beeea1a95d4eac";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1.2";
+};
+scalebar = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1e367f025943a56b6592238e2961f967beb1d5ff5b68ee83565b3926a392214557237e482ba0b174ddb2e6861e4690e636edef1a5fe0473c465a0deaa1e1bd0a";
+  sha512.doc = "cada3793771a28c3ce30439c782d245b6b21cfa426d2268e7e072a8559a81692b6c4e9e26a8bd452fe5882f39e55fd061a1af4e9be362bdcdb1f6ff6bba781e2";
+  sha512.source = "f6f3e8d007ab3efd6bf1d45b9e3af1fa846637a8b66226f9ae24d64b3be9938b547bc3879a33f44d465f8f62494d1f55141c713b18161ec4006ed76eaa52169e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+scalerel = {
+  revision = 42809;
+  stripPrefix = 0;
+  sha512.run = "0b0a996bbed0fc185714f84e32c76e5a9277137d3d8dcc6b12b516afa97f3c80b2684c3c22af8717bb3e6acca267a3862c1244df7cb71eca61b10074fe1c3a89";
+  sha512.doc = "1533997bed3ce5499a1285a6db03be20f28fe70b1ebbac5d117e692c53068ecbe7f8082cd5f93c753bbfc1eb4fb3b78372c7b14f5e2c636398f37dbc17972d97";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8";
+};
+scanpages = {
+  revision = 42633;
+  stripPrefix = 0;
+  sha512.run = "e13f7849b2b1cbe9fc60fc2e3d3bb7f2879644c282e8664a5ec46b3143f4ac7fbd21f2976183ad410bf778a181d5063b23832734f0ff43a617c9020b16587fb6";
+  sha512.doc = "34eb2549a4d809602cf69eb562fd3c03c8d3fc4063820ce41b52d733228a6a83ace819e5bb82e77cd3be3cb8093e7997377fadeded652d20509eecde458d9b78";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.05a";
+};
+schedule = {
+  revision = 51805;
+  stripPrefix = 0;
+  sha512.run = "c7d58c5e4ecdef504e1d32934ccf2c71cd36b073af4031ee83b0d0a3b3393a40acc26dd4e057f426561903d0d08297bb2a9849cad2cc5a11b02e15a3983f0e1b";
+  sha512.doc = "ca5f9e2b27f0b01531e82e64e99f816aaa52f5f340bc2fdefac367918d50c564cd178709428554a908951c117dbcf3d24753f84d864fcdc546129c3de25d7e77";
+  sha512.source = "e910feb417f9d1606b323a995026f3d3275523b4fcc53dd94d44c10b375ba13d322f32191dfec36b9606174240ec77de1b024c1f8ac14b94224d34e2aa0cdabc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.20";
+};
+schemabloc = {
+  revision = 68445;
+  stripPrefix = 0;
+  sha512.run = "7a99b1fee9c4436371f5228e969786518f55aa65dad3cc540be912d6123efbb5a25634d337bcc9a3f626d37f3408b08999378bdc9d32e1e1db2549499b59b1cb";
+  sha512.doc = "eca5a57f53615a486b21fbc2a0870c5816decb97a1c6bb004d5a6f6faa89f1cd8c7a8a51135904d2ab53076b6ac239f3192c976b54672d45d1eeaed353d07055";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+schemata = {
+  revision = 58020;
+  stripPrefix = 0;
+  sha512.run = "d3c6418c699bb624287d7de3d64695e721fba3e44eb99df02ef58c02c7478f12ca329153295e076a126748239a483e941af3e8d9ade86e3f15a134424c6f4e5e";
+  sha512.doc = "9f71ea989942daea92cce48f3a013fc1eca84ef4a36856e28f280f04efd21a0dd3cc5799f9308fb8fafe803c23106544ea85e2d094bf21f178158e30eab35b06";
+  sha512.source = "55c041e627470133a7374e0a1f00079f5de58949a3c0e8d3c3c78857e7bac3d5afd33304d57f3c70dc98d682e4eec3f00e3624aa22a1310b56269b724df6c95b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+scheme-basic = {
+  revision = 54191;
+  stripPrefix = 0;
+  deps = [
+    "collection-basic"
+    "collection-latex"
+  ];
+  sha512.run = "027a1cd0dd4fc5da2427864bb49fc885a00bec6e8a74da24ce9cd781c69bf4288ddfc3c790307ed48052a8fc00c1989d3939b253da6638370adbb1c43348749b";
+};
+scheme-bookpub = {
+  revision = 63547;
+  stripPrefix = 0;
+  deps = [
+    "barcodes"
+    "biber"
+    "biblatex"
+    "bookcover"
+    "caption"
+    "collection-basic"
+    "collection-latex"
+    "enumitem"
+    "fontspec"
+    "latexmk"
+    "lipsum"
+    "listings"
+    "markdown"
+    "memoir"
+    "microtype"
+    "minted"
+    "novel"
+    "octavo"
+    "pdfpages"
+    "pgf"
+    "qrcode"
+    "shapes"
+    "titlesec"
+    "tocloft"
+    "tufte-latex"
+    "willowtreebook"
+  ];
+  sha512.run = "0ea47f8907821e273a581c52494b6a4e9a511a71e11ebfb05756eaded6e5132fc548312cb6365cc4c1906b4e8ffb14ee5ed496484fe5e2a2611e154091d23cf6";
+};
+scheme-context = {
+  revision = 59636;
+  stripPrefix = 0;
+  deps = [
+    "antt"
+    "asana-math"
+    "ccicons"
+    "collection-context"
+    "collection-metapost"
+    "dejavu"
+    "eulervm"
+    "gentium-tug"
+    "iwona"
+    "kurier"
+    "ly1"
+    "manfnt-font"
+    "marvosym"
+    "mflogo-font"
+    "poltawski"
+    "pxfonts"
+    "tex-gyre"
+    "tex-gyre-math"
+    "txfonts"
+    "wasy"
+    "xits"
+  ];
+  sha512.run = "0b041f3c27ef88e7baec105b7cb24fa65c4b1f092f155482d584d9041ced4f329251f0b0d32f7019c15fff3c57b4d17f057cf39781f8be16a4e8c0ce4838163e";
+};
+scheme-full = {
+  revision = 54074;
+  stripPrefix = 0;
+  deps = [
+    "collection-basic"
+    "collection-bibtexextra"
+    "collection-binextra"
+    "collection-context"
+    "collection-fontsextra"
+    "collection-fontsrecommended"
+    "collection-fontutils"
+    "collection-formatsextra"
+    "collection-games"
+    "collection-humanities"
+    "collection-langarabic"
+    "collection-langchinese"
+    "collection-langcjk"
+    "collection-langcyrillic"
+    "collection-langczechslovak"
+    "collection-langenglish"
+    "collection-langeuropean"
+    "collection-langfrench"
+    "collection-langgerman"
+    "collection-langgreek"
+    "collection-langitalian"
+    "collection-langjapanese"
+    "collection-langkorean"
+    "collection-langother"
+    "collection-langpolish"
+    "collection-langportuguese"
+    "collection-langspanish"
+    "collection-latex"
+    "collection-latexextra"
+    "collection-latexrecommended"
+    "collection-luatex"
+    "collection-mathscience"
+    "collection-metapost"
+    "collection-music"
+    "collection-pictures"
+    "collection-plaingeneric"
+    "collection-pstricks"
+    "collection-publishers"
+    "collection-texworks"
+    "collection-xetex"
+  ];
+  sha512.run = "bda507842fde5239d7f45169ff78690bd96066d1834cdcc6a0dcbd3e3439308c694ce4be6a91d1f155ebe5e29d46173fe13c83bcd4356969da95fb7cca1b4e38";
+};
+scheme-gust = {
+  revision = 59755;
+  stripPrefix = 0;
+  deps = [
+    "amslatex-primer"
+    "amstex"
+    "antt"
+    "bibtex8"
+    "collection-basic"
+    "collection-context"
+    "collection-fontsrecommended"
+    "collection-fontutils"
+    "collection-langpolish"
+    "collection-latex"
+    "collection-latexrecommended"
+    "collection-metapost"
+    "collection-plaingeneric"
+    "collection-texworks"
+    "collection-xetex"
+    "comment"
+    "comprehensive"
+    "concrete"
+    "cyklop"
+    "dvidvi"
+    "dviljk"
+    "fontinstallationguide"
+    "gustprog"
+    "impatient"
+    "iwona"
+    "metafont-beginners"
+    "metapost-examples"
+    "poltawski"
+    "seetexk"
+    "seminar"
+    "tds"
+    "tex4ht"
+    "texdoc"
+  ];
+  sha512.run = "2b3e2e3d31c8fca7297729e910ada06a0d0282b618c92487b7a0da686938dc1f6f3b0881c7d1f8f3d002806ad8860c25802637c77919e21ca54ae8a23ef08ae7";
+};
+scheme-infraonly = {
+  revision = 54191;
+  stripPrefix = 0;
+  deps = [
+    "hyphen-base"
+    "kpathsea"
+    "texlive-scripts"
+    "texlive.infra"
+  ];
+  sha512.run = "f3e449bf0b34deb9ae776685f386245c4ca9644f2175ae51e9c62faa00e3cfac30fa2aa07fbd83b15b21d487ca368c09a18742d2434047783350698ced3b20b9";
+};
+scheme-medium = {
+  revision = 54074;
+  stripPrefix = 0;
+  deps = [
+    "collection-basic"
+    "collection-binextra"
+    "collection-context"
+    "collection-fontsrecommended"
+    "collection-fontutils"
+    "collection-langczechslovak"
+    "collection-langenglish"
+    "collection-langeuropean"
+    "collection-langfrench"
+    "collection-langgerman"
+    "collection-langitalian"
+    "collection-langpolish"
+    "collection-langportuguese"
+    "collection-langspanish"
+    "collection-latex"
+    "collection-latexrecommended"
+    "collection-luatex"
+    "collection-mathscience"
+    "collection-metapost"
+    "collection-plaingeneric"
+    "collection-texworks"
+    "collection-xetex"
+  ];
+  sha512.run = "fdfbbd8fc370bfb0ea35ed9f3137b62eddd3e54777963668b3dfe7af6328a92f37c74e190e7f506ec27a3efbe44458941360599a4061a2765d0072af56808d60";
+};
+scheme-minimal = {
+  revision = 54191;
+  stripPrefix = 0;
+  deps = [
+    "collection-basic"
+  ];
+  sha512.run = "ac177b74d9d5b9fa599831275a4084a0eeb7b764a6ed837d8f14f8391f0e6c0757f7b2d4a8e71868e0c8ea4d497f29d78c4c73fb9e6311dbecf29626516bbf82";
+};
+scheme-small = {
+  revision = 54191;
+  stripPrefix = 0;
+  deps = [
+    "babel-basque"
+    "babel-czech"
+    "babel-danish"
+    "babel-dutch"
+    "babel-english"
+    "babel-finnish"
+    "babel-french"
+    "babel-german"
+    "babel-hungarian"
+    "babel-italian"
+    "babel-norsk"
+    "babel-polish"
+    "babel-portuges"
+    "babel-spanish"
+    "babel-swedish"
+    "collection-basic"
+    "collection-latex"
+    "collection-latexrecommended"
+    "collection-metapost"
+    "collection-xetex"
+    "ec"
+    "eurosym"
+    "hyphen-basque"
+    "hyphen-czech"
+    "hyphen-danish"
+    "hyphen-dutch"
+    "hyphen-english"
+    "hyphen-finnish"
+    "hyphen-french"
+    "hyphen-german"
+    "hyphen-hungarian"
+    "hyphen-italian"
+    "hyphen-norwegian"
+    "hyphen-polish"
+    "hyphen-portuguese"
+    "hyphen-spanish"
+    "hyphen-swedish"
+    "lm"
+    "lualibs"
+    "luaotfload"
+    "luatexbase"
+    "revtex"
+    "synctex"
+    "times"
+    "tipa"
+    "ulem"
+    "upquote"
+    "zapfding"
+  ];
+  sha512.run = "6267151dd73cb8b751ad47b79f9c698b465ad5ae5494d462cf5b3b4e7446a3c014a715381bc6a79eaacfd1ba6efb37c6c1bafbd5e1f82e8db751bbaa9a943013";
+};
+scheme-tetex = {
+  revision = 59715;
+  stripPrefix = 0;
+  deps = [
+    "acronym"
+    "amslatex-primer"
+    "bbm"
+    "bbm-macros"
+    "bbold"
+    "bibtex8"
+    "cmbright"
+    "collection-basic"
+    "collection-context"
+    "collection-fontsrecommended"
+    "collection-fontutils"
+    "collection-formatsextra"
+    "collection-langcjk"
+    "collection-langcyrillic"
+    "collection-langczechslovak"
+    "collection-langenglish"
+    "collection-langeuropean"
+    "collection-langfrench"
+    "collection-langgerman"
+    "collection-langgreek"
+    "collection-langitalian"
+    "collection-langother"
+    "collection-langpolish"
+    "collection-langportuguese"
+    "collection-langspanish"
+    "collection-latex"
+    "collection-latexrecommended"
+    "collection-mathscience"
+    "collection-metapost"
+    "collection-pictures"
+    "collection-plaingeneric"
+    "collection-pstricks"
+    "ctie"
+    "cweb"
+    "detex"
+    "dtl"
+    "dvi2tty"
+    "dvicopy"
+    "dvidvi"
+    "dviljk"
+    "eplain"
+    "eulervm"
+    "gentle"
+    "lshort-english"
+    "mltex"
+    "multirow"
+    "nomencl"
+    "patgen"
+    "pst-pdf"
+    "rsfs"
+    "seetexk"
+    "siunits"
+    "subfigure"
+    "supertabular"
+    "tamethebeast"
+    "tds"
+    "tex-refs"
+    "tie"
+    "web"
+    "xpdfopen"
+  ];
+  sha512.run = "fe8b53391733392a72be2e2c80892ec68fbdb749c70636c307825c8bfd6284945c9961610fd19f8b5d6b03ec50f0a1543c7d159f5f2a19534d71b221addfb708";
+};
+schola-otf = {
+  revision = 64734;
+  stripPrefix = 0;
+  sha512.run = "3a59203e6586f2cdfed6d5a948e5c150da934a809c12ef7d55f04ba8a8b95b0f1365fe7e0d802d8097f48dbad753ae481c3e27d580eb050f75956d4d04ad10d2";
+  sha512.doc = "14f9cc49ae04ec2f9d5ccb48d5267ef3843bf66a288e0dbc4e7cfd00b52331216e7ab179b506acd799b4031ef11feb7c333faebdafe9a3a94bf31da442bb4129";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+scholax = {
+  revision = 61836;
+  stripPrefix = 0;
+  sha512.run = "f7062ca975c2801c220c6c34844d87e410e501442313974c77281aaa0927b27fdfbd2328676405cd1820c809e0354edd332e9fba0d04fa1e9a8d28f91543905c";
+  sha512.doc = "7c64a884165087b72f052e7d3fe8c57857d62b92532bdfc6bcd46e66b12f8b12112bd71ab88d4a9603237b612d1eab5ad10e7de0c14e69ccabeefafcfd380302";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.033";
+};
+schooldocs = {
+  revision = 69238;
+  stripPrefix = 0;
+  sha512.run = "4d6a2c03a588b8b16c73b464ec8d5daab5acd199048d029b4d0ac1c2416e61d4628dc51bbeca1b8957844355bda4d92946f769a2494c2e3fc8522d4fba451f12";
+  sha512.doc = "8bcc4cdfd18544f81cd1859b9b307a66b163fca639a0e058214096a6c11fbb0649f4b66f1e7186c7d4ab4db635d2687fe60d5c9338f173eac85b83eacafe2d88";
+  sha512.source = "81574268cd8e860e4559d4228335d87053726070e9ed05822cc87234c2a08430c6db752e9138b06b9d6633f22126ae588a3103e7873784b770a31f8d59aa458a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+schule = {
+  revision = 68483;
+  stripPrefix = 0;
+  sha512.run = "6fd063de94d68e80b5e3d2e9699330453f82f43ccd059770e4d73097c1172ec0733012317aeba7bc5e55ed322936c20f97c6f53e9d7aed21a29e07151ec54d7d";
+  sha512.doc = "6763529c688e540d937af7548a7e0b9003e5df74d643c3870a016bba105782435146d5771d4d8b69cfec90ece084c245a1825c5f3ae4a5429ad0626b07a9e4cc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9.0";
+};
+schulmathematik = {
+  revision = 69244;
+  stripPrefix = 0;
+  sha512.run = "3258429a336a133334b5f170178b72e39fb3e63ca053a8b541136cc89e88caa991afa86439acffdd99f25a12b7b430d9ef45cdfa7c4ec6545fd1af2efba857c5";
+  sha512.doc = "82ed02e73e3db3e2055725a4d5e11dc8f370ac4787e30987320ec52deefb8de75eecdfd2adda5e76d77cfd8bb1e749b4d0e6d6a75ae2f6ffb3201f193cdd5f86";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+schulschriften = {
+  revision = 59388;
+  stripPrefix = 0;
+  sha512.run = "d24778c0ae93d06b42bc8d7eb8d84ab6e0f42b33352f2dbd79586a4ed9bb21fe99a61dc0eab375e56a20624fa5ad63ade3446d685dcf063d46c0f60264c431f3";
+  sha512.doc = "c9b6b43bff7a90f158b0a10c431cc52e65c4c2d49c773aafe7e54d1283d97c3badfca5315ff982cf0a524b514594faff5666063164483987973ce60d2edcadb8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5";
+};
+schwalbe-chess = {
+  revision = 63708;
+  stripPrefix = 0;
+  sha512.run = "ad2f033f018767556e8e4c2b76f1d2c80e14780cc4b483e73bd165c0cfab11453514065597fd7dbce05e8acfd4c307219156abcbb3d59ccead70df61a128961a";
+  sha512.doc = "2df38380cc26d4321d8b18facdc6c427d1986143ae1ef8227a2d536af2fda5f6bfb73ccc395156a7f018c9c9af20b3b89bc994d9021bb9ff3fe5d771f3a6bc59";
+  sha512.source = "a75dd975edceca279cf120a08d0666e9227af96732ff3d71dd82068b0c185842902244baebb074ad1ab611fed8064772cc65dc2353a9a79633f8bbe21955dc95";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.12";
+};
+scientific-thesis-cover = {
+  revision = 47923;
+  stripPrefix = 0;
+  sha512.run = "2427c534ad767f1e8f319aa24744346d4a0a39f73d93c779dc89d3cd0abfd683d7a33c81026c4a5823ad686084f026193c917ff173d639dfac2c99350a819c59";
+  sha512.doc = "31bc280c96b87b079a7dfb6a0c2ff1a03f80c5a047bc2c11b9fb192c50b8e51a65cb3fd5c043c37124afe2383a611f38accd91d6202416451b3eb34bfe855077";
+  sha512.source = "ac14306fa7591f6fa684dd8fb6d7c7335b6ce5c8e3099d80286f05a9f378b4d430b1210fec9c071aa8a4e430ff6cae9ea712ea504cc575e89b02751c02e60bd6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.0.2";
+};
+scikgtex = {
+  revision = 66764;
+  stripPrefix = 0;
+  sha512.run = "32433b1c031747037fa329d8b8048563cb53af867bebde85bd5fb95abbdfbd67434595d5fbe682f1247c23535d75929f341668fba9a02221b4864728a5f3cee3";
+  sha512.doc = "217da3550e3752fe239831790294d158dd68d16545e5c9ef3e047bedcbe82acee7e34d4216ef843363979e269e03180f20ec9e83b033b44f28acabb67ee26f74";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.2.0";
+};
+sciposter = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "1a4292c9fb6dd8a8780968c69ee70a88dd5d1c5d81df9a32e22e08c9115528d8af634a1681fb1672664d57f80ab333a1b811a9c0e17597afdc358988e14fae93";
+  sha512.doc = "6ea102c2318e30080224684693806e16008f946a01fe9e1d232a871f231100d1491324a3ab0260746a61a10125afff6b20072c1a49c8da279a4c0b477361e46b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.18";
+};
+sclang-prettifier = {
+  revision = 35087;
+  stripPrefix = 0;
+  sha512.run = "77f8909b870fbaa4f1a0414f75f08ac602051d26c0c935be8661be8820a0b77734b614b9f5c8333b1f1fd12f57a6ee3c4c403f151bc60300e454673a2a4235c2";
+  sha512.doc = "7680fa17762f17d2d7f3c9d3062bd194394bbbfbee36e4704e8b95b2be568cab51fd1dac9d90c6034919b3ec61f75f0f7689478c16f53ac7b4ee820768eaffa8";
+  sha512.source = "8a9188cccf4eece9844156747bdf8414bd42227cdb64ae79ce2e95c729ebed16c9af14abb943cb1caaaebb693bde4d39e39d1302afc0595444d16b3bafa98131";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+scontents = {
+  revision = 62902;
+  stripPrefix = 0;
+  sha512.run = "692fbbe0cfe9153bb4782eabe8f1713e646d5a93d4b1b2fe0f7662bd995bfae25b8200acb9eccd0057b53bff7c33c0f9ff621cd37596e9aa4cd51f84c2a30dc7";
+  sha512.doc = "f978650de27e8306d70612331c2c98b5e0c047bbf91908c9968c6d613311c034dd00816afdc30b63d7673a8627651467af64a99fb7fd3978947113f8fb6eb563";
+  sha512.source = "d23c98c16b7f60a1a77c0dba32eb7886f5834c1d05455a172f38f984c7bb61ffc84bae147fa7d143c196179fd719887b160718e04ff3474c5ef176af4d99165a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+scrabble = {
+  revision = 69024;
+  stripPrefix = 0;
+  sha512.run = "f4401768ca1b9f1ca4a84a61e07379b9ed98f679e0fb4c3231b3daba495dfabb2d2e980b76088cf28bf03e2776e1e39133709b9d4b9b374292e1a4eed56b3b19";
+  sha512.doc = "ca5b37469ba336683ed77872cdbdfcee2379eb32c840cadf79d54b1e18eac69ec1918e8279f1207710125fbbd871b149bf556ecd36b11836a7a0defd941ba8d0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.4";
+};
+scrambledenvs = {
+  revision = 60615;
+  stripPrefix = 0;
+  sha512.run = "075792b5d0fc5201d672e622a958c600ff479caba2920a32ed3d3f469c525d799d8bdef20b3a08391a22ed3eead6ab3f30cebbed36c469e423e2ea844c170651";
+  sha512.doc = "339d1cd398e62d65c1c92927a07dd4bed740916f2a98dd8ba2d913976d69a70b0340b9cab35250ac3ee862f4572438f87562cb6f7b2031cbe0252d8cc781009a";
+  sha512.source = "1a605abf62adf986a933b6d1723699e9920df07fe383527b5d8491aee5431b5f91354052a0810d8a0f8cb2b8b853a3945d38041fc6e9e573c159e7baeaf356dd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+scratch = {
+  revision = 66655;
+  stripPrefix = 0;
+  sha512.run = "bee431e5f45ef9f5dca39b7ed439dbf141141e4b0f40642c0fdec1650dae9f0e50353e21b58307e86f34e501e06083a6858c140c870752c45138ac6788080023";
+  sha512.doc = "a93b672fe46f97c1311d79de5a9304111bb75983b6151e63276a0b84a660e7b917c36b1a99a28a0b6a268b3498dab9897980aa4ca161dd4b9d59a7b2baaa3be5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.41";
+};
+scratch3 = {
+  revision = 61921;
+  stripPrefix = 0;
+  sha512.run = "f33f18d725253b11097443116e6c0cf4930b7718a5f8678b0d8fd97d8e4854efb31bd016a40a7dec2701a99bf2b5ac6136a856798ead314a8c21cf38013bb513";
+  sha512.doc = "97a8e684ff98c9aca2ab57cf93be2cf8bb4c0464fa772828c033622860e46d8c61bf563e346aeff1123665c878bf3fc68c58727ec2c1579e815c7a8ece078ff5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.19";
+};
+scratchx = {
+  revision = 44906;
+  stripPrefix = 0;
+  sha512.run = "793c4e96cedd97ca37b7906b6a9e78bb06f39572ddfb57d8e4b54dd9b2846b31bbdd835fe1a93517d1430448571a30d26fa8ad7cad0aa3fab6ca526bacb605b6";
+  sha512.doc = "c87994e90a748fa8afba91b443850a2d9f555ff4ac6b264107b42981e078b6966e8cbffd75f071f3f69a78c9b9aa10db65c3e855a4920f3b732446df01da7d6c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+screenplay = {
+  revision = 27223;
+  stripPrefix = 0;
+  sha512.run = "d14dd76c4b1abd9ff7adbef7e4c3bc1f732156dc2d989787bed7382e0288c44dcde18ce05143e6af03ebe83c753bd2b6682cb4f56c73934ca4209a114eb9e3ef";
+  sha512.doc = "ed723ffc17a98c8d4a8c960f56a3550ea74db84fdd06d26b08b5c46b12310fdb9b7b7719ffa25e8ddd21f17642f5f64f1c96327066a131c468cee8ff185cb199";
+  sha512.source = "f6ada6c467c3a9d11096928dc31c7f71131f0b40146a697bda2a3e194c86070a776323c76c8b6da0edd247f8fcd1a65c286801a7353bb53bc6aa364bb7a75944";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.6";
+};
+screenplay-pkg = {
+  revision = 44965;
+  stripPrefix = 0;
+  sha512.run = "974795ca0b4a286077e38f4b3b120cf9fe243d450b87b8397adec2c5425b865cdfbe70b86b815d513edb6ae7051d9ad3003fcd6a15b5b02b624dcd4ee0534164";
+  sha512.doc = "9aa4407d1b317442dd76f762af5b673460bbbcec89e47835521688085183e00ba9dbb70dc9e86a95235bd9a32da701c846ceb2985dc70894ca8abe334428a532";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+scripture = {
+  revision = 69232;
+  stripPrefix = 0;
+  sha512.run = "3b3e30f0c5bbc99a49c9aec873f2ad93535d8c1f3fa79f91619d30fdca347dcf1bad30485463ce875e4511ed857e358824197059732c2538bffebd97b017554d";
+  sha512.doc = "1de0de0b83915b59b54b234daf51ea77aef3bc58a80251c7b055708b7eb8d457806d2b897cd3771f6a303e8137b5f5543dc06c97be94142edf44558cc92a1277";
+  sha512.source = "555f72881eb6d76d9362598cc0e30f67cfe2dfc8747f68e5214258fb127947965e45f0bcd1eac5e173c83e7a4e25e3bb0ef6615fe31cac5f6e3f23814e7266c1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+scrjrnl = {
+  revision = 27810;
+  stripPrefix = 0;
+  sha512.run = "39198edddb3a3ce24bdc0d9cc6f5d7ff204b142c200a9ce36060bb016f1e1e1750b83210a91f1eec90a205c5a4923704bdc0e44876c462eb768355407597a05c";
+  sha512.doc = "bf6dc1704ce60f9323b68d39502fe95d4eaf8409bf65c278e64deb1ff80aaa84f16e294ab08629466b6f8c0ca02ec03142abdf3fe0a43f862352d0ec55dd410a";
+  sha512.source = "05b0a8e50efd2f21699c3bd476cd308e02267a6dc2a9cd480e0f7b2e6d9633c830927c54eaf75e4d329a8f6a8d3993782ecfe2add7b450016f7e7bc92aea1b2e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+scrlayer-fancyhdr = {
+  revision = 63844;
+  stripPrefix = 0;
+  sha512.run = "4cd49bec1f3bec3bef5c54964b06fa78cb21cfe431a05741e69cfac59577a2d24cc5b32b6abd739a96a93441e8cab0db80640e5015dc70729ff32c27d26805f2";
+  sha512.doc = "d4711f5178d0e654f80d2771519d6ddeca8b883f9bf3d0ba6e9524ad4541a9fbf9179fb69c356d1ab0050b051c28cb074680a6322fef41ee765ebef8fe476651";
+  sha512.source = "4d0ae176e9d191b3773a39d7d4982e6957ae95fcc8b06f4233764e57b8954aab4ff0186415f1d8ed988c1473a8850fb99515c0966dd2ce8a7c8d99e0ddff5d65";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.2";
+};
+scrlttr2copy = {
+  revision = 56733;
+  stripPrefix = 0;
+  sha512.run = "5b2f1c1c86a8b3df5bb4d5edfc002ff80449d2cdcf6ec7aea3732d0ba8e6bcaa105675f9f37dd5280d3b9061400d8edc0c67460ac9f1541159484aa51b851fc2";
+  sha512.doc = "04728375909e27e0814f9c2dee14697711ceba7b132ee6de63f257e2a6c3eff11a8e808d7929bbd0c9346b459afec57dd62d523314381c0c19a5e2b8b3650f20";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3a";
+};
+scrwfile = {
+  revision = 66872;
+  stripPrefix = 0;
+  sha512.run = "b4d306af1e0d3dcfa59ef14250f14125bfc4a0b9b0f3e6ab32b809f2e729cfa45e27549c8cb9c2dde2819d328c1a032eb6aae6f123f1c71efeba4c9d16611a34";
+  sha512.doc = "6aab0a6af0c3f989788673c44bb8a885ddb259f0be3f69f0a32b0bdebdc8e607b32c8f8530cb99d59b1c7739b2c33446f8b7c832384d07158c90bd347704a1a3";
+  sha512.source = "abd536d76460165077ca7dbdcd1801b018cae2d16c783e72502bcaf5ecb34562f273ca37cedb044a50e7d53fab84412bf9a5e804be064951ebf753aaa764526b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.99";
+};
+scsnowman = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "2335082e981929d24b2dd327db68f101a93b0c2b9176c116d6ca9430ea45bd85c9669921980090554406a658821f3c68305250894fd710058e15ac6aa8ede1c5";
+  sha512.doc = "e883b300888ebdf62af976a94ff29a3f621a92420c26553ca16497ffb57db0d1cec7f8a38a1996e080b660ee3ae0b7245688a7732c141b0a680b864f527069f6";
+  hasRunfiles = true;
+  license = [ "bsd2" ];
+  version = "1.3c";
+};
+sdaps = {
+  revision = 65345;
+  stripPrefix = 0;
+  deps = [
+    "environ"
+    "lastpage"
+    "pgf"
+    "qrcode"
+    "sectsty"
+    "translator"
+  ];
+  sha512.run = "57559707a9a5a2a924a767b25ed2f86759826a31788fb2662aa2e3ad2889b2266009ec9754c48ce923561c7587c78b23ab56731322a619b4a225775b7beb91b2";
+  sha512.doc = "fe1f636c2c21159e5c17aaa75ca0bc89fb1b6ab8dda8d475045efcb3eaf489a876fe9caa4cd077e27b51f37292c5141347233ed6103ebe4f20573ff0899e445b";
+  sha512.source = "3f5d1073699a71e9e89a3c71704b8b2800925041145a60454cae0ce2fe7f468e5200c7273afb70c64306a347f4037bc0698b3af223f82d755658d54f2d8c08fe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9.10";
+};
+sdrt = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6faa9948e5bb4369fefad7d2b1a5f2bf39baf8b98e8ad3b8f61ade2001b431894ddfbd61e2f1ec73ed767b102f79f8357d965a5c3805c082d8d88bda29e10c6b";
+  sha512.doc = "570795dd0c4fe0450e628f61e43d05f3e969488890eab2ee1364712e812d839c7b3185c7ddbd27c44c486e234afe36aceb4824e828cb0c9253e8e5479b0b6c15";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+sduthesis = {
+  revision = 41401;
+  stripPrefix = 0;
+  sha512.run = "10f1c0a749b9b30dda0e1c7dce4ef2fdd29220b4d77d03b8e71d8c3a460a73c98f8d16e27e6bbab07a66bf7a23cc9d3bf2b12db523232df1142a8563e0068ed8";
+  sha512.doc = "afa02606e7df5655ef46b59e92dc54bec9e8f05deb1d9ecd8a0546ee068f2595620cc8dd39d04ea8db53ac7f2e9983ff01ac2646b6946fd3619db64a0bdad332";
+  sha512.source = "2c4dddfd7a6fa27ebb4e48e61f8d2887e116eab174e13d9b41efc9b7a3c2f5d5770f000b4acc4275fa82d54ad5ef2129bf614478d11b24a359a38a03d38caa76";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.1";
+};
+se2thesis = {
+  revision = 68255;
+  stripPrefix = 0;
+  sha512.run = "a9283b1b34e7d9db35dbb64641b68eab662ddfd7e468f856e466c56c7c7ace6de3efacb43b1810e97d2eb2d0c2cf89d50ac45d79a5bcc9f79b52a1011e41ad39";
+  sha512.doc = "562a8c929ae8bcacc2dbdcc4b585b26b910da3792089670f89e4300b771a06971513978a0c656e563c7189673b6067acd450a2698fcb32449a4de75715a2c270";
+  sha512.source = "8a76b7e1139ecec4b8c9a4bd670f3bb82d354eeb0cb9d94afe7f8ad3b7656921b510ecd9223443efcb2e38c5b91e621fe66b99d282bc650402977fc84e4ffc7c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2.0";
+};
+secdot = {
+  revision = 20208;
+  stripPrefix = 0;
+  sha512.run = "7fb101dcd377cb5e3d1dca352d266af419c6fd83e4f2d1701a3d598e69e8e7f70afc9791a76337f4833da612cf07989ef244af1b24eb62ee59dd5f76225aa037";
+  sha512.doc = "7ca1b4102c6f92bfc6dd0571c489852dc5c1df4a58530aea490098192ee256a4df7e0bbee20adff78c2b35dfe39b8cd3f821c5e45dc6d78ab4865b6f08ad8488";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+secnum = {
+  revision = 61813;
+  stripPrefix = 0;
+  sha512.run = "543d290e5ae38ac65cd22217aec417f4c1098d629ce9acfe03340b529a7bb89ca012e2edf5321fd90331d79bd87cb5e6f15eef3e599857c2aaaad22bdfd1be78";
+  sha512.doc = "da4ec2a79e7a04bbf4296f1fd0929971bd577cf4f55d0852923a0bbb73e78e28eba392d203f1abaad1fcbcdffa9e2206fb7d78003b10a2ed428c87562b01de02";
+  sha512.source = "ca61cea878ed892f46b4defcd0a05176578d01b01b5f3924dfe6278278fb77ed89df3d41bd788a06bd7af389904421439ca06afac2440ba557948aa4e80a5817";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+section = {
+  revision = 20180;
+  stripPrefix = 0;
+  sha512.run = "8b3eaecd49f8b7046bc35df079541121d76757bc2a1b6a6ffa24357a20e9ec4bf5a7b65fae1673401ebf363e46ecffe3c64a2de9aac104594b2b111cd10426f2";
+  sha512.doc = "91defb5391b9e607cfaf74ac3abe53127ddec379d7a7c052f5c8f776bcef1728010a94ef7b590ddac8df140ee11fff4fd843bdbe1a13efd322a9a939ea2df39b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+sectionbox = {
+  revision = 37749;
+  stripPrefix = 0;
+  sha512.run = "d1a4da6a59c0411baaa785c58350c1d5be9c1081e0344d8a61fc009f49a1b751a09f358ba1baa3b645de4eff7d69e3781d8b44d90738105c0f56723da36efdb3";
+  sha512.doc = "80ae58336eabd8169781c3c30b42b2583f78ffa4093a7d3f9d9e9c6e31a3fb8f457fd42d56f2ff75b2ff3c38b537642dd6f254e54b3112538657a37b3b4e0410";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+sectionbreak = {
+  revision = 50339;
+  stripPrefix = 0;
+  sha512.run = "4b2c26642ba346acce5aff9678bf94f76d85005464f80eaae862a522bcbfa34c1671af79671982a91208ef104a21a532d851dcc785b5c40de4fe462d12488832";
+  sha512.doc = "a98eede394708bf612f593e00c58b5500a35b5173381c1f149d0be29b49fe95f5162602177b7d4f23c5b5312d7cdf47ea6ced8bc285853d2b7d77926a6ca66b0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1d";
+};
+sectsty = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7e164b14f29a385f8a97e09ad124c347a154e316ac2eb41e0bf9f161d44f2782995fe271b5472ef90dfa4ffdd5495de81090b44f5777243ea76c9f75fcbde2b4";
+  sha512.doc = "69d7fc032c06d015d7a6e6d2273c5240b146062565882fca0ddf5b7b795b788207bc9b478366a0a40e4acf223b07482f5cf41a65dd9b37047bcbf12566f6a826";
+  sha512.source = "fc79d4c7c437d9c5ff7d8dc62439242cb772f250527ca099cd1180e58742a9ff42e7c63776c24fa5563c95b5d2bccd97df0e1c086869bbcf5ff2ed8ff5297bf4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.2";
+};
+seealso = {
+  revision = 43595;
+  stripPrefix = 0;
+  sha512.run = "4d52687aa57245d3be55bf486b100d61fe2e2d979447c2f123f566c3aeb13657e531ace55fe5d00eab57cebe89cfd3729a71dc7177831b5192b8c0fde452d7df";
+  sha512.doc = "6baba95b6b08ef95f2966d227161ea39a4084b46371967057266ddae155b115fbe4fcf148e1afc4629e33f54d0329ebb6169f1be4fdcb801d869b212d056cc61";
+  sha512.source = "981ed17cba32b2bdc4848c099038193dba2b39d04210cbb2851400044654234c75c160f9c775af2fad6b76b80c85c782fe6ea75a61728ab67193dcf414b0b4d8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+seetexk = {
+  revision = 57972;
+  sha512.run = "1f217550f7455a82dd1771556045e10a39138eebddc90f4d38a274d56d9072501d94476c6045012f3c5cda43aea71924268fd222895079b225d893df3b78fa97";
+  sha512.doc = "1b36ac131e25541123a7d18e9a5e3cb1fccab04ffca1b0d1e5a036a26de99fb05e6745d43cac6dc76a295eac5503f90eafdb2b40f96c88836123b5b599a47e2e";
+  hasManpages = true;
+  license = [ "free" ];
+};
+seetexk.binfiles = [
+  "dvibook"
+  "dviconcat"
+  "dviselect"
+  "dvitodvi"
+];
+selectp = {
+  revision = 20185;
+  stripPrefix = 0;
+  sha512.run = "1674c9c9d7afbc851f8c4fad1b46a1ec18161eb48375d892c947416ee97791addf92f75a69090c95a0f08bbaac1a7a745af93a7bcf91e2e0f8117ed3f3106dc9";
+  sha512.doc = "7c99f0400841cb1d88af4c239f43eaec7c0b2358c2e581866d4361cd86b9eff413bc9e07d8df630ddff8d4f37193896bd430f4c357d9cc04591295f18ebd09aa";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+selinput = {
+  revision = 53098;
+  stripPrefix = 0;
+  sha512.run = "41888a394e4c9adc60242e4c689b272a7b4e2a2db2e4824e0068a305cdae59c1edd46b0a9e45909cf29381f240693234330fb3488be68831136f8f04a72faca6";
+  sha512.doc = "918b0b2bbb8230a482418c56de8081bb455980e178843b0ea84b18435c1fbfcd50a71cd0491b89c5797a374479060175219333bbde2ab28b5147cb5c3fd65ff3";
+  sha512.source = "c6b2c23826216a5c479c3cb3de1685dd4d695422ec67fa7109e7a1adb46dd7ad8cd21138a480e8e13bce1c4184fea0153114f338a5754778b22dc173d6f9445d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+selnolig = {
+  revision = 68747;
+  stripPrefix = 0;
+  sha512.run = "8dd7baa476f72549830f2571615af2374b9d74da69c16f2999708201b7404c46118e7a6046ef8dff39935d3b94373140819497508b2a8982cc928a5dbfc6eaac";
+  sha512.doc = "c36e55066eadd959f625fcb72fb89ab2ca51f3411ba9bc81c38d2ac3f18ffd792fd95c33178c0607e3958cdbd81c031193d1b6c712906a2c9cdac4178ace6ceb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.302";
+};
+semantex = {
+  revision = 65679;
+  stripPrefix = 0;
+  deps = [
+    "semtex"
+  ];
+  sha512.run = "156ef55009e52bc91bead46963d5f383c9b760d4c72a45097de1e3ce3fcb1aae4686386efbf8a3abc2f18d16f59d02f297acd825a9cfa21e544ba2dde9986c13";
+  sha512.doc = "1f94edb17be3e148a913e98ce020f5273085507537b51b4737c5c4d1589e415aa361cdb25264c412af8b93025b6dde204c625180c5182d319c199d5e8e591757";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.525";
+};
+semantic = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d49c22d4982a33177fdd73c5ff15a68e663c3ff1ec9a45a40e5a8364371a25b536dd6c1dd963296ae998760178833b5f2c357119f41e7bb5a72061f0f9ad23fa";
+  sha512.doc = "21e9a7efd9fd6dc28be30f284285cc8c13b266eb03c9212b30f97b761c1383e1fb84a18e92437d331d3963068a68c61276cc1fd3446807bedc954a490fc490aa";
+  sha512.source = "4d513b6c9b320b9ddd8ec92fd8eae079134d351170122833e99557fdec7510938d8ef856c52e0a862a8cb8cdffa3894c160dfe085452e0cffc49db4d3fac6a79";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+semantic-markup = {
+  revision = 53607;
+  stripPrefix = 0;
+  sha512.run = "f795c901ec0b133520cde8e269364977638d410d6d06207d868e6151e7f43a4d3c54a73780237e2dfb86b9077b0724fccbd7e9121d51a64034f4bd604a38008a";
+  sha512.doc = "f1498e628054e91f7b0ecc0fea7c926aa55d7bec56c3c13ebcc5073f96df84e8c1e255532f9ec72b8133d21511e4f5f2996d95c39c15cb74ae39fffa87d5a785";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+semaphor = {
+  revision = 18651;
+  stripPrefix = 0;
+  sha512.run = "b8741be1544d8ab488632e05464cf607069f0d09df7a727bc05d06175dc16bff461d551e7130e01edbb53863d56fbf4cd0cc9085c51186e19e5f2fae986b400b";
+  sha512.doc = "ef0c85ca5e86a17d59c03255d679d54cc8fb36eec02c8546f29e1c514408559788d1dbe3ac7565224b320b71e9ad77979b1092fb0f098a1c48c3a7093b72b172";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+semesterplanner = {
+  revision = 56841;
+  stripPrefix = 0;
+  sha512.run = "26c7b18796dee2f703f22ace3aae21b38f98d9250b1896a3cfe5214b42551ae3fe4accd9e8bf905109c05169370317608e23363f4bb512e794cfaa528b645119";
+  sha512.doc = "32c29aad8acf63e60f07262930f267a295daf9498621c48f0b9697fe31e4dffc63c8992b5c5f60b1d61188de893421906aa3abf160a79c6dd5429eca87c03fb1";
+  sha512.source = "709556569a5defa5240781ac1bcac0af6e9cacc0016d6ff057a4414a67c69cf8d11a17c716748dfdc81fc31c2bdee230c9c4adb7c4978ccba20b7330db47ea81";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+seminar = {
+  revision = 59801;
+  stripPrefix = 0;
+  sha512.run = "28795c64e4af5296e228986c28115305cb76087d241e91312cfff351f7e51833a0d76b2acd667fc5f7616dcb1685cd02b2d9352ef7f0e36d5bffdaa5f421e6eb";
+  sha512.doc = "8b7364dc568d1fd78cce21ff1846a6369fe3fccf07bf16ece8383c941492404d6fdf3be1607aa2279a10d670803536474d7cc318b9b3dda24142fbcc69fe69e0";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.63a";
+};
+semioneside = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "cb3f20a7f766681f9b7748ea3a816fcd477e6685a159b071502716c708e0e1d5a2a33a5b210cd1e2a684a288d07079870ad243218dd74e80853a227fd445c884";
+  sha512.doc = "8d6b1ada214f99028ea9843b4d5a85a8a974a9ab52e8a7d9338d25341282d6f1c8ca4e7a24271ec20bc4be781f418f2ffb558ef4fe6e6f42d165bb24650b54da";
+  sha512.source = "1b8d0d90db12b52add0f7dae10cb16bac8a9260e0a6783762908a07a014dca294ea6c631ceac3a5d063705cf39fd1a57ce6b99f72c5da4d57d4a30cdafd25767";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.41";
+};
+semproc = {
+  revision = 37568;
+  stripPrefix = 0;
+  sha512.run = "ac78e19197af3c72863ee4ca94842d596189d37c2d559ac1254f70fda1011943ddd7ce17b48f183b839a6610f8d7dbded2a0f2a18453823a0c0044a70841dcf2";
+  sha512.doc = "2c7e2a40348b098037001928d6f21f5a66c23967dc63296ce26736b006a46f9d9536fae9480c1f0d0db72ed59973a6140471bb110702fd5cb997fafe03133dee";
+  sha512.source = "7faf073ad7da9627b59509f41056df76658875d04651321389b3ae789e2d704691e494726635161eeab97786b8c8d6cd322e3ba83b3e1a779ff3d10a752fb51f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+semtex = {
+  revision = 56530;
+  stripPrefix = 0;
+  sha512.run = "10d2b93b30581cede982f5d7ec1ee5bf6f60406e27e1750f2bc6b6dfe0f683ca922a762fafac0d5d037687c0a98188617ee48bb51ea132ccde7cd1c33bbdf273";
+  sha512.doc = "316df9ed5f2d058e6c28e5e8e5f4bc3ed64439409d1ae1c608b2a75a23c40d438b657642093cb723b23da4f14382f1080aaa3a9a49d8ce143e26e494a3e7b3e9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.45";
+};
+sepfootnotes = {
+  revision = 41732;
+  stripPrefix = 0;
+  sha512.run = "a7333a9779ebca371aeef0a1348968d8b4649ca037e88f6e8a6f5224d13265202c8de8d2ce5dd89de170ddc348cfb04f5df92e249c122a608efa8fbab4daba98";
+  sha512.doc = "eb7d70eaec4bf58c85964f7a3692da09894c898f712a119fc0ffa42429be2e53b96ed6f569fcd37aff170d2b953543992bcc693e264ee1ec542c435be2723414";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3c";
+};
+sepnum = {
+  revision = 20186;
+  stripPrefix = 0;
+  sha512.run = "4ba90558d397f0c047ffeb01620d2d5ed4bc38431ddbd75d9a381fac58360d78270b8f22e761693a8a39176d1ab92c9da3b6bf92aaaa90b8ee20490f5b70f50d";
+  sha512.doc = "080b081b101ea57480e4c958e997f5b10d22c5de56a60c1f415248ba0564046560650ae589b29c73d185fa88334a26ca3412e996fcc1214ef0b9d20e71bf18fa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+seqsplit = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "02413d104e12aad40f093731e2d28d0354216d3d57e6f811609f398b8122bdbf906f78cef38f355562efb4e7df6dca314f8548d8d8c03a2a9404addc42f0e1f3";
+  sha512.doc = "0c49425b619ac62da4eb2392c51cb7726d9bab008910a88ec36b866717c8ac341be0903e3014ed36a30ac701fafc453a0e319470f2f65eb6775d6ff52b9f07e9";
+  sha512.source = "7349cf842e7142c5c13e46d16acc35535cf34be8a4985f9a581a4338ca54beffbd80fe2820123652f3ffc868bcfe1c995200ab918c99b19d6c2ee339b61354e3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+serbian-apostrophe = {
+  revision = 23799;
+  stripPrefix = 0;
+  sha512.run = "4e3998b6c3f5578929204c0b5f131b0ad4526057b50811253b6a90367327c63af5bec386aef54ae6c80be7a1ecdcc6875bbdca532fab864e61837cf16855750f";
+  sha512.doc = "38c8ac74b304ac992bad807f2727a3e75a727a77c5bfe5042e24a39ad305162e828ca0333963a3f91c5f26ca0324e7feea97dc6ab84c1cfdb6c26b05ed5f4fd5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+serbian-date-lat = {
+  revision = 23446;
+  stripPrefix = 0;
+  sha512.run = "420b77a36a08e75f8020edffed704ff0398115a6bfe694fa46957ad8b35c58435ecde4c16176a72bbcbcd16139502f8fb679399852bfc9000df6d5f305fbb04e";
+  sha512.doc = "5c10fe13a4e1d6117ebfe8d737d50047dc97483c7a0cc287a9e79d367af50ec1cbdc0800161919b92c6d82774c9e756970db71344259028c254fbf2c1fe86219";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+};
+serbian-def-cyr = {
+  revision = 23734;
+  stripPrefix = 0;
+  sha512.run = "6cbd1da1160519914db1a2269a54f1f81442d84750b15179e4a0f4e5373512c959542a789ef39a2803b68030bd6a8001fde777e907e85852703ff696ec9e5113";
+  sha512.doc = "0f2a2fb44eaef8e0eb01e12260fa310d661501c3e1dacde2882199ce4bd5323c837704fd50e8db5b4ba567a38038b37be28fd834874262de2e3ad36b65816498";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+serbian-lig = {
+  revision = 53127;
+  stripPrefix = 0;
+  sha512.run = "d9b5d42c565d5704ab516302534238961ad42e971d3c3b4b4672d4cc19927ac22a871735d88c362b753640d457597911fa269ec30edb5c1c0af96820299c6720";
+  sha512.doc = "6ed0551c176ddd34e1a4eb4449fd78ca38c166efd41b31c78dc1e192a714fdc81b195cf83587f256462b610681136b69960867d5f1a571a5b1b47256fca88f05";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+sesamanuel = {
+  revision = 36613;
+  stripPrefix = 0;
+  sha512.run = "bb7b38ff9e6494fb3150602008a66df5fd8c35dcb52a2da196cd177bcffeb40e284fa493b296f01f22864a5bf25d89fb4c079ff4d9fffacdf37dfc9de9256518";
+  sha512.doc = "cd144c93693367bdda658fb1ecd424715849fa57f0aded627125db2703947c8b5886df9ec08595592b6900327b42e8cff00f0c69967075321bd7cd1064054f3b";
+  sha512.source = "4a5dd4a8da6a8719f47d4b4bfb5e3a6c0e1498369fbcf7f9fd48304906bbff383793329959b69f13a75bcf3d01b888325c23079b4503aa779f464c2864560416";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.6";
+};
+sesstime = {
+  revision = 49750;
+  stripPrefix = 0;
+  sha512.run = "5c5ab4808645230c6563a08b8243f27fad02a76fa56296f4c7e1b17d2140ad0c9ab0b6ed02e27240f596113019afbed52dc5a9f5efd874ba7783c921b81416c9";
+  sha512.doc = "93b986ea6853761fae06b297b951a7a46ffee403a4fc980aa1afb7cc42c15fe753797eecbacacbfb49b0119ac9e24dc105975acf72852eb0265dc4586f397bc2";
+  sha512.source = "8f3200ab63d77bf24aa9b2cd51ac460f086cb82599e9099b41614f039cf569f4fba23f2dcd59174623037046bacfd5a11ff59f140b09f373edb6346292db7910";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.12";
+};
+setdeck = {
+  revision = 40613;
+  stripPrefix = 0;
+  sha512.run = "817474bc928883f4bbe97391a477bf492a4e339879fc85d7aec3ca932f9b46c310f8fec5b732deb2196c705c2bd3a22721376ea8289a1bbdc12555447f12f757";
+  sha512.doc = "c27f7ab563f35293ee6019560f643d562ff2bf06747402930c767031a8dccffac0ebae9cd16b9e3009b5883f594c541ccf4c38883aa89f4256f7db83e378e1e9";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "0.1";
+};
+setspace = {
+  revision = 65206;
+  stripPrefix = 0;
+  sha512.run = "9462cb011a2a13a962c08d7d962c120f2b459630f8ec1f96704c2878facf01a37118e9c94ff9cefcc9ac0e0e3c1bbedc158aaca24dcf13cad0973a6544e79651";
+  sha512.doc = "0ff85289fb5ed620f208e3ba84e82efacc91da32611e95a4a99aa5c939c0400ddd3a118d460ef65d77b483678e5ce8c71b901ed0ee1f711cfaa29f26141089fd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.7b";
+};
+setspaceenhanced = {
+  revision = 68493;
+  stripPrefix = 0;
+  sha512.run = "594fc089440a356201122b33160a16785dcabbb2eeb1fdb2fdbbc1e53c83f0ffcbfc7b9c6be623e6a5e4ff23b933f25120ba1ecce72e73d8e32e1939a2744f8c";
+  sha512.doc = "d9356a26bed9405fb9cb45eda3769dd5360418c02fb6442cb4dd64da5e70e9785b167e8406fc772fb7ca1cfc574b23a375916d0c5dd6a1afb09668f5e6c743e0";
+  sha512.source = "5f16118ffc9b7572a18c485915a677b822c26ed0c4f885292c6779f91c0a9b6fb3d4f88dabb94798715efd880f6577349ede1936720ce2c6274c35671e2f0aa5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.02";
+};
+seu-ml-assign = {
+  revision = 62933;
+  stripPrefix = 0;
+  sha512.run = "929cf4aa8b1a55a74cc13e4f823f6d814fadb425f7a6ea53c18cf4244a14b9bee8afd8c06327add62b016ff36e7ecfddc29323105362a63342d382febbabc428";
+  sha512.doc = "fa1d6be46bac0c2075b8e43c1f39d74092cf86b975b4c281c57b778ba16aa6345258261e26690fc84f79fdfd57082eba64d894002a723ee8bd821fd9d99e7774";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+seuthesis = {
+  revision = 33042;
+  stripPrefix = 0;
+  sha512.run = "a36006ff6a093cd589a0e328c60e7e78afc160ab45746e562a43a8944b2ab331643261f56890497b70449f76be43c0b226642cc5570dccfe0d6240181b20bcb3";
+  sha512.doc = "5bbc5770bc42c62da7ca569b10558dc02bbe7fda2a463a3a2a78bc76fda3f1d0e7023c311f62a91bef73ae3c4026561403284404acc6bc72cb2e308ad4092ab8";
+  sha512.source = "a442b5ca4e1e8a4a3f8d331e5575066a8c63d1521d1f774fa7d386a8e42b09a2c4727fae1f0a51a31c6a98c173113349738caac8991d50e4459082a874fed1ad";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "2.1.2";
+};
+seuthesix = {
+  revision = 40088;
+  stripPrefix = 0;
+  sha512.run = "8f2aa388faf3fc41cdda54ac44631dc2f0737b727f3af27c41bc268223d2f3f6353dc24f067ec487fe5f3ced5c7837ee6f60d46de3950a3a3c9573df77cc725a";
+  sha512.doc = "1d54dacc742d558af5fb006cb4f26e073bbf6a3a572b7e81fbacf691995a4a96c72251225fb7cff598c930a4c9984d0d01d080c797f202f7e30aced20b8b3e5b";
+  sha512.source = "fbc848315e2b76ac915aa6abc0a9e7bf2f63c4af716ccf65c9af3ae05e049952703c1f86db97a5825b92f43dc2d1163e6544c30fcfce4b672272b4ba9057c171";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.0.1";
+};
+sexam = {
+  revision = 46628;
+  stripPrefix = 0;
+  sha512.run = "60fc18bf706b787b9bc59d1ff12e62fc3b69f5c6815a629f6743c8ff3fbbb2948c145278805888b235756beac5dde5613c10fe4ce20bb6536b4a3d77a2713569";
+  sha512.doc = "0d2d5e2e5214622ea6b398c0b0f7a297a3f247ef3df0ed696c6faed94527b2edb6564c917d182177f8f3b44d7cd0e14ef4ac186c89113ad74e3ea70475ce1179";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1";
+};
+sf298 = {
+  revision = 41653;
+  stripPrefix = 0;
+  sha512.run = "c9a262481a01019010a645c321c675bc93e3e0c6627b693bce53a808bc9366d7915c19f97871786001fbf61b589f2cef274aba005681f9b32094644568d0f2ec";
+  sha512.doc = "03b1d51626e6ec0b076f4c2fb5b34daf490a671df69edef7235a6c8c77b2475e79604c7d49aed3c7d756c9fb781a7398a27596ab9b183b942119ee86385ec612";
+  sha512.source = "af4d0437e6c79c7bf0975f8e14bd8f19675223849b04b9e7b1d526ccc70a8a4a6d6773f86f9ddbcb98329368eff8c7f41cab4f2468f0100b8f5f840288184826";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.3";
+};
+sffms = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ea7fbce545b9e9dc8b804e293239fdd491bf1293875fa841afc5a33ddcac7acddf243194e36f8958df4d23c71ad9b83348fda57dc261f211b49fc137b66ff6b2";
+  sha512.doc = "e1702249f2516dde93887403833f9261f73e90ce04bb97d4052de1a28b9f5bcd5729d1d9a68759ea92271b46cbbebed39565e8c30248af4c894c347e4b9b75a9";
+  sha512.source = "50fec199dddd2509682af8910db1cecaba7359be24a1666e156715e4613571c6f48c27eb813efaab2d6a4fd01e0e9d110021a42afca501a75a2ee02f7c80499e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+sfg = {
+  revision = 20209;
+  stripPrefix = 0;
+  sha512.run = "d90305b5fbac3e06bc3195b802b4ef78f7c6cfb4f0592dfd300839dd608150e1ad08fc7479fe6d8df4f2429ad6b7f81692d9723dde198991fc9626565cb38578";
+  sha512.doc = "26c17b606f0cfb4e199755f7f16eec16cbe379a786a88bec2d77d983d17107d86bf8da23474bc3450f8467d18028f2f41a314c83565916cf3ac3e97c5c079267";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.91";
+};
+sfmath = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7ba73610785c9270e8741ba0137701677575e38cac79976d89e2f5768804ff52117c5fcbaab9b260be522f174458a18d2d70d82c2da201e7fd6a91fe4bbdf6fb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+sgame = {
+  revision = 30959;
+  stripPrefix = 0;
+  sha512.run = "60e1c4d7f68bd6d39e081d49bfa1ecfa7dc56b940172719b4d6d0f2e87456c4b511ac29bb1884f7c290e7b226eb6ecae8f2ce4de3f7f5fbbd21934c440395ab7";
+  sha512.doc = "29f4ee374c7b9d07274fb6f622c0769ff6977ce522ae25fa24571c0b7e60f1e120e4e26d37c6c340372fc0a2dde71a25121fa9538a35aa100e21637d5c79c874";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.15";
+};
+shade = {
+  revision = 22212;
+  stripPrefix = 0;
+  sha512.run = "968be382e1f82029e7e06f5ed34473fc20fd38dc758b97fec6dbf015ca13c3604dd6b7638dcad2f80be474ad001c47ec86e75e8d9947bde26053873376e9e068";
+  sha512.doc = "0c9ec337ed4c9bba949e6b449368868856d652b2f5ac7c70dd08a9daaf8a3ed3be4008a91c003c731c97f7e4132f571c44ea9d4a4529f7b0ac9be11a673310ff";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1";
+};
+shadethm = {
+  revision = 53350;
+  stripPrefix = 0;
+  sha512.run = "b9e15e017332eeadd3324afb858ab15a820e23da59f5bf7ea57dac719b9864304effd092c3cb2f25a6f29f22dd2b6f2585279edab4d77c62256582c66be550c3";
+  sha512.doc = "c24f37f7f864283f9ced1da1728dd7ae137395ecda3010aeff8ad778b96723224df77755f8f71f7672f5870ad6832a22bce47bec88ae51d0992e39c0a00c8caa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+shadow = {
+  revision = 20312;
+  stripPrefix = 0;
+  sha512.run = "885bca1090b93545f59b387e952998f65dee0931fb5b680d06667c3bb8172e2aad37e840942b9495134b421bb40b871633eb5de941b3a257618751e789128ca6";
+  sha512.doc = "402e64195e247cd2c5106e3bd621705b80c006b2f6cf0b1da14ea459acb7dd97e2ebeda87ec118be3e73bf76edebe3067330498a2875c52c4248add70d7a0a25";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+shadowtext = {
+  revision = 26522;
+  stripPrefix = 0;
+  sha512.run = "59ab708b0f8987838cafe864cdcd68aad5aceb7cb4b3ab2b479ec4fbd15e268ba4fdd1b0143b7c247cc186a825d99ad810839221a391eafd5146f0a46865e23d";
+  sha512.doc = "a89bd6ab160e364af06e26d9bbb88988c286befb5dfe4e4bdfc7c511811ef4a1ef630708d4a7ff32cb0ab6831dbee54d49a84376ee9366bd422d5689d86db404";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+shapepar = {
+  revision = 69343;
+  stripPrefix = 0;
+  sha512.run = "24975c53f9b29ae8302dc4e169d7d176c4825a0033764c8a08aa610c184e79d249e849e2ac3ddbeccb3bb80a4a5e29ae1c474331de68000de1a63951079acb4d";
+  sha512.doc = "69a5f9dba1683ed0302a3dc4edede537986ea473357c0c8c454c26eeceb2c51d31d87d139bc3eed39ef1862c2a6feef0e570e9fb12bf88f15ee7f34280f7daf2";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2.2";
+};
+shapes = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "4e082b6b61ae9f2d02c6bdf7fe5beeb6b6384b2718c1644b945b175bc17c951ec7890fe7e81eb59faea4ae86da93eaf51467450cd61d223e734408e624bd8abb";
+  sha512.doc = "2c295a28748f8df117a5abf16a758b079d7481f579e1bb571fc758bae505860e1a1b82f9615259b14359eb4ea8f43be82de6ae6d761225ea76bc0da167b6786c";
+  sha512.source = "58ccff2be6db013bb66e606ebec52b0f86b4ab3e2066d9191f18da0534d2187fe6a3944cf179b6b807025182cbd40be8c24f190c5938bf4e4264ba492a845be1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+shdoc = {
+  revision = 41991;
+  stripPrefix = 0;
+  sha512.run = "e72e5d88966ab88ce2ea331f2989a949f3da30cb1066a0501fe8770f077f8aaf15803d9337ab266374364fdb7b35507c6d3cd181e1fb472f6d39b6ef94c08c1f";
+  sha512.doc = "38c3a7302edd2e38e3196b4d3935bc001f83fc71ed50ca8c3563ccf82e9e0729c65baf0b95db0ac637cd037cd572ba557586bc85230ff6014f63a8fe0602d9d1";
+  sha512.source = "8de0b05b8cfaf13d3f3c1192c718f5663bc5d1e5d9f67395956bc18d8f97c6acd0811660c02c3dd087f617098d0ec810a69dc31a20e157fde69431eaae4047c4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1b";
+};
+shipunov = {
+  revision = 52334;
+  stripPrefix = 0;
+  sha512.run = "e31326135e93eaddf9f07eb0a746c83b9b6b7a7569daccc2b4ae0439664ce4a9cb2edaedc0e3ff727a4896fea43411c9cef0f3fb8455b1616de04e03b54b257a";
+  sha512.doc = "3c04f8dec84f3ad87572f6c180ec783f9a879b887b4c7f860097ac03b297dd7c4a4385cb402ea0b7f09176d711050ca7813e51607cf7bba871e191ec35d9af88";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+shobhika = {
+  revision = 50555;
+  stripPrefix = 0;
+  sha512.run = "86050c89e5939b8ffc2148f9269a48dc66f8adf396cb883a7018a1a8f123cb602f216f652f56715bebbdb7b0577a8d0cc799c847898543a4cbd22e478524b127";
+  sha512.doc = "f5d9d05f54876bab260043e698fd746c95b59b04ea5b2df7244b11af30bb78e5cbb6e3511bb75d775e1bc649082575192ccbcb68fcd32b9816879b5cbf3277ba";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.05";
+};
+short-math-guide = {
+  revision = 46126;
+  stripPrefix = 0;
+  sha512.run = "6e2c131cb3a2ce85a6718a8dab1cc52fa5dab7a3db34575dcfb0a33e6a3f3ba6025eccb82a2e07a198243bd24c5070a931e591003a768c4a057f70659e442155";
+  sha512.doc = "0feaf4b3cafbac8fc78855250dc39858b0b8326b803c851efd831f36476dac2f1ce86083c11476e36ac88b44a2a8d25094f9203c774044306536fcb2b261a184";
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+shortmathj = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "a8ec0460d532b657c6237d5d321852b0c8ff0807d8cf73a02e0d40bc6c86b2c776dbbc5ad694d3fe022f851f049dbba6fc11d57d5d6fdb8f168a935f9f443269";
+  sha512.doc = "a1fee222b86efa1cdd1d35aa2eeaf84df25db25b1a68d56863a370fef11ae62a6a21ed2ecf0f563d8c00c38759008d26e7c43988538bab6ad6b2a52c68c74c46";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5.0";
+};
+shorttoc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6e78bca7425e0b23d7520af19494d9de303b86fae7a013ef85b2d512ee86be1f478ede2293650b435ab579811e444b570995e2ae8720afc60b42c0c26d7489a6";
+  sha512.doc = "03090924cdde619877b271fbd70761035b5da1f2278a3642b471a86e83559da316558a752d85716242001f40ca403a985d036750218e78d873a4920905c5a652";
+  sha512.source = "2841e846e2e691864e3412c52c3cb2130462b2b94f01ab9ccfba7cad05392db2b63ce3cd3ce60896a7861969ea20fdd3b1918a69e122316149af3fddf1b9c492";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+show2e = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "702d0913a299b68bedec15c697868a70f058957dbd3a2dd2c503bc21c8a250dc7601e6348080bb394a38108bcd2f5ee67796a888183aa181c9f88a72e7666580";
+  sha512.doc = "a427f7126ded4251c255fcaf2c381f7c00d0d0e55253804cbe631ac59be1bd51e7ba2ee51110af86bcee27d73698bb7baa323fef8e23a41000928b242b0be282";
+  sha512.source = "3a6bb6fbc35b5f6b1cae00d5c63c16ea13af270cbf90f57761f71076b26130272924154b8b0aac60cda41d27b75db4f1edfc82101f38b29e9641a4e02cb6c2a2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+showcharinbox = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "9cb18e80701d22e167b026767068e0fc0a7b6c4cdbc9014991f10ecd76d37614983591c931972584c50e0d6e35abee70ae3079f7dd8c855d33d1e4ea06693d25";
+  sha512.doc = "47dc7121ed852931bdc5bc38b7fb4dfda6616b8b0ce649d90da71c7a4cb6084ddd69e07596dd4179b5654fa9a54fcedef6949ac4778b449ad14740058e237dad";
+  sha512.source = "0c3ee2d6c00183936b57ba8e44d274baae8d90b8c089f6b5f3384c5928c703f22c87ac2781a8399189e028d6503c3e154499e85ac6b1ae69c7cb27eb29ee11a3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+showdim = {
+  revision = 28918;
+  stripPrefix = 0;
+  sha512.run = "07c409f3d30def6894a787d9c2f7366abf6ee4248386e9d5b2e4f7858d692c7cd3e72871ff02c73a39a190ac36ccbaf5fe16e8e1b7b328be80a9ba041d12feb7";
+  sha512.doc = "ba76568009149bec7484b4dbe7bede8e516a2c2ad20c77c70f0357e865c66751aa4f3d8c92c59effa1ac12e03b3b8c500c65708547ddf52458b0ce90def8fc98";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+showexpl = {
+  revision = 57414;
+  stripPrefix = 0;
+  sha512.run = "d42f5d3570f252295a25c130c9ec9a94abaf9f28038fca163423a0aa44afee4f354aa2dced3ccd173e698a5da6ccfaa8284096742ba04b03f5aebf8fc502426c";
+  sha512.doc = "a3f12a43edc3ffa5556bec25b8527fdb039aaa704b2ea37c723cff367d453b0ac53b14c1eff41bf6d3961cf1d4f11b70349c03d253336421031ef0ba81b56561";
+  sha512.source = "52ff44163115b6ffa5a8e181739df2c8c5619a32af0aa7bfc773d84b12c0e85a67bf87823ae0dd47f7d40d9e12fb8bde039b935555a1cc220dcbf49d182f6da3";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.3s";
+};
+showhyphenation = {
+  revision = 67602;
+  stripPrefix = 0;
+  sha512.run = "0a3ca7d966edf0f4221dea2c084b428c9e248b3d223b57f3f210258918593d93518a5ebdce7d9de6b88ab040c0f2b632039e23f3339a729d1fe1391f8a51d4eb";
+  sha512.doc = "9d7263e5f285f5d29738c7ff578a0bf9256d67e56b882e41f0578bf9b594225a6e0711d9fd05bbc89a03cc0bb56b1ea8c3ccb1f4bc4f91ad40dbe55849b20c99";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+showkerning = {
+  revision = 67603;
+  stripPrefix = 0;
+  sha512.run = "37a913fa403c9760fd150cac3fb88e349e8c1109f51768ee202194e72232d6e16d8dac529872dd1df7896a40a79ddb72d65c9191f72337c806de307808d80532";
+  sha512.doc = "39f8f12a70550a5864956c6145a2a19555c18ce60084b66d2b69b6a2ab8796ef2b911be39c59e736534749b42930bd055969ced8eb5cc03f1e5f2796a0d0b3e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+showlabels = {
+  revision = 63940;
+  stripPrefix = 0;
+  sha512.run = "285389ed8ef5efcfc4855e2b8003cf94275de536c8f28a237fbdf856947d55c935bfde721a00eb3e2a0187bfe552ff97671197bf1c40492a2e5e700f9536e3e8";
+  sha512.doc = "0e624e36f96b8f0d06abc41c301753e3d71671daac4ab01a3914cbd45a5b07f4574011f93c5ce62129fbd77021712fb39364c240eb9b394b204597033ab13df1";
+  sha512.source = "b3bd2c4e750662b7a1728f0b100fdb1c78bd33ac95e976211156786833345f2b5a3b5744a29cc134d31b166f85064607d812f7ba1d73c00be421301f4e41031e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9.2";
+};
+showtags = {
+  revision = 20336;
+  stripPrefix = 0;
+  sha512.run = "b70dc03f22838dab65631d39d8690897d4a5c71b5451775e85cdc3ff600d63afc29bd28e49aa64a5a2467143f4a84d62f5a2a9af4a8365e0a867d6a46e9de93b";
+  sha512.doc = "3e1efebe8edd469e66b18aea9d9a3614b753a43ac61f5a31b57fccc1b45047aaaee8f80d156932671f9ae7457fc627732f1f72c65fca42946280c1182d8960de";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.05";
+};
+shtthesis = {
+  revision = 62441;
+  stripPrefix = 0;
+  deps = [
+    "alphalph"
+    "biber"
+    "biblatex"
+    "biblatex-gb7714-2015"
+    "booktabs"
+    "caption"
+    "colortbl"
+    "ctex"
+    "datetime"
+    "enumitem"
+    "fancyhdr"
+    "fmtcount"
+    "lastpage"
+    "latexmk"
+    "listings"
+    "lua-alt-getopt"
+    "lualatex-math"
+    "mathtools"
+    "ntheorem"
+    "tex-gyre"
+    "tocvsec2"
+    "transparent"
+    "undolabl"
+    "unicode-math"
+    "xits"
+    "xstring"
+  ];
+  sha512.run = "da3b02cc3558a337d7d35018fad00faf6d9183f3f4bc5b5b31e168a11dcfa705a77cad6c42f3fe3d98ce67f50d94ca1f75a82999d5a27837ea8fba6c01602594";
+  sha512.doc = "04f1ccf2bef9e11364d7f066ed1a7fc218e39ef7a08824eb65537d88ed03097399eb01d07ba6d0a34e7456fc6de1291ea4f1c9264074eecd2e1af341c42e9197";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "0.3.3";
+};
+shuffle = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "62b456ae961d34908fc25cc085bfa04d39e70f2641d65dc8e0eda419ec96a328798cc258162ebe065285f3ee1088e6076525ccbd8c0f7c0800024f371bdee65d";
+  sha512.doc = "1b6427fa0cf98651a219f1cf6f15a400c09ea924bf0dcea7d48ce0665a5f1828ad64513f87089ea48d02d489d8020c90c661bac60c069601be437c77364813d4";
+  sha512.source = "250729a95e91eef9c1f9b5364aa3b0a1f03a75805845c773f82b26c3782764d6f866f33391aed2f0cbb167d016b06593c015e6fb2aa9b7ababf33f215fb92647";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+sidecap = {
+  revision = 65618;
+  stripPrefix = 0;
+  sha512.run = "3133ceaf7db89d57e7dbdabc016491795b2dd67ecd614fc4125f41dfd08ba0a03371c446d1fd7e22d1c491ac3ba6ced2856c6c3c9497304f4c041c21c0c7f558";
+  sha512.doc = "2ecf3e41c8840ab87b49f771d590f8ba0d05d205bd435571dd71f2ad1d1aa727f7151b9bd913c4d33ec16ccb5cbf513bb170e59e600bf64b7c69a08273580eef";
+  sha512.source = "e961f8965d2f28da04a8c5369370ae6d07e54c1091ec28da87639c6ca737f028010b85d93943fa84a0472f6f42d52d0254fa3e916acada22358e06c420a60d57";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7a";
+};
+sidenotes = {
+  revision = 54524;
+  stripPrefix = 0;
+  sha512.run = "6cf38305b919deca31761f1420c18a0ffb5ba18e045515af058e9b7d73535730117f757f16a8030d97247378efa46428ed9f28757524b650a96133aae6fe4e11";
+  sha512.doc = "db5f8666987eeb2c8e29426a91bc731f8c380176b3f0285c4c4ca8554b91c85af52d0ebe16d57cdb558d8c7d1e97c6f169addb12a57a107c00ff36486dd2d218";
+  sha512.source = "6d237c8df983f2a3d056038067039c45604086a377cdf02b9adc0e1c125619ff911165891d27be7e30466d3cda03f62c32bc7edc73152460d21443a5cc6886f5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00a";
+};
+sidenotesplus = {
+  revision = 69176;
+  stripPrefix = 0;
+  sha512.run = "d7d7be2971798a869308564095617484713471f4b1e46b5729f40871eaa3216285cb063d19a7d85a6db3f4b492c4af290c3c6d392d7a7fb78b4e7761255c0a83";
+  sha512.doc = "d712e51374969ab345d8f641e4ee860bbd72e5f4aa759b0b00cb538c768f9e790265074003715252f8e6c8a6ca56a5513b0f4c2dc0c3d55214aa80a994ff5c08";
+  sha512.source = "c87cbc1558e5985583116a4d587aba0a7f7f6a8e7103bbd5d2c146d250fbea2c5449515787080c49ed949a28071f49036bbc4fd343d4e8d063d5ddf50e42986e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.04";
+};
+sides = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "739e26e0c0b77d75e91f2a3a18996aa55ee1163a2bee6d489db4ba3b0864b51572c55ec53441946f16cb87694425d09e613abd2223fba2941fea4be137341b10";
+  sha512.doc = "653a8472a278bb1d33d9f86559398b62e32b521c6ce8dd977dbbc4f44183e37b95378ea4b29356948735c42925f9ed25153cc6a9009341ff01d80befe2bcddb3";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+signchart = {
+  revision = 39707;
+  stripPrefix = 0;
+  sha512.run = "d379bb1a9fecc06f4e48419d0f4f49e50b6b276e15e64992ee7e154154eefc24e71c060066de3bf9e97da6c8e62b78208f3a01918150cd2ef51231b5abaee44e";
+  sha512.doc = "7b140f890f3342ba6b2d25385dcae6925d8e445a862af703578f455b73c69cb71f4b9b5a933ac8b1a16178874f71c80d124c352b5aff4d7bf3dad6f1aa5a3874";
+  sha512.source = "c2f141c1e0a279d5a76cddf97d5dcf24e35cb219d0a0114d5d2f91a6b24bde3b900b168225cc6afa4c623c9011bd373388799a0448ff588ffefadf7109a24af6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+silence = {
+  revision = 27028;
+  stripPrefix = 0;
+  sha512.run = "95f4f095e0f70dcd11482be4f6d52c5ea7a06ad820c08386ad956b9bb9ad593410e59fe9bb5904c3242594d466c495e7793718d4cb707ed3edd1d17ac3c1c1a8";
+  sha512.doc = "988df943eaf9337145d081de38ac22389bbffd3e94408b1cbb5de7605cccb47e2fa837813d4647c339d978b5b9b3e82e6d9859b840e89c09c95dd9572db0601b";
+  sha512.source = "7a628ca9efcc34863f064783a1e65e7bfee2a735a2457413d5b938e50b823fdfc6137f56041885e2c4910119ac756a5d6eecff91d9e99eb2bb85d2cd73f273b3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5b";
+};
+sillypage = {
+  revision = 66349;
+  stripPrefix = 0;
+  sha512.run = "5ca2f89c924dadaa727aee6b6bf5b0a3c06fe1d841ec37cf1a6fbb7d3516cfe8f4e2823ad8f9acbdd85a333e3736985d139e44b907d3bcf793340d49a164405a";
+  sha512.doc = "fd4ed28957de74aac2f90d2aa37e5014f423738f783f837fdea9c28db0d4b9ebc65c8017fbcb596f86610f712dcd38864356838c1e8da123c2eda1be4932b936";
+  sha512.source = "460ed2ec718e74921711b29010138f5e6e544da8e91631b32144f3ee0ad377b815a3d974fdfea47ab231dbdf17d4894e6a73ea78b00ee03e8934219858ce43ee";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" "lppl13c" ];
+  version = "1.6";
+};
+sim-os-menus = {
+  revision = 68843;
+  stripPrefix = 0;
+  sha512.run = "565fce3e9e13d14f7f52d3390e407b03ec680b21cef37e68439095d9e7cc813739853c9e3307dae040dcf60c6a6dc4934b0d8bac68b258af4c14aa22d8d9aadf";
+  sha512.doc = "b2392fac63c75de85b89ca7037f495155cb749b17220cdc3fb2aca368bdbd593039425bf21a0341a4160935fba94d0a9bf5fcfa6c7d686178a715aab44a28ae5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+simple-resume-cv = {
+  revision = 43057;
+  stripPrefix = 0;
+  sha512.run = "996341ce711f6f9a68ccd7e0b315da98eed8f4737d44b8dbd9881c2a76c8ef2d04b1c956333b0e33997d57e0b62bcb2485029283bb4f4711c2f8e38c177755d7";
+  sha512.doc = "a380b2a498bde69cef1ba2401e16886d35edb40e3338963bcbd6e862da3e54f547e7900a18f668515b3ff178462a4ea0d41bc228b6b6e7ea8b0693e295231e92";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+simple-thesis-dissertation = {
+  revision = 43058;
+  stripPrefix = 0;
+  sha512.run = "201826e649acbc8dde933da3d141408ef3e4f3bc5daffbd520a19885af612f17de2618fe7e8c78a419b6e5e4eeeaa36a2fcb3db6f610df2189e01e0b4a66e9e3";
+  sha512.doc = "8dd82147b1096f728fd52a56c39309d0f421abdd972a1297b88b516e0a5ecf8387a3accc508047bcd3996ab81d778dbdd221934e2bb4c96e1ef2a59cd0fc6995";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+simplebnf = {
+  revision = 68959;
+  stripPrefix = 0;
+  sha512.run = "87c6838d1a31f3a617752f428fdca3ccb7af22daace3caff307760f24fcf3092cff324db6357174599985bfbbba6a8c0f31a498481da3a7790ac653043c0683e";
+  sha512.doc = "bfb6dcf8e843a42b5e7481e3ace572f55561418886cb0ed562fadd79a72eaac6c505b9a52ba37f0e3c2bfec7723a7334e81ab2dd6dbddca47ec2339f8a9b64cc";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0.0";
+};
+simplecd = {
+  revision = 29260;
+  stripPrefix = 0;
+  sha512.run = "5fe4024ce7991242fd60b8a87c88605f68ef9595895857b56981b35dabe96c97f9af684fc5ca9c3089ba96791e076512ccd549ce70071d215eaed4e731145b30";
+  sha512.doc = "5cd208f8869dc989542bf028c216fbddec5bfb285ffc18c25cfea928035946e903cc2b61de630125d8e8deea772f7f20cab552505538eaa5d3aecaef8192abec";
+  sha512.source = "9b26b5fb78bfeb1115af219615c7bcf2ee85c5878ff18807444642e103abccda517c3d701bdfd655f5f9e3d1dc0374c316db96d5d7b0ab9addad74b8d7ecb5f3";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.4";
+};
+simplecv = {
+  revision = 35537;
+  stripPrefix = 0;
+  sha512.run = "c67e9200925ac86386efaab35a8edbf20f0fda700c00c3b0350eadbe62f39fc02f502493a73acc768a4727ad1162561d7baf38193d57d1fefb4c8083ebe38c35";
+  sha512.doc = "dbf087e0659f11b4dc0cf40a6826cc45f48b8155d9148262877a0d51f5766888780698d792f055666766f029ac6f5384b41c0fc41e1c84548582e665eccc0f20";
+  sha512.source = "cc8f96dbb9c99cf9567171e65276d18bc8faf4fa9980ca1fb60fb5fe1ab250d462c22af29105501d72ac7ff0421104be78f097bf6afe8b88dfe48932ac19fd70";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6a";
+};
+simpleicons = {
+  revision = 69396;
+  stripPrefix = 0;
+  sha512.run = "f6f651493ec472e4be6286bf8a29c3fe024b883390c62debdbaf107915b0e2451c3303687a2a41dec8091318a8c6a0cbf6da1142278782189c498b73d03aecff";
+  sha512.doc = "0904648f121bc9b29f95f98b636b2edadc5fde6634a9303549d5588f5c52d2a87d6a559c8f714be7215ab3d17371105a1d60d1fb0731fcc62e34e5b8256fb64c";
+  hasRunfiles = true;
+  license = [ "cc-by-10" ];
+  version = "11.0.0";
+};
+simpleinvoice = {
+  revision = 45673;
+  stripPrefix = 0;
+  sha512.run = "8d3d905dd9dc418503bde7cd51c90ff6fc6f688502ff871040f9eb6bf96b6c1ef999d3dd98b16c8739ce9518a22a8e99a23b5cc66c437504b3837c30ea19cca1";
+  sha512.doc = "81e5ff2bf76f2b35549feb9b6336bd04b9273d4e6b951ee327101d4e5a5d3c429276735238b63c3b2ee03466b477ca2d7990a68615c1d0eee4f12a37d6b65472";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+};
+simplekv = {
+  revision = 68439;
+  stripPrefix = 0;
+  sha512.run = "16b0136de5c1c97ff19beca9f9488768adae2ce7107310aead9f9da82230e9d9cbec62badeacf66175fbaa181d691558dc4203e848b979dcbc23f8cf9bb8e669";
+  sha512.doc = "586321e8c1597582d3be117e74ef97bfb0be59a75aae1d5bdc87b2a481b80cac350958ca77aec34148d5e54cd22a0b0b11306f445cd5abe5f1868ecb357862a3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2c";
+};
+simplenodes = {
+  revision = 62888;
+  stripPrefix = 0;
+  sha512.run = "e92bb0c87e0c490702201fe8328f065d4307f4adfbc06a2e9dd74ee698434274ddbc065a600c5c0a36bca0c55b9cdcd7e3bd469af276585c09ba7d918b711e51";
+  sha512.doc = "df7900304a63225b51ceebb02d387f172cc415c09a65209cc850485668f893e4effb3befe424164dc291e283f80054eb6ae18785024278e93739e9d98562eb21";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+simpleoptics = {
+  revision = 62977;
+  stripPrefix = 0;
+  sha512.run = "2b53c2ccab2dbece85653ac4d40802a41c7dc9aabbb16022f08e351e77e7bd464e47a54005889707de15041a5f3565f40c97355dc3953249a951dd984311121b";
+  sha512.doc = "36aa19521be45853d96c9a0406afa60a934ff5a701993fb33d2c4070e3e99822097b9daf100e9364f80a0779158a81f5acd6904f5050dc190fe22eb4ed65deca";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.1";
+};
+simpler-wick = {
+  revision = 39074;
+  stripPrefix = 0;
+  sha512.run = "2bead248c2380e19fb19012ba2cf7a41fdd113f48a372011c27ebac0820236500c5e49e5235e2c52fcc5a0f9c79f61cbf76a5d6de86322bc40382f5499216783";
+  sha512.doc = "d8a45e06707d3e6c39e36d83020f0a2d4654cab508d91e47022320e67454d08958cfd6d3872c5ae40539f29b03080915e136746452afb9f2e74fe8be2ec20bc1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+simples-matrices = {
+  revision = 63802;
+  stripPrefix = 0;
+  sha512.run = "859e5e8c221deb1a40f08a0cc2ac6949cbb055791ae5435f97675aff4bb1e97caa2fa8c49b5735d31ee7b11ae8638af839affdd795d052d022890b267131dc75";
+  sha512.doc = "8350ce5c4b504f955e7e2b214dfc7938e010ae440b0e51389f2013b8c9229db362938743e8da08d7fafaf1be67d29231d7fe6f92507399b838c65ce3890ec29e";
+  sha512.source = "f88a1b06657e40cae2c505f56e35c8696f4f4d962376b5f8886965066fe21a4bc36edb7f467c29cfcd511b5564643699a54179b44f5187f1c193690485598a15";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+simplewick = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "86aab23f8d19e9fa5a6251f8f725ada87b66a71a3024253d8b56f3edcc20f26695b2194b710f691ff9ed0713c993a8652447674ec84d4084c3354791244a6f10";
+  sha512.doc = "bf0c3b8724ed8cc41635f45001fa04f655a7b37792c5b0e632578b066649c3bde1f894c3ab739ea2bb49f6e4f65e63fd7cd7d515ea15b53ab5894778a7918d13";
+  sha512.source = "45d26e7044fe0928eb8e572f0333bee64c008c2e4d1536a0145939ce0f3392961e72bd7fc70c35b2607b2a241249d13e44e433b373b57898193185a808f128d4";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.2a";
+};
+simplified-latex = {
+  revision = 20620;
+  stripPrefix = 0;
+  sha512.run = "31313aede3900675d183bfcff0045df5fa7719b982df1822823c15d645c7ef64c0b46e0f1690d98d30b2a6057e082684f23cb61a490fb2217887d0f20231ce73";
+  sha512.doc = "f5bf92ed89cfc83f306cd4b2599446a11b73f73a0b82afbd0f441e26d837e6f436913bd2df18585c5e215fa0504bfee3d5d4f5ef4da8925161f85c70c14045e6";
+  license = [ "lppl13c" ];
+};
+simplivre = {
+  revision = 68376;
+  stripPrefix = 0;
+  deps = [
+    "minimalist"
+  ];
+  sha512.run = "f9891f271cce6c795fc78719d71724dc1d07ff21d6877740745dea401be1e67801ab92bf4de2d3a379fb2e63084d902fcf4a9fe38aef40052d30e84e8b8a6b66";
+  sha512.doc = "d958c2e1e75bc22256a2db8fcfa2e4d5375b072b493a18c701cc44d4b3bd9a8e4e43291135ca21febb244a83ed865d7d855feb9979091d771150633170865bae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+simurgh = {
+  revision = 31719;
+  stripPrefix = 0;
+  sha512.run = "11b77f831aff6796e41ccf2024496ae1c9d4b9b5f4c029daf33e0eb4b4fd3d1e5c78137b945e3c9fe7a16380365fb88165a46e614dc3078657ce025a55f90d44";
+  sha512.doc = "30ddd7a9bbf3f568ad4876336228842651d8f95eb5f21df81ac524b99a7a695e68e0469f79867668dc3b9913cf223b72a22f6a0d0c818233c081ba90ac67de1a";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "0.01b";
+};
+sistyle = {
+  revision = 59682;
+  stripPrefix = 0;
+  sha512.run = "0423402d3fea5dbbb60abf6c763bd037982479557b84b6ff38f795168234cd3dc6eb0708fb7b5e76abb1f68560a884e7d8b4e3a256d78b23aa81dba9b6e70d4d";
+  sha512.doc = "94fea0a472ccd43396921d957544ce6b0a1d6b9ca5ee63a01fb0f1fdd61e1cafeeca4c85366302117d852f20798c51b76966097bee3c2d7f6509e339720b744f";
+  sha512.source = "bda83997fcdebffe1792ecf0678cb8065ec0f4dc37b2662fb515c8f314884799650a38efafea97e4103cc915d421b9cbc60ef9c4c81bc34a6b083548ebbf691c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3a";
+};
+sitem = {
+  revision = 22136;
+  stripPrefix = 0;
+  sha512.run = "64a34fcf0769ed4ab4b201facc056b890a89009e1847e9ca65fb405e1c1144225e8fff59c1a906341521bba5d39e3338900a9a35aff5bb716a5aff5e6aa4d49a";
+  sha512.doc = "af74d7b4f4dfce45e543494344fa32f4f4d55435034cc1b23b24b333f89d54d0b8c9d0a1247561bb7182d3841fb04b7b3531be847a6fed3db212497ef2ccec3c";
+  sha512.source = "9aa058eac9367ea31804b5c2983873f16d1c74f598fb0967f43257a963a38aeb7d578ddd596dbee87d942d87ece9188c6fe0f5e8734751325121195d9d348769";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+siunits = {
+  revision = 59702;
+  stripPrefix = 0;
+  sha512.run = "01b2b83edba4482a6d0434efd4590b3b0fbbb596da6075632a215d60a16cc48d66f0f47d3ca61a0e73290e933952cac15fa2048f6ac12112dc603956f123f5b2";
+  sha512.doc = "d6c34f20671b68a1ffdf47b32e037d7660b660fb8a8e3768083ee7e33b08e7c313eb5f2c585657dcfa258f85574bf6b13a86ef81e49c2ed1b407e4dfc8dc5d04";
+  sha512.source = "8cd5d556cc4c6abc503b9882a7c2ff19052a9004d703b37383d6a6c6ec671ea434b03f6f1df362aef2fec06dfeefb7b231072c975eb946262b71b15131f38daa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.36";
+};
+siunitx = {
+  revision = 68844;
+  stripPrefix = 0;
+  deps = [
+    "l3kernel"
+    "l3packages"
+  ];
+  sha512.run = "adf94a225f73f132a84a2bcd40ac1f024f81fa10eb35be7ca6a41149960f508ccb45f967371aa11ec1a129251a3272361ab270a3ba00b595627489cac789f279";
+  sha512.doc = "35fe0a78311f053e98153fb435327478cd6fca48e1c9595736d4857cbb6e8882ddb20a89fcaf95542c9076c7a89cd8ad0c042e0faf0a8a7dc3a4dccc8131fa98";
+  sha512.source = "1abddd04b462232b62d9f53a1dec4f9815862fe208680e7b62aff00c6ce4649494eedfda81051e7d842d64ebec35043e7a38321212af22e3bf70cf9649bc107d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.3.9";
+};
+skak = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "df1a6adea32b01c8ad8ad7509c68e025ad2e1005d9aaf26cc35c67f82d21f510d1e414831f5df0a2f0703e295fb4c187d359ef7dbfe8afd76a8ce75a90f3b4bb";
+  sha512.doc = "ffcb56dfae0a0ea91e716b99d1d91d4f20fedab8eb7b637f62630dbc4a8fad0562120cc02a754df475dc16c4b1a09fb2da48b8a9e22112d0c69550016026f76f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.3";
+};
+skaknew = {
+  revision = 20031;
+  stripPrefix = 0;
+  sha512.run = "879107f0bb96441082ccc4afb560e4fd0f625e7fb7cab84ebbd642af1ef180bc27540eb9ff26c689039dd6abb11e9b88bcea30d5b1e75b40f0e3499c981ae6e2";
+  sha512.doc = "8c26115910f2e9a9ae28e1b6c0933db3308c9f59eb151bb37b23de3f0f790b9726aef895def0826e00928b75753d925c5c9db0a6b91ebf7035fad5a4e473a315";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+skb = {
+  revision = 22781;
+  stripPrefix = 0;
+  sha512.run = "5c2e0e7310898e258505cf438ad91650fbcef6b720e9d05b9ddd241ceca3eea0ccc3a71b6ac38acee58d8e205b8352ad7abbdc277596ac74f6a5cf0ca805a0d7";
+  sha512.doc = "29aa9629f84a481cee1871b92b49e1a34683092759864f1e612ef4f7b3862a9ddf567b2d20fae3f99d5946de43055de2dae8ad326000e344383c854eb9ff4f20";
+  sha512.source = "fd0f3a1d4cf3fa189ef0fc8bbbb35586a39aabbc733fba3aa9d3fc48d920c416316a4a19d88583ea42b1a4c38baf4ec75cf0eec78b68a5434f3ac4578d56ea9f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.52";
+};
+skdoc = {
+  revision = 56950;
+  stripPrefix = 0;
+  sha512.run = "d00944f58e9842c0d1841b73fb1936dc14655f07d51c60140581d597a93a0e9ce9fe65941cc343979e549620edec6a8339cca6089df068d932e1344556c3449c";
+  sha512.doc = "481e590c14396f3318999524157f8e5a8dafd0b6f553414d3ee09cb0dec6d356c2b422b6598b613ec4d29b35f27a59024dc9e5bcb49ea2643205f37c616788d6";
+  sha512.source = "70343ccef329a3dce81aca0c0253b42450e7eae4560b58d69d9f12d7ef32d25023d5f09208f22f7d65414a089d2992c28079dfb708ab701803cb42fe41480691";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5d";
+};
+skeldoc = {
+  revision = 57922;
+  stripPrefix = 0;
+  sha512.run = "2bc1374e969e5b32e9a88b8240a94eac90066514c8dfcb91196a13a3774d200cb8a412fd490b581ba18e9e0047596d30296206b0607316554a361b6103ee33f3";
+  sha512.doc = "13cb76835ff1eed119d8514aae495d6adaf8b4c3db17c660af29624247cba9c37d4f6991d6a99c566972e4032f14d62c21fb4f31b856c49de40d0a87def1cf95";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1.2";
+};
+skeycommand = {
+  revision = 24652;
+  stripPrefix = 0;
+  sha512.run = "0aabcf0a47ffbdaa2f88bfb970f844df36cfa30f2e5ff02cbd9dba2179fd871c2ae1f979a99e70f3f7f2ab2589b7ecbaa6f999352559100bfaefcbe7f6ec16a8";
+  sha512.doc = "26f7e544e9b1b75fe7131d409c3083c39914424c66051e46535de5415383d82e48a3e2c1d35e34e5bac624a034f2e14623c8cd5b6844707b09fd531daaf7c544";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+skeyval = {
+  revision = 30560;
+  stripPrefix = 0;
+  sha512.run = "151a705f5e62dc80e8a470a7ce39cf197933452a35b296e70790d7ec0f6667f24acbc0c643db6c402ca1e9b9735f34be388efca5a5e5951725e8f00bb8d2833f";
+  sha512.doc = "97bf20706cd14e0b479221c6ed96e56754aca13d7b72f1d7bedec6117d159caca2a4e9a931d3d8311f593a538985d8e4e5bb9d5a76a653d72aa8d094a66e9e92";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+skills = {
+  revision = 56734;
+  stripPrefix = 0;
+  sha512.run = "0719d385343a79a261409a07d659c0fba4f861e69b082278b1442a12408bc3601de789575fdf566ce280a2699dc10b28aada80d490396498fa9a6bbc8d064eb9";
+  sha512.doc = "9b2339a50fbc759d9e5bc907a4d8dca2f06293d5a5f38602213a859dfc34da1715105b2b5a46e82a23f71b741e4db713b0044f345767a1f87c32526b57fb0103";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+skmath = {
+  revision = 52411;
+  stripPrefix = 0;
+  sha512.run = "6cbc67d9a6fb9cb6a3d8da38ff83bbb6dbd28c5e3e81a07a1b7292472d9064f321206ebd4ac1917d80f138f9b9cf91c008b8e3eac27ef0a77ff2073cab08eab1";
+  sha512.doc = "ce579b82a84f81169bf1a6cc37fff0c2e7c4e1570d0cbe2eb143dc8ac6dc082fa3cdaecae5a31791aa590c89fb74a58a4451811ec66d38eaa146520ff16e7471";
+  sha512.source = "d5101fecf8963f78b9e202c9d537723dbea069558cb764fc66344862cbcedfd81ecd3d923ee2f8b1167a65f8325e2f1fd66f16089a92ab419a580ca7313fa484";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5a";
+};
+skrapport = {
+  revision = 52412;
+  stripPrefix = 0;
+  sha512.run = "60ee0f76dbf9e1539c08a97cf25cf14d2fbf02527facc3764c57cf0812a67d740d5c3148a4a7e76a6880717166c935b34bcf38de0b4f7d02df9c1ab50046a2ed";
+  sha512.doc = "986bb0ce679b69bd9a0958b6d4d1a3fac49ac6a5e31bafa5d556ac28c2bc3d0d8c892e998791e74172ec86c5899acba2cbd193dfc685e7dcb0b5d47b4c2e3576";
+  sha512.source = "b2f63eda57ec7ecbac63c6f0b2dcc2175bde5618db88cd6270a27466178c39209418a94470d6f78b8ea22c5e6ce8d3dfc178f52cba943f9ccc98fea447ade818";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.12k";
+};
+skull = {
+  revision = 51907;
+  stripPrefix = 0;
+  sha512.run = "261ba31f30fa26e25f82dfe60ff7600c71db51f1dee68a5c094fa8a746995ee9031e41c0f24a4e83aec52c603cbea71a0773cae63481f167b81abdfb0ac3f782";
+  sha512.source = "3967550eb9af93aaa3fb9c623437e2c6ceb90f52f20533832aae3be91c719a774e3fe6a51f4d1543d6547479a2efa6c1965f0870174cfcd5c93cef0c20aecddc";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.1";
+};
+slantsc = {
+  revision = 25007;
+  stripPrefix = 0;
+  sha512.run = "45d92cb8f2a5aeaecc9945ce2778f2fa330b703ea0efb2deb4407ac17d30ad3a3e1ae7966474af28a7816dee18254422fe7c72c50f11f47cd52a54522f05fec3";
+  sha512.doc = "8f856a45e3088d2047157bc87d60a16b6c6e481334f4ee81a23e4cb8ecf53d1113849877ffb24ee4516dfba228c10c9974b0b0a148020d64e3069ed7a2d12750";
+  sha512.source = "7e2af37c07b8ccae052c84ade3ad49fb4d93fb5fd97a5387b1ea8af523167f21d48e3961df58c7a93dfbd07f09ed1140839e48a57b3149dfa713e5945081f200";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.11";
+};
+slideshow = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f7bd44c9720512297f15ff6cee1c49ca52c29fc206f739e6aa447e778fed00a64e282aeab9d42b215cac69a64ab39f3919433bd0640d30d55ac540e2dde07967";
+  sha512.doc = "d271c1f9e7b9c45694463982da8c9542fea326d7e191a705e92f5b423e054c3f926768d2209844ddabbe75eb610d4a5cb05ffd53098cdca9e35328c865027eff";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+smalltableof = {
+  revision = 20333;
+  stripPrefix = 0;
+  sha512.run = "50a4878bddc55e1b05ede3e770aad31f6c56b81f9e6d0a536ece25729e3c5a9a1720068534f26a9c224c101f0e0d833478f1a5c3b12759d7c3ffce027bbd5edd";
+  sha512.doc = "ca62aa29f6ad62f149dd9c5077ee2b14ed69d8a750f33d3de274ae275e5d1528482e58140a78b0917cf02a879206194e24a6beecd33060544abb50dd6fc564a6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+smart-eqn = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "03f69303ec66b59a7425e06a4e8941a5c93414514b5f80cbc138a75a5619791dfa3ff2f1435ddbfbe7fe5af298a1af5325f279f36d924e97a5074ef930b42997";
+  sha512.doc = "85eb6e8ccbea66cb6e30f862491adc02316af9071753459eb56e8f19011e9ab7865f87868ed348e5b0f6192b2305dffe5272d885486b881e2d286ceb211c77dd";
+  sha512.source = "f7bd8c3b2e616a739b0d5ad459e1041c492b1e00cb9258b55ce4631465e510e71c166a3f6a94b8244a7e1b4bf098ede5c9379a7a5a6baa90eb28026e9be0bad3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+smartdiagram = {
+  revision = 42781;
+  stripPrefix = 0;
+  sha512.run = "322589506d1cdaa30dd9f97b419347fba0d617a3ad35fd15fe91611b10382c595598ce1111a287f5b1aef617595cba77b53490da7744b23942f072f522a68ef1";
+  sha512.doc = "1cc7abaed3dcdb11fca675bea8e458f1879bda4ac72278566a9247ec2cb0016f10467e3120e9ef688c5674af05559bff39862d4b3292596f0dafd5e13672a14f";
+  sha512.source = "a1141f82e32b444951bac9fa0fd119e59cc2389577cd05cc19702582c64972602215648e727ccb338565edafb0116f6c50a033d9c3ce8664e97f392148f888d1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3b";
+};
+smartref = {
+  revision = 20311;
+  stripPrefix = 0;
+  sha512.run = "149dd95ca0677a4e273df64a589d1424b8dd89983adf3a3ef81f8236d1b594d35b851b4255fd9f0d05b4feb82db59d816408e3ca59f2b86b73a5724a8e937367";
+  sha512.doc = "07eaecd9e924e5912e8e3a3ba6479412282e1408cbb59699b9e83006768c4042b173d38da2e8dd2c707b392cb48d99e4be25985023db4de80d69450fe95a338b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+smartunits = {
+  revision = 39592;
+  stripPrefix = 0;
+  sha512.run = "d4c23a39d79cb5c0ba700da40b916ac6072e612d0e5b8ea1c189100cfe56fe77c9d1ff742d92fc44450255048d96f2e1dc2b5f0e098e56aad5efcdd423fec608";
+  sha512.doc = "e85b83a090b3e352a0faa61ee0f3dfc84d3f2fad8f1ef503aef7bf571e706575b19c1da394b09e69968b10fff2542b5b749a895eb17e84ce1293273532d2e241";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+smflatex = {
+  revision = 58910;
+  stripPrefix = 0;
+  sha512.run = "3723047537c97c42f23eaf15dd95941092300a86a5072cf261c2d9a4fdc09d17e3c09cefc6a1f632996b45300cfc5e3266dba4130decf4f6d33063b0b7f45d0f";
+  sha512.doc = "a0ead1f76c26126c3cf00bd735ae8002648ac874511de92a73b756197328af3d81d66697c0fb3d210047570dd267b5c975b26a7c6e42b0fa61b9b77a29bbf113";
+  sha512.source = "99a45d290c450301108b032830b02c81d3487ebb281f19f17826df8ed267dada23b5bb039874f97de29850c1d33bb775097d53d7e4d8d4373de9143219aa57aa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+snapshot = {
+  revision = 56735;
+  stripPrefix = 0;
+  sha512.run = "2b9bba924070f81319758c4b8a8e85533ff5099e901598248d5a645aba249e7158587e7d90072d3e8fa4d544d09f800b94aa415117683a8bb8c6d7ff642c313d";
+  sha512.doc = "b1dda7b3fa9195e5d0e425a4b7facc75f8737446b65b29cd5f3c954dad348055c8544968b3c68f9b2256e8d827ae73b54b765d23b958abc383bef072d9eacfe7";
+  sha512.source = "ae57330c3c69e82c638e07ca7d2d011838a85ae79f3f16fcb8909076f375da51f2b1d3487aadf55cf93306c035099397fa826a7bd9654e6756cde66d2138b15b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.14";
+};
+snaptodo = {
+  revision = 61155;
+  stripPrefix = 0;
+  sha512.run = "10d9e3d154a3713c1f494ae626c61a1275b902892ad7cb34f41c65a36335a7ea21bc9d7d77d00845c2e5f270edc91d1be5bfdfa34189a2ac6bd88ab83e78212b";
+  sha512.doc = "ed3df0276b44e2539b9b8cd0b5f6b46f86b18723d0913ed29fba45e30a132b53f8e0206add2d31bc152c78f319b8f7671ea000a1f344dc7f7d80ad9de32cd66b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+snotez = {
+  revision = 61992;
+  stripPrefix = 0;
+  sha512.run = "8e827171eb8ae6281d0be97bddd251db57349f935ac6309eace72396be37c33e8bd79d792701f56a5e338eccfae452411de520bdab5f5747e6fb741e5215c1bd";
+  sha512.doc = "230cd4f3f8922fe520c7b476f8f7b31e3965029e72e58828107e5f7c761b87a64f5c5df9faadb610277d45ff95052878c070e690932759850da34fd82fb028d0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+songbook = {
+  revision = 18136;
+  stripPrefix = 0;
+  sha512.run = "06f81b35318ee9844565f622b5ecfb0f323373f14acfed3fdd042a244537c313fcc974c8cc556011baed16c5a7f90b8163342d36e360749db240e6eb639351b0";
+  sha512.doc = "a8d98e2d3b90ebfc4e8df53ebaf92f2d0deb95034bf234dfeaef1d38213af9a36e38d48599e6e78a7e87fb966de87db821f4de7a6fd50f57c1afb515050bb510";
+  sha512.source = "57fed8f034e860787cd72b2acece0a491832acc526964c75060258db6bd46d77a551b967af41bfeae47d83ab97e4d6c2799c0f4ade405a43812126acc1b3d390";
+  hasRunfiles = true;
+  license = [ "lgpl21" ];
+  version = "4.5";
+};
+songproj = {
+  revision = 66704;
+  stripPrefix = 0;
+  sha512.run = "7c6341931e78dd362cd67062518f7f6d1725c239f20f65a7e345fed03787381af08b18102f671be4913ed53aeeb669f3744330d2eb2681878939a813ade2f1ad";
+  sha512.doc = "1d219f70c51484b321b6c3b8fb63a81aaa311cecf5abdba6b5cc2662d528ce5fe78a400d81dd3dbfa0e3616a65bf124e3eb78ae94e57e1a87dbce83ba32b3b64";
+  sha512.source = "ff8238a64adefe5fb2e2ff8b7541fce489c0759dbbfb5fa517458e404e6a7184b77782cc9ce30f2063a958e212b1d133c7c4a3b82518e7347b2cfdb930bd6cfa";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "1.2.0";
+};
+songs = {
+  revision = 51494;
+  stripPrefix = 0;
+  sha512.run = "dd1309fda1a7bff1236707cb45047dd5adc582d3e3f509f211af7a30c0469cde704773af48fed379a29307201d9781150487821219f76d45d556f1d27e420c08";
+  sha512.doc = "72c374aab68334b050a5d801299179c8484b6fa46db8c8e20b9fceef3cb9a8c0c1dc51de93f34115d4e34767233179c5872054cd03ea3e622abb63a49ad81f24";
+  sha512.source = "016d389033589ab9334180edf70321858ba3b6000d8f560a18631e13ef28130f4b39aed81f7ddf0a178540a463789955d14620b37b7979ac0ea6abeec77d29bd";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "3.1";
+};
+sort-by-letters = {
+  revision = 27128;
+  stripPrefix = 0;
+  sha512.run = "41e7db4a4c5242493aeb099ca103f4540e038b1e91ec0296629f4dab1ad013f98b26b664c7d661dd2f53c1e5c749509763c46f51bb823225a104c125a9f75f4d";
+  sha512.doc = "e2b6c68a42b9364d44dfa06ea93d8c8ea2444d97a3cf3c111065b720d3706b36315a7c8650877f1d6a2a72c1aa42268af4f17fc4632032e1e3c0a2d0fa08e577";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+soton = {
+  revision = 16215;
+  stripPrefix = 0;
+  sha512.run = "59e9e0bd127e44e1a80ff7dccf1fecb18b34a54c379a46632b13f82d80648229daa54c4655575c52ee718b02277c4e2b264451f8d3fe58abd60e593d0826c97b";
+  sha512.doc = "de9b03e8626535d2633af3884e373d8b25fe6d203af75382cf329aeb7b79c745f94c6d08d49a69b42172f4bad3cab2048fadcc4ad826a1c1126425a40289ecdc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+soul = {
+  revision = 67365;
+  stripPrefix = 0;
+  sha512.run = "233f1178521296d5cccc7db50c98425995b8708c97d750a5c24f698bd0de2e54ed5c57f9641f402bb8a42721e348355e6f7e9092b4056999b032d001c8203aba";
+  sha512.doc = "c734b198050f5fda61e0477e7cadbb6f6f9257a0fa41babed664621d7b64c4971412d831b350879a5405976d4e35a11caa0519fb67f308bcd622f0c72f431b4e";
+  sha512.source = "6a50fd644f99214a71f96994d52fdfd5f353a584ad73dca3b66829ee6094976eee8d4fec3f691149f634f27423ef5490bd4c1b781fb743bcf228e4b1e52e5d33";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1";
+};
+soulpos = {
+  revision = 60772;
+  stripPrefix = 0;
+  deps = [
+    "oberdiek"
+    "soul"
+  ];
+  sha512.run = "2b4d2fcaa687ff7d229706e563f739356a450a8ef02180f3c98432b11d027cd097fa895c3c971a944329b8657c74b4d2cf566110919e511e6883706561332678";
+  sha512.doc = "9577aa2c77e9cafea54eee0ee032acd7c1343d6eb66b76fc25d694b524630bd2f41043187671cd444c9cdd0ccc8b9064e6c71365492cbdbd46517a061efc87cc";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.2";
+};
+soup = {
+  revision = 50815;
+  stripPrefix = 0;
+  sha512.run = "478c8cba8623b184db1c9237b7a805219bf1ffb7ef45280fecf7cd75a1720ca0ea2e1e1ad73465ee20dbc2bbaf14667d4707524edbc073dd4fbd0537dbeca8c2";
+  sha512.doc = "318cb98167123bf8d9a5f80db8e31a31f6f61536e938da3b68efc0dfec6722bc898d8295d32896c24d2842b262f22f70e08014c07755b6728dbb2040f64aef5e";
+  sha512.source = "41d74f1e6812f4b56b44e3a80abb398baf9eef5c6a361de98a1237fc6931952460450f3780f682d35bf9bc718d2902c9d82ce15994144b2a133dcda46b531774";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+sourcecodepro = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "98ae07aa0c29c1c1cf2e181b1a5d68f85736b90b8f381bc9c1a2368cea2b8c62fb0c8007f5ce6b53b8e87195b8b0859c54bb2656cb7361119c29ed87d9259c62";
+  sha512.doc = "e786d75bedbf5c5d155a69fda50e9fe6fe07914ca01aa10d7ab66800cd37a4bdfeb543ad34c9ca2eec53de226e68d7a1849a9a0510291d135001c5228f19e2e8";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "2.7";
+};
+sourcesanspro = {
+  revision = 54892;
+  stripPrefix = 0;
+  sha512.run = "0511dcf736273d80f7143c9dad96dd9f631b016183b4078243ed061d35889fea62e50c5f48e9842ffae7b654fd2e08a21d1c46403e56349c0b515ff2eb62e164";
+  sha512.doc = "174def8872588c27b8f90b3c384ee356aec43e4e42014bb1c02d648d8b309dfa8fb9cea03f65fa9bd86dc3ff1e64483f1312dbaca6e212f65d2d379a1d9935e3";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "2.8";
+};
+sourceserifpro = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "5125dc5b72d960fefffcc4c8651f3d176c18c32d111440a16a0319f90b8dc973a4af0e20fc3b571578184e31749312c0c1f0ec3bba36b3715a3c59fc03768d65";
+  sha512.doc = "c469f7beb0e99c8a9891c4222171525004c63e9feeaea9be57e663541ba4e2f259d2a3674f3029e4609fc08292d749f005f971bfcc542115d53e1845a02680f8";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.4";
+};
+spacekern = {
+  revision = 67604;
+  stripPrefix = 0;
+  sha512.run = "005bf533b88e602779cb71c0ab7720492e5302f6c9321ef8d68cbcba8f4f9a0c7839c5408ff6c2a5f72c18c5bb5c8a7d41a5500aeecd29ba898c209c83dea6ea";
+  sha512.doc = "8c24513b5f81d1f2df44a707a5e2ee6baf66af594507a545ff0c5e0fb90412b6c03831d73cb473dd32168a6f55f110fa699f941da0626aa0b3ce35bbbf1d9e26";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+spacingtricks = {
+  revision = 69048;
+  stripPrefix = 0;
+  sha512.run = "df9b7518565ee8f619aaedc82384497dfbad69911c66dd68f306010cee603ab307c3af89cc3f9901585de03e1796da3d8b96380e454ab0d3d24171187e39872a";
+  sha512.doc = "76ebfa44b0f992db86452e5ca6bff7b4b5285e743de595f6963afca7eb0e80f287a1eb71b2f287edd33acbc7a9f24fe1876ac6f62d2812da2f1fd89c9650f814";
+  sha512.source = "1f22a7811c34d834cae307a149fd993d87232c6e1ad6d9c22c79f005b6ba06a84daa5878caf189b44b8afd39a9ce41005973168b7198f04223becc2c0e90ff6a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8";
+};
+spalign = {
+  revision = 42225;
+  stripPrefix = 0;
+  sha512.run = "6e00399e0940778a6ed8326abce14f15836bcb69f8e7c67d06cdf8567330ce0482a213c7b65c2662e0fddc47ce7b684a640e133017eca314b59eefc278eb6425";
+  sha512.doc = "534f2c39076a6ff243a8e4cffe353a569b493b90fc1bdcc3db43229dda3955f013de15ce1db7beb38bc9b8d972c7430a24d64c263041c82e84c799f446faab0a";
+  sha512.source = "3a12b34469bbefd61112b7338c8b5d440de46837632a695b52ae18e4f297d6ac0cde7ae71db7bb0a7bd3db0aeaa83e78f33a60e4dd496cf9c0ccda1a297b4ae9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+spark-otf = {
+  revision = 62481;
+  stripPrefix = 0;
+  sha512.run = "787774aebfb3834f1477a8afc61d2f81c32fca5f69e5828b403b58a60c2047a5afb79d50f33be0376cee57fd30ee1c3af2a6428c08abc9a058e6a3b04b8fee0b";
+  sha512.doc = "69fa7131b247a93b26fb98a8a4fc69b11fc8f9f05905948f530d78abebea76852baf4535768ea925839b0e3332fe9ac61e94ef7b10762afd61024bfa934f243d";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.05a";
+};
+sparklines = {
+  revision = 42821;
+  stripPrefix = 0;
+  sha512.run = "5dc74f46a819a6539034d570d4bc11403cb9f4617e2e6e373cced6cf335630e4e5a3d919041ac67a8b114b2d53c56871239b67a6acd6bc47f8c6130171d84824";
+  sha512.doc = "4db42aec14145d4b73fce7940563f6771c3d994955006cceac7c93c9d5d5e2200fddf6d83d15e4dde0385f982c0ee85fc844914d80aa249c3ac2e86a49369b38";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+spath3 = {
+  revision = 64818;
+  stripPrefix = 0;
+  sha512.run = "c066ebfc25685d450caeddced161ad5b4170453307cfd21fc2c85c113bab3271b001514481827149757e536863fc2bf9814e03720d9a934c4df02321d6c5bbd5";
+  sha512.doc = "ce6fde7f6fe42711a2c685582dda0bb9a4715b12a43483a76824361561cf1f20b40bc85a3c2facc90783cbc46b632848a9701d28381f0eba343463ac03ac443d";
+  sha512.source = "5d85d1f8370009e0ff5f7cc25f95a1daf3604ebf03e2dea28d3ca4f08f69bf4f86859cd63796b43eab7104945204f70448a90cf95234b574f8ab11f883a1bf09";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.7";
+};
+spbmark = {
+  revision = 69350;
+  stripPrefix = 0;
+  sha512.run = "66ad2072225527c3ed64073ba5d33533a429b211794cf6cfb2c2623063629b4ad2869decea96237cda6c678dd35f46c6a63c61ee900a6a03c11e77130f911113";
+  sha512.doc = "128962629c38e6dda2752eb003c1039cac0e3ea01ae9ffef3b784d4f28c364fd275c1169dd812293ce5bd68a4c6aee422a23a63e9ac5b3da4ea5388e3ca44bf5";
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+  version = "1.43";
+};
+spectral = {
+  revision = 64528;
+  stripPrefix = 0;
+  sha512.run = "e260d7605cb89a7ff33f530c5f6448f2ae512e9ac1b22880f3d76147701ae458fa5acb3525d49cae3973c24b51858ad687b76f5a00ca8d914edf4e329f3dabc7";
+  sha512.doc = "4fba6fa0576a84b05d0a0bc3520ac6e08dbedb7f37e5af5a0cc961c80deb98d53065be3c645c0eb0dc08a495d113e72f4474de32dad5d080ce67b000aaf4042d";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+spectralsequences = {
+  revision = 65667;
+  stripPrefix = 0;
+  sha512.run = "797f7ded1824a025337a12b47a8b85d16d69b8e0f7999015c0b8618ce639f97a5883f1a694a22b56de4a237901e1a43b7cb0f387bb02f567301e59203b16d31b";
+  sha512.doc = "4c876bfdbdb40b6d1b58d1640aa39f02a29097f0ddc1015bbd6b415d0d7aa88c90c0d45edc444c69baeeb68741320745157466bff3242daa48526a1ebe21eaf1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.3";
+};
+spelling = {
+  revision = 30715;
+  stripPrefix = 0;
+  sha512.run = "ec32c627f52e1cc08f893aff21d43519ac30169772e82793525cfd61c302883c9c0c8444f2d51cd03a94f55e1ad589afac1a404a47b87ebbe7855acde887e511";
+  sha512.doc = "a51b8fb45701d318dd9b9736830b83ac34c84b781d61a3a247263167d527aad7cdb6e1917ce260d09e0304fba38bb2e2a25288f75aa2335bef479918036e1221";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.41";
+};
+sphack = {
+  revision = 20842;
+  stripPrefix = 0;
+  sha512.run = "b2cd588384770e0d95bf6e5c6b67df0ba8160e0a01e3f64932d67debcf9fa836212aafc78c79b8d28aae8124a25aff73f4846db514dbfc0a65a519eba75fc52a";
+  sha512.doc = "6b490ee2e736a6bf1ddf32d5db605ab5fe77f079d585c2e377bda73a688a7de575b99d56c6626d9888c395f6a4d181cd0b42e77dd5673c8456bb0e029510b8d9";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+sphdthesis = {
+  revision = 34374;
+  stripPrefix = 0;
+  sha512.run = "44c467fc1de689bc198acfa224aa1109c47bcdfce8b161673752f73d59877465b0c4b87f1fcd4a8f589a78fb05ef5efd42edaff2fbfe7910a1ab7b409d9a7e5f";
+  sha512.doc = "cfcd8c02c68a990cda426d737914d195c78d98e0b8c9765128aa8319d47d27163e7d072ea50d312a394b85e8ac1e580dcbd204fcf6b670b4dc519d1f09ce8d72";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+spie = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "282ee645ea5022fc0e325bf211b358236f07c6509883a254fa4e1ca0728fd73a4be8889e4919eb5e0ea9c203300359808b4d141d71d0c158a71a3d10d982264f";
+  sha512.doc = "1242f49f1499b798977eace516487543c23dca36471b1e49a2b1377a84083f40a3d5a2e316624f8ac458b61c2cfa406fc3580209c9629739dabaa2fa35e6b806";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.25";
+};
+spix = {
+  revision = 65050;
+  sha512.run = "e0447cedced73a9544b837c555f3d42995b5fa5e23ba737b6794e11e7fa391969c2156ae89d6e7e18140dae0e0c9b0f2d5d6036c4fda3d236790abb21fc8d9ed";
+  sha512.doc = "b783636e01e976f3a0020d6e5b8c87918277fb0caae09057e68b2e216e504618f0b784b1214fdf99fde79cae5a6169c585bacf093de149a99534ef7069e6cb2a";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "py"
+  ];
+  license = [ "gpl3Plus" ];
+  version = "1.3.0";
+};
+spix.binfiles = [
+  "spix"
+];
+splines = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f040046978cf51bbaf3347406e224fe60a85f449c1fac1703e7a2d936140b099c14ffd488ebe4c3d932b35a8380f943250734a054ea5165ed26b2be712ad577c";
+  sha512.doc = "08532f43fb7aac979e78d30f27f36047d7b70733ef6bdd65d26a40e6818f2b73852d4a6ac5eeae8cd29fc86e1630d2ba068b9707666f66a13e2090a6da81ac25";
+  sha512.source = "dd23ff4702f70ca2f29950e2e1c915dc96f9b0951b6f00ff94371ff80fe60f20d8de517a9d9157db9518cb51f96f1f52b8cd7f080af7760c926c5d29649844e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+splitbib = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2936732fdcebff683e240e139ba6e1e4268dc72e427bd30af0590cc3dd7dcc8dd49eaf6f007e549efc5c429fbcea2b37f9e68040d1ffb023162c571341abdb40";
+  sha512.doc = "df266ae77aaccf91b08931c57b01a9eefffe6a469c4cc549ce41640dc9c9041676539e1302aecfed88d19baef277f507ede8ba6f794dae6ea4745b1338459d14";
+  sha512.source = "72a8da016f943df7f5e2d7cb05cd1a64e222ec0c3be784ac21e6aa5f571c9e76cc3e8a5716444aa1033d5127af8d82df5cd632a884fe17f08c55e08d38956e3c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.17";
+};
+splitindex = {
+  revision = 39766;
+  sha512.run = "858033eadfa82b4e40a388356f64002370a5f4fc2c95565eae90c68373f708a3c9827fc4e0ba8094659382aba4e5925cba86632733b15d85ea6a82f73ace8737";
+  sha512.doc = "c8dd92e955fcccf71b412d9750fff7b6f214e929ddf194a6496a79a146f4837af3d773ed3f2303546727cc4a8fb9d5366dd75b64d3877e6121ce20315f71997a";
+  hasManpages = true;
+  sha512.source = "8aa928bdf6f2e8fb6274c1fe8d0b4567d03a1c6ffbd078726bf6a36ff1bdab981d5150cf0250602a64d2a0a9be92695fdd399c04d041b7a9579a7d3a71910151";
+  hasRunfiles = true;
+  scriptExts = [
+    "tlu"
+  ];
+  license = [ "lppl13c" ];
+  version = "1.2c";
+};
+splitindex.binfiles = [
+  "splitindex"
+];
+spot = {
+  revision = 22408;
+  stripPrefix = 0;
+  sha512.run = "95a7bf0a9e04e7157fe27499a7a2d2bf3e8d86f284e9c2d150c40b5efc1786d4820af20ccde7f5b649a775d7a13d25a78347138a200335fc0b9e4165dd3e1f0e";
+  sha512.doc = "26ee8b13622a46078e8199c818dc353801af36afdbf67707a6942202fa458e7cbe9a000a4ea022d0dc4ec6ddb3a63c6adadf240cf207778765e47b2db636ea5b";
+  sha512.source = "96438aef76ade4df7f4f49d819f96792a28dcf3a0f5e50498f854c047a7754accd31d679d034886eafbfd32c0d4eb941e8a888a1ea94fb332b8b48912d0f673f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+spotcolor = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6748982e7007323414dd8ca5f1ede105bb2bfd0b0f8d2f83c8731926628c094c8c08f0cf4ddadbaa209e182f8af83ed6fb761142ecbb97371752473b33c44ffa";
+  sha512.doc = "4055f42161bd45dee74974358eabda875e9a3d62690fec0486748cd7fe974af133c24e56bcfd240c6928334fd9c7e1e6a6935c45b974760b41f7ce080d44f568";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+spreadtab = {
+  revision = 68256;
+  stripPrefix = 0;
+  sha512.run = "f808d82cde55b9b8fbe0cafe9f2e67acb19547e85f8d48965ecc6c8ea70302b9ebcf4097330707780fddaf1d9b2a2a12512fe4026a0d660c5a376fbcffdb6f19";
+  sha512.doc = "a2b57066ab198d88be6736572276593cb2b31a9c6392f74c68358d39a8c88077266b2138730225b6ef54245a6f084aa73dad5bbd31a77fdd8b60f53f7342e25f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.52";
+};
+spverbatim = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0b26e941f77264ae2db7cdcf2c4459c26601f6079e0bad24a3ea0edbd22157c324bbf50426a794655dc1aee710092cd9b662bb401838186e42657fcef5c1121f";
+  sha512.doc = "245825f18ae835b984eb6474b927a579f80b6c6feefbfe02a53f8b7ea5a48023e1bdb43b39f090afe4ae42937d053cbebfec6ff97d7732d754287401a95fc641";
+  sha512.source = "23f8eb04b0debee1c9babc4ee6720740a4e64a28969365c27c96113cd777e0565b19d8f6db233470cc600733b1831463881d86eaf4b4119cf60bd3fbbf3d0597";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+sr-vorl = {
+  revision = 59333;
+  stripPrefix = 0;
+  sha512.run = "8a9b0833bc518b12019d2d474a70760e3b44766751485215c746b8a7c3b9ee1f9e92a5cee09c5f961fe97387855627c6a385b7484564556e0901c08c922410dd";
+  sha512.doc = "774c91361a95510a356fb7fbb70f753954d30d1ac309c1cf09727a2c9ea647b65f046d3eded8e631b512190f5705eab020abe8b7923ee9d6230c6c9fd782dea5";
+  sha512.source = "fafacdaf874ec094aea5451962c3c79584da5fdc1e0aec34b9965b9c8531d19538d362b68ff1d07073aaa3c24483214168b942b6b4e0391384c69c690620d9a7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+srbook-mem = {
+  revision = 45818;
+  stripPrefix = 0;
+  sha512.run = "5cae41da74957078b2b0ed38c9fa4186006f24abca804b879641b4bff5324950b1a59296c5733fcadd2ef05661ff1dba8cd7d9a2c5f9e2a5c6bc1e6d993ff218";
+  sha512.doc = "5e06fb85b3398cc65372fc0c82eaae3d807c6c908eedbfa8f4ea593ea6213790c3fe9c5142990a9b7d4c267ed01cd61aef4fb950a0c2b51424b0ef5e1f2aa520";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+srbtiks = {
+  revision = 63308;
+  stripPrefix = 0;
+  sha512.run = "7caf4046990b6708f753ffe9eda73f564fd1d18a97fbb78d72fc0db72e0b8a2af2974e6348ab2f62973805398581c7bacf6b9937fcfffb33057cc3586e4de6cf";
+  sha512.doc = "1b393eddee48395dcd94889c3e5d530c9c4ec736e41f901bf6a66ebb9d4929f363407d026ac9824ae82c852823e9f4d87a618ab4aaa0cc25247c3be03ec00f31";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.0";
+};
+srcltx = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2edad3f8b56fafc034d94a3e3240190a8f4f1a1054c9b81d6dd9fa5426abaec0b29118f7bbec909ffc3534693b8941fd4e44b6670d7dbcb852fa3a056ba63fad";
+  sha512.doc = "1f8428bccf142790a3221d470fb66dcfba40552da0d8aeb9cab62732c5a5ee0af3a565774e29822ebcf0c1e4d7a2bfffc61a0944b762ffbb7ff4e8901a61ab48";
+  sha512.source = "497aa5f6bd5dcbb354a4abf74bf8276898148f42083a0657ac9dfeb4374038b4f8003b3ace3b4d65b2a08334c1cccafda371e8546def7e44f823212c257d42a3";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.6";
+};
+srcredact = {
+  revision = 38710;
+  sha512.run = "9e11ed88fbbfc0130f43fdecd8fb0b3eecbdf50eb33bdca57bd34c860cdfe84dcd560371efba4cb261e65aaf4577306f478d1c43ed89152e7e21fd627eb7328d";
+  sha512.doc = "dba9916acf75e800af1e581b4276e82bfe4c421a500a400773354766b37849568c1f19752a75983374ca41f793903f9776423888215f00376db1e0f5f3b3dbbc";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.0";
+};
+srcredact.binfiles = [
+  "srcredact"
+];
+srdp-mathematik = {
+  revision = 69288;
+  stripPrefix = 0;
+  sha512.run = "168efb5c07ead0dc00c318928d717b2840e162517486ce1351412d7cf5f5cb8807d8016799510c6db48210fe517485fc344eec8f3edafa587cc55d1e6e60a005";
+  sha512.doc = "318b530ec453df35135ea57a514574f71c83fca3f63c85e36405ed20f84a2438951325d9a30bb9c5abf2dbfcb5b2829811720b7031a68b2ecf9d19170e4ec235";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.12.2";
+};
+sseq = {
+  revision = 31585;
+  stripPrefix = 0;
+  sha512.run = "25d3d2af859d8ce83f7449470be02bc4bc77b8ac49c4e10f49fdca51b0a85488f01cbf5f826b07fba12806c932125a35197be2c7bcc330f9b6f51a331fbc77c6";
+  sha512.doc = "3b5516fa412aa19fe8f3d23706b3046b6af698e8307db32cb895fb13eb876032c5c3fc908a69f0e18efc2ac5802a95957246d58248dd05e1fe25409d46a8bd20";
+  sha512.source = "b86247430a144ef73ce271b904096368291a6581de3e1c7627d38751c102256e77d82963d86956d9a9dc8e2fa16aa6b8b0a15dd02b4468cda88f70b19e856711";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.01";
+};
+sslides = {
+  revision = 32293;
+  stripPrefix = 0;
+  sha512.run = "5809b9968b16d35d5f76f185687c683512883942f8ff3537a7dafef3a76e5fb017a4bed36dfd102fb5edb93648148861c78f6f7e93aaea8c5cbc8113c05278a7";
+  sha512.doc = "4a0fde19b43390f80d6d671933ba51b0be854d774d6f35f3e8fb33653ef7784df85871dc4fdec03f2c734e819af6c1098e8be152e0bd42740ec2f4ae53c38f4a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+stack = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "897ca71e1a8531485d9807743e4549a994f5e6e22dbb9a958466d4bfc7fb1b4579af0d7ef701146b8142c394fcbfca70bfdf28779530e487a0ec868c77985c23";
+  sha512.source = "d10c0b9555df5643d266cfcbc51970cb7d606c80053225e4c3891b49f59fd9831c89f8be97d41e3e70b8855defb2af709190631e71a470a061959486162d5ed1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00";
+};
+stackengine = {
+  revision = 60019;
+  stripPrefix = 0;
+  deps = [
+    "listofitems"
+  ];
+  sha512.run = "15327eda5a6eda2b58055efc419ef50b8d8cf8c35283bcc41ee85e354f61ede6efeabf5e75bbb4cd022b95e52109bce1ee2e28fc701c5940723f3b15dd44c75a";
+  sha512.doc = "a0edeaed3766af88d1c5e0508fd285382850bfd072cf4f6fdc1c329c8ca9f5e1eb5fe75357d9a86dd8b2476381747c9a3f7cd7dad0d7c32419bef0d37849928b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.11";
+};
+stage = {
+  revision = 62929;
+  stripPrefix = 0;
+  sha512.run = "8472bc96265ea7fd3be748f147238b6852079ba002f9c7548f5a5e8cb0f34a8155a799635ee5e31b22bb30554795a6fd08e62312b25ce83e727e10f6ccd13f37";
+  sha512.doc = "82df4a8fa154a09cd8231c21f3a450a089796306e8275b17291bfc903ef00b316a1ae0a4175637294ecbed0dd6eeffa7baf134d60352284aa07e0a1a0224c205";
+  sha512.source = "82255aaf0407da34f219f220deb5b12edd5dea55f168a4ae11a5bc5fbc6144fb45d7e79a4d9562405f838955e72efc3a5533269f05b493a48027bd35713ddd65";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+standalone = {
+  revision = 64677;
+  stripPrefix = 0;
+  deps = [
+    "adjustbox"
+    "currfile"
+    "filemod"
+    "gincltex"
+    "xkeyval"
+  ];
+  sha512.run = "8e74a676232ffe9fbe93ee3a1095c0c29cd65bd23f8e4602308d8fc1abfde9025c01e8ba379782d4c79d3349b4298806419735c624436a7b0c93e2170c592efb";
+  sha512.doc = "358fb3b29f4c2d37d03b7d98ee02b35ff8571ffaf30b8d3fa1a9b0f74965ca4b0bcbf2a7172b8771dd3f1240c7dad1acccc7710dad302411dc43a301149597cd";
+  sha512.source = "a29880dfca00e77b19ee828333c72f7c95a26470b8edd5ecea53bae3300868266ad4aa0db2bc6e16f72c14493b43659434ef4880b025b5bccad3305d0ea18b33";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3b";
+};
+stanli = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "2273ba6dc99762490a0cd7af09edd5c4a511ace7317e62874535946bafa69c14f02663afa21fbc54753d1b5d3884858ae93e4790de7dfe4a829e4cc4ecf4e004";
+  sha512.doc = "e4405c8903478ad2b8a5c524666e2fd4aa99dc34dae2d15ace5de7ca4713a6964467f18d4ae2b73c02316bc7d0e51f12e82312544e2e44d50eb3e4ca51671ebc";
+  hasRunfiles = true;
+  license = [ "gpl1Only" "lppl13c" ];
+  version = "3.0";
+};
+starfont = {
+  revision = 19982;
+  stripPrefix = 0;
+  sha512.run = "1f45f97813f5e51b45e1cbd3246b877aad823895a4b087294d0754c560db5796d8b4f9d09972b5c90c4c569db82a2d70bd1c39a9dfe6e1fcc4e0deeceb44f876";
+  sha512.doc = "def94e1e2995e20e282d9319f763ddbc5e152a48c18ba98ef4d168e69a9a6deb5d7d87923a3259553f990f2da73c78929858852c6165acf7a94a6010382f786b";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.2";
+};
+starray = {
+  revision = 69002;
+  stripPrefix = 0;
+  sha512.run = "4ab397ef4f6d8383efca60429971dc48ac6b0001604f0a53540c7f030a567606f0cb8d401569ebbd2727e83ee3a94f5e62680aaff3877a4225326988ac651451";
+  sha512.doc = "9db6912c1149b57a56c8e916525caf122b3d37346642886a12309463b0dbeda45ff719c300dd09460da51518c8a91a99b0e4aa3c80e188f09e167c1bddf31b9a";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "1.5";
+};
+startex = {
+  revision = 35718;
+  stripPrefix = 0;
+  sha512.run = "840a60057867ea8439c0497eb22dbd8ca8c8a2375887d74ea383a8a356d5de34a389db3df5f4c41082683d1108a0f88cb31c25e4c3a56a27e45b8ff5b62da4b5";
+  sha512.doc = "d2076580253889e51a07ebd094daeb10a9ebbf2d9154d288460a84d7b2a581b849d1433a442d8eb911a9d2110e87ae4eb0628567b50eac95cf9c6866d3c34b3f";
+  sha512.source = "af1bdf22db048334823bdd18fd87fd8729c0bb4cb729ee53271f7e0b9ec4cea243840657e1a8ebba61728755d022d37495ef40f9962ce8e203d402b71d2d45cd";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.04";
+};
+statex = {
+  revision = 20306;
+  stripPrefix = 0;
+  sha512.run = "66fb0e346ddd4902ac98a90fb7d0b0193d8c8166aa30774dca1f5b6007a3e19c3b98e25bbc88abc379e199720b6c9a2c73caabbc515db2a54b2a8b437c5b270a";
+  sha512.doc = "9851bb7e2e9af03affa1f4b5750817543be9e985e02d06ca4908ee1ebcf0eea2b8d75a25cefdde3492efc52d86be5bde6fc2f6a99f935c183cf3fc9041ee0e25";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+statex2 = {
+  revision = 23961;
+  stripPrefix = 0;
+  sha512.run = "dc823a25cdc70bac79c69e721feba69883a99e9e0a5b211398ff0682af4fe4bb1c4a7feeaecfc7c12d2df876b8aab6be0cb8868df8b8eaaa10850042615226a7";
+  sha512.doc = "6f0b45577bd4383359dbeb592c3f9e3c1a66d1b2540cf6027ffaa20f8f644316cf2feb0e585f42801b43b529632efdea52fc2c83f2a6d9347cd443da27259646";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+statistics = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "dc3e9516f7bec533adae533d73583871101f26a42a96e6e0afc99f57b2d11797c1850113630b128ead90997fcbacca1bdfc17ed70d4854756cb3a14fa4133d99";
+  sha512.doc = "239231ce3eb6e75450e4eabd722a6fe2149e7825236c2d028a0923ad53ac4bfc2296a5d4d8f80b70bc24276f77f9b6b79f2e33debc03106b5915cacceb4d7040";
+  sha512.source = "a35c628209828b5c595dbab9596a3e25255dd1d61986c8108125e45bbbef7806b9204791d59ee23ced7c486f0a39271b15f0bb6914f06cca379ee6072f31cf97";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "2.2";
+};
+statistik = {
+  revision = 20334;
+  stripPrefix = 0;
+  sha512.run = "2d2455227b5db15235763c4fa677b549380d66f2485d1d53c2c607f96bb4b4a176ae9868419351f691f3efc3117e6e54be3317040f2a6f8d1d105cb86709f86a";
+  sha512.doc = "88b28820b5d2a4a304c26658e27da7d673bf430a6be3ddf46f5eb3103abb7e8d20b03e30b65b88583960f9cf3dbebb9088330621b99e1eb9f2f28c0684638240";
+  sha512.source = "d37bf82f0830e14c500af27146a1ae1a80bf4aee3bb272429c7c2351366e2fdb51b7ba16ab6459b7cbb8abe2d37870b7bcb3fa43582e588c7cbbb889ac1e3859";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.03";
+};
+statmath = {
+  revision = 46925;
+  stripPrefix = 0;
+  sha512.run = "128532a808c4f8cae9ad03d19d9f70673427f9335d298d4840776ecf59a78b0051de64093f00510ef34c61d3e2ab900d4494f800eff8183a4c8451bf90a1424f";
+  sha512.doc = "14754afa159041c359c85d31d8cf3483789b02a7057f59f6772455ff7dfbaaf81e793db3bbdb8d1a67e25de7a00f32c22089e2cc908cb1c2e0abf6a17eceb7fc";
+  sha512.source = "67329fcd533335927638057bdafd76c3db6e49abbc23c63027623397ab35450ba811acf61c5b3ef299077cc92a14df3f0d66076a8f8a2d009ef9e4828ebb533e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+staves = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f6a1aea97a3293ffb514ccc526faa71ea5ea3ab32990da8725cc3ff998d15a2909001976d9705ba13110fbde869001bec2f286e58c05f1fe31f345ecd5882482";
+  sha512.doc = "b839484325cc6d06a407ea685dd705b3616d1e87f22d4a625c20dbc507647b602417a085328f9ba886766ee0fca2516da397c742198569477bc1009271a4db23";
+  sha512.source = "9dbe40efcd1699cc9267b739bc1b182fc0e5dc23ae52d19ea89c1742b815e4ea9b7612e4fb80aeb83f3d9206ab408cb0ca3fcb99c85883fb86f89f3ac26f0b5d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+stdclsdv = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "88d8abc04d10f029a9ce0fe9025497afe3eba3dcc300631fd37baa8174bdec8dff44fbde07599ac8dd6635be27294c359c77178690a4e6c97f41d15f9d2abbd4";
+  sha512.doc = "8321d823ffa159071f66d87d38fa38ba3af03f6c69999a041d765f0fda8549547da4b8eae86efce82109679284dd912f2c5494b5ef6e76c73c467cf4eb87aa2b";
+  sha512.source = "4a9987bcbb557b7923c6c2a5c58dd117fd7b56f58b3df55154514075b68bc59a8928fdfe275dbf328ab2bd5b6608b193ad5ff07b95e7bfd2d79eb632837e5469";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+stdpage = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a3835f211b744dd88e0238a01f0a5f960305f7eb92bbd9e3437474971173e66c84cbee1d5ab3f1aa1097a262a258b79085fd0d86884bcf3acc4017e7885968cc";
+  sha512.doc = "77510670a49db00b185e6b502d07bd85f9ca18bedeed86277c7d51abb582f40c793c665f2ab87435e90380f7f6f740b64c937d2171531a419ccc59bed197b90f";
+  sha512.source = "2973110831807b73409be0082c5aa281b176dbe7174b736cb9703b0c75ee918d1135fdf0513bca5dc48bb996d0067c9201702b76212eb632073f9b0a17b00d55";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "0.6";
+};
+stealcaps = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "483580c347831e7623c75dd087fd6ce57f3af84d0bc28afb5a95f5193ac4e4594f8d9b6a45b8b62e988519208510e0acc7e32f720df3e1f90065e90d06b33900";
+  sha512.doc = "3fea8ed1b6a50a2f5a95da2d9d65e26688886b55bad60e71404af7fb8d83664383e3e0b19cf3e52433ddad75da57a99abd16b6b40a89d620464b5cc4a64347fa";
+  sha512.source = "7dbbb83039cd65e127705d7512cdc4bd4aedbce7837bee7f0372070aed8373dffd4fa0087c34707c0d5c18d3afc72e597e6514d82d390fa3e3ac1c308a1bb637";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+steinmetz = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8ff095645447f9349d2b35ab5ccde72109eddcd85ad3c9de262833320ffcbe94c2fb08df5323c69fc64cdf173ee7193ce2ce887f1c033997455a33f290cf1884";
+  sha512.doc = "e409db74c366c5f49011a6e21355150e3e97d16c1e3a7fcbf06cc8aa0db2c01288dfc60b3c79e539936077e452c40dd601490be8976c57d01f9a5a88a3798093";
+  sha512.source = "c18fde06e32eb4155921bdd7e4dca7ca108139859545c638f562f82deb6feec904a53870c929482504ddf28858ce5ad3c5abf4148b3bfec0193f260af432ebe9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+stellenbosch = {
+  revision = 68039;
+  stripPrefix = 0;
+  sha512.run = "8e368dbba7713051fd9a834223848a2dbce700d9ea8cfa2ccd04a3f2e88cb15d5ab1d881d4107dedc72bfe4e6876e5b7bfbd019cbf5d9d7fa152f4e6343b5aba";
+  sha512.doc = "0996a6932b4a6953cac70299ee655349f6b7723b416e3fef10934de92844de2dc4da42dc5d3c3a3939edb0cca087c2fd28b0d222641197593e9697891891da20";
+  sha512.source = "c1b4c3ac30f5f923a3b0893f4921fed69d99a0fd07f6de7cc728c7e95a2250c1544a5f60ec8331ca912dd5204f273c147492559ce08f6233fd509076db116d0d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "11a";
+};
+stellenbosch-2 = {
+  revision = 68183;
+  stripPrefix = 0;
+  sha512.run = "ff82ad0faba3b5742d1f31d22820cb4998e88630067dbfbdaa7bc01fe4927fc0d8f10afa1713551759048a9166bc6d86cf52561f72bb743197b7e5fbf911cecf";
+  sha512.doc = "9314fac0288fcd9e0e6040b3fe3276d52848693d33dba16af0b2e6f4bb79a2ea3258dd29e5b62bd90b25d8a02e9cf160833750b0aa99b8d09acefb6c8727bad6";
+  sha512.source = "bceed8029e35a4491999fa92d6fd046862895e4214f83fff06fad39cd82105d8c494d78d6a449c374ad678aaf727284e6367ab9136e106dc4266afbf1f01b367";
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+  version = "2.0";
+};
+step = {
+  revision = 57307;
+  stripPrefix = 0;
+  sha512.run = "d1f19415ceeefb879a3b4017fa286e5e5806e193fc75159b515fe21a9a6093c6a95d04e2e2e3c7ee457edb8ad717b88043c58727fb3924cb192e05aec12c5c07";
+  sha512.doc = "bbf49f36bf7588c83e237d58d49ff7453c368cbe7e3a32c431944a2249c0dd75c2c1081d10bc2279e0836384602268ad163ffa3eb7108cd28a6c510a18f001c5";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "2.0.5";
+};
+stepgreek = {
+  revision = 57074;
+  stripPrefix = 0;
+  sha512.run = "c322bb089a887b36c4008502160f0970ff2ca33f05391010adc38c12726b2079085bb1775934597fa1758effee14eda76647b886644971e7c40a451154e446f9";
+  sha512.doc = "c3f4c2b1ea06a012ba4d5f5ca72faa0a6c1b4ae5c132b17bda0b6bb895f34e555724f93cd791fad8c6ff846027dbedd723f874ae1e772de95c64bf54f5fa0265";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "3.0b1";
+};
+stex = {
+  revision = 68569;
+  stripPrefix = 0;
+  sha512.run = "dd17faf11269dc6dc5e6068bb956a36b2af86775e296b15110d0c9b6e1e8b8410b936deb690c7a89d604c012b5643849e8abd317ca67cd872469f863511deeb4";
+  sha512.doc = "0a8571fab8eaefb365c52cdcca251f2582d4581f6243e678db90c2c05789cf55ae077ba3216a9318a1bacc172b259ec444b35d8de1622435d4a02b5611d141c9";
+  sha512.source = "6efe24e0933790ad7c3477e9c1d25c37b585ed0e18ca937326102783362691d92b51486885a3d08c1581110a2e4e9f7182f706ae4896c70f69472e01ef1ddea2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.4.0";
+};
+stickstoo = {
+  revision = 60793;
+  stripPrefix = 0;
+  sha512.run = "aa2ede628a273b4fc0796153d243bf89dce6d3c1b0097b29327bf21836340d11f6e6368f312d76ff726030c05d012c3890f86277ac7eef79d5c5ca579f47cea7";
+  sha512.doc = "e1437dd3b47c8799b4a8a60fcfc215a303f1eb289e0424e51d29fad78c9fb4cc4890896baa77251681d000f2eb08365f9f16a2fbc1c37881b852790257432088";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.035";
+};
+stix = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "7e639f7a534e24afd9d009e224d87c9c2a502cbc77ff882c6dcc9ca0bff512f849d1f3e658dff8badab3843a658171b88ab66d8e731392dc456f9c5f4e032318";
+  sha512.doc = "b01c3dfaa96a6bbcaa83e803514c8090546dcdd54595d7c66a1ac280286f5baa98947fe9d513da3d8baa1e83cdd174443751fc79c07cf66093af4e9044fd9010";
+  sha512.source = "594af38fdb72d632c36cf6ae6165518553b10127281ef8a6ec71f4ced16481f2582a13f1f6f0ee98e900c3147c574647c508f7c9e51afdc57ce68614a394d007";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "1.1.3";
+};
+stix2-otf = {
+  revision = 58735;
+  stripPrefix = 0;
+  sha512.run = "b966a7d18a471f13b5eb85115566ef4aa7c894b142561a46144e5cda6a0198dfcd83b776d19d605cffe482d07a4ac9d80acde7879892381e1a266e7af4f9f72e";
+  sha512.doc = "15e370d490eb01022877ce01cb8e9954af89553bd0cb2b404820c8744271d13ea32c75d2971abed4cc64a692184fb0fe369bc97bf870524599b2011fec3bfec2";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "2.12";
+};
+stix2-type1 = {
+  revision = 57448;
+  stripPrefix = 0;
+  sha512.run = "802ea99ccb3b8e2e727537113843846dd6629f722508219be88cddd9e7f1e6f67a1bf48ae3a61c51991ec91ba5c543467d3aaba64116e4be08707def58c70f34";
+  sha512.doc = "b4f1e6e8962fd77ecaf0df94b156783d9f77c07231e6cc258e04c26a8190dcd0a3175c71bd3a1187ad6cc083595ee80925712f12e0f838c474ac93701b47401e";
+  sha512.source = "5963bee636210eb89d31ea8d5954468fe9959429d516fb988c8ceab3c591f53b47a5a77df8f10d8e20f136adbf2fe23f546fa62b1768db7164ed74fcf706a228";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "2.0.2";
+};
+stmaryrd = {
+  revision = 22027;
+  stripPrefix = 0;
+  sha512.run = "8abe58b84fff2f4fd6846b6c267f3b245fb1dfc2f38d0db54ce7cd9d456abd07627247613073f09dcf7e11e3e9c5940d8ff657327232ce638abc6babcc5b3d77";
+  sha512.doc = "caf883d1c5021b52d6471c4c2145e708ac3c05c8944eaae621a3ea7b602b683ba2ef2bc0052f9caf67adc1415e7db02b5b55d3642ed82727a926ec193dd984f4";
+  sha512.source = "ebefe2836daed0dd4db99517af0f40c73f0a7b19453d5415c80ae6cf723f4ec4e4ae6f9700a21722b4c0d9b8507c58a596697017893716111b46222f54676aa2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+storebox = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "8f414a7bef1e3b2be8c526e67dcec5a5878430891323ad5c4820e0b304fde35e9eb8ca69e2d1c6dca623387220114f7371ff54d2ba4297b8e7d923354d6e5ea5";
+  sha512.doc = "09b0b2914d8cd87b6cf070d012a5e9581a399cdee4cf73e38b5f53dae613b3957a8fb8e0a2df6ec2953038ca984e3800b7ebe839ca01af556c655ec5e27f3065";
+  sha512.source = "a48bd8d8d3fcca367265706cccf14e5b8e90a9d74528754ce96436ac1925457a78e5d1fbd73a6ebae998121b6da27595b573f15a46c573f1aae06168e0100836";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3a";
+};
+storecmd = {
+  revision = 24431;
+  stripPrefix = 0;
+  sha512.run = "1987e3cffafe007d9f3cb9e0d53fcc648eca40140f5188dcb0202a0916296651c1ab02fc589339fc51999b56bfa4a06b29701aa598ec03f51d7b1ee66ecfde7f";
+  sha512.doc = "feacd83403672380cc2cfe90ada2704f98bef63e905740f8f8d50767f86ddf95478efc38fb38fccadad172f27db56045f50a6af4a487f0c5cd2b6ebb5e7666f7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.2";
+};
+strands = {
+  revision = 59906;
+  stripPrefix = 0;
+  sha512.run = "bc902fcd06413468d2dd3f23aa774824602a910749bc2b2cc8d4c24decc184a088190422c0f2ea58995fe627f855f6fa6e0b5ad0490b1084fdd122abebb77cef";
+  sha512.doc = "95cbfbe360a515fa94d0222eaaffc2cb5920a8a2f5b0ca0a052f29f7237b58214c8f39288d08db88e97ba0694f3ac6793c7c8c90d47295841e009db46b037b91";
+  sha512.source = "7e95d4132e4d1c4bb319d3ae2f4ddb10b65ca7b30d2ba6942274e0169a8d69f39d7d552c7470adadf006ee0725bbc0862a1c1190f425643bba108542bd8e4b75";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+stricttex = {
+  revision = 56320;
+  stripPrefix = 0;
+  sha512.run = "5e823dde4f0b902f59327be2f41dabbe19f569d5d05941deda33b44664b736c9ec687e98a04635c6f2af2a0f894ad162bcc4b866e52b88e5db55228d4a35538a";
+  sha512.doc = "9853efc6722d028c1ccbd90bdba2b4045c45b384e7fef1949ab51b7d2e6d29f1ea2c55c3a4a580a42faae9e03d38de258528af3e37c78f61ef8704798be5ccb4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2beta";
+};
+string-diagrams = {
+  revision = 67363;
+  stripPrefix = 0;
+  sha512.run = "9f05bf09bb74ab07ecf1a4e6aa1bb16db06961b1caf87c73f48fe33e8174081c38eab30b0249e219a936499a533d441b092e642c88a996193900fb0000708c35";
+  sha512.doc = "3c692dbd5835abd3bb87cdc8b3abbfdcc63d233cd3275d92d5073772979349c759c391f254bab3f670d65ebb55b50b4d7024b748b538349428033971beb09bbc";
+  sha512.source = "632a1fa22b3bef38b708169aecf1b9c3b9bdcf4cd07843a2b12893a996a98d41d397e3614e242d6021a385dde4e563aaa011e38400c216e76bf221548996d2cb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.1";
+};
+stringenc = {
+  revision = 52982;
+  stripPrefix = 0;
+  sha512.run = "a776ddb2378bea0880d7c17e1a87db5f66645c5856243e49de1c56bc427213098afbca34773a44ad955a0014b969c59454d3a0c0ec371d213481668f5f784ca4";
+  sha512.doc = "a4f182559d37e45ca8b6c50656d2d520e3f0bf1ab63dc6477cd6e3abe6cbb5c4b89d779c380997b167019aae6fb12ae68d5fe37ea0c08945e3383f5d9905bf31";
+  sha512.source = "3febbaa990eb691af640df745f36e289a7f2bfe6f52259d6693c6c9991d719e79edbd14b35c1eba5a9033b203531fceb4164303bd6a3dbab7238b814bdb5eda6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.12";
+};
+stringstrings = {
+  revision = 57097;
+  stripPrefix = 0;
+  sha512.run = "fbc29bbf65e7d4a1fd367b03490f73bf44349427f6c1a7e826135ee9092c9b592a4cf23454919e0bcc74dc59d3a6ad072dea16096e4850780ff295dc3caacc48";
+  sha512.doc = "1779de4af914b69ab258bc1f69a807c12f750e5919936c78ace4496f86200bfc4c3146dffbb27ac5977c2e8d41ec8d0139cf2a2560ba7c627dacd70b34cc69ea";
+  sha512.source = "94cf26d431d3638f769166c999e3dff156bd37e02a7099129f1259b7259be95896b694a64fea657aefce22f3a1e98ec2bbbf0f6f85171ccf977068ddafbb8078";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.24";
+};
+structmech = {
+  revision = 66724;
+  stripPrefix = 0;
+  sha512.run = "a92eadf53e3bad0a1e54246b75b10c99d84dc509ea31cc9fb30ed5541e3d757afcb60aab7fbb7515be335a2caa2f29d7fc211b561f073e25a8a1cdbcf90d2d5f";
+  sha512.doc = "e3ee8640eb6650f1cd18bc111d0e4f9b6e3a8cc8ac480bc05ae8251b0e620223aedbf59a54e16953edfd4faad8b05c78a51d5756f7b8660c612b5eaa32defeca";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.2";
+};
+struktex = {
+  revision = 47931;
+  stripPrefix = 0;
+  sha512.run = "3d81817eac5cc8b8bd468537406db6a26fecdaad1db269c2ceed582cae84fc2b549eaf527d4c356be7d4f2f16f9db4746251e9b69db0f0fc3cc8acd9f39d1f50";
+  sha512.doc = "261a9f7ef5036bc8eebb87ba503b604b158647e82e88844758be506ac5d389103661f681689a836c0048529446bad0d6537a6fc6ba273dd2ed29abee40336360";
+  sha512.source = "98b06394519aafc81a565c7b12fb1ad86856ca447cb5ccae14aacc95bded9663a72bea301e7f5998eb9cc2a6358c978881736e564c3672eef456c6c44efcce0c";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.3c-0-g7d3fc5b";
+};
+sttools = {
+  revision = 60736;
+  stripPrefix = 0;
+  sha512.run = "4e52219c4d3d668dd52d9a1e8e0de4f547871efb9f5515851b44e1c968cd564080c87c631d8cb53c76cdcfb8df884af0e9ea1492228929098a390b6184f5ed37";
+  sha512.doc = "c07922c52f57ffeeb57a9bf3b444e251f01f859f2218933889112b86d9dadc5791d7d926091eb3a2753a6ebebe439bc7037ef857b6d19a1e6e7b516fe879f4d4";
+  sha512.source = "65616cdefbe3d5b53f7f888412f8ada24860d33c2cd5babff26a3ae71c6c56a4d1a5eb5dd355d557c8fd947db82401746a4928a16587a88c3dfcc19f712f5e59";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+stubs = {
+  revision = 69128;
+  stripPrefix = 0;
+  sha512.run = "fb8276d461883c289329a74f1ba3bba5e64acaf199f7739b013f32a4fd84ab5e2d94d73482a3b70c64e156ff9332b3c81bcfa74854edcf6cc3fd6ac89df595ac";
+  sha512.doc = "b2822ecb49ccd9c707cf731490c628a75b278848dcec31283c782ba72a12da8e8b7282ddabe38939e5b0c01afdd222be6991618d4cf1b73a2e06b875fab4f82d";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.1.1";
+};
+studenthandouts = {
+  revision = 43516;
+  stripPrefix = 0;
+  sha512.run = "2a7d8cab28b58a26633fec5845498a2987763f61b896fb747d97521b569786f114d80979956a9b9c2b94b61f01677101248a1a4c1735415703398b57306b6c15";
+  sha512.doc = "10e3ff558cd5c544d82a61bc67be8b7ed0c9ec9b01550bd3d1c9d3265d1de7153832983593c0be6f5a990d33063b065b397e4ab6b7ed12b0ea79e9e49e0a68f6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+sty2dtx = {
+  revision = 64967;
+  sha512.run = "f95ad4f6260657ce329c10ae1306e5ec50965c2766c3c28f5a6dd77f4884637c36ecfae28b7853dfaf4e2e5bc256713abe4c8b3525e194fed1eccdd1ea24e1ac";
+  sha512.doc = "1bc66506350b07341c8c4b858c6b1c637d9f0bf48323714ee7dedd701faf20e3cadb318f56bfb1a05f4fcaf84cdd6e9db18299801a69e0359937d7852ac6a824";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "2.4";
+};
+sty2dtx.binfiles = [
+  "sty2dtx"
+];
+styledcmd = {
+  revision = 65262;
+  stripPrefix = 0;
+  sha512.run = "7111296b41df8849fcc01820dc10468a05597d5e7db5f0e45ac4bebc2c6a66dceb3042d645b51dd65fc2cf4987fc38c724a539f292a95c0f552e374128649830";
+  sha512.doc = "c85d0fbec0e9927c29f1684f715b2c6a9897ad6ea41580b09d9af4cab293bfa7f16b65d1439706ed85282698ab245112050cc212813cb2835666380802ab7a79";
+  sha512.source = "e1bec216d87d2e1649b9206dc2facb99486c6d1f2bcddcebd9c1dd9db9f2551c3043493df36bb64367a6e71066f16fb0ab3a48979f6554482a824cd8a83e3597";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "2.0";
+};
+suanpan = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a9fd27694ea7491321580ee325f8b151bbcfcf6da14ecce85b6d4e68b09cdf125c810a5170aacc966835fad8f2aaefd78916920cc3e896cad7738d026450ed83";
+  sha512.doc = "667d3c5590468170acfded106a2a468d9abe7b4b34a9b56d153d401a60e8f24bce99a4f6c5f2761572a42b85c7faae5741ee5b6f22c3f1004e6d6685463b9350";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+subdepth = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7328742873abc42d2b9916161ca43e339e03ac1fd34479e93d9eccc98a065e95cffbc920395dd6f90d90989d29840cbdf2ca87dd1d0b293dfae66abbdc6e2d3a";
+  sha512.doc = "6bda8b822a4f1ac2a181ce34f739449bfb976a4450a54589e0cb4a64a0f1ff358a469fc88a37639104f731671ec474088968ab3dc95552a2d92a073d91857668";
+  sha512.source = "6a63a2d62dbc47d41e78004792e5c9e6ae7b2f3c435e95bc9969bbce109293a8257d4913a5b1959d95163c9aaae557daad53e950c5313faafbd8fb8d0de2c367";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+subdocs = {
+  revision = 51480;
+  stripPrefix = 0;
+  sha512.run = "a38c6e9bad66582914ad4acdae213e37c2bd5658d5e16482a1700f5869762b489f85b61fdb70c04578319f2772c974267b7c9a4e302c34df87f3a01128caf949";
+  sha512.doc = "46bde174536e96bb78ba40990ae3b4b8cc1fe2ef26803b193afe2fccfc05bdb6644a548a712522596786847a8fe6071a52599a17ea52134bbed2e5495bbc401e";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1";
+};
+subeqn = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7d04ceeb8f75cae074f9bff3e8d0aac4b529d199343c59fae7715d1023aebc3cbf2b45614e0d5ef0a95ff9bca4ff9e8318c4ddd86ceaec42d271f8c0f71282cb";
+  sha512.doc = "09f902bf3b4c8e2e1f9d805102c170b2bf2f4de067cdd590b22fde6b58f4e3042d0b14d362e0af587f9fff9e2c8789bb8af4b329bbfd721ca7dce8af01612c50";
+  sha512.source = "f1f7229f058a7dd80a67f18692fad36601015ad6bd7994775b573193d74c0ff7f175397ad446384cb74b3797f9f17605ce2d381327249ab9e36ae0aab756d09d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0b";
+};
+subeqnarray = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "846d822661b903328ee7b199df6bd7fe5b606c13a185cbb6e6fcccf3b009f2b94396bfc3f9e4b8eb5052688536867dee06c6b9571e051d477415e1ac999fc162";
+  sha512.doc = "9f47b8fb760b51a87ce5f9728e9ff76dbbc10ae009e04c9bc0c91133941e5b528e09e5034156b1dc5ff9a0c74446b548bb69c389486e68a4b8a79a7c9ed1a7f7";
+  sha512.source = "f41086ca65c7821167acada640a11768da429158b4da7caa398db254be156dfb291281b1e2f4f4f58f04c0c8041c45efd2072ddc40db8673808b83b3ca09a93f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1c";
+};
+subfig = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ec7ae149b99fecae3b4ee7cf600811dcec9bc44eac762b5480c6df48b725db3c08a87922edb7a524d7d2b748bf7d25482e155fd40080cea9ac62f2575bf61d15";
+  sha512.doc = "8cb67139bc1063fc4d5482b51f1c3ad690c85d4f7e022a99059a7b20176bbdc97a44af23756fa220b3f7f7afdf039c4a7b672700012e96b98ee25ebb9e5c99b5";
+  sha512.source = "44e7113550dcac4b14ddab03ad5ba4bc86cb3a4dcb14a31f73e5caf0b02f9f3bd56fd9d18ddae002a981e9680bc6fae5850ed07ee94e60d858647136cf9243eb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+subfigmat = {
+  revision = 20308;
+  stripPrefix = 0;
+  sha512.run = "d607d2e79b3b0d6e99c8577daa577aa25a0a7d9aecc00c8b7026ef3a923b0e2815837d257599dcfdb1e5320305f492bf17845f5c6cd487b476e789c5140e01c3";
+  sha512.doc = "6cfbc274a466796ed0478e9c43cf68d51bbf5379691ea6848968c48cabcfd54525075727463905e48b64946df9822cd10903c562a2f7d546b3d2cd2e9ef11db4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+subfigure = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d4ca2ef4c52c84ddda85ee95328c9d3e97ef601db4f08ea508bc53393e3b2722224273ac63f749d6a922c7b42787e932d7f60ed3ceb03667fcf8fc591d4ac97f";
+  sha512.doc = "46c2950db73fb557e81887f605b866827b6ae7e027a684f0d24cb3f9d5962a3d83aad97b84e61617381af8d0949057df17ef45d629e992e51c80bce3474cc742";
+  sha512.source = "1295290b8c5cc814f6cbadc2be418413d35a0a1cfd313a69b05fc8e5e47ecf5da0cbba73b81f499f0085a55b7e783b9bd82b29ce1072792fa34e422596a117c7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1.5";
+};
+subfiles = {
+  revision = 56977;
+  stripPrefix = 0;
+  deps = [
+    "import"
+  ];
+  sha512.run = "8f842b0debcae3110f0a4b2f59047cd55c2726d128bf3e159f2745a4b8a645c3f8471fe218ca34c32f2b35d42d1c5023a25f09fc3bf0c1a4f0c33197776b1cec";
+  sha512.doc = "f54f52c5cee01b7ae8e01bff5a4d828b5c6708c31f2cf40d7e83c8a91c4c597945695dd7062b6088d3f91f7a9858e3227c850d658ae7a7bf94392e00e3eaf9c7";
+  sha512.source = "2623a0ec244722c1e3194d9ff1237305c1b7bf8c3baf6f60edd69b165bbd5ea83fb73ad23bf9aac1937b4ecf1059754e798eb2c97f7bab5d550fabbe84b752c0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+subfloat = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "d5bd48fe7634ef6deec540595fd23aea21d95d7c68d053bc65eeebc950e35064add73e5b81e92d3a3d4a4dc938448d9c9a27bd0f1a625e4a9f425d4e2d55f237";
+  sha512.doc = "400b9b272e51cd9fa7370f1cf7cb354dc1235fc41d57fb07061dd08b44e06cfc17d38c1be3fd5bafb5ed6bd0404660c46c9bbbfd2fb852297f283be85424c088";
+  sha512.source = "e72b55996a07665b1deb038c5924e7a71c7b7aea761a1420d4c38d64c1ee98b8663b4a996ae39a869cb12b6ef99efd09c989f937bee18f05a1eba57856dc686f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.14";
+};
+substances = {
+  revision = 40989;
+  stripPrefix = 0;
+  sha512.run = "c7e3d72a506242b79e99c531bc550c81081d59c5a850af52ca3b86054a5eae42f9f1ac5c7808f54c404bee829f4cafaa1807c46ac7b994cd0f88ade1aec94c5a";
+  sha512.doc = "b2900ddbd6f8618522db171c5fb8b35ce5e5ab6b51fde609a18e6b5656437709772dba683767ad23ce955463a869c483e5e3fe81e1f9b5f7523f4f0cdb87a4d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2a";
+};
+substr = {
+  revision = 16117;
+  stripPrefix = 0;
+  sha512.run = "979aaff088f7bd521e2af3f008fd6fb9dc908ec7c9f3963ab7b6338ece92b2a7eebbf9b4974ab87f73cc71ecf7ba92c25d22be8d1fdd297d066da72f61ad1d4f";
+  sha512.doc = "97adaaa986a8540364cd6901448eb47bfbe9d53842f412100696621c55d2209807d0d527c8126d9df7b5b38b0ba2f0598e79a467934d9069fe96a2d9125b701f";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.2";
+};
+subsupscripts = {
+  revision = 16080;
+  stripPrefix = 0;
+  sha512.run = "a1578fb66e6068955c4aa69b8ccb951e79fe55616ceaac8d5f01b62d8c6e862d816e0e1ff6c387bad8b8416a3993699872b0ee3df4f432a733ded0eaa60424fe";
+  sha512.doc = "b1424b69633b1c09fde52a38c2e50b6c744671292875688b295586bfcd340283c03a122c83298e8be9bf714201db35f0000c41720a6db49cc09591ae69a3d176";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+subtext = {
+  revision = 51273;
+  stripPrefix = 0;
+  sha512.run = "0ab32328d346bddddd37094ec086727222bd386bd24c1aa164aaa0cba85d60cf6be2aa26d64bd0bcf63f49b0188e79a7212e8b98d2d7400f828ccf10f60272f3";
+  sha512.doc = "cd3fdf312f2bd7d30c3aee67309220e8e75d20ea69ffcb17106812f0423791dbeb26a8ddd3621cd48e6b3cab5c910083f49aa18b439d9f8114c08002cdf8826b";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.1";
+};
+sudoku = {
+  revision = 67189;
+  stripPrefix = 0;
+  sha512.run = "0cd82916142b881bc4ea7fb9885de56d3ee724fee637eab5f1bc6bdc6891360680132cb2c3d52028cc0ea9670efdaa4666d59a853ac3f850f2642954962de22a";
+  sha512.doc = "6b44d22aa120727f8a7a55adac7bf71eb1eb57ea1f33d597f06923bbb50d88c088d431f463951c3db27c2c1d68024b44992e47c83eddce98ffbda054cf98a4e1";
+  sha512.source = "eda0ed193fba97a2f0ee2d435d62110acbc054ca486a580fcf0a79f3c094d6e83b4a5732fffaf237978abd566794ca6f3be56f70a34a4cac05c867e9213cf1dc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+sudokubundle = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "da5c7954dda7fb8076d9b2fbd8a379e416a162ce0039a0566799bba0ddea975f3b951b7615cf50819440b46c419277a080b6e1c3c514e73483b4f81420a4b6d4";
+  sha512.doc = "6878ae9a2734e5efb51f04fe24cc30546a2c812ccfd5ae62cbbbc94496a081b03f7d2bfcfa6c7edd610cd6eccd741c3dcc3441a6d437eea5f310865dd13d30f9";
+  sha512.source = "00b0b27e9b97dcca17113d8f314480b2617d18603bf022631f6553f2b8a7c4e7d30e1718cfe4ce1ede7996d7ebe7905d25480c6516df4b3df65403346c050beb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+suftesi = {
+  revision = 68204;
+  stripPrefix = 0;
+  sha512.run = "627d002ed932ed3f55382b50e4f19c2e98284602bf3095f352f1ad3120f2586b7ebf12653279a98c794e34b97829bf30bea4fbcd06c4657c94cec96be233b3b7";
+  sha512.doc = "af2b5317858ab9d19723c668fc6af548fb4bac805cca26e7dac31872e54c35c768c228763681db34722f2a1c4222e2f1fa45e5263b183ddd51e848e643b7f47b";
+  sha512.source = "298a0a6a4d627d662c4a8ca6dc7312238dd36dd546c768fc16402fa6f630a224884d8223c30b69abd4f28ae7a19d02870b01ca71608ff37dc548ec3d5f854c95";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2.1";
+};
+sugconf = {
+  revision = 58752;
+  stripPrefix = 0;
+  sha512.run = "db7082941e64a24fd7b04fd48dae2b78d67314f7483256278a8d8eceb5aeea77e24bea7e7ebb9e3742fed7cbb4add6a5d97281819ccf307b102b8265d00723f6";
+  sha512.doc = "4a64c9ff5c9350b80601052093baf0d9ebddf24de17c9ded5cffb299b94cb6b4e6f0beb03c058b8a7a4c4f7cfea118cf8e95b797881ad9f77e879b228ecc2165";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+superiors = {
+  revision = 69387;
+  stripPrefix = 0;
+  sha512.run = "50c352d7ee3b267ff3c25f93d5ad9d32a80f0f09cb8e802f6426e9d415ebfd8a54d3d07425c2908c75f328309e4d21173feb768c63e931658d151274ef6f953e";
+  sha512.doc = "da35e722be66689020ec2052f4e096502ad63121fcb3a55ffdb724d1b557122a401e7bfa8c4c0ea2c6881b0138bd155b1e5baa7886c2e0c7d1b693e56c9e7dc6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+supertabular = {
+  revision = 53658;
+  stripPrefix = 0;
+  sha512.run = "68ff94c82b9986983b0a8b0c1e60301067aa20c92c2576e6d0a9b9060d4db48e2770334ae941b6b7fd1a4914098e2125f324e0d5284da52b523a7616552604be";
+  sha512.doc = "0a36abcb782ea20b3c45d5c42a55fb41c04c3707c9c5b0166f90b7494032376d6756f827f1293cf998b56a84192aed36b6224e4abe14646557d130427f3bb63d";
+  sha512.source = "1c84cbac59404c9f2e1adca379d24168ee4a7f1639110c3c8c5031a17025efb06608a9e8e703395727d1cc4ddb8de87932af14da71475e16d850b78fd5de0b52";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.1g";
+};
+suppose = {
+  revision = 59281;
+  stripPrefix = 0;
+  sha512.run = "b78fab6e7784cec1ad8c44c0ea6b2dabf7aeed133ae5dbf9c8044a5fd8af8509b68a1fb615a8bc33459676e4eb6f6d13f097cd689c35acf37beca4750ee09c36";
+  sha512.doc = "c59de255274f2a8fb961b57e4c59e7020f990b15a54ef008b251380b63d3564cfab7ce434a3782d3f467561557eca9884745e12f3886416967ad26b0a95b1f5a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.2";
+};
+susy = {
+  revision = 19440;
+  stripPrefix = 0;
+  sha512.run = "406a172dfb787c833d8d71e74cde627fad5dc168a1be7a71c4d0006e2f0a6625738ec11f99c9215af6973b101e17abe8eb8355206bdaa18ab3fa6328d7ea42bd";
+  sha512.doc = "f802ccdadb5ac2bd96ff27396b020798ac023889f751bc3a286392f62341ee6ac50486899f4e633b90b85320f1bbb679dfba98aa3746d01f0220f07cf65549f6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+svg = {
+  revision = 57010;
+  stripPrefix = 0;
+  sha512.run = "fd2c051969ea85b2e5c2818292128044038003456f8019efc3c6decb7e811f3eeeed6f3505cb661ee2b4768fa7715f5b3aff4583124d6cc99fef5c5f6a2fed77";
+  sha512.doc = "84f35fd26786e57a8eea08af996d6edc93116529ab364e2b2e23ea6826748435d8487264438f7ff6b44b6d6975e0f18b1f27599e0e554b3d664055296e8fb0d7";
+  sha512.source = "834958e4f8a0d8102ff88af0c499455c9bdcf61b0bd2795e25a07507c55ad6e7a5bcd131bbac48e463bd93b4bf49dee9aebe46a8999d75c24218a332814d5974";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.02k";
+};
+svg-inkscape = {
+  revision = 32199;
+  stripPrefix = 0;
+  sha512.run = "e1708206e6fe85271e729ee8c9bf952f45af662a54ad2e816b449fed263fefd8527529ea777b85a50f736d0ec7875afcb3059ed2ac81afd45c54ccdc687c3979";
+  sha512.doc = "609d1a7d2256461a749c3a74ac5dffdb7efec999faa15315872f4e61884933cf47c380bfd8eba53de491494cb498a45ba263dc889fa0fd337c48f82842fa6bdd";
+  license = [ "lppl13c" ];
+};
+svgcolor = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "617a880e8e94e781819a8ab3a169325e667a18afd83a10f070a56dd9f1813153d8f52cbc3322c264ee249c0e70080421a9e1debf844ecbc7ea6c2368a6ac67e2";
+  sha512.doc = "02a28da03f72cd85f30f73282558bd3aa05a82318cc90f56af6ff8ae29e1f205d3c05553598b88ea13206b4d54f64ca36d5a6a8d6f8913e08c185c7bce6011ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+svn = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "a64768b2c5931ba6b9e0b910d7bdc1473a7dbc01a70e41fbda46b4064ca1c41592f3d704496199e41ff27ac4d0ccfad56d9d89e536176010e35c1c8f56312454";
+  sha512.doc = "123ce3eda16e4a1c44a85c6d2ef2bf4e5f6b9e9d939cf66eee52ad1326f06b35c457f4df054956dc16c169031909f2ea93aca380d2ba080f6049795a841dc34e";
+  sha512.source = "0033fe1be2ede6984cbc0397c20187cc03520b5d893f7ae239bb688354d7198c4e96cfed09dcdffe7160769f6dafc9995d77f8f0f9def753048d4ecb8231ee69";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "43";
+};
+svn-multi = {
+  revision = 64967;
+  sha512.run = "cb2b1c9a95445b1b2cae4b4f8b7d22a417c766b8158a229712a2ecf8b5b2c731c4c4ee348e626a734406487327d7e0288df458329d1231aaa9c63c1283636930";
+  sha512.doc = "6fb5e19bc88ab89fb7363587121374f08ebac0d3bc2868e27c43a8deb986cb5b1e82a665adfa56810ff70a49104007b056aefbb3e55cb821e0039eef0bf941eb";
+  sha512.source = "b50a0401ac6e0f056fc029ae78ffd8cd4e64bbf677b654c0462d1d160d8f4b2a2895594b8f591fe6aa4acab0c01aa5633af9d9f7a24fbd6f177d2a717cd0f2a4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4d";
+};
+svn-multi.binfiles = [
+  "svn-multi"
+];
+svn-prov = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "319bd5de2870a3c8237aa5013f7807bf3c2c5ef7fa4618a400cd5ab60ec8cb88b94510b0129862c5d98a11e2241f9790f8c84473447df8e21cbe711d52268e98";
+  sha512.doc = "01cfb48533e07065f477724efe4c3fcff13691da0393a0d8a9dc9cf4b5d3e3953ce233f8331c1e5857c2259ac6dd7e4859793bb194d750f35ecf3723dd7b4b0d";
+  sha512.source = "1e0206e1506082c8ca5ece1e66b9c85650b986e92e5906a96e7156964f3004af2d008815f86c609eba48f02a0750403fa3860ef2a3bc14689140c8826cb3881b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1862";
+};
+svninfo = {
+  revision = 62157;
+  stripPrefix = 0;
+  sha512.run = "ca2e0a3d0a5f4ab6950d5995b39f785ba071294134d947a47ca3e1f7e0bedc69398f9d0fc2162f349a635aa19ce8c963ec7c88d4bed2100d8f3da05219235655";
+  sha512.doc = "aa4bd06d31bad0a2441623b80f52702d67fdef03912b6f96058f3a89d00f4601cc4bae76a24f49540169ad30883177d038ddc7dedabd8d643b59df5c94be4a65";
+  sha512.source = "f9f65dcc56ae6b9cf2f5cd9dac27e3760f12428bee623e70018a767dbbf0b919178994349051893e52a04de75b8455b1c218b0f779f4a0ae4930480ba0ed24d1";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "0.7.4";
+};
+svrsymbols = {
+  revision = 50019;
+  stripPrefix = 0;
+  sha512.run = "1fadd5259d527daf316502aae6072865b9c6e2efc1ab92f4bc0c3d1070ca4dd863b8f7366c9e6909b7885858c1745cd723003a9f4bd28e8208889da2c21f18d3";
+  sha512.doc = "6ff7b9c1efa4b59c453b42fd37dc66e3c79912ff0bf9765b2745fd0cd946a4cfc4a063fc943d1b5919368f8a5809eef5cb7f3a4bf3b6cbdf8200f42180d21f92";
+  sha512.source = "916ca0f14ff1b9ae99fc609c41fa655eef39bb053ad39274dbe43167dbeed06ebbb9990cde6c040fcbf9b432b4ff89651195df094aa9c35bc172e7932917148d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0b";
+};
+swebib = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c34174a73f2264bd0963bc6932f6ce840a84d3c48ec9aeae9f7f92ce25ce5f55dc2e4c05d1eaee54c18b4c0ef9adcf494310cdf0a3e1d73031910b75a6db30c8";
+  sha512.doc = "a3db201554a0b828cfc72d47a22b777fd7b44b25c361a4d8f032cc62658780628e83f6eabfbf342b867fda335c1ddc228347f5fc66651193c8229e0bc6e46f67";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+swfigure = {
+  revision = 63255;
+  stripPrefix = 0;
+  sha512.run = "0cc77bbb379aca7561a6cff50be46dc43a1e064d6d4ea5f5b2115dc5907ceabb012d951c7dc5ee33bf0c8e824eb51a3eac54cd1b31e4dd974d226eb4bdb5ae52";
+  sha512.doc = "64f3f91acb388322ab4ea30d4f0c65e029b1c32755e7769d7d4388d4971f518459106acbde1b4c4b0cd3d4796769289aecaac34be32383778d913cc628d9f57a";
+  sha512.source = "02a5c33997f249a3f41065af3187516b27621c65f2b2ec82020b90b721221a2cc4c52e9b8ed65ae6d89559fbceb51da9f7eef00514bce7040822b280c3d6e505";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9.20";
+};
+swimgraf = {
+  revision = 25446;
+  stripPrefix = 0;
+  sha512.run = "d4bd2097892db6467ae1c80032e4ff5f39e3da81f45ecf472d350297687609ff37b8498de9e44405ad9c7dd7b483599c844672233d289c6cc4ed1e2b9e2bb842";
+  sha512.doc = "2394080a393e2a0cc8e8299dc4debbcc7548186a714454c87662c22a371308c7e8e6705c9dcbf6eca632f2f80788a733f9d5a9f3fddb2f46167fd50654c5bcdc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+swrule = {
+  revision = 54267;
+  stripPrefix = 0;
+  sha512.run = "fbb2a8fd060e41340a876595310b54d069cf808d4e2eacba0d913732fe45a3cea698c1e6e229dd152666f7b509eca424d17378c74ad14edd0d5f08ec85c6c65a";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+swungdash = {
+  revision = 64204;
+  stripPrefix = 0;
+  sha512.run = "fbfef096e662d2987dd9e4989fad28a93387722b29bf7974e47cb3a5c13b535df63113cfab6883d2c3c98cfb4b3272ad1de6c961e2818dab5e59661ca5d14630";
+  sha512.doc = "6bb0c45931d2d028d5b337b7295e5645fb709eee6c30c3cf3bc539c7142cd8fa4a9543ce70a54cec9b12e7cb565366df674da7b85d32a24839d8bdd0d1cdee10";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+syllogism = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6f74e300794afa114da0f498bf70a389500bd2346bd0bd3d9ecf0f30d6167bfc9ea094024039775c649f5feeaa4b62384072ff26fc0c0fb426634912f440999a";
+  sha512.doc = "1d2f3cfb453a4964b0e64a486a7c466731fec93e3a4210b216ebe9bc311923f055bbb903c26b5177c34a16a343e5f4e1a0643c7f6bf635dc0762182185f6e362";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+symbats3 = {
+  revision = 63833;
+  stripPrefix = 0;
+  sha512.run = "bf967082ea372ad1c752b6f4bc4201c0617390f23517cfc00fd5fc802d6e728f4ef81c1787fa86bd4aac4f8adeff89127b6bf1615b70f4733bd8d5b203b8a033";
+  sha512.doc = "e7a1a3f915000ad773f47a5529fc0aa97fa6dc2a56feefb8ae55815580301704a3c49eb7ae92b7f1248fd7115d7d55a54a6f2b38f05825be57b1e155ab8997ee";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+symbol = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "1a2d3239cf7c9910b19db527d5c2b43af2b399114b3186505e790a139ae5ef82c2ff1ecd5adc858a46febaf2e46e028037ba65bd5b84fec0737edd89d5061c09";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+sympycalc = {
+  revision = 67087;
+  stripPrefix = 0;
+  sha512.run = "98c46fc7727bbb8fdda4038f56482d5fbf1c88e3e869b5865f45392dfbeb5be545f754e6ba109b55e66c96d6cf733ac97b472edbd38e3c21c2f937ac9136f19f";
+  sha512.doc = "52d163772f25442b32a5ac240d15ab2d606e4907c79682cd37ff45389beb41fc2eaefec9b85d0736e3490d0f4cd1d60a42091cf24aba1ede8aded1cf7a786a0a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+sympytexpackage = {
+  revision = 57090;
+  stripPrefix = 0;
+  sha512.run = "9a1fa177703dbed088861ff47e5b53f3c0f433abe15d471d181368c52e0cdae7350090ce5cb3c25d4ca816d1132eb009359977ada3f3c0b5c3b80bc0873f8110";
+  sha512.doc = "0013c9c1e21f70e36e6b30f12d777f9f78b727ee1beb2f893133248fffb75f0bc4523c0787c0e292f197ce1c01b5f37b34c33ae97ed713bd900848657d803c59";
+  sha512.source = "45df3251efd8a8e5669f72b83fc8c07c9df777ec90bdae9b8a92ff3c1875fe623574365f69162cc4c2f89e4fc7ea32dd1ac0ce164ee804799496be25466a12bc";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "0.3";
+};
+synctex = {
+  revision = 66203;
+  sha512.run = "cbe1f8c6d64619f742003c01566d55b675724f5d03681ad53dc1f58ff7314af88000ba25ea74e4fcfb07ece6160be6976ac8e69a9a1b524f223f5b80f350deb0";
+  sha512.doc = "14e1f266182ee0be47a7b3841435f79594cdeb959245e6226520e81248691beeaa73f365c1112ef3bb4eacf4ca77e55265bd0d13c190858144bdc3064fa88a59";
+  hasManpages = true;
+};
+synctex.binfiles = [
+  "synctex"
+];
+synproof = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "934235e8eb4ca51a906ca287c5524cc3b0b69c649b47a9fa0fc2c9fd664199eb6fce835d435e97e0b24bd0662ee68b8db471e3546c4bdb402bfcc19b1fd02c50";
+  sha512.doc = "9a12fab29c7c0118bd97a7af1585ae97c5086e7a1e9529624b7fa43a723151e00537b9488a42628d7f6e93b87d092fe0dd18476c7d232e3ee74597186a92585b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+syntax = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "be1e049a98cd7e45cec9675e707575107af9c613028012b8fbfa658c6c9cbbac5782d3a7111f37edc719fb90e7c168c9a98a3d30a4c997b6ac4ed0691fc7fdc3";
+  sha512.doc = "7d0754c08081abc9867d0d40fc910ae5f8b34518004bf698dddc184f0b514d75a7feb3085870cf8322b3d6f3bc4c32ab50acdaeb56b574bf41604a18c23a6656";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+syntaxdi = {
+  revision = 56685;
+  stripPrefix = 0;
+  sha512.run = "79d5df672a25ed58919b7e054be992986edc8484348388d5eb318dfa99fc55ad3c452d6924c857c1bfb46361d59fe1d4e38cf84c9cfecd241f7d0c9d184f7995";
+  sha512.doc = "a7c370c6b6c3877098e5cb216c4e82d382dfba0627de6abbca8f4e1bc6f94f53f11bac7456be213fa632d501dbabe910ef94680cb2cb20549c292ec5ffe79451";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8.2";
+};
+syntrace = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "613c70859eb0c710c43fa4a62fe8b8d38a407ffe94c532d80927d00fd47c17b6570040f5d9ace5035f4dc53deef97419f52ecdf021ab11d5629445153b85ebd2";
+  sha512.doc = "0349aba5e1455a6676cda43c7981677cfadf77b9898a79d90104808e77cd351f219392a91f83b670f7f1801babf53854f8719c32b8da112fde849b7b120e2327";
+  sha512.source = "a6b5e08c1eae9b6c631f2d2316bf0d2afba452be7f8aed0d6f9724dedc7d50785ef09e1f29986d2cf869988e3b5c59332cd2b44d185b298e59333131413314f3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+synttree = {
+  revision = 16252;
+  stripPrefix = 0;
+  sha512.run = "3fa23536373a41957d985e5a0aac744473459d195c1e7e00e60f2b4aeab15d8f150bc76fab05068d5ae4994ce52ba4dc35380ab042cc9917a23962b2f0a7094a";
+  sha512.doc = "164c74dfacdb0cafab112d270b15ad0b7c58be0e8d65c5ce08f80182971b63026584c5c071988d9b7053f99b9d81c893f8b103a3145f1128ffad880259a16264";
+  sha512.source = "3fcb8ccf6da19cb01f6a80f97bf98a84c86ca7d06a95b193cbb4b33968c80cd842554ab8d5a9127af0434b9abc83f2cbff428bf1bb976fba01e56d5770f6e20d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4.2";
+};
+systeme = {
+  revision = 66655;
+  stripPrefix = 0;
+  sha512.run = "ed93847bd9d5b9158026e364d98f7102e4040d19f8fe198565b8e6a9573ba1796a89b69f76dae76c40acd9ac96392aa75d2ccc006f8419b699f8f4c7b35c737a";
+  sha512.doc = "97bc9240c34251e6b3cf0fe53fb5c5914e0bfc2cf852ca70aaa72213ac9e5ac7d55738f63e73aa8ebc4e320a3874b3ec84c3a0465b188c2fa263648306faeaee";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.34";
+};
+t-angles = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "dae9953288c0067e233ca26d2d5e7ea32207790eb16bcff2f0f56180dd9a65e70c234de48652d053a858ec92940c3c5fea10c699c697b65a249a8c84fa050b71";
+  sha512.doc = "32dc9adfda93bee5e61eb062e6970f6e093a09016a6ddf32f82d110b7717916fcc92f961c8be682958d1f3f345e02ad49cde4a85ad4a0d0add08a0bc80109d8f";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+t1utils = {
+  revision = 57972;
+  sha512.run = "9065b22ec60747b603c758c3bae67ff06759ebf97c979028ac940a1b773e3a20f5f249a4a61b7564038dcda3c72ef635315e64a3b8692501cc8f6c30ff7fa989";
+  sha512.doc = "34eacd2f14282108ba41d49cc68c066e12383c4873c9cb8a2389300f9c5685b3f3d7d0626e33008d28c229f8311daf2404b2bfa164fa550184f1e856163ab386";
+  hasManpages = true;
+  license = [ "publicDomain" ];
+};
+t1utils.binfiles = [
+  "t1ascii"
+  "t1asm"
+  "t1binary"
+  "t1disasm"
+  "t1mac"
+  "t1unmac"
+];
+t2 = {
+  revision = 47870;
+  stripPrefix = 0;
+  sha512.run = "9a47581909735a9ba582b71a132c925beab45cbfeb0201c93d138c35670fdf65580e6dc20d9498458e01eba7088c81d67cce329465e4763235e3f3404959c5c6";
+  sha512.doc = "8c30658eab02eb576963a6a2f722b143444abf5d286473f165b6cab84c75ef703462a1841121a5d12cf822b150ce8c23a96256754a2d662fbe6c451a058333ef";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+tabbing = {
+  revision = 59715;
+  stripPrefix = 0;
+  sha512.run = "dcb4bf112afc6a2221030ee7cf0f0b3043dd12a178195ba57afd10702b3efd65948d58607334dd9445270cf69862011d97b72a0f8ca5868748174b1462988132";
+  sha512.doc = "e056f857e62c1fe3f6b0183c0929e617525586068c62beee604b904695274d4c271d4b973a8a8c9b046792227df389a61591b528a8a4c1cb5c9916618206de48";
+  sha512.source = "7ed54e677b3dbd8e10e85e84c69791339fefc223a753164c0e9aa8c47301ded6c0737cf62b25cd9d3b152eb63bc32406d9a8a86a620b0e8e00d562ee795f6aa8";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+};
+tabfigures = {
+  revision = 25202;
+  stripPrefix = 0;
+  sha512.run = "d2a1fe985a74427888995437beaafa62b5def851d6f2a7788ead9cddbfcefd7206366a6711f29e85d2705c0d787bfc88accc56c93b827fa372ebd9cfc562f2c6";
+  sha512.doc = "5b2c7c5bd350c3dba68117151f3cfd6eac8f0e7ed602b44406ff9d15a79dd7de7e0ec303b1163e3c882412c86adc48afac6c9653cf1fbff86e7cf6a7ce852c94";
+  sha512.source = "78602de26e50e0d9ee43b8289a96a3639904bdf79983d4633d6c11af1c8215d1e77649f640ecc6b3f37cce30e6cc6b4c204e2cec58a3454c8b8486104eb17922";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+table-fct = {
+  revision = 41849;
+  stripPrefix = 0;
+  sha512.run = "a6300b1989f536fecb27d300bc0b27afd93f7f72b894fdb87bae5b0756ab241985ee2e5b4c0b68d1b2cc5611aafdb62b300fe40e2a08df5f6b11774f13309756";
+  sha512.doc = "a9108cee93e6c7250643636619f923659d468a2148f5b04168fb08738d85e794c1050fef8152fb95d114551f6967c955f3d6f548e1ede37711b98b1362e9910a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+tableaux = {
+  revision = 42413;
+  stripPrefix = 0;
+  sha512.run = "1846fe9da749b92700be07c094556fd296d47123df3a5d6823570056e6ce2ca8ef365b70f6ab2a8577602d1be338867fd2610403f89729dd51632d404951f84f";
+  sha512.doc = "cfa58a8e76dd61659f6c13ea6b3f97ae484715b735028c513576312dfa7dfe92c8c15a0858077e3ff2399807274dd5a836182ea65b948a976f6384bd8d1b19d6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+tablefootnote = {
+  revision = 32804;
+  stripPrefix = 0;
+  sha512.run = "90812cecdbb464592b17b8faf4d81b221844a354b0a3d3ea30cb72d0b56c4ff7eee701caf113e13586315ce846d30de6ce8d5028966f2c310527e34e8ec90464";
+  sha512.doc = "712c1ab696f5924058f4ea6ce12e3ff14fcbf79a78328259c4b9acfdaad33e9e4dddf36dbb322598f09a8fa3ca75d68b474fe1a4bcd4d25752704e0c4e6ba5d7";
+  sha512.source = "70456471a5997592668198463d1e44af464e9c24619c09d186c952c5afe2bc5171d5c29442820b267d1782a966fbe63997694427f1c870d14ec6194ac99ded52";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1c";
+};
+tableof = {
+  revision = 59837;
+  stripPrefix = 0;
+  sha512.run = "e577e1e8df3fd1ad12a2cbfcd05ffb1184fcd3555124986481c62a33ed7f5789bf1858a1370888887d2aae0d2a508a891e5e67bb0a4a1d9a924b3817c2d9e234";
+  sha512.doc = "bd568b16c6e708e4d0ee9810ba97f8363c842c22156dc90a257fdb0319eb49cab4f6ac9faee0700687a8a6ee54ea02b9660635cfeddd5275365d9c7f38218784";
+  sha512.source = "5086e314c042757a5e90bcbde9fdbcedeee689f89524df43ab390eefc7bf10eea6a9c5bc83b359b00c3ae351fa10f8e8a64b356adb8e7131d48568e06a8ed0d3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4c";
+};
+tablists = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "ed0ebef871c7bdffe93e2cc38b823dd13376c53e4388daa8aa1198cb213010594c9bfe468ec0e42901df2dbd1b938e7f037cf49ef2cf6d9ff3bc53502b220a14";
+  sha512.doc = "afcfa520702fd873b4deb7c4acfbd4290262a0df133c87f01698d20b8d17fd5b5932384124f49fb4d90155da284b873bb3ee1a2281955449f8ca2f278c38d39f";
+  sha512.source = "34ff94c3adfff4188daf4ff906721833dd925c84f107867d7931fe66c58ea8a8438737065f64a9aaf57acb0eeac9e17e8388dee7a0af93476f5add226d4481e7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0e";
+};
+tablor = {
+  revision = 31855;
+  stripPrefix = 0;
+  sha512.run = "64169a74a787f8877d41d5e32c42e5659950854a1e20cc05103b3ed58c54fb800a9af0701a40a6c5b75553b86d675fbda51948106cac464785c3d46aac77c979";
+  sha512.doc = "77a6d1b47337f015dbfd39074e1dae417c3bea3c9635955c6518d691ff336854cdd7587af54640282b45f5bf3885044d3b6789a0a73f39a726aeaf0afd27c883";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.07-g";
+};
+tabls = {
+  revision = 17255;
+  stripPrefix = 0;
+  sha512.run = "1a341985ae61f047694470d19d4e192b4f4e01c0bb595d91b1f80080eed3077be4e40b431cc05b1bb482f18c30bf36e6076542f2cf37a49dd6b065b0fe044bca";
+  sha512.doc = "f458058964660b2b1ff2a61ff8ff2ffcfe7ab103e9714cb1e7c307a8bd39c5a1a6990683c4ed7aa401cbe9b9dcc083dfbadd80a5aa00bcd64c0fb72638cf71f2";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "3.5";
+};
+tablvar = {
+  revision = 69212;
+  stripPrefix = 0;
+  sha512.run = "0ecb62b92529825d893d5ae686aa7d66576da1915ff760ae80466e9c76c2951f1300e72b3bf039a61997ebfaa9f72a8c56fa58f53c65d0a75bbac71d830dfcbe";
+  sha512.doc = "7cfea26a1abda9aa3642c5d48c763184fc0f7a18b77fb72b8083c7271847b6d7ce3bad33fca96f082abd171f5f013eafbed51bd84b3ec046d82be13c11043f2a";
+  sha512.source = "871139aa0cecc116ef7e3bfe6cfd048cb804ccb108c18b6fd71bafdc02bfbce56d297b111ddff348e92f44fbe1a69e06a5be3693386f02766475004d78e54d06";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+tabriz-thesis = {
+  revision = 51729;
+  stripPrefix = 0;
+  sha512.run = "b1e93632159fa6b5ce46a13b6d2bbd3115a09fd7c6908a8465934e37feb0633eea827fa1ba8521d91a0d30492135a428463f6aa99cca0c6fe7db640d1310c6ae";
+  sha512.doc = "e56f4a93c7cdc68c227791a21fbb06e44193e9681e677f383d19994c714bdb8d0487f9550c0c94a78890f54c7342aa777349770b4ad04b58e191fa62b31a3462";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+tabstackengine = {
+  revision = 46848;
+  stripPrefix = 0;
+  sha512.run = "2f6245d65a7d711d598b894c8acfd8d2a032ae210eabfa219934e8fa086bbe3edef81e73092234e5528f9f62a6856546aaec7eafe5572eded155ca8fa5fc3999";
+  sha512.doc = "6ce0b2ec254e44bca6f6cb746d4e3762735e9bb85e561df7628d3a2e2e35ddaac1635c825f27900d06badeb310535e73c84495e24748c1181825fd61fb03105d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.10";
+};
+tabto-generic = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5b3bd8081ec6800c96ce4b4cbdd8091578ad1df2b625fb2792202a6c31f3f126d612f99f04802d82d490cb529e03e63f98b01c7842ec0df69b48c2fc289108fa";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+tabto-ltx = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "8654a7e3b49bbfe6e861a6f757d8553f78149e7187809b03f6854f2173143e10195385d9e8b35510e49a5f941b27a5796070d6db1183b58e4eb71c452d4a34e7";
+  sha512.doc = "35e98681472b9d6fefa25a534385133d630f072a75a045c9adfc4b0e775095609ece27322e3fe8af451db03c0ac3b63141c3cc7272924ff758a8985389040a31";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+tabu = {
+  revision = 61719;
+  stripPrefix = 0;
+  deps = [
+    "varwidth"
+  ];
+  sha512.run = "b40dc1e91084912df03175a6529223c6f24ae3c0ec77cfb8f1f8625816ea78c044c8f01f1b473e84696421d6772d9201fa4b59aa93e6f014b73598d16c09a6cd";
+  sha512.doc = "5ef0a71d643bf5069a622aa8c807bf87db7445caab1f17b5202ee25ddab5368e94e796eb16de4fb183f294cedc232d48cbdba68f45d2451e01a2483d6869822d";
+  sha512.source = "7c80ee8d25933e5d1c579357cffdf7177b0a419a847ca1e671cb1dda19fbde9b3680658df6b814d5d92953dd13eeee5100a5aa2fdb5fec3cbc1e213545cb3a78";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.9";
+};
+tabularborder = {
+  revision = 17885;
+  stripPrefix = 0;
+  sha512.run = "a30f668ea84238df674c079fea6b05878776b26b4f6465385e26b01b16181825a8cc20767fa45eda8e7870d272875bc9664aed145885dd655d15258aa072ebb7";
+  sha512.doc = "f0376dfe99c68523332be0e83c0a186d7e3051862fac22785b4ba1273673fb9b1776654a127ba1c617af67063763e5837723ca2f23b3f7dd012628bd40ad0604";
+  sha512.source = "862ea87bf23f2e4f42bc15fb82d9e417b4e51d7fbd555383cb985892b9b40734b38dc4f0dfb09790040c64791beb2cb2c6bbd2df9373c75438929be011748978";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0a";
+};
+tabularcalc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7535398538d6802c4e70858028ce6e7414aa8a88336e71f90f7f909d015bf896eeb5e6652cc5bc5a2bb384bc25d280d8cd6506f7ba05823c20dda04fb3adf0ba";
+  sha512.doc = "7e35cad1507cfb62117aaddae77c3faa5d19c4e320193afa0054415e84d49833ba64afdf743b6241d611dbb4d45c6a532779293924f20b6c748659a361d6f30d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+tabularew = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "512851ce7641e0904dd25ab8a5cd5ac0dd281154067e09c4389fa3d6f330d30099dc60b252de4ebee52a2cf28d6b7d10bcf63fe4ab1472238db35754adc1dba6";
+  sha512.doc = "4b5b8aca9d9be8cc6618d9393278f8da2069341a982cf6cda9e561b64bc158e5c08cf9257b592f82134cd74ce0b69682e15339d9068d9fedcdb26626dc2b8a7b";
+  sha512.source = "9779876bfc65936043b0b4918784888acc68a8e8aec3b5eab6eea5cba3fea10ff0f696d1c38f68b37227cc086ca519630a96b945b33e3c1b853ee8ad95ec08bb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+tabularray = {
+  revision = 66276;
+  stripPrefix = 0;
+  sha512.run = "49171a748b9fa046d874bfb2aa44d2696120fae78c55314853090163228d6484507c281f65c7ddb1ba952b22c14d91e3904e779116adea69166322b91188b980";
+  sha512.doc = "98d37bdd677cac76657848d0ef5f638f77c44017c6320bb4122696672dfbfd459afc3c2ef44431da7340d9831c319998f88390300ce2f53a355239203390a448";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2023A";
+};
+tabulary = {
+  revision = 34368;
+  stripPrefix = 0;
+  sha512.run = "2c873a3840d8bf06a095ff3106b317ae6acfb8498d47b0229a37e247e0e0a9df80300759d65d13ebc9defb15d1cde0aa1e956d2f88bebab3311af459be47df0a";
+  sha512.doc = "b619c6b3dce1421ad4f06ab5e6f0ecaa6dc4f55076b66303a4e5409b42a4a9e34d218251177234dc0f3dac13046638a75623db0094978badc4db93083660f5e9";
+  sha512.source = "aa075526ddc2f793676ff45e9d37f02251660cec33b3f4a74da23e725181e48b2103fef16adcd6d622ea2c422a5fda1d46cd9fa1c35bbd72f06f77d05f3b4c58";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.10";
+};
+tabvar = {
+  revision = 63921;
+  stripPrefix = 0;
+  sha512.run = "255b93a8eda59386b798e85741422c529903acfc0d06cb77f4b128c2e32e4a68ef32097888e921397c3e22434b581de30bb79c8cc6dc8357eaef94f26e6da04f";
+  sha512.doc = "117158275aef7f9e5ee3e423e65d9ada5c2f6d28b660941a3d5d80ebb9716f4e35658e070911280e375b29290e2056ad3521acefa1eabfeda95ca9051d64a0c4";
+  sha512.source = "48fd599f93d6a5310ebb7dab44aedc9ac017878bbd85d2f1bdb21a676ba95ce717be96f8a26f24d67c4ac4530d233fa8b9842f13fb124a8cc8ce3badf44c6bb8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.8";
+};
+tagging = {
+  revision = 52064;
+  stripPrefix = 0;
+  sha512.run = "8947ad0dc443891e0b5a395a27d2857acb5879821443ff64cb0b15b99eea7a69401ba165b26565bac1b0036032d49241504ea2e008106a85cdd896aa28abd9e4";
+  sha512.doc = "06d470576136a96edb69bf595e55f16416da552a5f4a84980ff5393689cb58246d4fbe62b979c22b85c5abc58b926d9be63cd0ec734b43c653a0d0a5c4b04d8a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0.1";
+};
+tagpair = {
+  revision = 42138;
+  stripPrefix = 0;
+  sha512.run = "146c2e957965fb7ad9976a4b3b6c40d28b8d0cdaf0c8b9627f51dd55ba88b32ad7490bf000bb853a416b5dcc091243b9d6e92999431327a05879adcf89809d7f";
+  sha512.doc = "af9dcc1c1dd0a5e44d3f436569cf5d36f8154b70219340dd914feb3d8c036164f1bd70eeb6819bb51a06c0f5c5dcab1b3ede8be4b4d22b2536529474d0d841ab";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+tagpdf = {
+  revision = 69165;
+  stripPrefix = 0;
+  sha512.run = "56d464d44796cea4f20d94a3f58275f2d4d470e3f851a14c0a63da738e8865a1276a7a06ca77c00a2c9eef0b082c1327be7645a96066265a6d412b5ae950bf43";
+  sha512.doc = "ceaa96192541cd2a17c996737dbad46272c5b76e9af6176ccf4c6b8f1baecf2d04636cbf8dab0563943dcbe5cc72bc36b1d8d3438f1b35a5d239bc3da81f03ea";
+  sha512.source = "202a66085866eb4c989278ee9a1cb9143c0d0bfaef6f2bb810736ec86d649287242b15303b128f80643074f94213f7b04de46895b324cbe13c9bfe1027ed687f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.98r";
+};
+talk = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "371c640254994616744b2bd0c9b4040415392bb2a3adfbe5f4656faaea5bf3e7d2d4ab35373a65a857fd57112f7fc628321492d5bf7c5b052e0026c277663d7d";
+  sha512.doc = "d6a641789923559a94b0077d718e56258804caa1dec0c9ea0f9d010e92ffc361884664ac22b07b95d20f464d18ac76301a718430d8f1ee30172489cae3b844ae";
+  sha512.source = "10661b5ee41914bdc60b5ab38c887087d6529b976a3acdbf95bf80160c6e432fe6f8a4d6030711f5672f8aea564fd23ada09f92b0e3a2a05ede903026d24bb36";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+talos = {
+  revision = 61820;
+  stripPrefix = 0;
+  sha512.run = "50a35159c65afa43900ee8633d2b86effa5aec6a430f2e8fa85f77442da35b140012b27959155564e29286aba465d9bab17c9f5ce5ec0a889ec4ed5dff1b4dcb";
+  sha512.doc = "9bdbd72f86e0b957580bb008ba349eb428721913010e9fe2cd9ee9b01733d6259914712b60a4a7f0f5804041e6cf876d8bdda2910de1b191715c1d9c8d8fbf77";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "1.0";
+};
+tamefloats = {
+  revision = 27345;
+  stripPrefix = 0;
+  sha512.run = "bd45962a9caa5b098b6a6a5c0bd3fb964e13cf2744a5fc960a97910183799d532aba24d5f4774ac29eef14bf1439e285010b2e22641167c826d5a36262fc39ef";
+  sha512.doc = "2b9d013fcb93682e9be0fb1758fc871b4784eef72a0892383a35073aa177ac29acfda5e54b6a919379b43a3dd0fb0b22dd44476857665efb59b2e9cf27bb679a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.42";
+};
+tamethebeast = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "75a71590f1d905bd2a78b508d66936975eeacbfa32e850f599e94efa92da2b043edb8b0899b7027268fa131d94283c13432d4c4126afb79d1615bd538af52436";
+  sha512.doc = "0df79f434714deefd60b9b9d32dfbd47ac7e560c26ec0d02465538eefbc779f0252aef235ae2e0a2d2d634d618bb52c73b31c229b5245866239776c742ebe69a";
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+tangocolors = {
+  revision = 66733;
+  stripPrefix = 0;
+  sha512.run = "f33e7b7bf60f7e10f6b58e24a53c374ffe84a48a44bd6e0259dd741c91f94e61f71c6e6689e204017eff1b0050aba4e6eb5715b3978ec633ab0fb41317b1c835";
+  sha512.doc = "051a1f028e4e77eb78a11dda00fa950f9405a4703dfde7fa61318482ece12ba16e16ed0dd035532cd272cf3d66efe03d212f44c03ffa342db76ead6de1a5a2ef";
+  sha512.source = "d88a247cec1928a8178d189b812175df0a6f861f829fac382c952c0e1d6a5cd3ddcf4216e88a50676c831b1940d3593dc1e441bc45b827591039a13a31f27aa9";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "0.3";
+};
+tangramtikz = {
+  revision = 66183;
+  stripPrefix = 0;
+  sha512.run = "81446f01dd97ef332003f8cce4becb670fe3fa284e540c0dcefd6627b03efcc87874d12c7c7e399947a269cd4fd66deff2064cd1ba64cd34d6cac2b4c587e802";
+  sha512.doc = "45435423e7b0a7d7aaf9db5cdbc682b9f62721b7fb333c64cd76a773fd67bb7faebe1bb11a6424c15a495f2c2269a78698a7846f2e8902c16023f2af91c9be9f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.5";
+};
+tap = {
+  revision = 31731;
+  stripPrefix = 0;
+  sha512.run = "07ca34ae47976c65deba5443052001406390befb6dc675af7651141505f088e2f67f39648f14a94f70788eda79221efb05c2246d1991811e697e88c7408f6cf6";
+  sha512.doc = "a61b861cdac25c0d8c7d48f67abb9eed88458d0d55e8afb706adabfbed0d1e7c7159fcf000b8012885f82f849ee965bf6a2607f1b67f2d9191f59f8538147230";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "0.77";
+};
+tapir = {
+  revision = 20484;
+  stripPrefix = 0;
+  sha512.run = "f3d93c9ad813008fa72cbe317d244bca9a70855c20f327d22d1720b79d70019af0f5d8aef237fc78a598a545f44a4612f1e5a7622b34247044ab230bd42eed5d";
+  sha512.doc = "a32573ba9df3d0b30e796f7bdd03e63ba8a96559380895b8db2d33fd9812c8b781b75d19a12a24405c52df13acd9a5f2e925da64b019e92a124d143345bb5bb9";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.2";
+};
+tasks = {
+  revision = 61541;
+  stripPrefix = 0;
+  sha512.run = "0625dd459eaf53f842f6c36a550808c3efa8004a76cf25bc892b4c50a640ba588c2d069ce8df10f5c8febf5461390517357040b8a472532fd1f9b9ceddd9e5c3";
+  sha512.doc = "a3240edd6bd7e87b7e1b6292fc227e166b54cbda7f130dc5f03c92707577a9b51f4da5377375419feda6a91a710f48b787dc3da90a1befe1d1328ea9a799f649";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4a";
+};
+tcldoc = {
+  revision = 22018;
+  stripPrefix = 0;
+  sha512.run = "82348df3f6dcedc17a3cd50f709d01b1f2b0e4be9345e63d40ee6ad2aff908f97c7d19d586431e3fe8399a8d076505ceaadb5afe0116093240a6e59a335934c9";
+  sha512.doc = "61f24f628c2b62c02e08e1a2a3a2fd917d057baaf977e7837b1f62e4331e370b83f8a0b00e679c86ddb1893d21af13211185502ed7bb19699d4f33356d3a3a0d";
+  sha512.source = "44a8d3661061ab7dd828fe1cfa8342384e2cd20f5338d54fb0a79516a2cf686a3a6d2a1648d18a4d0c1395a60fe8f8a7b5af0d0c2edc38385852117f408f9e26";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.40";
+};
+tcolorbox = {
+  revision = 69370;
+  stripPrefix = 0;
+  sha512.run = "f62323c290e39f10555df66bfe43a3a199f99fd5ee81c13e450cab4736c805a21cd3d85ae710ccbccbcc552d5e0370245600a5e58e605d6b3d35a3fefa2a6fe0";
+  sha512.doc = "7f4f312fee029753decd7456a6e2d8bc829484282f93d245e73a3ae706f7c948091694c05bd2b4f18982b4ed11662ec1868ef0dfd7bab3f35c15a1c1d486f41e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.2.0";
+};
+tdclock = {
+  revision = 33043;
+  stripPrefix = 0;
+  sha512.run = "29e2e50d9fa432b08ea730b8a12228cd2bd3eefe61946e576a262bab06a966c0b28c13d48b1074a838a1a567f9797a943282d17e936db146f15e7631261761fe";
+  sha512.doc = "139c82690e2c9b695a10a6f3e6f94a54c3ae4d4a929ddc18763e248114926554206fb4c007ed758695476de3750ffc1dce3db75efdf2598434f27abd1ac84baa";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "2.5";
+};
+tds = {
+  revision = 64477;
+  stripPrefix = 0;
+  sha512.run = "b03911aa9711eb5eeed77c026c4bbcf952da80322b855ac631e78c07a48ad2ff1a4afdd6e25a00257d1b70e054645f07f65c98fe74f6b1389be46625f5eb8487";
+  sha512.doc = "f4078e3b1693fedcbe139b67c50824845644a2b1e57dd27f9e46e44504d8fe8ac0ca706590e9149c06e71794a188b20777bfd6bf1afe85f16c806ba4f9b99cd8";
+  hasInfo = true;
+  license = [ "free" ];
+  version = "1.1";
+};
+tdsfrmath = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "f2c7a19dc327230f46320c695eaf40e9ff17088a709e38ec7f8de23f5c0cbeb18f606bd41625a1229734dacc80edba9d052c21620f7cdf213f60e915b6128010";
+  sha512.doc = "9b0e747f90b75f372f04eddfb1c17dc73c3ef6a95d576077790b23bb496cee07afd3af5d1a53581872255c4e71b933949beae909591d0e1c407d9efc3f1d227d";
+  sha512.source = "f44f98be464973ef3596d6e0d77e508280b597e4010b2c94620aad0ff950c8328ba1d4bbcf22e0f71f091c311d9b99dd979c73c182debeedd90ab14bea9e1d7a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+technics = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "8eb9eab801bd83fbf0d9365c36a202f909cbcd49b8da6887f3e26aa3fcd047b8085e0b405f0f5fa7f2b5ea0ef21a9956114ecaa7934e1b46b1abe55583d5e759";
+  sha512.doc = "2158bee41c25a1fbbf8c963e3364cf7d08e160aa895f54c77ceeaab7da6963232af61b4c7349d1be7f0aa84097bc7c00cac7748bdb8ba523a899b9e7cf6ed11d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+technion-thesis-template = {
+  revision = 49889;
+  stripPrefix = 0;
+  sha512.run = "5e9c6bd47744601258bef52102acdfc744e0dd1219a7236a5710d6dd98ba5ebf1061bd6070c5d02707a7c8b895e362db51f48ee081126bcd9a99e523c6b9e5c0";
+  sha512.doc = "bcc290eae933b00cb32af0da6d31c6190f3b38d02a599fec7f8cbfcdb6f8737380d4c440911b08de5d768d9925526a63521c97c20a8c075ce8e9500dd3a62c24";
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+  version = "1.0";
+};
+ted = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "42b0fcded19e05d5cf316fdfc0f1f6474816b656a57bfb5214a76f47e644bc16a42bfa95a21b80251723e2c30651a284d873d898e84c277922120a9169d274df";
+  sha512.doc = "a36387e2520d7afadeb270f7393ef45ac1b26673840d541a50ecf864304d529b24be7d107070c96cfa123801284ffc53c9daa60753640fcd2ad6367f88887069";
+  sha512.source = "b134ab90045781a2a686206d4de20ebf63ffd678d47d81815365f67eecce60984d7e17e3b9098e42f06876b1f711609bfa4133efb4b74705f25ba0e4323984bf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.06";
+};
+templates-fenn = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "cc61496f15f9c4060c8d42de23e3bf6f6d2be02d3a8b4fb761f2fda4a9c3565d74bf1f107dd9371e096bef79ddbdef56d2e696cd84cb4fe39a41986b8ffbbc78";
+  sha512.doc = "2a96b0963b2d09edd3f6a6866ae298001e6ccd4e96b98a9002df6e6718284a786b63761441c287ddd63dd5eba636fcb8ce9769d498962ffe2565e771902755e1";
+  license = [ "lppl13c" ];
+};
+templates-sommer = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "55b47c4718786fd4910d099878d5808288e83714567adbdbceea32a76e92f7e36c3f850d8597b297445a6ff428d1d0dbaf9209a387485eca0fb1a85f4909ed59";
+  sha512.doc = "543b5cce4842dc6b084d90f9bf4e3c19c18a690ebe85379d9d93a5998fed06272bcac4cb3ae44f965614962827b9926fec3439322e38a720c134133a88cd94f0";
+  license = [ "lppl13c" ];
+};
+templatetools = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "696727231a51c33d10ca7c18690d2f960cd01a72b4e928c581e2a7ed26770bf5ea18bdfbdfd56372fc7289b59323025ea7d30f208e991e1c6c89a659a240597a";
+  sha512.doc = "55c03f8cf8313aed72c9434eb26b0623e55a5644a22914ed82c64c07834258f0d2f9f7c083b22677be854f69bcc6d980e45158caa4a530df517083c1c590089e";
+  sha512.source = "a14dec17daec4f731aac48a155fcd306528ba106518db1b07fa1b77d9a90fef82746a4b173f1ec072ac73023469bea88d70f3b3cd106b3557ce426fbd05062e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+tempora = {
+  revision = 39596;
+  stripPrefix = 0;
+  sha512.run = "0e1cc1a13f7937e5497f454b15ca66e0975b784b80223a902bf12a9587abdfdb56116b100e04306b1999e053b7c3716b32e1183dd7e6624162611f3b70388df6";
+  sha512.doc = "18259e25b2c9f2a9cfbce9a9303d8827af069bbe2a7ade5c14518ce2c19dc973a86fadaa99b2abc8bc65644ee5371c745abba03cca76a685382b7d8b6d20bc6e";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.05";
+};
+tengwarscript = {
+  revision = 34594;
+  stripPrefix = 0;
+  sha512.run = "c6a29d928b1f25dc4b8893f9fc803f3a5deef9e8e9aa4803153fbae5cdd7170eea819eafba8a165203e48c8b2f443c55ce682df9f7e968ab621f2cf7eb082108";
+  sha512.doc = "35825a4c1cac91c088daea643e8a8901f0c3ea15c44e8a9328883c22c1fddab95fb32a65372af3979698f81e68d77b34764a1c5748460a28396480075cb594d1";
+  sha512.source = "4afbd079f20f9989a817acf49b46409bfab6ba0b328249eedf428a5a11e127fedc6c763c87db08b8b7c453562400878ea0c54d6d66c6bb7d407aa498a78dda38";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.1";
+};
+tensind = {
+  revision = 51481;
+  stripPrefix = 0;
+  sha512.run = "fc20b6f6b705218b82b5788582d8b017be783e42c87b3f35e7aa99a8215ab0168b7da899c73ef1ebc282bedd5c715e69ed9e1c19b94d9b6369ba8e9986b5c5d6";
+  sha512.doc = "12e443e2ffe876732759ddf91c8948e9cfcebc3c1c96949c51f090e15dadfbcaf801e488c8d043855b576404207612ae91d982279cf0b29bd73d4a5d1528bb6c";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1";
+};
+tensor = {
+  revision = 67667;
+  stripPrefix = 0;
+  sha512.run = "4e19620df8703906c539541afca09ef871e1cf6a20315b246ebf758c5a0ff5f2095c51d312b19f818e89c9714a79a32fbee708d4ecd0a0b0257546b0d940ed1a";
+  sha512.doc = "f60b5bdde9a29bf6a13ee94833b0d1fdaa1e7958d01a6a42b20a995263f398f7fbd761150b71f66490ece636ad2aa2c69a8ac9447a0000265ac480396822db2d";
+  sha512.source = "4a90f092c167a905cf72abf029bce706cbbcefd4dd73ffe791a132f22268a5c0322c246877a387739bbb15697555fb021e6132538b5ab9b188a9fa9135b9859a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+termcal = {
+  revision = 22514;
+  stripPrefix = 0;
+  sha512.run = "f28ee31f06cf2b3119df8010aa6a8312d5365452e19c3a278db7bee3bdeafe9ae0d3b07decdf1a104d8eb763abc5e02ff0e6c7030dce924596ac89d8e9508e13";
+  sha512.doc = "44f54dedd59afad78eea60ccfd43805dca1a4dc87a3d827e0fda26db15505dec18d91cf0629ec937dcf3eb14d1244f80559a0fa1ef09b30288bf687099fcec1f";
+  sha512.source = "0dd39a06088a0bd2bbcc3a9d6715816368deb07c55c85897f7c49d23553ff941f5f68d7b0ebf8fc54c4fd4d2bb8a510cec3ac9d9b509f27aeee29696c75a7ef2";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.8";
+};
+termcal-de = {
+  revision = 47111;
+  stripPrefix = 0;
+  sha512.run = "9d4d0be3e26dc69fa3986fbe41099330e97cdd4d3aa0b12a180657577ef839878aea9e546a5651cdd0ea45e7af3968c5b83b509ad5bb3ef210d42af5c00fd91b";
+  sha512.doc = "48f0ec01526f75e9e2b8369f8b30bbd8e4f093cc91fd5b485a36e225de35fa0afc750508b6533f2ec82ef123805788e40e98d5459dc85a73bef675162e682fa7";
+  sha512.source = "51d257533f7897d6b605a2ac26f323e3c241cb6920b329387f1be3bfc8444e98570f2dc4f86e78e81f5838204a90a7f79074989737005f035e076c41be74f4a3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+termes-otf = {
+  revision = 64733;
+  stripPrefix = 0;
+  sha512.run = "df52961346796914dca6c8f7c45671aa5da8c8ae4d55b951b5dcec6168c90082c02734db1133a119c951e50507ff1edf777b8976e34da1fc1cbc7ad783d4ae4c";
+  sha512.doc = "221decd0f8193912d30032544095c3f30c4d8fd3b52ab74dd167bec1de528c8c9b753681985259dba859f8fd3d06ba239665bbdcc93d80904235c6f62685dba2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.02";
+};
+termlist = {
+  revision = 18923;
+  stripPrefix = 0;
+  sha512.run = "799d5fbfb9b055e8674a244ecaac65c2f0412a4c173e6608fff946544142d851d8dbba02505fa8be21bc37b15acc2ba99a6f0dc77a13dd241fedea1c1b38dec9";
+  sha512.doc = "14add37c32500f246eea2a3219b58a232c9a8f41cf3cf5a0d1d2aaf4cba4d700c1ba5379b037fe10cfc06385ff0a7d0925b46beeef15dff2502142e56f37e597";
+  sha512.source = "2d6a14828ca29c08d0b08f33749deaafef88ec73bdd72450468b5332e95c83ccc5d29d0a154a6cc49a04ca0a9e5a17d0f28f25139d928b87cb14a2059d51d848";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+termmenu = {
+  revision = 37700;
+  stripPrefix = 0;
+  sha512.run = "5c3d4ac4a2bab5e18453b9de0b372b364981444df3550c3a195a8fee841a6d76e73835096ff1b71a37f5e5acf0fd2777dbc8846be9345f99b004adb560ced517";
+  sha512.doc = "029f4ae3b57e0b226883e66030db2d3c41cffc0a4dbd4f8b3662562fd566d8a09b7aa0c83d98f7fb0cdfbd1226c5dde9c93211565292f037e5b5554e9a5d02b4";
+  sha512.source = "56c1396e90a4c1db5dd28ae96c6f3ebe0310c163d7fdb2cb4e3ade78b522b349fba0bd43556165c282bedcab167241033b065feaac4c4a5e3dc2d8a8a55dca61";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+termsim = {
+  revision = 61414;
+  stripPrefix = 0;
+  sha512.run = "132615cbdbe257f2c7643414ef4b577053425e457a2e2ee2a9b4d8d56a7e6758db587b7f5223ef1a324931f5468ac5365b7dde7b971312bc8b8ea069ee5efb9e";
+  sha512.doc = "af5047a490608fbb5769b6b4d3dad3fac6b9b20abb5dbaf20d08a633045ea45ca1a01f572d3f0701567a91a8429ae0c7279fa82f054e6fe0802d413765c46ccc";
+  sha512.source = "45ad375a19ca939496f6f6546c9d2568367b3cd49c11fe1b2d94785448eb679d3e82c41a3282df054027636ca367b86b82dc3d937b42056398c23622ffa6e34a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.1";
+};
+testhyphens = {
+  revision = 38928;
+  stripPrefix = 0;
+  sha512.run = "c16a9299721c571ce9bdc91e4ed4cc54c973b43fed5189d2f377b2a9143d94d3eeba6bd6b728e3df92a5436b3e2c5e07a21d4a6af0210bf87784d40d96caa42c";
+  sha512.doc = "44cc1d9afa4e12ef2dc1f7be2d7718fa33b80e5ee16c7396053690bfea6246f444b50cb044d314ec677436a3559ff1ba9fa227acb446db37bacaa2829c309b2b";
+  sha512.source = "2f84528ee4ca5d8434b0042f7b24908ff97c45f27580a5b59bfe226b195c295d4fa546fe240acb981db6deba970e2b020d38c00e6bbf5a0cc1b3caf2b3cbd506";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+testidx = {
+  revision = 60966;
+  stripPrefix = 0;
+  sha512.run = "e4179ab827eb21f27fabdd06674302ac141b6abf889e87c4183b4d86253ae35b5ea277ecb8ac36e66d51a4e25556fae092f98bfdd768d34728412f3bb8b5faf7";
+  sha512.doc = "60761fa19984e3ab2a0b5420320a43b84c1174a4e6722c75523fcaff43206ca2bd01f24af74ee307b5cd7d12196238f86539f8cfafc27168bf134df74e2736df";
+  sha512.source = "358c712d4073983f872dc9664bd6e138c7c66a420d1253ec36646cefa584c9148573fd978026de87d98806c71ea8f8f45c1cd0160b3be738d6fb9cd535d774c1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+tetragonos = {
+  revision = 49732;
+  stripPrefix = 0;
+  sha512.run = "dbb37eec17d41633d951b3202289289bffd9bf9a8f509cfbb7f98baab9b7e684e7d7fbfb5f50ce41251d09d9f0ea81fd9e68fa91984e788e5e43f8e398463fff";
+  sha512.doc = "f55cba055574e78934b8766f02de08f417f625042627c2c1e64cb7fe39ecb1e3553d5b862afe521f4d65805713c856ab000e3db3b7fc906266886f2ebec490a6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1";
+};
+teubner = {
+  revision = 68074;
+  stripPrefix = 0;
+  sha512.run = "c5f03b824d75099a38f8d203722d0edc4136392ff282489f6473a83dc178f536eb972ede3bd9371f47f39dfc2dbda6b4db78d282642889b4036dbbdb8e49a473";
+  sha512.doc = "f1d7123e4438f781f6f4f7448119c7dc968be54888c027f8a7c95e5c70f06adcb58d127de21679bc125355f85f82ec94d2537cb0467f7c285427fba6b8f50775";
+  sha512.source = "a44d484cc8de4f280f35648c93bc1c3673fff20a3477098d58342cb579b443f4a417f528e7b80787bf13fa8feddb05dc2cb5d7c261d812a5473236d00fac59bd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.8.3";
+};
+tex = {
+  revision = 66186;
+  deps = [
+    "cm"
+    "hyphen-base"
+    "knuth-lib"
+    "kpathsea"
+    "plain"
+  ];
+  formats = [
+    {
+      name = "tex";
+      engine = "tex";
+      options = "tex.ini";
+      fmttriggers = [ "cm" "hyphen-base" "knuth-lib" "plain" ];
+    }
+  ];
+  sha512.run = "028cf62dc7bd7f62acdd005c1121b4fcd55f9130db61d3bfd782cdae22e2e51581cd66a43a827ce76f6e4fed09f2050ee81c13594f6df64817c3a48ca3d1d088";
+  sha512.doc = "69e9a2068eb63d7a503be0aa3d94cc270485370be0342d5adf6fac714743a90b705622b8cfbd7e62e52c15f9a663fc3101d11a116c1af9c4f9f3f5c5d3dbfc77";
+  hasManpages = true;
+  license = [ "knuth" ];
+  version = "3.141592653";
+};
+tex-ewd = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "9850acafe002f1b6b147d00aee55e4cd9c1813edbea0f570282119fd8b2f134d3a48c113cc9957c69905c4e88a06097c45829026342d7ec88838870eedd7fc44";
+  sha512.doc = "05f6414dd2309401d1800e2b053d7907703e144f829c2e7623a7c98c1313da50c0a659c25fa0d9a0fcb8b50891c575b47d8fb8a90b925e105ed9a6f8c45b8667";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+tex-font-errors-cheatsheet = {
+  revision = 18314;
+  stripPrefix = 0;
+  sha512.run = "403b4faae7b16b1eea5a4d2a7d77bcd8a6e7a7b5be54299b79635280be8f82f59d281380754a0bd1b9e53ff4fb534fb3bca0cf8bbe1cf0ee88ee4d925fba103d";
+  sha512.doc = "adc72626fcb4c5a9285ad4a7cfd1c6b984f1aa26c7732f35cdc241f7b00d623f6b646e878317f30d10b9f47f4eee33e923538be58f3c15bee668f4fe652f0170";
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+tex-gyre = {
+  revision = 68624;
+  stripPrefix = 0;
+  sha512.run = "5422f349d15233e6f49576fe3a65f8afb5cae6a3c51e5ad7cb56617d7d064e9cf574f233f789c029c04bbfc24e5948c115b2d33569e881373d68615ac709153f";
+  sha512.doc = "db2bcc8da6d3bfb6f2165c1fb127b2b4a7471e41a0cebb851ce5465a18740d34948ce8292b4f6bd359621166602cf62a978bb179346dbd1dcfada49cc7972686";
+  sha512.source = "e958408e6e64a54b25fa89b38de181c96fffb9eb8762959209799c39cead7a5525f220b7b3cd278e35cb9e3e49c1c85d565d518ffacb0695b0c3c09ede935266";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "2.501";
+};
+tex-gyre-math = {
+  revision = 41264;
+  stripPrefix = 0;
+  sha512.run = "a50a9eaa30cfd7754ae702a3bd6fced2d07fac858215b913945665940c71a0aafd2b59a0d0baa0fb9d5090773ef69a86864cc11126a5e30adc3d0e94cdbd2594";
+  sha512.doc = "cd346226dc36bb4fb5324a43dfab7790cd80ec6bba992849dfcca74ea6fe8d85fe7e0ac66408a41ac1ef644e6b32c9b06d337c4f394fbfd8fba4153fbc1abfe9";
+  sha512.source = "3c58821e5307257578ec149317cb621331aafa00bfa465eeb055f1f93691ce57a489a32a7eea068b12b70228433031de33c0ffe36b0e8e10b368e0ef5e33fe24";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+};
+tex-ini-files = {
+  revision = 68920;
+  stripPrefix = 0;
+  sha512.run = "58f8b1dd44be6ea67dfaaa67a4f7c6d27d222ccc7c7898c31ade4f23ae39a9a5aace902f05ff48bb3f6d63eae38f9db93b75c4d2efeacd394230694eebc33fa3";
+  sha512.doc = "9caf187a5589e49f946a7fc5ad332073dd2a90d82f71587a57ee9d62e365321fbf14e69e3e3448d85302cf5418a2eb7d94a114f95c575867b52579f6c35d5e48";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+tex-label = {
+  revision = 16372;
+  stripPrefix = 0;
+  sha512.run = "513310d4dc5240d0b290d0acc941455ba64e069d19c223670d05a632033aba8de367d5dce6acf073af4df476876d3ee414dcf9f1f579738bf9bdfe6738c19d36";
+  sha512.doc = "bc705cf6812515923d60cf44b75830bd3ea78f078c9ef88ded3e94f060155e1fbf5dc1485cbaa8530e1f10b41b421e70bcec6c61066ee98b498aba7ea8799dc4";
+  sha512.source = "07c29de4e85fc21404dad1da3a01a5037b641526110fe5410899c60aeae6a92836de322895afc83824df60f431955a4da959c4d4c21cf17dc32929f445cc1ed8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+tex-locale = {
+  revision = 48500;
+  stripPrefix = 0;
+  sha512.run = "0e3aca622bb6fb49a06a3aea1d997414add9272dd39c10c3a1d80956dece59882993b24366a1126acab80f8a7c8328a30756f727210f829f5eb838ac0b9cb1a6";
+  sha512.doc = "d3898da3687603b1f1f3f2f5b203d01c985ab0c3e39eeb05dc7c855c14fad8b73649777e4a0b7844c242bc8946cab80b585987eda37a1c10e3ba75c6955fee23";
+  sha512.source = "b24a01b9845f79a86c12911e71ef179a4dd8f5a8284d067b760a8ac3cb906cbf2465ae3617e0196d9163348f3a865fea4e5869adac9921088b13d738803f87f4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+tex-nutshell = {
+  revision = 67213;
+  stripPrefix = 0;
+  sha512.run = "cb8d343a8b070c6350cc922c74d5dc08ea9f6bc92397e5325591913f5b7ff01704b0c5009a8c8083a47baef64190b6640c51a91216af54b8505654d3105f34b7";
+  sha512.doc = "50cf98a9ba348f6814274cdd195a2ff9129474e61e858932f8e8c256f8108f622a088b0bed586c25e199737fbe3aaaa11441d6ebaf29fb0974ca822d662b79e0";
+  license = [ "publicDomain" ];
+  version = "0.9";
+};
+tex-overview = {
+  revision = 41403;
+  stripPrefix = 0;
+  sha512.run = "1217aeba55d723dad2843509ad3adf205090298f2362ba4ce23d73ec581e439c344f055281a95f82bd8cec298c77da012cf892e60369562238bba7f8b8d258a1";
+  sha512.doc = "0cd9941afc0e50d3d936f5ba1f9d2c7f16244899982ff7eaa44bb019653b5e4e142edc1ee608ca1664636c77178dd8a02f4625a2216a019e770651a718f0a27b";
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+tex-ps = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "cc616b501be7c0724646d5e0f326a5729df8f4cb0c4070f92bdd3b5b370e496efd6208b3ec8b2387713810b9764c75525689f434b7f482a83fb0b8e9b0383cb6";
+  sha512.doc = "2f82f63954c1407c2caa9c39a538ed1cffeabfde8ac0506906f0f28430d12e18d858040ee66f2326cad3fa758c23d1ed490b70c5d18eb68b699b7ddd0afd15d1";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+tex-refs = {
+  revision = 57349;
+  stripPrefix = 0;
+  sha512.run = "aa03714a0ebb90c7431935608851c504080f8985db3bbba98cbfa9b957e0a3fbb87de8e0119bfdcc996d664aa46bb943c6f90b36c4408a42f14fcc8387508df6";
+  sha512.doc = "f033d8d8bfafdece7b79c8417bce19dde484adbaa958497c0b4426448e6ebbfe8dcda07a34c336c3abe038447ea9e5177bce4660c9b8be36b0f94d02fc7a41d5";
+  license = [ "free" ];
+  version = "0.4.8";
+};
+tex-virtual-academy-pl = {
+  revision = 67718;
+  stripPrefix = 0;
+  sha512.run = "23005895f708b07162b2b251be125b70dfa8ef6add8ef7c5dbab2c5a2e211f65fce8432cbf3ee324a9b72c2296d5dfffaaf5a52d77425e4d6fc3c042397d6bec";
+  sha512.doc = "fd22d5a6c34e5ab7859bbb515d54e822eb5167853abba3e25d5137df1bc34f0bad9892c16f7ed5dfded8b90651551e1ed84a00d561c561ba18f50fa04e7bc7af";
+  license = [ "fdl13Only" ];
+};
+tex-vpat = {
+  revision = 66758;
+  stripPrefix = 0;
+  sha512.run = "918054527c2d325ac0c1bdd621014fa4c79d7c6cf4ec8b5ac5d81dee84b9159fab0cc0047ea35eeb2de4460952126b3bdcd03395c29379e9df517ed7243206f0";
+  sha512.doc = "f16ad935930ab663bb2e5b486c4fe53b3bd9e883c660d97893c4aa86bfe22f7ffed77dc66d88060f7eabb1daadd2dc77742c1d9604ea94d26594aba340693f35";
+  license = [ "cc-by-30" ];
+  version = "2.3";
+};
+tex.binfiles = [
+  "initex"
+  "tex"
+];
+tex4ebook = {
+  revision = 66621;
+  deps = [
+    "make4ht"
+    "tex4ht"
+  ];
+  sha512.run = "b0dd7eee40daae5cd87b39c8d52ee99569992dfb3f9d438cb43f2050f347f33653b5932c6b159b3d24382971aae5f631f9e8ac8e2e3219130ed346d5e466c0d1";
+  sha512.doc = "72d0e9550cdc8cd0f5469e44a9ddcbcd10c8141f68479ebb9b8f8af3e2233695df05acbb875b80de0330fc29d774b7d3f3c9fc1f249c04e60944ae9642326a54";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+  version = "0.3j";
+};
+tex4ebook.binfiles = [
+  "tex4ebook"
+];
+tex4ht = {
+  revision = 69412;
+  sha512.run = "59848f9a4accb16164f2af9c7c26ae4a28af826116ac85f68fd1d9a399b979cff18e0d15ad85cbcdec5a955a01da1f46fc7ea6c817a216cc8aaf0df88c5b9ef6";
+  sha512.doc = "6756a4022af3e42e47e090638e114a2d4c4a50bcfef7473bb8ebac3a9d2adea6153b7596144f65955cf02a697c0df47a631877118cdfe8b25a00ffcd5b1737de";
+  sha512.source = "c1c3746084f4eb88f6aab21c20168e9a520f4757eeec5d6742e905d81aff44d5b2b0265efcad2066fab8669a59186a05d634bbe87f28b44f6e58cf3a0fac52ae";
+  hasRunfiles = true;
+  scriptExts = [
+    "jar"
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+};
+tex4ht.binfiles = [
+  "ht"
+  "htlatex"
+  "htmex"
+  "httex"
+  "httexi"
+  "htxelatex"
+  "htxetex"
+  "mk4ht"
+  "t4ht"
+  "tex4ht"
+  "xhlatex"
+];
+texaccents = {
+  revision = 64447;
+  sha512.run = "5a2a79c9faddebd523939cb3cf42236b1d2c441a036cd7fc6f6f62422e5142cdbc0a45ddaa9e642266c41c9fe5b723fc440d0372639cffd399a89d489bd11b66";
+  sha512.doc = "87bc11f186513adbf32c15af2f1c1253dd72802fb2008b76b9d7d67fc0a039aab0d2424fb853b6bd8e968cd4e9c1cd93bff786fa07e84593fbda99191b053eaa";
+  hasManpages = true;
+  sha512.source = "8bf5d4957008833d54f87eff9feb14f60694ea02e7e9fd2cd5c5d2e2db3f6de3a33784121208ffab516763fbf578125399cbd6f39750e6bb0162a65c2fc44f24";
+  hasRunfiles = true;
+  scriptExts = [
+    "sno"
+  ];
+  license = [ "mit" ];
+  version = "1.0.1";
+};
+texaccents.binfiles = [
+  "texaccents"
+];
+texapi = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "e964e090b4bf4e924166d0fbd8daa2087a300d4da9d993bcabc624dc78c3f2db9984f2aa851740e61706af213d112cb32e80795ec2cd4e23a69c13ed92fd91d2";
+  sha512.doc = "0f3886e76090beb0dcf295ba875b9ddcd950da4d50da710f1b4417ffc7c1ceb48223a20d7cc93cac3cbe2f19edcfaa74c801096fce33c55e9fbc6c57b1897b22";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.04";
+};
+texblend = {
+  revision = 68961;
+  sha512.run = "fc2026a5b2487af785957873f20fb91045262df7df2a2a71777da76727c054cae19b1e005d30b2616469cc009f680973091a7ce6d291d2ff29b3bcc8a47fc12f";
+  sha512.doc = "936b56f3823567252297cc3a659d951b501a5f60b2d43f6d8b19fe803ce651d67363d026bd97d0aded3320148dc230ff81e8961cbfbdb5c9a822da94070bb945";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+texblend.binfiles = [
+  "texblend"
+];
+texbytopic = {
+  revision = 68950;
+  stripPrefix = 0;
+  sha512.run = "d2418ef6b672e82c08b2f7b7f0089a9dea1f514db584662351135b511912faab828956fc252cd854fd2bb1243bc0e1af428e294eb92935cb63b38e73078858d9";
+  sha512.doc = "787b12bc92a17a00fd8278138d0e36d94be377fc23401c4bd677c372dc1d19b4b88c12395366b8ba5d766fbd7bc364588986d7528572510a43ba48ee0330b787";
+  license = [ "fdl13Only" ];
+};
+texcount = {
+  revision = 49013;
+  sha512.run = "82f51346d9474270af6374cc1619ca005206b1bd729ce1559b8b66e361b184a192c7fbe085216a3a64e656197756593f7d76e52437ac562fd33bf09504b0f58f";
+  sha512.doc = "5141bdf4378cf87a19933945d6742427f4467dc73d92f4a470e34474232dbb2f60c4d8db065f812481520f1aa2f8a90d7e97dfc83f0f089d10386847f64f4d94";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1.1";
+};
+texcount.binfiles = [
+  "texcount"
+];
+texdate = {
+  revision = 49362;
+  stripPrefix = 0;
+  sha512.run = "c6f34d5ab0c54f799669c4c44e8c6e00381796ca76b9d2e8352a749effe65b9ffd6ebd139998ab9267d1e54da6471f5f38cc6931f7ff046882261cd5e5440bc7";
+  sha512.doc = "2338dd99b32a1b2e04326e888b718f595a26848bbef17206f92a0a0f26556edddc3e0a06327d86e72fcb3e55270bcdff846cab3bfc37cbd61115b601164fc10e";
+  sha512.source = "30a5c6401d66e7fc2cf0300341c7007881945fdfb267ce4c1f9930f6cb84d04d7895df613215be27da15e307baff361cba6bd4b530ac78f352b74aa81bb94356";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+texdef = {
+  revision = 64967;
+  sha512.run = "ad6b67da367b1cef01db4e7d912685ccfde58babd7dc4868325624114d85e89f5daf3a47fd855dc084ffff66e332ca85c5d77f682d7bfe1b507c43e0a0612977";
+  sha512.doc = "bf84f04183654db606a7ebcd30d4986bca69e633439511cc7d9cf57a3a1210231ed158d2bcd86c5014065d355ec94faf3d5f9ab08be568eadc6637ae9cb72aaf";
+  sha512.source = "d8c20d77f5b5c68e0acf2fc26a8a0d142aec1377554c3f6b6cf469aef28ae2b82ab4c6844ed8414cad073dada8a035175d6e48b53699daf029ca181cea41f112";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.9";
+};
+texdef.binfiles = [
+  "latexdef"
+  "texdef"
+];
+texdiff = {
+  revision = 29752;
+  sha512.run = "26fa84b3090d641efb186947ce4d1d89c30a2c224cfc8fa759da3ba7ec9cc113c0ed4afc1c3d0fa5f9d0a88af4f9b3001d57651df6b5be6e0234fb78ec4f252a";
+  sha512.doc = "d458fa8db6433b4c7fbd23a16f9be53c2c822e396e7f50844cfa6acdd2a08acf8efdd0bd946c8fdc09ca8aa28d1eb25708d3719184634abced92ea5c94d9a948";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "artistic1-cl8" ];
+  version = "0.4";
+};
+texdiff.binfiles = [
+  "texdiff"
+];
+texdimens = {
+  revision = 61070;
+  stripPrefix = 0;
+  sha512.run = "737074790de5c16de0e30dd6f708d6b8ec43e8d387ced2dc6b16b64f38854fad7367884abeab71fd41eaa79dc0c5939904314deed97331f9919a1fbefb0108d3";
+  sha512.doc = "3ab30a8de33cedd4bdb9aa0a84104eb5b02be164de9f6fb81a51dbaa6caabe0029228c311970a3287cfbcf270a5430d6883756e9c28fc924a3286d76bb71217e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+texdirflatten = {
+  revision = 55064;
+  sha512.run = "3cd6cf4d9ff3a1a3daef0bd5a998417696f6645cb54679e99e5424ebbe3926c45acad7b999ee4371392a7ba13fe3f2899438ce66efca7829c7aa1eaef84aa6e5";
+  sha512.doc = "1114dce13ac47c4352e968f42e89582b62b2702bc25ce3a9a4fd766b3bd63607e11eab52d19bc9f809b2b67cd92153c4f591632cfc72dcaf1c0a1b1cfb416b11";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "artistic1-cl8" ];
+  version = "1.3";
+};
+texdirflatten.binfiles = [
+  "texdirflatten"
+];
+texdoc = {
+  revision = 66227;
+  deps = [
+    "kpathsea"
+  ];
+  sha512.run = "02e7d23e20983f96d05725eb91a4f8bed6bdad0051e9f3c152f945e22255c70e7c0b2d93eeca1fdbbc2ca550a7a15d46540ecbb383575b03a4da9bfcea4e42aa";
+  sha512.doc = "80ddcd5d32e02ac87ebba175b3f2e253ca02daf70e38ec5a6db1a0e595349ad33d6b7cf7e95f8af7de621600a58b952927edde04319adec13fa139fa0b634970";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "tlu"
+  ];
+  license = [ "gpl1Only" ];
+  version = "4.0.1";
+};
+texdoc.binfiles = [
+  "texdoc"
+];
+texdoctk = {
+  revision = 62186;
+  deps = [
+    "kpathsea"
+  ];
+  sha512.run = "f3300a088f5ecedfe66ca277f793d3565b5b0f111721a0d73a788d65b72f09d0103a11edda13679fb9e919f11ce9ed3662717c18e46be99a83b744a1f7ec88fe";
+  sha512.doc = "fb403dc17ad839ea64bcf6da84e59288a8745b5eb731051d7df8593138aa5d3b6891d56f52bdbe5c9a41e590f1f36db390e7e7a825d9aaf00d4fbc01c8dc16ba";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.6.0";
+};
+texdoctk.binfiles = [
+  "texdoctk"
+];
+texdraw = {
+  revision = 64477;
+  stripPrefix = 0;
+  sha512.run = "f4d160e494b1579743a83b2a0926df9e8dd69fdaa79d3f4f97e0ed5f4ece31ab380ff6994a1c9015e0af9b842bdfb9b066442ca4b3018df6659922af9f746b0b";
+  sha512.doc = "e177209a937fa1d9d683eb805e9e8929612b4b1ff750955d38ca681b657662712a59609990f77021063a223ce61a92fdd567eee91376ef4b67fd3a322db09463";
+  hasInfo = true;
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+  version = "v2r3";
+};
+texfindpkg = {
+  revision = 67027;
+  sha512.run = "a6fee1faade94bc462dd4fd0e567b7716d0dd057e0c973b9a498949e701bd054fa4fce1cb8717f1d052ab03ef9b894e2f222e2e9a70957215f7266bcbef15f57";
+  sha512.doc = "452df8270ee53864594cef99a7ce0fbb6b325547de0ebcecbecb4463646706fa9e726fd433f31c4f6c44d2bb915431aecd7150921043e50f6b3a2ac5e51eeb70";
+  hasManpages = true;
+  sha512.source = "d784abf4241ccd65c8c910c16171b30d686a53933043d8f6ecf787866e5508d4e89866c90fe2627ae4b536ed7647006f6ce257c8b47676adb77221d08b6ef690";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "gpl3" ];
+  version = "2023E";
+};
+texfindpkg.binfiles = [
+  "texfindpkg"
+];
+texfot = {
+  revision = 68110;
+  sha512.run = "0886ab706ce0f18b0eab304afa1d570fd55b57bc02c8b3b1aacde77c73ee260f688bd395b2e362cb998cc1aa9a2d1e228b118f5234eb9c40ce867a97d86f4ac9";
+  sha512.doc = "d652523552ad401598c68227b3e0e11c84261a3a243afc731f54892fc971c8f22e74bb58b6eb45ac15f70c8789e5a4a9c4dfca81a3dc304762ab97c8bc74e3c4";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.50";
+};
+texfot.binfiles = [
+  "texfot"
+];
+texilikechaps = {
+  revision = 28553;
+  stripPrefix = 0;
+  sha512.run = "b65e737c138a176e6674612dda6b066a9953d8b737fe2e947eb10c058d6b67eb27f154a3ca4f346481f4dc077fddc2c95cc302762a9e9eaa2f0f1d23160bd4be";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+texilikecover = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "fc73ce5601a10d638ea78fe815978d395001a73be75084539498644ac7f3fea0f3a57e95bd80e5f38659891adfd9c817e6068acfe04972a836938d733e0d4382";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+texinfo = {
+  revision = 68342;
+  stripPrefix = 0;
+  sha512.run = "5f79869d29a21aa2d5acd22c2c3abbf12b00afba2564dc9ea779c8f4caf5f44999ce27635d6ea01b9d7e441388e63f1f31238e47a3a68a436bbfe39254920722";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "6.8";
+};
+texlive-common = {
+  revision = 68510;
+  stripPrefix = 0;
+  sha512.run = "1d56101ace5038cd3b8d36c90e026a1c26363535fffbe1ffab64dfbd01408e7cdfb66045e11b13e22491f238e2d3a7015fdeb9bf75fa56f581d2ca5da8f1a01a";
+  sha512.doc = "c9832e8249440656334db12b6ee54b467fdebe1194b6adbb8d28ee375250bc6458e8c1b48b5684eab0ff2f0b55db4f4ab6e77679df447a01070a15c1243e5d83";
+};
+texlive-cz = {
+  revision = 62854;
+  stripPrefix = 0;
+  sha512.run = "5491e3ebe9c70887450f8404b64c01a8f4c4c54314d2acf3d33b8921f088b8885074d53bdb42351198daa9cd2c72b1ef97b1e9af5092aabded700ea6f2b995f1";
+  sha512.doc = "ff1124b30be77782b5c5a1b80ae69c852a5a9e81446c0574007bc28910ea6202662514a34a85858c577bb528f9fbcc11f798614d11914876151d5aeadb3fcd7d";
+};
+texlive-de = {
+  revision = 67108;
+  stripPrefix = 0;
+  sha512.run = "521ce2f9dce3fb329de464ee847c077d449885869e964648e8f89d920231a68bf0d3562e5b54b3cf36716dc3d85b4f0d0591e06843796f216670f963c7191324";
+  sha512.doc = "30eeabe60126b3cc7fb8bd400613a9a5cd0484ea73a8fd0e4c3ec7edee5e985c64c8073cf2b121446b9ea1b60ee54609687c168a75198408a30cb221d4a0ffc1";
+};
+texlive-en = {
+  revision = 67184;
+  stripPrefix = 0;
+  sha512.run = "d77184250d7014dc65e74baec435fe42e784f80349df81782e8e1f7681cd14e3cc99313d61d72c010e5ffb33a0de06890c359e7b582e94662f253f8ed29cb7eb";
+  sha512.doc = "9da87903b5ebfb7ae0ea257ecb77654fe53d93b86fa73d8089b5b2adf46183862e6c67d3b93d6e112f750cbb4af6d6b034f35a1628adac413b61857a91dd962d";
+  hasInfo = true;
+};
+texlive-es = {
+  revision = 66059;
+  stripPrefix = 0;
+  sha512.run = "d055fbb5a4cee9d207f60ee27033534917a0e91dd2e37791290737bd2727b47ccbb3199c0e18f4a564f15e5dbed3599203a7b3611558a26f784713714262311c";
+  sha512.doc = "f124848f80289190abadca35a259d60781b5ae75771687ee44e863ddaace61227217a7c1ba888a85afd28583f1eadd4c91b03e224f5cb1b4516772243ac0fe63";
+};
+texlive-fr = {
+  revision = 66571;
+  stripPrefix = 0;
+  sha512.run = "2b5f6f94f9e9b3af2a18de94b85615bd09cab31d9e3f01b9ac78df5d22fae6ff84d300cc39aa92d1dac02d858c69e86d9d3dbda422574a4c3ce4652b08990090";
+  sha512.doc = "5463c1ecd592e7d304325276f950964cb52cedeab20084137deb0f4b7de1b17b536e4b030cd0e961191d61912f9c4db27f16e6e196104c84ad16ff7b545a7e9b";
+};
+texlive-it = {
+  revision = 58653;
+  stripPrefix = 0;
+  sha512.run = "22874afcd046572176439818fd3a1c2200d00c0e184adc4fcbfa90b2ecc88dac7f5b28eb95c74bd546fd7472fcfdb2c5b74e5b1b5d08ffe4d4a5aa5f924da698";
+  sha512.doc = "0c0d3585bb2c12476751bc5dafb5ea5e10dcaf5149b98e823e607d7a99e5bd9dfd698d73950ecb1efe353435ba2f88be2c45e18c6cde2245df90cebfdbad4417";
+};
+texlive-ja = {
+  revision = 66482;
+  stripPrefix = 0;
+  sha512.run = "92f3767daa4e88bcbcff86aee215bac0ea945645a626e9612e033ad12513e41d15ce8074c22cd39b0fbff9d951608bee799dbefa431c31ca9e8f4681f15242fd";
+  sha512.doc = "464442dd7f1e77598e7bdbb6884453f5a4a2f57d5d8b028d0126e5bed50b3c19f9fefe13b602ad1aff3334e45e8082f2a1328f884ade2ea92ba4b054a41c4b5a";
+};
+texlive-msg-translations = {
+  revision = 69346;
+  sha512.run = "b7d8293947eafc561873918f658e372feafadc7de9ff8b2b5c65bade32b40bf99c1172fbb9737cd8e5d2c057dde88e392561db36c093518f49249198646f7148";
+  hasTlpkg = true;
+};
+texlive-pl = {
+  revision = 66576;
+  stripPrefix = 0;
+  sha512.run = "b43de2e6d5fe66c53370a4c43ab1a66cb08f353944f58756debc40d6651cb5df11824d1eb4ec79890b449ed611b8674c0773a4e477ad4abf30f162906c1f75ec";
+  sha512.doc = "09319f848fe28ca344367f70c826380b3927aa26df7eeb195f6eb176d4951ded181cc47c772f401e1e7936de5fb3a9be3339c69f5bb4e8a5f9785f7313e6baa8";
+};
+texlive-ru = {
+  revision = 58426;
+  stripPrefix = 0;
+  sha512.run = "7658ab0d98a505eda9a86e9ecd64b0e35d9cd332b03066b46825c2a6252b9aa8edb24eb4af2bfc267127b349f741709ada836104dbfc2becadfd97d22e737365";
+  sha512.doc = "40e8b29f29ed61addc2b9e7ce4b73d12bf2e59f1c50c65e59e9c8cac5e6c3ef264ce2071b0d54e15f5029c101a51d0efcda0144e113aaedc714eb1300aa9635d";
+};
+texlive-scripts = {
+  revision = 69407;
+  deps = [
+    "texlive.infra"
+  ];
+  sha512.run = "e3a8fe45541ba71128fc9e269ff7f0a3d45b2789df2d689e741fc87eab51b2c8021ac7e0899fead8d1bc043538d16589663932c32507b704fddb095c028cdb18";
+  sha512.doc = "c0d2c8280df1f6ff0f6f6d850c95a82aa7284d5e637cdb69518e419fbad3404cdae38ec58a8e7b452d0be48ee107b05e9b5ba84cfaa5fc81774d132c3b184083";
+  hasManpages = true;
+  hasRunfiles = true;
+  hasTlpkg = true;
+  scriptExts = [
+    "lua"
+    "tcl"
+  ];
+};
+texlive-scripts-extra = {
+  revision = 62517;
+  sha512.run = "46ac37826d3c60de6c9260bf83d6275d49a35cbde88fb03481a050f92e87b698e9a94b2e520a74edc0417419f5a2dee53000a529b9c81ea6f6244a83480e56e7";
+  sha512.doc = "22cf59bf4dafc7ad9425086bc0aaedb2bf5f7d8aa6ea9c65abde2d523be37665b9c9bee4acb399857eae03613e7241ca1d6099f43cab77a95c10eced8813ad80";
+  hasManpages = true;
+  hasRunfiles = true;
+};
+texlive-scripts-extra.binfiles = [
+  "allcm"
+  "allec"
+  "allneeded"
+  "dvi2fax"
+  "dvired"
+  "e2pall"
+  "kpsepath"
+  "kpsetool"
+  "kpsewhere"
+  "kpsexpand"
+  "mkocp"
+  "mkofm"
+  "ps2frag"
+  "pslatex"
+  "texconfig"
+  "texconfig-dialog"
+  "texconfig-sys"
+  "texlinks"
+];
+texlive-scripts.binfiles = [
+  "fmtutil"
+  "fmtutil-sys"
+  "fmtutil-user"
+  "man"
+  "mktexfmt"
+  "mktexmf"
+  "mktexpk"
+  "mktextfm"
+  "rungs"
+  "texhash"
+  "updmap"
+  "updmap-sys"
+  "updmap-user"
+];
+texlive-sr = {
+  revision = 54594;
+  stripPrefix = 0;
+  sha512.run = "de99d6d13c6b68f8327c0b72dd3ab8aef92d07085f3eb59d94aaf8901d11d542c0795a33cb2bff1ff0dfb1acc99e43fc767150956abd873536a7d4e3b8f031f7";
+  sha512.doc = "4e07f6f015a023af113822e409e03405f49b9786f854308c14f2060cac75d8420ddab090696044860be75f1337b6d3b6e7a45fc0d56969b0894efce3a8c60ae7";
+};
+texlive-zh-cn = {
+  revision = 54490;
+  stripPrefix = 0;
+  sha512.run = "1a7e43528c2dac5c623943b1b268b99f0db6a4876f50c5386a8ea160b8b5e066604d34c0a53cee25cc3f839eb7f4be177e3d98ed51c83c77df6293c77a02e0ab";
+  sha512.doc = "534c505455c5f9c73803c140a340df2882a97516e15f52c5b65695b7c626404336a0e4f6190155b5bda1b9a86d7f4d44ac294bccec791ec6701e56d13c00d71d";
+};
+"texlive.infra" = {
+  revision = 68903;
+  sha512.run = "077dd2060eb3a1132bb392615a36684b42108781e25610bfce2c9d22d743f8abf01f8c79c2b09a8d2a2c1edbbc0a33eec51ab1b0ff07480c0d4ee510e8680966";
+  sha512.doc = "2674fca1b6f494d21ea2e7993e4da75b821ca9c2b02eca47d3eb0d4512a985e2cd7900d6bc19c1af93ba59857cfa82bd3ee61200794522ec755348c067817e74";
+  hasManpages = true;
+  hasRunfiles = true;
+  hasTlpkg = true;
+};
+"texlive.infra".binfiles = [
+  "mktexlsr"
+  "tlmgr"
+];
+texliveonfly = {
+  revision = 55777;
+  sha512.run = "63353a768b700ea11982e9552046dfd1dc3d844883f03099833cabe2af5ccddecebd7ef737fbcd256c90304174165a4d283d4912f8311508e61c723d751619a7";
+  sha512.doc = "46d57a6ebd68a56d55ccddc68006693fcbad8ed8f809243a3ffac7adb82da58cbc28239b57556d5d8d6388ea034b6571557588ff9365d4891145d5cc3fabfaea";
+  hasRunfiles = true;
+  scriptExts = [
+    "py"
+  ];
+  license = [ "gpl3" ];
+};
+texliveonfly.binfiles = [
+  "texliveonfly"
+];
+texloganalyser = {
+  revision = 54526;
+  sha512.run = "85f491af4a3867283d56bc2d98ebcf491e622008b3a70bb2cae03b9deb38170e1c73088d109445fac11fcce6e10aac57f42f03066580a79c978dd19af1f74caa";
+  sha512.doc = "8eb890f880dc56d37e29e2f0bb3228e36031d45010677097136d40959ba7ec0cdd10b5056169325f481318f137a9de2f180438f1716bfa12705fcf0db315e3cb";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "0.11";
+};
+texloganalyser.binfiles = [
+  "texloganalyser"
+];
+texlogfilter = {
+  revision = 62792;
+  sha512.run = "8012a0cca2e408c60a5ead5d59af92ba4befffe184f298ba16f6b57f1487d1e4cb22301a88d61748c8db0fca444bf861e01dbae5335aabaeb2c25e3f94f1ff8d";
+  sha512.doc = "76fbce938945ebfd6bfb78022219fe217b7e6f0ae3c298e1bd9d0c570bfff1100d34034475f2577a9676e01a5bf64428664bb5cce4fd65c7d0cd350c9f156d5f";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+texlogfilter.binfiles = [
+  "texlogfilter"
+];
+texlogos = {
+  revision = 19083;
+  stripPrefix = 0;
+  sha512.run = "d3b5f5ea0dd90e925bffc1ac0f790848d1c2abe50003e2591c8efb219b4a205d48e4420d2000b3de15b1ff9d4d0bd9e083ba1694d4ee34febd68f8db0df16ea2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.1";
+};
+texlogsieve = {
+  revision = 69072;
+  sha512.run = "22822a9ea14652674238224914fd84d9ea09ba1a19fd8eca288fad52c35b0c7e0a0003730b1214e9f358d068eeda191a92dbb2cf2e14bf29297b61177af1a1b4";
+  sha512.doc = "507ed977b9c272c789fabe42b48b60722c09f0548c4f857d9f3207651b05ac593a6e2b94a53f66527591cc3bc15b61a3849a540db3923d196f135dd7cce11836";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.4.0";
+};
+texlogsieve.binfiles = [
+  "texlogsieve"
+];
+texmate = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "52c35f096426385f229b7ddb66c8ec2a20539bbad6296f2bdd230c2da79edf5668fdde0fc7ebac7099a414b622b31309fa7f610564c8212602f71dca7193c597";
+  sha512.doc = "dc1ca347bfb0ba8c54403e643b4052604f98b39ced23d092808cb221e930384f49d1c34794a933b0a05c7691ef04158688653ce69eb8a4b72e9172b4254954ee";
+  sha512.source = "b75362c3b748021934052ef38b9f95ad7047804d5100b2a00bd8f9e396103d2d641f1fc5a3c636cb42ed66fa88488f6c69d3b188e3a55f715df2d19c05331889";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2";
+};
+texments = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6b0bc365ff7ba6a8118a4e83350e73d5c4dc40e6c30a0ed3267f0f20178a08264866bd016aa3a9da72d4f27a20bf7e8f658417561468294745b78911ff46fd4a";
+  sha512.doc = "67b7843546704e9b48f6ffe75a33ab68a5d8ededf3cd45ca329c6ca5ffcc783f4ecb9a663fc4eb94fb554e3c43e753512f82dc8f2f7924c1bf4bb8942aabf749";
+  sha512.source = "92d2216144fcbcc96907fd09ece64428684476ab8e9f3a0c60e898f9f4cf7e0627fb145adbd8186d56a6d5a21563c41d62871e860ad51d9b74e5a0f6441a44de";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.0";
+};
+texnegar = {
+  revision = 57692;
+  stripPrefix = 0;
+  sha512.run = "09e4b3753d99fb4f99c150da87f5602dad5a28778f9489e67f6e4e45d5f9dbdf0edac43826c1a162280e9399d28d050b5ff230713b2e45cc2804f21a76dba0f6";
+  sha512.doc = "403e75ef47ffc6da77e4d61dcc95419932d2b62ebb0c107cf612a195b0e2a24862139a518ead801ee15f56546c44bf9cf0e56aad7b4d8a7ede8529063aa745d1";
+  sha512.source = "9785ac1b0a7ce4f33458bfb3acc203098c8985d6381eec5c610de16b22e2e60ecb386bb5b98da0f9f082b901b9dee096135c5c2a38d5233e92fb09413de214f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1e";
+};
+texonly = {
+  revision = 50985;
+  stripPrefix = 0;
+  sha512.run = "a51d7288abaa3bd03e8f3816eaf2d7f8931340e95e3897ea4a63ae3d251277a78e71ae66b617da6cc81a8100c9ffe64a1c9142369c67d58daf200ab2ed7c9682";
+  sha512.doc = "5f03987ce079f21801f08a7e325a36c6f1065f5cc32ff2dbec7989bdd3a6b3c54ade8f96a71e19553972d3c36454a08b007adf3287a7be7972a8b3ce6961778a";
+  license = [ "lppl13c" ];
+  version = "2";
+};
+texosquery = {
+  revision = 53676;
+  sha512.run = "d454a95139920c24404a501ad3bbde4ae8e809e0f0b6b7c32053d375e0cac31d81087a53d65ab067c9c6dfd988ae90429adbc5d7cd2e1b23f41f46dbf6a25056";
+  sha512.doc = "51bc4e5a9f62b4526198b380fa69dd2d79ff69ccf0915aef4269d890fed057c4130ccca65e0c279e58ebfb72347d627b186534138f9c4bc8d395677c73a2a0fc";
+  sha512.source = "5ed0dddadb7e8f406635d7a2cc309a030826607a76b4520b1f47a07affb603d96577118ba1fb5b9797322aa49a68616acbbcdde39bc8538c54c5d2fa1aebe510";
+  hasRunfiles = true;
+  scriptExts = [
+    "jar"
+  ];
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+texosquery.binfiles = [
+  "texosquery"
+  "texosquery-jre5"
+  "texosquery-jre8"
+];
+texplate = {
+  revision = 67201;
+  sha512.run = "44f2e0008d1b8629bfd15267e3add7490c9a21e28d7b29edc5e37ca51e60bfbc8b25035cbacb57bea5df762ff9783ccfdfe6d9244bced55961509c7ad97046ec";
+  sha512.doc = "bfcbb319719b9f8d4473c50afcd435eaa1cfb906f6107dd7e859bf40a30b452dc135ea1ce0a733c297112647fbc76d6bef16b9474a65d85e6d93e5df96acc549";
+  sha512.source = "e11a6716016b40525f3ecb4906dc1b54650177f28e7759499928ce78af410ea9a159fa3703cf2098aae227b6bc126cb4be35f8637ef6e15c7df94fb8ce4145bd";
+  hasRunfiles = true;
+  scriptExts = [
+    "jar"
+  ];
+  license = [ "bsd3" ];
+  version = "1.0.4";
+};
+texplate.binfiles = [
+  "texplate"
+];
+texpower = {
+  revision = 29349;
+  stripPrefix = 0;
+  deps = [
+    "tpslifonts"
+  ];
+  sha512.run = "7e2efadabaf173fd30c592cbcd2338563b8690048ccaffd86efb079a04b7b95c8ab113b99205cbb2912eae3a709a110d7b152270422cf2cbfd2ab85d42f12d69";
+  sha512.doc = "e61965b5e31b487daba383a4e6ebc0dba85475f8cade2faae6adb8576ec7ec544b518a6e0e105aa185ff82fd6aba7a9ea4abda2a9446d52f5b3acdb42580e315";
+  sha512.source = "3add8eeda886ce6422d3b7ea53a55dc69bb2f5c2e64cdede105a7b4756b008807bef6245ddc2596b45809311874e566263c51e98ec6751b4db9d3c5c5f58efd3";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.2";
+};
+texproposal = {
+  revision = 43151;
+  stripPrefix = 0;
+  sha512.run = "19265b32271b8603d8baf8b16f043c3228606230c1151a33e243e493b6306faa839860f2b07ec9d5d43c57f49e984134e760342bc6302186924e5c95cc1f3380";
+  sha512.doc = "70c04643ced459099ae095c88c0316e96c75e99bba0877198c7800d3b5cc9ac872f74b36adfb03dde968150abb3cb99131fb52ecaff56dfbf1aa85379718a74f";
+  license = [ "free" ];
+  version = "1.4";
+};
+texshade = {
+  revision = 69371;
+  stripPrefix = 0;
+  sha512.run = "28ec64b312161f1157511d4a4dcccb3378bd054ed6abe75830b2eb98b30c5afb2ccd1bc88b0ee0fb049a3610e97b4408b8e66675094a74abe1bde8abe5d1a1e4";
+  sha512.doc = "e06fcb1e6d743561ecc1b6a1a14e252fa5a7eceb2bb0ceb27409dd52c62ec5a1397cdbde7bf61e62b143af2fe6787a49ad3b6b9117f8418e409e54b26deb2a25";
+  sha512.source = "23bc248ea1ee572c6ac13fcf9697810ad6881530a44adf9a16927801b0a951c3fe012295ac2816c85f203fcadfb35f04460510ea7fbe2fd758b05098a4f06dee";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.28";
+};
+texsis = {
+  revision = 67930;
+  deps = [
+    "cm"
+    "hyphen-base"
+    "knuth-lib"
+    "pdftex"
+    "plain"
+    "tex"
+  ];
+  formats = [
+    {
+      name = "texsis";
+      engine = "pdftex";
+      options = "-translate-file=cp227.tcx texsis.ini";
+      fmttriggers = [ "cm" "hyphen-base" "knuth-lib" "plain" ];
+    }
+  ];
+  sha512.run = "79a39678c4b458877737b63fdfc820adf192b4a3c68eb02b9727ed42c16c002ad6ac7d12fa6e45a768eb58d394ba3610ccee4d39de8b73350a39b958665ae779";
+  sha512.doc = "30b47b165484654c1956a1862a1207c219bfae9790f3daa1443bf97bc5e5fd5aeee734b3561c433061987077e84a8feff7eb886ae6d914122eb218bfd0fa57a3";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.18";
+};
+texsis.binfiles = [
+  "texsis"
+];
+texsurgery = {
+  revision = 59885;
+  stripPrefix = 0;
+  sha512.run = "39c270382bb228beeb9ec61f744f66805c76a7fb1522158a59daa5dbbf29b3f4151c20d7dbadf404cab8ca023456b9988d45e53f65a1396da9259832390a0980";
+  sha512.doc = "76fe49291714772ac56097e5869f82868d149959bc091d3e9b1810013c92440c05825e2d585841a3e7fe015d66e09c3e8a92847fe7fbb8bfbe308c62919e8c26";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "0.6.0";
+};
+textcase = {
+  revision = 67755;
+  stripPrefix = 0;
+  sha512.run = "1a4a29b33270f5100109f42f4caf529d3203a6bd1a934a06fba6ed3ed082f0bbdeecfeb7ff158182c88ca7d724422c83be2d170bba78738cb7417fecb13f65da";
+  sha512.doc = "c8b42e576dc6458441703344724bb1ee8f441e79da8d59b1ccb0b6280de878ae65ac48e628f3230ee2094ee285a58636a6e37c29e4458d5f164c36cf4ec93d6c";
+  sha512.source = "1e7e5e16c982ae65aab5cdb4c83e770336dc38833f6027de701114da45c0b45a1ef21dd3096de3933401a13222438a533397661d5654acb991c0ef5d6a8c29ee";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.04";
+};
+textcsc = {
+  revision = 67193;
+  stripPrefix = 0;
+  sha512.run = "99429871433a809febd561793ae53253812792f7ff20f154cd9c01ae3df95c19b1927e677b686b7ef19c6e66cebe2047136810ad287a67ad524d905c6ccb20a0";
+  sha512.doc = "a8b38f3c369c5603d1a696672fd8a2c7a49e1d60c011fd5d2158cb9daf37fb4ecd691d859376c55086f894a9a2769a1b8a78d6b63ea4243a27b02bb2247bfdd0";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-sa-30" ];
+  version = "1.2.0";
+};
+textfit = {
+  revision = 20591;
+  stripPrefix = 0;
+  sha512.run = "96638c0bd5cb14b629f03e4b6a3266160c75bcf05d871ce3d4262ac1c070d9efc0532411f5d8774f97362b148ef6cd1c5dd5253e72e3aebb542fdf14aa6d78fb";
+  sha512.doc = "b88df8c99662a182483fc6d12d33d0bac5f6a32c84be700146d048b799045800cbb69b21599e5debac122995800b0e48fd82395c498a58df503395fcedc92228";
+  sha512.source = "cde6e37b48b1aa49811fd5ec29cf094c7b49d690fb4d884edc358bd3a8a5bf58a815e539eb5e56a95616f54b0737dde09e312c0d2baf37498ead691d4fe1dd72";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5";
+};
+textglos = {
+  revision = 30788;
+  stripPrefix = 0;
+  sha512.run = "1652260a3e946a8847ceb7f937893bad27a24737d9b3573466f7369ce9cdbf900af0ef6c7f0bf3033200664da736e8232c3fbf6db61bb7d51acec1010d13a3e0";
+  sha512.doc = "922ce1569fce889bc4608e9a5da4a45b7c3d2e80303ac36167efe6767c266844664de00384447e288da70383fe91261e5914394a6fdf8644349f785600271e5e";
+  sha512.source = "0dc80a20fcb8926b9bf586808bff2403452e43471983d0bf49bebd310d2bf78cb1e61cd4674f7bfcf86d94ee083d2c8e0099554858549dc5c6703d0f4ca57dbb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+textgreek = {
+  revision = 44192;
+  stripPrefix = 0;
+  deps = [
+    "greek-fontenc"
+  ];
+  sha512.run = "2370f666c2cef43a579e32a755675431717ccfb4bad6f30261a6c67e0617816ffc272c25e0d076d91c4047c41926c92ae375507f36f2fab01673bd7e708f5188";
+  sha512.doc = "9107ca31b645977d56a3b1e37f7b12f0302b1b2531bd2a21883f7931831e70c4383beae77469aab4663253da3109cdd9c53589cbab95f7f0126389d12509127f";
+  sha512.source = "367b63cd318c1e69944444f4cab82af7a7b1dde667d6469ade4c6433960b21a6f8922280d5a46e96fc88ddf4c2d5d3f3a440b55045a67512459208ae181bda96";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+textmerg = {
+  revision = 20677;
+  stripPrefix = 0;
+  sha512.run = "5ef9048849bd2515c1af0ff41d0b5189715b375464c15d4708e0152d99f01839c462a0c9d0a9a12f401375d38e2c53a0f0c314e6905e1bfb3171296448bab649";
+  sha512.doc = "05a087347db5dce688065f56c106d022f3ac30d27ee5d2f420e7658c5b81df66549cda86193f3ce4fb2cbeaad37abe7eb32b984d00d4f25dd0ad51433f8d7a01";
+  sha512.source = "bec01fd7721b5fcc61ac934ebffc3936492817662f4445f082601fe4b7aad576448d33b7ec16ce400c8185704e60238c56bb9e8e31c3b445503673145c0cfadd";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.01";
+};
+textopo = {
+  revision = 23796;
+  stripPrefix = 0;
+  sha512.run = "89a415b1040ff44f62c452e61abf9a5760929953ff0a4740080f79e8343b2b4f4eef9340e5a83fded39a000947dbe7f2916fb18624c4512c5ab58171708de268";
+  sha512.doc = "80bd54a9843fae371884b87710094f72926d5ad8a7e40308e9aa753b01533d3e649ff94831ea75aed264b5f9f5df482e157a1563dc85ab2976cbf9260425c5ce";
+  sha512.source = "d426490fee0b747726dfd7df1f6f72677c9aee3d8ba56ec04dd55037aef563297d16d08a821c2e9a1493c5c29ad6b52c5af23b6bb1f4adec754bf530beb81571";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.5";
+};
+textpath = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "7780972480a1355a05cbcca3c46f3e5284b120a93ed2265f0fcceb6965f55ed793756cf96df63aa8da589dd12fe1b8127bd470077b9f9dda758238ced566b3e6";
+  sha512.doc = "5507082be0235ec2253ddc0b03e239607b9d140952799684e5193e4d3d584846d33a59aa9b1630d058f17cacf7cedd2fe0a180b40207ea8f10947b534784fc02";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+textpos = {
+  revision = 63967;
+  stripPrefix = 0;
+  sha512.run = "77451d38b88f76b80b063267e2dde1e6e6c771c3e4b176a006d3e38351b823a9ac735455dffd6ffb3e23d6198ea7e2e7828c5d9a4e0b0bcfd5c07567901a05aa";
+  sha512.doc = "0b17032df1840b6659c85e3d4801d36e3eb2c5887d03f6c37fcbcc1f030d75fb32991850ae39fccf4e2e9a6498500659ba5fbacad971071de608f4137900a392";
+  sha512.source = "569ec215d0b9d8ea250b5f8fff39a332fcb5ec6dd2830b8d65145428bfd5de9c3f2320ef342a887b712d7e7078063ac3b3157609b57b947fbbfa8d5badd578fe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10.1";
+};
+textualicomma = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "9437756da9639dc29fad64ea7bec0b2fd4ce783065ca00fb522ece24c33b99fb2f51f82564cb382f5f39ada825353f007d14a36ce5d9d5b1cc4015b71b8cd314";
+  sha512.doc = "a1382aa53f3df15c57e391420e7f4164a3fcbc8e765cb53a87814a4fbff7e354268f8ff7e6bfb1113f269fa426aac480fb22c330f234d58492fc4f8960fa2960";
+  sha512.source = "1a42e7e80fa555dbc81c7f133c6be0ed265756f826d701c3bee5dfb7b1e2a8c94c2bcafe6421d89ae82aed2c5e1a367d6d06df7d12941325c0d0148372a9091e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+texvc = {
+  revision = 46844;
+  stripPrefix = 0;
+  sha512.run = "cc149d490180e58e9796ae0bc962e51794400384671eee53c932acef88512a129dc3d87ea4378247813acbd3ead010014ab71bd1717b6edb0bef4b7856be8aeb";
+  sha512.doc = "e8639a2ffdd2d40b27545c3f4265e473bfbd81a028632a082199fb0dba7ea0b0468bdae488a9eeea63578bdd610f7e16d4f4da846f9316dabf5645af95fc8cab";
+  sha512.source = "4bbcf12af602c328084e76e339d9ca33c205f08faf489be3008fa5fe0b424631e940baee1da9144fafac42e09fd2d27a7726c16e159cfe24c70d32ae1014d198";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+texware = {
+  revision = 66186;
+  sha512.run = "532cf8cfb19ea5c8ed0fe6939fba0ddfaed58989a588acef18ef38c587d8485295e9d438487fd2225a0f68c12d0dd8c6263d597c2e94cbdc96ed074ddd296729";
+  sha512.doc = "c4be0bdc3490a0bee08d6a99907f7abe1145ae8f8f89dd8665cf6a8738d07c7a537c0d7e767b56a6eed3a00ea169729b4d78208aab2aa883c9fb422e4dde3383";
+  hasManpages = true;
+  license = [ "publicDomain" ];
+};
+texware.binfiles = [
+  "dvitype"
+  "pooltype"
+];
+texworks = {
+  revision = 65952;
+  sha512.run = "2d0f90699f7ee4fa6dfa9eca4a62c8deadd9ee8303e17603bd32d0b2cd41875e76d1cb28879139dd62e534575f1dc8e71d6ec401a65ecc333f5b4bb636ea5a67";
+  sha512.doc = "767bca3619a0f645f23b029e1d8b84fd7333bfff5df073026423e83681abb2c3e60a50f843aeecf95aaa54b29018f145a7b655e2dccae0465626e84ca00d1b99";
+};
+tfrupee = {
+  revision = 20770;
+  stripPrefix = 0;
+  sha512.run = "ee935ea5c6563fd8da4f403a1c3583b289b64e212aed4b9e3703ec345dc47c5521d291e1ae0a10c9aec2ebfed407fbf14e804bf51ae4c4a1e03046fc7cd0ad5c";
+  sha512.doc = "19da18d665a8369e58a26d4e979d5fd6c8b3187dfba97a281008627aeb8c5ee824dc2ad3f5c94c3b35c67fe28a646f44aa5f532912de5f5640b0a7d56afec2f8";
+  sha512.source = "30133dbf65f1a33f79ad8b2c8ee84ff376b39d12cf0d48c4e72e86b393e0d55f5768c7af5f5f3f6ff1d78fe2c7d4f2b09d2980107dd5aa1d94fb5ea27545ee9d";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.02";
+};
+thaienum = {
+  revision = 44140;
+  stripPrefix = 0;
+  sha512.run = "25f6bd1e6e9586b261721b66b6b193c07f60dc074f7b7b1911b0a8ba4f33815c86945bcb3946ffe153f70f0dbaeec4dca8e5574f8369c754a6151fc271029f3b";
+  sha512.doc = "246dbb624a2e2e30bd5468c2596e7b3f7183c7dd9d03eda42fbed88fe51f16b53801ed39f85590d2739a93d48bc413fce5c52685d5425615f650b19f56013261";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+thaispec = {
+  revision = 58019;
+  stripPrefix = 0;
+  sha512.run = "02434f56fcc8ab499b4f80439fe9099d5dedef00d6dd295dfc47644a7b1397486a419e1ae2b89a0aefd9cb3a093974158a72a2eb2921d25df3231a7628897968";
+  sha512.doc = "26b88ea1b87d8391b8864011449116df3fccbbb978aa76e6cc51dfa893eac87851ee10b1320350de57103b80c6bfb30ca97dd1cdf13014157ea35eaff780843b";
+  sha512.source = "e79096902654f302311ab531f8ead3ab9852323ed774fd217aff94c0e1ce456c01a5d8a28854b7c5d65d0274318a22cacd4dc04a00498eaacd92f538f20f6013";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2021.03.01";
+};
+thalie = {
+  revision = 65249;
+  stripPrefix = 0;
+  sha512.run = "695d16e6630efa10363d6c94f410cdf11947dd0c0e59987cdf01e0c699c53c994a702b3802b8830e38b6f5b0ce654af5710ef93b094fbc08954eb8d9bc5d2915";
+  sha512.doc = "f2fce885e0aa65d42413ad7ba26a38ff787fed8c1ac5d6434e949e229d4f728a055a6a2ed80f36fe94f6fdf11cac3bafbd2a945cb9bf2ec0b436eacbe1ba58aa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.13a";
+};
+theanodidot = {
+  revision = 64518;
+  stripPrefix = 0;
+  sha512.run = "f7c8f9506516c52ef1714e0abbf594f1f6be8492aced3f502a7f49c2a1b12c69b6c57c01300f71f582639f42001c3ece2bad4f9b4ff2b1a1266c3e36e9bd0d91";
+  sha512.doc = "0396291a9213e2b80607572a2313801a6a93f4ca2f54889a4c18e8330ffe9f057b856ff957d58d61ddc2828838c6db9e45e26cf611ff88ee80f3b2073668ed64";
+  hasRunfiles = true;
+  license = [ "lppl13c" "ofl" ];
+};
+theanomodern = {
+  revision = 64520;
+  stripPrefix = 0;
+  sha512.run = "c940c73df2143395fc4f2887e0273850787cda96cf586b0a2067ae39efdcde999338eb7826fac9af5e97bca978bb309b0478e1dcda43cae0a0b3266430d3348b";
+  sha512.doc = "934ad9a47609277dc1a10bd20f55f0ca01b6f1167a574ee8609352d94f4aff6305db9ca0e3ca5b83cad1f1eac74e5227fa92acd65df9de3f91abcb653f60d21e";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+theanooldstyle = {
+  revision = 64519;
+  stripPrefix = 0;
+  sha512.run = "b2df891fef113bcd50ba63cea16942738a9c8665a1644187401ba471e53c2f35070c8a339c1281e4d679dae39e22497de92d854ab311720903e676dd7e7b7413";
+  sha512.doc = "cb896fd78684c8c21ae5579da4b510636336e4959c0943577657aa90d2d843415eaaa2eb42e7d1cc031f6a50044a7702c7d01abb8af7dabd4b6132545c799a07";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+};
+theatre = {
+  revision = 45363;
+  stripPrefix = 0;
+  sha512.run = "d450ef176d5543581316ff36590eba2ed829a3f2b8a019fa8ca379af0ae2aa4df4e4e3068b52ed91edec4df33d08aa78b1f5f21d0fdf33d0aa718704e3de2851";
+  sha512.doc = "cb4920d5acfe0e1288c7d459d15b06b9ced1130b56ea92c9ed49376743cee7e3fbb694362bac51f2660269992d64717effc5d8e9f52a21337fe7eed51a4622f6";
+  license = [ "lppl12" ];
+  version = "0.1";
+};
+thematicpuzzle = {
+  revision = 69356;
+  stripPrefix = 0;
+  sha512.run = "3dc42fb8b0d1b5aa3f68af6efa29a683e4a2d7b14f9e8b79aa56cecb15356cd8a9ad6487267b2ca978363ed7e8b5988f3efbfb2136774e8c5d9be25ef65f0bd9";
+  sha512.doc = "cc3aad57de0a8f2ed5bcd46d391820a2d8d316d7fd75d5d4abb8a6532fcf05d6643aad83570413dae441d14956747265e7137b05fe5512423d8fb3c1fdff5f89";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+theoremref = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "ed6990b6c7a9ec4e72770252bcd07ad5ddf4015cde0129dc0a89cb95bc96958963209fe46f0ba9a614ebc0cdb358d8125ee3eb22b9a4249367d975ec12250a3e";
+  sha512.doc = "022ef42c6765c661f5828a8adcad7710d74f168b3a2dfad0e73218d1a5295b25ea24d5fa010a01151939e87989cfd6457917167e69cebf5ee5a364347eea5f2f";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl2" ];
+};
+thermodynamics = {
+  revision = 69086;
+  stripPrefix = 0;
+  sha512.run = "0bae277827251a42a366ce85aee49d762e08025b96472f8102a54b7a9f1e74622bfa0064aeaa6dfee5248ef84977fd47389fc91049c057caf75c33930ade37ba";
+  sha512.doc = "3e2ae382e61ec8734e6cffe6c4d5efbe853a3c6748e1d8e75c2e4fa0ed6e7ada7f8a79424f49c43a753bcf6ce867b84ee353c553ba412c0386d58d2d4f5f437f";
+  sha512.source = "0ddadff5d744ca8f45bab8f471685e9afdcb494e60aa6ba0c32c8a75bce536adc6544c097e95da02457059b5bb96ed37508217577caf16c963af6e07651ae721";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.01";
+};
+thesis-ekf = {
+  revision = 60228;
+  stripPrefix = 0;
+  sha512.run = "7ef62e88cf25c1b7c37dcbdba00dca0fe522727cd6d1b5bf27cdea73e4638defd2430c2440879479427b2faea91315203179b8f45224d68067ad46810dfd6da0";
+  sha512.doc = "50220e7cdded7a36703fe4e0965d19e18c6aca7a8f738b4808efc28d472f01522b456474bfb6c4d43ecc61d81173f0025918b302083829e849059fbcac5e096f";
+  sha512.source = "a479e92491a962f549ba9a2863504efadfa5a1515d209eb26a541ad88a5bd8657ee3f3492e99068f3dca869e8394ca9008a074c17d139e2a22325364b0a7d89b";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "4.2";
+};
+thesis-gwu = {
+  revision = 54287;
+  stripPrefix = 0;
+  sha512.run = "7001a1f11d069fd15894b34a2d220394924802c3ef1a37869e0d717bdb650bb53c01078dc14760f7887addece64bfb0f6662741bfb6dc4dd77d2ff1f3d0d7415";
+  sha512.doc = "e53925a31286089cb5e8f051cdf969c6bbf29db0ae2629c1a584ead2885cc0e1f95c5b2cd9583056c8ab40b1c41d4f8203b876a1e6365d8967e3942440e04e2e";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.7.0";
+};
+thesis-qom = {
+  revision = 63524;
+  stripPrefix = 0;
+  sha512.run = "71aab07394cd5e4a433c02d80ae1b81c059edaec926e242861bd9a902ada1af25352f660d892718c88f0de05c4eb4a4dfe2c07f68f63f8d28d2d0c2923949294";
+  sha512.doc = "47148e246b917849db3c280a1b6af3485d24a5d809cb252c597b4c731a058eda5824c99374bfe2bdb199057f1c9493506ef757f6c25e3f2d38a11c8bb8a5613d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+thesis-titlepage-fhac = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "62cdba17287f90580fe6273d1ca9143c9fac01d7da214a20413995b925c6eced385b3a5c172e8bedb4f17396ed7e9b78e789ca475c5efe542283d9b421bd6ffb";
+  sha512.doc = "13378f3ef37bd1033d009d03772244e048ff2a16b95ca8a0f14feeda8c44b29036276c41aae812cf1c28ac5684edad56b000f8a45576bd0065fb844f5b6dd189";
+  sha512.source = "34b0f176df84b1b1d1f3e47c7c01d640b0e74e30a86488e07e9e67c61c80a96cb1b9ec835266dbee3e45a952f406ade5af5173e7df33f1d12d1b1f5d0611ac75";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+thinsp = {
+  revision = 39669;
+  stripPrefix = 0;
+  sha512.run = "ddc80b4de32524ce76fe34e8f88d01e2db18a8bbf60a718454a0303aea8082fc2e495c89c2ad0a7459ed3151e890e30a1263267f249581e24bac87113a5fd266";
+  sha512.doc = "b5b50522a4a7b5f7772118d95fdf42e2f570ac35c49a8690560df27df0754a170acddd782b516fa185c0f6ef2abb3ff8a9f366370c2ad46e2e4d32dba21e634b";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.2";
+};
+thmbox = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "83ceeb0cf84ff75afb734f41be5a5309692c6804a5a20627c54cc8760f8ac5e205cf1a24097c8b8624823668796092d620f5ffbc488f63b87e7cbf9365279aac";
+  sha512.doc = "ad8e0710a15781eb3164527dd16ecc2050d3cd3317c386841ad8612a9ebc6055a1501272e3b01bcbc6a7f1ffa80455bf2ccdc0cc9ff4428c9688e9f6404a16ff";
+  sha512.source = "1b559b9286a97c3157d568982513541028d96cfd5d67ac541909586251ac3729574c23a05ebdfc42ab06a92ab2ea0cef878b1f42983d06fd48f825962de57cb6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+thmtools = {
+  revision = 67018;
+  stripPrefix = 0;
+  sha512.run = "7d150df3f868339c6bcccb2e881105d9eba11bab8cbbbf42d5a696a7496cfbb87f0ca848e5cf7a63239e563a75515b15d4acc4a72046ca9539c4597e077333be";
+  sha512.doc = "939567cab1c401d0946de706105d23add703e991bf36dc58f4e1d40fa35b5b30b37a9e32bc2d252f247da1f1db654bf3aad460dd1882389c00a8e11106270840";
+  sha512.source = "a086c028394cff2fcb5c011d2a69627ce2f9651694b8e1596ece652111e88d43c1f1e358ae4c1201ddb0166180d6dec9eb14ebec8a05469636061c224c6f39e9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "76";
+};
+threadcol = {
+  revision = 28754;
+  stripPrefix = 0;
+  sha512.run = "e75f887dc04aa55834c285d5e36babfd0844b79b9d1cc5cfb2eb6412bde9f42b651bfdca9f6819b27f6615aff6f96031135f1a6af3b59503fda34e7566cdb01a";
+  sha512.doc = "626ac69b0a26fdbed51876782a9ac2e3b0ab9b32bf3b2f32ce19cce080b5cda40a62160f453199a76b58903d762cc8085a8541fa2de3adc5fea6266592c06bdc";
+  sha512.source = "df757dcfd1eec3e8da04939ef69d04ffa59767544a1d5349eb538e111843f4c6dd4374e15bc6e586edac629f61d6979688c229381ad3cd4ad61dc2d48afa7c10";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+threeddice = {
+  revision = 20675;
+  stripPrefix = 0;
+  sha512.run = "66e6a27aa277b45b44c156d408c764da5bee6dc540f2058a783f02bbe806c95052267a5ed79ea49b5dc356d0f03747e9b186542640b34753a693ecffa158a6a4";
+  sha512.doc = "c750497229b8bd41eca05b221ed2ca2ca49db8cbbff03bfce2712869d352ae0385e4c10e9730e0b2f8286db9af1e1b87f10d599788a3dfe8d41c28efb8b0e4a6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+threeparttable = {
+  revision = 17383;
+  stripPrefix = 0;
+  sha512.run = "f947dd01e56f6f3db8a4ed0b8f3ec564a38486fcb27f30bb3bacdf31af8360590e7e3886cc00cfbab813213974f4b335ff06ceb521d25519e8b95e345a002692";
+  sha512.doc = "6b5eb1d6ceea740ec54ba935c45f03c2e6328140e86122a38b90d84e375382adfcfe14e2e9f56384f825c913140f01a1eb6266d2d46f6b813a34b4da652ee31d";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+threeparttablex = {
+  revision = 34206;
+  stripPrefix = 0;
+  sha512.run = "9dd33dcb7f9eebb9396a6a05ac20e9bb221260cd80f355b23f60a0466c64847ebacd8b0d19c75b3d9cecd9c522a8633468e7cc86121f7626141c066e12f977d6";
+  sha512.doc = "3dceb0aecfa2ef09bc20250cd38dd698e35b2cd2a33fb446e78a39fa654899c4f6658a18b95b39a5bff2279a0cbeeda71bcedcdb7fa91d148290302b73e7a64c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+thuaslogos = {
+  revision = 51347;
+  stripPrefix = 0;
+  sha512.run = "584d8f130844ac834be8f061bd8078afcd8eae2e4d22e33d8a61dea8ea637476532181cdc7df9f1710ba5d8dd022a64dcb561f21334b830387e9a063ddbbe426";
+  sha512.doc = "5a2298e713e4a0711b01fe7fceae12bf20d6a0fcf91cfda63313e74709586532bc407c07be1807eee5405a6b6de74fe976b2ac56fdebbc344d59255080d80224";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+thubeamer = {
+  revision = 61071;
+  stripPrefix = 0;
+  sha512.run = "8391507179c7237588645f08c0611ab441cb4f426808bece8122ddcccdec8c94457efb8db75f7078b6b2adb6430350d5279bf9efa091cecbc263d31fbbfc11c4";
+  sha512.doc = "fb2383dc358f2d0990a3f697746b6941a04116af8f184dbc37cccb100bfb19fc72ecd876bc581234c6dafc2c897576992fe8f741fea07ee0889bb1f51555601a";
+  sha512.source = "775b719a02f4ce703a37844cbff77e476c35dc105f8c370e6213f157053a397ac80295cf67c84229ff565e997bb89d89f7db209c7f84d8e47b4c92acca98ff48";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+thucoursework = {
+  revision = 56435;
+  stripPrefix = 0;
+  sha512.run = "6342b407dac5780e1e35f114978ed4466c547a49b1099ecec8cc6169817d3c1405be0edf5f7cd3d82e5d44f9a7e9d1ca762e82970898e92cc7ef06739eeb65ca";
+  sha512.doc = "565d7846b45c8c0bece73da1010f835d5d54f9244648d61747c9fce7a8bc2559a3e53a2327e146f559a6df2809250d7057befbb6dcb9dd2026c76f1d1dd16fa4";
+  sha512.source = "34da6d4ae8ad815881fc2f8b7df70889ff99adb3ebea2598e0502725b229cb5a5afea11847c8a1c5d56fd528603dc8aaf43c460394ab301dfae1abe6880f8616";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.6";
+};
+thumb = {
+  revision = 16549;
+  stripPrefix = 0;
+  sha512.run = "30290cc3b8cc48de6c601fcb3d066f0533bb3f09f053d7912db7a127d8327c4aac0a96499b7eaed36b8caf4dcdda5c8f34a5430d69e1fac70510f426c92ab9f4";
+  sha512.doc = "29abd2e57cf17edbfeea06c041666ba29e436defff1600df7222dca6160e7be740b64647d7a44a10f6f803011a1754abd693048ca36c4c372ee0da52df2562dc";
+  sha512.source = "1712eaf8ef694998eab8cd0b95c6e8affc2a967c81cef6d6bbe8d985137662631254318ad2dad9a021a70ab849986e727699715b27fca1a5952df111474f92e8";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.0";
+};
+thumbpdf = {
+  revision = 62518;
+  sha512.run = "74d1b32b1a48825c423d4346258f6f1eea60d2054ed38b3d9d4e207a3375e35b6e80d87706bc2d265f62606a449a0a665c8698f4e1615b39df98f6f54b309fff";
+  sha512.doc = "26f698eef73b85181abbd155e8ec8f6057f7ec0c5ed1448a256e4fc2e41cffc77474fe4c3695d611e8993bbb1afdf238e3db3a90bc2b7af145535f726af027ed";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.17";
+};
+thumbpdf.binfiles = [
+  "thumbpdf"
+];
+thumbs = {
+  revision = 33134;
+  stripPrefix = 0;
+  sha512.run = "58e489402fc44cbaece118203bbe7011494b7ef16ffa0e5d60be2daaec0c4ef2d048a71f0d9373a1683aa780fd20e3d64330e199596effc7cf2fcdac34f1faf1";
+  sha512.doc = "4c58ff61d64b841b3a3bc018f94c193730129edf45c87fcb9c85685f748ca3db1f7d51969dd25882848cec906485f739f8f07c8bb2f8bded580b59ea93032a14";
+  sha512.source = "26458ebc431f64a324c39ec370f2b0714a56563decc944c64156f0a6a3e22664e89239bbbfa7710d9b46706657b48470ffd1da7a1801aaca2732b30e01935fe4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0q";
+};
+thumby = {
+  revision = 16736;
+  stripPrefix = 0;
+  sha512.run = "485bb2670133c3c83f0f7aaa685defc6d36f5d24173652d869f526770e1f55c55a31f3a3180f115aef45fb824d9032ee915b91c1c59b9b33794c95c92f03c3e6";
+  sha512.doc = "bac645197085968fe8a7bd41f4a9ec3c6e51e17e6750b87ca1a458acc9f6a4f244d1f3b36b9c622c98492b90abddf9a4df1636b1874c02820dcdb6340bad0910";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "0.1";
+};
+thuthesis = {
+  revision = 67127;
+  stripPrefix = 0;
+  sha512.run = "8a70b2f51275494437fde3ef83e0f0d901b7164cf9e330d19e00ebe79bb9b4215a6cb3e7137970eb528904e35ba7bee3329f32b9fee64181f57dd09883582207";
+  sha512.doc = "fabb0e47004a0fd21f06f442d0b7eb5384242e879af7b7303a7c354d7226213df082d3c38ce24cc571d667fa2b4d978741fda5518871d727ed491a60f1f1637a";
+  sha512.source = "3f78020ca5563319ed78c851f781e1a40f16dd234207bdb2e6ddc38cff5f622ab7891c37bf7a187d927e81d9bed96686547d081156700654c23e410964894ab9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "7.4.0";
+};
+ticket = {
+  revision = 42280;
+  stripPrefix = 0;
+  sha512.run = "cefb3e06df2953063e9d12f19f03e973212e784cebfd2d6628d2e9ddb443159b285b34f12238f6b77813cc48e86aae7018cb5bccc4fd158f4d891f05fc51dab5";
+  sha512.doc = "fde4b06ad09837d1d6b6efb275800e32f617619f9c18d2dda5924b094f860492053c4ee361a2fded1c9f4509ba5e615601b183191c0cf064af24cc59cfb23748";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4d";
+};
+ticollege = {
+  revision = 36306;
+  stripPrefix = 0;
+  sha512.run = "92bebbf5a5e7ccf7be09c205d9007a780422c625d9a308eeeae50b2ec4ba3cc6755a37fd8a49e24b7a381894cc3791fbf50f54348c3ac584a2c0d9a693f93a56";
+  sha512.doc = "f0049064eab926eefcf77fe5aa0606202cbce79ed7f0e0f1bafb171ad82b72daf09fe2c0cdf79720834d6349d9190f1d3069f155df922ceb469ad3453a6389b1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+tidyres = {
+  revision = 67738;
+  stripPrefix = 0;
+  sha512.run = "6ae766645bb046c18c0ecaab4d567ed3b66800696a37e28cbc0100dd50db7d89e03b5f2bfb8073a1d819f552f81ff8ecb692889ab7e2cf28210474663d4943e4";
+  sha512.doc = "53b927e92aae7d598eef4de6035b8165665a7ed06f37a9457ff16b92eca2c075045f528c62b179923f03d790f163741f5a900b505a50baa8b299d6fb2513bd68";
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+  version = "2.0.0";
+};
+tie = {
+  revision = 66186;
+  deps = [
+    "kpathsea"
+  ];
+  sha512.run = "ca58ca773fd1e4e786f12e1acf9b0e39afe1709c73cc7a0da4331576933c1a4aafd9eed3a0181bcb20b6087d409c73f78fc2a77d96bb75d183996593b8aadadc";
+  sha512.doc = "66e92b91bcf9b6c44d8d2af141d4980a2b0e0ee3a9dcab778eae118debe4ce4459c933cde6a5cb8cf07af8b5d5d001bc1bcafa2776ae64121ba6308a7b19b3cf";
+  hasManpages = true;
+  license = [ "free" ];
+  version = "2.4";
+};
+tie.binfiles = [
+  "tie"
+];
+tikz-3dplot = {
+  revision = 25087;
+  stripPrefix = 0;
+  sha512.run = "6d4aac2eaeebbe2a4827a5a40e8571c48ff4f5cc854daf130ec7f20f8fa06135bae1486a42b223410be848b72be2c19d6e2ed798694ef5dcdb5861846bd9c072";
+  sha512.doc = "0fd9bde0f12ddf5a4bf6e2e1df66a9aafa42e81cd945b41e09e8d289c57b04faddd303a415c36239e6686be90f06e8a7cc794ea50d17ec54f1e25703314257da";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+tikz-among-us = {
+  revision = 60880;
+  stripPrefix = 0;
+  sha512.run = "13e082734e52205e78e804b708c920836c04e9b11dac23e49a8e86d40209ce1e074ab5ff30d97b528c027fd45252824a41daa850d1a9669987a7a59210f7b2cf";
+  sha512.doc = "6146f3ee670400e39771a264eaa81a9b4b701a47487c7a4f9ec26ef26a93641062bc61893f71c4f66c8a035d52d763aa94740d9a00f5ce5b402272d67af93ff7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+tikz-bagua = {
+  revision = 64103;
+  stripPrefix = 0;
+  sha512.run = "bb9444547aee41fe90a4f8b8dbdff080b594d05182798ce87274dab5cf3f0510d428c79ee21eb90107ce9b98a0cc906376d1b49ffa80ea57598c4418152f9ac9";
+  sha512.doc = "894fcec05e43df7fd13fdcd5f51e50128defa5a3ac67c2681f509740906449322862d885e5188861a1b92d6aeee9b6d4454ab1aefad74c5585efd937fa789e0f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+tikz-bayesnet = {
+  revision = 38295;
+  stripPrefix = 0;
+  sha512.run = "b3c535af8afe86e311e4c7371addfa484403a0a9571a17d1cb8d39dd7242aa4798476352bb04a6bb214086f1ed4985595c502723444a032f9bde04423c26bea8";
+  sha512.doc = "2bdd764163c606579e68099873844fdef6b9a36495f4117b99ca483bbe43334965a177f398da60e82c11035b5c7b9e0513ae56e6868d6238cc0c798f47ab37e7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+tikz-bbox = {
+  revision = 57444;
+  stripPrefix = 0;
+  sha512.run = "e68c3c6922c8529bea0b7c25bafc488d7aa41ad81afacae0f674caf637a1638dc8666bd16628b123063d94031d4cd4691ca127bbb648c1fb5a20d72ca8a41fbd";
+  sha512.doc = "428d94e87d51e000c5fed4f5b0bd87b8fdb261b9550e0c67e05a69fcee7a4ce3ee070f262d278e21cbdc5bfeea790c6d17450bc91e1e51250b572e754ded3df8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+tikz-cd = {
+  revision = 59133;
+  stripPrefix = 0;
+  sha512.run = "abe5952a90172dd74ddfd02834ec9fc632f26da00450c310eab2528d5b52750e80225219b75e778d1f87b2279e654bb743804da19ec7da91f12e4105f9ec3447";
+  sha512.doc = "ec354963bf8915a0c0b68fa0223c48ac48fc0450aff936c34e4c95fe15641319b711b753da7da542352e0fc6e9bbeec627de5a3023b4b90828ee05a81ca5d255";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+tikz-dependency = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "f13e652066ed2237c22b397b76f628e9108a999138ab5d8349792551205cada4709031f5c4b458982618871d4d65abfe5623f700ee9d8f474c66b1e31df374b8";
+  sha512.doc = "3ab32e535d11802b3a828b8b49e78f31df5e5d3c7c36509a3b8aa0d81c02c465ec84d45b9d951ad833dea705381b4df05fa3d9a478db9af0622bc0d69008b227";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl2" ];
+  version = "1.2";
+};
+tikz-dimline = {
+  revision = 35805;
+  stripPrefix = 0;
+  sha512.run = "c7a3b158a8acd100192b7dc936f2e452513125389f72c12f0c3818bb4e771abf0748338f13603765904adf1d808fc2b263d0f798999c52638e610d24addcc641";
+  sha512.doc = "62edb9667ae4405c798a00c1d079ea9ed5bbdddd76e4a730aaf7405d175afa146fcb7bf43a551001eeff1f683ce3b47a0a79fab66b7410be59f18f4f6e409ef4";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+tikz-ext = {
+  revision = 66737;
+  stripPrefix = 0;
+  sha512.run = "83094598e986b8225ba72ca5a151b8d7b475b3fe41199209e816ef9e7d7b3609e693a321a219968d38d78aafb5fe1ac6058e6860379687077abe4921497d7cb5";
+  sha512.doc = "ca2e8a322e3f3a63084d2c0b79d3491fdbdd1b6b363e66d721e691ebb73241e96ac7f4ec352588f46a49ee1b16b4ea214d145692f194f67b5ce23d12701e1eb0";
+  hasRunfiles = true;
+  license = [ "fdl13Only" "lppl13c" ];
+  version = "0.5.1";
+};
+tikz-feynhand = {
+  revision = 51915;
+  stripPrefix = 0;
+  sha512.run = "5dcaa2f5c846957f3583ac5bfba14c668cc855c6dd930eb5851c19d448efdd207ff34599b09379354d0c772cb1890fac375d75d61524e64148602f4b5dde4355";
+  sha512.doc = "b0cf316dafb9494fc21d5657e1e3c1b4780b7c30e2fe93235d6d8538979471c31989e4203575dc66204fdb1cb11386d290feba3070e43a273b62ec59a73047d9";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.1.0";
+};
+tikz-feynman = {
+  revision = 56615;
+  stripPrefix = 0;
+  deps = [
+    "iftex"
+    "pgfopts"
+  ];
+  sha512.run = "34c147e6ee16643e99d2c8fa789b39aea6f3b9ae7de93fd5c65d1b0daca1e9514d484b5b38892a0cffa1aeedcd405df0bc6621bf68e587311bc9fe45205c29fc";
+  sha512.doc = "ae0510a7971538fe458d83d4da4c78f7d607c7a1298344a139c02c49985f9005f6a81ab15f9dc621929d70d634c2cec4189ac4a2955e994611247af0c96986f3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+tikz-imagelabels = {
+  revision = 51490;
+  stripPrefix = 0;
+  sha512.run = "b74cf7113b288af9e98ceb801eb4d72e4785ce30390718c4c0eeabae20c49ca8eba91342b89dda525f06b9f436a427277c4ae8415748f1487cdb073088ed26c8";
+  sha512.doc = "843f943c4a0e12d1260ee17f9f908adee568100b1e415df3f1b383fd83d70065c57a21290b89923d7ee84819356a366a467e42fed61370b214621a9ee58ee97f";
+  sha512.source = "2c6d1c0b599488bea8d53c136d81881d8cf15497e295b6e0701bc8570f2e868bdb1e0149f25943102cf6e9babfd53ad8401328224bc16a305f46748857c79572";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+tikz-inet = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0c4ecd55d10893ac8bca7b8ac38f2366f30cd989c5d6ab4dd501047f01c0285f8e4b78309dfce06525bf525cff77e2edd56429aa166f24b9a7e07586e3befe96";
+  sha512.doc = "e61f0a7879dd0ec016b6c85d66e6ace6b953adc2b9abd87306dc4d071d82f44984e6e25530db3fc658650f5ca74e5c237aa64d18e60a3c5c8c7f57c6f42103e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+tikz-kalender = {
+  revision = 52890;
+  stripPrefix = 0;
+  sha512.run = "8bda7464a62135fe2eb8739d428aca770ee6ba90d3fc08037ebd192f6e436116b59962ae7e0f0cce7addc6a44d0bb5eed47d8c0ff83371a070d3a5c0e8b1feee";
+  sha512.doc = "d73e1427574212a2652191b0afce180155ff32b7d8d63f076f2b5dc71c64d1d8dd562666f8a7ebeff445409fb884ac79a66d0271582b0b6b72e84c5fe7c44f7e";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-10" ];
+  version = "0.4f";
+};
+tikz-karnaugh = {
+  revision = 62040;
+  stripPrefix = 0;
+  sha512.run = "aa7bb0cbaebbae2657002c01098e9904c21483bb9e67a415834d54b2bcdeae75514a2e98a53e98ba87996b3147af84226e43ec9d121eff52b4f77d57d1802db5";
+  sha512.doc = "25ccf7b40c1e808bf5fc45241d3f811e603bdeb770b21e5d98779e04ccce1ff67e73012816b763a083d07f1c62a16cce8feffc0e1c87ced8b83339de84d4cd4f";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.5";
+};
+tikz-ladder = {
+  revision = 62992;
+  stripPrefix = 0;
+  sha512.run = "c18340557f53f0617831e7e6dc904840e6f1e04938684a21f2897297c8a70b95cacabe4a00e66d632026d8ce7728334eadaf02cf5bfe4ffc0e746f3ceec36fb1";
+  sha512.doc = "d77c8771b36df84e61cfada1f56300b10908727a164788b3c0665f14a26db5b03a3ea7f4a0fabf5ecc820e90a27a73c0ff0a7985e37e755852ac401b7143e7c9";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.3";
+};
+tikz-lake-fig = {
+  revision = 55288;
+  stripPrefix = 0;
+  sha512.run = "3c1c8d90d58c564f54abf0c34db63b3886f6e591dde8a2f7322f9ea2c6b51f10d1eba9d9f66cd1bf6e98e8ad57cd7a1d329e879381b164d4e1517331325ffa4f";
+  sha512.doc = "86afa9db08487666cea340d81355e73e64f72566efed3d1fdc8dd86108eb4f82621850baab86e039572e0ca40d5a38157091fa15f7e1462cfabc73be2c5de0af";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+tikz-layers = {
+  revision = 46660;
+  stripPrefix = 0;
+  sha512.run = "900f3cba19f723cd75f59f2d3380ac96c6bcd53f4d80ce27b2d393d4728f37b9d9d2bae414f20d38e4b3b93769374281d4e741ac2480986b1662696e08a9a207";
+  sha512.doc = "617f1a53fa77f4a766157e72013227e992589b0030ac90ddd181643b1ef212f7e83b8f84f2520d64acf53f2cc76e3333e7ba56b78984b28c3320e2977a87cd56";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.9";
+};
+tikz-mirror-lens = {
+  revision = 65500;
+  stripPrefix = 0;
+  sha512.run = "133199223a6b40d9f07dfffcf842bf3cc5b37f58858aaf96fc5304f72d590f7ea4c45349455fb41ecadcffbcfeb8dae2fcea79cc282038d2bedd589a3a7cceeb";
+  sha512.doc = "6515311c8514384e205bb3f3f0859e33c05f3b4b1815c56d84c6c01aeaefce2fa9b4d8a87a882ab38afb6fdde7aa236966bc6ef775d4a29aa35fc8c1611d0eae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+tikz-nef = {
+  revision = 55920;
+  stripPrefix = 0;
+  sha512.run = "27ca8ead5ab99566c3bc398b52df4da6bda646519fc5d84d4a8b5476fbf0e86d8b405f2c88a9be56f6f6f4def0e5174ab0b2bc8100300d6b32bbe025dd7bf9c3";
+  sha512.doc = "07e9b26ecb4b334c4d7459e636eb116dbf03f7978f88d29f462cd2f9ad81bc24bef57dd659d23c39e8bcd81ba4fa74214c7c399c104fb5af35bf18dfc3e4d1e3";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.1";
+};
+tikz-network = {
+  revision = 51884;
+  stripPrefix = 0;
+  sha512.run = "e8100d04b9ef3336a514d18f43ffa6af5d4c2a2ce28663c9f4b40272f5619dbe11dc32f8d7399b7b730f8a90c5aab5fe18cc839d6736d7be6c8e37289e2dd30a";
+  sha512.doc = "26cfe73177bbe885cbb224fcd9b4f136a224947a4d9000e24c7f4fd1c44194ab8d2e11dbfac558c68ce36a30c7a7b82f335e3275db22e599dfcddd48d91ab08c";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.1";
+};
+tikz-nfold = {
+  revision = 67718;
+  stripPrefix = 0;
+  sha512.run = "d227be41f651a45240b3cb79f1aebea5015a06eb75c0a5aa69823731c69cad02c2f8b621de3d10d3b2a334781693f39c47f1b5b560c58ee9c5e7278258bebe5c";
+  sha512.doc = "a6684f61e230a4de3cd1e4b0da5ce17aff301cd80c434b7c9375d1e4abf3d3b6f3295979153f957b1499894e59d1fbca23e639ee76db6ff6d719df425d1da56b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+tikz-opm = {
+  revision = 32769;
+  stripPrefix = 0;
+  sha512.run = "eeb000cf28e2ff79106edd734ab71b9ec4ecb0db043a8b03764a98a33d3ef570711974bb13b58453362dd045b1019bfb4a1c1a856b74590110f7d8af308a3f01";
+  sha512.doc = "a2ed9a4b52d34dece5b0007b9dc46cf8da8cee0a9288b8db79f38068db5227e35ef9e3fe1f93a4c53e994c06c2d5cf21257bcde24b02f1553cb21d9f7585751d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+tikz-optics = {
+  revision = 62977;
+  stripPrefix = 0;
+  sha512.run = "ac0a42947cf864f28d5bc23aef1163fdee23e05d54ae570ed28e3445a66cf3e9345d6be7aa231496ad86065731ff0a2afa7ad0ce53332fbb3592c07bd396e297";
+  sha512.doc = "7b088c27e6cdb4c2b7b44400a31353963b0b45cb26251edc60b4b8eb54663ce2cb76784c9850349e50728d6e7366be22ee6d84a79fccd5791cf713133079a1ff";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.3";
+};
+tikz-osci = {
+  revision = 68636;
+  stripPrefix = 0;
+  sha512.run = "93711a01365e992d47306bd379ebc8f72296554288c855dc1f678232e5030894a9241d195cf949133da45ac8df2de1b55244629999f0c311b55d51a2083c4693";
+  sha512.doc = "356d60c65bde0d61207df028447409827888a420300a4b27867561494917e4a45db8e6a6dbe291fd19797d64d912089bacda9fd18ff405a28ff2d6512b3b43db";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.0";
+};
+tikz-page = {
+  revision = 42039;
+  stripPrefix = 0;
+  sha512.run = "be0e43fc329a014b11fce907c6b073f5f4be64b4da4b184705aff2c08d82c1e644056491d01d59ef0ef8a22b4b4c3f22b9012953e00802a9b697a10f0a2f4920";
+  sha512.doc = "896da337485c89508e7cb2adf377090b768beded3360a730a5a9c2400db73866b01e0091aaaaf8ce25b7444bf5c5a243f5eeff444d4588a4f8f8b5ac8aa9cdc9";
+  sha512.source = "34741f8aec629a8d7929372f1fc5b51ffcef4d95fb95c039c9ba96e4fe05db366c09c88b6987b57ae0573ed067947e2a375f0bea96a74653133abba850453593";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+tikz-palattice = {
+  revision = 43442;
+  stripPrefix = 0;
+  sha512.run = "6654ca0888b9a4ac7106d5d275a347e38de7dfc342d7c6228670e51a0285937015a39fd34e83e42a5ab8c2f4341e7f233535308bb2cd65a55227dba2d67ad79b";
+  sha512.doc = "8fd0a5a2ca4371e021ccceef41115b6520df6437198fdcba7fc37aa600821a95e91696fabb19cb0277639ff7664574cc56a62e1edcc96e58f26dd65ef5c82fa2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3";
+};
+tikz-planets = {
+  revision = 55002;
+  stripPrefix = 0;
+  sha512.run = "e990d8a92d8f34f3042117e289d7c385e17b973954a2286629c84cc2f13397159b75ec5ea1b032d710babf5b31d58d5f2b23a101b535b9d88328d797a36b952f";
+  sha512.doc = "c92e05217a4e4aa6f49a5a400f2faea365483257b61db934351b0ec4c932e1d4d88e313f443cfd726db2b1234d0bb66f4f70064d690c554dcf4c4f16672b0c67";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+  version = "1.0.2";
+};
+tikz-qtree = {
+  revision = 26108;
+  stripPrefix = 0;
+  sha512.run = "5b00d147eef48e874d2d5c9b171e93703c728cb56f3882af4e63a41b36ebdadbd5bcae332bcfc8e091b16ee14a3a3e16c594b0f0879bdedeaacde1c1700c542d";
+  sha512.doc = "0e2a19415d00cc6c94961dc2e8292038078334cbedeff63d889a3d843d9ca3e89533870cabe2068f5631b3f48fc456cac36b1720df175c20a9f6c986c388f799";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.2";
+};
+tikz-relay = {
+  revision = 64072;
+  stripPrefix = 0;
+  sha512.run = "ac75431dfeae69fed707b99a42ecf64972436b22863e77586125fd6cde18e8e4d8bbdeaff839edc65aaedacbfd1c1e0ce776bde792b7613f810e7ac1f9102132";
+  sha512.doc = "1194309c0892e7c35263389e96ec58121e9a82e887c4c702c69b381b75fd5f4f21df6c33440a746db6a944963d9a22a05b23e53f7c818901591499dddffa0087";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.3";
+};
+tikz-sfc = {
+  revision = 49424;
+  stripPrefix = 0;
+  sha512.run = "f31541b2333c5d8343143aad3a260e528523f78636cd772deae6e0eba81957ceeeb41491279dad621e4476bd9f5125ad994814cb2ab691e5039b54f9fffc7cc8";
+  sha512.doc = "caaa3c08f358b7f920322c553ff77e1f42414f16c67d2dd77bde8992e545366224cd7070e833268437332c080d6c65ab244678a3e9d5888fa97d21aafaa2d2b4";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.0.1";
+};
+tikz-swigs = {
+  revision = 59889;
+  stripPrefix = 0;
+  sha512.run = "f1e10c9cc4625fd2e61113f7d5c1cd637efd35ab9b0ccb4308837af3e384ae412bf068140a0924b0bad29e305fd4ba5a0770fdc1467e82cf85dd8eea8289190a";
+  sha512.doc = "3ad431f150914461149b85fbc7ce05213c5176e6eaee553ecbf8d150644bc36fdcfa2d836e5201d9a8aecb58751eedd8b98a06ff305c60688766ce8dd00c817e";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+};
+tikz-timing = {
+  revision = 64967;
+  stripPrefix = 0;
+  deps = [
+    "svn-prov"
+  ];
+  sha512.run = "2c3af958ff5509a470b4e1f93bdbb063f5b911a81de12d749fbd7dc6810715a473814d6d8694a81a49d2f45f1f468ef9d441fe07c2269c9c9a9094e350228b36";
+  sha512.doc = "33ab52c8b2a60b9bad41a60375aa75432aea20a71c9fa7816d5dbc868e6a70b491dca9572d5c63ea486053294b6b709aa313de464e375e4f0a7a04f76764630a";
+  sha512.source = "f1c7c0be255d533898bd65e85f2a36b2f86abb6580b716cb239821a243f67a2706cbcfffb99628b060aadc9b56dfee45f66e54851861df2e0cf12e6cd331aa4e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7f";
+};
+tikz-trackschematic = {
+  revision = 63480;
+  stripPrefix = 0;
+  sha512.run = "421966536c63307c7fe9c194ebd4d5f8a724f99b9baba20a44e867382b1c08f934c9e88d02d834221671ec6e18d392e6ef4595b5a7bec9a18da03b84bbe06a71";
+  sha512.doc = "f5d6c8b60da94b9471adb5faa8d159ed89a8ed4742049ae55da2aa615217215fa1334648c974e148031741fea1407b64297bea8f681cedc770ca13975cf289c9";
+  hasRunfiles = true;
+  license = [ "isc" ];
+  version = "0.7.1";
+};
+tikz-truchet = {
+  revision = 50020;
+  stripPrefix = 0;
+  sha512.run = "74cc5a05cd9558c68cbb7987671fe1e02a9a076049aad96d4c95d7471ff04e48f03c500f58b85bd8eead46e1af592a54ffe1ef0b0ea0644f4479a332a63dec4a";
+  sha512.doc = "7fb291a9d7309c722fe31cbcea7a4004d44552f547e4d71fdcd667efb4aba41b6bf0be0cb941dd16e425eedc668dc6de3d2e55f964146a62b861296b0ed18579";
+  sha512.source = "88a3d1ca19871e0329e40165b35ec90ce65b1565d42b4a678bfe611311a0cde68a6a8c67ff3ebdf78a1bafed1fec875a4f221efc6934724a265a3402d4970832";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+tikz2d-fr = {
+  revision = 67239;
+  stripPrefix = 0;
+  sha512.run = "87cf1fd8343df4c6960e4bc004da9154f98146b57a723022e5a81db506805ebdd60db1edafc03d9d787f151cb333c1d141c5407023493bba316b8b41bc245537";
+  sha512.doc = "4951babe22ffa5985e3533970b88a8a92f626e18b34e8f7f11051db21accd2977a926fd7e668ecd018324fa62c8b539fe52c279f8ceddd5a037b76dcf03f399c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+tikz3d-fr = {
+  revision = 67774;
+  stripPrefix = 0;
+  sha512.run = "6b60280f60ee690ade367eaa10a033cb9bb8452c5b5f6413b7ca4918d521638be357e6af6f760844046c15d1171f55b71f5210946ff4a6c6453a7fc332288b85";
+  sha512.doc = "599bcf41c7de51c44c943d984bae860748324faf7981f754b44bf8125499822df505cebe2670229fd7429d5b6b0809f7c88649ad8996f8d2cac604b58c9e9522";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.2";
+};
+tikzbricks = {
+  revision = 63952;
+  stripPrefix = 0;
+  sha512.run = "3ea07c2c6c3ac86d8fa0308e438956e70e2584f7995b3188904e7cce7d311ad0999635ce77c134046da711a723bd36b9602fb60c21a00970503f572baffb6967";
+  sha512.doc = "ab32949ad9502bea2ed2951db41029ef02672db38e7a28f02e90099dc1c1dc9b740f1539c3e7c9163b8da7dc2fb4eb21048ca17a0ce2366a364efe66e2a47609";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+tikzcodeblocks = {
+  revision = 54758;
+  stripPrefix = 0;
+  sha512.run = "a19ee68d5d59d936f1882bdf1de5851b9cac48debc4754025d214cc6838173fd7090631b08dd1916043520e97cd479087ad4548c991c0631856510ee912a42dc";
+  sha512.doc = "b75b6ddf66fedf1d69611ca0b817ad9c5d7c0bc162cca2f04794bc3723135032908148baf4aae1b486a0b5af9bc335b9e585943a3a2fd73ae55a0702236f5142";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.13";
+};
+tikzdotncross = {
+  revision = 69382;
+  stripPrefix = 0;
+  sha512.run = "d99ba25a95558629b611e7ae2e845c9b87cc8766f468be6160115a8b26cc648e83351cf233f946f47889773907023c061faae7744e140129930db481b460889d";
+  sha512.doc = "c481b80b675bb9cef760157b7b9ea7c790dc42c75624687231b603b39f3bb9835f642e50cabf4a046df67e3698032b644cdd1495d6a9932acfa3532a66b3b031";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl3Plus" ];
+  version = "1.1";
+};
+tikzducks = {
+  revision = 66773;
+  stripPrefix = 0;
+  sha512.run = "73675b3ee47740e0c54c352a9cf3349b563cd22756a33aa1f56b6282a9cb4b2da3b851705e7574d5591190bf2392f8900a477d8f93b9102d831c01b2a8650dea";
+  sha512.doc = "23fa53a7ee87b26dde5f9832c8b0b23466baaaed4be3ac361659828af6d611ee742b92531ee977fa0341ee5c3058a8ff77cf6ec1a7c3076f6ae4145328320164";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+tikzfill = {
+  revision = 67847;
+  stripPrefix = 0;
+  sha512.run = "4864d0859490cd07e123e1160a35fb7817c3ffcc1f409a8c61285823f655357473e0dc7ab92434b5b552cbfca3e88d9181e57cf944d2422467b466cbdcd743a0";
+  sha512.doc = "f08d351db50d0ac3d6362c223e30b97b9a734a8b19fc426d5592a17692380667172ee6793064b8c2787ee9e1eaa1a38b70a821f53a2e0dc26316ba81f0549aa2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+tikzinclude = {
+  revision = 28715;
+  stripPrefix = 0;
+  sha512.run = "1559c739ee5ce26c531ed1c989a2d986ee6da05880e6dcb8f14018c71c638028517d1c2374cb452421c92f5d430d4560ae4463732926c56ff33407941e70ffc3";
+  sha512.doc = "9cf9e6f5e45f9dba8843684cce3ff395f18c485e30ad0d0566e947dfa69704cd99600f8673203ae212a1aaf77908715c2e5ddbaae0de3732b98564725297112d";
+  sha512.source = "3c7b7da5f7fb09fb52a4517846d3cb380482a03a2506c0f2f04f4d71bb42c7ce6cbe4087fe772b45808ad497fc7ba353c9ab193e61c328d57a5dd58b607ad4e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+tikzlings = {
+  revision = 63628;
+  stripPrefix = 0;
+  sha512.run = "c838782065c705dfd919708c281d97f1e399df4775ed1410473d392b0f1cd2c8e293cf608cdde5e3cc50a26c51ba6bff3c79b5e02216ae3d3318ab92cc0d6a11";
+  sha512.doc = "0a728af74191084ad20d20ad2165bc7690ee805831541b5f2281117961fb9fa54e6f214a4ad570b63019fc8e7dae57c6a28ef37b18088a37f4fb4ca580c37b6b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+tikzmark = {
+  revision = 64819;
+  stripPrefix = 0;
+  sha512.run = "21196deccbed47e7bd2a95adbe92e197f1073afd26da98ab92494e46ab7cef325c6005d8bcdffaa53a42de440cdf10c5d20370fa0a5f43894defc1a01a284310";
+  sha512.doc = "c8222246f56882479a84f834b47332fa9a66d0dbb21ee3fb4018835aa9fcb26fa2204d70ca17d7c4609352648d76b1bcb4dd5a32eb7cb504035711643c944141";
+  sha512.source = "bb2a0a621379392d5741296ad90d7ea7eaeb73496363e42e9be44642254f7db2fe8318572c6a44b0d0536cd33a96952c7d860024ab6c1d2ff2a2b2d85d78a46a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.15";
+};
+tikzmarmots = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "c2ca7c1f66d070e1249b2ed9e88cadd482353140bc3add0146d7f67ffdd8c08cc3eb4b9c59f8e2d822000554a8bcf1e0f064c96ac0e002a6c80655c5eb909f81";
+  sha512.doc = "03a4494458d7f053547952945e9ecf1c500dd3fafc665852498de05f38234c45f0972971e8278d279d36c81f2b920152f10ad1bda2c5b24e5957ad0846e77d9c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+tikzorbital = {
+  revision = 36439;
+  stripPrefix = 0;
+  sha512.run = "cc0be76e583d67759d53ab89f777f137e7038eb8344e841a3a1c6e5327129063f2cdcb67c586546f8bec94e8e83d944ae864f291b5b7d384610f93c0ce604aea";
+  sha512.doc = "676980e8772650f77ed37d545cbd4ac22af170e1a4541acbd0739f3b5c0aff91f3d48cd3b3fa3c562510c1c624f46de2218fe33a9e53532ca88ccbb929e3495b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+tikzpackets = {
+  revision = 55827;
+  stripPrefix = 0;
+  sha512.run = "65f07d48b37db0391081c8edeb97d59dbb7a261ad1320b3b018f14a2b4544bfad46964b82980b3135416ed75fd7f21d08df97179d1a3ae2fb55308d36e89d2cb";
+  sha512.doc = "f669d0a09de871167915f4a6647791346703abf03b557c8afa03f5d3ed81754c4d175d211850b7d6f87c2b0a1077c8559093d9743130f10ef334c10df74ddc69";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0";
+};
+tikzpagenodes = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "f8e3258505ccb31b677212034c3300d442fdae73a45c0dc6e7bc0837cd716caa778ef9410f37ca1bd87c647d9cff28ec3d0f35496c8d1a5f940ce9e602dff475";
+  sha512.doc = "daa0cc0d2125a41a6748a2b94b5f399c05d06c28479e1f1bcd188a647ad72048e17f1f851193dbc35bff58f6ed9696a4aa9885fdebadad3996d1e2bc9fda6347";
+  sha512.source = "285249f6a0316dbce7b28c41afbcee367a4c682c75d0d31cd6cbbb2fa9ce68813839584e6c74c765ee0e03c4dec115091c99a6509328e2b2e5089a6222b42bf9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+tikzpeople = {
+  revision = 67840;
+  stripPrefix = 0;
+  sha512.run = "18621315d7bcec4bcca281b3c3410e281404fd29b0a5d2f4ad799aacb71a1c9d389db8bf1c9fc91b8cc279ec801f0cf8e31c826ded92d8476ce4ce5831754390";
+  sha512.doc = "8b8ad4cbfc03663afa6064d4a81ea9c256b8c08522e455c5660c649fb9f1de7859f368d5252b348e0521d62fa3a446b6ef9ad2d1490f7afed8f5423a99b46d3c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+tikzpfeile = {
+  revision = 25777;
+  stripPrefix = 0;
+  sha512.run = "9da38e2e02c651e2f89a0e9ea917fc5147626026acc7302b7e32aa2cbee072f91311fbab73e44852a2c237290de76e560f2b45e88639936b542e6986d90a9b4d";
+  sha512.doc = "a66c6ca303ab6afcea5d94b02936335d28077697d81632199de2678528100c3b5a754aa281fa83d93819a53eb2fc945ae899e254b6d6ccd926f8fbbd86d5ac2e";
+  sha512.source = "0a2e2d5ec964bbe5e6230c609d1997fac779f1edb087fdf130b93ce3ae76fbc0b90f5af9076de3f969a8d69e4054571f63dea947113f7447b7fb1f526849929f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+tikzpingus = {
+  revision = 68310;
+  stripPrefix = 0;
+  sha512.run = "78041352e86e68eb99f875a1c8bf7d4a50c527a4b405e4c93e9da6ecd716bbb0c5fad053fff80229723b4550345077371a52132258cb9d251c319f743767cb7f";
+  sha512.doc = "1748e17af7b3190e19a0c446e78f5b40b6a135633850d610179f33927650c8cd92babca86e4fd10408586d1fd81814cbb54985ab0fadfbfd05219b033e4323c6";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.1";
+};
+tikzposter = {
+  revision = 32732;
+  stripPrefix = 0;
+  sha512.run = "75fd7b71632c663329843a48bed32b2fd04cbac02d24271ff1a49bf03e2905ab8f94b5876ee68876bc6017455cc3272750e85eea6061dea57f47fe96ec9e1045";
+  sha512.doc = "1bfdf7bc2aa38e876378a1dfac751a57ac93dcb0fc5abeff700107c8ef11423751dc69bd7502c9b2ad2641f7f760eb697a248833b6914111dcd86d7f8a32e9bd";
+  sha512.source = "3d78ed0799114da415a112f6cfe73b84a242389d475e223db53a4c9b25d9d5c4ad3285910a3b24eb9fece2195dbbae72e18d57cc83f057fad6062bd5fd5325cb";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.0";
+};
+tikzquads = {
+  revision = 69409;
+  stripPrefix = 0;
+  sha512.run = "104bdb76221a25a50644dd8c9a655d5adc4e6019a11c470fe24637a51bb91ac6fb718a4949bf940199aa47f43186f874aee59e5405db45a6497e45f84e69fd9b";
+  sha512.doc = "5657179ce49163299bc91f3730dc3fcf77972597502f43822330199a20bc244649e6437a6bfb1c4e98bdbd02e30beee58b950dc73e8269b318801135025c6f1c";
+  hasRunfiles = true;
+  license = [ "lppl13c" "free" ];
+  version = "1.0";
+};
+tikzquests = {
+  revision = 69388;
+  stripPrefix = 0;
+  sha512.run = "616098fcc9f7867458edd525fc71d83786080b1f4ead9a007083d8347add52499b2fdf2c969213e06d43ffc59e9eb4d17bd7872404f1481138229c4f15c1aec9";
+  sha512.doc = "433c1202106723c397b383edc37ecff762ce7910b4adf2e70a5ea2d2c823cac2f96147227eeffc71bcc2658b18ce875c780f91d8997f40ab823ab09eb1d84354";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl3Plus" ];
+  version = "1.1";
+};
+tikzscale = {
+  revision = 30637;
+  stripPrefix = 0;
+  sha512.run = "73aa62d84417deec8085c3f46b1ababb756e32ae55c4af97def15816606df2b3df4a7735ab434d489d24dabf26806428d945ff3fced3c5eb7c19b36996f2f58b";
+  sha512.doc = "d2ac9080a08d7d7e37ea2d1f801c4091cddf9540eb7c2cc2c0753ab0c07c2f0e7392742bc2e93274775c890184c126aa490c78fedf8827a6c787b951abcb6bf5";
+  sha512.source = "e073c55b8101eca9f401dc58046cbae260cd9513945e9c7a2fadd0ef86886607d1f92b83a11258be94e0bca08dea87ee878af031c6b42e343b716a1c6af42a2b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2.6";
+};
+tikzsymbols = {
+  revision = 61300;
+  stripPrefix = 0;
+  sha512.run = "4e1a479e6e238026dfbdcf152d63c8b67419919f74bffe3c259828a5ab6bec62955cfe5f5a7f407646fc2e5b742fd009280ec4a57cf708317bd9dad95a35a1b2";
+  sha512.doc = "7219e48fc2407bd44992378b24c5a1fd0b9c1a9a9c408de2734966657f83735b8cda336d207e9d1593afe0fc58aff7d83213a9ca4be61201df98757e2e4ade75";
+  sha512.source = "546f813ef97e1c6d286b4c79e2320bae75e2d94e43d9a15b9d4c6786bab9027c2aa86ba1ff5f94149849f7c11834408106623929b732f8b54697dd7f2916df3c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.12a";
+};
+tikztosvg = {
+  revision = 60289;
+  sha512.run = "0957b87c9a06771afab350de769e3fa9f97ec0aa09e4e740d0f916992948a65740a96446a0f8ac144273e94f228db2c6c0ddb22bd01ea9f0f66abe5adfe0125c";
+  sha512.doc = "3d90c0963c570a115390603bcd5f39a224a155faea8ac6eec511b9689ab98383386d3d6e92076129e0f704d69bd18da52cf2f89f5db024a4d5c34a75c1edf279";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "0.3.0";
+};
+tikztosvg.binfiles = [
+  "tikztosvg"
+];
+tikzviolinplots = {
+  revision = 66659;
+  stripPrefix = 0;
+  sha512.run = "00fde57102ed13eafb247859de00c62829ce60de361794afb9103e501033140baf9b474fa147b7282727f7294a0b337897985460526f573532d90117d5f8e552";
+  sha512.doc = "5c7cd0990935fb05fa418ace90299532e3dea64e74789dafdff6aa9306e417a3fb170a2b5068045fe5069a08c4ccd97bf4c98ebf5f2102a2c9ca2564090ee52e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7.2";
+};
+tile-graphic = {
+  revision = 55325;
+  stripPrefix = 0;
+  sha512.run = "b6235459600c5c8bc683c9fe778bf864f5ab3dfcc8c15afd7b997c45f349f05b57ded236daeeef1e6bbbb7e535a4f203625344a35d6e4de401c082a937090cfb";
+  sha512.doc = "c945ece6ed1b83f4fd8923dd74d0c961c907071fd5d33feda3ea514beeb8b85878dc63011ba73edd1d4a62799ee2555cafe7d4c866d55d160c7e97168ab16038";
+  sha512.source = "8334012b871abc58eb44f3b20f76d1afb2764f07be12b7122c81e5ab627a14fe2221596756868523ab8c6b11e0e7f4aba0b9740efbb221e569ab1889141b250c";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+tilings = {
+  revision = 67292;
+  stripPrefix = 0;
+  sha512.run = "f0164d69df56b1b981aec352326eacdf0f79366852bba6eb010a3842c338c678f1f38d3a5b1043ac4ff681595cc4a14a127a40b383f7d5388d9c52776352ac13";
+  sha512.doc = "13ac6a6e02a39420f0ed5e74d3f242561de4cd1e410fd6845e82b893c63d2becbf21064a676be29eed0c4b38251a78da55f43164eb2acccfb9f8d94fc72d6462";
+  sha512.source = "d6ff1a0f7453df40b7873a5b64a6d449990a3f8459901a3aaa41a5977fa0049a6203bf1cc4802b3d7383d6c68b55abed99c13ff5c5e7ffef4dcfae0e36ed43d9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+timbreicmc = {
+  revision = 49740;
+  stripPrefix = 0;
+  sha512.run = "01e0e06769810e07389006e9443a836de76e95fea6133e7aab1f47cc554c3912a8aeb43bbf33d06cf9f3a8550a9eb9ec23830ab96ebbb84629ec957d7050e9a9";
+  sha512.doc = "ebe4cf57814e6699127a30031c801efe583505098c707a97bece8dff93ff0cd4939cf047802ed38e645c339592e1a062c512dcb5d027192122e4c98ce41d1eac";
+  sha512.source = "eae8ea0badfc036dd6c5908c95bda4e829bebc90e4d50cbf766937701a6f631ec9f39269d09889c5c2bf15a3dd24ddd8062829e5bf735c291e4338085749607f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+times = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "06f93b823a6141a51554bbd682c128977676775b1c097f7787916c0c14b76d6e9c4041645003111d5a1b905de4faafde5b3efb61d9be9740b9627ab57f3f8eef";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+timetable = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "caee17cfe1a4bae7bae4479066e2f869e6ccee34d28a8952bed7a1409bd9ecb27adfd005f0e824d8ddacbd0e65762da79f9ea5b04d0332d643749ef36b908946";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+timing-diagrams = {
+  revision = 31491;
+  stripPrefix = 0;
+  sha512.run = "0c07a24aea43b0092610cda5878a7e2be95777f199c9983e0aad42d83c1a6bd96dd4ca4caddef6b61165d62e924033eb01524fc925fdc8a4fd4baf44f568eec6";
+  sha512.doc = "1882008e990cd6cfea47b35bd70a50f22972dab0470ada417edf1aa236d2619d57bd3b1d4a149ecc08c1a196c36c9dbf97328f58ea4aa25acb0a6addfcfe8651";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+tinos = {
+  revision = 68950;
+  stripPrefix = 0;
+  sha512.run = "0212c5d1d87d1c73c66926a7bf06b2b62a0be51b3a03daec2086a15a4facd80e175ba3f4e23f486e181fb6d3910b77f7d26c28a8f76a9802b5112b010efccc2a";
+  sha512.doc = "e7f6fa5253e729b602c1bde603e568d5cdcb953e2a4f1e478c52959d25f58f7678cd107466d7a99b459af70250076c5f16224e4ee549998356c1b1957aaa60cd";
+  hasRunfiles = true;
+  license = [ "asl20" "lppl13c" ];
+};
+tipa = {
+  revision = 29349;
+  stripPrefix = 0;
+  sha512.run = "7919b8f5a416cab24c02675ee0a24c60f64e9dfb3bbacb416eb74e29badf6b4dfd8a0528cc8b38dab6395b8c74ec5c808ad84d3a8d4ae5e8212691bed9066129";
+  sha512.doc = "213c4eb24943e655c03087dbc5a51eb3cfeff09ece1d31fd11f1734ab3b219db94cc8b5f4735f3d6381b79a5d6ee2cfe727acd17f823b21163e910c09f48e413";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+tipa-de = {
+  revision = 22005;
+  stripPrefix = 0;
+  sha512.run = "45ce2504e63e517e76ebbd7b6bfc7b6a4b3a10d72747714c731b6af0b1a9de4d025bce996594449ea61e983097748389a6d878936078fb676ddd4d6f1f267425";
+  sha512.doc = "c69333d9a7d335fb217dacb00610b9f0e5eaaf78e535d69998fc600fe53f0ba61c7e3cc1e82d75f52b435cd6945044560b2d275476e96d84d611ab4978c02e3f";
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+tipauni = {
+  revision = 65817;
+  stripPrefix = 0;
+  sha512.run = "4e628711f3f1efcf96787bd1ce489380a699c4f800edf79523c8d5929339db8ed2b7c2ba49a456bf71b8b280e006fc672ec186b92c35b83934adaa561ce9f296";
+  sha512.doc = "9b4f7c48f48797bd4b40e3d823a0cc25f4edbaf1983067ec60ef1df6be58553c10438bca825c4315bee1098d57c8255e988b784660ab6c8ff9d34b11a42d3430";
+  sha512.source = "c7e8ced6797fe52d534c30e216bf1f8a1a6154a60623201ed13aabae07ab68a67b1f3bd62c7651e36a059db3742fad364a8ed4eb26f72b1846090f0887f25b06";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "fdl13Only" ];
+  version = "0.7a";
+};
+tipfr = {
+  revision = 38646;
+  stripPrefix = 0;
+  sha512.run = "c8a8efbca7e1785dd81fd4695ed7e0c5dbe713d0a5632078bdba2f7df8e9358bc246d8f9d972ad3035106a7ef687f9229ed31bb630009eaec3b63170cf8933bb";
+  sha512.doc = "bb739994051c5738ec0cacf1111d104b225593cbac1ee829057dce42017990483630cc062131ccd7d766d7400a252b1ff84744f91b77d0ca5a1f9ee195a28d5f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+tiscreen = {
+  revision = 62602;
+  stripPrefix = 0;
+  sha512.run = "00682d70199d66b3f6a759a32a1cad6b14ef09eaa541cb0ef547d86fd512ffd525f2b53a8c1a7315462aed33148a0b769eea70c5c42213d0731a1034cd96d6d6";
+  sha512.doc = "58add8332b25188cc4d7199cabc2ca49e3d08598f6ee2511bc525500b1ab0dd7cf8212d5310ee7fc803bf06c09e4c248eae6c52c52e0a3b3a6694ec1d36ec57f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+titlecaps = {
+  revision = 63020;
+  stripPrefix = 0;
+  sha512.run = "c9a91646115722f41a82e4010e2b95090447e66864e1b7cab57f24dd797e299568d3c5422b3974829112cd118c4e40a2b14c04eb0e141105fea7f6ef8358bf9c";
+  sha512.doc = "5b22152e9e3deedd0e6e19bff817030287b81849e76d0b926caec947e315e0ddef533cb911e0fd4f91346b0c6cd7cb87ac10f33c64e3dab6b70de09613949f1d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+titlefoot = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "aee68d15213c20d9ba0ef6e3a95f111804e4438d2c80a6cd83ae67725c3174db7f38b0d4280b26f7119e9e1c6477a0aa04d3ee5877e15b05ff2742d94a720c5b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+titlepages = {
+  revision = 19457;
+  stripPrefix = 0;
+  sha512.run = "affb8e221dd2ba1ad6e18d08dcbf3176bf65ae3006a732a7d2bf954fbfe90215175cd3de0dbb7546906b7d65eecb9aff06fabce86c46e88e5027851e11e52260";
+  sha512.doc = "703f376c6bb2480f7a326f31ec277716073ddf67834930401c17627dba41c5321a0115e01ec73160917c68fb7ba4e0042e8ac40d968eef89f52b5dd27c2e0495";
+  license = [ "lppl13c" ];
+};
+titlepic = {
+  revision = 43497;
+  stripPrefix = 0;
+  sha512.run = "753ff5c116f102ebd9fe59ea0ad1e80a7fd102f55588f9454fb3ef43fd5478add2d39984638e112dfcc5421f5f79b4c34c8c15d47845273744b6960946ad1805";
+  sha512.doc = "6faaeeb6c7212e35c22321e279c08ac8a985ebb8ec66054b49456ee5a9491b88e48edcb20920d61a052b2df9617ddee7e40bb0e868fe082ce5889e63c193b641";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.2";
+};
+titleref = {
+  revision = 18729;
+  stripPrefix = 0;
+  sha512.run = "73905fbe96bc095f602339e0c943048d775bf2a89ef9de3b7149dae7b76aef04e5c77803555450d931f3a4dfef16f5e72597a4d06052d4a852623516edd978f5";
+  sha512.doc = "70db133fb8a5fa38a6f0f82912d19afe84e0f68820fe62b3835a6d237582a32fe6c2ba5ad05e46f39540d52d0aafa5a88325e1050e6102164a5753fd9c68d6ad";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "3.1";
+};
+titlesec = {
+  revision = 68677;
+  stripPrefix = 0;
+  sha512.run = "b738823380d594dcef104e3b7fa05d9df233385ddbadf6fc6bb45e8346311f5f58f5f605dcb4b6541f88b57a27b73236eb77a1d128430c6ede675625e2ec051a";
+  sha512.doc = "b29c7b4dbeaee946e404166a4b1f4848ecffc4cc238534cf0c7248b1964146893125a9f5f8f87d6c2ea21c1e61304454bf7eb57d95842397363b88d438636363";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "2.16";
+};
+titling = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2a321a17b1ff74f57e7bf3f9d72d1b66a0623ed286c8aa75df6d55f1e62b214954ff38456f27f172789bc4cb500688656ab156609933faef67e62954d05d0ce2";
+  sha512.doc = "e69af16331da73c2a61b063ca4dc4c5f70f7958c366b06e96745a2bc92397f89210ebfe598f445ff33ce7705d0f0b56fc3a46f93bcc89145d50b92d56820f61b";
+  sha512.source = "1b32988678f184fb335c70ee59d47cc3e20a7ee0f1606495d77880aa915677ed4a885557a406cfc5f5a67878cdd0675ecad503a6457056d901b96124f7eb171a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1d";
+};
+tkz-base = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "1bcee5c2d6ce967369dbd6fc7c55a69793410c2d1a4de6c66c79071a360c3a0889c014eaab27ac73c771424c0d0655cabe62f9e2514dc13de418c336ea09ef80";
+  sha512.doc = "3c2f7a584b1580c4fe15a5945b45a912960bff6c25ad637be8a43ee82b752949e1228008179d7a311b6961b1d0d4aa08fc44daa02696d2fdcc51777512db80c7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.2c";
+};
+tkz-berge = {
+  revision = 57485;
+  stripPrefix = 0;
+  sha512.run = "1772cc37537ca421022c5b68536ddcd6cf0d5e88d428cd7682e7773a8290c4b2ad90a11b07dd8c4a4edce69497b63d9a87b5f113bc5857dd8e59e7b80d1340ff";
+  sha512.doc = "84b5524a8a0cbce6f33611b77c451fd9a75f0d60375e61e2064b27ad4f28a579fddc9a9dae538cd1f540cfe78f98fa62d9b2df979b9a1ca8e73245245ac35f1e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+tkz-bernoulli = {
+  revision = 68780;
+  stripPrefix = 0;
+  sha512.run = "0824d03ce5cca5be08cd648ac3629094eb4607681601b5d75a56069df687054b5e88c3645367c0728de8f7cf43971b32286eff4b18dd094c620ce37e6c957880";
+  sha512.doc = "ea1d787fc049cf42605d6adf107892aa4afdcceb32c874382453836d30b956e1599e2b9286a0e64b823d55005bf8ae2e81259d881b69172f6af5db4e01aab581";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.3";
+};
+tkz-doc = {
+  revision = 68665;
+  stripPrefix = 0;
+  sha512.run = "ba4c220f4a53089f8e6cde73cbdd7e1b8eb68f4828217dd5dbd3360086bb946fbfc30a993c678bb8c6e4987579016f610875fb2edc796fd19968c3940a0f4402";
+  sha512.doc = "f4e798620ecafd750332e5ae7b3491eebc72c02ecad00e9a67247ed0eba56a537d8ea139bafa6bd9bb1c908dbcf0e13491d2c208805cce1f18db438e8da38a71";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.45c";
+};
+tkz-elements = {
+  revision = 69213;
+  stripPrefix = 0;
+  sha512.run = "66380dcbb489c8afd4f916024baf3008975543424a391e0449f261f9fdb66118f9dd4bc8ad988a4f48ed2a770daca48fdb98243456025d545736e61e2b42aed3";
+  sha512.doc = "4f6630df37eb9192cd2b9d0f0b4f687762e39b83ac6b4249e86defe945093ead57dcad5414a0ae1edceca75eef7f8be706b3b626dd4557b2377354d8717bea1b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.72c";
+};
+tkz-euclide = {
+  revision = 68747;
+  stripPrefix = 0;
+  sha512.run = "14e39eb45f188f8563b8c49b16cceffe62117ac3cb17d484d1722122b6f3ca927b35ed0dc15cf0650d877f584eaf05f6473dcd8ca83f4766f5d421a07eced464";
+  sha512.doc = "ba09b1cbb47c65ab74119c7e52fc4d08c3174ddfebe0cae6c3b0ad9954d40e78bb57a219acb12584cc67616d51d70212de284a4f30286ecdfc3bd70c4ef9bf8b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.04c";
+};
+tkz-fct = {
+  revision = 61949;
+  stripPrefix = 0;
+  sha512.run = "ce605595518cb9b400a5b49620b5f359de8e0fefbc939d88b8f5aa2113a856ce05f4e9f56bb149c73e5f46c65d7d340a65edd6f1b55f6cca68b10dfaf7e04a87";
+  sha512.doc = "c2de4bd1cd9ebc5e0747608de7b1780ec97da00c512d3e1b2ce3150431c307c043f24b0bf1853d6c3e96203c33573322d66dbf0db7cd82f5b1a026ee5b7c6d77";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7c";
+};
+tkz-graph = {
+  revision = 57484;
+  stripPrefix = 0;
+  sha512.run = "04cf17f69862b2ec068dfc061fb019b54352cab3fdebb3111de3c28bf15047e06c236d979e9a9a92140c2a59ac9c0813ed7006d0411737b1f04f71c3a5916cda";
+  sha512.doc = "df2a31047ece6f5809db42be2243d00b0342d54d3b864de6a32a43257b0d8525170e9d642db495f876c12adf4ae5580252c1378356acdc5f18531aa3099e76d5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+tkz-orm = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "41263c9ad122a3cfce3eca3cd4ba8798e61ef662ebf7f00be99dd16a25b50f5419fb6c04a84bae6bd0ce2b349d4b3216a1a88c6e3d081d8a064ff561536a7e71";
+  sha512.doc = "ba9a6a67384478cbcf5b76f7148f60bb0f2f1932033f95945b28794f146d89b21e82c4d59b87735d46bacacd10c1ddca2b19e2e7ae4045a331383f4085a99221";
+  hasRunfiles = true;
+  license = [ "gpl2" "lppl13c" ];
+  version = "0.1.4";
+};
+tkz-tab = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "cfd37929060d7213d2294708a38a0ba9df8847b0539ae105ec99b4171083877714dbb19ba2ad5d89bd3ad474573f51e263f42b8bf9866cf010e30bf481f75861";
+  sha512.doc = "6356829dfaa331e2e0af9edd044168e07bb8608c28ff386001cd06288da0a1517f7b1dc4bea31e1b06d0715620a4bac80a138bc1228a3ab15f88fa706a9c4b18";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.12c";
+};
+tkzexample = {
+  revision = 63908;
+  stripPrefix = 0;
+  sha512.run = "d312aa7220166853d5960301b1aac7917969d6cc3859bff6766d366836255cf46fa24f66ad3401243a0cd63b719428b848969bf66d51e5946f56e672eb10b353";
+  sha512.doc = "30ad76a0efecf48067e2027eb713dc9af4ff1b0ac50e6c8dc2213a848a41e83d6f53aaf70f5db8654ac4d60b196dfa2ed465cc434010f5ad457bed8cad15f319";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.45c";
+};
+tlc-article = {
+  revision = 51431;
+  stripPrefix = 0;
+  sha512.run = "80b2c0d5418e8061d07d502399895a8334003bf5ed574de8f4af0c422ff0d3a660a511b5064b48e65064a91ea0cd057c134f9651e001eb7d5fa9d981366374db";
+  sha512.doc = "96535abc8bf54c62e22d4e47178c1cbbb1ca96bfca16df4cab37b182d50e872c57a2e6ebe65727121fd2682776905c962551639d9435e86ab3fbb5d3e05fb72f";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "1.0.17";
+};
+tlc2 = {
+  revision = 26096;
+  stripPrefix = 0;
+  sha512.run = "3ac7d28285b15d7e97839619a449c870b3f96e1c557470ba4bf680016c9834af9f09715e09525b00aa2b951bbe20e5d3b1d0a5e5f957de99c13fdb39f4267e3d";
+  sha512.doc = "79eead14f268eab643f676c36b20ba89828928fb3b418956277304ac6cf7145d53b4f97c30605690cddce8660361614b58ac65e8454b7740dde17ff82a053818";
+  license = [ "lppl13c" ];
+};
+tlc3-examples = {
+  revision = 65496;
+  stripPrefix = 0;
+  sha512.run = "2bdb38f294d1737c73068fa9d768d9a8f96ae858d400f1f8b651c4c51427bdb0e4d623fb8b9b0c0ab2adfe8d55fe472ffa4a27e7064b51528f3eb03ace111a06";
+  sha512.doc = "b5bbeccc60b9754e888a0ce457cb88f5c86a6b20c3cdc7850d28c85c409057391355551a97e49bc964521c3b4b498927b499e21bfdcaf15b8b8266c7316ebd11";
+  license = [ "lppl13c" ];
+};
+tlcockpit = {
+  revision = 54857;
+  sha512.run = "50817d4c68d4e302cf0f4075ff9321bde2fd26336923efd2fb39bf097090b617a2a67ce75d1a14d562939514acb17b2a356bc388f72049dbe52a868ff3d63ffd";
+  sha512.doc = "d40cec8456db0d9fdd55b76c84b40565a8b16d7639084eaa5dbc61c3bd2ebd73fdde6f40b11007835be242a9103cdc5ecbbecb6082ad650663968db18cc1b04d";
+  hasManpages = true;
+  sha512.source = "01a9038bab5226f57922215e6dac5acf69ba2bae866f72df1d2d4a3a6252fef78e18d1e7b2a8baf327bd4b89262abe6750b0dd1166f47868e797e50b205322a2";
+  hasRunfiles = true;
+  scriptExts = [
+    "jar"
+  ];
+  license = [ "gpl3Plus" ];
+  version = "1.2";
+};
+tlcockpit.binfiles = [
+  "tlcockpit"
+];
+tlmgr-intro-zh-cn = {
+  revision = 59100;
+  stripPrefix = 0;
+  sha512.run = "a89c2f99ad63c8352462ef7139b36e8563e1db815dcb06bd2e0f8b96554c380b574f7d856aa6bffb3c972bd68e9505d7864d87cfb7bcfef1bdebacd10f14a96a";
+  sha512.doc = "2b5a7672c600eb2f4cbfb2810090e4383a7032d851f35a74e36c75914d9813566603019f232715e2e39ab6d2f8a60273c01e5cbdcb345892b0bf8c99995e3d4d";
+  license = [ "gpl3Plus" ];
+};
+tlmgrbasics = {
+  revision = 68999;
+  stripPrefix = 0;
+  sha512.run = "53f7cc8c2a39ea21a8c5eeb57ae7f99759b364ff7f1b41e2f4599d464ce17920746b8a8e182a044faf0621fa3dc842e14cbe93652d351d9fe8e1fde8a7682daa";
+  sha512.doc = "ee69a90ccf9b83396b0d9fdd5f030e673d00b2c372334378ad450089b40b93de8b596ed5bc8a459253689316a7219080b88248c1f65a475980ec270a6c84c8ea";
+  license = [ "gpl2Plus" ];
+};
+tlshell = {
+  revision = 66771;
+  sha512.run = "b514f1c41c464300eeff261dc46004963e9ae6133dee084c39d8d7354510f37c3ebd8481daa377e057b48cf805ca87e7f247abe103c3a6404294b4b308361b69";
+  sha512.doc = "a4e686c57454adbbead87afc078720e294bd865dc5f77905e0f8e183efe83fcd2f0057336aac17ba6bc91eccf785bf1b3b47959359fc3ea49069bceae3d21d6f";
+  hasRunfiles = true;
+  hasTlpkg = true;
+  scriptExts = [
+    "tcl"
+  ];
+};
+tlshell.binfiles = [
+  "tlshell"
+];
+to-be-determined = {
+  revision = 64882;
+  stripPrefix = 0;
+  deps = [
+    "soul"
+    "xcolor"
+  ];
+  sha512.run = "a7c6b60844601f81bb659f57e212cfdc9e7cf72f24bfc662aed9dd26ebb9385187ebf44d82b59b637544b920c05dd5e3a698b69a0ef7ace4b57cd7531d240e3f";
+  sha512.doc = "0df7f6b340c28d2ef9db73af4bbad364bbb238a42f37effbde69af30774de627d29b2f03e098482e6fe66d09bec49d7d4a4566ebb3125eb2f3423c1d5fdba066";
+  sha512.source = "38d70708e3be579d46e086c2e1b227ac081da1d721fff64b51543269b9df11b7ebe67a8e95999bb3ca1b691b91a4c3e1a8d79bce2f367e6965e34a5577377608";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.3.0";
+};
+tocbibind = {
+  revision = 20085;
+  stripPrefix = 0;
+  sha512.run = "f373d6c98730e60d06790d1a219df26e60bbddd2aaffc3aefc5877ae6b2c10c1a08e21dfef82cc591e1c6f7c014e0843ae30be948b7eb55321dc94cfb7b16aa9";
+  sha512.doc = "1521eaf8a15038a2a0b6136e444ac38d6033071b305f6de6db6a5f8ae34625a5b8bf654d7a97b5ebdfcf4efeae58c41a7c9c17005552314928e315295766c441";
+  sha512.source = "fa8375bce4af25fec4743d0c0002f90dbad7240f7959ad843365b72502c8c2d2cc9047b21e01d68a6fc525fca132b3a4842481f808999cac40221af32ea7e487";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5k";
+};
+tocdata = {
+  revision = 69402;
+  stripPrefix = 0;
+  sha512.run = "17bc7e29a5f4d03374b19254c0967634de212ee47e0f00be9c3a8dd9a9a7694a8cf14b9da318e8337a5be00f420810ee27a115c7deb8f97e1a02ba98fd3b654a";
+  sha512.doc = "816da5a5017dc7372d40a29b45f0279629553e8399e62ce3da4871e9597017e00c8a4c39928462d5d5f168963d930247081f483e9685028cbfabae9f74098541";
+  sha512.source = "9d8767d2fc97ce25cd6c540abe83a1b1eba920f16cef02c9451bae34168812456d8b52a38ac7bc88d484b2a02d2cea774f9def03eb3e82bdd9411df0b4421670";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.06";
+};
+tocloft = {
+  revision = 53364;
+  stripPrefix = 0;
+  sha512.run = "249b50b4dde3c9b14cfd3a7b00c441007643ad6638996b83a0274bf4126ca8a26f6cfff816c5efc9b6516953cfc29c18905138fe137877ae920e82376afeeab7";
+  sha512.doc = "edd477e3c4b2a9f815c3e57a6b785c2237bc34435dd561d28b3e38bd8da5cc5d4d4de79a10dfbb55e920d69dab90d0a40efd3bcc44cad1c736a723b89f147af9";
+  sha512.source = "a870218b7470962996f5bbab8c15f880d6aa863b8102dfccc67bbe3cdc3895785cc44624bd460d37a96da74d1ef28340535576aa481129e9ccda2e5ee1ee6256";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3j";
+};
+tocvsec2 = {
+  revision = 33146;
+  stripPrefix = 0;
+  sha512.run = "685ff581b0cba155a763ba951b4f5b1e12a44741dc5245967cc2d2effad12127828e4d2f3adabb9fe3d126ffa1f76d43dc196b89faa39745ce85a7f96fb44017";
+  sha512.doc = "9247adf45a6a8f18e03d7b93ea8de8decdd9f1ba15eed7ee28c356679a6f62bd8607b9c519448bae2234cec15b76a5155ad7efe99ceb9382022988a29c2ee85c";
+  sha512.source = "c6af924f3d8e52028c7bfe7e27bab1420dec1fe6f3e948b09a131c65a37ec8e9baa594d725a4eca7b3dd10ed19ceb5f54f1ccae49706e9816c7e4e1d9f1212c0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3a";
+};
+todo = {
+  revision = 17746;
+  stripPrefix = 0;
+  sha512.run = "e3cd06aa47c36344602a0dccfb48e43c0639cadcb91aa9e787d552c6d3ecca95da3b0f3af8d0f479caad41f657bbcc30016dfd3f80f42285fe8ab02e0a904601";
+  sha512.doc = "c747b4cdcbe8533338a9120b06120b0daa68940ace4cf44d87882d5b5a5a42e2c062c667d2e3fbf8979e1385cd55dfd8747f4fcb044a4112f4b2a79588d0463e";
+  sha512.source = "7f70973e13cba6c532d45af7f5c21264adfb75542a7a68e9bf23508955a553efee723edfe098c4a87015c463c99d4063a9bce6888e7bc9018999ab4721a524ce";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "2.142";
+};
+todonotes = {
+  revision = 69319;
+  stripPrefix = 0;
+  deps = [
+    "pgf"
+    "tools"
+    "xcolor"
+    "xkeyval"
+  ];
+  sha512.run = "6dbe5b58d44d900b7beceaf265fc0ab227e3f4a56a1f8c1ff4f186df0657a3fe0f674bd60411516e54d90627ec41ffa38d4bcda7f5dcc69632892ac2f0caf96b";
+  sha512.doc = "e5a8937624df00f9aa487d43a449c7ff6181219c4dca0ee559b0a10c6fcdf83eec55f9afec7d43721bde0f60c0e8e3eeba55d85627be3af5d20fb9ea45592c30";
+  sha512.source = "2ed0f6f85b777e49fb17df84ec97a7b4bb01000de19a578d28f5bdea038a13f360598f3e53b66d20a1584d483297e55df9b1be91ed016cadcc1e8eb9c00179ec";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.7";
+};
+tokcycle = {
+  revision = 60320;
+  stripPrefix = 0;
+  sha512.run = "fa7beb7d6dd1ee5a6caaa968d425143f946426e98a164d1f1b44288105a6c8f57d94931782616c3926493f0af9709c5836bece10aa7ed6c2f1623f8301ff9bae";
+  sha512.doc = "dcae2b95cad3150dc8879061d8c546074116af04a970a7c2ad9a91292597f3c859927ebf56ffd58aecb995a9968fc8221b6250efddbdce80edce96fc9c906b48";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.42";
+};
+tokenizer = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5174ea1b9c6c02fb8245db5315ccc7b65239d1343f719ee23428bd530dfd70edf26822bde25d672603d268a63360ba31b4a9fdcddf426b82eef440cd7f449d8e";
+  sha512.doc = "4e978a368cd7e97a1300addb739b457cbf4810ecb2d4e1161d931373d858573d8fe1688629cd7d23a44a4d5403e5d8d9dc92869be9809bddc9110c55879c940e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+tonevalue = {
+  revision = 60058;
+  stripPrefix = 0;
+  sha512.run = "052216e492b58a5e8ad4cb3f346815924291f3d24c995d42f22f189e6601a7b4236d434684d5777ea10d50a3d77f033b02ab76ad1550c0ba1ec275a6d22bf4e4";
+  sha512.doc = "b9bafeaf2a089f3537767a51923ecb6d7008009f4fe2fa74cff71f7d7358ab52afe4f39951efc04d29e2bca5cfab4ae70cf35a9f1e895377be4cef2ef0c523d0";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+  version = "1.0";
+};
+toolbox = {
+  revision = 32260;
+  stripPrefix = 0;
+  sha512.run = "af5320de678474075998f9497be0b766e826b0105b344939a66c5c1377e7c345623e2de18b73cb43f93c8edc241fca7a99fff1ca4b6bd3dfba52bf2ff476f18f";
+  sha512.doc = "ee800bb98c9577b12bf20a0b19ce27d9c6900f66e0920c922626599986b887e34513cca8474456aab7ae59aa5d5fae3c7c323ca4cc21372979ab3d545921ed34";
+  sha512.source = "201c3153ceb48cc4f7a3b24babd95e78939f03a7d2f3992a73113d904c90e5c957135a0efab98cb2ed01f742c39cf84c4a12efb8bf9f9bb9a082d56f62c98255";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.1";
+};
+tools = {
+  revision = 68941;
+  stripPrefix = 0;
+  sha512.run = "6da3f34edda1c3839737f6ce0db95a899af8c47fe9901a502dbc6a6c95ae9fbe317c7365d6cebe3a20bdce8af0e37b803480f8489de57ccc6daac8a758a5c9d9";
+  sha512.doc = "614a64b6d5f25c4fd691d629f70f1fc0f614aa4ac1a1a5a6e06f6ab0edcc0a8e8cd14c2cce498aa75ef3320e493c7ef69cd6ac858505519e10b8414b9cbb13ca";
+  sha512.source = "2bd6ea620d71ae1e5fab48f5b361560e290a2633668b03a36259228b0cf8f9eb5acecee705c66052dab306288c1defd46a366548f7aa66cf04e802bc40122caf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2023-11-01c";
+};
+topfloat = {
+  revision = 19084;
+  stripPrefix = 0;
+  sha512.run = "a4e4031292203a04a1df1dc5e6bd4f6b89c8806599d995707fa0dfc238bcb3dd1ecf185665db33a406302567607da5640f385f12cffb46f482993850b78155a0";
+  sha512.doc = "6c37c3b9ad32a121eb03f23049e11fe52b7cf6d49353e94a18eb39aaed3c049bee86ef6c6984440c9700546f20023f7a71975591c1f3750d31e176e8ba4f4c47";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+topiclongtable = {
+  revision = 54758;
+  stripPrefix = 0;
+  sha512.run = "3bd1bc743191a644cf9dbdd36890929003adfd8bc68372ff74882b3b37f2cbdfcd007222fbaadf4d73b5b1f919e1491edf8c25e9c69993be367d3816d06a6b12";
+  sha512.doc = "c837a90b1c13f194d4bd41d1ef91e994c4027443169588622bab2613b57cc86c6a29b81178f257c2a6b36ea65c89e1b66791ed137c2b5c144deea8c7cb987a17";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.3.2";
+};
+topletter = {
+  revision = 48182;
+  stripPrefix = 0;
+  sha512.run = "1c583621d738ff203ef755c4ab6d4ad520fe25204c882b3b5b1dc719590cc4ae117502008f0b2ef67486f33127e6eab92a2177aed42a8e011c9309632ce1fda1";
+  sha512.doc = "2fcaee9c15adec307e5cbbc4e71dadd2bfe2158f51d5bb842ea6faf1e10487f5881d171e29a48ac7c6c6ce52bae7bffee91772dd046311959167b11ddac8328c";
+  sha512.source = "b22e020b8fc477da1316c9f36818d9508f45bd3259e03e2cb096aef984cf655b1171069135001301f9be631c7bfb99e63ed7dc95af968be0700c8027b6484f45";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+  version = "0.3.0";
+};
+toptesi = {
+  revision = 56276;
+  stripPrefix = 0;
+  sha512.run = "be7a920e195b9ffd3fcfc0bbe1647d1b47fb98743ec69ea9b23783f052d9c10c26acdea42d4d2c7501bd57d3853f53642a5328a1c6954294a2cd38d8aeeaaac2";
+  sha512.doc = "7dd70306861e8528cd4c645893a3cb81c20a6f82db2237e595573226c77f8df71ecfa57909b9675e19e441301fecf38f1b1c4bb7b4ed2705a4e132d4bf19b436";
+  sha512.source = "f127b3ece0428207e503bf2f9258da2c4128b524069c45c4d7b188ac06ef52527d04020a8f002c72a878a9cf5caa358323e5db9e0b65c46d6fafadc657ec014f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.4.06";
+};
+totalcount = {
+  revision = 67201;
+  stripPrefix = 0;
+  sha512.run = "71523dddd67c44f4ef53c14833d4ea3f70603cc76f0495e5533e68eec99b1006796796b39deb40f6b36dd9ed03102ad859a7032bc6dd65137fd19c23c4027a07";
+  sha512.doc = "2fb61446efe5fb3ca8c80099d19ecb7a281ea2ebfa756778e4bba8060e9331fd1b712b7b77c66ddbd3a5b60451d6007130803b6138f1eba466a5f210c1d3322d";
+  sha512.source = "be9fc65fdcc7999279b5e4c5b495fd7fbab4606fe9f6dc96a5683ef0af41ac8f4fd8c3f5d2470224304a1bc974a6a9b40a7c017049507a7b6ad8db15d2dd2724";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+totcount = {
+  revision = 21178;
+  stripPrefix = 0;
+  sha512.run = "03ece717c7db3820cf41192e3bad2711e159fcb8a5a5a185e1c55335364917a515d9dd691cf1890421a8c62c9e55bdc49cb13718f7d98d9df34a2470cfff0daf";
+  sha512.doc = "46ef8cd2317108d0896b32ba9104c69fb34a6d13d1e123d6b8f1648bfdfffa6bb21f17207433dd763451b1f6c104ae3532e7aac43ef2ba73281842f0a3bcd05e";
+  sha512.source = "1820b0b44434650c072a67a4c6144beb7a34129415a4ae298b9c97efd7e81d3396ddb6e4a03081a19962001c8c01a4cdda563c20ba19bda1411e4832d5e7fd14";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+totpages = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8dbfcf7728690d6c2a20f661daf62e80c00d3f08fd00aee7a07cbddd31f6adf8f38e32623b2963748367ea08dd3c95919ab576b22d70214a2f5f4f07c40374f1";
+  sha512.doc = "58cb9d30644402a68462e0b00b6175ec4a002135eae0bb16ad2cb5b919d1dd6b93583074a0723e1c55946e7d94dab506b8527a67d7d7b39be20608207bae5626";
+  sha512.source = "2ac7e8e8f7b79721fdbc6cfcf9d5d81d80b64f60a535435ec13335e1b6059c01001003ab87d9ab8fff4323575a0fbaf6e8a3569670eeb5411be495d9fd712a1a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.00";
+};
+tpic2pdftex = {
+  revision = 52851;
+  sha512.run = "fa8689bd257b6336badb8e5a742d5c5f12d9088b33b43bdc41474feda62358c754db05735fa471baa307907bcd61f68e8d061e66c400198d6a1dc165f39d2226";
+  sha512.doc = "f24f8508279ded0689bb9dda8c653cfbd903c46782744fcb8d004f50a771ca74b86549c86abc765a408f2be67334048390e407be9446faa476a02ce9c27d5547";
+  hasManpages = true;
+  license = [ "gpl1Only" ];
+};
+tpic2pdftex.binfiles = [
+  "tpic2pdftex"
+];
+tpslifonts = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "0394101636f394f04c38b6677f921136f74e3c8abccff199d4c972ede085c3915e2fe9bbc5b239044dd8f24b405cfc34b5c736a7cd03b749b6aeaf7feb15f5e4";
+  sha512.doc = "e5be9024a02669212044844ad0e99b72faae15c62fb0c9065c8a5e3beb852968cf4cd4744d01890534df5a540bd1066749d999e919afd7d791b4e9ca7dd3c26c";
+  sha512.source = "d55ebdf58c24f9d68f7a69fab79b8486c46d4d23714d9e1d2365320457ca60275449492482d5d28c4c8a2c884074bbe74874f509c60d66f49b6deb2a06925c9d";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.6";
+};
+tqft = {
+  revision = 44455;
+  stripPrefix = 0;
+  sha512.run = "0bd44773d17cdaac4e3490dbca1fe038bb18e50d057d6adee53b32d6127ec844e3ae9b8f0f671969c8a00e0df01eca9fd93f27e85fc1ebcf03966e6c82b53f8f";
+  sha512.doc = "0b6c66aefec59955214299a99eaf4949900fb294e7f1eb904efdfc0de3aa85c5fa38961073ba3f7a3c60f26688c28e6f1bb5ea2c32751062fb3231edc4607f0f";
+  sha512.source = "afea6aaf0250f9c9307479d587e844b3f391e387a4d2b6bf83b1eb2e63459d132cf0da38160bbcbeba0eaf1fc8401c9c21dec9dbc8a5e54aebeb1bd25a357445";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+tracklang = {
+  revision = 65263;
+  stripPrefix = 0;
+  sha512.run = "a8cb03ea2fd0063ad3e0784c1fb6085e623f08d2a8a8e1e5907a13b0d08c2a99c7e1f6d0e357dabdd4e655122b572dca2eee5855bb5fe9ca500715a4b8b4790f";
+  sha512.doc = "42dd6cef4ebe9212277ed9cebdcf9875a73981ff88ebd19a5bb43296605087cceeb4095f5de1eef53b70f8edeea5268ce327d16545c55411c20880673f7fd651";
+  sha512.source = "1ef4767d6a2a6f221d64544dfe3bc7c6db411b1b525dd887279d8454e7425122d1b0b7ee7b7ee65f2d006a12b76eb1b9f5fb23263da16937894209cb864ecb3e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6.1";
+};
+trajan = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "66fe869b94f489a3240078fa28da32fab71767d93befefca62fda3a39ae53ab975b13b7ddf84e490658e915c100f16225ea0ed8e7787b099bf4cb067a9fd4e09";
+  sha512.doc = "c6b6137d1952660b99bf077eae0ddc0f40b4ea9ff6308e4f461fd0e34c7b4b35b4ad79f3e42e4d0077c9d2947db642d0add032f2413d580748ba786a8abbf029";
+  sha512.source = "36b85f870cd9b006f89df594193877a2188635be840636ae9300f511e5ab2a1ea60eac7f927ccb3e9832ab01972bf585460b47cf7ef30f36a6049ab0ce0fd95b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+tram = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "4592a288c08f5bf6b41fdffee8129e08fec7397edb2b351617fe79571d2905be61cb776f87a5b152c4b62acefdf21ee2f0b293f210ce52f449d3b9e41833b2d5";
+  sha512.doc = "bfc46f516c2f81530ed7e648ef6774443502b580cf580b5fd5ea9f7be0311b33fb14156aca3f36bb4d74cc165dd33d0b8ef3ebbab5624f38239c281c7d7bda09";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+tramlines = {
+  revision = 65692;
+  stripPrefix = 0;
+  sha512.run = "d30a7a7ee30f933163f5462ce00b63e82bbe65b2d08b2b530004c22f7fdd884c99d44423aa98ee4176f0d7cab159799984a399ce26315d0af6522babf7b3f646";
+  sha512.doc = "209f4af2dbc0993c3f3b454c2d030c2f69e43403d50721a2c1e7159c1ed1cd95a01c76bd1821d1f281c4b1fd516b3084799d5877acb500453008c3e7e1b15b5b";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-sa-30" ];
+  version = "1.1.0";
+};
+translation-array-fr = {
+  revision = 24344;
+  stripPrefix = 0;
+  sha512.run = "d32d6b397916bf631d65171f4f7de4bdb6049eec5414d1a9adbbe88d147ce2e4930a4f17b70c5c12b7ef9c3300d9eb099d63fb14ccd5478c6bfcd0557074b343";
+  sha512.doc = "7d9b2e43f4fde3e6a3b7436a55b2095fbc4ffa31223019c1cbfdf3d623c48be406858cdb96c8693e10fd0023050ddfbb09b463a9a3804879945ac0d6aa616be4";
+  license = [ "lppl13c" ];
+};
+translation-arsclassica-de = {
+  revision = 23803;
+  stripPrefix = 0;
+  sha512.run = "76ced8c2c93e35d6bee10f34a7de5709b8027f9d498f8fcd21ba776850c65e1e20eaf20528414b7d9da1891a2db7132b6e3b703c4f8d91f4ff0c69eb9159c996";
+  sha512.doc = "58773adb7493e6ef31d8fd3854a51cd37921dd331f56f1d9eab5283c121fa8c3316ffc41242356a87af04bb6da68761ea15829e5e8555d2e6cdbb68833c8d313";
+  license = [ "lppl13c" ];
+};
+translation-biblatex-de = {
+  revision = 59382;
+  stripPrefix = 0;
+  sha512.run = "6256a868d6f6ea53107245574d3d7fe3f1b646cfa67dd456f88abbab980b4f9060c752faa14f185957762b76c159aa8d52b3ab8908c53c5938e415fa8e4d5f7d";
+  sha512.doc = "e7e634d9d581f781f33ebcad17f4f496738d6364725dae75d7dae6d357bb7deb08a5e01de0e1ac6aa32cdc09ebefbf0190d9f6f11b286a20ce0fce23c0516fef";
+  license = [ "lppl13c" ];
+  version = "3.15b";
+};
+translation-chemsym-de = {
+  revision = 23804;
+  stripPrefix = 0;
+  sha512.run = "e23821fc1bbdee758e534bb52c4e0f348d6be3396ca2d8e3c11c9425132fc9c28f2bf6c98cb1beee9b23716cc1a75704561d9d8f16d2f4e94851fc2f88e0895a";
+  sha512.doc = "efe9f711c42925fd035339c25284e09ca7a99c246bf70ef2c15c4f1149accf5bab09e396b94d6d59d4e8c303bfdb3f40570912713dcbd33e7ae360a6b21c36de";
+  license = [ "lppl13c" ];
+};
+translation-dcolumn-fr = {
+  revision = 24345;
+  stripPrefix = 0;
+  sha512.run = "8d2288707f13896dbb578b538b535efffc89991d56586f27a35b284b5be7c553df97a72ac163a625238e281bfe97bb79fa716855dc8e93f25f0a8af69674eb45";
+  sha512.doc = "95d1633884f7237bf2a7abf8a43127ac1954fb5d0e308d676a7f4c3255d709496a382f01a8af6c28f793bcd1863e98f8ed1441e7cc288d3b8de3176631cdca1d";
+  license = [ "lppl13c" ];
+};
+translation-ecv-de = {
+  revision = 24754;
+  stripPrefix = 0;
+  sha512.run = "33998fcadaf7b42874968348ef4e3232652ea401410eea6a8011db146a4989afb102a2bba247df53b875bc02b1ea8f21ec5c68783ae43f36a3f175e77dde6453";
+  sha512.doc = "a86784aaeaa786251f35ddf273050e9c981a68d060ba1a2f186379e04f89edc696090b44b402996c4f2422d1cbfd7fd68136c29fc7c74a2fd32d6d230eb2e489";
+  license = [ "lppl13c" ];
+};
+translation-enumitem-de = {
+  revision = 24196;
+  stripPrefix = 0;
+  sha512.run = "7018a95d7b68b6b736472d6f43d356d25d2a73df4a5dbc080485f3b4e747d122889788b3d1a75ec4c479a84a4453128104f01b2e1788e9dc50d09bda0eb53cfe";
+  sha512.doc = "bee33ecf7a3045c382242f4b6ec9599f32fb254053a6417ceb514f3aad64b2bf51c50f660b562a2a3f0207f7bdc4676527627f432b1556362e3a9f5e9eda8694";
+  license = [ "lppl13c" ];
+};
+translation-europecv-de = {
+  revision = 23840;
+  stripPrefix = 0;
+  sha512.run = "6102a92b45fb7c19d2190bf4289e8b6b24ded67d0255ce2f483627bbdbee00c42c044be03bc10c9d0e23c2b911e781d21a7e6562e80988620a6da60562d98bf4";
+  sha512.doc = "f50e761fc7925f0cf404788ad2ad70586536e1676bc7a026be5a81136a1323f011a281160a344c455346553e90cb632133668c2483200a05ecf961e46e50bfb3";
+  license = [ "lppl13c" ];
+};
+translation-filecontents-de = {
+  revision = 24010;
+  stripPrefix = 0;
+  sha512.run = "78dd9ee41d9b06438e01ec12f716929c4cf0fbf6ff209f45fadce9fad4bac0d1b31732b3f66896bf7526dac7532504e0913dbb69c3c7e13830e81297b2761935";
+  sha512.doc = "17ed1c39c549b43c31c13dfd6ffbd968ecbdd3e64b00cbc66b0a8914726f4baa7faf98edf30c23ed81850cee98a732bbdd70ef667973163ccee0b35c160fdc64";
+  license = [ "lppl13c" ];
+};
+translation-moreverb-de = {
+  revision = 23957;
+  stripPrefix = 0;
+  sha512.run = "6b11a1b522c728722d4d5d5b38dd453ec017dc053d360180b943778923ca9a23b3ebb92516c1a6880e507f5e8b6d8d87878c92762637acc5ac93f42ad790446e";
+  sha512.doc = "955070d4e92e38712a5df837fd0df716d1a597780a4b06046d5aac5164efc0fec1121c51ea09c3ef1a090d51732f57308f4db386440118548e2167f3cafe16ce";
+  license = [ "lppl13c" ];
+};
+translation-natbib-fr = {
+  revision = 25105;
+  stripPrefix = 0;
+  sha512.run = "ff34cb7cece157b933117ba0e9aadb0e9caa759a406fabf7b0ebb89e5b03ee6db7aa493551816e9061ff91a460e46a58f1402b086d37c48863b4e093d19326a8";
+  sha512.doc = "971570414f9705cc4026a21a557b2f1dfe8fc010feca4f1ada946d11aa30169746c2017fb3882e65e68520539974eaf2361ebab7bcd292eed177fa7f6eb7337c";
+  license = [ "lppl13c" ];
+};
+translation-tabbing-fr = {
+  revision = 24228;
+  stripPrefix = 0;
+  sha512.run = "76f1c6318cd964b94d5a1d836b1a40fc58de49566cdc30b1ea60fc29fbcc8c6b01a477f4739a5fd9bb24998325dbf42817ad016fff27207e710bfc4b51b29985";
+  sha512.doc = "ae2f1aa60162512287f15c770a465c2e39abe1fa5d1223d96c524dc81bf065d62f307893d22dfc06fc50da8d63d817ed60c8f07fd4fede984b6febe9c8b7b710";
+  license = [ "lppl1" ];
+};
+translations = {
+  revision = 61896;
+  stripPrefix = 0;
+  sha512.run = "82d2a821c42bda66658f8557d85f2c52bee6324c88cf44e5440cac4de5bf7e938a3e37f7fe2371069a923c1f3fb794f8860274765054f902eaba560ea195297f";
+  sha512.doc = "ab72edcca1d3407eaef679acd3f3d2a49f559e5ca6d9d1ad7221dd76152560be307722155cd4da54215e3b7f561f39e08ae737c70ff2e7fea1ddce2561b506fb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.12";
+};
+translator = {
+  revision = 59412;
+  stripPrefix = 0;
+  sha512.run = "5700b0b8a95b244c93f17c5e1bfc74d4defec842892eec358b308dc55f45ffd5bef050a1ed938c9100cad771ce5ccd53bfcc917083a9ba23a60a3b339d241f2f";
+  sha512.doc = "abbe08cb16a39395b53d01f85172a11e339cd18f2c7f9dde8ab1d0cf353649c181f442fcb94c9add913b2b807ae9f6ba1ac54e9a6fed147cba1af335b6b73d8d";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "1.12d";
+};
+transparent = {
+  revision = 64852;
+  stripPrefix = 0;
+  sha512.run = "58ffa6219576a994955be228a412835c8da328c351ca0cc5dfa9d3a9fdfe8b38324890ecde9ec8ed9ccc49231169786d704ef65cdd3dfd860f5aa761a18c57d9";
+  sha512.doc = "73942fa07c9bcc6e8f08b91837f96a3c781f2f60443078b67232092b98e0bfaab07e57bd43e54345df7fbb9ea20bba8bbbc10c9dc58d5cf2d0b6f6bed469d894";
+  sha512.source = "b37938a27dce42366234f7ec2ad1287e4864f53426584ae72dfd801055a06dfd15cd7abffcc0908e22971b01eafe11521c01eaa36a9d0f15fa8b1e61d3d250f2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+transparent-io = {
+  revision = 64113;
+  stripPrefix = 0;
+  sha512.run = "69d27356f57d5b610fc9e6e839f6df111f6b98b8bf446327ecfba473dea6bc997cb6802ca382b3438d44de85fd5f50f82bd4e5508bfa43d08223463b5436950c";
+  sha512.doc = "2e54e51744c482f98c1b35588cc934ba18e3358fc2be043459d7e16f8c85ee6aae7acf4b6c3b329cdfddcf1b3126000c6559d41d5b2c4e88d5018844717cb8eb";
+  license = [ "gpl3" ];
+};
+tree-dvips = {
+  revision = 21751;
+  stripPrefix = 0;
+  sha512.run = "6153417c5d2677a56adf031c5f2f27e4c2bf204c0acef1cc5cd49355370aa336814bad7d2be00e95d22bcf73b9b69105a255d15f29ed650511c0eccc3c9bda07";
+  sha512.doc = "8c507ec7719b92f2cf82527c7799b073ff2679cf820528b489eb7d8c83d28d098033760cf092bceb9ee7e28fec15eb580122c080b982dbb12e0e65176121e84c";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = ".91";
+};
+treetex = {
+  revision = 28176;
+  stripPrefix = 0;
+  sha512.run = "49202a38697bd9bd3bc6fcbf30d28047b8ddc4d737bfa68cfdb83197b484352997a33f55e195211eff1d548f95e2072f07ed18f1d7c6772a03c66a13051d1709";
+  sha512.doc = "fb9e09bc2f6e45b854824c9c757733c2c17b4d48edc955ea48bea3ab3fb5dd914eb6427c8ae4f74ebc62b4715bada84c8f3fca0ee7d01f8d3c2526339a844681";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+trfsigns = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3607b6371c2dbbd93524f0811dbf14cd93cb2556fc217899ef3a273c27158771f743bafff0fc90a582d65da431efd7ccc1f07bf92a6600a7bc301b5b6a308325";
+  sha512.doc = "9bac4f4deafd62a8b113107ce47bb5ea3afe05078a3c5083b1ed790ed690bc3d73066e0abadc5cb1a3d45246f759941d6e2389105632bb6592c32a08e7b7671b";
+  sha512.source = "71aaa336a9f66af6f682cadc72b2ae100c606be7d95d76c2631dbb03ff617718c1c322288c769bb1b9b19116a29baa208fa085e2868e67ce3f7a5552d823e6e0";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.01";
+};
+trigonometry = {
+  revision = 43006;
+  stripPrefix = 0;
+  sha512.run = "366a5e96499bd96d2eee38b78305d9fd7368d0b70f91acecd5a5337675002808a5695a525d011a1ab7b31ff34cc14c469970a3fe55c694f003d0ba7002795297";
+  sha512.doc = "a9bd77bda2cca604a69ca1b60deeb8da3128c625b87d64ccf39aaae853a645e736b5350d3d575302ec2a35e9736e4133cd4ffd223b9bff6191b6fed9549a8092";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+};
+trimspaces = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "09bfe50d1b14502311aea7a20df80e70c1907b1c8443aba9453aa0a3eb76cbd34728734b81df63bd5895a4a5a55ddfe6d0feedf7d5d28d6b5922a374bc550c9e";
+  sha512.doc = "8e26064de0c14d6caa1d6cf625cbd2d598102056136dfa20d0a7ffb178c26829db0206d87893937b63f83171744a29bea3567e16e2a7a0d454734a0b72837277";
+  sha512.source = "a34429fb9b8514d25ac523f0e3bfdc880b84951ff228ede3016e2d29c001b7f8058755870fc3c63e6041ef4768290177dabc6d520157082fb077497017065b65";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+trivfloat = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "25e07373c53a6d4c92a5f2f19fa0d70c86202435863b8b3cd036f2d12f74a477a33cca6508794f67256a877117bea821a11b9bff235e1a894c90b71810bbcca4";
+  sha512.doc = "eb9fce19c495eedd728e87bf47f5d925a685a8b9e81e8de0e6c317f74af6c82352f403486f5a904849ed418722d830ae294a89eaa57bbff59eee8a03cf9b8af8";
+  sha512.source = "9537944503c1606151207e75dd7a2bad64b34f82bb23d83e0eb93292ea9ad9edd0bd72a126de588125b6b425669f657506ca602796b6e2dd2997052b70f60dc5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3b";
+};
+trivialpursuit = {
+  revision = 68971;
+  stripPrefix = 0;
+  sha512.run = "62cc07c80aab3b4c35bbc5ec96d97204241b0e83248147b2875382657ccfe035567455bf8c689798b4c0dfe6bb8688da2ef9d4a89388521817dd09454867202d";
+  sha512.doc = "59474350e6626440d5a5e4f5782135182c6c5e497a3fa6436264a6774ecf498f719b7469a69539766c5e0b10a13ad659e00bc5fec854d0e961032ea7ed13af71";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+trsym = {
+  revision = 18732;
+  stripPrefix = 0;
+  sha512.run = "e571d1c0c042e2fe75b992c6e0e9e07b04f0368f1e74a51ba91c34a642be148fb817027931ec35831672970725377038b5cc80d34bdb716d936f4aa59075d83a";
+  sha512.doc = "d6cd64c1c4bbc927f4154c2281ef4c13ab145b750d92561235364a35082e497afc5d8aa5806452757b499b827305a0a183723deb38272ba43bcc38eedc367731";
+  sha512.source = "bd9c99b4c5ac266696ab4c3557028d1776a1852000db2e8c1b5a4c2f78e58f25df379a71794faf49e2c0d2ca14116796d8f6d617f4bcbaed7f05a75ec06fd5a5";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.0";
+};
+truncate = {
+  revision = 18921;
+  stripPrefix = 0;
+  sha512.run = "b676d65803577b4bce5f6240a0d05a306199f24c2b14402954f4430f07fed9a8af574c4cf9cdc233824bb1a285eee0c531aa40ae31c782a43afd678d6e44f27a";
+  sha512.doc = "78e9a96fc2e635237cae9ab4d7ac30cfee8582dde13331800ac9079d1e0726c597accb598b5e679b6643d27b2a53fb367e740b76d59e9a5d27226a4c829e8518";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "3.6";
+};
+truthtable = {
+  revision = 68300;
+  stripPrefix = 0;
+  sha512.run = "1f8ddc2aa2c8672c876794eae7266f8a4a02382ed61eb00af972a2adc732fdcba89a7a7579f07d755eb4ab742018240ea69fa214ff0393b53b9c77ba0179b0bc";
+  sha512.doc = "462a23fecb4c1f4a793200aa45d42bd325fad9abf9ea6481fd2c9d3f3993de657cbb7651c7ac1f4aca6d97626c751bc6d66285b8b3e9c06bdd216fbb5dfb9033";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.0";
+};
+tsemlines = {
+  revision = 23440;
+  stripPrefix = 0;
+  sha512.run = "d4b6a929a403ed7fea409aa618e7ca021c2c7138a6b11c980430ba18f952ffba44df951dbc7b7f3a5ffcdace3b5f3a455eedc2a50b6e0e003ae3e17e8e7f9969";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+tsvtemplate = {
+  revision = 65333;
+  stripPrefix = 0;
+  sha512.run = "36910e6a376f074b70f5fd35c8f9bf0ba1ea1f377d7b850506f8ade19e8442b8d9af3216485dd2ebac29534a5d5c59b447679a5e1a1e12c59f3661774d30b244";
+  sha512.doc = "48a91c16fd0f819ae201027409e3482edb070762f446d271eabc7822938789d8eaf5255605f66c99c5a0ac303d1d765831ca980a3ed318064b8553d447e1c3da";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2022-1.0";
+};
+ttfutils = {
+  revision = 66186;
+  sha512.run = "2e4eba2acd3b97297d2629ad93fdac4587afdfff30584ff77f69574efde4172ce60b904100c70d168016e8cb5c6407f4b4ef5ed7b3c83f942b7477af2f101be7";
+  sha512.doc = "bac6812f37f1d53184a4944e91b06c4ecd6a03d96d78956781c4b01c38ec3b65b74032704d98a4951f8dd5ad84ff54d82891c12e7db99ac58e687e535758decc";
+  hasManpages = true;
+  hasRunfiles = true;
+};
+ttfutils.binfiles = [
+  "ttf2afm"
+  "ttf2pk"
+  "ttf2tfm"
+  "ttfdump"
+];
+tucv = {
+  revision = 20680;
+  stripPrefix = 0;
+  sha512.run = "957485431ecbdd31f180b36e7519c4bee8379f477b765ff5cebe57ffa3c95caa5556ed057943eb052d61e720074dc78035fe05b0023115caceb05bd2c3757183";
+  sha512.doc = "750f739c7cc244ce52b4838009666c9b6196cee234e9bbf0028e3316c75a435b5038269e93f42d99116b9db3d93dc4710c03705b924d62f09a217f2acfe36303";
+  sha512.source = "f754ab6d751eb5df0477802ab0a4d514aa0825e824531e76904ab474ed5423cbcaf773e37ce80e94c32236bee061f92c0782749c9196c3cc7fcb9249a57ea32a";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+tuda-ci = {
+  revision = 69351;
+  stripPrefix = 0;
+  sha512.run = "d5a2887147c21caa4c3fa2d8f421a7e759998faa36ab2933b40f7ff43768677f982f5b730c593245c55d09dabdff7bfbc51e5765af897821c525c5510d513bba";
+  sha512.doc = "c4a61e1ed259abea0d77fff546ba79eec85d0b5ec63422c8181ba5cae806b4180103361d3ed0eec3035279a13fe6e45166f6832a5de5a801e3b1564fba27be92";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.36";
+};
+tudscr = {
+  revision = 64085;
+  stripPrefix = 0;
+  deps = [
+    "cbfonts"
+    "environ"
+    "etoolbox"
+    "geometry"
+    "graphics"
+    "greek-inputenc"
+    "iwona"
+    "koma-script"
+    "mathastext"
+    "mweights"
+    "oberdiek"
+    "opensans"
+    "trimspaces"
+    "xcolor"
+    "xpatch"
+  ];
+  sha512.run = "4e17b12a82a18bb1f4babf123f1e84681c6f9524f2113725f14ad85042dcd5b1fb2aeaa45f709c1797512b8e0f35cd0ff743b60901e75676ec321f8bc682e793";
+  sha512.doc = "3335c87afe969963718137a9f854e0a4935c34bd850471673a3914fb9666e8f3195962d3474df35b876741b37c231851d47b440d49c35e42533b3717be1f442e";
+  sha512.source = "d317e3fc0624ec762293c972c9feaaf56186faf0962137f43f36b974ef223b094919cd84b9f5183e89e0ea6b922e4ae22b489bc619af466dac41c98fe0b651e5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.06o";
+};
+tufte-latex = {
+  revision = 37649;
+  stripPrefix = 0;
+  deps = [
+    "changepage"
+    "ifmtarg"
+    "paralist"
+    "placeins"
+    "sauerj"
+    "xifthen"
+  ];
+  sha512.run = "6dd01a5a6faf37439ca9aab23534f99050b84bfac16df48545417ee03e72700344c25b2de3262e8e28406da705d50296473a815fa14b701c609b3715f01405d1";
+  sha512.doc = "11ac57e79a05db644235b6db851473c75d1538a1261d7022a63d9ab0cc54486cc13b7cc95c44d16912952e46bc9264c1bfb831a728b51a03495d01f1963410d3";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+  version = "3.5.2";
+};
+tugboat = {
+  revision = 68694;
+  stripPrefix = 0;
+  sha512.run = "23c3ba2e45560d22a55c4eea733fbfc55466503631eb02c61527f0a73a595790ffe8c8143df2327af61ad8c23848309065fa69abcf181f584f64d03f437228de";
+  sha512.doc = "d0482d7fe4ea30d21f43a9266c8ab4b85da66fbfabcf405ba8aee229c0081b623f1cb5862fd7e057d4080439275aa08212079bfed06f992553c4b0dec3a96798";
+  sha512.source = "fec6b9556d9a945a3e9ccf73d0d043d099883d4c5c01c0d4a06e50b7900414c37fc62ec586e43526ee4c9e711c558b1601dc46248f2a97180bb75ebd79decbd1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.31";
+};
+tugboat-plain = {
+  revision = 68695;
+  stripPrefix = 0;
+  sha512.run = "e30aecd365721f9c986b70eedd022bde17ffcf348452d650144792bed0854f18547d837d0b3731cd0810d5f6f32f10778b1adf3b29eb07a8ed4d0765dd88cf61";
+  sha512.doc = "c49683e2cef04b15c39dd275f950d602be8ecbc2e6fd644634a60100257f2367a623d06086558a69c469fb3597fd32e0a2ccee4ce9e90791daa8f8e67e1122f3";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.29";
+};
+tui = {
+  revision = 27253;
+  stripPrefix = 0;
+  sha512.run = "59e8af51c39984a42247435ad893c3b8e37eb9dc53634e0a5f30733ee0c973690b66d805079a0f5cf61762abe7fceb1f2dc91691df9be26f72a1a8edd2524ba3";
+  sha512.doc = "b48d9811ac6414d96a7b5059b33c174464f262c721159552e48e6f5bcf5b969ae91bbac61aff6077304907d3d2bd8eb73774628458a7e740ea49fe433b9bbbc2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.9";
+};
+turabian = {
+  revision = 36298;
+  stripPrefix = 0;
+  sha512.run = "fe4ec8291e8b1dfc6130bdc862384b8e7c6ea2d4db6baaf92e0b7b053ab8ed328ec452e0c1efc4da2eecc3f8b6c86e77cfd2100ea66e4f59276fb64683d55a92";
+  sha512.doc = "3b4900c67c65ee1b20dedb2ffbc844ff22dc519dde0121b375dd13bcd80a0f2fdf5cef8c4e43a395ebe8fb4c82d463f18ca30ec65fe2be398c181af78ec0a0f7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.0";
+};
+turabian-formatting = {
+  revision = 58561;
+  stripPrefix = 0;
+  sha512.run = "ebef1733d41cae66456e6a50c47ae0c66a7d7254a59e57f6af62e21cab73ae7a68092baa4706eb1f1e93ab152e0ab22550f0b4ce8cf9ac36eb3740530afe8499";
+  sha512.doc = "6cac53c6fe5dd36702ec07e22a00871932dd4b2e421649d33e33f50e8b8b8cc57e42c752ff6e4e2a53610d28f42ddc68b0b6c1cddb0a7a045f3a547c04e77735";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+turkmen = {
+  revision = 17748;
+  stripPrefix = 0;
+  sha512.run = "437ff775642326f25f260280ca8d846e546f0f4b3c3082eb1ebaadcfc6ca5196967f82a00237367754b3ff307f983a828dba5c8117539d65634379567062a377";
+  sha512.doc = "39014c9049322a1966951a242152b8774b2bc914bd620b6eba8c97e8ec457a1ed3547f2c211b3bba333cab21bac98882dbc9a1e9028443e7365780cf4d78b577";
+  sha512.source = "1d69e90b8aa74db44b7b89c8a3346ffbfca2b8514205a04610b5049e50e61b19ef063d9b3e9c99bf4c141d52bb03d600ad5ce1a13494b06fb7d13d12f47b860a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+turnstile = {
+  revision = 64967;
+  stripPrefix = 0;
+  sha512.run = "164b6b8f053b2daf93e8253df850c4aad793521848a93053f6b3879db5badc0b88b5f8f44487e5525c60e7ba7deadce53b2cecb00b7330b22b0815e01cb68338";
+  sha512.doc = "de25995e56ac3fd556aa3c50e8b041b201e2f881d38ec2183b55c5799bc0f110e12e2daf387dc9a6d72a9a85377c6e4c1610f6b54811abe617e8698a40e659c0";
+  sha512.source = "3364a27e7d174249212280536479d2ee32ee37b22f7c942858b023d9e7069c82ba80120c7d9eaafb90312dc313fb783073f08a2dd212d5ba380a386081abbc81";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+turnthepage = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "446b0516264eac6b880048e16cf4ad7bb529718c726233fc645b8c32d625f3f6b505b72beef81994b61ddc77ec8ecfece907347be4f9e18a79fa36c2aef91b5d";
+  sha512.doc = "4af8dc61e53df587f19b61f6260e7a7820a8334f2841a63f2ecc05b7197eb69596dc36163b39cdaff9258651241a334b6e3a814699065c8ce4f861fba6110f83";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3a";
+};
+tutodoc = {
+  revision = 69343;
+  stripPrefix = 0;
+  sha512.run = "acd6fc6114ab1c25259485514b54d848b75cb5f45dc05cdb8324a91b127031c0db8c84c445b0e1b429dc1a5ca0a6a394987465363265c0f830ea60e72c6ab7de";
+  sha512.doc = "8f58c8eaa4db17315d69088b9cb446b90504fe62395fcb07495742695f2c8e8215ab76596d4d98cad3c432f3e6079a2ec3088074345d0ace4d309db3163ce405";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.1.0";
+};
+twemoji-colr = {
+  revision = 64854;
+  stripPrefix = 0;
+  sha512.run = "abc9583bbfd3690ff52b2341e74166fb70eb0f6abbaf99b01b0f24b818abbe3cd7556ef9cdc3cf58c056a038fe6fc3bdd45199c437a7eab99b300622e8d7308a";
+  sha512.doc = "90e01641e73702fe012510bf3c9cf741bbeb594d528b2eb69487bd57beeff59c27ab397902b3c42d5dd1b5745e5b69d0db80b3b2d399bb1ba67e2c85d14a88b5";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" "asl20" ];
+  version = "0.7.0";
+};
+twemojis = {
+  revision = 62930;
+  stripPrefix = 0;
+  sha512.run = "d9204536ff2cf76cfb341bf8096ea71571663527dea945de901758032393f6e4f53c88f0d274e37da4cccf6b61149cb64f19a8712df80523c2f921354155b797";
+  sha512.doc = "3f2f3b13f898545a32aeccef972ed52c448f3547a6834c8cc1a5589e2ff8479b822591d20acdc41f1cfaab1e43469d75abfd0841baed7b1a1dcd4000b87d1045";
+  sha512.source = "e9c85a850603cfc49b5ab4f5c51a303dae326a3e44af547c5c9e77319422273c762facc885b76234e935c82b217e53945af524ec9e9431d834ad6645265f78bc";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-40" ];
+  version = "1.3.1_twemoji_v14.0.1";
+};
+twoinone = {
+  revision = 17024;
+  stripPrefix = 0;
+  sha512.run = "ffb9610d416a15f664bfc34772651af63f76843127290bd64462991b3b892a8bbe9b5a8251e278ce757883226bc07f89f54cf94be08d6bdbe6f68c5841e3a282";
+  sha512.doc = "5b79b0b235fda5e32680884702a16fe033f3a617daa765a72233d22df5e217f6d2a617a2d067f6a230985e5144e6e6d733ef6e7060f267c6d22bf5de39361d41";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+twoup = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b3734b3818498a7038d544304d27376ff481b81fbd776cc44b9d246c3e69560364a784d897755cb69f9608c51135a1fdbb8ed370d624db64dd7b5f18a48bf754";
+  sha512.doc = "2bd34ca3274a229949c322a543c2e1fcffac7383edab2cbb7f0c74dd43d3b9531f9ade43f6d0126f5fd43371093f92170f69fdcbc4f69ba7fdca1d1fad167c36";
+  sha512.source = "d121f96d050e4dac6b2b52ff99b9b1ac5d5dc5e815c670f6458cdf8989a7be5e5a2ffcf4bb25d3f1ab6d5c02d1c67c15382ea266d0ef2e1f6e86e404fa1dff20";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+txfonts = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "2e6a195791067ec85f4eeaea5970467c97915dfa48f59d17b5a73c90ba221de1b41ed35502c6714335cd190af05ccaefc6cd5855c5f35f49bd8e15a2b4ca0726";
+  sha512.doc = "f19a988305799931023026f714b63ee539ebaddcd39e9be1f1bf765cc4cc89428b626ff4d6bfc91ea2f324f08cf09b618b6a0f8db6b01dc9d8685618daa1e2d1";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+txfontsb = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "7b73b199b6d1f109b14154ff659089b2f3c36feaad10c26fdca80f5c4ab464f8a52fdd52a6191a89538661a3a9cac8fc45748cddd09b6e32e79f23db9e8586e9";
+  sha512.doc = "982d29750320bc1709ff8329effb3f7bedc6ded888a537aeb7f080c6fc37414956b1b1e149225cea3f3a60982575fbc943433cd4f9cc5e5d61c596973c07b3ed";
+  sha512.source = "f9e4d922abced380458f9fbb25c25a55d55e3a4b938c612bde03c0dd60d55573735816acd745c2785356e5956078615ada3c1396148f8d84a6ba9a805f4ae0fa";
+  hasRunfiles = true;
+  license = [ "gpl1Only" "lppl1" ];
+  version = "1.1.1";
+};
+txgreeks = {
+  revision = 21839;
+  stripPrefix = 0;
+  sha512.run = "05b24a0c9705589d2e04933a5e29b8a49de155ad0e9a4caa0c36785f7feafe475275b76c58aa50d9318df26342b800382d3c9e8164bd95fdf400f730191282f0";
+  sha512.doc = "b671e433740ddc414e0a881d1f91a1311ab0957038ebeba23fe99d623a62e0499825548dd591d0adc67d32a5d7331cdcdc76be6ba87f77265bcf48758626919f";
+  sha512.source = "09ffe315c18dfe3ce065a6a48dd17f1340c2381df2585a973b666d2a93f1560be11fec50c44e178a154bc39416437772ef1059c539e5934ca6b02866a087eecb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+txuprcal = {
+  revision = 43327;
+  stripPrefix = 0;
+  sha512.run = "f6840ff0846b52130b65c81513d4bf358dfea413ac6d7f324eab592b96d5277d7036e5d991dbfc1ecf6376fd35baaf0351818eed69a21b6ba88e25f878a41ef1";
+  sha512.doc = "f5bd216c689b0368bbbfe29f7fbd57bb7c02344d8696af488fdd7f1078fc5ad9ac7ad5565f1408b7b7d19224093d1418c1e3d8920b8cb0cece770811576c894a";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "1.00";
+};
+type1cm = {
+  revision = 21820;
+  stripPrefix = 0;
+  sha512.run = "85a72c942e61dc0c0fd3fd7646d264ee692ecaf4e2badab4f68dbcc380a1c88a78d4ce066e23a08d1cfb29ed3af0115b08ea05a0e078283513eb14f9c6031863";
+  sha512.doc = "6cd4061eced23057d860143dd7121b1e0ca1a17de1c2f08334c678c9623c0066ee77c1ab5036953ce390be7356d3fc0d155a5de1f0aa977e1e95296fe71d5199";
+  sha512.source = "6a66a866c6edbe8c914bd3b0a7568c0e23914253fcb70fd849326e42b2c32860c97756fb94f5879dead5bc3f057cba64f639038b5a125f607c3f21abe4807bf7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+typed-checklist = {
+  revision = 63445;
+  stripPrefix = 0;
+  sha512.run = "3b8cbfe59d50498fa196655596660c7cab045734e1c2f03843696c35b71ff5bd4af738a7e4fab2272c021558413adc3205efb0ff918ebfd6e46ad3cb6407905b";
+  sha512.doc = "5fa0547034644134f207beddf56d523eaec47c1a2f9e2be5bd9d0db17b07874aa08b86a6c059d71ef6e7918dd326171955d9dfd921b28350860710b2935ed494";
+  sha512.source = "8b5de72d3200e2c75ecf442b3cacebf6de88e4dd6473b97d4bbfa3ccc3e26a0506424854485d6f81c4c779834ed439017395a72dc7af22e2fe5d72e0e0bb5282";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "2.1";
+};
+typeface = {
+  revision = 27046;
+  stripPrefix = 0;
+  sha512.run = "68a71a590aaf3c6defc28a52b47f38bd1d24ec034df904d7baf4e22f1d390ebbabe744855bda70e72986450b402f03295f772a9576a2bffcab5638f3f77718db";
+  sha512.doc = "548caa57dcde46484ae947f46abbd8cfae54c0325b42cc32c23c092e23f7cfe6589b6ddcee1eef09ece3c5ce0328fa561c52234899d9544fdb86440c91c63ce9";
+  sha512.source = "3c0a366505b9631e4240bc6a54619c8f526b18ddada30f2a88f8adb29916d0be755bc0643fcb40dc4d1a0bc371596774d029ab4c42d473ec09c36fb48e99cd12";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+typehtml = {
+  revision = 17134;
+  stripPrefix = 0;
+  sha512.run = "9a158c2fd4c16a5dda1f8828ba32e082f5839fb841a8479563828b0085db4fbe28cb91674c6f22ab4965f8bf6f6cdc0f5b3113743113ca0188ff8bb851845ae3";
+  sha512.doc = "0001ed86af90c4fba458d299a2651a200ece010ec76bd8e934afcbacb7d7684fcd6c9514d280bac886a41eb38b4630fa52b1ea18da70ef9c29bc04618e392673";
+  sha512.source = "729bb6acd2e6ec28bb18972cc58b7ef8efae136bea2d96a38cedb4b0d40b02e00e2b21143706325bcf9add879e8adcc6b0194b6cbef3803c5566e7f6f0e63ca7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+typeoutfileinfo = {
+  revision = 67526;
+  deps = [
+    "fileinfo"
+  ];
+  sha512.run = "6f448ade3e08de1512064cdefbc1811f97f0a32141dc6123788bbd1147fe3d5c3f8709f6316c0268529017e611cf455d1488a8565a128c4c45d1de0ee9311ede";
+  sha512.doc = "d8c8e568d87a0107789db201875f2116df08a2c3dc9bf235951d5b675a8b1d01ab8b2170301581f18cfed4fec98e8d63fe127999f0273c9c59da163e72debeb8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.32";
+};
+typeoutfileinfo.binfiles = [
+  "typeoutfileinfo"
+];
+typewriter = {
+  revision = 46641;
+  stripPrefix = 0;
+  sha512.run = "f8b9edca6a860f0acf0d676fff381276594f7c13fb13da2e54caf5513a8a65fde378b4c16dc621d89d25d7492318b006d7c5d863c1f96a0a246064c0dad1f2d8";
+  sha512.doc = "12376247fd8500e7c147609bf47acab379e36126976ea9f2dc0a352b8b0d779b1cd43bd1394f3961b1a7fa894a8b6448b0369f612d8bbf8d1bec3175e850f89c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+typicons = {
+  revision = 37623;
+  stripPrefix = 0;
+  sha512.run = "38b0afff6e88635a2a27502f1abc279fd70e49f36d56bb44114895614cf80184ebf8b627bcd576d128b3557de08b3791c5c2e48f2adac9766f9a809ff0db3cba";
+  sha512.doc = "36b9517833fa6c430671fdaf0ad0775813c22ea3b3f56fad96410dd90e052b76d81f0ecd411ec19b567cd664b7ca44b9268d05ce59fb9bea0429c8f91c3a4a55";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0.7";
+};
+typoaid = {
+  revision = 44238;
+  stripPrefix = 0;
+  sha512.run = "56553f1ea620566efdcd5dbe3710627d4c1b0be0ee294d256cec8cd633a4b24048012c108eac867427ddda28614eadd73172fcd2c57ac702d5f5e5c4a40769bc";
+  sha512.doc = "fd4809e02b1167e16bdb75cce5837f6202cfb44e7a0204900f6eb70173aac984eb35b14f00a9d43d4a61a4fb3a00298eafcbf71de15c7531f043e64cef418d8f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.7";
+};
+typogrid = {
+  revision = 24994;
+  stripPrefix = 0;
+  sha512.run = "4ef0239ae626245b25e43819bc05da7d22d89d1e33b94402f8bf2b24e2518bfa7ce6626d0c9deffba5d461dd65db0160bd9134b78cd9ba930d0e6315cd761b9c";
+  sha512.doc = "d228343668d98616c6cab8a1c4b0cea313b4a7d2f25699a0f54f64b660b10869d2669d98f7f5b992ddff5a3202139ef1e278ebd40b3dd76466c6154a59804c90";
+  sha512.source = "23aa23ca0ca597a03ffbcd0ea79c1341d52aecd41d363e6daeea8b35c74d59a4edcb6a0f2dd7fc05e0a1018ce375f77ef7c831cf093292dd3785f486b2397388";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.21";
+};
+tzplot = {
+  revision = 64537;
+  stripPrefix = 0;
+  sha512.run = "78d2a67470340caaf6ee286f0dbfb9b8706cd4b0a689a64592c11f6b8a5108a61d33a24d36262aa5b802b8893ba440365fcd1280eac4cf7d3e514f6820ad21ca";
+  sha512.doc = "853cb61ef10c91e1392c23e2b4d389f0cf572b692a6eafb8bb9af35ad9b2f1e7a8630ec1df6faf1ac1bc83e88dca0146519f571917ed9ed57e6ded912fecd895";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+uaclasses = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "4341612f18d6f5f4352ec0bf0018fe3115be73f479479586a81d7f994ec23adea7c38fd773022b4d81a126e43bcbfe5f97f4c36d61bad73509f2c1b97882c00f";
+  sha512.doc = "63beb08274ed7db9a2d77761277d65f89988812765a2484d7db54a8419cf67dad3fbf76b46bdafd8bd7cf17a1d540deb83c00c7b6df01f6f023bbb5f098c2ab1";
+  sha512.source = "ffc4902edf6b4007c3685a58d3e5a20a02a6ca3072466b7415cb4fa98de236e52c6a391c5e5cf30aabf37c7374cf00aaf2c7d6c845a3a61e2f9c0b0505e215bd";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+uafthesis = {
+  revision = 57349;
+  stripPrefix = 0;
+  sha512.run = "52e0fde63c966392a235239725e2db7cea70a300837cf53003f961d32f54787d8c4e70ee76577889ea543f884ed5ec281b345bc9e83872e5a131e55429f7afe0";
+  sha512.doc = "92c2a15a214f42a9dad8c0c50a67c68d037980b813e8ea4f6067341628f19f51de36a20b0e0d8fc49acbdf6ff026a729dc86e65dd4b8fa148a541d9535db0f85";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "12.12";
+};
+uantwerpendocs = {
+  revision = 66819;
+  stripPrefix = 0;
+  sha512.run = "88163f9a28d8027e1e223e551f1fb053751f849822727fde7e595423e6f10c67e2d389f515aeaec77a68a48d7b20600cf9cf3ae7adb02e72f45e4d6df48c2049";
+  sha512.doc = "68dfb896b3b189ac38362a8826fb925c8e1af493029d04bf584a1a6e57c8e501689fad7b63c96fbec69d2aeb69965ff1cc7b544bf35161a6d90c4a54bc486438";
+  sha512.source = "9efadf4bc9c217dbad28b57845ef9bc18bdae2e5b48887d1c6c3763a3867083138eaa0a693de0c407fb798e150b0737041789bef915216fd124351c1ee6b3b99";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.5";
+};
+uassign = {
+  revision = 38459;
+  stripPrefix = 0;
+  sha512.run = "3e61f381e23c30670fe78c4a54d99970bd05883e6fa03040e7123fb0936aabf51341d64aeff92109fdc33b7b97f40aa0cd81fd6624d9449584aef1fa3061070b";
+  sha512.doc = "e6569cdac6854bc1856d6a4604589619ecbf317442018790eabc3332723dc167a879e7ca6be0da8c281847e757ddada005daaa3b8712f7697ea4052b9c9f7cf9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+ucalgmthesis = {
+  revision = 66602;
+  stripPrefix = 0;
+  sha512.run = "b836c6cd59559d6858b6ae98e04c8ac9734f8c9df34c103e6076911db5db6430d0b253c29414a63073216f2ec8e02ffafd69ea97750fa886859b9da1ca2cc07f";
+  sha512.doc = "acd371ab0e495a664d37f5da31cfaa9d31edda71b2542afe9b4ece6e4845da19e16d4b84d64b0418b49696d080fc019e521874527ecc0aa8559f2c2341c80cec";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+ucbthesis = {
+  revision = 51690;
+  stripPrefix = 0;
+  sha512.run = "b1a4258afddfb1283c3fa4f8e126dc63f1ac948ebee2d2fab3738e2f5228b0bda85e71ab3cc3ccfab0b8ae66b84547c5070e111e8c1516b54bcef721f935e63c";
+  sha512.doc = "aa443fe9530f08dde9b0531e075052868524c7ff6052e8e93e384ee3c01a354fd1752664b602ff6c98ab5250d05eca910773236d55270c09a567c9b238fbcd7a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.6";
+};
+ucdavisthesis = {
+  revision = 40772;
+  stripPrefix = 0;
+  sha512.run = "ce8191ad81027361c23175194bf23284bc2e43407f0047586a4a89a2c51f9823356e2e571639a1f76f6a1f2b43c08eeb134d874c03f559897b0cf50aecfc94a9";
+  sha512.doc = "26ecd36ab09467341868d0ad7d71f39728f23688053ad4b8a89339238da5c96fcfe504d8e6403663eb6441a14333163f8998e00428609b161c3e9665a4ef0bf5";
+  sha512.source = "759eab6cc5b63ac159e481bd012ce5da4d6ba35f459928d4e578b96bac60485df32771660b4f8fce08e73303e517c37aee1a5503a96c810506bb854cf7bb050e";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.3";
+};
+ucharcat = {
+  revision = 38907;
+  stripPrefix = 0;
+  sha512.run = "333e8f92394d89bdc3492606e467d4b664c5d87eb464e1c16ff293e3f87931c3c70308aeb523fb40f2e76e5d0aa2c1635402f40fc36ecfbb7ced98d232b8bcb5";
+  sha512.doc = "b4615cefd26201509c908c2719519f927d61ad96367a612d654917819b2ac973fff85d081dad6e1d092e634388b16e83e440d3cbad4fc7c16f638f5e2853bb7f";
+  sha512.source = "6ac34b38f4e0908d841ded4981d649c9202bd3bc277843e6e82bce629a245cea9c6ef1336d575d77139584f3940181c5e6f0abadf4ff71c42a97ccc33be59d9d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.03";
+};
+ucharclasses = {
+  revision = 64782;
+  stripPrefix = 0;
+  sha512.run = "41e9f5323b62d529f0b0ddd1ae9c5d613df19190a2a666e1c1b35cadd8bd5411487ecee1419b7dc7f06183181f68ecbb8bf813537c6e711f926fa99fa74f249b";
+  sha512.doc = "52fb328befc004024d10d4222eaa7d6d3d179523bfdd48ca8453d6023c118f328a1981b69c805660ee4ddef95df3b5b71e1c85f59f3cae92ac74898f50b52206";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.6";
+};
+ucph-revy = {
+  revision = 68224;
+  stripPrefix = 0;
+  sha512.run = "9b8cd59c35a8e94b04de4490fcf3637b75a4f858383d0d8ca263346f08d10a7ae8dfa2bbf0d5800329e1a90c40110a7767d6af6d2b24b4f94854a78bcc77aa15";
+  sha512.doc = "18319c8a2137d7d2642dab7f9569b6073ab3ae1657c51c840a16821297539ad38fc283efdc98349bacacfbaf6f674b4c4a3d56317757af74de89511747f852ed";
+  sha512.source = "1da208bbfe27b5b1ff7aaab0e808ecf65709913ac1636596261e6421237c5584eb4028accd27d9efee18045fb3be1176044cea3b0dbb083927dad55543a8de7a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+ucs = {
+  revision = 68759;
+  stripPrefix = 0;
+  sha512.run = "9adaa0a3fef64436b56d3e4e1c504b74c18dd795db15d193df0e0ced419490ab462cc61850d3bea6cde7928ddcd85cb872130d1dc9776aaf3bcd8f12cf144832";
+  sha512.doc = "95dede76d97d0dce6cdaeb0acd128e89c2e98383e633925b40433c0d4e0e342fc3df94603f17370fb56b88c40effb99eacc4310e4de4231232a2be6892adbe87";
+  sha512.source = "e2f0406d59b69bac26363cabe90364aa61513e3c20da1fb414ca683e830cdbc79410fbf9f9b36e60d467c989d03e942efa2b9905dcb2339bfae9267e49cbd00b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4";
+};
+ucsmonograph = {
+  revision = 52698;
+  stripPrefix = 0;
+  sha512.run = "e4375327eabb390842ae833bceea1a554fd833b656e0ede5d56b1bd48a070dc0b89eb878db0c77e92865760755c006fffab8a1d0627f0acb6cc1485aa9a13c6f";
+  sha512.doc = "00cfc843b8377d9390806d72a78c5c7d219adc0312a7472ad764bb777200265b6f2d6757f98c44ebdc671671df38e920fe488a2cdea0dab0a3953856b5233b57";
+  sha512.source = "900c1f53d5f78fcd7e2fbab9a83130ff0d7233a4fc3a547fdecbb6c7ac35a7c3a32a10f74b00f959c8cc4afae98f97532f3baffe1db433053497db80ab74a852";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.0";
+};
+ucthesis = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5409e366c69372dd3a93b3755d185e0b96edf71c7a8de4d6cc3d41850e5b9915d2bbe68d3265b5facd52e7d8c00159031737dbcc26302a1a6a89425ac47f443c";
+  sha512.doc = "7f7ec44a55e2d712af2204d883a7136b44192a402daff4376cd6cb217419179d2b46bc083688d9be9ad85d2b3daeb00305f2253196784ffc9d72c039f0aca5af";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2";
+};
+udes-genie-these = {
+  revision = 68141;
+  stripPrefix = 0;
+  sha512.run = "01422998b27a84f3b892114fe468bd57ecfe37dfda68ff84f2cb95fc9ba589d74fa4874bb35419403269685c74607e647d98b1b443d8739c5b4c3335820f690b";
+  sha512.doc = "c962a955f1d618232196eab7c87b301dbf725f8ab08156ed98d4819ba3be5a6873b81dd7deae65c0a36eced5e42be6415b78b06c5fe945b4d4492e98487bb91b";
+  sha512.source = "77a91a01bc6e61de8d08048cd4d04ba6e6f2b2c082e14ea4100728bec3229f096089069188a523d3d213c3bc00d27065fb5949b622869fe419226705e357d802";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1.0";
+};
+udesoftec = {
+  revision = 57866;
+  stripPrefix = 0;
+  sha512.run = "56171faa46267dbd99185807f619a673cc1ace837eea3c0e8659c4d7fb50aab7f8842e259f433070b8eb54390d3426542c3443a62d37a1aa9ae7029f4d7f022a";
+  sha512.doc = "463b9ca1c153da84ed0045a2adbe8129031bab79d0a586710b6cbb9fca9b84428b7036848efee27a075b40f0cb015081c89e6e7f5588f1e2bd011d81f40be721";
+  sha512.source = "99273b3d809dec7f508bc3f1744143804edfbcc2b3ffbdd6fca4e51be2f98f3ac0ab6852ccd333c5a69a627dfb108952d511a5398eedef0af4306ab573ea54e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7.1";
+};
+uebungsblatt = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e9ce935da13de8106d63f233349bd29e954538ad17de7505be14a4b5a2efa1e1aabd3ef46871e98d2f5d4730bcf6c49998187924328eed19a35a95bffdcb8d70";
+  sha512.doc = "2853eae6fdddf889b305166c6c09351e8e7d7fb087c68a5ab9f4a7a282118200a5120c215708e7d2b9d4487457aa6330d11ec7f7a8e0139719b67217732f2633";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.0";
+};
+uestcthesis = {
+  revision = 36371;
+  stripPrefix = 0;
+  sha512.run = "aaeb270174e260230d527379ef0a7581ec9f78387aae8505ed5e88a04586dfbb1d90cb923181f34e92d5100bcece0da66e17452218f0c83bbb12b38cc517f3b5";
+  sha512.doc = "e68e86bb446c1e79111948b004ece03e2110166d01966d562b1bac6c932385aeaa682f04262eccd822e01b93c66c77be53c947c1dbdbf5ce129a74efdacf5df6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1.0";
+};
+ufrgscca = {
+  revision = 69042;
+  stripPrefix = 0;
+  sha512.run = "ae9f69feebcd487305cbd94661af5262d32e98f6d65dbfa8b5a2760b93fcd482aca13b7193cdb93d3f518b8e3e3ebe31275af53d34e38d4b944ee36588d2cebe";
+  sha512.doc = "71dc771856ad8f31a8a69845128ae0bcc9fb7c21252e728d7f8914f2040d5550c397da8a5e7d5c2cfcc5c8a7f65328dc5ded3036f4dc786d4802ab61c1c2063c";
+  hasRunfiles = true;
+  license = [ "lppl13c" "gpl1Only" ];
+  version = "2.3";
+};
+uhc = {
+  revision = 16791;
+  stripPrefix = 0;
+  sha512.run = "b5e722e7a72d2efcd89c969c10291779a2885603817374e4318f59b4042b8890df967503016d08a91e30ba8cbbc6f1838843644f06cf44766a7096efdd3bf905";
+  sha512.doc = "c37c5041d155f9a175a6761154211a683405d094850cc829a6b942afcb93af987b4049e663d260ae2b066827007d8c6576fdcd5d14d3ff599f031b13c00e162f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+uhhassignment = {
+  revision = 44026;
+  stripPrefix = 0;
+  sha512.run = "a394f6f161cb72ba42eccdaf26f08b12048cee56207f754dac157a2eede1b0867fa0d5916a37d5e3dffbf10237178f156fd3cb33c88be6a926208ca8dcdd0508";
+  sha512.doc = "21054dc051229a338d2aa954cbf80893e156236329206ff3cb63f47dceda4c35c6fbf6c2d9492551b7609aa88dec74c507094e2d96f2f96432436e74e80a9c38";
+  sha512.source = "0bd0fcb18d334c471fa7d4259cb7c511dc7917344ffcd724ea8bdf859272cc164649f01eb4e553deb5b44f91dfcaa1640b18ccbb5b10c1b0d3a7b585afa323ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+uhrzeit = {
+  revision = 39570;
+  stripPrefix = 0;
+  sha512.run = "7b5c732258e25ecc2d429b09349b94cc4f24de77e8db40add018f42bf7658868e9c3730f0fed86312ea96625556fe02a276535eb14416d06fa5fd2cc1eff30c6";
+  sha512.doc = "76c7bdb6c74ac05fd9b51366b68b0dae8180da51f506ba1793765d25de29582c8eba51826d6d6c6d3c3c1793f10fda3f6bb75c82d8d454fb19e1339eb98a9eb2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2c";
+};
+uiucredborder = {
+  revision = 29974;
+  stripPrefix = 0;
+  sha512.run = "4a398e734fe551f1636a63ab3ac8b851ff1e445c8b15b6e48017ed7a81edbcf042750919db790d7e2e9d6b08132ec5a3c04195854315ba1c1c8e8712996dcb25";
+  sha512.doc = "6e1c91389897853bada4b52c8350dfbbc321395cf1ff7991d7f29d5e64119c86c4e07fdad889f2a4a149e0e2db1a1e5cd9a44cf6f905d5030afa25cfb14d1323";
+  sha512.source = "74256e3917f7d28adbcd5d08e4dad126dcc93019c852ff6307417b2e150cdefa986affb61d7b174bf510e5f75563bfde01fba9b4c588db3d41c2fca82e0c882b";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.00";
+};
+uiucthesis = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "565b499bcef08716d627e206a53f2f344a10a0e219876eaf4bd82a63accb2eb43c14c8c8b25236d336022900e9a7d5299b5a34d5e40eba0be6d7dc8ee4431490";
+  sha512.doc = "798e7428988a622562b94bfd4ae389dcbba3524fda0d427aa4fbdaff0f1a437babb4e68b58350a3229fa078bf11e17af9f5eff61a5c9153960a941783cca623e";
+  sha512.source = "3d1eb025e066a311e4ae28292b00e697cf4de63b1038944b41edfbdacbdfd246d5a49bd63f561c5d0d4bfadad8d2a4325a8784245c09308ef5d2380054b966ad";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.25";
+};
+ukbill = {
+  revision = 69362;
+  stripPrefix = 0;
+  sha512.run = "45a1b6be9d4dbe7a9cf47ff7cf07cd280069203eb9e3a5297e699e84bdffaf845c92a32136ba7e2f61db613a32dec6d37af3eed1a8dd52fdc652af207ef16d23";
+  sha512.doc = "ad3076413ae87035b82d913c3772642aef429c7cc0efd7718f3838a5c7dae52e3954d0566c23c57f2f25d51ee9904dc8dc78b3d8a70bbe6554ce0c74d8703862";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.1";
+};
+ukrhyph = {
+  revision = 21081;
+  stripPrefix = 0;
+  sha512.run = "043338c4e92d84bc2b7bd63610656b53b39bac225c5610089c0c8b58ce9bbe3f414129a6b043a5307ebb7b59cc062ade7bd803fb6949d06a0d0c87e2dd4a0bd3";
+  sha512.doc = "a283d11ed922181d4f29f521e3019fbca2b1bba1aacb312e22dd8e69d05d7dafbabc5c23b63707f265bcd215d8f517f58ab2ffee2b87d9bc1a968d00e9542840";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ulem = {
+  revision = 53365;
+  stripPrefix = 0;
+  sha512.run = "bb7fc8d93d38a847431f9f62f1447520890f3904654ef6f3cdffd14537600da35d54bd0839cd8fd8d26e1e3146463cd9ced79f706df54df075292eea8a40ed4c";
+  sha512.doc = "153dcf2057d267c2f59c7705c4997752e902aa004201f97d52a180419d7c0fea4173c0b5b1a1c8a11bc1703226e55ea55721a4d18c265b30343a5812d1f4e0e7";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+ulqda = {
+  revision = 26313;
+  sha512.run = "228132cc464dfe171426fffec6103f0dd5eac61c112b03d64d98bc89a0af0ddb7f52f27f9bb5461c8be6f752ae30ef3d4c6b987e580d834eb7524d5c27d956cf";
+  sha512.doc = "182dbcb73a25e05035f878696887ea219569a1a7ef44281bee14b4498b37e92346e0e97d187a5f3dbcd8d9783f260080ff10f58dfe41e69caec4888d901b9128";
+  sha512.source = "352f1a739cb9c74c0dae529ff330f3269e763242af4dd1bc0aca963b3af03f02f5becad436cc3a93aa105359a1bf2f229b3cdb7175d539d58df67563b490de8f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+ulqda.binfiles = [
+  "ulqda"
+];
+ulthese = {
+  revision = 60217;
+  stripPrefix = 0;
+  sha512.run = "23a9ad74b214612051104fb111808caf9c6bb2056f129265e77bc76370c293248a7903a5bc99183998061bb18409d86508cd488a4e82487726e17599f5948101";
+  sha512.doc = "f7e062e470c524746898e88e2f07cdbcc58c1bd3dd5c04b1f0f1e7e7e6c9fe9968ff68ef2f2a95f25405c7901d937a32ed92b752b6c74fa228237b08645a757c";
+  sha512.source = "545c1b5e53c093a1ea29ca73fdd4c3c355dc34a225651d774c31a6dc64acb2dc20d78421fc939bae4d324d6c6e5ce2e4f82ddac6ed935ec8de7e1f530aa5f30d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.3a";
+};
+umbclegislation = {
+  revision = 41348;
+  stripPrefix = 0;
+  sha512.run = "ea6a55698b51da3939a1bfc10963dd74d9e772ebd18ad9018f649077224f7ee30ca20f051a68c9bd8d8bac94baf1d0d28ab2f864419c61385ebf9bc82aacb7f0";
+  sha512.doc = "d4d5f318baa1f1ecd446bb864d0670ed2dcd7208429bfd2ce587810b27dde22f49a6f7c072aad8f6515e721a98ea0ec356ee36eb970cdee385910a291d964394";
+  hasRunfiles = true;
+  license = [ "gpl3" ];
+  version = "2016-6-8";
+};
+umich-thesis = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "52bb76c9d9e3bb742c2049495a74d026a1803396bc5064a10f4da2e80390ae6c9c9c74326b14966e989c9edd1e29b797b89413ed6e87e90527ae470a8b731889";
+  sha512.doc = "db85abee0ad37ce814c645c072399a6ab7e3307c623bd402a1b9ee8b69a1c2a8aa782b5007a433ebe9eaba984432223bd78f247fdcd0c6f50edeccc87b874173";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.20";
+};
+uml = {
+  revision = 17476;
+  stripPrefix = 0;
+  sha512.run = "b20da85c7166f8aec4309af3ab0b1319f37ada1513ff502555794b1721ac8c3f551afcdf49a58bf5c3c5e666e48962075f7711a45de003245584541175a6a470";
+  sha512.doc = "d81393e3b6d9efc0177478e562dc0a22323e3e5913d7592cdb6ec595d525238e154d2a599380521652eda4fe75b12006cfdc907715b0a9d461f8df60ed27986b";
+  sha512.source = "afc5aa7db53b82f6063abca35d8cde75659682525d939e2f55c375b89fa4cc196bca8852c91d12f7daae939c053f4c9ecf99b326361f051847e660af5afe3ef7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.11";
+};
+umlaute = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "35188d3930b11c0d1b52a5032bcf9cea21a22ce8ca2930f69ad4ab54bcdf56b73858168cc62581aac1173452dd0f7d0da3de8ac21b0ca2255ef324ff63c89091";
+  sha512.doc = "89f28b3b90f63ea4f367019f0b65aa1f8e9489ff0d897af6ea29b7455948e3e75ef003a5a2d5b4a88e00a5e415d409a577c03b63a330f93ed6804c99f951c68e";
+  sha512.source = "494ee6d1432d783f9586c80cee044e2857d4d24358c7dcb7d3043945bb3f5331b8eee78a13ee759ed6260518dcdebab33d78bab4cec5d384c4773b502c96fb0b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+umoline = {
+  revision = 19085;
+  stripPrefix = 0;
+  sha512.run = "db3b8216d50288ec096f3dea9db24dfbad76848d9b8ccdc5d1310f4b8bb1b37ef10fed74ee5e6e0b70cc3e0aaa73aea87354ad731e4057c888031eb4e1940539";
+  sha512.doc = "64d559300349fd75af4bd98f0841aee5c5d622791cdd03373ea1e7840989b5175e300663023d0f08636b86337f66c6668871387a51a9a28e079111087265bb98";
+  sha512.source = "13f53876f0b1c5921b480ad9d2c63ef3abf1e175006145f200f61f515e778161ba631c6da9ca4c4d928f94220e0964b64130638d7dd7195160b54f39e4bf868d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+umthesis = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b2fb90713da6547b9d4cbea4f972144f70d7f1875e325225f0dfb90df1a04b4693c5a3dc651f0066ef7ba6456c7732aeb5272ccfd5e8edc24281c1b1bc9e4e32";
+  sha512.doc = "fb43c7ab262d2a1eb70b80bf4ad66ae9e022c847451009372e1ee1fcc5250e93b0a4a2195f4208799ae78cbcb5fc24d48de0b2355884721918ae5d4c827c3507";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+umtypewriter = {
+  revision = 64443;
+  stripPrefix = 0;
+  sha512.run = "e62f573d1dd79b27a9ed563a9081c94eeb483fe9904cf080209a198793bbd845e4ed29eb5849165a3880338a07dade313762c02a0e37c8b518752edede622950";
+  sha512.doc = "8d8044cb196584c363006bafb7e31c023e1761bb23070ed56fa3eb84040861fa29cfae479ecad01050b9cea0f5ef408d551a34809362456e31fd53513d1bc90f";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.1";
+};
+unam-thesis = {
+  revision = 51207;
+  stripPrefix = 0;
+  sha512.run = "aaa8c4029cfb130798c5e9401fde5dbc7943d7cb89c9a620e050e619ccc1950593b1d10bf6300958aede043ed0e4fbef371d0c40f055b259284f008463a64c40";
+  sha512.doc = "ba6897f0b31953cc60bb49430de1b77d10d7656363d596d4160f96189c70417227193ac7d3809e1bd7518b89a871f5bf4b18004ff8185b2a03e0226536dc6a3a";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "0.5";
+};
+unamth-template = {
+  revision = 68681;
+  stripPrefix = 0;
+  sha512.run = "c6b6d86dacb71575a7f76e33eac081f630b81815e3501ff5ba5a5e056d5bab76c709b19b8843adca39330fb644cc49e70c8687b5a66d0dc636caa74af6c3bf5e";
+  sha512.doc = "e7e17ba71d47769db4766628d334ed66980d7f133ec0bf2bf21d7a00e92d661dfa624def736891c5d70f11755215bff47b8cc9ffaded3baebbaf52e0365227e4";
+  license = [ "gpl3" ];
+  version = "2.0";
+};
+unamthesis = {
+  revision = 43639;
+  stripPrefix = 0;
+  sha512.run = "f48e7aab2c445c5e257bb39ea4dd880cf9334a5b1dcbf429e8d4420edbdc4621aa59548f31770d67698bfb4e59e239dbcddc959c1b010e012ad16971ee7956f0";
+  sha512.doc = "240a697f242b880fd2436bbaa3752aae57ef3fd2e9ee63da173c78582c4bcbb1eb19e02a96607991d1d6a40157d52f00dadcd4956af230d429ad5223161a018d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+unbtex = {
+  revision = 69307;
+  stripPrefix = 0;
+  sha512.run = "dcc212b6a524f9634a686a78f2ec6d3cf357afe966378adc6010be11597912015f5b22388656068476b4de0f24e7fdfeab78003f43570890028654a937be0af0";
+  sha512.doc = "84df2e08d77cad569a4256b615e739996580acf12c7e3c62a0789ee553a84ac0dedf983a77e7d2b96e26b9dd96c0c43940c1c0644babd945770c74f54e4a9923";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4.4";
+};
+undergradmath = {
+  revision = 57286;
+  stripPrefix = 0;
+  sha512.run = "948d0f0ac20a63fb0c6de8003c572c11704d2016d2ddea6674f58742e997021d709d51806b5acb4716c79539b96086758814f4f5d303a257768c8716821e8451";
+  sha512.doc = "6300a5d0781bae331091cfc8007e974ed3534ec3672dedc080c8e118e8526c98206438a6841d50d2e642e8d6c7859cabae14e140c211bc8175e7f9d1cba0ddfe";
+  license = [ "cc-by-sa-40" ];
+};
+underlin = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "b3afaf4c51b3da2d082e2cc742deaabe70cfbea7425e0c57f0d1d6696cd7d8f993707a219556a5c5bca925ea63373e3f0a716a82ead647e09ef2f716535886d2";
+  sha512.doc = "d296a04d3a24b463de3e4fe99c96a2fd8afa7c4ed2fa17d1218ac9e4c17455b4752176be60743211d59657045c709c8b4bd66febf10c81a41879e8c7a67e9958";
+  sha512.source = "8c534008a2cb0710b95333869536bdef5e3910e4a7c29ad2daabacd94bc5a34ea15dd3bd8439e7ebede0985831662d86f68815bb13b3fc36c82d83c51b16cb5d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+underoverlap = {
+  revision = 29019;
+  stripPrefix = 0;
+  sha512.run = "3f94b5d33cfaa7f48441ba656e9498ea17ee5ca404e39486004e43bed71bab5f2140b391191e4d6f9575ca23e09b83bce343433c02cc394844270e563aab70c3";
+  sha512.doc = "5214981a15d7f15cd361f007505a4a0060a2952d75ea28f4eaef01c19a5b79736512a2b0a8c5e6ece2d08c364780256963276a9bc9ea980e13ba292e3d0b8bc2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.1-r1";
+};
+underscore = {
+  revision = 18261;
+  stripPrefix = 0;
+  sha512.run = "4fdc57d0a36aa5646c6b960b7579a8111441659469df32beaae06f54e6e835456810b1d9b5d36036510befd5e80b5b481b9179a6b24364bf8f858ebc97039ab2";
+  sha512.doc = "e1f0730b39a5d25cc52160e090b797ed73a5becc16b6813cd0c2f4bf78696b23aec5c82367c347d0e734f3b92761ad2090e517bb6dd2a40879639f62149fdba6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+undolabl = {
+  revision = 65846;
+  stripPrefix = 0;
+  sha512.run = "7a2a13c7cf9a5920278bfcc57c6670a3abe704ffe01f3d90e253dc974c601da9a65366e7dc49785c398e3040771f45fa67365ba4e2b32426380c70556e4337a0";
+  sha512.doc = "dff0446c4efbc3ea2a8e379718ec977c53aa54c46c6703cc774db74e9e3d85c49dc83cbe0f1d8cd6450899af5929480968fea873333aea321d8742cb328105e1";
+  sha512.source = "b5c0b41e71540e0a0b5cd7baacd702403b4611446a208186caa8f98eb840ae093b852e7b64451488ab7bdba4f3f5bcb8fadb79a9c81015de4989ffed1ea1a743";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0m";
+};
+unfonts-core = {
+  revision = 56291;
+  stripPrefix = 0;
+  sha512.run = "5476421a802ec3daa8fcb8354924ffb090aa9ea337db315c813637fafa445ef82601edc61cb7aa424bd7e2deee7607902ed33f0cfe70c214901d4c52dfcff6c5";
+  sha512.doc = "8f51172be1093ff9da6ebb7071f5fea435e2bdace5619faa24ebdef52b3e34197d91b8f9d302844d4e1377a2a4712247743172afcd4b01367e9f166bd76112fd";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+};
+unfonts-extra = {
+  revision = 56291;
+  stripPrefix = 0;
+  sha512.run = "9cf9a73ba3c2190da7999c3b770e92d8afb43c640d651173c126e930155e9f87f371392accd4eadae8922ee846a5e02c0eeab845561dea943b34b185164bba3c";
+  sha512.doc = "6173d49bb64c9b162763ff08af445e518fa650fcc13e02f5c72454d335285d9c82347cf79f945fae94429f3a9d15f9c9b58ff1d175c8f59ea7b75766cd279303";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+};
+uni-titlepage = {
+  revision = 68917;
+  stripPrefix = 0;
+  sha512.run = "980f748d37b5b4a3118b1f34db2957b71cdb7551595cf7673e64d75b70688e882b90bd83132ad43bfdbbbb2bfa2752fc2028f3164fb9ee5e9565b84740b303eb";
+  sha512.doc = "1198414d70aac8b31e23c73bd167586be5bf2f2745ad492fe516381a1e202e9e0720a389fc8c12eec2a21747f7e5c85fd754243b09dd5a008b2dcfa9a7257e57";
+  sha512.source = "3eb42ea4fc401d4a55362f66c96db5295fb6ee66cfd840786ea5aa640c9f2b92bb5718f614d832d7e84427af20334be407ab59e155d135212a00769bbbd50038";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+uni-wtal-ger = {
+  revision = 31541;
+  stripPrefix = 0;
+  sha512.run = "d1b6186d50733f87576ef6509f7eebaa17651039d882f78abbfa8ae23ddf7b896a90065fd5ff83a2e216485c22e865057f715784fab37ad9440616297d67a26d";
+  sha512.doc = "ffee19f2d4ac337f7615b99946287eb902d2841b48f9d5c49d51604b45b7eaa126538732d64b319a8ba320f1dcb9b62b45cf608dbb0059f37975a1220022c333";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+uni-wtal-lin = {
+  revision = 31409;
+  stripPrefix = 0;
+  sha512.run = "803107d89b4ce6fe120bb528c684a65db3a9c70433abfd6bcebe2a5d05e6c7680256a407ef5f0515a56915c5c1e0637a183cc866631558e32afd96a0e45139ce";
+  sha512.doc = "e88b2c8364eeebf3768d0d562447d29233280daf685d56fe791d25b352cc64c4c95be3bec198aa6e5502287a654f3088e643a3a58edf7e55d0d899eed5b704c6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+unicode-alphabets = {
+  revision = 66225;
+  stripPrefix = 0;
+  sha512.run = "5a4b043778811bfec1ecc847ee191dc64b3f99ae0adb8fda2b16fdfddabf195133d53acf295fb18dd70460e1c1d200d3e6889815edabcdd0bca9d007d7a309f1";
+  sha512.doc = "ded2197bb621622c7f9947ce736814a6acb63ce86bd866792a8fe8e1f22a8131ee12c785a81c764ab707e5bf1b2c99df73c1214ff71159e3c9fdd34ee7aef7cb";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+};
+unicode-bidi = {
+  revision = 42482;
+  stripPrefix = 0;
+  sha512.run = "35e32b9959e698ab0d32ef578376fdeaac54c1acb9abc584e742a7caafbb2cf82364d58d73ad07de4cd273a5c9c60e4468df74fc4c21fb6552ddb5be725e384d";
+  sha512.doc = "44b76c810988c541c5dc6cc85a56fb81e8c2aa97afb84192477e57f59423e508e34aaa0542009ceb5ddbf74c95cd662697544af1cdda1d0c114bb3f0507493d5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+unicode-data = {
+  revision = 68311;
+  stripPrefix = 0;
+  sha512.run = "9e74ad2fd167a913e004aa77c705f0f8b3ab3d8e717384ee150db076660bda4e2651bea97292ef9e747d4e2519d9ffaa113947dd5241f830c3e4d653ee061d71";
+  sha512.doc = "a8e147ba4d30bf80e1c1bdfba67bb3a0ff9f765c5d41734aca1708adb58c5c357a17401383faab827477fc837ac1dbbdcb55ee0b3146acc737c094d6984709d4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.17";
+};
+unicode-math = {
+  revision = 67919;
+  stripPrefix = 0;
+  deps = [
+    "fontspec"
+    "lm-math"
+  ];
+  sha512.run = "181168b0560a67c98fc9df214f0bd37bd1314b2400622d2aa3eac6659db42aabd24ab724845190cba46fd9d53b7b1440c016a0c6fab49561c3d795fefc41550f";
+  sha512.doc = "deffa8e0656c9e543e61228e4cba9a9cb31e137f6517e552f8b6243d14273b580b69e617c0473eb57a884972abfd07cd8cd9b4b836ffa1858aa1bf433375e954";
+  sha512.source = "c221366b66e3f83910aca83dd8bd97591cca5e4a22244af77c87c2a8e161294ac7f3e89d2bd7cdbfd8236df93e60ee99c9e8e9fa2c20060938b96d93f1664ebe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8r";
+};
+unicode-math-input = {
+  revision = 67089;
+  stripPrefix = 0;
+  deps = [
+    "iftex"
+    "l3packages"
+  ];
+  sha512.run = "94b91d68c4745c1773ba5d3888b2f16f8ea353d3b8041af4fb842e17b4f82c982ff7a0cb92bd59764268e550b3599c8963a2d13cc32b495f855a131879d2ae5e";
+  sha512.doc = "a93a8517f460bee1b10a9a9619f5232f41015d0695425da1dd447880b422273135bc2a287e3f988ddcec82c1b77c2d2d1848a3fae82f2ec6115f655ca667b873";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.0.0";
+};
+unicodefonttable = {
+  revision = 67066;
+  stripPrefix = 0;
+  sha512.run = "aa387053dd18c6927256690dba7e5c47a586466624f4dd36aef20b5cfbd9e1c5190ac4c5e45b5fc7325fbdb9db1fe30c42b4b9bdeeebcc6ad404d27ea36d1b37";
+  sha512.doc = "8cbfcedf459f9fdd970658ab7a462c1389e1502425816804c44bba79a4be05fbc2a6feb6769a0c693e208f2ee0ff0765c29dd7eac9afe7a5a11d1e43d636910d";
+  sha512.source = "189a69754a90457b5e99a099e65a4e62c4dc613597de7d4fc3818609a301f6da056fd88e6a6cabe4df8c1e18c0441a35dfb87d24ce9142f7fdb5e639d89c8ac8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0h";
+};
+unifith = {
+  revision = 60698;
+  stripPrefix = 0;
+  sha512.run = "98eba02a617fa5d4349c5b17bc971cc0241d6d41fbe82af1fcbca1bf44faf901e5b13e786e62f26413805acb8efc941c3f1481307c69712aff55cf17b100b5d7";
+  sha512.doc = "82620cf7a81f8502876edcbce06699a05f0e580760caab77cf56db89a145a3264202c8ab193a5a56df2f07b2b29d7d814b851dec7413fe0285124920f54baae3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+unifront = {
+  revision = 67054;
+  stripPrefix = 0;
+  sha512.run = "da1d02f97f5893d6f51b833e9919979e489ebef273922a01d0f5d48ed86ba9c401c11d5641da82f55be782dd215537159bc2c689309d3a4f730b93f2b739e74d";
+  sha512.doc = "f66a3062ccf5d1bbe11e88cabcf7bf907487993cd83bcdc9bbed927a9f0c7fe06d9975ae5006441b7b71969c436a0faa0fc8808af35ba0d381d1dbecbfe921ae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+unigrazpub = {
+  revision = 64797;
+  stripPrefix = 0;
+  sha512.run = "e97b38083929bb67c306bb3c306c5293dd5a024ff58eef5d11d5742ae0cc2bbf39c8505c89014b4c0a769d0e923f91db39173da1a4b374f3d1179a017b8d6052";
+  sha512.doc = "dd7a27267e4a7e16f9152ff393b15d4255aba7cbeeef7e5bd7211a8059dcf25473e244cdb02340e05324d982b4e973ac76a1812a82f787fa6bb504dc9713451d";
+  sha512.source = "157f4f6770f276cb6567647321637a82df9c9562e9bc661723ca56c2a7893daef5de2e75a8d8fc93d1e80b646147f87e4c294d0b0d936d9c5d9784fda27bd652";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00";
+};
+unimath-plain-xetex = {
+  revision = 66394;
+  stripPrefix = 0;
+  sha512.run = "cca8482cad022f39faf3b0b0cdf20a7d209acf5041642bac0103a3dbd1dc832a61a17c442845752317515764ab3beefd6dfcabda8c3d03cdcb8471fdd3bff4fd";
+  sha512.doc = "a9138d1b80d8d5db0f00682f213518df3a40e19b3e6f36a01e62ab020efbb9c468da282393cc43a515a39dd9ffb399801607e3ac59800dd7fef73f3007b137f5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2b";
+};
+uninormalize = {
+  revision = 57257;
+  stripPrefix = 0;
+  sha512.run = "b9b0e91a61d99005be4f37d2e5aababf70729c60d959cc57295a7197b5e360ed183bb9cd80bbb287508bf584db48f061bcbb25c6a5bfd0936923b106d9962f60";
+  sha512.doc = "804c2e70ff09a677c30f531db5605512453506ab83dce8f9dab4bfbb5602f8605376becc8f65cf375b28c9d6d35ad9f3a92d6f185697e2e9f9d367638d58fb56";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+uniquecounter = {
+  revision = 53162;
+  stripPrefix = 0;
+  sha512.run = "9769fcfd787f210e0653c971872aaad6e0ef1e5a066e392e9d599f8fc11ab9f6587d21db1100b643d09d4850cfbfbbc1d32f01fd1e86aedab8c92da4f5a7d614";
+  sha512.doc = "4dc74aabd9288ae881c4513886ff917e1e8bf08446d3b34c946bded6a6fa71ea7b6786bf432fec2661cd1db1af6b5875ab329708cc3c443499b83b0325645d0f";
+  sha512.source = "caac3c3445b2b9301d46ca94744eb600cc45b79f6946065f036f412d2d1b41716864d61e0cfb9e9d32ab8dbf870e5f4e302c96b388d680badb13c52821f7722e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+unisc = {
+  revision = 63178;
+  stripPrefix = 0;
+  sha512.run = "41f9763e8d090ccf8669af560e53d0abdb4d3f81aaa8c88a97d3b72b8698e95b9ec3c81ebd7d863027f832a945fc11d7e225bb56711cd49b90d430107e9a1938";
+  sha512.doc = "26e6907ee5f0d7e7093946cbb524e8dac63ed5c71f761875877a352f8f1454487a91ac46c6be16378c46540175d23d3d50a72eb32b3f3f96599fff9b00db1e48";
+  sha512.source = "076c5e0cfa27c31226fd1d729ae8de7d0d009f6e4f3d4d1b9e1339e29ac2db19377d34d2c16b4d821bfca999b3c59826f3b263c6bbadf022aa24447a0ffcb85b";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" "fdl13Only" ];
+  version = "0.2";
+};
+unisugar = {
+  revision = 22357;
+  stripPrefix = 0;
+  sha512.run = "01dbe995d32b49121e28163c11f89e51d4c692ab864b3dbe6305a0e4364c025b13751c137df52d24160acc9a8080fbee56fc7a5af522405c3d0564486c151260";
+  sha512.doc = "8e6fdec36271f3561c768acf095b6fc353da07864829322dd0b52b1784d74793828951e006f8c56a9c38849b28ce186682d906bd7bc906739b22782db2102021";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.92";
+};
+unitconv = {
+  revision = 55060;
+  stripPrefix = 0;
+  sha512.run = "2d1b66ee4ea2cc4bbdf18c5fb88a3f6c2ec438361d3e1cb058f9c3cde3272e40d471b48ec24749ab8fb714eca4b2f6e311c7af951744edcd04154c0f016ca1e6";
+  sha512.doc = "f01593365b13c8447c6a0ca34027956c9eba7daf4921e5fc5815fead966916b70ba5d6429ab068b3f0bbe98dcec903a59fcd6982d41769b6ad5dc0db86d7b60c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.01";
+};
+unitn-bimrep = {
+  revision = 45581;
+  stripPrefix = 0;
+  sha512.run = "595883fa58169e9cd7a860933f19847895ca02d3a684b71536dfcdff54c5fe6410e6cf6fab8ae9574cb9a9180ce24f3ddf41f817ceeab85d0c65684cdc9b3909";
+  sha512.doc = "3049a0bfcbae6666f309979e2c2b8d52647d3c445992201afbbfa28684b83adb2a1ad5f227360c49826ba2de2cfebbc87195801c38413f5eb26bcd793b77ca61";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+units = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "a1c3266bd95d8668d67e7dc451258f7a3a0362e4435ab70a574be5f7ac44bb5fbb7b30ded852602c73f227f57e8f7bf61af148070b9eae6103a982f726869a2f";
+  sha512.doc = "e8a1d929e9817539a5fef6cd89c8d4daf60cc0495fc7698e4708eefbf60fd36daf88ee5cb668e9f1d53978d53253bb52ef6b3e6d1a313708022e5218c99e89d2";
+  sha512.source = "a6aff8a5917b48ce17a62de74bf327e0bc2b4a8cfc8a77fde67cfa710d8715b0d8dda54837b3f895cd769649444691df5fafd9e486bb37f4e9af110584f676da";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.9b";
+};
+unitsdef = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "048b2d4f3b160a359a8db5a66b9bc3bf68545384c39c7c4964521aa2067a35e4524734e082d5bedeaf3ff52b6a5043717ca6f510cce0d041b0968968ffd232b5";
+  sha512.doc = "c1e6de470c8b290c66f71020794fa5a855a0c9b22d90f629c8ec0f6ab110ff780c0f39291f0309348711cc2acb60cf52f38538da8894803cfee54f9fd6fdc9c6";
+  sha512.source = "9ab403624c578eb8f33801309e8c7ab0bb0b53f5bd0de0ad912a5ed6955a5d3ea0d44bb43b61fbfe5cc60a667cd908f85061c92fd397931a2a4780d0af58646b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+universa = {
+  revision = 51984;
+  stripPrefix = 0;
+  sha512.run = "f21f9bbc0c4e730cd1b115a5dbab22df9519d4a364045e292eae6b73741dabe0117c53759b7db7696c88241800970801335f7537e19d448fda6f72569c4eba50";
+  sha512.doc = "3d5ae6da093d5671b369f7db4920baab6fea25e58e11926e2fffaedf1b0699885005f3d0158eb2a6afea9ac4f08ec63c577e99da7cbb75e33727f9a97c8157cd";
+  sha512.source = "2040de94a8a45c28a6c8c50d16a5d72297c1c8680f778a3fcf341cc35622c46219945f89d6b5ddffdcbc32be29b93505624fa450ae202f3ec53d61befb0d248d";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.1";
+};
+universalis = {
+  revision = 64505;
+  stripPrefix = 0;
+  sha512.run = "4fee20d63395348a021573af4e4e8897f267d69cc59dd7dd8e9fd6ec06041fbb00608dd3adc103b1886638e9783fdb010fbccdebd3ee7cf91a4b57dfd85b67b9";
+  sha512.doc = "79c500724365b3fec6f25dc49dd019ca23d0d3bfc9889f75f10a090250eb1614549c8f3ef215102fe5d5ea8c317bd1f1b60557133be0afe376cfd74d73d67fea";
+  hasRunfiles = true;
+  license = [ "gpl2Plus" "lppl13c" ];
+};
+univie-ling = {
+  revision = 66728;
+  stripPrefix = 0;
+  sha512.run = "5ba91b2cdb6001a42426b77284aa68b82575997ffe1c5c62afedffd6a74710dc0e4af25df1cb4025a8ffc619376333b318a8be828490d45c7b55126e4c7848eb";
+  sha512.doc = "bd576c575776ae2467f146f2cb344c97db797babce5c06a7785449010187a6ce8217b082ae84e0d045b543a4f3ba204f207d8c4ee61b7115f2b484ed4f237e6e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4";
+};
+unizgklasa = {
+  revision = 51647;
+  stripPrefix = 0;
+  sha512.run = "ac96ff7105cc0a6eefa7a797b325c6e3cd7a0e59d31a6ead1f715d37d326450fbb3d39d6bc5228df5861c5633ab8be027f7652426c10e0ab23a2c9ab68bcfd98";
+  sha512.doc = "00e373b284ea78d596519d982efe8d4c8f59f8abbec67c314bf361b1744d35fe2846615b8cb7d38e1516503c6ed49f9ea38718c31a760f3d19ed4a7686e8bebf";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+unravel = {
+  revision = 69308;
+  stripPrefix = 0;
+  sha512.run = "36afdd36eac84c2421e745b4f21dd1f00e357769df37482fbdd697b7dc27904234e89dfe7c3c61313307522c7c06264290c4e805651024390af7700379f71ae4";
+  sha512.doc = "05f27d954122d3225e43412518e3c76be1c9ff4a93f9d27c06dd57bb2f42974608960f931ebf1e8f82dfc717c51f82bcff4b34a480aaa5d0fa90504d6c7a4130";
+  sha512.source = "25047c5229041ed87e062c277603be51687b1b29296a83c87f514a6630bc89f42979059251de8f8c1cd1b01c95f0dda23926097fafa1e6863a98c46e0edce874";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3c";
+};
+unswcover = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "4080e5cb6621c3f265245540b22ae026e9c29c37739f7ae955a90ec107199bd2b52b9e2301330a630f535c05004ef762cf058b70ea5d44f65844790156379322";
+  sha512.doc = "e3b10ddf23708fa8ea68a8d5d11152812a1832f4c8d87e03a697b81f69b94167d1ac8c70824d7434fdd022f4dc10bd823fa3c177a4f0a282cd60ec166ced6420";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+uol-physics-report = {
+  revision = 65761;
+  stripPrefix = 0;
+  sha512.run = "ed6b2af5ee9c0ff53cd282b0a7c8cd26e07a5823f00abaa03471707f116f14e04c874548ccfabd2858ebb0c4bf56fe55d19f09dcf865521277cfa04491d3ea8c";
+  sha512.doc = "117ed58415a3502e75d10d2f6d6a34d43180294ad9b3a33d12e971ac20e4092a4a50f815390c7f158e79b7f5cc246616cd84a07eb76a04be1286a54a78378883";
+  sha512.source = "eca0d3706ae7428a72da99a7ffb123f471ba731f26d3260a5aa7f55b843d25c3ab837ded478263b78fb3530f7f64077488b52160806b248968f46981496e5ab3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+uothesis = {
+  revision = 25355;
+  stripPrefix = 0;
+  sha512.run = "8549715b39426264ae94d5618f13837bf20e48a350cfccc5642ff5e246ad84e04050e2def0780e8f3da69647d86b6795a009215da1277f43ab9a8a3b5acb798a";
+  sha512.doc = "16af5c258ae738401885a1451675ace657e169deb37670336ab87ac39d30128c98bff91b5f9f6f2de9961d981b2719f94472692c5456913bada6e7ec6bbb60c6";
+  sha512.source = "3b6a5f3ccc28877e4e48000ec88c480b70f5f454c481f970e6ba409fe71e19cee64293cdbc9fe46c8d0a498401fb2f46f2bd6c1662c3bf19a2c24e1c10c3895a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5.6";
+};
+uowthesis = {
+  revision = 19700;
+  stripPrefix = 0;
+  sha512.run = "060684c777f377fcc98b371123cfcd9717a113deb0f7fbd99cdf6cec65e66b77fc44d50a3475c8b1e8071eec80c2e6b1c20437a4432d6d5fba208fe3f06fe127";
+  sha512.doc = "00386265fd93cc89146fba04eff87b55fc250e3429ca5d769f006ee1e8c581fdd96702830a90ca4eeedd35e0d90305b5ce19dea6f16ef5600479d1fc1ab2e35b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+uowthesistitlepage = {
+  revision = 54512;
+  stripPrefix = 0;
+  sha512.run = "3eca5009deb6ccf7daf6d31ffb5e6d3c08ff26395e03b80617411c4dc4049bb2ebd68628f285b95b547bc512fd1cc83246afd5513dc54cb1900edb813f77ede4";
+  sha512.doc = "e5e2ec32edb38ea3960922c5f38c9dd9705914f49421b89cc1cb8e6f1d8213512c804c084f1883d1682d5c65b9c54511ec47cf700ca731c4bc352b0bc4e85ffb";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-sa-40" ];
+  version = "3.0.1";
+};
+upca = {
+  revision = 22511;
+  stripPrefix = 0;
+  sha512.run = "3423a3a7d42273bfb28642d250d5000fd55d5cfe2dfb5ba0c2f875ced6c6df344866a5512a624dedb12d6bb9357f02a831297f4aba463dbd5e69e5e8dd9941dd";
+  sha512.doc = "f19dd751bffb9ee92ee80f74f692ac410781e87817ee841c01f37bac87fc770b9fc97d488ffbe97490206899653d329034d82cf649de0ee52cfa4643f956d7de";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+updatemarks = {
+  revision = 68163;
+  stripPrefix = 0;
+  sha512.run = "9718a99c7a6775d80f485839d71933c788fc18c8b4d9caa78c9ebcc159f02ae53a87ba1479fdf231938220eaad9006b817eb0c72c9016599f61008e314f72b39";
+  sha512.doc = "76e504743dc8b68bb7749952fe63b7ac4a0b32f36a3c4b85b5391bfaeef1c9d4045f681e2a7b50786da1a7807126277ccc61657bc4dc2caa9893d858ba71b4e4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2b";
+};
+uplatex = {
+  revision = 66186;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "babel"
+    "cm"
+    "everyshi"
+    "firstaid"
+    "hyphen-base"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-base-dev"
+    "latex-firstaid-dev"
+    "latex-fonts"
+    "platex"
+    "tex-ini-files"
+    "unicode-data"
+    "uptex"
+    "uptex-fonts"
+  ];
+  formats = [
+    {
+      name = "uplatex";
+      engine = "euptex";
+      options = "*uplatex.ini";
+      patterns = [ "language.dat" ];
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "uptex-fonts" "platex" "latex" ];
+    }
+    {
+      name = "uplatex-dev";
+      engine = "euptex";
+      options = "*uplatex.ini";
+      patterns = [ "language.dat" ];
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "uptex-fonts" "platex" "l3kernel" "latex-base-dev" "latex-firstaid-dev" ];
+    }
+  ];
+  sha512.run = "920d770f36992085250b38bf8d58c59fab7ac8d121ad171612b99ec7f91369f9f31c24ba5e5402552e2fe073a3913b529fd013be1a70eb37913a9731caf69895";
+  sha512.doc = "8024c2dfa393ddadffd5c35a27542d3f27a030464306087ffc28d65c2e0c704e56143f4f449f1d59ca1f19f007389256a4a23c2f2405855a5aeeeb11bd4b3802";
+  hasManpages = true;
+  sha512.source = "7fe21c87bcdcfc7ba7221a51c59eafd17a767aff04a1f267682167962f2a75a34e12af5b035319b6e413ef1037533f2bc07e7b7d21cda63355ef4185844d51e4";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+uplatex.binfiles = [
+  "uplatex"
+  "uplatex-dev"
+];
+upmendex = {
+  revision = 66381;
+  sha512.run = "947d733e5b96ee6a621e9686357b8c3f8638c0bc482f4efaac87a72117160f81ad7aa0d34088e61e67982b345b56ec478ef3b6a49865ffb3d5512a7bf18d2b8e";
+  sha512.doc = "ec4d1670ff84680fcab88e29ca5f4306f44450ccca9cba06282ad34bd026f74b46d166724a06a313957ca8d798b0c296e848bb248ad416597a99afb16b4b5a0c";
+  hasManpages = true;
+  license = [ "bsd3" ];
+  version = "1.07";
+};
+upmendex.binfiles = [
+  "upmendex"
+];
+upmethodology = {
+  revision = 64613;
+  stripPrefix = 0;
+  sha512.run = "97028afebe70eefb0d2776abf4c7a311b1d78fb1aaf7e19f625337669ef0f085c17f9d88c76c4771085eb4a2ca1a05ec04078750fffb2904ceed8210f78be75b";
+  sha512.doc = "1931a840502d230b991078f5c35fa4dc482bc57c488b8941a5cf7b09a9aa98c6a993fe508227bfdcd0a03c421d498e3b6a3d8af23a200563cfb420cba019712a";
+  hasRunfiles = true;
+  license = [ "lgpl3" ];
+  version = "20221004";
+};
+uppunctlm = {
+  revision = 42334;
+  stripPrefix = 0;
+  sha512.run = "522b68bd32887ba14ecd927c49c5fd57a84a1c0f9b8a0bfad65a4d377b68a7bd449754dd411a72fd83e5736e32e2c47cb1f54155f72395c465e4e09ad1d09dea";
+  sha512.doc = "d0f67dba683a40a6392121cd53b58df6d7ec6ffd8bf52df60f53537fc1b389de178dfceb1e772dfc9e292cc543448dac3a85cc6b712283b384ccfec4655c988e";
+  hasRunfiles = true;
+  license = [ "gfsl" ];
+  version = "0.1";
+};
+upquote = {
+  revision = 26059;
+  stripPrefix = 0;
+  sha512.run = "06360c313124487f291a8daf7399a3139cec8c0a05be12724cedb3d60393ecb07aa31e34f9b74a83048f5752a8d826505f91f2c85d34348264975b48a1813fab";
+  sha512.doc = "4b92923e8af2dcd65e82269994c766b88c6f78f6e7b8d10b9f44889832150711acb0cbaf467d595d6745863f385569f7eeccb4ce69df8361e56910969532e314";
+  sha512.source = "dcb227a6ebb481e9c4abb9f9ddacafda03ae4a445768a3a242c6dc3bc79f83e9e5f185db4d353916b4d50f5aefa9884bc52fbced79894e1c00cd7f40f0940884";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.3";
+};
+uptex = {
+  revision = 66381;
+  deps = [
+    "cm"
+    "etex"
+    "hyphen-base"
+    "knuth-lib"
+    "plain"
+    "ptex-base"
+    "uptex-base"
+    "uptex-fonts"
+  ];
+  formats = [
+    {
+      name = "euptex";
+      engine = "euptex";
+      options = "*euptex.ini";
+      patterns = [ "language.def" ];
+      fmttriggers = [ "cm" "hyphen-base" "knuth-lib" "plain" "uptex-base" "uptex-fonts" "etex" "ptex-base" ];
+    }
+    {
+      name = "uptex";
+      engine = "euptex";
+      options = "uptex.ini";
+      fmttriggers = [ "cm" "hyphen-base" "knuth-lib" "plain" "uptex-base" "uptex-fonts" ];
+    }
+  ];
+  sha512.run = "fea7d0156a1f8b8a66fc061d454c1318fe98e6c1a3c618fd9e31fda4246c7a55684df6e01b986d0c296a7a9458c3489af0e4bb2142341a95e5279da97668b4a1";
+  sha512.doc = "edd326824f93b2e893ac9bc7b6f498178427477138c2e068a3cffddfef5ac658cfad2671454caa6c222bf165a2d4a16964fa67eed86c01342d119053f31a3fa3";
+  hasManpages = true;
+  license = [ "free" ];
+};
+uptex-base = {
+  revision = 68298;
+  stripPrefix = 0;
+  sha512.run = "793b51b536fe43860fa096d590bb64cc079f089effaead0d97262d1476442fb6212d30fba092a207797fd6508bfa24c3c3ab448ce4d531700fd8cfb08e4e8c24";
+  sha512.doc = "93332d9861526dba5c338bd14a20cb7e6e95aa6666417aa92dfa99200ea735d8ee0b61d8da1eb09c758b9b179f613c51a725abc997275905b3a832580302df51";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+uptex-fonts = {
+  revision = 68297;
+  stripPrefix = 0;
+  sha512.run = "1802a5ff347ee4b9eabb93e4da5881a19b9861e3144009839d7779f61bf362dfa5be2a37b42b64041af7083ac756aaf788ad9a69cb4ba97887b21e78f6a794bf";
+  sha512.doc = "5cfc4bbb9ba533d38bc52e5274c0cc42bca2a2cf6c3ddb623eb4f48c9a49275b2a6959311935fd3e1ca32ce775da6bf0c531542a49c31039c438000d1d15c8ab";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+};
+uptex.binfiles = [
+  "euptex"
+  "r-upmpost"
+  "upbibtex"
+  "updvitomp"
+  "updvitype"
+  "upmpost"
+  "uppltotf"
+  "uptex"
+  "uptftopl"
+  "wovp2ovf"
+];
+upzhkinsoku = {
+  revision = 47354;
+  stripPrefix = 0;
+  sha512.run = "03dcf2b73ca644f8e9e2589082d49a4d502adb51944fcd9ee5cf737ae782611b35ef2eda4242b7eec2b8033014ddbbbea3abb52b1bfe90be9cc1634345223d53";
+  sha512.doc = "d4c038d864b40603281f3186e21110ec96530e84a9ff88be4241cad165d09cd091b28bd768ca8ca0a28575dd850bb68ff88ab553cf9caaee6edd8d311c6fc9e2";
+  hasRunfiles = true;
+  license = [ "knuth" ];
+  version = "0.5";
+};
+urcls = {
+  revision = 49903;
+  stripPrefix = 0;
+  sha512.run = "5b8c80a756e45e5b847c3b970005b866f6c498eff7646155c73a9b86585dffd73e8dc66d91583dd691c910caccab60ee22a1e9dbe3aa450290fb17f019477172";
+  sha512.doc = "40b8e4ea2abcc82acb843c692d90e964932f1ad7d0e818d54eeec77340f49686aafcf2fcf3f8f4d942f7cd967754ab24ee2075c6906862266f5af56251063fee";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+uri = {
+  revision = 48602;
+  stripPrefix = 0;
+  sha512.run = "402974f30df5a00118d4bd2e978f342cdcdb22119059dbd0c1b2111fd1ce94ab8a29ceff88672c80d18a669d5440bd48dfcd23fa07844f492e5f7e0eda1671a6";
+  sha512.doc = "b2cc8cbcbc81f0c3db349952546e60c152044aae264d4b30aadb6b90b7aa5b304c89203b6219bb5161807bf1e4649235d2f98a60339a0cb93a588852a1755e00";
+  sha512.source = "0206e0d2907f3976fd605d78284a44c909ff23f16ce9b2490556136099e56a374bd410e1c9bd5687bb791334612af1cc5a62a8b53f8c7876bf02d921c9868a68";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0b";
+};
+url = {
+  revision = 32528;
+  stripPrefix = 0;
+  sha512.run = "164fb94cb128e997031bfdf8c602892d78813694f39f4b95bfead8a5b7e3cd9a0d9596dbe697e012bdf84b89c2551c2f2f1c7f99d4543e357edfaf2076b9cfba";
+  sha512.doc = "65596e0ce813233491959ef161be8570450c6c71c787b3253d0bce503558e63902137a6d337ad1e7cd2499feacbba4a93b7b75559750d05d7898ff2527f1240c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.4";
+};
+urlbst = {
+  revision = 65694;
+  sha512.run = "25d5655fc01f98a1414aa962d8ad924464835aaed993e3bb5a749721034aacb559a4ca1590d353615734535ac91d31abf7b99004f6298525ac618f35bfcb0fd0";
+  sha512.doc = "897c866ab03bdd5ab741537182788c5f484009681d6fb98f1149329068be707abae7ef012c0bd0170e2b4b673eaa63b46f5d0d55714015e8a451457f5a6c540c";
+  sha512.source = "5bbad9719daeeb8c03e7db6ef956881994bc17d7ced9b45165ad45899a7230ea8c0ceeb23d209d36535d2081b6b611d46c19b1f0f03e8fbae1788f31ab09e7bd";
+  hasRunfiles = true;
+  license = [ "gpl2" "lppl13c" ];
+  version = "0.9.1";
+};
+urlbst.binfiles = [
+  "urlbst"
+];
+urwchancal = {
+  revision = 21701;
+  stripPrefix = 0;
+  sha512.run = "beb82950bda88e7170c7ad753e93859f96190f30e89fbfbe1cdbe37930b07740f70da40124639c6ab14be93fe79c5e87b35296b68c702888d3e9e25100e86a9c";
+  sha512.doc = "8f218f76d45a2f3ea9be173ba1c6efcb8a7cff26a43149b7e0ef4fc535a4638cffe69358d8ccac44a3306044720958ea9189996e88a38d560d264f5fba6863ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1";
+};
+usebib = {
+  revision = 25969;
+  stripPrefix = 0;
+  sha512.run = "94e0ded0c7e7ac10f2d8ff9324afcfdd2dad8247cf31cd6b404d9c2b12e223e6f435ec9d3dfad0ab510b943050444f5206788540a948e44f44c5d011596cd34d";
+  sha512.doc = "3b489185729ac7d93ebbfd632b77eeb865b39043b2b68d920a6ef561ac55701a44d362b84c1fb83a2f59770442a655b779c6e49287c9d2859c44140e61c543e6";
+  sha512.source = "a0c64ad5a7479da4906b848a31ceb02b047a98e8e2c505ee748f2eed4ba27dc8b6d89d8ee3a171566417315cc2b83810f514f1a0c11f1bd4a28b57cca03676df";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0a";
+};
+ushort = {
+  revision = 32261;
+  stripPrefix = 0;
+  sha512.run = "2ece6efb162a13c37413e4fe2eed33ab7982d681fcd9435ce53248dc4c573cd90ac51293424385aac29b84159b34fb3f7fde2bc8d39eacc71f0ecc91c8db7af8";
+  sha512.doc = "d262bb270e41cb7d9378d42ec075a81158d401b737acc7788722ea7e99d896de1eb98c04a65e733d6e83f6229a9703f72bfd0a11e36e52d4799e82e19c102d5b";
+  sha512.source = "a26cdd79055b74cf30202c162fb38243571ce2bac990ea44a0eecaff407951aebd5ff4619cafa6190ef8ba6101d86a800262ad1b09972dbf7b207398b82da672";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.2";
+};
+uspace = {
+  revision = 63123;
+  stripPrefix = 0;
+  sha512.run = "cb830007a35024a6fb7817f186fd0c02270c1cc639240f2077b10193e411f207ecb744281540dd6cfb1cd830424d9a5256fc7cf5a315adcab082b6f69e7da1d9";
+  sha512.doc = "894c14ae766ada6c0eec7b3d5a2c64931a011560057fa3732eb32de0bfabb6cfedcc27d73235dfe8616e9e6403cef563880bbb66f2ec2a1244da95c92fd2002c";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.05";
+};
+uspatent = {
+  revision = 27744;
+  stripPrefix = 0;
+  sha512.run = "fbcce7a06cc018dfba47aa7e9d572003136d5b179e957f10e2bb42b2635ef4cdd40bbef19e8f827963d048eadb23a1aeedcebc87cf128f5b28cb1ab281408b90";
+  sha512.doc = "e0eafb5fadeab38da049d0d5cbadc8fa3dc3c335afe4fd5289fe30de38f0898cdd9dee091b703f6a853eba56b32b161abfe56b3185c71512c9374585e6d9784d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+ut-thesis = {
+  revision = 65767;
+  stripPrefix = 0;
+  sha512.run = "a5a9c3028582fd2c379f00adb5d6abc650d0d89c3a802726c6e4c0e86f9083c445a9a431bec9be956ef242a0b3051f32eb5b63387e2fa380961195cca8d3832a";
+  sha512.doc = "d1e28a7d927620e259caee4c4affa8af9aad67089a0886f098ff85d96bfa473863aa4c9f6ef225629fe3c97b7505a9bb73802ef861c4198002ae1af4456b1cbc";
+  sha512.source = "0ed214fa702923f6a9599bcbadd0e670545d308c32502ffeb4381e64d2f5aec4cba6b74f44e208789d9626d160b111409b5b70c46b3bd9d311d9294a4b57df80";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1.7";
+};
+utexasthesis = {
+  revision = 48648;
+  stripPrefix = 0;
+  sha512.run = "829826bbc06bbd9b8ffe585705856bbe4bc99973bad7bedd489ff23fad9cc19c4f33beb88756644d76945126983586fdf78eabb305e353cb8bde8341a3d20fc4";
+  sha512.doc = "65e3100a6acd2a02df2e95834e5e99d718cd0b73e20ef6da839cbc9831918f63a2f5b38ad888a5068b1fd87ad71ac480754d5e6b459465cbb6238d4a3b3c09b1";
+  hasRunfiles = true;
+  license = [ "cc0" ];
+  version = "1.0";
+};
+utf8add = {
+  revision = 61074;
+  stripPrefix = 0;
+  sha512.run = "988d720d5f4dac3d15e7483e1ce904f214055407c41c19ee7c2683db592ef870cc9a87d28f47092cd062b5ac5bd061b68738046dcea919b0aa9573b0c31a04c3";
+  sha512.doc = "c1f41ca0ea536db11e2e6c1df561e74f8bc51da3147410f7f33863d0be1d38948bcb64d0f4d8c41737278435d2f88b8ad758d2c48f1672b682169de5e0099b70";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+};
+utf8mex = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "0cd4c549c7b00939dec5055705658f76f6ebbe5de70e082652b761673ba5a249924fb862a319512a9a124b9cdaae8906c74439bba97be8825d4d1ffc70642c8f";
+  sha512.doc = "cd438089d90faa0e9144d23adb78ce91d85b80ce084cb92511cc23882c675cb654cb704aebeb623bb29c70b764c8a0ab19915607664895c457c583f376c1088e";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+utfsym = {
+  revision = 63076;
+  stripPrefix = 0;
+  sha512.run = "66dd74f22a26022eb13ff7a8807612d33a978070f86ee5e0eecd9b957684150985e6bd6bdb81c8917781926a0e8c13f9310aec36e12b0a896a353194f0a900b2";
+  sha512.doc = "a70bd657812f64e79f028efb591888863ba5bbc0d7f16a9c70fc1614d21c0fab9d4de2545288b12c7d6c885f489b5b0062e739e531595b8673bdd4a7e1da653b";
+  hasRunfiles = true;
+  license = [ "cc0" ];
+  version = "0.9.0";
+};
+utopia = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5f58ac6dacaddf4110b2ac2f77fc0da90d5cfdff26d888b26af06cd6dd8f483c7a6a12e0aab3f50d4188aab9ab649d993ad89e74898d54c14b3de4948451279b";
+  sha512.doc = "ba60eaf55cc08378560048ebc6f735e743449a18d2822e6027a86e595a9634461713ceb37d15b9f0c8239f1935f910bbdbd9a0d0d6fa1683174739f91c16a504";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+uvaletter = {
+  revision = 66712;
+  stripPrefix = 0;
+  sha512.run = "df759bb1a8acc3a770d9c4f2753c7968ec2a4bcdb2f8d68cd97e25e36a1a72e4ff5d16da3ce69059679eecb10d5de56464297159c7d3b0b8e16684b5cb97108d";
+  sha512.doc = "d5e076da3feb4904b0af7b6be1db59c2454784f5d9679f6f6cbde3cabde6b70b075d83126313f5938dd9d153344986a6e8b574e540b39c4fba82d513e2d61b61";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.1.1";
+};
+uwa-colours = {
+  revision = 60443;
+  stripPrefix = 0;
+  sha512.run = "c2ec752b4cbf80f35787db83a0d227306689b1ba9bee6339bb6c2940fd938ce33daa995bbad2c58ed9284143ad3f45aed6668dff88134878cf115968c6820a3c";
+  sha512.doc = "42745187e02211f149c74c82e0046f42eb5c1c6b01c39fcc8f0a52ae50613646b216355f29d0af0b6536558c2689b2eb83f31c84d29bc007de4c8f9d78ea6d43";
+  sha512.source = "e03bbb8bf8f7684c02623d9f46187cd0b4ba282b1971679927b633ad2b987748c3f784caa6eb01054422f91f2703e2733dca0bdf2c89902ef61321875e2e96a9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.0";
+};
+uwa-letterhead = {
+  revision = 64491;
+  stripPrefix = 0;
+  sha512.run = "f9e4b88e01528992956abffcadc5614ea0a250283b0bc87709e228fdc394b58600c7cd41d4c9d944a6cddb66b9a23b8ad3473f37de8cb566aaca218d348fcce3";
+  sha512.doc = "63a53dbd15700956d199ec147ccdf5c84e821e2a19ff46209f869a5656055fa9e4654746cb7f89b7cca1a3927c64715008846d87d85c8ffe6c269056b0d7a6c1";
+  sha512.source = "c86680643bbf04636e3a2cc581ddaa457d48a6dd7d5a7344480a1b1340b27f3fc23657422d5ec44200ce9fed77d1f705b85fee5ae4cf195481eb8c57fb96729e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+uwa-pcf = {
+  revision = 64491;
+  stripPrefix = 0;
+  sha512.run = "290e29b50c9842d87479c3ace96368ada1c0561e12b6c09d8b562a134a935511bca6ea177ec863e0c57339b90177f09a5305d41f741b821a621ef2a80af32aae";
+  sha512.doc = "22268ddb91b0490a9df9805803c831ff1f4259311b1fe02103658d6da69b0ec474bcb3b7b918aad23a365c343e1bab3124927d36c86d06bf3e91e021d8a9bbe4";
+  sha512.source = "cabcde080b1409d27212c2a9e00432a19c68b6af3a8304695a47311ff83745d22612c0bb967f58485e9d030700df47b97425627b2f2e2365bb57c6ac0fe33884";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+uwa-pif = {
+  revision = 64491;
+  stripPrefix = 0;
+  sha512.run = "d16d72cece1e8d98495066ba0b55dbdb51ab4909cad1b99d9d11534dcf1c57bd3b7ebfef27b2825ca24bb0e19bf4b8a6e9a1bb3b28fff061377e90c8c0afb52f";
+  sha512.doc = "d14e8f6cb0aea97df72cd801e474f7062411a15e31294a032d6e0d33f084f0edcde6b1e7d0319abfe0881de9dfaabfe89fa444f6e846f1a27916e8377358c310";
+  sha512.source = "27c47feaa89b3820824761d67d56a0f99033fb42d987b807b29624448c6f61dd7383eb16b3cebc23f899fc718e62767a567a914bdec3bf012570a8ca6cd0faaa";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.1";
+};
+uwmslide = {
+  revision = 27354;
+  stripPrefix = 0;
+  sha512.run = "a4ee1019a36a66abb6614dcf6ffdd9706b705bd18a19d34fcedba441c355ce3a7573ea0ee53686b325c6d6b485fef99dd1254118d1cdd1603e1597b0fa17b751";
+  sha512.doc = "7560c214913e9dc61d01ba8528e1bc147a4f261995294c8c938ffd853a9b6a174c1d1d47e49fa20351ea45d61dca03ef7f0ff085e8725820c24d2895a0d17530";
+  hasRunfiles = true;
+  license = [ "artistic1-cl8" ];
+};
+uwthesis = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "07bb8a3ab65110aef8de3b606ca53060dc8f29c76de55a5a84e87d43fe0e09dd16b48ec09b9a451f2285c06450ad059c4c3f9b8d48a21572a1bffbe2ee512a6c";
+  sha512.doc = "278a7ce5f0bab547de0c8dd4a26dc270500baf8abfca1ff1a8e76283fffff4a73835fbb1daea2f6864cb9dca3e0fff297887ab10305c6a87ea1d7384d964a9d5";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+  version = "6.13";
+};
+vak = {
+  revision = 23431;
+  stripPrefix = 0;
+  sha512.run = "b7606cf33b8e9d14f4ca4cced0620810eecc469faba959728d3b4d7f8d87023d600fb33f1739ce0e7d14d4a54936fbc682a54d8ad8c6b514a1f2baed2c79b2f1";
+  sha512.doc = "1e6f148de79c2ecb5fcd03ff1509c3a509ee40795af0e7f7a95fdc64c403f2de7f9d9ca37716b6488cd496e2be0565749222ae95f8b97e5cf7e05b3877bb6d62";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+vancouver = {
+  revision = 59192;
+  stripPrefix = 0;
+  sha512.run = "9fd38e4545902a8f715e2912ce2046a679476f0a91ee76af74213b65689c4e2c01aa68ea8fdb09d93442097695443a2be0d6169dd50fc8ec63a7f9fe424ea739";
+  sha512.doc = "4bb074a9ae48d6e565b1b60dfcdec4b6fe35e367639c3737e68e4cdeb9ed9017b17d57ebe895865b6b0f63bb7d66df5af08360d149aa5f2f7c604bf90faa9859";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+variablelm = {
+  revision = 60014;
+  stripPrefix = 0;
+  sha512.run = "1c34d4afa65db4993f3098cb32b604c68a75bc2c0b56b026a6d50c2de61392d4bace210dab2fb5ca0c15253e7486406aa3aa5084e2296bd5e8f1e9c953419627";
+  sha512.doc = "56bbeff2f9cb4a99c05416d7fae7cea8cef81e712092ae8b5d1ca644769debdd95c443fb6af7edc034fe9d778147e1b37da50d951278a7f64c407dead5f6e7cb";
+  hasRunfiles = true;
+  license = [ "gfl" ];
+  version = "1.2";
+};
+variations = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "71252475aec013adf9bf41460753a648420ea70fb093cadc667500a6884adcf0c6661a2d81053a733844a3f8595ccffb5ac5f7680689575d8485c47a1cc1e469";
+  sha512.doc = "75d6d8afd13f6751bad23d0adc58355d75e355554dd95971dc16ac148150990e1362ec211a3f3e6fd832ce231dbd08e50ed9d44856c763e47ddb5374b1b182ff";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "0.3";
+};
+varindex = {
+  revision = 32262;
+  stripPrefix = 0;
+  sha512.run = "fb7216b4cb06126970148788859d9c12a0626d25321cc591b2db5d7018ab2a76f5c6505d9cd47da6a3babc765dcedb6653a3ead2eea67f688cd883fe81d9f42a";
+  sha512.doc = "30b9f50b7357f12774f78f0792ee0321b5ba84d2c3dff96f5f98d87cf0bb811a2fee74b2bc691fef07a80eb65e13e42b657b74efb0ee334b4f04da7bfdd0b75e";
+  sha512.source = "19571ec2000fb99ac8e1b188e2f6965748c78476bb3fb2d38c2f668b02d268817c6f2670b9bd51df48c2db8fca1e6f62ac738f378a6832368c74de297f19b679";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3";
+};
+varisize = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "c1a900aa29601e9bcc5d1047ea5bca0bd3c079d05e8c42c8e3f85521cd8a1989425650d0e84ab0acf2a38e468bc4823e149cf1e799da8eea1d6af4554cbc0c94";
+  sha512.doc = "f575e4faff4a80f72108ef5b97abb0bda08573669bb8b28592fa607538c632d3b59626282a0ff8d7805e6b66121b2c231618901a9dd71f0242e1a0875a3e2068";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+varsfromjobname = {
+  revision = 44154;
+  stripPrefix = 0;
+  sha512.run = "0d5fb07c93fdd08570ef1dfa120870f4619b124cde769f48b4107c41827dd65c023840e1344aa283d0b21bfb0af2346135577510119579c531731f132bbfee1a";
+  sha512.doc = "57e3111b8426ace2a838a128dae49a6ffadc6892e4b85cfc83eae3b9422dc4188e505fcb2a281ff38cbeb18e385ba1da398111c5f00683568999004ffd5eaea7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+varwidth = {
+  revision = 24104;
+  stripPrefix = 0;
+  sha512.run = "d44fcd1912f1751ab18f5d7d00ed47f42bed3ad2863b35781a83df9c881943c3e1916d003361b6e64640326541f43a37abdb0a3cdfe07e4d0cf7980dfc5fe1bb";
+  sha512.doc = "ba0c0d562a7c9db36637bb18fa6f0d01661b229c66b8f0d2bd7cbafe286b81485e84bcccd06c4d47561db8895cf8933ff11d08a8de0b01405d6c7dde443e86e6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.92";
+};
+vaucanson-g = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e4bf83ea01ff4162f95dd595b93635ed988ae081d0c65ada59ae64c6c64c730dbb92ae049d22dcc20d6204c5a7cbca5cd643be6c572e51a3aa17df88c6f1f700";
+  sha512.doc = "520aabba38562e208b464fc0d4e9f9a138c238abb94b43e89864e4ac21acfd35e5d6e224e855ab4baf9feb1df736b7e937508f6245e5f873c5c8f8a75947e014";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+vcell = {
+  revision = 59039;
+  stripPrefix = 0;
+  sha512.run = "39d8f934a07095d21219d58fb41fd3e939391d5c68c51d8b9ec82a97522e55fc09a23195c8b5ae48cc3e9d9bb9a62a0b22123f467627784c767321140356d6b1";
+  sha512.doc = "f13e941e7327f4369112f59387cae9c49f10197a2c7c4016cbcc5880759d89fe88535266f5f753b48b547deda24a3ad959b42f864b9ca2764cd593bacbf908b4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.2";
+};
+vdmlisting = {
+  revision = 56905;
+  stripPrefix = 0;
+  sha512.run = "4c4b5deda36fab8ac8cadfea2093da188284cb26eb9874f27ffbedab1235d4e7bdf48e977a714fb33f0ef2c5cf4c0b92c14767c565efa6842cabf451af51c1de";
+  sha512.doc = "fcd476e8ae2db61e3a71b1dd4bffae34e6eedaa409dc3434179ca66bafa2dc4b5790bd06bf90db609f91c682d2b7bf9d5effa893e5fb914c26c20acf67f8b22a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+vectorlogos = {
+  revision = 69010;
+  stripPrefix = 0;
+  sha512.run = "cf9232e47bd3deacea13e858f4b85b45000d09f1df7fdc09bd84ed2f30de669b5d79d048a97d9aed05ccbe4ab65977becdae35b1bcbb2bb5efd2c874d7d71d22";
+  sha512.doc = "21725294c097268bf0403c9cd7cfca5a8e9541cd6829ab65c561ed4ce6e111943000e0bae54aac328262524bd19ba75e90979660948631103b4a97e4ca63930e";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc-by-30" "cc-by-40" "free" ];
+  version = "0.1.2";
+};
+velthuis = {
+  revision = 66186;
+  deps = [
+    "xetex-devanagari"
+  ];
+  sha512.run = "b7901813517790a92a921b1202c39a058d53a4159634cae79960ec7ce2da08acb757b307b5066ab1251e4b460234fd9dd98c2e404c05fc6384c656472302e3ec";
+  sha512.doc = "06a9330410b55052759e18efa8720ef65f0f3dc8a2f15d3c0a0c8f70edaf8de65eeef8ec10a9a376b4b285b1c8f619278f68e9a2bd7ba1622da72b6ff488f8f7";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.17.1";
+};
+velthuis.binfiles = [
+  "devnag"
+];
+venn = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "617ba85e996943d62a33acb2535e23700fffc63331741065faee558bebde608232a31bd73aa79ad707b107a9adda8b454f9b81dee184a64d94f32c44d76180c0";
+  sha512.doc = "0b1940cdc2bcbb7e2f103497622c4d5971abf4f6f4885f60b35a360cd655c34cd789ecbfbef9d35c61611ef22198200b11008f4f59588a5cd111870b77ba19d5";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+venndiagram = {
+  revision = 47952;
+  stripPrefix = 0;
+  sha512.run = "cf57b84165067234f5be58b2300eebb77339c33b883895e47cffdbc7c4acb6d013db7ace1eb47ef491e21526cea8b3ab993fac836498bfa16a5cea700caedd5b";
+  sha512.doc = "966f7eea0d4c40004b9710c53fdd6838b757a2c8ed47b4098ca2d47834ba52575ac7c062497f1a6d26dadfcf0d7f95f2213d34bc638262520aade0e78beac827";
+  sha512.source = "16bfa22856952e9c0595532432eb774a2ef44f52950002db670e5f3e22af02981305ed5eda1265b6d1a97f43d9a6292311bad5268a562aff6ab00f4a14a058f7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+venturisadf = {
+  revision = 19444;
+  stripPrefix = 0;
+  sha512.run = "0f6b7369c1d589f9725897182f854f008b73dbda47078285635e87d480011bea0610da81512416b0963aa55487d646cd2a957002552ef2b8609d4536c0dd96bf";
+  sha512.doc = "b46066744794a8ae1443b18bf1f6ce3d586c8ee8fa5c3273db608751979089b2407a6feab421a3c3c738a682e83e2f44bc5ac86eef1d51fa914ed0f0df985bcb";
+  sha512.source = "2deac2b1cd151e41ea604d99209174b28de33d9f9358353b7d8b120c8e3cf45552947497e6d54cdf4024f5a071c39246221fd25cbca09cee7984755036993a40";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.005";
+};
+verbasef = {
+  revision = 21922;
+  stripPrefix = 0;
+  sha512.run = "483a75883ea602f674abec796199c5206420079c6ad5e4c3ac22bd836e7ce02f686cc8b9b749f806fe8e44bce8bd35fc6b17865fc076c72f2223143ee0e8a123";
+  sha512.doc = "c88b1275eb4e3b87172e6cd157ad868b7b230d96d00ca0dc550757fdb89648a40b1090b771dcd0776b6f86a9194c553f265d990220348e5bbf9c7aa792f42914";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "1.1";
+};
+verbatimbox = {
+  revision = 67865;
+  stripPrefix = 0;
+  sha512.run = "a2520d96ed713f3e82135395c7437f1bdce04f539ca924feb1468af6a9afb9a2707edba554f073175bf01d279576d7f3b96cd8a69ff7cd6b82f6fd9dde537f3e";
+  sha512.doc = "c9c4a8a720a9dd1381a128480312ee416e6332d7bb4cd6f59c3f3c13f2c4ba5e9445f5659ff4b64cb40059fb117ce79b27b62c07b70a81ad7e3fe987f7dbbc41";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.2";
+};
+verbatimcopy = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e415f9d74f35e28c73bec5442124b7c426aff8de013aa8a2af9c234ae3ea20c131d5ad21803c92eaaf6d0aef6584b7f9b83218f9665a959ec0d6ba3ef606b081";
+  sha512.doc = "0281da688f11d2a2fefc053d8f7866878b337ee85114c551176d6c329009f8c1a8479ccb29f202106f745ba215728e7f08509898182521bcac433699e22843a0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.06";
+};
+verbdef = {
+  revision = 17177;
+  stripPrefix = 0;
+  sha512.run = "f6bcac8b35bfe707d4e39cf625987ddee6197977894e9f8ded9e3a715e0968d2d1fab07c57edf1d38150ae0c9cfc937230c9fccec431e73ae235a4cd44ed8609";
+  sha512.doc = "e64d4bf3018de72a131e7688ebbfcbaa59914c0542d2c632a91097a77f404307f9bdfc613638badb3ccca3854313f17a7a5bfb6426f467bcc98ed235af6ba49c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+verbments = {
+  revision = 23670;
+  stripPrefix = 0;
+  sha512.run = "7b5780efe1b6e4cc62909df5d5cd4a03be3dc83717f20738a83f37f539103ad12e382c0a3891b8e81b44086f92b7277b17e88c4e7d81123c04941c38114f23c8";
+  sha512.doc = "744471659373efbe040bd0698a9b33a0942d5df33312ad3cdd0f02c0e16fd2c67ea44c4ab13ce83ddca6a5e8ca68c8c8bc40c1a64470a9716511e2275683b004";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.2";
+};
+verifica = {
+  revision = 56625;
+  stripPrefix = 0;
+  sha512.run = "8c3258fdf2040e00495b56605f88160b5179743a7ae3abc6334e734ba9f1fb122bf2e4847fd9a577c1221c9e22dcfa650f15612d7a005b3719ce6c92df180bb3";
+  sha512.doc = "de41df53ca78cabf7ab3f672dd00c0042cfd8a71219d694985c18aeffa045dcd37c7b999058d7edf6a2348d83c9ae27d1e242f17a91d43b61f2b873ee2d157ef";
+  sha512.source = "85e46be6f8ee729753362243492c7946166049ebd0a89f0871bb9308e6803f5ef9416c30fe380be4961aa466a03afd9541d09e5920a196550582d326a6de8b9f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+verifiche = {
+  revision = 68023;
+  stripPrefix = 0;
+  sha512.run = "7a2804f2a963bff59bf4f566595c6b89adf8534ad7511542643f752eed2183ab3dc377ff70eed60a48b615a9f159a73d352ab2e138f7d589e9163a8328fa673a";
+  sha512.doc = "79c13fb6dff619f75b78433b628b4a75c171baa8859ae8e58444f1c57316abbda24cdfda4172a0b639b136366c4e6d6fc5ad5199b4cf86c89214e82dabde4cf2";
+  sha512.source = "7cacc48cfd6a9fb94f94a7950e3dea065b37dff2dfee6cfda29950e2baedb0ab2c4736f186facb3b23e37e406d505d4128ef6b24421ff0ccfecd89c1b7ee08ab";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "7.0";
+};
+verifycommand = {
+  revision = 69389;
+  stripPrefix = 0;
+  sha512.run = "c977f40e851a47dbb329e96df9ac528aa9a2419bbcf34470af1110751365e219aefb36c6d630022b8d57949ea904e12dbb560329c526b3e35bd101c1032e38ff";
+  sha512.doc = "69431fb242574e7ee11200904483eaa1a52f5c621d5c7c6511649a80c71d06a5527dfaefb90a74929b81b0cb2559ac136e1f6fe7321689a296a040f6362e35f2";
+  sha512.source = "8ef472771c5719e2473702f1a871ceb3512bcf557427e31a5c508701a72e813e6390fee4758f5cd059e27040c55fc5e9a9e094911d82c10d57351d26f851efae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00";
+};
+verse = {
+  revision = 34017;
+  stripPrefix = 0;
+  sha512.run = "3f9878dea106ec87f2b64960c5824fda6eb9f700b753a530cec7e1b8519dc9a817cf7ea74c13eb806497740501122790fb29f6e3cc383a8a89ad10e756b7a00a";
+  sha512.doc = "6f255167db9ebb84cf86a14e6999410efb22d087d97b82837c3ebc5bf69f0990e77ae0325618ba3ea02c116741422a531f646929eab2b5810b9f3978be6651f2";
+  sha512.source = "ce1f07f40bd329383d8a0fc97038ee975d61b58eb0ff60f8a1894a6028b2afb9db58b7db599d252cb88fbc040d9938b7b934b6e8ad683e7f4de2be9a15b37820";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4b";
+};
+version = {
+  revision = 21920;
+  stripPrefix = 0;
+  sha512.run = "9b57997e63fab25d916630bb086b7d4372e094e64175caa761c20c3c2d426a58fdc42ef661bbc1ec47f2a8d9c617b7e4dc405499c01b84eb53ca0d10f6c9108d";
+  sha512.doc = "9bada1489523eccc809d4b9654411addf31f2d63efc1f1f9d68b81e2bb3d9365e2709f55a77c53c3d2231b8da89114bd5a4217c8d18553234a980d379b1a0084";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "2.0";
+};
+versions = {
+  revision = 21921;
+  stripPrefix = 0;
+  sha512.run = "4a6474f6a014789daae358c5b73a85bcb0894eb67d09a530f3bdd8e4571552d0a3e1983b5ba40d33122caad8bd457f255b7f1bb34e9797c5137ccf461707dbbc";
+  sha512.doc = "ffebda27a9000a0c8bd8462b750e34331968aa1abd5c7039e198950eac6dc02796da6a02a258bcfcd84ca12b3d5f6d0ab11587bb5d6fa9b3121297aec2179ccb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.55";
+};
+versonotes = {
+  revision = 69249;
+  stripPrefix = 0;
+  sha512.run = "c430ad5138ec17c4a5a12bb42149bf260b582f2a8b3c9fcb15356c3ed87073b68063df1ce8d821c456c0ed0e154137a2e3ed54b83b49a859a08dc1134dc6b559";
+  sha512.doc = "3e4047566d0eb6ade7e78dc0ace0f540b56a6bcb157f613f6af0f7fe5c8ff9e47e526d68ec11b94f9e7ef3bce8fbbd26fc8c3ea115b2d1454e750ce7e15641ff";
+  sha512.source = "f986404efc03af8b3a58f07aefdcc678e0f4b37ce25f8772e145e08bacb1ebf330361d56bbe5710611d09b01d31b82e9c736c1a7419a0dc56f0fce3a5c797136";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+vertbars = {
+  revision = 49429;
+  stripPrefix = 0;
+  sha512.run = "3c3c905c6bcb013a36bc2eede14d84315f49075ab5f63376e9a440e4e7fb281ee5086b5bf1953782641284027dd8e7058e0accdafdc9295a19ebfc0088d8f7e1";
+  sha512.doc = "de6df3133c801e941cbb00c552cb2cdb1d556f099c402a0a66f460d5c7c1c6e28ec7d983563f20a609a5b5266420dcf8c204d1b6bc685031cc41fe2770a5ea13";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0c";
+};
+vgrid = {
+  revision = 32457;
+  stripPrefix = 0;
+  sha512.run = "ee46d8ae234af6f0b3bc8689cceab7d5ce8e7229b132c396a000cca15cde0ee422f91b2d4fc485c743e3a896bbab5ec90b24ea5d398bf63342751bf75143330a";
+  sha512.doc = "92e5498cea29d5fc1b373619e97c6692fef3f63002757a954649c0c4f9ef7b6594d61cce017bee709f0f1898777f962c25053b64da8079c8c9c9893f821a9aa6";
+  sha512.source = "5589904860a74979a070224b252be9b302e0f7128946624fb671e8618a2afc55c526631217348eaf84d7c0f827dfef7aac7a13a953e1ff82a61211eb2e070e36";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+vhistory = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "1e8bc961ce70a199403f548bc918efbfff57ae6514338d32928a670f1f381ccd0474f3e2e4bcb957e72ae0b74b959f9eb98b552e62dfdbcbea995549bd87ca70";
+  sha512.doc = "25420975890dbeae7b322ed9769eecdc67b9271f36e3269b6dae582af19968b79593ccc0306486de5d9c277be752569591953b423c52f8aab396430331c61e27";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.8.0";
+};
+visualfaq = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "e746106e0525c9d40c3600e283e1b652d2a5e4e99381dd7ce88ff2ded109024d86610b6305fdcc6f06220802c7ce565b3e01f9562c00884fe5e161104ad4f8ed";
+  sha512.doc = "cd8f11ebec1eda30ba7b673fe6fd241e61c4ef42a769988d34e58546f608af6a4ea569b2a30957dec0463385c5a4df70f7d10bc6e5b898229c5e6cf46f7e4fca";
+  license = [ "lppl13c" ];
+};
+visualfaq-fr = {
+  revision = 67718;
+  stripPrefix = 0;
+  sha512.run = "06a9f22c86f54883ce55b23ba81315e53afed4f7ed2b77d13a8958bc18e5a96cae849a327126843865b6ecd55d7153cf261ab784625b9a848e7dc661df95fbb8";
+  sha512.doc = "8d18a3712c42eb7921d6e0e7d29ac96c4718386643bf967b3c428fe5846830dbaca382822ae3d23523dda2e4c7d5f0d96c137412c2302f5e634471d83fdc4547";
+  license = [ "lppl13c" ];
+};
+visualpstricks = {
+  revision = 39799;
+  stripPrefix = 0;
+  sha512.run = "fa501a3ed6506fe52d3d31515f453db5378c7d01415ed05c0870ea15051d34dc5a564ab8ef2ef4608f616b657ecf29f5b18a8920bdf1606f78928fc505cfb0d1";
+  sha512.doc = "3d2dfea937b2b99e148fb0220067b9a777126854d82cd1e591f84a1d13e1090755660509814e4690dad20d2568286ce05653d3b5c7c6653df61d27229c9cd5e2";
+  license = [ "gpl1Only" ];
+  version = "2.3";
+};
+visualtikz = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "fbd3f158e72dd8b0ebd3fe9c33fe47127ecfd38bc0feac3312d569718672e9f88165856fa61389b307a211071467c10ef73981178cc9afd8ecd720cdf627dc1b";
+  sha512.doc = "16a32e64ef4d00d2bf6f99fa05b35a071539d71944227eaa5b37762e838a62b80ee4b227a8bb9cc49b831bf19976421684872f8eb104f37365669907e9621a6b";
+  license = [ "lppl13c" ];
+  version = "0.65";
+};
+vlna = {
+  revision = 66186;
+  sha512.run = "6c66717442bca3306e23f5d546e17929240ce9626a562b9e56512446998996d38f83f78fbb39e46bde0b9faf0db7eb0c0218c79e1d66711d6cd3c64a8778edec";
+  sha512.doc = "921d76535cbe7e940617355c74b82acfc61edb840db8ed9cae1aaf987fe6b83245505048c7c550d59829b204f139ae1cfd44601435e2fff2b0d5230b45a27b77";
+  hasManpages = true;
+};
+vlna.binfiles = [
+  "vlna"
+];
+vmargin = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "dc0cdd4696a44bb6bd189dcf73c69f1b2c8790b9936b1c6f35013d9342a97d36a4bfd8eab82f3e2e97f1cc952459cd9a1909915348b25f01df446c5ffc452e71";
+  sha512.doc = "ca8ebc274efacbe192b73c9551294bfae60b0cf7ebaac8425cf1b88e10ecda7f3230c336883afc438349f1ea47d66d369b52bb415c482803fb742b16cb483348";
+  sha512.source = "0ad7482be9aef59f55b1a489327c03e9d9560f10c984a0f244aa836ef12086dca2d834c033a36bc95233d6de9b801ac483d2dbf472f33e9478c5182d06a86cb6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.5";
+};
+vntex = {
+  revision = 62837;
+  stripPrefix = 0;
+  sha512.run = "f6a4396c473b6b0dd067c88911457a21ed393cd1d10edc90db0122fefedca2a6809ff50c34932d28bc1d6774ee176a165002d24062f8b6b949e85cb1468747ee";
+  sha512.doc = "dc5f2b41cfe273a14278abc75490adceff6c50698de384130310a70370a3e341280d874f398027e8b2af2fd266beb2f470d414218862097ad718e5daa157928d";
+  sha512.source = "bf8835b8e7dbd8f1ba5dfd28ee572635360f6f99818b40bb0daef4bd632ae68e1945f96dca6f0e3238fe42113c025c5e41dacd4e756476472fdbb4bdeaea3d3c";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "3.2.2";
+};
+vocaltract = {
+  revision = 25629;
+  stripPrefix = 0;
+  sha512.run = "7daa3923a6b9d84a1fae2c9bd63404c2fb4dfe3866f897895deb9ab85f33649427b38ce5e34552bbbbd8704da1fac55822a747747a0c522728e605638831df8c";
+  sha512.doc = "36aa01a5be9da9a23e3a4de63fb14a39beda4a42cd2615f75f942abff677e71f2a4f640773d27556ef246a99004c3a1aa68caac9435957152cfda96707d79787";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1";
+};
+volumes = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "e54add2c60c5446329fe6f944c99132e0f99e89dd8fc9ff459e0ee106a5241e4df4d864b43269fc14a08ddda92f4e41607eaa20ba50d4a566be7468d0dd66b2c";
+  sha512.doc = "4471a360d04cc1ed9c90ecb53bfc422fdae30571a25fc4811813f30ed5308f4d20309a1fdba808d1eb20e84b97318708f57d08722344afd755aa06588acbd024";
+  sha512.source = "0f47cc01b4631430cc4b73c7348bcb9d500d0c5c9960a15e9fb29e1c805ff0be4f0108c6bf795156ab7f939fb355f800da916f913a4a441e65bdcefdb05c0499";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+voss-mathcol = {
+  revision = 32954;
+  stripPrefix = 0;
+  sha512.run = "cec0ea20b409192c618278001045352ca6c4c11c8eda59633a9bb65ebb7a89c8c1db4046936a7f0096f52efca8a251501fccf7890288ed830f13e0b24b1bb017";
+  sha512.doc = "5d91b23d9eb45998282731620097f214b274ee744972b3d7fbeda1be2268799572f36b5f4c8b707f48e8ec2d825438bcdcee7f1376531f366af8949a862ff379";
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+vpe = {
+  revision = 26039;
+  sha512.run = "5fd5180edb830cc2f309652ad6a86e3ce1900dd0b150b72b3115f2e0f51aed4023b3f7af8c86befd1b1317829907b35ce583b50fe5cd1fa50f15863046e806d5";
+  sha512.doc = "3c60c736fa03de82bfa5bb86f40420e7f7eb59f6943a94790361bd1d64076ec97843404d1cc508074a903f83392892c6dddd1dc912162928b286e65c24a46037";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+vpe.binfiles = [
+  "vpe"
+];
+vruler = {
+  revision = 21598;
+  stripPrefix = 0;
+  sha512.run = "39582bec5217d65179b4293a18697cae20b35a0ec5416497691d16dbb919d78d4463ae15f2f05d308f45c65481f611a3f699cce9f5a3c311b84bde08fdd5f234";
+  sha512.doc = "dad09087e028977501fe143ae050c57938500b8aa98bddc1afefb298444d17c37cdc5b9db2e9d01df5e9f6a47679e0659b21a2844d268f8b324a24bbf22d9492";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "2.3";
+};
+vtable = {
+  revision = 51126;
+  stripPrefix = 0;
+  sha512.run = "ed8dee287daa32719b6650f43b963fa66cc55572526162978fc5245d3c253f027548ef5f1cbb38423c30e6cbe93b3418c373615ab92532be40d947c979f14b47";
+  sha512.doc = "12626485ed74fdaee2aff65e97f59d14fad8f856bc2a84dda96010985b039d48850a07ef08525d74b155a699d44b1e173923e0f67716f47e392fa7558760076a";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0";
+};
+vwcol = {
+  revision = 36254;
+  stripPrefix = 0;
+  sha512.run = "3963b738e1214f7a495daff6476102e6b25e86034c552b5f4e4314af55e4af073ed94a72e969dfd1fba16baa0264577234917f7dfd074dc85f9c56c5f2409903";
+  sha512.doc = "a4d55b62caf4968d3e8329fd06f8857f646c5a867fbab23ea9bd7fb57c5b88b5f3a918642bc608eb1ccd936dc2e36edc50a5662667b8bb35cc59ba1739b2e7bd";
+  sha512.source = "8a605a7250f939789fd863abf6fa2b5da37b8f723460ef2e56ed93dc826363ec1bad03f5bd2af266ede11ccda04546e6174c0dd79282ba41ad6c3d9923ccd51c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+wadalab = {
+  revision = 42428;
+  stripPrefix = 0;
+  sha512.run = "2d603ccfa92e8ef9abe91f5afaf490c7c8476061679f7a54c22879bb90b4d874f9e0e533e25aafb94fee2ff512f689ec96d25ed7ed42d0ae90c5e05985daadeb";
+  sha512.doc = "f9c35379b396dfb563c66a05d200c405f03de96e22ec94de3a9f0c99ada057db21d31b43d59391bc0175479b5f150435f8e704fa40f6b58f2c116bbda3ec4603";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+wallcalendar = {
+  revision = 45568;
+  stripPrefix = 0;
+  sha512.run = "43a682e78a3a80784180dfd84627e5584af9199bef965bb5551b203df7f939512d4307c450ed1ee55caab611154c1511fc339831da2907527c06ab738350e05a";
+  sha512.doc = "e4816b91f08a26e99b03892b3d70f4d81110e476461dec505225335d46955f9f3790d883faf19afa4d7a31ff05afac4fea870e37299f45827c5a8155d4bbaf4c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3.1";
+};
+wallpaper = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "45647b8f8ebab9706437be2ce63f3506638fcc794839ff366210db4c35a3e16b2a39127fcacd0d97df356180770b6808e80e63ea1a50e69fc591cc0992e1787b";
+  sha512.doc = "46b890e0ea7bbfb3c3421f79338f5140a105bb90cbe712477e2dc956f834682f6d137e39492437d8f206fefaf07086cab7f3cdd6c27dc7136df54c5ba850b4a3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.10";
+};
+wargame = {
+  revision = 66713;
+  stripPrefix = 0;
+  sha512.run = "fa9965a291573796cefa9c64d7c76894b29460287224699f6dfe708f218b293ab5c5daad19b70e949d1efff0db4f76cfe90606ae93fa508015114607338d8f66";
+  sha512.doc = "260474bd6f44ad52b56fb7ed2ef4e0de95ef455f12cc09e8fa6c70cacd7d0853d34fa5ac8fed34912241c9aaa38f079119683b1b5fd90e82d635238d20a940ab";
+  sha512.source = "17bb297856b2c483ff5d44851a2c59f445f35137f1d535330eaad161a0470df64e17634d945fb344f61f4aeadbe3068957d41dcf561c2997017f422f47cfa5d4";
+  hasRunfiles = true;
+  license = [ "cc-by-sa-40" ];
+  version = "0.5";
+};
+warning = {
+  revision = 66616;
+  stripPrefix = 0;
+  sha512.run = "443a02ce9aa004379aac94091c4f3014042cf2826d12bcffaa92f24ebd3a023ef314d05aec00947db74175e03e432fb80b7060b51c4fc310d14c15ac86606abe";
+  sha512.doc = "561c4aa05df7143f68067d22b337f1754482c40eb851356f70887dab86b3944116f2e7d9f3a83e4439c7b0f6d6db0ca61371ee049758173c35b70468bd0166af";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.10";
+};
+warpcol = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "66fd9e243339e0841576e1a1a3de05f2e69a24a7e1dd31eb38d848d06c9183f691229d8e89878b661c7f6524bd9ebd1380fcd4c9b175feb8490cd4476ac81303";
+  sha512.doc = "e88082379e90edf1517579009881204bcb70df888593d7535e2b1e5b673cf116a456967b0ca5ce372efef9dc0818b9d0dc252be79819f6b346ad8619d70551f3";
+  sha512.source = "843965fdddfffe6bec9567e140b9c6db66f60d1eb90ff5830b08b17499f21782ae1842989d479e50c293a8e1d7e2a9ab886622b8375384e1238871d6872e9e52";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0c";
+};
+was = {
+  revision = 64691;
+  stripPrefix = 0;
+  sha512.run = "1e434b13cf6cbaabb173b34334e046055366a9ec844207460a852a0066963fbdde6288e94979e873811b4e66140f07b6cf2e8526ec47a050efbfaf4836edfcb1";
+  sha512.doc = "fcf5434911390ee8f20f0feced15a627e001471b1867d57a7697edbfee557179250f0a01e9e20e0d442dcb0c4509174c504959e7a991e928e392d27515ff2d0b";
+  sha512.source = "9053fd6524c572ea80670ed9af80780579e6961e326620120f87f809d76f3c23310fb572f39536eee1ee8c20269ecfc1ad5bd5ca195ed986d87c46bc53058a31";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+wasy = {
+  revision = 53533;
+  stripPrefix = 0;
+  sha512.run = "4c747ea3cfab820b803f624a32178a1d09cbb5a3c441ee423abc74caeef9217095491c0c490f11d3a6d6adf052b97492e081b2abedce6cc9c61410a8e878f5b8";
+  sha512.doc = "4ee0dba83e3d1e00a1c58bc1c27d1b8e7e1677bfadf1d2653be216618d65fd168eab7aae26a5fe5ffae42c546b3438e2ad15f1a7bbfd58cd7b75cafa78a46205";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "2.5";
+};
+wasy-type1 = {
+  revision = 53534;
+  stripPrefix = 0;
+  deps = [
+    "wasy"
+  ];
+  sha512.run = "d7131c025bd97bdaf62697feb698da97d175783e4b0502d3e85b60a663f46a0520268a6063956afaddc6308ddd21954992bf8d216049cb324133e3760ac20825";
+  sha512.doc = "d9c88d39deabe19393df0b6d83bddd644e347592735cd7511dc70374ea015cd7fdf36ac9f320b44c612c8276eee3d7cd94f9e0b26de050c0771c85ec7dbae53c";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "001.002";
+};
+wasysym = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "408f9c2b70d7860f7d8f7ee7f93af1351442b92aad9c8d8e4a501414058d8347e6da2408df3d5b6fe217597861eda5eda499771a7e973da03597f24b76250da0";
+  sha512.doc = "ffa36c6f1446c0dcdf1e1dd8b47946eb84d666714d94eac28c857170c9aa414b612486fcf107ae462c50ecafd6ff20c90c776abb5774db64a32aa07be8c58b2f";
+  sha512.source = "12dbdd1e868c3382e7ccb5a507b7f72c20e3df3105e272c00b8b6294f10c1099d3c6c7b1a2db5bc96b866e246807604b615d8278357d0214539a8f959de14667";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.4";
+};
+web = {
+  revision = 66186;
+  deps = [
+    "kpathsea"
+  ];
+  sha512.run = "cc8b2b6525ef1ee49162dc157e8d735225f5fc3bee54e56ac01ad47f85f639e4c43b4409e949d68804e650e243da0a8a6d098ca7c37587f14c810112cc82abee";
+  sha512.doc = "ed04fce861ae2adda602a2a50d560cc9a5863ab1668dd9512baa96b6c37acd8334e4800bc4ca853c0b1f58bd3a643abc82a96f31de9d4980806ad0572ea2a92a";
+  hasManpages = true;
+  license = [ "knuth" ];
+  version = "4.5";
+};
+web.binfiles = [
+  "tangle"
+  "weave"
+];
+webguide = {
+  revision = 25813;
+  stripPrefix = 0;
+  sha512.run = "0c99e86fcba92d067ddd658893b58463390764b215515068e025563b66f445b23ae11482345bf305106afc1284ffaf32b23a28c8e0f81319002dd6332c8a3848";
+  sha512.doc = "933ceaf7bb2400fff1bfc5ec26f60d750e0995680579fe487536ddcf8eca670e2b6d3fb6150b4ad659c6fa594b9db540523a878c74e9aba9be7710b5380e55af";
+  license = [ "free" ];
+};
+webquiz = {
+  revision = 58808;
+  sha512.run = "04ce66027089c2be815380a10540e6c12040d33a33b1de9c6a98985e82a65e87f58a19b6cbf2b0ad7bc8e0a1e500bd21a80e2adbe3ff395ec4be1ecdd5b5adf0";
+  sha512.doc = "58faed1d21c5f0abe004d5aff0ef6f754012722dace25948e236c940f3e9f3a49d4f661d6692afa0bbd0a654424017e84611c32cdd99a0ef60e510c4b2fa01e9";
+  hasManpages = true;
+  hasRunfiles = true;
+  scriptExts = [
+    "py"
+  ];
+  license = [ "gpl3Plus" ];
+  version = "5.2";
+};
+webquiz.binfiles = [
+  "webquiz"
+];
+wheelchart = {
+  revision = 69040;
+  stripPrefix = 0;
+  sha512.run = "17660fd6ff9cf02bf01b95b505128aac52005b4ff59fcc1b28c64e9870aaed03f8652555cc2c323453441c83e696a0c5bc281281a1baee8c6ede1e9a11dc376d";
+  sha512.doc = "6ad02cbf669800f8a9d81cfd3ed3abcfc5b8a2df6040d3eb6ab0dc1ffb01875230be13959adb1ea7dde805d4ffb6bd9767de1b275479636f245e1140be07b16e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+widetable = {
+  revision = 53409;
+  stripPrefix = 0;
+  sha512.run = "bd6c85eb76b1fdd4b7e81ad24ad7d282b79e4234ec029e48ed63611260b00e8b1c584ac800c45643e466ff6aefbf953246b24c1bc6453098a76b71ba01624821";
+  sha512.doc = "5f254468e606aa188030c95c79672a6fb0211c0b5c4df6c3fde98c43ce1fd89993d495eb750b58395175e2b6bbe3e9771895627a04bdb8839fd4d0a143c1ab69";
+  sha512.source = "31ae40849337a8c6a7872621e55ae2a53b1a7d4d1a7907e18f5aec07f94196636b99c26d46dd8c10e1494a35b86d435a014a229160edbbfccd064306fdf06598";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+widows-and-orphans = {
+  revision = 66753;
+  stripPrefix = 0;
+  sha512.run = "0861e1449011f6032d847c5bbf8d06fe7b8f6d320dcb0f2281ca558dcb8ef1eec561ecaf622f957e6a0c673223b3aef8cbac4663930931d945f18137d19f4e45";
+  sha512.doc = "6105b7306ddfcd91080bdb682702dec2a4d1b094e1b8c9bd0a28bfd185bbc9a0bc4252180101b2674e702d645fba31420d12cddad2ff3db6703f6e83042b8a4c";
+  sha512.source = "4eb52ec1f9f78daf90f62b7f88ed96506069fbcb22c9bd33aa853142ea2282dfc4b5ff87d6280ad82ee3d9342d4c5737e91cd7a83416dd1de6b26f2e89062b2b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0f";
+};
+williams = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "44ef966e5d8535aa7bb32109b20f47c774995e6368a92e20a68d25c1694ad86b7007bc90877d276c2f15b8aa3c3d11f7fe6aa117c35265b5988205df869af11b";
+  sha512.doc = "c559e587868698c1a635db13b6db265234b3b475937fa1759f9e7e3a8d0644a43543005e9607b5a965bbdc304863d6c7cae6e5cb8345b546dc34afd8c7e2de43";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+willowtreebook = {
+  revision = 60638;
+  stripPrefix = 0;
+  sha512.run = "835b19d0927b01e4acf9da483148d3fa45b1c12eecebe39802ee4bab7426843710dd67306b2a8946c9c2b51d4c1864eb054f440c3ea021ae124bbeb6e4908b33";
+  sha512.doc = "9e5fddf4765325a550e6dbea529d110bbbfbcdf89e1dafcfe62099a4e8fa6ce2bf3384ef9e1b2453f1155b6e6d3f48d1d1675100c8295362653aaabec35aaf86";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+windycity = {
+  revision = 67011;
+  stripPrefix = 0;
+  sha512.run = "f83fe1f694d3fd448484961bb23c7c220ccb5b0f8982198660b5770140c8e9120fcd1f095492555f00533039039d11b3d2695189f40b716b17b2c2acf2e7c553";
+  sha512.doc = "eff7b0bd0603d563d077842e77fff4b9a104d008724d3e81f58cb26ebb77f8e61811f5a74d9cf2d5d62f3351ca692d5028cea9629ac1a9e8dc6263637c1cb616";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+withargs = {
+  revision = 52641;
+  stripPrefix = 0;
+  sha512.run = "73cc4db53528595f54f31f0d2824f08af54310aaed51b6eb51a5386de3f06dbe6ffeea8c4ab6f1e4ee1d169b5b0082f113ed435eae90b99a9b59df3296a3f4b9";
+  sha512.doc = "050ecd695b269896d1252649978af7cfbafa80e289038ef1054d82296cd83934b0f7ceee274340d54d836021f0da39f05a648dba8bff141eae8f378527bcf865";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.1";
+};
+witharrows = {
+  revision = 68047;
+  stripPrefix = 0;
+  sha512.run = "1ac6ec240be73608724793040cd9f716b61a7a197e30b1334ba81c3791d7714c0af36c509e9928d0dc4a11bf8cab5c0be373a7ded90f0c661e9547b553b57f62";
+  sha512.doc = "6b8993d636328e90dfc6ff622fe8536bc795a1cfd32372b6268dec38910435d19a8b85569e5fd7568387059ca9def471cfe6e92fc9ebdbf5ddcc65c789c5edfa";
+  sha512.source = "e1e031bc4a1b6bce4eeeaa14f0d0201a5578c3d0492a55d29aa40141bf4519a942c839f569b8d3b72a013da17f95fbd0e6edcdff3d5f971771f0534a36cb645a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.8b";
+};
+wnri = {
+  revision = 22459;
+  stripPrefix = 0;
+  sha512.run = "6ad06e6a867b323c382b85fa1effe16280566b1b61dd37be0bd7e9384d145fff2b1b4ff8117aa49749db1f15495e835e3367b0b7191cf9444e36fed662ffd0ed";
+  sha512.doc = "c3d6ff664edd89fa711e9573b138b29b113b588ddef9ad4a258e1f28c4ca2aad1f05741a402c1c1972bbc317e0cb989ce7a51e52d59b42629343d9a5780b64d0";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+wnri-latex = {
+  revision = 22338;
+  stripPrefix = 0;
+  sha512.run = "1dcecf9ac38a9099625ed6be3955af8b063ee5b5b8d0d3e3ab8c94a8215b72b86a0b5dbe930eb69680917bd3d6652b3f4f08bb377197ab6f3d2fccf2b96aa59e";
+  sha512.doc = "924266d547910d25ed5355ec2ef697d271dd992aeb6767d5bcb703d4d07cd34b6844e9a821ed93f5a04237aba1c185fb68926967e78043f390785b619c2389d2";
+  sha512.source = "e3c5cfaae7b14a28489344392d66a1e2570c900ffd571c54b4f2d13b16d6dabb5cf58cad9259f8b662a218567982d1ac51ef8b2a757902c36540200fd984a497";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+  version = "1.0b";
+};
+wordcloud = {
+  revision = 68209;
+  stripPrefix = 0;
+  sha512.run = "7e4f6adb72d2a7b3cf740f338e63669304ac33d90f7fa09327cb3e6ee882105c92786656d5af742de0d28717cf45f4fe0900ef0c48faf1ddbe57af322959c8d7";
+  sha512.doc = "fbf28ca6311850020c73dbb1a6a60bf5f31387a2def4b01f348674e678a3626cfdb23e2826a30db8ce021a5fadfcc26027584278110781a99ee26337c4b1f642";
+  hasRunfiles = true;
+  license = [ "lppl13c" "fdl13Only" ];
+  version = "0.2";
+};
+wordcount = {
+  revision = 46165;
+  sha512.run = "3c26b3bcb4c3edce8cf9d6628cf6b89103aa1ae454b07c1e963ca90693c18fb851772a52082a23efbefb51235005e558fd553afc891a472eb39cd430c97f861a";
+  sha512.doc = "a86b034ebff42c89f07015b01f86756a83ff2c69ed911ecde185ff719b09e3db47f284fe778c9dfd16442d1513edc9ddbb4944cc242328c17bd3fc18a0aa098f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.7";
+};
+wordcount.binfiles = [
+  "wordcount"
+];
+wordle = {
+  revision = 68170;
+  stripPrefix = 0;
+  sha512.run = "fe32704e323185cdc9fcbd3e87bf02c4c0870af501de731ea1b05056cc7e57861042b111a3307597969351960bb99086f99f8577b70e8e6b31cfbc9cf8825157";
+  sha512.doc = "38f168ddfdab5e786a4ad5b42f726e7895178e949c04f75ffd2f14fb42d77bf6e8afe22df5b87fecf8490be61aa3edde0dafaa91191f459e4378878aa575e8c8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.1";
+};
+wordlike = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "d600073b2373119973ca47564938db5824181d6b74409ef7f4a2b19d53b83b97ccf8edf5d77dd831c0d52a4379f5928ad7a0391d90a2f19fe4d3ef681133078b";
+  sha512.doc = "10bbfa76beb0718dff8d4175712567e34e77aaefbce9fbc350d5bca43d8d5e87fe1cdcce5c558946c2b04beede8628b7535abc451f7d904ac283929ae39c6460";
+  sha512.source = "23e7f66f064e7e8bbf94d58118c0c8891a316fc2e2fdf37156b078242fb33343a38d19f03dd605035ce874de1d05d9e405c612e32c407e061f54386cfef791ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2b";
+};
+worksheet = {
+  revision = 48423;
+  stripPrefix = 0;
+  sha512.run = "439c430189e74e8c476a068fe449034fa1c8f4e8770ee454b92b8645ee865b103a02b0eecb45a925a8021fa7c64d98240e5f1f980913515df49d8415bbeb2c2d";
+  sha512.doc = "56d502e993eb77f7dd4b2a659a8646823cf033a3e246e90b0c6e4e9d2a7cb31922dee26c942404b13d18e7abaa79714b4394b589376d67e8fc1556a098ec7960";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+worldflags = {
+  revision = 68827;
+  stripPrefix = 0;
+  sha512.run = "662c7b2cafb1764a42a94707f350ffe0e4060120071d715c3c1cebd21b2c64f2ca0896ac3c9c1e629b2fe4b057bf0b890805747a668b6a8c04d501a4ac1ca1fd";
+  sha512.doc = "16948753f069aa0e9f0e19efe9072c35eddf4bd20e32e6a47321a93bd3117f2206d44d3a76bee1581f7d4dd7e392d2bf1a4fd0ebb83d0d7b6cf207e69a42c7ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+wrapfig = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "afa6eed496f63dda436a9a57c9f056ae88fb7985328d58d81fddde743a737b1ec69a5409941a76a28840d938397928925500628b2e11859713871977545278e2";
+  sha512.doc = "27aa1cfb0641876516eefd483f5f37e25e06c24bc255fe81afadd985d9a5ea73d311184ad46120d57d8dfc584da02f99c90128c6e0cead71064d00c1bae09f7b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.6";
+};
+wrapfig2 = {
+  revision = 68164;
+  stripPrefix = 0;
+  sha512.run = "b2fa531e9a8deca8741af501073e7c05739ccd889433fa8355bcb4dca34a3efb9b6690306d884a040ba1dd076ce5c99e3db5e7fd76f30e951eea0ea3ad00629e";
+  sha512.doc = "cb3e0264c487b53f093f90ded250705bddb70a68557bd7cc03d66baf8731481b8e94055dec140bf7a510a62293eb4774ad4c95f472dd3248289f246a87804d11";
+  sha512.source = "05066fda5a68577758be7ffe4743a10600093983e469d05ab85e8ce1ed8fbc5554bc01f35d361aaba374645e0b143cb92aa33f527b7539a10b34a09b2659d2ac";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.2.1";
+};
+wrapstuff = {
+  revision = 64058;
+  stripPrefix = 0;
+  sha512.run = "ec0cfc45b68b5db1b0b8cde55a0b98e2834e8d69727d9a243a4ff814e7f98dc794803c1ee0487263ab06323f8d4cf68a0c7de6639b8f91dca953a8dfdcda3f06";
+  sha512.doc = "688ce97d588807fcc36b872198f01a74678f562e8daa2ee4a4bc12a1ee9b3d914ed670d7668af259ee92722e314c28a65555a61b2fde3d22f5b69b4bf05332c1";
+  sha512.source = "b7e1b8ea480949adcaffbf9d175b75f9eae3f23c79648080379fe178fbb2976d11446a7384c613e5ebe647936a5aa88c31cd82b2a9425a59b6c41d7ad819d63b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+writeongrid = {
+  revision = 68863;
+  stripPrefix = 0;
+  sha512.run = "5e97c246141838a342192743411ce0d3cdad4924433540cf5d1faff7f2650388eaed5f045c60ea5bc69ed4108aa23863f38d812ae4702af1d04000d96d112dd1";
+  sha512.doc = "2f4c29ce5949d3f10b8a8971cd62c34a473038f211bd1cb947baf675d9320fa7d4b61931a83675acf6f00534656d827fcda4a5fcfa51b69052c8f82a7625d62d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.5";
+};
+wsemclassic = {
+  revision = 31532;
+  stripPrefix = 0;
+  sha512.run = "064c1ec12a33dbb6c5a2c08c98c21d5684d8be6edb807987e69a47002d52bda4634a8e0d8016d01aaec6b0bcb9851de61d2a1723f70ea7da2dd4000d2340033d";
+  sha512.doc = "d86741a35d1873a17839e880b2e1c0915cf7b64bd52e5836f9967159479611482c2b2c67388066b9f171574109a5fa0a5b9555ccf4e629d4b26434a31cd754da";
+  sha512.source = "cbf8ef51ab7782a2b52d238ee2f517a541ef1a0196ff72f08cd722c3335a80a2520fbd359cf865302229cf146b16931d4b163571e908360adc8139c2ade5f2b3";
+  hasRunfiles = true;
+  license = [ "bsd3" ];
+  version = "1.0.1";
+};
+wsuipa = {
+  revision = 25469;
+  stripPrefix = 0;
+  sha512.run = "7488fab88bb273463ffa45819fb486aa3c95d7202d8ffe2a8aa8f2a1b00555e70bbc5a008a72cb60ddc1759dbca60bed05d2a21b4308e75490e965e71a84ee7f";
+  sha512.doc = "b24aa32e2e7b466d7afc827aed570deb70b41163cbe6ce975d8df77e9dcc92b453e5f0d5f0edd5a2f05c006939003849b7b44c2e3f8a86ffd61a51ff307466e5";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+wtref = {
+  revision = 69214;
+  stripPrefix = 0;
+  sha512.run = "abdaf96d5c4cc919fcaa5343d25243266f86dc079cf701d71f047b01874baabf20a0c7972a6aa863c7f9eb9a003eb5a516714d57fd453574e7a2c8ee2e500e7e";
+  sha512.doc = "f248f448bcd110c59d5dc19c67d4192a20d4f334c6f17562d34db0dd4ecbd7c6414ece9ed4e55aaf2ea42a0e5373fc5f25e8eaaae16b468687bf5c2d2e88b908";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.0.0";
+};
+xargs = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "43b9cc5246123ef3c424614415e04db9e7a578eef348c3d580626918a4c31ac99714cf501dd54d305ed6ab9ad7e0533bf5b39250c43ad682032dd676a12173d2";
+  sha512.doc = "387a051eb8581b51d2042bcfae2ff9af99659d664c328c6b30b3789c75fb73687c32e2037df7a345335966671a3e3267ff4b9e0eead0e5b759bd305850ef22b6";
+  sha512.source = "e4717f476260648eb66fefeeb125606c16d302bbad32c55730a0102da355d0c828b106b25391f69bb34627f56cd7659dc185bbcd36ba7f5a8f0b77a0786a7957";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+xassoccnt = {
+  revision = 61112;
+  stripPrefix = 0;
+  sha512.run = "4b3934d7a4a219fca3f276b26b893706ed8a65682425ac40d6722734f3e133099837ea8aebf214bad32c0d6b415121f73ea605dd851f0f2542dfb0bc38744313";
+  sha512.doc = "020a2fb86c86372302e68636d727203625ddfbf63cf8eb5b3055502fcd073c54b52a44f8c7bfcb2c3c73a206082e5d285f05cf762b9857d2e16c43fe36f8fb96";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+xbmks = {
+  revision = 53448;
+  stripPrefix = 0;
+  sha512.run = "e17701f9cd79d49467e4dd47ef9a504a8b0fb44b216fbfab0f5547e9215c4dc40f1fa46aabc209ff2221a4a9424221adacc52f6040d3f796d51f2d37dcd4e8c5";
+  sha512.doc = "76d255a036a19d80c826eff4b18643523787c53f9b79e44710e03f9bb8a7648136559727dee246508c1cc6ff332cbc92b8d1c728b4583ae26502ce44538a61db";
+  sha512.source = "4c3a9ade3d3c204db2c2d0e11a55bef0a18cf1e3e4dfa292c3da356ef5ef5aab9ed6021d07f6222f1ec722298c46ee4e4eff02658e76b99bb426e6e289fbc136";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+};
+xcharter = {
+  revision = 67742;
+  stripPrefix = 0;
+  sha512.run = "9e71217c7df0e41de44aa8cfe09b36955910ccca4337d878b0f18f4352f52d14b9dc1cafae01e9b06ed1a094282bb73b25e5328ccbf60e6070b57262e106018f";
+  sha512.doc = "04b1aa9efceb7b87551ffb6743605861ebe695118376940fa84e8c3a8b0ff7c073d86850713f8df98381c674fff210bd2f4dddfd82de4f152945207ec4c44354";
+  hasRunfiles = true;
+  license = [ "free" "lppl13c" ];
+  version = "1.25";
+};
+xcharter-math = {
+  revision = 68992;
+  stripPrefix = 0;
+  sha512.run = "82830e9740200cddb622b30b4c91112462a2c429e501f354f54abaffcf8f64186cbff3bce25b889508c6c28732ca2c0a2ded06a876260903163d02d1260354fa";
+  sha512.doc = "c1bd25aa3d1aa195ad97f1228dffc73889d06ac45391ed725696372c7184672f6a14b1f1dc2f4410866a6cc0119219817f50bd78c602846f067f935f18c538ab";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.60";
+};
+xcite = {
+  revision = 53486;
+  stripPrefix = 0;
+  sha512.run = "0412a4f47a044efbd22adbbea9cda1bec44379dbc799ca83821d4650e8e40f6b5de51b80ea6a80d747639a9b840b7cff6612b6e4df0b2c09c0f3ed506d3de714";
+  sha512.doc = "11af105ca5f1610e5cfa226cb191d1f69d257e21439c2408283572e136b183518f58631ec1b0b145a1edf50ca58e9a1eda789e5646c47b46f75a6325c90262f5";
+  sha512.source = "0f6d0e7206b59acd468dbd77ef3358d2865f48e2d59ccae2ec185759c137b9db99bf417acf71ec40cbafbf2569cd9b4a74a97b7a3959f51f1703af9a026486e4";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "16383.99998";
+};
+xcjk2uni = {
+  revision = 54958;
+  stripPrefix = 0;
+  sha512.run = "db0be3360dc3d6373866c9d27900f8dba9353bcf92d219f9f0b82532e2855210230a06b87d1ab6eef7e1f96c54e46884e6827395affb9375120b7cf8d2fbb99b";
+  sha512.doc = "6a9958bc6ddf6d167b9d77a513d04f0077c9a8581109c51166410d60d5a243758da62b40bdf5cb1488a50b9ba76ca89261a2d31c3819d8b2738b4a7023ac3f90";
+  sha512.source = "8868210c53fb379e12b22472dd3575baa62743cc059b3215b634aa59e61af5b3bed8415b9b811a7949457dbee4a051e4926ecca02c293be775ccfb3467e0883a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+xcntperchap = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "7be16f92de86fe67fd34857f7151f197e5ae52e9ab944e0ef3603882585dfb240b8e01072747b18092c6ff060f2f4c341b27e106ffe8864dd1879c3965435e47";
+  sha512.doc = "c7d25df1dbac57e05b589662214e46ba446def465ae7f64d8a2d52283151ee04aaee93ac1bbe0f2c7b01c50e505ca6c1cfac96750d1b13211d309a906427c6f6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+xcolor = {
+  revision = 68864;
+  stripPrefix = 0;
+  sha512.run = "6b7d38d631f89f4c4ffa9f447a16cef6169c3e4798c5c65339fe48f9318291373a49ef9da8143c453fc5fd9ee853bad53b5477b248ad5f99763df9ea28638c78";
+  sha512.doc = "1dc8355913a62657a2b50d45a6fdfbabc8a0dbb835ec5912fced934350b21619e8081b9e9a4774ba48ec3c51572c7f95f52efe92c85344dd81da0bcc81e73809";
+  sha512.source = "98fdb68955160820347af83f7f44ac97c3a61b9732af2a17980155c103b6d6ed9037504ba99aeeda5608fea84f82ac871dbb55d9de334943a74aa617caaa70fc";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.01";
+};
+xcolor-material = {
+  revision = 42289;
+  stripPrefix = 0;
+  sha512.run = "7f1484435458dafa2a04eeb4b5b1b89ffee9ec8c91f1d724449457b719f92db009efd6b6a580a2b0ccb8ebc66c0d1889f3ffa05104c0fba5cc9c7ee90985d2d3";
+  sha512.doc = "388f9b604291436ded0510437be93c1fdf120a91fc3ddbabb870840f2caa9e81313035ff6c9d0c00de259fa024f83399a4004e7ba512a5c3bc7920a08ff58819";
+  sha512.source = "118b21c883848b5bd6d558b5c22146fad54df5e107d0525e48df42c0bbe90b210c7ea3340fcf30b5782d251ee1caefa2aedb8a130cd01a84f4e9022a40ca6a8f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+xcolor-solarized = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "fe743e9aa394c6a8a75f8c9e87cb7349d87df114a8c5753a157d4dd129a677af6a0381969f7719712a9abbb9fc720e0d19f8e7ffcc2bd7ba09ee8cb3df3c8d95";
+  sha512.doc = "bdc4d9a9a0e1ace78a90e9c64fba0894599179592c948494588e43efb21e3b329d6f0a0c403b21073943251796b4cf37f8d0665a8e8bf438b09616fed19c03ff";
+  sha512.source = "851e8ac38bb8a5f6e3410daaa307ba54a5762f08e10b656234feb020354b79caeffaff1de58618e6e9f52cfa50d40013fdeb1e32f6605593dc224cf3650e54f1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+xcomment = {
+  revision = 20031;
+  stripPrefix = 0;
+  sha512.run = "ad19a29caaaa4da90c740a18f3b3bf63666303f8047210197e17c270082d483e33085c9249d7143ba65f343f6bf3b52c6974021f954831c5196708824e21b843";
+  sha512.doc = "d3b4d70cd88923e25595acf726afa6eea2efff4550455ed2eff48411621f212059ffedc3a82e4ac15359420a00c69b55e3625d11f8e8d4111eeb87cc3a6e8cfe";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.3";
+};
+xcookybooky = {
+  revision = 36435;
+  stripPrefix = 0;
+  sha512.run = "3f74d540c4da5ab4f6f1b6c78f3a35172fb4f2d94b7c720fe3fd1d31e1c53db6659371da6d48adf755675af831d252178b96ba57a1f0c0319459f4a564897b49";
+  sha512.doc = "29d1620c7ea3d13e4fdf97454bf824fab8de6acd96661554a1f37717e4fa0dcf6df20cec580b6b25101b75d2d22080962713d05347eba4974c5cbdbca6129ec6";
+  sha512.source = "0a0d8eb171bc551831f65511f74b9db402587b6bdb47dfcd3d9e31403eaf530e954c5ce0510f9fa4e850b3036bc6807339aefca9567b9fff7152c72c8332d640";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+xcpdftips = {
+  revision = 50449;
+  stripPrefix = 0;
+  sha512.run = "ccf564a59d658a4f6747a3df866d0b0a0d6dae489215b5784fbc0619a2f3f222ef348c5fb96faf192d9db7e5c63d44c5f94549cb809e89dabd06bb43d745df1d";
+  sha512.doc = "5d483b7bce276815fbb3602d4082ff9c939ae414cb2e2b03f75307c71b2b19a6adba23f609836c78859df5823f4aaad175e01b9f223326176b62a4ac9060cf02";
+  sha512.source = "d386d33f5437cd31bb8dae0ea51a22fc90353f7866544694e3c41bd2f9cb70fd734a92bd50864a0b20443bfe40f6f54cc404e503da395e928ae69fead87db771";
+  hasRunfiles = true;
+  license = [ "gpl3Plus" ];
+  version = "1.1";
+};
+xdoc = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8cee132082c70214560ca8377766f45e6f15da2af18e0e9d68205d094b2a6af4d50150bfa6d145f78d92bb95c8657ad9fab1cbb8e76b75859f44ac1039464cca";
+  sha512.doc = "cb7fc71f84f88a1035e91500e9b7ccf0c425733227e4106c7bd87eb30b25c8fdae6bce046f22e5a07ec919ee0527f264dcd826b7e6468eaf21a791e7dc0e7ab8";
+  sha512.source = "d82f9fe7cf0a2faaf0cc6a5f1f1d5916bc3eecef63e6e983f62c4b17d36b17f31251af6e704811af2094cc43fada5597b0ceb432a4b38c4b066ab041d7a5c578";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "prot2.5";
+};
+xduthesis = {
+  revision = 63116;
+  stripPrefix = 0;
+  sha512.run = "af32af87d621a3ad64ff6565a02190288e0f97526973a1a3a185c077aef8926f56e9754fb866812f0cc7f515b54fbf7583fec10c17d6f9299d1e186c9a8542e0";
+  sha512.doc = "45c12bd4d3127c5d49ef5bfe434b7f8df5487c37fdbbe6ff687ad07796e95aadf4f027cbf16ad4fc5a8fd3455467c47c32ad99d8bc0397d6f70caeaf199d3ecb";
+  sha512.source = "c5c2276a352d01ec6ff2724d069d68e29cfd3b78272b5c7a075189dece45c28292b814a9baa951c14ee166f66c9c26feb19c86d31fcca5a65416a1fd1190d61d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.00";
+};
+xduts = {
+  revision = 66661;
+  stripPrefix = 0;
+  sha512.run = "8c2b0b04ff619c18961014213db4a509af10d46cdd5177706021675eda7d408be01a3f9c9aeb18556b59535dd9cf8de7d9147c36c57350ee3fe8e02e61f416d5";
+  sha512.doc = "7e89d160b992eba61328618ea463014c52f861eb1b952f05aec2860878c226d0354470522468ef79c710486c0ced8bfe76eee296035a752178fafcd380f957a4";
+  sha512.source = "3227078ea75cbc6d23aae9086f51bf86b2d7fc42d237767ed90f915a6d2255f6e2f816c49d77caa1d85fe0f623d99d3e76dd458db699b458df5c28f3fc5fc092";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "6.1.4.2";
+};
+xdvi = {
+  revision = 62387;
+  sha512.run = "57024e05928f45e253e236d7e8c6b9cef07359c1cabc10b3f6ac13a9b98dc04530517d8d66b20cefaeced793fbc57a5373c226fb3d26186ba3bb7eaadb0f4ef2";
+  sha512.doc = "0fd1bc1ba7bb022f03334fa6c6bc6aed779179a7c486211c3016b0880efa2b13859eb7cea78e8bfc0069192f93313d37a4966fd7e233bccfb1d010d3e413cfd9";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+xdvi.binfiles = [
+  "xdvi"
+  "xdvi-xaw"
+];
+xebaposter = {
+  revision = 63513;
+  stripPrefix = 0;
+  sha512.run = "c12da79ef06b07aaaa361fcc474da416bfabe898095eef7bdb9ea80efddc8051735b3cb4c86eeb052bb906b3fc96d3e3ea10b23e0bf00bc0aefa80433d6e6ae0";
+  sha512.doc = "c1018a8009d360ea411fd816719844af3e13b429135e533c2c033898f763f010f281ac7cca9c41572eaf1d5f4a9c4a837e4f0651aa03c140c2285dd3f087a7ba";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.53";
+};
+xechangebar = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "833f0b1cea32c0bb345d1aad5360613ee36baf17a35e13d20a4bcc75edc77b3a7c48c4406ddadd670890cb93dc0d03cf91462994271f351ebf2bc221bfbae5a3";
+  sha512.doc = "6d2c385b3b826b8b97cb725ffd3e7479ec3ddd2d2bbd8c772fb0b1faa9d0edb758871003ec379d8ec349fc4e3f7de2bf3130cc0e5d9e356ad472232d16acb546";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+xecjk = {
+  revision = 64059;
+  stripPrefix = 0;
+  deps = [
+    "ctex"
+  ];
+  sha512.run = "3382b181053c76e58ba3f77b195765d83e5515a48b0c73580fc19305bd395de8d19b98be3494da8201b0a22a851a53c82dda14beb54a545b652cd0bd5719af67";
+  sha512.doc = "b2dd0caf3317d708cc001b5aba57979f86eaa20d9d38d360650b45fbb683603e2075658a0c0a9c0631c81ea06ecac27694c45df47f053d9e7440901d66280295";
+  sha512.source = "07fe51d62358a376d2f3cc2774cf606bd4e9f8b3bd3fb202427f34c3c15b004fed5985f7fe776b3529a83ea4aa3e3e176311e14bb0a02cf055eb501a3f474839";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.9.1";
+};
+xecolor = {
+  revision = 29660;
+  stripPrefix = 0;
+  sha512.run = "0ab23e651b36f06256fab5acb14effc93296948aecf7c7f11c81f4db89a58bfd8e038dd857a1da3a86ab573cf0ffb1d1bc188789e0d493ab0d0c1c9d96d593f3";
+  sha512.doc = "9441eff384f57e8714cc543ade380ecc321e6c0e7dd0ae69c71337458e2607a43f793b490bfa6752c1c70bdb17be92488b89ff848ab9a3a1700907c15ed857c2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+xecyr = {
+  revision = 54308;
+  stripPrefix = 0;
+  sha512.run = "0429aa515115ef69811069b08567c97ce40a8be68ebe72f26b8e94947abd86394204b21bbf25ae44c616a806878fe9900f5a639bb8707106836103ec06663454";
+  sha512.doc = "555ef35f9e50450a796c24b87295eeac319d087a61e4fc7cedafbc398cb9a5c0add8b93318b8afadd82bbd2ca90dac9ade02dfbf286ba825c1d697b58110fe5e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+xecyrmongolian = {
+  revision = 53160;
+  stripPrefix = 0;
+  sha512.run = "2faeeadc81ca7f6fba45b6b237fb604a6eb6e8888117f759f6d369ed354b20b35dd007eb11c017e4f0ebcfa99627f519b291eecd1b41505d7f4ecbfc23307784";
+  sha512.doc = "11b9d4a92c6df44dfc629c7385b56463dcb13564e819cf1bde005e228040a9f675cfb5818ca9f5c5d59a3db7a0d42a5584d9a3a530d772ba2b4bf3145534bc0c";
+  sha512.source = "57a31504636eb9ebe717b6eb9028d5ed0eacdc7b9d406ac3822539a9e40ed0718668a640d557677b1a48920b272f3374817d8182b9db04a8329d2ee20227d801";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+xeindex = {
+  revision = 35756;
+  stripPrefix = 0;
+  sha512.run = "bc3f399973bd8be5b83ea6da2c39d80de8f39ac6cf2d82d689c81816cad334310081f44fb4e256e442fc47ed6640c2b8ebd185e431f0d0ddec5f75f7b535283f";
+  sha512.doc = "c84682c8034c5e182bcbb2ac0411f4ba5d8065a5db1f008c6f9e7a01b94b3563c44c03fc4c1cf48b3b09d19ba93f22778d8840741737bf1a344cb0c8f66ceb49";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+xelatex-dev = {
+  revision = 62145;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "babel"
+    "cm"
+    "everyshi"
+    "firstaid"
+    "hyphen-base"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-base-dev"
+    "latex-firstaid-dev"
+    "latex-fonts"
+    "lm"
+    "tex-ini-files"
+    "unicode-data"
+    "xetex"
+  ];
+  formats = [
+    {
+      name = "xelatex-dev";
+      engine = "xetex";
+      patterns = [ "language.dat" ];
+      options = "-etex xelatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "latex-base-dev" "latex-firstaid-dev" "lm" ];
+    }
+  ];
+  sha512.run = "088c917758f727ba08b8571d302c93f0b14fc15ca6dcb0ef7a89df4ba144c508d8d42265cc6b1915707329b64aa1d1030ed0b5513987fbd4437d0a58a232b5db";
+};
+xelatex-dev.binfiles = [
+  "xelatex-dev"
+];
+xellipsis = {
+  revision = 47546;
+  stripPrefix = 0;
+  sha512.run = "3bff74473b4e7fdc7a349fd54e7703b77282381d9ff5eac233d5eb7cefe98f4abc5ea4fd309b8693bd7245471c565545e0ab437a5f8e5cc1b89368c914078d54";
+  sha512.doc = "20d238f8281b93643af570c3dd09a9cdf9822af0da6a9d06b3b9d09196ac4c7fcff2efa3271f763caf42e54f9c72d2087c491cacc5ea4666cef1060c12ecab3a";
+  sha512.source = "ae58f20d0aaec99bb7e56a0a5b277210d5b9efb8e2677e9e22caa08ebe9576befe19e4b7409625aee00b30cdbe1d90ae61623e86d3fcd255df96dbb7c89291c3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+xepersian = {
+  revision = 68117;
+  stripPrefix = 0;
+  sha512.run = "aba7b248b1ed6fc557e51c267d3da21a3f3473cb0b0d997ef7d899b3ec518a099a173a163c53aaa7ff29e13aa2f1dbebb65775af828c85fcb9e4e91476d6e1ca";
+  sha512.doc = "dc2f7a06a6122baf9f2284412edf4231eba88f6968f86eb06e47a3e3f3cac14f833ccdb8f69e95b17a05cdc9c3244c361e8d581b6ca65a715a82662ae722fd35";
+  sha512.source = "6cc50aa2d511d744499620b010066916913aedb63ed871f93ab8cdb45380da206dee76c4d8ceaf01be5df971e0437ffd8b469a3ae793810043515a966fdb40a7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "25.0";
+};
+xepersian-hm = {
+  revision = 56272;
+  stripPrefix = 0;
+  sha512.run = "50a3e4a12055aa051f72c8d9d5f616a6901aba7c8dc6777610b48d7e3c993c6a49996cdd77ef01161ca9b7dc588cd9d86b1e1c4e65eab4e4a6d3a3697a990d92";
+  sha512.doc = "79b0a6e9876f697b8c7e08d5f5051975d29e9b7b3245b49a74ae5c76bfb23926fb4810fadcc029ee529f5f2752a49c2ce748277da0fde50f5078becff090b1d2";
+  sha512.source = "b43f74f1cbb9e2bdd06ca614f17fce49a18018cc3df9f88ec3a4732bd0b4bbf7068ac77a65d549806be4c07a2b7ab16c165fa7d5a9c9401a4dfb60426c5fde23";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1a";
+};
+xesearch = {
+  revision = 51908;
+  stripPrefix = 0;
+  sha512.run = "4c204a8f92fe9af0ef1f0da99dfb12ac8f784800f7ef673a116a5f5167556fe49584b9457bebfd07aebace44951327f8a576cdbc8091a7aec776768384c62507";
+  sha512.doc = "981e6cc62a2f50815aeb875c46ab2ac83510ea535953629755700650831500410650b66ba070d8b5ddc494792e782fb75f266ffe0fb868318a4782b2f8d701f9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+xespotcolor = {
+  revision = 58212;
+  stripPrefix = 0;
+  sha512.run = "fcc3a800986069cf64c62b2794447650331dfc2fbefe26fc2d537ebfb520acecb6530bff7591a597fac9b108f23781f0faf7c27b97f35ff2358d62c09404a5da";
+  sha512.doc = "90ff1badeeb6e2d6cff9797b1af2052b4fa8474279c7b2e9916f7f02c767988d640b57f3d63be8de9f0082e50bb93c1c122b3c1f9bf74132c5c13b1b6b70122d";
+  sha512.source = "60aa75660ec567a3015bd8b4985e95aa3387cbda9b239c2d1d7e8bb29fde8d44fc414ebfb195aa3be037a3f4cbe510354e28d3ffc9d5777d054585597e2ab762";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+xetex = {
+  revision = 66203;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "babel"
+    "cm"
+    "dvipdfmx"
+    "etex"
+    "everyshi"
+    "firstaid"
+    "hyphen-base"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-fonts"
+    "lm"
+    "plain"
+    "tex-ini-files"
+    "unicode-data"
+    "xetexconfig"
+  ];
+  formats = [
+    {
+      name = "xelatex";
+      engine = "xetex";
+      patterns = [ "language.dat" ];
+      options = "-etex xelatex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "lm" ];
+    }
+    {
+      name = "xetex";
+      engine = "xetex";
+      patterns = [ "language.def" ];
+      options = "-etex xetex.ini";
+      fmttriggers = [ "cm" "hyphen-base" "tex-ini-files" "unicode-data" "etex" "plain" ];
+    }
+  ];
+  postactionScript = "tlpkg/tlpostcode/xetex.pl";
+  sha512.run = "fddc7a48405d5ae56b09fab5f180372972fc7fdd10eb19ec8e2b0f6e1e3bc54d2f92512a6954238c21fbdd75425923dcdf115bf16fe35ab3a850363c41ac99e0";
+  sha512.doc = "7fda9e0a2e7f4dcd6a1813cf8fe280f7193aa88a77cbc5891b892112950e5d5e7690328e267805c8b9a24dc735e7991065ee3664b1278fa334f83ddf06aee236";
+  hasManpages = true;
+  hasRunfiles = true;
+  hasTlpkg = true;
+  license = [ "x11" ];
+};
+xetex-devanagari = {
+  revision = 34296;
+  stripPrefix = 0;
+  sha512.run = "96eeb5289b4b0ce252eba1daf15fbccaf2cbb2d251a85818b6dd761048532f36355619e37f1f857caf4592cbf85d112d6d48d5944c455ef36da9913529a783fc";
+  sha512.doc = "0f360c3f43c6562520b8843269068fc46ecc405cd3a4d8faecddc4f606d69cedcab28950fc1d2e11699e297fe4d70c4c3d50765a2ec30541c237914accbc7129";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.5";
+};
+xetex-itrans = {
+  revision = 55475;
+  stripPrefix = 0;
+  sha512.run = "9c39898cbcfd024f1a274311a192c647e15624fc04a9484daa2d08ac37340a799b4209a5aa91a5e3a96f774d7363198c5a07f66d88578e1998ef3680b10dae6a";
+  sha512.doc = "f10eb9651823eace7f56e88e710bb5536a35204b8fee80219419659d0e2f5fcc60c6009834fd9aa215aa42e8291e14786688fe1974dcab943578bd22a40f4ee1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.2";
+};
+xetex-pstricks = {
+  revision = 17055;
+  stripPrefix = 0;
+  sha512.run = "59186971a188f4541361df8fc492b3767069b3081f7052c88df5395539807970c709537b074790411dffbc871010cf4d3fbbdb6684c43007477c44be6259b64b";
+  sha512.doc = "cf71359ea6e56061848b085da9755fd3d96d2a9d30484b5d5028c7a3dfb52dfbe275c46f17016179a56f90db3b6df4453cbf3a990a709e59503fbf1a576eaf8d";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+};
+xetex-tibetan = {
+  revision = 28847;
+  stripPrefix = 0;
+  sha512.run = "de7d2f875416336f25e8a14f8c743aef87017cc0aeb30b5c6aa9e1bdf044d71d3c9e9a28d52ccbe7fbd2099ca9e47938310dc3311e46399027aa822b76ff90c9";
+  sha512.doc = "0bba33024862284354416e55f2f718f3f3220e4a853c68bd6386c013702aa07a3142864168f6d136bb351044dd9ae8b59754cc2a0181a358fe1baad49106d504";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1";
+};
+xetex.binfiles = [
+  "teckit_compile"
+  "xelatex"
+  "xelatex-unsafe"
+  "xetex"
+  "xetex-unsafe"
+];
+xetexconfig = {
+  revision = 45845;
+  stripPrefix = 0;
+  sha512.run = "62b130d16ac01845df5acb1a10e487408208b0c4369d58892a83a42609b3dc92589195540154d1e07a9cb528e8e4ca65009dfef236efd53b9cfbce0a942c5b01";
+  hasRunfiles = true;
+};
+xetexfontinfo = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "8099f45c704ea74e5bbd90b1817c3ad06cffe3d6da0a997f8471e72cff364d346a3cc2e6f156b51bf7bc3ba149e5c755423418d58be89e1872f84db9c1eef039";
+  sha512.doc = "a5a9b085e5dac02d75b83c7063fe653724367ce203c20832e2ef6b11db10e31bcb90745a7b7d65427a33cb018d68afdd4acf9f92c907f91904188ad60f2e1460";
+  hasRunfiles = true;
+  license = [ "asl20" ];
+};
+xetexko = {
+  revision = 64894;
+  stripPrefix = 0;
+  sha512.run = "ec745c3a58f9ac782cc3ecf1be995b8227a92436bf6db7549a4e14a7d92bbee8d2f47a12117ebc64594d7923675860e6deafd9bdae98c3ba1845e673172abdf5";
+  sha512.doc = "9aee4d049e3073542c76be2c399afaaed5475616ceaa074c6a60705653ac48dc770f43e86e102b359b89c53e529f3e354298fa9a5f1e14c487800c0c306d7270";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "4.2";
+};
+xetexref = {
+  revision = 68072;
+  stripPrefix = 0;
+  sha512.run = "a26a066a25162d3f3484158b6a5d3e3f44727ab5b7e3d3d9a4457fd80e92522f09d61015a4a3b0fea4dc63987ef773c8850b6afe8a50fa5ac2ed58cca51a4ded";
+  sha512.doc = "d0f2de750f04ce63aeecdf00a5f0628978c78afaa753f8dd2b41a819c76bb0531bee8906d4eb2014075cf4d0202b6c1fb41a9093120614478045fcb0820a70a9";
+  license = [ "lppl13c" ];
+};
+xevlna = {
+  revision = 43864;
+  stripPrefix = 0;
+  sha512.run = "69c80d5243a4af96f2dd8092926d2766bad5d6beaeff94d6aa2f184a68a45fa50bb3abb91a4652d8c5e5617073aee9caddeeb73fd5399965f477be7075b7ca01";
+  sha512.doc = "d0d033b646314eb250b245575ea2361b6c12f13eefab071c2b9f91524b08bfceb9fec197c3fa5f61e3ed19caaf4198e69ce1305bf1eb2daf1db6e30365eeac48";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+xfakebold = {
+  revision = 68929;
+  stripPrefix = 0;
+  deps = [
+    "iftex"
+  ];
+  sha512.run = "96d7c43d4aa975f5e948038f07c765397dfa240b41daee453064e8c7abd90a1a52cb8af02715de51b6e56aaacc4f8e6f72e40c562371541ac94c00e2f5b6aa2b";
+  sha512.doc = "11b63158d7e780d390a1d4cb4d046108fa34212431d41dec582404047a8fa272e625898d4f1181fd8728bba789962b63b5462a9ea5556fb896b68ad2eab3c038";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.10";
+};
+xfor = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "6e3ebe83dc39a87aa86d5f173f56893ab1678253dc18dedf16c5d4a2df864e21b9b6e84c6bda56e2c624106efb2f73c110964948e4d553848bbebae87f05bff8";
+  sha512.doc = "e75b3d57c09e1580282f4002b684645aa21aeed4f90626b7e439f30dd79edec9c6f23492eef83b67e9ccb885c001caca6201d43b5182632a5b38ba5f67488b52";
+  sha512.source = "508dd3c696da5287cee35fbeca12aa60667908f1f456a9d1333197e76b707902d281e83146b81e0a095c168054ec96013074f5b0bc236e35cb17732f4158e2ae";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.05";
+};
+xgreek = {
+  revision = 69268;
+  stripPrefix = 0;
+  sha512.run = "bada8aee28edd971542cd5091b702fd494cd710d32112e16f0ee7778868efd0ce558a5ca6d7f4f291dc7edea7f89adef584f4714bea656e9a76674808d3fd765";
+  sha512.doc = "e30af632317678f8e082980120ec328ebdf094ae816f17708387bd23b580431161503e99177ca78a5f2545fbe59b26968d208e8e273ca76f7f7f45fa31200e56";
+  sha512.source = "100836bb5b1bc2191a5c1f446e1b30f9f166719988fd62e5a72102180987db10b043a45f737da04e86f52bd8524fe2ba236454545d6d90105749df572df5775e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.3.0";
+};
+xhfill = {
+  revision = 22575;
+  stripPrefix = 0;
+  sha512.run = "cc0ea9e9d40a590444801359c455716856c807eb429aa01b460fd7566797490932bd3566a5c6f95bd6723e0b05bde1aa632b83383c8bcdeba8a455cb84ea9f1b";
+  sha512.doc = "027287d941c4576d7f55a3d618e13cde5348ac072f3e546dac6f8a8814efb982f9cd0c4162866403f946d07ecba0ea8cc15543cafbdf9008d60b78d0ea3d26fd";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.01";
+};
+xifthen = {
+  revision = 38929;
+  stripPrefix = 0;
+  sha512.run = "21c5882ffbde05c50a6536fbf19f812a3ce6381f565227f61c8062281a2472a105bf6223cdc03adebf275fa23dbc1ebbb967349c715f20d1b516f100f820af3e";
+  sha512.doc = "52ffddbfb4d0d579849b7a89d30bebe9f1d511751c89012712a8ef73ae3f4eb8799ef9b3755dc957c47fd874f1ce76b3ed54591d59f7e4d9e1851c50aff3dd4b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4.0";
+};
+xii = {
+  revision = 45804;
+  stripPrefix = 0;
+  sha512.run = "a5355a456005e09eac4135735973a14a6add3a31639fcea441d8d6a7c06e7a7efbfc1470d485ab317fa193897abc2d9edeccadd19239944014b7fccecdda52a3";
+  sha512.doc = "c9b348da09c3a9c1522eb7713a17a58b3eabf4ff8ed52e8d14dc9eeff528ed93af505b5e3cb59c1af4c2ce999c6c1d98f66d026a6ab3d7a09778230286059d84";
+  license = [ "lppl13c" ];
+};
+xii-lat = {
+  revision = 45805;
+  stripPrefix = 0;
+  sha512.run = "e4538ac31b6508371ee156168d4da71644a65297b91be7f070291f35563a45a1ee5a528d25585bc23a4690e8fc5c6ad04bfc829de4e95f49468a5852fac9e822";
+  sha512.doc = "50322d89f494d07793d964fe515b8a0bacb74bd5706a6da80f6860771a8e3cad35c7d06bf398217a7e4364594d54f4dc490f39980194804a04460047ff5083f8";
+  license = [ "lppl13c" ];
+};
+xindex = {
+  revision = 67771;
+  sha512.run = "bf812f7ea5f981969b1963f470a0006c4afd937ab27f6b40f7897dc2b6ddd1a0ae60f347b8ed13483ec4fd9feccff257a79dd7b8a2720be1d49a40fe2b325fc6";
+  sha512.doc = "ec93cf3bb639326dc6905be018481da8438ebc5558e4c161419910e1a4427f6f7bb7bbf35ac779ea6769b6c009f9b6bf657b78c7c42bf7100725e8cc6252c975";
+  hasRunfiles = true;
+  scriptExts = [
+    "lua"
+  ];
+  license = [ "lppl13c" ];
+  version = "0.55";
+};
+xindex.binfiles = [
+  "xindex"
+];
+xindy = {
+  revision = 65958;
+  sha512.run = "9b7fe97c14e3cf30d1e6743c2d7b4460e8bca901ba3ee216001f1518ff4d834fb3d9b67085825a6e152c6acde544c41cf16d56e609016caab89a594305a21599";
+  sha512.doc = "d0dacd7cfa169b03b7fa9d0b351133582577c3908323f501d7bca7b0165159b72c34f62abfd73b97065baef8cf179b292e654759f3b3e324112623539e5acfd6";
+  hasManpages = true;
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.5.1";
+};
+xindy-persian = {
+  revision = 59013;
+  stripPrefix = 0;
+  sha512.run = "07313253d80b5ed6494e1189088908e03590424c7d24038a437dcbe83637db9e426fa0989fa202f25f62e112cc77df3c4acef111bda6c8b44dc2b2660af959da";
+  sha512.doc = "3868c7f2c20e22cfb3b1ffc61c830581d774ca909c4fc450586ed0bc82a091546efc46540a883e667ac5ac7d292a4786019384afa741599634a2fc05975c36e7";
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+xindy.binfiles = [
+  "tex2xindy"
+  "texindy"
+  "xindy"
+  "xindy.mem"
+  "xindy.run"
+];
+xint = {
+  revision = 63562;
+  stripPrefix = 0;
+  sha512.run = "7c98cd18683bc57dbae80c74fcf30995519f5c6176b5af4865ecf3adce844ac0a58c5cef2bb96e30f9d244da37effbc0b164a544dbdfb9f69ef0314c0be1436b";
+  sha512.doc = "a1ecb80e4ebb43b5b3979493f426b89d7b952c03a388f3eb36d3496506820b97e15926736f44f94195336224e3d382139458ad8c6f6060bb5129ce4edf9d3e39";
+  sha512.source = "c05b56b92a09c51eaa9a3e12bfe52e85408efd97175a2ea8f1c504bc5fcb6800776360e9453b970d048e97b129da2316ae5fd5c257978c3423bcee04f5c864db";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4m";
+};
+xintsession = {
+  revision = 60926;
+  stripPrefix = 0;
+  sha512.run = "d1e279e733e37d6ef163a1dc537f5c02119403710a930f409cc6cfa55f1c08d9dd30bf4aeb14b68e4080442137a7352207ca8dc9bd7f859a8d19cf9205b68c1d";
+  sha512.doc = "1a99ce3ce5e2a311e1dd4086f416738c48cbd42ad0b37c372fffcb0a4f035b3384f1b4963cccd2b602164f256e4bcb8d9b1d3efc56c99382e284d6d97e20b7c1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4alpha";
+};
+xistercian = {
+  revision = 61366;
+  stripPrefix = 0;
+  sha512.run = "e0b4db57c0c3b819f1c653f097c6adcad1d2b74409926d5e0652fed4aced3be5b82ec5f663d85769261fb62e89d16bbe36ed87e6ca2352ab9548fd322c6b7b5a";
+  sha512.doc = "673d6a01619a36fd8db88ab056a8560200e03de519799b867583d6fe0226a25661245e4942a1e2b13a23d2913a137736f6b10ecb25962e0b4afbec8e2b568cf5";
+  sha512.source = "8c305d95953774aaa5e181a3ab2f904b6faceb2387a6b4c9dd4f6c11eb3ddad4e31088a11db48d2ca2a0a72911f5cff1d3bf5bf37a933ceb76805a6265d3c816";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+xits = {
+  revision = 55730;
+  stripPrefix = 0;
+  sha512.run = "8c47de766f965fcb50399e59d20f030e90a28e2aaac018ab1289a1a26b16cd6c9c7d3fd18f1d2b84fe86a99734bbf2ac9b58bfd723a7854bfe29141ab6acb874";
+  sha512.doc = "3c4594f4023f6ae4dd6ac57841720a47f00ae65fcd6930d4e8ec94281a71bf97e7acea26c60d6866304b5018e866ae87554cc470e671d47ede6572da1ac2970d";
+  hasRunfiles = true;
+  license = [ "ofl" ];
+  version = "1.302";
+};
+xkcdcolors = {
+  revision = 67895;
+  stripPrefix = 0;
+  sha512.run = "3a2c40713d8e826c1bc09589e56ae6cf661a73cd32bd8903f80f51d71fb79ef34c0be9395ce2f3915fd1ec1385e970945eb00ed0f9f598294363742fe13f4d8b";
+  sha512.doc = "85b7b920d701a6e6752ed78ddf718ef99b7c6684441012feb5bdf2937d3a16ca8a89033e2a5eb723888a52a913cedd320a42c2b902696f876437e9f912a05aa9";
+  hasRunfiles = true;
+  license = [ "lppl13c" "cc0" ];
+  version = "1.0.2";
+};
+xkeymask = {
+  revision = 69223;
+  stripPrefix = 0;
+  sha512.run = "1502216d5f8b5b2f15317f7dd9faabd11e06232a093a74a64a7114b5f2307e7e96065810129713c679d4aa4d2e622c6a1af8dfb31719b447e9d8fc1e8026e027";
+  sha512.doc = "812473ff009eceec4cdf23cfd89dec769566f2027e528745273061047b4abb3b5b62426492f30755090c664f61e33b675d333cb0e9002869339a4636e6fb260c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+xkeyval = {
+  revision = 63616;
+  stripPrefix = 0;
+  sha512.run = "e7f8355a0dd505af021d413b7e1ec605c083b9e552382eec48de85a1d037937696fc0a5949a4a8cebb065dd339c70742863991bc855c1ffc82177571c16cd313";
+  sha512.doc = "f7948832c943d3746c3115950259430724abee49316aaac0343e0959ddce796ab8064583d048f71ad39332df966557da9a2ec3c2752c16b333cc55bcd2cf3c7e";
+  sha512.source = "8eedead41d620e3561dc120e16d745a18e475107ba3144802200bd043cee93efb2062052ca220da4a4cbbc431e7d432db1d217ed3f4c8430526ebede52cada1e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.9";
+};
+xlop = {
+  revision = 56910;
+  stripPrefix = 0;
+  sha512.run = "6d1ebe5d3870a07175b5c07840dd2170f2309790d1b828df69b716aa83db1a35ff70d265a33d8fc0f6ebe0c4385b7fccee8445ab93b2649d3b27bb65e41f87d5";
+  sha512.doc = "9e1cdf96a23bd468c2e4f358ade19c509685563376d5a7ffedf5cfc122138b14d1075c7ae8c8a00261f789d4010a9df7dd5b1e6a9db5bc7efb067168e7866540";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.28";
+};
+xltabular = {
+  revision = 56855;
+  stripPrefix = 0;
+  sha512.run = "6e49b4a2adc351394bf5ab5cc04d532c36196919a4de8be1ecdcc22c6f226a2d035987df9aa70144d701d9fdeae1dfa07280458a934e289a5d1b5976b2be3ce1";
+  sha512.doc = "daa1f1ee3092d545b3949afa781e40a576a8a3ab1c20e40237d83c14455fcece353dee03161ed1725d3f54c8963ba94c683ae0874a8668c8e5c27ad3b58f227b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2e";
+};
+xltxtra = {
+  revision = 56594;
+  stripPrefix = 0;
+  deps = [
+    "metalogo"
+  ];
+  sha512.run = "ff75c7b2f36f0e3cdc466dde35d83ccbb76c9c95f5d191a5498831247d1d418b69a8f0df8b263eae78e4a13694e628eba64c24e7480c7dbf56948cd5b1504a76";
+  sha512.doc = "6fc84121dd3486f5f7744d757520e2b4d7baf83686e2630990be7e72ccb121e5b417779e4682e6e8a566b016a8995f80d7d4c6dfb3d6d2c9f70ed506bee99d64";
+  sha512.source = "c177b99366479f6ed5ef935be07fbfc3425b48f2c3d274e175bbde9c63cbcc93ee4bca4c3c2886fdc2894b627332ff7edffa5b1083ad86dcced56bfb0d9fe03f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7";
+};
+xml2pmx = {
+  revision = 57972;
+  sha512.run = "9545fb5ca0e95788afab79d8a29336f337619adbcac68472bb5de6af6c54187f19bda655232175223168891c064f6fadc67c4ab8f5a0256e2c55e1a65c5e6f6b";
+  sha512.doc = "973960f65159f5107caa7e9a041dca75f0171fc61f94794c7b7560eb9b6898534974fb8b360a28dfa3a01d422b71618bcaf8aba2ed25ae4d4b9f67d24ab730be";
+  hasManpages = true;
+  license = [ "gpl3Plus" ];
+};
+xml2pmx.binfiles = [
+  "xml2pmx"
+];
+xmltex = {
+  revision = 62145;
+  deps = [
+    "atbegshi"
+    "atveryend"
+    "babel"
+    "cm"
+    "dehyph"
+    "everyshi"
+    "firstaid"
+    "hyph-utf8"
+    "hyphen-base"
+    "l3backend"
+    "l3kernel"
+    "l3packages"
+    "latex"
+    "latex-fonts"
+    "latexconfig"
+    "pdftex"
+    "tex"
+    "tex-ini-files"
+    "unicode-data"
+    "xmltexconfig"
+  ];
+  formats = [
+    {
+      name = "pdfxmltex";
+      engine = "pdftex";
+      patterns = [ "language.dat" ];
+      options = "*pdfxmltex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "dehyph" "hyph-utf8" "latex" "latexconfig" "tex-ini-files" "xmltexconfig" ];
+    }
+    {
+      name = "xmltex";
+      engine = "pdftex";
+      patterns = [ "language.dat" ];
+      options = "*xmltex.ini";
+      fmttriggers = [ "atbegshi" "atveryend" "babel" "cm" "everyshi" "firstaid" "hyphen-base" "l3backend" "l3kernel" "l3packages" "latex" "latex-fonts" "tex-ini-files" "unicode-data" "dehyph" "hyph-utf8" "latex" "latexconfig" "tex-ini-files" "xmltexconfig" ];
+    }
+  ];
+  sha512.run = "ee01abb25b18e99f18bc78357be04fb1405473e90fbdf74ed875e2910812550c44fcc7aee960b2bdc53fcd7d78e9aa706e46929da65d5cb78d9ca43ba475d675";
+  sha512.doc = "d87c6d1f4c472b436104b0746d48a463977dc7eb520de3d7a53f48bc1c8e5682a23d604bbe2ebda1b5029d4a6dd33c2d2bf8b917ad4f54d2c7472874fdfe8509";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8";
+};
+xmltex.binfiles = [
+  "pdfxmltex"
+  "xmltex"
+];
+xmltexconfig = {
+  revision = 68933;
+  stripPrefix = 0;
+  sha512.run = "a377856b79abb94771b54ed19e6f5ef02ebf80374ac868be2905dc23f36d821c79ea9a99077233edd5e125278e6d8bd44c40de50dfd56e389cb46c76348d51e4";
+};
+xmpincl = {
+  revision = 60593;
+  stripPrefix = 0;
+  sha512.run = "49777de1160b2ef53d845ba08fb0af29eb5f06c6fc534da4856bd0f02dbed2dbaa73ac24c45b1e787ea44d08199b7d1c462dc21a972cd1815fcbf65a08388f26";
+  sha512.doc = "b8750478957f6b33163ef546d7be0c0ba4e5906d64a72cdf3edda33c663bcf7400eaeebe3119a175f21093a1b00bd2626df0156c8ebdfb9cdd076bc8d7953ac7";
+  sha512.source = "48d8805d763169bd3024227edac213a5e57d207e63895492cc6f0a25ef38b82fe9d8fee76ea5309344bd397e4c5b70f8b72892d4054307bf758fb81cc8af3bd9";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "2.4";
+};
+xmuthesis = {
+  revision = 56614;
+  stripPrefix = 0;
+  sha512.run = "3c9bdbd54cb99bddb9356586a1ba16d8e0ebe10d0120f6d6e7ae1c60375a41ce9ae9c01eded07b122aa323ddcb0e3ed9c68f6da6e716915f523e77bb343ee665";
+  sha512.doc = "07e9b8eeaa864efbe6fb8e1c54e183a65f177b81454a2abc049e2efef8fae1d61a208273fd3cecb9d8bb8d601266f1c4897939c52d43fb5dff92ecdd3855c322";
+  sha512.source = "9f3eaaac30cc9f396a3e33f6216b56485c27eb2f855b511642204025c27b40a529aa6dd1952c753a1fd50474ee6c5ef020f859dcc71e07ece39df090ed7ef46a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.1";
+};
+xnewcommand = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3296d6f9b580699e86ee01da444ec9b3cf7b76775f05529cc9c4dd931da5f887c914665651214a8107be612b18cb286ec039ad9ab3de520bd17090b38265d5c9";
+  sha512.doc = "e03b7027a3956829823e92bd4d8a3000d8f79f26558875ea3837adc9ca4a17ce75d9d4e9136d7ebda7bdc8fbbf4a1b44fc6f71d1bfad710d2e22bba8fab24292";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+xoptarg = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "3ee6285ecac00a20781ad530a7ca1ef35a94efdcc31d29084e167cde75c51b4bdd644bfb5d25390c3deef44fa7b09e479b6c616169ab0bee1e83d4e37338e00d";
+  sha512.doc = "1692c6700b978cd05cde7c0d45e970a4cc8f783d53cb1e2fc57639483e728ef5dcf29bc7563c9ce42eeaba72da93b36e366876494f3680f0fd5e8eada08694bb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+xpatch = {
+  revision = 54563;
+  stripPrefix = 0;
+  sha512.run = "d96d078066ee7cd39585754b0ed1aa2bd5680f90eb2a879bb2dcb47cfe834094f0b5fa1373ecd7f80f626c1a8a8fd4823525c33fa0e67f63b0beb4031a35956e";
+  sha512.doc = "49479d5a73beda78852f80f786e559caa49b51a44c79e73d689499429ee177ccc1a93064122c13e5cf4e34f00350df3e18fc131505364dd8cbf218e851249e8f";
+  sha512.source = "bed0cd07054aa93d1bc328b57792c79ae90c3f5feb5b6f86e76b4b7c4a2b583248c19b9147d268e1dcb16c107b0dc18b34fe13f537b10042839a46a98b5afb25";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+xpdfopen = {
+  revision = 65952;
+  sha512.run = "927b6a17422a3573efef6767f4835492df27764bc7fe729ed2697665d5fca697fe1a76e141ff30d5cb483bb4ef8e2021ecf2476c5bdf83ebc5dc6e7778b70765";
+  sha512.doc = "b4f332054a5fe85c9404a05673b373ac2b1275b79a1f0b57061cda614350df230dba60ed3be590e0688840334a113ce5c64847c1dc4e6ebae6cc29524c1f6bd5";
+  hasManpages = true;
+  license = [ "publicDomain" ];
+  version = "0.86";
+};
+xpdfopen.binfiles = [
+  "pdfclose"
+  "pdfopen"
+];
+xpeek = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "1b264f383d76e1c213aab0ac650a934ac6a91eb8dea8122229b2ac6bcb6ed694d62acecae3882b41abf34bd016922109064de0775f91222ad88be8287bd62931";
+  sha512.doc = "0633a7a51a329ff6849d080bac626b4174567823b8c597187f62158004a8df647fe40653af371d55d6a4743991fc3ca650e034f68e5b737448245c7df79cba84";
+  sha512.source = "38165be35b6fece20141ab61b4e212d6a754d2971e340a0f98bb02468aaad6b470aecbb5f4887969a987c9e7c45be109cac5e190b534264caced15fdc803f14d";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.2";
+};
+xpiano = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "892f018e4bcad350e4418b2724b6bf2d18aca9f74aa01eb10906b90630b36ec3497a0b96b293e44ec136eee22648b53a13d7a9b614a36c0b79f5a7b94dc37403";
+  sha512.doc = "467da8be6903252b1d1a9436750b8d2f0f5eb1f1f7ad1178acf0a1ddbea253ce38ddc842c89ab6a22c4bb72ec311a2ee2536dee5834ca3ead427c36592c35100";
+  sha512.source = "bfd5a1dde7e05755f3c0167f16b7af2d83881b25d31e96644d18d193f4afb8f9f359b5149fe4534e43243e9364c1ab6380576196422c79077c82c4269b7619a0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+xpicture = {
+  revision = 28770;
+  stripPrefix = 0;
+  sha512.run = "1915b8b9acb3db8d4f8ac4fbc0baab55d6b8352288852f20d066a3f0ce4f7dd0cd4d2d70ae2d2e29aadae0bdb272fcb237146379313b2900accaab2bc10ceb79";
+  sha512.doc = "dafacd0f38ca6a248f701cf48381ce0a3816a693150118ab6a7e18f818814a1b54435820dc8c11135146cfde3d40a08a0f2cd78bc54a9ddb450bb5c848b99e84";
+  sha512.source = "e49b8512ef83ec38f20dafa1e5f191cfd4c2bbcc62016f209be06f969cccdf3cec9545a24756710c767946f8c532074d53de8a6bacd6c565fdf49c579b0cb6c7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2a";
+};
+xpinyin = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "3b7eda4c75b90284138c1277657c8f4a3c2c9a3374a2d6f80969e78805ab8f0c03bf09e5aceaaaec689582dbe30a82b704e41ce08305a0b4b869a84d4d07678e";
+  sha512.doc = "f233ca01195f0f3e236414c02cefbb8da1adc24d6ea94fa56e98ab8772f48456e4bf469f6def555a01c29f8a258c352186d7bf7054db2bbe3843ed937784a440";
+  sha512.source = "f4775152d7879b352f6193af3036258ca984a195abe6de3c03baa41325a7b1fce3900facc2f3ea8fd2deafd3740128161ccfbb2a37eb88fae196a20136f68dd9";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.1";
+};
+xprintlen = {
+  revision = 35928;
+  stripPrefix = 0;
+  sha512.run = "dc446adfe453430d5e2c9155acaad26e258a36319490a5158f0874292e9e68c1eb61ba57e361b5ff8bfff84c3b4a359709525f42599b95e9ba19ce9e28f88423";
+  sha512.doc = "5905ee8d3589b7d75388e6e2355639435f3a72fa99abc17118068069715ba7220fa3d69f58e046d7972814bfa3834222858bc8933562ac91f83ea250f0952d82";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+xpunctuate = {
+  revision = 67918;
+  stripPrefix = 0;
+  sha512.run = "a90da49b111181c61512777e4cbccfc63710b19513309bc2a04fad0285691095c812e7b8feaa0427cd5e837bf644458229b78c2bec530b01bd772fcdb18a2bca";
+  sha512.doc = "8a7c873e8fd809fea44c136ef5b810f6e5d6213f48806cffb5018645d2a0252fb45b0de029c1f070963d4a584983c88e8c2c7661f1dd2f7cd4407c902ea13880";
+  sha512.source = "5e871cab9151f51e1b05f0266d42f872a3eaa27a0a801e517219e400f7be808463038461fe45d1d748c05085dc605545e5b2c83250413138f19649d5af84cca2";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.0";
+};
+xq = {
+  revision = 35211;
+  stripPrefix = 0;
+  sha512.run = "f1fc2f43099e022aaac631d4ccd1e5f5b9a9f23db6f1c6c3adf59d47dca57c25728f81ead0ab62d07b9bea6219e3121874c55973b54e826b1a70c5e4fd47c853";
+  sha512.doc = "cbef1b95b4db328cc29d5f4fef544459b893cea82838e9e1f2faba00dd8fc78bd12d36931dba4ebe76cbe985879c30b8606df1f2091fc8d2108311350b2ea339";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4";
+};
+xsavebox = {
+  revision = 64049;
+  stripPrefix = 0;
+  sha512.run = "a88227b8f3b8adcfb3de271307e97c13db9da52c9446efa69ebc9b12289a59b2b92b608dd87dadf4837f0501599b74775671cc4e529a99ef37035dbe171cd66c";
+  sha512.doc = "4acb0dcab63edd326db7736bf4632f375e4e1dabb1eab0969c0255312f6207871f087cf81e2a01bbfdb99ce956e568d6331cd82346feeae966331569d2f0c3a2";
+  sha512.source = "5843edad34701520c35763cbe3b66523a67f11299affdf4ffcd213ac3abc8d67b9e7cce05610132fcbad3639412f1fe04df15887d1e671c06ef066a0f859f231";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.18";
+};
+xsim = {
+  revision = 61988;
+  stripPrefix = 0;
+  sha512.run = "daaf1cc1ac8c34c4a63de3a16baabbcb661177172892bf4bf85e588cd150e8736b5b3ef382656c4ca5e3486f93889bfe00a9895988284a3fde84caf222e9744c";
+  sha512.doc = "a020e1c60dd909ad48607b315e63d2225a9a884f2939f1cba2a783e9336b86dc002e1fd771469daae9a4c16d80b4c9263f04a545b270ad666749d5d4536d3e7c";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.21";
+};
+xskak = {
+  revision = 51432;
+  stripPrefix = 0;
+  sha512.run = "202f61fffbf22346ff6ad6b2b8f411b2a8e4f58a9d53e5613810f2fe0b56b0c73867f0c1c293bb0c1f0edcd4ab73135ae33a953d3709d2d01060c1b638842dd4";
+  sha512.doc = "6256df468580dcee451e4a650ebab0323c92024e9bf872fd683af1f10c19221887b5bd1bed7540a517eb6716627e689759b7ceaaa2944869e18591fba5467114";
+  sha512.source = "11119e38b4f21663e36764d2b9e7da22d9493de7296590db4beefe185b2c9e89224806257d3880c78b07c3984478843b1886e37e5a33fc798920be221789de04";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+xstring = {
+  revision = 68015;
+  stripPrefix = 0;
+  sha512.run = "a7373745f3ea8f75b73cd3af280743db902a683f16a9820c214b8b5a92c72314323173a966b5356d78cba667978f677f42ea10b54e98b08dec29202ba8e67b39";
+  sha512.doc = "c9ee24a7661c7dcf4f7cd1b657269951baced39e6d40f5a6656d491120c9fd90034d9a4a226d0f714909e7a03fbc474f6f7a355d4138ba87906d950e1156c884";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.86";
+};
+xtab = {
+  revision = 23347;
+  stripPrefix = 0;
+  sha512.run = "e308d3ae3ae32b945450b319834dfac19b6006cb0ede7f21a91999b840528927aaca7cdc330a02ebad874602d6d268fd1fe609dcb52bef2757b2e0417310e012";
+  sha512.doc = "10a158bf2d50fa89355654da36a179bbbc5d30ef3efa8a79537de66c50a892f540938cb364e45896dc079266d5e47bfc2c74b8cfe01ec1691cde34bc221e4ca2";
+  sha512.source = "0ae0bc4d96f8b7c4dd5bc62d56538ef5e8f5d8d8ecdb114759209dedc722a2aee1b646a27cff611bfd2ec9ac96f0633393cef9d3a13a6d54978740b28fcc09c6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.3f";
+};
+xtuthesis = {
+  revision = 47049;
+  stripPrefix = 0;
+  sha512.run = "5d9081b8d197952aa5ff58b1cbd490bb529cbbc1b72956cca8dd28b1b6bc12c6248d3d04fd457349b30df7594aa1872ce9c8438feb67af1b93ff0fd33eefcb7d";
+  sha512.doc = "96e94598e3e397a9657a83496d940aa2525fdbe1ec2cf820b05e5493b1f3e1c45568e16b62c22d4ee25afe2bd0657848a433477e82cc8038895c2195139ca065";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+xunicode = {
+  revision = 30466;
+  stripPrefix = 0;
+  deps = [
+    "tipa"
+  ];
+  sha512.run = "f49628013bc54e82bc38a2c749ddde9426c65716f04c5c8d8264398b9595e571d380e07c045db9e7ed5d6df7d0b7b1f8e81eaa28d6b67a6756d2c5023b731176";
+  sha512.doc = "fbd368180c97649944aa23fae4f50f8a8d1aaa776f643ba520f121b9aae196dca94c11906f9d5b2f961b6d494256329670af1f4563502b44a8fc9633e29373e0";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.981";
+};
+xurl = {
+  revision = 61553;
+  stripPrefix = 0;
+  sha512.run = "df2570d0eefb64df3a0533237ea09f00b9e22be0000134b32de40198649a6e98ee48a31d769dc750847672be7e3577fcd8eabe25e1ae8ee493d77e40ce684147";
+  sha512.doc = "e02cceecac468713453432e118dd1cbe3f872a4dc33fcbdfc769861f353ac4ff5c117f51197b297a4eadf295f75f1f0254585ef0a48909aa004f4a598d796491";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.10";
+};
+xwatermark = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "c8b7e89cb39ef5b3f01f24a89cbdce729ad2061a0b3a1ef504933ab7e116b4b67ba8f1a68db74d46839bfbb60cecad4fc459fdd5d913716ad6542d8952ffd926";
+  sha512.doc = "a812651c587a76e086076bc8c810dc218431b40aad223644001f42d098962a401246781e0f83789afb3407fd93a0379755f82e30d815c14b4bc72499a9d8d26e";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5.2d";
+};
+xyling = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "5f78d2d61050d9ed84d56136fe59b4674f4e03a536015e3ebc3b9500dd8a08878164ce9fb1aa9ca9a1262a000149061f3fe22f10cfd68941316aa186b81fe923";
+  sha512.doc = "7b4ca312ea917329260eb0a19bd504ac2f3ddfb5f066806296b164fc541bfe26e6ed1c03ffac5b52af6b19fb4ba1e77b5228ac4b4db0c2ee8f2394fc0f888d09";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+xymtex = {
+  revision = 32182;
+  stripPrefix = 0;
+  sha512.run = "9f0f14d1a862622ad0ef695a58f7dab554daac8d5151193a70c94ea872d16fe8eb1a763d03b226b08583db484bf576f5a41d2070d5396ac323ed00ccb0daf5e1";
+  sha512.doc = "0e2eb5439f2e629da902e4c7d7ddd2d03bc4d654c4ee49e6b005450174acbd70760b52c9deb446ca60efe7c0389403584b86a6f9c9964cf24858b13cfccf7ed3";
+  sha512.source = "d805d6fcb72fb801001ad80fe43ee36126c0764f8baa96dff9fffcf7452bba8e5cf42cbca6a50b89f5925607c277b3fb7408f8f7e6ab087edbade0dac294252a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "5.06";
+};
+xypic = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "431451f2028cc87d2d22b4d6ce95ac8f216755da312301195ba7af46146382cf76c27f9964a94817e90afdcdbc7a01dbd887d45808296984fa0b3a3a1770b46d";
+  sha512.doc = "9664336d5bd14145603a8c3e861f8fdf062cd4587b8f739a29d93ac78a946c06a0985da4f011030df575276bd43555e55ba467eb4c640d60b2db0a07be706908";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+  version = "3.8.9";
+};
+xypic-tut-pt = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "291825c3461b397deb825266c7ee4316c5d04b8db1a29759378409de55c20d81552e31260468f4fa6a9a04f04705422714a8ec70a866c87fca2f4f1e189e0e4e";
+  sha512.doc = "e27dfa0b36341bcd02ba63a8b543f1a6c55c674745cc790543ea2cfded80e536e5901f184a3af62b92b4534c738a06bf4fd5cbd4dfb4da865d13991279309aac";
+  license = [ "gpl1Only" ];
+};
+xytree = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "fdabfc451679f7ef3752db2537a7dd51e9c0fd34337e429f24e44728ec1ee0a9b97fc2f176948440a5c1cda609182f60d4c564ddcd76c70e84410cc6a0b1f371";
+  sha512.doc = "0e2b08c8db25a5bd992c8aa843d8f6fb2e0efb3c11ea9dd0ac69106cd71f58996f73786513e0ff13bfb54932f468297edbb981e3efccfec2652f80bb02fc6ba7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.5";
+};
+yafoot = {
+  revision = 48568;
+  stripPrefix = 0;
+  sha512.run = "75ab34d40fb051000783abf573f4507e3791ea5aa1cf4b8571ad16bc020f10d17a49220a2878e5a2791fb7f073613ed20d72cd5618feadf38e290ee4f047e615";
+  sha512.doc = "322e9cd25fd7686c4325d04bc7dfa00aee45fe993bdb730ca3669cf860b7cbae1dc76483fe3dec11e09ad848f166a01f43ad0885e0e9fe324ef28d28a7d2b4ad";
+  sha512.source = "5159db9c0f8e1f1ba4fd265c1188c47271b6da4290c33f65e8284b0c95d8144a3219951e13c1fb8e7fc172f2cd0094cc73d63fcd0cab67908f6542881930d772";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+yagusylo = {
+  revision = 29803;
+  stripPrefix = 0;
+  sha512.run = "f6f367155aa16ab0133957fea3c099d4e839f248a87ccca430e43c08257b2aed3a11c77ceaf8484097910bcee2dfadf260ab5047fa7f0244b43bcf332f367bf0";
+  sha512.doc = "0ba73f1c7c7d7d646312f8a3d35c0d063e792ebae45c3e869565f01ef65e14f31bee463a1ebb8ad60166d54cdc23a9d21684675a6ccb09b8da233badb0d0ad96";
+  sha512.source = "0bf71cf46e2cd66f9066dda7e7982f91e06803ad2c89358da94fc0ecd593ecfbed8b36ea9668f3e713987265fcdf03fdaae08ee9dcbf36ec1d22a91e3bfe84c1";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2";
+};
+yaletter = {
+  revision = 42830;
+  stripPrefix = 0;
+  sha512.run = "28765f3b6296ea3b9daf671543b7b2cf371bf2aefb4f3eefe6e95d50ee9a11516a7ec14fec5d15305e8f52d0089072cf10ce9dd4cba30c8fb60fa75365ff0d22";
+  sha512.doc = "ed81b08b0306ceb519c9a652ef0d271bfa486897b05bc3a91a3840e36d348ea86bdd645ae236d3f34de78d038de988a023e542075f871aa6d8752d9606910dc6";
+  sha512.source = "a2e64356234f9bf9bed1a73d5ea362ee487fb3eab43dc89241bf21c7033119e030cf3db81321b1eba245b3330103bff6a7b9f345e6df27f47de35ab9df4a6ace";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.1";
+};
+yamlvars = {
+  revision = 69071;
+  stripPrefix = 0;
+  sha512.run = "07d8c9983e631b3e4c97ccc1a7bdd20486e55a59eb6049388823db24149635bd59b94d98f2259de5ef0dc163a9f44e4e01148a42c3f676c65fa802d310f6a0c3";
+  sha512.doc = "686e2be82054f40c93dfcfbda35d2fa45fe0c28d0b85af30c5ec9c9a8c125a6789fb7185d08da9859bf714f6f5e4dc4057890ee4782fbea446aec923e0adfa6e";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+yannisgr = {
+  revision = 22613;
+  stripPrefix = 0;
+  sha512.run = "509e69acdef68eadc65fef6980e9166c6327e8927fb9cdf6a7a33786a8668ac9b900954a4bb661f223967b26dd240d5ebd91683658b324be284e46876c39061d";
+  sha512.doc = "40ecdfe71670357e8ec84fd262015b5b5d0b8e486ab80c05d0863a335649501e9548d785cc2b2374f989b820dadd9a074cc229674dd1ae9a6252d4a0ebeb4191";
+  hasRunfiles = true;
+  license = [ "gpl2" ];
+};
+yathesis = {
+  revision = 66146;
+  stripPrefix = 0;
+  sha512.run = "a14b12050bd99d7fdf4cbad2962b35976ec86e80944f8aca2bdfedec64d703c74081d107bff1704132e73df47002426c39d22a655acdd7c0d98857ed9191cf86";
+  sha512.doc = "6a1877cbca94a367afa8c6129bf8c6264e2c7203764fa451137113470d7899a40b195db8327ad84249b9f9c8d41698dd0c7a7b6b2754b8205e3bf8e8b533f545";
+  sha512.source = "753983fa303512e3a505f43ec14a626f42e20702f90c52bcb522378c9f2c6b0d0ce5b7888b4c1ca923812a79d1335573fe9d95493dc4d844dac2b757d67b4a25";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0.11";
+};
+yax = {
+  revision = 54080;
+  stripPrefix = 0;
+  sha512.run = "a625e7e4d26368732a8700f71f102fb17965a6a85d5a3c28e170dc19248ec0f3cdfd0905c76f0431585e955e29293b49b6dffcf93ed7bdbd80b5d62cca2775e7";
+  sha512.doc = "783a606e55a6d2bbd1fb4052bcc84ac499953838808161facd8a76fe0e46a3de8ff0399831bc4e8ddbab02be84a3da68f0f7535c0d3b0b1f3d8d6cfba63ab0a8";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.03";
+};
+yazd-thesis = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "d19e817cc925a0ea08e1b15f3a2b1d6ee4b7a8f9ac420dfa7b6db7cc55b5a24777125a0be7923707606b215ec95044fdf16a2f8a5e5682d8403cf6857dc3252e";
+  sha512.doc = "b065c1fabfa4eb394b5ffd3ed048a42c005cb183c82027d5ce1d21e53c2a35f8c0d3647156567f47cdced936ed061fcf303651d024fe3050e8a135c693ea8c28";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3";
+};
+yb-book = {
+  revision = 67188;
+  stripPrefix = 0;
+  deps = [
+    "anyfontsize"
+    "biblatex"
+    "bigfoot"
+    "changepage"
+    "chngcntr"
+    "csquotes"
+    "enumitem"
+    "fancyhdr"
+    "float"
+    "footmisc"
+    "geometry"
+    "ifmtarg"
+    "imakeidx"
+    "lastpage"
+    "libertine"
+    "mdframed"
+    "microtype"
+    "needspace"
+    "paralist"
+    "pgf"
+    "qrcode"
+    "setspace"
+    "soul"
+    "titlesec"
+    "ulem"
+    "wrapfig"
+    "xcolor"
+    "xifthen"
+    "xkeyval"
+    "zref"
+  ];
+  sha512.run = "e50c3b75107bcd7cf72a6d4ef86353e8953860a3b4ffc044280fa57b0f290d1ec161e31aed3f91f8827bf038e4f60ed1a6eefb557f0401ed67042209750059d0";
+  sha512.doc = "19e220fa4214b2ca9c95fef77c12805d1f9f4916e8463fce561170e7ba103587a47a38f1710dd6e1147cf50c23f6e5e9524582f127ad0dc237a409970f4922aa";
+  sha512.source = "3a7817bf209e938f9a75e928c16de30b59537cc049ca1b67e3bdf9c116337c78fe0a40b346a0f7189ea04c7af3755e0428af2140db7eaa83dce026a6042dc489";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.3.0";
+};
+ycbook = {
+  revision = 46201;
+  stripPrefix = 0;
+  sha512.run = "8b98cd81e5f1252063da8dc297eb5580d06020a343638f7c8a1090a7f056a788eb4322e286f12d821be79fc7de94262a4ff15c14a1c787be0de89ddc87541452";
+  sha512.doc = "45ee725849230549b4b2f200e0b140c1fc99a60d91730a42d2e3df63e828eb6053845a2eb84ff25bf916341df46a3f3c01166848afb291d322dfb21426903644";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ydoc = {
+  revision = 64887;
+  stripPrefix = 0;
+  deps = [
+    "etoolbox"
+    "float"
+    "hyperref"
+    "listings"
+    "needspace"
+    "newverbs"
+    "showexpl"
+    "tools"
+    "url"
+    "xcolor"
+  ];
+  sha512.run = "116d4be9a7ca06f90967c85a696e893a85555402acf400c0251a71f4d43a5ad244ee041518d4408b6627610ff87792f07ab51309303e442159bce46025d5a27c";
+  sha512.doc = "714ff9f1fc20d9f3e5effe9159935a45662f7f8dde9be0371055a3e178b9a74618046c1f4ba67cd1b89b6b0abfdf41de2716a097e67138d42f733ece3edb028d";
+  sha512.source = "1a4d7c462316b3d2689b5121d81af8ff7847909e039564a0d66c859607e5c4fa573dbc607cffbd73223f48f471847057fbfeeb71a31947b5b1a8c02eb88eb35b";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7alpha";
+};
+yet-another-guide-latex2e = {
+  revision = 68564;
+  stripPrefix = 0;
+  sha512.run = "7a2d19b71006352ff9cf69cb68243153e99e4cda2a3fef37daf6ab180e7a7625b8119b972785a331188faf7ee6f03d724a760c5c3456e85cf32ce704b3edd7cc";
+  sha512.doc = "8ab0ebad6b627dc1a5d90477d48868715830c6558e9091d3782284e9766f22f9764170a3e89d55c8437dbca2c8eab446a1be0336baf43b3ddcaf67e125ea2f64";
+  license = [ "fdl13Only" ];
+  version = "1.2";
+};
+yfonts = {
+  revision = 50755;
+  stripPrefix = 0;
+  sha512.run = "1caa22023c93ae1e6a2fd94676da61fd576890f991a79d6a9724a4e5f7e653a752c6af792a1b15d44aa956f5788aa995614a33c2d97e95865d6a364f833e539f";
+  sha512.doc = "54857e6693242080c5f410ded0bb16d3df65fee2834b2b5d1232dd063a70796905771059da07e7d92358fce9da992c3e605be345ae7c5d4012d37dc37a17dc82";
+  sha512.source = "c716a8ecca03f0dbaf07146021977fd802e2089c5b99fc7adaac1e581ecbfd4f4b1a15562a54eea7c783f5b8b6165b935e484e36a456ef81729751c777266815";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4";
+};
+yfonts-otf = {
+  revision = 65030;
+  stripPrefix = 0;
+  sha512.run = "cc1587d41121f8e15b3b659f2620c0324fb35b46a6914843c3abebb7c4fa0b30e85e59a2de603128d8015d68edd1e16b8cb02a9dacdd49c04dd3a602d1ee0148";
+  sha512.doc = "47d025d7a7d3a65803c1ebc318e13adbf371b5bc7720d7a5be5b839246906fbd963c4ba2147ad37aca5313f3ba95d361e19f87bf6d77b99e150bd96a29461f0c";
+  hasRunfiles = true;
+  license = [ "ofl" "lppl13c" ];
+  version = "0.43";
+};
+yfonts-t1 = {
+  revision = 36013;
+  stripPrefix = 0;
+  sha512.run = "ec4cfa0d4f08f506b3bf7a3acc8e303ba51c7761f32498f040e062264e595bebe64a4f5adc7d6ab5aa2180c55b817d0124d5b07b276cb39c775539113a08f490";
+  sha512.doc = "dd37c5163de0bdcce937a1866a48d9f924faff81da11e566e9525a6d5a81ae82419ee7eaebdff1cd8512957a878f849f43e9cd71dd39625e6dc0e2ba18f4ac9b";
+  hasRunfiles = true;
+  license = [ "free" ];
+  version = "1.0";
+};
+yhmath = {
+  revision = 54377;
+  stripPrefix = 0;
+  sha512.run = "88476f5355d041f1920c4f0f954853828bdfaf27b9d0441982a38e3dfe79b40377a83614794024ee8c8463eaf5d1c350bff033f1c53e031451ab7cd095e14948";
+  sha512.doc = "56fb12fcc4099f14c5746727b3c3051d84097cd8a715023545c3a2fafcc5a5abe55980a12e4384f674ef6cad2c7d6dab2beb8374e4cb3af81f711c2e8320d97b";
+  sha512.source = "57a97c1310cfefcc453d031dd3c4701bac2a36c04f435f7a823e1b83671afccadc33d213e9578f4bbf806b6c73aaf33d3816dcafa86fb4447d53659e11f83072";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.6";
+};
+yinit-otf = {
+  revision = 40207;
+  stripPrefix = 0;
+  sha512.run = "5ec9f9408c3188b2bf985e9c3f1f9f6a345557d08a167a9d02c07fe41bbb981a8889f580d6e38a97798bb5e891d978eb4ee70b77a344c684051b5644654d1cd1";
+  sha512.doc = "6c73466c1e4ce1f7aec1b30980e5c44ca4917e161236fad7a0816bc93e921525b90f62abd8d41d3b767d8a6eda62a34534d7129d1fc490fda430345f8a2b3ce7";
+  hasRunfiles = true;
+  license = [ "publicDomain" ];
+  version = "1.0";
+};
+york-thesis = {
+  revision = 23348;
+  stripPrefix = 0;
+  sha512.run = "5b5152cc315dc05164ba3502d6e7aff355d853e43a3836bda0a15a4af7a90ef9fef02c852125c7e1e4842c05d51f2be6441b5131400eb46bb6704b281711e18d";
+  sha512.doc = "e1ee454ad9996b61f1cac9bbeec30210359ecd8939bd9e0696e7cca7106733b13b8831946c47652186d4b80060f96c479b642274f5c90f8757953b1c3861f0bc";
+  sha512.source = "3096ee9334bab690b38ff943559a0a7b0c54f8b831e7d1320ae4581740c48dd05e09813e220ce1d28d4523fb456d7fd01920e89e7e0d66da00e9dce88bfadea7";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.6";
+};
+youngtab = {
+  revision = 56500;
+  stripPrefix = 0;
+  sha512.run = "4ac5c3803a2e815c51178fa30086ad25c1dd2b430753d582376c9f6c720bd1a72db1d285d2b0cd810e3564961ce3641f3b482d685126e880cfb1dc856dc74bc0";
+  sha512.doc = "b291614a22227693f93422af280200fd927fcefd0399d4294f934ff8882d26e263a3a1dcbac3ad2289d2adf2ff92c76a8223eb450de46e0b1df283af31bac3da";
+  sha512.source = "57110b41ada1866d327eee8f1eae1ad61ad7bea1428bf9a3ccd31b9cf27e19537952ef756299f62e5204e5fddf5d032c8170eb36d6a9fe73e66c8d72e1c4f085";
+  hasRunfiles = true;
+  license = [ "lppl1" ];
+  version = "1.1";
+};
+yplan = {
+  revision = 34398;
+  sha512.run = "4884ac99b0b56927fb86c6e06ae9d4accb7d8b441bb17df79753d8af9ee84b9440d66ad4fcf2107aa036eb2af89d5ad49d0a4c4cb91236c6475cf81bab85566a";
+  sha512.doc = "7d3cddf3f2d54283b777c7ab7867df68fdb484c67d2f88589e29fc087db721e7ba9e0fcea2ffde9328e89075884d668b7de8fc61f462b735d9f1cfadb9662463";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+yplan.binfiles = [
+  "yplan"
+];
+yquant = {
+  revision = 68997;
+  stripPrefix = 0;
+  sha512.run = "2d9dbde5bbc12186a054624f4dfc30ab9cde606440e5568de12f9bcbc0f0c7f872141a2f1745e2f9729884e59e8c36ffddb77ae5b813cf837ea7e2ebea7d7109";
+  sha512.doc = "bd0f9428c7a0930b6d714ba69f0020217021283021b9492bb71c2077fb70e86f3a49694251f88e91605604bda7049ce1f06bf1ecc1b668c63e080d1bcb087fd6";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.7.5";
+};
+ytableau = {
+  revision = 59580;
+  stripPrefix = 0;
+  sha512.run = "23bf33f11e295f5f36149bad2b801ecfee57b386dd952ea93b16e79f85c54e1edff741bb7d6dc7faa769062ff81277cf04ff06cb2fb92e9a7542b4dc93eebb0b";
+  sha512.doc = "b98b0da2e5e0eb964ede56a27067b7ba862b63dd1b0dc6771e432abb16e924fda5630d067c6bbb05fdf6a37aba07c61396d47612adcfcccd5886ff3fdd47b7a4";
+  sha512.source = "264f983cb28ddd4f2089b4d170603172cce27b463999e4806173106e384bd4c3be16ada6f0c2e3c176dc450c53c2e50e43f993c893880ccf5c9454b84a062ea8";
+  hasRunfiles = true;
+  license = [ "lppl12" ];
+  version = "1.4";
+};
+zapfchan = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "a5a8a672e1753cd39b44dfb43b9b83673f7bd20dfb4e4640630ba0908c228dd75dda7933432d6d6f7e2c4920d554aa8cd41a523ebe665832edbc4aa7b8034332";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+zapfding = {
+  revision = 61719;
+  stripPrefix = 0;
+  sha512.run = "3e0503c2d4e30c8d727caa1d9438d4c6b12c3a15729eae65d5c4a8dd9ab0d0c8eee2f63138e9d267f4ae98ef7607388888f7acd78e189a5c322bda22827166fe";
+  hasRunfiles = true;
+  license = [ "gpl1Only" ];
+};
+zbmath-review-template = {
+  revision = 59693;
+  stripPrefix = 0;
+  sha512.run = "c9685b151679e7516e146f3d97f4242c7cdf084f84a7ac857a8aa27031c60950d0da07d66b7b57d7bdec384d3501c30b339231654cf845bbed2945b0ac069368";
+  sha512.doc = "470ee6c9895effd3c6bcac5a9faaa3862380bb137044411dd0013f4f465dc923dc1de507f2d1d087fb4b4178cb2f43f435e71b090d55744a8be6e59f8cc010fa";
+  hasRunfiles = true;
+  license = [ "gpl3" "cc-by-sa-40" ];
+  version = "2.1";
+};
+zebra-goodies = {
+  revision = 66630;
+  stripPrefix = 0;
+  sha512.run = "c740469e5a27355fbe8c781d30434724b8c77216e88c674854dd71e73e38ba78aeeef251a25e756c4046230eccdf334abf6d5f378bad559691a29955cb0eb16c";
+  sha512.doc = "c4bdfba7e426c95599c4fe2cff06ada80345490f433eb636260ed5ce322c1c21c0b5de0c4709be415b6b98668b7c514610375f2bdf9831248be0095e1ff28dc2";
+  sha512.source = "ec961bcc2d7181450184bdddbe0f0c1d5100bd6fe2294722dda239d8979f6c8d126fd4f52cce371db8227aedb1e1da14eaf1457ed12e65d33ccce6f23148ad8f";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.8.1";
+};
+zed-csp = {
+  revision = 17258;
+  stripPrefix = 0;
+  sha512.run = "2f41c5b28e602aa88146cbbc172eb2d6c6f21491e45622c4c1688b9a8acb5be304a8acde842bef84f7a238109ac9ebefa31844826387b266f14faa6a6943903a";
+  sha512.doc = "e5e657656e46023e32366ba415f46322f4c9b4fe0e69f03c88d4e5fcdd577e3436be6436424f502c3807278efe3a31ab7cba3020ef3c9e44874de3660dcccd2b";
+  hasRunfiles = true;
+  license = [ "free" ];
+};
+zennote = {
+  revision = 65549;
+  stripPrefix = 0;
+  sha512.run = "94f1e1a0550005c25206ac3e04216d35bc2b769b735160219ca246c95a85db5002bc74641e45152a31e8148e4d581bdb0024a3174eb735537d39ea1256f34365";
+  sha512.doc = "a2351fa77ebdbe035a60750c1362d6a04cef67be244ff5ce2f6a38cc6b8c3b5b96f4afcb15c43866393911e60446be6f5a4d384852a8a10101abae38bd309fc7";
+  hasRunfiles = true;
+  license = [ "cc-by-40" ];
+  version = "1.0.0";
+};
+zhlineskip = {
+  revision = 51142;
+  stripPrefix = 0;
+  sha512.run = "c1e92d164d0b46ca1165775e5c17f72687cd83b6efbba95dd58fe55008877ab3f08bbaf90d36d491ec861705e9d15f74511c8a0f9cf66ef8bf5127d7aa2cf203";
+  sha512.doc = "794822b3b89aec655af2663f3dfbe848ccac9fea8369f446596562178e73c01ddadcf1ce46fd1811e4b72a25917c310bd42e45f9b16a3adb897304ae345d5415";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0e";
+};
+zhlipsum = {
+  revision = 54994;
+  stripPrefix = 0;
+  sha512.run = "d62f2a16f2303db7846073b215b3e8f822b7470510eb84367b1ba177c971e587adcea92757a3a4f5612abf103bd11cc8f2ae3ab953833365fb2255ee87563cb8";
+  sha512.doc = "dcd0d706d9e402ad1b4eab910294ac4e802a58c2e54a3ee19b6dcef9fc3e052b84b559f452bb32b78d27a99e65a0820d2029e53079ce21068618f5c620f9502f";
+  sha512.source = "92054c4839953e84a15abc6ca280ca2d755d5854b284c30521f17e54528bd4c369e9298e596606c877ecc74533fa81d8a8d544c2819f14d48157ee996a26a922";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.2.0";
+};
+zhmetrics = {
+  revision = 22207;
+  stripPrefix = 0;
+  sha512.run = "abc0b873b5abb0b053fb59d8bb831a835f90cd8bfc2cde87d1031dba2e31db8721e3ea1037e7322b33ae5216dd65bd01008fb769eade0c9b4815e8ea7c55615c";
+  sha512.doc = "e77fd912d10d8ab535c366f8e5b99e996607788b9ede295a3d7739fc4c14e0679c66c36bdefe2ce5433967b28b2ab228c332d9b0a23a841d42d3fa56cd204040";
+  sha512.source = "d505658c340bc3824332ed473927bf971612204e69c56839d4e0bd0b6ad4b84a975fe32e863d12d2e0ecae580edd06c3ea0854b90cf762aa9ad6106d2f2afc1a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "r206";
+};
+zhmetrics-uptex = {
+  revision = 40728;
+  stripPrefix = 0;
+  sha512.run = "1e068a0b402a5c69b44a86d797cb24266b2883c698decd8b8464c99b131d292cc5ac44249ba8e89dc0a414d6f12d73d4c069ffc3081cfa4b9926ca412bfc3dd6";
+  sha512.doc = "f9ac2953877cd830e1cf3402f3f2bac1f8159d05a4a74e89047c494ae04dc8930f1c09701f83871b4361976572ae7d1c5fbdaf3af3d9e6db12347a207f1b82cb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+zhnumber = {
+  revision = 66115;
+  stripPrefix = 0;
+  sha512.run = "080460cafa9f1b382d5843e7863eefb36a26abcdf8ef97d9a23fe4e68d1bf85e0e6a38c7201d1dbaf2d25acc7b846d757fab9f9b850d992a576b6df67929cb55";
+  sha512.doc = "c8f6b76b72f7b7bc19f2e6fe64191b86c4b73fa7559d3299945359a7d2205e3685c4eee98283f361207192fc35de0a7ae9064e118e20f96f832d18eacf93bf70";
+  sha512.source = "7a79592cda187221d2832db12e45923a03f110de7ae358304048a52d2e170853421cad0a50211c0894b700c98301cf949f1def35acacc7cf2d23789ff23ca4ea";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "3.0";
+};
+zhspacing = {
+  revision = 41145;
+  stripPrefix = 0;
+  sha512.run = "52d1d3523ae4c0d2dba5258b06cf9920f8a9005df7e03fd1407dd8ae2e4dc90768aab10127319ef9025765820b3ebb8a946ea0373114c9148a303517b563bfe0";
+  sha512.doc = "7fd15e4f29671081670e881e9366ba627f5bed6d981fa0ef1c670d0744e1286c04e785e28b92279d66af851803d84949c2f463370f23c64987fea78531172128";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+ziffer = {
+  revision = 32279;
+  stripPrefix = 0;
+  sha512.run = "3d29074642d8a4c63046347a36f47548557de92a64ab4d6b7d1cad87f97a9e25a09fe84cf699a3bf2129c4de00dd3ef3593f85056e8f38a9a2d1ca27c549cf96";
+  sha512.doc = "8eb75b54a6711ba0d0ad30343f253eabf88b3752de3112b13b96e4182119ef5f789916c413a5ca35ba7bf6619eb25bf64e7717844e4b9a49d33781d91f5b14af";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.1";
+};
+zitie = {
+  revision = 60676;
+  stripPrefix = 0;
+  sha512.run = "10769951705e67bb929643e39d5480c4c2337a68f59ede2d77b2f8ddc3e2d6363c873d0e8e480a85e02f2062736570fa74171c862e50af73efa941a4d93cdd58";
+  sha512.doc = "84f8e20beec5ba5ffbd79c6ffa68f0530b285761a8de6ed53e621ef39c0c14f59c33d76373581f94f10b1149a9fe5c92c1c74bbe2c4d6b8aa589d3a574bd9153";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4.0";
+};
+zlmtt = {
+  revision = 64076;
+  stripPrefix = 0;
+  sha512.run = "ecd45c407db5a78d31f6bcb7be6184531a51bbf89171c47f2e5178e65b06db4595682c713a977ece1cdbd98fb59b551baef3cca527b22f98bb45b37e73407144";
+  sha512.doc = "2bd3ce9fde985f319bfb33ed791524bf81ce2ad3797fabdce78bbc4f4884871d5994e6fd9737ca3ae40953613aca70b9ef399ae914a40df54c91347ca98aef98";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.032";
+};
+zootaxa-bst = {
+  revision = 50619;
+  stripPrefix = 0;
+  sha512.run = "80816556a2e23cfd8345b7d22224142a5448105ccc5c1143f33c4560a4e4ab432115c2fc47c5d4c6ba599031f4c36b481465a5fa7b32afde888beac69a6e6c62";
+  sha512.doc = "f843aa27ab0c2139e1051aefaa9b667f2de489cc13578200ce7db2bdfc2397888856c6cbe68b6fa201e0cb269bb95818cb31f1b03622c49ebdced23fa5960d65";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.0";
+};
+zref = {
+  revision = 68278;
+  stripPrefix = 0;
+  sha512.run = "1c21d99dc4f1627520914ed3620606c724f22754662797b93c4161aaf3e36d5a42a586ae7e4b227cdf67d55c88d3979635e78661d7029f1a5967c503a9f9dde5";
+  sha512.doc = "24cf22b54cb13e1458266f4962ba589fa9385f3b8d58493747824d815c372cfa6fa8a8a24d0310264b299ce43148ca001b5c6b73961d1504e1ab6e8a4ac246c0";
+  sha512.source = "251cc99a193371ca0e11d1690ce6ce545cdf077a483f81d2d5ac5c3495b24c25f383ba6b73e9607578adb0940441247ac4027c7719d2ada0c1b77f7876f9767a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "2.35";
+};
+zref-check = {
+  revision = 68846;
+  stripPrefix = 0;
+  sha512.run = "98aeb6007f1f599a2bda644c60c9929ca27c9045d73af3d54298837eb842e7976a2f9067182ce38c77ff197e2fe36a53207d2aa39adaa9deeb4e118bd034b0e5";
+  sha512.doc = "d050bb4a6c68a80eafe3eb7f99c61407424385743785014600404397e6fa322becaf3a28157f59951a2406fdfb66968f3cba9de4e388282ea0c84e3f33d4fc8d";
+  sha512.source = "a84246193d390c55dd66d65b64eae79e52099e7f7c75b8ef03d595d466d57643832f95ff23ecdc2dd0cc31b7c5cc64db361bd5ece7949e544936739b2c70e1bb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.3.5";
+};
+zref-clever = {
+  revision = 68846;
+  stripPrefix = 0;
+  sha512.run = "d7a32fde3ee94e304f854f690756ad9d15a9287c1dd38e1707a1f33e2bd30ac23147a439990ba7e9f7bc0b2c5b37b5d475bb64f2ab89bb15752bfc0e2f9ad3ac";
+  sha512.doc = "c18e86417db71ece26e6a29e0598e521d17a79c26f5ebd92dbd78c427142bb992df9ff39c0a5867dd296093036615bc319aa9dc970faa0ae0d4ed479452e1b89";
+  sha512.source = "3ff30e4c2ee570c5c142542110699ec17b123078c5d01ed9de2781404026b120856d38d4cb05160bd90ea56063e220e09dd46158d938a70416488797855a1fe3";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.4.3";
+};
+zref-vario = {
+  revision = 68846;
+  stripPrefix = 0;
+  deps = [
+    "tools"
+    "zref-clever"
+  ];
+  sha512.run = "c159620be1d7d853641d4b42108ec0b2e36b6f4b0c604680469b52cf4c0557196263293d4692906d1d42c1d0ab9a666b59d462266131e42f319a5ab3a2385780";
+  sha512.doc = "b618216a0bd8d7b65fe73be05156e899917719436ef0139122fd01047b8d55faeea55ae05e259d99c464aaeb3fdd9268886b7dec9c4b6a86209da1dcf1c3a3ca";
+  sha512.source = "0569db63bf6fd492952cdee442312e818926bceba7663ce0e17f485dbe990687d97efc02649acef6dd89210aa44f9e88c86cf2667c4a487e9b78b90b10a779ce";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "0.1.10";
+};
+zwgetfdate = {
+  revision = 15878;
+  stripPrefix = 0;
+  sha512.run = "fe52555cc46a9e8340d8c9c37f88b372bf72efbd48a097b2d319592dc49a8cf55c87e80ea7d94ba6730742e9883215703749895008ba38838750efb9fb2334e9";
+  sha512.doc = "7ab61dc4252ef7f60d1d5be8d4415bcaeaed194384a1da14a3400617b36c6efae3679dbbd6c8d64b8cc9f9947babe88c064d637379f663408cbe63ca42334bfb";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+};
+zwpagelayout = {
+  revision = 63074;
+  stripPrefix = 0;
+  sha512.run = "a0b5ca55208fe5f2353bf846fda3bbf2ef095f68e0e80265c9c89bfb14be0c80f5ca7c1b7fbaae4c8d67d70fc381353f889c9596e96412c351d39cceba40c263";
+  sha512.doc = "9b52a6267720a787826bd14efa7742ef9adf9ad14c46065edf5f0e47c94d2762a7dd2a4b9b31864a3a1bad8addd4c18e21119a70abfca89730a7c7804628877a";
+  hasRunfiles = true;
+  license = [ "lppl13c" ];
+  version = "1.4e";
+};
+zx-calculus = {
+  revision = 60838;
+  stripPrefix = 0;
+  sha512.run = "17854656622c012a3c0a4711e9c38d2c100a156072e7556b3ba3d6ce6edf1463c69078073bd72b83d3136e96e72e4adfff3982a73d4fd4d66fa98ff6823eafb5";
+  sha512.doc = "076a25ef96775d28fad2e97027ef69b983f1cc44f11866b7f6db0408bca45759b8ed0f3914516712f235ee4a670bb3fcb28954a2b3f745786e6d6f8f7c06cde9";
+  hasRunfiles = true;
+  license = [ "mit" ];
+};
+zxjafbfont = {
+  revision = 28539;
+  stripPrefix = 0;
+  sha512.run = "357b100dac7061a5e6fe91e3a708f32e99a134158393581bc717ae3e90afa5dbbff7aa1bae8c092638bca2d5c3ab65d8a8cbc39c20c3ec1ff85c967fb3849513";
+  sha512.doc = "215079eeb772dc4ea55d5e00945a757c877acf9ea56aebe5a8969564a3836f54ca406d502d73e93d92b131600fc77bd2342d36fa78300adc0b4d1dd7f5d0f423";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.2";
+};
+zxjafont = {
+  revision = 62864;
+  stripPrefix = 0;
+  sha512.run = "4afb6c3126c66c23a9a5b2ad1103289ab3f14c5a0d9bad7de209de3801e77f803e7a88d7440aa2f85d5aa6c23b6514585f263a95d6c3d68c232051880943a5c0";
+  sha512.doc = "598a13775cac68ae6f176bd01b609373a4033583a83ed42f7914b15a01776d40b0c7200258dd68563510b2a3c11ec29a25ab3b26477650b60652e7332ef3f131";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "1.3";
+};
+zxjatype = {
+  revision = 53500;
+  stripPrefix = 0;
+  sha512.run = "21eaace7188c9e61f5dd65f34e26b1ca16358e7396d44188ae17e8e01a58f38ac3be9f09f8f41923c257d089210d1fb7d841eada5c9a345cec42b934d257ef94";
+  sha512.doc = "0fccc73af66a05231cf8283920d65717600be4673329ed1f46b93a494d766aa9542deb1a56b5d23d6c0d6b93be98aa778234ddc2dcd9c0936542a45d057b6dc2";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "0.7";
+};
+zztex = {
+  revision = 55862;
+  stripPrefix = 0;
+  sha512.run = "eb325564ee9e001e0e5ff79b6e3cc9f22f5b9b100ef021552f54953802edbce1e4b1295ff4590832f959386db7a63aaf8e31dc2d61b38e5c8a140082ca423e83";
+  sha512.doc = "bd2a3a42b62da61db572058b4731161425545374584a575607f11bb2302aa2ce900b694aaf06562f4c9eb9046c80c4fbf5b50233f6d0526fac787c213070d542";
+  hasRunfiles = true;
+  license = [ "mit" ];
+  version = "17.7";
+};
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tikzit/default.nix b/nixpkgs/pkgs/tools/typesetting/tikzit/default.nix
new file mode 100644
index 000000000000..44c2fed0508a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tikzit/default.nix
@@ -0,0 +1,34 @@
+{ lib, mkDerivation, fetchFromGitHub, qmake, qttools, qtbase, poppler, flex, bison }:
+
+mkDerivation {
+  pname = "tikzit";
+  version = "2.1.6";
+
+  src = fetchFromGitHub {
+    owner = "tikzit";
+    repo = "tikzit";
+    rev = "v2.1.6";
+    sha256 = "0ba99pgv54pj1xvhrwn9db2w0v4h07vsjajcnhpa2smy88ypg32h";
+  };
+
+  nativeBuildInputs = [ qmake qttools flex bison ];
+  buildInputs = [ qtbase poppler ];
+
+  # src/data/tikzlexer.l:29:10: fatal error: tikzparser.parser.hpp: No such file or directory
+  enableParallelBuilding = false;
+
+  meta = with lib; {
+    description = "A graphical tool for rapidly creating graphs and diagrams using PGF/TikZ";
+    longDescription = ''
+      TikZiT is a simple GUI editor for graphs and string diagrams.
+      Its native file format is a subset of PGF/TikZ, which means TikZiT files
+      can be included directly in papers typeset using LaTeX.
+      For preview support the texlive package 'preview' has to be installed.
+    '';
+    homepage = "https://tikzit.github.io/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.iblech maintainers.mgttlinger ];
+    mainProgram = "tikzit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/typst-live/default.nix b/nixpkgs/pkgs/tools/typesetting/typst-live/default.nix
new file mode 100644
index 000000000000..8968adbb5e1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/typst-live/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, stdenv
+, darwin
+, makeWrapper
+, typst
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "typst-live";
+  version = "0.7.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-9GhrWhT0mYU2OOeoHGd5XY7BKO/S7cKTnURXi9dF+IU=";
+  };
+
+  cargoHash = "sha256-KGwmTXkY2nv5oWwjs5ZLz6u3bJ7YWJQPqOqJJNxKDkM=";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/typst-live \
+      --suffix PATH : ${lib.makeBinPath [ typst ]}
+  '';
+
+  meta = with lib; {
+    description = "Hot reloading for your typst files";
+    homepage = "https://github.com/ItsEthra/typst-live";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "typst-live";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/typstfmt/Cargo.lock b/nixpkgs/pkgs/tools/typesetting/typstfmt/Cargo.lock
new file mode 100644
index 000000000000..ecfb8d4030f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/typstfmt/Cargo.lock
@@ -0,0 +1,787 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "bstr"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "comemo"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf5705468fa80602ee6a5f9318306e6c428bffd53e43209a78bc05e6e667c6f4"
+dependencies = [
+ "comemo-macros",
+ "siphasher",
+]
+
+[[package]]
+name = "comemo-macros"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54af6ac68ada2d161fa9cc1ab52676228e340866d094d6542107e74b82acc095"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "confy"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e37668cb35145dcfaa1931a5f37fde375eeae8068b4c0d2f289da28a270b2d2c"
+dependencies = [
+ "directories",
+ "serde",
+ "thiserror",
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "directories"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "ecow"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d1990d053cf6edf3f030682dba3b0eb65ef01fabb2686072765d8a17d6728e8"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "getrandom"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "globmatch"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3755076379cc2b2bbf53855fe718e1eed3093cfb769ebf5d290f617fa9cc09a0"
+dependencies = [
+ "globset",
+ "log",
+ "walkdir",
+]
+
+[[package]]
+name = "globset"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+dependencies = [
+ "aho-corasick",
+ "bstr 1.8.0",
+ "log",
+ "regex-automata 0.4.3",
+ "regex-syntax",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "insta"
+version = "1.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc"
+dependencies = [
+ "console",
+ "lazy_static",
+ "linked-hash-map",
+ "similar",
+ "yaml-rust",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lexopt"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baff4b617f7df3d896f97fe922b64817f6cd9a756bb81d40f8883f2f66dcb401"
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "libredox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "redox_syscall",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+dependencies = [
+ "getrandom",
+ "libredox",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.3",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "similar"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597"
+dependencies = [
+ "bstr 0.2.17",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "similar-asserts"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e041bb827d1bfca18f213411d51b665309f1afb37a04a5d1464530e13779fc0f"
+dependencies = [
+ "console",
+ "similar",
+]
+
+[[package]]
+name = "siphasher"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54ac45299ccbd390721be55b412d41931911f654fa99e2cb8bfb57184b2061fe"
+
+[[package]]
+name = "smallvec"
+version = "1.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+
+[[package]]
+name = "syn"
+version = "2.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "nu-ansi-term",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "typst-syntax"
+version = "0.7.0"
+source = "git+https://github.com/typst/typst.git?tag=v0.7.0#da8367e189b02918a8fe1a98fd3059fd11a82cd9"
+dependencies = [
+ "comemo",
+ "ecow",
+ "once_cell",
+ "serde",
+ "tracing",
+ "unicode-ident",
+ "unicode-math-class",
+ "unicode-segmentation",
+ "unscanny",
+]
+
+[[package]]
+name = "typstfmt"
+version = "0.2.7"
+dependencies = [
+ "confy",
+ "lexopt",
+ "typstfmt_lib",
+]
+
+[[package]]
+name = "typstfmt_lib"
+version = "0.2.7"
+dependencies = [
+ "globmatch",
+ "insta",
+ "itertools",
+ "regex",
+ "serde",
+ "similar-asserts",
+ "toml 0.7.8",
+ "tracing",
+ "tracing-subscriber",
+ "typst-syntax",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-math-class"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d246cf599d5fae3c8d56e04b20eb519adb89a8af8d0b0fbcded369aa3647d65"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unscanny"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9df2af067a7953e9c3831320f35c1cc0600c30d44d9f7a12b01db1cd88d6b47"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "winnow"
+version = "0.5.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e87b8dfbe3baffbe687eef2e164e32286eff31a5ee16463ce03d991643ec94"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
diff --git a/nixpkgs/pkgs/tools/typesetting/typstfmt/default.nix b/nixpkgs/pkgs/tools/typesetting/typstfmt/default.nix
new file mode 100644
index 000000000000..2305998e94a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/typstfmt/default.nix
@@ -0,0 +1,29 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "typstfmt";
+  version = "0.2.7";
+
+  src = fetchFromGitHub {
+    owner = "astrale-sharp";
+    repo = "typstfmt";
+    rev = version;
+    hash = "sha256-LBYsTCjZ+U+lgd7Z3H1sBcWwseoHsuepPd66bWgfvhI=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "typst-syntax-0.7.0" = "sha256-yrtOmlFAKOqAmhCP7n0HQCOQpU3DWyms5foCdUb9QTg=";
+    };
+  };
+
+  meta = with lib; {
+    description = "A formatter for the Typst language";
+    homepage = "https://github.com/astrale-sharp/typstfmt";
+    changelog = "https://github.com/astrale-sharp/typstfmt/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda geri1701 ];
+    mainProgram = "typstfmt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/xmlroff/default.nix b/nixpkgs/pkgs/tools/typesetting/xmlroff/default.nix
new file mode 100644
index 000000000000..f1e7e2c3243f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/xmlroff/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook
+, gtk2
+, libxml2
+, libxslt
+, pango
+, perl
+, pkg-config
+, popt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xmlroff";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0dgp72094lx9i9gvg21pp8ak7bg39707rdf6wz011p9s6n6lrq5g";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [
+    libxml2
+    libxslt
+    pango
+    gtk2
+    popt
+  ];
+
+  sourceRoot = "${src.name}/xmlroff";
+
+  enableParallelBuilding = true;
+
+  configureScript = "./autogen.sh";
+
+  configureFlags = [
+    "--disable-gp"
+  ];
+
+  preBuild = ''
+    substituteInPlace tools/insert-file-as-string.pl --replace "/usr/bin/perl" "${perl}/bin/perl"
+    substituteInPlace Makefile --replace "docs" ""  # docs target wants to download from network
+  '';
+
+  meta = with lib; {
+    description = "XSL Formatter";
+    homepage = "http://xmlroff.org/";
+    platforms = platforms.unix;
+    license = licenses.bsd3;
+    mainProgram = "xmlroff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/xmlto/default.nix b/nixpkgs/pkgs/tools/typesetting/xmlto/default.nix
new file mode 100644
index 000000000000..09597be8540d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/xmlto/default.nix
@@ -0,0 +1,63 @@
+{ fetchurl, fetchpatch, lib, stdenv, libxml2, libxslt
+, docbook_xml_dtd_45, docbook_xsl, flex, w3m
+, bash, getopt, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "xmlto";
+  version = "0.0.28";
+  src = fetchurl {
+    url = "https://releases.pagure.org/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "0xhj8b2pwp4vhl9y16v3dpxpsakkflfamr191mprzsspg4xdyc0i";
+  };
+
+  # Note: These patches modify `xmlif/xmlif.l`, which requires `flex` to be rerun.
+  patches = [
+    # Fixes implicit `int` on `main`, which is an error with clang 16.
+    (fetchpatch {
+      url = "https://pagure.io/xmlto/c/8e34f087bf410bcc5fe445933d6ad9bae54f24b5.patch";
+      hash = "sha256-z5riDBZBVuFeBcjI++dAl3nTIgOPau4Gag0MJbYt+cc=";
+    })
+    # Fixes implicit `int` on `ifsense`, which is also an error with clang 16.
+    (fetchpatch {
+      url = "https://pagure.io/xmlto/c/1375e2df75530cd198bd16ac3de38e2b0d126276.patch";
+      hash = "sha256-fM6ZdTigrcC9cbXiKu6oa5Hs71mrREockB1wRlw6nDk=";
+    })
+  ];
+
+  postPatch = ''
+    patchShebangs xmlif/test/run-test
+
+    substituteInPlace "xmlto.in" \
+      --replace "/bin/bash" "${bash}/bin/bash"
+    substituteInPlace "xmlto.in" \
+      --replace "/usr/bin/locale" "$(type -P locale)"
+    substituteInPlace "xmlto.in" \
+      --replace "mktemp" "$(type -P mktemp)"
+  '';
+
+  # `libxml2' provides `xmllint', needed at build-time and run-time.
+  # `libxslt' provides `xsltproc', used by `xmlto' at run-time.
+  nativeBuildInputs = [ makeWrapper flex getopt ];
+  buildInputs = [ libxml2 libxslt docbook_xml_dtd_45 docbook_xsl ];
+
+  postInstall = ''
+    # `w3m' is needed for HTML to text conversions.
+    wrapProgram "$out/bin/xmlto" \
+       --prefix PATH : "${lib.makeBinPath [ libxslt libxml2 getopt w3m ]}"
+  '';
+
+  meta = {
+    description = "Front-end to an XSL toolchain";
+
+    longDescription = ''
+      xmlto is a front-end to an XSL toolchain.  It chooses an
+      appropriate stylesheet for the conversion you want and applies
+      it using an external XSL-T processor.  It also performs any
+      necessary post-processing.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+    homepage = "https://pagure.io/xmlto/";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/atomicparsley/default.nix b/nixpkgs/pkgs/tools/video/atomicparsley/default.nix
new file mode 100644
index 000000000000..28d55f13fe3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/atomicparsley/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, cmake, zlib, Cocoa }:
+
+stdenv.mkDerivation rec {
+  pname = "atomicparsley";
+  version = "20221229.172126.d813aa6";
+
+  src = fetchFromGitHub {
+    owner = "wez";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-3otyOpDdiltZ0SR1hImfIDBi53PKuAvh93yq1X3Xkmo=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ zlib ]
+                ++ lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D AtomicParsley $out/bin/AtomicParsley
+    runHook postInstall
+  '';
+
+  doCheck = true;
+
+  postPatch = ''
+    patchShebangs tests/test.sh
+  '';
+
+  # copying files so that we dont need to patch the test.sh
+  checkPhase = ''
+    (
+    cp AtomicParsley ../tests
+    cd ../tests
+    mkdir tests
+    mv *.mp4 tests
+    ./test.sh
+    )
+  '';
+
+  meta = with lib; {
+    description = "A CLI program for reading, parsing and setting metadata into MPEG-4 files";
+    homepage = "https://github.com/wez/atomicparsley";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pjones ];
+    mainProgram = "AtomicParsley";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/bento4/default.nix b/nixpkgs/pkgs/tools/video/bento4/default.nix
new file mode 100644
index 000000000000..54e5a22cc67d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/bento4/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub
+, cmake
+}:
+stdenv.mkDerivation rec {
+  pname = "bento4";
+  version = "1.6.0-641";
+
+  src = fetchFromGitHub {
+    owner = "axiomatic-systems";
+    repo = "Bento4";
+    rev = "v${version}";
+    hash = "sha256-Qy8D3cbCVHmLAaXtiF64rL2oRurXNCtd5Dsgt0W7WdY=";
+  };
+
+  patches = [
+    ./libap4.patch # include all libraries as shared, not static
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [ "-DBUILD_SHARED_LIBS=ON" ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{lib,bin}
+    find -iname '*${stdenv.hostPlatform.extensions.sharedLibrary}' -exec mv --target-directory="$out/lib" {} \;
+    find -maxdepth 1 -executable -type f -exec mv --target-directory="$out/bin" {} \;
+    runHook postInstall
+  '';
+
+  # Patch binaries to use our dylib
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    find $out/bin -maxdepth 1 -executable -type f -exec install_name_tool -change @rpath/libap4.dylib $out/lib/libap4.dylib {} \;
+  '';
+
+  meta = with lib; {
+    description = "Full-featured MP4 format and MPEG DASH library and tools";
+    homepage = "http://bento4.com";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ makefu ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/bento4/libap4.patch b/nixpkgs/pkgs/tools/video/bento4/libap4.patch
new file mode 100644
index 000000000000..ca2936003b84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/bento4/libap4.patch
@@ -0,0 +1,5 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -36 +36 @@ endif()
+-add_library(ap4 STATIC ${AP4_SOURCES})
++add_library(ap4 ${AP4_SOURCES})
diff --git a/nixpkgs/pkgs/tools/video/blackmagic-desktop-video/default.nix b/nixpkgs/pkgs/tools/video/blackmagic-desktop-video/default.nix
new file mode 100644
index 000000000000..435db1221eab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/blackmagic-desktop-video/default.nix
@@ -0,0 +1,106 @@
+{ stdenv
+, cacert
+, curl
+, runCommandLocal
+, lib
+, autoPatchelfHook
+, libcxx
+, libcxxabi
+, libGL
+, gcc7
+}:
+
+stdenv.mkDerivation rec {
+  pname = "blackmagic-desktop-video";
+  version = "12.5a15";
+
+  buildInputs = [
+    autoPatchelfHook
+    libcxx
+    libcxxabi
+    libGL
+    gcc7.cc.lib
+  ];
+
+  # yes, the below download function is an absolute mess.
+  # blame blackmagicdesign.
+  src = runCommandLocal "${pname}-${lib.versions.majorMinor version}-src.tar.gz"
+    rec {
+      outputHashMode = "recursive";
+      outputHashAlgo = "sha256";
+      outputHash = "sha256-ss7Ab5dy7cmXp9LBirFXMeGY4ZbYHvWnXmYvNeBq0RY=";
+
+      impureEnvVars = lib.fetchers.proxyImpureEnvVars;
+
+      nativeBuildInputs = [ curl ];
+
+      # ENV VARS
+      SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
+
+      # from the URL that the POST happens to, see browser console
+      DOWNLOADID = "fecacc0f9b2f4c2e8bf2863e9e26c8e1";
+      # from the URL the download page where you click the "only download" button is at
+      REFERID = "052d944af6744608b27da496dfc4396d";
+      SITEURL = "https://www.blackmagicdesign.com/api/register/us/download/${DOWNLOADID}";
+
+      USERAGENT = builtins.concatStringsSep " " [
+        "User-Agent: Mozilla/5.0 (X11; Linux ${stdenv.hostPlatform.linuxArch})"
+        "AppleWebKit/537.36 (KHTML, like Gecko)"
+        "Chrome/77.0.3865.75"
+        "Safari/537.36"
+      ];
+
+      REQJSON = builtins.toJSON {
+        "country" = "nl";
+        "downloadOnly" = true;
+        "platform" = "Linux";
+        "policy" = true;
+      };
+
+    } ''
+    RESOLVEURL=$(curl \
+      -s \
+      -H "$USERAGENT" \
+      -H 'Content-Type: application/json;charset=UTF-8' \
+      -H "Referer: https://www.blackmagicdesign.com/support/download/$REFERID/Linux" \
+      --data-ascii "$REQJSON" \
+      --compressed \
+      "$SITEURL")
+
+    curl \
+      --retry 3 --retry-delay 3 \
+      --compressed \
+      "$RESOLVEURL" \
+      > $out
+  '';
+
+  postUnpack = ''
+    tar xf Blackmagic_Desktop_Video_Linux_${lib.versions.majorMinor version}/other/${stdenv.hostPlatform.uname.processor}/desktopvideo-${version}-${stdenv.hostPlatform.uname.processor}.tar.gz
+    unpacked=$NIX_BUILD_TOP/desktopvideo-${version}-${stdenv.hostPlatform.uname.processor}
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,share/doc,lib/systemd/system}
+    cp -r $unpacked/usr/share/doc/desktopvideo $out/share/doc
+    cp $unpacked/usr/lib/*.so $out/lib
+    cp $unpacked/usr/lib/systemd/system/DesktopVideoHelper.service $out/lib/systemd/system
+    cp $unpacked/usr/lib/blackmagic/DesktopVideo/DesktopVideoHelper $out/bin/
+
+    substituteInPlace $out/lib/systemd/system/DesktopVideoHelper.service --replace "/usr/lib/blackmagic/DesktopVideo/DesktopVideoHelper" "$out/bin/DesktopVideoHelper"
+
+    runHook postInstall
+  '';
+
+  # i know this is ugly, but it's the cleanest way i found to tell the DesktopVideoHelper where to find its own library
+  appendRunpaths = [ "$ORIGIN/../lib" ];
+
+  meta = with lib; {
+    homepage = "https://www.blackmagicdesign.com/support/family/capture-and-playback";
+    maintainers = [ maintainers.hexchen ];
+    license = licenses.unfree;
+    description = "Supporting applications for Blackmagic Decklink. Doesn't include the desktop applications, only the helper required to make the driver work";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/dvgrab/default.nix b/nixpkgs/pkgs/tools/video/dvgrab/default.nix
new file mode 100644
index 000000000000..de5c5e906bf5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/dvgrab/default.nix
@@ -0,0 +1,41 @@
+{ fetchFromGitHub, lib, stdenv, libunwind, libraw1394, libjpeg, libiec61883, libdv
+, libavc1394, pkg-config, autoreconfHook }:
+
+stdenv.mkDerivation {
+  pname = "dvgrab";
+  version = "2016-05-16";
+
+  src = fetchFromGitHub {
+    # mirror of original project with some build fixes
+    owner = "ddennedy";
+    repo = "dvgrab";
+    rev = "e46042e0c7b3523b6854ee547b0534e8310b7460";
+    sha256 = "17qy76fjpzrbxm4pj0ljx5lbimxryv24fvr13jwkh24j85dxailn";
+  };
+
+  buildInputs = [
+    libunwind libraw1394 libjpeg libiec61883 libdv libavc1394
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook pkg-config
+  ];
+
+  meta = with lib; {
+    description = "Receive and store audio & video over IEEE1394";
+
+    longDescription = ''
+      dvgrab receives audio and video data from a digital camcorder via an
+      IEEE1394 (widely known as FireWire) or USB link and stores them into
+      one of several file formats. It features autosplit of long video
+      sequences, and supports saving the data as raw frames, AVI type 1,
+      AVI type 2, Quicktime DV, a series of JPEG stills or MPEG2-TS.
+    '';
+
+    homepage = "https://github.com/ddennedy/dvgrab"; # Formerly http://www.kinodv.org/
+
+    license = licenses.gpl2Plus;
+    platforms = platforms.gnu ++ platforms.linux;
+    mainProgram = "dvgrab";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/go2rtc/default.nix b/nixpkgs/pkgs/tools/video/go2rtc/default.nix
new file mode 100644
index 000000000000..8ee378d6c264
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/go2rtc/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "go2rtc";
+  version = "1.8.5";
+
+  src = fetchFromGitHub {
+    owner = "AlexxIT";
+    repo = "go2rtc";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-XG98CJZ9bnFfJL5DyhDon+j74cXXmxYb291PElqXXRY=";
+  };
+
+  vendorHash = "sha256-KEW3ykEZvL6y1VacDIqtHW9B2RLHlHC29aqJjkEnRqQ=";
+
+  buildFlagArrays = [
+    "-trimpath"
+  ];
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  doCheck = false; # tests fail
+
+  meta = with lib; {
+    description = "Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MJPEG, HomeKit, FFmpeg, etc.";
+    homepage = "https://github.com/AlexxIT/go2rtc";
+    changelog = "https://github.com/AlexxIT/go2rtc/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+    mainProgram = "go2rtc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/gopro/default.nix b/nixpkgs/pkgs/tools/video/gopro/default.nix
new file mode 100644
index 000000000000..7f234ae5247a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/gopro/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub
+, ffmpeg
+, imagemagick
+, makeWrapper
+, mplayer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gopro";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "KonradIT";
+    repo = "gopro-linux";
+    rev = version;
+    sha256 = "0sb9vpiadrq8g4ag828h8mvq01fg0306j0wjwkxdmwfqync1128l";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 gopro -t $out/bin
+    wrapProgram $out/bin/gopro \
+      --prefix PATH ":" "${lib.makeBinPath [ ffmpeg imagemagick mplayer ]}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Command line interface for processing media filmed on GoPro HERO 3, 4, 5, 6, and 7 cameras";
+    homepage = "https://github.com/KonradIT/gopro-linux";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jonringer ];
+    mainProgram = "gopro";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/harvid/default.nix b/nixpkgs/pkgs/tools/video/harvid/default.nix
new file mode 100644
index 000000000000..2860e5f22280
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/harvid/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ffmpeg_4, libjpeg, libpng, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "harvid";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "x42";
+    repo = "harvid";
+    rev = "v${version}";
+    sha256 = "sha256-qt6aep7iMF8/lnlT2wLqu6LkFDqzdfsGLZvrOlXttG8=";
+  };
+
+  patches = [
+    # Fix pending upstream inclusion to support parallel builds:
+    #   https://github.com/x42/harvid/pull/10
+    (fetchpatch {
+      name = "parallel-build.patch";
+      url = "https://github.com/x42/harvid/commit/a3f85c57ad2559558706d9b22989de36452704d9.patch";
+      sha256 = "sha256-0aBfM/4XEqM7C1nFw996IVwaeL0tNgMUQ1C3kblOobI=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ ffmpeg_4 libjpeg libpng ];
+
+  makeFlags = [ "DESTDIR=$(out)" "libdir=\"/lib\"" ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    mv $out/usr/local/bin/* $out/bin
+    mv $out/usr/local/share $out/
+    rm -r $out/usr
+  '';
+
+  meta = with lib; {
+    description =
+      "Decodes still images from movie files and serves them via HTTP";
+    longDescription = ''
+      harvid's intended use-case is to efficiently provide frame-accurate data
+      and act as second level cache for rendering the video-timeline in Ardour,
+      but it is not limited to that: it has applications for any task that
+      requires a high-performance frame-accurate online image extraction
+      processor.
+    '';
+    homepage = "http://x42.github.io/harvid";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mitchmindtree ];
+    mainProgram = "harvid";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/lux/default.nix b/nixpkgs/pkgs/tools/video/lux/default.nix
new file mode 100644
index 000000000000..fe81c15940e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/lux/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, ffmpeg
+}:
+
+buildGoModule rec {
+  pname = "lux";
+  version = "0.22.0";
+
+  src = fetchFromGitHub {
+    owner = "iawia002";
+    repo = "lux";
+    rev = "v${version}";
+    hash = "sha256-v74+Ykz9aro1x+9psg2LnuodKE2/pCw9knZop0etQOg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  vendorHash = "sha256-1VZFKDoSuSUmYw7g6SwB/dXnFaw7+cGHKfgT96HaI/o=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/iawia002/lux/app.version=v${version}"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/lux \
+      --prefix PATH : ${lib.makeBinPath [ ffmpeg ]}
+  '';
+
+  doCheck = false; # require network
+
+  meta = with lib; {
+    description = "Fast and simple video download library and CLI tool written in Go";
+    homepage = "https://github.com/iawia002/lux";
+    changelog = "https://github.com/iawia002/lux/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ galaxy ];
+    mainProgram = "lux";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/mjpegtools/c++-17-fixes.patch b/nixpkgs/pkgs/tools/video/mjpegtools/c++-17-fixes.patch
new file mode 100644
index 000000000000..018cc7e9beab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/mjpegtools/c++-17-fixes.patch
@@ -0,0 +1,44 @@
+diff -ur a/mplex/main.cpp b/mplex/main.cpp
+--- a/mplex/main.cpp	2021-09-05 02:14:13.029372000 -0400
++++ b/mplex/main.cpp	2023-09-23 08:47:07.683450627 -0400
+@@ -50,7 +50,7 @@
+ #include "multiplexor.hpp"
+ 
+ 
+-using std::auto_ptr;
++using std::unique_ptr;
+ 
+ 
+ /*************************************************************************
+@@ -138,7 +138,7 @@
+ void 
+ FileOutputStream::NextSegment( )
+ {
+-    auto_ptr<char> prev_filename_buf( new char[strlen(cur_filename)+1] );
++    unique_ptr<char> prev_filename_buf( new char[strlen(cur_filename)+1] );
+     char *prev_filename = prev_filename_buf.get();
+ 	fclose(strm);
+ 	++segment_num;
+diff -ur a/utils/fastintfns.h b/utils/fastintfns.h
+--- a/utils/fastintfns.h	2021-09-05 02:14:13.033372000 -0400
++++ b/utils/fastintfns.h	2023-09-23 08:44:40.147112973 -0400
+@@ -2,12 +2,17 @@
+  *
+  * WARNING: Assumes 2's complement arithmetic.
+  */
+-static inline int intmax( register int x, register int y )
++#ifdef __cplusplus
++#define REGISTER
++#else
++#define REGISTER register
++#endif
++static inline int intmax( REGISTER int x, REGISTER int y )
+ {
+ 	return x < y ? y : x;
+ }
+ 
+-static inline int intmin( register int x, register int y )
++static inline int intmin( REGISTER int x, REGISTER int y )
+ {
+ 	return x < y ? x : y;
+ }
diff --git a/nixpkgs/pkgs/tools/video/mjpegtools/default.nix b/nixpkgs/pkgs/tools/video/mjpegtools/default.nix
new file mode 100644
index 000000000000..f231d6ed184d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/mjpegtools/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, fetchurl, gtk2, libdv, libjpeg, libpng, libX11, pkg-config, SDL, SDL_gfx
+, withMinimal ? true
+}:
+
+# TODO:
+# - make dependencies optional
+# - libpng-apng as alternative to libpng?
+# - libXxf86dga support? checking for XF86DGAQueryExtension in -lXxf86dga... no
+
+stdenv.mkDerivation rec {
+  pname = "mjpegtools";
+  version = "2.2.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/mjpeg/mjpegtools-${version}.tar.gz";
+    sha256 = "sha256-sYBTbX2ZYLBeACOhl7ANyxAJKaSaq3HRnVX0obIQ9Jo=";
+  };
+
+  # Clang 16 defaults to C++17. `std::auto_ptr` has been removed from C++17, and the
+  # `register` type class specifier is no longer allowed.
+  patches = [ ./c++-17-fixes.patch ];
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libdv libjpeg libpng ]
+              ++ lib.optionals (!withMinimal) [ gtk2 libX11 SDL SDL_gfx ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString (!withMinimal) "-I${lib.getDev SDL}/include/SDL";
+
+  postPatch = ''
+    sed -i -e '/ARCHFLAGS=/s:=.*:=:' configure
+  '';
+
+  enableParallelBuilding = true;
+
+  outputs = [ "out" "lib" ];
+
+  meta = with lib; {
+    description = "A suite of programs for processing MPEG or MJPEG video";
+    homepage = "http://mjpeg.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/play-with-mpv/default.nix b/nixpkgs/pkgs/tools/video/play-with-mpv/default.nix
new file mode 100644
index 000000000000..16e645eb4455
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/play-with-mpv/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, fetchurl
+, youtube-dl
+}:
+
+let
+  install-freedesktop = python3Packages.buildPythonPackage rec {
+    pname = "install-freedesktop";
+    version = "0.1.2-1-g2673e8d";
+    format = "setuptools";
+
+    src = fetchurl {
+      name = "Thann-install_freedesktop-${version}.tar.gz";
+      url = "https://github.com/thann/install_freedesktop/tarball/2673e8da4a67bee0ffc52a0ea381a541b4becdd4";
+      hash = "sha256-O08G0iMGsF1DSyliXOHTIsOxDdJPBabNLXRhz5osDUk=";
+    };
+
+    # package has no tests
+    doCheck = false;
+  };
+in
+python3Packages.buildPythonApplication rec {
+  pname = "play-with-mpv";
+  version = "unstable-2021-04-02";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "thann";
+    repo = "play-with-mpv";
+    rev = "07a9c1dd57d9e16538991b13fd3e2ed54d6e3a2d";
+    hash = "sha256-ZtUFzgYGNa9+g2xDONW8B5bbsbXmyY3IeT1GQH0AVIw=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py --replace \
+      '"https://github.com/thann/install_freedesktop/tarball/master#egg=install_freedesktop-0.2.0"' \
+      '"file://${install-freedesktop}#egg=install_freedesktop-0.2.0"' \
+      --replace 'version = get_version()' 'version = "0.1.0.post9"'
+  '';
+
+  nativeBuildInputs = with python3Packages; [
+    install-freedesktop
+    wheel
+  ];
+
+  propagatedBuildInputs = [
+    youtube-dl
+  ];
+
+  # package has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Chrome extension and python server that allows you to play videos in webpages with MPV instead";
+    homepage = "https://github.com/Thann/play-with-mpv";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dawidsowa ];
+    mainProgram = "play-with-mpv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/rav1e/default.nix b/nixpkgs/pkgs/tools/video/rav1e/default.nix
new file mode 100644
index 000000000000..406276977c52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/rav1e/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, rust
+, stdenv
+, rustPlatform
+, fetchCrate
+, pkg-config
+, cargo-c
+, libgit2
+, nasm
+, zlib
+, libiconv
+, Security
+, buildPackages
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rav1e";
+  version = "0.7.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-Db7qb7HBAy6lniIiN07iEzURmbfNtuhmgJRv7OUagUM=";
+  };
+
+  cargoHash = "sha256-VyQ6n2kIJ7OjK6Xlf0T0GNsBvgESRETzKZDZzAn8ZuY=";
+
+  depsBuildBuild = [ pkg-config ];
+
+  nativeBuildInputs = [ cargo-c libgit2 nasm ];
+
+  buildInputs = [
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+    Security
+  ];
+
+  # Darwin uses `llvm-strip`, which results in link errors when using `-x` to strip the asm library
+  # and linking it with cctools ld64.
+  postPatch = lib.optionalString (stdenv.isDarwin && stdenv.isx86_64) ''
+    substituteInPlace build.rs --replace-fail '.arg("-x")' '.arg("-S")'
+  '';
+
+  checkType = "debug";
+
+  postBuild =  ''
+    ${rust.envVars.setEnv} cargo cbuild --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
+  '';
+
+  postInstall = ''
+    ${rust.envVars.setEnv} cargo cinstall --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
+  '';
+
+  meta = with lib; {
+    description = "The fastest and safest AV1 encoder";
+    longDescription = ''
+      rav1e is an AV1 video encoder. It is designed to eventually cover all use
+      cases, though in its current form it is most suitable for cases where
+      libaom (the reference encoder) is too slow.
+      Features: https://github.com/xiph/rav1e#features
+    '';
+    homepage = "https://github.com/xiph/rav1e";
+    changelog = "https://github.com/xiph/rav1e/releases/tag/v${version}";
+    license = licenses.bsd2;
+    maintainers = [ ];
+    mainProgram = "rav1e";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/recyclarr/default.nix b/nixpkgs/pkgs/tools/video/recyclarr/default.nix
new file mode 100644
index 000000000000..6db69039205c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/recyclarr/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, autoPatchelfHook
+, fixDarwinDylibNames
+, darwin
+, recyclarr
+, git
+, icu
+, testers
+, zlib
+}:
+let
+  os =
+    if stdenv.isDarwin
+    then "osx"
+    else "linux";
+
+  arch = {
+    x86_64-linux = "x64";
+    aarch64-linux = "arm64";
+    x86_64-darwin = "x64";
+    aarch64-darwin = "arm64";
+  }."${stdenv.hostPlatform.system}"
+    or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  hash = {
+    x64-linux_hash = "sha256-Skf3wY52B6KnWS8YurAL0b5Sdkvp4YYn3IvHrAKyvK8=";
+    arm64-linux_hash = "sha256-66OCz13eLyAfEC3kYUniqq+QhsHoZNBJieXmmsLG5eM=";
+    x64-osx_hash = "sha256-6cNpfcjwgfxZRlBnZQrZLMPaXDHEXSbS3Z/qcx1Z3HA=";
+    arm64-osx_hash = "sha256-OkM+LgqXOHzyzEWH6D3czH86Sncym9FpfTFaacp2aN0=";
+  }."${arch}-${os}_hash";
+
+  libPath = {
+    osx = "DYLD_LIBRARY_PATH : ${lib.makeLibraryPath [darwin.ICU zlib]}";
+    linux = "LD_LIBRARY_PATH : ${lib.makeLibraryPath [icu zlib]}";
+  }."${os}";
+
+in
+stdenv.mkDerivation rec {
+  pname = "recyclarr";
+  version = "6.0.2";
+
+  src = fetchurl {
+    url = "https://github.com/recyclarr/recyclarr/releases/download/v${version}/recyclarr-${os}-${arch}.tar.xz";
+    inherit hash;
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ makeWrapper ]
+    ++ lib.optional stdenv.isLinux autoPatchelfHook
+    ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
+  buildInputs = [ icu zlib ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 recyclarr -t $out/bin
+
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/recyclarr \
+      --prefix PATH : ${lib.makeBinPath [git]} \
+      --prefix ${libPath}
+  '';
+
+  dontStrip = true; # stripping messes up dotnet single-file deployment
+
+  passthru = {
+    updateScript = ./update.sh;
+    tests.version = testers.testVersion {
+      package = recyclarr;
+    };
+  };
+
+  meta = with lib; {
+    description = "Automatically sync TRaSH guides to your Sonarr and Radarr instances";
+    homepage = "https://recyclarr.dev/";
+    changelog = "https://github.com/recyclarr/recyclarr/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ josephst ];
+    mainProgram = "recyclarr";
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/recyclarr/update.sh b/nixpkgs/pkgs/tools/video/recyclarr/update.sh
new file mode 100755
index 000000000000..83942439cc28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/recyclarr/update.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=./. -i bash -p curl jq common-updater-scripts gnused nix coreutils
+#shellcheck shell=bash
+
+set -euo pipefail
+
+latestVersion=$(curl -s ${GITHUB_TOKEN:+ -H "Authorization: Bearer $GITHUB_TOKEN"} https://api.github.com/repos/recyclarr/recyclarr/releases?per_page=1 \
+    | jq -r ".[0].tag_name" \
+    | sed 's/^v//')
+currentVersion=$(nix-instantiate --eval -E "with import ./. {}; recyclarr.version or (lib.getVersion recyclarr)" | tr -d '"')
+
+if [[ "$currentVersion" == "$latestVersion" ]]; then
+    echo "recyclarr is up-to-date: $currentVersion"
+    exit 0
+fi
+
+function get_hash() {
+    local os=$1
+    local arch=$2
+    local version=$3
+
+    local pkg_hash=$(nix-prefetch-url --type sha256 \
+        https://github.com/recyclarr/recyclarr/releases/download/v"${version}"/recyclarr-"${os}"-"${arch}".tar.xz)
+    nix hash to-sri "sha256:$pkg_hash"
+}
+
+# aarch64-darwin
+# reset version first so that all platforms are always updated and in sync
+update-source-version recyclarr 0 "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" --system="aarch64-darwin"
+update-source-version recyclarr "$latestVersion" $(get_hash osx arm64 "$latestVersion") --system="aarch64-darwin"
+
+# x86_64-darwin
+# reset version first so that all platforms are always updated and in sync
+update-source-version recyclarr 0 "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" --system="x86_64-darwin"
+update-source-version recyclarr "$latestVersion" $(get_hash osx x64 "$latestVersion") --system="x86_64-darwin"
+
+# aarch64-linux
+# reset version first so that all platforms are always updated and in sync
+update-source-version recyclarr 0 "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" --system="aarch64-linux"
+update-source-version recyclarr "$latestVersion" $(get_hash linux arm64 "$latestVersion") --system="aarch64-linux"
+
+# x86_64-linux
+# reset version first so that all platforms are always updated and in sync
+update-source-version recyclarr 0 "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" --system="x86_64-linux"
+update-source-version recyclarr "$latestVersion" $(get_hash linux x64 "$latestVersion") --system="x86_64-linux"
+
diff --git a/nixpkgs/pkgs/tools/video/replay-sorcery/default.nix b/nixpkgs/pkgs/tools/video/replay-sorcery/default.nix
new file mode 100644
index 000000000000..7323644cdefb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/replay-sorcery/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, substituteAll
+, cmake
+, pkg-config
+, ffmpeg
+, libX11
+, drmSupport ? true, libdrm
+, notifySupport ? true, libnotify
+, pulseaudioSupport ? true, libpulseaudio
+}:
+
+stdenv.mkDerivation rec {
+  pname = "replay-sorcery";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "matanui159";
+    repo = "ReplaySorcery";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "sha256-HPkSOwfwcg4jLUzKfqdXgLu7mgD5H4wb9d2BrqWQeHc=";
+  };
+
+  patches = [
+    # Use global config generated by NixOS (/etc/replay-sorcery.conf)
+    # instead of $out/etc/replay-sorcery.conf.
+    ./fix-global-config.patch
+  ] ++ lib.optional notifySupport (substituteAll {
+    # Patch in libnotify if support is enabled. Can't use makeWrapper
+    # since it would break the security wrapper in the NixOS module.
+    src = ./hardcode-libnotify.patch;
+    inherit libnotify;
+  });
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [ ffmpeg libX11 ]
+  ++ lib.optional drmSupport libdrm
+  ++ lib.optional pulseaudioSupport libpulseaudio;
+
+  cmakeFlags = [
+    "-DRS_SYSTEMD_DIR=${placeholder "out"}/lib/systemd/user"
+
+    # SETUID & SETGID permissions required for hardware accelerated
+    # video capture can't be set during the build. Use the NixOS
+    # module if you want hardware accelerated video capture.
+    "-DRS_SETID=OFF"
+  ];
+
+  meta = with lib; {
+    description = "An open-source, instant-replay solution for Linux";
+    homepage = "https://github.com/matanui159/ReplaySorcery";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = platforms.linux;
+    mainProgram = "replay-sorcery";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/replay-sorcery/fix-global-config.patch b/nixpkgs/pkgs/tools/video/replay-sorcery/fix-global-config.patch
new file mode 100644
index 000000000000..4f30e2875cf7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/replay-sorcery/fix-global-config.patch
@@ -0,0 +1,13 @@
+diff --git a/src/rsbuild.h.in b/src/rsbuild.h.in
+index ff0a0f6..5529556 100644
+--- a/src/rsbuild.h.in
++++ b/src/rsbuild.h.in
+@@ -20,7 +20,7 @@
+ #ifndef RS_BUILD_H
+ #define RS_BUILD_H
+ 
+-#define RS_BUILD_GLOBAL_CONFIG "@CMAKE_INSTALL_PREFIX@/etc/replay-sorcery.conf"
++#define RS_BUILD_GLOBAL_CONFIG "/etc/replay-sorcery.conf"
+ #define RS_BUILD_LOCAL_CONFIG "%s/.config/replay-sorcery.conf"
+ 
+ #cmakedefine RS_BUILD_PTHREAD_FOUND
diff --git a/nixpkgs/pkgs/tools/video/replay-sorcery/hardcode-libnotify.patch b/nixpkgs/pkgs/tools/video/replay-sorcery/hardcode-libnotify.patch
new file mode 100644
index 000000000000..8ff42bec92fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/replay-sorcery/hardcode-libnotify.patch
@@ -0,0 +1,25 @@
+diff --git a/src/config.c b/src/config.c
+index 3af7455..12cb6b5 100644
+--- a/src/config.c
++++ b/src/config.c
+@@ -129,7 +129,7 @@ static const AVOption configOptions[] = {
+     CONFIG_CONST(alt, RS_CONFIG_KEYMOD_ALT, keyMods),
+     CONFIG_CONST(super, RS_CONFIG_KEYMOD_SUPER, keyMods),
+     CONFIG_STRING(outputFile, "~/Videos/ReplaySorcery_%F_%H-%M-%S.mp4"),
+-    CONFIG_STRING(outputCommand, "notify-send " RS_NAME " \"Saved replay as %s\""),
++    CONFIG_STRING(outputCommand, "@libnotify@/bin/notify-send " RS_NAME " \"Saved replay as %s\""),
+     {NULL}};
+ 
+ static const AVClass configClass = {
+diff --git a/sys/replay-sorcery.conf b/sys/replay-sorcery.conf
+index 5cd0aa6..c600e7f 100644
+--- a/sys/replay-sorcery.conf
++++ b/sys/replay-sorcery.conf
+@@ -123,5 +123,5 @@ outputFile = ~/Videos/ReplaySorcery_%F_%H-%M-%S.mp4
+ 
+ # A command to run when a video is successfully saved
+ # Possible values: a printf formatted command
+-# Default value: notify-send ReplaySorcery "Saved replay as %s"
+-outputCommand = notify-send ReplaySorcery "Saved replay as %s"
++# Default value: @libnotify@/bin/notify-send ReplaySorcery "Saved replay as %s"
++outputCommand = @libnotify@/bin/notify-send ReplaySorcery "Saved replay as %s"
diff --git a/nixpkgs/pkgs/tools/video/rtmpdump/default.nix b/nixpkgs/pkgs/tools/video/rtmpdump/default.nix
new file mode 100644
index 000000000000..b6293ffbc539
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/rtmpdump/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchgit
+, fetchpatch
+, zlib
+, gnutlsSupport ? false
+, gnutls
+, nettle
+, opensslSupport ? true
+, openssl
+}:
+
+assert (gnutlsSupport || opensslSupport);
+
+stdenv.mkDerivation {
+  pname = "rtmpdump";
+  version = "unstable-2021-02-19";
+
+  src = fetchgit {
+    url = "git://git.ffmpeg.org/rtmpdump";
+    # Currently the latest commit is used (a release has not been made since 2011, i.e. '2.4')
+    rev = "f1b83c10d8beb43fcc70a6e88cf4325499f25857";
+    sha256 = "0vchr0f0d5fi0zaa16jywva5db3x9dyws7clqaq32gwh5drbkvs0";
+  };
+
+  patches = [
+    # Fix build with OpenSSL 1.1
+    (fetchpatch {
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/media-video/rtmpdump/files/rtmpdump-openssl-1.1.patch?id=1e7bef484f96e7647f5f0911d3c8caa48131c33b";
+      sha256 = "1wds98pk8qr7shkfl8k49iirxiwd972h18w84bamiqln29wv6ql1";
+    })
+  ];
+
+  makeFlags = [
+    "prefix=$(out)"
+    "CROSS_COMPILE=${stdenv.cc.targetPrefix}"
+  ]
+    ++ lib.optional gnutlsSupport "CRYPTO=GNUTLS"
+    ++ lib.optional opensslSupport "CRYPTO=OPENSSL"
+    ++ lib.optional stdenv.isDarwin "SYS=darwin"
+    ++ lib.optional stdenv.cc.isClang "CC=clang";
+
+  propagatedBuildInputs = [ zlib ]
+    ++ lib.optionals gnutlsSupport [ gnutls nettle ]
+    ++ lib.optional opensslSupport openssl;
+
+  outputs = [ "out" "dev" ];
+
+  separateDebugInfo = true;
+
+  meta = with lib; {
+    description = "Toolkit for RTMP streams";
+    homepage = "https://rtmpdump.mplayerhq.hu/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ codyopel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/rwedid/default.nix b/nixpkgs/pkgs/tools/video/rwedid/default.nix
new file mode 100644
index 000000000000..238f1fd5189a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/rwedid/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, rustPlatform
+, fetchFromGitea
+, pkg-config
+, xz
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rwedid";
+  version = "0.3.2";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "ral";
+    repo = "rwedid";
+    rev = version;
+    hash = "sha256-lbZD/QLCgkD5OQZdn6oCjry9edMcJ+q9qGF7IbY36U4=";
+  };
+
+  cargoHash = "sha256-eY12p8pyUjSaoP4QKfVFwKQGdvFNG7GMAbFkFa8i05I=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    xz
+  ];
+
+  postInstall = ''
+    mkdir -p $out/etc/udev/rules.d
+    echo 'SUBSYSTEM=="i2c-dev",KERNEL=="i2c-[0-9]*", ATTRS{class}=="0x030000", TAG+="uaccess"' > $out/etc/udev/rules.d/60-rwedid.rules
+  '';
+
+  meta = with lib; {
+    description = "Read and write EDID data over an I2C bus";
+    longDescription = ''
+      To install udev rules, you also have to add `services.udev.packages = [ pkgs.rwedid ]` into your configuration.
+      Additionally you will also have to create the i2c group, on NixOS this can be done using `users.groups.i2c = {};`.
+      And you will have to load i2c-dev kernel module, for that add `boot.initrd.availableKernelModules = [ i2c-dev ] to your config.
+    '';
+    homepage = "https://codeberg.org/ral/rwedid";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ janik ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/svt-av1/default.nix b/nixpkgs/pkgs/tools/video/svt-av1/default.nix
new file mode 100644
index 000000000000..d40047510f40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/svt-av1/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, gitUpdater
+, cmake
+, nasm
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "svt-av1";
+  version = "1.8.0";
+
+  src = fetchFromGitLab {
+    owner = "AOMediaCodec";
+    repo = "SVT-AV1";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-JV65VuEPJBrADsGviBnE6EgZmbqJ4Z4qli6cAfUMmkw=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    nasm
+  ];
+
+  cmakeFlags = [
+    "-DSVT_AV1_LTO=ON"
+  ];
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/AOMediaCodec/SVT-AV1";
+    description = "AV1-compliant encoder/decoder library core";
+
+    longDescription = ''
+      The Scalable Video Technology for AV1 (SVT-AV1 Encoder and Decoder) is an
+      AV1-compliant encoder/decoder library core. The SVT-AV1 encoder
+      development is a work-in-progress targeting performance levels applicable
+      to both VOD and Live encoding / transcoding video applications. The
+      SVT-AV1 decoder implementation is targeting future codec research
+      activities.
+    '';
+
+    changelog = "https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/v${finalAttrs.version}/CHANGELOG.md";
+    license = with licenses; [ aom bsd3 ];
+    maintainers = with maintainers; [ Madouura ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/video/swfmill/default.nix b/nixpkgs/pkgs/tools/video/swfmill/default.nix
new file mode 100644
index 000000000000..8e6d0baf7e72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/swfmill/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl
+, pkg-config, libxslt, freetype, libpng, libxml2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "swfmill";
+  version = "0.3.6";
+
+  src = fetchurl {
+    url = "http://swfmill.org/releases/swfmill-${version}.tar.gz";
+    sha256 = "sha256-2yT2OWOVf67AK7FLi2HNr3CWd0+M/eudNXPi4ZIxVI4=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libxslt freetype libpng libxml2 ];
+
+  # fatal error: 'libxml/xpath.h' file not found
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I${libxml2.dev}/include/libxml2";
+
+  meta = {
+    description = "An xml2swf and swf2xml processor with import functionalities";
+    homepage = "http://swfmill.org";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    mainProgram = "swfmill";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/swftools/default.nix b/nixpkgs/pkgs/tools/video/swftools/default.nix
new file mode 100644
index 000000000000..c48d684d3fcc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/swftools/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, freetype, libjpeg, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "swftools";
+  version = "0.9.2";
+
+  src = fetchurl {
+    url = "http://www.swftools.org/${pname}-${version}.tar.gz";
+    sha256 = "1w81dyi81019a6jmnm5z7fzarswng27lg1d4k4d5llxzqszr2s5z";
+  };
+
+  patches = [ ./swftools.patch ];
+
+  buildInputs = [ freetype libjpeg zlib ];
+
+  meta = with lib; {
+    description = "Collection of SWF manipulation and creation utilities";
+    homepage = "http://www.swftools.org/about.html";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.koral ];
+    platforms = lib.platforms.unix;
+    knownVulnerabilities = [
+      "CVE-2017-10976"
+      "CVE-2017-11096"
+      "CVE-2017-11097"
+      "CVE-2017-11098"
+      "CVE-2017-11099"
+      "CVE-2017-11100"
+      "CVE-2017-11101"
+      "CVE-2017-16711"
+      "CVE-2017-16793"
+      "CVE-2017-16794"
+      "CVE-2017-16796"
+      "CVE-2017-16797"
+      "CVE-2017-16868"
+      "CVE-2017-16890"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/swftools/swftools.patch b/nixpkgs/pkgs/tools/video/swftools/swftools.patch
new file mode 100644
index 000000000000..c7eb89f9b3e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/swftools/swftools.patch
@@ -0,0 +1,17 @@
+--- a/swfs/Makefile.in.orig
++++ b/swfs/Makefile.in
+@@ -41,10 +41,10 @@ install:
+ 	$(INSTALL_DATA) ./PreLoaderTemplate.swf $(pkgdatadir)/swfs/PreLoaderTemplate.swf
+ 	$(INSTALL_DATA) ./tessel_loader.swf $(pkgdatadir)/swfs/tessel_loader.swf
+ 	$(INSTALL_DATA) ./swft_loader.swf $(pkgdatadir)/swfs/swft_loader.swf
+-	rm -f $(pkgdatadir)/swfs/default_viewer.swf -o -L $(pkgdatadir)/swfs/default_viewer.swf
+-	$(LN_S) $(pkgdatadir)/swfs/simple_viewer.swf $(pkgdatadir)/swfs/default_viewer.swf
+-	rm -f $(pkgdatadir)/swfs/default_loader.swf -o -L $(pkgdatadir)/swfs/default_loader.swf
+-	$(LN_S) $(pkgdatadir)/swfs/tessel_loader.swf $(pkgdatadir)/swfs/default_loader.swf
++	rm -f $(pkgdatadir)/swfs/default_viewer.swf # -o -L $(pkgdatadir)/swfs/default_viewer.swf
++	$(LN_S) $(pkgdatadir)/swfs/simple_viewer.swf $(pkgdatadir)/swfs/default_viewer.swf
++	rm -f $(pkgdatadir)/swfs/default_loader.swf # -o -L $(pkgdatadir)/swfs/default_loader.swf
++	$(LN_S) $(pkgdatadir)/swfs/tessel_loader.swf $(pkgdatadir)/swfs/default_loader.swf
+ 		
+ uninstall:
+ 	$(UNINSTALL_DATA) $(pkgdatadir)/swfs/simple_viewer.swf
diff --git a/nixpkgs/pkgs/tools/video/tsduck/default.nix b/nixpkgs/pkgs/tools/video/tsduck/default.nix
new file mode 100644
index 000000000000..bb4757a4cf7f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/tsduck/default.nix
@@ -0,0 +1,93 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, curl
+, jdk
+, libedit
+, srt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tsduck";
+  version = "3.31-2761";
+
+  src = fetchFromGitHub {
+    owner = "tsduck";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-268TKCh3naebbw+sOQ6d4N/zl7UEVtc3l3flFAYHDU4=";
+  };
+
+  buildInputs = [
+    curl
+    libedit
+    srt
+    jdk
+  ];
+
+  # remove tests which call out to https://tsduck.io/download/test/...
+  postPatch = ''
+    sed -i"" \
+      -e '/TSUNIT_TEST(testMasterPlaylist);/ d' \
+      -e '/TSUNIT_TEST(testMasterPlaylistWithAlternate);/ d' \
+      -e '/TSUNIT_TEST(testMediaPlaylist);/ d' \
+      src/utest/utestHLS.cpp
+
+    sed -i"" \
+      -e '/TSUNIT_TEST(testBetterSystemRandomGenerator);/ d' \
+      src/utest/utestSystemRandomGenerator.cpp
+
+    sed -i"" \
+      -e '/TSUNIT_ASSERT(request.downloadBinaryContent/ d' \
+      -e '/TSUNIT_ASSERT(!request.downloadBinaryContent/ d' \
+      -e '/TSUNIT_TEST(testGitHub);/ d' \
+      -e '/TSUNIT_TEST(testGoogle);/ d' \
+      -e '/TSUNIT_TEST(testNoRedirection);/ d' \
+      -e '/TSUNIT_TEST(testReadMeFile);/ d' \
+      src/utest/utestWebRequest.cpp
+
+    sed -i"" \
+      -e '/TSUNIT_TEST(testHomeDirectory);/ d' \
+      src/utest/utestSysUtils.cpp
+
+    sed -i"" \
+      -e '/TSUNIT_TEST(testIPv4Address);/ d' \
+      -e '/TSUNIT_TEST(testIPv4AddressConstructors);/ d' \
+      -e '/TSUNIT_TEST(testIPv4SocketAddressConstructors);/ d' \
+      -e '/TSUNIT_TEST(testTCPSocket);/ d' \
+      -e '/TSUNIT_TEST(testUDPSocket);/ d' \
+      src/utest/utestNetworking.cpp
+  '';
+
+  enableParallelBuilding = true;
+  makeFlags = [
+    "NODEKTEC=1"
+    "NOHIDES=1"
+    "NOPCSC=1"
+    "NORIST=1"
+    "NOVATEK=1"
+  ] ++ installFlags;
+
+  checkTarget = "test";
+  doCheck = true;
+
+  installFlags = [
+    "SYSROOT=${placeholder "out"}"
+    "SYSPREFIX=/"
+    "USRLIBDIR=/lib"
+  ];
+  installTargets = [
+    "install-tools"
+    "install-devel"
+  ];
+
+  meta = with lib; {
+    description = "The MPEG Transport Stream Toolkit";
+    homepage    = "https://github.com/tsduck/tsduck";
+    license     = licenses.bsd2;
+    maintainers = with maintainers; [ siriobalmelli ];
+    platforms   = platforms.all;
+    # never built on aarch64-darwin, x86_64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/untrunc-anthwlock/default.nix b/nixpkgs/pkgs/tools/video/untrunc-anthwlock/default.nix
new file mode 100644
index 000000000000..6ec52db7ebfd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/untrunc-anthwlock/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, ffmpeg_4, libui, unstableGitUpdater, wrapGAppsHook }:
+
+stdenv.mkDerivation {
+  pname = "untrunc-anthwlock";
+  version = "unstable-2021-11-21";
+
+  src = fetchFromGitHub {
+    owner = "anthwlock";
+    repo = "untrunc";
+    rev = "d72ec324fbc29eb00b53c7dafeef09f92308962b";
+    hash = "sha256-h+aFPhlbEM6EfCKbsJPelBY5ys7kv5K4rbK/HTHeEcw=";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+
+  buildInputs = [ ffmpeg_4 libui ];
+
+  buildPhase = ''
+    runHook preBuild
+    make IS_RELEASE=1 untrunc
+    make IS_RELEASE=1 untrunc-gui
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D -t $out/bin untrunc untrunc-gui
+    runHook postInstall
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    description = "Restore a truncated mp4/mov (improved version of ponchio/untrunc)";
+    homepage = "https://github.com/anthwlock/untrunc";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/vcsi/default.nix b/nixpkgs/pkgs/tools/video/vcsi/default.nix
new file mode 100644
index 000000000000..7db0fdd6962e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/vcsi/default.nix
@@ -0,0 +1,38 @@
+{ lib, python3Packages, fetchFromGitHub, ffmpeg }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "vcsi";
+  version = "7.0.16";
+
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "amietn";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-I0o6GX/TNMfU+rQtSqReblRplXPynPF6m2zg0YokmtI=";
+  };
+
+  nativeBuildInputs = [ python3Packages.poetry-core ];
+
+  propagatedBuildInputs = with python3Packages; [
+    numpy
+    pillow
+    jinja2
+    texttable
+    parsedatetime
+  ];
+
+  doCheck = false;
+  pythonImportsCheck = [ "vcsi" ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ ffmpeg ]}" ];
+
+  meta = with lib; {
+    description = "Create video contact sheets";
+    homepage = "https://github.com/amietn/vcsi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dandellion zopieux ];
+    mainProgram = "vcsi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/vncrec/default.nix b/nixpkgs/pkgs/tools/video/vncrec/default.nix
new file mode 100644
index 000000000000..3b3391284f07
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/vncrec/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libX11, xorgproto, imake, gccmakedep, libXt, libXmu
+, libXaw, libXext, libSM, libICE, libXpm, libXp
+}:
+
+stdenv.mkDerivation {
+  pname = "vncrec";
+  version = "0.2"; # version taken from Arch AUR
+
+  src = fetchurl {
+    url = "http://ronja.twibright.com/utils/vncrec-twibright.tgz";
+    sha256 = "1yp6r55fqpdhc8cgrgh9i0mzxmkls16pgf8vfcpng1axr7cigyhc";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [
+    libX11 xorgproto libXt libXmu libXaw
+    libXext libSM libICE libXpm libXp
+  ];
+
+  makeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "MANDIR=${placeholder "out"}/share/man"
+  ];
+  installTargets = [ "install" "install.man" ];
+
+  meta = {
+    description = "VNC recorder";
+    homepage = "http://ronja.twibright.com/utils/vncrec/";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    mainProgram = "vncrec";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/vrrtest/default.nix b/nixpkgs/pkgs/tools/video/vrrtest/default.nix
new file mode 100644
index 000000000000..7a8e93a4f373
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/vrrtest/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, zip
+, love
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "vrrtest";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "Nixola";
+    repo = "VRRTest";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-esyD+BpdnB8miUrIjV6P8Lho1xztmhLDnKxdQKW8GXc=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ zip ];
+
+  buildPhase = ''
+    runHook preBuild
+    zip -9 -r vrrtest.love .
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm444 -t $out/share/ vrrtest.love
+    makeWrapper ${love}/bin/love $out/bin/vrrtest \
+      --add-flags $out/share/vrrtest.love
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool testing variable refresh rates";
+    homepage = "https://github.com/Nixola/VRRTest";
+    license = licenses.zlib;
+    mainProgram = "vrrtest";
+    maintainers = with maintainers; [ justinlime ];
+    inherit (love.meta) platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/video/wtwitch/default.nix b/nixpkgs/pkgs/tools/video/wtwitch/default.nix
new file mode 100644
index 000000000000..0035e184540c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/wtwitch/default.nix
@@ -0,0 +1,72 @@
+{ bash
+, coreutils-prefixed
+, curl
+, fetchFromGitHub
+, gnused
+, gnugrep
+, installShellFiles
+, jq
+, lib
+, makeWrapper
+, mplayer
+, mpv
+, procps
+, scdoc
+, stdenv
+, streamlink
+, vlc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wtwitch";
+  version = "2.6.3";
+
+  src = fetchFromGitHub {
+    owner = "krathalan";
+    repo = pname;
+    rev = version;
+    hash = "sha256-2YLBuxGwGkav3zB2qMqM6yRXf7ZLqgULoJV4s5p+hSw=";
+  };
+
+  # hardcode SCRIPT_NAME because #150841
+  postPatch = ''
+    substituteInPlace src/wtwitch --replace 'readonly SCRIPT_NAME="''${0##*/}"' 'readonly SCRIPT_NAME="wtwitch"'
+  '';
+
+  buildPhase = ''
+    scdoc < src/wtwitch.1.scd > wtwitch.1
+  '';
+
+  nativeBuildInputs = [ scdoc installShellFiles makeWrapper ];
+
+  installPhase = ''
+    installManPage wtwitch.1
+    installShellCompletion --cmd wtwitch \
+      --bash src/wtwitch-completion.bash \
+      --zsh src/_wtwitch
+    install -Dm755 src/wtwitch $out/bin/wtwitch
+    wrapProgram $out/bin/wtwitch \
+      --set-default LANG en_US.UTF-8 \
+      --prefix PATH : ${lib.makeBinPath (lib.optionals stdenv.isLinux [ vlc ] ++ [
+        bash
+        coreutils-prefixed
+        curl
+        gnused
+        gnugrep
+        jq
+        mplayer
+        mpv
+        procps
+        streamlink
+      ])}
+  '';
+
+  meta = with lib; {
+    description = "Terminal user interface for Twitch";
+    homepage = "https://github.com/krathalan/wtwitch";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ urandom ];
+    platforms = platforms.all;
+    mainProgram = "wtwitch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/xjadeo/default.nix b/nixpkgs/pkgs/tools/video/xjadeo/default.nix
new file mode 100644
index 000000000000..3774e0a100bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/xjadeo/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, autoreconfHook, fetchFromGitHub, ffmpeg_4, freetype, libGLU
+, libjack2, liblo, libX11, libXv, pkg-config, portmidi, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "xjadeo";
+  version = "0.8.13";
+
+  src = fetchFromGitHub {
+    owner = "x42";
+    repo = "xjadeo";
+    rev = "v${version}";
+    sha256 = "sha256-CSq11hFNmo41VXOndBoPxRc9NNUUBtzfWx14DCUFieQ=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [
+    ffmpeg_4
+    libjack2
+    libX11
+    xorg.libXext
+    xorg.libXpm
+    # The following are recommended in the README, but are seemingly
+    # unnecessary for a successful build. That said, the result of including
+    # these in the build process is possibly required at runtime in some cases,
+    # but I've not the time to test thoroughly for these cases. Should
+    # consider investigating and splitting these into options in the future.
+    freetype
+    libGLU
+    liblo
+    libXv
+    portmidi
+  ];
+
+  meta = with lib; {
+    description = "The X Jack Video Monitor";
+    longDescription = ''
+      Xjadeo is a software video player that displays a video-clip in sync with
+      an external time source (MTC, LTC, JACK-transport). Xjadeo is useful in
+      soundtrack composition, video monitoring or any task that requires to
+      synchronizing movie frames with external events.
+    '';
+    homepage = "https://xjadeo.sourceforge.net";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mitchmindtree ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/yamdi/default.nix b/nixpkgs/pkgs/tools/video/yamdi/default.nix
new file mode 100644
index 000000000000..1bcfffb92903
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/yamdi/default.nix
@@ -0,0 +1,32 @@
+{
+  lib, stdenv,
+  fetchurl,
+}:
+
+stdenv.mkDerivation rec {
+  pname = "yamdi";
+  version = "1.9";
+
+  # Source repo is also available here:
+  # https://github.com/ioppermann/yamdi
+  src = fetchurl {
+    url = "mirror://sourceforge/yamdi/yamdi-${version}.tar.gz";
+    sha256 = "4a6630f27f6c22bcd95982bf3357747d19f40bd98297a569e9c77468b756f715";
+  };
+
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    install -D {,$out/bin/}yamdi
+    install -D {,$out/share/man/}man1/yamdi.1
+  '';
+
+  meta = with lib; {
+    description = "Yet Another MetaData Injector for FLV";
+    homepage = "https://yamdi.sourceforge.net/";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = [ maintainers.ryanartecona ];
+    mainProgram = "yamdi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/yaydl/default.nix b/nixpkgs/pkgs/tools/video/yaydl/default.nix
new file mode 100644
index 000000000000..7dea97bf649e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/yaydl/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, makeWrapper
+, openssl
+, ffmpeg
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "yaydl";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "dertuxmalwieder";
+    repo = pname;
+    rev = "release-${version}";
+    sha256 = "sha256-JwyWWqbUNZyH6gymeScb9tMZoPvn/Igz9iW2pp0XvEI=";
+  };
+
+  cargoSha256 = "sha256-jmqO0UvU6s+E5r6VFFjOvSe8oiLiTG5rPNHzoHVftWo=";
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    wrapProgram $out/bin/yaydl \
+      --prefix PATH : ${lib.makeBinPath [ ffmpeg ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://code.rosaelefanten.org/yaydl";
+    description = "Yet another youtube down loader";
+    license = licenses.cddl;
+    maintainers = with maintainers; [];
+    mainProgram = "yaydl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/alpine-make-vm-image/default.nix b/nixpkgs/pkgs/tools/virtualization/alpine-make-vm-image/default.nix
new file mode 100644
index 000000000000..bb9679e061db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/alpine-make-vm-image/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper
+, apk-tools, coreutils, dosfstools, e2fsprogs, findutils, gnugrep, gnused, kmod, qemu-utils
+, rsync, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "alpine-make-vm-image";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "alpinelinux";
+    repo = "alpine-make-vm-image";
+    rev = "v${version}";
+    sha256 = "sha256-ilXoee19Wp/tB4f/0c7vWki+dnEPYp4f/IKzkGwxdbU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/alpine-make-vm-image --set PATH ${lib.makeBinPath [
+      apk-tools coreutils dosfstools e2fsprogs findutils gnugrep gnused kmod qemu-utils
+      rsync util-linux
+    ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/alpinelinux/alpine-make-vm-image";
+    description = "Make customized Alpine Linux disk image for virtual machines";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wegank ];
+    platforms = platforms.unix;
+    mainProgram = "alpine-make-vm-image";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/amazon-ecs-cli/default.nix b/nixpkgs/pkgs/tools/virtualization/amazon-ecs-cli/default.nix
new file mode 100644
index 000000000000..16b43012e260
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/amazon-ecs-cli/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "amazon-ecs-cli";
+  version = "1.21.0";
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        url = "https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-v${version}";
+        sha256 = "sEHwhirU2EYwtBRegiIvN4yr7VKtmy7e6xx5gZOkuY0=";
+      }
+    else if stdenv.hostPlatform.system == "x86_64-darwin" then
+      fetchurl {
+        url = "https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-darwin-amd64-v${version}";
+        sha256 = "1viala49sifpcmgn3jw24h5bkrlm4ffadjiqagbxj3lr0r78i9nm";
+      }
+    else throw "Architecture not supported";
+
+  dontUnpack = true;
+
+  installPhase =
+    ''
+      mkdir -p $out/bin
+      cp $src $out/bin/ecs-cli
+      chmod +x $out/bin/ecs-cli
+    '';  # */
+
+  meta = with lib; {
+    homepage = "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI.html";
+    description = "The Amazon ECS command line interface";
+    longDescription = "The Amazon Elastic Container Service (Amazon ECS) command line interface (CLI) provides high-level commands to simplify creating, updating, and monitoring clusters and tasks from a local development environment.";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Scriptkiddi ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    mainProgram = "ecs-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/awsebcli/default.nix b/nixpkgs/pkgs/tools/virtualization/awsebcli/default.nix
new file mode 100644
index 000000000000..594b7a30b2ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/awsebcli/default.nix
@@ -0,0 +1,98 @@
+{ lib, python3, fetchFromGitHub, glibcLocales, git }:
+let
+  changeVersion = overrideFunc: version: hash: overrideFunc (oldAttrs: rec {
+    inherit version;
+    src = oldAttrs.src.override {
+      inherit version hash;
+    };
+  });
+
+  localPython = python3.override {
+    self = localPython;
+    packageOverrides = self: super: {
+      cement = changeVersion super.cement.overridePythonAttrs "2.8.2" "sha256-h2XtBSwGHXTk0Bia3cM9Jo3lRMohmyWdeXdB9yXkItI=";
+    };
+  };
+in
+with localPython.pkgs; buildPythonApplication rec {
+  pname = "awsebcli";
+  version = "3.20.10";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = "aws-elastic-beanstalk-cli";
+    rev = "refs/tags/${version}";
+    hash = "sha256-4JZx0iTMyrPHbuS3zlhpiWnenAQO5eSBJbPHUizLhYo=";
+  };
+
+  postPatch = ''
+    # https://github.com/aws/aws-elastic-beanstalk-cli/pull/469
+    substituteInPlace setup.py --replace "scripts=['bin/eb']," ""
+  '';
+
+  nativeBuildInputs = [
+    pythonRelaxDepsHook
+  ];
+
+  buildInputs = [
+    glibcLocales
+  ];
+
+  propagatedBuildInputs = [
+    blessed
+    botocore
+    cement
+    colorama
+    pathspec
+    pyyaml
+    future
+    requests
+    semantic-version
+    setuptools
+    tabulate
+    termcolor
+    websocket-client
+  ];
+
+  pythonRelaxDeps = [
+    "botocore"
+    "colorama"
+    "pathspec"
+    "PyYAML"
+    "six"
+    "termcolor"
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    pytest-socket
+    mock
+    git
+  ];
+
+  pytestFlagsArray = [
+    "tests/unit"
+  ];
+
+  disabledTests = [
+    # Needs docker installed to run.
+    "test_local_run"
+    "test_local_run__with_arguments"
+
+    # Needs access to the user's ~/.ssh directory.
+    "test_generate_and_upload_keypair__exit_code_0"
+    "test_generate_and_upload_keypair__exit_code_1"
+    "test_generate_and_upload_keypair__exit_code_is_other_than_1_and_0"
+    "test_generate_and_upload_keypair__ssh_keygen_not_present"
+  ];
+
+  meta = with lib; {
+    homepage = "https://aws.amazon.com/elasticbeanstalk/";
+    description = "A command line interface for Elastic Beanstalk";
+    changelog = "https://github.com/aws/aws-elastic-beanstalk-cli/blob/${version}/CHANGES.rst";
+    maintainers = with maintainers; [ eqyiel kirillrdy ];
+    license = licenses.asl20;
+    mainProgram = "eb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/cloud-init/0001-add-nixos-support.patch b/nixpkgs/pkgs/tools/virtualization/cloud-init/0001-add-nixos-support.patch
new file mode 100644
index 000000000000..57fcef6fe661
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/cloud-init/0001-add-nixos-support.patch
@@ -0,0 +1,127 @@
+diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py
+index 79e26235..bdc32c52 100644
+--- a/cloudinit/distros/__init__.py
++++ b/cloudinit/distros/__init__.py
+@@ -91,6 +91,7 @@ OSFAMILIES = {
+     ],
+     "openeuler": ["openeuler"],
+     "OpenCloudOS": ["OpenCloudOS", "TencentOS"],
++    "nixos": ["nixos"],
+ }
+ 
+ LOG = logging.getLogger(__name__)
+diff --git a/cloudinit/distros/nixos.py b/cloudinit/distros/nixos.py
+new file mode 100644
+index 00000000..67c049b8
+--- /dev/null
++++ b/cloudinit/distros/nixos.py
+@@ -0,0 +1,109 @@
++# vi: ts=4 expandtab
++#
++#    Copyright (C) 2012 Canonical Ltd.
++#    Copyright (C) 2012 Hewlett-Packard Development Company, L.P.
++#    Copyright (C) 2012 Yahoo! Inc.
++#
++#    Author: Scott Moser <scott.moser@canonical.com>
++#    Author: Juerg Haefliger <juerg.haefliger@hp.com>
++#    Author: Joshua Harlow <harlowja@yahoo-inc.com>
++#
++#    This program is free software: you can redistribute it and/or modify
++#    it under the terms of the GNU General Public License version 3, as
++#    published by the Free Software Foundation.
++#
++#    This program is distributed in the hope that it will be useful,
++#    but WITHOUT ANY WARRANTY; without even the implied warranty of
++#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++#    GNU General Public License for more details.
++#
++#    You should have received a copy of the GNU General Public License
++#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++import logging
++import os
++
++from cloudinit import distros
++from cloudinit import helpers
++from cloudinit import util
++from cloudinit import atomic_helper
++
++from cloudinit.distros.parsers.hostname import HostnameConf
++from cloudinit.net import dhcp
++
++LOG = logging.getLogger(__name__)
++
++class Distro(distros.Distro):
++
++    def __init__(self, name, cfg, paths):
++        distros.Distro.__init__(self, name, cfg, paths)
++        # This will be used to restrict certain
++        # calls from repeatly happening (when they
++        # should only happen say once per instance...)
++        self._runner = helpers.Runners(paths)
++        self.usr_lib_exec = os.path.join(os.path.dirname(__file__),
++                                         "../../../../../libexec")
++        self.osfamily = 'nixos'
++        self.dhcp_client_priority = [
++            dhcp.Udhcpc,
++            dhcp.IscDhclient,
++            dhcp.Dhcpcd,
++        ]
++
++    def _select_hostname(self, hostname, fqdn):
++        # Prefer the short hostname over the long
++        # fully qualified domain name
++        if not hostname:
++            return fqdn
++        return hostname
++
++    def _write_hostname(self, your_hostname, out_fn):
++        conf = None
++        try:
++            # Try to update the previous one
++            # so lets see if we can read it first.
++            conf = self._read_hostname_conf(out_fn)
++        except IOError:
++            pass
++        if not conf:
++            conf = HostnameConf('')
++        conf.set_hostname(your_hostname)
++        atomic_helper.write_file(out_fn, str(conf).encode("utf-8"))
++
++    def _read_system_hostname(self):
++        sys_hostname = self._read_hostname(self.hostname_conf_fn)
++        return (self.hostname_conf_fn, sys_hostname)
++
++    def _read_hostname_conf(self, filename):
++        conf = HostnameConf(util.load_file(filename))
++        conf.parse()
++        return conf
++
++    def _read_hostname(self, filename, default=None):
++        hostname = None
++        try:
++            conf = self._read_hostname_conf(filename)
++            hostname = conf.hostname
++        except IOError:
++            pass
++        if not hostname:
++            return default
++        return hostname
++
++    def _write_network(self, settings):
++        raise NotImplementedError()
++
++    def apply_locale(self, locale, out_fn=None):
++        raise NotImplementedError()
++
++    def install_packages(self, pkglist):
++        raise NotImplementedError()
++
++    def package_command(self, command, args=None, pkgs=None):
++        pass
++
++    def set_timezone(self, tz):
++        pass
++
++    def update_package_sources(self):
++        pass
diff --git a/nixpkgs/pkgs/tools/virtualization/cloud-init/default.nix b/nixpkgs/pkgs/tools/virtualization/cloud-init/default.nix
new file mode 100644
index 000000000000..2bbdf2104954
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/cloud-init/default.nix
@@ -0,0 +1,139 @@
+{ lib
+, nixosTests
+, buildPythonApplication
+, cloud-utils
+, dmidecode
+, fetchFromGitHub
+, iproute2
+, openssh
+, python3
+, shadow
+, systemd
+, coreutils
+, gitUpdater
+, busybox
+, procps
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cloud-init";
+  version = "23.4.3";
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "canonical";
+    repo = "cloud-init";
+    rev = "refs/tags/${version}";
+    hash = "sha256-oYZr0Zvo6hn9sWtgSAGgfK2stHO247f0WUbzIIWUP18=";
+  };
+
+  patches = [
+    ./0001-add-nixos-support.patch
+  ];
+
+  prePatch = ''
+    substituteInPlace setup.py \
+      --replace /lib/systemd $out/lib/systemd
+
+    substituteInPlace cloudinit/net/networkd.py \
+      --replace '["/usr/sbin", "/bin"]' '["/usr/sbin", "/bin", "${iproute2}/bin", "${systemd}/bin"]'
+
+    substituteInPlace tests/unittests/test_net_activators.py \
+      --replace '["/usr/sbin", "/bin"]' \
+        '["/usr/sbin", "/bin", "${iproute2}/bin", "${systemd}/bin"]'
+
+    substituteInPlace tests/unittests/cmd/test_clean.py \
+      --replace "/bin/bash" "/bin/sh"
+  '';
+
+  postInstall = ''
+    install -D -m755 ./tools/write-ssh-key-fingerprints $out/libexec/write-ssh-key-fingerprints
+    for i in $out/libexec/*; do
+      wrapProgram $i --prefix PATH : "${lib.makeBinPath [ openssh ]}"
+    done
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    configobj
+    jinja2
+    jsonpatch
+    jsonschema
+    netifaces
+    oauthlib
+    pyserial
+    pyyaml
+    requests
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+    httpretty
+    dmidecode
+    # needed for tests; at runtime we rather want the setuid wrapper
+    passlib
+    shadow
+    responses
+    pytest-mock
+    coreutils
+    procps
+  ];
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ dmidecode cloud-utils.guest busybox ]}/bin"
+  ];
+
+  disabledTests = [
+    # tries to create /var
+    "test_dhclient_run_with_tmpdir"
+    "test_dhcp_client_failover"
+    # clears path and fails because mkdir is not found
+    "test_path_env_gets_set_from_main"
+    # fails to find cat
+    "test_subp_combined_stderr_stdout"
+    # tries to read from /etc/ca-certificates.conf while inside the sandbox
+    "test_handler_ca_certs"
+    "TestRemoveDefaultCaCerts"
+    # Doesn't work in the sandbox
+    "TestEphemeralDhcpNoNetworkSetup"
+    "TestHasURLConnectivity"
+    "TestReadFileOrUrl"
+    "TestConsumeUserDataHttp"
+    # Chef Omnibus
+    "TestInstallChefOmnibus"
+    # https://github.com/canonical/cloud-init/pull/893
+    "TestGetPackageMirrorInfo"
+    # Disable failing VMware and PuppetAio tests
+    "test_get_data_iso9660_with_network_config"
+    "test_get_data_vmware_guestinfo_with_network_config"
+    "test_get_host_info"
+    "test_no_data_access_method"
+    "test_install_with_collection"
+    "test_install_with_custom_url"
+    "test_install_with_default_arguments"
+    "test_install_with_no_cleanup"
+    "test_install_with_version"
+  ];
+
+  preCheck = ''
+    # TestTempUtils.test_mkdtemp_default_non_root does not like TMPDIR=/build
+    export TMPDIR=/tmp
+  '';
+
+  pythonImportsCheck = [
+    "cloudinit"
+  ];
+
+  passthru = {
+    tests = { inherit (nixosTests) cloud-init cloud-init-hostname; };
+    updateScript = gitUpdater { ignoredVersions = ".ubuntu.*"; };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/canonical/cloud-init";
+    description = "Provides configuration and customization of cloud instance";
+    changelog = "https://github.com/canonical/cloud-init/raw/${version}/ChangeLog";
+    license = with licenses; [ asl20 gpl3Plus ];
+    maintainers = with maintainers; [ illustris jfroche ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/cloudmonkey/default.nix b/nixpkgs/pkgs/tools/virtualization/cloudmonkey/default.nix
new file mode 100644
index 000000000000..b7a9ec918cb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/cloudmonkey/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "cloudmonkey";
+  version = "6.3.0";
+
+  src = fetchFromGitHub {
+    owner = "apache";
+    repo = "cloudstack-cloudmonkey";
+    rev = version;
+    sha256 = "sha256-FoouZ2udtZ68W5p32Svr8yAn0oBdWMupn1LEzqY04Oc=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "CLI for Apache CloudStack";
+    homepage = "https://github.com/apache/cloudstack-cloudmonkey";
+    license = [ licenses.asl20 ];
+    maintainers = [ maintainers.womfoo ];
+    mainProgram = "cloudstack-cloudmonkey";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/cri-tools/default.nix b/nixpkgs/pkgs/tools/virtualization/cri-tools/default.nix
new file mode 100644
index 000000000000..70991742e789
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/cri-tools/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "cri-tools";
+  version = "1.29.0";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-64vjN0tm6P+nXjrNPeTviXOQdibuH7YbQm/LjYLxatM=";
+  };
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildPhase = ''
+    runHook preBuild
+    make binaries VERSION=${version}
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    make install BINDIR=$out/bin
+
+    for shell in bash fish zsh; do
+      $out/bin/crictl completion $shell > crictl.$shell
+      installShellCompletion crictl.$shell
+    done
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "CLI and validation tools for Kubelet Container Runtime Interface (CRI)";
+    homepage = "https://github.com/kubernetes-sigs/cri-tools";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ] ++ teams.podman.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/distrobuilder/default.nix b/nixpkgs/pkgs/tools/virtualization/distrobuilder/default.nix
new file mode 100644
index 000000000000..da2f1a909156
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/distrobuilder/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, pkg-config
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, gnupg
+, gnutar
+, squashfsTools
+, debootstrap
+, callPackage
+, nixosTests
+}:
+
+let
+  bins = [
+    coreutils
+    gnupg
+    gnutar
+    squashfsTools
+    debootstrap
+  ];
+in
+buildGoModule rec {
+  pname = "distrobuilder";
+  version = "3.0";
+
+  vendorHash = "sha256-pFrEkZnrcx0d3oM1klQrNHH+MiLvO4V1uFQdE0kXUqM=";
+
+  src = fetchFromGitHub {
+    owner = "lxc";
+    repo = "distrobuilder";
+    rev = "refs/tags/distrobuilder-${version}";
+    sha256 = "sha256-JfME9VaqaQnrhnzhSLGUy9uU+tki1hXdnwqBUD/5XH0=";
+    fetchSubmodules = false;
+  };
+
+  buildInputs = bins;
+
+
+  # tests require a local keyserver (mkg20001/nixpkgs branch distrobuilder-with-tests) but gpg is currently broken in tests
+  doCheck = false;
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ] ++ bins;
+
+  postInstall = ''
+    wrapProgram $out/bin/distrobuilder --prefix PATH ":" ${lib.makeBinPath bins}
+  '';
+
+  passthru = {
+    tests.incus = nixosTests.incus.container;
+
+    generator = callPackage ./generator.nix { inherit src version; };
+  };
+
+  meta = {
+    description = "System container image builder for LXC and LXD";
+    homepage = "https://github.com/lxc/distrobuilder";
+    license = lib.licenses.asl20;
+    maintainers = lib.teams.lxc.members;
+    platforms = lib.platforms.linux;
+    mainProgram = "distrobuilder";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/distrobuilder/generator.nix b/nixpkgs/pkgs/tools/virtualization/distrobuilder/generator.nix
new file mode 100644
index 000000000000..e514a7df2e08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/distrobuilder/generator.nix
@@ -0,0 +1,19 @@
+{ stdenvNoCC, lib, src, version, makeWrapper, coreutils, findutils, gnugrep, systemd }:
+
+stdenvNoCC.mkDerivation {
+  name = "distrobuilder-nixos-generator";
+
+  inherit src version;
+
+  patches = [
+    ./nixos-generator.patch
+  ];
+
+  dontBuild = true;
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -D -m 0555 distrobuilder/lxc.generator $out/lib/systemd/system-generators/lxc
+    wrapProgram $out/lib/systemd/system-generators/lxc --prefix PATH : ${lib.makeBinPath [coreutils findutils gnugrep systemd]}:${systemd}/lib/systemd
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/distrobuilder/nixos-generator.patch b/nixpkgs/pkgs/tools/virtualization/distrobuilder/nixos-generator.patch
new file mode 100644
index 000000000000..6194f33e1918
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/distrobuilder/nixos-generator.patch
@@ -0,0 +1,113 @@
+diff --git a/distrobuilder/lxc.generator b/distrobuilder/lxc.generator
+index 0ad81d1..69dbfe7 100644
+--- a/distrobuilder/lxc.generator
++++ b/distrobuilder/lxc.generator
+@@ -25,16 +25,6 @@ is_incus_vm() {
+ 	[ -e /dev/virtio-ports/org.linuxcontainers.incus ]
+ }
+ 
+-# is_in_path succeeds if the given file exists in on of the paths
+-is_in_path() {
+-	# Don't use $PATH as that may not include all relevant paths
+-	for path in /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin; do
+-		[ -e "${path}/$1" ] && return 0
+-	done
+-
+-	return 1
+-}
+-
+ ## Fix functions
+ # fix_ro_paths avoids udevd issues with /sys and /proc being writable
+ fix_ro_paths() {
+@@ -45,35 +35,6 @@ BindReadOnlyPaths=/sys /proc
+ EOF
+ }
+ 
+-# fix_nm_link_state forces the network interface to a DOWN state ahead of NetworkManager starting up
+-fix_nm_link_state() {
+-	[ -e "/sys/class/net/$1" ] || return 0
+-	ip_path=
+-	if [ -f /sbin/ip ]; then
+-		ip_path=/sbin/ip
+-	elif [ -f /bin/ip ]; then
+-		ip_path=/bin/ip
+-	else
+-		return 0
+-	fi
+-	cat <<-EOF > /run/systemd/system/network-device-down.service
+-[Unit]
+-Description=Turn off network device
+-Before=NetworkManager.service
+-Before=systemd-networkd.service
+-[Service]
+-# do not turn off if there is a default route to 169.254.0.1, i.e. the device is a routed nic
+-ExecCondition=/bin/sh -c '! /usr/bin/grep -qs 00000000.0100FEA9 /proc/net/route'
+-ExecStart=-${ip_path} link set $1 down
+-Type=oneshot
+-RemainAfterExit=true
+-[Install]
+-WantedBy=default.target
+-EOF
+-	mkdir -p /run/systemd/system/default.target.wants
+-	ln -sf /run/systemd/system/network-device-down.service /run/systemd/system/default.target.wants/network-device-down.service
+-}
+-
+ # fix_systemd_override_unit generates a unit specific override
+ fix_systemd_override_unit() {
+ 	dropin_dir="/run/systemd/${1}.d"
+@@ -112,16 +73,7 @@ fix_systemd_mask() {
+ # fix_systemd_udev_trigger overrides the systemd-udev-trigger.service to match the latest version
+ # of the file which uses "ExecStart=-" instead of "ExecStart=".
+ fix_systemd_udev_trigger() {
+-	cmd=
+-	if [ -f /usr/bin/udevadm ]; then
+-		cmd=/usr/bin/udevadm
+-	elif [ -f /sbin/udevadm ]; then
+-		cmd=/sbin/udevadm
+-	elif [ -f /bin/udevadm ]; then
+-		cmd=/bin/udevadm
+-	else
+-		return 0
+-	fi
++	cmd=udevadm
+ 
+ 	mkdir -p /run/systemd/system/systemd-udev-trigger.service.d
+ 	cat <<-EOF > /run/systemd/system/systemd-udev-trigger.service.d/zzz-lxc-override.conf
+@@ -145,24 +97,12 @@ EOF
+ }
+ 
+ ## Main logic
+-# Nothing to do in Incus VM but deployed in case it is later converted to a container
+-is_incus_vm || is_lxd_vm && exit 0
+ 
+ # Exit immediately if not an Incus/LXC container
+ is_lxc_container || exit 0
+ 
+-# Check for NetworkManager
+-nm_exists=0
+-
+-is_in_path NetworkManager && nm_exists=1
+-
+ # Determine systemd version
+-for path in /usr/lib/systemd/systemd /lib/systemd/systemd; do
+-	[ -x "${path}" ] || continue
+-
+-	systemd_version="$("${path}" --version | head -n1 | cut -d' ' -f2)"
+-	break
+-done
++systemd_version="$(systemd --version | head -n1 | cut -d' ' -f2)"
+ 
+ # Determine distro name and release
+ ID=""
+@@ -222,11 +162,6 @@ ACTION=="add|change|move", ENV{ID_NET_DRIVER}=="veth", ENV{INTERFACE}=="eth[0-9]
+ EOF
+ fi
+ 
+-# Workarounds for NetworkManager in containers
+-if [ "${nm_exists}" -eq 1 ]; then
+-	fix_nm_link_state eth0
+-fi
+-
+ # Allow masking units created by the lxc system-generator.
+ for d in /etc/systemd/system /usr/lib/systemd/system /lib/systemd/system; do
+ 	if ! [ -d "${d}" ]; then
diff --git a/nixpkgs/pkgs/tools/virtualization/dockstarter/default.nix b/nixpkgs/pkgs/tools/virtualization/dockstarter/default.nix
new file mode 100644
index 000000000000..40c6858da6a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/dockstarter/default.nix
@@ -0,0 +1,43 @@
+{ bash
+, coreutils
+, fetchFromGitHub
+, git
+, lib
+, makeWrapper
+, ncurses
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dockstarter";
+  version = "unstable-2022-10-26";
+
+  src = fetchFromGitHub {
+    owner = "ghostwriters";
+    repo = pname;
+    rev = "a1b6b6e29aa135c2a61ea67ca05e9e034856ca08";
+    hash = "sha256-G26DFme6YaizdE5oHBo/IqV+1quu07Bp+IykXtO/GgA=";
+  };
+
+  dontBuild = false;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 main.sh $out/bin/ds
+    wrapProgram $out/bin/ds --prefix PATH : ${lib.makeBinPath [
+      bash
+      coreutils
+      git
+      ncurses
+    ]}
+  '';
+
+  meta = with lib; {
+    description = "Make it quick and easy to get up and running with Docker";
+    homepage = "https://dockstarter.com";
+    license = licenses.mit;
+    maintainers = with maintainers; [ urandom ];
+    mainProgram = "ds";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/default.nix b/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/default.nix
new file mode 100644
index 000000000000..8e6d7b06d170
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, unzip, ruby, openssl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "ec2-ami-tools";
+
+  version = "1.5.7";
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  src = fetchurl {
+    url = "https://s3.amazonaws.com/ec2-downloads/${pname}-${version}.zip";
+    sha256 = "17xj7xmdbcwdbzalhfs6yyiwa64978mk3li39l949qfjjgrxjias";
+  };
+
+  # Amazon EC2 requires that disk images are writable.  If they're
+  # not, the VM immediately terminates with a mysterious
+  # "Server.InternalError" message.  Since disk images generated in
+  # the Nix store are read-only, they must be made writable in the
+  # tarball uploaded to Amazon S3.  So add a `--mode=0755' flag to the
+  # tar invocation.
+  patches = [ ./writable.patch ];
+
+  installPhase =
+    ''
+      mkdir -p $out
+      mv * $out
+      rm $out/*.txt
+
+      for i in $out/bin/*; do
+          wrapProgram $i \
+            --set EC2_HOME $out \
+            --prefix PATH : ${lib.makeBinPath [ ruby openssl ]}
+      done
+
+      sed -i 's|/bin/bash|${stdenv.shell}|' $out/lib/ec2/platform/base/pipeline.rb
+    '';  # */
+
+  meta = {
+    homepage = "https://aws.amazon.com/developertools/Amazon-EC2/368";
+    description = "Command-line tools to create and manage Amazon EC2 virtual machine images";
+    license = lib.licenses.amazonsl;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/writable.patch b/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/writable.patch
new file mode 100644
index 000000000000..54c2228911eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/writable.patch
@@ -0,0 +1,23 @@
+diff -ru ec2-ami-tools-1.4.0.5-orig/lib/ec2/amitools/bundle.rb ec2-ami-tools-1.4.0.5/lib/ec2/amitools/bundle.rb
+--- ec2-ami-tools-1.4.0.5-orig/lib/ec2/amitools/bundle.rb	2011-12-06 14:57:28.000000000 +0100
++++ ec2-ami-tools-1.4.0.5/lib/ec2/amitools/bundle.rb	2012-02-25 21:24:57.682427268 +0100
+@@ -80,7 +80,7 @@
+       # piped via several processes. The tee is used to allow a
+       # digest of the file to be calculated without having to re-read
+       # it from disk.
+-      tar = EC2::Platform::Current::Tar::Command.new.create.dereference.sparse
++      tar = EC2::Platform::Current::Tar::Command.new.create.dereference.sparse.writable
+       tar.owner(0).group(0)
+       tar.add(File::basename( image_file ), File::dirname( image_file ))
+       openssl = EC2::Platform::Current::Constants::Utility::OPENSSL
+diff -ru ec2-ami-tools-1.4.0.5-orig/lib/ec2/platform/linux/tar.rb ec2-ami-tools-1.4.0.5/lib/ec2/platform/linux/tar.rb
+--- ec2-ami-tools-1.4.0.5-orig/lib/ec2/platform/linux/tar.rb	2011-12-06 14:57:28.000000000 +0100
++++ ec2-ami-tools-1.4.0.5/lib/ec2/platform/linux/tar.rb	2012-02-25 21:23:36.342716403 +0100
+@@ -31,6 +31,7 @@
+           def update;         @options << '-u';          self; end
+           def sparse;         @options << '-S';          self; end
+           def dereference;    @options << '-h';          self; end
++          def writable;       @options << '--mode=0755'; self; end
+           
+           def archive(filename)
+             filename = '-' if filename.nil? 
diff --git a/nixpkgs/pkgs/tools/virtualization/ec2-api-tools/default.nix b/nixpkgs/pkgs/tools/virtualization/ec2-api-tools/default.nix
new file mode 100644
index 000000000000..97545204bfd4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/ec2-api-tools/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchurl
+, unzip
+, makeWrapper
+, jre
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ec2-api-tools";
+  version = "1.7.5.1";
+
+  src = fetchurl {
+    url = "http://s3.amazonaws.com/ec2-downloads/${pname}-${version}.zip";
+    sha256 = "sha256-hRq+MEA+4chqPr3d9bS//X70tYcRBTD+rfAJVNmuLzo=";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  installPhase = ''
+    d=$out/libexec/ec2-api-tools
+    mkdir -p $d
+    mv * $d
+    rm $d/bin/*.cmd # Windows stuff
+    for i in $d/bin/*; do
+      b=$(basename $i)
+      if [ $b = "ec2-cmd" ]; then continue; fi
+      makeWrapper $i $out/bin/$(basename $i) \
+        --set EC2_HOME $d \
+        --set JAVA_HOME ${jre}
+    done
+  '';
+
+  meta = {
+    homepage = "http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351";
+    description = "Command-line tools to create and manage Amazon EC2 virtual machines";
+    license = lib.licenses.amazonsl;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix b/nixpkgs/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix
new file mode 100644
index 000000000000..27830f9645ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildPythonPackage, fetchPypi, boto3, cryptography }:
+
+buildPythonPackage rec {
+  pname = "ec2instanceconnectcli";
+  version = "1.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-/U59a6od0JI27VHX+Bvue/7tQy+iwU+g8yt9/GgdoH4=";
+  };
+
+  propagatedBuildInputs = [ boto3 cryptography ];
+
+  # has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "ec2instanceconnectcli" ];
+
+  meta = with lib; {
+    description = "Command Line Interface for AWS EC2 Instance Connect";
+    homepage = "https://github.com/aws/aws-ec2-instance-connect-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/extra-container/default.nix b/nixpkgs/pkgs/tools/virtualization/extra-container/default.nix
new file mode 100644
index 000000000000..71ba276f4bd4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/extra-container/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, nixos-container, openssh, glibcLocales, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "extra-container";
+  version = "0.12";
+
+  src = fetchFromGitHub {
+    owner = "erikarvstedt";
+    repo = pname;
+    rev = version;
+    hash = "sha256-/5wPv962ZHvZoZMOr4nMz7qcvbzlExRYS2nrnay/PU8=";
+  };
+
+  buildCommand = ''
+    install -D $src/extra-container $out/bin/extra-container
+    patchShebangs $out/bin
+    share=$out/share/extra-container
+    install $src/eval-config.nix -Dt $share
+
+    # Use existing PATH for systemctl and machinectl
+    scriptPath="export PATH=${lib.makeBinPath [ openssh ]}:\$PATH"
+
+    sed -i "
+      s|evalConfig=.*|evalConfig=$share/eval-config.nix|
+      s|LOCALE_ARCHIVE=.*|LOCALE_ARCHIVE=${glibcLocales}/lib/locale/locale-archive|
+      2i$scriptPath
+      2inixosContainer=${nixos-container}/bin
+    " $out/bin/extra-container
+  '';
+
+  meta = with lib; {
+    description = "Run declarative containers without full system rebuilds";
+    homepage = "https://github.com/erikarvstedt/extra-container";
+    changelog = "https://github.com/erikarvstedt/extra-container/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.erikarvstedt ];
+    mainProgram = "extra-container";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/google-compute-engine/default.nix b/nixpkgs/pkgs/tools/virtualization/google-compute-engine/default.nix
new file mode 100644
index 000000000000..c980a45bbef2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/google-compute-engine/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, fetchFromGitHub
+, buildPythonPackage
+, bash
+, bashInteractive
+, util-linux
+, boto
+, setuptools
+, distro
+}:
+
+buildPythonPackage rec {
+  pname = "google-compute-engine";
+  version = "20190124";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = "compute-image-packages";
+    rev = version;
+    sha256 = "08cy0jd463kng6hwbd3nfldsp4dpd2lknlvdm88cq795wy0kh4wp";
+  };
+
+  buildInputs = [ bash ];
+  propagatedBuildInputs = [ boto setuptools distro ];
+
+  postPatch = ''
+    for file in $(find google_compute_engine -type f); do
+      substituteInPlace "$file" \
+        --replace /bin/systemctl "/run/current-system/systemd/bin/systemctl" \
+        --replace /bin/bash "${bashInteractive}/bin/bash" \
+        --replace /sbin/hwclock "${util-linux}/bin/hwclock"
+      # SELinux tool ???  /sbin/restorecon
+    done
+
+    substituteInPlace google_config/udev/64-gce-disk-removal.rules \
+      --replace /bin/sh "${bash}/bin/sh" \
+      --replace /bin/umount "${util-linux}/bin/umount" \
+      --replace /usr/bin/logger "${util-linux}/bin/logger"
+  '';
+
+  postInstall = ''
+    # allows to install the package in `services.udev.packages` in NixOS
+    mkdir -p $out/lib/udev/rules.d
+    cp -r google_config/udev/*.rules $out/lib/udev/rules.d
+
+    # sysctl snippets will be used by google-compute-config.nix
+    mkdir -p $out/sysctl.d
+    cp google_config/sysctl/*.conf $out/sysctl.d
+
+    patchShebangs $out/bin/*
+  '';
+
+  doCheck = false;
+  pythonImportsCheck = [ "google_compute_engine" ];
+
+  meta = with lib; {
+    description = "Google Compute Engine tools and services";
+    homepage = "https://github.com/GoogleCloudPlatform/compute-image-packages";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/google-guest-agent/default.nix b/nixpkgs/pkgs/tools/virtualization/google-guest-agent/default.nix
new file mode 100644
index 000000000000..423f43a02de0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/google-guest-agent/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, coreutils
+, makeWrapper
+, google-guest-configs
+, google-guest-oslogin
+, iproute2
+, procps
+}:
+
+buildGoModule rec {
+  pname = "guest-agent";
+  version = "20230821.00";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-DP15KDnD09edBxOQDwP0cjVIFxjMzE1hu1Sbu6Faj9Y=";
+  };
+
+  vendorHash = "sha256-PGvyDjhLwIKhR6NmwzbzjfkBK+FqsziAdsybQmCbtCc=";
+
+  patches = [ ./disable-etc-mutation.patch ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postPatch = ''
+    substitute ${./fix-paths.patch} fix-paths.patch \
+      --subst-var out \
+      --subst-var-by true "${coreutils}/bin/true"
+    patch -p1 < ./fix-paths.patch
+  '';
+
+  # We don't add `shadow` here; it's added to PATH if `mutableUsers` is enabled.
+  binPath = lib.makeBinPath [
+    google-guest-configs
+    google-guest-oslogin
+    iproute2
+    procps
+  ];
+
+  # Skip tests which require networking.
+  preCheck = ''
+    rm google_guest_agent/wsfc_test.go
+  '';
+
+  postInstall = ''
+    mkdir -p $out/etc/systemd/system
+    cp *.service $out/etc/systemd/system
+    install -Dm644 instance_configs.cfg $out/etc/default/instance_configs.cfg
+
+    wrapProgram $out/bin/google_guest_agent \
+      --prefix PATH ":" "$binPath"
+  '';
+
+  meta = with lib; {
+    description = "Guest Agent for Google Compute Engine";
+    homepage = "https://github.com/GoogleCloudPlatform/guest-agent";
+    changelog = "https://github.com/GoogleCloudPlatform/guest-agent/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/google-guest-agent/disable-etc-mutation.patch b/nixpkgs/pkgs/tools/virtualization/google-guest-agent/disable-etc-mutation.patch
new file mode 100644
index 000000000000..fe076baacd20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/google-guest-agent/disable-etc-mutation.patch
@@ -0,0 +1,54 @@
+From 2e8060f9ade13ba18ae5930c0781227bfcce11a5 Mon Sep 17 00:00:00 2001
+From: Nikolay Amiantov <ab@fmap.me>
+Date: Mon, 10 Jan 2022 22:16:38 +0300
+Subject: [PATCH] Disable accounts setup phase and oslogin
+
+On NixOS we set up necessary groups and sudoers rules declaratively,
+and have most of `/etc` directory read-only. This creates (harmless)
+error messages when trying to create google-sudoers file.
+
+"oslogin" daemon sets up configuration necessary for OS Login to
+work, including PAM, NSS and sudoers. On NixOS we perform all this
+configuration declaratively and have most of /etc mounted read-only.
+This creates (harmless) error messages when running the daemon.
+---
+ google_guest_agent/non_windows_accounts.go | 9 ---------
+ google_guest_agent/oslogin.go              | 2 +-
+ 2 files changed, 1 insertion(+), 10 deletions(-)
+
+diff --git a/google_guest_agent/non_windows_accounts.go b/google_guest_agent/non_windows_accounts.go
+index 81013e3..05b830f 100644
+--- a/google_guest_agent/non_windows_accounts.go
++++ b/google_guest_agent/non_windows_accounts.go
+@@ -104,15 +104,6 @@ func (a *accountsMgr) set() error {
+ 		sshKeys = make(map[string][]string)
+ 	}
+ 
+-	logger.Debugf("create sudoers file if needed")
+-	if err := createSudoersFile(); err != nil {
+-		logger.Errorf("Error creating google-sudoers file: %v.", err)
+-	}
+-	logger.Debugf("create sudoers group if needed")
+-	if err := createSudoersGroup(); err != nil {
+-		logger.Errorf("Error creating google-sudoers group: %v.", err)
+-	}
+-
+ 	mdkeys := newMetadata.Instance.Attributes.SSHKeys
+ 	if !newMetadata.Instance.Attributes.BlockProjectKeys {
+ 		mdkeys = append(mdkeys, newMetadata.Project.Attributes.SSHKeys...)
+diff --git a/google_guest_agent/oslogin.go b/google_guest_agent/oslogin.go
+index d05f733..980e84c 100644
+--- a/google_guest_agent/oslogin.go
++++ b/google_guest_agent/oslogin.go
+@@ -76,7 +76,7 @@ func (o *osloginMgr) timeout() bool {
+ }
+ 
+ func (o *osloginMgr) disabled(os string) bool {
+-	return os == "windows"
++	return true
+ }
+ 
+ func (o *osloginMgr) set() error {
+-- 
+2.34.1
+
diff --git a/nixpkgs/pkgs/tools/virtualization/google-guest-agent/fix-paths.patch b/nixpkgs/pkgs/tools/virtualization/google-guest-agent/fix-paths.patch
new file mode 100644
index 000000000000..07bb112ae289
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/google-guest-agent/fix-paths.patch
@@ -0,0 +1,43 @@
+diff --git a/google-guest-agent.service b/google-guest-agent.service
+index 79b8e39..a39097b 100644
+--- a/google-guest-agent.service
++++ b/google-guest-agent.service
+@@ -14,7 +14,7 @@ PartOf=network.service networking.service NetworkManager.service systemd-network
+ 
+ [Service]
+ Type=notify
+-ExecStart=/usr/bin/google_guest_agent
++ExecStart=@out@/bin/google_guest_agent
+ OOMScoreAdjust=-999
+ Restart=always
+ 
+diff --git a/google-shutdown-scripts.service b/google-shutdown-scripts.service
+index 16bb9c2..ae02067 100644
+--- a/google-shutdown-scripts.service
++++ b/google-shutdown-scripts.service
+@@ -5,10 +5,10 @@ After=network-online.target rsyslog.service
+ 
+ [Service]
+ Type=oneshot
+-ExecStart=/bin/true
++ExecStart=@true@
+ RemainAfterExit=true
+ # This service does nothing on start, and runs shutdown scripts on stop.
+-ExecStop=/usr/bin/google_metadata_script_runner shutdown
++ExecStop=@out@/bin/google_metadata_script_runner shutdown
+ TimeoutStopSec=0
+ KillMode=process
+ 
+diff --git a/google-startup-scripts.service b/google-startup-scripts.service
+index dfc9838..2465265 100644
+--- a/google-startup-scripts.service
++++ b/google-startup-scripts.service
+@@ -6,7 +6,7 @@ Before=apt-daily.service
+ 
+ [Service]
+ Type=oneshot
+-ExecStart=/usr/bin/google_metadata_script_runner startup
++ExecStart=@out@/bin/google_metadata_script_runner startup
+ #TimeoutStartSec is ignored for Type=oneshot service units.
+ KillMode=process
+ 
diff --git a/nixpkgs/pkgs/tools/virtualization/google-guest-configs/default.nix b/nixpkgs/pkgs/tools/virtualization/google-guest-configs/default.nix
new file mode 100644
index 000000000000..73dd3c93d255
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/google-guest-configs/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper
+, ipcalc, iproute2, util-linux, coreutils, ethtool, gnugrep, gnused, nvme-cli }:
+
+stdenv.mkDerivation rec {
+  pname = "google-guest-configs";
+  version = "20211116.00";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = "guest-configs";
+    rev = version;
+    sha256 = "sha256-0SRu6p/DsHNNI20mkXJitt/Ee5S2ooiy5hNmD+ndecM=";
+  };
+
+  binDeps = lib.makeBinPath [ coreutils util-linux gnugrep gnused ethtool ipcalc iproute2 ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  postPatch = ''
+    substitute ${./fix-paths.patch} fix-paths.patch \
+      --subst-var out \
+      --subst-var-by nvme "${nvme-cli}/bin/nvme" \
+      --subst-var-by sh "${stdenv.shell}" \
+      --subst-var-by umount "${util-linux}/bin/umount" \
+      --subst-var-by logger "${util-linux}/bin/logger"
+    patch -p1 < ./fix-paths.patch
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{bin,etc,lib}
+    cp -r src/etc/{modprobe.d,sysctl.d} $out/etc
+    cp -r src/lib/udev $out/lib
+    cp -r src/sbin/* $out/bin
+    cp -r src/usr/bin/* $out/bin
+
+    for i in $out/bin/* $out/lib/udev/google_nvme_id; do
+      wrapProgram "$i" \
+        --prefix "PATH" ":" "$binDeps"
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/GoogleCloudPlatform/guest-configs";
+    description = "Linux Guest Environment for Google Compute Engine";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/google-guest-configs/fix-paths.patch b/nixpkgs/pkgs/tools/virtualization/google-guest-configs/fix-paths.patch
new file mode 100644
index 000000000000..7c9a86f10601
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/google-guest-configs/fix-paths.patch
@@ -0,0 +1,61 @@
+diff -ru3 source.old/src/lib/udev/google_nvme_id source.new/src/lib/udev/google_nvme_id
+--- source.old/src/lib/udev/google_nvme_id	1970-01-01 03:00:01.000000000 +0300
++++ source.new/src/lib/udev/google_nvme_id	2022-02-05 13:30:00.986242869 +0300
+@@ -17,7 +17,7 @@
+ # the metadata server
+ 
+ # Locations of the script's dependencies
+-readonly nvme_cli_bin=/usr/sbin/nvme
++readonly nvme_cli_bin=@nvme@
+ 
+ # Bash regex to parse device paths and controller identification
+ readonly NAMESPACE_NUMBER_REGEX="/dev/nvme[[:digit:]]+n([[:digit:]]+).*"
+diff -ru3 source.old/src/lib/udev/rules.d/64-gce-disk-removal.rules source.new/src/lib/udev/rules.d/64-gce-disk-removal.rules
+--- source.old/src/lib/udev/rules.d/64-gce-disk-removal.rules	1970-01-01 03:00:01.000000000 +0300
++++ source.new/src/lib/udev/rules.d/64-gce-disk-removal.rules	2022-02-05 13:27:42.635300567 +0300
+@@ -14,4 +14,4 @@
+ #
+ # When a disk is removed, unmount any remaining attached volumes.
+ 
+-ACTION=="remove", SUBSYSTEM=="block", KERNEL=="sd*|vd*|nvme*", RUN+="/bin/sh -c '/bin/umount -fl /dev/$name && /usr/bin/logger -p daemon.warn -s WARNING: hot-removed /dev/$name that was still mounted, data may have been corrupted'"
++ACTION=="remove", SUBSYSTEM=="block", KERNEL=="sd*|vd*|nvme*", RUN+="@sh@ -c '@umount@ -fl /dev/$name && @logger@ -p daemon.warn -s WARNING: hot-removed /dev/$name that was still mounted, data may have been corrupted'"
+diff -ru3 source.old/src/lib/udev/rules.d/65-gce-disk-naming.rules source.new/src/lib/udev/rules.d/65-gce-disk-naming.rules
+--- source.old/src/lib/udev/rules.d/65-gce-disk-naming.rules	1970-01-01 03:00:01.000000000 +0300
++++ source.new/src/lib/udev/rules.d/65-gce-disk-naming.rules	2022-02-05 13:27:05.053107964 +0300
+@@ -21,11 +21,11 @@
+ KERNEL=="sd*|vd*", IMPORT{program}="scsi_id --export --whitelisted -d $tempnode"
+ 
+ # NVME Local SSD naming
+-KERNEL=="nvme*n*", ATTRS{model}=="nvme_card", PROGRAM="/bin/sh -c 'nsid=$$(echo %k|sed -re s/nvme[0-9]+n\([0-9]+\).\*/\\1/); echo $$((nsid-1))'", ENV{ID_SERIAL_SHORT}="local-nvme-ssd-%c"
++KERNEL=="nvme*n*", ATTRS{model}=="nvme_card", PROGRAM="@sh@ -c 'nsid=$$(echo %k|sed -re s/nvme[0-9]+n\([0-9]+\).\*/\\1/); echo $$((nsid-1))'", ENV{ID_SERIAL_SHORT}="local-nvme-ssd-%c"
+ KERNEL=="nvme*", ATTRS{model}=="nvme_card", ENV{ID_SERIAL}="Google_EphemeralDisk_$env{ID_SERIAL_SHORT}"
+ 
+ # NVME Persistent Disk Naming
+-KERNEL=="nvme*n*", ATTRS{model}=="nvme_card-pd", IMPORT{program}="google_nvme_id -d $tempnode"
++KERNEL=="nvme*n*", ATTRS{model}=="nvme_card-pd", IMPORT{program}="@out@/lib/udev/google_nvme_id -d $tempnode"
+ 
+ # Symlinks
+ KERNEL=="sd*|vd*|nvme*", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-id/google-$env{ID_SERIAL_SHORT}"
+diff -ru3 source.old/src/sbin/google-dhclient-script source.new/src/sbin/google-dhclient-script
+--- source.old/src/sbin/google-dhclient-script	1970-01-01 03:00:01.000000000 +0300
++++ source.new/src/sbin/google-dhclient-script	2022-02-05 13:29:37.430058984 +0300
+@@ -31,7 +31,6 @@
+ # This script is found in EL 7 and used to fix local routing in EL 6.
+ # ----------
+ 
+-PATH=/bin:/usr/bin:/sbin
+ # scripts in dhclient.d/ use $SAVEDIR (#833054)
+ SAVEDIR=/var/lib/dhclient
+ 
+@@ -58,9 +57,9 @@
+     if need_hostname; then
+         status=1
+         if [ -n "${new_ip_address}" ]; then
+-            eval $(/bin/ipcalc --silent --hostname ${new_ip_address} ; echo "status=$?")
++            eval $(ipcalc --silent --hostname ${new_ip_address} ; echo "status=$?")
+         elif [ -n "${new_ip6_address}" ]; then
+-            eval $(/bin/ipcalc --silent --hostname ${new_ip6_address} ; echo "status=$?")
++            eval $(ipcalc --silent --hostname ${new_ip6_address} ; echo "status=$?")
+         fi
+ 
+         if [ ${status} -eq 0 ]; then
diff --git a/nixpkgs/pkgs/tools/virtualization/google-guest-oslogin/default.nix b/nixpkgs/pkgs/tools/virtualization/google-guest-oslogin/default.nix
new file mode 100644
index 000000000000..7600952a45b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/google-guest-oslogin/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, curl
+, fetchFromGitHub
+, json_c
+, nixosTests
+, pam
+}:
+
+stdenv.mkDerivation rec {
+  pname = "google-guest-oslogin";
+  version = "20230831.00";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = "guest-oslogin";
+    rev = version;
+    sha256 = "sha256-9QCB94HVbeLjioJuSN1Aa+EqFncojPoWFxw5mS9bDGw=";
+  };
+
+  postPatch = ''
+    # change sudoers dir from /var/google-sudoers.d to /run/google-sudoers.d (managed through systemd-tmpfiles)
+    substituteInPlace src/pam/pam_oslogin_admin.cc --replace /var/google-sudoers.d /run/google-sudoers.d
+    # fix "User foo not allowed because shell /bin/bash does not exist"
+    substituteInPlace src/include/compat.h --replace /bin/bash /run/current-system/sw/bin/bash
+  '';
+
+  buildInputs = [ curl.dev pam json_c ];
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${json_c.dev}/include/json-c" ];
+
+  makeFlags = [
+    "VERSION=${version}"
+    "PREFIX=$(out)"
+    "MANDIR=$(out)/share/man"
+    "SYSTEMDDIR=$(out)/etc/systemd/system"
+    "PRESETDIR=$(out)/etc/systemd/system-preset"
+  ];
+
+  postInstall = ''
+    sed -i "s,/usr/bin/,$out/bin/,g" $out/etc/systemd/system/google-oslogin-cache.service
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = {
+    inherit (nixosTests) google-oslogin;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/GoogleCloudPlatform/compute-image-packages";
+    description = "OS Login Guest Environment for Google Compute Engine";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/govc/default.nix b/nixpkgs/pkgs/tools/virtualization/govc/default.nix
new file mode 100644
index 000000000000..e3fd16538e4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/govc/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "govc";
+  version = "0.34.2";
+
+  subPackages = [ "govc" ];
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "vmware";
+    repo = "govmomi";
+    sha256 = "sha256-UrGHuzUZvXWZRy4VJ1HlMBs2C8MuaUYhM6dlYIoG7vE=";
+  };
+
+  vendorHash = "sha256-1Y2Q2Ep3aqhUCSWey+sD4m7CgVEjlPt6ri3OKV8eERU=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/vmware/govmomi/govc/flags.BuildVersion=${version}"
+  ];
+
+  meta = {
+    description = "A vSphere CLI built on top of govmomi";
+    homepage = "https://github.com/vmware/govmomi/tree/master/govc";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ nicknovitski ];
+    mainProgram = "govc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/guestfs-tools/default.nix b/nixpkgs/pkgs/tools/virtualization/guestfs-tools/default.nix
new file mode 100644
index 000000000000..6a94e251a788
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/guestfs-tools/default.nix
@@ -0,0 +1,117 @@
+{ lib
+, stdenv
+, fetchurl
+, bash-completion
+, bison
+, cdrkit
+, cpio
+, curl
+, flex
+, getopt
+, glib
+, gnupg
+, hivex
+, jansson
+, libguestfs-with-appliance
+, libosinfo
+, libvirt
+, libxml2
+, makeWrapper
+, ncurses
+, ocamlPackages
+, openssl
+, pcre2
+, perlPackages
+, pkg-config
+, qemu
+, xz
+}:
+
+stdenv.mkDerivation rec {
+  pname = "guestfs-tools";
+  version = "1.52.0";
+
+  src = fetchurl {
+    url = "https://download.libguestfs.org/guestfs-tools/${lib.versions.majorMinor version}-stable/guestfs-tools-${version}.tar.gz";
+    sha256 = "sha256-Iv0TIpcEX5CmdAbw/w7uDyoBBqXxyNz8XDlqYl/3g3Y=";
+  };
+
+  nativeBuildInputs = [
+    bison
+    cdrkit
+    cpio
+    flex
+    getopt
+    makeWrapper
+    pkg-config
+    qemu
+  ] ++
+  (with perlPackages; [
+    GetoptLong
+    libintl-perl
+    ModuleBuild
+    perl
+    Po4a
+  ]) ++
+  (with ocamlPackages; [
+    findlib
+    gettext-stub
+    ocaml
+    ocaml_gettext
+    ounit2
+  ]);
+
+  buildInputs = [
+    bash-completion
+    glib
+    hivex
+    jansson
+    libguestfs-with-appliance
+    libosinfo
+    libvirt
+    libxml2
+    ncurses
+    openssl
+    pcre2
+    xz
+  ];
+
+  postPatch = ''
+    # If it uses the executable name, then there's nothing we can do
+    # when wrapping to stop it looking in
+    # $out/etc/.virt-builder-wrapped, which won't exist.
+    substituteInPlace common/mlstdutils/std_utils.ml \
+        --replace Sys.executable_name '(Array.get Sys.argv 0)'
+  '';
+
+  preConfigure = ''
+    patchShebangs ocaml-dep.sh.in ocaml-link.sh.in run.in
+  '';
+
+  makeFlags = [
+    "LIBGUESTFS_PATH=${libguestfs-with-appliance}/lib/guestfs"
+  ];
+
+  installFlags = [
+    "BASH_COMPLETIONS_DIR=${placeholder "out"}/share/bash-completion/completions"
+  ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/virt-builder \
+      --argv0 virt-builder \
+      --prefix PATH : ${lib.makeBinPath [ curl gnupg ]}:$out/bin \
+      --suffix VIRT_BUILDER_DIRS : /etc:$out/etc
+    wrapProgram $out/bin/virt-win-reg \
+      --prefix PERL5LIB : ${with perlPackages; makeFullPerlPath [ hivex libintl-perl libguestfs-with-appliance ]}
+  '';
+
+  meta = with lib; {
+    description = "Extra tools for accessing and modifying virtual machine disk images";
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
+    homepage = "https://libguestfs.org/";
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/jumppad/default.nix b/nixpkgs/pkgs/tools/virtualization/jumppad/default.nix
new file mode 100644
index 000000000000..8879c0f4379f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/jumppad/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "jumppad";
+  version = "0.5.59";
+
+  src = fetchFromGitHub {
+    owner = "jumppad-labs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ObDbZ3g+BtH8JCqLIa+gR69GowZA8T9HMPuKNDgW3uA=";
+  };
+  vendorHash = "sha256-9DLDc6zI0BYd2AK9xwqFNJTFdKXagkdPwczLhCvud94=";
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}"
+  ];
+
+  # Tests require a large variety of tools and resources to run including
+  # Kubernetes, Docker, and GCC.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool for building modern cloud native development environments";
+    homepage = "https://jumppad.dev";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ cpcloud ];
+    mainProgram = "jumppad";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/kubevirt/default.nix b/nixpkgs/pkgs/tools/virtualization/kubevirt/default.nix
new file mode 100644
index 000000000000..519ffa83e660
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/kubevirt/default.nix
@@ -0,0 +1,54 @@
+{ buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, lib
+, testers
+, kubevirt
+}:
+
+buildGoModule rec {
+  pname = "kubevirt";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "kubevirt";
+    repo = "kubevirt";
+    rev = "v${version}";
+    hash = "sha256-4r85RDfndLUjpAmipe3oLFcGzD4GRfPgf7wku2unoes=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/virtctl" ];
+
+  tags = [ "selinux" ];
+
+  ldflags = [
+    "-X kubevirt.io/client-go/version.gitCommit=v${version}"
+    "-X kubevirt.io/client-go/version.gitTreeState=clean"
+    "-X kubevirt.io/client-go/version.gitVersion=v${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd virtctl \
+      --bash <($out/bin/virtctl completion bash) \
+      --fish <($out/bin/virtctl completion fish) \
+      --zsh <($out/bin/virtctl completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = kubevirt;
+    command = "virtctl version --client";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "Client tool to use advanced features such as console access";
+    homepage = "https://kubevirt.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ haslersn ];
+    mainProgram = "virtctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/linode-cli/default.nix b/nixpkgs/pkgs/tools/virtualization/linode-cli/default.nix
new file mode 100644
index 000000000000..a4f54ec86177
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/linode-cli/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, fetchFromGitHub
+, fetchurl
+, buildPythonApplication
+, colorclass
+, installShellFiles
+, pyyaml
+, requests
+, setuptools
+, terminaltables
+, rich
+, openapi3
+, packaging
+}:
+
+let
+  hash = "sha256-J0L+FTVzYuAqTDOwpoH12lQr03UNo5dsQpd/iUKR40Q=";
+  # specVersion taken from: https://www.linode.com/docs/api/openapi.yaml at `info.version`.
+  specVersion = "4.166.0";
+  specHash = "sha256-rUwKQt3y/ALZUoW3eJiiIDJYLQpUHO7Abm0h09ra02g=";
+  spec = fetchurl {
+    url = "https://raw.githubusercontent.com/linode/linode-api-docs/v${specVersion}/openapi.yaml";
+    hash = specHash;
+  };
+
+in
+
+buildPythonApplication rec {
+  pname = "linode-cli";
+  version = "5.45.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "linode";
+    repo = pname;
+    rev = "v${version}";
+    inherit hash;
+  };
+
+  patches = [
+    ./remove-update-check.patch
+  ];
+
+  # remove need for git history
+  prePatch = ''
+    substituteInPlace setup.py \
+      --replace "version = get_version()" "version='${version}',"
+  '';
+
+  propagatedBuildInputs = [
+    colorclass
+    pyyaml
+    requests
+    setuptools
+    terminaltables
+    rich
+    openapi3
+    packaging
+  ];
+
+  postConfigure = ''
+    python3 -m linodecli bake ${spec} --skip-config
+    cp data-3 linodecli/
+    echo "${version}" > baked_version
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/linode-cli --skip-config --version | grep ${version} > /dev/null
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    installShellCompletion --cmd linode-cli --bash <($out/bin/linode-cli --skip-config completion bash)
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    mainProgram = "linode-cli";
+    description = "The Linode Command Line Interface";
+    homepage = "https://github.com/linode/linode-cli";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ryantm techknowlogick ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/linode-cli/remove-update-check.patch b/nixpkgs/pkgs/tools/virtualization/linode-cli/remove-update-check.patch
new file mode 100644
index 000000000000..f26b30edf72d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/linode-cli/remove-update-check.patch
@@ -0,0 +1,13 @@
+diff --git a/linodecli/api_request.py b/linodecli/api_request.py
+index 4273aa6..3ada5c2 100644
+--- a/linodecli/api_request.py
++++ b/linodecli/api_request.py
+@@ -305,7 +305,7 @@ def _attempt_warn_old_version(ctx, result):
+                 file=sys.stderr,
+             )
+
+-    if api_version_higher:
++    if False:
+         # check to see if there is, in fact, a version to upgrade to.  If not, don't
+         # suggest an upgrade (since there's no package anyway)
+         new_version_exists = False
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/virtualization/linode-cli/update.sh b/nixpkgs/pkgs/tools/virtualization/linode-cli/update.sh
new file mode 100755
index 000000000000..8bd0bfe8602e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/linode-cli/update.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnugrep gnused jq yq-go
+
+set -x -eu -o pipefail
+
+cd $(dirname "${BASH_SOURCE[0]}")
+
+SPEC_VERSION=$(curl -s https://www.linode.com/docs/api/openapi.yaml | yq eval '.info.version' -)
+
+SPEC_SHA256=$(nix-prefetch-url --quiet https://raw.githubusercontent.com/linode/linode-api-docs/v${SPEC_VERSION}/openapi.yaml)
+
+VERSION=$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} \
+    -H "Accept: application/vnd.github.v3+json" \
+    "https://api.github.com/repos/linode/linode-cli/tags" \
+    | jq 'map(.name)' \
+    | grep '"' \
+    | sed 's/[ ",(^v)]//g' \
+    | grep -v -e rc -e list \
+    | cut -d '"' -f4 | sort -rV | head -n 1)
+
+SHA256=$(nix-prefetch-url --quiet --unpack https://github.com/linode/linode-cli/archive/refs/tags/v${VERSION}.tar.gz)
+
+setKV () {
+    sed -i "s|$1 = \".*\"|$1 = \"${2:-}\"|" ./default.nix
+}
+
+setKV specVersion ${SPEC_VERSION}
+setKV specHash ${SPEC_SHA256}
+setKV version ${VERSION}
+setKV hash ${SHA256}
diff --git a/nixpkgs/pkgs/tools/virtualization/lxd-image-server/default.nix b/nixpkgs/pkgs/tools/virtualization/lxd-image-server/default.nix
new file mode 100644
index 000000000000..43f46a8a72fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/lxd-image-server/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, openssl
+, rsync
+, python3
+, fetchFromGitHub
+, nixosTests
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "lxd-image-server";
+  version = "0.0.4";
+
+  src = fetchFromGitHub {
+    owner = "Avature";
+    repo = "lxd-image-server";
+    rev = version;
+    sha256 = "yx8aUmMfSzyWaM6M7+WcL6ouuWwOpqLzODWSdNgwCwo=";
+  };
+
+  patches = [
+    ./state.patch
+    ./run.patch
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    setuptools
+    attrs
+    click
+    inotify
+    cryptography
+    confight
+    python-pidfile
+  ];
+
+  makeWrapperArgs = [
+    ''--prefix PATH ':' "${lib.makeBinPath [ openssl rsync ]}"''
+  ];
+
+  doCheck = false;
+
+  passthru.tests.lxd-image-server = nixosTests.lxd-image-server;
+
+  meta = with lib; {
+    description = "Creates and manages a simplestreams lxd image server on top of nginx";
+    homepage = "https://github.com/Avature/lxd-image-server";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ mkg20001 ];
+    mainProgram = "lxd-image-server";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/lxd-image-server/run.patch b/nixpkgs/pkgs/tools/virtualization/lxd-image-server/run.patch
new file mode 100644
index 000000000000..bd1172c1f864
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/lxd-image-server/run.patch
@@ -0,0 +1,25 @@
+From df2ce9fb48a3790407646a388e0d220a75496c52 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Maciej=20Kr=C3=BCger?= <mkg20001@gmail.com>
+Date: Wed, 3 Nov 2021 14:23:38 +0100
+Subject: [PATCH] /var/run -> /run
+
+---
+ lxd_image_server/tools/config.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lxd_image_server/tools/config.py b/lxd_image_server/tools/config.py
+index 60e8973..23d392a 100644
+--- a/lxd_image_server/tools/config.py
++++ b/lxd_image_server/tools/config.py
+@@ -9,7 +9,7 @@ import confight
+ class Config():
+ 
+     _lock = Lock()
+-    pidfile = Path('/var/run/lxd-image-server/pidfile')
++    pidfile = Path('/run/lxd-image-server/pidfile')
+     data = {}
+ 
+     @classmethod
+-- 
+2.33.0
+
diff --git a/nixpkgs/pkgs/tools/virtualization/lxd-image-server/state.patch b/nixpkgs/pkgs/tools/virtualization/lxd-image-server/state.patch
new file mode 100644
index 000000000000..c6677ea48e9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/lxd-image-server/state.patch
@@ -0,0 +1,49 @@
+From 17a1e09eaf8957174425d05200be9ee3e77229f9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Maciej=20Kr=C3=BCger?= <mkg20001@gmail.com>
+Date: Thu, 21 Oct 2021 00:39:08 +0200
+Subject: [PATCH] Remove system-state changing code
+
+This is already done by the module on nixOS
+---
+ lxd_image_server/cli.py | 15 +--------------
+ 1 file changed, 1 insertion(+), 14 deletions(-)
+
+diff --git a/lxd_image_server/cli.py b/lxd_image_server/cli.py
+index d276e6d..f759bf2 100644
+--- a/lxd_image_server/cli.py
++++ b/lxd_image_server/cli.py
+@@ -140,30 +140,17 @@ def reload_config():
+ @cli.command()
+ @click.option('--root_dir', default='/var/www/simplestreams',
+               show_default=True)
+-@click.option('--ssl_dir', default='/etc/nginx/ssl', show_default=True,
+-              callback=lambda ctx, param, val: Path(val))
+ @click.pass_context
+-def init(ctx, root_dir, ssl_dir):
++def init(ctx, root_dir):
+     if not Path(root_dir).exists():
+         logger.error('Root directory does not exists')
+     else:
+-        if not ssl_dir.exists():
+-            os.makedirs(str(ssl_dir))
+-
+-        if not (ssl_dir / 'nginx.key').exists():
+-            generate_cert(str(ssl_dir))
+-
+         img_dir = str(Path(root_dir, 'images'))
+         streams_dir = str(Path(root_dir, 'streams/v1'))
+         if not Path(img_dir).exists():
+             os.makedirs(img_dir)
+         if not Path(streams_dir).exists():
+             os.makedirs(streams_dir)
+-        conf_path = Path('/etc/nginx/sites-enabled/simplestreams.conf')
+-        if not conf_path.exists():
+-            conf_path.symlink_to(
+-                '/etc/nginx/sites-available/simplestreams.conf')
+-            os.system('nginx -s reload')
+ 
+         if not Path(root_dir, 'streams', 'v1', 'images.json').exists():
+             ctx.invoke(update, img_dir=Path(root_dir, 'images'),
+-- 
+2.33.0
+
diff --git a/nixpkgs/pkgs/tools/virtualization/marathonctl/default.nix b/nixpkgs/pkgs/tools/virtualization/marathonctl/default.nix
new file mode 100644
index 000000000000..85576b4f6640
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/marathonctl/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "marathonctl";
+  version = "0.0.7";
+
+  src = fetchFromGitHub {
+    owner = "shoenig";
+    repo = "marathonctl";
+    rev = "v${version}";
+    sha256 = "sha256-MigmvOwYa0uYPexchS4MP74I1Tp6QHYuQVSOh1+FrMg=";
+  };
+
+  vendorHash = "sha256-Oiol4KuPOyJq2Bfc5div+enX4kQqYn20itmwWBecuIg=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/shoenig/marathonctl";
+    description = "CLI tool for Marathon";
+    license = licenses.mit;
+    maintainers = with maintainers; [ manveru ];
+    mainProgram = "marathonctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/mininet/default.nix b/nixpkgs/pkgs/tools/virtualization/mininet/default.nix
new file mode 100644
index 000000000000..3d7339bf56b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/mininet/default.nix
@@ -0,0 +1,88 @@
+{ stdenv, lib, fetchFromGitHub
+, runCommand
+, which
+, python3
+, help2man
+, makeWrapper
+, ethtool
+, inetutils
+, iperf
+, iproute2
+, nettools
+, socat
+}:
+
+let
+  pyEnv = python3.withPackages(ps: [ ps.setuptools ]);
+
+  telnet = runCommand "inetutils-telnet"
+    { }
+    ''
+      mkdir -p "$out/bin"
+      ln -s "${inetutils}"/bin/telnet "$out/bin"
+    '';
+
+  generatedPath = lib.makeSearchPath "bin" [
+    iperf
+    ethtool
+    iproute2
+    socat
+    # mn errors out without a telnet binary
+    # pkgs.inetutils brings an undesired ifconfig into PATH see #43105
+    nettools
+    telnet
+  ];
+
+in
+stdenv.mkDerivation rec {
+  pname = "mininet";
+  version = "2.3.1b4";
+
+  outputs = [ "out" "py" ];
+
+  src = fetchFromGitHub {
+    owner = "mininet";
+    repo = "mininet";
+    rev = version;
+    hash = "sha256-Z7Vbfu0EJ4+rCpckXrt3hgxeB9N2nnyPIXgPBnpV4uw=";
+  };
+
+  buildFlags = [ "mnexec" ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  pythonPath = [ python3.pkgs.setuptools ];
+  nativeBuildInputs = [ help2man makeWrapper python3.pkgs.wrapPython ];
+
+  propagatedBuildInputs = [ python3 which ];
+
+  installTargets = [ "install-mnexec" "install-manpages" ];
+
+  preInstall = ''
+    mkdir -p $out $py
+    # without --root, install fails
+    "${pyEnv.interpreter}" setup.py install \
+      --root="/" \
+      --prefix="$py" \
+      --install-scripts="$out/bin"
+  '';
+
+  postFixup = ''
+    wrapPythonProgramsIn "$out/bin" "$py $pythonPath"
+    wrapProgram "$out/bin/mnexec" \
+      --prefix PATH : "${generatedPath}"
+    wrapProgram "$out/bin/mn" \
+      --prefix PATH : "${generatedPath}"
+  '';
+
+  doCheck = false;
+
+
+  meta = with lib; {
+    description = "Emulator for rapid prototyping of Software Defined Networks";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    homepage = "https://github.com/mininet/mininet";
+    maintainers = with maintainers; [ teto ];
+    mainProgram = "mnexec";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/mkosi/default.nix b/nixpkgs/pkgs/tools/virtualization/mkosi/default.nix
new file mode 100644
index 000000000000..8737002c0a82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/mkosi/default.nix
@@ -0,0 +1,134 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, stdenv
+, python3
+, bubblewrap
+, systemd
+, pandoc
+, kmod
+, gnutar
+, util-linux
+, cpio
+, bash
+, coreutils
+, btrfs-progs
+
+  # Python packages
+, setuptools
+, setuptools-scm
+, wheel
+, buildPythonApplication
+, pytestCheckHook
+, pefile
+
+  # Optional dependencies
+, withQemu ? false
+, qemu
+, OVMF
+}:
+let
+  # For systemd features used by mkosi, see
+  # https://github.com/systemd/mkosi/blob/19bb5e274d9a9c23891905c4bcbb8f68955a701d/action.yaml#L64-L72
+  systemdForMkosi = systemd.override {
+    withRepart = true;
+    withBootloader = true;
+    withSysusers = true;
+    withFirstboot = true;
+    withEfi = true;
+    withUkify = true;
+  };
+
+  python3pefile = python3.withPackages (ps: with ps; [
+    pefile
+  ]);
+in
+buildPythonApplication rec {
+  pname = "mkosi";
+  version = "20.2";
+  format = "pyproject";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "systemd";
+    repo = "mkosi";
+    rev = "v${version}";
+    hash = "sha256-+mvepzoswDVIHzj+rEnlr0ouphGv5unpaNX3U8x517Y=";
+  };
+
+  patches = [
+    # sandbox: Deal correctly with unmerged-usr.
+    # Remove on next release after v20.2.
+    (fetchpatch {
+      url = "https://github.com/systemd/mkosi/commit/5a708efdb432dee9c6e5a9a4754752359cac8944.patch";
+      hash = "sha256-dXkY8Hha6y9CoZC1WdtZuI/YJsOQ1fOt4o4RsPkGWYQ=";
+    })
+  ];
+
+  # Fix ctypes finding library
+  # https://github.com/NixOS/nixpkgs/issues/7307
+  postPatch = lib.optionalString stdenv.isLinux ''
+    substituteInPlace mkosi/run.py \
+      --replace 'ctypes.util.find_library("c")' "'${stdenv.cc.libc}/lib/libc.so.6'"
+    substituteInPlace mkosi/__init__.py \
+      --replace '/usr/lib/systemd/ukify' "${systemdForMkosi}/lib/systemd/ukify"
+  '' + lib.optionalString withQemu ''
+    substituteInPlace mkosi/qemu.py \
+      --replace '/usr/share/ovmf/x64/OVMF_VARS.fd' "${OVMF.variables}" \
+      --replace '/usr/share/ovmf/x64/OVMF_CODE.fd' "${OVMF.firmware}"
+  '';
+
+  nativeBuildInputs = [
+    pandoc
+    setuptools
+    setuptools-scm
+    wheel
+  ];
+
+  propagatedBuildInputs = [
+    bash
+    btrfs-progs
+    bubblewrap
+    coreutils
+    cpio
+    gnutar
+    kmod
+    systemdForMkosi
+    util-linux
+  ] ++ lib.optional withQemu [
+    qemu
+  ];
+
+  postBuild = ''
+    ./tools/make-man-page.sh
+  '';
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "mkosi"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/man/man1
+    mv mkosi/resources/mkosi.1 $out/share/man/man1/
+  '';
+
+  makeWrapperArgs = [
+    "--set MKOSI_INTERPRETER ${python3pefile}/bin/python3"
+    "--prefix PYTHONPATH : \"$PYTHONPATH\""
+  ];
+
+  meta = with lib; {
+    description = "Build legacy-free OS images";
+    homepage = "https://github.com/systemd/mkosi";
+    changelog = "https://github.com/systemd/mkosi/releases/tag/v${version}";
+    license = licenses.lgpl21Only;
+    mainProgram = "mkosi";
+    maintainers = with maintainers; [ malt3 katexochen ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/multipass/cmake_no_fetch.patch b/nixpkgs/pkgs/tools/virtualization/multipass/cmake_no_fetch.patch
new file mode 100644
index 000000000000..bde1792d4002
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/multipass/cmake_no_fetch.patch
@@ -0,0 +1,32 @@
+diff --git a/3rd-party/CMakeLists.txt b/3rd-party/CMakeLists.txt
+index 188ebfc6..4a34a922 100644
+--- a/3rd-party/CMakeLists.txt
++++ b/3rd-party/CMakeLists.txt
+@@ -2,12 +2,8 @@ include(FetchContent)
+ set(FETCHCONTENT_QUIET FALSE)
+ 
+ FetchContent_Declare(gRPC
+-  GIT_REPOSITORY https://github.com/CanonicalLtd/grpc.git
+-  GIT_TAG e3acf245
+-  GIT_SHALLOW TRUE
+-  GIT_SUBMODULES "third_party/abseil-cpp third_party/cares/cares third_party/protobuf third_party/re2 third_party/zlib"
+-  GIT_SUBMODULES_RECURSE false
+-  GIT_PROGRESS TRUE
++  DOWNLOAD_COMMAND true
++  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/grpc
+ )
+ set(gRPC_SSL_PROVIDER "package" CACHE STRING "Provider of ssl library")
+ 
+diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
+index 52bd407f..a1100112 100644
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -28,7 +28,7 @@ FetchContent_Declare(googletest
+ )
+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+ set(INSTALL_GTEST OFF CACHE BOOL "")
+-FetchContent_MakeAvailable(googletest)
++# FetchContent_MakeAvailable(googletest)
+ 
+ add_executable(multipass_tests
+   blueprint_test_lambdas.cpp
diff --git a/nixpkgs/pkgs/tools/virtualization/multipass/cmake_warning.patch b/nixpkgs/pkgs/tools/virtualization/multipass/cmake_warning.patch
new file mode 100644
index 000000000000..846cba0690fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/multipass/cmake_warning.patch
@@ -0,0 +1,14 @@
+diff --git a/src/cert/CMakeLists.txt b/src/cert/CMakeLists.txt
+index d44a0b09..de440f24 100644
+--- a/src/cert/CMakeLists.txt
++++ b/src/cert/CMakeLists.txt
+@@ -22,7 +22,7 @@ add_library(cert STATIC
+ target_include_directories(cert PRIVATE
+   ${OPENSSL_INCLUDE_DIR})
+ 
+-foreach(flag -Wno-nested-anon-types -Wno-gnu -Wno-pedantic -Wno-ignored-qualifiers)
++foreach(flag -Wno-nested-anon-types -Wno-gnu -Wno-pedantic -Wno-ignored-qualifiers -Wno-ignored-attributes)
+   check_cxx_compiler_flag(${flag} SUPPORTED)
+   if(SUPPORTED)
+     target_compile_options(cert PRIVATE ${flag})
+
diff --git a/nixpkgs/pkgs/tools/virtualization/multipass/default.nix b/nixpkgs/pkgs/tools/virtualization/multipass/default.nix
new file mode 100644
index 000000000000..e7875f00bb6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/multipass/default.nix
@@ -0,0 +1,143 @@
+{ cmake
+, dnsmasq
+, fetchFromGitHub
+, git
+, gtest
+, iproute2
+, iptables
+, lib
+, libapparmor
+, libvirt
+, libxml2
+, nixosTests
+, openssl
+, OVMF
+, pkg-config
+, qemu
+, qemu-utils
+, qtbase
+, qtwayland
+, wrapQtAppsHook
+, slang
+, stdenv
+, xterm
+}:
+
+let
+  pname = "multipass";
+  version = "1.13.1";
+
+  # This is done here because a CMakeLists.txt from one of it's submodules tries
+  # to modify a file, so we grab the source for the submodule here, copy it into
+  # the source of the Multipass project which allows the modification to happen.
+  grpc_src = fetchFromGitHub {
+    owner = "CanonicalLtd";
+    repo = "grpc";
+    rev = "e3acf245";
+    hash = "sha256-tDc2iGxIV68Yi4RL8ES4yglJNlu8yH6FlpVvZoWjoXk=";
+    fetchSubmodules = true;
+  };
+in
+stdenv.mkDerivation
+{
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "canonical";
+    repo = "multipass";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-QttgWSuhxcuOyMNF9Ve1w0ftT41+hNz3WW5Vag/88X4=";
+    fetchSubmodules = true;
+    leaveDotGit = true;
+    postFetch = ''
+      # Workaround for https://github.com/NixOS/nixpkgs/issues/8567
+      cd $out
+      rm -rf .git
+    '';
+  };
+
+  patches = [
+    ./lxd_socket_path.patch
+    ./cmake_no_fetch.patch
+    ./cmake_warning.patch
+  ];
+
+  postPatch = ''
+    # Make sure the version is reported correctly in the compiled binary.
+    substituteInPlace ./CMakeLists.txt \
+      --replace "determine_version(MULTIPASS_VERSION)" "" \
+      --replace 'set(MULTIPASS_VERSION ''${MULTIPASS_VERSION})' 'set(MULTIPASS_VERSION "v${version}")'
+
+    # Patch the patch of the OVMF binaries to use paths from the nix store.
+    substituteInPlace ./src/platform/backends/qemu/linux/qemu_platform_detail_linux.cpp \
+      --replace "OVMF.fd" "${OVMF.fd}/FV/OVMF.fd" \
+      --replace "QEMU_EFI.fd" "${OVMF.fd}/FV/QEMU_EFI.fd"
+
+    # Copy the grpc submodule we fetched into the source code.
+    cp -r --no-preserve=mode ${grpc_src} 3rd-party/grpc
+
+    # Configure CMake to use gtest from the nix store since we disabled fetching from the internet.
+    cat >> tests/CMakeLists.txt <<'EOF'
+      add_library(gtest INTERFACE)
+      target_include_directories(gtest INTERFACE ${gtest.dev}/include)
+      target_link_libraries(gtest INTERFACE ${gtest}/lib/libgtest.so ''${CMAKE_THREAD_LIBS_INIT})
+      add_dependencies(gtest GMock)
+
+      add_library(gtest_main INTERFACE)
+      target_include_directories(gtest_main INTERFACE ${gtest.dev}/include)
+      target_link_libraries(gtest_main INTERFACE ${gtest}/lib/libgtest_main.so gtest)
+
+      add_library(gmock INTERFACE)
+      target_include_directories(gmock INTERFACE ${gtest.dev}/include)
+      target_link_libraries(gmock INTERFACE ${gtest}/lib/libgmock.so gtest)
+
+      add_library(gmock_main INTERFACE)
+      target_include_directories(gmock_main INTERFACE ${gtest.dev}/include)
+      target_link_libraries(gmock_main INTERFACE ${gtest}/lib/libgmock_main.so gmock gtest_main)
+    EOF
+  '';
+
+  buildInputs = [
+    gtest
+    libapparmor
+    libvirt
+    libxml2
+    openssl
+    qtbase
+    qtwayland
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    git
+    pkg-config
+    slang
+    wrapQtAppsHook
+  ];
+
+  nativeCheckInputs = [ gtest ];
+
+  postInstall = ''
+    wrapProgram $out/bin/multipassd --prefix PATH : ${lib.makeBinPath [
+      dnsmasq
+      iproute2
+      iptables
+      OVMF.fd
+      qemu
+      qemu-utils
+      xterm
+    ]}
+  '';
+
+  passthru.tests = {
+    multipass = nixosTests.multipass;
+  };
+
+  meta = with lib; {
+    description = "Ubuntu VMs on demand for any workstation";
+    homepage = "https://multipass.run";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jnsgruk ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/multipass/lxd_socket_path.patch b/nixpkgs/pkgs/tools/virtualization/multipass/lxd_socket_path.patch
new file mode 100644
index 000000000000..e23e8f72dcd7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/multipass/lxd_socket_path.patch
@@ -0,0 +1,13 @@
+diff --git a/src/platform/backends/lxd/lxd_request.h b/src/platform/backends/lxd/lxd_request.h
+index 4b5e8840..5e673ad7 100644
+--- a/src/platform/backends/lxd/lxd_request.h
++++ b/src/platform/backends/lxd/lxd_request.h
+@@ -27,7 +27,7 @@
+ 
+ namespace multipass
+ {
+-const QUrl lxd_socket_url{"unix:///var/snap/lxd/common/lxd/unix.socket@1.0"};
++const QUrl lxd_socket_url{"unix:///var/lib/lxd/unix.socket@1.0"};
+ const QString lxd_project_name{"multipass"};
+ 
+ class NetworkAccessManager;
diff --git a/nixpkgs/pkgs/tools/virtualization/nixos-container/default.nix b/nixpkgs/pkgs/tools/virtualization/nixos-container/default.nix
new file mode 100644
index 000000000000..0b44bde4719f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/nixos-container/default.nix
@@ -0,0 +1,38 @@
+{ substituteAll
+, perl
+, shadow
+, util-linux
+, configurationDirectory ? "/etc/nixos-containers"
+, stateDirectory ? "/var/lib/nixos-containers"
+, nixosTests
+}:
+
+substituteAll {
+    name = "nixos-container";
+    dir = "bin";
+    isExecutable = true;
+    src = ./nixos-container.pl;
+    perl = perl.withPackages (p: [ p.FileSlurp ]);
+    su = "${shadow.su}/bin/su";
+    utillinux = util-linux;
+
+    inherit configurationDirectory stateDirectory;
+
+    passthru = {
+      tests = {
+        inherit (nixosTests)
+          containers-imperative
+          containers-ip
+          containers-tmpfs
+          containers-ephemeral
+          containers-unified-hierarchy
+          ;
+      };
+    };
+
+    postInstall = ''
+      t=$out/share/bash-completion/completions
+      mkdir -p $t
+      cp ${./nixos-container-completion.sh} $t/nixos-container
+    '';
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container-completion.sh b/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container-completion.sh
new file mode 100644
index 000000000000..5298b5b12038
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container-completion.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+
+_nixos-container() {
+    local cur prev opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    opts="list create destroy restart start stop status update login root-login run show-ip show-host-key"
+    startstop_opts=$(nixos-container list)
+    update_opts="--config"
+
+    if [[ "$prev" == "nixos-container" ]]
+    then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+    fi
+
+    if [[ $(echo "$opts" | grep "$prev") ]]
+    then
+        if [[ "$prev" == "start" || "$prev" == "stop" ]]
+        then
+            COMPREPLY=( $(compgen -W "${startstop_opts}" -- ${cur}) )
+            return 0
+        elif [[ "$prev" == "update" ]]
+        then
+            COMPREPLY=( $(compgen -W "${update_opts}" -- ${cur}) )
+            return 0
+        fi
+    fi
+}
+
+complete -F _nixos-container nixos-container
+
diff --git a/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container.pl b/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container.pl
new file mode 100755
index 000000000000..854557eb7237
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container.pl
@@ -0,0 +1,491 @@
+#! @perl@/bin/perl
+
+use strict;
+use POSIX;
+use File::Path;
+use File::Slurp;
+use Fcntl ':flock';
+use Getopt::Long qw(:config gnu_getopt no_bundling);
+use Cwd 'abs_path';
+use Time::HiRes;
+
+my $nsenter = "@utillinux@/bin/nsenter";
+my $su = "@su@";
+
+my $configurationDirectory = "@configurationDirectory@";
+my $stateDirectory = "@stateDirectory@";
+
+# Ensure a consistent umask.
+umask 0022;
+
+# Ensure $NIXOS_CONFIG is not set.
+$ENV{"NIXOS_CONFIG"} = "";
+
+# Parse the command line.
+
+sub showHelp {
+    print <<EOF;
+Usage: nixos-container list
+       nixos-container create <container-name>
+         [--nixos-path <path>]
+         [--system-path <path>]
+         [--config <string>]
+         [--config-file <path>]
+         [--flake <flakeref>]
+         [--ensure-unique-name]
+         [--auto-start]
+         [--bridge <iface>]
+         [--port <port>]
+         [--host-address <string>]
+         [--local-address <string>]
+       nixos-container destroy <container-name>
+       nixos-container restart <container-name>
+       nixos-container start <container-name>
+       nixos-container stop <container-name>
+       nixos-container terminate <container-name>
+       nixos-container status <container-name>
+       nixos-container update <container-name>
+         [--config <string>]
+         [--config-file <path>]
+         [--flake <flakeref>]
+         [--nixos-path <path>]
+       nixos-container login <container-name>
+       nixos-container root-login <container-name>
+       nixos-container run <container-name> -- args...
+       nixos-container show-ip <container-name>
+       nixos-container show-host-key <container-name>
+EOF
+    exit 0;
+}
+
+my $systemPath;
+my $nixosPath;
+my $ensureUniqueName = 0;
+my $autoStart = 0;
+my $bridge;
+my $port;
+my $extraConfig;
+my $signal;
+my $configFile;
+my $hostAddress;
+my $localAddress;
+my $flake;
+my $flakeAttr = "container";
+
+# Nix passthru flags.
+my @nixFlags;
+my @nixFlags2;
+
+sub copyNixFlags0 { push @nixFlags, "--$_[0]"; }
+sub copyNixFlags1 { push @nixFlags, "--$_[0]", $_[1]; }
+
+# Ugly hack to handle flags that take two arguments, like --option.
+sub copyNixFlags2 {
+    if (scalar(@nixFlags2) % 3 == 0) {
+        push @nixFlags2, "--$_[0]", $_[1];
+    } else {
+        push @nixFlags2, $_[1];
+    }
+}
+
+GetOptions(
+    "help" => sub { showHelp() },
+    "ensure-unique-name" => \$ensureUniqueName,
+    "auto-start" => \$autoStart,
+    "bridge=s" => \$bridge,
+    "port=s" => \$port,
+    "system-path=s" => \$systemPath,
+    "signal=s" => \$signal,
+    "nixos-path=s" => \$nixosPath,
+    "config=s" => \$extraConfig,
+    "config-file=s" => \$configFile,
+    "host-address=s" => \$hostAddress,
+    "local-address=s" => \$localAddress,
+    "flake=s" => \$flake,
+    # Nix passthru options.
+    "log-format=s" => \&copyNixFlags1,
+    "option=s{2}" => \&copyNixFlags2,
+    "impure" => \&copyNixFlags0,
+    "update-input=s" => \&copyNixFlags1,
+    "override-input=s{2}" => \&copyNixFlags2,
+    "commit-lock-file" => \&copyNixFlags0,
+    "no-registries" => \&copyNixFlags0,
+    "no-update-lock-file" => \&copyNixFlags0,
+    "no-write-lock-file" => \&copyNixFlags0,
+    "no-allow-dirty" => \&copyNixFlags0,
+    "recreate-lock-file" => \&copyNixFlags0,
+    ) or exit 1;
+
+push @nixFlags, @nixFlags2;
+
+if (defined $hostAddress and !defined $localAddress or defined $localAddress and !defined $hostAddress) {
+    die "With --host-address set, --local-address is required as well!";
+}
+
+my $action = $ARGV[0] or die "$0: no action specified\n";
+
+if (defined $configFile and defined $extraConfig) {
+    die "--config and --config-file are mutually incompatible. " .
+        "Please define one or the other, but not both";
+}
+
+if (defined $flake && $flake =~ /^(.*)#([^#"]+)$/) {
+    $flake = $1;
+    $flakeAttr = $2;
+}
+
+# Execute the selected action.
+
+mkpath("$configurationDirectory", 0, 0755);
+mkpath("$stateDirectory", 0, 0700);
+
+
+if ($action eq "list") {
+    foreach my $confFile (glob "$configurationDirectory/*.conf") {
+        # Filter libpod configuration files
+        # From 22.05 and onwards this is not an issue any more as directories dont clash
+        if($confFile eq "/etc/containers/libpod.conf" || $confFile eq "/etc/containers/containers.conf" || $confFile eq "/etc/containers/registries.conf") {
+            next
+        }
+        $confFile =~ /\/([^\/]+).conf$/ or next;
+        print "$1\n";
+    }
+    exit 0;
+}
+
+my $containerName = $ARGV[1] or die "$0: no container name specified\n";
+$containerName =~ /^[a-zA-Z0-9_-]+$/ or die "$0: invalid container name\n";
+
+sub writeNixOSConfig {
+    my ($nixosConfigFile) = @_;
+
+    my $localExtraConfig = "";
+
+    if ($extraConfig) {
+        $localExtraConfig = $extraConfig
+    } elsif ($configFile) {
+        my $resolvedFile = abs_path($configFile);
+        $localExtraConfig = "imports = [ $resolvedFile ];"
+    }
+
+    my $nixosConfig = <<EOF;
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{ boot.isContainer = true;
+  networking.hostName = mkDefault "$containerName";
+  networking.useDHCP = false;
+  $localExtraConfig
+}
+EOF
+
+    write_file($nixosConfigFile, $nixosConfig);
+}
+
+sub buildFlake {
+    system("nix", "build", "-o", "$systemPath.tmp", @nixFlags, "--",
+           "$flake#nixosConfigurations.\"$flakeAttr\".config.system.build.toplevel") == 0
+        or die "$0: failed to build container from flake '$flake'\n";
+    $systemPath = readlink("$systemPath.tmp") or die;
+    unlink("$systemPath.tmp");
+}
+
+sub clearContainerState {
+    my ($profileDir, $gcRootsDir, $root, $configFile) = @_;
+
+    safeRemoveTree($profileDir) if -e $profileDir;
+    safeRemoveTree($gcRootsDir) if -e $gcRootsDir;
+    system("chattr", "-i", "$root/var/empty") if -e "$root/var/empty";
+    safeRemoveTree($root) if -e $root;
+    unlink($configFile) or die;
+}
+
+if ($action eq "create") {
+    # Acquire an exclusive lock to prevent races with other
+    # invocations of ‘nixos-container create’.
+    my $lockFN = "/run/lock/nixos-container";
+    open(my $lock, '>>', $lockFN) or die "$0: opening $lockFN: $!";
+    flock($lock, LOCK_EX) or die "$0: could not lock $lockFN: $!";
+
+    my $confFile = "$configurationDirectory/$containerName.conf";
+    my $root = "$stateDirectory/$containerName";
+
+    # Maybe generate a unique name.
+    if ($ensureUniqueName) {
+        my $base = $containerName;
+        for (my $nr = 0; ; $nr++) {
+            $confFile = "$configurationDirectory/$containerName.conf";
+            $root = "$stateDirectory/$containerName";
+            last unless -e $confFile || -e $root;
+            $containerName = "$base-$nr";
+        }
+    }
+
+    die "$0: container ‘$containerName’ already exists\n" if -e $confFile;
+
+    # Due to interface name length restrictions, container names must
+    # be restricted too.
+    die "$0: container name ‘$containerName’ is too long\n" if length $containerName > 11;
+
+    # Get an unused IP address.
+    my %usedIPs;
+    foreach my $confFile2 (glob "$configurationDirectory/*.conf") {
+        # Filter libpod configuration files
+        # From 22.05 and onwards this is not an issue any more as directories dont clash
+        if($confFile2 eq "/etc/containers/libpod.conf" || $confFile2 eq "/etc/containers/containers.conf" || $confFile2 eq "/etc/containers/registries.conf") {
+            next
+        }
+        my $s = read_file($confFile2) or die;
+        $usedIPs{$1} = 1 if $s =~ /^HOST_ADDRESS=([0-9\.]+)$/m;
+        $usedIPs{$1} = 1 if $s =~ /^LOCAL_ADDRESS=([0-9\.]+)$/m;
+    }
+
+    unless (defined $hostAddress) {
+        my $ipPrefix;
+        for (my $nr = 1; $nr < 255; $nr++) {
+            $ipPrefix = "10.233.$nr";
+            $hostAddress = "$ipPrefix.1";
+            $localAddress = "$ipPrefix.2";
+            last unless $usedIPs{$hostAddress} || $usedIPs{$localAddress};
+            $ipPrefix = undef;
+        }
+
+        die "$0: out of IP addresses\n" unless defined $ipPrefix;
+    }
+
+    my @conf;
+    push @conf, "PRIVATE_NETWORK=1\n";
+    push @conf, "HOST_ADDRESS=$hostAddress\n";
+    push @conf, "LOCAL_ADDRESS=$localAddress\n";
+    push @conf, "HOST_BRIDGE=$bridge\n";
+    push @conf, "HOST_PORT=$port\n";
+    push @conf, "AUTO_START=$autoStart\n";
+    push @conf, "FLAKE=$flake\n" if defined $flake;
+    write_file($confFile, \@conf);
+
+    close($lock);
+
+    print STDERR "host IP is $hostAddress, container IP is $localAddress\n";
+
+    # The per-container directory is restricted to prevent users on
+    # the host from messing with guest users who happen to have the
+    # same uid.
+    my $profileDir = "/nix/var/nix/profiles/per-container";
+    mkpath($profileDir, 0, 0700);
+    $profileDir = "$profileDir/$containerName";
+    mkpath($profileDir, 0, 0755);
+
+    # Build/set the initial configuration.
+    if (defined $flake) {
+        buildFlake();
+    }
+
+    if (defined $systemPath) {
+        system("nix-env", "-p", "$profileDir/system", "--set", $systemPath) == 0
+            or do {
+                clearContainerState($profileDir, "$profileDir/$containerName", $root, $confFile);
+                die "$0: failed to set initial container configuration\n";
+            };
+    } else {
+        mkpath("$root/etc/nixos", 0, 0755);
+
+        my $nixenvF = $nixosPath // "<nixpkgs/nixos>";
+        my $nixosConfigFile = "$root/etc/nixos/configuration.nix";
+        writeNixOSConfig $nixosConfigFile;
+
+        system("nix-env", "-p", "$profileDir/system",
+               "-I", "nixos-config=$nixosConfigFile", "-f", "$nixenvF",
+               "--set", "-A", "system", @nixFlags) == 0
+            or do {
+                clearContainerState($profileDir, "$profileDir/$containerName", $root, $confFile);
+                die "$0: failed to build initial container configuration\n"
+            };
+    }
+
+    print "$containerName\n" if $ensureUniqueName;
+    exit 0;
+}
+
+my $root = "$stateDirectory/$containerName";
+my $profileDir = "/nix/var/nix/profiles/per-container/$containerName";
+my $gcRootsDir = "/nix/var/nix/gcroots/per-container/$containerName";
+my $confFile = "$configurationDirectory/$containerName.conf";
+if (!-e $confFile) {
+    if ($action eq "destroy") {
+        exit 0;
+    } elsif ($action eq "status") {
+        print "gone\n";
+    }
+    die "$0: container ‘$containerName’ does not exist\n" ;
+}
+
+# Return the PID of the init process of the container.
+sub getLeader {
+    my $s = `machinectl show "$containerName" -p Leader`;
+    chomp $s;
+    $s =~ /^Leader=(\d+)$/ or die "unable to get container's main PID\n";
+    return int($1);
+}
+
+sub isContainerRunning {
+    my $status = `systemctl show 'container\@$containerName'`;
+    return $status =~ /ActiveState=active/;
+}
+
+sub terminateContainer {
+    my $leader = getLeader;
+    system("machinectl", "terminate", $containerName) == 0
+        or die "$0: failed to terminate container\n";
+    # Wait for the leader process to exit
+    # TODO: As for any use of PIDs for process control where the process is
+    #       not a direct child of ours, this can go wrong when the pid gets
+    #       recycled after a PID overflow.
+    #       Relying entirely on some form of UUID provided by machinectl
+    #       instead of PIDs would remove this risk.
+    #       See https://github.com/NixOS/nixpkgs/pull/32992#discussion_r158586048
+    while ( kill 0, $leader ) { Time::HiRes::sleep(0.1) }
+}
+
+sub startContainer {
+    system("systemctl", "start", "container\@$containerName") == 0
+        or die "$0: failed to start container\n";
+}
+
+sub stopContainer {
+    system("systemctl", "stop", "container\@$containerName") == 0
+        or die "$0: failed to stop container\n";
+}
+
+sub restartContainer {
+    stopContainer;
+    startContainer;
+}
+
+# Run a command in the container.
+sub runInContainer {
+    my @args = @_;
+    my $leader = getLeader;
+    exec($nsenter, "-t", $leader, "-m", "-u", "-i", "-n", "-p", "--", @args);
+    die "cannot run ‘nsenter’: $!\n";
+}
+
+# Remove a directory while recursively unmounting all mounted filesystems within
+# that directory and unmounting/removing that directory afterwards as well.
+#
+# NOTE: If the specified path is a mountpoint, its contents will be removed,
+#       only mountpoints underneath that path will be unmounted properly.
+sub safeRemoveTree {
+    my ($path) = @_;
+    system("find", $path, "-mindepth", "1", "-xdev",
+           "(", "-type", "d", "-exec", "mountpoint", "-q", "{}", ";", ")",
+           "-exec", "umount", "-fR", "{}", "+");
+    system("rm", "--one-file-system", "-rf", $path);
+    if (-e $path) {
+        system("umount", "-fR", $path);
+        system("rm", "--one-file-system", "-rf", $path);
+    }
+}
+
+if ($action eq "destroy") {
+    die "$0: cannot destroy declarative container (remove it from your configuration.nix instead)\n"
+        unless POSIX::access($confFile, &POSIX::W_OK);
+
+    terminateContainer if (isContainerRunning);
+
+    clearContainerState($profileDir, $gcRootsDir, $root, $confFile);
+}
+
+elsif ($action eq "restart") {
+    restartContainer;
+}
+
+elsif ($action eq "start") {
+    startContainer;
+}
+
+elsif ($action eq "stop") {
+    stopContainer;
+}
+
+elsif ($action eq "terminate") {
+    terminateContainer;
+}
+
+elsif ($action eq "status") {
+    print isContainerRunning() ? "up" : "down", "\n";
+}
+
+elsif ($action eq "update") {
+
+    # Unless overriden on the command line, rebuild the flake recorded
+    # in the container config file. FIXME: read the container config
+    # in a more sensible way.
+    if (!defined $flake && !defined $configFile && !defined $extraConfig) {
+        my $s = read_file($confFile);
+        $s =~ /^FLAKE=(.*)$/m;
+        $flake = $1;
+    }
+
+    if (defined $flake) {
+        buildFlake();
+        system("nix-env", "-p", "$profileDir/system", "--set", $systemPath) == 0
+            or die "$0: failed to set container configuration\n";
+    } else {
+
+        my $nixosConfigFile = "$root/etc/nixos/configuration.nix";
+
+        # FIXME: may want to be more careful about clobbering the existing
+        # configuration.nix.
+        if ((defined $extraConfig && $extraConfig ne "") ||
+            (defined $configFile && $configFile ne "")) {
+            writeNixOSConfig $nixosConfigFile;
+        }
+
+        my $nixenvF = $nixosPath // "<nixpkgs/nixos>";
+        system("nix-env", "-p", "$profileDir/system",
+               "-I", "nixos-config=$nixosConfigFile", "-f", $nixenvF,
+               "--set", "-A", "system", @nixFlags) == 0
+            or die "$0: failed to build container configuration\n";
+    }
+
+    if (isContainerRunning) {
+        print STDERR "reloading container...\n";
+        system("systemctl", "reload", "container\@$containerName") == 0
+            or die "$0: failed to reload container\n";
+    }
+}
+
+elsif ($action eq "login") {
+    exec("machinectl", "login", "--", $containerName);
+}
+
+elsif ($action eq "root-login") {
+    runInContainer("@su@", "root", "-l");
+}
+
+elsif ($action eq "run") {
+    shift @ARGV; shift @ARGV;
+    # Escape command.
+    my $s = join(' ', map { s/'/'\\''/g; "'$_'" } @ARGV);
+    runInContainer("@su@", "root", "-l", "-c", "exec " . $s);
+}
+
+elsif ($action eq "show-ip") {
+    my $s = read_file($confFile) or die;
+    $s =~ /^LOCAL_ADDRESS=([0-9\.]+)(\/[0-9]+)?$/m
+        or $s =~ /^LOCAL_ADDRESS6=([0-9a-f:]+)(\/[0-9]+)?$/m
+        or die "$0: cannot get IP address\n";
+    print "$1\n";
+}
+
+elsif ($action eq "show-host-key") {
+    my $fn = "$root/etc/ssh/ssh_host_ed25519_key.pub";
+    $fn = "$root/etc/ssh/ssh_host_ecdsa_key.pub" unless -e $fn;
+    exit 1 if ! -f $fn;
+    print read_file($fn);
+}
+
+else {
+    die "$0: unknown action ‘$action’\n";
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/nixos-shell/default.nix b/nixpkgs/pkgs/tools/virtualization/nixos-shell/default.nix
new file mode 100644
index 000000000000..6f7340835523
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/nixos-shell/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, nix, jq, fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "nixos-shell";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "Mic92";
+    repo = "nixos-shell";
+    rev = version;
+    sha256 = "sha256-5hHkokfSY3Z4VqjNm/j564l9Bgynw5H5McX0hTruGoI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/nixos-shell \
+      --prefix PATH : ${lib.makeBinPath [ nix jq ]}
+  '';
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Spawns lightweight nixos vms in a shell";
+    inherit (src.meta) homepage;
+    license = licenses.mit;
+    maintainers = with maintainers; [ mic92 ];
+    platforms = platforms.unix;
+    mainProgram = "nixos-shell";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/onmetal-image/default.nix b/nixpkgs/pkgs/tools/virtualization/onmetal-image/default.nix
new file mode 100644
index 000000000000..2b535dfb6d93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/onmetal-image/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "onmetal-image";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "onmetal";
+    repo = "onmetal-image";
+    rev = "v${version}";
+    hash = "sha256-KvOBvAIE9V2bj5prdcc8G5ifHsvybHBCYWrI4fWtdvE=";
+  };
+
+  vendorHash = "sha256-aCL8hLcBnIs5BJM7opIwcOLvOS3uL9mYXs1vOAMlX/M=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/onmetal-image
+
+    installShellCompletion --cmd onmetal-image \
+      --bash <($out/bin/onmetal-image completion bash) \
+      --fish <($out/bin/onmetal-image completion fish) \
+      --zsh <($out/bin/onmetal-image completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Onmetal OCI Image Specification, Library and Tooling";
+    homepage = "https://github.com/onmetal/onmetal-image";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    mainProgram = "onmetal-image";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/ovftool/default.nix b/nixpkgs/pkgs/tools/virtualization/ovftool/default.nix
new file mode 100644
index 000000000000..9bdf4429ff16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/ovftool/default.nix
@@ -0,0 +1,150 @@
+{ lib, stdenv, fetchurl, system ? builtins.currentSystem, ovftoolBundles ? {}
+, autoPatchelfHook, makeWrapper, unzip
+, glibc, c-ares, libxcrypt-legacy, expat, icu60, xercesc, zlib
+}:
+
+let
+  version = "4.6.2-22220919";
+  version_i686 = "4.6.0-21452615";
+
+  ovftoolZipUnpackPhase = ''
+    runHook preUnpack
+    unzip ${ovftoolSource}
+    extracted=ovftool/
+    if [ -d "$extracted" ]; then
+      echo "ovftool extracted successfully" >&2
+    else
+      echo "Could not find $extracted - are you sure this is ovftool?" >&2
+      exit 1
+    fi
+    runHook postUnpack
+  '';
+
+  ovftoolSystems = let
+    baseUrl = "https://vdc-download.vmware.com/vmwb-repository/dcr-public";
+  in {
+    "i686-linux" = rec {
+      name = "VMware-ovftool-${version_i686}-lin.i386.zip";
+      url = "${baseUrl}/7254abb2-434d-4f5d-83e2-9311ced9752e/57e666a2-874c-48fe-b1d2-4b6381f7fe97/${name}";
+      hash = "sha256-qEOr/3SW643G5ZQQNJTelZbUxB8HmxPd5uD+Gqsoxz0=";
+      unpackPhase = ovftoolZipUnpackPhase;
+    };
+    "x86_64-linux" = rec {
+      name = "VMware-ovftool-${version}-lin.x86_64.zip";
+      url = "${baseUrl}/8a93ce23-4f88-4ae8-b067-ae174291e98f/c609234d-59f2-4758-a113-0ec5bbe4b120/${name}";
+      hash = "sha256-3B1cUDldoTqLsbSARj2abM65nv+Ot0z/Fa35/klJXEY=";
+      unpackPhase = ovftoolZipUnpackPhase;
+    };
+  };
+
+  ovftoolSystem = if builtins.hasAttr system ovftoolSystems then
+                    ovftoolSystems.${system}
+                  else throw "System '${system}' is unsupported by ovftool";
+
+  ovftoolSource = if builtins.hasAttr system ovftoolBundles then
+                    ovftoolBundles.${system}
+                  else
+                    fetchurl {
+                      inherit (ovftoolSystem) name url hash;
+                    };
+in
+stdenv.mkDerivation rec {
+  pname = "ovftool";
+  inherit version;
+
+  src = ovftoolSource;
+
+  buildInputs = [
+    glibc
+    libxcrypt-legacy
+    c-ares
+    expat
+    icu60
+    xercesc
+    zlib
+  ];
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper unzip ];
+
+  preferLocalBuild = true;
+
+  sourceRoot = ".";
+
+  unpackPhase = ovftoolSystem.unpackPhase;
+
+  # Expects a directory named 'ovftool' containing the ovftool install.
+  # Based on https://aur.archlinux.org/packages/vmware-ovftool/
+  # with the addition of a libexec directory and a Nix-style binary wrapper.
+  installPhase = ''
+    runHook preInstall
+    if [ -d ovftool ]; then
+      # Ensure we're in the staging directory
+      cd ovftool
+    fi
+    # libraries
+    install -m 755 -d "$out/lib/${pname}"
+    # These all appear to be VMWare proprietary except for libgoogleurl and libcurl.
+    # The rest of the libraries that the installer extracts are omitted here,
+    # and provided in buildInputs. Since libcurl depends on VMWare's OpenSSL,
+    # we have to use both here too.
+    #
+    # FIXME: can we replace libgoogleurl? Possibly from Chromium?
+    # FIXME: tell VMware to use a modern version of OpenSSL.
+    #
+    install -m 644 -t "$out/lib/${pname}" \
+      libgoogleurl.so.59 \
+      libssoclient.so \
+      libvim-types.so libvmacore.so libvmomi.so \
+      libcurl.so.4 libcrypto.so.1.0.2 libssl.so.1.0.2
+    # libexec binaries
+    install -m 755 -d "$out/libexec/${pname}"
+    install -m 755 -t "$out/libexec/${pname}" ovftool.bin
+    install -m 644 -t "$out/libexec/${pname}" icudt44l.dat
+    # libexec resources
+    for subdir in "certs" "env" "env/en" "schemas/DMTF" "schemas/vmware"; do
+      install -m 755 -d "$out/libexec/${pname}/$subdir"
+      install -m 644 -t "$out/libexec/${pname}/$subdir" "$subdir"/*.*
+    done
+    # EULA/OSS files
+    install -m 755 -d "$out/share/licenses/${pname}"
+    install -m 644 -t "$out/share/licenses/${pname}" \
+      "vmware.eula" "vmware-eula.rtf" "open_source_licenses.txt"
+    # documentation files
+    install -m 755 -d "$out/share/doc/${pname}"
+    install -m 644 -t "$out/share/doc/${pname}" "README.txt"
+    # binary wrapper; note that LC_CTYPE is defaulted to en_US.UTF-8 by
+    # VMWare's wrapper script. We use C.UTF-8 instead.
+    install -m 755 -d "$out/bin"
+    makeWrapper "$out/libexec/${pname}/ovftool.bin" "$out/bin/ovftool" \
+      --set-default LC_CTYPE C.UTF-8 \
+      --prefix LD_LIBRARY_PATH : "$out/lib"
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    addAutoPatchelfSearchPath "$out/lib"
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    # This is a NixOS 22.11 image (doesn't actually matter) with a 1 MiB root disk that's all zero.
+    # Make sure that it converts properly.
+    mkdir -p ovftool-check
+    cd ovftool-check
+
+    $out/bin/ovftool ${./installCheckPhase.ova} nixos.ovf
+    if [ ! -f nixos.ovf ] || [ ! -f nixos.mf ] || [ ! -f nixos-disk1.vmdk ]; then
+      exit 1
+    fi
+  '';
+
+  meta = with lib; {
+    description = "VMWare tools for working with OVF, OVA, and VMX images";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ numinit wolfangaukang ];
+    platforms = builtins.attrNames ovftoolSystems;
+    mainProgram = "ovftool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/ovftool/installCheckPhase.ova b/nixpkgs/pkgs/tools/virtualization/ovftool/installCheckPhase.ova
new file mode 100644
index 000000000000..3bb164029925
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/ovftool/installCheckPhase.ova
Binary files differdiff --git a/nixpkgs/pkgs/tools/virtualization/reg/default.nix b/nixpkgs/pkgs/tools/virtualization/reg/default.nix
new file mode 100644
index 000000000000..545b208035b3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/reg/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchpatch
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "reg";
+  version = "0.16.1";
+
+  src = fetchFromGitHub {
+    owner = "genuinetools";
+    repo = "reg";
+    rev = "v${version}";
+    hash = "sha256-tfBetjoJkr84XLEEcfdRTtc0UZ4m/uRH1Fpr91lQn8o=";
+  };
+
+  patches = [
+    # https://github.com/genuinetools/reg/pull/218
+    (fetchpatch {
+      name = "update-x-sys-for-go-1.18-on-aarch64-darwin.patch";
+      url = "https://github.com/genuinetools/reg/commit/f37b04ad8be47f1e68ef9b2c5906324d7096231e.patch";
+      hash = "sha256-wmBjPdrpNpxx//I+d+k8DNR11TmyXxb84vXR/MrYHKA=";
+    })
+    (fetchpatch {
+      name = "update-vendored-dependencies.patch";
+      url = "https://github.com/genuinetools/reg/commit/8bb04bc3fd41c089716e65ee905c6feac8bda5a0.patch";
+      hash = "sha256-5nZaayy0xu7sOJHVCp6AotINiF7vXk2Jic8SR8ZrH/g=";
+    })
+  ];
+
+  vendorHash = null;
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Docker registry v2 command line client and repo listing generator with security checks";
+    homepage = "https://github.com/genuinetools/reg";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ereslibre ];
+    mainProgram = "reg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/rootlesskit/default.nix b/nixpkgs/pkgs/tools/virtualization/rootlesskit/default.nix
new file mode 100644
index 000000000000..cfd89ee451e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/rootlesskit/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub, nix-update-script, nixosTests }:
+
+buildGoModule rec {
+  pname = "rootlesskit";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "rootless-containers";
+    repo = "rootlesskit";
+    rev = "v${version}";
+    hash = "sha256-QjGjP7GiJiP2bJE707Oc4wZ9o/gRmSboK9xGbbyG5EM=";
+  };
+
+  vendorHash = "sha256-mNuj4/e1qH3P5MfbwPLddXWhc8aDcQuoSSHZ+S+zKWw=";
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = nixosTests.docker-rootless;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/rootless-containers/rootlesskit";
+    description = ''Kind of Linux-native "fake root" utility, made for mainly running Docker and Kubernetes as an unprivileged user'';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/supermin/default.nix b/nixpkgs/pkgs/tools/virtualization/supermin/default.nix
new file mode 100644
index 000000000000..b7600f6bb898
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/supermin/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl
+, cpio, e2fsprogs, perl, pkg-config, ocamlPackages
+, glibc
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "supermin";
+  version = "5.2.2";
+
+  src = fetchurl {
+    url = "https://download.libguestfs.org/supermin/${lib.versions.majorMinor finalAttrs.version}-stable/supermin-${finalAttrs.version}.tar.gz";
+    sha256 = "zjkh02NcgWjPt8oMWoK51c71srJx+Et3bWO4u77sNY4=";
+  };
+
+  nativeBuildInputs = [ cpio e2fsprogs perl pkg-config ]
+    ++ (with ocamlPackages; [ findlib ocaml ]);
+  buildInputs = lib.optionals stdenv.hostPlatform.isGnu [ glibc glibc.static ];
+
+  postPatch = ''
+    patchShebangs src/bin2c.pl
+  '';
+
+  meta = with lib; {
+    homepage = "https://libguestfs.org/supermin.1.html";
+    description = "Tool for creating and building supermin appliances";
+    maintainers = with maintainers; [ qyliss ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    mainProgram = "supermin";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/virtualization/udocker/default.nix b/nixpkgs/pkgs/tools/virtualization/udocker/default.nix
new file mode 100644
index 000000000000..e13376211a89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/udocker/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitHub
+, singularity
+, python3Packages
+, fetchpatch
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "udocker";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "indigo-dc";
+    repo = "udocker";
+    rev = "v${version}";
+    sha256 = "0dfsjgidsnah8nrclrq10yz3ja859123z81kq4zdifbrhnrn5a2x";
+  };
+
+  # crun patchelf proot runc fakechroot
+  # are download statistically linked during runtime
+  buildInputs = [
+    singularity
+  ] ++ (with python3Packages; [
+    pytest-runner
+    pycurl
+  ]);
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/indigo-dc/udocker/commit/9f7d6c5f9a3925bf87d000603c5b306d73bb0fa3.patch";
+      sha256 = "sha256-fiqvVqfdVIlILbSs6oDWmbWU9piZEI2oiAKUcmecx9Q=";
+    })
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    "test_02__load_structure"
+    "test_05__get_volume_bindings"
+  ];
+
+  disabledTestPaths = [
+    # Network
+    "tests/unit/test_curl.py"
+    "tests/unit/test_dockerioapi.py"
+  ];
+
+  meta = with lib; {
+    description = "basic user tool to execute simple docker containers in user space without root privileges";
+    homepage = "https://indigo-dc.gitbooks.io/udocker";
+    license = licenses.asl20;
+    maintainers = [ maintainers.bzizou ];
+    platforms = platforms.linux;
+    mainProgram = "udocker";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/uefi-run/default.nix b/nixpkgs/pkgs/tools/virtualization/uefi-run/default.nix
new file mode 100644
index 000000000000..9d954d9ed03d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/uefi-run/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "uefi-run";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "Richard-W";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-tR547osqw18dCMHJLqJ8AQBelbv8yCl7rAqslu+vnDQ=";
+  };
+
+  cargoHash = "sha256-s1Kbc3JHoYy0UJwNfSunIdQ3xHjlQaut/Cb0JSYyB9g=";
+
+  meta = with lib; {
+    description = "Directly run UEFI applications in qemu";
+    homepage = "https://github.com/Richard-W/uefi-run";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "uefi-run";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/vpsfree-client/Gemfile b/nixpkgs/pkgs/tools/virtualization/vpsfree-client/Gemfile
new file mode 100644
index 000000000000..6bcacb5ee900
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/vpsfree-client/Gemfile
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "vpsfree-client", "0.17.1"
diff --git a/nixpkgs/pkgs/tools/virtualization/vpsfree-client/Gemfile.lock b/nixpkgs/pkgs/tools/virtualization/vpsfree-client/Gemfile.lock
new file mode 100644
index 000000000000..88d4f92a5b9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/vpsfree-client/Gemfile.lock
@@ -0,0 +1,58 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.0.5)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    concurrent-ruby (1.2.2)
+    curses (1.4.4)
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
+    haveapi-client (0.16.3)
+      activesupport (>= 4.0)
+      highline (~> 2.0.3)
+      json
+      require_all (~> 2.0.0)
+      rest-client (~> 2.1.0)
+      ruby-progressbar (~> 1.11.0)
+    highline (2.0.3)
+    http-accept (1.7.0)
+    http-cookie (1.0.5)
+      domain_name (~> 0.5)
+    i18n (1.14.1)
+      concurrent-ruby (~> 1.0)
+    json (2.6.3)
+    mime-types (3.4.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2023.0218.1)
+    minitest (5.18.0)
+    netrc (0.11.0)
+    require_all (2.0.0)
+    rest-client (2.1.0)
+      http-accept (>= 1.7.0, < 2.0)
+      http-cookie (>= 1.0.2, < 2.0)
+      mime-types (>= 1.16, < 4.0)
+      netrc (~> 0.8)
+    ruby-progressbar (1.11.0)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.8.2)
+    vpsadmin-client (3.0.0.master.20221118.pre.1.ac358990)
+      curses
+      haveapi-client (~> 0.16.1)
+      json
+    vpsfree-client (0.17.1)
+      vpsadmin-client (= 3.0.0.master.20221118.pre.1.ac358990)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  vpsfree-client (= 0.17.1)
+
+BUNDLED WITH
+   2.4.13
diff --git a/nixpkgs/pkgs/tools/virtualization/vpsfree-client/default.nix b/nixpkgs/pkgs/tools/virtualization/vpsfree-client/default.nix
new file mode 100644
index 000000000000..cffdc267e53c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/vpsfree-client/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "vpsfree-client";
+  gemdir = ./.;
+  exes = [ "vpsfreectl" ];
+
+  passthru.updateScript = bundlerUpdateScript "vpsfree-client";
+
+  meta = with lib; {
+    description = "Ruby API and CLI for the vpsFree.cz API";
+    homepage = "https://github.com/vpsfreecz/vpsfree-client";
+    maintainers = with maintainers; [ aither64 zimbatm ];
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    mainProgram = "vpsfreectl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/vpsfree-client/gemset.nix b/nixpkgs/pkgs/tools/virtualization/vpsfree-client/gemset.nix
new file mode 100644
index 000000000000..241fb30149d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/vpsfree-client/gemset.nix
@@ -0,0 +1,233 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c7k5i6531z5il4q1jnbrv7x7zcl3bgnxp5fzl71rzigk6zn53ym";
+      type = "gem";
+    };
+    version = "7.0.5";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  curses = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00y9g79lzfffxarj3rmhnkblsnyx7izx91mh8c1sdcs9y2pdfq53";
+      type = "gem";
+    };
+    version = "1.4.4";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  haveapi-client = {
+    dependencies = ["activesupport" "highline" "json" "require_all" "rest-client" "ruby-progressbar"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iz0k9cwva8icc040k5m9ah0cz08jg6x51h6ahdccw6azy8h93i1";
+      type = "gem";
+    };
+    version = "0.16.3";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  http-accept = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09m1facypsdjynfwrcv19xcb1mqg8z6kk31g8r33pfxzh838c9n6";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pky3vzaxlgm9gw5wlqwwi7wsw3jrglrfflrppvvnsrlaiz043z9";
+      type = "gem";
+    };
+    version = "3.2023.0218.1";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ic7i5z88zcaqnpzprf7saimq2f6sad57g5mkkqsrqrcd6h3mx06";
+      type = "gem";
+    };
+    version = "5.18.0";
+  };
+  netrc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  require_all = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sjf2vigdg4wq7z0xlw14zyhcz4992s05wgr2s58kjgin12bkmv8";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  rest-client = {
+    dependencies = ["http-accept" "http-cookie" "mime-types" "netrc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qs74yzl58agzx9dgjhcpgmzfn61fqkk33k1js2y5yhlvc5l19im";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  ruby-progressbar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02nmaw7yx9kl7rbaan5pl8x5nn0y4j5954mzrkzi9i3dhsrps4nc";
+      type = "gem";
+    };
+    version = "1.11.0";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch";
+      type = "gem";
+    };
+    version = "0.0.8.2";
+  };
+  vpsadmin-client = {
+    dependencies = ["curses" "haveapi-client" "json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rqxvfmcbpi8wcmgwdl34il3a4gg3q3zy8pyyj0kk0v8lly0wb6d";
+      type = "gem";
+    };
+    version = "3.0.0.master.20221118.pre.1.ac358990";
+  };
+  vpsfree-client = {
+    dependencies = ["vpsadmin-client"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a4fmimzrysjcnvw2jz7f5hdslmy2aaipcgiisjkhqazw6nlbd8w";
+      type = "gem";
+    };
+    version = "0.17.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/default.nix b/nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/default.nix
new file mode 100644
index 000000000000..e1b89a562a8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, runtimeShell
+}:
+
+buildGoModule rec {
+  pname = "xe-guest-utilities";
+  version = "8.4.0";
+
+  src = fetchFromGitHub {
+    owner = "xenserver";
+    repo = "xe-guest-utilities";
+    rev = "v${version}";
+    hash = "sha256-LpZx+Km2qRywYK/eFLP3aCDku6K6HC4+MzEODH+8Gvs=";
+  };
+
+  deleteVendor = true;
+  vendorHash = "sha256-X/BI+ZhoqCGCmJfccyEBVgZc70aRTp3rL5j+rBWG5fE=";
+
+  postPatch = ''
+    substituteInPlace mk/xen-vcpu-hotplug.rules \
+      --replace "/bin/sh" "${runtimeShell}"
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    make RELEASE=nixpkgs
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dt "$out"/bin build/stage/usr/{,s}bin/*
+    install -Dt "$out"/etc/udev/rules.d build/stage/etc/udev/rules.d/*
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "XenServer guest utilities";
+    homepage = "https://github.com/xenserver/xe-guest-utilities";
+    license = lib.licenses.bsd2;
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/xen-guest-agent/default.nix b/nixpkgs/pkgs/tools/virtualization/xen-guest-agent/default.nix
new file mode 100644
index 000000000000..52924b2b624f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/xen-guest-agent/default.nix
@@ -0,0 +1,40 @@
+{
+  lib,
+  fetchFromGitLab,
+  rustPlatform,
+  llvmPackages,
+  xen-light,
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "xen-guest-agent";
+  version = "0.3.0";
+
+  src = fetchFromGitLab {
+    owner = "xen-project";
+    repo = pname;
+    rev = version;
+    hash = "sha256-Csio24ofj+p0j/R0av/28P/KCNXhmcF+r8xGJEfoHjQ=";
+  };
+
+  cargoHash = "sha256-XWDDzSu88zCIwMuvkFjCb98DzXHvW2IP9u3EbpAMIgw=";
+
+  env = {
+    LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
+    BINDGEN_EXTRA_CLANG_ARGS = "-isystem ${xen-light}/include";
+    RUSTFLAGS = "-L ${xen-light}/lib";
+  };
+
+  nativeBuildInputs = [llvmPackages.clang xen-light];
+
+  postFixup = ''
+    patchelf $out/bin/xen-guest-agent --add-rpath ${xen-light}/lib
+  '';
+
+  meta = with lib; {
+    description = "Xen agent running in Linux/BSDs (POSIX) VMs";
+    homepage = "https://gitlab.com/xen-project/xen-guest-agent";
+    license = licenses.agpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [matdibu];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/xva-img/default.nix b/nixpkgs/pkgs/tools/virtualization/xva-img/default.nix
new file mode 100644
index 000000000000..bb5c9d5a5992
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/xva-img/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, cmake, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "xva-img";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "eriklax";
+    repo = "xva-img";
+    rev = version;
+    sha256 = "sha256-QHCKGsHSMT2P64No1IUCjenm1XZMSgEvsJGJOyHFZS8=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ openssl ];
+
+  meta = {
+    maintainers = with lib.maintainers; [ lheckemann willibutz ];
+    description = "Tool for converting Xen images to raw and back";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    mainProgram = "xva-img";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/aw-watcher-window-wayland/Cargo.lock b/nixpkgs/pkgs/tools/wayland/aw-watcher-window-wayland/Cargo.lock
new file mode 100644
index 000000000000..b1cc23695b30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/aw-watcher-window-wayland/Cargo.lock
@@ -0,0 +1,1689 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "appdirs"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d512b3e61196d27562dcc71446a58ba8a93d3bed2a03a87f96101b9a17f1d378"
+dependencies = [
+ "ole32-sys",
+ "shell32-sys",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "aw-client-rust"
+version = "0.1.0"
+source = "git+https://github.com/ActivityWatch/aw-server-rust.git#bd547add68b1028f018f25727799a48acb3188a2"
+dependencies = [
+ "aw-models",
+ "chrono",
+ "gethostname 0.4.1",
+ "reqwest",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "aw-models"
+version = "0.1.0"
+source = "git+https://github.com/ActivityWatch/aw-server-rust.git#bd547add68b1028f018f25727799a48acb3188a2"
+dependencies = [
+ "chrono",
+ "log",
+ "schemars",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "aw-watcher-window-wayland"
+version = "0.1.0"
+dependencies = [
+ "appdirs",
+ "aw-client-rust",
+ "chrono",
+ "file-lock",
+ "gethostname 0.2.3",
+ "getopts",
+ "lazy_static",
+ "mio 0.6.23",
+ "serde_json",
+ "smallvec",
+ "timerfd",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cxx"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "file-lock"
+version = "1.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16486239b3741480cef090b6f9924faf5dd5481022c6f266a51fab1a92971a2"
+dependencies = [
+ "gcc",
+ "libc",
+ "mktemp",
+ "nix 0.11.1",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608"
+
+[[package]]
+name = "futures-io"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364"
+
+[[package]]
+name = "futures-task"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366"
+
+[[package]]
+name = "futures-util"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gcc"
+version = "0.3.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a329e22866dd78b35d2c639a4a23d7b950aeae300dfd79f4fb19f74055c2404"
+dependencies = [
+ "libc",
+ "windows",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
+
+[[package]]
+name = "itoa"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "mktemp"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77001ceb9eed65439f3dc2a2543f9ba1417d912686bf224a7738d0966e6dcd69"
+dependencies = [
+ "uuid",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "nix"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "becb657d662f1cd2ef38c7ad480ec6b8cf9e96b27adb543e594f9cf0f2e6065c"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if 0.1.10",
+ "libc",
+ "void",
+]
+
+[[package]]
+name = "nix"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if 0.1.10",
+ "libc",
+ "void",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "ole32-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d2c49021782e5233cd243168edfa8037574afed4eba4bbaf538b3d8d1789d8c"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "518915b97df115dd36109bfa429a48b8f737bd05508cf9588977b599648926d2"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "666416d899cf077260dac8698d60a60b435a46d57e82acb1be3d0dad87284e5b"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.3.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c"
+dependencies = [
+ "libc",
+ "rand 0.4.6",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rustc-serialize"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
+
+[[package]]
+name = "rustix"
+version = "0.36.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "schemars"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02c613288622e5f0c3fdc5dbd4db1c5fbe752746b1d1a56a0630b78fd00de44f"
+dependencies = [
+ "chrono",
+ "dyn-clone",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars_derive"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109da1e6b197438deb6db99952990c7f959572794b80ff93707d55a232545e7c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn",
+]
+
+[[package]]
+name = "scratch"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2"
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "shell32-sys"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ee04b46101f57121c9da2b151988283b6beb79b34f5bb29a58ee48cb695122c"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "timerfd"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0664936efa25f2bbe03ca25b62c50f5f492abec07e59d6dcf45131014b33483f"
+dependencies = [
+ "rustix",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio 0.8.6",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "uuid"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78c590b5bd79ed10aad8fb75f078a59d8db445af6c743e55c4a53227fc01c13f"
+dependencies = [
+ "rand 0.3.23",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "wayland-client"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bcc929c26d59a655b0d2cd337299326acc1f6e3d4434c3ae2d6c78d32290ca4"
+dependencies = [
+ "bitflags",
+ "downcast-rs",
+ "libc",
+ "nix 0.15.0",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "539cdd0c296802332d763ff663739a7f83bdf67b3df58e99fe0215e96a495142"
+dependencies = [
+ "nix 0.15.0",
+ "smallvec",
+ "spin",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43ea5ea1a117137d72c0c197431d198d69783b5e8ca996b0583c98e10b44d426"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "537500923d50be11d95a63c4cb538145e4c82edf61296b7debc1f94a1a6514ed"
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.43.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04662ed0e3e5630dfa9b26e4cb823b817f1a9addda855d973a9458c236556244"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
diff --git a/nixpkgs/pkgs/tools/wayland/aw-watcher-window-wayland/default.nix b/nixpkgs/pkgs/tools/wayland/aw-watcher-window-wayland/default.nix
new file mode 100644
index 000000000000..6ffaf29a77d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/aw-watcher-window-wayland/default.nix
@@ -0,0 +1,40 @@
+{
+  lib,
+  fetchFromGitHub,
+  rustPlatform,
+  pkg-config,
+  openssl,
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "aw-watcher-window-wayland";
+  version = "6108ad3df8e157965a43566fa35cdaf144b1c51b";
+
+  src = fetchFromGitHub {
+    owner = "ActivityWatch";
+    repo = pname;
+    rev = version;
+    hash = "sha256-xl9+k6xJp5/t1QPOYfnBLyYprhhrzjzByDKkT3dtVVQ=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "aw-client-rust-0.1.0" = "sha256-9tlVesnBeTlazKE2UAq6dzivjo42DT7p7XMuWXHHlnU=";
+    };
+  };
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ];
+
+  meta = with lib; {
+    description = "WIP window and afk watcher for wayland ";
+    homepage = "https://github.com/ActivityWatch/aw-watcher-window-wayland";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ esau79p ];
+    mainProgram = "aw-watcher-window-wayland";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/chayang/default.nix b/nixpkgs/pkgs/tools/wayland/chayang/default.nix
new file mode 100644
index 000000000000..d92a729bd28e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/chayang/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, meson
+, ninja
+, pkg-config
+, wayland-scanner
+, wayland-protocols
+, wayland
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "chayang";
+  version = "0.1.0";
+
+  src = fetchFromSourcehut {
+    owner = "~emersion";
+    repo = "chayang";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-3Vu9/Bu2WQe2Yx/2BK25pEpuPNwX6g3qoFUMznCFHeI=";
+  };
+
+  strictDeps = true;
+
+  depsBuildBuild = [
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    wayland-protocols
+    wayland
+  ];
+
+  meta = with lib; {
+    description = "Gradually dim the screen on Wayland";
+    homepage = "https://git.sr.ht/~emersion/chayang/";
+    license = licenses.mit;
+    longDescription = ''
+      Gradually dim the screen on Wayland.
+      Can be used to implement a grace period before locking the session.
+    '';
+    maintainers = with maintainers; [ mxkrsv ];
+    platforms = platforms.linux;
+    mainProgram = "chayang";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/wayland/clapboard/default.nix b/nixpkgs/pkgs/tools/wayland/clapboard/default.nix
new file mode 100644
index 000000000000..4f14de873375
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/clapboard/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "clapboard";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "bjesus";
+    repo = "clapboard";
+    rev = "v${version}";
+    hash = "sha256-/4HBhsW2C3xYzKVw9TuSj8b7LdirWbNg4OxLm/ebf40=";
+  };
+
+  cargoHash = "sha256-bq+r2J2lhhZKTEV69OnsXiAGKspOZ0kF0q2hDnbIXn8=";
+
+  meta = with lib; {
+    description = "Wayland clipboard manager that will make you clap";
+    homepage = "https://github.com/bjesus/clapboard";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    platforms = platforms.linux;
+    mainProgram = "clapboard";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/cliphist/default.nix b/nixpkgs/pkgs/tools/wayland/cliphist/default.nix
new file mode 100644
index 000000000000..7485d79bf7bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/cliphist/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "cliphist";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "sentriz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-U78G7X9x3GQg3qcBINni8jWa0wSXQu+TjYChuRPPcLE=";
+  };
+
+  vendorHash = "sha256-O4jOFWygmFxm8ydOq1xtB1DESyWpFGXeSp8a6tT+too=";
+
+  meta = with lib; {
+    description = "Wayland clipboard manager";
+    homepage = "https://github.com/sentriz/cliphist";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "cliphist";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/clipman/default.nix b/nixpkgs/pkgs/tools/wayland/clipman/default.nix
new file mode 100644
index 000000000000..05eab08da9b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/clipman/default.nix
@@ -0,0 +1,42 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, wl-clipboard
+, makeWrapper
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "clipman";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "chmouel";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-lahya0w1bgcTnpxANxNT2MIWu5yVUdqQl19kQzwUdAw=";
+  };
+
+  vendorHash = "sha256-Z/sVCJz/igPDdeczC6pemLub6X6z4ZGlBwBmRsEnXKI=";
+
+  outputs = [ "out" "man" ];
+
+  doCheck = false;
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  postInstall = ''
+    wrapProgram $out/bin/clipman \
+      --prefix PATH : ${lib.makeBinPath [ wl-clipboard ]}
+    installManPage docs/*.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/chmouel/clipman";
+    description = "A simple clipboard manager for Wayland";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ma27 ];
+    platforms = platforms.linux;
+    mainProgram = "clipman";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/gnome-randr/default.nix b/nixpkgs/pkgs/tools/wayland/gnome-randr/default.nix
new file mode 100644
index 000000000000..51c460852c0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/gnome-randr/default.nix
@@ -0,0 +1,35 @@
+{ dbus
+, fetchFromGitHub
+, lib
+, pkg-config
+, rustPlatform
+}:
+let
+  version = "0.1.1";
+in
+rustPlatform.buildRustPackage {
+  pname = "gnome-randr";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "maxwellainatchi";
+    repo = "gnome-randr-rust";
+    rev = "v" + version;
+    sha256 = "sha256-mciHgBEOCFjRA4MSoEdP7bIag0KE+zRbk4wOkB2PAn0=";
+  };
+
+  cargoSha256 = "sha256-rk8/sg5rSNS741QOWoAGIloqph+ZdBjl/xUaFl0A3Bs=";
+
+  buildInputs = [ dbus ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "An xrandr-like CLI for configuring displays on GNOME/Wayland, on distros that don't support `wlr-randr`";
+    homepage = "https://github.com/maxwellainatchi/gnome-randr-rust";
+    license = licenses.mit;
+    maintainers = [ maintainers.roberth ];
+    platforms = platforms.linux;
+    mainProgram = "gnome-randr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/gtklock/default.nix b/nixpkgs/pkgs/tools/wayland/gtklock/default.nix
new file mode 100644
index 000000000000..0b583ad8743e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/gtklock/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, wrapGAppsHook
+, pam
+, scdoc
+, gtk3
+, pkg-config
+, gtk-layer-shell
+, glib
+, librsvg
+, wayland
+, wayland-scanner
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtklock";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "jovanlanik";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Jh+BmtKGaLgAcTXc44ydV83dp/W4wzByehUWyeyBoFI=";
+  };
+
+  nativeBuildInputs = [
+    scdoc
+    pkg-config
+    wayland-scanner
+    glib
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    wayland
+    gtk3
+    pam
+    gtk-layer-shell
+    librsvg
+  ];
+
+  installFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
+
+  meta = with lib; {
+    description = "GTK-based lockscreen for Wayland";
+    longDescription = ''
+      Important note: for gtklock to work you need to set "security.pam.services.gtklock = {};" manually.
+    ''; # Following  nixpkgs/pkgs/applications/window-managers/sway/lock.nix
+    homepage = "https://github.com/jovanlanik/gtklock";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ dit7ya ];
+    platforms = platforms.linux;
+    mainProgram = "gtklock";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/gtklock/playerctl-module.nix b/nixpkgs/pkgs/tools/wayland/gtklock/playerctl-module.nix
new file mode 100644
index 000000000000..8d2d760d46a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/gtklock/playerctl-module.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, gtk3
+, playerctl
+, libsoup
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtklock-playerctl-module";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "jovanlanik";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-kzGgqFDTeKL6Pfjram7pqVcIm8Avxsvpn1qFrcpd8dw=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gtk3 playerctl libsoup ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Gtklock module adding power controls to the lockscreen";
+    homepage = "https://github.com/jovanlanik/gtklock-powerbar-module";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/gtklock/powerbar-module.nix b/nixpkgs/pkgs/tools/wayland/gtklock/powerbar-module.nix
new file mode 100644
index 000000000000..ce5c44a41874
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/gtklock/powerbar-module.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtklock-powerbar-module";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "jovanlanik";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Ev6vjtvUSqP/+xTDRAqSYJ436WhZUtFRxSP7LoSK00w=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gtk3 ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Gtklock module adding power controls to the lockscreen";
+    homepage = "https://github.com/jovanlanik/gtklock-powerbar-module";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/gtklock/userinfo-module.nix b/nixpkgs/pkgs/tools/wayland/gtklock/userinfo-module.nix
new file mode 100644
index 000000000000..0de3f12284af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/gtklock/userinfo-module.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, gtk3
+, glib
+, accountsservice
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtklock-userinfo-module";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "jovanlanik";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-WNUX0wRoh14rZRmiyQEGZPKJRr6oNW8B6LEwhDSPcyY=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gtk3 glib accountsservice ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Gtklock module adding user info to the lockscreen";
+    homepage = "https://github.com/jovanlanik/gtklock-userinfo-module";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/hyprland-per-window-layout/default.nix b/nixpkgs/pkgs/tools/wayland/hyprland-per-window-layout/default.nix
new file mode 100644
index 000000000000..81671f46ed5b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/hyprland-per-window-layout/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hyprland-per-window-layout";
+  version = "2.7";
+
+  src = fetchFromGitHub {
+    owner = "coffebar";
+    repo = pname;
+    rev = version;
+    hash = "sha256-Tci3OR7c8hEWAnFsBlSNZYt7znAxPRDhJV+1q7fw6z8=";
+  };
+
+  cargoHash = "sha256-lVNephJ6UfdM6dPnHs+jHG9A79qHEsrm7tcjcDralnY=";
+
+  meta = with lib; {
+    description = "Per window keyboard layout (language) for Hyprland wayland compositor";
+    homepage = "https://github.com/coffebar/hyprland-per-window-layout";
+    license = licenses.mit;
+    maintainers = [ maintainers.azazak123 ];
+    platforms = platforms.linux;
+    mainProgram = "hyprland-per-window-layout";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/kanshi/default.nix b/nixpkgs/pkgs/tools/wayland/kanshi/default.nix
new file mode 100644
index 000000000000..0324a0e991d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/kanshi/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, meson
+, ninja
+, pkg-config
+, scdoc
+, wayland
+, wayland-scanner
+, libvarlink
+}:
+
+stdenv.mkDerivation rec {
+  pname = "kanshi";
+  version = "1.5.1";
+
+  src = fetchFromSourcehut {
+    owner = "~emersion";
+    repo = "kanshi";
+    rev = "v${version}";
+    sha256 = "sha256-Ck0yRt9TYLFRojn+VKnjP5RzkX0hciuQOT6drTH7gtU=";
+  };
+
+  strictDeps = true;
+  depsBuildBuild = [
+    pkg-config
+  ];
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-scanner ];
+  buildInputs = [ wayland libvarlink ];
+
+  meta = with lib; {
+    homepage = "https://sr.ht/~emersion/kanshi";
+    description = "Dynamic display configuration tool";
+    longDescription = ''
+      kanshi allows you to define output profiles that are automatically enabled
+      and disabled on hotplug. For instance, this can be used to turn a laptop's
+      internal screen off when docked.
+
+      kanshi can be used on Wayland compositors supporting the
+      wlr-output-management protocol.
+    '';
+    license = licenses.mit;
+    mainProgram = "kanshi";
+    maintainers = with maintainers; [ balsoft danielbarter ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/mpvpaper/default.nix b/nixpkgs/pkgs/tools/wayland/mpvpaper/default.nix
new file mode 100644
index 000000000000..91ec1e80267f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/mpvpaper/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, meson
+, ninja
+, wayland
+, wayland-protocols
+, wayland-scanner
+, egl-wayland
+, glew-egl
+, mpv
+, pkg-config
+, fetchFromGitHub
+, makeWrapper
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mpvpaper";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "GhostNaN";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-pJPoI47KKazVT6RfqyftZe+lPe6Kn2cllRSfq0twUpQ=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    makeWrapper
+    installShellFiles
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    wayland
+    wayland-protocols
+    egl-wayland
+    glew-egl
+    mpv
+  ];
+
+  preInstall = ''
+    mv ../mpvpaper.man ../mpvpaper.1
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/mpvpaper \
+      --prefix PATH : ${lib.makeBinPath [ mpv ]}
+
+    installManPage ../mpvpaper.1
+  '';
+
+  meta = with lib; {
+    description = "A video wallpaper program for wlroots based wayland compositors";
+    homepage = "https://github.com/GhostNaN/mpvpaper";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    mainProgram = "mpvpaper";
+    maintainers = with maintainers; [ atila ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/oguri/default.nix b/nixpkgs/pkgs/tools/wayland/oguri/default.nix
new file mode 100644
index 000000000000..4c13a3879fcf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/oguri/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, meson
+, ninja
+, cairo
+, gdk-pixbuf
+, wayland
+, wayland-protocols
+, wayland-scanner
+}:
+
+stdenv.mkDerivation rec {
+  pname = "oguri";
+  version = "unstable-2020-12-19";
+
+  src = fetchFromGitHub {
+    owner = "vilhalmer";
+    repo = pname;
+    rev = "6937fee10a9b0ef3ad8f94f606c0e0d9e7dec564";
+    sha256 = "sXNvpI/YPDPd2cXQAfRO4ut21gSCXxbo1DpaZmHJDYQ=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ pkg-config meson ninja wayland-scanner ];
+  buildInputs = [
+    cairo
+    gdk-pixbuf
+    wayland
+    wayland-protocols
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/vilhalmer/oguri/";
+    description = "A very nice animated wallpaper daemon for Wayland compositors";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+    inherit (wayland.meta) platforms;
+    broken = stdenv.isDarwin; # this should be enfoced by wayland platforms in the future
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/proycon-wayout/default.nix b/nixpkgs/pkgs/tools/wayland/proycon-wayout/default.nix
new file mode 100644
index 000000000000..d19ea6894546
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/proycon-wayout/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, fetchFromSourcehut
+, meson
+, wayland-protocols
+, wayland
+, cairo
+, pango
+, scdoc
+, ninja
+, cmake
+, pkg-config
+, wayland-scanner
+}:
+
+stdenv.mkDerivation rec {
+  pname = "proycon-wayout";
+  version = "0.1.3";
+
+  src = fetchFromSourcehut {
+    owner = "~proycon";
+    repo = "wayout";
+    rev = version;
+    sha256 = "sha256-pxHz8y63xX9I425OG0jPvQVx4mAbTYHxVMMkfjZpURo=";
+  };
+
+  postPatch = ''
+    substituteInPlace meson.build --replace "'werror=true'," "" # Build fails with -Werror, remove
+  '';
+
+  postFixup = ''
+    mv $out/bin/wayout $out/bin/proycon-wayout # Avoid conflict with shinyzenith/wayout
+  '';
+
+  strictDeps = true;
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ scdoc ninja meson cmake pkg-config wayland-scanner ];
+  buildInputs = [ wayland-protocols wayland cairo pango ];
+
+  meta = with lib; {
+    description = "Takes text from standard input and outputs it to a desktop-widget on Wayland desktops";
+    homepage = "https://git.sr.ht/~proycon/wayout";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wentam ];
+    mainProgram = "proycon-wayout";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/shikane/default.nix b/nixpkgs/pkgs/tools/wayland/shikane/default.nix
new file mode 100644
index 000000000000..b9cac576b587
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/shikane/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, rustPlatform
+, fetchFromGitLab
+, installShellFiles
+, pandoc
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shikane";
+  version = "0.2.0";
+
+  src = fetchFromGitLab {
+    owner = "w0lff";
+    repo = "shikane";
+    rev = "v${version}";
+    hash = "sha256-S55elFZQT234fKlISFi21QJtnf2yB0O2u2vSNFhzgBg=";
+  };
+
+  cargoHash = "sha256-4wisXVaZa2GBFKywl48beQgg4c+lawL3L/837ZU1Y94=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    pandoc
+  ];
+
+  postBuild = ''
+    bash ./scripts/build-docs.sh man
+  '';
+
+  postInstall = ''
+    installManPage ./build/shikane.*
+  '';
+
+  # upstream has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A dynamic output configuration tool that automatically detects and configures connected outputs based on a set of profiles";
+    homepage = "https://gitlab.com/w0lff/shikane";
+    changelog = "https://gitlab.com/w0lff/shikane/-/tags/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ michaelpachec0 natsukium ];
+    platforms = platforms.linux;
+    mainProgram = "shikane";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/shotman/default.nix b/nixpkgs/pkgs/tools/wayland/shotman/default.nix
new file mode 100644
index 000000000000..08de35f14d3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/shotman/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromSourcehut
+, rustPlatform
+, pkg-config
+, libxkbcommon
+, makeWrapper
+, slurp
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shotman";
+  version = "0.4.5";
+
+  src = fetchFromSourcehut {
+    owner = "~whynothugo";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-SctWNhYCFTAOOnDEcsFZH61+QQAcmup11GVVXA1U5Dw=";
+  };
+
+  cargoHash = "sha256-q5scdgfB5NgtjAgnIy/+c+y/mymF0b9ZZSz2LmM0pfw=";
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+
+  buildInputs = [ libxkbcommon ];
+
+  preFixup = ''
+    wrapProgram $out/bin/shotman \
+      --prefix PATH ":" "${lib.makeBinPath [ slurp ]}";
+  '';
+
+  meta = with lib; {
+    description = "The uncompromising screenshot GUI for Wayland compositors";
+    homepage = "https://git.sr.ht/~whynothugo/shotman";
+    license = licenses.isc;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ zendo fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/sirula/default.nix b/nixpkgs/pkgs/tools/wayland/sirula/default.nix
new file mode 100644
index 000000000000..c190c232fdae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/sirula/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, gtk3
+, gtk-layer-shell
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sirula";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "DorianRudolph";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-C5mVO10+jD4TDg6R9rVJO6fdDiOD5tT+bEaI53WVdFA=";
+  };
+
+  cargoSha256 = "sha256-pxVEa3m7SWMwOAcR/jRKzEc6MH6YkNfTW0cm6Nid6Zo=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gtk3 gtk-layer-shell ];
+
+  meta = with lib; {
+    description = "Simple app launcher for wayland written in rust";
+    homepage = "https://github.com/DorianRudolph/sirula";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ twitchyliquid64 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/slurp/default.nix b/nixpkgs/pkgs/tools/wayland/slurp/default.nix
new file mode 100644
index 000000000000..e8be0deae6c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/slurp/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cairo
+, libxkbcommon
+, meson
+, ninja
+, pkg-config
+, scdoc
+, wayland
+, wayland-protocols
+, wayland-scanner
+, buildDocs ? true
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "slurp";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "emersion";
+    repo = "slurp";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-2M8f3kN6tihwKlUCp2Qowv5xD6Ufb71AURXqwQShlXI=";
+  };
+
+  depsBuildBuild = [
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wayland-scanner
+  ] ++ lib.optional buildDocs scdoc;
+
+  buildInputs = [
+    cairo
+    libxkbcommon
+    wayland
+    wayland-protocols
+  ];
+
+  strictDeps = true;
+
+  mesonFlags = [ (lib.mesonEnable "man-pages" buildDocs) ];
+
+  meta = with lib; {
+    changelog = "https://github.com/emersion/slurp/releases/tag/v${finalAttrs.version}";
+    description = "Select a region in a Wayland compositor";
+    inherit (wayland.meta) platforms;
+    homepage = "https://github.com/emersion/slurp";
+    license = licenses.mit;
+    mainProgram = "slurp";
+    maintainers = with maintainers; [ buffet nickcao ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/wayland/stacktile/default.nix b/nixpkgs/pkgs/tools/wayland/stacktile/default.nix
new file mode 100644
index 000000000000..073794e42b98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/stacktile/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, wayland
+, wayland-scanner
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "stacktile";
+  version = "1.0.0";
+
+  src = fetchFromSourcehut {
+    owner = "~leon_plickat";
+    repo = "stacktile";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-IOFxgYMjh92jx2CPfBRZDL/1ucgfHtUyAL5rS2EG+Gc=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    wayland
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "MANDIR=${placeholder "man"}/share/man"
+  ];
+
+  strictDeps = true;
+
+  meta = {
+    homepage = "https://sr.ht/~leon_plickat/stacktile/";
+    description = "Layout generator for the river Wayland compositor";
+    license = with lib.licenses; [ gpl3Plus ];
+    mainProgram = "stacktile";
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/wayland/swaykbdd/default.nix b/nixpkgs/pkgs/tools/wayland/swaykbdd/default.nix
new file mode 100644
index 000000000000..c4ab6098f21b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/swaykbdd/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, json_c, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "swaykbdd";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "artemsen";
+    repo = "swaykbdd";
+    rev = "v${version}";
+    sha256 = "sha256-FtXmn5Lf0PhL99xGl/SHWNaE6vAMOF2Ok4xVJT2Bf/s=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [ json_c ];
+
+  meta = with lib; {
+    description = "Per-window keyboard layout for Sway";
+    homepage = "https://github.com/artemsen/swaykbdd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ivankovnatsky ];
+    platforms = platforms.linux;
+    mainProgram = "swaykbdd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/swayr/default.nix b/nixpkgs/pkgs/tools/wayland/swayr/default.nix
new file mode 100644
index 000000000000..0d86bac82139
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/swayr/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromSourcehut, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "swayr";
+  version = "0.27.3";
+
+  src = fetchFromSourcehut {
+    owner = "~tsdh";
+    repo = "swayr";
+    rev = "swayr-${version}";
+    sha256 = "sha256-3M4/uk1E5Ly9pifjoDIUEhWf1IZxwRYUC3f3qOsMyRg=";
+  };
+
+  cargoHash = "sha256-cjrt2jkcNbTabnhlu0P8mBIKbIpCE6L6BYlxi/fIwrg=";
+
+  patches = [
+    ./icon-paths.patch
+  ];
+
+  # don't build swayrbar
+  buildAndTestSubdir = pname;
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  meta = {
+    description = "A window switcher (and more) for sway";
+    homepage = "https://git.sr.ht/~tsdh/swayr";
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "swayr";
+    maintainers = with lib.maintainers; [ artturin ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/swayr/icon-paths.patch b/nixpkgs/pkgs/tools/wayland/swayr/icon-paths.patch
new file mode 100644
index 000000000000..647863d3da84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/swayr/icon-paths.patch
@@ -0,0 +1,17 @@
+diff --git a/swayr/src/config.rs b/swayr/src/config.rs
+index bc6ec98..48cdc65 100644
+--- a/swayr/src/config.rs
++++ b/swayr/src/config.rs
+@@ -271,6 +271,12 @@ impl Default for Format {
+             ),
+             urgency_end: Some("</span>".to_string()),
+             icon_dirs: Some(vec![
++                "/run/current-system/sw/share/icons/hicolor/scalable/apps".to_string(),
++                "/run/current-system/sw/share/icons/hicolor/48x48/apps".to_string(),
++                "/run/current-system/sw/share/pixmaps".to_string(),
++                "~/.nix-profile/share/icons/hicolor/scalable/apps".to_string(),
++                "~/.nix-profile/share/icons/hicolor/48x48/apps".to_string(),
++                "~/.nix-profile/share/pixmaps".to_string(),
+                 "/usr/share/icons/hicolor/scalable/apps".to_string(),
+                 "/usr/share/icons/hicolor/64x64/apps".to_string(),
+                 "/usr/share/icons/hicolor/48x48/apps".to_string(),
diff --git a/nixpkgs/pkgs/tools/wayland/swayrbar/default.nix b/nixpkgs/pkgs/tools/wayland/swayrbar/default.nix
new file mode 100644
index 000000000000..f8f085f1632b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/swayrbar/default.nix
@@ -0,0 +1,38 @@
+{ lib, fetchFromSourcehut, rustPlatform, makeWrapper, withPulseaudio ? false, pulseaudio }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "swayrbar";
+  version = "0.3.7";
+
+  src = fetchFromSourcehut {
+    owner = "~tsdh";
+    repo = "swayr";
+    rev = "swayrbar-${version}";
+    sha256 = "sha256-41zlVT060Fu90N4oiZ6lWSZdJJSZjyk3GEA/u+bVNCI=";
+  };
+
+  cargoHash = "sha256-/MUolnEdYlBTfmUB/j9vHaVpU63upeMoScjHl38cGjo=";
+
+  # don't build swayr
+  buildAndTestSubdir = pname;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  postInstall = lib.optionals withPulseaudio ''
+    wrapProgram "$out/bin/swayrbar" \
+      --prefix PATH : "$out/bin:${lib.makeBinPath [ pulseaudio ]}"
+  '';
+
+  meta = with lib; {
+    description = "Status command for sway's swaybar implementing the swaybar-protocol";
+    homepage = "https://git.sr.ht/~tsdh/swayr#a-idswayrbarswayrbara";
+    license = with licenses; [ gpl3Plus ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ sebtm ];
+    mainProgram = "swayrbar";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/swaysome/default.nix b/nixpkgs/pkgs/tools/wayland/swaysome/default.nix
new file mode 100644
index 000000000000..308592e450f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/swaysome/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitLab
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "swaysome";
+  version = "2.1.0";
+
+  src = fetchFromGitLab {
+    owner = "hyask";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-U5W/9VL1t1/R4ADPxseBV6CMKx04I4vbp7sFmSqRZXk=";
+  };
+
+  cargoHash = "sha256-QA3EQsYgjwx8QX50yaxiJyAPDlpYYqiqLiXco1kJmw0=";
+
+  meta = with lib; {
+    description = "Helper to make sway behave more like awesomewm";
+    homepage = "https://gitlab.com/hyask/swaysome";
+    license = licenses.mit;
+    maintainers = with maintainers; [ esclear ];
+    platforms = platforms.linux;
+    mainProgram = "swaysome";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/swaytools/default.nix b/nixpkgs/pkgs/tools/wayland/swaytools/default.nix
new file mode 100644
index 000000000000..a5cde9f7f0cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/swaytools/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildPythonApplication, fetchFromGitHub, slurp }:
+
+buildPythonApplication rec {
+  pname = "swaytools";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "tmccombs";
+    repo = "swaytools";
+    rev = version;
+    sha256 = "sha256-6Ec7MPqBia0PW+pBTAItLusWMg1wlFfEaxoh20/2uHg=";
+  };
+
+  propagatedBuildInputs = [ slurp ];
+
+  meta = with lib; {
+    homepage = "https://github.com/tmccombs/swaytools";
+    description = "Collection of simple tools for sway (and i3)";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ atila ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/swww/default.nix b/nixpkgs/pkgs/tools/wayland/swww/default.nix
new file mode 100644
index 000000000000..9973e6b2fb69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/swww/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, lz4
+, libxkbcommon
+, installShellFiles
+, scdoc
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "swww";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "LGFae";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-n7YdUmIZGu7W7cX6OvVW+wbkKjFvont4hEAhZXYDQd8=";
+  };
+
+  cargoSha256 = "sha256-lZC71M3lbsI+itMydAp5VCz0cpSHo/FpkQFC1NlN4DU=";
+
+  buildInputs = [
+    lz4
+    libxkbcommon
+  ];
+
+  doCheck = false; # Integration tests do not work in sandbox environment
+
+  nativeBuildInputs = [
+    pkg-config
+    installShellFiles
+    scdoc
+  ];
+
+  postInstall = ''
+    for f in doc/*.scd; do
+      local page="doc/$(basename "$f" .scd)"
+      scdoc < "$f" > "$page"
+      installManPage "$page"
+    done
+
+    installShellCompletion --cmd swww \
+      --bash <(cat completions/swww.bash) \
+      --fish <(cat completions/swww.fish) \
+      --zsh <(cat completions/_swww)
+  '';
+
+  meta = with lib; {
+    description = "Efficient animated wallpaper daemon for wayland, controlled at runtime";
+    homepage = "https://github.com/LGFae/swww";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ mateodd25 donovanglover ];
+    platforms = platforms.linux;
+    mainProgram = "swww";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/way-displays/default.nix b/nixpkgs/pkgs/tools/wayland/way-displays/default.nix
new file mode 100644
index 000000000000..192e8aecc4fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/way-displays/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, wayland
+, libinput
+, yaml-cpp
+}:
+
+stdenv.mkDerivation rec {
+  pname = "way-displays";
+  version = "1.10.2";
+
+  src = fetchFromGitHub {
+    owner = "alex-courtis";
+    repo = "way-displays";
+    rev = version;
+    sha256 = "sha256-OEsRSmtNDt3MO5MO7Ch9mOHHHraN+9qfcFn2AhXfvpk=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    pkg-config
+    wayland
+  ];
+
+  buildInputs = [
+    wayland
+    yaml-cpp
+    libinput
+  ];
+
+  makeFlags = [ "DESTDIR=$(out) PREFIX= PREFIX_ETC= ROOT_ETC=$(out)/etc"];
+
+  meta = with lib; {
+    homepage = "https://github.com/alex-courtis/way-displays";
+    description = "Auto Manage Your Wayland Displays";
+    license = licenses.mit;
+    maintainers = with maintainers; [ simoneruffini ];
+    platforms = platforms.linux;
+    mainProgram = "way-displays";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wayland-proxy-virtwl/default.nix b/nixpkgs/pkgs/tools/wayland/wayland-proxy-virtwl/default.nix
new file mode 100644
index 000000000000..029e30b2645a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wayland-proxy-virtwl/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchFromGitHub
+, ocamlPackages
+, pkg-config
+, libdrm
+, unstableGitUpdater
+}:
+
+ocamlPackages.buildDunePackage rec {
+  pname = "wayland-proxy-virtwl";
+  version = "unstable-2023-12-09";
+
+  src = fetchFromGitHub {
+    owner = "talex5";
+    repo = pname;
+    rev = "ec052fa0e9ae2b2926afc27e23a50b4d3072e6ac";
+    sha256 = "sha256-ZWW44hfWs0F4SwwEjx62o/JnuXSrSlq2lrRFRTuPUFE=";
+  };
+
+  minimalOCamlVersion = "5.0";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [ libdrm ] ++ (with ocamlPackages; [
+    dune-configurator
+    eio_main
+    ppx_cstruct
+    wayland
+    cmdliner
+    logs
+    ppx_cstruct
+  ]);
+
+  doCheck = true;
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    homepage = "https://github.com/talex5/wayland-virtwl-proxy";
+    description = "Proxy Wayland connections across a VM boundary";
+    license = licenses.asl20;
+    mainProgram = "wayland-proxy-virtwl";
+    maintainers = [ maintainers.qyliss maintainers.sternenseemann ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wayland-utils/default.nix b/nixpkgs/pkgs/tools/wayland/wayland-utils/default.nix
new file mode 100644
index 000000000000..948bb758110b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wayland-utils/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl
+, meson, pkg-config, ninja, wayland-scanner
+, libdrm, wayland, wayland-protocols
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wayland-utils";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://gitlab.freedesktop.org/wayland/wayland-utils/-/releases/${version}/downloads/wayland-utils-${version}.tar.xz";
+    sha256 = "sha256-2SeMIlVFhogYAlQHUbzEJWkmK/gM2aybD9Ev9L0JqeQ=";
+  };
+
+  strictDeps = true;
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ meson pkg-config ninja wayland-scanner ];
+  buildInputs = [ libdrm wayland wayland-protocols ];
+
+  meta = with lib; {
+    description = "Wayland utilities (wayland-info)";
+    longDescription = ''
+      A collection of Wayland related utilities:
+      - wayland-info: A utility for displaying information about the Wayland
+        protocols supported by a Wayland compositor.
+    '';
+    homepage = "https://gitlab.freedesktop.org/wayland/wayland-utils";
+    license = licenses.mit; # Expat version
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+    mainProgram = "wayland-info";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/waylogout/default.nix b/nixpkgs/pkgs/tools/wayland/waylogout/default.nix
new file mode 100644
index 000000000000..6bf3b89eea40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/waylogout/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, wayland
+, wayland-protocols
+, libxkbcommon
+, cairo
+, gdk-pixbuf
+, scdoc
+}:
+
+stdenv.mkDerivation {
+  pname = "waylogout";
+  version = "unstable-2023-06-09";
+
+  src = fetchFromGitHub {
+    owner = "loserMcloser";
+    repo = "waylogout";
+    rev = "f90e1b8b0f67a2694fafca7beb32828493f3f78e";
+    hash = "sha256-YQtX4t6q2NybuKU3lVcn5XhC0nXcPfEbcXbuFmDZOrw=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    scdoc
+  ];
+
+  buildInputs = [
+    wayland
+    wayland-protocols
+    libxkbcommon
+    cairo
+    gdk-pixbuf
+  ];
+
+  meta = with lib; {
+    description = "A graphical logout/suspend/reboot/shutdown dialog for wayland";
+    homepage = "https://github.com/loserMcloser/waylogout";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    platforms = platforms.linux;
+    mainProgram = "waylogout";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/waynergy/default.nix b/nixpkgs/pkgs/tools/wayland/waynergy/default.nix
new file mode 100644
index 000000000000..b72b057793f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/waynergy/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, pkg-config
+, ninja
+, wayland-scanner
+, libdrm
+, wayland
+, wayland-protocols
+, wl-clipboard
+, libxkbcommon
+, libressl
+}:
+stdenv.mkDerivation rec {
+  pname = "waynergy";
+  version = "0.0.16";
+
+  src = fetchFromGitHub {
+    owner = "r-c-f";
+    repo = "waynergy";
+    rev = "v${version}";
+    hash = "sha256-DHP84AYDd3M8on4LgS2TzFU/QulrWXdl1qbLV+qKoxw=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ pkg-config meson ninja wayland-scanner ];
+  buildInputs = [ libdrm wayland wayland-protocols wl-clipboard libxkbcommon libressl ];
+
+  postPatch = ''
+    substituteInPlace waynergy.desktop --replace "Exec=/usr/bin/waynergy" "Exec=$out/bin/waynergy"
+  '';
+
+  meta = with lib; {
+    description = "A synergy client for Wayland compositors";
+    longDescription = ''
+      A synergy client for Wayland compositors
+    '';
+    homepage = "https://github.com/r-c-f/waynergy";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ maxhero ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wayout/default.nix b/nixpkgs/pkgs/tools/wayland/wayout/default.nix
new file mode 100644
index 000000000000..b548279d401e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wayout/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, rustPlatform
+, fetchFromSourcehut
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wayout";
+  version = "1.1.3";
+
+  src = fetchFromSourcehut {
+    owner = "~shinyzenith";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-EzRetxx0NojhBlBPwhQ7p9rGXDUBlocVqxcEVGIF3+0=";
+  };
+
+  cargoSha256 = "sha256-QlxXbfeWJdCythYRRLSpJbTzKkwrL4kmAfyL3tRt194=";
+
+  meta = with lib; {
+    description = "Simple output management tool for wlroots based compositors implementing";
+    homepage = "https://git.sr.ht/~shinyzenith/wayout";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ onny ];
+    platforms = platforms.linux;
+    mainProgram = "wayout";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wdomirror/default.nix b/nixpkgs/pkgs/tools/wayland/wdomirror/default.nix
new file mode 100644
index 000000000000..8796b2036dd5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wdomirror/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, wayland
+, wayland-protocols
+, fetchpatch
+, wayland-scanner
+}:
+
+stdenv.mkDerivation {
+  pname = "wdomirror";
+  version = "unstable-2021-01-08";
+
+  src = fetchFromGitHub {
+    owner = "progandy";
+    repo = "wdomirror";
+    rev = "e4a4934e6f739909fbf346cbc001c72690b5c906";
+    sha256 = "1fz0sajhdjqas3l6mpik8w1k15wbv65hgh9r9vdgfqvw5l6cx7jv";
+  };
+
+  patches = [
+    # https://github.com/progandy/wdomirror/pull/7
+    (fetchpatch {
+      url = "https://github.com/progandy/wdomirror/commit/142632208e9ea2b4a4ebd784532efdb8cad7b87c.patch";
+      hash = "sha256-MG71IEwRAjjacAkRoB7Tn45+FbY7LAqTDkVJkoWuQUU=";
+    })
+  ];
+
+  strictDeps = true;
+  nativeBuildInputs = [ meson ninja pkg-config wayland-scanner ];
+
+  buildInputs = [ wayland wayland-protocols ];
+
+  installPhase = ''
+    runHook preInstall
+    install -m755 -D wdomirror $out/bin/wdomirror
+    runHook postInstall
+  '';
+
+  postPatch = ''
+    substituteInPlace meson.build \
+      --replace "werror=true" "werror=false"
+  '';
+
+  meta = with lib; {
+    description = "Mirrors an output of a wlroots compositor to a window";
+    homepage = "https://github.com/progandy/wdomirror";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jpas ];
+    mainProgram = "wdomirror";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wev/default.nix b/nixpkgs/pkgs/tools/wayland/wev/default.nix
new file mode 100644
index 000000000000..c4913e6f75f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wev/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, pkg-config
+, scdoc
+, wayland-scanner
+, wayland
+, wayland-protocols
+, libxkbcommon
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wev";
+  version = "1.0.0";
+
+  src = fetchFromSourcehut {
+    owner = "~sircmpwn";
+    repo = pname;
+    rev = version;
+    sha256 = "0l71v3fzgiiv6xkk365q1l08qvaymxd4kpaya6r2g8yzkr7i2hms";
+  };
+
+  strictDeps = true;
+  # for scdoc
+  depsBuildBuild = [
+    pkg-config
+  ];
+  nativeBuildInputs = [ pkg-config scdoc wayland-scanner ];
+  buildInputs = [ wayland wayland-protocols libxkbcommon ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~sircmpwn/wev";
+    description = "Wayland event viewer";
+    longDescription = ''
+      This is a tool for debugging events on a Wayland window, analogous to the
+      X11 tool xev.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ primeos ];
+    platforms = platforms.linux;
+    mainProgram = "wev";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wl-clip-persist/default.nix b/nixpkgs/pkgs/tools/wayland/wl-clip-persist/default.nix
new file mode 100644
index 000000000000..2cfe8cc01743
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wl-clip-persist/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, wayland
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "wl-clip-persist";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "Linus789";
+    repo = "wl-clip-persist";
+    # upstream doesn't tag releases
+    rev = "6ba11a2aa295d780f0b2e8f005cf176601d153b0";
+    hash = "sha256-wg4xEXLAZpWflFejP7ob4cnmRvo9d/0dL9hceG+RUr0=";
+  };
+
+  cargoHash = "sha256-vNxNvJ5tA323EVArJ6glNslkq/Q6u7NsIpTYO1Q3GEw=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    wayland
+  ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Keep Wayland clipboard even after programs close";
+    homepage = "https://github.com/Linus789/wl-clip-persist";
+    inherit (wayland.meta) platforms;
+    license = licenses.mit;
+    mainProgram = "wl-clip-persist";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wl-clipboard-x11/default.nix b/nixpkgs/pkgs/tools/wayland/wl-clipboard-x11/default.nix
new file mode 100644
index 000000000000..0c127f751dff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wl-clipboard-x11/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, wl-clipboard, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "wl-clipboard-x11";
+  version = "5";
+
+  src = fetchFromGitHub {
+    owner = "brunelli";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-i+oF1Mu72O5WPTWzqsvo4l2CERWWp4Jq/U0DffPZ8vg=";
+  };
+
+  strictDeps = true;
+  buildInputs = [ bash ];
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  postPatch = ''
+    substituteInPlace src/wl-clipboard-x11 \
+      --replace '$(command -v wl-copy)' ${wl-clipboard}/bin/wl-copy \
+      --replace '$(command -v wl-paste)' ${wl-clipboard}/bin/wl-paste
+  '';
+
+  meta = with lib; {
+    description = "A wrapper to use wl-clipboard as a drop-in replacement for X11 clipboard tools";
+    homepage = "https://github.com/brunelli/wl-clipboard-x11";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ artturin ];
+    mainProgram = "xclip";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wl-clipboard/default.nix b/nixpkgs/pkgs/tools/wayland/wl-clipboard/default.nix
new file mode 100644
index 000000000000..8d812ac1685b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wl-clipboard/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, wayland
+, wayland-protocols
+, wayland-scanner
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wl-clipboard";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner = "bugaevc";
+    repo = "wl-clipboard";
+    rev = "v${version}";
+    hash = "sha256-BYRXqVpGt9FrEBYQpi2kHPSZyeMk9o1SXkxjjcduhiY=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ meson ninja pkg-config wayland-scanner ];
+  buildInputs = [ wayland wayland-protocols ];
+
+  mesonFlags = [
+    "-Dfishcompletiondir=share/fish/vendor_completions.d"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bugaevc/wl-clipboard";
+    description = "Command-line copy/paste utilities for Wayland";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dywedir ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wl-color-picker/default.nix b/nixpkgs/pkgs/tools/wayland/wl-color-picker/default.nix
new file mode 100644
index 000000000000..bb5f21ded61d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wl-color-picker/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, slurp
+, grim
+, gnome
+, wl-clipboard
+, imagemagick
+, makeWrapper
+, bash
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wl-color-picker";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "jgmdev";
+    repo = "wl-color-picker";
+    rev = "v${version}";
+    sha256 = "sha256-lvhpXy4Sd1boYNGhbPoZTJlBhlW5obltDOrEzB1Gq0A=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ bash ];
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace 'which' 'ls' \
+      --replace 'grim' "${grim}/bin/grim" \
+      --replace 'slurp' "${slurp}/bin/slurp" \
+      --replace 'convert' "${imagemagick}/bin/convert" \
+      --replace 'zenity' "${gnome.zenity}/bin/zenity" \
+      --replace 'wl-copy' "${wl-clipboard}/bin/wl-copy"
+  '';
+
+  installFlags = [
+    "DESTDIR=${placeholder "out"}"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/usr/bin/wl-color-picker \
+      --prefix PATH : ${lib.makeBinPath [
+         grim
+         slurp
+         imagemagick
+         gnome.zenity
+         wl-clipboard
+       ]}
+    mkdir -p $out/bin
+    ln -s $out/usr/bin/wl-color-picker $out/bin/wl-color-picker
+  '';
+
+  meta = with lib; {
+    description = "Wayland color picker that also works on wlroots";
+    homepage = "https://github.com/jgmdev/wl-color-picker";
+    license = licenses.mit;
+    maintainers = with maintainers; [ onny ];
+    platforms = platforms.linux;
+    mainProgram = "wl-color-picker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wl-gammactl/default.nix b/nixpkgs/pkgs/tools/wayland/wl-gammactl/default.nix
new file mode 100644
index 000000000000..7cb8eb6e7fb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wl-gammactl/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub
+, meson, pkg-config, ninja
+, wayland, wayland-scanner, wlr-protocols, gtk3, glib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wl-gammactl";
+  version = "unstable-2021-09-13";
+
+  src = fetchFromGitHub {
+    owner = "mischw";
+    repo = pname;
+    rev = "e2385950d97a3baf1b6e2f064dd419ccec179586";
+    sha256 = "8iMJK4O/sNIGPOBZQEfK47K6OjT6sxYFe19O2r/VSr8=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ meson pkg-config ninja glib wayland-scanner ];
+  buildInputs = [ wayland gtk3 ];
+
+  postUnpack = ''
+    rmdir source/wlr-protocols
+    ln -s ${wlr-protocols}/share/wlr-protocols source
+  '';
+
+  patches = [ ./dont-need-wlroots.diff ];
+
+  postPatch = ''
+    substituteInPlace meson.build --replace "git = find_program('git')" "git = 'false'"
+  '';
+
+  meta = with lib; {
+    description = "Contrast, brightness, and gamma adjustments for Wayland";
+    longDescription = ''
+      Small GTK GUI application to set contrast, brightness, and gamma for wayland compositors which
+      support the wlr-gamma-control protocol extension.
+    '';
+    homepage = "https://github.com/mischw/wl-gammactl";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lodi ];
+    mainProgram = "wl-gammactl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wl-gammactl/dont-need-wlroots.diff b/nixpkgs/pkgs/tools/wayland/wl-gammactl/dont-need-wlroots.diff
new file mode 100644
index 000000000000..a5eeab64a7bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wl-gammactl/dont-need-wlroots.diff
@@ -0,0 +1,20 @@
+diff --git a/meson.build b/meson.build
+index 5253f52..f5ff82e 100644
+--- a/meson.build
++++ b/meson.build
+@@ -6,7 +6,6 @@ project(
+ 
+ # Define dependecies
+ dep_gtk3 = dependency('gtk+-3.0')
+-dep_wlroots = dependency('wlroots')
+ dep_wayland_client = dependency('wayland-client')
+ 
+ 
+@@ -75,7 +74,6 @@ executable(
+ 	'wl-gammactl',
+ 	sources,
+ 	dependencies : [
+-		dep_wlroots,
+ 		dep_wayland_client,
+ 		dep_gtk3
+ 	],
diff --git a/nixpkgs/pkgs/tools/wayland/wl-mirror/default.nix b/nixpkgs/pkgs/tools/wayland/wl-mirror/default.nix
new file mode 100644
index 000000000000..81be582a25e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wl-mirror/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wayland
+, wayland-protocols
+, wayland-scanner
+, wlr-protocols
+, libGL
+, bash
+, installExampleScripts ? true
+, makeWrapper
+, pipectl
+, slurp
+, rofi
+, scdoc
+}:
+
+let
+  wl-present-binpath = lib.makeBinPath [
+    pipectl
+    rofi
+    slurp
+    (placeholder "out")
+  ];
+in
+
+stdenv.mkDerivation rec {
+  pname = "wl-mirror";
+  version = "0.16.1";
+
+  src = fetchFromGitHub {
+    owner = "Ferdi265";
+    repo = "wl-mirror";
+    rev = "v${version}";
+    hash = "sha256-VUdmHJfbY1bA1/CeC8PJc+Xtupaz5a/15u4u3YGpxBA=";
+  };
+
+  strictDeps = true;
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ cmake pkg-config wayland-scanner scdoc makeWrapper ];
+  buildInputs = [ libGL wayland wayland-protocols wlr-protocols bash ];
+
+  postPatch = ''
+    echo 'v${version}' > version.txt
+    substituteInPlace CMakeLists.txt \
+      --replace 'WL_PROTOCOL_DIR "/usr' 'WL_PROTOCOL_DIR "${wayland-protocols}' \
+      --replace 'WLR_PROTOCOL_DIR "/usr' 'WLR_PROTOCOL_DIR "${wlr-protocols}'
+  '';
+
+  cmakeFlags = [
+    "-DINSTALL_EXAMPLE_SCRIPTS=${if installExampleScripts then "ON" else "OFF"}"
+    "-DINSTALL_DOCUMENTATION=ON"
+  ];
+
+  postInstall = lib.optionalString installExampleScripts ''
+    wrapProgram $out/bin/wl-present --prefix PATH ":" ${wl-present-binpath}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Ferdi265/wl-mirror";
+    description = "A simple Wayland output mirror client";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ synthetica twitchyliquid64 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wl-screenrec/default.nix b/nixpkgs/pkgs/tools/wayland/wl-screenrec/default.nix
new file mode 100644
index 000000000000..c96a5834fa25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wl-screenrec/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libdrm
+, ffmpeg
+, wayland
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wl-screenrec";
+  version = "unstable-2023-09-17";
+
+  src = fetchFromGitHub {
+    owner = "russelltg";
+    repo = pname;
+    rev = "a36c5923009b44f2131196d8a3a234948f8e0102";
+    hash = "sha256-V29eB9vozVKIBq8dO7zgA4nirsh1eDBjJN+rwVkeDLE=";
+  };
+
+  cargoHash = "sha256-uUfEweLWn/NdqgY8O7Ld+YnGPKQV1tpJi/Gd4MZB4xI=";
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    wayland
+    libdrm
+    ffmpeg
+  ];
+
+  doCheck = false; # tests use host compositor, etc
+
+  meta = with lib; {
+    description = "High performance wlroots screen recording, featuring hardware encoding";
+    homepage = "https://github.com/russelltg/wl-screenrec";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    mainProgram = "wl-screenrec";
+    maintainers = with maintainers; [ colemickens ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wlay/default.nix b/nixpkgs/pkgs/tools/wayland/wlay/default.nix
new file mode 100644
index 000000000000..c2330de5f7da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wlay/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, glfw3
+, libX11
+, libXau
+, libXdmcp
+, libepoxy
+, libffi
+, libxcb
+, pkg-config
+, wayland
+, wayland-scanner
+}:
+
+stdenv.mkDerivation {
+  pname = "wlay";
+  version = "unstable-2022-01-26";
+
+  src = fetchFromGitHub {
+    owner = "atx";
+    repo = "wlay";
+    rev = "ed316060ac3ac122c0d3d8918293e19dfe9a6c90";
+    hash = "sha256-Lu+EyoDHiXK9QzD4jdwbllCOCl2aEU+uK6/KxC2AUGQ=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    extra-cmake-modules
+    glfw3
+    libX11
+    libXau
+    libXdmcp
+    libepoxy
+    libffi
+    libxcb
+    wayland
+  ];
+
+  strictDeps = true;
+
+  meta = {
+    homepage = "https://github.com/atx/wlay";
+    description = "Graphical output management for Wayland";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    inherit (wayland.meta) platforms;
+    mainProgram = "wlay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wleave/default.nix b/nixpkgs/pkgs/tools/wayland/wleave/default.nix
new file mode 100644
index 000000000000..e90fed24f7fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wleave/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, at-spi2-atk
+, pkg-config
+, glib
+, gtk3
+, gtk-layer-shell
+, installShellFiles
+, scdoc
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wleave";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "AMNatty";
+    repo = "wleave";
+    rev = version;
+    hash = "sha256-RMUwsrDvSErNbulpyJyRSB1NIsG706SCvF50t3VKuWA=";
+  };
+
+  cargoHash = "sha256-E7Lw7HIZC8j/1H+M9lfglfMkWDeaAL505qCkj+CV7Ik=";
+
+  nativeBuildInputs = [
+    pkg-config
+    installShellFiles
+    scdoc
+  ];
+
+  buildInputs = [
+    at-spi2-atk
+    gtk3
+    gtk-layer-shell
+    glib
+  ];
+
+  postInstall = ''
+    for f in man/*.scd; do
+      local page="man/$(basename "$f" .scd)"
+      scdoc < "$f" > "$page"
+      installManPage "$page"
+    done
+
+    installShellCompletion --cmd wleave \
+      --bash <(cat completions/wleave.bash) \
+      --fish <(cat completions/wleave.fish) \
+      --zsh <(cat completions/_wleave)
+  '';
+
+  meta = with lib; {
+    description = "A Wayland-native logout script written in GTK3";
+    homepage = "https://github.com/AMNatty/wleave";
+    license = licenses.mit;
+    mainProgram = "wleave";
+    maintainers = with maintainers; [ ludovicopiero ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wlogout/default.nix b/nixpkgs/pkgs/tools/wayland/wlogout/default.nix
new file mode 100644
index 000000000000..2be33bee6ac0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wlogout/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, meson
+, ninja
+, scdoc
+, gtk3
+, libxkbcommon
+, wayland
+, wayland-protocols
+, gtk-layer-shell
+# gtk-layer-shell fails to cross-compile due to a hard dependency
+# on gobject-introspection.
+# Disable it when cross-compiling since it's an optional dependency.
+# This disables transparency support.
+, withGtkLayerShell ? (stdenv.buildPlatform == stdenv.hostPlatform)
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wlogout";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "ArtsyMacaw";
+    repo = "wlogout";
+    rev = version;
+    sha256 = "cTscfx+erHVFHwwYpN7pADQWt5sq75sQSyXSP/H8kOs=";
+  };
+
+  strictDeps = true;
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ pkg-config meson ninja scdoc ];
+  buildInputs = [
+    gtk3
+    libxkbcommon
+    wayland
+    wayland-protocols
+  ] ++ lib.optionals withGtkLayerShell [
+    gtk-layer-shell
+  ];
+
+  postPatch = ''
+    substituteInPlace style.css \
+      --replace "/usr/share/wlogout" "$out/share/${pname}"
+
+    substituteInPlace main.c \
+      --replace "/etc/wlogout" "$out/etc/${pname}"
+  '';
+
+  mesonFlags = [
+    "--datadir=${placeholder "out"}/share"
+    "--sysconfdir=${placeholder "out"}/etc"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ArtsyMacaw/wlogout";
+    description = "A wayland based logout menu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.linux;
+    mainProgram = "wlogout";
+  };
+}
+# TODO: shell completions
diff --git a/nixpkgs/pkgs/tools/wayland/wlopm/default.nix b/nixpkgs/pkgs/tools/wayland/wlopm/default.nix
new file mode 100644
index 000000000000..aa0b9ae4bcfc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wlopm/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromSourcehut, wayland, wayland-scanner }:
+
+stdenv.mkDerivation rec {
+  pname = "wlopm";
+  version = "0.1.0";
+
+  src = fetchFromSourcehut {
+    owner = "~leon_plickat";
+    repo = "wlopm";
+    rev = "v${version}";
+    sha256 = "sha256-kcUJVB5jP2qZ1YgJDEBsyn5AgwhRxQmzOrk0gKj1MeM=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ wayland-scanner ];
+  buildInputs = [ wayland ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Simple client implementing zwlr-output-power-management-v1";
+    homepage = "https://git.sr.ht/~leon_plickat/wlopm";
+    mainProgram = "wlopm";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ arjan-s ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wlprop/default.nix b/nixpkgs/pkgs/tools/wayland/wlprop/default.nix
new file mode 100644
index 000000000000..0637d0596ca2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wlprop/default.nix
@@ -0,0 +1,37 @@
+{ fetchgit, gawk, jq, lib, makeWrapper, slurp, stdenv, sway, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "wlprop";
+  version = "unstable-2022-08-18";
+
+  src = fetchgit {
+    url = "https://gist.github.com/f313386043395ff06570e02af2d9a8e0";
+    rev = "758c548bfb4be5b437c428c8062b3987f126f002";
+    sha256 = "sha256-ZJ9LYYrU2cNYikiVNTlEcI4QXcoqfl7iwk3Be+NhGG8=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ bash ];
+
+  dontBuild = true;
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 wlprop.sh $out/bin/wlprop
+    wrapProgram "$out/bin/wlprop" \
+      --prefix PATH : "$out/bin:${lib.makeBinPath [ gawk jq slurp sway ]}"
+
+    runHook postInstall
+  '';
+  passthru.scriptName = "wlprop.sh";
+
+  meta = with lib; {
+    description = "An xprop clone for wlroots based compositors";
+    homepage = "https://gist.github.com/crispyricepc/f313386043395ff06570e02af2d9a8e0";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sebtm ];
+    platforms = platforms.linux;
+    mainProgram = "wlprop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wlr-randr/default.nix b/nixpkgs/pkgs/tools/wayland/wlr-randr/default.nix
new file mode 100644
index 000000000000..0e51bf0093d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wlr-randr/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, meson
+, ninja
+, pkg-config
+, wayland
+, wayland-scanner
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wlr-randr";
+  version = "0.4.0";
+
+  src = fetchFromSourcehut {
+    owner = "~emersion";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Pr9XEQUtbG3Mo/QjFMoY+oJTQIAVW+aaEjYHZqJgbbg=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ meson ninja pkg-config wayland-scanner ];
+  buildInputs = [ wayland ];
+
+  meta = with lib; {
+    description = "An xrandr clone for wlroots compositors";
+    homepage = "https://git.sr.ht/~emersion/wlr-randr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+    platforms = platforms.linux;
+    mainProgram = "wlr-randr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wlr-which-key/default.nix b/nixpkgs/pkgs/tools/wayland/wlr-which-key/default.nix
new file mode 100644
index 000000000000..bef65f8bc9db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wlr-which-key/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, cairo
+, glib
+, libxkbcommon
+, pango
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wlr-which-key";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "MaxVerevkin";
+    repo = "wlr-which-key";
+    rev = "v${version}";
+    hash = "sha256-FVpPS5EQ6+xZIBtdS18SdVx0TK9/ikryU9mtm5JvDgk=";
+  };
+
+  cargoHash = "sha256-JELvmG2CiknBP3QbaXSl1uj6wEgLaDFVFBuS1l5SUk4=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    cairo
+    glib
+    libxkbcommon
+    pango
+  ];
+
+  meta = with lib; {
+    description = "Keymap manager for wlroots-based compositors";
+    homepage = "https://github.com/MaxVerevkin/wlr-which-key";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ xlambein ];
+    platforms = platforms.linux;
+    mainProgram = "wlr-which-key";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wlrctl/default.nix b/nixpkgs/pkgs/tools/wayland/wlrctl/default.nix
new file mode 100644
index 000000000000..130c54731eaa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wlrctl/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromSourcehut, meson, pkg-config, scdoc, ninja, libxkbcommon, wayland, wayland-scanner }:
+
+stdenv.mkDerivation rec {
+  pname = "wlrctl";
+  version = "0.2.2";
+
+  src = fetchFromSourcehut {
+    owner = "~brocellous";
+    repo = "wlrctl";
+    rev = "v${version}";
+    sha256 = "sha256-5mDcCSHbZMbfXbksAO4YhELznKpanse7jtbtfr09HL0=";
+  };
+
+  strictDeps = true;
+  depsBuildBuild = [
+    pkg-config
+  ];
+  nativeBuildInputs = [ meson pkg-config scdoc ninja wayland-scanner ];
+  buildInputs = [ libxkbcommon wayland ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=type-limits";
+
+  meta = with lib; {
+    description = "Command line utility for miscellaneous wlroots Wayland extensions";
+    homepage = "https://git.sr.ht/~brocellous/wlrctl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ puffnfresh artturin ];
+    platforms = platforms.linux;
+    mainProgram = "wlrctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wlsunset/default.nix b/nixpkgs/pkgs/tools/wayland/wlsunset/default.nix
new file mode 100644
index 000000000000..df0f52fdf79d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wlsunset/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromSourcehut
+, meson, pkg-config, ninja, wayland-scanner, scdoc
+, wayland, wayland-protocols
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wlsunset";
+  version = "0.3.0";
+
+  src = fetchFromSourcehut {
+    owner = "~kennylevinsen";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-jGYPWaRUqDL4htdAOA9CAQfoHLBPvK7O9vAzcE81f/E=";
+  };
+
+  strictDeps = true;
+  depsBuildBuild = [
+    pkg-config
+  ];
+  nativeBuildInputs = [ meson pkg-config ninja wayland-scanner scdoc ];
+  buildInputs = [ wayland wayland-protocols ];
+
+  meta = with lib; {
+    description = "Day/night gamma adjustments for Wayland";
+    longDescription = ''
+      Day/night gamma adjustments for Wayland compositors supporting
+      wlr-gamma-control-unstable-v1.
+    '';
+    homepage = "https://sr.ht/~kennylevinsen/wlsunset/";
+    changelog = "https://git.sr.ht/~kennylevinsen/wlsunset/refs/${version}";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+    mainProgram = "wlsunset";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wluma/Cargo.lock b/nixpkgs/pkgs/tools/wayland/wluma/Cargo.lock
new file mode 100644
index 000000000000..22a0f9a329db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wluma/Cargo.lock
@@ -0,0 +1,1499 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr 2.5.0",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
+
+[[package]]
+name = "ash"
+version = "0.37.2+1.3.238"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28bf19c1f0a470be5fbf7522a308a05df06610252c5bcf5143e1b23f629a9a03"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bindgen"
+version = "0.65.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.22",
+ "which",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "cc"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom 7.1.3",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys 0.8.3",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d1075c37807dcf850c379432f0df05ba52cc30f279c5cfc43cc221ce7f8579"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5044281f61b27bc598f2f6647d480aed48d2bf52d6eb0b627d84c0361b17aa70"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61b50bc93ba22c27b0d31128d2d130a0a6b3d267ae27ef7e4fae2167dfe8781c"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ddc"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba69f2c53e320fc4abad17cb02bbbf04d1a36f18e9907f347589ec5991b3c6c5"
+dependencies = [
+ "mccs",
+]
+
+[[package]]
+name = "ddc-hi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c6747b17c926a2aa34739b30f1a6cc726e3a7baf0e2f69a4c03a95cf5de94de"
+dependencies = [
+ "anyhow",
+ "ddc",
+ "ddc-i2c",
+ "ddc-macos",
+ "ddc-winapi",
+ "edid",
+ "log",
+ "mccs",
+ "mccs-caps",
+ "mccs-db",
+ "nvapi",
+]
+
+[[package]]
+name = "ddc-i2c"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66503057bd41fc21b532b3ebe33b2ec57e5d4971fcfc3844306ebcb499b6c8c2"
+dependencies = [
+ "ddc",
+ "i2c",
+ "i2c-linux",
+ "resize-slice",
+]
+
+[[package]]
+name = "ddc-macos"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbaf316c113cfc30da8856c8104dfb4168b73fdd78562d1542e358fe8299dea"
+dependencies = [
+ "core-foundation",
+ "core-foundation-sys 0.8.3",
+ "core-graphics",
+ "ddc",
+ "io-kit-sys",
+ "mach 0.3.2",
+ "thiserror",
+]
+
+[[package]]
+name = "ddc-winapi"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3238e71b65c870e236de529546a689202fca64a2eaeec43995d28f6920d7fc9e"
+dependencies = [
+ "ddc",
+ "widestring",
+ "winapi",
+]
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "downcast"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1"
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "edid"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24ce75530893d834dcfe3bb67ce0e7dec489484e7cb4423ca31618af4bab24fe"
+dependencies = [
+ "nom 3.2.1",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "env_logger"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "fragile"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa"
+
+[[package]]
+name = "futures-core"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "i2c"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60c7b7bdd7b3a985fdcf94a0d7d98e7a47fde8b7f22fb55ce1a91cc104a2ce9a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "i2c-linux"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0268a871aaa071221d6c2875ebedcf64710e59b0d87c68c8faf5e98b87dd2a4"
+dependencies = [
+ "bitflags",
+ "i2c",
+ "i2c-linux-sys",
+ "resize-slice",
+ "udev",
+]
+
+[[package]]
+name = "i2c-linux-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55cd060ed0016621d3da4ed3a23b0158084de90d1f3a8e59f3d391aacd3bbcf8"
+dependencies = [
+ "bitflags",
+ "byteorder",
+ "libc",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys 0.8.3",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "inotify"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf888f9575c290197b2c948dc9e9ff10bd1a39ad1ea8585f734585fa6b9d3f9"
+dependencies = [
+ "bitflags",
+ "futures-core",
+ "inotify-sys",
+ "libc",
+ "tokio",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "io-kit-sys"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f21dcc74995dd4cd090b147e79789f8d65959cbfb5f0b118002db869ea3bd0a0"
+dependencies = [
+ "core-foundation-sys 0.6.2",
+ "mach 0.2.3",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+
+[[package]]
+name = "js-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.141"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libudev-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "mach"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86dd2487cdfea56def77b88438a2c915fb45113c5319bfe7e14306ca4cd0b0e1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "mach"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "mccs"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74366c6da4179141e0d4551a46799a7e667a68eda60561690d5048bd8e0f8422"
+dependencies = [
+ "void",
+]
+
+[[package]]
+name = "mccs-caps"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9766b1345aec53f3f1781797e31f7367a8c53871a0e30214d8372fe2ccbe3ce"
+dependencies = [
+ "mccs",
+ "nom 3.2.1",
+]
+
+[[package]]
+name = "mccs-db"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99726fbbe1e11e2908c461e8fab6c9106a5cb13338cc4feb68a01cced38026d0"
+dependencies = [
+ "mccs",
+ "nom 3.2.1",
+ "serde",
+ "serde_derive",
+ "serde_yaml 0.7.5",
+]
+
+[[package]]
+name = "memchr"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "mio"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys",
+]
+
+[[package]]
+name = "mockall"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96"
+dependencies = [
+ "cfg-if",
+ "downcast",
+ "fragile",
+ "lazy_static",
+ "mockall_derive",
+ "predicates",
+ "predicates-tree",
+]
+
+[[package]]
+name = "mockall_derive"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb"
+dependencies = [
+ "cfg-if",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nom"
+version = "3.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05aec50c70fd288702bcd93284a8444607f3292dbdf2a30de5ea5dcdbe72287b"
+dependencies = [
+ "memchr 1.0.2",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr 2.5.0",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "nvapi"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c63de8cd8362e2c38d1a48dea6ae68e6293a8d8d22a52180d0f8dcc779b3158"
+dependencies = [
+ "i2c",
+ "log",
+ "nvapi-sys",
+ "void",
+]
+
+[[package]]
+name = "nvapi-sys"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b29e9a9393c69ee856bfcf5f76ed1ef32d2c0dd6f58558fd43334278fc1e7ea7"
+dependencies = [
+ "bitflags",
+ "winapi",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "predicates"
+version = "2.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd"
+dependencies = [
+ "difflib",
+ "float-cmp",
+ "itertools",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9825a04601d60621feed79c4e6b56d65db77cdca55cef43b46b0de1096d1c282"
+dependencies = [
+ "proc-macro2",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe8df9bd9fe9d1742a9e17f8129712801b428f6d4c6059d79bacea58f0b0142d"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d"
+dependencies = [
+ "aho-corasick",
+ "memchr 2.5.0",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "resize-slice"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a3cb2f74a9891e76958b9e0ccd269a25b466c3ae3bb3efd71db157248308c4a"
+dependencies = [
+ "uninitialized",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "ryu"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scratch"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2"
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef8099d3df28273c99a1728190c7a9f19d444c941044f64adf986bee7ec53051"
+dependencies = [
+ "dtoa",
+ "linked-hash-map",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92b5b431e8907b50339b51223b97d102db8d987ced36f6e4d03621db9316c834"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8"
+
+[[package]]
+name = "thiserror"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "tokio"
+version = "1.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae"
+dependencies = [
+ "autocfg",
+ "libc",
+ "mio",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "git+https://github.com/HarveyHunt/toml?branch=dotted-table-parsing-toml#7db18be32494855199ed827ac389e161914bd20d"
+dependencies = [
+ "serde",
+ "toml_datetime",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.5.0"
+source = "git+https://github.com/HarveyHunt/toml?branch=dotted-table-parsing-toml#7db18be32494855199ed827ac389e161914bd20d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "udev"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47504d1a49b2ea1b133e7ddd1d9f0a83cf03feb9b440c2c470d06db4589cf301"
+dependencies = [
+ "libc",
+ "libudev-sys",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "uninitialized"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74c1aa4511c38276c548406f0b1f5f8b793f000cfb51e18f278a102abd057e81"
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc7ed8ba44ca06be78ea1ad2c3682a43349126c8818054231ee6f4748012aed2"
+
+[[package]]
+name = "v4l"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8fbfea44a46799d62c55323f3c55d06df722fbe577851d848d328a1041c3403"
+dependencies = [
+ "bitflags",
+ "libc",
+ "v4l-sys",
+]
+
+[[package]]
+name = "v4l-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16214e9b9476f0e76d117945c9c18a46a2602643c917a75b718ae2cf5395fa30"
+dependencies = [
+ "bindgen",
+]
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+
+[[package]]
+name = "wayland-client"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
+dependencies = [
+ "bitflags",
+ "downcast-rs",
+ "libc",
+ "nix",
+ "scoped-tls",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
+dependencies = [
+ "nix",
+ "once_cell",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
+dependencies = [
+ "bitflags",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
+dependencies = [
+ "dlib",
+ "lazy_static",
+ "pkg-config",
+]
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "widestring"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a212922ea58fbf5044f83663aa4fc6281ff890f1fd7546c0c3f52f5290831781"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "wluma"
+version = "4.3.0"
+dependencies = [
+ "ash",
+ "chrono",
+ "ddc-hi",
+ "env_logger",
+ "inotify",
+ "itertools",
+ "lazy_static",
+ "log",
+ "mockall",
+ "serde",
+ "serde_yaml 0.9.16",
+ "toml",
+ "v4l",
+ "wayland-client",
+ "wayland-protocols",
+ "xdg",
+]
+
+[[package]]
+name = "xdg"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4583db5cbd4c4c0303df2d15af80f0539db703fa1c68802d4cbbd2dd0f88f6"
+dependencies = [
+ "dirs",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
diff --git a/nixpkgs/pkgs/tools/wayland/wluma/default.nix b/nixpkgs/pkgs/tools/wayland/wluma/default.nix
new file mode 100644
index 000000000000..07142210c303
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wluma/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromGitHub
+, makeWrapper
+, rustPlatform
+, vulkan-loader
+, wayland
+, pkg-config
+, udev
+, v4l-utils
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wluma";
+  version = "4.3.0";
+
+  src = fetchFromGitHub {
+    owner = "maximbaz";
+    repo = "wluma";
+    rev = version;
+    sha256 = "sha256-FaX87k8LdBhrBX4qvokSHkcNaQZ0+oSbkn9d0dK6FGo=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "toml-0.5.9" = "sha256-WUQFF9Hfo3JK65AKAF7qNZex6l7F3N8HXmJlu8cJUEE=";
+    };
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    udev
+    v4l-utils
+    vulkan-loader
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/wluma \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ wayland ]}"
+  '';
+
+  meta = with lib; {
+    description = "Automatic brightness adjustment based on screen contents and ALS";
+    homepage = "https://github.com/maximbaz/wluma";
+    changelog = "https://github.com/maximbaz/wluma/releases/tag/${version}";
+    license = licenses.isc;
+    maintainers = with maintainers; [ yshym jmc-figueira ];
+    platforms = platforms.linux;
+    mainProgram = "wluma";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wob/default.nix b/nixpkgs/pkgs/tools/wayland/wob/default.nix
new file mode 100644
index 000000000000..f51ae7dc7657
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wob/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, inih
+, meson
+, ninja
+, pkg-config
+, cmocka
+, scdoc
+, wayland-scanner
+, wayland
+, wayland-protocols
+, libseccomp
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wob";
+  version = "0.15.1";
+
+  src = fetchFromGitHub {
+    owner = "francma";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-9LFAEo17w861ldMJU+t1oLAKoM6gJc4Em4tSwQDXbKU=";
+  };
+
+  strictDeps = true;
+  depsBuildBuild = [
+    pkg-config
+  ];
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-scanner ];
+  buildInputs = [ cmocka inih wayland wayland-protocols ]
+    ++ lib.optional stdenv.isLinux libseccomp;
+
+  mesonFlags = lib.optional stdenv.isLinux "-Dseccomp=enabled";
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "A lightweight overlay bar for Wayland";
+    longDescription = ''
+      A lightweight overlay volume/backlight/progress/anything bar for Wayland,
+      inspired by xob.
+    '';
+    changelog = "https://github.com/francma/wob/releases/tag/${version}";
+    license = licenses.isc;
+    maintainers = with maintainers; [ primeos ];
+    platforms = platforms.linux;
+    mainProgram = "wob";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wpaperd/Cargo.lock b/nixpkgs/pkgs/tools/wayland/wpaperd/Cargo.lock
new file mode 100644
index 000000000000..ea07ee7e61dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wpaperd/Cargo.lock
@@ -0,0 +1,2041 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "atomic"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.59.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "clap 2.34.0",
+ "env_logger 0.9.3",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "which",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitreader"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d84ea71c85d1fe98fe67a9b9988b1695bc24c0b0d3bfb18d4c510f44b4b09941"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "calloop"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a59225be45a478d772ce015d9743e49e92798ece9e34eda9a6aa2a6a7f40192"
+dependencies = [
+ "log",
+ "nix 0.25.1",
+ "slotmap",
+ "thiserror",
+ "vec_map",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "num-integer",
+ "num-traits",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "4.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0b0588d44d4d63a87dbd75c136c166bbfd9a86a31cb89e09906521c7d3f5e3"
+dependencies = [
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "is-terminal",
+ "once_cell",
+ "strsim 0.10.0",
+ "termcolor",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd125be87bf4c255ebc50de0b7f4d2a6201e8ac3dc86e39c0ad081dc5e7236fe"
+dependencies = [
+ "clap 4.1.6",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clap_mangen"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48283ce8d5cd9513633949a674a0442bcb507ab61ed6533863437052ddbb494b"
+dependencies = [
+ "clap 4.1.6",
+ "roff",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color-eyre"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204"
+dependencies = [
+ "backtrace",
+ "eyre",
+ "indenter",
+ "once_cell",
+ "owo-colors",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset 0.7.1",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dav1d"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7284148338177cb1cd0d0cdd7bf26440f8326999063eed294aa7d77b46a7e263"
+dependencies = [
+ "dav1d-sys",
+]
+
+[[package]]
+name = "dav1d-sys"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88e40c4c77d141a3b70113ee45a1502b9c80e24f176958d39a8361abcf30c883"
+dependencies = [
+ "bindgen",
+ "system-deps",
+]
+
+[[package]]
+name = "dcv-color-primitives"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1457f4dd8395fef9f61996b5783b82ed7b234b4b55e1843d04e07fded0538005"
+dependencies = [
+ "paste",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "eyre"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
+dependencies = [
+ "indenter",
+ "once_cell",
+]
+
+[[package]]
+name = "fallible_collections"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f57ccc32870366ae684be48b32a1a2e196f98a42a9b4361fe77e13fd4a34755"
+dependencies = [
+ "hashbrown",
+]
+
+[[package]]
+name = "figment"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e56602b469b2201400dec66a66aec5a9b8761ee97cd1b8c96ab2483fcc16cc9"
+dependencies = [
+ "atomic",
+ "serde",
+ "toml 0.5.11",
+ "uncased",
+ "version_check",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "windows-sys",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "flexi_logger"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "010b5c83ec9d37d9636aa37132b777ef0818949b217109de9b88784e923bbf3a"
+dependencies = [
+ "atty",
+ "chrono",
+ "glob",
+ "lazy_static",
+ "log",
+ "nu-ansi-term",
+ "thiserror",
+]
+
+[[package]]
+name = "fsevent"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6"
+dependencies = [
+ "bitflags",
+ "fsevent-sys",
+]
+
+[[package]]
+name = "fsevent-sys"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hotwatch"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39301670a6f5798b75f36a1b149a379a50df5aa7c71be50f4b41ec6eab445cb8"
+dependencies = [
+ "log",
+ "notify",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+dependencies = [
+ "humantime",
+ "serde",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "image"
+version = "0.24.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "dav1d",
+ "dcv-color-primitives",
+ "jpeg-decoder",
+ "mp4parse",
+ "num-rational",
+ "num-traits",
+ "png",
+]
+
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "inotify"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4816c66d2c8ae673df83366c18341538f234a26d65a9ecea5c348b453ac1d02f"
+dependencies = [
+ "bitflags",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memmap2"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "mio-extras"
+version = "2.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19"
+dependencies = [
+ "lazycell",
+ "log",
+ "mio",
+ "slab",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "mp4parse"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67d2b6c6932c2cce721e9bd213461412300466d4613d93d25a36fb8881d9f8de"
+dependencies = [
+ "bitreader",
+ "byteorder",
+ "env_logger 0.8.4",
+ "fallible_collections",
+ "log",
+ "num-traits",
+ "static_assertions",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "new_mime_guess"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2d684d1b59e0dc07b37e2203ef576987473288f530082512aff850585c61b1f"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "nix"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
+dependencies = [
+ "autocfg",
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nom8"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "notify"
+version = "4.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae03c8c853dba7bfd23e571ff0cff7bc9dceb40a4cd684cd1681824183f45257"
+dependencies = [
+ "bitflags",
+ "filetime",
+ "fsevent",
+ "fsevent-sys",
+ "inotify",
+ "libc",
+ "mio",
+ "mio-extras",
+ "walkdir",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "paste"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba"
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "png"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "roff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.36.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2"
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.16.0"
+source = "git+https://github.com/Smithay/client-toolkit#a3d1af852a607587114ccc6631c87046ecc898d3"
+dependencies = [
+ "bitflags",
+ "calloop",
+ "dlib",
+ "lazy_static",
+ "log",
+ "memmap2",
+ "nix 0.26.2",
+ "pkg-config",
+ "thiserror",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-cursor",
+ "wayland-protocols",
+ "wayland-protocols-wlr",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml 0.5.11",
+ "version-compare",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c9afddd2cec1c0909f06b00ef33f94ab2cc0578c4a610aa208ddfec8aa2b43a"
+dependencies = [
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7afcae9e3f0fe2c370fd4657108972cbb2fa9db1b9f84849cefd80741b01cb6"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e6a7712b49e1775fb9a7b998de6635b299237f48b404dde71704f2e0e7f37e5"
+dependencies = [
+ "indexmap",
+ "nom8",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+]
+
+[[package]]
+name = "uncased"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi 0.3.9",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "wayland-backend"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79ebd48bfc1178c9190c7ff80cc822b3335ffc83141e9aa723168f377257623e"
+dependencies = [
+ "cc",
+ "downcast-rs",
+ "io-lifetimes",
+ "nix 0.26.2",
+ "scoped-tls",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-client"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85bde68449abab1a808e5227b6e295f4ae3680911eb7711b4a2cb90141edb780"
+dependencies = [
+ "bitflags",
+ "calloop",
+ "log",
+ "nix 0.26.2",
+ "wayland-backend",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-cursor"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d0c3a0d5b4b688b07b0442362d3ed6bf04724fcc16cd69ab6285b90dbc487aa"
+dependencies = [
+ "nix 0.26.2",
+ "wayland-client",
+ "xcursor",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fefbeb8a360abe67ab7c2efe1d297a1a50ee011f5460791bc18870c26bb84e2"
+dependencies = [
+ "bitflags",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-protocols-wlr"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fce991093320e4a6a525876e6b629ab24da25f9baef0c2e0080ad173ec89588a"
+dependencies = [
+ "bitflags",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-protocols",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4834c14b3edf1d9986c83ca79b1e7e3afbe9874c7c144702f6467063259ce45d"
+dependencies = [
+ "proc-macro2",
+ "quick-xml",
+ "quote",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06"
+dependencies = [
+ "dlib",
+ "log",
+ "pkg-config",
+]
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "wpaperd"
+version = "0.3.0"
+dependencies = [
+ "clap 4.1.6",
+ "clap_complete",
+ "clap_mangen",
+ "color-eyre",
+ "dirs",
+ "figment",
+ "flexi_logger",
+ "hotwatch",
+ "humantime-serde",
+ "image",
+ "log",
+ "mime",
+ "new_mime_guess",
+ "nix 0.26.2",
+ "rand",
+ "serde",
+ "smithay-client-toolkit",
+ "toml 0.7.2",
+ "walkdir",
+ "xdg",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "xcursor"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "xdg"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4583db5cbd4c4c0303df2d15af80f0539db703fa1c68802d4cbbd2dd0f88f6"
+dependencies = [
+ "dirs",
+]
diff --git a/nixpkgs/pkgs/tools/wayland/wpaperd/default.nix b/nixpkgs/pkgs/tools/wayland/wpaperd/default.nix
new file mode 100644
index 000000000000..dc7ce198e8e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wpaperd/default.nix
@@ -0,0 +1,47 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, libxkbcommon }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wpaperd";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "danyspin97";
+    repo = pname;
+    rev = version;
+    sha256 = "cgjHCSBrkX3aoz42qBS/1JUGhc7sZKarKByntp7ubaQ=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [
+    libxkbcommon
+  ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "smithay-client-toolkit-0.16.0" = "iPDL7pxTez4EnIBaUH25lLSWpu3RRL2QBF9pfdTDsP8=";
+    };
+  };
+
+  postPatch = ''
+    rm Cargo.lock
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "Minimal wallpaper daemon for Wayland";
+    longDescription = ''
+      It allows the user to choose a different image for each output (aka for each monitor)
+      just as swaybg. Moreover, a directory can be chosen and wpaperd will randomly choose
+      an image from it. Optionally, the user can set a duration, after which the image
+      displayed will be changed with another random one.
+    '';
+    homepage = "https://github.com/danyspin97/wpaperd";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ DPDmancul ];
+    mainProgram = "wpaperd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wshowkeys/default.nix b/nixpkgs/pkgs/tools/wayland/wshowkeys/default.nix
new file mode 100644
index 000000000000..ef0c6fd6cd34
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wshowkeys/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub
+, meson, pkg-config, wayland-scanner, ninja
+, cairo, libinput, pango, wayland, wayland-protocols, libxkbcommon
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wshowkeys-unstable";
+  version = "2021-08-01";
+
+  src = fetchFromGitHub {
+    owner = "ammgws";
+    repo = "wshowkeys";
+    rev = "e8bfc78f08ebdd1316daae59ecc77e62bba68b2b";
+    sha256 = "sha256-/HvNCQWsXOJZeCxHWmsLlbBDhBzF7XP/SPLdDiWMDC4=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ meson pkg-config wayland-scanner ninja ];
+  buildInputs = [ cairo libinput pango wayland wayland-protocols libxkbcommon ];
+
+  meta = with lib; {
+    description = "Displays keys being pressed on a Wayland session";
+    longDescription = ''
+      Displays keypresses on screen on supported Wayland compositors (requires
+      wlr_layer_shell_v1 support).
+      Note: This tool requires root permissions to read input events, but these
+      permissions are dropped after startup. The NixOS module provides such a
+      setuid binary (use "programs.wshowkeys.enable = true;").
+    '';
+    homepage = "https://github.com/ammgws/wshowkeys";
+    license = with licenses; [ gpl3Only mit ];
+    # Some portions of the code are taken from Sway which is MIT licensed.
+    # TODO: gpl3Only or gpl3Plus (ask upstream)?
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos berbiche ];
+    mainProgram = "wshowkeys";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/wtype/default.nix b/nixpkgs/pkgs/tools/wayland/wtype/default.nix
new file mode 100644
index 000000000000..f9461ef7613b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/wtype/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+
+, meson
+, ninja
+, pkg-config
+
+, libxkbcommon
+, wayland
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wtype";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "atx";
+    repo = "wtype";
+    rev = "v${version}";
+    hash = "sha256-TfpzAi0mkXugQn70MISyNFOXIJpDwvgh3enGv0Xq8S4=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ meson ninja pkg-config wayland ];
+  buildInputs = [ libxkbcommon wayland ];
+
+  meta = with lib; {
+    description = "xdotool type for wayland";
+    homepage = "https://github.com/atx/wtype";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ justinlovinger ];
+    mainProgram = "wtype";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/wayland/xwaylandvideobridge/default.nix b/nixpkgs/pkgs/tools/wayland/xwaylandvideobridge/default.nix
new file mode 100644
index 000000000000..5614ef40d537
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/xwaylandvideobridge/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, extra-cmake-modules
+, pkg-config
+, qtbase
+, qtquickcontrols2
+, qtx11extras
+, kdelibs4support
+, kpipewire
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xwaylandvideobridge";
+  version = "0.4.0";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/xwaylandvideobridge/xwaylandvideobridge-${finalAttrs.version}.tar.xz";
+    hash = "sha256-6nKseypnV46ZlNywYZYC6tMJekb7kzZmHaIA5jkn6+Y=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtquickcontrols2
+    qtx11extras
+    kdelibs4support
+    kpipewire
+  ];
+
+  meta = {
+    description = "Utility to allow streaming Wayland windows to X applications";
+    homepage = "https://invent.kde.org/system/xwaylandvideobridge";
+    license = with lib.licenses; [ bsd3 cc0 gpl2Plus ];
+    maintainers = with lib.maintainers; [ stepbrobd ];
+    platforms = lib.platforms.linux;
+    mainProgram = "xwaylandvideobridge";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/wayland/ydotool/default.nix b/nixpkgs/pkgs/tools/wayland/ydotool/default.nix
new file mode 100644
index 000000000000..42f95735de59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/ydotool/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, cmake, scdoc, util-linux, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "ydotool";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "ReimuNotMoe";
+    repo = "ydotool";
+    rev = "v${version}";
+    hash = "sha256-MtanR+cxz6FsbNBngqLE+ITKPZFHmWGsD1mBDk0OVng=";
+  };
+
+  postPatch = ''
+    substituteInPlace Daemon/ydotoold.c \
+      --replace "/usr/bin/xinput" "${xorg.xinput}/bin/xinput"
+    substituteInPlace Daemon/ydotool.service.in \
+      --replace "/usr/bin/kill" "${util-linux}/bin/kill"
+  '';
+
+  strictDeps = true;
+  nativeBuildInputs = [ cmake scdoc ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ReimuNotMoe/ydotool";
+    description = "Generic Linux command-line automation tool";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ willibutz kraem ];
+    platforms = with platforms; linux;
+  };
+}